aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile.am5
-rw-r--r--src/common/Makefile.am67
-rw-r--r--src/common/Makefile.nmake11
-rw-r--r--src/common/address.c326
-rw-r--r--src/common/address.h32
-rw-r--r--src/common/aes.c43
-rw-r--r--src/common/aes.h6
-rw-r--r--src/common/backtrace.c233
-rw-r--r--src/common/backtrace.h21
-rw-r--r--src/common/ciphers.inc169
-rw-r--r--src/common/compat.c688
-rw-r--r--src/common/compat.h99
-rw-r--r--src/common/compat_libevent.c175
-rw-r--r--src/common/compat_libevent.h13
-rw-r--r--src/common/container.c214
-rw-r--r--src/common/container.h92
-rw-r--r--src/common/crypto.c716
-rw-r--r--src/common/crypto.h61
-rw-r--r--src/common/crypto_curve25519.c191
-rw-r--r--src/common/crypto_curve25519.h74
-rw-r--r--src/common/crypto_format.c45
-rw-r--r--src/common/di_ops.c93
-rw-r--r--src/common/di_ops.h18
-rw-r--r--src/common/get_mozilla_ciphers.py192
-rw-r--r--src/common/include.am139
-rw-r--r--src/common/linux_syscalls.inc1153
-rw-r--r--src/common/log.c336
-rw-r--r--src/common/memarea.c56
-rw-r--r--src/common/memarea.h6
-rw-r--r--src/common/mempool.c16
-rw-r--r--src/common/mempool.h8
-rw-r--r--src/common/procmon.c41
-rw-r--r--src/common/procmon.h2
-rw-r--r--src/common/sandbox.c1758
-rw-r--r--src/common/sandbox.h222
-rw-r--r--src/common/sha256.c331
-rw-r--r--src/common/testsupport.h80
-rw-r--r--src/common/torgzip.c18
-rw-r--r--src/common/torgzip.h12
-rw-r--r--src/common/torint.h10
-rw-r--r--src/common/torlog.h107
-rw-r--r--src/common/tortls.c603
-rw-r--r--src/common/tortls.h23
-rw-r--r--src/common/util.c1189
-rw-r--r--src/common/util.h174
-rw-r--r--src/config/Makefile.am16
-rw-r--r--src/config/geoip141229
-rw-r--r--src/config/geoip618119
-rw-r--r--src/config/include.am16
-rw-r--r--src/config/mmdb-convert.py466
-rw-r--r--src/config/torrc.sample.in13
-rw-r--r--src/ext/OpenBSD_malloc_Linux.c (renamed from src/common/OpenBSD_malloc_Linux.c)0
-rw-r--r--src/ext/README51
-rw-r--r--src/ext/csiphash.c166
-rw-r--r--src/ext/curve25519_donna/README44
-rw-r--r--src/ext/curve25519_donna/curve25519-donna-c64.c451
-rw-r--r--src/ext/curve25519_donna/curve25519-donna.c732
-rw-r--r--src/ext/eventdns.c (renamed from src/or/eventdns.c)148
-rw-r--r--src/ext/eventdns.h (renamed from src/or/eventdns.h)4
-rw-r--r--src/ext/ht.h (renamed from src/common/ht.h)31
-rw-r--r--src/ext/include.am18
-rw-r--r--src/ext/siphash.h13
-rw-r--r--src/ext/strlcat.c (renamed from src/common/strlcat.c)0
-rw-r--r--src/ext/strlcpy.c (renamed from src/common/strlcpy.c)0
-rw-r--r--src/ext/tinytest.c (renamed from src/test/tinytest.c)157
-rw-r--r--src/ext/tinytest.h (renamed from src/test/tinytest.h)19
-rw-r--r--src/ext/tinytest_demo.c (renamed from src/test/tinytest_demo.c)49
-rw-r--r--src/ext/tinytest_macros.h (renamed from src/test/tinytest_macros.h)27
-rw-r--r--src/ext/tor_queue.h568
-rw-r--r--src/ext/tor_queue.txt883
-rw-r--r--src/include.am7
-rw-r--r--src/or/Makefile.am158
-rw-r--r--src/or/Makefile.nmake81
-rw-r--r--src/or/addressmap.c1078
-rw-r--r--src/or/addressmap.h62
-rw-r--r--src/or/buffers.c282
-rw-r--r--src/or/buffers.h55
-rw-r--r--src/or/channel.c4186
-rw-r--r--src/or/channel.h488
-rw-r--r--src/or/channeltls.c2081
-rw-r--r--src/or/channeltls.h57
-rw-r--r--src/or/circpathbias.c1538
-rw-r--r--src/or/circpathbias.h29
-rw-r--r--src/or/circuitbuild.c4913
-rw-r--r--src/or/circuitbuild.h149
-rw-r--r--src/or/circuitlist.c1326
-rw-r--r--src/or/circuitlist.h68
-rw-r--r--src/or/circuitmux.c1911
-rw-r--r--src/or/circuitmux.h148
-rw-r--r--src/or/circuitmux_ewma.c684
-rw-r--r--src/or/circuitmux_ewma.h29
-rw-r--r--src/or/circuitstats.c1658
-rw-r--r--src/or/circuitstats.h98
-rw-r--r--src/or/circuituse.c711
-rw-r--r--src/or/circuituse.h8
-rw-r--r--src/or/command.c1205
-rw-r--r--src/or/command.h16
-rw-r--r--src/or/config.c4412
-rw-r--r--src/or/config.h78
-rw-r--r--src/or/confparse.c1316
-rw-r--r--src/or/confparse.h137
-rw-r--r--src/or/connection.c1101
-rw-r--r--src/or/connection.h92
-rw-r--r--src/or/connection_edge.c1830
-rw-r--r--src/or/connection_edge.h102
-rw-r--r--src/or/connection_or.c1019
-rw-r--r--src/or/connection_or.h37
-rwxr-xr-x[-rw-r--r--]src/or/control.c922
-rw-r--r--src/or/control.h131
-rw-r--r--src/or/cpuworker.c442
-rw-r--r--src/or/cpuworker.h14
-rw-r--r--src/or/directory.c1185
-rw-r--r--src/or/directory.h36
-rw-r--r--src/or/dirserv.c1553
-rw-r--r--src/or/dirserv.h72
-rw-r--r--src/or/dirvote.c640
-rw-r--r--src/or/dirvote.h79
-rw-r--r--src/or/dns.c1056
-rw-r--r--src/or/dns.h7
-rw-r--r--src/or/dnsserv.c75
-rw-r--r--src/or/dnsserv.h9
-rw-r--r--src/or/entrynodes.c2327
-rw-r--r--src/or/entrynodes.h132
-rw-r--r--src/or/eventdns_tor.h7
-rw-r--r--src/or/ext_orport.c648
-rw-r--r--src/or/ext_orport.h42
-rw-r--r--src/or/fp_pair.c299
-rw-r--r--src/or/fp_pair.h45
-rw-r--r--src/or/geoip.c945
-rw-r--r--src/or/geoip.h33
-rw-r--r--src/or/hibernate.c48
-rw-r--r--src/or/hibernate.h15
-rw-r--r--src/or/include.am225
-rw-r--r--src/or/main.c709
-rw-r--r--src/or/main.h29
-rw-r--r--src/or/microdesc.c274
-rw-r--r--src/or/microdesc.h10
-rw-r--r--src/or/networkstatus.c813
-rw-r--r--src/or/networkstatus.h34
-rw-r--r--src/or/nodelist.c879
-rw-r--r--src/or/nodelist.h46
-rw-r--r--src/or/ntmain.c4
-rw-r--r--src/or/ntmain.h6
-rw-r--r--src/or/onion.c1353
-rw-r--r--src/or/onion.h128
-rw-r--r--src/or/onion_fast.c124
-rw-r--r--src/or/onion_fast.h38
-rw-r--r--src/or/onion_ntor.c300
-rw-r--r--src/or/onion_ntor.h63
-rw-r--r--src/or/onion_tap.c220
-rw-r--r--src/or/onion_tap.h37
-rw-r--r--src/or/or.h1491
-rw-r--r--src/or/policies.c303
-rw-r--r--src/or/policies.h23
-rw-r--r--src/or/reasons.c40
-rw-r--r--src/or/reasons.h6
-rw-r--r--src/or/relay.c1809
-rw-r--r--src/or/relay.h70
-rw-r--r--src/or/rendclient.c215
-rw-r--r--src/or/rendclient.h6
-rw-r--r--src/or/rendcommon.c283
-rw-r--r--src/or/rendcommon.h25
-rw-r--r--src/or/rendmid.c89
-rw-r--r--src/or/rendmid.h6
-rw-r--r--src/or/rendservice.c1908
-rw-r--r--src/or/rendservice.h80
-rw-r--r--src/or/rephist.c292
-rw-r--r--src/or/rephist.h17
-rw-r--r--src/or/replaycache.c204
-rw-r--r--src/or/replaycache.h66
-rwxr-xr-x[-rw-r--r--]src/or/router.c981
-rw-r--r--src/or/router.h47
-rw-r--r--src/or/routerlist.c2917
-rw-r--r--src/or/routerlist.h130
-rw-r--r--src/or/routerparse.c892
-rw-r--r--src/or/routerparse.h22
-rw-r--r--src/or/routerset.c433
-rw-r--r--src/or/routerset.h43
-rw-r--r--src/or/statefile.c649
-rw-r--r--src/or/statefile.h28
-rw-r--r--src/or/status.c72
-rw-r--r--src/or/status.h14
-rw-r--r--src/or/tor_main.c8
-rw-r--r--src/or/transports.c801
-rw-r--r--src/or/transports.h81
-rw-r--r--src/test/Makefile.am49
-rw-r--r--src/test/Makefile.nmake27
-rw-r--r--src/test/bench.c290
-rwxr-xr-xsrc/test/bt_test.py42
-rw-r--r--src/test/include.am121
-rwxr-xr-xsrc/test/ntor_ref.py405
-rw-r--r--src/test/slownacl_curve25519.py117
-rw-r--r--src/test/test-child.c2
-rwxr-xr-xsrc/test/test-network.sh47
-rw-r--r--src/test/test.c1492
-rw-r--r--src/test/test.h137
-rw-r--r--src/test/test_addr.c442
-rw-r--r--src/test/test_bt_cl.c109
-rw-r--r--src/test/test_buffers.c732
-rw-r--r--src/test/test_cell_formats.c1273
-rw-r--r--src/test/test_cell_queue.c158
-rw-r--r--src/test/test_circuitlist.c342
-rw-r--r--src/test/test_circuitmux.c88
-rwxr-xr-xsrc/test/test_cmdline_args.py292
-rw-r--r--src/test/test_config.c438
-rw-r--r--src/test/test_containers.c290
-rw-r--r--src/test/test_controller_events.c307
-rw-r--r--src/test/test_crypto.c574
-rw-r--r--src/test/test_data.c187
-rw-r--r--src/test/test_dir.c1466
-rw-r--r--src/test/test_extorport.c607
-rw-r--r--src/test/test_hs.c129
-rw-r--r--src/test/test_introduce.c528
-rw-r--r--src/test/test_logging.c135
-rw-r--r--src/test/test_microdesc.c171
-rw-r--r--src/test/test_nodelist.c71
-rw-r--r--src/test/test_ntor_cl.c170
-rw-r--r--src/test/test_oom.c372
-rw-r--r--src/test/test_options.c170
-rw-r--r--src/test/test_policy.c437
-rw-r--r--src/test/test_pt.c360
-rw-r--r--src/test/test_relaycell.c249
-rw-r--r--src/test/test_replay.c348
-rw-r--r--src/test/test_routerkeys.c85
-rw-r--r--src/test/test_socks.c393
-rw-r--r--src/test/test_status.c1114
-rw-r--r--src/test/test_util.c986
-rw-r--r--src/tools/Makefile.am22
-rw-r--r--src/tools/Makefile.nmake4
-rw-r--r--src/tools/include.am24
-rw-r--r--src/tools/tor-checkkey.c6
-rw-r--r--src/tools/tor-fw-helper/Makefile.am38
-rw-r--r--src/tools/tor-fw-helper/include.am36
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.c74
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-natpmp.h10
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.c46
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper-upnp.h9
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.c373
-rw-r--r--src/tools/tor-fw-helper/tor-fw-helper.h26
-rw-r--r--src/tools/tor-gencert.c24
-rw-r--r--src/tools/tor-resolve.c83
-rw-r--r--src/win32/Makefile.am3
-rw-r--r--src/win32/include.am3
-rw-r--r--src/win32/orconfig.h17
244 files changed, 113364 insertions, 139529 deletions
diff --git a/src/Makefile.am b/src/Makefile.am
deleted file mode 100644
index fa2dd560a..000000000
--- a/src/Makefile.am
+++ /dev/null
@@ -1,5 +0,0 @@
-
-# leave in dependency order, since common must be built first
-SUBDIRS = common or test tools win32 config
-DIST_SUBDIRS = common or test tools win32 config
-
diff --git a/src/common/Makefile.am b/src/common/Makefile.am
deleted file mode 100644
index 5e7684259..000000000
--- a/src/common/Makefile.am
+++ /dev/null
@@ -1,67 +0,0 @@
-
-noinst_LIBRARIES = libor.a libor-crypto.a libor-event.a
-
-EXTRA_DIST = common_sha1.i sha256.c Makefile.nmake
-
-#CFLAGS = -Wall -Wpointer-arith -O2
-
-if USE_OPENBSD_MALLOC
-libor_extra_source=OpenBSD_malloc_Linux.c
-else
-libor_extra_source=
-endif
-
-libor_a_SOURCES = \
- address.c \
- compat.c \
- container.c \
- di_ops.c \
- log.c \
- memarea.c \
- mempool.c \
- procmon.c \
- util.c \
- util_codedigest.c \
- $(libor_extra_source)
-
-libor_crypto_a_SOURCES = \
- aes.c \
- crypto.c \
- torgzip.c \
- tortls.c
-
-libor_event_a_SOURCES = compat_libevent.c
-
-noinst_HEADERS = \
- address.h \
- aes.h \
- ciphers.inc \
- compat.h \
- compat_libevent.h \
- container.h \
- crypto.h \
- di_ops.h \
- ht.h \
- memarea.h \
- mempool.h \
- procmon.h \
- strlcat.c \
- strlcpy.c \
- torgzip.h \
- torint.h \
- torlog.h \
- tortls.h \
- util.h
-
-common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)
- if test "@SHA1SUM@" != none; then \
- (cd "$(srcdir)" && "@SHA1SUM@" $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)) | "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > common_sha1.i; \
- elif test "@OPENSSL@" != none; then \
- (cd "$(srcdir)" && "@OPENSSL@" sha1 $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(noinst_HEADERS)) | "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > common_sha1.i; \
- else \
- rm common_sha1.i; \
- touch common_sha1.i; \
- fi
-
-util_codedigest.o: common_sha1.i
-crypto.o: sha256.c
diff --git a/src/common/Makefile.nmake b/src/common/Makefile.nmake
index e54827367..0ebeaaaf7 100644
--- a/src/common/Makefile.nmake
+++ b/src/common/Makefile.nmake
@@ -1,15 +1,19 @@
all: libor.lib libor-crypto.lib libor-event.lib
-CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\ext
LIBOR_OBJECTS = address.obj compat.obj container.obj di_ops.obj \
log.obj memarea.obj mempool.obj procmon.obj util.obj \
util_codedigest.obj
-LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj torgzip.obj tortls.obj
+LIBOR_CRYPTO_OBJECTS = aes.obj crypto.obj torgzip.obj tortls.obj \
+ crypto_curve25519.obj curve25519-donna.obj
LIBOR_EVENT_OBJECTS = compat_libevent.obj
+curve25519-donna.obj: ..\ext\curve25519_donna\curve25519-donna.c
+ $(CC) $(CFLAGS) /D inline=_inline /c ..\ext\curve25519_donna\curve25519-donna.c
+
libor.lib: $(LIBOR_OBJECTS)
lib $(LIBOR_OBJECTS) /out:libor.lib
@@ -18,3 +22,6 @@ libor-crypto.lib: $(LIBOR_CRYPTO_OBJECTS)
libor-event.lib: $(LIBOR_EVENT_OBJECTS)
lib $(LIBOR_EVENT_OBJECTS) /out:libor-event.lib
+
+clean:
+ del *.obj *.lib libor*.lib
diff --git a/src/common/address.c b/src/common/address.c
index df26f61f8..2825b123d 100644
--- a/src/common/address.c
+++ b/src/common/address.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -14,6 +14,7 @@
#include "address.h"
#include "torlog.h"
#include "container.h"
+#include "sandbox.h"
#ifdef _WIN32
#include <process.h>
@@ -181,6 +182,16 @@ tor_addr_make_unspec(tor_addr_t *a)
a->family = AF_UNSPEC;
}
+/** Set address <b>a</b> to the null address in address family <b>family</b>.
+ * The null address for AF_INET is 0.0.0.0. The null address for AF_INET6 is
+ * [::]. AF_UNSPEC is all null. */
+void
+tor_addr_make_null(tor_addr_t *a, sa_family_t family)
+{
+ memset(a, 0, sizeof(*a));
+ a->family = family;
+}
+
/** Similar behavior to Unix gethostbyname: resolve <b>name</b>, and set
* *<b>addr</b> to the proper IP address and family. The <b>family</b>
* argument (which must be AF_INET, AF_INET6, or AF_UNSPEC) declares a
@@ -224,8 +235,10 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr)
memset(&hints, 0, sizeof(hints));
hints.ai_family = family;
hints.ai_socktype = SOCK_STREAM;
- err = getaddrinfo(name, NULL, &hints, &res);
- if (!err) {
+ err = sandbox_getaddrinfo(name, NULL, &hints, &res);
+ /* The check for 'res' here shouldn't be necessary, but it makes static
+ * analysis tools happy. */
+ if (!err && res) {
best = NULL;
for (res_p = res; res_p; res_p = res_p->ai_next) {
if (family == AF_UNSPEC) {
@@ -305,7 +318,8 @@ tor_addr_lookup(const char *name, uint16_t family, tor_addr_t *addr)
* also treated as internal for now.)
*/
int
-tor_addr_is_internal(const tor_addr_t *addr, int for_listening)
+tor_addr_is_internal_(const tor_addr_t *addr, int for_listening,
+ const char *filename, int lineno)
{
uint32_t iph4 = 0;
uint32_t iph6[4];
@@ -355,8 +369,8 @@ tor_addr_is_internal(const tor_addr_t *addr, int for_listening)
/* unknown address family... assume it's not safe for external use */
/* rather than tor_assert(0) */
- log_warn(LD_BUG, "tor_addr_is_internal() called with a non-IP address of "
- "type %d", (int)v_family);
+ log_warn(LD_BUG, "tor_addr_is_internal() called from %s:%d with a "
+ "non-IP address of type %d", filename, lineno, (int)v_family);
tor_fragile_assert();
return 1;
}
@@ -558,9 +572,22 @@ tor_addr_to_PTR_name(char *out, size_t outlen,
*
* Return an address family on success, or -1 if an invalid address string is
* provided.
+ *
+ * If 'flags & TAPMP_EXTENDED_STAR' is false, then the wildcard address '*'
+ * yield an IPv4 wildcard.
+ *
+ * If 'flags & TAPMP_EXTENDED_STAR' is true, then the wildcard address '*'
+ * yields an AF_UNSPEC wildcard address, and the following change is made
+ * in the grammar above:
+ * Address ::= IPv4Address / "[" IPv6Address "]" / "*" / "*4" / "*6"
+ * with the new "*4" and "*6" productions creating a wildcard to match
+ * IPv4 or IPv6 addresses.
+ *
*/
int
-tor_addr_parse_mask_ports(const char *s, tor_addr_t *addr_out,
+tor_addr_parse_mask_ports(const char *s,
+ unsigned flags,
+ tor_addr_t *addr_out,
maskbits_t *maskbits_out,
uint16_t *port_min_out, uint16_t *port_max_out)
{
@@ -617,9 +644,23 @@ tor_addr_parse_mask_ports(const char *s, tor_addr_t *addr_out,
memset(addr_out, 0, sizeof(tor_addr_t));
if (!strcmp(address, "*")) {
- family = AF_INET; /* AF_UNSPEC ???? XXXX_IP6 */
+ if (flags & TAPMP_EXTENDED_STAR) {
+ family = AF_UNSPEC;
+ tor_addr_make_unspec(addr_out);
+ } else {
+ family = AF_INET;
+ tor_addr_from_ipv4h(addr_out, 0);
+ }
+ any_flag = 1;
+ } else if (!strcmp(address, "*4") && (flags & TAPMP_EXTENDED_STAR)) {
+ family = AF_INET;
tor_addr_from_ipv4h(addr_out, 0);
any_flag = 1;
+ } else if (!strcmp(address, "*6") && (flags & TAPMP_EXTENDED_STAR)) {
+ static char nil_bytes[16] = { 0,0,0,0, 0,0,0,0, 0,0,0,0, 0,0,0,0 };
+ family = AF_INET6;
+ tor_addr_from_ipv6_bytes(addr_out, nil_bytes);
+ any_flag = 1;
} else if (tor_inet_pton(AF_INET6, address, &in6_tmp) > 0) {
family = AF_INET6;
tor_addr_from_in6(addr_out, &in6_tmp);
@@ -835,6 +876,32 @@ tor_addr_copy(tor_addr_t *dest, const tor_addr_t *src)
memcpy(dest, src, sizeof(tor_addr_t));
}
+/** Copy a tor_addr_t from <b>src</b> to <b>dest</b>, taking extra case to
+ * copy only the well-defined portions. Used for computing hashes of
+ * addresses.
+ */
+void
+tor_addr_copy_tight(tor_addr_t *dest, const tor_addr_t *src)
+{
+ tor_assert(src != dest);
+ tor_assert(src);
+ tor_assert(dest);
+ memset(dest, 0, sizeof(tor_addr_t));
+ dest->family = src->family;
+ switch (tor_addr_family(src))
+ {
+ case AF_INET:
+ dest->addr.in_addr.s_addr = src->addr.in_addr.s_addr;
+ break;
+ case AF_INET6:
+ memcpy(dest->addr.in6_addr.s6_addr, src->addr.in6_addr.s6_addr, 16);
+ case AF_UNSPEC:
+ break;
+ default:
+ tor_fragile_assert();
+ }
+}
+
/** Given two addresses <b>addr1</b> and <b>addr2</b>, return 0 if the two
* addresses are equivalent under the mask mbits, less than 0 if addr1
* precedes addr2, and greater than 0 otherwise.
@@ -956,19 +1023,17 @@ tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2,
}
}
-/** Return a hash code based on the address addr */
-unsigned int
+/** Return a hash code based on the address addr. DOCDOC extra */
+uint64_t
tor_addr_hash(const tor_addr_t *addr)
{
switch (tor_addr_family(addr)) {
case AF_INET:
- return tor_addr_to_ipv4h(addr);
+ return siphash24g(&addr->addr.in_addr.s_addr, 4);
case AF_UNSPEC:
return 0x4e4d5342;
- case AF_INET6: {
- const uint32_t *u = tor_addr_to_in6_addr32(addr);
- return u[0] + u[1] + u[2] + u[3];
- }
+ case AF_INET6:
+ return siphash24g(&addr->addr.in6_addr.s6_addr, 16);
default:
tor_fragile_assert();
return 0;
@@ -1007,6 +1072,19 @@ fmt_addr_impl(const tor_addr_t *addr, int decorate)
return "???";
}
+/** Return a string representing the pair <b>addr</b> and <b>port</b>.
+ * This calls fmt_and_decorate_addr internally, so IPv6 addresses will
+ * have brackets, and the caveats of fmt_addr_impl apply.
+ */
+const char *
+fmt_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ /* Add space for a colon and up to 5 digits. */
+ static char buf[TOR_ADDR_BUF_LEN + 6];
+ tor_snprintf(buf, sizeof(buf), "%s:%u", fmt_and_decorate_addr(addr), port);
+ return buf;
+}
+
/** Like fmt_addr(), but takes <b>addr</b> as a host-order IPv4
* addresses. Also not thread-safe, also clobbers its return buffer on
* repeated calls. */
@@ -1136,6 +1214,8 @@ get_interface_addresses_raw(int severity)
result = smartlist_new();
for (i = ifa; i; i = i->ifa_next) {
tor_addr_t tmp;
+ if ((i->ifa_flags & (IFF_UP | IFF_RUNNING)) != (IFF_UP | IFF_RUNNING))
+ continue;
if (!i->ifa_addr)
continue;
if (i->ifa_addr->sa_family != AF_INET &&
@@ -1220,14 +1300,14 @@ get_interface_addresses_raw(int severity)
/* This interface, AFAICT, only supports AF_INET addresses */
fd = socket(AF_INET, SOCK_DGRAM, 0);
if (fd < 0) {
- log(severity, LD_NET, "socket failed: %s", strerror(errno));
+ tor_log(severity, LD_NET, "socket failed: %s", strerror(errno));
goto done;
}
/* Guess how much space we need. */
ifc.ifc_len = sz = 15*1024;
ifc.ifc_ifcu.ifcu_req = tor_malloc(sz);
if (ioctl(fd, SIOCGIFCONF, &ifc) < 0) {
- log(severity, LD_NET, "ioctl failed: %s", strerror(errno));
+ tor_log(severity, LD_NET, "ioctl failed: %s", strerror(errno));
close(fd);
goto done;
}
@@ -1367,20 +1447,54 @@ get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr)
* XXXX024 IPv6 deprecate some of these.
*/
-/** Return true iff <b>ip</b> (in host order) is an IP reserved to localhost,
- * or reserved for local networks by RFC 1918.
- */
+/** Given an address of the form "ip:port", try to divide it into its
+ * ip and port portions, setting *<b>address_out</b> to a newly
+ * allocated string holding the address portion and *<b>port_out</b>
+ * to the port.
+ *
+ * Don't do DNS lookups and don't allow domain names in the "ip" field.
+ *
+ * If <b>default_port</b> is less than 0, don't accept <b>addrport</b> of the
+ * form "ip" or "ip:0". Otherwise, accept those forms, and set
+ * *<b>port_out</b> to <b>default_port</b>.
+ *
+ * Return 0 on success, -1 on failure. */
int
-is_internal_IP(uint32_t ip, int for_listening)
+tor_addr_port_parse(int severity, const char *addrport,
+ tor_addr_t *address_out, uint16_t *port_out,
+ int default_port)
{
- tor_addr_t myaddr;
- myaddr.family = AF_INET;
- myaddr.addr.in_addr.s_addr = htonl(ip);
+ int retval = -1;
+ int r;
+ char *addr_tmp = NULL;
+
+ tor_assert(addrport);
+ tor_assert(address_out);
+ tor_assert(port_out);
+
+ r = tor_addr_port_split(severity, addrport, &addr_tmp, port_out);
+ if (r < 0)
+ goto done;
- return tor_addr_is_internal(&myaddr, for_listening);
+ if (!*port_out) {
+ if (default_port >= 0)
+ *port_out = default_port;
+ else
+ goto done;
+ }
+
+ /* make sure that address_out is an IP address */
+ if (tor_addr_parse(address_out, addr_tmp) < 0)
+ goto done;
+
+ retval = 0;
+
+ done:
+ tor_free(addr_tmp);
+ return retval;
}
-/** Given an address of the form "host:port", try to divide it into its host
+/** Given an address of the form "host[:port]", try to divide it into its host
* ane port portions, setting *<b>address_out</b> to a newly allocated string
* holding the address portion and *<b>port_out</b> to the port (or 0 if no
* port is given). Return 0 on success, -1 on failure. */
@@ -1388,9 +1502,18 @@ int
tor_addr_port_split(int severity, const char *addrport,
char **address_out, uint16_t *port_out)
{
+ tor_addr_t a_tmp;
tor_assert(addrport);
tor_assert(address_out);
tor_assert(port_out);
+ /* We need to check for IPv6 manually because addr_port_lookup() doesn't
+ * do a good job on IPv6 addresses that lack a port. */
+ if (tor_addr_parse(&a_tmp, addrport) == AF_INET6) {
+ *port_out = 0;
+ *address_out = tor_strdup(addrport);
+ return 0;
+ }
+
return addr_port_lookup(severity, addrport, address_out, NULL, port_out);
}
@@ -1409,17 +1532,17 @@ addr_port_lookup(int severity, const char *addrport, char **address,
uint32_t *addr, uint16_t *port_out)
{
const char *colon;
- char *_address = NULL;
- int _port;
+ char *address_ = NULL;
+ int port_;
int ok = 1;
tor_assert(addrport);
colon = strrchr(addrport, ':');
if (colon) {
- _address = tor_strndup(addrport, colon-addrport);
- _port = (int) tor_parse_long(colon+1,10,1,65535,NULL,NULL);
- if (!_port) {
+ address_ = tor_strndup(addrport, colon-addrport);
+ port_ = (int) tor_parse_long(colon+1,10,1,65535,NULL,NULL);
+ if (!port_) {
log_fn(severity, LD_GENERAL, "Port %s out of range", escaped(colon+1));
ok = 0;
}
@@ -1432,28 +1555,28 @@ addr_port_lookup(int severity, const char *addrport, char **address,
ok = 0;
}
} else {
- _address = tor_strdup(addrport);
- _port = 0;
+ address_ = tor_strdup(addrport);
+ port_ = 0;
}
if (addr) {
/* There's an addr pointer, so we need to resolve the hostname. */
- if (tor_lookup_hostname(_address,addr)) {
- log_fn(severity, LD_NET, "Couldn't look up %s", escaped(_address));
+ if (tor_lookup_hostname(address_,addr)) {
+ log_fn(severity, LD_NET, "Couldn't look up %s", escaped(address_));
ok = 0;
*addr = 0;
}
}
if (address && ok) {
- *address = _address;
+ *address = address_;
} else {
if (address)
*address = NULL;
- tor_free(_address);
+ tor_free(address_);
}
if (port_out)
- *port_out = ok ? ((uint16_t) _port) : 0;
+ *port_out = ok ? ((uint16_t) port_) : 0;
return ok ? 0 : -1;
}
@@ -1468,7 +1591,7 @@ addr_mask_get_bits(uint32_t mask)
return 0;
if (mask == 0xFFFFFFFFu)
return 32;
- for (i=0; i<=32; ++i) {
+ for (i=1; i<=32; ++i) {
if (mask == (uint32_t) ~((1u<<(32-i))-1)) {
return i;
}
@@ -1476,32 +1599,6 @@ addr_mask_get_bits(uint32_t mask)
return -1;
}
-/** Compare two addresses <b>a1</b> and <b>a2</b> for equality under a
- * netmask of <b>mbits</b> bits. Return -1, 0, or 1.
- *
- * XXXX_IP6 Temporary function to allow masks as bitcounts everywhere. This
- * will be replaced with an IPv6-aware version as soon as 32-bit addresses are
- * no longer passed around.
- */
-int
-addr_mask_cmp_bits(uint32_t a1, uint32_t a2, maskbits_t bits)
-{
- if (bits > 32)
- bits = 32;
- else if (bits == 0)
- return 0;
-
- a1 >>= (32-bits);
- a2 >>= (32-bits);
-
- if (a1 < a2)
- return -1;
- else if (a1 > a2)
- return 1;
- else
- return 0;
-}
-
/** Parse a string <b>s</b> in the format of (*|port(-maxport)?)?, setting the
* various *out pointers as appropriate. Return 0 on success, -1 on failure.
*/
@@ -1554,93 +1651,6 @@ parse_port_range(const char *port, uint16_t *port_min_out,
return 0;
}
-/** Parse a string <b>s</b> in the format of
- * (IP(/mask|/mask-bits)?|*)(:(*|port(-maxport))?)?, setting the various
- * *out pointers as appropriate. Return 0 on success, -1 on failure.
- */
-int
-parse_addr_and_port_range(const char *s, uint32_t *addr_out,
- maskbits_t *maskbits_out, uint16_t *port_min_out,
- uint16_t *port_max_out)
-{
- char *address;
- char *mask, *port, *endptr;
- struct in_addr in;
- int bits;
-
- tor_assert(s);
- tor_assert(addr_out);
- tor_assert(maskbits_out);
- tor_assert(port_min_out);
- tor_assert(port_max_out);
-
- address = tor_strdup(s);
- /* Break 'address' into separate strings.
- */
- mask = strchr(address,'/');
- port = strchr(mask?mask:address,':');
- if (mask)
- *mask++ = '\0';
- if (port)
- *port++ = '\0';
- /* Now "address" is the IP|'*' part...
- * "mask" is the Mask|Maskbits part...
- * and "port" is the *|port|min-max part.
- */
-
- if (strcmp(address,"*")==0) {
- *addr_out = 0;
- } else if (tor_inet_aton(address, &in) != 0) {
- *addr_out = ntohl(in.s_addr);
- } else {
- log_warn(LD_GENERAL, "Malformed IP %s in address pattern; rejecting.",
- escaped(address));
- goto err;
- }
-
- if (!mask) {
- if (strcmp(address,"*")==0)
- *maskbits_out = 0;
- else
- *maskbits_out = 32;
- } else {
- endptr = NULL;
- bits = (int) strtol(mask, &endptr, 10);
- if (!*endptr) {
- /* strtol handled the whole mask. */
- if (bits < 0 || bits > 32) {
- log_warn(LD_GENERAL,
- "Bad number of mask bits on address range; rejecting.");
- goto err;
- }
- *maskbits_out = bits;
- } else if (tor_inet_aton(mask, &in) != 0) {
- bits = addr_mask_get_bits(ntohl(in.s_addr));
- if (bits < 0) {
- log_warn(LD_GENERAL,
- "Mask %s on address range isn't a prefix; dropping",
- escaped(mask));
- goto err;
- }
- *maskbits_out = bits;
- } else {
- log_warn(LD_GENERAL,
- "Malformed mask %s on address range; rejecting.",
- escaped(mask));
- goto err;
- }
- }
-
- if (parse_port_range(port, port_min_out, port_max_out)<0)
- goto err;
-
- tor_free(address);
- return 0;
- err:
- tor_free(address);
- return -1;
-}
-
/** Given an IPv4 in_addr struct *<b>in</b> (in network order, as usual),
* write it as a string into the <b>buf_len</b>-byte buffer in
* <b>buf</b>.
@@ -1698,3 +1708,15 @@ tor_addr_hostname_is_local(const char *name)
!strcasecmpend(name, ".local");
}
+/** Return a newly allocated tor_addr_port_t with <b>addr</b> and
+ <b>port</b> filled in. */
+tor_addr_port_t *
+tor_addr_port_new(const tor_addr_t *addr, uint16_t port)
+{
+ tor_addr_port_t *ap = tor_malloc_zero(sizeof(tor_addr_port_t));
+ if (addr)
+ tor_addr_copy(&ap->addr, addr);
+ ap->port = port;
+ return ap;
+}
+
diff --git a/src/common/address.h b/src/common/address.h
index c6c126862..8dc63b71c 100644
--- a/src/common/address.h
+++ b/src/common/address.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
* \brief Headers for address.h
**/
-#ifndef _TOR_ADDRESS_H
-#define _TOR_ADDRESS_H
+#ifndef TOR_ADDRESS_H
+#define TOR_ADDRESS_H
#include "orconfig.h"
#include "torint.h"
@@ -40,7 +40,7 @@ typedef struct tor_addr_port_t
uint16_t port;
} tor_addr_port_t;
-#define TOR_ADDR_NULL {AF_UNSPEC, {0}};
+#define TOR_ADDR_NULL {AF_UNSPEC, {0}}
static INLINE const struct in6_addr *tor_addr_to_in6(const tor_addr_t *a);
static INLINE uint32_t tor_addr_to_ipv4n(const tor_addr_t *a);
@@ -55,6 +55,7 @@ socklen_t tor_addr_to_sockaddr(const tor_addr_t *a, uint16_t port,
int tor_addr_from_sockaddr(tor_addr_t *a, const struct sockaddr *sa,
uint16_t *port_out);
void tor_addr_make_unspec(tor_addr_t *a);
+void tor_addr_make_null(tor_addr_t *a, sa_family_t family);
char *tor_sockaddr_to_str(const struct sockaddr *sa);
/** Return an in6_addr* equivalent to <b>a</b>, or NULL if <b>a</b> is not
@@ -145,6 +146,7 @@ char *tor_dup_addr(const tor_addr_t *addr) ATTR_MALLOC;
* addresses. */
#define fmt_and_decorate_addr(a) fmt_addr_impl((a), 1)
const char *fmt_addr_impl(const tor_addr_t *addr, int decorate);
+const char *fmt_addrport(const tor_addr_t *addr, uint16_t port);
const char * fmt_addr32(uint32_t addr);
int get_interface_address6(int severity, sa_family_t family, tor_addr_t *addr);
@@ -165,9 +167,12 @@ int tor_addr_compare_masked(const tor_addr_t *addr1, const tor_addr_t *addr2,
* "exactly". */
#define tor_addr_eq(a,b) (0==tor_addr_compare((a),(b),CMP_EXACT))
-unsigned int tor_addr_hash(const tor_addr_t *addr);
+uint64_t tor_addr_hash(const tor_addr_t *addr);
int tor_addr_is_v4(const tor_addr_t *addr);
-int tor_addr_is_internal(const tor_addr_t *ip, int for_listening);
+int tor_addr_is_internal_(const tor_addr_t *ip, int for_listening,
+ const char *filename, int lineno);
+#define tor_addr_is_internal(addr, for_listening) \
+ tor_addr_is_internal_((addr), (for_listening), SHORT_FILE__, __LINE__)
/** Longest length that can be required for a reverse lookup name. */
/* 32 nybbles, 32 dots, 8 characters of "ip6.arpa", 1 NUL: 73 characters. */
@@ -179,13 +184,15 @@ int tor_addr_parse_PTR_name(tor_addr_t *result, const char *address,
int tor_addr_port_lookup(const char *s, tor_addr_t *addr_out,
uint16_t *port_out);
-int tor_addr_parse_mask_ports(const char *s,
+#define TAPMP_EXTENDED_STAR 1
+int tor_addr_parse_mask_ports(const char *s, unsigned flags,
tor_addr_t *addr_out, maskbits_t *mask_out,
uint16_t *port_min_out, uint16_t *port_max_out);
const char * tor_addr_to_str(char *dest, const tor_addr_t *addr, size_t len,
int decorate);
int tor_addr_parse(tor_addr_t *addr, const char *src);
void tor_addr_copy(tor_addr_t *dest, const tor_addr_t *src);
+void tor_addr_copy_tight(tor_addr_t *dest, const tor_addr_t *src);
void tor_addr_from_ipv4n(tor_addr_t *dest, uint32_t v4addr);
/** Set <b>dest</b> to the IPv4 address encoded in <b>v4addr</b> in host
* order. */
@@ -202,24 +209,25 @@ int tor_addr_is_loopback(const tor_addr_t *addr);
int tor_addr_port_split(int severity, const char *addrport,
char **address_out, uint16_t *port_out);
+int tor_addr_port_parse(int severity, const char *addrport,
+ tor_addr_t *address_out, uint16_t *port_out,
+ int default_port);
+
int tor_addr_hostname_is_local(const char *name);
/* IPv4 helpers */
-int is_internal_IP(uint32_t ip, int for_listening);
int addr_port_lookup(int severity, const char *addrport, char **address,
uint32_t *addr, uint16_t *port_out);
int parse_port_range(const char *port, uint16_t *port_min_out,
uint16_t *port_max_out);
-int parse_addr_and_port_range(const char *s, uint32_t *addr_out,
- maskbits_t *maskbits_out, uint16_t *port_min_out,
- uint16_t *port_max_out);
int addr_mask_get_bits(uint32_t mask);
-int addr_mask_cmp_bits(uint32_t a1, uint32_t a2, maskbits_t bits);
/** Length of a buffer to allocate to hold the results of tor_inet_ntoa.*/
#define INET_NTOA_BUF_LEN 16
int tor_inet_ntoa(const struct in_addr *in, char *buf, size_t buf_len);
char *tor_dup_ip(uint32_t addr) ATTR_MALLOC;
int get_interface_address(int severity, uint32_t *addr);
+tor_addr_port_t *tor_addr_port_new(const tor_addr_t *addr, uint16_t port);
+
#endif
diff --git a/src/common/aes.c b/src/common/aes.c
index 295a90749..f454a7f7b 100644
--- a/src/common/aes.c
+++ b/src/common/aes.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -41,6 +41,7 @@
#include "aes.h"
#include "util.h"
#include "torlog.h"
+#include "di_ops.h"
#ifdef ANDROID
/* Android's OpenSSL seems to have removed all of its Engine support. */
@@ -134,8 +135,8 @@ int
evaluate_evp_for_aes(int force_val)
{
(void) force_val;
- log_notice(LD_CRYPTO, "This version of OpenSSL has a known-good EVP "
- "counter-mode implementation. Using it.");
+ log_info(LD_CRYPTO, "This version of OpenSSL has a known-good EVP "
+ "counter-mode implementation. Using it.");
return 0;
}
int
@@ -212,11 +213,11 @@ evaluate_evp_for_aes(int force_val)
e = ENGINE_get_cipher_engine(NID_aes_128_ecb);
if (e) {
- log_notice(LD_CRYPTO, "AES engine \"%s\" found; using EVP_* functions.",
+ log_info(LD_CRYPTO, "AES engine \"%s\" found; using EVP_* functions.",
ENGINE_get_name(e));
should_use_EVP = 1;
} else {
- log_notice(LD_CRYPTO, "No AES engine found; using AES_* functions.");
+ log_info(LD_CRYPTO, "No AES engine found; using AES_* functions.");
should_use_EVP = 0;
}
#endif
@@ -257,18 +258,18 @@ evaluate_ctr_for_aes(void)
for (i=0; i<16; ++i)
AES_ctr128_encrypt(&zero[i], &output[i], 1, &key, ivec, ivec_tmp, &pos);
- if (memcmp(output, encrypt_zero, 16)) {
+ if (fast_memneq(output, encrypt_zero, 16)) {
/* Counter mode is buggy */
log_notice(LD_CRYPTO, "This OpenSSL has a buggy version of counter mode; "
"not using it.");
} else {
/* Counter mode is okay */
- log_notice(LD_CRYPTO, "This OpenSSL has a good implementation of counter "
+ log_info(LD_CRYPTO, "This OpenSSL has a good implementation of counter "
"mode; using it.");
should_use_openssl_CTR = 1;
}
#else
- log_notice(LD_CRYPTO, "This version of OpenSSL has a slow implementation of "
+ log_info(LD_CRYPTO, "This version of OpenSSL has a slow implementation of "
"counter mode; not using it.");
#endif
return 0;
@@ -285,7 +286,7 @@ evaluate_ctr_for_aes(void)
* value of the current counter.
*/
static INLINE void
-_aes_fill_buf(aes_cnt_cipher_t *cipher)
+aes_fill_buf_(aes_cnt_cipher_t *cipher)
{
/* We don't currently use OpenSSL's counter mode implementation because:
* 1) some versions have known bugs
@@ -340,7 +341,7 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
EVP_EncryptInit(&cipher->key.evp, c, (const unsigned char*)key, NULL);
cipher->using_evp = 1;
} else {
- AES_set_encrypt_key((const unsigned char *)key, key_bits, &cipher->key.aes);
+ AES_set_encrypt_key((const unsigned char *)key, key_bits,&cipher->key.aes);
cipher->using_evp = 0;
}
@@ -360,7 +361,7 @@ aes_set_key(aes_cnt_cipher_t *cipher, const char *key, int key_bits)
memset(cipher->buf, 0, sizeof(cipher->buf));
else
#endif
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
/** Release storage held by <b>cipher</b>
@@ -387,9 +388,10 @@ aes_cipher_free(aes_cnt_cipher_t *cipher)
#ifdef CAN_USE_OPENSSL_CTR
/* Helper function to use EVP with openssl's counter-mode wrapper. */
-static void evp_block128_fn(const uint8_t in[16],
- uint8_t out[16],
- const void *key)
+static void
+evp_block128_fn(const uint8_t in[16],
+ uint8_t out[16],
+ const void *key)
{
EVP_CIPHER_CTX *ctx = (void*)key;
int inl=16, outl=16;
@@ -429,8 +431,7 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
&cipher->pos);
}
return;
- }
- else
+ } else
#endif
{
int c = cipher->pos;
@@ -453,7 +454,7 @@ aes_crypt(aes_cnt_cipher_t *cipher, const char *input, size_t len,
UPDATE_CTR_BUF(cipher, 1);
}
UPDATE_CTR_BUF(cipher, 0);
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
}
}
@@ -469,8 +470,7 @@ aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
if (should_use_openssl_CTR) {
aes_crypt(cipher, data, len, data);
return;
- }
- else
+ } else
#endif
{
int c = cipher->pos;
@@ -493,7 +493,7 @@ aes_crypt_inplace(aes_cnt_cipher_t *cipher, char *data, size_t len)
UPDATE_CTR_BUF(cipher, 1);
}
UPDATE_CTR_BUF(cipher, 0);
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
}
}
@@ -515,7 +515,8 @@ aes_set_iv(aes_cnt_cipher_t *cipher, const char *iv)
#ifdef CAN_USE_OPENSSL_CTR
if (!should_use_openssl_CTR)
#endif
- _aes_fill_buf(cipher);
+ aes_fill_buf_(cipher);
}
#endif
+
diff --git a/src/common/aes.h b/src/common/aes.h
index bde567f87..8ff28a762 100644
--- a/src/common/aes.h
+++ b/src/common/aes.h
@@ -1,12 +1,12 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Implements a minimal interface to counter-mode AES. */
-#ifndef _TOR_AES_H
-#define _TOR_AES_H
+#ifndef TOR_AES_H
+#define TOR_AES_H
/**
* \file aes.h
diff --git a/src/common/backtrace.c b/src/common/backtrace.c
new file mode 100644
index 000000000..3a073a8ff
--- /dev/null
+++ b/src/common/backtrace.c
@@ -0,0 +1,233 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define __USE_GNU
+#define _GNU_SOURCE 1
+
+#include "orconfig.h"
+#include "compat.h"
+#include "util.h"
+#include "torlog.h"
+
+#ifdef HAVE_EXECINFO_H
+#include <execinfo.h>
+#endif
+#ifdef HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_SIGNAL_H
+#include <signal.h>
+#endif
+
+#ifdef HAVE_CYGWIN_SIGNAL_H
+#include <cygwin/signal.h>
+#elif defined(HAVE_SYS_UCONTEXT_H)
+#include <sys/ucontext.h>
+#elif defined(HAVE_UCONTEXT_H)
+#include <ucontext.h>
+#endif
+
+#define EXPOSE_CLEAN_BACKTRACE
+#include "backtrace.h"
+
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
+ defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
+#define USE_BACKTRACE
+#endif
+
+#if !defined(USE_BACKTRACE)
+#define NO_BACKTRACE_IMPL
+#endif
+
+/** Version of Tor to report in backtrace messages. */
+static char *bt_version = NULL;
+
+#ifdef USE_BACKTRACE
+/** Largest stack depth to try to dump. */
+#define MAX_DEPTH 256
+/** Static allocation of stack to dump. This is static so we avoid stack
+ * pressure. */
+static void *cb_buf[MAX_DEPTH];
+/** Protects cb_buf from concurrent access */
+static tor_mutex_t cb_buf_mutex;
+
+/** Change a stacktrace in <b>stack</b> of depth <b>depth</b> so that it will
+ * log the correct function from which a signal was received with context
+ * <b>ctx</b>. (When we get a signal, the current function will not have
+ * called any other function, and will therefore have not pushed its address
+ * onto the stack. Fortunately, we usually have the program counter in the
+ * ucontext_t structure.
+ */
+void
+clean_backtrace(void **stack, int depth, const ucontext_t *ctx)
+{
+#ifdef PC_FROM_UCONTEXT
+#if defined(__linux__)
+ const int n = 1;
+#elif defined(__darwin__) || defined(__APPLE__) || defined(__OpenBSD__) \
+ || defined(__FreeBSD__)
+ const int n = 2;
+#else
+ const int n = 1;
+#endif
+ if (depth <= n)
+ return;
+
+ stack[n] = (void*) ctx->PC_FROM_UCONTEXT;
+#else
+ (void) depth;
+ (void) ctx;
+#endif
+}
+
+/** Log a message <b>msg</b> at <b>severity</b> in <b>domain</b>, and follow
+ * that with a backtrace log. */
+void
+log_backtrace(int severity, int domain, const char *msg)
+{
+ int depth;
+ char **symbols;
+ int i;
+
+ tor_mutex_acquire(&cb_buf_mutex);
+
+ depth = backtrace(cb_buf, MAX_DEPTH);
+ symbols = backtrace_symbols(cb_buf, depth);
+
+ tor_log(severity, domain, "%s. Stack trace:", msg);
+ if (!symbols) {
+ tor_log(severity, domain, " Unable to generate backtrace.");
+ goto done;
+ }
+ for (i=0; i < depth; ++i) {
+ tor_log(severity, domain, " %s", symbols[i]);
+ }
+ free(symbols);
+
+ done:
+ tor_mutex_release(&cb_buf_mutex);
+}
+
+static void crash_handler(int sig, siginfo_t *si, void *ctx_)
+ __attribute__((noreturn));
+
+/** Signal handler: write a crash message with a stack trace, and die. */
+static void
+crash_handler(int sig, siginfo_t *si, void *ctx_)
+{
+ char buf[40];
+ int depth;
+ ucontext_t *ctx = (ucontext_t *) ctx_;
+ int n_fds, i;
+ const int *fds = NULL;
+
+ (void) si;
+
+ depth = backtrace(cb_buf, MAX_DEPTH);
+ /* Clean up the top stack frame so we get the real function
+ * name for the most recently failing function. */
+ clean_backtrace(cb_buf, depth, ctx);
+
+ format_dec_number_sigsafe((unsigned)sig, buf, sizeof(buf));
+
+ tor_log_err_sigsafe(bt_version, " died: Caught signal ", buf, "\n",
+ NULL);
+
+ n_fds = tor_log_get_sigsafe_err_fds(&fds);
+ for (i=0; i < n_fds; ++i)
+ backtrace_symbols_fd(cb_buf, depth, fds[i]);
+
+ abort();
+}
+
+/** Install signal handlers as needed so that when we crash, we produce a
+ * useful stack trace. Return 0 on success, -1 on failure. */
+static int
+install_bt_handler(void)
+{
+ int trap_signals[] = { SIGSEGV, SIGILL, SIGFPE, SIGBUS, SIGSYS,
+ SIGIO, -1 };
+ int i, rv=0;
+
+ struct sigaction sa;
+
+ tor_mutex_init(&cb_buf_mutex);
+
+ memset(&sa, 0, sizeof(sa));
+ sa.sa_sigaction = crash_handler;
+ sa.sa_flags = SA_SIGINFO;
+ sigfillset(&sa.sa_mask);
+
+ for (i = 0; trap_signals[i] >= 0; ++i) {
+ if (sigaction(trap_signals[i], &sa, NULL) == -1) {
+ log_warn(LD_BUG, "Sigaction failed: %s", strerror(errno));
+ rv = -1;
+ }
+ }
+
+ {
+ /* Now, generate (but do not log) a backtrace. This ensures that
+ * libc has pre-loaded the symbols we need to dump things, so that later
+ * reads won't be denied by the sandbox code */
+ char **symbols;
+ int depth = backtrace(cb_buf, MAX_DEPTH);
+ symbols = backtrace_symbols(cb_buf, depth);
+ if (symbols)
+ free(symbols);
+ }
+
+ return rv;
+}
+
+/** Uninstall crash handlers. */
+static void
+remove_bt_handler(void)
+{
+ tor_mutex_uninit(&cb_buf_mutex);
+}
+#endif
+
+#ifdef NO_BACKTRACE_IMPL
+void
+log_backtrace(int severity, int domain, const char *msg)
+{
+ tor_log(severity, domain, "%s. (Stack trace not available)", msg);
+}
+
+static int
+install_bt_handler(void)
+{
+ return 0;
+}
+
+static void
+remove_bt_handler(void)
+{
+}
+#endif
+
+/** Set up code to handle generating error messages on crashes. */
+int
+configure_backtrace_handler(const char *tor_version)
+{
+ tor_free(bt_version);
+ if (!tor_version)
+ tor_version = "";
+ tor_asprintf(&bt_version, "Tor %s", tor_version);
+
+ return install_bt_handler();
+}
+
+/** Perform end-of-process cleanup for code that generates error messages on
+ * crashes. */
+void
+clean_up_backtrace_handler(void)
+{
+ remove_bt_handler();
+
+ tor_free(bt_version);
+}
+
diff --git a/src/common/backtrace.h b/src/common/backtrace.h
new file mode 100644
index 000000000..1f4d73339
--- /dev/null
+++ b/src/common/backtrace.h
@@ -0,0 +1,21 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_BACKTRACE_H
+#define TOR_BACKTRACE_H
+
+#include "orconfig.h"
+
+void log_backtrace(int severity, int domain, const char *msg);
+int configure_backtrace_handler(const char *tor_version);
+void clean_up_backtrace_handler(void);
+
+#ifdef EXPOSE_CLEAN_BACKTRACE
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
+ defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
+void clean_backtrace(void **stack, int depth, const ucontext_t *ctx);
+#endif
+#endif
+
+#endif
+
diff --git a/src/common/ciphers.inc b/src/common/ciphers.inc
index 137d78b11..ab4ac4072 100644
--- a/src/common/ciphers.inc
+++ b/src/common/ciphers.inc
@@ -4,86 +4,51 @@
*
* This file was automatically generated by get_mozilla_ciphers.py.
*/
-#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
-#else
- XCIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
-#else
- XCIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
- CIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
-#else
- XCIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA
- CIPHER(0x0087, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
+ CIPHER(0xc02b, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
#else
- XCIPHER(0x0087, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA)
+ XCIPHER(0xc02b, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
#endif
-#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_SHA
- CIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ CIPHER(0xc02f, TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
#else
- XCIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
+ XCIPHER(0xc02f, TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256)
#endif
-#ifdef TLS1_TXT_DHE_DSS_WITH_AES_256_SHA
- CIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
+#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA
+ CIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
#else
- XCIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
+ XCIPHER(0xc00a, TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc00f, TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
+ CIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
#else
- XCIPHER(0xc00f, TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA)
+ XCIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA
- CIPHER(0xc005, TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA
+ CIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
#else
- XCIPHER(0xc005, TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA)
+ XCIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA
- CIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA
+ CIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
#else
- XCIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
+ XCIPHER(0xc014, TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_AES_256_SHA
- CIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA
+ CIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
#else
- XCIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
+ XCIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
#endif
#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA
CIPHER(0xc007, TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA)
#else
XCIPHER(0xc007, TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
-#else
- XCIPHER(0xc009, TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA)
-#endif
#ifdef TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA
CIPHER(0xc011, TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA)
#else
XCIPHER(0xc011, TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
-#else
- XCIPHER(0xc013, TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
- CIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
-#else
- XCIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA
- CIPHER(0x0044, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA)
-#else
- XCIPHER(0x0044, TLS1_TXT_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA)
-#endif
#ifdef TLS1_TXT_DHE_RSA_WITH_AES_128_SHA
CIPHER(0x0033, TLS1_TXT_DHE_RSA_WITH_AES_128_SHA)
#else
@@ -94,89 +59,63 @@
#else
XCIPHER(0x0032, TLS1_TXT_DHE_DSS_WITH_AES_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA
- CIPHER(0xc00c, TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA)
-#else
- XCIPHER(0xc00c, TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA)
-#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc00e, TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA)
-#else
- XCIPHER(0xc00e, TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA)
-#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA
- CIPHER(0xc002, TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA)
-#else
- XCIPHER(0xc002, TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA)
-#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA
- CIPHER(0xc004, TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA)
+#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
+ CIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
#else
- XCIPHER(0xc004, TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA)
+ XCIPHER(0x0045, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_SEED_SHA
- CIPHER(0x0096, TLS1_TXT_RSA_WITH_SEED_SHA)
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_SHA
+ CIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
#else
- XCIPHER(0x0096, TLS1_TXT_RSA_WITH_SEED_SHA)
+ XCIPHER(0x0039, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA)
#endif
-#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA
- CIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
+#ifdef TLS1_TXT_DHE_DSS_WITH_AES_256_SHA
+ CIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
#else
- XCIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
+ XCIPHER(0x0038, TLS1_TXT_DHE_DSS_WITH_AES_256_SHA)
#endif
-#ifdef SSL3_TXT_RSA_RC4_128_MD5
- CIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
+#ifdef TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA
+ CIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
#else
- XCIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
+ XCIPHER(0x0088, TLS1_TXT_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA)
#endif
-#ifdef SSL3_TXT_RSA_RC4_128_SHA
- CIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
+#ifdef SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA
+ CIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
#else
- XCIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
+ XCIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
#endif
#ifdef TLS1_TXT_RSA_WITH_AES_128_SHA
CIPHER(0x002f, TLS1_TXT_RSA_WITH_AES_128_SHA)
#else
XCIPHER(0x002f, TLS1_TXT_RSA_WITH_AES_128_SHA)
#endif
-#ifdef TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc008, TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA)
-#else
- XCIPHER(0xc008, TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA)
-#endif
-#ifdef TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
-#else
- XCIPHER(0xc012, TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA)
-#endif
-#ifdef SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA
- CIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
+#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA
+ CIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
#else
- XCIPHER(0x0016, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
+ XCIPHER(0x0041, TLS1_TXT_RSA_WITH_CAMELLIA_128_CBC_SHA)
#endif
-#ifdef SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA
- CIPHER(0x0013, SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA)
+#ifdef TLS1_TXT_RSA_WITH_AES_256_SHA
+ CIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
#else
- XCIPHER(0x0013, SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA)
+ XCIPHER(0x0035, TLS1_TXT_RSA_WITH_AES_256_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc00d, TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA)
+#ifdef TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA
+ CIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
#else
- XCIPHER(0xc00d, TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA)
+ XCIPHER(0x0084, TLS1_TXT_RSA_WITH_CAMELLIA_256_CBC_SHA)
#endif
-#ifdef TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA
- CIPHER(0xc003, TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA)
+#ifdef SSL3_TXT_RSA_DES_192_CBC3_SHA
+ CIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
#else
- XCIPHER(0xc003, TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA)
+ XCIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
#endif
-/* No openssl macro found for 0xfeff */
-#ifdef SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA
- CIPHER(0xfeff, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA)
+#ifdef SSL3_TXT_RSA_RC4_128_SHA
+ CIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
#else
- XCIPHER(0xfeff, SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA)
+ XCIPHER(0x0005, SSL3_TXT_RSA_RC4_128_SHA)
#endif
-#ifdef SSL3_TXT_RSA_DES_192_CBC3_SHA
- CIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
+#ifdef SSL3_TXT_RSA_RC4_128_MD5
+ CIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
#else
- XCIPHER(0x000a, SSL3_TXT_RSA_DES_192_CBC3_SHA)
+ XCIPHER(0x0004, SSL3_TXT_RSA_RC4_128_MD5)
#endif
diff --git a/src/common/compat.c b/src/common/compat.c
index 59e3898de..111070cc1 100644
--- a/src/common/compat.c
+++ b/src/common/compat.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -18,11 +18,12 @@
/* XXXX024 We should just use AC_USE_SYSTEM_EXTENSIONS in our autoconf,
* and get this (and other important stuff!) automatically. Once we do that,
* make sure to also change the extern char **environ detection in
- * configure.in, because whether that is declared or not depends on whether
+ * configure.ac, because whether that is declared or not depends on whether
* we have _GNU_SOURCE defined! Maybe that means that once we take this out,
* we can also take out the configure check. */
#define _GNU_SOURCE
+#define COMPAT_PRIVATE
#include "compat.h"
#ifdef _WIN32
@@ -34,6 +35,15 @@
#ifdef HAVE_UNAME
#include <sys/utsname.h>
#endif
+#ifdef HAVE_SYS_TYPES_H
+#include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_SYSCTL_H
+#include <sys/sysctl.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
@@ -109,6 +119,7 @@
#include "util.h"
#include "container.h"
#include "address.h"
+#include "sandbox.h"
/* Inline the strl functions if the platform doesn't have them. */
#ifndef HAVE_STRLCPY
@@ -125,6 +136,7 @@ tor_open_cloexec(const char *path, int flags, unsigned mode)
{
int fd;
#ifdef O_CLOEXEC
+ path = sandbox_intern_string(path);
fd = open(path, flags|O_CLOEXEC, mode);
if (fd >= 0)
return fd;
@@ -135,10 +147,16 @@ tor_open_cloexec(const char *path, int flags, unsigned mode)
return -1;
#endif
+ log_debug(LD_FS, "Opening %s with flags %x", path, flags);
fd = open(path, flags, mode);
#ifdef FD_CLOEXEC
- if (fd >= 0)
- fcntl(fd, F_SETFD, FD_CLOEXEC);
+ if (fd >= 0) {
+ if (fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ close(fd);
+ return -1;
+ }
+ }
#endif
return fd;
}
@@ -150,12 +168,26 @@ tor_fopen_cloexec(const char *path, const char *mode)
{
FILE *result = fopen(path, mode);
#ifdef FD_CLOEXEC
- if (result != NULL)
- fcntl(fileno(result), F_SETFD, FD_CLOEXEC);
+ if (result != NULL) {
+ if (fcntl(fileno(result), F_SETFD, FD_CLOEXEC) == -1) {
+ log_warn(LD_FS,"Couldn't set FD_CLOEXEC: %s", strerror(errno));
+ fclose(result);
+ return NULL;
+ }
+ }
#endif
return result;
}
+/** As rename(), but work correctly with the sandbox. */
+int
+tor_rename(const char *path_old, const char *path_new)
+{
+ log_debug(LD_FS, "Renaming %s to %s", path_old, path_new);
+ return rename(sandbox_intern_string(path_old),
+ sandbox_intern_string(path_new));
+}
+
#if defined(HAVE_SYS_MMAN_H) || defined(RUNNING_DOXYGEN)
/** Try to create a memory mapping for <b>filename</b> and return it. On
* failure, return NULL. Sets errno properly, using ERANGE to mean
@@ -165,9 +197,10 @@ tor_mmap_file(const char *filename)
{
int fd; /* router file */
char *string;
- int page_size;
+ int page_size, result;
tor_mmap_t *res;
size_t size, filesize;
+ struct stat st;
tor_assert(filename);
@@ -181,9 +214,22 @@ tor_mmap_file(const char *filename)
return NULL;
}
- /* XXXX why not just do fstat here? */
- size = filesize = (size_t) lseek(fd, 0, SEEK_END);
- lseek(fd, 0, SEEK_SET);
+ /* Get the size of the file */
+ result = fstat(fd, &st);
+ if (result != 0) {
+ int save_errno = errno;
+ log_warn(LD_FS,
+ "Couldn't fstat opened descriptor for \"%s\" during mmap: %s",
+ filename, strerror(errno));
+ close(fd);
+ errno = save_errno;
+ return NULL;
+ }
+ size = filesize = (size_t)(st.st_size);
+ /*
+ * Should we check for weird crap like mmapping a named pipe here,
+ * or just wait for if (!size) below to fail?
+ */
/* ensure page alignment */
page_size = getpagesize();
size += (size%page_size) ? page_size-(size%page_size) : 0;
@@ -214,12 +260,27 @@ tor_mmap_file(const char *filename)
return res;
}
-/** Release storage held for a memory mapping. */
-void
+/** Release storage held for a memory mapping; returns 0 on success,
+ * or -1 on failure (and logs a warning). */
+int
tor_munmap_file(tor_mmap_t *handle)
{
- munmap((char*)handle->data, handle->mapping_size);
- tor_free(handle);
+ int res;
+
+ if (handle == NULL)
+ return 0;
+
+ res = munmap((char*)handle->data, handle->mapping_size);
+ if (res == 0) {
+ /* munmap() succeeded */
+ tor_free(handle);
+ } else {
+ log_warn(LD_FS, "Failed to munmap() in tor_munmap_file(): %s",
+ strerror(errno));
+ res = -1;
+ }
+
+ return res;
}
#elif defined(_WIN32)
tor_mmap_t *
@@ -301,17 +362,29 @@ tor_mmap_file(const char *filename)
tor_munmap_file(res);
return NULL;
}
-void
+
+/* Unmap the file, and return 0 for success or -1 for failure */
+int
tor_munmap_file(tor_mmap_t *handle)
{
- if (handle->data)
+ if (handle == NULL)
+ return 0;
+
+ if (handle->data) {
/* This is an ugly cast, but without it, "data" in struct tor_mmap_t would
have to be redefined as non-const. */
- UnmapViewOfFile( (LPVOID) handle->data);
+ BOOL ok = UnmapViewOfFile( (LPVOID) handle->data);
+ if (!ok) {
+ log_warn(LD_FS, "Failed to UnmapViewOfFile() in tor_munmap_file(): %d",
+ (int)GetLastError());
+ }
+ }
if (handle->mmap_handle != NULL)
CloseHandle(handle->mmap_handle);
tor_free(handle);
+
+ return 0;
}
#else
tor_mmap_t *
@@ -327,13 +400,25 @@ tor_mmap_file(const char *filename)
handle->size = st.st_size;
return handle;
}
-void
+
+/** Unmap the file mapped with tor_mmap_file(), and return 0 for success
+ * or -1 for failure.
+ */
+
+int
tor_munmap_file(tor_mmap_t *handle)
{
- char *d = (char*)handle->data;
+ char *d = NULL;
+ if (handle == NULL)
+ return 0;
+
+ d = (char*)handle->data;
tor_free(d);
memwipe(handle, 0, sizeof(tor_mmap_t));
tor_free(handle);
+
+ /* Can't fail in this mmap()/munmap()-free case */
+ return 0;
}
#endif
@@ -425,11 +510,10 @@ tor_vasprintf(char **strp, const char *fmt, va_list args)
else
*strp = strp_tmp;
return r;
-#elif defined(_MSC_VER)
+#elif defined(HAVE__VSCPRINTF)
/* On Windows, _vsnprintf won't tell us the length of the string if it
* overflows, so we need to use _vcsprintf to tell how much to allocate */
int len, r;
- char *res;
len = _vscprintf(fmt, args);
if (len < 0) {
*strp = NULL;
@@ -489,21 +573,29 @@ tor_memmem(const void *_haystack, size_t hlen,
#else
/* This isn't as fast as the GLIBC implementation, but it doesn't need to
* be. */
- const char *p, *end;
+ const char *p, *last_possible_start;
const char *haystack = (const char*)_haystack;
const char *needle = (const char*)_needle;
char first;
tor_assert(nlen);
+ if (nlen > hlen)
+ return NULL;
+
p = haystack;
- end = haystack + hlen;
+ /* Last position at which the needle could start. */
+ last_possible_start = haystack + hlen - nlen;
first = *(const char*)needle;
- while ((p = memchr(p, first, end-p))) {
- if (p+nlen > end)
- return NULL;
+ while ((p = memchr(p, first, last_possible_start + 1 - p))) {
if (fast_memeq(p, needle, nlen))
return p;
- ++p;
+ if (++p > last_possible_start) {
+ /* This comparison shouldn't be necessary, since if p was previously
+ * equal to last_possible_start, the next memchr call would be
+ * "memchr(p, first, 0)", which will return NULL. But it clarifies the
+ * logic. */
+ return NULL;
+ }
}
return NULL;
#endif
@@ -720,7 +812,7 @@ int
replace_file(const char *from, const char *to)
{
#ifndef _WIN32
- return rename(from,to);
+ return tor_rename(from, to);
#else
switch (file_status(to))
{
@@ -735,7 +827,7 @@ replace_file(const char *from, const char *to)
errno = EISDIR;
return -1;
}
- return rename(from,to);
+ return tor_rename(from,to);
#endif
}
@@ -861,6 +953,9 @@ tor_lockfile_unlock(tor_lockfile_t *lockfile)
/** @{ */
/** Some old versions of Unix didn't define constants for these values,
* and instead expect you to say 0, 1, or 2. */
+#ifndef SEEK_SET
+#define SEEK_SET 0
+#endif
#ifndef SEEK_CUR
#define SEEK_CUR 1
#endif
@@ -891,6 +986,18 @@ tor_fd_seekend(int fd)
#endif
}
+/** Move <b>fd</b> to position <b>pos</b> in the file. Return -1 on error, 0
+ * on success. */
+int
+tor_fd_setpos(int fd, off_t pos)
+{
+#ifdef _WIN32
+ return _lseek(fd, pos, SEEK_SET) < 0 ? -1 : 0;
+#else
+ return lseek(fd, pos, SEEK_SET) < 0 ? -1 : 0;
+#endif
+}
+
#undef DEBUG_SOCKET_COUNTING
#ifdef DEBUG_SOCKET_COUNTING
/** A bitarray of all fds that should be passed to tor_socket_close(). Only
@@ -924,24 +1031,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
@@ -956,13 +1079,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;
@@ -1008,26 +1129,62 @@ 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)
- fcntl(s, F_SETFD, FD_CLOEXEC);
+ 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
+ (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:
@@ -1038,19 +1195,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
@@ -1060,9 +1239,24 @@ tor_accept_socket(tor_socket_t sockfd, struct sockaddr *addr, socklen_t *len)
return s;
#if defined(FD_CLOEXEC)
- fcntl(s, F_SETFD, FD_CLOEXEC);
+ 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:
@@ -1084,17 +1278,31 @@ get_n_open_sockets(void)
return n;
}
-/** Turn <b>socket</b> into a nonblocking socket.
+/** Turn <b>socket</b> into a nonblocking socket. Return 0 on success, -1
+ * on failure.
*/
-void
+int
set_socket_nonblocking(tor_socket_t socket)
{
#if defined(_WIN32)
unsigned long nonblocking = 1;
ioctlsocket(socket, FIONBIO, (unsigned long*) &nonblocking);
#else
- fcntl(socket, F_SETFL, O_NONBLOCK);
+ int flags;
+
+ flags = fcntl(socket, F_GETFL, 0);
+ if (flags == -1) {
+ log_warn(LD_NET, "Couldn't get file status flags: %s", strerror(errno));
+ return -1;
+ }
+ flags |= O_NONBLOCK;
+ if (fcntl(socket, F_SETFL, flags) == -1) {
+ log_warn(LD_NET, "Couldn't set file status flags: %s", strerror(errno));
+ return -1;
+ }
#endif
+
+ return 0;
}
/**
@@ -1137,10 +1345,22 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
return -errno;
#if defined(FD_CLOEXEC)
- if (SOCKET_OK(fd[0]))
- fcntl(fd[0], F_SETFD, FD_CLOEXEC);
- if (SOCKET_OK(fd[1]))
- fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+ if (SOCKET_OK(fd[0])) {
+ r = fcntl(fd[0], F_SETFD, FD_CLOEXEC);
+ if (r == -1) {
+ close(fd[0]);
+ close(fd[1]);
+ return -errno;
+ }
+ }
+ if (SOCKET_OK(fd[1])) {
+ r = fcntl(fd[1], F_SETFD, FD_CLOEXEC);
+ if (r == -1) {
+ close(fd[0]);
+ close(fd[1]);
+ return -errno;
+ }
+ }
#endif
goto sockets_ok; /* So that sockets_ok will not be unused. */
@@ -1158,17 +1378,29 @@ 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
* have other problems too.
*/
- tor_socket_t listener = -1;
- tor_socket_t connector = -1;
- tor_socket_t acceptor = -1;
+ tor_socket_t listener = TOR_INVALID_SOCKET;
+ tor_socket_t connector = TOR_INVALID_SOCKET;
+ tor_socket_t acceptor = TOR_INVALID_SOCKET;
struct sockaddr_in listen_addr;
struct sockaddr_in connect_addr;
- int size;
+ socklen_t size;
int saved_errno = -1;
if (protocol
@@ -1219,7 +1451,6 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
goto tidy_up_and_fail;
if (size != sizeof(listen_addr))
goto abort_tidy_up_and_fail;
- tor_close_socket(listener);
/* Now check we are talking to ourself by matching port and host on the
two sockets. */
if (getsockname(connector, (struct sockaddr *) &connect_addr, &size) == -1)
@@ -1230,6 +1461,7 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
|| listen_addr.sin_port != connect_addr.sin_port) {
goto abort_tidy_up_and_fail;
}
+ tor_close_socket(listener);
fd[0] = connector;
fd[1] = acceptor;
@@ -1244,19 +1476,19 @@ tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2])
tidy_up_and_fail:
if (saved_errno < 0)
saved_errno = errno;
- if (listener != -1)
+ if (SOCKET_OK(listener))
tor_close_socket(listener);
- if (connector != -1)
+ if (SOCKET_OK(connector))
tor_close_socket(connector);
- if (acceptor != -1)
+ if (SOCKET_OK(acceptor))
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. */
-#define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond _ConnLimit */
+#define ULIMIT_BUFFER 32 /* keep 32 extra fd's beyond ConnLimit_ */
/** Learn the maximum allowed number of file descriptors, and tell the system
* we want to use up to that number. (Some systems have a low soft limit, and
@@ -1470,6 +1702,106 @@ log_credential_status(void)
}
#endif
+#ifndef _WIN32
+/** Cached struct from the last getpwname() call we did successfully. */
+static struct passwd *passwd_cached = NULL;
+
+/** Helper: copy a struct passwd object.
+ *
+ * We only copy the fields pw_uid, pw_gid, pw_name, pw_dir. Tor doesn't use
+ * any others, and I don't want to run into incompatibilities.
+ */
+static struct passwd *
+tor_passwd_dup(const struct passwd *pw)
+{
+ struct passwd *new_pw = tor_malloc_zero(sizeof(struct passwd));
+ if (pw->pw_name)
+ new_pw->pw_name = tor_strdup(pw->pw_name);
+ if (pw->pw_dir)
+ new_pw->pw_dir = tor_strdup(pw->pw_dir);
+ new_pw->pw_uid = pw->pw_uid;
+ new_pw->pw_gid = pw->pw_gid;
+
+ return new_pw;
+}
+
+/** Helper: free one of our cached 'struct passwd' values. */
+static void
+tor_passwd_free(struct passwd *pw)
+{
+ if (!pw)
+ return;
+
+ tor_free(pw->pw_name);
+ tor_free(pw->pw_dir);
+ tor_free(pw);
+}
+
+/** Wrapper around getpwnam() that caches result. Used so that we don't need
+ * to give the sandbox access to /etc/passwd.
+ *
+ * The following fields alone will definitely be copied in the output: pw_uid,
+ * pw_gid, pw_name, pw_dir. Other fields are not present in cached values.
+ *
+ * When called with a NULL argument, this function clears storage associated
+ * with static variables it uses.
+ **/
+const struct passwd *
+tor_getpwnam(const char *username)
+{
+ struct passwd *pw;
+
+ if (username == NULL) {
+ tor_passwd_free(passwd_cached);
+ passwd_cached = NULL;
+ return NULL;
+ }
+
+ if ((pw = getpwnam(username))) {
+ tor_passwd_free(passwd_cached);
+ passwd_cached = tor_passwd_dup(pw);
+ log_notice(LD_GENERAL, "Caching new entry %s for %s",
+ passwd_cached->pw_name, username);
+ return pw;
+ }
+
+ /* Lookup failed */
+ if (! passwd_cached || ! passwd_cached->pw_name)
+ return NULL;
+
+ if (! strcmp(username, passwd_cached->pw_name))
+ return passwd_cached;
+
+ return NULL;
+}
+
+/** Wrapper around getpwnam() that can use cached result from
+ * tor_getpwnam(). Used so that we don't need to give the sandbox access to
+ * /etc/passwd.
+ *
+ * The following fields alone will definitely be copied in the output: pw_uid,
+ * pw_gid, pw_name, pw_dir. Other fields are not present in cached values.
+ */
+const struct passwd *
+tor_getpwuid(uid_t uid)
+{
+ struct passwd *pw;
+
+ if ((pw = getpwuid(uid))) {
+ return pw;
+ }
+
+ /* Lookup failed */
+ if (! passwd_cached)
+ return NULL;
+
+ if (uid == passwd_cached->pw_uid)
+ return passwd_cached;
+
+ return NULL;
+}
+#endif
+
/** Call setuid and setgid to run as <b>user</b> and switch to their
* primary group. Return 0 on success. On failure, log and return -1.
*/
@@ -1477,7 +1809,7 @@ int
switch_id(const char *user)
{
#ifndef _WIN32
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
uid_t old_uid;
gid_t old_gid;
static int have_already_switched_id = 0;
@@ -1498,7 +1830,7 @@ switch_id(const char *user)
old_gid = getgid();
/* Lookup the user and group information, if we have a problem, bail out. */
- pw = getpwnam(user);
+ pw = tor_getpwnam(user);
if (pw == NULL) {
log_warn(LD_CONFIG, "Error setting configured user: %s not found", user);
return -1;
@@ -1669,10 +2001,10 @@ tor_disable_debugger_attach(void)
char *
get_user_homedir(const char *username)
{
- struct passwd *pw;
+ const struct passwd *pw;
tor_assert(username);
- if (!(pw = getpwnam(username))) {
+ if (!(pw = tor_getpwnam(username))) {
log_err(LD_CONFIG,"User \"%s\" not found.", username);
return NULL;
}
@@ -1684,6 +2016,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)
@@ -1957,8 +2298,10 @@ tor_inet_pton(int af, const char *src, void *dst)
else {
unsigned byte1,byte2,byte3,byte4;
char more;
- for (eow = dot-1; eow >= src && TOR_ISDIGIT(*eow); --eow)
+ for (eow = dot-1; eow > src && TOR_ISDIGIT(*eow); --eow)
;
+ if (*eow != ':')
+ return 0;
++eow;
/* We use "scanf" because some platform inet_aton()s are too lax
@@ -2060,30 +2403,6 @@ tor_lookup_hostname(const char *name, uint32_t *addr)
return -1;
}
-/** Initialize the insecure libc RNG. */
-void
-tor_init_weak_random(unsigned seed)
-{
-#ifdef _WIN32
- srand(seed);
-#else
- srandom(seed);
-#endif
-}
-
-/** Return a randomly chosen value in the range 0..TOR_RAND_MAX. This
- * entropy will not be cryptographically strong; do not rely on it
- * for anything an adversary should not be able to predict. */
-long
-tor_weak_random(void)
-{
-#ifdef _WIN32
- return rand();
-#else
- return random();
-#endif
-}
-
/** Hold the result of our call to <b>uname</b>. */
static char uname_result[256];
/** True iff uname_result is set. */
@@ -2210,6 +2529,12 @@ tor_pthread_helper_fn(void *_data)
func(arg);
return NULL;
}
+/**
+ * A pthread attribute to make threads start detached.
+ */
+static pthread_attr_t attr_detached;
+/** True iff we've called tor_threads_init() */
+static int threads_initialized = 0;
#endif
/** Minimalist interface to run a void function in the background. On
@@ -2233,12 +2558,12 @@ spawn_func(void (*func)(void *), void *data)
#elif defined(USE_PTHREADS)
pthread_t thread;
tor_pthread_data_t *d;
+ if (PREDICT_UNLIKELY(!threads_initialized))
+ tor_threads_init();
d = tor_malloc(sizeof(tor_pthread_data_t));
d->data = data;
d->func = func;
- if (pthread_create(&thread,NULL,tor_pthread_helper_fn,d))
- return -1;
- if (pthread_detach(thread))
+ if (pthread_create(&thread,&attr_detached,tor_pthread_helper_fn,d))
return -1;
return 0;
#else
@@ -2290,8 +2615,33 @@ compute_num_cpus_impl(void)
return (int)info.dwNumberOfProcessors;
else
return -1;
-#elif defined(HAVE_SYSCONF) && defined(_SC_NPROCESSORS_CONF)
- long cpus = sysconf(_SC_NPROCESSORS_CONF);
+#elif defined(HAVE_SYSCONF)
+#ifdef _SC_NPROCESSORS_CONF
+ long cpus_conf = sysconf(_SC_NPROCESSORS_CONF);
+#else
+ long cpus_conf = -1;
+#endif
+#ifdef _SC_NPROCESSORS_ONLN
+ long cpus_onln = sysconf(_SC_NPROCESSORS_ONLN);
+#else
+ long cpus_onln = -1;
+#endif
+ long cpus = -1;
+
+ if (cpus_conf > 0 && cpus_onln < 0) {
+ cpus = cpus_conf;
+ } else if (cpus_onln > 0 && cpus_conf < 0) {
+ cpus = cpus_onln;
+ } else if (cpus_onln > 0 && cpus_conf > 0) {
+ if (cpus_onln < cpus_conf) {
+ log_notice(LD_GENERAL, "I think we have %ld CPUS, but only %ld of them "
+ "are available. Telling Tor to only use %ld. You can over"
+ "ride this with the NumCPUs option",
+ cpus_conf, cpus_onln, cpus_onln);
+ }
+ cpus = cpus_onln;
+ }
+
if (cpus >= 1 && cpus < INT_MAX)
return (int)cpus;
else
@@ -2570,8 +2920,6 @@ tor_get_thread_id(void)
* "reentrant" mutexes (i.e., once we can re-lock if we're already holding
* them.) */
static pthread_mutexattr_t attr_reentrant;
-/** True iff we've called tor_threads_init() */
-static int threads_initialized = 0;
/** Initialize <b>mutex</b> so it can be locked. Every mutex must be set
* up with tor_mutex_init() or tor_mutex_new(); not both. */
void
@@ -2715,6 +3063,8 @@ tor_threads_init(void)
if (!threads_initialized) {
pthread_mutexattr_init(&attr_reentrant);
pthread_mutexattr_settype(&attr_reentrant, PTHREAD_MUTEX_RECURSIVE);
+ tor_assert(0==pthread_attr_init(&attr_detached));
+ tor_assert(0==pthread_attr_setdetachstate(&attr_detached, 1));
threads_initialized = 1;
set_main_thread();
}
@@ -2759,7 +3109,7 @@ tor_cond_wait(tor_cond_t *cond, tor_mutex_t *mutex)
EnterCriticalSection(&cond->mutex);
tor_assert(WaitForSingleObject(event, 0) == WAIT_TIMEOUT);
- tor_assert(!smartlist_isin(cond->events, event));
+ tor_assert(!smartlist_contains(cond->events, event));
smartlist_add(cond->events, event);
LeaveCriticalSection(&cond->mutex);
@@ -3090,3 +3440,119 @@ format_win32_error(DWORD err)
}
#endif
+#if defined(HW_PHYSMEM64)
+/* This appears to be an OpenBSD thing */
+#define INT64_HW_MEM HW_PHYSMEM64
+#elif defined(HW_MEMSIZE)
+/* OSX defines this one */
+#define INT64_HW_MEM HW_MEMSIZE
+#endif
+
+/**
+ * Helper: try to detect the total system memory, and return it. On failure,
+ * return 0.
+ */
+static uint64_t
+get_total_system_memory_impl(void)
+{
+#if defined(__linux__)
+ /* On linux, sysctl is deprecated. Because proc is so awesome that you
+ * shouldn't _want_ to write portable code, I guess? */
+ unsigned long long result=0;
+ int fd = -1;
+ char *s = NULL;
+ const char *cp;
+ size_t file_size=0;
+ if (-1 == (fd = tor_open_cloexec("/proc/meminfo",O_RDONLY,0)))
+ return 0;
+ s = read_file_to_str_until_eof(fd, 65536, &file_size);
+ if (!s)
+ goto err;
+ cp = strstr(s, "MemTotal:");
+ if (!cp)
+ goto err;
+ /* Use the system sscanf so that space will match a wider number of space */
+ if (sscanf(cp, "MemTotal: %llu kB\n", &result) != 1)
+ goto err;
+
+ close(fd);
+ tor_free(s);
+ return result * 1024;
+
+ err:
+ tor_free(s);
+ close(fd);
+ return 0;
+#elif defined (_WIN32)
+ /* Windows has MEMORYSTATUSEX; pretty straightforward. */
+ MEMORYSTATUSEX ms;
+ memset(&ms, 0, sizeof(ms));
+ ms.dwLength = sizeof(ms);
+ if (! GlobalMemoryStatusEx(&ms))
+ return 0;
+
+ return ms.ullTotalPhys;
+
+#elif defined(HAVE_SYSCTL) && defined(INT64_HW_MEM)
+ /* On many systems, HW_PYHSMEM is clipped to 32 bits; let's use a better
+ * variant if we know about it. */
+ uint64_t memsize = 0;
+ size_t len = sizeof(memsize);
+ int mib[2] = {CTL_HW, INT64_HW_MEM};
+ if (sysctl(mib,2,&memsize,&len,NULL,0))
+ return 0;
+
+ return memsize;
+
+#elif defined(HAVE_SYSCTL) && defined(HW_PHYSMEM)
+ /* On some systems (like FreeBSD I hope) you can use a size_t with
+ * HW_PHYSMEM. */
+ size_t memsize=0;
+ size_t len = sizeof(memsize);
+ int mib[2] = {CTL_HW, HW_USERMEM};
+ if (sysctl(mib,2,&memsize,&len,NULL,0))
+ return -1;
+
+ return memsize;
+
+#else
+ /* I have no clue. */
+ return 0;
+#endif
+}
+
+/**
+ * Try to find out how much physical memory the system has. On success,
+ * return 0 and set *<b>mem_out</b> to that value. On failure, return -1.
+ */
+int
+get_total_system_memory(size_t *mem_out)
+{
+ static size_t mem_cached=0;
+ uint64_t m = get_total_system_memory_impl();
+ if (0 == m) {
+ /* We couldn't find our memory total */
+ if (0 == mem_cached) {
+ /* We have no cached value either */
+ *mem_out = 0;
+ return -1;
+ }
+
+ *mem_out = mem_cached;
+ return 0;
+ }
+
+#if SIZE_T_MAX != UINT64_MAX
+ if (m > SIZE_T_MAX) {
+ /* I think this could happen if we're a 32-bit Tor running on a 64-bit
+ * system: we could have more system memory than would fit in a
+ * size_t. */
+ m = SIZE_T_MAX;
+ }
+#endif
+
+ *mem_out = mem_cached = (size_t) m;
+
+ return 0;
+}
+
diff --git a/src/common/compat.h b/src/common/compat.h
index 42648bb04..683c4d089 100644
--- a/src/common/compat.h
+++ b/src/common/compat.h
@@ -1,13 +1,14 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_COMPAT_H
-#define _TOR_COMPAT_H
+#ifndef TOR_COMPAT_H
+#define TOR_COMPAT_H
#include "orconfig.h"
#include "torint.h"
+#include "testsupport.h"
#ifdef _WIN32
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0501
@@ -53,13 +54,13 @@
#endif
#include <stdio.h>
+#include <errno.h>
#if defined (WINCE)
#include <fcntl.h>
#include <io.h>
#include <math.h>
#include <projects.h>
-#define snprintf _snprintf
/* this is not exported as W .... */
#define SHGetPathFromIDListW SHGetPathFromIDList
/* wcecompat has vasprintf */
@@ -74,19 +75,29 @@
#error "It seems your platform does not represent NULL as zero. We can't cope."
#endif
+#ifndef DOUBLE_0_REP_IS_ZERO_BYTES
+#error "It seems your platform does not represent 0.0 as zeros. We can't cope."
+#endif
+
#if 'a'!=97 || 'z'!=122 || 'A'!=65 || ' '!=32
#error "It seems that you encode characters in something other than ASCII."
#endif
/* ===== Compiler compatibility */
-/* GCC can check printf types on arbitrary functions. */
+/* GCC can check printf and scanf types on arbitrary functions. */
#ifdef __GNUC__
#define CHECK_PRINTF(formatIdx, firstArg) \
__attribute__ ((format(printf, formatIdx, firstArg)))
#else
#define CHECK_PRINTF(formatIdx, firstArg)
#endif
+#ifdef __GNUC__
+#define CHECK_SCANF(formatIdx, firstArg) \
+ __attribute__ ((format(scanf, formatIdx, firstArg)))
+#else
+#define CHECK_SCANF(formatIdx, firstArg)
+#endif
/* inline is __inline on windows. */
#ifdef _WIN32
@@ -132,6 +143,16 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define DBL_TO_U64(x) ((uint64_t) (x))
#endif
+#ifdef ENUM_VALS_ARE_SIGNED
+#define ENUM_BF(t) unsigned
+#else
+/** Wrapper for having a bitfield of an enumerated type. Where possible, we
+ * just use the enumerated type (so the compiler can help us and notice
+ * problems), but if enumerated types are unsigned, we must use unsigned,
+ * so that the loss of precision doesn't make large values negative. */
+#define ENUM_BF(t) t
+#endif
+
/* GCC has several useful attributes. */
#if defined(__GNUC__) && __GNUC__ >= 3
#define ATTR_NORETURN __attribute__((noreturn))
@@ -148,6 +169,7 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
*
* #define ATTR_NONNULL(x) __attribute__((nonnull x)) */
#define ATTR_NONNULL(x)
+#define ATTR_UNUSED __attribute__ ((unused))
/** Macro: Evaluates to <b>exp</b> and hints the compiler that the value
* of <b>exp</b> will probably be true.
@@ -171,6 +193,7 @@ extern INLINE double U64_TO_DBL(uint64_t x) {
#define ATTR_MALLOC
#define ATTR_NORETURN
#define ATTR_NONNULL(x)
+#define ATTR_UNUSED
#define PREDICT_LIKELY(exp) (exp)
#define PREDICT_UNLIKELY(exp) (exp)
#endif
@@ -239,6 +262,19 @@ size_t strlcpy(char *dst, const char *src, size_t siz) ATTR_NONNULL((1,2));
#define I64_FORMAT "%lld"
#endif
+#if (SIZEOF_INTPTR_T == SIZEOF_INT)
+#define INTPTR_T_FORMAT "%d"
+#define INTPTR_PRINTF_ARG(x) ((int)(x))
+#elif (SIZEOF_INTPTR_T == SIZEOF_LONG)
+#define INTPTR_T_FORMAT "%ld"
+#define INTPTR_PRINTF_ARG(x) ((long)(x))
+#elif (SIZEOF_INTPTR_T == 8)
+#define INTPTR_T_FORMAT I64_FORMAT
+#define INTPTR_PRINTF_ARG(x) I64_PRINTF_ARG(x)
+#else
+#error Unknown: SIZEOF_INTPTR_T
+#endif
+
/** Represents an mmaped file. Allocated via tor_mmap_file; freed with
* tor_munmap_file. */
typedef struct tor_mmap_t {
@@ -256,7 +292,7 @@ typedef struct tor_mmap_t {
} tor_mmap_t;
tor_mmap_t *tor_mmap_file(const char *filename) ATTR_NONNULL((1));
-void tor_munmap_file(tor_mmap_t *handle) ATTR_NONNULL((1));
+int tor_munmap_file(tor_mmap_t *handle) ATTR_NONNULL((1));
int tor_snprintf(char *str, size_t size, const char *format, ...)
CHECK_PRINTF(3,4) ATTR_NONNULL((1,3));
@@ -285,7 +321,7 @@ tor_memstr(const void *haystack, size_t hlen, const char *needle)
extern const uint32_t TOR_##name##_TABLE[]; \
static INLINE int TOR_##name(char c) { \
uint8_t u = c; \
- return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1 << (u & 31))); \
+ return !!(TOR_##name##_TABLE[(u >> 5) & 7] & (1u << (u & 31))); \
}
DECLARE_CTYPE_FN(ISALPHA)
DECLARE_CTYPE_FN(ISALNUM)
@@ -308,10 +344,10 @@ char *tor_strtok_r_impl(char *str, const char *sep, char **lasts);
#endif
#ifdef _WIN32
-#define _SHORT_FILE_ (tor_fix_source_file(__FILE__))
+#define SHORT_FILE__ (tor_fix_source_file(__FILE__))
const char *tor_fix_source_file(const char *fname);
#else
-#define _SHORT_FILE_ (__FILE__)
+#define SHORT_FILE__ (__FILE__)
#define tor_fix_source_file(s) (s)
#endif
@@ -374,6 +410,7 @@ struct tm *tor_gmtime_r(const time_t *timep, struct tm *result);
/* ===== File compatibility */
int tor_open_cloexec(const char *path, int flags, unsigned mode);
FILE *tor_fopen_cloexec(const char *path, const char *mode);
+int tor_rename(const char *path_old, const char *path_new);
int replace_file(const char *from, const char *to);
int touch_file(const char *fname);
@@ -384,6 +421,7 @@ tor_lockfile_t *tor_lockfile_lock(const char *filename, int blocking,
void tor_lockfile_unlock(tor_lockfile_t *lockfile);
off_t tor_fd_getpos(int fd);
+int tor_fd_setpos(int fd, off_t pos);
int tor_fd_seekend(int fd);
#ifdef _WIN32
@@ -403,21 +441,35 @@ typedef int socklen_t;
* any inadvertant checks for the socket being <= 0 or > 0 will probably
* still work. */
#define tor_socket_t intptr_t
+#define TOR_SOCKET_T_FORMAT INTPTR_T_FORMAT
#define SOCKET_OK(s) ((SOCKET)(s) != INVALID_SOCKET)
#define TOR_INVALID_SOCKET INVALID_SOCKET
#else
/** Type used for a network socket. */
#define tor_socket_t int
+#define TOR_SOCKET_T_FORMAT "%d"
/** Macro: true iff 's' is a possible value for a valid initialized socket. */
#define SOCKET_OK(s) ((s) >= 0)
/** Error/uninitialized value for a tor_socket_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)
@@ -489,7 +541,7 @@ int tor_inet_aton(const char *cp, struct in_addr *addr) ATTR_NONNULL((1,2));
const char *tor_inet_ntop(int af, const void *src, char *dst, size_t len);
int tor_inet_pton(int af, const char *src, void *dst);
int tor_lookup_hostname(const char *name, uint32_t *addr) ATTR_NONNULL((1,2));
-void set_socket_nonblocking(tor_socket_t socket);
+int set_socket_nonblocking(tor_socket_t socket);
int tor_socketpair(int family, int type, int protocol, tor_socket_t fd[2]);
int network_init(void);
@@ -523,10 +575,15 @@ int tor_socket_errno(tor_socket_t sock);
const char *tor_socket_strerror(int e);
#else
#define SOCK_ERRNO(e) e
+#if EAGAIN == EWOULDBLOCK
#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN)
+#else
+#define ERRNO_IS_EAGAIN(e) ((e) == EAGAIN || (e) == EWOULDBLOCK)
+#endif
#define ERRNO_IS_EINPROGRESS(e) ((e) == EINPROGRESS)
#define ERRNO_IS_CONN_EINPROGRESS(e) ((e) == EINPROGRESS)
-#define ERRNO_IS_ACCEPT_EAGAIN(e) ((e) == EAGAIN || (e) == ECONNABORTED)
+#define ERRNO_IS_ACCEPT_EAGAIN(e) \
+ (ERRNO_IS_EAGAIN(e) || (e) == ECONNABORTED)
#define ERRNO_IS_ACCEPT_RESOURCE_LIMIT(e) \
((e) == EMFILE || (e) == ENFILE || (e) == ENOBUFS || (e) == ENOMEM)
#define ERRNO_IS_EADDRINUSE(e) ((e) == EADDRINUSE)
@@ -547,11 +604,6 @@ typedef enum {
SOCKS5_ADDRESS_TYPE_NOT_SUPPORTED = 0x08,
} socks5_reply_status_t;
-/* ===== Insecure rng */
-void tor_init_weak_random(unsigned seed);
-long tor_weak_random(void);
-#define TOR_RAND_MAX (RAND_MAX)
-
/* ===== OS compatibility */
const char *get_uname(void);
@@ -581,11 +633,18 @@ int switch_id(const char *user);
char *get_user_homedir(const char *username);
#endif
+#ifndef _WIN32
+const struct passwd *tor_getpwnam(const char *username);
+const struct passwd *tor_getpwuid(uid_t uid);
+#endif
+
int get_parent_directory(char *fname);
char *make_path_absolute(char *fname);
char **get_environment(void);
+int get_total_system_memory(size_t *mem_out);
+
int spawn_func(void (*func)(void *), void *data);
void spawn_exit(void) ATTR_NORETURN;
@@ -690,5 +749,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/compat_libevent.c b/src/common/compat_libevent.c
index 6655ca87d..74b54bb85 100644
--- a/src/common/compat_libevent.c
+++ b/src/common/compat_libevent.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
+/* Copyright (c) 2009-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -13,6 +13,8 @@
#include "compat.h"
#include "compat_libevent.h"
+#include "crypto.h"
+
#include "util.h"
#include "torlog.h"
@@ -54,7 +56,9 @@ typedef uint32_t le_version_t;
* it is. */
#define LE_OTHER V(0,0,99)
+#if 0
static le_version_t tor_get_libevent_version(const char **v_out);
+#endif
#if defined(HAVE_EVENT_SET_LOG_CALLBACK) || defined(RUNNING_DOXYGEN)
/** A string which, if it appears in a libevent log, should be ignored. */
@@ -74,19 +78,19 @@ libevent_logging_callback(int severity, const char *msg)
}
switch (severity) {
case _EVENT_LOG_DEBUG:
- log(LOG_DEBUG, LD_NOCB|LD_NET, "Message from libevent: %s", buf);
+ log_debug(LD_NOCB|LD_NET, "Message from libevent: %s", buf);
break;
case _EVENT_LOG_MSG:
- log(LOG_INFO, LD_NOCB|LD_NET, "Message from libevent: %s", buf);
+ log_info(LD_NOCB|LD_NET, "Message from libevent: %s", buf);
break;
case _EVENT_LOG_WARN:
- log(LOG_WARN, LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf);
+ log_warn(LD_NOCB|LD_GENERAL, "Warning from libevent: %s", buf);
break;
case _EVENT_LOG_ERR:
- log(LOG_ERR, LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf);
+ log_err(LD_NOCB|LD_GENERAL, "Error from libevent: %s", buf);
break;
default:
- log(LOG_WARN, LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s",
+ log_warn(LD_NOCB|LD_GENERAL, "Message [%d] from libevent: %s",
severity, buf);
break;
}
@@ -185,13 +189,6 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
/* some paths below don't use torcfg, so avoid unused variable warnings */
(void)torcfg;
-#ifdef __APPLE__
- if (MACOSX_KQUEUE_IS_BROKEN ||
- tor_get_libevent_version(NULL) < V_OLD(1,1,'b')) {
- setenv("EVENT_NOKQUEUE","1",1);
- }
-#endif
-
#ifdef HAVE_EVENT2_EVENT_H
{
int attempts = 0;
@@ -266,13 +263,13 @@ tor_libevent_initialize(tor_libevent_cfg *torcfg)
#if defined(HAVE_EVENT_GET_VERSION) && defined(HAVE_EVENT_GET_METHOD)
/* Making this a NOTICE for now so we can link bugs to a libevent versions
* or methods better. */
- log(LOG_NOTICE, LD_GENERAL,
+ log_info(LD_GENERAL,
"Initialized libevent version %s using method %s. Good.",
event_get_version(), tor_libevent_get_method());
#else
- log(LOG_NOTICE, LD_GENERAL,
+ log_notice(LD_GENERAL,
"Initialized old libevent (version 1.0b or earlier).");
- log(LOG_WARN, LD_GENERAL,
+ log_warn(LD_GENERAL,
"You have a *VERY* old version of libevent. It is likely to be buggy; "
"please build Tor with a more recent version.");
#endif
@@ -364,6 +361,7 @@ le_versions_compatibility(le_version_t v)
return 5;
}
+#if 0
/** Return the version number of the currently running version of Libevent.
* See le_version_t for info on the format.
*/
@@ -386,6 +384,7 @@ tor_get_libevent_version(const char **v_out)
*v_out = v;
return r;
}
+#endif
/** Return a string representation of the version of the currently running
* version of Libevent. */
@@ -407,77 +406,9 @@ void
tor_check_libevent_version(const char *m, int server,
const char **badness_out)
{
- int buggy = 0, iffy = 0, slow = 0, thread_unsafe = 0;
- le_version_t version;
- const char *v = NULL;
- const char *badness = NULL;
- const char *sad_os = "";
-
- version = tor_get_libevent_version(&v);
-
- /* It would be better to disable known-buggy methods rather than warning
- * about them. But the problem is that with older versions of Libevent,
- * it's not trivial to get them to change their methods once they're
- * initialized... and with newer versions of Libevent, they aren't actually
- * broken. But we should revisit this if we ever find a post-1.4 version
- * of Libevent where we need to disable a given method. */
- if (!strcmp(m, "kqueue")) {
- if (version < V_OLD(1,1,'b'))
- buggy = 1;
- } else if (!strcmp(m, "epoll")) {
- if (version < V(1,1,0))
- iffy = 1;
- } else if (!strcmp(m, "poll")) {
- if (version < V_OLD(1,0,'e'))
- buggy = 1;
- if (version < V(1,1,0))
- slow = 1;
- } else if (!strcmp(m, "select")) {
- if (version < V(1,1,0))
- slow = 1;
- } else if (!strcmp(m, "win32")) {
- if (version < V_OLD(1,1,'b'))
- buggy = 1;
- }
-
- /* Libevent versions before 1.3b do very badly on operating systems with
- * user-space threading implementations. */
-#if defined(__OpenBSD__) || defined(__FreeBSD__) || defined(__NetBSD__)
- if (server && version < V_OLD(1,3,'b')) {
- thread_unsafe = 1;
- sad_os = "BSD variants";
- }
-#elif defined(__APPLE__) || defined(__darwin__)
- if (server && version < V_OLD(1,3,'b')) {
- thread_unsafe = 1;
- sad_os = "Mac OS X";
- }
-#endif
-
- if (thread_unsafe) {
- log(LOG_WARN, LD_GENERAL,
- "Libevent version %s often crashes when running a Tor server with %s. "
- "Please use the latest version of libevent (1.3b or later)",v,sad_os);
- badness = "BROKEN";
- } else if (buggy) {
- log(LOG_WARN, LD_GENERAL,
- "There are serious bugs in using %s with libevent %s. "
- "Please use the latest version of libevent.", m, v);
- badness = "BROKEN";
- } else if (iffy) {
- log(LOG_WARN, LD_GENERAL,
- "There are minor bugs in using %s with libevent %s. "
- "You may want to use the latest version of libevent.", m, v);
- badness = "BUGGY";
- } else if (slow && server) {
- log(LOG_WARN, LD_GENERAL,
- "libevent %s can be very slow with %s. "
- "When running a server, please use the latest version of libevent.",
- v,m);
- badness = "SLOW";
- }
-
- *badness_out = badness;
+ (void) m;
+ (void) server;
+ *badness_out = NULL;
}
#if defined(LIBEVENT_VERSION)
@@ -486,6 +417,14 @@ tor_check_libevent_version(const char *m, int server,
#define HEADER_VERSION _EVENT_VERSION
#endif
+/** Return a string representation of the version of Libevent that was used
+* at compilation time. */
+const char *
+tor_libevent_get_header_version_str(void)
+{
+ return HEADER_VERSION;
+}
+
/** See whether the headers we were built against differ from the library we
* linked against so much that we're likely to crash. If so, warn the
* user. */
@@ -511,7 +450,7 @@ tor_check_libevent_header_compatibility(void)
verybad = compat1 != compat2;
- log(verybad ? LOG_WARN : LOG_NOTICE,
+ tor_log(verybad ? LOG_WARN : LOG_NOTICE,
LD_GENERAL, "We were compiled with headers from version %s "
"of Libevent, but we're using a Libevent library that says it's "
"version %s.", HEADER_VERSION, event_get_version());
@@ -689,7 +628,25 @@ tor_add_bufferevent_to_rate_limit_group(struct bufferevent *bev,
}
#endif
-#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,1,1)
+int
+tor_init_libevent_rng(void)
+{
+ int rv = 0;
+#ifdef HAVE_EVUTIL_SECURE_RNG_INIT
+ char buf[256];
+ if (evutil_secure_rng_init() < 0) {
+ rv = -1;
+ }
+ /* Older libevent -- manually initialize the RNG */
+ crypto_rand(buf, 32);
+ evutil_secure_rng_add_bytes(buf, 32);
+ evutil_secure_rng_get_bytes(buf, sizeof(buf));
+#endif
+ return rv;
+}
+
+#if defined(LIBEVENT_VERSION_NUMBER) && LIBEVENT_VERSION_NUMBER >= V(2,1,1) \
+ && !defined(TOR_UNIT_TESTS)
void
tor_gettimeofday_cached(struct timeval *tv)
{
@@ -722,5 +679,45 @@ tor_gettimeofday_cache_clear(void)
{
cached_time_hires.tv_sec = 0;
}
+
+#ifdef TOR_UNIT_TESTS
+/** For testing: force-update the cached time to a given value. */
+void
+tor_gettimeofday_cache_set(const struct timeval *tv)
+{
+ tor_assert(tv);
+ memcpy(&cached_time_hires, tv, sizeof(*tv));
+}
+#endif
#endif
+/**
+ * As tor_gettimeofday_cached, but can never move backwards in time.
+ *
+ * The returned value may diverge from wall-clock time, since wall-clock time
+ * can trivially be adjusted backwards, and this can't. Don't mix wall-clock
+ * time with these values in the same calculation.
+ *
+ * Depending on implementation, this function may or may not "smooth out" huge
+ * jumps forward in wall-clock time. It may or may not keep its results
+ * advancing forward (as opposed to stalling) if the wall-clock time goes
+ * backwards. The current implementation does neither of of these.
+ *
+ * This function is not thread-safe; do not call it outside the main thread.
+ *
+ * In future versions of Tor, this may return a time does not have its
+ * origin at the Unix epoch.
+ */
+void
+tor_gettimeofday_cached_monotonic(struct timeval *tv)
+{
+ struct timeval last_tv = { 0, 0 };
+
+ tor_gettimeofday_cached(tv);
+ if (timercmp(tv, &last_tv, <)) {
+ memcpy(tv, &last_tv, sizeof(struct timeval));
+ } else {
+ memcpy(&last_tv, tv, sizeof(struct timeval));
+ }
+}
+
diff --git a/src/common/compat_libevent.h b/src/common/compat_libevent.h
index 56285ef80..9ee7b49cf 100644
--- a/src/common/compat_libevent.h
+++ b/src/common/compat_libevent.h
@@ -1,8 +1,8 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
+/* Copyright (c) 2009-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_COMPAT_LIBEVENT_H
-#define _TOR_COMPAT_LIBEVENT_H
+#ifndef TOR_COMPAT_LIBEVENT_H
+#define TOR_COMPAT_LIBEVENT_H
#include "orconfig.h"
@@ -78,6 +78,7 @@ void tor_check_libevent_version(const char *m, int server,
const char **badness_out);
void tor_check_libevent_header_compatibility(void);
const char *tor_libevent_get_version_str(void);
+const char *tor_libevent_get_header_version_str(void);
#ifdef USE_BUFFEREVENTS
const struct timeval *tor_libevent_get_one_tick_timeout(void);
@@ -88,8 +89,14 @@ int tor_add_bufferevent_to_rate_limit_group(struct bufferevent *bev,
struct bufferevent_rate_limit_group *g);
#endif
+int tor_init_libevent_rng(void);
+
void tor_gettimeofday_cached(struct timeval *tv);
void tor_gettimeofday_cache_clear(void);
+#ifdef TOR_UNIT_TESTS
+void tor_gettimeofday_cache_set(const struct timeval *tv);
+#endif
+void tor_gettimeofday_cached_monotonic(struct timeval *tv);
#endif
diff --git a/src/common/container.c b/src/common/container.c
index ede98eca5..b937d544f 100644
--- a/src/common/container.c
+++ b/src/common/container.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -163,7 +163,7 @@ smartlist_string_remove(smartlist_t *sl, const char *element)
/** Return true iff some element E of sl has E==element.
*/
int
-smartlist_isin(const smartlist_t *sl, const void *element)
+smartlist_contains(const smartlist_t *sl, const void *element)
{
int i;
for (i=0; i < sl->num_used; i++)
@@ -176,7 +176,7 @@ smartlist_isin(const smartlist_t *sl, const void *element)
* !strcmp(E,<b>element</b>)
*/
int
-smartlist_string_isin(const smartlist_t *sl, const char *element)
+smartlist_contains_string(const smartlist_t *sl, const char *element)
{
int i;
if (!sl) return 0;
@@ -203,7 +203,7 @@ smartlist_string_pos(const smartlist_t *sl, const char *element)
* !strcasecmp(E,<b>element</b>)
*/
int
-smartlist_string_isin_case(const smartlist_t *sl, const char *element)
+smartlist_contains_string_case(const smartlist_t *sl, const char *element)
{
int i;
if (!sl) return 0;
@@ -217,11 +217,11 @@ smartlist_string_isin_case(const smartlist_t *sl, const char *element)
* to the decimal encoding of <b>num</b>.
*/
int
-smartlist_string_num_isin(const smartlist_t *sl, int num)
+smartlist_contains_int_as_string(const smartlist_t *sl, int num)
{
char buf[32]; /* long enough for 64-bit int, and then some. */
tor_snprintf(buf,sizeof(buf),"%d", num);
- return smartlist_string_isin(sl, buf);
+ return smartlist_contains_string(sl, buf);
}
/** Return true iff the two lists contain the same strings in the same
@@ -243,11 +243,30 @@ smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2)
return 1;
}
+/** Return true iff the two lists contain the same int pointer values in
+ * the same order, or if they are both NULL. */
+int
+smartlist_ints_eq(const smartlist_t *sl1, const smartlist_t *sl2)
+{
+ if (sl1 == NULL)
+ return sl2 == NULL;
+ if (sl2 == NULL)
+ return 0;
+ if (smartlist_len(sl1) != smartlist_len(sl2))
+ return 0;
+ SMARTLIST_FOREACH(sl1, int *, cp1, {
+ int *cp2 = smartlist_get(sl2, cp1_sl_idx);
+ if (*cp1 != *cp2)
+ return 0;
+ });
+ return 1;
+}
+
/** Return true iff <b>sl</b> has some element E such that
* tor_memeq(E,<b>element</b>,DIGEST_LEN)
*/
int
-smartlist_digest_isin(const smartlist_t *sl, const char *element)
+smartlist_contains_digest(const smartlist_t *sl, const char *element)
{
int i;
if (!sl) return 0;
@@ -257,19 +276,19 @@ smartlist_digest_isin(const smartlist_t *sl, const char *element)
return 0;
}
-/** Return true iff some element E of sl2 has smartlist_isin(sl1,E).
+/** Return true iff some element E of sl2 has smartlist_contains(sl1,E).
*/
int
smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2)
{
int i;
for (i=0; i < sl2->num_used; i++)
- if (smartlist_isin(sl1, sl2->list[i]))
+ if (smartlist_contains(sl1, sl2->list[i]))
return 1;
return 0;
}
-/** Remove every element E of sl1 such that !smartlist_isin(sl2,E).
+/** Remove every element E of sl1 such that !smartlist_contains(sl2,E).
* Does not preserve the order of sl1.
*/
void
@@ -277,13 +296,13 @@ smartlist_intersect(smartlist_t *sl1, const smartlist_t *sl2)
{
int i;
for (i=0; i < sl1->num_used; i++)
- if (!smartlist_isin(sl2, sl1->list[i])) {
+ if (!smartlist_contains(sl2, sl1->list[i])) {
sl1->list[i] = sl1->list[--sl1->num_used]; /* swap with the end */
i--; /* so we process the new i'th element */
}
}
-/** Remove every element E of sl1 such that smartlist_isin(sl2,E).
+/** Remove every element E of sl1 such that smartlist_contains(sl2,E).
* Does not preserve the order of sl1.
*/
void
@@ -571,59 +590,116 @@ smartlist_bsearch_idx(const smartlist_t *sl, const void *key,
int (*compare)(const void *key, const void **member),
int *found_out)
{
- const int len = smartlist_len(sl);
- int hi, lo, cmp, mid;
+ int hi, lo, cmp, mid, len, diff;
+
+ tor_assert(sl);
+ tor_assert(compare);
+ tor_assert(found_out);
+ len = smartlist_len(sl);
+
+ /* Check for the trivial case of a zero-length list */
if (len == 0) {
*found_out = 0;
+ /* We already know smartlist_len(sl) is 0 in this case */
return 0;
- } else if (len == 1) {
- cmp = compare(key, (const void **) &sl->list[0]);
- if (cmp == 0) {
- *found_out = 1;
- return 0;
- } else if (cmp < 0) {
- *found_out = 0;
- return 0;
- } else {
- *found_out = 0;
- return 1;
- }
}
- hi = smartlist_len(sl) - 1;
+ /* Okay, we have a real search to do */
+ tor_assert(len > 0);
lo = 0;
+ hi = len - 1;
+
+ /*
+ * These invariants are always true:
+ *
+ * For all i such that 0 <= i < lo, sl[i] < key
+ * For all i such that hi < i <= len, sl[i] > key
+ */
while (lo <= hi) {
- mid = (lo + hi) / 2;
+ diff = hi - lo;
+ /*
+ * We want mid = (lo + hi) / 2, but that could lead to overflow, so
+ * instead diff = hi - lo (non-negative because of loop condition), and
+ * then hi = lo + diff, mid = (lo + lo + diff) / 2 = lo + (diff / 2).
+ */
+ mid = lo + (diff / 2);
cmp = compare(key, (const void**) &(sl->list[mid]));
- if (cmp>0) { /* key > sl[mid] */
- lo = mid+1;
- } else if (cmp<0) { /* key < sl[mid] */
- hi = mid-1;
- } else { /* key == sl[mid] */
+ if (cmp == 0) {
+ /* sl[mid] == key; we found it */
*found_out = 1;
return mid;
- }
- }
- /* lo > hi. */
- {
- tor_assert(lo >= 0);
- if (lo < smartlist_len(sl)) {
- cmp = compare(key, (const void**) &(sl->list[lo]));
+ } else if (cmp > 0) {
+ /*
+ * key > sl[mid] and an index i such that sl[i] == key must
+ * have i > mid if it exists.
+ */
+
+ /*
+ * Since lo <= mid <= hi, hi can only decrease on each iteration (by
+ * being set to mid - 1) and hi is initially len - 1, mid < len should
+ * always hold, and this is not symmetric with the left end of list
+ * mid > 0 test below. A key greater than the right end of the list
+ * should eventually lead to lo == hi == mid == len - 1, and then
+ * we set lo to len below and fall out to the same exit we hit for
+ * a key in the middle of the list but not matching. Thus, we just
+ * assert for consistency here rather than handle a mid == len case.
+ */
+ tor_assert(mid < len);
+ /* Move lo to the element immediately after sl[mid] */
+ lo = mid + 1;
+ } else {
+ /* This should always be true in this case */
tor_assert(cmp < 0);
- } else if (smartlist_len(sl)) {
- cmp = compare(key, (const void**) &(sl->list[smartlist_len(sl)-1]));
- tor_assert(cmp > 0);
+
+ /*
+ * key < sl[mid] and an index i such that sl[i] == key must
+ * have i < mid if it exists.
+ */
+
+ if (mid > 0) {
+ /* Normal case, move hi to the element immediately before sl[mid] */
+ hi = mid - 1;
+ } else {
+ /* These should always be true in this case */
+ tor_assert(mid == lo);
+ tor_assert(mid == 0);
+ /*
+ * We were at the beginning of the list and concluded that every
+ * element e compares e > key.
+ */
+ *found_out = 0;
+ return 0;
+ }
}
}
+
+ /*
+ * lo > hi; we have no element matching key but we have elements falling
+ * on both sides of it. The lo index points to the first element > key.
+ */
+ tor_assert(lo == hi + 1); /* All other cases should have been handled */
+ tor_assert(lo >= 0);
+ tor_assert(lo <= len);
+ tor_assert(hi >= 0);
+ tor_assert(hi <= len);
+
+ if (lo < len) {
+ cmp = compare(key, (const void **) &(sl->list[lo]));
+ tor_assert(cmp < 0);
+ } else {
+ cmp = compare(key, (const void **) &(sl->list[len-1]));
+ tor_assert(cmp > 0);
+ }
+
*found_out = 0;
return lo;
}
/** Helper: compare two const char **s. */
static int
-_compare_string_ptrs(const void **_a, const void **_b)
+compare_string_ptrs_(const void **_a, const void **_b)
{
return strcmp((const char*)*_a, (const char*)*_b);
}
@@ -633,14 +709,14 @@ _compare_string_ptrs(const void **_a, const void **_b)
void
smartlist_sort_strings(smartlist_t *sl)
{
- smartlist_sort(sl, _compare_string_ptrs);
+ smartlist_sort(sl, compare_string_ptrs_);
}
/** Return the most frequent string in the sorted list <b>sl</b> */
char *
smartlist_get_most_frequent_string(smartlist_t *sl)
{
- return smartlist_get_most_frequent(sl, _compare_string_ptrs);
+ return smartlist_get_most_frequent(sl, compare_string_ptrs_);
}
/** Remove duplicate strings from a sorted list, and free them with tor_free().
@@ -648,7 +724,27 @@ smartlist_get_most_frequent_string(smartlist_t *sl)
void
smartlist_uniq_strings(smartlist_t *sl)
{
- smartlist_uniq(sl, _compare_string_ptrs, _tor_free);
+ smartlist_uniq(sl, compare_string_ptrs_, tor_free_);
+}
+
+/** Helper: compare two pointers. */
+static int
+compare_ptrs_(const void **_a, const void **_b)
+{
+ const void *a = *_a, *b = *_b;
+ if (a<b)
+ return -1;
+ else if (a==b)
+ return 0;
+ else
+ return 1;
+}
+
+/** Sort <b>sl</b> in ascending order of the pointers it contains. */
+void
+smartlist_sort_pointers(smartlist_t *sl)
+{
+ smartlist_sort(sl, compare_ptrs_);
}
/* Heap-based priority queue implementation for O(lg N) insert and remove.
@@ -849,7 +945,7 @@ smartlist_pqueue_assert_ok(smartlist_t *sl,
/** Helper: compare two DIGEST_LEN digests. */
static int
-_compare_digests(const void **_a, const void **_b)
+compare_digests_(const void **_a, const void **_b)
{
return tor_memcmp((const char*)*_a, (const char*)*_b, DIGEST_LEN);
}
@@ -858,7 +954,7 @@ _compare_digests(const void **_a, const void **_b)
void
smartlist_sort_digests(smartlist_t *sl)
{
- smartlist_sort(sl, _compare_digests);
+ smartlist_sort(sl, compare_digests_);
}
/** Remove duplicate digests from a sorted list, and free them with tor_free().
@@ -866,12 +962,12 @@ smartlist_sort_digests(smartlist_t *sl)
void
smartlist_uniq_digests(smartlist_t *sl)
{
- smartlist_uniq(sl, _compare_digests, _tor_free);
+ smartlist_uniq(sl, compare_digests_, tor_free_);
}
/** Helper: compare two DIGEST256_LEN digests. */
static int
-_compare_digests256(const void **_a, const void **_b)
+compare_digests256_(const void **_a, const void **_b)
{
return tor_memcmp((const char*)*_a, (const char*)*_b, DIGEST256_LEN);
}
@@ -880,7 +976,7 @@ _compare_digests256(const void **_a, const void **_b)
void
smartlist_sort_digests256(smartlist_t *sl)
{
- smartlist_sort(sl, _compare_digests256);
+ smartlist_sort(sl, compare_digests256_);
}
/** Return the most frequent member of the sorted list of DIGEST256_LEN
@@ -888,7 +984,7 @@ smartlist_sort_digests256(smartlist_t *sl)
char *
smartlist_get_most_frequent_digest256(smartlist_t *sl)
{
- return smartlist_get_most_frequent(sl, _compare_digests256);
+ return smartlist_get_most_frequent(sl, compare_digests256_);
}
/** Remove duplicate 256-bit digests from a sorted list, and free them with
@@ -897,7 +993,7 @@ smartlist_get_most_frequent_digest256(smartlist_t *sl)
void
smartlist_uniq_digests256(smartlist_t *sl)
{
- smartlist_uniq(sl, _compare_digests256, _tor_free);
+ smartlist_uniq(sl, compare_digests256_, tor_free_);
}
/** Helper: Declare an entry type and a map type to implement a mapping using
@@ -928,7 +1024,7 @@ strmap_entries_eq(const strmap_entry_t *a, const strmap_entry_t *b)
static INLINE unsigned int
strmap_entry_hash(const strmap_entry_t *a)
{
- return ht_string_hash(a->key);
+ return (unsigned) siphash24g(a->key, strlen(a->key));
}
/** Helper: compare digestmap_entry_t objects by key value. */
@@ -942,13 +1038,7 @@ digestmap_entries_eq(const digestmap_entry_t *a, const digestmap_entry_t *b)
static INLINE unsigned int
digestmap_entry_hash(const digestmap_entry_t *a)
{
-#if SIZEOF_INT != 8
- const uint32_t *p = (const uint32_t*)a->key;
- return p[0] ^ p[1] ^ p[2] ^ p[3] ^ p[4];
-#else
- const uint64_t *p = (const uint64_t*)a->key;
- return p[0] ^ p[1];
-#endif
+ return (unsigned) siphash24g(a->key, DIGEST_LEN);
}
HT_PROTOTYPE(strmap_impl, strmap_entry_t, node, strmap_entry_hash,
diff --git a/src/common/container.h b/src/common/container.h
index dab3b83f3..0d31f2093 100644
--- a/src/common/container.h
+++ b/src/common/container.h
@@ -1,12 +1,13 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_CONTAINER_H
-#define _TOR_CONTAINER_H
+#ifndef TOR_CONTAINER_H
+#define TOR_CONTAINER_H
#include "util.h"
+#include "siphash.h"
/** A resizeable list of pointers, with associated helpful functionality.
*
@@ -35,13 +36,14 @@ void smartlist_remove(smartlist_t *sl, const void *element);
void *smartlist_pop_last(smartlist_t *sl);
void smartlist_reverse(smartlist_t *sl);
void smartlist_string_remove(smartlist_t *sl, const char *element);
-int smartlist_isin(const smartlist_t *sl, const void *element);
-int smartlist_string_isin(const smartlist_t *sl, const char *element);
+int smartlist_contains(const smartlist_t *sl, const void *element);
+int smartlist_contains_string(const smartlist_t *sl, const char *element);
int smartlist_string_pos(const smartlist_t *, const char *elt);
-int smartlist_string_isin_case(const smartlist_t *sl, const char *element);
-int smartlist_string_num_isin(const smartlist_t *sl, int num);
+int smartlist_contains_string_case(const smartlist_t *sl, const char *element);
+int smartlist_contains_int_as_string(const smartlist_t *sl, int num);
int smartlist_strings_eq(const smartlist_t *sl1, const smartlist_t *sl2);
-int smartlist_digest_isin(const smartlist_t *sl, const char *element);
+int smartlist_contains_digest(const smartlist_t *sl, const char *element);
+int smartlist_ints_eq(const smartlist_t *sl1, const smartlist_t *sl2);
int smartlist_overlap(const smartlist_t *sl1, const smartlist_t *sl2);
void smartlist_intersect(smartlist_t *sl1, const smartlist_t *sl2);
void smartlist_subtract(smartlist_t *sl1, const smartlist_t *sl2);
@@ -101,6 +103,7 @@ void smartlist_uniq(smartlist_t *sl,
void smartlist_sort_strings(smartlist_t *sl);
void smartlist_sort_digests(smartlist_t *sl);
void smartlist_sort_digests256(smartlist_t *sl);
+void smartlist_sort_pointers(smartlist_t *sl);
char *smartlist_get_most_frequent_string(smartlist_t *sl);
char *smartlist_get_most_frequent_digest256(smartlist_t *sl);
@@ -471,64 +474,74 @@ void* strmap_remove_lc(strmap_t *map, const char *key);
#define DECLARE_TYPED_DIGESTMAP_FNS(prefix, maptype, valtype) \
typedef struct maptype maptype; \
typedef struct prefix##iter_t prefix##iter_t; \
- static INLINE maptype* prefix##new(void) \
+ ATTR_UNUSED static INLINE maptype* \
+ prefix##new(void) \
{ \
return (maptype*)digestmap_new(); \
} \
- static INLINE digestmap_t* prefix##to_digestmap(maptype *map) \
+ ATTR_UNUSED static INLINE digestmap_t* \
+ prefix##to_digestmap(maptype *map) \
{ \
return (digestmap_t*)map; \
} \
- static INLINE valtype* prefix##get(maptype *map, const char *key) \
+ ATTR_UNUSED static INLINE valtype* \
+ prefix##get(maptype *map, const char *key) \
{ \
return (valtype*)digestmap_get((digestmap_t*)map, key); \
} \
- static INLINE valtype* prefix##set(maptype *map, const char *key, \
- valtype *val) \
+ ATTR_UNUSED static INLINE valtype* \
+ prefix##set(maptype *map, const char *key, valtype *val) \
{ \
return (valtype*)digestmap_set((digestmap_t*)map, key, val); \
} \
- static INLINE valtype* prefix##remove(maptype *map, const char *key) \
+ ATTR_UNUSED static INLINE valtype* \
+ prefix##remove(maptype *map, const char *key) \
{ \
return (valtype*)digestmap_remove((digestmap_t*)map, key); \
} \
- static INLINE void prefix##free(maptype *map, void (*free_val)(void*)) \
+ ATTR_UNUSED static INLINE void \
+ prefix##free(maptype *map, void (*free_val)(void*)) \
{ \
digestmap_free((digestmap_t*)map, free_val); \
} \
- static INLINE int prefix##isempty(maptype *map) \
+ ATTR_UNUSED static INLINE int \
+ prefix##isempty(maptype *map) \
{ \
return digestmap_isempty((digestmap_t*)map); \
} \
- static INLINE int prefix##size(maptype *map) \
+ ATTR_UNUSED static INLINE int \
+ prefix##size(maptype *map) \
{ \
return digestmap_size((digestmap_t*)map); \
} \
- static INLINE prefix##iter_t *prefix##iter_init(maptype *map) \
+ ATTR_UNUSED static INLINE \
+ prefix##iter_t *prefix##iter_init(maptype *map) \
{ \
return (prefix##iter_t*) digestmap_iter_init((digestmap_t*)map); \
} \
- static INLINE prefix##iter_t *prefix##iter_next(maptype *map, \
- prefix##iter_t *iter) \
+ ATTR_UNUSED static INLINE \
+ prefix##iter_t *prefix##iter_next(maptype *map, prefix##iter_t *iter) \
{ \
return (prefix##iter_t*) digestmap_iter_next( \
(digestmap_t*)map, (digestmap_iter_t*)iter); \
} \
- static INLINE prefix##iter_t *prefix##iter_next_rmv(maptype *map, \
- prefix##iter_t *iter) \
+ ATTR_UNUSED static INLINE prefix##iter_t* \
+ prefix##iter_next_rmv(maptype *map, prefix##iter_t *iter) \
{ \
return (prefix##iter_t*) digestmap_iter_next_rmv( \
(digestmap_t*)map, (digestmap_iter_t*)iter); \
} \
- static INLINE void prefix##iter_get(prefix##iter_t *iter, \
- const char **keyp, \
- valtype **valp) \
+ ATTR_UNUSED static INLINE void \
+ prefix##iter_get(prefix##iter_t *iter, \
+ const char **keyp, \
+ valtype **valp) \
{ \
void *v; \
digestmap_iter_get((digestmap_iter_t*) iter, keyp, &v); \
*valp = v; \
} \
- static INLINE int prefix##iter_done(prefix##iter_t *iter) \
+ ATTR_UNUSED static INLINE int \
+ prefix##iter_done(prefix##iter_t *iter) \
{ \
return digestmap_iter_done((digestmap_iter_t*)iter); \
}
@@ -609,11 +622,11 @@ typedef struct {
static INLINE void
digestset_add(digestset_t *set, const char *digest)
{
- const uint32_t *p = (const uint32_t *)digest;
- const uint32_t d1 = p[0] + (p[1]>>16);
- const uint32_t d2 = p[1] + (p[2]>>16);
- const uint32_t d3 = p[2] + (p[3]>>16);
- const uint32_t d4 = p[3] + (p[0]>>16);
+ const uint64_t x = siphash24g(digest, 20);
+ const uint32_t d1 = (uint32_t) x;
+ const uint32_t d2 = (uint32_t)( (x>>16) + x);
+ const uint32_t d3 = (uint32_t)( (x>>32) + x);
+ const uint32_t d4 = (uint32_t)( (x>>48) + x);
bitarray_set(set->ba, BIT(d1));
bitarray_set(set->ba, BIT(d2));
bitarray_set(set->ba, BIT(d3));
@@ -623,13 +636,13 @@ digestset_add(digestset_t *set, const char *digest)
/** If <b>digest</b> is in <b>set</b>, return nonzero. Otherwise,
* <em>probably</em> return zero. */
static INLINE int
-digestset_isin(const digestset_t *set, const char *digest)
+digestset_contains(const digestset_t *set, const char *digest)
{
- const uint32_t *p = (const uint32_t *)digest;
- const uint32_t d1 = p[0] + (p[1]>>16);
- const uint32_t d2 = p[1] + (p[2]>>16);
- const uint32_t d3 = p[2] + (p[3]>>16);
- const uint32_t d4 = p[3] + (p[0]>>16);
+ const uint64_t x = siphash24g(digest, 20);
+ const uint32_t d1 = (uint32_t) x;
+ const uint32_t d2 = (uint32_t)( (x>>16) + x);
+ const uint32_t d3 = (uint32_t)( (x>>32) + x);
+ const uint32_t d4 = (uint32_t)( (x>>48) + x);
return bitarray_is_set(set->ba, BIT(d1)) &&
bitarray_is_set(set->ba, BIT(d2)) &&
bitarray_is_set(set->ba, BIT(d3)) &&
@@ -675,11 +688,6 @@ median_int32(int32_t *array, int n_elements)
{
return find_nth_int32(array, n_elements, (n_elements-1)/2);
}
-static INLINE long
-median_long(long *array, int n_elements)
-{
- return find_nth_long(array, n_elements, (n_elements-1)/2);
-}
#endif
diff --git a/src/common/crypto.c b/src/common/crypto.c
index 30990ecc8..a247a87d4 100644
--- a/src/common/crypto.c
+++ b/src/common/crypto.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -56,9 +56,10 @@
#include "../common/util.h"
#include "container.h"
#include "compat.h"
+#include "sandbox.h"
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,7)
-#error "We require OpenSSL >= 0.9.7"
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
+#error "We require OpenSSL >= 0.9.8"
#endif
#ifdef ANDROID
@@ -69,31 +70,6 @@
/** Longest recognized */
#define MAX_DNS_LABEL_SIZE 63
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8) && \
- !defined(RUNNING_DOXYGEN)
-/** @{ */
-/** On OpenSSL versions before 0.9.8, there is no working SHA256
- * implementation, so we use Tom St Denis's nice speedy one, slightly adapted
- * to our needs. These macros make it usable by us. */
-#define SHA256_CTX sha256_state
-#define SHA256_Init sha256_init
-#define SHA256_Update sha256_process
-#define LTC_ARGCHK(x) tor_assert(x)
-/** @} */
-#include "sha256.c"
-#define SHA256_Final(a,b) sha256_done(b,a)
-
-static unsigned char *
-SHA256(const unsigned char *m, size_t len, unsigned char *d)
-{
- SHA256_CTX ctx;
- SHA256_Init(&ctx);
- SHA256_Update(&ctx, m, len);
- SHA256_Final(d, &ctx);
- return d;
-}
-#endif
-
/** Macro: is k a valid RSA public or private key? */
#define PUBLIC_KEY_OK(k) ((k) && (k)->key && (k)->key->n)
/** Macro: is k a valid RSA private key? */
@@ -101,9 +77,9 @@ SHA256(const unsigned char *m, size_t len, unsigned char *d)
#ifdef TOR_IS_MULTITHREADED
/** A number of preallocated mutexes for use by OpenSSL. */
-static tor_mutex_t **_openssl_mutexes = NULL;
+static tor_mutex_t **openssl_mutexes_ = NULL;
/** How many mutexes have we allocated for use by OpenSSL? */
-static int _n_openssl_mutexes = 0;
+static int n_openssl_mutexes_ = 0;
#endif
/** A public key, or a public/private key-pair. */
@@ -138,8 +114,7 @@ crypto_get_rsa_padding_overhead(int padding)
{
switch (padding)
{
- case RSA_PKCS1_OAEP_PADDING: return 42;
- case RSA_PKCS1_PADDING: return 11;
+ case RSA_PKCS1_OAEP_PADDING: return PKCS1_OAEP_PADDING_OVERHEAD;
default: tor_assert(0); return -1;
}
}
@@ -151,14 +126,16 @@ crypto_get_rsa_padding(int padding)
{
switch (padding)
{
- case PK_PKCS1_PADDING: return RSA_PKCS1_PADDING;
case PK_PKCS1_OAEP_PADDING: return RSA_PKCS1_OAEP_PADDING;
default: tor_assert(0); return -1;
}
}
/** Boolean: has OpenSSL's crypto been initialized? */
-static int _crypto_global_initialized = 0;
+static int crypto_early_initialized_ = 0;
+
+/** Boolean: has OpenSSL's crypto been initialized? */
+static int crypto_global_initialized_ = 0;
/** Log all pending crypto errors at level <b>severity</b>. Use
* <b>doing</b> to describe our current activities.
@@ -176,10 +153,11 @@ crypto_log_errors(int severity, const char *doing)
if (!lib) lib = "(null)";
if (!func) func = "(null)";
if (doing) {
- log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
- doing, msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
+ doing, msg, lib, func);
} else {
- log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)", msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)",
+ msg, lib, func);
}
}
}
@@ -193,10 +171,10 @@ log_engine(const char *fn, ENGINE *e)
const char *name, *id;
name = ENGINE_get_name(e);
id = ENGINE_get_id(e);
- log(LOG_NOTICE, LD_CRYPTO, "Using OpenSSL engine %s [%s] for %s",
- name?name:"?", id?id:"?", fn);
+ log_notice(LD_CRYPTO, "Default OpenSSL engine for %s is %s [%s]",
+ fn, name?name:"?", id?id:"?");
} else {
- log(LOG_INFO, LD_CRYPTO, "Using default implementation for %s", fn);
+ log_info(LD_CRYPTO, "Using default implementation for %s", fn);
}
}
#endif
@@ -221,16 +199,136 @@ try_load_engine(const char *path, const char *engine)
}
#endif
+/* Returns a trimmed and human-readable version of an openssl version string
+* <b>raw_version</b>. They are usually in the form of 'OpenSSL 1.0.0b 10
+* May 2012' and this will parse them into a form similar to '1.0.0b' */
+static char *
+parse_openssl_version_str(const char *raw_version)
+{
+ const char *end_of_version = NULL;
+ /* The output should be something like "OpenSSL 1.0.0b 10 May 2012. Let's
+ trim that down. */
+ if (!strcmpstart(raw_version, "OpenSSL ")) {
+ raw_version += strlen("OpenSSL ");
+ end_of_version = strchr(raw_version, ' ');
+ }
+
+ if (end_of_version)
+ return tor_strndup(raw_version,
+ end_of_version-raw_version);
+ else
+ return tor_strdup(raw_version);
+}
+
+static char *crypto_openssl_version_str = NULL;
+/* Return a human-readable version of the run-time openssl version number. */
+const char *
+crypto_openssl_get_version_str(void)
+{
+ if (crypto_openssl_version_str == NULL) {
+ const char *raw_version = SSLeay_version(SSLEAY_VERSION);
+ crypto_openssl_version_str = parse_openssl_version_str(raw_version);
+ }
+ return crypto_openssl_version_str;
+}
+
+static char *crypto_openssl_header_version_str = NULL;
+/* Return a human-readable version of the compile-time openssl version
+* number. */
+const char *
+crypto_openssl_get_header_version_str(void)
+{
+ if (crypto_openssl_header_version_str == NULL) {
+ crypto_openssl_header_version_str =
+ parse_openssl_version_str(OPENSSL_VERSION_TEXT);
+ }
+ return crypto_openssl_header_version_str;
+}
+
+/** Make sure that openssl is using its default PRNG. Return 1 if we had to
+ * adjust it; 0 otherwise. */
+static int
+crypto_force_rand_ssleay(void)
+{
+ if (RAND_get_rand_method() != RAND_SSLeay()) {
+ log_notice(LD_CRYPTO, "It appears that one of our engines has provided "
+ "a replacement the OpenSSL RNG. Resetting it to the default "
+ "implementation.");
+ RAND_set_rand_method(RAND_SSLeay());
+ return 1;
+ }
+ return 0;
+}
+
+/** Set up the siphash key if we haven't already done so. */
+int
+crypto_init_siphash_key(void)
+{
+ static int have_seeded_siphash = 0;
+ struct sipkey key;
+ if (have_seeded_siphash)
+ return 0;
+
+ if (crypto_rand((char*) &key, sizeof(key)) < 0)
+ return -1;
+ siphash_set_global_key(&key);
+ have_seeded_siphash = 1;
+ return 0;
+}
+
/** Initialize the crypto library. Return 0 on success, -1 on failure.
*/
int
-crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
+crypto_early_init(void)
{
- if (!_crypto_global_initialized) {
+ if (!crypto_early_initialized_) {
+
+ crypto_early_initialized_ = 1;
+
ERR_load_crypto_strings();
OpenSSL_add_all_algorithms();
- _crypto_global_initialized = 1;
+
setup_openssl_threading();
+
+ if (SSLeay() == OPENSSL_VERSION_NUMBER &&
+ !strcmp(SSLeay_version(SSLEAY_VERSION), OPENSSL_VERSION_TEXT)) {
+ log_info(LD_CRYPTO, "OpenSSL version matches version from headers "
+ "(%lx: %s).", SSLeay(), SSLeay_version(SSLEAY_VERSION));
+ } else {
+ log_warn(LD_CRYPTO, "OpenSSL version from headers does not match the "
+ "version we're running with. If you get weird crashes, that "
+ "might be why. (Compiled with %lx: %s; running with %lx: %s).",
+ (unsigned long)OPENSSL_VERSION_NUMBER, OPENSSL_VERSION_TEXT,
+ SSLeay(), SSLeay_version(SSLEAY_VERSION));
+ }
+
+ if (SSLeay() < OPENSSL_V_SERIES(1,0,0)) {
+ log_notice(LD_CRYPTO,
+ "Your OpenSSL version seems to be %s. We recommend 1.0.0 "
+ "or later.",
+ crypto_openssl_get_version_str());
+ }
+
+ crypto_force_rand_ssleay();
+
+ if (crypto_seed_rng(1) < 0)
+ return -1;
+ if (crypto_init_siphash_key() < 0)
+ return -1;
+ }
+ return 0;
+}
+
+/** Initialize the crypto library. Return 0 on success, -1 on failure.
+ */
+int
+crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
+{
+ if (!crypto_global_initialized_) {
+ crypto_early_init();
+
+ crypto_global_initialized_ = 1;
+
if (useAccel > 0) {
#ifdef DISABLE_ENGINES
(void)accelName;
@@ -266,21 +364,41 @@ crypto_global_init(int useAccel, const char *accelName, const char *accelDir)
" setting default ciphers.");
ENGINE_set_default(e, ENGINE_METHOD_ALL);
}
+ /* Log, if available, the intersection of the set of algorithms
+ used by Tor and the set of algorithms available in the engine */
log_engine("RSA", ENGINE_get_default_RSA());
log_engine("DH", ENGINE_get_default_DH());
+ log_engine("ECDH", ENGINE_get_default_ECDH());
+ log_engine("ECDSA", ENGINE_get_default_ECDSA());
log_engine("RAND", ENGINE_get_default_RAND());
+ log_engine("RAND (which we will not use)", ENGINE_get_default_RAND());
log_engine("SHA1", ENGINE_get_digest_engine(NID_sha1));
- log_engine("3DES", ENGINE_get_cipher_engine(NID_des_ede3_ecb));
- log_engine("AES", ENGINE_get_cipher_engine(NID_aes_128_ecb));
+ log_engine("3DES-CBC", ENGINE_get_cipher_engine(NID_des_ede3_cbc));
+ log_engine("AES-128-ECB", ENGINE_get_cipher_engine(NID_aes_128_ecb));
+ log_engine("AES-128-CBC", ENGINE_get_cipher_engine(NID_aes_128_cbc));
+#ifdef NID_aes_128_ctr
+ log_engine("AES-128-CTR", ENGINE_get_cipher_engine(NID_aes_128_ctr));
+#endif
+#ifdef NID_aes_128_gcm
+ log_engine("AES-128-GCM", ENGINE_get_cipher_engine(NID_aes_128_gcm));
+#endif
+ log_engine("AES-256-CBC", ENGINE_get_cipher_engine(NID_aes_256_cbc));
+#ifdef NID_aes_256_gcm
+ log_engine("AES-256-GCM", ENGINE_get_cipher_engine(NID_aes_256_gcm));
+#endif
+
#endif
} else {
log_info(LD_CRYPTO, "NOT using OpenSSL engine support.");
}
+ if (crypto_force_rand_ssleay()) {
+ if (crypto_seed_rng(1) < 0)
+ return -1;
+ }
+
evaluate_evp_for_aes(-1);
evaluate_ctr_for_aes();
-
- return crypto_seed_rng(1);
}
return 0;
}
@@ -294,7 +412,7 @@ crypto_thread_cleanup(void)
/** used by tortls.c: wrap an RSA* in a crypto_pk_t. */
crypto_pk_t *
-_crypto_new_pk_from_rsa(RSA *rsa)
+crypto_new_pk_from_rsa_(RSA *rsa)
{
crypto_pk_t *env;
tor_assert(rsa);
@@ -307,7 +425,7 @@ _crypto_new_pk_from_rsa(RSA *rsa)
/** Helper, used by tor-checkkey.c and tor-gencert.c. Return the RSA from a
* crypto_pk_t. */
RSA *
-_crypto_pk_get_rsa(crypto_pk_t *env)
+crypto_pk_get_rsa_(crypto_pk_t *env)
{
return env->key;
}
@@ -315,7 +433,7 @@ _crypto_pk_get_rsa(crypto_pk_t *env)
/** used by tortls.c: get an equivalent EVP_PKEY* for a crypto_pk_t. Iff
* private is set, include the private-key portion of the key. */
EVP_PKEY *
-_crypto_pk_get_evp_pkey(crypto_pk_t *env, int private)
+crypto_pk_get_evp_pkey_(crypto_pk_t *env, int private)
{
RSA *key = NULL;
EVP_PKEY *pkey = NULL;
@@ -343,7 +461,7 @@ _crypto_pk_get_evp_pkey(crypto_pk_t *env, int private)
/** Used by tortls.c: Get the DH* from a crypto_dh_t.
*/
DH *
-_crypto_dh_get_dh(crypto_dh_t *dh)
+crypto_dh_get_dh_(crypto_dh_t *dh)
{
return dh->dh;
}
@@ -358,7 +476,7 @@ crypto_pk_new(void)
rsa = RSA_new();
tor_assert(rsa);
- return _crypto_new_pk_from_rsa(rsa);
+ return crypto_new_pk_from_rsa_(rsa);
}
/** Release a reference to an asymmetric key; when all the references
@@ -441,11 +559,7 @@ crypto_pk_generate_key_with_bits(crypto_pk_t *env, int bits)
if (env->key)
RSA_free(env->key);
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
- /* In OpenSSL 0.9.7, RSA_generate_key is all we have. */
- env->key = RSA_generate_key(bits, 65537, NULL, NULL);
-#else
- /* In OpenSSL 0.9.8, RSA_generate_key is deprecated. */
+
{
BIGNUM *e = BN_new();
RSA *r = NULL;
@@ -463,11 +577,11 @@ crypto_pk_generate_key_with_bits(crypto_pk_t *env, int bits)
r = NULL;
done:
if (e)
- BN_free(e);
+ BN_clear_free(e);
if (r)
RSA_free(r);
- }
-#endif
+ }
+
if (!env->key) {
crypto_log_errors(LOG_WARN, "generating RSA key");
return -1;
@@ -711,19 +825,23 @@ crypto_pk_public_exponent_ok(crypto_pk_t *env)
return BN_is_word(env->key->e, 65537);
}
-/** Compare the public-key components of a and b. Return -1 if a\<b, 0
- * if a==b, and 1 if a\>b.
+/** Compare the public-key components of a and b. Return less than 0
+ * if a\<b, 0 if a==b, and greater than 0 if a\>b. A NULL key is
+ * considered to be less than all non-NULL keys, and equal to itself.
+ *
+ * Note that this may leak information about the keys through timing.
*/
int
crypto_pk_cmp_keys(crypto_pk_t *a, crypto_pk_t *b)
{
int result;
+ char a_is_non_null = (a != NULL) && (a->key != NULL);
+ char b_is_non_null = (b != NULL) && (b->key != NULL);
+ char an_argument_is_null = !a_is_non_null | !b_is_non_null;
- if (!a || !b)
- return -1;
-
- if (!a->key || !b->key)
- return -1;
+ result = tor_memcmp(&a_is_non_null, &b_is_non_null, sizeof(a_is_non_null));
+ if (an_argument_is_null)
+ return result;
tor_assert(PUBLIC_KEY_OK(a));
tor_assert(PUBLIC_KEY_OK(b));
@@ -733,6 +851,18 @@ crypto_pk_cmp_keys(crypto_pk_t *a, crypto_pk_t *b)
return BN_cmp((a->key)->e, (b->key)->e);
}
+/** Compare the public-key components of a and b. Return non-zero iff
+ * a==b. A NULL key is considered to be distinct from all non-NULL
+ * keys, and equal to itself.
+ *
+ * Note that this may leak information about the keys through timing.
+ */
+int
+crypto_pk_eq_keys(crypto_pk_t *a, crypto_pk_t *b)
+{
+ return (crypto_pk_cmp_keys(a, b) == 0);
+}
+
/** Return the size of the public key modulus in <b>env</b>, in bytes. */
size_t
crypto_pk_keysize(crypto_pk_t *env)
@@ -791,7 +921,7 @@ crypto_pk_copy_full(crypto_pk_t *env)
return NULL;
}
- return _crypto_new_pk_from_rsa(new_key);
+ return crypto_new_pk_from_rsa_(new_key);
}
/** Encrypt <b>fromlen</b> bytes from <b>from</b> with the public key
@@ -1122,22 +1252,21 @@ int
crypto_pk_asn1_encode(crypto_pk_t *pk, char *dest, size_t dest_len)
{
int len;
- unsigned char *buf, *cp;
- len = i2d_RSAPublicKey(pk->key, NULL);
- if (len < 0 || (size_t)len > dest_len || dest_len > SIZE_T_CEILING)
+ unsigned char *buf = NULL;
+
+ len = i2d_RSAPublicKey(pk->key, &buf);
+ if (len < 0 || buf == NULL)
return -1;
- cp = buf = tor_malloc(len+1);
- len = i2d_RSAPublicKey(pk->key, &cp);
- if (len < 0) {
- crypto_log_errors(LOG_WARN,"encoding public key");
- tor_free(buf);
+
+ if ((size_t)len > dest_len || dest_len > SIZE_T_CEILING) {
+ OPENSSL_free(buf);
return -1;
}
/* We don't encode directly into 'dest', because that would be illegal
* type-punning. (C99 is smarter than me, C99 is smarter than me...)
*/
memcpy(dest,buf,len);
- tor_free(buf);
+ OPENSSL_free(buf);
return len;
}
@@ -1158,7 +1287,7 @@ crypto_pk_asn1_decode(const char *str, size_t len)
crypto_log_errors(LOG_WARN,"decoding public key");
return NULL;
}
- return _crypto_new_pk_from_rsa(rsa);
+ return crypto_new_pk_from_rsa_(rsa);
}
/** Given a private or public key <b>pk</b>, put a SHA1 hash of the
@@ -1168,24 +1297,17 @@ crypto_pk_asn1_decode(const char *str, size_t len)
int
crypto_pk_get_digest(crypto_pk_t *pk, char *digest_out)
{
- unsigned char *buf, *bufp;
+ unsigned char *buf = NULL;
int len;
- len = i2d_RSAPublicKey(pk->key, NULL);
- if (len < 0)
+ len = i2d_RSAPublicKey(pk->key, &buf);
+ if (len < 0 || buf == NULL)
return -1;
- buf = bufp = tor_malloc(len+1);
- len = i2d_RSAPublicKey(pk->key, &bufp);
- if (len < 0) {
- crypto_log_errors(LOG_WARN,"encoding public key");
- tor_free(buf);
- return -1;
- }
if (crypto_digest(digest_out, (char*)buf, len) < 0) {
- tor_free(buf);
+ OPENSSL_free(buf);
return -1;
}
- tor_free(buf);
+ OPENSSL_free(buf);
return 0;
}
@@ -1194,31 +1316,24 @@ crypto_pk_get_digest(crypto_pk_t *pk, char *digest_out)
int
crypto_pk_get_all_digests(crypto_pk_t *pk, digests_t *digests_out)
{
- unsigned char *buf, *bufp;
+ unsigned char *buf = NULL;
int len;
- len = i2d_RSAPublicKey(pk->key, NULL);
- if (len < 0)
+ len = i2d_RSAPublicKey(pk->key, &buf);
+ if (len < 0 || buf == NULL)
return -1;
- buf = bufp = tor_malloc(len+1);
- len = i2d_RSAPublicKey(pk->key, &bufp);
- if (len < 0) {
- crypto_log_errors(LOG_WARN,"encoding public key");
- tor_free(buf);
- return -1;
- }
if (crypto_digest_all(digests_out, (char*)buf, len) < 0) {
- tor_free(buf);
+ OPENSSL_free(buf);
return -1;
}
- tor_free(buf);
+ OPENSSL_free(buf);
return 0;
}
/** 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;
@@ -1255,28 +1370,33 @@ 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);
}
return 0;
}
-/** Return true iff <b>s</b> is in the correct format for a fingerprint.
+/** Given a private or public key <b>pk</b>, put a hashed fingerprint of
+ * the public key into <b>fp_out</b> (must have at least FINGERPRINT_LEN+1
+ * bytes of space). Return 0 on success, -1 on failure.
+ *
+ * Hashed fingerprints are computed as the SHA1 digest of the SHA1 digest
+ * of the ASN.1 encoding of the public key, converted to hexadecimal, in
+ * upper case.
*/
int
-crypto_pk_check_fingerprint_syntax(const char *s)
+crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out)
{
- int i;
- for (i = 0; i < FINGERPRINT_LEN; ++i) {
- if ((i%5) == 4) {
- if (!TOR_ISSPACE(s[i])) return 0;
- } else {
- if (!TOR_ISXDIGIT(s[i])) return 0;
- }
+ char digest[DIGEST_LEN], hashed_digest[DIGEST_LEN];
+ if (crypto_pk_get_digest(pk, digest)) {
+ return -1;
+ }
+ if (crypto_digest(hashed_digest, digest, DIGEST_LEN)) {
+ return -1;
}
- if (s[FINGERPRINT_LEN]) return 0;
- return 1;
+ base16_encode(fp_out, FINGERPRINT_LEN + 1, hashed_digest, DIGEST_LEN);
+ return 0;
}
/* symmetric crypto */
@@ -1427,7 +1547,7 @@ crypto_digest256(char *digest, const char *m, size_t len,
int
crypto_digest_all(digests_t *ds_out, const char *m, size_t len)
{
- digest_algorithm_t i;
+ int i;
tor_assert(ds_out);
memset(ds_out, 0, sizeof(*ds_out));
if (crypto_digest(ds_out->d[DIGEST_SHA1], m, len) < 0)
@@ -1474,7 +1594,7 @@ struct crypto_digest_t {
SHA256_CTX sha2; /**< state for SHA256 */
} d; /**< State for the digest we're using. Only one member of the
* union is usable, depending on the value of <b>algorithm</b>. */
- digest_algorithm_t algorithm : 8; /**< Which algorithm is in use? */
+ digest_algorithm_bitfield_t algorithm : 8; /**< Which algorithm is in use? */
};
/** Allocate and return a new digest object to compute SHA1 digests.
@@ -1599,19 +1719,27 @@ crypto_digest_assign(crypto_digest_t *into,
memcpy(into,from,sizeof(crypto_digest_t));
}
-/** Compute the HMAC-SHA-1 of the <b>msg_len</b> bytes in <b>msg</b>, using
- * the <b>key</b> of length <b>key_len</b>. Store the DIGEST_LEN-byte result
- * in <b>hmac_out</b>.
- */
+/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
+ * at <b>digest_out</b> to the hash of the concatenation of those strings,
+ * plus the optional string <b>append</b>, computed with the algorithm
+ * <b>alg</b>.
+ * <b>out_len</b> must be \<= DIGEST256_LEN. */
void
-crypto_hmac_sha1(char *hmac_out,
- const char *key, size_t key_len,
- const char *msg, size_t msg_len)
+crypto_digest_smartlist(char *digest_out, size_t len_out,
+ const smartlist_t *lst, const char *append,
+ digest_algorithm_t alg)
{
- tor_assert(key_len < INT_MAX);
- tor_assert(msg_len < INT_MAX);
- HMAC(EVP_sha1(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
- (unsigned char*)hmac_out, NULL);
+ crypto_digest_t *d;
+ if (alg == DIGEST_SHA1)
+ d = crypto_digest_new();
+ else
+ d = crypto_digest256_new(alg);
+ SMARTLIST_FOREACH(lst, const char *, cp,
+ crypto_digest_add_bytes(d, cp, strlen(cp)));
+ if (append)
+ crypto_digest_add_bytes(d, append, strlen(append));
+ crypto_digest_get_digest(d, digest_out, len_out);
+ crypto_digest_free(d);
}
/** Compute the HMAC-SHA-256 of the <b>msg_len</b> bytes in <b>msg</b>, using
@@ -1623,63 +1751,11 @@ crypto_hmac_sha256(char *hmac_out,
const char *key, size_t key_len,
const char *msg, size_t msg_len)
{
-#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(0,9,8)
/* If we've got OpenSSL >=0.9.8 we can use its hmac implementation. */
tor_assert(key_len < INT_MAX);
tor_assert(msg_len < INT_MAX);
HMAC(EVP_sha256(), key, (int)key_len, (unsigned char*)msg, (int)msg_len,
(unsigned char*)hmac_out, NULL);
-#else
- /* OpenSSL doesn't have an EVP implementation for SHA256. We'll need
- to do HMAC on our own.
-
- HMAC isn't so hard: To compute HMAC(key, msg):
- 1. If len(key) > blocksize, key = H(key).
- 2. If len(key) < blocksize, right-pad key up to blocksize with 0 bytes.
- 3. let ipad = key xor 0x363636363636....36
- let opad = key xor 0x5c5c5c5c5c5c....5c
- The result is H(opad | H( ipad | msg ) )
- */
-#define BLOCKSIZE 64
-#define DIGESTSIZE 32
- uint8_t k[BLOCKSIZE];
- uint8_t pad[BLOCKSIZE];
- uint8_t d[DIGESTSIZE];
- int i;
- SHA256_CTX st;
-
- tor_assert(key_len < INT_MAX);
- tor_assert(msg_len < INT_MAX);
-
- if (key_len <= BLOCKSIZE) {
- memset(k, 0, sizeof(k));
- memcpy(k, key, key_len); /* not time invariant in key_len */
- } else {
- SHA256((const uint8_t *)key, key_len, k);
- memset(k+DIGESTSIZE, 0, sizeof(k)-DIGESTSIZE);
- }
- for (i = 0; i < BLOCKSIZE; ++i)
- pad[i] = k[i] ^ 0x36;
- SHA256_Init(&st);
- SHA256_Update(&st, pad, BLOCKSIZE);
- SHA256_Update(&st, (uint8_t*)msg, msg_len);
- SHA256_Final(d, &st);
-
- for (i = 0; i < BLOCKSIZE; ++i)
- pad[i] = k[i] ^ 0x5c;
- SHA256_Init(&st);
- SHA256_Update(&st, pad, BLOCKSIZE);
- SHA256_Update(&st, d, DIGESTSIZE);
- SHA256_Final((uint8_t*)hmac_out, &st);
-
- /* Now clear everything. */
- memwipe(k, 0, sizeof(k));
- memwipe(pad, 0, sizeof(pad));
- memwipe(d, 0, sizeof(d));
- memwipe(&st, 0, sizeof(st));
-#undef BLOCKSIZE
-#undef DIGESTSIZE
-#endif
}
/* DH */
@@ -1734,7 +1810,7 @@ crypto_store_dynamic_dh_modulus(const char *fname)
{
int len, new_len;
DH *dh = NULL;
- unsigned char *dh_string_repr = NULL, *cp = NULL;
+ unsigned char *dh_string_repr = NULL;
char *base64_encoded_dh = NULL;
char *file_string = NULL;
int retval = -1;
@@ -1758,15 +1834,8 @@ crypto_store_dynamic_dh_modulus(const char *fname)
if (!BN_set_word(dh->g, DH_GENERATOR))
goto done;
- len = i2d_DHparams(dh, NULL);
- if (len < 0) {
- log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (1).");
- goto done;
- }
-
- cp = dh_string_repr = tor_malloc_zero(len+1);
- len = i2d_DHparams(dh, &cp);
- if ((len < 0) || ((cp - dh_string_repr) != len)) {
+ len = i2d_DHparams(dh, &dh_string_repr);
+ if ((len < 0) || (dh_string_repr == NULL)) {
log_warn(LD_CRYPTO, "Error occured while DER encoding DH modulus (2).");
goto done;
}
@@ -1793,7 +1862,8 @@ crypto_store_dynamic_dh_modulus(const char *fname)
done:
if (dh)
DH_free(dh);
- tor_free(dh_string_repr);
+ if (dh_string_repr)
+ OPENSSL_free(dh_string_repr);
tor_free(base64_encoded_dh);
tor_free(file_string);
@@ -1929,7 +1999,7 @@ crypto_set_tls_dh_prime(const char *dynamic_dh_modulus_fname)
/* If the space is occupied, free the previous TLS DH prime */
if (dh_param_p_tls) {
- BN_free(dh_param_p_tls);
+ BN_clear_free(dh_param_p_tls);
dh_param_p_tls = NULL;
}
@@ -2057,6 +2127,16 @@ crypto_dh_new(int dh_type)
return NULL;
}
+/** Return a copy of <b>dh</b>, sharing its internal state. */
+crypto_dh_t *
+crypto_dh_dup(const crypto_dh_t *dh)
+{
+ crypto_dh_t *dh_new = tor_malloc_zero(sizeof(crypto_dh_t));
+ dh_new->dh = dh->dh;
+ DH_up_ref(dh->dh);
+ return dh_new;
+}
+
/** Return the length of the DH key in <b>dh</b>, in bytes.
*/
int
@@ -2081,8 +2161,8 @@ crypto_dh_generate_public(crypto_dh_t *dh)
log_warn(LD_CRYPTO, "Weird! Our own DH key was invalid. I guess once-in-"
"the-universe chances really do happen. Trying again.");
/* Free and clear the keys, so OpenSSL will actually try again. */
- BN_free(dh->dh->pub_key);
- BN_free(dh->dh->priv_key);
+ BN_clear_free(dh->dh->pub_key);
+ BN_clear_free(dh->dh->priv_key);
dh->dh->pub_key = dh->dh->priv_key = NULL;
goto again;
}
@@ -2144,10 +2224,10 @@ tor_check_dh_key(int severity, BIGNUM *bn)
log_fn(severity, LD_CRYPTO, "DH key must be at most p-2.");
goto err;
}
- BN_free(x);
+ BN_clear_free(x);
return 0;
err:
- BN_free(x);
+ BN_clear_free(x);
s = BN_bn2hex(bn);
log_fn(severity, LD_CRYPTO, "Rejecting insecure DH key [%s]", s);
OPENSSL_free(s);
@@ -2195,8 +2275,8 @@ crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
goto error;
}
secret_len = result;
- if (crypto_expand_key_material(secret_tmp, secret_len,
- secret_out, secret_bytes_out)<0)
+ if (crypto_expand_key_material_TAP((uint8_t*)secret_tmp, secret_len,
+ (uint8_t*)secret_out, secret_bytes_out)<0)
goto error;
secret_len = secret_bytes_out;
@@ -2206,7 +2286,7 @@ crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
done:
crypto_log_errors(LOG_WARN, "completing DH handshake");
if (pubkey_bn)
- BN_free(pubkey_bn);
+ BN_clear_free(pubkey_bn);
if (secret_tmp) {
memwipe(secret_tmp, 0, secret_tmp_len);
tor_free(secret_tmp);
@@ -2222,15 +2302,18 @@ crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
* <b>key_out</b> by taking the first <b>key_out_len</b> bytes of
* H(K | [00]) | H(K | [01]) | ....
*
+ * This is the key expansion algorithm used in the "TAP" circuit extension
+ * mechanism; it shouldn't be used for new protocols.
+ *
* Return 0 on success, -1 on failure.
*/
int
-crypto_expand_key_material(const char *key_in, size_t key_in_len,
- char *key_out, size_t key_out_len)
+crypto_expand_key_material_TAP(const uint8_t *key_in, size_t key_in_len,
+ uint8_t *key_out, size_t key_out_len)
{
int i;
- char *cp, *tmp = tor_malloc(key_in_len+1);
- char digest[DIGEST_LEN];
+ uint8_t *cp, *tmp = tor_malloc(key_in_len+1);
+ uint8_t digest[DIGEST_LEN];
/* If we try to get more than this amount of key data, we'll repeat blocks.*/
tor_assert(key_out_len <= DIGEST_LEN*256);
@@ -2239,7 +2322,7 @@ crypto_expand_key_material(const char *key_in, size_t key_in_len,
for (cp = key_out, i=0; cp < key_out+key_out_len;
++i, cp += DIGEST_LEN) {
tmp[key_in_len] = i;
- if (crypto_digest(digest, tmp, key_in_len+1))
+ if (crypto_digest((char*)digest, (const char *)tmp, key_in_len+1))
goto err;
memcpy(cp, digest, MIN(DIGEST_LEN, key_out_len-(cp-key_out)));
}
@@ -2255,6 +2338,65 @@ crypto_expand_key_material(const char *key_in, size_t key_in_len,
return -1;
}
+/** Expand some secret key material according to RFC5869, using SHA256 as the
+ * underlying hash. The <b>key_in_len</b> bytes at <b>key_in</b> are the
+ * secret key material; the <b>salt_in_len</b> bytes at <b>salt_in</b> and the
+ * <b>info_in_len</b> bytes in <b>info_in_len</b> are the algorithm's "salt"
+ * and "info" parameters respectively. On success, write <b>key_out_len</b>
+ * bytes to <b>key_out</b> and return 0. On failure, return -1.
+ */
+int
+crypto_expand_key_material_rfc5869_sha256(
+ const uint8_t *key_in, size_t key_in_len,
+ const uint8_t *salt_in, size_t salt_in_len,
+ const uint8_t *info_in, size_t info_in_len,
+ uint8_t *key_out, size_t key_out_len)
+{
+ uint8_t prk[DIGEST256_LEN];
+ uint8_t tmp[DIGEST256_LEN + 128 + 1];
+ uint8_t mac[DIGEST256_LEN];
+ int i;
+ uint8_t *outp;
+ size_t tmp_len;
+
+ crypto_hmac_sha256((char*)prk,
+ (const char*)salt_in, salt_in_len,
+ (const char*)key_in, key_in_len);
+
+ /* If we try to get more than this amount of key data, we'll repeat blocks.*/
+ tor_assert(key_out_len <= DIGEST256_LEN * 256);
+ tor_assert(info_in_len <= 128);
+ memset(tmp, 0, sizeof(tmp));
+ outp = key_out;
+ i = 1;
+
+ while (key_out_len) {
+ size_t n;
+ if (i > 1) {
+ memcpy(tmp, mac, DIGEST256_LEN);
+ memcpy(tmp+DIGEST256_LEN, info_in, info_in_len);
+ tmp[DIGEST256_LEN+info_in_len] = i;
+ tmp_len = DIGEST256_LEN + info_in_len + 1;
+ } else {
+ memcpy(tmp, info_in, info_in_len);
+ tmp[info_in_len] = i;
+ tmp_len = info_in_len + 1;
+ }
+ crypto_hmac_sha256((char*)mac,
+ (const char*)prk, DIGEST256_LEN,
+ (const char*)tmp, tmp_len);
+ n = key_out_len < DIGEST256_LEN ? key_out_len : DIGEST256_LEN;
+ memcpy(outp, mac, n);
+ key_out_len -= n;
+ outp += n;
+ ++i;
+ }
+
+ memwipe(tmp, 0, sizeof(tmp));
+ memwipe(mac, 0, sizeof(mac));
+ return 0;
+}
+
/** Free a DH key exchange object.
*/
void
@@ -2282,35 +2424,27 @@ crypto_dh_free(crypto_dh_t *dh)
* that fd without checking whether it fit in the fd_set. Thus, if the
* system has not just been started up, it is unsafe to call */
#define RAND_POLL_IS_SAFE \
- ((OPENSSL_VERSION_NUMBER >= OPENSSL_V(0,9,7,'j') && \
- OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)) || \
- OPENSSL_VERSION_NUMBER >= OPENSSL_V(0,9,8,'c'))
+ (OPENSSL_VERSION_NUMBER >= OPENSSL_V(0,9,8,'c'))
/** Set the seed of the weak RNG to a random value. */
-static void
-seed_weak_rng(void)
+void
+crypto_seed_weak_rng(tor_weak_rng_t *rng)
{
unsigned seed;
crypto_rand((void*)&seed, sizeof(seed));
- tor_init_weak_random(seed);
+ tor_init_weak_random(rng, seed);
}
-/** Seed OpenSSL's random number generator with bytes from the operating
- * system. <b>startup</b> should be true iff we have just started Tor and
- * have not yet allocated a bunch of fds. Return 0 on success, -1 on failure.
+/** Try to get <b>out_len</b> bytes of the strongest entropy we can generate,
+ * storing it into <b>out</b>.
*/
int
-crypto_seed_rng(int startup)
+crypto_strongest_rand(uint8_t *out, size_t out_len)
{
- int rand_poll_status = 0;
-
- /* local variables */
#ifdef _WIN32
- unsigned char buf[ADD_ENTROPY];
static int provider_set = 0;
static HCRYPTPROV provider;
#else
- char buf[ADD_ENTROPY];
static const char *filenames[] = {
"/dev/srandom", "/dev/urandom", "/dev/random", NULL
};
@@ -2318,63 +2452,83 @@ crypto_seed_rng(int startup)
size_t n;
#endif
- /* OpenSSL has a RAND_poll function that knows about more kinds of
- * entropy than we do. We'll try calling that, *and* calling our own entropy
- * functions. If one succeeds, we'll accept the RNG as seeded. */
- if (startup || RAND_POLL_IS_SAFE) {
- rand_poll_status = RAND_poll();
- if (rand_poll_status == 0)
- log_warn(LD_CRYPTO, "RAND_poll() failed.");
- }
-
#ifdef _WIN32
if (!provider_set) {
if (!CryptAcquireContext(&provider, NULL, NULL, PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT)) {
if ((unsigned long)GetLastError() != (unsigned long)NTE_BAD_KEYSET) {
log_warn(LD_CRYPTO, "Can't get CryptoAPI provider [1]");
- return rand_poll_status ? 0 : -1;
+ return -1;
}
}
provider_set = 1;
}
- if (!CryptGenRandom(provider, sizeof(buf), buf)) {
+ if (!CryptGenRandom(provider, out_len, out)) {
log_warn(LD_CRYPTO, "Can't get entropy from CryptoAPI.");
- return rand_poll_status ? 0 : -1;
+ return -1;
}
- RAND_seed(buf, sizeof(buf));
- memwipe(buf, 0, sizeof(buf));
- seed_weak_rng();
+
return 0;
#else
for (i = 0; filenames[i]; ++i) {
- fd = open(filenames[i], O_RDONLY, 0);
+ log_debug(LD_FS, "Opening %s for entropy", filenames[i]);
+ fd = open(sandbox_intern_string(filenames[i]), O_RDONLY, 0);
if (fd<0) continue;
- log_info(LD_CRYPTO, "Seeding RNG from \"%s\"", filenames[i]);
- n = read_all(fd, buf, sizeof(buf), 0);
+ log_info(LD_CRYPTO, "Reading entropy from \"%s\"", filenames[i]);
+ n = read_all(fd, (char*)out, out_len, 0);
close(fd);
- if (n != sizeof(buf)) {
+ if (n != out_len) {
log_warn(LD_CRYPTO,
"Error reading from entropy source (read only %lu bytes).",
(unsigned long)n);
return -1;
}
- RAND_seed(buf, (int)sizeof(buf));
- memwipe(buf, 0, sizeof(buf));
- seed_weak_rng();
+
return 0;
}
- log_warn(LD_CRYPTO, "Cannot seed RNG -- no entropy source found.");
- return rand_poll_status ? 0 : -1;
+ log_warn(LD_CRYPTO, "Cannot get strong entropy: no entropy source found.");
+ return -1;
#endif
}
+/** Seed OpenSSL's random number generator with bytes from the operating
+ * system. <b>startup</b> should be true iff we have just started Tor and
+ * have not yet allocated a bunch of fds. Return 0 on success, -1 on failure.
+ */
+int
+crypto_seed_rng(int startup)
+{
+ int rand_poll_ok = 0, load_entropy_ok = 0;
+ uint8_t buf[ADD_ENTROPY];
+
+ /* OpenSSL has a RAND_poll function that knows about more kinds of
+ * entropy than we do. We'll try calling that, *and* calling our own entropy
+ * functions. If one succeeds, we'll accept the RNG as seeded. */
+ if (startup || RAND_POLL_IS_SAFE) {
+ rand_poll_ok = RAND_poll();
+ if (rand_poll_ok == 0)
+ log_warn(LD_CRYPTO, "RAND_poll() failed.");
+ }
+
+ load_entropy_ok = !crypto_strongest_rand(buf, sizeof(buf));
+ if (load_entropy_ok) {
+ RAND_seed(buf, sizeof(buf));
+ }
+
+ memwipe(buf, 0, sizeof(buf));
+
+ if (rand_poll_ok || load_entropy_ok)
+ return 0;
+ else
+ return -1;
+}
+
/** 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);
@@ -2517,7 +2671,7 @@ smartlist_shuffle(smartlist_t *sl)
}
}
-/** Base-64 encode <b>srclen</b> bytes of data from <b>src</b>. Write
+/** Base64 encode <b>srclen</b> bytes of data from <b>src</b>. Write
* the result into <b>dest</b>, if it will fit within <b>destlen</b>
* bytes. Return the number of bytes written on success; -1 if
* destlen is too short, or other failure.
@@ -2576,7 +2730,7 @@ static const uint8_t base64_decode_table[256] = {
X, X, X, X, X, X, X, X, X, X, X, X, X, X, X, X,
};
-/** Base-64 decode <b>srclen</b> bytes of data from <b>src</b>. Write
+/** Base64 decode <b>srclen</b> bytes of data from <b>src</b>. Write
* the result into <b>dest</b>, if it will fit within <b>destlen</b>
* bytes. Return the number of bytes written on success; -1 if
* destlen is too short, or other failure.
@@ -2683,7 +2837,7 @@ base64_decode(char *dest, size_t destlen, const char *src, size_t srclen)
#undef SP
#undef PAD
-/** Base-64 encode DIGEST_LINE bytes from <b>digest</b>, remove the trailing =
+/** Base64 encode DIGEST_LINE bytes from <b>digest</b>, remove the trailing =
* and newline characters, and store the nul-terminated result in the first
* BASE64_DIGEST_LEN+1 bytes of <b>d64</b>. */
int
@@ -2696,7 +2850,7 @@ digest_to_base64(char *d64, const char *digest)
return 0;
}
-/** Given a base-64 encoded, nul-terminated digest in <b>d64</b> (without
+/** Given a base64 encoded, nul-terminated digest in <b>d64</b> (without
* trailing newline or = characters), decode it and store the result in the
* first DIGEST_LEN bytes at <b>digest</b>. */
int
@@ -2721,7 +2875,7 @@ digest_from_base64(char *digest, const char *d64)
#endif
}
-/** Base-64 encode DIGEST256_LINE bytes from <b>digest</b>, remove the
+/** Base64 encode DIGEST256_LINE bytes from <b>digest</b>, remove the
* trailing = and newline characters, and store the nul-terminated result in
* the first BASE64_DIGEST256_LEN+1 bytes of <b>d64</b>. */
int
@@ -2734,7 +2888,7 @@ digest256_to_base64(char *d64, const char *digest)
return 0;
}
-/** Given a base-64 encoded, nul-terminated digest in <b>d64</b> (without
+/** Given a base64 encoded, nul-terminated digest in <b>d64</b> (without
* trailing newline or = characters), decode it and store the result in the
* first DIGEST256_LEN bytes at <b>digest</b>. */
int
@@ -2759,7 +2913,7 @@ digest256_from_base64(char *digest, const char *d64)
#endif
}
-/** Implements base32 encoding as in rfc3548. Limitation: Requires
+/** Implements base32 encoding as in RFC 4648. Limitation: Requires
* that srclen*8 is a multiple of 5.
*/
void
@@ -2784,7 +2938,7 @@ base32_encode(char *dest, size_t destlen, const char *src, size_t srclen)
dest[i] = '\0';
}
-/** Implements base32 decoding as in rfc3548. Limitation: Requires
+/** Implements base32 decoding as in RFC 4648. Limitation: Requires
* that srclen*5 is a multiple of 8. Returns 0 if successful, -1 otherwise.
*/
int
@@ -2937,21 +3091,27 @@ memwipe(void *mem, uint8_t byte, size_t sz)
}
#ifdef TOR_IS_MULTITHREADED
+
+#ifndef OPENSSL_THREADS
+#error OpenSSL has been built without thread support. Tor requires an \
+ OpenSSL library with thread support enabled.
+#endif
+
/** Helper: OpenSSL uses this callback to manipulate mutexes. */
static void
-_openssl_locking_cb(int mode, int n, const char *file, int line)
+openssl_locking_cb_(int mode, int n, const char *file, int line)
{
(void)file;
(void)line;
- if (!_openssl_mutexes)
- /* This is not a really good fix for the
+ if (!openssl_mutexes_)
+ /* This is not a really good fix for the
* "release-freed-lock-from-separate-thread-on-shutdown" problem, but
* it can't hurt. */
return;
if (mode & CRYPTO_LOCK)
- tor_mutex_acquire(_openssl_mutexes[n]);
+ tor_mutex_acquire(openssl_mutexes_[n]);
else
- tor_mutex_release(_openssl_mutexes[n]);
+ tor_mutex_release(openssl_mutexes_[n]);
}
/** OpenSSL helper type: wraps a Tor mutex so that OpenSSL can use it
@@ -2963,7 +3123,7 @@ struct CRYPTO_dynlock_value {
/** OpenSSL callback function to allocate a lock: see CRYPTO_set_dynlock_*
* documentation in OpenSSL's docs for more info. */
static struct CRYPTO_dynlock_value *
-_openssl_dynlock_create_cb(const char *file, int line)
+openssl_dynlock_create_cb_(const char *file, int line)
{
struct CRYPTO_dynlock_value *v;
(void)file;
@@ -2976,7 +3136,7 @@ _openssl_dynlock_create_cb(const char *file, int line)
/** OpenSSL callback function to acquire or release a lock: see
* CRYPTO_set_dynlock_* documentation in OpenSSL's docs for more info. */
static void
-_openssl_dynlock_lock_cb(int mode, struct CRYPTO_dynlock_value *v,
+openssl_dynlock_lock_cb_(int mode, struct CRYPTO_dynlock_value *v,
const char *file, int line)
{
(void)file;
@@ -2990,7 +3150,7 @@ _openssl_dynlock_lock_cb(int mode, struct CRYPTO_dynlock_value *v,
/** OpenSSL callback function to free a lock: see CRYPTO_set_dynlock_*
* documentation in OpenSSL's docs for more info. */
static void
-_openssl_dynlock_destroy_cb(struct CRYPTO_dynlock_value *v,
+openssl_dynlock_destroy_cb_(struct CRYPTO_dynlock_value *v,
const char *file, int line)
{
(void)file;
@@ -3007,15 +3167,15 @@ setup_openssl_threading(void)
{
int i;
int n = CRYPTO_num_locks();
- _n_openssl_mutexes = n;
- _openssl_mutexes = tor_malloc(n*sizeof(tor_mutex_t *));
+ n_openssl_mutexes_ = n;
+ openssl_mutexes_ = tor_malloc(n*sizeof(tor_mutex_t *));
for (i=0; i < n; ++i)
- _openssl_mutexes[i] = tor_mutex_new();
- CRYPTO_set_locking_callback(_openssl_locking_cb);
+ openssl_mutexes_[i] = tor_mutex_new();
+ CRYPTO_set_locking_callback(openssl_locking_cb_);
CRYPTO_set_id_callback(tor_get_thread_id);
- CRYPTO_set_dynlock_create_callback(_openssl_dynlock_create_cb);
- CRYPTO_set_dynlock_lock_callback(_openssl_dynlock_lock_cb);
- CRYPTO_set_dynlock_destroy_callback(_openssl_dynlock_destroy_cb);
+ CRYPTO_set_dynlock_create_callback(openssl_dynlock_create_cb_);
+ CRYPTO_set_dynlock_lock_callback(openssl_dynlock_lock_cb_);
+ CRYPTO_set_dynlock_destroy_callback(openssl_dynlock_destroy_cb_);
return 0;
}
#else
@@ -3036,11 +3196,11 @@ crypto_global_cleanup(void)
ERR_free_strings();
if (dh_param_p)
- BN_free(dh_param_p);
+ BN_clear_free(dh_param_p);
if (dh_param_p_tls)
- BN_free(dh_param_p_tls);
+ BN_clear_free(dh_param_p_tls);
if (dh_param_g)
- BN_free(dh_param_g);
+ BN_clear_free(dh_param_g);
#ifndef DISABLE_ENGINES
ENGINE_cleanup();
@@ -3049,18 +3209,20 @@ crypto_global_cleanup(void)
CONF_modules_unload(1);
CRYPTO_cleanup_all_ex_data();
#ifdef TOR_IS_MULTITHREADED
- if (_n_openssl_mutexes) {
- int n = _n_openssl_mutexes;
- tor_mutex_t **ms = _openssl_mutexes;
+ if (n_openssl_mutexes_) {
+ int n = n_openssl_mutexes_;
+ tor_mutex_t **ms = openssl_mutexes_;
int i;
- _openssl_mutexes = NULL;
- _n_openssl_mutexes = 0;
+ openssl_mutexes_ = NULL;
+ n_openssl_mutexes_ = 0;
for (i=0;i<n;++i) {
tor_mutex_free(ms[i]);
}
tor_free(ms);
}
#endif
+ tor_free(crypto_openssl_version_str);
+ tor_free(crypto_openssl_header_version_str);
return 0;
}
diff --git a/src/common/crypto.h b/src/common/crypto.h
index 7d5627178..aa4271aa3 100644
--- a/src/common/crypto.h
+++ b/src/common/crypto.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,11 +10,12 @@
* \brief Headers for crypto.c
**/
-#ifndef _TOR_CRYPTO_H
-#define _TOR_CRYPTO_H
+#ifndef TOR_CRYPTO_H
+#define TOR_CRYPTO_H
#include <stdio.h>
#include "torint.h"
+#include "testsupport.h"
/*
Macro to create an arbitrary OpenSSL version number as used by
@@ -51,7 +52,7 @@
/** Length of the output of our message digest. */
#define DIGEST_LEN 20
/** Length of the output of our second (improved) message digests. (For now
- * this is just sha256, but any it can be any other 256-byte digest). */
+ * this is just sha256, but it could be any other 256-bit digest.) */
#define DIGEST256_LEN 32
/** Length of our symmetric cipher's keys. */
#define CIPHER_KEY_LEN 16
@@ -69,13 +70,9 @@
* signs removed. */
#define BASE64_DIGEST256_LEN 43
-/** Constant used to indicate PKCS1 padding for public-key encryption */
-#define PK_PKCS1_PADDING 60001
/** Constant used to indicate OAEP padding for public-key encryption */
#define PK_PKCS1_OAEP_PADDING 60002
-/** Number of bytes added for PKCS1 padding. */
-#define PKCS1_PADDING_OVERHEAD 11
/** Number of bytes added for PKCS1-OAEP padding. */
#define PKCS1_OAEP_PADDING_OVERHEAD 42
@@ -92,6 +89,7 @@ typedef enum {
DIGEST_SHA256 = 1,
} digest_algorithm_t;
#define N_DIGEST_ALGORITHMS (DIGEST_SHA256+1)
+#define digest_algorithm_bitfield_t ENUM_BF(digest_algorithm_t)
/** A set of all the digests we know how to compute, taken on a single
* string. Any digests that are shorter than 256 bits are right-padded
@@ -111,6 +109,9 @@ typedef struct crypto_digest_t crypto_digest_t;
typedef struct crypto_dh_t crypto_dh_t;
/* global state */
+const char * crypto_openssl_get_version_str(void);
+const char * crypto_openssl_get_header_version_str(void);
+int crypto_early_init(void);
int crypto_global_init(int hardwareAccel,
const char *accelName,
const char *accelPath);
@@ -147,6 +148,7 @@ int crypto_pk_write_private_key_to_filename(crypto_pk_t *env,
int crypto_pk_check_key(crypto_pk_t *env);
int crypto_pk_cmp_keys(crypto_pk_t *a, crypto_pk_t *b);
+int crypto_pk_eq_keys(crypto_pk_t *a, crypto_pk_t *b);
size_t crypto_pk_keysize(crypto_pk_t *env);
int crypto_pk_num_bits(crypto_pk_t *env);
crypto_pk_t *crypto_pk_dup_key(crypto_pk_t *orig);
@@ -181,7 +183,7 @@ crypto_pk_t *crypto_pk_asn1_decode(const char *str, size_t len);
int crypto_pk_get_digest(crypto_pk_t *pk, char *digest_out);
int crypto_pk_get_all_digests(crypto_pk_t *pk, digests_t *digests_out);
int crypto_pk_get_fingerprint(crypto_pk_t *pk, char *fp_out,int add_space);
-int crypto_pk_check_fingerprint_syntax(const char *s);
+int crypto_pk_get_hashed_fingerprint(crypto_pk_t *pk, char *fp_out);
/* symmetric crypto */
const char *crypto_cipher_get_key(crypto_cipher_t *env);
@@ -204,6 +206,10 @@ int crypto_digest(char *digest, const char *m, size_t len);
int crypto_digest256(char *digest, const char *m, size_t len,
digest_algorithm_t algorithm);
int crypto_digest_all(digests_t *ds_out, const char *m, size_t len);
+struct smartlist_t;
+void crypto_digest_smartlist(char *digest_out, size_t len_out,
+ const struct smartlist_t *lst, const char *append,
+ digest_algorithm_t alg);
const char *crypto_digest_algorithm_get_name(digest_algorithm_t alg);
int crypto_digest_algorithm_parse_name(const char *name);
crypto_digest_t *crypto_digest_new(void);
@@ -216,9 +222,6 @@ void crypto_digest_get_digest(crypto_digest_t *digest,
crypto_digest_t *crypto_digest_dup(const crypto_digest_t *digest);
void crypto_digest_assign(crypto_digest_t *into,
const crypto_digest_t *from);
-void crypto_hmac_sha1(char *hmac_out,
- const char *key, size_t key_len,
- const char *msg, size_t msg_len);
void crypto_hmac_sha256(char *hmac_out,
const char *key, size_t key_len,
const char *msg, size_t msg_len);
@@ -228,6 +231,7 @@ void crypto_hmac_sha256(char *hmac_out,
#define DH_TYPE_REND 2
#define DH_TYPE_TLS 3
crypto_dh_t *crypto_dh_new(int dh_type);
+crypto_dh_t *crypto_dh_dup(const crypto_dh_t *dh);
int crypto_dh_get_bytes(crypto_dh_t *dh);
int crypto_dh_generate_public(crypto_dh_t *dh);
int crypto_dh_get_public(crypto_dh_t *dh, char *pubkey_out,
@@ -236,15 +240,26 @@ ssize_t crypto_dh_compute_secret(int severity, crypto_dh_t *dh,
const char *pubkey, size_t pubkey_len,
char *secret_out, size_t secret_out_len);
void crypto_dh_free(crypto_dh_t *dh);
-int crypto_expand_key_material(const char *key_in, size_t in_len,
- char *key_out, size_t key_out_len);
+
+int crypto_expand_key_material_TAP(const uint8_t *key_in,
+ size_t key_in_len,
+ uint8_t *key_out, size_t key_out_len);
+int crypto_expand_key_material_rfc5869_sha256(
+ const uint8_t *key_in, size_t key_in_len,
+ const uint8_t *salt_in, size_t salt_in_len,
+ const uint8_t *info_in, size_t info_in_len,
+ uint8_t *key_out, size_t key_out_len);
/* random numbers */
int crypto_seed_rng(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);
double crypto_rand_double(void);
+struct tor_weak_rng_t;
+void crypto_seed_weak_rng(struct tor_weak_rng_t *rng);
+int crypto_init_siphash_key(void);
char *crypto_random_hostname(int min_rand_len, int max_rand_len,
const char *prefix, const char *suffix);
@@ -255,7 +270,7 @@ void smartlist_shuffle(struct smartlist_t *sl);
int base64_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base64_decode(char *dest, size_t destlen, const char *src, size_t srclen);
-/** Characters that can appear (case-insensitively) in a base-32 encoding. */
+/** Characters that can appear (case-insensitively) in a base32 encoding. */
#define BASE32_CHARS "abcdefghijklmnopqrstuvwxyz234567"
void base32_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base32_decode(char *dest, size_t destlen, const char *src, size_t srclen);
@@ -274,20 +289,18 @@ 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;
struct evp_pkey_st;
struct dh_st;
-struct rsa_st *_crypto_pk_get_rsa(crypto_pk_t *env);
-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,
+struct rsa_st *crypto_pk_get_rsa_(crypto_pk_t *env);
+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
+struct dh_st *crypto_dh_get_dh_(crypto_dh_t *dh);
+
+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
new file mode 100644
index 000000000..9e83440e1
--- /dev/null
+++ b/src/common/crypto_curve25519.c
@@ -0,0 +1,191 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Wrapper code for a curve25519 implementation. */
+
+#define CRYPTO_CURVE25519_PRIVATE
+#include "orconfig.h"
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "util.h"
+#include "torlog.h"
+
+/* ==============================
+ Part 1: wrap a suitable curve25519 implementation as curve25519_impl
+ ============================== */
+
+#ifdef USE_CURVE25519_DONNA
+int curve25519_donna(uint8_t *mypublic,
+ const uint8_t *secret, const uint8_t *basepoint);
+#endif
+#ifdef USE_CURVE25519_NACL
+#ifdef HAVE_CRYPTO_SCALARMULT_CURVE25519_H
+#include <crypto_scalarmult_curve25519.h>
+#elif defined(HAVE_NACL_CRYPTO_SCALARMULT_CURVE25519_H)
+#include <nacl/crypto_scalarmult_curve25519.h>
+#endif
+#endif
+
+STATIC int
+curve25519_impl(uint8_t *output, const uint8_t *secret,
+ const uint8_t *basepoint)
+{
+ uint8_t bp[CURVE25519_PUBKEY_LEN];
+ int r;
+ memcpy(bp, basepoint, CURVE25519_PUBKEY_LEN);
+ /* Clear the high bit, in case our backend foolishly looks at it. */
+ bp[31] &= 0x7f;
+#ifdef USE_CURVE25519_DONNA
+ r = curve25519_donna(output, secret, bp);
+#elif defined(USE_CURVE25519_NACL)
+ r = crypto_scalarmult_curve25519(output, secret, bp);
+#else
+#error "No implementation of curve25519 is available."
+#endif
+ memwipe(bp, 0, sizeof(bp));
+ return r;
+}
+
+/* ==============================
+ Part 2: Wrap curve25519_impl with some convenience types and functions.
+ ============================== */
+
+/**
+ * Return true iff a curve25519_public_key_t seems valid. (It's not necessary
+ * to see if the point is on the curve, since the twist is also secure, but we
+ * do need to make sure that it isn't the point at infinity.) */
+int
+curve25519_public_key_is_ok(const curve25519_public_key_t *key)
+{
+ return !safe_mem_is_zero(key->public_key, CURVE25519_PUBKEY_LEN);
+}
+
+/** Generate a new keypair and return the secret key. If <b>extra_strong</b>
+ * is true, this key is possibly going to get used more than once, so
+ * use a better-than-usual RNG. Return 0 on success, -1 on failure. */
+int
+curve25519_secret_key_generate(curve25519_secret_key_t *key_out,
+ int extra_strong)
+{
+ uint8_t k_tmp[CURVE25519_SECKEY_LEN];
+
+ if (crypto_rand((char*)key_out->secret_key, CURVE25519_SECKEY_LEN) < 0)
+ return -1;
+ if (extra_strong && !crypto_strongest_rand(k_tmp, CURVE25519_SECKEY_LEN)) {
+ /* If they asked for extra-strong entropy and we have some, use it as an
+ * HMAC key to improve not-so-good entropy rather than using it directly,
+ * just in case the extra-strong entropy is less amazing than we hoped. */
+ crypto_hmac_sha256((char *)key_out->secret_key,
+ (const char *)k_tmp, sizeof(k_tmp),
+ (const char *)key_out->secret_key, CURVE25519_SECKEY_LEN);
+ }
+ memwipe(k_tmp, 0, sizeof(k_tmp));
+ key_out->secret_key[0] &= 248;
+ key_out->secret_key[31] &= 127;
+ key_out->secret_key[31] |= 64;
+
+ return 0;
+}
+
+void
+curve25519_public_key_generate(curve25519_public_key_t *key_out,
+ const curve25519_secret_key_t *seckey)
+{
+ static const uint8_t basepoint[32] = {9};
+
+ curve25519_impl(key_out->public_key, seckey->secret_key, basepoint);
+}
+
+int
+curve25519_keypair_generate(curve25519_keypair_t *keypair_out,
+ int extra_strong)
+{
+ if (curve25519_secret_key_generate(&keypair_out->seckey, extra_strong) < 0)
+ return -1;
+ curve25519_public_key_generate(&keypair_out->pubkey, &keypair_out->seckey);
+ return 0;
+}
+
+int
+curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair,
+ const char *fname,
+ const char *tag)
+{
+ char contents[32 + CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN];
+ int r;
+
+ memset(contents, 0, sizeof(contents));
+ tor_snprintf(contents, sizeof(contents), "== c25519v1: %s ==", tag);
+ tor_assert(strlen(contents) <= 32);
+ memcpy(contents+32, keypair->seckey.secret_key, CURVE25519_SECKEY_LEN);
+ memcpy(contents+32+CURVE25519_SECKEY_LEN,
+ keypair->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+
+ r = write_bytes_to_file(fname, contents, sizeof(contents), 1);
+
+ memwipe(contents, 0, sizeof(contents));
+ return r;
+}
+
+int
+curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
+ char **tag_out,
+ const char *fname)
+{
+ char prefix[33];
+ char *content;
+ struct stat st;
+ int r = -1;
+
+ *tag_out = NULL;
+
+ st.st_size = 0;
+ content = read_file_to_str(fname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
+ if (! content)
+ goto end;
+ if (st.st_size != 32 + CURVE25519_SECKEY_LEN + CURVE25519_PUBKEY_LEN)
+ goto end;
+
+ memcpy(prefix, content, 32);
+ prefix[32] = '\0';
+ if (strcmpstart(prefix, "== c25519v1: ") ||
+ strcmpend(prefix, " =="))
+ goto end;
+
+ *tag_out = tor_strndup(prefix+strlen("== c25519v1: "),
+ strlen(prefix) - strlen("== c25519v1: =="));
+
+ memcpy(keypair_out->seckey.secret_key, content+32, CURVE25519_SECKEY_LEN);
+ curve25519_public_key_generate(&keypair_out->pubkey, &keypair_out->seckey);
+ if (tor_memneq(keypair_out->pubkey.public_key,
+ content + 32 + CURVE25519_SECKEY_LEN,
+ CURVE25519_PUBKEY_LEN))
+ goto end;
+
+ r = 0;
+
+ end:
+ if (content) {
+ memwipe(content, 0, (size_t) st.st_size);
+ tor_free(content);
+ }
+ if (r != 0) {
+ memset(keypair_out, 0, sizeof(*keypair_out));
+ tor_free(*tag_out);
+ }
+ return r;
+}
+
+/** Perform the curve25519 ECDH handshake with <b>skey</b> and <b>pkey</b>,
+ * writing CURVE25519_OUTPUT_LEN bytes of output into <b>output</b>. */
+void
+curve25519_handshake(uint8_t *output,
+ const curve25519_secret_key_t *skey,
+ const curve25519_public_key_t *pkey)
+{
+ curve25519_impl(output, skey->secret_key, pkey->public_key);
+}
+
diff --git a/src/common/crypto_curve25519.h b/src/common/crypto_curve25519.h
new file mode 100644
index 000000000..57018ac2f
--- /dev/null
+++ b/src/common/crypto_curve25519.h
@@ -0,0 +1,74 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_CRYPTO_CURVE25519_H
+#define TOR_CRYPTO_CURVE25519_H
+
+#include "testsupport.h"
+#include "torint.h"
+
+/** Length of a curve25519 public key when encoded. */
+#define CURVE25519_PUBKEY_LEN 32
+/** Length of a curve25519 secret key when encoded. */
+#define CURVE25519_SECKEY_LEN 32
+/** Length of the result of a curve25519 handshake. */
+#define CURVE25519_OUTPUT_LEN 32
+
+/** Wrapper type for a curve25519 public key */
+typedef struct curve25519_public_key_t {
+ uint8_t public_key[CURVE25519_PUBKEY_LEN];
+} curve25519_public_key_t;
+
+/** Wrapper type for a curve25519 secret key */
+typedef struct curve25519_secret_key_t {
+ uint8_t secret_key[CURVE25519_SECKEY_LEN];
+} curve25519_secret_key_t;
+
+/** A paired public and private key for curve25519. **/
+typedef struct curve25519_keypair_t {
+ curve25519_public_key_t pubkey;
+ curve25519_secret_key_t seckey;
+} curve25519_keypair_t;
+
+#ifdef CURVE25519_ENABLED
+/* These functions require that we actually know how to use curve25519 keys.
+ * The other data structures and functions in this header let us parse them,
+ * store them, and move them around.
+ */
+
+int curve25519_public_key_is_ok(const curve25519_public_key_t *);
+
+int curve25519_secret_key_generate(curve25519_secret_key_t *key_out,
+ int extra_strong);
+void curve25519_public_key_generate(curve25519_public_key_t *key_out,
+ const curve25519_secret_key_t *seckey);
+int curve25519_keypair_generate(curve25519_keypair_t *keypair_out,
+ int extra_strong);
+
+void curve25519_handshake(uint8_t *output,
+ const curve25519_secret_key_t *,
+ const curve25519_public_key_t *);
+
+int curve25519_keypair_write_to_file(const curve25519_keypair_t *keypair,
+ const char *fname,
+ const char *tag);
+
+int curve25519_keypair_read_from_file(curve25519_keypair_t *keypair_out,
+ char **tag_out,
+ const char *fname);
+
+#ifdef CRYPTO_CURVE25519_PRIVATE
+STATIC int curve25519_impl(uint8_t *output, const uint8_t *secret,
+ const uint8_t *basepoint);
+#endif
+#endif
+
+#define CURVE25519_BASE64_PADDED_LEN 44
+
+int curve25519_public_from_base64(curve25519_public_key_t *pkey,
+ const char *input);
+int curve25519_public_to_base64(char *output,
+ const curve25519_public_key_t *pkey);
+
+#endif
+
diff --git a/src/common/crypto_format.c b/src/common/crypto_format.c
new file mode 100644
index 000000000..be669c8d2
--- /dev/null
+++ b/src/common/crypto_format.c
@@ -0,0 +1,45 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Formatting and parsing code for crypto-related data structures. */
+
+#include "orconfig.h"
+#ifdef HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "util.h"
+#include "torlog.h"
+
+int
+curve25519_public_to_base64(char *output,
+ const curve25519_public_key_t *pkey)
+{
+ char buf[128];
+ base64_encode(buf, sizeof(buf),
+ (const char*)pkey->public_key, CURVE25519_PUBKEY_LEN);
+ buf[CURVE25519_BASE64_PADDED_LEN] = '\0';
+ memcpy(output, buf, CURVE25519_BASE64_PADDED_LEN+1);
+ return 0;
+}
+
+int
+curve25519_public_from_base64(curve25519_public_key_t *pkey,
+ const char *input)
+{
+ size_t len = strlen(input);
+ if (len == CURVE25519_BASE64_PADDED_LEN - 1) {
+ /* not padded */
+ return digest256_from_base64((char*)pkey->public_key, input);
+ } else if (len == CURVE25519_BASE64_PADDED_LEN) {
+ char buf[128];
+ if (base64_decode(buf, sizeof(buf), input, len) != CURVE25519_PUBKEY_LEN)
+ return -1;
+ memcpy(pkey->public_key, buf, CURVE25519_PUBKEY_LEN);
+ return 0;
+ } else {
+ return -1;
+ }
+}
+
diff --git a/src/common/di_ops.c b/src/common/di_ops.c
index 7683c59de..14a144340 100644
--- a/src/common/di_ops.c
+++ b/src/common/di_ops.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,6 +8,8 @@
#include "orconfig.h"
#include "di_ops.h"
+#include "torlog.h"
+#include "util.h"
/**
* Timing-safe version of memcmp. As memcmp, compare the <b>sz</b> bytes at
@@ -123,7 +125,7 @@ tor_memeq(const void *a, const void *b, size_t sz)
*
* If any_difference != 0:
* 0 < any_difference < 256, so
- * 0 < any_difference - 1 < 255
+ * 0 <= any_difference - 1 < 255
* (any_difference - 1) >> 8 == 0
* 1 & ((any_difference - 1) >> 8) == 0
*/
@@ -131,3 +133,90 @@ tor_memeq(const void *a, const void *b, size_t sz)
return 1 & ((any_difference - 1) >> 8);
}
+/* Implement di_digest256_map_t as a linked list of entries. */
+struct di_digest256_map_t {
+ struct di_digest256_map_t *next;
+ uint8_t key[32];
+ void *val;
+};
+
+/** Release all storage held in <b>map</b>, calling free_fn on each value
+ * as we go. */
+void
+dimap_free(di_digest256_map_t *map, dimap_free_fn free_fn)
+{
+ while (map) {
+ di_digest256_map_t *victim = map;
+ map = map->next;
+ if (free_fn)
+ free_fn(victim->val);
+ tor_free(victim);
+ }
+}
+
+/** Adjust the map at *<b>map</b>, adding an entry for <b>key</b> ->
+ * <b>val</b>, where <b>key</b> is a DIGEST256_LEN-byte key.
+ *
+ * The caller MUST NOT add a key that already appears in the map.
+ */
+void
+dimap_add_entry(di_digest256_map_t **map,
+ const uint8_t *key, void *val)
+{
+ di_digest256_map_t *new_ent;
+ {
+ void *old_val = dimap_search(*map, key, NULL);
+ tor_assert(! old_val);
+ tor_assert(val);
+ }
+ new_ent = tor_malloc_zero(sizeof(di_digest256_map_t));
+ new_ent->next = *map;
+ memcpy(new_ent->key, key, 32);
+ new_ent->val = val;
+ *map = new_ent;
+}
+
+/** Search the map at <b>map</b> for an entry whose key is <b>key</b> (a
+ * DIGEST256_LEN-byte key) returning the corresponding value if we found one,
+ * and returning <b>dflt_val</b> if the key wasn't found.
+ *
+ * This operation takes an amount of time dependent only on the length of
+ * <b>map</b>, not on the position or presence of <b>key</b> within <b>map</b>.
+ */
+void *
+dimap_search(const di_digest256_map_t *map, const uint8_t *key,
+ void *dflt_val)
+{
+ uintptr_t result = (uintptr_t)dflt_val;
+
+ while (map) {
+ uintptr_t r = (uintptr_t) tor_memeq(map->key, key, 32);
+ r -= 1; /* Now r is (uintptr_t)-1 if memeq returned false, and
+ * 0 if memeq returned true. */
+
+ result &= r;
+ result |= ((uintptr_t)(map->val)) & ~r;
+
+ map = map->next;
+ }
+
+ return (void *)result;
+}
+
+/**
+ * Return true iff the <b>sz</b> bytes at <b>mem</b> are all zero. Runs in
+ * time independent of the contents of <b>mem</b>.
+ */
+int
+safe_mem_is_zero(const void *mem, size_t sz)
+{
+ uint32_t total = 0;
+ const uint8_t *ptr = mem;
+
+ while (sz--) {
+ total |= *ptr++;
+ }
+
+ return 1 & ((total - 1) >> 8);
+}
+
diff --git a/src/common/di_ops.h b/src/common/di_ops.h
index 8f0bb698f..d93534b69 100644
--- a/src/common/di_ops.h
+++ b/src/common/di_ops.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -27,5 +27,21 @@ int tor_memeq(const void *a, const void *b, size_t sz);
#define fast_memeq(a,b,c) (0==memcmp((a),(b),(c)))
#define fast_memneq(a,b,c) (0!=memcmp((a),(b),(c)))
+int safe_mem_is_zero(const void *mem, size_t sz);
+
+/** A type for a map from DIGEST256_LEN-byte blobs to void*, such that
+ * data lookups take an amount of time proportional only to the size
+ * of the map, and not to the position or presence of the item in the map.
+ *
+ * Not efficient for large maps! */
+typedef struct di_digest256_map_t di_digest256_map_t;
+typedef void (*dimap_free_fn)(void *);
+
+void dimap_free(di_digest256_map_t *map, dimap_free_fn free_fn);
+void dimap_add_entry(di_digest256_map_t **map,
+ const uint8_t *key, void *val);
+void *dimap_search(const di_digest256_map_t *map, const uint8_t *key,
+ void *dflt_val);
+
#endif
diff --git a/src/common/get_mozilla_ciphers.py b/src/common/get_mozilla_ciphers.py
deleted file mode 100644
index c7e9a84a0..000000000
--- a/src/common/get_mozilla_ciphers.py
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/usr/bin/python
-# coding=utf-8
-# Copyright 2011, The Tor Project, Inc
-# original version by Arturo Filastò
-# See LICENSE for licensing information
-
-# This script parses Firefox and OpenSSL sources, and uses this information
-# to generate a ciphers.inc file.
-#
-# It takes two arguments: the location of a firefox source directory, and the
-# location of an openssl source directory.
-
-import os
-import re
-import sys
-
-if len(sys.argv) != 3:
- print >>sys.stderr, "Syntax: get_mozilla_ciphers.py <firefox-source-dir> <openssl-source-dir>"
- sys.exit(1)
-
-ff_root = sys.argv[1]
-ossl_root = sys.argv[2]
-
-def ff(s):
- return os.path.join(ff_root, s)
-def ossl(s):
- return os.path.join(ossl_root, s)
-
-#####
-# Read the cpp file to understand what Ciphers map to what name :
-# Make "ciphers" a map from name used in the javascript to a cipher macro name
-fileA = open(ff('security/manager/ssl/src/nsNSSComponent.cpp'),'r')
-
-# The input format is a file containing exactly one section of the form:
-# static CipherPref CipherPrefs[] = {
-# {"name", MACRO_NAME}, // comment
-# ...
-# {NULL, 0}
-# }
-
-inCipherSection = False
-cipherLines = []
-for line in fileA:
- if line.startswith('static CipherPref CipherPrefs'):
- # Get the starting boundary of the Cipher Preferences
- inCipherSection = True
- elif inCipherSection:
- line = line.strip()
- if line.startswith('{NULL, 0}'):
- # At the ending boundary of the Cipher Prefs
- break
- else:
- cipherLines.append(line)
-fileA.close()
-
-# Parse the lines and put them into a dict
-ciphers = {}
-cipher_pref = {}
-for line in cipherLines:
- m = re.search(r'^{\s*\"([^\"]+)\",\s*(\S*)\s*}', line)
- if m:
- key,value = m.groups()
- ciphers[key] = value
- cipher_pref[value] = key
-
-####
-# Now find the correct order for the ciphers
-fileC = open(ff('security/nss/lib/ssl/ssl3con.c'), 'r')
-firefox_ciphers = []
-inEnum=False
-for line in fileC:
- if not inEnum:
- if "ssl3CipherSuiteCfg cipherSuites[" in line:
- inEnum = True
- continue
-
- if line.startswith("};"):
- break
-
- m = re.match(r'^\s*\{\s*([A-Z_0-9]+),', line)
- if m:
- firefox_ciphers.append(m.group(1))
-
-fileC.close()
-
-#####
-# Read the JS file to understand what ciphers are enabled. The format is
-# pref("name", true/false);
-# Build a map enabled_ciphers from javascript name to "true" or "false",
-# and an (unordered!) list of the macro names for those ciphers that are
-# enabled.
-fileB = open(ff('netwerk/base/public/security-prefs.js'), 'r')
-
-enabled_ciphers = {}
-for line in fileB:
- m = re.match(r'pref\(\"([^\"]+)\"\s*,\s*(\S*)\s*\)', line)
- if not m:
- continue
- key, val = m.groups()
- if key.startswith("security.ssl3"):
- enabled_ciphers[key] = val
-fileB.close()
-
-used_ciphers = []
-for k, v in enabled_ciphers.items():
- if v == "true":
- used_ciphers.append(ciphers[k])
-
-#oSSLinclude = ('/usr/include/openssl/ssl3.h', '/usr/include/openssl/ssl.h',
-# '/usr/include/openssl/ssl2.h', '/usr/include/openssl/ssl23.h',
-# '/usr/include/openssl/tls1.h')
-oSSLinclude = ('ssl/ssl3.h', 'ssl/ssl.h',
- 'ssl/ssl2.h', 'ssl/ssl23.h',
- 'ssl/tls1.h')
-
-#####
-# This reads the hex code for the ciphers that are used by firefox.
-# sslProtoD is set to a map from macro name to macro value in sslproto.h;
-# cipher_codes is set to an (unordered!) list of these hex values.
-sslProto = open(ff('security/nss/lib/ssl/sslproto.h'), 'r')
-sslProtoD = {}
-
-for line in sslProto:
- m = re.match('#define\s+(\S+)\s+(\S+)', line)
- if m:
- key, value = m.groups()
- sslProtoD[key] = value
-sslProto.close()
-
-cipher_codes = []
-for x in used_ciphers:
- cipher_codes.append(sslProtoD[x].lower())
-
-####
-# Now read through all the openssl include files, and try to find the openssl
-# macro names for those files.
-openssl_macro_by_hex = {}
-all_openssl_macros = {}
-for fl in oSSLinclude:
- fp = open(ossl(fl), 'r')
- for line in fp.readlines():
- m = re.match('#define\s+(\S+)\s+(\S+)', line)
- if m:
- value,key = m.groups()
- if key.startswith('0x') and "_CK_" in value:
- key = key.replace('0x0300','0x').lower()
- #print "%s %s" % (key, value)
- openssl_macro_by_hex[key] = value
- all_openssl_macros[value]=key
- fp.close()
-
-# Now generate the output.
-print """\
-/* This is an include file used to define the list of ciphers clients should
- * advertise. Before including it, you should define the CIPHER and XCIPHER
- * macros.
- *
- * This file was automatically generated by get_mozilla_ciphers.py.
- */"""
-# Go in order by the order in CipherPrefs
-for firefox_macro in firefox_ciphers:
-
- try:
- js_cipher_name = cipher_pref[firefox_macro]
- except KeyError:
- # This one has no javascript preference.
- continue
-
- # The cipher needs to be enabled in security-prefs.js
- if enabled_ciphers.get(js_cipher_name, 'false') != 'true':
- continue
-
- hexval = sslProtoD[firefox_macro].lower()
-
- try:
- openssl_macro = openssl_macro_by_hex[hexval.lower()]
- openssl_macro = openssl_macro.replace("_CK_", "_TXT_")
- if openssl_macro not in all_openssl_macros:
- raise KeyError()
- format = {'hex':hexval, 'macro':openssl_macro, 'note':""}
- except KeyError:
- # openssl doesn't have a macro for this.
- format = {'hex':hexval, 'macro':firefox_macro,
- 'note':"/* No openssl macro found for "+hexval+" */\n"}
-
- res = """\
-%(note)s#ifdef %(macro)s
- CIPHER(%(hex)s, %(macro)s)
-#else
- XCIPHER(%(hex)s, %(macro)s)
-#endif""" % format
- print res
diff --git a/src/common/include.am b/src/common/include.am
new file mode 100644
index 000000000..61a90cd35
--- /dev/null
+++ b/src/common/include.am
@@ -0,0 +1,139 @@
+
+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 \
+ src/common/Makefile.nmake
+
+#CFLAGS = -Wall -Wpointer-arith -O2
+AM_CPPFLAGS += -I$(srcdir)/src/common -Isrc/common
+
+if USE_OPENBSD_MALLOC
+libor_extra_source=src/ext/OpenBSD_malloc_Linux.c
+else
+libor_extra_source=
+endif
+
+if USE_MEMPOOLS
+libor_mempool_source=src/common/mempool.c
+libor_mempool_header=src/common/mempool.h
+else
+libor_mempool_source=
+libor_mempool_header=
+endif
+
+src_common_libcurve25519_donna_a_CFLAGS=
+
+if BUILD_CURVE25519_DONNA
+src_common_libcurve25519_donna_a_SOURCES=\
+ src/ext/curve25519_donna/curve25519-donna.c
+src_common_libcurve25519_donna_a_CFLAGS+=\
+ @F_OMIT_FRAME_POINTER@
+noinst_LIBRARIES+=src/common/libcurve25519_donna.a
+LIBDONNA=src/common/libcurve25519_donna.a
+else
+if BUILD_CURVE25519_DONNA_C64
+src_common_libcurve25519_donna_a_SOURCES=\
+ src/ext/curve25519_donna/curve25519-donna-c64.c
+noinst_LIBRARIES+=src/common/libcurve25519_donna.a
+LIBDONNA=src/common/libcurve25519_donna.a
+else
+LIBDONNA=
+endif
+endif
+
+if CURVE25519_ENABLED
+libcrypto_extra_source=src/common/crypto_curve25519.c
+endif
+
+LIBOR_A_SOURCES = \
+ src/common/address.c \
+ src/common/backtrace.c \
+ src/common/compat.c \
+ src/common/container.c \
+ src/common/di_ops.c \
+ src/common/log.c \
+ src/common/memarea.c \
+ src/common/procmon.c \
+ src/common/util.c \
+ src/common/util_codedigest.c \
+ src/common/sandbox.c \
+ src/ext/csiphash.c \
+ $(libor_extra_source) \
+ $(libor_mempool_source)
+
+LIBOR_CRYPTO_A_SOURCES = \
+ src/common/aes.c \
+ src/common/crypto.c \
+ src/common/crypto_format.c \
+ src/common/torgzip.c \
+ src/common/tortls.c \
+ $(libcrypto_extra_source)
+
+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 \
+ src/common/backtrace.h \
+ src/common/aes.h \
+ src/common/ciphers.inc \
+ src/common/compat.h \
+ src/common/compat_libevent.h \
+ src/common/container.h \
+ src/common/crypto.h \
+ src/common/crypto_curve25519.h \
+ src/common/di_ops.h \
+ src/common/memarea.h \
+ src/common/linux_syscalls.inc \
+ src/common/procmon.h \
+ src/common/sandbox.h \
+ src/common/testsupport.h \
+ src/common/torgzip.h \
+ src/common/torint.h \
+ src/common/torlog.h \
+ src/common/tortls.h \
+ src/common/util.h \
+ $(libor_mempool_header)
+
+noinst_HEADERS+= $(COMMONHEADERS)
+
+DISTCLEANFILES+= src/common/common_sha1.i
+
+src/common/common_sha1.i: $(libor_SOURCES) $(libor_crypto_a_SOURCES) $(COMMONHEADERS)
+ $(AM_V_GEN)if test "@SHA1SUM@" != none; then \
+ (cd "$(srcdir)" && "@SHA1SUM@" $(src_common_libor_SOURCES) $(src_common_libor_crypto_a_SOURCES) $(COMMONHEADERS)) | "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > $@; \
+ elif test "@OPENSSL@" != none; then \
+ (cd "$(srcdir)" && "@OPENSSL@" sha1 $(src_common_libor_SOURCES) $(src_Common_libor_crypto_a_SOURCES) $(COMMONHEADERS)) | "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > $@; \
+ else \
+ rm $@; \
+ touch $@; \
+ fi
+
+src/common/util_codedigest.o: src/common/common_sha1.i
+
diff --git a/src/common/linux_syscalls.inc b/src/common/linux_syscalls.inc
new file mode 100644
index 000000000..cf47c7380
--- /dev/null
+++ b/src/common/linux_syscalls.inc
@@ -0,0 +1,1153 @@
+/* Automatically generated with
+ gen_linux_syscalls.pl /usr/include/asm/unistd*.h
+ Do not edit.
+ */
+static const struct {
+ int syscall_num; const char *syscall_name;
+} SYSCALLS_BY_NUMBER[] = {
+#ifdef __NR__llseek
+ { __NR__llseek, "_llseek" },
+#endif
+#ifdef __NR__newselect
+ { __NR__newselect, "_newselect" },
+#endif
+#ifdef __NR__sysctl
+ { __NR__sysctl, "_sysctl" },
+#endif
+#ifdef __NR_accept
+ { __NR_accept, "accept" },
+#endif
+#ifdef __NR_accept4
+ { __NR_accept4, "accept4" },
+#endif
+#ifdef __NR_access
+ { __NR_access, "access" },
+#endif
+#ifdef __NR_acct
+ { __NR_acct, "acct" },
+#endif
+#ifdef __NR_add_key
+ { __NR_add_key, "add_key" },
+#endif
+#ifdef __NR_adjtimex
+ { __NR_adjtimex, "adjtimex" },
+#endif
+#ifdef __NR_afs_syscall
+ { __NR_afs_syscall, "afs_syscall" },
+#endif
+#ifdef __NR_alarm
+ { __NR_alarm, "alarm" },
+#endif
+#ifdef __NR_arch_prctl
+ { __NR_arch_prctl, "arch_prctl" },
+#endif
+#ifdef __NR_bdflush
+ { __NR_bdflush, "bdflush" },
+#endif
+#ifdef __NR_bind
+ { __NR_bind, "bind" },
+#endif
+#ifdef __NR_break
+ { __NR_break, "break" },
+#endif
+#ifdef __NR_brk
+ { __NR_brk, "brk" },
+#endif
+#ifdef __NR_capget
+ { __NR_capget, "capget" },
+#endif
+#ifdef __NR_capset
+ { __NR_capset, "capset" },
+#endif
+#ifdef __NR_chdir
+ { __NR_chdir, "chdir" },
+#endif
+#ifdef __NR_chmod
+ { __NR_chmod, "chmod" },
+#endif
+#ifdef __NR_chown
+ { __NR_chown, "chown" },
+#endif
+#ifdef __NR_chown32
+ { __NR_chown32, "chown32" },
+#endif
+#ifdef __NR_chroot
+ { __NR_chroot, "chroot" },
+#endif
+#ifdef __NR_clock_adjtime
+ { __NR_clock_adjtime, "clock_adjtime" },
+#endif
+#ifdef __NR_clock_getres
+ { __NR_clock_getres, "clock_getres" },
+#endif
+#ifdef __NR_clock_gettime
+ { __NR_clock_gettime, "clock_gettime" },
+#endif
+#ifdef __NR_clock_nanosleep
+ { __NR_clock_nanosleep, "clock_nanosleep" },
+#endif
+#ifdef __NR_clock_settime
+ { __NR_clock_settime, "clock_settime" },
+#endif
+#ifdef __NR_clone
+ { __NR_clone, "clone" },
+#endif
+#ifdef __NR_close
+ { __NR_close, "close" },
+#endif
+#ifdef __NR_connect
+ { __NR_connect, "connect" },
+#endif
+#ifdef __NR_creat
+ { __NR_creat, "creat" },
+#endif
+#ifdef __NR_create_module
+ { __NR_create_module, "create_module" },
+#endif
+#ifdef __NR_delete_module
+ { __NR_delete_module, "delete_module" },
+#endif
+#ifdef __NR_dup
+ { __NR_dup, "dup" },
+#endif
+#ifdef __NR_dup2
+ { __NR_dup2, "dup2" },
+#endif
+#ifdef __NR_dup3
+ { __NR_dup3, "dup3" },
+#endif
+#ifdef __NR_epoll_create
+ { __NR_epoll_create, "epoll_create" },
+#endif
+#ifdef __NR_epoll_create1
+ { __NR_epoll_create1, "epoll_create1" },
+#endif
+#ifdef __NR_epoll_ctl
+ { __NR_epoll_ctl, "epoll_ctl" },
+#endif
+#ifdef __NR_epoll_ctl_old
+ { __NR_epoll_ctl_old, "epoll_ctl_old" },
+#endif
+#ifdef __NR_epoll_pwait
+ { __NR_epoll_pwait, "epoll_pwait" },
+#endif
+#ifdef __NR_epoll_wait
+ { __NR_epoll_wait, "epoll_wait" },
+#endif
+#ifdef __NR_epoll_wait_old
+ { __NR_epoll_wait_old, "epoll_wait_old" },
+#endif
+#ifdef __NR_eventfd
+ { __NR_eventfd, "eventfd" },
+#endif
+#ifdef __NR_eventfd2
+ { __NR_eventfd2, "eventfd2" },
+#endif
+#ifdef __NR_execve
+ { __NR_execve, "execve" },
+#endif
+#ifdef __NR_exit
+ { __NR_exit, "exit" },
+#endif
+#ifdef __NR_exit_group
+ { __NR_exit_group, "exit_group" },
+#endif
+#ifdef __NR_faccessat
+ { __NR_faccessat, "faccessat" },
+#endif
+#ifdef __NR_fadvise64
+ { __NR_fadvise64, "fadvise64" },
+#endif
+#ifdef __NR_fadvise64_64
+ { __NR_fadvise64_64, "fadvise64_64" },
+#endif
+#ifdef __NR_fallocate
+ { __NR_fallocate, "fallocate" },
+#endif
+#ifdef __NR_fanotify_init
+ { __NR_fanotify_init, "fanotify_init" },
+#endif
+#ifdef __NR_fanotify_mark
+ { __NR_fanotify_mark, "fanotify_mark" },
+#endif
+#ifdef __NR_fchdir
+ { __NR_fchdir, "fchdir" },
+#endif
+#ifdef __NR_fchmod
+ { __NR_fchmod, "fchmod" },
+#endif
+#ifdef __NR_fchmodat
+ { __NR_fchmodat, "fchmodat" },
+#endif
+#ifdef __NR_fchown
+ { __NR_fchown, "fchown" },
+#endif
+#ifdef __NR_fchown32
+ { __NR_fchown32, "fchown32" },
+#endif
+#ifdef __NR_fchownat
+ { __NR_fchownat, "fchownat" },
+#endif
+#ifdef __NR_fcntl
+ { __NR_fcntl, "fcntl" },
+#endif
+#ifdef __NR_fcntl64
+ { __NR_fcntl64, "fcntl64" },
+#endif
+#ifdef __NR_fdatasync
+ { __NR_fdatasync, "fdatasync" },
+#endif
+#ifdef __NR_fgetxattr
+ { __NR_fgetxattr, "fgetxattr" },
+#endif
+#ifdef __NR_finit_module
+ { __NR_finit_module, "finit_module" },
+#endif
+#ifdef __NR_flistxattr
+ { __NR_flistxattr, "flistxattr" },
+#endif
+#ifdef __NR_flock
+ { __NR_flock, "flock" },
+#endif
+#ifdef __NR_fork
+ { __NR_fork, "fork" },
+#endif
+#ifdef __NR_fremovexattr
+ { __NR_fremovexattr, "fremovexattr" },
+#endif
+#ifdef __NR_fsetxattr
+ { __NR_fsetxattr, "fsetxattr" },
+#endif
+#ifdef __NR_fstat
+ { __NR_fstat, "fstat" },
+#endif
+#ifdef __NR_fstat64
+ { __NR_fstat64, "fstat64" },
+#endif
+#ifdef __NR_fstatat64
+ { __NR_fstatat64, "fstatat64" },
+#endif
+#ifdef __NR_fstatfs
+ { __NR_fstatfs, "fstatfs" },
+#endif
+#ifdef __NR_fstatfs64
+ { __NR_fstatfs64, "fstatfs64" },
+#endif
+#ifdef __NR_fsync
+ { __NR_fsync, "fsync" },
+#endif
+#ifdef __NR_ftime
+ { __NR_ftime, "ftime" },
+#endif
+#ifdef __NR_ftruncate
+ { __NR_ftruncate, "ftruncate" },
+#endif
+#ifdef __NR_ftruncate64
+ { __NR_ftruncate64, "ftruncate64" },
+#endif
+#ifdef __NR_futex
+ { __NR_futex, "futex" },
+#endif
+#ifdef __NR_futimesat
+ { __NR_futimesat, "futimesat" },
+#endif
+#ifdef __NR_get_kernel_syms
+ { __NR_get_kernel_syms, "get_kernel_syms" },
+#endif
+#ifdef __NR_get_mempolicy
+ { __NR_get_mempolicy, "get_mempolicy" },
+#endif
+#ifdef __NR_get_robust_list
+ { __NR_get_robust_list, "get_robust_list" },
+#endif
+#ifdef __NR_get_thread_area
+ { __NR_get_thread_area, "get_thread_area" },
+#endif
+#ifdef __NR_getcpu
+ { __NR_getcpu, "getcpu" },
+#endif
+#ifdef __NR_getcwd
+ { __NR_getcwd, "getcwd" },
+#endif
+#ifdef __NR_getdents
+ { __NR_getdents, "getdents" },
+#endif
+#ifdef __NR_getdents64
+ { __NR_getdents64, "getdents64" },
+#endif
+#ifdef __NR_getegid
+ { __NR_getegid, "getegid" },
+#endif
+#ifdef __NR_getegid32
+ { __NR_getegid32, "getegid32" },
+#endif
+#ifdef __NR_geteuid
+ { __NR_geteuid, "geteuid" },
+#endif
+#ifdef __NR_geteuid32
+ { __NR_geteuid32, "geteuid32" },
+#endif
+#ifdef __NR_getgid
+ { __NR_getgid, "getgid" },
+#endif
+#ifdef __NR_getgid32
+ { __NR_getgid32, "getgid32" },
+#endif
+#ifdef __NR_getgroups
+ { __NR_getgroups, "getgroups" },
+#endif
+#ifdef __NR_getgroups32
+ { __NR_getgroups32, "getgroups32" },
+#endif
+#ifdef __NR_getitimer
+ { __NR_getitimer, "getitimer" },
+#endif
+#ifdef __NR_getpeername
+ { __NR_getpeername, "getpeername" },
+#endif
+#ifdef __NR_getpgid
+ { __NR_getpgid, "getpgid" },
+#endif
+#ifdef __NR_getpgrp
+ { __NR_getpgrp, "getpgrp" },
+#endif
+#ifdef __NR_getpid
+ { __NR_getpid, "getpid" },
+#endif
+#ifdef __NR_getpmsg
+ { __NR_getpmsg, "getpmsg" },
+#endif
+#ifdef __NR_getppid
+ { __NR_getppid, "getppid" },
+#endif
+#ifdef __NR_getpriority
+ { __NR_getpriority, "getpriority" },
+#endif
+#ifdef __NR_getresgid
+ { __NR_getresgid, "getresgid" },
+#endif
+#ifdef __NR_getresgid32
+ { __NR_getresgid32, "getresgid32" },
+#endif
+#ifdef __NR_getresuid
+ { __NR_getresuid, "getresuid" },
+#endif
+#ifdef __NR_getresuid32
+ { __NR_getresuid32, "getresuid32" },
+#endif
+#ifdef __NR_getrlimit
+ { __NR_getrlimit, "getrlimit" },
+#endif
+#ifdef __NR_getrusage
+ { __NR_getrusage, "getrusage" },
+#endif
+#ifdef __NR_getsid
+ { __NR_getsid, "getsid" },
+#endif
+#ifdef __NR_getsockname
+ { __NR_getsockname, "getsockname" },
+#endif
+#ifdef __NR_getsockopt
+ { __NR_getsockopt, "getsockopt" },
+#endif
+#ifdef __NR_gettid
+ { __NR_gettid, "gettid" },
+#endif
+#ifdef __NR_gettimeofday
+ { __NR_gettimeofday, "gettimeofday" },
+#endif
+#ifdef __NR_getuid
+ { __NR_getuid, "getuid" },
+#endif
+#ifdef __NR_getuid32
+ { __NR_getuid32, "getuid32" },
+#endif
+#ifdef __NR_getxattr
+ { __NR_getxattr, "getxattr" },
+#endif
+#ifdef __NR_gtty
+ { __NR_gtty, "gtty" },
+#endif
+#ifdef __NR_idle
+ { __NR_idle, "idle" },
+#endif
+#ifdef __NR_init_module
+ { __NR_init_module, "init_module" },
+#endif
+#ifdef __NR_inotify_add_watch
+ { __NR_inotify_add_watch, "inotify_add_watch" },
+#endif
+#ifdef __NR_inotify_init
+ { __NR_inotify_init, "inotify_init" },
+#endif
+#ifdef __NR_inotify_init1
+ { __NR_inotify_init1, "inotify_init1" },
+#endif
+#ifdef __NR_inotify_rm_watch
+ { __NR_inotify_rm_watch, "inotify_rm_watch" },
+#endif
+#ifdef __NR_io_cancel
+ { __NR_io_cancel, "io_cancel" },
+#endif
+#ifdef __NR_io_destroy
+ { __NR_io_destroy, "io_destroy" },
+#endif
+#ifdef __NR_io_getevents
+ { __NR_io_getevents, "io_getevents" },
+#endif
+#ifdef __NR_io_setup
+ { __NR_io_setup, "io_setup" },
+#endif
+#ifdef __NR_io_submit
+ { __NR_io_submit, "io_submit" },
+#endif
+#ifdef __NR_ioctl
+ { __NR_ioctl, "ioctl" },
+#endif
+#ifdef __NR_ioperm
+ { __NR_ioperm, "ioperm" },
+#endif
+#ifdef __NR_iopl
+ { __NR_iopl, "iopl" },
+#endif
+#ifdef __NR_ioprio_get
+ { __NR_ioprio_get, "ioprio_get" },
+#endif
+#ifdef __NR_ioprio_set
+ { __NR_ioprio_set, "ioprio_set" },
+#endif
+#ifdef __NR_ipc
+ { __NR_ipc, "ipc" },
+#endif
+#ifdef __NR_kcmp
+ { __NR_kcmp, "kcmp" },
+#endif
+#ifdef __NR_kexec_load
+ { __NR_kexec_load, "kexec_load" },
+#endif
+#ifdef __NR_keyctl
+ { __NR_keyctl, "keyctl" },
+#endif
+#ifdef __NR_kill
+ { __NR_kill, "kill" },
+#endif
+#ifdef __NR_lchown
+ { __NR_lchown, "lchown" },
+#endif
+#ifdef __NR_lchown32
+ { __NR_lchown32, "lchown32" },
+#endif
+#ifdef __NR_lgetxattr
+ { __NR_lgetxattr, "lgetxattr" },
+#endif
+#ifdef __NR_link
+ { __NR_link, "link" },
+#endif
+#ifdef __NR_linkat
+ { __NR_linkat, "linkat" },
+#endif
+#ifdef __NR_listen
+ { __NR_listen, "listen" },
+#endif
+#ifdef __NR_listxattr
+ { __NR_listxattr, "listxattr" },
+#endif
+#ifdef __NR_llistxattr
+ { __NR_llistxattr, "llistxattr" },
+#endif
+#ifdef __NR_lock
+ { __NR_lock, "lock" },
+#endif
+#ifdef __NR_lookup_dcookie
+ { __NR_lookup_dcookie, "lookup_dcookie" },
+#endif
+#ifdef __NR_lremovexattr
+ { __NR_lremovexattr, "lremovexattr" },
+#endif
+#ifdef __NR_lseek
+ { __NR_lseek, "lseek" },
+#endif
+#ifdef __NR_lsetxattr
+ { __NR_lsetxattr, "lsetxattr" },
+#endif
+#ifdef __NR_lstat
+ { __NR_lstat, "lstat" },
+#endif
+#ifdef __NR_lstat64
+ { __NR_lstat64, "lstat64" },
+#endif
+#ifdef __NR_madvise
+ { __NR_madvise, "madvise" },
+#endif
+#ifdef __NR_mbind
+ { __NR_mbind, "mbind" },
+#endif
+#ifdef __NR_migrate_pages
+ { __NR_migrate_pages, "migrate_pages" },
+#endif
+#ifdef __NR_mincore
+ { __NR_mincore, "mincore" },
+#endif
+#ifdef __NR_mkdir
+ { __NR_mkdir, "mkdir" },
+#endif
+#ifdef __NR_mkdirat
+ { __NR_mkdirat, "mkdirat" },
+#endif
+#ifdef __NR_mknod
+ { __NR_mknod, "mknod" },
+#endif
+#ifdef __NR_mknodat
+ { __NR_mknodat, "mknodat" },
+#endif
+#ifdef __NR_mlock
+ { __NR_mlock, "mlock" },
+#endif
+#ifdef __NR_mlockall
+ { __NR_mlockall, "mlockall" },
+#endif
+#ifdef __NR_mmap
+ { __NR_mmap, "mmap" },
+#endif
+#ifdef __NR_mmap2
+ { __NR_mmap2, "mmap2" },
+#endif
+#ifdef __NR_modify_ldt
+ { __NR_modify_ldt, "modify_ldt" },
+#endif
+#ifdef __NR_mount
+ { __NR_mount, "mount" },
+#endif
+#ifdef __NR_move_pages
+ { __NR_move_pages, "move_pages" },
+#endif
+#ifdef __NR_mprotect
+ { __NR_mprotect, "mprotect" },
+#endif
+#ifdef __NR_mpx
+ { __NR_mpx, "mpx" },
+#endif
+#ifdef __NR_mq_getsetattr
+ { __NR_mq_getsetattr, "mq_getsetattr" },
+#endif
+#ifdef __NR_mq_notify
+ { __NR_mq_notify, "mq_notify" },
+#endif
+#ifdef __NR_mq_open
+ { __NR_mq_open, "mq_open" },
+#endif
+#ifdef __NR_mq_timedreceive
+ { __NR_mq_timedreceive, "mq_timedreceive" },
+#endif
+#ifdef __NR_mq_timedsend
+ { __NR_mq_timedsend, "mq_timedsend" },
+#endif
+#ifdef __NR_mq_unlink
+ { __NR_mq_unlink, "mq_unlink" },
+#endif
+#ifdef __NR_mremap
+ { __NR_mremap, "mremap" },
+#endif
+#ifdef __NR_msgctl
+ { __NR_msgctl, "msgctl" },
+#endif
+#ifdef __NR_msgget
+ { __NR_msgget, "msgget" },
+#endif
+#ifdef __NR_msgrcv
+ { __NR_msgrcv, "msgrcv" },
+#endif
+#ifdef __NR_msgsnd
+ { __NR_msgsnd, "msgsnd" },
+#endif
+#ifdef __NR_msync
+ { __NR_msync, "msync" },
+#endif
+#ifdef __NR_munlock
+ { __NR_munlock, "munlock" },
+#endif
+#ifdef __NR_munlockall
+ { __NR_munlockall, "munlockall" },
+#endif
+#ifdef __NR_munmap
+ { __NR_munmap, "munmap" },
+#endif
+#ifdef __NR_name_to_handle_at
+ { __NR_name_to_handle_at, "name_to_handle_at" },
+#endif
+#ifdef __NR_nanosleep
+ { __NR_nanosleep, "nanosleep" },
+#endif
+#ifdef __NR_newfstatat
+ { __NR_newfstatat, "newfstatat" },
+#endif
+#ifdef __NR_nfsservctl
+ { __NR_nfsservctl, "nfsservctl" },
+#endif
+#ifdef __NR_nice
+ { __NR_nice, "nice" },
+#endif
+#ifdef __NR_oldfstat
+ { __NR_oldfstat, "oldfstat" },
+#endif
+#ifdef __NR_oldlstat
+ { __NR_oldlstat, "oldlstat" },
+#endif
+#ifdef __NR_oldolduname
+ { __NR_oldolduname, "oldolduname" },
+#endif
+#ifdef __NR_oldstat
+ { __NR_oldstat, "oldstat" },
+#endif
+#ifdef __NR_olduname
+ { __NR_olduname, "olduname" },
+#endif
+#ifdef __NR_open
+ { __NR_open, "open" },
+#endif
+#ifdef __NR_open_by_handle_at
+ { __NR_open_by_handle_at, "open_by_handle_at" },
+#endif
+#ifdef __NR_openat
+ { __NR_openat, "openat" },
+#endif
+#ifdef __NR_pause
+ { __NR_pause, "pause" },
+#endif
+#ifdef __NR_perf_event_open
+ { __NR_perf_event_open, "perf_event_open" },
+#endif
+#ifdef __NR_personality
+ { __NR_personality, "personality" },
+#endif
+#ifdef __NR_pipe
+ { __NR_pipe, "pipe" },
+#endif
+#ifdef __NR_pipe2
+ { __NR_pipe2, "pipe2" },
+#endif
+#ifdef __NR_pivot_root
+ { __NR_pivot_root, "pivot_root" },
+#endif
+#ifdef __NR_poll
+ { __NR_poll, "poll" },
+#endif
+#ifdef __NR_ppoll
+ { __NR_ppoll, "ppoll" },
+#endif
+#ifdef __NR_prctl
+ { __NR_prctl, "prctl" },
+#endif
+#ifdef __NR_pread64
+ { __NR_pread64, "pread64" },
+#endif
+#ifdef __NR_preadv
+ { __NR_preadv, "preadv" },
+#endif
+#ifdef __NR_prlimit64
+ { __NR_prlimit64, "prlimit64" },
+#endif
+#ifdef __NR_process_vm_readv
+ { __NR_process_vm_readv, "process_vm_readv" },
+#endif
+#ifdef __NR_process_vm_writev
+ { __NR_process_vm_writev, "process_vm_writev" },
+#endif
+#ifdef __NR_prof
+ { __NR_prof, "prof" },
+#endif
+#ifdef __NR_profil
+ { __NR_profil, "profil" },
+#endif
+#ifdef __NR_pselect6
+ { __NR_pselect6, "pselect6" },
+#endif
+#ifdef __NR_ptrace
+ { __NR_ptrace, "ptrace" },
+#endif
+#ifdef __NR_putpmsg
+ { __NR_putpmsg, "putpmsg" },
+#endif
+#ifdef __NR_pwrite64
+ { __NR_pwrite64, "pwrite64" },
+#endif
+#ifdef __NR_pwritev
+ { __NR_pwritev, "pwritev" },
+#endif
+#ifdef __NR_query_module
+ { __NR_query_module, "query_module" },
+#endif
+#ifdef __NR_quotactl
+ { __NR_quotactl, "quotactl" },
+#endif
+#ifdef __NR_read
+ { __NR_read, "read" },
+#endif
+#ifdef __NR_readahead
+ { __NR_readahead, "readahead" },
+#endif
+#ifdef __NR_readdir
+ { __NR_readdir, "readdir" },
+#endif
+#ifdef __NR_readlink
+ { __NR_readlink, "readlink" },
+#endif
+#ifdef __NR_readlinkat
+ { __NR_readlinkat, "readlinkat" },
+#endif
+#ifdef __NR_readv
+ { __NR_readv, "readv" },
+#endif
+#ifdef __NR_reboot
+ { __NR_reboot, "reboot" },
+#endif
+#ifdef __NR_recvfrom
+ { __NR_recvfrom, "recvfrom" },
+#endif
+#ifdef __NR_recvmmsg
+ { __NR_recvmmsg, "recvmmsg" },
+#endif
+#ifdef __NR_recvmsg
+ { __NR_recvmsg, "recvmsg" },
+#endif
+#ifdef __NR_remap_file_pages
+ { __NR_remap_file_pages, "remap_file_pages" },
+#endif
+#ifdef __NR_removexattr
+ { __NR_removexattr, "removexattr" },
+#endif
+#ifdef __NR_rename
+ { __NR_rename, "rename" },
+#endif
+#ifdef __NR_renameat
+ { __NR_renameat, "renameat" },
+#endif
+#ifdef __NR_request_key
+ { __NR_request_key, "request_key" },
+#endif
+#ifdef __NR_restart_syscall
+ { __NR_restart_syscall, "restart_syscall" },
+#endif
+#ifdef __NR_rmdir
+ { __NR_rmdir, "rmdir" },
+#endif
+#ifdef __NR_rt_sigaction
+ { __NR_rt_sigaction, "rt_sigaction" },
+#endif
+#ifdef __NR_rt_sigpending
+ { __NR_rt_sigpending, "rt_sigpending" },
+#endif
+#ifdef __NR_rt_sigprocmask
+ { __NR_rt_sigprocmask, "rt_sigprocmask" },
+#endif
+#ifdef __NR_rt_sigqueueinfo
+ { __NR_rt_sigqueueinfo, "rt_sigqueueinfo" },
+#endif
+#ifdef __NR_rt_sigreturn
+ { __NR_rt_sigreturn, "rt_sigreturn" },
+#endif
+#ifdef __NR_rt_sigsuspend
+ { __NR_rt_sigsuspend, "rt_sigsuspend" },
+#endif
+#ifdef __NR_rt_sigtimedwait
+ { __NR_rt_sigtimedwait, "rt_sigtimedwait" },
+#endif
+#ifdef __NR_rt_tgsigqueueinfo
+ { __NR_rt_tgsigqueueinfo, "rt_tgsigqueueinfo" },
+#endif
+#ifdef __NR_sched_get_priority_max
+ { __NR_sched_get_priority_max, "sched_get_priority_max" },
+#endif
+#ifdef __NR_sched_get_priority_min
+ { __NR_sched_get_priority_min, "sched_get_priority_min" },
+#endif
+#ifdef __NR_sched_getaffinity
+ { __NR_sched_getaffinity, "sched_getaffinity" },
+#endif
+#ifdef __NR_sched_getparam
+ { __NR_sched_getparam, "sched_getparam" },
+#endif
+#ifdef __NR_sched_getscheduler
+ { __NR_sched_getscheduler, "sched_getscheduler" },
+#endif
+#ifdef __NR_sched_rr_get_interval
+ { __NR_sched_rr_get_interval, "sched_rr_get_interval" },
+#endif
+#ifdef __NR_sched_setaffinity
+ { __NR_sched_setaffinity, "sched_setaffinity" },
+#endif
+#ifdef __NR_sched_setparam
+ { __NR_sched_setparam, "sched_setparam" },
+#endif
+#ifdef __NR_sched_setscheduler
+ { __NR_sched_setscheduler, "sched_setscheduler" },
+#endif
+#ifdef __NR_sched_yield
+ { __NR_sched_yield, "sched_yield" },
+#endif
+#ifdef __NR_security
+ { __NR_security, "security" },
+#endif
+#ifdef __NR_select
+ { __NR_select, "select" },
+#endif
+#ifdef __NR_semctl
+ { __NR_semctl, "semctl" },
+#endif
+#ifdef __NR_semget
+ { __NR_semget, "semget" },
+#endif
+#ifdef __NR_semop
+ { __NR_semop, "semop" },
+#endif
+#ifdef __NR_semtimedop
+ { __NR_semtimedop, "semtimedop" },
+#endif
+#ifdef __NR_sendfile
+ { __NR_sendfile, "sendfile" },
+#endif
+#ifdef __NR_sendfile64
+ { __NR_sendfile64, "sendfile64" },
+#endif
+#ifdef __NR_sendmmsg
+ { __NR_sendmmsg, "sendmmsg" },
+#endif
+#ifdef __NR_sendmsg
+ { __NR_sendmsg, "sendmsg" },
+#endif
+#ifdef __NR_sendto
+ { __NR_sendto, "sendto" },
+#endif
+#ifdef __NR_set_mempolicy
+ { __NR_set_mempolicy, "set_mempolicy" },
+#endif
+#ifdef __NR_set_robust_list
+ { __NR_set_robust_list, "set_robust_list" },
+#endif
+#ifdef __NR_set_thread_area
+ { __NR_set_thread_area, "set_thread_area" },
+#endif
+#ifdef __NR_set_tid_address
+ { __NR_set_tid_address, "set_tid_address" },
+#endif
+#ifdef __NR_setdomainname
+ { __NR_setdomainname, "setdomainname" },
+#endif
+#ifdef __NR_setfsgid
+ { __NR_setfsgid, "setfsgid" },
+#endif
+#ifdef __NR_setfsgid32
+ { __NR_setfsgid32, "setfsgid32" },
+#endif
+#ifdef __NR_setfsuid
+ { __NR_setfsuid, "setfsuid" },
+#endif
+#ifdef __NR_setfsuid32
+ { __NR_setfsuid32, "setfsuid32" },
+#endif
+#ifdef __NR_setgid
+ { __NR_setgid, "setgid" },
+#endif
+#ifdef __NR_setgid32
+ { __NR_setgid32, "setgid32" },
+#endif
+#ifdef __NR_setgroups
+ { __NR_setgroups, "setgroups" },
+#endif
+#ifdef __NR_setgroups32
+ { __NR_setgroups32, "setgroups32" },
+#endif
+#ifdef __NR_sethostname
+ { __NR_sethostname, "sethostname" },
+#endif
+#ifdef __NR_setitimer
+ { __NR_setitimer, "setitimer" },
+#endif
+#ifdef __NR_setns
+ { __NR_setns, "setns" },
+#endif
+#ifdef __NR_setpgid
+ { __NR_setpgid, "setpgid" },
+#endif
+#ifdef __NR_setpriority
+ { __NR_setpriority, "setpriority" },
+#endif
+#ifdef __NR_setregid
+ { __NR_setregid, "setregid" },
+#endif
+#ifdef __NR_setregid32
+ { __NR_setregid32, "setregid32" },
+#endif
+#ifdef __NR_setresgid
+ { __NR_setresgid, "setresgid" },
+#endif
+#ifdef __NR_setresgid32
+ { __NR_setresgid32, "setresgid32" },
+#endif
+#ifdef __NR_setresuid
+ { __NR_setresuid, "setresuid" },
+#endif
+#ifdef __NR_setresuid32
+ { __NR_setresuid32, "setresuid32" },
+#endif
+#ifdef __NR_setreuid
+ { __NR_setreuid, "setreuid" },
+#endif
+#ifdef __NR_setreuid32
+ { __NR_setreuid32, "setreuid32" },
+#endif
+#ifdef __NR_setrlimit
+ { __NR_setrlimit, "setrlimit" },
+#endif
+#ifdef __NR_setsid
+ { __NR_setsid, "setsid" },
+#endif
+#ifdef __NR_setsockopt
+ { __NR_setsockopt, "setsockopt" },
+#endif
+#ifdef __NR_settimeofday
+ { __NR_settimeofday, "settimeofday" },
+#endif
+#ifdef __NR_setuid
+ { __NR_setuid, "setuid" },
+#endif
+#ifdef __NR_setuid32
+ { __NR_setuid32, "setuid32" },
+#endif
+#ifdef __NR_setxattr
+ { __NR_setxattr, "setxattr" },
+#endif
+#ifdef __NR_sgetmask
+ { __NR_sgetmask, "sgetmask" },
+#endif
+#ifdef __NR_shmat
+ { __NR_shmat, "shmat" },
+#endif
+#ifdef __NR_shmctl
+ { __NR_shmctl, "shmctl" },
+#endif
+#ifdef __NR_shmdt
+ { __NR_shmdt, "shmdt" },
+#endif
+#ifdef __NR_shmget
+ { __NR_shmget, "shmget" },
+#endif
+#ifdef __NR_shutdown
+ { __NR_shutdown, "shutdown" },
+#endif
+#ifdef __NR_sigaction
+ { __NR_sigaction, "sigaction" },
+#endif
+#ifdef __NR_sigaltstack
+ { __NR_sigaltstack, "sigaltstack" },
+#endif
+#ifdef __NR_signal
+ { __NR_signal, "signal" },
+#endif
+#ifdef __NR_signalfd
+ { __NR_signalfd, "signalfd" },
+#endif
+#ifdef __NR_signalfd4
+ { __NR_signalfd4, "signalfd4" },
+#endif
+#ifdef __NR_sigpending
+ { __NR_sigpending, "sigpending" },
+#endif
+#ifdef __NR_sigprocmask
+ { __NR_sigprocmask, "sigprocmask" },
+#endif
+#ifdef __NR_sigreturn
+ { __NR_sigreturn, "sigreturn" },
+#endif
+#ifdef __NR_sigsuspend
+ { __NR_sigsuspend, "sigsuspend" },
+#endif
+#ifdef __NR_socket
+ { __NR_socket, "socket" },
+#endif
+#ifdef __NR_socketcall
+ { __NR_socketcall, "socketcall" },
+#endif
+#ifdef __NR_socketpair
+ { __NR_socketpair, "socketpair" },
+#endif
+#ifdef __NR_splice
+ { __NR_splice, "splice" },
+#endif
+#ifdef __NR_ssetmask
+ { __NR_ssetmask, "ssetmask" },
+#endif
+#ifdef __NR_stat
+ { __NR_stat, "stat" },
+#endif
+#ifdef __NR_stat64
+ { __NR_stat64, "stat64" },
+#endif
+#ifdef __NR_statfs
+ { __NR_statfs, "statfs" },
+#endif
+#ifdef __NR_statfs64
+ { __NR_statfs64, "statfs64" },
+#endif
+#ifdef __NR_stime
+ { __NR_stime, "stime" },
+#endif
+#ifdef __NR_stty
+ { __NR_stty, "stty" },
+#endif
+#ifdef __NR_swapoff
+ { __NR_swapoff, "swapoff" },
+#endif
+#ifdef __NR_swapon
+ { __NR_swapon, "swapon" },
+#endif
+#ifdef __NR_symlink
+ { __NR_symlink, "symlink" },
+#endif
+#ifdef __NR_symlinkat
+ { __NR_symlinkat, "symlinkat" },
+#endif
+#ifdef __NR_sync
+ { __NR_sync, "sync" },
+#endif
+#ifdef __NR_sync_file_range
+ { __NR_sync_file_range, "sync_file_range" },
+#endif
+#ifdef __NR_syncfs
+ { __NR_syncfs, "syncfs" },
+#endif
+#ifdef __NR_sysfs
+ { __NR_sysfs, "sysfs" },
+#endif
+#ifdef __NR_sysinfo
+ { __NR_sysinfo, "sysinfo" },
+#endif
+#ifdef __NR_syslog
+ { __NR_syslog, "syslog" },
+#endif
+#ifdef __NR_tee
+ { __NR_tee, "tee" },
+#endif
+#ifdef __NR_tgkill
+ { __NR_tgkill, "tgkill" },
+#endif
+#ifdef __NR_time
+ { __NR_time, "time" },
+#endif
+#ifdef __NR_timer_create
+ { __NR_timer_create, "timer_create" },
+#endif
+#ifdef __NR_timer_delete
+ { __NR_timer_delete, "timer_delete" },
+#endif
+#ifdef __NR_timer_getoverrun
+ { __NR_timer_getoverrun, "timer_getoverrun" },
+#endif
+#ifdef __NR_timer_gettime
+ { __NR_timer_gettime, "timer_gettime" },
+#endif
+#ifdef __NR_timer_settime
+ { __NR_timer_settime, "timer_settime" },
+#endif
+#ifdef __NR_timerfd_create
+ { __NR_timerfd_create, "timerfd_create" },
+#endif
+#ifdef __NR_timerfd_gettime
+ { __NR_timerfd_gettime, "timerfd_gettime" },
+#endif
+#ifdef __NR_timerfd_settime
+ { __NR_timerfd_settime, "timerfd_settime" },
+#endif
+#ifdef __NR_times
+ { __NR_times, "times" },
+#endif
+#ifdef __NR_tkill
+ { __NR_tkill, "tkill" },
+#endif
+#ifdef __NR_truncate
+ { __NR_truncate, "truncate" },
+#endif
+#ifdef __NR_truncate64
+ { __NR_truncate64, "truncate64" },
+#endif
+#ifdef __NR_tuxcall
+ { __NR_tuxcall, "tuxcall" },
+#endif
+#ifdef __NR_ugetrlimit
+ { __NR_ugetrlimit, "ugetrlimit" },
+#endif
+#ifdef __NR_ulimit
+ { __NR_ulimit, "ulimit" },
+#endif
+#ifdef __NR_umask
+ { __NR_umask, "umask" },
+#endif
+#ifdef __NR_umount
+ { __NR_umount, "umount" },
+#endif
+#ifdef __NR_umount2
+ { __NR_umount2, "umount2" },
+#endif
+#ifdef __NR_uname
+ { __NR_uname, "uname" },
+#endif
+#ifdef __NR_unlink
+ { __NR_unlink, "unlink" },
+#endif
+#ifdef __NR_unlinkat
+ { __NR_unlinkat, "unlinkat" },
+#endif
+#ifdef __NR_unshare
+ { __NR_unshare, "unshare" },
+#endif
+#ifdef __NR_uselib
+ { __NR_uselib, "uselib" },
+#endif
+#ifdef __NR_ustat
+ { __NR_ustat, "ustat" },
+#endif
+#ifdef __NR_utime
+ { __NR_utime, "utime" },
+#endif
+#ifdef __NR_utimensat
+ { __NR_utimensat, "utimensat" },
+#endif
+#ifdef __NR_utimes
+ { __NR_utimes, "utimes" },
+#endif
+#ifdef __NR_vfork
+ { __NR_vfork, "vfork" },
+#endif
+#ifdef __NR_vhangup
+ { __NR_vhangup, "vhangup" },
+#endif
+#ifdef __NR_vm86
+ { __NR_vm86, "vm86" },
+#endif
+#ifdef __NR_vm86old
+ { __NR_vm86old, "vm86old" },
+#endif
+#ifdef __NR_vmsplice
+ { __NR_vmsplice, "vmsplice" },
+#endif
+#ifdef __NR_vserver
+ { __NR_vserver, "vserver" },
+#endif
+#ifdef __NR_wait4
+ { __NR_wait4, "wait4" },
+#endif
+#ifdef __NR_waitid
+ { __NR_waitid, "waitid" },
+#endif
+#ifdef __NR_waitpid
+ { __NR_waitpid, "waitpid" },
+#endif
+#ifdef __NR_write
+ { __NR_write, "write" },
+#endif
+#ifdef __NR_writev
+ { __NR_writev, "writev" },
+#endif
+ {0, NULL}
+};
+
diff --git a/src/common/log.c b/src/common/log.c
index 5e2e6b5b5..517fa4faa 100644
--- a/src/common/log.c
+++ b/src/common/log.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -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. */
@@ -83,12 +87,12 @@ should_log_function_name(log_domain_mask_t domain, int severity)
case LOG_DEBUG:
case LOG_INFO:
/* All debugging messages occur in interesting places. */
- return 1;
+ return (domain & LD_NOFUNCNAME) == 0;
case LOG_NOTICE:
case LOG_WARN:
case LOG_ERR:
/* We care about places where bugs occur. */
- return (domain == LD_BUG);
+ return (domain & (LD_BUG|LD_NOFUNCNAME)) == LD_BUG;
default:
/* Call assert, not tor_assert, since tor_assert calls log on failure. */
assert(0); return 0;
@@ -131,7 +135,7 @@ static smartlist_t *pending_cb_messages = NULL;
/** What's the lowest log level anybody cares about? Checking this lets us
* bail out early from log_debug if we aren't debugging. */
-int _log_global_min_severity = LOG_NOTICE;
+int log_global_min_severity_ = LOG_NOTICE;
static void delete_log(logfile_t *victim);
static void close_log(logfile_t *victim);
@@ -140,11 +144,9 @@ static char *domain_to_string(log_domain_mask_t domain,
char *buf, size_t buflen);
static INLINE char *format_msg(char *buf, size_t buf_len,
log_domain_mask_t domain, int severity, const char *funcname,
+ const char *suffix,
const char *format, va_list ap, size_t *msg_len_out)
- CHECK_PRINTF(6,0);
-static void logv(int severity, log_domain_mask_t domain, const char *funcname,
- const char *format, va_list ap)
- CHECK_PRINTF(4,0);
+ CHECK_PRINTF(7,0);
/** Name of the application: used to generate the message we write at the
* start of each new log. */
@@ -177,7 +179,7 @@ set_log_time_granularity(int granularity_msec)
* <b>buf_len</b> character buffer in <b>buf</b>.
*/
static INLINE size_t
-_log_prefix(char *buf, size_t buf_len, int severity)
+log_prefix_(char *buf, size_t buf_len, int severity)
{
time_t t;
struct timeval now;
@@ -230,7 +232,7 @@ log_tor_version(logfile_t *lf, int reset)
/* We are resetting, but we aren't at the start of the file; no
* need to log again. */
return 0;
- n = _log_prefix(buf, sizeof(buf), LOG_NOTICE);
+ n = log_prefix_(buf, sizeof(buf), LOG_NOTICE);
if (appname) {
tor_snprintf(buf+n, sizeof(buf)-n,
"%s opening %slog file.\n", appname, is_new?"new ":"");
@@ -251,6 +253,7 @@ log_tor_version(logfile_t *lf, int reset)
static INLINE char *
format_msg(char *buf, size_t buf_len,
log_domain_mask_t domain, int severity, const char *funcname,
+ const char *suffix,
const char *format, va_list ap, size_t *msg_len_out)
{
size_t n;
@@ -262,7 +265,7 @@ format_msg(char *buf, size_t buf_len,
buf_len -= 2; /* subtract 2 characters so we have room for \n\0 */
buf_end = buf+buf_len; /* point *after* the last char we can write to */
- n = _log_prefix(buf, buf_len, severity);
+ n = log_prefix_(buf, buf_len, severity);
end_of_prefix = buf+n;
if (log_domains_are_logged) {
@@ -312,6 +315,13 @@ format_msg(char *buf, size_t buf_len,
n = buf_len;
} else {
n += r;
+ if (suffix) {
+ size_t suffix_len = strlen(suffix);
+ if (buf_len-n >= suffix_len) {
+ memcpy(buf+n, suffix, suffix_len);
+ n += suffix_len;
+ }
+ }
}
buf[n]='\n';
buf[n+1]='\0';
@@ -323,9 +333,9 @@ format_msg(char *buf, size_t buf_len,
* <b>severity</b>. If provided, <b>funcname</b> is prepended to the
* message. The actual message is derived as from tor_snprintf(format,ap).
*/
-static void
-logv(int severity, log_domain_mask_t domain, const char *funcname,
- const char *format, va_list ap)
+MOCK_IMPL(STATIC void,
+logv,(int severity, log_domain_mask_t domain, const char *funcname,
+ const char *suffix, const char *format, va_list ap))
{
char buf[10024];
size_t msg_len = 0;
@@ -361,8 +371,8 @@ logv(int severity, log_domain_mask_t domain, const char *funcname,
if (!formatted) {
end_of_prefix =
- format_msg(buf, sizeof(buf), domain, severity, funcname, format, ap,
- &msg_len);
+ format_msg(buf, sizeof(buf), domain, severity, funcname, suffix,
+ format, ap, &msg_len);
formatted = 1;
}
@@ -423,102 +433,277 @@ void
tor_log(int severity, log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (severity > _log_global_min_severity)
+ if (severity > log_global_min_severity_)
return;
va_start(ap,format);
- logv(severity, domain, NULL, format, ap);
+ logv(severity, domain, NULL, NULL, format, ap);
va_end(ap);
}
+/** Maximum number of fds that will get notifications if we crash */
+#define MAX_SIGSAFE_FDS 8
+/** Array of fds to log crash-style warnings to. */
+static int sigsafe_log_fds[MAX_SIGSAFE_FDS] = { STDERR_FILENO };
+/** The number of elements used in sigsafe_log_fds */
+static int n_sigsafe_log_fds = 1;
+
+/** Write <b>s</b> to each element of sigsafe_log_fds. Return 0 on success, -1
+ * on failure. */
+static int
+tor_log_err_sigsafe_write(const char *s)
+{
+ int i;
+ ssize_t r;
+ size_t len = strlen(s);
+ int err = 0;
+ for (i=0; i < n_sigsafe_log_fds; ++i) {
+ r = write(sigsafe_log_fds[i], s, len);
+ err += (r != (ssize_t)len);
+ }
+ return err ? -1 : 0;
+}
+
+/** Given a list of string arguments ending with a NULL, writes them
+ * to our logs and to stderr (if possible). This function is safe to call
+ * from within a signal handler. */
+void
+tor_log_err_sigsafe(const char *m, ...)
+{
+ va_list ap;
+ const char *x;
+ char timebuf[33];
+ time_t now = time(NULL);
+
+ if (!m)
+ return;
+ if (log_time_granularity >= 2000) {
+ int g = log_time_granularity / 1000;
+ now -= now % g;
+ }
+ timebuf[0] = now < 0 ? '-' : ' ';
+ if (now < 0) now = -now;
+ timebuf[1] = '\0';
+ format_dec_number_sigsafe(now, timebuf+1, sizeof(timebuf)-1);
+ tor_log_err_sigsafe_write("\n=========================================="
+ "================== T=");
+ tor_log_err_sigsafe_write(timebuf);
+ tor_log_err_sigsafe_write("\n");
+ tor_log_err_sigsafe_write(m);
+ va_start(ap, m);
+ while ((x = va_arg(ap, const char*))) {
+ tor_log_err_sigsafe_write(x);
+ }
+ va_end(ap);
+}
+
+/** Set *<b>out</b> to a pointer to an array of the fds to log errors to from
+ * inside a signal handler. Return the number of elements in the array. */
+int
+tor_log_get_sigsafe_err_fds(const int **out)
+{
+ *out = sigsafe_log_fds;
+ return n_sigsafe_log_fds;
+}
+
+/** Helper function; return true iff the <b>n</b>-element array <b>array</b>
+ * contains <b>item</b>. */
+static int
+int_array_contains(const int *array, int n, int item)
+{
+ int j;
+ for (j = 0; j < n; ++j) {
+ if (array[j] == item)
+ return 1;
+ }
+ return 0;
+}
+
+/** Function to call whenever the list of logs changes to get ready to log
+ * from signal handlers. */
+void
+tor_log_update_sigsafe_err_fds(void)
+{
+ const logfile_t *lf;
+ int found_real_stderr = 0;
+
+ LOCK_LOGS();
+ /* Reserve the first one for stderr. This is safe because when we daemonize,
+ * we dup2 /dev/null to stderr, */
+ sigsafe_log_fds[0] = STDERR_FILENO;
+ n_sigsafe_log_fds = 1;
+
+ for (lf = logfiles; lf; lf = lf->next) {
+ /* Don't try callback to the control port, or syslogs: We can't
+ * do them from a signal handler. Don't try stdout: we always do stderr.
+ */
+ if (lf->is_temporary || lf->is_syslog ||
+ lf->callback || lf->seems_dead || lf->fd < 0)
+ continue;
+ if (lf->severities->masks[SEVERITY_MASK_IDX(LOG_ERR)] &
+ (LD_BUG|LD_GENERAL)) {
+ if (lf->fd == STDERR_FILENO)
+ found_real_stderr = 1;
+ /* Avoid duplicates */
+ if (int_array_contains(sigsafe_log_fds, n_sigsafe_log_fds, lf->fd))
+ continue;
+ sigsafe_log_fds[n_sigsafe_log_fds++] = lf->fd;
+ if (n_sigsafe_log_fds == MAX_SIGSAFE_FDS)
+ break;
+ }
+ }
+
+ if (!found_real_stderr &&
+ int_array_contains(sigsafe_log_fds, n_sigsafe_log_fds, STDOUT_FILENO)) {
+ /* Don't use a virtual stderr when we're also logging to stdout. */
+ assert(n_sigsafe_log_fds >= 2); /* Don't use assert inside log functions*/
+ sigsafe_log_fds[0] = sigsafe_log_fds[--n_sigsafe_log_fds];
+ }
+
+ UNLOCK_LOGS();
+}
+
+/** Add to <b>out</b> a copy of every currently configured log file name. Used
+ * to enable access to these filenames with the sandbox code. */
+void
+tor_log_get_logfile_names(smartlist_t *out)
+{
+ logfile_t *lf;
+ tor_assert(out);
+
+ LOCK_LOGS();
+
+ for (lf = logfiles; lf; lf = lf->next) {
+ if (lf->is_temporary || lf->is_syslog || lf->callback)
+ continue;
+ if (lf->filename == NULL)
+ continue;
+ smartlist_add(out, tor_strdup(lf->filename));
+ }
+
+ UNLOCK_LOGS();
+}
+
/** Output a message to the log, prefixed with a function name <b>fn</b>. */
#ifdef __GNUC__
/** GCC-based implementation of the log_fn backend, used when we have
* variadic macros. All arguments are as for log_fn, except for
* <b>fn</b>, which is the name of the calling functions. */
void
-_log_fn(int severity, log_domain_mask_t domain, const char *fn,
+log_fn_(int severity, log_domain_mask_t domain, const char *fn,
const char *format, ...)
{
va_list ap;
- if (severity > _log_global_min_severity)
+ if (severity > log_global_min_severity_)
return;
va_start(ap,format);
- logv(severity, domain, fn, format, ap);
+ logv(severity, domain, fn, NULL, format, ap);
va_end(ap);
}
+void
+log_fn_ratelim_(ratelim_t *ratelim, int severity, log_domain_mask_t domain,
+ const char *fn, const char *format, ...)
+{
+ va_list ap;
+ char *m;
+ if (severity > log_global_min_severity_)
+ return;
+ m = rate_limit_log(ratelim, approx_time());
+ if (m == NULL)
+ return;
+ va_start(ap, format);
+ logv(severity, domain, fn, m, format, ap);
+ va_end(ap);
+ tor_free(m);
+}
#else
/** @{ */
/** Variant implementation of log_fn, log_debug, log_info,... for C compilers
* without variadic macros. In this case, the calling function sets
- * _log_fn_function_name to the name of the function, then invokes the
- * appropriate _log_fn, _log_debug, etc. */
-const char *_log_fn_function_name=NULL;
+ * log_fn_function_name_ to the name of the function, then invokes the
+ * appropriate log_fn_, log_debug_, etc. */
+const char *log_fn_function_name_=NULL;
void
-_log_fn(int severity, log_domain_mask_t domain, const char *format, ...)
+log_fn_(int severity, log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (severity > _log_global_min_severity)
+ if (severity > log_global_min_severity_)
return;
va_start(ap,format);
- logv(severity, domain, _log_fn_function_name, format, ap);
+ logv(severity, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_debug(log_domain_mask_t domain, const char *format, ...)
+log_fn_ratelim_(ratelim_t *ratelim, int severity, log_domain_mask_t domain,
+ const char *format, ...)
+{
+ va_list ap;
+ char *m;
+ if (severity > log_global_min_severity_)
+ return;
+ m = rate_limit_log(ratelim, approx_time());
+ if (m == NULL)
+ return;
+ va_start(ap, format);
+ logv(severity, domain, log_fn_function_name_, m, format, ap);
+ va_end(ap);
+ tor_free(m);
+}
+void
+log_debug_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
/* For GCC we do this check in the macro. */
- if (PREDICT_LIKELY(LOG_DEBUG > _log_global_min_severity))
+ if (PREDICT_LIKELY(LOG_DEBUG > log_global_min_severity_))
return;
va_start(ap,format);
- logv(LOG_DEBUG, domain, _log_fn_function_name, format, ap);
+ logv(LOG_DEBUG, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_info(log_domain_mask_t domain, const char *format, ...)
+log_info_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_INFO > _log_global_min_severity)
+ if (LOG_INFO > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_INFO, domain, _log_fn_function_name, format, ap);
+ logv(LOG_INFO, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_notice(log_domain_mask_t domain, const char *format, ...)
+log_notice_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_NOTICE > _log_global_min_severity)
+ if (LOG_NOTICE > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_NOTICE, domain, _log_fn_function_name, format, ap);
+ logv(LOG_NOTICE, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_warn(log_domain_mask_t domain, const char *format, ...)
+log_warn_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_WARN > _log_global_min_severity)
+ if (LOG_WARN > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_WARN, domain, _log_fn_function_name, format, ap);
+ logv(LOG_WARN, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
void
-_log_err(log_domain_mask_t domain, const char *format, ...)
+log_err_(log_domain_mask_t domain, const char *format, ...)
{
va_list ap;
- if (LOG_ERR > _log_global_min_severity)
+ if (LOG_ERR > log_global_min_severity_)
return;
va_start(ap,format);
- logv(LOG_ERR, domain, _log_fn_function_name, format, ap);
+ logv(LOG_ERR, domain, log_fn_function_name_, NULL, format, ap);
va_end(ap);
- _log_fn_function_name = NULL;
+ log_fn_function_name_ = NULL;
}
/** @} */
#endif
@@ -638,7 +823,7 @@ add_stream_log_impl(const log_severity_list_t *severity,
lf->next = logfiles;
logfiles = lf;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
}
/** Add a log handler named <b>name</b> to send all messages in <b>severity</b>
@@ -706,7 +891,7 @@ add_callback_log(const log_severity_list_t *severity, log_callback cb)
LOCK_LOGS();
logfiles = lf;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
return 0;
}
@@ -726,7 +911,7 @@ change_callback_log_severity(int loglevelMin, int loglevelMax,
memcpy(lf->severities, &severities, sizeof(severities));
}
}
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
}
@@ -792,7 +977,7 @@ close_temp_logs(void)
}
}
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
}
@@ -833,14 +1018,16 @@ add_file_log(const log_severity_list_t *severity, const char *filename)
fd = tor_open_cloexec(filename, O_WRONLY|O_CREAT|O_APPEND, 0644);
if (fd<0)
return -1;
- if (tor_fd_seekend(fd)<0)
+ if (tor_fd_seekend(fd)<0) {
+ close(fd);
return -1;
+ }
LOCK_LOGS();
add_stream_log_impl(severity, filename, fd);
logfiles->needs_close = 1;
lf = logfiles;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
if (log_tor_version(lf, 0) < 0) {
delete_log(lf);
@@ -871,7 +1058,7 @@ add_syslog_log(const log_severity_list_t *severity)
LOCK_LOGS();
lf->next = logfiles;
logfiles = lf;
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
return 0;
}
@@ -907,7 +1094,7 @@ log_level_to_string(int level)
static const char *domain_list[] = {
"GENERAL", "CRYPTO", "NET", "CONFIG", "FS", "PROTOCOL", "MM",
"HTTP", "APP", "CONTROL", "CIRC", "REND", "BUG", "DIR", "DIRSERV",
- "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", NULL
+ "OR", "EDGE", "ACCT", "HIST", "HANDSHAKE", "HEARTBEAT", "CHANNEL", NULL
};
/** Return a bitmask for the log domain for which <b>domain</b> is the name,
@@ -1106,42 +1293,7 @@ switch_logs_debug(void)
for (i = LOG_DEBUG; i >= LOG_ERR; --i)
lf->severities->masks[SEVERITY_MASK_IDX(i)] = ~0u;
}
- _log_global_min_severity = get_min_log_level();
+ log_global_min_severity_ = get_min_log_level();
UNLOCK_LOGS();
}
-#if 0
-static void
-dump_log_info(logfile_t *lf)
-{
- const char *tp;
-
- if (lf->filename) {
- printf("=== log into \"%s\" (%s-%s) (%stemporary)\n", lf->filename,
- sev_to_string(lf->min_loglevel),
- sev_to_string(lf->max_loglevel),
- lf->is_temporary?"":"not ");
- } else if (lf->is_syslog) {
- printf("=== syslog (%s-%s) (%stemporary)\n",
- sev_to_string(lf->min_loglevel),
- sev_to_string(lf->max_loglevel),
- lf->is_temporary?"":"not ");
- } else {
- printf("=== log (%s-%s) (%stemporary)\n",
- sev_to_string(lf->min_loglevel),
- sev_to_string(lf->max_loglevel),
- lf->is_temporary?"":"not ");
- }
-}
-
-void
-describe_logs(void)
-{
- logfile_t *lf;
- printf("==== BEGIN LOGS ====\n");
- for (lf = logfiles; lf; lf = lf->next)
- dump_log_info(lf);
- printf("==== END LOGS ====\n");
-}
-#endif
-
diff --git a/src/common/memarea.c b/src/common/memarea.c
index 07bd593cc..bcaea0949 100644
--- a/src/common/memarea.c
+++ b/src/common/memarea.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2008-2012, The Tor Project, Inc. */
+/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/** \file memarea.c
@@ -29,6 +29,13 @@
#error "void* is neither 4 nor 8 bytes long. I don't know how to align stuff."
#endif
+#if defined(__GNUC__) && defined(FLEXIBLE_ARRAY_MEMBER)
+#define USE_ALIGNED_ATTRIBUTE
+#define U_MEM mem
+#else
+#define U_MEM u.mem
+#endif
+
#ifdef USE_SENTINELS
/** Magic value that we stick at the end of a memarea so we can make sure
* there are no run-off-the-end bugs. */
@@ -39,12 +46,12 @@
* end, set those bytes. */
#define SET_SENTINEL(chunk) \
STMT_BEGIN \
- set_uint32( &(chunk)->u.mem[chunk->mem_size], SENTINEL_VAL ); \
+ set_uint32( &(chunk)->U_MEM[chunk->mem_size], SENTINEL_VAL ); \
STMT_END
/** Assert that the sentinel on a memarea is set correctly. */
#define CHECK_SENTINEL(chunk) \
STMT_BEGIN \
- uint32_t sent_val = get_uint32(&(chunk)->u.mem[chunk->mem_size]); \
+ uint32_t sent_val = get_uint32(&(chunk)->U_MEM[chunk->mem_size]); \
tor_assert(sent_val == SENTINEL_VAL); \
STMT_END
#else
@@ -71,19 +78,23 @@ realign_pointer(void *ptr)
typedef struct memarea_chunk_t {
/** Next chunk in this area. Only kept around so we can free it. */
struct memarea_chunk_t *next_chunk;
- size_t mem_size; /**< How much RAM is available in u.mem, total? */
- char *next_mem; /**< Next position in u.mem to allocate data at. If it's
+ size_t mem_size; /**< How much RAM is available in mem, total? */
+ char *next_mem; /**< Next position in mem to allocate data at. If it's
* greater than or equal to mem+mem_size, this chunk is
* full. */
+#ifdef USE_ALIGNED_ATTRIBUTE
+ char mem[FLEXIBLE_ARRAY_MEMBER] __attribute__((aligned(MEMAREA_ALIGN)));
+#else
union {
char mem[1]; /**< Memory space in this chunk. */
- void *_void_for_alignment; /**< Dummy; used to make sure mem is aligned. */
+ void *void_for_alignment_; /**< Dummy; used to make sure mem is aligned. */
} u;
+#endif
} memarea_chunk_t;
/** How many bytes are needed for overhead before we get to the memory part
* of a chunk? */
-#define CHUNK_HEADER_SIZE STRUCT_OFFSET(memarea_chunk_t, u)
+#define CHUNK_HEADER_SIZE STRUCT_OFFSET(memarea_chunk_t, U_MEM)
/** What's the smallest that we'll allocate a chunk? */
#define CHUNK_SIZE 4096
@@ -118,10 +129,10 @@ alloc_chunk(size_t sz, int freelist_ok)
size_t chunk_size = freelist_ok ? CHUNK_SIZE : sz;
memarea_chunk_t *res;
chunk_size += SENTINEL_LEN;
- res = tor_malloc_roundup(&chunk_size);
+ res = tor_malloc(chunk_size);
res->next_chunk = NULL;
res->mem_size = chunk_size - CHUNK_HEADER_SIZE - SENTINEL_LEN;
- res->next_mem = res->u.mem;
+ res->next_mem = res->U_MEM;
tor_assert(res->next_mem+res->mem_size+SENTINEL_LEN ==
((char*)res)+chunk_size);
tor_assert(realign_pointer(res->next_mem) == res->next_mem);
@@ -140,7 +151,7 @@ chunk_free_unchecked(memarea_chunk_t *chunk)
++freelist_len;
chunk->next_chunk = freelist;
freelist = chunk;
- chunk->next_mem = chunk->u.mem;
+ chunk->next_mem = chunk->U_MEM;
} else {
tor_free(chunk);
}
@@ -183,7 +194,7 @@ memarea_clear(memarea_t *area)
}
area->first->next_chunk = NULL;
}
- area->first->next_mem = area->first->u.mem;
+ area->first->next_mem = area->first->U_MEM;
}
/** Remove all unused memarea chunks from the internal freelist. */
@@ -207,7 +218,7 @@ memarea_owns_ptr(const memarea_t *area, const void *p)
memarea_chunk_t *chunk;
const char *ptr = p;
for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
- if (ptr >= chunk->u.mem && ptr < chunk->next_mem)
+ if (ptr >= chunk->U_MEM && ptr < chunk->next_mem)
return 1;
}
return 0;
@@ -226,7 +237,7 @@ memarea_alloc(memarea_t *area, size_t sz)
tor_assert(sz < SIZE_T_CEILING);
if (sz == 0)
sz = 1;
- if (chunk->next_mem+sz > chunk->u.mem+chunk->mem_size) {
+ if (chunk->next_mem+sz > chunk->U_MEM+chunk->mem_size) {
if (sz+CHUNK_HEADER_SIZE >= CHUNK_SIZE) {
/* This allocation is too big. Stick it in a special chunk, and put
* that chunk second in the list. */
@@ -244,8 +255,8 @@ memarea_alloc(memarea_t *area, size_t sz)
result = chunk->next_mem;
chunk->next_mem = chunk->next_mem + sz;
/* Reinstate these if bug 930 ever comes back
- tor_assert(chunk->next_mem >= chunk->u.mem);
- tor_assert(chunk->next_mem <= chunk->u.mem+chunk->mem_size);
+ tor_assert(chunk->next_mem >= chunk->U_MEM);
+ tor_assert(chunk->next_mem <= chunk->U_MEM+chunk->mem_size);
*/
chunk->next_mem = realign_pointer(chunk->next_mem);
return result;
@@ -280,14 +291,11 @@ memarea_strdup(memarea_t *area, const char *s)
char *
memarea_strndup(memarea_t *area, const char *s, size_t n)
{
- size_t ln;
+ size_t ln = 0;
char *result;
- const char *cp, *end = s+n;
tor_assert(n < SIZE_T_CEILING);
- for (cp = s; cp < end && *cp; ++cp)
+ for (ln = 0; ln < n && s[ln]; ++ln)
;
- /* cp now points to s+n, or to the 0 in the string. */
- ln = cp-s;
result = memarea_alloc(area, ln+1);
memcpy(result, s, ln);
result[ln]='\0';
@@ -304,8 +312,8 @@ memarea_get_stats(memarea_t *area, size_t *allocated_out, size_t *used_out)
for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
CHECK_SENTINEL(chunk);
a += CHUNK_HEADER_SIZE + chunk->mem_size;
- tor_assert(chunk->next_mem >= chunk->u.mem);
- u += CHUNK_HEADER_SIZE + (chunk->next_mem - chunk->u.mem);
+ tor_assert(chunk->next_mem >= chunk->U_MEM);
+ u += CHUNK_HEADER_SIZE + (chunk->next_mem - chunk->U_MEM);
}
*allocated_out = a;
*used_out = u;
@@ -320,9 +328,9 @@ memarea_assert_ok(memarea_t *area)
for (chunk = area->first; chunk; chunk = chunk->next_chunk) {
CHECK_SENTINEL(chunk);
- tor_assert(chunk->next_mem >= chunk->u.mem);
+ tor_assert(chunk->next_mem >= chunk->U_MEM);
tor_assert(chunk->next_mem <=
- (char*) realign_pointer(chunk->u.mem+chunk->mem_size));
+ (char*) realign_pointer(chunk->U_MEM+chunk->mem_size));
}
}
diff --git a/src/common/memarea.h b/src/common/memarea.h
index b3c76d8d0..8b88585d3 100644
--- a/src/common/memarea.h
+++ b/src/common/memarea.h
@@ -1,9 +1,9 @@
-/* Copyright (c) 2008-2012, The Tor Project, Inc. */
+/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Tor dependencies */
-#ifndef _TOR_MEMAREA_H
-#define _TOR_MEMAREA_H
+#ifndef TOR_MEMAREA_H
+#define TOR_MEMAREA_H
typedef struct memarea_t memarea_t;
diff --git a/src/common/mempool.c b/src/common/mempool.c
index 637f081c8..438988876 100644
--- a/src/common/mempool.c
+++ b/src/common/mempool.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#if 1
/* Tor dependencies */
@@ -71,7 +71,6 @@
#define ASSERT(x) tor_assert(x)
#undef ALLOC_CAN_RETURN_NULL
#define TOR
-//#define ALLOC_ROUNDUP(p) tor_malloc_roundup(p)
/* End Tor dependencies */
#else
/* If you're not building this as part of Tor, you'll want to define the
@@ -115,7 +114,7 @@ struct mp_allocated_t {
* (Not actual size.) */
char mem[1];
/** An extra element to the union to insure correct alignment. */
- ALIGNMENT_TYPE _dummy;
+ ALIGNMENT_TYPE dummy_;
} u;
};
@@ -166,25 +165,16 @@ static mp_chunk_t *
mp_chunk_new(mp_pool_t *pool)
{
size_t sz = pool->new_chunk_capacity * pool->item_alloc_size;
-#ifdef ALLOC_ROUNDUP
- size_t alloc_size = CHUNK_OVERHEAD + sz;
- mp_chunk_t *chunk = ALLOC_ROUNDUP(&alloc_size);
-#else
mp_chunk_t *chunk = ALLOC(CHUNK_OVERHEAD + sz);
-#endif
+
#ifdef MEMPOOL_STATS
++pool->total_chunks_allocated;
#endif
CHECK_ALLOC(chunk);
memset(chunk, 0, sizeof(mp_chunk_t)); /* Doesn't clear the whole thing. */
chunk->magic = MP_CHUNK_MAGIC;
-#ifdef ALLOC_ROUNDUP
- chunk->mem_size = alloc_size - CHUNK_OVERHEAD;
- chunk->capacity = chunk->mem_size / pool->item_alloc_size;
-#else
chunk->capacity = pool->new_chunk_capacity;
chunk->mem_size = sz;
-#endif
chunk->next_mem = chunk->mem;
chunk->pool = pool;
return chunk;
diff --git a/src/common/mempool.h b/src/common/mempool.h
index d0a7bc2f3..0fc1e4c67 100644
--- a/src/common/mempool.h
+++ b/src/common/mempool.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -6,8 +6,8 @@
* \brief Headers for mempool.c
**/
-#ifndef _TOR_MEMPOOL_H
-#define _TOR_MEMPOOL_H
+#ifndef TOR_MEMPOOL_H
+#define TOR_MEMPOOL_H
/** A memory pool is a context in which a large number of fixed-sized
* objects can be allocated efficiently. See mempool.c for implementation
@@ -22,6 +22,8 @@ void mp_pool_destroy(mp_pool_t *pool);
void mp_pool_assert_ok(mp_pool_t *pool);
void mp_pool_log_status(mp_pool_t *pool, int severity);
+#define MP_POOL_ITEM_OVERHEAD (sizeof(void*))
+
#define MEMPOOL_STATS
#ifdef MEMPOOL_PRIVATE
diff --git a/src/common/procmon.c b/src/common/procmon.c
index 36b1a4855..0a49689e3 100644
--- a/src/common/procmon.c
+++ b/src/common/procmon.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -25,9 +25,21 @@
#ifdef _WIN32
#include <windows.h>
+#endif
-/* Windows does not define pid_t, but _getpid() returns an int. */
+#if (0 == SIZEOF_PID_T) && defined(_WIN32)
+/* Windows does not define pid_t sometimes, but _getpid() returns an int.
+ * Everybody else needs to have a pid_t. */
typedef int pid_t;
+#define PID_T_FORMAT "%d"
+#elif (SIZEOF_PID_T == SIZEOF_INT) || (SIZEOF_PID_T == SIZEOF_SHORT)
+#define PID_T_FORMAT "%d"
+#elif (SIZEOF_PID_T == SIZEOF_LONG)
+#define PID_T_FORMAT "%ld"
+#elif (SIZEOF_PID_T == SIZEOF_INT64_T)
+#define PID_T_FORMAT I64_FORMAT
+#else
+#error Unknown: SIZEOF_PID_T
#endif
/* Define to 1 if process-termination monitors on this OS and Libevent
@@ -204,15 +216,17 @@ tor_process_monitor_new(struct event_base *base,
if (procmon->hproc != NULL) {
procmon->poll_hproc = 1;
- log_info(procmon->log_domain, "Successfully opened handle to process %d; "
+ log_info(procmon->log_domain, "Successfully opened handle to process "
+ PID_T_FORMAT"; "
"monitoring it.",
- (int)(procmon->pid));
+ procmon->pid);
} else {
/* If we couldn't get a handle to the process, we'll try again the
* first time we poll. */
- log_info(procmon->log_domain, "Failed to open handle to process %d; will "
+ log_info(procmon->log_domain, "Failed to open handle to process "
+ PID_T_FORMAT"; will "
"try again later.",
- (int)(procmon->pid));
+ procmon->pid);
}
#endif
@@ -257,7 +271,8 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (!GetExitCodeProcess(procmon->hproc, &exit_code)) {
char *errmsg = format_win32_error(GetLastError());
log_warn(procmon->log_domain, "Error \"%s\" occurred while polling "
- "handle for monitored process %d; assuming it's dead.",
+ "handle for monitored process "PID_T_FORMAT"; assuming "
+ "it's dead.",
errmsg, procmon->pid);
tor_free(errmsg);
its_dead_jim = 1;
@@ -273,7 +288,7 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (procmon->hproc != NULL) {
log_info(procmon->log_domain, "Successfully opened handle to monitored "
- "process %d.",
+ "process "PID_T_FORMAT".",
procmon->pid);
its_dead_jim = 0;
procmon->poll_hproc = 1;
@@ -292,8 +307,8 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
if (!its_dead_jim)
log_info(procmon->log_domain, "Failed to open handle to monitored "
- "process %d, and error code %lu (%s) is not 'invalid "
- "parameter' -- assuming the process is still alive.",
+ "process "PID_T_FORMAT", and error code %lu (%s) is not "
+ "'invalid parameter' -- assuming the process is still alive.",
procmon->pid,
err_code, errmsg);
@@ -306,9 +321,9 @@ tor_process_monitor_poll_cb(evutil_socket_t unused1, short unused2,
its_dead_jim = its_dead_jim && (errno == ESRCH);
#endif
- log(its_dead_jim ? LOG_NOTICE : LOG_INFO,
- procmon->log_domain, "Monitored process %d is %s.",
- (int)procmon->pid,
+ tor_log(its_dead_jim ? LOG_NOTICE : LOG_INFO,
+ procmon->log_domain, "Monitored process "PID_T_FORMAT" is %s.",
+ procmon->pid,
its_dead_jim ? "dead" : "still alive");
if (its_dead_jim) {
diff --git a/src/common/procmon.h b/src/common/procmon.h
index 88d64d6a1..b9388e2e9 100644
--- a/src/common/procmon.h
+++ b/src/common/procmon.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
diff --git a/src/common/sandbox.c b/src/common/sandbox.c
new file mode 100644
index 000000000..4721b8dfc
--- /dev/null
+++ b/src/common/sandbox.c
@@ -0,0 +1,1758 @@
+/* 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 "orconfig.h"
+
+#ifndef _LARGEFILE64_SOURCE
+/**
+ * Temporarily required for O_LARGEFILE flag. Needs to be removed
+ * with the libevent fix.
+ */
+#define _LARGEFILE64_SOURCE
+#endif
+
+/** Malloc mprotect limit in bytes. */
+#define MALLOC_MP_LIM 1048576
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "sandbox.h"
+#include "container.h"
+#include "torlog.h"
+#include "torint.h"
+#include "util.h"
+#include "tor_queue.h"
+
+#define DEBUGGING_CLOSE
+
+#if defined(USE_LIBSECCOMP)
+
+#define _GNU_SOURCE
+
+#include <sys/mman.h>
+#include <sys/syscall.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/epoll.h>
+#include <sys/prctl.h>
+#include <linux/futex.h>
+#include <bits/signum.h>
+
+#include <stdarg.h>
+#include <seccomp.h>
+#include <signal.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <time.h>
+#include <poll.h>
+
+#if defined(HAVE_EXECINFO_H) && defined(HAVE_BACKTRACE) && \
+ defined(HAVE_BACKTRACE_SYMBOLS_FD) && defined(HAVE_SIGACTION)
+#define USE_BACKTRACE
+#define EXPOSE_CLEAN_BACKTRACE
+#include "backtrace.h"
+#endif
+
+#ifdef USE_BACKTRACE
+#include <execinfo.h>
+#endif
+
+/**
+ * Linux 32 bit definitions
+ */
+#if defined(__i386__)
+
+#define REG_SYSCALL REG_EAX
+#define M_SYSCALL gregs[REG_SYSCALL]
+
+/**
+ * Linux 64 bit definitions
+ */
+#elif defined(__x86_64__)
+
+#define REG_SYSCALL REG_RAX
+#define M_SYSCALL gregs[REG_SYSCALL]
+
+#elif defined(__arm__)
+
+#define M_SYSCALL arm_r7
+
+#endif
+
+/**Determines if at least one sandbox is active.*/
+static int sandbox_active = 0;
+/** Holds the parameter list configuration for the sandbox.*/
+static sandbox_cfg_t *filter_dynamic = NULL;
+/** Holds a list of pre-recorded results from getaddrinfo().*/
+static sb_addr_info_t *sb_addr_info = NULL;
+
+#undef SCMP_CMP
+#define SCMP_CMP(a,b,c) ((struct scmp_arg_cmp){(a),(b),(c),0})
+#define SCMP_CMP4(a,b,c,d) ((struct scmp_arg_cmp){(a),(b),(c),(d)})
+/* We use a wrapper here because these masked comparisons seem to be pretty
+ * verbose. Also, it's important to cast to scmp_datum_t before negating the
+ * mask, since otherwise the negation might get applied to a 32 bit value, and
+ * the high bits of the value might get masked out improperly. */
+#define SCMP_CMP_MASKED(a,b,c) \
+ SCMP_CMP4((a), SCMP_CMP_MASKED_EQ, ~(scmp_datum_t)(b), (c))
+
+/** Variable used for storing all syscall numbers that will be allowed with the
+ * stage 1 general Tor sandbox.
+ */
+static int filter_nopar_gen[] = {
+ SCMP_SYS(access),
+ SCMP_SYS(brk),
+ SCMP_SYS(clock_gettime),
+ SCMP_SYS(close),
+ SCMP_SYS(clone),
+ SCMP_SYS(epoll_create),
+ SCMP_SYS(epoll_wait),
+ SCMP_SYS(fcntl),
+ SCMP_SYS(fstat),
+#ifdef __NR_fstat64
+ SCMP_SYS(fstat64),
+#endif
+ 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
+#ifdef __NR_getrlimit
+ SCMP_SYS(getrlimit),
+#endif
+ SCMP_SYS(gettimeofday),
+ SCMP_SYS(gettid),
+ 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),
+#ifdef __NR_mmap
+ /* XXXX restrict this in the same ways as mmap2 */
+ SCMP_SYS(mmap),
+#endif
+ SCMP_SYS(munmap),
+ SCMP_SYS(read),
+ SCMP_SYS(rt_sigreturn),
+ SCMP_SYS(sched_getaffinity),
+ SCMP_SYS(set_robust_list),
+#ifdef __NR_sigreturn
+ SCMP_SYS(sigreturn),
+#endif
+ SCMP_SYS(stat),
+ SCMP_SYS(uname),
+ SCMP_SYS(write),
+ SCMP_SYS(writev),
+ SCMP_SYS(exit_group),
+ SCMP_SYS(exit),
+
+ SCMP_SYS(madvise),
+#ifdef __NR_stat64
+ // getaddrinfo uses this..
+ SCMP_SYS(stat64),
+#endif
+
+ /*
+ * These socket syscalls are not required on x86_64 and not supported with
+ * some libseccomp versions (eg: 1.0.1)
+ */
+#if defined(__i386)
+ SCMP_SYS(recv),
+ SCMP_SYS(send),
+#endif
+
+ // socket syscalls
+ SCMP_SYS(bind),
+ SCMP_SYS(listen),
+ SCMP_SYS(connect),
+ SCMP_SYS(getsockname),
+ SCMP_SYS(recvmsg),
+ SCMP_SYS(recvfrom),
+ SCMP_SYS(sendto),
+ SCMP_SYS(unlink)
+};
+
+/* These macros help avoid the error where the number of filters we add on a
+ * single rule don't match the arg_cnt param. */
+#define seccomp_rule_add_0(ctx,act,call) \
+ seccomp_rule_add((ctx),(act),(call),0)
+#define seccomp_rule_add_1(ctx,act,call,f1) \
+ seccomp_rule_add((ctx),(act),(call),1,(f1))
+#define seccomp_rule_add_2(ctx,act,call,f1,f2) \
+ seccomp_rule_add((ctx),(act),(call),2,(f1),(f2))
+#define seccomp_rule_add_3(ctx,act,call,f1,f2,f3) \
+ seccomp_rule_add((ctx),(act),(call),3,(f1),(f2),(f3))
+#define seccomp_rule_add_4(ctx,act,call,f1,f2,f3,f4) \
+ seccomp_rule_add((ctx),(act),(call),4,(f1),(f2),(f3),(f4))
+
+/**
+ * Function responsible for setting up the rt_sigaction syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_rt_sigaction(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ unsigned i;
+ int rc;
+ int param[] = { SIGINT, SIGTERM, SIGPIPE, SIGUSR1, SIGUSR2, SIGHUP, SIGCHLD,
+#ifdef SIGXFSZ
+ SIGXFSZ
+#endif
+ };
+ (void) filter;
+
+ for (i = 0; i < ARRAY_LENGTH(param); i++) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigaction),
+ SCMP_CMP(0, SCMP_CMP_EQ, param[i]));
+ if (rc)
+ break;
+ }
+
+ return rc;
+}
+
+#if 0
+/**
+ * Function responsible for setting up the execve syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_execve(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(execve)) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(execve),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add execve syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Function responsible for setting up the time syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_time(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ (void) filter;
+#ifdef __NR_time
+ return seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(time),
+ SCMP_CMP(0, SCMP_CMP_EQ, 0));
+#else
+ return 0;
+#endif
+}
+
+/**
+ * Function responsible for setting up the accept4 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_accept4(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void)filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socketcall),
+ SCMP_CMP(0, SCMP_CMP_EQ, 18));
+ if (rc) {
+ return rc;
+ }
+#endif
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(accept4),
+ SCMP_CMP_MASKED(3, SOCK_CLOEXEC|SOCK_NONBLOCK, 0));
+ if (rc) {
+ return rc;
+ }
+
+ return 0;
+}
+
+#ifdef __NR_mmap2
+/**
+ * Function responsible for setting up the mmap2 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_mmap2(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void)filter;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_NONE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_ANONYMOUS));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ,MAP_PRIVATE|MAP_ANONYMOUS|MAP_STACK));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS));
+ if (rc) {
+ return rc;
+ }
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mmap2),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_EXEC),
+ SCMP_CMP(3, SCMP_CMP_EQ, MAP_PRIVATE|MAP_DENYWRITE));
+ if (rc) {
+ return rc;
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Function responsible for setting up the open syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_open(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(open)) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(open),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add open syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ERRNO(EACCES), SCMP_SYS(open),
+ SCMP_CMP_MASKED(1, O_CLOEXEC|O_NONBLOCK|O_NOCTTY, O_RDONLY));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add open syscall, received libseccomp "
+ "error %d", rc);
+ return rc;
+ }
+
+ return 0;
+}
+
+static int
+sb__sysctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ (void) filter;
+ (void) ctx;
+
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ERRNO(EPERM), SCMP_SYS(_sysctl));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add _sysctl syscall, "
+ "received libseccomp error %d", rc);
+ return rc;
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the rename syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_rename(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 &&
+ param->syscall == SCMP_SYS(rename)) {
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rename),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value),
+ SCMP_CMP(1, SCMP_CMP_EQ, param->value2));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add rename syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the openat syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_openat(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && param->syscall
+ == SCMP_SYS(openat)) {
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(openat),
+ SCMP_CMP(0, SCMP_CMP_EQ, AT_FDCWD),
+ SCMP_CMP(1, SCMP_CMP_EQ, param->value),
+ SCMP_CMP(2, SCMP_CMP_EQ, O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|
+ O_CLOEXEC));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add openat syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the socket syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_socket(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ int i;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_FILE),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_STREAM));
+ if (rc)
+ return rc;
+
+ for (i = 0; i < 2; ++i) {
+ const int pf = i ? PF_INET : PF_INET6;
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, pf),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_STREAM),
+ SCMP_CMP(2, SCMP_CMP_EQ, IPPROTO_TCP));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, pf),
+ SCMP_CMP_MASKED(1, SOCK_CLOEXEC|SOCK_NONBLOCK, SOCK_DGRAM),
+ SCMP_CMP(2, SCMP_CMP_EQ, IPPROTO_IP));
+ if (rc)
+ return rc;
+ }
+
+ rc = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socket),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_NETLINK),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOCK_RAW),
+ SCMP_CMP(2, SCMP_CMP_EQ, 0));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the socketpair syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_socketpair(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socketpair));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(socketpair),
+ SCMP_CMP(0, SCMP_CMP_EQ, PF_FILE),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOCK_STREAM|SOCK_CLOEXEC));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the setsockopt syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_setsockopt(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_REUSEADDR));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_SNDBUF));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_RCVBUF));
+ if (rc)
+ return rc;
+
+#ifdef IP_TRANSPARENT
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(setsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_IP),
+ SCMP_CMP(2, SCMP_CMP_EQ, IP_TRANSPARENT));
+ if (rc)
+ return rc;
+#endif
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the getsockopt syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_getsockopt(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+#ifdef __i386__
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt));
+ if (rc)
+ return rc;
+#endif
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(getsockopt),
+ SCMP_CMP(1, SCMP_CMP_EQ, SOL_SOCKET),
+ SCMP_CMP(2, SCMP_CMP_EQ, SO_ERROR));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+#ifdef __NR_fcntl64
+/**
+ * Function responsible for setting up the fcntl64 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_fcntl64(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_GETFL));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_SETFL),
+ SCMP_CMP(2, SCMP_CMP_EQ, O_RDWR|O_NONBLOCK));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_GETFD));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(fcntl64),
+ SCMP_CMP(1, SCMP_CMP_EQ, F_SETFD),
+ SCMP_CMP(2, SCMP_CMP_EQ, FD_CLOEXEC));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+#endif
+
+/**
+ * Function responsible for setting up the epoll_ctl syscall for
+ * the seccomp filter sandbox.
+ *
+ * Note: basically allows everything but will keep for now..
+ */
+static int
+sb_epoll_ctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl),
+ SCMP_CMP(1, SCMP_CMP_EQ, EPOLL_CTL_ADD));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl),
+ SCMP_CMP(1, SCMP_CMP_EQ, EPOLL_CTL_MOD));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(epoll_ctl),
+ SCMP_CMP(1, SCMP_CMP_EQ, EPOLL_CTL_DEL));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the fcntl64 syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: if multiple filters need to be added, the PR_SECCOMP parameter needs
+ * to be whitelisted in this function.
+ */
+static int
+sb_prctl(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(prctl),
+ SCMP_CMP(0, SCMP_CMP_EQ, PR_SET_DUMPABLE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the fcntl64 syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: does not NEED to be here.. currently only occurs before filter; will
+ * keep just in case for the future.
+ */
+static int
+sb_mprotect(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_NONE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the rt_sigprocmask syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_rt_sigprocmask(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask),
+ SCMP_CMP(0, SCMP_CMP_EQ, SIG_UNBLOCK));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(rt_sigprocmask),
+ SCMP_CMP(0, SCMP_CMP_EQ, SIG_SETMASK));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the flock syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: does not need to be here, occurs before filter is applied.
+ */
+static int
+sb_flock(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(flock),
+ SCMP_CMP(1, SCMP_CMP_EQ, LOCK_EX|LOCK_NB));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(flock),
+ SCMP_CMP(1, SCMP_CMP_EQ, LOCK_UN));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the futex syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_futex(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ // can remove
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex),
+ SCMP_CMP(1, SCMP_CMP_EQ,
+ FUTEX_WAIT_BITSET_PRIVATE|FUTEX_CLOCK_REALTIME));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex),
+ SCMP_CMP(1, SCMP_CMP_EQ, FUTEX_WAKE_PRIVATE));
+ if (rc)
+ return rc;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(futex),
+ SCMP_CMP(1, SCMP_CMP_EQ, FUTEX_WAIT_PRIVATE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the mremap syscall for
+ * the seccomp filter sandbox.
+ *
+ * NOTE: so far only occurs before filter is applied.
+ */
+static int
+sb_mremap(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mremap),
+ SCMP_CMP(3, SCMP_CMP_EQ, MREMAP_MAYMOVE));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+/**
+ * Function responsible for setting up the poll syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_poll(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ (void) filter;
+
+ rc = seccomp_rule_add_2(ctx, SCMP_ACT_ALLOW, SCMP_SYS(poll),
+ SCMP_CMP(1, SCMP_CMP_EQ, 1),
+ SCMP_CMP(2, SCMP_CMP_EQ, 10));
+ if (rc)
+ return rc;
+
+ return 0;
+}
+
+#ifdef __NR_stat64
+/**
+ * Function responsible for setting up the stat64 syscall for
+ * the seccomp filter sandbox.
+ */
+static int
+sb_stat64(scmp_filter_ctx ctx, sandbox_cfg_t *filter)
+{
+ int rc = 0;
+ sandbox_cfg_t *elem = NULL;
+
+ // for each dynamic parameter filters
+ for (elem = filter; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param != NULL && param->prot == 1 && (param->syscall == SCMP_SYS(open)
+ || param->syscall == SCMP_SYS(stat64))) {
+ rc = seccomp_rule_add_1(ctx, SCMP_ACT_ALLOW, SCMP_SYS(stat64),
+ SCMP_CMP(0, SCMP_CMP_EQ, param->value));
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add open syscall, received "
+ "libseccomp error %d", rc);
+ return rc;
+ }
+ }
+ }
+
+ return 0;
+}
+#endif
+
+/**
+ * Array of function pointers responsible for filtering different syscalls at
+ * a parameter level.
+ */
+static sandbox_filter_func_t filter_func[] = {
+ sb_rt_sigaction,
+ sb_rt_sigprocmask,
+#if 0
+ sb_execve,
+#endif
+ sb_time,
+ sb_accept4,
+#ifdef __NR_mmap2
+ sb_mmap2,
+#endif
+ sb_open,
+ sb_openat,
+ sb__sysctl,
+ sb_rename,
+#ifdef __NR_fcntl64
+ sb_fcntl64,
+#endif
+ sb_epoll_ctl,
+ sb_prctl,
+ sb_mprotect,
+ sb_flock,
+ sb_futex,
+ sb_mremap,
+ sb_poll,
+#ifdef __NR_stat64
+ sb_stat64,
+#endif
+
+ sb_socket,
+ sb_setsockopt,
+ sb_getsockopt,
+ sb_socketpair
+};
+
+const char *
+sandbox_intern_string(const char *str)
+{
+ sandbox_cfg_t *elem;
+
+ if (str == NULL)
+ return NULL;
+
+ for (elem = filter_dynamic; elem != NULL; elem = elem->next) {
+ smp_param_t *param = elem->param;
+
+ if (param->prot) {
+ if (!strcmp(str, (char*)(param->value))) {
+ return (char*)param->value;
+ }
+ if (param->value2 && !strcmp(str, (char*)param->value2)) {
+ return (char*)param->value2;
+ }
+ }
+ }
+
+ if (sandbox_active)
+ log_warn(LD_BUG, "No interned sandbox parameter found for %s", str);
+ return str;
+}
+
+/** DOCDOC */
+static int
+prot_strings_helper(strmap_t *locations,
+ char **pr_mem_next_p,
+ size_t *pr_mem_left_p,
+ intptr_t *value_p)
+{
+ char *param_val;
+ size_t param_size;
+ void *location;
+
+ if (*value_p == 0)
+ return 0;
+
+ param_val = (char*) *value_p;
+ param_size = strlen(param_val) + 1;
+ location = strmap_get(locations, param_val);
+
+ if (location) {
+ // We already interned this string.
+ tor_free(param_val);
+ *value_p = (intptr_t) location;
+ return 0;
+ } else if (*pr_mem_left_p >= param_size) {
+ // copy to protected
+ location = *pr_mem_next_p;
+ memcpy(location, param_val, param_size);
+
+ // re-point el parameter to protected
+ tor_free(param_val);
+ *value_p = (intptr_t) location;
+
+ strmap_set(locations, location, location); /* good real estate advice */
+
+ // move next available protected memory
+ *pr_mem_next_p += param_size;
+ *pr_mem_left_p -= param_size;
+ return 0;
+ } else {
+ log_err(LD_BUG,"(Sandbox) insufficient protected memory!");
+ return -1;
+ }
+}
+
+/**
+ * Protects all the strings in the sandbox's parameter list configuration. It
+ * works by calculating the total amount of memory required by the parameter
+ * list, allocating the memory using mmap, and protecting it from writes with
+ * mprotect().
+ */
+static int
+prot_strings(scmp_filter_ctx ctx, sandbox_cfg_t* cfg)
+{
+ int ret = 0;
+ size_t pr_mem_size = 0, pr_mem_left = 0;
+ char *pr_mem_next = NULL, *pr_mem_base;
+ sandbox_cfg_t *el = NULL;
+ strmap_t *locations = NULL;
+
+ // get total number of bytes required to mmap. (Overestimate.)
+ for (el = cfg; el != NULL; el = el->next) {
+ pr_mem_size += strlen((char*) el->param->value) + 1;
+ if (el->param->value2)
+ pr_mem_size += strlen((char*) el->param->value2) + 1;
+ }
+
+ // allocate protected memory with MALLOC_MP_LIM canary
+ pr_mem_base = (char*) mmap(NULL, MALLOC_MP_LIM + pr_mem_size,
+ PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
+ if (pr_mem_base == MAP_FAILED) {
+ log_err(LD_BUG,"(Sandbox) failed allocate protected memory! mmap: %s",
+ strerror(errno));
+ ret = -1;
+ goto out;
+ }
+
+ pr_mem_next = pr_mem_base + MALLOC_MP_LIM;
+ pr_mem_left = pr_mem_size;
+
+ locations = strmap_new();
+
+ // change el value pointer to protected
+ for (el = cfg; el != NULL; el = el->next) {
+ if (prot_strings_helper(locations, &pr_mem_next, &pr_mem_left,
+ &el->param->value) < 0) {
+ ret = -2;
+ goto out;
+ }
+ if (prot_strings_helper(locations, &pr_mem_next, &pr_mem_left,
+ &el->param->value2) < 0) {
+ ret = -2;
+ goto out;
+ }
+ el->param->prot = 1;
+ }
+
+ // protecting from writes
+ if (mprotect(pr_mem_base, MALLOC_MP_LIM + pr_mem_size, PROT_READ)) {
+ log_err(LD_BUG,"(Sandbox) failed to protect memory! mprotect: %s",
+ strerror(errno));
+ ret = -3;
+ goto out;
+ }
+
+ /*
+ * Setting sandbox restrictions so the string memory cannot be tampered with
+ */
+ // no mremap of the protected base address
+ ret = seccomp_rule_add_1(ctx, SCMP_ACT_KILL, SCMP_SYS(mremap),
+ SCMP_CMP(0, SCMP_CMP_EQ, (intptr_t) pr_mem_base));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) mremap protected memory filter fail!");
+ return ret;
+ }
+
+ // no munmap of the protected base address
+ ret = seccomp_rule_add_1(ctx, SCMP_ACT_KILL, SCMP_SYS(munmap),
+ SCMP_CMP(0, SCMP_CMP_EQ, (intptr_t) pr_mem_base));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) munmap protected memory filter fail!");
+ return ret;
+ }
+
+ /*
+ * Allow mprotect with PROT_READ|PROT_WRITE because openssl uses it, but
+ * never over the memory region used by the protected strings.
+ *
+ * PROT_READ|PROT_WRITE was originally fully allowed in sb_mprotect(), but
+ * had to be removed due to limitation of libseccomp regarding intervals.
+ *
+ * There is a restriction on how much you can mprotect with R|W up to the
+ * size of the canary.
+ */
+ ret = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(0, SCMP_CMP_LT, (intptr_t) pr_mem_base),
+ SCMP_CMP(1, SCMP_CMP_LE, MALLOC_MP_LIM),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) mprotect protected memory filter fail (LT)!");
+ return ret;
+ }
+
+ ret = seccomp_rule_add_3(ctx, SCMP_ACT_ALLOW, SCMP_SYS(mprotect),
+ SCMP_CMP(0, SCMP_CMP_GT, (intptr_t) pr_mem_base + pr_mem_size +
+ MALLOC_MP_LIM),
+ SCMP_CMP(1, SCMP_CMP_LE, MALLOC_MP_LIM),
+ SCMP_CMP(2, SCMP_CMP_EQ, PROT_READ|PROT_WRITE));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) mprotect protected memory filter fail (GT)!");
+ return ret;
+ }
+
+ out:
+ strmap_free(locations, NULL);
+ return ret;
+}
+
+/**
+ * Auxiliary function used in order to allocate a sandbox_cfg_t element and set
+ * it's values according the the parameter list. All elements are initialised
+ * with the 'prot' field set to false, as the pointer is not protected at this
+ * point.
+ */
+static sandbox_cfg_t*
+new_element2(int syscall, intptr_t value, intptr_t value2)
+{
+ smp_param_t *param = NULL;
+
+ sandbox_cfg_t *elem = tor_malloc_zero(sizeof(sandbox_cfg_t));
+ param = elem->param = tor_malloc_zero(sizeof(smp_param_t));
+
+ param->syscall = syscall;
+ param->value = value;
+ param->value2 = value2;
+ param->prot = 0;
+
+ return elem;
+}
+
+static sandbox_cfg_t*
+new_element(int syscall, intptr_t value)
+{
+ return new_element2(syscall, value, 0);
+}
+
+#ifdef __NR_stat64
+#define SCMP_stat SCMP_SYS(stat64)
+#else
+#define SCMP_stat SCMP_SYS(stat)
+#endif
+
+int
+sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_stat, (intptr_t)(void*) file);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+ rc = sandbox_cfg_allow_stat_filename(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_stat_filename_array fail");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+
+int
+sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_SYS(open), (intptr_t)(void *) file);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element2(SCMP_SYS(rename),
+ (intptr_t)(void *) file1,
+ (intptr_t)(void *) file2);
+
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+ rc = sandbox_cfg_allow_open_filename(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_open_filename_array fail");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_SYS(openat), (intptr_t)(void *) file);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+ rc = sandbox_cfg_allow_openat_filename(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_openat_filename_array fail");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+
+#if 0
+int
+sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ elem = new_element(SCMP_SYS(execve), (intptr_t)(void *) com);
+ if (!elem) {
+ log_err(LD_BUG,"(Sandbox) failed to register parameter!");
+ return -1;
+ }
+
+ elem->next = *cfg;
+ *cfg = elem;
+
+ return 0;
+}
+
+int
+sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...)
+{
+ int rc = 0;
+ char *fn = NULL;
+
+ va_list ap;
+ va_start(ap, cfg);
+
+ while ((fn = va_arg(ap, char*)) != NULL) {
+
+ rc = sandbox_cfg_allow_execve(cfg, fn);
+ if (rc) {
+ log_err(LD_BUG,"(Sandbox) sandbox_cfg_allow_execve_array failed");
+ goto end;
+ }
+ }
+
+ end:
+ va_end(ap);
+ return 0;
+}
+#endif
+
+int
+sandbox_getaddrinfo(const char *name, const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res)
+{
+ sb_addr_info_t *el;
+
+ if (servname != NULL)
+ return -1;
+
+ *res = NULL;
+
+ for (el = sb_addr_info; el; el = el->next) {
+ if (!strcmp(el->name, name)) {
+ *res = tor_malloc(sizeof(struct addrinfo));
+
+ memcpy(*res, el->info, sizeof(struct addrinfo));
+ /* XXXX What if there are multiple items in the list? */
+ return 0;
+ }
+ }
+
+ if (!sandbox_active) {
+ if (getaddrinfo(name, NULL, hints, res)) {
+ log_err(LD_BUG,"(Sandbox) getaddrinfo failed!");
+ return -1;
+ }
+
+ return 0;
+ }
+
+ // getting here means something went wrong
+ log_err(LD_BUG,"(Sandbox) failed to get address %s!", name);
+ if (*res) {
+ tor_free(*res);
+ res = NULL;
+ }
+ return -1;
+}
+
+int
+sandbox_add_addrinfo(const char* name)
+{
+ int ret;
+ struct addrinfo hints;
+ sb_addr_info_t *el = NULL;
+
+ el = tor_malloc(sizeof(sb_addr_info_t));
+
+ memset(&hints, 0, sizeof(hints));
+ hints.ai_family = AF_INET;
+ hints.ai_socktype = SOCK_STREAM;
+
+ ret = getaddrinfo(name, NULL, &hints, &(el->info));
+ if (ret) {
+ log_err(LD_BUG,"(Sandbox) failed to getaddrinfo");
+ ret = -2;
+ tor_free(el);
+ goto out;
+ }
+
+ el->name = tor_strdup(name);
+ el->next = sb_addr_info;
+ sb_addr_info = el;
+
+ out:
+ return ret;
+}
+
+/**
+ * Function responsible for going through the parameter syscall filters and
+ * call each function pointer in the list.
+ */
+static int
+add_param_filter(scmp_filter_ctx ctx, sandbox_cfg_t* cfg)
+{
+ unsigned i;
+ int rc = 0;
+
+ // function pointer
+ for (i = 0; i < ARRAY_LENGTH(filter_func); i++) {
+ if ((filter_func[i])(ctx, cfg)) {
+ log_err(LD_BUG,"(Sandbox) failed to add syscall %d, received libseccomp "
+ "error %d", i, rc);
+ return rc;
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Function responsible of loading the libseccomp syscall filters which do not
+ * have parameter filtering.
+ */
+static int
+add_noparam_filter(scmp_filter_ctx ctx)
+{
+ unsigned i;
+ int rc = 0;
+
+ // add general filters
+ for (i = 0; i < ARRAY_LENGTH(filter_nopar_gen); i++) {
+ rc = seccomp_rule_add_0(ctx, SCMP_ACT_ALLOW, filter_nopar_gen[i]);
+ if (rc != 0) {
+ log_err(LD_BUG,"(Sandbox) failed to add syscall index %d (NR=%d), "
+ "received libseccomp error %d", i, filter_nopar_gen[i], rc);
+ return rc;
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * 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_syscall_filter(sandbox_cfg_t* cfg)
+{
+ int rc = 0;
+ 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;
+ }
+
+ // protectign sandbox parameter strings
+ if ((rc = prot_strings(ctx, cfg))) {
+ goto end;
+ }
+
+ // add parameter filters
+ if ((rc = add_param_filter(ctx, cfg))) {
+ log_err(LD_BUG, "(Sandbox) failed to add param filters!");
+ goto end;
+ }
+
+ // adding filters with no parameters
+ if ((rc = add_noparam_filter(ctx))) {
+ log_err(LD_BUG, "(Sandbox) failed to add param filters!");
+ goto end;
+ }
+
+ // loading the seccomp2 filter
+ if ((rc = seccomp_load(ctx))) {
+ log_err(LD_BUG, "(Sandbox) failed to load: %d (%s)!", rc,
+ strerror(-rc));
+ goto end;
+ }
+
+ // marking the sandbox as active
+ sandbox_active = 1;
+
+ end:
+ seccomp_release(ctx);
+ return (rc < 0 ? -rc : rc);
+}
+
+#include "linux_syscalls.inc"
+static const char *
+get_syscall_name(int syscall_num)
+{
+ int i;
+ for (i = 0; SYSCALLS_BY_NUMBER[i].syscall_name; ++i) {
+ if (SYSCALLS_BY_NUMBER[i].syscall_num == syscall_num)
+ return SYSCALLS_BY_NUMBER[i].syscall_name;
+ }
+
+ {
+ static char syscall_name_buf[64];
+ format_dec_number_sigsafe(syscall_num,
+ syscall_name_buf, sizeof(syscall_name_buf));
+ return syscall_name_buf;
+ }
+}
+
+#ifdef USE_BACKTRACE
+#define MAX_DEPTH 256
+static void *syscall_cb_buf[MAX_DEPTH];
+#endif
+
+/**
+ * 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);
+ const char *syscall_name;
+ int syscall;
+#ifdef USE_BACKTRACE
+ int depth;
+ int n_fds, i;
+ const int *fds = NULL;
+#endif
+
+ (void) nr;
+
+ if (info->si_code != SYS_SECCOMP)
+ return;
+
+ if (!ctx)
+ return;
+
+ syscall = (int) ctx->uc_mcontext.M_SYSCALL;
+
+#ifdef USE_BACKTRACE
+ depth = backtrace(syscall_cb_buf, MAX_DEPTH);
+ /* Clean up the top stack frame so we get the real function
+ * name for the most recently failing function. */
+ clean_backtrace(syscall_cb_buf, depth, ctx);
+#endif
+
+ syscall_name = get_syscall_name(syscall);
+
+ tor_log_err_sigsafe("(Sandbox) Caught a bad syscall attempt (syscall ",
+ syscall_name,
+ ")\n",
+ NULL);
+
+#ifdef USE_BACKTRACE
+ n_fds = tor_log_get_sigsafe_err_fds(&fds);
+ for (i=0; i < n_fds; ++i)
+ backtrace_symbols_fd(syscall_cb_buf, depth, fds[i]);
+#endif
+
+#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;
+}
+
+/**
+ * Function responsible of registering the sandbox_cfg_t list of parameter
+ * syscall filters to the existing parameter list. This is used for incipient
+ * multiple-sandbox support.
+ */
+static int
+register_cfg(sandbox_cfg_t* cfg)
+{
+ sandbox_cfg_t *elem = NULL;
+
+ if (filter_dynamic == NULL) {
+ filter_dynamic = cfg;
+ return 0;
+ }
+
+ for (elem = filter_dynamic; elem->next != NULL; elem = elem->next)
+ ;
+
+ elem->next = cfg;
+
+ 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(sandbox_cfg_t* cfg)
+{
+ if (install_sigsys_debugging())
+ return -1;
+
+ if (install_syscall_filter(cfg))
+ return -2;
+
+ if (register_cfg(cfg))
+ return -3;
+
+ return 0;
+}
+
+int
+sandbox_is_active(void)
+{
+ return sandbox_active != 0;
+}
+#endif // USE_LIBSECCOMP
+
+sandbox_cfg_t*
+sandbox_cfg_new(void)
+{
+ return NULL;
+}
+
+int
+sandbox_init(sandbox_cfg_t *cfg)
+{
+#if defined(USE_LIBSECCOMP)
+ return initialise_libseccomp_sandbox(cfg);
+
+#elif defined(__linux__)
+ (void)cfg;
+ log_warn(LD_GENERAL,
+ "This version of Tor was built without support for sandboxing. To "
+ "build with support for sandboxing on Linux, you must have "
+ "libseccomp and its necessary header files (e.g. seccomp.h).");
+ return 0;
+
+#else
+ (void)cfg;
+ log_warn(LD_GENERAL,
+ "Currently, sandboxing is only implemented on Linux. The feature "
+ "is disabled on your platform.");
+ return 0;
+#endif
+}
+
+#ifndef USE_LIBSECCOMP
+int
+sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file)
+{
+ (void)cfg; (void)file;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ (void)cfg; (void)file;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+
+#if 0
+int
+sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com)
+{
+ (void)cfg; (void)com;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+#endif
+
+int
+sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file)
+{
+ (void)cfg; (void)file;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...)
+{
+ (void)cfg;
+ return 0;
+}
+
+int
+sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2)
+{
+ (void)cfg; (void)file1; (void)file2;
+ return 0;
+}
+
+int
+sandbox_is_active(void)
+{
+ return 0;
+}
+#endif
+
diff --git a/src/common/sandbox.h b/src/common/sandbox.h
new file mode 100644
index 000000000..c3c676663
--- /dev/null
+++ b/src/common/sandbox.h
@@ -0,0 +1,222 @@
+/* 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_
+
+#include "orconfig.h"
+#include "torint.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
+
+#if defined(HAVE_SECCOMP_H) && defined(__linux__)
+#define USE_LIBSECCOMP
+#endif
+
+struct sandbox_cfg_elem;
+
+/** Typedef to structure used to manage a sandbox configuration. */
+typedef struct sandbox_cfg_elem sandbox_cfg_t;
+
+/**
+ * Linux definitions
+ */
+#ifdef USE_LIBSECCOMP
+
+#ifndef __USE_GNU
+#define __USE_GNU
+#endif
+#include <sys/ucontext.h>
+#include <seccomp.h>
+#include <netdb.h>
+
+#define PARAM_PTR 0
+#define PARAM_NUM 1
+
+/**
+ * Enum used to manage the type of the implementation for general purpose.
+ */
+typedef enum {
+ /** Libseccomp implementation based on seccomp2*/
+ LIBSECCOMP2 = 0
+} SB_IMPL;
+
+/**
+ * Configuration parameter structure associated with the LIBSECCOMP2
+ * implementation.
+ */
+typedef struct smp_param {
+ /** syscall associated with parameter. */
+ int syscall;
+
+ /** parameter value. */
+ intptr_t value;
+ /** parameter value, second argument. */
+ intptr_t value2;
+
+ /** parameter flag (0 = not protected, 1 = protected). */
+ int prot;
+} smp_param_t;
+
+/**
+ * Structure used to manage a sandbox configuration.
+ *
+ * It is implemented as a linked list of parameters. Currently only controls
+ * parameters for open, openat, execve, stat64.
+ */
+struct sandbox_cfg_elem {
+ /** Sandbox implementation which dictates the parameter type. */
+ SB_IMPL implem;
+
+ /** Configuration parameter. */
+ smp_param_t *param;
+
+ /** Next element of the configuration*/
+ struct sandbox_cfg_elem *next;
+};
+
+/**
+ * Structure used for keeping a linked list of getaddrinfo pre-recorded
+ * results.
+ */
+struct sb_addr_info_el {
+ /** Name of the address info result. */
+ char *name;
+ /** Pre-recorded getaddrinfo result. */
+ struct addrinfo *info;
+ /** Next element in the list. */
+ struct sb_addr_info_el *next;
+};
+/** Typedef to structure used to manage an addrinfo list. */
+typedef struct sb_addr_info_el sb_addr_info_t;
+
+/** Function pointer defining the prototype of a filter function.*/
+typedef int (*sandbox_filter_func_t)(scmp_filter_ctx ctx,
+ sandbox_cfg_t *filter);
+
+/** Type that will be used in step 3 in order to manage multiple sandboxes.*/
+typedef struct {
+ /** function pointers associated with the filter */
+ sandbox_filter_func_t *filter_func;
+
+ /** filter function pointer parameters */
+ sandbox_cfg_t *filter_dynamic;
+} sandbox_t;
+
+#endif // USE_LIBSECCOMP
+
+#ifdef USE_LIBSECCOMP
+/** Pre-calls getaddrinfo in order to pre-record result. */
+int sandbox_add_addrinfo(const char *addr);
+
+struct addrinfo;
+/** Replacement for getaddrinfo(), using pre-recorded results. */
+int sandbox_getaddrinfo(const char *name, const char *servname,
+ const struct addrinfo *hints,
+ struct addrinfo **res);
+#else
+#define sandbox_getaddrinfo(name, servname, hints, res) \
+ getaddrinfo((name),(servname), (hints),(res))
+#define sandbox_add_addrinfo(name) \
+ ((void)(name))
+#endif
+
+#ifdef USE_LIBSECCOMP
+/** Returns a registered protected string used with the sandbox, given that
+ * it matches the parameter.
+ */
+const char* sandbox_intern_string(const char *param);
+#else
+#define sandbox_intern_string(s) (s)
+#endif
+
+/** Creates an empty sandbox configuration file.*/
+sandbox_cfg_t * sandbox_cfg_new(void);
+
+/**
+ * Function used to add a open allowed filename to a supplied configuration.
+ * The (char*) specifies the path to the allowed file; we take ownership
+ * of the pointer.
+ */
+int sandbox_cfg_allow_open_filename(sandbox_cfg_t **cfg, char *file);
+
+/**DOCDOC*/
+int sandbox_cfg_allow_rename(sandbox_cfg_t **cfg, char *file1, char *file2);
+
+/** Function used to add a series of open allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... a list of stealable pointers to permitted files. The last
+ * one must be NULL.
+*/
+int sandbox_cfg_allow_open_filename_array(sandbox_cfg_t **cfg, ...);
+
+/**
+ * Function used to add a openat allowed filename to a supplied configuration.
+ * The (char*) specifies the path to the allowed file; we steal the pointer to
+ * that file.
+ */
+int sandbox_cfg_allow_openat_filename(sandbox_cfg_t **cfg, char *file);
+
+/** Function used to add a series of openat allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... a list of stealable pointers to permitted files. The last
+ * one must be NULL.
+ */
+int sandbox_cfg_allow_openat_filename_array(sandbox_cfg_t **cfg, ...);
+
+#if 0
+/**
+ * Function used to add a execve allowed filename to a supplied configuration.
+ * The (char*) specifies the path to the allowed file; that pointer is stolen.
+ */
+int sandbox_cfg_allow_execve(sandbox_cfg_t **cfg, const char *com);
+
+/** Function used to add a series of execve allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... an array of stealable pointers to permitted files. The last
+ * one must be NULL.
+ */
+int sandbox_cfg_allow_execve_array(sandbox_cfg_t **cfg, ...);
+#endif
+
+/**
+ * Function used to add a stat/stat64 allowed filename to a configuration.
+ * The (char*) specifies the path to the allowed file; that pointer is stolen.
+ */
+int sandbox_cfg_allow_stat_filename(sandbox_cfg_t **cfg, char *file);
+
+/** Function used to add a series of stat64 allowed filenames to a supplied
+ * configuration.
+ * @param cfg sandbox configuration.
+ * @param ... an array of stealable pointers to permitted files. The last
+ * one must be NULL.
+ */
+int sandbox_cfg_allow_stat_filename_array(sandbox_cfg_t **cfg, ...);
+
+/** Function used to initialise a sandbox configuration.*/
+int sandbox_init(sandbox_cfg_t* cfg);
+
+/** Return true iff the sandbox is turned on. */
+int sandbox_is_active(void);
+
+#endif /* SANDBOX_H_ */
+
diff --git a/src/common/sha256.c b/src/common/sha256.c
deleted file mode 100644
index 813c68d2a..000000000
--- a/src/common/sha256.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
-/* See LICENSE for licensing information */
-/* This SHA256 implementation is adapted from the public domain one in
- LibTomCrypt, version 1.6. Tor uses it on platforms where OpenSSL doesn't
- have a SHA256. */
-
-
-typedef struct sha256_state {
- uint64_t length;
- uint32_t state[8], curlen;
- unsigned char buf[64];
-} sha256_state;
-
-#define CRYPT_OK 0
-#define CRYPT_NOP -1
-#define CRYPT_INVALID_ARG -2
-
-#define LOAD32H(x,y) STMT_BEGIN x = ntohl(get_uint32((const char*)y)); STMT_END
-#define STORE32H(x,y) STMT_BEGIN set_uint32((char*)y, htonl(x)); STMT_END
-#define STORE64H(x,y) STMT_BEGIN \
- set_uint32((char*)y, htonl((uint32_t)((x)>>32))); \
- set_uint32(((char*)y)+4, htonl((uint32_t)((x)&0xffffffff))); \
- STMT_END
-#define RORc(x, y) ( ((((unsigned long)(x)&0xFFFFFFFFUL)>>(unsigned long)((y)&31)) | ((unsigned long)(x)<<(unsigned long)(32-((y)&31)))) & 0xFFFFFFFFUL)
-#ifndef MIN
- #define MIN(x, y) ( ((x)<(y))?(x):(y) )
-#endif
-
-
-/* LibTomCrypt, modular cryptographic library -- Tom St Denis
- *
- * LibTomCrypt is a library that provides various cryptographic
- * algorithms in a highly modular and flexible manner.
- *
- * The library is free for all purposes without any express
- * guarantee it works.
- *
- * Tom St Denis, tomstdenis@gmail.com, http://libtomcrypt.com
- */
-
-/**
- @file sha256.c
- SHA256 by Tom St Denis
-*/
-
-
-#ifdef LTC_SMALL_CODE
-/* the K array */
-static const uint32_t K[64] = {
- 0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL, 0x3956c25bUL,
- 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL, 0xd807aa98UL, 0x12835b01UL,
- 0x243185beUL, 0x550c7dc3UL, 0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL,
- 0xc19bf174UL, 0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
- 0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL, 0x983e5152UL,
- 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL, 0xc6e00bf3UL, 0xd5a79147UL,
- 0x06ca6351UL, 0x14292967UL, 0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL,
- 0x53380d13UL, 0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
- 0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL, 0xd192e819UL,
- 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL, 0x19a4c116UL, 0x1e376c08UL,
- 0x2748774cUL, 0x34b0bcb5UL, 0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL,
- 0x682e6ff3UL, 0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
- 0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-#endif
-
-/* Various logical functions */
-#define Ch(x,y,z) (z ^ (x & (y ^ z)))
-#define Maj(x,y,z) (((x | y) & z) | (x & y))
-#define S(x, n) RORc((x),(n))
-#define R(x, n) (((x)&0xFFFFFFFFUL)>>(n))
-#define Sigma0(x) (S(x, 2) ^ S(x, 13) ^ S(x, 22))
-#define Sigma1(x) (S(x, 6) ^ S(x, 11) ^ S(x, 25))
-#define Gamma0(x) (S(x, 7) ^ S(x, 18) ^ R(x, 3))
-#define Gamma1(x) (S(x, 17) ^ S(x, 19) ^ R(x, 10))
-
-/* compress 512-bits */
-#ifdef LTC_CLEAN_STACK
-static int _sha256_compress(sha256_state * md, unsigned char *buf)
-#else
-static int sha256_compress(sha256_state * md, unsigned char *buf)
-#endif
-{
- uint32_t S[8], W[64], t0, t1;
-#ifdef LTC_SMALL_CODE
- uint32_t t;
-#endif
- int i;
-
- /* copy state into S */
- for (i = 0; i < 8; i++) {
- S[i] = md->state[i];
- }
-
- /* copy the state into 512-bits into W[0..15] */
- for (i = 0; i < 16; i++) {
- LOAD32H(W[i], buf + (4*i));
- }
-
- /* fill W[16..63] */
- for (i = 16; i < 64; i++) {
- W[i] = Gamma1(W[i - 2]) + W[i - 7] + Gamma0(W[i - 15]) + W[i - 16];
- }
-
- /* Compress */
-#ifdef LTC_SMALL_CODE
-#define RND(a,b,c,d,e,f,g,h,i) \
- t0 = h + Sigma1(e) + Ch(e, f, g) + K[i] + W[i]; \
- t1 = Sigma0(a) + Maj(a, b, c); \
- d += t0; \
- h = t0 + t1;
-
- for (i = 0; i < 64; ++i) {
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],i);
- t = S[7]; S[7] = S[6]; S[6] = S[5]; S[5] = S[4];
- S[4] = S[3]; S[3] = S[2]; S[2] = S[1]; S[1] = S[0]; S[0] = t;
- }
-#else
-#define RND(a,b,c,d,e,f,g,h,i,ki) \
- t0 = h + Sigma1(e) + Ch(e, f, g) + ki + W[i]; \
- t1 = Sigma0(a) + Maj(a, b, c); \
- d += t0; \
- h = t0 + t1;
-
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],0,0x428a2f98);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],1,0x71374491);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],2,0xb5c0fbcf);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],3,0xe9b5dba5);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],4,0x3956c25b);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],5,0x59f111f1);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],6,0x923f82a4);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],7,0xab1c5ed5);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],8,0xd807aa98);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],9,0x12835b01);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],10,0x243185be);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],11,0x550c7dc3);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],12,0x72be5d74);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],13,0x80deb1fe);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],14,0x9bdc06a7);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],15,0xc19bf174);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],16,0xe49b69c1);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],17,0xefbe4786);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],18,0x0fc19dc6);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],19,0x240ca1cc);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],20,0x2de92c6f);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],21,0x4a7484aa);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],22,0x5cb0a9dc);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],23,0x76f988da);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],24,0x983e5152);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],25,0xa831c66d);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],26,0xb00327c8);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],27,0xbf597fc7);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],28,0xc6e00bf3);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],29,0xd5a79147);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],30,0x06ca6351);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],31,0x14292967);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],32,0x27b70a85);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],33,0x2e1b2138);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],34,0x4d2c6dfc);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],35,0x53380d13);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],36,0x650a7354);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],37,0x766a0abb);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],38,0x81c2c92e);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],39,0x92722c85);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],40,0xa2bfe8a1);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],41,0xa81a664b);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],42,0xc24b8b70);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],43,0xc76c51a3);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],44,0xd192e819);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],45,0xd6990624);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],46,0xf40e3585);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],47,0x106aa070);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],48,0x19a4c116);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],49,0x1e376c08);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],50,0x2748774c);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],51,0x34b0bcb5);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],52,0x391c0cb3);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],53,0x4ed8aa4a);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],54,0x5b9cca4f);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],55,0x682e6ff3);
- RND(S[0],S[1],S[2],S[3],S[4],S[5],S[6],S[7],56,0x748f82ee);
- RND(S[7],S[0],S[1],S[2],S[3],S[4],S[5],S[6],57,0x78a5636f);
- RND(S[6],S[7],S[0],S[1],S[2],S[3],S[4],S[5],58,0x84c87814);
- RND(S[5],S[6],S[7],S[0],S[1],S[2],S[3],S[4],59,0x8cc70208);
- RND(S[4],S[5],S[6],S[7],S[0],S[1],S[2],S[3],60,0x90befffa);
- RND(S[3],S[4],S[5],S[6],S[7],S[0],S[1],S[2],61,0xa4506ceb);
- RND(S[2],S[3],S[4],S[5],S[6],S[7],S[0],S[1],62,0xbef9a3f7);
- RND(S[1],S[2],S[3],S[4],S[5],S[6],S[7],S[0],63,0xc67178f2);
-
-#undef RND
-
-#endif
-
- /* feedback */
- for (i = 0; i < 8; i++) {
- md->state[i] = md->state[i] + S[i];
- }
- return CRYPT_OK;
-}
-
-#ifdef LTC_CLEAN_STACK
-static int sha256_compress(sha256_state * md, unsigned char *buf)
-{
- int err;
- err = _sha256_compress(md, buf);
- burn_stack(sizeof(uint32_t) * 74);
- return err;
-}
-#endif
-
-/**
- Initialize the hash state
- @param md The hash state you wish to initialize
- @return CRYPT_OK if successful
-*/
-static int sha256_init(sha256_state * md)
-{
- LTC_ARGCHK(md != NULL);
-
- md->curlen = 0;
- md->length = 0;
- md->state[0] = 0x6A09E667UL;
- md->state[1] = 0xBB67AE85UL;
- md->state[2] = 0x3C6EF372UL;
- md->state[3] = 0xA54FF53AUL;
- md->state[4] = 0x510E527FUL;
- md->state[5] = 0x9B05688CUL;
- md->state[6] = 0x1F83D9ABUL;
- md->state[7] = 0x5BE0CD19UL;
- return CRYPT_OK;
-}
-
-/**
- Process a block of memory though the hash
- @param md The hash state
- @param in The data to hash
- @param inlen The length of the data (octets)
- @return CRYPT_OK if successful
-*/
-static int sha256_process (sha256_state * md, const unsigned char *in, unsigned long inlen)
-{
- unsigned long n;
- int err;
- LTC_ARGCHK(md != NULL);
- LTC_ARGCHK(in != NULL);
- if (md->curlen > sizeof(md->buf)) {
- return CRYPT_INVALID_ARG;
- }
- while (inlen > 0) {
- if (md->curlen == 0 && inlen >= 64) {
- if ((err = sha256_compress (md, (unsigned char *)in)) != CRYPT_OK) {
- return err;
- }
- md->length += 64 * 8;
- in += 64;
- inlen -= 64;
- } else {
- n = MIN(inlen, (64 - md->curlen));
- memcpy(md->buf + md->curlen, in, (size_t)n);
- md->curlen += n;
- in += n;
- inlen -= n;
- if (md->curlen == 64) {
- if ((err = sha256_compress (md, md->buf)) != CRYPT_OK) {
- return err;
- }
- md->length += 8*64;
- md->curlen = 0;
- }
- }
- }
- return CRYPT_OK;
-}
-
-/**
- Terminate the hash to get the digest
- @param md The hash state
- @param out [out] The destination of the hash (32 bytes)
- @return CRYPT_OK if successful
-*/
-static int sha256_done(sha256_state * md, unsigned char *out)
-{
- int i;
-
- LTC_ARGCHK(md != NULL);
- LTC_ARGCHK(out != NULL);
-
- if (md->curlen >= sizeof(md->buf)) {
- return CRYPT_INVALID_ARG;
- }
-
-
- /* increase the length of the message */
- md->length += md->curlen * 8;
-
- /* append the '1' bit */
- md->buf[md->curlen++] = (unsigned char)0x80;
-
- /* if the length is currently above 56 bytes we append zeros
- * then compress. Then we can fall back to padding zeros and length
- * encoding like normal.
- */
- if (md->curlen > 56) {
- while (md->curlen < 64) {
- md->buf[md->curlen++] = (unsigned char)0;
- }
- sha256_compress(md, md->buf);
- md->curlen = 0;
- }
-
- /* pad upto 56 bytes of zeroes */
- while (md->curlen < 56) {
- md->buf[md->curlen++] = (unsigned char)0;
- }
-
- /* store length */
- STORE64H(md->length, md->buf+56);
- sha256_compress(md, md->buf);
-
- /* copy output */
- for (i = 0; i < 8; i++) {
- STORE32H(md->state[i], out+(4*i));
- }
-#ifdef LTC_CLEAN_STACK
- zeromem(md, sizeof(sha256_state));
-#endif
- return CRYPT_OK;
-}
-
-/* $Source: /cvs/libtom/libtomcrypt/src/hashes/sha2/sha256.c,v $ */
-/* $Revision: 1.9 $ */
-/* $Date: 2006/11/01 09:28:17 $ */
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/torgzip.c b/src/common/torgzip.c
index da4136228..15451ee30 100644
--- a/src/common/torgzip.c
+++ b/src/common/torgzip.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -68,6 +68,22 @@ is_gzip_supported(void)
return gzip_is_supported;
}
+/** Return a string representation of the version of the currently running
+ * version of zlib. */
+const char *
+tor_zlib_get_version_str(void)
+{
+ return zlibVersion();
+}
+
+/** Return a string representation of the version of the version of zlib
+* used at compilation. */
+const char *
+tor_zlib_get_header_version_str(void)
+{
+ return ZLIB_VERSION;
+}
+
/** Return the 'bits' value to tell zlib to use <b>method</b>.*/
static INLINE int
method_bits(compress_method_t method)
diff --git a/src/common/torgzip.h b/src/common/torgzip.h
index d3ded81f9..5db03fe6e 100644
--- a/src/common/torgzip.h
+++ b/src/common/torgzip.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
* \brief Headers for torgzip.h
**/
-#ifndef _TOR_TORGZIP_H
-#define _TOR_TORGZIP_H
+#ifndef TOR_TORGZIP_H
+#define TOR_TORGZIP_H
/** Enumeration of what kind of compression to use. Only ZLIB_METHOD is
* guaranteed to be supported by the compress/uncompress functions here;
@@ -32,6 +32,12 @@ tor_gzip_uncompress(char **out, size_t *out_len,
int is_gzip_supported(void);
+const char *
+tor_zlib_get_version_str(void);
+
+const char *
+tor_zlib_get_header_version_str(void);
+
compress_method_t detect_compression_method(const char *in, size_t in_len);
/** Return values from tor_zlib_process; see that function's documentation for
diff --git a/src/common/torint.h b/src/common/torint.h
index 8771802d7..a993d7649 100644
--- a/src/common/torint.h
+++ b/src/common/torint.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
* \brief Header file to define uint32_t and friends
**/
-#ifndef _TOR_TORINT_H
-#define _TOR_TORINT_H
+#ifndef TOR_TORINT_H
+#define TOR_TORINT_H
#include "orconfig.h"
@@ -214,16 +214,20 @@ typedef int32_t ssize_t;
#if (SIZEOF_VOID_P > 4 && SIZEOF_VOID_P <= 8)
#ifndef HAVE_INTPTR_T
typedef int64_t intptr_t;
+#define SIZEOF_INTPTR_T 8
#endif
#ifndef HAVE_UINTPTR_T
typedef uint64_t uintptr_t;
+#define SIZEOF_UINTPTR_T 8
#endif
#elif (SIZEOF_VOID_P > 2 && SIZEOF_VOID_P <= 4)
#ifndef HAVE_INTPTR_T
typedef int32_t intptr_t;
+#define SIZEOF_INTPTR_T 4
#endif
#ifndef HAVE_UINTPTR_T
typedef uint32_t uintptr_t;
+#define SIZEOF_UINTPTR_T 4
#endif
#else
#error "void * is either >8 bytes or <= 2. In either case, I am confused."
diff --git a/src/common/torlog.h b/src/common/torlog.h
index 28890a44a..34f70f3c0 100644
--- a/src/common/torlog.h
+++ b/src/common/torlog.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,9 +10,10 @@
* \brief Headers for log.c
**/
-#ifndef _TOR_LOG_H
+#ifndef TOR_TORLOG_H
#include "compat.h"
+#include "testsupport.h"
#ifdef HAVE_SYSLOG_H
#include <syslog.h>
@@ -94,12 +95,17 @@
#define LD_HANDSHAKE (1u<<19)
/** Heartbeat messages */
#define LD_HEARTBEAT (1u<<20)
+/** Abstract channel_t code */
+#define LD_CHANNEL (1u<<21)
/** Number of logging domains in the code. */
-#define N_LOGGING_DOMAINS 21
+#define N_LOGGING_DOMAINS 22
/** This log message is not safe to send to a callback-based logger
* immediately. Used as a flag, not a log domain. */
#define LD_NOCB (1u<<31)
+/** This log message should not include a function name, even if it otherwise
+ * would. Used as a flag, not a log domain. */
+#define LD_NOFUNCNAME (1u<<30)
/** Mask of zero or more log domains, OR'd together. */
typedef uint32_t log_domain_mask_t;
@@ -112,12 +118,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);
@@ -151,66 +151,93 @@ void set_log_time_granularity(int granularity_msec);
void tor_log(int severity, log_domain_mask_t domain, const char *format, ...)
CHECK_PRINTF(3,4);
-#define log tor_log /* hack it so we don't conflict with log() as much */
-#if defined(__GNUC__) || defined(RUNNING_DOXYGEN)
-extern int _log_global_min_severity;
+void tor_log_err_sigsafe(const char *m, ...);
+int tor_log_get_sigsafe_err_fds(const int **out);
+void tor_log_update_sigsafe_err_fds(void);
+
+struct smartlist_t;
+void tor_log_get_logfile_names(struct smartlist_t *out);
+
+extern int log_global_min_severity_;
-void _log_fn(int severity, log_domain_mask_t domain,
+#if defined(__GNUC__) || defined(RUNNING_DOXYGEN)
+void log_fn_(int severity, log_domain_mask_t domain,
const char *funcname, const char *format, ...)
CHECK_PRINTF(4,5);
+struct ratelim_t;
+void log_fn_ratelim_(struct ratelim_t *ratelim, int severity,
+ log_domain_mask_t domain, const char *funcname,
+ const char *format, ...)
+ CHECK_PRINTF(5,6);
/** Log a message at level <b>severity</b>, using a pretty-printed version
* of the current function name. */
#define log_fn(severity, domain, args...) \
- _log_fn(severity, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(severity, domain, __PRETTY_FUNCTION__, args)
+/** As log_fn, but use <b>ratelim</b> (an instance of ratelim_t) to control
+ * the frequency at which messages can appear.
+ */
+#define log_fn_ratelim(ratelim, severity, domain, args...) \
+ log_fn_ratelim_(ratelim, severity, domain, __PRETTY_FUNCTION__, args)
#define log_debug(domain, args...) \
STMT_BEGIN \
- if (PREDICT_UNLIKELY(_log_global_min_severity == LOG_DEBUG)) \
- _log_fn(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args); \
+ if (PREDICT_UNLIKELY(log_global_min_severity_ == LOG_DEBUG)) \
+ log_fn_(LOG_DEBUG, domain, __PRETTY_FUNCTION__, args); \
STMT_END
#define log_info(domain, args...) \
- _log_fn(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_INFO, domain, __PRETTY_FUNCTION__, args)
#define log_notice(domain, args...) \
- _log_fn(LOG_NOTICE, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_NOTICE, domain, __PRETTY_FUNCTION__, args)
#define log_warn(domain, args...) \
- _log_fn(LOG_WARN, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_WARN, domain, __PRETTY_FUNCTION__, args)
#define log_err(domain, args...) \
- _log_fn(LOG_ERR, domain, __PRETTY_FUNCTION__, args)
+ log_fn_(LOG_ERR, domain, __PRETTY_FUNCTION__, args)
#else /* ! defined(__GNUC__) */
-void _log_fn(int severity, log_domain_mask_t domain, const char *format, ...);
-void _log_debug(log_domain_mask_t domain, const char *format, ...);
-void _log_info(log_domain_mask_t domain, const char *format, ...);
-void _log_notice(log_domain_mask_t domain, const char *format, ...);
-void _log_warn(log_domain_mask_t domain, const char *format, ...);
-void _log_err(log_domain_mask_t domain, const char *format, ...);
+void log_fn_(int severity, log_domain_mask_t domain, const char *format, ...);
+struct ratelim_t;
+void log_fn_ratelim_(struct ratelim_t *ratelim, int severity,
+ log_domain_mask_t domain, const char *format, ...);
+void log_debug_(log_domain_mask_t domain, const char *format, ...);
+void log_info_(log_domain_mask_t domain, const char *format, ...);
+void log_notice_(log_domain_mask_t domain, const char *format, ...);
+void log_warn_(log_domain_mask_t domain, const char *format, ...);
+void log_err_(log_domain_mask_t domain, const char *format, ...);
#if defined(_MSC_VER) && _MSC_VER < 1300
/* MSVC 6 and earlier don't have __func__, or even __LINE__. */
-#define log_fn _log_fn
-#define log_debug _log_debug
-#define log_info _log_info
-#define log_notice _log_notice
-#define log_warn _log_warn
-#define log_err _log_err
+#define log_fn log_fn_
+#define log_fn_ratelim log_fn_ratelim_
+#define log_debug log_debug_
+#define log_info log_info_
+#define log_notice log_notice_
+#define log_warn log_warn_
+#define log_err log_err_
#else
/* We don't have GCC's varargs macros, so use a global variable to pass the
* function name to log_fn */
-extern const char *_log_fn_function_name;
+extern const char *log_fn_function_name_;
/* We abuse the comma operator here, since we can't use the standard
* do {...} while (0) trick to wrap this macro, since the macro can't take
* arguments. */
-#define log_fn (_log_fn_function_name=__func__),_log_fn
-#define log_debug (_log_fn_function_name=__func__),_log_debug
-#define log_info (_log_fn_function_name=__func__),_log_info
-#define log_notice (_log_fn_function_name=__func__),_log_notice
-#define log_warn (_log_fn_function_name=__func__),_log_warn
-#define log_err (_log_fn_function_name=__func__),_log_err
+#define log_fn (log_fn_function_name_=__func__),log_fn_
+#define log_fn_ratelim (log_fn_function_name_=__func__),log_fn_ratelim_
+#define log_debug (log_fn_function_name_=__func__),log_debug_
+#define log_info (log_fn_function_name_=__func__),log_info_
+#define log_notice (log_fn_function_name_=__func__),log_notice_
+#define log_warn (log_fn_function_name_=__func__),log_warn_
+#define log_err (log_fn_function_name_=__func__),log_err_
#endif
#endif /* !GNUC */
-# define _TOR_LOG_H
+#ifdef LOG_PRIVATE
+MOCK_DECL(STATIC void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format,
+ va_list ap) CHECK_PRINTF(5,0));
+#endif
+
+# define TOR_TORLOG_H
#endif
diff --git a/src/common/tortls.c b/src/common/tortls.c
index 60aac6492..ea0f21cb2 100644
--- a/src/common/tortls.c
+++ b/src/common/tortls.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -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"
@@ -58,8 +55,8 @@
#include "container.h"
#include <string.h>
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,7)
-#error "We require OpenSSL >= 0.9.7"
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
+#error "We require OpenSSL >= 0.9.8"
#endif
/* Enable the "v2" TLS handshake.
@@ -127,8 +124,33 @@ typedef struct tor_tls_context_t {
crypto_pk_t *auth_key;
} tor_tls_context_t;
+/** Return values for tor_tls_classify_client_ciphers.
+ *
+ * @{
+ */
+/** An error occurred when examining the client ciphers */
+#define CIPHERS_ERR -1
+/** The client cipher list indicates that a v1 handshake was in use. */
+#define CIPHERS_V1 1
+/** The client cipher list indicates that the client is using the v2 or the
+ * v3 handshake, but that it is (probably!) lying about what ciphers it
+ * supports */
+#define CIPHERS_V2 2
+/** The client cipher list indicates that the client is using the v2 or the
+ * v3 handshake, and that it is telling the truth about what ciphers it
+ * supports */
+#define CIPHERS_UNRESTRICTED 3
+/** @} */
+
#define TOR_TLS_MAGIC 0x71571571
+typedef enum {
+ TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
+ TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
+ TOR_TLS_ST_BUFFEREVENT
+} tor_tls_state_t;
+#define tor_tls_state_bitfield_t ENUM_BF(tor_tls_state_t)
+
/** Holds a SSL object and its associated data. Members are only
* accessed from within tortls.c.
*/
@@ -138,12 +160,9 @@ struct tor_tls_t {
SSL *ssl; /**< An OpenSSL SSL object. */
int socket; /**< The underlying file descriptor for this TLS connection. */
char *address; /**< An address to log when describing this connection. */
- enum {
- TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
- TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
- TOR_TLS_ST_BUFFEREVENT
- } state : 3; /**< The current SSL state, depending on which operations have
- * completed successfully. */
+ tor_tls_state_bitfield_t state : 3; /**< The current SSL state,
+ * depending on which operations
+ * have completed successfully. */
unsigned int isServer:1; /**< True iff this is a server-side connection */
unsigned int wasV2Handshake:1; /**< True iff the original handshake for
* this connection used the updated version
@@ -152,6 +171,9 @@ struct tor_tls_t {
* one certificate). */
/** True iff we should call negotiated_callback when we're done reading. */
unsigned int got_renegotiate:1;
+ /** Return value from tor_tls_classify_client_ciphers, or 0 if we haven't
+ * called that function yet. */
+ int8_t client_cipher_list_type;
/** Incremented every time we start the server side of a handshake. */
uint8_t server_handshake_count;
size_t wantwrite_n; /**< 0 normally, >0 if we returned wantwrite last
@@ -210,14 +232,16 @@ static X509* tor_tls_create_certificate(crypto_pk_t *rsa,
crypto_pk_t *rsa_sign,
const char *cname,
const char *cname_sign,
- unsigned int lifetime);
+ unsigned int cert_lifetime);
static int tor_tls_context_init_one(tor_tls_context_t **ppcontext,
crypto_pk_t *identity,
unsigned int key_lifetime,
+ unsigned int flags,
int is_client);
static tor_tls_context_t *tor_tls_context_new(crypto_pk_t *identity,
unsigned int key_lifetime,
+ unsigned int flags,
int is_client);
static int check_cert_lifetime_internal(int severity, const X509 *cert,
int past_tolerance, int future_tolerance);
@@ -234,8 +258,8 @@ static tor_tls_context_t *client_tls_context = NULL;
static int tls_library_is_initialized = 0;
/* Module-internal error codes. */
-#define _TOR_TLS_SYSCALL (_MIN_TOR_TLS_ERROR_VAL - 2)
-#define _TOR_TLS_ZERORETURN (_MIN_TOR_TLS_ERROR_VAL - 1)
+#define TOR_TLS_SYSCALL_ (MIN_TOR_TLS_ERROR_VAL_ - 2)
+#define TOR_TLS_ZERORETURN_ (MIN_TOR_TLS_ERROR_VAL_ - 1)
/** Write a description of the current state of <b>tls</b> into the
* <b>sz</b>-byte buffer at <b>buf</b>. */
@@ -308,11 +332,11 @@ tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
if (!lib) lib = "(null)";
if (!func) func = "(null)";
if (doing) {
- log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
+ tor_log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
doing, addr?" with ":"", addr?addr:"",
msg, lib, func, state);
} else {
- log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
+ tor_log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
addr?" with ":"", addr?addr:"",
msg, lib, func, state);
}
@@ -336,35 +360,19 @@ tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing)
static int
tor_errno_to_tls_error(int e)
{
-#if defined(_WIN32)
switch (e) {
- case WSAECONNRESET: // most common
+ case SOCK_ERRNO(ECONNRESET): // most common
return TOR_TLS_ERROR_CONNRESET;
- case WSAETIMEDOUT:
+ case SOCK_ERRNO(ETIMEDOUT):
return TOR_TLS_ERROR_TIMEOUT;
- case WSAENETUNREACH:
- case WSAEHOSTUNREACH:
+ case SOCK_ERRNO(EHOSTUNREACH):
+ case SOCK_ERRNO(ENETUNREACH):
return TOR_TLS_ERROR_NO_ROUTE;
- case WSAECONNREFUSED:
+ case SOCK_ERRNO(ECONNREFUSED):
return TOR_TLS_ERROR_CONNREFUSED; // least common
default:
return TOR_TLS_ERROR_MISC;
}
-#else
- switch (e) {
- case ECONNRESET: // most common
- return TOR_TLS_ERROR_CONNRESET;
- case ETIMEDOUT:
- return TOR_TLS_ERROR_TIMEOUT;
- case EHOSTUNREACH:
- case ENETUNREACH:
- return TOR_TLS_ERROR_NO_ROUTE;
- case ECONNREFUSED:
- return TOR_TLS_ERROR_CONNREFUSED; // least common
- default:
- return TOR_TLS_ERROR_MISC;
- }
-#endif
}
/** Given a TOR_TLS_* error code, return a string equivalent. */
@@ -393,9 +401,9 @@ tor_tls_err_to_string(int err)
/** Given a TLS object and the result of an SSL_* call, use
* SSL_get_error to determine whether an error has occurred, and if so
* which one. Return one of TOR_TLS_{DONE|WANTREAD|WANTWRITE|ERROR}.
- * If extra&CATCH_SYSCALL is true, return _TOR_TLS_SYSCALL instead of
+ * If extra&CATCH_SYSCALL is true, return TOR_TLS_SYSCALL_ instead of
* reporting syscall errors. If extra&CATCH_ZERO is true, return
- * _TOR_TLS_ZERORETURN instead of reporting zero-return errors.
+ * TOR_TLS_ZERORETURN_ instead of reporting zero-return errors.
*
* If an error has occurred, log it at level <b>severity</b> and describe the
* current action as <b>doing</b>.
@@ -415,14 +423,14 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra,
return TOR_TLS_WANTWRITE;
case SSL_ERROR_SYSCALL:
if (extra&CATCH_SYSCALL)
- return _TOR_TLS_SYSCALL;
+ return TOR_TLS_SYSCALL_;
if (r == 0) {
- log(severity, LD_NET, "TLS error: unexpected close while %s (%s)",
+ tor_log(severity, LD_NET, "TLS error: unexpected close while %s (%s)",
doing, SSL_state_string_long(tls->ssl));
tor_error = TOR_TLS_ERROR_IO;
} else {
int e = tor_socket_errno(tls->socket);
- log(severity, LD_NET,
+ tor_log(severity, LD_NET,
"TLS error: <syscall error while %s> (errno=%d: %s; state=%s)",
doing, e, tor_socket_strerror(e),
SSL_state_string_long(tls->ssl));
@@ -432,8 +440,8 @@ tor_tls_get_error(tor_tls_t *tls, int r, int extra,
return tor_error;
case SSL_ERROR_ZERO_RETURN:
if (extra&CATCH_ZERO)
- return _TOR_TLS_ZERORETURN;
- log(severity, LD_NET, "TLS connection closed while %s in state %s",
+ return TOR_TLS_ZERORETURN_;
+ tor_log(severity, LD_NET, "TLS connection closed while %s in state %s",
doing, SSL_state_string_long(tls->ssl));
tls_log_errors(tls, severity, domain, doing);
return TOR_TLS_CLOSE;
@@ -478,7 +486,7 @@ tor_tls_init(void)
* a test of intelligence and determination.
*/
if (version > OPENSSL_V(0,9,8,'k') && version <= OPENSSL_V(0,9,8,'l')) {
- log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8l, but "
+ log_info(LD_GENERAL, "OpenSSL %s looks like version 0.9.8l, but "
"some vendors have backported renegotiation code from "
"0.9.8m without updating the version number. "
"I will try SSL3_FLAGS and SSL_OP to enable renegotation.",
@@ -486,12 +494,12 @@ tor_tls_init(void)
use_unsafe_renegotiation_flag = 1;
use_unsafe_renegotiation_op = 1;
} else if (version > OPENSSL_V(0,9,8,'l')) {
- log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8m or later; "
+ log_info(LD_GENERAL, "OpenSSL %s looks like version 0.9.8m or later; "
"I will try SSL_OP to enable renegotiation",
SSLeay_version(SSLEAY_VERSION));
use_unsafe_renegotiation_op = 1;
} else if (version <= OPENSSL_V(0,9,8,'k')) {
- log_notice(LD_GENERAL, "OpenSSL %s [%lx] looks like it's older than "
+ log_info(LD_GENERAL, "OpenSSL %s [%lx] looks like it's older than "
"0.9.8l, but some vendors have backported 0.9.8l's "
"renegotiation code to earlier versions, and some have "
"backported the code from 0.9.8m or 0.9.8n. I'll set both "
@@ -505,6 +513,37 @@ tor_tls_init(void)
SSLeay_version(SSLEAY_VERSION), version);
}
+#if (SIZEOF_VOID_P >= 8 && \
+ !defined(OPENSSL_NO_EC) && \
+ OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,1))
+ if (version >= OPENSSL_V_SERIES(1,0,1)) {
+ /* Warn if we could *almost* be running with much faster ECDH.
+ If we're built for a 64-bit target, using OpenSSL 1.0.1, but we
+ don't have one of the built-in __uint128-based speedups, we are
+ just one build operation away from an accelerated handshake.
+
+ (We could be looking at OPENSSL_NO_EC_NISTP_64_GCC_128 instead of
+ doing this test, but that gives compile-time options, not runtime
+ behavior.)
+ */
+ EC_KEY *key = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+ const EC_GROUP *g = key ? EC_KEY_get0_group(key) : NULL;
+ const EC_METHOD *m = g ? EC_GROUP_method_of(g) : NULL;
+ const int warn = (m == EC_GFp_simple_method() ||
+ m == EC_GFp_mont_method() ||
+ m == EC_GFp_nist_method());
+ EC_KEY_free(key);
+
+ if (warn)
+ log_notice(LD_GENERAL, "We were built to run on a 64-bit CPU, with "
+ "OpenSSL 1.0.1 or later, but with a version of OpenSSL "
+ "that apparently lacks accelerated support for the NIST "
+ "P-224 and P-256 groups. Building openssl with such "
+ "support (using the enable-ec_nistp_64_gcc_128 option "
+ "when configuring it) would make ECDH much faster.");
+ }
+#endif
+
tor_tls_allocate_tor_tls_object_ex_data_index();
tls_library_is_initialized = 1;
@@ -567,9 +606,10 @@ tor_x509_name_new(const char *cname)
/** Generate and sign an X509 certificate with the public key <b>rsa</b>,
* signed by the private key <b>rsa_sign</b>. The commonName of the
* certificate will be <b>cname</b>; the commonName of the issuer will be
- * <b>cname_sign</b>. The cert will be valid for <b>cert_lifetime</b> seconds
- * starting from now. Return a certificate on success, NULL on
- * failure.
+ * <b>cname_sign</b>. The cert will be valid for <b>cert_lifetime</b>
+ * seconds, starting from some time in the past.
+ *
+ * Return a certificate on success, NULL on failure.
*/
static X509 *
tor_tls_create_certificate(crypto_pk_t *rsa,
@@ -591,15 +631,20 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
tor_tls_init();
- start_time = time(NULL);
+ /* Make sure we're part-way through the certificate lifetime, rather
+ * than having it start right now. Don't choose quite uniformly, since
+ * then we might pick a time where we're about to expire. Lastly, be
+ * sure to start on a day boundary. */
+ start_time = time(NULL) - crypto_rand_int(cert_lifetime) + 2*24*3600;
+ start_time -= start_time % (24*3600);
tor_assert(rsa);
tor_assert(cname);
tor_assert(rsa_sign);
tor_assert(cname_sign);
- if (!(sign_pkey = _crypto_pk_get_evp_pkey(rsa_sign,1)))
+ if (!(sign_pkey = crypto_pk_get_evp_pkey_(rsa_sign,1)))
goto error;
- if (!(pkey = _crypto_pk_get_evp_pkey(rsa,0)))
+ if (!(pkey = crypto_pk_get_evp_pkey_(rsa,0)))
goto error;
if (!(x509 = X509_new()))
goto error;
@@ -647,7 +692,7 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
if (pkey)
EVP_PKEY_free(pkey);
if (serial_number)
- BN_free(serial_number);
+ BN_clear_free(serial_number);
if (name)
X509_NAME_free(name);
if (name_issuer)
@@ -657,11 +702,58 @@ tor_tls_create_certificate(crypto_pk_t *rsa,
#undef SERIAL_NUMBER_SIZE
}
-/** List of ciphers that servers should select from.*/
+/** List of ciphers that servers should select from when the client might be
+ * claiming extra unsupported ciphers in order to avoid fingerprinting. */
#define SERVER_CIPHER_LIST \
(TLS1_TXT_DHE_RSA_WITH_AES_256_SHA ":" \
TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":" \
SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
+
+/** List of ciphers that servers should select from when we actually have
+ * our choice of what cipher to use. */
+const char UNRESTRICTED_SERVER_CIPHER_LIST[] =
+ /* This list is autogenerated with the gen_server_ciphers.py script;
+ * don't hand-edit it. */
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384
+ TLS1_TXT_ECDHE_RSA_WITH_AES_256_GCM_SHA384 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384
+ TLS1_TXT_ECDHE_RSA_WITH_AES_256_SHA384 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA
+ TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA ":"
+#endif
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA
+ TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384
+ TLS1_TXT_DHE_RSA_WITH_AES_256_GCM_SHA384 ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256
+ TLS1_TXT_DHE_RSA_WITH_AES_128_GCM_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256
+ TLS1_TXT_DHE_RSA_WITH_AES_256_SHA256 ":"
+#endif
+#ifdef TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256
+ TLS1_TXT_DHE_RSA_WITH_AES_128_SHA256 ":"
+#endif
+ /* Required */
+ TLS1_TXT_DHE_RSA_WITH_AES_256_SHA ":"
+ /* Required */
+ TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":"
+#ifdef TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA
+ TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA ":"
+#endif
+ /* Required */
+ SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA;
+
/* Note: to set up your own private testing network with link crypto
* disabled, set your Tors' cipher list to
* (SSL3_TXT_RSA_NULL_SHA). If you do this, you won't be able to communicate
@@ -728,24 +820,24 @@ tor_cert_new(X509 *x509_cert)
tor_cert_t *cert;
EVP_PKEY *pkey;
RSA *rsa;
- int length, length2;
- unsigned char *cp;
+ int length;
+ unsigned char *buf = NULL;
if (!x509_cert)
return NULL;
- length = i2d_X509(x509_cert, NULL);
+ length = i2d_X509(x509_cert, &buf);
cert = tor_malloc_zero(sizeof(tor_cert_t));
- if (length <= 0) {
+ if (length <= 0 || buf == NULL) {
tor_free(cert);
log_err(LD_CRYPTO, "Couldn't get length of encoded x509 certificate");
X509_free(x509_cert);
return NULL;
}
cert->encoded_len = (size_t) length;
- cp = cert->encoded = tor_malloc(length);
- length2 = i2d_X509(x509_cert, &cp);
- tor_assert(length2 == length);
+ cert->encoded = tor_malloc(length);
+ memcpy(cert->encoded, buf, length);
+ OPENSSL_free(buf);
cert->cert = x509_cert;
@@ -754,7 +846,7 @@ tor_cert_new(X509 *x509_cert)
if ((pkey = X509_get_pubkey(x509_cert)) &&
(rsa = EVP_PKEY_get1_RSA(pkey))) {
- crypto_pk_t *pk = _crypto_new_pk_from_rsa(rsa);
+ crypto_pk_t *pk = crypto_new_pk_from_rsa_(rsa);
crypto_pk_get_all_digests(pk, &cert->pkey_digests);
cert->pkey_digests_set = 1;
crypto_pk_free(pk);
@@ -778,13 +870,8 @@ tor_cert_decode(const uint8_t *certificate, size_t certificate_len)
if (certificate_len > INT_MAX)
return NULL;
-#if OPENSSL_VERSION_NUMBER < OPENSSL_V_SERIES(0,9,8)
- /* This ifdef suppresses a type warning. Take out this case once everybody
- * is using OpenSSL 0.9.8 or later. */
- x509 = d2i_X509(NULL, (unsigned char**)&cp, (int)certificate_len);
-#else
x509 = d2i_X509(NULL, &cp, (int)certificate_len);
-#endif
+
if (!x509)
return NULL; /* Couldn't decode */
if (cp - certificate != (int)certificate_len) {
@@ -901,36 +988,11 @@ tor_tls_cert_get_key(tor_cert_t *cert)
EVP_PKEY_free(pkey);
return NULL;
}
- result = _crypto_new_pk_from_rsa(rsa);
+ result = crypto_new_pk_from_rsa_(rsa);
EVP_PKEY_free(pkey);
return result;
}
-/** Return true iff <b>a</b> and <b>b</b> represent the same public key. */
-static int
-pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
-{
- /* We'd like to do this, but openssl 0.9.7 doesn't have it:
- return EVP_PKEY_cmp(a,b) == 1;
- */
- unsigned char *a_enc=NULL, *b_enc=NULL, *a_ptr, *b_ptr;
- int a_len1, b_len1, a_len2, b_len2, result;
- a_len1 = i2d_PublicKey(a, NULL);
- b_len1 = i2d_PublicKey(b, NULL);
- if (a_len1 != b_len1)
- return 0;
- a_ptr = a_enc = tor_malloc(a_len1);
- b_ptr = b_enc = tor_malloc(b_len1);
- a_len2 = i2d_PublicKey(a, &a_ptr);
- b_len2 = i2d_PublicKey(b, &b_ptr);
- tor_assert(a_len2 == a_len1);
- tor_assert(b_len2 == b_len1);
- result = tor_memeq(a_enc, b_enc, a_len1);
- tor_free(a_enc);
- tor_free(b_enc);
- return result;
-}
-
/** Return true iff the other side of <b>tls</b> has authenticated to us, and
* the key certified in <b>cert</b> is the same as the key they used to do it.
*/
@@ -946,7 +1008,7 @@ tor_tls_cert_matches_key(const tor_tls_t *tls, const tor_cert_t *cert)
link_key = X509_get_pubkey(peercert);
cert_key = X509_get_pubkey(cert->cert);
- result = link_key && cert_key && pkey_eq(cert_key, link_key);
+ result = link_key && cert_key && EVP_PKEY_cmp(cert_key, link_key) == 1;
X509_free(peercert);
if (link_key)
@@ -1019,17 +1081,20 @@ tor_tls_context_incref(tor_tls_context_t *ctx)
/** Create new global client and server TLS contexts.
*
* If <b>server_identity</b> is NULL, this will not generate a server
- * TLS context. If <b>is_public_server</b> is non-zero, this will use
+ * TLS context. If TOR_TLS_CTX_IS_PUBLIC_SERVER is set in <b>flags</b>, use
* the same TLS context for incoming and outgoing connections, and
- * ignore <b>client_identity</b>. */
+ * ignore <b>client_identity</b>. If one of TOR_TLS_CTX_USE_ECDHE_P{224,256}
+ * is set in <b>flags</b>, use that ECDHE group if possible; otherwise use
+ * the default ECDHE group. */
int
-tor_tls_context_init(int is_public_server,
+tor_tls_context_init(unsigned flags,
crypto_pk_t *client_identity,
crypto_pk_t *server_identity,
unsigned int key_lifetime)
{
int rv1 = 0;
int rv2 = 0;
+ const int is_public_server = flags & TOR_TLS_CTX_IS_PUBLIC_SERVER;
if (is_public_server) {
tor_tls_context_t *new_ctx;
@@ -1039,7 +1104,7 @@ tor_tls_context_init(int is_public_server,
rv1 = tor_tls_context_init_one(&server_tls_context,
server_identity,
- key_lifetime, 0);
+ key_lifetime, flags, 0);
if (rv1 >= 0) {
new_ctx = server_tls_context;
@@ -1056,6 +1121,7 @@ tor_tls_context_init(int is_public_server,
rv1 = tor_tls_context_init_one(&server_tls_context,
server_identity,
key_lifetime,
+ flags,
0);
} else {
tor_tls_context_t *old_ctx = server_tls_context;
@@ -1069,6 +1135,7 @@ tor_tls_context_init(int is_public_server,
rv2 = tor_tls_context_init_one(&client_tls_context,
client_identity,
key_lifetime,
+ flags,
1);
}
@@ -1085,10 +1152,12 @@ static int
tor_tls_context_init_one(tor_tls_context_t **ppcontext,
crypto_pk_t *identity,
unsigned int key_lifetime,
+ unsigned int flags,
int is_client)
{
tor_tls_context_t *new_ctx = tor_tls_context_new(identity,
key_lifetime,
+ flags,
is_client);
tor_tls_context_t *old_ctx = *ppcontext;
@@ -1112,7 +1181,7 @@ tor_tls_context_init_one(tor_tls_context_t **ppcontext,
*/
static tor_tls_context_t *
tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
- int is_client)
+ unsigned flags, int is_client)
{
crypto_pk_t *rsa = NULL, *rsa_auth = NULL;
EVP_PKEY *pkey = NULL;
@@ -1150,7 +1219,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
authcert = tor_tls_create_certificate(rsa_auth, identity, nickname, nn2,
key_lifetime);
if (!cert || !idcert || !authcert) {
- log(LOG_WARN, LD_CRYPTO, "Error creating certificate");
+ log_warn(LD_CRYPTO, "Error creating certificate");
goto error;
}
}
@@ -1181,6 +1250,10 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
goto error;
SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2);
+ /* Prefer the server's ordering of ciphers: the client's ordering has
+ * historically been chosen for fingerprinting resistance. */
+ SSL_CTX_set_options(result->ctx, SSL_OP_CIPHER_SERVER_PREFERENCE);
+
/* Disable TLS1.1 and TLS1.2 if they exist. We need to do this to
* workaround a bug present in all OpenSSL 1.0.1 versions (as of 1
* June 2012), wherein renegotiating while using one of these TLS
@@ -1189,19 +1262,29 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
* version. Once some version of OpenSSL does TLS1.1 and TLS1.2
* renegotiation properly, we can turn them back on when built with
* that version. */
+#if OPENSSL_VERSION_NUMBER < OPENSSL_V(1,0,1,'e')
#ifdef SSL_OP_NO_TLSv1_2
SSL_CTX_set_options(result->ctx, SSL_OP_NO_TLSv1_2);
#endif
#ifdef SSL_OP_NO_TLSv1_1
SSL_CTX_set_options(result->ctx, SSL_OP_NO_TLSv1_1);
#endif
+#endif
+
/* Disable TLS tickets if they're supported. We never want to use them;
* using them can make our perfect forward secrecy a little worse, *and*
* create an opportunity to fingerprint us (since it's unusual to use them
* with TLS sessions turned off).
+ *
+ * In 0.2.4, clients advertise support for them though, to avoid a TLS
+ * distinguishability vector. This can give us worse PFS, though, if we
+ * get a server that doesn't set SSL_OP_NO_TICKET. With luck, there will
+ * be few such servers by the time 0.2.4 is more stable.
*/
#ifdef SSL_OP_NO_TICKET
- SSL_CTX_set_options(result->ctx, SSL_OP_NO_TICKET);
+ if (! is_client) {
+ SSL_CTX_set_options(result->ctx, SSL_OP_NO_TICKET);
+ }
#endif
if (
@@ -1222,6 +1305,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
}
SSL_CTX_set_options(result->ctx, SSL_OP_SINGLE_DH_USE);
+ SSL_CTX_set_options(result->ctx, SSL_OP_SINGLE_ECDH_USE);
#ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
SSL_CTX_set_options(result->ctx,
@@ -1257,7 +1341,7 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
SSL_CTX_set_session_cache_mode(result->ctx, SSL_SESS_CACHE_OFF);
if (!is_client) {
tor_assert(rsa);
- if (!(pkey = _crypto_pk_get_evp_pkey(rsa,1)))
+ if (!(pkey = crypto_pk_get_evp_pkey_(rsa,1)))
goto error;
if (!SSL_CTX_use_PrivateKey(result->ctx, pkey))
goto error;
@@ -1269,9 +1353,29 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
{
crypto_dh_t *dh = crypto_dh_new(DH_TYPE_TLS);
tor_assert(dh);
- SSL_CTX_set_tmp_dh(result->ctx, _crypto_dh_get_dh(dh));
+ SSL_CTX_set_tmp_dh(result->ctx, crypto_dh_get_dh_(dh));
crypto_dh_free(dh);
}
+#if (!defined(OPENSSL_NO_EC) && \
+ OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0))
+ if (! is_client) {
+ int nid;
+ EC_KEY *ec_key;
+ if (flags & TOR_TLS_CTX_USE_ECDHE_P224)
+ nid = NID_secp224r1;
+ else if (flags & TOR_TLS_CTX_USE_ECDHE_P256)
+ nid = NID_X9_62_prime256v1;
+ else
+ nid = NID_X9_62_prime256v1;
+ /* Use P-256 for ECDHE. */
+ ec_key = EC_KEY_new_by_curve_name(nid);
+ if (ec_key != NULL) /*XXXX Handle errors? */
+ SSL_CTX_set_tmp_ecdh(result->ctx, ec_key);
+ EC_KEY_free(ec_key);
+ }
+#else
+ (void)flags;
+#endif
SSL_CTX_set_verify(result->ctx, SSL_VERIFY_PEER,
always_accept_verify_cb);
/* let us realloc bufs that we're writing from */
@@ -1307,29 +1411,120 @@ tor_tls_context_new(crypto_pk_t *identity, unsigned int key_lifetime,
return NULL;
}
+/** Invoked when a TLS state changes: log the change at severity 'debug' */
+static void
+tor_tls_debug_state_callback(const SSL *ssl, int type, int val)
+{
+ log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
+ ssl, SSL_state_string_long(ssl), type, val);
+}
+
+/* Return the name of the negotiated ciphersuite in use on <b>tls</b> */
+const char *
+tor_tls_get_ciphersuite_name(tor_tls_t *tls)
+{
+ return SSL_get_cipher(tls->ssl);
+}
+
#ifdef V2_HANDSHAKE_SERVER
-/** Return true iff the cipher list suggested by the client for <b>ssl</b> is
- * a list that indicates that the client knows how to do the v2 TLS connection
- * handshake. */
+
+/* Here's the old V2 cipher list we sent from 0.2.1.1-alpha up to
+ * 0.2.3.17-beta. If a client is using this list, we can't believe the ciphers
+ * that it claims to support. We'll prune this list to remove the ciphers
+ * *we* don't recognize. */
+static uint16_t v2_cipher_list[] = {
+ 0xc00a, /* TLS1_TXT_ECDHE_ECDSA_WITH_AES_256_CBC_SHA */
+ 0xc014, /* TLS1_TXT_ECDHE_RSA_WITH_AES_256_CBC_SHA */
+ 0x0039, /* TLS1_TXT_DHE_RSA_WITH_AES_256_SHA */
+ 0x0038, /* TLS1_TXT_DHE_DSS_WITH_AES_256_SHA */
+ 0xc00f, /* TLS1_TXT_ECDH_RSA_WITH_AES_256_CBC_SHA */
+ 0xc005, /* TLS1_TXT_ECDH_ECDSA_WITH_AES_256_CBC_SHA */
+ 0x0035, /* TLS1_TXT_RSA_WITH_AES_256_SHA */
+ 0xc007, /* TLS1_TXT_ECDHE_ECDSA_WITH_RC4_128_SHA */
+ 0xc009, /* TLS1_TXT_ECDHE_ECDSA_WITH_AES_128_CBC_SHA */
+ 0xc011, /* TLS1_TXT_ECDHE_RSA_WITH_RC4_128_SHA */
+ 0xc013, /* TLS1_TXT_ECDHE_RSA_WITH_AES_128_CBC_SHA */
+ 0x0033, /* TLS1_TXT_DHE_RSA_WITH_AES_128_SHA */
+ 0x0032, /* TLS1_TXT_DHE_DSS_WITH_AES_128_SHA */
+ 0xc00c, /* TLS1_TXT_ECDH_RSA_WITH_RC4_128_SHA */
+ 0xc00e, /* TLS1_TXT_ECDH_RSA_WITH_AES_128_CBC_SHA */
+ 0xc002, /* TLS1_TXT_ECDH_ECDSA_WITH_RC4_128_SHA */
+ 0xc004, /* TLS1_TXT_ECDH_ECDSA_WITH_AES_128_CBC_SHA */
+ 0x0004, /* SSL3_TXT_RSA_RC4_128_MD5 */
+ 0x0005, /* SSL3_TXT_RSA_RC4_128_SHA */
+ 0x002f, /* TLS1_TXT_RSA_WITH_AES_128_SHA */
+ 0xc008, /* TLS1_TXT_ECDHE_ECDSA_WITH_DES_192_CBC3_SHA */
+ 0xc012, /* TLS1_TXT_ECDHE_RSA_WITH_DES_192_CBC3_SHA */
+ 0x0016, /* SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA */
+ 0x0013, /* SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA */
+ 0xc00d, /* TLS1_TXT_ECDH_RSA_WITH_DES_192_CBC3_SHA */
+ 0xc003, /* TLS1_TXT_ECDH_ECDSA_WITH_DES_192_CBC3_SHA */
+ 0xfeff, /* SSL3_TXT_RSA_FIPS_WITH_3DES_EDE_CBC_SHA */
+ 0x000a, /* SSL3_TXT_RSA_DES_192_CBC3_SHA */
+ 0
+};
+/** Have we removed the unrecognized ciphers from v2_cipher_list yet? */
+static int v2_cipher_list_pruned = 0;
+
+/** Remove from v2_cipher_list every cipher that we don't support, so that
+ * comparing v2_cipher_list to a client's cipher list will give a sensible
+ * result. */
+static void
+prune_v2_cipher_list(void)
+{
+ uint16_t *inp, *outp;
+ const SSL_METHOD *m = SSLv23_method();
+
+ inp = outp = v2_cipher_list;
+ while (*inp) {
+ unsigned char cipherid[3];
+ const SSL_CIPHER *cipher;
+ /* Is there no better way to do this? */
+ set_uint16(cipherid, htons(*inp));
+ cipherid[2] = 0; /* If ssl23_get_cipher_by_char finds no cipher starting
+ * with a two-byte 'cipherid', it may look for a v2
+ * cipher with the appropriate 3 bytes. */
+ cipher = m->get_cipher_by_char(cipherid);
+ if (cipher) {
+ tor_assert((cipher->id & 0xffff) == *inp);
+ *outp++ = *inp++;
+ } else {
+ inp++;
+ }
+ }
+ *outp = 0;
+
+ v2_cipher_list_pruned = 1;
+}
+
+/** Examine the client cipher list in <b>ssl</b>, and determine what kind of
+ * client it is. Return one of CIPHERS_ERR, CIPHERS_V1, CIPHERS_V2,
+ * CIPHERS_UNRESTRICTED.
+ **/
static int
-tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
+tor_tls_classify_client_ciphers(const SSL *ssl,
+ STACK_OF(SSL_CIPHER) *peer_ciphers)
{
- int i;
- SSL_SESSION *session;
+ int i, res;
+ tor_tls_t *tor_tls;
+ if (PREDICT_UNLIKELY(!v2_cipher_list_pruned))
+ prune_v2_cipher_list();
+
+ tor_tls = tor_tls_get_by_ssl(ssl);
+ if (tor_tls && tor_tls->client_cipher_list_type)
+ return tor_tls->client_cipher_list_type;
+
/* If we reached this point, we just got a client hello. See if there is
* a cipher list. */
- if (!(session = SSL_get_session((SSL *)ssl))) {
- log_info(LD_NET, "No session on TLS?");
- return 0;
- }
- if (!session->ciphers) {
+ if (!peer_ciphers) {
log_info(LD_NET, "No ciphers on session");
- return 0;
+ res = CIPHERS_ERR;
+ goto done;
}
/* Now we need to see if there are any ciphers whose presence means we're
* dealing with an updated Tor. */
- for (i = 0; i < sk_SSL_CIPHER_num(session->ciphers); ++i) {
- SSL_CIPHER *cipher = sk_SSL_CIPHER_value(session->ciphers, i);
+ for (i = 0; i < sk_SSL_CIPHER_num(peer_ciphers); ++i) {
+ SSL_CIPHER *cipher = sk_SSL_CIPHER_value(peer_ciphers, i);
const char *ciphername = SSL_CIPHER_get_name(cipher);
if (strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_128_SHA) &&
strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA) &&
@@ -1337,34 +1532,67 @@ tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
strcmp(ciphername, "(NONE)")) {
log_debug(LD_NET, "Got a non-version-1 cipher called '%s'", ciphername);
// return 1;
- goto dump_list;
+ goto v2_or_higher;
}
}
- return 0;
- dump_list:
+ res = CIPHERS_V1;
+ goto done;
+ v2_or_higher:
+ {
+ const uint16_t *v2_cipher = v2_cipher_list;
+ for (i = 0; i < sk_SSL_CIPHER_num(peer_ciphers); ++i) {
+ SSL_CIPHER *cipher = sk_SSL_CIPHER_value(peer_ciphers, i);
+ uint16_t id = cipher->id & 0xffff;
+ if (id == 0x00ff) /* extended renegotiation indicator. */
+ continue;
+ if (!id || id != *v2_cipher) {
+ res = CIPHERS_UNRESTRICTED;
+ goto dump_ciphers;
+ }
+ ++v2_cipher;
+ }
+ if (*v2_cipher != 0) {
+ res = CIPHERS_UNRESTRICTED;
+ goto dump_ciphers;
+ }
+ res = CIPHERS_V2;
+ }
+
+ dump_ciphers:
{
smartlist_t *elts = smartlist_new();
char *s;
- for (i = 0; i < sk_SSL_CIPHER_num(session->ciphers); ++i) {
- SSL_CIPHER *cipher = sk_SSL_CIPHER_value(session->ciphers, i);
+ for (i = 0; i < sk_SSL_CIPHER_num(peer_ciphers); ++i) {
+ SSL_CIPHER *cipher = sk_SSL_CIPHER_value(peer_ciphers, i);
const char *ciphername = SSL_CIPHER_get_name(cipher);
smartlist_add(elts, (char*)ciphername);
}
s = smartlist_join_strings(elts, ":", 0, NULL);
- log_debug(LD_NET, "Got a non-version-1 cipher list from %s. It is: '%s'",
- address, s);
+ log_debug(LD_NET, "Got a %s V2/V3 cipher list from %s. It is: '%s'",
+ (res == CIPHERS_V2) ? "fictitious" : "real", ADDR(tor_tls), s);
tor_free(s);
smartlist_free(elts);
}
- return 1;
+ done:
+ if (tor_tls)
+ return tor_tls->client_cipher_list_type = res;
+
+ return res;
}
-/** Invoked when a TLS state changes: log the change at severity 'debug' */
-static void
-tor_tls_debug_state_callback(const SSL *ssl, int type, int val)
+/** Return true iff the cipher list suggested by the client for <b>ssl</b> is
+ * a list that indicates that the client knows how to do the v2 TLS connection
+ * handshake. */
+static int
+tor_tls_client_is_using_v2_ciphers(const SSL *ssl)
{
- log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
- ssl, SSL_state_string_long(ssl), type, val);
+ SSL_SESSION *session;
+ if (!(session = SSL_get_session((SSL *)ssl))) {
+ log_info(LD_NET, "No session on TLS?");
+ return CIPHERS_ERR;
+ }
+
+ return tor_tls_classify_client_ciphers(ssl, session->ciphers) >= CIPHERS_V2;
}
/** Invoked when we're accepting a connection on <b>ssl</b>, and the connection
@@ -1400,7 +1628,7 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
}
/* Now check the cipher list. */
- if (tor_tls_client_is_using_v2_ciphers(ssl, ADDR(tls))) {
+ if (tor_tls_client_is_using_v2_ciphers(ssl)) {
if (tls->wasV2Handshake)
return; /* We already turned this stuff off for the first handshake;
* This is a renegotiation. */
@@ -1426,6 +1654,48 @@ tor_tls_server_info_callback(const SSL *ssl, int type, int val)
}
#endif
+#if OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0)
+/** Callback to get invoked on a server after we've read the list of ciphers
+ * the client supports, but before we pick our own ciphersuite.
+ *
+ * We can't abuse an info_cb for this, since by the time one of the
+ * client_hello info_cbs is called, we've already picked which ciphersuite to
+ * use.
+ *
+ * Technically, this function is an abuse of this callback, since the point of
+ * a session_secret_cb is to try to set up and/or verify a shared-secret for
+ * authentication on the fly. But as long as we return 0, we won't actually be
+ * setting up a shared secret, and all will be fine.
+ */
+static int
+tor_tls_session_secret_cb(SSL *ssl, void *secret, int *secret_len,
+ STACK_OF(SSL_CIPHER) *peer_ciphers,
+ SSL_CIPHER **cipher, void *arg)
+{
+ (void) secret;
+ (void) secret_len;
+ (void) peer_ciphers;
+ (void) cipher;
+ (void) arg;
+
+ if (tor_tls_classify_client_ciphers(ssl, peer_ciphers) ==
+ CIPHERS_UNRESTRICTED) {
+ SSL_set_cipher_list(ssl, UNRESTRICTED_SERVER_CIPHER_LIST);
+ }
+
+ SSL_set_session_secret_cb(ssl, NULL, NULL);
+
+ return 0;
+}
+static void
+tor_tls_setup_session_secret_cb(tor_tls_t *tls)
+{
+ SSL_set_session_secret_cb(tls->ssl, tor_tls_session_secret_cb, NULL);
+}
+#else
+#define tor_tls_setup_session_secret_cb(tls) STMT_NIL
+#endif
+
/** Explain which ciphers we're missing. */
static void
log_unsupported_ciphers(smartlist_t *unsupported)
@@ -1625,6 +1895,9 @@ tor_tls_new(int sock, int isServer)
SSL_set_info_callback(result->ssl, tor_tls_debug_state_callback);
}
+ if (isServer)
+ tor_tls_setup_session_secret_cb(result);
+
/* Not expected to get called. */
tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object");
return result;
@@ -1721,6 +1994,10 @@ tor_tls_free(tor_tls_t *tls)
if (!tls)
return;
tor_assert(tls->ssl);
+ {
+ size_t r,w;
+ tor_tls_get_n_raw_bytes(tls,&r,&w); /* ensure written_by_tls is updated */
+ }
#ifdef SSL_set_tlsext_host_name
SSL_set_tlsext_host_name(tls->ssl, NULL);
#endif
@@ -1761,7 +2038,7 @@ tor_tls_read(tor_tls_t *tls, char *cp, size_t len)
return r;
}
err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG, LD_NET);
- if (err == _TOR_TLS_ZERORETURN || err == TOR_TLS_CLOSE) {
+ if (err == TOR_TLS_ZERORETURN_ || err == TOR_TLS_CLOSE) {
log_debug(LD_NET,"read returned r=%d; TLS is closed",r);
tls->state = TOR_TLS_ST_CLOSED;
return TOR_TLS_CLOSE;
@@ -1772,6 +2049,13 @@ tor_tls_read(tor_tls_t *tls, char *cp, size_t len)
}
}
+/** Total number of bytes that we've used TLS to send. Used to track TLS
+ * overhead. */
+static uint64_t total_bytes_written_over_tls = 0;
+/** Total number of bytes that TLS has put on the network for us. Used to
+ * track TLS overhead. */
+static uint64_t total_bytes_written_by_tls = 0;
+
/** Underlying function for TLS writing. Write up to <b>n</b>
* characters from <b>cp</b> onto <b>tls</b>. On success, returns the
* number of characters written. On failure, returns TOR_TLS_ERROR,
@@ -1798,6 +2082,7 @@ tor_tls_write(tor_tls_t *tls, const char *cp, size_t n)
r = SSL_write(tls->ssl, cp, (int)n);
err = tor_tls_get_error(tls, r, 0, "writing", LOG_INFO, LD_NET);
if (err == TOR_TLS_DONE) {
+ total_bytes_written_over_tls += r;
return r;
}
if (err == TOR_TLS_WANTWRITE || err == TOR_TLS_WANTREAD) {
@@ -1866,7 +2151,7 @@ tor_tls_finish_handshake(tor_tls_t *tls)
/* There doesn't seem to be a clear OpenSSL API to clear mode flags. */
tls->ssl->mode &= ~SSL_MODE_NO_AUTO_CHAIN;
#ifdef V2_HANDSHAKE_SERVER
- if (tor_tls_client_is_using_v2_ciphers(tls->ssl, ADDR(tls))) {
+ if (tor_tls_client_is_using_v2_ciphers(tls->ssl)) {
/* This check is redundant, but back when we did it in the callback,
* we might have not been able to look up the tor_tls_t if the code
* was buggy. Fixing that. */
@@ -1974,7 +2259,7 @@ tor_tls_shutdown(tor_tls_t *tls)
} while (r>0);
err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading to shut down",
LOG_INFO, LD_NET);
- if (err == _TOR_TLS_ZERORETURN) {
+ if (err == TOR_TLS_ZERORETURN_) {
tls->state = TOR_TLS_ST_GOTCLOSE;
/* fall through... */
} else {
@@ -1990,11 +2275,11 @@ tor_tls_shutdown(tor_tls_t *tls)
}
err = tor_tls_get_error(tls, r, CATCH_SYSCALL|CATCH_ZERO, "shutting down",
LOG_INFO, LD_NET);
- if (err == _TOR_TLS_SYSCALL) {
+ if (err == TOR_TLS_SYSCALL_) {
/* The underlying TCP connection closed while we were shutting down. */
tls->state = TOR_TLS_ST_CLOSED;
return TOR_TLS_DONE;
- } else if (err == _TOR_TLS_ZERORETURN) {
+ } else if (err == TOR_TLS_ZERORETURN_) {
/* The TLS connection says that it sent a shutdown record, but
* isn't done shutting down yet. Make sure that this hasn't
* happened before, then go back to the start of the function
@@ -2002,7 +2287,7 @@ tor_tls_shutdown(tor_tls_t *tls)
*/
if (tls->state == TOR_TLS_ST_GOTCLOSE ||
tls->state == TOR_TLS_ST_SENTCLOSE) {
- log(LOG_WARN, LD_NET,
+ log_warn(LD_NET,
"TLS returned \"half-closed\" value while already half-closed");
return TOR_TLS_ERROR_MISC;
}
@@ -2050,9 +2335,10 @@ log_cert_lifetime(int severity, const X509 *cert, const char *problem)
char mytime[33];
time_t now = time(NULL);
struct tm tm;
+ size_t n;
if (problem)
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"Certificate %s. Either their clock is set wrong, or your clock "
"is wrong.",
problem);
@@ -2075,11 +2361,17 @@ log_cert_lifetime(int severity, const X509 *cert, const char *problem)
BIO_get_mem_ptr(bio, &buf);
s2 = tor_strndup(buf->data, buf->length);
- strftime(mytime, 32, "%b %d %H:%M:%S %Y GMT", tor_gmtime_r(&now, &tm));
-
- log(severity, LD_GENERAL,
- "(certificate lifetime runs from %s through %s. Your time is %s.)",
- s1,s2,mytime);
+ n = strftime(mytime, 32, "%b %d %H:%M:%S %Y UTC", tor_gmtime_r(&now, &tm));
+ if (n > 0) {
+ tor_log(severity, LD_GENERAL,
+ "(certificate lifetime runs from %s through %s. Your time is %s.)",
+ s1,s2,mytime);
+ } else {
+ tor_log(severity, LD_GENERAL,
+ "(certificate lifetime runs from %s through %s. "
+ "Couldn't get your time.)",
+ s1, s2);
+ }
end:
/* Not expected to get invoked */
@@ -2164,7 +2456,7 @@ tor_tls_verify(int severity, tor_tls_t *tls, crypto_pk_t **identity_key)
rsa = EVP_PKEY_get1_RSA(id_pkey);
if (!rsa)
goto done;
- *identity_key = _crypto_new_pk_from_rsa(rsa);
+ *identity_key = crypto_new_pk_from_rsa_(rsa);
r = 0;
@@ -2287,18 +2579,31 @@ tor_tls_get_n_raw_bytes(tor_tls_t *tls, size_t *n_read, size_t *n_written)
"r=%lu, last_read=%lu, w=%lu, last_written=%lu",
r, tls->last_read_count, w, tls->last_write_count);
}
+ total_bytes_written_by_tls += *n_written;
tls->last_read_count = r;
tls->last_write_count = w;
}
+/** Return a ratio of the bytes that TLS has sent to the bytes that we've told
+ * it to send. Used to track whether our TLS records are getting too tiny. */
+MOCK_IMPL(double,
+tls_get_write_overhead_ratio,(void))
+{
+ if (total_bytes_written_over_tls == 0)
+ return 1.0;
+
+ return U64_TO_DBL(total_bytes_written_by_tls) /
+ U64_TO_DBL(total_bytes_written_over_tls);
+}
+
/** Implement check_no_tls_errors: If there are any pending OpenSSL
* errors, log an error message. */
void
-_check_no_tls_errors(const char *fname, int line)
+check_no_tls_errors_(const char *fname, int line)
{
if (ERR_peek_error() == 0)
return;
- log(LOG_WARN, LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
+ log_warn(LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
tor_fix_source_file(fname), line);
tls_log_errors(NULL, LOG_WARN, LD_NET, NULL);
}
diff --git a/src/common/tortls.h b/src/common/tortls.h
index 491a5419d..a76ba3bc7 100644
--- a/src/common/tortls.h
+++ b/src/common/tortls.h
@@ -1,10 +1,10 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_TORTLS_H
-#define _TOR_TORTLS_H
+#ifndef TOR_TORTLS_H
+#define TOR_TORTLS_H
/**
* \file tortls.h
@@ -13,6 +13,7 @@
#include "crypto.h"
#include "compat.h"
+#include "testsupport.h"
/* Opaque structure to hold a TLS connection. */
typedef struct tor_tls_t tor_tls_t;
@@ -21,7 +22,7 @@ typedef struct tor_tls_t tor_tls_t;
typedef struct tor_cert_t tor_cert_t;
/* Possible return values for most tor_tls_* functions. */
-#define _MIN_TOR_TLS_ERROR_VAL -9
+#define MIN_TOR_TLS_ERROR_VAL_ -9
#define TOR_TLS_ERROR_MISC -9
/* Rename to unexpected close or something. XXXX */
#define TOR_TLS_ERROR_IO -8
@@ -54,7 +55,12 @@ const char *tor_tls_err_to_string(int err);
void tor_tls_get_state_description(tor_tls_t *tls, char *buf, size_t sz);
void tor_tls_free_all(void);
-int tor_tls_context_init(int is_public_server,
+
+#define TOR_TLS_CTX_IS_PUBLIC_SERVER (1u<<0)
+#define TOR_TLS_CTX_USE_ECDHE_P256 (1u<<1)
+#define TOR_TLS_CTX_USE_ECDHE_P224 (1u<<2)
+
+int tor_tls_context_init(unsigned flags,
crypto_pk_t *client_identity,
crypto_pk_t *server_identity,
unsigned int key_lifetime);
@@ -90,6 +96,8 @@ void tor_tls_get_buffer_sizes(tor_tls_t *tls,
size_t *rbuf_capacity, size_t *rbuf_bytes,
size_t *wbuf_capacity, size_t *wbuf_bytes);
+MOCK_DECL(double, tls_get_write_overhead_ratio, (void));
+
int tor_tls_used_v1_handshake(tor_tls_t *tls);
int tor_tls_received_v3_certificate(tor_tls_t *tls);
int tor_tls_get_num_server_handshakes(tor_tls_t *tls);
@@ -98,9 +106,9 @@ int tor_tls_get_tlssecrets(tor_tls_t *tls, uint8_t *secrets_out);
/* Log and abort if there are unhandled TLS errors in OpenSSL's error stack.
*/
-#define check_no_tls_errors() _check_no_tls_errors(__FILE__,__LINE__)
+#define check_no_tls_errors() check_no_tls_errors_(__FILE__,__LINE__)
-void _check_no_tls_errors(const char *fname, int line);
+void check_no_tls_errors_(const char *fname, int line);
void tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
int severity, int domain, const char *doing);
@@ -129,6 +137,7 @@ int tor_tls_cert_is_valid(int severity,
const tor_cert_t *cert,
const tor_cert_t *signing_cert,
int check_rsa_1024);
+const char *tor_tls_get_ciphersuite_name(tor_tls_t *tls);
#endif
diff --git a/src/common/util.c b/src/common/util.c
index 6fb597a3a..e27036a84 100644
--- a/src/common/util.c
+++ b/src/common/util.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -20,11 +20,12 @@
#define UTIL_PRIVATE
#include "util.h"
#include "torlog.h"
-#undef log
#include "crypto.h"
#include "torint.h"
#include "container.h"
#include "address.h"
+#include "sandbox.h"
+#include "backtrace.h"
#ifdef _WIN32
#include <io.h>
@@ -39,8 +40,8 @@
#endif
/* math.h needs this on Linux */
-#ifndef __USE_ISOC99
-#define __USE_ISOC99 1
+#ifndef _USE_ISOC99_
+#define _USE_ISOC99_ 1
#endif
#include <math.h>
#include <stdlib.h>
@@ -95,6 +96,23 @@
#endif
/* =====
+ * Assertion helper.
+ * ===== */
+/** Helper for tor_assert: report the assertion failure. */
+void
+tor_assertion_failed_(const char *fname, unsigned int line,
+ const char *func, const char *expr)
+{
+ char buf[256];
+ log_err(LD_BUG, "%s:%u: %s: Assertion %s failed; aborting.",
+ fname, line, func, expr);
+ tor_snprintf(buf, sizeof(buf),
+ "Assertion %s failed in %s at %s:%u",
+ expr, func, fname, line);
+ log_backtrace(LOG_ERR, LD_BUG, buf);
+}
+
+/* =====
* Memory management
* ===== */
#ifdef USE_DMALLOC
@@ -125,7 +143,7 @@
* ignored otherwise.
*/
void *
-_tor_malloc(size_t size DMALLOC_PARAMS)
+tor_malloc_(size_t size DMALLOC_PARAMS)
{
void *result;
@@ -159,7 +177,7 @@ _tor_malloc(size_t size DMALLOC_PARAMS)
* the process on error. (Same as calloc(size,1), but never returns NULL.)
*/
void *
-_tor_malloc_zero(size_t size DMALLOC_PARAMS)
+tor_malloc_zero_(size_t size DMALLOC_PARAMS)
{
/* You may ask yourself, "wouldn't it be smart to use calloc instead of
* malloc+memset? Perhaps libc's calloc knows some nifty optimization trick
@@ -167,7 +185,7 @@ _tor_malloc_zero(size_t size DMALLOC_PARAMS)
* we're allocating something very big (it knows if it just got the memory
* from the OS in a pre-zeroed state). We don't want to use tor_malloc_zero
* for big stuff, so we don't bother with calloc. */
- void *result = _tor_malloc(size DMALLOC_FN_ARGS);
+ void *result = tor_malloc_(size DMALLOC_FN_ARGS);
memset(result, 0, size);
return result;
}
@@ -184,7 +202,7 @@ _tor_malloc_zero(size_t size DMALLOC_PARAMS)
* smaller than size). Don't do that then.
*/
void *
-_tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS)
+tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS)
{
/* You may ask yourself, "wouldn't it be smart to use calloc instead of
* malloc+memset? Perhaps libc's calloc knows some nifty optimization trick
@@ -197,7 +215,7 @@ _tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS)
tor_assert(nmemb < max_nmemb);
- result = _tor_malloc_zero((nmemb * size) DMALLOC_FN_ARGS);
+ result = tor_malloc_zero_((nmemb * size) DMALLOC_FN_ARGS);
return result;
}
@@ -206,7 +224,7 @@ _tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS)
* terminate. (Like realloc(ptr,size), but never returns NULL.)
*/
void *
-_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS)
+tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS)
{
void *result;
@@ -230,7 +248,7 @@ _tor_realloc(void *ptr, size_t size DMALLOC_PARAMS)
* NULL.)
*/
char *
-_tor_strdup(const char *s DMALLOC_PARAMS)
+tor_strdup_(const char *s DMALLOC_PARAMS)
{
char *dup;
tor_assert(s);
@@ -254,12 +272,12 @@ _tor_strdup(const char *s DMALLOC_PARAMS)
* NULL.)
*/
char *
-_tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
+tor_strndup_(const char *s, size_t n DMALLOC_PARAMS)
{
char *dup;
tor_assert(s);
tor_assert(n < SIZE_T_CEILING);
- dup = _tor_malloc((n+1) DMALLOC_FN_ARGS);
+ dup = tor_malloc_((n+1) DMALLOC_FN_ARGS);
/* Performance note: Ordinarily we prefer strlcpy to strncpy. But
* this function gets called a whole lot, and platform strncpy is
* much faster than strlcpy when strlen(s) is much longer than n.
@@ -272,55 +290,38 @@ _tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
/** Allocate a chunk of <b>len</b> bytes, with the same contents as the
* <b>len</b> bytes starting at <b>mem</b>. */
void *
-_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS)
+tor_memdup_(const void *mem, size_t len DMALLOC_PARAMS)
{
char *dup;
tor_assert(len < SIZE_T_CEILING);
tor_assert(mem);
- dup = _tor_malloc(len DMALLOC_FN_ARGS);
+ dup = tor_malloc_(len DMALLOC_FN_ARGS);
+ memcpy(dup, mem, len);
+ return dup;
+}
+
+/** As tor_memdup(), but add an extra 0 byte at the end of the resulting
+ * memory. */
+void *
+tor_memdup_nulterm_(const void *mem, size_t len DMALLOC_PARAMS)
+{
+ char *dup;
+ tor_assert(len < SIZE_T_CEILING+1);
+ tor_assert(mem);
+ dup = tor_malloc_(len+1 DMALLOC_FN_ARGS);
memcpy(dup, mem, len);
+ dup[len] = '\0';
return dup;
}
/** Helper for places that need to take a function pointer to the right
* spelling of "free()". */
void
-_tor_free(void *mem)
+tor_free_(void *mem)
{
tor_free(mem);
}
-#if defined(HAVE_MALLOC_GOOD_SIZE) && !defined(HAVE_MALLOC_GOOD_SIZE_PROTOTYPE)
-/* Some version of Mac OSX have malloc_good_size in their libc, but not
- * actually defined in malloc/malloc.h. We detect this and work around it by
- * prototyping.
- */
-extern size_t malloc_good_size(size_t size);
-#endif
-
-/** Allocate and return a chunk of memory of size at least *<b>size</b>, using
- * the same resources we would use to malloc *<b>sizep</b>. Set *<b>sizep</b>
- * to the number of usable bytes in the chunk of memory. */
-void *
-_tor_malloc_roundup(size_t *sizep DMALLOC_PARAMS)
-{
-#ifdef HAVE_MALLOC_GOOD_SIZE
- tor_assert(*sizep < SIZE_T_CEILING);
- *sizep = malloc_good_size(*sizep);
- return _tor_malloc(*sizep DMALLOC_FN_ARGS);
-#elif 0 && defined(HAVE_MALLOC_USABLE_SIZE) && !defined(USE_DMALLOC)
- /* Never use malloc_usable_size(); it makes valgrind really unhappy,
- * and doesn't win much in terms of usable space where it exists. */
- void *result;
- tor_assert(*sizep < SIZE_T_CEILING);
- result = _tor_malloc(*sizep DMALLOC_FN_ARGS);
- *sizep = malloc_usable_size(result);
- return result;
-#else
- return _tor_malloc(*sizep DMALLOC_FN_ARGS);
-#endif
-}
-
/** Call the platform malloc info function, and dump the results to the log at
* level <b>severity</b>. If no such function exists, do nothing. */
void
@@ -354,8 +355,8 @@ tor_log_mallinfo(int severity)
* ===== */
/**
- * Returns the natural logarithm of d base 2. We define this wrapper here so
- * as to make it easier not to conflict with Tor's log() macro.
+ * Returns the natural logarithm of d base e. We defined this wrapper here so
+ * to avoid conflicts with old versions of tor_log(), which were named log().
*/
double
tor_mathlog(double d)
@@ -363,9 +364,9 @@ tor_mathlog(double d)
return log(d);
}
-/** Return the long integer closest to d. We define this wrapper here so
- * that not all users of math.h need to use the right incancations to get
- * the c99 functions. */
+/** Return the long integer closest to <b>d</b>. We define this wrapper
+ * here so that not all users of math.h need to use the right incantations
+ * to get the c99 functions. */
long
tor_lround(double d)
{
@@ -378,6 +379,21 @@ tor_lround(double d)
#endif
}
+/** Return the 64-bit integer closest to d. We define this wrapper here so
+ * that not all users of math.h need to use the right incantations to get the
+ * c99 functions. */
+int64_t
+tor_llround(double d)
+{
+#if defined(HAVE_LLROUND)
+ return (int64_t)llround(d);
+#elif defined(HAVE_RINT)
+ return (int64_t)rint(d);
+#else
+ return (int64_t)(d > 0 ? d + 0.5 : ceil(d - 0.5));
+#endif
+}
+
/** Returns floor(log2(u64)). If u64 is 0, (incorrectly) returns 0. */
int
tor_log2(uint64_t u64)
@@ -410,12 +426,24 @@ tor_log2(uint64_t u64)
return r;
}
-/** Return the power of 2 closest to <b>u64</b>. */
+/** Return the power of 2 in range [1,UINT64_MAX] closest to <b>u64</b>. If
+ * there are two powers of 2 equally close, round down. */
uint64_t
round_to_power_of_2(uint64_t u64)
{
- int lg2 = tor_log2(u64);
- uint64_t low = U64_LITERAL(1) << lg2, high = U64_LITERAL(1) << (lg2+1);
+ int lg2;
+ uint64_t low;
+ uint64_t high;
+ if (u64 == 0)
+ return 1;
+
+ lg2 = tor_log2(u64);
+ low = U64_LITERAL(1) << lg2;
+
+ if (lg2 == 63)
+ return low;
+
+ high = U64_LITERAL(1) << (lg2+1);
if (high - u64 < u64 - low)
return high;
else
@@ -655,6 +683,16 @@ fast_memcmpstart(const void *mem, size_t memlen,
return fast_memcmp(mem, prefix, plen);
}
+/** Given a nul-terminated string s, set every character before the nul
+ * to zero. */
+void
+tor_strclear(char *s)
+{
+ while (*s) {
+ *s++ = '\0';
+ }
+}
+
/** Return a pointer to the first char of s that is not whitespace and
* not a comment, or to the terminating NUL if no such character exists.
*/
@@ -860,6 +898,39 @@ tor_digest_is_zero(const char *digest)
return tor_memeq(digest, ZERO_DIGEST, DIGEST_LEN);
}
+/** Return true if <b>string</b> is a valid 'key=[value]' string.
+ * "value" is optional, to indicate the empty string. Log at logging
+ * <b>severity</b> if something ugly happens. */
+int
+string_is_key_value(int severity, const char *string)
+{
+ /* position of equal sign in string */
+ const char *equal_sign_pos = NULL;
+
+ tor_assert(string);
+
+ if (strlen(string) < 2) { /* "x=" is shortest args string */
+ tor_log(severity, LD_GENERAL, "'%s' is too short to be a k=v value.",
+ escaped(string));
+ return 0;
+ }
+
+ equal_sign_pos = strchr(string, '=');
+ if (!equal_sign_pos) {
+ tor_log(severity, LD_GENERAL, "'%s' is not a k=v value.", escaped(string));
+ return 0;
+ }
+
+ /* validate that the '=' is not in the beginning of the string. */
+ if (equal_sign_pos == string) {
+ tor_log(severity, LD_GENERAL, "'%s' is not a valid k=v value.",
+ escaped(string));
+ return 0;
+ }
+
+ return 1;
+}
+
/** Return true iff the DIGEST256_LEN bytes in digest are all zero. */
int
tor_digest256_is_zero(const char *digest)
@@ -1013,7 +1084,7 @@ base16_encode(char *dest, size_t destlen, const char *src, size_t srclen)
/** Helper: given a hex digit, return its value, or -1 if it isn't hex. */
static INLINE int
-_hex_decode_digit(char c)
+hex_decode_digit_(char c)
{
switch (c) {
case '0': return 0;
@@ -1041,7 +1112,7 @@ _hex_decode_digit(char c)
int
hex_decode_digit(char c)
{
- return _hex_decode_digit(c);
+ return hex_decode_digit_(c);
}
/** Given a hexadecimal string of <b>srclen</b> bytes in <b>src</b>, decode it
@@ -1059,8 +1130,8 @@ base16_decode(char *dest, size_t destlen, const char *src, size_t srclen)
return -1;
end = src+srclen;
while (src<end) {
- v1 = _hex_decode_digit(*src);
- v2 = _hex_decode_digit(*(src+1));
+ v1 = hex_decode_digit_(*src);
+ v2 = hex_decode_digit_(*(src+1));
if (v1<0||v2<0)
return -1;
*(uint8_t*)dest = (v1<<4)|v2;
@@ -1160,130 +1231,58 @@ esc_for_log(const char *s)
const char *
escaped(const char *s)
{
- static char *_escaped_val = NULL;
- tor_free(_escaped_val);
+ static char *escaped_val_ = NULL;
+ tor_free(escaped_val_);
if (s)
- _escaped_val = esc_for_log(s);
+ escaped_val_ = esc_for_log(s);
else
- _escaped_val = NULL;
+ escaped_val_ = NULL;
- return _escaped_val;
+ return escaped_val_;
}
-/** Rudimentary string wrapping code: given a un-wrapped <b>string</b> (no
- * newlines!), break the string into newline-terminated lines of no more than
- * <b>width</b> characters long (not counting newline) and insert them into
- * <b>out</b> in order. Precede the first line with prefix0, and subsequent
- * lines with prefixRest.
- */
-/* This uses a stupid greedy wrapping algorithm right now:
- * - For each line:
- * - Try to fit as much stuff as possible, but break on a space.
- * - If the first "word" of the line will extend beyond the allowable
- * width, break the word at the end of the width.
- */
-void
-wrap_string(smartlist_t *out, const char *string, size_t width,
- const char *prefix0, const char *prefixRest)
+/** 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_pt_args(const char *string, const char *chars_to_escape)
{
- size_t p0Len, pRestLen, pCurLen;
- const char *eos, *prefixCur;
- tor_assert(out);
+ char *new_string = NULL;
+ char *new_cp = NULL;
+ size_t length, new_length;
+
tor_assert(string);
- tor_assert(width);
- if (!prefix0)
- prefix0 = "";
- if (!prefixRest)
- prefixRest = "";
-
- p0Len = strlen(prefix0);
- pRestLen = strlen(prefixRest);
- tor_assert(width > p0Len && width > pRestLen);
- eos = strchr(string, '\0');
- tor_assert(eos);
- pCurLen = p0Len;
- prefixCur = prefix0;
-
- while ((eos-string)+pCurLen > width) {
- const char *eol = string + width - pCurLen;
- while (eol > string && *eol != ' ')
- --eol;
- /* eol is now the last space that can fit, or the start of the string. */
- if (eol > string) {
- size_t line_len = (eol-string) + pCurLen + 2;
- char *line = tor_malloc(line_len);
- memcpy(line, prefixCur, pCurLen);
- memcpy(line+pCurLen, string, eol-string);
- line[line_len-2] = '\n';
- line[line_len-1] = '\0';
- smartlist_add(out, line);
- string = eol + 1;
- } else {
- size_t line_len = width + 2;
- char *line = tor_malloc(line_len);
- memcpy(line, prefixCur, pCurLen);
- memcpy(line+pCurLen, string, width - pCurLen);
- line[line_len-2] = '\n';
- line[line_len-1] = '\0';
- smartlist_add(out, line);
- string += width-pCurLen;
- }
- prefixCur = prefixRest;
- pCurLen = pRestLen;
- }
- if (string < eos) {
- size_t line_len = (eos-string) + pCurLen + 2;
- char *line = tor_malloc(line_len);
- memcpy(line, prefixCur, pCurLen);
- memcpy(line+pCurLen, string, eos-string);
- line[line_len-2] = '\n';
- line[line_len-1] = '\0';
- smartlist_add(out, line);
+ length = strlen(string);
+
+ if (!length) /* If we were given the empty string, return the same. */
+ return tor_strdup("");
+ /* (new_length > SIZE_MAX) => ((length * 2) + 1 > SIZE_MAX) =>
+ (length*2 > SIZE_MAX - 1) => (length > (SIZE_MAX - 1)/2) */
+ if (length > (SIZE_MAX - 1)/2) /* check for overflow */
+ return NULL;
+
+ /* this should be enough even if all characters must be escaped */
+ new_length = (length * 2) + 1;
+
+ new_string = new_cp = tor_malloc(new_length);
+
+ while (*string) {
+ if (strchr(chars_to_escape, *string))
+ *new_cp++ = '\\';
+
+ *new_cp++ = *string++;
}
+
+ *new_cp = '\0'; /* NUL-terminate the new string */
+
+ return new_string;
}
/* =====
* Time
* ===== */
-/**
- * Converts struct timeval to a double value.
- * Preserves microsecond precision, but just barely.
- * Error is approx +/- 0.1 usec when dealing with epoch values.
- */
-double
-tv_to_double(const struct timeval *tv)
-{
- double conv = tv->tv_sec;
- conv += tv->tv_usec/1000000.0;
- return conv;
-}
-
-/**
- * Converts timeval to milliseconds.
- */
-int64_t
-tv_to_msec(const struct timeval *tv)
-{
- int64_t conv = ((int64_t)tv->tv_sec)*1000L;
- /* Round ghetto-style */
- conv += ((int64_t)tv->tv_usec+500)/1000L;
- return conv;
-}
-
-/**
- * Converts timeval to microseconds.
- */
-int64_t
-tv_to_usec(const struct timeval *tv)
-{
- int64_t conv = ((int64_t)tv->tv_sec)*1000000L;
- conv += tv->tv_usec;
- return conv;
-}
-
/** Return the number of microseconds elapsed between *start and *end.
*/
long
@@ -1322,6 +1321,18 @@ tv_mdiff(const struct timeval *start, const struct timeval *end)
return mdiff;
}
+/**
+ * Converts timeval to milliseconds.
+ */
+int64_t
+tv_to_msec(const struct timeval *tv)
+{
+ int64_t conv = ((int64_t)tv->tv_sec)*1000L;
+ /* Round ghetto-style */
+ conv += ((int64_t)tv->tv_usec+500)/1000L;
+ return conv;
+}
+
/** Yield true iff <b>y</b> is a leap-year. */
#define IS_LEAPYEAR(y) (!(y % 4) && ((y % 100) || !(y % 400)))
/** Helper: Return the number of leap-days between Jan 1, y1 and Jan 1, y2. */
@@ -1336,7 +1347,7 @@ n_leapdays(int y1, int y2)
static const int days_per_month[] =
{ 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
-/** Compute a time_t given a struct tm. The result is given in GMT, and
+/** Compute a time_t given a struct tm. The result is given in UTC, and
* does not account for leap seconds. Return 0 on success, -1 on failure.
*/
int
@@ -1377,10 +1388,11 @@ static const char *MONTH_NAMES[] =
{ "Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec" };
-/** Set <b>buf</b> to the RFC1123 encoding of the GMT value of <b>t</b>.
+/** Set <b>buf</b> to the RFC1123 encoding of the UTC value of <b>t</b>.
* The buffer must be at least RFC1123_TIME_LEN+1 bytes long.
*
- * (RFC1123 format is Fri, 29 Sep 2006 15:54:20 GMT)
+ * (RFC1123 format is "Fri, 29 Sep 2006 15:54:20 GMT". Note the "GMT"
+ * rather than "UTC".)
*/
void
format_rfc1123_time(char *buf, time_t t)
@@ -1398,8 +1410,11 @@ format_rfc1123_time(char *buf, time_t t)
memcpy(buf+8, MONTH_NAMES[tm.tm_mon], 3);
}
-/** Parse the RFC1123 encoding of some time (in GMT) from <b>buf</b>,
- * and store the result in *<b>t</b>.
+/** Parse the (a subset of) the RFC1123 encoding of some time (in UTC) from
+ * <b>buf</b>, and store the result in *<b>t</b>.
+ *
+ * Note that we only accept the subset generated by format_rfc1123_time above,
+ * not the full range of formats suggested by RFC 1123.
*
* Return 0 on success, -1 on failure.
*/
@@ -1501,7 +1516,7 @@ void
format_iso_time_nospace_usec(char *buf, const struct timeval *tv)
{
tor_assert(tv);
- format_iso_time_nospace(buf, tv->tv_sec);
+ format_iso_time_nospace(buf, (time_t)tv->tv_sec);
tor_snprintf(buf+ISO_TIME_LEN, 8, ".%06d", (int)tv->tv_usec);
}
@@ -1815,7 +1830,8 @@ file_status(const char *fname)
int r;
f = tor_strdup(fname);
clean_name_for_stat(f);
- r = stat(f, &st);
+ log_debug(LD_FS, "stat()ing %s", f);
+ r = stat(sandbox_intern_string(f), &st);
tor_free(f);
if (r) {
if (errno == ENOENT) {
@@ -1827,6 +1843,10 @@ file_status(const char *fname)
return FN_DIR;
else if (st.st_mode & S_IFREG)
return FN_FILE;
+#ifndef _WIN32
+ else if (st.st_mode & S_IFIFO)
+ return FN_FILE;
+#endif
else
return FN_ERROR;
}
@@ -1851,7 +1871,7 @@ check_private_dir(const char *dirname, cpd_check_t check,
char *f;
#ifndef _WIN32
int mask;
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
uid_t running_uid;
gid_t running_gid;
#else
@@ -1861,7 +1881,8 @@ check_private_dir(const char *dirname, cpd_check_t check,
tor_assert(dirname);
f = tor_strdup(dirname);
clean_name_for_stat(f);
- r = stat(f, &st);
+ log_debug(LD_FS, "stat()ing %s", f);
+ r = stat(sandbox_intern_string(f), &st);
tor_free(f);
if (r) {
if (errno != ENOENT) {
@@ -1897,7 +1918,7 @@ check_private_dir(const char *dirname, cpd_check_t check,
if (effective_user) {
/* Look up the user and group information.
* If we have a problem, bail out. */
- pw = getpwnam(effective_user);
+ pw = tor_getpwnam(effective_user);
if (pw == NULL) {
log_warn(LD_CONFIG, "Error setting configured user: %s not found",
effective_user);
@@ -1911,13 +1932,13 @@ check_private_dir(const char *dirname, cpd_check_t check,
}
if (st.st_uid != running_uid) {
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
char *process_ownername = NULL;
- pw = getpwuid(running_uid);
+ pw = tor_getpwuid(running_uid);
process_ownername = pw ? tor_strdup(pw->pw_name) : tor_strdup("<unknown>");
- pw = getpwuid(st.st_uid);
+ pw = tor_getpwuid(st.st_uid);
log_warn(LD_FS, "%s is not owned by this user (%s, %d) but by "
"%s (%d). Perhaps you are running Tor as the wrong user?",
@@ -1983,7 +2004,8 @@ write_str_to_file(const char *fname, const char *str, int bin)
#ifdef _WIN32
if (!bin && strchr(str, '\r')) {
log_warn(LD_BUG,
- "We're writing a text string that already contains a CR.");
+ "We're writing a text string that already contains a CR to %s",
+ escaped(fname));
}
#endif
return write_bytes_to_file(fname, str, strlen(str), bin);
@@ -2047,8 +2069,10 @@ start_writing_to_file(const char *fname, int open_flags, int mode,
open_flags &= ~O_EXCL;
new_file->rename_on_close = 1;
}
+#if O_BINARY != 0
if (open_flags & O_BINARY)
new_file->binary = 1;
+#endif
new_file->fd = tor_open_cloexec(open_name, open_flags, mode);
if (new_file->fd < 0) {
@@ -2120,6 +2144,7 @@ static int
finish_writing_to_file_impl(open_file_t *file_data, int abort_write)
{
int r = 0;
+
tor_assert(file_data && file_data->filename);
if (file_data->stdio_file) {
if (fclose(file_data->stdio_file)) {
@@ -2136,7 +2161,13 @@ finish_writing_to_file_impl(open_file_t *file_data, int abort_write)
if (file_data->rename_on_close) {
tor_assert(file_data->tempname && file_data->filename);
if (abort_write) {
- unlink(file_data->tempname);
+ int res = unlink(file_data->tempname);
+ if (res != 0) {
+ /* We couldn't unlink and we'll leave a mess behind */
+ log_warn(LD_FS, "Failed to unlink %s: %s",
+ file_data->tempname, strerror(errno));
+ r = -1;
+ }
} else {
tor_assert(strcmp(file_data->filename, file_data->tempname));
if (replace_file(file_data->tempname, file_data->filename)) {
@@ -2202,12 +2233,20 @@ write_chunks_to_file_impl(const char *fname, const smartlist_t *chunks,
return -1;
}
-/** Given a smartlist of sized_chunk_t, write them atomically to a file
- * <b>fname</b>, overwriting or creating the file as necessary. */
+/** Given a smartlist of sized_chunk_t, write them to a file
+ * <b>fname</b>, overwriting or creating the file as necessary.
+ * If <b>no_tempfile</b> is 0 then the file will be written
+ * atomically. */
int
-write_chunks_to_file(const char *fname, const smartlist_t *chunks, int bin)
+write_chunks_to_file(const char *fname, const smartlist_t *chunks, int bin,
+ int no_tempfile)
{
int flags = OPEN_FLAGS_REPLACE|(bin?O_BINARY:O_TEXT);
+
+ if (no_tempfile) {
+ /* O_APPEND stops write_chunks_to_file from using tempfiles */
+ flags |= O_APPEND;
+ }
return write_chunks_to_file_impl(fname, chunks, flags);
}
@@ -2228,9 +2267,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));
@@ -2257,6 +2296,46 @@ write_bytes_to_new_file(const char *fname, const char *str, size_t len,
(bin?O_BINARY:O_TEXT));
}
+/**
+ * Read the contents of the open file <b>fd</b> presuming it is a FIFO
+ * (or similar) file descriptor for which the size of the file isn't
+ * known ahead of time. Return NULL on failure, and a NUL-terminated
+ * string on success. On success, set <b>sz_out</b> to the number of
+ * bytes read.
+ */
+char *
+read_file_to_str_until_eof(int fd, size_t max_bytes_to_read, size_t *sz_out)
+{
+ ssize_t r;
+ size_t pos = 0;
+ char *string = NULL;
+ size_t string_max = 0;
+
+ if (max_bytes_to_read+1 >= SIZE_T_CEILING)
+ return NULL;
+
+ do {
+ /* XXXX This "add 1K" approach is a little goofy; if we care about
+ * performance here, we should be doubling. But in practice we shouldn't
+ * be using this function on big files anyway. */
+ string_max = pos + 1024;
+ if (string_max > max_bytes_to_read)
+ string_max = max_bytes_to_read + 1;
+ string = tor_realloc(string, string_max);
+ r = read(fd, string + pos, string_max - pos - 1);
+ if (r < 0) {
+ tor_free(string);
+ return NULL;
+ }
+
+ pos += r;
+ } while (r > 0 && pos < max_bytes_to_read);
+
+ *sz_out = pos;
+ string[pos] = '\0';
+ return string;
+}
+
/** Read the contents of <b>filename</b> into a newly allocated
* string; return the string on success or NULL on failure.
*
@@ -2305,8 +2384,26 @@ read_file_to_str(const char *filename, int flags, struct stat *stat_out)
return NULL;
}
- if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING)
+#ifndef _WIN32
+/** When we detect that we're reading from a FIFO, don't read more than
+ * this many bytes. It's insane overkill for most uses. */
+#define FIFO_READ_MAX (1024*1024)
+ if (S_ISFIFO(statbuf.st_mode)) {
+ size_t sz = 0;
+ string = read_file_to_str_until_eof(fd, FIFO_READ_MAX, &sz);
+ if (string && stat_out) {
+ statbuf.st_size = sz;
+ memcpy(stat_out, &statbuf, sizeof(struct stat));
+ }
+ close(fd);
+ return string;
+ }
+#endif
+
+ if ((uint64_t)(statbuf.st_size)+1 >= SIZE_T_CEILING) {
+ close(fd);
return NULL;
+ }
string = tor_malloc((size_t)(statbuf.st_size+1));
@@ -2466,10 +2563,13 @@ unescape_string(const char *s, char **result, size_t *size_out)
* key portion and *<b>value_out</b> to a new string holding the value portion
* of the line, and return a pointer to the start of the next line. If we run
* out of data, return a pointer to the end of the string. If we encounter an
- * error, return NULL.
+ * error, return NULL and set *<b>err_out</b> (if provided) to an error
+ * message.
*/
const char *
-parse_config_line_from_str(const char *line, char **key_out, char **value_out)
+parse_config_line_from_str_verbose(const char *line, char **key_out,
+ char **value_out,
+ const char **err_out)
{
/* I believe the file format here is supposed to be:
FILE = (EMPTYLINE | LINE)* (EMPTYLASTLINE | LASTLINE)?
@@ -2543,12 +2643,18 @@ parse_config_line_from_str(const char *line, char **key_out, char **value_out)
/* Find the end of the line. */
if (*line == '\"') { // XXX No continuation handling is done here
- if (!(line = unescape_string(line, value_out, NULL)))
- return NULL;
+ if (!(line = unescape_string(line, value_out, NULL))) {
+ if (err_out)
+ *err_out = "Invalid escape sequence in quoted string";
+ return NULL;
+ }
while (*line == ' ' || *line == '\t')
++line;
- if (*line && *line != '#' && *line != '\n')
+ if (*line && *line != '#' && *line != '\n') {
+ if (err_out)
+ *err_out = "Excess data after quoted string";
return NULL;
+ }
} else {
/* Look for the end of the line. */
while (*line && *line != '\n' && (*line != '#' || continuation)) {
@@ -2683,9 +2789,9 @@ digit_to_num(char d)
* success, store the result in <b>out</b>, advance bufp to the next
* character, and return 0. On failure, return -1. */
static int
-scan_unsigned(const char **bufp, unsigned *out, int width, int base)
+scan_unsigned(const char **bufp, unsigned long *out, int width, int base)
{
- unsigned result = 0;
+ unsigned long result = 0;
int scanned_so_far = 0;
const int hex = base==16;
tor_assert(base == 10 || base == 16);
@@ -2697,8 +2803,8 @@ scan_unsigned(const char **bufp, unsigned *out, int width, int base)
while (**bufp && (hex?TOR_ISXDIGIT(**bufp):TOR_ISDIGIT(**bufp))
&& scanned_so_far < width) {
int digit = hex?hex_decode_digit(*(*bufp)++):digit_to_num(*(*bufp)++);
- unsigned new_result = result * base + digit;
- if (new_result > UINT32_MAX || new_result < result)
+ unsigned long new_result = result * base + digit;
+ if (new_result < result)
return -1; /* over/underflow. */
result = new_result;
++scanned_so_far;
@@ -2711,6 +2817,89 @@ scan_unsigned(const char **bufp, unsigned *out, int width, int base)
return 0;
}
+/** Helper: Read an signed int from *<b>bufp</b> of up to <b>width</b>
+ * characters. (Handle arbitrary width if <b>width</b> is less than 0.) On
+ * success, store the result in <b>out</b>, advance bufp to the next
+ * character, and return 0. On failure, return -1. */
+static int
+scan_signed(const char **bufp, long *out, int width)
+{
+ int neg = 0;
+ unsigned long result = 0;
+
+ if (!bufp || !*bufp || !out)
+ return -1;
+ if (width<0)
+ width=MAX_SCANF_WIDTH;
+
+ if (**bufp == '-') {
+ neg = 1;
+ ++*bufp;
+ --width;
+ }
+
+ if (scan_unsigned(bufp, &result, width, 10) < 0)
+ return -1;
+
+ if (neg) {
+ if (result > ((unsigned long)LONG_MAX) + 1)
+ return -1; /* Underflow */
+ *out = -(long)result;
+ } else {
+ if (result > LONG_MAX)
+ return -1; /* Overflow */
+ *out = (long)result;
+ }
+
+ return 0;
+}
+
+/** Helper: Read a decimal-formatted double from *<b>bufp</b> of up to
+ * <b>width</b> characters. (Handle arbitrary width if <b>width</b> is less
+ * than 0.) On success, store the result in <b>out</b>, advance bufp to the
+ * next character, and return 0. On failure, return -1. */
+static int
+scan_double(const char **bufp, double *out, int width)
+{
+ int neg = 0;
+ double result = 0;
+ int scanned_so_far = 0;
+
+ if (!bufp || !*bufp || !out)
+ return -1;
+ if (width<0)
+ width=MAX_SCANF_WIDTH;
+
+ if (**bufp == '-') {
+ neg = 1;
+ ++*bufp;
+ }
+
+ while (**bufp && TOR_ISDIGIT(**bufp) && scanned_so_far < width) {
+ const int digit = digit_to_num(*(*bufp)++);
+ result = result * 10 + digit;
+ ++scanned_so_far;
+ }
+ if (**bufp == '.') {
+ double fracval = 0, denominator = 1;
+ ++*bufp;
+ ++scanned_so_far;
+ while (**bufp && TOR_ISDIGIT(**bufp) && scanned_so_far < width) {
+ const int digit = digit_to_num(*(*bufp)++);
+ fracval = fracval * 10 + digit;
+ denominator *= 10;
+ ++scanned_so_far;
+ }
+ result += fracval / denominator;
+ }
+
+ if (!scanned_so_far) /* No actual digits scanned */
+ return -1;
+
+ *out = neg ? -result : result;
+ return 0;
+}
+
/** Helper: copy up to <b>width</b> non-space characters from <b>bufp</b> to
* <b>out</b>. Make sure <b>out</b> is nul-terminated. Advance <b>bufp</b>
* to the next non-space character or the EOS. */
@@ -2747,6 +2936,7 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
}
} else {
int width = -1;
+ int longmod = 0;
++pattern;
if (TOR_ISDIGIT(*pattern)) {
width = digit_to_num(*pattern++);
@@ -2759,17 +2949,57 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
if (!width) /* No zero-width things. */
return -1;
}
+ if (*pattern == 'l') {
+ longmod = 1;
+ ++pattern;
+ }
if (*pattern == 'u' || *pattern == 'x') {
- unsigned *u = va_arg(ap, unsigned *);
+ unsigned long u;
const int base = (*pattern == 'u') ? 10 : 16;
if (!*buf)
return n_matched;
- if (scan_unsigned(&buf, u, width, base)<0)
+ if (scan_unsigned(&buf, &u, width, base)<0)
+ return n_matched;
+ if (longmod) {
+ unsigned long *out = va_arg(ap, unsigned long *);
+ *out = u;
+ } else {
+ unsigned *out = va_arg(ap, unsigned *);
+ if (u > UINT_MAX)
+ return n_matched;
+ *out = (unsigned) u;
+ }
+ ++pattern;
+ ++n_matched;
+ } else if (*pattern == 'f') {
+ double *d = va_arg(ap, double *);
+ if (!longmod)
+ return -1; /* float not supported */
+ if (!*buf)
+ return n_matched;
+ if (scan_double(&buf, d, width)<0)
return n_matched;
++pattern;
++n_matched;
+ } else if (*pattern == 'd') {
+ long lng=0;
+ if (scan_signed(&buf, &lng, width)<0)
+ return n_matched;
+ if (longmod) {
+ long *out = va_arg(ap, long *);
+ *out = lng;
+ } else {
+ int *out = va_arg(ap, int *);
+ if (lng < INT_MIN || lng > INT_MAX)
+ return n_matched;
+ *out = (int)lng;
+ }
+ ++pattern;
+ ++n_matched;
} else if (*pattern == 's') {
char *s = va_arg(ap, char *);
+ if (longmod)
+ return -1;
if (width < 0)
return -1;
if (scan_string(&buf, s, width)<0)
@@ -2778,6 +3008,8 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
++n_matched;
} else if (*pattern == 'c') {
char *ch = va_arg(ap, char *);
+ if (longmod)
+ return -1;
if (width != -1)
return -1;
if (!*buf)
@@ -2788,6 +3020,8 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
} else if (*pattern == '%') {
if (*buf != '%')
return n_matched;
+ if (longmod)
+ return -1;
++buf;
++pattern;
} else {
@@ -2801,9 +3035,14 @@ tor_vsscanf(const char *buf, const char *pattern, va_list ap)
/** Minimal sscanf replacement: parse <b>buf</b> according to <b>pattern</b>
* and store the results in the corresponding argument fields. Differs from
- * sscanf in that it: Only handles %u, %x, %c and %Ns. Does not handle
- * arbitrarily long widths. %u and %x do not consume any space. Is
- * locale-independent. Returns -1 on malformed patterns.
+ * sscanf in that:
+ * <ul><li>It only handles %u, %lu, %x, %lx, %[NUM]s, %d, %ld, %lf, and %c.
+ * <li>It only handles decimal inputs for %lf. (12.3, not 1.23e1)
+ * <li>It does not handle arbitrarily long widths.
+ * <li>Numbers do not consume any space characters.
+ * <li>It is locale-independent.
+ * <li>%u and %x do not consume any space.
+ * <li>It returns -1 on malformed patterns.</ul>
*
* (As with other locale-independent functions, we need this to parse data that
* is in ASCII without worrying that the C library's locale-handling will make
@@ -2892,9 +3131,10 @@ tor_listdir(const char *dirname)
FindClose(handle);
tor_free(pattern);
#else
+ const char *prot_dname = sandbox_intern_string(dirname);
DIR *d;
struct dirent *de;
- if (!(d = opendir(dirname)))
+ if (!(d = opendir(prot_dname)))
return NULL;
result = smartlist_new();
@@ -3190,14 +3430,59 @@ tor_join_win_cmdline(const char *argv[])
return joined_argv;
}
+/* As format_{hex,dex}_number_sigsafe, but takes a <b>radix</b> argument
+ * in range 2..16 inclusive. */
+static int
+format_number_sigsafe(unsigned long x, char *buf, int buf_len,
+ unsigned int radix)
+{
+ unsigned long tmp;
+ int len;
+ char *cp;
+
+ /* NOT tor_assert. This needs to be safe to run from within a signal handler,
+ * and from within the 'tor_assert() has failed' code. */
+ if (radix < 2 || radix > 16)
+ return 0;
+
+ /* Count how many digits we need. */
+ tmp = x;
+ len = 1;
+ while (tmp >= radix) {
+ tmp /= radix;
+ ++len;
+ }
+
+ /* Not long enough */
+ if (!buf || len >= buf_len)
+ return 0;
+
+ cp = buf + len;
+ *cp = '\0';
+ do {
+ unsigned digit = (unsigned) (x % radix);
+ tor_assert(cp > buf);
+ --cp;
+ *cp = "0123456789ABCDEF"[digit];
+ x /= radix;
+ } while (x);
+
+ /* NOT tor_assert; see above. */
+ if (cp != buf) {
+ abort();
+ }
+
+ return len;
+}
+
/**
- * 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.
*
- * This function DOES NOT add a terminating NUL character to its output: be
- * careful!
+ * 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.
+ *
+ * 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
@@ -3212,54 +3497,27 @@ 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 long x, char *buf, int buf_len)
{
- int len;
- unsigned int tmp;
- char *cur;
-
- /* Sanity check */
- if (!buf || max_len <= 0)
- return 0;
-
- /* How many chars do we need for x? */
- if (x > 0) {
- len = 0;
- tmp = x;
- while (tmp > 0) {
- tmp >>= 4;
- ++len;
- }
- } else {
- len = 1;
- }
-
- /* Bail if we would go past the end of the buffer */
- if (len > max_len)
- return 0;
-
- /* Point to last one */
- cur = buf + len - 1;
-
- /* Convert x to hex */
- do {
- *cur-- = "0123456789ABCDEF"[x & 0xf];
- x >>= 4;
- } while (x != 0 && cur >= buf);
+ return format_number_sigsafe(x, buf, buf_len, 16);
+}
- /* Return len */
- return len;
+/** As format_hex_number_sigsafe, but format the number in base 10. */
+int
+format_dec_number_sigsafe(unsigned long x, char *buf, int buf_len)
+{
+ return format_number_sigsafe(x, buf, buf_len, 10);
}
+#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.
*
- * <b>hex_errno</b> must have at least HEX_ERRNO_SIZE bytes available.
+ * <b>hex_errno</b> must have at least HEX_ERRNO_SIZE+1 bytes available.
*
* The format of <b>hex_errno</b> is: "CHILD_STATE/ERRNO\n", left-padded
- * with spaces. Note that there is no trailing \0. CHILD_STATE indicates where
+ * with spaces. CHILD_STATE indicates where
* in the processs of starting the child process did the failure occur (see
* CHILD_STATE_* macros for definition), and SAVED_ERRNO is the value of
* errno when the failure occurred.
@@ -3267,7 +3525,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)
{
@@ -3294,12 +3552,12 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
* Count how many chars of space we have left, and keep a pointer into the
* current point in the buffer.
*/
- left = HEX_ERRNO_SIZE;
+ left = HEX_ERRNO_SIZE+1;
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;
@@ -3328,8 +3586,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;
@@ -3338,8 +3595,8 @@ format_helper_exit_status(unsigned char child_state, int saved_errno,
left -= written;
cur += written;
- /* Check that we have enough space left for a newline */
- if (left <= 0)
+ /* Check that we have enough space left for a newline and a NUL */
+ if (left <= 1)
goto err;
/* Emit the newline and NUL */
@@ -3360,6 +3617,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
@@ -3555,7 +3813,7 @@ tor_spawn_background(const char *const filename, const char **argv,
TRUE, // handles are inherited
/*(TODO: set CREATE_NEW CONSOLE/PROCESS_GROUP to make GetExitCodeProcess()
* work?) */
- 0, // creation flags
+ CREATE_NO_WINDOW, // creation flags
(env==NULL) ? NULL : env->windows_environment_block,
NULL, // use parent's current directory
&siStartInfo, // STARTUPINFO pointer
@@ -3594,7 +3852,7 @@ tor_spawn_background(const char *const filename, const char **argv,
this is used for printing out the error message */
unsigned char child_state = CHILD_STATE_INIT;
- char hex_errno[HEX_ERRNO_SIZE];
+ char hex_errno[HEX_ERRNO_SIZE + 2]; /* + 1 should be sufficient actually */
static int max_fd = -1;
@@ -3630,12 +3888,13 @@ tor_spawn_background(const char *const filename, const char **argv,
child_state = CHILD_STATE_MAXFD;
#ifdef _SC_OPEN_MAX
- if (-1 != max_fd) {
+ if (-1 == max_fd) {
max_fd = (int) sysconf(_SC_OPEN_MAX);
- if (max_fd == -1)
+ if (max_fd == -1) {
max_fd = DEFAULT_MAX_FD;
log_warn(LD_GENERAL,
"Cannot find maximum file descriptor, assuming %d", max_fd);
+ }
}
#else
max_fd = DEFAULT_MAX_FD;
@@ -3775,19 +4034,26 @@ 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;
if (also_terminate_process) {
if (tor_terminate_process(process_handle) < 0) {
- log_notice(LD_GENERAL, "Failed to terminate process with PID '%d'",
- tor_process_get_pid(process_handle));
+ const char *errstr =
+#ifdef _WIN32
+ format_win32_error(GetLastError());
+#else
+ strerror(errno);
+#endif
+ log_notice(LD_GENERAL, "Failed to terminate process with "
+ "PID '%d' ('%s').", tor_process_get_pid(process_handle),
+ errstr);
} else {
- log_info(LD_GENERAL, "Terminated process with PID '%d'",
+ log_info(LD_GENERAL, "Terminated process with PID '%d'.",
tor_process_get_pid(process_handle));
}
}
@@ -4255,7 +4521,94 @@ tor_split_lines(smartlist_t *sl, char *buf, int len)
return smartlist_len(sl);
}
+/** Return a string corresponding to <b>stream_status</b>. */
+const char *
+stream_status_to_string(enum stream_status stream_status)
+{
+ switch (stream_status) {
+ case IO_STREAM_OKAY:
+ return "okay";
+ case IO_STREAM_EAGAIN:
+ return "temporarily unavailable";
+ case IO_STREAM_TERM:
+ return "terminated";
+ case IO_STREAM_CLOSED:
+ return "closed";
+ default:
+ tor_fragile_assert();
+ return "unknown";
+ }
+}
+
+/* DOCDOC */
+static void
+log_portfw_spawn_error_message(const char *buf,
+ const char *executable, int *child_status)
+{
+ /* Parse error message */
+ int retval, child_state, saved_errno;
+ retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
+ &child_state, &saved_errno);
+ if (retval == 2) {
+ log_warn(LD_GENERAL,
+ "Failed to start child process \"%s\" in state %d: %s",
+ executable, child_state, strerror(saved_errno));
+ if (child_status)
+ *child_status = 1;
+ } else {
+ /* Failed to parse message from child process, log it as a
+ warning */
+ log_warn(LD_GENERAL,
+ "Unexpected message from port forwarding helper \"%s\": %s",
+ executable, buf);
+ }
+}
+
#ifdef _WIN32
+
+/** Return a smartlist containing lines outputted from
+ * <b>handle</b>. Return NULL on error, and set
+ * <b>stream_status_out</b> appropriately. */
+MOCK_IMPL(smartlist_t *,
+tor_get_lines_from_handle, (HANDLE *handle,
+ enum stream_status *stream_status_out))
+{
+ int pos;
+ char stdout_buf[600] = {0};
+ smartlist_t *lines = NULL;
+
+ tor_assert(stream_status_out);
+
+ *stream_status_out = IO_STREAM_TERM;
+
+ pos = tor_read_all_handle(handle, stdout_buf, sizeof(stdout_buf) - 1, NULL);
+ if (pos < 0) {
+ *stream_status_out = IO_STREAM_TERM;
+ return NULL;
+ }
+ if (pos == 0) {
+ *stream_status_out = IO_STREAM_EAGAIN;
+ return NULL;
+ }
+
+ /* End with a null even if there isn't a \r\n at the end */
+ /* TODO: What if this is a partial line? */
+ stdout_buf[pos] = '\0';
+
+ /* Split up the buffer */
+ lines = smartlist_new();
+ tor_split_lines(lines, stdout_buf, pos);
+
+ /* Currently 'lines' is populated with strings residing on the
+ stack. Replace them with their exact copies on the heap: */
+ SMARTLIST_FOREACH(lines, char *, line,
+ SMARTLIST_REPLACE_CURRENT(lines, line, tor_strdup(line)));
+
+ *stream_status_out = IO_STREAM_OKAY;
+
+ return lines;
+}
+
/** Read from stream, and send lines to log at the specified log level.
* Returns -1 if there is a error reading, and 0 otherwise.
* If the generated stream is flushed more often than on new lines, or
@@ -4303,6 +4656,34 @@ log_from_handle(HANDLE *pipe, int severity)
#else
+/** Return a smartlist containing lines outputted from
+ * <b>handle</b>. Return NULL on error, and set
+ * <b>stream_status_out</b> appropriately. */
+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];
+ smartlist_t *lines = NULL;
+
+ while (1) {
+ memset(stdout_buf, 0, sizeof(stdout_buf));
+
+ stream_status = get_string_from_pipe(handle,
+ stdout_buf, sizeof(stdout_buf) - 1);
+ if (stream_status != IO_STREAM_OKAY)
+ goto done;
+
+ if (!lines) lines = smartlist_new();
+ smartlist_add(lines, tor_strdup(stdout_buf));
+ }
+
+ done:
+ *stream_status_out = stream_status;
+ return lines;
+}
+
/** Read from stream, and send lines to log at the specified log level.
* Returns 1 if stream is closed normally, -1 if there is a error reading, and
* 0 otherwise. Handles lines from tor-fw-helper and
@@ -4330,23 +4711,7 @@ log_from_pipe(FILE *stream, int severity, const char *executable,
/* Check if buf starts with SPAWN_ERROR_MESSAGE */
if (strcmpstart(buf, SPAWN_ERROR_MESSAGE) == 0) {
- /* Parse error message */
- int retval, child_state, saved_errno;
- retval = tor_sscanf(buf, SPAWN_ERROR_MESSAGE "%x/%x",
- &child_state, &saved_errno);
- if (retval == 2) {
- log_warn(LD_GENERAL,
- "Failed to start child process \"%s\" in state %d: %s",
- executable, child_state, strerror(saved_errno));
- if (child_status)
- *child_status = 1;
- } else {
- /* Failed to parse message from child process, log it as a
- warning */
- log_warn(LD_GENERAL,
- "Unexpected message from port forwarding helper \"%s\": %s",
- executable, buf);
- }
+ log_portfw_spawn_error_message(buf, executable, child_status);
} else {
log_fn(severity, LD_GENERAL, "Port forwarding helper says: %s", buf);
}
@@ -4421,9 +4786,144 @@ get_string_from_pipe(FILE *stream, char *buf_out, size_t count)
return IO_STREAM_TERM;
}
-/* DOCDOC tor_check_port_forwarding */
+/** Parse a <b>line</b> from tor-fw-helper and issue an appropriate
+ * log message to our user. */
+static void
+handle_fw_helper_line(const char *executable, const char *line)
+{
+ smartlist_t *tokens = smartlist_new();
+ char *message = NULL;
+ char *message_for_log = NULL;
+ const char *external_port = NULL;
+ const char *internal_port = NULL;
+ const char *result = NULL;
+ int port = 0;
+ int success = 0;
+
+ if (strcmpstart(line, SPAWN_ERROR_MESSAGE) == 0) {
+ /* We need to check for SPAWN_ERROR_MESSAGE again here, since it's
+ * possible that it got sent after we tried to read it in log_from_pipe.
+ *
+ * XXX Ideally, we should be using one of stdout/stderr for the real
+ * output, and one for the output of the startup code. We used to do that
+ * before cd05f35d2c.
+ */
+ int child_status;
+ log_portfw_spawn_error_message(line, executable, &child_status);
+ goto done;
+ }
+
+ smartlist_split_string(tokens, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(tokens) < 5)
+ goto err;
+
+ if (strcmp(smartlist_get(tokens, 0), "tor-fw-helper") ||
+ strcmp(smartlist_get(tokens, 1), "tcp-forward"))
+ goto err;
+
+ external_port = smartlist_get(tokens, 2);
+ internal_port = smartlist_get(tokens, 3);
+ result = smartlist_get(tokens, 4);
+
+ if (smartlist_len(tokens) > 5) {
+ /* If there are more than 5 tokens, they are part of [<message>].
+ Let's use a second smartlist to form the whole message;
+ strncat loops suck. */
+ int i;
+ int message_words_n = smartlist_len(tokens) - 5;
+ smartlist_t *message_sl = smartlist_new();
+ for (i = 0; i < message_words_n; i++)
+ smartlist_add(message_sl, smartlist_get(tokens, 5+i));
+
+ tor_assert(smartlist_len(message_sl) > 0);
+ message = smartlist_join_strings(message_sl, " ", 0, NULL);
+
+ /* wrap the message in log-friendly wrapping */
+ tor_asprintf(&message_for_log, " ('%s')", message);
+
+ smartlist_free(message_sl);
+ }
+
+ port = atoi(external_port);
+ if (port < 1 || port > 65535)
+ goto err;
+
+ port = atoi(internal_port);
+ if (port < 1 || port > 65535)
+ goto err;
+
+ if (!strcmp(result, "SUCCESS"))
+ success = 1;
+ else if (!strcmp(result, "FAIL"))
+ success = 0;
+ else
+ goto err;
+
+ if (!success) {
+ log_warn(LD_GENERAL, "Tor was unable to forward TCP port '%s' to '%s'%s. "
+ "Please make sure that your router supports port "
+ "forwarding protocols (like NAT-PMP). Note that if '%s' is "
+ "your ORPort, your relay will be unable to receive inbound "
+ "traffic.", external_port, internal_port,
+ message_for_log ? message_for_log : "",
+ internal_port);
+ } else {
+ log_info(LD_GENERAL,
+ "Tor successfully forwarded TCP port '%s' to '%s'%s.",
+ external_port, internal_port,
+ message_for_log ? message_for_log : "");
+ }
+
+ goto done;
+
+ err:
+ log_warn(LD_GENERAL, "tor-fw-helper sent us a string we could not "
+ "parse (%s).", line);
+
+ done:
+ SMARTLIST_FOREACH(tokens, char *, cp, tor_free(cp));
+ smartlist_free(tokens);
+ tor_free(message);
+ tor_free(message_for_log);
+}
+
+/** Read what tor-fw-helper has to say in its stdout and handle it
+ * appropriately */
+static int
+handle_fw_helper_output(const char *executable,
+ process_handle_t *process_handle)
+{
+ smartlist_t *fw_helper_output = NULL;
+ enum stream_status stream_status = 0;
+
+ fw_helper_output =
+ tor_get_lines_from_handle(tor_process_get_stdout_pipe(process_handle),
+ &stream_status);
+ if (!fw_helper_output) { /* didn't get any output from tor-fw-helper */
+ /* if EAGAIN we should retry in the future */
+ return (stream_status == IO_STREAM_EAGAIN) ? 0 : -1;
+ }
+
+ /* Handle the lines we got: */
+ SMARTLIST_FOREACH_BEGIN(fw_helper_output, char *, line) {
+ handle_fw_helper_line(executable, line);
+ tor_free(line);
+ } SMARTLIST_FOREACH_END(line);
+
+ smartlist_free(fw_helper_output);
+
+ return 0;
+}
+
+/** Spawn tor-fw-helper and ask it to forward the ports in
+ * <b>ports_to_forward</b>. <b>ports_to_forward</b> contains strings
+ * of the form "<external port>:<internal port>", which is the format
+ * that tor-fw-helper expects. */
void
-tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
+tor_check_port_forwarding(const char *filename,
+ smartlist_t *ports_to_forward,
time_t now)
{
/* When fw-helper succeeds, how long do we wait until running it again */
@@ -4437,32 +4937,51 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
static process_handle_t *child_handle=NULL;
static time_t time_to_run_helper = 0;
- int stdout_status, stderr_status, retval;
- const char *argv[10];
- char s_dirport[6], s_orport[6];
+ int stderr_status, retval;
+ int stdout_status = 0;
tor_assert(filename);
- /* Set up command line for tor-fw-helper */
- snprintf(s_dirport, sizeof s_dirport, "%d", dir_port);
- snprintf(s_orport, sizeof s_orport, "%d", or_port);
-
- /* TODO: Allow different internal and external ports */
- argv[0] = filename;
- argv[1] = "--internal-or-port";
- argv[2] = s_orport;
- argv[3] = "--external-or-port";
- argv[4] = s_orport;
- argv[5] = "--internal-dir-port";
- argv[6] = s_dirport;
- argv[7] = "--external-dir-port";
- argv[8] = s_dirport;
- argv[9] = NULL;
-
/* Start the child, if it is not already running */
if ((!child_handle || child_handle->status != PROCESS_STATUS_RUNNING) &&
time_to_run_helper < now) {
- int status;
+ /*tor-fw-helper cli looks like this: tor_fw_helper -p :5555 -p 4555:1111 */
+ const char **argv; /* cli arguments */
+ int args_n, status;
+ int argv_index = 0; /* index inside 'argv' */
+
+ tor_assert(smartlist_len(ports_to_forward) > 0);
+
+ /* check for overflow during 'argv' allocation:
+ (len(ports_to_forward)*2 + 2)*sizeof(char*) > SIZE_MAX ==
+ len(ports_to_forward) > (((SIZE_MAX/sizeof(char*)) - 2)/2) */
+ if ((size_t) smartlist_len(ports_to_forward) >
+ (((SIZE_MAX/sizeof(char*)) - 2)/2)) {
+ log_warn(LD_GENERAL,
+ "Overflow during argv allocation. This shouldn't happen.");
+ return;
+ }
+ /* check for overflow during 'argv_index' increase:
+ ((len(ports_to_forward)*2 + 2) > INT_MAX) ==
+ len(ports_to_forward) > (INT_MAX - 2)/2 */
+ if (smartlist_len(ports_to_forward) > (INT_MAX - 2)/2) {
+ log_warn(LD_GENERAL,
+ "Overflow during argv_index increase. This shouldn't happen.");
+ return;
+ }
+
+ /* Calculate number of cli arguments: one for the filename, two
+ for each smartlist element (one for "-p" and one for the
+ ports), and one for the final NULL. */
+ args_n = 1 + 2*smartlist_len(ports_to_forward) + 1;
+ argv = tor_malloc_zero(sizeof(char*)*args_n);
+
+ argv[argv_index++] = filename;
+ SMARTLIST_FOREACH_BEGIN(ports_to_forward, const char *, port) {
+ argv[argv_index++] = "-p";
+ argv[argv_index++] = port;
+ } SMARTLIST_FOREACH_END(port);
+ argv[argv_index] = NULL;
/* Assume tor-fw-helper will succeed, start it later*/
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_SUCCESS;
@@ -4479,6 +4998,9 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
status = tor_spawn_background(filename, argv, NULL, &child_handle);
#endif
+ tor_free_((void*)argv);
+ argv=NULL;
+
if (PROCESS_STATUS_ERROR == status) {
log_warn(LD_GENERAL, "Failed to start port forwarding helper %s",
filename);
@@ -4496,16 +5018,17 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
/* Read from stdout/stderr and log result */
retval = 0;
#ifdef _WIN32
- stdout_status = log_from_handle(child_handle->stdout_pipe, LOG_INFO);
- stderr_status = log_from_handle(child_handle->stderr_pipe, LOG_WARN);
- /* If we got this far (on Windows), the process started */
- retval = 0;
+ stderr_status = log_from_handle(child_handle->stderr_pipe, LOG_INFO);
#else
- stdout_status = log_from_pipe(child_handle->stdout_handle,
- LOG_INFO, filename, &retval);
stderr_status = log_from_pipe(child_handle->stderr_handle,
- LOG_WARN, filename, &retval);
+ LOG_INFO, filename, &retval);
#endif
+ if (handle_fw_helper_output(filename, child_handle) < 0) {
+ log_warn(LD_GENERAL, "Failed to handle fw helper output.");
+ stdout_status = -1;
+ retval = -1;
+ }
+
if (retval) {
/* There was a problem in the child process */
time_to_run_helper = now + TIME_TO_EXEC_FWHELPER_FAIL;
@@ -4551,3 +5074,45 @@ tor_check_port_forwarding(const char *filename, int dir_port, int or_port,
}
}
+/** Initialize the insecure RNG <b>rng</b> from a seed value <b>seed</b>. */
+void
+tor_init_weak_random(tor_weak_rng_t *rng, unsigned seed)
+{
+ rng->state = (uint32_t)(seed & 0x7fffffff);
+}
+
+/** Return a randomly chosen value in the range 0..TOR_WEAK_RANDOM_MAX based
+ * on the RNG state of <b>rng</b>. This entropy will not be cryptographically
+ * strong; do not rely on it for anything an adversary should not be able to
+ * predict. */
+int32_t
+tor_weak_random(tor_weak_rng_t *rng)
+{
+ /* Here's a linear congruential generator. OpenBSD and glibc use these
+ * parameters; they aren't too bad, and should have maximal period over the
+ * range 0..INT32_MAX. We don't want to use the platform rand() or random(),
+ * since some platforms have bad weak RNGs that only return values in the
+ * range 0..INT16_MAX, which just isn't enough. */
+ rng->state = (rng->state * 1103515245 + 12345) & 0x7fffffff;
+ return (int32_t) rng->state;
+}
+
+/** Return a random number in the range [0 , <b>top</b>). {That is, the range
+ * of integers i such that 0 <= i < top.} Chooses uniformly. Requires that
+ * top is greater than 0. This randomness is not cryptographically strong; do
+ * not rely on it for anything an adversary should not be able to predict. */
+int32_t
+tor_weak_random_range(tor_weak_rng_t *rng, int32_t top)
+{
+ /* We don't want to just do tor_weak_random() % top, since random() is often
+ * implemented with an LCG whose modulus is a power of 2, and those are
+ * cyclic in their low-order bits. */
+ int divisor, result;
+ tor_assert(top > 0);
+ divisor = TOR_WEAK_RANDOM_MAX / top;
+ do {
+ result = (int32_t)(tor_weak_random(rng) / divisor);
+ } while (result >= top);
+ return result;
+}
+
diff --git a/src/common/util.h b/src/common/util.h
index 8977d273c..18dc20639 100644
--- a/src/common/util.h
+++ b/src/common/util.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,13 +8,14 @@
* \brief Headers for util.c
**/
-#ifndef _TOR_UTIL_H
-#define _TOR_UTIL_H
+#ifndef TOR_UTIL_H
+#define TOR_UTIL_H
#include "orconfig.h"
#include "torint.h"
#include "compat.h"
#include "di_ops.h"
+#include "testsupport.h"
#include <stdio.h>
#include <stdlib.h>
#ifdef _WIN32
@@ -47,13 +48,13 @@
/** Like assert(3), but send assertion failures to the log as well as to
* stderr. */
#define tor_assert(expr) STMT_BEGIN \
- if (PREDICT_UNLIKELY(!(expr))) { \
- log_err(LD_BUG, "%s:%d: %s: Assertion %s failed; aborting.", \
- _SHORT_FILE_, __LINE__, __func__, #expr); \
- fprintf(stderr,"%s:%d %s: Assertion %s failed; aborting.\n", \
- _SHORT_FILE_, __LINE__, __func__, #expr); \
- abort(); \
- } STMT_END
+ if (PREDICT_UNLIKELY(!(expr))) { \
+ tor_assertion_failed_(SHORT_FILE__, __LINE__, __func__, #expr); \
+ abort(); \
+ } STMT_END
+
+void tor_assertion_failed_(const char *fname, unsigned int line,
+ const char *func, const char *expr);
/* If we're building with dmalloc, we want all of our memory allocation
* functions to take an extra file/line pair of arguments. If not, not.
@@ -62,7 +63,7 @@
* to calls. */
#ifdef USE_DMALLOC
#define DMALLOC_PARAMS , const char *file, const int line
-#define DMALLOC_ARGS , _SHORT_FILE_, __LINE__
+#define DMALLOC_ARGS , SHORT_FILE__, __LINE__
#else
#define DMALLOC_PARAMS
#define DMALLOC_ARGS
@@ -74,23 +75,24 @@
#define tor_fragile_assert()
/* Memory management */
-void *_tor_malloc(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_malloc_zero(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_malloc_roundup(size_t *size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_calloc(size_t nmemb, size_t size DMALLOC_PARAMS) ATTR_MALLOC;
-void *_tor_realloc(void *ptr, size_t size DMALLOC_PARAMS);
-char *_tor_strdup(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1));
-char *_tor_strndup(const char *s, size_t n DMALLOC_PARAMS)
+void *tor_malloc_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
+void *tor_malloc_zero_(size_t size DMALLOC_PARAMS) ATTR_MALLOC;
+void *tor_calloc_(size_t nmemb, size_t size DMALLOC_PARAMS) ATTR_MALLOC;
+void *tor_realloc_(void *ptr, size_t size DMALLOC_PARAMS);
+char *tor_strdup_(const char *s DMALLOC_PARAMS) ATTR_MALLOC ATTR_NONNULL((1));
+char *tor_strndup_(const char *s, size_t n DMALLOC_PARAMS)
+ ATTR_MALLOC ATTR_NONNULL((1));
+void *tor_memdup_(const void *mem, size_t len DMALLOC_PARAMS)
ATTR_MALLOC ATTR_NONNULL((1));
-void *_tor_memdup(const void *mem, size_t len DMALLOC_PARAMS)
+void *tor_memdup_nulterm_(const void *mem, size_t len DMALLOC_PARAMS)
ATTR_MALLOC ATTR_NONNULL((1));
-void _tor_free(void *mem);
+void tor_free_(void *mem);
#ifdef USE_DMALLOC
extern int dmalloc_free(const char *file, const int line, void *pnt,
const int func_id);
#define tor_free(p) STMT_BEGIN \
if (PREDICT_LIKELY((p)!=NULL)) { \
- dmalloc_free(_SHORT_FILE_, __LINE__, (p), 0); \
+ dmalloc_free(SHORT_FILE__, __LINE__, (p), 0); \
(p)=NULL; \
} \
STMT_END
@@ -100,7 +102,7 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
* and it sets the pointer value to NULL after freeing it.
*
* This is a macro. If you need a function pointer to release memory from
- * tor_malloc(), use _tor_free().
+ * tor_malloc(), use tor_free_().
*/
#define tor_free(p) STMT_BEGIN \
if (PREDICT_LIKELY((p)!=NULL)) { \
@@ -110,14 +112,14 @@ extern int dmalloc_free(const char *file, const int line, void *pnt,
STMT_END
#endif
-#define tor_malloc(size) _tor_malloc(size DMALLOC_ARGS)
-#define tor_malloc_zero(size) _tor_malloc_zero(size DMALLOC_ARGS)
-#define tor_calloc(nmemb,size) _tor_calloc(nmemb, size DMALLOC_ARGS)
-#define tor_malloc_roundup(szp) _tor_malloc_roundup(szp DMALLOC_ARGS)
-#define tor_realloc(ptr, size) _tor_realloc(ptr, size DMALLOC_ARGS)
-#define tor_strdup(s) _tor_strdup(s DMALLOC_ARGS)
-#define tor_strndup(s, n) _tor_strndup(s, n DMALLOC_ARGS)
-#define tor_memdup(s, n) _tor_memdup(s, n DMALLOC_ARGS)
+#define tor_malloc(size) tor_malloc_(size DMALLOC_ARGS)
+#define tor_malloc_zero(size) tor_malloc_zero_(size DMALLOC_ARGS)
+#define tor_calloc(nmemb,size) tor_calloc_(nmemb, size DMALLOC_ARGS)
+#define tor_realloc(ptr, size) tor_realloc_(ptr, size DMALLOC_ARGS)
+#define tor_strdup(s) tor_strdup_(s DMALLOC_ARGS)
+#define tor_strndup(s, n) tor_strndup_(s, n DMALLOC_ARGS)
+#define tor_memdup(s, n) tor_memdup_(s, n DMALLOC_ARGS)
+#define tor_memdup_nulterm(s, n) tor_memdup_nulterm_(s, n DMALLOC_ARGS)
void tor_log_mallinfo(int severity);
@@ -161,6 +163,7 @@ void tor_log_mallinfo(int severity);
/* Math functions */
double tor_mathlog(double d) ATTR_CONST;
long tor_lround(double d) ATTR_CONST;
+int64_t tor_llround(double d) ATTR_CONST;
int tor_log2(uint64_t u64) ATTR_CONST;
uint64_t round_to_power_of_2(uint64_t u64);
unsigned round_to_next_multiple_of(unsigned number, unsigned divisor);
@@ -173,6 +176,17 @@ int n_bits_set_u8(uint8_t v);
* overflow. */
#define CEIL_DIV(a,b) (((a)+(b)-1)/(b))
+/* Return <b>v</b> if it's between <b>min</b> and <b>max</b>. Otherwise
+ * return <b>min</b> if <b>v</b> is smaller than <b>min</b>, or <b>max</b> if
+ * <b>b</b> is larger than <b>max</b>.
+ *
+ * Requires that <b>min</b> is no more than <b>max</b>. May evaluate any of
+ * its arguments more than once! */
+#define CLAMP(min,v,max) \
+ ( ((v) < (min)) ? (min) : \
+ ((v) > (max)) ? (max) : \
+ (v) )
+
/* String manipulation */
/** Allowable characters in a hexadecimal string. */
@@ -188,6 +202,7 @@ int strcasecmpstart(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int strcmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int strcasecmpend(const char *s1, const char *s2) ATTR_NONNULL((1,2));
int fast_memcmpstart(const void *mem, size_t memlen, const char *prefix);
+void tor_strclear(char *s);
void tor_strstrip(char *s, const char *strip) ATTR_NONNULL((1,2));
long tor_parse_long(const char *s, int base, long min,
@@ -208,25 +223,22 @@ const char *find_whitespace_eos(const char *s, const char *eos);
const char *find_str_at_start_of_line(const char *haystack,
const char *needle);
int string_is_C_identifier(const char *string);
+int string_is_key_value(int severity, const char *string);
int tor_mem_is_zero(const char *mem, size_t len);
int tor_digest_is_zero(const char *digest);
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_pt_args(const char *string,
+ const char *chars_to_escape);
+
struct smartlist_t;
-void wrap_string(struct smartlist_t *out, const char *string, size_t width,
- const char *prefix0, const char *prefixRest);
-int tor_vsscanf(const char *buf, const char *pattern, va_list ap)
-#ifdef __GNUC__
- __attribute__((format(scanf, 2, 0)))
-#endif
- ;
+int tor_vsscanf(const char *buf, const char *pattern, va_list ap) \
+ CHECK_SCANF(2, 0);
int tor_sscanf(const char *buf, const char *pattern, ...)
-#ifdef __GNUC__
- __attribute__((format(scanf, 2, 3)))
-#endif
- ;
+ CHECK_SCANF(2, 3);
void smartlist_add_asprintf(struct smartlist_t *sl, const char *pattern, ...)
CHECK_PRINTF(2, 3);
@@ -239,11 +251,9 @@ void base16_encode(char *dest, size_t destlen, const char *src, size_t srclen);
int base16_decode(char *dest, size_t destlen, const char *src, size_t srclen);
/* Time helpers */
-double tv_to_double(const struct timeval *tv);
-int64_t tv_to_msec(const struct timeval *tv);
-int64_t tv_to_usec(const struct timeval *tv);
long tv_udiff(const struct timeval *start, const struct timeval *end);
long tv_mdiff(const struct timeval *start, const struct timeval *end);
+int64_t tv_to_msec(const struct timeval *tv);
int tor_timegm(const struct tm *tm, time_t *time_out);
#define RFC1123_TIME_LEN 29
void format_rfc1123_time(char *buf, time_t t);
@@ -283,6 +293,15 @@ void update_approx_time(time_t now);
}
}
</pre>
+
+ As a convenience wrapper for logging, you can replace the above with:
+ <pre>
+ if (possibly_very_frequent_event()) {
+ static ratelim_t warning_limit = RATELIM_INIT(300);
+ log_fn_ratelim(&warning_limit, LOG_WARN, LD_GENERAL,
+ "The event occurred!");
+ }
+ </pre>
*/
typedef struct ratelim_t {
int rate;
@@ -306,6 +325,8 @@ enum stream_status {
IO_STREAM_CLOSED
};
+const char *stream_status_to_string(enum stream_status stream_status);
+
enum stream_status get_string_from_pipe(FILE *stream, char *buf, size_t count);
/** Return values from file_status(); see that function's documentation
@@ -335,8 +356,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 {
@@ -344,7 +366,7 @@ typedef struct sized_chunk_t {
size_t len;
} sized_chunk_t;
int write_chunks_to_file(const char *fname, const struct smartlist_t *chunks,
- int bin);
+ int bin, int no_tempfile);
int append_bytes_to_file(const char *fname, const char *str, size_t len,
int bin);
int write_bytes_to_new_file(const char *fname, const char *str, size_t len,
@@ -360,8 +382,14 @@ struct stat;
#endif
char *read_file_to_str(const char *filename, int flags, struct stat *stat_out)
ATTR_MALLOC;
-const char *parse_config_line_from_str(const char *line,
- char **key_out, char **value_out);
+char *read_file_to_str_until_eof(int fd, size_t max_bytes_to_read,
+ size_t *sz_out)
+ ATTR_MALLOC;
+const char *parse_config_line_from_str_verbose(const char *line,
+ char **key_out, char **value_out,
+ const char **err_out);
+#define parse_config_line_from_str(line,key_out,value_out) \
+ parse_config_line_from_str_verbose((line),(key_out),(value_out),NULL)
char *expand_filename(const char *filename);
struct smartlist_t *tor_listdir(const char *dirname);
int path_is_relative(const char *filename);
@@ -373,7 +401,8 @@ void write_pidfile(char *filename);
/* Port forwarding */
void tor_check_port_forwarding(const char *filename,
- int dir_port, int or_port, time_t now);
+ struct smartlist_t *ports_to_forward,
+ time_t now);
typedef struct process_handle_t process_handle_t;
typedef struct process_environment_t process_environment_t;
@@ -464,16 +493,45 @@ HANDLE tor_process_get_stdout_pipe(process_handle_t *process_handle);
FILE *tor_process_get_stdout_pipe(process_handle_t *process_handle);
#endif
-int tor_terminate_process(process_handle_t *process_handle);
-void tor_process_handle_destroy(process_handle_t *process_handle,
- int also_terminate_process);
+#ifdef _WIN32
+MOCK_DECL(struct smartlist_t *,
+tor_get_lines_from_handle,(HANDLE *handle,
+ enum stream_status *stream_status));
+#else
+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);
+
+MOCK_DECL(void,
+tor_process_handle_destroy,(process_handle_t *process_handle,
+ int also_terminate_process));
+
+/* ===== Insecure rng */
+typedef struct tor_weak_rng_t {
+ uint32_t state;
+} tor_weak_rng_t;
+
+#define TOR_WEAK_RNG_INIT {383745623}
+#define TOR_WEAK_RANDOM_MAX (INT_MAX)
+void tor_init_weak_random(tor_weak_rng_t *weak_rng, unsigned seed);
+int32_t tor_weak_random(tor_weak_rng_t *weak_rng);
+int32_t tor_weak_random_range(tor_weak_rng_t *rng, int32_t top);
+/** Randomly return true according to <b>rng</b> with probability 1 in
+ * <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 long x, char *buf, int max_len);
+int format_dec_number_sigsafe(unsigned long 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
@@ -482,7 +540,11 @@ int format_helper_exit_status(unsigned char child_state,
1 + sizeof(int) * 2 + 1)
#endif
+#endif
+
const char *libor_get_digests(void);
+#define ARRAY_LENGTH(x) (sizeof(x)) / sizeof(x[0])
+
#endif
diff --git a/src/config/Makefile.am b/src/config/Makefile.am
deleted file mode 100644
index 90dd218b4..000000000
--- a/src/config/Makefile.am
+++ /dev/null
@@ -1,16 +0,0 @@
-confdir = $(sysconfdir)/tor
-
-tordatadir = $(datadir)/tor
-
-EXTRA_DIST = geoip
-# fallback-consensus
-
-conf_DATA = torrc.sample
-
-tordata_DATA = geoip
-# fallback_consensus
-
-# If we don't have it, fake it.
-fallback-consensus:
- touch fallback-consensus
-
diff --git a/src/config/geoip b/src/config/geoip
index 8e9f51385..653aff570 100644
--- a/src/config/geoip
+++ b/src/config/geoip
@@ -1,6 +1,7 @@
-# Last updated based on March 6 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
+# Last updated based on June 4 2014 Maxmind GeoLite2 Country
+# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
+# gunzip GeoLite2-Country.mmdb.gz
+# python mmdb-convert.py GeoLite2-Country.mmdb
16777216,16777471,AU
16777472,16778239,CN
16778240,16779263,AU
@@ -68,39 +69,26 @@
29884416,29949951,TW
29949952,30015487,KR
30015488,30408703,CN
-30408704,33488895,KR
-33488896,33554431,AU
-33554432,34603007,FR
-34603008,34604543,EU
+30408704,33554431,KR
+33554432,33554432,DE
+33554433,34603007,FR
34604544,34605055,DE
-34605056,34620415,EU
+34612224,34612735,IL
34620416,34620927,SE
34620928,34621439,IT
-34621440,34636799,EU
34636800,34637311,DE
-34637312,34646527,EU
34646528,34647551,DE
-34647552,34648575,EU
34648576,34649087,GR
-34649088,34659327,EU
34659328,34660351,GR
-34660352,34664447,EU
34664448,34668543,DE
-34668544,34673663,EU
34673664,34674687,DE
-34674688,34733055,EU
34733056,34734079,DE
-34734080,34754559,EU
34754560,34758655,GR
-34758656,34803711,EU
+34796032,34796543,NL
34803712,34807807,IT
-34807808,34861055,EU
34861056,34865151,DE
-34865152,34866175,EU
34866176,34867199,IT
-34867200,34880511,EU
34880512,34881535,DE
-34881536,34910975,EU
34910976,34911231,ES
34911232,34911743,DE
34911744,34911999,AT
@@ -108,56 +96,42 @@
34912256,34912511,DE
34912512,34912767,ES
34912768,34913279,DE
-34913280,34928383,EU
34928384,34928639,DE
-34928640,34930687,EU
34930688,34938879,DE
34938880,34947071,FR
-34947072,34953215,EU
34953216,34954751,AT
34954752,34955263,NL
34955264,34959359,AT
34959360,34963455,NL
-34963456,34992127,EU
34992128,34993151,NL
34993152,34993663,FR
34993664,34993919,AT
34993920,34994175,DE
34994176,34995711,FR
-34995712,34995967,EU
34995968,34996223,NL
-34996224,34999295,EU
34999296,35001343,GB
35001344,35002367,FR
-35002368,35008511,EU
35008512,35009023,FR
-35009024,35010303,EU
35010304,35010559,BE
35010560,35011583,FR
-35011584,35011839,CH
-35011840,35020799,EU
+35011584,35011839,SE
35020800,35037183,GB
35037184,35054335,FR
35054336,35054591,GB
-35054592,35055103,EU
35055104,35055359,ES
-35055360,35055871,EU
35055872,35056127,NL
-35056128,35059199,EU
35059200,35059711,GB
-35059712,35060735,EU
35060736,35061247,GB
35061248,35061759,FR
-35061760,35090431,EU
35090432,35094527,GR
-35094528,35127295,EU
35127296,35651583,GB
35651584,36700159,IT
36700160,36962303,AE
36962304,37224447,IL
-37224448,37486591,UA
37486592,37748735,RU
-37748736,38273023,SE
+37748736,38258687,SE
+38258688,38258943,DK
+38258944,38273023,SE
38273024,38797311,KZ
38797312,39059455,PT
39059456,39321599,GR
@@ -165,7 +139,11 @@
39583744,39845887,RU
39845888,40370175,GB
40370176,40894463,DK
-40894464,41418751,IT
+40894464,41094879,IT
+41094880,41094887,SI
+41094888,41094895,IT
+41094896,41094903,SI
+41094904,41418751,IT
41418752,41943039,GB
41943040,42205183,DK
42205184,42467327,KZ
@@ -184,33 +162,11 @@
49807360,50331647,SE
50331648,57083940,US
57083941,57083941,BE
-57083942,68259583,US
-68259584,68259599,CA
-68259600,68296775,US
-68296776,68296783,MX
-68296784,68298887,US
-68298888,68298895,CA
-68298896,68305407,US
+57083942,68305407,US
68305408,68305919,MX
-68305920,68314143,US
-68314144,68314151,CA
-68314152,68395663,US
-68395664,68395671,CA
-68395672,68438287,US
-68438288,68438303,CA
-68438304,68649143,US
-68649144,68649151,CA
-68649152,69156927,US
-69156928,69156935,US
-69156936,69533951,US
-69533952,69534207,CA
-69534208,69915111,US
-69915112,69915119,CA
-69915120,69937263,US
-69937264,69937271,CA
-69937272,69956103,US
-69956104,69956111,BM
-69956112,71020543,US
+68305920,69094399,US
+69094400,69094655,AU
+69094656,71020543,US
71020544,71020799,CA
71020800,71571339,US
71571340,71571340,DE
@@ -220,17 +176,7 @@
71571714,71571715,DE
71571716,71595007,US
71595008,71595519,GB
-71595520,71664639,US
-71664640,71664692,GB
-71664693,71664693,US
-71664694,71664700,GB
-71664701,71664701,US
-71664702,71664704,GB
-71664705,71664705,US
-71664706,71664752,GB
-71664753,71664753,US
-71664754,71664895,GB
-71664896,71665077,US
+71595520,71665077,US
71665078,71665078,DE
71665079,71666464,US
71666465,71666465,DE
@@ -252,20 +198,11 @@
71667657,71667657,NL
71667658,71670208,US
71670209,71670209,NL
-71670210,72348895,US
-72348896,72348927,CA
-72348928,83886079,US
+71670210,83886079,US
83886080,83951615,SY
83951616,83959807,UA
83959808,83961855,ES
-83961856,83962111,KW
-83962112,83962367,SA
-83962368,83962623,BH
-83962624,83962879,LB
-83962880,83963135,AE
-83963136,83963391,QA
-83963392,83963647,OM
-83963648,83963903,JO
+83961856,83963903,CY
83963904,83965951,RU
83965952,83967999,CZ
83968000,83976191,DE
@@ -284,1371 +221,73 @@
84049920,84082687,RO
84082688,84148223,RU
84148224,84410367,DE
-84410368,84433919,RU
-84433920,84434176,UA
-84434177,84443135,RU
+84410368,84428799,RU
+84428800,84430847,GB
+84430848,84434943,RU
+84434944,84443135,IT
84443136,84451327,LB
84451328,84457471,RU
84457472,84459519,ES
84459520,84471807,RU
84471808,84473855,IQ
84473856,84475903,HU
-84475904,84540543,DE
-84540544,84540607,IT
-84540608,84541295,DE
-84541296,84541311,IT
-84541312,84545535,DE
+84475904,84545535,DE
84545536,84549631,GB
84549632,84551679,GE
84551680,84557823,DE
84557824,84557824,NL
84557825,84557825,US
-84557826,84557827,RU
-84557828,84557831,SG
-84557832,84557839,CA
-84557840,84557887,US
-84557888,84557951,BG
-84557952,84557967,AU
-84557968,84557983,US
-84557984,84557991,NL
-84557992,84557999,IT
-84558000,84558015,US
-84558016,84558047,JO
-84558048,84558127,US
-84558128,84558143,RU
-84558144,84558175,NL
-84558176,84558191,US
-84558192,84558207,HU
-84558208,84558223,NL
-84558224,84558239,US
-84558240,84558271,TR
-84558272,84558303,US
-84558304,84558311,NO
-84558312,84558319,NL
-84558320,84558335,TR
-84558336,84558375,US
-84558376,84558383,GR
-84558384,84558415,US
-84558416,84558423,MA
-84558424,84558431,IT
-84558432,84558511,US
-84558512,84558519,GB
-84558520,84558527,US
-84558528,84558543,SA
-84558544,84558551,LV
-84558552,84558559,AF
-84558560,84558567,GR
-84558568,84558575,BZ
-84558576,84558583,RO
-84558584,84558655,US
-84558656,84558855,NL
-84558856,84558863,US
-84558864,84558871,NL
-84558872,84558879,IN
-84558880,84558887,US
-84558888,84558891,EG
-84558892,84558895,IT
-84558896,84558903,LV
-84558904,84558907,TR
-84558908,84558919,US
-84558920,84558923,ZA
-84558924,84558927,ES
-84558928,84558931,DE
-84558932,84558935,TR
-84558936,84558943,PT
-84558944,84558947,TR
-84558948,84558951,US
-84558952,84558959,NL
-84558960,84558971,US
-84558972,84558973,RU
-84558974,84558974,GB
-84558975,84558975,EG
-84558976,84558983,US
-84558984,84558991,NL
-84558992,84559007,US
-84559008,84559015,TH
-84559016,84559023,BR
-84559024,84559031,AR
-84559032,84559039,US
-84559040,84559071,NL
-84559072,84559079,IT
-84559080,84559095,US
-84559096,84559099,LB
-84559100,84559103,RU
-84559104,84559111,IT
-84559112,84559119,AE
-84559120,84559131,SY
-84559132,84559135,GB
-84559136,84559151,US
-84559152,84559159,MA
-84559160,84559167,TR
-84559168,84559175,NL
-84559176,84559179,GB
-84559180,84559183,QA
-84559184,84559191,US
-84559192,84559199,GB
-84559200,84559211,IN
-84559212,84559223,US
-84559224,84559231,UA
-84559232,84559247,NL
-84559248,84559251,GB
-84559252,84559253,MA
-84559254,84559254,AU
-84559255,84559255,NL
-84559256,84559259,AE
-84559260,84559260,ZA
-84559261,84559261,NL
-84559262,84559262,GB
-84559263,84559263,MA
-84559264,84559271,ES
-84559272,84559279,NL
-84559280,84559295,US
-84559296,84559303,NL
-84559304,84559311,AE
-84559312,84559327,NL
-84559328,84559335,US
-84559336,84559343,TR
-84559344,84559367,US
-84559368,84559375,GB
-84559376,84559383,SG
-84559384,84559399,US
-84559400,84559403,CN
-84559404,84559405,RU
-84559406,84559406,AU
-84559407,84559407,EG
-84559408,84559415,US
-84559416,84559419,RU
-84559420,84559421,VG
-84559422,84559422,AU
-84559423,84559431,LB
-84559432,84559439,SE
-84559440,84559447,CN
-84559448,84559455,GB
-84559456,84559457,NL
-84559458,84559459,MA
-84559460,84559463,GB
-84559464,84559471,US
-84559472,84559479,QA
-84559480,84559487,SG
-84559488,84559495,US
-84559496,84559503,CY
-84559504,84559511,US
-84559512,84559519,BR
-84559520,84559527,ES
-84559528,84559535,FI
-84559536,84559543,NL
-84559544,84559567,US
-84559568,84559575,DE
-84559576,84559583,NL
-84559584,84559591,US
-84559592,84559607,AU
-84559608,84559611,PL
-84559612,84559613,RU
-84559614,84559614,EG
-84559615,84559615,NL
-84559616,84559623,AE
-84559624,84559631,MA
-84559632,84559647,NL
-84559648,84559663,US
-84559664,84559679,NL
-84559680,84559727,US
-84559728,84559735,NL
-84559736,84559743,GB
-84559744,84559823,NL
-84559824,84559831,GB
-84559832,84559839,NL
-84559840,84559847,CA
-84559848,84559848,LB
-84559849,84559849,CN
-84559850,84559850,GR
-84559851,84559851,GB
-84559852,84559863,US
-84559864,84559867,ES
-84559868,84559879,NL
-84559880,84559887,GR
-84559888,84559895,GB
-84559896,84559903,SE
-84559904,84559919,NL
-84559920,84559935,US
-84559936,84559943,MA
-84559944,84559951,US
-84559952,84559967,CN
-84559968,84559999,US
-84560000,84560007,NL
-84560008,84560015,MA
-84560016,84560023,NL
-84560024,84560031,CA
-84560032,84560047,NL
-84560048,84560055,BD
-84560056,84560063,NL
-84560064,84560095,SE
-84560096,84560103,NL
-84560104,84560111,LB
-84560112,84560119,ES
-84560120,84560127,AE
-84560128,84560135,US
-84560136,84560143,ES
-84560144,84560151,US
-84560152,84560159,IN
-84560160,84560191,US
-84560192,84560207,NL
-84560208,84560223,JO
-84560224,84560239,AE
-84560240,84560255,GB
-84560256,84560263,KW
-84560264,84560271,CY
-84560272,84560279,IT
-84560280,84560287,KW
-84560288,84560303,RO
-84560304,84560311,NL
-84560312,84560319,US
-84560320,84560351,TR
-84560352,84560359,US
-84560360,84560367,IE
-84560368,84560375,US
-84560376,84560383,AE
-84560384,84560391,IL
-84560392,84560399,NL
-84560400,84560407,BZ
-84560408,84560415,AU
-84560416,84560423,TR
-84560424,84560543,CN
-84560544,84560551,IL
-84560552,84560559,US
-84560560,84560567,JP
-84560568,84560575,AU
-84560576,84560607,CN
-84560608,84560623,US
-84560624,84560631,SE
-84560632,84560635,SA
+84557826,84560635,NL
84560636,84560639,US
-84560640,84560671,GB
-84560672,84560703,US
-84560704,84560735,IL
-84560736,84560751,NL
-84560752,84560783,US
-84560784,84560791,SA
-84560792,84560799,KW
-84560800,84560815,TR
-84560816,84560823,US
-84560824,84560827,RU
-84560828,84560831,GB
-84560832,84560847,US
-84560848,84560855,NL
-84560856,84560859,IN
-84560860,84560863,KR
-84560864,84560879,CN
-84560880,84560895,US
-84560896,84560903,PT
-84560904,84560911,SG
-84560912,84560919,US
-84560920,84560927,IL
-84560928,84560935,TR
-84560936,84560943,ES
-84560944,84560999,US
-84561000,84561007,IN
-84561008,84561015,US
-84561016,84561023,NL
-84561024,84561031,EG
-84561032,84561039,NL
-84561040,84561047,US
-84561048,84561051,GB
-84561052,84561055,ES
-84561056,84561063,RU
-84561064,84561079,GB
-84561080,84561087,US
-84561088,84561095,IL
-84561096,84561103,ES
-84561104,84561115,GB
-84561116,84561127,NL
-84561128,84561135,BR
-84561136,84561143,VG
-84561144,84561215,NL
+84560640,84561215,NL
84561216,84561247,US
-84561248,84561255,NL
-84561256,84561263,US
-84561264,84561267,NL
-84561268,84561271,CY
-84561272,84561275,LB
-84561276,84561279,TR
-84561280,84561343,NL
-84561344,84561351,TH
+84561248,84561351,NL
84561352,84561359,MY
-84561360,84561367,CH
-84561368,84561383,US
-84561384,84561387,NG
-84561388,84561391,ES
-84561392,84561399,KW
-84561400,84561407,MC
-84561408,84561431,US
-84561432,84561435,NL
-84561436,84561443,US
-84561444,84561447,IE
-84561448,84561455,US
-84561456,84561471,GB
-84561472,84561479,US
-84561480,84561483,RU
-84561484,84561487,CA
-84561488,84561495,US
-84561496,84561503,ES
-84561504,84561519,US
-84561520,84561527,EE
-84561528,84561543,US
-84561544,84561551,CA
-84561552,84561559,YE
-84561560,84561567,GB
-84561568,84561631,US
-84561632,84561639,NL
+84561360,84561639,NL
84561640,84561647,ES
-84561648,84561655,NL
-84561656,84561671,IL
-84561672,84561679,US
-84561680,84561687,NL
-84561688,84561703,US
-84561704,84561711,NL
-84561712,84561727,TR
+84561648,84561655,AF
+84561656,84561687,NL
+84561688,84561695,US
+84561696,84561727,NL
84561728,84561791,US
-84561792,84561895,NL
-84561896,84561903,US
-84561904,84561911,CN
-84561912,84561919,US
-84561920,84562431,NL
-84562432,84562439,MA
-84562440,84562447,NL
-84562448,84562455,US
-84562456,84562463,SG
-84562464,84562479,ES
-84562480,84562487,IN
-84562488,84562495,NL
-84562496,84562503,US
-84562504,84562511,IL
-84562512,84562519,IT
-84562520,84562527,DE
-84562528,84562535,TR
-84562536,84562551,US
-84562552,84562555,RO
-84562556,84562559,US
-84562560,84562591,GB
-84562592,84562599,NL
-84562600,84562607,CN
-84562608,84562615,US
-84562616,84562623,BA
-84562624,84562631,CY
-84562632,84562647,ES
-84562648,84562655,SZ
-84562656,84562663,IL
-84562664,84562671,JO
-84562672,84562679,GB
-84562680,84562751,ES
-84562752,84562815,US
-84562816,84562831,NL
-84562832,84562847,US
-84562848,84562863,NL
-84562864,84562887,LT
-84562888,84562903,NO
-84562904,84562911,IN
-84562912,84562927,AR
-84562928,84562939,US
-84562940,84562943,GB
-84562944,84562951,DK
-84562952,84562952,AU
-84562953,84562953,US
-84562954,84562955,RU
-84562956,84562956,CA
-84562957,84562957,GR
-84562958,84562959,US
-84562960,84562963,SE
-84562964,84562975,NL
-84562976,84562983,ES
-84562984,84562991,RO
-84562992,84562999,AU
-84563000,84563007,US
-84563008,84563011,TR
-84563012,84563015,RU
-84563016,84563019,US
-84563020,84563021,RU
-84563022,84563022,BR
-84563023,84563031,US
-84563032,84563035,GB
-84563036,84563037,MA
-84563038,84563039,HK
-84563040,84563043,TR
-84563044,84563044,EG
-84563045,84563045,TR
-84563046,84563046,SA
-84563047,84563047,AE
-84563048,84563055,CN
-84563056,84563063,GB
-84563064,84563067,RO
-84563068,84563071,KR
-84563072,84563087,NL
-84563088,84563095,SE
-84563096,84563103,AU
-84563104,84563111,CH
-84563112,84563115,RU
-84563116,84563116,TR
-84563117,84563117,RU
-84563118,84563119,US
-84563120,84563123,NL
-84563124,84563127,AE
-84563128,84563135,GB
-84563136,84563143,LT
-84563144,84563151,NZ
-84563152,84563159,AU
-84563160,84563167,RU
-84563168,84563175,IL
-84563176,84563183,NL
-84563184,84563195,CA
-84563196,84563197,RU
-84563198,84563198,US
-84563199,84563199,NL
-84563200,84563207,CH
-84563208,84563211,CN
-84563212,84563215,TR
-84563216,84563223,RU
-84563224,84563231,GB
-84563232,84563239,US
-84563240,84563247,DE
-84563248,84563255,ES
-84563256,84563259,GB
-84563260,84563263,IN
-84563264,84563279,US
-84563280,84563287,CN
-84563288,84563295,RU
-84563296,84563303,CN
-84563304,84563311,IL
-84563312,84563319,IN
-84563320,84563327,CH
-84563328,84563391,NL
-84563392,84563399,SA
-84563400,84563407,ES
-84563408,84563408,DE
-84563409,84563409,AE
-84563410,84563410,US
-84563411,84563411,AU
-84563412,84563415,AF
-84563416,84563423,CH
-84563424,84563431,US
-84563432,84563439,GB
-84563440,84563463,CA
-84563464,84563471,NL
-84563472,84563479,US
-84563480,84563483,NL
-84563484,84563487,AE
-84563488,84563495,AU
-84563496,84563503,EG
-84563504,84563511,CN
-84563512,84563517,AU
-84563518,84563519,US
-84563520,84563527,IN
-84563528,84563531,CN
-84563532,84563535,NL
-84563536,84563543,US
-84563544,84563551,NL
-84563552,84563575,US
-84563576,84563583,AU
-84563584,84563591,GB
-84563592,84563595,RU
-84563596,84563597,IN
-84563598,84563599,AU
-84563600,84563615,US
-84563616,84563623,CN
-84563624,84563627,NL
-84563628,84563631,GB
-84563632,84563639,US
-84563640,84563647,NL
+84561792,84562383,NL
+84562384,84562391,US
+84562392,84562511,NL
+84562512,84562527,US
+84562528,84563647,NL
84563648,84563655,US
-84563656,84563663,EG
-84563664,84563671,SA
-84563672,84563679,NL
-84563680,84563687,US
-84563688,84563691,AE
+84563656,84563691,NL
84563692,84563695,GB
-84563696,84563703,KW
-84563704,84563712,NL
-84563713,84563713,AU
-84563714,84563714,CN
-84563715,84563719,GB
-84563720,84563727,RO
-84563728,84563731,US
-84563732,84563735,NL
-84563736,84563743,CA
-84563744,84563751,GB
-84563752,84563807,US
-84563808,84563815,CN
-84563816,84563823,NL
-84563824,84563839,US
-84563840,84563847,CN
-84563848,84563851,IN
-84563852,84563853,EG
-84563854,84563863,US
-84563864,84563864,FI
-84563865,84563865,BR
-84563866,84563867,SA
-84563868,84563871,FI
-84563872,84563875,NL
-84563876,84563879,RU
-84563880,84563887,GB
-84563888,84563895,US
-84563896,84563903,NL
-84563904,84563905,CN
-84563906,84563906,RU
-84563907,84563907,NL
-84563908,84563911,RU
-84563912,84563915,GB
-84563916,84563917,US
-84563918,84563919,AE
-84563920,84563923,NL
-84563924,84563925,TR
-84563926,84563927,CN
-84563928,84563935,CH
-84563936,84563943,ES
-84563944,84563951,US
-84563952,84563953,AE
-84563954,84563954,US
-84563955,84563955,NL
-84563956,84563958,CN
-84563959,84563959,US
-84563960,84563963,GB
-84563964,84563965,CN
-84563966,84563966,AU
-84563967,84563967,TR
-84563968,84563975,US
-84563976,84563979,GB
-84563980,84563983,NL
-84563984,84563991,DK
-84563992,84563999,US
-84564000,84564007,FI
-84564008,84564015,US
-84564016,84564023,NL
-84564024,84564031,US
-84564032,84564039,GB
-84564040,84564047,NL
-84564048,84564055,NG
-84564056,84564063,AE
-84564064,84564071,RO
-84564072,84564075,NL
-84564076,84564095,US
-84564096,84564099,NL
-84564100,84564119,US
-84564120,84564127,JO
-84564128,84564159,US
-84564160,84564191,NL
-84564192,84564199,ES
-84564200,84564203,US
-84564204,84564207,NL
-84564208,84564223,CN
-84564224,84564231,UG
-84564232,84564239,DK
-84564240,84564247,IL
-84564248,84564263,TR
-84564264,84564271,IT
-84564272,84564279,US
-84564280,84564287,AE
-84564288,84564295,US
-84564296,84564311,DK
-84564312,84564319,US
-84564320,84564327,MA
-84564328,84564331,DE
-84564332,84564332,ES
-84564333,84564333,KW
-84564334,84564335,US
-84564336,84564343,IL
-84564344,84564359,TR
-84564360,84564367,NL
-84564368,84564375,TR
-84564376,84564383,AL
-84564384,84564391,SG
-84564392,84564415,NL
-84564416,84564423,BG
-84564424,84564431,TR
-84564432,84564447,US
-84564448,84564463,TR
-84564464,84564471,SG
-84564472,84564479,EG
-84564480,84564495,US
-84564496,84564503,ES
-84564504,84564575,US
-84564576,84564583,PT
-84564584,84564591,US
-84564592,84564599,ES
-84564600,84564607,US
-84564608,84564615,IT
-84564616,84564655,US
-84564656,84564671,CZ
-84564672,84564687,US
-84564688,84564703,GB
-84564704,84564711,US
-84564712,84564719,CN
-84564720,84564735,US
-84564736,84564743,IN
-84564744,84564751,DE
-84564752,84564767,US
-84564768,84564775,NL
-84564776,84564783,CA
-84564784,84564791,NL
-84564792,84564815,BR
-84564816,84564823,DE
-84564824,84564827,US
-84564828,84564839,DE
-84564840,84564847,SG
-84564848,84564851,UG
-84564852,84564855,PT
-84564856,84564863,TR
-84564864,84564871,US
-84564872,84564879,ES
-84564880,84564911,US
-84564912,84564919,GB
-84564920,84564967,US
-84564968,84564975,DK
-84564976,84564983,GB
-84564984,84564991,IL
-84564992,84564999,NO
-84565000,84565007,US
-84565008,84565015,DE
-84565016,84565023,BA
-84565024,84565031,US
-84565032,84565039,TW
-84565040,84565047,PL
-84565048,84565055,NL
-84565056,84565071,US
-84565072,84565079,NL
-84565080,84565087,US
-84565088,84565119,DK
-84565120,84565183,DE
-84565184,84565215,US
-84565216,84565223,GB
-84565224,84565227,CA
-84565228,84565231,BR
-84565232,84565239,NL
-84565240,84565243,SE
-84565244,84565255,US
-84565256,84565271,NL
-84565272,84565279,US
-84565280,84565287,BE
-84565288,84565303,NL
-84565304,84565311,IN
-84565312,84565319,ZA
-84565320,84565327,RO
-84565328,84565335,BR
-84565336,84565343,AE
-84565344,84565351,US
-84565352,84565359,DK
-84565360,84565367,NG
-84565368,84565375,SA
-84565376,84565391,TR
-84565392,84565399,US
-84565400,84565407,LT
-84565408,84565415,AR
-84565416,84565431,GB
-84565432,84565439,ES
-84565440,84565471,UA
-84565472,84565479,TR
-84565480,84565495,US
-84565496,84565503,BE
-84565504,84565567,ZA
-84565568,84565599,US
-84565600,84565607,VG
-84565608,84565615,TR
-84565616,84565631,US
-84565632,84565639,NL
-84565640,84565647,AL
-84565648,84565655,DK
-84565656,84565663,GR
-84565664,84565667,MA
-84565668,84565671,VG
-84565672,84565679,NL
-84565680,84565687,US
-84565688,84565695,GB
-84565696,84565711,EG
-84565712,84565719,GB
-84565720,84565727,US
-84565728,84565743,CA
-84565744,84565751,SA
-84565752,84565759,GB
-84565760,84565791,US
-84565792,84565799,IE
-84565800,84565807,CA
-84565808,84565823,CY
-84565824,84565847,US
-84565848,84565855,HR
-84565856,84565871,AE
-84565872,84565887,US
-84565888,84565895,LV
-84565896,84565903,JO
-84565904,84565911,FI
-84565912,84565935,US
-84565936,84565967,GB
-84565968,84565975,US
-84565976,84565999,GB
-84566000,84566007,NL
-84566008,84566015,NG
-84566016,84566031,RU
-84566032,84566047,TR
-84566048,84566055,US
-84566056,84566063,NL
-84566064,84566079,US
-84566080,84566095,IN
-84566096,84566111,US
-84566112,84566143,IT
-84566144,84566159,NL
-84566160,84566175,AE
-84566176,84566191,NO
-84566192,84566199,US
-84566200,84566207,AE
-84566208,84566223,CA
-84566224,84566231,DK
-84566232,84566239,ES
-84566240,84566247,PT
-84566248,84566271,IN
-84566272,84566279,US
-84566280,84566287,BZ
-84566288,84566289,US
-84566290,84566290,LT
-84566291,84566291,NO
-84566292,84566293,US
-84566294,84566294,GB
-84566295,84566303,US
-84566304,84566311,GB
-84566312,84566313,NL
-84566314,84566317,US
-84566318,84566319,LV
-84566320,84566327,US
-84566328,84566335,JO
-84566336,84566343,NL
-84566344,84566347,CN
-84566348,84566351,GB
-84566352,84566359,FR
-84566360,84566367,NL
-84566368,84566423,US
-84566424,84566427,NL
-84566428,84566431,US
-84566432,84566439,CN
-84566440,84566447,US
-84566448,84566455,LT
-84566456,84566463,NO
-84566464,84566471,BG
-84566472,84566479,NL
-84566480,84566487,IN
-84566488,84566491,AR
-84566492,84566495,ES
-84566496,84566500,GB
-84566501,84566501,US
-84566502,84566503,NL
-84566504,84566511,US
-84566512,84566515,NL
-84566516,84566519,US
-84566520,84566523,NL
-84566524,84566687,US
-84566688,84566719,NL
-84566720,84566791,US
-84566792,84566799,NL
-84566800,84566807,US
-84566808,84566815,MT
-84566816,84566847,GB
-84566848,84566911,IL
-84566912,84567039,EG
-84567040,84567047,US
-84567048,84567051,IN
-84567052,84567063,US
-84567064,84567071,CY
-84567072,84567079,US
-84567080,84567087,HK
-84567088,84567095,NL
-84567096,84567111,US
-84567112,84567119,BR
-84567120,84567127,US
-84567128,84567135,TR
-84567136,84567143,US
-84567144,84567151,TR
-84567152,84567159,US
-84567160,84567183,NL
-84567184,84567191,US
-84567192,84567199,NL
-84567200,84567215,US
-84567216,84567219,NL
-84567220,84567223,US
-84567224,84567231,NL
-84567232,84567359,US
-84567360,84567391,NL
-84567392,84567399,US
-84567400,84567415,NL
-84567416,84567551,US
-84567552,84567583,NG
-84567584,84567599,US
-84567600,84567615,NL
-84567616,84567623,ES
-84567624,84567631,US
-84567632,84567647,GB
-84567648,84567655,US
-84567656,84567663,NL
-84567664,84567671,LB
-84567672,84567679,US
-84567680,84567687,GB
-84567688,84567695,US
-84567696,84567703,NL
-84567704,84567719,US
-84567720,84567727,DE
-84567728,84567751,US
-84567752,84567759,GB
-84567760,84567767,US
-84567768,84567775,RO
-84567776,84567783,QA
-84567784,84567791,NL
-84567792,84567799,US
-84567800,84567807,DK
-84567808,84567839,US
-84567840,84567903,GB
-84567904,84567935,RU
-84567936,84568007,US
-84568008,84568023,EG
-84568024,84568031,KE
-84568032,84568063,AR
-84568064,84568071,AE
-84568072,84568079,US
-84568080,84568087,DK
-84568088,84568095,US
-84568096,84568111,NL
-84568112,84568119,US
-84568120,84568127,BZ
-84568128,84568143,US
-84568144,84568151,TR
-84568152,84568159,RO
-84568160,84568191,HK
-84568192,84568199,QA
-84568200,84568203,US
-84568204,84568207,NL
-84568208,84568215,MA
-84568216,84568223,US
-84568224,84568231,SA
-84568232,84568239,QA
-84568240,84568247,BR
-84568248,84568255,EG
-84568256,84568263,US
-84568264,84568271,NL
-84568272,84568279,US
-84568280,84568287,CN
-84568288,84568295,JO
-84568296,84568303,US
-84568304,84568311,ES
-84568312,84568319,US
-84568320,84568327,GB
-84568328,84568367,US
-84568368,84568383,NL
-84568384,84568583,US
-84568584,84568599,NL
-84568600,84568607,AE
-84568608,84568623,US
-84568624,84568627,PL
-84568628,84568639,NL
-84568640,84568647,AU
-84568648,84568655,AT
-84568656,84568671,EG
-84568672,84568695,NL
-84568696,84568711,US
-84568712,84568715,NL
-84568716,84568719,GB
-84568720,84568727,IE
-84568728,84568735,IT
-84568736,84568743,GB
-84568744,84568751,UA
-84568752,84568759,CZ
-84568760,84568767,DO
-84568768,84568799,TR
-84568800,84568807,BD
-84568808,84568823,AE
-84568824,84568831,US
-84568832,84568863,GB
-84568864,84568871,NL
-84568872,84568879,US
-84568880,84568887,GB
-84568888,84568895,RU
-84568896,84568911,NL
-84568912,84568919,CN
-84568920,84568927,PA
-84568928,84568935,QA
-84568936,84568943,IT
-84568944,84568959,MX
-84568960,84568975,US
-84568976,84568983,IN
-84568984,84568991,CA
-84568992,84568999,AU
-84569000,84569007,US
-84569008,84569015,GR
-84569016,84569023,GB
-84569024,84569039,JP
-84569040,84569047,US
-84569048,84569055,LB
-84569056,84569063,UA
-84569064,84569071,SA
-84569072,84569079,RU
-84569080,84569087,HR
-84569088,84569095,US
-84569096,84569103,DE
-84569104,84569111,SA
-84569112,84569127,GB
-84569128,84569163,US
-84569164,84569167,NL
-84569168,84569215,US
-84569216,84569223,TR
-84569224,84569231,MA
-84569232,84569239,AT
-84569240,84569247,JO
-84569248,84569255,ZA
-84569256,84569267,TW
-84569268,84569271,US
-84569272,84569343,GB
-84569344,84569351,TR
-84569352,84569359,US
-84569360,84569375,CN
-84569376,84569391,SY
-84569392,84569439,US
-84569440,84569447,GB
-84569448,84569455,DK
-84569456,84569463,US
-84569464,84569471,CN
-84569472,84569535,NL
-84569536,84569551,PK
-84569552,84569559,CN
-84569560,84569567,LB
-84569568,84569575,GB
-84569576,84569579,IT
-84569580,84569591,TR
-84569592,84569595,PL
-84569596,84569599,CY
-84569600,84569607,GB
-84569608,84569615,TR
-84569616,84569623,AU
-84569624,84569631,GB
-84569632,84569647,US
-84569648,84569663,AU
-84569664,84569679,PK
-84569680,84569727,AU
-84569728,84569791,NL
-84569792,84569823,AU
-84569824,84569839,CN
-84569840,84569847,US
-84569848,84569863,SE
-84569864,84569871,CN
-84569872,84569879,TR
-84569880,84569883,US
-84569884,84569887,BR
-84569888,84569895,TR
-84569896,84569899,BR
-84569900,84569911,DE
-84569912,84569919,CN
-84569920,84569927,US
-84569928,84569935,SA
-84569936,84569943,US
-84569944,84569951,SZ
-84569952,84569959,ES
-84569960,84569967,NL
-84569968,84569975,AT
-84569976,84569983,CA
-84569984,84570015,IL
-84570016,84570023,IT
-84570024,84570031,US
-84570032,84570039,IL
-84570040,84570047,NL
-84570048,84570055,DE
-84570056,84570059,NL
-84570060,84570063,ES
-84570064,84570071,GB
-84570072,84570079,DK
-84570080,84570087,TR
-84570088,84570095,DK
-84570096,84570103,US
-84570104,84570111,BR
-84570112,84570143,AE
-84570144,84570159,MA
-84570160,84570175,US
-84570176,84570207,NL
-84570208,84570223,AE
-84570224,84570239,ES
-84570240,84570255,US
-84570256,84570271,DK
-84570272,84570335,TR
-84570336,84570343,RU
-84570344,84570351,AE
-84570352,84570367,CA
-84570368,84570383,NL
-84570384,84570391,CZ
-84570392,84570399,KW
-84570400,84570439,US
-84570440,84570447,NL
-84570448,84570463,EG
-84570464,84570471,US
-84570472,84570479,HK
-84570480,84570495,US
-84570496,84570503,NL
-84570504,84570511,US
-84570512,84570519,AU
-84570520,84570523,NL
-84570524,84570527,UA
-84570528,84570535,US
-84570536,84570543,IT
-84570544,84570551,AU
-84570552,84570555,AT
-84570556,84570559,NL
-84570560,84570591,US
-84570592,84570599,BR
-84570600,84570607,US
-84570608,84570615,BR
-84570616,84570623,US
-84570624,84570631,RU
-84570632,84570639,TR
-84570640,84570647,SA
-84570648,84570651,CN
-84570652,84570655,IN
-84570656,84570679,TR
-84570680,84570687,KW
-84570688,84570699,PK
-84570700,84570703,GB
-84570704,84570711,AE
-84570712,84570719,IN
-84570720,84570731,US
-84570732,84570735,HR
-84570736,84570743,US
-84570744,84570751,SA
-84570752,84570767,NL
-84570768,84570771,SA
-84570772,84570773,AE
-84570774,84570774,BA
-84570775,84570775,US
-84570776,84570779,GB
-84570780,84570780,BH
-84570781,84570782,US
-84570783,84570783,CN
-84570784,84570791,IT
-84570792,84570799,EG
-84570800,84570815,CA
-84570816,84570823,SA
-84570824,84570831,AE
-84570832,84570847,NL
-84570848,84570855,AE
-84570856,84570863,US
-84570864,84570871,TR
-84570872,84570879,SE
-84570880,84570887,US
-84570888,84570903,GB
-84570904,84570911,SA
-84570912,84570935,MA
-84570936,84570951,SA
-84570952,84570959,SG
-84570960,84570967,MA
-84570968,84570975,UG
-84570976,84570979,NL
-84570980,84570991,IN
-84570992,84570999,US
-84571000,84571007,IL
-84571008,84571047,US
-84571048,84571055,JO
-84571056,84571073,US
-84571074,84571075,GB
-84571076,84571079,NL
-84571080,84571087,BR
-84571088,84571103,GB
-84571104,84571111,MA
-84571112,84571127,SA
-84571128,84571131,IL
-84571132,84571135,TR
-84571136,84571159,US
-84571160,84571167,TR
-84571168,84571175,NO
-84571176,84571191,CN
-84571192,84571195,AU
-84571196,84571199,BH
-84571200,84571207,US
-84571208,84571215,HR
-84571216,84571219,DK
-84571220,84571223,PA
-84571224,84571231,PL
-84571232,84571247,CN
-84571248,84571261,AU
-84571262,84571262,GB
-84571263,84571295,US
-84571296,84571303,AU
-84571304,84571311,HU
-84571312,84571319,AE
-84571320,84571335,GB
-84571336,84571343,IL
-84571344,84571351,GB
-84571352,84571359,DK
-84571360,84571367,UA
-84571368,84571383,TR
-84571384,84571387,MA
-84571388,84571389,IN
-84571390,84571391,KR
-84571392,84571407,BR
-84571408,84571415,RU
-84571416,84571419,BR
-84571420,84571431,IL
-84571432,84571439,BR
-84571440,84571455,NL
-84571456,84571463,EG
-84571464,84571471,NL
-84571472,84571487,DE
-84571488,84571519,ES
-84571520,84571531,US
-84571532,84571551,DK
-84571552,84571559,IE
-84571560,84571567,MX
-84571568,84571583,US
-84571584,84571599,PT
-84571600,84571607,US
-84571608,84571615,BA
-84571616,84571623,NL
-84571624,84571631,SZ
-84571632,84571639,US
-84571640,84571647,AU
-84571648,84571679,BR
-84571680,84571687,GB
-84571688,84571695,BM
-84571696,84571711,NL
-84571712,84571715,DE
-84571716,84571719,PK
-84571720,84571727,NL
-84571728,84571743,IN
-84571744,84571759,GB
-84571760,84571775,US
-84571776,84571783,EG
-84571784,84571787,CY
-84571788,84571799,IN
-84571800,84571831,US
-84571832,84571839,NL
-84571840,84571871,BR
-84571872,84571887,US
-84571888,84571903,NL
-84571904,84571911,AE
-84571912,84571919,NL
-84571920,84571927,EG
-84571928,84571935,BD
-84571936,84571943,IT
-84571944,84571951,PL
-84571952,84571959,CA
-84571960,84571975,ES
-84571976,84571983,US
-84571984,84571995,TR
-84571996,84571999,SA
-84572000,84572007,LB
-84572008,84572015,AE
-84572016,84572023,CN
-84572024,84572031,FR
-84572032,84572035,US
-84572036,84572043,AF
-84572044,84572047,US
-84572048,84572055,IN
-84572056,84572063,NZ
-84572064,84572071,DE
-84572072,84572095,US
-84572096,84572103,NL
-84572104,84572111,US
-84572112,84572127,NL
-84572128,84572135,US
-84572136,84572143,GB
-84572144,84572159,AF
-84572160,84572223,US
-84572224,84572239,TR
-84572240,84572243,NL
-84572244,84572247,TR
-84572248,84572251,GB
-84572252,84572259,IT
-84572260,84572261,NL
-84572262,84572262,EG
-84572263,84572263,AE
-84572264,84572271,NL
-84572272,84572279,US
-84572280,84572287,NL
-84572288,84572289,US
-84572290,84572291,NL
-84572292,84572295,US
-84572296,84572303,BR
-84572304,84572311,NL
-84572312,84572319,SA
-84572320,84572367,US
-84572368,84572375,GB
-84572376,84572383,VG
-84572384,84572391,TR
-84572392,84572399,CN
-84572400,84572407,US
-84572408,84572415,TR
-84572416,84572423,US
-84572424,84572427,IT
-84572428,84572431,LV
-84572432,84572435,US
-84572436,84572439,DE
-84572440,84572447,TR
-84572448,84572455,US
-84572456,84572459,SE
-84572460,84572463,LB
-84572464,84572471,US
-84572472,84572479,DE
-84572480,84572495,US
-84572496,84572503,HK
-84572504,84572511,EG
-84572512,84572515,IL
-84572516,84572519,US
-84572520,84572527,GB
-84572528,84572559,US
-84572560,84572575,KW
-84572576,84572583,US
-84572584,84572591,RU
-84572592,84572599,US
-84572600,84572607,AE
-84572608,84572615,DK
-84572616,84572623,BG
-84572624,84572647,US
-84572648,84572655,NL
-84572656,84572663,ES
-84572664,84572671,AE
-84572672,84572679,DK
-84572680,84572687,CN
-84572688,84572695,TW
-84572696,84572703,RU
-84572704,84572711,US
-84572712,84572715,GB
-84572716,84572717,HR
-84572718,84572718,GB
-84572719,84572719,GR
-84572720,84572727,CA
-84572728,84572731,US
-84572732,84572733,SA
-84572734,84572734,CN
-84572735,84572735,TR
-84572736,84572743,EG
-84572744,84572751,GB
-84572752,84572759,HR
-84572760,84572771,TR
-84572772,84572775,US
-84572776,84572783,BR
-84572784,84572799,TR
-84572800,84572807,US
-84572808,84572815,SY
-84572816,84572823,CY
-84572824,84572831,GB
-84572832,84572839,NL
-84572840,84572847,BD
-84572848,84572855,SA
-84572856,84572863,CY
-84572864,84572871,ES
-84572872,84572879,IT
-84572880,84572887,SA
-84572888,84572895,US
-84572896,84572903,HR
-84572904,84572911,DK
-84572912,84572919,CN
-84572920,84572923,IT
-84572924,84573183,NL
-84573184,84573191,BE
-84573192,84573199,NL
-84573200,84573211,US
-84573212,84573215,NL
-84573216,84573231,TR
-84573232,84573239,US
-84573240,84573247,FR
-84573248,84573255,CH
-84573256,84573279,NL
-84573280,84573311,US
-84573312,84573343,NL
-84573344,84573351,GB
-84573352,84573359,SA
-84573360,84573371,US
-84573372,84573375,TR
-84573376,84573387,US
-84573388,84573391,NL
-84573392,84573415,US
-84573416,84573423,NL
-84573424,84573439,US
-84573440,84573440,NL
-84573441,84573441,US
-84573442,84573443,NL
-84573444,84573447,IT
-84573448,84573455,US
-84573456,84573463,JP
-84573464,84573471,LB
-84573472,84573479,PS
-84573480,84573495,NL
-84573496,84573499,AE
-84573500,84573502,HK
-84573503,84573511,NL
-84573512,84573516,HK
-84573517,84573518,NL
-84573519,84573571,US
-84573572,84573575,GB
-84573576,84573579,NL
-84573580,84573583,GB
-84573584,84573587,RU
-84573588,84573591,US
-84573592,84573599,JP
-84573600,84573603,NL
-84573604,84573607,US
-84573608,84573611,NL
-84573612,84573615,US
-84573616,84573623,GB
-84573624,84573631,NG
-84573632,84573639,IE
-84573640,84573647,CA
-84573648,84573656,LB
-84573657,84573657,CY
-84573658,84573675,US
-84573676,84573676,NL
-84573677,84573677,GB
-84573678,84573679,TR
-84573680,84573687,HR
-84573688,84573688,SA
-84573689,84573690,TR
-84573691,84573691,AE
-84573692,84573694,RO
-84573695,84573696,NL
-84573697,84573697,BE
-84573698,84573699,US
-84573700,84573703,RU
-84573704,84573711,IT
-84573712,84573727,AE
-84573728,84573759,RU
-84573760,84573823,IT
-84573824,84573839,HR
-84573840,84573855,GB
-84573856,84573887,AE
-84573888,84573919,PA
-84573920,84573927,BR
-84573928,84573951,RU
-84573952,84573983,RO
-84573984,84574055,US
-84574056,84574063,PS
-84574064,84574071,IT
-84574072,84574103,HK
-84574104,84574207,US
+84563696,84563703,NL
+84563704,84563711,US
+84563712,84564411,NL
+84564412,84564415,US
+84564416,84564498,NL
+84564499,84564499,GB
+84564500,84564863,NL
+84564864,84564871,TR
+84564872,84565247,NL
+84565248,84565311,US
+84565312,84565655,NL
+84565656,84565663,US
+84565664,84574207,NL
84574208,84576255,FR
84576256,84582399,GB
84582400,84590591,DE
-84590592,84591103,NL
-84591104,84592639,BR
+84590592,84592639,BR
84592640,84594687,ES
84594688,84598783,DE
84598784,84600831,IQ
84600832,84602879,GB
84602880,84606975,AZ
84606976,84609023,AT
-84609024,84609087,BI
-84609088,84610047,GB
-84610048,84610303,ZM
-84610304,84610559,ZW
-84610560,84610687,ZA
-84610688,84610815,ZM
-84610816,84610879,CD
-84610880,84610943,AO
-84610944,84611071,ZA
-84611072,84615167,A2
+84609024,84615167,GB
84615168,84617215,IT
84617216,84619263,PS
84619264,84621311,DE
84621312,84623359,GR
84623360,84627455,RU
-84627456,84627711,US
-84627712,84627967,GB
-84627968,84628223,JP
-84628224,84631551,GB
+84627456,84631551,GB
84631552,84639743,IT
84639744,84672511,TR
84672512,84934655,RO
@@ -1658,12 +297,11 @@
85327872,85360639,IR
85360640,85362687,IL
85362688,85364735,GB
-85364736,85365767,DE
-85365768,85365775,CH
-85365776,85366015,DE
-85366016,85366271,LU
-85366272,85366783,DE
-85366784,85367807,CZ
+85364736,85366783,DE
+85366784,85367039,CZ
+85367040,85367295,RU
+85367296,85367551,SK
+85367552,85367807,RU
85367808,85368831,UA
85368832,85377023,RS
85377024,85385215,IR
@@ -1671,12 +309,10 @@
85387264,85389311,SE
85389312,85391359,DE
85391360,85393407,NL
-85393408,85393919,EU
-85393920,85394175,DE
-85394176,85395711,EU
-85395712,85395743,GB
-85395744,85395775,NG
-85395776,85401599,EU
+85395968,85396223,BE
+85396480,85397503,ES
+85398528,85398783,SA
+85399552,85400063,FR
85401600,85403647,IT
85403648,85405695,FR
85405696,85407743,RU
@@ -1711,13 +347,7 @@
86114304,86147071,KZ
86147072,86155263,ES
86155264,86157311,PS
-86157312,86157615,IL
-86157616,86157631,AO
-86157632,86157647,IL
-86157648,86157663,AO
-86157664,86157823,IL
-86157824,86158079,CG
-86158080,86159359,IL
+86157312,86159359,IL
86159360,86161407,UA
86161408,86163455,IT
86163456,86171647,IR
@@ -1738,1288 +368,151 @@
86245376,86376447,OM
86376448,86409215,AE
86409216,86441983,HU
-86441984,86442239,PL
-86442240,86442243,GB
-86442244,86442247,PL
-86442248,86442255,GB
-86442256,86442271,PL
-86442272,86442287,FR
-86442288,86442291,PL
-86442292,86442295,GB
-86442296,86442303,DE
-86442304,86442319,IT
-86442320,86442327,PL
-86442328,86442335,FR
-86442336,86442343,PT
-86442344,86442351,GB
-86442352,86442363,FR
-86442364,86442367,PL
-86442368,86442415,FR
-86442416,86442423,BE
-86442424,86442431,NL
-86442432,86442435,PL
-86442436,86442439,ES
-86442440,86442443,GB
-86442444,86442447,DE
-86442448,86442507,FR
-86442508,86442511,PL
-86442512,86442527,FR
-86442528,86442543,ES
-86442544,86442551,FR
-86442552,86442555,PL
-86442556,86442559,ES
-86442560,86442599,FR
-86442600,86442603,ES
-86442604,86442623,FR
-86442624,86442639,CH
-86442640,86442655,FR
-86442656,86442663,CZ
-86442664,86442667,FR
-86442668,86442671,IT
-86442672,86442687,FI
-86442688,86442691,GB
-86442692,86442695,FR
-86442696,86442699,ES
-86442700,86442703,CH
-86442704,86442711,FR
-86442712,86442715,DE
-86442716,86442719,BE
-86442720,86442723,PT
-86442724,86442727,PL
-86442728,86442735,IT
-86442736,86442739,PL
-86442740,86442743,GB
-86442744,86442747,IE
-86442748,86442751,GB
-86442752,86443039,FR
-86443040,86443047,IT
-86443048,86443051,IE
-86443052,86443055,PL
-86443056,86443059,GB
-86443060,86443063,PL
-86443064,86443067,DE
-86443068,86443135,FR
-86443136,86443167,NL
-86443168,86443199,PT
-86443200,86443231,IT
-86443232,86443295,PT
-86443296,86443311,LT
-86443312,86443343,IE
-86443344,86443359,IT
-86443360,86443363,FR
-86443364,86443367,NL
-86443368,86443375,FR
-86443376,86443391,PT
-86443392,86443407,BE
-86443408,86443415,PL
-86443416,86443423,PT
-86443424,86443427,IT
-86443428,86443447,FR
-86443448,86443451,IT
-86443452,86443455,FI
-86443456,86443487,NL
-86443488,86443503,ES
-86443504,86443507,IT
-86443508,86443539,FR
-86443540,86443543,PL
-86443544,86443551,LT
-86443552,86443555,FR
-86443556,86443559,PL
-86443560,86443583,FR
-86443584,86443647,GB
-86443648,86443855,FR
-86443856,86443863,PT
-86443864,86443867,PL
-86443868,86443871,FR
-86443872,86443875,FI
-86443876,86443879,IE
-86443880,86443883,FR
-86443884,86443887,ES
-86443888,86443903,FR
-86443904,86443919,PL
-86443920,86443971,FR
-86443972,86443975,PT
-86443976,86443979,PL
-86443980,86443983,FR
-86443984,86443995,ES
-86443996,86443999,PT
-86444000,86444003,GB
-86444004,86444007,ES
-86444008,86444011,FR
-86444012,86444015,PL
-86444016,86444031,FR
-86444032,86444035,PT
-86444036,86444039,BE
-86444040,86444043,FR
-86444044,86444047,ES
-86444048,86444063,LT
-86444064,86444071,IT
-86444072,86444079,DE
-86444080,86444095,FR
-86444096,86444103,GB
-86444104,86444111,FR
-86444112,86444119,GB
-86444120,86444123,IT
-86444124,86444127,BE
-86444128,86444135,FR
-86444136,86444143,IE
-86444144,86444151,GB
-86444152,86444159,IE
-86444160,86444303,FR
-86444304,86444307,PL
-86444308,86444315,FR
-86444316,86444319,PL
-86444320,86444327,ES
-86444328,86444331,NL
-86444332,86444335,ES
-86444336,86444351,GB
-86444352,86444367,PL
-86444368,86444375,DE
-86444376,86444395,FR
-86444396,86444399,GB
-86444400,86444415,ES
-86444416,86444479,FR
-86444480,86444487,IE
-86444488,86444495,CH
-86444496,86444515,FR
-86444516,86444523,GB
-86444524,86444527,FR
-86444528,86444543,PL
-86444544,86444547,FR
-86444548,86444551,PL
-86444552,86444559,FR
-86444560,86444567,PL
-86444568,86444571,LT
-86444572,86444583,FR
-86444584,86444591,NL
-86444592,86444595,FR
-86444596,86444599,NL
-86444600,86444603,IE
-86444604,86444639,NL
-86444640,86444655,PL
-86444656,86444663,ES
-86444664,86444687,PL
-86444688,86444691,GB
-86444692,86444695,FR
-86444696,86444703,PL
-86444704,86444719,FR
-86444720,86444739,PL
-86444740,86444743,FR
-86444744,86444751,GB
-86444752,86444783,FR
-86444784,86444791,GB
-86444792,86444799,NL
-86444800,86444815,GB
-86444816,86444835,FR
-86444836,86444839,PL
-86444840,86444843,DE
-86444844,86444847,GB
-86444848,86444871,FR
-86444872,86444875,NL
-86444876,86444879,PL
-86444880,86444887,FR
-86444888,86444895,PL
-86444896,86444903,IT
-86444904,86444911,ES
-86444912,86444927,FI
-86444928,86444931,DE
-86444932,86444935,PL
-86444936,86444939,NL
-86444940,86444943,CH
-86444944,86444947,GB
-86444948,86444951,PL
-86444952,86444971,FR
-86444972,86444975,DE
-86444976,86444983,IE
-86444984,86444991,FR
-86444992,86445055,PT
-86445056,86445059,ES
-86445060,86445071,FR
-86445072,86445079,DE
-86445080,86445083,BE
-86445084,86445087,FR
-86445088,86445091,GB
-86445092,86445095,NL
-86445096,86445099,IT
-86445100,86445103,FI
-86445104,86445111,CH
-86445112,86445119,FR
-86445120,86445151,PT
-86445152,86445167,PL
-86445168,86445207,FR
-86445208,86445211,IE
-86445212,86445215,PL
-86445216,86445231,GB
-86445232,86445235,IE
-86445236,86445239,FR
-86445240,86445247,GB
-86445248,86445251,PL
-86445252,86445255,IE
-86445256,86445263,PL
-86445264,86445279,ES
-86445280,86445287,FR
-86445288,86445291,IT
-86445292,86445295,PL
-86445296,86445311,GB
-86445312,86445319,NL
-86445320,86445327,DE
-86445328,86445343,IE
-86445344,86445347,GB
-86445348,86445351,PL
-86445352,86445367,FR
-86445368,86445371,IT
-86445372,86445375,PL
-86445376,86445407,FR
-86445408,86445423,IE
-86445424,86445431,GB
-86445432,86445439,BE
-86445440,86445455,IE
-86445456,86445471,PL
-86445472,86445479,FR
-86445480,86445483,ES
-86445484,86445503,FR
-86445504,86445519,GB
-86445520,86445523,BE
-86445524,86445527,FR
-86445528,86445531,CZ
-86445532,86445551,FR
-86445552,86445555,ES
-86445556,86445559,GB
-86445560,86445563,PL
-86445564,86445567,ES
-86445568,86445711,FR
-86445712,86445727,PL
-86445728,86445735,DE
-86445736,86445739,FR
-86445740,86445743,ES
-86445744,86445759,GB
-86445760,86445823,FR
-86445824,86445831,NL
-86445832,86445839,ES
-86445840,86445883,FR
-86445884,86445887,IT
-86445888,86445939,FR
-86445940,86445943,PL
-86445944,86445951,IT
-86445952,86445955,CH
-86445956,86445963,FR
-86445964,86445967,DE
-86445968,86445975,FR
-86445976,86445983,PL
-86445984,86446023,FR
-86446024,86446027,GB
-86446028,86446031,IE
-86446032,86446039,FR
-86446040,86446043,BE
-86446044,86446047,FR
-86446048,86446063,NL
-86446064,86446079,PL
-86446080,86446111,FR
-86446112,86446127,GB
-86446128,86446131,CZ
-86446132,86446135,FI
-86446136,86446175,FR
-86446176,86446183,ES
-86446184,86446191,IE
-86446192,86446399,FR
-86446400,86446403,IT
-86446404,86446407,FR
-86446408,86446415,DE
-86446416,86446419,FR
-86446420,86446423,PT
-86446424,86446427,FR
+86441984,86442495,FR
+86442496,86442499,ES
+86442500,86442507,FR
+86442508,86442511,ES
+86442512,86442687,FR
+86442688,86442691,ES
+86442692,86442699,FR
+86442700,86442700,ES
+86442701,86442702,CH
+86442703,86442703,ES
+86442704,86442723,FR
+86442724,86442724,PL
+86442725,86442739,FR
+86442740,86442743,ES
+86442744,86442751,FR
+86442752,86443007,GB
+86443008,86443047,FR
+86443048,86443051,ES
+86443052,86443451,FR
+86443452,86443455,ES
+86443456,86443535,FR
+86443536,86443539,ES
+86443540,86444119,FR
+86444120,86444123,ES
+86444124,86444287,FR
+86444288,86444291,NL
+86444292,86444315,FR
+86444316,86444323,ES
+86444324,86444387,FR
+86444388,86444391,NL
+86444392,86444519,FR
+86444520,86444523,ES
+86444524,86444563,FR
+86444564,86444567,NL
+86444568,86444575,FR
+86444576,86444579,ES
+86444580,86444687,FR
+86444688,86444691,ES
+86444692,86444835,FR
+86444836,86444839,NL
+86444840,86444843,ES
+86444844,86444879,FR
+86444880,86444883,NL
+86444884,86445059,FR
+86445060,86445063,NL
+86445064,86445111,FR
+86445112,86445115,NL
+86445116,86445251,FR
+86445252,86445255,NL
+86445256,86445559,FR
+86445560,86445563,NL
+86445564,86446407,FR
+86446408,86446408,DE
+86446409,86446411,FR
+86446412,86446412,DE
+86446413,86446427,FR
86446428,86446431,DE
-86446432,86446439,PL
-86446440,86446447,FR
-86446448,86446455,PL
-86446456,86446459,BE
-86446460,86446463,CH
-86446464,86446527,FR
-86446528,86446531,DE
-86446532,86446535,PL
-86446536,86446539,FI
-86446540,86446543,NL
-86446544,86446547,IE
-86446548,86446551,FR
-86446552,86446555,PL
-86446556,86446559,GB
-86446560,86446575,FR
-86446576,86446579,PL
-86446580,86446583,ES
-86446584,86446587,IT
-86446588,86446591,CZ
-86446592,86446599,ES
-86446600,86446607,FR
-86446608,86446611,ES
-86446612,86446615,PL
-86446616,86446619,NL
-86446620,86446623,DE
-86446624,86446655,FR
-86446656,86446675,IT
-86446676,86446679,IE
-86446680,86446683,PL
-86446684,86446687,FR
-86446688,86446691,GB
-86446692,86446695,PL
-86446696,86446699,IT
-86446700,86446707,GB
-86446708,86446715,ES
-86446716,86446719,DE
-86446720,86446723,FR
-86446724,86446727,IT
-86446728,86446731,PT
-86446732,86446735,GB
-86446736,86446743,CZ
-86446744,86446751,FR
-86446752,86446755,ES
-86446756,86446763,PL
-86446764,86446767,ES
-86446768,86446879,FR
-86446880,86446887,ES
-86446888,86446911,NL
-86446912,86446927,FR
-86446928,86446931,PL
-86446932,86446943,FR
-86446944,86446975,ES
-86446976,86446979,PL
-86446980,86446991,FR
-86446992,86446999,DE
-86447000,86447015,FR
-86447016,86447023,ES
-86447024,86447027,IE
-86447028,86447039,FR
-86447040,86447047,PT
-86447048,86447051,NL
-86447052,86447063,FR
-86447064,86447071,GB
-86447072,86447087,PL
-86447088,86447091,GB
-86447092,86447103,ES
-86447104,86447119,FR
-86447120,86447135,IE
-86447136,86447147,FR
-86447148,86447151,PL
-86447152,86447167,LT
-86447168,86447199,FR
-86447200,86447215,CZ
-86447216,86447231,PL
-86447232,86447239,CH
-86447240,86447247,ES
-86447248,86447255,FR
+86446432,86446619,FR
+86446620,86446620,DE
+86446621,86446679,FR
+86446680,86446683,ES
+86446684,86447095,FR
+86447096,86447103,ES
+86447104,86447255,FR
86447256,86447263,PL
-86447264,86447267,FR
-86447268,86447279,PL
-86447280,86447283,DE
-86447284,86447287,FR
-86447288,86447291,DE
-86447292,86447295,PL
-86447296,86447299,NL
-86447300,86447303,ES
-86447304,86447311,IE
-86447312,86447335,FR
-86447336,86447339,ES
-86447340,86447343,PT
-86447344,86447347,IE
-86447348,86447351,ES
-86447352,86447355,PL
-86447356,86447615,FR
-86447616,86448383,GB
-86448384,86448639,FR
-86448640,86448703,ES
-86448704,86448723,FR
-86448724,86448727,PL
-86448728,86448731,NL
-86448732,86448735,PL
-86448736,86448767,FR
-86448768,86448783,BE
-86448784,86448791,GB
-86448792,86448795,FR
-86448796,86448799,NL
-86448800,86448803,FR
-86448804,86448815,FI
-86448816,86448831,FR
-86448832,86448839,NL
-86448840,86448843,BE
-86448844,86448847,FR
-86448848,86448851,CH
+86447264,86447279,FR
+86447280,86447280,DE
+86447281,86447287,FR
+86447288,86447288,DE
+86447289,86448803,FR
+86448804,86448807,FI
+86448808,86448851,FR
86448852,86448855,IT
86448856,86448859,PT
-86448860,86448863,PL
-86448864,86448867,GB
-86448868,86448871,PL
-86448872,86448879,FR
-86448880,86448883,PT
-86448884,86448887,PL
-86448888,86448895,FR
-86448896,86449151,GB
-86449152,86449167,BE
-86449168,86449183,ES
-86449184,86449215,CZ
-86449216,86449279,IE
-86449280,86449283,GB
-86449284,86449287,ES
-86449288,86449291,IT
-86449292,86449363,PL
+86448860,86449363,FR
86449364,86449367,DE
-86449368,86449379,PL
-86449380,86449383,FI
-86449384,86449387,PL
-86449388,86449391,FI
-86449392,86449399,FR
-86449400,86449407,PL
-86449408,86449439,FR
-86449440,86449455,ES
-86449456,86449459,FR
-86449460,86449463,PL
-86449464,86449471,FR
-86449472,86449475,PL
-86449476,86449479,LT
-86449480,86449487,FR
-86449488,86449495,ES
-86449496,86449499,FR
-86449500,86449503,PL
-86449504,86449535,BE
-86449536,86449551,FR
-86449552,86449559,PL
-86449560,86449563,PT
-86449564,86449567,PL
-86449568,86449587,FR
-86449588,86449595,DE
-86449596,86449599,FR
-86449600,86449647,IE
-86449648,86449651,FR
-86449652,86449655,GB
-86449656,86449663,ES
-86449664,86449675,FR
-86449676,86449679,PT
-86449680,86449695,FR
-86449696,86449727,NL
-86449728,86449759,PL
-86449760,86449791,FR
-86449792,86449823,PL
-86449824,86449863,FR
-86449864,86449879,PL
-86449880,86449883,FR
-86449884,86449887,DE
-86449888,86449967,FR
-86449968,86449983,PL
-86449984,86449999,FR
-86450000,86450003,GB
-86450004,86450007,PT
-86450008,86450011,FR
-86450012,86450015,IE
-86450016,86450019,FR
-86450020,86450023,PL
-86450024,86450027,FR
-86450028,86450031,PL
-86450032,86450039,FR
-86450040,86450043,DE
-86450044,86450079,PL
-86450080,86450083,FR
-86450084,86450087,NL
-86450088,86450095,FR
-86450096,86450099,GB
-86450100,86450103,DE
-86450104,86450111,FR
-86450112,86450115,BE
-86450116,86450119,FR
-86450120,86450127,GB
-86450128,86450135,PT
-86450136,86450139,IE
-86450140,86450143,IT
-86450144,86450151,ES
-86450152,86450159,GB
-86450160,86450163,FR
-86450164,86450167,GB
-86450168,86450171,FR
-86450172,86450175,LT
-86450176,86450223,FR
-86450224,86450231,IT
-86450232,86450235,FR
+86449368,86449499,FR
+86449500,86449503,ES
+86449504,86449883,FR
+86449884,86449884,DE
+86449885,86450235,FR
86450236,86450239,GB
-86450240,86450255,ES
-86450256,86450271,BE
-86450272,86450303,GB
-86450304,86450319,FR
-86450320,86450327,LT
-86450328,86450335,FR
-86450336,86450339,GB
-86450340,86450343,FR
-86450344,86450359,PL
-86450360,86450371,FR
-86450372,86450375,GB
-86450376,86450495,FR
-86450496,86450511,IT
-86450512,86450519,FR
-86450520,86450527,PL
-86450528,86450591,BE
-86450592,86450607,FR
-86450608,86450615,ES
-86450616,86450623,GB
-86450624,86450639,IT
-86450640,86450643,FR
-86450644,86450647,PL
-86450648,86450651,ES
-86450652,86450655,IT
-86450656,86450815,FR
-86450816,86450847,LT
-86450848,86450867,PT
-86450868,86450871,ES
-86450872,86450875,FR
-86450876,86450879,GB
-86450880,86450911,FR
-86450912,86450915,IT
-86450916,86450919,PL
-86450920,86450923,FR
-86450924,86450927,CH
-86450928,86451199,FR
-86451200,86451207,BE
-86451208,86451223,FR
-86451224,86451231,NL
-86451232,86451247,BE
-86451248,86451251,FR
-86451252,86451255,GB
-86451256,86451263,NL
-86451264,86451267,PL
-86451268,86451271,FR
-86451272,86451279,IT
-86451280,86451295,FR
-86451296,86451327,NL
-86451328,86451331,GB
-86451332,86451335,FR
-86451336,86451339,IT
-86451340,86451359,FR
-86451360,86451363,PL
-86451364,86451371,FR
-86451372,86451375,LT
-86451376,86451383,FR
-86451384,86451387,PT
-86451388,86451391,FR
-86451392,86451395,GB
-86451396,86451407,PL
-86451408,86451411,IT
-86451412,86451415,FR
-86451416,86451419,DE
-86451420,86451423,ES
-86451424,86451455,NL
-86451456,86451459,CZ
-86451460,86451463,GB
-86451464,86451471,FR
-86451472,86451475,PL
-86451476,86451487,FR
-86451488,86451491,CH
-86451492,86451495,FR
-86451496,86451503,CZ
-86451504,86451511,FR
-86451512,86451515,PL
-86451516,86451519,NL
-86451520,86451527,FR
-86451528,86451531,LT
-86451532,86451535,FI
-86451536,86451551,DE
-86451552,86451563,FR
-86451564,86451567,PL
-86451568,86451575,FR
-86451576,86451579,PT
-86451580,86451583,PL
-86451584,86451615,GB
-86451616,86451667,FR
-86451668,86451671,BE
-86451672,86451675,FR
-86451676,86451679,PT
-86451680,86451687,FR
-86451688,86451695,PT
-86451696,86451703,DE
-86451704,86451871,FR
-86451872,86451879,PL
-86451880,86451887,GB
-86451888,86451895,ES
-86451896,86451903,FR
-86451904,86451967,NL
-86451968,86452031,CH
-86452032,86452047,FR
-86452048,86452055,CH
-86452056,86452059,FR
-86452060,86452063,ES
-86452064,86452067,FR
-86452068,86452075,PL
-86452076,86452079,NL
-86452080,86452111,FR
-86452112,86452115,PL
-86452116,86452143,FR
-86452144,86452159,CH
-86452160,86452191,ES
-86452192,86452211,FR
-86452212,86452215,GB
-86452216,86452223,IT
-86452224,86452239,FR
-86452240,86452247,IT
-86452248,86452251,DE
-86452252,86452255,FR
-86452256,86452267,PL
-86452268,86452271,FR
-86452272,86452279,GB
-86452280,86452287,FR
-86452288,86452295,GB
-86452296,86452335,FR
-86452336,86452343,NL
-86452344,86452347,FR
-86452348,86452351,ES
-86452352,86452367,FR
-86452368,86452383,IE
-86452384,86452399,ES
-86452400,86452415,PL
-86452416,86452447,PT
-86452448,86452479,FR
-86452480,86452543,PT
-86452544,86452575,GB
-86452576,86452583,BE
-86452584,86452587,ES
-86452588,86452591,BE
-86452592,86452607,IT
-86452608,86452639,GB
-86452640,86452911,FR
-86452912,86452927,NL
-86452928,86452943,FR
-86452944,86452959,DE
-86452960,86453023,FR
-86453024,86453031,ES
-86453032,86453039,CZ
-86453040,86453055,PL
-86453056,86453063,FR
-86453064,86453067,PL
-86453068,86453071,IT
-86453072,86453103,FR
-86453104,86453119,PT
-86453120,86453183,ES
-86453184,86453199,DE
-86453200,86453247,FR
-86453248,86453251,GB
-86453252,86453255,FR
-86453256,86453263,BE
-86453264,86453315,FR
-86453316,86453319,ES
-86453320,86453327,FR
-86453328,86453339,ES
-86453340,86453343,PT
-86453344,86453347,FR
-86453348,86453351,DE
-86453352,86453359,PL
-86453360,86453375,FR
-86453376,86453379,ES
-86453380,86453383,FR
-86453384,86453391,FI
-86453392,86453399,FR
-86453400,86453407,DE
-86453408,86453423,SN
-86453424,86453435,FR
-86453436,86453439,ES
-86453440,86453471,FR
-86453472,86453503,ES
-86453504,86453759,IT
-86453760,86453791,PL
-86453792,86453807,FR
-86453808,86453823,GB
-86453824,86453827,CZ
-86453828,86453831,DE
-86453832,86453835,NL
-86453836,86453839,PT
-86453840,86453847,GB
-86453848,86453851,ES
-86453852,86453855,PL
-86453856,86453871,BE
-86453872,86453875,FI
-86453876,86453879,DE
-86453880,86453887,PL
-86453888,86453895,GB
-86453896,86453935,FR
-86453936,86453951,PT
-86453952,86453983,NL
-86453984,86454015,FR
-86454016,86454047,IE
-86454048,86454111,FR
-86454112,86454123,PL
-86454124,86454127,FR
-86454128,86454143,CZ
-86454144,86454159,FR
-86454160,86454175,PT
-86454176,86454183,IE
-86454184,86454187,FR
-86454188,86454191,GB
-86454192,86454207,FR
-86454208,86454271,ES
-86454272,86454279,GB
-86454280,86454287,PL
-86454288,86454299,GB
-86454300,86454303,PL
-86454304,86454335,FR
+86450240,86452067,FR
+86452068,86452071,ES
+86452072,86452671,FR
+86452672,86452735,GB
+86452736,86453199,FR
+86453200,86453203,ES
+86453204,86453311,FR
+86453312,86453315,ES
+86453316,86453836,FR
+86453837,86453838,PT
+86453839,86454335,FR
86454336,86454343,DE
-86454344,86454351,PL
-86454352,86454367,FI
-86454368,86454383,PL
-86454384,86454391,GB
-86454392,86454399,FR
-86454400,86454527,BE
-86454528,86454559,NL
-86454560,86454591,FR
-86454592,86454607,NL
-86454608,86454611,PL
-86454612,86454619,FR
-86454620,86454623,ES
-86454624,86454783,FR
-86454784,86454815,IT
-86454816,86454831,FR
-86454832,86454835,ES
-86454836,86454839,FR
-86454840,86454847,GB
-86454848,86454871,FR
-86454872,86454879,ES
-86454880,86454887,DE
-86454888,86454891,IT
-86454892,86454895,NL
-86454896,86454899,PL
-86454900,86454903,GB
-86454904,86454915,FR
-86454916,86454919,PL
-86454920,86454923,DE
-86454924,86454927,FR
-86454928,86454943,DE
-86454944,86454947,FR
-86454948,86454951,ES
-86454952,86454959,FR
-86454960,86454967,PT
-86454968,86454971,DE
-86454972,86454975,GB
-86454976,86454991,FR
-86454992,86454995,FI
-86454996,86454999,DE
-86455000,86455003,LT
-86455004,86455007,ES
-86455008,86455431,FR
-86455432,86455435,NL
-86455436,86455439,PL
-86455440,86455447,FR
-86455448,86455451,ES
-86455452,86455455,FR
-86455456,86455487,PL
-86455488,86455519,FR
-86455520,86455551,PL
-86455552,86455623,FR
-86455624,86455627,DE
-86455628,86455631,FR
-86455632,86455647,ES
-86455648,86455679,NL
-86455680,86455767,FR
-86455768,86455771,GB
-86455772,86455775,NL
-86455776,86455783,DE
-86455784,86455871,FR
-86455872,86455887,ES
-86455888,86455903,NL
-86455904,86455919,GB
-86455920,86455927,BE
-86455928,86455931,FR
-86455932,86455935,IT
-86455936,86456015,FR
-86456016,86456019,GB
-86456020,86456027,FR
-86456028,86456031,CH
-86456032,86456035,IE
-86456036,86456039,DE
-86456040,86456043,FI
-86456044,86456047,NL
-86456048,86456063,GB
-86456064,86456079,FR
-86456080,86456087,PL
-86456088,86456111,FR
-86456112,86456119,PT
-86456120,86456143,GB
-86456144,86456151,NL
-86456152,86456159,DE
-86456160,86456191,NL
-86456192,86456195,FR
+86454344,86454615,FR
+86454616,86454619,ES
+86454620,86455623,FR
+86455624,86455624,DE
+86455625,86456195,FR
86456196,86456211,DE
-86456212,86456219,FR
-86456220,86456223,DE
-86456224,86456279,FR
-86456280,86456283,GB
-86456284,86456287,IT
-86456288,86456295,DE
-86456296,86456303,FR
-86456304,86456307,IT
-86456308,86456311,FR
-86456312,86456315,PT
-86456316,86456319,DE
-86456320,86456351,FR
+86456212,86456351,FR
86456352,86456367,CH
-86456368,86456371,FI
-86456372,86456383,FR
-86456384,86456415,PL
-86456416,86456479,FR
-86456480,86456511,ES
-86456512,86456543,GB
-86456544,86456831,FR
-86456832,86456847,PL
-86456848,86456855,FR
-86456856,86456859,NL
-86456860,86456863,FR
-86456864,86456879,ES
-86456880,86456895,FR
-86456896,86456927,DE
-86456928,86456943,FR
-86456944,86456955,PL
-86456956,86457023,FR
-86457024,86457055,NL
-86457056,86457059,FR
-86457060,86457063,DE
-86457064,86457067,FR
-86457068,86457071,CH
-86457072,86457075,FR
-86457076,86457079,ES
-86457080,86457087,FR
+86456368,86456371,FR
+86456372,86456375,ES
+86456376,86457059,FR
+86457060,86457060,DE
+86457061,86457087,FR
86457088,86457091,DE
-86457092,86457095,FR
-86457096,86457099,GB
-86457100,86457103,ES
-86457104,86457111,IE
-86457112,86457115,DE
-86457116,86457119,FR
-86457120,86457127,PL
-86457128,86457131,FR
-86457132,86457135,PT
-86457136,86457151,FR
-86457152,86457167,IT
-86457168,86457183,FR
-86457184,86457187,ES
-86457188,86457191,GB
-86457192,86457215,ES
-86457216,86457219,PL
-86457220,86457263,FR
-86457264,86457279,ES
-86457280,86457295,PL
-86457296,86457375,FR
-86457376,86457379,NL
-86457380,86457387,FR
-86457388,86457391,NL
-86457392,86457395,PL
-86457396,86457399,NL
-86457400,86457403,GB
-86457404,86457407,DE
-86457408,86457423,GB
-86457424,86457439,FR
-86457440,86457455,PL
-86457456,86457459,DE
-86457460,86457463,FR
-86457464,86457471,BE
-86457472,86457519,ES
-86457520,86457535,DE
-86457536,86457551,IE
-86457552,86457599,FR
-86457600,86457615,CH
-86457616,86457631,FR
-86457632,86457647,PL
-86457648,86457655,BE
-86457656,86457663,PL
-86457664,86457679,FR
-86457680,86457683,PL
-86457684,86457687,IT
-86457688,86457695,PL
-86457696,86457699,FI
-86457700,86457703,PL
-86457704,86457719,FR
-86457720,86457723,IT
-86457724,86457727,NL
-86457728,86457759,DE
-86457760,86457791,PL
-86457792,86457799,FR
-86457800,86457803,PL
-86457804,86457807,BE
-86457808,86457811,FR
-86457812,86457815,PL
-86457816,86457823,GB
-86457824,86458147,FR
-86458148,86458151,BE
-86458152,86458159,FR
-86458160,86458175,PT
-86458176,86458287,FR
-86458288,86458291,PL
-86458292,86458299,FR
-86458300,86458303,PL
-86458304,86458335,CH
-86458336,86458351,PT
-86458352,86458355,FR
-86458356,86458359,PT
-86458360,86458363,BE
-86458364,86458367,IE
-86458368,86466575,FR
-86466576,86466579,FI
-86466580,86466583,PL
-86466584,86466587,FR
-86466588,86466599,PL
-86466600,86466603,FR
-86466604,86466607,PT
-86466608,86466615,FR
-86466616,86466627,PT
-86466628,86466631,DE
-86466632,86466647,FR
-86466648,86466655,GB
-86466656,86466815,FR
-86466816,86466831,DE
-86466832,86466863,FR
-86466864,86466871,GB
-86466872,86466875,FR
-86466876,86466879,PL
-86466880,86466959,FR
-86466960,86466963,BE
-86466964,86466967,FR
-86466968,86466975,GB
-86466976,86467007,FR
-86467008,86467023,ES
-86467024,86467031,FR
-86467032,86467035,PL
-86467036,86467039,IT
-86467040,86467055,FI
-86467056,86467215,FR
-86467216,86467219,CZ
-86467220,86467231,FR
-86467232,86467247,NL
-86467248,86467263,IE
-86467264,86467287,PL
-86467288,86467291,FR
-86467292,86467295,NL
-86467296,86467311,IE
-86467312,86467319,IT
-86467320,86467323,FI
-86467324,86467583,GB
-86467584,86467967,FR
-86467968,86467971,IE
-86467972,86467975,IT
-86467976,86467979,FR
-86467980,86467983,LT
-86467984,86467991,FR
-86467992,86467995,NL
-86467996,86467999,FR
+86457092,86457111,FR
+86457112,86457112,DE
+86457113,86457187,FR
+86457188,86457191,ES
+86457192,86457403,FR
+86457404,86457407,ES
+86457408,86457455,FR
+86457456,86457456,DE
+86457457,86457799,FR
+86457800,86457803,ES
+86457804,86467320,FR
+86467321,86467321,FI
+86467322,86467999,FR
86468000,86468003,PL
-86468004,86468007,PT
-86468008,86468035,FR
-86468036,86468039,PL
-86468040,86468043,FR
-86468044,86468047,GB
-86468048,86468051,FR
-86468052,86468055,PL
-86468056,86468059,DE
-86468060,86468063,NL
-86468064,86468095,DE
-86468096,86468351,PT
-86468352,86468355,CH
-86468356,86468359,FR
-86468360,86468367,PL
-86468368,86468371,FR
-86468372,86468375,CH
-86468376,86468383,FR
-86468384,86468399,DE
-86468400,86468403,GB
-86468404,86468407,PL
-86468408,86468415,CH
-86468416,86468447,IE
+86468004,86468055,FR
+86468056,86468056,DE
+86468057,86468447,FR
86468448,86468479,CZ
-86468480,86468527,FR
-86468528,86468535,GB
-86468536,86468543,FR
-86468544,86468547,PL
-86468548,86468551,IE
-86468552,86468559,IT
-86468560,86468571,PL
-86468572,86468575,ES
-86468576,86468583,FR
-86468584,86468587,DE
-86468588,86468591,IT
-86468592,86468595,FR
-86468596,86468599,IT
-86468600,86468607,FR
-86468608,86468639,DE
-86468640,86468671,FR
-86468672,86468675,ES
-86468676,86468679,BE
-86468680,86468683,FR
-86468684,86468687,FI
-86468688,86468703,DE
-86468704,86468711,GB
-86468712,86468715,NL
-86468716,86468727,PL
-86468728,86468735,DE
-86468736,86468759,FR
-86468760,86468763,IT
-86468764,86468767,NL
-86468768,86468783,PL
-86468784,86468787,FR
-86468788,86468791,NL
-86468792,86468799,CH
-86468800,86468831,ES
-86468832,86468839,IT
-86468840,86468847,CZ
-86468848,86468855,FR
-86468856,86468863,LT
-86468864,86469139,FR
-86469140,86469143,PT
-86469144,86469147,FR
-86469148,86469151,NL
-86469152,86469183,CH
-86469184,86469247,PT
-86469248,86469655,FR
-86469656,86469659,DE
-86469660,86469663,CH
-86469664,86469679,IE
-86469680,86469687,FR
-86469688,86469691,IE
+86468480,86468587,FR
+86468588,86468591,ES
+86468592,86469183,FR
+86469184,86469247,GB
+86469248,86469691,FR
86469692,86469695,DE
-86469696,86469779,FR
-86469780,86469783,CZ
-86469784,86469791,FR
-86469792,86469795,GB
-86469796,86469799,FR
-86469800,86469807,CZ
-86469808,86469815,ES
-86469816,86469819,PL
-86469820,86469823,FR
-86469824,86469855,ES
-86469856,86469863,FR
-86469864,86469867,GB
-86469868,86469887,FR
-86469888,86469891,GB
-86469892,86469895,FR
-86469896,86469899,IE
-86469900,86469903,PL
-86469904,86469907,FR
-86469908,86469911,GB
-86469912,86469915,FR
-86469916,86469919,ES
-86469920,86469951,FR
-86469952,86470047,ES
-86470048,86470079,FR
-86470080,86470111,BE
-86470112,86470127,DE
-86470128,86470135,FR
-86470136,86470143,PL
-86470144,86470159,ES
-86470160,86470175,PL
-86470176,86470207,IE
-86470208,86470271,FR
-86470272,86470275,PL
-86470276,86470291,FR
-86470292,86470295,PL
-86470296,86470299,PT
-86470300,86470351,FR
-86470352,86470359,IT
-86470360,86470363,PT
-86470364,86470383,FR
-86470384,86470399,IE
-86470400,86470655,FR
-86470656,86470671,CZ
-86470672,86470687,PL
-86470688,86470719,GB
-86470720,86470727,DE
-86470728,86470731,ES
+86469696,86470731,FR
86470732,86470735,BE
-86470736,86470751,GB
-86470752,86470767,PT
-86470768,86470847,FR
-86470848,86470851,NL
-86470852,86470863,FR
-86470864,86470867,GB
-86470868,86470871,FR
-86470872,86470879,CH
-86470880,86470895,FR
-86470896,86470899,ES
-86470900,86470903,PL
-86470904,86470943,FR
-86470944,86470947,IE
-86470948,86470951,IT
-86470952,86470959,NL
-86470960,86470967,FR
-86470968,86470971,NL
-86470972,86470979,PL
-86470980,86470983,FR
-86470984,86470991,ES
-86470992,86470999,FR
-86471000,86471023,NL
-86471024,86471031,FR
-86471032,86471039,PL
-86471040,86471047,NL
-86471048,86471055,BE
-86471056,86471075,FR
-86471076,86471079,PL
-86471080,86471083,FR
-86471084,86471087,PL
-86471088,86471091,NL
-86471092,86471095,DE
-86471096,86471099,ES
-86471100,86471103,IT
-86471104,86471119,FR
-86471120,86471127,IT
-86471128,86471135,PL
-86471136,86471167,PT
-86471168,86471171,IT
-86471172,86471175,DE
-86471176,86471179,FR
-86471180,86471183,DE
-86471184,86471215,FR
-86471216,86471219,PL
-86471220,86471223,FR
-86471224,86471231,ES
-86471232,86471263,GB
-86471264,86471295,DE
-86471296,86471327,GB
-86471328,86471343,FR
-86471344,86471359,ES
-86471360,86471423,PT
-86471424,86471679,FR
-86471680,86471935,IT
-86471936,86471943,FR
-86471944,86471947,ES
-86471948,86471951,FR
-86471952,86471967,PL
-86471968,86471983,IT
-86471984,86471995,FR
-86471996,86471999,CH
-86472000,86472015,FR
-86472016,86472031,IT
-86472032,86472047,GB
-86472048,86472051,DE
-86472052,86472055,IE
-86472056,86472063,FR
-86472064,86472095,IE
-86472096,86472191,FR
-86472192,86472199,LT
-86472200,86472203,IT
-86472204,86472207,ES
-86472208,86472211,PL
-86472212,86472215,FR
-86472216,86472219,DE
-86472220,86472223,IE
-86472224,86472227,FR
-86472228,86472231,NL
-86472232,86472239,PL
-86472240,86472255,ES
-86472256,86472287,NL
-86472288,86472291,DE
-86472292,86472303,FR
-86472304,86472311,PT
-86472312,86472315,NL
-86472316,86472319,FR
-86472320,86472327,PL
-86472328,86472335,IT
-86472336,86472343,CZ
-86472344,86472347,PT
-86472348,86472351,NL
-86472352,86472399,FR
-86472400,86472403,ES
-86472404,86472407,GB
-86472408,86472415,FR
-86472416,86472431,ES
-86472432,86472471,FR
-86472472,86472475,NL
-86472476,86472479,PL
-86472480,86472487,PT
-86472488,86472511,FR
-86472512,86472515,IT
-86472516,86472519,FR
-86472520,86472523,ES
-86472524,86472551,FR
-86472552,86472559,NL
-86472560,86472575,FR
-86472576,86472607,BE
-86472608,86472623,FR
-86472624,86472639,PL
-86472640,86472767,FR
-86472768,86472771,PL
-86472772,86472775,IE
-86472776,86472779,GB
-86472780,86472831,FR
-86472832,86472895,ES
-86472896,86472927,FR
-86472928,86472935,IE
-86472936,86472943,ES
-86472944,86472959,FR
-86472960,86473023,IE
-86473024,86473087,FR
-86473088,86473215,PT
-86473216,86473251,FR
-86473252,86473255,PL
-86473256,86473263,PT
-86473264,86473279,FR
-86473280,86473283,IT
-86473284,86473287,ES
-86473288,86473291,FR
-86473292,86473295,PL
-86473296,86473311,FR
-86473312,86473343,GB
-86473344,86473347,DE
-86473348,86473359,ES
-86473360,86473375,FR
-86473376,86473383,CH
-86473384,86473391,LT
-86473392,86473399,FR
-86473400,86473403,PL
-86473404,86473423,FR
-86473424,86473427,ES
-86473428,86473431,IE
-86473432,86473435,PL
-86473436,86473439,CH
-86473440,86473443,ES
-86473444,86473727,FR
-86473728,86473731,FI
-86473732,86473743,PL
-86473744,86473775,FR
-86473776,86473791,FI
-86473792,86473795,ES
-86473796,86473799,FR
-86473800,86473803,GB
-86473804,86473807,FR
-86473808,86473823,GB
-86473824,86473839,FR
-86473840,86474111,PT
-86474112,86474119,FR
-86474120,86474123,ES
-86474124,86474127,PL
-86474128,86474143,FR
-86474144,86474151,GB
-86474152,86474163,FR
-86474164,86474167,GB
-86474168,86474175,IT
-86474176,86474287,FR
-86474288,86474303,IE
-86474304,86474307,GB
+86470736,86471179,FR
+86471180,86471180,DE
+86471181,86473087,FR
+86473088,86473151,PT
+86473152,86474307,FR
86474308,86474311,DE
-86474312,86474319,BE
-86474320,86474323,NL
-86474324,86474327,IT
-86474328,86474331,IE
-86474332,86474367,BE
-86474368,86474383,PL
-86474384,86474391,FR
-86474392,86474395,ES
-86474396,86474431,FR
-86474432,86474463,IE
-86474464,86474467,FR
-86474468,86474475,GB
+86474312,86474475,FR
86474476,86474479,DE
86474480,86474527,FR
86474528,86474531,DE
-86474532,86474551,FR
-86474552,86474555,BE
-86474556,86474559,PL
-86474560,86474591,FR
-86474592,86474623,PT
-86474624,86474687,FR
-86474688,86474719,PT
-86474720,86474723,FR
-86474724,86474727,NL
-86474728,86474731,PL
-86474732,86474735,IE
-86474736,86474743,FR
-86474744,86474747,GB
-86474748,86474751,FR
+86474532,86474751,FR
86474752,86482943,HR
86482944,86484991,RU
86484992,86487039,NL
@@ -3031,13 +524,14 @@
86497280,86499327,NL
86499328,86503423,FR
86503424,86505471,DE
-86505472,86505983,US
-86505984,86507519,PK
+86505472,86507519,GB
86507520,86573055,ES
86573056,86638591,RO
86638592,86671359,RU
-86671360,86671871,JE
-86671872,86673407,GB
+86671360,86671615,JE
+86671616,86671871,GB
+86671872,86672895,JE
+86672896,86673407,GB
86673408,86675455,DE
86675456,86677503,IT
86677504,86679551,FR
@@ -3063,8 +557,7 @@
86794240,86795263,DE
86795264,86796287,NL
86796288,86797311,US
-86797312,86797343,PY
-86797344,86798335,DE
+86797312,86798335,DE
86798336,86802431,CH
86802432,86804479,GE
86804480,86806527,DK
@@ -3081,9 +574,13 @@
86833152,86835199,GB
86835200,86837247,DE
86837248,86839295,ES
-86839296,86849535,GB
+86839296,86843391,GB
+86847488,86849535,GB
86849536,86851583,CZ
-86851584,86867967,RU
+86851584,86855679,NL
+86855680,86859775,RU
+86859776,86863871,DE
+86863872,86867967,EE
86867968,86872063,JO
86872064,86874111,GB
86874112,86876159,NO
@@ -3107,11 +604,7 @@
87425024,87556095,GR
87556096,87558143,ES
87558144,87560191,IT
-87560192,87560703,DE
-87560704,87560959,IN
-87560960,87561471,DE
-87561472,87561599,GB
-87561600,87562239,DE
+87560192,87562239,DE
87562240,87564287,UA
87564288,87566335,HU
87566336,87568383,FR
@@ -3121,8 +614,7 @@
87588864,87589887,IR
87589888,87590143,GB
87590144,87590399,US
-87590400,87590655,IT
-87590656,87590911,IR
+87590400,87590911,GB
87590912,87592959,RU
87592960,87597055,DK
87597056,87599103,ES
@@ -3139,27 +631,30 @@
87638016,87640063,UA
87640064,87642111,RS
87642112,87646207,GB
-87646208,87648255,RE
-87648256,87648767,FR
-87648768,87649279,RE
-87649280,87649535,FR
-87649536,87650303,RE
-87650304,87650559,FR
-87650560,87651071,RE
-87651072,87652351,FR
-87652352,87654399,RE
+87646208,87646463,FR
+87646464,87646719,RE
+87646720,87646975,YT
+87646976,87647231,FR
+87647232,87647743,RE
+87647744,87648511,FR
+87648512,87649535,RE
+87649536,87649791,FR
+87649792,87650815,RE
+87650816,87651583,FR
+87651584,87651839,RE
+87651840,87653119,FR
+87653120,87653375,RE
+87653376,87653631,FR
+87653632,87653887,RE
+87653888,87654143,FR
+87654144,87654399,RE
87654400,87670783,PL
87670784,87672831,DE
87672832,87674879,CH
87674880,87676927,AE
87676928,87678975,RU
-87678976,87678991,ES
-87678992,87679039,NL
-87679040,87679055,ES
-87679056,87679231,NL
-87679232,87680511,ES
-87680512,87680767,NL
-87680768,87681023,ES
+87678976,87679999,ES
+87680000,87681023,NL
87681024,87683071,RU
87683072,87685119,SE
87685120,87687167,NL
@@ -3168,16 +663,13 @@
87818240,87883775,PL
87883776,87885823,IT
87885824,87889919,RU
-87889920,87890175,IR
-87890176,87890431,US
-87890432,87890687,IR
-87890688,87890943,US
-87890944,87891967,IR
+87889920,87890431,IR
+87890432,87890943,US
+87890944,87891199,NL
+87891200,87891967,US
87891968,87902207,DE
87902208,87904255,IR
-87904256,87904767,DE
-87904768,87904831,NL
-87904832,87906303,DE
+87904256,87906303,DE
87906304,87908351,FI
87908352,87912447,BG
87912448,87914495,IE
@@ -3190,19 +682,20 @@
87943168,87945215,RU
87945216,87947263,HU
87947264,87949311,NL
-87949312,87982079,DE
+87949312,87965695,GB
+87965696,87967743,DE
+87967744,87969791,IT
+87969792,87973887,IM
+87973888,87982079,DE
87982080,88014847,RU
-88014848,88015103,DE
-88015104,88016895,LY
+88014848,88016895,LY
88016896,88018943,IR
88018944,88020991,GB
-88020992,88021247,PL
-88021248,88021503,CN
-88021504,88021759,BR
-88021760,88023039,FR
+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
@@ -3248,8 +741,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
@@ -3258,7 +750,14 @@
90499072,90501119,IT
90501120,90503167,GB
90503168,90505215,IL
-90505216,90570751,RU
+90505216,90529791,RU
+90529792,90533887,NL
+90533888,90537983,EE
+90537984,90540031,RU
+90540032,90544127,GB
+90544128,90546175,RU
+90546176,90548223,DE
+90548224,90570751,RU
90570752,90578943,IT
90578944,90583039,IR
90583040,90587135,CZ
@@ -3272,9 +771,7 @@
90609664,90611711,RU
90611712,90613759,DE
90613760,90615807,GB
-90615808,90615808,SI
-90615809,90616575,BA
-90616576,90617855,SI
+90615808,90617855,SI
90617856,90619903,GB
90619904,90636287,IL
90636288,90701823,DK
@@ -3282,7 +779,10 @@
90705920,90707967,CZ
90707968,90710015,IT
90710016,90718207,UA
-90718208,90720255,EU
+90718208,90718719,DE
+90718720,90719231,FR
+90719232,90719487,AT
+90720000,90720255,GB
90720256,90722303,IQ
90722304,90724351,FI
90724352,90726399,CH
@@ -3298,22 +798,16 @@
90753024,90755071,RU
90755072,90757119,PL
90757120,90759167,AT
-90759168,90759684,NL
-90759685,90759930,RO
-90759931,90761215,NL
+90759168,90761215,NL
90761216,90763263,KZ
-90763264,90763391,IL
-90763392,90763519,CY
-90763520,90763775,US
-90763776,90765311,IL
+90763264,90765311,IL
90765312,90767359,PL
90767360,90832895,UA
90832896,90963967,RO
90963968,91226111,SA
91226112,92274687,IR
92274688,92536831,RU
-92536832,92536832,NL
-92536833,92602367,US
+92536832,92602367,NL
92602368,92604415,BA
92604416,92606463,PL
92606464,92608511,GB
@@ -3324,140 +818,7 @@
92635136,92643327,BA
92643328,92645375,GE
92645376,92651519,GB
-92651520,92654591,SE
-92654592,92654623,US
-92654624,92654719,SE
-92654720,92654751,NL
-92654752,92654783,GB
-92654784,92654815,FR
-92654816,92654847,DE
-92654848,92654879,US
-92654880,92654975,SE
-92654976,92655007,FR
-92655008,92655039,DE
-92655040,92655071,NL
-92655072,92655103,GB
-92655104,92655135,US
-92655136,92655231,SE
-92655232,92655263,FR
-92655264,92655295,GB
-92655296,92655327,NL
-92655328,92655359,DE
-92655360,92655391,US
-92655392,92655487,SE
-92655488,92655519,FR
-92655520,92655551,DE
-92655552,92655583,NL
-92655584,92655615,GB
-92655616,92655647,US
-92655648,92655727,SE
-92655728,92655743,NL
-92655744,92655775,FR
-92655776,92655807,GB
-92655808,92655839,NL
-92655840,92655871,DE
-92655872,92655903,US
-92655904,92655999,SE
-92656000,92656015,NL
-92656016,92656031,FR
-92656032,92656063,DE
-92656064,92656095,NL
-92656096,92656127,GB
-92656128,92656159,US
-92656160,92656223,SE
-92656224,92656239,NL
-92656240,92656255,SE
-92656256,92656287,FR
-92656288,92656319,GB
-92656320,92656351,NL
-92656352,92656383,DE
-92656384,92656415,US
-92656416,92656511,SE
-92656512,92656543,DE
-92656544,92656575,NL
-92656576,92656591,FR
-92656592,92656607,NL
-92656608,92656639,GB
-92656640,92656671,US
-92656672,92656767,SE
-92656768,92656783,FR
-92656784,92656799,NL
-92656800,92656831,GB
-92656832,92656863,NL
-92656864,92656895,DE
-92656896,92656927,US
-92656928,92657023,SE
-92657024,92657055,FR
-92657056,92657087,DE
-92657088,92657119,NL
-92657120,92657151,GB
-92657152,92657183,US
-92657184,92657279,SE
-92657280,92657295,NL
-92657296,92657311,FR
-92657312,92657343,GB
-92657344,92657375,NL
-92657376,92657407,DE
-92657408,92657439,US
-92657440,92657535,SE
-92657536,92657567,FR
-92657568,92657599,DE
-92657600,92657631,GB
-92657632,92657663,NL
-92657664,92657695,US
-92657696,92657775,SE
-92657776,92657823,NL
-92657824,92657855,GB
-92657856,92657887,FR
-92657888,92657919,DE
-92657920,92657951,US
-92657952,92658047,SE
-92658048,92658079,NL
-92658080,92658111,DE
-92658112,92658127,NL
-92658128,92658143,FR
-92658144,92658175,GB
-92658176,92658207,US
-92658208,92658303,SE
-92658304,92658319,NL
-92658320,92658335,FR
-92658336,92658367,GB
-92658368,92658399,NL
-92658400,92658431,DE
-92658432,92658463,US
-92658464,92658559,SE
-92658560,92658575,FR
-92658576,92658591,NL
-92658592,92658623,DE
-92658624,92658655,NL
-92658656,92658687,GB
-92658688,92658719,US
-92658720,92658815,SE
-92658816,92658847,GB
-92658848,92658879,NL
-92658880,92658911,FR
-92658912,92658943,DE
-92658944,92658975,US
-92658976,92659055,SE
-92659056,92659103,NL
-92659104,92659135,DE
-92659136,92659167,FR
-92659168,92659199,GB
-92659200,92659231,US
-92659232,92659295,SE
-92659296,92659311,NL
-92659312,92659327,SE
-92659328,92659359,NL
-92659360,92659391,DE
-92659392,92659423,FR
-92659424,92659455,GB
-92659456,92659471,US
-92659472,92659583,SE
-92659584,92659615,NL
-92659616,92659631,GB
-92659632,92659647,NL
-92659648,92659679,FR
-92659680,92659711,DE
+92651520,92659711,SE
92659712,92663807,AZ
92663808,92665855,GB
92665856,92667903,PL
@@ -3480,1677 +841,47 @@
92721152,92723199,PL
92723200,92725247,RU
92725248,92733439,SY
-92733440,92733535,FR
-92733536,92733539,CH
-92733540,92733543,FR
-92733544,92733547,ES
-92733548,92733551,GB
-92733552,92733555,PL
-92733556,92733559,FR
-92733560,92733563,GB
-92733564,92733567,DE
-92733568,92733631,FR
-92733632,92733663,PT
-92733664,92733695,ES
-92733696,92733751,FR
-92733752,92733755,GB
-92733756,92733775,FR
-92733776,92733783,PL
-92733784,92733847,FR
-92733848,92733851,DE
-92733852,92733855,GB
-92733856,92733887,FR
-92733888,92733903,IT
-92733904,92733919,PL
-92733920,92733927,FR
-92733928,92733931,GB
-92733932,92733935,ES
-92733936,92733939,IE
-92733940,92733943,FR
-92733944,92733951,PL
-92733952,92734207,IE
-92734208,92734255,FR
-92734256,92734271,PL
-92734272,92734275,DE
-92734276,92734279,FR
-92734280,92734287,ES
-92734288,92734295,PT
-92734296,92734303,FR
-92734304,92734307,PT
-92734308,92734311,PL
-92734312,92734319,IT
-92734320,92734367,FR
-92734368,92734383,GB
-92734384,92734399,FR
-92734400,92734463,PT
-92734464,92734495,FR
-92734496,92734511,DE
-92734512,92734527,FR
-92734528,92734559,BE
-92734560,92734575,FR
-92734576,92734579,PL
-92734580,92734591,FR
-92734592,92734595,DE
-92734596,92734719,FR
-92734720,92734727,ES
-92734728,92734731,GB
-92734732,92734735,PL
+92733440,92734735,FR
92734736,92734739,DE
-92734740,92734823,FR
-92734824,92734831,PL
-92734832,92734847,DE
-92734848,92734863,CH
-92734864,92734879,PL
-92734880,92734975,FR
-92734976,92735231,PT
-92735232,92735335,FR
-92735336,92735347,PL
-92735348,92735351,FR
-92735352,92735359,DE
-92735360,92735423,FR
-92735424,92735455,DE
-92735456,92735459,ES
-92735460,92735467,GB
-92735468,92735471,FR
-92735472,92735479,IT
-92735480,92735483,PL
-92735484,92735487,DE
-92735488,92735519,GB
-92735520,92735535,FR
-92735536,92735543,GB
-92735544,92735547,PL
-92735548,92735567,FR
-92735568,92735575,DE
-92735576,92735579,PL
-92735580,92735615,FR
-92735616,92735619,DE
-92735620,92735623,FR
-92735624,92735631,ES
-92735632,92735647,GB
-92735648,92735651,IT
-92735652,92735655,PL
-92735656,92735659,FR
-92735660,92735663,NL
-92735664,92735679,FR
-92735680,92735711,NL
-92735712,92735731,FR
-92735732,92735735,CH
-92735736,92735743,PL
-92735744,92735751,IT
-92735752,92735775,FR
-92735776,92735779,PL
-92735780,92735783,ES
-92735784,92735791,FR
-92735792,92735807,GB
-92735808,92735815,FR
-92735816,92735823,CZ
-92735824,92735831,FR
-92735832,92735839,DE
-92735840,92735875,FR
-92735876,92735879,DE
-92735880,92735883,IT
-92735884,92735887,PT
-92735888,92735903,FR
-92735904,92735935,DE
-92735936,92735967,CZ
-92735968,92735999,IT
-92736000,92736335,FR
-92736336,92736351,GB
-92736352,92736447,FR
-92736448,92736479,IT
-92736480,92736483,DE
-92736484,92736487,PL
-92736488,92736491,ES
-92736492,92736495,PT
-92736496,92736503,FR
-92736504,92736511,PL
-92736512,92737023,GB
-92737024,92737279,ES
-92737280,92737603,FR
-92737604,92737607,DE
-92737608,92737647,FR
-92737648,92737663,NL
-92737664,92737791,FR
-92737792,92738047,GB
-92738048,92738367,FR
-92738368,92738371,PL
-92738372,92738375,CH
-92738376,92738411,FR
-92738412,92738415,IE
-92738416,92738431,FR
-92738432,92738447,ES
-92738448,92738511,FR
-92738512,92738515,IT
-92738516,92738519,DE
-92738520,92738531,PL
-92738532,92738535,NL
-92738536,92738543,FR
-92738544,92738559,IT
-92738560,92738591,IE
-92738592,92738599,FR
-92738600,92738603,BE
-92738604,92738607,PL
-92738608,92738611,ES
-92738612,92738615,FI
-92738616,92738655,FR
-92738656,92738659,PL
-92738660,92738663,ES
-92738664,92738683,FR
-92738684,92738719,PL
+92734740,92735615,FR
+92735616,92735616,DE
+92735617,92735619,FR
+92735620,92735623,ES
+92735624,92735823,FR
+92735824,92735827,ES
+92735828,92735875,FR
+92735876,92735876,DE
+92735877,92735999,FR
+92736000,92736255,GB
+92736256,92736479,FR
+92736480,92736480,DE
+92736481,92738719,FR
92738720,92738727,GB
-92738728,92738735,IT
-92738736,92739343,FR
-92739344,92739351,PL
-92739352,92739355,FR
-92739356,92739359,ES
-92739360,92739375,DE
-92739376,92739391,IE
-92739392,92739395,PL
-92739396,92739399,IT
-92739400,92739403,PL
-92739404,92739407,IE
-92739408,92739439,FR
-92739440,92739447,FI
-92739448,92739455,GB
-92739456,92739487,NL
-92739488,92739491,FR
-92739492,92739495,CZ
-92739496,92739499,PT
-92739500,92739503,NL
-92739504,92739507,PT
-92739508,92739511,FR
-92739512,92739519,IE
-92739520,92739583,FR
-92739584,92739839,PT
-92739840,92740095,ES
-92740096,92740351,PT
-92740352,92740383,PL
-92740384,92740391,FR
-92740392,92740395,ES
-92740396,92740399,FR
-92740400,92740415,IE
-92740416,92740431,NL
-92740432,92740447,GB
-92740448,92740471,FR
-92740472,92740479,BE
-92740480,92740543,IE
-92740544,92740575,DE
-92740576,92740607,IT
-92740608,92740863,FR
-92740864,92741119,IT
-92741120,92741151,GB
-92741152,92741159,LT
-92741160,92741167,PL
-92741168,92741183,FR
-92741184,92741199,IE
-92741200,92741203,PL
-92741204,92741207,DE
-92741208,92741211,FR
-92741212,92741215,DE
-92741216,92741247,IT
-92741248,92741255,PT
-92741256,92741263,ES
-92741264,92741271,FI
-92741272,92741279,FR
-92741280,92741287,PL
-92741288,92741291,FR
-92741292,92741295,IE
-92741296,92741311,FR
-92741312,92741315,CZ
-92741316,92741319,NL
-92741320,92741327,FR
-92741328,92741331,DE
-92741332,92741335,ES
-92741336,92741343,FR
-92741344,92741351,NL
-92741352,92741383,FR
-92741384,92741387,GB
-92741388,92741391,FR
-92741392,92741395,ES
-92741396,92741399,DE
-92741400,92741427,FR
-92741428,92741431,PL
-92741432,92741455,FR
-92741456,92741503,DE
-92741504,92741535,GB
-92741536,92741539,FR
-92741540,92741543,NL
-92741544,92741547,PL
-92741548,92742143,FR
-92742144,92742147,ES
-92742148,92742163,PL
-92742164,92742167,GB
-92742168,92742191,FR
-92742192,92742207,PL
-92742208,92742239,BE
-92742240,92742247,GB
-92742248,92742255,ES
-92742256,92742271,GB
-92742272,92742279,FR
-92742280,92742283,IT
-92742284,92742287,GB
-92742288,92742291,FR
-92742292,92742295,NL
-92742296,92742303,FR
-92742304,92742319,IE
-92742320,92742343,FR
-92742344,92742347,GB
-92742348,92742351,ES
-92742352,92742419,FR
-92742420,92742423,ES
-92742424,92742431,PL
-92742432,92742463,FR
-92742464,92742467,PL
-92742468,92742471,ES
-92742472,92742495,FR
-92742496,92742503,PT
-92742504,92742511,FR
-92742512,92742527,GB
-92742528,92742575,FR
-92742576,92742579,ES
-92742580,92742583,FR
-92742584,92742591,IT
-92742592,92742623,PT
-92742624,92742639,FR
-92742640,92742643,ES
-92742644,92742647,PL
-92742648,92742651,GB
-92742652,92742655,FR
-92742656,92742671,IE
-92742672,92742695,FR
-92742696,92742703,GB
-92742704,92742707,FR
-92742708,92742711,PL
-92742712,92742719,FR
-92742720,92742751,BE
-92742752,92742771,FR
-92742772,92742775,ES
-92742776,92742787,FR
-92742788,92742791,PL
-92742792,92742795,GB
-92742796,92742799,FR
-92742800,92742807,IT
-92742808,92742815,GB
-92742816,92742819,NL
-92742820,92742827,PL
-92742828,92742839,FR
-92742840,92742847,PT
-92742848,92742911,FR
-92742912,92743167,ES
-92743168,92743199,FR
-92743200,92743207,GB
-92743208,92743215,ES
-92743216,92743231,GB
-92743232,92743235,FR
-92743236,92743239,BE
-92743240,92743243,GB
-92743244,92743247,FR
-92743248,92743263,IE
-92743264,92743271,FR
-92743272,92743279,GB
-92743280,92743287,IT
-92743288,92743291,PL
-92743292,92743295,GB
-92743296,92743303,FR
-92743304,92743311,PL
-92743312,92743315,FR
-92743316,92743319,BE
-92743320,92743327,FR
-92743328,92743335,PL
-92743336,92743351,GB
-92743352,92743423,FR
-92743424,92743431,DE
-92743432,92743439,ES
-92743440,92743487,FR
-92743488,92743491,ES
-92743492,92743503,FR
-92743504,92743519,IT
-92743520,92743527,PT
-92743528,92743535,FR
-92743536,92743551,IE
-92743552,92743575,FR
-92743576,92743579,CH
-92743580,92743599,FR
-92743600,92743607,DE
-92743608,92743611,GB
-92743612,92743639,FR
-92743640,92743643,PL
-92743644,92743647,NL
-92743648,92743663,BE
-92743664,92743675,FR
-92743676,92743679,PL
-92743680,92743935,GB
-92743936,92743939,FR
-92743940,92743943,PL
-92743944,92743951,ES
-92743952,92743955,PT
-92743956,92743967,FR
-92743968,92743999,DE
-92744000,92744111,FR
-92744112,92744119,ES
-92744120,92744123,PL
-92744124,92744127,GB
-92744128,92744191,FR
-92744192,92744223,PT
-92744224,92744227,FR
-92744228,92744231,GB
-92744232,92744235,FR
-92744236,92744239,ES
-92744240,92744247,FR
-92744248,92744255,DE
-92744256,92744259,GB
-92744260,92744263,IT
-92744264,92744267,PL
-92744268,92744271,FR
-92744272,92744279,LT
-92744280,92744287,FR
-92744288,92744291,ES
-92744292,92744295,FR
-92744296,92744299,NL
-92744300,92744319,FR
-92744320,92744323,GB
-92744324,92744327,FI
-92744328,92744335,FR
-92744336,92744339,PT
-92744340,92744343,CH
-92744344,92744367,PT
-92744368,92744379,FR
-92744380,92744383,ES
-92744384,92744399,FR
-92744400,92744415,PT
-92744416,92744543,FR
-92744544,92744547,BE
-92744548,92744551,PL
-92744552,92744555,ES
-92744556,92744559,CH
-92744560,92744563,PL
-92744564,92744567,IT
-92744568,92744575,BE
-92744576,92744607,FR
-92744608,92744639,PT
-92744640,92745279,FR
-92745280,92745295,PT
-92745296,92745311,FR
-92745312,92745343,PT
-92745344,92745383,FR
-92745384,92745391,IT
-92745392,92745395,NL
-92745396,92745399,GB
-92745400,92745403,FR
-92745404,92745439,PL
-92745440,92745791,FR
-92745792,92745807,PL
-92745808,92745823,NL
-92745824,92745839,FR
-92745840,92745855,GB
-92745856,92745871,FR
-92745872,92745887,NL
-92745888,92745903,IT
-92745904,92745919,CH
-92745920,92745983,PT
-92745984,92746335,FR
-92746336,92746351,GB
-92746352,92746415,FR
-92746416,92746431,CH
-92746432,92746463,DE
-92746464,92746623,FR
-92746624,92746639,BE
-92746640,92746687,FR
-92746688,92746719,GB
-92746720,92746831,FR
-92746832,92746839,PL
-92746840,92746847,GB
-92746848,92746943,FR
-92746944,92746975,PL
-92746976,92747023,FR
-92747024,92747039,DE
-92747040,92747043,PL
-92747044,92747047,CH
-92747048,92747051,DE
-92747052,92747071,FR
-92747072,92747103,GB
-92747104,92747119,CH
-92747120,92747199,FR
-92747200,92747203,DE
-92747204,92747207,ES
-92747208,92747211,GB
-92747212,92747215,FI
-92747216,92747219,CH
-92747220,92747223,BE
-92747224,92747227,PT
-92747228,92747231,PL
-92747232,92747235,LT
-92747236,92747239,IT
-92747240,92747243,IE
-92747244,92747247,NL
-92747248,92747255,FI
-92747256,92747271,PL
-92747272,92747275,NL
-92747276,92747279,CZ
-92747280,92747327,FR
-92747328,92747331,BE
-92747332,92747335,IE
-92747336,92747343,PL
-92747344,92747347,PT
-92747348,92747351,PL
-92747352,92747423,FR
-92747424,92747431,CH
-92747432,92747439,IT
-92747440,92747443,ES
-92747444,92747447,GB
-92747448,92747451,FR
-92747452,92747455,PL
-92747456,92747471,FR
-92747472,92747475,PL
-92747476,92747479,NL
-92747480,92747487,FR
-92747488,92747519,BE
-92747520,92747535,FR
-92747536,92747539,CZ
-92747540,92747543,CH
-92747544,92747547,GB
-92747548,92747567,ES
-92747568,92747575,PL
-92747576,92747583,ES
-92747584,92747615,NL
-92747616,92747695,FR
-92747696,92747699,PL
-92747700,92747703,FR
-92747704,92747711,GB
-92747712,92747775,PT
-92747776,92748479,FR
-92748480,92748511,GB
-92748512,92748803,FR
-92748804,92748807,PL
-92748808,92748811,FR
-92748812,92748815,PT
-92748816,92748835,FR
-92748836,92748839,PL
-92748840,92748843,GB
-92748844,92748851,CH
-92748852,92748859,FR
-92748860,92748863,PL
-92748864,92748887,FR
-92748888,92748895,GB
-92748896,92748975,FR
-92748976,92748983,DE
-92748984,92748991,GB
-92748992,92748999,ES
-92749000,92749007,PT
-92749008,92749011,FR
-92749012,92749015,ES
-92749016,92749019,GB
-92749020,92749023,IT
-92749024,92749039,FI
-92749040,92749063,NL
-92749064,92749067,DE
+92738728,92742815,FR
+92742816,92742819,ES
+92742820,92744263,FR
+92744264,92744267,NL
+92744268,92747711,FR
+92747712,92747775,GB
+92747776,92749067,FR
92749068,92749071,GB
-92749072,92749079,FR
-92749080,92749087,IE
-92749088,92749119,PT
-92749120,92749135,IE
-92749136,92749151,PT
-92749152,92749155,PL
-92749156,92749159,PT
-92749160,92749167,IT
-92749168,92749175,PL
-92749176,92749179,IE
-92749180,92749279,FR
-92749280,92749295,GB
-92749296,92749299,NL
-92749300,92749303,DE
-92749304,92749519,FR
-92749520,92749531,CH
-92749532,92749535,ES
-92749536,92749543,IE
-92749544,92749551,FR
-92749552,92749555,PT
-92749556,92749559,FR
-92749560,92749567,IT
-92749568,92749695,ES
-92749696,92749727,FR
-92749728,92749743,ES
-92749744,92749751,FR
-92749752,92749755,ES
-92749756,92749903,FR
-92749904,92749919,PL
-92749920,92750095,FR
-92750096,92750099,IT
-92750100,92750103,FR
-92750104,92750107,IE
-92750108,92750111,FR
-92750112,92750127,GB
-92750128,92750223,FR
-92750224,92750231,NL
-92750232,92750511,FR
-92750512,92750527,IE
-92750528,92750559,FR
-92750560,92750591,FI
-92750592,92750599,FR
-92750600,92750603,LT
-92750604,92750639,FR
-92750640,92750643,ES
-92750644,92750647,NL
-92750648,92750651,IT
-92750652,92750727,FR
-92750728,92750735,PT
-92750736,92750751,BE
-92750752,92750767,FI
-92750768,92750783,ES
-92750784,92750799,CZ
-92750800,92750815,IE
-92750816,92750831,IT
-92750832,92750839,LT
-92750840,92750847,FR
-92750848,92750863,DE
-92750864,92750879,IT
-92750880,92750887,ES
-92750888,92750895,PT
-92750896,92750899,IT
-92750900,92750903,FR
-92750904,92750907,GB
-92750908,92750911,FR
-92750912,92750943,PL
-92750944,92750959,FR
-92750960,92750967,PL
-92750968,92750975,FR
-92750976,92751039,BE
-92751040,92751071,ES
-92751072,92751231,GB
-92751232,92751235,IT
-92751236,92751239,PL
-92751240,92751243,FR
-92751244,92751247,ES
-92751248,92751271,FR
-92751272,92751275,DE
-92751276,92751279,NL
-92751280,92751295,PT
-92751296,92751311,GB
-92751312,92751319,PL
-92751320,92751615,FR
-92751616,92751631,ES
-92751632,92751647,CH
-92751648,92751679,FR
-92751680,92751711,PT
-92751712,92751807,DE
-92751808,92751871,FR
-92751872,92751903,GB
-92751904,92751991,FR
-92751992,92751999,DE
-92752000,92752127,ES
-92752128,92752143,IT
-92752144,92752191,FR
-92752192,92752255,ES
-92752256,92752319,BE
-92752320,92752431,FR
-92752432,92752447,GB
-92752448,92752575,FR
-92752576,92752583,IT
-92752584,92752607,GB
-92752608,92752611,IT
-92752612,92752615,DE
-92752616,92752619,PL
-92752620,92752631,IT
-92752632,92752635,FR
-92752636,92752639,PT
-92752640,92753175,FR
-92753176,92753215,CZ
-92753216,92753279,PT
-92753280,92753363,CZ
-92753364,92753367,GB
-92753368,92753551,FR
-92753552,92753567,NL
-92753568,92753631,FR
-92753632,92753663,BE
-92753664,92753671,FR
-92753672,92753675,IT
-92753676,92753919,FR
-92753920,92753923,CZ
-92753924,92753927,GB
-92753928,92753935,FR
-92753936,92753939,IT
-92753940,92753943,FR
-92753944,92753951,PT
-92753952,92753983,FR
-92753984,92754015,PT
-92754016,92754027,FR
-92754028,92754031,DE
-92754032,92754035,FR
-92754036,92754039,GB
-92754040,92754055,FR
-92754056,92754059,IT
-92754060,92754063,PL
-92754064,92754083,FR
-92754084,92754087,BE
-92754088,92754095,PL
-92754096,92754111,CH
-92754112,92754207,FR
-92754208,92754239,PT
-92754240,92754367,FR
-92754368,92754431,GB
-92754432,92754447,FR
-92754448,92754463,GB
-92754464,92754471,FR
-92754472,92754479,CZ
-92754480,92754495,ES
-92754496,92754559,CH
-92754560,92754579,FR
-92754580,92754583,PL
-92754584,92754591,FR
-92754592,92754623,CZ
-92754624,92754639,PL
-92754640,92754671,IT
-92754672,92755135,FR
-92755136,92755199,PT
-92755200,92755231,FR
-92755232,92755263,GB
-92755264,92755279,PT
-92755280,92755283,PL
-92755284,92755287,ES
-92755288,92755295,FR
-92755296,92755315,DE
-92755316,92755319,FR
-92755320,92755327,BE
-92755328,92755335,FR
-92755336,92755343,ES
-92755344,92755375,FR
-92755376,92755391,IE
-92755392,92755423,FR
-92755424,92755431,CH
-92755432,92755439,FR
-92755440,92755455,GB
-92755456,92755487,IT
-92755488,92755503,FR
-92755504,92755507,PT
-92755508,92755511,GB
-92755512,92755519,FR
-92755520,92755527,ES
-92755528,92755647,FR
-92755648,92755679,IT
-92755680,92755711,FR
-92755712,92755743,DE
-92755744,92755775,FI
-92755776,92755839,GB
-92755840,92755887,PT
-92755888,92755903,ES
-92755904,92755967,FR
-92755968,92756031,PT
-92756032,92756167,FR
-92756168,92756175,GB
-92756176,92756191,FR
-92756192,92756207,CH
-92756208,92756479,FR
-92756480,92756495,GB
-92756496,92756551,FR
-92756552,92756555,BE
-92756556,92756559,FR
-92756560,92756567,IE
-92756568,92756571,PL
-92756572,92756575,ES
-92756576,92756643,FR
-92756644,92756647,IT
-92756648,92756663,FR
-92756664,92756671,BE
-92756672,92756735,PT
-92756736,92756999,FR
-92757000,92757007,CH
-92757008,92757015,DE
-92757016,92757023,FR
-92757024,92757039,ES
-92757040,92757047,IT
-92757048,92757055,GB
-92757056,92757119,FR
-92757120,92757135,ES
-92757136,92757151,GB
-92757152,92757167,IT
-92757168,92757247,FR
-92757248,92757263,DE
-92757264,92757275,FR
-92757276,92757279,PL
-92757280,92757311,GB
+92749072,92749747,FR
+92749748,92749751,ES
+92749752,92751711,FR
+92751712,92751712,DE
+92751713,92754579,FR
+92754580,92754583,ES
+92754584,92757311,FR
92757312,92757375,ES
-92757376,92757439,FR
-92757440,92757503,PT
-92757504,92758047,FR
-92758048,92758055,BE
-92758056,92758063,CZ
-92758064,92758067,FR
-92758068,92758071,DE
-92758072,92758075,BE
-92758076,92758079,CH
-92758080,92758143,FR
-92758144,92758207,PT
-92758208,92758223,ES
-92758224,92758227,CZ
-92758228,92758231,PL
-92758232,92758235,DE
-92758236,92758271,FR
-92758272,92758303,IE
-92758304,92758319,PT
-92758320,92758335,FR
-92758336,92758343,PL
-92758344,92758347,GB
-92758348,92758351,CH
-92758352,92758355,FR
-92758356,92758359,PL
-92758360,92758363,FR
-92758364,92758367,CZ
-92758368,92758383,ES
-92758384,92758471,FR
-92758472,92758479,PL
-92758480,92758495,FR
-92758496,92758527,CH
-92758528,92758591,FR
-92758592,92758623,PT
-92758624,92758627,IT
-92758628,92758631,FR
-92758632,92758635,DE
-92758636,92758639,FR
-92758640,92758655,PL
-92758656,92758723,FR
-92758724,92758727,DE
-92758728,92758731,PL
-92758732,92758735,FR
-92758736,92758743,NL
-92758744,92758747,FR
-92758748,92758751,PL
-92758752,92758783,GB
-92758784,92758799,FR
-92758800,92758859,PL
-92758860,92758879,ES
-92758880,92758911,GB
-92758912,92758915,PL
-92758916,92758919,GB
-92758920,92758927,FR
-92758928,92758931,IT
-92758932,92758935,DE
-92758936,92758939,PL
-92758940,92758943,FR
-92758944,92758967,GB
-92758968,92759023,FR
-92759024,92759027,PT
-92759028,92759031,GB
-92759032,92759035,NL
-92759036,92759039,PL
-92759040,92759103,FR
-92759104,92759119,PL
-92759120,92759123,IE
-92759124,92759127,FR
-92759128,92759135,NL
-92759136,92759151,FR
-92759152,92759155,IT
-92759156,92759159,IE
-92759160,92759167,DE
-92759168,92759231,FR
-92759232,92759239,BE
-92759240,92759247,FR
-92759248,92759255,PL
-92759256,92759263,FR
-92759264,92759279,ES
-92759280,92759295,FR
-92759296,92759551,FI
-92759552,92760063,FR
-92760064,92760191,ES
-92760192,92760255,FR
-92760256,92760287,IE
-92760288,92760319,PT
-92760320,92760607,FR
-92760608,92760639,GB
-92760640,92760679,FR
-92760680,92760687,GB
-92760688,92760695,FR
-92760696,92760715,ES
-92760716,92760727,FR
-92760728,92760735,PT
-92760736,92760743,FI
-92760744,92760747,ES
-92760748,92760767,FR
-92760768,92760831,PT
-92760832,92761087,IE
-92761088,92761343,CH
-92761344,92761415,FR
-92761416,92761419,ES
-92761420,92761427,PL
-92761428,92761455,FR
-92761456,92761463,NL
-92761464,92761467,IT
-92761468,92761471,PL
-92761472,92761503,NL
-92761504,92761507,PL
-92761508,92761511,FR
-92761512,92761515,PL
-92761516,92761519,FR
-92761520,92761523,GB
-92761524,92761527,DE
-92761528,92761531,BE
-92761532,92761535,CH
-92761536,92761599,FR
-92761600,92761603,ES
-92761604,92761615,FR
-92761616,92761727,PL
-92761728,92761759,FR
-92761760,92761763,IT
-92761764,92761775,FR
-92761776,92761791,BE
-92761792,92761823,IT
-92761824,92761855,IE
-92761856,92761863,FR
-92761864,92761867,PL
-92761868,92761883,FR
-92761884,92761887,PL
-92761888,92761919,GB
-92761920,92761935,DE
-92761936,92761939,NL
-92761940,92761943,GB
-92761944,92761947,ES
-92761948,92762047,FR
-92762048,92762051,PL
-92762052,92762055,FR
-92762056,92762059,GB
-92762060,92762079,FR
-92762080,92762111,IT
-92762112,92762127,FR
+92757376,92762127,FR
92762128,92762135,ES
-92762136,92762143,FR
-92762144,92762147,PT
-92762148,92762151,PL
-92762152,92762155,LT
-92762156,92762159,IT
-92762160,92762163,FR
-92762164,92762167,ES
-92762168,92762175,FR
-92762176,92762207,FI
-92762208,92762211,FR
-92762212,92762219,PL
-92762220,92762223,DE
-92762224,92762239,FR
-92762240,92762271,IT
-92762272,92762303,DE
-92762304,92762307,FR
-92762308,92762311,PT
-92762312,92762335,FR
-92762336,92762399,GB
-92762400,92762431,ES
-92762432,92762495,FR
-92762496,92762503,GB
-92762504,92762511,BE
-92762512,92762591,FR
-92762592,92762599,PT
-92762600,92762607,NL
-92762608,92762615,IT
-92762616,92762619,ES
-92762620,92762623,IE
-92762624,92762655,CZ
-92762656,92762687,PT
-92762688,92762719,PL
-92762720,92762815,FR
-92762816,92762831,NL
-92762832,92762839,FR
-92762840,92762847,ES
-92762848,92762879,IE
-92762880,92762911,PL
-92762912,92762943,DE
-92762944,92763007,BE
-92763008,92763015,FR
-92763016,92763023,GB
-92763024,92763039,PL
-92763040,92763103,FR
-92763104,92763119,GB
-92763120,92763127,FR
-92763128,92763135,ES
-92763136,92763199,PT
-92763200,92763207,ES
-92763208,92763215,FR
-92763216,92763219,PT
-92763220,92763223,GB
-92763224,92763227,PL
-92763228,92763231,FR
-92763232,92763247,GB
-92763248,92763263,FR
-92763264,92763271,GB
-92763272,92763275,FR
-92763276,92763279,ES
-92763280,92763331,FR
-92763332,92763335,GB
-92763336,92763339,DE
-92763340,92763647,FR
-92763648,92763903,GB
-92763904,92764159,ES
-92764160,92764223,FR
-92764224,92764287,GB
-92764288,92764367,FR
-92764368,92764375,ES
-92764376,92764391,FR
-92764392,92764395,IT
-92764396,92764399,IE
-92764400,92764407,PL
-92764408,92764411,LT
-92764412,92764415,FR
-92764416,92764479,PT
-92764480,92764511,FR
-92764512,92764543,IE
-92764544,92764555,FR
-92764556,92764559,IE
-92764560,92764567,ES
-92764568,92764571,NL
-92764572,92764575,PT
-92764576,92764579,ES
-92764580,92764583,NL
-92764584,92764591,FR
-92764592,92764595,PL
-92764596,92764599,ES
-92764600,92764603,BE
-92764604,92764607,PL
-92764608,92764735,FR
-92764736,92764807,DE
-92764808,92764815,BE
-92764816,92764823,PT
-92764824,92764827,FR
-92764828,92764831,PT
-92764832,92764839,CH
-92764840,92764843,FR
-92764844,92764847,PL
-92764848,92764859,FR
-92764860,92764863,ES
-92764864,92764927,PT
-92764928,92765183,GB
-92765184,92765199,PT
-92765200,92765203,FR
-92765204,92765207,ES
-92765208,92765211,NL
-92765212,92765215,PL
-92765216,92765247,NL
-92765248,92765287,FR
-92765288,92765291,PT
-92765292,92765295,FR
-92765296,92765311,CZ
-92765312,92765343,FR
-92765344,92765347,GB
-92765348,92765351,ES
-92765352,92765359,PL
-92765360,92765367,ES
-92765368,92765371,IT
-92765372,92765391,FR
-92765392,92765395,IT
-92765396,92765399,PL
-92765400,92765403,IE
-92765404,92765407,BE
-92765408,92765423,FR
-92765424,92765427,GB
-92765428,92765431,DE
-92765432,92765439,CH
-92765440,92765447,NL
-92765448,92765455,DE
-92765456,92765459,FR
-92765460,92765471,GB
-92765472,92765503,IT
-92765504,92765567,FR
-92765568,92765571,GB
-92765572,92765591,FR
-92765592,92765595,DE
-92765596,92765627,FR
-92765628,92765631,FI
-92765632,92765635,ES
-92765636,92765639,FR
-92765640,92765647,IE
-92765648,92765663,FR
-92765664,92765667,ES
-92765668,92765675,FR
-92765676,92765679,IE
-92765680,92765727,FR
-92765728,92765735,PL
-92765736,92765739,GB
-92765740,92765743,IT
-92765744,92765859,FR
-92765860,92765863,PT
-92765864,92765867,IE
-92765868,92766079,FR
-92766080,92766143,PT
-92766144,92766175,GB
-92766176,92782607,FR
-92782608,92782611,NL
-92782612,92782655,FR
-92782656,92782687,IE
-92782688,92782719,IT
-92782720,92782735,FR
-92782736,92782739,CZ
-92782740,92782743,ES
-92782744,92782747,FR
-92782748,92782751,IT
-92782752,92782759,FR
-92782760,92782767,PL
-92782768,92782783,FR
-92782784,92782787,CH
-92782788,92782803,FR
-92782804,92782807,PT
-92782808,92782811,FR
-92782812,92782815,CH
-92782816,92782943,FR
-92782944,92782975,CH
-92782976,92782979,ES
-92782980,92782999,FR
-92783000,92783003,GB
-92783004,92783007,PT
-92783008,92783015,CZ
-92783016,92783019,FR
-92783020,92783023,NL
-92783024,92783039,PT
-92783040,92783043,DE
-92783044,92783047,FR
-92783048,92783051,GB
-92783052,92783059,PL
-92783060,92783063,DE
-92783064,92783087,FR
-92783088,92783095,DE
-92783096,92783103,IT
-92783104,92783111,FR
-92783112,92783115,NL
-92783116,92783119,IE
-92783120,92783135,PT
-92783136,92783147,FR
-92783148,92783151,DE
-92783152,92783155,IT
-92783156,92783163,GB
-92783164,92783167,FI
-92783168,92783235,FR
-92783236,92783243,GB
-92783244,92783247,PL
-92783248,92783263,FR
-92783264,92783267,PL
-92783268,92783271,FR
-92783272,92783279,IT
-92783280,92783287,GB
-92783288,92783319,FR
-92783320,92783323,IT
-92783324,92783327,FR
-92783328,92783359,IE
-92783360,92783423,ES
-92783424,92783439,GB
-92783440,92783447,FR
-92783448,92783455,IE
-92783456,92783487,NL
-92783488,92783491,IT
-92783492,92783495,FR
-92783496,92783503,ES
-92783504,92783515,FR
-92783516,92783519,CH
-92783520,92783647,FR
-92783648,92783663,BE
-92783664,92783667,GB
-92783668,92783671,FR
-92783672,92783679,IT
-92783680,92783711,FR
-92783712,92783715,PL
-92783716,92783719,NL
-92783720,92783723,IT
-92783724,92783727,PL
-92783728,92783731,ES
-92783732,92783735,FR
-92783736,92783739,CH
-92783740,92783743,FR
-92783744,92783807,BE
-92783808,92783871,FR
-92783872,92783887,NL
-92783888,92783911,FR
-92783912,92783919,PL
-92783920,92783995,FR
-92783996,92783999,LT
-92784000,92784031,FR
-92784032,92784047,NL
-92784048,92784079,FR
-92784080,92784087,PL
-92784088,92784099,FR
-92784100,92784103,CZ
-92784104,92784127,FR
-92784128,92784135,IE
-92784136,92784159,FR
-92784160,92784191,CH
-92784192,92784207,PT
-92784208,92784239,PL
-92784240,92784247,FR
-92784248,92784251,CH
-92784252,92784287,FR
-92784288,92784291,GB
-92784292,92784295,FR
-92784296,92784299,GB
-92784300,92784303,FR
-92784304,92784319,IE
-92784320,92784375,FR
-92784376,92784383,PT
-92784384,92784455,FR
-92784456,92784463,NL
-92784464,92784467,FR
-92784468,92784471,NL
-92784472,92784479,GB
-92784480,92784511,IT
-92784512,92784639,ES
-92784640,92784663,FR
-92784664,92784667,GB
-92784668,92784671,IE
-92784672,92784703,FR
-92784704,92784735,GB
-92784736,92784771,FR
-92784772,92784775,NL
-92784776,92784779,DE
-92784780,92784783,GB
-92784784,92784791,PL
-92784792,92784799,FR
-92784800,92784807,DE
-92784808,92784815,LT
-92784816,92784819,FR
-92784820,92784823,DE
-92784824,92784831,PT
-92784832,92784895,FR
-92784896,92785407,ES
-92785408,92785439,FR
-92785440,92785455,DE
-92785456,92785467,FR
-92785468,92785471,PL
-92785472,92785503,FR
-92785504,92785507,PL
-92785508,92785511,FR
-92785512,92785519,PT
-92785520,92785567,FR
-92785568,92785571,GB
-92785572,92785599,FR
-92785600,92785607,GB
-92785608,92785611,FR
-92785612,92785615,ES
-92785616,92785631,PT
-92785632,92785663,FR
-92785664,92785667,DE
-92785668,92785671,CH
-92785672,92785679,FR
-92785680,92785695,IE
-92785696,92785707,FR
-92785708,92785711,IT
-92785712,92785727,PT
-92785728,92785735,FR
-92785736,92785743,PT
-92785744,92785847,FR
-92785848,92785855,GB
-92785856,92785863,PT
-92785864,92785887,GB
-92785888,92786175,FR
-92786176,92786179,GB
-92786180,92786183,FR
-92786184,92786187,ES
-92786188,92786199,FR
-92786200,92786207,BE
-92786208,92786211,FR
-92786212,92786215,GB
-92786216,92786219,IE
-92786220,92786231,FR
-92786232,92786239,PT
-92786240,92786255,GB
-92786256,92786271,PT
-92786272,92786279,IT
-92786280,92786287,FR
-92786288,92786291,IT
-92786292,92786299,GB
-92786300,92786303,FR
-92786304,92786311,BE
-92786312,92786367,FR
-92786368,92786383,DE
-92786384,92786415,FR
-92786416,92786419,GB
-92786420,92786423,NL
-92786424,92786431,PT
-92786432,92786463,FR
-92786464,92786495,PL
-92786496,92786511,PT
-92786512,92786515,FR
-92786516,92786519,BE
-92786520,92786527,FR
-92786528,92786535,ES
-92786536,92786539,FR
-92786540,92786543,BE
-92786544,92786559,PT
-92786560,92786623,FR
-92786624,92786627,IT
-92786628,92786631,FR
-92786632,92786639,BE
-92786640,92786655,ES
-92786656,92786671,PL
-92786672,92786687,GB
-92786688,92786719,FR
-92786720,92786735,SN
-92786736,92786743,FR
-92786744,92786751,DE
-92786752,92786815,FR
-92786816,92786819,ES
-92786820,92786823,BE
-92786824,92786827,DE
-92786828,92786831,FR
-92786832,92786847,NL
-92786848,92786851,FR
-92786852,92786855,PL
-92786856,92786879,FR
-92786880,92786911,PT
-92786912,92786927,GB
-92786928,92786943,FR
-92786944,92786947,IT
-92786948,92786967,FR
-92786968,92786971,ES
-92786972,92786975,IT
-92786976,92786979,GB
-92786980,92786983,NL
-92786984,92786991,FR
-92786992,92786999,ES
-92787000,92787007,DE
-92787008,92787011,IT
-92787012,92787027,FR
-92787028,92787031,GB
-92787032,92787035,FR
-92787036,92787039,ES
-92787040,92787055,FR
-92787056,92787071,ES
-92787072,92787079,FR
-92787080,92787087,ES
-92787088,92787111,FR
-92787112,92787119,IT
-92787120,92787135,FR
-92787136,92787199,PL
-92787200,92787203,FI
-92787204,92787215,FR
-92787216,92787247,PT
-92787248,92787251,FR
-92787252,92787255,ES
-92787256,92787327,PT
-92787328,92787331,PL
-92787332,92787335,FR
-92787336,92787339,GB
-92787340,92787343,FR
-92787344,92787359,NL
-92787360,92787391,FR
-92787392,92787407,NL
-92787408,92787423,FR
-92787424,92787503,ES
-92787504,92787523,FR
-92787524,92787531,PL
-92787532,92787551,FR
-92787552,92787563,PT
-92787564,92787567,GB
-92787568,92787615,FR
-92787616,92787631,BE
-92787632,92787635,FR
-92787636,92787639,GB
-92787640,92787647,DE
-92787648,92787663,FR
-92787664,92787671,DE
-92787672,92787679,FR
-92787680,92787695,NL
-92787696,92787707,FR
-92787708,92787711,FI
-92787712,92788127,FR
-92788128,92788131,FI
-92788132,92788151,FR
-92788152,92788167,PL
-92788168,92788171,FR
-92788172,92788175,ES
-92788176,92788179,DE
-92788180,92788183,FR
-92788184,92788187,ES
-92788188,92788195,PL
-92788196,92788203,FR
-92788204,92788223,PT
-92788224,92788255,FR
-92788256,92788259,PT
-92788260,92788263,ES
-92788264,92788271,GB
-92788272,92788275,DE
-92788276,92788279,FR
-92788280,92788283,NL
-92788284,92788287,ES
-92788288,92788343,FR
-92788344,92788351,CZ
-92788352,92788431,FR
-92788432,92788447,IT
-92788448,92788495,FR
-92788496,92788511,NL
-92788512,92788527,IE
-92788528,92788543,FR
-92788544,92788607,PT
-92788608,92788639,NL
-92788640,92788671,BE
-92788672,92788683,FR
-92788684,92788687,PL
-92788688,92788735,FR
-92788736,92788743,GB
-92788744,92788747,PL
-92788748,92788795,FR
-92788796,92788799,IE
-92788800,92788919,FR
-92788920,92788927,PT
-92788928,92788931,FR
-92788932,92788935,PL
-92788936,92788943,ES
-92788944,92788959,FR
-92788960,92788963,PL
-92788964,92788975,DE
-92788976,92788983,PT
-92788984,92788991,DE
-92788992,92789007,IE
-92789008,92789055,FR
-92789056,92789071,CZ
-92789072,92789079,PL
-92789080,92789083,FR
-92789084,92789087,PT
-92789088,92789095,IT
-92789096,92789119,FR
-92789120,92789183,ES
-92789184,92789215,CZ
-92789216,92789223,PT
-92789224,92789231,NL
-92789232,92789255,FR
-92789256,92789259,GB
-92789260,92789263,FR
-92789264,92789267,IT
-92789268,92789271,FR
-92789272,92789275,FI
-92789276,92789279,DE
-92789280,92789311,IE
-92789312,92789319,GB
-92789320,92789335,FR
-92789336,92789339,CH
-92789340,92789343,CZ
-92789344,92789359,BE
-92789360,92789375,FR
-92789376,92789383,GB
-92789384,92789387,NL
-92789388,92789391,FR
-92789392,92789395,IT
-92789396,92789399,DE
-92789400,92789407,FR
-92789408,92789423,NL
-92789424,92789427,ES
-92789428,92789431,FR
-92789432,92789439,PL
-92789440,92789471,FR
-92789472,92789479,IT
-92789480,92789483,IE
-92789484,92789487,GB
-92789488,92789551,FR
-92789552,92789555,ES
-92789556,92789559,FR
-92789560,92789639,PT
-92789640,92789643,IT
-92789644,92789651,PL
-92789652,92789655,FR
-92789656,92789659,ES
-92789660,92789679,FR
-92789680,92789695,IT
-92789696,92789743,FR
-92789744,92789755,PT
-92789756,92789775,FR
-92789776,92789791,PL
-92789792,92789795,GB
-92789796,92789903,FR
-92789904,92789907,PL
-92789908,92789911,FR
-92789912,92789919,NL
-92789920,92789983,IE
-92789984,92790015,FR
-92790016,92790143,IE
-92790144,92790175,FR
-92790176,92790191,DE
-92790192,92790239,FR
-92790240,92790271,IE
-92790272,92790279,FR
-92790280,92790283,IE
-92790284,92790287,PL
-92790288,92790303,IT
-92790304,92790335,GB
-92790336,92790367,NL
-92790368,92790371,PT
-92790372,92790383,FR
-92790384,92790399,DE
-92790400,92790463,FR
-92790464,92790495,PT
-92790496,92790511,PL
-92790512,92790527,NL
-92790528,92790591,IT
-92790592,92790595,PL
-92790596,92790599,GB
-92790600,92790615,FR
-92790616,92790619,GB
-92790620,92790623,BE
-92790624,92790655,IE
-92790656,92790663,FR
-92790664,92790671,GB
-92790672,92790687,FR
-92790688,92790695,PL
-92790696,92790703,FR
-92790704,92790719,IT
-92790720,92791295,FR
-92791296,92791551,GB
-92791552,92791807,IE
-92791808,92792063,GB
-92792064,92792319,IE
-92792320,92792383,CH
-92792384,92792415,ES
-92792416,92792447,FR
-92792448,92792511,ES
-92792512,92792575,FR
-92792576,92792831,PT
-92792832,92792959,FR
-92792960,92792991,CH
-92792992,92793023,NL
-92793024,92793087,FR
-92793088,92793095,CZ
-92793096,92793099,BE
-92793100,92793103,FR
-92793104,92793119,NL
-92793120,92793151,GB
-92793152,92793155,DE
-92793156,92793183,FR
-92793184,92793215,GB
-92793216,92793247,IT
-92793248,92793279,ES
-92793280,92793287,FR
-92793288,92793295,DE
-92793296,92793319,FR
-92793320,92793323,GB
-92793324,92793331,FR
-92793332,92793343,GB
-92793344,92793855,DE
-92793856,92793887,FR
-92793888,92793919,IT
-92793920,92793935,FR
-92793936,92793943,PT
-92793944,92793951,PL
-92793952,92793983,FR
-92793984,92794047,PL
-92794048,92794143,FR
-92794144,92794159,DE
-92794160,92794207,NL
-92794208,92794223,IE
-92794224,92794227,FR
-92794228,92794231,PT
-92794232,92794239,ES
-92794240,92794327,FR
-92794328,92794335,IT
-92794336,92794367,FR
-92794368,92794431,PL
-92794432,92794463,FR
-92794464,92794499,GB
-92794500,92794503,FR
-92794504,92794511,IT
-92794512,92794691,FR
-92794692,92794695,ES
-92794696,92794699,PL
-92794700,92794703,IE
-92794704,92794715,FR
-92794716,92794719,GB
-92794720,92794727,PL
-92794728,92794735,GB
-92794736,92794911,FR
-92794912,92794943,NL
-92794944,92794975,CH
-92794976,92795103,FR
-92795104,92795111,ES
-92795112,92795119,PL
-92795120,92795127,FR
-92795128,92795131,PL
-92795132,92795135,GB
-92795136,92795167,IT
-92795168,92795171,NL
-92795172,92795175,BE
-92795176,92795179,PL
-92795180,92795191,FR
-92795192,92795195,NL
-92795196,92795199,FR
-92795200,92795263,GB
-92795264,92795327,FR
-92795328,92795391,DE
-92795392,92795455,CH
-92795456,92795487,FR
-92795488,92795495,ES
-92795496,92795511,FR
-92795512,92795515,GB
-92795516,92795551,FR
-92795552,92795559,BE
-92795560,92795567,PL
-92795568,92795583,IT
-92795584,92795615,IE
-92795616,92795619,GB
-92795620,92795623,PL
-92795624,92795627,ES
-92795628,92795631,NL
-92795632,92795647,FR
-92795648,92795903,GB
-92795904,92796159,IE
-92796160,92796415,GB
-92796416,92796423,FR
-92796424,92796427,ES
-92796428,92796431,NL
-92796432,92796463,FR
-92796464,92796471,GB
-92796472,92796479,NL
-92796480,92796511,CZ
-92796512,92796543,DE
-92796544,92796575,PL
-92796576,92796579,FR
-92796580,92796583,FI
-92796584,92796639,FR
-92796640,92796655,PT
-92796656,92796687,IE
-92796688,92796695,FR
-92796696,92796703,BE
-92796704,92796727,FR
-92796728,92796735,IT
-92796736,92796767,NL
-92796768,92796799,FR
-92796800,92796831,GB
-92796832,92796863,IT
-92796864,92796879,IE
-92796880,92796887,PL
-92796888,92796891,FR
-92796892,92796895,BE
-92796896,92796903,PL
-92796904,92796907,GB
-92796908,92796911,PL
-92796912,92796919,GB
-92796920,92796923,BE
-92796924,92796991,FR
-92796992,92797023,ES
-92797024,92797047,FR
-92797048,92797055,GB
-92797056,92797063,NL
-92797064,92797079,FR
-92797080,92797087,PL
-92797088,92797119,PT
-92797120,92797151,IT
-92797152,92797159,PT
-92797160,92797163,FR
-92797164,92797167,PT
-92797168,92797175,ES
-92797176,92797179,LT
-92797180,92797183,FR
-92797184,92797215,PT
-92797216,92797219,FR
-92797220,92797223,NL
-92797224,92797247,CH
-92797248,92797311,FR
-92797312,92797315,NL
-92797316,92797319,FR
-92797320,92797327,DE
-92797328,92797335,IE
-92797336,92797339,LT
-92797340,92797343,NL
-92797344,92797351,IT
-92797352,92797359,PL
-92797360,92797407,IT
-92797408,92797423,GB
-92797424,92797439,FR
-92797440,92797455,ES
-92797456,92797475,FR
-92797476,92797483,PL
-92797484,92797487,FR
-92797488,92797503,DE
-92797504,92797507,IT
-92797508,92797511,FR
-92797512,92797515,PL
-92797516,92797519,LT
-92797520,92797535,FR
-92797536,92797551,ES
-92797552,92797567,FR
-92797568,92797759,PT
-92797760,92797775,DE
-92797776,92797783,FR
-92797784,92797791,PL
-92797792,92797799,FR
-92797800,92797803,CH
-92797804,92797823,FR
-92797824,92797887,PL
-92797888,92797903,FR
-92797904,92797911,NL
-92797912,92797915,GB
-92797916,92797919,DE
-92797920,92797951,FR
-92797952,92797963,GB
-92797964,92797991,FR
-92797992,92797995,LT
-92797996,92797999,CZ
-92798000,92798007,CH
-92798008,92798011,DE
-92798012,92798015,ES
-92798016,92798047,FR
-92798048,92798055,DE
-92798056,92798059,FI
-92798060,92798079,DE
-92798080,92798087,FR
-92798088,92798095,GB
-92798096,92798111,IE
-92798112,92798119,IT
-92798120,92798127,DE
-92798128,92798143,NL
-92798144,92798159,PL
-92798160,92798163,DE
-92798164,92798167,FR
-92798168,92798191,PT
-92798192,92798207,IT
-92798208,92798211,NL
-92798212,92798215,FR
-92798216,92798223,ES
-92798224,92798231,IE
-92798232,92798239,FR
-92798240,92798247,PL
-92798248,92798255,FR
-92798256,92798271,FI
-92798272,92798275,ES
-92798276,92798283,FR
-92798284,92798287,PL
-92798288,92798303,PT
-92798304,92798319,FR
-92798320,92798335,DE
-92798336,92798399,ES
-92798400,92798415,GB
-92798416,92798431,FR
-92798432,92798439,PL
-92798440,92798451,IT
-92798452,92798455,FI
-92798456,92798975,FR
+92762136,92782687,FR
+92782688,92782719,ES
+92782720,92783543,FR
+92783544,92783547,ES
+92783548,92786827,FR
+92786828,92786831,IT
+92786832,92798975,FR
92798976,93323263,RU
93323264,93335551,CH
93335552,93339647,IL
@@ -5162,18 +893,7 @@
93360128,93362175,ES
93362176,93364223,GB
93364224,93368319,IT
-93368320,93368320,GB
-93368321,93368575,IN
-93368576,93368832,GB
-93368833,93369087,US
-93369088,93369088,GB
-93369089,93369343,US
-93369344,93369344,GB
-93369345,93369599,US
-93369600,93369600,GB
-93369601,93369855,US
-93369856,93370112,GB
-93370113,93370367,PK
+93368320,93370367,GB
93370368,93372415,IT
93372416,93388799,GR
93388800,93415423,CH
@@ -5181,8 +901,8 @@
93417472,93419519,IR
93419520,93421567,IT
93421568,93425663,DE
-93425664,93426175,SE
-93426176,93427711,GI
+93425664,93426687,GI
+93426688,93427711,DE
93427712,93429759,NO
93429760,93431807,RU
93431808,93433855,ES
@@ -5201,14 +921,14 @@
93681664,93683711,UA
93683712,93685759,AT
93685760,93687807,BE
-93687808,93691391,RU
-93691392,93691903,GB
+93687808,93691903,RU
93691904,93693951,PL
93693952,93695999,IE
93696000,93700095,FR
93700096,93702143,PL
-93702144,93704191,RU
-93704192,93708287,UA
+93702144,93705983,RU
+93705984,93706239,UA
+93706240,93708287,RU
93708288,93712383,DE
93712384,93714431,HU
93714432,93716479,NL
@@ -5218,7 +938,15 @@
93765632,93774847,SE
93774848,93776127,NO
93776128,93782015,SE
-93782016,93847551,GB
+93782016,93833983,GB
+93833984,93834239,NL
+93834240,93835263,GB
+93835264,93835519,NL
+93835520,93836287,GB
+93836288,93836799,NL
+93836800,93842351,GB
+93842352,93842359,NL
+93842360,93847551,GB
93847552,93880319,GE
93880320,93888511,IT
93888512,93890559,PL
@@ -5230,598 +958,90 @@
93906944,93908991,BA
93908992,93911039,IT
93911040,93913087,AE
-93913088,93913103,KR
-93913104,93913119,US
-93913120,93913127,AE
-93913128,93913135,IL
-93913136,93913147,KR
-93913148,93913151,IN
-93913152,93913155,KR
-93913156,93913159,CN
-93913160,93913167,IL
-93913168,93913183,US
-93913184,93913191,NL
-93913192,93913195,TR
-93913196,93913207,US
-93913208,93913223,NL
-93913224,93913231,AR
-93913232,93913239,QA
-93913240,93913247,NL
-93913248,93913263,CN
-93913264,93913271,US
-93913272,93913279,TR
-93913280,93913319,US
-93913320,93913327,EG
-93913328,93913335,US
-93913336,93913343,BR
-93913344,93913351,NL
-93913352,93913359,IT
-93913360,93913375,US
-93913376,93913383,IN
-93913384,93913391,BS
-93913392,93913399,IS
-93913400,93913407,CA
-93913408,93913415,NL
-93913416,93913423,IN
-93913424,93913431,IL
-93913432,93913435,TR
-93913436,93913471,NL
-93913472,93913479,IE
-93913480,93913487,BR
-93913488,93913495,US
-93913496,93913503,DK
-93913504,93913511,MA
-93913512,93913519,DK
-93913520,93913527,GB
-93913528,93913535,NL
-93913536,93913543,CA
-93913544,93913551,PA
-93913552,93913559,US
-93913560,93913567,CA
-93913568,93913575,GR
-93913576,93913599,NL
-93913600,93913615,JO
-93913616,93913623,TR
-93913624,93913647,US
-93913648,93913655,IN
-93913656,93913663,RU
-93913664,93913687,US
-93913688,93913703,IL
-93913704,93913711,ZA
-93913712,93913719,CA
-93913720,93913723,US
-93913724,93913727,GR
-93913728,93913759,US
-93913760,93913767,RU
-93913768,93913823,US
-93913824,93913835,NL
-93913836,93913855,US
-93913856,93913863,EE
-93913864,93913871,EG
-93913872,93913887,VG
-93913888,93913919,NL
-93913920,93913951,US
-93913952,93913983,JO
-93913984,93914015,US
-93914016,93914111,NL
-93914112,93914119,NO
-93914120,93914127,RU
-93914128,93914135,AF
-93914136,93914143,US
-93914144,93914151,IL
-93914152,93914159,KR
-93914160,93914167,JO
-93914168,93914171,RU
-93914172,93914173,NL
-93914174,93914174,US
-93914175,93914175,GB
-93914176,93914183,NL
-93914184,93914191,TR
-93914192,93914199,CN
-93914200,93914207,US
-93914208,93914215,IL
-93914216,93914223,TR
-93914224,93914231,RU
-93914232,93914263,NL
-93914264,93914271,IN
-93914272,93914279,ZA
-93914280,93914283,KW
-93914284,93914295,ES
-93914296,93914311,NL
-93914312,93914319,BE
-93914320,93914323,BR
-93914324,93914327,SA
-93914328,93914331,GB
-93914332,93914334,TR
-93914335,93914335,GB
-93914336,93914343,RO
-93914344,93914351,NL
-93914352,93914355,AU
-93914356,93914357,ES
+93913088,93914319,NL
+93914320,93914323,AZ
+93914324,93914357,NL
93914358,93914358,GB
-93914359,93914359,CN
-93914360,93914367,NL
-93914368,93914375,ES
-93914376,93914391,BE
-93914392,93914399,US
-93914400,93914407,BE
-93914408,93914439,NL
-93914440,93914447,TR
-93914448,93914455,US
-93914456,93914463,NO
-93914464,93914471,TR
-93914472,93914479,NL
-93914480,93914487,HR
-93914488,93914495,FR
-93914496,93914527,GT
-93914528,93914535,US
-93914536,93914543,NL
-93914544,93914551,QA
-93914552,93914567,US
-93914568,93914571,SE
-93914572,93914575,US
-93914576,93914583,NO
-93914584,93914587,US
-93914588,93914591,TR
-93914592,93914607,NL
-93914608,93914615,US
-93914616,93914623,CH
-93914624,93914663,US
-93914664,93914671,CZ
-93914672,93914679,TR
-93914680,93914687,IL
-93914688,93914695,US
-93914696,93914703,NL
-93914704,93914707,ES
-93914708,93914709,US
-93914710,93914710,EG
+93914359,93914671,NL
+93914672,93914679,US
+93914680,93914710,NL
93914711,93914711,GB
-93914712,93914719,US
-93914720,93914727,ES
-93914728,93914735,NL
-93914736,93914743,US
-93914744,93914751,EG
-93914752,93914783,US
-93914784,93914791,NL
-93914792,93914799,US
-93914800,93914807,NL
-93914808,93914815,PK
-93914816,93914847,NL
-93914848,93914855,AE
-93914856,93914871,US
-93914872,93914887,NL
-93914888,93914895,CH
-93914896,93914903,DE
-93914904,93914919,NL
-93914920,93914927,SE
-93914928,93914935,NL
-93914936,93914943,IN
-93914944,93914959,US
-93914960,93914967,NL
-93914968,93914975,NO
-93914976,93914983,LV
-93914984,93914991,JO
-93914992,93914999,CA
-93915000,93915007,NL
-93915008,93915071,US
-93915072,93915083,PL
-93915084,93915087,CA
-93915088,93915103,US
-93915104,93915111,RO
-93915112,93915119,TH
-93915120,93915131,US
-93915132,93915132,PA
-93915133,93915133,US
-93915134,93915134,CN
-93915135,93915135,NL
-93915136,93915207,US
-93915208,93915215,CY
-93915216,93915223,CA
-93915224,93915231,US
-93915232,93915247,GB
-93915248,93915263,NL
-93915264,93915271,US
-93915272,93915279,NL
-93915280,93915295,JP
-93915296,93915303,NL
-93915304,93915311,RO
-93915312,93915327,BR
-93915328,93915423,NL
-93915424,93915439,US
-93915440,93915551,NL
-93915552,93915559,US
-93915560,93915575,NL
-93915576,93915583,US
-93915584,93915615,NL
-93915616,93915623,BD
-93915624,93915663,NL
-93915664,93915679,US
-93915680,93915807,NL
-93915808,93915815,IT
-93915816,93915831,US
-93915832,93915839,CN
-93915840,93915863,US
-93915864,93915871,NL
-93915872,93915895,US
+93914712,93914951,NL
+93914952,93914959,US
+93914960,93915327,NL
+93915328,93915391,US
+93915392,93915847,NL
+93915848,93915855,TR
+93915856,93915863,US
+93915864,93915895,NL
93915896,93915903,AT
-93915904,93915911,DE
-93915912,93915919,US
-93915920,93915951,NL
-93915952,93915959,CN
-93915960,93915967,US
-93915968,93915975,NL
-93915976,93915983,US
-93915984,93915999,NL
-93916000,93916007,US
-93916008,93916015,MX
-93916016,93916031,NL
-93916032,93916039,US
-93916040,93916047,NL
-93916048,93916055,US
-93916056,93916063,ES
-93916064,93916079,US
-93916080,93916127,NL
-93916128,93916135,US
-93916136,93916143,ES
-93916144,93916159,NL
-93916160,93916175,US
-93916176,93916183,NL
-93916184,93916191,FR
-93916192,93916199,IL
-93916200,93916223,NL
-93916224,93916255,US
-93916256,93916303,NL
-93916304,93916304,AU
-93916305,93916305,CR
-93916306,93916307,AU
-93916308,93916311,NL
-93916312,93916319,US
-93916320,93916323,NL
-93916324,93916327,EG
-93916328,93916351,US
-93916352,93916383,NL
-93916384,93916407,US
-93916408,93916411,BD
-93916412,93916412,GR
-93916413,93916413,NL
-93916414,93916414,US
-93916415,93916415,NL
-93916416,93916447,US
-93916448,93916455,NL
-93916456,93916463,CY
-93916464,93916487,NL
-93916488,93916495,GB
-93916496,93916503,RO
-93916504,93916511,US
-93916512,93916519,LV
-93916520,93916527,IL
+93915904,93916335,NL
+93916336,93916343,US
+93916344,93916527,NL
93916528,93916543,US
-93916544,93916607,NL
-93916608,93916615,US
-93916616,93916623,CY
-93916624,93916719,NL
-93916720,93916727,CY
-93916728,93916735,US
-93916736,93916767,NL
-93916768,93916775,US
-93916776,93916783,CY
-93916784,93916823,NL
-93916824,93916831,CY
-93916832,93916879,NL
-93916880,93916887,CY
-93916888,93916895,US
-93916896,93916911,NL
-93916912,93916919,CY
-93916920,93916935,US
-93916936,93916939,CY
-93916940,93916943,NL
-93916944,93916951,CY
-93916952,93916959,NL
-93916960,93916967,US
-93916968,93916971,CY
+93916544,93916591,NL
+93916592,93916599,US
+93916600,93916971,NL
93916972,93916975,US
-93916976,93916991,NL
-93916992,93917003,US
-93917004,93917023,NL
-93917024,93917031,US
-93917032,93917039,NL
-93917040,93917063,US
-93917064,93917071,CN
-93917072,93917079,US
-93917080,93917087,NL
-93917088,93917095,US
-93917096,93917119,NL
-93917120,93917135,US
-93917136,93917143,AT
-93917144,93917167,US
-93917168,93917183,NL
-93917184,93917191,US
-93917192,93917311,NL
-93917312,93917343,US
-93917344,93917359,NL
-93917360,93917511,US
-93917512,93917519,NL
-93917520,93917527,US
-93917528,93917535,CN
-93917536,93917539,MA
-93917540,93917543,SE
-93917544,93917551,US
-93917552,93917559,GB
-93917560,93917563,NL
-93917564,93917567,ES
-93917568,93917575,US
-93917576,93917583,LV
-93917584,93917587,GR
-93917588,93917591,US
-93917592,93917599,NL
-93917600,93917607,GB
-93917608,93917611,NL
-93917612,93917615,TR
-93917616,93917623,NL
-93917624,93917631,US
-93917632,93917639,GB
-93917640,93917647,RS
-93917648,93917655,DE
-93917656,93917663,NL
-93917664,93917671,US
-93917672,93917679,IN
-93917680,93917687,TW
-93917688,93917695,LT
-93917696,93917703,US
-93917704,93917707,NL
-93917708,93917711,RU
-93917712,93917719,US
-93917720,93917727,NL
-93917728,93917735,TR
-93917736,93917743,GB
-93917744,93917751,NL
-93917752,93917791,US
-93917792,93917799,RU
-93917800,93917823,NL
-93917824,93917855,TR
-93917856,93917863,CY
-93917864,93917867,CN
-93917868,93917871,TR
-93917872,93917935,NL
-93917936,93917943,IN
-93917944,93917947,NL
-93917948,93917949,US
-93917950,93917950,BZ
-93917951,93917952,NL
-93917953,93917953,GB
-93917954,93917955,US
-93917956,93917959,IN
-93917960,93917963,TR
-93917964,93917975,US
-93917976,93917979,NL
-93917980,93917999,TR
-93918000,93918007,US
-93918008,93918015,NL
-93918016,93918023,RS
-93918024,93918031,GB
-93918032,93918047,US
-93918048,93918063,GB
-93918064,93918071,SE
-93918072,93918073,US
-93918074,93918074,AU
-93918075,93918075,FR
-93918076,93918079,TR
-93918080,93918087,GB
-93918088,93918095,CN
-93918096,93918103,FI
+93916976,93918103,NL
93918104,93918111,US
-93918112,93918127,GB
-93918128,93918135,SG
-93918136,93918143,US
-93918144,93918151,CA
-93918152,93918159,AE
-93918160,93918175,NL
-93918176,93918183,AE
-93918184,93918199,US
-93918200,93918207,NL
-93918208,93918223,US
-93918224,93918231,RO
-93918232,93918235,CN
-93918236,93918239,SA
-93918240,93918243,TR
-93918244,93918247,US
-93918248,93918255,NL
-93918256,93918263,RO
-93918264,93918279,US
-93918280,93918287,GB
-93918288,93918295,US
-93918296,93918303,RU
-93918304,93918319,BG
-93918320,93918327,PL
-93918328,93918335,IL
-93918336,93918351,NL
-93918352,93918359,CN
-93918360,93918363,EG
-93918364,93918367,AU
-93918368,93918383,IL
-93918384,93918431,US
-93918432,93918439,NL
-93918440,93918447,MA
-93918448,93918455,NL
-93918456,93918463,CN
-93918464,93918471,AU
-93918472,93918475,SE
-93918476,93918479,TR
-93918480,93918487,US
-93918488,93918495,MX
-93918496,93918503,DK
-93918504,93918511,NL
-93918512,93918519,US
-93918520,93918535,NL
-93918536,93918543,EE
-93918544,93918551,CH
-93918552,93918555,TR
+93918112,93918215,NL
+93918216,93918223,US
+93918224,93918555,NL
93918556,93918559,US
-93918560,93918567,AE
-93918568,93918575,NO
-93918576,93918591,NL
+93918560,93918591,NL
93918592,93918599,US
-93918600,93918607,GB
-93918608,93918615,US
-93918616,93918623,IL
-93918624,93918631,NO
-93918632,93918635,GR
-93918636,93918639,US
-93918640,93918647,NL
-93918648,93918655,IL
-93918656,93918687,BR
-93918688,93918695,TR
-93918696,93918703,US
-93918704,93918711,NL
-93918712,93918719,CY
-93918720,93918847,IT
-93918848,93918855,US
-93918856,93918863,GR
-93918864,93918871,IL
-93918872,93918879,RU
-93918880,93918887,TH
-93918888,93918895,EG
-93918896,93918903,HK
-93918904,93918911,GB
-93918912,93918919,IL
-93918920,93918927,IE
-93918928,93918935,RU
-93918936,93918943,NL
-93918944,93918975,US
-93918976,93919007,MA
-93919008,93919015,GR
-93919016,93919023,RU
-93919024,93919031,US
-93919032,93919039,DK
-93919040,93919087,NL
-93919088,93919095,AE
-93919096,93919103,NL
-93919104,93919135,TR
-93919136,93919143,US
-93919144,93919147,NL
-93919148,93919151,US
-93919152,93919159,NL
-93919160,93919163,US
-93919164,93919167,NL
-93919168,93919175,ES
-93919176,93919183,US
-93919184,93919191,IL
-93919192,93919195,US
-93919196,93919196,NL
-93919197,93919197,CA
-93919198,93919199,NL
-93919200,93919207,US
-93919208,93919215,NL
-93919216,93919247,US
-93919248,93919255,NL
-93919256,93919263,DK
+93918600,93918655,NL
+93918656,93918687,US
+93918688,93919263,NL
93919264,93919279,US
-93919280,93919287,NL
-93919288,93919295,US
-93919296,93919303,NL
-93919304,93919311,PT
-93919312,93919319,GB
-93919320,93919327,DK
-93919328,93919335,NL
-93919336,93919343,US
-93919344,93919359,NL
-93919360,93919423,US
-93919424,93919431,NL
-93919432,93919439,US
-93919440,93919443,AU
-93919444,93919463,US
-93919464,93919471,NL
-93919472,93919551,US
-93919552,93919583,CA
-93919584,93919591,PT
-93919592,93919599,US
-93919600,93919607,NL
-93919608,93919615,US
-93919616,93919623,LV
-93919624,93919631,PK
-93919632,93919639,GB
-93919640,93919647,NL
-93919648,93919655,US
-93919656,93919659,TR
-93919660,93919663,US
-93919664,93919671,NL
-93919672,93919679,ES
-93919680,93919703,US
-93919704,93919707,NL
-93919708,93919711,US
-93919712,93919719,IN
-93919720,93919727,GB
-93919728,93919735,ES
-93919736,93919743,CH
-93919744,93919751,NL
-93919752,93919759,MY
-93919760,93919775,NL
-93919776,93919779,US
-93919780,93919780,MA
-93919781,93919781,GR
-93919782,93919783,AU
-93919784,93919791,US
-93919792,93919799,NL
-93919800,93919807,US
-93919808,93919811,NL
-93919812,93919815,US
-93919816,93919819,NL
-93919820,93919821,SA
-93919822,93919822,ES
-93919823,93919823,IN
-93919824,93919863,NL
-93919864,93919871,US
-93919872,93919911,NL
-93919912,93919919,PT
-93919920,93919943,US
-93919944,93919991,NL
-93919992,93919999,US
-93920000,93920007,IL
-93920008,93920055,NL
-93920056,93920059,CY
+93919280,93919391,NL
+93919392,93919395,US
+93919396,93919951,NL
+93919952,93919959,US
+93919960,93920059,NL
93920060,93920063,US
-93920064,93920095,NL
-93920096,93920119,US
-93920120,93920127,NL
-93920128,93920143,RU
-93920144,93920167,US
-93920168,93920175,NL
-93920176,93920183,CY
-93920184,93920187,TR
-93920188,93920189,ES
-93920190,93920190,IN
-93920191,93920191,HR
-93920192,93920199,NL
-93920200,93920201,AU
-93920202,93920202,GB
-93920203,93920203,AE
-93920204,93920207,IL
-93920208,93920215,NL
-93920216,93920223,IL
-93920224,93920231,US
-93920232,93920351,NL
-93920352,93920367,CY
-93920368,93920383,NL
-93920384,93920391,GB
-93920392,93920395,GR
-93920396,93920407,NL
-93920408,93920415,US
-93920416,93920423,NL
-93920424,93920431,MX
-93920432,93920447,US
-93920448,93920463,NL
-93920464,93920479,TR
-93920480,93920483,US
-93920484,93920487,NL
-93920488,93920495,US
-93920496,93920503,FR
-93920504,93920511,NL
-93920512,93920519,US
-93920520,93920527,SE
-93920528,93920535,CH
-93920536,93920543,NL
-93920544,93920575,US
-93920576,93929471,NL
+93920064,93920163,NL
+93920164,93920167,US
+93920168,93920575,NL
+93920576,93920639,US
+93920640,93920855,NL
+93920856,93920863,US
+93920864,93921055,NL
+93921056,93921059,US
+93921060,93921063,NL
+93921064,93921071,GB
+93921072,93923551,NL
+93923552,93923559,US
+93923560,93923567,NL
+93923568,93923575,US
+93923576,93923855,NL
+93923856,93923863,US
+93923864,93924407,NL
+93924408,93924415,JP
+93924416,93924591,NL
+93924592,93924599,US
+93924600,93924927,NL
+93924928,93924935,ES
+93924936,93925807,NL
+93925808,93925815,KE
+93925816,93927143,NL
+93927144,93927151,JP
+93927152,93927231,NL
+93927232,93927247,CL
+93927248,93927871,NL
+93927872,93927879,US
+93927880,93927887,NL
+93927888,93927895,US
+93927896,93927927,NL
+93927928,93927935,US
+93927936,93929031,NL
+93929032,93929039,US
+93929040,93929079,NL
+93929080,93929087,US
+93929088,93929191,NL
+93929192,93929199,US
+93929200,93929471,NL
93929472,93939711,GB
93939712,93941759,NO
93941760,93945855,CH
@@ -5830,7 +1050,8 @@
93972480,93974527,SE
93974528,93976575,CH
93976576,93978623,GB
-93978624,94175231,RO
+93978624,94011391,ES
+94011392,94175231,RO
94175232,94178303,SE
94178304,94178559,NO
94178560,94179071,SE
@@ -5848,9 +1069,7 @@
94187264,94188287,AT
94188288,94189311,SE
94189312,94189567,LI
-94189568,94190079,NO
-94190080,94191103,GB
-94191104,94191615,SE
+94189568,94191615,SE
94191616,94193663,GB
94193664,94195711,SI
94195712,94199807,NL
@@ -5882,7 +1101,7 @@
94339072,94355455,ES
94355456,94357503,NL
94357504,94361599,GB
-94361600,94363647,PT
+94361600,94363647,LU
94363648,94365695,GB
94365696,94367743,HU
94367744,94369791,ES
@@ -5911,12 +1130,51 @@
95365120,95367167,ES
95367168,95369215,IT
95369216,95371263,GB
-95371264,95375359,EU
+95371264,95375359,IT
95375360,95377407,NL
95377408,95387647,RU
-95387648,95416319,DE
-95416320,95416831,US
-95416832,95420415,DE
+95387648,95387903,GB
+95387904,95388927,DE
+95388928,95389183,AU
+95389184,95389695,DE
+95389696,95390207,GB
+95390208,95393151,DE
+95393152,95393279,RS
+95393280,95393407,DE
+95393408,95393535,AE
+95393536,95393663,DE
+95393664,95393791,QA
+95393792,95394047,GB
+95394048,95395327,AU
+95395328,95395839,GB
+95395840,95398399,DE
+95398400,95398655,GB
+95398656,95400447,DE
+95400448,95400703,GB
+95400704,95401471,DE
+95401472,95401727,GB
+95401728,95402111,DE
+95402112,95402239,KW
+95402240,95402623,DE
+95402624,95402751,US
+95402752,95403519,DE
+95403520,95403775,GB
+95403776,95404799,DE
+95404800,95405055,GB
+95405056,95405567,DE
+95405568,95405823,GB
+95405824,95406335,DE
+95406336,95407359,GB
+95407360,95407871,US
+95407872,95408639,DE
+95408640,95409151,GB
+95409152,95409663,DE
+95409664,95409919,US
+95409920,95410175,DE
+95410176,95410431,AU
+95410432,95410687,DE
+95410688,95410943,GB
+95410944,95420415,DE
95420416,95551487,TR
95551488,95555583,AZ
95555584,95557631,GB
@@ -5928,18 +1186,7 @@
95569920,95571967,SE
95571968,95574015,RU
95574016,95576063,IT
-95576064,95578368,GB
-95578369,95578623,US
-95578624,95578624,GB
-95578625,95578879,US
-95578880,95578880,GB
-95578881,95579135,US
-95579136,95579136,GB
-95579137,95579391,US
-95579392,95579392,GB
-95579393,95579647,US
-95579648,95579904,GB
-95579905,95580159,US
+95576064,95580159,GB
95580160,95582207,NL
95582208,95584255,IT
95584256,95617023,GE
@@ -5952,28 +1199,33 @@
95647744,95649791,FR
95649792,95666175,IT
95666176,95668223,FR
-95668224,95674623,DE
-95674624,95674639,NL
-95674640,95676159,DE
-95676160,95676191,NL
-95676192,95682559,DE
-95682560,95944703,UA
+95668224,95682559,DE
95944704,96075775,PL
96075776,96143359,DE
96143360,96145407,GE
96145408,96149503,GB
96149504,96151551,ES
96151552,96153599,RU
-96153600,96155135,PL
-96155136,96155647,IE
+96153600,96155647,PL
96155648,96157695,CH
96157696,96165887,RU
-96165888,96167935,GP
-96167936,96169983,MQ
-96169984,96172031,GY
-96172032,96174079,FR
+96165888,96166143,GP
+96166144,96167167,FR
+96167168,96167423,GP
+96167424,96167679,FR
+96167680,96167935,GP
+96167936,96168191,MQ
+96168192,96169471,FR
+96169472,96169727,MQ
+96169728,96170751,FR
+96170752,96171263,GF
+96171264,96173055,FR
+96173056,96173311,MQ
+96173312,96174079,FR
96174080,96206847,HU
-96206848,96337919,RU
+96206848,96305151,RU
+96305152,96321535,DE
+96321536,96337919,RU
96337920,96403455,IR
96403456,96468991,AZ
96468992,96731135,RO
@@ -5982,139 +1234,15 @@
96862208,96894975,GB
96894976,96897023,CZ
96897024,96899071,GB
-96899072,96900991,AT
-96900992,96901119,DE
-96901120,96901375,AT
-96901376,96901631,DE
-96901632,96901887,AT
-96901888,96902399,DE
-96902400,96902655,AT
-96902656,96902671,DE
-96902672,96902703,AT
-96902704,96902719,CH
-96902720,96902735,DE
-96902736,96902791,AT
-96902792,96902799,CH
-96902800,96903167,AT
+96899072,96903167,AT
96903168,96911359,IR
-96911360,96919551,NL
+96911360,96919551,FR
96919552,96923647,IT
96923648,96925695,JO
-96925696,96925823,GB
-96925824,96925839,FI
-96925840,96925855,DK
-96925856,96925871,NO
-96925872,96925887,VN
-96925888,96925951,GB
-96925952,96925967,NL
-96925968,96926063,GB
-96926064,96926079,FI
-96926080,96926095,DK
-96926096,96926111,NO
-96926112,96926127,DE
-96926128,96926143,IT
-96926144,96926175,EG
-96926176,96926271,GB
-96926272,96926303,BY
-96926304,96926319,GB
-96926320,96926335,NL
-96926336,96926351,FI
-96926352,96926367,DK
-96926368,96926383,NO
-96926384,96926399,DE
-96926400,96926415,IT
-96926416,96926623,GB
-96926624,96926631,NL
-96926632,96926639,CN
-96926640,96926655,IT
-96926656,96926671,DE
-96926672,96926687,NO
-96926688,96926703,DK
-96926704,96926719,FI
-96926720,96926735,NL
-96926736,96926831,GB
-96926832,96926847,FI
-96926848,96926863,DK
-96926864,96926879,NO
-96926880,96926895,DE
-96926896,96926911,IT
-96926912,96926943,CZ
-96926944,96927103,GB
-96927104,96927135,EE
-96927136,96927151,IT
-96927152,96927167,DE
-96927168,96927183,NO
-96927184,96927199,DK
-96927200,96927215,FI
-96927216,96927247,NL
-96927248,96927295,GB
-96927296,96927327,UA
-96927328,96927343,GB
-96927344,96927359,FI
-96927360,96927375,DK
-96927376,96927391,NO
-96927392,96927407,DE
-96927408,96927423,IT
-96927424,96927487,GB
-96927488,96927503,NL
-96927504,96927551,GB
-96927552,96927583,GR
-96927584,96927599,GB
-96927600,96927615,FI
-96927616,96927631,DK
-96927632,96927647,NO
-96927648,96927663,DE
-96927664,96927679,IT
-96927680,96960511,GB
-96960512,96963639,DE
-96963640,96963647,AT
-96963648,96964607,DE
+96925696,96960511,GB
+96960512,96964607,DE
96964608,96968703,NL
-96968704,96971527,LT
-96971528,96971535,CA
-96971536,96971583,LK
-96971584,96971647,GB
-96971648,96971743,CY
-96971744,96971759,CA
-96971760,96971767,IN
-96971768,96971775,LT
-96971776,96972031,UY
-96972032,96972087,LT
-96972088,96972095,RU
-96972096,96972111,NL
-96972112,96972119,BE
-96972120,96972143,LT
-96972144,96972151,ES
-96972152,96972159,LT
-96972160,96972191,US
-96972192,96972207,LT
-96972208,96972215,HK
-96972216,96972279,US
-96972280,96972303,LT
-96972304,96972327,CN
-96972328,96972335,LT
-96972336,96972343,SC
-96972344,96972351,LT
-96972352,96972415,CY
-96972416,96972479,LT
-96972480,96972511,BR
-96972512,96972527,PL
-96972528,96972535,US
-96972536,96972551,LT
-96972552,96972575,CN
-96972576,96972607,CY
-96972608,96972655,LT
-96972656,96972663,CN
-96972664,96972671,CH
-96972672,96972703,PK
-96972704,96972727,RU
-96972728,96972767,LT
-96972768,96972783,FR
-96972784,96972786,LT
-96972787,96972787,NL
-96972788,96972789,LT
-96972790,96972790,NL
-96972791,96972799,LT
+96968704,96972799,LT
96972800,96974847,DE
96974848,96985087,RU
96985088,96987135,ES
@@ -6133,514 +1261,13 @@
97435648,97437695,DK
97437696,97439743,AT
97439744,97443839,NL
-97443840,97445887,ES
+97443840,97445887,PT
97445888,97447935,RS
97447936,97452031,PL
97452032,97517567,UA
97517568,98566143,IR
-98566144,98567167,GB
-98567168,98567935,DE
-98567936,98568191,AD
-98568192,98568447,AE
-98568448,98568703,AF
-98568704,98568959,AG
-98568960,98569215,AI
-98569216,98569471,AL
-98569472,98569727,AM
-98569728,98569983,AO
-98569984,98570239,AQ
-98570240,98570495,AR
-98570496,98570751,AS
-98570752,98571007,AT
-98571008,98571263,AU
-98571264,98571519,AW
-98571520,98571775,AX
-98571776,98572031,AZ
-98572032,98572287,BA
-98572288,98572543,BB
-98572544,98572799,BD
-98572800,98573055,BE
-98573056,98573311,BF
-98573312,98573567,BG
-98573568,98573823,BH
-98573824,98574079,BI
-98574080,98574335,BJ
-98574336,98574591,BL
-98574592,98574847,BM
-98574848,98575103,BN
-98575104,98575359,BO
-98575360,98575615,BQ
-98575616,98575871,BR
-98575872,98576127,BS
-98576128,98576383,BT
-98576384,98576639,NL
-98576640,98576895,BW
-98576896,98577151,BY
-98577152,98577407,BZ
-98577408,98577663,CA
-98577664,98577919,CC
-98577920,98578175,CD
-98578176,98578431,CF
-98578432,98578687,CG
-98578688,98578943,CH
-98578944,98579199,CI
-98579200,98579455,CK
-98579456,98579711,CL
-98579712,98579967,CM
-98579968,98580223,CN
-98580224,98580479,CO
-98580480,98580735,CR
-98580736,98580991,CU
-98580992,98581247,CV
-98581248,98581503,CW
-98581504,98581759,CX
-98581760,98582015,CY
-98582016,98582271,CZ
-98582272,98582527,DE
-98582528,98582783,DJ
-98582784,98583039,DK
-98583040,98583295,DM
-98583296,98583551,DO
-98583552,98583807,DZ
-98583808,98584063,EC
-98584064,98584319,EE
-98584320,98584575,EG
-98584576,98584831,EH
-98584832,98585087,ER
-98585088,98585343,ES
-98585344,98585599,ET
-98585600,98585855,FI
-98585856,98586111,FJ
-98586112,98586367,FK
-98586368,98586623,FM
-98586624,98586879,FO
-98586880,98587135,FR
-98587136,98587391,GA
-98587392,98587647,GB
-98587648,98587903,GD
-98587904,98588159,GE
-98588160,98588415,GF
-98588416,98588671,GG
-98588672,98588927,GH
-98588928,98589183,GI
-98589184,98589439,GL
-98589440,98589695,GM
-98589696,98589951,GN
-98589952,98590207,GP
-98590208,98590463,GQ
-98590464,98590719,GR
-98590720,98590975,GS
-98590976,98591231,GT
-98591232,98591487,GU
-98591488,98591743,GW
-98591744,98591999,GY
-98592000,98592255,HK
-98592256,98592511,NL
-98592512,98592767,HN
-98592768,98593023,HR
-98593024,98593279,HT
-98593280,98593535,HU
-98593536,98593791,ID
-98593792,98594047,IE
-98594048,98594303,IL
-98594304,98594559,IM
-98594560,98594815,IN
-98594816,98595071,IO
-98595072,98595327,IQ
-98595328,98595583,IR
-98595584,98595839,IS
-98595840,98596095,IT
-98596096,98596351,JE
-98596352,98596607,JM
-98596608,98596863,JO
-98596864,98597119,JP
-98597120,98597375,KE
-98597376,98597631,KG
-98597632,98597887,KI
-98597888,98598143,KM
-98598144,98598399,KN
-98598400,98598655,KP
-98598656,98598911,KR
-98598912,98599167,KW
-98599168,98599423,KY
-98599424,98599679,KZ
-98599680,98599935,LA
-98599936,98600191,LB
-98600192,98600447,LC
-98600448,98600703,LI
-98600704,98600959,LK
-98600960,98601215,LR
-98601216,98601471,LS
-98601472,98601727,LT
-98601728,98601983,LU
-98601984,98602239,LV
-98602240,98602495,LY
-98602496,98602751,MC
-98602752,98603007,MD
-98603008,98603263,ME
-98603264,98603519,MF
-98603520,98603775,MG
-98603776,98604031,MH
-98604032,98604287,MK
-98604288,98604543,ML
-98604544,98604799,MM
-98604800,98605055,MN
-98605056,98605311,MO
-98605312,98605567,MP
-98605568,98605823,MQ
-98605824,98606079,MR
-98606080,98606335,MS
-98606336,98606591,MT
-98606592,98606847,MU
-98606848,98607103,MV
-98607104,98607359,MW
-98607360,98607615,MX
-98607616,98607871,MY
-98607872,98608127,MZ
-98608128,98608383,NA
-98608384,98608639,NC
-98608640,98608895,NE
-98608896,98609151,NF
-98609152,98609407,NG
-98609408,98609663,NI
-98609664,98609919,NL
-98609920,98610175,NO
-98610176,98610431,NP
-98610432,98610687,NR
-98610688,98610943,NU
-98610944,98611199,NZ
-98611200,98611455,OM
-98611456,98611711,PA
-98611712,98611967,PE
-98611968,98612223,PF
-98612224,98612479,PG
-98612480,98612735,PH
-98612736,98612991,PK
-98612992,98613247,PL
-98613248,98613503,PM
-98613504,98613759,PN
-98613760,98614015,PR
-98614016,98614271,PS
-98614272,98614527,PT
-98614528,98614783,PW
-98614784,98615039,PY
-98615040,98615295,QA
-98615296,98615551,RE
-98615552,98615807,RO
-98615808,98616063,RS
-98616064,98616319,RU
-98616320,98616575,RW
-98616576,98616831,SA
-98616832,98617087,SB
-98617088,98617343,SC
-98617344,98617599,SD
-98617600,98617855,SE
-98617856,98618111,SG
-98618112,98618367,SH
-98618368,98618623,SI
-98618624,98618879,SJ
-98618880,98619135,SK
-98619136,98619391,SL
-98619392,98619647,SM
-98619648,98619903,SN
-98619904,98620159,SO
-98620160,98620415,SR
-98620416,98620671,SS
-98620672,98620927,ST
-98620928,98621183,SV
-98621184,98621439,SX
-98621440,98621695,SY
-98621696,98621951,SZ
-98621952,98622207,TC
-98622208,98622463,TD
-98622464,98622719,TF
-98622720,98622975,TG
-98622976,98623231,TH
-98623232,98623487,TJ
-98623488,98623743,TK
-98623744,98623999,TL
-98624000,98624255,TM
-98624256,98624511,TN
-98624512,98624767,TO
-98624768,98625023,TR
-98625024,98625279,TT
-98625280,98625535,TV
-98625536,98625791,TW
-98625792,98626047,TZ
-98626048,98626303,UA
-98626304,98626559,UG
-98626560,98626815,UM
-98626816,98627071,US
-98627072,98627327,UY
-98627328,98627583,UZ
-98627584,98627839,VA
-98627840,98628095,VC
-98628096,98628351,VE
-98628352,98628607,VG
-98628608,98628863,VI
-98628864,98629119,VN
-98629120,98629375,VU
-98629376,98629631,WF
-98629632,98629887,WS
-98629888,98630143,YE
-98630144,98630399,YT
-98630400,98630655,ZA
-98630656,98630911,ZM
-98630912,98631167,ZW
-98631168,98631679,AD
-98631680,98632703,GB
-98632704,98633471,DE
-98633472,98633727,AD
-98633728,98633983,AE
-98633984,98634239,AF
-98634240,98634495,AG
-98634496,98634751,AI
-98634752,98635007,AL
-98635008,98635263,AM
-98635264,98635519,AO
-98635520,98635775,AQ
-98635776,98636031,AR
-98636032,98636287,AS
-98636288,98636543,AT
-98636544,98636799,AU
-98636800,98637055,AW
-98637056,98637311,AX
-98637312,98637567,AZ
-98637568,98637823,BA
-98637824,98638079,BB
-98638080,98638335,BD
-98638336,98638591,BE
-98638592,98638847,BF
-98638848,98639103,BG
-98639104,98639359,BH
-98639360,98639615,BI
-98639616,98639871,BJ
-98639872,98640127,BL
-98640128,98640383,BM
-98640384,98640639,BN
-98640640,98640895,BO
-98640896,98641151,BQ
-98641152,98641407,BR
-98641408,98641663,BS
-98641664,98641919,BT
-98641920,98642175,NL
-98642176,98642431,BW
-98642432,98642687,BY
-98642688,98642943,BZ
-98642944,98643199,CA
-98643200,98643455,CC
-98643456,98643711,CD
-98643712,98643967,CF
-98643968,98644223,CG
-98644224,98644479,CH
-98644480,98644735,CI
-98644736,98644991,CK
-98644992,98645247,CL
-98645248,98645503,CM
-98645504,98645759,CN
-98645760,98646015,CO
-98646016,98646271,CR
-98646272,98646527,CU
-98646528,98646783,CV
-98646784,98647039,CW
-98647040,98647295,CX
-98647296,98647551,CY
-98647552,98647807,CZ
-98647808,98648063,DE
-98648064,98648319,DJ
-98648320,98648575,DK
-98648576,98648831,DM
-98648832,98649087,DO
-98649088,98649343,DZ
-98649344,98649599,EC
-98649600,98649855,EE
-98649856,98650111,EG
-98650112,98650367,EH
-98650368,98650623,ER
-98650624,98650879,ES
-98650880,98651135,ET
-98651136,98651391,FI
-98651392,98651647,FJ
-98651648,98651903,FK
-98651904,98652159,FM
-98652160,98652415,FO
-98652416,98652671,FR
-98652672,98652927,GA
-98652928,98653183,GB
-98653184,98653439,GD
-98653440,98653695,GE
-98653696,98653951,GF
-98653952,98654207,GG
-98654208,98654463,GH
-98654464,98654719,GI
-98654720,98654975,GL
-98654976,98655231,GM
-98655232,98655487,GN
-98655488,98655743,GP
-98655744,98655999,GQ
-98656000,98656255,GR
-98656256,98656511,GS
-98656512,98656767,GT
-98656768,98657023,GU
-98657024,98657279,GW
-98657280,98657535,GY
-98657536,98657791,HK
-98657792,98658047,NL
-98658048,98658303,HN
-98658304,98658559,HR
-98658560,98658815,HT
-98658816,98659071,HU
-98659072,98659327,ID
-98659328,98659583,IE
-98659584,98659839,IL
-98659840,98660095,IM
-98660096,98660351,IN
-98660352,98660607,IO
-98660608,98660863,IQ
-98660864,98661119,IR
-98661120,98661375,IS
-98661376,98661631,IT
-98661632,98661887,JE
-98661888,98662143,JM
-98662144,98662399,JO
-98662400,98662655,JP
-98662656,98662911,KE
-98662912,98663167,KG
-98663168,98663423,KI
-98663424,98663679,KM
-98663680,98663935,KN
-98663936,98664191,KP
-98664192,98664447,KR
-98664448,98664703,KW
-98664704,98664959,KY
-98664960,98665215,KZ
-98665216,98665471,LA
-98665472,98665727,LB
-98665728,98665983,LC
-98665984,98666239,LI
-98666240,98666495,LK
-98666496,98666751,LR
-98666752,98667007,LS
-98667008,98667263,LT
-98667264,98667519,LU
-98667520,98667775,LV
-98667776,98668031,LY
-98668032,98668287,MC
-98668288,98668543,MD
-98668544,98668799,ME
-98668800,98669055,MF
-98669056,98669311,MG
-98669312,98669567,MH
-98669568,98669823,MK
-98669824,98670079,ML
-98670080,98670335,MM
-98670336,98670591,MN
-98670592,98670847,MO
-98670848,98671103,MP
-98671104,98671359,MQ
-98671360,98671615,MR
-98671616,98671871,MS
-98671872,98672127,MT
-98672128,98672383,MU
-98672384,98672639,MV
-98672640,98672895,MW
-98672896,98673151,MX
-98673152,98673407,MY
-98673408,98673663,MZ
-98673664,98673919,NA
-98673920,98674175,NC
-98674176,98674431,NE
-98674432,98674687,NF
-98674688,98674943,NG
-98674944,98675199,NI
-98675200,98675455,NL
-98675456,98675711,NO
-98675712,98675967,NP
-98675968,98676223,NR
-98676224,98676479,NU
-98676480,98676735,NZ
-98676736,98676991,OM
-98676992,98677247,PA
-98677248,98677503,PE
-98677504,98677759,PF
-98677760,98678015,PG
-98678016,98678271,PH
-98678272,98678527,PK
-98678528,98678783,PL
-98678784,98679039,PM
-98679040,98679295,PN
-98679296,98679551,PR
-98679552,98679807,PS
-98679808,98680063,PT
-98680064,98680319,PW
-98680320,98680575,PY
-98680576,98680831,QA
-98680832,98681087,RE
-98681088,98681343,RO
-98681344,98681599,RS
-98681600,98681855,RU
-98681856,98682111,RW
-98682112,98682367,SA
-98682368,98682623,SB
-98682624,98682879,SC
-98682880,98683135,SD
-98683136,98683391,SE
-98683392,98683647,SG
-98683648,98683903,SH
-98683904,98684159,SI
-98684160,98684415,SJ
-98684416,98684671,SK
-98684672,98684927,SL
-98684928,98685183,SM
-98685184,98685439,SN
-98685440,98685695,SO
-98685696,98685951,SR
-98685952,98686207,SS
-98686208,98686463,ST
-98686464,98686719,SV
-98686720,98686975,SX
-98686976,98687231,SY
-98687232,98687487,SZ
-98687488,98687743,TC
-98687744,98687999,TD
-98688000,98688255,TF
-98688256,98688511,TG
-98688512,98688767,TH
-98688768,98689023,TJ
-98689024,98689279,TK
-98689280,98689535,TL
-98689536,98689791,TM
-98689792,98690047,TN
-98690048,98690303,TO
-98690304,98690559,TR
-98690560,98690815,TT
-98690816,98691071,TV
-98691072,98691327,TW
-98691328,98691583,TZ
-98691584,98691839,UA
-98691840,98692095,UG
-98692096,98692351,UM
-98692352,98692607,US
-98692608,98692863,UY
-98692864,98693119,UZ
-98693120,98693375,VA
-98693376,98693631,VC
-98693632,98693887,VE
-98693888,98694143,VG
-98694144,98694399,VI
-98694400,98694655,VN
-98694656,98694911,VU
-98694912,98695167,WF
-98695168,98695423,WS
-98695424,98695679,YE
-98695680,98695935,YT
-98695936,98696191,ZA
-98696192,98696447,ZM
-98696448,98696703,ZW
-98696704,98697215,AD
-98697216,98697471,FR
-98697472,98699263,GB
-98699264,98701311,FR
+98566144,98697215,NL
+98697216,98701311,FR
98701312,98705407,ES
98705408,98707455,SE
98707456,98709503,NL
@@ -6651,23 +1278,47 @@
98734080,98736127,CH
98736128,98738175,RU
98738176,98740223,NO
-98740224,98740479,ES
-98740480,98740735,DE
-98740736,98741247,US
-98741248,98742271,DE
+98740224,98742271,DE
98742272,98744319,GB
98744320,98746367,ES
98746368,98762751,TR
98762752,98893823,RU
98893824,98959359,TR
-98959360,99090431,DE
+98959360,99024895,DE
+99024896,99025151,GB
+99025152,99025407,IT
+99025408,99025663,NL
+99025664,99025919,DE
+99025920,99026175,SE
+99026176,99026943,DE
+99026944,99027199,GB
+99027200,99027455,CA
+99027456,99027711,PL
+99027712,99028735,DE
+99028736,99028991,EG
+99028992,99029247,GB
+99029248,99029503,DE
+99029504,99029759,TR
+99029760,99031295,DE
+99031296,99031551,GB
+99031552,99031807,DE
+99031808,99032063,FR
+99032064,99044863,DE
+99044864,99045119,GB
+99045120,99045375,NL
+99045376,99090431,DE
99090432,99614719,IR
99614720,99876863,SE
99876864,100139007,SA
100139008,100204543,UA
100204544,100237311,PT
100237312,100245503,IT
-100245504,100247551,SE
+100245504,100246015,SE
+100246016,100246271,GB
+100246272,100246527,NL
+100246528,100246783,DE
+100246784,100247039,FR
+100247040,100247551,SE
100247552,100249599,CH
100249600,100253695,SI
100253696,100261887,RU
@@ -6682,11 +1333,25 @@
100329472,100331519,RU
100331520,100335615,TR
100335616,100401151,KZ
-100401152,100532223,DE
-100532224,100564991,RO
-100564992,100573183,SE
+100532224,100559551,RO
+100559552,100559615,GB
+100559616,100559743,RO
+100559744,100559871,GB
+100559872,100559935,US
+100559936,100560127,RO
+100560128,100560383,US
+100560384,100560895,RO
+100560896,100560959,GB
+100560960,100561023,RO
+100561024,100561151,GB
+100561152,100564991,RO
+100564992,100569087,SE
+100569088,100569343,FR
+100569344,100569599,SE
+100569600,100569855,FR
+100569856,100573183,SE
100573184,100575231,GB
-100575232,100577279,SE
+100575232,100577279,DK
100577280,100579327,RU
100579328,100581375,AT
100581376,100589567,SE
@@ -6699,299 +1364,112 @@
100636672,100638719,NL
100638720,100646911,UA
100646912,100663295,RU
-100663296,121195295,US
-121195296,121195327,IT
-121195328,134693119,US
-134693120,134693375,CA
-134693376,134730239,US
-134730240,134730495,CA
-134730496,134738943,US
-134738944,134739199,CA
-134739200,134874866,US
+100663296,134874866,US
134874867,134874867,DO
-134874868,135013631,US
-135013632,135013887,US
-135013888,135192575,US
+134874868,135192575,US
135192576,135200767,MX
-135200768,135430143,US
-135430144,135430399,CA
-135430400,135432191,US
+135200768,135432191,US
135432192,135434239,CA
-135434240,135441407,US
-135441408,135441663,CA
-135441664,135603199,US
+135434240,135603199,US
135603200,135604223,CA
-135604224,135606783,US
-135606784,135607295,CA
-135607296,135790591,US
-135790592,135794687,CA
+135604224,135607039,US
+135607040,135607295,CA
+135607296,135776255,US
+135776256,135776511,GU
+135776512,135790591,US
+135790592,135790847,CA
+135790848,135791103,US
+135791104,135791615,CA
+135791616,135792639,US
+135792640,135794687,CA
135794688,136237055,US
136237056,136239103,CA
-136239104,136415487,US
-136415488,136415743,CA
-136415744,152305663,US
+136239104,136404991,US
+136404992,136407039,CA
+136407040,136413183,US
+136413184,136415231,CA
+136415232,136415665,US
+136415666,136415666,FR
+136415667,136689919,US
+136689920,136690175,CA
+136690176,139954241,US
+139954242,139954242,ES
+139954243,152305663,US
152305664,152338431,GB
152338432,167772159,US
-184549376,201859071,US
-201859072,201859087,VI
-201859088,201897983,US
+184549376,201897983,US
201897984,201898239,PR
-201898240,202385407,US
+201898240,202182143,US
+202182144,202182399,GB
+202182400,202385407,US
202385408,202385919,PR
202385920,202706431,US
202706432,202706943,PR
202706944,202935551,US
202935552,202935807,PR
-202935808,203625391,US
-203625392,203625399,PR
-203625400,203658287,US
-203658288,203658303,VI
-203658304,203658415,US
-203658416,203658423,VI
-203658424,203658463,US
-203658464,203658471,VI
-203658472,203658927,US
-203658928,203658935,VI
-203658936,203658943,US
-203658944,203658951,PR
-203658952,203658967,US
-203658968,203658991,VI
-203658992,203659007,US
+202935808,203272959,US
+203272960,203273215,GB
+203273216,203659007,US
203659008,203659263,VI
-203659264,204046335,US
-204046336,204047103,PR
-204047104,204047231,US
-204047232,204047247,VI
-204047248,204047255,US
-204047256,204047263,VI
-204047264,204047311,US
-204047312,204047335,VI
-204047336,204047439,US
-204047440,204047455,VI
-204047456,204047463,US
-204047464,204047471,VI
-204047472,204047487,US
-204047488,204047511,VI
-204047512,204047519,US
-204047520,204047535,VI
-204047536,204047543,PR
-204047544,204047551,US
-204047552,204047559,VI
-204047560,204047567,PR
-204047568,204047591,VI
-204047592,204047999,PR
+203659264,204047871,US
+204047872,204047999,PR
204048000,204048031,US
204048032,204048047,PR
-204048048,204048063,VI
-204048064,204048127,US
-204048128,204048383,PR
-204048384,205500987,US
-205500988,205500991,CA
-205500992,209783247,US
-209783248,209783255,CA
-209783256,209783679,US
-209783680,209783807,CA
-209783808,209784951,US
-209784952,209784959,CA
-209784960,209788767,US
-209788768,209788783,CA
-209788784,209789959,US
-209789960,209789967,FR
-209789968,209799007,US
-209799008,209799031,CA
-209799032,209809407,US
-209809408,209809471,CA
-209809472,209809599,US
-209809600,209809663,CA
-209809664,209831679,US
-209831680,209831711,DE
-209831712,209845143,US
-209845144,209845151,DE
-209845152,209867103,US
+204048048,209867103,US
209867104,209867111,CA
-209867112,210458623,US
-210458624,210458631,PR
-210458632,210785791,US
-210785792,210786047,BO
-210786048,211126783,US
+209867112,211126783,US
211126784,211126911,PR
211126912,211263999,US
211264000,211264255,SA
-211264256,211597055,US
-211597056,211597071,VI
-211597072,211597375,US
-211597376,211597439,VI
-211597440,211597719,US
+211264256,211597311,US
+211597312,211597567,VI
+211597568,211597719,US
211597720,211597727,VI
-211597728,211597743,PR
-211597744,211597775,US
-211597776,211597791,VI
-211597792,212122039,US
-212122040,212122047,PR
-212122048,212491249,US
-212491250,212491250,US
-212491251,212733527,US
-212733528,212733535,PR
-212733536,212787199,US
+211597728,212787199,US
212787200,212788223,PR
-212788224,212788631,US
-212788632,212788647,VI
-212788648,212788655,US
-212788656,212788663,VI
-212788664,212788863,US
+212788224,212788479,US
+212788480,212788735,VI
+212788736,212788863,US
212788864,212788991,PR
-212788992,212789063,US
-212789064,212789079,VI
-212789080,212789087,US
+212788992,212789087,US
212789088,212789095,VI
-212789096,212789143,US
-212789144,212789151,VI
-212789152,212789175,US
-212789176,212789183,VI
-212789184,212789191,PR
-212789192,212789215,US
-212789216,212789223,VI
-212789224,212791295,US
-212791296,212791447,VI
-212791448,212791455,US
-212791456,212791479,VI
-212791480,212791551,PR
-212791552,212791815,US
-212791816,212791871,VI
-212791872,212791935,US
+212789096,212791831,US
+212791832,212791839,VI
+212791840,212791935,US
212791936,212792063,VI
-212792064,212792199,US
-212792200,212792215,VI
-212792216,212792223,US
-212792224,212792231,VI
-212792232,212792271,US
-212792272,212792279,VI
-212792280,212793119,US
-212793120,212793127,VI
-212793128,212793199,US
-212793200,212793207,VI
-212793208,212793311,US
-212793312,212793327,PR
-212793328,212794575,US
+212792064,212793087,US
+212793088,212793343,PR
+212793344,212794575,US
212794576,212794583,VI
-212794584,212794783,US
-212794784,212794791,VI
-212794792,212794799,US
-212794800,212794815,VI
-212794816,212794879,US
-212794880,212794887,VI
-212794888,212794895,US
-212794896,212794911,VI
-212794912,212794943,PR
-212794944,212794999,US
-212795000,212795007,VI
-212795008,213895679,US
-213895680,213895743,VI
-213895744,214187519,US
-214187520,214187775,VI
-214187776,214187807,US
-214187808,214187815,PR
-214187816,214187903,US
-214187904,214187935,VI
-214187936,214697983,US
-214697984,214698007,VI
-214698008,214698015,PR
-214698016,214698031,US
-214698032,214698087,VI
-214698088,214698095,US
-214698096,214698103,PR
-214698104,214698111,US
-214698112,214698119,VI
-214698120,214698127,US
-214698128,214698135,VI
-214698136,214698143,PR
-214698144,214698151,VI
-214698152,214698159,US
-214698160,214698239,PR
-214698240,214698271,VI
-214698272,214698279,US
-214698280,214698287,VI
-214698288,214698303,US
+212794584,214237247,US
+214237248,214237311,PR
+214237312,214698239,US
+214698240,214698255,VI
+214698256,214698303,US
214698304,214698311,VI
-214698312,214698319,US
-214698320,214698335,PR
-214698336,214698359,US
-214698360,214698367,PR
-214698368,214698383,US
-214698384,214698639,PR
-214698640,214698655,VI
-214698656,214698911,PR
-214698912,214698927,US
-214698928,214699231,PR
-214699232,214699271,US
-214699272,214699279,VI
-214699280,214699303,US
-214699304,214699311,VI
-214699312,214699335,PR
-214699336,214699367,VI
-214699368,214699383,US
-214699384,214699391,VI
-214699392,214699415,US
-214699416,214699455,VI
-214699456,214699471,US
-214699472,214699487,VI
-214699488,214699519,US
+214698312,214699519,US
214699520,214699647,PR
214699648,214699775,VI
-214699776,214699799,US
-214699800,214699807,PR
-214699808,214699839,US
-214699840,214699847,PR
-214699848,214699879,US
-214699880,214699895,PR
-214699896,214699911,US
-214699912,214699919,VI
-214699920,214699951,US
-214699952,214699959,PR
-214699960,214699975,US
-214699976,214699991,VI
-214699992,214700015,US
-214700016,214700023,PR
-214700024,214858655,US
-214858656,214858671,NL
-214858672,215001343,US
-215001344,215001599,VI
-215001600,215002111,US
-215002112,215002127,VI
-215002128,216417663,US
+214699776,214778367,US
+214778368,214778623,PR
+214778624,216417663,US
216417664,216417727,PR
-216417728,218955263,US
-218955264,218955391,CA
-218955392,219187465,US
-219187466,219187467,EU
-219187468,219249919,US
-219249920,219250175,GB
-219250176,219512063,US
+216417728,217709055,US
+217709056,217709311,PR
+217709312,219512063,US
219512064,219512319,GB
219512320,234881023,US
234881024,234883071,CN
234883072,234884095,JP
234884096,234885119,CN
234885120,234889215,VN
-234889216,234893311,JP
-234893312,234895359,KR
-234895360,234895615,TW
-234895616,234895935,MY
-234895936,234896127,TH
-234896128,234896383,MN
-234896384,234896639,SA
-234896640,234896895,AE
-234896896,234897151,KR
-234897152,234897407,TW
-234897408,234913791,KR
+234889216,234913791,KR
234913792,234946559,HK
234946560,234947583,CN
234947584,234950655,JP
234950656,234951679,AU
234951680,234952703,HK
-234954752,234961663,NZ
-234961664,234961919,US
-234961920,234971135,NZ
+234954752,234971135,NZ
234979328,235012095,MY
235012096,235077631,AU
235077632,235143167,JP
@@ -7034,9 +1512,7 @@
247472128,247479295,JP
247479296,247480319,CN
247480320,247482367,MY
-247482368,247482879,PG
-247482880,247483135,AU
-247483136,247483391,PG
+247482368,247483391,PG
247483392,247484415,CN
247484416,247488511,KR
247488512,247496703,JP
@@ -7055,23 +1531,33 @@
248446976,248512511,TH
248512512,249561087,CN
249561088,251658239,VN
-251658240,264485119,US
-264485120,264485375,EU
-264485376,264997119,US
-264997120,264997375,EU
-264997376,265005311,US
-265005312,265005567,EU
-265005568,265025791,US
-265025792,265026047,GB
-265026048,265525503,US
-265525504,265525759,AP
-265525760,265529599,US
-265529600,265529855,AP
-265529856,265545983,US
-265545984,265546239,CN
-265546240,266059775,US
-266059776,266067967,IN
-266067968,266070271,US
+251658240,260976639,US
+260976640,260980735,GB
+260980736,264482815,US
+264482816,264485119,DE
+264485120,264485375,US
+264485376,264486911,DE
+264486912,264495103,US
+264495104,264503295,CH
+264503296,264634367,US
+264634368,264667135,DE
+264667136,264699903,US
+264699904,264716287,CH
+264716288,264798207,US
+264798208,264802303,GB
+264802304,264994815,US
+264994816,264997119,FR
+264997120,264997375,US
+264997376,265005311,FR
+265005312,265005567,US
+265005568,265011199,FR
+265011200,265023487,US
+265023488,265027583,GB
+265027584,265060351,US
+265060352,265093119,FR
+265093120,266062079,US
+266062080,266062335,IN
+266062336,266070271,US
266070272,266070527,AU
266070528,266578175,US
266578176,266578431,CA
@@ -7079,22 +1565,78 @@
266586368,266586623,CA
266586624,266598655,US
266598656,266598911,BR
-266598912,288195071,US
-288195072,288198655,CA
-288198656,289011535,US
-289011536,289011543,IT
-289011544,289406975,US
+266598912,288130047,US
+288130048,288131071,CA
+288131072,288167423,US
+288167424,288167935,CA
+288167936,288169471,US
+288169472,288169983,CA
+288169984,288176127,US
+288176128,288178175,MX
+288178176,288196607,US
+288196608,288197119,CA
+288197120,288197631,US
+288197632,288198143,CA
+288198144,288198655,CL
+288198656,288212991,US
+288212992,288215039,CA
+288215040,288223231,US
+288223232,288227327,CA
+288227328,289406975,US
289406976,289603583,IE
289603584,289628415,GB
289628416,289628671,US
-289628672,289669119,GB
+289628672,289652735,GB
+289652736,289653759,NL
+289653760,289657855,GB
+289657856,289658879,AE
+289658880,289669119,GB
289669120,289734655,FR
289734656,289746943,GB
289746944,289748991,US
289748992,289752063,ES
289752064,289760255,US
289760256,289763327,DE
-289763328,290264063,US
+289763328,289948927,US
+289948928,289949055,AT
+289949056,289949695,US
+289949696,289950207,NL
+289950208,289950463,PL
+289950464,289950719,PT
+289950720,289950975,CZ
+289950976,289951231,US
+289951232,289951487,RU
+289951488,289951743,US
+289951744,289952255,DK
+289952256,289952767,US
+289952768,289953791,GB
+289953792,289954303,US
+289954304,289954559,ES
+289954560,289955839,US
+289955840,289955967,FI
+289955968,289956095,US
+289956096,289956223,NO
+289956224,289956351,US
+289956352,289956479,DK
+289956480,289956607,US
+289956608,289956735,NL
+289956736,289956863,IN
+289956864,289957119,ES
+289957120,289957375,US
+289957376,289957631,SE
+289957632,289957887,US
+289957888,289958143,LU
+289958144,289958399,US
+289958400,289958655,IN
+289958656,289958911,US
+289958912,289959423,IT
+289959424,289959935,DK
+289959936,289960447,DE
+289960448,289960959,US
+289960960,289961471,BY
+289961472,289963007,US
+289963008,289964031,FR
+289964032,290264063,US
290264064,290264575,AT
290264576,290267135,US
290267136,290269183,NL
@@ -7126,7 +1668,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
@@ -7138,35 +1681,24 @@
290423808,290424831,SE
290424832,290513663,US
290513664,290513919,MY
-290513920,323243895,US
-323243896,323243903,FR
-323243904,332132119,US
-332132120,332132127,IL
-332132128,344260607,US
-344260608,344261119,GB
-344261120,344261778,US
-344261779,344261779,EU
-344261780,344262655,US
+290513920,344260607,US
+344260608,344260863,GB
+344260864,344262655,US
344262656,344262911,GB
-344262912,344268817,US
-344268818,344268818,EU
-344268819,344270860,US
-344270861,344270861,GB
-344270862,344588543,US
+344262912,344588543,US
344588544,344589055,GB
344589056,344592895,US
344592896,344592945,GB
-344592946,344592946,EU
+344592946,344592946,US
344592947,344593151,GB
344593152,344593638,US
344593639,344593639,SE
-344593640,344645631,US
-344645632,344653823,GB
+344593640,344651263,US
+344651264,344651519,GB
+344651520,344653823,US
344653824,344659519,AU
344659520,344659520,SG
-344659521,344662591,AU
-344662592,344662592,MY
-344662593,344662783,AU
+344659521,344662783,AU
344662784,344663039,MY
344663040,344670719,AU
344670720,344671231,IN
@@ -7175,41 +1707,342 @@
344675072,344675121,AU
344675122,344676145,IN
344676146,344719359,AU
-344719360,344880127,US
-344880128,344880383,EU
-344880384,344881151,US
+344719360,344881151,US
344881152,344881407,IN
344881408,344977407,US
344977408,344977663,IN
-344977664,355993887,US
-355993888,355993895,IT
-355993896,368674047,US
-368674048,368674303,ES
-368674304,386862079,US
+344977664,386035711,US
+386035712,386039807,NL
+386039808,386060287,US
+386060288,386068479,NL
+386068480,386109439,US
+386109440,386113535,NL
+386113536,386125823,US
+386125824,386134015,NL
+386134016,386519039,US
+386519040,386523135,NL
+386523136,386613247,US
+386613248,386617343,NL
+386617344,386662399,US
+386662400,386670591,NL
+386670592,386736127,US
+386736128,386740223,NL
+386740224,386842623,US
+386842624,386854911,NL
+386854912,386862079,US
386862080,386862335,JP
-386862336,386924543,US
+386862336,386875391,US
+386875392,386879487,NL
+386879488,386887679,US
+386887680,386891775,NL
+386891776,386924543,US
386924544,387055615,CA
387055616,387121151,PR
-387121152,387132143,US
-387132144,387132151,CA
-387132152,387139327,US
-387139328,387139583,CA
-387139584,387151903,US
-387151904,387151911,CA
-387151912,387164415,US
-387164416,387164671,CA
-387164672,387802879,US
+387121152,387802879,US
387802880,387803135,PR
-387803136,387804671,US
-387804672,387804927,TW
-387804928,387825663,US
+387803136,387825663,US
387825664,387833855,CA
-387833856,391118847,US
-402653184,405012479,US
+387833856,387985407,US
+387985408,387993599,NL
+387993600,387997695,US
+387997696,388001791,NL
+388001792,388038655,US
+388038656,388042751,NL
+388042752,388055039,US
+388055040,388059135,NL
+388059136,388091903,US
+388091904,388100095,NL
+388100096,388149247,US
+388149248,388153343,NL
+388153344,388198399,US
+388198400,388202495,NL
+388202496,388222975,US
+388222976,388227071,NL
+388227072,388235263,US
+388235264,388239359,NL
+388239360,388251647,US
+388251648,388255743,NL
+388255744,388272127,US
+388272128,388284415,NL
+388284416,388288511,US
+388288512,388300799,NL
+388300800,388308991,US
+388308992,388317183,NL
+388317184,388325375,US
+388325376,388329471,NL
+388329472,388341759,US
+388341760,388345855,NL
+388345856,388354047,US
+388354048,388358143,NL
+388358144,388362239,US
+388362240,388390911,NL
+388390912,388440063,US
+388440064,388444159,NL
+388444160,388472831,US
+388472832,388476927,NL
+388476928,388513791,US
+388513792,388517887,NL
+388517888,388526079,US
+388526080,388530175,NL
+388530176,388538367,US
+388538368,388542463,NL
+388542464,388567039,US
+388567040,388571135,NL
+388571136,388632575,US
+388632576,388636671,NL
+388636672,388677631,US
+388677632,388681727,NL
+388681728,388698111,US
+388698112,388702207,NL
+388702208,388710399,US
+388710400,388730879,NL
+388730880,388812799,US
+388812800,388816895,NL
+388816896,388849663,US
+388849664,388853759,NL
+388853760,388857855,US
+388857856,388861951,NL
+388861952,388866047,US
+388866048,388878335,NL
+388878336,388919295,US
+388919296,388923391,NL
+388923392,389066751,US
+389066752,389074943,NL
+389074944,389079039,US
+389079040,389083135,NL
+389083136,389136383,US
+389136384,389140479,NL
+389140480,389177343,US
+389177344,389181439,NL
+389181440,389185535,US
+389185536,389201919,NL
+389201920,389206015,US
+389206016,389210111,NL
+389210112,389234687,US
+389234688,389238783,NL
+389238784,389242879,US
+389242880,389251071,NL
+389251072,389259263,US
+389259264,389292031,NL
+389292032,389296127,US
+389296128,389300223,NL
+389300224,389328895,US
+389328896,389365759,NL
+389365760,389390335,US
+389390336,389398527,NL
+389398528,389402623,US
+389402624,389427199,NL
+389427200,389431295,US
+389431296,389451775,NL
+389451776,389480447,US
+389480448,389484543,NL
+389484544,389509119,US
+389509120,389513215,NL
+389513216,389515263,US
+389515264,389521407,NL
+389521408,389537791,US
+389537792,389541887,NL
+389541888,389607423,US
+389607424,389611519,NL
+389611520,389619711,US
+389619712,389627903,NL
+389627904,389631999,US
+389632000,389640191,NL
+389640192,389730303,US
+389730304,389734399,NL
+389734400,389754879,US
+389754880,389763071,NL
+389763072,389767167,US
+389767168,389775359,NL
+389775360,389812223,US
+389812224,389824511,NL
+389824512,389926911,US
+389926912,389935103,NL
+389935104,389967871,US
+389967872,389976063,NL
+389976064,389988351,US
+389988352,389992447,NL
+389992448,390021119,US
+390021120,390029311,NL
+390029312,390033407,US
+390033408,390041599,NL
+390041600,390123519,US
+390123520,390131711,NL
+390131712,390143999,US
+390144000,390148095,NL
+390148096,390184959,US
+390184960,390193151,NL
+390193152,390205439,US
+390205440,390209535,NL
+390209536,390262783,US
+390262784,390270975,NL
+390270976,390287359,US
+390287360,390295551,NL
+390295552,390299647,US
+390299648,390303743,NL
+390303744,390733823,US
+390733824,390737919,NL
+390737920,390746111,US
+390746112,390758399,NL
+390758400,390770687,US
+390770688,390778879,NL
+390778880,390946815,US
+390946816,390955007,NL
+390955008,390995967,US
+390995968,391020543,NL
+391020544,391081983,US
+391081984,391086079,NL
+391086080,391110655,US
+391110656,391110911,IL
+391110912,391111167,GB
+391111168,391111679,NL
+391111680,391111935,US
+391111936,391113471,NL
+391113472,391113983,US
+391113984,391114751,NL
+391114752,391872511,US
+391872512,391888895,CA
+391888896,391897087,US
+391897088,391905279,CA
+391905280,391938047,US
+391938048,391946239,CA
+391946240,392765439,US
+392765440,392765695,GB
+392765696,394264575,US
+398458880,398635007,US
+398635008,398643199,NL
+398643200,398647295,US
+398647296,398655487,NL
+398655488,398659583,US
+398659584,398675967,NL
+398675968,398684159,US
+398684160,398692351,NL
+398692352,398782463,US
+398782464,398790655,NL
+398790656,398856191,US
+398856192,398876671,NL
+398876672,398970879,US
+398970880,398974975,NL
+398974976,399007743,US
+399007744,399011839,NL
+399011840,399020031,US
+399020032,399028223,NL
+399028224,399097855,US
+399097856,399106047,NL
+399106048,399147007,US
+399147008,399155199,NL
+399155200,399331327,US
+399331328,399339519,NL
+399339520,399368191,US
+399368192,399376383,NL
+399376384,399380479,US
+399380480,399405055,NL
+399405056,399458303,US
+399458304,399466495,NL
+399466496,399601663,US
+399601664,399618047,NL
+399618048,399630335,US
+399630336,399638527,NL
+399638528,399818751,US
+399818752,399831039,NL
+399831040,399908863,US
+399908864,399917055,NL
+399917056,399921151,US
+399921152,399929343,NL
+399929344,399933439,US
+399933440,399958015,NL
+399958016,399970303,US
+399970304,399978495,NL
+399978496,399990783,US
+399990784,399998975,NL
+399998976,400154623,US
+400154624,400162815,NL
+400162816,400232447,US
+400232448,400248831,NL
+400248832,400252927,US
+400252928,400269311,NL
+400269312,400273407,US
+400273408,400281599,NL
+400281600,400293887,US
+400293888,400302079,NL
+400302080,400412671,US
+400412672,400429055,NL
+400429056,400433151,US
+400433152,400441343,NL
+400441344,400490495,US
+400490496,400556031,NL
+400556032,400760831,US
+400760832,400769023,CA
+400769024,400805887,US
+400805888,400809983,CA
+400809984,400884479,US
+400884480,400884735,TR
+400884736,400884991,GB
+400884992,400887551,US
+400887552,400887807,GB
+400887808,400888575,US
+400888576,400888831,GB
+400888832,400911103,US
+400911104,400911359,PA
+400911360,400911615,AU
+400911616,400911871,CR
+400911872,400912127,US
+400912128,400912383,SG
+400912384,401130495,US
+401130496,401130751,DE
+401130752,401145855,US
+401145856,401211391,CA
+401211392,401293311,US
+401293312,401297407,CA
+401297408,401342463,US
+401342464,401346559,BB
+401346560,401378303,US
+401378304,401378559,EG
+401378560,401386495,US
+401386496,401387007,SE
+401387008,401387263,RU
+401387264,401547263,US
+401547264,401555455,CA
+401555456,402096639,US
+402096640,402096895,FR
+402096896,402105087,US
+402105088,402105343,GB
+402105344,402107391,US
+402107392,402107647,IT
+402107648,402122751,US
+402122752,402123007,SE
+402123008,402124287,US
+402124288,402124543,TR
+402124544,402128895,US
+402128896,402169855,CA
+402169856,402223103,US
+402223104,402227199,CA
+402227200,402231295,PR
+402231296,402239301,US
+402239302,402239302,CA
+402239303,402239473,US
+402239474,402239474,CA
+402239475,402243583,US
+402243584,402247679,CA
+402247680,402263807,US
+402263808,402264063,CA
+402264064,402279935,US
+402279936,402280191,CA
+402280192,402366463,US
+402366464,402374655,CA
+402374656,402399231,US
+402399232,402403327,CA
+402403328,402415615,US
+402415616,402417663,CA
+402417664,402550015,US
+402550016,402550271,CA
+402550272,402550783,GB
+402550784,405012479,US
405012480,405143551,CA
405143552,405180415,US
405180416,405184511,CA
-405184512,405372927,US
+405184512,405364735,US
+405364736,405372927,CA
405372928,405422079,PR
405422080,405798911,US
405798912,405831679,CA
@@ -7219,12 +2052,15 @@
405864448,405921791,US
405921792,405929983,CA
405929984,405938175,US
-405946368,405962751,CA
+405938176,405962751,CA
405962752,405970943,US
+405970944,405979135,CA
405979136,405995519,PR
+405995520,406003711,CA
406003712,406011903,US
406011904,406028287,BS
-406028288,406110207,US
+406028288,406052863,US
+406061056,406110207,US
406110208,406142975,CA
406142976,406147071,US
406147072,406151167,CA
@@ -7232,16 +2068,22 @@
406183936,406208511,CA
406216704,406241279,US
406241280,406257663,PR
+406257664,406274047,US
406274048,406290431,PR
406290432,406298623,US
406298624,406306815,PR
406306816,406323199,CA
406323200,406388735,US
406388736,406454271,CA
-406454272,406847487,US
+406454272,406683647,US
+406683648,406683775,CA
+406683776,406683903,US
+406683904,406684159,CA
+406684160,406838783,US
+406838784,406839295,CA
+406839296,406847487,US
406847488,407408639,CA
-407408640,407605247,US
-407609344,407613439,US
+407408640,407613439,US
407613440,407617535,CA
407617536,407633919,US
407633920,408420351,CA
@@ -7255,77 +2097,40 @@
409255936,409272319,CA
409272320,409337855,US
409337856,409354239,CA
-409370624,409731071,US
+409354240,409509887,US
+409518080,409550847,US
+409567232,409731071,US
409731072,409862143,CA
409862144,410124287,US
-410124288,410174239,CA
-410174240,410174247,US
-410174248,410174779,CA
-410174780,410174783,US
-410174784,410174835,CA
-410174836,410174839,US
-410174840,410174843,CA
-410174844,410174847,US
-410174848,410177735,CA
-410177736,410177743,US
-410177744,410180643,CA
-410180644,410180647,US
-410180648,410180695,CA
-410180696,410180703,US
-410180704,410180711,CA
-410180712,410180715,US
-410180716,410180759,CA
-410180760,410180763,US
-410180764,410180771,CA
-410180772,410180775,US
-410180776,410186719,CA
-410186720,410186723,US
-410186724,410187015,CA
-410187016,410187023,US
-410187024,410187175,CA
-410187176,410187183,US
-410187184,410187451,CA
-410187452,410187455,US
-410187456,410187703,CA
-410187704,410187707,US
-410187708,410189823,CA
+410124288,410189823,CA
410189824,410648575,US
410648576,410714111,CA
-410714112,411164671,US
+410714112,411156479,US
411164672,411168767,CA
-411172864,411303935,US
+411168768,411303935,US
411303936,411369471,NL
411369472,411435007,TR
411435008,411500543,DE
411500544,411566079,RS
411566080,411639807,US
-411639808,411643903,CA
-411648000,411664383,CA
+411639808,411664383,CA
411664384,411680767,US
-411680768,411682391,CA
-411682392,411682399,US
-411682400,411683863,CA
-411683864,411683871,US
-411683872,411684599,CA
-411684600,411684607,US
-411684608,411688831,CA
-411688832,411688863,US
-411688864,411688959,CA
+411680768,411688959,CA
411688960,411697151,PR
411697152,411746303,CA
411746304,411762687,PR
411762688,411770879,CA
411770880,411779071,US
411779072,411828223,PR
-411828224,411893759,US
+411828224,411885567,US
411893760,411975679,CA
411975680,411979775,US
411979776,411983871,CA
-411983872,411988735,US
-411988736,411988991,EU
+411983872,411988991,US
411988992,411989247,GB
-411989248,412221439,US
-412221440,412229631,CA
+411989248,412057599,US
+412073984,412221439,US
+412221440,412237823,CA
412254208,412483583,US
412483584,412549119,CA
412549120,412614655,US
@@ -7338,14 +2143,13 @@
412942336,412946431,US
412946432,412950527,PR
412950528,412958719,US
-412975104,413007871,CA
+412958720,413007871,CA
413007872,413908991,US
413908992,413925375,PR
413925376,415760383,US
415760384,416022527,CA
416022528,416059391,US
-416059392,416063487,CA
-416071680,416088063,CA
+416059392,416088063,CA
416088064,416153599,US
416153600,416161791,BS
416161792,416219135,US
@@ -7363,12 +2167,16 @@
417398784,417431551,US
417431552,417529855,CA
417529856,417538047,PR
-417538048,417775615,US
+417538048,417726463,US
+417726464,417734655,JP
+417734656,417775615,US
417775616,417796095,CA
417796096,417800191,US
417800192,417808383,BS
417808384,417820671,CA
-417820672,417857535,US
+417820672,417832191,US
+417832192,417832447,VI
+417832448,417857535,US
417857536,417923071,AR
417923072,418062335,US
418062336,418070527,CA
@@ -7380,9 +2188,7 @@
418643968,418668543,CA
418668544,418672639,US
418672640,418676735,CA
-418676736,418687743,BS
-418687744,418687998,DM
-418687999,418693119,BS
+418676736,418693119,BS
418693120,418709503,CA
418709504,418766847,US
418766848,418770943,CA
@@ -7393,12 +2199,9 @@
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
+452988928,452997119,JP
452997120,453001215,IN
453001216,453009407,AU
453009408,453017599,BD
@@ -7460,11 +2263,9 @@
459472896,459505663,AU
459505664,459538431,CN
459538432,459539455,AU
-459539456,459540479,TH
459540480,459541503,JP
459541504,459542527,IN
459542528,459544575,HK
-459544576,459545599,AU
459545600,459547647,JP
459548672,459550719,TH
459550720,459554815,JP
@@ -7499,7 +2300,10 @@
460226560,460259327,PH
460259328,460261375,AU
460261376,460262399,KH
-460262400,460263423,NZ
+460262400,460262655,US
+460262656,460262911,AU
+460262912,460263167,NZ
+460263168,460263423,GB
460263424,460267519,NP
460267520,460275711,ID
460275712,460277759,AU
@@ -7507,9 +2311,7 @@
460279808,460283903,AU
460283904,460292095,KR
460292096,460300287,JP
-460300288,460300799,HK
-460300800,460300927,JP
-460300928,460312575,HK
+460300288,460312575,HK
460312576,460320767,SG
460320768,460324863,AU
460324864,460341247,CN
@@ -7534,7 +2336,7 @@
460587008,460591103,JP
460591104,460593151,IN
460593152,460595199,JP
-460595200,460595711,IN
+460595200,460595711,SG
460595712,460596223,JP
460596224,460597247,AU
460598272,460599295,CN
@@ -7550,7 +2352,8 @@
460931072,460933119,AU
460933120,460935167,CN
460935168,460937215,ID
-460937216,460938239,AU
+460937216,460937727,NZ
+460937728,460938239,AU
460938240,460939263,JP
460939264,460940287,NZ
460940288,460941311,IN
@@ -7577,7 +2380,9 @@
461051904,461053951,AU
461053952,461062143,HK
461062144,461078527,IN
-461078528,461094911,FJ
+461078528,461078783,FJ
+461078784,461079039,AU
+461079040,461094911,FJ
461094912,461096959,HK
461096960,461099007,TW
461099008,461100031,JP
@@ -7661,7 +2466,8 @@
520325120,520327167,FR
520327168,520329215,DE
520329216,520330239,SE
-520330240,520331263,NL
+520330240,520330751,NL
+520330752,520331263,SE
520331264,520339455,IT
520339456,520343551,UA
520343552,520355839,GB
@@ -7669,24 +2475,38 @@
520421376,520486911,AT
520486912,520488959,NL
520488960,520489983,IT
-520489984,520491007,RU
-520491008,520493567,GB
-520493568,520494079,GB
+520489984,520490495,RU
+520490496,520490751,RO
+520490752,520491007,RU
+520491008,520491263,GB
+520491264,520491391,IS
+520491392,520491647,IT
+520491648,520491775,IS
+520491776,520492031,IE
+520492032,520493055,GB
+520493056,520494079,IT
520494080,520494335,FR
-520494336,520494591,TR
-520494592,520495103,CH
-520495104,520496383,DE
-520496384,520496895,TR
+520494336,520494591,IT
+520494592,520494847,CH
+520494848,520495103,DK
+520495104,520495871,IT
+520495872,520496383,DE
+520496384,520496895,IT
520496896,520497151,ES
520497152,520497407,FR
-520497408,520497663,ES
-520497664,520498175,FR
-520498176,520498687,CH
-520498688,520499711,FR
-520499712,520501247,DE
-520501248,520501503,IL
-520501504,520501759,AE
-520501760,520503295,GB
+520497408,520497919,IT
+520497920,520498175,FR
+520498176,520498431,CH
+520498432,520498687,SE
+520498688,520498943,IT
+520498944,520499199,FR
+520499200,520500223,IT
+520500224,520500479,LU
+520500480,520500735,DE
+520500736,520501759,IT
+520501760,520502271,GB
+520502272,520502783,IT
+520502784,520503295,GB
520503296,520505343,PL
520505344,520507391,GB
520507392,520511487,TR
@@ -7698,22 +2518,12 @@
520560640,520562687,TR
520562688,520564735,PL
520564736,520566783,IE
-520566784,520567039,CH
-520567040,520567295,CH
-520567296,520568831,CH
+520566784,520568831,CH
520568832,520589311,IR
520589312,520593407,IT
520593408,520595455,AM
520595456,520597503,MK
-520597504,520597567,DE
-520597568,520597599,IT
-520597600,520597631,HK
-520597632,520597663,IT
-520597664,520598047,DE
-520598048,520598079,FR
-520598080,520599935,DE
-520599936,520600063,US
-520600064,520601599,DE
+520597504,520601599,DE
520601600,520609791,SI
520609792,520613887,RU
520613888,520615935,CZ
@@ -7726,9 +2536,7 @@
520761344,520763391,IT
520763392,520765439,CZ
520765440,520781823,RU
-520781824,520822271,CH
-520822272,520822527,DE
-520822528,520822783,CH
+520781824,520822783,CH
520822784,520824831,IT
520824832,520826879,RO
520826880,520828927,QA
@@ -7739,14 +2547,8 @@
520882176,520884223,IT
520884224,520888319,MK
520888320,520896511,DE
-520896512,520897023,BE
-520897024,520897151,LU
-520897152,520897791,BE
-520897792,520897919,LU
-520897920,520898559,BE
-520898560,520902655,GB
-520902656,520902784,NL
-520902785,520912895,GB
+520896512,520898559,BE
+520898560,520912895,GB
520912896,520945663,UA
520945664,520947711,GB
520947712,520949759,SE
@@ -7757,17 +2559,14 @@
520978432,520980479,RU
520980480,520982527,IT
520982528,520984575,RU
-520984576,520984831,NG
-520984832,520986623,GB
+520984576,520986623,GB
520986624,520988671,PS
520988672,520990719,DE
520990720,520992767,RU
-520994816,521001567,BG
-521001568,521001575,RO
-521001576,521011199,BG
-521011200,521019647,RO
-521019648,521019903,CH
-521019904,521057279,RO
+520994816,521011199,BG
+521011200,521020415,RO
+521020416,521021439,MD
+521021440,521057279,RO
521057280,521058303,MD
521058304,521076735,RO
521076736,521078783,ES
@@ -7796,14 +2595,11 @@
521555968,521558015,NL
521558016,521560063,CY
521560064,521562111,PL
-521562112,521562911,DE
-521562912,521564159,GB
-521564160,521564415,GR
-521564416,521564671,AU
-521564672,521564927,JO
-521564928,521565183,GR
-521565184,521565695,GB
-521565696,521566207,AU
+521562112,521564159,GB
+521564160,521565183,GR
+521565184,521565439,GB
+521565440,521565695,US
+521565696,521566207,GR
521566208,521568255,LU
521568256,521601023,PT
521601024,521666559,RU
@@ -7848,9 +2644,7 @@
521746432,521748479,NL
521748480,521750527,SE
521750528,521752575,PS
-521752576,521754367,FR
-521754368,521754383,US
-521754384,521754623,FR
+521752576,521754623,FR
521754624,521756671,IR
521756672,521758719,NL
521758720,521760767,IR
@@ -7877,8 +2671,13 @@
521953280,521961471,RU
521961472,521969663,CZ
521969664,521977855,UA
-521977856,521986047,RU
-521986048,521994239,UA
+521977856,521986303,RU
+521986304,521986559,UA
+521986560,521989631,RU
+521989632,521989887,UA
+521989888,521991679,RU
+521991680,521991935,UA
+521991936,521994239,RU
521994240,522002431,KG
522002432,522010623,IR
522010624,522018815,AE
@@ -7886,9 +2685,7 @@
522027008,522059775,RU
522059776,522125311,CZ
522125312,522133503,MD
-522133504,522134783,NL
-522134784,522134911,US
-522134912,522135551,NL
+522133504,522135551,NL
522135552,522137599,IT
522137600,522141695,CH
522141696,522143743,RU
@@ -7911,7 +2708,7 @@
522721280,522741759,RU
522741760,522743807,UA
522743808,522747903,RU
-522747904,522780671,UA
+522747904,522764287,UA
522780672,522782719,RU
522782720,522784767,UA
522784768,522786815,BG
@@ -7962,46 +2759,24 @@
523018240,523022335,IT
523022336,523024895,RU
523024896,523025407,DE
-523025408,523025663,UA
+523025408,523025663,NL
523025664,523025919,CH
-523025920,523026431,NL
+523025920,523026431,RU
523026432,523030527,TR
523030528,523034623,FR
523034624,523038719,SE
523038720,523042815,RU
523042816,523075583,NO
523075584,523108351,HR
-523108352,523113215,HU
-523113216,523113471,RO
-523113472,523113983,HU
-523113984,523114239,RO
-523114240,523115775,HU
-523115776,523116287,RO
-523116288,523173887,HU
+523108352,523119615,HU
+523119616,523120639,RO
+523120640,523173887,HU
523173888,523182079,BA
523182080,523190271,IR
523190272,523192319,FI
523192320,523194367,ES
523194368,523196415,DE
-523196416,523196447,AE
-523196448,523196463,BH
-523196464,523196479,AE
-523196480,523196551,BH
-523196552,523196671,AE
-523196672,523196703,BH
-523196704,523196927,AE
-523196928,523197183,BH
-523197184,523197311,AE
-523197312,523197695,BH
-523197696,523198207,AE
-523198208,523198247,BH
-523198248,523198255,AE
-523198256,523198263,BH
-523198264,523198271,AE
-523198272,523198279,BH
-523198280,523198287,AE
-523198288,523198295,BH
-523198296,523198463,AE
+523196416,523198463,AE
523198464,523202559,CZ
523202560,523223039,RU
523223040,523225087,AM
@@ -8037,17 +2812,19 @@
528666624,528668671,RU
528668672,528670719,PL
528670720,528674815,CH
-528674816,528676863,RO
+528674816,528676863,GB
528676864,528678911,RU
528678912,528680959,MD
528680960,528683007,RO
-528683008,528685823,UA
+528683008,528684031,UA
+528684032,528684543,NL
+528684544,528685823,UA
528685824,528687103,US
528687104,528689151,UA
528689152,528691199,RO
528691200,528695295,PL
-528695296,528699391,UA
-528699392,528703487,RU
+528695296,528695551,UA
+528695552,528703487,RU
528703488,528715775,UA
528715776,528719871,RU
528719872,528721919,RO
@@ -8055,8 +2832,7 @@
528723968,528726015,ES
528726016,528736255,RU
528736256,528740351,SK
-528740352,528742143,IT
-528742144,528742399,US
+528740352,528742399,IT
528742400,528744447,RU
528744448,528746495,GB
528748544,528752639,CZ
@@ -8107,29 +2883,30 @@
529596416,529661951,TR
529661952,529727487,GE
529727488,529793023,HR
-529793024,529827839,RU
+529793024,529819647,CZ
+529819648,529826303,RU
+529826304,529826815,CZ
+529826816,529827839,RU
529827840,529828863,CZ
-529828864,529829887,RU
-529829888,529831935,CZ
-529831936,529835007,RU
+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,529848575,KZ
-529848576,529848831,UA
-529848832,529849087,GB
+529846272,529847295,CZ
+529847296,529848319,RU
+529848320,529848575,NL
+529848576,529848831,CZ
+529848832,529849087,UA
529849088,529849599,NL
-529849600,529850367,RU
+529849600,529850111,CZ
+529850112,529850367,RU
529850368,529853439,CZ
529853440,529856511,RU
529856512,529857535,KZ
@@ -8138,9 +2915,11 @@
529924096,529989631,DE
529989632,530055167,NL
530055168,530120703,GR
-530120704,530165759,CY
-530165760,530174207,GR
-530174208,530186239,CY
+530120704,530153471,CY
+530153472,530173951,GR
+530173952,530174207,CY
+530174208,530180095,GR
+530180096,530186239,CY
530186240,530251775,IL
530251776,530317311,TR
530317312,530579455,IT
@@ -8163,8 +2942,7 @@
531234816,531236863,IE
531236864,531238911,FR
531238912,531240959,LV
-531240960,531242751,SE
-531242752,531243007,DE
+531240960,531243007,SE
531243008,531245055,RU
531245056,531247103,IT
531247104,531251199,IR
@@ -8180,88 +2958,72 @@
531281920,531283967,RU
531283968,531292159,DE
531292160,531333119,AZ
-531333120,531333599,NL
-531333600,531333631,RU
-531333632,531334143,NL
-531334144,531334271,US
-531334272,531334399,NL
-531334400,531334463,US
-531334464,531334527,NL
-531334528,531334655,US
-531334656,531335167,NL
+531333120,531334655,NL
+531334656,531335167,US
531335168,531337215,IT
531337216,531339263,CH
531339264,531341311,AL
-531341312,531349503,MD
+531341312,531349503,KZ
531349504,531351551,RU
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
-531372800,531373567,CH
-531373568,531373575,DE
-531373576,531380223,CH
-531380224,531398655,DE
+531372800,531380223,CH
+531380224,531390463,DE
+531390464,531394559,CH
+531394560,531398655,DE
531398656,531400703,RU
531400704,531402751,UA
531402752,531404799,LU
531404800,531406847,FI
531406848,531408895,FR
-531408896,531415039,PL
+531410944,531415039,PL
531415040,531423231,RU
-531423232,531423487,GB
-531423488,531425279,NO
+531423232,531425279,NO
531425280,531427327,FR
-531427328,531428351,GB
+531427328,531427703,GB
+531427704,531427711,IT
+531427712,531427951,GB
+531427952,531427959,IT
+531427960,531428263,GB
+531428264,531428271,IT
+531428272,531428351,GB
531428352,531428359,IT
-531428360,531428375,GB
-531428376,531428383,IT
-531428384,531428495,GB
+531428360,531428495,GB
531428496,531428503,IT
-531428504,531428583,GB
-531428584,531428591,IT
-531428592,531428975,GB
-531428976,531428983,IT
-531428984,531429023,GB
-531429024,531429031,IT
-531429032,531429135,GB
+531428504,531429095,GB
+531429096,531429103,IT
+531429104,531429135,GB
531429136,531429143,IT
-531429144,531429239,GB
+531429144,531429167,GB
+531429168,531429175,IT
+531429176,531429239,GB
531429240,531429247,IT
-531429248,531429271,GB
-531429272,531429279,IT
-531429280,531429407,GB
+531429248,531429335,GB
+531429336,531429343,IT
+531429344,531429391,GB
+531429392,531429399,IT
+531429400,531429407,GB
531429408,531429415,IT
-531429416,531429487,GB
-531429488,531429495,IT
-531429496,531429671,GB
-531429672,531429679,IT
-531429680,531429879,GB
-531429880,531429887,IT
-531429888,531430319,GB
+531429416,531429599,GB
+531429600,531429607,IT
+531429608,531430319,GB
531430320,531430327,IT
-531430328,531430391,GB
-531430392,531430399,IT
-531430400,531430559,GB
-531430560,531430567,IT
-531430568,531430663,GB
-531430664,531430671,IT
-531430672,531430823,GB
+531430328,531430823,GB
531430824,531430831,IT
531430832,531430847,GB
531430848,531430855,IT
531430856,531430927,GB
531430928,531430935,IT
-531430936,531431423,GB
+531430936,531431031,GB
+531431032,531431039,IT
+531431040,531431423,GB
531431424,531496959,RO
531496960,531628031,PL
531628032,531660799,TR
@@ -8287,14 +3049,13 @@
532152320,532168703,DE
532168704,532185087,NL
532185088,532201471,IR
-532201472,532211711,RU
+532201472,532209663,RU
+532209664,532210687,DE
+532210688,532211711,RU
532211712,532212223,LU
-532212224,532212479,RU
-532212480,532212735,UA
-532212736,532212991,LV
-532212992,532214783,RU
-532214784,532215295,AE
-532215296,532221951,RU
+532212224,532213759,RU
+532213760,532214015,GB
+532214016,532221951,RU
532221952,532223999,IT
532224000,532226047,NO
532226048,532234239,GB
@@ -8312,64 +3073,50 @@
532305920,532307967,NO
532307968,532310015,RU
532310016,532312063,GR
-532312064,532312831,JE
-532312832,532312944,GB
-532312945,532312959,JE
-532312960,532313060,GB
-532313061,532313063,JE
-532313064,532313087,GB
-532313088,532314111,JE
+532312064,532312983,JE
+532312984,532312991,GB
+532312992,532314111,JE
532314112,532316159,DE
532316160,532324351,RU
532324352,532328447,NL
532328448,532330495,PS
532330496,532332543,CZ
532332544,532340735,PL
-532340736,532341759,US
-532341760,532342783,GB
-532342784,532343039,US
-532343040,532343359,GB
-532343360,532343487,US
-532343488,532343935,GB
-532343936,532343967,US
-532343968,532344063,GB
-532344064,532344575,US
-532344576,532346879,GB
-532346880,532347135,US
-532347136,532347903,GB
-532347904,532348159,US
-532348160,532348927,GB
-532348928,532365311,PL
-532365312,532373503,DE
+532340736,532341503,GB
+532341504,532341759,DE
+532341760,532344319,GB
+532344320,532344575,FR
+532344576,532347391,GB
+532347392,532347903,DE
+532347904,532348671,GB
+532348672,532348927,NL
+532348928,532365311,IE
+532365312,532365567,LU
+532365568,532365823,NL
+532365824,532366079,DE
+532366080,532366207,NL
+532366208,532366239,AR
+532366240,532366271,PA
+532366272,532371455,DE
+532371456,532373503,NL
532373504,532375551,RU
532375552,532377599,IT
532377600,532381695,DE
532381696,532414463,NL
532414464,532676607,IT
532676608,532692991,GE
-532692992,532701183,CZ
+532692992,532700927,CZ
+532700928,532701183,SK
532701184,532703231,GB
-532703232,532703679,RU
-532703680,532703743,IN
-532703744,532704511,RU
-532704512,532704767,IN
-532704768,532705279,RU
+532703232,532705279,RU
532705280,532709375,NL
532709376,532725759,RU
532725760,532729855,SE
532729856,532731903,TR
532731904,532733951,PL
-532733952,532734975,US
-532734976,532735999,SE
+532733952,532735999,SE
532736000,532738047,RU
-532738048,532738088,GB
-532738089,532738093,SZ
-532738094,532738232,GB
-532738233,532738303,PK
-532738304,532738559,US
-532738560,532739071,GB
-532739072,532739327,IN
-532739328,532740095,US
+532738048,532740095,GB
532740096,532742143,KG
532742144,532746239,GB
532746240,532752383,IT
@@ -8391,495 +3138,35 @@
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
532805632,532807679,SE
532807680,533200895,IT
533200896,533233663,TR
-533233664,533250047,IE
+533233664,533236991,IE
+533236992,533237247,GB
+533237248,533250047,IE
533250048,533254143,RU
533254144,533256191,NL
533256192,533262335,RU
533262336,533264383,ES
533264384,533266431,RU
-533266432,533266435,US
-533266436,533266439,CN
-533266440,533266443,JP
-533266444,533266447,DE
-533266448,533266451,FR
-533266452,533266455,GB
-533266456,533266459,BR
-533266460,533266463,IT
-533266464,533266467,CA
-533266468,533266471,IN
-533266472,533266475,RU
-533266476,533266479,ES
-533266480,533266483,AU
-533266484,533266487,MX
-533266488,533266491,KR
-533266492,533266495,NL
-533266496,533266499,TR
-533266500,533266503,ID
-533266504,533266507,CH
-533266508,533266511,PL
-533266512,533266515,BE
-533266516,533266519,SE
-533266520,533266523,SA
-533266524,533266527,TW
-533266528,533266531,SJ
-533266532,533266535,AT
-533266536,533266539,AR
-533266540,533266543,ZA
-533266544,533266547,IR
-533266548,533266551,TH
-533266552,533266555,DK
-533266556,533266559,GR
-533266560,533266563,AE
-533266564,533266567,VE
-533266568,533266571,CO
-533266572,533266575,FI
-533266576,533266579,MV
-533266580,533266583,PT
-533266584,533266587,HK
-533266588,533266591,SG
-533266592,533266595,EG
-533266596,533266599,NG
-533266600,533266603,IL
-533266604,533266607,IE
-533266608,533266611,CL
-533266612,533266615,CZ
-533266616,533266619,PH
-533266620,533266623,PK
-533266624,533266627,RO
-533266628,533266631,DZ
-533266632,533266635,PE
-533266636,533266639,NZ
-533266640,533266643,KZ
-533266644,533266647,UA
-533266648,533266651,KW
-533266652,533266655,QA
-533266656,533266687,DE
-533266688,533266691,HU
-533266692,533266695,BD
-533266696,533266699,VN
-533266700,533266703,MA
-533266704,533266707,SK
-533266708,533266711,AO
-533266712,533266715,IQ
-533266716,533266719,LY
-533266720,533266723,SD
-533266724,533266727,EC
-533266728,533266731,HR
-533266732,533266735,SY
-533266736,533266739,OM
-533266740,533266743,BY
-533266744,533266747,LU
-533266748,533266751,AZ
-533266752,533266755,DO
-533266756,533266759,LK
-533266760,533266763,SI
-533266764,533266767,FR
-533266768,533266771,BG
-533266772,533266775,TN
-533266776,533266779,GT
-533266780,533266783,UY
-533266784,533266787,LB
-533266788,533266791,UZ
-533266792,533266795,RS
-533266796,533266799,LT
-533266800,533266803,MM
-533266804,533266807,CR
-533266808,533266811,KE
-533266812,533266815,ET
-533266816,533266819,YE
-533266820,533266823,PA
-533266824,533266827,JO
-533266828,533266831,LV
-533266832,533266835,CY
-533266836,533266839,TZ
-533266840,533266843,CI
-533266844,533266847,CM
-533266848,533266851,SV
-533266852,533266855,BH
-533266856,533266859,TT
-533266860,533266863,EE
-533266864,533266867,BO
-533266868,533266871,GH
-533266872,533266875,PY
-533266876,533266879,UG
-533266880,533266883,AF
-533266884,533266887,BA
-533266888,533266891,ZM
-533266892,533266895,HN
-533266896,533266899,NP
-533266900,533266903,GQ
-533266904,533266907,JM
-533266908,533266911,IS
-533266912,533266943,DE
-533266944,533266947,SN
-533266948,533266951,CD
-533266952,533266955,GA
-533266956,533266959,US
-533266960,533266963,BN
-533266964,533266967,CG
-533266968,533266971,AL
-533266972,533266975,NA
-533266976,533266979,KH
-533266980,533266983,GE
-533266984,533266987,MK
-533266988,533266991,MU
-533266992,533266995,ML
-533266996,533266999,AM
-533267000,533267003,PG
-533267004,533267007,BF
-533267008,533267011,MG
-533267012,533267015,MT
-533267016,533267019,TD
-533267020,533267023,BS
-533267024,533267027,HT
-533267028,533267031,BJ
-533267032,533267035,NI
-533267036,533267039,LS
-533267040,533267043,MN
-533267044,533267047,RW
-533267048,533267051,NE
-533267052,533267055,TJ
-533267056,533267059,ZW
-533267060,533267063,MD
-533267064,533267067,MW
-533267068,533267071,KG
-533267072,533267075,GN
-533267076,533267079,BB
-533267080,533267083,ME
-533267084,533267087,MR
-533267088,533267091,SR
-533267092,533267095,SZ
-533267096,533267099,FJ
-533267100,533267103,TG
-533267104,533267107,ER
-533267108,533267111,GY
-533267112,533267115,CF
-533267116,533267119,SL
-533267120,533267123,LS
-533267124,533267127,CV
-533267128,533267131,BI
-533267132,533267135,MV
-533267136,533267139,BZ
-533267140,533267143,BT
-533267144,533267147,DJ
-533267148,533267151,AG
-533267152,533267155,GM
-533267156,533267159,LC
-533267160,533267163,LR
-533267164,533267167,SC
-533267168,533267199,DE
-533267200,533267423,US
-533267424,533267455,DE
-533267456,533267679,CN
-533267680,533267711,DE
-533267712,533267935,JP
-533267936,533268223,DE
-533268224,533268447,FR
-533268448,533268479,DE
-533268480,533268703,GB
-533268704,533268735,DE
-533268736,533268959,BR
-533268960,533268991,DE
-533268992,533269215,IT
-533269216,533269247,DE
-533269248,533269471,CA
-533269472,533269503,DE
-533269504,533269727,IN
-533269728,533269759,DE
-533269760,533269983,ES
-533269984,533270015,DE
-533270016,533270239,AU
-533270240,533270271,DE
-533270272,533270495,KR
-533270496,533270527,DE
-533270528,533270751,NL
-533270752,533270783,DE
-533270784,533271039,DK
-533271040,533271295,EE
-533271296,533271551,FO
-533271552,533271807,GE
-533271808,533272063,FR
-533272064,533272319,DE
-533272320,533272575,GI
-533272576,533272831,GR
-533272832,533273087,GL
-533273088,533273343,GG
-533273344,533273599,VA
-533273600,533273855,HU
-533273856,533274111,IS
-533274112,533274367,IR
-533274368,533274623,IQ
-533274624,533274879,IE
-533274880,533275135,IM
-533275136,533275391,IL
-533275392,533275647,IT
-533275648,533275903,JE
-533275904,533276159,JO
-533276160,533276415,KZ
-533276416,533276671,KW
-533276672,533276927,KG
-533276928,533277183,LV
-533277184,533277439,LB
-533277440,533277695,LI
-533277696,533277951,LT
-533277952,533278207,LU
-533278208,533278463,MT
-533278464,533278719,MC
-533278720,533278975,ME
-533278976,533279231,NL
-533279232,533279487,NO
-533279488,533279743,OM
-533279744,533279999,PS
-533280000,533280255,PL
-533280256,533280511,PT
-533280512,533280767,RO
-533280768,533281023,RU
-533281024,533281279,SM
-533281280,533281535,SA
-533281536,533281791,RS
-533281792,533282047,SK
-533282048,533282303,SI
-533282304,533282559,ES
-533282560,533282815,SE
-533282816,533283071,CH
-533283072,533283327,SY
-533283328,533283583,TJ
-533283584,533283839,TR
-533283840,533284095,TM
-533284096,533284351,UA
-533284352,533284607,AE
-533284608,533284863,GB
-533284864,533285119,UZ
-533285120,533285375,YE
-533285376,533285631,AX
-533285632,533285887,AL
-533285888,533286143,AD
-533286144,533286399,AM
-533286400,533286655,AT
-533286656,533286911,AZ
-533286912,533287167,BH
-533287168,533287423,BY
-533287424,533287679,BE
-533287680,533287935,BA
-533287936,533288191,BG
-533288192,533288447,HR
-533288448,533288703,CY
-533288704,533288959,CZ
-533288960,533289215,DK
-533289216,533289471,EE
-533289472,533289727,FO
-533289728,533289983,GE
-533289984,533290239,FR
-533290240,533290495,DE
-533290496,533290751,GI
-533290752,533291007,GR
-533291008,533291263,GL
-533291264,533291519,GG
-533291520,533291775,VA
-533291776,533292031,HU
-533292032,533292287,IS
-533292288,533292543,IR
-533292544,533292799,IQ
-533292800,533293055,IE
-533293056,533293311,IM
-533293312,533293567,IL
-533293568,533293823,IT
-533293824,533294079,JE
-533294080,533294335,JO
-533294336,533294591,KZ
-533294592,533294847,KW
-533294848,533295103,KG
-533295104,533295359,LV
-533295360,533295615,LB
-533295616,533295871,LI
-533295872,533296127,LT
-533296128,533296383,LU
-533296384,533296639,MT
-533296640,533296895,MC
-533296896,533297151,ME
-533297152,533297407,NL
-533297408,533297663,NO
-533297664,533297919,OM
-533297920,533298175,PT
-533298176,533298431,RO
-533298432,533298687,RU
-533298688,533298943,SM
-533298944,533299199,SA
-533299200,533299455,KW
-533299456,533299711,KY
-533299712,533299967,KZ
-533299968,533300223,LA
-533300224,533300479,LB
-533300480,533300735,LC
-533300736,533300991,LI
-533300992,533301247,LK
-533301248,533301503,LR
-533301504,533301759,LS
-533301760,533302015,LT
-533302016,533302271,LU
-533302272,533302527,LV
-533302528,533302783,LY
-533302784,533303039,MC
-533303040,533303295,MD
-533303296,533303551,ME
-533303552,533303807,MF
-533303808,533304063,MG
-533304064,533304319,MH
-533304320,533304575,MK
-533304576,533304831,ML
-533304832,533305087,MM
-533305088,533305343,MN
-533305344,533305599,MO
-533305600,533305855,MP
-533305856,533306111,MQ
-533306112,533306367,MR
-533306368,533306623,MS
-533306624,533306879,MT
-533306880,533307135,MU
-533307136,533307391,MV
-533307392,533307647,MW
-533307648,533307903,MX
-533307904,533308159,MY
-533308160,533308415,MZ
-533308416,533308671,NA
-533308672,533308927,NC
-533308928,533309183,NE
-533309184,533309439,NF
-533309440,533309695,NG
-533309696,533309951,NI
-533309952,533310207,NL
-533310208,533310463,NO
-533310464,533310719,NP
-533310720,533310975,NR
-533310976,533311231,NU
-533311232,533311487,NZ
-533311488,533311743,OM
-533311744,533311999,PA
-533312000,533312255,PE
-533312256,533312511,PF
-533312512,533312767,PG
-533312768,533313023,PH
-533313024,533313279,PK
-533313280,533313535,PL
-533313536,533313791,PM
-533313792,533314047,PN
-533314048,533314303,PR
-533314304,533314559,PS
-533314560,533314815,PT
-533314816,533315071,PW
-533315072,533315327,PY
-533315328,533315583,QA
-533315584,533315839,RE
-533315840,533316095,RO
-533316096,533316351,RS
-533316352,533316607,RU
-533316608,533316863,RW
-533316864,533317119,SA
-533317120,533317375,SB
-533317376,533317631,SC
-533317632,533317887,SD
-533317888,533318143,SE
-533318144,533318399,SG
-533318400,533318655,SH
-533318656,533318911,SI
-533318912,533319167,SJ
-533319168,533319423,SK
-533319424,533319679,SL
-533319680,533319935,SM
-533319936,533320191,SN
-533320192,533320447,SO
-533320448,533320703,SR
-533320704,533320959,SS
-533320960,533321215,ST
-533321216,533321471,SV
-533321472,533321727,SX
-533321728,533321983,SY
-533321984,533322239,SZ
-533322240,533322495,TC
-533322496,533322751,TD
-533322752,533323007,TF
-533323008,533323263,TG
-533323264,533323519,TH
-533323520,533323775,TJ
-533323776,533324031,TK
-533324032,533324287,TL
-533324288,533324543,TM
-533324544,533324799,TN
-533324800,533325055,TO
-533325056,533325311,TR
-533325312,533325567,TT
-533325568,533325823,TV
-533325824,533326079,TW
-533326080,533326335,TZ
-533326336,533326591,UA
-533326592,533326847,UG
-533326848,533327103,UM
-533327104,533327359,US
-533327360,533327615,UY
-533327616,533327871,UZ
-533327872,533328127,VA
-533328128,533328383,VC
-533328384,533328639,VE
-533328640,533328895,VG
-533328896,533329151,VI
-533329152,533329407,VN
-533329408,533329663,VU
-533329664,533329919,WF
-533329920,533330175,WS
-533330176,533330431,YE
-533330432,533330687,YT
-533330688,533330943,ZA
-533330944,533331199,ZM
-533331200,533331455,ZW
-533331456,533331967,AD
+533266432,533331967,NL
533331968,533397503,UA
533397504,533463039,KW
533463040,533479423,RU
-533479424,533479487,DE
-533479488,533479519,SE
-533479520,533479551,FI
-533479552,533479711,DE
-533479712,533479743,SE
-533479744,533479775,FI
-533479776,533479807,DK
-533479808,533479999,DE
-533480000,533480031,DK
-533480032,533480063,FI
-533480064,533480095,DE
-533480096,533480127,SE
-533480128,533480223,DE
-533480224,533480255,DK
-533480256,533480287,FI
-533480288,533480319,SE
-533480320,533480479,DE
-533480480,533480511,NO
-533480512,533480543,DE
-533480544,533480575,DK
-533480576,533480607,SE
-533480608,533480735,DE
-533480736,533480767,SE
-533480768,533480799,NO
-533480800,533480991,DE
-533480992,533481023,NO
-533481024,533481055,SE
-533481056,533481279,DE
-533481280,533481311,NO
-533481312,533481343,DE
-533481344,533481375,SE
-533481376,533481471,DE
+533479424,533481471,DE
533481472,533483519,NO
533483520,533485567,FR
533485568,533487615,LU
533487616,533491711,RU
533491712,533495807,DE
-533495808,533503999,NL
+533495808,533500159,NL
+533500160,533500415,JP
+533500416,533503999,NL
533504000,533512191,RU
533512192,533528575,ME
533528576,533594111,GB
@@ -8900,48 +3187,18 @@
533817344,533817344,TR
533817345,533819391,CY
533819392,533823487,DE
-533823488,533823551,CD
-533823552,533823552,BE
-533823553,533823612,CD
-533823613,533823616,BE
-533823617,533823644,CD
-533823645,533823648,BE
-533823649,533823660,CD
-533823661,533823664,BE
-533823665,533823676,CD
-533823677,533823680,BE
-533823681,533823692,CD
-533823693,533823696,BE
-533823697,533823708,CD
-533823709,533823712,BE
-533823713,533823724,CD
-533823725,533823743,BE
-533823744,533823999,CD
-533824000,533824255,BE
-533824256,533825535,CD
+533823488,533825535,BE
533825536,533831679,IS
533831680,533835775,DE
533835776,533837823,SE
533837824,533839871,DE
533839872,533856255,IS
533856256,533858303,FR
-533858304,533858751,HU
+533858304,533858751,TR
533858752,533858815,AT
-533858816,533859071,HU
-533859072,533859087,AT
-533859088,533859231,HU
-533859232,533859263,TR
-533859264,533859319,HU
-533859320,533859327,AT
-533859328,533859371,HU
-533859372,533859375,AT
-533859376,533859583,HU
-533859584,533859647,BG
+533858816,533859647,TR
533859648,533859663,AT
-533859664,533859775,BG
-533859776,533859839,SK
-533859840,533860095,TR
-533860096,533860351,SK
+533859664,533860351,TR
533862400,533864447,GB
533864448,533889023,TR
533889024,533891071,GB
@@ -8950,7 +3207,9 @@
533895168,533897215,TR
533897216,533899263,DE
533899264,533901311,RU
-533901312,533905407,IL
+533901312,533904383,IL
+533904384,533904639,FR
+533904640,533905407,IL
533905408,533913599,RU
533913600,533915647,ES
533915648,533919743,GB
@@ -8964,28 +3223,10 @@
533970944,533987327,SE
533987328,534118399,DE
534118400,534151167,KW
-534151168,534154367,DE
-534154368,534154431,CN
-534154432,534156031,DE
-534156032,534156287,CN
-534156288,534157759,DE
-534157760,534157823,US
-534157824,534158079,CN
-534158080,534166527,DE
-534166528,534166783,AU
-534166784,534167039,PL
-534167040,534167295,TR
-534167296,534177791,DE
-534177792,534179839,NL
-534179840,534181887,US
-534181888,534183935,DE
+534151168,534183935,DE
534183936,534249471,RO
534249472,534253567,GB
-534253568,534254591,FR
-534254592,534255103,GB
-534255104,534256639,FR
-534256640,534256895,GB
-534256896,534257663,FR
+534253568,534257663,FR
534257664,534259711,SE
534259712,534261759,CH
534261760,534263807,GB
@@ -8999,13 +3240,7 @@
534296576,534298623,BA
534298624,534306815,HR
534306816,534308863,SE
-534308864,534308867,IE
-534308868,534308887,GB
-534308888,534308895,IE
-534308896,534308907,GB
-534308908,534308911,IE
-534308912,534308919,GB
-534308920,534310911,IE
+534308864,534310911,IE
534310912,534315007,IT
534315008,534347775,HR
534347776,534355967,GB
@@ -9021,8 +3256,40 @@
534380544,534511615,AE
534511616,534512639,BZ
534512640,534512895,NL
-534512896,534513151,US
-534513152,534544383,DE
+534512896,534513151,SE
+534513152,534513215,BS
+534513216,534513279,VG
+534513280,534513407,NL
+534513408,534513663,SE
+534513664,534515455,US
+534515456,534515711,DE
+534515712,534517759,US
+534517760,534518783,NL
+534518784,534519039,DE
+534519040,534519167,NL
+534519168,534519199,KP
+534519200,534519231,VA
+534519232,534519263,AQ
+534519264,534519295,IT
+534519296,534519327,NL
+534519328,534519359,PK
+534519360,534519391,PE
+534519392,534519423,PK
+534519424,534519455,FJ
+534519456,534519487,BR
+534519488,534519519,MX
+534519520,534519551,CN
+534519552,534519807,NL
+534519808,534521855,US
+534521856,534522367,DE
+534522368,534522879,NL
+534522880,534523135,DE
+534523136,534523391,NL
+534523392,534523903,DE
+534523904,534530047,US
+534530048,534541311,DE
+534541312,534543359,US
+534543360,534544383,DE
534544384,534546431,RO
534546432,534548479,DE
534548480,534550527,PL
@@ -9040,7 +3307,8 @@
534663168,534675455,ES
534675456,534691839,GB
534691840,534693887,FR
-534693888,534700031,GB
+534693888,534695935,NL
+534695936,534700031,GB
534700032,534708223,JO
534708224,534740991,TR
534740992,534749183,BA
@@ -9054,59 +3322,50 @@
534773760,536870911,DE
536870912,539623423,US
539623424,539624577,NL
-539624578,539624578,EU
+539624578,539624578,US
539624579,539627519,NL
-539627520,539656191,US
+539627520,539629743,US
+539629744,539629751,GB
+539629752,539629975,US
+539629976,539629983,DE
+539629984,539630079,GB
+539630080,539630975,US
+539630976,539630983,PT
+539630984,539630991,FI
+539630992,539630999,NO
+539631000,539631007,CZ
+539631008,539631015,DK
+539631016,539631023,FR
+539631024,539631031,ES
+539631032,539631039,IE
+539631040,539631047,IT
+539631048,539656191,US
539656192,539660287,IN
-539660288,540680895,US
-540680896,540680959,BE
-540680960,540683775,US
-540683776,540683783,DE
-540683784,540685567,US
-540685568,540685631,FR
-540685632,540686591,US
-540686592,540686599,GB
-540686600,540686847,US
-540686848,540686863,GB
-540686864,540687103,US
-540687104,540687111,GB
-540687112,540687231,US
-540687232,540687359,CA
-540687360,540694527,US
-540694528,540694591,IT
-540694592,540705023,US
-540705024,540705031,IE
-540705032,540705535,US
-540705536,540705599,IE
-540705600,540711935,US
-540711936,540712447,NL
-540712448,540737535,US
+539660288,539668819,US
+539668820,539668823,NZ
+539668824,539668891,US
+539668892,539668892,AU
+539668893,539671103,US
+539671104,539671135,JP
+539671136,540737535,US
540737536,540737757,BZ
540737758,540737758,BR
-540737759,540737791,BZ
-540737792,540737919,BR
-540737920,540750175,BZ
-540750176,540750207,MX
-540750208,540750239,BZ
-540750240,540750255,MX
-540750256,540803071,BZ
+540737759,540803071,BZ
540803072,540811263,US
540811264,540814335,SG
-540814336,540814591,AP
+540814336,540814591,US
540814592,540815359,SG
-540815360,540819455,US
-540819456,540827647,CA
-540827648,540829695,US
-540829696,540831743,CA
-540831744,543690751,US
-543690752,543691007,AR
-543691008,543691263,US
-543691264,543691519,BR
-543691520,543752191,US
+540815360,540820959,US
+540820960,540820975,CA
+540820976,540826383,US
+540826384,540826399,CA
+540826400,543752191,US
543752192,543752447,BM
543752448,543755007,BR
543755008,543755263,CW
-543755264,543760895,US
+543755264,543760383,US
+543760384,543760639,CO
+543760640,543760895,US
543760896,543761151,VE
543761152,543761407,US
543761408,543761663,CL
@@ -9151,16 +3410,14 @@
543843584,543843839,DK
543843840,543844095,AT
543844096,543844351,US
-543844352,543844863,CH
-543844864,543845119,US
+543844352,543845119,CH
543845120,543846143,DE
543846144,543846655,HR
543846656,543846911,BG
543846912,543847167,SI
543847168,543847423,HU
543847424,543848447,US
-543848448,543850495,ES
-543850496,543850751,US
+543848448,543850751,ES
543850752,543851775,IE
543851776,543852031,DK
543852032,543852543,US
@@ -9184,26 +3441,31 @@
543864064,543864575,FI
543864576,543864831,US
543864832,543865343,PK
-543865344,543865855,US
+543865344,543865599,CZ
+543865600,543865855,US
543865856,543866879,GB
543866880,543870975,NL
543870976,543872511,ES
-543872512,543874047,US
+543872512,543872767,BE
+543872768,543873023,NL
+543873024,543874047,US
543874048,543875583,FR
543875584,543877119,DE
543877120,543878655,BE
543878656,543880191,IT
543880192,543881727,NL
543881728,543883263,GB
-543883264,548608767,US
-548608768,548609023,PR
-548609024,548616191,US
-548616192,548618239,PR
-548618240,586975999,US
-586976000,586976255,AP
-586976256,587006719,US
+543883264,544436771,US
+544436772,544436775,CA
+544436776,586972927,US
+586972928,586973183,CA
+586973184,586977023,US
+586977024,586977279,AU
+586977280,587006719,US
587006720,587006975,GB
-587006976,603979775,US
+587006976,587039487,US
+587039488,587039743,NO
+587039744,603979775,US
603979776,603980799,CN
603980800,603981823,NP
603981824,604110847,CN
@@ -9218,7 +3480,8 @@
606420992,606437375,ID
606437376,606470143,KH
606470144,606601215,KR
-606601216,607387647,CN
+606601216,607256575,CN
+607322112,607387647,CN
607387648,607649791,JP
607649792,608174079,CN
608174080,610271231,ID
@@ -9228,9 +3491,7 @@
620232704,620494847,CN
620494848,620625919,NP
620625920,620691455,CN
-620756992,620758015,IE
-620758016,620758271,NL
-620758272,620759039,IE
+620756992,620759039,IE
620759040,620763135,NL
620763136,620765183,EE
620765184,620773375,CH
@@ -9242,21 +3503,17 @@
620785664,620785919,DE
620785920,620786687,US
620786688,620787711,DE
-620787712,620788479,RU
-620788480,620788991,RU
-620788992,620789759,RU
+620787712,620789503,RU
+620789504,620789631,KZ
+620789632,620789759,RU
620789760,620810239,HR
620810240,620822527,LT
620822528,620845055,RU
620845056,620845191,GB
-620845192,620845201,DE
-620845202,620845215,NL
-620845216,620845439,GB
-620845440,620845503,SI
-620845504,620845567,GB
-620845568,620845823,LU
-620845824,620846079,GE
-620846080,620849151,GB
+620845192,620845199,DE
+620845200,620845503,GB
+620845504,620845567,SI
+620845568,620849151,GB
620849152,620851199,NL
620851200,620855295,DE
620855296,620859391,RU
@@ -9283,14 +3540,15 @@
621330432,621346815,PL
621346816,621355007,RU
621355008,621357055,UA
-621357056,621359615,RU
-621359616,621360127,UA
-621360128,621381631,RU
+621357056,621361151,RU
+621361152,621363199,GB
+621363200,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
@@ -9299,21 +3557,18 @@
621404160,621408255,IT
621408256,621410303,RU
621410304,621412351,IR
-621412352,621430783,DE
-621430784,621436927,CZ
-621436928,621442303,DE
-621442304,621442367,RS
-621442368,621445119,DE
+621412352,621428735,NL
+621428736,621430783,DE
+621430784,621432831,ES
+621432832,621436927,IT
+621436928,621445119,DE
621445120,621805567,ES
621805568,621813759,NL
621813760,621821951,SA
621821952,621823999,DE
621824000,621826047,FR
621826048,621828095,RU
-621828096,621830143,GB
-621830144,621830263,FI
-621830264,621830271,US
-621830272,621838335,FI
+621830144,621838335,FI
621838336,621871103,SA
621871104,621903871,BY
621903872,621912063,IQ
@@ -9325,14 +3580,19 @@
621928448,621932543,DE
621932544,621934591,UA
621934592,621936639,SE
-621936640,621939455,RU
-621939456,621940479,GE
+621936640,621938687,RU
+621938688,621939458,GE
+621939459,621939459,RU
+621939460,621939711,GE
+621939712,621940479,RU
621940480,621942527,GB
-621942528,621960703,RU
-621960704,621960959,LV
-621960960,621969407,RU
-621971456,621971967,IM
-621971968,621973503,GB
+621942528,621969407,RU
+621971456,621971711,IM
+621971712,621971967,GB
+621971968,621972223,IM
+621972224,621972479,GB
+621972480,621972991,IM
+621972992,621973503,GB
621973504,621975551,IE
621975552,621977599,RU
621977600,621981695,FR
@@ -9340,44 +3600,12 @@
621983744,621985791,RS
621985792,621987839,US
621987840,621989887,DK
-621989888,621993727,SE
-621993728,621993983,DK
+621989888,621992959,SE
+621992960,621993983,DK
621993984,621998079,SI
621998080,622000127,ES
622000128,622004223,RU
-622004224,622004287,BE
-622004288,622004351,DK
-622004352,622004415,FI
-622004416,622004479,FR
-622004480,622004543,DE
-622004544,622004607,GG
-622004608,622004671,IS
-622004672,622004735,IE
-622004736,622004991,BE
-622004992,622005055,IM
-622005056,622005119,IT
-622005120,622005183,JE
-622005184,622005247,LU
-622005248,622005311,NL
-622005312,622005375,NO
-622005376,622005439,PL
-622005440,622005503,PT
-622005504,622005567,ES
-622005568,622005631,SE
-622005632,622005695,CH
-622005696,622005759,GB
-622005760,622005823,AT
-622005824,622005887,HR
-622005888,622005951,CZ
-622005952,622005959,FO
-622005960,622005967,GL
-622005968,622005975,EE
-622005976,622005983,LI
-622005984,622005991,MC
-622005992,622005999,SM
-622006000,622006007,AX
-622006008,622006015,AD
-622006016,622006271,BE
+622004224,622006271,BE
622006272,622008319,FI
622008320,622010367,GB
622010368,622018559,RU
@@ -9391,14 +3619,14 @@
622067712,622329855,RU
622329856,622395391,DE
622395392,622405631,UA
-622405632,622407679,ES
+622405632,622406655,ES
+622406656,622407679,GB
622407680,622409727,DE
622409728,622411775,FR
622411776,622413823,DE
622413824,622415871,FR
622415872,622417919,MK
-622417920,622419199,GB
-622419200,622419967,IM
+622417920,622419967,IM
622419968,622428159,UA
622428160,622460927,RO
622460928,622477311,AZ
@@ -9408,7 +3636,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
@@ -9418,8 +3646,8 @@
622510080,622512127,PL
622512128,622514175,DE
622514176,622518271,NO
-622518272,622518527,GB
-622518528,622520319,NL
+622518272,622519295,NL
+622519296,622520319,FR
622520320,622522367,RU
622522368,622524415,FR
622524416,622526463,ES
@@ -9461,12 +3689,29 @@
623052800,623054847,RS
623054848,623058943,FI
623058944,623067135,RO
-623067136,623069183,AL
+623067136,623069183,RS
623069184,623071231,GB
623071232,623073279,FI
623073280,623075327,GB
623075328,623077375,DK
-623077376,623083519,CH
+623077376,623077783,CH
+623077784,623077791,NL
+623077792,623077807,CH
+623077808,623077815,BE
+623077816,623077819,SE
+623077820,623077827,CH
+623077828,623077831,US
+623077832,623077833,PT
+623077834,623077835,ES
+623077836,623077837,CR
+623077838,623077839,KN
+623077840,623077843,BR
+623077844,623077849,HK
+623077850,623077851,ZA
+623077852,623077855,SG
+623077856,623077857,WS
+623077858,623077859,NZ
+623077860,623083519,CH
623083520,623116287,RO
623116288,623378431,KW
623378432,623509503,OM
@@ -9482,18 +3727,9 @@
623673344,623689727,NO
623689728,623706111,RU
623706112,623771647,BY
-623771648,623771903,GB
-623771904,623772159,US
-623772160,623772543,GB
-623772544,623772551,FR
-623772552,623774207,GB
-623774208,623774719,NL
-623774720,623775743,GB
+623771648,623775743,GB
623775744,623777791,IE
-623777792,623778175,GB
-623778176,623778239,DE
-623778240,623778303,NL
-623778304,623779839,GB
+623777792,623779839,GB
623779840,623783935,IL
623783936,623788031,RU
623788032,623790079,HU
@@ -9502,17 +3738,20 @@
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,623801087,SE
+623801088,623801599,US
+623801600,623801855,SE
+623801856,623802367,NL
+623802368,623802879,SE
+623802880,623804415,NL
623804416,623806463,RU
623806464,623808511,NL
623808512,623810559,RU
623810560,623812607,ES
623812608,623820799,SE
-623820800,623822847,NL
+623820800,623821823,NL
+623821824,623822335,US
+623822336,623822847,NL
623822848,623824895,GB
623824896,623826943,CZ
623826944,623837183,UA
@@ -9529,9 +3768,7 @@
624005120,624007167,IR
624007168,624009215,DE
624009216,624025599,RU
-624025600,624026622,NL
-624026623,624026623,HN
-624026624,624027647,NL
+624025600,624027647,NL
624027648,624029695,FR
624029696,624033791,SE
624033792,624164863,DE
@@ -9544,3706 +3781,187 @@
624566272,624568319,RU
624568320,624570367,BE
624570368,624574463,DE
-624574464,624574479,US
-624574480,624574487,IT
-624574488,624574495,US
-624574496,624574503,TR
-624574504,624574511,BR
-624574512,624574527,MA
-624574528,624574535,DK
-624574536,624574551,US
-624574552,624574559,GB
-624574560,624574567,US
-624574568,624574575,AU
-624574576,624574607,US
-624574608,624574615,HK
-624574616,624574623,NL
-624574624,624574655,TR
-624574656,624574663,US
-624574664,624574671,KW
-624574672,624574687,US
-624574688,624574703,NL
-624574704,624574711,US
-624574712,624574715,TR
+624574464,624574715,NL
624574716,624574719,US
-624574720,624574720,NL
-624574721,624574721,AU
-624574722,624574723,US
-624574724,624574727,TR
-624574728,624574735,US
-624574736,624574743,GB
-624574744,624574751,NL
-624574752,624574823,US
-624574824,624574831,DK
-624574832,624574855,US
-624574856,624574863,GB
-624574864,624574895,US
-624574896,624574899,IT
-624574900,624574903,HK
-624574904,624574911,US
-624574912,624574919,CA
-624574920,624574927,US
-624574928,624574935,IL
-624574936,624574943,GR
-624574944,624574959,US
-624574960,624574967,RO
-624574968,624574991,US
-624574992,624574999,ES
-624575000,624575007,US
-624575008,624575015,JO
-624575016,624575039,US
-624575040,624575047,SG
-624575048,624575055,GB
-624575056,624575063,CY
+624574720,624575063,NL
624575064,624575071,US
-624575072,624575079,FR
-624575080,624575095,US
-624575096,624575103,ES
-624575104,624575111,DK
-624575112,624575119,IT
-624575120,624575127,SA
-624575128,624575135,RO
-624575136,624575151,US
-624575152,624575163,MA
-624575164,624575167,TR
-624575168,624575175,RU
-624575176,624575183,ES
-624575184,624575191,BE
-624575192,624575199,US
-624575200,624575207,BE
-624575208,624575215,IL
-624575216,624575223,US
-624575224,624575231,HK
-624575232,624575239,EG
-624575240,624575247,HK
-624575248,624575263,US
-624575264,624575279,NL
-624575280,624575287,US
-624575288,624575295,NL
-624575296,624575303,CN
-624575304,624575311,NL
-624575312,624575335,US
-624575336,624575343,SA
-624575344,624575347,GB
-624575348,624575351,EG
-624575352,624575359,US
-624575360,624575367,TR
-624575368,624575375,US
-624575376,624575383,HK
-624575384,624575387,TR
-624575388,624575391,US
-624575392,624575399,GB
+624575072,624575135,NL
+624575136,624575143,US
+624575144,624575399,NL
624575400,624575403,US
-624575404,624575407,IT
-624575408,624575415,NL
-624575416,624575423,US
-624575424,624575427,IT
-624575428,624575431,IL
-624575432,624575439,NL
-624575440,624575455,NZ
-624575456,624575463,GB
-624575464,624575471,NZ
-624575472,624575479,AT
-624575480,624575487,AE
-624575488,624575495,TR
-624575496,624575503,IL
-624575504,624575551,US
-624575552,624575567,GB
-624575568,624575575,AE
-624575576,624575583,GB
-624575584,624575599,TR
-624575600,624575607,NL
-624575608,624575615,RU
-624575616,624575623,US
-624575624,624575627,ES
-624575628,624575631,EG
-624575632,624575771,NL
-624575772,624575775,US
-624575776,624575791,NL
-624575792,624575799,TR
-624575800,624575807,BD
-624575808,624575823,US
-624575824,624575831,IL
-624575832,624575839,US
-624575840,624575871,GB
-624575872,624575879,LB
-624575880,624575895,US
-624575896,624575903,DK
-624575904,624575911,NL
-624575912,624575919,CY
-624575920,624575927,US
-624575928,624575935,ES
-624575936,624575943,US
-624575944,624575951,NL
-624575952,624575959,NO
-624575960,624575967,US
-624575968,624575975,DK
-624575976,624575983,US
-624575984,624575991,GB
-624575992,624575999,IT
-624576000,624576011,PL
-624576012,624576023,US
-624576024,624576031,TR
-624576032,624576039,CZ
-624576040,624576047,TR
-624576048,624576055,NL
-624576056,624576063,HK
-624576064,624576071,BD
-624576072,624576079,NL
-624576080,624576095,US
-624576096,624576103,CA
-624576104,624576111,RU
-624576112,624576119,BR
-624576120,624576127,GB
+624575404,624575679,NL
+624575680,624575743,US
+624575744,624576127,NL
624576128,624576131,US
-624576132,624576135,SA
-624576136,624576143,RU
-624576144,624576151,NL
-624576152,624576159,US
-624576160,624576191,CN
-624576192,624576223,US
-624576224,624576231,EG
-624576232,624576235,CN
-624576236,624576239,AE
-624576240,624576255,US
-624576256,624576271,NL
-624576272,624576279,IQ
-624576280,624576295,US
-624576296,624576303,IE
-624576304,624576319,US
-624576320,624576327,IT
-624576328,624576335,NL
-624576336,624576343,TR
-624576344,624576359,US
-624576360,624576367,SE
-624576368,624576383,US
-624576384,624576391,NL
-624576392,624576399,UA
-624576400,624576407,GB
-624576408,624576411,AE
-624576412,624576415,TR
-624576416,624576423,GB
-624576424,624576431,DK
-624576432,624576439,ES
-624576440,624576443,US
-624576444,624576447,NL
-624576448,624576463,IL
-624576464,624576479,US
-624576480,624576487,CY
-624576488,624576495,GB
-624576496,624576511,US
-624576512,624576543,DK
-624576544,624576607,US
-624576608,624576639,TR
-624576640,624576703,BG
-624576704,624576711,PT
-624576712,624576719,US
-624576720,624576727,AU
-624576728,624576751,NL
-624576752,624576759,IT
-624576760,624576767,NL
-624576768,624576783,CA
-624576784,624576823,US
-624576824,624576831,SZ
-624576832,624576863,US
-624576864,624576871,IL
-624576872,624576879,US
-624576880,624576887,TR
+624576132,624576471,NL
+624576472,624576479,US
+624576480,624576887,NL
624576888,624576895,GB
-624576896,624576911,HR
-624576912,624576959,NL
-624576960,624576991,TR
-624576992,624576999,US
-624577000,624577007,IL
-624577008,624577015,NL
-624577016,624577023,AU
-624577024,624577055,SA
-624577056,624577071,VG
-624577072,624577119,US
-624577120,624577127,TR
-624577128,624577135,DE
-624577136,624577143,CN
-624577144,624577151,US
+624576896,624577135,NL
+624577136,624577139,GB
+624577140,624577151,NL
624577152,624577215,GB
-624577216,624577247,US
-624577248,624577279,LT
-624577280,624577287,US
-624577288,624577303,NL
-624577304,624577305,TR
-624577306,624577307,AU
+624577216,624577307,NL
624577308,624577311,US
-624577312,624577319,IL
-624577320,624577327,NL
-624577328,624577335,CN
-624577336,624577351,NL
-624577352,624577359,CA
-624577360,624577367,NL
-624577368,624577375,MU
-624577376,624577439,TR
-624577440,624577447,NL
-624577448,624577455,US
-624577456,624577463,PK
-624577464,624577467,DE
-624577468,624577471,TR
-624577472,624577483,CA
+624577312,624577483,NL
624577484,624577487,US
-624577488,624577495,NL
-624577496,624577503,GB
-624577504,624577535,US
-624577536,624577543,NL
-624577544,624577547,US
-624577548,624577551,AE
-624577552,624577559,US
-624577560,624577567,AE
-624577568,624577575,NL
-624577576,624577583,GB
-624577584,624577591,NL
-624577592,624577599,TR
-624577600,624577607,PL
-624577608,624577615,NL
-624577616,624577623,AE
-624577624,624577631,ES
-624577632,624577639,BA
-624577640,624577647,NL
-624577648,624577655,GB
-624577656,624577663,NL
-624577664,624577695,NZ
-624577696,624577703,BE
-624577704,624577711,CA
-624577712,624577727,NL
-624577728,624577791,US
-624577792,624577799,ZA
-624577800,624577807,US
-624577808,624577823,GB
-624577824,624577831,NL
-624577832,624577839,BD
-624577840,624577855,NL
-624577856,624577863,GB
-624577864,624577871,CN
-624577872,624577887,TR
-624577888,624577919,US
-624577920,624577935,NL
-624577936,624577943,ZA
-624577944,624577951,NL
-624577952,624577959,US
-624577960,624577967,TR
-624577968,624577983,NL
-624577984,624578015,RU
-624578016,624578023,TR
-624578024,624578031,US
-624578032,624578047,NL
-624578048,624578079,TR
-624578080,624578111,EG
-624578112,624578143,US
-624578144,624578175,NZ
-624578176,624578207,CA
-624578208,624578239,TR
-624578240,624578247,NL
-624578248,624578255,US
-624578256,624578271,NL
-624578272,624578287,TR
-624578288,624578407,NL
-624578408,624578415,GB
-624578416,624578423,SA
-624578424,624578431,US
-624578432,624578479,NL
-624578480,624578495,US
-624578496,624578511,NL
-624578512,624578527,US
-624578528,624578575,NL
-624578576,624578583,BA
-624578584,624578591,TR
-624578592,624578623,NL
-624578624,624578655,US
-624578656,624578735,NL
-624578736,624578743,SK
-624578744,624578747,TR
-624578748,624578751,SK
-624578752,624578759,GB
-624578760,624578767,NL
-624578768,624578775,US
-624578776,624578779,GB
-624578780,624578783,US
-624578784,624578791,AE
-624578792,624578799,NL
-624578800,624578815,US
-624578816,624578823,NL
-624578824,624578831,TR
-624578832,624578847,US
-624578848,624578855,NL
-624578856,624578863,MY
-624578864,624578871,NL
-624578872,624578879,SE
-624578880,624578895,NL
-624578896,624578911,JO
-624578912,624578919,NL
-624578920,624578927,US
-624578928,624578943,NL
-624578944,624578955,US
-624578956,624578959,SA
-624578960,624578983,NL
-624578984,624578991,EG
-624578992,624578999,AT
-624579000,624579007,NL
-624579008,624579015,TR
-624579016,624579055,NL
-624579056,624579063,US
-624579064,624579071,GB
-624579072,624579075,AE
+624577488,624578719,NL
+624578720,624578723,GB
+624578724,624578887,NL
+624578888,624578895,US
+624578896,624578951,NL
+624578952,624578955,US
+624578956,624579075,NL
624579076,624579079,US
-624579080,624579087,MY
-624579088,624579095,NL
-624579096,624579103,US
-624579104,624579111,NL
-624579112,624579119,RO
-624579120,624579127,NL
-624579128,624579131,SE
-624579132,624579135,LB
-624579136,624579143,NL
-624579144,624579167,US
-624579168,624579175,AE
-624579176,624579183,NL
-624579184,624579231,US
-624579232,624579239,NL
-624579240,624579243,BA
-624579244,624579247,HR
-624579248,624579255,CA
-624579256,624579263,NL
-624579264,624579295,US
-624579296,624579303,GB
-624579304,624579319,NL
-624579320,624579327,SZ
-624579328,624579391,US
-624579392,624579423,TR
-624579424,624579471,NL
-624579472,624579479,BD
-624579480,624579495,NL
+624579080,624579423,NL
+624579424,624579455,US
+624579456,624579495,NL
624579496,624579499,US
-624579500,624579503,GR
-624579504,624579519,TR
-624579520,624579527,IT
+624579500,624579527,NL
624579528,624579531,US
-624579532,624579535,PT
-624579536,624579567,NL
-624579568,624579615,US
-624579616,624579619,SM
-624579620,624579621,IN
-624579622,624579622,CN
-624579623,624579623,TR
-624579624,624579631,US
-624579632,624579632,JO
-624579633,624579633,AU
-624579634,624579634,GR
-624579635,624579637,TR
-624579638,624579638,GB
-624579639,624579639,BS
-624579640,624579647,BA
-624579648,624579663,GB
-624579664,624579667,US
-624579668,624579679,NL
-624579680,624579695,US
-624579696,624579703,MX
-624579704,624579705,NL
-624579706,624579707,AR
-624579708,624579719,NL
-624579720,624579727,PH
-624579728,624579751,US
-624579752,624579759,AU
-624579760,624579775,NL
-624579776,624579783,EE
-624579784,624579791,NL
-624579792,624579807,GB
-624579808,624579815,US
-624579816,624579823,BY
-624579824,624579831,CN
-624579832,624579832,NL
-624579833,624579833,GB
-624579834,624579835,NL
-624579836,624579837,CY
-624579838,624579838,TR
-624579839,624579839,NL
-624579840,624579847,GT
-624579848,624579849,TR
-624579850,624579851,AU
-624579852,624579855,LU
-624579856,624579863,NL
-624579864,624579867,EG
-624579868,624579869,NL
-624579870,624579871,VG
-624579872,624579875,TR
-624579876,624579879,IN
-624579880,624579887,US
-624579888,624579889,NL
-624579890,624579891,SA
-624579892,624579895,US
-624579896,624579903,NL
-624579904,624579939,US
-624579940,624579943,NL
-624579944,624579951,BD
-624579952,624579955,PT
-624579956,624579959,GB
-624579960,624579967,NL
-624579968,624579971,US
-624579972,624579972,TR
-624579973,624579973,ES
-624579974,624579975,SA
-624579976,624579983,US
-624579984,624579985,TR
-624579986,624579987,HR
-624579988,624579988,IL
-624579989,624579989,US
-624579990,624579990,GR
-624579991,624579991,PT
-624579992,624579999,NL
-624580000,624580007,LB
-624580008,624580015,US
-624580016,624580023,GT
-624580024,624580031,US
-624580032,624580035,NL
-624580036,624580047,US
-624580048,624580049,SA
-624580050,624580050,TR
-624580051,624580051,NL
-624580052,624580055,AU
-624580056,624580063,US
-624580064,624580067,SA
-624580068,624580071,US
-624580072,624580087,GT
-624580088,624580092,US
-624580093,624580093,IL
-624580094,624580094,TR
-624580095,624580095,NL
-624580096,624580127,CA
-624580128,624580131,ES
-624580132,624580132,TR
+624579532,624579623,NL
+624579624,624579627,US
+624579628,624580132,NL
624580133,624580133,GB
-624580134,624580135,BR
-624580136,624580143,US
-624580144,624580151,SE
-624580152,624580175,NL
-624580176,624580195,US
-624580196,624580199,AE
-624580200,624580207,SA
-624580208,624580211,IN
-624580212,624580213,TR
-624580214,624580223,NL
-624580224,624580295,US
-624580296,624580303,NL
-624580304,624580311,RO
-624580312,624580319,US
-624580320,624580327,DE
-624580328,624580335,NL
-624580336,624580343,DE
-624580344,624580351,BG
-624580352,624580415,US
-624580416,624580419,AU
-624580420,624580423,IN
-624580424,624580439,NL
-624580440,624580447,IL
-624580448,624580455,CO
-624580456,624580463,NL
-624580464,624580471,US
-624580472,624580479,HK
-624580480,624580487,CN
-624580488,624580495,EE
-624580496,624580503,US
-624580504,624580511,NL
-624580512,624580519,HR
-624580520,624580527,BE
-624580528,624580535,US
-624580536,624580543,SA
-624580544,624580575,US
-624580576,624580583,NL
-624580584,624580591,IT
-624580592,624580599,NL
-624580600,624580607,AU
-624580608,624580911,US
-624580912,624580919,ES
-624580920,624580951,US
-624580952,624580955,GB
-624580956,624580959,NL
-624580960,624580967,CZ
-624580968,624580975,NL
-624580976,624580983,SE
-624580984,624580991,BR
-624580992,624580995,RO
-624580996,624580999,SE
-624581000,624581003,CZ
-624581004,624581007,US
-624581008,624581015,IN
-624581016,624581023,GB
-624581024,624581031,BE
-624581032,624581039,US
-624581040,624581047,GB
-624581048,624581055,US
-624581056,624581063,NL
-624581064,624581071,AE
-624581072,624581087,NL
-624581088,624581103,AE
-624581104,624581127,US
-624581128,624581135,RO
-624581136,624581151,NL
-624581152,624581183,GB
-624581184,624581207,NL
-624581208,624581215,TR
-624581216,624581279,US
-624581280,624581295,GB
-624581296,624581303,SZ
-624581304,624581311,NL
-624581312,624581319,US
-624581320,624581327,NG
-624581328,624581335,SZ
-624581336,624581339,GB
-624581340,624581343,IN
-624581344,624581367,NL
-624581368,624581375,ES
-624581376,624581415,US
-624581416,624581423,BR
-624581424,624581439,NL
-624581440,624581443,GB
-624581444,624581447,CN
-624581448,624581455,NL
-624581456,624581463,US
-624581464,624581471,CN
-624581472,624581479,PL
-624581480,624581487,US
-624581488,624581495,ES
-624581496,624581503,US
-624581504,624581511,IN
-624581512,624581515,TR
-624581516,624581519,NL
-624581520,624581543,US
-624581544,624581567,NL
-624581568,624581599,RO
-624581600,624581631,NL
-624581632,624581663,US
-624581664,624581671,NL
-624581672,624581703,US
-624581704,624581711,ES
-624581712,624581735,NL
-624581736,624581743,US
-624581744,624581751,NL
-624581752,624581759,US
-624581760,624581887,NL
-624581888,624581895,US
-624581896,624581903,NL
-624581904,624581911,US
-624581912,624581919,MX
-624581920,624581927,US
-624581928,624581943,CN
-624581944,624581951,IN
-624581952,624581991,US
-624581992,624582007,ES
-624582008,624582015,EG
-624582016,624582207,NL
-624582208,624582215,BA
-624582216,624582223,US
-624582224,624582235,NL
-624582236,624582239,US
-624582240,624582243,AE
-624582244,624582245,NL
-624582246,624582246,US
-624582247,624582247,SA
-624582248,624582255,GB
-624582256,624582263,US
-624582264,624582271,CN
-624582272,624582272,US
-624582273,624582273,CN
-624582274,624582275,UA
-624582276,624582279,US
-624582280,624582287,GB
-624582288,624582295,NL
-624582296,624582303,CA
-624582304,624582311,US
-624582312,624582319,BE
-624582320,624582327,US
-624582328,624582335,KW
-624582336,624582343,CN
-624582344,624582351,EG
-624582352,624582359,KW
-624582360,624582367,AF
-624582368,624582375,AR
-624582376,624582383,GB
-624582384,624582391,AF
-624582392,624582399,HR
-624582400,624582463,US
-624582464,624582495,AF
-624582496,624582503,SA
-624582504,624582511,ES
-624582512,624582527,US
-624582528,624582543,NL
-624582544,624582559,TR
-624582560,624582575,NL
-624582576,624582583,EG
-624582584,624582607,DK
-624582608,624582615,BR
-624582616,624582623,PA
-624582624,624582639,NL
-624582640,624582647,CN
-624582648,624582651,TR
-624582652,624582759,US
-624582760,624582767,JO
-624582768,624582775,US
-624582776,624582783,NO
-624582784,624582791,NL
-624582792,624582799,DK
-624582800,624582807,US
-624582808,624582815,LV
-624582816,624582819,BR
-624582820,624582823,US
-624582824,624582847,DK
-624582848,624582863,US
-624582864,624582911,DK
-624582912,624582919,SE
-624582920,624582927,IL
-624582928,624582935,SA
-624582936,624582943,TR
-624582944,624582951,LV
-624582952,624582959,IL
-624582960,624582975,US
-624582976,624582983,TW
-624582984,624582991,JO
-624582992,624582999,GB
-624583000,624583007,US
-624583008,624583015,GR
-624583016,624583031,NZ
-624583032,624583039,SA
-624583040,624583071,SG
-624583072,624583079,BR
-624583080,624583087,TR
-624583088,624583103,GB
-624583104,624583111,NG
-624583112,624583115,US
-624583116,624583119,SE
-624583120,624583127,GB
-624583128,624583135,IT
-624583136,624583143,US
-624583144,624583147,NG
-624583148,624583151,CN
-624583152,624583159,US
-624583160,624583167,IN
-624583168,624583175,US
-624583176,624583183,RO
-624583184,624583423,US
-624583424,624583431,DE
-624583432,624583435,US
-624583436,624583439,AE
-624583440,624583447,US
-624583448,624583455,AE
-624583456,624583463,US
-624583464,624583471,GB
-624583472,624583479,HU
-624583480,624583487,TR
-624583488,624583495,PL
-624583496,624583503,US
-624583504,624583511,AE
-624583512,624583519,ES
-624583520,624583527,NL
-624583528,624583535,LB
-624583536,624583551,GB
-624583552,624583567,NL
-624583568,624583575,US
-624583576,624583583,DE
-624583584,624583591,BE
-624583592,624583599,CA
-624583600,624583603,DE
-624583604,624583607,TR
-624583608,624583611,DE
-624583612,624583679,US
-624583680,624583703,NL
-624583704,624583711,US
-624583712,624583719,SA
-624583720,624583727,UG
-624583728,624583735,US
-624583736,624583743,SA
-624583744,624583751,AE
-624583752,624583759,ES
-624583760,624583767,NL
-624583768,624583771,TR
-624583772,624583775,US
-624583776,624583783,PT
-624583784,624583791,NL
-624583792,624583795,TR
-624583796,624583799,BM
-624583800,624583807,CN
-624583808,624583815,NL
-624583816,624583823,US
-624583824,624583831,MA
-624583832,624583839,PK
-624583840,624583855,NL
-624583856,624583863,US
-624583864,624583871,DK
-624583872,624583903,IN
-624583904,624583911,BR
-624583912,624583919,ES
-624583920,624583927,DK
-624583928,624583935,GR
-624583936,624583951,US
-624583952,624583959,ES
-624583960,624583967,US
-624583968,624583975,NL
-624583976,624584015,US
-624584016,624584023,NL
-624584024,624584059,US
-624584060,624584063,IN
-624584064,624584071,DK
-624584072,624584079,IT
-624584080,624584087,SA
-624584088,624584095,RO
-624584096,624584111,US
-624584112,624584123,MA
-624584124,624584127,TR
-624584128,624584135,RU
-624584136,624584143,ES
-624584144,624584151,US
-624584152,624584155,EG
-624584156,624584159,TR
-624584160,624584167,IN
-624584168,624584175,IL
-624584176,624584191,US
-624584192,624584192,NL
-624584193,624584193,AU
-624584194,624584195,US
-624584196,624584199,TR
-624584200,624584207,US
-624584208,624584215,GB
-624584216,624584223,BR
-624584224,624584295,US
-624584296,624584303,DK
-624584304,624584327,US
-624584328,624584335,GB
-624584336,624584367,US
-624584368,624584371,IT
-624584372,624584375,HK
-624584376,624584383,US
-624584384,624584391,CA
-624584392,624584399,US
-624584400,624584407,IL
-624584408,624584431,DK
-624584432,624584439,RO
-624584440,624584455,US
-624584456,624584463,ES
-624584464,624584471,EG
-624584472,624584487,US
-624584488,624584495,SA
-624584496,624584503,CA
-624584504,624584511,GB
-624584512,624584543,US
-624584544,624584575,CY
-624584576,624584671,US
-624584672,624584679,DE
-624584680,624584683,SE
-624584684,624584687,US
-624584688,624584695,NL
-624584696,624584699,GB
-624584700,624584719,US
-624584720,624584731,NL
-624584732,624584751,US
-624584752,624584759,TR
-624584760,624584767,NL
-624584768,624584783,US
-624584784,624584791,IL
-624584792,624584799,US
-624584800,624584831,GB
-624584832,624584839,LB
-624584840,624584843,TR
-624584844,624584855,US
-624584856,624584863,DK
-624584864,624584871,US
-624584872,624584879,CY
-624584880,624584887,US
-624584888,624584895,ES
-624584896,624584903,US
-624584904,624584911,GB
-624584912,624584919,NO
-624584920,624584927,US
-624584928,624584935,NL
-624584936,624584943,US
-624584944,624584951,GB
-624584952,624584959,IT
-624584960,624584991,US
-624584992,624584999,GB
-624585000,624585007,US
-624585008,624585023,TR
-624585024,624585039,NL
-624585040,624585047,CH
-624585048,624585055,DK
-624585056,624585071,EG
-624585072,624585119,DK
-624585120,624585135,US
-624585136,624585143,DK
-624585144,624585151,US
-624585152,624585159,DK
-624585160,624585183,NL
-624585184,624585199,US
-624585200,624585215,NL
-624585216,624585227,PL
-624585228,624585231,CN
-624585232,624585239,US
-624585240,624585247,TR
-624585248,624585271,CN
-624585272,624585279,HK
-624585280,624585287,BD
-624585288,624585311,US
-624585312,624585319,CA
-624585320,624585323,CN
-624585324,624585327,TW
-624585328,624585335,BR
-624585336,624585343,GB
-624585344,624585347,IN
-624585348,624585351,SA
-624585352,624585359,RU
-624585360,624585367,BR
-624585368,624585375,US
-624585376,624585407,CN
-624585408,624585439,NL
-624585440,624585451,CN
-624585452,624585455,NL
-624585456,624585487,US
-624585488,624585495,NL
-624585496,624585503,US
-624585504,624585511,TR
-624585512,624585519,BR
-624585520,624585535,US
-624585536,624585543,DK
-624585544,624585559,US
-624585560,624585567,GB
-624585568,624585575,US
-624585576,624585583,AU
-624585584,624585607,US
-624585608,624585615,SG
-624585616,624585623,HK
-624585624,624585631,GB
-624585632,624585663,TR
-624585664,624585671,DK
-624585672,624585679,KW
-624585680,624585695,US
-624585696,624585711,TR
-624585712,624585719,US
-624585720,624585723,TR
-624585724,624585727,US
-624585728,624585735,PL
-624585736,624585743,IL
-624585744,624585751,SK
-624585752,624585775,US
-624585776,624585779,PL
-624585780,624585783,US
-624585784,624585791,IN
-624585792,624585807,GB
-624585808,624585815,AE
-624585816,624585823,AU
-624585824,624585847,US
-624585848,624585855,RU
-624585856,624585983,US
-624585984,624586015,SA
-624586016,624586031,VG
-624586032,624586047,US
-624586048,624586079,DE
-624586080,624586087,TR
-624586088,624586095,EG
-624586096,624586103,DE
-624586104,624586111,US
-624586112,624586175,GB
-624586176,624586207,US
-624586208,624586239,LT
-624586240,624586247,US
-624586248,624586255,DE
-624586256,624586263,US
-624586264,624586265,TR
-624586266,624586267,GB
-624586268,624586279,US
-624586280,624586287,NL
-624586288,624586295,CN
-624586296,624586303,US
-624586304,624586311,GB
-624586312,624586319,CA
-624586320,624586335,US
-624586336,624586399,TR
-624586400,624586415,US
-624586416,624586423,PK
-624586424,624586427,US
-624586428,624586431,TR
-624586432,624586443,CA
-624586444,624586447,HU
-624586448,624586495,US
-624586496,624586511,CA
-624586512,624586591,US
-624586592,624586607,IL
-624586608,624586615,TR
-624586616,624586639,US
-624586640,624586655,NL
-624586656,624586671,DE
-624586672,624586687,NL
-624586688,624586719,TR
-624586720,624586727,US
-624586728,624586735,IL
-624586736,624586751,US
-624586752,624586759,ZA
-624586760,624586767,US
-624586768,624586783,GB
-624586784,624586795,US
-624586796,624586799,NL
-624586800,624586815,US
-624586816,624586823,GB
-624586824,624586831,CN
-624586832,624586847,NL
-624586848,624586895,SA
-624586896,624586903,ZA
-624586904,624586919,US
-624586920,624586927,TR
-624586928,624586975,US
-624586976,624586983,TR
-624586984,624587039,US
-624587040,624587103,NL
-624587104,624587135,US
-624587136,624587151,NL
-624587152,624587159,AU
-624587160,624587167,PL
-624587168,624587263,US
-624587264,624587295,DK
-624587296,624587359,US
-624587360,624587391,TR
-624587392,624587455,PA
-624587456,624587463,PT
-624587464,624587487,US
-624587488,624587519,SA
-624587520,624587623,US
-624587624,624587631,GB
-624587632,624587639,SA
-624587640,624587647,US
-624587648,624587695,NL
-624587696,624587727,US
-624587728,624587743,NL
-624587744,624587751,US
-624587752,624587759,NL
-624587760,624587775,US
-624587776,624587783,EG
-624587784,624587791,IN
-624587792,624587807,US
-624587808,624587815,PH
-624587816,624587823,NL
-624587824,624587831,US
-624587832,624587839,NL
-624587840,624587847,CN
-624587848,624587879,US
-624587880,624587887,SA
-624587888,624587891,GB
-624587892,624587895,EG
-624587896,624587935,US
-624587936,624587943,GB
-624587944,624587947,SA
-624587948,624587951,IT
-624587952,624587959,NL
-624587960,624587967,US
-624587968,624587971,IT
-624587972,624587975,IL
-624587976,624587983,DK
-624587984,624587999,US
-624588000,624588007,GB
-624588008,624588015,DK
-624588016,624588023,NL
-624588024,624588031,AE
-624588032,624588271,NL
-624588272,624588287,US
-624588288,624588319,NL
-624588320,624588327,PK
-624588328,624588335,RO
-624588336,624588391,NL
-624588392,624588415,US
-624588416,624588463,NL
-624588464,624588479,US
-624588480,624588527,NL
-624588528,624588543,US
-624588544,624588551,NL
-624588552,624588559,US
-624588560,624588567,NL
-624588568,624588575,ES
-624588576,624588583,NL
-624588584,624588587,ES
-624588588,624588591,MA
-624588592,624588599,BE
-624588600,624588607,AE
-624588608,624588623,US
-624588624,624588631,GB
-624588632,624588639,AE
-624588640,624588643,IT
-624588644,624588647,TR
-624588648,624588655,GB
-624588656,624588671,DK
-624588672,624588703,CN
-624588704,624588711,TW
-624588712,624588719,UG
-624588720,624588727,SA
-624588728,624588735,US
-624588736,624588743,IN
-624588744,624588751,RO
-624588752,624588759,US
-624588760,624588767,NL
-624588768,624588775,BA
-624588776,624588783,CA
-624588784,624588791,US
-624588792,624588799,TR
-624588800,624588887,US
-624588888,624588891,GB
-624588892,624588895,NL
-624588896,624588927,US
-624588928,624588975,NL
-624588976,624588983,GB
-624588984,624588991,US
-624588992,624589007,NL
-624589008,624589055,US
-624589056,624589063,EG
-624589064,624589095,US
-624589096,624589103,IE
-624589104,624589119,US
-624589120,624589127,IT
-624589128,624589135,NL
-624589136,624589143,TR
-624589144,624589159,US
-624589160,624589167,SE
-624589168,624589183,US
-624589184,624589191,CN
-624589192,624589199,UA
-624589200,624589207,GB
-624589208,624589211,DE
-624589212,624589215,TR
-624589216,624589223,KW
-624589224,624589231,GB
-624589232,624589247,US
-624589248,624589263,IL
-624589264,624589279,US
-624589280,624589287,CY
-624589288,624589295,GB
-624589296,624589311,US
-624589312,624589343,TR
-624589344,624589407,EG
-624589408,624589423,NL
-624589424,624589439,US
-624589440,624589471,CA
-624589472,624589503,TR
-624589504,624589519,US
-624589520,624589703,NL
-624589704,624589707,PL
-624589708,624589711,SA
-624589712,624589759,NL
-624589760,624589767,EG
-624589768,624589823,NL
-624589824,624590079,US
-624590080,624590087,IT
-624590088,624590119,US
-624590120,624590127,GR
-624590128,624590151,US
-624590152,624590159,BG
-624590160,624590167,GB
-624590168,624590175,MX
-624590176,624590183,US
-624590184,624590191,EG
-624590192,624590199,IN
-624590200,624590203,US
-624590204,624590207,IL
-624590208,624590239,LT
-624590240,624590247,AZ
-624590248,624590255,IL
-624590256,624590303,US
-624590304,624590311,GB
-624590312,624590319,BZ
-624590320,624590327,RU
-624590328,624590335,CA
-624590336,624590351,US
-624590352,624590359,GB
-624590360,624590363,UG
-624590364,624590367,ES
-624590368,624590375,AT
-624590376,624590383,US
-624590384,624590399,NL
-624590400,624590407,IN
-624590408,624590415,CN
-624590416,624590431,HR
-624590432,624590463,AF
-624590464,624590471,CN
-624590472,624590475,TR
-624590476,624590479,US
-624590480,624590487,BD
-624590488,624590495,IE
-624590496,624590503,US
-624590504,624590511,FR
-624590512,624590519,AU
-624590520,624590527,US
-624590528,624590543,MA
-624590544,624590551,AT
-624590552,624590559,ES
-624590560,624590567,US
-624590568,624590575,EG
-624590576,624590583,CA
-624590584,624590591,GB
-624590592,624590623,US
-624590624,624590655,GB
-624590656,624590703,NL
-624590704,624590751,US
-624590752,624590759,CN
-624590760,624590767,US
-624590768,624590775,TR
-624590776,624590783,US
-624590784,624590815,TR
-624590816,624590823,US
-624590824,624590831,BR
-624590832,624590843,US
-624590844,624590847,NL
-624590848,624639999,FR
-624640000,624640003,DE
-624640004,624640007,GB
-624640008,624640063,FR
-624640064,624640067,PT
-624640068,624640071,IT
-624640072,624640087,FR
-624640088,624640091,IT
-624640092,624640095,PL
-624640096,624640111,NL
-624640112,624640115,DE
-624640116,624640119,IT
-624640120,624640127,DE
-624640128,624640135,PT
-624640136,624640139,GB
-624640140,624640143,FR
-624640144,624640147,NL
-624640148,624640159,DE
-624640160,624640175,BE
-624640176,624640183,PL
-624640184,624640187,ES
-624640188,624640191,GB
-624640192,624640239,FR
-624640240,624640243,CZ
-624640244,624640247,DE
-624640248,624640255,FR
-624640256,624640259,GB
-624640260,624640263,DE
-624640264,624640275,PL
-624640276,624640283,GB
-624640284,624640287,PL
-624640288,624640291,ES
-624640292,624640295,PL
-624640296,624640519,FR
-624640520,624640523,NL
-624640524,624640527,FR
-624640528,624640543,IT
-624640544,624640559,FR
-624640560,624640575,GB
-624640576,624640615,FR
-624640616,624640619,IE
-624640620,624640623,DE
-624640624,624640639,FR
-624640640,624640703,BE
-624640704,624640727,FR
-624640728,624640735,DE
-624640736,624640739,GB
-624640740,624640743,PT
-624640744,624640755,GB
-624640756,624640759,PL
-624640760,624640767,FR
-624640768,624640779,IT
-624640780,624640783,DE
-624640784,624640787,ES
-624640788,624640791,IT
-624640792,624640799,FR
-624640800,624640803,CH
-624640804,624640807,FR
-624640808,624640811,DE
-624640812,624640815,GB
-624640816,624640823,FR
-624640824,624640827,GB
-624640828,624640831,DE
-624640832,624640847,FR
-624640848,624640851,ES
-624640852,624640855,PL
-624640856,624640863,IT
-624640864,624640879,FR
-624640880,624640895,PL
-624640896,624640903,PT
-624640904,624640927,FR
-624640928,624640931,FI
-624640932,624640935,ES
-624640936,624640939,PL
-624640940,624640943,DE
-624640944,624640951,FR
-624640952,624640967,PT
-624640968,624640975,FR
-624640976,624640991,ES
-624640992,624640999,GB
-624641000,624641007,FR
-624641008,624641023,IT
-624641024,624641063,FR
-624641064,624641067,NL
-624641068,624641071,PL
-624641072,624641079,FR
-624641080,624641083,ES
-624641084,624641087,FR
-624641088,624641091,NL
-624641092,624641095,FR
-624641096,624641099,CH
-624641100,624641103,FR
-624641104,624641107,PL
-624641108,624641119,FR
-624641120,624641131,PL
-624641132,624641135,LT
-624641136,624641183,FR
-624641184,624641187,CZ
-624641188,624641191,ES
-624641192,624641195,PL
-624641196,624641207,FR
-624641208,624641211,FI
-624641212,624641215,FR
-624641216,624641223,IE
-624641224,624641231,GB
-624641232,624641243,FR
-624641244,624641247,IT
-624641248,624641255,GB
-624641256,624641259,PT
-624641260,624641263,DE
-624641264,624641295,FR
-624641296,624641299,CZ
-624641300,624641303,LT
-624641304,624641311,PT
-624641312,624641315,GB
-624641316,624641323,ES
-624641324,624641327,PL
-624641328,624641343,IE
-624641344,624641355,FR
-624641356,624641359,PT
-624641360,624641367,IE
-624641368,624641371,FR
-624641372,624641375,IT
-624641376,624641407,PL
-624641408,624641823,FR
-624641824,624641831,DE
-624641832,624641839,ES
-624641840,624641855,FR
-624641856,624641887,GB
-624641888,624641983,FR
-624641984,624642015,ES
-624642016,624642031,PL
-624642032,624642035,DE
-624642036,624642039,ES
-624642040,624642047,FR
-624642048,624642051,DE
-624642052,624642055,PL
-624642056,624642063,GB
-624642064,624642079,FR
-624642080,624642095,PL
-624642096,624642099,FR
-624642100,624642111,PL
-624642112,624642127,CH
-624642128,624642135,DE
-624642136,624642139,PL
-624642140,624642147,FR
-624642148,624642151,ES
-624642152,624642175,FR
-624642176,624642207,NL
-624642208,624642223,IT
-624642224,624642231,GB
-624642232,624642239,FR
-624642240,624642243,NL
-624642244,624642247,PL
-624642248,624642255,FR
-624642256,624642271,PL
-624642272,624642283,FR
-624642284,624642287,GB
-624642288,624642291,FR
-624642292,624642299,PL
-624642300,624642303,ES
-624642304,624642335,IT
-624642336,624642379,FR
-624642380,624642383,PL
-624642384,624642391,FR
-624642392,624642395,PL
-624642396,624642407,FR
-624642408,624642411,PL
-624642412,624642415,FR
-624642416,624642423,DE
-624642424,624642431,FR
-624642432,624642447,BE
-624642448,624642463,GB
-624642464,624642479,FR
-624642480,624642483,GB
-624642484,624642487,FR
-624642488,624642491,NL
-624642492,624642495,PL
-624642496,624642499,GB
-624642500,624642503,FR
-624642504,624642507,PT
-624642508,624642511,ES
-624642512,624642527,FR
-624642528,624642559,IT
-624642560,624642623,FR
-624642624,624642627,IT
-624642628,624642631,FR
-624642632,624642639,IT
-624642640,624642651,PL
-624642652,624642659,FR
-624642660,624642663,PL
-624642664,624642671,FI
-624642672,624642679,PL
-624642680,624642683,FR
-624642684,624642687,DE
-624642688,624642691,FR
-624642692,624642695,ES
-624642696,624642699,FR
-624642700,624642703,DE
-624642704,624642711,FR
-624642712,624642719,PL
-624642720,624642727,FR
-624642728,624642735,PL
-624642736,624642739,DE
-624642740,624642747,PL
-624642748,624642751,DE
-624642752,624642787,FR
-624642788,624642791,ES
-624642792,624642795,PL
-624642796,624642799,FR
-624642800,624642815,PT
-624642816,624642835,FR
-624642836,624642839,GB
-624642840,624642843,FR
-624642844,624642847,DE
-624642848,624642855,GB
-624642856,624642859,FR
-624642860,624642863,PL
-624642864,624642887,FR
-624642888,624642891,LT
-624642892,624642895,PL
-624642896,624642911,GB
-624642912,624642943,FR
-624642944,624642947,IT
-624642948,624642951,ES
-624642952,624642967,FR
-624642968,624642975,DE
-624642976,624643007,FR
-624643008,624643011,PL
-624643012,624643015,GB
-624643016,624643019,IE
-624643020,624643023,FR
-624643024,624643031,IT
-624643032,624643035,CZ
-624643036,624643039,DE
-624643040,624643055,FR
-624643056,624643059,ES
-624643060,624643063,IT
-624643064,624643067,NL
-624643068,624643071,PL
-624643072,624643079,NL
-624643080,624643087,FR
-624643088,624643091,IT
-624643092,624643095,FI
-624643096,624643103,IT
-624643104,624643107,FR
-624643108,624643111,GB
-624643112,624643115,FR
-624643116,624643119,PT
-624643120,624643123,IE
-624643124,624643131,PT
-624643132,624643183,FR
-624643184,624643191,ES
-624643192,624643199,FR
-624643200,624643203,PL
-624643204,624643207,NL
-624643208,624643211,PL
-624643212,624643215,CH
-624643216,624643235,FR
-624643236,624643239,PL
-624643240,624643243,FR
-624643244,624643247,ES
-624643248,624643255,IE
-624643256,624643259,PL
-624643260,624643263,DE
-624643264,624643311,FR
-624643312,624643315,FI
-624643316,624643319,IE
-624643320,624643327,IT
-624643328,624643343,FR
-624643344,624643347,DE
-624643348,624643351,FR
-624643352,624643355,PL
-624643356,624643359,FR
-624643360,624643371,LT
-624643372,624643375,FR
-624643376,624643383,ES
-624643384,624643423,FR
-624643424,624643459,ES
-624643460,624643463,IE
-624643464,624643487,FR
-624643488,624643503,PL
-624643504,624643507,NL
-624643508,624643511,DE
-624643512,624643519,IE
-624643520,624643583,DE
-624643584,624643619,FR
-624643620,624643623,DE
-624643624,624643627,PL
-624643628,624643631,BE
-624643632,624643647,ES
-624643648,624643711,FR
-624643712,624643727,PL
-624643728,624643735,GB
-624643736,624643759,FR
-624643760,624643767,CH
-624643768,624643775,FR
-624643776,624643779,NL
-624643780,624643783,IT
-624643784,624643791,FR
-624643792,624643807,DE
-624643808,624643815,CH
-624643816,624643819,FR
-624643820,624643823,GB
-624643824,624643839,FR
-624643840,624644095,DE
-624644096,624644111,PL
-624644112,624644115,BE
-624644116,624644119,GB
-624644120,624644123,DE
-624644124,624644127,FR
-624644128,624644131,PL
-624644132,624644135,NL
-624644136,624644175,FR
-624644176,624644191,PL
-624644192,624644195,FR
-624644196,624644199,PL
-624644200,624644203,IT
-624644204,624644207,PT
-624644208,624644223,BE
-624644224,624644255,FR
-624644256,624644271,CH
-624644272,624644275,FR
-624644276,624644279,DE
-624644280,624644287,ES
-624644288,624644291,FR
-624644292,624644295,PL
-624644296,624644299,FR
-624644300,624644303,NL
-624644304,624644307,IE
-624644308,624644311,FR
-624644312,624644319,ES
-624644320,624644323,NL
-624644324,624644327,ES
-624644328,624644331,PL
-624644332,624644335,NL
-624644336,624644351,IT
-624644352,624644415,FR
-624644416,624644439,GB
-624644440,624644443,CH
-624644444,624644459,FR
-624644460,624644463,PL
-624644464,624644479,FR
-624644480,624644495,FI
-624644496,624644511,IT
-624644512,624644519,FR
-624644520,624644527,ES
-624644528,624644535,GB
-624644536,624644543,NL
-624644544,624644607,FR
-624644608,624644615,IE
-624644616,624644619,IT
-624644620,624644623,FR
-624644624,624644631,PL
-624644632,624644679,FR
-624644680,624644683,DE
-624644684,624644687,FR
-624644688,624644695,PL
-624644696,624644719,FR
-624644720,624644735,DE
-624644736,624644767,PL
-624644768,624644771,FR
-624644772,624644775,CH
-624644776,624644783,BE
-624644784,624644799,IE
-624644800,624644807,NL
-624644808,624644823,FR
-624644824,624644831,PT
-624644832,624644839,PL
-624644840,624644843,IT
-624644844,624644847,PL
-624644848,624644851,ES
-624644852,624644855,IT
-624644856,624644863,GB
-624644864,624644895,ES
-624644896,624644903,FR
-624644904,624644911,NL
-624644912,624644915,FR
-624644916,624644923,ES
-624644924,624644927,PL
-624644928,624644931,FR
-624644932,624644935,CZ
-624644936,624644939,FR
-624644940,624644943,ES
-624644944,624644955,FR
-624644956,624644959,PL
-624644960,624644991,NL
-624644992,624645007,ES
-624645008,624645015,GB
-624645016,624645023,BE
-624645024,624645055,PL
-624645056,624645135,FR
-624645136,624645139,PT
-624645140,624645143,FR
-624645144,624645147,PL
-624645148,624645151,GB
-624645152,624645163,FR
-624645164,624645167,DE
-624645168,624645183,FR
-624645184,624645215,ES
-624645216,624645247,PT
-624645248,624645295,FR
-624645296,624645303,IE
-624645304,624645311,FR
-624645312,624645343,PL
-624645344,624645359,DE
-624645360,624645367,FR
-624645368,624645371,PL
-624645372,624645451,FR
-624645452,624645455,IT
-624645456,624645479,FR
-624645480,624645487,DE
-624645488,624645495,PL
-624645496,624645535,FR
-624645536,624645539,PT
-624645540,624645543,IT
-624645544,624645547,FR
-624645548,624645551,PT
-624645552,624645575,FR
-624645576,624645579,GB
-624645580,624645583,PL
-624645584,624645591,GB
-624645592,624645607,FR
-624645608,624645615,CH
-624645616,624645619,PL
-624645620,624645627,FR
-624645628,624645631,PL
-624645632,624645887,FR
-624645888,624645891,PL
-624645892,624645895,FR
-624645896,624645903,ES
-624645904,624645907,FR
-624645908,624645911,IE
-624645912,624645915,FR
-624645916,624645919,BE
-624645920,624646047,PT
-624646048,624646111,FR
-624646112,624646143,PL
-624646144,624646175,FR
-624646176,624646207,ES
-624646208,624646223,FR
-624646224,624646227,PL
-624646228,624646231,IT
-624646232,624646235,CZ
-624646236,624646239,GB
-624646240,624646255,FR
-624646256,624646259,DE
-624646260,624646263,GB
-624646264,624646267,FR
-624646268,624646271,FI
-624646272,624646283,FR
-624646284,624646287,IT
-624646288,624646295,FR
-624646296,624646303,ES
-624646304,624646311,PL
-624646312,624646315,FI
-624646316,624646319,ES
-624646320,624646339,FR
-624646340,624646343,LT
-624646344,624646347,IT
-624646348,624646351,IE
-624646352,624646367,GB
-624646368,624646399,PL
-624646400,624646527,FR
-624646528,624646535,DE
-624646536,624646539,PL
-624646540,624646543,FR
-624646544,624646559,DE
-624646560,624646575,FR
-624646576,624646579,PL
-624646580,624646583,NL
-624646584,624646591,GB
-624646592,624646607,FR
-624646608,624646623,CZ
-624646624,624646627,PT
-624646628,624646631,DE
-624646632,624646635,FR
-624646636,624646639,NL
-624646640,624646643,IE
-624646644,624646647,ES
-624646648,624646651,IT
-624646652,624646655,PL
-624646656,624646659,ES
-624646660,624646663,GB
-624646664,624646667,FR
-624646668,624646671,IT
-624646672,624646687,GB
-624646688,624646691,FR
-624646692,624646695,NL
-624646696,624646699,FR
-624646700,624646703,CH
-624646704,624646707,FR
-624646708,624646715,PL
-624646716,624646719,FR
-624646720,624646735,ES
-624646736,624646751,DE
-624646752,624646759,FR
-624646760,624646763,IT
-624646764,624646767,FR
-624646768,624646787,DE
-624646788,624646791,PL
-624646792,624646795,IE
-624646796,624646799,FR
-624646800,624646815,CH
-624646816,624646831,IT
-624646832,624646835,FR
-624646836,624646839,BE
-624646840,624646847,FR
-624646848,624646911,DE
-624646912,624646935,PL
-624646936,624646939,FR
-624646940,624646943,PL
-624646944,624646951,IT
-624646952,624646955,IE
-624646956,624646959,ES
-624646960,624646987,FR
-624646988,624646991,PL
-624646992,624647039,FR
-624647040,624647055,GB
-624647056,624647087,FR
-624647088,624647095,DE
-624647096,624647107,GB
-624647108,624647111,PL
-624647112,624647123,ES
-624647124,624647127,FR
-624647128,624647135,PL
-624647136,624647171,FR
-624647172,624647175,PL
-624647176,624647183,PT
-624647184,624647191,PL
-624647192,624647195,FR
-624647196,624647231,PL
-624647232,624647247,FR
-624647248,624647263,GB
-624647264,624647295,CH
-624647296,624647327,NL
-624647328,624647359,GB
-624647360,624647423,FR
-624647424,624647471,IE
-624647472,624647475,PL
-624647476,624647479,FR
-624647480,624647483,PT
-624647484,624647487,NL
-624647488,624647495,PL
-624647496,624647499,FR
-624647500,624647503,PL
-624647504,624647519,NL
-624647520,624647527,GB
-624647528,624647551,FR
-624647552,624647583,IE
-624647584,624647615,FR
-624647616,624647623,PL
-624647624,624647631,ES
-624647632,624647647,FR
-624647648,624647663,GB
-624647664,624647667,FR
-624647668,624647671,FI
-624647672,624647675,FR
-624647676,624647679,ES
-624647680,624647935,DE
-624647936,624647999,PL
-624648000,624648063,IT
-624648064,624648079,GB
-624648080,624648095,NL
-624648096,624648099,FR
-624648100,624648103,GB
-624648104,624648111,FR
-624648112,624648115,IE
-624648116,624648119,BE
-624648120,624648123,FR
-624648124,624648127,PL
-624648128,624648135,CH
-624648136,624648139,PL
+624580134,624580151,NL
+624580152,624580159,ES
+624580160,624581071,NL
+624581072,624581087,US
+624581088,624581135,NL
+624581136,624581139,US
+624581140,624581199,NL
+624581200,624581207,GB
+624581208,624581599,NL
+624581600,624581631,US
+624581632,624582123,NL
+624582124,624582127,US
+624582128,624582139,NL
+624582140,624582147,US
+624582148,624582287,NL
+624582288,624582295,US
+624582296,624582399,NL
+624582400,624582403,US
+624582404,624584111,NL
+624584112,624584119,US
+624584120,624584159,NL
+624584160,624584175,US
+624584176,624584383,NL
+624584384,624584391,US
+624584392,624584415,NL
+624584416,624584423,US
+624584424,624584639,NL
+624584640,624584655,US
+624584656,624585359,NL
+624585360,624585367,US
+624585368,624590847,NL
+624590848,624640951,FR
+624640952,624640959,PT
+624640960,624646343,FR
+624646344,624646347,NL
+624646348,624647171,FR
+624647172,624647175,ES
+624647176,624648139,FR
624648140,624648143,ES
-624648144,624648151,FR
-624648152,624648155,DE
-624648156,624648159,PL
-624648160,624650623,FR
-624650624,624650751,PT
-624650752,624651135,FR
-624651136,624651263,FI
-624651264,624651391,LT
-624651392,624651519,CZ
-624651520,624651647,NL
-624651648,624651775,IE
-624651776,624652287,PL
-624652288,624652799,IT
-624652800,624653311,DE
-624653312,624653823,GB
-624653824,624654335,ES
-624654336,624656383,FR
-624656384,624656639,IE
-624656640,624656703,DE
-624656704,624656723,FR
-624656724,624656727,FI
-624656728,624656731,PT
-624656732,624656735,PL
-624656736,624656739,FR
-624656740,624656743,GB
-624656744,624656751,FR
-624656752,624656755,GB
-624656756,624656763,FR
-624656764,624656767,PL
-624656768,624656831,FR
-624656832,624656895,ES
-624656896,624656911,FR
-624656912,624656927,DE
-624656928,624656935,FR
-624656936,624656943,BE
-624656944,624656951,FR
-624656952,624656955,PL
-624656956,624656959,DE
-624656960,624656991,GB
-624656992,624656999,DE
-624657000,624657007,FR
-624657008,624657015,ES
-624657016,624657019,GB
-624657020,624657023,PL
-624657024,624657063,FR
-624657064,624657067,NL
-624657068,624657071,FR
-624657072,624657087,GB
-624657088,624657135,PL
-624657136,624657139,IT
-624657140,624657143,NL
-624657144,624657147,FR
-624657148,624657155,PL
-624657156,624657159,FR
-624657160,624657167,IE
-624657168,624657199,PL
-624657200,624657215,DE
-624657216,624657263,PL
-624657264,624657279,BE
-624657280,624657295,PL
-624657296,624657299,DE
-624657300,624657303,PL
-624657304,624657311,GB
-624657312,624657315,DE
-624657316,624657319,FR
-624657320,624657327,DE
-624657328,624657331,ES
-624657332,624657359,FR
-624657360,624657363,GB
-624657364,624657367,PL
-624657368,624657375,IE
-624657376,624657379,PL
-624657380,624657383,FR
-624657384,624657387,DE
-624657388,624657407,FR
-624657408,624657415,PL
-624657416,624657423,ES
-624657424,624657427,BE
-624657428,624657431,FR
-624657432,624657435,PL
-624657436,624657439,FR
-624657440,624657471,PL
-624657472,624657475,DE
-624657476,624657479,PL
-624657480,624657491,FR
-624657492,624657495,BE
-624657496,624657503,GB
-624657504,624657535,BE
-624657536,624657543,ES
-624657544,624657551,FR
-624657552,624657559,NL
-624657560,624657567,FR
-624657568,624657583,PL
-624657584,624657591,GB
-624657592,624657599,FR
-624657600,624657603,BE
-624657604,624657607,ES
-624657608,624657611,LT
-624657612,624657615,BE
-624657616,624657631,GB
-624657632,624657643,FR
-624657644,624657651,PL
-624657652,624657655,FR
-624657656,624657663,GB
-624657664,624657667,PT
-624657668,624657671,PL
-624657672,624657675,NL
-624657676,624657679,ES
-624657680,624657707,FR
-624657708,624657711,ES
-624657712,624657715,PL
-624657716,624657719,PT
-624657720,624657723,PL
-624657724,624657727,NL
-624657728,624657735,GB
-624657736,624657743,NL
-624657744,624657759,FR
-624657760,624657767,PL
-624657768,624657771,FR
-624657772,624657775,DE
-624657776,624657779,BE
-624657780,624657783,GB
-624657784,624657787,NL
-624657788,624657803,FR
-624657804,624657807,PT
-624657808,624657815,DE
-624657816,624657819,ES
-624657820,624657823,GB
-624657824,624657827,FR
-624657828,624657831,PL
-624657832,624657839,ES
-624657840,624657855,NL
-624657856,624657863,FR
-624657864,624657871,PL
-624657872,624657875,FR
-624657876,624657879,PL
-624657880,624657883,CH
-624657884,624657919,PL
-624657920,624657927,PT
-624657928,624657931,BE
-624657932,624657935,FR
-624657936,624657943,NL
-624657944,624657947,FR
-624657948,624657951,GB
-624657952,624657975,FR
-624657976,624657979,GB
-624657980,624658007,FR
-624658008,624658011,PL
-624658012,624658015,FR
-624658016,624658031,PT
-624658032,624658047,PL
-624658048,624658079,FR
-624658080,624658087,IE
-624658088,624658095,GB
-624658096,624658111,IT
-624658112,624658175,FR
-624658176,624658179,BE
-624658180,624658183,PL
-624658184,624658191,ES
-624658192,624658223,FR
-624658224,624658239,BE
-624658240,624658303,FR
-624658304,624658323,PL
+624648144,624657711,FR
+624657712,624657715,ES
+624657716,624657883,FR
+624657884,624657887,ES
+624657888,624658323,FR
624658324,624658327,IE
-624658328,624658335,IT
-624658336,624658367,FR
-624658368,624658375,CZ
-624658376,624658391,FR
-624658392,624658395,PL
-624658396,624658399,DE
-624658400,624658403,PL
-624658404,624658407,FR
-624658408,624658411,ES
-624658412,624658415,GB
-624658416,624658423,FR
-624658424,624658431,PL
-624658432,624658447,NL
-624658448,624658479,FR
+624658328,624658479,FR
624658480,624658483,DE
-624658484,624658487,ES
-624658488,624658527,FR
-624658528,624658535,GB
-624658536,624658539,ES
-624658540,624658543,PL
-624658544,624658591,FR
-624658592,624658623,DE
-624658624,624658639,FR
-624658640,624658659,PL
-624658660,624658663,FR
-624658664,624658671,GB
-624658672,624658675,PL
-624658676,624658679,FR
-624658680,624658687,PL
-624658688,624658719,DE
-624658720,624658751,FR
-624658752,624658783,NL
-624658784,624658787,ES
-624658788,624658791,FR
-624658792,624658795,IT
-624658796,624658799,PL
-624658800,624658803,DE
-624658804,624658807,CZ
-624658808,624658811,FR
-624658812,624658831,PL
-624658832,624658835,CH
-624658836,624658839,NL
-624658840,624658843,PL
-624658844,624658847,GB
-624658848,624658855,PL
-624658856,624658863,FR
-624658864,624658879,ES
-624658880,624658911,NL
-624658912,624658927,FR
-624658928,624658943,SN
-624658944,624658947,PL
-624658948,624658951,ES
-624658952,624658959,IE
-624658960,624658963,PL
-624658964,624658967,IT
-624658968,624658971,DE
-624658972,624658975,FR
-624658976,624658979,PL
-624658980,624658983,FR
-624658984,624658987,PL
-624658988,624658991,FR
-624658992,624658995,GB
-624658996,624658999,IT
-624659000,624659003,IE
-624659004,624659007,GB
-624659008,624659023,FR
-624659024,624659031,ES
-624659032,624659055,FR
-624659056,624659071,IT
-624659072,624659135,GB
-624659136,624659279,FR
-624659280,624659295,GB
-624659296,624659299,NL
-624659300,624659303,CZ
-624659304,624659307,FR
-624659308,624659315,PL
-624659316,624659319,GB
-624659320,624659323,PL
-624659324,624659327,FR
-624659328,624659359,GB
-624659360,624659363,ES
-624659364,624659367,BE
-624659368,624659371,FR
-624659372,624659375,IT
-624659376,624659383,NL
-624659384,624659387,PL
-624659388,624659391,IT
-624659392,624659407,FR
-624659408,624659415,PL
-624659416,624659427,FR
-624659428,624659431,CZ
-624659432,624659439,FI
-624659440,624659447,FR
-624659448,624659455,ES
-624659456,624659487,PL
-624659488,624659503,CH
-624659504,624659551,FR
-624659552,624659583,PL
-624659584,624659599,GB
-624659600,624659607,DE
-624659608,624659611,CZ
-624659612,624659631,FR
-624659632,624659647,BE
-624659648,624659695,FR
-624659696,624659703,PL
-624659704,624659787,FR
-624659788,624659791,NL
-624659792,624659799,GB
-624659800,624659803,FR
-624659804,624659807,PT
-624659808,624659811,FR
-624659812,624659815,PL
-624659816,624659831,FR
-624659832,624659839,FI
-624659840,624659935,FR
-624659936,624659951,BE
-624659952,624659959,FR
-624659960,624659963,PL
-624659964,624659967,PT
-624659968,624659975,DE
-624659976,624659979,BE
-624659980,624659987,FR
-624659988,624659991,PL
-624659992,624659995,FR
-624659996,624659999,PL
-624660000,624660015,FR
-624660016,624660031,CH
-624660032,624660095,DE
-624660096,624660111,GB
-624660112,624660127,ES
-624660128,624660131,FR
-624660132,624660135,PL
-624660136,624660139,ES
-624660140,624660143,GB
-624660144,624660151,ES
-624660152,624660155,PL
-624660156,624660159,GB
-624660160,624660167,FR
-624660168,624660171,PL
-624660172,624660191,FR
-624660192,624660195,CH
-624660196,624660199,PL
-624660200,624660479,FR
-624660480,624660495,ES
-624660496,624660499,FR
-624660500,624660503,PL
-624660504,624660511,NL
-624660512,624660543,PT
-624660544,624660559,FR
-624660560,624660563,ES
-624660564,624660567,FR
-624660568,624660575,ES
-624660576,624660591,PT
-624660592,624660607,IE
-624660608,624660671,CH
-624660672,624660703,FR
-624660704,624660719,IT
-624660720,624660723,GB
-624660724,624660727,PL
-624660728,624660735,NL
-624660736,624660751,IE
-624660752,624660755,PT
-624660756,624660759,GB
-624660760,624660767,FR
-624660768,624660775,DE
-624660776,624660803,FR
-624660804,624660807,PL
-624660808,624660827,FR
-624660828,624660831,PL
-624660832,624660839,ES
-624660840,624660843,FR
-624660844,624660847,ES
-624660848,624660855,PL
-624660856,624660859,NL
-624660860,624660863,BE
-624660864,624660879,FR
-624660880,624660887,NL
-624660888,624660891,DE
-624660892,624660895,CH
-624660896,624660919,FR
-624660920,624660923,PL
-624660924,624660991,GB
-624660992,624661119,PL
-624661120,624661159,FR
-624661160,624661163,IT
-624661164,624661175,FR
-624661176,624661247,ES
-624661248,624661255,PL
-624661256,624661259,LT
-624661260,624661279,FR
-624661280,624661283,ES
-624661284,624661295,FR
-624661296,624661343,DE
-624661344,624661503,FR
-624661504,624661759,DE
-624661760,624661767,FR
-624661768,624661771,DE
-624661772,624661775,FI
-624661776,624661787,FR
+624658484,624660827,FR
+624660828,624660831,ES
+624660832,624661247,FR
+624661248,624661251,ES
+624661252,624661787,FR
624661788,624661788,RO
-624661789,624661791,FR
-624661792,624661823,ES
-624661824,624661827,IT
-624661828,624661831,PL
-624661832,624661839,FR
-624661840,624661855,PL
-624661856,624661863,FR
-624661864,624661871,ES
-624661872,624661875,PL
-624661876,624661879,CZ
-624661880,624661887,LT
-624661888,624661915,FR
-624661916,624661919,BE
-624661920,624661935,ES
-624661936,624661951,FR
-624661952,624661955,DE
+624661789,624661955,FR
624661956,624661959,PL
-624661960,624661967,FR
-624661968,624661975,DE
-624661976,624661979,FR
-624661980,624661983,IE
-624661984,624662015,FR
-624662016,624662047,IT
-624662048,624662111,FR
-624662112,624662119,LT
-624662120,624662127,ES
-624662128,624662143,FR
-624662144,624662175,PL
-624662176,624662179,FR
-624662180,624662183,CH
-624662184,624662191,FR
-624662192,624662207,GB
-624662208,624662211,PL
-624662212,624662215,IE
-624662216,624662227,FR
-624662228,624662231,BE
-624662232,624662239,ES
-624662240,624662243,FR
-624662244,624662251,PL
-624662252,624662311,FR
-624662312,624662315,GB
-624662316,624662319,ES
-624662320,624662327,FR
-624662328,624662331,PT
-624662332,624662399,FR
-624662400,624662431,GB
-624662432,624662447,BE
-624662448,624662471,FR
-624662472,624662475,DE
-624662476,624662479,FR
-624662480,624662527,IE
-624662528,624662543,DE
-624662544,624662591,IE
-624662592,624662631,FR
-624662632,624662635,DE
-624662636,624662639,NL
-624662640,624662647,PL
-624662648,624662651,FR
-624662652,624662655,ES
-624662656,624662687,FR
-624662688,624662691,PT
-624662692,624662695,PL
-624662696,624662703,FR
-624662704,624662719,CZ
-624662720,624662735,BE
-624662736,624662739,FR
-624662740,624662751,LT
-624662752,624662755,GB
-624662756,624662759,FR
-624662760,624662763,IE
-624662764,624662767,FR
-624662768,624662783,CH
-624662784,624662799,PL
-624662800,624662807,FR
-624662808,624662811,CH
-624662812,624662815,IT
-624662816,624662847,ES
-624662848,624662895,FR
-624662896,624662911,ES
-624662912,624663039,IE
-624663040,624663407,GB
-624663408,624663423,FI
-624663424,624663455,PL
-624663456,624663487,GB
-624663488,624663519,NL
-624663520,624663551,FR
-624663552,624663583,GB
-624663584,624663615,FR
-624663616,624663647,NL
-624663648,624663663,CZ
-624663664,624663667,FR
-624663668,624663671,GB
-624663672,624663679,IT
-624663680,624663683,PT
-624663684,624663687,PL
-624663688,624663695,GB
-624663696,624663711,FR
-624663712,624663743,IE
-624663744,624663759,FR
-624663760,624663767,ES
-624663768,624663783,FR
-624663784,624663787,BE
-624663788,624663791,ES
-624663792,624663807,NL
-624663808,624663839,FR
-624663840,624663847,NL
-624663848,624663855,GB
-624663856,624663863,LT
-624663864,624663867,PT
-624663868,624663871,PL
-624663872,624663879,FR
-624663880,624663883,GB
-624663884,624663887,NL
-624663888,624663891,BE
-624663892,624663895,PL
-624663896,624663903,GB
-624663904,624663919,FR
-624663920,624663935,ES
-624663936,624663951,FI
-624663952,624663959,FR
-624663960,624663967,CZ
-624663968,624663971,DE
-624663972,624663975,PL
-624663976,624663983,GB
-624663984,624664007,FR
-624664008,624664011,IT
-624664012,624664023,PL
-624664024,624664027,GB
-624664028,624664031,FR
-624664032,624664039,GB
-624664040,624664047,BE
-624664048,624664063,IE
-624664064,624664067,FR
-624664068,624664071,ES
-624664072,624664079,PL
-624664080,624664107,FR
-624664108,624664115,PL
-624664116,624664119,ES
-624664120,624664123,CH
-624664124,624664127,FR
-624664128,624664135,BE
-624664136,624664351,FR
-624664352,624664367,ES
-624664368,624664471,FR
-624664472,624664475,PT
-624664476,624664483,PL
-624664484,624664487,FR
-624664488,624664495,GB
-624664496,624664511,ES
-624664512,624664527,IE
-624664528,624664531,IT
-624664532,624664535,FR
-624664536,624664539,PL
-624664540,624664583,FR
-624664584,624664591,CH
-624664592,624664595,FR
-624664596,624664599,BE
-624664600,624664603,GB
-624664604,624664607,IE
-624664608,624664611,CH
-624664612,624664615,FR
-624664616,624664619,PL
-624664620,624664623,FR
-624664624,624664627,ES
-624664628,624664631,FR
-624664632,624664635,PL
-624664636,624664655,FR
-624664656,624664659,PL
-624664660,624664663,ES
-624664664,624664667,FI
-624664668,624664671,GB
-624664672,624664703,IE
-624664704,624664767,IT
-624664768,624664775,GB
-624664776,624664783,BE
-624664784,624664795,IT
-624664796,624664799,FR
-624664800,624664807,DE
-624664808,624664811,FR
-624664812,624664815,PL
-624664816,624664823,ES
-624664824,624664831,NL
-624664832,624664863,IE
-624664864,624664895,FR
-624664896,624664959,NL
-624664960,624665087,FR
-624665088,624665135,PL
-624665136,624665143,FR
-624665144,624665147,ES
-624665148,624665151,PL
-624665152,624665187,FR
-624665188,624665191,PL
-624665192,624665199,GB
-624665200,624665207,PL
-624665208,624665211,FR
-624665212,624665215,IT
-624665216,624665231,FR
-624665232,624665235,PL
-624665236,624665247,FR
-624665248,624665259,PT
-624665260,624665263,GB
-624665264,624665271,IT
-624665272,624665275,CZ
-624665276,624665279,FR
-624665280,624665283,DE
-624665284,624665287,IT
-624665288,624665295,FR
-624665296,624665303,GB
-624665304,624665359,FR
-624665360,624665367,DE
-624665368,624665375,FR
-624665376,624665379,CZ
-624665380,624665383,PT
-624665384,624665391,ES
-624665392,624665407,FR
-624665408,624665471,IT
-624665472,624665475,FR
-624665476,624665479,DE
-624665480,624665495,FR
-624665496,624665503,PL
-624665504,624665535,FR
-624665536,624665551,PL
-624665552,624665555,IE
-624665556,624665559,FR
-624665560,624665567,CZ
-624665568,624665587,FR
+624661960,624663951,FR
+624663952,624663955,ES
+624663956,624664527,FR
+624664528,624664531,ES
+624664532,624664676,FR
+624664677,624664677,IE
+624664678,624665587,FR
624665588,624665591,DE
-624665592,624665595,FR
-624665596,624665599,PL
-624665600,624665607,BE
-624665608,624665611,PL
-624665612,624665615,ES
-624665616,624665631,FR
-624665632,624665647,PL
-624665648,624665663,FR
-624665664,624665695,PT
-624665696,624665711,FR
-624665712,624665727,GB
-624665728,624665759,FR
-624665760,624665767,IE
-624665768,624665771,IT
-624665772,624665775,FR
-624665776,624665779,PL
-624665780,624665783,FI
-624665784,624665787,FR
-624665788,624665791,PL
-624665792,624665795,ES
-624665796,624665803,PL
-624665804,624665807,FR
-624665808,624665811,CH
-624665812,624665823,FR
-624665824,624665831,CH
-624665832,624665839,DE
-624665840,624665851,ES
-624665852,624665859,FR
-624665860,624665863,IT
-624665864,624665871,FR
-624665872,624665887,IE
-624665888,624665943,FR
-624665944,624665951,PL
-624665952,624665955,IE
-624665956,624665959,FR
-624665960,624665967,IE
-624665968,624665975,FR
-624665976,624665983,GB
-624665984,624666035,FR
-624666036,624666039,DE
-624666040,624666043,FR
-624666044,624666047,GB
-624666048,624666111,NL
-624666112,624666367,FR
-624666368,624666371,PL
-624666372,624666379,GB
-624666380,624666383,PL
-624666384,624666391,FR
-624666392,624666399,GB
-624666400,624666431,BE
-624666432,624666495,GB
-624666496,624666623,FR
-624666624,624666655,CH
-624666656,624666663,GB
-624666664,624666667,LT
-624666668,624666671,FR
-624666672,624666687,GB
-624666688,624666691,FR
-624666692,624666695,ES
-624666696,624666699,PT
-624666700,624666703,CH
-624666704,624666719,FR
-624666720,624666727,DE
-624666728,624666735,FR
-624666736,624666739,DE
-624666740,624666743,BE
-624666744,624666755,PL
-624666756,624666759,IT
-624666760,624666767,DE
-624666768,624666791,FR
-624666792,624666795,ES
-624666796,624666799,GB
-624666800,624666879,FR
-624666880,624666883,ES
-624666884,624666887,FR
-624666888,624666895,BE
-624666896,624666899,GB
-624666900,624666903,FR
-624666904,624666907,ES
-624666908,624666911,FR
-624666912,624666919,PT
-624666920,624666923,GB
-624666924,624666943,FR
-624666944,624666959,GB
-624666960,624666975,PL
-624666976,624666991,ES
-624666992,624666995,PL
-624666996,624666999,FR
-624667000,624667007,CZ
-624667008,624667039,BE
-624667040,624667075,FR
-624667076,624667079,PL
-624667080,624667083,IT
-624667084,624667087,PL
-624667088,624667103,GB
-624667104,624667107,FR
-624667108,624667111,PL
-624667112,624667115,ES
-624667116,624667119,CZ
-624667120,624667135,BE
-624667136,624667199,FR
-624667200,624667231,ES
-624667232,624667263,FR
-624667264,624667279,IE
-624667280,624667395,FR
-624667396,624667407,GB
-624667408,624667439,IE
-624667440,624667455,CH
-624667456,624667471,FR
-624667472,624667475,PT
-624667476,624667479,IT
-624667480,624667483,DE
-624667484,624667487,IE
-624667488,624667519,PT
-624667520,624667603,PL
-624667604,624667607,GB
-624667608,624667615,BE
-624667616,624667623,PL
-624667624,624667631,LT
-624667632,624667639,FR
-624667640,624667647,PL
-624667648,624667711,ES
-624667712,624667775,FI
-624667776,624667827,FR
-624667828,624667831,PL
-624667832,624667839,BE
-624667840,624667847,FR
-624667848,624667851,LT
-624667852,624667855,DE
-624667856,624667879,IE
-624667880,624667883,FR
-624667884,624667887,IE
-624667888,624667895,GB
-624667896,624667899,PL
-624667900,624667903,FR
-624667904,624667935,PT
-624667936,624667951,FR
-624667952,624667967,GB
-624667968,624667971,DE
-624667972,624667975,FR
-624667976,624667983,PL
-624667984,624667991,FR
-624667992,624667999,PL
-624668000,624668015,IT
-624668016,624668023,FR
-624668024,624668027,GB
-624668028,624668043,FR
-624668044,624668047,PL
-624668048,624668055,GB
-624668056,624668063,IE
-624668064,624668071,PT
-624668072,624668095,PL
-624668096,624668159,PT
-624668160,624668271,FR
-624668272,624668275,BE
-624668276,624668319,FR
-624668320,624668335,GB
-624668336,624668351,FR
-624668352,624668367,GB
-624668368,624668383,PL
-624668384,624668415,PT
-624668416,624668447,FR
-624668448,624668479,GB
-624668480,624668511,DE
-624668512,624668543,NL
-624668544,624668547,CZ
-624668548,624668551,FR
-624668552,624668559,IE
-624668560,624668575,FR
-624668576,624668583,GB
-624668584,624668607,FR
-624668608,624668639,PT
+624665592,624665951,FR
+624665952,624665955,NL
+624665956,624668639,FR
624668640,624668643,NL
-624668644,624668647,IE
-624668648,624668655,FR
-624668656,624668659,NL
-624668660,624668663,FR
-624668664,624668667,PL
-624668668,624668671,PT
-624668672,624668703,FR
-624668704,624668707,PL
-624668708,624668711,IE
-624668712,624668715,FR
-624668716,624668719,IE
-624668720,624668767,FR
-624668768,624668791,IT
-624668792,624668799,IE
-624668800,624668815,IT
-624668816,624668847,FR
-624668848,624668863,IE
-624668864,624668927,FR
-624668928,624668931,GB
-624668932,624668935,FR
-624668936,624668939,PL
-624668940,624668959,FR
-624668960,624668963,PL
-624668964,624668995,FR
-624668996,624668999,NL
-624669000,624669011,FR
-624669012,624669015,GB
-624669016,624669023,FR
-624669024,624669031,IT
-624669032,624669043,FR
-624669044,624669047,PL
-624669048,624669055,IE
-624669056,624669119,IT
-624669120,624669127,FR
-624669128,624669131,DE
-624669132,624669135,IT
-624669136,624669183,FR
-624669184,624669215,NL
-624669216,624669231,FR
-624669232,624669247,ES
-624669248,624669251,PL
-624669252,624669255,FR
-624669256,624669263,IE
-624669264,624669271,IT
-624669272,624669275,PL
-624669276,624669279,FR
-624669280,624669295,PL
-624669296,624669303,NL
-624669304,624669311,FR
-624669312,624669327,PL
-624669328,624669343,FR
-624669344,624669359,LT
-624669360,624669367,PL
-624669368,624669371,FR
-624669372,624669375,PL
-624669376,624669439,FR
-624669440,624669459,PL
-624669460,624669463,FI
-624669464,624669499,FR
-624669500,624669515,PL
-624669516,624669519,BE
-624669520,624669567,FR
-624669568,624669571,DE
-624669572,624669579,FR
-624669580,624669583,DE
-624669584,624669591,IT
-624669592,624669599,DE
-624669600,624669695,FR
-624669696,624669699,CH
-624669700,624669703,DE
-624669704,624669711,PL
-624669712,624669727,ES
-624669728,624669743,FR
-624669744,624669747,IT
-624669748,624669751,FR
-624669752,624669755,PL
-624669756,624669795,FR
-624669796,624669799,DE
-624669800,624669807,IE
-624669808,624669811,PL
-624669812,624669815,FR
-624669816,624669823,PL
-624669824,624669831,NL
-624669832,624669855,FR
-624669856,624669871,GB
-624669872,624669879,NL
-624669880,624669919,FR
-624669920,624669935,NL
-624669936,624669939,PL
-624669940,624669943,GB
-624669944,624669951,FR
-624669952,624669959,PL
-624669960,624669963,ES
-624669964,624669967,GB
-624669968,624669975,NL
-624669976,624669983,ES
-624669984,624669987,PL
-624669988,624669991,ES
-624669992,624669999,PL
-624670000,624670003,GB
-624670004,624670007,CH
-624670008,624670015,PL
-624670016,624670095,FR
-624670096,624670103,PL
-624670104,624670127,FR
-624670128,624670143,PL
-624670144,624670147,FR
-624670148,624670151,PL
-624670152,624670159,FR
-624670160,624670167,PL
-624670168,624670171,GB
-624670172,624670175,ES
-624670176,624670183,FI
-624670184,624670191,IT
-624670192,624670195,FR
-624670196,624670199,CH
-624670200,624670271,FR
-624670272,624670303,PL
-624670304,624670307,NL
-624670308,624670315,CH
-624670316,624670319,ES
-624670320,624670343,NL
-624670344,624670347,ES
-624670348,624670351,NL
-624670352,624670359,FR
-624670360,624670367,NL
-624670368,624670383,PL
-624670384,624670391,FR
-624670392,624670395,NL
-624670396,624670399,ES
-624670400,624670403,FR
-624670404,624670407,PL
-624670408,624670411,FR
-624670412,624670415,GB
-624670416,624670431,DE
-624670432,624670447,FR
-624670448,624670463,CH
-624670464,624670479,FR
-624670480,624670487,GB
-624670488,624670591,FR
-624670592,624670599,GB
-624670600,624670603,FR
-624670604,624670607,GB
-624670608,624670615,FR
-624670616,624670619,GB
-624670620,624670623,FR
-624670624,624670655,NL
-624670656,624670659,CZ
-624670660,624670663,IE
-624670664,624670667,BE
-624670668,624670671,NL
-624670672,624670687,ES
-624670688,624670771,FR
-624670772,624670775,PT
-624670776,624670783,CH
-624670784,624670791,FR
-624670792,624670803,GB
-624670804,624670815,PL
-624670816,624670863,FR
-624670864,624670871,GB
-624670872,624670879,FR
-624670880,624670895,PT
-624670896,624670903,CH
-624670904,624670911,FR
-624670912,624670919,GB
-624670920,624670927,FR
-624670928,624670935,PL
-624670936,624670959,FR
-624670960,624670975,PL
-624670976,624671239,GB
-624671240,624671243,FR
-624671244,624671247,PL
-624671248,624671251,ES
-624671252,624671255,PL
-624671256,624671279,FR
-624671280,624671291,ES
-624671292,624671423,FR
-624671424,624671427,GB
-624671428,624671431,BE
-624671432,624671439,FR
-624671440,624671455,ES
-624671456,624671463,NL
-624671464,624671467,PL
-624671468,624671471,ES
-624671472,624671475,FR
-624671476,624671479,ES
-624671480,624671483,FR
-624671484,624671487,GB
-624671488,624671743,FR
-624671744,624671775,IT
-624671776,624671807,DE
-624671808,624671823,PL
-624671824,624671831,FR
-624671832,624671839,DE
-624671840,624671855,PL
-624671856,624671887,FR
-624671888,624671895,PT
-624671896,624671903,DE
-624671904,624671919,PL
-624671920,624671927,FR
-624671928,624671935,IT
-624671936,624671943,CZ
-624671944,624671967,FR
-624671968,624671999,IT
-624672000,624672015,FR
-624672016,624672019,GB
-624672020,624672023,DE
-624672024,624672055,FR
-624672056,624672063,NL
-624672064,624672067,FR
-624672068,624672071,DE
-624672072,624672079,PL
-624672080,624672083,DE
-624672084,624672127,PT
-624672128,624672131,GB
-624672132,624672135,PL
-624672136,624672151,FR
-624672152,624672159,PL
-624672160,624672179,FR
-624672180,624672183,IE
-624672184,624672207,FR
-624672208,624672223,PT
-624672224,624672255,GB
-624672256,624672511,FR
-624672512,624672515,GB
-624672516,624672523,FR
-624672524,624672527,DE
-624672528,624672547,FR
-624672548,624672551,PL
-624672552,624672555,IT
-624672556,624672559,DE
-624672560,624672563,IE
-624672564,624672575,FR
-624672576,624672607,PT
-624672608,624672615,GB
-624672616,624672619,PT
-624672620,624672623,PL
-624672624,624672655,FR
-624672656,624672659,DE
-624672660,624672735,FR
-624672736,624672767,PT
-624672768,624672927,FR
-624672928,624672943,PL
-624672944,624672951,FR
-624672952,624672959,ES
-624672960,624672991,NL
-624672992,624673003,FR
-624673004,624673007,PL
-624673008,624673279,FR
-624673280,624673283,PL
-624673284,624673287,FR
-624673288,624673295,GB
-624673296,624673299,FR
-624673300,624673303,PT
-624673304,624673307,NL
-624673308,624673311,BE
-624673312,624673343,FR
-624673344,624673375,BE
-624673376,624673407,FR
-624673408,624673431,PL
-624673432,624673439,PT
-624673440,624673447,BE
-624673448,624673451,FR
-624673452,624673455,PL
-624673456,624673459,CH
-624673460,624673471,PL
-624673472,624673487,DE
-624673488,624673503,PL
-624673504,624673511,ES
-624673512,624673535,FR
+624668644,624669795,FR
+624669796,624669799,ES
+624669800,624672547,FR
+624672548,624672551,ES
+624672552,624673451,FR
+624673452,624673455,ES
+624673456,624673535,FR
624673536,624673791,ES
-624673792,624673799,PL
-624673800,624673803,IT
-624673804,624673807,DE
-624673808,624673811,PL
-624673812,624673815,LT
-624673816,624673839,FR
-624673840,624673855,PL
-624673856,624673859,IT
-624673860,624673863,FR
-624673864,624673871,CZ
-624673872,624673879,GB
-624673880,624673887,FR
-624673888,624673891,PL
-624673892,624673895,FR
-624673896,624673903,GB
-624673904,624673927,ES
-624673928,624673931,DE
-624673932,624673935,FR
-624673936,624673939,NL
-624673940,624673943,ES
-624673944,624673951,NL
-624673952,624673955,DE
-624673956,624673959,PL
-624673960,624673963,GB
-624673964,624673967,DE
-624673968,624673983,FR
-624673984,624673987,DE
-624673988,624673991,ES
-624673992,624673995,IT
-624673996,624673999,FR
-624674000,624674003,NL
-624674004,624674007,ES
-624674008,624674011,IT
-624674012,624674015,GB
-624674016,624674047,PT
-624674048,624674303,ES
-624674304,624674307,GB
-624674308,624674311,PL
-624674312,624674351,FR
-624674352,624674367,FI
-624674368,624674383,DE
-624674384,624674395,IT
-624674396,624674399,PL
-624674400,624674403,DE
-624674404,624674407,PL
-624674408,624674411,DE
-624674412,624674415,ES
-624674416,624674431,FR
-624674432,624674435,PL
-624674436,624674447,FR
-624674448,624674451,GB
-624674452,624674455,ES
-624674456,624674459,IT
-624674460,624674463,ES
-624674464,624674495,FR
-624674496,624674503,GB
-624674504,624674511,FR
-624674512,624674527,NL
-624674528,624674623,FR
-624674624,624674655,ES
-624674656,624674687,FR
-624674688,624674703,DE
-624674704,624674707,PL
-624674708,624674711,DE
-624674712,624674715,PL
-624674716,624674719,BE
-624674720,624674739,PL
-624674740,624674743,NL
-624674744,624674751,ES
-624674752,624674815,FR
-624674816,624674847,CH
-624674848,624674879,FR
-624674880,624674911,NL
-624674912,624674919,GB
-624674920,624674927,IT
-624674928,624674935,FR
-624674936,624674943,PT
-624674944,624675027,FR
-624675028,624675031,PL
-624675032,624675039,FR
-624675040,624675043,IE
-624675044,624675047,FR
-624675048,624675055,ES
-624675056,624675059,PL
-624675060,624675071,FR
-624675072,624675327,DE
-624675328,624675343,FR
-624675344,624675347,CZ
-624675348,624675351,NL
-624675352,624675359,PT
-624675360,624675375,FR
-624675376,624675383,IT
-624675384,624675387,NL
-624675388,624675391,FR
-624675392,624675423,ES
-624675424,624675439,FR
-624675440,624675447,PL
-624675448,624675535,FR
-624675536,624675543,GB
-624675544,624675547,FI
-624675548,624675583,PL
-624675584,624675615,FR
-624675616,624675623,IT
-624675624,624675631,FR
-624675632,624675639,GB
-624675640,624675647,FR
-624675648,624675651,FI
-624675652,624675663,ES
-624675664,624675679,IT
-624675680,624675683,NL
-624675684,624675687,PT
-624675688,624675691,PL
-624675692,624675695,IT
-624675696,624675711,FR
-624675712,624675719,ES
-624675720,624675727,NL
-624675728,624675731,PL
-624675732,624675743,FR
-624675744,624675775,BE
-624675776,624675787,PL
-624675788,624675791,FR
-624675792,624675799,GB
-624675800,624675803,CZ
-624675804,624675807,ES
-624675808,624675839,GB
-624675840,624675871,FR
-624675872,624675903,NL
-624675904,624675919,PL
-624675920,624675947,FR
-624675948,624675951,PL
-624675952,624675999,FR
-624676000,624676003,PL
+624673792,624673903,FR
+624673904,624673919,ES
+624673920,624675691,FR
+624675692,624675695,ES
+624675696,624675775,FR
+624675776,624675779,ES
+624675780,624676003,FR
624676004,624676007,DE
-624676008,624676019,FR
-624676020,624676023,IT
-624676024,624676027,PT
-624676028,624676031,FR
-624676032,624676063,PL
-624676064,624676067,NL
-624676068,624676071,LU
-624676072,624676075,ES
-624676076,624676087,FR
+624676008,624676087,FR
624676088,624676091,DE
-624676092,624676095,FR
-624676096,624676099,PL
-624676100,624676103,FR
-624676104,624676111,GB
-624676112,624676115,NL
-624676116,624676119,GB
-624676120,624676123,DE
-624676124,624676127,FR
-624676128,624676135,NL
-624676136,624676139,BE
-624676140,624676143,FR
-624676144,624676159,PL
-624676160,624676175,CH
-624676176,624676179,NL
-624676180,624676183,DE
-624676184,624676191,NL
-624676192,624676207,FR
-624676208,624676215,ES
-624676216,624676219,PL
-624676220,624676223,ES
-624676224,624676311,FR
-624676312,624676315,PL
-624676316,624676319,NL
-624676320,624676327,GB
-624676328,624676363,FR
-624676364,624676367,NL
-624676368,624676399,FR
-624676400,624676403,GB
-624676404,624676431,FR
-624676432,624676435,PL
-624676436,624676439,ES
-624676440,624676447,NL
-624676448,624676479,IE
-624676480,624676503,FR
-624676504,624676507,GB
-624676508,624676511,FR
-624676512,624676607,ES
-624676608,624676611,FR
-624676612,624676615,PT
-624676616,624676623,GB
-624676624,624676627,PL
-624676628,624676631,GB
-624676632,624676635,IT
-624676636,624676639,FR
-624676640,624676671,NL
-624676672,624676687,PT
-624676688,624676703,FR
-624676704,624676711,BE
-624676712,624676715,FR
-624676716,624676719,IT
-624676720,624676735,FR
-624676736,624676799,BE
-624676800,624676863,PT
-624676864,624676911,FR
-624676912,624676919,BE
-624676920,624676923,FR
-624676924,624676927,ES
-624676928,624676935,CH
-624676936,624676939,PL
-624676940,624676943,PT
-624676944,624676947,PL
-624676948,624676951,GB
-624676952,624676959,NL
-624676960,624676991,FR
-624676992,624677119,PT
-624677120,624677255,FR
-624677256,624677259,ES
-624677260,624677263,NL
-624677264,624677271,CZ
-624677272,624677279,PT
-624677280,624677283,PL
-624677284,624677287,ES
-624677288,624677303,FR
-624677304,624677307,DE
-624677308,624677311,IT
-624677312,624677343,NL
-624677344,624677367,FR
-624677368,624677375,IE
-624677376,624677379,CH
-624677380,624677383,ES
-624677384,624677391,DE
-624677392,624677395,PT
-624677396,624677399,FR
-624677400,624677403,FI
-624677404,624677407,DE
-624677408,624677439,GB
-624677440,624677443,ES
-624677444,624677447,PL
-624677448,624677459,FR
-624677460,624677463,ES
-624677464,624677467,IE
-624677468,624677471,GB
-624677472,624677519,FR
-624677520,624677535,DE
-624677536,624677567,PT
-624677568,624677583,FR
-624677584,624677587,ES
-624677588,624677599,PL
-624677600,624677603,CH
-624677604,624677607,GB
-624677608,624677615,CZ
-624677616,624677627,PL
-624677628,624677631,GB
-624677632,624677671,FR
-624677672,624677679,GB
-624677680,624677683,PL
-624677684,624677695,GB
-624677696,624677703,FR
-624677704,624677711,ES
-624677712,624677731,FR
-624677732,624677735,PL
-624677736,624677743,ES
-624677744,624677751,GB
-624677752,624677759,FR
-624677760,624677763,NL
-624677764,624677767,PL
-624677768,624677775,GB
-624677776,624677783,DE
-624677784,624677787,FR
-624677788,624677791,PL
-624677792,624677799,NL
-624677800,624677803,GB
-624677804,624677807,PL
-624677808,624677959,FR
-624677960,624677967,IE
-624677968,624677983,TN
-624677984,624678015,PT
-624678016,624678183,FR
-624678184,624678195,PL
-624678196,624678199,FR
-624678200,624678239,ES
-624678240,624678255,FR
-624678256,624678259,PL
-624678260,624678263,FR
-624678264,624678279,ES
-624678280,624678283,LT
-624678284,624678287,FR
-624678288,624678311,GB
-624678312,624678319,FR
-624678320,624678335,ES
-624678336,624678351,FR
-624678352,624678355,PT
-624678356,624678359,PL
-624678360,624678363,ES
-624678364,624678367,FR
-624678368,624678375,CH
-624678376,624678383,ES
-624678384,624678387,FR
-624678388,624678395,PT
-624678396,624678399,FR
-624678400,624678415,IE
-624678416,624678463,FR
-624678464,624678479,CH
-624678480,624678483,FR
-624678484,624678487,ES
-624678488,624678491,PT
-624678492,624678511,FR
-624678512,624678527,PL
-624678528,624678559,PT
-624678560,624678563,IT
-624678564,624678567,DE
-624678568,624678591,FR
-624678592,624678655,NL
-624678656,624678663,FR
-624678664,624678667,ES
-624678668,624678671,DE
-624678672,624678687,FR
-624678688,624678695,LT
-624678696,624678703,IT
-624678704,624678707,NL
-624678708,624678711,DE
-624678712,624678715,FR
-624678716,624678719,PL
-624678720,624678723,ES
-624678724,624678727,PL
-624678728,624678735,IT
-624678736,624678743,FR
-624678744,624678747,CH
-624678748,624678751,BE
-624678752,624678783,NL
-624678784,624678847,FR
-624678848,624678855,GB
-624678856,624678863,PL
-624678864,624678879,PT
-624678880,624678887,PL
-624678888,624678891,DE
-624678892,624678895,IE
-624678896,624678899,IT
-624678900,624678903,GB
-624678904,624678907,ES
-624678908,624678911,FR
-624678912,624679167,GB
-624679168,624679175,PL
-624679176,624679183,DE
-624679184,624679199,PL
-624679200,624679203,GB
-624679204,624679207,FR
-624679208,624679211,ES
-624679212,624679215,IT
-624679216,624679231,IE
-624679232,624679247,FR
-624679248,624679255,PT
-624679256,624679259,PL
-624679260,624679263,ES
-624679264,624679295,FR
-624679296,624679299,PL
-624679300,624679303,ES
-624679304,624679307,FR
-624679308,624679311,GB
-624679312,624679327,FR
-624679328,624679331,PL
-624679332,624679335,DE
-624679336,624679339,FR
-624679340,624679343,DE
-624679344,624679359,FR
-624679360,624679391,IE
-624679392,624679407,BE
-624679408,624679423,PL
-624679424,624679679,DE
-624679680,624679687,PL
-624679688,624679711,FR
-624679712,624679743,BE
-624679744,624679747,CZ
-624679748,624679751,PT
-624679752,624679767,PL
-624679768,624679771,NL
-624679772,624679775,PL
-624679776,624679779,FR
-624679780,624679783,NL
-624679784,624679815,FR
-624679816,624679819,IT
-624679820,624679823,PL
-624679824,624679827,PT
-624679828,624679831,DE
-624679832,624679839,GB
-624679840,624679843,FR
-624679844,624679847,PL
-624679848,624679851,PT
-624679852,624679855,IE
-624679856,624679859,PL
-624679860,624679863,FR
-624679864,624679867,ES
-624679868,624679871,FR
-624679872,624679903,GB
-624679904,624679907,IT
-624679908,624679911,PL
-624679912,624679915,ES
-624679916,624679919,FR
-624679920,624679923,BE
-624679924,624679927,FR
-624679928,624679935,IE
-624679936,624680463,FR
-624680464,624680467,PL
-624680468,624680475,FR
-624680476,624680479,PL
-624680480,624680499,FR
-624680500,624680503,NL
-624680504,624680507,PL
-624680508,624680539,FR
-624680540,624680543,IT
-624680544,624680559,FR
-624680560,624680563,PL
-624680564,624680567,NL
-624680568,624680639,FR
-624680640,624680703,FI
-624680704,624680743,FR
-624680744,624680747,BE
-624680748,624680751,NL
-624680752,624680767,PL
-624680768,624680783,CZ
-624680784,624680799,GB
-624680800,624680815,FR
-624680816,624680831,DE
-624680832,624680847,FR
-624680848,624680863,PT
-624680864,624680927,FR
-624680928,624680931,DE
-624680932,624680935,GB
-624680936,624680939,ES
-624680940,624680943,NL
-624680944,624680951,FR
-624680952,624680959,PT
-624680960,624680991,FR
-624680992,624680995,FI
-624680996,624681023,FR
-624681024,624681055,ES
-624681056,624681071,FR
-624681072,624681079,PL
-624681080,624681083,DE
-624681084,624681087,ES
-624681088,624681095,GB
-624681096,624681103,NL
-624681104,624681111,FR
-624681112,624681115,DE
-624681116,624681151,FR
-624681152,624681215,PT
-624681216,624681247,PL
-624681248,624681255,IT
-624681256,624681259,FR
-624681260,624681263,PL
-624681264,624681267,FR
-624681268,624681271,CZ
-624681272,624681279,GB
-624681280,624681311,FR
-624681312,624681327,PL
-624681328,624681331,CH
-624681332,624681335,PL
-624681336,624681343,FR
-624681344,624681347,CH
-624681348,624681359,FR
-624681360,624681363,PL
-624681364,624681367,CZ
-624681368,624681375,PL
-624681376,624681439,FR
-624681440,624681447,GB
-624681448,624681451,DE
-624681452,624681455,PL
-624681456,624681459,GB
-624681460,624681463,IT
-624681464,624681471,PL
-624681472,624681727,GB
-624681728,624681763,PL
-624681764,624681767,FR
-624681768,624681771,BE
-624681772,624681775,DE
-624681776,624681791,FR
-624681792,624681795,PL
-624681796,624681803,FR
-624681804,624681823,PL
-624681824,624681855,CZ
-624681856,624681919,FR
-624681920,624681923,DE
-624681924,624681927,IE
-624681928,624681931,PL
-624681932,624681967,FR
-624681968,624681971,PL
-624681972,624681975,BE
-624681976,624681979,IE
-624681980,624681983,ES
-624681984,624681999,PL
-624682000,624682003,ES
-624682004,624682007,PL
-624682008,624682047,FR
-624682048,624682059,GB
-624682060,624682063,IE
-624682064,624682071,PT
-624682072,624682075,GB
-624682076,624682079,PL
-624682080,624682083,FR
-624682084,624682087,NL
-624682088,624682103,FR
-624682104,624682111,IE
-624682112,624682127,PL
-624682128,624682143,ES
-624682144,624682167,FR
-624682168,624682175,GB
-624682176,624682207,FR
-624682208,624682215,BE
-624682216,624682223,PL
-624682224,624682259,FR
-624682260,624682263,GB
-624682264,624682267,ES
-624682268,624682271,PT
-624682272,624682303,FR
-624682304,624682319,BE
-624682320,624682323,ES
-624682324,624682335,PL
-624682336,624682339,FR
-624682340,624682343,GB
-624682344,624682347,PL
-624682348,624682351,ES
-624682352,624682355,IT
-624682356,624682359,FR
-624682360,624682367,ES
-624682368,624682495,FR
-624682496,624682559,ES
-624682560,624682623,FR
-624682624,624682639,ES
-624682640,624682655,BE
-624682656,624682687,ES
-624682688,624682751,FR
-624682752,624682767,DE
-624682768,624682783,FR
-624682784,624682787,ES
-624682788,624682791,IT
-624682792,624682795,DE
-624682796,624682799,ES
-624682800,624682879,FR
-624682880,624682911,GB
-624682912,624682919,NL
-624682920,624682927,IE
-624682928,624682931,PL
-624682932,624682935,FR
-624682936,624682939,PL
-624682940,624682943,DE
-624682944,624682967,PL
-624682968,624682971,GB
-624682972,624682975,PT
-624682976,624682991,IT
-624682992,624683011,FR
-624683012,624683015,PL
-624683016,624683023,ES
-624683024,624683031,PL
-624683032,624683039,GB
-624683040,624683047,BE
-624683048,624683051,FR
-624683052,624683055,IT
-624683056,624683063,ES
-624683064,624683067,FR
-624683068,624683071,GB
-624683072,624683079,FR
-624683080,624683083,PL
-624683084,624683087,FR
-624683088,624683095,GB
-624683096,624683099,NL
-624683100,624683103,FR
-624683104,624683119,ES
-624683120,624683243,FR
-624683244,624683251,PL
-624683252,624683295,FR
-624683296,624683311,IT
-624683312,624683327,FR
-624683328,624683335,GB
-624683336,624683339,BE
-624683340,624683343,ES
-624683344,624683351,IE
-624683352,624683359,DE
-624683360,624683371,FR
-624683372,624683375,ES
-624683376,624683379,FR
-624683380,624683383,IT
-624683384,624683387,FR
-624683388,624683391,GB
-624683392,624683491,FR
-624683492,624683495,NL
-624683496,624683519,FR
-624683520,624683583,PT
-624683584,624683631,FR
-624683632,624683647,ES
-624683648,624683679,FR
-624683680,624683687,PT
-624683688,624683695,PL
-624683696,624683759,FR
-624683760,624683775,PL
-624683776,624683777,FR
-624683778,624683781,DE
-624683782,624683783,FR
-624683784,624683785,CZ
-624683786,624683789,DE
-624683790,624683799,FR
-624683800,624683803,FI
-624683804,624683807,FR
-624683808,624683811,ES
-624683812,624683823,DE
-624683824,624683839,FR
-624683840,624683843,IT
-624683844,624683847,PT
-624683848,624683879,FR
-624683880,624683883,NL
-624683884,624683887,GB
-624683888,624683895,PL
-624683896,624683911,FR
-624683912,624683923,PL
-624683924,624683927,ES
-624683928,624683943,FR
-624683944,624683947,PL
-624683948,624683951,FI
-624683952,624683967,PL
-624683968,624683971,IE
-624683972,624683975,DE
+624676092,624676715,FR
+624676716,624676719,ES
+624676720,624677463,FR
+624677464,624677467,ES
+624677468,624679199,FR
+624679200,624679203,ES
+624679204,624679843,FR
+624679844,624679847,ES
+624679848,624681807,FR
+624681808,624681823,BE
+624681824,624683775,FR
+624683776,624683779,DE
+624683780,624683783,FR
+624683784,624683787,DE
+624683788,624683975,FR
624683976,624683983,GB
-624683984,624683991,PL
-624683992,624683999,GB
-624684000,624684007,NL
-624684008,624684015,FR
-624684016,624684019,DE
-624684020,624684023,CH
-624684024,624684027,GB
-624684028,624684031,CH
-624684032,624684039,FR
-624684040,624684043,DE
-624684044,624684051,FR
-624684052,624684055,ES
-624684056,624684063,NL
-624684064,624684071,PT
-624684072,624684079,FR
-624684080,624684095,DE
-624684096,624684103,PT
-624684104,624684107,IE
-624684108,624684111,PL
-624684112,624684127,NL
-624684128,624684131,GB
-624684132,624684135,NL
-624684136,624684143,FR
-624684144,624684151,IT
-624684152,624684155,NL
-624684156,624684159,FR
-624684160,624684163,IT
-624684164,624684167,FR
-624684168,624684171,IT
-624684172,624684175,PL
-624684176,624684187,FR
-624684188,624684191,PL
-624684192,624684195,CH
-624684196,624684199,PL
-624684200,624684203,GB
-624684204,624684207,PL
+624683984,624684207,FR
624684208,624684211,ES
-624684212,624684219,FR
-624684220,624684223,DE
-624684224,624684335,FR
-624684336,624684343,IT
-624684344,624684347,FR
-624684348,624684351,GB
-624684352,624684359,PL
-624684360,624684363,DE
-624684364,624684371,PL
-624684372,624684379,FR
-624684380,624684383,GB
-624684384,624684399,IE
-624684400,624684415,FR
-624684416,624684419,PT
-624684420,624684447,FR
-624684448,624684479,GB
-624684480,624684511,FI
-624684512,624684543,NL
-624684544,624684583,FR
-624684584,624684587,PL
-624684588,624684591,ES
-624684592,624684599,FR
-624684600,624684603,PL
-624684604,624684607,FR
-624684608,624684615,ES
-624684616,624684619,IT
-624684620,624684639,PL
-624684640,624684655,ES
-624684656,624684671,FR
-624684672,624684679,DE
-624684680,624684683,FR
-624684684,624684687,CZ
-624684688,624684703,IE
-624684704,624684711,GB
-624684712,624684719,BE
-624684720,624684767,FR
-624684768,624684775,IE
-624684776,624684779,IT
-624684780,624684799,FR
+624684212,624684799,FR
624684800,624684803,DE
-624684804,624684807,PL
-624684808,624684815,DE
-624684816,624684831,GB
-624684832,624684839,PL
-624684840,624684843,ES
-624684844,624684847,PT
-624684848,624684863,FR
-624684864,624684867,GB
-624684868,624684871,FR
-624684872,624684879,DE
-624684880,624684883,FR
-624684884,624684887,ES
-624684888,624684891,FR
-624684892,624684895,NL
-624684896,624684899,FR
-624684900,624684903,BE
-624684904,624684907,GB
-624684908,624684911,ES
-624684912,624684915,PL
-624684916,624684919,FR
-624684920,624684927,PL
-624684928,624684991,FR
-624684992,624685023,NL
-624685024,624685027,PL
-624685028,624685031,FR
-624685032,624685035,PL
-624685036,624685039,ES
-624685040,624685047,PL
-624685048,624685051,FR
-624685052,624685055,CZ
-624685056,624685059,GB
-624685060,624685063,PL
-624685064,624685071,FR
-624685072,624685075,ES
-624685076,624685087,FR
-624685088,624685095,PL
-624685096,624685103,FR
-624685104,624685119,ES
-624685120,624685167,FR
-624685168,624685183,PL
-624685184,624685223,FR
-624685224,624685227,ES
-624685228,624685231,PL
-624685232,624685235,CZ
-624685236,624685239,BE
-624685240,624685243,IE
-624685244,624685247,BE
-624685248,624685279,FR
-624685280,624685311,GB
-624685312,624685327,FR
-624685328,624685343,DE
-624685344,624685439,FR
-624685440,624685443,PL
-624685444,624685447,GB
-624685448,624685451,FR
-624685452,624685455,PL
-624685456,624685471,CH
-624685472,624685483,PL
-624685484,624685503,FR
-624685504,624685535,ES
-624685536,624685539,FR
-624685540,624685543,GB
-624685544,624685551,FR
-624685552,624685555,ES
-624685556,624685567,PL
-624685568,624685679,FR
-624685680,624685683,PL
-624685684,624685687,FI
-624685688,624685695,FR
-624685696,624685703,IE
-624685704,624685707,IT
-624685708,624685711,DE
+624684804,624685711,FR
624685712,624685715,ES
-624685716,624685719,FR
-624685720,624685723,IE
-624685724,624685727,DE
-624685728,624685759,FR
-624685760,624685775,ES
-624685776,624685791,FR
-624685792,624685799,PL
-624685800,624685803,GB
-624685804,624685807,IT
-624685808,624685815,FR
-624685816,624685823,GB
-624685824,624685887,FR
-624685888,624685919,PT
-624685920,624685923,FR
-624685924,624685927,NL
-624685928,624685935,GB
-624685936,624685943,IT
-624685944,624685951,FR
-624685952,624685967,FI
-624685968,624685987,IE
-624685988,624685991,FR
-624685992,624685999,DE
-624686000,624686003,LT
-624686004,624686007,GB
-624686008,624686015,ES
-624686016,624686399,FR
-624686400,624686419,DE
-624686420,624686439,FR
-624686440,624686443,IT
-624686444,624686447,PT
-624686448,624686611,FR
-624686612,624686615,FI
-624686616,624686623,PL
-624686624,624686627,DE
-624686628,624686663,FR
-624686664,624686671,PL
-624686672,624686687,FI
-624686688,624686695,FR
-624686696,624686699,IT
-624686700,624686703,PT
-624686704,624686707,LT
-624686708,624686711,IE
-624686712,624686715,FR
-624686716,624686719,ES
-624686720,624686751,IE
-624686752,624686815,FR
-624686816,624686847,GB
-624686848,624686855,FR
-624686856,624686859,PL
-624686860,624686863,CZ
-624686864,624686867,CH
-624686868,624686879,FR
-624686880,624686887,GB
-624686888,624686947,FR
-624686948,624686955,CZ
-624686956,624686959,FR
-624686960,624686975,GB
-624686976,624687039,FR
-624687040,624687055,PL
-624687056,624687071,DE
-624687072,624687103,FR
-624687104,624687231,DE
-624687232,624687295,FR
-624687296,624687327,CH
-624687328,624687343,PL
-624687344,624687347,CZ
-624687348,624687351,PL
-624687352,624687615,FR
-624687616,624687619,PT
-624687620,624687623,DE
-624687624,624687627,GB
-624687628,624687679,FR
-624687680,624687695,PT
-624687696,624687707,FR
-624687708,624687711,DE
-624687712,624687783,FR
-624687784,624687791,PT
-624687792,624687819,FR
-624687820,624687823,NL
-624687824,624687827,PT
+624685716,624685799,FR
+624685800,624685803,ES
+624685804,624685919,FR
+624685920,624685923,ES
+624685924,624686627,FR
+624686628,624686631,ES
+624686632,624686667,FR
+624686668,624686671,ES
+624686672,624686711,FR
+624686712,624686715,ES
+624686716,624687343,FR
+624687344,624687346,CZ
+624687347,624687347,ES
+624687348,624687827,FR
624687828,624687831,ES
-624687832,624687835,CZ
-624687836,624687839,ES
-624687840,624687903,FR
-624687904,624687919,ES
-624687920,624687923,PL
-624687924,624687927,ES
-624687928,624687967,FR
-624687968,624687983,IT
-624687984,624687999,FR
-624688000,624688003,PL
-624688004,624688015,FR
-624688016,624688031,GB
-624688032,624688039,FR
-624688040,624688047,PL
-624688048,624688127,FR
-624688128,624688143,PT
-624688144,624688151,ES
-624688152,624688159,FR
-624688160,624688167,ES
-624688168,624688171,FR
-624688172,624688175,ES
-624688176,624688223,IE
-624688224,624688239,FR
-624688240,624688255,NL
-624688256,624688303,IE
-624688304,624688315,PL
-624688316,624688319,GB
-624688320,624688323,IT
-624688324,624688327,NL
-624688328,624688335,PL
-624688336,624688343,FR
-624688344,624688347,GB
-624688348,624688351,FR
-624688352,624688399,IE
-624688400,624688435,FR
-624688436,624688439,IE
-624688440,624688443,ES
-624688444,624688479,FR
-624688480,624688483,ES
-624688484,624688487,CZ
-624688488,624688491,PL
-624688492,624688495,GB
-624688496,624688575,PL
-624688576,624688639,DE
-624688640,624688643,PL
-624688644,624688647,IT
-624688648,624688655,PT
-624688656,624688663,NL
-624688664,624688671,ES
-624688672,624688691,PL
+624687832,624688307,FR
+624688308,624688311,ES
+624688312,624688487,FR
+624688488,624688491,ES
+624688492,624688639,FR
+624688640,624688643,ES
+624688644,624688691,FR
624688692,624688695,ES
-624688696,624688699,PL
-624688700,624688703,FI
-624688704,624688719,FR
-624688720,624688723,ES
-624688724,624688727,GB
-624688728,624688731,FR
-624688732,624688735,PL
-624688736,624688751,DE
-624688752,624688767,FR
-624688768,624688775,GB
-624688776,624688779,FR
-624688780,624688795,PL
-624688796,624688799,DE
-624688800,624688815,NL
-624688816,624688831,PL
-624688832,624688863,FR
-624688864,624688895,NL
-624688896,624688927,FR
-624688928,624688935,PL
-624688936,624688943,CH
-624688944,624688951,FR
-624688952,624688955,LT
-624688956,624688959,PL
-624688960,624688975,FR
-624688976,624688991,DE
-624688992,624688999,FR
-624689000,624689007,PT
-624689008,624689015,IE
-624689016,624689019,NL
-624689020,624689023,IT
-624689024,624689031,FR
-624689032,624689039,FI
-624689040,624689059,FR
-624689060,624689063,CZ
-624689064,624689067,ES
-624689068,624689071,FR
-624689072,624689075,ES
-624689076,624689079,BE
-624689080,624689083,FR
-624689084,624689087,NL
-624689088,624689103,GB
-624689104,624689111,IT
-624689112,624689115,NL
-624689116,624689119,FR
-624689120,624689123,GB
-624689124,624689131,FR
-624689132,624689135,GB
-624689136,624689143,BE
-624689144,624689147,DE
-624689148,624689151,FR
+624688696,624688779,FR
+624688780,624688783,ES
+624688784,624688791,FR
+624688792,624688795,ES
+624688796,624688831,FR
+624688832,624688835,ES
+624688836,624689076,FR
+624689077,624689078,BE
+624689079,624689151,FR
624689152,624691199,DE
624691200,624693247,FR
624693248,624695295,RU
@@ -13256,11 +3974,7 @@
624723968,624726015,BG
624726016,624728063,PS
624728064,624730111,FR
-624730112,624731951,A2
-624731952,624731967,DK
-624731968,624732031,A2
-624732032,624732079,DK
-624732080,624732159,A2
+624730112,624732159,DK
624732160,624734207,DE
624734208,624736255,RU
624736256,624738303,FR
@@ -13277,8 +3991,7 @@
624803840,624812031,DE
624812032,624813055,BO
624813056,624814079,IL
-624814080,624814335,NL
-624814336,624816127,GB
+624814080,624816127,GB
624816128,624818175,FR
624818176,624820223,ES
624820224,624885759,BE
@@ -13295,19 +4008,13 @@
625506304,625508351,PL
625508352,625512447,AZ
625512448,625514495,DE
-625514496,625515775,GB
-625515776,625516543,GG
+625514496,625515263,GB
+625515264,625516031,GG
+625516032,625516543,GB
625516544,625518591,BE
-625518592,625518631,US
-625518632,625518647,NL
-625518648,625518847,US
-625518848,625519615,NL
-625519616,625519999,US
-625520000,625520071,NL
-625520072,625520079,US
-625520080,625520127,NL
-625520128,625520135,US
-625520136,625520639,NL
+625518592,625518847,NL
+625518848,625519103,US
+625519104,625520639,NL
625520640,625522687,RU
625522688,625523967,SE
625523968,625524479,US
@@ -13322,8 +4029,8 @@
625688576,625704959,MD
625704960,625707007,GE
625707008,625709055,AT
-625709056,625709183,JO
-625709184,625713151,NL
+625709056,625711103,JO
+625711104,625713151,NL
625713152,625721343,DK
625721344,625725439,RU
625725440,625727487,PS
@@ -13337,7 +4044,7 @@
625786880,625795071,PS
625795072,625803263,SA
625803264,625811455,TR
-625811456,625815551,NL
+625811456,625815551,FR
625815552,625817599,IQ
625817600,625817911,NL
625817912,625817915,GB
@@ -13347,26 +4054,22 @@
625827840,625829887,IT
625829888,625831935,RU
625831936,625836031,IT
-625836032,625836251,KZ
-625836252,625836255,RU
-625836256,625836263,KZ
-625836264,625838079,RU
+625836032,625838079,RU
625838080,625840127,IT
625840128,625842175,GB
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
625868800,625999871,RU
625999872,627048447,DE
627048448,627113983,DK
-627113984,627179519,RO
+627113984,627145727,RO
+627145728,627146751,ES
+627146752,627179519,NL
627179520,627212287,IR
627212288,627216383,FI
627216384,627218431,GB
@@ -13376,8 +4079,6 @@
627230720,627232767,IR
627232768,627236863,PL
627236864,627238911,IQ
-627238912,627239167,US
-627239168,627240959,EU
627240960,627245055,RU
627245056,627277823,KZ
627277824,627294207,SA
@@ -13390,63 +4091,34 @@
627834880,627965951,PL
627965952,628006911,RU
628006912,628015103,GE
-628015104,628015791,FR
-628015792,628015807,GB
-628015808,628015831,FR
-628015832,628015871,GB
-628015872,628016087,FR
-628016088,628016127,GB
-628016128,628016231,FR
-628016232,628016239,GB
-628016240,628016297,FR
-628016298,628016298,ES
-628016299,628016319,FR
-628016320,628016351,GB
-628016352,628016479,FR
-628016480,628016511,GB
-628016512,628016603,FR
-628016604,628016639,GB
-628016640,628016863,FR
-628016864,628016895,GB
-628016896,628017107,FR
-628017108,628017151,GB
+628015104,628017151,GB
628017152,628019199,CH
628019200,628021247,UZ
-628021248,628021248,GB
-628021249,628021503,IE
-628021504,628021504,GB
-628021505,628022015,IE
-628022016,628022016,GB
-628022017,628022442,IE
-628022443,628023295,GB
+628021248,628023295,GB
628023296,628029439,RU
628029440,628031487,GB
628031488,628097023,HU
628097024,628230143,RU
628230144,628232191,IT
628232192,628236287,RU
-628236288,628239103,DE
-628239104,628239359,LU
-628239360,628244479,DE
+628236288,628244479,DE
628244480,628246527,FR
628246528,628248575,MT
-628248576,628249599,NL
-628249600,628250623,FI
+628248576,628250623,FI
628250624,628252671,NL
-628252672,628255487,DE
-628255488,628255743,NL
-628255744,628260863,DE
+628252672,628259071,DE
+628259072,628260863,SC
628260864,628277247,AZ
628277248,628293631,IR
628293632,628359167,UA
628359168,628621311,IT
-628621312,628686847,RO
+628621312,628654079,DE
+628654080,628662271,RO
+628662272,628670463,DE
+628670464,628686847,RO
628686848,628752383,SA
628752384,628785151,RU
-628785152,628786943,CH
-628786944,628787007,PL
-628787008,628787039,NL
-628787040,628787199,CH
+628785152,628787199,CH
628787200,628789247,TR
628789248,628791295,SE
628791296,628793343,IL
@@ -13466,11 +4138,14 @@
628847360,628847615,FR
628847616,628848639,GB
628848640,628850687,DE
-628850688,628852735,NO
-628852736,628867071,SE
+628850688,628850943,SE
+628850944,628851199,NO
+628851200,628851455,SE
+628851456,628852479,NO
+628852480,628867071,SE
628867072,628869119,IR
628869120,628871167,PL
-628871168,628873215,NL
+628871168,628873215,US
628873216,628875263,RU
628875264,628877311,SE
628877312,628879359,BE
@@ -13501,7 +4176,8 @@
629327872,629329919,IR
629329920,629331967,ES
629331968,629334015,IT
-629334016,629338111,GB
+629334016,629334271,NL
+629334272,629338111,GB
629338112,629340159,BG
629340160,629342207,GB
629342208,629374975,BH
@@ -13510,34 +4186,29 @@
629389312,629391359,CH
629391360,629399551,RU
629399552,629401599,GE
-629401600,629401983,DE
-629401984,629401991,CH
-629401992,629405695,DE
+629401600,629405695,DE
629405696,629407743,TR
629407744,629669887,ES
629669888,629735423,FI
629735424,629800959,IR
629800960,629866495,DE
-629866496,629879807,RU
+629866496,629874687,NL
+629874688,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
+629881856,629882879,DE
+629882880,629883135,GB
629883136,629883391,AU
-629883392,629883903,EU
629883904,629884159,AU
-629884160,629884671,EU
+629884416,629884671,CL
629884672,629884927,AU
629884928,629886975,PL
629886976,629889023,RU
629889024,629891071,IT
629891072,629895167,UA
629895168,629897215,AL
-629897216,629901311,ES
+629897216,629899263,ES
629901312,629903359,NL
629903360,629905407,PL
629905408,629907455,SE
@@ -13575,25 +4246,20 @@
630491136,630493183,DE
630493184,630495231,NO
630495232,630497279,DE
-630497280,630498054,NL
-630498055,630498055,RU
-630498056,630499076,NL
-630499077,630499077,RU
-630499078,630499327,NL
+630497280,630499327,NL
630499328,630501375,LV
-630501376,630503423,BE
-630503424,630505831,NL
-630505832,630505839,BE
-630505840,630509567,NL
+630501376,630509567,NL
630509568,630511615,TR
-630511616,630511871,AU
-630511872,630513663,GB
+630511616,630513663,GB
630513664,630515711,IT
630515712,630517759,DE
630517760,630519807,GB
-630519808,630521855,IE
-630521856,630523135,GR
-630523136,630587391,CY
+630521856,630538239,GR
+630538240,630539263,CY
+630539264,630554623,GR
+630554624,630556671,CY
+630556672,630571007,GR
+630571008,630587391,CY
630587392,630718463,KZ
630718464,630720511,JO
630720512,630722559,NL
@@ -13617,13 +4283,23 @@
630816768,630833151,RO
630833152,630849535,NL
630849536,630980607,TR
-630980608,631001087,RO
+630980608,630981631,MD
+630981632,630982655,RO
+630982656,630984703,MD
+630984704,630998271,RO
+630998272,630998783,MD
+630998784,631001087,RO
631001088,631005183,MD
-631005184,631037951,RO
-631037952,631038207,CH
-631038208,631046143,RO
-631046144,631046399,LT
-631046400,631048191,DK
+631005184,631006207,RO
+631006208,631007231,MD
+631007232,631017471,RO
+631017472,631018495,MD
+631018496,631039999,RO
+631040000,631042047,MD
+631042048,631044095,RO
+631044096,631045119,MD
+631045120,631046143,RO
+631046144,631048191,DK
631048192,631050239,FR
631050240,631054335,RU
631054336,631056383,GB
@@ -13648,7 +4324,20 @@
631242752,632291327,FR
632291328,632815615,IT
632815616,632946687,BE
-632946688,633077759,AT
+632946688,632963071,AT
+632963072,632979455,AM
+632979456,633012223,IT
+633012224,633063679,FR
+633063680,633063935,PL
+633063936,633064191,FR
+633064192,633064447,GB
+633064448,633065727,FR
+633065728,633065983,DE
+633065984,633066239,FR
+633066240,633066495,ES
+633066496,633066751,FR
+633066752,633067007,IT
+633067008,633077759,FR
633077760,633094143,RU
633094144,633098239,NL
633098240,633100287,HU
@@ -13681,9 +4370,7 @@
634001408,634003455,NO
634003456,634007551,PL
634007552,634009599,TR
-634009600,634009855,NO
-634009856,634010111,NL
-634010112,634010623,NO
+634009600,634010623,NO
634010624,634011647,RU
634011648,634028031,JO
634028032,634060799,RO
@@ -13703,7 +4390,8 @@
634124288,634126335,CH
634126336,634191871,RU
634191872,634193919,TR
-634193920,634194815,CZ
+634193920,634194687,SK
+634194688,634194815,CZ
634194816,634195967,SK
634195968,634198015,RU
634198016,634200063,BA
@@ -13714,9 +4402,7 @@
634208256,634216447,RU
634216448,634220543,HR
634220544,634222591,IQ
-634222592,634222911,DK
-634222912,634222975,NO
-634222976,634224639,DK
+634222592,634224639,DK
634224640,634388479,IT
634388480,634396671,SE
634396672,634398719,BA
@@ -13743,7 +4429,7 @@
634517504,634519551,LB
634519552,634650623,QA
634650624,634912767,BY
-634912768,635043839,RO
+634912768,635043839,SA
635043840,635076607,ES
635076608,635092991,KG
635092992,635097087,CY
@@ -13751,43 +4437,28 @@
635101184,635103231,AE
635103232,635105279,HU
635105280,635106303,IS
-635106304,635106815,US
-635106816,635107327,NL
+635106304,635107327,NL
635107328,635109375,DE
635109376,635174911,FI
-635174912,635179713,GB
-635179714,635179714,GB
-635179715,635183103,GB
+635174912,635183103,GB
635183104,635185151,NL
635185152,635187199,IT
635187200,635191295,FR
635191296,635195391,RS
635195392,635197439,RU
-635197440,635199583,GB
-635199584,635199607,IT
+635197440,635199591,GB
+635199592,635199607,IT
635199608,635199647,GB
635199648,635199655,IT
635199656,635199663,GB
635199664,635199671,IT
-635199672,635199719,GB
-635199720,635199727,IT
-635199728,635199735,GB
-635199736,635199743,IT
-635199744,635199775,GB
+635199672,635199775,GB
635199776,635199783,IT
-635199784,635199999,GB
-635200000,635200007,IT
-635200008,635200047,GB
-635200048,635200055,IT
-635200056,635200071,GB
-635200072,635200079,IT
-635200080,635200087,GB
-635200088,635200095,IT
-635200096,635200143,GB
-635200144,635200151,IT
-635200152,635200167,GB
+635199784,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
@@ -13799,21 +4470,21 @@
635200432,635200439,IT
635200440,635200631,GB
635200632,635200639,IT
-635200640,635200959,GB
-635200960,635200975,IT
-635200976,635200991,GB
+635200640,635200727,GB
+635200728,635200735,IT
+635200736,635200959,GB
+635200960,635200967,IT
+635200968,635200991,GB
635200992,635200999,IT
635201000,635201087,GB
635201088,635201095,IT
635201096,635201159,GB
635201160,635201167,IT
-635201168,635201199,GB
-635201200,635201207,IT
-635201208,635201255,GB
+635201168,635201255,GB
635201256,635201263,IT
-635201264,635201383,GB
-635201384,635201391,IT
-635201392,635203583,GB
+635201264,635201455,GB
+635201456,635201463,IT
+635201464,635203583,GB
635203584,635207679,JO
635207680,635211775,HU
635211776,635213823,NL
@@ -13822,539 +4493,21 @@
635219968,635224063,RU
635224064,635240447,HU
635240448,635256831,IR
-635256832,635273215,GB
635273216,635281407,UA
-635281408,635282127,RO
-635282128,635282143,VG
-635282144,635282399,RO
-635282400,635282431,VG
-635282432,635282847,RO
-635282848,635282879,VG
-635282880,635283135,RO
-635283136,635283167,VG
-635283168,635283455,RO
+635281408,635283455,RO
635283456,635284479,DE
-635284480,635285503,US
+635284480,635284991,RO
+635284992,635285503,US
635285504,635287551,ME
635287552,635289599,RU
635289600,635291647,DE
-635291648,635292159,RU
-635292160,635292379,KZ
-635292380,635292383,RU
-635292384,635292415,KZ
-635292416,635293439,RU
-635293440,635293583,KZ
-635293584,635293695,RU
+635291648,635293695,RU
635293696,635295743,HU
635295744,635297791,GB
635297792,635299839,SE
635299840,635301887,ES
635301888,635305983,CZ
-635305984,635307007,GB
-635307008,635307775,DE
-635307776,635308031,AD
-635308032,635308287,AE
-635308288,635308543,AF
-635308544,635308799,AG
-635308800,635309055,AI
-635309056,635309311,AL
-635309312,635309567,AM
-635309568,635309823,AO
-635309824,635310079,AQ
-635310080,635310335,AR
-635310336,635310591,AS
-635310592,635310847,AT
-635310848,635311103,AU
-635311104,635311359,AW
-635311360,635311615,AX
-635311616,635311871,AZ
-635311872,635312127,BA
-635312128,635312383,BB
-635312384,635312639,BD
-635312640,635312895,BE
-635312896,635313151,BF
-635313152,635313407,BG
-635313408,635313663,BH
-635313664,635313919,BI
-635313920,635314175,BJ
-635314176,635314431,BL
-635314432,635314687,BM
-635314688,635314943,BN
-635314944,635315199,BO
-635315200,635315455,BQ
-635315456,635315711,BR
-635315712,635315967,BS
-635315968,635316223,BT
-635316224,635316479,NL
-635316480,635316735,BW
-635316736,635316991,BY
-635316992,635317247,BZ
-635317248,635317503,CA
-635317504,635317759,CC
-635317760,635318015,CD
-635318016,635318271,CF
-635318272,635318527,CG
-635318528,635318783,CH
-635318784,635319039,CI
-635319040,635319295,CK
-635319296,635319551,CL
-635319552,635319807,CM
-635319808,635320063,CN
-635320064,635320319,CO
-635320320,635320575,CR
-635320576,635320831,CU
-635320832,635321087,CV
-635321088,635321343,CW
-635321344,635321599,CX
-635321600,635321855,CY
-635321856,635322111,CZ
-635322112,635322367,DE
-635322368,635322623,DJ
-635322624,635322879,DK
-635322880,635323135,DM
-635323136,635323391,DO
-635323392,635323647,DZ
-635323648,635323903,EC
-635323904,635324159,EE
-635324160,635324415,EG
-635324416,635324671,EH
-635324672,635324927,ER
-635324928,635325183,ES
-635325184,635325439,ET
-635325440,635325695,FI
-635325696,635325951,FJ
-635325952,635326207,FK
-635326208,635326463,FM
-635326464,635326719,FO
-635326720,635326975,FR
-635326976,635327231,GA
-635327232,635327487,GB
-635327488,635327743,GD
-635327744,635327999,GE
-635328000,635328255,GF
-635328256,635328511,GG
-635328512,635328767,GH
-635328768,635329023,GI
-635329024,635329279,GL
-635329280,635329535,GM
-635329536,635329791,GN
-635329792,635330047,GP
-635330048,635330303,GQ
-635330304,635330559,GR
-635330560,635330815,GS
-635330816,635331071,GT
-635331072,635331327,GU
-635331328,635331583,GW
-635331584,635331839,GY
-635331840,635332095,HK
-635332096,635332351,NL
-635332352,635332607,HN
-635332608,635332863,HR
-635332864,635333119,HT
-635333120,635333375,HU
-635333376,635333631,ID
-635333632,635333887,IE
-635333888,635334143,IL
-635334144,635334399,IM
-635334400,635334655,IN
-635334656,635334911,IO
-635334912,635335167,IQ
-635335168,635335423,IR
-635335424,635335679,IS
-635335680,635335935,IT
-635335936,635336191,JE
-635336192,635336447,JM
-635336448,635336703,JO
-635336704,635336959,JP
-635336960,635337215,KE
-635337216,635337471,KH
-635337472,635337727,KI
-635337728,635337983,KM
-635337984,635338239,KN
-635338240,635338495,KP
-635338496,635338751,KR
-635338752,635339007,KW
-635339008,635339263,KY
-635339264,635339519,KZ
-635339520,635339775,LA
-635339776,635340031,LB
-635340032,635340287,LC
-635340288,635340543,LI
-635340544,635340799,LK
-635340800,635341055,LR
-635341056,635341311,LS
-635341312,635341567,LT
-635341568,635341823,LU
-635341824,635342079,LV
-635342080,635342335,LY
-635342336,635342591,MC
-635342592,635342847,MD
-635342848,635343103,ME
-635343104,635343359,MF
-635343360,635343615,MG
-635343616,635343871,MH
-635343872,635344127,MK
-635344128,635344383,ML
-635344384,635344639,MM
-635344640,635344895,MN
-635344896,635345151,MO
-635345152,635345407,MP
-635345408,635345663,MQ
-635345664,635345919,MR
-635345920,635346175,MS
-635346176,635346431,MT
-635346432,635346687,MU
-635346688,635346943,MV
-635346944,635347199,MW
-635347200,635347455,MX
-635347456,635347711,MY
-635347712,635347967,MZ
-635347968,635348223,NA
-635348224,635348479,NC
-635348480,635348735,NE
-635348736,635348991,NF
-635348992,635349247,NG
-635349248,635349503,NI
-635349504,635349759,NL
-635349760,635350015,NO
-635350016,635350271,NP
-635350272,635350527,NR
-635350528,635350783,NU
-635350784,635351039,NZ
-635351040,635351295,OM
-635351296,635351551,PA
-635351552,635351807,PE
-635351808,635352063,PF
-635352064,635352319,PG
-635352320,635352575,PH
-635352576,635352831,PK
-635352832,635353087,PL
-635353088,635353343,PM
-635353344,635353599,PN
-635353600,635353855,PR
-635353856,635354111,PS
-635354112,635354367,PT
-635354368,635354623,PW
-635354624,635354879,PY
-635354880,635355135,QA
-635355136,635355391,RE
-635355392,635355647,RO
-635355648,635355903,RS
-635355904,635356159,RU
-635356160,635356415,RW
-635356416,635356671,SA
-635356672,635356927,SB
-635356928,635357183,SC
-635357184,635357439,SD
-635357440,635357695,SE
-635357696,635357951,SG
-635357952,635358207,SH
-635358208,635358463,SI
-635358464,635358719,SJ
-635358720,635358975,SK
-635358976,635359231,SL
-635359232,635359487,SM
-635359488,635359743,SN
-635359744,635359999,SO
-635360000,635360255,SR
-635360256,635360511,SS
-635360512,635360767,ST
-635360768,635361023,SV
-635361024,635361279,SX
-635361280,635361535,SY
-635361536,635361791,SZ
-635361792,635362047,TC
-635362048,635362303,TD
-635362304,635362559,TF
-635362560,635362815,TG
-635362816,635363071,TH
-635363072,635363327,TJ
-635363328,635363583,TK
-635363584,635363839,TL
-635363840,635364095,TM
-635364096,635364351,TN
-635364352,635364607,TO
-635364608,635364863,TR
-635364864,635365119,TT
-635365120,635365375,TV
-635365376,635365631,TW
-635365632,635365887,TZ
-635365888,635366143,UA
-635366144,635366399,UG
-635366400,635366655,UM
-635366656,635366911,US
-635366912,635367167,UY
-635367168,635367423,UZ
-635367424,635367679,VA
-635367680,635367935,VC
-635367936,635368191,VE
-635368192,635368447,VG
-635368448,635368703,VI
-635368704,635368959,VN
-635368960,635369215,VU
-635369216,635369471,WF
-635369472,635369727,WS
-635369728,635369983,YE
-635369984,635370239,YT
-635370240,635370495,ZA
-635370496,635370751,ZM
-635370752,635371007,ZW
-635371008,635371519,AD
-635371520,635371775,AF
-635371776,635372031,AG
-635372032,635372287,AI
-635372288,635372543,AL
-635372544,635372799,AM
-635372800,635373055,AO
-635373056,635373311,AQ
-635373312,635373567,AR
-635373568,635373823,AS
-635373824,635374079,AT
-635374080,635374335,AU
-635374336,635374591,AW
-635374592,635374847,AX
-635374848,635375103,AZ
-635375104,635375359,BA
-635375360,635375615,BB
-635375616,635375871,BD
-635375872,635376127,BE
-635376128,635376383,BF
-635376384,635376639,BG
-635376640,635376895,BH
-635376896,635377151,BI
-635377152,635377407,BJ
-635377408,635377663,BL
-635377664,635377919,BM
-635377920,635378175,BN
-635378176,635378431,BO
-635378432,635378687,BQ
-635378688,635378943,BR
-635378944,635379199,BS
-635379200,635379455,BT
-635379456,635379711,NL
-635379712,635379967,BW
-635379968,635380223,BY
-635380224,635380479,BZ
-635380480,635380735,CA
-635380736,635380991,CC
-635380992,635381247,CD
-635381248,635381503,CF
-635381504,635381759,CG
-635381760,635382015,CH
-635382016,635382271,CI
-635382272,635382527,CK
-635382528,635382783,CL
-635382784,635383039,CM
-635383040,635383295,CN
-635383296,635383551,CO
-635383552,635383807,CR
-635383808,635384063,CU
-635384064,635384319,CV
-635384320,635384575,CW
-635384576,635384831,CX
-635384832,635385087,CY
-635385088,635385343,CZ
-635385344,635385599,DE
-635385600,635385855,DJ
-635385856,635386111,DK
-635386112,635386367,DM
-635386368,635386623,DO
-635386624,635386879,DZ
-635386880,635387135,EC
-635387136,635387391,EE
-635387392,635387647,EG
-635387648,635387903,EH
-635387904,635388159,ER
-635388160,635388415,DK
-635388416,635388671,DM
-635388672,635388927,DO
-635388928,635389183,DZ
-635389184,635389439,EC
-635389440,635389695,EE
-635389696,635389951,EG
-635389952,635390207,EH
-635390208,635390463,ER
-635390464,635390719,ES
-635390720,635390975,ET
-635390976,635391231,FI
-635391232,635391487,FJ
-635391488,635391743,FK
-635391744,635391999,FM
-635392000,635392255,FO
-635392256,635392511,FR
-635392512,635392767,GA
-635392768,635393023,GB
-635393024,635393279,GD
-635393280,635393535,GE
-635393536,635393791,GF
-635393792,635394047,GG
-635394048,635394303,GH
-635394304,635394559,GI
-635394560,635394815,GL
-635394816,635395071,GM
-635395072,635395327,GN
-635395328,635395583,GP
-635395584,635395839,GQ
-635395840,635396095,GR
-635396096,635396351,GS
-635396352,635396607,GT
-635396608,635396863,GU
-635396864,635397119,GW
-635397120,635397375,GY
-635397376,635397631,HK
-635397632,635397887,NL
-635397888,635398143,HN
-635398144,635398399,HR
-635398400,635398655,HT
-635398656,635398911,HU
-635398912,635399167,ID
-635399168,635399423,IE
-635399424,635399679,IL
-635399680,635399935,IM
-635399936,635400191,IN
-635400192,635400447,IO
-635400448,635400703,IQ
-635400704,635400959,IR
-635400960,635401215,IS
-635401216,635401471,IT
-635401472,635401727,JE
-635401728,635401983,JM
-635401984,635402239,JO
-635402240,635402495,JP
-635402496,635402751,KE
-635402752,635403007,KH
-635403008,635403263,KI
-635403264,635403519,KM
-635403520,635403775,KN
-635403776,635404031,KP
-635404032,635404287,KR
-635404288,635404543,KW
-635404544,635404799,KY
-635404800,635405055,KZ
-635405056,635405311,LA
-635405312,635405567,LB
-635405568,635405823,LC
-635405824,635406079,LI
-635406080,635406335,LK
-635406336,635406591,LR
-635406592,635406847,LS
-635406848,635407103,LT
-635407104,635407359,LU
-635407360,635407615,LV
-635407616,635407871,LY
-635407872,635408127,MC
-635408128,635408383,MD
-635408384,635408639,ME
-635408640,635408895,MF
-635408896,635409151,MG
-635409152,635409407,MH
-635409408,635409663,MK
-635409664,635409919,ML
-635409920,635410175,MM
-635410176,635410431,MN
-635410432,635410687,MO
-635410688,635410943,MP
-635410944,635411199,MQ
-635411200,635411455,MR
-635411456,635411711,MS
-635411712,635411967,MT
-635411968,635412223,MU
-635412224,635412479,MV
-635412480,635412735,MW
-635412736,635412991,MX
-635412992,635413247,MY
-635413248,635413503,MZ
-635413504,635413759,NA
-635413760,635414015,NC
-635414016,635414271,NE
-635414272,635414527,NF
-635414528,635414783,NG
-635414784,635415039,NI
-635415040,635415295,NL
-635415296,635415551,NO
-635415552,635415807,NP
-635415808,635416063,NR
-635416064,635416319,NU
-635416320,635416575,NZ
-635416576,635416831,OM
-635416832,635417087,PA
-635417088,635417343,PE
-635417344,635417599,PF
-635417600,635417855,PG
-635417856,635418111,PH
-635418112,635418367,PK
-635418368,635418623,PL
-635418624,635418879,PM
-635418880,635419135,PN
-635419136,635419391,PR
-635419392,635419647,PS
-635419648,635419903,PT
-635419904,635420159,PW
-635420160,635420415,PY
-635420416,635420671,QA
-635420672,635420927,RE
-635420928,635421183,RO
-635421184,635421439,RS
-635421440,635421695,RU
-635421696,635421951,RW
-635421952,635422207,SA
-635422208,635422463,SB
-635422464,635422719,SC
-635422720,635422975,SD
-635422976,635423231,SE
-635423232,635423487,SG
-635423488,635423743,SH
-635423744,635423999,SI
-635424000,635424255,SJ
-635424256,635424511,SK
-635424512,635424767,SL
-635424768,635425023,SM
-635425024,635425279,SN
-635425280,635425535,SO
-635425536,635425791,SR
-635425792,635426047,SS
-635426048,635426303,ST
-635426304,635426559,SV
-635426560,635426815,SX
-635426816,635427071,SY
-635427072,635427327,SZ
-635427328,635427583,TC
-635427584,635427839,TD
-635427840,635428095,TF
-635428096,635428351,TG
-635428352,635428607,TH
-635428608,635428863,TJ
-635428864,635429119,TK
-635429120,635429375,TL
-635429376,635429631,TM
-635429632,635429887,TN
-635429888,635430143,TO
-635430144,635430399,TR
-635430400,635430655,TT
-635430656,635430911,TV
-635430912,635431167,TW
-635431168,635431423,TZ
-635431424,635431679,UA
-635431680,635431935,UG
-635431936,635432191,UM
-635432192,635432447,US
-635432448,635432703,UY
-635432704,635432959,UZ
-635432960,635433215,VA
-635433216,635433471,VC
-635433472,635433727,VE
-635433728,635433983,VG
-635433984,635434239,VI
-635434240,635434495,VN
-635434496,635434751,VU
-635434752,635435007,WF
-635435008,635435263,WS
-635435264,635435519,YE
-635435520,635435775,YT
-635435776,635436031,ZA
-635436032,635436287,ZM
-635436288,635436543,ZW
-635436544,635437055,AD
+635305984,635437055,NL
635437056,635502591,RO
635502592,635568127,PL
635568128,635699199,IT
@@ -14365,9 +4518,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
@@ -14375,10 +4526,11 @@
635846656,635854847,ES
635854848,635856895,NL
635856896,635858943,TR
-635858944,635860479,RU
-635860480,635860991,NL
+635858944,635860991,RU
635860992,635863039,BE
-635863040,635895807,RU
+635863040,635889663,RU
+635889664,635891711,NG
+635891712,635895807,RU
635895808,635961343,KW
635961344,635994111,GE
635994112,636026879,RU
@@ -14408,10 +4560,7 @@
636176384,636178431,TR
636178432,636180479,NL
636180480,636182527,FR
-636182528,636183295,SK
-636183296,636184575,CZ
-636184576,636184831,SK
-636184832,636186623,CZ
+636182528,636186623,CZ
636186624,636188671,NL
636188672,636190719,GB
636190720,636223487,RU
@@ -14425,21 +4574,24 @@
636952576,636956671,NL
636956672,636958719,IT
636958720,636960767,PL
-636960768,636967167,DE
+636960768,636966655,DE
+636966656,636966911,IT
+636966912,636967167,DE
636967168,636967935,FR
636967936,636968191,IT
636968192,636968447,ES
-636968448,636968959,DE
-636968960,636975103,TR
+636968448,636968703,BE
+636968704,636968959,DE
+636968960,636974079,TR
+636974080,636974591,GB
+636974592,636974847,NL
+636974848,636975103,TR
636975104,636977151,ES
636977152,637140991,PL
637140992,637206527,SE
637206528,637239295,NL
637239296,637272063,RO
-637272064,637272831,RU
-637272832,637275135,DE
-637275136,637275391,RU
-637275392,637276159,DE
+637272064,637276159,DE
637276160,637278207,RU
637278208,637288447,GB
637288448,637296639,AM
@@ -14448,23 +4600,15 @@
637300736,637302783,NO
637302784,637304831,NL
637304832,637313023,CH
-637313024,637314751,NL
-637314752,637315071,EU
-637315072,637317119,NL
637317120,637319167,ES
637319168,637321215,AT
637321216,637323263,GB
637323264,637325311,FR
-637325312,637325823,US
-637325824,637326079,GB
-637326080,637326335,DE
-637326336,637326591,HK
-637326592,637326847,AU
-637326848,637327359,NO
+637325312,637325567,US
+637325568,637327359,NO
637327360,637329407,IR
637329408,637329663,SI
-637329664,637329919,FR
-637329920,637330175,AT
+637329664,637330175,FR
637330176,637330431,DE
637330432,637330943,JP
637330944,637331199,GB
@@ -14478,140 +4622,211 @@
637333760,637334271,AT
637334272,637334527,TW
637334528,637334783,KR
-637334784,637337599,AT
+637334784,637335039,AE
+637335040,637335295,SK
+637335296,637335551,BG
+637335552,637335807,DE
+637335808,637336063,HK
+637336064,637336319,AT
+637336320,637336575,CL
+637336576,637336831,AT
+637336832,637337087,IT
+637337088,637337599,RU
637337600,637403135,NO
637403136,637534207,IR
-637534208,641736703,US
-641736704,641737727,CA
-641737728,641737983,US
-641737984,641741055,CA
-641741056,641741311,US
-641741312,641744895,CA
-641744896,641761279,US
-641761280,641765887,CA
+637534208,641736959,US
+641736960,641737215,CA
+641737216,641737471,US
+641737472,641737727,CA
+641737728,641761535,US
+641761536,641761791,CA
+641761792,641763071,US
+641763072,641763583,CA
+641763584,641765375,US
+641765376,641765887,CA
641765888,641766399,US
641766400,641767423,CA
-641767424,641826815,US
-641826816,641827839,MX
-641827840,642088959,US
-642088960,642097151,CA
-642097152,642695167,US
-642695168,642696191,US
-642696192,642793471,US
-642793472,642795519,CA
-642795520,642796031,CA
-642796032,642796543,CA
-642796544,642797055,CA
-642797056,642797567,CA
-642797568,642801663,US
-642801664,642809855,CA
-642809856,642924543,US
-642924544,642926591,MX
-642926592,643875071,US
-643875072,643875327,US
-643875328,644048127,US
-644048128,644048383,US
-644048384,644049151,US
-644049152,644049407,US
-644049408,644055039,US
-644055040,644056047,CA
-644056048,644056063,US
-644056064,644059135,CA
-644059136,644059391,CA
-644059392,644061631,CA
-644061632,644061663,US
-644061664,644065023,CA
-644065024,644065055,US
-644065056,644071679,CA
-644071680,644072447,US
-644072448,644073471,CA
-644073472,644084223,US
-644084224,644084479,GU
-644084480,644093439,US
-644093440,644093695,US
-644093696,644121855,US
-644121856,644122111,US
-644122112,644235263,US
-644235264,644243455,CA
-644243456,644268543,US
-644268544,644268613,CA
-644268614,644268614,US
-644268615,644268799,CA
-644268800,644323391,US
+641767424,641768447,US
+641768448,641768959,CA
+641768960,641769727,US
+641769728,641769983,CA
+641769984,641771519,US
+641771520,641771775,CA
+641771776,642093055,US
+642093056,642094591,CA
+642094592,642388479,US
+642388480,642388735,CA
+642388736,642793471,US
+642793472,642793983,CA
+642793984,642925055,US
+642925056,642925311,MX
+642925312,642926335,US
+642926336,642926591,MX
+642926592,643219519,US
+643219520,643219523,CA
+643219524,643219526,US
+643219527,643219527,CA
+643219528,643240447,US
+643240448,643240703,CA
+643240704,643242495,US
+643242496,643242751,CA
+643242752,643295231,US
+643295232,643295487,PR
+643295488,643295743,US
+643295744,643296127,PR
+643296128,643296767,US
+643296768,643297023,PR
+643297024,643302911,US
+643302912,643303167,CA
+643303168,643317759,US
+643317760,643318015,CA
+643318016,643346431,US
+643346432,643346687,CA
+643346688,643351551,US
+643351552,643351807,GB
+643351808,644055039,US
+644055040,644055807,CA
+644055808,644056063,US
+644056064,644056319,CA
+644056320,644056575,US
+644056576,644056831,CA
+644056832,644057087,US
+644057088,644057599,CA
+644057600,644058111,US
+644058112,644058879,CA
+644058880,644059391,US
+644059392,644059647,CA
+644059648,644060927,US
+644060928,644061183,CA
+644061184,644063231,US
+644063232,644063743,CA
+644063744,644064511,US
+644064512,644064767,CA
+644064768,644065055,US
+644065056,644065279,CA
+644065280,644067071,US
+644067072,644067327,CA
+644067328,644069631,US
+644069632,644070143,CA
+644070144,644084479,US
+644084480,644084735,GU
+644084736,644248831,US
+644248832,644249087,CA
+644249088,644323391,US
644323392,644323407,CA
-644323408,644388863,US
-644388864,644390911,CA
+644323408,644323583,US
+644323584,644323839,CA
+644323840,644389631,US
+644389632,644390911,CA
644390912,644403199,US
-644403200,644403711,CA
-644403712,644403967,US
-644403968,644404223,CA
-644404224,644408063,US
+644403200,644403455,CA
+644403456,644408063,US
644408064,644408319,CA
-644408320,644413439,US
-644413440,644414463,CA
+644408320,644414207,US
+644414208,644414463,CA
644414464,644422911,US
644422912,644423423,JP
644423424,644569087,US
-644569088,644571135,PR
-644571136,644581375,US
-644581376,644583423,CA
-644583424,644628479,US
-644628480,644636671,CA
-644636672,644718591,US
-644718592,644722687,CA
-644722688,644759551,US
-644759552,644767743,CA
-644767744,644833279,US
-644833280,644837375,CA
-644837376,644838655,US
-644838656,644838783,CA
-644838784,644838911,US
-644838912,644841471,CA
-644841472,644875647,US
-644875648,644875775,CA
-644875776,644876225,US
-644876226,644876226,CA
-644876227,644879329,US
-644879330,644879330,CA
-644879331,644890623,US
-644890624,644892927,CA
-644892928,644893183,US
-644893184,644907007,CA
-644907008,644980735,US
-644980736,644988927,CA
-644988928,645001215,US
-645001216,645003263,US
-645003264,645185535,US
-645185536,645189631,CA
-645189632,645218303,US
-645218304,645234687,CA
-645234688,645358271,US
-645358272,645358335,US
-645358336,645361663,US
-645361664,645361919,US
-645361920,645362175,US
-645362176,645362431,US
-645362432,645482495,US
-645482496,645484543,CA
-645484544,645525503,US
-645525504,645529599,CA
-645529600,645547007,US
+644569088,644569343,PR
+644569344,644570111,US
+644570112,644570175,PR
+644570176,644570623,US
+644570624,644571135,PR
+644571136,644582143,US
+644582144,644582399,CA
+644582400,644628735,US
+644628736,644628991,CA
+644628992,644634367,US
+644634368,644634623,CA
+644634624,644718847,US
+644718848,644719103,CA
+644719104,644760575,US
+644760576,644760831,CA
+644760832,644761343,US
+644761344,644761599,CA
+644761600,644762879,US
+644762880,644763135,CA
+644763136,644765439,US
+644765440,644765695,CA
+644765696,644767878,US
+644767879,644767879,CA
+644767880,644767999,US
+644768000,644768255,CA
+644768256,644833535,US
+644833536,644833791,CA
+644833792,644834047,US
+644834048,644834303,CA
+644834304,644834815,US
+644834816,644835327,CA
+644835328,644836351,US
+644836352,644836607,CA
+644836608,644838655,US
+644838656,644840447,CA
+644840448,644840703,US
+644840704,644841215,CA
+644841216,644897791,US
+644897792,644898047,CA
+644898048,644898815,US
+644898816,644899071,CA
+644899072,644899839,US
+644899840,644900095,CA
+644900096,644901631,US
+644901632,644901887,CA
+644901888,644982271,US
+644982272,644982527,CA
+644982528,644986111,US
+644986112,644986367,CA
+644986368,644987135,US
+644987136,644987391,CA
+644987392,645185535,US
+645185536,645185791,CA
+645185792,645188095,US
+645188096,645188351,CA
+645188352,645221631,US
+645221632,645222399,CA
+645222400,645223423,US
+645223424,645223679,CA
+645223680,645225471,US
+645225472,645225727,CA
+645225728,645227519,US
+645227520,645228287,CA
+645228288,645229311,US
+645229312,645229567,CA
+645229568,645482495,US
+645482496,645482751,CA
+645482752,645525759,US
+645525760,645526271,CA
+645526272,645526783,US
+645526784,645527039,CA
+645527040,645527551,US
+645527552,645527807,CA
+645527808,645528063,US
+645528064,645529343,CA
+645529344,645540351,US
+645540352,645540607,CA
+645540608,645547007,US
645547008,645547263,CA
645547264,645576703,US
-645576704,645576959,CA
-645576960,645644287,US
-645644288,645645311,MX
-645645312,645703679,US
-645703680,645705727,MX
-645705728,645731071,US
-645731072,645731199,US
-645731200,645736447,US
-645736448,645736703,PR
-645736704,645810943,US
-645810944,645811199,US
-645811200,645873663,US
-645873664,645881855,CA
-645881856,654311423,US
+645576704,645576997,CA
+645576998,645576998,US
+645576999,645577215,CA
+645577216,645644351,US
+645644352,645644415,MX
+645644416,645644927,US
+645644928,645645055,MX
+645645056,645646591,US
+645646592,645646847,MX
+645646848,645704447,US
+645704448,645704703,MX
+645704704,645705215,US
+645705216,645705471,MX
+645705472,645737983,US
+645737984,645738239,PR
+645738240,645873663,US
+645873664,645874175,CA
+645874176,645875711,US
+645875712,645876735,CA
+645876736,654311423,US
654311424,654311679,CN
654311680,654311935,AU
654311936,654376959,CN
@@ -14626,11 +4841,7 @@
661651456,662700031,KR
662700032,666894335,CN
666894336,671088639,ID
-671088640,671113215,US
-671113216,671113471,EU
-671113472,687618147,US
-687618148,687618151,EU
-687618152,687865855,US
+671088640,687865855,US
687865856,689963007,ZA
689963008,691011583,EG
691011584,691617791,ZA
@@ -14656,7 +4867,9 @@
692191232,692207615,CI
692207616,692240383,ZA
692240384,692256767,GH
-692256768,692273151,SD
+692256768,692260863,SD
+692260864,692261887,UG
+692261888,692273151,SD
692273152,692289535,EG
692289536,692305919,NG
692305920,692322303,CM
@@ -14669,8 +4882,7 @@
692600832,692609023,EG
692609024,692617215,ZM
692617216,692625407,ZA
-692625408,692633599,A2
-692633600,692641791,KE
+692625408,692641791,KE
692641792,692649983,GA
692649984,692658175,NG
692658176,692666367,ZA
@@ -14794,6 +5006,7 @@
693007360,693008383,NE
693008384,693009407,CF
693009408,693010431,GH
+693010432,693011455,ZA
693011456,693012479,SZ
693012480,693013503,TG
693013504,693014527,ZA
@@ -14807,7 +5020,7 @@
693021696,693022719,NG
693022720,693023743,KE
693023744,693026815,ZA
-693027840,693028863,CD
+693026816,693028863,CD
693028864,693029887,ZA
693029888,693030911,CM
693030912,693031935,NG
@@ -14821,7 +5034,6 @@
693040128,693041151,ZA
693041152,693042175,MW
693042176,693043199,NG
-693043200,693044223,ZW
693044224,693045247,NG
693045248,693046271,KE
693046272,693047295,ZW
@@ -14846,7 +5058,7 @@
693069824,693071871,ZA
693071872,693072895,ZW
693072896,693073919,NG
-693073920,693074943,SD
+693073920,693074943,SS
693074944,693075967,CV
693075968,693076991,CM
693076992,693078015,ZW
@@ -14881,9 +5093,12 @@
693107712,693239807,KE
693239808,693370879,SN
693370880,693403647,ZA
-693403648,693411839,KE
+693403648,693411583,KE
+693411584,693411839,MU
693411840,693420031,NG
-693420032,693428223,UG
+693420032,693423103,UG
+693423104,693424127,KE
+693424128,693428223,UG
693428224,693436415,SZ
693436416,693477375,ZA
693477376,693485567,BJ
@@ -14924,12 +5139,15 @@
696928256,696930303,BW
696930304,696932351,RW
696932352,696933375,BJ
+696933376,696934399,ZA
696934400,696942591,BF
696942592,696950783,MR
696950784,696958975,NG
696958976,696963071,TZ
-696963072,696966911,UG
-696966912,696967167,TZ
+696963072,696964095,ZA
+696964096,696965119,UG
+696965120,696966143,NG
+696966144,696967167,TZ
696967168,696971263,MZ
696971264,696975359,KE
696975360,696991743,GH
@@ -14962,11 +5180,12 @@
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
+700313600,700314367,US
+700314368,700314623,DJ
+700314624,700317695,US
700317696,700325887,NG
700325888,700334079,ZW
700334080,700335103,BJ
@@ -14978,11 +5197,14 @@
700340224,700341247,GH
700341248,700342271,MW
700342272,700350463,NA
-700350464,700358655,UG
+700350464,700351231,MU
+700351232,700352511,UG
+700352512,700358655,MU
700358656,700366847,MZ
700366848,700375039,UG
700375040,700376063,CM
700376064,700377087,NE
+700377088,700378111,CD
700378112,700379135,MG
700379136,700380159,NG
700380160,700381183,BW
@@ -15000,45 +5222,41 @@
700407808,700408831,GH
700408832,700409855,CM
700409856,700410879,LR
-700410880,700411903,NG
-700411904,700412927,ZA
700412928,700413951,ZM
700413952,700414975,SC
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
700446720,700447743,SL
700447744,700448767,DZ
-700448768,700579839,ZA
-700579840,700587007,A2
+700448768,700587007,ZA
700587008,700587263,ZM
-700587264,700588031,A2
-700588032,700588286,KM
-700588287,700588287,A2
+700587264,700588287,ZA
700588288,700588543,KM
-700588544,700589567,A2
-700589568,700589695,TZ
-700589696,700592383,A2
-700592384,700592639,KE
-700592640,700593151,A2
+700588544,700593151,ZA
700593152,700594175,NG
-700594176,700595967,A2
-700595968,700596223,CD
-700596224,700645375,A2
-700645376,700710911,ZA
+700594176,700710911,ZA
700710912,700776447,EG
700776448,700841983,RW
-700841984,700851199,MU
-700851200,700852223,NA
-700852224,700866559,MU
+700841984,700846079,MU
+700846080,700850175,NA
+700850176,700851455,MU
+700851456,700851711,ZA
+700851712,700854271,MU
+700854272,700855295,NA
+700855296,700866559,MU
700866560,700866815,NG
700866816,700867327,MU
700867328,700867583,NG
-700867584,700893183,MU
-700893184,700893695,NG
+700867584,700893439,MU
+700893440,700893695,NG
700893696,700895231,MU
700895232,700897023,NG
700897024,700897279,AO
@@ -15053,9 +5271,9 @@
701153280,701161471,CM
701161472,701169663,UG
701169664,701186047,ZA
-701186048,701190136,NG
-701190137,701190137,BJ
-701190138,701202431,NG
+701186048,701189887,NG
+701189888,701190143,BJ
+701190144,701202431,NG
701202432,701210623,NE
701210624,701214719,ZA
701214720,701218815,LS
@@ -15075,22 +5293,25 @@
701308928,701317119,AO
701317120,701325311,CM
701325312,701333503,EG
-701333504,701341695,NA
+701333504,701338111,NA
+701338112,701338367,ZM
+701338368,701341695,NA
701341696,701349887,NG
701349888,701358079,MA
701358080,701366271,SL
701366272,701374463,NG
701374464,701382655,KE
701382656,701390847,CI
-701390848,701399039,MU
+701390848,701392127,MU
+701392128,701392383,TZ
+701392384,701392639,ZA
+701392640,701399039,MU
701399040,701407231,EG
701407232,701423615,ZA
701423616,701431807,NG
701431808,701439999,CI
701440000,701448191,MG
-701448192,701461247,KE
-701461248,701461503,CD
-701461504,701462783,KE
+701448192,701462783,KE
701462784,701463039,CG
701463040,701463394,KE
701463395,701463395,NG
@@ -15102,16 +5323,21 @@
701464576,701472767,MU
701472768,701480959,TG
701480960,701489151,CI
-701489152,701493247,ZA
+701489152,701490175,NG
+701490176,701491199,AO
+701491200,701492223,MU
+701492224,701493247,ZA
701493248,701495295,TZ
-701495296,701513727,ZA
-701513728,701530111,LY
+701495296,701496319,NG
+701496320,701497343,GH
+701497344,701513727,ZA
+701513728,701523711,LY
+701523712,701523967,CA
+701523968,701530111,LY
701530112,701546495,SN
701546496,701562879,ZA
701562880,701579263,KE
-701579264,701593343,SD
-701593344,701593471,AE
-701593472,701595647,SD
+701579264,701595647,SD
701595648,701603839,DZ
701612032,701628415,EG
701628416,701644799,GH
@@ -15171,9 +5397,10 @@
702144512,702146559,EG
702146560,702148607,UG
702148608,702150655,ZA
-702150656,702152703,ZM
702152704,702169087,SD
-702169088,702181375,NA
+702169088,702173183,NA
+702173184,702175231,ZM
+702175232,702181375,NA
702181376,702185471,AO
702185472,702201855,EG
702201856,702218239,GH
@@ -15184,8 +5411,7 @@
702287872,702291967,ZW
702291968,702296063,MZ
702296064,702300159,GH
-702300160,702304255,NG
-702304256,702308351,SL
+702300160,702308351,NG
702308352,702312447,SC
702312448,702316543,KE
702316544,702320639,TZ
@@ -15194,9 +5420,7 @@
702328832,702332927,TZ
702332928,702337023,MZ
702337024,702341119,UG
-702341120,702345215,KE
-702345216,702346239,US
-702346240,702349311,KE
+702341120,702349311,KE
702349312,702353407,ZA
702353408,702357503,DZ
702357504,702365695,TZ
@@ -15219,7 +5443,9 @@
702425088,702427135,NG
702427136,702429183,ZA
702429184,702431231,TZ
-702431232,702435327,NG
+702431232,702433279,NG
+702433280,702434303,SS
+702434304,702435327,NG
702435328,702437375,MZ
702437376,702439423,TZ
702439424,702441471,MU
@@ -15240,6 +5466,7 @@
702461952,702463999,MW
702464000,702465023,BJ
702465024,702466047,CD
+702466048,702467071,AO
702467072,702468095,SC
702468096,702469119,NG
702469120,702470143,ZA
@@ -15249,14 +5476,18 @@
702475264,702476287,AO
702476288,702477311,ZM
702477312,702478335,RW
-702478336,702481407,AO
+702478336,702480383,AO
702481408,702482431,TZ
702482432,702483455,ZA
+702483456,702484479,BI
702484480,702485503,TZ
702485504,702486527,EG
+702486528,702487551,ZA
702487552,702488575,CM
702488576,702490623,ZA
702490624,702491647,AO
+702491648,702492671,NG
+702492672,702493695,GN
702493696,702494719,EG
702494720,702495743,KE
702495744,702496767,ZA
@@ -15267,6 +5498,7 @@
702500864,702501887,NA
702501888,702502911,UG
702502912,702503935,SL
+702503936,702504959,CM
702504960,702505983,MR
702505984,702507007,AO
702507008,702508031,CD
@@ -15284,7 +5516,7 @@
702520320,702521343,AO
702521344,702522367,SD
702522368,702523391,AO
-702523392,702524415,NG
+702523392,702524415,GA
702524416,702525439,ZA
702525440,702526463,DZ
702526464,702527487,TZ
@@ -15297,8 +5529,7 @@
702533632,702534655,CI
702534656,702535679,GM
702535680,702536703,SC
-702536704,702537727,MU
-702537728,702538751,RW
+702536704,702538751,MU
702538752,702539775,TZ
702539776,702540799,BF
702540800,702541823,DZ
@@ -15306,9 +5537,259 @@
702542848,702543871,ZA
702543872,702544895,BJ
702544896,702545919,ZA
-702545920,703070207,TN
+702545920,702721791,TN
+702721792,702722047,GP
+702722048,702729215,TN
+702729216,702729471,GP
+702729472,703070207,TN
703070208,703594495,EG
-703594496,704118783,ZA
+703594496,703595775,SD
+703595776,703596031,ZA
+703596032,703600383,SD
+703600384,703600639,ZA
+703600640,703601151,SD
+703601152,703601407,ZA
+703601408,703603455,SD
+703603456,703603711,ZA
+703603712,703604991,SD
+703604992,703605247,ZA
+703605248,703609087,SD
+703609088,703609343,ZA
+703609344,703613695,SD
+703613696,703613951,ZA
+703613952,703618559,SD
+703618560,703619071,ZA
+703619072,703619839,SD
+703619840,703620095,ZA
+703620096,703621887,SD
+703621888,703622143,ZA
+703622144,703622655,SD
+703622656,703622911,ZA
+703622912,703625215,SD
+703625216,703625471,ZA
+703625472,703627263,SD
+703627264,703627519,ZA
+703627520,703631871,SD
+703631872,703632127,ZA
+703632128,703633151,SD
+703633152,703633407,ZA
+703633408,703638271,SD
+703638272,703638527,ZA
+703638528,703639551,SD
+703639552,703639807,ZA
+703639808,703642367,SD
+703642368,703642623,ZA
+703642624,703643903,SD
+703643904,703644415,ZA
+703644416,703645439,SD
+703645440,703645695,ZA
+703645696,703646719,SD
+703646720,703647231,ZA
+703647232,703648767,SD
+703648768,703649023,ZA
+703649024,703649279,SD
+703649280,703650047,ZA
+703650048,703650815,SD
+703650816,703651071,ZA
+703651072,703665663,SD
+703665664,703665919,ZA
+703665920,703678463,SD
+703678464,703678719,ZA
+703678720,703682559,SD
+703682560,703682815,ZA
+703682816,703685119,SD
+703685120,703685631,ZA
+703685632,703685887,SD
+703685888,703686143,ZA
+703686144,703688447,SD
+703688448,703688703,ZA
+703688704,703689215,SD
+703689216,703689471,ZA
+703689472,703689727,SD
+703689728,703689983,ZA
+703689984,703690239,SD
+703690240,703690751,ZA
+703690752,703696127,SD
+703696128,703696383,ZA
+703696384,703696895,SD
+703696896,703697151,ZA
+703697152,703699199,SD
+703699200,703699455,ZA
+703699456,703702527,SD
+703702528,703703039,ZA
+703703040,703705599,SD
+703705600,703705855,ZA
+703705856,703706111,SD
+703706112,703706367,ZA
+703706368,703709695,SD
+703709696,703709951,ZA
+703709952,703710719,SD
+703710720,703710975,ZA
+703710976,703711487,SD
+703711488,703711743,ZA
+703711744,703713791,SD
+703713792,703714047,ZA
+703714048,703714303,SD
+703714304,703714559,ZA
+703714560,703724031,SD
+703724032,703724287,ZA
+703724288,703724543,SD
+703724544,703724799,ZA
+703724800,703725567,SD
+703725568,703725589,ZA
+703725590,703725590,KE
+703725591,703726591,ZA
+703726592,703727615,KE
+703727616,703728383,TZ
+703728384,703728639,ZA
+703728640,703733759,LY
+703733760,703734527,CM
+703734528,703734783,ZA
+703734784,703735807,CM
+703735808,703737855,ZA
+703737856,703746047,NG
+703746048,703747071,ZA
+703747072,703748095,CD
+703748096,703748351,ZA
+703748352,703749119,GN
+703749120,703750143,NG
+703750144,703750655,ZA
+703750656,703750911,MG
+703750912,703751167,ZA
+703751168,703751679,MG
+703751680,703751935,ZA
+703751936,703752447,MG
+703752448,703752703,ZA
+703752704,703753215,MG
+703753216,703753471,ZA
+703753472,703754239,MG
+703754240,703755263,GH
+703755264,703757311,ZA
+703757312,703758335,RE
+703758336,703759359,CD
+703759360,703760383,ZA
+703760384,703761407,GH
+703761408,703791103,ZA
+703791104,703791359,CD
+703791360,703791871,ZA
+703791872,703792895,CD
+703792896,703793151,ZA
+703793152,703794175,CD
+703794176,703794687,ZA
+703794688,703795199,CD
+703795200,703795455,ZA
+703795456,703798527,CD
+703798528,703799039,ZA
+703799040,703799807,CD
+703799808,703800063,ZA
+703800064,703800575,CD
+703800576,703800831,ZA
+703800832,703801855,CD
+703801856,703802111,ZA
+703802112,703804159,CD
+703804160,703804415,ZA
+703804416,703806719,CD
+703806720,703806975,ZA
+703806976,703809023,CD
+703809024,703809279,ZA
+703809280,703810559,CD
+703810560,703810815,ZA
+703810816,703811839,CD
+703811840,703812351,ZA
+703812352,703813119,CD
+703813120,703813375,ZA
+703813376,703817471,CD
+703817472,703817727,ZA
+703817728,703817983,CD
+703817984,703818239,ZA
+703818240,703822335,CD
+703822336,703822591,ZA
+703822592,703825407,CD
+703825408,703825663,ZA
+703825664,703827967,CD
+703827968,703828223,ZA
+703828224,703831295,CD
+703831296,703831551,ZA
+703831552,703832319,CD
+703832320,703832575,ZA
+703832576,703838207,CD
+703838208,703838463,ZA
+703838464,703838719,CD
+703838720,703838975,ZA
+703838976,703839743,CD
+703839744,703839999,ZA
+703840000,703841279,CD
+703841280,703841535,ZA
+703841536,703842559,CD
+703842560,703842815,ZA
+703842816,703845375,CD
+703845376,703845631,ZA
+703845632,703846911,CD
+703846912,703847167,ZA
+703847168,703847423,CD
+703847424,703847679,ZA
+703847680,703849215,CD
+703849216,703849471,ZA
+703849472,703856639,CD
+703856640,703856895,ZA
+703856896,703857919,CM
+703857920,703858431,ZA
+703858432,703858943,CM
+703858944,703859199,ZA
+703859200,703864063,CM
+703864064,703864319,ZA
+703864320,703864575,CM
+703864576,703865855,ZA
+703865856,703866623,CM
+703866624,703867135,ZA
+703867136,703867391,CM
+703867392,703867647,ZA
+703867648,703869439,CM
+703869440,703869951,ZA
+703869952,703870975,CM
+703870976,703871487,ZA
+703871488,703871743,CM
+703871744,703871999,ZA
+703872000,703876607,CM
+703876608,703876863,ZA
+703876864,703884287,CM
+703884288,703884799,ZA
+703884800,703885055,CM
+703885056,703885311,ZA
+703885312,703886079,CM
+703886080,703886335,ZA
+703886336,703888639,CM
+703888640,703888895,ZA
+703888896,703889151,CM
+703889152,703889407,ZA
+703889408,703889663,CM
+703889664,703890175,ZA
+703890176,703891455,CM
+703891456,703892223,ZA
+703892224,703897343,CM
+703897344,703897599,ZA
+703897600,703901183,CM
+703901184,703901695,ZA
+703901696,703902975,CM
+703902976,703903231,ZA
+703903232,703903487,CM
+703903488,703903743,ZA
+703903744,703905535,CM
+703905536,703905791,ZA
+703905792,703912447,CM
+703912448,703912703,ZA
+703912704,703912959,CM
+703912960,703913215,ZA
+703913216,703913727,CM
+703913728,703913983,ZA
+703913984,703914239,CM
+703914240,703914495,ZA
+703914496,703914751,CM
+703914752,703915519,ZA
+703915520,703919359,CM
+703919360,703919615,ZA
+703919616,703922175,CM
+703922176,704118783,ZA
704118784,704380927,MA
704380928,704643071,LY
704643072,704644095,CN
@@ -15346,7 +5827,13 @@
711131136,711160831,CN
711160832,711161855,BD
711161856,711163903,CN
-711163904,711196671,JP
+711163904,711164727,JP
+711164728,711164735,HK
+711164736,711166463,JP
+711166464,711166591,HK
+711166592,711169311,JP
+711169312,711169327,IN
+711169328,711196671,JP
711196672,711458815,CN
711458816,711983103,IN
711983104,712507391,VN
@@ -15374,23 +5861,24 @@
738197504,746717183,US
746717184,746782719,DE
746782720,755105791,US
+759234560,759235583,SG
+759235584,759236607,NZ
+759236608,759237631,IN
+759237632,759238655,AU
+765460480,767557631,UY
771751936,771817471,RU
771817472,771948543,TR
771948544,772014079,RU
-772014080,772050575,DE
-772050576,772050583,TR
-772050584,772054815,DE
-772054816,772054847,ES
-772054848,772076127,DE
-772076128,772076159,EG
-772076160,772076175,IT
-772076176,772145151,DE
+772014080,772145151,DE
772145152,772210687,ES
772210688,772276223,IE
772276224,772284415,NL
772284416,772284927,RU
772284928,772285183,UA
-772285184,772296703,RU
+772285184,772285439,UZ
+772285440,772285695,RU
+772285696,772285951,GR
+772285952,772296703,RU
772296704,772300799,UA
772300800,772341759,RU
772341760,772407295,NO
@@ -15402,9 +5890,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
@@ -15425,7 +5911,15 @@
772841472,772843519,GB
772843520,772845567,IT
772845568,772847615,RU
-772847616,772849663,GB
+772847616,772848871,GB
+772848872,772848879,US
+772848880,772849231,GB
+772849232,772849247,MY
+772849248,772849255,GB
+772849256,772849263,US
+772849264,772849271,GB
+772849272,772849279,US
+772849280,772849663,GB
772849664,772851711,BG
772851712,772853759,CH
772853760,772855807,GB
@@ -15441,19 +5935,10 @@
772876288,772880383,RU
772880384,772882431,GB
772882432,772884479,FR
-772884480,772884543,GB
-772884544,772884735,LB
-772884736,772884799,GB
-772884800,772885503,LB
-772885504,772885567,GB
-772885568,772885759,LB
-772885760,772885823,GB
-772885824,772886527,LB
+772884480,772886527,LB
772886528,772888575,FR
772888576,772890623,GB
-772890624,772892479,RU
-772892480,772892486,HK
-772892487,772892671,RU
+772890624,772892671,RU
772892672,772894719,GB
772894720,772896767,PL
772896768,772898815,RS
@@ -15468,20 +5953,17 @@
772915200,772917247,FI
772917248,772919295,RU
772919296,772923391,GB
-772923392,772923519,AT
-772923520,772923551,DE
-772923552,772925439,AT
-772925440,772925695,GB
-772925696,772926719,ZW
-772926720,772926975,GB
-772926976,772927231,ZW
-772927232,772927487,GB
+772923392,772925439,AT
+772925440,772926463,GB
+772926464,772926719,ZW
+772926720,772927231,GB
+772927232,772927487,ZW
772927488,772929535,UA
772929536,772931583,RU
772931584,772933631,UA
-772933632,772933920,GB
-772933921,772933928,IE
-772933929,772935679,GB
+772933632,772933887,GB
+772933888,772934143,IE
+772934144,772935679,GB
772935680,772937727,PS
772937728,772939775,IT
772939776,772941823,BE
@@ -15490,7 +5972,8 @@
772945920,772947967,DE
772947968,772950015,AZ
772950016,772952063,ES
-772952064,772954111,GB
+772952064,772952319,US
+772952320,772954111,GB
772954112,772958207,FR
772958208,772962303,GB
772962304,772966399,FR
@@ -15500,17 +5983,13 @@
772972544,772974591,SA
772974592,772978687,GB
772978688,772980735,DE
-772980736,772982271,FR
-772982272,772982279,US
-772982280,772982783,FR
+772980736,772982783,FR
772982784,772984831,RU
772984832,772986879,FR
772986880,772988927,GB
772988928,772990975,FR
772990976,772993023,IT
-772993024,772994815,DE
-772994816,772994943,US
-772994944,772995071,DE
+772993024,772995071,DE
772995072,772997119,IR
772997120,772999167,BE
772999168,773001215,SI
@@ -15528,10 +6007,7 @@
773023744,773025791,RO
773025792,773027839,RU
773027840,773031935,FR
-773031936,773032191,CH
-773032192,773032447,CH
-773032448,773033727,CH
-773033728,773033983,CH
+773031936,773033983,CH
773033984,773036031,LV
773036032,773038079,DE
773038080,773040127,GB
@@ -15542,39 +6018,23 @@
773048320,773050367,LV
773050368,773052415,IE
773052416,773054463,NL
-773054464,773054719,RS
-773054720,773055487,AL
-773055488,773056127,RS
-773056128,773056511,AL
+773054464,773055231,AL
+773055232,773055359,XK
+773055360,773055871,AL
+773055872,773055999,RS
+773056000,773056255,XK
+773056256,773056511,AL
773056512,773058559,IT
773058560,773060607,BE
773060608,773062655,DK
-773062656,773063040,TR
-773063041,773063071,GB
-773063072,773063087,TR
-773063088,773063119,GB
-773063120,773063127,TR
-773063128,773063135,GB
-773063136,773063166,TR
-773063167,773063167,GB
-773063168,773063424,TR
-773063425,773063436,US
-773063437,773065088,TR
-773065089,773065215,US
-773065216,773066751,TR
+773062656,773066751,TR
773066752,773070847,AT
-773070848,773074463,DE
-773074464,773074495,YE
-773074496,773074943,DE
+773070848,773074943,DE
773074944,773079039,PL
773079040,773083135,RU
773083136,773087231,IT
773087232,773091327,LB
-773091328,773092867,GB
-773092868,773092990,US
-773092991,773094660,GB
-773094661,773094910,US
-773094911,773095423,GB
+773091328,773095423,GB
773095424,773099519,RO
773099520,773103615,TR
773103616,773107711,FR
@@ -15585,42 +6045,28 @@
773124096,773128191,CH
773128192,773132287,DE
773132288,773134335,IT
-773134336,773134847,CH
-773134848,773136127,IT
-773136128,773136159,CH
-773136160,773136383,IT
+773134336,773135359,CH
+773135360,773136383,IT
773136384,773140479,DK
773140480,773144575,CY
773144576,773148671,RU
773148672,773152767,IR
773152768,773153791,SE
773153792,773154815,US
-773154816,773155583,SE
-773155584,773155839,US
-773155840,773156863,SE
-773156864,773158143,FR
-773158144,773158911,DE
-773158912,773160447,FR
-773160448,773160959,ES
-773160960,773165055,FR
+773154816,773156863,SE
+773156864,773165055,FR
773165056,773166463,NL
773166464,773166591,PL
-773166592,773168799,US
-773168800,773168815,NL
-773168816,773169151,US
-773169152,773171343,NL
-773171344,773171359,BE
-773171360,773171599,NL
-773171600,773171607,BE
-773171608,773171615,NL
-773171616,773171647,BE
-773171648,773172223,NL
-773172224,773172287,BE
-773172288,773172351,GB
-773172352,773172479,NL
-773172480,773172607,GB
-773172608,773172735,BE
-773172736,773173247,NL
+773166592,773167199,US
+773167200,773167207,NL
+773167208,773167359,US
+773167360,773167615,NL
+773167616,773168127,US
+773168128,773168415,NL
+773168416,773168639,US
+773168640,773168895,NL
+773168896,773169151,US
+773169152,773173247,NL
773173248,773177343,IT
773177344,773181439,FR
773181440,773185535,PL
@@ -15629,7 +6075,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
@@ -15667,9 +6121,7 @@
773597184,773599231,BE
773599232,773601279,GB
773601280,773603327,LV
-773603328,773603839,UA
-773603840,773603855,HK
-773603856,773605375,UA
+773603328,773605375,UA
773605376,773607423,IR
773607424,773609471,DE
773609472,773611519,RU
@@ -15687,24 +6139,18 @@
773634048,773636095,DE
773636096,773638143,UA
773638144,773640191,CH
-773640192,773640513,ES
-773640514,773640515,FR
-773640516,773640516,NL
-773640517,773642239,ES
+773640192,773642239,ES
773642240,773644287,HU
773644288,773646335,RU
773646336,773648383,TR
773648384,773650431,PL
773650432,773652479,GB
-773652480,773653503,SK
-773653504,773653775,CZ
-773653776,773654527,SK
+773652480,773652735,TR
+773652736,773653503,SK
+773653504,773654527,TR
773654528,773656575,RU
773656576,773658623,PL
-773658624,773660671,DE
-773660672,773660935,AT
-773660936,773660943,IT
-773660944,773662719,AT
+773660672,773662719,AT
773662720,773664767,DE
773664768,773666815,ES
773666816,773668863,GB
@@ -15713,37 +6159,15 @@
773672960,773675007,SA
773675008,773677055,GB
773677056,773679103,DE
-773679104,773679135,IT
-773679136,773679231,A2
-773679232,773679295,DE
-773679296,773679327,A2
-773679328,773679359,IT
-773679360,773679423,GB
-773679424,773679487,A2
-773679488,773679615,FR
-773679616,773680383,IT
-773680384,773680639,A2
-773680640,773680703,LY
-773680704,773680895,IT
-773680896,773681151,HK
+773679104,773681151,IT
773681152,773683199,RU
-773683200,773684223,FR
-773684224,773684239,GB
-773684240,773684255,BE
-773684256,773684271,NL
-773684272,773685247,FR
+773683200,773685247,FR
773685248,773687295,UA
773687296,773689343,HU
773689344,773691391,PL
773691392,773695487,RU
773695488,773697535,MK
-773697536,773698047,LU
-773698048,773698063,GB
-773698064,773698079,US
-773698080,773698095,DE
-773698096,773698111,BE
-773698112,773698127,FR
-773698128,773699583,LU
+773697536,773699583,LU
773699584,773701631,CZ
773701632,773703679,RU
773703680,773705727,IT
@@ -15762,11 +6186,7 @@
773730304,773732351,GB
773732352,773734399,DE
773734400,773736447,CZ
-773736448,773738947,DE
-773738948,773738951,NO
-773738952,773739199,DE
-773739200,773739203,GB
-773739204,773740543,DE
+773736448,773740543,DE
773740544,773742591,CZ
773742592,773744639,GB
773744640,773746687,ES
@@ -15792,20 +6212,10 @@
773787648,773789695,DK
773789696,773791743,RU
773791744,773793791,PL
-773793792,773794527,FR
-773794528,773794535,GB
-773794536,773794543,IT
-773794544,773794551,ES
-773794552,773794559,DE
-773794560,773795839,FR
+773793792,773795839,FR
773795840,773797887,NL
773797888,773799935,ES
-773799936,773800447,GB
-773800448,773800703,CY
-773800704,773800959,GB
-773800960,773801215,SG
-773801216,773801727,US
-773801728,773801983,GB
+773799936,773801983,CY
773801984,773804031,IQ
773804032,773806079,GB
773806080,773808127,BE
@@ -15823,15 +6233,18 @@
773830656,773832703,NO
773832704,773834751,FR
773834752,773835007,GB
-773835008,773835519,IM
-773835520,773835647,GB
-773835648,773836031,IM
-773836032,773836799,GB
+773835008,773835263,IM
+773835264,773835519,GB
+773835520,773835775,IM
+773835776,773836031,GB
+773836032,773836287,IM
+773836288,773836799,GB
773836800,773838847,FR
773838848,773840895,DE
773840896,773842943,GB
-773842944,773844991,EU
-773844992,773846015,GB
+773844992,773845247,GB
+773845248,773845503,GG
+773845504,773846015,GB
773846016,773846527,GG
773846528,773847039,GB
773847040,773849087,IT
@@ -15852,97 +6265,36 @@
773963776,773971967,ME
773971968,773980159,UA
773980160,773988351,GB
-773988352,773999615,ES
-773999616,774000127,NL
-774000128,774000695,ES
-774000696,774000735,US
-774000736,774000743,ES
-774000744,774000751,US
-774000752,774000767,ES
-774000768,774000831,NL
-774000832,774000863,US
-774000864,774000879,NL
-774000880,774000895,US
-774000896,774001151,NL
-774001152,774001407,ES
-774001408,774001471,US
-774001472,774001487,ES
-774001488,774001503,NL
-774001504,774001535,ES
-774001536,774002687,NL
-774002688,774002815,US
-774002816,774002943,NL
-774002944,774003199,ES
-774003200,774003263,TR
-774003264,774003311,ES
-774003312,774003455,TR
-774003456,774003583,ES
-774003584,774003607,TR
-774003608,774003615,ES
-774003616,774003695,TR
-774003696,774003711,IE
-774003712,774004223,BE
-774004224,774004479,ES
-774004480,774004511,BE
-774004512,774004527,ES
-774004528,774004543,BE
-774004544,774004735,ES
+773988352,774000823,ES
+774000824,774000824,GB
+774000825,774001663,ES
+774001664,774002687,NL
+774002688,774002815,ES
+774002816,774002842,NL
+774002843,774002843,ES
+774002844,774002943,NL
+774002944,774004735,ES
774004736,774012927,IR
774012928,774021119,RU
774021120,774029311,IR
774029312,774037503,RO
774037504,774045695,SK
774045696,774053887,FR
-774053888,774055519,DE
-774055520,774055679,US
-774055680,774055935,DE
-774055936,774057855,US
-774057856,774058079,DE
-774058080,774058095,US
-774058096,774058111,DE
-774058112,774058239,US
-774058240,774058327,DE
-774058328,774058335,US
-774058336,774058359,DE
-774058360,774058367,HR
-774058368,774058399,US
-774058400,774058559,DE
-774058560,774058599,US
-774058600,774058815,DE
-774058816,774058847,US
-774058848,774058871,DE
-774058872,774058879,US
-774058880,774059215,DE
-774059216,774059223,ZA
-774059224,774059263,US
-774059264,774059391,DE
-774059392,774059423,US
-774059424,774059455,DE
-774059456,774059519,US
-774059520,774060031,DE
-774060032,774060047,ES
-774060048,774060063,DE
-774060064,774060159,US
-774060160,774060639,DE
-774060640,774060799,US
-774060800,774061007,DE
-774061008,774061023,CZ
-774061024,774061103,DE
-774061104,774061111,GI
-774061112,774061367,DE
-774061368,774061407,US
-774061408,774061567,DE
-774061568,774061727,US
-774061728,774062015,DE
-774062016,774062047,US
-774062048,774062079,DE
+774053888,774055935,DE
+774055936,774057727,US
+774057728,774062079,DE
774062080,774070271,YE
774070272,774078463,ES
774078464,774086655,BA
774086656,774094847,BG
774094848,774103039,HU
-774103040,774111231,UA
-774111232,774119423,RU
+774103040,774104831,RU
+774104832,774105087,UA
+774105088,774105343,RU
+774105344,774105599,UA
+774105600,774109695,RU
+774109696,774109951,UA
+774109952,774119423,RU
774119424,774127615,CZ
774127616,774135807,LT
774135808,774143999,IR
@@ -15950,24 +6302,27 @@
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,774160547,RU
+774160515,774160547,MX
774160548,774160580,AE
-774160581,774160612,DK
+774160581,774160612,MX
774160613,774160639,AT
774160640,774160671,GI
774160672,774160702,CY
774160703,774160735,CH
774160736,774160768,GR
774160769,774160801,IL
-774160802,774160832,BG
+774160802,774160802,VA
+774160803,774160832,BG
774160833,774160864,NO
774160865,774160869,BR
774160870,774160873,CA
774160874,774160895,CR
774160896,774160927,PA
-774160928,774160935,CU
+774160928,774160935,MW
774160936,774160946,BS
774160947,774160956,KY
774160957,774160966,JM
@@ -16006,7 +6361,7 @@
774161273,774161282,MT
774161283,774161292,SE
774161293,774161302,US
-774161303,774161312,HK
+774161303,774161312,VA
774161313,774161322,IE
774161323,774161332,PK
774161333,774161337,KW
@@ -16022,24 +6377,30 @@
774161383,774161387,EE
774161388,774161392,LU
774161393,774161397,SK
-774161398,774161402,SI
+774161398,774161402,VA
774161403,774161405,LC
774161406,774161408,VA
-774161409,774161418,AU
+774161409,774161409,GB
+774161410,774161417,US
+774161418,774161418,GB
774161419,774161428,GL
774161429,774161438,HU
774161439,774161448,MK
774161449,774161458,PS
774161459,774161468,UZ
774161469,774161478,MS
-774161479,774161488,US
+774161479,774161479,GB
+774161480,774161487,US
+774161488,774161488,GB
774161489,774161498,MN
774161499,774161518,US
774161519,774161528,TW
774161529,774161538,DO
774161539,774161548,PY
774161549,774161558,EE
-774161559,774161568,SK
+774161559,774161559,SK
+774161560,774161566,BR
+774161567,774161568,SK
774161569,774161578,LC
774161579,774161588,VE
774161589,774161598,TC
@@ -16049,9 +6410,11 @@
774161649,774161658,HK
774161659,774161664,VA
774161665,774161674,US
-774161675,774161684,CL
+774161675,774161675,CL
+774161676,774161684,VA
774161685,774161694,GR
-774161695,774161704,AG
+774161695,774161695,AG
+774161696,774161704,GR
774161705,774161714,AM
774161715,774161724,GB
774161725,774161734,RO
@@ -16062,128 +6425,114 @@
774161775,774161784,SN
774161785,774161794,MA
774161795,774161804,BH
-774161805,774161814,JE
+774161805,774161805,JE
+774161806,774161813,US
+774161814,774161814,JE
774161815,774161824,TV
-774161825,774161834,PF
+774161825,774161825,PF
+774161826,774161833,US
+774161834,774161834,PF
774161835,774161844,SB
774161845,774161854,VU
-774161855,774161864,CW
-774161865,774161869,AR
+774161855,774161855,CW
+774161856,774161863,MX
+774161864,774161864,CW
+774161865,774161865,AR
+774161866,774161869,VA
774161870,774161874,ES
-774161875,774161879,GE
-774161880,774161884,RS
-774161885,774161889,DE
-774161890,774161894,IT
-774161895,774161899,BE
+774161875,774161899,VA
774161900,774161904,FR
-774161905,774161909,CZ
-774161910,774161914,LT
-774161915,774161917,PL
-774161918,774161920,VA
-774161921,774161940,GB
-774161941,774161950,AU
-774161951,774161955,IT
-774161956,774161960,NZ
-774161961,774161965,PL
-774161966,774161970,NL
-774161971,774161975,CA
-774161976,774161980,US
-774161981,774161985,GB
-774161986,774161990,IQ
-774161991,774161995,LT
-774161996,774162000,ER
-774162001,774162005,KE
-774162006,774162010,DE
-774162011,774162015,TN
-774162016,774162020,TT
-774162021,774162025,BO
-774162026,774162030,CH
-774162031,774162035,AU
-774162036,774162040,AL
-774162041,774162045,AD
-774162046,774162050,HR
-774162051,774162055,ME
-774162056,774162060,SY
+774161905,774162060,VA
774162061,774162065,US
-774162066,774162070,HT
-774162071,774162075,EC
-774162076,774162080,SH
-774162081,774162085,ZM
-774162086,774162090,KH
-774162091,774162095,VN
-774162096,774162100,FM
-774162101,774162105,US
+774162066,774162105,VA
774162106,774162110,GB
-774162111,774162115,SO
-774162116,774162120,FI
-774162121,774162125,DZ
+774162111,774162125,VA
774162126,774162130,MO
-774162131,774162135,MR
-774162136,774162140,CM
-774162141,774162145,SV
-774162146,774162150,HN
-774162151,774162155,US
-774162156,774162160,UY
-774162161,774162165,LV
-774162166,774162170,MD
+774162131,774162170,VA
774162171,774162173,GB
-774162174,774162176,VA
-774162177,774162181,LK
-774162182,774162186,IE
-774162187,774162196,EH
-774162197,774162206,NA
-774162207,774162216,CX
-774162217,774162236,GB
-774162237,774162246,CH
-774162247,774162266,US
-774162267,774162276,PT
-774162277,774162286,AE
-774162287,774162296,IO
+774162174,774162225,VA
+774162226,774162236,GB
+774162237,774162246,VA
+774162247,774162256,US
+774162257,774162296,VA
774162297,774162306,GB
-774162307,774162316,RE
-774162317,774162326,TK
-774162327,774162336,CV
+774162307,774162336,VA
774162337,774162346,AZ
774162347,774162366,US
774162367,774162376,MX
-774162377,774162386,GB
-774162387,774162396,ZW
+774162377,774162383,GB
+774162384,774162386,MX
+774162387,774162387,ZW
+774162388,774162395,DE
+774162396,774162396,ZW
774162397,774162406,SZ
774162407,774162416,SD
774162417,774162426,BF
774162427,774162432,VA
774162433,774162442,GB
774162443,774162452,BA
-774162453,774162462,WS
+774162453,774162453,WS
+774162454,774162461,BO
+774162462,774162462,WS
774162463,774162472,SR
-774162473,774162483,PT
-774162484,774162492,CK
-774162493,774162502,KI
+774162473,774162473,PT
+774162474,774162481,IT
+774162482,774162482,PT
+774162483,774162492,CK
+774162493,774162493,KI
+774162494,774162501,IT
+774162502,774162502,KI
774162503,774162512,NU
-774162513,774162522,TO
-774162523,774162532,CL
+774162513,774162513,TO
+774162514,774162521,BO
+774162522,774162522,TO
+774162523,774162523,CL
+774162524,774162531,DE
+774162532,774162532,CL
774162533,774162542,TF
774162543,774162552,GG
-774162553,774162562,LR
+774162553,774162553,LR
+774162554,774162561,MX
+774162562,774162562,LR
774162563,774162572,MQ
774162573,774162582,YT
774162583,774162592,NC
-774162593,774162602,NG
-774162603,774162627,US
+774162593,774162593,NG
+774162594,774162601,CA
+774162602,774162602,NG
+774162603,774162622,US
+774162623,774162627,MX
774162628,774162637,GB
774162638,774162642,NF
-774162643,774162687,US
+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,774162778,US
-774162779,774162798,CA
+774162689,774162693,US
+774162694,774162698,MZ
+774162699,774162703,NP
+774162704,774162738,US
+774162739,774162743,VA
+774162744,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
+774162824,774162827,US
+774162828,774162828,MV
774162829,774162833,PN
-774162834,774162838,SM
+774162834,774162835,SM
+774162836,774162838,PN
774162839,774162848,GB
774162849,774162853,AU
774162854,774162858,NL
@@ -16199,43 +6548,39 @@
774162929,774162933,NR
774162934,774162938,GS
774162939,774162942,UM
-774162943,774162943,VA
-774162944,774162964,CH
-774162965,774162969,LU
-774162970,774162974,BY
-774162975,774162979,MY
-774162980,774162984,IN
-774162985,774162989,HR
-774162990,774162999,RU
-774163000,774163004,PK
-774163005,774163009,NZ
-774163010,774163014,VE
-774163015,774163074,CH
-774163075,774163084,GW
-774163085,774163094,LS
-774163095,774163104,ML
-774163105,774163114,PW
-774163115,774163124,SL
-774163125,774163134,TJ
-774163135,774163139,TG
-774163140,774163144,AS
-774163145,774163149,BD
-774163150,774163154,BT
-774163155,774163159,GF
-774163160,774163164,GP
-774163165,774163169,GN
-774163170,774163174,MU
-774163175,774163179,CG
-774163180,774163199,CH
-774163200,774163205,VA
-774163206,774163210,AU
+774162943,774162944,VA
+774162945,774162964,IT
+774162965,774162966,MX
+774162967,774162967,LI
+774162968,774162969,MX
+774162970,774162970,BY
+774162971,774162971,MX
+774162972,774162974,VA
+774162975,774162975,MY
+774162976,774162979,VA
+774162980,774162980,IN
+774162981,774162983,BO
+774162984,774162987,SX
+774162988,774162991,MX
+774162992,774162999,VA
+774163000,774163000,PK
+774163001,774163004,BO
+774163005,774163005,NZ
+774163006,774163009,BO
+774163010,774163010,VE
+774163011,774163014,BO
+774163015,774163071,VA
+774163072,774163074,GW
+774163075,774163124,IT
+774163125,774163127,TJ
+774163128,774163203,VA
+774163204,774163210,AU
774163211,774163215,TD
774163216,774163220,CD
774163221,774163225,DJ
774163226,774163230,CF
774163231,774163235,VA
-774163236,774163239,MF
-774163240,774163240,SX
+774163236,774163240,MF
774163241,774163245,VC
774163246,774163250,PM
774163251,774163255,BL
@@ -16244,39 +6589,29 @@
774163266,774163270,TZ
774163271,774163275,ST
774163276,774163280,GB
-774163281,774163285,KP
-774163286,774163290,FK
-774163291,774163295,BJ
-774163296,774163300,BI
-774163301,774163305,CI
-774163306,774163310,GQ
-774163311,774163315,GA
-774163316,774163320,GH
-774163321,774163325,NE
-774163326,774163330,RW
-774163331,774163335,UG
-774163336,774163340,MP
-774163341,774163345,TL
-774163346,774163350,WF
-774163351,774163354,SD
-774163355,774163360,SS
-774163361,774163370,BQ
-774163371,774163380,CW
-774163381,774163390,IT
-774163391,774163400,GE
-774163401,774163415,US
-774163416,774163454,IT
-774163455,774164479,VA
-774164480,774166527,CZ
+774163281,774163283,KP
+774163284,774163290,FK
+774163291,774163330,IT
+774163331,774163331,UG
+774163332,774163335,VA
+774163336,774163339,MP
+774163340,774163343,TL
+774163344,774163347,WF
+774163348,774163351,SD
+774163352,774163359,VA
+774163360,774163367,BQ
+774163368,774163375,CW
+774163376,774163383,IT
+774163384,774163391,GE
+774163392,774163399,VA
+774163400,774163411,US
+774163412,774163455,VA
+774163456,774166527,DK
774166528,774168575,EE
774168576,774176767,PL
-774176768,774179391,IT
-774179392,774179407,CH
-774179408,774184959,IT
+774176768,774184959,IT
774184960,774193151,GB
-774193152,774206975,ES
-774206976,774207231,GB
-774207232,774209535,ES
+774193152,774209535,ES
774209536,774217727,RU
774217728,774225919,GB
774225920,774234111,UA
@@ -16284,10 +6619,8 @@
774242304,774258687,RU
774258688,774266879,SA
774266880,774275071,RU
-774275072,774283007,IR
-774283008,774283263,GB
-774283264,774284287,US
-774284288,774291455,GB
+774275072,774283263,IR
+774283264,774291455,GB
774291456,774299647,NL
774299648,774307839,DE
774307840,774324223,RU
@@ -16301,23 +6634,15 @@
774389760,774406143,BG
774406144,774422527,IT
774422528,774438911,OM
-774438912,774443823,DE
-774443824,774443839,PA
-774443840,774444031,DE
-774444032,774444047,NL
-774444048,774444223,DE
-774444224,774444255,NL
-774444256,774455295,DE
+774438912,774455295,DE
774455296,774471679,RU
774471680,774488063,PL
-774488064,774504447,RO
+774488064,774504447,IR
774504448,774520831,RU
774520832,774537215,BH
774537216,774553599,RU
774553600,774569983,RO
-774569984,774579295,GB
-774579296,774579327,IT
-774579328,774586367,GB
+774569984,774586367,GB
774586368,774602751,PS
774602752,774619135,GB
774619136,774651903,RU
@@ -16355,46 +6680,8 @@
775421952,775487487,BY
775487488,775520255,AT
775520256,775553023,SY
-775553024,775557119,EU
-775557120,775557375,CH
-775557376,775569407,EU
-775569408,775569663,US
-775569664,775585791,EU
775585792,775618559,SY
-775618560,775641087,SE
-775641088,775641119,FI
-775641120,775641215,SE
-775641216,775641279,GB
-775641280,775641343,DE
-775641344,775641375,FI
-775641376,775641471,SE
-775641472,775641535,GB
-775641536,775641599,DE
-775641600,775641631,FI
-775641632,775641727,SE
-775641728,775641791,GB
-775641792,775641855,DE
-775641856,775641887,FI
-775641888,775641983,SE
-775641984,775642047,GB
-775642048,775642111,DE
-775642112,775642143,FI
-775642144,775642239,SE
-775642240,775642303,GB
-775642304,775642367,DE
-775642368,775642399,FI
-775642400,775642495,SE
-775642496,775642559,GB
-775642560,775642623,DE
-775642624,775642655,FI
-775642656,775642751,SE
-775642752,775642815,GB
-775642816,775642879,DE
-775642880,775642911,FI
-775642912,775643007,SE
-775643008,775643071,GB
-775643072,775643135,DE
-775643136,775645951,SE
+775618560,775645951,SE
775645952,775646207,NO
775646208,775651327,SE
775651328,775684095,DE
@@ -16403,7 +6690,7 @@
775710720,775716863,PS
775716864,775749631,GB
775749632,775847935,RU
-775847936,775880703,RO
+775847936,775880703,IR
775880704,775913471,UA
775913472,775946239,RU
775946240,776077311,GB
@@ -16417,1536 +6704,108 @@
778043392,778108927,UA
778108928,778174463,RO
778174464,778239999,UA
-778240000,778244351,AL
-778244352,778244607,RS
-778244608,778305535,AL
+778240000,778244095,AL
+778244096,778244351,RS
+778244352,778245119,AL
+778245120,778245375,RS
+778245376,778247679,AL
+778247680,778247935,XK
+778247936,778248191,RS
+778248192,778249727,AL
+778249728,778249983,RS
+778249984,778305535,AL
778305536,778371071,IR
778371072,778436607,RU
-778436608,778498047,RO
+778436608,778476031,RO
+778476032,778476287,MD
+778476288,778493951,RO
+778493952,778495999,NL
+778496000,778498047,RO
778498048,778500095,NL
778500096,778502143,RO
778502144,778567679,GR
778567680,778633215,TR
-778633216,778638079,FR
-778638080,778638335,IT
-778638336,778638591,ES
-778638592,778638975,FR
-778638976,778639103,CZ
-778639104,778639231,LT
-778639232,778639359,FI
-778639360,778639615,ES
-778639616,778639871,PL
-778639872,778640127,DE
-778640128,778640383,GB
-778640384,778640639,IT
-778640640,778640895,PT
-778640896,778641151,NL
-778641152,778641407,IE
-778641408,778665983,FR
-778665984,778666015,BE
-778666016,778666031,FR
-778666032,778666047,PL
-778666048,778666063,FR
-778666064,778666079,IE
-778666080,778666095,FR
-778666096,778666099,PL
-778666100,778666103,LT
-778666104,778666107,GB
-778666108,778666111,IE
-778666112,778666119,FR
-778666120,778666123,GB
-778666124,778666127,NL
-778666128,778666135,FR
-778666136,778666143,PL
-778666144,778666151,FR
-778666152,778666155,GB
-778666156,778666159,ES
-778666160,778666191,FR
-778666192,778666239,PL
-778666240,778666243,PT
-778666244,778666247,GB
-778666248,778666259,FR
-778666260,778666263,PL
-778666264,778666271,CH
-778666272,778666287,FR
-778666288,778666295,GB
-778666296,778666299,ES
-778666300,778666303,PL
-778666304,778666367,FR
-778666368,778666371,PL
-778666372,778666379,GB
-778666380,778666383,ES
-778666384,778666391,DE
-778666392,778666399,PL
-778666400,778666479,FR
+778633216,778666259,FR
+778666260,778666263,ES
+778666264,778666479,FR
778666480,778666495,DE
-778666496,778666751,IE
-778666752,778666783,CZ
-778666784,778666847,FR
-778666848,778666863,PT
-778666864,778666867,GB
-778666868,778666871,FR
-778666872,778666879,IE
-778666880,778666967,FR
-778666968,778666975,PL
-778666976,778667071,FR
-778667072,778667103,BE
-778667104,778667119,GB
-778667120,778667123,PT
-778667124,778667127,FR
-778667128,778667131,PL
-778667132,778667135,BE
-778667136,778667139,PL
-778667140,778667143,GB
-778667144,778667151,FR
-778667152,778667155,PL
-778667156,778667159,ES
-778667160,778667163,IT
-778667164,778667167,CH
-778667168,778667171,BE
-778667172,778667175,LT
-778667176,778667179,ES
-778667180,778667183,PT
-778667184,778667187,DE
-778667188,778667191,PL
-778667192,778667195,FR
-778667196,778667263,PL
-778667264,778667283,FR
-778667284,778667287,PL
-778667288,778667291,IT
-778667292,778667295,CH
-778667296,778667331,GB
-778667332,778667335,FR
-778667336,778667343,ES
-778667344,778667347,FR
-778667348,778667351,GB
-778667352,778667391,PL
-778667392,778667395,FR
-778667396,778667399,PL
-778667400,778667407,FI
-778667408,778667415,PL
-778667416,778667423,GB
-778667424,778667455,LT
-778667456,778667471,DE
-778667472,778667475,PL
-778667476,778667479,FR
-778667480,778667483,GB
-778667484,778667487,NL
-778667488,778667491,LT
-778667492,778667495,CH
-778667496,778667499,DE
-778667500,778667503,GB
-778667504,778667847,FR
-778667848,778667855,PL
-778667856,778667859,FR
-778667860,778667863,PL
-778667864,778667871,GB
-778667872,778667875,ES
-778667876,778667879,LT
-778667880,778667887,FI
-778667888,778667895,IT
-778667896,778667903,IE
-778667904,778667911,GB
-778667912,778667915,PL
-778667916,778667919,PT
-778667920,778667927,NL
-778667928,778667931,GB
-778667932,778667935,CZ
-778667936,778667943,FR
-778667944,778667947,PT
-778667948,778667951,PL
-778667952,778667967,GB
-778667968,778668015,FR
-778668016,778668019,DE
-778668020,778668023,NL
-778668024,778668027,PT
-778668028,778668031,NL
-778668032,778668319,FR
-778668320,778668351,GB
-778668352,778668359,FR
-778668360,778668367,PL
-778668368,778668371,DE
-778668372,778668375,ES
-778668376,778668379,GB
-778668380,778668383,FR
-778668384,778668391,ES
-778668392,778668395,FI
-778668396,778668399,ES
-778668400,778668415,GB
-778668416,778668495,ES
-778668496,778668499,PL
-778668500,778668507,FR
-778668508,778668511,PT
-778668512,778668515,PL
-778668516,778668519,DE
-778668520,778668527,FR
-778668528,778668535,IT
-778668536,778668539,DE
-778668540,778668543,FR
-778668544,778668559,GB
-778668560,778668567,IT
-778668568,778668575,PL
-778668576,778668607,FR
-778668608,778668615,IE
-778668616,778668619,FI
-778668620,778668623,PL
-778668624,778668639,FR
-778668640,778668671,PL
-778668672,778668703,FR
-778668704,778668707,PL
-778668708,778668711,ES
-778668712,778668719,FR
-778668720,778668727,PT
-778668728,778668731,IE
-778668732,778668735,FR
-778668736,778668799,IT
-778668800,778668863,FR
+778666496,778666879,FR
+778666880,778666943,GB
+778666944,778668863,FR
778668864,778668895,DE
-778668896,778669055,FR
-778669056,778669087,ES
-778669088,778669103,FR
-778669104,778669107,CZ
-778669108,778669111,GB
-778669112,778669115,FR
-778669116,778669119,DE
-778669120,778669151,FI
-778669152,778669207,FR
-778669208,778669211,CH
-778669212,778669215,ES
-778669216,778669219,CH
-778669220,778669223,FI
-778669224,778669231,GB
-778669232,778669295,FR
-778669296,778669303,PL
-778669304,778669311,DE
-778669312,778669447,FR
-778669448,778669451,BE
-778669452,778669455,ES
-778669456,778669471,FR
-778669472,778669503,CZ
-778669504,778669535,FR
-778669536,778669539,FI
-778669540,778669543,GB
-778669544,778669551,FR
-778669552,778669567,PL
-778669568,778669571,DE
-778669572,778669575,CZ
-778669576,778669579,NL
-778669580,778669583,DE
-778669584,778669587,ES
-778669588,778669591,FR
-778669592,778669599,BE
-778669600,778669615,FR
-778669616,778669623,GB
-778669624,778669631,PL
-778669632,778669663,FR
-778669664,778669695,NL
-778669696,778669727,PT
-778669728,778669759,NL
-778669760,778669767,DE
-778669768,778669771,GB
-778669772,778669775,FR
-778669776,778669783,DE
-778669784,778669787,IE
-778669788,778669791,PL
-778669792,778669807,DE
-778669808,778669823,FR
-778669824,778669855,ES
-778669856,778669887,FR
-778669888,778669903,PL
-778669904,778669935,FR
-778669936,778669943,DE
-778669944,778669951,CH
-778669952,778669959,NL
-778669960,778669967,GB
-778669968,778669983,IE
-778669984,778669999,IT
-778670000,778670007,PL
-778670008,778670011,CZ
-778670012,778670015,LT
-778670016,778670019,NL
-778670020,778670035,IT
-778670036,778670039,GB
-778670040,778670043,ES
-778670044,778670047,PT
-778670048,778670079,GB
-778670080,778670151,FR
-778670152,778670159,CH
-778670160,778670163,FR
-778670164,778670171,GB
-778670172,778670175,NL
-778670176,778670207,GB
-778670208,778670211,DE
-778670212,778670223,FR
-778670224,778670239,PL
-778670240,778670243,NL
-778670244,778670247,DE
-778670248,778670255,CZ
-778670256,778670287,FR
-778670288,778670291,CZ
-778670292,778670295,FR
-778670296,778670299,PL
-778670300,778670303,DE
-778670304,778670335,FR
-778670336,778670343,DE
-778670344,778670347,FR
-778670348,778670351,PL
-778670352,778670355,DE
-778670356,778670359,FR
-778670360,778670383,DE
-778670384,778670387,BE
-778670388,778670391,NL
-778670392,778670395,FR
-778670396,778670399,GB
-778670400,778670407,PL
-778670408,778670411,DE
-778670412,778670415,NL
-778670416,778670439,FR
-778670440,778670447,PL
-778670448,778670455,CH
-778670456,778670495,CZ
-778670496,778670503,FR
-778670504,778670511,ES
-778670512,778670519,NL
-778670520,778670523,FR
-778670524,778670527,PT
-778670528,778670559,FR
-778670560,778670563,PL
-778670564,778670567,FI
-778670568,778670575,FR
-778670576,778670591,IT
-778670592,778671103,ES
-778671104,778671127,GB
-778671128,778671135,PT
-778671136,778671167,BE
-778671168,778671171,DE
-778671172,778671175,FR
-778671176,778671183,ES
-778671184,778671203,FR
-778671204,778671207,FI
-778671208,778671211,FR
-778671212,778671215,PL
-778671216,778671231,FR
-778671232,778671239,GB
-778671240,778671247,FR
-778671248,778671263,PL
-778671264,778671279,GB
-778671280,778671311,FR
-778671312,778671327,PT
-778671328,778671331,ES
-778671332,778671335,DE
-778671336,778671343,BE
-778671344,778671631,FR
-778671632,778671647,PL
-778671648,778671807,FR
-778671808,778671839,ES
-778671840,778671871,FR
-778671872,778671875,DE
-778671876,778671879,ES
-778671880,778671883,NL
-778671884,778671887,FR
-778671888,778671903,GB
-778671904,778671907,NL
-778671908,778671915,FR
-778671916,778671919,GB
-778671920,778671967,FR
-778671968,778671999,NL
-778672000,778672055,FR
-778672056,778672063,PL
-778672064,778672067,GB
-778672068,778672071,BE
-778672072,778672079,GB
-778672080,778672095,BE
-778672096,778672103,CH
-778672104,778672111,NL
-778672112,778672119,GB
-778672120,778672123,ES
-778672124,778672127,CH
-778672128,778672255,FR
-778672256,778672319,BE
-778672320,778672383,FR
-778672384,778672447,PL
-778672448,778672479,DE
-778672480,778672511,ES
-778672512,778672527,PL
-778672528,778672543,FR
-778672544,778672551,ES
-778672552,778672559,CH
-778672560,778672563,GB
-778672564,778672567,IT
-778672568,778672639,FR
-778672640,778672703,DE
-778672704,778672767,CH
-778672768,778672803,FR
-778672804,778672807,DE
-778672808,778672811,PL
-778672812,778672815,ES
-778672816,778672819,IT
-778672820,778672823,ES
-778672824,778672831,DE
-778672832,778672851,FR
-778672852,778672879,PL
-778672880,778672887,FR
-778672888,778672891,ES
-778672892,778672911,FR
-778672912,778672919,PL
-778672920,778672927,FR
-778672928,778672959,DE
-778672960,778673079,FR
-778673080,778673083,ES
-778673084,778673087,PT
-778673088,778673119,FR
-778673120,778673151,ES
-778673152,778673187,FR
-778673188,778673191,DE
-778673192,778673195,ES
-778673196,778673199,GB
-778673200,778673207,FR
-778673208,778673215,DE
-778673216,778673247,IE
-778673248,778673263,FR
-778673264,778673279,IT
-778673280,778673283,GB
-778673284,778673295,FR
-778673296,778673303,PL
-778673304,778673311,DE
-778673312,778673315,CH
-778673316,778673319,FR
-778673320,778673327,IT
-778673328,778673343,FR
-778673344,778673359,PL
-778673360,778673375,GB
-778673376,778673387,FR
-778673388,778673391,DE
-778673392,778673407,PT
-778673408,778673663,PL
-778673664,778673711,FR
-778673712,778673719,PT
-778673720,778673723,IT
-778673724,778673727,PL
-778673728,778673807,FR
-778673808,778673839,ES
-778673840,778673843,FR
-778673844,778673847,GB
-778673848,778673851,DE
-778673852,778673879,FR
-778673880,778673883,CZ
-778673884,778673887,FI
-778673888,778673903,FR
-778673904,778673911,IT
-778673912,778673915,FR
-778673916,778673919,ES
-778673920,778674175,NL
-778674176,778674367,FR
-778674368,778674387,DE
-778674388,778674391,BE
-778674392,778674395,CH
-778674396,778674399,PT
-778674400,778674431,FR
-778674432,778674435,PL
-778674436,778674439,ES
-778674440,778674447,PL
-778674448,778674451,IT
-778674452,778674455,PL
-778674456,778674459,IT
-778674460,778674463,FI
-778674464,778674471,CH
-778674472,778674475,BE
-778674476,778674479,CH
-778674480,778674487,FR
-778674488,778674491,CZ
-778674492,778674495,PL
-778674496,778674499,CZ
-778674500,778674503,DE
-778674504,778674507,PL
-778674508,778674527,FR
-778674528,778674531,DE
-778674532,778674535,ES
-778674536,778674539,PT
-778674540,778674543,PL
-778674544,778674559,DE
-778674560,778674575,GB
-778674576,778674583,NL
-778674584,778674587,DE
-778674588,778674623,FR
-778674624,778674635,PL
-778674636,778674639,ES
-778674640,778674687,FR
-778674688,778674719,GB
-778674720,778674783,FR
-778674784,778674799,PL
-778674800,778674847,FR
-778674848,778674863,IT
-778674864,778674879,FI
-778674880,778674911,FR
-778674912,778674943,IE
-778674944,778674975,FR
-778674976,778674979,BE
-778674980,778674983,DE
-778674984,778674999,FR
-778675000,778675003,FI
-778675004,778675071,FR
-778675072,778675075,DE
-778675076,778675079,IT
-778675080,778675087,ES
-778675088,778675159,FR
-778675160,778675163,PL
-778675164,778675167,GB
-778675168,778675199,FR
-778675200,778675207,ES
-778675208,778675215,PL
-778675216,778675219,PT
-778675220,778675223,FR
-778675224,778675227,CZ
-778675228,778675235,FR
-778675236,778675243,PL
-778675244,778675247,DE
-778675248,778675359,FR
-778675360,778675367,DE
-778675368,778675371,CH
-778675372,778675375,CZ
-778675376,778675391,GB
-778675392,778675439,FR
-778675440,778675443,NL
-778675444,778675447,FR
-778675448,778675451,PL
-778675452,778675455,DE
-778675456,778675459,PL
-778675460,778675463,FR
-778675464,778675467,NL
-778675468,778675471,FR
-778675472,778675475,BE
-778675476,778675479,ES
-778675480,778675483,CH
-778675484,778675487,PT
-778675488,778675495,PL
-778675496,778675499,DE
-778675500,778675503,PL
-778675504,778675507,DE
-778675508,778675511,GB
-778675512,778675519,PL
-778675520,778675535,NL
-778675536,778675543,ES
-778675544,778675551,FR
-778675552,778675555,PL
-778675556,778675559,FR
-778675560,778675567,DE
-778675568,778675579,FR
-778675580,778675583,GB
-778675584,778675599,FR
-778675600,778675615,GB
-778675616,778675619,PL
-778675620,778675627,ES
-778675628,778675631,PL
-778675632,778675639,ES
-778675640,778675647,DE
-778675648,778675687,FR
-778675688,778675691,ES
-778675692,778675695,FR
-778675696,778675711,NL
-778675712,778675735,FR
-778675736,778675743,PL
-778675744,778675759,FR
-778675760,778675763,PT
+778668896,778670975,FR
+778670976,778670976,DE
+778670977,778673187,FR
+778673188,778673191,ES
+778673192,778673207,FR
+778673208,778673211,ES
+778673212,778673883,FR
+778673884,778673887,ES
+778673888,778675763,FR
778675764,778675767,PL
-778675768,778675775,ES
-778675776,778675779,GB
-778675780,778675783,PL
-778675784,778675791,ES
-778675792,778675795,NL
-778675796,778675799,DE
-778675800,778675803,GB
-778675804,778675807,CZ
-778675808,778675811,PL
-778675812,778675815,GB
-778675816,778675819,FR
-778675820,778675823,GB
-778675824,778675827,ES
-778675828,778675831,DE
-778675832,778675839,FR
-778675840,778675843,FI
-778675844,778675847,FR
-778675848,778675851,GB
-778675852,778675855,PT
-778675856,778675859,GB
-778675860,778675863,IE
-778675864,778675871,IT
-778675872,778675887,FR
-778675888,778675891,DE
-778675892,778675895,LT
-778675896,778675903,PL
-778675904,778675907,CH
-778675908,778675911,CZ
-778675912,778675915,NL
-778675916,778675919,DE
-778675920,778675923,FR
-778675924,778675927,IT
-778675928,778675935,FR
-778675936,778675947,ES
-778675948,778676095,FR
-778676096,778676099,DE
-778676100,778676103,CZ
-778676104,778676111,GB
-778676112,778676119,FR
-778676120,778676127,PL
-778676128,778676131,ES
-778676132,778676135,CZ
-778676136,778676139,DE
-778676140,778676143,PL
-778676144,778676159,ES
-778676160,778676183,FR
-778676184,778676191,PL
-778676192,778676207,FR
-778676208,778676215,DE
-778676216,778676219,FR
-778676220,778676223,GB
-778676224,778676351,FR
-778676352,778676359,NL
-778676360,778676367,FR
-778676368,778676383,GB
-778676384,778676415,FR
-778676416,778676423,ES
-778676424,778676431,PL
-778676432,778676439,FR
-778676440,778676443,PL
-778676444,778676447,CH
-778676448,778676463,FR
-778676464,778676479,PL
-778676480,778676543,NL
-778676544,778676555,FR
-778676556,778676559,ES
-778676560,778676563,FR
-778676564,778676567,NL
-778676568,778676579,FR
-778676580,778676583,DE
-778676584,778676587,BE
-778676588,778676591,DE
-778676592,778676607,FR
-778676608,778676611,PL
-778676612,778676615,PT
-778676616,778676619,BE
-778676620,778676623,FR
-778676624,778676627,GB
-778676628,778676631,ES
-778676632,778676635,FR
-778676636,778676639,DE
-778676640,778676655,ES
-778676656,778676687,FR
-778676688,778676691,ES
-778676692,778676695,PL
-778676696,778676719,FR
-778676720,778676723,GB
-778676724,778676727,PT
-778676728,778676735,BE
-778676736,778676743,FR
-778676744,778676747,CH
-778676748,778676751,CZ
-778676752,778676767,ES
-778676768,778676771,PL
-778676772,778676775,ES
-778676776,778676779,PL
-778676780,778676799,FR
-778676800,778676803,GB
-778676804,778676807,IT
-778676808,778676815,GB
-778676816,778676823,LT
-778676824,778676827,GB
-778676828,778676831,NL
-778676832,778676847,FR
-778676848,778676851,NL
-778676852,778676855,LT
-778676856,778676859,IE
-778676860,778676863,DE
-778676864,778676991,PL
-778676992,778676995,FR
-778676996,778676999,PL
-778677000,778677003,FR
-778677004,778677007,GB
-778677008,778677031,FR
-778677032,778677039,ES
-778677040,778677055,PL
-778677056,778677063,IT
-778677064,778677075,FR
-778677076,778677079,DE
-778677080,778677083,IT
-778677084,778677087,DE
-778677088,778677099,FR
-778677100,778677103,PL
-778677104,778677107,GB
-778677108,778677111,PL
-778677112,778677115,FR
-778677116,778677119,NL
-778677120,778677123,DE
-778677124,778677127,GB
-778677128,778677131,FR
-778677132,778677135,BE
-778677136,778677151,FR
-778677152,778677167,DE
-778677168,778677183,FR
-778677184,778677215,ES
-778677216,778677247,PL
-778677248,778677251,FR
-778677252,778677259,ES
-778677260,778677311,FR
-778677312,778677327,PL
-778677328,778677331,FI
-778677332,778677335,FR
-778677336,778677339,CH
-778677340,778677343,CZ
-778677344,778677375,FR
-778677376,778677391,GB
-778677392,778677399,FR
-778677400,778677403,PT
-778677404,778677407,CZ
-778677408,778677411,CH
-778677412,778677427,PL
-778677428,778677431,DE
-778677432,778677435,FR
-778677436,778677439,PL
-778677440,778677471,FR
+778675768,778675795,FR
+778675796,778675799,ES
+778675800,778675891,FR
+778675892,778675895,ES
+778675896,778677071,FR
+778677072,778677075,NL
+778677076,778677471,FR
778677472,778677475,DE
-778677476,778677479,CZ
-778677480,778677483,PL
-778677484,778677487,FR
-778677488,778677503,PL
-778677504,778677507,IE
-778677508,778677511,DE
-778677512,778677515,IT
-778677516,778677519,GB
-778677520,778677523,PL
-778677524,778677527,DE
-778677528,778677531,BE
-778677532,778677535,PT
-778677536,778677543,FI
-778677544,778677547,ES
-778677548,778677551,GB
-778677552,778677559,PL
-778677560,778677567,ES
-778677568,778677695,FR
-778677696,778677699,NL
-778677700,778677703,DE
-778677704,778677711,PL
-778677712,778677719,FR
-778677720,778677723,GB
-778677724,778677727,PL
-778677728,778677855,FR
-778677856,778677859,ES
-778677860,778677863,LT
-778677864,778677871,CH
-778677872,778677875,PL
-778677876,778677879,IT
-778677880,778677883,LT
-778677884,778677887,BE
-778677888,778677903,ES
-778677904,778677919,PT
-778677920,778677923,CH
-778677924,778677927,PT
-778677928,778677931,FR
-778677932,778677935,DE
-778677936,778677939,FR
-778677940,778677943,BE
-778677944,778677947,IT
-778677948,778677951,DE
-778677952,778677967,FR
-778677968,778677983,GB
-778677984,778677999,FR
-778678000,778678003,BE
-778678004,778678007,PL
-778678008,778678015,FR
-778678016,778678019,PL
-778678020,778678023,DE
-778678024,778678027,ES
-778678028,778678031,FR
-778678032,778678039,PL
-778678040,778678043,GB
-778678044,778678047,PL
-778678048,778678119,FR
-778678120,778678127,IT
-778678128,778678143,FR
-778678144,778678159,GB
-778678160,778678163,PL
-778678164,778678167,BE
-778678168,778678175,FR
-778678176,778678191,GB
-778678192,778678207,FR
-778678208,778678271,PL
-778678272,778678783,DE
-778678784,778678799,FR
-778678800,778678807,PL
-778678808,778678815,FR
-778678816,778678831,PL
-778678832,778678835,FR
-778678836,778678839,BE
-778678840,778678847,IT
-778678848,778678851,FR
-778678852,778678855,ES
-778678856,778678859,CZ
-778678860,778678863,GB
-778678864,778678871,PL
-778678872,778678875,ES
-778678876,778678879,NL
-778678880,778678895,FR
-778678896,778678903,GB
-778678904,778678911,PL
-778678912,778678919,FR
-778678920,778678927,ES
-778678928,778678943,BE
-778678944,778678967,FR
-778678968,778678975,PL
-778678976,778679007,FR
-778679008,778679023,PL
-778679024,778679031,NL
-778679032,778679035,FR
-778679036,778679039,PL
-778679040,778679047,DE
-778679048,778679055,PL
-778679056,778679071,BE
-778679072,778679075,FR
-778679076,778679079,BE
-778679080,778679087,FR
-778679088,778679091,PL
-778679092,778679095,CZ
-778679096,778679099,CH
-778679100,778679103,IT
-778679104,778679123,PL
-778679124,778679127,FR
-778679128,778679151,DE
-778679152,778679199,FR
-778679200,778679207,PT
-778679208,778679211,FR
-778679212,778679215,FI
-778679216,778679231,PT
-778679232,778679263,ES
-778679264,778679267,PT
-778679268,778679279,FR
-778679280,778679295,ES
-778679296,778679491,FR
-778679492,778679495,PL
-778679496,778679499,FR
-778679500,778679519,PL
-778679520,778679523,LT
-778679524,778679527,PL
-778679528,778679531,ES
-778679532,778679535,FR
-778679536,778679551,ES
-778679552,778679615,FR
-778679616,778679679,ES
-778679680,778679695,PT
-778679696,778679807,FR
-778679808,778679823,IT
-778679824,778679839,FR
-778679840,778679843,CH
-778679844,778679847,DE
-778679848,778679855,FR
-778679856,778679871,DE
-778679872,778679903,PL
-778679904,778679911,FR
-778679912,778679915,ES
-778679916,778679919,FR
-778679920,778679935,GB
-778679936,778680079,FR
-778680080,778680087,GB
-778680088,778680091,FR
-778680092,778680095,PL
-778680096,778680111,IT
-778680112,778680127,IE
-778680128,778680143,IT
-778680144,778680147,FR
-778680148,778680151,GB
-778680152,778680155,ES
-778680156,778680159,BE
-778680160,778680175,PT
-778680176,778680183,ES
-778680184,778680191,IT
-778680192,778680195,FR
-778680196,778680199,DE
-778680200,778680203,NL
-778680204,778680207,ES
-778680208,778680227,FR
+778677476,778677503,FR
+778677504,778677507,GB
+778677508,778677519,FR
+778677520,778677523,ES
+778677524,778679212,FR
+778679213,778679214,FI
+778679215,778679491,FR
+778679492,778679495,ES
+778679496,778680227,FR
778680228,778680231,IE
-778680232,778680255,FR
-778680256,778680271,IT
-778680272,778680287,GB
-778680288,778680471,FR
-778680472,778680475,ES
-778680476,778680479,IE
-778680480,778680559,FR
-778680560,778680575,ES
-778680576,778680639,NL
-778680640,778680643,FR
-778680644,778680647,PT
-778680648,778680655,ES
-778680656,778680679,FR
-778680680,778680683,PL
-778680684,778680767,FR
-778680768,778680831,BE
-778680832,778680895,IT
-778680896,778680959,CH
-778680960,778681023,DE
-778681024,778681087,FI
-778681088,778681343,FR
-778681344,778681359,GB
-778681360,778681367,ES
-778681368,778681371,FR
-778681372,778681375,LT
-778681376,778681383,FR
-778681384,778681391,DE
-778681392,778681399,FR
-778681400,778681403,DE
-778681404,778681407,ES
-778681408,778681411,FR
-778681412,778681419,GB
-778681420,778681423,FR
-778681424,778681431,FI
-778681432,778681435,IE
-778681436,778681439,FR
-778681440,778681455,GB
-778681456,778681459,NL
-778681460,778681463,PL
-778681464,778681471,ES
-778681472,778681479,FR
-778681480,778681483,IE
-778681484,778681487,PL
-778681488,778681495,IE
-778681496,778681503,FR
+778680232,778680683,FR
+778680684,778680687,ES
+778680688,778681503,FR
778681504,778681507,DE
-778681508,778681511,PL
-778681512,778681515,PT
-778681516,778681523,ES
-778681524,778681527,FR
-778681528,778681531,PL
-778681532,778681535,IT
-778681536,778681543,FR
-778681544,778681547,GB
-778681548,778681551,IT
-778681552,778681583,FR
-778681584,778681587,PL
-778681588,778681591,FR
-778681592,778681595,ES
-778681596,778681599,FR
-778681600,778681615,DE
-778681616,778681619,ES
-778681620,778681623,DE
-778681624,778681631,ES
-778681632,778681643,PL
-778681644,778681647,DE
-778681648,778681655,FR
-778681656,778681667,DE
-778681668,778681671,FR
-778681672,778681675,GB
-778681676,778681679,FR
-778681680,778681695,GB
-778681696,778681707,FR
-778681708,778681711,ES
-778681712,778681727,FR
-778681728,778681743,ES
-778681744,778681747,FR
-778681748,778681751,IT
-778681752,778681759,FR
-778681760,778681763,CZ
-778681764,778681767,NL
-778681768,778681771,PL
-778681772,778681775,IT
-778681776,778681779,GB
-778681780,778681787,FR
-778681788,778681791,NL
-778681792,778681823,IE
-778681824,778681839,FR
-778681840,778681843,IT
-778681844,778681855,FR
-778681856,778681859,NL
-778681860,778681871,FR
-778681872,778681887,IT
-778681888,778681903,LT
-778681904,778681919,NL
-778681920,778681983,GB
-778681984,778681999,PT
-778682000,778682015,FR
-778682016,778682031,PL
-778682032,778682047,BE
-778682048,778682063,NL
-778682064,778682079,PL
-778682080,778682095,FR
-778682096,778682103,IT
-778682104,778682111,ES
-778682112,778682115,FR
-778682116,778682119,PL
-778682120,778682127,FR
-778682128,778682131,CH
-778682132,778682135,NL
-778682136,778682139,FR
-778682140,778682143,DE
-778682144,778682175,FR
-778682176,778682191,IT
-778682192,778682207,GB
-778682208,778682239,FR
-778682240,778682243,NL
-778682244,778682247,LT
-778682248,778682251,GB
-778682252,778682255,CZ
-778682256,778682295,FR
-778682296,778682299,PL
-778682300,778682319,FR
-778682320,778682323,DE
-778682324,778682331,FR
-778682332,778682335,NL
-778682336,778682351,IT
-778682352,778682367,GB
-778682368,778690559,FR
-778690560,778690591,DE
-778690592,778690635,FR
-778690636,778690639,PL
-778690640,778690655,IT
-778690656,778690687,FR
-778690688,778690703,IE
-778690704,778690723,FR
-778690724,778690727,GB
-778690728,778690735,PL
-778690736,778690751,PT
-778690752,778690787,DE
-778690788,778690791,GB
-778690792,778690799,DE
-778690800,778690815,FR
-778690816,778690879,ES
-778690880,778690883,LT
-778690884,778690887,PL
-778690888,778690931,FR
-778690932,778690935,ES
-778690936,778690943,FR
-778690944,778690959,GB
-778690960,778690975,PL
-778690976,778690983,PT
-778690984,778690991,BE
-778690992,778690999,IT
-778691000,778691003,PL
-778691004,778691007,GB
-778691008,778691023,FR
-778691024,778691039,IE
-778691040,778691043,PL
-778691044,778691047,ES
-778691048,778691051,PL
-778691052,778691055,ES
-778691056,778691063,NL
-778691064,778691071,PL
-778691072,778691327,FR
-778691328,778691343,IT
-778691344,778691359,ES
-778691360,778691375,FR
-778691376,778691391,PL
-778691392,778691423,PT
-778691424,778691427,FR
-778691428,778691431,GB
-778691432,778691435,BE
-778691436,778691439,FR
-778691440,778691443,DE
-778691444,778691455,FR
-778691456,778691459,NL
-778691460,778691471,FR
-778691472,778691479,PL
-778691480,778691487,GB
-778691488,778691519,FR
-778691520,778691583,GB
-778691584,778691599,IE
-778691600,778691615,FR
-778691616,778691619,DE
-778691620,778691623,IE
-778691624,778691627,ES
-778691628,778691631,PL
-778691632,778691711,FR
+778681508,778681519,FR
+778681520,778681523,ES
+778681524,778691711,FR
778691712,778691727,GB
-778691728,778691743,FR
-778691744,778691747,PL
-778691748,778691751,FR
-778691752,778691755,IT
-778691756,778691759,ES
-778691760,778691775,FR
-778691776,778691791,GB
-778691792,778691795,DE
-778691796,778691799,FR
-778691800,778691803,ES
-778691804,778691807,FR
-778691808,778691839,ES
-778691840,778691855,IE
-778691856,778691967,FR
-778691968,778691971,NL
-778691972,778691975,FR
-778691976,778691983,ES
-778691984,778691987,CH
-778691988,778691991,IT
-778691992,778691999,FR
-778692000,778692007,ES
-778692008,778692015,FR
-778692016,778692019,IE
-778692020,778692023,GB
-778692024,778692031,FR
-778692032,778692039,DE
-778692040,778692063,PL
-778692064,778692095,CH
-778692096,778692103,CZ
-778692104,778692107,PL
-778692108,778692111,GB
-778692112,778692115,CZ
-778692116,778692119,GB
-778692120,778692191,FR
-778692192,778692195,ES
-778692196,778692199,CZ
-778692200,778692207,ES
-778692208,778692287,FR
-778692288,778692351,IE
-778692352,778692383,FR
-778692384,778692387,ES
-778692388,778692391,GB
-778692392,778692479,FR
-778692480,778692483,PL
-778692484,778692487,GB
-778692488,778692495,FR
-778692496,778692499,ES
-778692500,778692503,FR
-778692504,778692511,ES
-778692512,778692515,FR
-778692516,778692519,GB
-778692520,778692539,FR
-778692540,778692543,GB
-778692544,778692551,FR
-778692552,778692555,ES
-778692556,778692575,PL
-778692576,778692591,FR
-778692592,778692607,ES
-778692608,778692615,FR
-778692616,778692619,PL
-778692620,778692623,IE
-778692624,778692639,NL
-778692640,778692647,FR
-778692648,778692651,DE
-778692652,778692671,FR
-778692672,778692679,DE
-778692680,778692683,ES
-778692684,778692687,CZ
-778692688,778692703,FR
-778692704,778692711,NL
-778692712,778692719,GB
-778692720,778692723,PL
-778692724,778692735,FR
-778692736,778692739,ES
-778692740,778692743,PL
-778692744,778692747,PT
-778692748,778692751,ES
-778692752,778692767,GB
-778692768,778692783,ES
-778692784,778692787,PL
-778692788,778692791,IT
-778692792,778692799,FR
-778692800,778692807,IE
-778692808,778692811,FR
-778692812,778692815,DE
-778692816,778692823,NL
-778692824,778692827,IT
-778692828,778692831,GB
-778692832,778692839,IE
-778692840,778692843,FR
-778692844,778692847,PL
-778692848,778692863,DE
-778692864,778692879,FR
-778692880,778692883,PL
-778692884,778692887,FR
-778692888,778692891,PL
-778692892,778692895,GB
-778692896,778692911,FR
-778692912,778692927,NL
-778692928,778692943,PL
-778692944,778692967,FR
-778692968,778692975,GB
-778692976,778692983,DE
-778692984,778692991,FR
-778692992,778693023,GB
-778693024,778693027,PL
-778693028,778693031,ES
-778693032,778693035,PL
-778693036,778693039,GB
-778693040,778693063,FR
-778693064,778693067,GB
-778693068,778693071,IT
-778693072,778693075,FR
-778693076,778693079,PL
-778693080,778693087,FR
-778693088,778693091,IE
-778693092,778693099,FR
-778693100,778693103,ES
-778693104,778693119,FR
-778693120,778693127,GB
-778693128,778693131,FR
-778693132,778693135,PL
-778693136,778693139,FR
-778693140,778693143,PL
-778693144,778693155,FR
-778693156,778693159,PL
-778693160,778693163,ES
-778693164,778693171,CZ
-778693172,778693183,FR
-778693184,778693215,IT
-778693216,778693223,PL
-778693224,778693227,PT
-778693228,778693231,IT
-778693232,778693235,DE
-778693236,778693239,PL
-778693240,778693243,ES
-778693244,778693247,PL
-778693248,778693279,FR
-778693280,778693295,DE
-778693296,778693311,CH
-778693312,778693327,IT
-778693328,778693343,PL
-778693344,778693375,FR
-778693376,778693391,IT
-778693392,778693427,FR
-778693428,778693431,CZ
-778693432,778693439,FR
-778693440,778693455,GB
-778693456,778693511,FR
-778693512,778693515,DE
-778693516,778693567,FR
-778693568,778693599,BE
-778693600,778693607,DE
-778693608,778693611,ES
-778693612,778693615,GB
-778693616,778693619,FR
-778693620,778693623,DE
-778693624,778693627,FR
-778693628,778693631,PL
-778693632,778693663,FR
-778693664,778693679,NL
-778693680,778693695,DE
-778693696,778693759,IE
-778693760,778693763,NL
-778693764,778693767,ES
-778693768,778693771,PL
-778693772,778693775,FR
-778693776,778693791,IT
-778693792,778693795,PL
-778693796,778693823,FR
-778693824,778693839,GB
-778693840,778693855,FR
-778693856,778693887,DE
-778693888,778693891,GB
-778693892,778693895,FR
-778693896,778693899,ES
-778693900,778693903,NL
-778693904,778693919,IE
-778693920,778693927,CH
-778693928,778693931,PL
-778693932,778693935,DE
-778693936,778693967,FR
-778693968,778693971,ES
-778693972,778693975,PL
-778693976,778693983,PT
-778693984,778694015,IE
-778694016,778694147,FR
-778694148,778694155,PL
-778694156,778694159,FR
-778694160,778694163,GB
-778694164,778694167,PL
-778694168,778694183,FR
-778694184,778694187,CH
-778694188,778694191,ES
-778694192,778694195,BE
-778694196,778694199,NL
-778694200,778694203,IT
-778694204,778694291,FR
-778694292,778694295,DE
-778694296,778694299,FR
-778694300,778694303,PL
-778694304,778694307,FR
-778694308,778694311,PL
-778694312,778694315,FR
-778694316,778694319,GB
-778694320,778694335,FR
-778694336,778694351,IT
-778694352,778694367,FR
-778694368,778694399,BE
-778694400,778694415,FR
-778694416,778694463,IT
-778694464,778694479,FR
-778694480,778694511,IT
-778694512,778694515,PL
-778694516,778694527,ES
-778694528,778694543,FR
-778694544,778694555,DE
-778694556,778694559,NL
-778694560,778694563,PL
-778694564,778694567,FR
-778694568,778694575,GB
-778694576,778694591,PT
-778694592,778694623,FR
-778694624,778694627,PL
-778694628,778694639,FR
-778694640,778694643,PL
-778694644,778694647,PT
-778694648,778694695,FR
-778694696,778694699,NL
-778694700,778694703,GB
-778694704,778694719,FR
-778694720,778694783,IT
-778694784,778694827,FR
-778694828,778694831,PL
-778694832,778694839,IT
-778694840,778694847,PL
-778694848,778694911,FR
-778694912,778694943,LT
-778694944,778694959,FR
-778694960,778694975,ES
-778694976,778695007,FR
-778695008,778695039,ES
-778695040,778695071,IT
-778695072,778695075,BE
-778695076,778695079,PL
-778695080,778695083,NL
-778695084,778695087,FR
-778695088,778695103,PT
-778695104,778695167,PL
-778695168,778695183,FR
-778695184,778695191,GB
-778695192,778695199,FR
-778695200,778695203,PL
-778695204,778695207,ES
-778695208,778695215,FR
-778695216,778695231,DE
-778695232,778695295,NL
-778695296,778695299,FR
-778695300,778695303,IT
-778695304,778695307,PL
-778695308,778695319,FR
-778695320,778695323,DE
-778695324,778695327,IT
-778695328,778695331,IE
-778695332,778695335,GB
-778695336,778695343,FR
-778695344,778695347,PL
-778695348,778695351,ES
-778695352,778695383,FR
-778695384,778695399,DE
-778695400,778695415,GB
-778695416,778695423,IT
-778695424,778695431,PT
-778695432,778695439,ES
-778695440,778695447,FI
-778695448,778695455,NL
-778695456,778695471,FR
-778695472,778695479,PL
-778695480,778695487,FR
+778691728,778692499,FR
+778692500,778692503,ES
+778692504,778692743,FR
+778692744,778692747,ES
+778692748,778693095,FR
+778693096,778693099,ES
+778693100,778693427,FR
+778693428,778693431,ES
+778693432,778693759,FR
+778693760,778693763,ES
+778693764,778695471,FR
+778695472,778695475,ES
+778695476,778695487,FR
778695488,778695503,BE
-778695504,778695519,FR
-778695520,778695535,GB
-778695536,778695551,ES
-778695552,778695555,BE
-778695556,778695559,CH
-778695560,778695563,DE
-778695564,778695575,PL
-778695576,778695579,ES
-778695580,778695583,FI
-778695584,778695615,BE
-778695616,778695623,DE
-778695624,778695627,CZ
-778695628,778695631,FR
-778695632,778695647,GB
-778695648,778695663,FR
-778695664,778695679,NL
-778695680,778695711,PT
-778695712,778695751,FR
-778695752,778695759,PL
-778695760,778695767,GB
-778695768,778695775,ES
-778695776,778695795,FR
-778695796,778695799,ES
-778695800,778695839,FR
-778695840,778695871,DE
-778695872,778695903,FR
-778695904,778695911,FI
-778695912,778695923,FR
-778695924,778695927,CZ
-778695928,778695931,FI
-778695932,778695935,ES
-778695936,778696199,FR
-778696200,778696203,IT
-778696204,778696207,ES
-778696208,778696211,IE
-778696212,778696215,DE
-778696216,778696219,IT
-778696220,778696223,GB
-778696224,778696231,PL
-778696232,778696239,CH
-778696240,778696247,DE
-778696248,778696251,PL
-778696252,778696255,NL
-778696256,778696263,IT
-778696264,778696287,ES
-778696288,778696335,DE
-778696336,778696339,PL
-778696340,778696343,FR
-778696344,778696347,CH
-778696348,778696351,PL
-778696352,778696383,ES
-778696384,778696415,IE
-778696416,778696479,FR
-778696480,778696483,PL
-778696484,778696487,FR
-778696488,778696495,PL
+778695504,778696495,FR
778696496,778696499,ES
-778696500,778696503,FR
-778696504,778696511,IT
-778696512,778696543,DE
-778696544,778696559,FR
-778696560,778696567,PT
-778696568,778696575,ES
-778696576,778696591,FR
-778696592,778696639,IE
-778696640,778696643,ES
-778696644,778696647,NL
-778696648,778696655,FR
-778696656,778696659,NL
-778696660,778696663,CH
-778696664,778696667,FI
-778696668,778696671,IE
-778696672,778696699,FR
-778696700,778696703,GB
-778696704,778696959,FR
-778696960,778696975,IT
-778696976,778696979,GB
-778696980,778696983,FR
-778696984,778696987,ES
-778696988,778696995,NL
-778696996,778696999,PL
-778697000,778697007,FR
-778697008,778697015,IE
-778697016,778697019,PL
-778697020,778697023,ES
-778697024,778697035,FR
-778697036,778697039,GB
-778697040,778697055,IT
-778697056,778697059,DE
-778697060,778697063,FR
-778697064,778697067,PL
-778697068,778697071,FR
-778697072,778697087,IT
-778697088,778697091,FR
-778697092,778697095,PL
-778697096,778697099,FR
-778697100,778697103,PL
-778697104,778697151,IE
-778697152,778697171,FR
-778697172,778697175,DE
-778697176,778697179,PL
-778697180,778697183,GB
-778697184,778697251,FR
-778697252,778697255,GB
-778697256,778697259,FR
-778697260,778697263,CZ
-778697264,778697271,NL
-778697272,778697279,PL
-778697280,778697287,IE
-778697288,778697291,FR
-778697292,778697295,IT
-778697296,778697307,NL
-778697308,778697311,GB
-778697312,778697343,PL
-778697344,778697347,IE
-778697348,778697351,PL
-778697352,778697359,DE
-778697360,778697375,FR
-778697376,778697383,PT
-778697384,778697387,FR
-778697388,778697391,ES
-778697392,778697407,GB
-778697408,778697415,PT
-778697416,778697423,BE
-778697424,778697431,FR
-778697432,778697435,PL
-778697436,778697439,GB
-778697440,778697455,FR
-778697456,778697471,LT
-778697472,778697479,IE
-778697480,778697483,LT
-778697484,778697499,FR
-778697500,778697519,IE
-778697520,778697523,ES
-778697524,778697567,FR
-778697568,778697599,GB
-778697600,778697663,FR
-778697664,778697667,NL
-778697668,778697671,ES
-778697672,778697675,GB
-778697676,778697683,PL
-778697684,778697695,FR
-778697696,778697727,NL
-778697728,778697791,FI
-778697792,778697807,ES
-778697808,778697815,PL
-778697816,778697819,FR
-778697820,778697823,IT
-778697824,778697927,FR
-778697928,778697935,DE
-778697936,778697943,PL
-778697944,778697947,CH
-778697948,778697951,FR
-778697952,778697955,DE
-778697956,778697959,IE
-778697960,778697967,ES
-778697968,778697975,FR
-778697976,778697983,FI
-778697984,778698239,NL
-778698240,778698243,FR
-778698244,778698247,GB
-778698248,778698251,ES
-778698252,778698255,PL
-778698256,778698271,GB
-778698272,778698287,FR
-778698288,778698295,FI
-778698296,778698303,IE
-778698304,778698367,FR
-778698368,778698399,BE
-778698400,778698447,IE
-778698448,778698451,NL
-778698452,778698455,FR
-778698456,778698459,CZ
-778698460,778698463,PL
-778698464,778698467,NL
-778698468,778698471,FR
-778698472,778698479,IT
-778698480,778698495,FR
-778698496,778698499,PL
-778698500,778698503,FR
-778698504,778698511,CH
-778698512,778698519,FI
-778698520,778698531,FR
-778698532,778698535,CH
-778698536,778698539,PL
-778698540,778698543,FR
-778698544,778698551,DE
-778698552,778698555,PL
-778698556,778698559,IT
-778698560,778698627,FR
-778698628,778698631,ES
-778698632,778698635,GB
-778698636,778698639,ES
-778698640,778698643,NL
-778698644,778698647,PL
-778698648,778698655,ES
-778698656,778698667,FR
-778698668,778698671,ES
-778698672,778698675,FR
-778698676,778698679,PL
-778698680,778698683,FR
-778698684,778698687,PT
-778698688,778698695,LT
-778698696,778698703,FR
-778698704,778698707,DE
-778698708,778698711,PL
-778698712,778698715,FR
-778698716,778698719,CZ
-778698720,778698751,FR
+778696500,778696991,FR
+778696992,778696995,ES
+778696996,778697067,FR
+778697068,778697071,ES
+778697072,778697175,FR
+778697176,778697179,ES
+778697180,778697815,FR
+778697816,778697819,ES
+778697820,778697955,FR
+778697956,778697959,ES
+778697960,778698447,FR
+778698448,778698451,ES
+778698452,778698643,FR
+778698644,778698647,ES
+778698648,778698703,FR
+778698704,778698707,ES
+778698708,778698751,FR
778698752,778764287,TR
-778764288,778767871,HU
-778767872,778768383,RO
-778768384,778829823,HU
+778764288,778823167,HU
+778823168,778823423,UA
+778823424,778829823,HU
778829824,778895359,RO
778895360,778960895,LV
778960896,779026431,DE
@@ -17958,7 +6817,9 @@
779616256,779747327,IL
779747328,779878399,SI
779878400,780009471,AT
-780009472,780140543,CH
+780009472,780014591,CH
+780014592,780014719,DE
+780014720,780140543,CH
780140544,780206079,DE
780206080,780271615,NL
780271616,780337151,AM
@@ -17967,263 +6828,8 @@
780468224,780533759,UA
780533760,780599295,PL
780599296,780664831,CZ
-780664832,780665087,NL
-780665088,780665343,DE
-780665344,780665599,FR
-780665600,780665855,GB
-780665856,780666111,SA
-780666112,780666367,IT
-780666368,780666623,AX
-780666624,780666879,AF
-780666880,780667135,AL
-780667136,780667391,DZ
-780667392,780667647,AS
-780667648,780667903,AD
-780667904,780668159,AM
-780668160,780668415,AT
-780668416,780668671,AZ
-780668672,780668927,BH
-780668928,780669183,BY
-780669184,780669439,BE
-780669440,780669695,BA
-780669696,780669951,BG
-780669952,780670207,HR
-780670208,780670463,CY
-780670464,780670719,CZ
-780670720,780670975,DK
-780670976,780671231,EE
-780671232,780671487,FO
-780671488,780671743,FI
-780671744,780671999,FR
-780672000,780672255,GE
-780672256,780672511,DE
-780672512,780672767,GI
-780672768,780673023,GR
-780673024,780673279,GL
-780673280,780673535,GG
-780673536,780673791,VA
-780673792,780674047,HU
-780674048,780674303,IS
-780674304,780674559,IR
-780674560,780674815,IQ
-780674816,780675071,IE
-780675072,780675327,IM
-780675328,780675583,IL
-780675584,780675839,IT
-780675840,780676095,JE
-780676096,780676351,JO
-780676352,780676607,KZ
-780676608,780676863,KW
-780676864,780677119,KG
-780677120,780677375,LV
-780677376,780677631,LB
-780677632,780677887,LI
-780677888,780678143,LT
-780678144,780678399,LU
-780678400,780678655,MK
-780678656,780678911,MT
-780678912,780679167,MD
-780679168,780679423,MC
-780679424,780679679,ME
-780679680,780679935,NL
-780679936,780680447,NO
-780680448,780680703,PS
-780680704,780680959,PL
-780680960,780681215,PT
-780681216,780681471,QA
-780681472,780681727,RO
-780681728,780681983,RU
-780681984,780682239,SM
-780682240,780682495,SA
-780682496,780682751,RS
-780682752,780683007,SK
-780683008,780683263,SI
-780683264,780683519,ES
-780683520,780683775,SJ
-780683776,780684031,SE
-780684032,780684287,CH
-780684288,780684543,SY
-780684544,780684799,TJ
-780684800,780685055,TR
-780685056,780685311,TM
-780685312,780685567,UA
-780685568,780685823,AE
-780685824,780686079,GB
-780686080,780686335,UZ
-780686336,780686591,YE
-780686592,780686847,AX
-780686848,780687103,AL
-780687104,780687359,AD
-780687360,780687615,AM
-780687616,780687871,AT
-780687872,780688127,AZ
-780688128,780688383,BH
-780688384,780688639,BY
-780688640,780688895,BE
-780688896,780689151,BA
-780689152,780689407,BG
-780689408,780689663,HR
-780689664,780689919,CY
-780689920,780690175,CZ
-780690176,780690431,DK
-780690432,780690687,EE
-780690688,780690943,FO
-780690944,780691199,FI
-780691200,780691455,FR
-780691456,780691711,GE
-780691712,780691967,DE
-780691968,780692223,GI
-780692224,780692479,GR
-780692480,780692735,GL
-780692736,780692991,GG
-780692992,780693247,VA
-780693248,780693503,HU
-780693504,780693759,IS
-780693760,780694015,IR
-780694016,780694271,IQ
-780694272,780694527,IE
-780694528,780694783,IL
-780694784,780695039,IT
-780695040,780695295,JE
-780695296,780695551,JO
-780695552,780695807,KZ
-780695808,780696063,KW
-780696064,780696319,LB
-780696320,780696575,LI
-780696576,780696831,LT
-780696832,780697087,LU
-780697088,780697599,GB
-780697600,780697855,NL
-780697856,780698111,IT
-780698112,780698367,ES
-780698368,780698623,DE
-780698624,780698879,FR
-780698880,780699135,RU
-780699136,780699391,RO
-780699392,780699647,BG
-780699648,780699903,DK
-780699904,780700159,AT
-780700160,780700415,FI
-780700416,780700671,GR
-780700672,780700927,PL
-780700928,780701183,PT
-780701184,780701439,SE
-780701440,780701695,CH
-780701696,780701951,SA
-780701952,780702207,AD
-780702208,780702463,AE
-780702464,780702719,AF
-780702720,780702975,AG
-780702976,780703231,AI
-780703232,780703487,AL
-780703488,780703743,AM
-780703744,780703999,AO
-780704000,780704255,AQ
-780704256,780704511,AR
-780704512,780704767,AS
-780704768,780705023,AT
-780705024,780705279,AU
-780705280,780705535,AW
-780705536,780705791,AX
-780705792,780706047,AZ
-780706048,780706303,BA
-780706304,780706559,BB
-780706560,780706815,BD
-780706816,780707071,BE
-780707072,780707327,BF
-780707328,780707583,BG
-780707584,780707839,BH
-780707840,780708095,BI
-780708096,780708351,BJ
-780708352,780708607,BM
-780708608,780708863,BN
-780708864,780709119,BO
-780709120,780709375,BR
-780709376,780709631,BS
-780709632,780709887,BT
-780709888,780710143,FR
-780710144,780710399,BW
-780710400,780710655,BY
-780710656,780710911,BZ
-780710912,780711167,CA
-780711168,780711423,CC
-780711424,780711679,CD
-780711680,780711935,CF
-780711936,780712191,CG
-780712192,780712447,CH
-780712448,780712703,CI
-780712704,780712959,CK
-780712960,780713215,CL
-780713216,780713471,CM
-780713472,780713727,CN
-780713728,780713983,CO
-780713984,780714239,CR
-780714240,780714495,CU
-780714496,780714751,CV
-780714752,780715263,CY
-780715264,780715519,CZ
-780715520,780715775,DE
-780715776,780716031,DJ
-780716032,780716287,DK
-780716288,780716543,DM
-780716544,780716799,DO
-780716800,780717055,DZ
-780717056,780717311,EC
-780717312,780717567,EE
-780717568,780717823,EG
-780717824,780718079,EH
-780718080,780718335,ER
-780718336,780718591,ES
-780718592,780718847,ET
-780718848,780719103,FI
-780719104,780719359,FJ
-780719360,780719615,FK
-780719616,780719871,FM
-780719872,780720127,FO
-780720128,780720383,FR
-780720384,780720639,GA
-780720640,780720895,GB
-780720896,780721151,GD
-780721152,780721407,GE
-780721408,780721663,GF
-780721664,780721919,GG
-780721920,780722175,GH
-780722176,780722431,GI
-780722432,780722687,GL
-780722688,780722943,GM
-780722944,780723199,GN
-780723200,780723455,GP
-780723456,780723711,GQ
-780723712,780723967,GR
-780723968,780724223,GS
-780724224,780724479,GT
-780724480,780724735,GU
-780724736,780724991,GW
-780724992,780725247,GY
-780725248,780725759,HK
-780725760,780726015,HN
-780726016,780726271,HR
-780726272,780726527,HT
-780726528,780726783,HU
-780726784,780727039,ID
-780727040,780727295,IE
-780727296,780727551,IL
-780727552,780727807,IM
-780727808,780728063,IN
-780728064,780728319,IO
-780728320,780728575,IQ
-780728576,780728831,IR
-780728832,780729087,IS
-780729088,780729343,IT
-780729344,780729599,JE
-780729600,780729855,JM
-780729856,780730111,JO
-780730112,780730367,JP
-780730368,780756170,IE
-780756171,780756171,EU
-780756172,780756724,IE
-780756725,780756725,EU
-780756726,780779519,IE
+780664832,780730367,FR
+780730368,780779519,IE
780779520,780795903,SG
780795904,780861439,RU
780861440,780926975,HU
@@ -18231,12 +6837,10 @@
780992512,781058047,IT
781058048,781123583,DE
781123584,781189119,IR
-781189120,781223423,NL
-781223424,781223679,GB
-781223680,781320191,NL
+781189120,781320191,NL
781320192,781451263,RU
781451264,781455359,PL
-781455360,781459455,UA
+781455360,781459455,LT
781459456,781463551,IR
781463552,781467647,RU
781467648,781475839,PL
@@ -18279,8 +6883,7 @@
781676544,781678591,PL
781678592,781682687,RS
781682688,781684735,PL
-781684736,781686783,UA
-781686784,781688831,RU
+781684736,781688831,RU
781688832,781690879,RO
781690880,781692927,RU
781692928,781694975,UA
@@ -18308,46 +6911,11 @@
782385152,782401535,SE
782401536,782417919,FR
782417920,782434303,AM
-782434304,782446607,SI
-782446608,782446639,BA
-782446640,782446647,SI
-782446648,782446655,BA
-782446656,782446663,SI
-782446664,782446719,BA
-782446720,782446727,SI
-782446728,782446775,BA
-782446776,782446783,SI
-782446784,782446815,BA
-782446816,782446847,SI
-782446848,782447615,BA
-782447616,782449151,SI
-782449152,782449407,HR
-782449408,782449519,SI
-782449520,782449535,RS
-782449536,782449551,SI
-782449552,782449567,RS
-782449568,782449583,SI
-782449584,782449599,RS
-782449600,782449615,SI
-782449616,782449623,RS
-782449624,782449639,SI
-782449640,782449647,RS
-782449648,782449663,SI
-782449664,782449671,BA
-782449672,782449679,SI
-782449680,782449703,BA
-782449704,782449711,SI
-782449712,782449719,BA
-782449720,782449727,SI
-782449728,782449735,BA
-782449736,782449759,SI
-782449760,782449791,BA
-782449792,782449807,SI
-782449808,782449879,BA
-782449880,782449887,SI
-782449888,782449903,BA
-782449904,782449919,SI
-782449920,782450687,BA
+782434304,782446591,SI
+782446592,782447359,BA
+782447360,782447615,HR
+782447616,782449663,SI
+782449664,782450687,BA
782450688,782467071,DE
782467072,782483455,RU
782483456,782499839,FI
@@ -18356,36 +6924,18 @@
782532608,782548991,UA
782548992,782581759,RU
782581760,782598143,FR
-782598144,782607971,DE
-782607972,782607975,IT
-782607976,782608039,DE
-782608040,782608047,LU
-782608048,782630911,DE
+782598144,782616643,DE
+782616644,782616644,RU
+782616645,782630911,DE
782630912,782647295,MD
782647296,782663679,RU
-782663680,782663935,GB
-782663936,782665471,GB
-782665472,782666751,GB
-782666752,782667007,US
-782667008,782667519,GB
+782663680,782667519,NL
782667520,782667775,LU
-782667776,782671103,GB
-782671104,782671359,GB
-782671360,782671871,GB
-782671872,782672383,CA
-782672384,782672639,BG
-782672640,782672895,RO
-782672896,782673663,GB
-782673664,782675455,NL
-782675456,782676991,DE
-782676992,782678015,US
-782678016,782678527,RU
-782678528,782678783,UA
-782678784,782680063,GB
+782667776,782671871,NL
+782671872,782675967,LT
+782675968,782680063,NL
782680064,782696447,RU
-782696448,782711039,DE
-782711040,782711103,CH
-782711104,782712831,DE
+782696448,782712831,DE
782712832,782729215,RU
782729216,782745599,DE
782745600,782761983,CZ
@@ -18459,18 +7009,14 @@
783548416,783679487,RU
783679488,783681535,FR
783681536,783683583,IE
-783683584,783685375,DE
-783685376,783685631,US
+783683584,783685631,DE
783685632,783687679,RU
-783687680,783688191,PT
-783688192,783688703,US
-783688704,783689471,PT
-783689472,783689727,US
+783687680,783689727,PT
783689728,783691775,FR
783691776,783693823,BY
-783693824,783694623,GB
-783694624,783694687,FR
-783694688,783695871,GB
+783693824,783694367,GB
+783694368,783694399,DE
+783694400,783695871,GB
783695872,783697919,TR
783697920,783699967,FR
783699968,783702015,UA
@@ -18488,8 +7034,7 @@
783722496,783724543,AM
783724544,783726591,NL
783726592,783728639,IS
-783728640,783730655,BE
-783730656,783730687,NL
+783728640,783730687,BE
783730688,783732735,SE
783732736,783734783,FR
783734784,783736831,NL
@@ -18508,7 +7053,7 @@
783765504,783767551,RU
783767552,783769599,IL
783769600,783771647,DE
-783771648,783773695,GB
+783771648,783773695,FR
783773696,783775743,ES
783775744,783777791,AL
783777792,783779839,RU
@@ -18518,14 +7063,12 @@
783785984,783788031,RU
783788032,783790079,NO
783790080,783792127,RU
-783792128,783794175,IR
783794176,783798271,GB
783798272,783800319,PL
783800320,783802367,LV
783802368,783804415,FR
783804416,783806463,IT
-783806464,783810303,NL
-783810304,783810559,BE
+783806464,783810559,NL
783810560,783843327,SA
783843328,783876095,BH
783876096,783908863,UA
@@ -18543,7 +7086,9 @@
784269312,784302079,BY
784302080,784334847,RU
784334848,784465919,FR
-784465920,784596991,SE
+784465920,784524287,SE
+784524288,784524543,PL
+784524544,784596991,SE
784596992,784728063,TR
784728064,784793599,GR
784793600,784859135,CY
@@ -18572,15 +7117,11 @@
786567168,786569215,CZ
786569216,786571263,NO
786571264,786575359,ES
-786575360,786575871,GB
-786575872,786576127,SE
-786576128,786577407,GB
+786575360,786577407,GB
786577408,786579455,NL
786579456,786581503,RU
786581504,786583551,GB
-786583552,786583679,DE
-786583680,786583695,SC
-786583696,786585599,DE
+786583552,786585599,DE
786585600,786587647,NL
786587648,786589695,RU
786589696,786590719,FR
@@ -18608,8 +7149,7 @@
786632704,786634751,FR
786634752,786636799,RU
786636800,786638847,PL
-786638848,786640895,ES
-786640896,786642943,GB
+786638848,786642943,GB
786642944,786644991,GR
786644992,786649087,SE
786649088,786651135,FR
@@ -18648,9 +7188,7 @@
786747392,786751487,SK
786751488,786755583,PL
786755584,786759679,IT
-786759680,786771711,DE
-786771712,786771775,AT
-786771776,786771967,DE
+786759680,786771967,DE
786771968,786776063,UA
786776064,786780159,RU
786780160,786784255,IT
@@ -18658,15 +7196,11 @@
786788352,786792447,CZ
786792448,786796543,RU
786796544,786800639,PL
-786800640,786803711,US
-786803712,786804223,UA
-786804224,786804735,US
+786800640,786804735,US
786804736,786808831,RU
786808832,786812927,BG
786812928,786817023,RU
-786817024,786817151,SK
-786817152,786817215,SK
-786817216,786821119,SK
+786817024,786821119,SK
786821120,786825215,HR
786825216,786857983,SA
786857984,786868223,NO
@@ -18684,49 +7218,43 @@
786915328,786917375,SK
786917376,786919423,RO
786919424,786919431,IT
-786919432,786919695,GB
-786919696,786919703,IT
-786919704,786919879,GB
+786919432,786919639,GB
+786919640,786919647,IT
+786919648,786919799,GB
+786919800,786919807,IT
+786919808,786919879,GB
786919880,786919887,IT
-786919888,786920167,GB
-786920168,786920175,IT
-786920176,786920191,GB
+786919888,786919967,GB
+786919968,786919975,IT
+786919976,786920191,GB
786920192,786920199,IT
786920200,786920343,GB
786920344,786920351,IT
-786920352,786920495,GB
-786920496,786920503,IT
-786920504,786920703,GB
-786920704,786920711,IT
-786920712,786920839,GB
+786920352,786920631,GB
+786920632,786920639,IT
+786920640,786920839,GB
786920840,786920847,IT
-786920848,786921015,GB
-786921016,786921023,IT
-786921024,786921471,GB
+786920848,786920855,GB
+786920856,786920863,IT
+786920864,786921455,GB
+786921456,786921463,IT
+786921464,786921471,GB
786921472,786923519,ES
786923520,786925567,FR
-786925568,786926335,DE
-786926336,786926847,US
-786926848,786927615,DE
+786925568,786927615,DE
786927616,786929663,FR
786929664,786931711,PL
786931712,786933759,GB
786933760,786935807,RU
786935808,786937855,DE
786937856,786939903,GB
-786939904,786940159,SE
-786940160,786940415,FI
-786940416,786941447,SE
-786941448,786941951,FI
+786939904,786941951,FI
786941952,786943999,CH
786944000,786946047,RU
786946048,786948095,FR
786948096,786950143,UA
786950144,786952191,DE
-786952192,786952703,NE
-786952704,786952959,US
-786952960,786953215,NE
-786953216,786954239,US
+786952192,786954239,US
786954240,786956287,NL
786956288,786989055,RU
786989056,786991103,PL
@@ -18734,9 +7262,7 @@
786995200,786997247,BG
786997248,786999295,RU
786999296,787001343,ES
-787001344,787002623,CH
-787002624,787002639,GB
-787002640,787003391,CH
+787001344,787003391,CH
787003392,787005439,DE
787005440,787007487,GB
787007488,787009535,RU
@@ -18755,18 +7281,10 @@
787054592,787070975,IT
787070976,787087359,RU
787087360,787095551,TR
-787095552,787095567,EU
-787095568,787095615,CH
-787095616,787095647,EU
-787095648,787095663,CH
-787095664,787095807,EU
-787095808,787096063,CH
-787096064,787096575,EU
-787096576,787098367,CH
-787098368,787099391,EU
-787099392,787099647,CH
-787099648,787100671,EU
-787100672,787103743,CH
+787095680,787095711,CH
+787096576,787097855,CH
+787099392,787100671,CH
+787101696,787102719,CH
787103744,787111935,HR
787111936,787120127,CZ
787120128,787128319,ES
@@ -18785,12 +7303,7 @@
787173376,787175423,KZ
787175424,787177471,SA
787177472,787179519,RS
-787179520,787179775,CH
-787179776,787182095,DE
-787182096,787182111,CH
-787182112,787182335,DE
-787182336,787182591,CH
-787182592,787183615,DE
+787179520,787183615,DE
787183616,787185663,PL
787185664,787187711,GG
787187712,787189759,IT
@@ -18799,8 +7312,7 @@
787192064,787192319,FR
787192320,787192575,DE
787192576,787192831,SE
-787192832,787193087,AE
-787193088,787193855,EU
+787193088,787193343,FI
787193856,787195903,RU
787195904,787197951,GB
787197952,787199999,FR
@@ -18813,7 +7325,9 @@
787214336,787216383,DE
787216384,787218431,RU
787218432,787234815,GB
-787234816,787251199,SE
+787234816,787236559,SE
+787236560,787236575,NO
+787236576,787251199,SE
787251200,787267583,RU
787267584,787283967,DE
787283968,787300351,RU
@@ -18822,33 +7336,29 @@
787333120,787349503,DE
787349504,787365887,BG
787365888,787382271,PL
-787382272,787382527,GP
-787382528,787382783,FR
-787382784,787383039,GP
-787383040,787383295,FR
-787383296,787384575,GP
-787384576,787385087,FR
-787385088,787385343,GP
-787385344,787385599,FR
-787385600,787385855,GP
-787385856,787386879,FR
-787386880,787387391,MQ
-787387392,787389183,FR
-787389184,787390719,MQ
-787390720,787391487,FR
-787391488,787391999,MQ
-787392000,787392255,FR
-787392256,787392511,MQ
+787382272,787387647,GP
+787387648,787388671,MQ
+787388672,787388927,GP
+787388928,787390207,MQ
+787390208,787390463,GP
+787390464,787391231,FR
+787391232,787391487,MQ
+787391488,787391743,FR
+787391744,787392255,MQ
+787392256,787392511,FR
787392512,787392767,GP
-787392768,787394047,FR
-787394048,787394303,GP
-787394304,787395071,FR
-787395072,787395583,GF
-787395584,787396095,FR
-787396096,787396607,GF
-787396608,787397887,FR
-787397888,787398143,GF
-787398144,787398655,FR
+787392768,787393791,FR
+787393792,787394303,GP
+787394304,787394559,FR
+787394560,787394815,GF
+787394816,787395071,FR
+787395072,787395327,GF
+787395328,787395583,FR
+787395584,787396095,GF
+787396096,787396351,FR
+787396352,787396607,GF
+787396608,787398399,FR
+787398400,787398655,MQ
787398656,787415039,PL
787415040,787431423,BA
787431424,787447807,SE
@@ -18867,7 +7377,6 @@
787685376,787687423,IT
787687424,787689471,NL
787689472,787691519,CZ
-787691520,787693567,IT
787693568,787695615,SK
787695616,787697663,RU
787697664,787701759,DE
@@ -18878,38 +7387,16 @@
787709952,787724287,RU
787724288,787726335,UA
787726336,787742719,RU
-787742720,787750911,NL
-787750912,787759103,US
-787759104,787767295,NL
-787767296,787771391,US
-787771392,787773183,NL
-787773184,787773311,BE
-787773312,787773439,NL
-787773440,787773823,BE
-787773824,787773951,NL
-787773952,787774015,BE
-787774016,787774207,NL
-787774208,787774719,BE
-787774720,787774735,NL
-787774736,787774960,BE
-787774961,787774967,NL
-787774968,787774983,BE
-787774984,787775007,NL
-787775008,787775023,BE
-787775024,787775039,NL
-787775040,787775103,BE
-787775104,787775166,NL
-787775167,787775184,BE
-787775185,787775487,NL
+787742720,787759103,NL
+787759104,787767295,PS
+787767296,787775487,NL
787775488,787808255,DE
787808256,787841023,IR
787841024,787843071,RU
787843072,787845119,GR
787845120,787847167,CH
787847168,787849215,SE
-787849216,787850496,TR
-787850497,787850751,NL
-787850752,787851263,TR
+787849216,787851263,TR
787851264,787853311,RU
787853312,787855359,DE
787855360,787857407,CH
@@ -18919,38 +7406,19 @@
787863552,787865599,DE
787865600,787869695,FR
787869696,787873791,GB
-787873792,787890559,SE
-787890560,787890687,GB
-787890688,787892223,SE
-787892224,787894271,SE
-787894272,787896319,US
-787896320,787896575,SE
-787896576,787896703,SE
-787896704,787906559,SE
+787873792,787881745,SE
+787881746,787881747,FR
+787881748,787891247,SE
+787891248,787891251,ES
+787891252,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
-788045824,788050943,PL
-788050944,788051199,GB
-788051200,788054015,PL
+788045824,788054015,PL
788054016,788062207,JO
788062208,788070399,GB
788070400,788078591,RU
@@ -18975,12 +7443,7 @@
788234240,788242431,SA
788242432,788250623,IR
788250624,788258815,KG
-788258816,788259583,DE
-788259584,788259839,NL
-788259840,788260351,DE
-788260352,788260863,NL
-788260864,788266495,DE
-788266496,788267007,IN
+788258816,788267007,DE
788267008,788271103,SE
788271104,788275199,DE
788275200,788279295,AL
@@ -18991,35 +7454,20 @@
788299776,788303871,DE
788303872,788307967,IT
788307968,788312063,RU
-788312064,788312319,FR
-788312320,788312351,IT
-788312352,788312383,GB
-788312384,788312415,DE
-788312416,788312447,ES
-788312448,788312479,US
-788312480,788312511,BR
-788312512,788312543,NL
-788312544,788316159,FR
+788312064,788316159,FR
788316160,788320255,NL
788320256,788324351,UA
788324352,788328447,CZ
788328448,788332543,RU
788332544,788336639,BG
-788336640,788337407,DE
-788337408,788337663,GB
-788337664,788340479,DE
-788340480,788340735,GB
+788336640,788340735,DE
788340736,788344831,ES
788344832,788353023,DE
788353024,788357119,PS
788357120,788361215,CZ
788361216,788365311,DE
788365312,788369407,IQ
-788369408,788371711,DE
-788371712,788371715,AT
-788371716,788371719,US
-788371720,788371723,GB
-788371724,788373503,DE
+788369408,788373503,DE
788373504,788377599,BE
788377600,788381695,CH
788381696,788385791,SE
@@ -19040,9 +7488,7 @@
788426752,788428799,GB
788428800,788430847,DE
788430848,788432895,BG
-788432896,788432927,DE
-788432928,788432959,FR
-788432960,788434943,DE
+788432896,788434943,DE
788434944,788436991,SI
788436992,788439039,IT
788439040,788441087,RU
@@ -19054,10 +7500,8 @@
788455424,788457471,FR
788457472,788459519,IT
788459520,788461567,RU
-788461568,788462079,JE
-788462080,788462335,GB
-788462336,788463103,JE
-788463104,788465663,GB
+788461568,788462847,JE
+788462848,788465663,GB
788465664,788467711,CZ
788467712,788469759,NO
788469760,788471807,NL
@@ -19073,34 +7517,29 @@
788488192,788490239,RU
788490240,788492287,NL
788492288,788494335,GB
-788494336,788496383,SE
+788494336,788494591,US
+788494592,788495103,CY
+788495104,788495615,US
+788495616,788495871,GB
+788495872,788496383,CY
788496384,788498431,FR
788498432,788500479,RU
788500480,788502527,AL
788502528,788504575,IE
788504576,788506623,FR
788506624,788508671,CH
-788508672,788509215,FR
-788509216,788509231,AT
-788509232,788509247,FR
-788509248,788509279,AT
-788509280,788509631,FR
-788509632,788509695,AT
-788509696,788510335,FR
-788510336,788510463,AT
+788508672,788508927,AT
+788508928,788509183,FR
+788509184,788509439,AT
+788509440,788509951,FR
+788509952,788510463,AT
788510464,788510719,FR
-788510720,788510847,ES
-788510848,788510910,NO
-788510911,788512320,ES
-788512321,788512383,NO
-788512384,788512767,ES
+788510720,788512767,ES
788512768,788514815,FI
788514816,788516863,FR
788516864,788518911,LT
788518912,788520959,IR
-788520960,788522623,CZ
-788522624,788522655,PL
-788522656,788523007,CZ
+788520960,788523007,CZ
788523008,788525055,KZ
788525056,788527103,IT
788527104,788529151,GB
@@ -19108,11 +7547,13 @@
789577728,790102015,US
790102016,792002559,CA
792002560,792068095,US
-792068096,792330239,CA
+792068096,792096767,CA
+792096768,792097279,US
+792097280,792330239,CA
792330240,792723455,ES
792723456,793247743,DE
793247744,793313279,NZ
-793313280,793378815,US
+793313280,793378815,DE
793378816,795231487,CA
795231488,795231743,US
795231744,795233023,CA
@@ -19125,7 +7566,7 @@
803864576,803864831,US
803864832,805306367,CA
805306368,822083583,US
-822083584,822085631,ID
+822083584,822084607,ID
822085632,822087679,AU
822087680,822089727,JP
822089728,822090751,ID
@@ -19184,9 +7625,9 @@
831389696,831512575,KR
831512576,831513599,AU
831513600,831514623,NZ
-831514624,831514887,HK
-831514888,831514895,AU
-831514896,831515647,HK
+831514624,831514975,HK
+831514976,831515007,AU
+831515008,831515647,HK
831515648,831516671,AU
831516672,831518719,JP
831518720,831519743,AU
@@ -19195,9 +7636,7 @@
832045056,832307199,CN
832307200,832308223,MN
832308224,832311295,JP
-832311296,832312319,AU
-832312320,832313343,ID
-832313344,832315391,AU
+832311296,832315391,AU
832315392,832319487,KH
832319488,832320511,NU
832320512,832321535,VN
@@ -19212,7 +7651,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
@@ -19247,46 +7686,15 @@
838467584,838729727,JP
838729728,838795263,KR
838795264,838860799,AU
-838860800,838993423,US
-838993424,838993447,MY
-838993448,838993463,PK
-838993464,838994175,US
-838994176,838994271,HK
-838994272,838995455,US
+838860800,838995455,US
838995456,838995967,CA
838995968,838996991,US
838996992,838997247,CA
-838997248,838999039,US
-838999040,838999295,CA
-838999296,839000159,US
-839000160,839000223,EG
-839000224,839002399,US
-839002400,839002431,ID
-839002432,839002463,EE
-839002464,839002495,HK
-839002496,839002527,US
-839002528,839002559,EG
-839002560,839002943,US
-839002944,839002975,EG
-839002976,839003775,US
-839003776,839003839,EG
-839003840,839005215,US
-839005216,839005280,CA
-839005281,839010559,US
-839010560,839010815,CA
-839010816,839016191,US
+838997248,839016191,US
839016192,839016447,CA
-839016448,839025119,US
-839025120,839025151,EG
-839025152,839025215,US
-839025216,839025247,EG
-839025248,839052031,US
-839052032,839052287,CA
-839052288,839054079,US
-839054080,839054335,CA
-839054336,839055615,US
-839055616,839055871,CA
-839055872,839056447,US
+839016448,839027967,US
+839027968,839030015,IN
+839030016,839056447,US
839056448,839056455,CN
839056456,839061503,US
839061504,839061759,CA
@@ -19294,237 +7702,183 @@
839062272,839064063,CA
839064064,839069183,US
839069184,839071231,CA
-839071232,839072255,US
-839072256,839074303,CA
-839074304,839095807,US
+839071232,839095807,US
839095808,839096063,CA
-839096064,839101695,US
-839101696,839102207,CA
-839102208,839103231,US
-839103232,839103487,CA
-839103488,839104255,US
+839096064,839104255,US
839104256,839104511,CA
839104512,839112191,US
839112192,839112703,CA
-839112704,839113215,US
-839113216,839113471,CA
-839113472,839122431,US
-839122432,839122495,CA
-839122496,839360511,US
-839360512,839368703,NL
+839112704,839352319,US
+839352320,839356415,NL
+839356416,839359487,US
+839359488,839360511,DE
+839360512,839366655,NL
+839366656,839366911,AT
+839366912,839367167,CZ
+839367168,839368703,NL
839368704,839385087,CZ
-839385088,840161595,US
-840161596,840161596,US
-840161597,840269823,US
+839385088,840269823,US
840269824,840273919,CA
840273920,840278015,US
840278016,840282111,CA
840282112,840294399,US
840294400,840298495,CA
-840298496,840835908,US
-840835909,840835909,CA
-840835910,840835942,US
-840835943,840835944,CA
-840835945,840835949,US
-840835950,840835951,TW
-840835952,840835962,US
-840835963,840835963,IN
-840835964,840836077,US
-840836078,840836085,RO
-840836086,840836159,US
-840836160,840836223,BR
-840836224,840836287,US
-840836288,840836351,BR
-840836352,840836415,US
-840836416,840836479,BR
-840836480,840836543,DE
-840836544,840836863,US
-840836864,840836927,BR
-840836928,840836959,US
-840836960,840836991,BR
-840836992,840837023,NL
-840837024,840837055,US
-840837056,840837087,TR
-840837088,840837119,BR
-840837120,840837183,US
-840837184,840837343,BR
-840837344,840837375,RS
-840837376,840837503,US
-840837504,840837564,CA
-840837565,840837572,BR
-840837573,840837575,TH
-840837576,840837577,BR
-840837578,840838175,US
-840838176,840838239,BR
-840838240,840838271,GB
-840838272,840838303,NL
-840838304,840838335,US
-840838336,840838367,JP
-840838368,840838399,BR
-840838400,840838655,US
-840838656,840838687,TR
-840838688,840838719,CA
-840838720,840838726,US
-840838727,840838728,TW
-840838729,840838975,US
-840838976,840838977,AU
-840838978,840838978,TH
-840838979,840838979,DE
-840838980,840838980,CA
-840838981,840838985,US
-840838986,840838986,EC
-840838987,840838987,US
-840838988,840838988,CY
-840838989,840838989,BR
-840838990,840838990,CO
-840838991,840838991,US
-840838992,840838992,BR
-840838993,840838994,US
-840838995,840838995,BR
-840838996,840838996,US
-840838997,840838997,MX
-840838998,840839004,US
-840839005,840839005,MX
-840839006,840839006,US
-840839007,840839007,CO
-840839008,840839008,LT
-840839009,840839012,US
-840839013,840839016,CA
-840839017,840839019,US
-840839020,840839020,UA
-840839021,840839023,US
-840839024,840839025,CA
-840839026,840839026,PK
-840839027,840839027,BR
-840839028,840839030,RU
-840839031,840839031,US
-840839032,840839032,BR
-840839033,840839035,US
-840839036,840839036,GB
-840839037,840839037,BR
-840839038,840898047,US
+840298496,840838508,US
+840838509,840838509,UA
+840838510,840838510,US
+840838511,840838512,UA
+840838513,840898047,US
840898048,840898559,CA
840898560,840909055,US
840909056,840909311,CA
-840909312,840957695,US
-840957696,840957951,JP
+840909312,840953855,US
+840953856,840954367,JP
+840954368,840956927,US
+840956928,840957951,JP
840957952,843055103,US
843055104,843644927,CA
843644928,844890111,US
844890112,844988415,CA
-844988416,845089407,US
-845089408,845089535,PR
-845089536,845283327,US
+844988416,845283327,US
845283328,845545471,CA
-845545472,846439770,US
-846439771,846439778,RO
-846439779,846439781,US
-846439782,846439782,BD
-846439783,846439817,US
-846439818,846439819,BD
-846439820,846440499,US
-846440500,846440500,BD
-846440501,846440644,US
-846440645,846440646,BD
-846440647,846441780,US
-846441781,846441790,RO
-846441791,846441792,US
-846441793,846441801,RO
-846441802,846441857,US
-846441858,846441868,RO
-846441869,846441889,US
-846441890,846441900,RO
-846441901,846442495,US
+845545472,846442495,US
846442496,846446591,CA
-846446592,846537727,US
-846537728,846537983,US
-846537984,846561279,US
+846446592,846537351,US
+846537352,846537352,CA
+846537353,846561279,US
846561280,846594047,CA
846594048,846626815,US
846626816,846627071,CN
846627072,855638015,US
855638016,872415231,GB
-872415232,880877567,US
-880877568,880878079,EU
-880878080,882843337,US
-882843338,882843339,EU
-882843340,882843751,US
-882843752,882843753,EU
-882843754,882851942,US
-882851943,882851943,EU
-882851944,889192447,US
-889192448,897238054,DE
-897238055,897238055,EU
-897238056,905969663,DE
-905969664,920911871,US
-920911872,920977407,IE
-920977408,921174015,US
-921174016,921239551,BR
-921239552,922091519,US
+872415232,889192447,US
+889192448,905969663,DE
+905969664,910688255,US
+910688256,911147007,IE
+911147008,911212543,AU
+911212544,912195583,US
+912195584,912261119,JP
+912261120,917635071,US
+917635072,917700607,JP
+917700608,917766143,SG
+917766144,918683647,US
+918683648,918814719,IE
+918814720,919011327,US
+919011328,919076863,JP
+919076864,919470079,US
+919470080,919535615,AU
+919535616,919601151,BR
+919601152,920125439,US
+920125440,920256511,IE
+920256512,920387583,US
+920387584,920453119,IE
+920453120,920518655,US
+920518656,920649727,CN
+920649728,920911871,US
+920911872,921042943,IE
+921042944,921174015,US
+921174016,921255935,BR
+921255936,921567231,US
+921567232,921632767,JP
+921632768,922091519,US
922091520,922189311,IE
-922189312,922189567,EU
-922189568,922222591,IE
-922222592,922353663,JP
-922353664,922419199,US
+922189312,922189567,US
+922189568,922205775,IE
+922205776,922205776,DE
+922205777,922222591,IE
+922222592,922419199,JP
922419200,922484735,SG
-922484736,922550271,AU
-922550272,956301311,US
-956301312,959447039,EU
+922484736,922615807,AU
+922615808,922746879,SG
+922746880,956301311,US
+956301312,959447039,FR
959447040,959512575,US
-959512576,960629507,EU
-960629508,960629508,GB
-960629509,960640769,EU
-960640770,960640770,GB
-960640771,960643365,EU
-960643366,960643367,GB
-960643368,960647167,EU
-960647168,960651263,GB
-960651264,960676607,EU
+959512576,960626687,FR
+960626688,960641023,GB
+960641024,960641279,FR
+960641280,960643330,GB
+960643331,960643331,FR
+960643332,960644351,GB
+960644352,960644863,FR
+960644864,960646399,GB
+960646400,960646911,FR
+960646912,960654335,GB
+960654336,960654591,FR
+960654592,960659455,GB
+960659456,960662015,DE
+960662016,960662271,FR
+960662272,960662783,DE
+960662784,960663039,FR
+960663040,960671487,DE
+960671488,960671743,FR
+960671744,960676607,DE
960676608,960676863,PL
-960676864,960692223,EU
+960676864,960692223,DE
960692224,960724991,FR
-960724992,960726783,EU
+960724992,960726783,NL
960726784,960727039,ZA
960727040,960727295,US
-960727296,960729343,EU
+960727296,960728319,NL
+960728320,960728575,FR
+960728576,960729343,NL
960729344,960729599,ZA
-960729600,960741375,EU
+960729600,960729855,FR
+960729856,960733183,NL
+960733184,960733439,BE
+960733440,960733695,FR
+960733696,960733951,BE
+960733952,960734463,FR
+960734464,960737535,BE
+960737536,960737791,FR
+960737792,960741375,BE
960741376,960749567,NL
960749568,960757759,LU
960757760,960888831,US
960888832,960921599,AU
960921600,960929791,NZ
-960929792,960954367,AU
-960954368,961019903,EU
+960929792,960933887,KI
+960933888,960937983,MH
+960937984,960942079,FM
+960942080,960946175,NR
+960946176,960950271,FJ
+960950272,960954367,PW
+960954368,960958463,PG
+960958464,960962559,WS
+960962560,960966655,SB
+960966656,960970751,TO
+960970752,960974847,TV
+960974848,960978943,VU
+960978944,960983039,NC
+960983040,961019903,FR
961019904,961021439,HK
-961021440,961021695,A2
+961021440,961021695,FR
961021696,961021951,HK
-961021952,961022079,AP
+961021952,961022079,FR
961022080,961022095,SG
-961022096,961022207,AP
+961022096,961022207,FR
961022208,961022719,HK
-961022720,961022975,AP
+961022720,961022975,FR
961022976,961025535,HK
-961025536,961025791,AP
+961025536,961025791,FR
961025792,961036799,HK
-961036800,961037055,AP
+961036800,961037055,FR
961037056,961052671,HK
961052672,961085439,JP
961085440,961087231,SG
-961087232,961087487,AP
+961087232,961087487,FR
961087488,961089023,SG
-961089024,961089535,AP
+961089024,961089535,FR
961089536,961090047,SG
-961090048,961090303,AP
+961090048,961090303,FR
961090304,961091839,SG
-961091840,961092095,AP
+961091840,961092095,FR
961092096,961092351,IN
-961092352,961092607,AP
+961092352,961092607,FR
961092608,961093887,SG
-961093888,961094143,AP
+961093888,961094143,FR
961094144,961118207,SG
961118208,961119487,MY
-961119488,961119743,AP
+961119488,961119743,FR
961119744,961126399,MY
961126400,961134591,TW
961134592,961142783,KR
@@ -19535,11 +7889,21 @@
961200128,961208319,CO
961208320,961216511,VE
961216512,961224703,PE
-961224704,961249279,EU
+961224704,961228799,EC
+961228800,961232895,BO
+961232896,961236991,PY
+961236992,961241087,FR
+961241088,961245183,GF
+961245184,961247231,GY
+961247232,961249279,SR
961249280,961253375,GT
-961253376,961265663,EU
+961253376,961257471,BZ
+961257472,961261567,HN
+961261568,961265663,NI
961265664,961269759,SV
-961269760,961282047,EU
+961269760,961273855,PA
+961273856,961277951,CR
+961277952,961282047,FR
961282048,961314815,MX
961314816,961380351,US
961380352,961413119,CA
@@ -19547,45 +7911,56 @@
961445888,961478655,ES
961478656,961511423,CH
961511424,961519615,PT
-961519616,961527807,EU
+961519616,961523711,SE
+961523712,961527807,LI
961527808,961531903,MC
-961531904,961535999,SM
-961536000,961540095,VA
-961540096,961544191,EU
+961531904,961533951,SM
+961533952,961540095,VA
+961540096,961542143,AD
+961542144,961544191,MC
961544192,961675263,US
-961675264,961740799,ZA
-961740800,961806335,EU
+961675264,961683455,ZA
+961683456,961687551,DZ
+961687552,961691647,AO
+961691648,961695743,BJ
+961695744,961699839,BW
+961699840,961703935,BF
+961703936,961708031,BI
+961708032,961712127,CM
+961712128,961716223,CV
+961716224,961720319,CF
+961720320,961724415,TD
+961724416,961740799,ZA
+961740800,961806335,FR
961806336,961810431,MR
-961810432,961826815,EU
+961810432,961826815,FR
961826816,961830911,NE
-961830912,961892351,EU
+961830912,961892351,FR
961892352,961896447,ZW
961896448,961900543,NG
-961900544,961937407,EU
+961900544,961937407,FR
961937408,961945599,IS
961945600,961950463,FI
-961950464,961950719,EU
+961950464,961950719,FR
961950720,961953791,FI
961953792,961961983,DK
961961984,961970175,NO
-961970176,961971455,SE
-961971456,961971711,EU
-961971712,962002943,SE
+961970176,962002943,FR
962002944,962035711,RU
962035712,962039807,EE
962039808,962043903,LV
962043904,962047999,LT
-962048000,962076671,EU
+962048000,962076671,FR
962076672,962080767,BH
-962080768,962084863,EU
+962080768,962084863,FR
962084864,962088959,GE
-962088960,962097151,EU
+962088960,962097151,FR
962097152,962101247,IL
-962101248,962134015,EU
+962101248,962134015,FR
962134016,962138111,AE
-962138112,962203647,EU
+962138112,962203647,FR
962203648,962207999,AT
-962208000,962208255,EU
+962208000,962208255,FR
962208256,962211839,AT
962211840,962215935,BG
962215936,962217983,HR
@@ -19593,25 +7968,53 @@
962220032,962224127,CZ
962224128,962228223,GR
962228224,962232319,HU
-962232320,962244607,EU
+962232320,962244607,FR
962244608,962248703,RO
-962248704,962252799,EU
+962248704,962252799,FR
962252800,962256895,SK
962256896,962260991,SI
962260992,962265087,TR
-962265088,962281471,EU
+962265088,962281471,FR
962281472,962285567,DO
-962285568,962359295,EU
+962285568,962359295,FR
962359296,962363391,IN
-962363392,962392063,EU
+962363392,962392063,FR
962392064,962396159,PK
-962396160,962408447,EU
+962396160,962408447,FR
962408448,962412543,TH
962412544,962416639,UZ
-962416640,962461695,EU
+962416640,962461695,FR
962461696,962469887,IE
962469888,962527231,TR
-962527232,973078527,EU
+962527232,962592767,FR
+962592768,962594815,IN
+962594816,962596863,FR
+962596864,962598911,SG
+962598912,962600959,FR
+962600960,962609151,HK
+962609152,962613247,JP
+962613248,962617343,FR
+962617344,962621439,AU
+962621440,962674687,FR
+962674688,962676735,BR
+962676736,962680831,FR
+962680832,962689023,US
+962689024,962723839,FR
+962723840,962732031,GB
+962732032,962740223,DE
+962740224,962744319,SE
+962744320,962748415,FR
+962748416,962752511,BH
+962752512,962756607,ZA
+962756608,968818687,FR
+968818688,968819711,DE
+968819712,968851455,FR
+968851456,968852479,US
+968852480,972744447,FR
+972744448,972744703,IN
+972744704,972747263,FR
+972747264,972747519,US
+972747520,973078527,FR
973078528,973209599,JP
973209600,973275135,IN
973275136,973471743,JP
@@ -19643,9 +8046,7 @@
977764352,977797119,MY
977797120,978321407,KR
978321408,978452479,JP
-978452480,978485247,CN
-978485248,978518015,SG
-978518016,978583551,CN
+978452480,978583551,CN
978599936,978640895,AU
978640896,978644991,NZ
978644992,978714623,JP
@@ -19658,7 +8059,9 @@
979369984,979410943,AU
979410944,979419135,HK
979419136,979435519,AU
-979435520,979468287,TH
+979435520,979436799,TH
+979436800,979437055,OM
+979437056,979468287,TH
979468288,979501055,BD
979501056,979566591,JP
979566592,979599359,TW
@@ -19708,11 +8111,7 @@
985006080,985071615,SG
985071616,985137151,JP
985137152,985202687,KR
-985202688,985224959,SG
-985224960,985225215,AP
-985225216,985243903,SG
-985243904,985244159,AP
-985244160,985268223,SG
+985202688,985268223,SG
985268224,985399295,VN
985399296,985661439,JP
985661440,987758591,CN
@@ -19738,11 +8137,15 @@
999555072,999686143,HK
999686144,999751679,KR
999751680,999784447,CN
-999784448,999800831,AP
+999784448,999800831,JP
999800832,999817215,KR
999817216,999849983,BD
999849984,999866367,KR
-999866368,999882751,HK
+999866368,999873919,HK
+999873920,999873941,VN
+999873942,999873943,HK
+999873944,999874047,VN
+999874048,999882751,HK
999948288,1000013823,AU
1000013824,1000079359,CN
1000079360,1000341503,JP
@@ -19789,20 +8192,16 @@
1023238144,1023246335,ID
1023246336,1023279103,CN
1023279104,1023311871,IN
-1023311872,1023316991,US
+1023311872,1023315711,US
+1023315712,1023315967,AU
+1023315968,1023316991,US
1023316992,1023317247,AU
-1023317248,1023317759,US
-1023317760,1023318015,IN
-1023318016,1023323903,US
-1023323904,1023324159,AU
-1023324160,1023328255,US
+1023317248,1023328255,US
1023328256,1023344639,JP
1023344640,1023410175,CN
1023410176,1023672319,IN
1023672320,1023688703,HK
-1023688704,1023692031,MM
-1023692032,1023692287,SG
-1023692288,1023692799,MM
+1023688704,1023692799,MM
1023692800,1023696895,CN
1023696896,1023705087,MY
1023705088,1023717375,JP
@@ -19827,9 +8226,7 @@
1023967232,1023975423,IN
1023975424,1023979519,CN
1023979520,1023983615,AU
-1023983616,1023991551,SG
-1023991552,1023991807,AP
-1023991808,1023999999,SG
+1023983616,1023999999,SG
1024000000,1024032767,PH
1024032768,1024065535,AU
1024065536,1024131071,HK
@@ -19843,19 +8240,19 @@
1024327680,1024344063,US
1024344064,1024352255,SG
1024352256,1024360447,AU
-1024360448,1024363775,JP
+1024360448,1024363263,JP
+1024363264,1024363519,SG
+1024363520,1024363775,JP
1024363776,1024364031,AU
-1024364032,1024365055,JP
-1024365056,1024365311,AP
-1024365312,1024365727,JP
+1024364032,1024365727,JP
1024365728,1024365759,SG
-1024365760,1024367423,JP
-1024367424,1024367487,PH
-1024367488,1024370687,JP
-1024370688,1024371199,PH
-1024371200,1024375295,JP
-1024375296,1024375807,AU
-1024375808,1024376831,JP
+1024365760,1024372543,JP
+1024372544,1024372607,HK
+1024372608,1024373263,JP
+1024373264,1024373279,HK
+1024373280,1024375295,JP
+1024375296,1024375551,AU
+1024375552,1024376831,JP
1024376832,1024393215,PH
1024393216,1024458751,HK
1024458752,1024491519,SG
@@ -19890,15 +8287,15 @@
1025376256,1025507327,TW
1025507328,1026293759,KR
1026293760,1026311423,JP
-1026311424,1026311679,US
+1026311424,1026311530,US
+1026311531,1026311531,JP
+1026311532,1026311679,US
1026311680,1026392063,JP
1026392064,1026408447,CN
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
@@ -19921,17 +8318,11 @@
1029701632,1030674431,KR
1030674432,1030676223,JP
1030676224,1030750207,KR
-1030750208,1030946303,JP
-1030946304,1030946559,AP
-1030946560,1031415039,JP
-1031415040,1031415295,US
-1031415296,1031798783,JP
-1031798784,1035993087,CN
-1035993088,1037410303,JP
-1037410304,1037415679,US
-1037415680,1037415935,AP
-1037415936,1037418495,US
-1037418496,1037565951,JP
+1030750208,1031798783,JP
+1031798784,1032668159,CN
+1032668160,1032668415,HK
+1032668416,1035993087,CN
+1035993088,1037565951,JP
1037565952,1038614527,TW
1038614528,1039007743,CN
1039007744,1039138815,HK
@@ -19953,64 +8344,17 @@
1039663104,1040187391,KR
1040187392,1040252927,IL
1040252928,1040318463,GR
-1040318464,1040344063,CH
-1040344064,1040344319,AT
-1040344320,1040383999,CH
+1040318464,1040383999,CH
1040384000,1040390853,SA
1040390854,1040390854,ZA
-1040390855,1040397823,SA
-1040397824,1040398591,GB
-1040398592,1040399871,SA
-1040399872,1040400127,GB
-1040400128,1040400383,SA
+1040390855,1040400383,SA
1040400384,1040416767,GB
1040416768,1040424959,SE
1040424960,1040433151,PL
1040433152,1040449535,GB
1040449536,1040457727,FR
1040457728,1040465919,ME
-1040465920,1040466687,DE
-1040466688,1040466975,EU
-1040466976,1040467007,DE
-1040467008,1040467071,EU
1040467072,1040467087,FR
-1040467088,1040467103,DE
-1040467104,1040467135,FR
-1040467136,1040467151,DE
-1040467152,1040467759,EU
-1040467760,1040467767,FR
-1040467768,1040467775,EU
-1040467776,1040467823,FR
-1040467824,1040467935,EU
-1040467936,1040467951,FR
-1040467952,1040467967,EU
-1040467968,1040468095,FR
-1040468096,1040468231,EU
-1040468232,1040468255,FR
-1040468256,1040468415,EU
-1040468416,1040468479,FR
-1040468480,1040468607,EU
-1040468608,1040468735,DE
-1040468736,1040468767,NL
-1040468768,1040469119,EU
-1040469120,1040469183,FR
-1040469184,1040469503,EU
-1040469504,1040469567,FR
-1040469568,1040469631,EU
-1040469632,1040469695,FR
-1040469696,1040469903,EU
-1040469904,1040469919,FR
-1040469920,1040469983,EU
-1040469984,1040469999,FR
-1040470000,1040470399,EU
-1040470400,1040470431,DE
-1040470432,1040471487,EU
-1040471488,1040471519,NL
-1040471520,1040472575,EU
-1040472576,1040472831,DE
-1040472832,1040473071,EU
-1040473072,1040473087,DE
-1040473088,1040474111,EU
1040474112,1040482303,CZ
1040482304,1040515071,BE
1040515072,1040547839,GB
@@ -20027,767 +8371,132 @@
1040982016,1040982527,DK
1040982528,1040982783,FI
1040982784,1040983551,DK
-1040983552,1040983807,EU
+1040983552,1040983807,FO
1040983808,1040990207,DK
-1040990208,1040994303,CY
-1040994304,1040994559,RU
-1040994560,1040998399,CY
+1040990208,1040998399,CY
1040998400,1041006591,EG
1041006592,1041039359,CH
-1041039360,1041051647,SE
-1041051648,1041051839,NO
-1041051840,1041052159,SE
-1041052160,1041052175,NO
-1041052176,1041072127,SE
+1041039360,1041072127,SE
1041072128,1041080319,GB
1041080320,1041088511,IT
1041088512,1041096703,AT
1041096704,1041235967,ES
1041235968,1041244159,UA
-1041244160,1041253119,RU
-1041253120,1041253375,TJ
-1041253376,1041268735,RU
+1041244160,1041268735,RU
1041268736,1041301503,NO
1041301504,1041310975,IE
-1041310976,1041311231,EU
-1041311232,1041336319,IE
-1041336320,1041336575,EU
-1041336576,1041367039,IE
+1041310976,1041311231,GB
+1041311232,1041367039,IE
1041367040,1041498111,IT
1041498112,1041563647,SE
1041563648,1041596415,PL
1041596416,1041629183,NL
-1041629184,1041638655,ES
-1041638656,1041638911,EU
-1041638912,1041641503,ES
-1041641504,1041641507,BE
-1041641508,1041642751,ES
-1041642752,1041643007,EU
-1041643008,1041694719,ES
-1041694720,1041695151,FR
-1041695152,1041695167,GB
-1041695168,1041695359,FR
-1041695360,1041695391,GB
-1041695392,1041695647,FR
-1041695648,1041695679,GB
-1041695680,1041695695,CH
-1041695696,1041695711,FR
-1041695712,1041695719,GB
-1041695720,1041695767,FR
-1041695768,1041695775,GB
-1041695776,1041695855,FR
-1041695856,1041695887,GB
-1041695888,1041695903,FR
-1041695904,1041695999,GB
-1041696000,1041696871,FR
-1041696872,1041696879,GB
-1041696880,1041697699,FR
-1041697700,1041697703,GB
-1041697704,1041698047,FR
-1041698048,1041698077,GB
-1041698078,1041698207,FR
-1041698208,1041698223,GB
-1041698224,1041698247,FR
-1041698248,1041698255,GB
-1041698256,1041698263,FR
-1041698264,1041698271,GB
-1041698272,1041698711,FR
-1041698712,1041698719,GB
-1041698720,1041699287,FR
-1041699288,1041699295,GB
-1041699296,1041699327,FR
-1041699328,1041699391,GB
-1041699392,1041699583,FR
-1041699584,1041699591,IT
-1041699592,1041699599,FR
-1041699600,1041699615,GB
-1041699616,1041699623,FR
-1041699624,1041699631,GB
-1041699632,1041699679,FR
-1041699680,1041699695,GB
-1041699696,1041699767,FR
-1041699768,1041699807,GB
-1041699808,1041700607,FR
-1041700608,1041700863,GB
-1041700864,1041701143,FR
-1041701144,1041701151,GB
-1041701152,1041701175,FR
-1041701176,1041701183,GB
-1041701184,1041701207,FR
-1041701208,1041701222,GB
-1041701223,1041701311,FR
-1041701312,1041701551,GB
-1041701552,1041701567,FR
-1041701568,1041701631,GB
-1041701632,1041704319,FR
-1041704320,1041704335,GB
-1041704336,1041704351,FR
-1041704352,1041704383,GB
-1041704384,1041704407,FR
-1041704408,1041704415,GB
+1041629184,1041694719,ES
+1041694720,1041700959,GB
+1041700960,1041700975,FR
+1041700976,1041701783,GB
+1041701784,1041701791,FR
+1041701792,1041701823,GB
+1041701824,1041701831,FR
+1041701832,1041703479,GB
+1041703480,1041703487,FR
+1041703488,1041703631,GB
+1041703632,1041703639,FR
+1041703640,1041704415,GB
1041704416,1041704423,FR
-1041704424,1041704431,GB
-1041704432,1041705231,FR
-1041705232,1041705239,GB
-1041705240,1041705255,FR
-1041705256,1041705279,GB
-1041705280,1041705295,FR
-1041705296,1041705311,GB
-1041705312,1041705343,FR
-1041705344,1041705367,GB
-1041705368,1041705391,FR
-1041705392,1041705439,GB
-1041705440,1041705447,FR
-1041705448,1041705455,GB
-1041705456,1041705463,FR
-1041705464,1041705479,GB
-1041705480,1041705487,FR
-1041705488,1041705519,GB
-1041705520,1041705631,FR
-1041705632,1041705663,GB
-1041705664,1041705695,FR
-1041705696,1041705703,GB
-1041705704,1041705743,FR
-1041705744,1041705751,GB
-1041705752,1041705767,FR
-1041705768,1041705815,GB
-1041705816,1041705831,FR
-1041705832,1041705855,GB
-1041705856,1041705871,FR
-1041705872,1041705879,GB
-1041705880,1041705887,FR
-1041705888,1041705895,GB
-1041705896,1041705903,FR
-1041705904,1041705911,GB
-1041705912,1041705935,FR
-1041705936,1041705951,GB
-1041705952,1041706120,FR
-1041706121,1041706127,GB
-1041706128,1041706223,FR
-1041706224,1041706231,IT
-1041706232,1041706239,GB
-1041706240,1041708687,FR
-1041708688,1041708695,GB
-1041708696,1041708703,FR
-1041708704,1041708799,GB
-1041708800,1041709463,FR
-1041709464,1041709471,GB
-1041709472,1041709479,FR
-1041709480,1041709487,GB
-1041709488,1041709767,FR
-1041709768,1041709775,GB
-1041709776,1041709783,FR
-1041709784,1041709791,GB
-1041709792,1041709903,FR
-1041709904,1041709911,GB
-1041709912,1041709919,FR
-1041709920,1041709927,GB
-1041709928,1041709935,FR
-1041709936,1041709943,GB
-1041709944,1041709991,FR
-1041709992,1041709999,GB
-1041710000,1041710007,FR
-1041710008,1041710015,GB
-1041710016,1041710047,FR
-1041710048,1041710055,GB
-1041710056,1041710391,FR
-1041710392,1041710407,GB
-1041710408,1041710431,FR
-1041710432,1041710455,GB
-1041710456,1041710471,FR
-1041710472,1041710487,GB
-1041710488,1041710495,FR
-1041710496,1041710511,GB
-1041710512,1041710535,FR
-1041710536,1041710543,GB
-1041710544,1041710551,FR
-1041710552,1041710591,GB
-1041710592,1041710735,FR
-1041710736,1041710751,GB
-1041710752,1041710775,FR
-1041710776,1041710783,GB
-1041710784,1041711487,FR
-1041711488,1041711519,GB
-1041711520,1041711551,FR
-1041711552,1041711567,GB
-1041711568,1041711583,FR
-1041711584,1041711599,GB
-1041711600,1041711879,FR
-1041711880,1041711887,GB
-1041711888,1041711943,FR
-1041711944,1041711951,GB
-1041711952,1041712063,FR
-1041712064,1041712095,GB
-1041712096,1041712975,FR
-1041712976,1041712983,GB
-1041712984,1041713095,FR
-1041713096,1041713103,GB
-1041713104,1041713127,FR
-1041713128,1041713135,GB
-1041713136,1041713991,FR
-1041713992,1041713999,GB
-1041714000,1041714047,FR
-1041714048,1041714055,GB
-1041714056,1041714071,FR
-1041714072,1041714079,GB
-1041714080,1041714095,FR
-1041714096,1041714103,GB
-1041714104,1041714111,FR
-1041714112,1041714175,GB
-1041714176,1041715495,FR
-1041715496,1041715503,GB
-1041715504,1041715527,FR
-1041715528,1041715535,GB
-1041715536,1041715583,FR
-1041715584,1041715615,GB
-1041715616,1041715631,FR
-1041715632,1041715647,GB
-1041715648,1041715775,FR
-1041715776,1041715791,GB
-1041715792,1041715807,FR
-1041715808,1041715823,GB
-1041715824,1041715863,FR
-1041715864,1041715870,GB
-1041715871,1041715903,FR
-1041715904,1041715911,GB
-1041715912,1041715943,FR
-1041715944,1041715951,GB
-1041715952,1041715999,FR
-1041716000,1041716015,GB
-1041716016,1041716047,FR
-1041716048,1041716095,GB
-1041716096,1041716439,FR
-1041716440,1041716447,GB
-1041716448,1041716503,FR
-1041716504,1041716511,GB
-1041716512,1041716519,FR
-1041716520,1041716527,GB
-1041716528,1041716543,FR
-1041716544,1041716575,GB
-1041716576,1041716671,FR
-1041716672,1041716703,GB
-1041716704,1041717063,FR
-1041717064,1041717071,GB
-1041717072,1041717167,FR
-1041717168,1041717183,GB
-1041717184,1041717503,FR
-1041717504,1041717511,IT
-1041717512,1041717631,FR
-1041717632,1041717639,GB
-1041717640,1041717687,FR
-1041717688,1041717695,GB
-1041717696,1041717711,FR
-1041717712,1041717719,GB
-1041717720,1041718159,FR
-1041718160,1041718167,GB
-1041718168,1041718199,FR
-1041718200,1041718223,GB
-1041718224,1041718231,FR
-1041718232,1041718263,GB
-1041718264,1041718279,FR
-1041718280,1041718287,BE
-1041718288,1041718343,FR
-1041718344,1041718351,GB
-1041718352,1041718383,FR
-1041718384,1041718391,GB
-1041718392,1041718447,FR
-1041718448,1041718455,GB
-1041718456,1041718463,FR
-1041718464,1041718479,GB
-1041718480,1041718495,FR
-1041718496,1041718503,GB
-1041718504,1041718895,FR
-1041718896,1041718911,GB
-1041718912,1041718935,FR
-1041718936,1041718943,GB
-1041718944,1041718975,FR
-1041718976,1041718991,GB
-1041718992,1041718999,FR
-1041719000,1041719007,GB
-1041719008,1041719167,FR
-1041719168,1041719175,GB
-1041719176,1041719203,FR
-1041719204,1041719223,GB
+1041704424,1041706551,GB
+1041706552,1041706559,FR
+1041706560,1041706751,GB
+1041706752,1041707263,FR
+1041707264,1041708543,GB
+1041708544,1041708799,FR
+1041708800,1041709823,GB
+1041709824,1041710079,FR
+1041710080,1041710423,GB
+1041710424,1041710431,FR
+1041710432,1041710671,GB
+1041710672,1041710687,FR
+1041710688,1041711551,GB
+1041711552,1041711559,FR
+1041711560,1041712631,GB
+1041712632,1041712639,FR
+1041712640,1041715071,GB
+1041715072,1041715079,FR
+1041715080,1041715567,GB
+1041715568,1041715583,FR
+1041715584,1041716039,GB
+1041716040,1041716047,FR
+1041716048,1041716223,GB
+1041716224,1041716231,FR
+1041716232,1041716455,GB
+1041716456,1041716463,FR
+1041716464,1041718015,GB
+1041718016,1041718271,FR
+1041718272,1041719223,GB
1041719224,1041719224,FR
1041719225,1041719227,GB
1041719228,1041719228,FR
-1041719229,1041719231,GB
-1041719232,1041719247,FR
-1041719248,1041719263,GB
-1041719264,1041719487,FR
-1041719488,1041719519,GB
-1041719520,1041720191,FR
-1041720192,1041720319,GB
-1041720320,1041721343,FR
-1041721344,1041721359,GB
-1041721360,1041721391,FR
-1041721392,1041721407,GB
-1041721408,1041721519,FR
-1041721520,1041721535,GB
-1041721536,1041721775,FR
-1041721776,1041721791,GB
-1041721792,1041721815,FR
-1041721816,1041721823,GB
-1041721824,1041722367,FR
-1041722368,1041722383,GB
-1041722384,1041722391,FR
-1041722392,1041722399,GB
-1041722400,1041722423,FR
-1041722424,1041722463,GB
-1041722464,1041722479,FR
-1041722480,1041722495,GB
-1041722496,1041722535,FR
-1041722536,1041722559,GB
-1041722560,1041722567,FR
-1041722568,1041722623,GB
-1041722624,1041722935,FR
-1041722936,1041722943,GB
-1041722944,1041722983,FR
-1041722984,1041723007,GB
-1041723008,1041723047,FR
-1041723048,1041723135,GB
-1041723136,1041723359,FR
-1041723360,1041723391,GB
-1041723392,1041723671,FR
-1041723672,1041723775,GB
+1041719229,1041719407,GB
+1041719408,1041719423,FR
+1041719424,1041720575,GB
+1041720576,1041720831,FR
+1041720832,1041721599,GB
+1041721600,1041721727,FR
+1041721728,1041721759,GB
+1041721760,1041721775,FR
+1041721776,1041722951,GB
+1041722952,1041722959,FR
+1041722960,1041723263,GB
+1041723264,1041723279,FR
+1041723280,1041723775,GB
1041723776,1041723839,FR
-1041723840,1041723871,GB
-1041723872,1041723887,FR
-1041723888,1041723903,GB
-1041723904,1041724671,FR
-1041724672,1041724927,GB
-1041724928,1041725015,FR
-1041725016,1041725023,GB
-1041725024,1041725119,FR
-1041725120,1041725167,GB
-1041725168,1041725175,FR
-1041725176,1041725183,GB
-1041725184,1041726063,FR
-1041726064,1041726079,GB
-1041726080,1041726127,FR
-1041726128,1041726151,GB
-1041726152,1041726159,FR
-1041726160,1041726167,GB
-1041726168,1041726535,FR
-1041726536,1041726543,GB
-1041726544,1041726599,FR
-1041726600,1041726607,GB
-1041726608,1041726639,FR
-1041726640,1041726655,GB
-1041726656,1041726671,FR
-1041726672,1041726687,GB
-1041726688,1041726719,FR
-1041726720,1041726727,GB
-1041726728,1041726735,FR
-1041726736,1041726751,GB
-1041726752,1041726847,FR
-1041726848,1041726863,GB
-1041726864,1041726879,FR
-1041726880,1041726903,GB
-1041726904,1041726951,FR
-1041726952,1041726959,GB
-1041726960,1041726975,FR
-1041726976,1041726979,GB
-1041726980,1041726983,FR
-1041726984,1041726987,GB
-1041726988,1041726991,FR
-1041726992,1041726992,GB
-1041726993,1041726994,FR
-1041726995,1041726995,GB
-1041726996,1041727007,FR
-1041727008,1041727028,GB
-1041727029,1041727029,FR
-1041727030,1041727036,GB
-1041727037,1041727038,FR
-1041727039,1041727042,GB
-1041727043,1041727043,FR
-1041727044,1041727049,GB
-1041727050,1041727050,FR
-1041727051,1041727055,GB
-1041727056,1041727063,FR
-1041727064,1041727070,GB
-1041727071,1041727087,FR
-1041727088,1041727089,GB
-1041727090,1041727090,FR
-1041727091,1041727091,GB
-1041727092,1041727167,FR
-1041727168,1041727239,GB
-1041727240,1041727303,FR
-1041727304,1041727311,GB
-1041727312,1041727999,FR
-1041728000,1041728047,GB
-1041728048,1041728063,FR
-1041728064,1041728095,GB
-1041728096,1041728111,FR
-1041728112,1041728127,GB
-1041728128,1041729503,FR
-1041729504,1041729519,GB
-1041729520,1041729527,FR
-1041729528,1041729535,GB
-1041729536,1041729561,FR
+1041723840,1041729559,GB
+1041729560,1041729561,FR
1041729562,1041729564,GB
1041729565,1041729566,FR
-1041729567,1041729567,GB
-1041729568,1041729615,FR
-1041729616,1041729623,GB
-1041729624,1041729663,FR
-1041729664,1041729935,GB
+1041729567,1041729935,GB
1041729936,1041729951,FR
-1041729952,1041730047,GB
-1041730048,1041730239,FR
-1041730240,1041730247,GB
-1041730248,1041730639,FR
-1041730640,1041730655,GB
-1041730656,1041732103,FR
-1041732104,1041732111,GB
-1041732112,1041732127,FR
-1041732128,1041732191,GB
-1041732192,1041732255,FR
-1041732256,1041732295,GB
-1041732296,1041732303,FR
-1041732304,1041732311,GB
-1041732312,1041732519,FR
-1041732520,1041732527,GB
-1041732528,1041732863,FR
-1041732864,1041732871,GB
-1041732872,1041732879,FR
-1041732880,1041732927,GB
-1041732928,1041732959,FR
-1041732960,1041732967,GB
-1041732968,1041732991,FR
-1041732992,1041733103,GB
-1041733104,1041734655,FR
-1041734656,1041734911,GB
-1041734912,1041735431,FR
-1041735432,1041735495,GB
-1041735496,1041735511,FR
-1041735512,1041735551,GB
-1041735552,1041735567,FR
-1041735568,1041735583,GB
-1041735584,1041735615,FR
-1041735616,1041735663,GB
-1041735664,1041736375,FR
-1041736376,1041736383,GB
-1041736384,1041736423,FR
-1041736424,1041736455,GB
-1041736456,1041736487,FR
-1041736488,1041736495,GB
-1041736496,1041736527,FR
-1041736528,1041736535,GB
-1041736536,1041736543,FR
-1041736544,1041736551,GB
-1041736552,1041736591,FR
-1041736592,1041736599,GB
-1041736600,1041736607,FR
-1041736608,1041736631,GB
-1041736632,1041736687,FR
-1041736688,1041736695,GB
-1041736696,1041737015,FR
-1041737016,1041737031,GB
-1041737032,1041737039,FR
-1041737040,1041737055,GB
-1041737056,1041737071,FR
-1041737072,1041737087,GB
-1041737088,1041737223,FR
-1041737224,1041737279,GB
-1041737280,1041737295,FR
-1041737296,1041737303,GB
-1041737304,1041737375,FR
-1041737376,1041737391,GB
-1041737392,1041737399,FR
-1041737400,1041737423,GB
-1041737424,1041737455,FR
-1041737456,1041737463,GB
-1041737464,1041737487,FR
-1041737488,1041737495,GB
-1041737496,1041737503,FR
-1041737504,1041737519,GB
-1041737520,1041737543,FR
-1041737544,1041737567,GB
-1041737568,1041737575,FR
-1041737576,1041737583,GB
+1041729952,1041731071,GB
+1041731072,1041731327,FR
+1041731328,1041732031,GB
+1041732032,1041732047,FR
+1041732048,1041736381,GB
+1041736382,1041736382,FR
+1041736383,1041736675,GB
+1041736676,1041736676,FR
+1041736677,1041737583,GB
1041737584,1041737591,FR
-1041737592,1041737599,GB
-1041737600,1041737607,FR
-1041737608,1041737615,GB
-1041737616,1041737647,FR
-1041737648,1041737663,GB
-1041737664,1041737671,FR
-1041737672,1041737695,GB
-1041737696,1041737727,FR
-1041737728,1041737735,GB
-1041737736,1041737783,FR
-1041737784,1041737823,GB
-1041737824,1041737847,FR
-1041737848,1041737855,GB
-1041737856,1041737871,FR
-1041737872,1041737879,GB
-1041737880,1041737903,FR
-1041737904,1041737911,GB
-1041737912,1041737919,FR
-1041737920,1041737935,GB
-1041737936,1041738159,FR
-1041738160,1041738167,GB
-1041738168,1041738215,FR
-1041738216,1041738223,GB
-1041738224,1041738503,FR
-1041738504,1041738511,GB
-1041738512,1041738519,FR
-1041738520,1041738543,GB
-1041738544,1041738551,FR
-1041738552,1041738559,GB
-1041738560,1041738567,FR
-1041738568,1041738575,GB
-1041738576,1041738583,FR
-1041738584,1041738591,GB
-1041738592,1041738599,FR
-1041738600,1041738623,GB
-1041738624,1041738663,FR
-1041738664,1041738671,GB
-1041738672,1041738703,FR
-1041738704,1041738719,GB
-1041738720,1041738735,FR
-1041738736,1041738751,GB
-1041738752,1041739079,FR
-1041739080,1041739087,GB
-1041739088,1041739167,FR
-1041739168,1041739231,GB
-1041739232,1041739295,FR
-1041739296,1041739299,BE
-1041739300,1041739375,FR
-1041739376,1041739383,BE
-1041739384,1041739407,FR
-1041739408,1041739423,GB
-1041739424,1041739463,FR
-1041739464,1041739471,GB
-1041739472,1041739487,FR
-1041739488,1041739503,GB
-1041739504,1041739519,FR
-1041739520,1041739535,GB
-1041739536,1041739743,FR
-1041739744,1041739751,GB
-1041739752,1041740031,FR
-1041740032,1041740039,GB
-1041740040,1041740055,FR
-1041740056,1041740063,GB
-1041740064,1041740103,FR
-1041740104,1041740119,GB
-1041740120,1041740135,FR
-1041740136,1041740143,GB
-1041740144,1041740167,FR
-1041740168,1041740175,GB
-1041740176,1041740207,FR
-1041740208,1041740215,GB
-1041740216,1041740263,FR
-1041740264,1041740271,GB
-1041740272,1041740551,FR
-1041740552,1041740559,GB
-1041740560,1041740567,FR
-1041740568,1041740575,GB
-1041740576,1041740591,FR
-1041740592,1041740607,GB
-1041740608,1041740647,FR
-1041740648,1041740655,GB
-1041740656,1041740671,FR
-1041740672,1041740687,GB
-1041740688,1041740703,FR
-1041740704,1041740719,GB
-1041740720,1041740807,FR
-1041740808,1041740831,GB
-1041740832,1041741567,FR
-1041741568,1041741583,GB
-1041741584,1041741607,FR
-1041741608,1041741615,GB
-1041741616,1041741631,FR
-1041741632,1041741647,GB
-1041741648,1041741663,DE
-1041741664,1041741679,GB
-1041741680,1041741687,FR
-1041741688,1041741823,GB
-1041741824,1041742087,FR
-1041742088,1041742095,GB
-1041742096,1041742119,FR
-1041742120,1041742127,GB
-1041742128,1041742183,FR
-1041742184,1041742191,GB
-1041742192,1041742199,FR
-1041742200,1041742207,GB
-1041742208,1041742223,FR
-1041742224,1041742239,GB
-1041742240,1041742255,FR
-1041742256,1041742271,GB
-1041742272,1041742279,FR
-1041742280,1041742287,GB
-1041742288,1041742303,FR
-1041742304,1041742335,GB
-1041742336,1041742359,FR
-1041742360,1041742367,GB
-1041742368,1041742375,FR
-1041742376,1041742391,GB
-1041742392,1041742407,FR
-1041742408,1041742415,GB
-1041742416,1041742455,FR
-1041742456,1041742463,GB
-1041742464,1041742471,FR
-1041742472,1041742479,GB
-1041742480,1041742511,FR
-1041742512,1041742527,GB
-1041742528,1041743135,FR
-1041743136,1041743143,GB
-1041743144,1041743175,FR
-1041743176,1041743215,GB
-1041743216,1041743263,FR
-1041743264,1041743271,GB
-1041743272,1041743303,FR
-1041743304,1041743311,GB
-1041743312,1041743615,FR
-1041743616,1041743623,GB
-1041743624,1041743639,FR
-1041743640,1041743647,GB
-1041743648,1041743671,FR
-1041743672,1041743679,GB
-1041743680,1041743719,FR
-1041743720,1041743727,GB
-1041743728,1041743743,FR
-1041743744,1041743759,GB
-1041743760,1041743767,FR
-1041743768,1041743799,GB
-1041743800,1041743807,FR
-1041743808,1041743823,GB
-1041743824,1041743831,FR
-1041743832,1041743847,GB
-1041743848,1041743863,FR
-1041743864,1041743871,GB
-1041743872,1041744903,FR
-1041744904,1041744911,GB
-1041744912,1041744919,FR
-1041744920,1041744927,GB
-1041744928,1041744943,FR
-1041744944,1041744951,GB
-1041744952,1041744975,FR
-1041744976,1041744983,GB
-1041744984,1041745007,FR
-1041745008,1041745031,GB
-1041745032,1041745063,FR
-1041745064,1041745079,GB
-1041745080,1041745087,FR
-1041745088,1041745095,GB
-1041745096,1041745127,FR
-1041745128,1041745151,GB
-1041745152,1041745527,FR
-1041745528,1041745535,GB
-1041745536,1041745543,FR
-1041745544,1041745551,GB
-1041745552,1041745567,FR
-1041745568,1041745575,GB
-1041745576,1041745599,FR
-1041745600,1041745615,GB
-1041745616,1041745639,FR
-1041745640,1041745647,GB
-1041745648,1041745655,FR
-1041745656,1041745663,GB
-1041745664,1041745919,FR
-1041745920,1041745959,GB
-1041745960,1041745999,FR
-1041746000,1041746015,GB
-1041746016,1041746023,FR
-1041746024,1041746031,GB
-1041746032,1041746039,FR
-1041746040,1041746047,GB
-1041746048,1041746063,FR
-1041746064,1041746095,GB
-1041746096,1041746111,FR
-1041746112,1041746135,GB
-1041746136,1041746799,FR
-1041746800,1041746823,GB
-1041746824,1041746831,FR
-1041746832,1041746847,GB
-1041746848,1041746863,FR
-1041746864,1041746895,GB
-1041746896,1041747463,FR
-1041747464,1041747487,GB
-1041747488,1041748991,FR
-1041748992,1041749247,EU
-1041749248,1041751303,FR
-1041751304,1041751311,GB
-1041751312,1041751343,FR
-1041751344,1041751359,GB
-1041751360,1041751391,FR
-1041751392,1041751423,GB
-1041751424,1041751567,FR
-1041751568,1041751575,GB
-1041751576,1041751695,FR
-1041751696,1041751719,GB
-1041751720,1041751759,FR
-1041751760,1041751767,GB
-1041751768,1041751775,FR
-1041751776,1041751807,GB
-1041751808,1041753319,FR
-1041753320,1041753343,GB
-1041753344,1041753407,FR
-1041753408,1041753503,GB
-1041753504,1041754143,FR
-1041754144,1041754151,GB
-1041754152,1041754175,FR
-1041754176,1041754191,GB
-1041754192,1041754239,FR
-1041754240,1041754247,GB
-1041754248,1041754423,FR
-1041754424,1041754431,GB
-1041754432,1041754455,FR
-1041754456,1041754463,GB
-1041754464,1041754479,FR
-1041754480,1041754495,GB
-1041754496,1041754519,FR
-1041754520,1041754527,GB
-1041754528,1041755231,FR
-1041755232,1041755239,GB
-1041755240,1041755271,FR
-1041755272,1041755279,GB
-1041755280,1041755335,FR
-1041755336,1041755343,GB
-1041755344,1041755375,FR
-1041755376,1041755391,GB
-1041755392,1041756455,FR
-1041756456,1041756471,GB
-1041756472,1041756543,FR
-1041756544,1041756567,GB
-1041756568,1041756591,FR
-1041756592,1041756607,GB
-1041756608,1041756655,FR
-1041756656,1041756663,GB
-1041756664,1041757439,FR
-1041757440,1041757447,GB
-1041757448,1041757479,FR
-1041757480,1041757487,GB
-1041757488,1041757503,FR
-1041757504,1041757519,GB
-1041757520,1041757583,FR
-1041757584,1041757591,GB
-1041757592,1041757607,FR
-1041757608,1041757615,GB
-1041757616,1041757631,FR
-1041757632,1041757647,GB
-1041757648,1041757663,FR
-1041757664,1041757671,GB
-1041757672,1041757687,FR
-1041757688,1041757695,GB
-1041757696,1041758255,FR
-1041758256,1041758271,GB
-1041758272,1041758319,FR
-1041758320,1041758343,GB
-1041758344,1041758351,FR
-1041758352,1041758367,GB
-1041758368,1041758391,FR
-1041758392,1041758399,GB
-1041758400,1041758407,FR
-1041758408,1041758415,GB
-1041758416,1041758423,FR
-1041758424,1041758431,GB
-1041758432,1041758679,FR
-1041758680,1041758687,GB
-1041758688,1041759231,FR
-1041759232,1041760255,GB
+1041737592,1041737839,GB
+1041737840,1041737855,FR
+1041737856,1041739031,GB
+1041739032,1041739039,FR
+1041739040,1041740279,GB
+1041740280,1041740287,FR
+1041740288,1041742415,GB
+1041742416,1041742423,FR
+1041742424,1041743103,GB
+1041743104,1041743111,FR
+1041743112,1041743247,GB
+1041743248,1041743255,FR
+1041743256,1041745783,GB
+1041745784,1041745791,FR
+1041745792,1041746903,GB
+1041746904,1041746919,FR
+1041746920,1041749639,GB
+1041749640,1041749643,FR
+1041749644,1041749659,GB
+1041749660,1041749663,FR
+1041749664,1041751679,GB
+1041751680,1041751687,FR
+1041751688,1041753231,GB
+1041753232,1041753239,FR
+1041753240,1041756839,GB
+1041756840,1041756855,FR
+1041756856,1041757615,GB
+1041757616,1041757623,FR
+1041757624,1041758175,GB
+1041758176,1041758183,FR
+1041758184,1041760255,GB
1041760256,1041768447,DE
1041768448,1041776639,NO
1041776640,1041784831,CZ
@@ -20795,79 +8504,19 @@
1041793024,1041825791,GB
1041825792,1041842175,NL
1041842176,1041891327,GB
-1041891328,1041921535,DE
-1041921536,1041921727,US
-1041921728,1041945087,DE
-1041945088,1041945151,AT
-1041945152,1041958463,DE
-1041958464,1041958527,DK
-1041958528,1041959423,DE
-1041959424,1041959679,US
-1041959680,1042022399,DE
-1042022400,1042045891,PT
-1042045892,1042045895,A2
-1042045896,1042086739,PT
-1042086740,1042086743,A2
-1042086744,1042087935,PT
+1041891328,1042022399,DE
+1042022400,1042087935,PT
1042087936,1042120703,TR
1042120704,1042153471,PL
1042153472,1042284543,GB
-1042284544,1042288399,CH
-1042288400,1042288415,GB
-1042288416,1042292735,CH
-1042292736,1042293247,NL
-1042293248,1042293503,GB
-1042293504,1042293535,IT
-1042293536,1042293567,IR
-1042293568,1042293631,IT
-1042293632,1042293759,GE
-1042293760,1042293985,IT
-1042293986,1042294783,NL
-1042294784,1042296063,GE
-1042296064,1042296191,CY
-1042296192,1042296575,GE
-1042296576,1042296831,BY
-1042296832,1042297215,NL
-1042297216,1042297319,IR
-1042297320,1042297327,GE
-1042297328,1042297599,IR
-1042297600,1042297855,GB
-1042297856,1042298111,NL
-1042298112,1042298143,US
-1042298144,1042298175,NL
-1042298176,1042298239,IR
-1042298240,1042298279,IQ
-1042298280,1042298287,IR
-1042298288,1042298303,GB
-1042298304,1042298335,IQ
-1042298336,1042298351,IR
-1042298352,1042298367,NL
-1042298368,1042298623,GB
-1042298624,1042298879,NL
-1042298880,1042299135,GB
-1042299136,1042299391,IQ
-1042299392,1042300159,NL
-1042300160,1042300175,BY
-1042300176,1042300223,IQ
-1042300224,1042300255,AM
-1042300256,1042300287,IR
-1042300288,1042300351,IT
-1042300352,1042300383,IQ
-1042300384,1042300415,IR
-1042300416,1042300479,NL
-1042300480,1042300495,IQ
-1042300496,1042300543,GB
-1042300544,1042300639,IQ
-1042300640,1042300647,NL
-1042300648,1042300655,IQ
-1042300656,1042300671,LB
-1042300672,1042300799,IQ
-1042300800,1042300863,IR
-1042300864,1042300895,LB
-1042300896,1042300903,MD
+1042284544,1042292735,CH
+1042292736,1042294527,NL
+1042294528,1042294783,GB
+1042294784,1042295551,NL
+1042295552,1042296575,GE
+1042296576,1042300903,NL
1042300904,1042300911,UA
-1042300912,1042300919,NL
-1042300920,1042300927,UA
+1042300912,1042300927,NL
1042300928,1042309119,RU
1042309120,1042317311,GB
1042317312,1042350079,ES
@@ -20879,91 +8528,19 @@
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,1042875391,NL
-1042875392,1042875399,GB
-1042875400,1042875407,DE
-1042875408,1042875423,NL
-1042875424,1042875455,GB
-1042875456,1042875903,NL
-1042875904,1042876287,GB
-1042876288,1042876415,NL
-1042876416,1042876479,GB
-1042876480,1042876647,NL
-1042876648,1042876663,GB
-1042876664,1042876671,NL
-1042876672,1042876927,DE
-1042876928,1042877183,GB
-1042877184,1042877951,DE
-1042877952,1042878207,NL
-1042878208,1042878463,GB
-1042878464,1042879487,NL
-1042879488,1042879743,US
-1042879744,1042879999,NL
+1042874368,1042875135,NL
+1042875136,1042875391,FR
+1042875392,1042879999,NL
1042880000,1042880255,GB
-1042880256,1042880639,NL
-1042880640,1042880767,GB
-1042880768,1042882559,NL
-1042882560,1042882815,DE
-1042882816,1042888703,NL
-1042888704,1042888959,GB
-1042888960,1042889215,NL
-1042889216,1042889471,DE
-1042889472,1042889983,NL
-1042889984,1042890143,GB
-1042890144,1042890239,NL
-1042890240,1042890495,GB
-1042890496,1042890751,FR
-1042890752,1042890815,GB
-1042890816,1042890819,FR
-1042890820,1042890944,NL
-1042890945,1042890950,GB
-1042890951,1042890959,NL
-1042890960,1042890991,GB
-1042890992,1042891775,NL
-1042891776,1042891839,GB
-1042891840,1042891871,BE
-1042891872,1042892015,NL
-1042892016,1042892031,DE
-1042892032,1042892287,NL
-1042892288,1042892543,FR
-1042892544,1042892799,NL
-1042892800,1042893055,EU
-1042893056,1042893087,GB
-1042893088,1042893135,NL
-1042893136,1042893143,DE
-1042893144,1042893151,NL
-1042893152,1042893167,PL
-1042893168,1042893183,NL
-1042893184,1042893311,GB
-1042893312,1042894079,NL
-1042894080,1042894143,DE
-1042894144,1042894175,SE
-1042894176,1042894335,NL
-1042894336,1042894355,FR
-1042894356,1042894359,NL
-1042894360,1042894367,GB
-1042894368,1042894399,NL
-1042894400,1042894415,GB
-1042894416,1042894431,NL
-1042894432,1042894463,PT
-1042894464,1042894559,NL
-1042894560,1042894591,DE
-1042894592,1042894783,NL
-1042894784,1042894847,DE
-1042894848,1042895103,NL
-1042895104,1042895231,GB
-1042895232,1042895359,DE
-1042895360,1042895615,NL
-1042895616,1042895871,GB
-1042895872,1042896127,NL
-1042896128,1042896255,GB
-1042896256,1042900479,NL
-1042900480,1042900735,GB
-1042900736,1042915375,NL
-1042915376,1042915391,DE
-1042915392,1042939903,NL
+1042880256,1042889983,NL
+1042889984,1042890239,GB
+1042890240,1042939903,NL
1042939904,1043070975,ES
1043070976,1043079167,CZ
1043079168,1043087359,DE
@@ -20978,2023 +8555,52 @@
1043349504,1043357695,DE
1043357696,1043365887,CH
1043365888,1043398655,PT
-1043398656,1043464191,GB
-1043464192,1043464287,NL
-1043464288,1043464311,GB
-1043464312,1043464799,NL
-1043464800,1043464807,GB
-1043464808,1043464823,NL
-1043464824,1043464831,GB
-1043464832,1043464927,NL
-1043464928,1043465055,GB
-1043465056,1043465071,NL
-1043465072,1043465087,GB
-1043465088,1043465775,NL
-1043465776,1043465783,GB
-1043465784,1043465871,NL
-1043465872,1043465919,GB
-1043465920,1043465983,NL
-1043465984,1043466247,GB
-1043466248,1043466319,NL
-1043466320,1043466327,GB
-1043466328,1043466335,NL
-1043466336,1043466351,GB
-1043466352,1043466431,NL
-1043466432,1043466447,GB
-1043466448,1043466455,NL
-1043466456,1043466463,GB
-1043466464,1043466495,NL
-1043466496,1043466503,GB
-1043466504,1043466511,NL
-1043466512,1043466519,GB
-1043466520,1043466559,NL
-1043466560,1043466575,GB
-1043466576,1043466583,NL
-1043466584,1043466607,GB
-1043466608,1043466887,NL
-1043466888,1043466927,GB
-1043466928,1043466943,NL
-1043466944,1043466991,GB
-1043466992,1043467007,NL
-1043467008,1043467039,GB
-1043467040,1043467071,NL
-1043467072,1043467087,GB
-1043467088,1043467103,NL
-1043467104,1043467199,GB
-1043467200,1043467231,NL
-1043467232,1043467519,GB
-1043467520,1043467535,NL
-1043467536,1043467551,GB
-1043467552,1043467599,NL
-1043467600,1043467679,GB
-1043467680,1043467695,NL
-1043467696,1043467711,GB
-1043467712,1043467743,NL
-1043467744,1043467759,GB
-1043467760,1043467775,NL
-1043467776,1043467815,GB
-1043467816,1043467839,NL
-1043467840,1043467871,GB
-1043467872,1043467967,NL
-1043467968,1043467983,GB
-1043467984,1043467999,NL
-1043468000,1043468063,GB
-1043468064,1043468127,NL
-1043468128,1043468159,GB
-1043468160,1043468191,NL
-1043468192,1043468415,GB
-1043468416,1043468575,NL
-1043468576,1043468655,GB
-1043468656,1043468663,NL
-1043468664,1043468671,GB
-1043468672,1043468735,NL
-1043468736,1043468767,GB
-1043468768,1043468783,NL
-1043468784,1043468791,GB
-1043468792,1043468799,NL
-1043468800,1043468831,GB
-1043468832,1043468863,NL
-1043468864,1043468895,GB
-1043468896,1043468903,NL
-1043468904,1043468911,GB
-1043468912,1043468927,NL
-1043468928,1043468935,GB
-1043468936,1043468959,NL
-1043468960,1043468967,GB
-1043468968,1043469023,NL
-1043469024,1043469055,GB
-1043469056,1043469087,NL
-1043469088,1043469151,GB
-1043469152,1043469159,NL
-1043469160,1043469183,GB
-1043469184,1043469199,NL
-1043469200,1043469207,GB
-1043469208,1043469223,NL
-1043469224,1043469231,GB
-1043469232,1043469239,NL
-1043469240,1043469247,GB
-1043469248,1043469359,NL
-1043469360,1043469375,GB
-1043469376,1043469399,NL
-1043469400,1043469439,GB
-1043469440,1043469559,NL
-1043469560,1043469567,GB
-1043469568,1043469843,NL
-1043469844,1043469847,GB
-1043469848,1043469919,NL
-1043469920,1043469939,GB
-1043469940,1043469943,NL
-1043469944,1043470127,GB
+1043398656,1043470127,GB
1043470128,1043470223,NL
-1043470224,1043470271,GB
-1043470272,1043470303,NL
-1043470304,1043470335,GB
-1043470336,1043470847,NL
-1043470848,1043472383,GB
-1043472384,1043472395,DE
-1043472396,1043472399,GB
-1043472400,1043472423,DE
-1043472424,1043472431,GB
-1043472432,1043472443,DE
-1043472444,1043472467,GB
-1043472468,1043472475,DE
-1043472476,1043472487,GB
-1043472488,1043472495,DE
-1043472496,1043472503,GB
-1043472504,1043472743,DE
-1043472744,1043472751,GB
-1043472752,1043472895,DE
-1043472896,1043473151,GB
-1043473152,1043473247,DE
-1043473248,1043473255,GB
-1043473256,1043473411,DE
-1043473412,1043473415,GB
-1043473416,1043473579,DE
-1043473580,1043473583,GB
-1043473584,1043473983,DE
-1043473984,1043474015,GB
-1043474016,1043474031,DE
-1043474032,1043474047,GB
-1043474048,1043474455,DE
-1043474456,1043474463,GB
-1043474464,1043474487,DE
-1043474488,1043474495,GB
-1043474496,1043474499,DE
-1043474500,1043474503,GB
-1043474504,1043474623,DE
-1043474624,1043474687,GB
-1043474688,1043475887,DE
-1043475888,1043475919,GB
-1043475920,1043475983,DE
-1043475984,1043475991,GB
-1043475992,1043476319,DE
-1043476320,1043476351,GB
-1043476352,1043476483,DE
-1043476484,1043476487,GB
-1043476488,1043476543,DE
-1043476544,1043476559,GB
-1043476560,1043476575,DE
-1043476576,1043476607,GB
-1043476608,1043476735,DE
-1043476736,1043476767,GB
-1043476768,1043476815,DE
-1043476816,1043476991,GB
-1043476992,1043477503,DE
-1043477504,1043477759,GB
-1043477760,1043478047,DE
-1043478048,1043478063,GB
-1043478064,1043478179,DE
-1043478180,1043478271,GB
-1043478272,1043478287,DE
-1043478288,1043479295,GB
-1043479296,1043479551,DE
-1043479552,1043480063,GB
-1043480064,1043480343,DE
-1043480344,1043480359,GB
-1043480360,1043480363,DE
-1043480364,1043480575,GB
-1043480576,1043480687,CH
-1043480688,1043480695,GB
-1043480696,1043480831,CH
-1043480832,1043481855,GB
-1043481856,1043481879,CH
-1043481880,1043481895,GB
-1043481896,1043481959,CH
-1043481960,1043481967,GB
-1043481968,1043481999,CH
-1043482000,1043482015,GB
-1043482016,1043482079,CH
-1043482080,1043482623,GB
-1043482624,1043482647,CH
-1043482648,1043482667,GB
-1043482668,1043482671,CH
-1043482672,1043482687,GB
-1043482688,1043482719,CH
-1043482720,1043482735,GB
-1043482736,1043482759,CH
-1043482760,1043482783,GB
-1043482784,1043482791,CH
-1043482792,1043482807,GB
-1043482808,1043482895,CH
-1043482896,1043482919,GB
-1043482920,1043482951,CH
-1043482952,1043482995,GB
-1043482996,1043483039,CH
-1043483040,1043483047,GB
-1043483048,1043483059,CH
-1043483060,1043483063,GB
-1043483064,1043483103,CH
-1043483104,1043483111,GB
-1043483112,1043483231,CH
-1043483232,1043483235,GB
-1043483236,1043483279,CH
-1043483280,1043483295,GB
-1043483296,1043483311,CH
-1043483312,1043483319,GB
-1043483320,1043483327,CH
-1043483328,1043483335,GB
-1043483336,1043483343,CH
-1043483344,1043483359,GB
-1043483360,1043483391,CH
-1043483392,1043483406,GB
+1043470224,1043475871,GB
+1043475872,1043475887,DE
+1043475888,1043476111,GB
+1043476112,1043476127,DE
+1043476128,1043476383,GB
+1043476384,1043476399,DE
+1043476400,1043476431,GB
+1043476432,1043476447,DE
+1043476448,1043483406,GB
1043483407,1043483407,CH
-1043483408,1043483655,GB
-1043483656,1043483679,CH
-1043483680,1043483687,GB
-1043483688,1043483759,CH
-1043483760,1043483775,GB
-1043483776,1043483839,CH
-1043483840,1043483871,GB
-1043483872,1043483911,CH
-1043483912,1043484159,GB
-1043484160,1043484191,CH
-1043484192,1043484199,GB
-1043484200,1043484215,CH
-1043484216,1043484231,GB
-1043484232,1043484351,CH
-1043484352,1043484399,GB
-1043484400,1043484431,CH
-1043484432,1043484463,GB
-1043484464,1043484551,CH
-1043484552,1043484559,GB
-1043484560,1043484575,CH
-1043484576,1043484583,GB
-1043484584,1043484623,CH
-1043484624,1043484631,GB
-1043484632,1043484671,CH
-1043484672,1043484679,GB
-1043484680,1043484751,CH
-1043484752,1043484767,GB
-1043484768,1043484799,CH
-1043484800,1043484927,GB
-1043484928,1043484935,CH
-1043484936,1043484943,GB
-1043484944,1043484959,CH
-1043484960,1043484991,GB
-1043484992,1043485055,CH
-1043485056,1043485191,GB
-1043485192,1043485195,CH
-1043485196,1043485439,GB
-1043485440,1043485567,CH
-1043485568,1043485695,GB
-1043485696,1043486239,CH
-1043486240,1043486463,GB
-1043486464,1043486487,CH
-1043486488,1043486719,GB
-1043486720,1043486723,CH
-1043486724,1043486975,GB
-1043486976,1043487039,CH
-1043487040,1043487055,GB
-1043487056,1043487103,CH
-1043487104,1043487231,GB
-1043487232,1043487443,CH
-1043487444,1043487447,GB
-1043487448,1043487455,CH
-1043487456,1043487487,GB
-1043487488,1043487623,CH
-1043487624,1043487631,GB
-1043487632,1043487679,CH
-1043487680,1043487743,GB
-1043487744,1043487751,CH
-1043487752,1043488767,GB
+1043483408,1043488767,GB
1043488768,1043496959,DE
-1043496960,1043497055,FR
-1043497056,1043497079,GB
-1043497080,1043497215,FR
-1043497216,1043497759,GB
-1043497760,1043497767,FR
-1043497768,1043497857,GB
+1043496960,1043497857,GB
1043497858,1043497858,FR
-1043497859,1043497863,GB
-1043497864,1043497871,FR
-1043497872,1043497903,GB
-1043497904,1043497911,FR
-1043497912,1043497927,GB
-1043497928,1043497935,FR
-1043497936,1043497983,GB
-1043497984,1043498015,FR
-1043498016,1043498023,GB
-1043498024,1043498031,FR
-1043498032,1043498039,GB
-1043498040,1043498071,FR
-1043498072,1043498095,GB
-1043498096,1043498111,FR
-1043498112,1043498151,GB
-1043498152,1043498167,FR
-1043498168,1043498175,GB
-1043498176,1043498183,FR
-1043498184,1043498195,GB
-1043498196,1043498207,FR
-1043498208,1043498223,GB
-1043498224,1043498239,FR
-1043498240,1043498243,GB
-1043498244,1043498247,FR
-1043498248,1043498495,GB
-1043498496,1043498527,FR
-1043498528,1043498543,GB
-1043498544,1043498639,FR
-1043498640,1043498655,GB
-1043498656,1043498671,FR
-1043498672,1043498815,GB
-1043498816,1043498911,FR
-1043498912,1043499267,GB
-1043499268,1043499519,FR
-1043499520,1043505151,GB
+1043497859,1043505151,GB
1043505152,1043513343,NO
1043513344,1043529727,GB
1043529728,1043595263,NL
-1043595264,1043600639,DE
-1043600640,1043600895,FR
-1043600896,1043606255,DE
-1043606256,1043606271,GB
-1043606272,1043607679,DE
-1043607680,1043607711,FR
-1043607712,1043609279,DE
-1043609280,1043609343,AT
-1043609344,1043609463,DE
-1043609464,1043609471,IE
-1043609472,1043619839,DE
-1043619840,1043620095,IE
-1043620096,1043621503,DE
-1043621504,1043621567,GB
-1043621568,1043623215,DE
-1043623216,1043623231,GB
-1043623232,1043633663,DE
-1043633664,1043633919,FR
-1043633920,1043661567,DE
+1043595264,1043661567,DE
1043661568,1043661823,GB
-1043661824,1043693055,DE
-1043693056,1043693127,GB
-1043693128,1043693183,DE
-1043693184,1043693567,GB
-1043693568,1043718783,DE
-1043718784,1043718815,FR
-1043718816,1043719599,DE
-1043719600,1043719615,CH
-1043719616,1043719655,DE
-1043719656,1043719679,CH
-1043719680,1043857407,DE
-1043857408,1043890175,GB
-1043890176,1043890183,A2
-1043890184,1043890191,NG
-1043890192,1043890207,A2
-1043890208,1043890239,NG
-1043890240,1043890495,A2
-1043890496,1043890591,NG
-1043890592,1043891711,A2
-1043891712,1043891775,GQ
-1043891776,1043891839,NG
-1043891840,1043891967,GQ
-1043891968,1043892223,A2
-1043892224,1043892239,MZ
-1043892240,1043892255,A2
-1043892256,1043892287,MZ
-1043892288,1043892479,A2
-1043892480,1043892735,CD
-1043892736,1043892991,MZ
-1043892992,1043893567,A2
-1043893568,1043893583,NG
-1043893584,1043894559,A2
-1043894560,1043894591,LR
-1043894592,1043894751,A2
-1043894752,1043894783,NG
-1043894784,1043894847,LR
-1043894848,1043894879,NG
-1043894880,1043895039,A2
-1043895040,1043895167,NG
-1043895168,1043895983,A2
-1043895984,1043895999,AO
-1043896000,1043896063,A2
-1043896064,1043896319,NG
-1043896320,1043897343,A2
+1043661824,1043857407,DE
+1043857408,1043892735,GB
+1043892736,1043892991,CD
+1043892992,1043897343,GB
1043897344,1043897855,KE
-1043897856,1043898623,A2
-1043898624,1043898751,TZ
-1043898752,1043899391,A2
-1043899392,1043899647,CG
-1043899648,1043899927,A2
-1043899928,1043899935,SO
-1043899936,1043907071,A2
-1043907072,1043907327,NG
-1043907328,1043910495,A2
-1043910496,1043910503,GB
-1043910504,1043912703,A2
-1043912704,1043913215,ZM
-1043913216,1043913471,SS
-1043913472,1043914751,A2
-1043914752,1043914879,NG
-1043914880,1043916799,A2
-1043916800,1043917055,NG
-1043917056,1043919359,A2
-1043919360,1043919871,SD
-1043919872,1043921919,A2
+1043897856,1043919442,GB
+1043919443,1043919443,SS
+1043919444,1043921919,GB
1043921920,1043922943,IL
1043922944,1043988479,ES
-1043988480,1043988551,BE
-1043988552,1043988559,NL
-1043988560,1043988575,BE
-1043988576,1043988607,NL
-1043988608,1043988679,BE
-1043988680,1043988703,NL
-1043988704,1043988719,BE
-1043988720,1043988727,NL
-1043988728,1043988775,BE
-1043988776,1043988799,NL
-1043988800,1043988895,BE
-1043988896,1043988927,NL
-1043988928,1043989119,BE
-1043989120,1043989503,NL
-1043989504,1043989535,BE
-1043989536,1043989543,NL
-1043989544,1043989567,BE
-1043989568,1043989583,NL
-1043989584,1043989591,BE
-1043989592,1043989599,NL
-1043989600,1043989639,BE
-1043989640,1043989655,NL
-1043989656,1043989751,BE
-1043989752,1043990143,NL
-1043990144,1043990303,BE
-1043990304,1043990367,NL
-1043990368,1043990535,BE
-1043990536,1043990543,NL
-1043990544,1043990567,BE
-1043990568,1043990591,NL
-1043990592,1043990615,BE
-1043990616,1043990623,NL
-1043990624,1043990631,BE
-1043990632,1043990783,NL
-1043990784,1043991055,BE
-1043991056,1043991063,NL
-1043991064,1043991103,BE
-1043991104,1043991231,NL
-1043991232,1043992063,BE
-1043992064,1043992319,NL
-1043992320,1043992575,BE
-1043992576,1043992831,NL
-1043992832,1043993599,BE
-1043993600,1043993855,NL
-1043993856,1043994643,BE
-1043994644,1043994651,NL
-1043994652,1043994655,BE
-1043994656,1043994667,NL
-1043994668,1043994671,BE
-1043994672,1043994675,NL
-1043994676,1043994679,BE
-1043994680,1043994699,NL
-1043994700,1043994703,BE
-1043994704,1043994707,NL
-1043994708,1043994711,BE
-1043994712,1043994723,NL
-1043994724,1043994727,BE
-1043994728,1043994747,NL
-1043994748,1043994811,BE
-1043994812,1043994815,NL
-1043994816,1043994851,BE
-1043994852,1043994855,NL
-1043994856,1043994863,BE
-1043994864,1043994867,NL
-1043994868,1043994871,BE
-1043994872,1043994875,NL
-1043994876,1043994879,BE
-1043994880,1043994887,NL
-1043994888,1043994907,BE
-1043994908,1043994911,NL
-1043994912,1043994931,BE
-1043994932,1043994935,NL
-1043994936,1043994975,BE
-1043994976,1043994979,NL
-1043994980,1043994995,BE
-1043994996,1043995003,NL
-1043995004,1043995023,BE
-1043995024,1043995027,NL
-1043995028,1043995047,BE
-1043995048,1043995051,NL
-1043995052,1043995103,BE
-1043995104,1043995111,NL
-1043995112,1043995127,BE
-1043995128,1043995131,NL
-1043995132,1043995135,BE
-1043995136,1043995139,NL
-1043995140,1043995183,BE
-1043995184,1043995187,NL
-1043995188,1043995219,BE
-1043995220,1043995223,NL
-1043995224,1043995279,BE
-1043995280,1043995283,NL
-1043995284,1043995291,BE
-1043995292,1043995295,NL
-1043995296,1043995303,BE
-1043995304,1043995311,NL
-1043995312,1043995663,BE
-1043995664,1043995687,NL
-1043995688,1043995695,BE
-1043995696,1043995703,NL
-1043995704,1043995719,BE
-1043995720,1043995735,NL
-1043995736,1043995767,BE
-1043995768,1043995783,NL
-1043995784,1043995807,BE
-1043995808,1043995831,NL
-1043995832,1043995871,BE
-1043995872,1043995887,NL
-1043995888,1043995919,BE
-1043995920,1043995935,NL
-1043995936,1043995943,BE
-1043995944,1043995951,NL
-1043995952,1043995975,BE
-1043995976,1043995999,NL
-1043996000,1043996015,BE
-1043996016,1043996023,NL
-1043996024,1043996095,BE
-1043996096,1043996103,NL
-1043996104,1043996111,BE
-1043996112,1043996119,NL
-1043996120,1043996143,BE
-1043996144,1043996151,NL
-1043996152,1043996159,BE
-1043996160,1043996287,NL
-1043996288,1043996319,BE
-1043996320,1043996335,NL
-1043996336,1043996415,BE
-1043996416,1043997375,NL
-1043997376,1043997463,BE
-1043997464,1043997471,NL
-1043997472,1043997519,BE
-1043997520,1043997535,NL
-1043997536,1043997559,BE
-1043997560,1043997583,NL
-1043997584,1043997615,BE
-1043997616,1043997631,NL
-1043997632,1043997639,BE
-1043997640,1043997647,NL
-1043997648,1043997655,BE
-1043997656,1043997671,NL
-1043997672,1043997687,BE
-1043997688,1043997807,NL
-1043997808,1043997887,BE
-1043997888,1043997903,NL
-1043997904,1043997919,BE
-1043997920,1043997927,NL
-1043997928,1043998079,BE
-1043998080,1043998103,NL
-1043998104,1043998111,BE
-1043998112,1043998143,NL
-1043998144,1043998151,BE
-1043998152,1043998159,NL
-1043998160,1043998167,BE
-1043998168,1043998191,NL
-1043998192,1043998195,BE
-1043998196,1043998198,NL
-1043998199,1043998199,BE
-1043998200,1043998207,NL
-1043998208,1043998463,BE
-1043998464,1043998719,NL
-1043998720,1043998759,BE
-1043998760,1043998783,NL
-1043998784,1043998799,BE
-1043998800,1043998855,NL
-1043998856,1043998863,BE
-1043998864,1043998879,NL
-1043998880,1043998887,BE
-1043998888,1043998911,NL
-1043998912,1043998975,BE
-1043998976,1043998983,NL
-1043998984,1043999039,BE
-1043999040,1043999055,NL
-1043999056,1043999103,BE
-1043999104,1043999111,NL
-1043999112,1043999119,BE
-1043999120,1043999143,NL
-1043999144,1043999207,BE
-1043999208,1043999215,NL
-1043999216,1043999231,BE
-1043999232,1043999487,NL
-1043999488,1043999751,BE
-1043999752,1043999759,NL
-1043999760,1043999775,BE
-1043999776,1043999783,NL
-1043999784,1043999791,BE
-1043999792,1043999823,NL
-1043999824,1043999831,BE
-1043999832,1043999839,NL
-1043999840,1043999871,BE
-1043999872,1043999951,NL
-1043999952,1044000031,BE
-1044000032,1044000063,NL
-1044000064,1044000095,BE
-1044000096,1044000767,NL
-1044000768,1044000831,BE
-1044000832,1044000895,NL
-1044000896,1044000999,BE
-1044001000,1044001015,NL
-1044001016,1044001271,BE
-1044001272,1044001663,NL
-1044001664,1044001791,BE
-1044001792,1044001823,NL
-1044001824,1044001839,BE
-1044001840,1044001847,NL
-1044001848,1044001895,BE
-1044001896,1044001927,NL
-1044001928,1044001943,BE
-1044001944,1044001951,NL
-1044001952,1044002023,BE
-1044002024,1044002031,NL
-1044002032,1044002063,BE
-1044002064,1044002087,NL
-1044002088,1044002095,BE
-1044002096,1044002103,NL
-1044002104,1044002135,BE
-1044002136,1044002143,NL
-1044002144,1044002303,BE
-1044002304,1044002831,NL
-1044002832,1044002855,BE
-1044002856,1044002859,NL
-1044002860,1044002879,BE
-1044002880,1044002883,NL
-1044002884,1044002891,BE
-1044002892,1044002899,NL
-1044002900,1044002911,BE
-1044002912,1044002919,NL
-1044002920,1044002931,BE
-1044002932,1044002947,NL
-1044002948,1044002959,BE
-1044002960,1044002975,NL
-1044002976,1044002983,BE
-1044002984,1044002987,NL
-1044002988,1044002999,BE
-1044003000,1044003003,NL
-1044003004,1044003019,BE
-1044003020,1044003023,NL
-1044003024,1044003027,BE
-1044003028,1044003031,NL
-1044003032,1044003071,BE
-1044003072,1044003075,NL
-1044003076,1044003099,BE
-1044003100,1044003103,NL
-1044003104,1044003115,BE
-1044003116,1044003119,NL
-1044003120,1044003123,BE
-1044003124,1044003131,NL
-1044003132,1044003147,BE
-1044003148,1044003151,NL
-1044003152,1044003155,BE
-1044003156,1044003159,NL
-1044003160,1044003167,BE
-1044003168,1044003171,NL
-1044003172,1044003183,BE
-1044003184,1044003187,NL
-1044003188,1044003211,BE
-1044003212,1044003215,NL
-1044003216,1044003223,BE
-1044003224,1044003227,NL
-1044003228,1044003235,BE
-1044003236,1044003251,NL
-1044003252,1044003279,BE
-1044003280,1044003283,NL
-1044003284,1044003291,BE
-1044003292,1044003295,NL
-1044003296,1044003299,BE
-1044003300,1044003303,NL
-1044003304,1044003311,BE
-1044003312,1044003315,NL
-1044003316,1044003331,BE
-1044003332,1044003343,NL
-1044003344,1044003359,BE
-1044003360,1044003362,NL
-1044003363,1044003363,BE
-1044003364,1044003371,NL
-1044003372,1044003379,BE
-1044003380,1044003383,NL
-1044003384,1044003423,BE
-1044003424,1044003427,NL
-1044003428,1044003459,BE
-1044003460,1044003463,NL
-1044003464,1044003467,BE
-1044003468,1044003471,NL
-1044003472,1044003483,BE
-1044003484,1044003487,NL
-1044003488,1044003511,BE
-1044003512,1044003527,NL
-1044003528,1044003539,BE
-1044003540,1044003543,NL
-1044003544,1044003551,BE
-1044003552,1044003563,NL
-1044003564,1044003579,BE
-1044003580,1044003591,NL
-1044003592,1044003595,BE
-1044003596,1044003599,NL
-1044003600,1044003619,BE
-1044003620,1044003631,NL
-1044003632,1044003635,BE
-1044003636,1044003639,NL
-1044003640,1044003647,BE
-1044003648,1044003651,NL
-1044003652,1044003655,BE
-1044003656,1044003659,NL
-1044003660,1044003663,BE
-1044003664,1044003667,NL
-1044003668,1044003675,BE
-1044003676,1044003683,NL
-1044003684,1044003687,BE
-1044003688,1044003691,NL
-1044003692,1044003695,BE
-1044003696,1044003699,NL
-1044003700,1044003723,BE
-1044003724,1044003727,NL
-1044003728,1044003731,BE
-1044003732,1044003751,NL
-1044003752,1044003755,BE
-1044003756,1044003775,NL
-1044003776,1044003783,BE
-1044003784,1044003787,NL
-1044003788,1044003807,BE
-1044003808,1044003811,NL
-1044003812,1044003815,BE
-1044003816,1044003819,NL
-1044003820,1044003823,BE
-1044003824,1044003831,NL
-1044003832,1044003855,BE
-1044003856,1044003863,NL
-1044003864,1044003879,BE
-1044003880,1044003895,NL
-1044003896,1044003911,BE
-1044003912,1044003919,NL
-1044003920,1044003927,BE
-1044003928,1044003959,NL
-1044003960,1044003967,BE
-1044003968,1044003975,NL
-1044003976,1044003983,BE
-1044003984,1044003991,NL
-1044003992,1044004031,BE
-1044004032,1044004079,NL
-1044004080,1044004095,BE
-1044004096,1044004303,NL
-1044004304,1044004351,BE
-1044004352,1044004879,NL
-1044004880,1044004903,BE
-1044004904,1044004911,NL
-1044004912,1044004927,BE
-1044004928,1044004991,NL
-1044004992,1044005503,BE
-1044005504,1044005631,NL
-1044005632,1044005639,BE
-1044005640,1044005647,NL
-1044005648,1044005663,BE
-1044005664,1044005671,NL
-1044005672,1044005679,BE
-1044005680,1044005687,NL
-1044005688,1044005695,BE
-1044005696,1044005759,NL
-1044005760,1044005799,BE
-1044005800,1044005807,NL
-1044005808,1044005839,BE
-1044005840,1044005847,NL
-1044005848,1044005887,BE
-1044005888,1044006143,NL
-1044006144,1044006655,BE
-1044006656,1044006927,NL
-1044006928,1044006935,BE
-1044006936,1044006943,NL
-1044006944,1044007007,BE
-1044007008,1044007023,NL
-1044007024,1044007031,BE
-1044007032,1044007039,NL
-1044007040,1044007047,BE
-1044007048,1044007055,NL
-1044007056,1044007071,BE
-1044007072,1044007087,NL
-1044007088,1044007119,BE
-1044007120,1044007127,NL
-1044007128,1044007167,BE
-1044007168,1044007679,NL
-1044007680,1044007935,BE
-1044007936,1044007967,NL
-1044007968,1044007983,BE
-1044007984,1044007991,NL
-1044007992,1044008007,BE
-1044008008,1044008023,NL
-1044008024,1044008031,BE
-1044008032,1044008039,NL
-1044008040,1044008047,BE
-1044008048,1044008063,NL
-1044008064,1044008095,BE
-1044008096,1044008127,NL
-1044008128,1044008183,BE
-1044008184,1044008223,NL
-1044008224,1044008239,BE
-1044008240,1044008255,NL
-1044008256,1044008279,BE
-1044008280,1044008287,NL
-1044008288,1044008319,BE
-1044008320,1044008735,NL
-1044008736,1044009055,BE
-1044009056,1044009087,NL
-1044009088,1044009183,BE
-1044009184,1044009199,NL
-1044009200,1044009215,BE
-1044009216,1044009455,NL
-1044009456,1044009487,BE
-1044009488,1044009503,NL
-1044009504,1044009535,BE
-1044009536,1044009583,NL
-1044009584,1044009599,BE
-1044009600,1044009983,NL
-1044009984,1044011007,BE
-1044011008,1044011019,NL
-1044011020,1044011023,BE
-1044011024,1044011039,NL
-1044011040,1044011043,BE
-1044011044,1044011055,NL
-1044011056,1044011059,BE
-1044011060,1044011223,NL
-1044011224,1044011227,BE
-1044011228,1044011367,NL
-1044011368,1044011371,BE
-1044011372,1044011427,NL
-1044011428,1044011431,BE
-1044011432,1044011455,NL
-1044011456,1044011459,BE
-1044011460,1044011471,NL
-1044011472,1044011475,BE
-1044011476,1044011535,NL
-1044011536,1044011543,BE
-1044011544,1044011635,NL
-1044011636,1044011639,BE
-1044011640,1044011703,NL
-1044011704,1044011707,BE
-1044011708,1044011731,NL
-1044011732,1044011735,BE
-1044011736,1044011763,NL
-1044011764,1044011767,BE
-1044011768,1044011771,NL
-1044011772,1044011775,BE
-1044011776,1044011791,NL
-1044011792,1044011795,BE
-1044011796,1044011827,NL
-1044011828,1044011831,BE
-1044011832,1044011943,NL
-1044011944,1044011947,BE
-1044011948,1044011971,NL
-1044011972,1044012031,BE
-1044012032,1044013055,NL
-1044013056,1044013111,BE
-1044013112,1044013119,NL
-1044013120,1044013135,BE
-1044013136,1044013143,NL
-1044013144,1044013247,BE
-1044013248,1044013263,NL
-1044013264,1044013271,BE
-1044013272,1044013279,NL
-1044013280,1044013375,BE
-1044013376,1044013439,NL
-1044013440,1044014111,BE
-1044014112,1044014119,NL
-1044014120,1044017919,BE
-1044017920,1044017983,NL
-1044017984,1044018039,BE
-1044018040,1044018047,NL
-1044018048,1044019279,BE
-1044019280,1044019283,NL
-1044019284,1044019291,BE
-1044019292,1044019295,NL
-1044019296,1044019315,BE
-1044019316,1044019323,NL
-1044019324,1044019347,BE
-1044019348,1044019351,NL
-1044019352,1044019383,BE
-1044019384,1044019399,NL
-1044019400,1044019403,BE
-1044019404,1044019407,NL
-1044019408,1044019415,BE
-1044019416,1044019439,NL
-1044019440,1044019443,BE
-1044019444,1044019471,NL
-1044019472,1044019491,BE
-1044019492,1044019495,NL
-1044019496,1044019503,BE
-1044019504,1044019507,NL
-1044019508,1044019695,BE
-1044019696,1044019699,NL
-1044019700,1044019819,BE
-1044019820,1044019823,NL
-1044019824,1044019995,BE
-1044019996,1044019999,NL
-1044020000,1044020147,BE
-1044020148,1044020151,NL
-1044020152,1044020215,BE
-1044020216,1044020219,NL
-1044020220,1044020255,BE
-1044020256,1044020263,NL
-1044020264,1044020303,BE
-1044020304,1044020319,NL
-1044020320,1044020511,BE
-1044020512,1044020551,NL
-1044020552,1044020567,BE
-1044020568,1044020591,NL
-1044020592,1044020607,BE
-1044020608,1044020671,NL
-1044020672,1044020735,BE
-1044020736,1044021759,NL
-1044021760,1044021887,BE
-1044021888,1044022319,NL
-1044022320,1044022335,BE
-1044022336,1044022351,NL
-1044022352,1044022415,BE
-1044022416,1044022783,NL
-1044022784,1044023039,BE
-1044023040,1044023295,NL
-1044023296,1044023351,BE
-1044023352,1044023359,NL
-1044023360,1044023407,BE
-1044023408,1044023439,NL
-1044023440,1044024319,BE
-1044024320,1044024447,NL
-1044024448,1044024575,BE
-1044024576,1044024835,NL
-1044024836,1044024843,BE
-1044024844,1044024847,NL
-1044024848,1044024851,BE
-1044024852,1044024855,NL
-1044024856,1044024863,BE
-1044024864,1044024867,NL
-1044024868,1044024879,BE
-1044024880,1044024883,NL
-1044024884,1044024887,BE
-1044024888,1044024891,NL
-1044024892,1044024959,BE
-1044024960,1044025351,NL
-1044025352,1044025599,BE
-1044025600,1044025855,NL
-1044025856,1044025863,BE
-1044025864,1044025871,NL
-1044025872,1044025879,BE
-1044025880,1044025927,NL
-1044025928,1044025935,BE
-1044025936,1044025967,NL
-1044025968,1044025983,BE
-1044025984,1044025999,NL
-1044026000,1044026007,BE
-1044026008,1044026023,NL
-1044026024,1044026031,BE
-1044026032,1044026047,NL
-1044026048,1044026055,BE
-1044026056,1044026079,NL
-1044026080,1044026095,BE
-1044026096,1044026111,NL
-1044026112,1044026119,BE
-1044026120,1044026143,NL
-1044026144,1044026159,BE
-1044026160,1044026167,NL
-1044026168,1044026175,BE
-1044026176,1044026183,NL
-1044026184,1044026199,BE
-1044026200,1044026207,NL
-1044026208,1044026215,BE
-1044026216,1044026247,NL
-1044026248,1044026255,BE
-1044026256,1044026263,NL
-1044026264,1044026279,BE
-1044026280,1044026327,NL
-1044026328,1044026343,BE
-1044026344,1044026383,NL
-1044026384,1044026391,BE
-1044026392,1044026399,NL
-1044026400,1044026407,BE
-1044026408,1044026415,NL
-1044026416,1044026431,BE
-1044026432,1044026447,NL
-1044026448,1044026455,BE
-1044026456,1044026479,NL
-1044026480,1044026487,BE
-1044026488,1044026519,NL
-1044026520,1044026535,BE
-1044026536,1044026607,NL
-1044026608,1044026615,BE
-1044026616,1044026631,NL
-1044026632,1044026639,BE
-1044026640,1044026647,NL
-1044026648,1044026655,BE
-1044026656,1044026663,NL
-1044026664,1044026671,BE
-1044026672,1044026679,NL
-1044026680,1044026687,BE
-1044026688,1044026695,NL
-1044026696,1044026703,BE
-1044026704,1044026727,NL
-1044026728,1044026767,BE
-1044026768,1044026791,NL
-1044026792,1044026799,BE
-1044026800,1044026815,NL
-1044026816,1044026839,BE
-1044026840,1044026855,NL
-1044026856,1044026863,BE
-1044026864,1044026895,NL
-1044026896,1044027263,BE
-1044027264,1044027407,NL
-1044027408,1044027415,BE
-1044027416,1044027423,NL
-1044027424,1044027431,BE
-1044027432,1044027447,NL
-1044027448,1044027455,BE
-1044027456,1044027471,NL
-1044027472,1044027487,BE
-1044027488,1044027519,NL
-1044027520,1044027527,BE
-1044027528,1044027535,NL
-1044027536,1044027575,BE
-1044027576,1044027583,NL
-1044027584,1044027591,BE
-1044027592,1044027639,NL
-1044027640,1044027647,BE
-1044027648,1044027655,NL
-1044027656,1044027671,BE
-1044027672,1044027687,NL
-1044027688,1044027711,BE
-1044027712,1044027727,NL
-1044027728,1044027775,BE
-1044027776,1044027839,NL
-1044027840,1044027903,BE
-1044027904,1044028159,NL
-1044028160,1044028543,BE
-1044028544,1044028559,NL
-1044028560,1044028799,BE
-1044028800,1044028927,NL
-1044028928,1044028939,BE
-1044028940,1044028943,NL
-1044028944,1044028955,BE
-1044028956,1044028959,NL
-1044028960,1044029011,BE
-1044029012,1044029015,NL
-1044029016,1044029019,BE
-1044029020,1044029023,NL
-1044029024,1044029027,BE
-1044029028,1044029031,NL
-1044029032,1044029039,BE
-1044029040,1044029043,NL
-1044029044,1044029311,BE
-1044029312,1044029441,NL
-1044029442,1044029442,BE
-1044029443,1044029445,NL
-1044029446,1044029448,BE
-1044029449,1044029451,NL
-1044029452,1044029452,BE
-1044029453,1044029453,NL
-1044029454,1044029455,BE
-1044029456,1044029463,NL
-1044029464,1044029466,BE
-1044029467,1044029467,NL
-1044029468,1044029470,BE
-1044029471,1044029479,NL
-1044029480,1044029483,BE
-1044029484,1044029485,NL
-1044029486,1044029487,BE
-1044029488,1044029488,NL
-1044029489,1044029489,BE
-1044029490,1044029492,NL
-1044029493,1044029493,BE
-1044029494,1044029494,NL
-1044029495,1044029497,BE
-1044029498,1044029498,NL
-1044029499,1044029501,BE
-1044029502,1044029502,NL
-1044029503,1044029505,BE
-1044029506,1044029509,NL
-1044029510,1044029510,BE
-1044029511,1044029511,NL
-1044029512,1044029535,BE
-1044029536,1044029536,NL
-1044029537,1044029537,BE
-1044029538,1044029538,NL
-1044029539,1044029545,BE
-1044029546,1044029546,NL
-1044029547,1044029548,BE
-1044029549,1044029549,NL
-1044029550,1044029552,BE
-1044029553,1044029553,NL
-1044029554,1044029554,BE
-1044029555,1044029556,NL
-1044029557,1044029557,BE
-1044029558,1044029558,NL
-1044029559,1044029561,BE
-1044029562,1044029567,NL
-1044029568,1044029568,BE
-1044029569,1044029569,NL
-1044029570,1044029572,BE
-1044029573,1044029575,NL
-1044029576,1044029580,BE
-1044029581,1044029581,NL
-1044029582,1044029584,BE
-1044029585,1044029585,NL
-1044029586,1044029586,BE
-1044029587,1044029587,NL
-1044029588,1044029590,BE
-1044029591,1044029595,NL
-1044029596,1044029596,BE
-1044029597,1044029598,NL
-1044029599,1044029599,BE
-1044029600,1044029600,NL
-1044029601,1044029601,BE
-1044029602,1044029603,NL
-1044029604,1044029606,BE
-1044029607,1044029608,NL
-1044029609,1044029609,BE
-1044029610,1044029610,NL
-1044029611,1044029611,BE
-1044029612,1044029612,NL
-1044029613,1044029616,BE
-1044029617,1044029618,NL
-1044029619,1044029620,BE
-1044029621,1044029622,NL
-1044029623,1044029625,BE
-1044029626,1044029628,NL
-1044029629,1044029630,BE
-1044029631,1044029631,NL
-1044029632,1044029634,BE
-1044029635,1044029635,NL
-1044029636,1044029636,BE
-1044029637,1044029638,NL
-1044029639,1044029640,BE
-1044029641,1044029641,NL
-1044029642,1044029642,BE
-1044029643,1044029647,NL
-1044029648,1044029648,BE
-1044029649,1044029651,NL
-1044029652,1044029652,BE
-1044029653,1044029659,NL
-1044029660,1044029660,BE
-1044029661,1044029663,NL
-1044029664,1044029665,BE
-1044029666,1044029667,NL
-1044029668,1044029668,BE
-1044029669,1044029669,NL
-1044029670,1044029672,BE
-1044029673,1044029676,NL
-1044029677,1044029678,BE
-1044029679,1044029680,NL
-1044029681,1044029681,BE
-1044029682,1044029682,NL
-1044029683,1044029684,BE
-1044029685,1044029686,NL
-1044029687,1044029687,BE
-1044029688,1044029693,NL
-1044029694,1044029694,BE
-1044029695,1044029695,NL
-1044029696,1044029711,BE
-1044029712,1044029719,NL
-1044029720,1044029727,BE
-1044029728,1044029743,NL
-1044029744,1044029767,BE
-1044029768,1044029775,NL
-1044029776,1044029783,BE
-1044029784,1044029823,NL
-1044029824,1044029839,BE
-1044029840,1044029871,NL
-1044029872,1044029879,BE
-1044029880,1044029887,NL
-1044029888,1044029919,BE
-1044029920,1044029951,NL
-1044029952,1044029959,BE
-1044029960,1044029967,NL
-1044029968,1044029983,BE
-1044029984,1044030015,NL
-1044030016,1044030031,BE
-1044030032,1044030047,NL
-1044030048,1044030055,BE
-1044030056,1044030063,NL
-1044030064,1044030071,BE
-1044030072,1044030111,NL
-1044030112,1044030119,BE
-1044030120,1044030127,NL
-1044030128,1044030135,BE
-1044030136,1044030191,NL
-1044030192,1044030223,BE
-1044030224,1044030231,NL
-1044030232,1044030239,BE
-1044030240,1044030247,NL
-1044030248,1044030263,BE
-1044030264,1044030279,NL
-1044030280,1044030295,BE
-1044030296,1044030303,NL
-1044030304,1044030311,BE
-1044030312,1044030335,NL
-1044030336,1044030343,BE
-1044030344,1044030351,NL
-1044030352,1044030359,BE
-1044030360,1044030375,NL
-1044030376,1044030391,BE
-1044030392,1044030399,NL
-1044030400,1044030415,BE
-1044030416,1044030439,NL
-1044030440,1044030447,BE
-1044030448,1044030463,NL
-1044030464,1044030471,BE
-1044030472,1044030487,NL
-1044030488,1044030495,BE
-1044030496,1044030527,NL
-1044030528,1044030535,BE
-1044030536,1044030543,NL
-1044030544,1044030551,BE
-1044030552,1044030583,NL
-1044030584,1044030591,BE
-1044030592,1044030607,NL
-1044030608,1044030623,BE
-1044030624,1044030639,NL
-1044030640,1044030655,BE
-1044030656,1044030671,NL
-1044030672,1044030687,BE
-1044030688,1044030703,NL
-1044030704,1044030735,BE
-1044030736,1044030759,NL
-1044030760,1044030775,BE
-1044030776,1044030799,NL
-1044030800,1044030807,BE
-1044030808,1044030815,NL
-1044030816,1044030823,BE
-1044030824,1044030831,NL
-1044030832,1044030847,BE
-1044030848,1044030879,NL
-1044030880,1044030887,BE
-1044030888,1044030895,NL
-1044030896,1044030903,BE
-1044030904,1044030911,NL
-1044030912,1044030919,BE
-1044030920,1044030927,NL
-1044030928,1044030935,BE
-1044030936,1044030959,NL
-1044030960,1044030967,BE
-1044030968,1044030975,NL
-1044030976,1044030991,BE
-1044030992,1044030999,NL
-1044031000,1044031007,BE
-1044031008,1044031039,NL
-1044031040,1044031103,BE
-1044031104,1044031119,NL
-1044031120,1044031127,BE
-1044031128,1044031151,NL
-1044031152,1044031167,BE
-1044031168,1044031271,NL
-1044031272,1044031295,BE
-1044031296,1044031319,NL
-1044031320,1044031335,BE
-1044031336,1044031343,NL
-1044031344,1044031351,BE
-1044031352,1044031359,NL
-1044031360,1044031360,BE
-1044031361,1044031363,NL
-1044031364,1044031364,BE
-1044031365,1044031367,NL
-1044031368,1044031375,BE
-1044031376,1044031399,NL
-1044031400,1044031431,BE
-1044031432,1044031439,NL
-1044031440,1044031455,BE
-1044031456,1044031479,NL
-1044031480,1044031487,BE
-1044031488,1044031489,NL
-1044031490,1044031490,BE
-1044031491,1044031494,NL
-1044031495,1044031495,BE
-1044031496,1044031496,NL
-1044031497,1044031497,BE
-1044031498,1044031507,NL
-1044031508,1044031508,BE
-1044031509,1044031509,NL
-1044031510,1044031510,BE
-1044031511,1044031519,NL
-1044031520,1044031520,BE
-1044031521,1044031523,NL
-1044031524,1044031524,BE
-1044031525,1044031531,NL
-1044031532,1044031532,BE
-1044031533,1044031533,NL
-1044031534,1044031536,BE
-1044031537,1044031550,NL
-1044031551,1044031551,BE
-1044031552,1044031552,NL
-1044031553,1044031553,BE
-1044031554,1044031556,NL
-1044031557,1044031557,BE
-1044031558,1044031558,NL
-1044031559,1044031559,BE
-1044031560,1044031562,NL
-1044031563,1044031563,BE
-1044031564,1044031566,NL
-1044031567,1044031567,BE
-1044031568,1044031568,NL
-1044031569,1044031569,BE
-1044031570,1044031571,NL
-1044031572,1044031572,BE
-1044031573,1044031573,NL
-1044031574,1044031574,BE
-1044031575,1044031579,NL
-1044031580,1044031581,BE
-1044031582,1044031582,NL
-1044031583,1044031584,BE
-1044031585,1044031592,NL
-1044031593,1044031593,BE
-1044031594,1044031597,NL
-1044031598,1044031598,BE
-1044031599,1044031599,NL
-1044031600,1044031600,BE
-1044031601,1044031627,NL
-1044031628,1044031628,BE
-1044031629,1044031629,NL
-1044031630,1044031630,BE
-1044031631,1044031635,NL
-1044031636,1044031636,BE
-1044031637,1044031640,NL
-1044031641,1044031641,BE
-1044031642,1044031643,NL
-1044031644,1044031644,BE
-1044031645,1044031651,NL
-1044031652,1044031652,BE
-1044031653,1044031654,NL
-1044031655,1044031655,BE
-1044031656,1044031656,NL
-1044031657,1044031658,BE
-1044031659,1044031666,NL
-1044031667,1044031667,BE
-1044031668,1044031668,NL
-1044031669,1044031670,BE
-1044031671,1044031673,NL
-1044031674,1044031674,BE
-1044031675,1044031675,NL
-1044031676,1044031677,BE
-1044031678,1044031683,NL
-1044031684,1044031684,BE
-1044031685,1044031687,NL
-1044031688,1044031688,BE
-1044031689,1044031690,NL
-1044031691,1044031692,BE
-1044031693,1044031698,NL
-1044031699,1044031699,BE
-1044031700,1044031702,NL
-1044031703,1044031704,BE
-1044031705,1044031709,NL
-1044031710,1044031710,BE
-1044031711,1044031711,NL
-1044031712,1044031712,BE
-1044031713,1044031714,NL
-1044031715,1044031715,BE
-1044031716,1044031717,NL
-1044031718,1044031719,BE
-1044031720,1044031721,NL
-1044031722,1044031723,BE
-1044031724,1044031726,NL
-1044031727,1044031727,BE
-1044031728,1044031751,NL
-1044031752,1044031759,BE
-1044031760,1044031799,NL
-1044031800,1044031807,BE
-1044031808,1044031815,NL
-1044031816,1044031871,BE
-1044031872,1044031879,NL
-1044031880,1044031895,BE
-1044031896,1044031927,NL
-1044031928,1044031943,BE
-1044031944,1044031951,NL
-1044031952,1044031991,BE
-1044031992,1044031999,NL
-1044032000,1044032031,BE
-1044032032,1044032047,NL
-1044032048,1044032055,BE
-1044032056,1044032071,NL
-1044032072,1044032079,BE
-1044032080,1044032103,NL
-1044032104,1044032127,BE
-1044032128,1044032143,NL
-1044032144,1044032167,BE
-1044032168,1044032175,NL
-1044032176,1044032183,BE
-1044032184,1044032191,NL
-1044032192,1044032199,BE
-1044032200,1044032223,NL
-1044032224,1044032239,BE
-1044032240,1044032263,NL
-1044032264,1044032287,BE
-1044032288,1044032303,NL
-1044032304,1044032327,BE
-1044032328,1044032375,NL
-1044032376,1044032407,BE
-1044032408,1044032471,NL
-1044032472,1044032479,BE
-1044032480,1044032527,NL
-1044032528,1044032559,BE
-1044032560,1044032583,NL
-1044032584,1044032615,BE
-1044032616,1044032639,NL
-1044032640,1044032647,BE
-1044032648,1044032655,NL
-1044032656,1044032663,BE
-1044032664,1044032695,NL
-1044032696,1044032703,BE
-1044032704,1044032719,NL
-1044032720,1044032727,BE
-1044032728,1044032735,NL
-1044032736,1044032743,BE
-1044032744,1044032775,NL
-1044032776,1044032783,BE
-1044032784,1044032791,NL
-1044032792,1044032799,BE
-1044032800,1044032815,NL
-1044032816,1044032831,BE
-1044032832,1044032855,NL
-1044032856,1044032863,BE
-1044032864,1044032887,NL
-1044032888,1044032903,BE
-1044032904,1044032927,NL
-1044032928,1044032935,BE
-1044032936,1044032943,NL
-1044032944,1044032959,BE
-1044032960,1044032967,NL
-1044032968,1044032975,BE
-1044032976,1044032991,NL
-1044032992,1044032999,BE
-1044033000,1044033031,NL
-1044033032,1044033055,BE
-1044033056,1044033071,NL
-1044033072,1044033079,BE
-1044033080,1044033087,NL
-1044033088,1044033095,BE
-1044033096,1044033111,NL
-1044033112,1044033119,BE
-1044033120,1044033135,NL
-1044033136,1044033159,BE
-1044033160,1044033207,NL
-1044033208,1044033215,BE
-1044033216,1044033223,NL
-1044033224,1044033231,BE
-1044033232,1044033335,NL
-1044033336,1044033343,BE
-1044033344,1044033351,NL
-1044033352,1044033359,BE
-1044033360,1044033375,NL
-1044033376,1044033407,BE
-1044033408,1044033431,NL
-1044033432,1044033447,BE
-1044033448,1044033527,NL
-1044033528,1044033535,BE
-1044033536,1044033543,NL
-1044033544,1044033551,BE
-1044033552,1044033575,NL
-1044033576,1044033583,BE
-1044033584,1044033623,NL
-1044033624,1044033631,BE
-1044033632,1044033655,NL
-1044033656,1044033663,BE
-1044033664,1044033671,NL
-1044033672,1044033687,BE
-1044033688,1044033719,NL
-1044033720,1044033727,BE
-1044033728,1044033847,NL
-1044033848,1044033855,BE
-1044033856,1044033895,NL
-1044033896,1044033903,BE
-1044033904,1044033927,NL
-1044033928,1044033935,BE
-1044033936,1044033991,NL
-1044033992,1044033999,BE
-1044034000,1044034015,NL
-1044034016,1044034023,BE
-1044034024,1044034031,NL
-1044034032,1044034039,BE
-1044034040,1044034055,NL
-1044034056,1044034063,BE
-1044034064,1044034095,NL
-1044034096,1044034119,BE
-1044034120,1044034127,NL
-1044034128,1044034143,BE
-1044034144,1044034207,NL
-1044034208,1044034215,BE
-1044034216,1044034231,NL
-1044034232,1044034247,BE
-1044034248,1044034263,NL
-1044034264,1044034271,BE
-1044034272,1044034279,NL
-1044034280,1044034295,BE
-1044034296,1044034303,NL
-1044034304,1044034311,BE
-1044034312,1044034327,NL
-1044034328,1044034335,BE
-1044034336,1044034375,NL
-1044034376,1044034383,BE
-1044034384,1044034487,NL
-1044034488,1044034495,BE
-1044034496,1044034511,NL
-1044034512,1044034519,BE
-1044034520,1044034615,NL
-1044034616,1044034623,BE
-1044034624,1044034663,NL
-1044034664,1044034671,BE
-1044034672,1044034735,NL
-1044034736,1044034743,BE
-1044034744,1044034751,NL
-1044034752,1044034759,BE
-1044034760,1044034783,NL
-1044034784,1044034791,BE
-1044034792,1044034847,NL
-1044034848,1044034855,BE
-1044034856,1044034919,NL
-1044034920,1044034927,BE
-1044034928,1044034975,NL
-1044034976,1044034983,BE
-1044034984,1044034999,NL
-1044035000,1044035007,BE
-1044035008,1044035031,NL
-1044035032,1044035039,BE
-1044035040,1044035047,NL
-1044035048,1044035055,BE
-1044035056,1044035063,NL
-1044035064,1044035071,BE
-1044035072,1044035087,NL
-1044035088,1044035095,BE
-1044035096,1044035143,NL
-1044035144,1044035151,BE
-1044035152,1044035191,NL
-1044035192,1044035199,BE
-1044035200,1044035223,NL
-1044035224,1044035231,BE
-1044035232,1044035255,NL
-1044035256,1044035263,BE
-1044035264,1044035287,NL
-1044035288,1044035311,BE
-1044035312,1044035327,NL
-1044035328,1044035351,BE
-1044035352,1044035367,NL
-1044035368,1044035375,BE
-1044035376,1044035407,NL
-1044035408,1044035423,BE
-1044035424,1044035447,NL
-1044035448,1044035471,BE
-1044035472,1044035479,NL
-1044035480,1044035487,BE
-1044035488,1044035495,NL
-1044035496,1044035503,BE
-1044035504,1044035511,NL
-1044035512,1044035527,BE
-1044035528,1044035535,NL
-1044035536,1044035543,BE
-1044035544,1044035559,NL
-1044035560,1044035591,BE
-1044035592,1044035607,NL
-1044035608,1044035623,BE
-1044035624,1044035655,NL
-1044035656,1044035663,BE
-1044035664,1044035671,NL
-1044035672,1044035679,BE
-1044035680,1044035711,NL
-1044035712,1044035727,BE
-1044035728,1044035751,NL
-1044035752,1044035759,BE
-1044035760,1044035791,NL
-1044035792,1044035807,BE
-1044035808,1044035831,NL
-1044035832,1044035839,BE
-1044035840,1044035847,NL
-1044035848,1044035871,BE
-1044035872,1044035887,NL
-1044035888,1044035895,BE
-1044035896,1044035903,NL
-1044035904,1044035919,BE
-1044035920,1044035935,NL
-1044035936,1044035967,BE
-1044035968,1044035975,NL
-1044035976,1044035991,BE
-1044035992,1044035999,NL
-1044036000,1044036007,BE
-1044036008,1044036039,NL
-1044036040,1044036047,BE
-1044036048,1044036079,NL
-1044036080,1044036087,BE
-1044036088,1044036095,NL
-1044036096,1044036103,BE
-1044036104,1044036111,NL
-1044036112,1044036119,BE
-1044036120,1044036127,NL
-1044036128,1044036135,BE
-1044036136,1044036143,NL
-1044036144,1044036159,BE
-1044036160,1044036167,NL
-1044036168,1044036199,BE
-1044036200,1044036223,NL
-1044036224,1044036247,BE
-1044036248,1044036255,NL
-1044036256,1044036271,BE
-1044036272,1044036295,NL
-1044036296,1044036311,BE
-1044036312,1044036327,NL
-1044036328,1044036335,BE
-1044036336,1044036399,NL
-1044036400,1044036407,BE
-1044036408,1044036415,NL
-1044036416,1044036423,BE
-1044036424,1044036439,NL
-1044036440,1044036447,BE
-1044036448,1044036471,NL
-1044036472,1044036479,BE
-1044036480,1044036503,NL
-1044036504,1044036511,BE
-1044036512,1044036527,NL
-1044036528,1044036543,BE
-1044036544,1044036559,NL
-1044036560,1044036567,BE
-1044036568,1044036575,NL
-1044036576,1044036623,BE
-1044036624,1044036647,NL
-1044036648,1044036655,BE
-1044036656,1044036671,NL
-1044036672,1044036687,BE
-1044036688,1044036735,NL
-1044036736,1044036743,BE
-1044036744,1044036759,NL
-1044036760,1044036767,BE
-1044036768,1044036775,NL
-1044036776,1044036783,BE
-1044036784,1044036791,NL
-1044036792,1044036799,BE
-1044036800,1044036807,NL
-1044036808,1044036815,BE
-1044036816,1044036831,NL
-1044036832,1044036839,BE
-1044036840,1044036863,NL
-1044036864,1044036864,BE
-1044036865,1044036865,NL
-1044036866,1044036866,BE
-1044036867,1044036890,NL
-1044036891,1044036891,BE
-1044036892,1044036899,NL
-1044036900,1044036900,BE
-1044036901,1044036907,NL
-1044036908,1044036908,BE
-1044036909,1044036909,NL
-1044036910,1044036910,BE
-1044036911,1044036927,NL
-1044036928,1044036928,BE
-1044036929,1044036942,NL
-1044036943,1044036943,BE
-1044036944,1044036948,NL
-1044036949,1044036951,BE
-1044036952,1044036957,NL
-1044036958,1044036958,BE
-1044036959,1044036967,NL
-1044036968,1044036968,BE
-1044036969,1044036970,NL
-1044036971,1044036971,BE
-1044036972,1044036976,NL
-1044036977,1044036977,BE
-1044036978,1044036984,NL
-1044036985,1044036985,BE
-1044036986,1044036990,NL
-1044036991,1044036991,BE
-1044036992,1044037007,NL
-1044037008,1044037010,BE
-1044037011,1044037014,NL
-1044037015,1044037015,BE
-1044037016,1044037021,NL
-1044037022,1044037022,BE
-1044037023,1044037023,NL
-1044037024,1044037025,BE
-1044037026,1044037026,NL
-1044037027,1044037027,BE
-1044037028,1044037037,NL
-1044037038,1044037038,BE
-1044037039,1044037042,NL
-1044037043,1044037043,BE
-1044037044,1044037047,NL
-1044037048,1044037048,BE
-1044037049,1044037049,NL
-1044037050,1044037051,BE
-1044037052,1044037056,NL
-1044037057,1044037057,BE
-1044037058,1044037061,NL
-1044037062,1044037063,BE
-1044037064,1044037065,NL
-1044037066,1044037066,BE
-1044037067,1044037070,NL
-1044037071,1044037071,BE
-1044037072,1044037074,NL
-1044037075,1044037075,BE
-1044037076,1044037091,NL
-1044037092,1044037092,BE
-1044037093,1044037098,NL
-1044037099,1044037100,BE
-1044037101,1044037101,NL
-1044037102,1044037102,BE
-1044037103,1044037106,NL
-1044037107,1044037107,BE
-1044037108,1044037109,NL
-1044037110,1044037110,BE
-1044037111,1044037143,NL
-1044037144,1044037151,BE
-1044037152,1044037159,NL
-1044037160,1044037167,BE
-1044037168,1044037191,NL
-1044037192,1044037223,BE
-1044037224,1044037271,NL
-1044037272,1044037279,BE
-1044037280,1044037287,NL
-1044037288,1044037295,BE
-1044037296,1044037319,NL
-1044037320,1044037327,BE
-1044037328,1044037375,NL
-1044037376,1044037631,BE
-1044037632,1044038143,NL
-1044038144,1044038527,BE
-1044038528,1044038535,NL
-1044038536,1044038543,BE
-1044038544,1044038559,NL
-1044038560,1044038567,BE
-1044038568,1044038575,NL
-1044038576,1044038583,BE
-1044038584,1044038591,NL
-1044038592,1044038599,BE
-1044038600,1044038607,NL
-1044038608,1044038623,BE
-1044038624,1044038639,NL
-1044038640,1044038647,BE
-1044038648,1044038671,NL
-1044038672,1044038679,BE
-1044038680,1044038687,NL
-1044038688,1044038703,BE
-1044038704,1044038783,NL
-1044038784,1044038911,BE
-1044038912,1044038919,NL
-1044038920,1044038927,BE
-1044038928,1044038935,NL
-1044038936,1044038943,BE
-1044038944,1044039295,NL
-1044039296,1044039303,BE
-1044039304,1044039311,NL
-1044039312,1044039359,BE
-1044039360,1044039951,NL
-1044039952,1044039959,BE
-1044039960,1044039967,NL
-1044039968,1044040015,BE
-1044040016,1044040063,NL
-1044040064,1044040111,BE
-1044040112,1044040143,NL
-1044040144,1044040159,BE
-1044040160,1044040191,NL
-1044040192,1044040223,BE
-1044040224,1044040231,NL
-1044040232,1044040239,BE
-1044040240,1044040255,NL
-1044040256,1044040703,BE
-1044040704,1044041727,NL
-1044041728,1044043775,BE
-1044043776,1044043783,NL
-1044043784,1044043787,BE
-1044043788,1044043791,NL
-1044043792,1044043795,BE
-1044043796,1044043799,NL
-1044043800,1044043803,BE
-1044043804,1044043807,NL
-1044043808,1044043811,BE
-1044043812,1044043823,NL
-1044043824,1044043827,BE
-1044043828,1044043835,NL
-1044043836,1044043847,BE
-1044043848,1044043851,NL
-1044043852,1044043879,BE
-1044043880,1044043883,NL
-1044043884,1044043895,BE
-1044043896,1044043903,NL
-1044043904,1044043907,BE
-1044043908,1044043919,NL
-1044043920,1044043927,BE
-1044043928,1044043931,NL
-1044043932,1044043935,BE
-1044043936,1044043943,NL
-1044043944,1044043955,BE
-1044043956,1044043971,NL
-1044043972,1044043975,BE
-1044043976,1044043987,NL
-1044043988,1044043999,BE
-1044044000,1044044003,NL
-1044044004,1044044007,BE
-1044044008,1044044011,NL
-1044044012,1044044015,BE
-1044044016,1044044019,NL
-1044044020,1044044027,BE
-1044044028,1044044035,NL
-1044044036,1044044043,BE
-1044044044,1044044051,NL
-1044044052,1044044055,BE
-1044044056,1044044059,NL
-1044044060,1044044071,BE
-1044044072,1044044083,NL
-1044044084,1044044099,BE
-1044044100,1044044119,NL
-1044044120,1044044131,BE
-1044044132,1044044135,NL
-1044044136,1044044143,BE
-1044044144,1044044163,NL
-1044044164,1044044167,BE
-1044044168,1044044171,NL
-1044044172,1044044187,BE
-1044044188,1044044215,NL
-1044044216,1044044227,BE
-1044044228,1044044243,NL
-1044044244,1044044247,BE
-1044044248,1044044251,NL
-1044044252,1044045311,BE
-1044045312,1044045695,NL
-1044045696,1044045911,BE
-1044045912,1044045919,NL
-1044045920,1044046079,BE
-1044046080,1044046223,NL
-1044046224,1044046231,BE
-1044046232,1044046239,NL
-1044046240,1044046319,BE
-1044046320,1044046327,NL
-1044046328,1044051987,BE
-1044051988,1044051991,NL
-1044051992,1044052011,BE
-1044052012,1044052015,NL
-1044052016,1044052031,BE
-1044052032,1044052039,NL
-1044052040,1044052063,BE
-1044052064,1044052067,NL
-1044052068,1044052107,BE
-1044052108,1044052111,NL
-1044052112,1044052131,BE
-1044052132,1044052135,NL
-1044052136,1044052223,BE
-1044052224,1044052227,NL
-1044052228,1044052255,BE
-1044052256,1044052259,NL
-1044052260,1044052347,BE
-1044052348,1044052359,NL
-1044052360,1044052363,BE
-1044052364,1044052375,NL
-1044052376,1044052479,BE
-1044052480,1044052483,NL
-1044052484,1044052967,BE
-1044052968,1044052971,NL
-1044052972,1044052983,BE
-1044052984,1044052987,NL
-1044052988,1044053055,BE
-1044053056,1044053063,NL
-1044053064,1044053255,BE
-1044053256,1044053263,NL
-1044053264,1044053455,BE
-1044053456,1044053463,NL
-1044053464,1044053567,BE
-1044053568,1044059263,NL
-1044059264,1044059935,BE
-1044059936,1044060031,NL
-1044060032,1044060063,BE
-1044060064,1044061183,NL
-1044061184,1044061223,BE
-1044061224,1044061263,NL
-1044061264,1044061271,BE
-1044061272,1044061343,NL
-1044061344,1044061375,BE
-1044061376,1044061391,NL
-1044061392,1044061399,BE
-1044061400,1044061431,NL
-1044061432,1044061439,BE
-1044061440,1044061695,NL
-1044061696,1044061703,BE
-1044061704,1044061759,NL
-1044061760,1044061775,BE
-1044061776,1044061783,NL
-1044061784,1044061807,BE
-1044061808,1044061831,NL
-1044061832,1044061839,BE
-1044061840,1044061879,NL
-1044061880,1044061895,BE
-1044061896,1044061919,NL
-1044061920,1044061951,BE
-1044061952,1044062015,NL
-1044062016,1044062047,BE
-1044062048,1044062079,NL
-1044062080,1044062095,BE
-1044062096,1044062103,NL
-1044062104,1044062135,BE
-1044062136,1044062175,NL
-1044062176,1044062199,BE
-1044062200,1044062223,NL
-1044062224,1044062239,BE
-1044062240,1044062375,NL
-1044062376,1044062383,BE
-1044062384,1044062399,NL
-1044062400,1044062415,BE
-1044062416,1044062455,NL
-1044062456,1044062471,BE
-1044062472,1044062503,NL
-1044062504,1044062527,BE
-1044062528,1044062535,NL
-1044062536,1044062543,BE
-1044062544,1044062575,NL
-1044062576,1044062583,BE
-1044062584,1044062591,NL
-1044062592,1044062599,BE
-1044062600,1044062607,NL
-1044062608,1044062623,BE
-1044062624,1044062647,NL
-1044062648,1044062655,BE
-1044062656,1044062663,NL
-1044062664,1044062671,BE
-1044062672,1044063231,NL
-1044063232,1044063355,BE
-1044063356,1044063363,NL
-1044063364,1044067327,BE
-1044067328,1044068351,NL
-1044068352,1044068991,BE
-1044068992,1044069631,NL
-1044069632,1044070399,BE
-1044070400,1044076607,NL
-1044076608,1044076799,BE
-1044076800,1044077055,NL
-1044077056,1044077567,BE
-1044077568,1044092927,NL
-1044092928,1044093183,BE
-1044093184,1044094975,NL
-1044094976,1044099071,BE
-1044099072,1044103263,NL
-1044103264,1044103423,BE
-1044103424,1044103999,NL
-1044104000,1044104031,BE
-1044104032,1044104095,NL
-1044104096,1044104159,BE
-1044104160,1044104287,NL
-1044104288,1044104319,BE
-1044104320,1044104367,NL
-1044104368,1044104383,BE
-1044104384,1044104543,NL
-1044104544,1044104559,BE
-1044104560,1044104831,NL
-1044104832,1044105023,BE
-1044105024,1044105055,NL
-1044105056,1044105087,BE
-1044105088,1044105151,NL
-1044105152,1044106771,BE
-1044106772,1044106775,NL
-1044106776,1044106787,BE
-1044106788,1044106795,NL
-1044106796,1044106807,BE
-1044106808,1044106815,NL
-1044106816,1044107263,BE
-1044107264,1044111359,NL
-1044111360,1044115455,BE
-1044115456,1044117503,NL
-1044117504,1044117551,BE
-1044117552,1044117567,NL
-1044117568,1044118527,BE
-1044118528,1044118783,NL
-1044118784,1044118847,BE
-1044118848,1044118895,NL
-1044118896,1044118903,BE
-1044118904,1044119551,NL
+1043988480,1044118295,NL
+1044118296,1044118303,BE
+1044118304,1044118423,NL
+1044118424,1044118431,BE
+1044118432,1044118439,NL
+1044118440,1044118447,BE
+1044118448,1044119551,NL
1044119552,1044152319,GB
1044152320,1044185087,IR
1044185088,1044193279,RU
1044193280,1044201471,PL
-1044201472,1044207359,FI
-1044207360,1044207615,FR
-1044207616,1044217855,FI
+1044201472,1044217855,FI
1044217856,1044226047,DK
1044226048,1044234239,OM
-1044250624,1044251391,BE
-1044251392,1044251647,EU
-1044251648,1044252415,BE
-1044252416,1044252927,EU
-1044252928,1044253439,BE
-1044253440,1044253695,EU
-1044253696,1044254463,BE
-1044254464,1044254975,EU
-1044254976,1044255487,BE
-1044255488,1044255999,EU
-1044256000,1044256511,BE
-1044256512,1044256767,EU
-1044256768,1044257535,BE
-1044257536,1044257791,EU
-1044257792,1044258559,BE
-1044258560,1044259071,EU
-1044259072,1044259583,BE
-1044259584,1044260095,EU
-1044260096,1044261631,BE
-1044261632,1044262143,EU
-1044262144,1044262399,BE
-1044262400,1044263167,EU
-1044263168,1044263423,BE
-1044263424,1044264191,EU
-1044264192,1044264447,BE
-1044264448,1044265215,EU
-1044265216,1044265471,BE
-1044265472,1044265983,EU
-1044265984,1044266751,BE
-1044266752,1044267519,EU
-1044267520,1044269567,BE
-1044269568,1044270079,EU
-1044270080,1044271615,BE
-1044271616,1044272127,EU
-1044272128,1044272383,BE
-1044272384,1044272895,EU
-1044272896,1044273151,BE
-1044273152,1044283391,EU
1044283392,1044316159,FR
1044316160,1044332543,NO
1044332544,1044348927,RU
@@ -23004,133 +8610,34 @@
1044389888,1044398079,FR
1044398080,1044414463,UA
1044414464,1044447231,GB
-1044447232,1044451583,SE
-1044451584,1044451839,NO
-1044451840,1044453183,SE
-1044453184,1044453263,NO
-1044453264,1044454399,SE
-1044454400,1044454415,NO
-1044454416,1044454423,SE
-1044454424,1044454427,NO
-1044454428,1044454463,SE
-1044454464,1044454495,NO
-1044454496,1044454511,SE
-1044454512,1044454559,NO
-1044454560,1044454583,SE
-1044454584,1044454655,NO
-1044454656,1044454911,SE
-1044454912,1044455423,NO
+1044447232,1044453233,SE
+1044453234,1044453234,NO
+1044453235,1044455423,SE
1044455424,1044463615,EE
1044463616,1044479999,SE
1044480000,1044488191,CH
-1044488192,1044494911,SK
-1044494912,1044494943,SR
-1044494944,1044496383,SK
+1044488192,1044496383,SK
1044496384,1044512767,EE
1044512768,1044578303,DK
-1044578304,1044578559,DE
-1044578560,1044580607,GB
-1044580608,1044580671,DE
-1044580672,1044580735,GB
-1044580736,1044580767,DE
-1044580768,1044580799,GB
-1044580800,1044581119,DE
-1044581120,1044581631,GB
-1044581632,1044581903,DE
-1044581904,1044581951,GB
-1044581952,1044582015,DE
-1044582016,1044586495,GB
-1044586496,1044587007,DE
-1044587008,1044587519,GB
-1044587520,1044587775,DE
-1044587776,1044588031,GB
-1044588032,1044588287,DE
-1044588288,1044588543,GB
-1044588544,1044588559,DE
-1044588560,1044588575,GB
-1044588576,1044588607,DE
-1044588608,1044588799,GB
-1044588800,1044589567,DE
-1044589568,1044590591,GB
-1044590592,1044590671,DE
-1044590672,1044590719,GB
-1044590720,1044590783,DE
-1044590784,1044590847,GB
-1044590848,1044591103,DE
-1044591104,1044591615,GB
-1044591616,1044592127,DE
-1044592128,1044592143,GB
-1044592144,1044592159,DE
-1044592160,1044592191,GB
-1044592192,1044592255,DE
-1044592256,1044592639,GB
-1044592640,1044592655,DE
-1044592656,1044592671,GB
-1044592672,1044592703,DE
-1044592704,1044592831,GB
-1044592832,1044592895,DE
-1044592896,1044593151,GB
-1044593152,1044593407,DE
-1044593408,1044593663,GB
-1044593664,1044594175,DE
-1044594176,1044625407,GB
-1044625408,1044625463,DE
-1044625464,1044625471,GB
-1044625472,1044625503,AT
-1044625504,1044625535,DE
-1044625536,1044625551,AT
-1044625552,1044625663,GB
-1044625664,1044625679,DE
-1044625680,1044625919,GB
-1044625920,1044626175,AT
-1044626176,1044627455,GB
-1044627456,1044628223,DE
-1044628224,1044629503,GB
-1044629504,1044629759,DE
-1044629760,1044631551,GB
-1044631552,1044631903,DE
-1044631904,1044631951,GB
-1044631952,1044631967,DE
-1044631968,1044632319,GB
-1044632320,1044633087,DE
-1044633088,1044633343,GB
-1044633344,1044633855,DE
-1044633856,1044634623,GB
-1044634624,1044634879,DE
-1044634880,1044635647,GB
-1044635648,1044636159,US
-1044636160,1044638207,DE
-1044638208,1044638223,GB
-1044638224,1044638239,DE
-1044638240,1044638273,GB
-1044638274,1044638274,GB
-1044638275,1044638463,GB
+1044578304,1044578623,GB
+1044578624,1044578639,DE
+1044578640,1044636671,GB
+1044636672,1044637695,DE
+1044637696,1044638463,GB
1044638464,1044638719,DE
-1044638720,1044638975,GB
-1044638976,1044639231,DE
-1044639232,1044639743,GB
-1044639744,1044641791,DE
-1044641792,1044642815,US
-1044642816,1044643327,DE
-1044643328,1044643839,GB
+1044638720,1044640767,GB
+1044640768,1044642815,DE
+1044642816,1044643839,GB
1044643840,1044652031,DE
1044652032,1044660223,LY
-1044660224,1044664895,GR
-1044664896,1044664959,IR
-1044664960,1044665535,GR
-1044665536,1044665551,IQ
-1044665552,1044665855,GR
-1044665856,1044666367,US
-1044666368,1044667647,GR
-1044667648,1044667903,US
-1044667904,1044668415,GR
+1044660224,1044668415,GR
1044668416,1044676607,BA
1044676608,1044684799,RU
1044684800,1044692991,HU
1044692992,1044697087,AT
1044697088,1044697343,DE
-1044697344,1044697855,AT
-1044697856,1044698367,DE
+1044697344,1044698111,AT
+1044698112,1044698367,DE
1044698368,1044698623,AT
1044698624,1044699135,DE
1044699136,1044701183,AT
@@ -23141,689 +8648,52 @@
1044744192,1044746239,GB
1044746240,1044748287,DE
1044748288,1044750335,DK
-1044750336,1044750351,US
-1044750352,1044750355,HU
-1044750356,1044750359,BE
-1044750360,1044750363,GB
-1044750364,1044750367,FI
-1044750368,1044753151,NL
-1044753152,1044753183,DE
-1044753184,1044753215,HU
-1044753216,1044758527,NL
+1044750336,1044758527,NL
1044758528,1044774911,PL
-1044774912,1044782079,NO
-1044782080,1044782335,EU
-1044782336,1044800383,NO
-1044800384,1044800511,IT
-1044800512,1044840447,NO
+1044774912,1044840447,NO
1044840448,1044905983,FI
1044905984,1044908031,GB
1044908032,1044909055,US
-1044909056,1044910847,GB
-1044910848,1044911103,DE
-1044911104,1044913951,GB
-1044913952,1044913967,DE
-1044913968,1044913983,GB
-1044913984,1044914015,DE
-1044914016,1044914047,GB
-1044914048,1044914111,DE
-1044914112,1044916735,GB
-1044916736,1044917247,DE
-1044917248,1044917279,GB
-1044917280,1044917295,US
-1044917296,1044917311,DE
-1044917312,1044917343,GB
-1044917344,1044917359,DE
-1044917360,1044917503,GB
-1044917504,1044917759,DE
-1044917760,1044917823,GB
-1044917824,1044918271,DE
-1044918272,1044918287,GB
-1044918288,1044919295,DE
-1044919296,1044920191,GB
-1044920192,1044920319,DE
+1044909056,1044916735,GB
+1044916736,1044917263,DE
+1044917264,1044917279,GB
+1044917280,1044920319,DE
1044920320,1044921343,GB
1044921344,1044922367,US
1044922368,1044930559,DE
-1044930560,1044930607,BE
-1044930608,1044930615,GB
-1044930616,1044930667,BE
-1044930668,1044930671,GB
-1044930672,1044930695,BE
-1044930696,1044930703,GB
-1044930704,1044930719,BE
-1044930720,1044930727,GB
-1044930728,1044930751,BE
-1044930752,1044930795,GB
-1044930796,1044930799,BE
-1044930800,1044930807,GB
-1044930808,1044930911,BE
-1044930912,1044930927,DE
-1044930928,1044931343,BE
-1044931344,1044931359,GB
-1044931360,1044931375,BE
-1044931376,1044931391,GB
-1044931392,1044931407,BE
-1044931408,1044931439,GB
-1044931440,1044931455,BE
-1044931456,1044931463,GB
-1044931464,1044931487,BE
-1044931488,1044931495,GB
-1044931496,1044931535,BE
-1044931536,1044931543,GB
-1044931544,1044931551,BE
-1044931552,1044931567,GB
-1044931568,1044931583,BE
-1044931584,1044931623,GB
-1044931624,1044931631,BE
-1044931632,1044931639,GB
-1044931640,1044931651,BE
-1044931652,1044931655,GB
-1044931656,1044931663,BE
-1044931664,1044931679,GB
-1044931680,1044931703,BE
-1044931704,1044931727,GB
-1044931728,1044931759,BE
-1044931760,1044931775,GB
-1044931776,1044931831,BE
-1044931832,1044931835,GB
-1044931836,1044931855,BE
-1044931856,1044931871,GB
-1044931872,1044931903,BE
-1044931904,1044931911,GB
-1044931912,1044931915,BE
-1044931916,1044931919,GB
-1044931920,1044931923,BE
-1044931924,1044931927,GB
-1044931928,1044931935,BE
-1044931936,1044931951,GB
-1044931952,1044931975,BE
-1044931976,1044931983,GB
-1044931984,1044932047,BE
-1044932048,1044932087,GB
-1044932088,1044932351,BE
-1044932352,1044932375,GB
-1044932376,1044932383,BE
-1044932384,1044932407,GB
-1044932408,1044932415,BE
-1044932416,1044932479,GB
-1044932480,1044932495,BE
-1044932496,1044932543,GB
-1044932544,1044932607,BE
-1044932608,1044932671,LU
-1044932672,1044932675,BE
-1044932676,1044932687,GB
-1044932688,1044932703,BE
-1044932704,1044932707,GB
-1044932708,1044932719,BE
-1044932720,1044932799,GB
-1044932800,1044932807,BE
-1044932808,1044932823,GB
-1044932824,1044932831,BE
-1044932832,1044932863,GB
-1044932864,1044932895,BE
-1044932896,1044932903,GB
-1044932904,1044932935,BE
-1044932936,1044932947,GB
-1044932948,1044932951,BE
-1044932952,1044932959,GB
-1044932960,1044932975,BE
-1044932976,1044932983,GB
-1044932984,1044933007,BE
-1044933008,1044933015,GB
-1044933016,1044933019,BE
-1044933020,1044933039,GB
-1044933040,1044933055,BE
-1044933056,1044933079,GB
-1044933080,1044933087,BE
-1044933088,1044933095,GB
-1044933096,1044933103,BE
-1044933104,1044933107,GB
-1044933108,1044933119,BE
-1044933120,1044933183,GB
-1044933184,1044933215,BE
-1044933216,1044933227,GB
-1044933228,1044933231,BE
-1044933232,1044933279,GB
-1044933280,1044933303,BE
-1044933304,1044933311,GB
-1044933312,1044933359,BE
-1044933360,1044933375,GB
-1044933376,1044933407,BE
-1044933408,1044933411,GB
-1044933412,1044933415,BE
-1044933416,1044933439,GB
-1044933440,1044933487,BE
-1044933488,1044933495,GB
-1044933496,1044933503,BE
-1044933504,1044933519,GB
-1044933520,1044933551,BE
-1044933552,1044933555,GB
-1044933556,1044933583,BE
-1044933584,1044933599,GB
-1044933600,1044933615,BE
-1044933616,1044933623,GB
-1044933624,1044933711,BE
-1044933712,1044933719,GB
-1044933720,1044933727,BE
-1044933728,1044933735,GB
-1044933736,1044933743,BE
-1044933744,1044933759,GB
-1044933760,1044933823,BE
-1044933824,1044933831,GB
-1044933832,1044933843,BE
-1044933844,1044933847,GB
-1044933848,1044933863,BE
-1044933864,1044933887,GB
-1044933888,1044934151,BE
-1044934152,1044934159,GB
-1044934160,1044934191,BE
-1044934192,1044934199,GB
-1044934200,1044934231,BE
-1044934232,1044934247,GB
-1044934248,1044934287,BE
-1044934288,1044934295,GB
-1044934296,1044934319,BE
-1044934320,1044934327,GB
-1044934328,1044934343,BE
-1044934344,1044934351,GB
-1044934352,1044934359,BE
-1044934360,1044934503,GB
-1044934504,1044934543,BE
-1044934544,1044934551,GB
-1044934552,1044934575,BE
-1044934576,1044934583,GB
-1044934584,1044934591,BE
-1044934592,1044934599,GB
-1044934600,1044934607,BE
-1044934608,1044934615,GB
-1044934616,1044934719,BE
-1044934720,1044934783,GB
-1044934784,1044934815,BE
-1044934816,1044934819,GB
-1044934820,1044934823,BE
-1044934824,1044934911,GB
-1044934912,1044935183,BE
-1044935184,1044935199,GB
-1044935200,1044935231,BE
-1044935232,1044935247,GB
-1044935248,1044935263,BE
-1044935264,1044935295,GB
-1044935296,1044935331,BE
-1044935332,1044935343,GB
-1044935344,1044935355,BE
-1044935356,1044935391,GB
-1044935392,1044935407,BE
-1044935408,1044935423,GB
-1044935424,1044935743,BE
-1044935744,1044935751,GB
-1044935752,1044935839,BE
-1044935840,1044935847,GB
-1044935848,1044935851,BE
-1044935852,1044935871,GB
-1044935872,1044935879,BE
-1044935880,1044935887,GB
-1044935888,1044935895,BE
-1044935896,1044936095,GB
-1044936096,1044936103,BE
-1044936104,1044936111,GB
-1044936112,1044936123,BE
-1044936124,1044936151,GB
-1044936152,1044936199,BE
-1044936200,1044936215,GB
-1044936216,1044936271,BE
-1044936272,1044936311,GB
-1044936312,1044936335,BE
-1044936336,1044936351,GB
-1044936352,1044936439,BE
-1044936440,1044936455,GB
-1044936456,1044936463,FR
-1044936464,1044936495,BE
-1044936496,1044936503,GB
-1044936504,1044937183,BE
-1044937184,1044937187,GB
-1044937188,1044937287,BE
-1044937288,1044937343,GB
-1044937344,1044937383,BE
-1044937384,1044937399,GB
-1044937400,1044937487,BE
-1044937488,1044937503,GB
-1044937504,1044937515,BE
-1044937516,1044937531,GB
-1044937532,1044937535,BE
-1044937536,1044937551,GB
-1044937552,1044937567,BE
-1044937568,1044937583,GB
-1044937584,1044937591,BE
-1044937592,1044937599,GB
-1044937600,1044937607,BE
-1044937608,1044937639,GB
-1044937640,1044937679,BE
-1044937680,1044937695,GB
-1044937696,1044937703,BE
-1044937704,1044937711,GB
-1044937712,1044938047,BE
-1044938048,1044938079,GB
-1044938080,1044938103,BE
-1044938104,1044938107,GB
-1044938108,1044938111,BE
-1044938112,1044938151,GB
-1044938152,1044938175,BE
-1044938176,1044938207,GB
-1044938208,1044938235,BE
-1044938236,1044938271,GB
-1044938272,1044938315,BE
-1044938316,1044938319,GB
-1044938320,1044938327,BE
-1044938328,1044938343,GB
-1044938344,1044938367,BE
-1044938368,1044938399,GB
-1044938400,1044938407,BE
-1044938408,1044938415,GB
-1044938416,1044938423,BE
-1044938424,1044938431,GB
-1044938432,1044938447,BE
-1044938448,1044938455,GB
-1044938456,1044938479,BE
-1044938480,1044938495,GB
-1044938496,1044938503,LU
-1044938504,1044938523,GB
-1044938524,1044938527,BE
-1044938528,1044938559,GB
-1044938560,1044938623,LU
-1044938624,1044938631,BE
-1044938632,1044938719,GB
-1044938720,1044938751,LU
-1044938752,1044946943,GB
+1044930560,1044931231,GB
+1044931232,1044931239,BE
+1044931240,1044933499,GB
+1044933500,1044933503,BE
+1044933504,1044935439,GB
+1044935440,1044935455,BE
+1044935456,1044935663,GB
+1044935664,1044935671,BE
+1044935672,1044935759,GB
+1044935760,1044935775,BE
+1044935776,1044936115,GB
+1044936116,1044936119,BE
+1044936120,1044936487,GB
+1044936488,1044936495,BE
+1044936496,1044937247,GB
+1044937248,1044937255,BE
+1044937256,1044946943,GB
1044946944,1044955135,UA
1044955136,1044963327,NL
1044963328,1044971519,FI
1044971520,1044979711,FR
1044979712,1044987903,FI
1044987904,1045004287,BG
-1045004288,1045013231,GB
-1045013232,1045013247,IE
-1045013248,1045013455,GB
-1045013456,1045013471,IE
-1045013472,1045014488,GB
-1045014489,1045014494,ES
-1045014495,1045016832,GB
-1045016833,1045016862,ES
-1045016863,1045016880,GB
-1045016881,1045016886,ES
-1045016887,1045016888,GB
-1045016889,1045016894,ES
-1045016895,1045016895,GB
-1045016896,1045016959,ES
-1045016960,1045016960,GB
-1045016961,1045017022,ES
-1045017023,1045018143,GB
-1045018144,1045018151,AE
-1045018152,1045018207,GB
-1045018208,1045018231,FI
-1045018232,1045018367,GB
-1045018368,1045018399,ES
-1045018400,1045018423,GB
-1045018424,1045018559,ES
-1045018560,1045018623,GB
-1045018624,1045018783,ES
-1045018784,1045020255,GB
-1045020256,1045020527,ES
-1045020528,1045020543,GB
-1045020544,1045020639,ES
-1045020640,1045020655,GB
-1045020656,1045020671,ES
+1045004288,1045020671,GB
1045020672,1045037055,NO
-1045037056,1045118975,GR
-1045118976,1045119231,US
-1045119232,1045119743,AL
-1045119744,1045135359,GR
-1045135360,1045138659,DE
-1045138660,1045138660,CH
-1045138661,1045138661,DE
-1045138662,1045138662,IL
-1045138663,1045141759,DE
-1045141760,1045142015,PL
-1045142016,1045148613,DE
-1045148614,1045148614,US
-1045148615,1045148615,UA
-1045148616,1045148617,DE
-1045148618,1045148618,US
-1045148619,1045148619,DE
-1045148620,1045148620,US
-1045148621,1045148625,DE
-1045148626,1045148626,US
-1045148627,1045148637,DE
-1045148638,1045148638,US
-1045148639,1045148653,DE
-1045148654,1045148655,US
-1045148656,1045148669,DE
-1045148670,1045148670,US
-1045148671,1045149315,DE
-1045149316,1045149316,GR
-1045149317,1045149317,PL
-1045149318,1045149318,CZ
-1045149319,1045149319,DE
-1045149320,1045149320,GR
-1045149321,1045149333,DE
-1045149334,1045149335,PL
-1045149336,1045149341,DE
-1045149342,1045149342,RU
-1045149343,1045149343,BD
-1045149344,1045149344,PK
-1045149345,1045149345,US
-1045149346,1045149346,PL
-1045149347,1045149347,DE
-1045149348,1045149348,LT
-1045149349,1045149351,DE
-1045149352,1045149352,GB
-1045149353,1045149353,DE
-1045149354,1045149354,TR
-1045149355,1045149355,US
-1045149356,1045149358,DE
-1045149359,1045149359,LT
-1045149360,1045149361,DE
-1045149362,1045149362,UA
-1045149363,1045149364,DE
-1045149365,1045149365,CZ
-1045149366,1045149366,GR
-1045149367,1045149367,BD
-1045149368,1045149369,DE
-1045149370,1045149371,PK
-1045149372,1045149381,DE
-1045149382,1045149382,CZ
-1045149383,1045149383,NL
-1045149384,1045149386,DE
-1045149387,1045149387,CZ
-1045149388,1045149389,DE
-1045149390,1045149390,CZ
-1045149391,1045149392,DE
-1045149393,1045149394,LT
-1045149395,1045149396,CZ
-1045149397,1045149397,GR
-1045149398,1045149398,IR
-1045149399,1045149399,DE
-1045149400,1045149410,CZ
-1045149411,1045149413,DE
-1045149414,1045149419,CZ
-1045149420,1045154059,DE
-1045154060,1045154060,IL
-1045154061,1045154061,DE
-1045154062,1045154062,BR
-1045154063,1045154065,DE
-1045154066,1045154068,BR
-1045154069,1045154074,DE
-1045154075,1045154083,BR
-1045154084,1045154084,IL
-1045154085,1045154086,IN
-1045154087,1045154087,LT
-1045154088,1045154097,CH
-1045154098,1045154100,US
-1045154101,1045154104,CH
-1045154105,1045154106,UA
-1045154107,1045154108,IL
-1045154109,1045154109,NL
-1045154110,1045154110,IL
-1045154111,1045154115,DE
-1045154116,1045154116,US
-1045154117,1045154120,DE
-1045154121,1045154121,US
-1045154122,1045154123,DE
-1045154124,1045154124,US
-1045154125,1045154127,DE
-1045154128,1045154128,US
-1045154129,1045154129,DE
-1045154130,1045154130,US
-1045154131,1045154131,DE
-1045154132,1045154132,IN
-1045154133,1045154133,DE
-1045154134,1045154135,US
-1045154136,1045154140,DE
-1045154141,1045154142,US
-1045154143,1045154145,DE
-1045154146,1045154147,US
-1045154148,1045154148,DE
-1045154149,1045154149,CZ
-1045154150,1045154152,DE
-1045154153,1045154153,NO
-1045154154,1045154154,IN
-1045154155,1045154155,US
-1045154156,1045154158,IN
-1045154159,1045154159,DE
-1045154160,1045154160,US
-1045154161,1045154161,UA
-1045154162,1045154166,DE
-1045154167,1045154170,US
-1045154171,1045154171,DE
-1045154172,1045154174,US
-1045154175,1045154559,DE
-1045154560,1045154591,NL
-1045154592,1045154687,DE
-1045154688,1045154719,US
-1045154720,1045154751,RU
-1045154752,1045154783,SE
-1045154784,1045154815,BR
-1045154816,1045155071,DE
-1045155072,1045155327,CH
-1045155328,1045158148,DE
-1045158149,1045158149,US
-1045158150,1045158158,DE
-1045158159,1045158159,US
-1045158160,1045158161,DE
-1045158162,1045158162,US
-1045158163,1045158163,IL
-1045158164,1045158168,DE
-1045158169,1045158169,IL
-1045158170,1045158171,IE
-1045158172,1045158172,IL
-1045158173,1045158174,IE
-1045158175,1045158180,DE
-1045158181,1045158182,TR
-1045158183,1045158184,DE
-1045158185,1045158188,TR
-1045158189,1045158189,DE
-1045158190,1045158191,US
-1045158192,1045158192,DE
-1045158193,1045158193,US
-1045158194,1045158200,UA
-1045158201,1045158201,LV
-1045158202,1045158204,US
-1045158205,1045158275,DE
-1045158276,1045158276,SG
-1045158277,1045158277,US
-1045158278,1045158278,IL
-1045158279,1045158279,UA
-1045158280,1045158280,IL
-1045158281,1045158281,DE
-1045158282,1045158284,IL
-1045158285,1045158285,MA
-1045158286,1045158286,DE
-1045158287,1045158288,IN
-1045158289,1045158291,DE
-1045158292,1045158293,CH
-1045158294,1045158294,DE
-1045158295,1045158299,IL
-1045158300,1045158300,NL
-1045158301,1045158301,DE
-1045158302,1045158302,IN
-1045158303,1045158303,DE
-1045158304,1045158304,FI
-1045158305,1045158332,GB
-1045158333,1045158333,DE
-1045158334,1045158334,GB
-1045158335,1045159684,DE
-1045159685,1045159685,GR
-1045159686,1045159686,UA
-1045159687,1045159687,KR
-1045159688,1045159691,DE
-1045159692,1045159692,RU
-1045159693,1045159694,DE
-1045159695,1045159695,CH
-1045159696,1045159698,DE
-1045159699,1045159699,LK
-1045159700,1045159702,DE
-1045159703,1045159703,GT
-1045159704,1045159706,DE
-1045159707,1045159707,DK
-1045159708,1045159708,SG
-1045159709,1045159709,RU
-1045159710,1045159710,BR
-1045159711,1045159711,SG
-1045159712,1045159722,DE
-1045159723,1045159723,UA
-1045159724,1045159724,IT
-1045159725,1045159727,DE
-1045159728,1045159730,GR
-1045159731,1045159731,AT
-1045159732,1045159734,DE
-1045159735,1045159735,BR
-1045159736,1045159736,MD
-1045159737,1045159737,DE
-1045159738,1045159739,SA
-1045159740,1045159740,DE
-1045159741,1045159741,CZ
-1045159742,1045159747,DE
-1045159748,1045159748,IN
-1045159749,1045159752,DE
-1045159753,1045159753,IN
-1045159754,1045159754,US
-1045159755,1045159764,DE
-1045159765,1045159765,IN
-1045159766,1045159766,HK
-1045159767,1045159769,DE
-1045159770,1045159771,IN
-1045159772,1045159773,DE
-1045159774,1045159774,IN
-1045159775,1045159784,DE
-1045159785,1045159785,IN
-1045159786,1045159788,SG
-1045159789,1045159795,DE
-1045159796,1045159796,IN
-1045159797,1045159817,DE
-1045159818,1045159818,US
-1045159819,1045159820,DE
-1045159821,1045159822,US
-1045159823,1045159850,DE
-1045159851,1045159851,NO
-1045159852,1045159856,DE
-1045159857,1045159857,US
-1045159858,1045159859,DE
-1045159860,1045159865,US
-1045159866,1045159866,DE
-1045159867,1045159867,US
-1045159868,1045159876,DE
-1045159877,1045159877,US
-1045159878,1045159878,IN
-1045159879,1045159881,US
-1045159882,1045159883,DE
-1045159884,1045159884,US
-1045159885,1045159885,DE
-1045159886,1045159886,US
-1045159887,1045159887,DE
-1045159888,1045159888,US
-1045159889,1045159890,DE
-1045159891,1045159892,US
-1045159893,1045159893,FI
-1045159894,1045159897,US
-1045159898,1045159898,DE
-1045159899,1045159900,US
-1045159901,1045159901,DE
-1045159902,1045159902,US
-1045159903,1045159908,DE
-1045159909,1045159909,AT
-1045159910,1045159910,US
-1045159911,1045159911,TR
-1045159912,1045159914,US
-1045159915,1045159920,TR
-1045159921,1045159921,DE
-1045159922,1045159922,IN
-1045159923,1045159923,CA
-1045159924,1045159925,IN
-1045159926,1045159926,DE
-1045159927,1045159931,TR
-1045159932,1045159932,DE
-1045159933,1045159933,TR
-1045159934,1045160959,DE
-1045160960,1045160991,TR
-1045160992,1045161023,DE
-1045161024,1045161055,AT
-1045161056,1045161087,US
-1045161088,1045161119,DE
-1045161120,1045161151,NL
-1045161152,1045162143,DE
-1045162144,1045162144,HR
-1045162145,1045162165,DE
-1045162166,1045162166,LT
-1045162167,1045162167,BR
-1045162168,1045162171,DE
-1045162172,1045162172,TR
-1045162173,1045162173,MD
-1045162174,1045162687,DE
-1045162688,1045162688,PK
-1045162689,1045162689,CA
-1045162690,1045162700,DE
-1045162701,1045162703,CA
-1045162704,1045167876,DE
-1045167877,1045167877,TR
-1045167878,1045167878,DE
-1045167879,1045167879,TW
-1045167880,1045167880,DE
-1045167881,1045167881,PT
-1045167882,1045167882,DE
-1045167883,1045167883,AR
-1045167884,1045167884,BD
-1045167885,1045167886,DE
-1045167887,1045167887,TR
-1045167888,1045167895,DE
-1045167896,1045167896,RU
-1045167897,1045167897,PT
-1045167898,1045167901,DE
-1045167902,1045167902,HR
-1045167903,1045167903,RU
-1045167904,1045167904,US
-1045167905,1045167907,PK
-1045167908,1045167908,DE
-1045167909,1045167909,IT
-1045167910,1045167911,DE
-1045167912,1045167917,TR
-1045167918,1045167918,DE
-1045167919,1045167922,UA
-1045167923,1045167923,DE
-1045167924,1045167924,TW
-1045167925,1045167925,TR
-1045167926,1045167933,DE
-1045167934,1045167934,MD
-1045167935,1045168003,DE
-1045168004,1045168004,US
-1045168005,1045168011,DE
-1045168012,1045168013,US
-1045168014,1045168014,DE
-1045168015,1045168021,US
-1045168022,1045168024,DE
-1045168025,1045168045,US
-1045168046,1045168046,DE
-1045168047,1045168052,US
-1045168053,1045168054,RU
-1045168055,1045168055,US
-1045168056,1045168057,DE
-1045168058,1045168058,SG
-1045168059,1045168059,CZ
-1045168060,1045168074,DE
-1045168075,1045168075,IL
-1045168076,1045168076,IN
-1045168077,1045168077,DE
-1045168078,1045168079,IN
-1045168080,1045168080,DE
-1045168081,1045168086,IN
-1045168087,1045168087,DE
-1045168088,1045168099,IN
-1045168100,1045168116,DE
-1045168117,1045168117,LT
-1045168118,1045168123,DE
-1045168124,1045168124,US
-1045168125,1045168125,DE
-1045168126,1045168126,TR
-1045168127,1045168127,DE
+1045037056,1045135359,GR
+1045135360,1045152603,DE
+1045152604,1045152606,SG
+1045152607,1045154629,DE
+1045154630,1045154630,SG
+1045154631,1045159711,DE
+1045159712,1045159712,EG
+1045159713,1045168127,DE
1045168128,1045233663,RU
1045233664,1045241855,GB
1045241856,1045250047,IT
@@ -23831,49 +8701,19 @@
1045266432,1045274623,HU
1045274624,1045282815,IE
1045282816,1045299199,HU
-1045299200,1045302271,GB
-1045302272,1045303295,EU
-1045303296,1045305855,DE
-1045305856,1045307391,EU
+1045299200,1045307391,US
1045307392,1045315583,RU
1045315584,1045319679,DE
1045319680,1045323775,RU
1045323776,1045364735,FI
1045364736,1045430271,DK
-1045430272,1045436911,DE
-1045436912,1045436919,GB
-1045436920,1045446655,DE
-1045446656,1045446911,HU
-1045446912,1045447167,SK
-1045447168,1045447231,HU
-1045447232,1045447295,SK
-1045447296,1045447311,HU
-1045447312,1045447519,SK
-1045447520,1045447551,HU
-1045447552,1045448255,SK
-1045448256,1045448263,HU
-1045448264,1045448703,SK
-1045448704,1045448767,HU
-1045448768,1045450751,SK
-1045450752,1045451263,CZ
-1045451264,1045451775,SK
-1045451776,1045452079,CZ
-1045452080,1045452159,SK
-1045452160,1045452287,CZ
-1045452288,1045452799,SK
-1045452800,1045453055,CZ
-1045453056,1045454847,SK
+1045430272,1045446655,DE
+1045446656,1045454847,SK
1045454848,1045460991,DE
1045460992,1045461503,FR
1045461504,1045461631,DE
1045461632,1045461695,FR
-1045461696,1045461703,DE
-1045461704,1045461711,GB
-1045461712,1045461719,FR
-1045461720,1045461727,IT
-1045461728,1045461735,ES
-1045461736,1045461743,NL
-1045461744,1045463039,DE
+1045461696,1045463039,DE
1045463040,1045471231,FI
1045471232,1045479423,UA
1045479424,1045487615,SE
@@ -23884,72 +8724,9 @@
1045708800,1045716991,LB
1045716992,1045725183,RU
1045725184,1045733375,CZ
-1045733376,1045741567,GB
-1045741568,1045741823,SE
-1045741824,1045741831,GB
-1045741832,1045741839,BE
-1045741840,1045741855,GB
-1045741856,1045741895,SE
-1045741896,1045742039,GB
-1045742040,1045742047,SE
-1045742048,1045742111,GB
-1045742112,1045742115,SE
-1045742116,1045742175,GB
-1045742176,1045742191,SE
-1045742192,1045742335,GB
-1045742336,1045742623,SE
-1045742624,1045742751,GB
-1045742752,1045742759,SE
-1045742760,1045742847,GB
-1045742848,1045742983,SE
-1045742984,1045742991,GB
-1045742992,1045743007,SE
-1045743008,1045743015,FI
-1045743016,1045743031,GB
-1045743032,1045743039,SE
-1045743040,1045743047,GB
-1045743048,1045743231,SE
-1045743232,1045743251,GB
-1045743252,1045743263,SE
-1045743264,1045743299,GB
-1045743300,1045743623,SE
-1045743624,1045743871,GB
-1045743872,1045744263,SE
-1045744264,1045744383,GB
-1045744384,1045744647,SE
-1045744648,1045744671,BE
-1045744672,1045745407,GB
-1045745408,1045745695,SE
-1045745696,1045745759,GB
-1045745760,1045745768,SE
-1045745769,1045745791,GB
-1045745792,1045745855,SE
-1045745856,1045745919,GB
-1045745920,1045745951,SE
-1045745952,1045746175,GB
-1045746176,1045746431,SE
-1045746432,1045746495,GB
-1045746496,1045746527,SE
-1045746528,1045746671,GB
-1045746672,1045747071,SE
-1045747072,1045747199,GB
-1045747200,1045747463,SE
-1045747464,1045747759,GB
-1045747760,1045747775,SE
-1045747776,1045747839,GB
-1045747840,1045747855,SE
-1045747856,1045747919,GB
-1045747920,1045747935,SE
-1045747936,1045747967,GB
-1045747968,1045748223,SE
-1045748224,1045748319,GB
+1045733376,1045748319,GB
1045748320,1045748351,SE
-1045748352,1045748463,GB
-1045748464,1045748471,SE
-1045748472,1045748479,GB
-1045748480,1045748735,SE
-1045748736,1045749503,GB
-1045749504,1045749759,SE
+1045748352,1045749759,GB
1045749760,1045753855,SI
1045753856,1045755903,NL
1045755904,1045757951,UA
@@ -23966,479 +8743,125 @@
1046052864,1046061055,GB
1046061056,1046069247,DE
1046069248,1046085631,RU
-1046085632,1046150143,IL
-1046150144,1046150609,LR
+1046085632,1046150353,IL
+1046150354,1046150609,LR
1046150610,1046151167,IL
1046151168,1046216703,DE
1046216704,1046225647,NO
1046225648,1046225655,SE
1046225656,1046282239,NO
-1046282240,1046283007,DE
-1046283008,1046283135,BZ
-1046283136,1046283167,DE
-1046283168,1046283199,US
-1046283200,1046283247,DE
-1046283248,1046283255,US
-1046283256,1046283263,DE
-1046283264,1046283327,LU
-1046283328,1046285055,DE
-1046285056,1046285119,HR
-1046285120,1046285183,MT
-1046285184,1046285247,BZ
-1046285248,1046285311,BA
-1046285312,1046286367,DE
-1046286368,1046286399,US
-1046286400,1046286527,DE
-1046286528,1046286591,US
-1046286592,1046286663,DE
-1046286664,1046286671,BZ
-1046286672,1046286783,DE
-1046286784,1046286847,US
-1046286848,1046286935,DE
-1046286936,1046286943,ES
-1046286944,1046287039,DE
-1046287040,1046287103,US
-1046287104,1046287111,DE
-1046287112,1046287119,US
-1046287120,1046287135,DE
-1046287136,1046287167,US
-1046287168,1046287295,DE
-1046287296,1046287359,US
-1046287360,1046288383,DE
-1046288384,1046288511,CZ
-1046288512,1046288543,US
-1046288544,1046288655,CZ
-1046288656,1046288671,DE
-1046288672,1046288703,US
-1046288704,1046288767,DE
-1046288768,1046288775,AG
-1046288776,1046288895,DE
-1046288896,1046290431,AG
+1046282240,1046289407,DE
+1046289408,1046290431,AG
1046290432,1046298623,PL
-1046298624,1046299903,AT
-1046299904,1046300159,MK
-1046300160,1046300799,AT
-1046300800,1046300927,MK
-1046300928,1046302143,AT
-1046302144,1046302207,MK
-1046302208,1046305279,AT
-1046305280,1046305407,MK
-1046305408,1046305535,AT
-1046305536,1046305663,MK
-1046305664,1046305791,AT
-1046305792,1046306815,MK
-1046306816,1046308927,AT
-1046308928,1046309375,MK
-1046309376,1046309887,AT
-1046309888,1046310143,MK
-1046310144,1046310399,AT
-1046310400,1046311935,MK
-1046311936,1046315007,AT
-1046315008,1046315519,FR
-1046315520,1046316031,IT
-1046316032,1046316543,FR
-1046316544,1046317055,DK
-1046317056,1046317567,ES
-1046317568,1046318335,NL
-1046318336,1046318591,GB
-1046318592,1046323199,NL
-1046323200,1046327151,ES
-1046327152,1046327155,FR
-1046327156,1046331391,ES
-1046331392,1046331519,DE
-1046331520,1046331647,EU
-1046331648,1046331679,DE
-1046331680,1046331743,EU
-1046331744,1046331775,DE
-1046331776,1046331839,EU
-1046331840,1046331871,DE
-1046331872,1046332159,EU
-1046332160,1046332415,FR
-1046332416,1046332447,DE
-1046332448,1046333439,EU
-1046333440,1046333695,DE
-1046333696,1046334719,EU
-1046334720,1046334975,DE
-1046334976,1046336511,EU
-1046336512,1046337023,DE
-1046337024,1046337535,EU
-1046337536,1046338047,DE
-1046338048,1046339839,EU
-1046339840,1046340095,FR
-1046340096,1046343423,EU
-1046343424,1046343679,NL
-1046343680,1046344959,EU
-1046344960,1046345215,DE
-1046345216,1046345327,EU
-1046345328,1046345727,DE
-1046345728,1046346111,EU
-1046346112,1046346239,DE
-1046346240,1046346303,EU
-1046346304,1046346367,DE
-1046346368,1046346511,EU
-1046346512,1046346559,DE
-1046346560,1046347775,EU
-1046347776,1046349839,IT
-1046349840,1046349847,FR
-1046349848,1046352831,IT
-1046352832,1046352847,SM
-1046352848,1046366807,IT
-1046366808,1046366815,PL
-1046366816,1046385103,IT
-1046385104,1046385111,A2
-1046385112,1046391807,IT
-1046391808,1046392319,US
-1046392320,1046413311,IT
+1046298624,1046315007,AT
+1046315008,1046316031,FR
+1046316032,1046319103,GB
+1046319104,1046320127,NL
+1046320128,1046321151,GB
+1046321152,1046323199,NL
+1046323200,1046331391,ES
+1046347776,1046413311,IT
1046413312,1046446079,SE
-1046446080,1046479535,DE
-1046479536,1046479551,GB
-1046479552,1046479583,DE
-1046479584,1046479615,GB
-1046479616,1046479687,DE
-1046479688,1046479695,GB
-1046479696,1046480047,DE
-1046480048,1046480055,GB
-1046480056,1046480063,DE
-1046480064,1046480095,GB
-1046480096,1046480383,DE
-1046480384,1046480384,GB
-1046480385,1046480471,DE
-1046480472,1046480479,GB
-1046480480,1046480719,DE
-1046480720,1046480767,GB
-1046480768,1046481535,DE
-1046481536,1046481919,GB
-1046481920,1046481959,DE
-1046481960,1046481967,GB
-1046481968,1046482751,DE
-1046482752,1046482943,GB
-1046482944,1046483231,DE
-1046483232,1046483471,GB
-1046483472,1046483583,DE
-1046483584,1046483967,GB
-1046483968,1046484255,DE
-1046484256,1046484287,GB
-1046484288,1046484351,DE
-1046484352,1046484479,GB
+1046446080,1046478879,DE
+1046478880,1046479839,GB
+1046479840,1046479871,DE
+1046479872,1046480511,GB
+1046480512,1046480543,DE
+1046480544,1046481919,GB
+1046481920,1046481927,DE
+1046481928,1046483199,GB
+1046483200,1046483231,DE
+1046483232,1046484479,GB
1046484480,1046484511,DE
-1046484512,1046484607,GB
-1046484608,1046484623,DE
-1046484624,1046484991,GB
-1046484992,1046485023,DE
-1046485024,1046485031,GB
-1046485032,1046485127,DE
-1046485128,1046485135,GB
-1046485136,1046485159,DE
-1046485160,1046485167,GB
-1046485168,1046486287,DE
-1046486288,1046486295,GB
-1046486296,1046486375,DE
-1046486376,1046486383,GB
-1046486384,1046491223,DE
-1046491224,1046491231,GB
-1046491232,1046491391,DE
-1046491392,1046491399,GB
-1046491400,1046491423,DE
-1046491424,1046491431,GB
-1046491432,1046491743,DE
-1046491744,1046491775,GB
-1046491776,1046491839,DE
-1046491840,1046492159,GB
-1046492160,1046492415,DE
-1046492416,1046492447,GB
-1046492448,1046492503,DE
-1046492504,1046492511,GB
-1046492512,1046492543,DE
-1046492544,1046492551,GB
-1046492552,1046492655,DE
-1046492656,1046492663,GB
-1046492664,1046492927,DE
-1046492928,1046492967,GB
-1046492968,1046493071,DE
-1046493072,1046493087,GB
-1046493088,1046493095,DE
-1046493096,1046493103,GB
-1046493104,1046493391,DE
-1046493392,1046493399,GB
-1046493400,1046493407,DE
-1046493408,1046493471,GB
-1046493472,1046493487,DE
-1046493488,1046493511,GB
-1046493512,1046493519,DE
-1046493520,1046493535,GB
-1046493536,1046493551,DE
-1046493552,1046493575,GB
-1046493576,1046493583,DE
-1046493584,1046493591,GB
-1046493592,1046493599,DE
-1046493600,1046493631,GB
-1046493632,1046493639,DE
-1046493640,1046493695,GB
-1046493696,1046493951,DE
-1046493952,1046493983,GB
-1046493984,1046494007,DE
-1046494008,1046494015,GB
-1046494016,1046494031,DE
-1046494032,1046494039,GB
-1046494040,1046494087,DE
-1046494088,1046494095,GB
-1046494096,1046494303,DE
-1046494304,1046494311,GB
-1046494312,1046494327,DE
-1046494328,1046494335,GB
-1046494336,1046494607,DE
-1046494608,1046494615,GB
-1046494616,1046494623,DE
-1046494624,1046494719,GB
-1046494720,1046495351,DE
-1046495352,1046495359,GB
-1046495360,1046495407,DE
-1046495408,1046495415,GB
-1046495416,1046495439,DE
-1046495440,1046495447,GB
-1046495448,1046495487,DE
-1046495488,1046495519,GB
-1046495520,1046495527,DE
-1046495528,1046495535,GB
-1046495536,1046495543,DE
-1046495544,1046495551,GB
-1046495552,1046495567,DE
-1046495568,1046495575,GB
-1046495576,1046495599,DE
-1046495600,1046495607,GB
-1046495608,1046495631,DE
-1046495632,1046495639,GB
-1046495640,1046495647,DE
-1046495648,1046495663,GB
-1046495664,1046495703,DE
-1046495704,1046495719,GB
-1046495720,1046495879,DE
-1046495880,1046495895,GB
-1046495896,1046495999,DE
-1046496000,1046496047,GB
-1046496048,1046496127,DE
-1046496128,1046496135,GB
-1046496136,1046496191,DE
-1046496192,1046496215,GB
-1046496216,1046496231,DE
-1046496232,1046496239,GB
-1046496240,1046496303,DE
-1046496304,1046496511,GB
-1046496512,1046497463,DE
-1046497464,1046497471,GB
-1046497472,1046497479,DE
-1046497480,1046497567,GB
-1046497568,1046497639,DE
-1046497640,1046497647,GB
-1046497648,1046497663,DE
-1046497664,1046497671,GB
-1046497672,1046497719,DE
-1046497720,1046497727,GB
-1046497728,1046497759,DE
-1046497760,1046497775,GB
-1046497776,1046497975,DE
-1046497976,1046497983,GB
-1046497984,1046498047,DE
-1046498048,1046498079,GB
-1046498080,1046498103,DE
-1046498104,1046498111,GB
-1046498112,1046498159,DE
-1046498160,1046498167,GB
-1046498168,1046498207,DE
-1046498208,1046498215,GB
-1046498216,1046498239,DE
-1046498240,1046498255,GB
-1046498256,1046498263,DE
-1046498264,1046498271,GB
-1046498272,1046498279,DE
-1046498280,1046498295,GB
-1046498296,1046498359,DE
-1046498360,1046498367,GB
-1046498368,1046498455,DE
-1046498456,1046498591,GB
-1046498592,1046498631,DE
-1046498632,1046498639,GB
-1046498640,1046498655,DE
-1046498656,1046498663,GB
-1046498664,1046498679,DE
-1046498680,1046498687,GB
-1046498688,1046498719,DE
-1046498720,1046498727,GB
-1046498728,1046498819,DE
-1046498820,1046499327,GB
-1046499328,1046502655,DE
-1046502656,1046502719,GB
-1046502720,1046502863,DE
-1046502864,1046502911,GB
-1046502912,1046504415,DE
-1046504416,1046504447,GB
-1046504448,1046507519,DE
-1046507520,1046507535,GB
-1046507536,1046507615,DE
-1046507616,1046507631,GB
-1046507632,1046507647,DE
-1046507648,1046507695,GB
-1046507696,1046507807,DE
-1046507808,1046507823,IT
-1046507824,1046507951,DE
-1046507952,1046507983,FR
-1046507984,1046507999,IT
-1046508000,1046508015,DE
-1046508016,1046508031,GB
-1046508032,1046508079,DE
-1046508080,1046508111,PT
-1046508112,1046508127,DE
-1046508128,1046508159,ES
-1046508160,1046508223,DE
-1046508224,1046508287,GB
-1046508288,1046508303,DE
-1046508304,1046508319,GB
-1046508320,1046508471,DE
-1046508472,1046508479,FR
-1046508480,1046508495,DE
-1046508496,1046508527,GB
-1046508528,1046508543,FR
-1046508544,1046508559,ES
-1046508560,1046508583,GB
-1046508584,1046508591,DE
-1046508592,1046508607,ES
-1046508608,1046508623,FR
-1046508624,1046511615,GB
-1046511616,1046516287,DE
-1046516288,1046516735,GB
-1046516736,1046516751,DE
-1046516752,1046516991,GB
-1046516992,1046517031,DE
-1046517032,1046517039,GB
-1046517040,1046517087,DE
-1046517088,1046517759,GB
-1046517760,1046518271,DE
-1046518272,1046518783,GB
-1046518784,1046519039,DE
-1046519040,1046519167,GB
-1046519168,1046519607,DE
-1046519608,1046519623,GB
-1046519624,1046519799,DE
-1046519800,1046524159,GB
-1046524160,1046525183,DE
-1046525184,1046525215,GB
-1046525216,1046525247,DE
-1046525248,1046525311,GB
-1046525312,1046525343,DE
-1046525344,1046525439,GB
-1046525440,1046525695,DE
-1046525696,1046526591,GB
-1046526592,1046526599,DE
-1046526600,1046526631,GB
-1046526632,1046526635,DE
-1046526636,1046526719,GB
-1046526720,1046527487,DE
-1046527488,1046527743,GB
-1046527744,1046527999,DE
-1046528000,1046528255,GB
-1046528256,1046528287,DE
-1046528288,1046528319,GB
-1046528320,1046528335,DE
-1046528336,1046528391,GB
-1046528392,1046528399,DE
-1046528400,1046528459,GB
-1046528460,1046528463,DE
-1046528464,1046528471,GB
-1046528472,1046528479,DE
-1046528480,1046528487,GB
-1046528488,1046528495,DE
-1046528496,1046528519,GB
-1046528520,1046528527,DE
-1046528528,1046528543,GB
-1046528544,1046528559,DE
-1046528560,1046528575,GB
-1046528576,1046528587,DE
-1046528588,1046528599,GB
-1046528600,1046528603,DE
-1046528604,1046528607,GB
-1046528608,1046528639,DE
-1046528640,1046528703,GB
-1046528704,1046528767,DE
-1046528768,1046530047,GB
-1046530048,1046531327,DE
-1046531328,1046531839,GB
+1046484512,1046485303,GB
+1046485304,1046485311,DE
+1046485312,1046485903,GB
+1046485904,1046485911,DE
+1046485912,1046487289,GB
+1046487290,1046487290,DE
+1046487291,1046487551,GB
+1046487552,1046487807,DE
+1046487808,1046488319,GB
+1046488320,1046488575,DE
+1046488576,1046489087,GB
+1046489088,1046489119,DE
+1046489120,1046489391,GB
+1046489392,1046489407,IT
+1046489408,1046489471,GB
+1046489472,1046489487,ES
+1046489488,1046489503,GB
+1046489504,1046489519,DE
+1046489520,1046492471,GB
+1046492472,1046492479,DE
+1046492480,1046492719,GB
+1046492720,1046492727,DE
+1046492728,1046493015,GB
+1046493016,1046493023,DE
+1046493024,1046493039,GB
+1046493040,1046493047,DE
+1046493048,1046493063,GB
+1046493064,1046493071,DE
+1046493072,1046493983,GB
+1046493984,1046493999,DE
+1046494000,1046494191,GB
+1046494192,1046494199,DE
+1046494200,1046495127,GB
+1046495128,1046495135,DE
+1046495136,1046495415,GB
+1046495416,1046495423,DE
+1046495424,1046495607,GB
+1046495608,1046495615,DE
+1046495616,1046495719,GB
+1046495720,1046495727,DE
+1046495728,1046495767,GB
+1046495768,1046495775,DE
+1046495776,1046495911,GB
+1046495912,1046495919,DE
+1046495920,1046495983,GB
+1046495984,1046495991,DE
+1046495992,1046497807,GB
+1046497808,1046497815,DE
+1046497816,1046498135,GB
+1046498136,1046498143,DE
+1046498144,1046498215,GB
+1046498216,1046498223,DE
+1046498224,1046498303,GB
+1046498304,1046498319,DE
+1046498320,1046498687,GB
+1046498688,1046498695,DE
+1046498696,1046498799,GB
+1046498800,1046498807,DE
+1046498808,1046503095,GB
+1046503096,1046503103,DE
+1046503104,1046504447,GB
+1046504448,1046508543,DE
+1046508544,1046511615,GB
+1046511616,1046515711,DE
+1046515712,1046519615,GB
+1046519616,1046519623,AT
+1046519624,1046525183,GB
+1046525184,1046525695,DE
+1046525696,1046529023,GB
+1046529024,1046530047,DE
+1046530048,1046531839,GB
1046531840,1046532095,DE
-1046532096,1046534015,GB
-1046534016,1046534047,DE
-1046534048,1046534655,GB
-1046534656,1046534743,DE
-1046534744,1046534847,GB
-1046534848,1046534895,DE
-1046534896,1046534911,GB
-1046534912,1046535311,DE
-1046535312,1046535359,GB
-1046535360,1046535423,DE
-1046535424,1046535487,GB
-1046535488,1046535551,DE
-1046535552,1046535619,GB
-1046535620,1046535623,DE
-1046535624,1046536023,GB
-1046536024,1046536039,DE
-1046536040,1046536063,GB
-1046536064,1046536151,DE
-1046536152,1046536159,GB
-1046536160,1046536167,DE
-1046536168,1046536191,GB
-1046536192,1046536199,DE
-1046536200,1046536211,GB
-1046536212,1046536215,DE
-1046536216,1046536255,GB
-1046536256,1046536271,DE
-1046536272,1046536279,GB
-1046536280,1046536283,DE
-1046536284,1046536287,GB
-1046536288,1046536295,DE
-1046536296,1046536319,GB
-1046536320,1046536351,DE
-1046536352,1046536663,GB
-1046536664,1046536667,DE
-1046536668,1046536959,GB
-1046536960,1046537023,DE
-1046537024,1046537055,GB
-1046537056,1046537071,DE
-1046537072,1046537087,GB
-1046537088,1046537151,DE
-1046537152,1046537215,GB
-1046537216,1046537727,DE
-1046537728,1046537983,GB
-1046537984,1046538239,DE
-1046538240,1046538431,GB
-1046538432,1046538447,DE
-1046538448,1046538463,GB
-1046538464,1046538495,DE
-1046538496,1046538751,GB
-1046538752,1046539775,DE
-1046539776,1046540031,GB
-1046540032,1046540287,DE
-1046540288,1046540543,GB
-1046540544,1046541567,DE
-1046541568,1046541631,GB
-1046541632,1046541695,DE
-1046541696,1046541727,GB
-1046541728,1046541759,DE
-1046541760,1046541767,GB
-1046541768,1046541775,DE
-1046541776,1046541807,GB
-1046541808,1046543103,DE
-1046543104,1046543263,GB
-1046543264,1046543295,DE
-1046543296,1046543327,GB
-1046543328,1046543343,DE
-1046543344,1046543359,GB
-1046543360,1046543615,DE
-1046543616,1046544127,GB
-1046544128,1046544383,DE
+1046532096,1046533375,GB
+1046533376,1046533383,DE
+1046533384,1046535295,GB
+1046535296,1046535311,DE
+1046535312,1046535439,GB
+1046535440,1046535447,DE
+1046535448,1046537023,GB
+1046537024,1046537039,DE
+1046537040,1046538751,GB
+1046538752,1046539007,DE
+1046539008,1046543209,GB
+1046543210,1046543210,DE
+1046543211,1046543343,GB
+1046543344,1046543359,DE
+1046543360,1046544383,GB
1046544384,1046560767,IT
-1046560768,1046561327,ES
-1046561328,1046561335,IT
-1046561336,1046570591,ES
-1046570592,1046570607,CH
-1046570608,1046585343,ES
+1046560768,1046585343,ES
1046585344,1046609919,NO
1046609920,1046675455,IT
1046675456,1046708223,ES
@@ -24447,9 +8870,7 @@
1046757376,1046765567,IT
1046765568,1046773759,ES
1046773760,1046781951,FR
-1046781952,1046790143,GB
-1046790144,1046791167,US
-1046791168,1046798335,GB
+1046781952,1046798335,GB
1046798336,1046806527,HU
1046806528,1046814719,IT
1046814720,1046822911,SE
@@ -24457,97 +8878,7 @@
1046839296,1046847487,BA
1046847488,1046855679,ES
1046855680,1046872063,NO
-1046872064,1046872583,BE
-1046872584,1046872607,EU
-1046872608,1046872615,BE
-1046872616,1046872975,EU
-1046872976,1046872999,BE
-1046873000,1046873087,EU
-1046873088,1046873279,BE
-1046873280,1046873599,EU
-1046873600,1046878463,BE
-1046878464,1046879255,EU
-1046879256,1046879263,BE
-1046879264,1046879271,EU
-1046879272,1046879311,BE
-1046879312,1046879327,EU
-1046879328,1046879495,BE
-1046879496,1046879503,EU
-1046879504,1046879511,BE
-1046879512,1046879543,EU
-1046879544,1046879551,BE
-1046879552,1046879591,EU
-1046879592,1046879623,BE
-1046879624,1046879647,EU
-1046879648,1046879655,BE
-1046879656,1046879687,EU
-1046879688,1046879695,BE
-1046879696,1046879719,EU
-1046879720,1046879735,BE
-1046879736,1046879775,EU
-1046879776,1046879791,BE
-1046879792,1046879807,EU
-1046879808,1046879831,BE
-1046879832,1046879839,EU
-1046879840,1046879847,BE
-1046879848,1046879895,EU
-1046879896,1046879911,BE
-1046879912,1046879943,EU
-1046879944,1046879959,BE
-1046879960,1046879967,EU
-1046879968,1046880127,BE
-1046880128,1046880135,EU
-1046880136,1046880143,BE
-1046880144,1046880151,EU
-1046880152,1046880191,BE
-1046880192,1046880255,EU
-1046880256,1046880511,BE
-1046880512,1046880519,EU
-1046880520,1046880527,BE
-1046880528,1046880559,EU
-1046880560,1046880567,RO
-1046880568,1046880591,EU
-1046880592,1046880615,BE
-1046880616,1046880639,EU
-1046880640,1046880671,BE
-1046880672,1046880735,EU
-1046880736,1046880759,BE
-1046880760,1046880767,EU
-1046880768,1046880895,DE
-1046880896,1046880903,EU
-1046880904,1046880911,BE
-1046880912,1046880919,EU
-1046880920,1046880935,BE
-1046880936,1046880983,EU
-1046880984,1046881039,BE
-1046881040,1046881055,EU
-1046881056,1046881071,BE
-1046881072,1046881079,EU
-1046881080,1046881087,BE
-1046881088,1046881111,EU
-1046881112,1046881127,BE
-1046881128,1046881135,EU
-1046881136,1046881239,BE
-1046881240,1046881279,EU
-1046881280,1046882047,BE
-1046882048,1046882303,EU
-1046882304,1046884383,BE
-1046884384,1046885375,EU
-1046885376,1046887423,BE
-1046887424,1046887679,EU
-1046887680,1046888447,BE
-1046888448,1046895359,GB
-1046895360,1046896383,EU
-1046896384,1046897663,GB
-1046897664,1046898431,BE
-1046898432,1046898687,EU
-1046898688,1046898943,BE
-1046898944,1046899135,EU
-1046899136,1046899139,BE
-1046899140,1046899167,EU
-1046899168,1046904831,BE
-1046904832,1046906879,SK
-1046906880,1046908927,IR
+1046904832,1046908927,IR
1046908928,1046910975,SE
1046910976,1046913023,IT
1046913024,1046921215,NO
@@ -24566,36 +8897,17 @@
1047166976,1047199743,FR
1047199744,1047265279,DK
1047265280,1047273471,NL
-1047273472,1047277567,DE
-1047277568,1047281663,CZ
+1047273472,1047281663,DE
1047281664,1047289855,TR
-1047289856,1047295351,RS
-1047295352,1047295359,HU
-1047295360,1047298047,RS
-1047298048,1047300095,CH
-1047300096,1047300639,GB
-1047300640,1047302143,CH
-1047302144,1047302159,US
-1047302160,1047302175,GB
-1047302176,1047302191,AU
-1047302192,1047306239,CH
+1047289856,1047298047,RS
+1047298048,1047306239,CH
1047306240,1047314431,PL
1047314432,1047322623,SE
1047322624,1047330815,IT
1047330816,1047339007,RU
-1047339008,1047340279,SE
-1047340280,1047340287,DK
-1047340288,1047340431,SE
-1047340432,1047340439,NO
-1047340440,1047340799,SE
-1047340800,1047341055,NO
-1047341056,1047343871,SE
-1047343872,1047344127,NO
-1047344128,1047346351,SE
-1047346352,1047346359,FI
-1047346360,1047346431,SE
-1047346432,1047346687,FI
-1047346688,1047347199,SE
+1047339008,1047346175,SE
+1047346176,1047346431,FI
+1047346432,1047347199,SE
1047347200,1047363583,DE
1047363584,1047371775,CZ
1047371776,1047373559,RU
@@ -24608,232 +8920,28 @@
1047527424,1047535615,BE
1047535616,1047551999,DE
1047552000,1047560191,RU
-1047560192,1047561151,DE
-1047561152,1047561159,AT
-1047561160,1047561887,DE
-1047561888,1047561891,US
-1047561892,1047563071,DE
-1047563072,1047563135,ES
-1047563136,1047563287,DE
-1047563288,1047563295,CH
-1047563296,1047563303,DE
-1047563304,1047563311,CH
-1047563312,1047563319,DE
-1047563320,1047563323,CH
-1047563324,1047563351,DE
-1047563352,1047563355,CH
-1047563356,1047563363,DE
-1047563364,1047563367,ES
-1047563368,1047563407,DE
-1047563408,1047563411,CH
-1047563412,1047563415,DE
-1047563416,1047563419,BE
-1047563420,1047563431,DE
-1047563432,1047563435,CH
-1047563436,1047563455,DE
-1047563456,1047563463,ES
-1047563464,1047563467,DE
-1047563468,1047563471,CH
-1047563472,1047563555,DE
-1047563556,1047563559,CH
-1047563560,1047565107,DE
-1047565108,1047565111,IT
-1047565112,1047565131,DE
-1047565132,1047565135,GB
-1047565136,1047565279,DE
-1047565280,1047565311,CH
-1047565312,1047565343,DE
-1047565344,1047565359,CH
-1047565360,1047565503,DE
-1047565504,1047565507,CZ
-1047565508,1047565839,DE
-1047565840,1047565887,CH
-1047565888,1047566015,DE
-1047566016,1047566079,CZ
-1047566080,1047566403,DE
-1047566404,1047566415,CH
-1047566416,1047566435,DE
-1047566436,1047566439,CH
-1047566440,1047566451,DE
-1047566452,1047566459,CH
-1047566460,1047566475,DE
-1047566476,1047566479,CH
-1047566480,1047566495,DE
-1047566496,1047566499,CH
-1047566500,1047566519,DE
-1047566520,1047566539,CH
-1047566540,1047566543,DE
-1047566544,1047566547,CH
-1047566548,1047566559,DE
-1047566560,1047566563,CH
-1047566564,1047566871,DE
-1047566872,1047566879,CH
-1047566880,1047566891,DE
-1047566892,1047566903,CH
-1047566904,1047566947,DE
-1047566948,1047566951,AT
-1047566952,1047566963,DE
-1047566964,1047566967,AT
-1047566968,1047566971,CH
-1047566972,1047567015,DE
-1047567016,1047567019,CH
-1047567020,1047567027,DE
-1047567028,1047567031,CH
-1047567032,1047567039,DE
-1047567040,1047567043,AT
-1047567044,1047567047,CH
-1047567048,1047567063,DE
-1047567064,1047567067,CH
-1047567068,1047567071,DE
-1047567072,1047567075,NL
-1047567076,1047567079,DE
-1047567080,1047567083,NL
-1047567084,1047567135,DE
-1047567136,1047567143,GB
-1047567144,1047567147,CH
-1047567148,1047567151,BE
-1047567152,1047567159,CH
-1047567160,1047567163,DE
-1047567164,1047567167,AT
-1047567168,1047567175,CH
-1047567176,1047567211,DE
-1047567212,1047567227,CH
-1047567228,1047567239,DE
-1047567240,1047567243,CH
-1047567244,1047567247,DE
-1047567248,1047567255,CH
-1047567256,1047567283,DE
-1047567284,1047567287,CH
-1047567288,1047567307,DE
-1047567308,1047567311,CH
-1047567312,1047567319,DE
-1047567320,1047567327,CH
-1047567328,1047567343,DE
-1047567344,1047567351,AT
-1047567352,1047567359,DE
-1047567360,1047567375,CH
-1047567376,1047567447,DE
-1047567448,1047567451,CH
-1047567452,1047567463,DE
-1047567464,1047567471,CH
-1047567472,1047567475,DE
-1047567476,1047567483,CH
-1047567484,1047567495,DE
-1047567496,1047567499,CH
-1047567500,1047567535,DE
-1047567536,1047567539,CH
-1047567540,1047567551,DE
-1047567552,1047567555,CH
-1047567556,1047567583,DE
-1047567584,1047567615,CZ
-1047567616,1047567655,DE
-1047567656,1047567659,CH
-1047567660,1047567727,DE
-1047567728,1047567731,BE
-1047567732,1047567735,DE
-1047567736,1047567743,CH
-1047567744,1047567751,DE
-1047567752,1047567755,LU
-1047567756,1047567759,CH
-1047567760,1047567775,DE
-1047567776,1047567807,CH
-1047567808,1047567823,DE
-1047567824,1047567839,CH
-1047567840,1047567847,DE
-1047567848,1047567851,CH
-1047567852,1047567855,BE
-1047567856,1047567871,DE
-1047567872,1047567875,CH
-1047567876,1047567879,AT
-1047567880,1047567883,CH
-1047567884,1047567903,DE
-1047567904,1047567939,CH
-1047567940,1047567983,DE
-1047567984,1047567999,ES
-1047568000,1047568047,DE
-1047568048,1047568051,CH
-1047568052,1047568055,DE
-1047568056,1047568059,CH
-1047568060,1047568187,DE
-1047568188,1047568191,CH
-1047568192,1047568215,DE
-1047568216,1047568219,CH
-1047568220,1047568259,DE
-1047568260,1047568263,AT
-1047568264,1047568363,DE
-1047568364,1047568367,CH
-1047568368,1047568383,DE
+1047560192,1047568383,DE
1047568384,1047576575,NL
1047576576,1047584767,HU
-1047584768,1047592735,NL
-1047592736,1047592743,FR
-1047592744,1047592959,NL
+1047584768,1047592959,NL
1047592960,1047601151,BA
1047601152,1047625727,RU
1047625728,1047633919,NO
1047633920,1047642111,FI
1047642112,1047658495,DE
1047658496,1047724031,EG
-1047724032,1047728127,EU
1047728128,1047732223,SE
-1047732224,1047740415,EU
-1047740416,1047740431,US
-1047740432,1047740447,DE
-1047740448,1047740463,IT
-1047740464,1047740543,SE
-1047740544,1047740671,DE
-1047740672,1047740927,A2
-1047740928,1047781679,EU
-1047781680,1047781695,GB
-1047781696,1047781823,EU
-1047781824,1047781839,SE
-1047781840,1047781847,GB
-1047781848,1047781855,NL
-1047781856,1047781871,DE
-1047781872,1047782695,EU
-1047782696,1047782703,GB
-1047782704,1047782751,SE
-1047782752,1047782783,NO
-1047782784,1047782815,FI
-1047782816,1047782831,SE
-1047782832,1047782847,EU
-1047782848,1047782911,SE
-1047782912,1047785471,EU
-1047785472,1047788031,DE
-1047788032,1047788287,SE
-1047788288,1047788543,NL
-1047788544,1047789055,GB
-1047789056,1047789311,AT
-1047789312,1047789375,EU
-1047789376,1047789383,GB
-1047789384,1047789407,EU
-1047789408,1047789423,DE
-1047789424,1047789439,EU
-1047789440,1047789471,SE
-1047789472,1047789535,EU
-1047789536,1047789567,DE
-1047789568,1047806031,AT
-1047806032,1047806047,IT
-1047806048,1047822335,AT
-1047822336,1047835039,DE
-1047835040,1047835055,US
-1047835056,1047838719,DE
+1047787520,1047787775,ES
+1047789568,1047822335,AT
+1047822336,1047838719,DE
1047838720,1047846911,DK
1047846912,1047855103,SE
1047855104,1047863295,DE
1047863296,1047871487,EG
1047871488,1047887871,RU
1047887872,1047920639,ES
-1047920640,1047941119,RU
-1047941120,1047941375,GB
-1047941376,1047986175,RU
-1047986176,1047997439,SE
-1047997440,1047997503,NO
-1047997504,1048011775,SE
-1048011776,1048012031,EU
-1048012032,1048012383,SE
-1048012384,1048012391,DE
-1048012392,1048051711,SE
+1047920640,1047986175,RU
+1047986176,1048051711,SE
1048051712,1048117247,SA
1048117248,1048125439,GB
1048125440,1048133631,FI
@@ -24843,12 +8951,10 @@
1048182784,1048184831,UA
1048184832,1048186879,FR
1048186880,1048188927,LV
-1048188928,1048190975,BE
-1048190976,1048193023,UA
1048193024,1048195071,RO
1048195072,1048197119,RU
1048197120,1048201215,UA
-1048201216,1048203263,EU
+1048201216,1048203263,PL
1048203264,1048205311,DE
1048205312,1048209407,RU
1048209408,1048211455,UA
@@ -24861,61 +8967,25 @@
1048225792,1048227839,CZ
1048227840,1048233983,RU
1048233984,1048236031,UA
-1048236032,1048240127,RU
+1048236032,1048238079,RU
1048242176,1048244223,PL
1048244224,1048246271,RU
1048246272,1048248319,NO
1048248320,1048313855,IT
1048313856,1048510463,GB
-1048510464,1048537087,SE
-1048537088,1048539135,DK
-1048539136,1048575999,SE
+1048510464,1048575999,SE
1048576000,1048584191,DE
1048584192,1048592383,IL
1048592384,1048600575,IT
-1048600576,1048601599,UA
-1048601600,1048602111,RU
-1048602112,1048602223,PL
-1048602224,1048604671,UA
-1048604672,1048604687,EE
-1048604688,1048604751,UA
-1048604752,1048604759,EE
-1048604760,1048604927,UA
-1048604928,1048604945,LT
-1048604946,1048604963,UA
-1048604964,1048604967,LT
-1048604968,1048604971,UA
-1048604972,1048604991,LT
-1048604992,1048605071,UA
-1048605072,1048605079,LT
-1048605080,1048605103,UA
-1048605104,1048605119,LT
-1048605120,1048605695,UA
-1048605696,1048606719,EE
-1048606720,1048607231,UA
-1048607232,1048607503,EE
-1048607504,1048607743,UA
-1048607744,1048607759,EE
-1048607760,1048607775,UA
-1048607776,1048607839,EE
-1048607840,1048608255,UA
-1048608256,1048608287,RU
-1048608288,1048608671,UA
-1048608672,1048608703,EE
-1048608704,1048608711,UA
-1048608712,1048608727,EE
-1048608728,1048608731,UA
-1048608732,1048608767,EE
-1048608768,1048611583,GB
-1048611584,1048611839,FR
-1048611840,1048615423,GB
-1048615424,1048615487,US
-1048615488,1048616959,GB
-1048616960,1048617215,A2
+1048600576,1048603391,UA
+1048603392,1048603647,LV
+1048603648,1048608767,UA
+1048608768,1048616959,GB
+1048616960,1048617215,DE
1048617216,1048618751,KE
-1048618752,1048619007,A2
+1048618752,1048619007,DE
1048619008,1048621055,KE
-1048621056,1048625151,US
+1048621056,1048625151,DE
1048625152,1048633343,GB
1048633344,1048641535,NO
1048641536,1048649727,FR
@@ -24925,1301 +8995,34 @@
1048682496,1048690687,FR
1048690688,1048707071,PL
1048707072,1048772607,GB
-1048772608,1048838143,NL
-1048838144,1048838175,DE
-1048838176,1048838207,PL
-1048838208,1048838239,NL
-1048838240,1048839935,DE
-1048839936,1048839983,NL
-1048839984,1048839991,DE
-1048839992,1048840055,NL
-1048840056,1048840063,DE
-1048840064,1048840103,NL
-1048840104,1048840111,DE
-1048840112,1048840703,NL
-1048840704,1048843263,DE
-1048843264,1048843311,NL
-1048843312,1048843319,DE
-1048843320,1048843383,NL
-1048843384,1048843391,DE
-1048843392,1048843575,NL
-1048843576,1048843583,DE
-1048843584,1048843599,NL
-1048843600,1048843607,DE
-1048843608,1048843703,NL
-1048843704,1048843711,DE
-1048843712,1048843727,NL
-1048843728,1048843735,DE
-1048843736,1048843951,NL
-1048843952,1048843959,DE
-1048843960,1048843983,NL
-1048843984,1048843991,DE
-1048843992,1048844031,NL
-1048844032,1048844039,DE
-1048844040,1048844119,NL
-1048844120,1048844127,DE
-1048844128,1048844263,NL
-1048844264,1048844271,DE
-1048844272,1048844287,NL
-1048844288,1048844319,DE
-1048844320,1048844351,NL
-1048844352,1048845567,DE
-1048845568,1048845623,NL
-1048845624,1048845631,DE
-1048845632,1048845663,NL
-1048845664,1048845671,DE
-1048845672,1048845703,NL
-1048845704,1048845711,DE
-1048845712,1048845759,NL
-1048845760,1048845767,DE
-1048845768,1048845855,NL
-1048845856,1048845863,DE
-1048845864,1048845903,NL
-1048845904,1048845911,DE
-1048845912,1048846343,NL
-1048846344,1048846351,DE
-1048846352,1048846383,NL
-1048846384,1048846391,DE
-1048846392,1048846575,NL
-1048846576,1048846591,DE
-1048846592,1048846647,NL
-1048846648,1048846663,DE
-1048846664,1048846687,NL
-1048846688,1048846695,DE
-1048846696,1048846719,NL
-1048846720,1048846727,DE
-1048846728,1048846847,NL
-1048846848,1048847359,DE
-1048847360,1048847423,NL
-1048847424,1048847431,DE
-1048847432,1048847455,NL
-1048847456,1048847463,DE
-1048847464,1048847807,NL
-1048847808,1048847815,DE
-1048847816,1048847847,NL
-1048847848,1048847855,DE
-1048847856,1048847863,NL
-1048847864,1048847871,DE
-1048847872,1048847927,NL
-1048847928,1048847935,DE
-1048847936,1048848111,NL
-1048848112,1048848127,DE
-1048848128,1048848135,NL
-1048848136,1048848143,DE
-1048848144,1048848223,NL
-1048848224,1048848231,DE
-1048848232,1048848439,NL
-1048848440,1048848447,DE
-1048848448,1048848479,NL
-1048848480,1048848487,DE
-1048848488,1048848551,NL
-1048848552,1048848559,DE
-1048848560,1048848591,NL
-1048848592,1048848599,DE
-1048848600,1048848623,NL
-1048848624,1048848631,DE
-1048848632,1048848703,NL
-1048848704,1048848711,DE
-1048848712,1048848735,NL
-1048848736,1048848743,DE
-1048848744,1048848831,NL
-1048848832,1048848839,DE
-1048848840,1048848895,NL
-1048848896,1048849407,DE
-1048849408,1048849559,NL
-1048849560,1048849567,DE
-1048849568,1048849599,NL
-1048849600,1048849607,DE
-1048849608,1048849863,NL
-1048849864,1048849871,DE
-1048849872,1048849895,NL
-1048849896,1048849903,DE
-1048849904,1048850015,NL
-1048850016,1048850023,DE
-1048850024,1048850063,NL
-1048850064,1048850071,DE
-1048850072,1048850151,NL
-1048850152,1048850159,DE
-1048850160,1048850711,NL
-1048850712,1048850719,DE
-1048850720,1048850959,NL
-1048850960,1048850967,DE
-1048850968,1048851015,NL
-1048851016,1048851023,DE
-1048851024,1048851031,NL
-1048851032,1048851039,DE
-1048851040,1048851151,NL
-1048851152,1048851159,DE
-1048851160,1048851223,NL
-1048851224,1048851231,DE
-1048851232,1048851471,NL
-1048851472,1048851479,DE
-1048851480,1048851503,NL
-1048851504,1048851511,DE
-1048851512,1048851591,NL
-1048851592,1048851607,DE
-1048851608,1048851655,NL
-1048851656,1048851663,DE
-1048851664,1048851679,NL
-1048851680,1048851687,DE
-1048851688,1048851703,NL
-1048851704,1048851711,DE
-1048851712,1048851735,NL
-1048851736,1048851751,DE
-1048851752,1048852039,NL
-1048852040,1048852047,DE
-1048852048,1048852335,NL
-1048852336,1048852343,DE
-1048852344,1048852495,NL
-1048852496,1048852503,DE
-1048852504,1048852607,NL
-1048852608,1048852615,DE
-1048852616,1048852647,NL
-1048852648,1048852655,DE
-1048852656,1048852783,NL
-1048852784,1048852799,DE
-1048852800,1048852871,NL
-1048852872,1048852879,DE
-1048852880,1048853031,NL
-1048853032,1048853039,DE
-1048853040,1048853127,NL
-1048853128,1048853135,DE
-1048853136,1048853143,NL
-1048853144,1048853151,DE
-1048853152,1048853183,NL
-1048853184,1048853199,DE
-1048853200,1048853279,NL
-1048853280,1048853287,DE
-1048853288,1048853295,NL
-1048853296,1048853303,DE
-1048853304,1048853319,NL
-1048853320,1048853335,DE
-1048853336,1048853439,NL
-1048853440,1048853447,DE
-1048853448,1048853807,NL
-1048853808,1048853815,DE
-1048853816,1048853863,NL
-1048853864,1048853871,DE
-1048853872,1048854055,NL
-1048854056,1048854063,DE
-1048854064,1048854391,NL
-1048854392,1048854407,DE
-1048854408,1048854527,NL
-1048854528,1048855039,DE
-1048855040,1048855047,NL
-1048855048,1048855055,DE
-1048855056,1048855095,NL
-1048855096,1048855103,DE
-1048855104,1048855215,NL
-1048855216,1048855223,DE
-1048855224,1048855263,NL
-1048855264,1048855279,DE
-1048855280,1048855303,NL
-1048855304,1048855311,DE
-1048855312,1048855327,NL
-1048855328,1048855335,DE
-1048855336,1048855487,NL
-1048855488,1048855495,DE
-1048855496,1048855687,NL
-1048855688,1048855695,DE
-1048855696,1048855703,NL
-1048855704,1048855711,DE
-1048855712,1048855895,NL
-1048855896,1048855911,DE
-1048855912,1048855935,NL
-1048855936,1048855943,DE
-1048855944,1048856015,NL
-1048856016,1048856031,DE
-1048856032,1048856087,NL
-1048856088,1048856103,DE
-1048856104,1048856111,NL
-1048856112,1048856119,DE
-1048856120,1048856135,NL
-1048856136,1048856151,DE
-1048856152,1048856183,NL
-1048856184,1048856191,DE
-1048856192,1048856359,NL
-1048856360,1048856367,DE
-1048856368,1048856375,NL
-1048856376,1048856383,DE
-1048856384,1048856455,NL
-1048856456,1048856463,DE
-1048856464,1048856559,NL
-1048856560,1048856567,DE
-1048856568,1048856607,NL
-1048856608,1048856615,DE
-1048856616,1048856687,NL
-1048856688,1048856695,DE
-1048856696,1048856839,NL
-1048856840,1048856847,DE
-1048856848,1048856919,NL
-1048856920,1048856927,DE
-1048856928,1048856991,NL
-1048856992,1048857007,DE
-1048857008,1048857207,NL
-1048857208,1048857215,DE
-1048857216,1048857263,NL
-1048857264,1048857271,DE
-1048857272,1048857343,NL
-1048857344,1048857351,DE
-1048857352,1048857543,NL
-1048857544,1048857551,DE
-1048857552,1048857735,NL
-1048857736,1048857743,DE
-1048857744,1048857767,NL
-1048857768,1048857775,DE
-1048857776,1048857783,NL
-1048857784,1048857799,DE
-1048857800,1048857847,NL
-1048857848,1048857855,DE
-1048857856,1048857983,NL
-1048857984,1048857991,DE
-1048857992,1048858111,NL
-1048858112,1048858623,DE
-1048858624,1048858703,NL
-1048858704,1048858711,DE
-1048858712,1048858783,NL
-1048858784,1048858791,DE
-1048858792,1048858823,NL
-1048858824,1048858831,DE
-1048858832,1048858855,NL
-1048858856,1048858863,DE
-1048858864,1048858967,NL
-1048858968,1048858975,DE
-1048858976,1048859095,NL
-1048859096,1048859103,DE
-1048859104,1048859495,NL
-1048859496,1048859503,DE
-1048859504,1048859519,NL
-1048859520,1048859527,DE
-1048859528,1048859727,NL
-1048859728,1048859735,DE
-1048859736,1048859903,NL
-1048859904,1048859911,DE
-1048859912,1048860311,NL
-1048860312,1048860327,DE
-1048860328,1048860407,NL
-1048860408,1048860415,DE
-1048860416,1048860455,NL
-1048860456,1048860463,DE
-1048860464,1048860487,NL
-1048860488,1048860495,DE
-1048860496,1048860511,NL
-1048860512,1048860519,DE
-1048860520,1048860607,NL
-1048860608,1048860615,DE
-1048860616,1048860703,NL
-1048860704,1048860711,DE
-1048860712,1048860799,NL
-1048860800,1048860807,DE
-1048860808,1048860975,NL
-1048860976,1048860983,DE
-1048860984,1048861031,NL
-1048861032,1048861039,DE
-1048861040,1048861127,NL
-1048861128,1048861135,DE
-1048861136,1048861175,NL
-1048861176,1048861183,DE
-1048861184,1048861383,NL
-1048861384,1048861391,DE
-1048861392,1048861423,NL
-1048861424,1048861439,DE
-1048861440,1048861607,NL
-1048861608,1048861615,DE
-1048861616,1048861663,NL
-1048861664,1048861671,DE
-1048861672,1048861767,NL
-1048861768,1048861775,DE
-1048861776,1048861839,NL
-1048861840,1048861847,DE
-1048861848,1048862031,NL
-1048862032,1048862039,DE
-1048862040,1048862247,NL
-1048862248,1048862255,DE
-1048862256,1048862287,NL
-1048862288,1048862295,DE
-1048862296,1048862327,NL
-1048862328,1048862335,DE
-1048862336,1048862343,NL
-1048862344,1048862351,DE
-1048862352,1048862391,NL
-1048862392,1048862399,DE
-1048862400,1048862423,NL
-1048862424,1048862431,DE
-1048862432,1048862511,NL
-1048862512,1048862519,DE
-1048862520,1048862623,NL
-1048862624,1048862639,DE
-1048862640,1048862647,NL
-1048862648,1048862655,DE
-1048862656,1048862671,NL
-1048862672,1048862679,DE
-1048862680,1048862711,NL
-1048862712,1048862719,DE
-1048862720,1048862919,NL
-1048862920,1048862927,DE
-1048862928,1048862951,NL
-1048862952,1048862959,DE
-1048862960,1048863055,NL
-1048863056,1048863063,DE
-1048863064,1048863111,NL
-1048863112,1048863119,DE
-1048863120,1048863271,NL
-1048863272,1048863279,DE
-1048863280,1048863287,NL
-1048863288,1048863295,DE
-1048863296,1048863311,NL
-1048863312,1048863327,DE
-1048863328,1048863343,NL
-1048863344,1048863351,DE
-1048863352,1048863359,NL
-1048863360,1048863367,DE
-1048863368,1048863375,NL
-1048863376,1048863383,DE
-1048863384,1048863391,NL
-1048863392,1048863399,DE
-1048863400,1048863575,NL
-1048863576,1048863591,DE
-1048863592,1048863599,NL
-1048863600,1048863607,DE
-1048863608,1048863631,NL
-1048863632,1048863639,DE
-1048863640,1048863743,NL
-1048863744,1048863751,DE
-1048863752,1048863791,NL
-1048863792,1048863807,DE
-1048863808,1048863927,NL
-1048863928,1048863935,DE
-1048863936,1048864071,NL
-1048864072,1048864079,DE
-1048864080,1048864127,NL
-1048864128,1048864135,DE
-1048864136,1048864167,NL
-1048864168,1048864175,DE
-1048864176,1048864223,NL
-1048864224,1048864231,DE
-1048864232,1048864455,NL
-1048864456,1048864463,DE
-1048864464,1048864471,NL
-1048864472,1048864479,DE
-1048864480,1048864775,NL
-1048864776,1048864783,DE
-1048864784,1048864855,NL
-1048864856,1048864863,DE
-1048864864,1048865063,NL
-1048865064,1048865071,DE
-1048865072,1048865255,NL
-1048865256,1048865263,DE
-1048865264,1048865279,NL
-1048865280,1048865791,DE
-1048865792,1048865823,NL
-1048865824,1048865831,DE
-1048865832,1048865903,NL
-1048865904,1048865911,DE
-1048865912,1048865935,NL
-1048865936,1048865943,DE
-1048865944,1048866095,NL
-1048866096,1048866103,DE
-1048866104,1048866151,NL
-1048866152,1048866159,DE
-1048866160,1048866359,NL
-1048866360,1048866367,DE
-1048866368,1048866647,NL
-1048866648,1048866655,DE
-1048866656,1048866887,NL
-1048866888,1048866895,DE
-1048866896,1048867015,NL
-1048867016,1048867023,DE
-1048867024,1048867031,NL
-1048867032,1048867039,DE
-1048867040,1048867207,NL
-1048867208,1048867215,DE
-1048867216,1048867295,NL
-1048867296,1048867303,DE
-1048867304,1048867327,NL
-1048867328,1048868351,DE
-1048868352,1048868391,NL
-1048868392,1048868399,DE
-1048868400,1048868615,NL
-1048868616,1048868623,DE
-1048868624,1048868655,NL
-1048868656,1048868663,DE
-1048868664,1048868743,NL
-1048868744,1048868751,DE
-1048868752,1048868767,NL
-1048868768,1048868775,DE
-1048868776,1048868791,NL
-1048868792,1048868799,DE
-1048868800,1048868823,NL
-1048868824,1048868839,DE
-1048868840,1048869183,NL
-1048869184,1048869191,DE
-1048869192,1048869247,NL
-1048869248,1048869255,DE
-1048869256,1048869263,NL
-1048869264,1048869279,DE
-1048869280,1048869287,NL
-1048869288,1048869295,DE
-1048869296,1048869367,NL
-1048869368,1048869375,DE
-1048869376,1048869479,NL
-1048869480,1048869487,DE
-1048869488,1048869503,NL
-1048869504,1048869519,DE
-1048869520,1048869543,NL
-1048869544,1048869551,DE
-1048869552,1048869615,NL
-1048869616,1048869623,DE
-1048869624,1048869687,NL
-1048869688,1048869695,DE
-1048869696,1048869759,NL
-1048869760,1048869767,DE
-1048869768,1048869775,NL
-1048869776,1048869783,DE
-1048869784,1048869847,NL
-1048869848,1048869863,DE
-1048869864,1048869911,NL
-1048869912,1048869919,DE
-1048869920,1048869951,NL
-1048869952,1048869967,DE
-1048869968,1048869975,NL
-1048869976,1048869983,DE
-1048869984,1048870015,NL
-1048870016,1048870023,DE
-1048870024,1048870031,NL
-1048870032,1048870039,DE
-1048870040,1048870079,NL
-1048870080,1048870095,DE
-1048870096,1048870103,NL
-1048870104,1048870111,DE
-1048870112,1048870127,NL
-1048870128,1048870135,DE
-1048870136,1048870199,NL
-1048870200,1048870207,DE
-1048870208,1048870279,NL
-1048870280,1048870287,DE
-1048870288,1048870399,NL
-1048870400,1048870911,DE
-1048870912,1048871095,NL
-1048871096,1048871103,DE
-1048871104,1048871135,NL
-1048871136,1048871143,DE
-1048871144,1048871223,NL
-1048871224,1048871231,DE
-1048871232,1048871303,NL
-1048871304,1048871311,DE
-1048871312,1048871319,NL
-1048871320,1048871327,DE
-1048871328,1048871935,NL
-1048871936,1048872703,DE
-1048872704,1048872735,NL
-1048872736,1048872743,DE
-1048872744,1048872847,NL
-1048872848,1048872863,DE
-1048872864,1048872975,NL
-1048872976,1048872983,DE
-1048872984,1048873119,NL
-1048873120,1048873127,DE
-1048873128,1048873263,NL
-1048873264,1048873271,DE
-1048873272,1048873287,NL
-1048873288,1048873303,DE
-1048873304,1048873359,NL
-1048873360,1048873367,DE
-1048873368,1048873743,NL
-1048873744,1048873751,DE
-1048873752,1048873791,NL
-1048873792,1048873799,DE
-1048873800,1048873863,NL
-1048873864,1048873871,DE
-1048873872,1048873935,NL
-1048873936,1048873951,DE
-1048873952,1048874295,NL
-1048874296,1048874303,DE
-1048874304,1048874327,NL
-1048874328,1048874335,DE
-1048874336,1048874359,NL
-1048874360,1048874367,DE
-1048874368,1048874415,NL
-1048874416,1048874423,DE
-1048874424,1048874447,NL
-1048874448,1048874455,DE
-1048874456,1048874471,NL
-1048874472,1048874479,DE
-1048874480,1048874535,NL
-1048874536,1048874543,DE
-1048874544,1048874623,NL
-1048874624,1048874639,DE
-1048874640,1048874679,NL
-1048874680,1048874687,DE
-1048874688,1048874703,NL
-1048874704,1048874719,DE
-1048874720,1048874911,NL
-1048874912,1048874919,DE
-1048874920,1048875015,NL
-1048875016,1048875023,DE
-1048875024,1048875143,NL
-1048875144,1048875151,DE
-1048875152,1048875191,NL
-1048875192,1048875199,DE
-1048875200,1048875231,NL
-1048875232,1048875239,DE
-1048875240,1048875311,NL
-1048875312,1048875319,DE
-1048875320,1048875375,NL
-1048875376,1048875383,DE
-1048875384,1048875391,NL
-1048875392,1048875399,DE
-1048875400,1048875487,NL
-1048875488,1048875495,DE
-1048875496,1048875655,NL
-1048875656,1048875663,DE
-1048875664,1048875671,NL
-1048875672,1048875679,DE
-1048875680,1048875687,NL
-1048875688,1048875695,DE
-1048875696,1048875703,NL
-1048875704,1048875711,DE
-1048875712,1048875823,NL
-1048875824,1048875847,DE
-1048875848,1048876015,NL
-1048876016,1048876023,DE
-1048876024,1048876159,NL
-1048876160,1048876167,DE
-1048876168,1048876255,NL
-1048876256,1048876263,DE
-1048876264,1048876327,NL
-1048876328,1048876335,DE
-1048876336,1048876359,NL
-1048876360,1048876367,DE
-1048876368,1048876375,NL
-1048876376,1048876383,DE
-1048876384,1048876527,NL
-1048876528,1048876535,DE
-1048876536,1048876807,NL
-1048876808,1048876815,DE
-1048876816,1048876823,NL
-1048876824,1048876831,DE
-1048876832,1048876839,NL
-1048876840,1048876847,DE
-1048876848,1048876991,NL
-1048876992,1048876999,DE
-1048877000,1048877023,NL
-1048877024,1048877055,DE
-1048877056,1048877071,NL
-1048877072,1048877079,DE
-1048877080,1048877103,NL
-1048877104,1048877111,DE
-1048877112,1048877159,NL
-1048877160,1048877167,DE
-1048877168,1048877191,NL
-1048877192,1048877199,DE
-1048877200,1048877247,NL
-1048877248,1048877263,DE
-1048877264,1048877279,NL
-1048877280,1048877295,DE
-1048877296,1048877303,NL
-1048877304,1048878087,DE
-1048878088,1048878103,NL
-1048878104,1048878111,DE
-1048878112,1048878303,NL
-1048878304,1048878311,DE
-1048878312,1048878335,NL
-1048878336,1048878343,DE
-1048878344,1048878447,NL
-1048878448,1048878455,DE
-1048878456,1048878487,NL
-1048878488,1048878495,DE
-1048878496,1048878543,NL
-1048878544,1048878551,DE
-1048878552,1048878623,NL
-1048878624,1048878631,DE
-1048878632,1048878663,NL
-1048878664,1048878671,DE
-1048878672,1048878703,NL
-1048878704,1048878711,DE
-1048878712,1048878735,NL
-1048878736,1048878743,DE
-1048878744,1048878751,NL
-1048878752,1048878759,DE
-1048878760,1048878815,NL
-1048878816,1048878823,DE
-1048878824,1048878831,NL
-1048878832,1048878839,DE
-1048878840,1048878879,NL
-1048878880,1048878887,DE
-1048878888,1048878919,NL
-1048878920,1048878927,DE
-1048878928,1048878983,NL
-1048878984,1048878991,DE
-1048878992,1048879047,NL
-1048879048,1048879055,DE
-1048879056,1048879063,NL
-1048879064,1048879071,DE
-1048879072,1048879199,NL
-1048879200,1048879207,DE
-1048879208,1048879263,NL
-1048879264,1048879279,DE
-1048879280,1048879319,NL
-1048879320,1048879327,DE
-1048879328,1048879335,NL
-1048879336,1048879343,DE
-1048879344,1048879455,NL
-1048879456,1048879463,DE
-1048879464,1048879527,NL
-1048879528,1048879535,DE
-1048879536,1048879591,NL
-1048879592,1048879599,DE
-1048879600,1048879687,NL
-1048879688,1048879695,DE
-1048879696,1048879991,NL
-1048879992,1048879999,DE
-1048880000,1048880103,NL
-1048880104,1048880111,DE
-1048880112,1048880135,NL
-1048880136,1048880143,DE
-1048880144,1048880247,NL
-1048880248,1048880255,DE
-1048880256,1048880311,NL
-1048880312,1048880327,DE
-1048880328,1048880351,NL
-1048880352,1048880359,DE
-1048880360,1048880639,NL
-1048880640,1048881159,DE
-1048881160,1048881231,NL
-1048881232,1048881239,DE
-1048881240,1048881287,NL
-1048881288,1048881295,DE
-1048881296,1048881543,NL
-1048881544,1048881551,DE
-1048881552,1048881615,NL
-1048881616,1048881639,DE
-1048881640,1048881783,NL
-1048881784,1048881791,DE
-1048881792,1048881815,NL
-1048881816,1048881823,DE
-1048881824,1048881831,NL
-1048881832,1048881839,DE
-1048881840,1048881879,NL
-1048881880,1048881887,DE
-1048881888,1048881903,NL
-1048881904,1048881919,DE
-1048881920,1048881999,NL
-1048882000,1048882007,DE
-1048882008,1048882047,NL
-1048882048,1048882055,DE
-1048882056,1048882071,NL
-1048882072,1048882079,DE
-1048882080,1048882103,NL
-1048882104,1048882111,DE
-1048882112,1048882143,NL
-1048882144,1048882151,DE
-1048882152,1048882167,NL
-1048882168,1048882175,DE
-1048882176,1048882199,NL
-1048882200,1048882207,DE
-1048882208,1048882279,NL
-1048882280,1048882287,DE
-1048882288,1048882311,NL
-1048882312,1048882319,DE
-1048882320,1048882495,NL
-1048882496,1048882503,DE
-1048882504,1048882543,NL
-1048882544,1048882551,DE
-1048882552,1048882575,NL
-1048882576,1048882591,DE
-1048882592,1048882663,NL
-1048882664,1048882679,DE
-1048882680,1048882703,NL
-1048882704,1048882711,DE
-1048882712,1048882743,NL
-1048882744,1048882759,DE
-1048882760,1048882807,NL
-1048882808,1048882815,DE
-1048882816,1048882823,NL
-1048882824,1048882831,DE
-1048882832,1048882847,NL
-1048882848,1048882863,DE
-1048882864,1048882951,NL
-1048882952,1048882959,DE
-1048882960,1048883143,NL
-1048883144,1048883151,DE
-1048883152,1048883167,NL
-1048883168,1048883175,DE
-1048883176,1048883279,NL
-1048883280,1048883287,DE
-1048883288,1048883319,NL
-1048883320,1048883327,DE
-1048883328,1048883351,NL
-1048883352,1048883359,DE
-1048883360,1048883383,NL
-1048883384,1048883391,DE
-1048883392,1048883399,NL
-1048883400,1048883407,DE
-1048883408,1048883455,NL
-1048883456,1048883463,DE
-1048883464,1048883679,NL
-1048883680,1048883687,DE
-1048883688,1048883711,NL
-1048883712,1048883719,DE
-1048883720,1048883735,NL
-1048883736,1048883743,DE
-1048883744,1048883871,NL
-1048883872,1048883879,DE
-1048883880,1048883999,NL
-1048884000,1048884007,DE
-1048884008,1048884111,NL
-1048884112,1048884119,DE
-1048884120,1048884183,NL
-1048884184,1048884191,DE
-1048884192,1048884247,NL
-1048884248,1048884255,DE
-1048884256,1048884279,NL
-1048884280,1048884295,DE
-1048884296,1048884535,NL
-1048884536,1048884543,DE
-1048884544,1048884639,NL
-1048884640,1048884647,DE
-1048884648,1048884711,NL
-1048884712,1048884727,DE
-1048884728,1048884911,NL
-1048884912,1048884919,DE
-1048884920,1048884975,NL
-1048884976,1048884999,DE
-1048885000,1048885111,NL
-1048885112,1048885127,DE
-1048885128,1048885175,NL
-1048885176,1048885183,DE
-1048885184,1048885343,NL
-1048885344,1048885351,DE
-1048885352,1048885471,NL
-1048885472,1048885479,DE
-1048885480,1048885575,NL
-1048885576,1048885583,DE
-1048885584,1048885655,NL
-1048885656,1048885663,DE
-1048885664,1048885703,NL
-1048885704,1048885711,DE
-1048885712,1048885767,NL
-1048885768,1048885775,DE
-1048885776,1048885815,NL
-1048885816,1048885823,DE
-1048885824,1048885839,NL
-1048885840,1048885847,DE
-1048885848,1048885903,NL
-1048885904,1048885911,DE
-1048885912,1048885943,NL
-1048885944,1048885959,DE
-1048885960,1048886095,NL
-1048886096,1048886103,DE
-1048886104,1048886167,NL
-1048886168,1048886175,DE
-1048886176,1048886199,NL
-1048886200,1048886207,DE
-1048886208,1048886239,NL
-1048886240,1048886247,DE
-1048886248,1048886343,NL
-1048886344,1048886351,DE
-1048886352,1048886367,NL
-1048886368,1048886375,DE
-1048886376,1048886431,NL
-1048886432,1048886439,DE
-1048886440,1048886463,NL
-1048886464,1048886471,DE
-1048886472,1048886583,NL
-1048886584,1048886591,DE
-1048886592,1048886615,NL
-1048886616,1048886623,DE
-1048886624,1048886871,NL
-1048886872,1048886879,DE
-1048886880,1048886887,NL
-1048886888,1048886911,DE
-1048886912,1048887039,NL
-1048887040,1048887047,DE
-1048887048,1048887063,NL
-1048887064,1048887071,DE
-1048887072,1048887263,NL
-1048887264,1048887271,DE
-1048887272,1048887935,NL
-1048887936,1048887999,DE
-1048888000,1048888959,NL
-1048888960,1048889087,DE
-1048889088,1048889279,NL
-1048889280,1048889311,DE
-1048889312,1048891183,NL
-1048891184,1048891191,DE
-1048891192,1048891263,NL
-1048891264,1048891271,DE
-1048891272,1048891391,NL
-1048891392,1048891399,DE
-1048891400,1048891599,NL
-1048891600,1048891607,DE
-1048891608,1048891775,NL
-1048891776,1048891791,DE
-1048891792,1048891823,NL
-1048891824,1048891831,DE
-1048891832,1048891911,NL
-1048891912,1048891919,DE
-1048891920,1048892087,NL
-1048892088,1048892095,DE
-1048892096,1048892183,NL
-1048892184,1048892199,DE
-1048892200,1048892239,NL
-1048892240,1048892247,DE
-1048892248,1048892311,NL
-1048892312,1048892319,DE
-1048892320,1048892343,NL
-1048892344,1048892351,DE
-1048892352,1048892367,NL
-1048892368,1048892375,DE
-1048892376,1048892391,NL
-1048892392,1048892399,DE
-1048892400,1048892447,NL
-1048892448,1048892455,DE
-1048892456,1048892527,NL
-1048892528,1048892535,DE
-1048892536,1048892559,NL
-1048892560,1048892567,DE
-1048892568,1048892575,NL
-1048892576,1048892583,DE
-1048892584,1048892679,NL
-1048892680,1048892687,DE
-1048892688,1048892815,NL
-1048892816,1048892823,DE
-1048892824,1048892863,NL
-1048892864,1048892871,DE
-1048892872,1048892895,NL
-1048892896,1048892903,DE
-1048892904,1048892927,NL
-1048892928,1048892943,DE
-1048892944,1048892983,NL
-1048892984,1048892991,DE
-1048892992,1048893023,NL
-1048893024,1048893031,DE
-1048893032,1048893063,NL
-1048893064,1048893071,DE
-1048893072,1048893111,NL
-1048893112,1048893127,DE
-1048893128,1048893455,NL
-1048893456,1048893463,DE
-1048893464,1048893591,NL
-1048893592,1048893607,DE
-1048893608,1048893655,NL
-1048893656,1048893663,DE
-1048893664,1048893703,NL
-1048893704,1048893711,DE
-1048893712,1048893719,NL
-1048893720,1048893727,DE
-1048893728,1048893879,NL
-1048893880,1048893887,DE
-1048893888,1048893919,NL
-1048893920,1048893927,DE
-1048893928,1048893943,NL
-1048893944,1048893951,DE
-1048893952,1048893983,NL
-1048893984,1048893991,DE
-1048893992,1048894023,NL
-1048894024,1048894031,DE
-1048894032,1048894039,NL
-1048894040,1048894047,DE
-1048894048,1048894071,NL
-1048894072,1048894079,DE
-1048894080,1048894103,NL
-1048894104,1048894111,DE
-1048894112,1048894215,NL
-1048894216,1048894223,DE
-1048894224,1048894455,NL
-1048894456,1048894463,DE
-1048894464,1048894471,NL
-1048894472,1048894479,DE
-1048894480,1048894487,NL
-1048894488,1048894495,DE
-1048894496,1048894607,NL
-1048894608,1048894623,DE
-1048894624,1048894631,NL
-1048894632,1048894639,DE
-1048894640,1048894671,NL
-1048894672,1048894679,DE
-1048894680,1048894735,NL
-1048894736,1048894743,DE
-1048894744,1048894855,NL
-1048894856,1048894863,DE
-1048894864,1048894887,NL
-1048894888,1048894911,DE
-1048894912,1048895031,NL
-1048895032,1048895039,DE
-1048895040,1048895079,NL
-1048895080,1048895087,DE
-1048895088,1048895263,NL
-1048895264,1048895279,DE
-1048895280,1048895439,NL
-1048895440,1048895447,DE
-1048895448,1048895455,NL
-1048895456,1048895463,DE
-1048895464,1048895551,NL
-1048895552,1048895559,DE
-1048895560,1048895623,NL
-1048895624,1048895631,DE
-1048895632,1048895647,NL
-1048895648,1048895655,DE
-1048895656,1048895727,NL
-1048895728,1048895735,DE
-1048895736,1048895967,NL
-1048895968,1048895975,DE
-1048895976,1048896079,NL
-1048896080,1048896087,DE
-1048896088,1048896175,NL
-1048896176,1048896183,DE
-1048896184,1048896231,NL
-1048896232,1048896239,DE
-1048896240,1048896271,NL
-1048896272,1048896287,DE
-1048896288,1048896319,NL
-1048896320,1048896327,DE
-1048896328,1048896343,NL
-1048896344,1048896351,DE
-1048896352,1048896367,NL
-1048896368,1048896391,DE
-1048896392,1048896455,NL
-1048896456,1048896463,DE
-1048896464,1048896479,NL
-1048896480,1048896487,DE
-1048896488,1048896495,NL
-1048896496,1048896511,DE
-1048896512,1048896519,NL
-1048896520,1048896535,DE
-1048896536,1048896591,NL
-1048896592,1048896607,DE
-1048896608,1048896647,NL
-1048896648,1048896655,DE
-1048896656,1048896671,NL
-1048896672,1048896679,DE
-1048896680,1048896687,NL
-1048896688,1048896695,DE
-1048896696,1048896735,NL
-1048896736,1048896743,DE
-1048896744,1048896871,NL
-1048896872,1048896879,DE
-1048896880,1048896943,NL
-1048896944,1048896959,DE
-1048896960,1048896967,NL
-1048896968,1048896975,DE
-1048896976,1048897071,NL
-1048897072,1048897079,DE
-1048897080,1048897111,NL
-1048897112,1048897135,DE
-1048897136,1048897207,NL
-1048897208,1048897223,DE
-1048897224,1048897231,NL
-1048897232,1048897247,DE
-1048897248,1048897271,NL
-1048897272,1048897279,DE
-1048897280,1048897295,NL
-1048897296,1048897311,DE
-1048897312,1048897319,NL
-1048897320,1048897327,DE
-1048897328,1048897367,NL
-1048897368,1048897375,DE
-1048897376,1048897463,NL
-1048897464,1048897471,DE
-1048897472,1048897495,NL
-1048897496,1048897503,DE
-1048897504,1048897607,NL
-1048897608,1048897615,DE
-1048897616,1048897679,NL
-1048897680,1048897695,DE
-1048897696,1048897735,NL
-1048897736,1048897751,DE
-1048897752,1048897895,NL
-1048897896,1048897903,DE
-1048897904,1048897975,NL
-1048897976,1048897983,DE
-1048897984,1048898327,NL
-1048898328,1048898335,DE
-1048898336,1048898359,NL
-1048898360,1048898367,DE
-1048898368,1048898447,NL
-1048898448,1048898455,DE
-1048898456,1048898543,NL
-1048898544,1048898551,DE
-1048898552,1048898663,NL
-1048898664,1048898679,DE
-1048898680,1048898719,NL
-1048898720,1048898727,DE
-1048898728,1048898943,NL
-1048898944,1048898951,DE
-1048898952,1048898991,NL
-1048898992,1048898999,DE
-1048899000,1048899047,NL
-1048899048,1048899063,DE
-1048899064,1048899095,NL
-1048899096,1048899103,DE
-1048899104,1048899271,NL
-1048899272,1048899279,DE
-1048899280,1048899287,NL
-1048899288,1048899319,DE
-1048899320,1048899335,NL
-1048899336,1048899343,DE
-1048899344,1048899487,NL
-1048899488,1048899495,DE
-1048899496,1048899591,NL
-1048899592,1048899599,DE
-1048899600,1048899751,NL
-1048899752,1048899767,DE
-1048899768,1048899831,NL
-1048899832,1048899839,DE
-1048899840,1048900071,NL
-1048900072,1048900079,DE
-1048900080,1048900127,NL
-1048900128,1048900143,DE
-1048900144,1048900223,NL
-1048900224,1048900231,DE
-1048900232,1048900311,NL
-1048900312,1048900327,DE
-1048900328,1048900343,NL
-1048900344,1048900351,DE
-1048900352,1048900367,NL
-1048900368,1048900375,DE
-1048900376,1048900391,NL
-1048900392,1048900399,DE
-1048900400,1048900447,NL
-1048900448,1048900455,DE
-1048900456,1048900479,NL
-1048900480,1048900487,DE
-1048900488,1048900527,NL
-1048900528,1048900535,DE
-1048900536,1048900703,NL
-1048900704,1048900711,DE
-1048900712,1048900759,NL
-1048900760,1048900767,DE
-1048900768,1048900831,NL
-1048900832,1048900839,DE
-1048900840,1048900847,NL
-1048900848,1048900855,DE
-1048900856,1048900935,NL
-1048900936,1048900951,DE
-1048900952,1048901167,NL
-1048901168,1048901175,DE
-1048901176,1048901199,NL
-1048901200,1048901207,DE
-1048901208,1048901247,NL
-1048901248,1048901255,DE
-1048901256,1048901311,NL
-1048901312,1048901319,DE
-1048901320,1048901327,NL
-1048901328,1048901335,DE
-1048901336,1048901591,NL
-1048901592,1048901599,DE
-1048901600,1048901615,NL
-1048901616,1048901623,DE
-1048901624,1048902007,NL
-1048902008,1048902015,DE
-1048902016,1048902071,NL
-1048902072,1048902079,DE
-1048902080,1048902103,NL
-1048902104,1048902111,DE
-1048902112,1048902119,NL
-1048902120,1048902127,DE
-1048902128,1048902335,NL
-1048902336,1048902343,DE
-1048902344,1048902359,NL
-1048902360,1048902367,DE
-1048902368,1048902391,NL
-1048902392,1048902399,DE
-1048902400,1048902447,NL
-1048902448,1048902455,DE
-1048902456,1048902527,NL
-1048902528,1048902535,DE
-1048902536,1048902543,NL
-1048902544,1048902551,DE
-1048902552,1048902583,NL
-1048902584,1048902591,DE
-1048902592,1048902639,NL
-1048902640,1048902647,DE
-1048902648,1048902671,NL
-1048902672,1048902679,DE
-1048902680,1048902727,NL
-1048902728,1048902735,DE
-1048902736,1048902783,NL
-1048902784,1048902791,DE
-1048902792,1048902799,NL
-1048902800,1048902807,DE
-1048902808,1048903071,NL
-1048903072,1048903079,DE
-1048903080,1048903095,NL
-1048903096,1048903103,DE
-1048903104,1048903679,NL
+1048772608,1048903679,NL
1048903680,1048911871,GB
1048911872,1048920063,IT
1048920064,1048936447,NL
1048936448,1048944639,PL
1048944640,1048952831,RU
1048952832,1048969215,NL
-1048969216,1048969855,EU
-1048969856,1048969887,DE
-1048969888,1048971063,EU
-1048971064,1048971068,DE
-1048971069,1048971327,EU
-1048971328,1048971391,DE
-1048971392,1048972719,EU
-1048972720,1048972727,DE
-1048972728,1048973439,EU
-1048973440,1048973567,DE
-1048973568,1048974335,EU
-1048974336,1048975183,DE
-1048975184,1048976287,EU
-1048976288,1048976295,DE
-1048976296,1048976296,EU
-1048976297,1048976302,DE
-1048976303,1048976303,EU
-1048976304,1048976319,DE
-1048976320,1048976383,EU
-1048976384,1048976447,DE
-1048976448,1048976511,EU
-1048976512,1048977407,DE
-1048977408,1048978431,EU
-1048978432,1048978943,DE
-1048978944,1048979135,EU
-1048979136,1048979295,DE
-1048979296,1048979455,EU
-1048979456,1048980479,DE
-1048980480,1048980735,EU
-1048980736,1048980791,DE
-1048980792,1048980803,EU
-1048980804,1048980807,DE
-1048980808,1048980815,EU
-1048980816,1048980823,DE
-1048980824,1048980831,EU
-1048980832,1048980959,DE
-1048980960,1048980967,EU
-1048980968,1048980975,DE
-1048980976,1048981503,EU
-1048981504,1048981759,DE
-1048981760,1048981791,EU
-1048981792,1048981823,DE
-1048981824,1048982015,EU
-1048982016,1048982527,DE
-1048982528,1048982783,EU
-1048982784,1048983039,DE
-1048983040,1048983167,EU
-1048983168,1048983423,DE
-1048983424,1048983487,EU
-1048983488,1048983679,DE
-1048983680,1048985087,EU
-1048985088,1048985375,DE
-1048985376,1048986879,EU
-1048986880,1048987135,DE
-1048987136,1048991743,EU
-1048991744,1048991747,DE
-1048991748,1049001983,EU
-1049001984,1049002015,DE
-1049002016,1049002111,EU
-1049002112,1049002239,DE
-1049002240,1049002287,EU
-1049002288,1049002295,DE
-1049002296,1049002367,EU
-1049002368,1049002375,DE
-1049002376,1049003263,EU
-1049003264,1049004287,DE
-1049004288,1049004351,EU
-1049004352,1049004415,DE
-1049004416,1049004543,EU
-1049004544,1049006079,DE
-1049006080,1049007103,EU
-1049007104,1049007111,DE
-1049007112,1049007359,EU
-1049007360,1049009535,DE
-1049009536,1049009559,EU
-1049009560,1049009567,DE
-1049009568,1049009583,EU
-1049009584,1049009615,DE
-1049009616,1049009623,EU
-1049009624,1049009631,DE
-1049009632,1049009647,EU
-1049009648,1049009662,DE
-1049009663,1049009663,EU
-1049009664,1049012223,DE
-1049012224,1049012224,EU
-1049012225,1049012226,DE
-1049012227,1049012735,EU
-1049012736,1049014319,DE
-1049014320,1049014783,EU
-1049014784,1049016847,DE
-1049016848,1049016863,FR
-1049016864,1049017983,DE
-1049017984,1049018047,GE
-1049018048,1049018367,DE
-1049018368,1049018623,EU
-1049018624,1049020127,DE
-1049020128,1049020135,FR
-1049020136,1049021343,DE
-1049021344,1049021375,US
-1049021376,1049026559,DE
-1049026560,1049026815,EU
-1049026816,1049031999,DE
-1049032000,1049032031,EU
-1049032032,1049032159,DE
-1049032160,1049032167,EU
-1049032168,1049032175,DE
-1049032176,1049032191,EU
-1049032192,1049034751,DE
+1048979712,1048980223,DE
+1049006080,1049006335,DE
+1049008128,1049009151,DE
+1049016320,1049018367,DE
+1049018624,1049022463,DE
+1049026816,1049029375,DE
+1049030656,1049031679,DE
+1049031744,1049031871,DE
1049034752,1049067519,EG
1049067520,1049100287,DK
1049100288,1049231359,GB
1049231360,1049296895,DE
1049296896,1049362431,EG
-1049362432,1049362623,DE
-1049362624,1049362687,GB
-1049362688,1049362847,DE
-1049362848,1049362943,GB
-1049362944,1049362959,DE
-1049362960,1049363071,GB
-1049363072,1049363135,DE
-1049363136,1049363967,GB
-1049363968,1049364223,DE
-1049364224,1049365711,GB
-1049365712,1049365719,DE
-1049365720,1049365727,GB
-1049365728,1049365751,DE
-1049365752,1049365887,GB
-1049365888,1049365951,DE
-1049365952,1049366015,GB
-1049366016,1049366271,DE
-1049366272,1049366335,GB
-1049366336,1049366399,DE
-1049366400,1049366527,GB
+1049362432,1049366527,GB
1049366528,1049368575,DE
-1049368576,1049368671,GB
-1049368672,1049368687,DE
-1049368688,1049369599,GB
-1049369600,1049369935,DE
-1049369936,1049369983,GB
-1049369984,1049370143,DE
-1049370144,1049370175,GB
-1049370176,1049370255,DE
-1049370256,1049370303,GB
-1049370304,1049370367,DE
-1049370368,1049370623,GB
+1049368576,1049369983,GB
+1049369984,1049370047,DE
+1049370048,1049370623,GB
1049370624,1049378815,AT
1049378816,1049395199,EG
-1049395200,1049405055,NL
-1049405056,1049405183,GB
-1049405184,1049405247,LU
-1049405248,1049405311,NL
-1049405312,1049405375,BE
-1049405376,1049405439,NL
-1049405440,1049405567,DE
-1049405568,1049405631,BE
-1049405632,1049405695,AT
-1049405696,1049405759,CH
-1049405760,1049405823,ES
-1049405824,1049405887,FR
-1049405888,1049405951,GB
-1049405952,1049407615,NL
-1049407616,1049407999,CH
-1049408000,1049409023,NL
-1049409024,1049409279,DE
-1049409280,1049411583,NL
+1049395200,1049411583,NL
1049411584,1049419775,GB
1049419776,1049427967,RU
1049427968,1049436159,CZ
@@ -26228,141 +9031,22 @@
1049460736,1049468927,NO
1049468928,1049477119,DE
1049477120,1049493503,PL
-1049493504,1049518079,FI
-1049518080,1049518095,GB
-1049518096,1049559039,FI
-1049559040,1049648383,DE
-1049648384,1049648639,GB
-1049648640,1049653095,DE
-1049653096,1049653103,US
-1049653104,1049698303,DE
-1049698304,1049699071,NL
-1049699072,1049699327,A2
-1049699328,1049699583,NL
-1049699584,1049699839,BW
-1049699840,1049706495,NL
-1049706496,1049707007,GB
-1049707008,1049707519,NL
-1049707520,1049707775,LB
-1049707776,1049708031,DZ
-1049708032,1049709055,GB
-1049709056,1049709311,NL
-1049709312,1049709567,GB
-1049709568,1049710079,A2
+1049493504,1049559039,FI
+1049559040,1049698303,DE
+1049698304,1049706495,NL
+1049706496,1049709823,GB
+1049709824,1049710079,NL
1049710080,1049710335,GB
-1049710336,1049710591,A2
-1049710592,1049712895,GB
-1049712896,1049713055,IR
-1049713056,1049713087,MA
-1049713088,1049713151,IR
-1049713152,1049713663,NL
-1049713664,1049713791,LB
-1049713792,1049713919,IR
-1049713920,1049714175,GB
-1049714176,1049714687,NL
-1049714688,1049715711,IR
-1049715712,1049716735,NL
+1049710336,1049710591,NL
+1049710592,1049716735,GB
1049716736,1049717759,IQ
-1049717760,1049718015,GB
-1049718016,1049718271,IR
-1049718272,1049722879,NL
+1049717760,1049722879,GB
1049722880,1049731071,IS
1049731072,1049739263,FI
1049739264,1049755647,NL
-1049755648,1049757383,DE
-1049757384,1049757391,IT
-1049757392,1049758095,DE
-1049758096,1049758103,ES
-1049758104,1049758527,DE
-1049758528,1049758559,DK
-1049758560,1049759455,DE
-1049759456,1049759487,IT
-1049759488,1049759983,DE
-1049759984,1049759999,AE
-1049760000,1049760639,DE
-1049760640,1049760703,IT
-1049760704,1049760767,DE
-1049760768,1049760775,ES
-1049760776,1049760927,DE
-1049760928,1049760959,DK
-1049760960,1049761023,PL
-1049761024,1049761791,DE
-1049761792,1049762047,PL
-1049762048,1049762271,DE
-1049762272,1049762303,DK
-1049762304,1049763039,DE
-1049763040,1049763055,CH
-1049763056,1049763327,DE
-1049763328,1049763583,PL
-1049763584,1049764447,DE
-1049764448,1049764463,AE
-1049764464,1049764479,DE
-1049764480,1049764543,CH
-1049764544,1049765695,DE
-1049765696,1049765791,PL
-1049765792,1049766143,DE
-1049766144,1049766399,DK
-1049766400,1049766415,DE
-1049766416,1049766431,ES
-1049766432,1049766511,DE
-1049766512,1049766527,AE
-1049766528,1049767935,DE
-1049767936,1049767951,AE
-1049767952,1049768063,DE
-1049768064,1049768095,DK
-1049768096,1049768367,DE
-1049768368,1049768375,NL
-1049768376,1049768383,GB
-1049768384,1049768767,DE
-1049768768,1049768799,AE
-1049768800,1049769119,DE
-1049769120,1049769151,AE
-1049769152,1049770111,DE
-1049770112,1049770127,AE
-1049770128,1049770751,DE
-1049770752,1049771007,CH
-1049771008,1049772895,DE
-1049772896,1049772927,AE
-1049772928,1049773055,ES
-1049773056,1049774367,DE
-1049774368,1049774399,IT
-1049774400,1049775103,DE
-1049775104,1049775119,CH
-1049775120,1049776447,DE
-1049776448,1049776479,AE
-1049776480,1049777023,DE
-1049777024,1049777039,CH
-1049777040,1049777087,DE
-1049777088,1049777151,CH
-1049777152,1049778111,DE
-1049778112,1049778143,ES
-1049778144,1049778335,DE
-1049778336,1049778351,AE
-1049778352,1049778367,DE
-1049778368,1049778431,CH
-1049778432,1049778535,DE
-1049778536,1049778543,AT
-1049778544,1049779135,DE
-1049779136,1049779167,AE
-1049779168,1049782303,DE
-1049782304,1049782335,AE
-1049782336,1049782743,DE
-1049782744,1049782751,IT
-1049782752,1049783071,DE
-1049783072,1049783103,DK
-1049783104,1049783743,DE
-1049783744,1049783759,AE
-1049783760,1049784999,DE
-1049785000,1049785007,AT
-1049785008,1049794559,DE
+1049755648,1049794559,DE
1049794560,1049795583,CH
-1049795584,1049811455,DE
-1049811456,1049811711,PL
-1049811712,1049811967,DE
-1049811968,1049812479,PL
-1049812480,1049817287,DE
-1049817288,1049817295,AE
-1049817296,1049821183,DE
+1049795584,1049821183,DE
1049821184,1049886719,FR
1049886720,1049894911,RU
1049894912,1049903103,NO
@@ -26376,13 +9060,7 @@
1049960448,1049968639,GB
1049968640,1049985023,SA
1049985024,1050017791,IT
-1050017792,1050041087,KW
-1050041088,1050041599,US
-1050041600,1050047994,KW
-1050047995,1050047995,US
-1050047996,1050048767,KW
-1050048768,1050049023,US
-1050049024,1050083327,KW
+1050017792,1050083327,KW
1050083328,1050148863,ES
1050148864,1050157055,CY
1050157056,1050173439,RU
@@ -26390,429 +9068,29 @@
1050181632,1050189823,PL
1050189824,1050198015,DE
1050198016,1050206207,RU
-1050206208,1050206999,SK
-1050207000,1050207007,SR
-1050207008,1050214399,SK
-1050214400,1050246719,DE
-1050246720,1050246735,BE
-1050246736,1050272511,DE
-1050272512,1050272767,EU
-1050272768,1050332441,DE
+1050206208,1050214399,SK
+1050214400,1050332441,DE
1050332442,1050332442,GB
-1050332443,1050340607,DE
-1050340608,1050340639,US
-1050340640,1050450711,DE
-1050450712,1050450719,NL
-1050450720,1050470911,DE
+1050332443,1050470911,DE
1050470912,1050471031,GB
1050471032,1050471039,DE
1050471040,1050471167,GB
-1050471168,1050471391,DE
-1050471392,1050471399,IT
-1050471400,1050619503,DE
-1050619504,1050619511,CH
-1050619512,1050621407,DE
-1050621408,1050621439,BE
-1050621440,1050627327,DE
-1050627328,1050627583,EU
-1050627584,1050664911,DE
-1050664912,1050664919,IT
-1050664920,1050667519,DE
-1050667520,1050667775,FR
-1050667776,1050672479,DE
-1050672480,1050672487,SG
-1050672488,1050673151,DE
-1050673152,1050684095,FR
-1050684096,1050684103,GB
-1050684104,1050684609,FR
-1050684610,1050684610,LU
-1050684611,1050702623,FR
-1050702624,1050702631,DE
-1050702632,1050704661,FR
-1050704662,1050704662,GB
-1050704663,1050725463,FR
-1050725464,1050725471,GB
-1050725472,1050726335,FR
-1050726336,1050726343,DE
-1050726344,1050731146,FR
-1050731147,1050731147,GB
-1050731148,1050768551,FR
-1050768552,1050768558,CH
-1050768559,1050804223,FR
+1050471168,1050673151,DE
+1050673152,1050804223,FR
1050804224,1050869759,MK
1050869760,1050935295,NL
-1050935296,1050940927,EU
-1050940928,1050941183,ES
-1050941184,1050943231,EU
-1050943232,1050943487,ES
-1050943488,1050945535,EU
-1050945536,1050945791,ES
-1050945792,1050948607,EU
-1050948608,1050948863,ES
-1050948864,1050968063,EU
1050968064,1051000831,GB
1051000832,1051017215,RU
1051017216,1051033599,NL
1051033600,1051049983,FI
1051049984,1051066367,HU
-1051066368,1051082751,BE
-1051082752,1051084287,NL
-1051084288,1051084799,BE
-1051084800,1051096831,NL
-1051096832,1051097087,BE
-1051097088,1051098111,NL
-1051098112,1051099135,BE
-1051099136,1051099647,NL
-1051099648,1051099663,BE
-1051099664,1051099671,NL
-1051099672,1051099687,BE
-1051099688,1051099695,NL
-1051099696,1051099711,BE
-1051099712,1051099727,NL
-1051099728,1051099775,BE
-1051099776,1051099791,NL
-1051099792,1051099815,BE
-1051099816,1051099823,NL
-1051099824,1051099855,BE
-1051099856,1051099863,NL
-1051099864,1051099879,BE
-1051099880,1051099887,NL
-1051099888,1051099927,BE
-1051099928,1051099959,NL
-1051099960,1051099975,BE
-1051099976,1051099983,NL
-1051099984,1051100015,BE
-1051100016,1051100023,NL
-1051100024,1051100079,BE
-1051100080,1051100095,NL
-1051100096,1051100151,BE
-1051100152,1051100159,NL
-1051100160,1051100455,BE
-1051100456,1051100463,NL
-1051100464,1051100487,BE
-1051100488,1051100499,NL
-1051100500,1051100591,BE
-1051100592,1051100607,NL
-1051100608,1051100631,BE
-1051100632,1051100663,NL
-1051100664,1051100695,BE
-1051100696,1051100703,NL
-1051100704,1051100711,BE
-1051100712,1051100735,NL
-1051100736,1051100831,BE
-1051100832,1051100839,NL
-1051100840,1051100879,BE
-1051100880,1051100911,NL
-1051100912,1051100951,BE
-1051100952,1051100967,NL
-1051100968,1051101047,BE
-1051101048,1051101055,NL
-1051101056,1051101127,BE
-1051101128,1051101151,NL
-1051101152,1051101207,BE
-1051101208,1051101231,NL
-1051101232,1051101247,BE
-1051101248,1051101279,NL
-1051101280,1051101287,BE
-1051101288,1051101407,NL
-1051101408,1051101415,BE
-1051101416,1051101431,NL
-1051101432,1051101447,BE
-1051101448,1051101463,NL
-1051101464,1051101471,BE
-1051101472,1051101591,NL
-1051101592,1051101607,BE
-1051101608,1051101615,NL
-1051101616,1051101623,BE
-1051101624,1051101631,NL
-1051101632,1051101655,BE
-1051101656,1051101671,NL
-1051101672,1051101687,BE
-1051101688,1051101719,NL
-1051101720,1051101735,BE
-1051101736,1051101783,NL
-1051101784,1051101807,BE
-1051101808,1051101823,NL
-1051101824,1051101855,BE
-1051101856,1051101919,NL
-1051101920,1051101927,BE
-1051101928,1051101959,NL
-1051101960,1051101967,BE
-1051101968,1051101983,NL
-1051101984,1051102007,BE
-1051102008,1051102055,NL
-1051102056,1051102071,BE
-1051102072,1051102079,NL
-1051102080,1051102087,BE
-1051102088,1051102095,NL
-1051102096,1051102103,BE
-1051102104,1051102119,NL
-1051102120,1051102159,BE
-1051102160,1051102207,NL
-1051102208,1051102879,BE
-1051102880,1051102887,NL
-1051102888,1051103007,BE
-1051103008,1051103015,NL
-1051103016,1051103111,BE
-1051103112,1051103119,NL
-1051103120,1051103207,BE
-1051103208,1051103215,NL
-1051103216,1051103231,BE
-1051103232,1051103233,NL
-1051103234,1051103247,BE
-1051103248,1051103287,NL
-1051103288,1051103295,BE
-1051103296,1051103359,NL
-1051103360,1051103367,BE
-1051103368,1051103431,NL
-1051103432,1051103447,BE
-1051103448,1051103487,NL
-1051103488,1051103495,BE
-1051103496,1051103503,NL
-1051103504,1051103519,BE
-1051103520,1051103527,NL
-1051103528,1051103535,BE
-1051103536,1051103543,NL
-1051103544,1051103567,BE
-1051103568,1051103583,NL
-1051103584,1051103607,BE
-1051103608,1051103639,NL
-1051103640,1051103647,BE
-1051103648,1051103663,NL
-1051103664,1051103679,BE
-1051103680,1051103687,NL
-1051103688,1051103703,BE
-1051103704,1051103767,NL
-1051103768,1051103775,BE
-1051103776,1051103799,NL
-1051103800,1051103815,BE
-1051103816,1051103823,NL
-1051103824,1051103831,BE
-1051103832,1051103863,NL
-1051103864,1051103871,BE
-1051103872,1051103879,NL
-1051103880,1051103887,BE
-1051103888,1051103911,NL
-1051103912,1051103927,BE
-1051103928,1051103959,NL
-1051103960,1051103975,BE
-1051103976,1051103991,NL
-1051103992,1051103999,BE
-1051104000,1051104015,NL
-1051104016,1051104039,BE
-1051104040,1051104071,NL
-1051104072,1051104079,BE
-1051104080,1051104111,NL
-1051104112,1051104143,BE
-1051104144,1051104167,NL
-1051104168,1051104183,BE
-1051104184,1051104191,NL
-1051104192,1051104199,BE
-1051104200,1051104231,NL
-1051104232,1051104255,BE
-1051104256,1051104311,NL
-1051104312,1051104319,BE
-1051104320,1051104327,NL
-1051104328,1051104335,BE
-1051104336,1051104351,NL
-1051104352,1051104367,BE
-1051104368,1051104383,NL
-1051104384,1051104399,BE
-1051104400,1051104503,NL
-1051104504,1051104527,BE
-1051104528,1051104559,NL
-1051104560,1051104567,BE
-1051104568,1051104583,NL
-1051104584,1051104599,BE
-1051104600,1051104607,NL
-1051104608,1051104631,BE
-1051104632,1051104679,NL
-1051104680,1051104695,BE
-1051104696,1051104719,NL
-1051104720,1051104727,BE
-1051104728,1051104751,NL
-1051104752,1051104759,BE
-1051104760,1051104791,NL
-1051104792,1051104799,BE
-1051104800,1051104823,NL
-1051104824,1051104831,BE
-1051104832,1051104839,NL
-1051104840,1051104863,BE
-1051104864,1051104903,NL
-1051104904,1051104911,BE
-1051104912,1051104935,NL
-1051104936,1051104943,BE
-1051104944,1051104951,NL
-1051104952,1051104967,BE
-1051104968,1051104975,NL
-1051104976,1051104983,BE
-1051104984,1051104991,NL
-1051104992,1051104999,BE
-1051105000,1051105047,NL
-1051105048,1051105055,BE
-1051105056,1051105063,NL
-1051105064,1051105079,BE
-1051105080,1051105103,NL
-1051105104,1051105119,BE
-1051105120,1051105127,NL
-1051105128,1051105135,BE
-1051105136,1051105143,NL
-1051105144,1051105151,BE
-1051105152,1051105183,NL
-1051105184,1051105199,BE
-1051105200,1051105207,NL
-1051105208,1051105223,BE
-1051105224,1051105255,NL
-1051105256,1051105263,BE
-1051105264,1051105271,NL
-1051105272,1051105279,BE
-1051105280,1051105319,NL
-1051105320,1051105327,BE
-1051105328,1051105359,NL
-1051105360,1051105383,BE
-1051105384,1051105439,NL
-1051105440,1051105455,BE
-1051105456,1051105503,NL
-1051105504,1051105511,BE
-1051105512,1051105519,NL
-1051105520,1051105551,BE
-1051105552,1051105599,NL
-1051105600,1051105607,BE
-1051105608,1051105703,NL
-1051105704,1051105711,BE
-1051105712,1051105791,NL
-1051105792,1051105799,BE
-1051105800,1051105807,NL
-1051105808,1051105815,BE
-1051105816,1051105831,NL
-1051105832,1051105839,BE
-1051105840,1051105863,NL
-1051105864,1051105871,BE
-1051105872,1051105895,NL
-1051105896,1051105903,BE
-1051105904,1051105911,NL
-1051105912,1051105943,BE
-1051105944,1051105967,NL
-1051105968,1051105983,BE
-1051105984,1051105999,NL
-1051106000,1051106023,BE
-1051106024,1051106031,NL
-1051106032,1051106039,BE
-1051106040,1051106047,NL
-1051106048,1051106055,BE
-1051106056,1051106071,NL
-1051106072,1051106079,BE
-1051106080,1051106087,NL
-1051106088,1051106103,BE
-1051106104,1051106111,NL
-1051106112,1051106119,BE
-1051106120,1051106127,NL
-1051106128,1051106143,BE
-1051106144,1051106167,NL
-1051106168,1051106175,BE
-1051106176,1051106183,NL
-1051106184,1051106191,BE
-1051106192,1051106247,NL
-1051106248,1051106271,BE
-1051106272,1051106303,NL
-1051106304,1051106311,BE
-1051106312,1051106319,NL
-1051106320,1051106327,BE
-1051106328,1051106335,NL
-1051106336,1051106351,BE
-1051106352,1051106383,NL
-1051106384,1051106399,BE
-1051106400,1051106423,NL
-1051106424,1051106431,BE
-1051106432,1051106463,NL
-1051106464,1051106471,BE
-1051106472,1051106503,NL
-1051106504,1051106519,BE
-1051106520,1051106527,NL
-1051106528,1051106535,BE
-1051106536,1051106543,NL
-1051106544,1051106551,BE
-1051106552,1051106583,NL
-1051106584,1051106599,BE
-1051106600,1051106607,NL
-1051106608,1051106615,BE
-1051106616,1051106639,NL
-1051106640,1051106655,BE
-1051106656,1051106663,NL
-1051106664,1051106671,BE
-1051106672,1051106711,NL
-1051106712,1051106719,BE
-1051106720,1051106759,NL
-1051106760,1051106767,BE
-1051106768,1051106775,NL
-1051106776,1051106783,BE
-1051106784,1051106799,NL
-1051106800,1051106807,BE
-1051106808,1051106823,NL
-1051106824,1051106831,BE
-1051106832,1051106847,NL
-1051106848,1051106863,BE
-1051106864,1051106895,NL
-1051106896,1051106911,BE
-1051106912,1051106927,NL
-1051106928,1051106935,BE
-1051106936,1051106943,NL
-1051106944,1051106951,BE
-1051106952,1051106959,NL
-1051106960,1051106967,BE
-1051106968,1051106975,NL
-1051106976,1051107007,BE
-1051107008,1051107015,NL
-1051107016,1051107039,BE
-1051107040,1051107055,NL
-1051107056,1051107063,BE
-1051107064,1051107071,NL
-1051107072,1051107095,BE
-1051107096,1051107103,NL
-1051107104,1051107119,BE
-1051107120,1051107127,NL
-1051107128,1051107135,BE
-1051107136,1051107143,NL
-1051107144,1051107167,BE
-1051107168,1051107183,NL
-1051107184,1051107215,BE
-1051107216,1051107223,NL
-1051107224,1051107231,BE
-1051107232,1051107239,NL
-1051107240,1051107247,BE
-1051107248,1051107279,NL
-1051107280,1051107287,BE
-1051107288,1051107295,NL
-1051107296,1051107303,BE
-1051107304,1051107311,NL
-1051107312,1051107327,BE
-1051107328,1051107329,NL
-1051107330,1051107359,BE
-1051107360,1051107375,NL
-1051107376,1051107383,BE
-1051107384,1051107391,NL
-1051107392,1051107407,BE
-1051107408,1051107423,NL
-1051107424,1051107455,BE
-1051107456,1051107519,NL
-1051107520,1051107839,BE
-1051107840,1051115519,NL
-1051115520,1051121287,BE
-1051121288,1051121295,NL
-1051121296,1051123711,BE
-1051123712,1051123839,NL
-1051123840,1051123855,BE
-1051123856,1051123911,NL
-1051123912,1051123935,BE
-1051123936,1051124479,NL
-1051124480,1051124607,BE
-1051124608,1051124767,NL
-1051124768,1051124815,BE
-1051124816,1051124895,NL
-1051124896,1051124911,BE
-1051124912,1051125247,NL
-1051125248,1051125759,BE
-1051125760,1051131903,NL
+1051066368,1051115519,NL
+1051115520,1051117055,BE
+1051117056,1051117567,NL
+1051117568,1051123711,BE
+1051123712,1051125471,NL
+1051125472,1051125479,BE
+1051125480,1051131903,NL
1051131904,1051197439,CH
1051197440,1051213823,CZ
1051213824,1051230207,SK
@@ -26826,31 +9104,13 @@
1051295744,1051303935,GB
1051303936,1051312127,SK
1051312128,1051328511,GR
-1051328512,1051460095,GB
-1051460096,1051460351,ES
-1051460352,1051525119,GB
+1051328512,1051525119,GB
1051525120,1051533311,MT
1051533312,1051541503,NG
-1051541504,1051549345,GB
-1051549346,1051549346,EU
-1051549347,1051557887,GB
+1051541504,1051557887,GB
1051557888,1051566079,RU
1051566080,1051574271,IT
-1051574272,1051574623,GB
-1051574624,1051574655,GM
-1051574656,1051577535,GB
-1051577536,1051577567,NL
-1051577568,1051577855,GB
-1051577856,1051578111,NL
-1051578112,1051578143,GB
-1051578144,1051578175,NL
-1051578176,1051578247,GB
-1051578248,1051578255,FR
-1051578256,1051578303,GB
-1051578304,1051578335,NL
-1051578336,1051584207,GB
-1051584208,1051584223,BE
-1051584224,1051590655,GB
+1051574272,1051590655,GB
1051590656,1051721727,ES
1051721728,1051729919,RU
1051729920,1051738111,FI
@@ -26864,278 +9124,32 @@
1051803648,1051820031,CZ
1051820032,1051852799,NL
1051852800,1051918335,AT
-1051918336,1051919359,PL
-1051919360,1051920383,AT
-1051920384,1051920895,PL
-1051920896,1051946367,AT
-1051946368,1051946383,NL
-1051946384,1051946399,CH
-1051946400,1051946415,NL
-1051946416,1051946431,CH
-1051946432,1051946447,NL
-1051946448,1051946463,CH
-1051946464,1051946479,NL
-1051946480,1051946495,CH
-1051946496,1051949823,AT
-1051949824,1051949951,NL
-1051949952,1051983871,AT
-1051983872,1051984639,EU
-1051984640,1051984655,DE
-1051984656,1051986687,EU
-1051986688,1051986943,DE
-1051986944,1051990015,EU
+1051918336,1051918591,PL
+1051918592,1051919359,AT
+1051919360,1051920383,PL
+1051920384,1051920895,AT
+1051920896,1051921919,PL
+1051921920,1051922431,AT
+1051922432,1051924479,CH
+1051924480,1051948031,AT
+1051948032,1051949055,CH
+1051949056,1051949823,AT
+1051949824,1051950079,NL
+1051950080,1051983871,AT
1051990016,1051991039,DE
-1051991040,1051991807,EU
-1051991808,1051991935,DE
-1051991936,1051994623,EU
-1051994624,1051994639,DE
-1051994640,1051994647,EU
-1051994648,1051994671,DE
-1051994672,1051994699,EU
-1051994700,1051994703,BE
-1051994704,1051994715,EU
-1051994716,1051994719,DE
-1051994720,1051994751,BE
-1051994752,1051994791,EU
-1051994792,1051994799,NL
-1051994800,1051994831,DE
-1051994832,1051994863,EU
-1051994864,1051994871,DE
-1051994872,1051994943,EU
-1051994944,1051995055,DE
-1051995056,1051996335,EU
-1051996336,1051996351,DE
-1051996352,1051996879,EU
-1051996880,1051996927,DE
-1051996928,1051997439,EU
-1051997440,1051997695,DE
-1051997696,1051997711,EU
-1051997712,1051997727,DE
-1051997728,1051997951,EU
-1051997952,1051997983,DE
-1051997984,1051998247,EU
-1051998248,1051998255,DE
-1051998256,1051998687,EU
-1051998688,1051998695,DE
-1051998696,1051999039,EU
-1051999040,1051999043,DE
-1051999044,1051999135,EU
-1051999136,1051999151,DE
-1051999152,1051999167,EU
-1051999168,1051999359,DE
-1051999360,1051999487,EU
-1051999488,1051999743,DE
-1051999744,1051999999,EU
-1052000000,1052000063,DE
-1052000064,1052000127,EU
-1052000128,1052000143,DE
-1052000144,1052000191,EU
-1052000192,1052000511,DE
-1052000512,1052000519,EU
-1052000520,1052000527,DE
-1052000528,1052000535,EU
-1052000536,1052000539,DE
-1052000540,1052000583,EU
-1052000584,1052000623,DE
-1052000624,1052000631,EU
-1052000632,1052002559,DE
-1052002560,1052003327,EU
-1052003328,1052003839,DE
-1052003840,1052003967,EU
-1052003968,1052003999,DE
-1052004000,1052004671,EU
-1052004672,1052004687,DE
-1052004688,1052004703,EU
-1052004704,1052004735,DE
-1052004736,1052004751,EU
-1052004752,1052004759,DE
-1052004760,1052004767,EU
-1052004768,1052004783,DE
-1052004784,1052004815,EU
-1052004816,1052004831,DE
-1052004832,1052004895,EU
-1052004896,1052004959,DE
-1052004960,1052005119,EU
-1052005120,1052005151,DE
-1052005152,1052005247,EU
-1052005248,1052005631,DE
-1052005632,1052005887,EU
-1052005888,1052005911,DE
-1052005912,1052006543,EU
-1052006544,1052006559,DE
-1052006560,1052007039,EU
-1052007040,1052007103,DE
-1052007104,1052007431,EU
-1052007432,1052007435,DE
-1052007436,1052007455,EU
-1052007456,1052007471,DE
-1052007472,1052007519,EU
-1052007520,1052007535,DE
-1052007536,1052007775,EU
-1052007776,1052007791,DE
-1052007792,1052007935,EU
-1052007936,1052008223,DE
-1052008224,1052008515,EU
-1052008516,1052008527,DE
-1052008528,1052008543,EU
-1052008544,1052008583,DE
-1052008584,1052008607,EU
-1052008608,1052008623,DE
-1052008624,1052008671,EU
-1052008672,1052008687,DE
-1052008688,1052008703,EU
-1052008704,1052009087,DE
-1052009088,1052009471,EU
-1052009472,1052009487,DE
-1052009488,1052009503,EU
-1052009504,1052009535,DE
-1052009536,1052010463,EU
-1052010464,1052010519,DE
-1052010520,1052010623,EU
-1052010624,1052010655,DE
-1052010656,1052010751,EU
-1052010752,1052011135,DE
-1052011136,1052011263,EU
-1052011264,1052012287,DE
-1052012288,1052012303,EU
-1052012304,1052012335,DE
-1052012336,1052012383,EU
-1052012384,1052012399,DE
-1052012400,1052012543,EU
-1052012544,1052013055,DE
-1052013056,1052013071,EU
-1052013072,1052013087,DE
-1052013088,1052013119,EU
-1052013120,1052013127,DE
-1052013128,1052013143,EU
-1052013144,1052013151,DE
-1052013152,1052013215,EU
-1052013216,1052013263,DE
-1052013264,1052013311,EU
-1052013312,1052013567,DE
-1052013568,1052013695,EU
-1052013696,1052013823,DE
-1052013824,1052013847,EU
-1052013848,1052013855,DE
-1052013856,1052013887,EU
-1052013888,1052013951,DE
-1052013952,1052013959,EU
-1052013960,1052013963,DE
-1052013964,1052014111,EU
-1052014112,1052014239,DE
-1052014240,1052014271,EU
-1052014272,1052014303,DE
-1052014304,1052015367,EU
-1052015368,1052015375,DE
-1052015376,1052015423,EU
-1052015424,1052015519,DE
-1052015520,1052015551,EU
-1052015552,1052015583,DE
-1052015584,1052015631,EU
-1052015632,1052015647,DE
-1052015648,1052015695,EU
-1052015696,1052015727,DE
-1052015728,1052015999,EU
-1052016000,1052016127,DE
-1052016128,1052016207,EU
-1052016208,1052016223,DE
-1052016224,1052016239,EU
-1052016240,1052016247,DE
-1052016248,1052016255,EU
-1052016256,1052016323,DE
-1052016324,1052016447,EU
-1052016448,1052016463,DE
-1052016464,1052016479,EU
-1052016480,1052016511,DE
-1052016512,1052016679,EU
-1052016680,1052016687,DE
-1052016688,1052016895,EU
-1052016896,1052017151,DE
-1052017152,1052017231,EU
-1052017232,1052017247,DE
-1052017248,1052017471,EU
-1052017472,1052017503,DE
-1052017504,1052017535,EU
+1052001280,1052002303,DE
+1052003584,1052003839,DE
+1052011264,1052012031,DE
1052017536,1052017663,DE
-1052017664,1052018167,EU
-1052018168,1052018431,DE
-1052018432,1052018719,EU
-1052018720,1052018767,DE
-1052018768,1052019199,EU
-1052019200,1052019455,DE
-1052019456,1052019735,EU
-1052019736,1052019775,DE
-1052019776,1052019903,EU
-1052019904,1052020047,DE
-1052020048,1052020672,EU
-1052020673,1052020702,DE
-1052020703,1052020703,EU
-1052020704,1052020735,DE
-1052020736,1052022527,EU
-1052022528,1052022783,DE
-1052022784,1052041215,EU
-1052041216,1052041599,DE
-1052041600,1052041727,EU
-1052041728,1052041863,DE
-1052041864,1052041983,EU
-1052041984,1052042095,DE
-1052042096,1052042143,EU
-1052042144,1052042191,DE
-1052042192,1052042223,EU
-1052042224,1052042239,DE
-1052042240,1052042303,EU
-1052042304,1052042311,DE
-1052042312,1052042367,EU
-1052042368,1052042431,DE
-1052042432,1052042479,EU
-1052042480,1052042751,DE
-1052042752,1052042815,EU
-1052042816,1052042863,DE
-1052042864,1052043007,EU
-1052043008,1052043103,DE
-1052043104,1052043111,EU
-1052043112,1052043263,DE
-1052043264,1052043527,EU
-1052043528,1052043535,DE
-1052043536,1052043551,EU
-1052043552,1052043575,DE
-1052043576,1052043583,EU
-1052043584,1052043651,DE
-1052043652,1052043663,EU
-1052043664,1052043679,DE
-1052043680,1052043759,EU
-1052043760,1052043775,DE
-1052043776,1052044287,EU
-1052044288,1052044351,DE
-1052044352,1052044383,EU
-1052044384,1052044399,DE
-1052044400,1052044415,EU
-1052044416,1052044447,DE
-1052044448,1052044511,EU
-1052044512,1052044527,DE
-1052044528,1052044543,EU
-1052044544,1052044927,DE
-1052044928,1052045023,EU
-1052045024,1052045183,DE
-1052045184,1052045311,EU
-1052045312,1052046135,DE
-1052046136,1052046335,EU
-1052046336,1052046591,DE
-1052046592,1052046847,EU
-1052046848,1052047139,DE
-1052047140,1052049151,EU
-1052049152,1052049183,DE
-1052049184,1052049407,EU
+1052019712,1052019967,GB
+1052045312,1052046079,DE
1052049408,1052057599,PL
1052057600,1052065791,RU
-1052065792,1052082175,SE
+1052065792,1052081151,SE
+1052081152,1052082175,NL
1052082176,1052090367,DE
1052090368,1052098559,PL
-1052098560,1052103575,SE
-1052103576,1052103583,DK
-1052103584,1052104095,SE
-1052104096,1052104127,DK
-1052104128,1052116991,SE
+1052098560,1052116991,SE
1052116992,1052119039,RU
1052119040,1052121087,RO
1052121088,1052125183,RU
@@ -27145,7 +9159,7 @@
1052133376,1052135423,RU
1052135424,1052137471,UA
1052137472,1052139519,RU
-1052139520,1052141567,DE
+1052141056,1052141567,DE
1052141568,1052143615,PL
1052143616,1052145663,BG
1052145664,1052147711,UA
@@ -27153,7 +9167,9 @@
1052151808,1052153855,PL
1052153856,1052157951,UA
1052157952,1052159999,DK
-1052160000,1052162047,LU
+1052160000,1052160703,LU
+1052160704,1052161215,BE
+1052161216,1052162047,LU
1052162048,1052164095,CH
1052164096,1052168191,RU
1052168192,1052170239,PL
@@ -27164,847 +9180,52 @@
1052178432,1052180479,DK
1052180480,1052213247,RU
1052213248,1052246015,FI
-1052246016,1052247039,DE
-1052247040,1052247295,FR
-1052247296,1052247359,DE
-1052247360,1052247391,FR
-1052247392,1052247407,DE
-1052247408,1052247415,GB
-1052247416,1052247423,NL
-1052247424,1052247551,GB
-1052247552,1052248095,DE
-1052248096,1052248127,ZA
-1052248128,1052248135,FR
-1052248136,1052248143,DE
-1052248144,1052248159,BE
-1052248160,1052249375,DE
-1052249376,1052249407,IT
-1052249408,1052249471,DE
-1052249472,1052249503,ZA
-1052249504,1052250655,DE
-1052250656,1052250687,GB
-1052250688,1052250719,IL
-1052250720,1052250735,IT
-1052250736,1052250751,NL
-1052250752,1052252863,DE
-1052252864,1052252879,GB
-1052252880,1052252895,ZA
-1052252896,1052252927,IT
-1052252928,1052254207,DE
-1052254208,1052255255,NL
-1052255256,1052255263,GB
-1052255264,1052255871,NL
-1052255872,1052255935,GB
-1052255936,1052257279,NL
-1052257280,1052257791,FR
-1052257792,1052258303,AT
-1052258304,1052260623,FR
-1052260624,1052260631,ZA
-1052260632,1052260639,AT
-1052260640,1052260735,FR
-1052260736,1052260863,NL
-1052260864,1052260895,TR
-1052260896,1052261055,FR
-1052261056,1052261119,NL
-1052261120,1052262399,FR
-1052262400,1052263423,DK
-1052263424,1052263935,DE
-1052263936,1052264447,DK
-1052264448,1052264639,SE
-1052264640,1052264703,IT
-1052264704,1052265471,SE
-1052265472,1052265519,IT
-1052265520,1052265535,GB
-1052265536,1052265599,DE
-1052265600,1052265983,IT
-1052265984,1052266239,DE
-1052266240,1052266495,GB
-1052266496,1052268543,BE
-1052268544,1052268607,ZA
-1052268608,1052268671,BE
-1052268672,1052268703,IT
-1052268704,1052268719,ZA
-1052268720,1052268735,NL
-1052268736,1052268799,DE
-1052268800,1052270591,ZA
-1052270592,1052271871,FR
-1052271872,1052272127,BE
-1052272128,1052272543,FR
-1052272544,1052272575,AT
-1052272576,1052272639,SE
-1052272640,1052274175,FR
-1052274176,1052274687,ZA
-1052274688,1052274943,ES
-1052274944,1052275199,IT
-1052275200,1052275711,AT
-1052275712,1052276735,GB
-1052276736,1052278207,IT
-1052278208,1052278271,GB
-1052278272,1052278783,IT
-1052278784,1052278823,CH
-1052278824,1052278831,GB
-1052278832,1052278847,AT
-1052278848,1052278863,ZA
-1052278864,1052278879,NL
-1052278880,1052284607,GB
-1052284608,1052284671,EU
-1052284672,1052286975,GB
-1052286976,1052287487,CH
-1052287488,1052288255,SE
-1052288256,1052288287,EU
-1052288288,1052288295,IL
-1052288296,1052288303,BE
-1052288304,1052288319,AT
-1052288320,1052288383,EU
-1052288384,1052288511,FR
-1052288512,1052289023,AT
-1052289024,1052289151,GB
-1052289152,1052289183,CH
-1052289184,1052289215,DE
-1052289216,1052289279,GB
-1052289280,1052289535,EU
-1052289536,1052290047,GB
-1052290048,1052290063,CH
-1052290064,1052290303,GB
-1052290304,1052290367,EU
-1052290368,1052290399,CH
-1052290400,1052290431,ZA
-1052290432,1052290559,FR
-1052290560,1052290575,GB
-1052290576,1052290591,BE
-1052290592,1052290639,GB
-1052290640,1052290655,ZA
-1052290656,1052290687,DE
-1052290688,1052290815,GB
-1052290816,1052290831,CH
-1052290832,1052291327,GB
-1052291328,1052291583,CH
-1052291584,1052291679,FI
-1052291680,1052291687,TR
-1052291688,1052291695,GB
-1052291696,1052291711,CH
-1052291712,1052292095,FR
-1052292096,1052299263,GB
-1052299264,1052299775,EU
-1052299776,1052303359,GB
-1052303360,1052307455,DE
-1052307456,1052309247,CH
-1052309248,1052309503,NO
+1052259328,1052260351,FR
+1052279808,1052282879,GB
+1052284928,1052286975,GB
+1052293120,1052298239,GB
+1052303360,1052305407,DE
+1052306432,1052307455,DE
1052309504,1052310527,CH
-1052310528,1052310783,FR
-1052310784,1052311039,AT
-1052311040,1052311551,GB
-1052311552,1052311615,DE
-1052311616,1052311679,BE
-1052311680,1052311871,DE
-1052311872,1052311895,BE
-1052311896,1052311903,NL
-1052311904,1052311935,IT
-1052311936,1052311967,GB
-1052311968,1052311999,DE
-1052312000,1052312063,CH
-1052312064,1052312767,DE
-1052312768,1052312831,EU
-1052312832,1052312895,DE
-1052312896,1052312903,CH
-1052312904,1052312911,ES
-1052312912,1052312927,CH
-1052312928,1052313087,GB
-1052313088,1052314751,DE
-1052314752,1052314815,ES
-1052314816,1052314823,DE
-1052314824,1052314831,ES
-1052314832,1052314847,IT
-1052314848,1052315071,DE
-1052315072,1052315103,IT
-1052315104,1052315135,AT
-1052315136,1052315551,DE
-1052315552,1052315583,ES
-1052315584,1052315647,GB
-1052315648,1052316319,DE
-1052316320,1052316335,NL
-1052316336,1052316767,DE
-1052316768,1052316799,IT
-1052316800,1052316927,DE
-1052316928,1052317183,EU
-1052317184,1052317599,DE
-1052317600,1052317607,BE
-1052317608,1052317615,DE
-1052317616,1052317631,GB
-1052317632,1052317663,IT
-1052317664,1052318047,DE
-1052318048,1052318079,ES
-1052318080,1052318207,SE
-1052318208,1052318719,DE
-1052318720,1052319231,EU
-1052319232,1052319743,DE
-1052319744,1052319999,EU
-1052320000,1052320079,GB
-1052320080,1052320087,CZ
-1052320088,1052320095,GB
-1052320096,1052320127,ZA
-1052320128,1052320255,BE
-1052320256,1052322239,GB
-1052322240,1052322303,CH
-1052322304,1052323871,GB
-1052323872,1052323903,CH
-1052323904,1052324927,GB
-1052324928,1052324943,ZA
-1052324944,1052324959,NL
-1052324960,1052324991,ES
-1052324992,1052325191,GB
-1052325192,1052325199,DE
-1052325200,1052325215,AT
-1052325216,1052325247,ZA
-1052325248,1052325311,GB
-1052325312,1052325375,NL
-1052325376,1052325567,GB
-1052325568,1052325631,ZA
-1052325632,1052327935,GB
-1052327936,1052328223,CH
-1052328224,1052328255,IT
-1052328256,1052328319,ES
-1052328320,1052328447,DE
-1052328448,1052328639,CH
-1052328640,1052328671,ZA
-1052328672,1052328703,ES
-1052328704,1052329983,CH
-1052329984,1052330239,DE
-1052330240,1052331167,CH
-1052331168,1052331183,GB
-1052331184,1052331199,CH
-1052331200,1052331263,GB
-1052331264,1052331615,CH
-1052331616,1052331647,AT
-1052331648,1052331711,CH
-1052331712,1052331743,GB
-1052331744,1052332031,CH
-1052332032,1052333103,IT
-1052333104,1052333119,CH
-1052333120,1052333183,FR
-1052333184,1052333311,ZA
-1052333312,1052333567,EU
-1052333568,1052334751,IT
-1052334752,1052334759,NL
-1052334760,1052334767,ZA
-1052334768,1052334815,GB
-1052334816,1052334847,ZA
-1052334848,1052335423,IT
-1052335424,1052335455,NL
-1052335456,1052335519,ES
-1052335520,1052335535,ZA
-1052335536,1052335551,DE
-1052335552,1052335615,AT
-1052335616,1052336127,BE
-1052336128,1052336255,FR
-1052336256,1052336383,GB
-1052336384,1052337343,FR
-1052337344,1052337375,DE
-1052337376,1052337759,FR
-1052337760,1052337887,GB
-1052337888,1052337903,ZA
-1052337904,1052337911,NL
-1052337912,1052337919,ZA
-1052337920,1052340111,FR
-1052340112,1052340127,ES
-1052340128,1052340135,NL
-1052340136,1052340223,FR
-1052340224,1052340527,AT
-1052340528,1052340543,BE
-1052340544,1052340575,IT
-1052340576,1052340607,NL
+1052313600,1052314623,DE
+1052317312,1052317343,DE
+1052325888,1052327935,GB
+1052328960,1052329983,CH
+1052338176,1052339199,FR
1052340608,1052340671,HU
-1052340672,1052340703,GB
-1052340704,1052340719,ZA
-1052340720,1052340735,GB
-1052340736,1052340767,AT
-1052340768,1052340799,DE
-1052340800,1052340863,GB
-1052340864,1052341247,AT
-1052341248,1052341503,DE
-1052341504,1052342271,AT
-1052342272,1052342303,SE
-1052342304,1052342335,CH
-1052342336,1052342463,SE
-1052342464,1052342471,ZA
-1052342472,1052342479,GB
-1052342480,1052342495,ZA
-1052342496,1052342527,FR
-1052342528,1052343647,CH
-1052343648,1052343655,NL
-1052343656,1052343663,GB
-1052343664,1052343679,DE
-1052343680,1052344319,CH
-1052344320,1052344863,NL
-1052344864,1052344895,ES
-1052344896,1052344959,IT
-1052344960,1052345087,CH
-1052345088,1052345135,NL
-1052345136,1052345151,GB
-1052345152,1052345247,FR
-1052345248,1052345279,IT
-1052345280,1052345343,DE
-1052345344,1052345471,NL
-1052345472,1052345487,EU
-1052345488,1052345503,NL
-1052345504,1052345535,ZA
-1052345536,1052345551,AT
-1052345552,1052345567,GB
-1052345568,1052345631,NL
-1052345632,1052345663,IT
-1052345664,1052345695,HU
-1052345696,1052345727,PT
-1052345728,1052345855,AT
-1052345856,1052346903,NL
-1052346904,1052346911,BE
-1052346912,1052346943,ZA
-1052346944,1052347007,ES
-1052347008,1052347135,DE
-1052347136,1052347391,NL
1052347392,1052348415,CH
-1052348416,1052348799,GB
-1052348800,1052348831,DE
-1052348832,1052348863,CH
-1052348864,1052348879,DE
-1052348880,1052348895,GB
-1052348896,1052348927,DE
-1052348928,1052349119,GB
-1052349120,1052349151,BE
-1052349152,1052349343,GB
-1052349344,1052349375,DE
-1052349376,1052349407,GB
-1052349408,1052349439,ZA
-1052349440,1052352559,GB
-1052352560,1052352591,ZA
-1052352592,1052352607,GB
-1052352608,1052352639,EU
-1052352640,1052352703,GB
-1052352704,1052352767,DE
-1052352768,1052352927,GB
-1052352928,1052352959,IT
-1052352960,1052352991,ES
-1052352992,1052353023,BE
-1052353024,1052353279,IT
-1052353280,1052353407,DE
-1052353408,1052353535,EU
-1052353536,1052354111,DE
-1052354112,1052354175,TR
-1052354176,1052354559,DE
+1052350464,1052352511,GB
1052354560,1052356607,GB
-1052356608,1052356703,ZA
-1052356704,1052356735,ES
-1052356736,1052356799,RU
-1052356800,1052356863,IE
-1052356864,1052358479,ZA
-1052358480,1052358495,GB
-1052358496,1052358511,AT
-1052358512,1052358527,ZA
-1052358528,1052358655,DE
-1052358656,1052359839,ZA
-1052359840,1052359871,IE
-1052359872,1052359935,IT
-1052359936,1052360735,ZA
-1052360736,1052360743,GB
-1052360744,1052360767,ZA
-1052360768,1052360783,DE
-1052360784,1052360831,IT
-1052360832,1052360959,GB
-1052360960,1052360991,FR
-1052360992,1052361023,BE
-1052361024,1052361039,ZA
-1052361040,1052361055,NL
-1052361056,1052361087,DE
-1052361088,1052361151,ES
-1052361152,1052361215,GB
-1052361216,1052361471,ZA
-1052361472,1052361647,BE
-1052361648,1052361655,GB
-1052361656,1052361663,DE
-1052361664,1052361695,BE
-1052361696,1052361727,CH
-1052361728,1052361919,IT
-1052361920,1052361951,ZA
-1052361952,1052361967,IT
-1052361968,1052361983,ZA
-1052361984,1052362239,IT
-1052362240,1052362751,DK
-1052362752,1052362783,ES
-1052362784,1052362815,GB
-1052362816,1052362879,CH
-1052362880,1052363039,ES
-1052363040,1052363071,EU
-1052363072,1052363135,GB
-1052363136,1052363263,ES
-1052363264,1052364543,DE
-1052364544,1052364671,BE
-1052364672,1052364687,DE
-1052364688,1052364695,GB
-1052364696,1052364703,NL
-1052364704,1052364799,GB
-1052364800,1052366207,BE
-1052366208,1052366271,IE
-1052366272,1052366335,GB
-1052366336,1052366655,BE
-1052366656,1052366719,DE
-1052366720,1052367871,BE
-1052367872,1052368895,DK
-1052368896,1052369023,IE
-1052369024,1052369039,IT
-1052369040,1052369055,DE
-1052369056,1052369087,ZA
-1052369088,1052369151,IT
-1052369152,1052369407,IE
-1052369408,1052369663,HU
-1052369664,1052369855,CZ
-1052369856,1052369887,EU
+1052358432,1052358463,ZA
+1052366848,1052367871,BE
1052369888,1052369919,CZ
-1052369920,1052370175,NO
-1052370176,1052370431,DK
-1052370432,1052370559,SE
-1052370560,1052370623,DE
-1052370624,1052370687,IT
-1052370688,1052370943,DK
-1052370944,1052372255,GB
-1052372256,1052372287,ZA
-1052372288,1052372351,FI
-1052372352,1052374015,GB
1052374016,1052375039,CH
-1052375040,1052375551,DE
-1052375552,1052375679,EU
-1052375680,1052375711,DE
-1052375712,1052375807,FR
-1052375808,1052376063,DE
-1052376064,1052376319,EU
-1052376320,1052376831,DE
-1052376832,1052377087,ES
-1052377088,1052377535,DE
-1052377536,1052377599,NO
-1052377600,1052377743,FR
-1052377744,1052377759,NL
-1052377760,1052377791,ZA
-1052377792,1052377855,GB
-1052377856,1052377871,DE
-1052377872,1052377887,CH
-1052377888,1052377919,EU
-1052377920,1052377951,DE
-1052377952,1052377983,FR
-1052377984,1052378047,GB
-1052378048,1052378079,FR
-1052378080,1052378111,NL
-1052378112,1052378983,DE
-1052378984,1052378991,NO
-1052378992,1052379031,GB
-1052379032,1052379039,DE
-1052379040,1052379103,GB
-1052379104,1052379135,SE
-1052379136,1052379391,EU
-1052379392,1052379791,DE
-1052379792,1052379799,GB
-1052379800,1052379807,NL
-1052379808,1052379839,DE
-1052379840,1052379903,ZA
-1052379904,1052380063,GB
-1052380064,1052380127,DE
-1052380128,1052380159,NL
-1052380160,1052381183,DE
-1052381184,1052381439,EU
-1052381440,1052382623,DE
-1052382624,1052382655,EU
-1052382656,1052382719,ES
-1052382720,1052382975,DE
-1052382976,1052383999,GB
-1052384000,1052384255,NL
-1052384256,1052385279,GB
-1052385280,1052385535,DE
-1052385536,1052385615,GB
-1052385616,1052385631,ZA
-1052385632,1052385695,GB
-1052385696,1052385791,FR
-1052385792,1052388863,GB
-1052388864,1052389119,NL
-1052389120,1052390431,GB
-1052390432,1052390447,ZA
-1052390448,1052390455,GB
-1052390456,1052390463,IT
-1052390464,1052393471,GB
-1052393472,1052393599,CH
-1052393600,1052393695,FR
-1052393696,1052394271,CH
-1052394272,1052394303,ZA
-1052394304,1052394367,GB
-1052394368,1052395263,CH
-1052395264,1052395679,GB
-1052395680,1052395743,DE
-1052395744,1052395775,ES
-1052395776,1052396031,NL
-1052396032,1052396543,CH
-1052396544,1052396607,SE
-1052396608,1052396671,BE
-1052396672,1052396799,SE
-1052396800,1052396863,TR
-1052396864,1052396927,RO
-1052396928,1052397439,HU
-1052397440,1052397567,EU
-1052397568,1052399039,IT
-1052399040,1052399103,NO
-1052399104,1052399903,IT
-1052399904,1052399919,DE
-1052399920,1052399927,NL
-1052399928,1052399935,FR
-1052399936,1052399999,IT
-1052400000,1052400127,BE
-1052400128,1052401151,IT
-1052401152,1052401279,BE
-1052401280,1052401311,IT
-1052401312,1052401343,AT
-1052401344,1052401407,ZA
-1052401408,1052401599,BE
-1052401600,1052401631,GB
-1052401632,1052401663,RU
-1052401664,1052402047,FR
-1052402048,1052402175,NL
-1052402176,1052402271,FR
-1052402272,1052402303,IT
-1052402304,1052402367,GB
-1052402368,1052403359,FR
-1052403360,1052403391,DE
-1052403392,1052403407,IT
-1052403408,1052403415,GB
-1052403416,1052403423,NL
-1052403424,1052403455,RO
-1052403456,1052403727,FR
-1052403728,1052403743,NL
-1052403744,1052403775,FR
-1052403776,1052403807,ZA
-1052403808,1052403839,EU
-1052403840,1052403967,CH
-1052403968,1052404383,FR
-1052404384,1052404399,ZA
-1052404400,1052404447,FR
-1052404448,1052404479,GB
-1052404480,1052404767,FR
-1052404768,1052404783,ZA
-1052404784,1052404799,GB
-1052404800,1052404863,FR
-1052404864,1052404991,GB
-1052404992,1052405759,FR
-1052405760,1052407519,AT
-1052407520,1052407535,FR
-1052407536,1052407551,SE
-1052407552,1052407839,AT
-1052407840,1052407871,ZA
-1052407872,1052407887,DE
-1052407888,1052407903,ZA
-1052407904,1052407935,DE
-1052407936,1052408159,AT
-1052408160,1052408383,GB
-1052408384,1052408447,BE
-1052408448,1052408511,FR
-1052408512,1052408575,GB
-1052408576,1052408831,AT
-1052408832,1052409855,GB
-1052409856,1052409863,NL
-1052409864,1052409871,DE
-1052409872,1052409951,NL
-1052409952,1052409983,BE
-1052409984,1052410047,GB
-1052410048,1052410111,BE
-1052410112,1052411135,EU
-1052411136,1052412327,NL
-1052412328,1052412335,EU
-1052412336,1052412343,NL
-1052412344,1052412351,GB
-1052412352,1052412415,CH
-1052412416,1052412671,EU
-1052412672,1052412831,NL
-1052412832,1052412863,DE
-1052412864,1052413951,NL
-1052413952,1052414335,CZ
-1052414336,1052414463,EU
-1052414464,1052414975,IE
-1052414976,1052415999,BE
-1052416000,1052416575,DE
-1052416576,1052416639,ZA
-1052416640,1052416671,GB
-1052416672,1052416703,DE
-1052416704,1052416735,IT
-1052416736,1052416767,DE
-1052416768,1052417071,NO
-1052417072,1052417087,DE
-1052417088,1052417119,AT
-1052417120,1052417151,IT
-1052417152,1052417279,GB
-1052417280,1052417359,NO
-1052417360,1052417367,EU
-1052417368,1052417535,NO
-1052417536,1052418047,ZA
-1052418048,1052419583,BE
-1052419584,1052420031,IT
-1052420032,1052420063,EU
-1052420064,1052420095,IT
-1052420096,1052420735,GB
-1052420736,1052420767,DE
-1052420768,1052420783,GB
-1052420784,1052420799,ZA
-1052420800,1052420863,DE
-1052420864,1052422143,GB
-1052422144,1052422847,ZA
-1052422848,1052422863,SE
-1052422864,1052422879,FR
-1052422880,1052423199,ZA
-1052423200,1052423231,CH
-1052423232,1052423295,ZA
-1052423296,1052423303,EU
-1052423304,1052423311,CH
-1052423312,1052423359,EU
-1052423360,1052423423,NL
-1052423424,1052423967,ZA
-1052423968,1052423999,EU
-1052424000,1052424799,ZA
-1052424800,1052424815,GB
-1052424816,1052424823,ES
-1052424824,1052424831,BE
-1052424832,1052424959,GB
-1052424960,1052425151,ZA
-1052425152,1052425215,BE
+1052378944,1052378959,DE
+1052387328,1052388351,GB
+1052397312,1052397439,HU
+1052405248,1052405503,FR
+1052405760,1052406783,AT
+1052407856,1052407871,ZA
+1052421120,1052422143,GB
1052425216,1052426239,ZA
-1052426240,1052426319,PT
-1052426320,1052426327,EU
-1052426328,1052426495,PT
-1052426496,1052426511,EU
-1052426512,1052426527,FR
-1052426528,1052426751,EU
-1052426752,1052427263,NL
-1052427264,1052427839,CH
-1052427840,1052427855,GB
-1052427856,1052427871,IT
-1052427872,1052427903,AT
-1052427904,1052427967,DE
-1052427968,1052428031,GB
-1052428032,1052428287,CH
-1052428288,1052428479,ES
-1052428480,1052428543,BE
-1052428544,1052429407,ES
-1052429408,1052429439,FR
-1052429440,1052429567,BE
-1052429568,1052429759,ES
-1052429760,1052429823,DE
-1052429824,1052430335,ES
-1052430336,1052430407,BE
-1052430408,1052430415,ZA
-1052430416,1052430431,FR
-1052430432,1052430463,DE
-1052430464,1052430527,BE
-1052430528,1052430591,DE
-1052430592,1052433407,BE
-1052433408,1052433719,DK
-1052433720,1052433727,FR
-1052433728,1052433919,DK
-1052433920,1052434431,ZA
-1052434432,1052434751,GB
-1052434752,1052434783,NO
-1052434784,1052435455,GB
-1052435456,1052435647,NL
-1052435648,1052435679,EU
-1052435680,1052436479,NL
-1052436480,1052437023,DE
-1052437024,1052437055,ZA
-1052437056,1052437119,DE
-1052437120,1052437135,ZA
-1052437136,1052437151,DE
-1052437152,1052437183,GB
-1052437184,1052437247,ZA
-1052437248,1052437759,DE
-1052437760,1052438015,CH
-1052438016,1052438399,BE
-1052438400,1052438527,EU
-1052438528,1052439503,AT
-1052439504,1052439519,EU
-1052439520,1052439551,AT
-1052439552,1052440575,FR
-1052440576,1052441343,DE
-1052441344,1052441599,EU
-1052441600,1052442623,GB
-1052442624,1052443647,DE
-1052443648,1052446207,EU
-1052446208,1052446719,DE
-1052446720,1052447743,CZ
-1052447744,1052447871,PL
-1052447872,1052447999,EU
-1052448000,1052448127,PL
-1052448128,1052448255,EU
-1052448256,1052450815,ZA
-1052450816,1052451839,DE
-1052451840,1052452159,NO
-1052452160,1052452223,EU
-1052452224,1052452351,NO
-1052452352,1052452831,ES
-1052452832,1052452847,GB
-1052452848,1052452863,FR
-1052452864,1052452991,EU
-1052452992,1052452999,SK
-1052453000,1052453119,EU
-1052453120,1052453375,FR
-1052453376,1052453887,AT
-1052453888,1052454911,GB
-1052454912,1052454943,FR
-1052454944,1052454959,NL
-1052454960,1052454975,EU
-1052454976,1052455359,NL
-1052455360,1052455423,EU
-1052455424,1052455935,GB
-1052455936,1052456447,NL
-1052456448,1052456959,CH
-1052456960,1052457983,NL
-1052457984,1052458367,AT
-1052458368,1052458431,EU
-1052458432,1052458495,AT
-1052458496,1052458847,NL
-1052458848,1052458863,FR
-1052458864,1052458871,NL
-1052458872,1052458879,FR
-1052458880,1052460031,GB
-1052460032,1052460127,NO
-1052460128,1052460223,EU
-1052460224,1052460287,FR
-1052460288,1052460543,EU
-1052460544,1052460799,NO
-1052460800,1052461055,DE
-1052461056,1052461295,FR
-1052461296,1052461311,BE
-1052461312,1052461951,FR
-1052461952,1052461967,EU
-1052461968,1052463103,FR
-1052463104,1052463615,ES
-1052463616,1052464639,GB
-1052464640,1052464927,ES
-1052464928,1052464959,EU
-1052464960,1052465087,ES
-1052465088,1052465151,EU
-1052465152,1052465375,ZA
-1052465376,1052465407,EU
-1052465408,1052465663,ZA
-1052465664,1052466431,EU
-1052466432,1052468223,FR
-1052468224,1052469247,GB
-1052469248,1052470271,FR
-1052470272,1052470783,ZA
-1052470784,1052471007,FR
-1052471008,1052471039,EU
-1052471040,1052471295,BE
-1052471296,1052472511,GB
-1052472512,1052472575,EU
-1052472576,1052475231,GB
-1052475232,1052475239,EU
-1052475240,1052475255,GB
-1052475256,1052475263,EU
-1052475264,1052475391,GB
-1052475392,1052476383,FR
-1052476384,1052476415,EU
-1052476416,1052479487,FR
-1052479488,1052479743,NL
-1052479744,1052479999,DE
-1052480000,1052483583,NL
-1052483584,1052483999,IT
-1052484000,1052484031,EU
-1052484032,1052485279,IT
-1052485280,1052485311,EU
-1052485312,1052485631,IT
-1052485632,1052486655,GB
-1052486656,1052486911,CH
-1052486912,1052486975,DE
-1052486976,1052487039,FR
-1052487040,1052487167,DE
-1052487168,1052487423,GB
-1052487424,1052487679,AT
+1052431104,1052432127,BE
+1052433712,1052433719,DK
+1052449360,1052449375,ZA
+1052450768,1052450783,ZA
+1052481536,1052482559,NL
+1052485376,1052485631,IT
1052487680,1052488703,CH
1052488704,1052489727,GB
-1052489728,1052490239,IE
-1052490240,1052490751,SE
-1052490752,1052491679,AT
-1052491680,1052491687,EU
-1052491688,1052491775,AT
-1052491776,1052493567,BE
-1052493568,1052493695,EU
-1052493696,1052494335,BE
1052494336,1052494591,NL
-1052494592,1052495439,BE
-1052495440,1052495487,FR
-1052495488,1052495551,BE
-1052495552,1052495583,GB
-1052495584,1052495871,BE
-1052495872,1052495879,UA
-1052495880,1052496127,EU
-1052496128,1052497407,DE
-1052497408,1052497663,EU
-1052497664,1052497919,DE
-1052497920,1052498431,ES
-1052498432,1052498495,RO
-1052498496,1052498943,EU
-1052498944,1052499455,GB
-1052499456,1052499967,EU
-1052499968,1052500191,DK
-1052500192,1052500207,EU
-1052500208,1052500319,DK
-1052500320,1052500479,EU
-1052500480,1052500991,GB
-1052500992,1052501023,FI
-1052501024,1052501031,EU
-1052501032,1052501039,FI
-1052501040,1052501119,EU
-1052501120,1052501247,FI
-1052501248,1052501503,EU
-1052501504,1052502015,CH
-1052502016,1052502783,IE
-1052502784,1052502815,EU
-1052502816,1052502847,IE
-1052502848,1052503039,EU
-1052503040,1052504319,GB
-1052504320,1052504351,BY
-1052504352,1052504383,EU
-1052504384,1052507583,GB
-1052507584,1052507647,EU
-1052507648,1052507775,GB
-1052507776,1052507903,EU
-1052507904,1052596447,GB
-1052596448,1052596463,IT
-1052596464,1052631935,GB
-1052631936,1052631999,FR
-1052632000,1052634943,GB
-1052634944,1052634951,IE
-1052634952,1052644095,GB
-1052644096,1052644351,SE
-1052644352,1052647167,GB
-1052647168,1052647423,SE
-1052647424,1052653823,GB
-1052653824,1052654079,EU
-1052654080,1052661759,GB
-1052661760,1052662271,SE
-1052662272,1052665343,GB
-1052665344,1052665599,SE
-1052665600,1052675839,GB
-1052675840,1052676095,IE
-1052676096,1052684575,GB
-1052684576,1052684607,IT
-1052684608,1052706815,GB
-1052706816,1052712959,NL
+1052498432,1052498463,RO
+1052508160,1052704767,GB
+1052704768,1052712959,NL
1052712960,1052770303,GB
-1052770304,1052772991,CH
-1052772992,1052773119,ES
-1052773120,1052775711,CH
-1052775712,1052775727,DE
-1052775728,1052778495,CH
+1052770304,1052778495,CH
1052778496,1052786687,RU
1052786688,1052789759,GR
1052789760,1052803071,NL
-1052803072,1052803327,A2
-1052803328,1052803583,EU
-1052803584,1052806655,A2
-1052806656,1052807167,MW
-1052807168,1052809215,A2
-1052809216,1052810495,DE
-1052810496,1052810751,US
-1052810752,1052811263,DE
+1052803072,1052811263,DE
1052811264,1052819455,RU
1052819456,1052827647,DE
1052827648,1052835839,RU
@@ -28013,13 +9234,9 @@
1052852224,1052868607,EG
1052868608,1052876799,RS
1052876800,1052884991,NG
-1052884992,1052896351,FR
-1052896352,1052896352,FR
-1052896353,1052901375,FR
+1052884992,1052901375,FR
1052901376,1053032447,NL
-1053032448,1053047367,IT
-1053047368,1053047375,TR
-1053047376,1053097983,IT
+1053032448,1053097983,IT
1053097984,1053106175,DE
1053106176,1053114367,GB
1053114368,1053130751,BE
@@ -28027,252 +9244,22 @@
1053138944,1053147135,FI
1053147136,1053163519,SK
1053163520,1053294591,DK
-1053294592,1053294847,EU
-1053294848,1053295103,AT
-1053295104,1053295391,EU
-1053295392,1053295423,AT
-1053295424,1053295455,EU
-1053295456,1053295471,AT
-1053295472,1053295615,EU
1053295616,1053296639,AT
-1053296640,1053296927,IT
-1053296928,1053296991,EU
-1053296992,1053297027,IT
-1053297028,1053297039,EU
-1053297040,1053297055,IT
-1053297056,1053297071,EU
-1053297072,1053297143,IT
-1053297144,1053298175,EU
-1053298176,1053299199,CH
-1053299200,1053299711,EU
-1053299712,1053300063,GB
-1053300064,1053300095,EU
-1053300096,1053300103,GB
-1053300104,1053300111,EU
-1053300112,1053300735,GB
-1053300736,1053300991,CH
-1053300992,1053301279,FR
-1053301280,1053301287,EU
-1053301288,1053301295,FR
-1053301296,1053301303,EU
-1053301304,1053301359,FR
-1053301360,1053301367,EU
-1053301368,1053301503,FR
-1053301504,1053302031,EU
-1053302032,1053302055,FR
-1053302056,1053302063,DE
-1053302064,1053302159,FR
-1053302160,1053302175,EU
-1053302176,1053302183,FR
-1053302184,1053302303,EU
-1053302304,1053302335,FR
-1053302336,1053302367,EU
-1053302368,1053302375,FR
-1053302376,1053302383,EU
-1053302384,1053302687,FR
-1053302688,1053302711,GB
-1053302712,1053302719,EU
-1053302720,1053302783,FR
-1053302784,1053305087,EU
-1053305088,1053305951,GR
-1053305952,1053306111,EU
-1053306112,1053306879,GR
-1053306880,1053307903,EU
-1053307904,1053308543,GB
-1053308544,1053308671,EU
-1053308672,1053308687,GB
-1053308688,1053308703,EU
-1053308704,1053308711,GB
-1053308712,1053308767,EU
-1053308768,1053308831,GB
-1053308832,1053308839,EU
-1053308840,1053308863,GB
-1053308864,1053308927,EU
-1053308928,1053308991,ZA
-1053308992,1053309183,EU
-1053309184,1053309951,ZA
-1053309952,1053311231,EU
-1053311232,1053311359,CZ
-1053311360,1053312255,EU
-1053312256,1053312511,DK
-1053312512,1053312767,EU
-1053312768,1053312815,DK
-1053312816,1053312831,EU
-1053312832,1053312871,DK
-1053312872,1053312879,EU
-1053312880,1053312911,DK
-1053312912,1053312927,EU
-1053312928,1053312979,DK
-1053312980,1053312991,EU
-1053312992,1053313007,DK
-1053313008,1053313023,EU
-1053313024,1053313807,GB
-1053313808,1053313823,EU
-1053313824,1053313831,GB
-1053313832,1053313855,EU
-1053313856,1053313887,GB
-1053313888,1053313919,EU
-1053313920,1053314047,GB
-1053314048,1053314063,EU
-1053314064,1053314079,CZ
-1053314080,1053315071,EU
-1053315072,1053317119,GB
-1053317120,1053317295,ZA
-1053317296,1053317375,EU
-1053317376,1053317631,GB
-1053317632,1053318143,EU
-1053318144,1053318655,GB
-1053318656,1053318911,FI
-1053318912,1053318927,EU
-1053318928,1053318935,FI
-1053318936,1053318943,EU
-1053318944,1053318951,FI
-1053318952,1053318975,EU
-1053318976,1053319007,FI
-1053319008,1053319167,EU
-1053319168,1053320191,DE
-1053320192,1053320223,EU
-1053320224,1053320319,DE
-1053320320,1053320447,EU
-1053320448,1053320703,DE
-1053320704,1053321215,EU
-1053321216,1053321727,DE
-1053321728,1053326335,EU
-1053326336,1053326431,BE
-1053326432,1053326447,GB
-1053326448,1053326451,BE
-1053326452,1053326455,EU
-1053326456,1053326463,BE
-1053326464,1053326471,EU
-1053326472,1053326479,BE
-1053326480,1053326527,EU
-1053326528,1053326543,BE
-1053326544,1053326559,EU
-1053326560,1053326847,BE
-1053326848,1053327103,FI
-1053327104,1053327359,DK
-1053327360,1053327615,EU
-1053327616,1053328383,ZA
-1053328384,1053328639,EU
-1053328640,1053328867,ZA
-1053328868,1053328895,EU
-1053328896,1053329087,ZA
-1053329088,1053329119,EU
-1053329120,1053329135,ZA
-1053329136,1053329143,EU
-1053329144,1053329151,ZA
-1053329152,1053329183,EU
-1053329184,1053329279,ZA
-1053329280,1053329407,EU
-1053329408,1053329663,ES
-1053329664,1053330431,EU
-1053330432,1053330687,ES
-1053330688,1053331455,EU
-1053331456,1053331487,NL
-1053331488,1053331583,EU
-1053331584,1053331663,NL
-1053331664,1053331679,EU
-1053331680,1053331703,NL
-1053331704,1053331711,EU
-1053331712,1053332271,NL
-1053332272,1053332319,EU
-1053332320,1053332351,NL
-1053332352,1053332447,EU
-1053332448,1053332479,NL
-1053332480,1053334015,BE
-1053334016,1053334079,EU
-1053334080,1053334191,DK
-1053334192,1053334199,EU
-1053334200,1053334223,DK
-1053334224,1053334239,EU
-1053334240,1053334527,DK
-1053334528,1053334783,SE
-1053334784,1053335551,EU
-1053335552,1053336831,ZA
-1053336832,1053337087,EU
-1053337088,1053337119,ZA
-1053337120,1053337127,EU
-1053337128,1053337183,ZA
-1053337184,1053337607,EU
-1053337608,1053337631,CH
-1053337632,1053337855,EU
-1053337856,1053338111,ZA
-1053338112,1053338623,FI
-1053338624,1053338943,NO
-1053338944,1053338975,EU
-1053338976,1053338983,NO
-1053338984,1053339135,EU
-1053339136,1053339423,NO
-1053339424,1053339455,EU
-1053339456,1053339519,NO
-1053339520,1053339591,EU
-1053339592,1053339599,NO
-1053339600,1053339615,EU
-1053339616,1053339623,NO
-1053339624,1053339631,EU
-1053339632,1053339647,NO
-1053339648,1053340159,AT
-1053340160,1053340415,ZA
-1053340416,1053340479,EU
-1053340480,1053340511,NL
-1053340512,1053340671,EU
-1053340672,1053341567,GB
-1053341568,1053341575,EU
-1053341576,1053341647,GB
-1053341648,1053341655,EU
-1053341656,1053341695,GB
-1053341696,1053343743,EU
-1053343744,1053344255,FI
-1053344256,1053345279,EU
+1053307904,1053308159,GB
+1053313280,1053313535,GB
+1053316688,1053316695,GB
+1053320224,1053320239,DE
+1053327616,1053327871,ZA
+1053329440,1053329471,ES
+1053332992,1053334015,BE
+1053335552,1053336575,ZA
+1053339904,1053340159,AT
+1053340928,1053341183,GB
1053345280,1053345375,PK
-1053345376,1053345407,EU
-1053345408,1053345471,PK
-1053345472,1053347839,EU
-1053347840,1053348351,NL
-1053348352,1053348639,EU
-1053348640,1053348655,PT
-1053348656,1053349119,EU
-1053349120,1053349631,NL
-1053349632,1053349887,EU
-1053349888,1053349951,IE
-1053349952,1053350143,EU
-1053350144,1053350335,IE
-1053350336,1053350351,EU
-1053350352,1053350359,IE
-1053350360,1053350375,EU
-1053350376,1053350391,IE
-1053350392,1053350399,EU
-1053350400,1053350487,BE
-1053350488,1053350655,EU
-1053350656,1053350911,BE
-1053350912,1053351935,EU
-1053351936,1053352191,IL
-1053352192,1053352975,EU
-1053352976,1053352983,IE
-1053352984,1053353103,EU
-1053353104,1053353119,IE
-1053353120,1053353135,EU
-1053353136,1053353215,IE
-1053353216,1053353223,GB
-1053353224,1053353247,IE
-1053353248,1053353263,EU
-1053353264,1053353279,IE
-1053353280,1053353327,GB
-1053353328,1053353983,EU
+1053349376,1053349631,NL
+1053353408,1053353423,GB
1053353984,1053354239,IL
-1053354240,1053354495,EU
-1053354496,1053354655,IL
-1053354656,1053354687,EU
-1053354688,1053354719,IL
-1053354720,1053354751,EU
-1053354752,1053354831,IL
-1053354832,1053354855,EU
-1053354856,1053354863,IL
-1053354864,1053354871,EU
-1053354872,1053354879,IL
-1053354880,1053354911,EU
1053354912,1053355007,IL
-1053355008,1053360127,EU
1053360128,1053364223,ES
1053364224,1053368319,CZ
1053368320,1053376511,SE
@@ -28295,161 +9282,93 @@
1053655040,1053663231,UA
1053663232,1053671423,RU
1053671424,1053687807,LV
-1053687808,1053702635,DE
-1053702636,1053702639,GB
-1053702640,1053753343,DE
+1053687808,1053753343,DE
1053753344,1053818879,NL
1053818880,1053819391,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,1053824015,EU
+1053824000,1053824007,DE
1053824016,1053824023,DE
-1053824024,1053824127,EU
+1053824064,1053824095,DE
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
+1053828096,1053829119,GB
1053829888,1053830143,DE
-1053830144,1053831167,EU
1053831168,1053831423,DE
-1053831424,1053834943,EU
1053834944,1053834975,DE
-1053834976,1053835263,EU
1053835264,1053835775,DE
-1053835776,1053837311,EU
1053837312,1053837439,FK
1053837440,1053837455,GB
-1053837456,1053837567,EU
1053837568,1053837823,GB
1053837824,1053838335,FK
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,1053845727,EU
1053845728,1053845735,DE
-1053845736,1053846015,EU
1053846016,1053846527,DE
-1053846528,1053846783,EU
1053846784,1053847551,DE
1053847552,1053849599,GB
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,1053853695,EU
-1053853696,1053859839,GB
+1053855744,1053859839,GB
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,1053868799,EU
+1053868456,1053868463,ES
+1053868480,1053868543,FR
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,1053872895,EU
+1053872512,1053872639,FR
1053872896,1053873663,DE
-1053873664,1053876223,EU
1053876224,1053876479,DE
1053876480,1053876735,GB
1053876736,1053876991,DE
-1053876992,1053877247,EU
1053877248,1053878271,DE
1053878272,1053878783,GB
1053878784,1053879047,DE
-1053879048,1053879055,EU
1053879056,1053879071,DE
-1053879072,1053879167,GB
-1053879168,1053879295,EU
+1053879104,1053879167,GB
1053879296,1053882111,DE
-1053882112,1053882367,EU
1053882368,1053882879,DE
1053882880,1053883391,GB
1053883392,1053884415,DE
1053884416,1053892607,BH
-1053892608,1053892619,DE
-1053892620,1053892623,GB
-1053892624,1053892943,DE
-1053892944,1053892959,GB
-1053892960,1053894495,DE
-1053894496,1053894527,GB
-1053894528,1053894719,DE
-1053894720,1053894735,FR
-1053894736,1053894743,GB
-1053894744,1053894751,GE
-1053894752,1053894783,DE
-1053894784,1053894815,IL
-1053894816,1053894831,DE
-1053894832,1053894847,US
-1053894848,1053896087,DE
-1053896088,1053896095,US
-1053896096,1053896127,GB
-1053896128,1053896159,DE
-1053896160,1053896175,US
-1053896176,1053896447,DE
-1053896448,1053896703,US
-1053896704,1053900799,DE
+1053892608,1053900799,DE
1053900800,1053917183,NO
1053917184,1053925375,UZ
1053925376,1053927159,SE
@@ -28460,7 +9379,9 @@
1054015488,1054089215,IT
1054089216,1054097407,GE
1054097408,1054105599,NL
-1054105600,1054113791,FR
+1054105600,1054107135,FR
+1054107136,1054107391,GB
+1054107392,1054113791,FR
1054113792,1054121983,NL
1054121984,1054130175,AT
1054130176,1054138367,LT
@@ -28471,35 +9392,24 @@
1054181121,1054181375,GB
1054181376,1054182399,DE
1054182400,1054183423,GB
-1054183424,1054186240,DE
-1054186241,1054187519,GB
-1054187520,1054189823,BG
-1054189824,1054190079,RO
-1054190080,1054195711,BG
+1054183424,1054185216,DE
+1054185217,1054185471,GB
+1054185472,1054186240,DE
+1054186241,1054186495,GB
+1054186496,1054187264,DE
+1054187265,1054187519,GB
+1054187520,1054192639,FR
+1054192640,1054192895,BG
+1054192896,1054195455,FR
+1054195456,1054195711,BG
1054195712,1054212095,BE
-1054212096,1054248959,DE
-1054248960,1054249007,FR
-1054249008,1054249015,DE
-1054249016,1054249031,FR
-1054249032,1054249039,DE
-1054249040,1054249199,FR
-1054249200,1054249207,DE
-1054249208,1054249215,FR
-1054249216,1054277631,DE
+1054212096,1054277631,DE
1054277632,1054343167,KW
1054343168,1054351359,NL
1054351360,1054359551,UA
1054359552,1054367743,RO
1054367744,1054375935,FI
-1054375936,1054381055,GB
-1054381056,1054381567,EG
-1054381568,1054381583,SG
-1054381584,1054381599,HK
-1054381600,1054381615,GB
-1054381616,1054381631,US
-1054381632,1054382079,GB
-1054382080,1054382335,SG
-1054382336,1054384127,GB
+1054375936,1054384127,GB
1054384128,1054400511,DE
1054400512,1054408703,GB
1054408704,1054416895,FR
@@ -28519,203 +9429,45 @@
1054654464,1054662655,MK
1054662656,1054670847,FI
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,1054672159,EU
1054672160,1054672175,IE
-1054672176,1054672255,EU
1054672256,1054672287,IE
-1054672288,1054672319,EU
1054672320,1054672335,US
1054672336,1054672367,IE
-1054672368,1054672383,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
1054711808,1054719999,IT
1054720000,1054867455,NL
-1054867456,1054943231,DE
-1054943232,1054943487,PL
-1054943488,1054946047,DE
-1054946048,1054946303,A2
-1054946304,1054948253,DE
-1054948254,1054948254,EU
-1054948255,1054949727,DE
-1054949728,1054949735,US
-1054949736,1054949807,DE
-1054949808,1054949815,ES
-1054949816,1054971487,DE
-1054971488,1054971503,AT
-1054971504,1054971511,DE
-1054971512,1054971519,AT
-1054971520,1054973951,DE
-1054973952,1054974207,EU
-1054974208,1054978815,DE
-1054978816,1054979071,FR
-1054979072,1055129599,DE
-1055129600,1055187027,CY
-1055187028,1055193855,GR
-1055193856,1055195135,CY
-1055195136,1055196159,EU
-1055196160,1055197823,CH
-1055197824,1055197919,EU
-1055197920,1055198463,CH
-1055198464,1055198975,EU
-1055198976,1055199103,CH
-1055199104,1055199359,EU
-1055199360,1055199375,CH
-1055199376,1055199463,EU
-1055199464,1055199487,CH
-1055199488,1055200415,EU
-1055200416,1055200423,PT
-1055200424,1055201023,EU
-1055201024,1055201279,US
-1055201280,1055203327,EU
-1055203328,1055203343,CZ
-1055203344,1055203839,EU
-1055203840,1055204095,CZ
-1055204096,1055204863,EU
-1055204864,1055205119,CZ
-1055205120,1055205631,EU
-1055205632,1055205887,CZ
-1055205888,1055206655,EU
-1055206656,1055206911,CZ
-1055206912,1055207167,EU
-1055207168,1055207423,CZ
-1055207424,1055207679,EU
-1055207680,1055209215,CZ
-1055209216,1055209727,EU
-1055209728,1055210239,CZ
-1055210240,1055211263,EU
-1055211264,1055211519,CZ
-1055211520,1055212043,EU
-1055212044,1055212131,PT
-1055212132,1055212175,EU
-1055212176,1055212179,PT
-1055212180,1055212183,EU
-1055212184,1055212247,PT
-1055212248,1055212351,EU
-1055212352,1055212415,PT
-1055212416,1055213263,EU
-1055213264,1055213307,PT
-1055213308,1055213311,EU
-1055213312,1055213319,PT
-1055213320,1055213327,EU
-1055213328,1055213359,PT
-1055213360,1055213367,EU
-1055213368,1055213455,PT
-1055213456,1055213471,EU
-1055213472,1055213567,PT
-1055213568,1055214079,EU
-1055214080,1055214239,PT
-1055214240,1055214271,EU
-1055214272,1055214847,PT
-1055214848,1055215359,EU
-1055215360,1055215999,PT
-1055216000,1055216031,EU
-1055216032,1055216383,PT
-1055216384,1055216895,EU
-1055216896,1055217663,PT
-1055217664,1055218207,EU
-1055218208,1055218239,PT
-1055218240,1055218271,EU
-1055218272,1055218299,PT
-1055218300,1055218351,EU
-1055218352,1055218383,PT
-1055218384,1055218391,EU
-1055218392,1055218399,PT
-1055218400,1055218431,EU
-1055218432,1055218447,PT
-1055218448,1055218463,EU
-1055218464,1055218471,PT
-1055218472,1055218479,EU
-1055218480,1055218687,PT
-1055218688,1055220223,EU
-1055220224,1055220287,NL
-1055220288,1055220351,EU
-1055220352,1055220399,NL
-1055220400,1055221503,EU
-1055221504,1055221631,BE
-1055221632,1055223551,EU
-1055223552,1055223807,NL
-1055223808,1055223903,EU
-1055223904,1055223999,LU
-1055224000,1055224063,EU
-1055224064,1055224463,LU
-1055224464,1055224575,EU
-1055224576,1055224607,LU
-1055224608,1055224831,EU
-1055224832,1055224911,LU
-1055224912,1055226111,EU
-1055226112,1055226175,ES
-1055226176,1055226191,EU
-1055226192,1055226207,ES
-1055226208,1055226239,EU
-1055226240,1055226255,ES
-1055226256,1055226263,EU
-1055226264,1055226271,ES
-1055226272,1055226367,EU
-1055226368,1055226399,ES
-1055226400,1055227639,EU
-1055227640,1055227647,PT
-1055227648,1055227903,EU
-1055227904,1055228159,TR
-1055228160,1055228927,EU
-1055228928,1055229183,TR
-1055229184,1055231999,EU
-1055232000,1055232255,NL
-1055232256,1055232511,EU
-1055232512,1055233023,NL
-1055233024,1055234063,EU
-1055234064,1055234079,NL
-1055234080,1055234127,US
-1055234128,1055241983,EU
-1055241984,1055242239,GR
-1055242240,1055252735,EU
-1055252736,1055252991,ES
-1055252992,1055253055,EU
-1055253056,1055253087,ES
-1055253088,1055256447,EU
-1055256448,1055256463,ES
-1055256464,1055326207,EU
+1054867456,1055129599,DE
+1055129600,1055195135,CY
+1055195136,1055203327,CH
+1055211520,1055219711,PT
+1055219712,1055223807,NL
+1055223808,1055225855,LU
+1055225856,1055227903,ES
+1055232000,1055236095,NL
+1055252480,1055256575,ES
+1055260672,1055264767,SE
1055326208,1055334399,RU
1055334400,1055342591,IE
1055342592,1055358975,RO
@@ -28737,15 +9489,11 @@
1055932416,1055940607,FI
1055940608,1055948799,EG
1055948800,1055956991,DE
-1055956992,1055958191,CZ
-1055958192,1055958207,GB
-1055958208,1055965183,CZ
+1055956992,1055965183,CZ
1055965184,1055973375,CH
1055973376,1055981567,FR
1055981568,1055989759,IT
-1055989760,1055992310,DE
-1055992311,1055992318,CH
-1055992319,1055997951,DE
+1055989760,1055997951,DE
1055997952,1056014335,FR
1056014336,1056022527,EG
1056022528,1056030719,GB
@@ -28756,23 +9504,14 @@
1056210944,1056219135,PL
1056219136,1056227327,GB
1056227328,1056243711,TR
-1056243712,1056244255,CH
-1056244256,1056244287,FR
-1056244288,1056244335,MC
-1056244336,1056244367,FR
-1056244368,1056244383,MC
-1056244384,1056244415,FR
-1056244416,1056244479,MC
-1056244480,1056251903,CH
+1056243712,1056251903,CH
1056251904,1056260095,RU
1056260096,1056276479,CZ
1056276480,1056374783,DE
1056374784,1056440319,SE
1056440320,1056473087,TR
1056473088,1056505855,FI
-1056505856,1056507015,PT
-1056507016,1056507023,ES
-1056507024,1056514047,PT
+1056505856,1056514047,PT
1056514048,1056522239,IT
1056522240,1056538623,AT
1056538624,1056546815,RU
@@ -28780,64 +9519,30 @@
1056555008,1056571391,GB
1056571392,1056669695,NL
1056669696,1056702463,MA
-1056702464,1056874559,GB
-1056874560,1056874567,IE
-1056874568,1056874599,GB
-1056874600,1056874607,IE
-1056874608,1056874639,GB
-1056874640,1056874647,IE
-1056874648,1056874655,GB
-1056874656,1056874679,IE
-1056874680,1056874751,GB
+1056702464,1056874751,GB
1056874752,1056875007,IE
-1056875008,1056875071,GB
-1056875072,1056875103,IE
-1056875104,1056875111,GB
-1056875112,1056875135,IE
-1056875136,1056875151,GB
-1056875152,1056875167,IE
-1056875168,1056875263,GB
-1056875264,1056875311,IE
-1056875312,1056875615,GB
-1056875616,1056875623,IE
-1056875624,1056875639,GB
-1056875640,1056875671,IE
-1056875672,1056876031,GB
-1056876032,1056876047,IE
-1056876048,1056964607,GB
+1056875008,1056875663,GB
+1056875664,1056875671,IE
+1056875672,1056964607,GB
1056964608,1061227263,US
-1061227264,1061227774,BO
-1061227775,1061518015,US
-1061518016,1061518047,A2
-1061518048,1061558271,US
+1061227264,1061227519,BO
+1061227520,1061558271,US
1061558272,1061559295,PK
1061559296,1061588735,US
1061588736,1061588991,GU
-1061588992,1061633567,US
-1061633568,1061633575,CA
-1061633576,1061776479,US
-1061776480,1061776639,CA
-1061776640,1061847711,US
-1061847712,1061847743,FR
-1061847744,1061853695,US
+1061588992,1061853695,US
1061853696,1061854207,GB
1061854208,1061939711,US
1061939712,1061940223,JM
-1061940224,1062069247,US
+1061940224,1061987839,US
+1061987840,1061988095,CA
+1061988096,1062069247,US
1062069248,1062070271,PR
1062070272,1062219519,US
1062219520,1062219775,IN
-1062219776,1062222975,US
-1062222976,1062223039,PH
-1062223040,1062244311,US
-1062244312,1062244319,PH
-1062244320,1062262783,US
+1062219776,1062262783,US
1062262784,1062263039,PH
-1062263040,1062378767,US
-1062378768,1062378783,CA
-1062378784,1062429695,US
-1062429696,1062430207,PR
-1062430208,1062473731,US
+1062263040,1062473731,US
1062473732,1062473732,IN
1062473733,1062486271,US
1062486272,1062486527,MX
@@ -28847,60 +9552,27 @@
1062545920,1062546431,BM
1062546432,1062597375,US
1062597376,1062597631,PR
-1062597632,1062636287,US
-1062636288,1062636351,GB
-1062636352,1062691159,US
-1062691160,1062691167,AF
-1062691168,1062725103,US
-1062725104,1062725111,IL
-1062725112,1062871551,US
-1062871552,1062872319,PR
-1062872320,1063390207,US
-1063390208,1063390463,PR
-1063390464,1063467047,US
-1063467048,1063467055,AF
-1063467056,1063504191,US
-1063504192,1063504255,MX
-1063504256,1063560687,US
-1063560688,1063560703,CA
-1063560704,1063567359,US
-1063567360,1063568895,A2
+1062597632,1062871551,US
+1062871552,1062872063,PR
+1062872064,1063057432,US
+1063057433,1063057433,CA
+1063057434,1063305727,US
+1063305728,1063305983,CA
+1063305984,1063568895,US
1063568896,1063569151,TZ
-1063569152,1063573679,A2
-1063573680,1063573695,VN
-1063573696,1063575551,A2
-1063575552,1063579999,US
-1063580000,1063580015,CA
-1063580016,1063587631,US
-1063587632,1063587647,CA
-1063587648,1063598847,US
-1063598848,1063598863,CA
-1063598864,1063690239,US
-1063690240,1063690495,PR
-1063690496,1063727615,US
+1063569152,1063727615,US
1063727616,1063728127,GU
-1063728128,1063747583,US
-1063747584,1063747839,A2
-1063747840,1063748095,UG
-1063748096,1063748607,A2
+1063728128,1063748607,US
1063748608,1063749119,GH
1063749120,1063749631,US
1063749632,1063749887,LR
1063749888,1063750143,SA
1063750144,1063750399,NG
-1063750400,1063750463,SA
-1063750464,1063750527,NG
-1063750528,1063750543,US
-1063750544,1063750559,A2
-1063750560,1063750655,US
+1063750400,1063750655,US
1063750656,1063751679,NG
-1063751680,1063752959,US
-1063752960,1063753215,A2
-1063753216,1063895039,US
+1063751680,1063895039,US
1063895040,1063899135,KR
-1063899136,1064064127,US
-1064064128,1064064191,CA
-1064064192,1064124927,US
+1063899136,1064124927,US
1064124928,1064125695,EC
1064125696,1064125951,US
1064125952,1064126207,PE
@@ -28908,81 +9580,22 @@
1064126720,1064126975,EC
1064126976,1064127487,US
1064127488,1064127999,EC
-1064128000,1064170751,US
-1064170752,1064170799,A2
-1064170800,1064170807,NG
-1064170808,1064170823,IN
-1064170824,1064170831,A2
-1064170832,1064170871,IN
-1064170872,1064170879,A2
-1064170880,1064170911,DE
-1064170912,1064170919,A2
-1064170920,1064170927,NG
-1064170928,1064170943,DE
-1064170944,1064170991,A2
-1064170992,1064170999,NG
-1064171000,1064171007,A2
-1064171008,1064171135,NG
-1064171136,1064171263,IN
-1064171264,1064171551,NG
-1064171552,1064171559,TZ
-1064171560,1064171575,A2
-1064171576,1064171583,PK
-1064171584,1064171607,A2
-1064171608,1064171615,PK
-1064171616,1064171631,GH
-1064171632,1064171647,A2
-1064171648,1064171775,NG
-1064171776,1064171799,A2
-1064171800,1064171815,IN
-1064171816,1064171823,A2
-1064171824,1064171839,IN
-1064171840,1064171855,A2
-1064171856,1064171871,TZ
-1064171872,1064171903,A2
-1064171904,1064171911,NG
-1064171912,1064171919,A2
-1064171920,1064171927,PK
-1064171928,1064171935,A2
-1064171936,1064171967,NG
-1064171968,1064172031,A2
-1064172032,1064204287,US
+1064128000,1064171263,US
+1064171264,1064171519,NG
+1064171520,1064204287,US
1064204288,1064205311,MX
1064205312,1064221951,US
1064221952,1064222207,MX
-1064222208,1064231023,US
-1064231024,1064231039,CA
-1064231040,1064306087,US
-1064306088,1064306095,AU
-1064306096,1064402687,US
-1064402688,1064402751,CA
-1064402752,1064445183,US
+1064222208,1064445183,US
1064445184,1064445439,PK
-1064445440,1064973055,US
-1064973056,1064973183,AU
-1064973184,1065049471,US
-1065049472,1065049535,CA
-1065049536,1065389439,US
-1065389440,1065389455,MY
-1065389456,1065390591,US
-1065390592,1065390599,MY
-1065390600,1065390655,US
-1065390656,1065390687,MX
-1065390688,1065517087,US
-1065517088,1065517119,A2
-1065517120,1065520895,US
-1065520896,1065520911,CA
-1065520912,1065520927,IT
-1065520928,1065530879,US
+1064445440,1065530879,US
1065530880,1065533439,TC
1065533440,1065537535,US
1065537536,1065541631,TC
1065541632,1065547775,US
1065547776,1065548031,FK
1065548032,1065548543,TC
-1065548544,1065583423,US
-1065583424,1065583439,HK
-1065583440,1065611263,US
+1065548544,1065611263,US
1065611264,1065615359,PR
1065615360,1065811967,US
1065811968,1065820159,CA
@@ -28990,120 +9603,39 @@
1065873408,1065877503,PR
1065877504,1065906175,US
1065906176,1065908223,KY
-1065908224,1065926815,US
-1065926816,1065926831,CA
-1065926832,1066311679,US
+1065908224,1066311679,US
1066311680,1066315775,CA
-1066315776,1066332159,US
-1066332160,1066336255,CA
+1066315776,1066333183,US
+1066333184,1066336255,CA
1066336256,1066352639,US
-1066352640,1066355711,JM
+1066352640,1066354943,JM
+1066354944,1066355199,BB
+1066355200,1066355711,JM
1066355712,1066355967,BB
1066355968,1066369023,JM
-1066369024,1066439055,US
-1066439056,1066439071,CA
-1066439072,1066439087,US
-1066439088,1066439095,CA
-1066439096,1066473807,US
-1066473808,1066473823,CA
-1066473824,1066535679,US
-1066535680,1066535687,GB
-1066535688,1066771303,US
-1066771304,1066771319,ME
-1066771320,1066828279,US
-1066828280,1066828287,IN
-1066828288,1066830079,US
-1066830080,1066830111,SG
-1066830112,1066830119,US
-1066830120,1066830127,SG
-1066830128,1066830287,US
-1066830288,1066830303,ML
-1066830304,1066830311,US
-1066830312,1066830319,SG
-1066830320,1066830783,US
-1066830784,1066830799,SG
-1066830800,1066830991,US
-1066830992,1066831007,JP
-1066831008,1066831071,US
-1066831072,1066831079,JP
-1066831080,1066831199,US
-1066831200,1066831231,JP
-1066831232,1067237887,US
-1067237888,1067238399,JP
-1067238400,1067473471,US
-1067473472,1067473535,CA
-1067473536,1067474751,US
-1067474752,1067474767,NL
-1067474768,1067481855,US
+1066369024,1067238143,US
+1067238144,1067238399,JP
+1067238400,1067481855,US
1067481856,1067482111,CA
-1067482112,1067494847,US
-1067494848,1067494879,CA
-1067494880,1067503615,US
-1067503616,1067503743,CA
-1067503744,1067532287,US
+1067482112,1067532287,US
1067532288,1067532799,HN
-1067532800,1067537959,US
-1067537960,1067537967,GB
-1067537968,1067552511,US
-1067552512,1067552767,PR
-1067552768,1067573247,US
-1067573248,1067573255,SG
-1067573256,1067575295,US
+1067532800,1067575295,US
1067575296,1067577343,HN
-1067577344,1067590111,US
-1067590112,1067590143,CA
-1067590144,1067593983,US
-1067593984,1067594239,PR
-1067594240,1067617791,US
+1067577344,1067617791,US
1067617792,1067618047,CN
-1067618048,1067621375,US
-1067621376,1067621631,PR
-1067621632,1067625967,US
-1067625968,1067625983,CH
-1067625984,1067653255,US
-1067653256,1067653263,PR
-1067653264,1067693055,US
+1067618048,1067693055,US
1067693056,1067693567,CO
-1067693568,1067700735,US
-1067700736,1067701247,CW
-1067701248,1067726847,US
+1067693568,1067726847,US
1067726848,1067727359,EC
1067727360,1067736831,US
1067736832,1067737087,PR
1067737088,1067740159,US
1067740160,1067741183,HN
-1067741184,1067762815,US
-1067762816,1067762831,CA
-1067762832,1067780607,US
+1067741184,1067780607,US
1067780608,1067780863,GB
-1067780864,1067822863,US
-1067822864,1067822871,CA
-1067822872,1067824895,US
+1067780864,1067824895,US
1067824896,1067825151,PR
-1067825152,1067838463,US
-1067838464,1067838591,IT
-1067838592,1067856575,US
-1067856576,1067856607,CO
-1067856608,1067863807,US
-1067863808,1067863935,CA
-1067863936,1067908295,US
-1067908296,1067908303,CH
-1067908304,1067909023,US
-1067909024,1067909039,SG
-1067909040,1067914655,US
-1067914656,1067914751,CA
-1067914752,1067918879,US
-1067918880,1067918887,NL
-1067918888,1067923231,US
-1067923232,1067923239,CA
-1067923240,1067934911,US
-1067934912,1067934927,CN
-1067934928,1067934935,PR
-1067934936,1067977895,US
-1067977896,1067977903,CA
-1067977904,1067978751,US
-1067978752,1067979007,PR
-1067979008,1067989247,US
+1067825152,1067989247,US
1067989248,1067989503,EC
1067989504,1067998463,US
1067998464,1067998719,CO
@@ -29111,29 +9643,15 @@
1068004352,1068004607,CA
1068004608,1068017663,US
1068017664,1068018175,YE
-1068018176,1068070887,US
-1068070888,1068070895,CA
-1068070896,1068083455,US
-1068083456,1068083711,PR
-1068083712,1068096415,US
-1068096416,1068096447,CA
-1068096448,1068119407,US
-1068119408,1068119423,DE
-1068119424,1068123135,US
-1068123136,1068123647,BB
-1068123648,1068167439,US
-1068167440,1068167447,GB
-1068167448,1068175871,US
+1068018176,1068123135,US
+1068123136,1068123391,BB
+1068123392,1068175871,US
1068175872,1068176383,YE
1068176384,1068199935,US
1068199936,1068204031,CA
1068204032,1068230655,US
1068230656,1068230911,CO
-1068230912,1068284735,US
-1068284736,1068284743,CA
-1068284744,1068284751,US
-1068284752,1068284759,DK
-1068284760,1068326911,US
+1068230912,1068326911,US
1068326912,1068327167,EC
1068327168,1068346367,US
1068346368,1068346879,YE
@@ -29141,36 +9659,20 @@
1068419072,1068421119,CO
1068421120,1068425983,US
1068425984,1068426239,EC
-1068426240,1068462079,US
-1068462080,1068462335,PR
-1068462336,1068473343,US
-1068473344,1068473855,BB
-1068473856,1068474111,US
-1068474112,1068474367,BB
-1068474368,1068480159,US
-1068480160,1068480191,IN
-1068480192,1068480431,US
-1068480432,1068480447,SE
-1068480448,1068481023,US
+1068426240,1068473343,US
+1068473344,1068474367,BB
+1068474368,1068481023,US
1068481024,1068481535,PR
1068481536,1068491263,US
1068491264,1068491519,HN
1068491520,1069622866,US
1069622867,1069622867,MX
-1069622868,1070652215,US
-1070652216,1070652216,US
-1070652217,1070701055,US
+1069622868,1070701055,US
1070701056,1070701311,DO
1070701312,1070701567,HT
1070701568,1070729471,US
1070729472,1070729727,CA
-1070729728,1070805559,US
-1070805560,1070805567,VG
-1070805568,1070849407,US
-1070849408,1070849423,US
-1070849424,1071100159,US
-1071100160,1071100415,PR
-1071100416,1071100927,US
+1070729728,1071100927,US
1071100928,1071101951,PR
1071101952,1071134719,US
1071134720,1071136767,HK
@@ -29179,60 +9681,24 @@
1071142912,1071144959,US
1071144960,1071153151,LB
1071153152,1071157247,US
-1071157248,1071161343,SG
-1071161344,1071162367,US
+1071157248,1071158271,SG
+1071158272,1071159295,US
+1071159296,1071160319,SG
+1071160320,1071162367,US
1071162368,1071163391,KR
1071163392,1071165439,HK
-1071165440,1071166463,US
-1071166464,1071167487,A2
-1071167488,1071169535,US
+1071165440,1071169535,US
1071169536,1071171583,TW
-1071171584,1071193279,US
-1071193280,1071193295,DM
-1071193296,1071193311,US
-1071193312,1071193359,DM
-1071193360,1071193375,US
-1071193376,1071193423,DM
-1071193424,1071193455,US
-1071193456,1071193471,DM
-1071193472,1071193535,US
-1071193536,1071193551,DM
-1071193552,1071193567,US
-1071193568,1071193583,DM
-1071193584,1071193631,US
-1071193632,1071193663,DM
-1071193664,1071193703,US
-1071193704,1071193711,DM
-1071193712,1071193727,US
-1071193728,1071193743,DM
-1071193744,1071193759,US
-1071193760,1071193807,DM
-1071193808,1071193847,US
-1071193848,1071193855,DM
-1071193856,1071193991,US
-1071193992,1071194015,DM
-1071194016,1071194079,US
-1071194080,1071194087,DM
-1071194088,1071196159,US
-1071196160,1071198207,HK
-1071198208,1071199231,JP
-1071199232,1071201279,US
-1071201280,1071202303,TH
-1071202304,1071204351,US
-1071204352,1071205375,HK
-1071205376,1071206399,US
-1071206400,1071208447,HK
-1071208448,1071210495,TW
-1071210496,1071216639,US
-1071216640,1071217663,AU
-1071217664,1071227903,US
-1071227904,1071228927,A2
-1071228928,1071251711,US
+1071171584,1071206911,US
+1071206912,1071207167,HK
+1071207168,1071251711,US
1071251712,1071252479,HK
1071252480,1071254783,US
1071254784,1071255039,GB
1071255040,1071255295,US
-1071255296,1071255551,DE
+1071255296,1071255525,LB
+1071255526,1071255526,DE
+1071255527,1071255551,LB
1071255552,1071256319,US
1071256320,1071256575,HK
1071256576,1071258879,US
@@ -29247,37 +9713,23 @@
1071267072,1071267839,HK
1071267840,1071268095,US
1071268096,1071268863,NL
-1071268864,1071270655,US
-1071270656,1071270911,AP
-1071270912,1071271167,US
-1071271168,1071271263,AP
-1071271264,1071271279,US
-1071271280,1071271359,AP
-1071271360,1071271679,US
+1071268864,1071271679,US
1071271680,1071271935,TW
1071271936,1071272191,US
1071272192,1071272447,SE
1071272448,1071274239,US
1071274240,1071274495,FR
-1071274496,1071280895,US
+1071274496,1071278959,US
+1071278960,1071278963,SG
+1071278964,1071280895,US
1071280896,1071281151,HK
1071281152,1071281407,US
1071281408,1071281663,AU
1071281664,1071282943,US
1071282944,1071283199,PH
-1071283200,1071283967,US
-1071283968,1071284223,A2
-1071284224,1071284479,US
-1071284480,1071284559,DM
-1071284560,1071284575,US
-1071284576,1071284607,DM
-1071284608,1071284639,US
-1071284640,1071284671,DM
-1071284672,1071286527,US
+1071283200,1071286527,US
1071286528,1071287295,LB
-1071287296,1071287551,US
-1071287552,1071287807,A2
-1071287808,1071288063,US
+1071287296,1071288063,US
1071288064,1071288319,FR
1071288320,1071288575,US
1071288576,1071288831,HK
@@ -29297,17 +9749,13 @@
1071293696,1071293951,SG
1071293952,1071294207,US
1071294208,1071294463,MY
-1071294464,1071294719,US
-1071294720,1071294975,A2
-1071294976,1071295231,US
+1071294464,1071295231,US
1071295232,1071295487,TH
1071295488,1071295743,US
1071295744,1071295999,GR
1071296000,1071296255,US
1071296256,1071296511,HK
-1071296512,1071296671,US
-1071296672,1071296703,DM
-1071296704,1071296767,US
+1071296512,1071296767,US
1071296768,1071297023,AE
1071297024,1071297791,US
1071297792,1071298047,IN
@@ -29325,37 +9773,7 @@
1071301888,1071302143,VN
1071302144,1071306495,US
1071306496,1071306751,HK
-1071306752,1071308823,US
-1071308824,1071308831,DM
-1071308832,1071308863,US
-1071308864,1071308927,DM
-1071308928,1071308959,US
-1071308960,1071309039,DM
-1071309040,1071309071,US
-1071309072,1071309087,DM
-1071309088,1071309119,US
-1071309120,1071309151,DM
-1071309152,1071309167,US
-1071309168,1071309183,DM
-1071309184,1071309215,US
-1071309216,1071309231,DM
-1071309232,1071309335,US
-1071309336,1071309343,DM
-1071309344,1071309359,US
-1071309360,1071309375,DM
-1071309376,1071309423,US
-1071309424,1071309439,DM
-1071309440,1071309463,US
-1071309464,1071309471,DM
-1071309472,1071309503,HK
-1071309504,1071309519,DM
-1071309520,1071309527,US
-1071309528,1071309567,DM
-1071309568,1071309695,US
-1071309696,1071309727,DM
-1071309728,1071309759,US
-1071309760,1071309823,DM
-1071309824,1071310079,US
+1071306752,1071310079,US
1071310080,1071310335,SG
1071310336,1071313919,US
1071313920,1071314175,TW
@@ -29369,37 +9787,7 @@
1071318784,1071319039,IN
1071319040,1071321087,US
1071321088,1071322111,HK
-1071322112,1071362063,US
-1071362064,1071362079,DM
-1071362080,1071362095,US
-1071362096,1071362111,DM
-1071362112,1071362175,US
-1071362176,1071362199,DM
-1071362200,1071362207,US
-1071362208,1071362239,HK
-1071362240,1071362287,US
-1071362288,1071362319,DM
-1071362320,1071362399,US
-1071362400,1071362559,DM
-1071362560,1071362623,US
-1071362624,1071362639,DM
-1071362640,1071362655,US
-1071362656,1071362823,DM
-1071362824,1071362831,US
-1071362832,1071362839,DM
-1071362840,1071362847,US
-1071362848,1071362863,DM
-1071362864,1071362871,US
-1071362872,1071362879,DM
-1071362880,1071362911,US
-1071362912,1071362919,DM
-1071362920,1071362927,US
-1071362928,1071362943,DM
-1071362944,1071363007,US
-1071363008,1071363039,DM
-1071363040,1071363455,US
-1071363456,1071363479,DM
-1071363480,1071415295,US
+1071322112,1071415295,US
1071415296,1071417343,TW
1071417344,1071446015,US
1071446016,1071448063,NL
@@ -29418,142 +9806,65 @@
1071487712,1071489023,HK
1071489024,1071517695,US
1071517696,1071519743,HK
-1071519744,1071579391,US
+1071519744,1071522817,US
+1071522818,1071522818,MW
+1071522819,1071579391,US
1071579392,1071579647,CA
-1071579648,1071599105,US
-1071599106,1071599134,PH
-1071599135,1071599300,US
-1071599301,1071599313,PH
-1071599314,1071599392,US
-1071599393,1071599415,PH
-1071599416,1071599477,US
-1071599478,1071599490,PH
-1071599491,1071954175,US
-1071954176,1071954183,GB
-1071954184,1071954239,US
-1071954240,1071954271,GB
-1071954272,1071954279,US
-1071954280,1071954287,FR
-1071954288,1071954303,US
+1071579648,1071954303,US
1071954304,1071954319,GB
-1071954320,1071954375,US
-1071954376,1071954383,NE
-1071954384,1072228863,US
+1071954320,1072157631,US
+1072157632,1072157663,DE
+1072157664,1072228863,US
1072228864,1072229375,CA
1072229376,1072360703,US
1072360704,1072360959,HK
-1072360960,1072383543,US
-1072383544,1072383551,ME
-1072383552,1072571831,US
-1072571832,1072571839,CA
-1072571840,1072707327,US
+1072360960,1072707327,US
1072707328,1072707583,IN
-1072707584,1072710327,US
-1072710328,1072710335,DE
-1072710336,1072712479,US
-1072712480,1072712495,IL
-1072712496,1072715943,US
-1072715944,1072715951,IL
-1072715952,1072718031,US
-1072718032,1072718039,DE
-1072718040,1072725071,US
-1072725072,1072725079,NZ
-1072725080,1072725311,US
-1072725312,1072725343,DE
-1072725344,1072727039,US
-1072727040,1072727047,JM
-1072727048,1072727215,US
-1072727216,1072727223,JM
-1072727224,1072773559,US
-1072773560,1072773567,JP
-1072773568,1072774335,US
-1072774336,1072774367,JP
-1072774368,1072774463,US
-1072774464,1072774479,JP
-1072774480,1072777631,US
-1072777632,1072777647,TW
-1072777648,1072785415,US
-1072785416,1072785423,DK
-1072785424,1072785439,US
-1072785440,1072785471,DK
-1072785472,1072790015,US
-1072790016,1072790031,JP
-1072790032,1072923135,US
+1072707584,1072923135,US
1072923136,1072923391,CA
-1072923392,1072923903,US
-1072923904,1072924159,CA
+1072923392,1072924159,US
1072924160,1072924671,HT
1072924672,1072925183,US
1072925184,1072925695,GB
1072925696,1072926207,CA
-1072926208,1072926471,US
-1072926472,1072926527,CA
-1072926528,1072926591,US
-1072926592,1072926719,CA
+1072926208,1072926463,US
+1072926464,1072926719,CA
1072926720,1072926975,PH
1072926976,1072927487,CA
1072927488,1072927743,US
-1072927744,1072928047,CA
-1072928048,1072928063,IE
-1072928064,1072928095,US
-1072928096,1072928127,CA
-1072928128,1072928255,US
-1072928256,1072928263,CA
-1072928264,1072928287,US
-1072928288,1072928319,CA
-1072928320,1072928447,US
-1072928448,1072928767,CA
+1072927744,1072927999,CA
+1072928000,1072928511,US
+1072928512,1072928767,CA
1072928768,1072929023,US
1072929024,1072929535,CA
-1072929536,1072929791,US
-1072929792,1072930047,CA
-1072930048,1072930303,US
+1072929536,1072930303,US
1072930304,1072931071,CA
-1072931072,1072931199,US
-1072931200,1072931327,AE
+1072931072,1072931327,US
1072931328,1072931583,CA
1072931584,1072931839,SY
1072931840,1072932607,CA
1072932608,1072932863,NG
-1072932864,1072933119,US
-1072933120,1072933151,FR
-1072933152,1072933247,CA
-1072933248,1072933375,US
-1072933376,1072934399,CA
-1072934400,1072934719,US
-1072934720,1072934751,CA
-1072934752,1072934775,US
+1072932864,1072933887,US
+1072933888,1072934399,CA
+1072934400,1072934775,US
1072934776,1072934783,FR
-1072934784,1072934847,AU
-1072934848,1072934879,CA
-1072934880,1072934911,TW
-1072934912,1072934943,CA
-1072934944,1072934975,PH
-1072934976,1072935039,CA
-1072935040,1072935135,US
-1072935136,1072935159,CA
-1072935160,1072935167,US
-1072935168,1072935679,CA
-1072935680,1072935807,PH
-1072935808,1072936447,CA
+1072934784,1072935423,US
+1072935424,1072935679,CA
+1072935680,1072936191,US
+1072936192,1072936447,CA
1072936448,1072936703,PH
1072936704,1072937215,US
1072937216,1072937471,IR
1072937472,1072937727,US
1072937728,1072938239,CA
1072938240,1072938495,VG
-1072938496,1072938751,CA
-1072938752,1072939007,US
+1072938496,1072939007,US
1072939008,1072939263,CA
-1072939264,1072939327,US
-1072939328,1072939519,CA
-1072939520,1072940031,US
-1072940032,1072942079,CA
-1072942080,1072942143,US
-1072942144,1072942335,CA
-1072942336,1072942591,US
-1072942592,1072955391,CA
-1072955392,1073022975,US
+1072939264,1072941055,US
+1072941056,1072942079,CA
+1072942080,1072943103,US
+1072943104,1072945151,CA
+1072945152,1073022975,US
1073022976,1073025791,HN
1073025792,1073026047,NI
1073026048,1073026303,US
@@ -29564,9 +9875,11 @@
1073028608,1073029119,GD
1073029120,1073031167,PR
1073031168,1073031423,US
-1073031424,1073031935,CW
-1073031936,1073033215,US
-1073033216,1073035263,CW
+1073031424,1073031679,CW
+1073031680,1073033215,US
+1073033216,1073034239,CW
+1073034240,1073034495,BB
+1073034496,1073035263,CW
1073035264,1073036032,GD
1073036033,1073036543,US
1073036544,1073037055,MX
@@ -29586,1575 +9899,389 @@
1073049600,1073052671,BS
1073052672,1073075460,US
1073075461,1073075716,NL
-1073075717,1073091397,US
-1073091398,1073091407,CH
-1073091408,1073093646,US
-1073093647,1073093654,PE
-1073093655,1073094557,US
-1073094558,1073094570,IT
-1073094571,1073373183,US
+1073075717,1073373183,US
1073373184,1073381375,CA
-1073381376,1073381391,US
-1073381392,1073381463,NL
-1073381464,1073381471,US
-1073381472,1073381631,NL
-1073381632,1073381887,EU
-1073381888,1073383727,US
-1073383728,1073383735,CA
-1073383736,1073383839,US
-1073383840,1073383871,VE
-1073383872,1073384191,US
-1073384192,1073384223,BR
-1073384224,1073384287,US
-1073384288,1073384295,BR
-1073384296,1073384511,US
-1073384512,1073384575,CA
-1073384576,1073384607,US
-1073384608,1073384639,BR
-1073384640,1073384711,US
-1073384712,1073384719,CL
-1073384720,1073384775,US
-1073384776,1073384783,CA
-1073384784,1073384879,US
-1073384880,1073384887,CA
-1073384888,1073385087,US
-1073385088,1073385095,CA
-1073385096,1073385151,US
-1073385152,1073385183,BR
-1073385184,1073385279,US
-1073385280,1073385311,BR
-1073385312,1073390207,US
-1073390208,1073390215,CA
-1073390216,1073390271,US
-1073390272,1073390303,CA
-1073390304,1073393887,US
-1073393888,1073393895,CO
-1073393896,1073393911,US
-1073393912,1073393919,CO
-1073393920,1073394191,US
-1073394192,1073394207,MX
-1073394208,1073394239,CA
-1073394240,1073394247,MX
-1073394248,1073394263,US
-1073394264,1073394271,MX
-1073394272,1073394279,US
-1073394280,1073394287,MX
-1073394288,1073394295,US
-1073394296,1073394303,MX
-1073394304,1073394311,AR
-1073394312,1073394439,US
-1073394440,1073394463,MX
-1073394464,1073394495,US
-1073394496,1073394503,MX
-1073394504,1073394543,US
-1073394544,1073394559,MX
-1073394560,1073394591,US
-1073394592,1073394623,AF
-1073394624,1073394719,US
-1073394720,1073394751,BR
-1073394752,1073394767,AR
-1073394768,1073394799,US
-1073394800,1073394807,CA
-1073394808,1073394967,US
-1073394968,1073394975,AR
-1073394976,1073395167,US
-1073395168,1073395175,AR
-1073395176,1073395183,US
-1073395184,1073395191,AR
-1073395192,1073395239,US
-1073395240,1073395247,BR
-1073395248,1073395399,US
-1073395400,1073395407,CA
-1073395408,1073395423,PR
-1073395424,1073395967,US
-1073395968,1073395999,BR
-1073396000,1073396191,US
-1073396192,1073396207,CA
-1073396208,1073396215,BR
-1073396216,1073396751,US
-1073396752,1073396831,BR
-1073396832,1073396863,US
-1073396864,1073396895,CA
-1073396896,1073396911,US
-1073396912,1073396919,CA
-1073396920,1073396927,US
-1073396928,1073396935,VE
-1073396936,1073396959,US
-1073396960,1073396991,CA
-1073396992,1073397063,US
-1073397064,1073397071,BR
-1073397072,1073434783,US
-1073434784,1073434799,CA
-1073434800,1073434807,GB
-1073434808,1073435583,US
-1073435584,1073435647,CA
-1073435648,1073438207,US
-1073438208,1073438463,A2
-1073438464,1074020351,US
+1073381376,1073454591,US
+1073454592,1073454847,KY
+1073454848,1074020351,US
1074020352,1074028543,CA
1074028544,1074118655,US
-1074118656,1074120703,CA
-1074120704,1074120719,US
-1074120720,1074120959,CA
+1074118656,1074120959,CA
1074120960,1074121215,US
-1074121216,1074122415,CA
-1074122416,1074122431,US
-1074122432,1074125055,CA
+1074121216,1074125055,CA
1074125056,1074125311,US
1074125312,1074126847,CA
1074126848,1074127359,US
-1074127360,1074128511,CA
-1074128512,1074128575,US
-1074128576,1074130943,CA
+1074127360,1074130943,CA
1074130944,1074131199,US
1074131200,1074135039,CA
1074135040,1074184191,US
1074184192,1074188287,CA
-1074188288,1074229247,US
-1074229248,1074241535,CA
+1074188288,1074233343,US
+1074233344,1074241535,CA
1074241536,1074397439,US
-1074397440,1074399039,CA
-1074399040,1074399231,US
-1074399232,1074462463,CA
-1074462464,1074463743,US
-1074463744,1074493695,CA
-1074493696,1074493823,US
-1074493824,1074494719,CA
+1074397440,1074398975,CA
+1074398976,1074399231,US
+1074399232,1074406655,CA
+1074406656,1074407167,US
+1074407168,1074408191,CA
+1074408192,1074408447,US
+1074408448,1074409471,CA
+1074409472,1074409727,US
+1074409728,1074410495,CA
+1074410496,1074411007,US
+1074411008,1074413567,CA
+1074413568,1074413823,US
+1074413824,1074417407,CA
+1074417408,1074418431,US
+1074418432,1074419967,CA
+1074419968,1074420223,US
+1074420224,1074421247,CA
+1074421248,1074421503,US
+1074421504,1074426623,CA
+1074426624,1074427135,US
+1074427136,1074428671,CA
+1074428672,1074428927,US
+1074428928,1074430207,CA
+1074430208,1074430463,US
+1074430464,1074433535,CA
+1074433536,1074433791,US
+1074433792,1074437119,CA
+1074437120,1074437375,US
+1074437376,1074438911,CA
+1074438912,1074439167,US
+1074439168,1074441727,CA
+1074441728,1074441983,US
+1074441984,1074444031,CA
+1074444032,1074444287,US
+1074444288,1074445311,CA
+1074445312,1074445567,US
+1074445568,1074446079,CA
+1074446080,1074446335,US
+1074446336,1074453247,CA
+1074453248,1074453503,US
+1074453504,1074455039,CA
+1074455040,1074455295,US
+1074455296,1074456319,CA
+1074456320,1074456575,US
+1074456576,1074459135,CA
+1074459136,1074459391,US
+1074459392,1074462207,CA
+1074462208,1074463743,US
+1074463744,1074465535,CA
+1074465536,1074465791,US
+1074465792,1074466815,CA
+1074466816,1074467071,US
+1074467072,1074469887,CA
+1074469888,1074470143,US
+1074470144,1074472191,CA
+1074472192,1074472447,US
+1074472448,1074474751,CA
+1074474752,1074475263,US
+1074475264,1074479871,CA
+1074479872,1074480127,US
+1074480128,1074482175,CA
+1074482176,1074482431,US
+1074482432,1074484479,CA
+1074484480,1074484735,US
+1074484736,1074488319,CA
+1074488320,1074488831,US
+1074488832,1074493695,CA
+1074493696,1074494207,US
+1074494208,1074494719,CA
1074494720,1074495743,US
-1074495744,1074513407,CA
-1074513408,1074672671,US
-1074672672,1074672703,IN
-1074672704,1074672943,US
-1074672944,1074672959,DK
-1074672960,1074673663,US
-1074673664,1074673679,CY
-1074673680,1074675679,US
-1074675680,1074675687,GB
-1074675688,1074680623,US
-1074680624,1074680639,CA
-1074680640,1074680703,US
-1074680704,1074680719,IL
-1074680720,1074681343,US
-1074681344,1074681359,CA
-1074681360,1074682687,US
-1074682688,1074682751,CA
-1074682752,1074683023,US
-1074683024,1074683039,CA
-1074683040,1074683807,US
-1074683808,1074683839,CA
-1074683840,1074690895,US
-1074690896,1074690911,AR
-1074690912,1074690943,US
-1074690944,1074691007,AR
-1074691008,1074691135,US
-1074691136,1074691199,AR
-1074691200,1074701583,US
-1074701584,1074701591,CA
-1074701592,1074701599,US
-1074701600,1074701631,CA
-1074701632,1074702783,US
-1074702784,1074702847,CA
-1074702848,1074703615,US
+1074495744,1074497023,CA
+1074497024,1074497279,US
+1074497280,1074498815,CA
+1074498816,1074499071,US
+1074499072,1074501375,CA
+1074501376,1074501631,US
+1074501632,1074503935,CA
+1074503936,1074504191,US
+1074504192,1074505215,CA
+1074505216,1074505471,US
+1074505472,1074508031,CA
+1074508032,1074508287,US
+1074508288,1074509823,CA
+1074509824,1074510079,US
+1074510080,1074513151,CA
+1074513152,1074703615,US
1074703616,1074703871,GB
1074703872,1074704383,US
1074704384,1074704639,GB
-1074704640,1074704703,US
-1074704704,1074704711,CH
-1074704712,1074704767,US
-1074704768,1074704831,CH
-1074704832,1074705727,US
-1074705728,1074705743,GB
-1074705744,1074705791,US
-1074705792,1074705799,IL
-1074705800,1074705887,US
-1074705888,1074705903,IL
-1074705904,1074706175,US
-1074706176,1074706303,IL
-1074706304,1074706367,US
-1074706368,1074706431,GB
-1074706432,1074706679,US
-1074706680,1074706687,GB
-1074706688,1074707775,US
-1074707776,1074707839,GB
-1074707840,1074707967,US
+1074704640,1074707967,US
1074707968,1074708223,GB
1074708224,1074708991,US
1074708992,1074709247,PH
-1074709248,1074711039,US
-1074711040,1074711055,IN
-1074711056,1074711103,US
-1074711104,1074711167,GB
-1074711168,1074716679,US
-1074716680,1074716687,GB
-1074716688,1074716719,US
-1074716720,1074716735,GB
-1074716736,1074733055,US
+1074709248,1074733055,US
1074733056,1074737151,AU
1074737152,1074745343,CA
1074745344,1074757631,US
1074757632,1074765823,CA
1074765824,1074777343,US
1074777344,1074777599,AU
-1074777600,1074783167,US
-1074783168,1074783199,CA
-1074783200,1074783231,BM
-1074783232,1074785823,US
-1074785824,1074785855,AU
-1074785856,1074870271,US
-1074870272,1074872319,CA
+1074777600,1074871591,US
+1074871592,1074871599,CA
+1074871600,1074871807,US
+1074871808,1074872319,CA
1074872320,1074937855,US
1074937856,1074946047,CA
1074946048,1074962431,US
1074962432,1074970623,CA
-1074970624,1075061495,US
-1075061496,1075061503,PE
-1075061504,1075062936,US
+1074970624,1075062936,US
1075062937,1075062937,SA
-1075062938,1075117287,US
-1075117288,1075117311,IN
-1075117312,1075147266,US
+1075062938,1075147266,US
1075147267,1075147267,PK
1075147268,1075265535,US
1075265536,1075269631,KR
-1075269632,1075421183,US
+1075269632,1075384319,US
+1075385600,1075386111,US
+1075387136,1075387391,US
+1075388416,1075421183,US
1075421184,1075429375,CA
1075429376,1075478527,US
-1075478528,1075479103,CA
-1075479104,1075479111,GB
-1075479112,1075479135,CA
-1075479136,1075479151,US
-1075479152,1075479607,CA
-1075479608,1075479615,US
-1075479616,1075482655,CA
-1075482656,1075482671,US
-1075482672,1075482967,CA
-1075482968,1075482975,US
-1075482976,1075494911,CA
-1075494912,1075513151,US
-1075513152,1075513183,KW
-1075513184,1075532663,US
-1075532664,1075532673,IT
-1075532674,1075558143,US
+1075478528,1075494911,CA
+1075494912,1075558143,US
1075558144,1075558911,VI
1075558912,1075576831,US
-1075576832,1075577087,NO
-1075577088,1075577103,GB
-1075577104,1075577271,NO
-1075577272,1075577279,GB
-1075577280,1075577311,NO
-1075577312,1075577599,GB
-1075577600,1075577615,NO
-1075577616,1075577623,GB
-1075577624,1075577775,NO
-1075577776,1075577791,GB
-1075577792,1075577855,NO
-1075577856,1075578111,GB
-1075578112,1075578623,NO
-1075578624,1075578879,GB
-1075578880,1075578927,NO
-1075578928,1075578943,GB
-1075578944,1075579007,NO
-1075579008,1075579039,GB
-1075579040,1075579047,NO
-1075579048,1075579059,GB
-1075579060,1075579747,NO
-1075579748,1075579751,GB
-1075579752,1075579935,NO
-1075579936,1075579943,GB
-1075579944,1075579967,NO
-1075579968,1075579975,GB
-1075579976,1075579983,NO
-1075579984,1075579999,GB
-1075580000,1075580055,NO
-1075580056,1075580063,GB
-1075580064,1075581271,NO
-1075581272,1075581279,NL
-1075581280,1075581295,NO
-1075581296,1075581311,NL
-1075581312,1075582975,NO
-1075582976,1075583007,NL
-1075583008,1075583039,NO
-1075583040,1075583055,NL
-1075583056,1075583119,NO
-1075583120,1075583123,NL
-1075583124,1075583127,NO
-1075583128,1075583135,NL
-1075583136,1075583147,NO
-1075583148,1075583151,NL
-1075583152,1075583503,NO
-1075583504,1075583519,NL
-1075583520,1075583551,NO
-1075583552,1075583567,NL
-1075583568,1075583583,NO
-1075583584,1075583591,NL
-1075583592,1075583647,NO
-1075583648,1075583663,NL
-1075583664,1075584071,NO
-1075584072,1075584095,NL
-1075584096,1075584695,NO
-1075584696,1075584711,NL
-1075584712,1075585023,NO
-1075585024,1075593967,US
-1075593968,1075593983,CA
-1075593984,1075594975,US
-1075594976,1075594991,CA
-1075594992,1075595343,US
-1075595344,1075595359,CA
-1075595360,1075596031,US
-1075596032,1075596047,CA
-1075596048,1075596831,US
-1075596832,1075596847,CA
-1075596848,1075597023,US
-1075597024,1075597039,CA
-1075597040,1075597167,US
-1075597168,1075597183,CA
-1075597184,1075597567,US
-1075597568,1075597599,CA
-1075597600,1075598367,US
-1075598368,1075598383,CA
-1075598384,1075598943,US
-1075598944,1075598991,CA
-1075598992,1075599007,US
-1075599008,1075599039,CA
-1075599040,1075599471,US
-1075599472,1075599487,IL
-1075599488,1075599967,US
-1075599968,1075599983,IE
-1075599984,1075601279,US
-1075601280,1075601295,CA
-1075601296,1075609599,US
+1075576832,1075577087,GB
+1075577088,1075579391,NO
+1075579392,1075579903,GB
+1075579904,1075585023,NO
+1075585024,1075609599,US
1075609600,1075613695,TT
-1075613696,1075744767,US
-1075744768,1075748863,A2
-1075748864,1075782143,US
-1075782144,1075782399,US
-1075782400,1075855359,US
+1075613696,1075769343,US
+1075769344,1075773439,CA
+1075773440,1075855359,US
1075855360,1075871743,DO
1075871744,1075970047,US
1075970048,1075972095,CA
1075972096,1075972351,GB
-1075972352,1075973703,US
-1075973704,1075973711,CA
-1075973712,1075973887,US
+1075972352,1075973887,US
1075973888,1075974143,CA
1075974144,1075975167,US
1075975168,1075975679,CA
-1075975680,1075975815,US
-1075975816,1075975983,CA
-1075975984,1075975999,US
-1075976000,1075976175,CA
-1075976176,1075976191,US
+1075975680,1075976127,US
+1075976128,1075976159,CA
+1075976160,1075976191,US
1075976192,1075976447,CA
-1075976448,1075976479,US
-1075976480,1075976511,CA
-1075976512,1075976543,US
-1075976544,1075976639,CA
-1075976640,1075976655,US
-1075976656,1075976663,CA
-1075976664,1075976671,US
-1075976672,1075976687,CA
-1075976688,1075976695,US
-1075976696,1075976703,CA
-1075976704,1075976959,US
+1075976448,1075976959,US
1075976960,1075978239,CA
-1075978240,1075978687,US
-1075978688,1075978719,CA
-1075978720,1075979551,US
-1075979552,1075979583,CA
-1075979584,1075980575,US
-1075980576,1075980591,GB
-1075980592,1075982335,US
+1075978240,1075982335,US
1075982336,1075982591,CA
-1075982592,1075982607,US
-1075982608,1075982655,CA
-1075982656,1075982671,MX
-1075982672,1075982695,CA
-1075982696,1075982703,US
-1075982704,1075982751,CA
-1075982752,1075982783,MX
-1075982784,1075982815,US
-1075982816,1075982831,CA
-1075982832,1075982847,US
-1075982848,1075983167,CA
-1075983168,1075983175,US
-1075983176,1075983199,CA
-1075983200,1075983231,US
-1075983232,1075984383,CA
+1075982592,1075982847,US
+1075982848,1075983103,CA
+1075983104,1075983359,US
+1075983360,1075984383,CA
1075984384,1075985919,US
-1075985920,1075987583,CA
-1075987584,1075987615,US
-1075987616,1075988991,CA
-1075988992,1075989023,US
-1075989024,1075989055,CA
-1075989056,1075989119,US
-1075989120,1075989263,CA
-1075989264,1075989279,US
-1075989280,1075989295,CA
-1075989296,1075989311,US
-1075989312,1075989327,CA
-1075989328,1075989335,US
-1075989336,1075989359,CA
-1075989360,1075989439,US
-1075989440,1075989455,CA
-1075989456,1075989487,US
-1075989488,1075989791,CA
-1075989792,1075989823,US
-1075989824,1075989839,CA
-1075989840,1075989855,US
-1075989856,1075990527,CA
-1075990528,1075990727,US
-1075990728,1075990735,CA
-1075990736,1075991671,US
-1075991672,1075991679,CA
-1075991680,1075992319,US
-1075992320,1075992447,GB
-1075992448,1075993215,US
-1075993216,1075993231,SG
-1075993232,1075994607,US
-1075994608,1075994623,BE
+1075985920,1075987455,CA
+1075987456,1075987967,US
+1075987968,1075988223,CA
+1075988224,1075988319,US
+1075988320,1075988351,CA
+1075988352,1075988479,US
+1075988480,1075988991,CA
+1075988992,1075989231,US
+1075989232,1075989239,CA
+1075989240,1075989503,US
+1075989504,1075989759,CA
+1075989760,1075990015,US
+1075990016,1075990527,CA
+1075990528,1075994623,US
1075994624,1075995007,CA
-1075995008,1075995023,VG
-1075995024,1075995039,US
-1075995040,1075995055,CA
-1075995056,1075995071,US
-1075995072,1075995079,MX
-1075995080,1075995087,CA
-1075995088,1075995103,US
-1075995104,1075995263,CA
-1075995264,1075995295,US
-1075995296,1075995326,CA
-1075995327,1075995391,US
-1075995392,1075995479,CA
-1075995480,1075995487,US
-1075995488,1075995503,CA
-1075995504,1075995519,MX
-1075995520,1075995567,CA
-1075995568,1075995599,US
-1075995600,1075996671,CA
-1075996672,1075996751,US
-1075996752,1075996767,CA
-1075996768,1075996799,US
-1075996800,1075997119,CA
-1075997120,1075997183,MX
-1075997184,1075997519,CA
-1075997520,1075997535,US
-1075997536,1075997695,CA
-1075997696,1075997823,CR
-1075997824,1075997919,US
-1075997920,1075997935,CA
-1075997936,1075997951,US
-1075997952,1075998103,CA
-1075998104,1075998207,US
-1075998208,1075998351,CA
-1075998352,1075998431,US
-1075998432,1075999231,CA
+1075995008,1075995103,US
+1075995104,1075995135,CA
+1075995136,1075995647,US
+1075995648,1075996671,CA
+1075996672,1075997183,US
+1075997184,1075997439,CA
+1075997440,1075998207,US
+1075998208,1075998271,CA
+1075998272,1075998463,US
+1075998464,1075999231,CA
1075999232,1075999999,US
1076000000,1076000255,CA
1076000256,1076000767,US
1076000768,1076002047,CA
-1076002048,1076002823,US
-1076002824,1076002831,CA
-1076002832,1076002879,US
-1076002880,1076002911,CA
-1076002912,1076002943,US
-1076002944,1076002975,CA
-1076002976,1076003023,US
-1076003024,1076003031,CA
-1076003032,1076003039,US
-1076003040,1076003055,CA
-1076003056,1076003071,US
+1076002048,1076003071,US
1076003072,1076003327,CA
-1076003328,1076003359,US
-1076003360,1076003375,CA
-1076003376,1076003391,US
-1076003392,1076003407,CA
-1076003408,1076003519,US
-1076003520,1076004383,CA
-1076004384,1076004423,US
-1076004424,1076004431,CA
-1076004432,1076004471,US
-1076004472,1076004479,CA
-1076004480,1076004495,US
-1076004496,1076004511,CA
-1076004512,1076004543,US
-1076004544,1076004575,CA
-1076004576,1076004863,US
+1076003328,1076003583,US
+1076003584,1076004351,CA
+1076004352,1076004863,US
1076004864,1076005119,CA
-1076005120,1076005151,NZ
-1076005152,1076005159,CA
-1076005160,1076005167,US
-1076005168,1076005191,CA
-1076005192,1076005207,US
-1076005208,1076005223,CA
-1076005224,1076005239,US
-1076005240,1076005247,CA
-1076005248,1076005263,US
-1076005264,1076005279,CA
-1076005280,1076005311,US
-1076005312,1076005343,CA
-1076005344,1076005375,US
-1076005376,1076005887,CA
-1076005888,1076006015,US
-1076006016,1076006055,CA
-1076006056,1076006079,US
-1076006080,1076006111,CA
-1076006112,1076006175,US
-1076006176,1076006207,CA
-1076006208,1076006223,US
-1076006224,1076006239,CA
-1076006240,1076006271,US
-1076006272,1076006303,CA
-1076006304,1076006335,US
-1076006336,1076006367,CA
-1076006368,1076006383,US
-1076006384,1076006719,CA
-1076006720,1076006751,US
-1076006752,1076006783,CA
-1076006784,1076006911,US
+1076005120,1076005311,US
+1076005312,1076005319,CA
+1076005320,1076005375,US
+1076005376,1076005631,CA
+1076005632,1076006399,US
+1076006400,1076006655,CA
+1076006656,1076006911,US
1076006912,1076007167,CA
-1076007168,1076007183,US
-1076007184,1076007247,CA
-1076007248,1076007263,US
-1076007264,1076007383,CA
-1076007384,1076007391,US
-1076007392,1076007947,CA
-1076007948,1076007951,US
-1076007952,1076008063,CA
-1076008064,1076008191,US
-1076008192,1076009631,CA
-1076009632,1076009639,US
-1076009640,1076009643,CA
-1076009644,1076009663,US
-1076009664,1076009695,CA
-1076009696,1076009727,US
-1076009728,1076009887,CA
-1076009888,1076009919,US
-1076009920,1076009983,CA
-1076009984,1076010623,US
-1076010624,1076010671,CA
-1076010672,1076010687,US
-1076010688,1076010727,CA
-1076010728,1076010735,US
-1076010736,1076011007,CA
-1076011008,1076012236,US
-1076012237,1076012237,IN
-1076012238,1076013094,US
-1076013095,1076013095,IN
-1076013096,1076018303,US
-1076018304,1076018367,BR
-1076018368,1076024307,US
-1076024308,1076024315,CA
-1076024316,1076026367,US
-1076026368,1076026591,CA
-1076026592,1076026623,US
+1076007168,1076007423,US
+1076007424,1076007935,CA
+1076007936,1076008447,US
+1076008448,1076009215,CA
+1076009216,1076009727,US
+1076009728,1076009983,CA
+1076009984,1076026623,US
1076026624,1076026879,CA
-1076026880,1076026943,US
-1076026944,1076026975,CA
-1076026976,1076027007,US
-1076027008,1076027015,CA
-1076027016,1076027031,US
-1076027032,1076027263,CA
-1076027264,1076027295,US
-1076027296,1076027407,CA
-1076027408,1076027423,US
-1076027424,1076027615,CA
-1076027616,1076027631,US
-1076027632,1076027711,CA
-1076027712,1076027727,US
-1076027728,1076027775,CA
-1076027776,1076027791,US
-1076027792,1076027807,CA
-1076027808,1076027823,US
-1076027824,1076027911,CA
-1076027912,1076027919,US
-1076027920,1076028031,CA
-1076028032,1076028063,US
-1076028064,1076028079,CA
-1076028080,1076028095,US
-1076028096,1076028143,CA
-1076028144,1076028151,US
-1076028152,1076028479,CA
-1076028480,1076028543,GB
-1076028544,1076028927,US
+1076026880,1076028159,US
+1076028160,1076028415,CA
+1076028416,1076028927,US
1076028928,1076029183,BZ
-1076029184,1076029215,CA
-1076029216,1076029223,US
-1076029224,1076029231,DM
-1076029232,1076029239,CA
-1076029240,1076029247,US
-1076029248,1076029255,CA
-1076029256,1076029271,US
-1076029272,1076029279,CA
-1076029280,1076029287,US
-1076029288,1076029295,CA
-1076029296,1076029311,US
-1076029312,1076029319,GB
-1076029320,1076029327,CA
-1076029328,1076029343,US
-1076029344,1076029415,CA
-1076029416,1076029422,US
-1076029423,1076029430,CA
-1076029431,1076029439,US
-1076029440,1076030223,CA
-1076030224,1076030231,US
-1076030232,1076030271,CA
-1076030272,1076030287,US
-1076030288,1076030303,CA
-1076030304,1076030335,US
-1076030336,1076030399,CA
-1076030400,1076030471,US
-1076030472,1076030527,CA
-1076030528,1076030567,US
-1076030568,1076030575,CA
-1076030576,1076030591,US
-1076030592,1076030599,CA
-1076030600,1076030607,US
-1076030608,1076030623,CA
-1076030624,1076030631,US
-1076030632,1076030975,CA
-1076030976,1076031743,US
+1076029184,1076029439,US
+1076029440,1076030207,CA
+1076030208,1076031743,US
1076031744,1076031999,CA
1076032000,1076032255,US
1076032256,1076032511,CA
-1076032512,1076033671,US
-1076033672,1076033687,CA
-1076033688,1076033919,US
-1076033920,1076033951,CA
-1076033952,1076034479,US
-1076034480,1076034495,CA
-1076034496,1076035519,US
+1076032512,1076035519,US
1076035520,1076035583,IN
-1076035584,1076036247,US
-1076036248,1076036255,IL
-1076036256,1076036351,US
-1076036352,1076036605,ES
-1076036606,1076036735,US
-1076036736,1076036751,CA
-1076036752,1076036791,US
-1076036792,1076036799,ZA
-1076036800,1076037439,US
-1076037440,1076037447,MX
-1076037448,1076043775,US
-1076043776,1076043839,CA
-1076043840,1076043871,MX
-1076043872,1076044095,US
-1076044096,1076044127,IN
-1076044128,1076044175,US
-1076044176,1076044183,IE
-1076044184,1076044191,FR
-1076044192,1076044551,US
-1076044552,1076044567,DE
-1076044568,1076044703,US
-1076044704,1076044735,AR
-1076044736,1076047527,US
-1076047528,1076047535,JP
-1076047536,1076047551,US
-1076047552,1076047583,CH
-1076047584,1076047967,US
-1076047968,1076047975,VE
-1076047976,1076048639,US
-1076048640,1076048671,MX
-1076048672,1076048703,AR
-1076048704,1076048735,US
-1076048736,1076048767,CA
-1076048768,1076048831,US
-1076048832,1076048863,IL
-1076048864,1076049151,US
+1076035584,1076049151,US
1076049152,1076049407,DE
-1076049408,1076049439,CA
-1076049440,1076049919,US
+1076049408,1076049919,US
1076049920,1076050175,IL
1076050176,1076174847,US
1076174848,1076178943,BM
-1076178944,1076179161,US
-1076179162,1076179163,IN
-1076179164,1076179196,US
-1076179197,1076179198,IN
-1076179199,1076180201,US
-1076180202,1076180222,PK
-1076180223,1076180795,US
-1076180796,1076180799,IN
-1076180800,1076181236,US
-1076181237,1076181237,CA
-1076181238,1076183039,US
-1076183040,1076183071,IN
-1076183072,1076183231,US
-1076183232,1076183295,CA
-1076183296,1076183807,US
+1076178944,1076183807,US
1076183808,1076184063,CA
-1076184064,1076184095,VE
-1076184096,1076184159,US
-1076184160,1076184191,PK
-1076184192,1076184223,IN
-1076184224,1076184255,US
-1076184256,1076184287,BE
-1076184288,1076184319,CA
-1076184320,1076185215,US
-1076185216,1076185343,CA
-1076185344,1076185439,US
-1076185440,1076185471,IT
-1076185472,1076185503,US
-1076185504,1076185535,DO
-1076185536,1076185919,US
-1076185920,1076185951,CA
-1076185952,1076185983,US
-1076185984,1076186015,PK
-1076186016,1076186303,US
-1076186304,1076186335,CA
-1076186336,1076186367,IT
-1076186368,1076186751,US
-1076186752,1076186783,CA
-1076186784,1076186815,TW
-1076186816,1076187743,US
-1076187744,1076187775,CA
-1076187776,1076187807,AU
-1076187808,1076189183,US
-1076189184,1076189215,VE
-1076189216,1076189279,CA
-1076189280,1076189311,US
-1076189312,1076189375,CA
-1076189376,1076189407,US
-1076189408,1076189439,IN
-1076189440,1076190079,US
-1076190080,1076190143,IN
-1076190144,1076190175,US
-1076190176,1076190207,IN
-1076190208,1076190783,US
-1076190784,1076190815,CA
-1076190816,1076190847,IN
-1076190848,1076190913,US
-1076190914,1076190945,IN
-1076190946,1076191231,US
-1076191232,1076191487,CA
-1076191488,1076192127,US
-1076192128,1076192191,CA
-1076192192,1076192767,US
-1076192768,1076192831,IN
-1076192832,1076193151,US
-1076193152,1076193183,TR
-1076193184,1076193247,US
-1076193248,1076193279,CA
+1076184064,1076193279,US
1076193280,1076193535,PK
-1076193536,1076194367,US
-1076194368,1076194399,IN
-1076194400,1076194431,IL
-1076194432,1076194463,IN
-1076194464,1076194495,BE
-1076194496,1076194559,US
+1076193536,1076194559,US
1076194560,1076194815,CA
1076194816,1076195071,US
1076195072,1076195327,IN
-1076195328,1076195551,US
-1076195552,1076195583,IN
-1076195584,1076195871,US
-1076195872,1076195903,BE
-1076195904,1076195999,US
-1076196000,1076196031,CN
-1076196032,1076196063,CA
-1076196064,1076196095,US
-1076196096,1076196415,CA
-1076196416,1076196479,US
-1076196480,1076196511,FR
-1076196512,1076196641,US
-1076196642,1076196671,BE
-1076196672,1076196863,US
-1076196864,1076196991,IN
-1076196992,1076197119,US
+1076195328,1076196095,US
+1076196096,1076196351,CA
+1076196352,1076197119,US
1076197120,1076197375,CA
-1076197376,1076198399,US
-1076198400,1076198655,CA
+1076197376,1076198655,US
1076198656,1076198911,AE
-1076198912,1076218015,US
-1076218016,1076218023,GB
-1076218024,1076219407,US
-1076219408,1076219415,GB
-1076219416,1076233177,US
+1076198912,1076233177,US
1076233178,1076233178,TC
-1076233179,1076281695,US
-1076281696,1076281727,TH
-1076281728,1076282111,US
-1076282112,1076282143,AU
-1076282144,1076282351,US
-1076282352,1076282367,CA
-1076282368,1076283903,US
+1076233179,1076283903,US
1076283904,1076284159,NO
-1076284160,1076284319,US
-1076284320,1076284335,GB
-1076284336,1076284679,US
-1076284680,1076284687,HU
-1076284688,1076285439,US
-1076285440,1076285455,DK
-1076285456,1076289951,US
-1076289952,1076289967,GB
-1076289968,1076291903,US
-1076291904,1076291919,UA
-1076291920,1076292559,US
-1076292560,1076292567,NL
-1076292568,1076294655,US
-1076294656,1076294687,CY
-1076294688,1076294703,US
-1076294704,1076294719,NO
-1076294720,1076295167,US
-1076295168,1076295199,CY
-1076295200,1076306463,US
-1076306464,1076306479,GB
-1076306480,1076306511,US
-1076306512,1076306527,AE
-1076306528,1076307495,US
-1076307496,1076307503,DE
-1076307504,1076307519,US
-1076307520,1076307535,DE
-1076307536,1076307743,US
-1076307744,1076307807,DE
-1076307808,1076307967,US
+1076284160,1076307967,US
1076307968,1076308223,DE
-1076308224,1076308495,US
-1076308496,1076308511,AE
-1076308512,1076308575,US
-1076308576,1076308591,IL
-1076308592,1076308671,US
-1076308672,1076308687,DE
-1076308688,1076308991,US
-1076308992,1076309007,IE
-1076309008,1076309119,US
-1076309120,1076309135,IE
-1076309136,1076309151,US
-1076309152,1076309183,DE
-1076309184,1076309967,US
-1076309968,1076309983,DE
-1076309984,1076310015,US
+1076308224,1076310015,US
1076310016,1076310271,DE
-1076310272,1076310303,AE
-1076310304,1076310367,US
-1076310368,1076310383,IE
-1076310384,1076310399,US
-1076310400,1076310431,AE
-1076310432,1076310463,AU
-1076310464,1076310527,IL
-1076310528,1076338687,US
+1076310272,1076338687,US
1076338688,1076346879,CA
1076346880,1076387839,US
1076387840,1076393727,CA
1076393728,1076394239,US
1076394240,1076396031,CA
-1076396032,1076404223,US
-1076404224,1076406015,A2
-1076406016,1076406271,US
-1076406272,1076408063,A2
-1076408064,1076408319,US
+1076396032,1076408319,US
1076408320,1076412415,CA
-1076412416,1076422192,US
-1076422193,1076422193,EU
-1076422194,1076424703,US
+1076412416,1076424703,US
1076424704,1076428799,CA
-1076428800,1076493311,US
-1076493312,1076493375,IN
-1076493376,1076543487,US
+1076428800,1076543487,US
1076543488,1076559871,CA
1076559872,1076628991,US
1076628992,1076629247,VI
-1076629248,1076696655,US
-1076696656,1076696663,CA
-1076696664,1076697503,US
-1076697504,1076697519,NZ
-1076697520,1076697567,US
-1076697568,1076697583,PE
-1076697584,1076698565,US
-1076698566,1076698580,AU
-1076698581,1076704376,US
-1076704377,1076704405,CO
-1076704406,1076705191,US
-1076705192,1076705199,AE
-1076705200,1076705215,US
-1076705216,1076705247,CA
-1076705248,1076705719,US
-1076705720,1076705729,AU
-1076705730,1076707087,US
-1076707088,1076707103,AT
-1076707104,1076707119,GB
-1076707120,1076707311,US
-1076707312,1076707319,AR
-1076707320,1076756479,US
+1076629248,1076756479,US
1076756480,1076772863,CA
1076772864,1076850687,US
1076850688,1076850943,CA
-1076850944,1076851035,US
-1076851036,1076851039,CA
-1076851040,1076851169,US
-1076851170,1076851175,CA
-1076851176,1076851351,US
-1076851352,1076851359,CA
-1076851360,1076880383,US
+1076850944,1076880383,US
1076880384,1076880639,CH
-1076880640,1076881023,GB
-1076881024,1076985855,US
-1076985856,1076991487,A2
-1076991488,1076991743,US
-1076991744,1077002239,A2
-1077002240,1077055487,US
+1076880640,1076880895,GB
+1076880896,1077055487,US
1077055488,1077059583,CA
-1077059584,1077383167,US
-1077383168,1077384191,US
-1077384192,1077444607,US
+1077059584,1077444607,US
1077444608,1077452799,CA
1077452800,1077460991,JP
1077460992,1077469183,US
1077469184,1077477375,CA
1077477376,1077506047,US
1077506048,1077510143,LS
-1077510144,1077561327,US
-1077561328,1077561343,AR
-1077561344,1077565503,US
-1077565504,1077565567,AR
-1077565568,1077567487,US
-1077567488,1077571583,A2
-1077571584,1077627167,US
-1077627168,1077627199,EC
-1077627200,1077629903,US
-1077629904,1077629919,CW
-1077629920,1077631167,US
-1077631168,1077631231,NL
-1077631232,1077632159,US
-1077632160,1077632191,GB
-1077632192,1077633799,US
-1077633800,1077633807,KY
-1077633808,1077633823,US
-1077633824,1077633855,CW
-1077633856,1077640799,US
-1077640800,1077640831,EC
-1077640832,1077641215,US
+1077510144,1077512191,US
+1077512192,1077513983,SE
+1077513984,1077641215,US
1077641216,1077657599,CA
-1077657600,1077839103,US
-1077839104,1077839119,ES
-1077839120,1077840383,US
-1077840384,1077840639,US
-1077840640,1077841151,US
+1077657600,1077841151,US
1077841152,1077841407,GB
-1077841408,1077843719,US
-1077843720,1077843727,CN
-1077843728,1077844383,US
-1077844384,1077844391,US
-1077844392,1077848575,US
+1077841408,1077848575,US
1077848576,1077848831,GR
-1077848832,1077851375,US
-1077851376,1077851383,FR
-1077851384,1077851471,US
-1077851472,1077851487,HK
-1077851488,1077852671,US
+1077848832,1077852671,US
1077852672,1077852927,CA
-1077852928,1077856127,US
-1077856128,1077856191,AU
-1077856192,1077857279,US
+1077852928,1077857279,US
1077857280,1077857535,CA
-1077857536,1077857567,US
-1077857568,1077857575,IT
-1077857576,1077858015,US
-1077858016,1077858047,CN
-1077858048,1077858943,US
-1077858944,1077858975,ZA
-1077858976,1077863207,US
-1077863208,1077863215,NG
-1077863216,1077865983,US
+1077857536,1077865983,US
1077865984,1077866239,CA
-1077866240,1077867655,US
-1077867656,1077867663,CK
-1077867664,1077868031,US
-1077868032,1077868159,IT
-1077868160,1077868831,US
-1077868832,1077868847,AE
-1077868848,1077869759,US
-1077869760,1077869823,GR
-1077869824,1077870335,US
+1077866240,1077870335,US
1077870336,1077870591,CN
-1077870592,1077936149,US
-1077936150,1077936150,NL
-1077936151,1077936189,US
-1077936190,1077936193,CA
-1077936194,1077936201,US
-1077936202,1077936205,GB
-1077936206,1077936233,US
-1077936234,1077936237,ES
-1077936238,1077936257,US
-1077936258,1077936261,AU
-1077936262,1077936265,IN
-1077936266,1077936273,US
-1077936274,1077936277,ES
-1077936278,1077936297,US
-1077936298,1077936301,NG
-1077936302,1077936305,US
-1077936306,1077936309,ZA
-1077936310,1077936313,US
-1077936314,1077936317,BR
-1077936318,1077936325,US
-1077936326,1077936329,MX
-1077936330,1077936369,US
-1077936370,1077936373,GB
-1077936374,1077936401,US
-1077936402,1077936409,GB
-1077936410,1077936413,CO
-1077936414,1077936426,US
-1077936427,1077936429,TH
-1077936430,1077936433,US
-1077936434,1077936437,CZ
-1077936438,1077936441,NO
-1077936442,1077936445,US
-1077936446,1077936449,TW
-1077936450,1077936453,US
-1077936454,1077936457,PT
-1077936458,1077936461,US
-1077936462,1077936463,GB
-1077936464,1077936465,US
-1077936466,1077936469,IN
-1077936470,1077936473,US
-1077936474,1077936474,CA
-1077936475,1077936475,US
-1077936476,1077936477,GB
-1077936478,1077936485,US
-1077936486,1077936489,TR
-1077936490,1077936501,US
-1077936502,1077936505,AR
-1077936506,1077936513,US
-1077936514,1077936517,BR
-1077936518,1077936521,US
-1077936522,1077936525,IN
-1077936526,1077936529,US
-1077936530,1077936533,PH
-1077936534,1077936545,US
-1077936546,1077936549,MY
-1077936550,1077936573,US
-1077936574,1077936577,AR
-1077936578,1077936597,US
-1077936598,1077936601,CA
-1077936602,1077936613,US
-1077936614,1077936617,UY
-1077936618,1077936621,US
-1077936622,1077936622,AU
-1077936623,1077936630,US
-1077936631,1077936634,PE
-1077936635,1077936638,CA
-1077936639,1077936645,US
-1077936646,1077936649,HK
-1077936650,1077936653,CA
-1077936654,1077936667,US
-1077936668,1077936671,CA
-1077936672,1077936691,US
-1077936692,1077936695,IT
-1077936696,1077936742,US
-1077936743,1077936743,BE
-1077936744,1077936759,US
-1077936760,1077936763,GB
-1077936764,1077936767,UA
-1077936768,1077936771,US
-1077936772,1077936775,IT
-1077936776,1077936789,US
-1077936790,1077936793,NG
-1077936794,1077936797,AU
-1077936798,1077936801,SI
-1077936802,1077936805,IT
-1077936806,1077936818,US
-1077936819,1077936822,RS
-1077936823,1077936850,US
-1077936851,1077936854,GB
-1077936855,1077936859,IN
-1077936860,1077936871,US
-1077936872,1077936875,LV
-1077936876,1077936879,CA
-1077936880,1077936883,IT
-1077936884,1077936887,CO
-1077936888,1077936913,US
-1077936914,1077936917,ES
-1077936918,1077936945,US
-1077936946,1077936949,GB
-1077936950,1077936957,US
-1077936958,1077936961,MA
-1077936962,1077936981,US
-1077936982,1077936985,AR
-1077936986,1077937015,US
-1077937016,1077937019,CA
-1077937020,1077937023,GB
-1077937024,1077937027,DE
-1077937028,1077937047,US
-1077937048,1077937051,BZ
-1077937052,1077937067,US
-1077937068,1077937071,GB
-1077937072,1077937079,US
-1077937080,1077937083,SE
-1077937084,1077937087,US
-1077937088,1077937088,BE
-1077937089,1077937089,CA
-1077937090,1077937093,IT
-1077937094,1077937133,US
-1077937134,1077937137,NG
-1077937138,1077937157,US
-1077937158,1077937161,TR
-1077937162,1077937222,US
-1077937223,1077937226,CA
-1077937227,1077937230,JM
-1077937231,1077937260,US
-1077937261,1077937269,EE
-1077937270,1077937273,LV
-1077937274,1077937297,US
-1077937298,1077937301,GB
-1077937302,1077937305,US
-1077937306,1077937309,ES
-1077937310,1077937335,US
-1077937336,1077937349,GB
-1077937350,1077937357,US
-1077937358,1077937361,CA
-1077937362,1077937365,US
-1077937366,1077937369,AR
-1077937370,1077937394,CA
-1077937395,1077937398,CN
-1077937399,1077937402,MX
-1077937403,1077937433,US
-1077937434,1077937437,GB
-1077937438,1077937441,CA
-1077937442,1077937449,US
-1077937450,1077937453,GR
-1077937454,1077937457,US
-1077937458,1077937461,GB
-1077937462,1077937478,US
-1077937479,1077937482,MX
-1077937483,1077937506,US
-1077937507,1077937510,CH
-1077937511,1077937571,US
-1077937572,1077937575,CY
-1077937576,1077937597,US
-1077937598,1077937601,IN
-1077937602,1077937621,US
-1077937622,1077937625,GB
-1077937626,1077937629,IT
-1077937630,1077937678,US
-1077937679,1077937682,ZA
-1077937683,1077937702,US
-1077937703,1077937706,PK
-1077937707,1077937710,RS
-1077937711,1077937718,US
-1077937719,1077937722,IN
-1077937723,1077937726,AU
-1077937727,1077937766,US
-1077937767,1077937770,RU
-1077937771,1077937802,US
-1077937803,1077937806,BE
-1077937807,1077937822,US
-1077937823,1077937826,GB
-1077937827,1077937862,US
-1077937863,1077937866,SA
-1077937867,1077937870,GB
-1077937871,1077937886,US
-1077937887,1077937890,GR
-1077937891,1077937902,US
-1077937903,1077937906,IN
-1077937907,1077937933,US
-1077937934,1077937937,IT
-1077937938,1077937941,US
-1077937942,1077937945,NO
-1077937946,1077937949,US
-1077937950,1077937953,CL
-1077937954,1077938003,US
-1077938004,1077938007,TH
-1077938008,1077938025,US
-1077938026,1077938029,FR
-1077938030,1077938033,US
-1077938034,1077938037,SA
-1077938038,1077938045,US
-1077938046,1077938049,RU
-1077938050,1077938081,US
-1077938082,1077938085,IN
-1077938086,1077938121,US
-1077938122,1077938125,DZ
-1077938126,1077938129,IN
-1077938130,1077938137,US
-1077938138,1077938141,GB
-1077938142,1077938145,CA
-1077938146,1077938205,US
-1077938206,1077938209,AR
-1077938210,1077938258,US
-1077938259,1077938262,PE
-1077938263,1077938266,US
-1077938267,1077938269,GB
-1077938270,1077938281,US
-1077938282,1077938283,DE
-1077938284,1077938284,CH
-1077938285,1077938288,CA
-1077938289,1077938292,US
-1077938293,1077938296,GB
-1077938297,1077938321,US
-1077938322,1077938325,GB
-1077938326,1077938329,PK
-1077938330,1077938345,US
-1077938346,1077938349,SA
-1077938350,1077938372,US
-1077938373,1077938376,DK
-1077938377,1077938380,IL
-1077938381,1077938404,US
-1077938405,1077938408,IT
-1077938409,1077938412,US
-1077938413,1077938416,PT
-1077938417,1077938426,US
-1077938427,1077938430,SE
-1077938431,1077938437,US
-1077938438,1077938441,PE
-1077938442,1077938445,US
-1077938446,1077938446,BE
-1077938447,1077938533,US
-1077938534,1077938537,CA
-1077938538,1077938551,US
-1077938552,1077938552,ES
-1077938553,1077938570,US
-1077938571,1077938571,NL
-1077938572,1077938588,US
-1077938589,1077938592,MX
-1077938593,1077938630,US
-1077938631,1077938644,IN
-1077938645,1077938656,US
-1077938657,1077938660,RO
-1077938661,1077938664,TR
-1077938665,1077938668,CA
-1077938669,1077938672,US
-1077938673,1077938676,GB
-1077938677,1077938680,IN
-1077938681,1077938702,US
-1077938703,1077938706,ID
-1077938707,1077938734,GB
-1077938735,1077938735,PK
-1077938736,1077938739,US
-1077938740,1077938749,NO
-1077938750,1077938750,NL
-1077938751,1077938785,US
-1077938786,1077938789,GR
-1077938790,1077938793,CA
-1077938794,1077938805,US
-1077938806,1077938809,DK
-1077938810,1077938813,HK
-1077938814,1077938831,US
-1077938832,1077938835,CA
-1077938836,1077938848,US
-1077938849,1077938852,IT
-1077938853,1077938856,ES
-1077938857,1077938860,EE
-1077938861,1077938895,US
-1077938896,1077938927,CA
-1077938928,1077938949,US
-1077938950,1077938969,CA
-1077938970,1077938981,US
-1077938982,1077938982,NL
-1077938983,1077938983,US
-1077938984,1077938988,CA
-1077938989,1077939005,US
-1077939006,1077939009,BE
-1077939010,1077939013,US
-1077939014,1077939017,GB
-1077939018,1077939025,US
-1077939026,1077939028,TH
-1077939029,1077939044,US
-1077939045,1077939048,IN
-1077939049,1077939064,US
-1077939065,1077939065,TH
-1077939066,1077939135,US
-1077939136,1077939139,IN
-1077939140,1077939189,US
-1077939190,1077939193,CA
-1077939194,1077939209,US
-1077939210,1077939210,BE
-1077939211,1077939218,US
-1077939219,1077939219,NL
-1077939220,1077939240,US
-1077939241,1077939244,NL
-1077939245,1077939251,US
-1077939252,1077939255,BR
-1077939256,1077939259,FR
-1077939260,1077939263,US
-1077939264,1077939267,MY
-1077939268,1077939296,US
-1077939297,1077939300,CA
-1077939301,1077939321,US
-1077939322,1077939325,CA
-1077939326,1077939350,US
-1077939351,1077939354,IN
-1077939355,1077939358,GB
-1077939359,1077939387,US
-1077939388,1077939391,PK
-1077939392,1077939395,US
-1077939396,1077939399,SE
-1077939400,1077939415,US
-1077939416,1077939423,BE
-1077939424,1077939439,US
-1077939440,1077939443,IS
-1077939444,1077939481,US
-1077939482,1077939491,CA
-1077939492,1077939549,US
-1077939550,1077939557,GB
-1077939558,1077939561,MU
-1077939562,1077939625,US
-1077939626,1077939630,UY
-1077939631,1077939634,GB
-1077939635,1077939644,US
-1077939645,1077939648,GR
-1077939649,1077939725,US
-1077939726,1077939727,DE
-1077939728,1077939751,US
-1077939752,1077939755,BZ
-1077939756,1077939763,US
-1077939764,1077939764,CH
-1077939765,1077939766,US
-1077939767,1077939770,RU
-1077939771,1077939776,DE
-1077939777,1077939780,CA
-1077939781,1077939784,GB
-1077939785,1077939785,FR
-1077939786,1077939790,US
-1077939791,1077939794,PE
-1077939795,1077939799,US
-1077939800,1077939803,BE
-1077939804,1077939867,US
-1077939868,1077939871,AU
-1077939872,1077939873,US
-1077939874,1077939874,DE
-1077939875,1077939911,US
-1077939912,1077939915,DO
-1077939916,1077939919,CA
-1077939920,1077939923,IN
-1077939924,1077939927,CA
-1077939928,1077939931,RO
-1077939932,1077939981,US
-1077939982,1077939985,MU
-1077939986,1077939997,US
-1077939998,1077940001,GB
-1077940002,1077940005,EG
-1077940006,1077940089,US
-1077940090,1077940093,SA
-1077940094,1077940097,US
-1077940098,1077940099,DE
-1077940100,1077940168,US
-1077940169,1077940172,GB
-1077940173,1077940182,US
-1077940183,1077940186,CA
-1077940187,1077940213,US
-1077940214,1077940217,MX
-1077940218,1077960751,US
-1077960752,1077960759,CA
-1077960760,1077960791,US
-1077960792,1077960799,CO
-1077960800,1077965855,US
-1077965856,1077965863,CA
-1077965864,1077965903,US
-1077965904,1077965911,BB
-1077965912,1077965919,CO
-1077965920,1077968831,US
-1077968832,1077968839,CA
-1077968840,1077968847,DK
-1077968848,1077977087,US
+1077870592,1077977087,US
1077977088,1077985279,CA
1077985280,1077993471,US
1077993472,1078001663,CA
-1078001664,1078067199,US
+1078001664,1078065039,US
+1078065040,1078065047,CA
+1078065048,1078067199,US
1078067200,1078071295,BS
1078071296,1078075391,CA
-1078079488,1078124543,US
+1078075392,1078124543,US
1078124544,1078128639,CA
1078128640,1078247423,US
1078247424,1078251519,CA
-1078251520,1078253823,US
-1078253824,1078253887,MX
-1078253888,1078280191,US
-1078280192,1078280583,CA
-1078280584,1078280591,US
-1078280592,1078280639,CA
-1078280640,1078280655,US
-1078280656,1078280671,CA
-1078280672,1078280695,US
-1078280696,1078280703,CA
-1078280704,1078280767,US
-1078280768,1078280799,CA
-1078280800,1078280831,UA
-1078280832,1078280895,CA
-1078280896,1078281087,US
-1078281088,1078281279,CA
-1078281280,1078281295,US
-1078281296,1078281711,CA
-1078281712,1078281719,US
-1078281720,1078282119,CA
-1078282120,1078282223,US
-1078282224,1078282238,CA
-1078282239,1078282239,US
+1078251520,1078280191,US
+1078280192,1078280447,CA
+1078280448,1078280575,US
+1078280576,1078280583,CA
+1078280584,1078281300,US
+1078281301,1078281301,CA
+1078281302,1078281511,US
+1078281512,1078281519,CA
+1078281520,1078281599,US
+1078281600,1078281663,CA
+1078281664,1078281727,US
+1078281728,1078281735,CA
+1078281736,1078282239,US
1078282240,1078283015,CA
-1078283016,1078283023,VG
-1078283024,1078283103,CA
-1078283104,1078283111,MX
-1078283112,1078283119,CA
-1078283120,1078283135,US
-1078283136,1078283263,CA
-1078283264,1078283264,US
-1078283265,1078283375,CA
-1078283376,1078283391,MX
-1078283392,1078283399,US
-1078283400,1078283407,MX
-1078283408,1078283423,US
-1078283424,1078283487,CA
-1078283488,1078283503,US
-1078283504,1078283551,CA
-1078283552,1078283583,US
-1078283584,1078283647,CA
-1078283648,1078283679,US
-1078283680,1078283687,CA
-1078283688,1078283695,US
-1078283696,1078283735,CA
-1078283736,1078283743,US
-1078283744,1078283751,CA
-1078283752,1078283775,US
-1078283776,1078283999,CA
-1078284000,1078284007,US
-1078284008,1078284015,CA
-1078284016,1078284031,US
-1078284032,1078284255,CA
-1078284256,1078284351,US
-1078284352,1078284367,CA
-1078284368,1078284399,US
-1078284400,1078284687,CA
-1078284688,1078284695,US
-1078284696,1078284703,MX
+1078283016,1078284031,US
+1078284032,1078284159,CA
+1078284160,1078284479,US
+1078284480,1078284543,CA
+1078284544,1078284703,US
1078284704,1078284719,CA
1078284720,1078284735,US
-1078284736,1078284991,CA
-1078284992,1078285007,US
-1078285008,1078285015,CA
-1078285016,1078285039,US
-1078285040,1078285167,CA
-1078285168,1078285175,US
-1078285176,1078285191,CA
-1078285192,1078285215,US
-1078285216,1078285231,CA
-1078285232,1078285247,US
-1078285248,1078285255,CA
-1078285256,1078285279,US
-1078285280,1078285287,MX
-1078285288,1078285295,US
-1078285296,1078285303,CA
-1078285304,1078285311,US
-1078285312,1078285935,CA
-1078285936,1078285943,US
-1078285944,1078286047,CA
-1078286048,1078286079,US
-1078286080,1078286111,CA
-1078286112,1078286115,US
-1078286116,1078286143,CA
-1078286144,1078286207,US
-1078286208,1078286335,CA
-1078286336,1078286351,US
+1078284736,1078284751,CA
+1078284752,1078284863,US
+1078284864,1078284991,CA
+1078284992,1078285151,US
+1078285152,1078285167,CA
+1078285168,1078285311,US
+1078285312,1078285567,CA
+1078285568,1078286351,US
1078286352,1078286367,CA
-1078286368,1078286463,US
-1078286464,1078286543,CA
-1078286544,1078286559,US
-1078286560,1078286575,TW
-1078286576,1078286591,CA
-1078286592,1078286655,US
-1078286656,1078286687,CA
-1078286688,1078286751,US
-1078286752,1078286759,CA
-1078286760,1078286783,US
-1078286784,1078286791,MX
-1078286792,1078286847,US
-1078286848,1078286975,CA
-1078286976,1078286991,US
-1078286992,1078287031,CA
-1078287032,1078287039,US
-1078287040,1078287071,CA
-1078287072,1078287103,US
-1078287104,1078287183,CA
-1078287184,1078287231,US
-1078287232,1078287279,CA
-1078287280,1078287311,US
-1078287312,1078287327,CA
-1078287328,1078287343,US
-1078287344,1078287759,CA
-1078287760,1078287767,US
-1078287768,1078287839,CA
-1078287840,1078287863,US
-1078287864,1078288383,CA
+1078286368,1078287231,US
+1078287232,1078287239,CA
+1078287240,1078287359,US
+1078287360,1078287615,CA
+1078287616,1078287807,US
+1078287808,1078287839,CA
+1078287840,1078287871,US
+1078287872,1078288383,CA
1078288384,1078306559,US
1078306560,1078306815,GB
-1078306816,1078309695,US
-1078309696,1078309711,GB
-1078309712,1078309967,US
-1078309968,1078309999,GB
-1078310000,1078312255,US
-1078312256,1078312271,GB
-1078312272,1078336447,US
-1078336448,1078336455,HK
-1078336456,1078336463,US
-1078336464,1078336479,HK
-1078336480,1078341807,US
-1078341808,1078341823,PH
-1078341824,1078349311,US
+1078306816,1078312260,US
+1078312261,1078312261,GB
+1078312262,1078349311,US
1078349312,1078349823,PH
-1078349824,1078428031,US
-1078428032,1078428159,AU
-1078428160,1078428999,US
-1078429000,1078429007,MX
-1078429008,1078429623,US
-1078429624,1078429631,AU
-1078429632,1078429695,US
+1078349824,1078413311,US
+1078415360,1078429695,US
1078429696,1078429951,GR
-1078429952,1078430095,US
-1078430096,1078430111,AE
-1078430112,1078430159,US
-1078430160,1078430167,FJ
-1078430168,1078432095,US
-1078432096,1078432103,JP
-1078432104,1078432151,US
-1078432152,1078432159,JP
-1078432160,1078432223,US
-1078432224,1078432239,AE
-1078432240,1078432767,US
-1078432768,1078432775,GB
-1078432776,1078432879,US
-1078432880,1078432887,GB
-1078432888,1078433316,US
-1078433317,1078433317,US
-1078433318,1078433631,US
-1078433632,1078433663,CN
-1078433664,1078434759,US
-1078434760,1078434767,BE
-1078434768,1078434775,US
-1078434776,1078434783,JP
-1078434784,1078434927,US
-1078434928,1078434943,DE
-1078434944,1078435423,US
-1078435424,1078435455,HK
-1078435456,1078435871,US
-1078435872,1078435879,US
-1078435880,1078436719,US
-1078436720,1078436727,JP
-1078436728,1078436767,US
-1078436768,1078436799,GB
-1078436800,1078437471,US
-1078437472,1078437479,JP
-1078437480,1078437567,US
-1078437568,1078437599,HK
-1078437600,1078438399,US
+1078429952,1078438399,US
1078438400,1078438655,CA
1078438656,1078438911,US
-1078438912,1078439167,CN
+1078438912,1078438929,CN
+1078438930,1078438930,US
+1078438931,1078439167,CN
1078439168,1078439679,US
1078439680,1078439935,NL
-1078439936,1078440127,US
-1078440128,1078440159,MX
-1078440160,1078443799,US
-1078443800,1078443807,US
-1078443808,1078452991,US
-1078452992,1078453247,AZ
-1078453248,1078453935,US
-1078453936,1078453951,AT
-1078453952,1078454559,US
-1078454560,1078454567,GB
-1078454568,1078454655,US
-1078454656,1078454663,UY
-1078454664,1078454703,US
-1078454704,1078454719,AT
-1078454720,1078455343,US
-1078455344,1078455359,AT
-1078455360,1078456319,US
+1078439936,1078455551,US
+1078455552,1078455807,NL
+1078455808,1078456319,US
1078456320,1078460415,CA
1078460416,1078504959,US
1078504960,1078505471,CA
@@ -31162,42 +10289,10 @@
1078517760,1078525951,CA
1078525952,1078575359,US
1078575360,1078575615,CA
-1078575616,1078575679,US
-1078575680,1078575743,AU
-1078575744,1078575807,US
-1078575808,1078575871,IN
-1078575872,1078576911,US
-1078576912,1078576943,IN
-1078576944,1078577711,US
-1078577712,1078577727,IN
-1078577728,1078578751,US
-1078578752,1078578815,CA
-1078578816,1078578879,US
-1078578880,1078578943,IN
-1078578944,1078580511,US
-1078580512,1078580543,CA
-1078580544,1078580703,US
-1078580704,1078580735,CA
-1078580736,1078581263,US
-1078581264,1078581279,IN
-1078581280,1078581311,US
-1078581312,1078581327,CR
-1078581328,1078581359,US
-1078581360,1078581391,IN
-1078581392,1078615679,US
-1078615680,1078615711,GB
-1078615712,1078621695,US
+1078575616,1078621695,US
1078621696,1078621951,IN
-1078621952,1078651055,US
-1078651056,1078651071,CA
-1078651072,1078660799,US
-1078660800,1078660831,CN
-1078660832,1078661807,US
-1078661808,1078661823,IN
-1078661824,1078722559,US
-1078722560,1078730127,AR
-1078730128,1078730135,CH
-1078730136,1078734847,AR
+1078621952,1078722559,US
+1078722560,1078734847,AR
1078734848,1078737919,CO
1078737920,1078738943,EC
1078738944,1078739455,VE
@@ -31210,9 +10305,7 @@
1078751232,1078753279,CO
1078753280,1078755327,AR
1078755328,1078757375,PE
-1078757376,1078757423,CL
-1078757424,1078757439,EC
-1078757440,1078767615,CL
+1078757376,1078767615,CL
1078767616,1078768639,CO
1078768640,1078769663,CL
1078769664,1078771711,CO
@@ -31222,190 +10315,26 @@
1078777856,1078780927,EC
1078780928,1078782463,US
1078782464,1078782719,PA
-1078782720,1078791215,US
-1078791216,1078791223,AU
-1078791224,1078791255,US
-1078791256,1078791263,CO
-1078791264,1078791303,US
-1078791304,1078791311,CA
-1078791312,1078791319,US
-1078791320,1078791343,AU
-1078791344,1078791391,US
-1078791392,1078791407,MX
-1078791408,1078791439,US
-1078791440,1078791447,PK
-1078791448,1078791471,US
-1078791472,1078791487,IL
-1078791488,1078791503,US
-1078791504,1078791519,MX
-1078791520,1078791711,US
-1078791712,1078791727,AU
-1078791728,1078792015,US
-1078792016,1078792031,AU
-1078792032,1078792095,US
-1078792096,1078792111,AU
-1078792112,1078792127,IN
-1078792128,1078792175,US
-1078792176,1078792191,AU
-1078792192,1078792511,US
-1078792512,1078792543,SG
-1078792544,1078793119,US
-1078793120,1078793151,CA
-1078793152,1078793535,US
-1078793536,1078793599,ZA
-1078793600,1078793663,US
-1078793664,1078793727,ZA
-1078793728,1078794495,US
-1078794496,1078794559,ZA
-1078794560,1078794591,US
-1078794592,1078794623,AU
-1078794624,1078795159,US
-1078795160,1078795167,AE
-1078795168,1078795255,US
-1078795256,1078795263,MX
-1078795264,1078795767,US
-1078795768,1078795775,IN
-1078795776,1078795783,CA
-1078795784,1078795807,US
-1078795808,1078795815,AU
-1078795816,1078795823,US
-1078795824,1078795831,CA
-1078795832,1078795887,US
-1078795888,1078795895,CA
-1078795896,1078795903,US
-1078795904,1078795911,ES
-1078795912,1078797399,US
-1078797400,1078797407,CA
-1078797408,1078797591,US
-1078797592,1078797599,IN
-1078797600,1078797703,US
-1078797704,1078797711,JP
-1078797712,1078797791,US
-1078797792,1078797815,IN
-1078797816,1078797991,US
-1078797992,1078797999,CA
-1078798000,1078798071,US
-1078798072,1078798079,GB
-1078798080,1078798111,US
-1078798112,1078798119,CA
-1078798120,1078798151,US
-1078798152,1078798159,AU
-1078798160,1078798183,US
-1078798184,1078798191,FR
-1078798192,1078798199,IN
-1078798200,1078798207,US
-1078798208,1078798215,IN
-1078798216,1078798223,GB
-1078798224,1078798231,GR
-1078798232,1078798279,US
-1078798280,1078798287,PK
-1078798288,1078798447,US
-1078798448,1078798455,AT
-1078798456,1078798575,US
-1078798576,1078798591,AR
-1078798592,1078798687,US
-1078798688,1078798703,AU
-1078798704,1078798911,US
-1078798912,1078798927,IT
-1078798928,1078799071,US
-1078799072,1078799087,CA
-1078799088,1078799263,US
-1078799264,1078799295,MX
-1078799296,1078799423,US
-1078799424,1078799455,MX
-1078799456,1078799551,US
-1078799552,1078799583,ID
-1078799584,1078799679,US
-1078799680,1078799743,BR
-1078799744,1078799999,US
-1078800000,1078800031,AU
-1078800032,1078800191,US
-1078800192,1078800223,IN
-1078800224,1078800287,US
-1078800288,1078800319,MX
-1078800320,1078800799,US
-1078800800,1078800831,FR
-1078800832,1078801327,US
-1078801328,1078801343,CL
-1078801344,1078808991,US
-1078808992,1078809023,AU
-1078809024,1078809647,US
-1078809648,1078809663,CA
-1078809664,1078814135,US
-1078814136,1078814143,HK
-1078814144,1078814399,US
-1078814400,1078814415,CA
-1078814416,1078895103,US
+1078782720,1078895103,US
1078895104,1078895359,CN
-1078895360,1078895967,US
-1078895968,1078895983,CN
-1078895984,1078945023,US
+1078895360,1078945023,US
1078945024,1078945279,GB
1078945280,1078956799,US
1078956800,1078957055,GB
1078957056,1079320575,US
-1079320576,1079320671,CA
-1079320672,1079320703,US
-1079320704,1079322191,CA
-1079322192,1079322199,US
-1079322200,1079322703,CA
-1079322704,1079322719,US
-1079322720,1079322815,CA
-1079322816,1079322839,US
-1079322840,1079322847,CA
-1079322848,1079322863,US
-1079322864,1079323231,CA
-1079323232,1079323247,US
-1079323248,1079323263,CA
-1079323264,1079323279,US
-1079323280,1079323311,CA
-1079323312,1079323327,US
-1079323328,1079323415,CA
-1079323416,1079323423,US
-1079323424,1079323447,CA
-1079323448,1079323455,US
-1079323456,1079323583,CA
-1079323584,1079323599,US
-1079323600,1079323615,CA
-1079323616,1079323647,US
-1079323648,1079324455,CA
-1079324456,1079324463,US
-1079324464,1079324799,CA
-1079324800,1079324831,US
-1079324832,1079325455,CA
-1079325456,1079325483,US
-1079325484,1079325527,CA
-1079325528,1079325535,US
-1079325536,1079325547,CA
-1079325548,1079325559,US
-1079325560,1079325599,CA
-1079325600,1079325607,US
-1079325608,1079325695,CA
-1079325696,1079325727,US
-1079325728,1079325871,CA
-1079325872,1079325887,US
-1079325888,1079325991,CA
-1079325992,1079325999,US
-1079326000,1079327616,CA
+1079320576,1079322831,CA
+1079322832,1079322839,US
+1079322840,1079327616,CA
1079327617,1079327617,US
-1079327618,1079328503,CA
-1079328504,1079328511,US
-1079328512,1079328767,CA
-1079328768,1079329919,US
-1079329920,1079329951,CA
-1079329952,1079377919,US
+1079327618,1079328767,CA
+1079328768,1079377919,US
1079377920,1079378943,CA
1079378944,1079379199,US
1079379200,1079379455,CA
1079379456,1079379711,US
1079379712,1079380927,CA
1079380928,1079380991,US
-1079380992,1079381119,PA
-1079381120,1079381503,CA
-1079381504,1079381535,US
-1079381536,1079381599,CA
-1079381600,1079381631,WS
-1079381632,1079381759,CA
+1079380992,1079381759,CA
1079381760,1079382271,US
1079382272,1079382527,CA
1079382528,1079383039,US
@@ -31418,33 +10347,21 @@
1079384576,1079385087,ZW
1079385088,1079385343,US
1079385344,1079385471,CA
-1079385472,1079385599,US
-1079385600,1079386623,CA
+1079385472,1079385479,US
+1079385480,1079386623,CA
1079386624,1079386879,SG
1079386880,1079387135,EG
1079387136,1079387903,US
1079387904,1079388159,PH
-1079388160,1079389439,CA
-1079389440,1079389567,US
-1079389568,1079389695,CA
+1079388160,1079389695,CA
1079389696,1079389951,US
1079389952,1079390719,CA
1079390720,1079391487,US
-1079391488,1079391615,CA
-1079391616,1079391679,US
-1079391680,1079391743,CA
+1079391488,1079391743,CA
1079391744,1079392255,HT
1079392256,1079393791,CA
1079393792,1079394047,US
-1079394048,1079394063,CA
-1079394064,1079394071,SG
-1079394072,1079394079,CA
-1079394080,1079394111,US
-1079394112,1079394143,AF
-1079394144,1079394175,CA
-1079394176,1079394207,US
-1079394208,1079394239,CA
-1079394240,1079394303,US
+1079394048,1079394303,CA
1079394304,1079395327,EC
1079395328,1079396095,US
1079396096,1079396351,CA
@@ -31452,15 +10369,9 @@
1079397376,1079397631,MH
1079397632,1079397887,CA
1079397888,1079398399,US
-1079398400,1079399583,CA
-1079399584,1079399599,US
-1079399600,1079400447,CA
-1079400448,1079400511,FR
-1079400512,1079400575,CA
-1079400576,1079400639,US
-1079400640,1079400767,CA
-1079400768,1079400831,US
-1079400832,1079401215,CA
+1079398400,1079399935,CA
+1079399936,1079400447,US
+1079400448,1079401215,CA
1079401216,1079401471,US
1079401472,1079403263,CA
1079403264,1079403519,US
@@ -31470,23 +10381,19 @@
1079403904,1079403935,US
1079403936,1079403999,CA
1079404000,1079404031,US
-1079404032,1079404287,CA
-1079404288,1079404319,US
-1079404320,1079404351,CA
-1079404352,1079404383,US
-1079404384,1079404543,CA
-1079404544,1079405119,US
-1079405120,1079405407,CA
-1079405408,1079405439,BD
+1079404032,1079404543,CA
+1079404544,1079404799,US
+1079404800,1079404959,CA
+1079404960,1079404991,US
+1079404992,1079405023,CA
+1079405024,1079405055,US
+1079405056,1079405439,CA
1079405440,1079405567,US
1079405568,1079407103,CA
1079407104,1079407359,US
1079407360,1079407615,CA
1079407616,1079408127,US
-1079408128,1079408383,CA
-1079408384,1079408415,ZA
-1079408416,1079408447,US
-1079408448,1079408639,CA
+1079408128,1079408639,CA
1079408640,1079408895,US
1079408896,1079409407,PK
1079409408,1079409919,US
@@ -31495,28 +10402,30 @@
1079410944,1079411199,CA
1079411200,1079411455,US
1079411456,1079411711,PK
-1079411712,1079412735,CA
+1079411712,1079411743,US
+1079411744,1079412735,CA
1079412736,1079413247,US
1079413248,1079413311,CA
1079413312,1079413343,US
-1079413344,1079413375,CA
-1079413376,1079413407,US
-1079413408,1079413535,CA
-1079413536,1079413567,US
-1079413568,1079414271,CA
+1079413344,1079414271,CA
1079414272,1079415039,US
1079415040,1079415295,HN
-1079415296,1079421951,CA
+1079415296,1079415871,US
+1079415872,1079415879,CA
+1079415880,1079415887,US
+1079415888,1079421951,CA
1079421952,1079422207,US
-1079422208,1079422239,CA
-1079422240,1079422271,US
-1079422272,1079425023,CA
+1079422208,1079425023,CA
1079425024,1079425279,US
-1079425280,1079425535,CA
-1079425536,1079425551,US
-1079425552,1079427583,CA
+1079425280,1079427583,CA
1079427584,1079428095,PW
-1079428096,1079431679,CA
+1079428096,1079429263,CA
+1079429264,1079429271,US
+1079429272,1079429279,CA
+1079429280,1079429295,US
+1079429296,1079429375,CA
+1079429376,1079429631,US
+1079429632,1079431679,CA
1079431680,1079432191,ZM
1079432192,1079432703,CA
1079432704,1079432959,US
@@ -31527,10 +10436,7 @@
1079437312,1079439359,US
1079439360,1079442431,CA
1079442432,1079442687,US
-1079442688,1079443199,CA
-1079443200,1079443231,PW
-1079443232,1079443327,CA
-1079443328,1079443455,AU
+1079442688,1079443455,CA
1079443456,1079459839,US
1079459840,1079508991,CA
1079508992,1079566847,US
@@ -31539,629 +10445,156 @@
1079567360,1079567615,AU
1079567616,1079574527,US
1079574528,1079578623,PR
-1079578624,1079585391,US
-1079585392,1079585407,IN
-1079585408,1079623679,US
-1079623680,1079626975,PR
-1079626976,1079626991,US
-1079626992,1079627775,PR
+1079578624,1079623679,US
+1079623680,1079627775,PR
1079627776,1079664639,US
1079664640,1079668735,CA
-1079668736,1079827871,US
-1079827872,1079827887,RU
-1079827888,1079861247,US
+1079668736,1079861247,US
1079861248,1079865343,CA
-1079865344,1079943999,US
-1079944000,1079944031,AU
-1079944032,1079953567,US
-1079953568,1079953599,GB
-1079953600,1079962879,US
+1079865344,1079962879,US
1079962880,1079963135,GB
1079963136,1080024319,US
1080024320,1080024575,CA
-1080024576,1080030527,US
-1080030528,1080030591,AR
-1080030592,1080033279,US
-1080033280,1080295423,CA
-1080295424,1080492031,US
-1080492032,1080496127,BE
-1080496128,1080498431,US
+1080024576,1080033279,US
+1080033280,1080164351,KY
+1080164352,1080295423,CA
+1080295424,1080496639,US
+1080496640,1080496895,ES
+1080496896,1080498431,US
1080498432,1080498664,GB
-1080498665,1080498665,EU
+1080498665,1080498665,US
1080498666,1080498687,GB
-1080498688,1080501503,US
-1080501504,1080501759,EU
-1080501760,1080508415,US
-1080508416,1080516607,GB
-1080516608,1080524799,US
-1080524800,1080543231,IN
-1080543232,1080549375,US
-1080549376,1080557567,IN
-1080557568,1080565759,US
-1080565760,1080573951,JP
-1080573952,1080581631,US
-1080581632,1080581887,SG
-1080581888,1080582143,AP
-1080582144,1080589311,US
-1080589312,1080589567,SG
-1080589568,1080590335,US
-1080590336,1080598527,IN
-1080598528,1080606719,US
-1080606720,1080614911,AU
-1080614912,1080615679,US
-1080615680,1080615935,AU
-1080615936,1080621311,US
-1080621312,1080621567,AU
+1080498688,1080513535,US
+1080513536,1080513791,GB
+1080513792,1080550399,US
+1080550400,1080550655,IN
+1080550656,1080552447,US
+1080552448,1080552703,IN
+1080552704,1080569343,US
+1080569344,1080569599,JP
+1080569600,1080569730,US
+1080569731,1080569731,JP
+1080569732,1080589567,US
+1080589568,1080589823,CN
+1080589824,1080610559,US
+1080610560,1080610815,AU
+1080610816,1080621055,US
+1080621056,1080621567,AU
1080621568,1080622079,US
1080622080,1080622335,AU
-1080622336,1080722827,US
-1080722828,1080722837,IT
-1080722838,1080722993,US
-1080722994,1080723003,CA
-1080723004,1080723113,US
-1080723114,1080723123,BR
-1080723124,1080723229,US
-1080723230,1080723239,GB
-1080723240,1080723259,US
-1080723260,1080723269,GB
-1080723270,1080723359,US
-1080723360,1080723369,BR
-1080723370,1080723565,US
-1080723566,1080723575,AE
-1080723576,1080724519,US
-1080724520,1080724539,CA
-1080724540,1080724875,US
-1080724876,1080724885,SY
-1080724886,1080725041,US
-1080725042,1080725051,QA
-1080725052,1080725081,US
-1080725082,1080725091,QA
-1080725092,1080725171,US
-1080725172,1080725181,QA
-1080725182,1080725277,US
-1080725278,1080725287,CA
-1080725288,1080725297,NZ
-1080725298,1080725467,US
-1080725468,1080725477,LB
-1080725478,1080725713,US
-1080725714,1080725723,BE
-1080725724,1080725929,US
-1080725930,1080725939,BE
-1080725940,1080726185,US
-1080726186,1080726195,JO
-1080726196,1080726607,US
-1080726608,1080726617,CA
-1080726618,1080727129,US
-1080727130,1080727139,AU
-1080727140,1080727159,US
-1080727160,1080727169,CA
-1080727170,1080727189,US
-1080727190,1080727199,AU
-1080727200,1080727741,US
-1080727742,1080727761,BR
-1080727762,1080727781,US
-1080727782,1080727801,GB
-1080727802,1080728625,US
-1080728626,1080728655,NZ
-1080728656,1080728775,US
-1080728776,1080728805,SE
-1080728806,1080728881,US
-1080728882,1080728891,IN
-1080728892,1080729127,US
-1080729128,1080729137,UA
-1080729138,1080729147,US
-1080729148,1080729157,CA
-1080729158,1080729177,US
-1080729178,1080729187,KH
-1080729188,1080729217,US
-1080729218,1080729237,KH
-1080729238,1080729287,US
-1080729288,1080729297,IT
-1080729298,1080729629,US
-1080729630,1080729639,JP
-1080729640,1080729649,CA
-1080729650,1080732319,US
-1080732320,1080732351,QA
-1080732352,1080733193,US
-1080733194,1080733203,NZ
-1080733204,1080733213,LB
-1080733214,1080733233,US
-1080733234,1080733243,DK
-1080733244,1080739007,US
-1080739008,1080739023,JO
-1080739024,1080739899,US
-1080739900,1080739909,IN
-1080739910,1080740235,US
-1080740236,1080740255,UA
-1080740256,1080740551,US
-1080740552,1080740561,UA
-1080740562,1080741189,US
-1080741190,1080741199,GR
-1080741200,1080741269,US
-1080741270,1080741279,GR
-1080741280,1080741289,GB
-1080741290,1080741495,US
-1080741496,1080741505,CA
-1080741506,1080741605,US
-1080741606,1080741615,SE
-1080741616,1080741671,US
-1080741672,1080741681,CA
-1080741682,1080744211,US
-1080744212,1080744221,CA
-1080744222,1080746691,US
-1080746692,1080746723,QA
-1080746724,1080747333,US
-1080747334,1080747343,NZ
-1080747344,1080747353,CA
-1080747354,1080747503,US
-1080747504,1080747513,CA
-1080747514,1080747539,US
-1080747540,1080747559,CA
-1080747560,1080747875,US
-1080747876,1080747885,ES
-1080747886,1080747915,US
-1080747916,1080747925,IL
-1080747926,1080747955,US
-1080747956,1080747965,ES
-1080747966,1080747975,US
-1080747976,1080748005,CA
-1080748006,1080748063,US
-1080748064,1080748095,QA
-1080748096,1080749823,US
-1080749824,1080749951,CA
-1080749952,1080750601,US
-1080750602,1080750611,GB
-1080750612,1080954879,US
+1080622336,1080954879,US
1080956774,1080956774,GB
-1080957952,1080958207,A2
+1080957952,1080958207,DE
1080958208,1080958463,BH
-1080958464,1080958719,A2
+1080958464,1080958719,DE
1080958720,1080958975,BH
-1080958976,1080960255,A2
+1080958976,1080960255,DE
1080960256,1080960511,BH
-1080960512,1080963839,A2
+1080960512,1080963839,DE
1080963840,1080967167,US
-1080967168,1080968191,A2
+1080967168,1080968191,DE
1080968192,1080968447,BH
-1080968448,1080969471,A2
+1080968448,1080969471,DE
1080969472,1080969727,BH
-1080969728,1080972575,A2
-1080972576,1080972607,ID
-1080972608,1080975039,A2
+1080969728,1080975039,DE
1080975040,1080975103,BJ
-1080975104,1080983551,A2
+1080975104,1080983551,DE
1080986624,1080987647,US
-1080987648,1080988671,A2
+1080987648,1080987903,IT
+1080987904,1080988671,DE
1080988672,1080989951,US
-1080989952,1080990207,A2
+1080989952,1080990207,DE
1080990208,1080999935,US
1080999936,1081016319,CA
1081016320,1081037311,US
1081037312,1081037567,CA
1081037568,1081038335,US
1081038336,1081040895,CA
-1081040896,1081047580,US
-1081047581,1081047581,US
-1081047582,1081122559,US
+1081040896,1081057535,US
+1081061376,1081122559,US
1081122560,1081122815,VI
1081122816,1081212927,US
1081212928,1081278463,CA
-1081278464,1081368607,US
-1081368608,1081368615,CO
-1081368616,1081368623,US
-1081368624,1081368631,CO
-1081368632,1081368743,US
-1081368744,1081368767,CO
-1081368768,1081369119,US
-1081369120,1081369151,CO
-1081369152,1081369183,US
-1081369184,1081369215,CO
-1081369216,1081369599,US
+1081278464,1081369599,US
1081369600,1081370111,CO
-1081370112,1081377071,US
-1081377072,1081377079,VE
-1081377080,1081377119,US
-1081377120,1081377135,VE
-1081377136,1081377183,US
-1081377184,1081377191,VE
-1081377192,1081377247,US
-1081377248,1081377279,VE
-1081377280,1081377663,US
+1081370112,1081377663,US
1081377664,1081377791,VE
-1081377792,1081377887,US
-1081377888,1081377919,VE
-1081377920,1081377935,US
-1081377936,1081377951,VE
-1081377952,1081378015,US
-1081378016,1081378047,VE
-1081378048,1081378375,US
-1081378376,1081378399,VE
-1081378400,1081378495,US
-1081378496,1081378575,VE
-1081378576,1081378607,US
-1081378608,1081378663,VE
-1081378664,1081379327,US
+1081377792,1081378495,US
+1081378496,1081378559,VE
+1081378560,1081379327,US
1081379328,1081379839,VE
1081379840,1081385215,US
-1081385216,1081385535,PA
-1081385536,1081385983,US
-1081385984,1081385991,PA
-1081385992,1081385999,US
-1081386000,1081386015,PA
-1081386016,1081386047,VE
-1081386048,1081387519,US
+1081385216,1081385471,PA
+1081385472,1081387519,US
1081387520,1081388031,PA
-1081388032,1081388127,US
-1081388128,1081388143,PA
-1081388144,1081391103,US
+1081388032,1081391103,US
1081391104,1081393151,PA
1081393152,1081393407,US
-1081393408,1081393751,CL
-1081393752,1081393759,US
-1081393760,1081393775,CL
-1081393776,1081393831,US
-1081393832,1081393839,CL
-1081393840,1081393847,US
-1081393848,1081393855,CL
-1081393856,1081393887,US
-1081393888,1081393903,CL
-1081393904,1081393919,US
+1081393408,1081393663,CL
+1081393664,1081393919,US
1081393920,1081397247,CL
1081397248,1081397759,US
1081397760,1081398783,CL
1081398784,1081399295,US
1081399296,1081401343,CL
-1081401344,1081401391,AR
-1081401392,1081401415,US
-1081401416,1081401471,AR
-1081401472,1081401567,US
-1081401568,1081401599,AR
-1081401600,1081401623,US
-1081401624,1081401631,AR
-1081401632,1081401663,US
-1081401664,1081401727,AR
-1081401728,1081401743,US
-1081401744,1081401807,AR
-1081401808,1081401815,US
-1081401816,1081401823,AR
-1081401824,1081401855,US
+1081401344,1081401855,US
1081401856,1081402367,AR
-1081402368,1081402895,US
-1081402896,1081403007,AR
-1081403008,1081403055,US
-1081403056,1081403103,AR
-1081403104,1081403119,US
-1081403120,1081403455,AR
-1081403456,1081403519,US
-1081403520,1081403535,AR
-1081403536,1081403543,US
-1081403544,1081403551,AR
-1081403552,1081403615,US
-1081403616,1081403631,AR
-1081403632,1081403679,US
-1081403680,1081403695,AR
-1081403696,1081403847,US
-1081403848,1081403855,AR
-1081403856,1081403863,US
-1081403864,1081403871,AR
-1081403872,1081403903,US
-1081403904,1081403967,AR
-1081403968,1081404031,US
-1081404032,1081404095,AR
-1081404096,1081405055,US
-1081405056,1081405119,AR
-1081405120,1081409791,US
+1081402368,1081403135,US
+1081403136,1081403391,AR
+1081403392,1081409791,US
1081409792,1081410047,PR
1081410048,1081410559,US
1081410560,1081411583,PR
-1081411584,1081413119,US
-1081413120,1081413631,PR
-1081413632,1081416191,US
+1081411584,1081416191,US
1081416192,1081416447,PR
-1081416448,1081419327,US
-1081419328,1081419391,PR
-1081419392,1081419423,US
-1081419424,1081419431,PR
-1081419432,1081419447,US
-1081419448,1081419455,PR
-1081419456,1081419775,US
+1081416448,1081419775,US
1081419776,1081420287,PR
-1081420288,1081420319,US
-1081420320,1081420351,PR
-1081420352,1081421311,US
+1081420288,1081421311,US
1081421312,1081421567,MF
-1081421568,1081442367,US
-1081442368,1081442399,CL
-1081442400,1081442959,US
-1081442960,1081442967,CL
-1081442968,1081443327,US
+1081421568,1081443327,US
1081443328,1081444351,CL
1081444352,1081445375,US
1081445376,1081446399,CL
1081446400,1081460735,US
1081460736,1081462783,PA
-1081462784,1081462815,CO
-1081462816,1081462847,BR
-1081462848,1081462919,US
-1081462920,1081462927,BR
-1081462928,1081463255,US
-1081463256,1081463263,BR
-1081463264,1081463287,US
-1081463288,1081463391,BR
-1081463392,1081463423,US
-1081463424,1081463487,BR
-1081463488,1081479167,US
+1081462784,1081462856,US
+1081462857,1081462857,BR
+1081462858,1081479167,US
1081479168,1081483263,CA
-1081483264,1081487367,US
-1081487368,1081487375,A2
-1081487376,1081487407,US
-1081487408,1081487519,A2
-1081487520,1081487583,US
-1081487584,1081487871,A2
-1081487872,1081487887,US
-1081487888,1081487895,A2
-1081487896,1081487979,US
-1081487980,1081487991,A2
-1081487992,1081488111,US
-1081488112,1081488119,A2
-1081488120,1081488123,US
-1081488124,1081488135,A2
-1081488136,1081488159,US
-1081488160,1081488167,A2
-1081488168,1081488295,US
-1081488296,1081488303,A2
-1081488304,1081488335,US
-1081488336,1081488343,A2
-1081488344,1081488351,US
-1081488352,1081488383,A2
-1081488384,1081489671,US
-1081489672,1081489679,A2
-1081489680,1081489687,US
-1081489688,1081489919,A2
-1081489920,1081546495,US
-1081546496,1081546751,CA
-1081546752,1081565183,US
+1081483264,1081565183,US
1081565184,1081573375,CA
-1081573376,1081581615,US
-1081581616,1081581623,JP
-1081581624,1081582015,US
-1081582016,1081582079,GB
-1081582080,1081582167,US
-1081582168,1081582175,AE
-1081582176,1081582183,US
-1081582184,1081582199,ID
-1081582200,1081582223,US
-1081582224,1081582231,JP
-1081582232,1081582335,US
-1081582336,1081582343,MY
-1081582344,1081582567,US
-1081582568,1081582591,MY
-1081582592,1081582695,US
-1081582696,1081582703,MY
-1081582704,1081583071,US
-1081583072,1081583103,MY
-1081583104,1081583551,US
-1081583552,1081583567,MY
-1081583568,1081583807,US
-1081583808,1081583815,AU
-1081583816,1081583887,US
-1081583888,1081583911,MY
-1081583912,1081583919,JP
-1081583920,1081583999,US
-1081584000,1081584007,MY
-1081584008,1081584079,US
-1081584080,1081584087,MY
-1081584088,1081584199,US
-1081584200,1081584223,MY
-1081584224,1081584463,US
-1081584464,1081584487,MY
-1081584488,1081584543,US
-1081584544,1081584575,MY
-1081584576,1081585439,US
-1081585440,1081585455,AE
-1081585456,1081585503,US
-1081585504,1081585519,LB
-1081585520,1081589759,US
+1081573376,1081589759,US
1081589760,1081593855,BB
1081593856,1081597951,CA
-1081597952,1081608191,US
-1081608192,1081608207,CA
-1081608208,1081608223,US
-1081608224,1081608231,CA
-1081608232,1081608319,US
-1081608320,1081608327,CA
-1081608328,1081608335,US
-1081608336,1081608343,CA
-1081608344,1081608503,US
-1081608504,1081608511,CA
-1081608512,1081608575,US
-1081608576,1081608583,CA
-1081608584,1081609823,US
-1081609824,1081609831,LK
-1081609832,1081611415,US
-1081611416,1081611423,IN
-1081611424,1081611511,US
-1081611512,1081611519,IN
-1081611520,1081611815,US
-1081611816,1081611823,IN
-1081611824,1081611831,US
-1081611832,1081611839,IN
-1081611840,1081611847,US
-1081611848,1081611855,IN
-1081611856,1081611903,US
-1081611904,1081611911,IN
-1081611912,1081611919,US
-1081611920,1081611927,IN
-1081611928,1081611935,LK
-1081611936,1081611943,IN
-1081611944,1081612015,US
-1081612016,1081612023,IN
-1081612024,1081612159,US
-1081612160,1081612191,IN
-1081612192,1081612655,US
-1081612656,1081612663,CA
-1081612664,1081612671,IN
-1081612672,1081618047,US
-1081618048,1081618055,ZA
-1081618056,1081618079,US
-1081618080,1081618095,ZA
-1081618096,1081618951,US
-1081618952,1081618959,GB
-1081618960,1081625671,US
-1081625672,1081625679,CA
-1081625680,1081625775,US
-1081625776,1081625783,CA
-1081625784,1081633919,US
-1081633920,1081634047,IN
-1081634048,1081872663,US
-1081872664,1081872671,FI
-1081872672,1081912607,US
-1081912608,1081912639,DE
-1081912640,1081927135,US
-1081927136,1081927143,GB
-1081927144,1081978623,US
-1081978624,1081978631,CH
-1081978632,1082091263,US
-1082091264,1082091271,CN
-1082091272,1082093679,US
-1082093680,1082093695,AU
-1082093696,1082097055,US
-1082097056,1082097071,CA
-1082097072,1082131199,US
-1082131200,1082131455,AS
-1082131456,1082138623,US
-1082138624,1082139409,A2
+1081597952,1082139409,US
1082139410,1082139410,ZA
-1082139411,1082140671,A2
-1082140672,1082314751,US
-1082314752,1082315263,CA
-1082315264,1082315471,US
-1082315472,1082318847,CA
-1082318848,1082343909,US
-1082343910,1082343911,GB
-1082343912,1082344080,US
-1082344081,1082344084,GB
-1082344085,1082344784,US
-1082344785,1082344786,HN
-1082344787,1082345202,US
-1082345203,1082345204,FR
-1082345205,1082345208,US
-1082345209,1082345211,FR
-1082345212,1082345275,US
-1082345276,1082345276,FR
-1082345277,1082345457,US
-1082345458,1082345459,FR
-1082345460,1082345733,US
-1082345734,1082345737,CA
-1082345738,1082346510,US
-1082346511,1082346514,IN
-1082346515,1082347640,US
-1082347641,1082347644,CA
-1082347645,1082347740,US
-1082347741,1082347744,IN
-1082347745,1082347882,US
-1082347883,1082347886,IN
-1082347887,1082347892,US
-1082347893,1082347896,IN
-1082347897,1082348005,US
-1082348006,1082348009,IN
-1082348010,1082348104,US
-1082348105,1082348110,FR
-1082348111,1082348115,US
-1082348116,1082348123,CA
-1082348124,1082348319,US
-1082348320,1082348327,GB
-1082348328,1082348335,US
-1082348336,1082348343,GB
-1082348344,1082348399,US
-1082348400,1082348407,BE
-1082348408,1082348415,US
-1082348416,1082348423,GB
-1082348424,1082348799,US
-1082348800,1082348831,CA
-1082348832,1082349575,US
-1082349576,1082349583,SA
-1082349584,1082349591,CA
-1082349592,1082349615,US
-1082349616,1082349623,IT
-1082349624,1082349639,US
-1082349640,1082349647,GB
-1082349648,1082349735,US
-1082349736,1082349743,MY
-1082349744,1082349767,US
-1082349768,1082349775,GR
-1082349776,1082349783,IT
-1082349784,1082349807,US
-1082349808,1082349815,GB
-1082349816,1082350655,US
-1082350656,1082350671,IT
-1082350672,1082350911,US
-1082350912,1082350943,RU
-1082350944,1082351361,US
-1082351362,1082351362,SA
-1082351363,1082351487,US
-1082351488,1082351615,AU
-1082351616,1082419455,US
-1082419456,1082419711,A2
-1082419712,1082679807,US
+1082139411,1082314751,US
+1082314752,1082318847,CA
+1082318848,1082351359,US
+1082351360,1082351487,SA
+1082351488,1082679807,US
1082683392,1082687487,CA
1082687488,1082786591,US
1082786592,1082786623,HK
-1082786624,1082787923,US
-1082787924,1082787927,AU
-1082787928,1082788447,US
-1082788448,1082788455,SG
-1082788456,1082788767,US
-1082788768,1082788799,SG
-1082788800,1082788963,US
-1082788964,1082788967,HK
-1082788968,1082788991,US
-1082788992,1082789119,HK
-1082789120,1082790143,US
+1082786624,1082790143,US
1082790144,1082790399,IN
-1082790400,1082790951,US
-1082790952,1082790959,AU
-1082790960,1082791167,US
+1082790400,1082791167,US
1082791168,1082791423,IN
-1082791424,1082819711,US
-1082819712,1082819715,IN
-1082819716,1082819839,US
+1082791424,1082819839,US
1082819840,1082820351,IN
-1082820352,1082885855,US
-1082885856,1082885887,CA
-1082885888,1082945535,US
-1082945536,1082948943,CA
-1082948944,1082948959,US
-1082948960,1082949631,CA
+1082820352,1082945535,US
+1082945536,1082949631,CA
1082949632,1082952703,US
1082952704,1082952959,CA
1082952960,1082982399,US
1082982400,1083015167,CA
-1083015168,1083261311,US
-1083261312,1083261439,US
-1083261440,1083264383,US
-1083264384,1083264447,US
-1083264448,1083264463,US
-1083264464,1083264511,US
-1083264512,1083265023,US
+1083015168,1083265023,US
1083265024,1083265279,CA
1083265280,1083396095,US
1083396096,1083400191,BM
-1083400192,1083413247,US
-1083413248,1083413375,CA
-1083413376,1083417727,US
-1083417728,1083417791,CA
-1083417792,1083437055,US
+1083400192,1083437055,US
1083437056,1083441151,CA
-1083441152,1083486911,US
-1083486912,1083486943,IS
-1083486944,1083618602,US
-1083618603,1083618611,DE
-1083618612,1083618714,US
-1083618715,1083618725,BR
-1083618726,1083619954,US
-1083619955,1083619986,CY
-1083619987,1083621375,US
+1083441152,1083621375,US
1083621376,1083637759,BS
1083637760,1083686911,US
1083686912,1083703295,CA
@@ -32179,138 +10612,46 @@
1085526016,1085530111,CA
1085530112,1085538303,US
1085538304,1085603839,CA
-1085603840,1085669656,US
-1085669657,1085669664,BZ
-1085669665,1085669794,US
-1085669795,1085669803,IS
-1085669804,1085669838,US
-1085669839,1085669847,FR
-1085669848,1085670342,US
-1085670343,1085670351,IS
-1085670352,1085670455,US
-1085670456,1085670463,NL
-1085670464,1085670628,US
-1085670629,1085670636,GR
-1085670637,1085670644,GE
-1085670645,1085671328,US
-1085671329,1085671336,IR
-1085671337,1085671688,US
-1085671689,1085671696,LB
-1085671697,1085671712,US
-1085671713,1085671720,AS
-1085671721,1085672873,US
-1085672874,1085672881,NL
-1085672882,1085672969,US
-1085672970,1085672978,CA
-1085672979,1085678408,US
-1085678409,1085678417,CA
-1085678418,1085679027,US
-1085679028,1085679045,FR
-1085679046,1085681695,US
-1085681696,1085681711,AS
-1085681712,1085681756,US
-1085681757,1085681765,EG
-1085681766,1085681906,US
-1085681907,1085681915,CA
-1085681916,1085682331,US
-1085682332,1085682339,CA
-1085682340,1085682374,US
-1085682375,1085682382,HK
-1085682383,1085682863,US
-1085682864,1085682872,AS
-1085682873,1085682914,US
-1085682915,1085682922,WS
-1085682923,1085683905,US
-1085683906,1085683914,TC
-1085683915,1085684480,US
-1085684481,1085684734,AS
-1085684735,1085685225,US
-1085685226,1085685233,CA
-1085685234,1085685304,US
-1085685305,1085685312,SA
-1085685313,1085685345,US
-1085685346,1085685353,CA
-1085685354,1085685574,US
-1085685575,1085685584,EG
-1085685585,1085685636,US
-1085685637,1085685645,SN
-1085685646,1085685669,US
-1085685670,1085685685,CA
-1085685686,1085849599,US
+1085603840,1085849599,US
1085849600,1085857791,CA
1085857792,1085915135,US
1085915136,1085923327,PR
1085927424,1085997055,US
1085997056,1086013439,CA
-1086013440,1086022079,US
-1086022080,1086022111,CA
-1086022112,1086022175,US
-1086022176,1086022207,CA
-1086022208,1086023175,US
-1086023176,1086023183,GB
-1086023184,1086023287,US
-1086023288,1086023295,NZ
-1086023296,1086023335,US
-1086023336,1086023343,RO
-1086023344,1086025447,US
-1086025448,1086025455,CA
-1086025456,1086028663,US
-1086028664,1086028671,BR
-1086028672,1086028751,US
-1086028752,1086028759,BR
-1086028760,1086042111,US
+1086013440,1086042111,US
1086042112,1086046207,CA
-1086046208,1086309887,US
+1086046208,1086050815,US
+1086054400,1086309887,US
1086309888,1086310143,AU
1086310144,1086317823,US
1086317824,1086318079,CA
-1086318080,1086358143,US
-1086358144,1086358271,PA
-1086358272,1086359231,US
-1086359232,1086359295,IL
-1086359296,1086359615,US
-1086359616,1086359647,LB
-1086359648,1086421503,US
+1086318080,1086421503,US
1086421504,1086422015,MP
-1086422016,1086476543,US
-1086476544,1086476607,BM
-1086476608,1086910335,US
-1086910336,1086910463,LB
-1086910464,1086922751,US
+1086422016,1086922751,US
1086922752,1086930943,CA
-1086930944,1086941831,US
-1086941832,1086941835,CA
-1086941836,1086942079,US
-1086942080,1086942087,CA
-1086942088,1086942975,US
+1086930944,1086942975,US
1086942976,1086943231,CA
1086943232,1086955519,US
1086955520,1086971903,CA
1086971904,1087016959,US
1087016960,1087021055,CA
-1087021056,1087375103,US
-1087375104,1087375359,BR
-1087375360,1087379455,US
-1087379456,1087379711,GB
-1087379712,1087385855,US
-1087385856,1087386111,EU
-1087386112,1087395327,US
-1087395328,1087395503,GB
-1087395504,1087395511,US
-1087395512,1087395583,GB
-1087395584,1087399167,US
+1087021056,1087395327,US
+1087395328,1087395455,GB
+1087395456,1087399167,US
1087399168,1087399423,GB
-1087399424,1087401727,US
-1087401728,1087401791,GB
-1087401792,1087401855,US
-1087401856,1087401887,MX
-1087401888,1087401919,US
-1087401920,1087401983,MX
-1087401984,1087419903,US
+1087399424,1087405407,US
+1087405408,1087405423,MX
+1087405424,1087413895,US
+1087413896,1087413903,DE
+1087413904,1087419135,US
+1087419136,1087419391,GB
+1087419392,1087419903,US
1087419904,1087420159,CA
-1087420160,1087432599,US
-1087432600,1087432607,FR
-1087432608,1087436159,US
+1087420160,1087432447,US
+1087432448,1087432607,FR
+1087432608,1087432639,US
+1087432640,1087432703,FR
+1087432704,1087436159,US
1087436160,1087436167,CH
1087436168,1087440895,US
1087440896,1087442943,PR
@@ -32318,11 +10659,7 @@
1087443552,1087443583,DE
1087443584,1087444223,US
1087444224,1087444479,GB
-1087444480,1087445503,US
-1087445504,1087445759,GB
-1087445760,1087461734,US
-1087461735,1087461735,IN
-1087461736,1087464945,US
+1087444480,1087464945,US
1087464946,1087464949,GB
1087464950,1087466489,US
1087466490,1087466493,GB
@@ -32330,171 +10667,83 @@
1087467292,1087467295,BR
1087467296,1087496703,US
1087496704,1087496959,CA
-1087496960,1087497855,US
-1087497856,1087497887,CA
-1087497888,1087514879,US
-1087514880,1087515135,BB
-1087515136,1087515647,US
-1087515648,1087516671,BB
-1087516672,1087554751,US
-1087554752,1087554759,IL
-1087554760,1087580927,US
-1087580928,1087581183,BR
-1087581184,1087596031,US
-1087596032,1087596287,DE
-1087596288,1087608319,US
+1087496960,1087593983,US
+1087593984,1087594239,MX
+1087594240,1087608319,US
1087608320,1087608575,GB
1087608576,1087643723,US
1087643724,1087643727,FR
-1087643728,1087651839,US
-1087651840,1087655935,VE
-1087655936,1087678623,US
+1087643728,1087654143,US
+1087654144,1087654399,VE
+1087654400,1087678623,US
1087678624,1087678655,GB
1087678656,1087686655,US
1087686656,1087686911,PR
-1087686912,1087695319,US
+1087686912,1087689215,US
+1087689216,1087689471,AR
+1087689472,1087695319,US
1087695320,1087695323,GB
-1087695324,1087714335,US
+1087695324,1087708685,US
+1087708686,1087708686,AU
+1087708687,1087714335,US
1087714336,1087714367,NL
1087714368,1087715327,US
1087715328,1087717375,PA
-1087717376,1087717631,US
-1087717632,1087717858,GB
-1087717859,1087717859,US
-1087717860,1087717887,GB
-1087717888,1087726096,US
+1087717376,1087726015,US
+1087726016,1087726047,FR
+1087726048,1087726096,US
1087726097,1087726097,GB
-1087726098,1087729663,US
-1087729664,1087733759,PR
-1087733760,1087735639,US
+1087726098,1087735639,US
1087735640,1087735647,GB
1087735648,1087746079,US
1087746080,1087746083,HK
1087746084,1087758335,US
-1087758336,1087766527,PR
-1087766528,1087799787,US
+1087758336,1087761919,PR
+1087761920,1087762431,US
+1087762432,1087766527,PR
+1087766528,1087798943,US
+1087798944,1087798975,CA
+1087798976,1087799413,US
+1087799414,1087799414,DE
+1087799415,1087799787,US
1087799788,1087799791,CH
1087799792,1087825663,US
1087825664,1087825919,SA
-1087825920,1087839231,US
-1087839232,1087839743,GB
-1087839744,1087854079,US
-1087854080,1087854591,GB
-1087854592,1087862783,US
+1087825920,1087836415,US
+1087836416,1087836671,FR
+1087836672,1087837359,US
+1087837360,1087837367,BR
+1087837368,1087839231,US
+1087839232,1087839487,GB
+1087839488,1087862783,US
1087862784,1087864831,PA
1087864832,1087873023,US
-1087873024,1087873535,CA
-1087873536,1087873791,US
-1087873792,1087874559,CA
-1087874560,1087874815,US
-1087874816,1087875071,CA
-1087875072,1087883263,US
+1087873024,1087873279,CA
+1087873280,1087883263,US
1087883264,1087883519,AR
-1087883520,1087883999,US
-1087884000,1087884025,GB
-1087884026,1087884026,US
-1087884027,1087884031,GB
-1087884032,1087918511,US
-1087918512,1087918519,PR
-1087918520,1087950111,US
+1087883520,1087884001,US
+1087884002,1087884002,GB
+1087884003,1087950111,US
1087950112,1087950119,PR
1087950120,1088012767,US
1088012768,1088012775,PR
-1088012776,1088424464,US
-1088424465,1088424478,AU
-1088424479,1088450704,US
-1088450705,1088450718,ES
-1088450719,1088451760,US
-1088451761,1088451774,CA
-1088451775,1088452112,US
-1088452113,1088452126,CA
-1088452127,1088452400,US
-1088452401,1088452414,VE
-1088452415,1088453024,US
-1088453025,1088453038,JP
-1088453039,1088453104,US
-1088453105,1088453118,CL
-1088453119,1088453488,US
-1088453489,1088453502,IE
-1088453503,1088453536,US
-1088453537,1088453550,CL
-1088453551,1088453808,US
-1088453809,1088453822,AR
-1088453823,1088453840,US
-1088453841,1088453854,LB
-1088453855,1088453856,US
-1088453857,1088453870,CN
-1088453871,1088454448,US
-1088454449,1088454462,LB
-1088454463,1088473375,US
-1088473376,1088473391,ES
-1088473392,1088473695,US
-1088473696,1088473711,IE
-1088473712,1088518415,US
-1088518416,1088518431,HK
-1088518432,1088518479,US
-1088518480,1088518495,TH
-1088518496,1088518927,US
-1088518928,1088519007,UA
-1088519008,1088522671,US
-1088522672,1088522687,CA
-1088522688,1088522735,US
-1088522736,1088522751,TH
-1088522752,1088523199,US
-1088523200,1088523215,TH
-1088523216,1088523439,US
-1088523440,1088523487,JP
-1088523488,1088524271,US
-1088524272,1088524286,IN
-1088524287,1088684031,US
+1088012776,1088398591,US
+1088398592,1088398719,CA
+1088398720,1088684031,US
1088684032,1088946175,CA
-1088946176,1088949919,US
-1088949920,1088949935,CA
-1088949936,1089053183,US
+1088946176,1089053183,US
1089053184,1089053439,BR
1089053440,1089054343,US
1089054344,1089054344,GB
-1089054345,1089057279,US
-1089057280,1089057535,EU
-1089057536,1089153535,US
-1089153536,1089153791,US
-1089153792,1089154847,US
-1089154848,1089154855,VE
-1089154856,1089154968,US
-1089154969,1089154977,IN
-1089154978,1089155011,US
-1089155012,1089155031,TR
-1089155032,1089156751,US
-1089156752,1089156759,EG
-1089156760,1089167359,US
+1089054345,1089058303,US
+1089058304,1089058559,TW
+1089058560,1089167359,US
1089167360,1089171455,CA
-1089171456,1089171967,A2
-1089171968,1089172735,US
-1089172736,1089172839,A2
-1089172840,1089172863,US
-1089172864,1089172895,A2
-1089172896,1089172927,US
-1089172928,1089172983,A2
-1089172984,1089172991,US
-1089172992,1089173119,NL
-1089173120,1089173247,A2
-1089173248,1089174015,US
-1089174016,1089174159,A2
-1089174160,1089174167,US
-1089174168,1089174175,A2
-1089174176,1089174199,US
-1089174200,1089174207,A2
-1089174208,1089174215,US
-1089174216,1089175551,A2
-1089175552,1089191935,US
+1089171456,1089183231,US
+1089183232,1089183487,GB
+1089183488,1089191935,US
1089191936,1089200127,CA
-1089200128,1089200751,US
-1089200752,1089200783,CA
-1089200784,1089203439,US
-1089203440,1089203447,AU
-1089203448,1089204575,US
-1089204576,1089204607,CA
-1089204608,1089209471,US
+1089200128,1089209471,US
1089209472,1089209479,GB
1089209480,1089209487,FR
1089209488,1089209495,DE
@@ -32515,96 +10764,28 @@
1089235456,1089235967,GB
1089235968,1089249279,US
1089249280,1089249535,IE
-1089249536,1089250070,US
-1089250071,1089250071,EU
-1089250072,1089263359,US
+1089249536,1089263359,US
1089263360,1089263615,FR
1089263616,1089263871,GB
-1089263872,1089264127,EU
+1089263872,1089264127,US
1089264128,1089264639,FR
1089264640,1089265663,US
1089265664,1089265919,GB
1089265920,1089266431,US
1089266432,1089266943,GB
-1089266944,1089282095,US
-1089282096,1089282099,CA
-1089282100,1089282687,US
-1089282688,1089282703,US
-1089282704,1089285439,US
-1089285440,1089285455,US
-1089285456,1089306623,US
+1089266944,1089306623,US
1089306624,1089339391,PR
-1089339392,1089393167,US
-1089393168,1089393175,CA
-1089393176,1089393223,US
+1089339392,1089393223,US
1089393224,1089393231,CA
-1089393232,1089393295,US
-1089393296,1089393407,CA
-1089393408,1089468415,US
-1089468416,1089468671,A2
-1089468672,1089482927,US
-1089482928,1089482935,CA
-1089482936,1089486591,US
-1089486592,1089486607,CA
-1089486608,1089488463,US
-1089488464,1089488479,JP
-1089488480,1089492351,US
-1089492352,1089492415,CA
-1089492416,1089493631,US
-1089493632,1089493647,CA
-1089493648,1089503871,US
-1089503872,1089503879,CA
-1089503880,1089507159,US
-1089507160,1089507167,CA
-1089507168,1089526783,US
+1089393232,1089393343,US
+1089393344,1089393359,CA
+1089393360,1089526783,US
1089526784,1089527039,VE
-1089527040,1089552383,US
-1089552384,1089552391,AU
-1089552392,1089557551,US
-1089557552,1089557559,CA
-1089557560,1089574319,US
-1089574320,1089574327,CA
-1089574328,1089576623,US
-1089576624,1089576631,CA
-1089576632,1089579519,US
+1089527040,1089579519,US
1089579520,1089580031,VE
-1089580032,1089581287,US
-1089581288,1089581295,CA
-1089581296,1089585919,US
-1089585920,1089585951,CA
-1089585952,1089587999,US
-1089588000,1089588015,IN
-1089588016,1089593615,US
-1089593616,1089593623,CA
-1089593624,1089595279,US
-1089595280,1089595287,CA
-1089595288,1089596543,US
-1089596544,1089596575,CA
-1089596576,1089598975,US
+1089580032,1089598975,US
1089598976,1089599231,HK
-1089599232,1089626399,US
-1089626400,1089626407,CA
-1089626408,1089626415,US
-1089626416,1089626431,CA
-1089626432,1089631055,US
-1089631056,1089631071,CA
-1089631072,1089644815,US
-1089644816,1089644831,GB
-1089644832,1089696063,US
-1089696064,1089696071,GB
-1089696072,1089703455,US
-1089703456,1089703487,CA
-1089703488,1089720959,US
-1089720960,1089720967,CA
-1089720968,1089721023,US
-1089721024,1089721087,CA
-1089721088,1089721503,US
-1089721504,1089721519,CA
-1089721520,1089721727,US
-1089721728,1089721791,CA
-1089721792,1089723823,US
-1089723824,1089723831,CA
-1089723832,1089881599,US
+1089599232,1089881599,US
1089881600,1089882111,GB
1089882112,1089882623,US
1089882624,1089883135,GB
@@ -32615,389 +10796,118 @@
1089970176,1089974271,PR
1089974272,1090146303,US
1090146304,1090150399,CA
-1090150400,1090172495,US
-1090172496,1090172511,GB
-1090172512,1090195086,US
-1090195087,1090195087,US
-1090195088,1090197111,US
-1090197112,1090197112,US
-1090197113,1090207743,US
+1090150400,1090207743,US
1090207744,1090215935,CA
1090215936,1090355199,US
-1090355200,1090356327,CA
-1090356328,1090356335,US
-1090356336,1090356399,CA
-1090356400,1090356415,US
-1090356416,1090357535,CA
-1090357536,1090357567,US
-1090357568,1090357663,CA
-1090357664,1090357679,US
-1090357680,1090357703,CA
-1090357704,1090357711,US
-1090357712,1090357727,CA
-1090357728,1090357735,US
-1090357736,1090363391,CA
+1090355200,1090363391,CA
1090363392,1090387967,US
1090387968,1090396159,CA
1090396160,1090424831,US
1090424832,1090428927,CA
1090428928,1090445311,US
-1090445312,1090447359,CA
-1090447360,1090447487,US
-1090447488,1090448127,CA
-1090448128,1090448255,US
-1090448256,1090453503,CA
-1090453504,1090497903,US
-1090497904,1090497919,AU
-1090497920,1091683357,US
-1091683358,1091683367,GB
-1091683368,1091683407,US
-1091683408,1091683417,BE
-1091683418,1091683437,US
-1091683438,1091683447,QA
-1091683448,1091683593,US
-1091683594,1091683603,CA
-1091683604,1091683613,US
-1091683614,1091683653,CA
-1091683654,1091683869,US
-1091683870,1091683889,AU
-1091683890,1091684879,US
-1091684880,1091684895,CA
-1091684896,1091685695,US
-1091685696,1091685711,QA
-1091685712,1091687167,US
-1091687168,1091687183,CA
-1091687184,1091687359,US
-1091687360,1091687391,CA
-1091687392,1091687711,US
-1091687712,1091687727,ES
-1091687728,1091687743,CO
-1091687744,1091687807,US
-1091687808,1091687839,CR
-1091687840,1091687871,ES
-1091687872,1091689255,US
-1091689256,1091689265,GB
-1091689266,1091689295,US
-1091689296,1091689305,NZ
-1091689306,1091689335,US
-1091689336,1091689345,SI
-1091689346,1091690495,US
-1091690496,1091690511,CA
-1091690512,1091690527,GB
-1091690528,1091690751,US
-1091690752,1091690815,GB
-1091690816,1091691327,US
-1091691328,1091691359,SA
-1091691360,1091692347,US
-1091692348,1091692357,SY
-1091692358,1091692397,US
-1091692398,1091692407,NL
-1091692408,1091692447,US
-1091692448,1091692457,GB
-1091692458,1091692573,US
-1091692574,1091692583,BE
-1091692584,1091692643,US
-1091692644,1091692653,PH
-1091692654,1091692703,US
-1091692704,1091692713,SI
-1091692714,1091692723,US
-1091692724,1091692733,CA
-1091692734,1091693095,US
-1091693096,1091693135,NZ
-1091693136,1091694447,US
-1091694448,1091694463,BG
-1091694464,1091694877,US
-1091694878,1091694887,DE
-1091694888,1091695007,US
-1091695008,1091695017,CA
-1091695018,1091797263,US
-1091797264,1091797279,IT
-1091797280,1091797975,US
-1091797976,1091797983,US
-1091797984,1091798639,US
-1091798640,1091798647,CN
-1091798648,1091798783,US
+1090445312,1090453503,CA
+1090453504,1091798783,US
1091798784,1091799039,CN
-1091799040,1091799719,US
-1091799720,1091799727,SG
-1091799728,1091800319,US
-1091800320,1091800327,JP
-1091800328,1091802111,US
+1091799040,1091802111,US
1091802112,1091802367,CA
1091802368,1091803135,US
1091803136,1091803391,CN
-1091803392,1091803711,US
-1091803712,1091803775,TH
-1091803776,1091803871,US
-1091803872,1091803903,NL
-1091803904,1091807231,US
+1091803392,1091807231,US
1091807232,1091807487,CA
1091807488,1091807999,US
1091808000,1091808511,CA
-1091808512,1091809375,US
-1091809376,1091809391,GB
-1091809392,1091812351,US
+1091808512,1091812351,US
1091812352,1091812607,CN
1091812608,1091960831,US
1091960832,1092026367,CA
-1092026368,1092066589,US
-1092066590,1092066597,KN
-1092066598,1092067042,US
-1092067043,1092067050,KN
-1092067051,1092075519,US
+1092026368,1092075519,US
1092075520,1092091903,PR
-1092091904,1092918983,US
-1092918984,1092918991,CA
-1092918992,1092940607,US
-1092940608,1092940639,AU
-1092940640,1093017599,US
+1092091904,1093017599,US
1093017600,1093021695,CA
1093021696,1093025791,US
1093025792,1093033983,CA
-1093033984,1093052015,US
-1093052016,1093052023,CA
-1093052024,1093052895,US
-1093052896,1093052911,AR
-1093052912,1093053343,US
-1093053344,1093053359,AU
-1093053360,1093054127,US
-1093054128,1093054143,FR
-1093054144,1093054207,US
-1093054208,1093054223,CA
-1093054224,1093054287,US
-1093054288,1093054303,GB
-1093054304,1093055487,US
-1093055488,1093055871,AR
-1093055872,1093055887,US
-1093055888,1093055903,KH
-1093055904,1093056111,US
-1093056112,1093056127,SY
-1093056128,1093056167,US
-1093056168,1093056175,RO
-1093056176,1093056447,US
-1093056448,1093056463,FR
-1093056464,1093056479,CA
-1093056480,1093057103,US
-1093057104,1093057119,JP
-1093057120,1093057263,US
-1093057264,1093057279,IT
-1093057280,1093057311,US
-1093057312,1093057343,CY
-1093057344,1093057391,US
-1093057392,1093057407,RO
-1093057408,1093058559,US
+1093033984,1093055487,US
+1093055488,1093055743,AR
+1093055744,1093058559,US
1093058560,1093063167,PR
1093063168,1093063679,DO
1093063680,1093066751,PR
1093066752,1093074943,US
1093074944,1093091327,CA
-1093091328,1093107775,US
-1093107776,1093107823,CA
-1093107824,1093107839,US
-1093107840,1093107951,CA
-1093107952,1093107967,US
-1093107968,1093109343,CA
-1093109344,1093109351,US
-1093109352,1093109359,CA
-1093109360,1093109375,US
-1093109376,1093109879,CA
-1093109880,1093109887,US
-1093109888,1093109967,CA
-1093109968,1093109983,US
-1093109984,1093110271,CA
+1093091328,1093107967,US
+1093107968,1093108479,CA
+1093108480,1093108735,US
+1093108736,1093109247,CA
+1093109248,1093109503,US
+1093109504,1093109759,CA
+1093109760,1093109871,US
+1093109872,1093109879,CA
+1093109880,1093110015,US
+1093110016,1093110271,CA
1093110272,1093110527,US
1093110528,1093110783,CA
-1093110784,1093110815,US
-1093110816,1093110847,CA
-1093110848,1093110927,US
-1093110928,1093111039,CA
-1093111040,1093111295,US
-1093111296,1093111551,CA
-1093111552,1093111583,US
-1093111584,1093111711,CA
-1093111712,1093111727,US
+1093110784,1093110927,US
+1093110928,1093110935,CA
+1093110936,1093111039,US
+1093111040,1093111551,CA
+1093111552,1093111727,US
1093111728,1093111743,CA
-1093111744,1093111759,US
-1093111760,1093111871,CA
-1093111872,1093111903,US
+1093111744,1093111903,US
1093111904,1093111935,CA
-1093111936,1093111943,US
-1093111944,1093111951,CA
-1093111952,1093111967,US
-1093111968,1093112319,CA
-1093112320,1093112327,US
-1093112328,1093112431,CA
-1093112432,1093112479,US
-1093112480,1093112543,CA
-1093112544,1093112831,US
-1093112832,1093112911,CA
-1093112912,1093112919,US
-1093112920,1093112959,CA
-1093112960,1093113087,US
-1093113088,1093113191,CA
-1093113192,1093113207,US
-1093113208,1093113379,CA
-1093113380,1093113383,US
-1093113384,1093113487,CA
-1093113488,1093113495,US
-1093113496,1093113743,CA
-1093113744,1093113759,US
-1093113760,1093113783,CA
-1093113784,1093113791,US
-1093113792,1093113851,CA
-1093113852,1093113855,US
+1093111936,1093113855,US
1093113856,1093114111,CA
-1093114112,1093114623,US
-1093114624,1093115775,CA
-1093115776,1093115839,US
-1093115840,1093116671,CA
-1093116672,1093116735,US
-1093116736,1093116927,CA
+1093114112,1093114843,US
+1093114844,1093114847,CA
+1093114848,1093114879,US
+1093114880,1093115647,CA
+1093115648,1093115903,US
+1093115904,1093116415,CA
+1093116416,1093116927,US
1093116928,1093117183,HK
-1093117184,1093117439,US
-1093117440,1093117455,CA
-1093117456,1093117503,US
-1093117504,1093117519,CA
-1093117520,1093117535,US
-1093117536,1093117567,CA
-1093117568,1093117615,US
-1093117616,1093117631,CA
-1093117632,1093117647,US
-1093117648,1093118207,CA
+1093117184,1093117951,US
+1093117952,1093118207,CA
1093118208,1093118463,HK
-1093118464,1093118495,CA
-1093118496,1093118527,US
-1093118528,1093118531,CA
-1093118532,1093118591,US
-1093118592,1093118719,CA
-1093118720,1093118983,US
-1093118984,1093119007,CA
-1093119008,1093119039,US
-1093119040,1093119135,CA
-1093119136,1093119167,US
-1093119168,1093119311,CA
-1093119312,1093119327,US
-1093119328,1093119359,CA
-1093119360,1093119423,US
-1093119424,1093119663,CA
-1093119664,1093119671,US
-1093119672,1093119687,CA
-1093119688,1093119743,US
-1093119744,1093119831,CA
-1093119832,1093119839,US
-1093119840,1093120383,CA
-1093120384,1093120431,US
-1093120432,1093120463,CA
-1093120464,1093120479,US
-1093120480,1093120767,CA
-1093120768,1093120911,US
-1093120912,1093120943,CA
-1093120944,1093120959,US
-1093120960,1093122047,CA
+1093118464,1093119999,US
+1093120000,1093120255,CA
+1093120256,1093120511,US
+1093120512,1093120767,CA
+1093120768,1093121023,US
+1093121024,1093122047,CA
1093122048,1093122175,US
-1093122176,1093122447,CA
-1093122448,1093122463,US
-1093122464,1093122479,CA
-1093122480,1093122487,US
-1093122488,1093122495,CA
-1093122496,1093122535,US
-1093122536,1093122543,CA
-1093122544,1093122551,US
-1093122552,1093122559,CA
-1093122560,1093122591,US
-1093122592,1093122655,CA
-1093122656,1093122671,US
-1093122672,1093122687,CA
-1093122688,1093122719,US
-1093122720,1093122767,CA
-1093122768,1093122783,US
-1093122784,1093122791,CA
-1093122792,1093123071,US
-1093123072,1093123839,CA
-1093123840,1093123903,US
-1093123904,1093123935,CW
-1093123936,1093123943,US
-1093123944,1093123967,CA
-1093123968,1093123983,US
-1093123984,1093123999,VG
-1093124000,1093124095,US
-1093124096,1093124287,CA
-1093124288,1093124351,US
-1093124352,1093124559,CA
-1093124560,1093124575,US
-1093124576,1093124991,CA
-1093124992,1093125055,US
-1093125056,1093125711,CA
-1093125712,1093125719,US
-1093125720,1093125775,CA
-1093125776,1093125871,US
-1093125872,1093125951,CA
-1093125952,1093126047,US
-1093126048,1093126063,CA
-1093126064,1093126079,US
-1093126080,1093126111,CA
-1093126112,1093126134,US
-1093126135,1093126142,CA
-1093126143,1093126143,US
+1093122176,1093122303,CA
+1093122304,1093122751,US
+1093122752,1093122767,CA
+1093122768,1093122815,US
+1093122816,1093123839,CA
+1093123840,1093123951,US
+1093123952,1093123967,CA
+1093123968,1093124607,US
+1093124608,1093124863,CA
+1093124864,1093125119,US
+1093125120,1093125631,CA
+1093125632,1093126143,US
1093126144,1093126399,CA
-1093126400,1093126431,VG
-1093126432,1093126447,US
-1093126448,1093126535,CA
-1093126536,1093126543,US
-1093126544,1093126639,CA
-1093126640,1093126655,US
-1093126656,1093127167,CA
-1093127168,1093127423,US
-1093127424,1093127455,CA
-1093127456,1093127551,US
-1093127552,1093127615,CA
-1093127616,1093127647,US
-1093127648,1093127663,CA
-1093127664,1093127775,US
-1093127776,1093127791,CA
-1093127792,1093128191,US
-1093128192,1093128415,CA
-1093128416,1093128447,US
+1093126400,1093126911,US
+1093126912,1093127167,CA
+1093127168,1093128447,US
1093128448,1093129215,CA
-1093129216,1093130367,US
-1093130368,1093130415,CA
-1093130416,1093130431,US
-1093130432,1093131263,CA
-1093131264,1093131391,US
-1093131392,1093131487,CA
-1093131488,1093132287,US
-1093132288,1093132415,CA
-1093132416,1093132447,US
-1093132448,1093133311,CA
-1093133312,1093133375,US
-1093133376,1093134263,CA
-1093134264,1093134271,US
-1093134272,1093134335,CA
-1093134336,1093135359,US
-1093135360,1093135639,CA
-1093135640,1093135647,US
-1093135648,1093135743,CA
-1093135744,1093135871,US
+1093129216,1093130751,US
+1093130752,1093131007,CA
+1093131008,1093132543,US
+1093132544,1093133055,CA
+1093133056,1093135359,US
+1093135360,1093135615,CA
+1093135616,1093135871,US
1093135872,1093136639,CA
1093136640,1093136895,US
-1093136896,1093137351,CA
-1093137352,1093137359,US
-1093137360,1093137375,MX
-1093137376,1093138431,CA
-1093138432,1093138559,US
-1093138560,1093138623,CA
-1093138624,1093138687,NL
-1093138688,1093139455,US
-1093139456,1093139583,CA
-1093139584,1093139647,US
-1093139648,1093139679,CA
-1093139680,1093139695,US
-1093139696,1093140223,CA
-1093140224,1093320191,US
-1093320192,1093320255,PR
-1093320256,1093320287,US
-1093320288,1093320447,PR
-1093320448,1093697535,US
+1093136896,1093137151,CA
+1093137152,1093137407,US
+1093137408,1093137791,CA
+1093137792,1093137919,US
+1093137920,1093138431,CA
+1093138432,1093139711,US
+1093139712,1093140223,CA
+1093140224,1093697535,US
1093697536,1093699071,BB
1093699072,1093700607,GD
1093700608,1093701631,VC
@@ -33013,27 +10923,13 @@
1093723648,1093724415,BB
1093724416,1093725183,VC
1093725184,1093730303,BB
-1093730304,1093730815,US
-1093730816,1093731071,US
-1093731072,1093733887,US
-1093733888,1093734143,US
-1093734144,1093737247,US
-1093737248,1093737263,AE
-1093737264,1093737423,US
-1093737424,1093737431,GB
-1093737432,1093740335,US
-1093740336,1093740351,SG
-1093740352,1093741599,US
-1093741600,1093741607,ES
-1093741608,1093743743,US
-1093743744,1093743807,CA
-1093743808,1093747839,US
-1093747840,1093747903,US
-1093747904,1093748799,US
-1093748800,1093748863,CN
-1093748864,1094441727,US
-1094441728,1094441983,US
-1094441984,1094565887,US
+1093730304,1093965960,US
+1093965961,1093965961,NL
+1093965962,1093966163,US
+1093966164,1093966164,NL
+1093966165,1093966216,US
+1093966217,1093966217,NL
+1093966218,1094565887,US
1094565888,1094582271,CA
1094582272,1094662271,US
1094662272,1094662303,CN
@@ -33041,26 +10937,18 @@
1094669636,1094669639,HK
1094669640,1094670795,US
1094670796,1094670799,CN
-1094670800,1095314943,US
-1095314944,1095314944,US
-1095314945,1095450623,US
+1094670800,1095450623,US
1095450624,1095467007,BS
-1095467008,1095627775,US
+1095467008,1095483391,US
+1095484416,1095484671,US
+1095491584,1095627775,US
1095627776,1095628287,CA
1095628288,1096278015,US
1096278016,1096286207,CA
-1096286208,1096290879,US
-1096290880,1096290943,A2
-1096290944,1096351231,US
-1096351232,1096351743,A2
-1096351744,1096518655,US
-1096518656,1096518911,A2
-1096518912,1096519167,US
+1096286208,1096519167,US
1096519168,1096519423,CD
1096519424,1096519679,SL
-1096519680,1096540927,US
-1096540928,1096541183,US
-1096541184,1096548351,US
+1096519680,1096548351,US
1096548352,1096810495,CA
1096810496,1096884223,US
1096884224,1096888319,CA
@@ -33068,114 +10956,30 @@
1096890880,1096891135,GB
1096891136,1096925183,US
1096925184,1096941567,CA
-1096941568,1096950551,US
-1096950552,1096950559,CA
-1096950560,1096952455,US
-1096952456,1096952463,GB
-1096952464,1096952519,US
-1096952520,1096952527,GB
-1096952528,1096956463,US
-1096956464,1096956471,GB
-1096956472,1096956631,US
-1096956632,1096956639,GB
-1096956640,1096957247,US
-1096957248,1096957255,CA
-1096957256,1096957775,US
-1096957776,1096957791,IE
-1096957792,1096959599,US
-1096959600,1096959607,GB
-1096959608,1096960767,US
-1096960768,1096960895,GB
-1096960896,1096969071,US
-1096969072,1096969079,CA
-1096969080,1096969471,US
-1096969472,1096969479,IN
-1096969480,1097057623,US
-1097057624,1097057631,IT
-1097057632,1097057655,US
-1097057656,1097057663,NZ
-1097057664,1097057727,US
-1097057728,1097057735,NZ
-1097057736,1097057743,IT
-1097057744,1097058303,US
-1097058304,1097058367,IT
-1097058368,1097060351,US
-1097060352,1097060359,IT
-1097060360,1097060367,AU
-1097060368,1097060383,US
-1097060384,1097060399,IT
-1097060400,1097060463,US
-1097060464,1097060471,IT
-1097060472,1097063663,US
-1097063664,1097063679,IT
-1097063680,1097067519,US
-1097067520,1097068031,GB
-1097068032,1097131263,US
-1097131264,1097131367,CN
-1097131368,1097131391,US
-1097131392,1097131423,CN
-1097131424,1097131439,US
-1097131440,1097131447,HK
-1097131448,1097131455,US
-1097131456,1097131471,CN
-1097131472,1097727999,US
-1097728000,1097729151,CA
-1097729152,1097729167,US
-1097729168,1097731447,CA
-1097731448,1097731455,GB
-1097731456,1097736191,CA
+1096941568,1097076123,US
+1097076124,1097076127,DE
+1097076128,1097727999,US
+1097728000,1097736191,CA
1097736192,1097768959,US
1097768960,1097785343,CA
-1097785344,1097830399,US
+1097785344,1097793535,US
+1097801728,1097830399,US
1097830400,1097834495,CA
1097834496,1097837197,US
1097837198,1097837198,AE
1097837199,1097896191,US
-1097896192,1097896711,VI
-1097896712,1097896719,US
-1097896720,1097897215,VI
-1097897216,1097913295,US
-1097913296,1097913303,CA
-1097913304,1097947135,US
-1097947136,1097949183,VI
+1097896192,1097897215,VI
+1097897216,1097947135,US
+1097947136,1097947735,VI
+1097947736,1097947743,US
+1097947744,1097949183,VI
1097949184,1097951231,US
1097951232,1097953279,VI
-1097953280,1098083895,US
-1098083896,1098083903,ME
-1098083904,1098187599,US
-1098187600,1098187607,GB
-1098187608,1098188047,US
-1098188048,1098188055,CA
-1098188056,1098353975,US
-1098353976,1098353983,CA
-1098353984,1098812343,US
-1098812344,1098812351,CA
-1098812352,1098891559,US
-1098891560,1098891567,AU
-1098891568,1098891583,US
-1098891584,1098891607,AU
-1098891608,1098891623,US
-1098891624,1098891631,AU
-1098891632,1098891639,US
-1098891640,1098891647,AU
-1098891648,1098891679,US
-1098891680,1098891695,AU
-1098891696,1098891711,US
-1098891712,1098891743,SG
-1098891744,1098891775,AU
-1098891776,1098892015,US
-1098892016,1098892031,AU
-1098892032,1101078455,US
-1101078456,1101078463,CA
-1101078464,1101113135,US
-1101113136,1101113143,CA
-1101113144,1101118239,US
-1101118240,1101118271,GB
-1101118272,1101121535,US
+1097953280,1098507263,US
+1098507264,1098507519,CA
+1098507520,1101121535,US
1101121536,1101121791,EC
-1101121792,1101139967,US
-1101139968,1101140223,PR
-1101140224,1101182975,US
+1101121792,1101182975,US
1101182976,1101183487,YE
1101183488,1101190655,US
1101190656,1101191167,EC
@@ -33185,41 +10989,27 @@
1101263104,1101263359,CW
1101263360,1101267711,US
1101267712,1101267967,CA
-1101267968,1101289983,US
-1101289984,1101290239,CW
-1101290240,1101304063,US
+1101267968,1101304063,US
1101304064,1101304319,EC
1101304320,1101304831,US
1101304832,1101305855,HN
1101305856,1101306047,US
1101306048,1101306079,PR
-1101306080,1101339887,US
-1101339888,1101339903,CA
-1101339904,1101352959,US
+1101306080,1101352959,US
1101352960,1101355007,HN
-1101355008,1101385855,US
-1101385856,1101385919,DK
-1101385920,1101402031,US
+1101355008,1101402031,US
1101402032,1101402047,PR
1101402048,1101425919,US
1101425920,1101426175,EC
-1101426176,1101440295,US
-1101440296,1101440303,CA
-1101440304,1101445775,US
-1101445776,1101445791,CA
-1101445792,1101459455,US
+1101426176,1101459455,US
1101459456,1101461503,BB
-1101461504,1101461759,US
-1101461760,1101462015,CW
-1101462016,1101469695,US
+1101461504,1101469695,US
1101469696,1101471743,HN
1101471744,1101475839,US
1101475840,1101479935,CO
1101479936,1101484031,US
1101484032,1101488127,CO
-1101488128,1101492623,US
-1101492624,1101492639,BE
-1101492640,1101521407,US
+1101488128,1101521407,US
1101521408,1101521919,AS
1101521920,1101542399,US
1101542400,1101542911,CO
@@ -33229,118 +11019,42 @@
1101635328,1101635583,HN
1101635584,1101650431,US
1101650432,1101650943,HN
-1101650944,1101662951,US
-1101662952,1101662959,PR
-1101662960,1101668095,US
+1101650944,1101668095,US
1101668096,1101668351,EC
-1101668352,1101676135,US
-1101676136,1101676143,CA
-1101676144,1101676543,US
+1101668352,1101676543,US
1101676544,1101678591,EC
1101678592,1101681407,US
1101681408,1101681663,NL
-1101681664,1101685383,US
-1101685384,1101685391,NL
-1101685392,1101726407,US
-1101726408,1101726415,CA
-1101726416,1101732199,US
-1101732200,1101732207,CH
-1101732208,1101750783,US
+1101681664,1101750783,US
1101750784,1101751295,BM
-1101751296,1101767679,US
-1101767680,1101768191,CW
-1101768192,1101791743,US
-1101791744,1101791999,A2
-1101792000,1101792255,US
-1101792256,1101792767,A2
-1101792768,1101797375,US
+1101751296,1101767935,US
+1101767936,1101768191,CW
+1101768192,1101797375,US
1101797376,1101798399,BB
1101798400,1101803519,US
1101803520,1101804543,HN
1101804544,1101837311,US
1101837312,1101837567,EC
-1101837568,1101856767,US
-1101856768,1101856775,DK
-1101856776,1101857295,US
-1101857296,1101857311,CA
-1101857312,1101869055,US
+1101837568,1101869055,US
1101869056,1101869567,GH
1101869568,1101871103,US
1101871104,1101873151,BO
-1101873152,1101881935,US
-1101881936,1101881951,GB
-1101881952,1101905407,US
+1101873152,1101905407,US
1101905408,1101905663,GH
-1101905664,1101952439,US
-1101952440,1101952447,CA
-1101952448,1101983231,US
-1101983232,1101983743,CW
-1101983744,1102004223,US
-1102004224,1102004479,IN
-1102004480,1102004735,US
+1101905664,1101992063,US
+1101992064,1101992191,NL
+1101992192,1102004735,US
1102004736,1102004991,IN
1102004992,1102005247,US
1102005248,1102005503,CA
1102005504,1102005759,PK
-1102005760,1102005887,US
-1102005888,1102005951,IE
-1102005952,1102006271,US
+1102005760,1102006271,US
1102006272,1102006527,CA
1102006528,1102007295,US
1102007296,1102007551,PK
-1102007552,1102007599,US
-1102007600,1102007615,AR
-1102007616,1102007679,US
-1102007680,1102007695,IN
-1102007696,1102007791,US
-1102007792,1102007807,VE
-1102007808,1102008079,US
-1102008080,1102008087,DO
-1102008088,1102008095,US
-1102008096,1102008103,CA
-1102008104,1102008151,US
-1102008152,1102008159,AR
-1102008160,1102008223,US
-1102008224,1102008231,CA
-1102008232,1102008607,US
-1102008608,1102008639,CA
-1102008640,1102008671,BE
-1102008672,1102008735,US
-1102008736,1102008767,BE
-1102008768,1102008831,US
-1102008832,1102008863,BE
-1102008864,1102010623,US
+1102007552,1102010623,US
1102010624,1102010879,PK
-1102010880,1102011647,US
-1102011648,1102011663,VE
-1102011664,1102011743,US
-1102011744,1102011759,TR
-1102011760,1102011855,US
-1102011856,1102011871,CR
-1102011872,1102011887,US
-1102011888,1102011903,AU
-1102011904,1102012799,US
-1102012800,1102012927,IN
-1102012928,1102012975,US
-1102012976,1102012991,IN
-1102012992,1102013103,US
-1102013104,1102013119,HK
-1102013120,1102013135,US
-1102013136,1102013151,VE
-1102013152,1102013167,US
-1102013168,1102013183,VE
-1102013184,1102014271,US
-1102014272,1102014335,IN
-1102014336,1102014399,CA
-1102014400,1102016255,US
-1102016256,1102016287,AR
-1102016288,1102016351,US
-1102016352,1102016383,MY
-1102016384,1102018431,US
-1102018432,1102018495,TZ
-1102018496,1102019583,US
-1102019584,1102019711,IN
-1102019712,1102389247,US
+1102010880,1102389247,US
1102389248,1102393343,CA
1102393344,1102446591,US
1102446592,1102448383,HN
@@ -33348,45 +11062,17 @@
1102449152,1102449407,SV
1102449408,1102454527,CR
1102454528,1102454783,HN
-1102454784,1102488123,US
-1102488124,1102488163,IN
-1102488164,1102488284,US
-1102488285,1102488315,IN
-1102488316,1102494223,US
-1102494224,1102494227,AU
-1102494228,1102494262,US
-1102494263,1102494279,AU
-1102494280,1102494332,US
-1102494333,1102494378,AU
-1102494379,1102495519,US
-1102495520,1102495527,AU
-1102495528,1102512127,US
+1102454784,1102512127,US
1102512128,1102516223,JM
1102516224,1103244799,US
1103244800,1103245055,EC
-1103245056,1103475871,US
-1103475872,1103475879,AF
-1103475880,1103476223,US
-1103476224,1103476255,CA
-1103476256,1103548415,US
+1103245056,1103548415,US
1103548416,1103550463,BS
-1103550464,1103586335,US
-1103586336,1103586351,DE
-1103586352,1103603711,US
+1103550464,1103603711,US
1103603712,1103605759,EC
1103605760,1103623167,US
1103623168,1103623679,CO
-1103623680,1103675647,US
-1103675648,1103675711,AU
-1103675712,1103676159,US
-1103676160,1103676175,AU
-1103676176,1103678831,US
-1103678832,1103678847,AU
-1103678848,1103769367,US
-1103769368,1103769375,LU
-1103769376,1103929055,US
-1103929056,1103929063,MX
-1103929064,1103930879,US
+1103623680,1103930879,US
1103930880,1103931135,MX
1103931136,1103987967,US
1103987968,1103988223,BR
@@ -33394,79 +11080,31 @@
1103992320,1103992575,FI
1103992576,1103996927,US
1103996928,1103997439,EC
-1103997440,1104003455,US
-1104003456,1104003583,PH
-1104003584,1104033439,US
-1104033440,1104033471,GB
-1104033472,1104075703,US
-1104075704,1104075711,CH
-1104075712,1104081391,US
-1104081392,1104081399,PR
-1104081400,1104082423,US
-1104082424,1104082431,UM
-1104082432,1104096407,US
-1104096408,1104096415,DE
-1104096416,1104166911,US
+1103997440,1104166911,US
1104166912,1104168959,CO
-1104168960,1104232743,US
-1104232744,1104232751,CA
-1104232752,1104265215,US
+1104168960,1104265215,US
1104265216,1104265727,PH
1104265728,1104492287,US
1104492288,1104492543,PH
-1104492544,1104559391,US
-1104559392,1104559399,CA
-1104559400,1104559487,US
-1104559488,1104559503,CA
-1104559504,1104629247,US
+1104492544,1104629247,US
1104629248,1104629759,GH
-1104629760,1104630975,US
-1104630976,1104631039,CA
-1104631040,1104753151,US
+1104629760,1104753151,US
1104753152,1104753407,SX
1104753408,1104842751,US
1104842752,1104844799,PR
-1104844800,1104875335,US
-1104875336,1104875351,AF
-1104875352,1104881087,US
-1104881088,1104881151,PH
-1104881152,1104916991,US
-1104916992,1104917247,AS
-1104917248,1105034495,US
+1104844800,1104924415,US
+1104924416,1104924671,IN
+1104924672,1105034495,US
1105034496,1105034751,IT
1105034752,1105099519,US
1105099520,1105099775,EC
-1105099776,1105142463,US
-1105142464,1105142471,MN
-1105142472,1105143039,US
-1105143040,1105143047,MN
-1105143048,1105153215,US
-1105153216,1105153279,PH
-1105153280,1105196775,US
-1105196776,1105196783,AF
-1105196784,1106305663,US
-1106305664,1106305671,CA
-1106305672,1106306047,US
-1106306048,1106306079,CA
-1106306080,1106349599,US
-1106349600,1106349607,UM
-1106349608,1106469695,US
-1106469696,1106469759,CO
-1106469760,1106469887,US
+1105099776,1106469887,US
1106469888,1106470911,BS
1106470912,1106475007,US
1106475008,1106475519,CO
-1106475520,1106484351,US
-1106484352,1106484415,PH
-1106484416,1106495303,US
-1106495304,1106495319,GB
-1106495320,1106532887,US
-1106532888,1106532895,TW
-1106532896,1106547743,US
-1106547744,1106547759,DK
-1106547760,1106685047,US
-1106685048,1106685055,CA
-1106685056,1106758655,US
+1106475520,1106740991,US
+1106740992,1106741247,CR
+1106741248,1106758655,US
1106758656,1106759167,EC
1106759168,1106759679,CO
1106759680,1106767871,US
@@ -33475,13 +11113,9 @@
1106768896,1106769919,CO
1106769920,1107239935,US
1107239936,1107240191,CN
-1107240192,1107240447,A2
+1107240192,1107240447,US
1107240448,1107240959,CN
-1107240960,1107241215,US
-1107241216,1107241343,CN
-1107241344,1107241471,US
-1107241472,1107241599,CN
-1107241600,1107243007,US
+1107240960,1107243007,US
1107243008,1107247103,TC
1107247104,1107275775,US
1107275776,1107279871,CA
@@ -33489,23 +11123,7 @@
1107288064,1107292159,CA
1107292160,1107701759,US
1107701760,1107705855,CA
-1107705856,1107801367,US
-1107801368,1107801375,CA
-1107801376,1107808842,US
-1107808843,1107808846,PE
-1107808847,1107808877,US
-1107808878,1107808881,PE
-1107808882,1107809392,US
-1107809393,1107809393,QA
-1107809394,1107809394,US
-1107809395,1107809396,QA
-1107809397,1107809418,US
-1107809419,1107809419,QA
-1107809420,1107809850,US
-1107809851,1107809851,CA
-1107809852,1107810392,US
-1107810393,1107810396,IN
-1107810397,1107812031,US
+1107705856,1107812031,US
1107812032,1107812095,CA
1107812096,1107820543,US
1107820544,1107853311,ZA
@@ -33537,403 +11155,133 @@
1108025344,1108029439,CA
1108029440,1108033535,US
1108033536,1108041727,CA
-1108041728,1108047295,US
-1108047296,1108047327,MX
-1108047328,1108054015,US
-1108054016,1108054303,CA
-1108054304,1108054311,US
-1108054312,1108054527,CA
-1108054528,1108054543,US
-1108054544,1108054687,CA
-1108054688,1108054695,US
-1108054696,1108054751,CA
-1108054752,1108054767,US
-1108054768,1108055071,CA
-1108055072,1108055103,US
-1108055104,1108055263,CA
-1108055264,1108055279,US
-1108055280,1108055399,CA
-1108055400,1108055407,US
-1108055408,1108055423,CA
-1108055424,1108055439,US
-1108055440,1108055455,CA
-1108055456,1108055471,US
-1108055472,1108055519,CA
-1108055520,1108055551,US
-1108055552,1108055903,CA
-1108055904,1108055919,US
-1108055920,1108055967,CA
-1108055968,1108055983,US
-1108055984,1108056127,PA
-1108056128,1108056191,US
-1108056192,1108056207,CA
-1108056208,1108056215,GB
-1108056216,1108056223,CA
-1108056224,1108056255,US
-1108056256,1108056287,CA
-1108056288,1108056319,CR
-1108056320,1108056407,CA
-1108056408,1108056415,US
-1108056416,1108056579,CA
-1108056580,1108056581,US
-1108056582,1108056671,CA
-1108056672,1108056703,US
-1108056704,1108056727,CA
-1108056728,1108056735,US
-1108056736,1108056783,CA
-1108056784,1108056791,CR
-1108056792,1108056799,GB
-1108056800,1108056935,CA
-1108056936,1108056943,GB
-1108056944,1108057071,CA
-1108057072,1108057079,NL
-1108057080,1108057087,US
-1108057088,1108057135,CA
-1108057136,1108057151,US
-1108057152,1108057215,CA
-1108057216,1108057239,US
-1108057240,1108057287,CA
-1108057288,1108057295,LB
-1108057296,1108057335,CA
-1108057336,1108057343,GB
-1108057344,1108057383,CA
-1108057384,1108057391,US
-1108057392,1108057519,CA
-1108057520,1108057535,US
-1108057536,1108057775,CA
-1108057776,1108057783,US
-1108057784,1108066303,CA
-1108066304,1108492287,US
+1108041728,1108054015,US
+1108054016,1108066303,CA
+1108066304,1108443391,US
+1108443392,1108443647,CA
+1108443648,1108492287,US
1108492288,1108500479,ZA
1108500480,1108525055,US
1108525056,1108541439,CA
-1108541440,1108861679,US
-1108861680,1108861687,LK
-1108861688,1108862271,US
-1108862272,1108862335,LT
-1108862336,1109246537,US
-1109246538,1109246538,CA
-1109246539,1109246557,US
-1109246558,1109246558,CA
-1109246559,1109246583,US
-1109246584,1109246584,CA
-1109246585,1109246585,US
-1109246586,1109246586,CA
-1109246587,1109250860,US
-1109250861,1109250868,PH
-1109250869,1109252455,US
-1109252456,1109252463,AU
-1109252464,1109639199,US
-1109639200,1109639215,IN
-1109639216,1109641663,US
-1109641664,1109641679,JP
-1109641680,1109642367,US
-1109642368,1109642383,IL
-1109642384,1109642415,US
-1109642416,1109642431,IL
-1109642432,1109642583,US
-1109642584,1109642591,DE
-1109642592,1109643303,US
-1109643304,1109643311,DE
-1109643312,1109643519,US
-1109643520,1109643551,CA
-1109643552,1109647231,US
-1109647232,1109647247,AU
-1109647248,1109648319,US
-1109648320,1109648335,JP
-1109648336,1109648927,US
-1109648928,1109648943,AU
-1109648944,1109650639,US
-1109650640,1109650655,AU
-1109650656,1109688319,US
+1108541440,1109688319,US
1109688320,1109696511,CA
-1109696512,1109705727,US
-1109705728,1109705743,CG
-1109705744,1109705759,US
-1109705760,1109705791,CD
-1109705792,1109705823,US
-1109705824,1109705839,CD
-1109705840,1109705855,US
-1109705856,1109705928,CD
+1109696512,1109705928,US
1109705929,1109705929,LB
-1109705930,1109705983,CD
-1109705984,1109707007,US
+1109705930,1109707007,US
1109707008,1109707263,JM
1109707264,1109707519,US
1109707520,1109707775,MW
-1109707776,1109708639,US
-1109708640,1109708671,HT
-1109708672,1109709823,US
+1109707776,1109709823,US
1109709824,1109710847,ZM
-1109710848,1109711175,US
-1109711176,1109711183,HT
-1109711184,1109712767,US
-1109712768,1109712895,A2
-1109712896,1109772223,US
-1109772224,1109772239,HK
-1109772240,1109774175,US
-1109774176,1109774183,CA
-1109774184,1109776575,US
-1109776576,1109776607,CN
-1109776608,1109776615,CA
-1109776616,1109819391,US
-1109819392,1109848831,CA
-1109848832,1109849087,CA
-1109849088,1109852159,CA
-1109852160,1109902415,US
-1109902416,1109902431,CY
-1109902432,1109902511,US
-1109902512,1109902527,CY
-1109902528,1109918463,US
+1109710848,1109819391,US
+1109819392,1109852159,CA
+1109852160,1109918463,US
1109918464,1109918719,GB
1109918720,1109919743,US
1109919744,1109919999,GB
-1109920000,1109923135,US
-1109923136,1109923151,BG
-1109923152,1109923183,US
-1109923184,1109923199,SK
-1109923200,1109923279,US
-1109923280,1109923295,GB
-1109923296,1109923647,US
-1109923648,1109923711,CA
-1109923712,1109925503,US
-1109925504,1109925567,GB
-1109925568,1109927167,US
+1109920000,1109927167,US
1109927168,1109927423,AU
1109927424,1109934591,US
1109934592,1109934847,GB
-1109934848,1109952599,US
-1109952600,1109952607,JP
-1109952608,1109952623,US
-1109952624,1109952631,GB
-1109952632,1109954167,US
-1109954168,1109954175,VE
-1109954176,1109954351,US
-1109954352,1109954367,ES
-1109954368,1110126591,US
+1109934848,1110126591,US
1110126592,1110130687,CA
1110130688,1110310911,US
1110310912,1110376447,CA
-1110376448,1110415929,US
-1110415930,1110415930,US
-1110415931,1110441983,US
+1110376448,1110441983,US
1110441984,1110442239,CA
-1110442240,1110442303,US
-1110442304,1110442367,CA
-1110442368,1110442431,US
-1110442432,1110442719,CA
-1110442720,1110442751,US
-1110442752,1110442863,CA
-1110442864,1110443007,US
-1110443008,1110443295,CA
-1110443296,1110443327,US
-1110443328,1110443551,CA
-1110443552,1110443711,US
-1110443712,1110443719,CA
-1110443720,1110443903,US
-1110443904,1110444031,CA
-1110444032,1110444287,US
+1110442240,1110443535,US
+1110443536,1110443543,CA
+1110443544,1110444287,US
1110444288,1110444799,CA
1110444800,1110445055,US
-1110445056,1110446655,CA
-1110446656,1110446719,IL
-1110446720,1110446847,CA
-1110446848,1110446975,US
-1110446976,1110447039,CA
-1110447040,1110447103,US
-1110447104,1110448383,CA
+1110445056,1110446591,CA
+1110446592,1110447359,US
+1110447360,1110448383,CA
1110448384,1110448639,US
-1110448640,1110449055,CA
-1110449056,1110449151,US
-1110449152,1110449703,CA
-1110449704,1110449719,US
-1110449720,1110449735,CA
-1110449736,1110449751,US
-1110449752,1110449783,CA
-1110449784,1110449791,US
-1110449792,1110449799,CA
-1110449800,1110449807,US
-1110449808,1110449879,CA
-1110449880,1110449895,US
-1110449896,1110449943,CA
-1110449944,1110449967,US
-1110449968,1110449975,CA
-1110449976,1110450031,US
-1110450032,1110450071,CA
-1110450072,1110450175,US
-1110450176,1110451327,CA
-1110451328,1110451455,US
+1110448640,1110448895,CA
+1110448896,1110449151,US
+1110449152,1110449663,CA
+1110449664,1110450431,US
+1110450432,1110450943,CA
+1110450944,1110451455,US
1110451456,1110451711,CA
1110451712,1110451967,US
1110451968,1110453247,CA
1110453248,1110454271,US
1110454272,1110455295,CA
-1110455296,1110458367,US
-1110458368,1110458415,CA
-1110458416,1110458431,US
-1110458432,1110458479,CA
-1110458480,1110458495,US
-1110458496,1110458575,CA
-1110458576,1110458639,US
-1110458640,1110458687,CA
-1110458688,1110458703,US
-1110458704,1110458735,CA
-1110458736,1110458767,US
-1110458768,1110458783,CA
-1110458784,1110458831,US
-1110458832,1110458847,CA
-1110458848,1110458879,US
-1110458880,1110458927,CA
-1110458928,1110458943,US
-1110458944,1110459007,CA
-1110459008,1110459023,US
-1110459024,1110459071,CA
-1110459072,1110459087,US
-1110459088,1110459151,CA
-1110459152,1110459167,US
-1110459168,1110459183,CA
-1110459184,1110459199,US
-1110459200,1110459215,CA
-1110459216,1110459311,US
-1110459312,1110459343,CA
-1110459344,1110459391,US
-1110459392,1110459423,CA
-1110459424,1110459455,US
-1110459456,1110459743,CA
-1110459744,1110459903,US
-1110459904,1110459967,CA
-1110459968,1110460223,US
-1110460224,1110460319,CA
-1110460320,1110460383,US
-1110460384,1110460447,CA
-1110460448,1110460479,US
-1110460480,1110460639,CA
-1110460640,1110460671,US
-1110460672,1110460719,CA
-1110460720,1110460743,US
-1110460744,1110460775,CA
-1110460776,1110460783,US
-1110460784,1110460831,CA
-1110460832,1110460863,US
-1110460864,1110460887,CA
-1110460888,1110460903,US
-1110460904,1110460911,CA
-1110460912,1110460935,US
-1110460936,1110460999,CA
-1110461000,1110461183,US
-1110461184,1110461375,CA
-1110461376,1110461439,US
-1110461440,1110461823,CA
-1110461824,1110462079,US
-1110462080,1110462719,CA
-1110462720,1110462847,US
-1110462848,1110463103,CA
-1110463104,1110463231,US
-1110463232,1110463487,CA
-1110463488,1110463747,US
-1110463748,1110463751,CA
-1110463752,1110463999,US
+1110455296,1110463999,US
1110464000,1110464767,CA
-1110464768,1110464895,US
-1110464896,1110464959,CA
-1110464960,1110465023,US
+1110464768,1110465023,US
1110465024,1110465535,CA
1110465536,1110466047,US
1110466048,1110466303,CA
-1110466304,1110466559,US
-1110466560,1110466567,CA
-1110466568,1110466815,US
-1110466816,1110466847,CA
-1110466848,1110467583,US
-1110467584,1110467711,CA
-1110467712,1110472447,US
+1110466304,1110472447,US
1110472448,1110473727,CA
1110473728,1110473983,US
-1110473984,1110474303,CA
-1110474304,1110474495,US
-1110474496,1110474751,CA
-1110474752,1110540287,US
+1110473984,1110474239,CA
+1110474240,1110540287,US
1110540288,1110573055,CA
-1110573056,1110578431,PR
-1110578432,1110578687,US
-1110578688,1110638591,PR
+1110573056,1110587391,PR
+1110587392,1110587903,US
+1110587904,1110588159,PR
+1110588160,1110588671,US
+1110588672,1110589183,PR
+1110589184,1110589439,US
+1110589440,1110590207,PR
+1110590208,1110590463,US
+1110590464,1110591231,PR
+1110591232,1110591487,US
+1110591488,1110592255,PR
+1110592256,1110592511,US
+1110592512,1110593023,PR
+1110593024,1110593279,US
+1110593280,1110593535,PR
+1110593536,1110593791,US
+1110593792,1110594047,PR
+1110594048,1110594303,US
+1110594304,1110594815,PR
+1110594816,1110595583,US
+1110595584,1110598655,PR
+1110598656,1110598911,US
+1110598912,1110638591,PR
1110638592,1110654463,US
1110654464,1110654719,HT
1110654720,1110663167,US
1110663168,1110675455,CA
1110675456,1110679551,US
-1110679552,1110683423,CA
-1110683424,1110683431,US
-1110683432,1110683647,CA
+1110679552,1110683647,CA
1110683648,1110700031,US
1110700032,1110704127,CA
-1110704128,1110852863,US
-1110852864,1110853119,A2
-1110853120,1110855679,US
+1110704128,1110855679,US
1110855680,1110856703,CN
1110856704,1110857727,IN
1110857728,1110858751,SG
-1110858752,1110863871,US
+1110858752,1110859007,US
+1110859008,1110859263,AU
+1110859264,1110863871,US
1110863872,1110865919,JM
1110865920,1110867455,KY
1110867456,1110867967,JM
-1110867968,1110870815,US
-1110870816,1110870847,HK
-1110870848,1110870919,US
-1110870920,1110870927,JP
-1110870928,1110887423,US
+1110867968,1110887423,US
1110887424,1110887679,IE
1110887680,1110929407,US
1110929408,1110933503,BM
-1110933504,1110940751,US
-1110940752,1110940767,US
-1110940768,1111195647,US
+1110933504,1111195647,US
1111195648,1111212031,CA
1111212032,1111228415,US
1111228416,1111244799,AR
-1111244800,1111888905,US
-1111888906,1111888915,IN
-1111888916,1111900223,US
-1111900224,1111900287,NL
-1111900288,1111901805,US
-1111901806,1111901815,GB
-1111901816,1112357375,US
-1112357376,1112357503,CA
-1112357504,1112360959,US
-1112360960,1112361023,CA
-1112361024,1112432639,US
+1111244800,1112432639,US
1112432640,1112440831,CA
1112440832,1112530943,US
1112530944,1112539135,CA
-1112539136,1112899769,US
-1112899770,1112899770,US
-1112899771,1112900287,US
-1112900288,1112900351,GB
-1112900352,1112900711,US
-1112900712,1112900719,GB
-1112900720,1112900863,US
-1112900864,1112902143,US
-1112902144,1112902655,US
-1112902656,1112902911,US
-1112902912,1112903711,US
-1112903712,1112903719,TR
-1112903720,1112903935,US
-1112903936,1112903999,GB
-1112904000,1112904447,US
-1112904448,1112904511,GB
-1112904512,1112905407,US
-1112905408,1112905471,GB
-1112905472,1112906367,US
-1112906368,1112906375,BR
-1112906376,1112906431,US
-1112906432,1112906439,GB
-1112906440,1112907775,US
+1112539136,1112873215,US
+1112875008,1112875519,US
+1112875776,1112877311,US
+1112877568,1112877823,US
+1112881152,1112907775,US
1112907776,1112907783,CA
-1112907784,1112907919,US
-1112907920,1112907935,EG
-1112907936,1112914175,US
-1112914176,1112914239,GB
-1112914240,1113591807,US
+1112907784,1112928255,US
+1112932096,1113591807,US
1113591808,1113595903,CA
1113595904,1113596415,CL
1113596416,1113596927,GT
@@ -33946,64 +11294,26 @@
1113600000,1113600255,US
1113600256,1113603071,VE
1113603072,1113603327,CL
-1113603328,1113603583,SV
+1113603328,1113603583,GT
1113603584,1113603839,US
1113603840,1113604095,CA
1113604096,1113657343,US
1113657344,1113661439,CA
-1113661440,1113696575,US
-1113696576,1113696639,CA
-1113696640,1113696831,US
-1113696832,1113696895,CA
-1113696896,1113718783,US
+1113661440,1113669631,US
+1113669632,1113670143,CA
+1113670144,1113670911,US
+1113670912,1113671167,CA
+1113671168,1113671423,US
+1113671424,1113677823,CA
+1113677824,1113718783,US
1113718784,1113743359,DO
-1113743360,1113752183,US
-1113752184,1113752184,US
-1113752185,1113752306,US
-1113752307,1113752307,US
-1113752308,1113752332,US
+1113743360,1113752332,US
1113752333,1113752333,AE
-1113752334,1113752434,US
-1113752435,1113752435,US
-1113752436,1113752469,US
-1113752470,1113752470,US
-1113752471,1113764497,US
-1113764498,1113764498,US
-1113764499,1113769531,US
-1113769532,1113769787,US
-1113769788,1113854007,US
-1113854008,1113854015,CA
-1113854016,1113854207,US
+1113752334,1113854207,US
1113854208,1113854463,CA
1113854464,1113854975,US
1113854976,1113855487,CA
-1113855488,1113857087,US
-1113857088,1113857151,CA
-1113857152,1113862247,US
-1113862248,1113862255,MX
-1113862256,1113864735,US
-1113864736,1113864743,BR
-1113864744,1113864767,US
-1113864768,1113864783,VI
-1113864784,1113881871,US
-1113881872,1113881879,GB
-1113881880,1113882351,US
-1113882352,1113882359,CA
-1113882360,1113888599,US
-1113888600,1113888607,CA
-1113888608,1113893783,US
-1113893784,1113893791,CA
-1113893792,1113893807,US
-1113893808,1113893815,CA
-1113893816,1113905791,US
-1113905792,1113905807,CA
-1113905808,1113916831,US
-1113916832,1113916839,GB
-1113916840,1113923839,US
-1113923840,1113923903,BR
-1113923904,1113932815,US
-1113932816,1113932823,CA
-1113932824,1113983999,US
+1113855488,1113983999,US
1113984000,1113984255,NL
1113984256,1113997311,US
1113997312,1114005503,CA
@@ -34011,90 +11321,35 @@
1114054656,1114062847,CA
1114062848,1114095615,US
1114095616,1114103807,CA
-1114103808,1114170095,US
-1114170096,1114170111,CA
-1114170112,1114505215,US
-1114505216,1114507263,CA
-1114507264,1114507295,US
-1114507296,1114507327,CA
-1114507328,1114507391,US
-1114507392,1114507423,CA
-1114507424,1114507431,GB
-1114507432,1114508287,CA
-1114508288,1114508799,US
-1114508800,1114511359,CA
-1114511360,1114511871,US
-1114511872,1114513407,CA
+1114103808,1114505215,US
+1114505216,1114506239,CA
+1114506240,1114506751,US
+1114506752,1114507263,CA
+1114507264,1114511871,US
+1114511872,1114512127,CA
+1114512128,1114513407,US
1114513408,1114515455,SA
1114515456,1114517503,US
-1114517504,1114519551,CA
-1114519552,1114520063,US
+1114517504,1114518015,CA
+1114518016,1114520063,US
1114520064,1114520319,PH
1114520320,1114520575,US
1114520576,1114520831,PH
-1114520832,1114524159,CA
+1114520832,1114524159,US
1114524160,1114524671,ZA
-1114524672,1114533375,CA
+1114524672,1114533375,US
1114533376,1114533887,ZA
1114533888,1114537983,AO
1114537984,1114550271,CA
-1114550272,1114579831,US
-1114579832,1114579832,US
-1114579833,1114628995,US
-1114628996,1114628996,US
-1114628997,1114653951,US
-1114653952,1114653983,MO
-1114653984,1114681343,US
+1114550272,1114681343,US
1114681344,1114685439,CA
1114685440,1114730495,US
1114730496,1114734591,CA
-1114734592,1114875647,US
-1114875648,1114876159,CA
-1114876160,1114876447,US
-1114876448,1114876463,CA
-1114876464,1114876479,AD
-1114876480,1114876511,US
-1114876512,1114876543,CA
-1114876544,1114876575,GB
-1114876576,1114876911,US
-1114876912,1114876927,AD
-1114876928,1114877183,US
+1114734592,1114877183,US
1114877184,1114877439,CY
-1114877440,1114877695,US
-1114877696,1114877759,SK
-1114877760,1114877791,US
-1114877792,1114877807,CA
-1114877808,1114877823,CW
-1114877824,1114877951,US
+1114877440,1114877951,US
1114877952,1114878207,PA
-1114878208,1114878463,US
-1114878464,1114878719,NL
-1114878720,1114878849,US
-1114878850,1114878977,LT
-1114878978,1114880079,US
-1114880080,1114880095,CY
-1114880096,1114880383,US
-1114880384,1114880399,CY
-1114880400,1114880407,GB
-1114880408,1114881279,US
-1114881280,1114881407,CY
-1114881408,1114881471,US
-1114881472,1114881535,CY
-1114881536,1114928863,US
-1114928864,1114928871,GB
-1114928872,1114929071,US
-1114929072,1114929087,RU
-1114929088,1114930175,US
-1114930176,1114930303,GB
-1114930304,1114967311,US
-1114967312,1114967327,GB
-1114967328,1115104511,US
-1115104512,1115104639,CA
-1115104640,1115111935,US
-1115111936,1115112063,PR
-1115112064,1115112079,US
-1115112080,1115112087,ES
-1115112088,1115112575,US
+1114878208,1115112575,US
1115112576,1115112607,IN
1115112608,1115113471,US
1115113472,1115114495,HN
@@ -34111,288 +11366,97 @@
1115127808,1115131903,CA
1115131904,1115135999,US
1115136000,1115144191,CA
-1115144192,1115705343,US
+1115144192,1115693055,US
+1115693056,1115697151,AR
+1115697152,1115705343,US
1115705344,1115709439,CA
-1115709440,1115768351,US
-1115768352,1115768367,CA
-1115768368,1115774799,US
-1115774800,1115774815,A2
-1115774816,1115783167,US
+1115709440,1115783167,US
1115783168,1115791359,CA
1115791360,1115795455,PR
1115795456,1115799551,CA
1115799552,1115815935,US
1115815936,1115947007,CA
1115947008,1116014079,US
-1116014080,1116014335,A2
+1116014080,1116014335,DE
1116014336,1116014591,US
-1116014592,1116014847,A2
+1116014592,1116014847,DE
1116014848,1116015871,US
-1116015872,1116016127,A2
+1116015872,1116016127,DE
1116016128,1116021247,US
1116021248,1116021503,CI
1116021504,1116024063,US
1116024064,1116024127,PG
1116024128,1116027135,US
-1116027136,1116027903,A2
-1116027904,1116158271,US
-1116158272,1116158335,CA
-1116158336,1116158463,US
-1116158464,1116158495,AU
-1116158496,1116158623,US
-1116158624,1116158719,CA
-1116158720,1116159519,US
-1116159520,1116159535,BR
-1116159536,1116168191,US
-1116168192,1116175103,CA
-1116175104,1116175135,JM
-1116175136,1116176383,CA
-1116176384,1116425393,US
-1116425394,1116425394,US
-1116425395,1116538687,US
-1116538688,1116538703,UA
-1116538704,1116897279,US
+1116027136,1116027903,DE
+1116027904,1116168191,US
+1116168192,1116176383,CA
+1116176384,1116897279,US
1116897280,1116905471,CA
1116905472,1117137919,US
1117137920,1117138175,CA
1117138176,1117142271,US
1117142272,1117142527,CA
-1117142528,1117167855,US
-1117167856,1117167871,GB
-1117167872,1117189951,US
-1117189952,1117190015,KR
-1117190016,1117195991,US
-1117195992,1117195999,A2
-1117196000,1117198591,US
+1117142528,1117198591,US
1117198592,1117198847,CA
1117198848,1117274111,US
1117274112,1117282303,CA
-1117282304,1117299615,US
-1117299616,1117299623,GB
-1117299624,1117303103,US
-1117303104,1117303167,CA
-1117303168,1117305671,US
-1117305672,1117305679,GB
-1117305680,1117409343,US
-1117409344,1117409351,GB
-1117409352,1117409783,US
-1117409784,1117409791,GB
-1117409792,1117413375,US
+1117282304,1117413375,US
1117413376,1117415423,CA
1117415424,1117416191,CW
1117416192,1117416447,CA
1117416448,1117416703,US
-1117416704,1117417215,CA
-1117417216,1117417223,US
-1117417224,1117417231,CA
-1117417232,1117417239,US
-1117417240,1117417247,CA
-1117417248,1117417263,US
-1117417264,1117417279,CA
-1117417280,1117417343,US
-1117417344,1117419775,CA
+1117416704,1117419775,CA
1117419776,1117420031,US
1117420032,1117420415,CA
1117420416,1117420447,US
-1117420448,1117421055,CA
-1117421056,1117421311,US
-1117421312,1117421567,CA
-1117421568,1117683711,US
+1117420448,1117421567,CA
+1117421568,1117460223,US
+1117460224,1117460287,GB
+1117460288,1117683711,US
1117683712,1117691903,CA
1117691904,1117724671,US
1117724672,1117728767,CA
-1117728768,1117745151,US
+1117728768,1117744127,US
1117745152,1117749247,CA
-1117749248,1117796575,US
-1117796576,1117796591,CA
-1117796592,1117815295,US
+1117749248,1117815295,US
1117815296,1117815551,CN
-1117815552,1117817919,US
-1117817920,1117817983,CA
-1117817984,1117819631,US
-1117819632,1117819647,AE
-1117819648,1117822463,US
-1117822464,1117822527,CA
-1117822528,1117823231,US
+1117815552,1117823231,US
1117823232,1117823487,CA
1117823488,1117823743,CN
1117823744,1117823999,US
1117824000,1117824511,GR
1117824512,1117829375,US
1117829376,1117829631,GR
-1117829632,1117831359,US
-1117831360,1117831423,A2
-1117831424,1117978623,US
-1117978624,1117979503,CA
-1117979504,1117979519,US
-1117979520,1117982639,CA
-1117982640,1117982655,US
-1117982656,1117982999,CA
-1117983000,1117983007,US
-1117983008,1117983023,CA
-1117983024,1117983039,US
-1117983040,1117983215,CA
-1117983216,1117983223,US
-1117983224,1117985055,CA
-1117985056,1117985079,US
-1117985080,1117985423,CA
-1117985424,1117985447,US
-1117985448,1117985463,CA
-1117985464,1117985471,US
-1117985472,1117986591,CA
-1117986592,1117986607,US
-1117986608,1117986815,CA
+1117829632,1117978623,US
+1117978624,1117986815,CA
1117986816,1117995007,US
1117995008,1117999103,CA
-1117999104,1118027783,US
-1118027784,1118029471,CA
-1118029472,1118029519,US
-1118029520,1118029551,CA
-1118029552,1118029567,US
-1118029568,1118030991,CA
-1118030992,1118030999,US
-1118031000,1118031071,CA
-1118031072,1118031079,US
-1118031080,1118031263,CA
-1118031264,1118031295,US
-1118031296,1118031311,CA
-1118031312,1118031319,US
-1118031320,1118031375,CA
-1118031376,1118031383,CR
-1118031384,1118031431,CA
-1118031432,1118031439,US
-1118031440,1118031759,CA
-1118031760,1118031799,US
-1118031800,1118031871,CA
-1118031872,1118126079,US
-1118126080,1118126719,CA
-1118126720,1118126847,US
-1118126848,1118127231,CA
-1118127232,1118127359,US
-1118127360,1118127615,CA
-1118127616,1118128255,US
-1118128256,1118128319,CA
-1118128320,1118128383,MY
-1118128384,1118128639,CA
-1118128640,1118129279,US
-1118129280,1118129663,CA
-1118129664,1118129695,BR
-1118129696,1118129823,US
-1118129824,1118129855,AU
-1118129856,1118129887,US
-1118129888,1118129919,CA
-1118129920,1118130687,US
-1118130688,1118131583,CA
-1118131584,1118131711,IN
-1118131712,1118132479,CA
+1117999104,1118027775,US
+1118027776,1118031871,CA
+1118031872,1118126335,US
+1118126336,1118126591,CA
+1118126592,1118130687,US
+1118130688,1118131455,CA
+1118131456,1118131967,US
+1118131968,1118132479,CA
1118132480,1118132991,US
-1118132992,1118133375,CA
-1118133376,1118133503,US
-1118133504,1118133631,CA
-1118133632,1118133759,US
-1118133760,1118133887,CA
-1118133888,1118134815,US
-1118134816,1118134879,CA
-1118134880,1118134911,US
-1118134912,1118134975,CA
-1118134976,1118135007,US
-1118135008,1118135039,IN
-1118135040,1118135567,US
-1118135568,1118135583,CA
-1118135584,1118135615,US
-1118135616,1118135631,TZ
-1118135632,1118135807,US
-1118135808,1118136191,CA
-1118136192,1118136831,US
-1118136832,1118136863,IN
-1118136864,1118136927,US
-1118136928,1118136959,CA
-1118136960,1118137119,US
-1118137120,1118137151,IL
-1118137152,1118137215,US
-1118137216,1118137247,GB
-1118137248,1118138559,US
-1118138560,1118138591,AU
-1118138592,1118138623,FR
-1118138624,1118138879,US
+1118132992,1118133247,CA
+1118133248,1118135807,US
+1118135808,1118136063,CA
+1118136064,1118138879,US
1118138880,1118139135,CA
1118139136,1118139903,US
1118139904,1118140415,CA
-1118140416,1118140831,US
-1118140832,1118140895,VE
-1118140896,1118141183,US
+1118140416,1118141183,US
1118141184,1118141439,CA
1118141440,1118141695,US
1118141696,1118141951,CA
-1118141952,1118141967,CN
-1118141968,1118142063,US
-1118142064,1118142079,IN
-1118142080,1118151423,US
-1118151424,1118151431,ES
-1118151432,1118151463,US
-1118151464,1118151471,CR
-1118151472,1118151631,US
-1118151632,1118151647,MX
-1118151648,1118152239,US
-1118152240,1118152255,AW
-1118152256,1118152271,PR
-1118152272,1118152287,US
-1118152288,1118152303,BR
-1118152304,1118152319,FR
-1118152320,1118152415,US
-1118152416,1118152431,PR
-1118152432,1118153071,US
-1118153072,1118153087,UY
-1118153088,1118153151,US
-1118153152,1118153167,AR
-1118153168,1118153543,US
-1118153544,1118153547,BR
-1118153548,1118153551,US
-1118153552,1118153567,DE
-1118153568,1118153679,US
-1118153680,1118153695,VE
-1118153696,1118153871,US
-1118153872,1118153887,CO
-1118153888,1118153919,US
-1118153920,1118153935,PA
-1118153936,1118153951,TT
-1118153952,1118154063,US
-1118154064,1118154079,MX
-1118154080,1118154207,US
-1118154208,1118154223,CL
-1118154224,1118155999,US
-1118156000,1118156015,GT
-1118156016,1118158079,US
-1118158080,1118158087,PA
-1118158088,1118158319,US
-1118158320,1118158323,SV
-1118158324,1118158331,US
-1118158332,1118158335,SV
-1118158336,1118158847,US
+1118141952,1118158847,US
1118158848,1118167039,CA
1118167040,1118474239,US
-1118474240,1118474535,CA
-1118474536,1118474543,US
-1118474544,1118474591,CA
-1118474592,1118474599,US
-1118474600,1118474607,CA
-1118474608,1118474615,US
-1118474616,1118474863,CA
-1118474864,1118474871,US
-1118474872,1118474879,CA
-1118474880,1118474911,US
-1118474912,1118475087,CA
-1118475088,1118475095,US
-1118475096,1118475215,CA
-1118475216,1118475223,US
-1118475224,1118475231,CA
-1118475232,1118475247,US
-1118475248,1118476807,CA
-1118476808,1118476831,US
-1118476832,1118476887,CA
-1118476888,1118476895,US
-1118476896,1118478335,CA
-1118478336,1118511103,US
+1118474240,1118478335,CA
+1118478336,1118483455,US
+1118486528,1118515199,US
1118515200,1118519295,CA
1118519296,1118527487,US
1118527488,1118531583,CA
@@ -34400,799 +11464,206 @@
1118535680,1118539775,CA
1118539776,1118543871,US
1118543872,1118547967,CA
-1118547968,1118548671,US
-1118548672,1118548679,CA
-1118548680,1118549575,US
-1118549576,1118549583,IN
-1118549584,1118564607,US
-1118564608,1118564639,NO
-1118564640,1118564655,US
-1118564656,1118564671,IN
-1118564672,1118564895,US
-1118564896,1118564927,AU
-1118564928,1118565375,US
-1118565376,1118565407,EG
-1118565408,1118572303,US
-1118572304,1118572319,US
-1118572320,1118572351,US
-1118572352,1118572543,US
-1118572544,1118789783,US
-1118789784,1118789791,BB
-1118789792,1118790655,US
+1118547968,1118790655,US
1118790656,1118790911,IL
-1118790912,1118791999,US
-1118792000,1118792031,PR
-1118792032,1118792063,DO
-1118792064,1118792127,US
-1118792128,1118792143,AU
-1118792144,1118793407,US
-1118793408,1118793423,BB
-1118793424,1118793471,US
+1118790912,1118793471,US
1118793472,1118793727,CO
-1118793728,1118793823,US
-1118793824,1118793839,CA
-1118793840,1118793871,US
-1118793872,1118793887,DO
-1118793888,1118793967,US
-1118793968,1118793983,HT
-1118793984,1118794127,US
-1118794128,1118794143,NO
-1118794144,1118795791,US
-1118795792,1118795807,AG
-1118795808,1118795895,US
-1118795896,1118795903,CY
-1118795904,1118796543,US
+1118793728,1118796543,US
1118796544,1118796799,GB
-1118796800,1118797063,US
-1118797064,1118797071,CR
-1118797072,1118961663,US
-1118961664,1118962831,A2
-1118962832,1118962839,SA
-1118962840,1118962847,NG
-1118962848,1118962943,A2
+1118796800,1118824447,US
+1118826496,1118962943,US
1118962944,1118963199,AS
-1118963200,1118963455,A2
-1118963456,1118963463,TZ
-1118963464,1118963471,A2
-1118963472,1118963479,NG
-1118963480,1118963487,GB
-1118963488,1118963495,AO
-1118963496,1118963583,A2
-1118963584,1118963647,KE
-1118963648,1118963975,A2
-1118963976,1118963991,LB
-1118963992,1118964991,A2
-1118964992,1118965247,CW
+1118963200,1118965247,US
1118965248,1118965503,AS
-1118965504,1118965839,A2
-1118965840,1118965847,EC
-1118965848,1118965911,A2
-1118965912,1118965919,MA
-1118965920,1118965999,A2
-1118966000,1118966007,NG
-1118966008,1118966015,A2
+1118965504,1118966015,US
1118966016,1118966271,BR
-1118966272,1118966311,SV
-1118966312,1118966319,A2
-1118966320,1118966327,SV
-1118966328,1118966335,SR
-1118966336,1118966351,SV
-1118966352,1118966367,A2
-1118966368,1118966399,SV
-1118966400,1118966407,A2
-1118966408,1118966415,SV
-1118966416,1118966423,NI
-1118966424,1118966455,A2
-1118966456,1118966463,NI
-1118966464,1118966487,A2
-1118966488,1118966495,NI
-1118966496,1118966503,A2
-1118966504,1118966511,NI
-1118966512,1118966519,A2
-1118966520,1118966527,NI
-1118966528,1118966655,A2
-1118966656,1118966687,SV
-1118966688,1118966695,NI
-1118966696,1118966703,A2
-1118966704,1118966711,NI
-1118966712,1118966719,A2
-1118966720,1118966783,EC
-1118966784,1118966791,LB
-1118966792,1118966807,A2
-1118966808,1118966815,LB
-1118966816,1118966847,A2
-1118966848,1118966911,PY
-1118966912,1118966959,A2
-1118966960,1118966975,SA
-1118966976,1118966991,A2
-1118966992,1118966999,SA
-1118967000,1118967015,LB
-1118967016,1118967063,A2
-1118967064,1118967135,SA
-1118967136,1118967159,LB
-1118967160,1118967167,A2
-1118967168,1118967199,SA
-1118967200,1118967207,A2
-1118967208,1118967231,LB
-1118967232,1118967255,A2
-1118967256,1118967271,LB
-1118967272,1118967279,A2
-1118967280,1118967287,LB
-1118967288,1118967295,A2
-1118967296,1118967327,LB
-1118967328,1118967335,A2
-1118967336,1118967343,LB
-1118967344,1118967359,A2
-1118967360,1118967367,LB
-1118967368,1118967391,A2
-1118967392,1118967399,MA
-1118967400,1118967423,LB
-1118967424,1118967487,A2
-1118967488,1118967519,SA
-1118967520,1118967535,A2
-1118967536,1118967543,LB
-1118967544,1118967551,SA
-1118967552,1118967567,LB
-1118967568,1118967583,A2
-1118967584,1118967615,SA
-1118967616,1118967631,A2
-1118967632,1118967647,SA
-1118967648,1118967663,LB
-1118967664,1118967679,A2
-1118967680,1118967743,LB
-1118967744,1118967775,SA
-1118967776,1118967799,A2
-1118967800,1118967807,RW
-1118967808,1118967839,A2
-1118967840,1118967847,LB
-1118967848,1118967903,A2
-1118967904,1118968015,SA
-1118968016,1118968039,A2
-1118968040,1118968047,LB
-1118968048,1118968063,A2
-1118968064,1118968095,SA
-1118968096,1118968111,A2
-1118968112,1118968127,LB
-1118968128,1118968159,SA
-1118968160,1118968175,LB
-1118968176,1118968183,AE
-1118968184,1118968191,A2
-1118968192,1118968207,SA
-1118968208,1118968223,IQ
-1118968224,1118968255,A2
-1118968256,1118968287,IQ
-1118968288,1118968295,AE
-1118968296,1118968303,A2
-1118968304,1118968319,AE
-1118968320,1118968575,SR
-1118968576,1118968831,A2
-1118968832,1118968895,SA
-1118968896,1118968927,A2
-1118968928,1118968975,SA
-1118968976,1118968991,A2
-1118968992,1118969007,SA
-1118969008,1118969023,A2
-1118969024,1118969055,SA
-1118969056,1118969087,A2
-1118969088,1118969215,SA
-1118969216,1118969279,A2
-1118969280,1118969343,SA
-1118969344,1118969367,A2
-1118969368,1118969375,NI
-1118969376,1118969599,A2
-1118969600,1118969727,GY
-1118969728,1118969855,A2
+1118966272,1118969855,US
1118969856,1118970111,LB
-1118970112,1118970119,KE
-1118970120,1118970239,A2
-1118970240,1118970367,NG
+1118970112,1118970367,US
1118970368,1118970623,GB
-1118970624,1118970751,A2
-1118970752,1118970879,GY
-1118970880,1118971520,SR
-1118971521,1118971647,A2
+1118970624,1118971647,US
1118971648,1118971903,GY
-1118971904,1118972159,A2
+1118971904,1118972159,US
1118972160,1118972415,VE
1118972416,1118972671,GB
-1118972672,1118972831,A2
-1118972832,1118972863,SA
-1118972864,1118972927,A2
-1118972928,1118972943,NI
-1118972944,1118972959,VE
-1118972960,1118972967,A2
-1118972968,1118972975,NI
-1118972976,1118972983,A2
-1118972984,1118972999,NI
-1118973000,1118973047,A2
-1118973048,1118973055,NI
-1118973056,1118973063,A2
-1118973064,1118973071,EC
-1118973072,1118973079,A2
-1118973080,1118973111,VE
-1118973112,1118973119,A2
-1118973120,1118973151,NI
-1118973152,1118973159,A2
-1118973160,1118973167,NI
-1118973168,1118973183,A2
+1118972672,1118973183,US
1118973184,1118973439,VE
1118973440,1118973695,US
1118973696,1118973951,NG
-1118973952,1118974015,GY
-1118974016,1118974047,A2
-1118974048,1118974055,SV
-1118974056,1118974095,A2
-1118974096,1118974103,EC
-1118974104,1118974111,SV
-1118974112,1118974119,NI
-1118974120,1118974135,A2
-1118974136,1118974207,EC
-1118974208,1118974215,US
-1118974216,1118975231,A2
-1118975232,1118975487,US
+1118973952,1118975487,US
1118975488,1118975743,KE
-1118975744,1118975999,A2
+1118975744,1118975999,US
1118976000,1118976255,GB
-1118976256,1118976295,A2
-1118976296,1118976311,SA
-1118976312,1118976343,A2
-1118976344,1118976359,LB
-1118976360,1118976367,A2
-1118976368,1118976375,SA
-1118976376,1118976383,LB
-1118976384,1118976399,A2
-1118976400,1118976423,SA
-1118976424,1118976599,A2
-1118976600,1118976607,NG
-1118976608,1118976615,LB
-1118976616,1118976687,A2
-1118976688,1118976703,NG
-1118976704,1118976727,A2
-1118976728,1118976735,NG
-1118976736,1118976767,A2
-1118976768,1118976791,NG
-1118976792,1118976831,A2
-1118976832,1118976863,NG
-1118976864,1118976895,A2
-1118976896,1118977023,NG
-1118977024,1118977055,A2
-1118977056,1118977087,SA
-1118977088,1118977311,A2
-1118977312,1118977343,NG
-1118977344,1118977351,KE
-1118977352,1118977535,A2
-1118977536,1118977551,US
-1118977552,1118977575,A2
-1118977576,1118977583,SA
-1118977584,1118977631,A2
-1118977632,1118977639,US
-1118977640,1118977839,A2
-1118977840,1118977847,LB
-1118977848,1118977879,A2
-1118977880,1118977887,NI
-1118977888,1118977903,A2
-1118977904,1118977919,US
-1118977920,1118978047,A2
-1118978048,1118978255,SA
-1118978256,1118978287,A2
-1118978288,1118978439,SA
-1118978440,1118978447,A2
-1118978448,1118978463,LB
-1118978464,1118978479,A2
-1118978480,1118978495,SA
-1118978496,1118979071,A2
-1118979072,1118979087,SA
-1118979088,1118979199,A2
-1118979200,1118979239,SA
-1118979240,1118979263,A2
-1118979264,1118979295,SA
-1118979296,1118979327,LB
-1118979328,1118979343,SA
-1118979344,1118979455,A2
-1118979456,1118979479,LB
-1118979480,1118979495,SA
-1118979496,1118979503,LB
-1118979504,1118979535,SA
-1118979536,1118979575,LB
-1118979576,1118979583,SA
-1118979584,1118979711,A2
-1118979712,1118979775,LB
-1118979776,1118979839,A2
-1118979840,1118979855,NI
-1118979856,1118979895,A2
-1118979896,1118979903,NI
-1118979904,1118980607,A2
+1118976256,1118980607,US
1118980608,1118980863,TZ
1118980864,1118981119,CW
-1118981120,1118981631,A2
-1118981632,1118981687,EC
-1118981688,1118981695,A2
-1118981696,1118981735,SV
-1118981736,1118981743,EC
-1118981744,1118981751,SV
-1118981752,1118981759,NG
-1118981760,1118981783,A2
-1118981784,1118981791,NI
-1118981792,1118981823,NG
-1118981824,1118981831,EC
-1118981832,1118981855,NI
-1118981856,1118981863,EC
-1118981864,1118981871,NI
-1118981872,1118981879,A2
-1118981880,1118981887,NI
-1118981888,1118982175,A2
-1118982176,1118982183,NG
-1118982184,1118982191,A2
-1118982192,1118982199,KE
-1118982200,1118982207,US
-1118982208,1118982215,A2
-1118982216,1118982279,NG
-1118982280,1118982287,A2
-1118982288,1118982295,NG
-1118982296,1118982303,A2
-1118982304,1118982311,KE
-1118982312,1118982327,NG
-1118982328,1118982335,A2
-1118982336,1118982367,NG
-1118982368,1118982383,A2
-1118982384,1118982391,NG
-1118982392,1118982399,A2
-1118982400,1118982415,NG
-1118982416,1118982431,SV
-1118982432,1118982447,NG
-1118982448,1118982463,US
-1118982464,1118982479,NG
-1118982480,1118982487,A2
-1118982488,1118982551,NG
-1118982552,1118982559,US
-1118982560,1118982567,NG
-1118982568,1118982575,US
-1118982576,1118982583,NG
-1118982584,1118982591,CM
-1118982592,1118982599,NG
-1118982600,1118982607,A2
-1118982608,1118982647,NG
-1118982648,1118982783,A2
-1118982784,1118982911,NG
-1118982912,1118982927,A2
-1118982928,1118982935,NG
-1118982936,1118983079,A2
-1118983080,1118983087,NG
-1118983088,1118983199,A2
-1118983200,1118983279,SA
-1118983280,1118983423,A2
+1118981120,1118983423,US
1118983424,1118983679,NI
-1118983680,1118983743,TZ
-1118983744,1118983759,VE
-1118983760,1118983807,A2
-1118983808,1118983839,NG
-1118983840,1118983871,A2
-1118983872,1118983879,TZ
-1118983880,1118983919,US
-1118983920,1118984447,A2
+1118983680,1118984447,US
1118984448,1118984703,SA
-1118984704,1118984775,TZ
-1118984776,1118984783,IQ
-1118984784,1118984791,A2
-1118984792,1118984799,NG
-1118984800,1118984807,A2
-1118984808,1118984815,LB
-1118984816,1118984839,A2
-1118984840,1118984847,SA
-1118984848,1118984855,A2
-1118984856,1118984863,IQ
-1118984864,1118984887,TZ
-1118984888,1118984895,LB
-1118984896,1118984927,SA
-1118984928,1118984935,A2
-1118984936,1118984943,SA
-1118984944,1118984951,LB
-1118984952,1118984959,SA
-1118984960,1118985983,A2
-1118985984,1118986111,NG
-1118986112,1118986239,A2
+1118984704,1118986239,US
1118986240,1118987007,GB
-1118987008,1118987263,US
-1118987264,1118988543,A2
-1118988544,1118988575,NG
-1118988576,1118988615,A2
-1118988616,1118988623,GB
-1118988624,1118988735,A2
-1118988736,1118988751,GB
-1118988752,1118988799,A2
+1118987008,1118988799,US
1118988800,1118989055,VE
-1118989056,1118989183,KE
-1118989184,1118989311,GB
+1118989056,1118989311,US
1118989312,1118989823,KE
-1118989824,1118989951,A2
-1118989952,1118990079,FR
-1118990080,1118990271,A2
-1118990272,1118990303,US
-1118990304,1118990719,A2
-1118990720,1118990727,KE
-1118990728,1118992639,A2
-1118992640,1118992655,KE
-1118992656,1118992735,A2
-1118992736,1118992743,SA
-1118992744,1118992767,A2
-1118992768,1118992839,US
-1118992840,1118993151,A2
+1118989824,1118993151,US
1118993152,1118993407,GY
-1118993408,1118994175,A2
+1118993408,1118994175,US
1118994176,1118994431,LR
1118994432,1119109119,US
1119109120,1119111167,CA
-1119113216,1119144927,US
-1119144928,1119144935,AU
-1119144936,1119150079,US
-1119154176,1119166863,US
-1119166864,1119166871,HT
-1119166872,1119167079,US
-1119167080,1119167087,CA
-1119167088,1119167359,US
-1119167360,1119167367,CA
-1119167368,1119167407,US
-1119167408,1119167415,CA
-1119167416,1119168023,US
-1119168024,1119168031,CA
-1119168032,1119168351,US
-1119168352,1119168359,AF
-1119168360,1119168975,US
-1119168976,1119168983,CA
-1119168984,1119169359,US
-1119169360,1119169367,HT
-1119169368,1119171383,US
-1119171384,1119171391,CA
-1119171392,1119172199,US
-1119172200,1119172207,CA
-1119172208,1119172895,US
-1119172896,1119172903,MX
-1119172904,1119172911,US
-1119172912,1119172991,MX
-1119172992,1119173007,US
-1119173008,1119173095,MX
-1119173096,1119173119,US
-1119173120,1119173143,MX
-1119173144,1119173151,US
-1119173152,1119173207,MX
-1119173208,1119173215,US
-1119173216,1119173223,MX
-1119173224,1119173231,US
-1119173232,1119173263,MX
-1119173264,1119173279,US
+1119113216,1119173135,US
+1119173136,1119173143,MX
+1119173144,1119173167,US
+1119173168,1119173175,MX
+1119173176,1119173183,US
+1119173184,1119173199,MX
+1119173200,1119173247,US
+1119173248,1119173255,MX
+1119173256,1119173279,US
1119173280,1119173295,MX
-1119173296,1119173311,US
-1119173312,1119173343,MX
-1119173344,1119173351,US
-1119173352,1119173367,MX
-1119173368,1119173375,US
-1119173376,1119173399,MX
-1119173400,1119173407,US
-1119173408,1119173471,MX
-1119173472,1119173495,US
-1119173496,1119173527,MX
-1119173528,1119173535,US
-1119173536,1119173543,MX
-1119173544,1119173551,US
-1119173552,1119173575,MX
-1119173576,1119173591,US
-1119173592,1119173655,MX
-1119173656,1119173671,US
-1119173672,1119173679,MX
-1119173680,1119173703,US
-1119173704,1119173727,MX
-1119173728,1119173735,US
-1119173736,1119173751,MX
-1119173752,1119173767,US
-1119173768,1119173775,MX
-1119173776,1119173799,US
-1119173800,1119173815,MX
-1119173816,1119173831,US
-1119173832,1119173847,MX
-1119173848,1119173863,US
-1119173864,1119173871,MX
-1119173872,1119173935,US
-1119173936,1119173983,MX
-1119173984,1119173999,US
-1119174000,1119174007,MX
-1119174008,1119174023,US
-1119174024,1119174031,GT
-1119174032,1119174039,MX
-1119174040,1119174047,US
-1119174048,1119174119,MX
-1119174120,1119174127,US
-1119174128,1119174199,MX
-1119174200,1119174215,US
-1119174216,1119174247,GT
-1119174248,1119174287,US
-1119174288,1119174319,MX
-1119174320,1119174343,US
-1119174344,1119174351,GT
-1119174352,1119174359,MX
-1119174360,1119174399,US
-1119174400,1119174407,GT
+1119173296,1119173599,US
+1119173600,1119173607,MX
+1119173608,1119174063,US
+1119174064,1119174071,MX
+1119174072,1119174135,US
+1119174136,1119174143,MX
+1119174144,1119174183,US
+1119174184,1119174191,MX
+1119174192,1119174223,US
+1119174224,1119174231,GT
+1119174232,1119174407,US
1119174408,1119174415,MX
-1119174416,1119174423,US
-1119174424,1119174471,MX
-1119174472,1119174479,US
-1119174480,1119174511,MX
-1119174512,1119174535,US
-1119174536,1119174543,MX
-1119174544,1119211519,US
+1119174416,1119211519,US
1119211520,1119215615,CA
1119215616,1119289343,US
1119289344,1119354879,CA
1119354880,1119428607,US
-1119428608,1119432703,VI
+1119428608,1119431663,VI
+1119431664,1119432191,US
+1119432192,1119432703,VI
1119432704,1119436799,CA
1119436800,1119440895,US
1119440896,1119444991,CA
1119444992,1119469567,US
1119469568,1119477759,CA
-1119477760,1119486623,US
-1119486624,1119486631,AU
-1119486632,1119490495,US
-1119490496,1119490527,GI
-1119490528,1119502335,US
+1119477760,1119502335,US
1119502336,1119510527,CA
1119510528,1119558143,US
1119558144,1119558655,PR
-1119558656,1119571967,US
+1119558656,1119568383,US
+1119568384,1119568639,GB
+1119568640,1119568767,US
+1119568768,1119568895,GB
+1119568896,1119570175,US
+1119570176,1119570303,GB
+1119570304,1119571967,US
1119571968,1119576063,CA
1119576064,1119580159,US
1119580160,1119584255,CA
-1119584256,1120149503,US
-1120149504,1120149599,CA
-1120149600,1120149631,US
-1120149632,1120150031,CA
-1120150032,1120150039,TW
-1120150040,1120151695,CA
-1120151696,1120151711,TW
-1120151712,1120152159,CA
-1120152160,1120152191,US
-1120152192,1120153599,CA
-1120153600,1120272383,US
-1120272384,1120276991,CA
-1120276992,1120277503,US
-1120277504,1120280575,CA
-1120280576,1120280831,US
-1120280832,1120280855,CA
-1120280856,1120280863,US
-1120280864,1120281087,CA
-1120281088,1120281095,PG
-1120281096,1120281103,US
-1120281104,1120281111,CA
-1120281112,1120281119,US
-1120281120,1120281135,ZA
-1120281136,1120281151,US
-1120281152,1120281375,CA
-1120281376,1120281383,AR
-1120281384,1120281391,US
-1120281392,1120281599,CA
-1120281600,1120282367,US
+1119584256,1119612927,US
+1119617024,1120149503,US
+1120149504,1120153599,CA
+1120153600,1120274943,US
+1120274944,1120274991,CA
+1120274992,1120282367,US
1120282368,1120282623,SY
1120282624,1120282879,US
1120282880,1120283135,SY
-1120283136,1120283391,US
-1120283392,1120283647,CA
+1120283136,1120283647,US
1120283648,1120284671,EC
1120284672,1120286719,CA
-1120286720,1120289023,US
-1120289024,1120290303,CA
-1120290304,1120290559,US
-1120290560,1120290751,CA
-1120290752,1120290783,US
-1120290784,1120293119,CA
-1120293120,1120293631,US
-1120293632,1120299007,CA
+1120286720,1120294911,US
+1120294912,1120297215,CA
+1120297216,1120299007,US
1120299008,1120299263,PK
1120299264,1120299519,US
1120299520,1120300799,PK
-1120300800,1120301055,US
-1120301056,1120304895,CA
-1120304896,1120305151,US
-1120305152,1120306687,CA
+1120300800,1120306687,US
1120306688,1120306943,PH
1120306944,1120307199,US
1120307200,1120307967,EC
1120307968,1120308223,PH
-1120308224,1120309247,CA
-1120309248,1120309503,US
-1120309504,1120309759,CA
-1120309760,1120310015,US
+1120308224,1120310015,US
1120310016,1120310783,PH
-1120310784,1120311807,CA
-1120311808,1120312063,US
-1120312064,1120312447,PH
-1120312448,1120312575,CA
+1120310784,1120312063,US
+1120312064,1120312319,PH
+1120312320,1120312575,US
1120312576,1120312831,PH
-1120312832,1120313343,CA
-1120313344,1120313599,US
-1120313600,1120315135,CA
-1120315136,1120315391,US
-1120315392,1120321535,CA
-1120321536,1120346111,US
+1120312832,1120346111,US
1120346112,1120350207,CA
1120350208,1120370687,US
1120370688,1120371199,CA
-1120371200,1120371455,US
-1120371456,1120371511,CA
-1120371512,1120371551,US
-1120371552,1120371647,CA
-1120371648,1120371651,US
-1120371652,1120371711,CA
-1120371712,1120372223,US
+1120371200,1120372223,US
1120372224,1120372479,CA
1120372480,1120372735,US
-1120372736,1120373423,CA
-1120373424,1120373503,US
-1120373504,1120374047,CA
-1120374048,1120374063,US
-1120374064,1120374279,CA
-1120374280,1120374303,US
-1120374304,1120374399,CA
-1120374400,1120374415,US
-1120374416,1120374479,CA
-1120374480,1120374487,US
-1120374488,1120374511,CA
-1120374512,1120374527,US
-1120374528,1120375243,CA
-1120375244,1120375263,US
-1120375264,1120375423,CA
-1120375424,1120375551,US
-1120375552,1120376111,CA
-1120376112,1120376127,US
-1120376128,1120376223,CA
-1120376224,1120376239,US
-1120376240,1120376255,MX
-1120376256,1120376287,CA
-1120376288,1120376303,US
-1120376304,1120376327,CA
-1120376328,1120376383,US
-1120376384,1120376447,CA
-1120376448,1120376455,US
-1120376456,1120376494,CA
+1120372736,1120373247,CA
+1120373248,1120373503,US
+1120373504,1120374015,CA
+1120374016,1120374527,US
+1120374528,1120375039,CA
+1120375040,1120375551,US
+1120375552,1120376063,CA
+1120376064,1120376303,US
+1120376304,1120376319,CA
+1120376320,1120376479,US
+1120376480,1120376494,CA
1120376495,1120376559,US
-1120376560,1120376647,CA
-1120376648,1120376671,US
-1120376672,1120376679,MX
-1120376680,1120376687,CA
-1120376688,1120376695,US
+1120376560,1120376575,CA
+1120376576,1120376695,US
1120376696,1120376703,CA
-1120376704,1120376767,US
-1120376768,1120376815,CA
-1120376816,1120376831,US
-1120376832,1120377167,CA
-1120377168,1120377199,US
-1120377200,1120377215,CA
-1120377216,1120377247,US
-1120377248,1120377791,CA
-1120377792,1120377823,US
-1120377824,1120378367,CA
+1120376704,1120376831,US
+1120376832,1120377087,CA
+1120377088,1120377343,US
+1120377344,1120377599,CA
+1120377600,1120377855,US
+1120377856,1120378367,CA
1120378368,1120378623,US
-1120378624,1120378911,CA
-1120378912,1120378943,US
-1120378944,1120379039,CA
-1120379040,1120379071,PA
-1120379072,1120379167,CA
-1120379168,1120379183,US
-1120379184,1120380027,CA
-1120380028,1120380031,US
-1120380032,1120380095,CA
-1120380096,1120380127,US
-1120380128,1120380131,CA
-1120380132,1120380223,US
-1120380224,1120380239,CA
-1120380240,1120380263,US
-1120380264,1120380271,CA
-1120380272,1120380415,US
-1120380416,1120380447,CA
-1120380448,1120380453,US
+1120378624,1120378879,CA
+1120378880,1120379199,US
+1120379200,1120379263,CA
+1120379264,1120379295,US
+1120379296,1120379311,CA
+1120379312,1120379391,US
+1120379392,1120379903,CA
+1120379904,1120380453,US
1120380454,1120380454,CA
-1120380455,1120380479,US
-1120380480,1120380639,CA
-1120380640,1120380655,US
-1120380656,1120380659,CA
-1120380660,1120380663,US
-1120380664,1120381055,CA
-1120381056,1120381071,US
-1120381072,1120381087,PA
-1120381088,1120381103,CA
-1120381104,1120381119,US
-1120381120,1120382231,CA
-1120382232,1120382239,US
-1120382240,1120382271,CA
-1120382272,1120382367,US
-1120382368,1120382431,CA
-1120382432,1120382439,US
+1120380455,1120380671,US
+1120380672,1120380991,CA
+1120380992,1120381087,US
+1120381088,1120381095,CA
+1120381096,1120381183,US
+1120381184,1120382207,CA
+1120382208,1120382439,US
1120382440,1120382447,CA
1120382448,1120382463,US
1120382464,1120382975,CA
-1120382976,1120383263,US
-1120383264,1120383327,CA
-1120383328,1120383343,US
-1120383344,1120383367,CA
-1120383368,1120383423,US
-1120383424,1120383439,CA
-1120383440,1120383775,US
-1120383776,1120383951,CA
-1120383952,1120385135,US
-1120385136,1120385143,CA
-1120385144,1120385151,US
-1120385152,1120385183,GB
-1120385184,1120385535,CA
+1120382976,1120385279,US
+1120385280,1120385535,CA
1120385536,1120386559,US
1120386560,1120387071,CA
-1120387072,1120485503,US
-1120485504,1120485631,IN
-1120485632,1120486079,US
-1120486080,1120486143,IN
-1120486144,1120486399,US
-1120486400,1120486911,CA
-1120486912,1120487103,US
-1120487104,1120487167,CA
-1120487168,1120487199,US
-1120487200,1120487231,CA
-1120487232,1120487359,US
-1120487360,1120487391,CA
-1120487392,1120487423,US
+1120387072,1120486655,US
+1120486656,1120486911,CA
+1120486912,1120487423,US
1120487424,1120487679,CA
-1120487680,1120488191,US
-1120488192,1120488703,CA
-1120488704,1120488767,US
-1120488768,1120488799,VE
-1120488800,1120488831,IL
-1120488832,1120488863,CA
-1120488864,1120488895,US
-1120488896,1120488927,KN
-1120488928,1120489215,US
-1120489216,1120489343,CA
-1120489344,1120489471,US
+1120487680,1120489471,US
1120489472,1120489727,CA
-1120489728,1120489983,US
-1120489984,1120490239,CA
-1120490240,1120490751,US
-1120490752,1120490783,GB
-1120490784,1120491263,US
-1120491264,1120491775,CA
-1120491776,1120492415,US
-1120492416,1120492543,FR
+1120489728,1120491519,US
+1120491520,1120491775,CA
+1120491776,1120492543,US
1120492544,1120493055,CA
-1120493056,1120493087,IN
-1120493088,1120493183,US
-1120493184,1120493215,CA
-1120493216,1120493311,US
-1120493312,1120493567,CA
-1120493568,1120493823,US
+1120493056,1120493823,US
1120493824,1120494079,CA
1120494080,1120494335,US
1120494336,1120494591,CA
-1120494592,1120494975,US
-1120494976,1120495039,CA
-1120495040,1120495743,US
-1120495744,1120495871,SG
-1120495872,1120496255,US
-1120496256,1120496287,CA
-1120496288,1120496385,US
-1120496386,1120496638,CA
-1120496639,1120496639,US
-1120496640,1120497151,CA
-1120497152,1120497311,US
-1120497312,1120497343,IN
-1120497344,1120497375,US
-1120497376,1120497663,CA
-1120497664,1120497791,US
-1120497792,1120497919,AU
-1120497920,1120497983,US
-1120497984,1120498013,BE
-1120498014,1120498143,US
-1120498144,1120498303,CA
-1120498304,1120498943,US
+1120494592,1120496639,US
+1120496640,1120496895,CA
+1120496896,1120497407,US
+1120497408,1120497663,CA
+1120497664,1120498943,US
1120498944,1120499199,CA
-1120499200,1120499583,US
-1120499584,1120499615,FR
-1120499616,1120499647,IN
-1120499648,1120501247,US
+1120499200,1120501247,US
1120501248,1120501503,CA
1120501504,1120509951,US
1120509952,1120515583,SV
@@ -35206,20 +11677,9 @@
1120518144,1120534527,CA
1120534528,1120641023,US
1120641024,1120657407,CA
-1120657408,1120731391,US
-1120731392,1120731647,A2
-1120731648,1120736207,US
-1120736208,1120736223,PY
-1120736224,1120736991,US
-1120736992,1120737007,KN
-1120737008,1120737023,US
+1120657408,1120737023,US
1120737024,1120737279,BS
-1120737280,1120739951,US
-1120739952,1120739983,MX
-1120739984,1120739991,US
-1120739992,1120740079,MX
-1120740080,1120740095,US
-1120740096,1120740351,MX
+1120737280,1120740351,US
1120740352,1120741375,TT
1120741376,1120741631,US
1120741632,1120741887,MX
@@ -35227,401 +11687,102 @@
1120743424,1120743679,KN
1120743680,1120744447,US
1120744448,1120744703,KN
-1120744704,1120745471,US
-1120745472,1120745727,A2
-1120745728,1120846431,US
-1120846432,1120846463,CA
-1120846464,1120854015,US
+1120744704,1120792575,US
+1120793272,1120793279,US
+1120793856,1120794111,US
+1120795136,1120854015,US
1120854016,1120862207,CA
1120862208,1120875007,US
1120875008,1120875263,AS
-1120875264,1120876287,US
-1120876288,1120876543,A2
-1120876544,1120876567,JO
-1120876568,1120876575,A2
-1120876576,1120876591,JO
-1120876592,1120876599,A2
-1120876600,1120876607,JO
-1120876608,1120876615,A2
-1120876616,1120876623,US
-1120876624,1120876655,A2
-1120876656,1120876671,US
-1120876672,1120876799,A2
-1120876800,1120877567,US
-1120877568,1120877575,A2
-1120877576,1120877583,CA
-1120877584,1120877823,A2
-1120877824,1120878359,US
-1120878360,1120878591,A2
-1120878592,1120886783,US
+1120875264,1120886783,US
1120886784,1120886911,CA
1120886912,1120887039,NG
-1120887040,1120888127,CA
-1120888128,1120888159,US
-1120888160,1120894975,CA
+1120887040,1120894975,CA
1120894976,1120911359,US
1120911360,1120919551,CA
1120919552,1121005567,US
1121005568,1121009663,CA
-1121009664,1121009983,US
-1121009984,1121009999,CA
-1121010000,1121038335,US
+1121009664,1121038335,US
1121038336,1121042431,CA
1121042432,1121230847,US
-1121230848,1121232119,CA
-1121232120,1121232127,US
-1121232128,1121233455,CA
-1121233456,1121233463,US
-1121233464,1121233471,DE
-1121233472,1121233575,CA
-1121233576,1121233583,US
-1121233584,1121233599,DE
-1121233600,1121239039,CA
+1121230848,1121239039,CA
1121239040,1121247231,US
-1121247232,1121247239,CA
-1121247240,1121247255,AG
-1121247256,1121247263,CA
-1121247264,1121247271,CR
-1121247272,1121247279,CA
-1121247280,1121247287,GI
-1121247288,1121247295,CY
-1121247296,1121247487,CA
-1121247488,1121247495,VG
-1121247496,1121247511,CA
-1121247512,1121247519,VG
-1121247520,1121247527,BZ
-1121247528,1121247535,VG
-1121247536,1121247543,BZ
-1121247544,1121247551,CA
-1121247552,1121247559,VG
-1121247560,1121247567,CA
-1121247568,1121247583,MT
-1121247584,1121247591,CY
-1121247592,1121247615,CA
-1121247616,1121247631,BZ
-1121247632,1121247647,VG
-1121247648,1121247663,US
-1121247664,1121247695,BZ
-1121247696,1121247711,CA
-1121247712,1121247719,CW
-1121247720,1121247743,CA
-1121247744,1121247775,BZ
-1121247776,1121247823,CA
-1121247824,1121247855,AG
-1121247856,1121247967,CA
-1121247968,1121247999,CR
-1121248000,1121248007,AG
-1121248008,1121248015,BZ
-1121248016,1121248039,CA
-1121248040,1121248047,AG
-1121248048,1121248055,CA
-1121248056,1121248063,AW
-1121248064,1121248071,CA
-1121248072,1121248079,PH
-1121248080,1121248087,CA
-1121248088,1121248095,AW
-1121248096,1121248111,PH
-1121248112,1121248127,CW
-1121248128,1121248135,MT
-1121248136,1121248159,CA
-1121248160,1121248255,AG
-1121248256,1121248287,CA
-1121248288,1121248311,BZ
-1121248312,1121248319,MT
-1121248320,1121248335,CA
-1121248336,1121248343,VG
-1121248344,1121248351,BZ
-1121248352,1121248367,MT
-1121248368,1121248383,CA
-1121248384,1121248399,VG
-1121248400,1121248407,CA
-1121248408,1121248431,PA
-1121248432,1121248447,CA
-1121248448,1121248495,BZ
-1121248496,1121248783,CA
-1121248784,1121248799,VG
-1121248800,1121248863,CA
-1121248864,1121248879,VG
-1121248880,1121248911,CA
-1121248912,1121248919,BZ
-1121248920,1121248959,VG
-1121248960,1121248983,CA
-1121248984,1121248991,MT
-1121248992,1121249023,VG
-1121249024,1121249279,CA
-1121249280,1121249343,MT
-1121249344,1121249375,CA
-1121249376,1121249383,VG
-1121249384,1121249391,CA
-1121249392,1121249399,AW
-1121249400,1121249535,CA
-1121249536,1121249543,BZ
-1121249544,1121249599,CA
-1121249600,1121249615,IM
-1121249616,1121249631,VG
-1121249632,1121249743,CA
-1121249744,1121249751,CR
-1121249752,1121249759,CA
-1121249760,1121249775,BZ
-1121249776,1121250047,CA
-1121250048,1121250079,CR
-1121250080,1121250095,AG
-1121250096,1121250111,CA
-1121250112,1121250127,CR
-1121250128,1121250143,CA
-1121250144,1121250175,GB
-1121250176,1121250183,AW
-1121250184,1121250207,BZ
-1121250208,1121250287,CA
-1121250288,1121250303,AG
+1121247232,1121250303,CA
1121250304,1121250815,BZ
-1121250816,1121250831,CA
-1121250832,1121250839,BZ
-1121250840,1121250847,AG
-1121250848,1121250879,CA
-1121250880,1121250911,VG
-1121250912,1121250935,CA
-1121250936,1121250943,VG
-1121250944,1121251007,BZ
-1121251008,1121251015,VG
-1121251016,1121251039,CA
-1121251040,1121251047,CR
-1121251048,1121251071,CA
-1121251072,1121251079,PH
-1121251080,1121251087,CA
-1121251088,1121251095,CY
-1121251096,1121251103,CA
-1121251104,1121251119,BZ
-1121251120,1121251135,CA
-1121251136,1121251167,AG
-1121251168,1121251199,VG
-1121251200,1121251271,CA
-1121251272,1121251279,PH
-1121251280,1121251287,BZ
-1121251288,1121251311,IM
-1121251312,1121251327,BZ
-1121251328,1121251583,CA
-1121251584,1121251591,BZ
-1121251592,1121251599,MT
-1121251600,1121251607,CA
-1121251608,1121251615,BZ
-1121251616,1121251647,NL
-1121251648,1121251655,BZ
-1121251656,1121251663,CA
-1121251664,1121251671,MT
-1121251672,1121251687,CA
-1121251688,1121251711,BZ
-1121251712,1121251727,CA
-1121251728,1121251791,BZ
-1121251792,1121251807,VG
-1121251808,1121251831,CA
-1121251832,1121251839,VG
-1121251840,1121251847,BZ
-1121251848,1121251855,CA
-1121251856,1121251863,CW
-1121251864,1121251871,CA
-1121251872,1121251887,VG
-1121251888,1121251895,CY
-1121251896,1121251903,CA
-1121251904,1121251935,AG
-1121251936,1121251943,CY
-1121251944,1121251951,MT
-1121251952,1121251967,VG
-1121251968,1121251983,MT
-1121251984,1121251991,CA
-1121251992,1121251999,AG
-1121252000,1121252095,CA
-1121252096,1121252359,AG
-1121252360,1121252367,ZA
-1121252368,1121252375,GG
-1121252376,1121252383,MT
-1121252384,1121252391,CR
-1121252392,1121252399,GG
-1121252400,1121252415,MT
-1121252416,1121252479,GI
-1121252480,1121252607,CR
-1121252608,1121252671,CA
-1121252672,1121252735,BZ
-1121252736,1121252863,CA
+1121250816,1121252863,CA
1121252864,1121253119,BZ
-1121253120,1121253343,CA
-1121253344,1121253375,CY
-1121253376,1121253887,CA
+1121253120,1121253887,CA
1121253888,1121254143,BZ
1121254144,1121255423,CA
-1121255424,1121654863,US
-1121654864,1121654879,IN
-1121654880,1121654975,US
-1121654976,1121654991,FR
-1121654992,1121656063,US
-1121656064,1121656095,NZ
-1121656096,1121714975,US
-1121714976,1121714991,AU
-1121714992,1121714998,US
+1121255424,1121714998,US
1121714999,1121714999,KW
-1121715000,1121715935,US
-1121715936,1121715943,US
-1121715944,1121716095,US
-1121716096,1121716223,AI
-1121716224,1121878015,US
+1121715000,1121878015,US
1121878016,1121910783,CA
1121910784,1122074623,US
1122074624,1122087935,CA
1122087936,1122088191,US
1122088192,1122091007,CA
-1122091008,1122092623,US
-1122092624,1122092631,CA
-1122092632,1122092687,US
-1122092688,1122092695,GB
-1122092696,1122092719,US
-1122092720,1122092751,CA
-1122092752,1122092799,US
+1122091008,1122092799,US
1122092800,1122093055,CA
-1122093056,1122093807,US
-1122093808,1122093815,HK
-1122093816,1122101127,US
-1122101128,1122101135,SE
-1122101136,1122101375,US
-1122101376,1122101383,CO
-1122101384,1122101471,US
-1122101472,1122101479,VE
-1122101480,1122126745,US
-1122126746,1122126753,CH
-1122126754,1122140159,US
+1122093056,1122140159,US
1122140160,1122148351,CA
-1122148352,1122179343,US
-1122179344,1122179351,CA
-1122179352,1122197695,US
-1122197696,1122197727,GB
-1122197728,1122197735,US
-1122197736,1122197743,GB
-1122197744,1122197767,US
-1122197768,1122197775,FR
-1122197776,1122203135,US
+1122148352,1122203135,US
1122203136,1122203391,GB
-1122203392,1122269217,US
-1122269218,1122269218,US
-1122269219,1122411551,US
-1122411552,1122411583,AU
-1122411584,1122412497,US
+1122203392,1122412497,US
1122412498,1122412498,LB
1122412499,1122416383,US
1122416384,1122416639,DM
1122416640,1122417919,US
1122417920,1122418175,AU
-1122418176,1122451455,US
+1122418176,1122430975,US
+1122434048,1122451455,US
1122451456,1122455551,CO
1122455552,1122476031,US
1122476032,1122480127,PR
-1122480128,1122480159,US
-1122480160,1122480167,RU
-1122480168,1122480207,US
-1122480208,1122480223,GB
-1122480224,1122480231,PL
-1122480232,1122480415,US
-1122480416,1122480423,CL
-1122480424,1122480479,US
-1122480480,1122480487,CA
-1122480488,1122493055,US
-1122493056,1122493183,ES
-1122493184,1122493439,US
-1122493440,1122494207,PR
-1122494208,1122495231,US
-1122495232,1122495999,PR
-1122496000,1122497327,US
-1122497328,1122497343,BR
-1122497344,1122497375,US
-1122497376,1122497391,PR
-1122497392,1122497535,US
-1122497536,1122498047,PR
-1122498048,1122498559,US
-1122498560,1122499071,PR
-1122499072,1122499583,US
-1122499584,1122500095,PR
-1122500096,1122528603,US
-1122528604,1122528613,ES
-1122528614,1122533375,US
+1122480128,1122494975,US
+1122494976,1122495231,PR
+1122495232,1122497791,US
+1122497792,1122498047,PR
+1122498048,1122533375,US
1122533376,1122535423,GB
1122535424,1122538495,KR
1122538496,1122635775,US
1122635776,1122639871,CA
-1122639872,1122667071,US
-1122667072,1122667135,CH
-1122667136,1122759247,US
-1122759248,1122759263,CA
-1122759264,1123123199,US
+1122639872,1123123199,US
1123123200,1123127295,CA
1123127296,1123180543,US
1123180544,1123184639,CA
1123184640,1123336191,US
1123336192,1123352575,CA
-1123352576,1123534847,US
+1123352576,1123397631,US
+1123398656,1123399679,US
+1123401728,1123534847,US
1123534848,1123536895,AW
-1123536896,1123582239,US
-1123582240,1123582271,CY
-1123582272,1123584511,US
+1123536896,1123584511,US
1123584512,1123584767,ES
1123584768,1123589631,US
1123589632,1123589887,DE
1123589888,1123590143,US
1123590144,1123598335,VI
-1123598336,1123598495,CA
-1123598496,1123598559,US
-1123598560,1123598943,CA
-1123598944,1123598975,US
-1123598976,1123599551,CA
-1123599552,1123599631,US
-1123599632,1123599743,CA
-1123599744,1123599775,US
-1123599776,1123599983,CA
-1123599984,1123599999,US
-1123600000,1123600431,CA
-1123600432,1123600447,US
-1123600448,1123600479,CA
-1123600480,1123600495,US
-1123600496,1123601023,CA
-1123601024,1123601087,US
-1123601088,1123601343,CA
-1123601344,1123601375,US
-1123601376,1123602047,CA
-1123602048,1123602079,US
-1123602080,1123602303,CA
-1123602304,1123602367,US
-1123602368,1123602527,CA
-1123602528,1123602559,US
-1123602560,1123602751,CA
-1123602752,1123602815,US
-1123602816,1123603279,CA
-1123603280,1123603295,US
-1123603296,1123603375,CA
-1123603376,1123603391,US
-1123603392,1123603679,CA
-1123603680,1123603711,US
-1123603712,1123603967,CA
-1123603968,1123604031,US
-1123604032,1123604191,CA
-1123604192,1123604223,US
-1123604224,1123604639,CA
-1123604640,1123604671,US
-1123604672,1123604703,CA
-1123604704,1123604799,US
-1123604800,1123604863,CA
-1123604864,1123604895,US
-1123604896,1123605727,CA
-1123605728,1123605759,US
-1123605760,1123606527,CA
-1123606528,1123651583,US
+1123598336,1123606527,CA
+1123606528,1123635199,US
+1123635200,1123635455,AU
+1123635456,1123635639,GB
+1123635640,1123635640,RU
+1123635641,1123635670,GB
+1123635671,1123635671,RU
+1123635672,1123635711,GB
+1123635712,1123638527,US
+1123638528,1123638783,FR
+1123638784,1123651583,US
1123651584,1123651839,JM
1123651840,1123652095,BB
-1123652096,1123652351,AI
-1123652352,1123652863,JM
+1123652096,1123652863,JM
1123652864,1123653119,HT
1123653120,1123653375,BB
1123653376,1123653631,JM
1123653632,1123654655,KY
-1123654656,1123654791,JM
-1123654792,1123654807,AG
-1123654808,1123655679,JM
+1123654656,1123655679,JM
1123655680,1123663871,US
1123663872,1123667967,SV
1123667968,1123670015,PR
@@ -35635,739 +11796,131 @@
1123801088,1123801343,RU
1123801344,1123848191,US
1123848192,1123852287,CA
-1123852288,1123870063,US
-1123870064,1123870071,GB
-1123870072,1123870295,US
-1123870296,1123870303,HK
-1123870304,1123870343,US
-1123870344,1123870351,HK
-1123870352,1123950591,US
+1123852288,1123950591,US
1123950592,1123958783,CA
-1123958784,1124028511,US
-1124028512,1124028543,NC
-1124028544,1125064703,US
+1123958784,1125064703,US
1125064704,1125065215,GB
-1125065216,1125076115,US
-1125076116,1125076116,US
-1125076117,1125076167,US
-1125076168,1125076168,US
-1125076169,1125076339,US
-1125076340,1125076340,US
-1125076341,1125076348,US
-1125076349,1125076349,US
-1125076350,1125081087,US
-1125081088,1125081151,CL
-1125081152,1125081183,CA
-1125081184,1125081215,US
-1125081216,1125081279,GB
-1125081280,1125081855,US
+1125065216,1125081855,US
1125081856,1125082111,DE
1125082112,1125082367,US
1125082368,1125082623,DE
-1125082624,1125082655,US
-1125082656,1125082687,UY
-1125082688,1125082783,US
-1125082784,1125082799,UY
-1125082800,1125083007,US
-1125083008,1125083023,RU
-1125083024,1125083967,US
-1125083968,1125084031,UY
-1125084032,1125084063,US
-1125084064,1125084095,SE
-1125084096,1125085135,US
-1125085136,1125085151,DE
-1125085152,1125086079,US
-1125086080,1125086143,AU
-1125086144,1125087999,US
+1125082624,1125087999,US
1125088000,1125088255,CA
-1125088256,1125090303,US
-1125090304,1125090335,AU
-1125090336,1125090367,US
-1125090368,1125090431,ZA
-1125090432,1125090479,US
-1125090480,1125090495,DE
-1125090496,1125091087,US
-1125091088,1125091103,CA
-1125091104,1125091135,US
-1125091136,1125091167,SK
-1125091168,1125091183,US
-1125091184,1125091199,UY
-1125091200,1125091455,US
-1125091456,1125091519,ES
-1125091520,1125091583,US
-1125091584,1125091647,GB
-1125091648,1125091663,US
-1125091664,1125091679,HU
-1125091680,1125091711,SE
-1125091712,1125091743,CA
-1125091744,1125091759,US
-1125091760,1125091775,UY
-1125091776,1125091839,CA
-1125091840,1125093471,US
-1125093472,1125093503,IL
-1125093504,1125093567,SK
-1125093568,1125093631,AU
-1125093632,1125094463,US
-1125094464,1125094527,BR
-1125094528,1125094655,US
-1125094656,1125094671,GB
-1125094672,1125094783,US
-1125094784,1125094799,GB
-1125094800,1125094847,CA
-1125094848,1125094911,BR
-1125094912,1125095039,AU
-1125095040,1125095167,GB
-1125095168,1125095183,BE
-1125095184,1125095295,US
-1125095296,1125095327,AU
-1125095328,1125096959,US
-1125096960,1125097087,AR
-1125097088,1125097215,US
-1125097216,1125097279,AU
-1125097280,1125097343,BR
-1125097344,1125097407,US
-1125097408,1125097439,IL
-1125097440,1125097455,US
-1125097456,1125097471,GB
-1125097472,1125097791,US
-1125097792,1125097823,ES
-1125097824,1125097855,AU
-1125097856,1125097871,JO
-1125097872,1125097887,UY
-1125097888,1125097919,US
-1125097920,1125097983,IL
-1125097984,1125099775,US
+1125088256,1125099775,US
1125099776,1125100031,GB
-1125100032,1125103359,US
-1125103360,1125103487,US
-1125103488,1125103519,UY
-1125103520,1125106111,US
-1125106112,1125106175,GB
-1125106176,1125106207,AU
-1125106208,1125106223,TR
-1125106224,1125106239,FR
-1125106240,1125106255,UY
-1125106256,1125106271,FR
-1125106272,1125106303,US
-1125106304,1125106367,DE
-1125106368,1125110271,US
-1125110272,1125110335,GB
-1125110336,1125110399,US
-1125110400,1125110463,KW
-1125110464,1125110783,US
-1125110784,1125110911,MA
-1125110912,1125110927,UY
-1125110928,1125110943,TW
-1125110944,1125110959,CA
-1125110960,1125110975,US
-1125110976,1125111039,MA
-1125111040,1125111423,US
-1125111424,1125111439,BR
-1125111440,1125111455,US
-1125111456,1125111471,CA
-1125111472,1125111487,US
-1125111488,1125111519,GB
-1125111520,1125111535,IL
-1125111536,1125111743,US
-1125111744,1125111775,DE
-1125111776,1125112447,US
-1125112448,1125112511,PL
-1125112512,1125112767,US
-1125112768,1125112783,GB
-1125112784,1125112831,US
+1125100032,1125112831,US
1125112832,1125113087,MA
-1125113088,1125115647,US
-1125115648,1125115663,ES
-1125115664,1125115727,US
-1125115728,1125115743,ES
-1125115744,1125116159,US
-1125116160,1125116191,BR
-1125116192,1125116223,TR
-1125116224,1125116415,US
+1125113088,1125116415,US
1125116416,1125116671,MA
-1125116672,1125116959,US
-1125116960,1125116991,JP
-1125116992,1125117023,US
-1125117024,1125117055,BR
-1125117056,1125117151,US
-1125117152,1125117167,UY
-1125117168,1125117183,US
+1125116672,1125117183,US
1125117184,1125117439,MA
-1125117440,1125118495,US
-1125118496,1125118511,BR
-1125118512,1125118527,US
-1125118528,1125118559,UY
-1125118560,1125118591,TR
-1125118592,1125118655,US
-1125118656,1125118687,IL
-1125118688,1125118719,BR
-1125118720,1125119199,US
-1125119200,1125119231,TR
-1125119232,1125119743,US
-1125119744,1125119871,RO
-1125119872,1125119903,US
-1125119904,1125119935,IL
-1125119936,1125119967,JP
-1125119968,1125120255,US
+1125117440,1125120255,US
1125120256,1125120511,MA
-1125120512,1125120767,US
-1125120768,1125120799,UY
-1125120800,1125120831,IL
-1125120832,1125120863,US
-1125120864,1125120895,GB
-1125120896,1125121023,RO
-1125121024,1125238553,US
+1125120512,1125156304,US
+1125156305,1125156305,DE
+1125156306,1125238553,US
1125238554,1125238554,ES
1125238555,1125290241,US
1125290242,1125290242,AE
-1125290243,1125350145,US
-1125350146,1125350146,US
-1125350147,1125454111,US
-1125454112,1125454119,ES
-1125454120,1125454271,US
-1125454272,1125454279,DE
-1125454280,1125454303,US
-1125454304,1125454323,NO
-1125454324,1125454327,SG
-1125454328,1125454411,US
-1125454412,1125454527,NO
-1125454528,1125454591,US
-1125454592,1125454847,A2
-1125454848,1125455359,US
-1125455360,1125455363,CA
-1125455364,1125455395,US
-1125455396,1125455399,NO
-1125455400,1125455423,US
-1125455424,1125455427,ES
-1125455428,1125455431,GB
-1125455432,1125455435,US
-1125455436,1125455439,ES
-1125455440,1125455443,CA
-1125455444,1125455447,US
-1125455448,1125455451,NO
-1125455452,1125455475,US
-1125455476,1125455479,NO
-1125455480,1125455491,US
-1125455492,1125455495,GB
-1125455496,1125455499,CA
-1125455500,1125455507,US
-1125455508,1125455515,ES
-1125455516,1125455519,US
-1125455520,1125455523,ES
-1125455524,1125455527,US
-1125455528,1125455531,GB
-1125455532,1125455535,NO
-1125455536,1125455543,US
-1125455544,1125455547,ES
-1125455548,1125455551,VG
-1125455552,1125455555,ES
-1125455556,1125455559,US
-1125455560,1125455563,NZ
-1125455564,1125455567,ES
-1125455568,1125455571,US
-1125455572,1125455575,NO
-1125455576,1125455579,CW
-1125455580,1125456131,US
-1125456132,1125456135,NO
-1125456136,1125456139,A2
-1125456140,1125456163,US
-1125456164,1125456167,NO
-1125456168,1125456175,US
-1125456176,1125456179,NO
-1125456180,1125456191,US
-1125456192,1125456195,GB
-1125456196,1125456199,NO
-1125456200,1125456203,CW
-1125456204,1125456207,US
-1125456208,1125456211,SG
-1125456212,1125456231,US
-1125456232,1125456239,ES
-1125456240,1125456247,GB
-1125456248,1125456259,CW
-1125456260,1125456263,ES
-1125456264,1125474303,US
+1125290243,1125457919,US
+1125458944,1125459455,US
+1125462016,1125474303,US
1125474304,1125478399,CA
1125478400,1125481215,US
1125481216,1125481727,CA
1125481728,1125498879,US
-1125498880,1125508095,CA
+1125498880,1125501439,CA
+1125501440,1125501695,US
+1125501696,1125508095,CA
1125508096,1125508351,PA
1125508352,1125514239,CA
1125514240,1125514495,CY
1125514496,1125514751,US
1125514752,1125515263,CA
1125515264,1125531647,US
-1125531648,1125539903,CA
-1125539904,1125539935,US
-1125539936,1125540151,CA
-1125540152,1125540159,GB
-1125540160,1125540207,CA
-1125540208,1125540223,US
-1125540224,1125540479,CA
-1125540480,1125540495,US
-1125540496,1125540511,CA
-1125540512,1125540527,US
-1125540528,1125540543,IE
-1125540544,1125540575,CA
-1125540576,1125540591,US
-1125540592,1125540703,CA
-1125540704,1125540711,US
-1125540712,1125540927,CA
-1125540928,1125540959,US
-1125540960,1125541151,CA
-1125541152,1125541159,CN
-1125541160,1125541183,CA
-1125541184,1125541215,KY
-1125541216,1125541223,CA
-1125541224,1125541231,US
-1125541232,1125541247,CA
-1125541248,1125541279,US
-1125541280,1125541391,CA
-1125541392,1125541407,US
-1125541408,1125541487,CA
-1125541488,1125541503,US
-1125541504,1125541543,CA
-1125541544,1125541551,CN
-1125541552,1125541807,CA
-1125541808,1125541815,US
-1125541816,1125541951,CA
-1125541952,1125541959,BM
-1125541960,1125542143,CA
-1125542144,1125542159,US
-1125542160,1125542175,CA
-1125542176,1125542199,US
-1125542200,1125542239,CA
-1125542240,1125542255,FR
-1125542256,1125542303,CA
-1125542304,1125542319,US
-1125542320,1125542351,CA
-1125542352,1125542367,US
-1125542368,1125542383,CA
-1125542384,1125542399,US
-1125542400,1125542447,CA
-1125542448,1125542463,US
-1125542464,1125542503,CA
-1125542504,1125542543,US
-1125542544,1125542607,CA
-1125542608,1125542615,US
-1125542616,1125543199,CA
-1125543200,1125543215,US
-1125543216,1125543231,CA
-1125543232,1125543247,US
-1125543248,1125543687,CA
-1125543688,1125543695,US
-1125543696,1125543887,CA
+1125531648,1125543887,CA
1125543888,1125543903,US
-1125543904,1125543919,CA
-1125543920,1125545983,US
+1125543904,1125543935,CA
+1125543936,1125545983,US
1125548032,1125550079,CA
1125550080,1125550335,US
1125550336,1125552127,CA
1125552128,1125572607,US
1125572608,1125576703,CA
-1125576704,1125595695,US
-1125595696,1125595711,NG
-1125595712,1125596687,US
-1125596688,1125596695,VE
-1125596696,1125613567,US
+1125576704,1125593371,US
+1125593372,1125593375,GB
+1125593376,1125613567,US
1125613568,1125617663,CA
-1125617664,1125623295,US
-1125623296,1125623551,IN
-1125623552,1125623807,US
-1125623808,1125624063,US
-1125624064,1125626111,US
-1125626112,1125626367,US
-1125626368,1125628671,US
-1125628672,1125628703,NZ
-1125628704,1125641790,US
-1125641791,1125641792,CA
-1125641793,1125642185,US
-1125642186,1125642189,CA
-1125642190,1125642301,US
-1125642302,1125642303,IN
-1125642304,1125642674,US
-1125642675,1125642694,BO
-1125642695,1125643183,US
-1125643184,1125643187,BR
-1125643188,1125645449,US
-1125645450,1125645453,CA
-1125645454,1126009343,US
-1126009344,1126009599,AR
-1126009600,1126924287,US
+1125617664,1126924287,US
1126924288,1126928383,CA
-1126928384,1126928639,US
-1126928640,1126931455,US
-1126931456,1126931711,US
-1126931712,1126948927,US
-1126948928,1126949559,CA
-1126949560,1126949567,BZ
-1126949568,1126949583,CA
-1126949584,1126949591,LB
-1126949592,1126949607,CA
-1126949608,1126949615,CN
-1126949616,1126949631,LB
-1126949632,1126949695,CA
-1126949696,1126949759,PK
-1126949760,1126950191,CA
-1126950192,1126950199,ES
-1126950200,1126950207,HR
-1126950208,1126950415,CA
-1126950416,1126950423,PK
-1126950424,1126950463,CA
-1126950464,1126950495,IT
-1126950496,1126950599,CA
-1126950600,1126950607,CN
-1126950608,1126950623,CA
-1126950624,1126950655,FR
-1126950656,1126950783,CA
-1126950784,1126950847,MY
-1126950848,1126951775,CA
-1126951776,1126951783,PH
-1126951784,1126951967,CA
-1126951968,1126951975,KP
-1126951976,1126951999,CA
-1126952000,1126952031,AU
-1126952032,1126952039,LB
-1126952040,1126952263,CA
-1126952264,1126952271,PH
-1126952272,1126952559,CA
-1126952560,1126952567,TH
-1126952568,1126952895,CA
-1126952896,1126952959,CY
+1126928384,1126948863,US
+1126948864,1126952959,CA
1126952960,1127677951,US
1127677952,1127694335,CA
-1127694336,1127707467,US
-1127707468,1127707468,US
-1127707469,1127923711,US
+1127694336,1127923711,US
1127923712,1127931903,CA
-1127931904,1127976191,US
-1127976192,1127976223,IL
-1127976224,1127979111,US
-1127979112,1127979119,CA
-1127979120,1127986087,US
-1127986088,1127986095,RO
-1127986096,1127986935,US
-1127986936,1127986943,IN
-1127986944,1127988551,US
-1127988552,1127988559,AU
-1127988560,1127988687,US
-1127988688,1127988695,IL
-1127988696,1128529919,US
-1128529920,1128633999,CA
-1128634000,1128634015,US
-1128634016,1128641023,CA
+1127931904,1128529919,US
+1128529920,1128641023,CA
1128641024,1128641535,US
1128641536,1128792063,CA
-1128792064,1128818687,US
-1128818688,1128818719,CA
-1128818720,1130536959,US
-1130536960,1130539007,GU
-1130539008,1132582463,US
-1132582464,1132582479,CA
-1132582480,1132698119,US
-1132698120,1132698127,CA
-1132698128,1132713607,US
-1132713608,1132713615,CA
-1132713616,1132947431,US
-1132947432,1132947439,CA
-1132947440,1132954319,US
-1132954320,1132954335,IS
-1132954336,1133461247,US
+1128792064,1130537215,US
+1130537216,1130537471,GU
+1130537472,1130537727,US
+1130537728,1130537983,GU
+1130537984,1130538751,US
+1130538752,1130539007,GU
+1130539008,1133461247,US
1133461248,1133461503,CA
-1133461504,1133785375,US
-1133785376,1133785383,NE
-1133785384,1133785391,US
-1133785392,1133785407,GB
-1133785408,1133785471,US
-1133785472,1133785503,GB
-1133785504,1133785567,US
-1133785568,1133785599,BE
-1133785600,1134029311,US
-1134029312,1134029567,A2
-1134029568,1134444543,US
+1133461504,1133789695,US
+1133789696,1133789823,GB
+1133789824,1134444543,US
1134444544,1134448639,CA
-1134448640,1134494361,US
-1134494362,1134494362,US
-1134494363,1134494689,US
-1134494690,1134494690,US
-1134494691,1134496041,US
-1134496042,1134496042,US
-1134496043,1134499659,US
-1134499660,1134499660,US
-1134499661,1134502354,US
-1134502355,1134502355,US
-1134502356,1134505665,US
-1134505666,1134505666,US
-1134505667,1134505867,US
-1134505868,1134505868,US
-1134505869,1134505931,US
-1134505932,1134505934,US
-1134505935,1134506628,US
-1134506629,1134506629,US
-1134506630,1134506907,US
-1134506908,1134506910,US
-1134506911,1134508267,US
-1134508268,1134508268,US
-1134508269,1134545919,US
-1134545920,1134545951,BH
-1134545952,1134546175,US
-1134546176,1134546207,BH
-1134546208,1134546943,US
+1134448640,1134546943,US
1134546944,1134551039,CA
-1134551040,1134759726,US
-1134759727,1134759727,US
-1134759728,1136721919,US
+1134551040,1136523263,US
+1136523264,1136523775,CA
+1136523776,1136721919,US
1136721920,1136787455,CA
-1136787456,1137189135,US
-1137189136,1137189151,IE
-1137189152,1137189247,US
-1137189248,1137189255,GB
-1137189256,1137189263,US
-1137189264,1137189271,GB
-1137189272,1137195519,US
+1136787456,1137195519,US
1137195520,1137195775,JP
-1137195776,1137254815,US
-1137254816,1137254831,NZ
-1137254832,1137255167,US
-1137255168,1137255423,IT
-1137255424,1137256191,US
-1137256192,1137256203,IT
-1137256204,1137261119,US
-1137261120,1137261183,IT
-1137261184,1137278975,US
+1137195776,1137278975,US
1137278976,1137283071,CA
1137283072,1137287167,US
1137287168,1137295359,CA
-1137295360,1137340927,US
-1137340928,1137340959,PL
-1137340960,1137369087,US
-1137369088,1137369167,CA
-1137369168,1137369175,US
-1137369176,1137369183,CA
-1137369184,1137369223,US
-1137369224,1137369359,CA
-1137369360,1137369375,US
-1137369376,1137369519,CA
-1137369520,1137369535,US
-1137369536,1137370111,CA
+1137295360,1137369343,US
+1137369344,1137369599,CA
+1137369600,1137369727,US
+1137369728,1137369759,CA
+1137369760,1137369855,US
+1137369856,1137370111,CA
1137370112,1137376255,US
-1137376256,1137376335,CA
-1137376336,1137376351,US
-1137376352,1137376367,CA
-1137376368,1137376383,US
-1137376384,1137376543,CA
+1137376256,1137376543,CA
1137376544,1137376575,US
1137376576,1137376591,CA
1137376592,1137376623,US
1137376624,1137376671,CA
-1137376672,1137376703,US
-1137376704,1137376767,CA
-1137376768,1137377311,US
-1137377312,1137377327,DE
-1137377328,1137377471,US
-1137377472,1137377479,MX
-1137377480,1137379071,US
-1137379072,1137379087,MX
-1137379088,1137382431,US
-1137382432,1137382447,HK
-1137382448,1137383455,US
-1137383456,1137383471,DE
-1137383472,1137426431,US
+1137376672,1137376719,US
+1137376720,1137376743,CA
+1137376744,1137376751,US
+1137376752,1137376767,CA
+1137376768,1137426431,US
1137426432,1137442815,PR
1137442816,1137459199,CA
1137459200,1137491967,US
1137491968,1137508351,CA
1137508352,1137524735,US
-1137524736,1137525642,CA
-1137525643,1137525643,CA
-1137525644,1137541119,CA
+1137524736,1137541119,CA
1137541120,1137623039,US
1137623040,1137639423,PR
-1137639424,1137704967,US
-1137704968,1137705287,CA
-1137705288,1137705295,US
-1137705296,1137705383,CA
-1137705384,1137705391,NL
-1137705392,1137705447,CA
-1137705448,1137705455,US
-1137705456,1137705727,CA
-1137705728,1137705735,US
-1137705736,1137705767,CA
-1137705768,1137705791,US
-1137705792,1137705879,CA
-1137705880,1137705887,US
-1137705888,1137705903,CA
-1137705904,1137705911,US
-1137705912,1137705943,CA
-1137705944,1137705951,US
-1137705952,1137706399,CA
-1137706400,1137706431,US
-1137706432,1137707519,CA
-1137707520,1137707575,US
-1137707576,1137707583,NL
-1137707584,1137707623,CA
-1137707624,1137707647,US
-1137707648,1137707663,CA
-1137707664,1137707679,US
-1137707680,1137707695,CA
-1137707696,1137707719,NL
-1137707720,1137707727,CA
-1137707728,1137707743,US
-1137707744,1137707759,CA
-1137707760,1137707775,US
-1137707776,1137708031,CA
-1137708032,1137708151,US
-1137708152,1137708167,CA
-1137708168,1137708175,US
-1137708176,1137708183,CA
-1137708184,1137708207,US
-1137708208,1137708215,CA
-1137708216,1137708247,US
-1137708248,1137708255,CA
-1137708256,1137708279,US
-1137708280,1137708927,CA
-1137708928,1137708943,US
-1137708944,1137708951,CA
-1137708952,1137708959,US
-1137708960,1137709007,CA
-1137709008,1137709023,US
-1137709024,1137709351,CA
-1137709352,1137709359,US
-1137709360,1137709383,CA
-1137709384,1137709391,US
-1137709392,1137709399,CA
-1137709400,1137709407,US
-1137709408,1137709423,CA
-1137709424,1137709431,US
-1137709432,1137709439,CA
-1137709440,1137709447,US
-1137709448,1137709463,CA
-1137709464,1137709487,US
-1137709488,1137709831,CA
-1137709832,1137709839,US
-1137709840,1137709903,CA
-1137709904,1137709911,US
-1137709912,1137709959,CA
-1137709960,1137709967,NL
-1137709968,1137710847,CA
-1137710848,1137710959,US
-1137710960,1137710967,CA
-1137710968,1137711135,US
-1137711136,1137711167,CA
-1137711168,1137711175,US
-1137711176,1137711191,CA
-1137711192,1137711199,NL
-1137711200,1137711207,CA
-1137711208,1137711215,NL
-1137711216,1137711223,US
-1137711224,1137711231,CA
-1137711232,1137711239,NL
-1137711240,1137711247,US
-1137711248,1137711255,CA
-1137711256,1137711263,NL
-1137711264,1137711279,US
-1137711280,1137711287,NL
-1137711288,1137711295,US
-1137711296,1137711303,NL
-1137711304,1137711335,US
-1137711336,1137711367,CA
-1137711368,1137711375,US
-1137711376,1137711399,CA
-1137711400,1137711407,US
-1137711408,1137711439,CA
-1137711440,1137711455,US
-1137711456,1137711471,CA
-1137711472,1137711487,US
-1137711488,1137711503,CA
-1137711504,1137711511,US
-1137711512,1137711559,CA
-1137711560,1137711567,US
-1137711568,1137711575,CA
-1137711576,1137711639,US
-1137711640,1137711647,CA
-1137711648,1137711655,US
-1137711656,1137711687,CA
-1137711688,1137711703,US
-1137711704,1137711743,CA
-1137711744,1137711751,US
-1137711752,1137711759,CA
-1137711760,1137711767,US
-1137711768,1137711791,CA
-1137711792,1137711807,US
-1137711808,1137711863,CA
-1137711864,1137711871,US
-1137711872,1137712007,CA
-1137712008,1137712015,US
-1137712016,1137712055,CA
-1137712056,1137712119,US
-1137712120,1137712127,CA
-1137712128,1137712135,US
-1137712136,1137712151,CA
-1137712152,1137712183,US
-1137712184,1137712191,CA
-1137712192,1137712215,US
-1137712216,1137712223,CA
-1137712224,1137712239,US
-1137712240,1137712255,CA
-1137712256,1137712263,US
-1137712264,1137712279,CA
-1137712280,1137712287,US
-1137712288,1137712295,CA
-1137712296,1137712327,US
-1137712328,1137712343,CA
-1137712344,1137712359,US
-1137712360,1137712383,CA
-1137712384,1137712671,US
-1137712672,1137712687,CA
-1137712688,1137712711,US
-1137712712,1137712719,CA
-1137712720,1137712759,US
-1137712760,1137712767,CA
-1137712768,1137712919,US
-1137712920,1137712927,CA
-1137712928,1137712959,US
-1137712960,1137712975,CA
-1137712976,1137713015,US
-1137713016,1137713023,CA
-1137713024,1137713071,US
-1137713072,1137713087,CA
-1137713088,1137713103,US
-1137713104,1137713111,CA
-1137713112,1137713127,US
-1137713128,1137713135,CA
-1137713136,1137724495,US
-1137724496,1137724511,CA
-1137724512,1137724543,US
-1137724544,1137724575,CA
-1137724576,1137724607,US
-1137724608,1137724623,CA
-1137724624,1137724655,US
-1137724656,1137724687,CA
-1137724688,1137724703,US
-1137724704,1137724719,CA
-1137724720,1137724847,US
-1137724848,1137724863,CA
-1137724864,1137724911,US
-1137724912,1137724927,CA
-1137724928,1137726015,US
-1137726016,1137726023,CL
-1137726024,1137758207,US
+1137639424,1137704959,US
+1137704960,1137712383,CA
+1137712384,1137712639,US
+1137712640,1137713151,CA
+1137713152,1137758207,US
1137758208,1137758463,GB
-1137758464,1137758495,US
-1137758496,1137758527,AU
-1137758528,1137758671,US
-1137758672,1137758687,CH
-1137758688,1137795071,US
-1137795072,1137799167,A2
-1137799168,1137840127,US
+1137758464,1137840127,US
1137840128,1137840383,CA
-1137840384,1137842431,US
-1137842432,1137842559,IN
-1137842560,1137843711,US
-1137843712,1137843775,NO
-1137843776,1137843991,US
-1137843992,1137843999,IN
-1137844000,1137868799,US
+1137840384,1137868799,US
1137868800,1137872895,CA
1137872896,1137876991,US
1137876992,1137881087,CA
@@ -36378,28 +11931,10 @@
1137922048,1137926143,US
1137926144,1137926655,CA
1137926656,1137926911,AW
-1137926912,1137927519,CA
-1137927520,1137927527,AG
-1137927528,1137927679,CA
-1137927680,1137927807,CR
-1137927808,1137927935,CA
-1137927936,1137928063,VG
-1137928064,1137928127,BZ
-1137928128,1137928191,VG
-1137928192,1137928223,CA
-1137928224,1137928239,VG
-1137928240,1137928255,CA
-1137928256,1137928319,BZ
-1137928320,1137929727,CA
+1137926912,1137929727,CA
1137929728,1137929983,IE
-1137929984,1137930055,CA
-1137930056,1137930079,GB
-1137930080,1137930127,CA
-1137930128,1137930159,MT
-1137930160,1137934335,CA
-1137934336,1137946585,US
-1137946586,1137946593,NO
-1137946594,1137950719,US
+1137929984,1137934335,CA
+1137934336,1137950719,US
1137950720,1137952255,CA
1137952256,1137952767,US
1137952768,1137954303,CA
@@ -36407,396 +11942,57 @@
1137963008,1137967103,VI
1137967104,1137975295,CA
1137975296,1137983487,US
-1137983488,1137984329,CA
-1137984330,1137984330,CA
-1137984331,1137988095,CA
-1137988096,1137988607,CA
-1137988608,1137991679,CA
+1137983488,1137991679,CA
1137991680,1138049023,US
-1138049024,1138053631,CA
-1138053632,1138053887,US
-1138053888,1138061311,CA
+1138049024,1138061311,CA
1138061312,1138069503,US
1138069504,1138073599,JM
1138073600,1138163711,US
-1138163712,1138163967,CA
-1138163968,1138163975,MA
-1138163976,1138163991,CA
-1138163992,1138163999,HR
-1138164000,1138164007,PA
-1138164008,1138164015,FR
-1138164016,1138164127,CA
-1138164128,1138164135,FR
-1138164136,1138164143,CA
-1138164144,1138164151,FR
-1138164152,1138164183,CA
-1138164184,1138164191,PH
-1138164192,1138164207,CA
-1138164208,1138164215,US
-1138164216,1138164255,CA
-1138164256,1138164263,LB
-1138164264,1138164271,FR
-1138164272,1138164279,PH
-1138164280,1138164367,CA
-1138164368,1138164375,PH
-1138164376,1138164399,FR
-1138164400,1138164511,CA
-1138164512,1138164543,FR
-1138164544,1138164583,CA
-1138164584,1138164591,NZ
-1138164592,1138164655,CA
-1138164656,1138164663,MA
-1138164664,1138164831,CA
-1138164832,1138164839,PH
-1138164840,1138164863,CA
-1138164864,1138164991,US
-1138164992,1138165311,CA
-1138165312,1138165319,US
-1138165320,1138165431,CA
-1138165432,1138165439,LB
-1138165440,1138165807,CA
-1138165808,1138165815,FR
-1138165816,1138165823,CH
-1138165824,1138165895,CA
-1138165896,1138165903,LB
-1138165904,1138165935,CA
-1138165936,1138165943,IL
-1138165944,1138165959,CA
-1138165960,1138165975,FR
-1138165976,1138165983,US
-1138165984,1138166199,CA
-1138166200,1138166207,FR
-1138166208,1138166527,CA
-1138166528,1138166535,TR
-1138166536,1138166663,CA
-1138166664,1138166671,LB
-1138166672,1138166703,CA
-1138166704,1138166711,FR
-1138166712,1138166719,AE
-1138166720,1138166819,CA
-1138166820,1138166823,PA
-1138166824,1138166879,CA
-1138166880,1138166887,RU
-1138166888,1138166919,CA
-1138166920,1138166927,PH
-1138166928,1138166967,CA
-1138166968,1138166983,FR
-1138166984,1138166991,SE
-1138166992,1138166999,PH
-1138167000,1138167031,CA
-1138167032,1138167039,FR
-1138167040,1138167111,CA
-1138167112,1138167119,US
-1138167120,1138167159,CA
-1138167160,1138167167,PH
-1138167168,1138167175,CA
-1138167176,1138167183,PH
-1138167184,1138167199,CA
-1138167200,1138167207,UA
-1138167208,1138167215,AE
-1138167216,1138167239,CA
-1138167240,1138167247,FR
-1138167248,1138167543,CA
-1138167544,1138167551,PA
-1138167552,1138167807,CA
+1138163712,1138167807,CA
1138167808,1138175999,US
1138176000,1138180095,CA
1138180096,1138184191,US
1138184192,1138184447,SG
-1138184448,1138188287,US
+1138184448,1138184959,US
+1138184960,1138185215,AU
+1138185216,1138188287,US
1138188288,1138192383,PR
1138192384,1138196479,US
1138196480,1138204671,CA
1138204672,1138212863,US
1138212864,1138216959,CA
-1138216960,1138337167,US
-1138337168,1138337183,GB
-1138337184,1138337199,US
-1138337200,1138337207,SG
-1138337208,1138372607,US
-1138372608,1138376703,AS
-1138376704,1138419711,US
+1138216960,1138372863,US
+1138372864,1138373119,AS
+1138373120,1138373887,US
+1138373888,1138374655,AS
+1138374656,1138374911,US
+1138374912,1138375679,AS
+1138375680,1138419711,US
1138419712,1138419967,DE
1138419968,1138499583,US
1138499584,1138503679,CA
-1138503680,1138508031,US
-1138508032,1138508095,GB
-1138508096,1138508447,US
-1138508448,1138508479,IT
-1138508480,1138508511,US
-1138508512,1138508543,CR
-1138508544,1138508575,US
+1138503680,1138508575,US
1138508576,1138508591,IT
-1138508592,1138508735,US
-1138508736,1138508767,CR
-1138508768,1138509823,US
+1138508592,1138509823,US
1138509824,1138510847,IN
-1138510848,1138510879,CA
-1138510880,1138510911,US
-1138510912,1138510975,IN
-1138510976,1138511103,MY
-1138511104,1138511167,CH
-1138511168,1138512383,US
-1138512384,1138512415,ID
-1138512416,1138512639,US
-1138512640,1138512671,ID
-1138512672,1138512895,US
-1138512896,1138512927,ID
-1138512928,1138544895,US
+1138510848,1138544895,US
1138544896,1138545151,GB
1138545152,1138593791,US
1138593792,1138597887,CA
1138597888,1138600447,US
1138600448,1138600703,BE
-1138600704,1138615299,US
-1138615300,1138615323,IT
-1138615324,1138622207,US
-1138622208,1138622463,US
-1138622464,1138655245,US
-1138655246,1138655316,CA
-1138655317,1138655374,US
-1138655375,1138655382,CA
-1138655383,1138655446,US
-1138655447,1138655454,CA
-1138655455,1138655458,US
-1138655459,1138655486,CA
-1138655487,1138655503,US
-1138655504,1138655521,MX
-1138655522,1138655581,US
-1138655582,1138655589,MX
-1138655590,1138655601,US
-1138655602,1138655609,EG
-1138655610,1138655617,MX
-1138655618,1138655621,US
-1138655622,1138655629,MX
-1138655630,1138655637,EG
-1138655638,1138655695,US
-1138655696,1138655703,MX
-1138655704,1138655715,US
-1138655716,1138655723,GB
-1138655724,1138655731,US
-1138655732,1138655739,VE
-1138655740,1138655817,US
-1138655818,1138655825,MX
-1138655826,1138655899,US
-1138655900,1138655911,MX
-1138655912,1138656025,US
-1138656026,1138656033,MX
-1138656034,1138656069,US
-1138656070,1138656077,EG
-1138656078,1138656093,MX
-1138656094,1138656137,US
-1138656138,1138656145,EG
-1138656146,1138656190,US
-1138656191,1138656198,CH
-1138656199,1138656222,US
-1138656223,1138656230,EG
-1138656231,1138656388,US
-1138656389,1138656396,ID
-1138656397,1138656605,US
-1138656606,1138656613,EG
-1138656614,1138656745,US
-1138656746,1138656753,AE
-1138656754,1138656761,EG
-1138656762,1138656857,US
-1138656858,1138656865,EG
-1138656866,1138656873,LK
-1138656874,1138656909,US
-1138656910,1138656917,IN
-1138656918,1138656981,US
-1138656982,1138656989,EG
-1138656990,1138656997,US
-1138656998,1138657005,EG
-1138657006,1138657051,US
-1138657052,1138657059,EG
-1138657060,1138657093,US
-1138657094,1138657101,EG
-1138657102,1138657109,IN
-1138657110,1138657110,US
-1138657111,1138657118,SE
-1138657119,1138657123,US
-1138657124,1138657131,EG
-1138657132,1138657173,US
-1138657174,1138657181,EG
-1138657182,1138657206,US
-1138657207,1138657214,EG
-1138657215,1138657222,IN
-1138657223,1138657235,US
-1138657236,1138657244,MA
-1138657245,1138657294,US
-1138657295,1138657302,EG
-1138657303,1138657324,US
-1138657325,1138657332,LK
-1138657333,1138657401,US
-1138657402,1138657409,IN
-1138657410,1138657433,US
-1138657434,1138657441,IN
-1138657442,1138657569,US
-1138657570,1138657577,LK
-1138657578,1138657605,US
-1138657606,1138657613,LK
-1138657614,1138657662,US
-1138657663,1138657670,EG
-1138657671,1138657748,US
-1138657749,1138657780,GB
-1138657781,1138658131,US
-1138658132,1138658163,EG
-1138658164,1138658171,US
-1138658172,1138658179,EG
-1138658180,1138658270,US
-1138658271,1138658278,IN
-1138658279,1138658431,US
-1138658432,1138658496,PK
-1138658497,1138659081,US
-1138659082,1138659207,ES
-1138659208,1138659307,US
-1138659308,1138659315,EG
-1138659316,1138659425,US
-1138659426,1138659433,VE
-1138659434,1138659465,US
-1138659466,1138659497,GB
-1138659498,1138659554,US
-1138659555,1138659562,EG
-1138659563,1138659570,GR
-1138659571,1138659593,US
-1138659594,1138659609,LK
-1138659610,1138659611,US
-1138659612,1138659619,EG
-1138659620,1138659625,US
-1138659626,1138659633,EG
-1138659634,1138659642,US
-1138659643,1138659650,ID
-1138659651,1138659697,US
-1138659698,1138659705,LK
-1138659706,1138659723,US
-1138659724,1138659731,ID
-1138659732,1138659753,US
-1138659754,1138659761,IN
-1138659762,1138659781,US
-1138659782,1138659789,NZ
-1138659790,1138659797,ID
-1138659798,1138659805,US
-1138659806,1138659813,ID
-1138659814,1138659821,LK
-1138659822,1138659823,US
-1138659824,1138659831,ID
-1138659832,1138659857,US
-1138659858,1138659889,GB
-1138659890,1138659922,US
-1138659923,1138659930,LK
-1138659931,1138660035,US
-1138660036,1138660043,IN
-1138660044,1138660050,US
-1138660051,1138660058,PH
-1138660059,1138660177,US
-1138660178,1138660185,ID
-1138660186,1138660193,US
-1138660194,1138660201,EG
-1138660202,1138660277,US
-1138660278,1138660285,EG
-1138660286,1138660311,US
-1138660312,1138660333,GB
-1138660334,1138660491,US
-1138660492,1138660499,EG
-1138660500,1138660539,US
-1138660540,1138660547,VE
-1138660548,1138660625,US
-1138660626,1138660633,EG
-1138660634,1138660645,US
-1138660646,1138660653,VE
-1138660654,1138660665,US
-1138660666,1138660673,IN
-1138660674,1138660694,US
-1138660695,1138660726,GB
-1138660727,1138660734,EG
-1138660735,1138660805,US
-1138660806,1138660821,EG
-1138660822,1138660873,US
-1138660874,1138660881,EG
-1138660882,1138660982,US
-1138660983,1138660990,EG
-1138660991,1138661002,US
-1138661003,1138661010,LK
-1138661011,1138661055,US
-1138661056,1138661063,EG
-1138661064,1138661129,US
-1138661130,1138661137,AE
-1138661138,1138661189,US
-1138661190,1138661193,LK
-1138661194,1138661195,US
-1138661196,1138661197,LK
-1138661198,1138661385,US
-1138661386,1138661393,EG
-1138661394,1138661457,US
-1138661458,1138661465,LK
-1138661466,1138661473,US
-1138661474,1138661481,AE
-1138661482,1138661489,US
-1138661490,1138661497,EG
-1138661498,1138661521,US
-1138661522,1138661529,EG
-1138661530,1138661607,US
-1138661608,1138661615,LK
-1138661616,1138661669,US
-1138661670,1138661677,IN
-1138661678,1138661729,US
-1138661730,1138661737,ID
-1138661738,1138661769,US
-1138661770,1138661777,MA
-1138661778,1138661785,US
-1138661786,1138661801,EG
-1138661802,1138661821,US
-1138661822,1138661829,MA
-1138661830,1138661969,US
-1138661970,1138661977,EG
-1138661978,1138662009,US
-1138662010,1138662017,IN
-1138662018,1138662273,US
-1138662274,1138662309,EG
-1138662310,1138662333,US
-1138662334,1138662349,EG
-1138662350,1138662369,US
-1138662370,1138662395,GB
-1138662396,1138662481,US
-1138662482,1138662497,EG
-1138662498,1138662505,LK
-1138662506,1138662537,US
-1138662538,1138662545,EG
-1138662546,1138662575,US
-1138662576,1138662607,MX
-1138662608,1138662623,US
-1138662624,1138662639,GB
-1138662640,1138662640,US
-1138662641,1138662648,EG
-1138662649,1138662942,US
-1138662943,1138663006,CN
-1138663007,1138663021,US
-1138663022,1138663166,GB
-1138663167,1138712575,US
-1138712576,1138714071,CA
-1138714072,1138714079,US
-1138714080,1138714087,ES
-1138714088,1138716671,CA
+1138600704,1138712575,US
+1138712576,1138716671,CA
1138716672,1138720767,US
1138720768,1138728959,CA
1138728960,1138774015,US
1138774016,1138778111,CA
-1138778112,1138780159,US
-1138780160,1138780415,CA
-1138780416,1138786303,US
+1138778112,1138780671,US
+1138780672,1138780679,CA
+1138780680,1138786303,US
1138786304,1138819071,PR
1138819072,1138851839,CA
-1138851840,1138851847,US
-1138851848,1138851855,IN
-1138851856,1138865578,US
-1138865579,1138865586,IN
-1138865587,1138874252,US
-1138874253,1138874264,UY
-1138874265,1138882331,US
-1138882332,1138882339,GB
-1138882340,1138882445,US
-1138882446,1138882453,GB
-1138882454,1138917375,US
+1138851840,1138917375,US
1138917376,1138937855,CA
1138937856,1138941951,US
1138941952,1138950143,CA
@@ -36804,124 +12000,64 @@
1139146752,1139154943,GT
1139154944,1139167231,JM
1139167232,1139167743,US
-1139167744,1139168895,PR
-1139168896,1139169279,US
-1139169280,1139170047,PR
-1139170048,1139170303,US
-1139170304,1139170559,PR
-1139170560,1139170815,US
-1139170816,1139171327,PR
-1139171328,1139175423,GT
-1139175424,1139179519,US
+1139167744,1139168767,PR
+1139168768,1139169279,US
+1139169280,1139170303,PR
+1139170304,1139171071,US
+1139171072,1139171327,PR
+1139171328,1139175679,US
+1139175680,1139175807,PR
+1139175808,1139179519,US
1139179520,1139195903,CA
1139195904,1139216383,US
1139216384,1139220479,CA
1139220480,1139265535,US
1139265536,1139269631,CA
-1139269632,1139274495,US
-1139274496,1139274751,US
-1139274752,1145054991,US
-1145054992,1145055007,FI
-1145055008,1145089791,US
+1139269632,1144796671,US
+1144796672,1144796799,CA
+1144796800,1144796927,US
+1144796928,1144797055,CA
+1144797056,1145089791,US
1145089792,1145090047,JP
-1145090048,1145188351,US
+1145090048,1145141247,US
+1145142784,1145158143,US
+1145158144,1145158655,CA
+1145158656,1145188351,US
1145188352,1145192447,CA
1145192448,1145242111,US
1145242112,1145242367,NO
-1145242368,1145243135,US
-1145243136,1145243391,EU
-1145243392,1145243647,US
-1145243648,1145244159,EU
+1145242368,1145244159,US
1145244160,1145244415,NO
1145244416,1145249791,US
1145249792,1145257983,CA
-1145257984,1145259007,US
-1145259008,1145259071,IN
-1145259072,1145259247,US
+1145257984,1145259247,US
1145259248,1145259251,AE
-1145259252,1145259263,US
-1145259264,1145259327,IN
-1145259328,1145260031,US
-1145260032,1145260095,IN
-1145260096,1145260623,US
-1145260624,1145260631,IN
-1145260632,1145261055,US
-1145261056,1145261119,IN
-1145261120,1145261311,US
-1145261312,1145261375,IN
-1145261376,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,1145333031,US
-1145333032,1145333039,IT
-1145333040,1145333191,US
-1145333192,1145333199,CN
-1145333200,1145333215,US
-1145333216,1145333223,CN
-1145333224,1145333879,US
-1145333880,1145333887,CN
-1145333888,1145334151,US
-1145334152,1145334167,CN
-1145334168,1145334175,US
-1145334176,1145334223,CN
-1145334224,1145334231,US
-1145334232,1145334239,CN
-1145334240,1145335103,US
-1145335104,1145335135,NL
-1145335136,1145335167,US
-1145335168,1145335183,CN
-1145335184,1145335215,US
-1145335216,1145335223,CN
-1145335224,1145376767,US
+1145311232,1145376767,US
1145376768,1145380863,CA
1145380864,1145405439,US
1145405440,1145413631,CA
1145413632,1145421823,US
1145421824,1145430015,CA
1145430016,1145475071,US
-1145475072,1145476887,CA
-1145476888,1145476895,US
-1145476896,1145479167,CA
-1145479168,1145484031,US
-1145484032,1145484063,VG
-1145484064,1145503743,US
+1145475072,1145479167,CA
+1145479168,1145503743,US
1145503744,1145520127,CA
1145520128,1145552895,US
1145552896,1145556991,CA
-1145556992,1145567839,US
-1145567840,1145567871,CN
-1145567872,1150046207,US
-1150046208,1150050303,JP
-1150050304,1150203871,US
-1150203872,1150203887,CA
-1150203888,1150287871,US
+1145556992,1150043135,US
+1150043136,1150044159,VA
+1150044160,1150287871,US
1150287872,1150812159,CA
1150812160,1151889407,US
-1151889408,1151889423,CA
-1151889424,1151889431,US
-1151889432,1151889447,CA
-1151889448,1151889455,FR
-1151889456,1151889471,CA
-1151889472,1151889487,RU
-1151889488,1151889495,CA
-1151889496,1151889535,MA
-1151889536,1151889599,CN
-1151889600,1151889615,CA
-1151889616,1151889631,MA
-1151889632,1151889791,CA
-1151889792,1151889823,MA
-1151889824,1151889839,CA
-1151889840,1151889847,PH
-1151889848,1151890007,CA
-1151890008,1151890015,GB
-1151890016,1151890079,CA
-1151890080,1151890087,GB
-1151890088,1151890095,CA
-1151890096,1151890111,GB
-1151890112,1151890119,CA
-1151890120,1151890127,GB
-1151890128,1151890143,CA
-1151890144,1151890151,SC
-1151890152,1151897599,CA
+1151889408,1151897599,CA
1151897600,1151943680,US
1151943681,1151943808,GB
1151943809,1151943871,NL
@@ -36934,118 +12070,53 @@
1151944112,1151944127,US
1151944128,1151944159,AU
1151944160,1151944175,FR
-1151944176,1151945727,US
+1151944176,1151944575,US
+1151944576,1151944703,ES
+1151944704,1151945727,US
1151945728,1151945759,RU
1151945760,1151945791,IR
1151945792,1151945823,IT
-1151945824,1151945855,US
+1151945824,1151945855,AU
1151945856,1151945887,SE
1151945888,1151945919,US
1151945920,1151945935,JP
1151945936,1151946239,US
1151946240,1151946751,GB
-1151946752,1151978927,US
-1151978928,1151978935,IE
-1151978936,1151978943,US
-1151978944,1151978975,IR
-1151978976,1152073727,US
+1151946752,1152073727,US
1152073728,1152077823,CA
-1152077824,1152082175,US
-1152082176,1152082303,IN
-1152082304,1152083455,US
-1152083456,1152083967,CN
-1152083968,1152084479,US
-1152084480,1152084991,IN
-1152084992,1152116479,US
+1152077824,1152083455,US
+1152083456,1152083711,MO
+1152083712,1152116479,US
1152116480,1152116735,CA
-1152116736,1152581631,US
+1152116736,1152117759,US
+1152117760,1152117952,IL
+1152117953,1152117953,CA
+1152117954,1152118015,IL
+1152118016,1152121855,US
+1152121856,1152122111,ID
+1152122112,1152581631,US
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,1156129487,US
-1156129488,1156129495,JP
-1156129496,1156129983,US
-1156129984,1156129999,CY
-1156130000,1156263935,US
+1156079616,1156263935,US
1156263936,1156265983,CA
1156265984,1156296703,US
1156296704,1156300799,CA
-1156300800,1157670431,US
-1157670432,1157670463,CA
-1157670464,1157713663,US
-1157713664,1157713791,CA
-1157713792,1157753087,US
+1156300800,1157753087,US
1157753088,1157753343,GB
-1157753344,1157755247,US
-1157755248,1157755263,GR
-1157755264,1157758207,US
+1157753344,1157758207,US
1157758208,1157758463,RU
-1157758464,1157910527,US
-1157910528,1157910529,CA
-1157910530,1157910533,MY
-1157910534,1157910537,CA
-1157910538,1157910561,US
-1157910562,1157910601,CA
-1157910602,1157910609,US
-1157910610,1157910721,CA
-1157910722,1157910745,US
-1157910746,1157910777,CA
-1157910778,1157910782,CR
-1157910783,1157910848,CA
-1157910849,1157910864,US
-1157910865,1157910911,CA
-1157910912,1157911039,US
-1157911040,1157911295,CA
-1157911296,1157911326,US
-1157911327,1157911355,CA
-1157911356,1157911386,US
-1157911387,1157911391,CA
-1157911392,1157911423,US
-1157911424,1157911551,CA
-1157911552,1157912063,US
-1157912064,1157912319,CA
-1157912320,1157912447,US
-1157912448,1157912448,CA
-1157912449,1157912456,LB
-1157912457,1157912464,ES
-1157912465,1157912472,DE
-1157912473,1157912480,ES
-1157912481,1157912488,LU
-1157912489,1157912575,US
-1157912576,1157912577,CA
-1157912578,1157912606,US
-1157912607,1157912833,CA
-1157912834,1157912848,MY
-1157912849,1157912959,CA
-1157912960,1157913023,US
-1157913024,1157913154,CA
-1157913155,1157913168,MY
-1157913169,1157914194,CA
-1157914195,1157914202,IN
-1157914203,1157914234,CA
-1157914235,1157914242,IN
-1157914243,1157914258,CA
-1157914259,1157914266,IN
-1157914267,1157914282,US
-1157914283,1157914306,CA
-1157914307,1157914314,MY
-1157914315,1157914322,SA
-1157914323,1157914330,TR
-1157914331,1157914339,US
-1157914340,1157914347,CA
-1157914348,1157914355,GB
-1157914356,1157914623,CA
-1157914624,1157931007,US
+1157758464,1157912703,US
+1157912704,1157912831,CA
+1157912832,1157913215,US
+1157913216,1157913279,CA
+1157913280,1157931007,US
1157931008,1157935103,BS
1157935104,1157943295,US
1157943296,1157947391,CA
-1157947392,1157950919,US
-1157950920,1157950975,HK
-1157950976,1158027263,US
+1157947392,1158027263,US
1158027264,1158027519,CA
1158027520,1158028287,US
1158028288,1158028543,CA
@@ -37055,656 +12126,148 @@
1158148096,1158152191,CA
1158152192,1158234111,US
1158234112,1158250495,CA
-1158250496,1158294719,US
-1158294720,1158294751,GB
-1158294752,1158295807,US
+1158250496,1158295807,US
1158295808,1158296063,GB
1158296064,1158316031,US
-1158316032,1158318847,CA
-1158318848,1158319103,CA
-1158319104,1158323695,CA
-1158323696,1158323711,SY
-1158323712,1158324223,CA
+1158316032,1158324223,CA
1158324224,1158340607,US
-1158340608,1158343199,CA
-1158343200,1158343231,US
-1158343232,1158344703,CA
+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
-1158505654,1158505727,AU
-1158505728,1158506793,US
-1158506794,1158506809,IN
-1158506810,1158525184,US
-1158525185,1158525320,BE
-1158525321,1158525741,US
-1158525742,1158525750,BZ
-1158525751,1158525776,US
-1158525777,1158525785,FR
-1158525786,1158525821,US
-1158525822,1158525830,IT
-1158525831,1158526297,US
-1158526298,1158526306,IT
-1158526307,1158526335,US
-1158526336,1158526344,FR
-1158526345,1158526346,US
-1158526347,1158526355,PE
-1158526356,1158526357,US
-1158526358,1158526366,CA
-1158526367,1158526368,US
-1158526369,1158526377,CH
-1158526378,1158526930,US
-1158526931,1158526963,AS
-1158526964,1158538864,US
-1158538865,1158538872,WS
-1158538873,1158714111,US
-1158714112,1158714367,US
-1158714368,1158715007,US
-1158715008,1158715039,IE
-1158715040,1158716415,US
-1158716416,1158716423,IN
-1158716424,1158716543,US
-1158716544,1158716551,IE
-1158716552,1158716671,US
-1158716672,1158716703,IE
-1158716704,1158726731,US
-1158726732,1158726739,CA
-1158726740,1158732876,US
-1158732877,1158732884,GB
-1158732885,1158736241,US
-1158736242,1158736249,IN
-1158736250,1158774783,US
-1158774784,1158776947,CA
-1158776948,1158776951,US
-1158776952,1158784319,CA
-1158784320,1158784327,US
-1158784328,1158784367,CA
-1158784368,1158784375,US
-1158784376,1158784703,CA
-1158784704,1158784767,US
-1158784768,1158791167,CA
+1158381568,1158414591,US
+1158416336,1158416351,US
+1158416384,1158418431,US
+1158420480,1158439167,US
+1158439296,1158439423,US
+1158439680,1158439935,US
+1158440448,1158440703,US
+1158440960,1158724607,US
+1158724608,1158724863,NL
+1158724864,1158774783,US
+1158774784,1158791167,CA
1158791168,1158794239,BM
1158794240,1158794495,US
1158794496,1158799359,BM
1158799360,1158807551,CA
1158807552,1158995967,US
-1158995968,1158997879,CA
-1158997880,1158997887,US
-1158997888,1158997919,CA
-1158997920,1158997935,GB
-1158997936,1158999663,CA
-1158999664,1158999671,US
-1158999672,1158999863,CA
-1158999864,1158999871,US
-1158999872,1159004159,CA
+1158995968,1159004159,CA
1159004160,1159213055,US
1159213056,1159217151,CA
1159217152,1159249919,US
1159249920,1159254015,PR
-1159254016,1159262471,US
-1159262472,1159262475,TZ
-1159262476,1159262479,SA
-1159262480,1159262483,US
-1159262484,1159262487,TZ
-1159262488,1159262491,SA
-1159262492,1159262727,US
-1159262728,1159262731,DE
-1159262732,1159262735,RU
-1159262736,1159262739,US
-1159262740,1159262743,DE
-1159262744,1159262751,RU
-1159262752,1159262755,NL
-1159262756,1159262967,US
-1159262968,1159262975,RU
-1159262976,1159263279,US
-1159263280,1159263295,DE
-1159263296,1159263375,US
-1159263376,1159263391,ES
-1159263392,1159263503,US
-1159263504,1159263519,CZ
-1159263520,1159263599,US
-1159263600,1159263615,RU
-1159263616,1159263807,US
-1159263808,1159263823,EG
-1159263824,1159263967,US
-1159263968,1159263983,NG
-1159263984,1159264031,US
-1159264032,1159264047,ZA
-1159264048,1159264207,US
-1159264208,1159264223,AE
-1159264224,1159264351,US
-1159264352,1159264367,MY
-1159264368,1159264383,US
-1159264384,1159264399,TW
-1159264400,1159264623,US
-1159264624,1159264639,JP
-1159264640,1159264655,US
-1159264656,1159264671,AU
-1159264672,1159264767,US
-1159264768,1159264783,AR
-1159264784,1159264959,US
-1159264960,1159264975,BR
-1159264976,1159269119,US
+1159254016,1159269119,US
1159269120,1159269375,AR
1159269376,1159274495,US
1159274496,1159274751,GB
-1159274752,1159276799,US
-1159276800,1159277055,A2
-1159277056,1159281727,US
-1159281728,1159281743,HK
-1159281744,1159281919,US
+1159274752,1159281919,US
1159281920,1159282175,GB
-1159282176,1159290655,US
-1159290656,1159290687,CA
-1159290688,1159300607,US
+1159282176,1159300607,US
1159300608,1159300863,SE
-1159300864,1159318015,US
-1159318016,1159318047,GB
-1159318048,1159347199,US
-1159347200,1159347455,AU
-1159347456,1159348223,US
+1159300864,1159341103,US
+1159341104,1159341111,BR
+1159341112,1159348223,US
1159348224,1159356415,CA
1159356416,1159421951,US
1159421952,1159430143,CA
-1159430144,1159480439,US
-1159480440,1159480447,CA
-1159480448,1159482423,US
-1159482424,1159482431,CW
-1159482432,1159512063,US
-1159512064,1159512159,CA
-1159512160,1159512191,US
-1159512192,1159512895,CA
-1159512896,1159512959,US
-1159512960,1159512999,CA
-1159513000,1159513023,US
-1159513024,1159513343,CA
-1159513344,1159513375,US
-1159513376,1159513439,CA
-1159513440,1159513487,US
-1159513488,1159513519,CA
-1159513520,1159513535,US
-1159513536,1159513567,CA
-1159513568,1159513599,US
+1159430144,1159512575,US
+1159512576,1159512831,CA
+1159512832,1159513087,US
+1159513088,1159513343,CA
+1159513344,1159513599,US
1159513600,1159514879,CA
1159514880,1159515135,US
1159515136,1159515647,CA
-1159515648,1159515711,US
-1159515712,1159515887,CA
-1159515888,1159515895,US
-1159515896,1159515903,MX
+1159515648,1159515903,US
1159515904,1159516159,CA
-1159516160,1159516255,US
-1159516256,1159516287,CA
-1159516288,1159516415,US
+1159516160,1159516415,US
1159516416,1159516671,NL
-1159516672,1159517119,US
-1159517120,1159517151,CA
-1159517152,1159517183,US
-1159517184,1159517327,CA
-1159517328,1159517343,US
-1159517344,1159517359,CA
-1159517360,1159517439,US
-1159517440,1159517599,CA
-1159517600,1159517631,US
-1159517632,1159517663,CA
-1159517664,1159517695,US
-1159517696,1159517975,CA
-1159517976,1159517991,US
-1159517992,1159517999,CA
-1159518000,1159518015,US
-1159518016,1159518175,CA
-1159518176,1159518191,US
-1159518192,1159518207,CA
-1159518208,1159519743,US
+1159516672,1159517695,US
+1159517696,1159517951,CA
+1159517952,1159518015,US
+1159518016,1159518047,CA
+1159518048,1159518191,US
+1159518192,1159518199,CA
+1159518200,1159519743,US
1159519744,1159520767,CA
-1159520768,1159520799,US
-1159520800,1159520831,CA
-1159520832,1159520863,US
-1159520864,1159520871,CA
-1159520872,1159520895,US
-1159520896,1159520959,CA
-1159520960,1159520975,US
-1159520976,1159521007,CA
-1159521008,1159521087,US
-1159521088,1159521199,CA
-1159521200,1159521215,US
-1159521216,1159521823,CA
-1159521824,1159521855,US
-1159521856,1159522031,CA
-1159522032,1159522047,US
-1159522048,1159522095,CA
-1159522096,1159522111,US
-1159522112,1159522143,CA
-1159522144,1159522167,US
-1159522168,1159522175,CA
-1159522176,1159522207,US
-1159522208,1159522239,CA
-1159522240,1159522271,US
-1159522272,1159522287,CA
-1159522288,1159522815,US
-1159522816,1159523327,CA
-1159523328,1159523583,US
+1159520768,1159521279,US
+1159521280,1159521791,CA
+1159521792,1159522815,US
+1159522816,1159523071,CA
+1159523072,1159523583,US
1159523584,1159524351,CA
1159524352,1159525375,US
1159525376,1159526399,CA
1159526400,1159527935,US
1159527936,1159528191,CA
-1159528192,1159656487,US
-1159656488,1159656495,BR
-1159656496,1159657023,US
-1159657024,1159657039,AU
-1159657040,1159668479,US
-1159668480,1159668735,CA
-1159668736,1159673471,US
-1159673472,1159673503,CA
-1159673504,1159676927,US
-1159676928,1159677183,US
-1159677184,1159693871,US
-1159693872,1159693887,HN
-1159693888,1159694591,US
+1159528192,1159694591,US
1159694592,1159694847,CA
1159694848,1159700479,US
1159700480,1159725055,CA
-1159725056,1159995647,US
-1159995648,1159995655,AU
-1159995656,1159996063,US
-1159996064,1159996079,GB
-1159996080,1159996287,US
-1159996288,1159996319,AU
-1159996320,1159996383,US
-1159996384,1159996415,AU
-1159996416,1159997623,US
-1159997624,1159997631,SC
-1159997632,1159998575,US
-1159998576,1159998583,UG
-1159998584,1159998703,US
-1159998704,1159998711,RS
-1159998712,1160011775,US
-1160011776,1160012783,CA
-1160012784,1160012791,US
-1160012792,1160013399,CA
-1160013400,1160013423,US
-1160013424,1160013463,CA
-1160013464,1160013479,US
-1160013480,1160013647,CA
-1160013648,1160013663,US
-1160013664,1160013679,CA
-1160013680,1160013687,US
-1160013688,1160014775,CA
-1160014776,1160014783,US
-1160014784,1160014959,CA
-1160014960,1160014967,US
-1160014968,1160015007,CA
-1160015008,1160015015,US
-1160015016,1160015031,CA
-1160015032,1160015039,US
-1160015040,1160015063,CA
-1160015064,1160015071,US
-1160015072,1160015143,CA
-1160015144,1160015151,US
-1160015152,1160015167,CA
-1160015168,1160015191,US
-1160015192,1160015231,CA
-1160015232,1160015239,US
-1160015240,1160015279,CA
-1160015280,1160015287,US
-1160015288,1160015311,CA
-1160015312,1160015327,US
-1160015328,1160015999,CA
-1160016000,1160016095,US
-1160016096,1160016183,CA
-1160016184,1160016191,US
-1160016192,1160016223,CA
-1160016224,1160016239,US
-1160016240,1160016247,CA
-1160016248,1160016263,US
-1160016264,1160016271,CA
-1160016272,1160016279,US
-1160016280,1160016295,CA
-1160016296,1160016319,US
-1160016320,1160016343,CA
-1160016344,1160016351,US
-1160016352,1160016359,CA
-1160016360,1160016383,US
-1160016384,1160016895,CA
-1160016896,1160016903,US
-1160016904,1160016943,CA
-1160016944,1160016951,US
-1160016952,1160017023,CA
-1160017024,1160017031,US
-1160017032,1160017143,CA
-1160017144,1160017159,US
-1160017160,1160019967,CA
-1160019968,1160357942,US
-1160357943,1160357943,US
-1160357944,1160364031,US
+1159725056,1160011775,US
+1160011776,1160019967,CA
+1160019968,1160202239,US
+1160202240,1160202495,CA
+1160202496,1160364031,US
1160364032,1160368127,CA
1160368128,1160373247,US
-1160373248,1160373407,AE
-1160373408,1160373439,US
-1160373440,1160373503,AE
+1160373248,1160373503,AE
1160373504,1160392703,US
1160392704,1160396799,CA
-1160396800,1160405631,US
-1160405632,1160406015,DO
-1160406016,1160406271,US
-1160406272,1160406303,VE
-1160406304,1160406319,US
+1160396800,1160405759,US
+1160405760,1160406015,DO
+1160406016,1160406319,US
1160406320,1160406335,DO
-1160406336,1160406431,US
-1160406432,1160406447,ES
-1160406448,1160406479,US
-1160406480,1160406487,A2
-1160406488,1160408319,US
+1160406336,1160408319,US
1160408320,1160408575,CA
1160408576,1160409599,US
1160409600,1160410111,CO
-1160410112,1160410287,US
-1160410288,1160410303,DO
-1160410304,1160410447,US
-1160410448,1160410463,UY
-1160410464,1160410479,TT
-1160410480,1160410495,US
-1160410496,1160410511,PR
+1160410112,1160410511,US
1160410512,1160410519,EC
1160410520,1160410551,US
1160410552,1160410559,EC
-1160410560,1160411407,US
-1160411408,1160411423,GB
-1160411424,1160411567,US
-1160411568,1160411583,BR
-1160411584,1160412863,US
-1160412864,1160412879,GT
-1160412880,1160415637,US
-1160415638,1160415733,KN
-1160415734,1160415746,US
-1160415747,1160415776,CA
-1160415777,1160425471,US
+1160410560,1160425471,US
1160425472,1160429567,CA
-1160429568,1160433695,US
-1160433696,1160433711,GR
-1160433712,1160434015,US
-1160434016,1160434047,GB
-1160434048,1160434111,PT
-1160434112,1160434303,US
-1160434304,1160434367,NL
-1160434368,1160434559,US
-1160434560,1160434623,GB
-1160434624,1160434879,US
-1160434880,1160434943,IN
-1160434944,1160435007,US
-1160435008,1160435199,IN
-1160435200,1160436543,US
-1160436544,1160436575,ID
-1160436576,1160436607,CO
-1160436608,1160436799,US
-1160436800,1160436863,PK
-1160436864,1160436927,PT
-1160436928,1160437119,US
-1160437120,1160437183,IT
-1160437184,1160437247,US
-1160437248,1160437279,PT
-1160437280,1160437343,US
-1160437344,1160437375,CA
-1160437376,1160437503,US
-1160437504,1160437535,PT
-1160437536,1160437695,US
-1160437696,1160437759,IN
-1160437760,1160479343,US
-1160479344,1160479359,MX
-1160479360,1160486911,US
+1160429568,1160486911,US
1160486912,1160487423,AU
-1160487424,1160496615,US
-1160496616,1160496623,CA
-1160496624,1160503295,US
-1160503296,1160503871,A2
-1160503872,1160503903,US
-1160503904,1160504159,A2
-1160504160,1160504175,US
-1160504176,1160504191,A2
-1160504192,1160504207,AU
-1160504208,1160504287,A2
-1160504288,1160504303,US
-1160504304,1160504319,A2
-1160504320,1160504383,US
-1160504384,1160504511,A2
-1160504512,1160504543,NP
-1160504544,1160504575,AF
-1160504576,1160505343,A2
+1160487424,1160505343,US
1160505344,1160505855,AU
-1160505856,1160507391,A2
-1160507392,1160542207,US
-1160542208,1160542239,LB
-1160542240,1160543327,US
-1160543328,1160543359,MX
-1160543360,1160547839,US
+1160505856,1160547839,US
1160547840,1160548351,MX
1160548352,1160563199,US
1160563200,1160563711,MP
1160563712,1160609791,US
1160609792,1160610815,MX
-1160610816,1160660417,US
-1160660418,1160660418,US
-1160660419,1160661639,US
-1160661640,1160661647,GB
-1160661648,1160662743,US
-1160662744,1160662751,GB
-1160662752,1160663679,US
-1160663680,1160663711,HK
-1160663712,1160665623,US
-1160665624,1160665631,GB
-1160665632,1160665807,US
-1160665808,1160665815,GB
-1160665816,1160667087,US
-1160667088,1160667095,GB
-1160667096,1160667135,US
-1160667136,1160675327,CA
-1160675328,1160677247,US
-1160677248,1160677279,GB
-1160677280,1160677375,US
-1160677376,1160677439,GB
-1160677440,1160678399,US
+1160610816,1160667135,US
+1160667136,1160667903,CA
+1160667904,1160668159,US
+1160668160,1160675327,CA
+1160675328,1160678399,US
1160678400,1160678655,MX
1160678656,1160683519,US
-1160683520,1160684039,CA
-1160684040,1160684047,US
-1160684048,1160684063,CA
-1160684064,1160684071,US
-1160684072,1160684887,CA
-1160684888,1160684895,US
-1160684896,1160686567,CA
-1160686568,1160686575,US
-1160686576,1160687271,CA
-1160687272,1160687279,US
-1160687280,1160687583,CA
-1160687584,1160687591,US
-1160687592,1160688555,CA
-1160688556,1160688578,US
-1160688579,1160688687,CA
-1160688688,1160688695,US
-1160688696,1160688703,CA
-1160688704,1160688711,US
-1160688712,1160688767,CA
-1160688768,1160688783,US
-1160688784,1160688815,CA
-1160688816,1160688823,US
-1160688824,1160688831,CA
-1160688832,1160688839,US
-1160688840,1160689419,CA
-1160689420,1160689447,US
-1160689448,1160689531,CA
-1160689532,1160689571,US
-1160689572,1160689693,CA
-1160689694,1160689732,US
-1160689733,1160689733,CA
-1160689734,1160689741,US
-1160689742,1160689766,CA
-1160689767,1160689778,US
-1160689779,1160689789,CA
-1160689790,1160689799,US
-1160689800,1160689800,CA
-1160689801,1160689811,US
-1160689812,1160689834,CA
-1160689835,1160689846,US
-1160689847,1160689861,CA
-1160689862,1160689887,US
-1160689888,1160690349,CA
-1160690350,1160690361,US
-1160690362,1160690362,CA
-1160690363,1160690381,US
-1160690382,1160690386,CA
-1160690387,1160690415,US
-1160690416,1160690447,CA
-1160690448,1160690455,US
-1160690456,1160690559,CA
-1160690560,1160690607,US
-1160690608,1160690695,CA
-1160690696,1160690727,US
-1160690728,1160690735,CA
-1160690736,1160690751,US
-1160690752,1160690783,CA
-1160690784,1160690791,US
-1160690792,1160690807,CA
-1160690808,1160690823,US
-1160690824,1160690911,CA
-1160690912,1160690919,US
-1160690920,1160690951,CA
-1160690952,1160690959,US
-1160690960,1160691011,CA
-1160691012,1160691027,US
-1160691028,1160691551,CA
-1160691552,1160691567,US
-1160691568,1160691591,CA
-1160691592,1160691599,US
-1160691600,1160691615,CA
-1160691616,1160691631,US
-1160691632,1160691639,CA
-1160691640,1160691647,US
-1160691648,1160691671,CA
-1160691672,1160691679,US
-1160691680,1160691711,CA
-1160691712,1160808255,US
-1160808256,1160808287,CA
-1160808288,1160810495,US
+1160683520,1160691711,CA
+1160691712,1160810495,US
1160810496,1160810751,CA
-1160810752,1160811551,US
-1160811552,1160811559,BE
-1160811560,1160847359,US
+1160810752,1160847359,US
1160847360,1160855551,CA
1160855552,1160863999,US
1160864000,1160864255,CA
-1160864256,1160905215,US
-1160905216,1160905471,US
-1160905472,1160921087,US
+1160864256,1160921087,US
1160921088,1160925183,AG
-1160925184,1160938879,US
-1160938880,1160938887,NL
-1160938888,1160941463,US
-1160941464,1160941471,RU
-1160941472,1160941503,US
-1160941504,1160941511,CA
-1160941512,1160941535,US
-1160941536,1160941567,CA
-1160941568,1160945663,US
+1160925184,1160945663,US
1160945664,1160953855,CA
-1160953856,1160956431,US
-1160956432,1160956440,BY
-1160956441,1160957738,US
-1160957739,1160957752,CA
-1160957753,1161019391,US
+1160953856,1161019391,US
1161019392,1161035775,CA
1161035776,1161052671,US
1161052672,1161052927,GB
-1161052928,1161293823,US
+1161052928,1161053439,US
+1161053440,1161053695,GB
+1161053696,1161293823,US
1161293824,1161297919,CA
-1161297920,1161298303,US
-1161298304,1161298311,IL
-1161298312,1161304591,US
-1161304592,1161304599,AU
-1161304600,1161311743,US
-1161311744,1161311751,KN
-1161311752,1161311991,US
-1161311992,1161311999,KN
-1161312000,1161312839,US
-1161312840,1161312855,BS
-1161312856,1161312863,US
-1161312864,1161312871,BS
-1161312872,1161312991,US
-1161312992,1161312999,IL
-1161313000,1161313127,US
-1161313128,1161313135,BS
-1161313136,1161314151,US
-1161314152,1161314159,CA
-1161314160,1161363455,US
+1161297920,1161363455,US
1161363456,1161367551,CA
1161367552,1161416703,US
1161416704,1161420799,CA
-1161420800,1161421151,AG
-1161421152,1161421167,MS
-1161421168,1161421311,AG
+1161420800,1161421311,AG
1161421312,1161421567,AI
1161421568,1161422079,AG
1161422080,1161422335,VG
@@ -37722,941 +12285,62 @@
1161425152,1161425407,DM
1161425408,1161425663,AG
1161425664,1161425919,AI
-1161425920,1161425935,AG
-1161425936,1161425951,MS
-1161425952,1161426143,AG
-1161426144,1161426175,MS
-1161426176,1161426943,AG
+1161425920,1161426943,AG
1161426944,1161427199,AI
1161427200,1161427455,VG
-1161427456,1161427487,AG
-1161427488,1161427519,MS
-1161427520,1161428223,AG
+1161427456,1161428223,AG
1161428224,1161428991,KN
1161428992,1161429247,US
1161429248,1161429503,CA
1161429504,1161429759,US
-1161429760,1161429767,VN
-1161429768,1161429775,PL
-1161429776,1161429783,US
-1161429784,1161429807,CA
-1161429808,1161429855,US
-1161429856,1161429879,CA
-1161429880,1161429887,SG
-1161429888,1161429927,CA
-1161429928,1161429943,US
-1161429944,1161430015,CA
-1161430016,1161430023,US
-1161430024,1161430039,CA
-1161430040,1161430047,US
-1161430048,1161430087,CA
-1161430088,1161430095,MY
-1161430096,1161430103,US
-1161430104,1161430111,MY
-1161430112,1161430127,CA
-1161430128,1161430135,US
-1161430136,1161430207,CA
-1161430208,1161430215,US
-1161430216,1161430231,CA
-1161430232,1161430239,TR
-1161430240,1161430255,CA
-1161430256,1161430263,PY
-1161430264,1161430271,SK
-1161430272,1161430398,US
-1161430399,1161430399,CA
-1161430400,1161430431,US
-1161430432,1161430463,CA
-1161430464,1161430526,US
-1161430527,1161430527,CA
-1161430528,1161430719,US
-1161430720,1161430743,CA
-1161430744,1161430751,IT
-1161430752,1161430759,TH
-1161430760,1161431063,CA
-1161431064,1161431071,US
-1161431072,1161431087,CA
-1161431088,1161431095,AU
-1161431096,1161431111,CA
-1161431112,1161431127,GR
-1161431128,1161431167,CA
-1161431168,1161431175,CY
-1161431176,1161431191,CA
-1161431192,1161431199,CY
-1161431200,1161431263,CA
-1161431264,1161431279,US
-1161431280,1161431359,CA
-1161431360,1161431367,US
-1161431368,1161431375,CA
-1161431376,1161431383,HR
-1161431384,1161431391,CA
-1161431392,1161431407,US
-1161431408,1161431415,RU
-1161431416,1161431423,CA
-1161431424,1161431486,US
-1161431487,1161431495,CA
-1161431496,1161431503,IN
-1161431504,1161431511,US
-1161431512,1161431519,CA
-1161431520,1161431527,US
-1161431528,1161431535,CA
-1161431536,1161431543,US
-1161431544,1161431551,QA
-1161431552,1161432127,CA
-1161432128,1161432319,NO
-1161432320,1161432575,IN
-1161432576,1161433087,US
+1161429760,1161431039,CA
+1161431040,1161433087,US
1161433088,1161437183,CA
1161437184,1161453567,US
1161453568,1161457663,CA
-1161457664,1161501443,US
-1161501444,1161501470,TR
-1161501471,1161576447,US
-1161576448,1161580543,CA
-1161580544,1161586559,US
-1161586560,1161586623,US
-1161586624,1161586687,US
+1161457664,1161576447,US
+1161576448,1161578111,CA
+1161578112,1161578239,US
+1161578240,1161580543,CA
+1161580544,1161586687,US
1161586688,1161586943,PA
1161586944,1161617407,US
1161617408,1161625599,CA
-1161625600,1161627671,US
-1161627672,1161627679,BR
-1161627680,1161627687,US
-1161627688,1161627695,HR
-1161627696,1161627703,US
+1161625600,1161627703,US
1161627704,1161627711,DE
-1161627712,1161627727,US
-1161627728,1161627743,AR
-1161627744,1161627807,US
-1161627808,1161627815,HR
-1161627816,1161627819,US
-1161627820,1161627823,CA
-1161627824,1161627831,AU
-1161627832,1161627839,US
-1161627840,1161627847,AR
-1161627848,1161627855,US
-1161627856,1161627863,AR
-1161627864,1161627871,US
-1161627872,1161627879,BG
-1161627880,1161628455,US
-1161628456,1161628463,GB
-1161628464,1161628527,US
-1161628528,1161628535,BR
-1161628536,1161628607,US
-1161628608,1161628639,AR
-1161628640,1161628647,IN
-1161628648,1161628663,US
-1161628664,1161628671,AR
-1161628672,1161629199,US
-1161629200,1161629215,HR
-1161629216,1161629239,US
-1161629240,1161629247,PL
-1161629248,1161629263,US
-1161629264,1161629271,BR
-1161629272,1161629343,US
-1161629344,1161629375,FI
-1161629376,1161629383,CA
-1161629384,1161629391,AR
-1161629392,1161629519,US
-1161629520,1161629527,SE
-1161629528,1161629535,MY
-1161629536,1161629543,US
-1161629544,1161629551,PL
-1161629552,1161629583,US
-1161629584,1161629599,GB
-1161629600,1161629607,PL
-1161629608,1161629663,US
-1161629664,1161629671,AU
-1161629672,1161629695,US
-1161629696,1161629703,IN
-1161629704,1161629751,US
-1161629752,1161629759,AU
-1161629760,1161629767,IL
-1161629768,1161629775,US
-1161629776,1161629791,PL
-1161629792,1161629799,US
-1161629800,1161629807,IL
-1161629808,1161629815,GB
-1161629816,1161629823,BR
-1161629824,1161629839,PL
-1161629840,1161629847,US
-1161629848,1161629855,PL
-1161629856,1161629863,AR
-1161629864,1161629887,US
-1161629888,1161629903,CY
-1161629904,1161629911,AR
-1161629912,1161629919,US
-1161629920,1161629935,GB
-1161629936,1161629943,ES
-1161629944,1161630247,US
-1161630248,1161630255,HR
-1161630256,1161630263,NL
-1161630264,1161630271,AR
-1161630272,1161630335,US
-1161630336,1161630343,AR
-1161630344,1161630351,IL
-1161630352,1161630383,US
-1161630384,1161630391,AR
-1161630392,1161630399,US
-1161630400,1161630431,GB
-1161630432,1161630439,PL
-1161630440,1161630447,HR
-1161630448,1161630455,IN
-1161630456,1161630463,NL
-1161630464,1161630743,US
-1161630744,1161630751,PL
-1161630752,1161630895,US
-1161630896,1161630911,DK
-1161630912,1161630919,KW
-1161630920,1161630927,IN
-1161630928,1161630935,US
-1161630936,1161630943,SI
-1161630944,1161630951,US
-1161630952,1161630959,TR
-1161630960,1161631015,US
-1161631016,1161631023,IN
-1161631024,1161631071,US
-1161631072,1161631079,HR
-1161631080,1161631159,US
-1161631160,1161631167,CA
-1161631168,1161631479,US
-1161631480,1161631487,GB
-1161631488,1161631615,US
-1161631616,1161631623,IN
-1161631624,1161631743,US
-1161631744,1161631751,PL
-1161631752,1161632631,US
-1161632632,1161632639,GB
-1161632640,1161632927,US
-1161632928,1161632943,PL
-1161632944,1161633215,US
-1161633216,1161633231,EE
-1161633232,1161633543,US
-1161633544,1161633551,AR
-1161633552,1161633559,US
-1161633560,1161633567,IL
-1161633568,1161633583,US
-1161633584,1161633591,HR
-1161633592,1161633615,US
-1161633616,1161633623,IL
-1161633624,1161634079,US
+1161627712,1161631623,US
+1161631624,1161631631,KW
+1161631632,1161634079,US
1161634080,1161634087,AF
-1161634088,1161634135,US
-1161634136,1161634143,PH
-1161634144,1161634175,AR
-1161634176,1161634191,PL
-1161634192,1161634199,US
-1161634200,1161634207,NZ
-1161634208,1161634223,US
-1161634224,1161634239,PL
-1161634240,1161634247,GB
-1161634248,1161634255,IN
-1161634256,1161634319,US
-1161634320,1161634327,IN
-1161634328,1161634335,US
-1161634336,1161634367,PL
-1161634368,1161634495,US
-1161634496,1161634503,GB
-1161634504,1161634519,US
-1161634520,1161634527,BG
-1161634528,1161634543,GB
-1161634544,1161634559,US
+1161634088,1161634559,US
1161634560,1161634815,IN
-1161634816,1161634911,US
-1161634912,1161634927,GB
-1161634928,1161635007,US
-1161635008,1161635071,KW
-1161635072,1161635871,US
-1161635872,1161635887,PL
-1161635888,1161635967,US
-1161635968,1161636031,AF
-1161636032,1161636095,US
-1161636096,1161636127,GB
-1161636128,1161636159,US
-1161636160,1161636223,IL
-1161636224,1161636287,GB
-1161636288,1161636303,US
-1161636304,1161636311,PL
-1161636312,1161636415,US
-1161636416,1161636447,GB
-1161636448,1161636455,US
-1161636456,1161636463,PL
-1161636464,1161636479,US
-1161636480,1161636511,GB
-1161636512,1161636583,US
-1161636584,1161636591,IN
-1161636592,1161636607,US
-1161636608,1161636639,AF
-1161636640,1161637175,US
-1161637176,1161637183,PL
-1161637184,1161637359,US
-1161637360,1161637367,IN
-1161637368,1161637655,US
-1161637656,1161637663,IL
-1161637664,1161637679,US
-1161637680,1161637695,AR
-1161637696,1161637775,US
-1161637776,1161637783,GB
-1161637784,1161639039,US
-1161639040,1161639047,CA
-1161639048,1161639119,US
-1161639120,1161639127,DK
-1161639128,1161639511,US
-1161639512,1161639519,GB
-1161639520,1161639575,US
-1161639576,1161639583,BG
-1161639584,1161639687,US
-1161639688,1161639695,KW
-1161639696,1161639959,US
-1161639960,1161639967,GB
-1161639968,1161640015,US
-1161640016,1161640023,PL
-1161640024,1161640031,AR
-1161640032,1161640095,US
-1161640096,1161640127,AR
-1161640128,1161640767,US
-1161640768,1161640783,RO
-1161640784,1161640791,GB
-1161640792,1161640831,US
-1161640832,1161640863,AF
-1161640864,1161640895,AR
-1161640896,1161641375,US
-1161641376,1161641383,KW
-1161641384,1161641887,US
-1161641888,1161641911,KW
-1161641912,1161642031,US
-1161642032,1161642039,GB
-1161642040,1161642527,US
-1161642528,1161642559,AF
-1161642560,1161642591,US
-1161642592,1161642595,IN
-1161642596,1161647135,US
-1161647136,1161647167,AF
-1161647168,1161649407,US
+1161634816,1161649407,US
1161649408,1161649663,AR
-1161649664,1161650199,US
-1161650200,1161650207,BG
-1161650208,1161650239,US
-1161650240,1161650247,IN
-1161650248,1161650327,US
-1161650328,1161650343,AR
-1161650344,1161650359,US
-1161650360,1161650367,IL
-1161650368,1161650375,ES
-1161650376,1161650391,US
-1161650392,1161650399,CA
-1161650400,1161650415,US
-1161650416,1161650423,PL
-1161650424,1161650719,US
-1161650720,1161650751,GB
-1161650752,1161650799,US
-1161650800,1161650815,SI
-1161650816,1161650823,US
-1161650824,1161650831,AU
-1161650832,1161650847,US
-1161650848,1161650863,AR
-1161650864,1161650879,US
-1161650880,1161650895,GB
-1161650896,1161650927,US
-1161650928,1161650935,HR
-1161650936,1161650943,US
-1161650944,1161650951,SI
-1161650952,1161650967,US
-1161650968,1161650975,SI
-1161650976,1161651071,US
-1161651072,1161651079,HR
-1161651080,1161651095,US
-1161651096,1161651103,HR
-1161651104,1161651135,GB
-1161651136,1161651143,BG
-1161651144,1161651967,US
-1161651968,1161651999,AF
-1161652000,1161652095,US
-1161652096,1161652103,CY
-1161652104,1161652135,US
-1161652136,1161652143,IN
-1161652144,1161652159,GB
-1161652160,1161653023,US
-1161653024,1161653055,AR
-1161653056,1161653791,US
-1161653792,1161653799,SI
-1161653800,1161653831,US
-1161653832,1161653839,HR
-1161653840,1161653847,US
-1161653848,1161653855,SI
-1161653856,1161653887,US
-1161653888,1161653951,SE
-1161653952,1161654263,US
-1161654264,1161654271,SI
-1161654272,1161657663,US
-1161657664,1161657695,AF
-1161657696,1161658143,US
-1161658144,1161658151,SI
-1161658152,1161658159,US
-1161658160,1161658175,GB
-1161658176,1161658239,US
-1161658240,1161658271,AF
-1161658272,1161764863,US
+1161649664,1161764863,US
1161764864,1161773055,CA
1161773056,1161777151,SZ
-1161777152,1161793851,US
-1161793852,1161793860,PA
-1161793861,1161793911,US
-1161793912,1161793912,IT
-1161793913,1161793916,US
-1161793917,1161793917,IT
-1161793918,1161793920,US
-1161793921,1161793929,IT
-1161793930,1161794011,US
-1161794012,1161794020,AO
-1161794021,1161794036,US
-1161794037,1161794037,IT
-1161794038,1161794039,US
-1161794040,1161794040,IT
-1161794041,1161794468,US
-1161794469,1161794472,ZA
-1161794473,1161795643,US
-1161795644,1161795647,CA
-1161795648,1161795663,US
-1161795664,1161795667,BR
-1161795668,1161795979,US
-1161795980,1161795983,CA
-1161795984,1161796099,US
-1161796100,1161796103,CZ
-1161796104,1161818111,US
+1161777152,1161818111,US
1161818112,1161822207,CA
-1161822208,1161830401,US
-1161830402,1161830402,LT
-1161830403,1161830417,US
-1161830418,1161830418,JP
-1161830419,1161830425,US
+1161822208,1161830425,US
1161830426,1161830426,UA
-1161830427,1161830427,US
-1161830428,1161830428,DE
-1161830429,1161830438,US
-1161830439,1161830439,CA
-1161830440,1161830449,US
-1161830450,1161830450,HR
-1161830451,1161830465,US
-1161830466,1161830466,BR
-1161830467,1161830471,US
-1161830472,1161830472,GB
-1161830473,1161830477,US
-1161830478,1161830478,DO
-1161830479,1161830479,US
-1161830480,1161830480,BY
-1161830481,1161830493,US
-1161830494,1161830494,PK
-1161830495,1161830497,US
-1161830498,1161830498,VN
-1161830499,1161830505,US
-1161830506,1161830506,MX
-1161830507,1161830554,US
-1161830555,1161830555,BR
-1161830556,1161830582,US
-1161830583,1161830583,AE
-1161830584,1161830613,US
-1161830614,1161830614,EC
-1161830615,1161830620,US
-1161830621,1161830621,CA
-1161830622,1161830639,US
-1161830640,1161830640,BR
-1161830641,1161830662,US
-1161830663,1161830664,BR
-1161830665,1161830683,US
-1161830684,1161830684,BR
-1161830685,1161830694,US
-1161830695,1161830695,UA
-1161830696,1161830696,GT
-1161830697,1161830707,US
-1161830708,1161830708,PK
-1161830709,1161830721,US
-1161830722,1161830722,CY
-1161830723,1161830753,US
-1161830754,1161830754,CA
-1161830755,1161830758,US
-1161830759,1161830759,UA
-1161830760,1161830779,US
-1161830780,1161830780,BE
-1161830781,1161830784,US
-1161830785,1161830785,CY
-1161830786,1161830798,US
-1161830799,1161830799,MX
-1161830800,1161830800,BE
-1161830801,1161830804,US
-1161830805,1161830805,BE
-1161830806,1161830806,BD
-1161830807,1161830807,CA
-1161830808,1161830811,US
-1161830812,1161830812,DE
-1161830813,1161830813,US
-1161830814,1161830814,CA
-1161830815,1161830815,US
-1161830816,1161830816,CN
-1161830817,1161830817,US
-1161830818,1161830818,CA
-1161830819,1161830819,CN
-1161830820,1161830820,PK
-1161830821,1161830821,CY
-1161830822,1161830822,CN
-1161830823,1161830825,US
-1161830826,1161830826,UA
-1161830827,1161830832,US
-1161830833,1161830833,CN
-1161830834,1161830839,US
-1161830840,1161830840,PK
-1161830841,1161830842,US
-1161830843,1161830843,PK
-1161830844,1161830844,CL
-1161830845,1161830845,US
-1161830846,1161830846,MD
-1161830847,1161830852,US
-1161830853,1161830853,CO
-1161830854,1161830866,US
-1161830867,1161830867,VN
-1161830868,1161830881,US
-1161830882,1161830882,CA
-1161830883,1161830893,US
-1161830894,1161830894,BE
-1161830895,1161830895,BR
-1161830896,1161830928,US
-1161830929,1161830929,MX
-1161830930,1161830933,US
-1161830934,1161830934,MX
-1161830935,1161830944,US
-1161830945,1161830945,MX
-1161830946,1161831001,US
-1161831002,1161831002,MD
-1161831003,1161831015,US
-1161831016,1161831016,MX
-1161831017,1161831025,US
-1161831026,1161831026,MX
-1161831027,1161831052,US
-1161831053,1161831053,MX
-1161831054,1161831059,US
-1161831060,1161831060,BR
-1161831061,1161831123,US
-1161831124,1161831124,BR
-1161831125,1161831128,US
-1161831129,1161831129,CN
-1161831130,1161831131,US
-1161831132,1161831132,MD
-1161831133,1161831136,US
-1161831137,1161831139,PK
-1161831140,1161831178,US
-1161831179,1161831180,CA
-1161831181,1161831181,US
-1161831182,1161831182,AR
-1161831183,1161831187,US
-1161831188,1161831189,CA
-1161831190,1161831190,US
-1161831191,1161831191,CA
-1161831192,1161831202,US
-1161831203,1161831203,RO
-1161831204,1161831204,US
-1161831205,1161831205,BR
-1161831206,1161831208,US
-1161831209,1161831209,UA
-1161831210,1161831236,US
-1161831237,1161831237,MX
-1161831238,1161831241,US
-1161831242,1161831247,CO
-1161831248,1161831250,US
-1161831251,1161831251,DE
-1161831252,1161831254,US
-1161831255,1161831255,ID
-1161831256,1161831259,US
-1161831260,1161831261,GE
-1161831262,1161831262,MX
-1161831263,1161831263,US
-1161831264,1161831264,TH
-1161831265,1161831265,DE
-1161831266,1161831269,US
-1161831270,1161831270,DE
-1161831271,1161831271,US
-1161831272,1161831272,BR
-1161831273,1161831273,DE
-1161831274,1161831274,IN
-1161831275,1161831276,US
-1161831277,1161831277,IN
-1161831278,1161831278,RU
-1161831279,1161831281,DE
-1161831282,1161831282,GE
-1161831283,1161831283,BR
-1161831284,1161831285,US
-1161831286,1161831286,DE
-1161831287,1161831287,BR
-1161831288,1161831288,US
-1161831289,1161831289,UY
-1161831290,1161831290,BR
-1161831291,1161831299,US
-1161831300,1161831301,CA
-1161831302,1161831302,BR
-1161831303,1161831303,US
-1161831304,1161831304,BR
-1161831305,1161831306,US
-1161831307,1161831307,CO
-1161831308,1161831308,US
-1161831309,1161831309,PK
-1161831310,1161831314,US
-1161831315,1161831315,PK
-1161831316,1161831318,US
-1161831319,1161831319,JP
-1161831320,1161831326,US
-1161831327,1161831327,PK
-1161831328,1161831328,DE
-1161831329,1161831329,BR
-1161831330,1161831330,CA
-1161831331,1161831331,EC
-1161831332,1161831334,US
-1161831335,1161831335,CA
-1161831336,1161831338,US
-1161831339,1161831340,MX
-1161831341,1161831341,US
-1161831342,1161831342,MX
-1161831343,1161831343,BR
-1161831344,1161831344,CA
-1161831345,1161831346,US
-1161831347,1161831347,CA
-1161831348,1161831364,US
-1161831365,1161831365,IN
-1161831366,1161831366,PK
-1161831367,1161831368,US
-1161831369,1161831369,PK
-1161831370,1161831370,BR
-1161831371,1161831371,HU
-1161831372,1161831375,US
-1161831376,1161831377,BR
-1161831378,1161831378,BD
-1161831379,1161831380,PK
-1161831381,1161831382,US
-1161831383,1161831384,CO
+1161830427,1161830596,US
+1161830597,1161830597,UA
+1161830598,1161831384,US
1161831385,1161831385,UA
-1161831386,1161831388,US
-1161831389,1161831390,CA
-1161831391,1161831391,US
-1161831392,1161831392,CA
-1161831393,1161831395,CO
-1161831396,1161831397,US
-1161831398,1161831399,SG
-1161831400,1161831400,BR
-1161831401,1161831401,ID
-1161831402,1161831402,AE
-1161831403,1161831404,US
-1161831405,1161831406,AE
-1161831407,1161831410,US
-1161831411,1161831411,SI
-1161831412,1161831412,US
-1161831413,1161831413,CO
-1161831414,1161831414,CA
-1161831415,1161831415,US
-1161831416,1161831416,JP
-1161831417,1161831478,US
-1161831479,1161831480,BR
-1161831481,1161831486,US
-1161831487,1161831487,DO
-1161831488,1161831541,US
-1161831542,1161831542,LV
-1161831543,1161831545,US
-1161831546,1161831546,BR
-1161831547,1161831588,US
-1161831589,1161831589,CA
-1161831590,1161831590,BR
-1161831591,1161831595,US
-1161831596,1161831596,UA
-1161831597,1161831631,US
-1161831632,1161831632,PK
-1161831633,1161831633,TH
-1161831634,1161831701,US
-1161831702,1161831702,IN
-1161831703,1161831733,US
-1161831734,1161831734,BR
-1161831735,1161831763,US
-1161831764,1161831764,GR
-1161831765,1161831981,US
-1161831982,1161831982,MX
-1161831983,1161832132,US
-1161832133,1161832133,IN
-1161832134,1161832174,US
-1161832175,1161832175,BR
-1161832176,1161832176,IN
-1161832177,1161832182,US
-1161832183,1161832183,BR
-1161832184,1161832188,US
-1161832189,1161832189,CA
-1161832190,1161832215,US
-1161832216,1161832216,BR
-1161832217,1161832231,US
-1161832232,1161832232,BE
-1161832233,1161832234,RU
-1161832235,1161832260,US
-1161832261,1161832261,IN
-1161832262,1161832288,US
-1161832289,1161832289,BR
-1161832290,1161832293,US
-1161832294,1161832294,BR
-1161832295,1161832303,US
-1161832304,1161832304,CL
-1161832305,1161832429,US
-1161832430,1161832430,IN
-1161832431,1161832451,US
-1161832452,1161832453,BR
-1161832454,1161832454,US
-1161832455,1161832455,CA
-1161832456,1161832456,RU
-1161832457,1161832457,AR
-1161832458,1161832458,BR
-1161832459,1161832461,DE
-1161832462,1161832464,IN
-1161832465,1161832465,CA
-1161832466,1161832466,US
-1161832467,1161832468,UY
-1161832469,1161832473,US
-1161832474,1161832475,CA
-1161832476,1161832476,US
-1161832477,1161832478,CA
-1161832479,1161832483,US
+1161831386,1161832483,US
1161832484,1161832484,UA
-1161832485,1161832485,TR
-1161832486,1161832486,US
-1161832487,1161832488,TR
-1161832489,1161832490,US
-1161832491,1161832491,CA
-1161832492,1161832503,US
-1161832504,1161832504,VN
-1161832505,1161832507,US
-1161832508,1161832508,BR
-1161832509,1161832509,MX
-1161832510,1161832510,MD
-1161832511,1161832516,US
-1161832517,1161832530,BR
-1161832531,1161832531,US
-1161832532,1161832536,BR
-1161832537,1161832537,US
-1161832538,1161832538,BR
-1161832539,1161832539,PK
-1161832540,1161832541,BR
-1161832542,1161832542,US
-1161832543,1161832543,BR
-1161832544,1161832545,US
-1161832546,1161832550,BR
-1161832551,1161832555,US
-1161832556,1161832556,BR
-1161832557,1161832558,IN
-1161832559,1161832559,BR
-1161832560,1161832562,US
-1161832563,1161832563,BR
-1161832564,1161832565,US
-1161832566,1161832566,BR
-1161832567,1161832583,US
-1161832584,1161832585,BR
-1161832586,1161832588,US
-1161832589,1161832589,IN
-1161832590,1161832591,US
-1161832592,1161832592,IN
-1161832593,1161832593,PK
-1161832594,1161832596,IN
-1161832597,1161832597,BR
-1161832598,1161832598,IN
-1161832599,1161832599,US
-1161832600,1161832607,IN
-1161832608,1161832616,US
-1161832617,1161832618,BR
-1161832619,1161832620,US
-1161832621,1161832622,BR
-1161832623,1161832623,CA
-1161832624,1161832625,US
-1161832626,1161832632,CA
-1161832633,1161832735,US
-1161832736,1161832738,AR
-1161832739,1161832739,US
-1161832740,1161832767,AR
-1161832768,1161832770,US
-1161832771,1161832782,BR
-1161832783,1161832799,US
-1161832800,1161832831,BR
-1161832832,1161832895,US
-1161832896,1161832901,AR
-1161832902,1161832927,IN
-1161832928,1161832959,LT
-1161832960,1161833015,US
-1161833016,1161833017,BR
-1161833018,1161833055,US
-1161833056,1161833057,PK
-1161833058,1161833062,US
-1161833063,1161833063,PK
-1161833064,1161833064,US
-1161833065,1161833072,PK
-1161833073,1161833073,US
-1161833074,1161833075,PK
-1161833076,1161833077,US
-1161833078,1161833081,BR
-1161833082,1161833097,US
-1161833098,1161833100,CA
-1161833101,1161833101,US
-1161833102,1161833128,CA
-1161833129,1161833129,US
-1161833130,1161833132,CA
-1161833133,1161833134,BR
-1161833135,1161833136,US
-1161833137,1161833138,BR
-1161833139,1161833139,US
-1161833140,1161833144,BR
-1161833145,1161833145,US
-1161833146,1161833151,BR
-1161833152,1161833152,US
-1161833153,1161833168,BR
-1161833169,1161833169,US
-1161833170,1161833170,BR
-1161833171,1161833964,US
-1161833965,1161833965,IL
-1161833966,1161835875,US
-1161835876,1161835877,BR
-1161835878,1161835878,US
-1161835879,1161835879,BR
-1161835880,1161835930,US
-1161835931,1161835931,BR
-1161835932,1161835941,US
-1161835942,1161835947,PK
-1161835948,1161835952,US
-1161835953,1161835954,PK
-1161835955,1161835955,US
-1161835956,1161835956,PK
-1161835957,1161835957,US
-1161835958,1161835961,PK
-1161835962,1161835969,US
-1161835970,1161835971,PK
-1161835972,1161836020,US
-1161836021,1161836028,CA
-1161836029,1161836063,US
-1161836064,1161836095,JP
-1161836096,1161836383,US
-1161836384,1161836415,CY
-1161836416,1161836446,US
-1161836447,1161836447,BR
-1161836448,1161837281,US
-1161837282,1161837282,CA
-1161837283,1161837336,US
-1161837337,1161837337,BR
-1161837338,1161837457,US
-1161837458,1161837458,CO
-1161837459,1161837502,US
-1161837503,1161837503,BR
-1161837504,1161837567,US
+1161832485,1161835225,US
+1161835226,1161835226,UA
+1161835227,1161835230,US
+1161835231,1161835231,PH
+1161835232,1161837567,US
1161837568,1161837823,JP
-1161837824,1161837825,US
-1161837826,1161837826,BR
-1161837827,1161837854,US
-1161837855,1161837856,BR
-1161837857,1161837858,US
-1161837859,1161837889,BR
-1161837890,1161837890,US
-1161837891,1161837894,BR
-1161837895,1161837895,US
-1161837896,1161837900,BR
-1161837901,1161837901,US
-1161837902,1161837906,BR
-1161837907,1161837907,US
-1161837908,1161837911,BR
-1161837912,1161837914,US
-1161837915,1161837922,BR
-1161837923,1161837924,US
-1161837925,1161837932,BR
-1161837933,1161837938,US
-1161837939,1161837940,BR
-1161837941,1161837946,PK
-1161837947,1161837947,US
-1161837948,1161837948,PK
-1161837949,1161837958,BR
-1161837959,1161837959,US
-1161837960,1161837971,BR
-1161837972,1161837974,US
-1161837975,1161837976,BR
-1161837977,1161837993,US
-1161837994,1161838000,BR
-1161838001,1161838001,US
-1161838002,1161838031,BR
-1161838032,1161838038,US
-1161838039,1161838045,BR
-1161838046,1161838046,US
-1161838047,1161838050,BR
-1161838051,1161838051,US
-1161838052,1161838068,BR
-1161838069,1161838069,US
-1161838070,1161838070,AT
-1161838071,1161838076,BR
-1161838077,1161838355,US
-1161838356,1161838358,SK
-1161838359,1161838435,US
-1161838436,1161838436,SG
-1161838437,1161838437,BR
-1161838438,1161838441,US
-1161838442,1161838442,BR
-1161838443,1161838452,US
-1161838453,1161838453,PH
-1161838454,1161838456,US
-1161838457,1161838458,RU
-1161838459,1161838459,US
-1161838460,1161838460,BR
-1161838461,1161838468,US
-1161838469,1161838469,DO
-1161838470,1161838475,US
-1161838476,1161838476,CA
-1161838477,1161838477,BR
-1161838478,1161838480,US
-1161838481,1161838481,CA
-1161838482,1161838484,US
-1161838485,1161838485,IN
-1161838486,1161838505,US
-1161838506,1161838506,CA
-1161838507,1161838511,US
-1161838512,1161838512,AU
-1161838513,1161838513,SG
-1161838514,1161838514,UY
-1161838515,1161838515,PK
-1161838516,1161838516,IN
-1161838517,1161838517,US
-1161838518,1161838518,IN
-1161838519,1161838521,US
-1161838522,1161838522,IN
-1161838523,1161838529,US
-1161838530,1161838530,PK
-1161838531,1161838535,US
-1161838536,1161838536,BR
-1161838537,1161838574,US
-1161838575,1161838575,CO
-1161838576,1161841101,US
-1161841102,1161841112,DE
-1161841113,1161842101,US
-1161842102,1161842109,CH
-1161842110,1161842932,US
-1161842933,1161842940,MX
-1161842941,1161842955,US
-1161842956,1161842963,CA
-1161842964,1161842970,US
-1161842971,1161842978,GB
-1161842979,1161843084,US
-1161843085,1161843092,MX
-1161843093,1161843098,US
-1161843099,1161843106,MX
-1161843107,1161843143,US
-1161843144,1161843153,CA
-1161843154,1161843245,US
-1161843246,1161843253,MX
-1161843254,1161865703,US
-1161865704,1161865711,EG
-1161865712,1161866111,US
-1161866112,1161866127,MT
-1161866128,1161886719,US
-1161886720,1161887231,DE
-1161887232,1161891527,US
-1161891528,1161891535,CA
-1161891536,1161891543,US
-1161891544,1161891551,CA
-1161891552,1161900863,US
-1161900864,1161900895,US
-1161900896,1161901647,US
-1161901648,1161901655,VN
-1161901656,1161925631,US
+1161837824,1161885695,US
+1161885696,1161886207,JP
+1161886208,1161886975,US
+1161886976,1161887231,DE
+1161887232,1161887743,AU
+1161887744,1161925631,US
1161925632,1161925887,EC
1161925888,1161926399,US
1161926400,1161926655,EC
@@ -38664,50 +12348,15 @@
1162018816,1162022911,CA
1162022912,1162027007,US
1162027008,1162031103,ZA
-1162031104,1162032255,US
-1162032256,1162032271,CA
-1162032272,1162032287,US
+1162031104,1162032287,US
1162032288,1162032303,BE
-1162032304,1162032359,US
-1162032360,1162032367,JO
-1162032368,1162032735,US
-1162032736,1162032767,CA
-1162032768,1162032831,DO
-1162032832,1162033247,US
-1162033248,1162033263,CA
-1162033264,1162033983,US
-1162033984,1162034015,IN
-1162034016,1162059775,US
+1162032304,1162059775,US
1162059776,1162067967,CA
-1162067968,1162204970,US
-1162204971,1162204972,US
-1162204973,1162215423,US
+1162067968,1162215423,US
1162215424,1162280959,CA
-1162280960,1162295343,US
-1162295344,1162295351,GB
-1162295352,1162296407,US
-1162296408,1162296415,CA
-1162296416,1162297343,US
+1162280960,1162297343,US
1162297344,1162305535,CA
-1162305536,1162313727,US
-1162313728,1162320127,A2
-1162320128,1162320383,US
-1162320384,1162321919,A2
-1162321920,1162394463,US
-1162394464,1162394471,GB
-1162394472,1162408617,US
-1162408618,1162408618,US
-1162408619,1162408783,US
-1162408784,1162408831,CR
-1162408832,1162409727,US
-1162409728,1162409983,US
-1162409984,1162451511,US
-1162451512,1162451512,IN
-1162451513,1162451598,US
-1162451599,1162451601,IN
-1162451602,1162457991,US
-1162457992,1162457999,ID
-1162458000,1162461183,US
+1162305536,1162461183,US
1162461184,1162461695,BB
1162461696,1162462207,GD
1162462208,1162462975,BB
@@ -38721,17 +12370,17 @@
1162473472,1162475007,GD
1162475008,1162477567,BB
1162477568,1162715135,US
-1162715136,1162716159,CA
-1162716160,1162716175,US
-1162716176,1162723327,CA
-1162723328,1162807295,US
+1162715136,1162723327,CA
+1162723328,1162806527,US
+1162806528,1162806783,PR
+1162806784,1162807295,US
1162807296,1162809343,PR
1162809344,1162811391,US
1162811392,1162811647,CW
1162811648,1162812159,US
1162812160,1162812415,DO
1162812416,1162813439,BS
-1162813440,1162817535,CW
+1162813440,1162817535,US
1162817536,1162821631,GT
1162821632,1162823679,US
1162823680,1162825727,GT
@@ -38747,7 +12396,8 @@
1162853376,1162854399,PR
1162854400,1162858495,JM
1162858496,1162862591,HN
-1162862592,1162870783,US
+1162862592,1162866687,PR
+1162866688,1162870783,US
1162870784,1162871295,BB
1162871296,1162879999,LC
1162880000,1162882559,DM
@@ -38755,130 +12405,17 @@
1162883840,1162884863,BB
1162884864,1162885887,VC
1162885888,1162887167,BB
-1162887168,1162925983,US
-1162925984,1162926015,AU
-1162926016,1162926071,US
-1162926072,1162926079,AU
-1162926080,1163395071,US
-1163395072,1163395823,A2
-1163395824,1163395827,NP
-1163395828,1163395831,AF
-1163395832,1163395839,A2
-1163395840,1163395847,BD
-1163395848,1163395855,ID
-1163395856,1163395863,BD
-1163395864,1163395871,ID
-1163395872,1163395879,PK
-1163395880,1163395911,ID
-1163395912,1163395919,BD
-1163395920,1163395927,ID
-1163395928,1163395943,BD
-1163395944,1163395951,A2
-1163395952,1163395959,PK
-1163395960,1163396023,ID
-1163396024,1163396031,PK
-1163396032,1163396079,ID
-1163396080,1163396087,BD
-1163396088,1163396143,ID
-1163396144,1163396151,BD
-1163396152,1163396191,ID
-1163396192,1163396199,A2
-1163396200,1163396207,ID
-1163396208,1163396215,A2
-1163396216,1163396231,ID
-1163396232,1163396239,A2
-1163396240,1163396247,ID
-1163396248,1163396255,BD
-1163396256,1163396287,ID
-1163396288,1163396295,A2
-1163396296,1163396303,BD
-1163396304,1163396319,A2
-1163396320,1163396327,BD
-1163396328,1163396343,ID
-1163396344,1163396351,A2
-1163396352,1163396383,ID
-1163396384,1163396399,A2
-1163396400,1163396431,BD
-1163396432,1163396519,A2
-1163396520,1163396527,ID
-1163396528,1163396559,A2
-1163396560,1163396575,ID
-1163396576,1163396623,A2
-1163396624,1163396639,ID
-1163396640,1163396655,A2
-1163396656,1163396671,BD
-1163396672,1163396687,A2
-1163396688,1163396719,BD
-1163396720,1163396831,A2
-1163396832,1163396895,BD
-1163396896,1163396927,ID
-1163396928,1163396991,A2
-1163396992,1163397023,BD
-1163397024,1163397055,A2
-1163397056,1163397087,BD
-1163397088,1163397119,A2
-1163397120,1163397247,NP
-1163397248,1163397375,BD
-1163397376,1163397471,A2
-1163397472,1163397479,US
-1163397480,1163397535,A2
-1163397536,1163397543,US
-1163397544,1163397575,A2
-1163397576,1163397583,BD
-1163397584,1163397663,A2
-1163397664,1163397695,BD
-1163397696,1163397791,A2
-1163397792,1163397807,AF
-1163397808,1163397855,A2
-1163397856,1163397887,US
-1163397888,1163398143,NP
-1163398144,1163398239,A2
-1163398240,1163398303,BD
-1163398304,1163398367,A2
-1163398368,1163398399,BD
-1163398400,1163398655,US
-1163398656,1163399039,BD
-1163399040,1163399103,A2
-1163399104,1163399295,BD
-1163399296,1163399679,A2
-1163399680,1163399807,US
-1163399808,1163399935,A2
-1163399936,1163400063,US
-1163400064,1163400447,A2
-1163400448,1163400703,BD
-1163400704,1163400719,PK
-1163400720,1163400727,ID
-1163400728,1163400735,A2
-1163400736,1163400743,PK
-1163400744,1163400751,A2
-1163400752,1163400759,PK
-1163400760,1163400839,A2
-1163400840,1163400847,ID
-1163400848,1163400887,A2
-1163400888,1163400927,ID
-1163400928,1163400959,A2
+1162887168,1163398655,US
+1163398656,1163398911,BD
+1163398912,1163400959,US
1163400960,1163401215,BD
-1163401216,1163401239,ID
-1163401240,1163401255,A2
-1163401256,1163401263,ID
-1163401264,1163401319,A2
-1163401320,1163401327,PK
-1163401328,1163401351,A2
-1163401352,1163401359,PK
-1163401360,1163401431,A2
-1163401432,1163401439,PK
-1163401440,1163401471,A2
+1163401216,1163401471,US
1163401472,1163401727,ID
-1163401728,1163401791,BD
-1163401792,1163401983,A2
-1163401984,1163402367,BD
-1163402368,1163402495,A2
-1163402496,1163402879,BD
-1163402880,1163403007,A2
-1163403008,1163403071,BD
-1163403072,1163403135,US
-1163403136,1163403263,A2
-1163403264,1163407359,US
+1163401728,1163401983,US
+1163401984,1163402239,BD
+1163402240,1163402495,US
+1163402496,1163402751,BD
+1163402752,1163407359,US
1163407360,1163411455,CA
1163411456,1163468799,US
1163468800,1163469055,PR
@@ -38887,493 +12424,200 @@
1163472896,1163479295,US
1163479296,1163479551,CA
1163479552,1163526143,US
-1163526144,1163526943,CA
-1163526944,1163526975,US
-1163526976,1163527059,CA
-1163527060,1163527071,US
-1163527072,1163527103,CA
-1163527104,1163527135,US
-1163527136,1163527791,CA
-1163527792,1163527807,US
-1163527808,1163527903,CA
-1163527904,1163527935,US
+1163526144,1163526399,CA
+1163526400,1163526655,US
+1163526656,1163526911,CA
+1163526912,1163527167,US
+1163527168,1163527679,CA
+1163527680,1163527935,US
1163527936,1163529215,CA
-1163529216,1163530239,US
-1163530240,1163530335,CA
-1163530336,1163530367,US
-1163530368,1163530415,CA
-1163530416,1163530431,US
-1163530432,1163530599,CA
-1163530600,1163530623,US
-1163530624,1163530639,CA
-1163530640,1163530655,US
-1163530656,1163530815,CA
-1163530816,1163530831,US
-1163530832,1163530839,CA
-1163530840,1163530847,RS
-1163530848,1163530879,CA
-1163530880,1163530895,US
-1163530896,1163530903,CA
-1163530904,1163530935,US
-1163530936,1163530959,CA
-1163530960,1163530967,US
-1163530968,1163532799,CA
-1163532800,1163532927,US
-1163532928,1163533023,CA
-1163533024,1163533055,US
-1163533056,1163533439,CA
-1163533440,1163533511,US
-1163533512,1163533519,CA
-1163533520,1163533535,US
-1163533536,1163533551,CA
-1163533552,1163533567,PA
-1163533568,1163533695,CA
-1163533696,1163533727,US
-1163533728,1163533759,CA
-1163533760,1163533791,AU
-1163533792,1163533797,US
-1163533798,1163533798,CA
-1163533799,1163533807,US
-1163533808,1163533951,CA
-1163533952,1163534015,US
-1163534016,1163534031,CA
-1163534032,1163534047,US
-1163534048,1163534063,CA
-1163534064,1163534071,US
-1163534072,1163534079,MX
-1163534080,1163534143,US
-1163534144,1163534175,CA
-1163534176,1163534207,US
-1163534208,1163534247,CA
-1163534248,1163534255,US
-1163534256,1163534311,CA
-1163534312,1163534319,US
-1163534320,1163534327,CA
-1163534328,1163535359,US
+1163529216,1163530655,US
+1163530656,1163530663,CA
+1163530664,1163530991,US
+1163530992,1163532799,CA
+1163532800,1163533055,US
+1163533056,1163533311,CA
+1163533312,1163533807,US
+1163533808,1163533823,CA
+1163533824,1163534255,US
+1163534256,1163534271,CA
+1163534272,1163535359,US
1163535360,1163535615,CA
-1163535616,1163535743,US
-1163535744,1163535839,CA
-1163535840,1163535871,US
+1163535616,1163535871,US
1163535872,1163536383,CA
1163536384,1163537663,US
1163537664,1163539455,CA
-1163539456,1163540511,US
-1163540512,1163540607,CA
-1163540608,1163540735,US
+1163539456,1163540351,US
+1163540352,1163540479,CA
+1163540480,1163540735,US
1163540736,1163541503,CA
1163541504,1163542015,US
-1163542016,1163542799,CA
-1163542800,1163542855,US
-1163542856,1163542919,CA
-1163542920,1163542927,US
-1163542928,1163543687,CA
-1163543688,1163543695,US
-1163543696,1163543775,CA
-1163543776,1163543791,US
-1163543792,1163543823,CA
-1163543824,1163543847,US
-1163543848,1163543935,CA
-1163543936,1163543967,US
-1163543968,1163543983,CA
-1163543984,1163543991,US
-1163543992,1163544319,CA
-1163544320,1163544327,US
-1163544328,1163544383,CA
-1163544384,1163544423,US
-1163544424,1163544431,CA
-1163544432,1163544447,US
-1163544448,1163544575,CA
-1163544576,1163544607,US
-1163544608,1163544639,CA
-1163544640,1163544671,US
-1163544672,1163544735,CA
-1163544736,1163544759,US
-1163544760,1163544767,CA
-1163544768,1163544799,US
-1163544800,1163545087,CA
-1163545088,1163545215,US
-1163545216,1163545295,CA
-1163545296,1163545303,US
-1163545304,1163545311,CA
-1163545312,1163545567,US
-1163545568,1163545599,CA
-1163545600,1163545615,US
-1163545616,1163545631,CA
-1163545632,1163545663,GB
-1163545664,1163545679,US
-1163545680,1163545695,CA
-1163545696,1163545727,US
-1163545728,1163545887,CA
-1163545888,1163545895,US
-1163545896,1163545903,CA
-1163545904,1163545911,US
-1163545912,1163545983,CA
-1163545984,1163546015,US
+1163542016,1163542783,CA
+1163542784,1163543039,US
+1163543040,1163543551,CA
+1163543552,1163544063,US
+1163544064,1163544319,CA
+1163544320,1163544831,US
+1163544832,1163545087,CA
+1163545088,1163545343,US
+1163545344,1163545599,CA
+1163545600,1163546015,US
1163546016,1163546031,CA
-1163546032,1163546039,US
-1163546040,1163546047,NZ
-1163546048,1163546111,CA
-1163546112,1163546127,US
-1163546128,1163546175,CA
-1163546176,1163546207,US
-1163546208,1163546383,CA
-1163546384,1163546391,US
-1163546392,1163546399,CA
-1163546400,1163546423,US
-1163546424,1163546447,CA
-1163546448,1163546455,US
-1163546456,1163546527,CA
-1163546528,1163546535,US
-1163546536,1163546551,CA
-1163546552,1163546559,US
-1163546560,1163547391,CA
-1163547392,1163547407,US
-1163547408,1163547415,CA
-1163547416,1163547423,US
-1163547424,1163547487,CA
-1163547488,1163547527,US
-1163547528,1163547535,CA
-1163547536,1163547539,US
-1163547540,1163547543,CA
-1163547544,1163547551,US
-1163547552,1163547567,CA
-1163547568,1163547583,VG
-1163547584,1163547951,CA
-1163547952,1163547983,US
-1163547984,1163549007,CA
-1163549008,1163549023,US
-1163549024,1163549119,CA
-1163549120,1163549183,US
+1163546032,1163546623,US
+1163546624,1163546879,CA
+1163546880,1163547135,US
+1163547136,1163547391,CA
+1163547392,1163548159,US
+1163548160,1163548927,CA
+1163548928,1163549183,US
1163549184,1163549695,CA
1163549696,1163549951,US
-1163549952,1163550239,CA
-1163550240,1163550255,US
-1163550256,1163550335,CA
-1163550336,1163550351,US
-1163550352,1163550367,CA
-1163550368,1163550375,US
-1163550376,1163550383,CA
-1163550384,1163550399,US
-1163550400,1163550783,CA
-1163550784,1163550815,US
+1163549952,1163550207,CA
+1163550208,1163550815,US
1163550816,1163550831,CA
-1163550832,1163550839,US
-1163550840,1163550991,CA
-1163550992,1163551007,US
-1163551008,1163551071,CA
-1163551072,1163551087,US
-1163551088,1163551263,CA
-1163551264,1163551295,US
-1163551296,1163551327,CA
-1163551328,1163551359,US
-1163551360,1163551423,CA
-1163551424,1163551439,US
-1163551440,1163551623,CA
-1163551624,1163551631,CN
-1163551632,1163551663,CA
-1163551664,1163551695,US
-1163551696,1163551727,CA
-1163551728,1163551743,US
-1163551744,1163552383,CA
-1163552384,1163552519,US
-1163552520,1163552535,CA
-1163552536,1163552543,US
-1163552544,1163552575,CA
-1163552576,1163552607,PA
-1163552608,1163552679,CA
-1163552680,1163552687,US
-1163552688,1163552695,CA
-1163552696,1163552719,US
-1163552720,1163553855,CA
-1163553856,1163553871,US
-1163553872,1163553919,CA
-1163553920,1163553951,US
-1163553952,1163554559,CA
-1163554560,1163554591,US
-1163554592,1163554639,CA
-1163554640,1163554647,US
-1163554648,1163554655,MX
-1163554656,1163554703,CA
-1163554704,1163554751,US
-1163554752,1163554783,CA
-1163554784,1163554791,US
-1163554792,1163555839,CA
+1163550832,1163550847,US
+1163550848,1163550975,CA
+1163550976,1163551295,US
+1163551296,1163551311,CA
+1163551312,1163551455,US
+1163551456,1163551487,CA
+1163551488,1163551631,US
+1163551632,1163551647,CA
+1163551648,1163551743,US
+1163551744,1163552255,CA
+1163552256,1163552519,US
+1163552520,1163552527,CA
+1163552528,1163552543,US
+1163552544,1163552559,CA
+1163552560,1163552607,US
+1163552608,1163552623,CA
+1163552624,1163552767,US
+1163552768,1163553791,CA
+1163553792,1163554047,US
+1163554048,1163554559,CA
+1163554560,1163554815,US
+1163554816,1163555839,CA
1163555840,1163556095,US
1163556096,1163556607,CA
-1163556608,1163557727,US
-1163557728,1163557759,CA
-1163557760,1163558015,US
-1163558016,1163558028,KW
-1163558029,1163559679,US
+1163556608,1163559679,US
1163559680,1163559935,CA
1163559936,1163560959,US
-1163560960,1163562063,CA
-1163562064,1163562111,US
-1163562112,1163562199,CA
-1163562200,1163562207,US
-1163562208,1163562231,CA
-1163562232,1163562239,US
+1163560960,1163561983,CA
+1163561984,1163562239,US
1163562240,1163563007,CA
1163563008,1163564031,US
-1163564032,1163565055,CA
-1163565056,1163566047,US
-1163566048,1163566079,CA
-1163566080,1163567103,US
+1163564032,1163565311,CA
+1163565312,1163567103,US
1163567104,1163568127,CA
-1163568128,1163570431,US
-1163570432,1163570495,CA
-1163570496,1163571199,US
-1163571200,1163571983,CA
-1163571984,1163571999,US
-1163572000,1163572175,CA
-1163572176,1163572183,US
-1163572184,1163573247,CA
-1163573248,1163573439,US
-1163573440,1163573503,IN
-1163573504,1163575039,US
+1163568128,1163571199,US
+1163571200,1163571967,CA
+1163571968,1163572223,US
+1163572224,1163572479,CA
+1163572480,1163575039,US
1163575040,1163575295,IN
-1163575296,1163576703,CA
-1163576704,1163576799,US
-1163576800,1163576959,CA
-1163576960,1163576991,US
-1163576992,1163577263,CA
-1163577264,1163577311,US
-1163577312,1163577327,CA
-1163577328,1163577375,US
-1163577376,1163577407,CA
-1163577408,1163577471,US
-1163577472,1163577503,CA
-1163577504,1163577863,US
-1163577864,1163577919,CA
-1163577920,1163577951,US
-1163577952,1163577983,CA
-1163577984,1163578111,US
-1163578112,1163578175,CA
-1163578176,1163578191,US
-1163578192,1163578239,CA
-1163578240,1163578255,US
-1163578256,1163578271,CA
-1163578272,1163578303,US
-1163578304,1163578351,CA
-1163578352,1163578367,US
-1163578368,1163579119,CA
-1163579120,1163579127,US
-1163579128,1163579135,CA
-1163579136,1163579519,US
-1163579520,1163579647,CA
-1163579648,1163579871,US
-1163579872,1163579903,CA
+1163575296,1163576575,CA
+1163576576,1163579903,US
1163579904,1163580159,NL
1163580160,1163580927,US
1163580928,1163581183,CA
-1163581184,1163581439,US
-1163581440,1163581503,CA
-1163581504,1163581567,US
-1163581568,1163581583,CA
-1163581584,1163581615,US
-1163581616,1163581631,CA
-1163581632,1163581695,US
+1163581184,1163581695,US
1163581696,1163581951,CA
-1163581952,1163582015,US
-1163582016,1163582047,CA
-1163582048,1163582079,US
+1163581952,1163582031,US
+1163582032,1163582039,CA
+1163582040,1163582079,US
1163582080,1163582111,CA
-1163582112,1163582127,US
-1163582128,1163582183,CA
-1163582184,1163582191,US
-1163582192,1163583487,CA
-1163583488,1163585199,US
-1163585200,1163585215,CA
-1163585216,1163586740,US
-1163586741,1163586743,CA
-1163586744,1163586744,NL
-1163586745,1163586745,GB
-1163586746,1163587583,US
+1163582112,1163582207,US
+1163582208,1163583487,CA
+1163583488,1163587583,US
1163587584,1163588095,CA
-1163588096,1163588111,US
-1163588112,1163588159,CA
-1163588160,1163588199,US
-1163588200,1163588207,DM
-1163588208,1163588215,CA
-1163588216,1163588223,US
-1163588224,1163588607,CA
-1163588608,1163588608,US
-1163588609,1163588695,CA
-1163588696,1163588703,US
-1163588704,1163588727,CA
-1163588728,1163588799,US
-1163588800,1163588815,CA
-1163588816,1163588831,US
-1163588832,1163588847,CA
-1163588848,1163588863,US
+1163588096,1163588351,US
+1163588352,1163588607,CA
+1163588608,1163588863,US
1163588864,1163589631,CA
-1163589632,1163759071,US
-1163759072,1163759087,AE
-1163759088,1167319359,US
-1167319360,1167319367,CA
-1167319368,1167320071,US
-1167320072,1167320079,CA
-1167320080,1167321447,US
-1167321448,1167321455,CA
-1167321456,1167321959,US
-1167321960,1167321967,GB
-1167321968,1167322255,US
-1167322256,1167322263,CA
-1167322264,1167322695,US
-1167322696,1167322703,IN
-1167322704,1167323543,US
-1167323544,1167323551,CA
-1167323552,1167324287,US
-1167324288,1167324295,GB
-1167324296,1167324311,US
-1167324312,1167324319,CA
-1167324320,1167325727,US
-1167325728,1167325735,CA
-1167325736,1167325935,US
-1167325936,1167325951,CA
-1167325952,1167326231,US
-1167326232,1167326239,CA
-1167326240,1167326335,US
-1167326336,1167326367,SI
-1167326368,1167327031,US
-1167327032,1167327039,GB
-1167327040,1167693199,US
-1167693200,1167693215,UA
-1167693216,1167851519,US
+1163589632,1167851519,US
1167851520,1168113663,CA
1168113664,1168138239,US
1168138240,1168146431,JM
-1168146432,1168178687,US
-1168178688,1168178943,US
-1168178944,1168211967,US
+1168146432,1168211967,US
1168211968,1168220159,CA
1168220160,1168318719,US
1168318720,1168318975,CA
1168318976,1168321535,US
1168321536,1168321791,CA
1168321792,1168393215,US
-1168393216,1168393591,CA
-1168393592,1168393599,US
-1168393600,1168394495,CA
-1168394496,1168394511,US
-1168394512,1168394751,CA
+1168393216,1168393471,CA
+1168393472,1168393503,US
+1168393504,1168393519,CA
+1168393520,1168393543,US
+1168393544,1168393567,CA
+1168393568,1168393663,US
+1168393664,1168393983,CA
+1168393984,1168394143,US
+1168394144,1168394151,CA
+1168394152,1168394239,US
+1168394240,1168394495,CA
+1168394496,1168394575,US
+1168394576,1168394591,CA
+1168394592,1168394719,US
+1168394720,1168394751,CA
1168394752,1168420863,US
1168420864,1168424959,CA
-1168424960,1168454655,US
-1168454656,1168455167,US
-1168455168,1168474111,US
+1168424960,1168461823,US
+1168461824,1168465919,CA
+1168465920,1168474111,US
1168474112,1168506879,CA
-1168508928,1168510975,US
+1168509440,1168510975,US
1168510976,1168515071,CA
1168515072,1168535551,US
1168535552,1168539647,CA
-1168539648,1168621268,US
-1168621269,1168621270,IN
-1168621271,1168670719,US
+1168539648,1168670719,US
1168670720,1168687103,CA
-1168687104,1168727551,US
+1168687104,1168697599,US
+1168697600,1168697855,GB
+1168697856,1168698111,NL
+1168698112,1168727551,US
1168727552,1168727807,ES
1168727808,1168859135,US
1168859136,1168863231,CA
1168863232,1168867327,US
1168867328,1168875519,CA
-1168875520,1168887807,US
-1168887808,1168891903,CA
-1168891904,1168916479,US
+1168875520,1168916479,US
1168916480,1168932863,CA
1168932864,1168936959,US
1168936960,1168949247,CA
1168949248,1168949503,US
1168949504,1168949759,CA
-1168949760,1168949823,US
-1168949824,1168949855,CA
-1168949856,1168950271,US
+1168949760,1168950271,US
1168950272,1168951295,CA
-1168951296,1168951807,US
-1168951808,1168951823,CA
-1168951824,1168952063,US
-1168952064,1168952095,CA
-1168952096,1168952319,US
-1168952320,1168952511,CA
-1168952512,1168952575,US
+1168951296,1168952575,US
1168952576,1168952831,CA
-1168952832,1168952863,US
-1168952864,1168952895,CA
-1168952896,1168953023,US
-1168953024,1168953055,CA
-1168953056,1168953119,US
-1168953120,1168953279,CA
-1168953280,1168953311,US
-1168953312,1168953343,CA
-1168953344,1168955647,US
+1168952832,1168952887,US
+1168952888,1168952895,CA
+1168952896,1168955647,US
1168955648,1168956415,CA
1168956416,1168957183,US
1168957184,1168957311,IN
1168957312,1168957439,US
1168957440,1168958207,CA
-1168958208,1168958211,US
-1168958212,1168958215,CA
-1168958216,1168958223,US
-1168958224,1168958231,SG
-1168958232,1168958239,US
-1168958240,1168958423,CA
-1168958424,1168958463,US
-1168958464,1168958479,CA
-1168958480,1168958527,US
+1168958208,1168958271,US
+1168958272,1168958303,CA
+1168958304,1168958527,US
1168958528,1168958559,IN
-1168958560,1168960543,US
-1168960544,1168960591,CA
-1168960592,1168960607,US
-1168960608,1168960623,CA
-1168960624,1168960631,US
-1168960632,1168960767,CA
-1168960768,1168960799,US
-1168960800,1168960831,CA
-1168960832,1168960863,US
-1168960864,1168960887,CA
-1168960888,1168960895,US
-1168960896,1168961983,CA
-1168961984,1168961991,US
-1168961992,1168962007,CA
-1168962008,1168962015,US
-1168962016,1168962023,CA
-1168962024,1168962303,US
+1168958560,1168960671,US
+1168960672,1168960703,CA
+1168960704,1168961023,US
+1168961024,1168961791,CA
+1168961792,1168961807,US
+1168961808,1168961815,CA
+1168961816,1168961887,US
+1168961888,1168961919,CA
+1168961920,1168962303,US
1168962304,1168962559,CA
-1168962560,1168963039,US
-1168963040,1168963071,ES
+1168962560,1168963071,US
1168963072,1168965631,CA
1168965632,1168973823,US
1168973824,1168982015,CA
-1168982016,1169051903,US
-1169051904,1169051911,SG
-1169051912,1169057039,US
-1169057040,1169057055,BR
-1169057056,1169057071,US
-1169057072,1169057079,AR
-1169057080,1169057087,US
-1169057088,1169057119,BR
-1169057120,1169057127,US
-1169057128,1169057135,BR
-1169057136,1169057143,US
-1169057144,1169057151,BR
-1169057152,1169057215,US
-1169057216,1169057223,BR
-1169057224,1169057231,US
-1169057232,1169057247,BR
-1169057248,1169057263,US
-1169057264,1169057279,BR
-1169057280,1169092639,US
-1169092640,1169092671,GB
-1169092672,1169094713,US
-1169094714,1169094726,CA
-1169094727,1169094755,US
-1169094756,1169094763,AU
-1169094764,1169094771,IN
-1169094772,1169094925,US
-1169094926,1169094933,IN
-1169094934,1169095017,US
-1169095018,1169095027,IN
-1169095028,1169182975,US
+1168982016,1169182975,US
1169182976,1169183487,CA
1169183488,1169184767,US
1169184768,1169185023,CA
@@ -39384,217 +12628,63 @@
1169203200,1169211391,CA
1169211392,1170190335,US
1170190336,1170190847,GB
-1170190848,1170375167,US
-1170375168,1170375679,US
-1170375680,1170456959,US
-1170456960,1170456975,CR
-1170456976,1170456991,US
-1170456992,1170457007,PR
-1170457008,1170457599,US
-1170457600,1170457663,BR
-1170457664,1170461055,US
-1170461056,1170461695,CO
+1170190848,1170227199,US
+1170227200,1170231295,NL
+1170231296,1170461183,US
+1170461184,1170461695,CO
1170461696,1170465791,US
1170465792,1170466047,CY
-1170466048,1170466767,US
-1170466768,1170466783,MQ
-1170466784,1170467839,US
+1170466048,1170467839,US
1170467840,1170468351,DO
-1170468352,1170469055,US
-1170469056,1170469071,VG
-1170469072,1170470911,US
+1170468352,1170470911,US
1170470912,1170471167,ES
-1170471168,1170471263,US
-1170471264,1170471279,CA
-1170471280,1170471375,US
-1170471376,1170471391,UY
-1170471392,1170471903,US
-1170471904,1170471919,BE
-1170471920,1170472175,US
-1170472176,1170472191,DO
-1170472192,1170472703,US
+1170471168,1170472703,US
1170472704,1170472959,VG
1170472960,1170481151,CA
1170481152,1170489343,US
1170489344,1170497535,CA
1170497536,1170505727,US
1170505728,1170522111,CA
-1170522112,1170545083,US
-1170545084,1170545087,CN
-1170545088,1170573375,US
-1170573376,1170573391,RU
-1170573392,1170573392,US
-1170573393,1170573393,RU
-1170573394,1170573394,US
-1170573395,1170573439,RU
-1170573440,1170585047,US
-1170585048,1170585055,RU
-1170585056,1175977983,US
+1170522112,1175728639,US
+1175728640,1175728895,CA
+1175728896,1175977983,US
1175977984,1176502271,CA
-1176502272,1176511831,US
-1176511832,1176511839,CA
-1176511840,1176512703,US
-1176512704,1176512711,ZA
-1176512712,1176513479,US
-1176513480,1176513487,CA
-1176513488,1176513879,US
-1176513880,1176513887,GB
-1176513888,1176514271,US
-1176514272,1176514303,IN
-1176514304,1176609535,US
-1176609536,1176609583,CA
-1176609584,1176609599,US
-1176609600,1176609615,CA
-1176609616,1176609631,US
-1176609632,1176609663,CA
-1176609664,1176613927,US
-1176613928,1176613935,CA
-1176613936,1176616959,US
-1176616960,1176620047,CA
-1176620048,1176620055,US
-1176620056,1176620095,CA
-1176620096,1176620127,US
-1176620128,1176620175,CA
-1176620176,1176620183,US
-1176620184,1176620223,CA
-1176620224,1176620255,US
-1176620256,1176620287,CA
-1176620288,1176620319,US
-1176620320,1176620487,CA
-1176620488,1176620511,US
-1176620512,1176620743,CA
-1176620744,1176620783,US
-1176620784,1176620863,CA
-1176620864,1176620879,US
-1176620880,1176620911,CA
-1176620912,1176620915,US
-1176620916,1176620919,CA
-1176620920,1176620927,US
-1176620928,1176620967,CA
-1176620968,1176620975,US
-1176620976,1176620991,CA
-1176620992,1176620999,US
-1176621000,1176621599,CA
-1176621600,1176621631,US
-1176621632,1176621663,CA
-1176621664,1176621679,US
-1176621680,1176621695,CA
-1176621696,1176621727,US
-1176621728,1176621759,CA
-1176621760,1176621823,US
-1176621824,1176621863,CA
-1176621864,1176621887,US
-1176621888,1176622047,CA
-1176622048,1176622079,US
+1176502272,1176616959,US
+1176616960,1176620031,CA
+1176620032,1176620447,US
+1176620448,1176620479,CA
+1176620480,1176621311,US
+1176621312,1176621575,CA
+1176621576,1176622079,US
1176622080,1176622335,GB
-1176622336,1176622431,CA
-1176622432,1176622455,US
-1176622456,1176622559,CA
-1176622560,1176622591,US
-1176622592,1176623567,CA
-1176623568,1176623583,US
-1176623584,1176623615,CA
-1176623616,1176623871,US
+1176622336,1176622591,US
+1176622592,1176623103,CA
+1176623104,1176623871,US
1176623872,1176625151,CA
-1176625152,1176626119,US
-1176626120,1176626135,CA
-1176626136,1176626207,US
-1176626208,1176626271,CA
-1176626272,1176626287,US
-1176626288,1176626431,CA
-1176626432,1176626463,US
-1176626464,1176626495,BM
-1176626496,1176626559,US
-1176626560,1176626567,CA
-1176626568,1176626575,US
-1176626576,1176626591,CA
-1176626592,1176626975,US
-1176626976,1176627007,CA
-1176627008,1176627135,US
-1176627136,1176627199,CA
-1176627200,1176628223,US
-1176628224,1176628351,CA
-1176628352,1176628447,US
-1176628448,1176628671,CA
-1176628672,1176628703,US
-1176628704,1176628719,CA
-1176628720,1176628783,US
-1176628784,1176628799,CA
-1176628800,1176628863,US
-1176628864,1176628943,CA
-1176628944,1176628951,US
-1176628952,1176628975,CA
-1176628976,1176628991,US
-1176628992,1176629031,CA
-1176629032,1176629247,US
-1176629248,1176629279,CA
-1176629280,1176629295,US
-1176629296,1176629303,CA
-1176629304,1176629311,US
-1176629312,1176629343,CA
-1176629344,1176629375,US
-1176629376,1176629439,GI
-1176629440,1176629455,CA
-1176629456,1176629463,GI
-1176629464,1176629503,US
-1176629504,1176629519,CA
-1176629520,1176629535,NZ
-1176629536,1176629695,CA
-1176629696,1176629727,US
-1176629728,1176629759,CA
-1176629760,1176630271,US
+1176625152,1176626111,US
+1176626112,1176626127,CA
+1176626128,1176630271,US
1176630272,1176631295,CA
1176631296,1176631423,NL
1176631424,1176702975,US
1176702976,1176707071,CA
1176707072,1176731647,US
1176731648,1176735743,PR
-1176735744,1176735871,GB
-1176735872,1176735999,NG
-1176736000,1176736127,A2
-1176736128,1176736255,NG
-1176736256,1176736415,A2
-1176736416,1176736447,GN
-1176736448,1176736623,A2
-1176736624,1176736639,LR
-1176736640,1176736767,A2
-1176736768,1176737247,CR
-1176737248,1176737471,A2
-1176737472,1176737535,NI
-1176737536,1176737919,A2
-1176737920,1176737935,NG
-1176737936,1176738047,A2
-1176738048,1176738303,US
+1176735744,1176738303,US
1176738304,1176739071,CO
-1176739072,1176739327,US
-1176739328,1176739407,CO
-1176739408,1176739583,A2
+1176739072,1176739583,US
1176739584,1176739839,CO
1176739840,1176743935,CA
1176743936,1176752127,US
1176752128,1176756223,CA
1176756224,1176764415,US
1176764416,1176768511,PM
-1176768512,1176770751,US
-1176770752,1176770783,AE
-1176770784,1176770799,US
-1176770800,1176770803,KR
-1176770804,1176770811,US
-1176770812,1176770815,CA
-1176770816,1176770831,US
-1176770832,1176770847,BR
-1176770848,1176770851,BM
-1176770852,1176770919,US
-1176770920,1176770927,BR
+1176768512,1176770927,US
1176770928,1176770935,DO
1176770936,1176771327,US
1176771328,1176771583,KR
1176771584,1176771839,GB
-1176771840,1176771895,US
-1176771896,1176771903,AE
-1176771904,1176772079,US
-1176772080,1176772087,MX
-1176772088,1176776703,US
+1176771840,1176776703,US
1176776704,1176780799,CA
1176780800,1176895487,US
1176895488,1176897047,CA
@@ -39605,16 +12695,18 @@
1176904768,1176904775,US
1176904776,1176904871,CA
1176904872,1176904879,US
-1176904880,1176908223,CA
-1176908224,1176908231,MX
-1176908232,1176917831,CA
+1176904880,1176917831,CA
1176917832,1176917839,AU
1176917840,1176925007,CA
1176925008,1176925015,NG
1176925016,1176928255,CA
-1176928256,1176997375,US
-1176997376,1176997407,GB
-1176997408,1177022975,US
+1176928256,1177000703,US
+1177000704,1177000711,CA
+1177000712,1177000719,US
+1177000720,1177000735,CA
+1177000736,1177000751,US
+1177000752,1177000759,CA
+1177000760,1177022975,US
1177022976,1177023231,GB
1177023232,1177030655,US
1177030656,1177033727,AG
@@ -39622,61 +12714,31 @@
1177059328,1177061375,CA
1177061376,1177062143,US
1177062144,1177075455,CA
-1177075456,1177164255,US
-1177164256,1177164263,CA
-1177164264,1177164415,US
-1177164416,1177164479,CA
-1177164480,1177164511,US
-1177164512,1177164543,CA
-1177164544,1177164863,US
+1177075456,1177164863,US
1177164864,1177164895,CA
-1177164896,1177164927,US
-1177164928,1177164943,CA
-1177164944,1177165055,US
-1177165056,1177165823,CA
-1177165824,1177174143,US
-1177174144,1177174175,AE
-1177174176,1177175199,US
-1177175200,1177175231,CZ
-1177175232,1177182527,US
-1177182528,1177182591,CA
-1177182592,1177187663,US
-1177187664,1177187671,GB
-1177187672,1177210983,US
-1177210984,1177211007,FR
-1177211008,1177354239,US
-1177354240,1177355263,PR
-1177355264,1177355391,US
-1177355392,1177419775,PR
+1177164896,1177165055,US
+1177165056,1177165311,CA
+1177165312,1177354239,US
+1177354240,1177357311,PR
+1177357312,1177357567,US
+1177357568,1177405695,PR
+1177405696,1177405951,US
+1177405952,1177419775,PR
1177419776,1177505401,US
1177505402,1177505402,BB
1177505403,1177550847,US
1177550848,1178075135,CA
1178075136,1178599423,US
1178599424,1179910143,CA
-1179910144,1179924649,US
-1179924650,1179924650,US
-1179924651,1179924659,US
-1179924660,1179924660,US
-1179924661,1180113919,US
+1179910144,1180113919,US
1180113920,1180114431,AE
1180114432,1180124865,US
1180124866,1180124866,AE
-1180124867,1184829439,US
-1184829440,1184829695,A2
-1184829696,1184830769,US
-1184830770,1184830770,US
-1184830771,1189672191,US
-1189672192,1189672249,US
-1189672250,1189672251,A2
-1189672252,1189672447,US
-1189672448,1190170111,US
-1190170112,1190170127,UY
-1190170128,1190983455,US
-1190983456,1190983487,UA
-1190983488,1191673855,US
+1180124867,1191673855,US
1191673856,1191706623,CA
-1191706624,1192296447,US
+1191706624,1192232127,US
+1192232128,1192232159,PA
+1192232160,1192296447,US
1192296448,1192361983,CA
1192361984,1192427519,US
1192427520,1192460287,CA
@@ -39684,11 +12746,9 @@
1192468480,1192476671,CA
1192476672,1192488959,US
1192488960,1192493055,CA
-1192493056,1199718695,US
-1199718696,1199718703,A2
-1199718704,1199722495,US
-1199722496,1199722503,A2
-1199722504,1207975935,US
+1192493056,1207932159,US
+1207932160,1207932415,CA
+1207932416,1207975935,US
1207975936,1207980031,CA
1207980032,1208008703,US
1208008704,1208016895,CA
@@ -39696,252 +12756,27 @@
1208020992,1208025087,CA
1208025088,1208050943,US
1208050944,1208051199,CA
-1208051200,1208056111,US
-1208056112,1208056127,CN
-1208056128,1208074239,US
+1208051200,1208074239,US
1208074240,1208082431,CA
1208082432,1208090623,US
1208090624,1208107007,CA
-1208107008,1208122031,US
-1208122032,1208122047,GB
-1208122048,1208122063,CA
-1208122064,1208301455,US
-1208301456,1208301471,CA
-1208301472,1208324991,US
-1208324992,1208325119,CA
-1208325120,1208333567,US
-1208333568,1208333823,GB
-1208333824,1208337919,US
-1208337920,1208338175,A2
-1208338176,1208586372,US
-1208586373,1208586380,IN
-1208586381,1208586419,US
-1208586420,1208586427,AE
-1208586428,1208586447,US
-1208586448,1208586455,TR
-1208586456,1208586463,IN
-1208586464,1208586526,US
-1208586527,1208586536,TR
-1208586537,1208586563,US
-1208586564,1208586571,IN
-1208586572,1208586573,US
-1208586574,1208586581,VE
-1208586582,1208586589,LK
-1208586590,1208586597,EG
-1208586598,1208586742,US
-1208586743,1208586750,IN
-1208586751,1208586761,US
-1208586762,1208586774,GB
-1208586775,1208586871,US
-1208586872,1208586879,BS
-1208586880,1208586919,US
-1208586920,1208586927,AF
-1208586928,1208586957,US
-1208586958,1208586973,GB
-1208586974,1208586980,US
-1208586981,1208586988,EG
-1208586989,1208587025,US
-1208587026,1208587033,NZ
-1208587034,1208587045,US
-1208587046,1208587053,IN
-1208587054,1208587087,US
-1208587088,1208587095,LK
-1208587096,1208587169,US
-1208587170,1208587177,MX
-1208587178,1208587221,US
-1208587222,1208587229,LK
-1208587230,1208587321,US
-1208587322,1208587329,GB
-1208587330,1208587333,US
-1208587334,1208587341,CA
-1208587342,1208587345,US
-1208587346,1208587353,GB
-1208587354,1208587394,US
-1208587395,1208587402,EG
-1208587403,1208587418,US
-1208587419,1208587426,TR
-1208587427,1208587434,EG
-1208587435,1208587450,US
-1208587451,1208587458,LK
-1208587459,1208587479,US
-1208587480,1208587488,LK
-1208587489,1208587504,GB
-1208587505,1208587629,US
-1208587630,1208587637,MA
-1208587638,1208587671,US
-1208587672,1208587679,EG
-1208587680,1208587705,US
-1208587706,1208587713,CA
-1208587714,1208587728,US
-1208587729,1208587736,CA
-1208587737,1208587765,US
-1208587766,1208587773,LK
-1208587774,1208588071,US
-1208588072,1208588079,RU
-1208588080,1208588185,US
-1208588186,1208588193,EG
-1208588194,1208588591,US
-1208588592,1208588599,IN
-1208588600,1208588603,US
-1208588604,1208588611,ID
-1208588612,1208588714,US
-1208588715,1208588722,VE
-1208588723,1208588728,US
-1208588729,1208588760,GB
-1208588761,1208588771,US
-1208588772,1208588779,GB
-1208588780,1208588853,US
-1208588854,1208588861,IN
-1208588862,1208588953,US
-1208588954,1208588961,TR
-1208588962,1208588972,US
-1208588973,1208588985,GB
-1208588986,1208588989,US
-1208588990,1208589000,GB
-1208589001,1208589043,US
-1208589044,1208589051,BH
-1208589052,1208589073,US
-1208589074,1208589081,CA
-1208589082,1208589111,US
-1208589112,1208589119,VE
-1208589120,1208589279,US
-1208589280,1208589287,LK
-1208589288,1208589299,US
-1208589300,1208589307,LK
-1208589308,1208589341,US
-1208589342,1208589349,ID
-1208589350,1208589383,US
-1208589384,1208589391,BH
-1208589392,1208589399,US
-1208589400,1208589407,EG
-1208589408,1208589449,US
-1208589450,1208589457,EG
-1208589458,1208589578,US
-1208589579,1208589586,EG
-1208589587,1208589737,US
-1208589738,1208589745,EG
-1208589746,1208589783,US
-1208589784,1208589791,EG
-1208589792,1208589857,US
-1208589858,1208589865,MA
-1208589866,1208589901,US
-1208589902,1208589925,EG
-1208589926,1208589959,US
-1208589960,1208589967,IR
-1208589968,1208589975,VE
-1208589976,1208590007,US
-1208590008,1208590015,EG
-1208590016,1208590031,US
-1208590032,1208590047,EG
-1208590048,1208590091,US
-1208590092,1208590108,GB
-1208590109,1208590115,US
-1208590116,1208590123,EG
-1208590124,1208590161,US
-1208590162,1208590169,EG
-1208590170,1208590335,US
+1208107008,1208590335,US
1208590336,1208598527,CA
1208598528,1208647679,US
-1208647680,1208656319,CA
-1208656320,1208656351,US
-1208656352,1208656511,CA
-1208656512,1208656543,US
-1208656544,1208656575,CA
+1208647680,1208656575,CA
1208656576,1208656583,DO
-1208656584,1208656591,PA
-1208656592,1208656639,CA
-1208656640,1208656703,MY
-1208656704,1208656767,CA
-1208656768,1208656895,MY
-1208656896,1208656903,CA
-1208656904,1208656911,LB
-1208656912,1208657087,CA
-1208657088,1208657103,MA
-1208657104,1208657139,CA
-1208657140,1208657143,SE
-1208657144,1208657415,CA
-1208657416,1208657423,CH
-1208657424,1208657519,CA
-1208657520,1208657527,MA
-1208657528,1208657535,CA
-1208657536,1208657543,SE
-1208657544,1208657551,CA
-1208657552,1208657559,PH
-1208657560,1208657775,CA
-1208657776,1208657783,PA
-1208657784,1208657855,CA
-1208657856,1208657871,PA
-1208657872,1208657919,CA
-1208657920,1208657927,HK
-1208657928,1208657975,MA
-1208657976,1208657983,CA
-1208657984,1208657991,CN
-1208657992,1208658015,MA
-1208658016,1208658031,CA
-1208658032,1208658039,MA
-1208658040,1208658103,CA
-1208658104,1208658111,FR
-1208658112,1208658127,CA
-1208658128,1208658143,MA
-1208658144,1208658159,CA
-1208658160,1208658167,MA
-1208658168,1208659007,CA
-1208659008,1208659071,US
-1208659072,1208659135,CA
-1208659136,1208659151,CN
-1208659152,1208659327,CA
-1208659328,1208659359,US
-1208659360,1208659391,CA
-1208659392,1208659399,CN
-1208659400,1208659423,CA
-1208659424,1208659455,US
-1208659456,1208659519,PK
-1208659520,1208659551,US
-1208659552,1208659647,CA
-1208659648,1208659711,ID
-1208659712,1208659743,CA
-1208659744,1208659775,ID
-1208659776,1208659831,CA
-1208659832,1208659839,ID
-1208659840,1208659903,PK
-1208659904,1208659967,CA
+1208656584,1208659967,CA
1208659968,1208721407,US
1208721408,1208729599,CA
1208729600,1208770559,US
1208770560,1208774655,CA
1208774656,1208778751,US
1208778752,1208795135,CA
-1208795136,1208832391,US
-1208832392,1208832407,CN
-1208832408,1208832567,US
-1208832568,1208832575,CN
-1208832576,1208832583,US
-1208832584,1208832591,CN
-1208832592,1208832599,US
-1208832600,1208832607,CN
-1208832608,1208832623,IT
-1208832624,1208832631,NZ
-1208832632,1208832639,CN
-1208832640,1208832711,US
-1208832712,1208832719,CN
-1208832720,1208832775,US
-1208832776,1208832783,CA
-1208832784,1208833023,US
-1208833024,1208833031,PR
-1208833032,1208834415,US
-1208834416,1208834423,TK
-1208834424,1208834967,US
-1208834968,1208834975,ID
-1208834976,1208834991,US
-1208834992,1208834999,NP
-1208835000,1208835007,CA
-1208835008,1208852479,US
+1208795136,1208852479,US
1208852480,1208860671,CA
1208860672,1208918015,US
1208918016,1208922111,CA
-1208922112,1208926463,US
-1208926464,1208926719,EU
-1208926720,1208928767,US
+1208922112,1208928767,US
1208928768,1208929023,TW
1208929024,1208935935,US
1208935936,1208935943,AU
@@ -39952,7 +12787,8 @@
1208935976,1208935983,TW
1208935984,1208935991,IN
1208935992,1208935999,JP
-1208936000,1208936191,US
+1208936000,1208936003,HK
+1208936004,1208936191,US
1208936192,1208936199,AU
1208936200,1208936207,SG
1208936208,1208936215,HK
@@ -39962,51 +12798,16 @@
1208936240,1208936247,JP
1208936248,1208936255,IN
1208936256,1208936263,MY
-1208936264,1208936447,IN
-1208936448,1208938751,US
-1208938752,1208938759,AR
-1208938760,1208938775,BR
-1208938776,1208938783,CO
-1208938784,1208938791,CL
-1208938792,1208954879,US
-1208954880,1208957695,CA
-1208957696,1208957823,US
-1208957824,1208957855,CA
-1208957856,1208957919,US
-1208957920,1208957935,CA
-1208957936,1208957951,US
-1208957952,1208958975,CA
+1208936264,1208936295,US
+1208936296,1208936299,HK
+1208936300,1208954879,US
+1208954880,1208958975,CA
1208958976,1208975359,US
-1208975360,1208980503,CA
-1208980504,1208980511,US
-1208980512,1208982799,CA
-1208982800,1208982815,SE
-1208982816,1208983551,CA
-1208983552,1209002351,US
-1209002352,1209002367,A2
-1209002368,1209002495,US
-1209002496,1209002687,A2
-1209002688,1209003519,US
-1209003520,1209004031,A2
-1209004032,1209174231,US
-1209174232,1209174239,MY
-1209174240,1209189379,US
-1209189380,1209189395,MX
-1209189396,1209190147,US
-1209190148,1209190163,MX
-1209190164,1209190167,US
-1209190168,1209190195,GR
-1209190196,1209190851,US
-1209190852,1209190883,CA
-1209190884,1209271097,US
-1209271098,1209271098,US
-1209271099,1209338513,US
-1209338514,1209338514,US
-1209338515,1209357215,US
-1209357216,1209357231,SI
-1209357232,1209358591,US
+1208975360,1208983551,CA
+1208983552,1209358591,US
1209358592,1209358847,DE
-1209358848,1209434111,US
+1209358848,1209359103,GB
+1209359104,1209434111,US
1209434112,1209436671,BB
1209436672,1209437183,VC
1209437184,1209440767,BB
@@ -40021,192 +12822,59 @@
1209729024,1209786367,JM
1209786368,1209810943,US
1209810944,1209819135,CA
-1209819136,1209819903,US
-1209819904,1209819967,CA
-1209819968,1209820159,US
-1209820160,1209820223,CA
-1209820224,1209820399,US
-1209820400,1209820403,NG
-1209820404,1209821463,US
-1209821464,1209821471,GB
-1209821472,1209821703,US
-1209821704,1209821711,CN
-1209821712,1209821759,US
-1209821760,1209821791,CN
-1209821792,1209821983,US
-1209821984,1209821999,MX
-1209822000,1209822799,US
-1209822800,1209822815,DE
-1209822816,1209824287,US
-1209824288,1209824319,IN
-1209824320,1209824335,US
-1209824336,1209824339,FR
-1209824340,1209824511,US
+1209819136,1209824511,US
1209824512,1209824767,CN
-1209824768,1209825295,US
-1209825296,1209825311,GB
-1209825312,1209825343,US
-1209825344,1209825351,GB
-1209825352,1209860095,US
-1209860096,1209860127,IN
-1209860128,1209860575,US
-1209860576,1209860607,IN
-1209860608,1209860927,US
-1209860928,1209860959,AU
-1209860960,1209861119,US
+1209824768,1209861119,US
1209861120,1209861375,CA
-1209861376,1209861759,US
-1209861760,1209861887,FR
-1209861888,1209862143,US
+1209861376,1209862143,US
1209862144,1209862399,CA
1209862400,1209863167,US
1209863168,1209863423,CA
1209863424,1209863679,IN
1209863680,1209863935,US
1209863936,1209864191,CA
-1209864192,1209864639,US
-1209864640,1209864671,IN
-1209864672,1209865599,US
-1209865600,1209865727,IN
-1209865728,1209866111,US
-1209866112,1209866143,IN
-1209866144,1209866207,US
-1209866208,1209866239,IN
-1209866240,1209866751,US
-1209866752,1209867007,IN
-1209867008,1209867039,NZ
-1209867040,1209867199,US
-1209867200,1209867231,IN
-1209867232,1209867263,US
+1209864192,1209867263,US
1209867264,1209867519,CA
-1209867520,1209892607,US
-1209892608,1209892863,CA
-1209892864,1209893503,US
-1209893504,1209893519,MX
-1209893520,1209904959,US
-1209904960,1209904975,GB
-1209904976,1209917439,US
-1209917440,1209918367,CA
-1209918368,1209918399,US
-1209918400,1209925631,CA
+1209867520,1209917439,US
+1209917440,1209925631,CA
1209925632,1210253311,US
-1210253312,1210254703,CA
-1210254704,1210254719,NZ
-1210254720,1210261503,CA
-1210261504,1210381759,US
-1210381760,1210381823,RU
-1210381824,1210418175,US
-1210418176,1210418207,SG
-1210418208,1210449919,US
+1210253312,1210258431,CA
+1210258432,1210258687,US
+1210258688,1210261503,CA
+1210261504,1210420223,US
+1210420224,1210420479,IT
+1210420480,1210421503,US
+1210421504,1210421551,CA
+1210421552,1210449919,US
1210449920,1210580991,CA
-1210580992,1210861207,US
-1210861208,1210861215,GB
-1210861216,1210862191,US
-1210862192,1210862199,GB
-1210862200,1210865262,US
-1210865263,1210865270,MY
-1210865271,1210866435,US
-1210866436,1210866443,CL
-1210866444,1210925055,US
+1210580992,1210847231,US
+1210851328,1210925055,US
1210925056,1210941439,CA
-1210941440,1211032223,US
-1211032224,1211032255,VE
-1211032256,1211033087,US
+1210941440,1211033087,US
1211033088,1211033599,CO
-1211033600,1211035647,US
-1211035648,1211035663,PR
-1211035664,1211035711,US
+1211033600,1211035711,US
1211035712,1211035775,CA
-1211035776,1211035791,US
-1211035792,1211035807,CR
-1211035808,1211036031,US
-1211036032,1211036095,EC
-1211036096,1211036319,US
-1211036320,1211036335,CA
-1211036336,1211037519,US
-1211037520,1211037535,UY
-1211037536,1211037679,US
-1211037680,1211037695,AR
-1211037696,1211037999,US
-1211038000,1211038007,BB
-1211038008,1211038011,TT
-1211038012,1211038063,US
-1211038064,1211038079,TT
-1211038080,1211038719,US
+1211035776,1211038719,US
1211038720,1211038975,CY
-1211038976,1211039007,US
-1211039008,1211039023,VG
-1211039024,1211039087,US
-1211039088,1211039103,RU
-1211039104,1211236351,US
-1211236352,1211255551,PR
-1211255552,1211255807,US
-1211255808,1211269119,PR
-1211269120,1211304063,US
-1211304064,1211304159,CA
-1211304160,1211304207,US
-1211304208,1211304215,CA
-1211304216,1211304223,US
+1211038976,1211236351,US
+1211236352,1211269119,PR
+1211269120,1211303679,US
+1211303680,1211303935,CA
+1211303936,1211304223,US
1211304224,1211304239,CA
-1211304240,1211304287,US
-1211304288,1211304319,CA
-1211304320,1211304351,NL
-1211304352,1211304703,CA
-1211304704,1211304767,GB
-1211304768,1211304831,US
-1211304832,1211304959,CA
-1211304960,1211305983,US
-1211305984,1211306111,NL
-1211306112,1211306639,US
-1211306640,1211306647,CA
-1211306648,1211306755,US
-1211306756,1211306762,GB
-1211306763,1211306768,DE
-1211306769,1211306773,US
-1211306774,1211306879,CA
-1211306880,1211308167,US
+1211304240,1211304447,US
+1211304448,1211304703,CA
+1211304704,1211306783,US
+1211306784,1211306879,CA
+1211306880,1211308031,US
+1211308032,1211308159,CA
+1211308160,1211308167,US
1211308168,1211308175,CA
-1211308176,1211308191,US
-1211308192,1211308543,CA
-1211308544,1211308559,KN
-1211308560,1211308607,CA
-1211308608,1211308615,US
-1211308616,1211308623,CA
-1211308624,1211308639,US
-1211308640,1211308655,MX
-1211308656,1211308671,GB
-1211308672,1211308703,CA
-1211308704,1211308719,VG
-1211308720,1211308735,CA
-1211308736,1211308751,US
-1211308752,1211308767,CA
-1211308768,1211308783,US
-1211308784,1211310079,CA
-1211310080,1211310404,US
-1211310405,1211310405,IN
-1211310406,1211311378,US
-1211311379,1211311379,IN
-1211311380,1211311394,US
-1211311395,1211311395,IN
-1211311396,1211311883,US
-1211311884,1211311884,IN
-1211311885,1211311963,US
-1211311964,1211311964,IN
-1211311965,1211312569,US
-1211312570,1211312570,IN
-1211312571,1211313431,US
-1211313432,1211313439,IN
-1211313440,1211313567,US
-1211313568,1211313579,IN
-1211313580,1211314383,US
-1211314384,1211314399,CA
-1211314400,1211314415,US
-1211314416,1211314423,CA
-1211314424,1211314639,US
-1211314640,1211314671,CA
-1211314672,1211314863,US
-1211314864,1211314879,CA
-1211314880,1211316479,US
+1211308176,1211308287,US
+1211308288,1211308543,CA
+1211308544,1211308799,US
+1211308800,1211310079,CA
+1211310080,1211316479,US
1211316480,1211316991,CA
1211316992,1211317503,US
1211317504,1211317759,CA
@@ -40220,149 +12888,45 @@
1211333120,1211333631,VC
1211333632,1211333887,GD
1211333888,1211334655,VG
-1211334656,1211367487,US
-1211367488,1211367495,GB
-1211367496,1211367503,US
-1211367504,1211367519,CH
-1211367520,1211367615,US
-1211367616,1211367679,GB
-1211367680,1211367935,US
+1211334656,1211367935,US
1211367936,1211368191,CA
1211368192,1211368447,EE
-1211368448,1211384279,US
-1211384280,1211384287,GB
-1211384288,1211384327,US
-1211384328,1211384335,US
-1211384336,1211388159,US
-1211388160,1211388287,US
-1211388288,1211391455,US
-1211391456,1211391487,CN
-1211391488,1211391711,US
-1211391712,1211391719,CN
-1211391720,1211391727,US
-1211391728,1211391735,CN
-1211391736,1211392607,US
-1211392608,1211392639,GB
-1211392640,1211394063,US
-1211394064,1211394079,ES
-1211394080,1211404421,US
-1211404422,1211404422,CA
-1211404423,1211407293,US
-1211407294,1211407333,MX
-1211407334,1211419489,US
-1211419490,1211419497,CA
-1211419498,1211421739,US
-1211421740,1211421740,CA
-1211421741,1211432959,US
+1211368448,1211432959,US
1211432960,1211473919,CA
1211473920,1211596799,US
1211596800,1211605999,CA
1211606000,1211606003,US
1211606004,1211613183,CA
-1211613184,1212191304,US
-1212191305,1212191305,US
-1212191306,1212191367,US
-1212191368,1212191368,US
-1212191369,1216872447,US
+1211613184,1216872447,US
1216872448,1217396735,CA
-1217396736,1218674943,US
-1218674944,1218675199,IN
-1218675200,1218682879,US
-1218682880,1218691071,IN
-1218691072,1218693119,US
-1218693120,1218696191,IN
-1218696192,1218697215,US
-1218697216,1218697471,IN
-1218697472,1218706431,US
-1218706432,1218706687,CN
-1218706688,1218731807,US
-1218731808,1218731815,A2
-1218731816,1218778111,US
-1218778112,1218778367,SG
-1218778368,1218987263,US
+1217396736,1218697215,US
+1218697216,1218697727,IN
+1218697728,1218987263,US
1218987264,1218987519,CA
-1218987520,1219253319,US
-1219253320,1219253327,CA
-1219253328,1219256319,US
+1218987520,1219256319,US
1219256320,1219264511,CA
1219264512,1219272703,US
1219272704,1219276799,CA
-1219276800,1219290623,US
-1219290624,1219290751,AU
-1219290752,1219295295,US
-1219295296,1219295359,GR
-1219295360,1220701665,US
-1220701666,1220701666,US
-1220701667,1223182487,US
-1223182488,1223182503,ES
-1223182504,1223208831,US
-1223208832,1223208959,ES
-1223208960,1223222911,US
-1223222912,1223223039,BR
-1223223040,1223239167,US
-1223239168,1223239295,ES
-1223239296,1223244159,US
-1223244160,1223244223,BR
-1223244224,1223257599,US
-1223257600,1223257727,MX
-1223257728,1224278015,US
-1224278016,1224278023,GB
-1224278024,1224278111,US
-1224278112,1224278143,MY
-1224278144,1224278183,US
-1224278184,1224278191,CA
-1224278192,1224278359,US
-1224278360,1224278367,GB
-1224278368,1224278599,US
-1224278600,1224278607,AU
-1224278608,1224286719,US
-1224286720,1224286975,CA
-1224286976,1224290815,US
-1224290816,1224291071,CA
-1224291072,1224292095,US
-1224292096,1224292351,CA
-1224292352,1224295423,US
-1224295424,1224295679,VN
-1224295680,1224296447,US
-1224296448,1224296959,CA
-1224296960,1224299519,US
-1224299520,1224299775,CA
-1224299776,1224303359,US
-1224303360,1224303367,CA
-1224303368,1224311063,US
-1224311064,1224311071,MX
-1224311072,1224311247,US
-1224311248,1224311255,CA
-1224311256,1224311807,US
-1224311808,1224312319,CA
-1224312320,1224312327,GB
-1224312328,1224312911,US
-1224312912,1224312927,AU
-1224312928,1224314047,US
-1224314048,1224314079,GB
-1224314080,1224314687,US
-1224314688,1224314751,PA
-1224314752,1224317439,US
-1224317440,1224317695,CA
-1224317696,1224318207,US
-1224318208,1224318463,CA
-1224318464,1224321279,US
-1224321280,1224321535,CA
-1224321536,1224470527,US
-1224470528,1224473599,NL
+1219276800,1224210431,US
+1224210432,1224212479,NL
+1224212480,1224470527,US
+1224470528,1224471567,NL
+1224471568,1224471568,RU
+1224471569,1224473599,NL
1224473600,1224474623,US
1224474624,1224475647,GT
-1224475648,1224475903,PR
-1224475904,1224476671,US
-1224476672,1224478719,CW
+1224475648,1224476671,US
+1224476672,1224476927,CW
+1224476928,1224477183,US
+1224477184,1224478719,CW
1224478720,1224480767,US
1224480768,1224484863,JM
1224484864,1224493055,GT
1224493056,1224497151,US
1224497152,1224501247,GT
-1224501248,1224503551,JM
-1224503552,1224503807,BS
-1224503808,1224525568,JM
+1224501248,1224523520,JM
+1224523521,1224523775,US
+1224523776,1224525568,JM
1224525569,1224525823,US
1224525824,1224539904,JM
1224539905,1224701942,US
@@ -40379,157 +12943,33 @@
1244848128,1244852223,CA
1244852224,1244864511,US
1244864512,1244872703,CA
-1244872704,1244996655,US
-1244996656,1244996663,CH
-1244996664,1245050689,US
+1244872704,1245050689,US
1245050690,1245050690,SA
1245050691,1245052289,US
1245052290,1245052545,SA
-1245052546,1245087399,US
-1245087400,1245087407,ES
-1245087408,1245144575,US
+1245052546,1245144575,US
1245144576,1245144831,CH
-1245144832,1245168215,US
-1245168216,1245168219,CH
-1245168220,1245173215,US
-1245173216,1245173223,CH
-1245173224,1245178423,US
-1245178424,1245178431,IE
-1245178432,1245183999,US
+1245144832,1245183999,US
1245184000,1245446143,CA
-1245446144,1245662179,US
-1245662180,1245662182,US
-1245662183,1245663891,US
-1245663892,1245663892,US
-1245663893,1245663899,US
-1245663900,1245663900,US
-1245663901,1245664931,US
-1245664932,1245664932,US
-1245664933,1245664939,US
-1245664940,1245664940,US
-1245664941,1245665737,US
-1245665738,1245665739,US
-1245665740,1245665745,US
-1245665746,1245665747,US
-1245665748,1246864899,US
-1246864900,1246864958,EG
-1246864959,1246865663,US
-1246865664,1246865919,GB
-1246865920,1246874127,US
-1246874128,1246874216,GB
-1246874217,1246874368,US
-1246874369,1246874496,GB
-1246874497,1246874558,US
-1246874559,1246874590,GB
-1246874591,1246875509,US
-1246875510,1246875520,NL
-1246875521,1246887935,US
-1246887936,1246888191,PL
-1246888192,1246890463,US
+1245446144,1246890431,US
+1246890432,1246890463,CA
1246890464,1246890464,US
-1246890465,1246902783,US
+1246890465,1246890495,CA
+1246890496,1246902783,US
1246902784,1246903039,NL
-1246903040,1246937087,US
+1246903040,1246923519,US
+1246923520,1246923775,AU
+1246923776,1246937087,US
1246937088,1246945279,CA
-1246945280,1247027199,US
-1247027200,1247034367,A2
-1247034368,1247034623,US
-1247034624,1247035391,A2
-1247035392,1247072719,US
-1247072720,1247072735,NL
-1247072736,1247073791,US
-1247073792,1247074303,A2
-1247074304,1247123455,US
+1246945280,1247119439,US
+1247119440,1247119447,KW
+1247119448,1247119967,US
+1247119968,1247119975,KW
+1247119976,1247123455,US
1247123456,1247123711,GB
1247123712,1247123967,US
1247123968,1247124223,LU
-1247124224,1247481855,US
-1247481856,1247481863,CN
-1247481864,1247481887,US
-1247481888,1247481903,CN
-1247481904,1247481911,US
-1247481912,1247481927,CN
-1247481928,1247481951,US
-1247481952,1247481959,CN
-1247481960,1247481983,US
-1247481984,1247482015,GB
-1247482016,1247482047,CN
-1247482048,1247482063,CA
-1247482064,1247482079,US
-1247482080,1247482087,CN
-1247482088,1247482095,US
-1247482096,1247482103,CN
-1247482104,1247482111,US
-1247482112,1247482175,CN
-1247482176,1247482239,US
-1247482240,1247482255,GB
-1247482256,1247482263,CN
-1247482264,1247482271,US
-1247482272,1247482303,CN
-1247482304,1247482343,US
-1247482344,1247482351,CN
-1247482352,1247482383,US
-1247482384,1247482391,CN
-1247482392,1247482399,US
-1247482400,1247482431,CN
-1247482432,1247482495,US
-1247482496,1247482511,CN
-1247482512,1247482519,US
-1247482520,1247482543,CN
-1247482544,1247482551,US
-1247482552,1247482559,CN
-1247482560,1247482567,US
-1247482568,1247482583,CN
-1247482584,1247482615,US
-1247482616,1247482623,CN
-1247482624,1247482815,US
-1247482816,1247482847,CN
-1247482848,1247482927,US
-1247482928,1247482935,BO
-1247482936,1247482943,US
-1247482944,1247482951,BO
-1247482952,1247482967,US
-1247482968,1247482975,CN
-1247482976,1247483015,US
-1247483016,1247483039,CN
-1247483040,1247483047,CA
-1247483048,1247483079,US
-1247483080,1247483095,CN
-1247483096,1247483111,US
-1247483112,1247483119,CN
-1247483120,1247483647,US
-1247483648,1247483655,CN
-1247483656,1247483679,US
-1247483680,1247483711,CN
-1247483712,1247483743,US
-1247483744,1247483759,CN
-1247483760,1247483767,US
-1247483768,1247483823,CN
-1247483824,1247483831,US
-1247483832,1247483871,CN
-1247483872,1247485183,US
-1247485184,1247485191,CN
-1247485192,1247485231,US
-1247485232,1247485263,CN
-1247485264,1247485439,US
-1247485440,1247485455,CN
-1247485456,1247485463,US
-1247485464,1247485471,CN
-1247485472,1247485487,US
-1247485488,1247485503,CN
-1247485504,1247485511,US
-1247485512,1247485543,CN
-1247485544,1247485631,US
-1247485632,1247485639,CN
-1247485640,1247485647,US
-1247485648,1247485671,CN
-1247485672,1247485679,US
-1247485680,1247485727,CN
-1247485728,1247485735,US
-1247485736,1247485743,CN
-1247485744,1247485751,US
-1247485752,1247485951,CN
-1247485952,1247490047,US
+1247124224,1247490047,US
1247494144,1248864255,US
1248864256,1248866303,CA
1248866304,1248885759,US
@@ -40538,11 +12978,7 @@
1248899072,1248900095,CA
1248900096,1248902143,US
1248902144,1248903167,CA
-1248903168,1248903695,US
-1248903696,1248903711,ZA
-1248903712,1248903775,US
-1248903776,1248903791,FR
-1248903792,1248913407,US
+1248903168,1248913407,US
1248913408,1248915455,MF
1248915456,1248919551,US
1248919552,1248920575,CA
@@ -40552,7 +12988,9 @@
1248936960,1248939007,CA
1248939008,1248946175,US
1248946176,1248947199,VG
-1248947200,1248958463,US
+1248947200,1248956415,US
+1248956416,1248957439,CA
+1248957440,1248958463,US
1248958464,1248959487,CA
1248959488,1248964607,US
1248964608,1248966655,CA
@@ -40562,38 +13000,7 @@
1249010688,1249011711,CA
1249011712,1249019903,US
1249019904,1249020927,CA
-1249020928,1249026455,US
-1249026456,1249026463,ES
-1249026464,1249026703,US
-1249026704,1249026711,ZA
-1249026712,1249026767,US
-1249026768,1249026775,CA
-1249026776,1249026783,MX
-1249026784,1249027127,US
-1249027128,1249027135,ZA
-1249027136,1249027143,AU
-1249027144,1249027175,US
-1249027176,1249027183,IN
-1249027184,1249027223,US
-1249027224,1249027231,GB
-1249027232,1249027351,US
-1249027352,1249027359,CA
-1249027360,1249027391,US
-1249027392,1249027399,PH
-1249027400,1249027503,US
-1249027504,1249027519,CA
-1249027520,1249027647,US
-1249027648,1249027655,GB
-1249027656,1249027719,US
-1249027720,1249027727,GR
-1249027728,1249027735,CO
-1249027736,1249027823,US
-1249027824,1249027839,CA
-1249027840,1249027895,US
-1249027896,1249027903,PL
-1249027904,1249027919,US
-1249027920,1249027935,AU
-1249027936,1249029119,US
+1249020928,1249029119,US
1249029120,1249030143,CA
1249030144,1249036287,US
1249036288,1249037311,TC
@@ -40601,21 +13008,10 @@
1249038336,1249040383,CA
1249040384,1249046527,US
1249046528,1249047551,BM
-1249047552,1249050623,US
-1249050624,1249051135,US
-1249051136,1249051391,US
-1249051392,1249051647,US
-1249051648,1249051903,US
-1249051904,1249052671,US
-1249052672,1249059327,US
+1249047552,1249059327,US
1249059328,1249059839,CA
1249059840,1249082367,US
-1249082368,1249083391,CA
-1249083392,1249091583,US
-1249091584,1249092607,US
-1249092608,1249094015,US
-1249094016,1249094143,RO
-1249094144,1249099775,US
+1249083392,1249099775,US
1249099776,1249101823,CA
1249101824,1249102847,PR
1249102848,1249103103,US
@@ -40628,20 +13024,15 @@
1249130496,1249131519,JM
1249131520,1249139711,US
1249139712,1249140735,MF
-1249140736,1249163263,US
-1249163264,1249165407,CA
-1249165408,1249165471,US
-1249165472,1249165487,CA
-1249165488,1249165567,US
-1249165568,1249165759,CA
-1249165760,1249165791,US
-1249165792,1249166335,CA
-1249166336,1249166367,BZ
-1249166368,1249171455,US
+1249140736,1249142015,US
+1249142016,1249142271,GB
+1249142272,1249163263,US
+1249163264,1249165311,CA
+1249165312,1249165823,US
+1249165824,1249166335,CA
+1249166336,1249171455,US
1249171456,1249173503,CA
-1249173504,1249179967,US
-1249179968,1249179983,SE
-1249179984,1249191935,US
+1249173504,1249191935,US
1249191936,1249193983,CA
1249193984,1249195007,US
1249195008,1249196031,CA
@@ -40649,51 +13040,21 @@
1249203200,1249204223,GD
1249204224,1249210367,US
1249210368,1249212415,KY
-1249212416,1249215503,US
-1249215504,1249215511,CA
-1249215512,1249217535,US
+1249212416,1249217535,US
1249217536,1249218559,CA
-1249218560,1249227007,US
-1249227008,1249227071,CY
-1249227072,1249227135,VG
-1249227136,1249227167,US
-1249227168,1249227199,VG
-1249227200,1249227263,HK
+1249218560,1249227263,US
1249227264,1249227519,VG
-1249227520,1249228031,US
-1249228032,1249228063,CZ
-1249228064,1249228095,US
-1249228096,1249228223,UA
-1249228224,1249228239,CZ
-1249228240,1249228287,US
-1249228288,1249228351,SC
-1249228352,1249229216,US
-1249229217,1249229217,CA
-1249229218,1249229591,US
-1249229592,1249229599,ES
-1249229600,1249234687,US
+1249227520,1249234687,US
1249234688,1249234943,GB
1249234944,1249236991,US
1249236992,1249239039,KY
1249239040,1249245183,US
1249245184,1249247231,CA
1249247232,1249256447,US
-1249256448,1249256588,CA
-1249256589,1249256613,US
-1249256614,1249256649,CA
-1249256650,1249256687,GB
-1249256688,1249256835,CA
-1249256836,1249256868,US
-1249256869,1249256999,CA
-1249257000,1249257009,LB
-1249257010,1249257178,CA
-1249257179,1249257213,GB
-1249257214,1249257471,CA
+1249256448,1249257471,CA
1249257472,1249260543,US
1249260544,1249261567,CA
-1249261568,1249266279,US
-1249266280,1249266287,GB
-1249266288,1249272831,US
+1249261568,1249272831,US
1249272832,1249273855,CA
1249273856,1249310719,US
1249310720,1249311743,CA
@@ -40703,33 +13064,19 @@
1249335296,1249337343,CA
1249337344,1249359871,US
1249359872,1249361919,CA
-1249361920,1249381503,US
-1249381504,1249381519,DE
-1249381520,1249381759,US
-1249381760,1249381763,DE
-1249381764,1249381764,DE
-1249381765,1249381775,DE
-1249381776,1249382287,US
-1249382288,1249382303,DE
-1249382304,1249384447,US
+1249361920,1249379327,US
+1249379328,1249380351,CA
+1249380352,1249384447,US
1249384448,1249386495,PR
1249386496,1249391615,US
1249391616,1249392639,CA
1249392640,1249396735,US
1249396736,1249397759,CA
-1249397760,1249402375,US
-1249402376,1249402383,CA
-1249402384,1249409023,US
+1249397760,1249409023,US
1249409024,1249410047,CA
-1249410048,1249439823,US
-1249439824,1249439839,BR
-1249439840,1249440063,US
-1249440064,1249440127,CW
-1249440128,1249440255,US
-1249440256,1249440271,CW
-1249440272,1249440279,US
-1249440280,1249440287,FR
-1249440288,1249452031,US
+1249410048,1249434623,US
+1249434624,1249435647,CA
+1249435648,1249452031,US
1249452032,1249453055,CA
1249453056,1249474559,US
1249474560,1249475583,CA
@@ -40740,15 +13087,8 @@
1249479936,1249480191,HK
1249480192,1249484799,US
1249484800,1249486847,CA
-1249486848,1249492679,US
-1249492680,1249492687,AU
-1249492688,1249492727,US
-1249492728,1249492735,SA
-1249492736,1249492895,CA
-1249492896,1249492903,BR
-1249492904,1249492959,CA
-1249492960,1249492975,US
-1249492976,1249492991,CA
+1249486848,1249492735,US
+1249492736,1249492991,CA
1249492992,1249506303,US
1249506304,1249507327,CA
1249507328,1249516031,US
@@ -40759,57 +13099,38 @@
1249531904,1249533951,GD
1249533952,1249542143,US
1249542144,1249544191,CA
-1249544192,1249550351,US
-1249550352,1249550367,GB
-1249550368,1249550375,HK
-1249550376,1249550391,US
-1249550392,1249550399,TW
-1249550400,1249550863,US
-1249550864,1249550879,GB
-1249550880,1249550903,US
-1249550904,1249550911,GB
-1249550912,1249550935,US
-1249550936,1249550943,BY
-1249550944,1249562623,US
+1249544192,1249562623,US
1249562624,1249564671,CA
-1249564672,1249567558,US
-1249567559,1249567562,RU
-1249567563,1249567564,US
-1249567565,1249567569,RU
-1249567570,1249568319,US
-1249568320,1249568327,NL
-1249568328,1249571839,US
+1249564672,1249571839,US
1249571840,1249572863,CA
1249572864,1249576959,US
-1249576960,1249577403,CA
-1249577404,1249577468,US
-1249577469,1249577983,CA
+1249576960,1249577983,CA
1249577984,1249592319,US
1249592320,1249593343,CA
1249593344,1249598463,US
1249598464,1249599487,CA
1249599488,1249637887,US
1249637888,1249638143,CA
-1249638144,1249690751,US
-1249690752,1249690783,HK
-1249690784,1249690815,AU
-1249690816,1249710591,US
+1249638144,1249710143,US
+1249710144,1249710207,CN
+1249710208,1249710271,NL
+1249710272,1249710591,BE
1249710592,1249710847,DE
1249710848,1249715711,US
1249715712,1249715967,DE
1249715968,1249716735,US
1249716736,1249716991,DE
1249716992,1249720319,US
-1249720320,1249720352,AU
-1249720353,1249720353,JP
-1249720354,1249720575,AU
-1249720576,1249720599,GB
+1249720320,1249720511,AU
+1249720512,1249720527,IN
+1249720528,1249720575,AU
+1249720576,1249720591,FR
+1249720592,1249720599,GB
1249720600,1249720607,IT
-1249720608,1249720623,CH
-1249720624,1249720703,GB
-1249720704,1249720751,US
-1249720752,1249720767,GB
-1249720768,1249721343,US
+1249720608,1249720831,GB
+1249720832,1249721119,US
+1249721120,1249721135,CA
+1249721136,1249721343,US
1249721344,1249721351,AT
1249721352,1249721359,BE
1249721360,1249721367,CH
@@ -40831,7 +13152,9 @@
1249721512,1249721519,TR
1249721520,1249721527,ZA
1249721528,1249721535,DK
-1249721536,1249721599,GB
+1249721536,1249721543,US
+1249721544,1249721551,GB
+1249721552,1249721599,US
1249721600,1249721607,AT
1249721608,1249721615,BE
1249721616,1249721623,CH
@@ -40858,8 +13181,7 @@
1249721792,1249721799,KE
1249721800,1249721807,TR
1249721808,1249721815,ZA
-1249721816,1249721855,GB
-1249721856,1249722111,US
+1249721816,1249722111,US
1249722112,1249722367,IN
1249722368,1249725439,US
1249725440,1249725695,NL
@@ -40867,133 +13189,41 @@
1249725952,1249726207,NL
1249726208,1249727999,US
1249728000,1249728255,HU
-1249728256,1249736959,US
-1249736960,1249737471,EU
-1249737472,1249744895,US
+1249728256,1249744895,US
1249744896,1249745151,TW
-1249745152,1249773023,US
-1249773024,1249773055,CA
-1249773056,1249796095,US
+1249745152,1249754390,US
+1249754391,1249754391,DE
+1249754392,1249796095,US
1249796096,1249804287,CA
-1249804288,1249838847,US
-1249838848,1249838911,IN
-1249838912,1249838975,US
-1249838976,1249839039,IN
-1249839040,1249839423,US
-1249839424,1249839487,VE
-1249839488,1249843231,US
-1249843232,1249843247,IN
-1249843248,1249843423,US
-1249843424,1249843439,IN
-1249843440,1249846847,US
-1249846848,1249846879,GB
-1249846880,1249846911,CN
-1249846912,1249847039,US
-1249847040,1249847167,IN
-1249847168,1249847839,US
-1249847840,1249847871,IN
-1249847872,1249847903,US
-1249847904,1249847935,NO
-1249847936,1249848927,US
-1249848928,1249848959,AU
-1249848960,1249850367,US
-1249850368,1249850383,IN
-1249850384,1249850511,US
-1249850512,1249850527,CA
-1249850528,1249850543,US
-1249850544,1249850559,IN
-1249850560,1249850575,US
-1249850576,1249850591,IN
-1249850592,1249850607,NG
-1249850608,1249851903,US
+1249804288,1249851903,US
1249851904,1249852159,FR
-1249852160,1249852447,US
-1249852448,1249852479,IN
-1249852480,1249852767,US
-1249852768,1249852775,ID
-1249852776,1249886207,US
+1249852160,1249886207,US
1249886208,1249902591,CA
1249902592,1254490111,US
1254490112,1254555647,CA
-1254555648,1254604047,US
-1254604048,1254604063,ES
-1254604064,1254604159,US
-1254604160,1254604175,GB
-1254604176,1254604191,US
-1254604192,1254604199,IE
-1254604200,1254621183,US
-1254621184,1254629375,CA
+1254555648,1254621183,US
+1254621184,1254622207,CA
+1254622208,1254622463,US
+1254622464,1254629375,CA
1254629376,1254704383,US
1254704384,1254704639,PH
-1254704640,1254704903,US
-1254704904,1254704911,PH
-1254704912,1254713359,US
-1254713360,1254713407,CA
-1254713408,1254738239,US
-1254738240,1254738255,CA
-1254738256,1254738391,US
-1254738392,1254738399,IE
-1254738400,1254752191,US
-1254752192,1254752207,CH
-1254752208,1254924687,US
-1254924688,1254924703,RO
-1254924704,1254978751,US
+1254704640,1254978751,US
1254978752,1254978767,LB
-1254978768,1254993919,US
-1254993920,1254994175,CA
-1254994176,1255002111,US
+1254978768,1254989823,US
+1254989824,1254998015,CA
+1254998016,1255002111,US
1255002112,1255006207,CA
-1255006208,1255007487,US
-1255007488,1255007711,CA
-1255007712,1255011327,US
-1255011328,1255011335,CA
-1255011336,1255011343,US
-1255011344,1255011359,CA
-1255011360,1255011367,US
-1255011368,1255011551,CA
-1255011552,1255011559,US
-1255011560,1255011839,CA
-1255011840,1255039503,US
-1255039504,1255039519,CA
-1255039520,1255039631,US
-1255039632,1255039663,CA
-1255039664,1255044351,US
-1255044352,1255044479,CA
-1255044480,1255047167,US
+1255006208,1255011583,US
+1255011584,1255011839,CA
+1255011840,1255047167,US
1255047168,1255055359,CA
-1255055360,1255057887,US
-1255057888,1255057919,NL
-1255057920,1255058671,US
-1255058672,1255058687,GB
-1255058688,1255059327,US
-1255059328,1255059343,NL
-1255059344,1255059359,US
-1255059360,1255059391,CA
-1255059392,1255060159,US
-1255060160,1255060191,NL
-1255060192,1255060607,US
-1255060608,1255060623,CW
-1255060624,1255060655,US
-1255060656,1255060671,CW
-1255060672,1255061631,US
-1255061632,1255061647,CA
-1255061648,1255061695,US
-1255061696,1255061727,CR
-1255061728,1255061983,US
-1255061984,1255062015,CA
-1255062016,1255062463,US
-1255062464,1255062527,PA
-1255062528,1255210495,US
+1255055360,1255210495,US
1255210496,1255211007,DE
1255211008,1255245311,US
1255245312,1255245567,BR
1255245568,1255264511,US
1255264512,1255264767,SG
-1255264768,1255265279,US
-1255265280,1255266303,SG
-1255266304,1255274047,US
-1255274048,1255274079,GB
-1255274080,1255274495,US
+1255264768,1255274495,US
1255274496,1255274751,SG
1255274752,1255276543,US
1255276544,1255342079,CA
@@ -41003,9 +13233,7 @@
1255372288,1255372543,PA
1255372544,1255372799,US
1255372800,1255373055,DE
-1255373056,1255373567,US
-1255373568,1255373599,PH
-1255373600,1255489535,US
+1255373056,1255489535,US
1255489536,1255505919,PR
1255505920,1255514111,US
1255514112,1255522303,CA
@@ -41013,57 +13241,27 @@
1255571456,1255579647,CA
1255579648,1255669759,US
1255669760,1255735295,CA
-1255735296,1255746799,US
-1255746800,1255746815,BB
-1255746816,1255749247,US
-1255749248,1255749311,CH
-1255749312,1255756799,US
-1255756800,1255756815,CA
-1255756816,1255768063,US
-1255768064,1255768575,CA
-1255768576,1255770367,US
+1255735296,1255770367,US
1255770368,1255770623,CA
-1255770624,1255784959,US
-1255784960,1255784967,BE
-1255784968,1255788511,US
-1255788512,1255788543,BE
-1255788544,1255792127,US
+1255770624,1255792127,US
1255792128,1255792383,IL
-1255792384,1255792767,US
-1255792768,1255792895,IL
-1255792896,1255972863,US
+1255792384,1255972863,US
1255972864,1255981055,CA
1255981056,1256001535,US
1256001536,1256005631,CA
1256005632,1256030207,US
-1256030208,1256030463,CA
-1256030464,1256030663,US
-1256030664,1256030671,CA
-1256030672,1256030687,US
-1256030688,1256034303,CA
-1256034304,1256054271,US
-1256054272,1256054303,CZ
-1256054304,1256054527,US
-1256054528,1256054783,CZ
-1256054784,1256057975,US
-1256057976,1256057983,BZ
-1256057984,1256079359,US
+1256030208,1256034303,CA
+1256034304,1256054399,US
+1256054400,1256054783,CZ
+1256054784,1256079359,US
1256079360,1256087551,KY
-1256087552,1258767359,US
-1258767360,1258767615,US
-1258767616,1258958095,US
-1258958096,1258958103,CA
-1258958104,1263265535,US
-1263265536,1263265599,CA
-1263265600,1263266815,US
-1263266816,1263266823,CN
-1263266824,1263266855,US
-1263266856,1263266863,CN
-1263266864,1263268275,US
-1263268276,1263268340,CA
-1263268341,1263268343,US
-1263268344,1263268351,CA
-1263268352,1263271423,US
+1256087552,1262783487,US
+1262783488,1262783743,CA
+1262783744,1262783871,US
+1262783872,1262783999,CA
+1262784000,1262784127,US
+1262784128,1262784255,CA
+1262784256,1263271423,US
1263271424,1263271679,CA
1263271680,1264717823,US
1264717824,1264718079,CA
@@ -41074,71 +13272,18 @@
1264719872,1264762879,US
1264762880,1264763391,CA
1264763392,1264763647,IE
-1264763648,1264764927,CA
-1264764928,1264764959,US
-1264764960,1264766975,CA
-1264766976,1264968406,US
-1264968407,1264968407,US
-1264968408,1264980735,US
-1264980736,1264980743,CA
-1264980744,1264982847,US
-1264982848,1264982855,CA
-1264982856,1264982895,US
-1264982896,1264982903,AF
-1264982904,1264984575,US
-1264984576,1264984583,VE
-1264984584,1264990975,US
+1264763648,1264766975,CA
+1264766976,1264990975,US
1264990976,1264991231,NL
1264991232,1266147327,US
1266147328,1266155519,CA
-1266155520,1266489663,US
-1266489664,1266489695,CA
-1266489696,1266498175,US
-1266498176,1266498303,MA
-1266498304,1266516817,US
-1266516818,1266516830,IE
-1266516831,1266614599,US
-1266614600,1266614607,CA
-1266614608,1266614655,US
-1266614656,1266614783,CA
-1266614784,1266615551,US
-1266615552,1266615679,CA
-1266615680,1266615711,US
-1266615712,1266615727,SE
-1266615728,1266615743,CA
-1266615744,1266616639,US
-1266616640,1266616655,CA
-1266616656,1266617663,US
-1266617664,1266617695,GB
-1266617696,1266617823,US
-1266617824,1266617839,GB
-1266617840,1268252671,US
+1266155520,1267934968,US
+1267934969,1267934969,CA
+1267934970,1268252671,US
1268252672,1268776959,CA
1268776960,1275600895,US
1275600896,1275604991,BM
-1275604992,1275605263,US
-1275605264,1275605279,PL
-1275605280,1275605567,US
-1275605568,1275605583,PL
-1275605584,1275605823,US
-1275605824,1275605839,PL
-1275605840,1275606207,US
-1275606208,1275606223,PL
-1275606224,1275606367,US
-1275606368,1275606383,PL
-1275606384,1275606975,US
-1275606976,1275606991,PL
-1275606992,1275607071,US
-1275607072,1275607087,PL
-1275607088,1275607407,US
-1275607408,1275607423,PL
-1275607424,1275608319,US
-1275608320,1275608335,PL
-1275608336,1275608575,US
-1275608576,1275608591,PL
-1275608592,1275608831,US
-1275608832,1275608847,PL
-1275608848,1275621375,US
+1275604992,1275621375,US
1275621376,1275625471,CA
1275625472,1275658239,US
1275658240,1275658495,GB
@@ -41149,681 +13294,73 @@
1275665408,1275666431,US
1275666432,1275674623,CA
1275674624,1275707391,US
-1275707392,1275708927,CA
-1275708928,1275708991,US
-1275708992,1275711487,CA
+1275707392,1275711487,CA
1275711488,1275712511,US
1275712512,1275714047,CA
1275714048,1275714559,US
-1275714560,1275714815,CA
-1275714816,1275714831,US
-1275714832,1275714847,IE
-1275714848,1275715583,CA
+1275714560,1275715583,CA
1275715584,1275756543,US
1275756544,1275772927,CA
1275772928,1275789311,US
1275789312,1275822079,CA
-1275822080,1275854967,US
-1275854968,1275854975,CA
-1275854976,1275858215,US
-1275858216,1275858223,BB
-1275858224,1275858239,US
-1275858240,1275858247,CA
-1275858248,1275859671,US
-1275859672,1275859679,AU
-1275859680,1275859711,US
-1275859712,1275859719,PR
-1275859720,1275859727,US
-1275859728,1275859743,PR
-1275859744,1275859807,US
-1275859808,1275859815,AE
-1275859816,1275860087,US
-1275860088,1275860095,MX
-1275860096,1275861039,US
-1275861040,1275861055,CA
-1275861056,1275861103,US
-1275861104,1275861119,GT
-1275861120,1275864175,US
-1275864176,1275864183,CA
-1275864184,1275865055,US
-1275865056,1275865063,AU
-1275865064,1275865383,US
-1275865384,1275865391,CA
-1275865392,1275869087,US
-1275869088,1275869095,CA
-1275869096,1275869103,IL
-1275869104,1275869535,US
-1275869536,1275869551,GB
-1275869552,1275869895,US
-1275869896,1275869903,IL
-1275869904,1275870647,US
-1275870648,1275870655,CA
-1275870656,1275870671,US
-1275870672,1275870695,CA
-1275870696,1275871719,US
-1275871720,1275871727,GB
-1275871728,1275872895,US
-1275872896,1275872903,AU
-1275872904,1275872911,CA
-1275872912,1275872927,US
-1275872928,1275872935,CA
-1275872936,1275873095,US
-1275873096,1275873103,CA
-1275873104,1275873183,US
-1275873184,1275873215,AU
-1275873216,1275873535,US
-1275873536,1275873543,CG
-1275873544,1275873639,US
-1275873640,1275873647,SA
-1275873648,1275875135,US
-1275875136,1275875143,CA
-1275875144,1275875247,US
-1275875248,1275875255,CA
-1275875256,1275875359,US
-1275875360,1275875367,AU
-1275875368,1275875479,US
-1275875480,1275875503,AU
-1275875504,1275875767,US
-1275875768,1275875775,CA
-1275875776,1275876623,US
-1275876624,1275876631,GB
-1275876632,1275876839,US
-1275876840,1275876847,CA
-1275876848,1275877111,US
-1275877112,1275877119,CA
-1275877120,1275877695,US
-1275877696,1275877703,PK
-1275877704,1275879463,US
-1275879464,1275879471,GB
-1275879472,1275879487,AU
-1275879488,1275879503,GB
-1275879504,1275879511,US
-1275879512,1275879519,GB
-1275879520,1275879527,AU
-1275879528,1275879535,US
-1275879536,1275879551,AU
-1275879552,1275879711,US
-1275879712,1275879743,CA
-1275879744,1275879791,US
-1275879792,1275879807,GB
-1275879808,1275880191,US
-1275880192,1275880207,MX
-1275880208,1275880247,US
-1275880248,1275880255,CA
-1275880256,1275880783,US
-1275880784,1275880799,CA
-1275880800,1275881791,US
-1275881792,1275881799,AU
-1275881800,1275881807,CA
-1275881808,1275881847,US
-1275881848,1275881871,CA
-1275881872,1275881887,US
-1275881888,1275881895,CA
-1275881896,1275883991,US
-1275883992,1275883999,CA
-1275884000,1275884391,US
-1275884392,1275884399,AU
-1275884400,1275885551,US
-1275885552,1275885559,IT
-1275885560,1275885567,US
-1275885568,1275885583,IT
-1275885584,1275886703,US
-1275886704,1275886719,CA
-1275886720,1275886735,US
-1275886736,1275886743,AU
-1275886744,1275886855,US
-1275886856,1275886863,IT
-1275886864,1275886879,US
-1275886880,1275886895,IT
-1275886896,1275886983,US
-1275886984,1275886991,PA
-1275886992,1275887063,US
-1275887064,1275887071,AE
-1275887072,1275887079,US
-1275887080,1275887087,AE
-1275887088,1275888015,US
-1275888016,1275888023,IN
-1275888024,1275888039,US
-1275888040,1275888047,GB
-1275888048,1275888311,US
-1275888312,1275888319,DE
-1275888320,1275889695,US
-1275889696,1275889711,CA
-1275889712,1275889967,US
-1275889968,1275889983,DE
-1275889984,1275890039,US
-1275890040,1275890047,CA
-1275890048,1275890087,US
-1275890088,1275890095,GB
-1275890096,1275890191,US
-1275890192,1275890207,SA
-1275890208,1275890359,US
-1275890360,1275890367,CA
-1275890368,1275890423,US
-1275890424,1275890431,NL
-1275890432,1275890687,US
-1275890688,1275890703,DE
-1275890704,1275890735,US
-1275890736,1275890751,NL
-1275890752,1275891007,US
-1275891008,1275891015,CA
-1275891016,1275891063,US
-1275891064,1275891071,LB
-1275891072,1275891191,US
-1275891192,1275891199,DE
-1275891200,1275891463,US
-1275891464,1275891471,IE
-1275891472,1275891511,US
-1275891512,1275891519,AU
-1275891520,1275892255,US
-1275892256,1275892279,DK
-1275892280,1275892423,US
-1275892424,1275892431,GB
-1275892432,1275892735,US
-1275892736,1275892767,GB
-1275892768,1275892951,US
-1275892952,1275892967,GB
-1275892968,1275893303,US
-1275893304,1275893311,CA
-1275893312,1275893455,US
-1275893456,1275893463,MX
-1275893464,1275893775,US
-1275893776,1275893791,MX
-1275893792,1275894327,US
-1275894328,1275894335,GB
-1275894336,1275894383,US
-1275894384,1275894399,GB
-1275894400,1275894519,US
-1275894520,1275894527,AU
-1275894528,1275894831,US
-1275894832,1275894863,AU
-1275894864,1275895023,US
-1275895024,1275895039,CA
-1275895040,1275895095,US
-1275895096,1275895103,CG
-1275895104,1275895135,US
-1275895136,1275895143,SA
-1275895144,1275895159,US
-1275895160,1275895167,CA
-1275895168,1275895191,US
-1275895192,1275895199,GB
-1275895200,1275895263,US
-1275895264,1275895271,NG
-1275895272,1275896951,US
-1275896952,1275896959,PK
-1275896960,1275898247,US
-1275898248,1275898255,IT
-1275898256,1275898319,US
-1275898320,1275898335,IT
-1275898336,1275898783,US
-1275898784,1275898791,AU
-1275898792,1275898799,US
-1275898800,1275898807,AU
-1275898808,1275899223,US
-1275899224,1275899231,PT
-1275899232,1275899887,US
-1275899888,1275899903,NO
-1275899904,1275900271,US
-1275900272,1275900287,GB
-1275900288,1275901007,US
-1275901008,1275901023,PT
-1275901024,1275901135,US
-1275901136,1275901143,IL
-1275901144,1275901439,US
-1275901440,1275901455,GB
-1275901456,1275901511,US
-1275901512,1275901519,MX
-1275901520,1275901783,US
-1275901784,1275901791,NG
-1275901792,1275902031,US
-1275902032,1275902039,GB
-1275902040,1275902047,US
-1275902048,1275902079,GB
-1275902080,1275902119,US
-1275902120,1275902127,NG
-1275902128,1275902303,US
-1275902304,1275902311,CA
-1275902312,1275902383,US
-1275902384,1275902391,CA
-1275902392,1275903863,US
-1275903864,1275903871,CA
-1275903872,1275904823,US
-1275904824,1275904831,NG
-1275904832,1275905767,US
-1275905768,1275905783,GB
-1275905784,1275905791,ZA
-1275905792,1275906343,US
-1275906344,1275906351,CA
-1275906352,1275907071,US
-1275907072,1275907079,CA
-1275907080,1275907911,US
-1275907912,1275907919,HK
-1275907920,1275908431,US
-1275908432,1275908447,GB
-1275908448,1275910207,US
-1275910208,1275910223,PA
-1275910224,1275910399,US
-1275910400,1275910407,AE
-1275910408,1275910503,US
-1275910504,1275910511,IN
-1275910512,1275911655,US
-1275911656,1275911663,CA
-1275911664,1275911935,US
-1275911936,1275911967,CA
-1275911968,1275912759,US
+1275822080,1275912759,US
1275912760,1275912783,CA
-1275912784,1275912879,US
-1275912880,1275912887,PT
-1275912888,1275914135,US
-1275914136,1275914143,AU
-1275914144,1275915655,US
-1275915656,1275915663,MX
-1275915664,1275916167,US
-1275916168,1275916199,CA
-1275916200,1275916351,US
-1275916352,1275916383,NL
-1275916384,1275916887,US
-1275916888,1275916895,CA
-1275916896,1275918463,US
-1275918464,1275918479,IN
-1275918480,1275918719,US
-1275918720,1275918735,CA
-1275918736,1275918807,US
-1275918808,1275918815,NG
-1275918816,1275919263,US
-1275919264,1275919279,IE
-1275919280,1275919911,US
-1275919912,1275919919,BR
-1275919920,1275919935,US
-1275919936,1275919967,BR
-1275919968,1275919999,IE
-1275920000,1275920015,GB
-1275920016,1275920055,US
-1275920056,1275920063,GB
-1275920064,1275920079,US
-1275920080,1275920095,CA
-1275920096,1276821225,US
-1276821226,1276821226,US
-1276821227,1279262719,US
+1275912784,1279262719,US
1279262720,1279787007,CA
-1279787008,1279827967,US
-1279827968,1279827983,IL
-1279827984,1279827991,US
-1279827992,1279827999,IL
-1279828000,1279828015,GB
-1279828016,1279828031,IL
-1279828032,1279828047,US
-1279828048,1279828055,IL
-1279828056,1279828063,US
-1279828064,1279828071,NO
-1279828072,1279828511,US
-1279828512,1279828527,SA
-1279828528,1279828535,US
-1279828536,1279828543,FR
-1279828544,1279828567,US
-1279828568,1279828575,CA
-1279828576,1279828615,US
-1279828616,1279828623,CA
-1279828624,1279828639,US
-1279828640,1279828647,NO
-1279828648,1279828679,US
-1279828680,1279828687,AR
-1279828688,1279828695,US
-1279828696,1279828735,AR
-1279828736,1279828751,US
-1279828752,1279828759,GB
-1279828760,1279828767,SA
-1279828768,1279828799,US
-1279828800,1279828815,AR
-1279828816,1279828831,IL
-1279828832,1279828991,US
-1279828992,1279829031,EG
-1279829032,1279829063,US
-1279829064,1279829071,NO
-1279829072,1279829095,US
-1279829096,1279829103,SG
-1279829104,1279829231,US
-1279829232,1279829239,EG
-1279829240,1279829247,IN
-1279829248,1279829375,BA
-1279829376,1279829503,US
-1279829504,1279829511,MX
-1279829512,1279829519,US
-1279829520,1279829527,EG
-1279829528,1279829535,AE
-1279829536,1279829543,US
-1279829544,1279829551,AU
-1279829552,1279829559,US
-1279829560,1279829567,CN
-1279829568,1279829575,IL
-1279829576,1279829663,US
-1279829664,1279829671,NO
-1279829672,1279829695,US
-1279829696,1279829703,IL
-1279829704,1279829711,US
-1279829712,1279829759,FR
-1279829760,1279829815,US
-1279829816,1279829823,AZ
-1279829824,1279829839,US
-1279829840,1279829847,IL
-1279829848,1279829855,SE
-1279829856,1279829871,IL
-1279829872,1279829879,US
-1279829880,1279829887,CA
-1279829888,1279829895,US
-1279829896,1279829903,IN
-1279829904,1279829911,IL
-1279829912,1279829919,EG
-1279829920,1279830015,US
-1279830016,1279830023,IL
-1279830024,1279830095,US
-1279830096,1279830103,BR
-1279830104,1279830111,CL
-1279830112,1279830127,US
-1279830128,1279830143,CY
-1279830144,1279830151,US
-1279830152,1279830159,BD
-1279830160,1279830175,DE
-1279830176,1279830247,US
-1279830248,1279830255,CN
-1279830256,1279830463,US
-1279830464,1279830527,BA
-1279830528,1279848447,US
-1279848448,1279852543,PR
-1279852544,1279921919,US
-1279921920,1279922047,IE
-1279922048,1279940879,US
-1279940880,1279940887,DE
-1279940888,1279940943,US
-1279940944,1279940959,DE
-1279940960,1279940991,US
-1279940992,1279940999,DE
-1279941000,1279943679,US
-1279943680,1279943743,PR
-1279943744,1279950847,US
+1279787008,1279848447,US
+1279848448,1279851519,PR
+1279851520,1279852031,VI
+1279852032,1279852543,PR
+1279852544,1279950847,US
1279950848,1279951103,CA
-1279951104,1279951167,US
-1279951168,1279951199,CA
-1279951200,1279951223,US
-1279951224,1279952127,CA
-1279952128,1279952159,US
-1279952160,1279952175,CA
-1279952176,1279952191,US
-1279952192,1279952223,CA
-1279952224,1279952231,US
-1279952232,1279952239,CA
-1279952240,1279952383,US
-1279952384,1279952919,CA
-1279952920,1279952927,VG
-1279952928,1279952943,US
-1279952944,1279953023,CA
-1279953024,1279953055,VG
-1279953056,1279953087,US
-1279953088,1279953663,CA
-1279953664,1279953687,US
-1279953688,1279953823,CA
-1279953824,1279953919,US
-1279953920,1279953935,CA
-1279953936,1279953967,US
-1279953968,1279954015,CA
-1279954016,1279954047,US
-1279954048,1279954095,CA
-1279954096,1279954119,US
-1279954120,1279954175,CA
-1279954176,1279954431,US
-1279954432,1279954495,CA
-1279954496,1279954543,US
-1279954544,1279954623,CA
-1279954624,1279954655,US
-1279954656,1279954719,CA
-1279954720,1279954727,US
-1279954728,1279954783,CA
-1279954784,1279954839,US
-1279954840,1279954879,CA
-1279954880,1279954915,US
-1279954916,1279954927,CA
-1279954928,1279955095,US
-1279955096,1279955103,BB
-1279955104,1279955119,CA
-1279955120,1279955151,US
-1279955152,1279955159,AU
-1279955160,1279956059,US
-1279956060,1279956063,MX
-1279956064,1279956071,US
-1279956072,1279956079,CA
-1279956080,1279957172,US
-1279957173,1279957173,IN
-1279957174,1279957174,US
-1279957175,1279957175,IN
-1279957176,1279957179,US
-1279957180,1279957180,IN
-1279957181,1279957184,US
-1279957185,1279957185,IN
-1279957186,1279957431,US
-1279957432,1279957439,IN
-1279957440,1279957631,US
-1279957632,1279957651,IN
-1279957652,1279959551,US
+1279951104,1279951231,US
+1279951232,1279952127,CA
+1279952128,1279952383,US
+1279952384,1279952895,CA
+1279952896,1279953151,US
+1279953152,1279953663,CA
+1279953664,1279959551,US
1279959552,1279959807,CA
-1279959808,1279960063,US
-1279960064,1279960127,CA
-1279960128,1279960143,US
-1279960144,1279960159,CA
-1279960160,1279960223,US
-1279960224,1279960319,CA
-1279960320,1279960335,US
-1279960336,1279960343,CA
-1279960344,1279960415,US
-1279960416,1279960527,CA
-1279960528,1279960535,US
-1279960536,1279960559,CA
-1279960560,1279960567,MX
-1279960568,1279962223,US
-1279962224,1279962239,CA
-1279962240,1279962783,US
-1279962784,1279962791,CN
-1279962792,1279962895,US
-1279962896,1279962911,CA
-1279962912,1279962927,CN
-1279962928,1279963135,US
+1279959808,1279960479,US
+1279960480,1279960511,CA
+1279960512,1279963135,US
1279963136,1279963391,IN
-1279963392,1279963935,US
-1279963936,1279963967,CA
-1279963968,1279965183,US
+1279963392,1279965183,US
1279965184,1279966207,CA
1279966208,1279967231,US
-1279967232,1279967519,CA
-1279967520,1279967543,US
-1279967544,1279967583,CA
-1279967584,1279967695,US
-1279967696,1279967711,CA
-1279967712,1279968127,US
+1279967232,1279967487,CA
+1279967488,1279968127,US
1279968128,1279968255,CA
-1279968256,1279969311,US
-1279969312,1279969423,CA
-1279969424,1279969471,US
-1279969472,1279969535,CA
-1279969536,1279969551,US
-1279969552,1279969567,CA
-1279969568,1279969663,US
+1279968256,1279969343,US
+1279969344,1279969407,CA
+1279969408,1279969663,US
1279969664,1279969791,CA
-1279969792,1279969919,US
-1279969920,1279969935,CA
-1279969936,1279970047,US
+1279969792,1279970047,US
1279970048,1279970303,CA
-1279970304,1279970431,US
-1279970432,1279970447,CA
-1279970448,1279970495,US
-1279970496,1279970511,CA
-1279970512,1279970519,US
-1279970520,1279970815,CA
-1279970816,1279970911,US
-1279970912,1279970943,CA
-1279970944,1279971583,US
+1279970304,1279970559,US
+1279970560,1279970815,CA
+1279970816,1279970943,US
+1279970944,1279971071,CA
+1279971072,1279971583,US
1279971584,1279972095,CA
-1279972096,1279973951,US
-1279973952,1279973967,CA
-1279973968,1279973983,US
+1279972096,1279973983,US
1279973984,1279974015,IN
-1279974016,1279974175,US
-1279974176,1279974199,CA
-1279974200,1279974207,US
-1279974208,1279974271,CA
-1279974272,1279974391,US
-1279974392,1279974399,CA
-1279974400,1279974799,US
-1279974800,1279974815,CA
-1279974816,1279975407,US
-1279975408,1279975423,NZ
-1279975424,1279975695,CA
-1279975696,1279975967,US
-1279975968,1279975975,HK
-1279975976,1279975983,US
-1279975984,1279976007,CA
-1279976008,1279976031,US
-1279976032,1279976063,KN
-1279976064,1279976127,US
-1279976128,1279976143,CA
-1279976144,1279976159,US
-1279976160,1279976959,CA
+1279974016,1279975423,US
+1279975424,1279975679,CA
+1279975680,1279976191,US
+1279976192,1279976959,CA
1279976960,1279977215,US
1279977216,1279977471,CA
1279977472,1279977727,US
-1279977728,1279978111,CA
-1279978112,1279978143,US
-1279978144,1279978495,CA
-1279978496,1279979559,US
-1279979560,1279979575,CA
-1279979576,1279979583,US
-1279979584,1279979647,CA
-1279979648,1279979775,US
-1279979776,1279980063,CA
-1279980064,1279980079,US
-1279980080,1279980127,CA
-1279980128,1279980135,US
-1279980136,1279980159,CA
-1279980160,1279980287,US
+1279977728,1279977983,CA
+1279977984,1279979775,US
+1279979776,1279980031,CA
+1279980032,1279980287,US
1279980288,1279981567,CA
1279981568,1279999999,US
1280000000,1280032767,CA
1280032768,1280040959,US
-1280040960,1280043527,CA
-1280043528,1280043535,US
-1280043536,1280043551,CA
-1280043552,1280043559,US
-1280043560,1280043567,CA
-1280043568,1280043607,US
-1280043608,1280043679,CA
-1280043680,1280043703,US
-1280043704,1280043711,CA
-1280043712,1280043719,US
-1280043720,1280043751,CA
-1280043752,1280043759,US
-1280043760,1280043767,CA
-1280043768,1280043775,US
-1280043776,1280043807,CA
-1280043808,1280043815,US
-1280043816,1280043823,CA
-1280043824,1280043831,US
-1280043832,1280043959,CA
-1280043960,1280043975,US
-1280043976,1280044447,CA
-1280044448,1280044455,US
-1280044456,1280044463,CA
-1280044464,1280044471,US
-1280044472,1280044503,CA
-1280044504,1280044535,US
-1280044536,1280045063,CA
-1280045064,1280045071,US
-1280045072,1280045167,CA
-1280045168,1280045175,US
-1280045176,1280045183,CA
-1280045184,1280045191,US
-1280045192,1280045439,CA
-1280045440,1280045463,US
-1280045464,1280045511,CA
-1280045512,1280045527,US
-1280045528,1280045551,CA
-1280045552,1280045559,US
-1280045560,1280045711,CA
-1280045712,1280045727,US
-1280045728,1280045783,CA
-1280045784,1280045791,US
-1280045792,1280045879,CA
-1280045880,1280045887,US
-1280045888,1280046039,CA
-1280046040,1280046055,US
-1280046056,1280046167,CA
-1280046168,1280046199,US
-1280046200,1280046231,CA
-1280046232,1280046239,US
-1280046240,1280046247,CA
-1280046248,1280046255,US
-1280046256,1280046343,CA
-1280046344,1280046351,US
-1280046352,1280046423,CA
-1280046424,1280046431,US
-1280046432,1280046527,CA
-1280046528,1280046551,US
-1280046552,1280046751,CA
-1280046752,1280046759,US
-1280046760,1280046791,CA
-1280046792,1280046799,US
-1280046800,1280046871,CA
-1280046872,1280046879,US
-1280046880,1280046951,CA
-1280046952,1280046959,US
-1280046960,1280047095,CA
-1280047096,1280047103,US
-1280047104,1280047183,CA
-1280047184,1280047191,US
-1280047192,1280047495,CA
-1280047496,1280047519,US
-1280047520,1280047527,CA
-1280047528,1280047535,NL
-1280047536,1280047543,CA
-1280047544,1280047551,US
-1280047552,1280047583,CA
-1280047584,1280047591,US
-1280047592,1280047775,CA
-1280047776,1280047783,US
-1280047784,1280047799,CA
-1280047800,1280047807,US
-1280047808,1280047831,CA
-1280047832,1280047839,US
-1280047840,1280047967,CA
-1280047968,1280047983,US
-1280047984,1280047991,CA
-1280047992,1280047999,US
-1280048000,1280048095,CA
-1280048096,1280048103,US
-1280048104,1280048119,CA
-1280048120,1280048127,US
-1280048128,1280048399,CA
-1280048400,1280048407,US
-1280048408,1280048591,CA
-1280048592,1280048599,US
-1280048600,1280048607,CA
-1280048608,1280048623,US
-1280048624,1280048631,NL
-1280048632,1280048639,US
-1280048640,1280048735,CA
-1280048736,1280048743,US
-1280048744,1280048895,CA
-1280048896,1280048903,US
-1280048904,1280048911,CA
-1280048912,1280048919,FR
-1280048920,1280048991,CA
-1280048992,1280049007,US
-1280049008,1280049031,CA
-1280049032,1280049039,NL
-1280049040,1280049063,CA
-1280049064,1280049071,US
-1280049072,1280049095,CA
-1280049096,1280049103,US
-1280049104,1280049111,CA
-1280049112,1280049127,US
-1280049128,1280049151,CA
+1280040960,1280049151,CA
1280049152,1280073727,US
1280073728,1280081919,CA
1280081920,1280090111,US
@@ -41839,25 +13376,7 @@
1280098304,1280102399,PR
1280102400,1280131071,US
1280131072,1280139263,CA
-1280139264,1286389759,US
-1286389760,1286390271,US
-1286390272,1286390527,US
-1286390528,1286390783,US
-1286390784,1286391295,US
-1286391296,1286391807,US
-1286391808,1286393855,US
-1286393856,1286394623,US
-1286394624,1286395391,US
-1286395392,1286396159,US
-1286396160,1286398975,US
-1286398976,1286399487,US
-1286399488,1287611402,US
-1287611403,1287611403,US
-1287611404,1287877503,US
-1287877504,1287877567,UM
-1287877568,1290252799,US
-1290252800,1290252863,GB
-1290252864,1291845631,US
+1280139264,1291845631,US
1291845632,1292894207,DE
1292894208,1293156351,NO
1293156352,1293549567,DE
@@ -41868,9 +13387,7 @@
1294073856,1294204927,RU
1294204928,1294237695,RO
1294237696,1294270463,IR
-1294270464,1294278463,DE
-1294278464,1294278495,CA
-1294278496,1294303231,DE
+1294270464,1294303231,DE
1294303232,1294335999,RU
1294336000,1294368767,SI
1294368768,1294401535,LV
@@ -41891,21 +13408,13 @@
1294893056,1294925823,RS
1294925824,1294958591,DE
1294958592,1294991359,UA
-1294991360,1294998527,CZ
-1294998528,1294998591,SK
-1294998592,1295009023,CZ
-1295009024,1295009407,SK
-1295009408,1295016751,CZ
-1295016752,1295016767,GB
-1295016768,1295047679,CZ
+1294991360,1295047679,CZ
1295047680,1295048191,SK
1295048192,1295056895,CZ
1295056896,1295122431,GR
1295122432,1295253503,RU
1295253504,1295319039,UA
-1295319040,1295349119,SE
-1295349120,1295349247,NO
-1295349248,1295384575,SE
+1295319040,1295384575,SE
1295384576,1295450111,PT
1295450112,1295515647,PL
1295515648,1295777791,CH
@@ -41913,213 +13422,91 @@
1296039936,1296072703,SA
1296072704,1296105471,DE
1296105472,1296171007,PL
-1296171008,1296181743,DK
-1296181744,1296181751,GB
-1296181752,1296203775,DK
+1296171008,1296203775,DK
1296203776,1296236543,RU
1296236544,1296236671,FR
1296236672,1296236799,US
-1296236800,1296237055,GB
-1296237056,1296237311,FR
-1296237312,1296237439,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,1296240383,FR
-1296240384,1296241151,BE
-1296241152,1296241407,IT
+1296239616,1296241407,FR
1296241408,1296242175,NL
-1296242176,1296242303,DE
+1296242176,1296242303,FR
1296242304,1296242431,NL
-1296242432,1296242687,BE
-1296242688,1296243199,FR
-1296243200,1296243455,GB
+1296242432,1296243455,FR
1296243456,1296243711,DE
1296243712,1296244223,US
1296244224,1296244479,NL
-1296244480,1296244735,GB
-1296244736,1296244991,IR
+1296244480,1296244991,FR
1296244992,1296245247,CH
-1296245248,1296245503,CA
+1296245248,1296245503,FR
1296245504,1296245759,NL
1296245760,1296246783,ES
1296246784,1296247295,NL
-1296247296,1296247807,FR
-1296247808,1296247871,US
-1296247872,1296247935,GB
-1296247936,1296248191,FR
-1296248192,1296248255,IE
-1296248256,1296248318,BE
-1296248319,1296248319,FR
-1296248320,1296248383,BE
-1296248384,1296248447,IT
-1296248448,1296248575,US
-1296248576,1296248703,IE
-1296248704,1296248959,FR
+1296247296,1296248959,FR
1296248960,1296249023,DE
1296249024,1296249087,GB
-1296249088,1296249151,US
-1296249152,1296249855,FR
-1296249856,1296249887,US
-1296249888,1296249919,FR
-1296249920,1296249951,US
-1296249952,1296250015,DE
-1296250016,1296250047,IL
-1296250048,1296250079,IE
-1296250080,1296250111,IL
-1296250112,1296250143,IE
-1296250144,1296250175,GB
-1296250176,1296250207,FR
-1296250208,1296250239,ES
-1296250240,1296250271,BE
-1296250272,1296250303,DE
-1296250304,1296250335,FR
-1296250336,1296250367,ES
+1296249088,1296250367,FR
1296250368,1296250399,CZ
1296250400,1296250431,DE
1296250432,1296250463,PL
1296250464,1296250495,RO
1296250496,1296250527,FR
1296250528,1296250559,DK
-1296250560,1296250847,FR
-1296250848,1296250879,GB
-1296250880,1296250975,FR
-1296250976,1296251007,DE
-1296251008,1296251039,FR
-1296251040,1296251071,US
-1296251072,1296251103,NL
-1296251104,1296251135,ES
-1296251136,1296251167,GB
-1296251168,1296251199,US
-1296251200,1296251295,DE
-1296251296,1296251327,BE
-1296251328,1296251359,IE
-1296251360,1296251391,DE
+1296250560,1296250623,FR
+1296250624,1296250879,BE
+1296250880,1296251199,FR
+1296251200,1296251231,NL
+1296251232,1296251391,FR
1296251392,1296251775,NL
1296251776,1296251903,DE
-1296251904,1296251919,IR
-1296251920,1296251935,BE
-1296251936,1296251967,US
-1296251968,1296252015,NL
-1296252016,1296252039,US
-1296252040,1296252055,DE
-1296252056,1296252063,US
-1296252064,1296252079,IT
-1296252080,1296252087,IE
-1296252088,1296252095,FR
-1296252096,1296252111,BE
-1296252112,1296252127,GB
-1296252128,1296252143,ES
-1296252144,1296252159,US
-1296252160,1296252175,GB
-1296252176,1296252191,PL
-1296252192,1296252207,RO
-1296252208,1296252223,BG
-1296252224,1296252239,GB
-1296252240,1296252255,IT
-1296252256,1296252271,GB
-1296252272,1296252303,FR
-1296252304,1296252319,IL
-1296252320,1296252335,GB
-1296252336,1296252351,FR
-1296252352,1296252359,DE
-1296252360,1296252367,BE
-1296252368,1296252383,DE
-1296252384,1296252391,FR
-1296252392,1296252395,US
-1296252396,1296252399,FR
-1296252400,1296252431,IE
-1296252432,1296252439,FR
-1296252440,1296252447,RU
-1296252448,1296252479,US
-1296252480,1296252671,FR
-1296252672,1296252679,GB
-1296252680,1296252687,FR
-1296252688,1296252695,NL
-1296252696,1296252711,DE
-1296252712,1296252719,FR
-1296252720,1296252727,BE
-1296252728,1296252735,IL
-1296252736,1296252739,FR
-1296252740,1296252743,IM
-1296252744,1296252759,FR
-1296252760,1296252791,DE
-1296252792,1296252799,IE
-1296252800,1296252839,GB
-1296252840,1296252847,DE
-1296252848,1296252855,GB
-1296252856,1296252871,IE
-1296252872,1296252887,DE
-1296252888,1296252895,IE
-1296252896,1296252911,BE
-1296252912,1296252919,GB
-1296252920,1296252927,PL
-1296252928,1296255743,DE
-1296255744,1296255999,FR
-1296256000,1296256840,DE
-1296256841,1296256848,US
-1296256849,1296257023,DE
-1296257024,1296257535,US
-1296257536,1296257791,DE
-1296257792,1296258047,FR
-1296258048,1296258303,TW
+1296251904,1296252479,FR
+1296252480,1296252487,ES
+1296252488,1296252535,FR
+1296252536,1296252543,IT
+1296252544,1296252591,FR
+1296252592,1296252595,GB
+1296252596,1296252607,FR
+1296252608,1296252615,NL
+1296252616,1296252623,ES
+1296252624,1296252667,FR
+1296252668,1296252671,GB
+1296252672,1296252871,FR
+1296252872,1296252879,DE
+1296252880,1296256839,FR
+1296256840,1296256847,US
+1296256848,1296258303,FR
1296258304,1296259071,NL
-1296259072,1296259583,US
-1296259584,1296259839,DE
+1296259072,1296259839,FR
1296259840,1296260351,NL
-1296260352,1296260607,FR
-1296260608,1296262143,DE
+1296260352,1296261119,FR
+1296261120,1296262143,DE
1296262144,1296262399,FR
1296262400,1296262655,US
1296262656,1296263679,FR
1296263680,1296263935,US
1296263936,1296263943,FR
-1296263944,1296263999,US
-1296264000,1296264015,FR
-1296264016,1296264023,US
-1296264024,1296264027,DE
-1296264028,1296264031,FR
-1296264032,1296264035,IM
-1296264036,1296264047,US
-1296264048,1296264055,CH
-1296264056,1296264063,FR
-1296264064,1296264151,GB
-1296264152,1296264191,FR
-1296264192,1296264543,US
-1296264544,1296264639,CA
-1296264640,1296264671,US
-1296264672,1296264959,FR
-1296264960,1296265023,US
-1296265024,1296265087,FR
-1296265088,1296265151,CA
-1296265152,1296265471,FR
-1296265472,1296265727,US
-1296265728,1296266239,FR
+1296263944,1296263959,US
+1296263960,1296264287,FR
+1296264288,1296264303,US
+1296264304,1296266239,FR
1296266240,1296266751,US
-1296266752,1296267519,FR
-1296267520,1296267775,CA
-1296267776,1296268031,US
-1296268032,1296268287,FR
-1296268288,1296268799,US
-1296268800,1296269055,FR
+1296266752,1296269055,FR
1296269056,1296269311,US
-1296269312,1296285695,TR
-1296285696,1296302079,BY
+1296269312,1296302079,BY
1296302080,1296334847,GB
1296334848,1296367615,DK
1296367616,1296400383,GR
1296400384,1296433151,BH
1296433152,1296465919,BG
1296465920,1296470015,LT
-1296470016,1296472383,NO
-1296472384,1296472415,BI
-1296472416,1296473087,NO
-1296473088,1296474623,LT
-1296474624,1296476159,US
+1296470016,1296473087,NO
+1296473088,1296475135,LT
+1296475136,1296476159,US
1296476160,1296479743,LT
1296479744,1296482303,NO
1296482304,1296498687,LT
@@ -42143,17 +13530,8 @@
1296596992,1296599039,DE
1296599040,1296601087,RU
1296601088,1296605183,NL
-1296605184,1296606271,AT
-1296606272,1296606335,DE
-1296606336,1296606367,AT
-1296606368,1296606399,CH
-1296606400,1296607103,AT
-1296607104,1296607135,CH
-1296607136,1296607231,AT
-1296607232,1296607743,CH
-1296607744,1296607999,NL
-1296608000,1296609023,CH
-1296609024,1296609279,NL
+1296605184,1296607231,AT
+1296607232,1296609279,NL
1296609280,1296611327,CH
1296611328,1296613375,TR
1296613376,1296615423,IT
@@ -42182,52 +13560,15 @@
1296670720,1296672767,ES
1296672768,1296674815,GB
1296674816,1296676863,BE
-1296676864,1296677271,NG
-1296677272,1296677287,A2
-1296677288,1296677311,NG
-1296677312,1296677319,A2
-1296677320,1296677343,NG
-1296677344,1296677351,A2
-1296677352,1296677367,NG
-1296677368,1296677375,US
-1296677376,1296677511,NG
-1296677512,1296677519,A2
-1296677520,1296677591,NG
-1296677592,1296677599,A2
-1296677600,1296677703,NG
-1296677704,1296677719,A2
-1296677720,1296677735,NG
-1296677736,1296677751,A2
-1296677752,1296677767,NG
-1296677768,1296677775,A2
-1296677776,1296677959,NG
-1296677960,1296677967,A2
-1296677968,1296677991,NG
-1296677992,1296678015,A2
-1296678016,1296678047,NG
-1296678048,1296678079,A2
-1296678080,1296678119,NG
-1296678120,1296678143,A2
-1296678144,1296678151,NG
-1296678152,1296678159,A2
-1296678160,1296678215,NG
-1296678216,1296678223,A2
-1296678224,1296678351,NG
-1296678352,1296678367,A2
-1296678368,1296678415,NG
-1296678416,1296678431,A2
-1296678432,1296678447,NG
-1296678448,1296678463,A2
-1296678464,1296678471,NG
-1296678472,1296678479,A2
-1296678480,1296678775,NG
-1296678776,1296678791,A2
-1296678792,1296678831,NG
-1296678832,1296678839,A2
-1296678840,1296678911,NG
-1296678912,1296680191,SA
-1296680192,1296680447,AE
-1296680448,1296680959,KW
+1296676864,1296677295,JE
+1296677296,1296677303,NG
+1296677304,1296677639,JE
+1296677640,1296677647,NG
+1296677648,1296677727,JE
+1296677728,1296677735,NG
+1296677736,1296678903,JE
+1296678904,1296678911,NG
+1296678912,1296680959,SA
1296680960,1296683007,ES
1296683008,1296685055,IE
1296685056,1296687103,TR
@@ -42235,9 +13576,7 @@
1296689152,1296691199,RU
1296691200,1296693247,CH
1296693248,1296695295,DE
-1296695296,1296696831,CH
-1296696832,1296697087,DE
-1296697088,1296697343,CH
+1296695296,1296697343,CH
1296697344,1296699391,RU
1296699392,1296701439,IT
1296701440,1296703487,RU
@@ -42258,12 +13597,9 @@
1296732160,1296734207,IT
1296734208,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
1296748544,1296750591,FR
1296750592,1296752639,NO
1296752640,1296754687,BA
@@ -42274,8 +13610,7 @@
1296764928,1296769023,AT
1296769024,1296771071,TR
1296771072,1296773119,LT
-1296773120,1296774367,FR
-1296774368,1296775167,EU
+1296773120,1296774143,FR
1296775168,1296779263,FR
1296779264,1296781311,CZ
1296781312,1296783359,DK
@@ -42285,10 +13620,7 @@
1296789504,1296791551,CH
1296791552,1296793599,GB
1296793600,1296795647,RU
-1296795648,1296795903,NL
-1296795904,1296796159,GB
-1296796160,1296796415,NL
-1296796416,1296797695,GB
+1296795648,1296797695,GB
1296797696,1296799743,UA
1296799744,1296801791,RU
1296801792,1296803839,DK
@@ -42312,27 +13644,20 @@
1296941056,1296957439,BA
1296957440,1296973823,BG
1296973824,1296990207,CZ
-1296990208,1296995327,BG
-1296995328,1296996351,GR
-1296996352,1297006591,BG
+1296990208,1297006591,BG
1297006592,1297022975,BA
1297022976,1297039359,LT
1297039360,1297055743,TR
1297055744,1297072127,RU
-1297072128,1297072639,PL
-1297072640,1297072703,CY
-1297072704,1297072863,PL
-1297072864,1297072871,IT
-1297072872,1297088511,PL
+1297072128,1297088511,PL
1297088512,1297121279,AT
1297121280,1297154047,SE
-1297154048,1297154815,RO
-1297154816,1297155071,MD
-1297155072,1297215487,RO
+1297154048,1297178623,RO
+1297178624,1297178879,NL
+1297178880,1297215487,RO
1297215488,1297217535,NL
1297217536,1297219583,RO
1297219584,1297285119,RU
-1297285120,1297350655,GR
1297350656,1297416191,FR
1297416192,1297481727,BG
1297481728,1297514495,GB
@@ -42357,9 +13682,7 @@
1297584128,1297588223,UA
1297588224,1297590271,NL
1297590272,1297592319,RU
-1297592320,1297593087,GB
-1297593088,1297593343,IM
-1297593344,1297594367,GB
+1297592320,1297594367,GB
1297594368,1297596415,DE
1297596416,1297598463,UA
1297598464,1297602559,RU
@@ -42377,9 +13700,7 @@
1297727488,1297743871,MD
1297743872,1297760255,DE
1297760256,1297776639,LT
-1297776640,1297784831,DE
-1297784832,1297786879,CZ
-1297786880,1297793023,DE
+1297776640,1297793023,DE
1297793024,1297809407,UA
1297809408,1297825791,PL
1297825792,1297842175,RU
@@ -42388,19 +13709,11 @@
1297860608,1297862655,PT
1297862656,1297864703,FI
1297864704,1297866751,SE
-1297866752,1297867687,RU
-1297867688,1297867695,CY
-1297867696,1297867871,RU
-1297867872,1297867879,ES
-1297867880,1297868799,RU
+1297866752,1297868799,RU
1297868800,1297870847,DE
1297870848,1297872895,FR
1297872896,1297874943,GB
-1297874944,1297875487,CY
-1297875488,1297875503,TR
-1297875504,1297875536,CY
-1297875537,1297875551,TR
-1297875552,1297879040,CY
+1297874944,1297879040,CY
1297879041,1297883135,TR
1297883136,1297891327,PL
1297891328,1297899519,GB
@@ -42414,26 +13727,11 @@
1297965056,1297973247,RU
1297973248,1297981439,GB
1297981440,1297989631,RO
-1297989632,1297993295,CZ
-1297993296,1297993311,SK
-1297993312,1297997823,CZ
+1297989632,1297997823,CZ
1297997824,1298006015,IT
-1298006016,1298014207,RU
-1298014208,1298014719,LT
-1298014720,1298014975,RU
-1298014976,1298015231,LT
-1298015232,1298015487,RU
-1298015488,1298015743,LB
-1298015744,1298015999,IQ
-1298016000,1298016511,LB
-1298016512,1298017023,RU
-1298017024,1298018303,BY
-1298018304,1298018559,TM
-1298018560,1298018815,RU
-1298018816,1298019071,GB
-1298019072,1298019327,RU
-1298019328,1298019839,LT
-1298019840,1298020351,RU
+1298006016,1298017279,RU
+1298017280,1298018303,BY
+1298018304,1298020351,RU
1298020352,1298022399,BY
1298022400,1298030591,IT
1298030592,1298038783,RU
@@ -42444,15 +13742,8 @@
1298067456,1298071551,NL
1298071552,1298073599,TJ
1298073600,1298075647,RU
-1298075648,1298076671,CY
-1298076672,1298077695,US
-1298077696,1298078719,DE
-1298078720,1298078872,NL
-1298078873,1298078879,DE
-1298078880,1298079007,NL
-1298079008,1298079231,DE
-1298079232,1298079487,NL
-1298079488,1298079743,DE
+1298075648,1298077695,CY
+1298077696,1298079743,NL
1298079744,1298081791,GB
1298081792,1298083839,CZ
1298083840,1298085887,PL
@@ -42464,9 +13755,7 @@
1298096128,1298098175,NL
1298098176,1298100223,SE
1298100224,1298102271,GB
-1298102272,1298102687,CH
-1298102688,1298102703,LV
-1298102704,1298104319,CH
+1298102272,1298104319,CH
1298104320,1298106367,RU
1298106368,1298108415,IT
1298108416,1298110463,FI
@@ -42478,30 +13767,8 @@
1298120704,1298122751,CZ
1298122752,1298124799,RU
1298124800,1298126847,IT
-1298126848,1298127615,SA
-1298127616,1298128127,IR
-1298128128,1298128895,SA
-1298128896,1298129239,NL
-1298129240,1298129240,RU
-1298129241,1298129241,NL
-1298129242,1298129242,BE
-1298129243,1298129449,NL
-1298129450,1298129450,BZ
-1298129451,1298129465,NL
-1298129466,1298129466,US
-1298129467,1298129744,NL
-1298129745,1298129747,IT
-1298129748,1298129788,NL
-1298129789,1298129789,IT
-1298129790,1298129994,NL
-1298129995,1298129995,GB
-1298129996,1298130199,NL
-1298130200,1298130200,RU
-1298130201,1298130243,NL
-1298130244,1298130244,RU
-1298130245,1298130468,NL
-1298130469,1298130469,RU
-1298130470,1298130943,NL
+1298126848,1298128895,SA
+1298128896,1298130943,NL
1298130944,1298132991,BG
1298132992,1298135039,FI
1298135040,1298137087,NL
@@ -42519,46 +13786,25 @@
1298841600,1298857983,RU
1298857984,1298874367,SE
1298874368,1298907135,GB
-1298907136,1298917711,IE
-1298917712,1298917719,GB
-1298917720,1298923519,IE
+1298907136,1298923519,IE
1298923520,1298939903,IT
1298939904,1298956287,RU
1298956288,1298972671,GB
1298972672,1298989055,RU
1298989056,1299005439,UA
-1299005440,1299005695,BE
-1299005696,1299005951,RU
-1299005952,1299008511,NL
-1299008512,1299008767,BE
-1299008768,1299009023,US
-1299009024,1299009791,BE
-1299009792,1299010047,NL
+1299005440,1299010047,NL
1299010048,1299010815,BE
1299010816,1299011071,RU
-1299011072,1299011327,BE
-1299011328,1299011583,RU
-1299011584,1299011839,FR
-1299011840,1299012095,DE
-1299012096,1299012607,BE
-1299012608,1299013119,GB
-1299013120,1299013375,FR
-1299013376,1299013631,DE
+1299011072,1299013631,NL
1299013632,1299015679,BE
-1299015680,1299016703,NL
-1299016704,1299016959,BE
-1299016960,1299017215,NL
-1299017216,1299017727,RU
-1299017728,1299021823,BE
-1299021824,1299024559,CH
-1299024560,1299024575,DE
-1299024576,1299024863,CH
-1299024864,1299024871,DE
-1299024872,1299026111,CH
+1299015680,1299017727,NL
+1299017728,1299019775,BE
+1299019776,1299020031,NL
+1299020032,1299021055,BE
+1299021056,1299021823,NL
+1299021824,1299026111,CH
1299026112,1299026127,ES
-1299026128,1299026251,CH
-1299026252,1299026263,PT
-1299026264,1299038207,CH
+1299026128,1299038207,CH
1299038208,1299054591,FI
1299054592,1299070975,SE
1299070976,1299087359,SA
@@ -42589,26 +13835,17 @@
1306222592,1306230783,HR
1306230784,1306238975,LT
1306238976,1306263551,SE
-1306263552,1306265599,A2
-1306265600,1306266879,KE
+1306263552,1306266879,KE
1306266880,1306267135,NG
1306267136,1306267522,KE
1306267523,1306267527,NG
1306267528,1306271743,KE
1306271744,1306279935,RU
-1306279936,1306285775,IT
-1306285776,1306285783,US
-1306285784,1306286079,IT
-1306286080,1306287103,CH
-1306287104,1306287615,IT
-1306287616,1306287903,CH
-1306287904,1306288127,IT
+1306279936,1306288127,IT
1306288128,1306296319,AT
1306296320,1306312703,RU
1306312704,1306320895,UZ
-1306320896,1306323263,DE
-1306323264,1306323295,GB
-1306323296,1306329087,DE
+1306320896,1306329087,DE
1306329088,1306337279,BA
1306337280,1306345471,HU
1306345472,1306353663,LT
@@ -42619,9 +13856,7 @@
1306386432,1306394623,DK
1306394624,1306402815,ME
1306402816,1306411007,RU
-1306411008,1306415167,NL
-1306415168,1306415199,IT
-1306415200,1306419199,NL
+1306411008,1306419199,NL
1306419200,1306427391,RU
1306427392,1306435583,UA
1306435584,1306451967,NO
@@ -42634,11 +13869,7 @@
1306509312,1306525695,PL
1306525696,1307049983,ES
1307049984,1307066367,RU
-1307066368,1307068869,EU
1307068870,1307068870,CH
-1307068871,1307069695,EU
-1307069696,1307069919,DE
-1307069920,1307074559,EU
1307074560,1307082751,SA
1307082752,1307092991,RU
1307092992,1307095039,GB
@@ -42665,9 +13896,7 @@
1307195392,1307197439,CH
1307197440,1307205631,HU
1307205632,1307213823,FI
-1307213824,1307219239,SI
-1307219240,1307219247,MX
-1307219248,1307222015,SI
+1307213824,1307222015,SI
1307222016,1307230207,DK
1307230208,1307238399,RU
1307238400,1307246591,SK
@@ -42687,36 +13916,27 @@
1307361280,1307369471,CZ
1307369472,1307377663,RU
1307377664,1307385855,PL
-1307385856,1307389951,AT
-1307389952,1307392511,EU
-1307392512,1307393919,AT
-1307393920,1307393983,CZ
-1307393984,1307394047,AT
+1307385856,1307394047,AT
1307394048,1307402239,IR
1307402240,1307410431,HR
1307410432,1307418623,CZ
1307418624,1307426815,IR
1307426816,1307435007,CH
1307435008,1307437055,DE
-1307437056,1307441151,CZ
-1307441152,1307443199,DE
+1307437056,1307441151,ES
+1307441152,1307442175,NL
+1307442176,1307443199,DE
1307443200,1307451391,IT
1307451392,1307459583,SE
1307459584,1307467775,BG
1307467776,1307484159,RU
-1307484160,1307488767,GB
-1307488768,1307489023,IE
-1307489024,1307491327,GB
-1307491328,1307491839,IE
-1307491840,1307492351,GB
+1307484160,1307492351,GB
1307492352,1307500543,BA
1307500544,1307508735,RU
1307508736,1307516927,BA
1307516928,1307525119,CH
1307525120,1307533311,BA
-1307533312,1307535359,GB
-1307535360,1307535615,DE
-1307535616,1307535871,GB
+1307533312,1307535871,GB
1307535872,1307536127,US
1307536128,1307541503,GB
1307541504,1307549695,IT
@@ -42736,22 +13956,18 @@
1307623424,1307627519,FR
1307627520,1307631615,SE
1307631616,1307635711,IT
-1307635712,1307636735,EE
-1307636736,1307636807,LV
-1307636808,1307636815,EE
-1307636816,1307636847,LV
-1307636848,1307636863,EE
-1307636864,1307637759,LV
-1307637760,1307639807,LT
+1307635712,1307636991,EE
+1307636992,1307637247,LV
+1307637248,1307637503,EE
+1307637504,1307637759,LV
+1307637760,1307639551,EE
+1307639552,1307639807,LT
1307639808,1307643903,IT
1307643904,1307652095,RU
1307652096,1307656191,ES
1307656192,1307660287,JO
1307660288,1307662335,BE
-1307662336,1307662351,NL
-1307662352,1307662359,GB
-1307662360,1307662367,FR
-1307662368,1307664383,BE
+1307662336,1307664383,NL
1307664384,1307668479,NO
1307668480,1307672575,ES
1307672576,1307676671,DK
@@ -42760,11 +13976,7 @@
1307684864,1307688959,GB
1307688960,1307693055,LT
1307693056,1307697151,IT
-1307697152,1307697407,NL
-1307697408,1307697663,EU
-1307697664,1307698687,NL
-1307698688,1307698943,EU
-1307698944,1307701247,NL
+1307697152,1307701247,NL
1307701248,1307709439,RU
1307709440,1307713535,AL
1307713536,1307717631,IT
@@ -42777,24 +13989,9 @@
1307742208,1307746303,HU
1307746304,1307750399,UA
1307750400,1307754495,IT
-1307754496,1307755519,US
-1307755520,1307755775,GB
-1307755776,1307756031,GB
-1307756032,1307756287,US
-1307756288,1307756431,GB
-1307756432,1307756447,US
-1307756448,1307756543,GB
-1307756544,1307757055,FR
-1307757056,1307757063,GB
-1307757064,1307757071,US
-1307757072,1307757095,GB
-1307757096,1307757099,US
-1307757100,1307757183,GB
-1307757184,1307757279,US
-1307757280,1307757311,FR
-1307757312,1307757567,GB
-1307757568,1307757599,US
-1307757600,1307758591,GB
+1307754496,1307757289,GB
+1307757290,1307757293,FR
+1307757294,1307758591,GB
1307758592,1307762687,SM
1307762688,1307766783,PL
1307766784,1307770879,GB
@@ -42802,34 +13999,18 @@
1307774976,1307779071,RS
1307779072,1307787263,DK
1307787264,1307791359,MT
-1307791360,1307795455,KZ
1307795456,1307803647,RU
1307803648,1307807743,DK
1307807744,1307811839,SE
1307811840,1307815935,NL
-1307815936,1307816191,EU
-1307816192,1307816703,GB
-1307816704,1307816959,EU
-1307816960,1307817215,NL
-1307817216,1307817471,DE
-1307817472,1307817511,GB
-1307817512,1307817519,EU
-1307817520,1307817535,GB
-1307817536,1307817983,EU
+1307816192,1307816447,GB
1307817984,1307818048,GB
1307818049,1307818049,BE
-1307818050,1307818495,GB
-1307818496,1307818751,DE
-1307818752,1307819263,GB
-1307819264,1307819519,NL
-1307819520,1307820031,GB
+1307818050,1307818239,GB
+1307819520,1307819775,GB
1307820032,1307824127,ES
1307824128,1307828223,HU
-1307828224,1307830128,NL
-1307830129,1307830129,SE
-1307830130,1307830751,NL
-1307830752,1307830767,BE
-1307830768,1307832319,NL
+1307828224,1307832319,NL
1307832320,1307836415,RU
1307836416,1307840511,SE
1307840512,1307844607,RU
@@ -42837,30 +14018,7 @@
1307848704,1307852799,CH
1307852800,1307856895,RU
1307856896,1307860991,IT
-1307860992,1307861055,DE
-1307861056,1307861063,LU
-1307861064,1307861079,DE
-1307861080,1307861083,LU
-1307861084,1307861119,DE
-1307861120,1307861123,LU
-1307861124,1307861127,A2
-1307861128,1307861151,DE
-1307861152,1307861155,LU
-1307861156,1307861919,DE
-1307861920,1307861935,LU
-1307861936,1307861951,DE
-1307861952,1307861959,LU
-1307861960,1307861983,DE
-1307861984,1307861987,A2
-1307861988,1307864127,DE
-1307864128,1307864135,LU
-1307864136,1307864143,DE
-1307864144,1307864147,A2
-1307864148,1307864467,DE
-1307864468,1307864471,LU
-1307864472,1307864479,DE
-1307864480,1307864495,LU
-1307864496,1307865087,DE
+1307860992,1307865087,DE
1307865088,1307869183,AZ
1307869184,1307873279,GB
1307873280,1307877375,TJ
@@ -42869,19 +14027,9 @@
1307885568,1307889663,BG
1307889664,1307893759,RU
1307893760,1307897855,SE
-1307897856,1307901663,AT
-1307901664,1307901671,DE
-1307901672,1307901951,AT
+1307897856,1307901951,AT
1307901952,1307906047,JO
-1307906048,1307907263,CH
-1307907264,1307907327,IM
-1307907328,1307907459,CH
-1307907460,1307907463,DE
-1307907464,1307907719,CH
-1307907720,1307907727,IT
-1307907728,1307907823,CH
-1307907824,1307907831,IT
-1307907832,1307910143,CH
+1307906048,1307910143,CH
1307910144,1307914239,DE
1307914240,1307918335,NL
1307918336,1307922431,GB
@@ -42889,29 +14037,7 @@
1307926528,1307930623,KZ
1307930624,1307934719,RU
1307934720,1307938815,FR
-1307938816,1307938883,US
-1307938884,1307938892,TR
-1307938893,1307938994,US
-1307938995,1307939002,TR
-1307939003,1307939034,US
-1307939035,1307939042,TR
-1307939043,1307939073,US
-1307939074,1307939080,TR
-1307939081,1307939103,US
-1307939104,1307939119,TR
-1307939120,1307939167,US
-1307939168,1307939183,TR
-1307939184,1307939199,US
-1307939200,1307939231,TR
-1307939232,1307939359,US
-1307939360,1307939375,TR
-1307939376,1307939508,US
-1307939509,1307939512,TR
-1307939513,1307939770,US
-1307939771,1307939791,TR
-1307939792,1307940370,US
-1307940371,1307940378,TR
-1307940379,1307941119,US
+1307938816,1307941119,US
1307941120,1307942911,TR
1307942912,1307947007,RU
1307947008,1307951103,CH
@@ -42921,16 +14047,7 @@
1307967488,1307971583,IT
1307971584,1307979775,GB
1307979776,1307981823,ZW
-1307981824,1307982335,ZA
-1307982336,1307982591,BW
-1307982592,1307982847,ZA
-1307982848,1307983359,ZW
-1307983360,1307983423,ZA
-1307983424,1307983487,BW
-1307983488,1307983551,ZM
-1307983552,1307983615,MZ
-1307983616,1307983743,ZA
-1307983744,1307983871,ZM
+1307981824,1307983871,GB
1307983872,1307984383,NG
1307984384,1307987967,LB
1307987968,1307992063,FR
@@ -42943,39 +14060,20 @@
1308016640,1308020735,FI
1308020736,1308024831,BG
1308024832,1308033023,RU
-1308033024,1308033279,NL
-1308033280,1308033535,FR
-1308033536,1308033791,DE
-1308033792,1308034047,IT
-1308034048,1308034559,GB
-1308034560,1308034815,CZ
-1308034816,1308035327,DE
-1308035328,1308035583,GB
-1308035584,1308035839,AE
-1308035840,1308036095,GB
-1308036096,1308036351,SE
-1308036352,1308036607,BE
-1308036608,1308036863,ES
-1308036864,1308037119,FR
+1308033024,1308033535,DE
+1308033536,1308033791,GB
+1308033792,1308037119,DE
1308037120,1308041215,UA
1308041216,1308049407,RU
1308049408,1308053503,DK
1308053504,1308055551,DE
1308055552,1308057599,AL
-1308057600,1308061695,GR
-1308061696,1308069887,RU
+1308065792,1308069887,RU
1308069888,1308073983,NO
1308073984,1308078079,RU
-1308078080,1308079521,NL
-1308079522,1308079525,NL
-1308079526,1308079807,NL
-1308079808,1308079823,SC
-1308079824,1308080127,NL
+1308078080,1308080127,NL
1308080128,1308082175,RU
-1308082176,1308082687,GB
-1308082688,1308082943,AU
-1308082944,1308083199,US
-1308083200,1308084223,GB
+1308082176,1308084223,GB
1308084224,1308086271,RS
1308086272,1308088319,RU
1308088320,1308090367,UA
@@ -42992,8 +14090,7 @@
1309933568,1310195711,BE
1310195712,1310197759,RU
1310197760,1310199807,CZ
-1310199808,1310201599,IE
-1310201600,1310201855,GB
+1310199808,1310201855,IE
1310201856,1310203903,RU
1310203904,1310205951,FR
1310205952,1310207999,RU
@@ -43002,9 +14099,6 @@
1310212096,1310214143,HU
1310214144,1310216191,UA
1310216192,1310218239,IT
-1310220288,1310221311,NL
-1310221312,1310221567,MK
-1310221568,1310222335,NL
1310222336,1310224383,RS
1310224384,1310226431,GB
1310226432,1310228479,BE
@@ -43017,173 +14111,8 @@
1310240768,1310242815,RU
1310242816,1310244863,HU
1310244864,1310246911,EE
-1310246912,1310246927,FR
-1310246928,1310246943,ES
-1310246944,1310246959,IT
-1310246960,1310246975,AT
-1310246976,1310246991,PT
-1310246992,1310247007,NL
-1310247008,1310247023,GB
-1310247024,1310247039,GR
-1310247040,1310247055,CL
-1310247056,1310247071,BE
-1310247072,1310247087,MX
-1310247088,1310247103,AR
-1310247104,1310247119,PL
-1310247120,1310247135,IE
-1310247136,1310247151,CH
-1310247152,1310247167,RU
-1310247168,1310247183,BE
-1310247184,1310247199,BR
-1310247200,1310247215,CZ
-1310247216,1310247231,HK
-1310247232,1310247247,LU
-1310247248,1310247263,CN
-1310247264,1310247279,PH
-1310247280,1310247295,CH
-1310247296,1310247311,JP
-1310247312,1310247327,PE
-1310247328,1310247343,DE
-1310247344,1310247359,CA
-1310247360,1310247375,CR
-1310247376,1310247391,IN
-1310247392,1310247407,US
-1310247408,1310247423,CA
-1310247424,1310247431,BE
-1310247432,1310247439,BR
-1310247440,1310247447,CZ
-1310247448,1310247455,HK
-1310247456,1310247463,LU
-1310247464,1310247471,CN
-1310247472,1310247479,PH
-1310247480,1310247487,CH
-1310247488,1310247495,JP
-1310247496,1310247503,PE
-1310247504,1310247511,DE
-1310247512,1310247519,CA
-1310247520,1310247527,CR
-1310247528,1310247535,IN
-1310247536,1310247543,US
-1310247544,1310247551,CA
-1310247552,1310247559,FR
-1310247560,1310247567,ES
-1310247568,1310247575,IT
-1310247576,1310247583,AT
-1310247584,1310247591,PT
-1310247592,1310247599,NL
-1310247600,1310247607,GB
-1310247608,1310247615,GR
-1310247616,1310247623,CL
-1310247624,1310247631,BE
-1310247632,1310247639,MX
-1310247640,1310247647,AR
-1310247648,1310247655,PL
-1310247656,1310247663,IE
-1310247664,1310247671,CH
-1310247672,1310247679,RU
-1310247680,1310247687,BE
-1310247688,1310247695,BR
-1310247696,1310247703,CZ
-1310247704,1310247711,HK
-1310247712,1310247719,LU
-1310247720,1310247727,CN
-1310247728,1310247735,PH
-1310247736,1310247743,CH
-1310247744,1310247751,JP
-1310247752,1310247759,PE
-1310247760,1310247767,DE
-1310247768,1310247775,CA
-1310247776,1310247783,CR
-1310247784,1310247791,IN
-1310247792,1310247799,US
-1310247800,1310247807,CA
-1310247808,1310247815,FR
-1310247816,1310247823,ES
-1310247824,1310247831,IT
-1310247832,1310247839,AT
-1310247840,1310247847,PT
-1310247848,1310247855,NL
-1310247856,1310247863,GB
-1310247864,1310247871,GR
-1310247872,1310247879,CL
-1310247880,1310247887,BE
-1310247888,1310247895,MX
-1310247896,1310247903,AR
-1310247904,1310247911,PL
-1310247912,1310247919,IE
-1310247920,1310247927,CH
-1310247928,1310247935,RU
-1310247936,1310247951,TR
-1310247952,1310247967,SE
-1310247968,1310247983,NO
-1310247984,1310247999,DK
-1310248000,1310248015,LV
-1310248016,1310248031,BG
-1310248032,1310248047,UA
-1310248048,1310248063,CH
-1310248064,1310248079,ZA
-1310248080,1310248095,LU
-1310248096,1310248111,UY
-1310248112,1310248127,PA
-1310248128,1310248143,MY
-1310248144,1310248159,CO
-1310248160,1310248175,SG
-1310248176,1310248191,US
-1310248192,1310248207,RO
-1310248208,1310248223,LT
-1310248224,1310248239,BO
-1310248240,1310248255,HU
-1310248256,1310248271,FI
-1310248272,1310248287,IL
-1310248288,1310248303,AU
-1310248304,1310248319,NZ
-1310248320,1310248335,VE
-1310248336,1310248351,CR
-1310248352,1310248367,MA
-1310248368,1310248383,ID
-1310248384,1310248399,SK
-1310248400,1310248415,TW
-1310248416,1310248431,PA
-1310248432,1310248447,US
-1310248448,1310248455,BE
-1310248456,1310248463,BR
-1310248464,1310248487,FR
-1310248488,1310248495,CN
-1310248496,1310248503,FR
-1310248504,1310248511,CH
-1310248512,1310248519,JP
-1310248520,1310248527,PE
-1310248528,1310248535,DE
-1310248536,1310248543,CA
-1310248544,1310248551,CR
-1310248552,1310248559,IN
-1310248560,1310248567,US
-1310248568,1310248575,CA
-1310248576,1310248583,FR
-1310248584,1310248591,ES
-1310248592,1310248599,IT
-1310248600,1310248607,AT
-1310248608,1310248615,PT
-1310248616,1310248623,NL
-1310248624,1310248631,GB
-1310248632,1310248639,GR
-1310248640,1310248647,CL
-1310248648,1310248655,BE
-1310248656,1310248663,MX
-1310248664,1310248671,AR
-1310248672,1310248679,PL
-1310248680,1310248687,IE
-1310248688,1310248695,CH
-1310248696,1310248703,RU
-1310248704,1310248959,CH
-1310248960,1310249215,IM
-1310249216,1310249279,GB
-1310249280,1310249775,IM
-1310249776,1310249799,GG
-1310249800,1310250111,IM
-1310250112,1310250143,GG
-1310250144,1310250495,IM
-1310250496,1310251007,MT
+1310246912,1310248959,ZA
+1310248960,1310251007,IM
1310251008,1310255103,RU
1310255104,1310257151,CZ
1310257152,1310259199,FR
@@ -43207,8 +14136,19 @@
1310588928,1310605311,RU
1310605312,1310621695,PL
1310621696,1310638079,RS
-1310638080,1310654463,UA
-1310654464,1310656511,RU
+1310638080,1310639615,RU
+1310639616,1310639871,UA
+1310639872,1310640639,RU
+1310640640,1310641407,UA
+1310641408,1310642175,RU
+1310642176,1310642431,UA
+1310642432,1310643711,RU
+1310643712,1310644223,UA
+1310644224,1310648063,RU
+1310648064,1310648319,UA
+1310648320,1310650623,RU
+1310650624,1310650879,UA
+1310650880,1310656511,RU
1310656512,1310657535,GB
1310657536,1310658559,SE
1310658560,1310660607,RU
@@ -43247,8 +14187,8 @@
1310715904,1310717951,RU
1310717952,1310719999,UA
1310720000,1310851071,GB
-1310851072,1310921107,DE
-1310921108,1310921119,ES
+1310851072,1310921103,DE
+1310921104,1310921119,ES
1310921120,1310982143,DE
1310982144,1311113215,RU
1311113216,1311244287,IR
@@ -43256,35 +14196,21 @@
1311246336,1311248383,IT
1311248384,1311250431,GB
1311250432,1311252479,RU
-1311252480,1311253247,GB
-1311253248,1311253255,IT
-1311253256,1311253351,GB
-1311253352,1311253359,IT
-1311253360,1311253415,GB
-1311253416,1311253423,IT
-1311253424,1311254527,GB
+1311252480,1311253447,GB
+1311253448,1311253455,IT
+1311253456,1311254447,GB
+1311254448,1311254455,IT
+1311254456,1311254527,GB
1311254528,1311256575,SE
1311256576,1311258623,FR
1311258624,1311262719,GB
-1311262720,1311262975,FR
-1311262976,1311263407,CH
-1311263408,1311263423,BE
-1311263424,1311263615,CH
-1311263616,1311263679,FR
-1311263680,1311263871,CH
-1311263872,1311263999,FR
-1311264000,1311264255,CH
-1311264256,1311264767,FR
+1311262720,1311264767,CH
1311264768,1311266815,RU
1311266816,1311268863,FR
1311268864,1311270911,BE
1311270912,1311272959,RU
1311272960,1311275007,GB
-1311275008,1311276671,FR
-1311276672,1311276703,RU
-1311276704,1311276991,FR
-1311276992,1311277023,RU
-1311277024,1311277055,FR
+1311275008,1311277055,FR
1311277056,1311279103,IT
1311279104,1311280127,BG
1311280128,1311280383,MK
@@ -43295,30 +14221,22 @@
1311291392,1311293439,RU
1311293440,1311295487,NL
1311295488,1311297535,IT
-1311297536,1311298559,EU
-1311298560,1311299583,AT
+1311297536,1311299583,AT
1311299584,1311301631,RU
1311301632,1311303679,TR
1311303680,1311307775,GB
1311307776,1311309823,IS
-1311309824,1311310335,GB
-1311310336,1311310847,GG
-1311310848,1311311103,GB
-1311311104,1311311359,GG
-1311311360,1311311823,GB
-1311311824,1311311824,JE
-1311311825,1311311871,GB
+1311309824,1311310591,GB
+1311310592,1311310847,GG
+1311310848,1311310857,GB
+1311310858,1311310858,GG
+1311310859,1311311871,GB
1311311872,1311315967,CZ
-1311315968,1311317247,PL
-1311317248,1311317503,A2
-1311317504,1311318015,PL
+1311315968,1311318015,PL
1311318016,1311320063,RU
1311320064,1311322111,FR
-1311322112,1311324159,IT
1311324160,1311326207,LB
-1311326208,1311328159,BE
-1311328160,1311328191,LU
-1311328192,1311328255,BE
+1311326208,1311328255,BE
1311328256,1311330303,NL
1311332352,1311338495,RU
1311338496,1311340543,AT
@@ -43330,88 +14248,39 @@
1311350784,1311352831,FR
1311352832,1311354879,SK
1311354880,1311356927,RU
-1311356928,1311357183,GB
-1311357184,1311357439,FR
-1311357440,1311357695,IT
-1311357696,1311357951,CH
-1311357952,1311358207,CA
-1311358208,1311358263,FR
-1311358264,1311358271,ES
-1311358272,1311358719,FR
-1311358720,1311358975,BE
+1311356928,1311358975,FR
1311358976,1311361023,RU
-1311361024,1311361816,NL
-1311361817,1311361817,AU
-1311361818,1311363071,NL
+1311361024,1311363071,NL
1311363072,1311365119,GB
1311365120,1311367167,DE
-1311367168,1311367295,GN
-1311367296,1311367423,GA
-1311367424,1311367679,MM
-1311367680,1311367711,UG
-1311367712,1311367743,CD
-1311367744,1311367775,SL
-1311367776,1311367807,LR
-1311367808,1311367839,US
-1311367840,1311367871,DK
-1311367872,1311367887,LR
-1311367888,1311367895,DE
-1311367896,1311367903,NG
-1311367904,1311367927,A2
-1311367928,1311367935,DE
-1311367936,1311368191,A2
-1311368192,1311368319,BD
-1311368320,1311368447,CF
-1311368448,1311368575,TZ
-1311368576,1311368703,PG
-1311368704,1311368831,NP
-1311368832,1311368959,GM
-1311368960,1311369087,PT
-1311369088,1311369215,BT
+1311367168,1311369215,GB
1311369216,1311371263,FR
1311371264,1311373311,SE
-1311373312,1311374335,FR
-1311374336,1311374351,ES
-1311374352,1311375359,FR
+1311373312,1311375359,FR
1311375360,1311506431,DE
1311506432,1311637503,CZ
-1311637504,1311689599,DE
-1311689600,1311689607,ES
-1311689608,1311689687,DE
-1311689688,1311689695,ES
-1311689696,1311693335,DE
-1311693336,1311693343,ES
-1311693344,1311699527,DE
-1311699528,1311699535,IT
-1311699536,1311757439,DE
-1311757440,1311757447,ES
-1311757448,1311757463,DE
-1311757464,1311757471,ES
-1311757472,1312292863,DE
+1311637504,1312292863,DE
1312292864,1312817151,LT
-1312817152,1313192191,SE
-1313192192,1313192447,DK
-1313192448,1313865727,SE
+1312817152,1313183103,SE
+1313183104,1313183231,DK
+1313183232,1313865727,SE
1313865728,1313931263,CZ
1313931264,1313996799,RU
1313996800,1314062335,SE
-1314062336,1314088763,BG
-1314088764,1314088764,BG
-1314088765,1314127871,BG
+1314062336,1314127871,BG
1314127872,1314193407,LV
1314193408,1314258943,RU
1314258944,1314324479,GB
1314324480,1314390015,GR
1314390016,1314455551,PL
-1314455552,1314489599,KW
-1314489600,1314489855,US
-1314489856,1314521087,KW
+1314455552,1314521087,KW
1314521088,1314586623,BG
1314586624,1314652159,NO
1314652160,1314717695,HU
1314717696,1314783231,SA
1314783232,1314848767,DE
-1314848768,1315045375,RO
+1314848768,1314881535,GB
+1314881536,1315045375,RO
1315045376,1315176447,SK
1315176448,1315307519,QA
1315307520,1315438591,CZ
@@ -43424,145 +14293,26 @@
1315713024,1315717119,SE
1315717120,1315725311,RU
1315725312,1315729407,CZ
-1315729408,1315733503,EU
1315733504,1315737599,NL
1315737600,1315741695,CZ
1315741696,1315745791,LB
-1315745792,1315749375,CZ
-1315749376,1315749503,ES
-1315749504,1315749887,CZ
+1315745792,1315749887,CZ
1315749888,1315753983,RU
-1315753984,1315758079,KZ
-1315758080,1315759103,RE
-1315759104,1315759871,FR
-1315759872,1315760383,RE
-1315760384,1315760895,FR
-1315760896,1315761023,RE
-1315761024,1315761407,FR
+1315758080,1315758847,RE
+1315758848,1315760639,FR
+1315760640,1315760895,RE
+1315760896,1315761407,FR
1315761408,1315761663,RE
1315761664,1315761919,FR
1315761920,1315762175,RE
1315762176,1315766271,BG
-1315766272,1315769087,NL
-1315769088,1315769343,EU
-1315769344,1315769855,NL
-1315769856,1315770111,EU
-1315770112,1315770367,NL
-1315770368,1315770391,UA
-1315770392,1315770399,NA
-1315770400,1315770503,UA
-1315770504,1315770511,NA
-1315770512,1315770575,UA
-1315770576,1315770583,NA
-1315770584,1315770639,UA
-1315770640,1315770647,NA
-1315770648,1315770719,UA
-1315770720,1315770727,NA
-1315770728,1315770975,UA
-1315770976,1315770983,NA
-1315770984,1315770991,UA
-1315770992,1315770999,NA
-1315771000,1315771199,UA
-1315771200,1315771207,NA
-1315771208,1315771223,UA
-1315771224,1315771231,NA
-1315771232,1315771247,UA
-1315771248,1315771263,NA
-1315771264,1315771271,UA
-1315771272,1315771279,NA
-1315771280,1315771415,UA
-1315771416,1315771423,NA
-1315771424,1315771639,UA
-1315771640,1315771647,NA
-1315771648,1315771759,UA
-1315771760,1315771767,NA
-1315771768,1315771815,UA
-1315771816,1315771823,NA
-1315771824,1315771871,UA
-1315771872,1315771879,NA
-1315771880,1315771935,UA
-1315771936,1315771951,NA
-1315771952,1315771959,UA
-1315771960,1315771967,NA
-1315771968,1315772031,UA
-1315772032,1315772039,NA
-1315772040,1315772167,UA
-1315772168,1315772175,NA
-1315772176,1315772191,UA
-1315772192,1315772199,NA
-1315772200,1315772223,UA
-1315772224,1315772231,NA
-1315772232,1315772303,UA
-1315772304,1315772311,NA
-1315772312,1315772319,UA
-1315772320,1315772327,NA
-1315772328,1315772399,UA
-1315772400,1315772407,NA
-1315772408,1315772463,UA
-1315772464,1315772479,NA
-1315772480,1315772503,UA
-1315772504,1315772511,NA
-1315772512,1315772583,UA
-1315772584,1315772599,NA
-1315772600,1315772703,UA
-1315772704,1315772711,NA
-1315772712,1315772919,UA
-1315772920,1315772927,NA
-1315772928,1315773487,UA
-1315773488,1315773495,NA
-1315773496,1315773511,UA
-1315773512,1315773519,NA
-1315773520,1315773535,UA
-1315773536,1315773543,NA
-1315773544,1315773551,UA
-1315773552,1315773559,NA
-1315773560,1315773575,UA
-1315773576,1315773583,NA
-1315773584,1315773655,UA
-1315773656,1315773663,NA
-1315773664,1315773679,UA
-1315773680,1315773687,NA
-1315773688,1315773703,UA
-1315773704,1315773711,NA
-1315773712,1315773719,UA
-1315773720,1315773751,NA
-1315773752,1315773895,UA
-1315773896,1315773903,NA
-1315773904,1315773955,UA
-1315773956,1315773959,NA
-1315773960,1315773983,UA
-1315773984,1315773991,BY
-1315773992,1315774015,UA
-1315774016,1315774031,NA
-1315774032,1315774039,UA
-1315774040,1315774071,NA
-1315774072,1315774095,UA
-1315774096,1315774111,NA
-1315774112,1315774135,UA
-1315774136,1315774143,US
-1315774144,1315774191,UA
-1315774192,1315774207,NA
-1315774208,1315774239,UA
-1315774240,1315774255,RU
-1315774256,1315774263,NA
-1315774264,1315774423,UA
-1315774424,1315774431,NA
-1315774432,1315774463,UA
+1315766272,1315770367,NL
+1315770368,1315774463,UA
1315774464,1315778559,RU
1315778560,1315780607,AZ
-1315780608,1315780863,DE
-1315780864,1315781119,PL
-1315781120,1315781535,DE
-1315781536,1315781543,DK
-1315781544,1315781631,DE
-1315781632,1315781887,DK
-1315781888,1315782143,DE
-1315782144,1315782399,PL
-1315782400,1315782655,DK
+1315780608,1315782655,DE
1315782656,1315786751,AM
-1315786752,1315790592,FR
-1315790593,1315790593,IT
-1315790594,1315790847,FR
+1315786752,1315790847,FR
1315790848,1315794943,RS
1315794944,1315803135,RU
1315803136,1315807231,KZ
@@ -43570,12 +14320,9 @@
1315815424,1315819519,IR
1315819520,1315823615,DK
1315823616,1315827711,IQ
-1315827712,1315831807,RU
+1315827712,1315831807,FR
1315831808,1315835903,SA
-1315835904,1315836159,CY
-1315836160,1315839487,MT
-1315839488,1315839743,CY
-1315839744,1315839999,MT
+1315835904,1315839999,MT
1315840000,1315844095,EE
1315844096,1315848191,RU
1315848192,1315852287,BH
@@ -43592,21 +14339,20 @@
1315893248,1315897343,RU
1315897344,1315901439,IR
1315901440,1315905535,UA
-1315905536,1315909631,BA
+1315905536,1315909631,SI
1315909632,1315913727,AZ
1315913728,1315917823,DE
1315917824,1315921919,RU
1315921920,1315926015,TR
1315926016,1315930111,CZ
-1315930112,1315930623,DE
-1315930624,1315930879,LB
-1315930880,1315931135,DE
-1315931136,1315931647,LB
-1315931648,1315934207,DE
+1315930112,1315934207,DE
1315934208,1315938303,RU
1315938304,1315942399,DK
-1315942400,1315946495,UA
-1315946496,1315950591,GG
+1315942400,1315945030,UA
+1315945031,1315945031,RU
+1315945032,1315946495,UA
+1315946496,1315946751,GB
+1315946752,1315950591,GG
1315950592,1315954687,UA
1315954688,1315958783,DE
1315958784,1315962879,RU
@@ -43614,35 +14360,9 @@
1317011456,1317044223,BG
1317044224,1317076991,CZ
1317076992,1317109759,BE
-1317109760,1317113855,GB
-1317113856,1317114111,US
-1317114112,1317119103,GB
-1317119104,1317119119,CH
-1317119120,1317126399,GB
+1317109760,1317126399,GB
1317126400,1317126655,US
-1317126656,1317129023,GB
-1317129024,1317129039,CH
-1317129040,1317129055,GB
-1317129056,1317129087,CA
-1317129088,1317129279,GB
-1317129280,1317129343,CA
-1317129344,1317129471,GB
-1317129472,1317129599,IT
-1317129600,1317130495,GB
-1317130496,1317130511,CH
-1317130512,1317133055,GB
-1317133056,1317133183,LV
-1317133184,1317135615,GB
-1317135616,1317135871,DE
-1317135872,1317137183,GB
-1317137184,1317137215,CH
-1317137216,1317137663,GB
-1317137664,1317137919,SE
-1317137920,1317140095,GB
-1317140096,1317140223,US
-1317140224,1317142143,GB
-1317142144,1317142271,CA
-1317142272,1317142527,GB
+1317126656,1317142527,GB
1317142528,1317175295,PT
1317175296,1317208063,BG
1317208064,1317240831,HU
@@ -43663,753 +14383,22 @@
1317617664,1317625855,YE
1317625856,1317627903,DE
1317627904,1317629951,RU
-1317629952,1317634047,GB
-1317634048,1317637119,IE
-1317637120,1317637375,GB
-1317637376,1317641471,IE
-1317641472,1317641727,GB
-1317641728,1317642815,IE
-1317642816,1317642847,GB
-1317642848,1317642863,IE
-1317642864,1317642879,GB
-1317642880,1317642975,IE
-1317642976,1317642991,GB
-1317642992,1317643023,IE
-1317643024,1317643039,GB
-1317643040,1317645407,IE
-1317645408,1317645423,GB
-1317645424,1317645487,IE
-1317645488,1317645823,GB
-1317645824,1317646895,IE
-1317646896,1317646911,GB
-1317646912,1317646991,IE
-1317646992,1317646999,GB
-1317647000,1317647063,IE
-1317647064,1317647071,GB
-1317647072,1317647359,IE
-1317647360,1317647615,GB
-1317647616,1317648383,IE
-1317648384,1317649919,GB
-1317649920,1317650023,IE
-1317650024,1317650031,GB
-1317650032,1317650047,IE
-1317650048,1317650095,GB
-1317650096,1317650135,IE
-1317650136,1317650143,GB
-1317650144,1317650431,IE
+1317629952,1317636095,GB
+1317636096,1317637119,IE
+1317637120,1317642239,GB
+1317642240,1317642495,IE
+1317642496,1317646551,GB
+1317646552,1317646559,IE
+1317646560,1317647015,GB
+1317647016,1317647023,IE
+1317647024,1317650130,GB
+1317650131,1317650131,IE
+1317650132,1317650431,GB
1317650432,1317666815,PT
-1317666816,1317666839,GB
-1317666840,1317666855,GH
-1317666856,1317666863,GB
-1317666864,1317666871,GH
-1317666872,1317666879,GB
-1317666880,1317666887,LR
-1317666888,1317666911,NG
-1317666912,1317666959,GB
-1317666960,1317666967,NG
-1317666968,1317666999,GB
-1317667000,1317667007,AO
-1317667008,1317667015,GH
-1317667016,1317667055,GB
-1317667056,1317667063,LR
-1317667064,1317667103,GB
-1317667104,1317667111,UG
-1317667112,1317667135,GB
-1317667136,1317667143,AO
-1317667144,1317667151,GB
-1317667152,1317667159,NG
-1317667160,1317667167,AO
-1317667168,1317667175,NG
-1317667176,1317667191,GB
-1317667192,1317667207,NG
-1317667208,1317667223,GB
-1317667224,1317667231,NG
-1317667232,1317667239,GB
-1317667240,1317667247,NG
-1317667248,1317667287,GB
-1317667288,1317667295,NG
-1317667296,1317667327,GB
-1317667328,1317667335,NG
-1317667336,1317667343,GB
-1317667344,1317667351,NG
-1317667352,1317667359,AO
-1317667360,1317667423,GB
-1317667424,1317667431,TD
-1317667432,1317667439,GH
-1317667440,1317667487,GB
-1317667488,1317667495,GH
-1317667496,1317667551,GB
-1317667552,1317667567,NG
-1317667568,1317667751,GB
-1317667752,1317667759,NG
-1317667760,1317667767,FR
-1317667768,1317667775,ZA
-1317667776,1317667783,US
-1317667784,1317667791,AO
-1317667792,1317667799,NG
-1317667800,1317667807,GB
-1317667808,1317667815,NG
-1317667816,1317667823,UG
-1317667824,1317668095,GB
-1317668096,1317668103,GR
-1317668104,1317668143,GB
-1317668144,1317668151,AO
-1317668152,1317668159,GB
-1317668160,1317668167,NG
-1317668168,1317668183,GB
-1317668184,1317668191,CI
-1317668192,1317668207,GB
-1317668208,1317668215,LR
-1317668216,1317668223,GB
-1317668224,1317668231,NG
-1317668232,1317668271,GB
-1317668272,1317668279,SL
-1317668280,1317668303,GB
-1317668304,1317668311,UG
-1317668312,1317668319,IQ
-1317668320,1317668351,GB
-1317668352,1317668359,NG
-1317668360,1317668367,SL
-1317668368,1317668391,GB
-1317668392,1317668399,NG
-1317668400,1317668407,GB
-1317668408,1317668415,GH
-1317668416,1317668447,NG
-1317668448,1317668455,GB
-1317668456,1317668463,BJ
-1317668464,1317668471,AO
-1317668472,1317668487,GB
-1317668488,1317668495,UG
-1317668496,1317668503,GH
-1317668504,1317668511,CD
-1317668512,1317668551,GB
-1317668552,1317668559,AO
-1317668560,1317668567,GB
-1317668568,1317668575,NG
-1317668576,1317668583,GB
-1317668584,1317668591,LR
-1317668592,1317668599,UG
-1317668600,1317668615,GB
-1317668616,1317668623,UG
-1317668624,1317668639,GB
-1317668640,1317668647,NG
-1317668648,1317668671,GB
-1317668672,1317668687,NG
-1317668688,1317668727,GB
-1317668728,1317668735,NG
-1317668736,1317668767,GB
-1317668768,1317668775,LR
-1317668776,1317668783,GB
-1317668784,1317668791,NG
-1317668792,1317668807,GB
-1317668808,1317668815,NG
-1317668816,1317668967,GB
-1317668968,1317668975,NG
-1317668976,1317669007,GB
-1317669008,1317669015,NG
-1317669016,1317669055,GB
-1317669056,1317669063,NG
-1317669064,1317669087,GB
-1317669088,1317669095,CD
-1317669096,1317669103,NG
-1317669104,1317669111,GB
-1317669112,1317669119,NG
-1317669120,1317669375,GE
-1317669376,1317669903,GB
-1317669904,1317669911,NG
-1317669912,1317669919,GH
-1317669920,1317669927,GB
-1317669928,1317669935,CM
-1317669936,1317669943,GB
-1317669944,1317669959,NG
-1317669960,1317669983,GB
-1317669984,1317669991,LR
-1317669992,1317669999,NG
-1317670000,1317670063,GB
-1317670064,1317670079,NG
-1317670080,1317670143,GB
-1317670144,1317670175,SL
-1317670176,1317670223,GB
-1317670224,1317670231,AO
-1317670232,1317670447,GB
-1317670448,1317670455,IQ
-1317670456,1317670463,GB
-1317670464,1317670471,NG
-1317670472,1317670479,CO
-1317670480,1317670511,GB
-1317670512,1317670519,CI
-1317670520,1317670527,GB
-1317670528,1317670535,NG
-1317670536,1317670583,GB
-1317670584,1317670591,GH
-1317670592,1317670607,GB
-1317670608,1317670615,NG
-1317670616,1317670623,UG
-1317670624,1317670631,GB
-1317670632,1317670639,NG
-1317670640,1317670647,GB
-1317670648,1317670655,NG
-1317670656,1317670663,AO
-1317670664,1317670679,GB
-1317670680,1317670687,NG
-1317670688,1317670695,GB
-1317670696,1317670703,NG
-1317670704,1317670711,GB
-1317670712,1317670719,GH
-1317670720,1317670727,GB
-1317670728,1317670735,GH
-1317670736,1317670767,GB
-1317670768,1317670775,GH
-1317670776,1317670783,GB
-1317670784,1317670791,GH
-1317670792,1317670847,GB
-1317670848,1317670855,NG
-1317670856,1317670863,CD
-1317670864,1317670896,GB
-1317670897,1317670903,NG
-1317670904,1317671175,GB
-1317671176,1317671191,NG
-1317671192,1317671239,GB
-1317671240,1317671247,CI
-1317671248,1317671255,GB
-1317671256,1317671263,CI
-1317671264,1317671319,GB
-1317671320,1317671327,NG
-1317671328,1317671335,GB
-1317671336,1317671343,BW
-1317671344,1317671359,GB
-1317671360,1317671367,NG
-1317671368,1317671375,GB
-1317671376,1317671383,NG
-1317671384,1317671391,CI
-1317671392,1317671399,GB
-1317671400,1317671407,IQ
-1317671408,1317671447,GB
-1317671448,1317671463,NG
-1317671464,1317671471,GB
-1317671472,1317671487,NG
-1317671488,1317671527,GB
-1317671528,1317671535,NG
-1317671536,1317671543,LR
-1317671544,1317671551,SD
-1317671552,1317671655,GB
-1317671656,1317671663,NG
-1317671664,1317671671,GB
-1317671672,1317671679,AO
-1317671680,1317671687,LR
-1317671688,1317671719,GB
-1317671720,1317671727,NG
-1317671728,1317671759,GB
-1317671760,1317671767,AO
-1317671768,1317671799,GB
-1317671800,1317671807,NG
-1317671808,1317671823,CI
-1317671824,1317671831,NG
-1317671832,1317671855,GB
-1317671856,1317671863,UG
-1317671864,1317671903,GB
-1317671904,1317671911,NG
-1317671912,1317671919,AO
-1317671920,1317671927,NG
-1317671928,1317671935,GB
-1317671936,1317672447,GA
-1317672448,1317672455,GB
-1317672456,1317672463,GA
-1317672464,1317672495,GB
-1317672496,1317672503,NG
-1317672504,1317672583,GB
-1317672584,1317672591,CD
-1317672592,1317672615,GB
-1317672616,1317672623,NG
-1317672624,1317672671,GB
-1317672672,1317672679,NG
-1317672680,1317672727,GB
-1317672728,1317672735,UG
-1317672736,1317672743,LR
-1317672744,1317672759,GB
-1317672760,1317672767,NG
-1317672768,1317672815,GB
-1317672816,1317672823,BW
-1317672824,1317672839,GB
-1317672840,1317672847,NG
-1317672848,1317672863,GB
-1317672864,1317672871,NG
-1317672872,1317672903,GB
-1317672904,1317672911,CI
-1317672912,1317672919,GB
-1317672920,1317672927,GH
-1317672928,1317672959,GB
-1317672960,1317673231,NG
-1317673232,1317673335,GB
-1317673336,1317673343,GH
-1317673344,1317673351,GR
-1317673352,1317673375,GB
-1317673376,1317673383,AO
-1317673384,1317673391,NG
-1317673392,1317673423,GB
-1317673424,1317673431,NG
-1317673432,1317673455,GB
-1317673456,1317673463,AO
-1317673464,1317673471,GB
-1317673472,1317673479,NG
-1317673480,1317673495,GB
-1317673496,1317673519,NG
-1317673520,1317673543,GB
-1317673544,1317673551,ZW
-1317673552,1317673575,GB
-1317673576,1317673583,CD
-1317673584,1317673623,GB
-1317673624,1317673631,NG
-1317673632,1317673639,GB
-1317673640,1317673647,AO
-1317673648,1317673679,GB
-1317673680,1317673687,IQ
-1317673688,1317673711,GB
-1317673712,1317673719,CO
-1317673720,1317673727,NG
-1317673728,1317673735,GB
-1317673736,1317673743,AO
-1317673744,1317673751,IQ
-1317673752,1317673815,GB
-1317673816,1317673823,LR
-1317673824,1317673863,GB
-1317673864,1317673871,NG
-1317673872,1317673903,GB
-1317673904,1317673911,NG
-1317673912,1317673919,GB
-1317673920,1317673927,CI
-1317673928,1317673935,NG
-1317673936,1317673943,GB
-1317673944,1317673951,AO
-1317673952,1317673959,NG
-1317673960,1317673983,GB
-1317673984,1317674239,NG
-1317674240,1317674271,GB
-1317674272,1317674279,NG
-1317674280,1317674295,GB
-1317674296,1317674303,AO
-1317674304,1317674319,NG
-1317674320,1317674415,GB
-1317674416,1317674423,AO
-1317674424,1317674431,UG
-1317674432,1317674439,GB
-1317674440,1317674440,AO
-1317674441,1317674447,GB
-1317674448,1317674455,AO
-1317674456,1317674463,GB
-1317674464,1317674471,NG
-1317674472,1317674487,GB
-1317674488,1317674495,UG
-1317674496,1317674535,GB
-1317674536,1317674543,IQ
-1317674544,1317674551,GB
-1317674552,1317674567,NG
-1317674568,1317674623,GB
-1317674624,1317674631,NG
-1317674632,1317674639,GB
-1317674640,1317674647,NG
-1317674648,1317674655,GB
-1317674656,1317674671,NG
-1317674672,1317674687,GB
-1317674688,1317674695,NG
-1317674696,1317674711,GB
-1317674712,1317674735,NG
-1317674736,1317674743,GB
-1317674744,1317674751,IQ
-1317674752,1317674759,NG
-1317674760,1317674767,GB
-1317674768,1317674775,NG
-1317674776,1317674783,GB
-1317674784,1317674791,NG
-1317674792,1317674799,GB
-1317674800,1317674807,NG
-1317674808,1317674823,GB
-1317674824,1317674831,NG
-1317674832,1317674847,GB
-1317674848,1317674855,NG
-1317674856,1317674879,GB
-1317674880,1317674887,NG
-1317674888,1317674911,GB
-1317674912,1317674919,NG
-1317674920,1317674935,GB
-1317674936,1317674943,NG
-1317674944,1317674951,GB
-1317674952,1317674959,NG
-1317674960,1317674967,GH
-1317674968,1317674983,NG
-1317674984,1317675031,GB
-1317675032,1317675039,NG
-1317675040,1317675063,GB
-1317675064,1317675071,AO
-1317675072,1317675087,GB
-1317675088,1317675095,NG
-1317675096,1317675271,GB
-1317675272,1317675279,NG
-1317675280,1317675295,GB
-1317675296,1317675319,NG
-1317675320,1317675351,GB
-1317675352,1317675359,IQ
-1317675360,1317675367,NG
-1317675368,1317675423,GB
-1317675424,1317675439,NG
-1317675440,1317675463,GB
-1317675464,1317675471,CI
-1317675472,1317675559,GB
-1317675560,1317675567,NA
-1317675568,1317675591,GB
-1317675592,1317675607,NG
-1317675608,1317675623,GB
-1317675624,1317675639,NG
-1317675640,1317675647,FR
-1317675648,1317675695,GB
-1317675696,1317675703,NG
-1317675704,1317675743,GB
-1317675744,1317675751,GH
-1317675752,1317675759,NG
-1317675760,1317675775,GH
-1317675776,1317675807,GB
-1317675808,1317675815,NG
-1317675816,1317675847,GB
-1317675848,1317675855,TD
-1317675856,1317675903,GB
-1317675904,1317675911,SN
-1317675912,1317675919,NG
-1317675920,1317675951,GB
-1317675952,1317675959,KE
-1317675960,1317675991,GB
-1317675992,1317675999,NG
-1317676000,1317676007,GB
-1317676008,1317676015,GH
-1317676016,1317676023,SD
-1317676024,1317676031,GB
-1317676032,1317676047,NG
-1317676048,1317676063,GB
-1317676064,1317676071,GH
-1317676072,1317676079,NG
-1317676080,1317676087,AO
-1317676088,1317676095,NG
-1317676096,1317676103,GB
-1317676104,1317676111,NG
-1317676112,1317676119,CM
-1317676120,1317676135,GB
-1317676136,1317676143,CM
-1317676144,1317676151,NG
-1317676152,1317676159,CM
-1317676160,1317676167,TG
-1317676168,1317676175,ML
-1317676176,1317676191,GB
-1317676192,1317676207,SD
-1317676208,1317676223,GB
-1317676224,1317676231,GH
-1317676232,1317676239,GB
-1317676240,1317676247,NG
-1317676248,1317676287,GB
-1317676288,1317676295,NG
-1317676296,1317676327,GB
-1317676328,1317676335,NG
-1317676336,1317676359,GB
-1317676360,1317676407,NG
-1317676408,1317676423,GB
-1317676424,1317676463,NG
-1317676464,1317676503,GB
-1317676504,1317676511,NG
-1317676512,1317676519,GB
-1317676520,1317676527,NG
-1317676528,1317676543,GB
-1317676544,1317676567,NG
-1317676568,1317676575,BF
-1317676576,1317676583,GB
-1317676584,1317676591,NG
-1317676592,1317676599,GB
-1317676600,1317676607,AO
-1317676608,1317676615,SL
-1317676616,1317676655,GB
-1317676656,1317676663,NG
-1317676664,1317676711,GB
-1317676712,1317676719,NG
-1317676720,1317676807,GB
-1317676808,1317676815,NG
-1317676816,1317676823,LR
-1317676824,1317676851,NG
-1317676852,1317676911,GB
-1317676912,1317676919,CM
-1317676920,1317676943,GB
-1317676944,1317676951,CM
-1317676952,1317676983,GB
-1317676984,1317676999,NG
-1317677000,1317677007,IQ
-1317677008,1317677015,GB
-1317677016,1317677023,NG
-1317677024,1317677031,GB
-1317677032,1317677039,NG
-1317677040,1317677047,GB
-1317677048,1317677055,NG
-1317677056,1317677063,UG
-1317677064,1317677095,GB
-1317677096,1317677103,BF
-1317677104,1317677111,GB
-1317677112,1317677119,NG
-1317677120,1317677191,GB
-1317677192,1317677199,SD
-1317677200,1317677207,NG
-1317677208,1317677247,GB
-1317677248,1317677255,NG
-1317677256,1317677263,GB
-1317677264,1317677271,NG
-1317677272,1317677279,FR
-1317677280,1317677303,GB
-1317677304,1317677311,NG
-1317677312,1317677319,CD
-1317677320,1317677327,AO
-1317677328,1317677335,CD
-1317677336,1317677343,GB
-1317677344,1317677345,NG
-1317677346,1317677375,GB
-1317677376,1317677391,NG
-1317677392,1317677407,GB
-1317677408,1317677415,UG
-1317677416,1317677423,LR
-1317677424,1317677425,UG
-1317677426,1317677447,GB
-1317677448,1317677455,CD
-1317677456,1317677463,AO
-1317677464,1317677471,UG
-1317677472,1317677479,GB
-1317677480,1317677487,CM
-1317677488,1317677495,GB
-1317677496,1317677503,NG
-1317677504,1317677519,GB
-1317677520,1317677527,NG
-1317677528,1317677535,GQ
-1317677536,1317677543,NG
-1317677544,1317677551,LR
-1317677552,1317677559,GB
-1317677560,1317677567,NG
-1317677568,1317677711,GB
-1317677712,1317677719,NG
-1317677720,1317677823,GB
-1317677824,1317677831,AO
-1317677832,1317677839,GB
-1317677840,1317677847,LR
-1317677848,1317677855,NG
-1317677856,1317677863,BF
-1317677864,1317677887,GB
-1317677888,1317677895,ML
-1317677896,1317677903,GN
-1317677904,1317677935,GB
-1317677936,1317677943,NG
-1317677944,1317678047,GB
-1317678048,1317678055,IQ
-1317678056,1317678071,GB
-1317678072,1317678079,NG
-1317678080,1317678095,GB
-1317678096,1317678103,GQ
-1317678104,1317678127,GB
-1317678128,1317678135,SD
-1317678136,1317678143,NG
-1317678144,1317678151,TD
-1317678152,1317678159,NG
-1317678160,1317678167,GQ
-1317678168,1317678175,NG
-1317678176,1317678183,GR
-1317678184,1317678207,GB
-1317678208,1317678215,NG
-1317678216,1317678223,GB
-1317678224,1317678231,NG
-1317678232,1317678239,BF
-1317678240,1317678255,GB
-1317678256,1317678263,CD
-1317678264,1317678271,GB
-1317678272,1317678279,CD
-1317678280,1317678287,LR
-1317678288,1317678295,GR
-1317678296,1317678311,GB
-1317678312,1317678319,SD
-1317678320,1317678327,NG
-1317678328,1317678335,GB
-1317678336,1317678343,AO
-1317678344,1317678351,GB
-1317678352,1317678359,CD
-1317678360,1317678367,NG
-1317678368,1317678375,CD
-1317678376,1317678383,GB
-1317678384,1317678391,NE
-1317678392,1317678399,GB
-1317678400,1317678415,NG
-1317678416,1317678447,GB
-1317678448,1317678455,NG
-1317678456,1317678463,CD
-1317678464,1317678471,NG
-1317678472,1317678479,ML
-1317678480,1317678487,CD
-1317678488,1317678527,GB
-1317678528,1317678535,GA
-1317678536,1317678543,NG
-1317678544,1317678551,GB
-1317678552,1317678559,NG
-1317678560,1317678567,GB
-1317678568,1317678575,CD
-1317678576,1317678583,GB
-1317678584,1317678591,AO
-1317678592,1317678631,GB
-1317678632,1317678639,NG
-1317678640,1317678831,GB
-1317678832,1317678839,NG
-1317678840,1317678871,GB
-1317678872,1317678879,BJ
-1317678880,1317678943,GB
-1317678944,1317678951,NG
-1317678952,1317678991,GB
-1317678992,1317678999,NG
-1317679000,1317679023,GB
-1317679024,1317679031,TZ
-1317679032,1317679063,GB
-1317679064,1317679071,CM
-1317679072,1317679127,GB
-1317679128,1317679135,US
-1317679136,1317679223,GB
-1317679224,1317679231,NG
-1317679232,1317679247,GB
-1317679248,1317679255,NG
-1317679256,1317679263,GB
-1317679264,1317679271,NG
-1317679272,1317679319,GB
-1317679320,1317679327,NG
-1317679328,1317679343,GB
-1317679344,1317679351,TD
-1317679352,1317679359,GB
-1317679360,1317679375,GQ
-1317679376,1317679383,NG
-1317679384,1317679391,GB
-1317679392,1317679407,NG
-1317679408,1317679415,GB
-1317679416,1317679423,NG
-1317679424,1317679431,NE
-1317679432,1317679447,GB
-1317679448,1317679455,CD
-1317679456,1317679463,BJ
-1317679464,1317679495,GB
-1317679496,1317679503,CD
-1317679504,1317679511,NG
-1317679512,1317679519,NE
-1317679520,1317679527,CD
-1317679528,1317679543,GB
-1317679544,1317679551,CD
-1317679552,1317679559,GB
-1317679560,1317679567,NG
-1317679568,1317679591,GB
-1317679592,1317679599,CD
-1317679600,1317679607,NE
-1317679608,1317679615,GQ
-1317679616,1317679623,AO
-1317679624,1317679639,GB
-1317679640,1317679647,ZW
-1317679648,1317679655,GB
-1317679656,1317679663,NG
-1317679664,1317679679,AO
-1317679680,1317679687,CI
-1317679688,1317679695,NG
-1317679696,1317679703,BJ
-1317679704,1317679711,GB
-1317679712,1317679719,AO
-1317679720,1317679743,GB
-1317679744,1317679751,AO
-1317679752,1317679759,CD
-1317679760,1317679767,NG
-1317679768,1317679775,GB
-1317679776,1317679783,GN
-1317679784,1317679791,SS
-1317679792,1317679799,GB
-1317679800,1317679807,CF
-1317679808,1317679815,AO
-1317679816,1317679823,GB
-1317679824,1317679831,AO
-1317679832,1317679839,GB
-1317679840,1317679847,NG
-1317679848,1317679863,GB
-1317679864,1317679871,NG
-1317679872,1317679943,GB
-1317679944,1317679951,CD
-1317679952,1317679959,GB
-1317679960,1317679967,GN
-1317679968,1317679975,CD
-1317679976,1317679991,GB
-1317679992,1317679999,CD
-1317680000,1317680063,GB
-1317680064,1317680071,AO
-1317680072,1317680175,GB
-1317680176,1317680183,GQ
-1317680184,1317680199,GB
-1317680200,1317680207,SN
-1317680208,1317680247,GB
-1317680248,1317680255,NG
-1317680256,1317680279,GB
-1317680280,1317680287,CM
-1317680288,1317680303,GB
-1317680304,1317680311,NG
-1317680312,1317680383,GB
-1317680384,1317680391,NE
-1317680392,1317680399,CI
-1317680400,1317680527,GB
-1317680528,1317680535,CD
-1317680536,1317680575,GB
-1317680576,1317680583,NG
-1317680584,1317680591,GB
-1317680592,1317680599,NG
-1317680600,1317680607,GB
-1317680608,1317680623,NG
-1317680624,1317680639,GB
-1317680640,1317680647,NG
-1317680648,1317680663,GB
-1317680664,1317680671,GA
-1317680672,1317680695,GB
-1317680696,1317680703,BJ
-1317680704,1317680727,GB
-1317680728,1317680743,NG
-1317680744,1317680751,CD
-1317680752,1317680759,CF
-1317680760,1317680767,GB
-1317680768,1317680775,NE
-1317680776,1317680799,GB
-1317680800,1317680807,NG
-1317680808,1317680815,GB
-1317680816,1317680823,NG
-1317680824,1317680831,CD
-1317680832,1317680839,ML
-1317680840,1317680847,BF
-1317680848,1317680855,GB
-1317680856,1317680863,GQ
-1317680864,1317681159,GB
-1317681160,1317681167,NG
-1317681168,1317681175,GB
-1317681176,1317681183,NG
-1317681184,1317681223,GB
-1317681224,1317681231,NG
-1317681232,1317681279,GB
-1317681280,1317681287,NG
-1317681288,1317681375,GB
-1317681376,1317681399,NG
-1317681400,1317681407,GB
-1317681408,1317681415,NG
-1317681416,1317681927,GB
-1317681928,1317681931,NG
-1317681932,1317681999,GB
-1317682000,1317682007,NE
-1317682008,1317682015,NG
-1317682016,1317683199,GB
-1317683200,1317683839,DE
-1317683840,1317683855,CH
-1317683856,1317683863,DE
-1317683864,1317683871,FR
-1317683872,1317685503,DE
-1317685504,1317685631,BE
-1317685632,1317686303,DE
-1317686304,1317686319,NL
-1317686320,1317686335,DE
-1317686336,1317686367,NL
-1317686368,1317696287,DE
-1317696288,1317696319,ES
-1317696320,1317699583,DE
+1317666816,1317679727,GB
+1317679728,1317679735,CM
+1317679736,1317683199,GB
+1317683200,1317699583,DE
1317699584,1317715967,RU
1317715968,1317732351,SA
1317732352,1317748735,HU
@@ -44417,154 +14406,23 @@
1317765120,1317781503,GE
1317781504,1317814271,RU
1317814272,1317830655,DE
-1317830656,1317831679,NL
-1317831680,1317831711,CY
-1317831712,1317831839,NL
-1317831840,1317831871,CA
-1317831872,1317832191,NL
-1317832192,1317832447,GB
-1317832448,1317832511,CY
-1317832512,1317832575,NL
-1317832576,1317832703,GI
-1317832704,1317832959,NL
-1317832960,1317833215,IT
-1317833216,1317835007,NL
-1317835008,1317835071,RU
-1317835072,1317835135,GI
-1317835136,1317835199,RU
-1317835200,1317835263,CY
-1317835264,1317835615,NL
-1317835616,1317835647,RU
-1317835648,1317835711,NL
-1317835712,1317835775,GI
-1317835776,1317836031,CY
-1317836032,1317836159,NL
-1317836160,1317836223,CY
-1317836224,1317836863,NL
-1317836864,1317836927,CY
-1317836928,1317836991,NL
-1317836992,1317837007,GB
-1317837008,1317837023,RU
-1317837024,1317837567,NL
-1317837568,1317837823,US
-1317837824,1317837951,NL
-1317837952,1317838015,CY
-1317838016,1317838943,NL
-1317838944,1317838959,GB
-1317838960,1317838975,NL
-1317838976,1317839103,GI
-1317839104,1317839359,NL
-1317839360,1317839615,RU
-1317839616,1317839679,HK
-1317839680,1317839695,CZ
-1317839696,1317840127,NL
-1317840128,1317840159,SC
-1317840160,1317840639,NL
-1317840640,1317840895,US
-1317840896,1317841407,NL
-1317841408,1317841439,SC
-1317841440,1317841471,MT
-1317841472,1317841535,CY
-1317841536,1317841567,BZ
-1317841568,1317841599,NL
-1317841600,1317841663,GI
-1317841664,1317841727,HK
-1317841728,1317841855,CY
-1317841856,1317841887,IL
-1317841888,1317842943,NL
-1317842944,1317843071,CY
-1317843072,1317843135,NL
-1317843136,1317843199,CY
-1317843200,1317843391,US
-1317843392,1317843423,NL
-1317843424,1317843455,US
-1317843456,1317843519,NL
-1317843520,1317843583,GI
-1317843584,1317843647,US
-1317843648,1317843839,NL
-1317843840,1317843967,SC
-1317843968,1317844223,MY
-1317844224,1317844607,NL
-1317844608,1317844623,SC
-1317844624,1317845375,NL
-1317845376,1317845503,US
-1317845504,1317845631,NL
-1317845632,1317845759,CY
-1317845760,1317846015,NL
-1317846016,1317846271,PL
-1317846272,1317846399,CY
-1317846400,1317846463,LU
-1317846464,1317846527,NL
-1317846528,1317846655,US
-1317846656,1317846759,NL
-1317846760,1317846763,US
-1317846764,1317846783,NL
-1317846784,1317846911,CY
-1317846912,1317847039,US
+1317830656,1317847039,NL
1317847040,1317863423,RU
1317863424,1317879807,GB
1317879808,1317896191,SK
1317896192,1317912575,LU
1317912576,1317928959,GB
1317928960,1317945343,BG
-1317945344,1317950207,AT
-1317950208,1317950463,CZ
-1317950464,1317956607,AT
-1317956608,1317956639,CZ
-1317956640,1317957631,AT
-1317957632,1317958143,DE
-1317958144,1317958655,AT
-1317958656,1317958911,DE
-1317958912,1317958975,CZ
-1317958976,1317959007,DE
-1317959008,1317965047,AT
-1317965048,1317965055,DE
-1317965056,1317977407,AT
-1317977408,1317977415,MT
-1317977416,1317978111,AT
+1317945344,1317978111,AT
1317978112,1317994495,RU
-1317994496,1317994751,NL
-1317994752,1317996095,DE
-1317996096,1317996287,NL
-1317996288,1317996799,DE
-1317996800,1317997055,NL
-1317997056,1317998207,DE
-1317998208,1317998335,NL
-1317998336,1318000383,DE
-1318000384,1318000447,NL
-1318000448,1318000511,DE
-1318000512,1318000639,NL
-1318000640,1318001791,DE
-1318001792,1318001919,NL
-1318001920,1318003455,DE
-1318003456,1318004223,NL
-1318004224,1318004735,DE
-1318004736,1318004991,NL
-1318004992,1318005503,DE
-1318005504,1318005759,NL
-1318005760,1318006271,DE
-1318006272,1318006783,NL
-1318006784,1318007999,DE
-1318008000,1318008031,NL
-1318008032,1318009423,DE
-1318009424,1318009471,NL
-1318009472,1318010511,DE
-1318010512,1318010879,NL
+1317994496,1318010879,NL
1318010880,1318027263,DK
1318027264,1318043647,IE
1318043648,1318584319,GB
1318584320,1318592511,PL
-1318592512,1318592623,NL
-1318592624,1318592639,DE
-1318592640,1318592655,NL
-1318592656,1318592671,US
-1318592672,1318597247,NL
-1318597248,1318597375,US
-1318597376,1318599807,NL
-1318599808,1318599823,US
-1318599824,1318599919,NL
-1318599920,1318599935,GB
-1318599936,1318600703,NL
+1318592512,1318597343,NL
+1318597344,1318597359,US
+1318597360,1318600703,NL
1318600704,1318608895,AT
1318608896,1318617087,IT
1318617088,1318625279,FR
@@ -44577,23 +14435,17 @@
1318682624,1318690815,RU
1318690816,1318699007,DK
1318699008,1318707199,IE
-1318707200,1318707775,FR
-1318707776,1318707783,GB
-1318707784,1318711360,FR
-1318711361,1318711391,GB
-1318711392,1318711647,FR
-1318711648,1318711663,IT
-1318711664,1318713855,FR
-1318713856,1318714111,GB
-1318714112,1318715390,FR
+1318707200,1318707455,FR
+1318707456,1318713023,GB
+1318713024,1318713087,FR
+1318713088,1318714367,GB
+1318714368,1318715390,FR
1318715391,1318715391,GB
1318715392,1318723583,BG
1318723584,1318731775,IR
1318731776,1318739967,PL
1318739968,1318748159,GB
-1318748160,1318753023,LV
-1318753024,1318753279,BE
-1318753280,1318756351,LV
+1318748160,1318756351,LV
1318756352,1318764543,UA
1318764544,1318780927,KW
1318780928,1318789119,CH
@@ -44602,46 +14454,31 @@
1318805504,1318813695,PL
1318813696,1318821887,FR
1318821888,1318838271,RU
-1318838272,1318839039,GB
-1318839040,1318840319,IE
-1318840320,1318840959,GB
-1318840960,1318841078,IE
+1318838272,1318841078,IE
1318841079,1318841079,GB
-1318841080,1318841087,IE
-1318841088,1318841471,GB
-1318841472,1318841855,IE
-1318841856,1318842111,GB
-1318842112,1318842367,IE
-1318842368,1318842623,GB
-1318842624,1318842879,IE
-1318842880,1318846463,GB
+1318841080,1318846463,IE
1318846464,1318854655,NO
1318854656,1318862847,CZ
1318862848,1318871039,GB
1318871040,1318879231,DK
1318879232,1318887423,CZ
1318887424,1318895615,PL
-1318895616,1318897663,SE
-1318897664,1318903807,DK
+1318895616,1318903807,DK
1318903808,1318911999,RU
1318912000,1318920191,MK
1318920192,1318928383,IR
1318928384,1318936575,LT
1318936576,1318944767,DK
1318944768,1318958079,CZ
-1318958080,1318960895,PL
-1318960896,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,1319017215,CY
-1319017216,1319017279,DE
-1319017280,1319017295,CY
-1319017296,1319017303,DE
-1319017304,1319018495,CY
+1319010304,1319018495,CY
1319018496,1319026687,IR
1319026688,1319034879,RU
1319034880,1319035903,NO
@@ -44651,26 +14488,15 @@
1319043072,1319051263,FR
1319051264,1319059455,UA
1319059456,1319067647,PL
-1319067648,1319070271,DE
-1319070272,1319070335,PT
-1319070336,1319070463,RU
-1319070464,1319070975,DE
+1319067648,1319070975,DE
1319070976,1319071103,PL
-1319071104,1319071231,RU
+1319071104,1319071231,DE
1319071232,1319071487,PL
-1319071488,1319073023,DE
-1319073024,1319073279,TR
-1319073280,1319074303,DE
-1319074304,1319074559,HK
-1319074560,1319074815,DE
+1319071488,1319074815,DE
1319074816,1319074943,PL
-1319074944,1319075071,RU
+1319074944,1319075071,DE
1319075072,1319075199,PL
-1319075200,1319075327,RU
-1319075328,1319075455,DE
-1319075456,1319075583,RU
-1319075584,1319075711,DE
-1319075712,1319075839,RU
+1319075200,1319075839,DE
1319075840,1319084031,BG
1319084032,1319092223,KW
1319092224,1319100415,IT
@@ -44684,9 +14510,7 @@
1331757056,1331822591,IE
1331822592,1331824639,IT
1331824640,1331826687,RU
-1331826688,1331828607,FR
-1331828608,1331828615,BE
-1331828616,1331828735,FR
+1331826688,1331828735,FR
1331828736,1331830783,LT
1331830784,1331832831,GB
1331832832,1331834879,IT
@@ -44694,7 +14518,8 @@
1331836928,1331838975,FR
1331838976,1331841023,ES
1331841024,1331843071,CZ
-1331843072,1331845119,GB
+1331843072,1331844863,GB
+1331844864,1331845119,FR
1331845120,1331847167,RU
1331847168,1331849215,FR
1331849216,1331851263,BG
@@ -44711,9 +14536,7 @@
1331873792,1331877887,RU
1331877888,1331879935,ES
1331879936,1331881983,DE
-1331881984,1331883007,GB
-1331883008,1331883263,SL
-1331883264,1331886079,GB
+1331881984,1331886079,GB
1331886080,1331888127,RU
1331888128,1331890175,SE
1331890176,1331892223,IT
@@ -44730,11 +14553,7 @@
1331914752,1331916799,RU
1331916800,1331918847,IT
1331918848,1331920895,BE
-1331920896,1331921087,NL
-1331921088,1331921119,BE
-1331921120,1331922751,NL
-1331922752,1331922815,BE
-1331922816,1331922943,NL
+1331920896,1331922943,NL
1331922944,1331924991,DE
1331924992,1331927039,GB
1331927040,1331929087,FI
@@ -44742,59 +14561,12 @@
1331931136,1331933183,SE
1331933184,1331935231,TR
1331935232,1331937279,NL
-1331937280,1331937311,GB
-1331937312,1331937319,IQ
-1331937320,1331937471,GB
-1331937472,1331937519,NG
-1331937520,1331937535,LB
-1331937536,1331937567,SM
-1331937568,1331937575,NG
-1331937576,1331937583,GB
-1331937584,1331937599,ZA
-1331937600,1331937663,GB
-1331937664,1331937727,DE
-1331937728,1331938111,GB
-1331938112,1331938127,AE
-1331938128,1331938135,SA
-1331938136,1331938143,AE
-1331938144,1331938151,GB
-1331938152,1331938159,PL
-1331938160,1331938167,GB
-1331938168,1331938175,KW
-1331938176,1331938191,GB
-1331938192,1331938207,AE
-1331938208,1331938271,GB
-1331938272,1331938303,QA
-1331938304,1331938319,GB
-1331938320,1331938335,AE
-1331938336,1331938375,GB
-1331938376,1331938383,AE
-1331938384,1331938399,IE
-1331938400,1331938431,AE
-1331938432,1331938815,GB
-1331938816,1331939071,NG
-1331939072,1331939327,GB
-1331939328,1331939871,BE
-1331939872,1331939879,LU
-1331939880,1331939991,BE
-1331939992,1331939999,IT
-1331940000,1331940151,BE
-1331940152,1331940159,FR
-1331940160,1331941375,BE
+1331937280,1331939327,GB
+1331939328,1331941375,BE
1331941376,1331943423,ES
1331943424,1331945471,RU
1331945472,1331947519,SE
-1331947520,1331948543,CH
-1331948544,1331948547,NL
-1331948548,1331948551,CH
-1331948552,1331948559,FR
-1331948560,1331948567,GB
-1331948568,1331948575,DE
-1331948576,1331948583,CZ
-1331948584,1331948591,CY
-1331948592,1331948607,BG
-1331948608,1331948615,US
-1331948616,1331949567,CH
+1331947520,1331949567,CH
1331949568,1331951615,RU
1331951616,1331953663,GE
1331953664,1332019199,BG
@@ -44804,9 +14576,7 @@
1332215808,1332346879,RU
1332346880,1332412415,AL
1332412416,1332477951,GR
-1332477952,1332489215,ES
-1332489216,1332489727,US
-1332489728,1332609023,ES
+1332477952,1332609023,ES
1332609024,1332613119,PL
1332613120,1332617215,UA
1332617216,1332621311,CZ
@@ -44817,7 +14587,7 @@
1332637696,1332641791,BG
1332641792,1332645887,UA
1332645888,1332649983,RS
-1332649984,1332658175,UA
+1332654080,1332658175,RU
1332658176,1332662271,PL
1332662272,1332670463,UA
1332670464,1332740095,RU
@@ -44848,17 +14618,13 @@
1334084632,1334091775,DE
1334091776,1334099967,LT
1334099968,1334108159,IR
-1334108160,1334113527,BE
-1334113528,1334113535,NL
-1334113536,1334115583,BE
-1334115584,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,1334132223,DE
-1334132224,1334132479,NL
-1334132480,1334132735,DE
+1334131712,1334132735,DE
1334132736,1334165503,RU
1334165504,1334173695,PL
1334173696,1334181887,LT
@@ -44868,7 +14634,7 @@
1334206464,1334214655,FI
1334214656,1334222847,JO
1334222848,1334231039,BG
-1334231040,1334239231,EE
+1334231040,1334239231,RU
1334239232,1334247423,IS
1334247424,1334255615,NO
1334255616,1334263807,IT
@@ -44880,83 +14646,50 @@
1334304768,1334312959,RU
1334312960,1334316031,SE
1334316032,1334316287,NO
-1334316288,1334343047,SE
-1334343048,1334343055,NO
-1334343056,1334345727,SE
+1334316288,1334345727,SE
1334345728,1334378495,RU
1334378496,1334411263,IT
1334411264,1334444031,RU
-1334444032,1334478847,SE
-1334478848,1334480895,DK
-1334480896,1334484991,SE
-1334484992,1334489087,DK
-1334489088,1334501375,SE
-1334501376,1334509567,DK
+1334444032,1334476799,SE
+1334476800,1334484223,DK
+1334484224,1334484479,SE
+1334484480,1334484735,DK
+1334484736,1334484991,SE
+1334484992,1334495231,DK
+1334495232,1334495743,SE
+1334495744,1334495999,DK
+1334496000,1334496255,SE
+1334496256,1334497023,DK
+1334497024,1334497279,SE
+1334497280,1334497535,DK
+1334497536,1334498047,SE
+1334498048,1334498559,DK
+1334498560,1334499071,SE
+1334499072,1334500351,DK
+1334500352,1334500607,SE
+1334500608,1334509567,DK
1334509568,1334542335,PL
1334542336,1334575103,RU
1334575104,1334579199,UA
1334579200,1334583295,RU
-1334583296,1334584375,DE
-1334584376,1334584383,DK
-1334584384,1334584703,DE
-1334584704,1334584711,AT
-1334584712,1334584759,DE
-1334584760,1334584767,PL
-1334584768,1334585471,DE
-1334585472,1334585503,AT
-1334585504,1334591487,DE
+1334583296,1334591487,DE
1334591488,1334595583,RU
-1334595584,1334596351,IT
-1334596352,1334596607,GR
-1334596608,1334597887,IT
-1334597888,1334598143,GR
-1334598144,1334598271,SK
-1334598272,1334598399,CZ
-1334598400,1334598463,GR
-1334598464,1334598527,IT
-1334598528,1334598655,GR
-1334598656,1334599039,IT
-1334599040,1334599167,FR
-1334599168,1334599679,IT
+1334595584,1334599679,IT
1334599680,1334603775,RU
1334603776,1334607871,DE
-1334607872,1334609994,IE
-1334609995,1334609995,GB
-1334609996,1334610020,IE
-1334610021,1334610021,GB
-1334610022,1334611967,IE
+1334607872,1334611967,IE
1334611968,1334616063,ME
1334616064,1334620159,MD
1334620160,1334624255,DE
-1334624256,1334625535,GB
-1334625536,1334625791,AP
-1334625792,1334626303,AU
-1334626304,1334627839,GB
-1334627840,1334628095,NO
-1334628096,1334628351,GB
+1334624256,1334628351,GB
1334628352,1334632447,IE
1334632448,1334636543,KZ
1334636544,1334640639,RU
1334640640,1334644735,FR
-1334644736,1334644991,LU
-1334644992,1334645222,A2
-1334645223,1334645223,US
-1334645224,1334645226,A2
-1334645227,1334645227,US
-1334645228,1334645247,A2
-1334645248,1334647936,IQ
-1334647937,1334648063,DE
-1334648064,1334648319,IQ
-1334648320,1334648575,DE
-1334648576,1334648831,A2
-1334648832,1334649343,GB
-1334649344,1334649375,DK
-1334649376,1334651647,GB
-1334651648,1334651903,FR
-1334651904,1334652159,DE
-1334652160,1334652863,GB
-1334652864,1334652895,FR
-1334652896,1334652927,GB
+1334644736,1334647039,DE
+1334647040,1334647807,IQ
+1334647808,1334648831,DE
+1334648832,1334652927,GB
1334652928,1334661119,RU
1334661120,1334665215,CH
1334665216,1334669311,NO
@@ -44967,16 +14700,15 @@
1334681856,1334682111,GB
1334682112,1334682367,IE
1334682368,1334682623,FR
-1334682624,1334682879,NO
-1334682880,1334683135,DK
-1334683136,1334683391,CZ
+1334682624,1334683135,DE
+1334683136,1334683391,GB
1334683392,1334683647,CH
1334683648,1334683903,GB
1334683904,1334684031,DE
1334684032,1334684159,NL
1334684160,1334684415,SE
1334684416,1334684479,GB
-1334684480,1334684511,CH
+1334684480,1334684511,DE
1334684512,1334684671,GB
1334684672,1334684927,FI
1334684928,1334685183,NL
@@ -44991,25 +14723,21 @@
1334710272,1334714367,RU
1334714368,1334718463,DE
1334718464,1334722559,KZ
-1334722560,1334725631,NL
-1334725632,1334726143,SE
-1334726144,1334726655,LU
-1334726656,1334729983,RU
-1334729984,1334730431,KZ
-1334730432,1334730439,RU
-1334730440,1334730443,KZ
-1334730444,1334730447,RU
-1334730448,1334730463,KZ
-1334730464,1334730479,RU
-1334730480,1334730487,KZ
-1334730488,1334730495,RU
-1334730496,1334730751,KZ
-1334730752,1334734847,RU
+1334722560,1334723583,NL
+1334723584,1334723839,BE
+1334723840,1334724095,PT
+1334724096,1334724351,NO
+1334724352,1334724863,US
+1334724864,1334725631,NL
+1334725632,1334725887,SE
+1334725888,1334726143,NL
+1334726144,1334726399,LU
+1334726400,1334726655,SE
+1334726656,1334734847,RU
1334734848,1334738943,LT
1334738944,1334743039,CH
1334743040,1334747135,CZ
1334747136,1334751231,RU
-1334751232,1334755327,BH
1334755328,1334759423,UA
1334759424,1334763519,SE
1334763520,1334767615,DK
@@ -45018,11 +14746,7 @@
1334779904,1334783999,UA
1334784000,1334788095,AT
1334788096,1334792191,RU
-1334792192,1334793215,GB
-1334793216,1334793727,IR
-1334793728,1334793919,GB
-1334793920,1334793928,AE
-1334793929,1334794239,GB
+1334792192,1334794239,GB
1334794240,1334796287,ES
1334796288,1334800383,ME
1334800384,1334804479,IT
@@ -45040,9 +14764,7 @@
1336147968,1336279039,RU
1336279040,1336410111,GR
1336410112,1336541183,PT
-1336541184,1336542207,SA
-1336542208,1336542463,US
-1336542464,1336543231,SA
+1336541184,1336543231,SA
1336543232,1336545279,ES
1336545280,1336547327,SE
1336547328,1336549375,RU
@@ -45050,14 +14772,11 @@
1336551424,1336553471,GB
1336553472,1336555519,SA
1336555520,1336557567,BE
-1336557568,1336558591,ES
-1336558592,1336559328,US
-1336559329,1336559615,ES
+1336557568,1336559615,ES
1336559616,1336561663,GB
1336561664,1336563711,NO
1336563712,1336567807,NL
1336567808,1336569855,BY
-1336569856,1336571903,EU
1336571904,1336573951,PL
1336573952,1336575999,DK
1336576000,1336578047,RU
@@ -45076,31 +14795,20 @@
1336606720,1336608767,PL
1336608768,1336610815,RU
1336610816,1336612863,TR
-1336612864,1336613375,ES
-1336613376,1336613630,IT
-1336613631,1336613631,ES
-1336613632,1336613887,IT
-1336613888,1336614655,ES
-1336614656,1336614910,IT
-1336614911,1336614911,ES
+1336612864,1336614911,ES
1336614912,1336616959,GB
1336616960,1336619007,ES
1336619008,1336621055,AL
1336621056,1336623103,DE
1336623104,1336625151,BE
-1336625152,1336625303,IE
-1336625304,1336625311,GB
-1336625312,1336626259,IE
-1336626260,1336626263,GB
-1336626264,1336626767,IE
-1336626768,1336626783,GB
-1336626784,1336626927,IE
-1336626928,1336626943,GB
-1336626944,1336627199,IE
+1336625152,1336626286,GB
+1336626287,1336626287,IE
+1336626288,1336627199,GB
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
@@ -45113,9 +14821,7 @@
1336655872,1336657919,NL
1336657920,1336659967,DE
1336659968,1336662015,RU
-1336662016,1336663039,ES
-1336663040,1336663071,FR
-1336663072,1336664063,ES
+1336662016,1336664063,ES
1336664064,1336668159,FI
1336668160,1336670207,BH
1336670208,1336672255,SE
@@ -45128,9 +14834,7 @@
1336786944,1336803327,JO
1336811520,1336827903,RU
1336827904,1336836095,AT
-1336836096,1336837119,BE
-1336837120,1336837375,NL
-1336837376,1336838143,BE
+1336836096,1336838143,NL
1336838144,1336842239,DE
1336842240,1336844287,DK
1336844288,1336846335,IR
@@ -45140,167 +14844,121 @@
1336852480,1336868863,FR
1336868864,1336885247,RU
1336885248,1336901631,RS
-1336901632,1336910352,IR
-1336910353,1336910353,CA
-1336910354,1336910408,IR
-1336910409,1336910411,CA
-1336910412,1336910448,IR
-1336910449,1336910449,CA
-1336910450,1336910476,IR
-1336910477,1336910478,CA
-1336910479,1336910484,IR
-1336910485,1336910485,CA
-1336910486,1336910486,IR
-1336910487,1336910488,CA
-1336910489,1336910529,IR
-1336910530,1336910545,CA
-1336910546,1336911749,IR
-1336911750,1336911759,AE
-1336911760,1336911853,IR
-1336911854,1336911869,CA
-1336911870,1336918015,IR
+1336901632,1336918015,IR
1336918016,1336934399,PL
-1336934400,1337458687,IL
+1336934400,1337241562,IL
+1337241563,1337241563,RO
+1337241564,1337458687,IL
1337458688,1337982975,PL
1337982976,1342177279,DE
-1342177280,1342628159,GB
-1342628160,1342628175,IE
-1342628176,1342628207,GB
+1342177280,1342628207,GB
1342628208,1342628223,IE
-1342628224,1342628319,GB
-1342628320,1342628335,IE
-1342628336,1342628351,GB
-1342628352,1342628367,IE
-1342628368,1342628431,GB
-1342628432,1342628463,IE
-1342628464,1342628663,GB
-1342628664,1342628671,IE
-1342628672,1342701567,GB
-1342701568,1342701823,FR
-1342701824,1342703103,MQ
-1342703104,1342703359,FR
-1342703360,1342705663,MQ
-1342705664,1342705919,FR
-1342705920,1342712319,MQ
-1342712320,1342712575,FR
-1342712576,1342714879,MQ
-1342714880,1342715135,FR
-1342715136,1342715647,MQ
-1342715648,1342715903,FR
-1342715904,1342716671,MQ
-1342716672,1342717183,FR
+1342628224,1342701567,GB
+1342701568,1342704127,MQ
+1342704128,1342704383,FR
+1342704384,1342704895,MQ
+1342704896,1342705151,FR
+1342705152,1342705919,MQ
+1342705920,1342706175,FR
+1342706176,1342707711,MQ
+1342707712,1342707967,FR
+1342707968,1342708223,MQ
+1342708224,1342708479,FR
+1342708480,1342708735,MQ
+1342708736,1342708991,FR
+1342708992,1342711807,MQ
+1342711808,1342712063,FR
+1342712064,1342716159,MQ
+1342716160,1342716415,FR
+1342716416,1342716927,MQ
+1342716928,1342717183,FR
1342717184,1342717951,MQ
-1342717952,1342722559,GP
-1342722560,1342722815,FR
-1342722816,1342727679,GP
-1342727680,1342727935,FR
-1342727936,1342733311,GP
-1342733312,1342733567,FR
-1342733568,1342734335,GP
-1342734336,1342735615,RE
-1342735616,1342735871,FR
-1342735872,1342736639,RE
+1342717952,1342718207,GP
+1342718208,1342718463,FR
+1342718464,1342719231,GP
+1342719232,1342719487,FR
+1342719488,1342720255,GP
+1342720256,1342720511,FR
+1342720512,1342720767,GP
+1342720768,1342721023,FR
+1342721024,1342722303,GP
+1342722304,1342722559,FR
+1342722560,1342723071,GP
+1342723072,1342723327,FR
+1342723328,1342724095,GP
+1342724096,1342724351,FR
+1342724352,1342725375,GP
+1342725376,1342725631,FR
+1342725632,1342727423,GP
+1342727424,1342727679,FR
+1342727680,1342729215,GP
+1342729216,1342729471,FR
+1342729472,1342729727,GP
+1342729728,1342729983,FR
+1342729984,1342733823,GP
+1342733824,1342734079,FR
+1342734080,1342734335,GP
+1342734336,1342734847,RE
+1342734848,1342735103,FR
+1342735104,1342736639,RE
1342736640,1342736895,FR
-1342736896,1342737407,RE
-1342737408,1342737663,FR
-1342737664,1342741247,RE
-1342741248,1342741503,FR
-1342741504,1342743551,RE
-1342743552,1342743807,FR
-1342743808,1342746111,RE
-1342746112,1342746367,FR
-1342746368,1342747135,RE
-1342747136,1342747391,FR
-1342747392,1342747647,RE
-1342747648,1342748159,FR
-1342748160,1342748671,RE
-1342748672,1342748927,FR
-1342748928,1342750463,RE
-1342750464,1342750719,FR
-1342750720,1342753535,RE
-1342753536,1342753791,FR
-1342753792,1342758911,RE
-1342758912,1342759423,GF
-1342759424,1342761727,FR
-1342761728,1342762239,GF
-1342762240,1342763007,FR
-1342763008,1342765055,GF
-1342765056,1342765823,FR
-1342765824,1342767103,GF
-1342767104,1342981887,FR
-1342981888,1342981935,GB
-1342981936,1342982143,FR
-1342982144,1342982399,MG
-1342982400,1342988287,FR
+1342736896,1342738175,RE
+1342738176,1342738687,FR
+1342738688,1342739199,RE
+1342739200,1342739455,FR
+1342739456,1342741503,RE
+1342741504,1342742015,FR
+1342742016,1342742271,RE
+1342742272,1342742783,FR
+1342742784,1342743039,RE
+1342743040,1342743295,FR
+1342743296,1342743807,RE
+1342743808,1342744063,FR
+1342744064,1342749695,RE
+1342749696,1342750207,FR
+1342750208,1342753023,RE
+1342753024,1342753279,FR
+1342753280,1342756351,RE
+1342756352,1342757119,FR
+1342757120,1342757887,RE
+1342757888,1342758399,FR
+1342758400,1342759167,RE
+1342759168,1342759423,FR
+1342759424,1342760447,RE
+1342760448,1342760703,FR
+1342760704,1342763519,RE
+1342763520,1342763775,FR
+1342763776,1342764031,RE
+1342764032,1342764287,FR
+1342764288,1342766079,RE
+1342766080,1342766847,FR
+1342766848,1342767103,RE
+1342767104,1342988287,FR
1342988288,1342989055,US
1342989056,1342996479,FR
-1342996480,1342996991,GF
-1342996992,1342997247,FR
-1342997248,1342998015,GF
-1342998016,1342998271,FR
-1342998272,1342998527,GF
-1342998528,1342998783,FR
-1342998784,1343003391,GF
-1343003392,1343003647,FR
-1343003648,1343005695,GF
+1342996480,1343000575,GF
+1343000576,1343001087,FR
+1343001088,1343001855,GF
+1343001856,1343002111,FR
+1343002112,1343005695,GF
1343005696,1343005951,FR
-1343005952,1343006719,GF
-1343006720,1343006975,FR
-1343006976,1343008511,GF
-1343008512,1343008767,FR
-1343008768,1343011327,GF
-1343011328,1343011583,FR
-1343011584,1343012351,GF
-1343012352,1343012607,FR
-1343012608,1343012863,GF
-1343012864,1343013119,FR
-1343013120,1343013375,US
-1343013376,1343017983,FR
+1343005952,1343012863,GF
+1343012864,1343017983,FR
1343017984,1343018495,RE
1343018496,1343025151,FR
1343025152,1343025663,RE
-1343025664,1343025819,FR
-1343025820,1343025820,LU
-1343025821,1343217663,FR
-1343217664,1343218687,MU
-1343218688,1343219711,FR
-1343219712,1343219967,KR
-1343219968,1343220479,FR
+1343025664,1343220479,FR
1343220480,1343220671,DE
1343220672,1343220735,FR
1343220736,1343220863,GB
-1343220864,1343221023,FR
-1343221024,1343221027,DE
-1343221028,1343221031,FR
-1343221032,1343221039,GB
-1343221040,1343221439,FR
-1343221440,1343221447,GB
-1343221448,1343221503,FR
-1343221504,1343221759,GB
-1343221760,1343221823,LB
-1343221824,1343221855,FR
-1343221856,1343222271,LB
-1343222272,1343222287,CI
-1343222288,1343222527,FR
-1343222528,1343222575,TD
-1343222576,1343222783,FR
-1343222784,1343222911,TD
-1343222912,1343223551,FR
-1343223552,1343223807,LB
-1343223808,1343224063,FR
+1343220864,1343221055,FR
+1343221056,1343221119,GB
+1343221120,1343223679,FR
+1343223680,1343223687,LB
+1343223688,1343224063,FR
1343224064,1343224303,US
-1343224304,1343224319,FR
-1343224320,1343224535,LB
-1343224536,1343224543,FR
-1343224544,1343224575,LB
-1343224576,1343224831,FR
-1343224832,1343225087,A2
-1343225088,1343225855,FR
-1343225856,1343475711,IT
-1343475712,1343475967,US
-1343475968,1343605503,IT
-1343605504,1343605759,US
-1343605760,1343750143,IT
+1343224304,1343225855,FR
+1343225856,1343750143,IT
1343750144,1344798719,ES
1344798720,1345323007,GB
1345323008,1345847295,PL
@@ -45312,21 +14970,18 @@
1346375680,1346379775,RU
1346379776,1346383871,ES
1346383872,1346387967,GB
-1346387968,1346391807,HU
-1346391808,1346392063,AT
+1346387968,1346392063,HU
1346392064,1346396159,UA
1346396160,1346400255,RU
1346400256,1346404351,IT
-1346404352,1346408447,AT
+1346404352,1346407423,AT
+1346407424,1346408447,DE
1346408448,1346412543,LU
1346412544,1346416639,RU
1346416640,1346420735,DE
1346420736,1346424831,NO
1346424832,1346428927,JO
-1346428928,1346429183,EU
-1346429184,1346431743,FR
-1346431744,1346431999,KZ
-1346432000,1346433023,FR
+1346428928,1346433023,FR
1346433024,1346439167,NL
1346439168,1346441215,ES
1346441216,1346445311,RU
@@ -45335,98 +14990,39 @@
1346453504,1346461695,BA
1346461696,1346469887,NL
1346469888,1346473983,BE
-1346473984,1346477823,IT
-1346477824,1346477855,HU
-1346477856,1346478079,IT
+1346473984,1346478079,IT
1346478080,1346482175,BA
1346482176,1346486271,CZ
1346486272,1346490367,SE
1346490368,1346494463,GB
1346494464,1346498559,FR
-1346498560,1346500607,IM
-1346500608,1346500671,GB
-1346500672,1346500735,IM
-1346500736,1346500783,GB
-1346500784,1346500799,IM
-1346500800,1346500847,GB
-1346500848,1346500863,IM
-1346500864,1346501343,GB
-1346501344,1346501375,IM
-1346501376,1346501631,GB
-1346501632,1346501759,IM
-1346501760,1346501807,GB
-1346501808,1346501839,IM
-1346501840,1346501847,GB
-1346501848,1346501855,IM
-1346501856,1346501871,GB
-1346501872,1346501887,IM
-1346501888,1346501891,GB
-1346501892,1346501895,IM
-1346501896,1346502175,GB
-1346502176,1346502207,IM
-1346502208,1346502231,GB
-1346502232,1346502263,IM
-1346502264,1346502319,GB
-1346502320,1346502323,IM
-1346502324,1346502335,GB
-1346502336,1346502351,IM
-1346502352,1346502367,GB
-1346502368,1346502375,IM
-1346502376,1346502655,GB
+1346498560,1346502655,IM
1346502656,1346510847,DE
1346510848,1346519039,AT
1346519040,1346527231,RU
-1346527232,1346528607,DE
-1346528608,1346528623,CH
-1346528624,1346531327,DE
+1346527232,1346531327,DE
1346531328,1346535423,ES
-1346535424,1346537335,BE
-1346537336,1346537343,GB
-1346537344,1346537983,BE
-1346537984,1346537988,AT
-1346537989,1346537991,BE
-1346537992,1346537999,AT
-1346538000,1346538007,CZ
-1346538008,1346538015,BE
-1346538016,1346538031,CH
-1346538032,1346538143,BE
-1346538144,1346538175,HR
-1346538176,1346538239,BE
-1346538240,1346538303,AT
-1346538304,1346539519,BE
+1346535424,1346539519,BE
1346539520,1346543615,RU
1346543616,1346547711,FI
1346547712,1346551807,IR
1346555904,1346559999,IT
-1346560000,1346560447,LI
-1346560448,1346560479,CH
-1346560480,1346561535,LI
-1346561536,1346561599,CH
-1346561600,1346562783,LI
-1346562784,1346562879,CH
-1346562880,1346563071,LI
-1346563072,1346563327,CH
-1346563328,1346564095,LI
+1346560000,1346564095,LI
1346564096,1346568191,EE
-1346568192,1346571199,SE
-1346571200,1346571207,SK
-1346571208,1346571775,SE
-1346571776,1346572287,SE
+1346568192,1346569815,SE
+1346569816,1346569819,ES
+1346569820,1346572287,SE
1346572288,1346576383,DE
-1346576384,1346580479,DK
1346580480,1346584575,RU
1346584576,1346588159,US
-1346588160,1346588671,KR
-1346588672,1346589439,US
+1346588928,1346589439,US
1346589440,1346589695,DE
1346589696,1346592767,US
1346592768,1346596863,ES
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
@@ -45441,40 +15037,7 @@
1346686976,1346691071,GB
1346691072,1346695167,PL
1346695168,1346699263,RU
-1346699264,1346699839,GB
-1346699840,1346699871,HK
-1346699872,1346699875,GB
-1346699876,1346699879,IL
-1346699880,1346699887,US
-1346699888,1346700575,GB
-1346700576,1346700591,VG
-1346700592,1346700607,GB
-1346700608,1346700639,US
-1346700640,1346700847,GB
-1346700848,1346700855,US
-1346700856,1346701183,GB
-1346701184,1346701215,GR
-1346701216,1346703431,GB
-1346703432,1346703435,US
-1346703436,1346703483,GB
-1346703484,1346703487,US
-1346703488,1346703567,GB
-1346703568,1346703571,US
-1346703572,1346703603,GB
-1346703604,1346703607,US
-1346703608,1346703871,GB
-1346703872,1346704127,LI
-1346704128,1346704383,GB
-1346704384,1346704447,US
-1346704448,1346704479,GB
-1346704480,1346704511,US
-1346704512,1346704575,GB
-1346704576,1346704639,US
-1346704640,1346704767,LI
-1346704768,1346704895,US
-1346704896,1346705407,GB
-1346705408,1346705535,US
-1346705536,1346707455,GB
+1346699264,1346707455,GB
1346707456,1346711551,DE
1346711552,1346715647,AZ
1346715648,1346723839,NL
@@ -45484,13 +15047,14 @@
1346740224,1346744319,FI
1346744320,1346748415,RU
1346748416,1346752511,DE
-1346752512,1346753535,FR
-1346753536,1346754047,RE
-1346754048,1346754559,FR
-1346754560,1346754815,RE
-1346754816,1346755071,FR
-1346755072,1346755583,RE
-1346755584,1346756607,FR
+1346752512,1346753023,RE
+1346753024,1346753791,FR
+1346753792,1346754303,RE
+1346754304,1346754559,FR
+1346754560,1346755071,RE
+1346755072,1346755583,FR
+1346755584,1346756095,RE
+1346756096,1346756607,FR
1346756608,1346760703,SE
1346760704,1346764799,IR
1346764800,1346768895,DK
@@ -45502,9 +15066,7 @@
1346793472,1346797567,IT
1346797568,1346801663,IL
1346801664,1346805759,SE
-1346805760,1346806031,DE
-1346806032,1346806047,CH
-1346806048,1346818047,DE
+1346805760,1346818047,DE
1346818048,1346822143,FR
1346822144,1346826239,RU
1346826240,1346830335,RS
@@ -45526,7 +15088,7 @@
1346904064,1346908159,PL
1346908160,1346912255,LI
1346912256,1346920447,BG
-1346920448,1346924543,A2
+1346920448,1346924543,KE
1346924544,1346928639,RU
1346928640,1346932735,DE
1346932736,1346936831,DK
@@ -45540,11 +15102,7 @@
1346969600,1346973695,DE
1346973696,1346977791,SE
1346977792,1346985983,RU
-1346985984,1346986975,DE
-1346986976,1346987007,ES
-1346987008,1346991231,DE
-1346991232,1346991247,CH
-1346991248,1346994175,DE
+1346985984,1346994175,DE
1346994176,1346998271,NL
1346998272,1347002367,ES
1347002368,1347006463,RU
@@ -45567,9 +15125,7 @@
1347092480,1347096575,IR
1347096576,1347100671,SE
1347100672,1347108863,AT
-1347108864,1347111423,GB
-1347111424,1347111455,US
-1347111456,1347112959,GB
+1347108864,1347112959,GB
1347112960,1347117055,RU
1347117056,1347121151,FI
1347121152,1347125247,CH
@@ -45577,23 +15133,11 @@
1347129344,1347133439,FR
1347133440,1347141631,EG
1347141632,1347145727,CH
-1347145728,1347146239,IN
-1347146240,1347146495,CA
-1347146496,1347146751,FR
-1347146752,1347147007,CA
-1347147008,1347147263,DE
+1347145728,1347147263,CA
1347147264,1347147775,GB
-1347147776,1347148287,DE
-1347148288,1347148543,GB
-1347148544,1347148799,CA
-1347148800,1347149055,NO
-1347149056,1347149311,GB
-1347149312,1347149567,DE
-1347149568,1347149823,CA
+1347147776,1347149823,CA
1347149824,1347151423,HU
-1347151424,1347151615,AT
-1347151616,1347153407,HU
-1347153408,1347158015,AT
+1347151424,1347158015,AT
1347158016,1347162111,CH
1347162112,1347166207,IT
1347166208,1347174399,GR
@@ -45604,87 +15148,30 @@
1347194880,1347198975,SE
1347198976,1347203071,QA
1347203072,1347207167,RU
-1347207168,1347210911,GB
-1347210912,1347210919,IE
-1347210920,1347210927,GB
-1347210928,1347210935,IE
-1347210936,1347211111,GB
-1347211112,1347211119,IE
-1347211120,1347215359,GB
+1347207168,1347215359,GB
1347215360,1347223551,RU
-1347223552,1347223807,EG
-1347223808,1347224063,HK
-1347224064,1347224183,US
-1347224184,1347224575,EG
-1347224576,1347224831,US
-1347224832,1347225599,EG
+1347223552,1347225599,GB
1347225600,1347226623,PK
-1347226624,1347227135,EG
-1347227136,1347227391,HK
-1347227392,1347227647,EG
-1347227648,1347228055,DE
-1347228056,1347228063,GR
-1347228064,1347229311,DE
-1347229312,1347229343,AT
-1347229344,1347229895,DE
+1347226624,1347227647,GB
+1347227648,1347229895,DE
1347229896,1347229903,GR
-1347229904,1347230975,DE
-1347230976,1347230983,ES
-1347230984,1347231071,DE
-1347231072,1347231087,AT
-1347231088,1347231095,GR
-1347231096,1347231743,DE
+1347229904,1347231743,DE
1347231744,1347235839,UA
1347235840,1347239935,GE
-1347239936,1347240943,DK
-1347240944,1347240959,GB
-1347240960,1347244031,DK
-1347244032,1347245311,GB
-1347245312,1347245567,US
-1347245568,1347245823,GB
-1347245824,1347246079,US
-1347246080,1347247359,GB
-1347247360,1347247839,RU
-1347247840,1347248127,US
-1347248128,1347248863,SE
-1347248864,1347248864,FI
-1347248865,1347249343,SE
-1347249344,1347249375,FI
-1347249376,1347249631,SE
-1347249632,1347249639,RU
-1347249640,1347250687,SE
-1347250688,1347250691,NO
-1347250692,1347250695,SE
-1347250696,1347250735,NO
-1347250736,1347250767,SE
-1347250768,1347250783,FI
-1347250784,1347252223,SE
-1347252224,1347254559,HU
-1347254560,1347254591,PT
-1347254592,1347254655,LU
-1347254656,1347255903,HU
-1347255904,1347255919,SC
-1347255920,1347256271,HU
-1347256272,1347256287,SC
-1347256288,1347256319,HU
+1347239936,1347244031,DK
+1347244032,1347245055,GB
+1347245056,1347245311,RU
+1347245312,1347248127,GB
+1347248128,1347252223,SE
+1347252224,1347256319,HU
1347256320,1347260415,FO
1347260416,1347264511,MK
1347264512,1347268607,RU
1347268608,1347272703,LB
1347272704,1347276799,MT
-1347276800,1347280031,DE
-1347280032,1347280063,ET
-1347280064,1347280495,DE
-1347280496,1347280511,ET
-1347280512,1347280543,DE
-1347280544,1347280575,MY
-1347280576,1347280895,DE
+1347276800,1347280895,DE
1347280896,1347284991,FR
-1347284992,1347286271,GB
-1347286272,1347286335,BN
-1347286336,1347286527,GB
-1347286528,1347286535,BG
-1347286536,1347289087,GB
+1347284992,1347289087,GB
1347289088,1347293183,FR
1347293184,1347293311,SE
1347293312,1347293312,LR
@@ -45692,20 +15179,20 @@
1347293317,1347293319,LR
1347293320,1347293328,GA
1347293329,1347293335,NG
-1347293336,1347293351,A2
+1347293336,1347293351,SE
1347293352,1347293375,NG
-1347293376,1347293391,A2
+1347293376,1347293391,SE
1347293392,1347293392,CY
1347293393,1347293400,NG
1347293401,1347293407,US
-1347293408,1347293408,A2
+1347293408,1347293408,SE
1347293409,1347293416,NG
1347293417,1347293424,TZ
1347293425,1347293440,GN
1347293441,1347293447,US
1347293448,1347293456,GA
1347293457,1347293464,NG
-1347293465,1347293471,US
+1347293465,1347293471,SE
1347293472,1347293479,IQ
1347293480,1347293487,LR
1347293488,1347293495,TD
@@ -45717,7 +15204,7 @@
1347293537,1347293544,GH
1347293545,1347293552,NG
1347293553,1347293559,ZM
-1347293560,1347293560,A2
+1347293560,1347293560,SE
1347293561,1347293568,GN
1347293569,1347293576,NG
1347293577,1347293584,GN
@@ -45730,19 +15217,23 @@
1347293633,1347293640,LR
1347293641,1347293656,NG
1347293657,1347293672,GN
-1347293673,1347293675,A2
+1347293673,1347293675,SE
1347293676,1347293679,BR
1347293680,1347293680,GN
1347293681,1347293688,US
1347293689,1347293719,NG
-1347293720,1347293723,A2
+1347293720,1347293723,SE
1347293724,1347293724,US
-1347293725,1347293727,A2
+1347293725,1347293727,SE
1347293728,1347293728,GN
-1347293729,1347293744,US
+1347293729,1347293735,US
+1347293736,1347293743,GN
+1347293744,1347293744,US
1347293745,1347293752,GN
1347293753,1347293760,NG
-1347293761,1347293776,ZM
+1347293761,1347293767,ZM
+1347293768,1347293775,CM
+1347293776,1347293776,ZM
1347293777,1347293800,NG
1347293801,1347293807,US
1347293808,1347293816,NG
@@ -45767,7 +15258,7 @@
1347293985,1347293991,US
1347293992,1347294000,NG
1347294001,1347294008,TZ
-1347294009,1347294015,A2
+1347294009,1347294015,SE
1347294016,1347294023,US
1347294024,1347294040,GN
1347294041,1347294048,NG
@@ -45786,13 +15277,12 @@
1347294161,1347294168,GN
1347294169,1347294176,NG
1347294177,1347294184,US
-1347294185,1347294191,A2
+1347294185,1347294191,SE
1347294192,1347294192,KE
-1347294193,1347294208,NG
-1347294209,1347294212,SE
-1347294213,1347294215,A2
+1347294193,1347294207,NG
+1347294208,1347294215,SE
1347294216,1347294223,IQ
-1347294224,1347294224,A2
+1347294224,1347294224,SE
1347294225,1347294232,CM
1347294233,1347294240,US
1347294241,1347294248,LR
@@ -45801,7 +15291,7 @@
1347294265,1347294268,LS
1347294269,1347294271,LR
1347294272,1347294279,BR
-1347294280,1347294280,A2
+1347294280,1347294280,SE
1347294281,1347294288,CM
1347294289,1347294303,UG
1347294304,1347294304,US
@@ -45820,29 +15310,32 @@
1347294402,1347294402,NG
1347294403,1347294408,CM
1347294409,1347294415,GN
-1347294416,1347294424,NG
+1347294416,1347294418,SE
+1347294419,1347294424,NG
1347294425,1347294425,US
1347294426,1347294426,NG
1347294427,1347294432,US
-1347294433,1347294435,A2
-1347294436,1347294440,SE
+1347294433,1347294440,SE
1347294441,1347294447,SO
-1347294448,1347294975,US
+1347294448,1347294463,US
+1347294464,1347294464,SE
+1347294465,1347294496,US
+1347294497,1347294975,SE
1347294976,1347294992,CG
1347294993,1347295008,US
1347295009,1347295015,LR
-1347295016,1347295032,A2
+1347295016,1347295032,SE
1347295033,1347295056,NG
-1347295057,1347295063,A2
-1347295064,1347295072,LS
+1347295057,1347295064,SE
+1347295065,1347295072,LS
1347295073,1347295079,AF
1347295080,1347295103,NG
-1347295104,1347295104,A2
+1347295104,1347295104,SE
1347295105,1347295112,LY
1347295113,1347295120,ZA
1347295121,1347295128,NG
1347295129,1347295132,GN
-1347295133,1347295135,A2
+1347295133,1347295135,SE
1347295136,1347295144,FR
1347295145,1347295152,NG
1347295153,1347295159,US
@@ -45850,103 +15343,71 @@
1347295161,1347295168,GN
1347295169,1347295184,LS
1347295185,1347295192,SO
-1347295193,1347295199,A2
+1347295193,1347295199,SE
1347295200,1347295216,ZM
1347295217,1347295223,US
1347295224,1347295224,AO
1347295225,1347295232,NG
-1347295233,1347295744,A2
+1347295233,1347295744,SE
1347295745,1347295745,US
-1347295746,1347295747,A2
-1347295748,1347295752,US
+1347295746,1347295748,SE
+1347295749,1347295752,US
1347295753,1347295755,BW
-1347295756,1347295759,A2
+1347295756,1347295759,SE
1347295760,1347295775,BW
1347295776,1347295776,IQ
1347295777,1347295784,HU
1347295785,1347295791,LB
-1347295792,1347295816,A2
+1347295792,1347295816,SE
1347295817,1347295824,OM
1347295825,1347295832,GH
1347295833,1347295840,FR
1347295841,1347295848,NG
1347295849,1347295852,LS
-1347295853,1347295856,A2
+1347295853,1347295856,SE
1347295857,1347295864,NG
-1347295865,1347295927,A2
-1347295928,1347295936,NG
+1347295865,1347295928,SE
+1347295929,1347295936,NG
1347295937,1347295976,US
1347295977,1347295984,LS
1347295985,1347295992,US
-1347295993,1347295999,A2
-1347296000,1347296080,US
-1347296081,1347296088,SE
-1347296089,1347296112,US
+1347295993,1347295999,SE
+1347296000,1347296007,US
+1347296008,1347296008,SE
+1347296009,1347296032,US
+1347296033,1347296040,SE
+1347296041,1347296044,US
+1347296045,1347296056,SE
+1347296057,1347296080,US
+1347296081,1347296104,SE
+1347296105,1347296112,US
1347296113,1347296128,ZM
-1347296129,1347296232,US
+1347296129,1347296136,SE
+1347296137,1347296144,US
+1347296145,1347296160,SE
+1347296161,1347296168,US
+1347296169,1347296176,SE
+1347296177,1347296184,US
+1347296185,1347296192,SE
+1347296193,1347296200,US
+1347296201,1347296224,SE
+1347296225,1347296232,US
1347296233,1347296240,JO
-1347296241,1347296255,US
-1347296256,1347296264,A2
+1347296241,1347296264,SE
1347296265,1347296272,US
-1347296273,1347296775,A2
-1347296776,1347296783,NG
-1347296784,1347296799,US
-1347296800,1347296807,LR
-1347296808,1347296823,GN
-1347296824,1347296831,NG
-1347296832,1347296847,A2
-1347296848,1347296859,GN
-1347296860,1347296863,A2
-1347296864,1347296871,GN
-1347296872,1347296879,NG
-1347296880,1347296887,GN
-1347296888,1347296895,A2
-1347296896,1347296903,GN
-1347296904,1347296911,A2
-1347296912,1347296943,GN
-1347296944,1347296967,A2
-1347296968,1347296975,NG
-1347296976,1347296983,A2
-1347296984,1347296991,US
-1347296992,1347297007,NG
-1347297008,1347297015,US
-1347297016,1347297031,A2
-1347297032,1347297039,GA
-1347297040,1347297047,GN
-1347297048,1347297055,CM
-1347297056,1347297071,GH
+1347296273,1347297071,SE
1347297072,1347297079,US
-1347297080,1347297103,A2
-1347297104,1347297119,CG
-1347297120,1347297127,GH
-1347297128,1347297151,A2
+1347297080,1347297151,SE
1347297152,1347297159,SL
-1347297160,1347297167,GN
-1347297168,1347297175,SL
-1347297176,1347297183,A2
-1347297184,1347297191,US
-1347297192,1347297223,A2
-1347297224,1347297231,NE
-1347297232,1347297247,A2
-1347297248,1347297255,CM
-1347297256,1347297279,A2
+1347297160,1347297279,SE
1347297280,1347305471,UA
1347305472,1347309567,AL
-1347309568,1347309839,DE
-1347309840,1347309855,CH
-1347309856,1347313663,DE
+1347309568,1347313663,DE
1347313664,1347321855,RU
1347321856,1347322111,KW
1347322112,1347322367,US
-1347322368,1347322623,KW
-1347322624,1347322879,US
-1347322880,1347324927,KW
-1347324928,1347325439,US
-1347325440,1347325695,KW
-1347325696,1347325951,IQ
-1347325952,1347327231,CZ
-1347327232,1347327487,SK
-1347327488,1347327743,CZ
+1347322368,1347325951,KW
+1347325952,1347327743,CZ
1347327744,1347327999,SK
1347328000,1347330047,CZ
1347330048,1347338239,DE
@@ -45959,48 +15420,28 @@
1347362816,1347366911,NL
1347366912,1347371007,IT
1347371008,1347375103,RU
-1347375104,1347375359,EU
-1347375360,1347375615,GB
-1347375616,1347375871,EU
-1347375872,1347379199,GB
+1347375104,1347379199,GB
1347379200,1347383295,NL
-1347383296,1347384111,EE
-1347384112,1347384115,FI
-1347384116,1347385599,EE
-1347385600,1347385855,FR
-1347385856,1347386751,EE
-1347386752,1347386815,MY
-1347386816,1347387011,EE
+1347383296,1347387011,EE
1347387012,1347387015,DE
1347387016,1347387391,EE
1347387392,1347391487,GB
-1347391488,1347395583,LB
+1347391488,1347393535,IQ
+1347393536,1347395583,LB
1347395584,1347399679,SE
1347399680,1347403775,RU
1347403776,1347407871,NL
1347407872,1347411967,GB
1347411968,1347416063,DE
1347416064,1347420159,RU
-1347420160,1347421263,DK
-1347421264,1347421279,DE
-1347421280,1347425791,DK
-1347425792,1347426047,EU
-1347426048,1347427135,DK
-1347427136,1347427327,NO
-1347427328,1347428351,DK
+1347420160,1347428351,DK
1347428352,1347432447,BA
1347432448,1347436543,HR
1347436544,1347440639,SE
1347440640,1347444735,ES
1347444736,1347452927,RU
-1347452928,1347455930,BG
-1347455931,1347455931,BG
-1347455932,1347461119,BG
-1347461120,1347462579,AL
-1347462580,1347462583,RS
-1347462584,1347462591,AL
-1347462592,1347462607,RS
-1347462608,1347465215,AL
+1347452928,1347461119,BG
+1347461120,1347465215,AL
1347465216,1347469311,GB
1347469312,1347473407,RU
1347473408,1347477503,UZ
@@ -46008,32 +15449,18 @@
1347481600,1347485695,AT
1347485696,1347493887,DE
1347493888,1347502079,LV
-1347502080,1347503103,ES
-1347503104,1347503359,GB
-1347503360,1347504383,ES
-1347504384,1347504639,GB
-1347504640,1347504959,ES
-1347504960,1347505023,GB
-1347505024,1347505151,ES
-1347505152,1347505407,GB
-1347505408,1347505663,DE
-1347505664,1347506175,ES
-1347506176,1347506431,GB
-1347506432,1347518463,ES
+1347502080,1347505159,ES
+1347505160,1347505167,GB
+1347505168,1347505215,ES
+1347505216,1347505247,GB
+1347505248,1347518463,ES
1347518464,1347522559,AT
1347522560,1347526655,LB
-1347526656,1347527967,FI
-1347527968,1347527999,SE
-1347528000,1347534847,FI
+1347526656,1347534847,FI
1347534848,1347538943,DE
1347538944,1347543039,RU
-1347543040,1347544063,SK
-1347544064,1347544319,SL
-1347544320,1347547135,SK
-1347547136,1347550303,DE
-1347550304,1347550335,AT
-1347550336,1347551167,DE
-1347551168,1347551231,PL
+1347543040,1347547135,SK
+1347547136,1347551231,DE
1347551232,1347555327,IT
1347555328,1347559423,PL
1347559424,1347567615,RU
@@ -46041,11 +15468,10 @@
1347571712,1347575807,RU
1347575808,1347579903,DK
1347579904,1347588095,GB
-1347588096,1347590911,CZ
-1347590912,1347591167,SK
-1347591168,1347592191,CZ
+1347588096,1347592191,CZ
1347592192,1347600383,RU
-1347600384,1347602431,UA
+1347600384,1347601407,CZ
+1347601408,1347602431,UA
1347602432,1347608575,DE
1347608576,1347612671,FR
1347612672,1347616767,GB
@@ -46054,65 +15480,41 @@
1347624960,1347633151,CH
1347633152,1347637247,CZ
1347637248,1347641343,SE
-1347641344,1347646194,DE
-1347646195,1347646207,TR
-1347646208,1347649535,DE
+1347641344,1347649535,DE
1347649536,1347653631,GE
-1347653632,1347654615,GB
-1347654616,1347654623,EG
-1347654624,1347657727,GB
+1347653632,1347657727,GB
1347657728,1347661823,IT
1347661824,1347665919,DE
1347665920,1347670015,RU
1347670016,1347674111,SE
1347674112,1347682303,RU
1347682304,1347686399,DE
-1347686400,1347688703,EU
-1347688704,1347688735,BE
-1347688736,1347688743,EU
-1347688744,1347688751,ET
-1347688752,1347688767,SN
-1347688768,1347688959,EU
-1347688960,1347689343,BE
-1347689344,1347690495,EU
1347690496,1347694591,SE
1347694592,1347706879,GB
1347706880,1347710975,IT
1347710976,1347715071,RU
-1347715072,1347723263,ES
+1347715072,1347716351,ES
+1347716352,1347716607,BG
+1347716608,1347718143,ES
+1347718144,1347718399,US
+1347718400,1347723263,ES
1347723264,1347727359,GB
1347727360,1347731455,UA
1347731456,1347739647,DE
1347739648,1347747839,NL
1347747840,1347751935,DE
-1347751936,1347754751,CY
-1347754752,1347754775,GR
-1347754776,1347754791,CY
-1347754792,1347754887,GR
-1347754888,1347754888,CY
-1347754889,1347754894,GR
-1347754895,1347754895,CY
-1347754896,1347754919,GR
-1347754920,1347754927,CY
-1347754928,1347754935,GR
-1347754936,1347754943,RS
-1347754944,1347754951,CY
-1347754952,1347754959,TN
-1347754960,1347754967,CY
-1347754968,1347754983,GR
-1347754984,1347754991,CY
-1347754992,1347755112,GR
-1347755113,1347755119,CY
-1347755120,1347755191,GR
-1347755192,1347755223,CY
-1347755224,1347755231,GR
-1347755232,1347755239,CY
-1347755240,1347755247,GR
-1347755248,1347755263,CY
-1347755264,1347755775,GR
-1347755776,1347756031,CY
+1347751936,1347754903,CY
+1347754904,1347754911,GR
+1347754912,1347755015,CY
+1347755016,1347755023,GR
+1347755024,1347755135,CY
+1347755136,1347755151,GR
+1347755152,1347755159,CY
+1347755160,1347755175,GR
+1347755176,1347756031,CY
1347756032,1347760127,NL
-1347760128,1347764223,HU
+1347760128,1347762175,CZ
+1347762176,1347764223,HU
1347764224,1347772415,GB
1347772416,1347776511,MT
1347776512,1347780607,SE
@@ -46126,368 +15528,17 @@
1347809280,1347813375,RU
1347813376,1347817471,DE
1347817472,1347821567,IT
-1347821568,1347822343,GB
-1347822344,1347822351,NL
-1347822352,1347825663,GB
+1347821568,1347825663,GB
1347825664,1347829759,IT
1347829760,1347833855,SE
-1347833856,1347833953,DE
-1347833954,1347833954,TR
-1347833955,1347833958,DE
-1347833959,1347833960,TR
-1347833961,1347833961,DE
-1347833962,1347833962,TR
-1347833963,1347833963,DE
-1347833964,1347833964,TR
-1347833965,1347833965,US
-1347833966,1347833966,TR
-1347833967,1347834002,DE
-1347834003,1347834003,TR
-1347834004,1347834004,US
-1347834005,1347834006,DE
-1347834007,1347834012,US
-1347834013,1347834066,DE
-1347834067,1347834068,BR
-1347834069,1347834070,DE
-1347834071,1347834072,US
-1347834073,1347834073,DE
-1347834074,1347834074,PK
-1347834075,1347834078,US
-1347834079,1347835651,DE
-1347835652,1347835653,RU
-1347835654,1347835781,DE
-1347835782,1347835782,PK
-1347835783,1347835784,DE
-1347835785,1347835785,TR
-1347835786,1347835790,DE
-1347835791,1347835791,GB
-1347835792,1347835794,US
-1347835795,1347835795,DE
-1347835796,1347835796,GB
-1347835797,1347835798,DE
-1347835799,1347835799,IN
-1347835800,1347835803,UG
-1347835804,1347835804,IN
-1347835805,1347835811,DE
-1347835812,1347835812,RU
-1347835813,1347835813,ZA
-1347835814,1347835815,DE
-1347835816,1347835816,TR
-1347835817,1347835817,DE
-1347835818,1347835818,AR
-1347835819,1347835819,DE
-1347835820,1347835820,US
-1347835821,1347835821,ES
-1347835822,1347835822,DE
-1347835823,1347835823,GB
-1347835824,1347835824,TR
-1347835825,1347835825,DE
-1347835826,1347835826,UA
-1347835827,1347835827,DE
-1347835828,1347835828,PL
-1347835829,1347835829,BE
-1347835830,1347835830,TR
-1347835831,1347835831,LT
-1347835832,1347835832,DE
-1347835833,1347835833,TR
-1347835834,1347835848,DE
-1347835849,1347835849,AQ
-1347835850,1347835850,IN
-1347835851,1347835851,AQ
-1347835852,1347835863,DE
-1347835864,1347835865,VE
-1347835866,1347835866,GR
-1347835867,1347835867,DE
-1347835868,1347835868,TR
-1347835869,1347835869,VE
-1347835870,1347835870,GR
-1347835871,1347835872,DE
-1347835873,1347835873,KW
-1347835874,1347835874,AR
-1347835875,1347835880,DE
-1347835881,1347835881,TR
-1347835882,1347835892,DE
-1347835893,1347835893,BD
-1347835894,1347835894,DE
-1347835895,1347835895,ES
-1347835896,1347835896,AT
-1347835897,1347835897,DE
-1347835898,1347835898,VN
-1347835899,1347835899,CA
-1347835900,1347835975,DE
-1347835976,1347835976,PK
-1347835977,1347835978,DE
-1347835979,1347835980,PK
-1347835981,1347835982,DE
-1347835983,1347835984,RU
-1347835985,1347835985,PL
-1347835986,1347835986,DE
-1347835987,1347835987,US
-1347835988,1347835994,DE
-1347835995,1347835995,BD
-1347835996,1347835997,DE
-1347835998,1347835998,MD
-1347835999,1347836000,LT
-1347836001,1347836002,DE
-1347836003,1347836003,DK
-1347836004,1347836004,BG
-1347836005,1347836005,LI
-1347836006,1347836007,DE
-1347836008,1347836008,US
-1347836009,1347836009,DE
-1347836010,1347836010,US
-1347836011,1347836012,PK
-1347836013,1347836014,DE
-1347836015,1347836015,MX
-1347836016,1347836016,PK
-1347836017,1347836017,RO
-1347836018,1347836018,PT
-1347836019,1347836019,EC
-1347836020,1347836020,IN
-1347836021,1347836021,LT
-1347836022,1347836022,DE
-1347836023,1347836024,MD
-1347836025,1347836026,DE
-1347836027,1347836027,MD
-1347836028,1347836029,LT
-1347836030,1347836030,IN
-1347836031,1347836033,DE
-1347836034,1347836034,IN
-1347836035,1347836035,LT
-1347836036,1347836036,DE
-1347836037,1347836038,UG
-1347836039,1347836040,DE
-1347836041,1347836041,IT
-1347836042,1347836044,BR
-1347836045,1347836047,TR
-1347836048,1347836049,DE
-1347836050,1347836050,GR
-1347836051,1347836051,DE
-1347836052,1347836052,PL
-1347836053,1347836053,UG
-1347836054,1347836056,DE
-1347836057,1347836057,NO
-1347836058,1347836061,DE
-1347836062,1347836062,NO
-1347836063,1347836063,LT
-1347836064,1347836066,DE
-1347836067,1347836067,PK
-1347836068,1347836070,IN
-1347836071,1347836071,BD
-1347836072,1347836072,AF
-1347836073,1347836073,BD
-1347836074,1347836074,GR
-1347836075,1347836075,AT
-1347836076,1347836081,DE
-1347836082,1347836082,LK
-1347836083,1347836083,DE
-1347836084,1347836084,NL
-1347836085,1347836087,DE
-1347836088,1347836088,BA
-1347836089,1347836089,IL
-1347836090,1347836091,DE
-1347836092,1347836092,IT
-1347836093,1347836211,DE
-1347836212,1347836212,US
-1347836213,1347836218,DE
-1347836219,1347836219,US
-1347836220,1347836294,DE
-1347836295,1347836295,IN
-1347836296,1347836296,GR
-1347836297,1347836300,DE
-1347836301,1347836301,US
-1347836302,1347836302,DE
-1347836303,1347836309,US
-1347836310,1347836310,FI
-1347836311,1347836311,PK
-1347836312,1347836312,IL
-1347836313,1347836313,US
-1347836314,1347836314,DE
-1347836315,1347836315,US
-1347836316,1347836338,DE
-1347836339,1347836339,IN
-1347836340,1347836340,DE
-1347836341,1347836341,UG
-1347836342,1347836344,DE
-1347836345,1347836345,MA
-1347836346,1347836346,DE
-1347836347,1347836347,MA
-1347836348,1347836547,DE
-1347836548,1347836549,CY
-1347836550,1347836551,DE
-1347836552,1347836555,TR
-1347836556,1347836556,US
-1347836557,1347836575,DE
-1347836576,1347836576,BE
-1347836577,1347836578,DE
-1347836579,1347836580,EE
-1347836581,1347836581,MA
-1347836582,1347836583,DE
-1347836584,1347836584,RU
-1347836585,1347836585,DE
-1347836586,1347836588,UA
-1347836589,1347836591,DE
-1347836592,1347836592,PK
-1347836593,1347836593,BO
-1347836594,1347836594,RU
-1347836595,1347836595,MD
-1347836596,1347836597,DE
-1347836598,1347836599,PL
-1347836600,1347836602,DE
-1347836603,1347836603,GR
-1347836604,1347836604,CO
-1347836605,1347836605,DE
-1347836606,1347836606,TR
-1347836607,1347836607,MT
-1347836608,1347837511,DE
-1347837512,1347837512,IL
-1347837513,1347837515,DE
-1347837516,1347837517,UG
-1347837518,1347837518,DE
-1347837519,1347837519,US
-1347837520,1347837523,DE
-1347837524,1347837525,BR
-1347837526,1347837526,DE
-1347837527,1347837528,US
-1347837529,1347837538,DE
-1347837539,1347837542,BR
-1347837543,1347837543,US
-1347837544,1347837548,BR
-1347837549,1347837555,DE
-1347837556,1347837556,IN
-1347837557,1347837557,UG
-1347837558,1347837558,IN
-1347837559,1347837559,GB
-1347837560,1347837566,IN
-1347837567,1347837573,DE
-1347837574,1347837574,PK
-1347837575,1347837580,DE
-1347837581,1347837581,BR
-1347837582,1347837582,TR
-1347837583,1347837583,US
-1347837584,1347837591,DE
-1347837592,1347837592,HU
-1347837593,1347837593,TR
-1347837594,1347837595,RU
-1347837596,1347837598,FI
-1347837599,1347837600,DO
-1347837601,1347837603,DE
-1347837604,1347837604,CH
-1347837605,1347837605,IN
-1347837606,1347837608,TR
-1347837609,1347837610,DE
-1347837611,1347837616,LT
-1347837617,1347837619,IN
-1347837620,1347837620,NL
-1347837621,1347837621,IN
-1347837622,1347837623,DE
-1347837624,1347837626,IN
-1347837627,1347837629,RU
-1347837630,1347837630,AE
-1347837631,1347837631,GB
-1347837632,1347837633,DE
-1347837634,1347837634,NL
-1347837635,1347837635,BD
-1347837636,1347837637,DE
-1347837638,1347837638,PK
-1347837639,1347837641,DE
-1347837642,1347837642,IT
-1347837643,1347837643,GR
-1347837644,1347837644,AE
-1347837645,1347837645,RU
-1347837646,1347837647,IN
-1347837648,1347837648,RU
-1347837649,1347837649,PT
-1347837650,1347837650,DE
-1347837651,1347837651,IT
-1347837652,1347837652,DE
-1347837653,1347837655,RU
-1347837656,1347837660,DE
-1347837661,1347837661,AE
-1347837662,1347837666,DE
-1347837667,1347837667,US
-1347837668,1347837668,PK
-1347837669,1347837951,DE
+1347833856,1347837951,DE
1347837952,1347846143,RO
1347846144,1347850239,NO
1347850240,1347854335,IT
-1347854336,1347854591,DE
-1347854592,1347854599,EU
-1347854600,1347854607,DE
-1347854608,1347854623,EU
-1347854624,1347854639,DE
-1347854640,1347854655,EU
-1347854656,1347854791,DE
-1347854792,1347854815,EU
-1347854816,1347854831,DE
-1347854832,1347854847,EU
-1347854848,1347854871,DE
-1347854872,1347854879,EU
-1347854880,1347854887,DE
-1347854888,1347854911,EU
-1347854912,1347855071,DE
-1347855072,1347855079,EU
-1347855080,1347855103,DE
-1347855104,1347855359,CH
-1347855360,1347856127,DE
-1347856128,1347856191,EU
-1347856192,1347856239,DE
-1347856240,1347856255,EU
-1347856256,1347856383,DE
-1347856384,1347856399,EU
-1347856400,1347856423,DE
-1347856424,1347856447,EU
-1347856448,1347856591,DE
-1347856592,1347856607,EU
-1347856608,1347856639,DE
-1347856640,1347856895,AT
-1347856896,1347858495,DE
-1347858496,1347858503,EU
-1347858504,1347858527,DE
-1347858528,1347858559,EU
-1347858560,1347858575,DE
-1347858576,1347858623,EU
-1347858624,1347858631,DE
-1347858632,1347858639,EU
-1347858640,1347859335,DE
-1347859336,1347859343,EU
-1347859344,1347859351,DE
-1347859352,1347859359,EU
-1347859360,1347859383,DE
-1347859384,1347859391,EU
-1347859392,1347859423,DE
-1347859424,1347859455,EU
-1347859456,1347860863,DE
-1347860864,1347860879,EU
-1347860880,1347860895,DE
-1347860896,1347860911,EU
-1347860912,1347860927,DE
-1347860928,1347860943,EU
-1347860944,1347861383,DE
-1347861384,1347861391,EU
-1347861392,1347861395,DE
-1347861396,1347861399,EU
-1347861400,1347861471,DE
-1347861472,1347861503,EU
-1347861504,1347861759,DE
-1347861760,1347861799,EU
-1347861800,1347861823,DE
-1347861824,1347861943,EU
-1347861944,1347861951,DE
-1347861952,1347862007,EU
-1347862008,1347862015,CH
-1347862016,1347862089,EU
+1347854336,1347854847,DE
+1347857408,1347858431,DE
1347862090,1347862090,DE
-1347862091,1347862111,EU
-1347862112,1347862143,DE
-1347862144,1347862279,EU
-1347862280,1347862287,DE
-1347862288,1347862303,EU
-1347862304,1347862431,DE
-1347862432,1347862463,EU
-1347862464,1347862471,DE
-1347862472,1347862479,EU
-1347862480,1347862527,DE
+1347862272,1347862527,DE
1347862528,1347866623,CH
1347866624,1347870719,NO
1347870720,1347874815,AM
@@ -46495,23 +15546,19 @@
1347878400,1347878911,SK
1347878912,1347887103,GB
1347887104,1347891199,PL
-1347891200,1347895287,SE
-1347895288,1347895295,GB
+1347891200,1347895295,SE
1347895296,1347903487,GH
1347903488,1347907583,RU
1347907584,1347911679,DE
1347911680,1347915775,GB
1347915776,1347919871,RU
-1347919872,1347922303,DE
-1347922304,1347922319,NL
-1347922320,1347922475,DE
-1347922476,1347922476,NL
-1347922477,1347923967,DE
+1347919872,1347923967,DE
1347923968,1347928063,CZ
1347928064,1347932159,RU
1347932160,1347936255,SK
1347936256,1347940351,FR
1347940352,1347944447,BA
+1347945472,1347946495,NG
1347947520,1347948543,DZ
1347948544,1347952639,DE
1347952640,1347956735,BE
@@ -46519,99 +15566,12 @@
1347960832,1347964927,DE
1347964928,1347969023,IT
1347969024,1347977215,SE
-1347977216,1347978007,A2
-1347978008,1347978015,NG
-1347978016,1347978031,A2
-1347978032,1347978039,NG
-1347978040,1347978191,A2
-1347978192,1347978199,NG
-1347978200,1347978263,A2
-1347978264,1347978271,NG
-1347978272,1347978319,A2
-1347978320,1347978327,NG
-1347978328,1347978351,A2
-1347978352,1347978359,NG
-1347978360,1347978375,A2
-1347978376,1347978407,NG
-1347978408,1347978447,A2
-1347978448,1347978463,NG
-1347978464,1347978631,A2
-1347978632,1347978647,NG
-1347978648,1347978727,A2
-1347978728,1347978735,NG
-1347978736,1347978847,A2
-1347978848,1347978855,NG
-1347978856,1347978935,A2
-1347978936,1347978943,NG
-1347978944,1347979055,A2
-1347979056,1347979071,NG
-1347979072,1347979135,A2
-1347979136,1347979143,NG
-1347979144,1347979159,A2
-1347979160,1347979167,NG
-1347979168,1347979231,A2
-1347979232,1347979247,NG
-1347979248,1347979375,A2
-1347979376,1347979399,NG
-1347979400,1347979583,A2
-1347979584,1347979591,NG
-1347979592,1347979743,A2
-1347979744,1347979751,NG
-1347979752,1347980111,A2
-1347980112,1347980127,GN
-1347980128,1347980271,A2
-1347980272,1347980279,DK
-1347980280,1347981007,A2
-1347981008,1347981015,NG
-1347981016,1347981023,A2
-1347981024,1347981031,NG
-1347981032,1347981255,A2
-1347981256,1347981263,DK
-1347981264,1347981927,A2
-1347981928,1347981935,NG
-1347981936,1347982031,A2
-1347982032,1347982055,NG
-1347982056,1347982279,A2
-1347982280,1347982287,NG
-1347982288,1347982927,A2
-1347982928,1347982943,NG
-1347982944,1347983063,A2
-1347983064,1347983071,NG
-1347983072,1347983247,A2
-1347983248,1347983263,DK
-1347983264,1347983303,A2
-1347983304,1347983311,NG
-1347983312,1347983399,A2
-1347983400,1347983407,A2
-1347983408,1347983903,A2
-1347983904,1347983911,NG
-1347983912,1347983919,A2
-1347983920,1347983927,NG
-1347983928,1347983983,A2
-1347983984,1347984127,NG
-1347984128,1347984207,A2
-1347984208,1347984215,NG
-1347984216,1347984415,A2
-1347984416,1347984423,NG
-1347984424,1347984719,A2
-1347984720,1347984727,NG
-1347984728,1347984879,A2
-1347984880,1347984895,NG
-1347984896,1347984959,A2
-1347984960,1347984991,NG
-1347984992,1347985031,A2
-1347985032,1347985039,NG
-1347985040,1347985103,A2
-1347985104,1347985119,NG
-1347985120,1347985151,A2
-1347985152,1347985407,DK
+1347977216,1347985407,DK
1347985408,1347989503,IT
1347989504,1347993599,FI
1347993600,1348001791,GB
1348001792,1348005887,ES
-1348005888,1348009215,BH
-1348009216,1348009471,US
-1348009472,1348009983,BH
+1348005888,1348009983,BH
1348009984,1348014079,RU
1348014080,1348018175,DK
1348018176,1348026367,NO
@@ -46627,9 +15587,7 @@
1348063232,1348067327,CH
1348067328,1348071423,NL
1348071424,1348075519,DE
-1348075520,1348076287,LV
-1348076288,1348076543,RU
-1348076544,1348083711,LV
+1348075520,1348083711,LV
1348083712,1348091903,LU
1348091904,1348095999,RU
1348096000,1348100095,AL
@@ -46640,7 +15598,8 @@
1348116480,1348120575,JO
1348120576,1348124671,RU
1348124672,1348128767,GB
-1348128768,1348132351,SI
+1348128768,1348129791,BE
+1348129792,1348132351,SI
1348132352,1348132863,BE
1348132864,1348136959,UA
1348136960,1348141055,RU
@@ -46656,56 +15615,27 @@
1348177920,1348182015,BE
1348182016,1348190207,UA
1348190208,1348194303,RU
-1348194304,1348194815,GR
-1348194816,1348195071,US
-1348195072,1348198399,GR
+1348194304,1348198399,GR
1348198400,1348202495,NO
-1348202496,1348206591,EU
1348206592,1348218879,RU
-1348218880,1348219295,DE
-1348219296,1348219327,A2
-1348219328,1348219343,DE
-1348219344,1348219359,ZM
-1348219360,1348219647,DE
-1348219648,1348220159,US
-1348220160,1348220687,DE
-1348220688,1348220703,SA
-1348220704,1348220927,DE
-1348220928,1348221183,US
-1348221184,1348222975,DE
+1348218880,1348222975,DE
1348222976,1348231167,LU
1348231168,1348235263,RU
1348235264,1348239359,AT
1348239360,1348241407,SE
-1348241408,1348242431,NO
-1348242432,1348242943,GB
-1348242944,1348243455,SE
+1348241408,1348242431,GB
+1348242432,1348243455,SE
1348243456,1348247551,GB
1348247552,1348251647,RU
1348251648,1348255743,GE
1348255744,1348263935,RU
1348263936,1348268031,UA
1348268032,1348272127,CZ
-1348272128,1348274695,IE
-1348274696,1348274791,CH
-1348274792,1348274799,IE
-1348274800,1348274815,IL
-1348274816,1348274911,IE
-1348274912,1348274919,CH
-1348274920,1348274927,IE
-1348274928,1348274935,IL
-1348274936,1348275199,CH
-1348275200,1348275711,GB
-1348275712,1348275967,CH
-1348275968,1348280319,IE
+1348272128,1348280319,IE
1348280320,1348284415,AT
1348284416,1348288511,RU
1348288512,1348292607,IT
-1348292608,1348294689,FR
-1348294690,1348294690,GB
-1348294691,1348296556,FR
-1348296557,1348296557,GB
-1348296558,1348296703,FR
+1348292608,1348296703,FR
1348296704,1348300799,RU
1348300800,1348304895,UA
1348304896,1348308991,IT
@@ -46722,12 +15652,8 @@
1348354048,1348358143,NL
1348358144,1348362239,DE
1348362240,1348366335,MC
-1348366336,1348368227,IT
-1348368228,1348368228,A2
-1348368229,1348368895,IT
-1348368896,1348369151,A2
-1348369152,1348370431,IT
-1348370432,1348374527,CZ
+1348366336,1348370431,IT
+1348370432,1348374527,DE
1348374528,1348378623,CH
1348378624,1348382719,BY
1348382720,1348386815,FR
@@ -46741,14 +15667,7 @@
1348419584,1348427775,HU
1348427776,1348435967,CZ
1348435968,1348440063,FI
-1348440064,1348440319,DE
-1348440320,1348440831,NL
-1348440832,1348441215,DE
-1348441216,1348441343,NL
-1348441344,1348441855,DE
-1348441856,1348442111,NL
-1348442112,1348443775,DE
-1348443776,1348448255,NL
+1348440064,1348448255,NL
1348448256,1348456447,GB
1348456448,1348460543,BH
1348460544,1348464639,SI
@@ -46763,405 +15682,57 @@
1349124096,1349255167,GR
1349255168,1349451775,AT
1349451776,1349517311,IE
-1349517312,1349584543,NL
-1349584544,1349584551,GB
-1349584552,1349763071,NL
+1349517312,1349763071,NL
1349763072,1349771263,RU
1349771264,1349779455,NL
1349779456,1349910527,IT
1349910528,1350041599,FR
-1350041600,1350057215,AT
-1350057216,1350057343,AG
-1350057344,1350091991,AT
-1350091992,1350091999,SA
-1350092000,1350092287,AT
-1350092288,1350092543,A2
-1350092544,1350215167,AT
-1350215168,1350215191,IQ
-1350215192,1350215679,AT
+1350041600,1350215679,AT
1350215680,1350215935,IQ
-1350215936,1350216959,A2
+1350215936,1350216959,AT
1350216960,1350217215,IQ
-1350217216,1350217471,A2
+1350217216,1350217471,AT
1350217472,1350217727,IQ
-1350217728,1350220287,AT
-1350220288,1350220543,DE
-1350220544,1350295823,AT
-1350295824,1350295831,SA
-1350295832,1350295847,AT
-1350295848,1350295855,SA
-1350295856,1350296063,AT
-1350296064,1350296319,A2
-1350296320,1350296327,AT
-1350296328,1350296343,A2
-1350296344,1350296351,AT
-1350296352,1350296359,A2
-1350296360,1350296367,AT
-1350296368,1350296387,A2
-1350296388,1350296391,AT
-1350296392,1350296395,A2
-1350296396,1350296399,AT
-1350296400,1350296439,A2
-1350296440,1350296511,AT
-1350296512,1350296519,A2
-1350296520,1350296539,AT
-1350296540,1350296543,A2
-1350296544,1350303743,AT
+1350217728,1350303743,AT
1350303744,1350434815,FR
1350434816,1350565887,NL
-1350565888,1351793791,DE
-1351793792,1351793855,GB
-1351793856,1351801327,DE
-1351801328,1351801335,HU
-1351801336,1351806975,DE
-1351806976,1351807231,IT
-1351807232,1351879999,DE
-1351880000,1351880031,IT
-1351880032,1351965183,DE
-1351965184,1351965439,US
-1351965440,1351968511,DE
-1351968512,1351968767,CH
-1351968768,1351998679,DE
-1351998680,1351998687,TH
-1351998688,1352002047,DE
-1352002048,1352002303,US
-1352002304,1352010239,DE
-1352010240,1352010495,US
-1352010496,1352031618,DE
-1352031619,1352031619,EU
-1352031620,1352038695,DE
-1352038696,1352038699,US
-1352038700,1352041471,DE
-1352041472,1352041727,US
-1352041728,1352043959,DE
-1352043960,1352043967,A2
-1352043968,1352062455,DE
-1352062456,1352062463,CH
-1352062464,1352069631,DE
-1352069632,1352069759,US
-1352069760,1352069799,DE
-1352069800,1352069887,US
-1352069888,1352139671,DE
-1352139672,1352139679,IT
-1352139680,1352141311,DE
-1352141312,1352141567,NL
-1352141568,1352147007,DE
-1352147008,1352147015,SE
-1352147016,1352147107,DE
-1352147108,1352147111,SE
-1352147112,1352147263,DE
-1352147264,1352147271,ES
-1352147272,1352147391,DE
-1352147392,1352147399,CZ
-1352147400,1352147423,DE
-1352147424,1352147431,ES
-1352147432,1352147439,DE
-1352147440,1352147447,SZ
-1352147448,1352148151,DE
-1352148152,1352148159,IT
-1352148160,1352148751,DE
-1352148752,1352148759,US
-1352148760,1352149415,DE
-1352149416,1352149423,FI
-1352149424,1352149427,DE
-1352149428,1352149451,FR
-1352149452,1352149455,DE
-1352149456,1352149487,FR
-1352149488,1352149743,DE
-1352149744,1352149751,AT
-1352149752,1352149783,DE
-1352149784,1352149791,SE
-1352149792,1352149807,DE
-1352149808,1352149823,SE
-1352149824,1352149855,DE
-1352149856,1352149871,SE
-1352149872,1352150359,DE
-1352150360,1352150367,ES
-1352150368,1352150695,DE
-1352150696,1352150703,ES
-1352150704,1352150711,DE
-1352150712,1352150719,TR
-1352150720,1352150727,HU
-1352150728,1352150743,ES
-1352150744,1352293471,DE
-1352293472,1352293479,GB
-1352293480,1352294911,DE
-1352294912,1352295167,EU
-1352295168,1352299775,DE
+1350565888,1352299775,DE
1352299776,1352300031,US
-1352300032,1352404599,DE
-1352404600,1352404607,NL
-1352404608,1352405503,DE
-1352405504,1352405759,US
-1352405760,1352412159,DE
+1352300032,1352412159,DE
1352412160,1352412415,FR
-1352412416,1352445695,DE
-1352445696,1352445703,NL
-1352445704,1352663039,DE
+1352412416,1352412799,DE
+1352412800,1352412863,GB
+1352412864,1352417279,DE
+1352417280,1352418303,SK
+1352418304,1352663039,DE
1352663040,1353187327,DK
-1353187328,1353252991,GB
-1353252992,1353253023,FR
-1353253024,1353253663,GB
-1353253664,1353253671,NL
-1353253672,1353253791,GB
-1353253792,1353253823,FR
-1353253824,1353255071,GB
-1353255072,1353255087,CA
-1353255088,1353255839,GB
-1353255840,1353255855,FR
-1353255856,1353257111,GB
-1353257112,1353257119,ES
-1353257120,1353257151,GB
-1353257152,1353257167,FR
-1353257168,1353257983,GB
-1353257984,1353258263,SE
-1353258264,1353258271,NO
-1353258272,1353258303,SE
-1353258304,1353258367,FI
-1353258368,1353258391,SE
-1353258392,1353258399,GB
-1353258400,1353258407,SE
-1353258408,1353258415,GB
-1353258416,1353258423,DK
-1353258424,1353258495,SE
-1353258496,1353258503,GB
-1353258504,1353258519,SE
-1353258520,1353258559,GB
-1353258560,1353258623,SE
-1353258624,1353258631,GB
-1353258632,1353258639,SE
-1353258640,1353258783,GB
-1353258784,1353258807,SE
-1353258808,1353265407,GB
-1353265408,1353265439,DE
-1353265440,1353265943,GB
-1353265944,1353265951,IE
-1353265952,1353266959,GB
-1353266960,1353266975,IE
-1353266976,1353267199,GB
-1353267200,1353268223,IE
-1353268224,1353268487,GB
-1353268488,1353268495,BE
-1353268496,1353268503,GB
-1353268504,1353268511,BE
-1353268512,1353268519,GB
-1353268520,1353268559,BE
-1353268560,1353268567,GB
-1353268568,1353268599,BE
-1353268600,1353268607,GB
-1353268608,1353268647,BE
-1353268648,1353268655,GB
-1353268656,1353268687,BE
-1353268688,1353268695,GB
-1353268696,1353268703,BE
-1353268704,1353268711,GB
-1353268712,1353269007,BE
-1353269008,1353269015,GB
-1353269016,1353269031,BE
-1353269032,1353269039,GB
-1353269040,1353269223,BE
-1353269224,1353269231,FR
-1353269232,1353269247,BE
-1353269248,1353270527,GB
-1353270528,1353270783,IE
-1353270784,1353271295,GB
-1353271296,1353271423,IE
-1353271424,1353271807,GB
-1353271808,1353271831,ES
-1353271832,1353271839,GB
-1353271840,1353271911,ES
-1353271912,1353271919,GB
-1353271920,1353272023,ES
-1353272024,1353272031,GB
-1353272032,1353272039,ES
-1353272040,1353272047,GB
-1353272048,1353272055,ES
-1353272056,1353272079,GB
-1353272080,1353272103,ES
-1353272104,1353272111,GB
-1353272112,1353272119,ES
-1353272120,1353272127,GB
-1353272128,1353272143,ES
-1353272144,1353272151,GB
-1353272152,1353272159,ES
-1353272160,1353272207,GB
-1353272208,1353272245,ES
-1353272246,1353272247,GB
-1353272248,1353272271,ES
-1353272272,1353272287,GB
-1353272288,1353273055,ES
-1353273056,1353273063,GB
-1353273064,1353273071,ES
-1353273072,1353273087,GB
-1353273088,1353273343,ES
-1353273344,1353273631,BE
-1353273632,1353273639,GB
-1353273640,1353273671,BE
-1353273672,1353273679,GB
-1353273680,1353273711,BE
-1353273712,1353273719,GB
-1353273720,1353274367,BE
-1353274368,1353274895,ES
-1353274896,1353274911,GB
-1353274912,1353275135,ES
-1353275136,1353275199,GB
-1353275200,1353275255,ES
-1353275256,1353275263,GB
-1353275264,1353275279,ES
-1353275280,1353275287,GB
-1353275288,1353275391,ES
-1353275392,1353277439,GB
+1353187328,1353262295,GB
+1353262296,1353262303,US
+1353262304,1353272079,GB
+1353272080,1353272095,ES
+1353272096,1353275247,GB
+1353275248,1353275255,ES
+1353275256,1353277439,GB
1353277440,1353279487,CH
-1353279488,1353280119,IT
-1353280120,1353280127,GB
-1353280128,1353280199,IT
-1353280200,1353280207,GB
-1353280208,1353280231,IT
-1353280232,1353280239,GB
-1353280240,1353280343,IT
-1353280344,1353280351,GB
-1353280352,1353280767,IT
-1353280768,1353280775,GB
-1353280776,1353280783,IT
-1353280784,1353281023,GB
-1353281024,1353281303,BE
-1353281304,1353281319,GB
-1353281320,1353281327,BE
-1353281328,1353281343,GB
-1353281344,1353281359,BE
-1353281360,1353281367,GB
-1353281368,1353281391,BE
-1353281392,1353281407,GB
-1353281408,1353281535,BE
-1353281536,1353282047,GB
-1353282048,1353282063,IT
-1353282064,1353282071,GB
-1353282072,1353282103,IT
-1353282104,1353282111,GB
-1353282112,1353282143,IT
-1353282144,1353282167,GB
-1353282168,1353282183,IT
-1353282184,1353282191,GB
-1353282192,1353282215,IT
-1353282216,1353282223,GB
-1353282224,1353282247,IT
-1353282248,1353282263,GB
-1353282264,1353282295,IT
-1353282296,1353282303,GB
-1353282304,1353282559,IT
-1353282560,1353283071,GB
-1353283072,1353283327,IT
-1353283328,1353286143,GB
-1353286144,1353286255,EU
-1353286256,1353286271,GB
-1353286272,1353286303,EU
-1353286304,1353286311,GB
-1353286312,1353286397,EU
-1353286398,1353286398,GB
-1353286399,1353286399,EU
-1353286400,1353287679,GB
-1353287680,1353288031,IE
-1353288032,1353288063,GB
-1353288064,1353288067,IE
-1353288068,1353288071,GB
-1353288072,1353288151,IE
-1353288152,1353288159,GB
-1353288160,1353288167,IE
-1353288168,1353288175,GB
-1353288176,1353288831,IE
-1353288832,1353288839,GB
-1353288840,1353288847,IE
-1353288848,1353288855,GB
-1353288856,1353288879,IE
-1353288880,1353288895,GB
-1353288896,1353288991,IE
-1353288992,1353288999,GB
-1353289000,1353289023,IE
-1353289024,1353289031,NL
-1353289032,1353289039,GB
-1353289040,1353289047,IE
-1353289048,1353289087,GB
-1353289088,1353289599,IE
-1353289600,1353289615,GB
-1353289616,1353289623,IE
-1353289624,1353289631,GB
-1353289632,1353289647,IE
-1353289648,1353289663,GB
-1353289664,1353289727,IE
-1353289728,1353290919,GB
-1353290920,1353290927,FR
-1353290928,1353290943,GB
-1353290944,1353290951,FR
-1353290952,1353295471,GB
-1353295472,1353295479,IE
-1353295480,1353295511,GB
-1353295512,1353295519,DE
-1353295520,1353297151,GB
-1353297152,1353297183,IE
-1353297184,1353298687,GB
-1353298688,1353299647,SE
-1353299648,1353299839,GB
-1353299840,1353299847,SE
-1353299848,1353299871,GB
-1353299872,1353299911,SE
-1353299912,1353299927,GB
-1353299928,1353299935,SE
-1353299936,1353299967,GB
-1353299968,1353300095,SE
-1353300096,1353300103,GB
-1353300104,1353300111,SE
-1353300112,1353300119,FI
-1353300120,1353300127,SE
-1353300128,1353300175,GB
-1353300176,1353300191,SE
-1353300192,1353300239,GB
-1353300240,1353300247,SE
-1353300248,1353300279,GB
-1353300280,1353300735,SE
-1353300736,1353306111,GB
-1353306112,1353306623,ES
-1353306624,1353306687,GB
-1353306688,1353306735,BE
-1353306736,1353306751,GB
-1353306752,1353307135,BE
-1353307136,1353307143,IT
-1353307144,1353308159,GB
+1353279488,1353287959,GB
+1353287960,1353287967,IE
+1353287968,1353288191,GB
+1353288192,1353288447,IE
+1353288448,1353298687,GB
+1353298688,1353299455,SE
+1353299456,1353300079,GB
+1353300080,1353300095,SE
+1353300096,1353306695,GB
+1353306696,1353306703,BE
+1353306704,1353308159,GB
1353308160,1353309183,FR
-1353309184,1353310463,GB
-1353310464,1353310479,ES
-1353310480,1353310487,GB
-1353310488,1353310551,ES
-1353310552,1353310559,GB
-1353310560,1353310575,ES
-1353310576,1353310583,GB
-1353310584,1353310599,ES
-1353310600,1353310607,DE
-1353310608,1353310623,ES
-1353310624,1353310663,GB
-1353310664,1353310679,ES
-1353310680,1353310687,GB
-1353310688,1353310703,ES
-1353310704,1353310719,GB
-1353310720,1353310807,IT
-1353310808,1353310815,GB
-1353310816,1353311175,IT
-1353311176,1353311183,ES
-1353311184,1353311231,IT
-1353311232,1353312255,GB
-1353312256,1353312767,CH
-1353312768,1353313191,IT
-1353313192,1353313199,GB
-1353313200,1353313279,IT
-1353313280,1353313791,IE
-1353313792,1353314303,GB
-1353314304,1353314815,CH
-1353314816,1353315415,ES
-1353315416,1353315423,FR
-1353315424,1353316351,ES
-1353316352,1353317375,GB
-1353317376,1353317631,FR
-1353317632,1353318143,GB
-1353318144,1353318399,IE
+1353309184,1353312447,GB
+1353312448,1353312479,CH
+1353312480,1353313535,GB
+1353313536,1353313791,IE
+1353313792,1353315327,GB
+1353315328,1353316351,ES
+1353316352,1353318399,GB
1353318400,1353383935,SE
1353383936,1353449471,DE
1353449472,1353515007,PT
@@ -47172,87 +15743,16 @@
1354235904,1354301439,KW
1354301440,1354366975,FR
1354366976,1354432511,FI
-1354432512,1354469375,DE
-1354469376,1354469631,EU
-1354469632,1354469887,DE
-1354469888,1354471679,EU
-1354471680,1354471935,DE
-1354471936,1354472191,EU
-1354472192,1354472959,DE
-1354472960,1354473215,EU
-1354473216,1354485759,DE
-1354485760,1354487295,EU
-1354487296,1354488319,DE
-1354488320,1354488831,EU
-1354488832,1354489087,DE
-1354489088,1354489855,EU
-1354489856,1354498047,DE
+1354432512,1354498047,DE
1354498048,1354563583,CZ
1354563584,1354629119,GB
1354629120,1354658495,DE
1354658496,1354658511,AT
-1354658512,1354662191,DE
-1354662192,1354662207,CY
-1354662208,1354662943,DE
-1354662944,1354662975,AT
-1354662976,1354664759,DE
-1354664760,1354664767,IT
-1354664768,1354665215,DE
+1354658512,1354662159,DE
+1354662160,1354662167,AT
+1354662168,1354665215,DE
1354665216,1354665223,AT
-1354665224,1354666495,DE
-1354666496,1354666751,FI
-1354666752,1354668031,DE
-1354668032,1354668159,AT
-1354668160,1354674719,DE
-1354674720,1354674751,CH
-1354674752,1354674815,DE
-1354674816,1354674943,IT
-1354674944,1354675199,AE
-1354675200,1354676479,DE
-1354676480,1354676767,AE
-1354676768,1354676991,DE
-1354676992,1354677023,AE
-1354677024,1354677247,DE
-1354677248,1354677279,AE
-1354677280,1354678015,DE
-1354678016,1354678031,AE
-1354678032,1354678559,DE
-1354678560,1354678575,AE
-1354678576,1354678751,DE
-1354678752,1354678759,IT
-1354678760,1354679295,DE
-1354679296,1354679807,AE
-1354679808,1354680063,DE
-1354680064,1354680079,AE
-1354680080,1354681471,DE
-1354681472,1354681487,AE
-1354681488,1354681815,DE
-1354681816,1354681823,CH
-1354681824,1354682287,DE
-1354682288,1354682303,AE
-1354682304,1354682771,DE
-1354682772,1354682775,RS
-1354682776,1354682895,DE
-1354682896,1354682911,AE
-1354682912,1354683095,DE
-1354683096,1354683103,IT
-1354683104,1354683391,DE
-1354683392,1354684159,PL
-1354684160,1354684415,DE
-1354684416,1354684431,AE
-1354684432,1354684671,DE
-1354684672,1354684927,AE
-1354684928,1354687023,DE
-1354687024,1354687031,LU
-1354687032,1354687359,DE
-1354687360,1354687375,NZ
-1354687376,1354687383,DE
-1354687384,1354687391,NZ
-1354687392,1354687399,DE
-1354687400,1354687407,IT
-1354687408,1354687455,DE
-1354687456,1354687487,IT
-1354687488,1354694655,DE
+1354665224,1354694655,DE
1354694656,1354760191,IR
1354760192,1355022335,GB
1355022336,1355284479,DK
@@ -47263,180 +15763,52 @@
1356070912,1356201983,NO
1356201984,1356333055,FR
1356333056,1356464127,SE
-1356464128,1356595199,CH
+1356464128,1356539775,CH
+1356539776,1356539903,DE
+1356539904,1356595199,CH
1356595200,1356857343,FI
1356857344,1356922879,ES
1356922880,1356988415,GB
1356988416,1357053951,DE
-1357053952,1357091727,AE
-1357091728,1357091743,A2
-1357091744,1357119487,AE
-1357119488,1357126807,DE
-1357126808,1357126815,NL
-1357126816,1357127471,DE
-1357127472,1357127487,CH
-1357127488,1357185023,DE
+1357053952,1357119487,AE
+1357119488,1357185023,DE
1357185024,1357250559,GB
1357250560,1357316095,IL
-1357316096,1357316607,ES
-1357316608,1357317119,LU
1357317120,1357317375,GB
-1357317376,1357317631,A2
-1357317632,1357318143,LY
-1357318144,1357320191,QA
-1357320192,1357320703,FR
-1357320704,1357320959,RO
-1357320960,1357320991,ES
-1357320992,1357320999,GB
-1357321000,1357321007,FR
-1357321008,1357321015,GB
-1357321016,1357321023,DK
1357321024,1357321087,KE
-1357321088,1357321215,HK
-1357321216,1357321471,GB
-1357321472,1357321727,ES
-1357321728,1357321983,CY
1357321984,1357322239,GB
-1357322240,1357322751,DE
-1357322752,1357323263,BH
-1357323264,1357323519,ES
+1357322240,1357322255,DE
+1357322496,1357322751,DE
1357323520,1357323775,GB
-1357323776,1357324287,DE
-1357324288,1357326335,GB
-1357326336,1357326591,NL
-1357326592,1357326847,DE
-1357326848,1357327359,GB
-1357327360,1357328383,DE
-1357328384,1357330431,EU
-1357330432,1357330943,DE
-1357330944,1357331455,ES
-1357331456,1357331711,GB
-1357331712,1357331967,ES
-1357331968,1357332223,GB
-1357332224,1357332479,FR
-1357332480,1357333247,DE
-1357333248,1357333503,GB
-1357333504,1357333759,IR
-1357333760,1357333823,FR
-1357333824,1357333855,GB
-1357333856,1357334015,ES
-1357334016,1357334271,TZ
-1357334272,1357334527,CA
-1357334528,1357335039,FR
-1357335040,1357335295,GB
-1357335296,1357335551,FR
-1357335552,1357335807,GB
-1357335808,1357336063,KE
-1357336064,1357336319,GB
-1357336320,1357336575,FR
-1357336576,1357337599,NL
-1357337600,1357337855,ES
-1357337856,1357338111,SA
-1357338112,1357338879,FR
-1357338880,1357339391,NO
-1357339392,1357339647,ES
-1357339648,1357339903,DZ
-1357339904,1357340159,GB
-1357340160,1357340415,DE
-1357340416,1357342719,GB
-1357342720,1357342975,PL
+1357324288,1357325311,GB
+1357327360,1357327615,FR
+1357328384,1357328639,GB
+1357329408,1357329415,BE
+1357335808,1357336063,IT
+1357340672,1357341695,GB
1357342976,1357343231,GB
-1357343232,1357343295,EU
-1357343296,1357343311,US
-1357343312,1357343343,GB
-1357343344,1357343487,US
1357343488,1357343503,GB
-1357343504,1357343519,US
-1357343520,1357343535,FR
-1357343536,1357343711,US
-1357343712,1357343999,GB
-1357344000,1357344767,EU
-1357344768,1357346815,CA
-1357346816,1357347839,FR
+1357344260,1357344263,FR
+1357344512,1357344767,FR
+1357347456,1357347583,FR
+1357347616,1357347647,FR
1357347840,1357348095,PL
-1357348096,1357348351,EU
-1357348352,1357348607,ES
-1357348608,1357348863,EU
-1357348864,1357349119,DE
-1357349120,1357349375,LU
-1357349376,1357349887,GB
-1357349888,1357350399,ES
-1357350400,1357350911,QA
-1357350912,1357351167,GB
1357351168,1357351423,PL
-1357351424,1357352959,GB
-1357352960,1357353983,CA
-1357353984,1357354495,GB
-1357354496,1357354751,ES
-1357354752,1357355007,FR
-1357355008,1357355263,NL
-1357355264,1357355775,FR
-1357355776,1357356031,GB
-1357356032,1357356543,ES
-1357356544,1357357055,PT
-1357357056,1357357567,ES
-1357357568,1357358079,DE
-1357358080,1357358335,ES
-1357358336,1357358591,FR
-1357358592,1357358847,DE
-1357358848,1357359103,PL
-1357359104,1357359999,ES
-1357360000,1357360015,GB
-1357360016,1357360023,IT
-1357360024,1357360031,BE
-1357360032,1357360047,EU
-1357360048,1357360271,GB
-1357360272,1357360279,FR
-1357360280,1357360383,GB
-1357360384,1357360639,EU
-1357360640,1357360895,GB
-1357360896,1357361151,DE
+1357359872,1357360383,GB
1357361152,1357363199,GB
1357363200,1357364223,QA
1357364224,1357365247,ES
-1357365248,1357365759,DZ
-1357365760,1357365791,ES
-1357365792,1357365823,BH
-1357365824,1357365887,GB
-1357365888,1357366015,DE
-1357366016,1357366271,KM
-1357366272,1357366527,FR
-1357366528,1357366591,BE
-1357366592,1357366655,FR
-1357366656,1357366719,PT
-1357366720,1357366783,GB
-1357366784,1357366799,MD
-1357366800,1357366815,ES
-1357366816,1357366847,FR
-1357366848,1357366863,GB
-1357366864,1357366879,ES
-1357366880,1357366943,GB
-1357366944,1357366959,EU
+1357366784,1357366959,FR
1357366960,1357366967,BE
1357366968,1357366975,FR
-1357366976,1357367295,GB
-1357367296,1357367551,FR
-1357367552,1357368063,GB
-1357368064,1357368831,GN
-1357368832,1357369343,ES
-1357369344,1357369599,PL
-1357369600,1357369855,GB
-1357369856,1357370111,KE
-1357370112,1357370367,DE
-1357370368,1357370879,GB
-1357370880,1357371391,LY
-1357371392,1357371647,GB
-1357371648,1357371903,FR
-1357371904,1357372159,RU
+1357366976,1357367039,GB
+1357368576,1357368831,NL
1357372160,1357372927,GB
-1357372928,1357373183,AM
-1357373184,1357373439,GB
-1357373440,1357381631,EU
-1357381632,1357386143,NO
-1357386144,1357386147,DK
-1357386148,1357391615,NO
-1357391616,1357391871,SE
-1357391872,1357414399,NO
+1357373468,1357373471,GB
+1357373480,1357373483,GB
+1357373488,1357373519,GB
+1357373952,1357374463,GB
+1357381632,1357414399,NO
1357414400,1357447167,LV
1357447168,1357479935,IE
1357479936,1357512703,LV
@@ -47447,221 +15819,44 @@
1357643776,1357676543,FR
1357676544,1357709311,BE
1357709312,1357742079,RU
-1357742080,1357759079,DE
-1357759080,1357759087,AM
-1357759088,1357759183,DE
-1357759184,1357759191,AT
-1357759192,1357765823,DE
-1357765824,1357765831,AT
-1357765832,1357767056,DE
-1357767057,1357767057,DE
-1357767058,1357767239,DE
-1357767240,1357769287,DE
-1357769288,1357773111,DE
-1357773112,1357773119,PL
-1357773120,1357774847,DE
+1357742080,1357774847,DE
1357774848,1357791231,GB
1357791232,1357807615,PL
1357807616,1357840383,CH
1357840384,1357873151,NO
-1357873152,1357875199,DE
-1357875200,1357875215,AT
-1357875216,1357875247,DE
-1357875248,1357875263,US
-1357875264,1357875279,AT
-1357875280,1357875295,DE
1357875296,1357875327,IE
-1357875328,1357875423,DE
-1357875424,1357875439,GB
-1357875440,1357875711,DE
-1357875712,1357875967,PL
-1357875968,1357876143,DE
-1357876144,1357876151,SE
-1357876152,1357876223,DE
-1357876224,1357876239,NO
-1357876240,1357876255,DE
-1357876256,1357876335,EU
-1357876336,1357876339,PL
-1357876340,1357876343,RU
-1357876344,1357876351,DE
-1357876352,1357876383,EU
-1357876384,1357876391,RU
-1357876392,1357876399,PL
-1357876400,1357876407,DE
-1357876408,1357876415,GB
-1357876416,1357876447,PL
-1357876448,1357876479,EU
-1357876480,1357876495,SE
-1357876496,1357876543,EU
-1357876544,1357876735,DE
-1357876736,1357876863,EU
-1357876864,1357876927,SE
-1357876928,1357877327,DE
-1357877328,1357877335,EU
-1357877336,1357877439,DE
-1357877440,1357877503,EU
-1357877504,1357877759,DE
-1357877760,1357878271,EU
-1357878272,1357878335,CH
-1357878336,1357878399,CZ
-1357878400,1357878463,NL
-1357878464,1357878527,NO
-1357878528,1357878591,AT
-1357878592,1357878655,PL
-1357878656,1357878719,DE
-1357878720,1357878783,NL
-1357878784,1357879807,DE
-1357879808,1357879871,RU
-1357879872,1357879903,EU
-1357879904,1357879935,DE
+1357877248,1357877311,DE
+1357877376,1357877439,DE
1357879936,1357880063,GB
-1357880064,1357880319,NL
-1357880320,1357880447,DE
-1357880448,1357880511,EU
-1357880512,1357880543,DE
-1357880544,1357880559,AT
-1357880560,1357880831,DE
-1357880832,1357881087,AT
-1357881088,1357881343,DE
-1357881344,1357883647,FR
1357883648,1357883903,SE
-1357883904,1357883911,GB
-1357883912,1357883919,FR
-1357883920,1357883927,GB
-1357883928,1357883999,EU
-1357884000,1357884031,FR
-1357884032,1357884095,RU
-1357884096,1357884159,SE
-1357884160,1357884415,GB
-1357884416,1357884419,EU
-1357884420,1357884423,FR
-1357884424,1357884427,BE
-1357884428,1357884431,DE
-1357884432,1357884439,US
-1357884440,1357884447,FR
-1357884448,1357884495,EU
-1357884496,1357884511,DE
-1357884512,1357884927,FR
-1357884928,1357884935,EU
-1357884936,1357884943,GB
-1357884944,1357884959,EU
-1357884960,1357884991,RU
-1357884992,1357885055,DK
-1357885056,1357885119,FR
-1357885120,1357885183,DE
-1357885184,1357885191,EU
-1357885192,1357885199,ES
-1357885200,1357885215,EU
-1357885216,1357885247,ES
-1357885248,1357885439,DE
-1357885440,1357885695,FR
-1357885696,1357885951,DE
-1357885952,1357886079,EU
-1357886080,1357886207,DE
-1357886208,1357886463,EU
-1357886464,1357887487,US
-1357887488,1357888511,FR
-1357888512,1357889023,DE
+1357885952,1357886207,SE
1357889024,1357889279,GB
-1357889280,1357890815,EU
-1357890816,1357890831,NL
-1357890832,1357890847,EU
-1357890848,1357890879,NL
-1357890880,1357890911,EU
-1357890912,1357890943,DE
-1357890944,1357891327,NL
-1357891328,1357891391,AT
-1357891392,1357891399,NL
-1357891400,1357891423,EU
-1357891424,1357891455,DE
-1357891456,1357891647,SE
-1357891648,1357891679,NL
+1357889280,1357889535,SE
+1357891072,1357891327,NL
1357891680,1357891711,GB
-1357891712,1357891839,SE
1357891840,1357892095,GB
-1357892096,1357892111,DE
-1357892112,1357892127,ES
-1357892128,1357892143,FR
-1357892144,1357892159,IT
-1357892160,1357892175,GB
-1357892176,1357892183,AR
-1357892184,1357892191,AU
-1357892192,1357892199,BR
-1357892200,1357892207,NL
-1357892208,1357892215,SE
-1357892216,1357892223,US
-1357892224,1357892351,FR
-1357892352,1357893119,NL
-1357893120,1357893375,SE
-1357893376,1357893407,EU
-1357893408,1357893439,SE
-1357893440,1357893471,IT
-1357893472,1357893503,PL
-1357893504,1357893631,DE
-1357893632,1357894911,EU
-1357894912,1357895423,FR
-1357895424,1357895679,AE
-1357895680,1357895935,DE
-1357895936,1357896447,SE
-1357896448,1357896959,DE
-1357896960,1357897215,FR
-1357897216,1357897279,SE
-1357897280,1357897343,DK
-1357897344,1357897375,HU
-1357897376,1357897407,PL
-1357897408,1357897439,RU
-1357897440,1357897487,DE
-1357897488,1357897535,EU
-1357897536,1357897543,CZ
-1357897544,1357897551,SE
-1357897552,1357897559,GB
-1357897560,1357897855,EU
-1357897856,1357898495,DE
-1357898496,1357898751,EU
-1357898752,1357899267,DE
-1357899268,1357899275,FR
-1357899276,1357899279,NL
-1357899280,1357899295,EU
-1357899296,1357899311,DE
-1357899312,1357899327,EU
-1357899328,1357899391,GB
-1357899392,1357899519,EU
-1357899520,1357899523,GB
-1357899524,1357899527,EU
-1357899528,1357899535,BR
-1357899536,1357899543,CZ
-1357899544,1357899551,EU
-1357899552,1357899567,AT
-1357899568,1357899647,EU
+1357892608,1357892735,NL
+1357892864,1357893119,NL
+1357898752,1357898879,DE
1357899648,1357899775,GB
-1357899776,1357900287,DE
-1357900288,1357900319,EU
-1357900320,1357900327,FR
-1357900328,1357900351,GB
-1357900352,1357900415,CH
1357900416,1357900543,SE
-1357900544,1357900799,NL
-1357900800,1357901055,DE
-1357901056,1357901311,EU
-1357901312,1357901823,DE
-1357901824,1357902365,EU
+1357902336,1357902365,GB
1357902366,1357902366,NO
-1357902367,1357902847,EU
+1357902367,1357902591,GB
+1357902592,1357902847,RU
1357902848,1357903359,GB
-1357903360,1357903615,DE
-1357903616,1357904383,EU
-1357904384,1357904895,DE
1357904896,1357905407,GB
-1357905408,1357905663,SE
-1357905664,1357905919,NL
1357905920,1357910015,LT
1357910016,1357914111,GR
1357914112,1357922303,RU
1357922304,1357926399,SA
1357926400,1357930495,GB
-1357930496,1357942783,RU
+1357930496,1357938687,RU
+1357938688,1357942783,NL
1357942784,1357946879,RS
-1357946880,1357955071,PL
+1357946880,1357953023,PL
+1357953024,1357954047,US
+1357954048,1357955071,PL
1357955072,1357959167,KE
1357959168,1357963263,RU
1357963264,1357967359,AT
@@ -47671,58 +15866,35 @@
1357979648,1357983743,KZ
1357983744,1357983783,GB
1357983784,1357983791,IT
-1357983792,1357983951,GB
-1357983952,1357983959,IT
-1357983960,1357984079,GB
-1357984080,1357984087,IT
-1357984088,1357984103,GB
+1357983792,1357984103,GB
1357984104,1357984119,IT
1357984120,1357984319,GB
1357984320,1357984327,IT
-1357984328,1357984335,GB
-1357984336,1357984343,IT
-1357984344,1357984367,GB
+1357984328,1357984367,GB
1357984368,1357984375,IT
-1357984376,1357984439,GB
-1357984440,1357984447,IT
-1357984448,1357984487,GB
+1357984376,1357984487,GB
1357984488,1357984495,IT
1357984496,1357984527,GB
-1357984528,1357984567,IT
-1357984568,1357984591,GB
+1357984528,1357984551,IT
+1357984552,1357984591,GB
1357984592,1357984599,IT
1357984600,1357984671,GB
1357984672,1357984679,IT
-1357984680,1357984703,GB
-1357984704,1357984711,IT
-1357984712,1357984783,GB
-1357984784,1357984791,IT
-1357984792,1357984823,GB
+1357984680,1357984823,GB
1357984824,1357984831,IT
-1357984832,1357985015,GB
+1357984832,1357984911,GB
+1357984912,1357984919,IT
+1357984920,1357985015,GB
1357985016,1357985023,IT
-1357985024,1357985391,GB
-1357985392,1357985399,IT
-1357985400,1357985511,GB
-1357985512,1357985519,IT
-1357985520,1357985791,GB
+1357985024,1357985343,GB
+1357985344,1357985351,IT
+1357985352,1357985575,GB
+1357985576,1357985583,IT
+1357985584,1357985791,GB
1357985792,1357987839,DE
-1357987840,1357988479,GB
-1357988480,1357988483,DE
-1357988484,1357988495,GB
-1357988496,1357988543,DE
-1357988544,1357988551,NL
-1357988552,1357988559,DE
-1357988560,1357988567,GB
-1357988568,1357988607,DE
-1357988608,1357988751,GB
-1357988752,1357988775,DE
-1357988776,1357988779,GB
-1357988780,1357988783,ES
-1357988784,1357988799,DE
-1357988800,1357988831,CZ
-1357988832,1357988863,DE
-1357988864,1357991935,GB
+1357987840,1357989631,GB
+1357989632,1357989887,FR
+1357989888,1357991935,GB
1357991936,1357996031,NO
1357996032,1358000127,CH
1358000128,1358004223,LI
@@ -47736,118 +15908,58 @@
1358036992,1358041087,IR
1358041088,1358045183,FI
1358045184,1358049279,SK
-1358049280,1358061567,RU
-1358061568,1358065663,UA
+1358049280,1358062591,RU
+1358062592,1358065663,UA
1358065664,1358069759,BA
-1358069760,1358072543,DE
-1358072544,1358072575,CH
-1358072576,1358074719,DE
-1358074720,1358074751,CH
-1358074752,1358082815,DE
-1358082816,1358083071,CH
-1358083072,1358086143,DE
+1358069760,1358086143,DE
1358086144,1358090239,CH
1358090240,1358094335,KZ
1358094336,1358102527,NL
1358102528,1358106623,RU
1358106624,1358110719,LT
-1358110720,1358116895,DE
-1358116896,1358116911,IT
-1358116912,1358118911,DE
+1358110720,1358118911,DE
1358118912,1358123007,RU
1358123008,1358127103,PT
1358127104,1358131199,CZ
1358131200,1358135295,DK
1358135296,1358139391,RU
1358139392,1358143487,UA
-1358143488,1358147519,AT
-1358147520,1358147583,MT
+1358143488,1358147583,AT
1358147584,1358151679,GB
1358151680,1358155775,DE
1358155776,1358159871,CH
1358159872,1358163967,ES
-1358163968,1358166015,FR
-1358166016,1358167295,MQ
-1358167296,1358167807,FR
-1358167808,1358168063,MQ
+1358163968,1358164223,FR
+1358164224,1358164479,MQ
+1358164480,1358164991,FR
+1358164992,1358165503,MQ
+1358165504,1358166015,FR
+1358166016,1358166783,MQ
+1358166784,1358167551,FR
+1358167552,1358167807,MQ
+1358167808,1358168063,FR
1358168064,1358172159,GB
1358172160,1358176255,CY
1358176256,1358180351,RU
1358180352,1358184447,ES
-1358184448,1358187775,SE
-1358187776,1358188031,NO
-1358188032,1358192639,SE
+1358184448,1358186607,SE
+1358186608,1358186623,NO
+1358186624,1358187775,SE
+1358187776,1358187839,NO
+1358187840,1358192639,SE
1358192640,1358196735,HU
1358196736,1358200831,IT
1358200832,1358209023,PL
1358209024,1358213119,IL
1358213120,1358217215,GB
1358217216,1358221311,SE
-1358221312,1358223359,DE
-1358223360,1358223871,GB
-1358223872,1358223887,NL
-1358223888,1358223895,DE
-1358223896,1358223903,NL
-1358223904,1358223919,DE
-1358223920,1358223927,NL
-1358223928,1358223935,DE
-1358223936,1358223939,NL
-1358223940,1358223951,DE
-1358223952,1358223959,NL
-1358223960,1358223975,DE
-1358223976,1358223991,NL
-1358223992,1358223999,DE
-1358224000,1358224043,NL
-1358224044,1358224047,DE
-1358224048,1358224087,NL
-1358224088,1358224511,DE
-1358224512,1358224519,BE
-1358224520,1358224611,DE
-1358224612,1358224727,BE
-1358224728,1358224959,DE
-1358224960,1358225127,IT
-1358225128,1358225135,DE
-1358225136,1358225183,IT
-1358225184,1358225187,DE
-1358225188,1358225247,IT
-1358225248,1358225407,DE
+1358221312,1358225407,DE
1358225408,1358229503,RU
-1358229504,1358230111,DE
-1358230112,1358230115,AT
-1358230116,1358230391,DE
-1358230392,1358230399,CH
-1358230400,1358232863,DE
-1358232864,1358232867,IT
-1358232868,1358232924,DE
-1358232925,1358232925,CH
-1358232926,1358233599,DE
+1358229504,1358233599,DE
1358233600,1358237695,ES
-1358237696,1358239231,FR
-1358239232,1358239487,CH
-1358239488,1358239743,FR
-1358239744,1358239999,CH
-1358240000,1358240255,FR
-1358240256,1358240319,CH
-1358240320,1358241791,FR
-1358241792,1358241823,BE
-1358241824,1358241951,FR
-1358241952,1358241983,BE
-1358241984,1358242591,FR
-1358242592,1358242623,BE
-1358242624,1358244351,FR
-1358244352,1358244607,IT
-1358244608,1358245503,FR
-1358245504,1358245631,BE
-1358245632,1358245695,FR
-1358245696,1358245759,BE
-1358245760,1358249215,FR
-1358249216,1358249471,IT
-1358249472,1358249983,FR
-1358249984,1358251815,DE
-1358251816,1358251823,NL
-1358251824,1358254079,DE
+1358237696,1358249983,FR
+1358249984,1358254079,DE
1358254080,1358258175,MD
-1358258176,1358262271,RU
1358262272,1358266367,UA
1358266368,1358274559,DE
1358274560,1358278655,GR
@@ -47861,9 +15973,7 @@
1358307328,1358315519,DE
1358315520,1358323711,RU
1358323712,1358327807,LU
-1358327808,1358328671,DE
-1358328672,1358328727,AT
-1358328728,1358331903,DE
+1358327808,1358331903,DE
1358331904,1358335999,IL
1358336000,1358344191,FI
1358344192,1358352383,NL
@@ -47873,78 +15983,14 @@
1358364672,1358372863,GB
1358372864,1358376959,RU
1358376960,1358381055,GB
-1358381056,1358383311,IT
-1358383312,1358383327,FR
-1358383328,1358384127,IT
-1358384128,1358384143,FR
-1358384144,1358384191,IT
-1358384192,1358384199,FR
-1358384200,1358384481,IT
-1358384482,1358384482,SI
-1358384483,1358385151,IT
+1358381056,1358385151,IT
1358385152,1358389247,GB
1358389248,1358397439,RU
-1358397440,1358397743,GB
-1358397744,1358397951,A2
-1358397952,1358398463,TZ
-1358398464,1358399487,GB
-1358399488,1358399999,NG
-1358400000,1358400007,PK
-1358400008,1358400015,A2
-1358400016,1358400071,IN
-1358400072,1358400255,A2
-1358400256,1358400511,AF
-1358400512,1358400519,GA
-1358400520,1358400527,A2
-1358400528,1358400535,TZ
-1358400536,1358400543,A2
-1358400544,1358400551,GA
-1358400552,1358400575,A2
-1358400576,1358400591,KE
-1358400592,1358400639,A2
-1358400640,1358400775,KE
-1358400776,1358400783,A2
-1358400784,1358400799,KE
-1358400800,1358400831,NG
-1358400832,1358400863,A2
-1358400864,1358400895,GA
-1358400896,1358401279,NG
+1358397440,1358401279,GB
1358401280,1358401535,KE
-1358401536,1358401791,GB
-1358401792,1358402175,A2
-1358402176,1358402559,TZ
-1358402560,1358402719,GB
-1358402720,1358403103,A2
-1358403104,1358403135,ID
-1358403136,1358403151,A2
-1358403152,1358403167,ID
-1358403168,1358403183,A2
-1358403184,1358403273,ID
-1358403274,1358403327,A2
-1358403328,1358403583,NG
-1358403584,1358403591,PK
-1358403592,1358403631,A2
-1358403632,1358403679,PK
-1358403680,1358403687,A2
-1358403688,1358403711,PK
-1358403712,1358403839,A2
-1358403840,1358404095,NG
-1358404096,1358404607,A2
-1358404608,1358404611,NG
-1358404612,1358404615,TZ
-1358404616,1358404623,NG
-1358404624,1358404655,TZ
-1358404656,1358404671,NG
-1358404672,1358404695,A2
-1358404696,1358404703,TZ
-1358404704,1358404735,A2
-1358404736,1358404751,NG
-1358404752,1358404767,A2
-1358404768,1358404783,NG
-1358404784,1358404863,A2
-1358404864,1358405119,NG
-1358405120,1358405375,TZ
-1358405376,1358405631,NG
+1358401536,1358402303,GB
+1358402304,1358402559,TZ
+1358402560,1358405631,GB
1358405632,1358409727,NL
1358409728,1358413823,RU
1358413824,1358422015,NL
@@ -47961,37 +16007,10 @@
1358467072,1358471167,RU
1358471168,1358475263,FI
1358475264,1358479359,GB
-1358479360,1358479391,LI
-1358479392,1358479511,CH
-1358479512,1358479551,LI
-1358479552,1358479615,CH
+1358479360,1358479615,CH
1358479616,1358483455,LI
1358483456,1358487551,FR
-1358487552,1358487689,SE
-1358487690,1358487691,RU
-1358487692,1358487693,RO
-1358487694,1358487695,PL
-1358487696,1358487697,HU
-1358487698,1358487699,BG
-1358487700,1358487701,ES
-1358487702,1358487711,SE
-1358487712,1358487727,US
-1358487728,1358487743,FR
-1358487744,1358487775,SE
-1358487776,1358487999,FR
-1358488000,1358488191,SE
-1358488192,1358488223,GB
-1358488224,1358488239,US
-1358488240,1358488255,FR
-1358488256,1358491183,SE
-1358491184,1358491191,NO
-1358491192,1358491199,DK
-1358491200,1358491215,FI
-1358491216,1358491439,SE
-1358491440,1358491455,NO
-1358491456,1358491471,DK
-1358491472,1358491487,FI
-1358491488,1358491647,SE
+1358487552,1358491647,SE
1358491648,1358495743,FI
1358495744,1358499839,PL
1358499840,1358503935,KZ
@@ -48006,27 +16025,11 @@
1358548992,1358551039,NL
1358551040,1358553087,GB
1358553088,1358557183,UA
-1358557184,1358557375,IE
-1358557376,1358557407,GB
-1358557408,1358557903,IE
-1358557904,1358557911,GB
-1358557912,1358557951,IE
-1358557952,1358558047,GB
-1358558048,1358558143,IE
-1358558144,1358558175,GB
-1358558176,1358558807,IE
-1358558808,1358558815,GB
-1358558816,1358558831,IE
-1358558832,1358558847,GB
-1358558848,1358558975,IE
-1358558976,1358559007,GB
-1358559008,1358559039,IE
-1358559040,1358559071,GB
-1358559072,1358559551,IE
-1358559552,1358559559,GB
-1358559560,1358560415,IE
-1358560416,1358560447,GB
-1358560448,1358561279,IE
+1358557184,1358557951,GB
+1358557952,1358558207,IE
+1358558208,1358560255,GB
+1358560256,1358560511,IE
+1358560512,1358561279,GB
1358561280,1358569471,CZ
1358569472,1358573567,NG
1358573568,1358577663,LV
@@ -48039,79 +16042,26 @@
1358610432,1358614527,IR
1358614528,1358622719,RU
1358622720,1358626815,SK
-1358626816,1358627839,A2
-1358627840,1358627925,US
-1358627926,1358627926,A2
-1358627927,1358628863,US
-1358628864,1358630911,A2
-1358630912,1358635007,GB
+1358626816,1358635007,GB
1358635008,1358639103,TR
1358639104,1358643199,RU
1358643200,1358647295,ES
1358647296,1358651391,DE
1358651392,1358655487,FR
1358655488,1358667775,RU
-1358667776,1358668031,PT
-1358668032,1358668039,GB
-1358668040,1358668067,PT
-1358668068,1358668071,GB
-1358668072,1358668111,PT
-1358668112,1358668119,GB
-1358668120,1358668255,PT
-1358668256,1358668263,GB
-1358668264,1358668271,PT
-1358668272,1358668279,ES
-1358668280,1358668359,PT
-1358668360,1358668363,GB
-1358668364,1358668479,PT
-1358668480,1358668495,GB
-1358668496,1358668519,PT
-1358668520,1358668543,GB
-1358668544,1358668799,PT
-1358668800,1358668807,GB
-1358668808,1358668839,PT
-1358668840,1358668863,GB
-1358668864,1358668895,PT
-1358668896,1358668927,GB
-1358668928,1358669327,PT
-1358669328,1358669335,ES
-1358669336,1358669351,PT
-1358669352,1358669359,GB
-1358669360,1358669463,PT
-1358669464,1358669471,GB
-1358669472,1358669487,PT
-1358669488,1358669503,GB
-1358669504,1358669599,PT
-1358669600,1358669823,GB
-1358669824,1358669847,PT
-1358669848,1358669855,GB
-1358669856,1358669975,PT
-1358669976,1358669983,GB
-1358669984,1358670167,PT
-1358670168,1358670175,GB
-1358670176,1358670183,PT
-1358670184,1358670191,GB
-1358670192,1358670943,PT
+1358667776,1358668159,GB
+1358668160,1358668167,PT
+1358668168,1358668447,GB
+1358668448,1358668455,PT
+1358668456,1358670943,GB
1358670944,1358670951,FR
-1358670952,1358671023,PT
-1358671024,1358671039,GB
-1358671040,1358671839,PT
-1358671840,1358671855,ES
-1358671856,1358671871,PT
-1358671872,1358671903,GB
-1358671904,1358671967,PT
-1358671968,1358671983,GB
-1358671984,1358672479,PT
-1358672480,1358672511,GB
-1358672512,1358672687,PT
-1358672688,1358672703,GB
-1358672704,1358673535,PT
-1358673536,1358673567,US
-1358673568,1358673599,GB
-1358673600,1358673663,PT
-1358673664,1358675967,GB
-1358675968,1358677247,SE
-1358677248,1358677759,DK
+1358670952,1358670975,GB
+1358670976,1358670991,PT
+1358670992,1358671935,GB
+1358671936,1358671943,PT
+1358671944,1358675967,GB
+1358675968,1358676735,SE
+1358676736,1358677759,DK
1358677760,1358679295,SE
1358679296,1358680063,DK
1358680064,1358688255,RU
@@ -48121,46 +16071,11 @@
1358700544,1358704639,AT
1358704640,1358708735,HU
1358708736,1358712831,GB
-1358712832,1358713999,NL
-1358714000,1358714015,A2
-1358714016,1358716383,NL
-1358716384,1358716415,PL
-1358716416,1358716927,NL
+1358712832,1358716927,NL
1358716928,1358721023,DE
1358721024,1358725119,GB
1358725120,1358733311,RU
-1358733312,1358734003,SE
-1358734004,1358734007,NO
-1358734008,1358734123,SE
-1358734124,1358734127,CW
-1358734128,1358735491,SE
-1358735492,1358735495,NL
-1358735496,1358738303,SE
-1358738304,1358738307,FR
-1358738308,1358738431,SE
-1358738432,1358738447,NL
-1358738448,1358738687,SE
-1358738688,1358738691,DE
-1358738692,1358739135,SE
-1358739136,1358739151,NL
-1358739152,1358739503,SE
-1358739504,1358739519,FR
-1358739520,1358740099,SE
-1358740100,1358740103,MY
-1358740104,1358740159,SE
-1358740160,1358740175,FR
-1358740176,1358740335,SE
-1358740336,1358740351,GB
-1358740352,1358740671,SE
-1358740672,1358740675,PL
-1358740676,1358740679,BG
-1358740680,1358740683,BR
-1358740684,1358740687,TR
-1358740688,1358740883,SE
-1358740884,1358740887,NL
-1358740888,1358740927,SE
-1358740928,1358740943,DK
-1358740944,1358741503,SE
+1358733312,1358741503,SE
1358741504,1358745599,IT
1358745600,1358749695,SE
1358749696,1358753791,IT
@@ -48170,22 +16085,13 @@
1358770176,1358774271,BG
1358774272,1358778367,ES
1358778368,1358782463,CH
-1358782464,1358784015,GB
-1358784016,1358784039,NL
-1358784040,1358784063,DE
-1358784064,1358784831,GB
-1358784832,1358784863,NL
-1358784864,1358784895,DE
-1358784896,1358785087,GB
-1358785088,1358785151,NL
-1358785152,1358786559,GB
-1358786560,1358787071,NL
-1358787072,1358787327,GB
+1358782464,1358784039,GB
+1358784040,1358784047,DE
+1358784048,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
@@ -48195,178 +16101,49 @@
1358827520,1358831615,RU
1358831616,1358835711,NO
1358835712,1358839807,RU
-1358839808,1358842111,CH
-1358842112,1358842879,CH
-1358842880,1358843903,CH
+1358839808,1358843903,CH
1358843904,1358847999,MT
1358848000,1358856191,RU
1358856192,1358860287,DE
-1358860288,1358860835,GB
-1358860836,1358860836,EU
-1358860837,1358861311,GB
-1358861312,1358861567,EU
+1358860288,1358861361,GB
+1358861362,1358861363,DE
+1358861364,1358861449,GB
+1358861450,1358861450,DE
+1358861451,1358861473,GB
+1358861474,1358861474,DE
+1358861475,1358861567,GB
1358861568,1358861823,DE
1358861824,1358862335,FR
1358862336,1358862847,US
-1358862848,1358862898,DK
+1358862848,1358862898,GB
1358862899,1358862899,NO
-1358862900,1358863103,DK
-1358863104,1358863359,CH
-1358863360,1358863871,US
-1358863872,1358864383,GB
+1358862900,1358863359,GB
+1358863360,1358863615,US
+1358863616,1358863903,GB
+1358863904,1358863919,SA
+1358863920,1358864383,GB
1358864384,1358872575,CH
1358872576,1358876671,IT
1358876672,1358880767,LV
1358884864,1358888959,SE
-1358888960,1358889599,DE
-1358889600,1358889631,CH
-1358889632,1358889887,DE
-1358889888,1358889919,IR
-1358889920,1358889951,DE
-1358889952,1358889983,CH
-1358889984,1358890591,DE
-1358890592,1358890623,IT
-1358890624,1358890815,DE
-1358890816,1358890879,AR
-1358890880,1358890975,DE
-1358890976,1358891007,IT
-1358891008,1358891647,DE
-1358891648,1358891711,IT
-1358891712,1358892159,DE
-1358892160,1358892191,IR
-1358892192,1358892223,IT
-1358892224,1358893055,DE
+1358888960,1358893055,DE
1358893056,1358897151,RU
-1358897152,1358898175,A2
-1358898176,1358898239,CA
-1358898240,1358898335,A2
-1358898336,1358898351,DK
-1358898352,1358898816,A2
-1358898817,1358898943,CG
-1358898944,1358898975,A2
-1358898976,1358898991,US
-1358898992,1358899079,A2
-1358899080,1358899087,CD
-1358899088,1358899095,A2
-1358899096,1358899103,CD
-1358899104,1358899111,A2
-1358899112,1358899119,ZA
-1358899120,1358899127,A2
-1358899128,1358899135,NG
-1358899136,1358899199,A2
-1358899200,1358899207,UG
-1358899208,1358899215,LA
-1358899216,1358899239,US
-1358899240,1358899247,LK
-1358899248,1358899263,A2
-1358899264,1358899295,PK
-1358899296,1358899303,NG
-1358899304,1358899311,AE
-1358899312,1358899327,NG
-1358899328,1358899335,CD
-1358899336,1358899343,NG
-1358899344,1358899359,MR
-1358899360,1358899375,US
-1358899376,1358899383,CD
-1358899384,1358899391,UG
-1358899392,1358899407,A2
-1358899408,1358899415,DE
-1358899416,1358899423,CD
-1358899424,1358899439,A2
-1358899440,1358899455,NG
-1358899456,1358899463,A2
-1358899464,1358899471,US
-1358899472,1358899479,SV
-1358899480,1358899599,A2
-1358899600,1358899607,LK
-1358899608,1358899615,A2
-1358899616,1358899631,NG
-1358899632,1358899647,NP
-1358899648,1358899711,A2
+1358897152,1358899711,GB
1358899712,1358899967,US
1358899968,1358900223,KE
-1358900224,1358900767,A2
-1358900768,1358900783,BI
-1358900784,1358900959,A2
-1358900960,1358900975,SL
-1358900976,1358901807,A2
-1358901808,1358901815,CD
-1358901816,1358901935,A2
-1358901936,1358901951,NG
-1358901952,1358901999,A2
-1358902000,1358902039,NG
-1358902040,1358902063,A2
-1358902064,1358902079,TZ
-1358902080,1358902087,NG
-1358902088,1358902103,MG
-1358902104,1358902143,NG
-1358902144,1358902151,A2
-1358902152,1358902167,NG
-1358902168,1358902175,AU
-1358902176,1358902207,A2
-1358902208,1358902215,US
-1358902216,1358902233,NG
-1358902234,1358902263,A2
-1358902264,1358902271,ZA
-1358902272,1358903615,A2
-1358903616,1358903623,GB
-1358903624,1358903807,A2
-1358903808,1358903951,NG
-1358903952,1358903967,A2
-1358903968,1358903983,CA
-1358903984,1358903999,NG
-1358904000,1358904032,ZA
-1358904033,1358904071,A2
-1358904072,1358904095,US
-1358904096,1358904103,A2
-1358904104,1358904119,US
-1358904120,1358904127,A2
-1358904128,1358904135,US
-1358904136,1358904143,A2
-1358904144,1358904151,NG
-1358904152,1358904167,A2
-1358904168,1358904175,US
-1358904176,1358904191,A2
-1358904192,1358904199,NG
-1358904200,1358904255,US
-1358904256,1358904295,A2
-1358904296,1358904311,NG
-1358904312,1358904551,A2
-1358904552,1358904559,IL
-1358904560,1358904575,A2
-1358904576,1358904701,NG
-1358904702,1358904703,A2
+1358900224,1358904703,GB
1358904704,1358904719,MU
-1358904720,1358904735,KN
+1358904720,1358904735,GB
1358904736,1358904767,ZA
-1358904768,1358904831,NG
-1358904832,1358905095,A2
-1358905096,1358905103,GH
-1358905104,1358905111,A2
-1358905112,1358905119,TZ
-1358905120,1358905127,GY
-1358905128,1358905151,A2
-1358905152,1358905159,MG
-1358905160,1358905167,A2
+1358904768,1358905167,GB
1358905168,1358905183,CD
-1358905184,1358905215,GH
-1358905216,1358905223,US
-1358905224,1358905231,A2
-1358905232,1358905247,GN
-1358905248,1358905279,US
-1358905280,1358905295,A2
-1358905296,1358905303,LR
-1358905304,1358905311,A2
-1358905312,1358905327,US
-1358905328,1358905343,A2
+1358905184,1358905343,GB
1358905344,1358909439,UA
1358909440,1358913535,RU
1358913536,1358917631,CH
1358917632,1358921727,ES
1358921728,1358929919,RU
-1358929920,1358930700,LU
-1358930701,1358930701,EU
-1358930702,1358934015,LU
+1358929920,1358934015,LU
1358934016,1358938111,RU
1358938112,1358946303,GB
1358946304,1358950399,LV
@@ -48381,40 +16158,20 @@
1359063040,1359064063,PL
1359064064,1359101951,RU
1359101952,1359118335,GB
-1359118336,1359118591,DE
-1359118592,1359118719,NL
-1359118720,1359118815,DE
-1359118816,1359118831,NL
-1359118832,1359119199,DE
+1359118336,1359119199,DE
1359119200,1359119231,NL
1359119232,1359119359,DE
1359119360,1359120383,NL
1359120384,1359121407,DK
-1359121408,1359123583,DE
-1359123584,1359123711,SE
-1359123712,1359133311,DE
-1359133312,1359133439,AT
-1359133440,1359134303,DE
-1359134304,1359134319,NL
-1359134320,1359134719,DE
+1359121408,1359134719,DE
1359134720,1359151103,CZ
-1359151104,1359158207,DE
-1359158208,1359158215,CH
-1359158216,1359166175,DE
-1359166176,1359166191,HK
-1359166192,1359167487,DE
-1359167488,1359172095,GB
-1359172096,1359172351,EU
-1359172352,1359183871,GB
+1359151104,1359167487,DE
+1359167488,1359183871,GB
1359183872,1359200255,RU
1359200256,1359216639,AT
1359216640,1359233023,EG
1359233024,1359249407,NL
-1359249408,1359260735,CY
-1359260736,1359260751,A2
-1359260752,1359263743,CY
-1359263744,1359263999,LB
-1359264000,1359265791,CY
+1359249408,1359265791,CY
1359265792,1359282175,RU
1359282176,1359298559,IL
1359298560,1359314943,RU
@@ -48426,29 +16183,10 @@
1359396864,1359413247,GB
1359413248,1359429631,DE
1359429632,1359446015,LT
-1359446016,1359451727,DK
-1359451728,1359451731,US
-1359451732,1359455551,DK
-1359455552,1359455558,PL
-1359455559,1359462399,DK
-1359462400,1359467007,DE
-1359467008,1359467455,US
-1359467456,1359467487,CA
-1359467488,1359467495,DE
-1359467496,1359467647,US
-1359467648,1359467775,DE
-1359467776,1359467863,US
-1359467864,1359467871,DE
-1359467872,1359468287,US
-1359468288,1359468543,DE
-1359468544,1359468799,SG
-1359468800,1359468863,DE
-1359468864,1359468879,SG
-1359468880,1359468927,DE
-1359468928,1359469055,SG
-1359469056,1359469311,DE
-1359469312,1359469567,SG
-1359469568,1359470591,DE
+1359446016,1359462399,DK
+1359462400,1359467775,DE
+1359467776,1359468031,US
+1359468032,1359470591,DE
1359470592,1359478783,CH
1359478784,1359511551,TR
1359511552,1359544319,SE
@@ -48473,21 +16211,10 @@
1360019456,1360023551,FI
1360023552,1360027647,RU
1360027648,1360031743,AT
-1360031744,1360039935,RU
+1360031744,1360035839,RU
1360039936,1360044031,AT
1360044032,1360048127,SE
-1360048128,1360049167,DE
-1360049168,1360049183,GB
-1360049184,1360049199,DE
-1360049200,1360049207,SE
-1360049208,1360049215,IT
-1360049216,1360049223,ES
-1360049224,1360049231,JP
-1360049232,1360049239,US
-1360049240,1360049247,GB
-1360049248,1360050959,DE
-1360050960,1360050975,US
-1360050976,1360052223,DE
+1360048128,1360052223,DE
1360052224,1360056319,HU
1360056320,1360060415,SA
1360060416,1360064511,LT
@@ -48504,17 +16231,8 @@
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
-1360130048,1360131520,IE
-1360131521,1360131583,GB
-1360131584,1360131903,IE
-1360131904,1360131919,US
-1360131920,1360134143,IE
+1360125952,1360130047,SI
+1360130048,1360134143,IE
1360134144,1360138239,NL
1360138240,1360142335,CH
1360142336,1360146431,KZ
@@ -48529,69 +16247,28 @@
1360195584,1360199679,NL
1360199680,1360203775,CZ
1360203776,1360207871,FR
-1360207872,1360210943,CZ
-1360210944,1360211199,EU
-1360211200,1360211967,CZ
+1360207872,1360211967,CZ
1360211968,1360216063,GB
1360216064,1360224255,RU
-1360224256,1360225663,ES
-1360225664,1360225695,GB
-1360225696,1360228351,ES
+1360224256,1360228351,ES
1360228352,1360232447,FI
1360232448,1360236543,RU
-1360236544,1360239135,AT
-1360239136,1360239167,DE
-1360239168,1360240639,AT
-1360240640,1360244735,ES
-1360244736,1360249855,GB
-1360249856,1360250111,CH
-1360250112,1360251391,GB
-1360251392,1360251647,DE
-1360251648,1360252415,GB
-1360252416,1360252671,CH
-1360252672,1360257023,GB
-1360257024,1360259447,DK
-1360259448,1360259451,US
-1360259452,1360265215,DK
-1360265216,1360265503,NL
-1360265504,1360265511,DE
-1360265512,1360265983,NL
-1360265984,1360265991,PT
-1360265992,1360266567,GB
-1360266568,1360266575,RU
-1360266576,1360266759,GB
-1360266760,1360266767,FR
-1360266768,1360266791,GB
-1360266792,1360266815,ES
-1360266816,1360266847,GB
-1360266848,1360266863,BE
-1360266864,1360266871,FR
-1360266872,1360266879,ES
-1360266880,1360266991,GB
-1360266992,1360266999,BE
-1360267000,1360267007,GB
-1360267008,1360268031,SE
-1360268032,1360268199,FR
-1360268200,1360268207,ES
-1360268208,1360268287,FR
-1360268288,1360269311,GB
+1360236544,1360240639,AT
+1360240640,1360242431,ES
+1360242432,1360244479,US
+1360244480,1360244735,ES
+1360244736,1360257023,GB
+1360257024,1360265215,DK
+1360265216,1360269311,GB
1360269312,1360273407,KG
1360273408,1360281599,GB
1360281600,1360281727,NL
1360281728,1360281855,ES
-1360281856,1360282111,NL
-1360282112,1360282239,ES
-1360282240,1360282495,NL
+1360281856,1360282495,NL
1360282496,1360282623,DE
-1360282624,1360282751,NL
-1360282752,1360282787,GB
-1360282788,1360283519,NL
-1360283520,1360283535,BE
-1360283536,1360285183,NL
-1360285184,1360285335,ES
-1360285336,1360285343,NL
-1360285344,1360285375,ES
-1360285376,1360285695,NL
+1360282624,1360284671,NL
+1360284672,1360284927,DK
+1360284928,1360285695,NL
1360285696,1360289791,DE
1360289792,1360293887,RU
1360293888,1360302079,DE
@@ -48606,9 +16283,7 @@
1360334848,1360338943,IT
1360338944,1360343039,CY
1360343040,1360347135,SA
-1360347136,1360347903,GB
-1360347904,1360348159,ES
-1360348160,1360351231,GB
+1360347136,1360351231,GB
1360351232,1360355327,AZ
1360355328,1360359423,EG
1360359424,1360363519,AT
@@ -48623,11 +16298,7 @@
1360392192,1360396287,EE
1360396288,1360400383,RU
1360400384,1360404479,BH
-1360404480,1360404735,GB
-1360404736,1360404991,DE
-1360404992,1360405247,FR
-1360405248,1360405503,SE
-1360405504,1360408575,GB
+1360404480,1360408575,GB
1360408576,1360412671,RU
1360412672,1360420863,DZ
1360420864,1360424959,TR
@@ -48670,35 +16341,18 @@
1360592896,1360596991,RU
1360596992,1360601087,CZ
1360601088,1360605183,BY
-1360605184,1360613375,RU
+1360605184,1360609279,RU
1360613376,1360617471,SE
1360617472,1360621567,IT
1360621568,1360625663,ES
-1360625664,1360625919,A2
-1360625920,1360626943,DE
-1360626944,1360627199,LB
-1360627200,1360627455,A2
-1360627456,1360627520,IQ
-1360627521,1360627711,DE
-1360627712,1360627743,LB
-1360627744,1360627967,DE
-1360627968,1360628095,IQ
-1360628096,1360628223,LU
-1360628224,1360628479,A2
-1360628480,1360628735,LB
-1360628736,1360628991,IQ
-1360628992,1360629055,TR
-1360629056,1360629247,DE
-1360629248,1360629503,A2
-1360629504,1360629759,IQ
+1360625664,1360629759,DE
1360629760,1360633855,SE
1360633856,1360637951,RU
1360637952,1360642047,FO
1360642048,1360644735,FR
1360644736,1360644863,IT
-1360644864,1360645711,FR
-1360645712,1360645719,GB
-1360645720,1360646143,FR
+1360644864,1360645887,FR
+1360645888,1360646143,GB
1360646144,1360650239,AT
1360650240,1360654335,UA
1360654336,1360658431,EE
@@ -48717,9 +16371,7 @@
1360728064,1360732159,FR
1360732160,1360736255,NO
1360736256,1360740351,RU
-1360740352,1360743679,GB
-1360743680,1360743935,FR
-1360743936,1360748677,GB
+1360740352,1360748677,GB
1360748678,1360748678,IM
1360748679,1360749759,GB
1360749760,1360749791,IM
@@ -48730,9 +16382,7 @@
1360764928,1360769023,DE
1360769024,1360773119,IT
1360773120,1360777215,CZ
-1360777216,1360778559,DK
-1360778560,1360778631,DE
-1360778632,1360781311,DK
+1360777216,1360781311,DK
1360781312,1360785407,DE
1360785408,1360793599,RU
1360793600,1360797695,CZ
@@ -48744,44 +16394,19 @@
1360822272,1360826367,AT
1360826368,1360830463,GB
1360830464,1360838655,RU
-1360838656,1360839167,CH
-1360839168,1360842751,FR
+1360838656,1360842751,FR
1360842752,1360846847,RU
1360846848,1360850943,DE
-1360850944,1360855039,IT
1360855040,1360859135,NL
1360859136,1360863231,LT
1360863232,1360867327,NO
1360867328,1360879615,GB
1360879616,1360883711,EG
1360883712,1360887807,RU
-1360887808,1360890367,FI
-1360890368,1360890623,RU
-1360890624,1360890879,FI
-1360890880,1360891391,RU
-1360891392,1360891647,FI
-1360891648,1360891903,RU
-1360891904,1360892791,CH
-1360892792,1360892799,IT
-1360892800,1360892831,CH
-1360892832,1360892847,MD
-1360892848,1360894335,CH
-1360894336,1360894367,MD
-1360894368,1360894975,CH
-1360894976,1360894983,IT
-1360894984,1360895999,CH
+1360887808,1360891903,FI
+1360891904,1360895999,CH
1360896000,1360900095,QA
-1360900096,1360905391,IT
-1360905392,1360905407,GB
-1360905408,1360906687,IT
-1360906688,1360906719,GB
-1360906720,1360909391,IT
-1360909392,1360909407,GB
-1360909408,1360910495,IT
-1360910496,1360910511,GB
-1360910512,1360910527,IT
-1360910528,1360910559,GB
-1360910560,1360916479,IT
+1360900096,1360916479,IT
1360916480,1360920575,IR
1360920576,1360928767,IT
1360928768,1360932863,NL
@@ -48795,1064 +16420,84 @@
1360961536,1360965631,UA
1360965632,1360977919,RU
1360977920,1360986111,CZ
-1360986112,1360987935,GB
-1360987936,1360987983,SK
-1360987984,1360990207,GB
-1360990208,1360990463,CZ
-1360990464,1360994303,GB
+1360986112,1360994303,GB
1360994304,1360998399,CZ
1360998400,1361002495,FI
-1361002496,1361003776,GB
-1361003777,1361003807,GN
-1361003808,1361006591,GB
+1361002496,1361006591,GB
1361006592,1361010687,DK
1361010688,1361018879,GB
1361018880,1361022975,AT
1361022976,1361027071,IT
1361027072,1361035263,IR
-1361035264,1361035527,NL
-1361035528,1361035535,IT
-1361035536,1361035543,IQ
-1361035544,1361035547,ES
-1361035548,1361035551,DE
-1361035552,1361035555,IQ
-1361035556,1361035559,NL
-1361035560,1361035563,IQ
-1361035564,1361035567,DE
-1361035568,1361035575,ES
-1361035576,1361035583,DE
-1361035584,1361035587,IT
-1361035588,1361035599,IQ
-1361035600,1361035607,NL
-1361035608,1361035615,IT
-1361035616,1361035619,GB
-1361035620,1361035623,IT
-1361035624,1361035627,DE
+1361035264,1361035627,NL
1361035628,1361035631,DZ
-1361035632,1361035635,IT
-1361035636,1361035655,IQ
-1361035656,1361035663,TR
-1361035664,1361035671,IQ
-1361035672,1361035675,IT
-1361035676,1361035679,IQ
-1361035680,1361035683,IE
-1361035684,1361035687,IQ
-1361035688,1361035691,GB
-1361035692,1361035695,IQ
-1361035696,1361035703,NL
-1361035704,1361035715,IQ
-1361035716,1361035723,GB
-1361035724,1361035727,IQ
-1361035728,1361035735,NL
-1361035736,1361035739,IQ
-1361035740,1361035743,IT
-1361035744,1361035751,IQ
-1361035752,1361035755,GB
-1361035756,1361035759,IQ
-1361035760,1361035763,ES
-1361035764,1361035767,NL
-1361035768,1361035775,IQ
-1361035776,1361035779,GB
-1361035780,1361035783,PL
-1361035784,1361035799,IQ
-1361035800,1361035807,TR
-1361035808,1361035811,NL
-1361035812,1361035815,BA
-1361035816,1361035823,NL
-1361035824,1361035831,DE
-1361035832,1361035839,BE
-1361035840,1361035847,ES
-1361035848,1361035851,GB
-1361035852,1361035855,IQ
-1361035856,1361035863,ES
-1361035864,1361035871,BE
-1361035872,1361035875,GB
-1361035876,1361035879,NL
-1361035880,1361035899,IQ
-1361035900,1361035903,NL
-1361035904,1361035907,KW
-1361035908,1361035911,ES
-1361035912,1361035915,IQ
-1361035916,1361035919,IT
-1361035920,1361035923,CH
-1361035924,1361035927,IQ
-1361035928,1361035931,DE
-1361035932,1361035935,TR
-1361035936,1361035943,GB
-1361035944,1361035959,IQ
-1361035960,1361035963,GB
-1361035964,1361035967,CH
-1361035968,1361035975,GB
-1361035976,1361035979,NL
-1361035980,1361035983,IQ
-1361035984,1361035995,DE
-1361035996,1361035999,IE
-1361036000,1361036015,GB
-1361036016,1361036019,IQ
-1361036020,1361036023,NL
-1361036024,1361036031,IQ
-1361036032,1361036039,IE
-1361036040,1361036043,IT
-1361036044,1361036055,IQ
-1361036056,1361036063,NL
-1361036064,1361036071,DE
-1361036072,1361036079,BE
-1361036080,1361036087,FR
-1361036088,1361036095,IT
-1361036096,1361036103,IQ
-1361036104,1361036111,NO
-1361036112,1361036119,RO
-1361036120,1361036127,HU
-1361036128,1361036135,CZ
-1361036136,1361036143,IQ
-1361036144,1361036151,TR
-1361036152,1361036167,ES
-1361036168,1361036175,IQ
-1361036176,1361036191,GB
-1361036192,1361036199,IQ
-1361036200,1361036207,TR
-1361036208,1361036215,IQ
-1361036216,1361036223,DE
-1361036224,1361036239,IQ
-1361036240,1361036243,NL
-1361036244,1361036247,IT
-1361036248,1361036251,TN
-1361036252,1361036255,NL
-1361036256,1361036259,GB
-1361036260,1361036287,IQ
-1361036288,1361036295,IT
-1361036296,1361036299,IQ
-1361036300,1361036303,GB
-1361036304,1361036307,ES
-1361036308,1361036311,NL
-1361036312,1361036315,IQ
-1361036316,1361036319,DZ
-1361036320,1361036327,IQ
-1361036328,1361036331,DZ
-1361036332,1361036335,IT
-1361036336,1361036359,IQ
-1361036360,1361036367,DZ
-1361036368,1361036371,TR
-1361036372,1361036375,GB
-1361036376,1361036379,NL
-1361036380,1361036383,GB
-1361036384,1361036387,DZ
-1361036388,1361036403,IQ
-1361036404,1361036411,IT
-1361036412,1361036415,NL
-1361036416,1361036419,US
-1361036420,1361036423,ES
-1361036424,1361036431,GB
-1361036432,1361036435,EG
-1361036436,1361036459,IQ
-1361036460,1361036471,TR
-1361036472,1361036475,GB
-1361036476,1361036491,IQ
-1361036492,1361036495,GB
-1361036496,1361036515,IQ
-1361036516,1361036519,IT
-1361036520,1361036523,GB
-1361036524,1361036527,IQ
-1361036528,1361036531,IT
-1361036532,1361036535,IQ
-1361036536,1361036551,TR
-1361036552,1361036559,GB
-1361036560,1361036567,IQ
-1361036568,1361036575,NL
-1361036576,1361036579,IQ
-1361036580,1361036583,IT
-1361036584,1361036595,IQ
-1361036596,1361036599,GI
-1361036600,1361036607,IQ
-1361036608,1361036611,GI
-1361036612,1361036615,NL
-1361036616,1361036623,GB
-1361036624,1361036631,IQ
-1361036632,1361036635,GR
-1361036636,1361036639,GB
-1361036640,1361036655,IQ
-1361036656,1361036663,NL
-1361036664,1361036667,DZ
-1361036668,1361036671,CH
-1361036672,1361036675,TR
-1361036676,1361036679,NL
-1361036680,1361036687,IQ
-1361036688,1361036695,NL
-1361036696,1361036703,TR
-1361036704,1361036711,IQ
-1361036712,1361036719,GB
-1361036720,1361036727,IQ
-1361036728,1361036735,US
-1361036736,1361036763,IQ
-1361036764,1361036767,KW
-1361036768,1361036783,US
-1361036784,1361036787,GB
-1361036788,1361036791,IQ
-1361036792,1361036799,NL
-1361036800,1361036823,IQ
-1361036824,1361036827,GB
-1361036828,1361036831,DZ
-1361036832,1361036839,NL
-1361036840,1361036847,IQ
-1361036848,1361036851,DZ
-1361036852,1361036855,IQ
-1361036856,1361036863,NL
-1361036864,1361036867,IQ
-1361036868,1361036871,DE
-1361036872,1361036879,TR
-1361036880,1361036887,US
-1361036888,1361036891,GB
-1361036892,1361036899,NL
-1361036900,1361036919,IQ
-1361036920,1361036923,IT
-1361036924,1361036927,DZ
-1361036928,1361036935,TR
-1361036936,1361036943,NL
-1361036944,1361036991,IQ
-1361036992,1361037007,TR
-1361037008,1361037067,IQ
-1361037068,1361037075,TR
-1361037076,1361037079,HU
-1361037080,1361037087,IQ
-1361037088,1361037091,AF
-1361037092,1361037095,IQ
-1361037096,1361037099,IT
-1361037100,1361037103,TR
-1361037104,1361037111,NL
-1361037112,1361037115,US
-1361037116,1361037119,NL
-1361037120,1361037123,US
-1361037124,1361037127,IQ
-1361037128,1361037143,NL
-1361037144,1361037151,IQ
-1361037152,1361037159,US
-1361037160,1361037171,IQ
-1361037172,1361037175,TR
-1361037176,1361037179,IQ
-1361037180,1361037183,GB
-1361037184,1361037203,IQ
-1361037204,1361037207,FR
-1361037208,1361037215,DE
-1361037216,1361037255,IQ
-1361037256,1361037263,NL
-1361037264,1361037271,IQ
-1361037272,1361037279,NL
-1361037280,1361037295,IQ
-1361037296,1361037311,DZ
-1361037312,1361037319,IQ
-1361037320,1361037327,GB
-1361037328,1361037351,IQ
-1361037352,1361037359,NL
-1361037360,1361037367,IQ
-1361037368,1361037375,TR
-1361037376,1361037391,IQ
-1361037392,1361037395,IT
-1361037396,1361037399,US
-1361037400,1361037407,DZ
-1361037408,1361037415,TR
-1361037416,1361037439,IQ
-1361037440,1361037447,TR
-1361037448,1361037455,IQ
-1361037456,1361037463,DZ
-1361037464,1361037471,CH
-1361037472,1361037479,NL
-1361037480,1361037487,DZ
-1361037488,1361037503,IQ
-1361037504,1361037511,DE
-1361037512,1361037527,IQ
-1361037528,1361037531,NL
-1361037532,1361037535,DZ
-1361037536,1361037551,TR
-1361037552,1361037567,IQ
-1361037568,1361037575,TR
-1361037576,1361037583,IQ
-1361037584,1361037587,GB
-1361037588,1361037591,NL
-1361037592,1361037607,IQ
-1361037608,1361037611,NL
-1361037612,1361037615,ES
-1361037616,1361037619,NL
-1361037620,1361037627,ES
-1361037628,1361037631,IT
-1361037632,1361037639,DZ
-1361037640,1361037667,IQ
-1361037668,1361037671,DZ
-1361037672,1361037679,TR
-1361037680,1361037683,IQ
-1361037684,1361037687,TR
-1361037688,1361037695,IQ
-1361037696,1361037703,TR
-1361037704,1361037771,IQ
-1361037772,1361037775,GB
-1361037776,1361037783,NL
-1361037784,1361037819,IQ
-1361037820,1361037823,NL
-1361037824,1361037835,IQ
-1361037836,1361037839,ES
-1361037840,1361037847,IQ
-1361037848,1361037851,NL
-1361037852,1361037855,ES
-1361037856,1361037871,IQ
-1361037872,1361037875,ES
-1361037876,1361037879,NL
-1361037880,1361037883,PT
-1361037884,1361037891,IQ
-1361037892,1361037895,ES
-1361037896,1361037899,NL
-1361037900,1361037903,IQ
-1361037904,1361037907,NL
-1361037908,1361037911,US
-1361037912,1361037919,NL
-1361037920,1361037999,IQ
-1361038000,1361038015,NL
-1361038016,1361038023,IQ
-1361038024,1361038031,IT
-1361038032,1361038039,IQ
-1361038040,1361038047,US
-1361038048,1361038055,IQ
-1361038056,1361038071,NL
-1361038072,1361038087,IQ
-1361038088,1361038095,NL
-1361038096,1361038103,US
-1361038104,1361038119,IQ
-1361038120,1361038127,NL
-1361038128,1361038135,MA
-1361038136,1361038143,IQ
-1361038144,1361038147,NL
-1361038148,1361038159,GB
-1361038160,1361038163,NL
-1361038164,1361038175,GB
-1361038176,1361038179,NL
-1361038180,1361038191,GB
-1361038192,1361038195,NL
-1361038196,1361038199,IQ
-1361038200,1361038211,GB
-1361038212,1361038215,NL
-1361038216,1361038223,GB
-1361038224,1361038231,IQ
-1361038232,1361038239,DE
-1361038240,1361038247,IQ
-1361038248,1361038271,US
-1361038272,1361038275,GB
-1361038276,1361038279,NL
-1361038280,1361038287,GB
-1361038288,1361038295,NL
-1361038296,1361038303,DE
-1361038304,1361038311,IQ
-1361038312,1361038319,NL
-1361038320,1361038335,US
-1361038336,1361039359,NL
+1361035632,1361039359,NL
1361039360,1361041407,IE
1361041408,1361042431,NL
1361042432,1361043455,PL
1361043456,1361051647,IR
1361051648,1362100223,ES
-1362100224,1362395135,FR
-1362395136,1362395183,CH
-1362395184,1362395391,FR
-1362395392,1362395519,SG
-1362395520,1362395647,FR
+1362100224,1362395647,FR
1362395648,1362396159,US
1362396160,1362396415,FR
1362396416,1362396927,US
-1362396928,1362397183,CM
-1362397184,1362397255,GB
-1362397256,1362397439,FR
+1362396928,1362397439,FR
1362397440,1362397503,US
1362397504,1362398463,FR
1362398464,1362398719,DE
1362398720,1362403583,FR
-1362403584,1362405887,DZ
+1362403584,1362404351,DZ
+1362404352,1362404607,FR
+1362404608,1362405887,DZ
1362405888,1362406143,FR
1362406144,1362407167,SV
-1362407168,1362407423,FR
-1362407424,1362407431,US
-1362407432,1362407439,FR
-1362407440,1362407447,US
-1362407448,1362407455,FR
-1362407456,1362407519,US
-1362407520,1362407615,FR
-1362407616,1362407647,HK
-1362407648,1362407679,FR
-1362407680,1362407743,US
-1362407744,1362407839,FR
-1362407840,1362407871,US
-1362407872,1362407887,HK
-1362407888,1362407903,US
-1362407904,1362407919,HK
-1362407920,1362407935,US
-1362407936,1362409727,FR
-1362409728,1362409983,HK
-1362409984,1362411519,FR
+1362407168,1362411519,FR
1362411520,1362413273,MQ
-1362413274,1362413567,FR
-1362413568,1362413587,CM
-1362413588,1362414079,FR
+1362413274,1362414079,FR
1362414080,1362414847,US
1362414848,1362415103,GB
1362415104,1362415359,FR
1362415360,1362415615,DE
1362415616,1362417663,GP
1362417664,1362419711,SG
-1362419712,1362423039,FR
-1362423040,1362423167,SG
-1362423168,1362423231,FR
-1362423232,1362423239,GB
-1362423240,1362423263,FR
-1362423264,1362423295,SG
-1362423296,1362423807,VE
+1362419712,1362423807,FR
1362423808,1362425855,SG
1362425856,1362426623,US
1362426624,1362426879,FR
-1362426880,1362427903,MQ
-1362427904,1362755583,FR
-1362755584,1362759695,NL
-1362759696,1362759703,BE
-1362759704,1362759711,NL
-1362759712,1362759727,BE
-1362759728,1362759735,NL
-1362759736,1362759767,BE
-1362759768,1362759775,NL
-1362759776,1362759791,BE
-1362759792,1362759815,NL
-1362759816,1362759847,BE
-1362759848,1362759863,NL
-1362759864,1362759879,BE
-1362759880,1362759895,NL
-1362759896,1362759903,BE
-1362759904,1362759919,NL
-1362759920,1362759927,BE
-1362759928,1362759943,NL
-1362759944,1362759967,BE
-1362759968,1362759983,NL
-1362759984,1362759999,BE
-1362760000,1362760007,NL
-1362760008,1362760031,BE
-1362760032,1362760039,NL
-1362760040,1362760047,BE
-1362760048,1362760055,NL
-1362760056,1362760087,BE
-1362760088,1362760111,NL
-1362760112,1362760119,BE
-1362760120,1362760167,NL
-1362760168,1362760191,BE
-1362760192,1362760215,NL
-1362760216,1362760223,BE
-1362760224,1362760239,NL
-1362760240,1362760271,BE
-1362760272,1362760279,NL
-1362760280,1362760287,BE
-1362760288,1362760303,NL
-1362760304,1362760351,BE
-1362760352,1362760375,NL
-1362760376,1362760383,BE
-1362760384,1362760391,NL
-1362760392,1362760399,BE
-1362760400,1362760423,NL
-1362760424,1362760439,BE
-1362760440,1362760447,NL
-1362760448,1362760455,BE
-1362760456,1362760471,NL
-1362760472,1362760479,BE
-1362760480,1362760503,NL
-1362760504,1362760511,BE
-1362760512,1362760519,NL
-1362760520,1362760535,BE
-1362760536,1362760559,NL
-1362760560,1362760567,BE
-1362760568,1362760575,NL
-1362760576,1362760591,BE
-1362760592,1362760615,NL
-1362760616,1362760639,BE
-1362760640,1362760647,NL
-1362760648,1362760663,BE
-1362760664,1362760671,NL
-1362760672,1362760679,BE
-1362760680,1362760687,NL
-1362760688,1362760703,BE
-1362760704,1362760711,NL
-1362760712,1362760719,BE
-1362760720,1362760735,NL
-1362760736,1362760751,BE
-1362760752,1362760783,NL
-1362760784,1362760815,BE
-1362760816,1362760831,NL
-1362760832,1362760839,BE
-1362760840,1362760863,NL
-1362760864,1362760879,BE
-1362760880,1362760887,NL
-1362760888,1362760903,BE
-1362760904,1362760919,NL
-1362760920,1362760927,BE
-1362760928,1362760967,NL
-1362760968,1362760983,BE
-1362760984,1362761007,NL
-1362761008,1362761023,BE
-1362761024,1362761031,NL
-1362761032,1362761063,BE
-1362761064,1362761103,NL
-1362761104,1362761111,BE
-1362761112,1362761119,NL
-1362761120,1362761127,BE
-1362761128,1362761159,NL
-1362761160,1362761167,BE
-1362761168,1362761175,NL
-1362761176,1362761199,BE
-1362761200,1362761207,NL
-1362761208,1362761215,BE
-1362761216,1362761247,NL
-1362761248,1362761255,BE
-1362761256,1362761279,NL
-1362761280,1362761287,BE
-1362761288,1362761303,NL
-1362761304,1362761311,BE
-1362761312,1362761319,NL
-1362761320,1362761327,BE
-1362761328,1362761407,NL
-1362761408,1362761415,BE
-1362761416,1362761463,NL
-1362761464,1362761471,BE
-1362761472,1362761495,NL
-1362761496,1362761503,BE
-1362761504,1362761519,NL
-1362761520,1362761535,BE
-1362761536,1362761559,NL
-1362761560,1362761567,BE
-1362761568,1362761583,NL
-1362761584,1362761591,BE
-1362761592,1362761607,NL
-1362761608,1362761623,BE
-1362761624,1362761631,NL
-1362761632,1362761647,BE
-1362761648,1362761663,NL
-1362761664,1362761679,BE
-1362761680,1362761687,NL
-1362761688,1362761695,BE
-1362761696,1362761719,NL
-1362761720,1362761727,BE
-1362761728,1362761743,NL
-1362761744,1362761767,BE
-1362761768,1362761879,NL
-1362761880,1362761895,BE
-1362761896,1362761959,NL
-1362761960,1362761967,BE
-1362761968,1362761983,NL
-1362761984,1362761999,BE
-1362762000,1362762007,NL
-1362762008,1362762015,BE
-1362762016,1362762031,NL
-1362762032,1362762039,BE
-1362762040,1362762047,NL
-1362762048,1362762063,BE
-1362762064,1362762071,NL
-1362762072,1362762079,BE
-1362762080,1362762095,NL
-1362762096,1362762127,BE
-1362762128,1362762135,NL
-1362762136,1362762143,BE
-1362762144,1362762151,NL
-1362762152,1362762175,BE
-1362762176,1362762183,NL
-1362762184,1362762199,BE
-1362762200,1362762207,NL
-1362762208,1362762215,BE
-1362762216,1362762231,NL
-1362762232,1362762255,BE
-1362762256,1362762263,NL
-1362762264,1362762271,BE
-1362762272,1362762279,NL
-1362762280,1362762287,BE
-1362762288,1362762335,NL
-1362762336,1362762343,BE
-1362762344,1362762351,NL
-1362762352,1362762367,BE
-1362762368,1362762423,NL
-1362762424,1362762439,BE
-1362762440,1362762447,NL
-1362762448,1362762455,BE
-1362762456,1362762495,NL
-1362762496,1362762527,BE
-1362762528,1362762535,NL
-1362762536,1362762567,BE
-1362762568,1362762583,NL
-1362762584,1362762599,BE
-1362762600,1362762647,NL
-1362762648,1362762655,BE
-1362762656,1362762719,NL
-1362762720,1362762727,BE
-1362762728,1362762791,NL
-1362762792,1362762807,BE
-1362762808,1362762863,NL
-1362762864,1362762879,BE
-1362762880,1362762903,NL
-1362762904,1362762911,BE
-1362762912,1362762951,NL
-1362762952,1362762983,BE
-1362762984,1362762991,NL
-1362762992,1362763031,BE
-1362763032,1362763047,NL
-1362763048,1362763055,BE
-1362763056,1362763079,NL
-1362763080,1362763087,BE
-1362763088,1362763103,NL
-1362763104,1362763119,BE
-1362763120,1362763143,NL
-1362763144,1362763151,BE
-1362763152,1362763159,NL
-1362763160,1362763175,BE
-1362763176,1362763183,NL
-1362763184,1362763191,BE
-1362763192,1362763223,NL
-1362763224,1362763231,BE
-1362763232,1362763287,NL
-1362763288,1362763295,BE
-1362763296,1362763303,NL
-1362763304,1362763311,BE
-1362763312,1362763335,NL
-1362763336,1362763343,BE
-1362763344,1362763367,NL
-1362763368,1362763375,BE
-1362763376,1362763383,NL
-1362763384,1362763415,BE
-1362763416,1362763423,NL
-1362763424,1362763439,BE
-1362763440,1362763455,NL
-1362763456,1362763463,BE
-1362763464,1362763471,NL
-1362763472,1362763479,BE
-1362763480,1362763503,NL
-1362763504,1362763519,BE
-1362763520,1362763535,NL
-1362763536,1362763543,BE
-1362763544,1362763599,NL
-1362763600,1362763615,BE
-1362763616,1362763623,NL
-1362763624,1362763631,BE
-1362763632,1362763679,NL
-1362763680,1362763687,BE
-1362763688,1362763695,NL
-1362763696,1362763703,BE
-1362763704,1362763735,NL
-1362763736,1362763751,BE
-1362763752,1362763767,NL
-1362763768,1362763791,BE
-1362763792,1362763799,NL
-1362763800,1362763815,BE
-1362763816,1362763903,NL
-1362763904,1362763927,BE
-1362763928,1362763967,NL
-1362763968,1362763975,BE
-1362763976,1362763991,NL
-1362763992,1362763999,BE
-1362764000,1362764023,NL
-1362764024,1362764031,BE
-1362764032,1362764039,NL
-1362764040,1362764047,BE
-1362764048,1362764063,NL
-1362764064,1362764087,BE
-1362764088,1362764103,NL
-1362764104,1362764111,BE
-1362764112,1362764135,NL
-1362764136,1362764143,BE
-1362764144,1362764159,NL
-1362764160,1362764167,BE
-1362764168,1362764175,NL
-1362764176,1362764183,BE
-1362764184,1362764199,NL
-1362764200,1362764207,BE
-1362764208,1362764239,NL
-1362764240,1362764247,BE
-1362764248,1362764255,NL
-1362764256,1362764263,BE
-1362764264,1362764311,NL
-1362764312,1362764327,BE
-1362764328,1362764335,NL
-1362764336,1362764351,BE
-1362764352,1362764367,NL
-1362764368,1362764375,BE
-1362764376,1362764383,NL
-1362764384,1362764391,BE
-1362764392,1362764407,NL
-1362764408,1362764415,BE
-1362764416,1362764431,NL
-1362764432,1362764439,BE
-1362764440,1362764495,NL
-1362764496,1362764527,BE
-1362764528,1362764535,NL
-1362764536,1362764543,BE
-1362764544,1362764551,NL
-1362764552,1362764559,BE
-1362764560,1362764567,NL
-1362764568,1362764575,BE
-1362764576,1362764607,NL
-1362764608,1362764615,BE
-1362764616,1362764623,NL
-1362764624,1362764639,BE
-1362764640,1362764655,NL
-1362764656,1362764679,BE
-1362764680,1362764695,NL
-1362764696,1362764703,BE
-1362764704,1362764711,NL
-1362764712,1362764735,BE
-1362764736,1362764743,NL
-1362764744,1362764751,BE
-1362764752,1362764759,NL
-1362764760,1362764775,BE
-1362764776,1362764791,NL
-1362764792,1362764807,BE
-1362764808,1362764823,NL
-1362764824,1362764831,BE
-1362764832,1362764847,NL
-1362764848,1362764855,BE
-1362764856,1362764871,NL
-1362764872,1362764887,BE
-1362764888,1362764895,NL
-1362764896,1362764911,BE
-1362764912,1362764927,NL
-1362764928,1362764935,BE
-1362764936,1362764975,NL
-1362764976,1362764991,BE
-1362764992,1362764999,NL
-1362765000,1362765015,BE
-1362765016,1362765023,NL
-1362765024,1362765047,BE
-1362765048,1362765063,NL
-1362765064,1362765071,BE
-1362765072,1362765079,NL
-1362765080,1362765087,BE
-1362765088,1362765095,NL
-1362765096,1362765127,BE
-1362765128,1362765135,NL
-1362765136,1362765151,BE
-1362765152,1362765175,NL
-1362765176,1362765191,BE
-1362765192,1362765199,NL
-1362765200,1362765215,BE
-1362765216,1362765239,NL
-1362765240,1362765247,BE
-1362765248,1362765255,NL
-1362765256,1362765263,BE
-1362765264,1362765311,NL
-1362765312,1362765319,BE
-1362765320,1362765327,NL
-1362765328,1362765343,BE
-1362765344,1362765375,NL
-1362765376,1362765407,BE
-1362765408,1362765415,NL
-1362765416,1362765431,BE
-1362765432,1362765447,NL
-1362765448,1362765455,BE
-1362765456,1362765463,NL
-1362765464,1362765471,BE
-1362765472,1362765495,NL
-1362765496,1362765511,BE
-1362765512,1362765519,NL
-1362765520,1362765535,BE
-1362765536,1362765551,NL
-1362765552,1362765559,BE
-1362765560,1362765575,NL
-1362765576,1362765599,BE
-1362765600,1362765607,NL
-1362765608,1362765615,BE
-1362765616,1362765639,NL
-1362765640,1362765647,BE
-1362765648,1362765655,NL
-1362765656,1362765663,BE
-1362765664,1362765703,NL
-1362765704,1362765711,BE
-1362765712,1362765727,NL
-1362765728,1362765735,BE
-1362765736,1362765759,NL
-1362765760,1362765767,BE
-1362765768,1362765783,NL
-1362765784,1362765807,BE
-1362765808,1362765823,NL
-1362765824,1362765847,BE
-1362765848,1362765919,NL
-1362765920,1362765943,BE
-1362765944,1362765959,NL
-1362765960,1362765967,BE
-1362765968,1362765991,NL
-1362765992,1362766015,BE
-1362766016,1362766031,NL
-1362766032,1362766071,BE
-1362766072,1362766095,NL
-1362766096,1362766119,BE
-1362766120,1362766127,NL
-1362766128,1362766143,BE
-1362766144,1362766151,NL
-1362766152,1362766159,BE
-1362766160,1362766175,NL
-1362766176,1362766183,BE
-1362766184,1362766191,NL
-1362766192,1362766207,BE
-1362766208,1362766215,NL
-1362766216,1362766231,BE
-1362766232,1362766247,NL
-1362766248,1362766255,BE
-1362766256,1362766279,NL
-1362766280,1362766295,BE
-1362766296,1362766319,NL
-1362766320,1362766335,BE
-1362766336,1362766351,NL
-1362766352,1362766359,BE
-1362766360,1362766375,NL
-1362766376,1362766383,BE
-1362766384,1362766407,NL
-1362766408,1362766447,BE
-1362766448,1362766479,NL
-1362766480,1362766487,BE
-1362766488,1362766503,NL
-1362766504,1362766511,BE
-1362766512,1362766527,NL
-1362766528,1362766535,BE
-1362766536,1362766551,NL
-1362766552,1362766591,BE
-1362766592,1362766599,NL
-1362766600,1362766615,BE
-1362766616,1362766623,NL
-1362766624,1362766639,BE
-1362766640,1362766647,NL
-1362766648,1362766663,BE
-1362766664,1362766671,NL
-1362766672,1362766687,BE
-1362766688,1362766703,NL
-1362766704,1362766711,BE
-1362766712,1362766727,NL
-1362766728,1362766751,BE
-1362766752,1362766759,NL
-1362766760,1362766767,BE
-1362766768,1362766831,NL
-1362766832,1362766847,BE
-1362766848,1362766863,NL
-1362766864,1362766871,BE
-1362766872,1362766879,NL
-1362766880,1362766887,BE
-1362766888,1362766895,NL
-1362766896,1362766903,BE
-1362766904,1362766911,NL
-1362766912,1362766919,BE
-1362766920,1362766927,NL
-1362766928,1362766935,BE
-1362766936,1362766943,NL
-1362766944,1362766959,BE
-1362766960,1362766967,NL
-1362766968,1362766983,BE
-1362766984,1362766999,NL
-1362767000,1362767031,BE
-1362767032,1362767039,NL
-1362767040,1362767063,BE
-1362767064,1362767079,NL
-1362767080,1362767087,BE
-1362767088,1362767095,NL
-1362767096,1362767103,BE
-1362767104,1362767111,NL
-1362767112,1362767127,BE
-1362767128,1362767135,NL
-1362767136,1362767143,BE
-1362767144,1362767199,NL
-1362767200,1362767207,BE
-1362767208,1362767223,NL
-1362767224,1362767231,BE
-1362767232,1362767239,NL
-1362767240,1362767255,BE
-1362767256,1362767303,NL
-1362767304,1362767319,BE
-1362767320,1362767327,NL
-1362767328,1362767335,BE
-1362767336,1362767343,NL
-1362767344,1362767367,BE
-1362767368,1362767375,NL
-1362767376,1362767383,BE
-1362767384,1362767407,NL
-1362767408,1362767423,BE
-1362767424,1362767447,NL
-1362767448,1362767463,BE
-1362767464,1362767479,NL
-1362767480,1362767495,BE
-1362767496,1362767527,NL
-1362767528,1362767535,BE
-1362767536,1362767543,NL
-1362767544,1362767551,BE
-1362767552,1362767559,NL
-1362767560,1362767575,BE
-1362767576,1362767607,NL
-1362767608,1362767639,BE
-1362767640,1362767647,NL
-1362767648,1362767663,BE
-1362767664,1362767671,NL
-1362767672,1362767679,BE
-1362767680,1362767695,NL
-1362767696,1362767711,BE
-1362767712,1362767719,NL
-1362767720,1362767759,BE
-1362767760,1362767767,NL
-1362767768,1362767775,BE
-1362767776,1362767783,NL
-1362767784,1362767807,BE
-1362767808,1362767815,NL
-1362767816,1362767839,BE
-1362767840,1362767863,NL
-1362767864,1362767871,BE
-1362767872,1362813695,NL
-1362813696,1362817023,BE
-1362817024,1362817031,NL
-1362817032,1362817039,BE
-1362817040,1362817047,NL
-1362817048,1362817087,BE
-1362817088,1362817103,NL
-1362817104,1362817119,BE
-1362817120,1362817151,NL
-1362817152,1362817215,BE
-1362817216,1362817271,NL
-1362817272,1362817279,BE
-1362817280,1362817311,NL
-1362817312,1362817343,BE
-1362817344,1362817359,NL
-1362817360,1362817375,BE
-1362817376,1362817439,NL
-1362817440,1362817455,BE
-1362817456,1362817563,NL
-1362817564,1362817583,BE
-1362817584,1362817655,NL
-1362817656,1362817663,BE
-1362817664,1362817743,NL
-1362817744,1362818091,BE
-1362818092,1362818092,NL
-1362818093,1362820095,BE
-1362820096,1362837503,NL
-1362837504,1362845695,BE
-1362845696,1362870271,NL
-1362870272,1362872319,BE
-1362872320,1362872335,NL
-1362872336,1362872343,BE
-1362872344,1362872351,NL
-1362872352,1362873855,BE
-1362873856,1362873859,NL
-1362873860,1362874367,BE
-1362874368,1362874375,NL
-1362874376,1362875903,BE
-1362875904,1362875907,NL
-1362875908,1362876423,BE
-1362876424,1362876431,NL
-1362876432,1362876439,BE
-1362876440,1362876447,NL
-1362876448,1362876455,BE
-1362876456,1362876463,NL
-1362876464,1362876471,BE
-1362876472,1362876535,NL
-1362876536,1362876543,BE
-1362876544,1362876583,NL
-1362876584,1362877963,BE
-1362877964,1362877979,NL
-1362877980,1362877983,BE
-1362877984,1362877999,NL
-1362878000,1362878003,BE
-1362878004,1362878015,NL
-1362878016,1362878463,BE
-1362878464,1362878471,NL
-1362878472,1362879999,BE
-1362880000,1362880003,NL
-1362880004,1362880527,BE
-1362880528,1362880727,NL
-1362880728,1362880735,BE
-1362880736,1362880743,NL
-1362880744,1362880751,BE
-1362880752,1362881023,NL
-1362881024,1362881055,BE
-1362881056,1362881087,NL
-1362881088,1362881103,BE
-1362881104,1362881111,NL
-1362881112,1362882047,BE
-1362882048,1362882051,NL
-1362882052,1362882055,BE
-1362882056,1362882067,NL
-1362882068,1362882071,BE
-1362882072,1362882143,NL
-1362882144,1362882155,BE
-1362882156,1362882179,NL
-1362882180,1362882183,BE
-1362882184,1362882207,NL
-1362882208,1362882211,BE
-1362882212,1362882219,NL
-1362882220,1362882223,BE
-1362882224,1362882231,NL
-1362882232,1362884095,BE
-1362884096,1362884099,NL
-1362884100,1362885119,BE
-1362885120,1362886399,NL
-1362886400,1362886400,BE
-1362886401,1362886409,NL
-1362886410,1362886413,BE
-1362886414,1362886416,NL
-1362886417,1362886419,BE
-1362886420,1362886421,NL
-1362886422,1362886422,BE
-1362886423,1362886423,NL
-1362886424,1362886655,BE
+1362426880,1362427815,MQ
+1362427816,1362755583,FR
+1362755584,1362886655,NL
1362886656,1363017727,ES
1363017728,1363148799,CH
1363148800,1363410943,FR
1363410944,1363673087,NL
1363673088,1363935231,IT
1363935232,1364197375,GB
-1364197376,1364262911,FR
+1364197376,1364212991,FR
+1364212992,1364213247,GF
+1364213248,1364262911,FR
1364262912,1364328447,IT
1364328448,1364459519,BE
1364459520,1364525055,PT
-1364525056,1364525311,NL
-1364525312,1364525567,A2
-1364525568,1364526335,NL
-1364526336,1364526591,US
+1364525056,1364526591,NL
1364526592,1364528639,GB
-1364528640,1364528895,UA
-1364528896,1364530175,GB
-1364530176,1364531455,NL
-1364531456,1364531711,IT
-1364531712,1364537459,NL
-1364537460,1364537463,GB
-1364537464,1364537511,NL
-1364537512,1364537519,GB
-1364537520,1364540671,NL
-1364540672,1364540927,US
-1364540928,1364577023,NL
-1364577024,1364577279,GB
-1364577280,1364577791,NL
-1364577792,1364578303,GB
-1364578304,1364579839,NL
-1364579840,1364580095,US
-1364580096,1364581375,NL
+1364528640,1364529663,NL
+1364529664,1364530175,GB
+1364530176,1364541439,NL
+1364541440,1364545535,SE
+1364545536,1364581375,NL
1364581376,1364582399,LY
-1364582400,1364583423,US
-1364583424,1364585727,NL
+1364582400,1364585727,NL
1364585728,1364585983,CA
-1364585984,1364586240,LB
-1364586241,1364586495,NL
-1364586496,1364586752,LB
-1364586753,1364588977,NL
-1364588978,1364588978,US
-1364588979,1364589567,NL
-1364589568,1364589823,A2
-1364589824,1364590591,NL
+1364585984,1364586239,LB
+1364586240,1364590591,NL
1364590592,1364721663,GB
1364721664,1364725759,SE
1364725760,1364733951,DE
1364733952,1364738047,IT
1364738048,1364742143,NO
1364742144,1364746239,RU
-1364746240,1364749311,FR
-1364749312,1364749374,BE
-1364749375,1364749455,FR
-1364749456,1364749463,BE
-1364749464,1364749471,FR
-1364749472,1364749583,BE
-1364749584,1364749599,FR
-1364749600,1364749696,BE
-1364749697,1364749823,FR
-1364749824,1364749983,BE
-1364749984,1364749991,FR
-1364749992,1364750079,BE
-1364750080,1364750335,FR
+1364746240,1364750335,FR
1364750336,1364754431,RU
1364754432,1364758527,SK
1364758528,1364762623,KZ
@@ -49867,20 +16512,13 @@
1364803584,1364809727,RU
1364809728,1364815871,DE
1364815872,1364819967,RU
-1364819968,1364823295,GB
-1364823296,1364823311,AE
-1364823312,1364824063,GB
+1364819968,1364824063,GB
1364824064,1364828159,SE
-1364828160,1364829439,GB
-1364829440,1364829487,FR
-1364829488,1364829503,GB
-1364829504,1364829527,FR
-1364829528,1364832255,GB
+1364828160,1364832255,GB
1364832256,1364836351,RU
1364836352,1364840447,DE
1364840448,1364844543,AM
-1364844544,1364852479,DE
-1364852480,1364852735,GB
+1364844544,1364852735,DE
1364852736,1364856831,RU
1364856832,1364860927,IQ
1364860928,1364865023,DE
@@ -49904,123 +16542,40 @@
1364934656,1364938751,FR
1364938752,1364942847,CZ
1364942848,1364946943,GB
-1364946944,1364947167,TR
-1364947168,1364947199,US
-1364947200,1364948479,GB
-1364948480,1364949247,TR
-1364949248,1364949503,CY
-1364949504,1364949759,TR
-1364949760,1364950015,CY
-1364950016,1364950527,TR
-1364950528,1364950783,CY
-1364950784,1364950847,TR
-1364950848,1364950911,GB
-1364950912,1364951039,TR
+1364946944,1364951039,TR
1364951040,1364959231,IR
1364959232,1364963327,DE
1364963328,1364967423,RU
-1364967424,1364969983,GB
-1364969984,1364970239,FR
-1364970240,1364970495,US
-1364970496,1364971519,GB
+1364967424,1364971519,GB
1364971520,1364975615,CZ
1364975616,1364979711,BJ
-1364979712,1364982783,GB
-1364982784,1364983295,CH
-1364983296,1364983551,US
-1364983552,1364983807,GB
+1364979712,1364983039,GB
+1364983040,1364983295,CH
+1364983296,1364983807,GB
1364983808,1364991999,DE
1364992000,1364996095,IT
1364996096,1365000191,GR
-1365000192,1365002751,SE
-1365002752,1365003263,GB
-1365003264,1365003903,SE
-1365003904,1365004035,GB
-1365004036,1365004039,SE
-1365004040,1365004047,GB
-1365004048,1365004063,SE
-1365004064,1365004287,GB
+1365000192,1365004287,SE
1365004288,1365008383,FR
1365008384,1365012479,CH
-1365012480,1365012735,FR
-1365012736,1365013503,US
-1365013504,1365013631,FR
-1365013632,1365013855,US
-1365013856,1365013983,FR
-1365013984,1365014015,GB
-1365014016,1365014239,US
-1365014240,1365014271,FR
-1365014272,1365015551,US
-1365015552,1365015903,FR
+1365012480,1365015903,US
1365015904,1365015919,GB
-1365015920,1365015927,DE
-1365015928,1365015935,ES
-1365015936,1365016047,US
-1365016048,1365016063,CN
-1365016064,1365016079,FR
-1365016080,1365016095,US
-1365016096,1365016111,FR
-1365016112,1365016255,US
-1365016256,1365016319,FR
-1365016320,1365016575,US
+1365015920,1365016575,US
1365016576,1365020671,ES
1365020672,1365024767,CZ
-1365024768,1365027839,DE
-1365027840,1365027871,US
-1365027872,1365028863,DE
+1365024768,1365028863,DE
1365028864,1365032959,NL
1365032960,1365041151,PT
-1365041152,1365041407,IQ
-1365041408,1365041663,LU
-1365041664,1365041695,FR
-1365041696,1365041727,GB
-1365041728,1365042047,LU
+1365041152,1365042047,FR
1365042048,1365042055,GB
-1365042056,1365042175,LU
-1365042176,1365044223,FR
-1365044224,1365044287,BE
-1365044288,1365044479,FR
-1365044480,1365044607,LU
-1365044608,1365044639,BE
-1365044640,1365044655,LU
-1365044656,1365044719,FR
-1365044720,1365044815,LU
-1365044816,1365044831,BE
-1365044832,1365044895,LU
-1365044896,1365044911,FR
-1365044912,1365044927,LU
+1365042056,1365044735,FR
+1365044736,1365044799,LU
+1365044800,1365044927,FR
1365044928,1365044935,GR
-1365044936,1365044959,LU
-1365044960,1365044975,BE
-1365044976,1365045247,LU
-1365045248,1365045535,AT
-1365045536,1365045543,BA
-1365045544,1365045551,BG
-1365045552,1365045559,DE
-1365045560,1365045567,GB
-1365045568,1365045575,HR
-1365045576,1365045583,AT
-1365045584,1365045591,PL
-1365045592,1365045599,RO
-1365045600,1365045607,RU
-1365045608,1365045615,RS
-1365045616,1365045623,SI
-1365045624,1365045631,SK
-1365045632,1365045639,CZ
-1365045640,1365045647,UA
-1365045648,1365045663,HU
-1365045664,1365047039,AT
-1365047040,1365047103,SK
-1365047104,1365047295,AT
-1365047296,1365047647,SK
-1365047648,1365047679,AT
-1365047680,1365047807,SK
-1365047808,1365047871,AT
-1365047872,1365047903,SK
-1365047904,1365047999,AT
-1365048000,1365048191,SK
-1365048192,1365048255,AT
-1365048256,1365049343,SK
+1365044936,1365044943,LU
+1365044944,1365045247,FR
+1365045248,1365047295,AT
+1365047296,1365049343,SK
1365049344,1365057535,FR
1365057536,1365061631,IT
1365061632,1365065727,NL
@@ -50029,59 +16584,23 @@
1365078016,1365082111,DE
1365082112,1365090303,SE
1365090304,1365094399,NO
-1365094400,1365094655,FR
-1365094656,1365094911,BG
-1365094912,1365095087,FR
-1365095088,1365095095,GB
-1365095096,1365095575,FR
-1365095576,1365095583,GB
-1365095584,1365096703,FR
-1365096704,1365096711,GB
-1365096712,1365096735,FR
-1365096736,1365096767,IT
-1365096768,1365098495,FR
+1365094400,1365098495,FR
1365098496,1365102591,HU
-1365102592,1365102911,ES
-1365102912,1365102919,GB
-1365102920,1365103383,ES
-1365103384,1365103391,GB
-1365103392,1365103479,ES
-1365103480,1365103487,GB
-1365103488,1365103519,ES
-1365103520,1365103551,GB
-1365103552,1365103679,ES
-1365103680,1365103743,GB
-1365103744,1365103775,ES
-1365103776,1365103791,GB
-1365103792,1365103983,ES
-1365103984,1365103991,IL
-1365103992,1365104199,ES
-1365104200,1365104200,GB
-1365104201,1365104206,ES
-1365104207,1365104207,GB
-1365104208,1365106687,ES
+1365102592,1365106687,ES
1365106688,1365110783,GB
1365110784,1365114879,FR
1365114880,1365118975,BA
1365118976,1365127167,RU
-1365127168,1365130271,AT
-1365130272,1365130303,IT
-1365130304,1365130495,AT
-1365130496,1365131007,IT
-1365131008,1365131263,AT
+1365127168,1365131263,AT
1365131264,1365139455,SE
1365139456,1365147647,CH
1365147648,1365155839,RU
1365155840,1365159935,SE
1365159936,1365164031,HU
-1365164032,1365166497,GB
-1365166498,1365166498,GB
-1365166499,1365172223,GB
+1365164032,1365172223,GB
1365172224,1365176319,LV
1365176320,1365180415,HU
-1365180416,1365183231,DE
-1365183232,1365183295,SC
-1365183296,1365184511,DE
+1365180416,1365184511,DE
1365184512,1365192703,RU
1365192704,1365196799,GB
1365196800,1365200895,ES
@@ -50089,215 +16608,22 @@
1365204992,1365209087,CZ
1365209088,1365213183,BE
1365213184,1365217279,RU
-1365217280,1365217551,GB
-1365217552,1365217567,US
-1365217568,1365217575,PT
-1365217576,1365217591,GB
-1365217592,1365217599,EG
-1365217600,1365217631,GB
-1365217632,1365217663,US
-1365217664,1365217671,PH
-1365217672,1365217687,IL
-1365217688,1365217695,KW
-1365217696,1365217703,GB
-1365217704,1365217711,AU
-1365217712,1365217791,US
-1365217792,1365217807,BD
-1365217808,1365217815,US
-1365217816,1365217823,DK
-1365217824,1365217831,GB
-1365217832,1365217839,TR
-1365217840,1365217847,GB
-1365217848,1365217855,BD
-1365217856,1365217871,GB
-1365217872,1365217879,BD
-1365217880,1365217919,US
-1365217920,1365217927,DK
-1365217928,1365217951,BD
-1365217952,1365217975,GB
-1365217976,1365217983,US
-1365217984,1365217991,DK
-1365217992,1365218023,US
-1365218024,1365218031,DK
-1365218032,1365218303,US
-1365218304,1365218311,CA
-1365218312,1365218319,AR
-1365218320,1365218327,ZA
-1365218328,1365218351,US
-1365218352,1365218367,CY
-1365218368,1365218375,RO
-1365218376,1365218383,UA
-1365218384,1365218407,EG
-1365218408,1365218415,IN
-1365218416,1365218431,GB
-1365218432,1365218439,EG
-1365218440,1365218447,ZA
-1365218448,1365218455,CA
-1365218456,1365218459,GB
-1365218460,1365218463,US
-1365218464,1365218471,HK
-1365218472,1365218479,GB
-1365218480,1365218511,GR
-1365218512,1365218519,AU
-1365218520,1365218527,US
-1365218528,1365218543,GR
-1365218544,1365218551,CY
-1365218552,1365218559,GR
-1365218560,1365218815,GB
-1365218816,1365218879,EG
-1365218880,1365218895,US
-1365218896,1365218903,GB
-1365218904,1365218911,MU
-1365218912,1365218927,US
-1365218928,1365218943,BR
-1365218944,1365218951,IN
-1365218952,1365218959,NL
-1365218960,1365218975,US
-1365218976,1365219007,CN
-1365219008,1365219023,US
-1365219024,1365219031,DK
-1365219032,1365219039,CY
-1365219040,1365219071,GB
-1365219072,1365219103,TR
-1365219104,1365219111,SA
-1365219112,1365219119,GB
-1365219120,1365219135,US
-1365219136,1365219143,GB
-1365219144,1365219159,US
-1365219160,1365219167,CA
-1365219168,1365219168,GB
-1365219169,1365219183,ES
-1365219184,1365219191,CA
-1365219192,1365219199,DE
-1365219200,1365219207,IN
-1365219208,1365219215,US
-1365219216,1365219231,GB
-1365219232,1365219247,CY
-1365219248,1365219279,GB
-1365219280,1365219287,BD
-1365219288,1365219295,US
-1365219296,1365219311,GB
-1365219312,1365219327,TR
-1365219328,1365219391,US
-1365219392,1365219399,DK
-1365219400,1365219407,AU
-1365219408,1365219415,GB
-1365219416,1365219423,TR
-1365219424,1365219431,US
-1365219432,1365219439,RU
-1365219440,1365219455,US
-1365219456,1365219463,NL
-1365219464,1365219471,AU
-1365219472,1365219479,IL
-1365219480,1365219511,GB
-1365219512,1365219519,BD
-1365219520,1365219583,US
-1365219584,1365219647,CN
-1365219648,1365219663,IN
-1365219664,1365219671,TR
-1365219672,1365219679,GB
-1365219680,1365219687,BD
-1365219688,1365219695,US
-1365219696,1365219703,DK
-1365219704,1365219711,UA
-1365219712,1365219743,TR
-1365219744,1365219751,US
-1365219752,1365219759,SG
-1365219760,1365219775,UA
-1365219776,1365219783,PY
-1365219784,1365219791,BA
-1365219792,1365219799,NO
-1365219800,1365219807,TR
-1365219808,1365219811,US
-1365219812,1365219815,AU
-1365219816,1365219903,US
-1365219904,1365219919,ES
-1365219920,1365219935,IN
-1365219936,1365219951,CA
-1365219952,1365219967,DK
-1365219968,1365219983,ES
-1365219984,1365219991,IT
-1365219992,1365220007,EE
-1365220008,1365220015,ES
-1365220016,1365220031,US
-1365220032,1365220127,CN
-1365220128,1365220143,TR
-1365220144,1365220151,IL
-1365220152,1365220159,AR
-1365220160,1365220223,US
-1365220224,1365220255,JO
-1365220256,1365220263,KW
-1365220264,1365220271,GB
-1365220272,1365220287,KW
-1365220288,1365220303,AR
-1365220304,1365220311,NL
-1365220312,1365220319,BR
-1365220320,1365220371,US
-1365220372,1365220375,GB
-1365220376,1365220387,US
-1365220388,1365220391,JO
-1365220392,1365220399,ZA
-1365220400,1365220407,GB
-1365220408,1365220423,US
-1365220424,1365220431,GB
-1365220432,1365220435,JO
-1365220436,1365220439,US
-1365220440,1365220479,GB
-1365220480,1365220487,AU
-1365220488,1365220523,US
-1365220524,1365220527,GB
-1365220528,1365220535,IS
-1365220536,1365220551,GB
-1365220552,1365220567,IS
-1365220568,1365220575,IL
-1365220576,1365220583,CH
-1365220584,1365220599,TR
-1365220600,1365220607,GR
-1365220608,1365220615,TR
-1365220616,1365220623,US
-1365220624,1365220631,KW
-1365220632,1365220639,GR
-1365220640,1365220663,GB
-1365220664,1365220679,US
-1365220680,1365220687,IT
-1365220688,1365220727,US
-1365220728,1365220735,JO
-1365220736,1365220767,US
-1365220768,1365220769,GB
-1365220770,1365220770,CY
-1365220771,1365220775,GB
-1365220776,1365220783,US
-1365220784,1365220791,IN
-1365220792,1365220799,KW
-1365220800,1365220807,RU
-1365220808,1365220815,US
-1365220816,1365220823,KW
-1365220824,1365220831,GB
-1365220832,1365220847,IT
-1365220848,1365220855,AU
-1365220856,1365220903,US
-1365220904,1365220911,CA
-1365220912,1365220919,US
-1365220920,1365220927,KW
-1365220928,1365220935,IT
-1365220936,1365220939,AR
-1365220940,1365220943,US
-1365220944,1365220959,GB
-1365220960,1365220967,US
-1365220968,1365220975,GB
-1365220976,1365220979,US
-1365220980,1365220983,GB
-1365220984,1365220991,BR
-1365220992,1365220999,ZA
-1365221000,1365221023,US
-1365221024,1365221031,TR
-1365221032,1365221047,IL
-1365221048,1365221055,GB
-1365221056,1365221063,KW
-1365221064,1365221071,MY
-1365221072,1365221087,ES
-1365221088,1365221119,US
-1365221120,1365221375,GB
+1365217280,1365217343,GB
+1365217344,1365217351,US
+1365217352,1365217655,GB
+1365217656,1365217663,US
+1365217664,1365218191,GB
+1365218192,1365218199,US
+1365218200,1365219391,GB
+1365219392,1365219407,MY
+1365219408,1365220231,GB
+1365220232,1365220239,IE
+1365220240,1365220359,GB
+1365220360,1365220367,US
+1365220368,1365221231,GB
+1365221232,1365221239,NL
+1365221240,1365221247,US
+1365221248,1365221375,GB
1365221376,1365225471,GE
1365225472,1365229567,UA
1365229568,1365233663,PL
@@ -50305,7 +16631,9 @@
1365237760,1365241855,UZ
1365241856,1365245951,DK
1365245952,1366294527,GB
-1366294528,1367343103,IT
+1366294528,1366405831,IT
+1366405832,1366405835,SI
+1366405836,1367343103,IT
1367343104,1369440255,GB
1369440256,1369473023,DE
1369473024,1369505791,HU
@@ -50357,69 +16685,48 @@
1370062848,1370095615,DE
1370095616,1370128383,GB
1370128384,1370161151,SE
-1370161152,1370170367,NL
-1370170368,1370170399,US
-1370170400,1370174463,NL
-1370174464,1370174591,US
-1370174592,1370174719,US
-1370174720,1370175487,US
-1370175488,1370181887,NL
-1370181888,1370182015,NL
-1370182016,1370182143,US
+1370161152,1370174463,NL
+1370174464,1370175487,US
+1370175488,1370178815,NL
+1370178816,1370179071,ES
+1370179072,1370181887,NL
+1370181888,1370182143,US
1370182144,1370182911,NL
-1370182912,1370183167,NL
+1370182912,1370183167,DE
1370183168,1370185983,NL
-1370185984,1370186495,NL
-1370186496,1370187519,NL
-1370187520,1370187775,DE
-1370187776,1370188031,GR
-1370188032,1370188799,NL
+1370185984,1370186239,GB
+1370186240,1370188543,NL
+1370188544,1370188799,FR
1370188800,1370189055,US
1370189056,1370189311,NL
-1370189312,1370189567,NL
+1370189312,1370189567,US
1370189568,1370190847,NL
1370190848,1370191871,DE
1370191872,1370193919,NL
1370193920,1370226687,GB
1370226688,1370259455,ES
1370259456,1370292223,SE
-1370292224,1370299903,NL
-1370299904,1370300159,US
-1370300160,1370324991,NL
+1370292224,1370324991,NL
1370324992,1370357759,DE
1370357760,1370390527,IT
1370390528,1370423295,GB
1370423296,1370439679,NO
1370439680,1370456063,NL
1370456064,1370488831,FI
-1370488832,1370505855,RU
-1370505856,1370505871,CY
-1370505872,1370508895,RU
-1370508896,1370508911,CY
-1370508912,1370555887,RU
-1370555888,1370555903,CY
-1370555904,1370563967,RU
-1370563968,1370564031,US
-1370564032,1370619903,RU
+1370488832,1370619903,RU
1370619904,1370750975,GB
1370750976,1370767359,RO
1370767360,1370771455,MD
-1370771456,1370772479,RO
-1370772480,1370772991,MD
-1370772992,1370882047,RO
+1370771456,1370882047,RO
1370882048,1371013119,HU
1371013120,1371078655,ES
1371078656,1371144191,FR
1371144192,1371201535,GR
1371201536,1371205631,PL
1371205632,1371209727,SE
-1371209728,1371251343,GB
-1371251344,1371251359,US
-1371251360,1371275263,GB
+1371209728,1371275263,GB
1371275264,1371340799,BE
-1371340800,1371374740,AT
-1371374741,1371374741,SK
-1371374742,1371406335,AT
+1371340800,1371406335,AT
1371406336,1371471871,PL
1371471872,1371537407,NO
1371537408,1371602943,MA
@@ -50429,93 +16736,25 @@
1371799552,1371865087,RO
1371865088,1371930623,FI
1371930624,1371996159,LV
-1371996160,1371996415,NG
-1371996416,1371996671,A2
+1371996160,1371996671,GB
1371996672,1371996927,GA
-1371996928,1371997119,A2
-1371997120,1371997127,NG
-1371997128,1371997183,A2
+1371996928,1371997183,GB
1371997184,1371997439,KE
-1371997440,1371997695,A2
-1371997696,1371998207,NG
-1371998208,1371998463,CD
-1371998464,1371998719,NG
-1371998720,1372000255,A2
+1371997440,1372000255,GB
1372000256,1372004351,UG
-1372004352,1372004607,LR
-1372004608,1372006399,A2
-1372006400,1372006407,NG
-1372006408,1372006426,A2
+1372004352,1372006426,GB
1372006427,1372006427,TZ
-1372006428,1372006463,A2
-1372006464,1372006495,NG
-1372006496,1372007039,A2
-1372007040,1372007455,NG
-1372007456,1372008095,A2
-1372008096,1372008127,NG
-1372008128,1372008159,A2
-1372008160,1372008191,NG
-1372008192,1372008927,A2
-1372008928,1372008959,MW
-1372008960,1372010239,A2
-1372010240,1372010272,NG
-1372010273,1372010967,A2
-1372010968,1372011007,TZ
-1372011008,1372011775,A2
-1372011776,1372012031,ZM
-1372012032,1372012543,A2
-1372012544,1372014591,ZM
-1372014592,1372015615,A2
-1372015616,1372015871,NG
-1372015872,1372016127,A2
-1372016128,1372016383,GH
-1372016384,1372019199,A2
-1372019200,1372019455,GA
-1372019456,1372020735,A2
+1372006428,1372012543,GB
+1372012544,1372013567,ZM
+1372013568,1372020735,GB
1372020736,1372022783,ZM
-1372022784,1372024831,A2
-1372024832,1372025087,ZM
-1372025088,1372025631,A2
-1372025632,1372025663,ZM
-1372025664,1372025695,KE
-1372025696,1372025727,TZ
-1372025728,1372025855,A2
-1372025856,1372026367,IL
+1372022784,1372026367,GB
1372026368,1372026879,KE
1372026880,1372027903,IL
-1372027904,1372029439,A2
-1372029440,1372029695,NG
-1372029696,1372029951,NE
-1372029952,1372031999,A2
-1372032000,1372032255,CM
-1372032256,1372033279,A2
-1372033280,1372033535,IN
-1372033536,1372041343,A2
-1372041344,1372041471,NG
-1372041472,1372043519,A2
+1372027904,1372043519,GB
1372043520,1372043775,NG
-1372043776,1372044287,A2
-1372044288,1372044543,NG
-1372044544,1372044799,A2
-1372044800,1372044863,CM
-1372044864,1372044927,NG
-1372044928,1372045055,A2
-1372045056,1372045087,CM
-1372045088,1372045119,A2
-1372045120,1372045151,NG
-1372045152,1372045567,A2
-1372045568,1372045823,ZM
-1372045824,1372045887,NG
-1372045888,1372046559,A2
-1372046560,1372046591,NG
-1372046592,1372047231,A2
-1372047232,1372047295,NG
-1372047296,1372047359,A2
-1372047360,1372047615,CM
-1372047616,1372049919,A2
-1372049920,1372050175,NG
-1372050176,1372060159,A2
-1372060160,1372061695,IL
+1372043776,1372060671,GB
+1372060672,1372061695,IL
1372061696,1372069887,RU
1372069888,1372073983,FR
1372073984,1372078079,CZ
@@ -50526,37 +16765,22 @@
1372094464,1372098559,IT
1372098560,1372102655,RU
1372102656,1372106751,SE
-1372106752,1372110591,FR
-1372110592,1372110623,GB
-1372110624,1372110655,DE
-1372110656,1372110687,IT
-1372110688,1372110719,ES
-1372110720,1372110751,FR
-1372110752,1372110783,NL
-1372110784,1372110847,FR
+1372106752,1372110847,FR
1372110848,1372114943,DE
1372114944,1372119039,RU
1372119040,1372123135,IT
1372123136,1372127231,RU
1372127232,1372131327,IT
1372131328,1372135423,RU
-1372135424,1372138255,DE
-1372138256,1372138263,GB
-1372138264,1372139519,DE
+1372135424,1372139519,DE
1372139520,1372143615,CZ
1372143616,1372147711,RU
-1372147712,1372151807,BE
-1372151808,1372152823,DE
-1372152824,1372152831,GB
-1372152832,1372156063,DE
-1372156064,1372156095,GB
-1372156096,1372156719,DE
-1372156720,1372156735,GB
-1372156736,1372159999,DE
+1372147712,1372149247,BE
+1372149248,1372149375,HK
+1372149376,1372151807,BE
+1372151808,1372159999,DE
1372160000,1372164095,GB
-1372164096,1372166863,DE
-1372166864,1372166879,US
-1372166880,1372168191,DE
+1372164096,1372168191,DE
1372168192,1372172287,GB
1372172288,1372176383,FR
1372176384,1372180479,CH
@@ -50568,79 +16792,15 @@
1372585984,1372618751,IT
1372618752,1372651519,GB
1372651520,1372684287,FI
-1372684288,1372685631,DE
-1372685632,1372685655,EU
-1372685656,1372685663,DE
-1372685664,1372685695,EU
-1372685696,1372685823,DE
-1372685824,1372685887,EU
-1372685888,1372686335,DE
-1372686336,1372687359,EU
-1372687360,1372687487,DE
-1372687488,1372687519,EU
-1372687520,1372687647,DE
-1372687648,1372687679,EU
-1372687680,1372687711,DE
-1372687712,1372687719,EU
-1372687720,1372687727,DE
-1372687728,1372687743,EU
-1372687744,1372688199,DE
-1372688200,1372688223,EU
-1372688224,1372688351,DE
-1372688352,1372688383,EU
-1372688384,1372691455,DE
-1372691456,1372691711,US
-1372691712,1372691967,EU
-1372691968,1372694271,DE
-1372694272,1372694303,EU
-1372694304,1372694367,DE
-1372694368,1372694383,EU
-1372694384,1372694399,DE
-1372694400,1372694559,EU
-1372694560,1372694591,DE
-1372694592,1372694623,EU
-1372694624,1372694719,DE
-1372694720,1372694783,EU
-1372694784,1372694815,DE
-1372694816,1372694831,EU
-1372694832,1372695039,DE
-1372695040,1372695167,EU
-1372695168,1372695199,DE
-1372695200,1372695231,EU
-1372695232,1372695295,GB
-1372695296,1372695423,DE
-1372695424,1372695455,EU
-1372695456,1372695551,DE
-1372695552,1372695807,CZ
-1372695808,1372696007,DK
-1372696008,1372696063,EU
-1372696064,1372697215,DE
-1372697216,1372697231,EU
-1372697232,1372697239,DE
-1372697240,1372697247,EU
-1372697248,1372698471,DE
-1372698472,1372698559,EU
-1372698560,1372698655,DE
-1372698656,1372698687,EU
-1372698688,1372698751,DE
-1372698752,1372698783,EU
-1372698784,1372698814,DE
-1372698815,1372698879,EU
-1372698880,1372700159,DE
-1372700160,1372700671,EU
-1372700672,1372702463,DE
-1372702464,1372702719,EU
-1372702720,1372702735,DE
-1372702736,1372702751,EU
-1372702752,1372702991,DE
-1372702992,1372703271,EU
-1372703272,1372703295,DE
-1372703296,1372703327,EU
-1372703328,1372703391,DE
-1372703392,1372703423,EU
-1372703424,1372703487,DE
-1372703488,1372704767,EU
-1372704768,1372717055,DE
+1372688384,1372689407,DE
+1372690432,1372691455,DE
+1372696000,1372696007,DK
+1372697344,1372697599,DE
+1372698880,1372699391,DE
+1372699904,1372700159,DE
+1372702720,1372703231,DE
+1372704768,1372713983,DE
+1372715008,1372717055,DE
1372717056,1372749823,PL
1372749824,1372782591,DE
1372782592,1372815359,RU
@@ -50652,237 +16812,127 @@
1373306880,1373372415,PL
1373372416,1373437951,FR
1373437952,1373503487,CH
-1373503488,1373519871,RU
-1373519872,1373523967,GB
-1373523968,1373569023,RU
+1373503488,1373569023,RU
1373569024,1373634559,AT
1373634560,1374683135,SE
-1374683136,1375080959,BE
-1375080960,1375081215,EU
-1375081216,1375207423,BE
-1375207424,1375208447,MQ
+1374683136,1375207423,BE
+1375207424,1375207935,FR
+1375207936,1375208447,MQ
1375208448,1375208703,GP
1375208704,1375210239,MQ
1375210240,1375210495,GP
1375210496,1375211519,MQ
-1375211520,1375211775,FR
-1375211776,1375212799,GP
+1375211520,1375211775,GP
+1375211776,1375212031,FR
+1375212032,1375212799,GP
1375212800,1375213055,FR
-1375213056,1375214591,GP
-1375214592,1375214847,FR
-1375214848,1375215103,GP
-1375215104,1375215359,FR
-1375215360,1375215615,GP
-1375215616,1375216895,GF
-1375216896,1375217151,FR
-1375217152,1375217919,GF
-1375217920,1375218175,FR
-1375218176,1375219711,GF
-1375219712,1375219967,FR
-1375219968,1375223807,GF
-1375223808,1375224575,FR
-1375224576,1375225087,MQ
-1375225088,1375225343,FR
-1375225344,1375226111,MQ
-1375226112,1375226879,FR
-1375226880,1375227135,MQ
-1375227136,1375228159,FR
-1375228160,1375231999,MQ
-1375232000,1375233023,FR
-1375233024,1375233535,MQ
-1375233536,1375233791,FR
-1375233792,1375234559,MQ
-1375234560,1375236095,FR
-1375236096,1375237119,MQ
-1375237120,1375237631,FR
-1375237632,1375237887,MQ
-1375237888,1375238399,FR
-1375238400,1375240191,MQ
+1375213056,1375215615,GP
+1375215616,1375215871,GF
+1375215872,1375216383,FR
+1375216384,1375218175,GF
+1375218176,1375218687,FR
+1375218688,1375219455,GF
+1375219456,1375219711,FR
+1375219712,1375221247,GF
+1375221248,1375221503,FR
+1375221504,1375221759,GF
+1375221760,1375222783,FR
+1375222784,1375223807,GF
+1375223808,1375227135,MQ
+1375227136,1375227647,FR
+1375227648,1375230463,MQ
+1375230464,1375230719,FR
+1375230720,1375233023,MQ
+1375233024,1375233279,FR
+1375233280,1375233791,MQ
+1375233792,1375235071,FR
+1375235072,1375235583,MQ
+1375235584,1375236095,FR
+1375236096,1375236351,MQ
+1375236352,1375236863,FR
+1375236864,1375237631,MQ
+1375237632,1375237887,FR
+1375237888,1375239679,MQ
+1375239680,1375239935,FR
+1375239936,1375240191,MQ
1375240192,1375240447,FR
-1375240448,1375241215,GP
-1375241216,1375241471,FR
-1375241472,1375243775,GP
-1375243776,1375244031,FR
-1375244032,1375244543,GP
-1375244544,1375244799,FR
-1375244800,1375245311,GP
-1375245312,1375245567,FR
-1375245568,1375247359,GP
+1375240448,1375240959,GP
+1375240960,1375241215,FR
+1375241216,1375241983,GP
+1375241984,1375242239,FR
+1375242240,1375242495,MF
+1375242496,1375242751,GP
+1375242752,1375243263,FR
+1375243264,1375245311,GP
+1375245312,1375246079,FR
+1375246080,1375246335,GP
+1375246336,1375246591,FR
+1375246592,1375247359,GP
1375247360,1375247615,FR
-1375247616,1375251455,GP
-1375251456,1375251967,FR
-1375251968,1375252223,GP
-1375252224,1375252479,FR
-1375252480,1375253503,GP
-1375253504,1375253759,FR
-1375253760,1375256575,GP
-1375256576,1375257343,RE
-1375257344,1375257599,FR
-1375257600,1375257855,RE
+1375247616,1375249919,GP
+1375249920,1375250175,FR
+1375250176,1375250431,GP
+1375250432,1375251455,FR
+1375251456,1375252223,GP
+1375252224,1375253247,FR
+1375253248,1375253759,GP
+1375253760,1375254527,FR
+1375254528,1375256063,GP
+1375256064,1375256319,FR
+1375256320,1375256575,GP
+1375256576,1375257087,RE
+1375257088,1375257343,FR
+1375257344,1375257855,RE
1375257856,1375258111,FR
-1375258112,1375260415,RE
-1375260416,1375260671,FR
-1375260672,1375262207,RE
-1375262208,1375262463,FR
-1375262464,1375263999,RE
-1375264000,1375264255,FR
-1375264256,1375270911,RE
-1375270912,1375271167,FR
-1375271168,1375271423,RE
+1375258112,1375258879,RE
+1375258880,1375261183,FR
+1375261184,1375261695,RE
+1375261696,1375262207,FR
+1375262208,1375265535,RE
+1375265536,1375266047,FR
+1375266048,1375266303,RE
+1375266304,1375268095,FR
+1375268096,1375268351,RE
+1375268352,1375268863,FR
+1375268864,1375269119,RE
+1375269120,1375269631,FR
+1375269632,1375270143,RE
+1375270144,1375270655,FR
+1375270656,1375271423,RE
1375271424,1375271679,FR
-1375271680,1375272959,RE
-1375272960,1375705984,FR
-1375705985,1375705985,EU
-1375705986,1375731711,FR
-1375731712,1375844671,GB
-1375844672,1375844735,US
-1375844736,1375844767,GB
-1375844768,1375844863,US
-1375844864,1375852543,GB
-1375852544,1375852799,IE
-1375852800,1378719197,GB
-1378719198,1378719198,EU
-1378719199,1378877439,GB
+1375271680,1375271935,RE
+1375271936,1375272191,FR
+1375272192,1375272959,RE
+1375272960,1375731711,FR
+1375731712,1378877439,GB
1378877440,1379926015,IT
1379926016,1380188159,FR
-1380188160,1380226399,GB
-1380226400,1380226407,A2
-1380226408,1380450303,GB
+1380188160,1380450303,GB
1380450304,1380712447,NL
1380712448,1380974591,RO
-1380974592,1380978727,IL
-1380978728,1380978735,A2
-1380978736,1381036471,IL
-1381036472,1381036479,A2
-1381036480,1381105663,IL
+1380974592,1381105663,IL
1381105664,1381236735,DE
1381236736,1381367807,IT
1381367808,1381498879,ES
1381498880,1381761023,IT
1381761024,1382023167,NL
-1382023168,1382024959,SE
-1382024960,1382025215,DK
-1382025216,1382039007,SE
-1382039008,1382039023,FR
-1382039024,1382039055,SE
-1382039056,1382039071,DE
-1382039072,1382039175,SE
-1382039176,1382039191,GB
-1382039192,1382039271,SE
-1382039272,1382039275,GB
-1382039276,1382039551,SE
+1382023168,1382039551,SE
1382039552,1382055935,DE
1382055936,1382072319,FR
1382072320,1382088703,RU
-1382088704,1382092367,FR
-1382092368,1382092399,MC
-1382092400,1382092815,FR
-1382092816,1382092831,MC
-1382092832,1382092927,FR
-1382092928,1382092943,MC
-1382092944,1382093055,FR
-1382093056,1382093087,GB
-1382093088,1382093119,FR
-1382093120,1382093151,MC
-1382093152,1382093503,FR
-1382093504,1382093583,MC
-1382093584,1382093823,FR
-1382093824,1382093887,MC
-1382093888,1382094079,FR
-1382094080,1382094143,MC
-1382094144,1382094335,FR
-1382094336,1382094351,MC
-1382094352,1382094591,FR
-1382094592,1382094623,MC
-1382094624,1382097919,FR
-1382097920,1382098431,IT
-1382098432,1382105087,FR
+1382088704,1382105087,FR
1382105088,1382137855,DE
1382137856,1382154239,RU
1382154240,1382170623,FR
-1382170624,1382171775,DE
-1382171776,1382171791,CH
-1382171792,1382171927,DE
-1382171928,1382171935,CH
-1382171936,1382173663,DE
-1382173664,1382173671,GB
-1382173672,1382173675,DE
-1382173676,1382173679,CH
-1382173680,1382177983,DE
-1382177984,1382178303,LI
-1382178304,1382178823,DE
-1382178824,1382178831,CH
-1382178832,1382179231,DE
-1382179232,1382179239,MT
-1382179240,1382179247,DE
-1382179248,1382179279,GB
-1382179280,1382181135,DE
-1382181136,1382181151,CH
-1382181152,1382182095,DE
-1382182096,1382182111,CH
-1382182112,1382182547,DE
-1382182548,1382182551,CH
-1382182552,1382182655,DE
-1382182656,1382182687,US
-1382182688,1382182799,DE
-1382182800,1382182831,GB
-1382182832,1382182895,DE
-1382182896,1382182911,GB
-1382182912,1382183167,LI
-1382183168,1382183423,CH
-1382183424,1382183935,LI
-1382183936,1382185031,DE
-1382185032,1382185039,SK
-1382185040,1382187007,DE
-1382187008,1382191871,ES
-1382191872,1382192127,VE
-1382192128,1382203391,ES
+1382170624,1382187007,DE
+1382187008,1382203391,ES
1382203392,1382205439,GB
-1382205440,1382205695,EU
-1382205696,1382205951,DE
-1382205952,1382207743,EU
-1382207744,1382207999,DE
-1382208000,1382208255,EU
-1382208256,1382208319,DE
-1382208320,1382209535,EU
-1382209536,1382209791,DE
-1382209792,1382211071,EU
-1382211072,1382211199,DE
-1382211200,1382211583,EU
-1382211584,1382211839,FR
-1382211840,1382212223,EU
-1382212224,1382212239,FR
-1382212240,1382212607,EU
-1382212608,1382212863,FR
-1382212864,1382213631,EU
-1382213632,1382215679,GB
-1382215680,1382216447,NL
-1382216448,1382217727,GB
-1382217728,1382217983,NL
-1382217984,1382219007,GB
-1382219008,1382219519,NL
-1382219520,1382219775,GB
-1382219776,1382220735,SE
-1382220736,1382220767,NO
-1382220768,1382220783,SE
-1382220784,1382220791,NO
-1382220792,1382222847,SE
+1382213632,1382219775,GB
+1382219776,1382222847,SE
1382222848,1382223103,FI
-1382223104,1382223327,SE
-1382223328,1382223359,FI
-1382223360,1382224287,SE
-1382224288,1382224319,NO
-1382224320,1382227327,SE
-1382227328,1382227455,NO
-1382227456,1382227583,SE
-1382227584,1382227711,DK
-1382227712,1382232575,SE
-1382232576,1382232639,NO
-1382232640,1382233279,SE
-1382233280,1382233343,NO
-1382233344,1382233407,SE
-1382233408,1382233423,NO
-1382233424,1382252543,SE
+1382223104,1382226943,SE
+1382226944,1382227199,NO
+1382227200,1382252543,SE
1382252544,1382268927,CZ
1382268928,1382285311,IR
1382285312,1382301695,CZ
@@ -50902,137 +16952,67 @@
1382514688,1382531071,DK
1382531072,1382547455,FI
1382547456,1382809599,IT
-1382809600,1382967551,GB
-1382967552,1382967807,GB
-1382967808,1383025663,GB
-1383025664,1383025672,DE
-1383025673,1383025679,GB
-1383025680,1383025711,DE
-1383025712,1383025727,GB
-1383025728,1383025759,DE
-1383025760,1383071743,GB
-1383071744,1383073279,RU
-1383073280,1383073535,KZ
-1383073536,1383088127,RU
+1382809600,1383071743,GB
+1383071744,1383088127,RU
1383088128,1383096319,IS
-1383096320,1383096447,PL
-1383096448,1383096575,FR
-1383096576,1383096831,GB
-1383096832,1383096863,FR
-1383096864,1383096959,GB
-1383096960,1383097087,FR
-1383097088,1383097343,ES
-1383097344,1383098111,GB
-1383098112,1383098367,DE
-1383098368,1383098879,GB
-1383098880,1383099903,DE
-1383099904,1383100415,FR
-1383100416,1383100768,GB
-1383100769,1383100782,ES
-1383100783,1383100831,GB
-1383100832,1383100847,IE
-1383100848,1383100879,GB
-1383100880,1383100895,IE
-1383100896,1383103271,GB
-1383103272,1383103279,ES
-1383103280,1383103471,GB
-1383103472,1383103487,AE
-1383103488,1383104015,GB
-1383104016,1383104023,ES
-1383104024,1383104511,GB
+1383096320,1383100159,GB
+1383100160,1383100415,FR
+1383100416,1383104511,GB
1383104512,1383112703,JE
1383112704,1383114751,LB
1383114752,1383116799,GB
1383116800,1383120895,RU
1383120896,1383129087,IT
1383129088,1383137279,GB
-1383137280,1383139583,MC
-1383139584,1383139839,A2
-1383139840,1383140095,MC
-1383140096,1383140351,A2
-1383140352,1383141119,MC
-1383141120,1383141375,US
-1383141376,1383145471,MC
+1383137280,1383145471,MC
1383145472,1383153663,CZ
1383153664,1383161855,GB
1383161856,1383170047,DE
-1383170048,1383171743,GB
-1383171744,1383171775,NZ
-1383171776,1383172559,GB
-1383172560,1383172567,ZA
-1383172568,1383186431,GB
+1383170048,1383186431,GB
1383186432,1383194623,IT
1383194624,1383202815,GB
1383202816,1383211007,RU
1383211008,1383219199,CY
-1383219200,1383222407,AL
-1383222408,1383222447,RS
-1383222448,1383222463,AL
-1383222464,1383222527,RS
-1383222528,1383223119,AL
-1383223120,1383225759,RS
-1383225760,1383225771,AL
-1383225772,1383225807,RS
-1383225808,1383225827,AL
-1383225828,1383226091,RS
-1383226092,1383226095,AL
-1383226096,1383226367,RS
-1383226368,1383226623,AL
-1383226624,1383226751,RS
-1383226752,1383226815,AL
-1383226816,1383227391,RS
-1383227392,1383239295,RU
-1383239296,1383239423,AR
-1383239424,1383243775,RU
+1383219200,1383223295,AL
+1383223296,1383223551,XK
+1383223552,1383225983,AL
+1383225984,1383226007,RS
+1383226008,1383226207,AL
+1383226208,1383226239,RS
+1383226240,1383227391,AL
+1383227392,1383243775,RU
1383243776,1383251967,YE
1383251968,1383260159,CZ
1383260160,1383268351,RU
1383268352,1383273983,IR
-1383273984,1383276543,KW
+1383273984,1383275775,KW
+1383275776,1383276543,IR
1383276544,1383284735,KZ
1383284736,1383292927,PL
1383292928,1383301119,DE
1383301120,1383309311,SE
1383309312,1383317503,IT
1383317504,1383321599,SE
-1383321600,1383325695,RU
1383325696,1383333887,GB
1383333888,1383350271,RU
1383350272,1383358463,NO
-1383358464,1383366911,DE
-1383366912,1383367167,SY
-1383367168,1383367679,KW
+1383358464,1383367679,DE
1383367680,1383368703,GB
-1383368704,1383368831,DE
-1383368832,1383368847,GB
-1383368848,1383368895,KW
-1383368896,1383368957,DE
-1383368958,1383368958,US
-1383368959,1383369087,DE
-1383369088,1383369119,GB
-1383369120,1383369231,KW
-1383369232,1383369247,GB
-1383369248,1383369535,KW
-1383369536,1383369567,GB
-1383369568,1383369599,DE
-1383369600,1383369727,KW
+1383368704,1383369727,DE
1383369728,1383369760,SA
1383369761,1383369761,KW
1383369762,1383369768,SA
1383369769,1383369769,KW
1383369770,1383369983,SA
-1383369984,1383370751,KW
-1383370752,1383371775,DE
-1383371776,1383374591,KW
-1383374592,1383374723,US
+1383369984,1383372031,DE
+1383372032,1383374335,KW
+1383374336,1383374723,DE
1383374724,1383374724,KW
-1383374725,1383374847,US
+1383374725,1383374847,DE
1383374848,1383383039,ES
1383383040,1383391231,CY
1383391232,1383399423,FI
-1383399424,1383402015,LI
-1383402016,1383402023,CH
-1383402024,1383407615,LI
+1383399424,1383407615,LI
1383407616,1383415807,NO
1383415808,1383423999,RU
1383424000,1383432191,SE
@@ -51041,33 +17021,17 @@
1383448576,1383456767,RS
1383456768,1383464959,UA
1383464960,1383469055,BA
-1383469056,1383470479,UA
-1383470480,1383470495,RU
-1383470496,1383471103,UA
+1383469056,1383471103,UA
1383471104,1383473151,SE
1383473152,1383481343,DE
1383481344,1383481599,GB
1383481600,1383481615,US
1383481616,1383481663,GB
1383481664,1383481695,US
-1383481696,1383481703,GB
-1383481704,1383481711,US
-1383481712,1383481775,GB
-1383481776,1383481791,SA
-1383481792,1383482367,GB
-1383482368,1383482879,NL
-1383482880,1383483887,GB
-1383483888,1383483903,JP
-1383483904,1383485375,GB
-1383485376,1383485407,US
-1383485408,1383497727,GB
-1383497728,1383499039,RU
-1383499040,1383499047,UA
-1383499048,1383502335,RU
-1383502336,1383502847,CH
-1383502848,1383503615,RU
-1383503616,1383503616,CZ
-1383503617,1383505919,RU
+1383481696,1383482623,GB
+1383482624,1383482879,NL
+1383482880,1383497727,GB
+1383497728,1383505919,RU
1383505920,1383514111,SA
1383514112,1383522303,FI
1383522304,1383530495,BG
@@ -51083,33 +17047,9 @@
1383596032,1384120319,FR
1384120320,1384153087,NG
1384153088,1384185855,FI
-1384185856,1384189183,DE
-1384189184,1384189439,AT
-1384189440,1384190463,DE
-1384190464,1384190719,NL
-1384190720,1384190975,DE
1384190976,1384191231,DK
-1384191232,1384191999,DE
-1384192000,1384192191,NL
-1384192192,1384192255,DE
-1384192256,1384192511,NL
-1384192512,1384192575,DE
-1384192576,1384192639,SE
-1384192640,1384192767,DE
-1384192768,1384193023,BG
-1384193024,1384194191,DE
-1384194192,1384194207,AT
-1384194208,1384194559,DE
-1384194560,1384194815,NL
-1384194816,1384195711,DE
-1384195712,1384195743,NL
-1384195744,1384195751,CH
-1384195752,1384195775,DE
-1384195776,1384195839,SE
-1384195840,1384196095,DE
1384196096,1384197119,CZ
-1384197120,1384202239,DE
-1384202240,1384218623,GB
+1384204288,1384206335,ES
1384218624,1384251391,EG
1384251392,1384267775,FI
1384267776,1384284159,CH
@@ -51132,90 +17072,7 @@
1384742912,1384759295,RU
1384759296,1384775679,SY
1384775680,1384792063,RU
-1384792064,1384792623,FR
-1384792624,1384792639,BE
-1384792640,1384793679,FR
-1384793680,1384793695,BE
-1384793696,1384793791,FR
-1384793792,1384793823,BE
-1384793824,1384794127,FR
-1384794128,1384794143,CH
-1384794144,1384794271,FR
-1384794272,1384794287,CH
-1384794288,1384795279,FR
-1384795280,1384795327,BE
-1384795328,1384799807,FR
-1384799808,1384799871,CH
-1384799872,1384808447,FR
-1384808448,1384808479,BE
-1384808480,1384808735,EU
-1384808736,1384808799,BE
-1384808800,1384808831,FR
-1384808832,1384808959,FI
-1384808960,1384808967,BE
-1384808968,1384808975,EU
-1384808976,1384808991,DE
-1384808992,1384809015,BE
-1384809016,1384809023,GB
-1384809024,1384809039,FR
-1384809040,1384809047,BE
-1384809048,1384809055,EU
-1384809056,1384809071,BE
-1384809072,1384809087,FR
-1384809088,1384809103,BE
-1384809104,1384809111,EU
-1384809112,1384809119,GE
-1384809120,1384809175,BE
-1384809176,1384809183,EU
-1384809184,1384809199,BE
-1384809200,1384809207,EU
-1384809208,1384809215,BE
-1384809216,1384809407,BR
-1384809408,1384809439,FR
-1384809440,1384809471,DE
-1384809472,1384809983,US
-1384809984,1384810239,PT
-1384810240,1384811007,US
-1384811008,1384811519,GB
-1384811520,1384811647,IR
-1384811648,1384811711,EU
-1384811712,1384811743,ES
-1384811744,1384811775,BE
-1384811776,1384812031,FR
-1384812032,1384812159,PR
-1384812160,1384812287,PT
-1384812288,1384812543,ES
-1384812544,1384813567,GB
-1384813568,1384814079,ES
-1384814080,1384814591,GB
-1384814592,1384815103,BE
-1384815104,1384815615,FR
-1384815616,1384816127,BE
-1384816128,1384816255,EU
-1384816256,1384816383,ES
-1384816384,1384816639,EU
-1384816640,1384817151,DK
-1384817152,1384817407,EU
-1384817408,1384817439,GB
-1384817440,1384817471,EU
-1384817472,1384817503,SE
-1384817504,1384817599,BE
-1384817600,1384817663,FR
-1384817664,1384817919,BE
-1384817920,1384818175,EU
-1384818176,1384818815,BE
-1384818816,1384818879,NL
-1384818880,1384819199,EU
-1384819200,1384819711,GB
-1384819712,1384820223,CH
-1384820224,1384820735,BE
-1384820736,1384821247,EU
-1384821248,1384821759,BE
-1384821760,1384822271,DK
-1384822272,1384822783,ES
-1384822784,1384823295,BE
-1384823296,1384823807,CH
-1384823808,1384824831,EU
+1384792064,1384808447,FR
1384824832,1384841215,GB
1384841216,1384857599,PL
1384857600,1384873983,NL
@@ -51224,9 +17081,7 @@
1384923136,1384939519,RU
1384939520,1384955903,LT
1384955904,1384972287,RU
-1384972288,1384978975,DE
-1384978976,1384978991,NL
-1384978992,1384988671,DE
+1384972288,1384988671,DE
1384988672,1385005055,FI
1385005056,1385021439,HU
1385021440,1385037823,IE
@@ -51247,20 +17102,13 @@
1385218048,1385226239,UA
1385226240,1385234431,GB
1385234432,1385242623,DE
-1385242624,1385244095,GB
-1385244096,1385244111,HK
-1385244112,1385244143,GB
-1385244144,1385244151,CH
-1385244152,1385249535,GB
-1385249536,1385249791,US
-1385249792,1385250815,GB
+1385242624,1385250815,GB
1385250816,1385259007,PL
1385259008,1385267199,IT
1385267200,1385275391,SE
1385275392,1385283583,IT
-1385283584,1385285631,DE
-1385285632,1385287679,GB
-1385287680,1385291775,EU
+1385283584,1385286143,DE
+1385286144,1385291775,GB
1385291776,1385299967,TR
1385299968,1385308159,BG
1385308160,1385309439,BE
@@ -51298,76 +17146,13 @@
1385529344,1385537535,RU
1385537536,1385545727,DE
1385545728,1385553919,RU
-1385553920,1385554515,DE
-1385554516,1385554519,CH
-1385554520,1385554527,DE
-1385554528,1385554531,AT
-1385554532,1385554719,DE
-1385554720,1385554735,AT
-1385554736,1385557503,DE
-1385557504,1385557759,AT
-1385557760,1385559039,DE
-1385559040,1385559295,SK
-1385559296,1385560831,DE
-1385560832,1385561087,SK
-1385561088,1385562111,DE
-1385562112,1385562623,ES
-1385562624,1385563135,EU
-1385563136,1385563391,IE
-1385563392,1385563647,EU
-1385563648,1385563935,IE
-1385563936,1385564039,EU
-1385564040,1385564055,IE
-1385564056,1385564063,EU
-1385564064,1385564095,IE
-1385564096,1385564103,EU
-1385564104,1385564111,IE
-1385564112,1385564159,EU
-1385564160,1385564231,HU
-1385564232,1385564239,AT
-1385564240,1385564415,EU
-1385564416,1385564671,HU
-1385564672,1385565183,EU
-1385565184,1385565439,ES
-1385565440,1385566335,EU
-1385566336,1385566399,FR
-1385566400,1385566431,EU
-1385566432,1385566975,FR
-1385566976,1385567007,EU
-1385567008,1385567023,FR
-1385567024,1385567087,EU
-1385567088,1385567103,FR
-1385567104,1385567135,EU
-1385567136,1385567155,FR
-1385567156,1385567159,EU
-1385567160,1385567215,FR
-1385567216,1385567223,EU
-1385567224,1385567227,FR
-1385567228,1385567231,EU
+1385553920,1385562111,DE
1385567232,1385568255,IE
-1385568256,1385568767,FR
-1385568768,1385569279,EU
-1385569280,1385569407,FR
-1385569408,1385569455,CZ
-1385569456,1385569471,EU
-1385569472,1385569487,CZ
-1385569488,1385569791,EU
-1385569792,1385570303,FR
1385570304,1385578495,HU
1385578496,1385580543,TR
1385580544,1385580799,DK
1385580800,1385586687,TR
-1385586688,1385587967,GB
-1385587968,1385588735,US
-1385588736,1385589247,HK
-1385589248,1385589503,JP
-1385589504,1385589759,SG
-1385589760,1385590015,JP
-1385590016,1385590783,GB
-1385590784,1385591295,US
-1385591296,1385591807,HK
-1385591808,1385592063,SG
-1385592064,1385594879,GB
+1385586688,1385594879,GB
1385594880,1385603071,NL
1385603072,1385611263,CZ
1385611264,1385619455,AT
@@ -51380,52 +17165,20 @@
1385668608,1385676799,NL
1385676800,1385684991,RU
1385684992,1385824255,GB
-1385824256,1385833471,PT
-1385833472,1385833727,GB
-1385833728,1385955327,PT
+1385824256,1385955327,PT
1385955328,1386086399,NL
-1386086400,1386217319,ES
-1386217320,1386217327,NO
-1386217328,1386217471,ES
+1386086400,1386217471,ES
1386217472,1386283007,PL
1386283008,1386348543,NL
1386348544,1386414079,RU
1386414080,1386479615,GB
1386479616,1386545151,NO
-1386545152,1386549247,DE
-1386549248,1386549503,GB
-1386549504,1386549759,IT
-1386549760,1386550271,ES
-1386550272,1386550527,DE
-1386550528,1386550783,FR
-1386550784,1386551039,GB
-1386551040,1386586111,DE
-1386586112,1386586623,GB
-1386586624,1386587135,FR
-1386587136,1386587903,IT
-1386587904,1386588159,ES
-1386588160,1386590207,DE
-1386590208,1386590719,GB
-1386590720,1386590975,ES
-1386590976,1386591231,IT
-1386591232,1386591487,FR
-1386591488,1386592255,DE
-1386592256,1386592511,PL
-1386592512,1386602495,DE
-1386602496,1386610687,US
+1386545152,1386610687,DE
1386610688,1386676223,IL
1386676224,1386741759,SA
-1386741760,1387233791,NL
-1387233792,1387233919,BE
-1387233920,1387249663,NL
+1386741760,1387249663,NL
1387249664,1387250687,BE
-1387250688,1387251199,NL
-1387251200,1387251231,BE
-1387251232,1387251263,NL
-1387251264,1387251727,BE
-1387251728,1387251751,NL
-1387251752,1387251759,BE
-1387251760,1387331583,NL
+1387250688,1387331583,NL
1387331584,1387397119,PL
1387397120,1387462655,OM
1387462656,1387528191,RU
@@ -51435,45 +17188,12 @@
1387790336,1388314623,IT
1388314624,1388322815,AT
1388322816,1388331007,SI
-1388331008,1388331519,NL
-1388331520,1388331522,FR
-1388331523,1388331524,NL
-1388331525,1388331526,GB
-1388331527,1388331528,DE
-1388331529,1388331532,NL
-1388331533,1388331534,IT
-1388331535,1388331536,NL
-1388331537,1388331538,PL
-1388331539,1388338175,NL
-1388338176,1388338178,FR
-1388338179,1388338180,GB
-1388338181,1388338182,DE
-1388338183,1388338186,NL
-1388338187,1388338188,IT
-1388338189,1388338190,NL
-1388338191,1388338192,PL
-1388338193,1388339199,NL
+1388331008,1388339199,NL
1388339200,1388347391,GB
1388347392,1388363775,DK
1388363776,1388371967,DE
1388371968,1388380159,CH
-1388380160,1388388943,IT
-1388388944,1388388951,NG
-1388388952,1388388959,IT
-1388388960,1388388967,NG
-1388388968,1388389567,IT
-1388389568,1388389631,NG
-1388389632,1388389943,IT
-1388389944,1388389951,NG
-1388389952,1388389967,IT
-1388389968,1388389983,NG
-1388389984,1388390167,IT
-1388390168,1388390191,NG
-1388390192,1388390207,IT
-1388390208,1388394495,NG
-1388394496,1388396031,IT
-1388396032,1388396287,NG
-1388396288,1388396543,IT
+1388380160,1388396543,IT
1388396544,1388404735,LV
1388404736,1388412927,UA
1388412928,1388421119,RU
@@ -51491,50 +17211,16 @@
1388519424,1388527615,NL
1388527616,1388535807,DE
1388535808,1388543999,GB
-1388544000,1388546066,IE
-1388546067,1388546069,GB
-1388546070,1388546159,IE
-1388546160,1388546167,GB
-1388546168,1388547935,IE
-1388547936,1388547951,GB
-1388547952,1388550847,IE
-1388550848,1388550852,IE
-1388550853,1388552191,IE
+1388544000,1388552191,IE
1388552192,1388560383,GB
1388560384,1388568575,FI
-1388568576,1388570841,CH
-1388570842,1388570842,CH
-1388570843,1388576767,CH
-1388576768,1388584959,FR
-1388584960,1388586303,GB
-1388586304,1388586367,EU
-1388586368,1388586391,GB
-1388586392,1388586399,EU
-1388586400,1388586447,GB
-1388586448,1388586455,EU
-1388586456,1388586495,GB
-1388586496,1388587263,EU
-1388587264,1388587391,GB
-1388587392,1388587407,EU
-1388587408,1388587423,GB
-1388587424,1388587439,EU
-1388587440,1388587471,GB
-1388587472,1388587487,EU
-1388587488,1388587503,FR
-1388587504,1388587511,GB
-1388587512,1388587519,EU
-1388587520,1388588543,GB
-1388588544,1388588799,US
+1388568576,1388576767,CH
+1388576768,1388580863,NL
+1388580864,1388584959,FR
+1388587520,1388587775,GB
+1388588288,1388588543,GB
1388588800,1388589823,GB
-1388589824,1388590079,EU
-1388590080,1388590335,FR
-1388590336,1388591103,EU
1388591104,1388591359,AU
-1388591360,1388591615,EU
-1388591616,1388591631,US
-1388591632,1388591647,EU
-1388591648,1388591663,US
-1388591664,1388593151,EU
1388593152,1388601343,RU
1388601344,1388609535,SE
1388609536,1388617727,RU
@@ -51544,103 +17230,62 @@
1388642304,1388650495,FI
1388650496,1388658687,PL
1388658688,1388666879,GB
-1388666880,1388675071,FR
-1388675072,1388675327,NL
-1388675328,1388676863,DE
-1388676864,1388677119,EU
-1388677120,1388677375,GB
-1388677376,1388677631,EU
-1388677632,1388677663,AT
-1388677664,1388677887,EU
-1388677888,1388679167,DE
-1388679168,1388679423,FR
-1388679424,1388679455,DE
-1388679456,1388679679,EU
-1388679680,1388682239,DE
-1388682240,1388682751,EU
-1388682752,1388683263,DE
-1388683264,1388689639,CH
-1388689640,1388689647,DE
-1388689648,1388691455,CH
+1388666880,1388667135,FR
+1388667136,1388667391,RE
+1388667392,1388668671,FR
+1388668672,1388668927,RE
+1388668928,1388669183,FR
+1388669184,1388669439,RE
+1388669440,1388675071,FR
+1388677632,1388677887,NL
+1388678144,1388679167,DE
+1388681216,1388683263,DE
+1388683264,1388683903,CH
+1388683904,1388683919,DE
+1388683920,1388685599,CH
+1388685600,1388685631,GB
+1388685632,1388688127,CH
+1388688128,1388688159,NL
+1388688160,1388691455,CH
1388691456,1388699647,NL
1388699648,1388707839,SE
-1388707840,1388708607,LB
-1388708608,1388709119,LT
-1388709120,1388709375,IQ
-1388709376,1388709887,RU
-1388709888,1388710911,LB
-1388710912,1388711167,IQ
-1388711168,1388711679,RU
+1388707840,1388708095,LB
+1388708096,1388709631,RU
+1388709632,1388709887,LT
+1388709888,1388711679,RU
1388711680,1388711935,LB
-1388711936,1388712191,RU
-1388712192,1388712703,LT
-1388712704,1388713215,LB
-1388713216,1388713471,SE
-1388713472,1388713727,RU
-1388713728,1388713983,LT
-1388713984,1388714239,RU
+1388711936,1388714239,RU
1388714240,1388714495,LB
1388714496,1388714751,RU
-1388714752,1388715007,IQ
+1388714752,1388715007,LT
1388715008,1388715263,LB
-1388715264,1388715519,LT
-1388715520,1388715775,LV
-1388715776,1388716031,LT
+1388715264,1388716031,RU
1388716032,1388724223,ES
1388724224,1388732415,DE
1388732416,1388740607,ES
-1388740608,1388740623,GB
-1388740624,1388740719,IE
-1388740720,1388740727,GB
-1388740728,1388740731,IE
-1388740732,1388740735,GB
-1388740736,1388740847,IE
-1388740848,1388741231,GB
-1388741232,1388741239,IE
-1388741240,1388741375,GB
-1388741376,1388741971,IE
-1388741972,1388741983,GB
-1388741984,1388742067,IE
-1388742068,1388742079,GB
-1388742080,1388742143,IE
-1388742144,1388742335,GB
-1388742336,1388742367,IE
-1388742368,1388742463,GB
-1388742464,1388742479,IE
-1388742480,1388742559,GB
-1388742560,1388742575,IE
-1388742576,1388742719,GB
-1388742720,1388742731,IE
-1388742732,1388742735,IR
-1388742736,1388742795,IE
-1388742796,1388742847,GB
-1388742848,1388743087,IE
-1388743088,1388743099,GB
-1388743100,1388743603,IE
-1388743604,1388743615,GB
-1388743616,1388743650,IE
-1388743651,1388743651,GB
-1388743652,1388744683,IE
-1388744684,1388744687,GB
-1388744688,1388745951,IE
-1388745952,1388745959,GB
-1388745960,1388746263,IE
-1388746264,1388746271,GB
-1388746272,1388746399,IE
-1388746400,1388746495,GB
-1388746496,1388746851,IE
-1388746852,1388746863,GB
-1388746864,1388746967,IE
-1388746968,1388746975,GB
-1388746976,1388748303,IE
-1388748304,1388748319,GB
-1388748320,1388748349,IE
-1388748350,1388748351,GB
-1388748352,1388748663,IE
-1388748664,1388748667,GB
-1388748668,1388748791,IE
-1388748792,1388748795,GB
-1388748796,1388748799,IE
+1388740608,1388741791,GB
+1388741792,1388741795,IE
+1388741796,1388743015,GB
+1388743016,1388743023,IE
+1388743024,1388743047,GB
+1388743048,1388743055,IE
+1388743056,1388743423,GB
+1388743424,1388743435,IE
+1388743436,1388743679,GB
+1388743680,1388743935,IE
+1388743936,1388744391,GB
+1388744392,1388744395,IE
+1388744396,1388744759,GB
+1388744760,1388744767,IE
+1388744768,1388744831,GB
+1388744832,1388744847,IE
+1388744848,1388745971,GB
+1388745972,1388745975,IE
+1388745976,1388746495,GB
+1388746496,1388746751,IE
+1388746752,1388746911,GB
+1388746912,1388746927,IE
+1388746928,1388748799,GB
1388748800,1388756991,RU
1388756992,1388765183,DE
1388765184,1388773375,GB
@@ -51648,32 +17293,15 @@
1388781568,1388789759,ES
1388789760,1388794943,NL
1388794944,1388794959,GB
-1388794960,1388796559,NL
-1388796560,1388796575,GB
-1388796576,1388796679,NL
-1388796680,1388796687,GB
-1388796688,1388796783,NL
-1388796784,1388796799,GB
-1388796800,1388797951,NL
+1388794960,1388796679,NL
+1388796680,1388796681,GB
+1388796682,1388796682,NL
+1388796683,1388796687,GB
+1388796688,1388797951,NL
1388797952,1388806143,RU
-1388806144,1388806911,DE
-1388806912,1388807167,AT
-1388807168,1388807679,DE
-1388807680,1388807711,BZ
-1388807712,1388808255,DE
-1388808256,1388808287,BZ
-1388808288,1388813311,DE
-1388813312,1388813567,FR
-1388813568,1388813823,AR
-1388813824,1388814335,DE
-1388814336,1388815103,AX
-1388815104,1388815231,FI
-1388815232,1388818687,AX
-1388818688,1388818815,FI
-1388818816,1388821119,AX
-1388821120,1388821150,SE
-1388821151,1388821247,AX
-1388821248,1388822527,SE
+1388806144,1388814335,DE
+1388814336,1388822015,AX
+1388822016,1388822527,SE
1388822528,1388830719,AM
1388830720,1388838911,FI
1388838912,1388871679,RU
@@ -51687,258 +17315,28 @@
1389101056,1389133823,NL
1389133824,1389166591,RU
1389166592,1389199359,PS
-1389199360,1389199871,A2
+1389199360,1389199871,AE
1389199872,1389200159,US
-1389200160,1389201919,A2
-1389201920,1389202175,AF
-1389202176,1389203551,A2
-1389203552,1389203567,LB
-1389203568,1389203743,A2
-1389203744,1389203775,IQ
-1389203776,1389203967,A2
-1389203968,1389203999,LY
-1389204000,1389204223,A2
-1389204224,1389204255,IQ
-1389204256,1389204799,A2
-1389204800,1389204863,IQ
-1389204864,1389204879,A2
-1389204880,1389204895,IQ
-1389204896,1389205247,A2
-1389205248,1389205503,AF
-1389205504,1389205631,A2
-1389205632,1389205759,DE
-1389205760,1389205791,A2
-1389205792,1389205823,DE
-1389205824,1389206143,A2
-1389206144,1389206175,LY
-1389206176,1389206783,A2
-1389206784,1389207039,DE
-1389207040,1389207423,A2
-1389207424,1389207487,DE
-1389207488,1389209887,A2
-1389209888,1389209903,IQ
-1389209904,1389210143,A2
-1389210144,1389210207,IQ
-1389210208,1389210271,A2
-1389210272,1389210303,IQ
-1389210304,1389210623,A2
-1389210624,1389210627,IQ
-1389210628,1389210631,US
-1389210632,1389210655,IQ
-1389210656,1389210687,A2
-1389210688,1389210719,IQ
-1389210720,1389210767,A2
-1389210768,1389210783,IQ
-1389210784,1389210815,A2
-1389210816,1389210847,IQ
-1389210848,1389211135,A2
-1389211136,1389211151,IQ
-1389211152,1389211199,A2
-1389211200,1389211263,IQ
-1389211264,1389211343,A2
-1389211344,1389211359,LY
-1389211360,1389211391,A2
-1389211392,1389211423,IQ
-1389211424,1389211439,A2
-1389211440,1389211455,IQ
-1389211456,1389211519,A2
-1389211520,1389211535,IQ
-1389211536,1389211567,A2
-1389211568,1389211647,IQ
-1389211648,1389212159,A2
-1389212160,1389212415,GB
-1389212416,1389212671,A2
-1389212672,1389212767,IQ
-1389212768,1389213087,A2
-1389213088,1389213119,IQ
-1389213120,1389213183,A2
-1389213184,1389213439,LY
-1389213440,1389214719,A2
-1389214720,1389215743,LY
-1389215744,1389215999,AF
-1389216000,1389217535,A2
-1389217536,1389217791,AF
-1389217792,1389218047,A2
-1389218048,1389218303,AE
-1389218304,1389219839,AF
-1389219840,1389220191,A2
-1389220192,1389220207,IQ
-1389220208,1389222543,A2
-1389222544,1389222559,LY
-1389222560,1389222591,SA
-1389222592,1389223679,A2
-1389223680,1389223935,DE
-1389223936,1389224191,US
-1389224192,1389225215,A2
-1389225216,1389225471,US
-1389225472,1389225583,AE
-1389225584,1389225599,IQ
-1389225600,1389225727,AE
-1389225728,1389225983,A2
-1389225984,1389226239,AE
-1389226240,1389226495,A2
-1389226496,1389227775,AE
-1389227776,1389227791,IQ
-1389227792,1389228351,A2
-1389228352,1389228415,AE
+1389200160,1389218815,AE
+1389218816,1389219839,AF
+1389219840,1389228415,AE
1389228416,1389228479,LB
-1389228480,1389229055,A2
-1389229056,1389231359,AE
-1389231360,1389231615,EU
-1389231616,1389231871,A2
-1389231872,1389232127,SA
-1389232128,1389232319,DE
-1389232320,1389232327,LT
-1389232328,1389263615,DE
-1389263616,1389263871,NL
-1389263872,1389264031,DE
-1389264032,1389264063,ES
-1389264064,1389264127,DE
-1389264128,1389264639,ES
-1389264640,1389264895,US
+1389228480,1389232127,AE
+1389232128,1389264895,DE
1389264896,1389265151,TZ
-1389265152,1389265167,NG
-1389265168,1389265183,US
-1389265184,1389265199,ZA
-1389265200,1389265231,ET
-1389265232,1389265239,TZ
-1389265240,1389265263,A2
-1389265264,1389265279,NG
-1389265280,1389265407,TD
-1389265408,1389265663,US
-1389265664,1389266463,A2
-1389266464,1389266471,CD
-1389266472,1389266543,A2
-1389266544,1389266551,CD
-1389266552,1389266559,A2
-1389266560,1389266569,CD
-1389266570,1389266575,A2
-1389266576,1389266591,NG
-1389266592,1389266599,A2
-1389266600,1389266607,NG
-1389266608,1389266663,A2
-1389266664,1389266687,CD
-1389266688,1389266695,ZA
-1389266696,1389266957,A2
+1389265152,1389266957,GB
1389266958,1389266958,NG
-1389266959,1389267199,A2
-1389267200,1389267455,CD
-1389267456,1389267967,A2
-1389267968,1389268223,BI
-1389268224,1389268351,US
-1389268352,1389268479,A2
-1389268480,1389268607,US
-1389268608,1389268735,GB
-1389268736,1389268863,A2
+1389266959,1389268863,GB
1389268864,1389268871,KE
-1389268872,1389269023,A2
-1389269024,1389269031,CD
-1389269032,1389269055,A2
-1389269056,1389269063,CD
-1389269064,1389269151,A2
-1389269152,1389269159,NG
-1389269160,1389269183,A2
-1389269184,1389269215,NG
-1389269216,1389269247,A2
-1389269248,1389269375,NG
-1389269376,1389269759,A2
-1389269760,1389269887,CD
-1389269888,1389270015,A2
-1389270016,1389270079,CD
-1389270080,1389270095,A2
-1389270096,1389270111,CD
-1389270112,1389270815,A2
-1389270816,1389270823,US
-1389270824,1389271039,A2
-1389271040,1389271295,CA
-1389271296,1389272063,A2
-1389272064,1389272191,NO
-1389272192,1389272223,GB
-1389272224,1389272319,A2
-1389272320,1389272575,AE
-1389272576,1389272831,A2
-1389272832,1389272959,ZA
-1389272960,1389273087,FR
-1389273088,1389273343,LB
-1389273344,1389273599,AE
-1389273600,1389273855,MG
-1389273856,1389274111,NG
-1389274112,1389274367,A2
-1389274368,1389274399,US
-1389274400,1389274431,GH
-1389274432,1389274494,US
-1389274495,1389274495,A2
-1389274496,1389274751,ZA
-1389274752,1389274815,CD
-1389274816,1389274839,LR
-1389274840,1389274847,A2
-1389274848,1389274879,LR
-1389274880,1389275135,AE
-1389275136,1389275391,GB
-1389275392,1389275471,BD
-1389275472,1389275503,A2
-1389275504,1389275511,DE
-1389275512,1389275647,A2
+1389268872,1389275647,GB
1389275648,1389275903,ZA
-1389275904,1389276415,US
-1389276416,1389276671,MX
-1389276672,1389277055,A2
-1389277056,1389277183,MX
-1389277184,1389277439,A2
-1389277440,1389277695,IQ
-1389277696,1389277951,AE
-1389277952,1389278207,A2
-1389278208,1389278463,SN
-1389278464,1389278719,MX
-1389278720,1389278975,DE
-1389278976,1389279231,MX
-1389279232,1389279487,US
-1389279488,1389279743,TZ
-1389279744,1389279999,LR
-1389280000,1389280255,CI
-1389280256,1389280511,A2
-1389280512,1389280767,FR
-1389280768,1389281023,VG
-1389281024,1389281279,A2
-1389281280,1389282047,ZA
-1389282048,1389282815,A2
-1389282816,1389282943,LR
-1389282944,1389283071,SN
-1389283072,1389283327,A2
-1389283328,1389283583,LR
-1389283584,1389283711,A2
-1389283712,1389283839,ZA
-1389283840,1389287423,A2
-1389287424,1389287551,US
-1389287552,1389287679,A2
-1389287680,1389287935,DK
-1389287936,1389288447,US
+1389275904,1389288447,GB
1389288448,1389289471,GN
1389289472,1389290495,NO
-1389290496,1389290751,US
-1389290752,1389291007,FR
-1389291008,1389291519,A2
-1389291520,1389292031,US
-1389292032,1389292799,GH
-1389292800,1389293055,MG
-1389293056,1389293311,US
-1389293312,1389294335,A2
-1389294336,1389294591,US
-1389294592,1389294719,A2
-1389294720,1389294847,IQ
-1389294848,1389295615,US
-1389295616,1389295871,ZA
-1389295872,1389296063,US
-1389296064,1389296383,A2
-1389296384,1389296447,AD
-1389296448,1389296639,A2
-1389296640,1389297151,TZ
-1389297152,1389297663,A2
+1389290496,1389297663,GB
1389297664,1389330431,UA
1389330432,1389363199,DE
-1389363200,1389365780,CZ
-1389365781,1389365781,SA
-1389365782,1389379583,CZ
+1389363200,1389379583,CZ
1389379584,1389395967,RU
1389395968,1389412351,RO
1389412352,1389428735,RS
@@ -51946,62 +17344,10 @@
1389445120,1389461503,RU
1389461504,1389477887,SE
1389477888,1389494271,BY
-1389494272,1389495615,DE
-1389495616,1389495645,CH
-1389495646,1389502239,DE
-1389502240,1389502271,CH
-1389502272,1389504511,DE
-1389504512,1389504772,FR
-1389504773,1389504780,CH
-1389504781,1389505023,FR
-1389505024,1389510655,DE
+1389494272,1389510655,DE
1389510656,1389527039,NL
1389527040,1389543423,PL
-1389543424,1389544927,DE
-1389544928,1389544943,SG
-1389544944,1389548991,DE
-1389548992,1389549055,BE
-1389549056,1389552735,DE
-1389552736,1389552743,FR
-1389552744,1389552815,DE
-1389552816,1389552823,NL
-1389552824,1389557247,DE
-1389557248,1389557375,EU
-1389557376,1389557391,DE
-1389557392,1389557503,EU
-1389557504,1389558015,DE
-1389558016,1389558271,EU
-1389558272,1389559743,DE
-1389559744,1389559807,CH
-1389559808,1389560063,DE
-1389560064,1389560319,BR
-1389560320,1389561343,DE
-1389561344,1389561599,IT
-1389561600,1389562111,DE
-1389562112,1389562367,US
-1389562368,1389563135,IT
-1389563136,1389563391,DE
-1389563392,1389563647,IT
-1389563648,1389563775,DE
-1389563776,1389563839,GB
-1389563840,1389563903,DE
-1389563904,1389564159,IT
-1389564160,1389565439,DE
-1389565440,1389565695,IT
-1389565696,1389565951,DE
-1389565952,1389566207,IT
-1389566208,1389566463,BR
-1389566464,1389567231,DE
-1389567232,1389567487,IT
-1389567488,1389568767,DE
-1389568768,1389569023,IT
-1389569024,1389569279,DE
-1389569280,1389569535,US
-1389569536,1389570047,DE
-1389570048,1389570303,IT
-1389570304,1389573887,DE
-1389573888,1389574143,NL
-1389574144,1389576191,DE
+1389543424,1389576191,DE
1389576192,1389592575,GB
1389592576,1389598719,GE
1389598720,1389598975,RU
@@ -52017,29 +17363,16 @@
1389707264,1389723647,IT
1389723648,1389756415,ES
1389756416,1389772799,SE
-1389772800,1389778431,SI
-1389778432,1389778943,CA
-1389778944,1389780735,RS
-1389780736,1389780991,SI
-1389780992,1389782783,HR
-1389782784,1389783039,SI
+1389772800,1389783039,SI
1389783040,1389785087,BA
1389785088,1389787135,MK
-1389787136,1389788671,SI
-1389788672,1389789183,RS
+1389787136,1389789183,SI
1389789184,1389805567,PL
-1389805568,1389806591,US
+1389805568,1389805823,DE
+1389805824,1389806079,US
+1389806080,1389806591,DE
1389806592,1389806847,SA
-1389806848,1389808639,US
-1389808640,1389808895,EU
-1389808896,1389814271,US
-1389814272,1389814527,DE
-1389814528,1389814783,US
-1389814784,1389815039,EU
-1389815040,1389815295,US
-1389815296,1389815551,DE
-1389815552,1389815807,US
-1389815808,1389821951,DE
+1389806848,1389821951,DE
1389821952,1389838335,NL
1389838336,1389854719,UZ
1389854720,1389871103,IT
@@ -52051,18 +17384,13 @@
1390149632,1390215167,CH
1390215168,1390280703,IS
1390280704,1390346239,TR
-1390346240,1390394367,ES
-1390394368,1390394879,PT
-1390394880,1390395391,ES
-1390395392,1390396415,FR
-1390396416,1390397183,PT
-1390397184,1390411775,ES
+1390346240,1390411775,ES
1390411776,1392508927,FR
-1392508928,1394606079,PL
+1392508928,1393623705,PL
+1393623706,1393623706,GB
+1393623707,1394606079,PL
1394606080,1396703231,ES
-1396703232,1396776476,AT
-1396776477,1396776477,AT
-1396776478,1396834303,AT
+1396703232,1396834303,AT
1396834304,1396899839,TR
1396899840,1396965375,GB
1396965376,1396973567,NL
@@ -52080,20 +17408,17 @@
1397071872,1397096447,RU
1397096448,1397227519,IE
1397227520,1397489663,DK
-1397489664,1397751807,CH
+1397489664,1397582847,CH
+1397582848,1397583103,DE
+1397583104,1397583615,CH
+1397583616,1397583871,DE
+1397583872,1397751807,CH
1397751808,1398276095,NL
1398276096,1398800383,DK
-1398800384,1398817279,KW
-1398817280,1398817343,US
-1398817344,1398817407,KW
-1398817408,1398817535,US
-1398817536,1398833151,KW
-1398833152,1398840447,NL
-1398840448,1398840575,GB
-1398840576,1398865919,NL
+1398800384,1398833151,KW
+1398833152,1398865919,NL
1398865920,1398867967,RU
1398867968,1398870015,NL
-1398870016,1398872063,PL
1398872064,1398874111,BG
1398874112,1398876159,GB
1398876160,1398880255,DE
@@ -52104,35 +17429,10 @@
1398888448,1398890495,GB
1398890496,1398892543,DK
1398892544,1398894591,RU
-1398894592,1398896639,DE
1398896640,1398898687,CH
1398898688,1398931455,ES
1398931456,1398964223,GB
-1398964224,1398964543,NL
-1398964544,1398964559,US
-1398964560,1398965503,NL
-1398965504,1398965759,US
-1398965760,1398966839,NL
-1398966840,1398966847,PL
-1398966848,1398967871,NL
-1398967872,1398967903,IE
-1398967904,1398973951,NL
-1398973952,1398974207,US
-1398974208,1398979327,NL
-1398979328,1398979583,US
-1398979584,1398980873,NL
-1398980874,1398980881,US
-1398980882,1398980956,NL
-1398980957,1398980975,US
-1398980976,1398982143,NL
-1398982144,1398982399,US
-1398982400,1398983423,NL
-1398983424,1398983487,GB
-1398983488,1398983519,JE
-1398983520,1398983551,GB
-1398983552,1398983679,NL
-1398983680,1398984191,US
-1398984192,1398996991,NL
+1398964224,1398996991,NL
1398996992,1399029759,LU
1399029760,1399062527,LV
1399062528,1399095295,FI
@@ -52148,69 +17448,37 @@
1399717888,1399848959,AE
1399848960,1400111103,FR
1400111104,1400373247,NL
-1400373248,1400705279,DE
-1400705280,1400705791,EU
-1400705792,1400707071,DE
-1400707072,1400708095,EU
-1400708096,1400709119,DE
-1400709120,1400709120,EU
-1400709121,1400710142,DE
-1400710143,1400710399,EU
-1400710400,1400712191,DE
-1400712192,1400712447,EU
-1400712448,1400712703,DE
-1400712704,1400712959,EU
-1400712960,1400718335,DE
-1400718336,1400718847,EU
-1400718848,1400722431,DE
-1400722432,1400729599,EU
-1400729600,1400730639,DE
-1400730640,1400731135,EU
-1400731136,1400733695,DE
-1400733696,1400897535,EU
+1400373248,1400702463,DE
+1400702976,1400705023,DE
+1400706048,1400707071,DE
+1400709120,1400710143,DE
+1400711168,1400712191,DE
+1400713216,1400718335,DE
+1400719360,1400721407,DE
+1400723456,1400727551,DE
+1400729600,1400730623,DE
+1400731648,1400733695,DE
1400897536,1400963071,NL
1400963072,1401028607,DE
1401028608,1401094143,IL
1401094144,1401159679,HR
1401159680,1401225215,PT
1401225216,1401241599,DE
-1401241600,1401242623,EU
-1401242624,1401244159,DE
-1401244160,1401246719,EU
1401246720,1401257983,DE
-1401257984,1401264127,EU
-1401264128,1401264903,DE
-1401264904,1401265151,EU
-1401265152,1401265919,DE
-1401265920,1401265951,EU
-1401265952,1401265983,DE
-1401265984,1401270271,EU
-1401270272,1401273599,DE
-1401273600,1401273727,EU
-1401273728,1401274367,DE
-1401274368,1401278463,EU
+1401271296,1401274367,DE
1401278464,1401283583,DE
-1401283584,1401286655,EU
1401286656,1401290751,DE
1401290752,1401356287,BE
1401356288,1401421823,DE
1401421824,1401423871,GB
-1401423872,1401423903,AE
-1401423904,1401423967,GR
-1401423968,1401423999,SA
-1401424000,1401425151,AE
-1401425152,1401425407,GR
-1401425408,1401425919,AE
+1401423872,1401425919,AE
1401425920,1401427967,NL
1401427968,1401430015,RU
1401430016,1401432063,AT
1401432064,1401434111,IE
-1401434112,1401436159,RU
1401436160,1401438207,BH
1401438208,1401440255,GB
-1401440256,1401443487,DE
-1401443488,1401443519,GI
-1401443520,1401444351,DE
+1401440256,1401444351,DE
1401444352,1401446399,DK
1401446400,1401448447,DE
1401448448,1401450495,IT
@@ -52230,28 +17498,21 @@
1401477120,1401479167,BE
1401479168,1401481215,PL
1401481216,1401485311,RU
-1401485312,1401487871,GB
-1401487872,1401488127,EU
-1401488128,1401489407,GB
+1401485312,1401489407,GB
1401489408,1401491455,SE
1401491456,1401493503,NL
1401493504,1401495551,CH
1401495552,1401497599,DE
1401497600,1401499647,AT
1401499648,1401501695,RU
-1401501696,1401501791,IT
-1401501792,1401502207,A2
-1401502208,1401502463,IT
-1401502464,1401503487,A2
+1401501696,1401503487,IT
1401503488,1401503743,AL
1401503744,1401505791,DE
1401505792,1401509887,CH
1401509888,1401511935,UA
1401511936,1401513983,DE
1401513984,1401516031,IT
-1401516032,1401516439,AT
-1401516440,1401516447,AE
-1401516448,1401518079,AT
+1401516032,1401518079,AT
1401518080,1401520127,DK
1401520128,1401522175,GB
1401522176,1401526271,NL
@@ -52267,17 +17528,9 @@
1401544704,1401546751,GB
1401546752,1401548799,IT
1401548800,1401550847,FR
-1401550848,1401550879,GB
-1401550880,1401550911,JE
-1401550912,1401550935,GB
-1401550936,1401550975,JE
-1401550976,1401550983,GB
-1401550984,1401551015,JE
-1401551016,1401551023,GB
-1401551024,1401551071,JE
-1401551072,1401551871,GB
-1401551872,1401552383,JE
-1401552384,1401552895,GB
+1401550848,1401551103,GB
+1401551104,1401552639,JE
+1401552640,1401552895,GB
1401552896,1401554943,NL
1401554944,1401556991,IE
1401556992,1401563135,GB
@@ -52291,230 +17544,8 @@
1401634816,1401651199,HR
1401651200,1401667583,RU
1401667584,1401683967,IT
-1401683968,1401684067,SE
-1401684068,1401684071,NO
-1401684072,1401684075,DE
-1401684076,1401684479,SE
-1401684480,1401684511,DK
-1401684512,1401684515,DE
-1401684516,1401684519,SE
-1401684520,1401684527,NL
-1401684528,1401684671,SE
-1401684672,1401684703,DK
-1401684704,1401684731,SE
-1401684732,1401684735,DK
-1401684736,1401684755,NO
-1401684756,1401684759,SE
-1401684760,1401684763,DE
-1401684764,1401684767,SE
-1401684768,1401684895,NO
-1401684896,1401684995,SE
-1401684996,1401684999,DE
-1401685000,1401686015,SE
-1401686016,1401686059,GB
-1401686060,1401686063,DE
-1401686064,1401686143,GB
-1401686144,1401686207,SE
-1401686208,1401686215,NL
-1401686216,1401686223,SE
-1401686224,1401686271,GB
-1401686272,1401686287,SE
-1401686288,1401686291,DE
-1401686292,1401686335,SE
-1401686336,1401686399,NL
-1401686400,1401686911,SE
-1401686912,1401686927,DE
-1401686928,1401686943,SE
-1401686944,1401686947,DE
-1401686948,1401691519,SE
-1401691520,1401691535,DE
-1401691536,1401695263,SE
-1401695264,1401695267,GB
-1401695268,1401695271,SE
-1401695272,1401695275,GB
-1401695276,1401695279,DE
-1401695280,1401697815,SE
-1401697816,1401697823,DE
-1401697824,1401698223,SE
-1401698224,1401698227,GB
-1401698228,1401698231,DE
-1401698232,1401703951,SE
-1401703952,1401703955,DE
-1401703956,1401704511,SE
-1401704512,1401704515,DE
-1401704516,1401705983,SE
-1401705984,1401705987,DE
-1401705988,1401708287,SE
-1401708288,1401708543,DE
-1401708544,1401708671,FR
-1401708672,1401708799,IT
-1401708800,1401708927,FR
-1401708928,1401709055,PL
-1401709056,1401709311,SE
-1401709312,1401709567,GB
-1401709568,1401711615,SE
-1401711616,1401711647,GB
-1401711648,1401711679,DE
-1401711680,1401711711,NL
-1401711712,1401711743,ES
-1401711744,1401711775,DK
-1401711776,1401711807,IT
-1401711808,1401711839,US
-1401711840,1401711871,NL
-1401711872,1401711903,GB
-1401711904,1401711935,DE
-1401711936,1401711967,NL
-1401711968,1401711999,ES
-1401712000,1401712031,DK
-1401712032,1401712063,CH
-1401712064,1401712095,FR
-1401712096,1401712127,NL
-1401712128,1401712159,GB
-1401712160,1401712191,DE
-1401712192,1401712223,SE
-1401712224,1401712255,ES
-1401712256,1401712287,DK
-1401712288,1401712319,SE
-1401712320,1401712351,IT
-1401712352,1401712383,DE
-1401712384,1401712415,GB
-1401712416,1401712447,DE
-1401712448,1401712479,NL
-1401712480,1401712511,ES
-1401712512,1401712543,SE
-1401712544,1401712575,US
-1401712576,1401712607,GB
-1401712608,1401712639,NL
-1401712640,1401712895,SE
-1401712896,1401713151,DE
-1401713152,1401714047,SE
-1401714048,1401714063,FR
-1401714064,1401719935,SE
-1401719936,1401719951,DK
-1401719952,1401719955,GB
-1401719956,1401719959,SE
-1401719960,1401719963,GB
-1401719964,1401719967,DE
-1401719968,1401726783,SE
-1401726784,1401726787,DE
-1401726788,1401727743,SE
-1401727744,1401727999,GB
-1401728000,1401728335,SE
-1401728336,1401728351,NL
-1401728352,1401728431,SE
-1401728432,1401728447,NL
-1401728448,1401740543,SE
-1401740544,1401740799,DE
-1401740800,1401742847,SE
-1401742848,1401742879,GB
-1401742880,1401742895,SE
-1401742896,1401742911,GB
-1401742912,1401743055,SE
-1401743056,1401743071,GB
-1401743072,1401743087,SE
-1401743088,1401743119,GB
-1401743120,1401743151,SE
-1401743152,1401743167,GB
-1401743168,1401743311,SE
-1401743312,1401743327,GB
-1401743328,1401743343,SE
-1401743344,1401743359,GB
-1401743360,1401745439,SE
-1401745440,1401745443,GB
-1401745444,1401745447,US
-1401745448,1401745487,SE
-1401745488,1401745503,ES
-1401745504,1401745919,SE
-1401745920,1401745935,IT
-1401745936,1401745959,SE
-1401745960,1401745967,US
-1401745968,1401745971,MY
-1401745972,1401745975,NL
-1401745976,1401745983,SE
-1401745984,1401745999,NL
-1401746000,1401746015,ES
-1401746016,1401746019,GB
-1401746020,1401746023,SE
-1401746024,1401746027,DE
-1401746028,1401746175,SE
-1401746176,1401746191,DK
-1401746192,1401746215,SE
-1401746216,1401746223,BG
-1401746224,1401746239,SE
-1401746240,1401746255,NL
-1401746256,1401746271,ES
-1401746272,1401746279,GB
-1401746280,1401746283,SE
-1401746284,1401746287,US
-1401746288,1401746291,DE
-1401746292,1401746431,SE
-1401746432,1401746447,NL
-1401746448,1401746467,SE
-1401746468,1401746471,NL
-1401746472,1401746479,US
-1401746480,1401746487,GB
-1401746488,1401746495,SE
-1401746496,1401746511,NL
-1401746512,1401746527,ES
-1401746528,1401746531,DE
-1401746532,1401746623,SE
-1401746624,1401746639,DE
-1401746640,1401746655,SE
-1401746656,1401746687,IE
-1401746688,1401746703,NO
-1401746704,1401746719,SE
-1401746720,1401746723,DE
-1401746724,1401746751,SE
-1401746752,1401746767,NL
-1401746768,1401746783,ES
-1401746784,1401746879,SE
-1401746880,1401746895,DE
-1401746896,1401746943,SE
-1401746944,1401746959,FR
-1401746960,1401747007,SE
-1401747008,1401747023,NL
-1401747024,1401747039,ES
-1401747040,1401747043,DE
-1401747044,1401747135,SE
-1401747136,1401747151,DE
-1401747152,1401747199,SE
-1401747200,1401747215,IT
-1401747216,1401747235,SE
-1401747236,1401747239,US
-1401747240,1401747243,DE
-1401747244,1401747247,SE
-1401747248,1401747263,ES
-1401747264,1401747391,SE
-1401747392,1401747407,DE
-1401747408,1401747423,GB
-1401747424,1401747439,ES
-1401747440,1401747487,SE
-1401747488,1401747495,DK
-1401747496,1401747499,SE
-1401747500,1401747503,GB
-1401747504,1401747583,SE
-1401747584,1401747587,DE
-1401747588,1401747647,SE
-1401747648,1401747663,DE
-1401747664,1401747711,SE
-1401747712,1401747967,FR
-1401747968,1401749135,SE
-1401749136,1401749151,DE
-1401749152,1401749503,SE
-1401749504,1401750719,DE
-1401750720,1401750735,ES
-1401750736,1401753087,DE
-1401753088,1401753343,AT
-1401753344,1401759231,DE
-1401759232,1401759487,GB
-1401759488,1401760255,DE
-1401760256,1401760767,SK
-1401760768,1401764095,DE
-1401764096,1401764351,ES
-1401764352,1401765247,DE
-1401765248,1401765375,NL
-1401765376,1401765759,DE
-1401765760,1401765887,NL
+1401683968,1401749503,SE
+1401749504,1401765887,DE
1401765888,1401782271,IE
1401782272,1401815039,FR
1401815040,1401817087,SE
@@ -52569,7 +17600,6 @@
1401935872,1401937919,FI
1401937920,1401939967,GB
1401939968,1401942015,UA
-1401942016,1401944063,EU
1401944064,1401946111,BG
1401946112,1401962495,FR
1401962496,1401978879,PL
@@ -52577,19 +17607,17 @@
1401995264,1402011647,CH
1402011648,1402018815,SE
1402018816,1402019327,FI
-1402019328,1402021535,SE
-1402021536,1402021567,NO
-1402021568,1402027263,SE
+1402019328,1402027263,SE
1402027264,1402027519,NO
-1402027520,1402027823,SE
-1402027824,1402027831,GB
-1402027832,1402028031,SE
+1402027520,1402028031,SE
1402028032,1402044415,FR
1402044416,1402060799,PL
1402060800,1402077183,FI
1402077184,1402093567,GB
1402093568,1402109951,RU
-1402109952,1402142719,FI
+1402109952,1402129919,FI
+1402129920,1402130175,AX
+1402130176,1402142719,FI
1402142720,1402159103,ES
1402159104,1402175487,IT
1402175488,1402191871,IE
@@ -52601,7 +17629,9 @@
1402273792,1402277631,RU
1402277632,1402277887,TJ
1402277888,1402290175,RU
-1402290176,1402306559,NL
+1402290176,1402306204,NL
+1402306205,1402306205,DE
+1402306206,1402306559,NL
1402306560,1402322943,IT
1402322944,1402339327,RU
1402339328,1402355711,CH
@@ -52612,85 +17642,10 @@
1402408960,1402413055,DE
1402413056,1402417151,PL
1402417152,1402421247,DE
-1402421248,1402421375,NL
-1402421376,1402421735,FR
-1402421736,1402421743,NL
-1402421744,1402422119,FR
-1402422120,1402422127,PT
-1402422128,1402422159,FR
-1402422160,1402422167,AT
-1402422168,1402422783,FR
-1402422784,1402423039,LU
-1402423040,1402423295,FR
-1402423296,1402423399,BE
-1402423400,1402423407,LU
-1402423408,1402423807,BE
-1402423808,1402423839,FR
-1402423840,1402423847,ES
-1402423848,1402423919,FR
-1402423920,1402423927,ES
-1402423928,1402424319,FR
-1402424320,1402424575,BE
-1402424576,1402424831,FR
-1402424832,1402425343,GB
-1402425344,1402425599,DE
-1402425600,1402425855,LU
-1402425856,1402425871,BE
-1402425872,1402425935,FR
-1402425936,1402425943,NL
-1402425944,1402425999,FR
-1402426000,1402426015,CH
-1402426016,1402426271,FR
-1402426272,1402426279,PT
-1402426280,1402426367,FR
-1402426368,1402426623,DE
-1402426624,1402427135,CH
-1402427136,1402427239,GB
-1402427240,1402427247,FR
-1402427248,1402427335,GB
-1402427336,1402427343,FR
-1402427344,1402427535,GB
-1402427536,1402427551,BE
-1402427552,1402427655,GB
-1402427656,1402427663,FR
-1402427664,1402427671,GB
-1402427672,1402427679,NL
-1402427680,1402427903,GB
-1402427904,1402427935,FR
-1402427936,1402427951,GB
-1402427952,1402427959,FR
-1402427960,1402428023,GB
-1402428024,1402428031,AT
-1402428032,1402428095,GB
-1402428096,1402428103,BE
-1402428104,1402428111,GB
-1402428112,1402428119,BE
-1402428120,1402428255,GB
-1402428256,1402428271,AT
-1402428272,1402428279,FR
-1402428280,1402428295,GB
-1402428296,1402428311,BE
-1402428312,1402428319,NL
-1402428320,1402428335,FR
-1402428336,1402428351,BE
-1402428352,1402429439,GB
-1402429440,1402431487,US
-1402431488,1402433535,GB
-1402433536,1402434047,FR
-1402434048,1402434071,GB
-1402434072,1402434079,NL
-1402434080,1402434103,GB
-1402434104,1402434111,NL
-1402434112,1402434559,GB
-1402434560,1402434815,US
-1402434816,1402434895,FR
-1402434896,1402434911,GB
-1402434912,1402434943,FR
-1402434944,1402435071,GB
-1402435072,1402435103,LU
-1402435104,1402435327,GB
-1402435328,1402435343,SE
-1402435344,1402437631,GB
+1402421248,1402422271,FR
+1402422272,1402429439,GB
+1402429440,1402430463,US
+1402430464,1402437631,GB
1402437632,1402454015,DK
1402454016,1402470399,GB
1402470400,1402994687,FR
@@ -52698,26 +17653,14 @@
1403256832,1403322367,AT
1403322368,1403387903,ES
1403387904,1403396095,SE
-1403396096,1403400191,EE
-1403400192,1403400207,TR
-1403400208,1403400215,EE
-1403400216,1403400219,US
-1403400220,1403400239,EE
-1403400240,1403400255,BG
-1403400256,1403400263,EE
-1403400264,1403400271,US
-1403400272,1403404287,EE
+1403396096,1403404287,EE
1403404288,1403412479,GB
1403412480,1403420671,RU
1403420672,1403428863,NL
1403428864,1403437055,GB
1403437056,1403445247,RO
1403445248,1403461631,RU
-1403461632,1403462015,FR
-1403462016,1403462031,GB
-1403462032,1403465727,FR
-1403465728,1403465743,GB
-1403465744,1403469823,FR
+1403461632,1403469823,FR
1403469824,1403486207,RU
1403486208,1403494399,FR
1403494400,1403502591,GB
@@ -52725,9 +17668,7 @@
1403510784,1403518975,CZ
1403518976,1403535359,CY
1403535360,1403551743,PL
-1403551744,1403556503,SK
-1403556504,1403556511,SR
-1403556512,1403568127,SK
+1403551744,1403568127,SK
1403568128,1403573247,SE
1403573248,1403573503,ES
1403573504,1403574783,SE
@@ -52736,24 +17677,15 @@
1403576064,1403576319,DE
1403576320,1403578879,SE
1403578880,1403579135,DK
-1403579136,1403580159,SE
-1403580160,1403580415,GB
-1403580416,1403581951,SE
+1403579136,1403581951,SE
1403581952,1403582207,US
1403582208,1403584511,SE
1403584512,1403600895,DE
-1403600896,1403601519,FR
-1403601520,1403601535,MC
-1403601536,1403617279,FR
+1403600896,1403617279,FR
1403617280,1403633663,DE
1403633664,1403650047,RU
-1403650048,1403653631,A2
-1403653632,1403653663,DE
-1403653664,1403666431,A2
-1403666432,1403682815,GB
-1403682816,1403688959,A2
-1403688960,1403692031,GB
-1403692032,1403699199,A2
+1403650048,1403666431,DE
+1403666432,1403699199,GB
1403699200,1403715583,UA
1403715584,1403731967,LT
1403731968,1403748351,RU
@@ -52761,10 +17693,10 @@
1403764736,1403781119,GR
1403781120,1403797503,RU
1403797504,1403813887,SE
-1403813888,1403827199,NL
-1403827200,1403827711,BE
-1403827712,1403830271,NL
-1403830272,1403846655,CH
+1403813888,1403830271,NL
+1403830272,1403838719,CH
+1403838720,1403838975,RU
+1403838976,1403846655,CH
1403846656,1403863039,IS
1403863040,1403879423,FR
1403879424,1403895807,ES
@@ -52780,105 +17712,186 @@
1404043264,1404051455,EE
1404051456,1404059647,HR
1404059648,1404076031,NO
-1404076032,1404076287,EE
-1404076288,1404076543,DE
-1404076544,1404081663,LV
-1404081664,1404083711,DE
-1404083712,1404092415,NO
+1404076032,1404077055,SE
+1404077056,1404081151,LV
+1404081152,1404082175,SE
+1404082176,1404083199,DE
+1404083200,1404084223,SE
+1404084224,1404092415,NO
1404092416,1404108799,SE
1404108800,1404112895,NL
1404112896,1404114943,HR
1404114944,1404116991,SE
1404116992,1404125183,NO
-1404125184,1404151807,SE
-1404151808,1404152063,EE
-1404152064,1404166143,SE
-1404166144,1404170239,LV
-1404170240,1404174335,EE
-1404174336,1404184063,SE
-1404184064,1404184575,NO
-1404184576,1404186623,SE
-1404186624,1404187647,NO
-1404187648,1404188671,SE
-1404188672,1404189183,LT
-1404189184,1404189695,EE
-1404189696,1404190719,NO
+1404125184,1404135423,SE
+1404135424,1404137471,NL
+1404137472,1404139519,SE
+1404139520,1404141567,NL
+1404141568,1404166143,SE
+1404166144,1404174335,LV
+1404174336,1404182527,EE
+1404182528,1404189183,SE
+1404189184,1404190719,EE
1404190720,1404192767,SE
1404192768,1404194815,LV
-1404194816,1404195839,LT
-1404195840,1404196351,NO
-1404196352,1404197375,LT
-1404197376,1404197887,NO
-1404197888,1404198911,LT
+1404194816,1404198911,LT
1404198912,1404200959,SE
1404200960,1404203007,NL
1404203008,1404207103,HR
-1404207104,1404210175,NO
+1404207104,1404209151,LV
+1404209152,1404210175,NO
1404210176,1404212223,LV
1404212224,1404215295,SE
1404215296,1404219391,LV
1404219392,1404220415,SE
1404220416,1404221439,EE
1404221440,1404222463,RU
-1404222464,1404222975,LV
-1404222976,1404225535,SE
+1404222464,1404225535,SE
1404225536,1404227071,RU
-1404227072,1404227583,HR
+1404227072,1404227583,SE
1404227584,1404231679,LV
1404231680,1404232191,SE
1404232192,1404232703,NO
-1404232704,1404233215,LV
-1404233216,1404234239,SE
-1404234240,1404235775,HR
-1404235776,1404256255,SE
+1404232704,1404234751,SE
+1404234752,1404239871,HR
+1404239872,1404256255,SE
1404256256,1404305407,RU
1404305408,1404313599,EE
1404313600,1404321791,HR
1404321792,1404338175,RU
1404338176,1404340223,SE
1404340224,1404342271,HR
-1404342272,1404371071,SE
-1404371072,1404371087,EE
-1404371088,1404371095,SE
-1404371096,1404371103,EE
-1404371104,1404371135,SE
-1404371136,1404371167,EE
-1404371168,1404379135,SE
+1404342272,1404379135,SE
1404379136,1404383231,AT
1404383232,1404385279,HR
1404385280,1404386047,LT
1404386048,1404387327,SE
-1404387328,1404395519,DE
-1404395520,1404415999,LT
-1404416000,1404420095,EE
+1404387328,1404420095,LT
1404420096,1404436479,RU
-1404436480,1404567551,SE
+1404436480,1404444671,SE
+1404444672,1404445951,NO
+1404445952,1404446207,SE
+1404446208,1404446719,NO
+1404446720,1404446975,SE
+1404446976,1404447999,NO
+1404448000,1404448255,SE
+1404448256,1404452863,NO
+1404452864,1404510207,SE
+1404510208,1404510975,HR
+1404510976,1404511231,SE
+1404511232,1404512255,HR
+1404512256,1404512767,SE
+1404512768,1404513023,HR
+1404513024,1404514303,SE
+1404514304,1404514559,HR
+1404514560,1404514815,SE
+1404514816,1404515071,HR
+1404515072,1404515327,SE
+1404515328,1404515839,HR
+1404515840,1404516095,SE
+1404516096,1404518143,HR
+1404518144,1404522495,SE
+1404522496,1404526591,LV
+1404526592,1404538879,SE
+1404538880,1404542975,LV
+1404542976,1404559359,SE
+1404559360,1404563455,LV
+1404563456,1404567551,SE
1404567552,1404583935,HR
1404583936,1404600319,NO
-1404600320,1404645375,SE
-1404645376,1404645887,HR
-1404645888,1404677888,SE
-1404677889,1404678143,EE
-1404678144,1404764159,SE
+1404600320,1404678143,SE
+1404678144,1404680191,HR
+1404680192,1404731391,SE
+1404731392,1404732159,HR
+1404732160,1404732671,SE
+1404732672,1404733951,HR
+1404733952,1404734207,SE
+1404734208,1404736511,HR
+1404736512,1404736767,SE
+1404736768,1404740095,HR
+1404740096,1404740351,SE
+1404740352,1404740863,HR
+1404740864,1404741119,SE
+1404741120,1404742911,HR
+1404742912,1404743679,SE
+1404743680,1404744959,HR
+1404744960,1404745215,SE
+1404745216,1404745983,HR
+1404745984,1404746495,SE
+1404746496,1404748031,HR
+1404748032,1404748287,SE
+1404748288,1404748799,HR
+1404748800,1404749311,SE
+1404749312,1404749567,HR
+1404749568,1404750079,SE
+1404750080,1404752639,HR
+1404752640,1404752895,SE
+1404752896,1404754943,HR
+1404754944,1404755199,SE
+1404755200,1404755967,HR
+1404755968,1404756223,SE
+1404756224,1404756479,HR
+1404756480,1404756735,SE
+1404756736,1404757247,HR
+1404757248,1404757503,SE
+1404757504,1404759551,HR
+1404759552,1404759807,SE
+1404759808,1404760063,HR
+1404760064,1404760319,SE
+1404760320,1404760831,HR
+1404760832,1404761087,SE
+1404761088,1404762111,HR
+1404762112,1404762367,SE
+1404762368,1404762623,HR
+1404762624,1404763135,SE
+1404763136,1404763647,HR
+1404763648,1404763903,SE
+1404763904,1404764159,HR
1404764160,1404780543,NL
-1404780544,1404796927,SE
+1404780544,1404788735,SE
+1404788736,1404790527,NL
+1404790528,1404790783,SE
+1404790784,1404791039,NL
+1404791040,1404791295,SE
+1404791296,1404791807,NL
+1404791808,1404792063,SE
+1404792064,1404792575,NL
+1404792576,1404792831,SE
+1404792832,1404793599,NL
+1404793600,1404793855,SE
+1404793856,1404795135,NL
+1404795136,1404795391,SE
+1404795392,1404795647,NL
+1404795648,1404795903,SE
+1404795904,1404796927,NL
1404796928,1404801023,EE
-1404801024,1404802047,SE
-1404802048,1404803071,EE
-1404803072,1404804095,LV
+1404801024,1404803071,SE
+1404803072,1404803327,LV
+1404803328,1404803583,SE
+1404803584,1404804095,LV
1404804096,1404805119,SE
1404805120,1404813311,AT
1404813312,1404815871,EE
1404815872,1404816383,LT
1404816384,1404821503,NL
-1404821504,1404829695,SE
+1404821504,1404821759,SE
+1404821760,1404822271,NL
+1404822272,1404822527,SE
+1404822528,1404822783,NL
+1404822784,1404823039,SE
+1404823040,1404825087,NL
+1404825088,1404825343,SE
+1404825344,1404826367,NL
+1404826368,1404826623,SE
+1404826624,1404827135,NL
+1404827136,1404827903,SE
+1404827904,1404829695,NL
1404829696,1404870655,RU
1404870656,1404872703,LT
1404872704,1404874751,SE
1404874752,1404875775,LV
-1404875776,1404876799,LT
-1404876800,1404895231,SE
-1404895232,1404927999,DE
+1404875776,1404887039,SE
+1404887040,1404927999,NL
1404928000,1404944383,SE
1404944384,1404960767,LT
1404960768,1405026303,SE
@@ -52888,18 +17901,27 @@
1405050880,1405059071,AT
1405059072,1405063167,SE
1405063168,1405067263,NO
-1405067264,1405075455,DE
-1405075456,1405083647,EE
+1405067264,1405083647,EE
1405083648,1405091839,SE
-1405091840,1406010111,FR
-1406010112,1406010367,RE
-1406010368,1406140415,FR
+1405091840,1405815295,FR
+1405815296,1405815551,MQ
+1405815552,1405820927,FR
+1405820928,1405821183,MQ
+1405821184,1405822719,FR
+1405822720,1405822975,MQ
+1405822976,1405834751,FR
+1405834752,1405835007,MQ
+1405835008,1405850879,FR
+1405850880,1405851135,MQ
+1405851136,1405858815,FR
+1405858816,1405859071,MQ
+1405859072,1405871103,FR
+1405871104,1405871359,MQ
+1405871360,1406140415,FR
1406140416,1406205951,CZ
1406205952,1406271487,SE
1406271488,1406337023,IE
-1406337024,1406376703,IT
-1406376704,1406376959,US
-1406376960,1406402559,IT
+1406337024,1406402559,IT
1406402560,1406468095,GR
1406468096,1406533631,ES
1406533632,1406599167,FR
@@ -52909,113 +17931,43 @@
1406681088,1406689279,GB
1406689280,1406697471,SE
1406697472,1406705663,GB
-1406705664,1406708735,IT
-1406708736,1406709247,A2
-1406709248,1406710015,IT
-1406710016,1406710263,A2
-1406710264,1406710271,IT
-1406710272,1406710911,A2
-1406710912,1406710927,IT
-1406710928,1406711295,A2
-1406711296,1406712063,IT
-1406712064,1406713343,A2
-1406713344,1406713855,IT
-1406713856,1406714879,AT
-1406714880,1406715391,NL
-1406715392,1406715519,AT
-1406715520,1406715647,NL
-1406715648,1406715711,AT
-1406715712,1406716415,NL
-1406716416,1406716671,AT
-1406716672,1406716927,NL
-1406716928,1406717439,AT
-1406717440,1406717695,NL
-1406717696,1406717951,DE
-1406717952,1406718015,GB
-1406718016,1406718019,AT
-1406718020,1406719487,GB
-1406719488,1406719743,AT
+1406705664,1406713855,IT
+1406713856,1406719743,AT
1406719744,1406719999,GB
-1406720000,1406721023,AT
-1406721024,1406721279,DE
-1406721280,1406722047,GB
+1406720000,1406722047,AT
1406722048,1406730239,DE
1406730240,1406746623,RU
1406746624,1406754815,BE
1406754816,1406763007,GB
-1406763008,1406764031,BE
-1406764032,1406765055,LU
-1406765056,1406766079,BE
-1406766080,1406766591,LU
-1406766592,1406767103,BE
-1406767104,1406768127,LU
-1406768128,1406769407,BE
-1406769408,1406769663,LU
-1406769664,1406770175,BE
-1406770176,1406771199,LU
+1406763008,1406763263,BE
+1406763264,1406764799,LU
+1406764800,1406765055,BE
+1406765056,1406765311,LU
+1406765312,1406765823,BE
+1406765824,1406766335,LU
+1406766336,1406767103,BE
+1406767104,1406767615,LU
+1406767616,1406767871,BE
+1406767872,1406768127,LU
+1406768128,1406768383,BE
+1406768384,1406769407,LU
+1406769408,1406769663,BE
+1406769664,1406770431,LU
+1406770432,1406770687,BE
+1406770688,1406770943,LU
+1406770944,1406771199,BE
1406771200,1406779391,GB
1406779392,1406787583,RU
-1406787584,1406787679,GB
-1406787680,1406787687,ES
-1406787688,1406787695,IL
-1406787696,1406787935,GB
-1406787936,1406787967,ES
-1406787968,1406788055,GB
-1406788056,1406788095,ES
-1406788096,1406788351,NL
-1406788352,1406788479,BG
-1406788480,1406788607,ES
-1406788608,1406788711,GB
-1406788712,1406789119,ES
-1406789120,1406789135,GB
-1406789136,1406789182,FR
-1406789183,1406789183,ES
-1406789184,1406789247,GB
-1406789248,1406789375,ES
-1406789376,1406789503,RO
-1406789504,1406789631,ES
-1406789632,1406789887,FR
-1406789888,1406790015,HU
-1406790016,1406790143,ES
-1406790144,1406790176,GB
-1406790177,1406790207,ES
-1406790208,1406791087,GB
-1406791088,1406791103,ES
-1406791104,1406791135,GB
-1406791136,1406791143,IL
-1406791144,1406791159,ES
-1406791160,1406791167,GB
-1406791168,1406791423,ES
-1406791424,1406791551,GB
-1406791552,1406791679,ES
-1406791680,1406791935,GB
-1406791936,1406791967,DE
-1406791968,1406792191,ES
-1406792192,1406792703,GB
-1406792704,1406792719,FR
-1406792720,1406792735,GB
-1406792736,1406793119,FR
-1406793120,1406793215,ES
-1406793216,1406793743,GB
-1406793744,1406793759,DE
-1406793760,1406793831,GB
-1406793832,1406793832,ES
-1406793833,1406793839,GB
-1406793840,1406793843,IL
-1406793844,1406793983,GB
-1406793984,1406794175,ES
-1406794176,1406794238,GB
-1406794239,1406794239,ES
-1406794240,1406794495,GB
-1406794496,1406794511,ES
-1406794512,1406794529,FR
-1406794530,1406794751,ES
+1406787584,1406791167,ES
+1406791168,1406791295,GB
+1406791296,1406793843,ES
+1406793844,1406793847,GB
+1406793848,1406794751,ES
1406794752,1406795775,NL
-1406795776,1406797823,IM
-1406797824,1406798591,GB
-1406798592,1406798847,IM
-1406798848,1406802943,GB
-1406802944,1406803967,IM
+1406795776,1406796543,GB
+1406796544,1406796799,IM
+1406796800,1406803455,GB
+1406803456,1406803967,IM
1406803968,1406812159,DE
1406812160,1406820351,SE
1406820352,1406828543,PL
@@ -53031,28 +17983,19 @@
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,1406964287,DE
-1406964288,1406964327,NL
-1406964328,1406967343,DE
-1406967344,1406967399,GB
-1406967400,1406967407,DE
-1406967408,1406967423,GB
-1406967424,1406967551,DE
-1406967552,1406967615,GB
-1406967616,1406967807,DE
+1406959616,1406964351,DE
+1406964352,1406964479,NL
+1406964480,1406967807,DE
1406967808,1406975999,RU
1406976000,1406984191,IE
1406984192,1407000575,RU
1407000576,1407016959,DE
1407016960,1407025151,IT
-1407025152,1407025663,DK
-1407025664,1407025919,US
-1407025920,1407033343,DK
+1407025152,1407033343,DK
1407033344,1407034367,UZ
1407034368,1407035391,RU
1407035392,1407041535,UZ
@@ -53061,7 +18004,8 @@
1407057920,1407066111,RU
1407066112,1407074303,LU
1407074304,1407089663,RU
-1407089664,1407090687,US
+1407089664,1407090559,US
+1407090560,1407090687,RU
1407090688,1407098879,CH
1407098880,1407107071,BG
1407107072,1407115263,RU
@@ -53069,25 +18013,7 @@
1407123456,1407131647,SE
1407131648,1407139839,NL
1407139840,1407148031,DE
-1407148032,1407149695,GB
-1407149696,1407149759,CY
-1407149760,1407149791,SE
-1407149792,1407150335,GB
-1407150336,1407150591,SE
-1407150592,1407151615,GB
-1407151616,1407151871,SE
-1407151872,1407152259,GB
-1407152260,1407152263,IE
-1407152264,1407152287,US
-1407152288,1407154443,GB
-1407154444,1407154447,SE
-1407154448,1407154623,GB
-1407154624,1407154631,SE
-1407154632,1407154679,GB
-1407154680,1407154687,US
-1407154688,1407154815,GB
-1407154816,1407154819,IE
-1407154820,1407156223,GB
+1407148032,1407156223,GB
1407156224,1407164415,LV
1407164416,1407172607,PT
1407172608,1407180799,GB
@@ -53096,1321 +18022,43 @@
1407320064,1407451135,SE
1407451136,1407483903,BG
1407483904,1407516671,CH
-1407516672,1407516687,GB
-1407516688,1407516695,NG
-1407516696,1407516703,GB
-1407516704,1407516711,NG
-1407516712,1407516727,GB
-1407516728,1407516735,NG
-1407516736,1407516743,UG
-1407516744,1407516751,LR
-1407516752,1407516767,GB
-1407516768,1407516775,AO
-1407516776,1407516783,GR
-1407516784,1407516791,NG
-1407516792,1407516807,GB
-1407516808,1407516815,NG
-1407516816,1407516847,GB
-1407516848,1407516855,NG
-1407516856,1407516863,GB
-1407516864,1407516871,NG
-1407516872,1407516879,GB
-1407516880,1407516895,NG
-1407516896,1407516911,GB
-1407516912,1407516927,NG
-1407516928,1407516935,GB
-1407516936,1407516943,CD
-1407516944,1407516951,NG
-1407516952,1407516959,GB
-1407516960,1407516967,NG
-1407516968,1407516983,GB
-1407516984,1407516991,KE
-1407516992,1407516999,CD
-1407517000,1407517023,GB
-1407517024,1407517031,GQ
-1407517032,1407517055,GB
-1407517056,1407517063,UG
-1407517064,1407517071,GQ
-1407517072,1407517079,GB
-1407517080,1407517087,CD
-1407517088,1407517135,GB
-1407517136,1407517143,NG
-1407517144,1407517151,GB
-1407517152,1407517159,CD
-1407517160,1407517363,GB
-1407517364,1407517367,CD
-1407517368,1407517371,GB
-1407517372,1407517375,LR
-1407517376,1407517379,NG
-1407517380,1407517383,GB
-1407517384,1407517391,CD
-1407517392,1407517423,GB
-1407517424,1407517431,US
-1407517432,1407517439,NG
-1407517440,1407517703,GB
-1407517704,1407517719,US
-1407517720,1407517735,GB
-1407517736,1407517743,US
-1407517744,1407517751,GB
-1407517752,1407517775,US
-1407517776,1407517815,GB
-1407517816,1407517823,US
-1407517824,1407517887,GQ
-1407517888,1407517919,GB
-1407517920,1407517927,TD
-1407517928,1407517951,GB
-1407517952,1407518015,SL
-1407518016,1407518039,GB
-1407518040,1407518047,CD
-1407518048,1407518055,GB
-1407518056,1407518063,NG
-1407518064,1407518079,GB
-1407518080,1407518087,FR
-1407518088,1407518111,GB
-1407518112,1407518127,NG
-1407518128,1407518135,ZW
-1407518136,1407518143,GH
-1407518144,1407518151,GB
-1407518152,1407518159,BF
-1407518160,1407518167,GB
-1407518168,1407518175,CD
-1407518176,1407518191,GB
-1407518192,1407518199,NG
-1407518200,1407518207,VG
-1407518208,1407518215,LR
-1407518216,1407518231,GB
-1407518232,1407518239,IL
-1407518240,1407518255,NG
-1407518256,1407518263,CD
-1407518264,1407518267,GB
-1407518268,1407518271,VG
-1407518272,1407518335,GB
-1407518336,1407518343,CG
-1407518344,1407518345,GB
-1407518346,1407518353,BF
-1407518354,1407518359,GB
-1407518360,1407518367,NG
-1407518368,1407518375,ZA
-1407518376,1407518383,AO
-1407518384,1407518831,GB
-1407518832,1407518847,NG
-1407518848,1407518911,FR
-1407518912,1407518943,NG
-1407518944,1407518975,GB
-1407518976,1407518983,NG
-1407518984,1407518991,GB
-1407518992,1407518999,NG
-1407519000,1407519015,GB
-1407519016,1407519023,AO
-1407519024,1407519031,GB
-1407519032,1407519039,AO
-1407519040,1407519047,NG
-1407519048,1407519055,GB
-1407519056,1407519063,NG
-1407519064,1407519071,BJ
-1407519072,1407519087,GB
-1407519088,1407519095,NG
-1407519096,1407519103,CM
-1407519104,1407519111,NG
-1407519112,1407519119,SL
-1407519120,1407519127,GB
-1407519128,1407519135,SL
-1407519136,1407519143,GB
-1407519144,1407519151,AO
-1407519152,1407519159,GB
-1407519160,1407519167,AO
-1407519168,1407519175,GB
-1407519176,1407519183,SL
-1407519184,1407519191,GB
-1407519192,1407519199,CD
-1407519200,1407519207,GB
-1407519208,1407519215,TD
-1407519216,1407519231,GB
-1407519232,1407519615,NG
-1407519616,1407519767,GB
-1407519768,1407519775,CD
-1407519776,1407519783,CG
-1407519784,1407519791,GB
-1407519792,1407519799,NG
-1407519800,1407519839,GB
-1407519840,1407519847,CD
-1407519848,1407519855,NG
-1407519856,1407519863,GB
-1407519864,1407519871,NG
-1407519872,1407519879,GB
-1407519880,1407519887,NG
-1407519888,1407519903,GB
-1407519904,1407519911,NG
-1407519912,1407519943,GB
-1407519944,1407519959,CD
-1407519960,1407519991,GB
-1407519992,1407519999,NG
-1407520000,1407520015,GB
-1407520016,1407520023,NG
-1407520024,1407520071,GB
-1407520072,1407520079,CM
-1407520080,1407520087,NG
-1407520088,1407520127,GB
-1407520128,1407520135,CD
-1407520136,1407520143,GB
-1407520144,1407520151,GN
-1407520152,1407520152,GB
-1407520153,1407520159,GN
-1407520160,1407520207,GB
-1407520208,1407520215,NG
-1407520216,1407520223,CD
-1407520224,1407520231,SD
-1407520232,1407520239,GB
-1407520240,1407520247,NE
-1407520248,1407520271,GB
-1407520272,1407520279,NG
-1407520280,1407520311,GB
-1407520312,1407520327,NG
-1407520328,1407520335,SL
-1407520336,1407520351,GB
-1407520352,1407520359,NG
-1407520360,1407520367,CD
-1407520368,1407520375,GB
-1407520376,1407520397,NG
-1407520398,1407520415,GB
-1407520416,1407520423,AO
-1407520424,1407520439,GB
-1407520440,1407520447,CD
-1407520448,1407520463,NG
-1407520464,1407520511,GB
-1407520512,1407520767,NG
-1407520768,1407520791,GB
-1407520792,1407520799,ZA
-1407520800,1407520807,GB
-1407520808,1407520815,MU
-1407520816,1407520823,GR
-1407520824,1407520831,CI
-1407520832,1407520847,GB
-1407520848,1407520855,ZM
-1407520856,1407520863,GB
-1407520864,1407520871,TZ
-1407520872,1407520879,CD
-1407520880,1407520887,GB
-1407520888,1407520895,GR
-1407520896,1407520911,GB
-1407520912,1407520919,ZW
-1407520920,1407520927,IQ
-1407520928,1407520935,GB
-1407520936,1407520943,CD
-1407520944,1407520951,GB
-1407520952,1407520959,ZM
-1407520960,1407520975,GB
-1407520976,1407520983,ZM
-1407520984,1407520991,GB
-1407520992,1407520999,IQ
-1407521000,1407521007,GB
-1407521008,1407521015,CD
-1407521016,1407521023,GB
-1407521024,1407521031,ZM
-1407521032,1407521047,GB
-1407521048,1407521055,NG
-1407521056,1407521063,KE
-1407521064,1407521071,NG
-1407521072,1407521087,UG
-1407521088,1407521095,NG
-1407521096,1407521127,GB
-1407521128,1407521135,NG
-1407521136,1407521143,GB
-1407521144,1407521151,ZM
-1407521152,1407521159,NG
-1407521160,1407521191,GB
-1407521192,1407521199,CD
-1407521200,1407521207,GB
-1407521208,1407521215,IQ
-1407521216,1407521223,GB
-1407521224,1407521231,TZ
-1407521232,1407521247,GB
-1407521248,1407521279,GH
-1407521280,1407521287,GB
-1407521288,1407521295,UG
-1407521296,1407521415,GB
-1407521416,1407521423,LR
-1407521424,1407521639,GB
-1407521640,1407521647,NG
-1407521648,1407522303,GB
-1407522304,1407522559,A2
-1407522560,1407522567,US
-1407522568,1407522575,NG
-1407522576,1407522583,GB
-1407522584,1407522591,GL
-1407522592,1407522599,UG
-1407522600,1407522607,ZM
-1407522608,1407522615,AO
-1407522616,1407522639,GB
-1407522640,1407522647,UG
-1407522648,1407522671,GB
-1407522672,1407522679,ZM
-1407522680,1407522687,SD
-1407522688,1407522703,GB
-1407522704,1407522711,US
-1407522712,1407522727,GB
-1407522728,1407522735,ZW
-1407522736,1407522743,GB
-1407522744,1407522751,NG
-1407522752,1407522767,ZM
-1407522768,1407522775,GB
-1407522776,1407522783,TD
-1407522784,1407522799,GB
-1407522800,1407522807,NG
-1407522808,1407522815,GB
-1407522816,1407522823,CD
-1407522824,1407522831,NG
-1407522832,1407522839,MZ
-1407522840,1407522847,NG
-1407522848,1407522855,GB
-1407522856,1407522863,ZW
-1407522864,1407522871,GB
-1407522872,1407522879,IQ
-1407522880,1407522887,MU
-1407522888,1407522903,GB
-1407522904,1407522911,KE
-1407522912,1407522919,CG
-1407522920,1407522927,GB
-1407522928,1407522935,GR
-1407522936,1407522967,GB
-1407522968,1407522975,MU
-1407522976,1407522983,CD
-1407522984,1407522991,GB
-1407522992,1407522999,CD
-1407523000,1407523015,GB
-1407523016,1407523023,KE
-1407523024,1407523047,GB
-1407523048,1407523055,NG
-1407523056,1407523063,MU
-1407523064,1407523071,GB
-1407523072,1407523079,UG
-1407523080,1407523087,GB
-1407523088,1407523088,NG
-1407523089,1407523103,GB
-1407523104,1407523111,UG
-1407523112,1407523119,GB
-1407523120,1407523127,CD
-1407523128,1407523135,GB
-1407523136,1407523143,BJ
-1407523144,1407523159,GB
-1407523160,1407523167,LR
-1407523168,1407523175,GB
-1407523176,1407523183,UG
-1407523184,1407523207,GB
-1407523208,1407523215,SD
-1407523216,1407523223,BI
-1407523224,1407523231,SO
-1407523232,1407523255,GB
-1407523256,1407523263,NG
-1407523264,1407523271,GB
-1407523272,1407523279,US
-1407523280,1407523287,GB
-1407523288,1407523295,NG
-1407523296,1407523303,GR
-1407523304,1407523311,NG
-1407523312,1407523327,GB
-1407523328,1407523335,MW
-1407523336,1407523343,TD
-1407523344,1407523375,GB
-1407523376,1407523391,KE
-1407523392,1407523415,GB
-1407523416,1407523423,ES
-1407523424,1407523455,GB
-1407523456,1407523463,IQ
-1407523464,1407523479,KE
-1407523480,1407523487,GB
-1407523488,1407523495,SO
-1407523496,1407523511,GB
-1407523512,1407523519,IQ
-1407523520,1407523535,GB
-1407523536,1407523543,SO
-1407523544,1407523551,NG
-1407523552,1407523559,CM
-1407523560,1407523567,KE
-1407523568,1407523575,CD
-1407523576,1407523583,FR
-1407523584,1407523591,IQ
-1407523592,1407523623,GB
-1407523624,1407523655,IQ
-1407523656,1407523663,GB
-1407523664,1407523679,IQ
-1407523680,1407523687,GB
-1407523688,1407523719,IQ
-1407523720,1407523743,GB
-1407523744,1407523751,IQ
-1407523752,1407523799,GB
-1407523800,1407523807,SY
-1407523808,1407523831,GB
-1407523832,1407523839,IQ
-1407523840,1407523871,GB
-1407523872,1407523879,SS
-1407523880,1407523895,GB
-1407523896,1407523903,GR
-1407523904,1407523911,UG
-1407523912,1407523919,GB
-1407523920,1407523935,GN
-1407523936,1407523943,SL
-1407523944,1407523951,GN
-1407523952,1407523959,GB
-1407523960,1407523967,SS
-1407523968,1407524047,GB
-1407524048,1407524055,MU
-1407524056,1407524087,GB
-1407524088,1407524095,CD
-1407524096,1407524103,MW
-1407524104,1407524143,GB
-1407524144,1407524151,VG
-1407524152,1407524159,GB
-1407524160,1407524167,CD
-1407524168,1407524207,GB
-1407524208,1407524215,CD
-1407524216,1407524223,GB
-1407524224,1407524231,GQ
-1407524232,1407524255,GB
-1407524256,1407524263,SN
-1407524264,1407524271,ZW
-1407524272,1407524287,GB
-1407524288,1407524295,MZ
-1407524296,1407524319,GB
-1407524320,1407524327,BW
-1407524328,1407524335,ZW
-1407524336,1407524343,SO
-1407524344,1407524351,KE
-1407524352,1407524607,GB
-1407524608,1407524615,ZW
-1407524616,1407524623,CD
-1407524624,1407524631,ZA
-1407524632,1407524639,NG
-1407524640,1407524647,GB
-1407524648,1407524655,CD
-1407524656,1407524663,ZW
-1407524664,1407524671,CD
-1407524672,1407524679,GB
-1407524680,1407524687,LR
-1407524688,1407524711,GB
-1407524712,1407524719,ZW
-1407524720,1407524727,GB
-1407524728,1407524735,NG
-1407524736,1407524743,GB
-1407524744,1407524751,ZW
-1407524752,1407524759,GB
-1407524760,1407524767,CM
-1407524768,1407524775,BW
-1407524776,1407524783,GB
-1407524784,1407524791,ZW
-1407524792,1407524839,GB
-1407524840,1407524847,LR
-1407524848,1407524855,GB
-1407524856,1407524863,CD
-1407524864,1407524871,GR
-1407524872,1407524879,GB
-1407524880,1407524887,ZW
-1407524888,1407524895,GB
-1407524896,1407524903,LR
-1407524904,1407524911,GB
-1407524912,1407524919,ZW
-1407524920,1407524927,ZA
-1407524928,1407524935,GB
-1407524936,1407524943,GR
-1407524944,1407524951,ZW
-1407524952,1407524983,GB
-1407524984,1407524991,ZA
-1407524992,1407524999,TZ
-1407525000,1407525007,UG
-1407525008,1407525015,GB
-1407525016,1407525023,UG
-1407525024,1407525031,US
-1407525032,1407525039,IL
-1407525040,1407525047,ZA
-1407525048,1407525055,NG
-1407525056,1407525063,ZA
-1407525064,1407525071,SO
-1407525072,1407525079,CD
-1407525080,1407525087,GB
-1407525088,1407525095,MW
-1407525096,1407525103,ZW
-1407525104,1407525111,NG
-1407525112,1407525119,ZA
-1407525120,1407525127,GB
-1407525128,1407525135,SD
-1407525136,1407525143,CD
-1407525144,1407525151,GB
-1407525152,1407525167,CD
-1407525168,1407525183,GB
-1407525184,1407525191,ZW
-1407525192,1407525207,GB
-1407525208,1407525215,CD
-1407525216,1407525231,GB
-1407525232,1407525255,CD
-1407525256,1407525263,GB
-1407525264,1407525287,CD
-1407525288,1407525303,GB
-1407525304,1407525319,CD
-1407525320,1407525327,GB
-1407525328,1407525343,CD
-1407525344,1407525383,GB
-1407525384,1407525391,CD
-1407525392,1407525399,GB
-1407525400,1407525407,KE
-1407525408,1407525415,UG
-1407525416,1407525423,SO
-1407525424,1407525431,UG
-1407525432,1407525471,GB
-1407525472,1407525479,UG
-1407525480,1407525487,SO
-1407525488,1407525503,GB
-1407525504,1407525511,UG
-1407525512,1407525543,GB
-1407525544,1407525551,KE
-1407525552,1407525575,GB
-1407525576,1407525583,LR
-1407525584,1407525599,GB
-1407525600,1407525607,CD
-1407525608,1407525695,GB
-1407525696,1407525703,IQ
-1407525704,1407525879,GB
-1407525880,1407525887,IQ
-1407525888,1407525895,SN
-1407525896,1407525903,SS
-1407525904,1407525919,GB
-1407525920,1407525927,CD
-1407525928,1407525935,UG
-1407525936,1407525943,GR
-1407525944,1407525987,GB
-1407525988,1407525991,CM
-1407525992,1407525999,BF
-1407526000,1407526007,GB
-1407526008,1407526015,GR
-1407526016,1407526023,LR
-1407526024,1407526079,GB
-1407526080,1407526087,BF
-1407526088,1407526111,GB
-1407526112,1407526119,UG
-1407526120,1407526127,GB
-1407526128,1407526135,BJ
-1407526136,1407526143,GB
-1407526144,1407526151,UG
-1407526152,1407526231,GB
+1407516672,1407522719,GB
+1407522720,1407522727,CD
+1407522728,1407526231,GB
1407526232,1407526239,CD
-1407526240,1407526711,GB
-1407526712,1407526719,GN
-1407526720,1407527631,GB
-1407527632,1407527639,GR
-1407527640,1407527655,GB
-1407527656,1407527663,KE
-1407527664,1407527767,GB
-1407527768,1407527775,CD
-1407527776,1407527799,GB
-1407527800,1407527807,US
-1407527808,1407527815,GB
-1407527816,1407527823,ZW
-1407527824,1407527831,GB
-1407527832,1407527839,CM
-1407527840,1407527919,GB
-1407527920,1407527935,IL
-1407527936,1407528959,GB
-1407528960,1407529178,US
+1407526240,1407529178,GB
1407529179,1407529180,NG
-1407529181,1407529215,US
-1407529216,1407531007,GB
-1407531008,1407531015,BF
-1407531016,1407531027,GB
-1407531028,1407531031,SN
-1407531032,1407531111,GB
-1407531112,1407531119,SS
-1407531120,1407531127,CD
-1407531128,1407531143,GB
-1407531144,1407531151,CG
-1407531152,1407531159,CD
-1407531160,1407531167,FR
-1407531168,1407531175,GB
-1407531176,1407531183,CF
-1407531184,1407531391,GB
-1407531392,1407531399,UG
-1407531400,1407531407,GB
-1407531408,1407531415,UG
-1407531416,1407531423,GB
-1407531424,1407531431,UG
-1407531432,1407531439,GB
-1407531440,1407531447,UG
-1407531448,1407531471,GB
-1407531472,1407531479,UG
-1407531480,1407531487,GB
-1407531488,1407531495,UG
-1407531496,1407531503,GB
-1407531504,1407531511,UG
-1407531512,1407531519,GB
-1407531520,1407531535,CD
-1407531536,1407531551,GB
-1407531552,1407531559,SS
-1407531560,1407531567,SD
-1407531568,1407531575,CD
-1407531576,1407531583,GQ
-1407531584,1407531591,CD
-1407531592,1407531607,GB
-1407531608,1407531615,CD
-1407531616,1407531623,GB
-1407531624,1407531631,CD
-1407531632,1407531639,ZM
-1407531640,1407531647,CD
-1407531648,1407531663,GB
-1407531664,1407531671,MZ
-1407531672,1407531687,CD
-1407531688,1407531703,GB
-1407531704,1407531711,SD
-1407531712,1407531735,CD
-1407531736,1407531751,GB
-1407531752,1407531759,GQ
-1407531760,1407531767,ZW
-1407531768,1407531775,SD
-1407531776,1407532543,GB
-1407532544,1407532551,SO
-1407532552,1407532559,AO
-1407532560,1407532575,US
-1407532576,1407532583,GB
-1407532584,1407532591,SO
-1407532592,1407532615,GB
-1407532616,1407532623,KG
-1407532624,1407532639,GB
-1407532640,1407532647,NG
-1407532648,1407532663,GB
-1407532664,1407532671,TZ
-1407532672,1407532799,BF
-1407532800,1407532927,SO
-1407532928,1407533055,US
-1407533056,1407533071,GB
-1407533072,1407533079,SN
-1407533080,1407533087,NG
-1407533088,1407533095,LR
-1407533096,1407533111,GB
-1407533112,1407533119,UG
-1407533120,1407533127,NG
-1407533128,1407533151,GB
-1407533152,1407533159,LR
-1407533160,1407533167,CD
-1407533168,1407533175,BF
-1407533176,1407533183,SN
-1407533184,1407533231,GB
-1407533232,1407533239,SN
-1407533240,1407533247,BF
-1407533248,1407533255,GB
-1407533256,1407533263,NG
-1407533264,1407533271,LR
-1407533272,1407533295,GB
-1407533296,1407533303,NG
-1407533304,1407533311,GB
-1407533312,1407533327,AO
-1407533328,1407533343,GB
-1407533344,1407533375,NG
-1407533376,1407533407,CD
-1407533408,1407533423,GB
-1407533424,1407533439,GH
-1407533440,1407533567,GB
-1407533568,1407533583,NG
-1407533584,1407533591,NE
-1407533592,1407533607,GB
-1407533608,1407533663,NG
-1407533664,1407533687,GB
-1407533688,1407533695,NG
-1407533696,1407533711,GB
-1407533712,1407533719,ZW
-1407533720,1407533727,SL
-1407533728,1407533735,TD
-1407533736,1407533743,GN
-1407533744,1407533751,VG
-1407533752,1407533783,GB
-1407533784,1407533791,CG
-1407533792,1407533799,GB
-1407533800,1407533807,LR
-1407533808,1407533815,GB
-1407533816,1407533823,NG
-1407533824,1407533831,LR
-1407533832,1407533863,GB
-1407533864,1407533871,CD
-1407533872,1407533895,GB
-1407533896,1407533903,CD
-1407533904,1407533919,GB
-1407533920,1407533927,BF
-1407533928,1407533935,NE
-1407533936,1407533943,GB
-1407533944,1407533951,GN
-1407533952,1407533967,GB
-1407533968,1407533975,CD
-1407533976,1407533983,GB
-1407533984,1407533991,LR
-1407533992,1407533999,NE
-1407534000,1407534007,GB
-1407534008,1407534023,VG
-1407534024,1407534039,GB
-1407534040,1407534047,BF
-1407534048,1407534055,CM
-1407534056,1407534079,GB
-1407534080,1407534335,AE
-1407534336,1407534343,KE
-1407534344,1407534365,GB
+1407529181,1407534365,GB
1407534366,1407534366,NG
-1407534367,1407534367,GB
-1407534368,1407534383,NG
-1407534384,1407534391,GR
-1407534392,1407534399,AO
-1407534400,1407534407,NG
-1407534408,1407534415,US
-1407534416,1407534455,GB
-1407534456,1407534463,NG
-1407534464,1407534527,GB
-1407534528,1407534535,LR
-1407534536,1407534543,GB
-1407534544,1407534551,NE
-1407534552,1407534559,BF
-1407534560,1407534567,NG
-1407534568,1407534575,GB
-1407534576,1407534583,GQ
-1407534584,1407534719,GB
-1407534720,1407534727,GQ
-1407534728,1407534735,GB
-1407534736,1407534775,NG
-1407534776,1407534783,ML
-1407534784,1407534791,CD
-1407534792,1407534847,GB
-1407534848,1407535103,CM
-1407535104,1407535615,GA
-1407535616,1407535623,GR
-1407535624,1407535647,GB
-1407535648,1407535655,NG
-1407535656,1407535679,GB
-1407535680,1407535687,GN
-1407535688,1407535695,GB
-1407535696,1407535703,GN
-1407535704,1407536127,GB
-1407536128,1407536639,GA
-1407536640,1407536895,CD
-1407536896,1407536903,GB
-1407536904,1407536919,ZW
-1407536920,1407536927,GB
-1407536928,1407536935,TD
-1407536936,1407536943,NG
-1407536944,1407536951,AO
-1407536952,1407536975,GB
-1407536976,1407536983,US
-1407536984,1407536991,IQ
-1407536992,1407537031,GB
-1407537032,1407537039,NG
-1407537040,1407537047,GB
-1407537048,1407537055,NG
-1407537056,1407537071,GH
-1407537072,1407537079,GB
-1407537080,1407537087,NG
+1407534367,1407537087,GB
1407537088,1407537095,GH
-1407537096,1407537103,GB
-1407537104,1407537111,NG
-1407537112,1407537119,LR
-1407537120,1407537135,GB
-1407537136,1407537143,NG
-1407537144,1407537151,GB
-1407537152,1407537159,UG
-1407537160,1407537183,GB
-1407537184,1407537191,NG
-1407537192,1407537207,GB
-1407537208,1407537215,BE
-1407537216,1407537263,GB
-1407537264,1407537287,CM
-1407537288,1407537295,UG
-1407537296,1407537303,GB
-1407537304,1407537311,LR
-1407537312,1407537319,GB
-1407537320,1407537327,NG
-1407537328,1407537343,GB
-1407537344,1407537351,NG
-1407537352,1407537367,GB
-1407537368,1407537383,NG
-1407537384,1407537447,GB
-1407537448,1407537455,UG
-1407537456,1407537463,AO
-1407537464,1407537487,GB
-1407537488,1407537495,NG
-1407537496,1407537503,GB
-1407537504,1407537511,AO
-1407537512,1407537543,GB
-1407537544,1407537551,AO
-1407537552,1407537575,GB
-1407537576,1407537591,NG
-1407537592,1407537607,GB
-1407537608,1407537615,CM
-1407537616,1407537631,GB
-1407537632,1407537639,NG
-1407537640,1407537679,GB
-1407537680,1407537687,IQ
-1407537688,1407537703,GB
-1407537704,1407537735,NG
-1407537736,1407537751,GB
-1407537752,1407537759,NG
-1407537760,1407537767,GB
-1407537768,1407537847,NG
-1407537848,1407537855,GB
-1407537856,1407537863,NG
-1407537864,1407537871,TG
-1407537872,1407537879,IQ
-1407537880,1407537903,GB
-1407537904,1407537911,TG
-1407537912,1407537935,GB
-1407537936,1407537943,GH
-1407537944,1407537951,TG
-1407537952,1407537959,GB
-1407537960,1407537967,TG
-1407537968,1407537975,NG
-1407537976,1407537983,GB
-1407537984,1407537991,NG
-1407537992,1407537999,GB
-1407538000,1407538007,NG
-1407538008,1407538015,GB
-1407538016,1407538023,NG
-1407538024,1407538031,GB
-1407538032,1407538039,NG
-1407538040,1407538047,CD
-1407538048,1407538055,NG
-1407538056,1407538063,GB
-1407538064,1407538071,LU
-1407538072,1407538079,GB
-1407538080,1407538087,LR
-1407538088,1407538095,AO
-1407538096,1407538111,GB
-1407538112,1407538119,LR
-1407538120,1407538127,NG
-1407538128,1407538143,GB
-1407538144,1407538151,GN
-1407538152,1407538167,GB
-1407538168,1407538175,IQ
-1407538176,1407538255,GB
-1407538256,1407538263,NG
-1407538264,1407538271,GB
-1407538272,1407538279,CO
-1407538280,1407538295,GB
-1407538296,1407538303,AO
-1407538304,1407538311,NG
-1407538312,1407538319,CD
-1407538320,1407538327,GB
-1407538328,1407538335,CD
-1407538336,1407538343,GB
-1407538344,1407538351,CD
-1407538352,1407538383,GB
-1407538384,1407538391,CM
-1407538392,1407538407,GB
-1407538408,1407538415,NG
-1407538416,1407538439,GB
-1407538440,1407538447,NG
-1407538448,1407538471,GB
-1407538472,1407538479,NG
-1407538480,1407538583,GB
-1407538584,1407538591,NG
-1407538592,1407538599,GB
-1407538600,1407538607,NG
-1407538608,1407538663,GB
-1407538664,1407538679,NG
-1407538680,1407538719,GB
-1407538720,1407538727,FR
-1407538728,1407538863,GB
-1407538864,1407538879,GE
-1407538880,1407538887,GB
-1407538888,1407538895,NG
-1407538896,1407538911,GB
-1407538912,1407538919,GH
-1407538920,1407538927,GB
-1407538928,1407538935,NG
-1407538936,1407538943,GH
-1407538944,1407538951,CD
-1407538952,1407538975,GB
-1407538976,1407538983,NG
-1407538984,1407538991,SL
-1407538992,1407538999,GB
-1407539000,1407539007,NG
-1407539008,1407539055,GB
-1407539056,1407539063,NG
-1407539064,1407539103,GB
-1407539104,1407539111,NG
-1407539112,1407539143,GB
-1407539144,1407539151,NG
-1407539152,1407539167,GB
-1407539168,1407539175,TD
-1407539176,1407539183,GH
-1407539184,1407539191,GB
-1407539192,1407539199,NG
-1407539200,1407539455,GE
-1407539456,1407539463,NG
-1407539464,1407539467,GB
-1407539468,1407539475,BF
-1407539476,1407539483,GB
-1407539484,1407539491,BF
-1407539492,1407539495,GB
-1407539496,1407539503,TD
-1407539504,1407539511,CM
-1407539512,1407539519,GB
-1407539520,1407539527,NG
-1407539528,1407539535,GB
-1407539536,1407539543,GQ
-1407539544,1407539559,GB
-1407539560,1407539567,NE
-1407539568,1407539599,GB
-1407539600,1407539607,NG
-1407539608,1407539631,GB
-1407539632,1407539639,NG
-1407539640,1407539647,TD
-1407539648,1407539655,GQ
-1407539656,1407539663,NE
-1407539664,1407539703,GB
-1407539704,1407539711,NE
-1407539712,1407539727,GB
-1407539728,1407539735,GR
-1407539736,1407539743,GB
-1407539744,1407539751,UG
-1407539752,1407539759,NG
-1407539760,1407539767,GB
-1407539768,1407539775,GR
-1407539776,1407539783,GB
-1407539784,1407539791,GR
-1407539792,1407539799,NG
-1407539800,1407539863,GB
-1407539864,1407539879,NG
-1407539880,1407539895,GB
-1407539896,1407539903,NG
-1407539904,1407539911,GB
-1407539912,1407539919,NG
-1407539920,1407539927,CD
-1407539928,1407539935,GB
-1407539936,1407539943,GN
-1407539944,1407539951,NG
-1407539952,1407539967,GB
-1407539968,1407539975,CD
-1407539976,1407540023,GB
-1407540024,1407540031,A2
-1407540032,1407540071,GB
-1407540072,1407540079,NG
-1407540080,1407540111,GB
-1407540112,1407540119,TG
-1407540120,1407540135,GB
-1407540136,1407540143,CD
-1407540144,1407540159,GB
-1407540160,1407540167,CD
-1407540168,1407540183,GB
-1407540184,1407540191,CD
-1407540192,1407540207,GB
-1407540208,1407540215,CD
-1407540216,1407540231,GB
-1407540232,1407540239,UG
-1407540240,1407540247,NG
-1407540248,1407540271,GB
-1407540272,1407540279,LR
-1407540280,1407540295,GB
-1407540296,1407540303,NG
-1407540304,1407540319,GB
-1407540320,1407540327,CD
-1407540328,1407540335,NG
-1407540336,1407540351,GB
-1407540352,1407540359,TD
-1407540360,1407540367,GB
-1407540368,1407540375,LR
-1407540376,1407540415,GB
-1407540416,1407540423,NG
-1407540424,1407540431,GB
-1407540432,1407540439,CI
-1407540440,1407540447,GB
-1407540448,1407540455,LR
-1407540456,1407540463,GB
-1407540464,1407540471,MU
-1407540472,1407540479,GB
-1407540480,1407540487,CM
-1407540488,1407540575,GB
-1407540576,1407540583,AO
-1407540584,1407540607,GB
-1407540608,1407540615,NG
-1407540616,1407540623,SD
-1407540624,1407540631,NG
-1407540632,1407540655,GB
-1407540656,1407540671,CD
-1407540672,1407540703,GB
-1407540704,1407540711,NG
-1407540712,1407540767,GB
-1407540768,1407540775,NG
-1407540776,1407540991,GB
-1407540992,1407540999,CD
-1407541000,1407541023,GB
-1407541024,1407541031,LR
-1407541032,1407541055,NG
-1407541056,1407541063,GB
-1407541064,1407541071,NG
-1407541072,1407541095,GB
-1407541096,1407541103,GQ
-1407541104,1407541175,GB
-1407541176,1407541183,NG
-1407541184,1407541471,GB
-1407541472,1407541495,NG
-1407541496,1407541535,GB
-1407541536,1407541543,CM
-1407541544,1407541551,GB
-1407541552,1407541559,NG
-1407541560,1407541567,GH
-1407541568,1407541583,CM
-1407541584,1407541591,GB
-1407541592,1407541599,CM
-1407541600,1407541711,GB
-1407541712,1407541719,NG
-1407541720,1407541727,GB
-1407541728,1407541735,NG
-1407541736,1407541747,GB
-1407541748,1407541751,LR
-1407541752,1407541759,NG
-1407541760,1407541791,GB
-1407541792,1407541799,CM
-1407541800,1407541887,GB
-1407541888,1407542143,NG
-1407542144,1407542543,GB
-1407542544,1407542551,LR
-1407542552,1407542575,GB
-1407542576,1407542583,CD
-1407542584,1407542599,GB
-1407542600,1407542607,TG
-1407542608,1407542623,GB
-1407542624,1407542631,BJ
-1407542632,1407542639,NG
-1407542640,1407542655,GB
-1407542656,1407542663,SL
-1407542664,1407542671,GB
-1407542672,1407542679,CM
-1407542680,1407542687,NG
-1407542688,1407542695,CD
-1407542696,1407542703,NG
-1407542704,1407542727,GB
-1407542728,1407542735,NG
-1407542736,1407542767,GB
-1407542768,1407542775,GA
-1407542776,1407542791,GB
-1407542792,1407542799,NG
-1407542800,1407542847,GB
-1407542848,1407542863,NG
-1407542864,1407542903,GB
-1407542904,1407542911,CD
-1407542912,1407543039,AT
-1407543040,1407543167,GB
-1407543168,1407543183,GH
-1407543184,1407543191,GB
-1407543192,1407543239,NG
-1407543240,1407543255,GB
-1407543256,1407543263,NG
-1407543264,1407543279,GB
-1407543280,1407543287,NG
-1407543288,1407543295,GB
-1407543296,1407543303,NG
-1407543304,1407543311,GB
-1407543312,1407543343,NG
-1407543344,1407543359,GB
-1407543360,1407543399,NG
-1407543400,1407543407,GB
-1407543408,1407543415,NG
-1407543416,1407543463,GB
-1407543464,1407543471,NG
-1407543472,1407543487,GB
-1407543488,1407543511,NG
-1407543512,1407543519,GB
-1407543520,1407543607,NG
-1407543608,1407543615,GB
-1407543616,1407543663,NG
-1407543664,1407543679,GB
-1407543680,1407543735,NG
-1407543736,1407543743,GB
-1407543744,1407543783,NG
-1407543784,1407543791,GB
-1407543792,1407543807,NG
-1407543808,1407543815,GB
-1407543816,1407543831,NE
-1407543832,1407543859,GB
-1407543860,1407543864,NE
-1407543865,1407543871,GB
-1407543872,1407543879,GA
-1407543880,1407543887,GB
-1407543888,1407543895,NE
-1407543896,1407543903,GB
-1407543904,1407543911,CD
-1407543912,1407543919,NE
-1407543920,1407543935,GB
-1407543936,1407543951,NG
-1407543952,1407543959,GB
-1407543960,1407543967,CG
-1407543968,1407543975,CM
-1407543976,1407543983,GB
-1407543984,1407543991,NE
-1407543992,1407543999,NG
-1407544000,1407544007,GB
-1407544008,1407544015,NE
-1407544016,1407544023,NG
-1407544024,1407544031,GB
-1407544032,1407544039,CD
-1407544040,1407544047,NG
-1407544048,1407544119,GB
-1407544120,1407544127,NE
-1407544128,1407544135,GB
-1407544136,1407544143,NE
-1407544144,1407544167,GB
-1407544168,1407544175,NE
-1407544176,1407544583,GB
-1407544584,1407544591,NG
-1407544592,1407544599,GB
-1407544600,1407544607,NG
-1407544608,1407544839,GB
-1407544840,1407544847,SL
-1407544848,1407544887,GB
-1407544888,1407544895,NG
-1407544896,1407544943,GB
-1407544944,1407544951,NG
-1407544952,1407545599,GB
-1407545600,1407545615,NG
-1407545616,1407545623,GB
-1407545624,1407545631,NG
-1407545632,1407545639,GB
-1407545640,1407545647,NG
-1407545648,1407545655,GB
-1407545656,1407545663,NG
-1407545664,1407545719,GB
-1407545720,1407545735,NG
-1407545736,1407545751,GB
-1407545752,1407545759,LR
-1407545760,1407545767,GQ
-1407545768,1407545775,TD
-1407545776,1407545783,CD
-1407545784,1407545791,IL
-1407545792,1407545799,GB
-1407545800,1407545807,GQ
-1407545808,1407545831,NG
-1407545832,1407545847,GB
-1407545848,1407545855,GQ
-1407545856,1407545863,CI
-1407545864,1407545871,GB
-1407545872,1407545879,CD
-1407545880,1407545903,GB
-1407545904,1407545919,NG
-1407545920,1407545927,GB
-1407545928,1407545935,NG
-1407545936,1407545943,ZA
-1407545944,1407545951,NG
-1407545952,1407545959,BJ
-1407545960,1407545967,GB
-1407545968,1407545975,GQ
-1407545976,1407546031,GB
-1407546032,1407546039,NG
-1407546040,1407546095,GB
-1407546096,1407546103,GQ
-1407546104,1407546383,GB
-1407546384,1407546407,NG
-1407546408,1407546415,GB
-1407546416,1407546471,NG
-1407546472,1407546479,GB
-1407546480,1407546535,NG
-1407546536,1407546543,GB
-1407546544,1407546551,NG
-1407546552,1407546567,NE
-1407546568,1407546583,NG
-1407546584,1407546599,GB
-1407546600,1407546615,NG
-1407546616,1407546863,GB
-1407546864,1407546879,LR
-1407546880,1407546887,GB
-1407546888,1407546895,CD
-1407546896,1407546959,GB
-1407546960,1407546967,GH
-1407546968,1407546991,GB
-1407546992,1407547007,TD
-1407547008,1407547039,GB
-1407547040,1407547047,NG
-1407547048,1407547079,GB
-1407547080,1407547095,NG
-1407547096,1407547103,AO
-1407547104,1407547151,GB
-1407547152,1407547159,CD
-1407547160,1407547167,GB
-1407547168,1407547175,NG
-1407547176,1407547183,GB
-1407547184,1407547191,UG
-1407547192,1407547199,NG
-1407547200,1407547207,GB
-1407547208,1407547215,TD
-1407547216,1407547247,GB
-1407547248,1407547255,SL
-1407547256,1407547263,GB
-1407547264,1407547271,SL
-1407547272,1407547303,GB
-1407547304,1407547311,SL
-1407547312,1407547327,NG
-1407547328,1407547343,GB
-1407547344,1407547367,NG
-1407547368,1407547383,GB
-1407547384,1407547911,NG
-1407547912,1407547919,GB
-1407547920,1407547927,CG
-1407547928,1407547943,GB
-1407547944,1407547951,BJ
-1407547952,1407547983,GB
-1407547984,1407547999,BJ
-1407548000,1407548023,GB
-1407548024,1407548031,NG
-1407548032,1407548047,GB
-1407548048,1407548055,GA
-1407548056,1407548063,NG
-1407548064,1407548111,GB
-1407548112,1407548119,CI
-1407548120,1407548127,GB
-1407548128,1407548143,CM
-1407548144,1407548151,NE
-1407548152,1407548415,NG
-1407548416,1407548423,GB
-1407548424,1407548427,CM
-1407548428,1407548443,GB
-1407548444,1407548447,NE
-1407548448,1407548499,GB
-1407548500,1407548503,FR
-1407548504,1407548531,GB
-1407548532,1407548535,LR
-1407548536,1407548711,GB
-1407548712,1407548719,CD
-1407548720,1407548927,GB
-1407548928,1407548951,NG
-1407548952,1407548959,GB
-1407548960,1407548967,NG
-1407548968,1407548975,CM
-1407548976,1407548983,GB
-1407548984,1407548991,CD
-1407548992,1407548999,CM
-1407549000,1407549015,NG
-1407549016,1407549023,GB
-1407549024,1407549031,BJ
-1407549032,1407549039,AO
-1407549040,1407549055,GB
-1407549056,1407549063,NG
-1407549064,1407549071,GB
-1407549072,1407549079,NG
-1407549080,1407549127,GB
-1407549128,1407549135,LR
-1407549136,1407549143,SL
-1407549144,1407549151,GB
-1407549152,1407549159,CD
-1407549160,1407549439,GB
+1407537096,1407549439,GB
1407549440,1407582207,RU
1407582208,1407614975,PL
1407614976,1407680511,ES
-1407680512,1407680863,FR
-1407680864,1407681023,GB
-1407681024,1407681039,ES
-1407681040,1407681087,GB
-1407681088,1407681095,ES
-1407681096,1407681096,GB
-1407681097,1407681102,ES
-1407681103,1407681103,GB
-1407681104,1407681291,ES
-1407681292,1407681295,GB
-1407681296,1407681535,ES
-1407681536,1407681983,GB
-1407681984,1407681999,ES
-1407682000,1407682303,GB
-1407682304,1407682559,FR
-1407682560,1407682879,GB
-1407682880,1407682911,FI
-1407682912,1407683431,GB
-1407683432,1407683439,IL
-1407683440,1407683471,GB
-1407683472,1407683479,IL
-1407683480,1407686431,GB
-1407686432,1407686463,ES
-1407686464,1407686495,GB
-1407686496,1407686527,ES
-1407686528,1407687168,GB
-1407687169,1407687182,ES
-1407687183,1407687184,GB
-1407687185,1407687190,ES
-1407687191,1407687199,GB
-1407687200,1407687231,ES
-1407687232,1407687296,GB
-1407687297,1407687422,ES
-1407687423,1407687423,GB
-1407687424,1407687679,ES
-1407687680,1407687935,GB
-1407687936,1407687991,ES
-1407687992,1407688063,GB
-1407688064,1407688191,ES
-1407688192,1407695215,GB
-1407695216,1407695223,ES
-1407695224,1407696487,GB
-1407696488,1407696495,AU
-1407696496,1407699104,GB
-1407699105,1407699134,ES
-1407699135,1407700271,GB
-1407700272,1407700287,DE
-1407700288,1407702015,GB
-1407702016,1407702271,FR
-1407702272,1407702783,GB
-1407702784,1407702911,FR
-1407702912,1407702927,GB
-1407702928,1407702975,FR
-1407702976,1407703039,GB
-1407703040,1407703455,FR
-1407703456,1407703535,GB
-1407703536,1407703871,FR
-1407703872,1407703935,GB
-1407703936,1407704039,FR
-1407704040,1407704191,GB
-1407704192,1407704319,FR
-1407704320,1407704383,GB
-1407704384,1407704447,FR
-1407704448,1407705167,GB
-1407705168,1407705183,FR
-1407705184,1407705599,GB
-1407705600,1407705727,FR
-1407705728,1407705759,GB
-1407705760,1407705791,FR
-1407705792,1407706367,GB
-1407706368,1407706423,FR
-1407706424,1407706431,GB
-1407706432,1407706559,FR
-1407706560,1407707055,GB
-1407707056,1407707063,PT
-1407707064,1407707703,GB
-1407707704,1407707839,CH
-1407707840,1407707903,GB
-1407707904,1407707935,CH
-1407707936,1407709183,GB
-1407709184,1407709695,DE
-1407709696,1407710207,GB
-1407710208,1407710239,ES
-1407710240,1407710491,GB
-1407710492,1407710495,IL
-1407710496,1407710651,GB
-1407710652,1407710655,IL
-1407710656,1407711231,GB
-1407711232,1407711319,FR
-1407711320,1407711327,GB
-1407711328,1407711743,FR
-1407711744,1407712207,GB
-1407712208,1407712223,FR
-1407712224,1407712247,GB
-1407712248,1407712254,CW
-1407712255,1407712767,GB
-1407712768,1407713279,DE
+1407680512,1407695763,GB
+1407695764,1407695767,DK
+1407695768,1407695771,GB
+1407695772,1407695775,DK
+1407695776,1407702271,GB
+1407702272,1407702527,DE
+1407702528,1407711239,GB
+1407711240,1407711247,FR
+1407711248,1407711263,GB
+1407711264,1407711295,FR
+1407711296,1407713279,GB
1407713280,1407778815,NL
1407778816,1407844351,SE
1407844352,1407909887,RU
1407909888,1407975423,GR
-1407975424,1408015312,DE
-1408015313,1408015313,A2
-1408015314,1408040959,DE
+1407975424,1408040959,DE
1408040960,1408106495,RU
1408106496,1408172031,PL
1408172032,1408237567,RU
1408237568,1408270335,CZ
1408270336,1408303103,PT
1408303104,1408335871,LV
-1408335872,1408336879,SE
-1408336880,1408336887,FI
-1408336888,1408338959,SE
-1408338960,1408338967,NO
-1408338968,1408353815,SE
-1408353816,1408353823,DK
-1408353824,1408368639,SE
+1408335872,1408368639,SE
1408368640,1408376831,NO
1408376832,1408385023,DE
1408385024,1408393215,PL
@@ -54429,26 +18077,13 @@
1408458752,1408460799,GB
1408460800,1408462847,PL
1408462848,1408464895,DE
-1408464896,1408466943,RO
1408466944,1408499711,NO
1408499712,1408532479,PS
1408532480,1408567919,GB
1408567920,1408567927,IE
-1408567928,1408574847,GB
-1408574848,1408574911,IE
-1408574912,1408575231,GB
-1408575232,1408575239,IE
-1408575240,1408579583,GB
+1408567928,1408579583,GB
1408579584,1408579839,IE
-1408579840,1408584191,GB
-1408584192,1408584703,IE
-1408584704,1408585407,GB
-1408585408,1408585471,IE
-1408585472,1408590367,GB
-1408590368,1408590383,IM
-1408590384,1408590847,GB
-1408590848,1408591103,BE
-1408591104,1408597503,GB
+1408579840,1408597503,GB
1408597504,1408598015,IE
1408598016,1408630783,FI
1408630784,1408634879,RO
@@ -54459,9 +18094,9 @@
1408761856,1409286143,SE
1409286144,1409362431,HU
1409362432,1409363967,BG
-1409363968,1409380655,HU
-1409380656,1409380673,RO
-1409380674,1409413119,HU
+1409363968,1409378679,HU
+1409378680,1409378687,RO
+1409378688,1409413119,HU
1409413120,1409415167,BG
1409415168,1409430271,HU
1409430272,1409430783,RO
@@ -54469,321 +18104,51 @@
1409548288,1409810431,FR
1409810432,1409941503,GB
1409941504,1410007039,PL
-1410007040,1410007551,A2
-1410007552,1410007807,IR
-1410007808,1410008575,A2
-1410008576,1410008607,AE
-1410008608,1410008831,A2
-1410008832,1410009087,US
-1410009088,1410009343,A2
-1410009344,1410009479,US
-1410009480,1410009487,A2
-1410009488,1410009535,GI
-1410009536,1410009599,A2
-1410009600,1410009855,DE
-1410009856,1410010111,US
-1410010112,1410010127,A2
-1410010128,1410010135,IQ
-1410010136,1410010399,A2
-1410010400,1410010431,LY
-1410010432,1410010543,A2
-1410010544,1410010575,LY
-1410010576,1410010599,A2
-1410010600,1410010607,IR
-1410010608,1410010623,LY
-1410010624,1410010639,DE
-1410010640,1410010687,A2
-1410010688,1410010703,IR
-1410010704,1410010719,A2
-1410010720,1410010751,LY
-1410010752,1410010823,A2
-1410010824,1410010831,IR
-1410010832,1410010879,A2
-1410010880,1410011135,IR
-1410011136,1410011647,DE
-1410011648,1410012415,A2
-1410012416,1410012671,AE
-1410012672,1410013183,DE
-1410013184,1410013439,ES
-1410013440,1410013471,IR
-1410013472,1410013535,AE
-1410013536,1410013567,IR
-1410013568,1410013631,AE
-1410013632,1410013663,IR
-1410013664,1410013695,AE
-1410013696,1410013727,KW
-1410013728,1410013759,AE
-1410013760,1410013791,IR
-1410013792,1410013823,A2
-1410013824,1410013887,AF
-1410013888,1410013919,A2
-1410013920,1410013951,KW
-1410013952,1410013983,AE
-1410013984,1410014015,IR
-1410014016,1410014047,KW
-1410014048,1410014079,AE
-1410014080,1410014207,A2
-1410014208,1410014239,AE
-1410014240,1410014335,IR
-1410014336,1410014399,AE
-1410014400,1410014463,ES
-1410014464,1410014495,KW
-1410014496,1410014591,IR
-1410014592,1410014885,A2
-1410014886,1410014886,ES
-1410014887,1410014895,A2
-1410014896,1410014927,IR
-1410014928,1410014935,PA
-1410014936,1410014943,IR
-1410014944,1410014951,AE
-1410014952,1410014966,A2
-1410014967,1410014967,IR
-1410014968,1410014968,A2
-1410014969,1410014969,IR
-1410014970,1410014972,A2
-1410014973,1410014974,AE
-1410014975,1410015007,A2
-1410015008,1410015103,IR
-1410015104,1410015135,ES
-1410015136,1410015263,IR
-1410015264,1410015295,KW
-1410015296,1410015423,IR
-1410015424,1410015487,AE
-1410015488,1410015743,AF
-1410015744,1410015871,IR
-1410015872,1410015935,AE
-1410015936,1410016255,IR
-1410016256,1410016319,AE
-1410016320,1410016383,ES
-1410016384,1410016415,IR
-1410016416,1410016447,PA
-1410016448,1410016543,IR
-1410016544,1410016575,A2
-1410016576,1410016607,AE
-1410016608,1410016639,PA
-1410016640,1410016671,IR
-1410016672,1410016703,PA
-1410016704,1410016767,A2
-1410016768,1410016831,IR
-1410016832,1410016863,AE
-1410016864,1410016895,IR
-1410016896,1410017023,AE
-1410017024,1410017055,PA
-1410017056,1410017119,IR
-1410017120,1410017279,A2
-1410017280,1410017407,IR
-1410017408,1410017535,A2
-1410017536,1410017791,US
-1410017792,1410018047,IR
-1410018048,1410018303,A2
-1410018304,1410018559,AE
-1410018560,1410018591,A2
-1410018592,1410018607,IR
-1410018608,1410018623,LY
-1410018624,1410020103,A2
-1410020104,1410020111,US
-1410020112,1410021375,A2
-1410021376,1410021407,IR
-1410021408,1410021631,A2
-1410021632,1410021663,IR
-1410021664,1410021791,A2
-1410021792,1410021823,IR
-1410021824,1410022527,A2
-1410022528,1410022591,AE
-1410022592,1410022655,IR
-1410022656,1410023167,A2
-1410023168,1410023423,IR
-1410023424,1410024287,A2
-1410024288,1410024319,IR
-1410024320,1410024447,A2
-1410024448,1410025087,IR
-1410025088,1410025215,A2
-1410025216,1410025247,ES
-1410025248,1410025279,A2
-1410025280,1410025311,AE
-1410025312,1410025343,ES
-1410025344,1410025407,IR
-1410025408,1410025439,AE
-1410025440,1410025503,A2
-1410025504,1410025519,AE
-1410025520,1410025535,IR
-1410025536,1410025567,ES
-1410025568,1410025599,A2
-1410025600,1410025727,IR
-1410025728,1410025759,AE
-1410025760,1410025791,A2
-1410025792,1410025823,AE
-1410025824,1410025855,IR
-1410025856,1410025983,A2
-1410025984,1410026015,IR
-1410026016,1410026047,AE
-1410026048,1410026111,ES
-1410026112,1410026143,A2
-1410026144,1410026175,IR
-1410026176,1410026207,AE
-1410026208,1410026239,IR
-1410026240,1410026367,AE
-1410026368,1410026431,IR
-1410026432,1410026463,A2
-1410026464,1410026751,IR
-1410026752,1410026815,CA
-1410026816,1410026847,A2
-1410026848,1410026911,IR
-1410026912,1410026943,A2
-1410026944,1410027006,IR
-1410027007,1410027007,A2
-1410027008,1410027263,KW
-1410027264,1410027519,AF
-1410027520,1410027711,A2
-1410027712,1410027775,IR
-1410027776,1410028799,A2
-1410028800,1410028831,IR
-1410028832,1410029823,A2
-1410029824,1410030079,DE
-1410030080,1410030335,A2
-1410030336,1410030591,DE
-1410030592,1410035327,A2
-1410035328,1410035343,IR
-1410035344,1410035983,A2
-1410035984,1410035999,PA
-1410036000,1410036031,A2
-1410036032,1410036063,PA
-1410036064,1410036111,A2
-1410036112,1410036127,PA
-1410036128,1410036191,A2
-1410036192,1410036207,PA
-1410036208,1410036735,A2
-1410036736,1410036751,PA
-1410036752,1410042367,A2
-1410042368,1410042623,US
-1410042624,1410042815,A2
-1410042816,1410042831,US
-1410042832,1410043169,A2
-1410043170,1410043171,US
-1410043172,1410043172,A2
-1410043173,1410043173,US
-1410043174,1410043903,A2
-1410043904,1410043935,AE
-1410043936,1410045183,A2
-1410045184,1410045439,IQ
-1410045440,1410046463,A2
-1410046464,1410046495,DE
-1410046496,1410046719,A2
-1410046720,1410046735,DE
-1410046736,1410046975,A2
-1410046976,1410047103,TR
-1410047104,1410071815,A2
-1410071816,1410071839,DE
-1410071840,1410072319,A2
-1410072320,1410072575,AE
+1410007040,1410072575,DE
1410072576,1410203647,GB
-1410203648,1410204439,FR
-1410204440,1410204455,IT
-1410204456,1410204479,FR
-1410204480,1410204495,PT
-1410204496,1410212863,FR
+1410203648,1410212863,FR
1410212864,1410213119,GB
-1410213120,1410225431,FR
-1410225432,1410225439,GB
-1410225440,1410233575,FR
-1410233576,1410233583,IE
-1410233584,1410266303,FR
-1410266304,1410266311,IE
-1410266312,1410269183,FR
-1410269184,1410278399,LT
-1410278400,1410278655,LV
-1410278656,1410318335,LT
+1410213120,1410269183,FR
+1410269184,1410303999,LT
+1410304000,1410306047,LV
+1410306048,1410318335,LT
1410318336,1410319359,LV
1410319360,1410322431,LT
1410322432,1410326527,LV
1410326528,1410334719,LT
1410334720,1410342911,ES
1410342912,1410351103,SK
-1410351104,1410354175,CH
-1410354176,1410354431,FR
-1410354432,1410359295,CH
+1410351104,1410359295,CH
1410359296,1410367487,CZ
1410367488,1410375679,RU
-1410375680,1410383871,DK
+1410375680,1410378015,DK
+1410378016,1410378031,NO
+1410378032,1410383871,DK
1410383872,1410392063,NO
-1410392064,1410397183,DE
-1410397184,1410397439,PL
-1410397440,1410399487,DE
-1410399488,1410399743,TR
-1410399744,1410400063,DE
-1410400064,1410400127,TR
-1410400128,1410400255,DE
+1410392064,1410400255,DE
1410400256,1410408447,RU
1410408448,1410416639,IT
1410416640,1410424831,TR
1410424832,1410433023,DE
1410433024,1410441215,BE
-1410441216,1410443295,DE
-1410443296,1410443327,IR
-1410443328,1410443383,DE
-1410443384,1410443387,US
-1410443388,1410449407,DE
+1410441216,1410449407,DE
1410449408,1410457599,SE
1410457600,1410465791,RU
1410465792,1410473983,ES
1410473984,1410490367,JO
1410490368,1410498559,RU
-1410498560,1410502803,IT
-1410502804,1410502807,US
-1410502808,1410506751,IT
+1410498560,1410506751,IT
1410506752,1410514943,IE
1410514944,1410523135,GB
1410523136,1410531327,PT
1410531328,1410539519,DE
-1410539520,1410544415,GB
-1410544416,1410544431,DE
-1410544432,1410547711,GB
+1410539520,1410540671,GB
+1410540672,1410540799,US
+1410540800,1410547711,GB
1410547712,1410555903,CZ
1410555904,1410564095,GB
1410564096,1410572287,SE
-1410572288,1410572863,DE
-1410572864,1410572895,RU
-1410572896,1410573407,DE
-1410573408,1410573439,RU
-1410573440,1410573695,DE
-1410573696,1410573711,RU
-1410573712,1410573759,DE
-1410573760,1410573775,RU
-1410573776,1410573799,DE
-1410573800,1410573815,IT
-1410573816,1410573823,RU
-1410573824,1410574511,DE
-1410574512,1410574519,CH
-1410574520,1410574527,DE
-1410574528,1410574543,IT
-1410574544,1410574559,DE
-1410574560,1410574575,RU
-1410574576,1410574583,DE
-1410574584,1410574591,RU
-1410574592,1410575071,DE
-1410575072,1410575087,IT
-1410575088,1410575103,RU
-1410575104,1410575111,US
-1410575112,1410575119,IT
-1410575120,1410575135,DE
-1410575136,1410575167,RU
-1410575168,1410575279,DE
-1410575280,1410575295,IL
-1410575296,1410575327,IT
-1410575328,1410575359,SI
-1410575360,1410575775,DE
-1410575776,1410575791,RU
-1410575792,1410575807,DE
-1410575808,1410575823,IL
-1410575824,1410575839,BG
-1410575840,1410575855,IT
-1410575856,1410575871,DE
-1410575872,1410575999,DK
-1410576000,1410576255,DE
-1410576256,1410576319,IT
-1410576320,1410576351,DE
-1410576352,1410576383,IT
-1410576384,1410588671,DE
+1410572288,1410588671,DE
1410588672,1410596863,GB
1410596864,1410605055,ES
1410605056,1410613247,CH
@@ -54791,12 +18156,8 @@
1410621440,1410629631,NO
1410629632,1410637823,FI
1410637824,1410646015,AT
-1410646016,1410647807,GB
-1410647808,1410648319,IE
-1410648320,1410654207,GB
-1410654208,1410662143,SI
-1410662144,1410662207,CY
-1410662208,1410662399,SI
+1410646016,1410654207,GB
+1410654208,1410662399,SI
1410662400,1410670591,HU
1410670592,1410672639,DE
1410672640,1410673663,US
@@ -54806,76 +18167,14 @@
1410678784,1410686975,RU
1410686976,1410695167,CZ
1410695168,1410703359,GB
-1410703360,1410711551,ES
1410711552,1410719743,BG
1410719744,1410727935,RU
1410727936,1410736127,BG
-1410736128,1410744319,RS
-1410744320,1410744575,FR
-1410744576,1410744831,A2
-1410744832,1410745087,FR
-1410745088,1410745343,A2
-1410745344,1410745855,FR
-1410745856,1410746111,CH
-1410746112,1410746879,AO
-1410746880,1410748415,A2
-1410748416,1410752511,DE
-1410752512,1410752515,AQ
-1410752516,1410752519,DE
-1410752520,1410752523,AQ
-1410752524,1410752575,DE
-1410752576,1410752703,AQ
-1410752704,1410752763,DE
-1410752764,1410752779,AQ
-1410752780,1410752787,DE
-1410752788,1410752791,AQ
-1410752792,1410753143,DE
-1410753144,1410753151,SC
-1410753152,1410753155,AQ
-1410753156,1410753159,DE
-1410753160,1410753167,AQ
-1410753168,1410753271,DE
-1410753272,1410753279,AQ
-1410753280,1410753359,DE
-1410753360,1410753367,AQ
-1410753368,1410753531,DE
-1410753532,1410753791,AQ
-1410753792,1410754303,DE
-1410754304,1410754599,AQ
-1410754600,1410754607,DE
-1410754608,1410754767,AQ
-1410754768,1410754775,DE
-1410754776,1410754783,TL
-1410754784,1410754815,AQ
-1410754816,1410754827,DE
-1410754828,1410754831,AQ
-1410754832,1410754855,DE
-1410754856,1410754859,AQ
-1410754860,1410754867,DE
-1410754868,1410754871,AQ
-1410754872,1410755063,DE
-1410755064,1410755067,AQ
-1410755068,1410755071,DE
-1410755072,1410755327,AQ
-1410755328,1410755583,DE
-1410755584,1410756351,AQ
-1410756352,1410756863,DE
-1410756864,1410757119,AQ
-1410757120,1410758655,DE
-1410758656,1410759423,AQ
-1410759424,1410760191,DE
-1410760192,1410760447,AQ
-1410760448,1410760455,NL
-1410760456,1410760463,DE
-1410760464,1410760471,CN
-1410760472,1410760479,DE
-1410760480,1410760495,AQ
-1410760496,1410760511,DE
-1410760512,1410760551,AQ
-1410760552,1410760567,DE
-1410760568,1410760571,AQ
-1410760572,1410760575,DE
-1410760576,1410760703,AQ
+1410736128,1410738687,RS
+1410738688,1410738943,XK
+1410738944,1410744319,RS
+1410744320,1410752511,FR
+1410752512,1410760703,NL
1410760704,1410768895,RU
1410768896,1410777087,GB
1410777088,1410785279,RU
@@ -54890,30 +18189,13 @@
1410850816,1410859007,DE
1410859008,1411383295,NL
1411383296,1411448831,LT
-1411448832,1411451647,IT
-1411451648,1411451903,DE
-1411451904,1411452159,IT
-1411452160,1411452415,DE
-1411452416,1411453439,IT
-1411453440,1411453695,DE
-1411453696,1411454975,IT
-1411454976,1411455231,DE
-1411455232,1411455359,IT
-1411455360,1411455743,DE
-1411455744,1411456255,IT
-1411456256,1411456511,DE
-1411456512,1411457279,IT
-1411457280,1411457535,DE
-1411457536,1411465215,IT
-1411465216,1411465471,GB
-1411465472,1411465727,US
-1411465728,1411481855,IT
+1411448832,1411449727,IT
+1411449728,1411449791,DE
+1411449792,1411450303,IT
+1411450304,1411450367,DE
+1411450368,1411481855,IT
1411481856,1411483903,DE
-1411483904,1411500799,IT
-1411500800,1411501055,DE
-1411501056,1411505407,IT
-1411505408,1411505663,US
-1411505664,1411514367,IT
+1411483904,1411514367,IT
1411514368,1411579903,FI
1411579904,1411645439,NL
1411645440,1411710975,EG
@@ -54935,144 +18217,30 @@
1411833856,1411837951,NL
1411837952,1411842047,BG
1411842048,1411850239,NL
-1411850240,1411858431,RO
-1411858432,1411868607,DE
-1411868608,1411868671,ES
-1411868672,1411870719,DE
-1411870720,1411871487,GB
-1411871488,1411871615,EU
-1411871616,1411871999,GB
-1411872000,1411872767,EU
+1411850240,1411858431,FR
+1411858432,1411870719,DE
1411872768,1411874815,NL
1411874816,1411876863,RU
-1411876864,1411878911,EU
1411878912,1411880959,CH
-1411880960,1411881471,GE
+1411880960,1411881215,DE
+1411881216,1411881471,GB
1411881472,1411883007,DE
1411883008,1411887103,PL
1411887104,1411889151,IR
1411889152,1411891199,IT
-1411891200,1411893247,IQ
-1411893248,1411895295,FR
1411895296,1411899391,SI
1411899392,1411901439,ES
-1411901440,1411902207,IE
-1411902208,1411902271,DK
-1411902272,1411903487,IE
+1411901440,1411903487,IE
1411903488,1411907583,RU
-1411907584,1411907839,EU
-1411907840,1411908095,GB
-1411908096,1411908351,DE
-1411908352,1411908399,EU
-1411908400,1411908479,GB
-1411908480,1411908535,EU
-1411908536,1411908559,GB
-1411908560,1411908563,AU
-1411908564,1411908607,EU
-1411908608,1411908863,GB
-1411908864,1411909631,EU
-1411909632,1411909759,GB
-1411909760,1411911423,EU
-1411911424,1411911439,GB
-1411911440,1411911615,EU
-1411911616,1411911647,GB
-1411911648,1411911679,EU
1411911680,1411915775,US
-1411915776,1411915839,GB
-1411915840,1411915903,EU
-1411915904,1411915911,GB
-1411915912,1411915935,EU
-1411915936,1411915967,GB
-1411915968,1411916031,EU
-1411916032,1411916095,GB
-1411916096,1411916295,EU
-1411916296,1411916303,GB
-1411916304,1411916799,EU
-1411916800,1411916863,GB
-1411916864,1411917567,EU
-1411917568,1411917639,GB
-1411917640,1411917663,EU
-1411917664,1411917695,GB
-1411917696,1411917759,EU
-1411917760,1411917791,GB
-1411917792,1411919871,EU
1411919872,1411923967,DE
1411923968,1411940351,BG
1411940352,1411973119,PL
-1411973120,1411999751,SI
-1411999752,1411999767,BA
-1411999768,1411999775,SI
-1411999776,1411999791,BA
-1411999792,1411999807,SI
-1411999808,1411999847,BA
-1411999848,1411999871,SI
-1411999872,1411999895,BA
-1411999896,1411999903,SI
-1411999904,1411999911,BA
-1411999912,1411999919,SI
-1411999920,1411999927,BA
-1411999928,1411999935,SI
-1411999936,1411999943,BA
-1411999944,1411999951,SI
-1411999952,1411999959,BA
-1411999960,1411999967,SI
-1411999968,1412000767,BA
-1412000768,1412000775,SI
-1412000776,1412000791,BA
-1412000792,1412000863,SI
-1412000864,1412000879,BA
-1412000880,1412000895,SI
-1412000896,1412000911,BA
-1412000912,1412000943,SI
-1412000944,1412000959,BA
-1412000960,1412000975,SI
-1412000976,1412000999,BA
-1412001000,1412001007,SI
-1412001008,1412001015,BA
-1412001016,1412001311,SI
-1412001312,1412001319,DE
-1412001320,1412001807,SI
-1412001808,1412001855,RO
-1412001856,1412001919,SI
-1412001920,1412002303,RO
-1412002304,1412002559,SI
-1412002560,1412002783,MK
-1412002784,1412002815,SI
-1412002816,1412003119,BA
-1412003120,1412003135,SI
-1412003136,1412003151,BA
-1412003152,1412003199,SI
-1412003200,1412003215,BA
-1412003216,1412003223,SI
-1412003224,1412003231,BA
-1412003232,1412003247,SI
-1412003248,1412003263,BA
-1412003264,1412003271,SI
-1412003272,1412003303,BA
-1412003304,1412003327,SI
-1412003328,1412003335,BA
-1412003336,1412003343,SI
-1412003344,1412003351,BA
-1412003352,1412003375,SI
-1412003376,1412003383,BA
-1412003384,1412003391,SI
-1412003392,1412003527,BA
-1412003528,1412003535,SI
-1412003536,1412003551,BA
-1412003552,1412003583,SI
-1412003584,1412003599,BA
-1412003600,1412003623,SI
-1412003624,1412003631,BA
-1412003632,1412003639,SI
-1412003640,1412003647,BA
-1412003648,1412003799,SI
-1412003800,1412003815,BA
-1412003816,1412003855,SI
-1412003856,1412003903,BG
-1412003904,1412003967,SI
-1412003968,1412004351,BG
-1412004352,1412004863,BA
-1412004864,1412005887,SI
+1411973120,1411999743,SI
+1411999744,1412001023,BA
+1412001024,1412002815,SI
+1412002816,1412003839,BA
+1412003840,1412005887,SI
1412005888,1412038655,NL
1412038656,1412071423,RU
1412071424,1412104191,CZ
@@ -55080,53 +18248,38 @@
1412136960,1412169727,BG
1412169728,1412202495,TR
1412202496,1412235263,DE
-1412235264,1412254719,GB
-1412254720,1412254975,NL
-1412254976,1412257535,GB
-1412257536,1412257599,NL
-1412257600,1412258559,GB
-1412258560,1412258815,DE
-1412258816,1412300799,GB
+1412235264,1412300799,GB
1412300800,1412333567,DE
1412333568,1412366335,LT
1412366336,1412399103,SK
1412399104,1412415487,RU
-1412415488,1412416511,AE
-1412416512,1412420351,IR
-1412420352,1412420607,AE
-1412420608,1412431871,IR
+1412415488,1412419583,AE
+1412419584,1412427775,IR
+1412427776,1412429823,AE
+1412429824,1412431871,IR
1412431872,1412562943,NO
1412562944,1412628479,EE
-1412628480,1412644863,TR
+1412628480,1412641791,TR
+1412641792,1412642815,DE
+1412642816,1412644863,TR
1412644864,1412661247,RU
1412661248,1412677631,GB
1412677632,1412685823,RU
-1412685824,1412686239,IE
-1412686240,1412686335,BB
-1412686336,1412689315,IE
-1412689316,1412689343,GB
-1412689344,1412690191,IE
-1412690192,1412690199,GB
-1412690200,1412694015,IE
+1412685824,1412694015,IE
1412694016,1412710399,EE
1412710400,1412726783,RU
1412726784,1412743167,SI
1412743168,1412775935,NO
1412775936,1412792319,NL
1412792320,1412793343,US
-1412793344,1412793855,EU
1412793856,1412804607,US
-1412804608,1412804863,EU
1412804864,1412805631,US
-1412805632,1412806143,EU
1412806144,1412808703,US
1412808704,1412825087,RU
1412825088,1412830463,IQ
1412830464,1412832767,LB
1412832768,1412833023,SL
-1412833024,1412833279,LB
-1412833280,1412833535,CI
-1412833536,1412841471,LB
+1412833024,1412841471,LB
1412841472,1412857855,UZ
1412857856,1412874239,BG
1412874240,1412890623,RU
@@ -55135,10 +18288,16 @@
1412923392,1412939775,FR
1412939776,1412956159,CH
1412956160,1413480447,DE
-1413480448,1414004735,GB
-1414004736,1414069218,CH
+1413480448,1414004735,IN
+1414004736,1414036607,CH
+1414036608,1414036991,DE
+1414036992,1414039551,CH
+1414039552,1414040575,DE
+1414040576,1414069218,CH
1414069219,1414069219,AT
-1414069220,1414266879,CH
+1414069220,1414094847,CH
+1414094848,1414095615,DE
+1414095616,1414266879,CH
1414266880,1414529023,ES
1414529024,1415053311,NL
1415053312,1415184383,ES
@@ -55148,316 +18307,23 @@
1415577600,1416101887,FR
1416101888,1416364031,NL
1416364032,1416626175,IL
-1416626176,1417019391,AT
-1417019392,1417084927,DE
-1417084928,1417117695,AT
-1417117696,1417150463,DE
+1416626176,1416941567,AT
+1416941568,1416943615,CH
+1416943616,1416944639,AT
+1416944640,1416945663,CZ
+1416945664,1416953855,AT
+1416953856,1417019391,RO
+1417019392,1417150463,DE
1417150464,1417674751,ES
1417674752,1421869055,DE
1421869056,1422393343,BE
-1422393344,1422393599,DE
-1422393600,1422393855,IT
-1422393856,1422397967,DE
-1422397968,1422397983,CH
-1422397984,1422398847,DE
-1422398848,1422398879,ES
-1422398880,1422399231,DE
-1422399232,1422399487,US
-1422399488,1422399999,DE
-1422400000,1422400255,IT
-1422400256,1422400511,DE
-1422400512,1422400767,BR
-1422400768,1422401127,DE
-1422401128,1422401135,US
-1422401136,1422401319,DE
-1422401320,1422401327,AT
-1422401328,1422403839,DE
-1422403840,1422403903,IT
-1422403904,1422403935,SE
-1422403936,1422403943,AT
-1422403944,1422406399,DE
-1422406400,1422406463,GB
-1422406464,1422406471,AT
-1422406472,1422406475,DE
-1422406476,1422406479,US
-1422406480,1422406527,DE
-1422406528,1422406543,US
-1422406544,1422406559,DK
-1422406560,1422406575,RU
-1422406576,1422406623,DE
-1422406624,1422406639,AT
-1422406640,1422410335,DE
-1422410336,1422410343,AT
-1422410344,1422410367,DE
-1422410368,1422410495,IT
-1422410496,1422411399,DE
-1422411400,1422411407,RO
-1422411408,1422411439,DE
-1422411440,1422411455,US
-1422411456,1422411775,DE
-1422411776,1422412031,AT
-1422412032,1422412303,DE
-1422412304,1422412319,CH
-1422412320,1422412527,DE
-1422412528,1422412543,RO
-1422412544,1422413567,DE
+1422393344,1422413567,DE
1422413568,1422413695,AT
1422413696,1422413727,US
-1422413728,1422418175,DE
-1422418176,1422418943,US
-1422418944,1422419967,DE
-1422419968,1422423807,US
-1422423808,1422425855,DE
-1422425856,1422430463,US
-1422430464,1422437391,DE
-1422437392,1422437399,AT
-1422437400,1422437439,DE
-1422437440,1422437455,CH
-1422437456,1422437471,DE
-1422437472,1422437487,AT
-1422437488,1422437503,DE
-1422437504,1422437519,AT
-1422437520,1422437647,DE
-1422437648,1422437655,AT
-1422437656,1422437695,DE
-1422437696,1422437711,CH
-1422437712,1422437727,DE
-1422437728,1422437743,AT
-1422437744,1422437759,DE
-1422437760,1422437775,AT
-1422437776,1422437903,DE
-1422437904,1422437911,AT
-1422437912,1422437951,DE
-1422437952,1422437967,CH
-1422437968,1422437983,DE
-1422437984,1422437999,AT
-1422438000,1422438015,DE
-1422438016,1422438031,AT
-1422438032,1422438159,DE
-1422438160,1422438167,AT
-1422438168,1422438207,DE
-1422438208,1422438223,CH
-1422438224,1422438239,DE
-1422438240,1422438255,AT
-1422438256,1422438271,DE
-1422438272,1422438287,AT
-1422438288,1422438415,DE
-1422438416,1422438423,AT
-1422438424,1422438463,DE
-1422438464,1422438479,CH
-1422438480,1422438495,DE
-1422438496,1422438511,AT
-1422438512,1422438527,DE
-1422438528,1422438543,AT
-1422438544,1422438671,DE
-1422438672,1422438679,AT
-1422438680,1422438719,DE
-1422438720,1422438735,CH
-1422438736,1422438751,DE
-1422438752,1422438767,AT
-1422438768,1422438783,DE
-1422438784,1422438799,AT
-1422438800,1422438927,DE
-1422438928,1422438935,AT
-1422438936,1422438975,DE
-1422438976,1422438991,CH
-1422438992,1422439007,DE
-1422439008,1422439023,AT
-1422439024,1422439039,DE
-1422439040,1422439055,AT
-1422439056,1422439183,DE
-1422439184,1422439191,AT
-1422439192,1422439231,DE
-1422439232,1422439247,CH
-1422439248,1422439263,DE
-1422439264,1422439279,AT
-1422439280,1422439295,DE
-1422439296,1422439311,AT
-1422439312,1422439439,DE
-1422439440,1422439447,AT
-1422439448,1422439487,DE
-1422439488,1422439503,CH
-1422439504,1422439519,DE
-1422439520,1422439535,AT
-1422439536,1422439551,DE
-1422439552,1422439567,AT
-1422439568,1422439695,DE
-1422439696,1422439703,AT
-1422439704,1422439743,DE
-1422439744,1422439759,CH
-1422439760,1422439775,DE
-1422439776,1422439791,AT
-1422439792,1422439807,DE
-1422439808,1422439823,AT
-1422439824,1422439951,DE
-1422439952,1422439959,AT
-1422439960,1422439999,DE
-1422440000,1422440015,CH
-1422440016,1422440207,DE
-1422440208,1422440215,AT
-1422440216,1422440255,DE
-1422440256,1422440271,CH
-1422440272,1422440463,DE
-1422440464,1422440471,AT
-1422440472,1422440511,DE
-1422440512,1422440527,CH
-1422440528,1422440719,DE
-1422440720,1422440727,AT
-1422440728,1422440767,DE
-1422440768,1422440783,CH
-1422440784,1422440975,DE
-1422440976,1422440983,AT
-1422440984,1422441023,DE
-1422441024,1422441039,CH
-1422441040,1422441231,DE
-1422441232,1422441239,AT
-1422441240,1422441279,DE
-1422441280,1422441295,CH
-1422441296,1422441487,DE
-1422441488,1422441495,AT
-1422441496,1422441535,DE
-1422441536,1422441551,CH
-1422441552,1422441743,DE
-1422441744,1422441751,AT
-1422441752,1422441791,DE
-1422441792,1422441807,CH
-1422441808,1422441999,DE
-1422442000,1422442007,AT
-1422442008,1422442047,DE
-1422442048,1422442063,CH
-1422442064,1422442255,DE
-1422442256,1422442263,AT
-1422442264,1422442303,DE
-1422442304,1422442319,CH
-1422442320,1422444287,DE
-1422444288,1422444543,US
-1422444544,1422444671,CN
-1422444672,1422445055,DE
-1422445056,1422446079,IT
-1422446080,1422451023,DE
-1422451024,1422451039,AT
-1422451040,1422451119,DE
-1422451120,1422451127,AT
-1422451128,1422451551,DE
-1422451552,1422451583,SE
-1422451584,1422451687,DE
-1422451688,1422451695,AT
-1422451696,1422452271,DE
-1422452272,1422452275,RU
-1422452276,1422452567,DE
-1422452568,1422452575,AT
-1422452576,1422452591,DE
-1422452592,1422452607,AT
-1422452608,1422453007,DE
-1422453008,1422453015,AT
-1422453016,1422453263,DE
-1422453264,1422453271,AT
-1422453272,1422453519,DE
-1422453520,1422453527,AT
-1422453528,1422453775,DE
-1422453776,1422453783,AT
-1422453784,1422454031,DE
-1422454032,1422454039,AT
-1422454040,1422454287,DE
-1422454288,1422454295,AT
-1422454296,1422454543,DE
-1422454544,1422454551,AT
-1422454552,1422454847,DE
-1422454848,1422454851,US
-1422454852,1422454871,DE
-1422454872,1422454879,AT
-1422454880,1422456127,DE
-1422456128,1422456135,AT
-1422456136,1422456143,DE
-1422456144,1422456159,AT
-1422456160,1422456639,DE
-1422456640,1422456647,AT
-1422456648,1422456655,DE
-1422456656,1422456671,AT
-1422456672,1422457215,DE
-1422457216,1422457223,AT
-1422457224,1422457231,DE
-1422457232,1422457247,AT
-1422457248,1422457407,DE
-1422457408,1422457415,AT
-1422457416,1422457423,DE
-1422457424,1422457439,AT
-1422457440,1422457471,DE
-1422457472,1422457487,US
-1422457488,1422458175,DE
-1422458176,1422458191,AT
-1422458192,1422458431,DE
-1422458432,1422458447,AT
-1422458448,1422458671,DE
-1422458672,1422458687,AT
-1422458688,1422460927,DE
-1422460928,1422461183,US
-1422461184,1422464255,DE
-1422464256,1422465279,US
-1422465280,1422465535,DE
-1422465536,1422466559,US
-1422466560,1422467695,DE
-1422467696,1422467711,RO
-1422467712,1422467967,DE
-1422467968,1422468031,BE
-1422468032,1422468671,DE
-1422468672,1422468735,IT
-1422468736,1422468799,DE
-1422468800,1422468863,CN
-1422468864,1422469839,DE
-1422469840,1422469847,RO
-1422469848,1422469903,DE
-1422469904,1422469911,AT
-1422469912,1422470159,DE
-1422470160,1422470167,AT
-1422470168,1422470415,DE
-1422470416,1422470423,AT
-1422470424,1422470671,DE
-1422470672,1422470679,AT
-1422470680,1422470927,DE
-1422470928,1422470935,AT
-1422470936,1422471183,DE
-1422471184,1422471191,AT
-1422471192,1422471439,DE
-1422471440,1422471447,AT
-1422471448,1422471695,DE
-1422471696,1422471703,AT
-1422471704,1422471951,DE
-1422471952,1422471959,AT
-1422471960,1422472207,DE
-1422472208,1422472215,AT
-1422472216,1422472463,DE
-1422472464,1422472471,AT
-1422472472,1422472719,DE
-1422472720,1422472727,AT
-1422472728,1422472975,DE
-1422472976,1422472983,AT
-1422472984,1422473231,DE
-1422473232,1422473239,AT
-1422473240,1422473487,DE
-1422473488,1422473495,AT
-1422473496,1422473743,DE
-1422473744,1422473751,AT
-1422473752,1422473999,DE
-1422474000,1422474007,AT
-1422474008,1422474255,DE
-1422474256,1422474263,AT
-1422474264,1422474511,DE
-1422474512,1422474519,AT
-1422474520,1422474767,DE
-1422474768,1422474775,AT
-1422474776,1422475023,DE
-1422475024,1422475031,AT
-1422475032,1422476863,DE
-1422476864,1422476895,GB
-1422476896,1422479615,DE
-1422479616,1422479871,BE
-1422479872,1422483423,DE
-1422483424,1422483439,GB
-1422483440,1422484463,DE
-1422484464,1422484479,GB
-1422484480,1422491647,DE
-1422491648,1422508031,RU
+1422413728,1422491647,DE
+1422491648,1422495615,RU
+1422495616,1422495679,NL
+1422495680,1422508031,RU
1422508032,1422512127,BG
1422512128,1422516223,PL
1422516224,1422520319,BY
@@ -55467,34 +18333,16 @@
1422655488,1422721023,RU
1422721024,1422729215,PL
1422729216,1422737407,NO
-1422737408,1422745599,EU
1422745600,1422753791,EG
1422753792,1422761983,FR
1422761984,1422770175,PL
1422770176,1422786559,GR
1422786560,1422852095,HU
-1422852096,1422856383,EU
-1422856384,1422856447,FR
-1422856448,1422856703,EU
-1422856704,1422856959,FR
-1422856960,1422857087,EU
1422857088,1422857151,FR
-1422857152,1422857215,EU
-1422857216,1422857727,FR
-1422857728,1422857791,EU
-1422857792,1422857855,FR
-1422857856,1422857919,EU
-1422857920,1422858047,FR
-1422858048,1422858111,EU
-1422858112,1422858143,FR
-1422858144,1422858239,EU
-1422858240,1422858495,FR
-1422858496,1422909439,EU
-1422909440,1422909951,NL
-1422909952,1422911231,EU
-1422911232,1422911487,NL
-1422911488,1422916863,EU
-1422916864,1422917631,GB
+1422916608,1422916863,GB
+1422917120,1422917343,GB
+1422917344,1422917375,NL
+1422917376,1422917631,GB
1422917632,1423441919,NO
1423441920,1423704063,SE
1423704064,1423966207,IT
@@ -55504,265 +18352,26 @@
1424286720,1424287743,BG
1424287744,1424359423,IL
1424359424,1424490495,FI
-1424490496,1424523263,ES
+1424490496,1424503711,ES
+1424503712,1424503715,PT
+1424503716,1424523263,ES
1424523264,1424556031,RO
1424556032,1424588799,EG
-1424588800,1424589311,DE
-1424589312,1424589567,FR
-1424589568,1424590719,GB
-1424590720,1424590735,SE
-1424590736,1424590751,GB
-1424590752,1424590767,SE
-1424590768,1424590771,GB
-1424590772,1424590783,SE
-1424590784,1424590847,CH
-1424590848,1424591359,SE
-1424591360,1424591367,GB
-1424591368,1424591406,SE
-1424591407,1424591407,GB
-1424591408,1424591423,SE
-1424591424,1424591439,GB
-1424591440,1424591447,SE
-1424591448,1424591455,GB
-1424591456,1424591463,SE
-1424591464,1424591471,GB
-1424591472,1424591551,SE
-1424591552,1424591615,CZ
-1424591616,1424592639,GB
-1424592640,1424593151,FR
-1424593152,1424593407,NL
-1424593408,1424593663,DE
-1424593664,1424593727,SK
-1424593728,1424593791,HU
-1424593792,1424593919,DE
-1424593920,1424593967,FR
-1424593968,1424593983,GB
-1424593984,1424594047,FR
-1424594048,1424594055,GB
-1424594056,1424594063,IT
-1424594064,1424594103,FR
-1424594104,1424594111,GB
-1424594112,1424594175,FR
-1424594176,1424594431,GB
-1424594432,1424594687,IE
-1424594688,1424595455,GB
-1424595456,1424595527,IT
-1424595528,1424595535,GB
-1424595536,1424595551,IT
-1424595552,1424595559,GB
-1424595560,1424595575,IT
-1424595576,1424595583,GB
-1424595584,1424596479,IT
-1424596480,1424596543,GB
-1424596544,1424596991,FR
-1424596992,1424597255,CZ
-1424597256,1424597263,GB
-1424597264,1424597311,CZ
-1424597312,1424597343,GB
-1424597344,1424597351,CH
-1424597352,1424597375,GB
-1424597376,1424597391,CZ
-1424597392,1424597407,GB
-1424597408,1424597431,CZ
-1424597432,1424597503,GB
-1424597504,1424597759,FR
-1424597760,1424598015,IT
-1424598016,1424599039,GB
-1424599040,1424599279,DK
-1424599280,1424599295,GB
-1424599296,1424599551,DK
-1424599552,1424599815,HU
-1424599816,1424599823,GB
-1424599824,1424599855,HU
-1424599856,1424599871,GB
-1424599872,1424599875,HU
-1424599876,1424599879,GB
-1424599880,1424599887,HU
-1424599888,1424599903,GB
-1424599904,1424599935,HU
-1424599936,1424599999,GB
-1424600000,1424600031,HU
-1424600032,1424600063,GB
-1424600064,1424600319,CH
-1424600320,1424600575,GB
+1424588800,1424592639,GB
+1424592640,1424592895,FR
+1424592896,1424595711,GB
+1424595712,1424595967,IT
+1424595968,1424597069,GB
+1424597070,1424597070,CZ
+1424597071,1424600575,GB
1424600576,1424600831,FR
-1424600832,1424601087,BE
-1424601088,1424601343,GB
-1424601344,1424601367,ES
-1424601368,1424601471,GB
-1424601472,1424601599,ES
-1424601600,1424601855,CH
-1424601856,1424602111,GB
-1424602112,1424602623,DE
-1424602624,1424602735,GB
-1424602736,1424602743,IT
-1424602744,1424602879,GB
+1424600832,1424602879,GB
1424602880,1424603135,US
-1424603136,1424603391,SK
-1424603392,1424603647,DE
-1424603648,1424603903,GB
-1424603904,1424604039,ES
-1424604040,1424604047,GB
-1424604048,1424604095,ES
-1424604096,1424604103,GB
-1424604104,1424604159,ES
-1424604160,1424604543,NL
-1424604544,1424604671,GB
-1424604672,1424604927,EU
-1424604928,1424604959,NL
-1424604960,1424604967,GB
-1424604968,1424605071,NL
-1424605072,1424605079,GB
-1424605080,1424605119,NL
-1424605120,1424605135,GB
-1424605136,1424605183,NL
-1424605184,1424605247,GB
-1424605248,1424605279,NL
-1424605280,1424605439,GB
-1424605440,1424605567,BG
-1424605568,1424605583,GR
-1424605584,1424605599,BE
-1424605600,1424605607,GB
-1424605608,1424605623,BG
-1424605624,1424605631,GB
-1424605632,1424605695,BG
-1424605696,1424605951,NL
-1424605952,1424605959,CH
-1424605960,1424605967,AT
-1424605968,1424605983,GB
-1424605984,1424606023,AT
-1424606024,1424606207,GB
-1424606208,1424606719,IT
-1424606720,1424606975,NL
-1424606976,1424607167,GB
-1424607168,1424607199,SK
-1424607200,1424607215,GB
-1424607216,1424607223,SK
-1424607224,1424607487,GB
-1424607488,1424607871,DE
-1424607872,1424608031,GB
-1424608032,1424608083,FR
-1424608084,1424608087,GB
-1424608088,1424608127,FR
-1424608128,1424608279,GB
-1424608280,1424608383,FR
-1424608384,1424608399,ES
-1424608400,1424608511,FR
-1424608512,1424608559,ES
-1424608560,1424608567,GB
-1424608568,1424608671,ES
-1424608672,1424608691,GB
-1424608692,1424609023,ES
-1424609024,1424609055,GB
-1424609056,1424609151,DE
-1424609152,1424609215,GB
-1424609216,1424609231,DE
-1424609232,1424609247,GB
-1424609248,1424609255,DE
-1424609256,1424609271,GB
-1424609272,1424609279,DE
-1424609280,1424609375,CH
-1424609376,1424609383,GB
-1424609384,1424609395,CH
-1424609396,1424609399,GB
-1424609400,1424609535,CH
-1424609536,1424609543,GB
-1424609544,1424609551,CH
-1424609552,1424609559,GB
-1424609560,1424609719,CH
-1424609720,1424609727,GB
-1424609728,1424609743,CH
-1424609744,1424609759,GB
-1424609760,1424609791,CH
-1424609792,1424610303,GB
-1424610304,1424610559,TZ
-1424610560,1424610815,PL
-1424610816,1424611071,FR
-1424611072,1424611135,BE
-1424611136,1424611175,GB
-1424611176,1424611199,BE
-1424611200,1424611263,GB
-1424611264,1424611271,BE
-1424611272,1424611279,LU
-1424611280,1424611287,BE
-1424611288,1424611295,FR
-1424611296,1424611319,BE
-1424611320,1424611327,GB
-1424611328,1424611583,PL
-1424611584,1424612095,GB
-1424612096,1424612223,CZ
-1424612224,1424612239,GB
-1424612240,1424612319,CZ
-1424612320,1424612607,GB
-1424612608,1424612671,AE
-1424612672,1424612863,GB
-1424612864,1424613119,FR
-1424613120,1424613375,GB
-1424613376,1424613631,ES
-1424613632,1424614143,IT
-1424614144,1424614415,GB
-1424614416,1424614503,IT
-1424614504,1424614511,GB
-1424614512,1424614655,IT
-1424614656,1424614911,FR
-1424614912,1424615167,RO
-1424615168,1424615679,GB
-1424615680,1424615935,IT
-1424615936,1424616191,FR
-1424616192,1424616320,IT
-1424616321,1424616479,GB
-1424616480,1424616483,ES
-1424616484,1424616487,GB
-1424616488,1424616503,ES
-1424616504,1424616511,GB
-1424616512,1424616615,ES
-1424616616,1424616631,GB
-1424616632,1424616655,ES
-1424616656,1424616659,GB
-1424616660,1424616695,ES
-1424616696,1424616703,GB
-1424616704,1424616959,US
-1424616960,1424617215,FR
+1424603136,1424607743,GB
+1424607744,1424607775,DE
+1424607776,1424617215,GB
1424617216,1424617231,IT
-1424617232,1424617247,GB
-1424617248,1424617359,IT
-1424617360,1424617391,GB
-1424617392,1424617395,IT
-1424617396,1424617399,GB
-1424617400,1424617407,IT
-1424617408,1424617423,ES
-1424617424,1424617431,GB
-1424617432,1424617447,IT
-1424617448,1424617455,GB
-1424617456,1424617463,IT
-1424617464,1424617471,GB
-1424617472,1424617727,US
-1424617728,1424617983,GB
-1424617984,1424618031,IT
-1424618032,1424618047,GB
-1424618048,1424618111,IT
-1424618112,1424618143,GB
-1424618144,1424618191,IT
-1424618192,1424618207,GB
-1424618208,1424618239,IT
-1424618240,1424618495,NL
-1424618496,1424618751,GB
-1424618752,1424618927,FR
-1424618928,1424618943,IT
-1424618944,1424618991,FR
-1424618992,1424619007,GB
-1424619008,1424619215,IT
-1424619216,1424619223,GB
-1424619224,1424619775,IT
-1424619776,1424619807,BE
-1424619808,1424619839,GB
-1424619840,1424619855,BE
-1424619856,1424619863,GB
-1424619864,1424619915,BE
-1424619916,1424619919,GB
-1424619920,1424620031,BE
-1424620032,1424621311,GB
-1424621312,1424621567,IT
+1424617232,1424621567,GB
1424621568,1424625663,PL
1424625664,1424629759,GB
1424629760,1424633855,PL
@@ -55777,65 +18386,27 @@
1424713728,1424719871,SA
1424719872,1424722431,IE
1424722432,1424723199,CZ
-1424723200,1424724735,DE
-1424724736,1424724991,IE
+1424723200,1424724991,DE
1424724992,1424727039,GB
-1424727040,1424727295,IE
-1424727296,1424727551,SL
-1424727552,1424728063,PL
-1424728064,1424728319,IE
+1424727040,1424728319,DE
1424728320,1424729855,FR
-1424729856,1424730367,DE
-1424730368,1424730623,ES
-1424730624,1424730879,GB
+1424729856,1424730879,DE
1424730880,1424733183,IE
1424733184,1424733951,NL
1424733952,1424735103,SE
-1424735104,1424736127,DE
-1424736128,1424736383,AT
-1424736384,1424736895,FR
-1424736896,1424737151,DE
-1424737152,1424737279,GB
-1424737280,1424737407,DK
-1424737408,1424737535,AT
-1424737536,1424737671,DE
-1424737672,1424737751,GB
-1424737752,1424738815,DE
+1424735104,1424738815,DE
1424738816,1424739583,SE
-1424739584,1424739839,GB
-1424739840,1424740511,DE
-1424740512,1424740551,GB
-1424740552,1424741119,DE
-1424741120,1424741375,IE
-1424741376,1424742911,DE
-1424742912,1424743167,IE
-1424743168,1424743423,IT
-1424743424,1424743935,DE
-1424743936,1424744191,GB
-1424744192,1424744703,DE
-1424744704,1424744959,GB
-1424744960,1424746495,DE
+1424739584,1424746495,DE
1424746496,1424749055,IE
-1424749056,1424749311,SL
-1424749312,1424750079,DE
-1424750080,1424750335,FR
-1424750336,1424750591,GB
-1424750592,1424750847,FR
-1424750848,1424751103,IE
-1424751104,1424751359,DE
-1424751360,1424751615,AT
-1424751616,1424752127,IE
-1424752128,1424752383,DE
-1424752384,1424752639,NL
+1424749056,1424752639,DE
1424752640,1424785407,HU
-1424785408,1424811775,ES
-1424811776,1424812031,GB
-1424812032,1424818175,ES
+1424785408,1424818175,ES
1424818176,1424850943,RU
1424850944,1424883711,LV
1424883712,1424916479,DK
1424916480,1424949247,BG
-1424949248,1424982015,RO
+1424949248,1424965631,RO
+1424965632,1424982015,FR
1424982016,1425014783,FI
1425014784,1425031167,LT
1425031168,1425047551,FI
@@ -55861,84 +18432,43 @@
1425375232,1425391615,DE
1425391616,1425407999,LV
1425408000,1425424383,NL
-1425424384,1425424463,A2
-1425424464,1425424895,DE
-1425424896,1425425151,NE
-1425425152,1425426303,DE
-1425426304,1425426319,IR
-1425426320,1425426343,DE
-1425426344,1425426352,IR
-1425426353,1425426431,DE
+1425424384,1425426431,DE
1425426432,1425428479,KW
1425428480,1425430527,GB
1425430528,1425432575,SE
1425432576,1425434623,HR
1425434624,1425436671,FR
1425436672,1425438719,GB
-1425438720,1425439271,DE
-1425439272,1425439279,CZ
-1425439280,1425439399,DE
-1425439400,1425439407,CZ
-1425439408,1425439535,DE
-1425439536,1425439543,CZ
-1425439544,1425439711,DE
-1425439712,1425439727,CZ
-1425439728,1425440767,DE
+1425438720,1425440767,DE
1425440768,1425442815,SE
1425442816,1425444863,GB
-1425444864,1425445126,IT
-1425445127,1425445127,FR
-1425445128,1425445139,IT
-1425445140,1425445141,GB
-1425445142,1425446911,IT
+1425444864,1425446911,IT
1425446912,1425448959,GB
1425448960,1425451007,CZ
1425451008,1425459199,GB
-1425459200,1425460735,IM
-1425460736,1425460927,GB
-1425460928,1425460967,IM
-1425460968,1425460975,GB
-1425460976,1425460983,IM
-1425460984,1425461247,GB
+1425459200,1425461247,IM
1425461248,1425463295,ES
1425463296,1425467135,FR
1425467136,1425467391,ES
1425467392,1425469439,CH
1425469440,1425471487,DK
-1425471488,1425471783,DE
-1425471784,1425471791,GB
-1425471792,1425471799,CH
-1425471800,1425471815,DE
-1425471816,1425471823,CH
-1425471824,1425471831,GB
-1425471832,1425471863,DE
-1425471864,1425471871,GB
-1425471872,1425471887,IT
-1425471888,1425471895,GB
-1425471896,1425471919,DE
-1425471920,1425471943,GB
-1425471944,1425471967,DE
-1425471968,1425471975,CH
-1425471976,1425472007,DE
-1425472008,1425472011,GB
-1425472012,1425472015,ES
-1425472016,1425472035,DE
-1425472036,1425472039,GB
-1425472040,1425473535,DE
-1425473536,1425485311,RO
-1425485312,1425485823,US
-1425485824,1425506303,RO
+1425471488,1425473535,DE
+1425473536,1425479679,RO
+1425479680,1425480703,MD
+1425480704,1425484799,RO
+1425484800,1425485311,MD
+1425485312,1425489407,RO
+1425489408,1425489663,NL
+1425489664,1425506303,RO
1425506304,1425522687,NO
1425522688,1425539071,IT
-1425539072,1425712895,FI
-1425712896,1425713151,AX
-1425713152,1425715071,FI
-1425715072,1425715199,AX
-1425715200,1425715967,FI
-1425715968,1425716223,AX
-1425716224,1425801215,FI
-1425801216,1425817599,BG
-1425817600,1425833983,DE
+1425539072,1425801215,FI
+1425801216,1425813759,BG
+1425813760,1425814015,MK
+1425814016,1425814271,BG
+1425814272,1425814527,MK
+1425814528,1425817599,BG
+1425820160,1425820415,DE
1425833984,1425850367,RU
1425850368,1425866751,GB
1425866752,1425883135,CH
@@ -55946,286 +18476,45 @@
1425899520,1425915903,IT
1425915904,1425932287,FI
1425932288,1425948671,GR
-1425948672,1425949183,DE
-1425949184,1425949191,NL
-1425949192,1425965055,DE
-1425965056,1425965100,ES
-1425965101,1425965112,FR
-1425965113,1425965116,ZA
-1425965117,1425965120,A2
-1425965121,1425965182,IT
-1425965183,1425965183,EU
-1425965184,1425965503,IT
-1425965504,1425965567,FR
-1425965568,1425965568,EU
-1425965569,1425965572,NG
-1425965573,1425965576,US
-1425965577,1425965580,FR
-1425965581,1425965584,BJ
-1425965585,1425965588,ES
-1425965589,1425965592,EU
-1425965593,1425965631,FR
-1425965632,1425965823,A2
-1425965824,1425965952,EU
-1425965953,1425966079,A2
-1425966080,1425966080,EU
-1425966081,1425966088,DE
-1425966089,1425966104,EU
-1425966105,1425966128,DE
-1425966129,1425966144,EU
-1425966145,1425966152,DE
-1425966153,1425966208,EU
-1425966209,1425966224,DE
-1425966225,1425966239,EU
-1425966240,1425966271,IT
-1425966272,1425966335,DE
-1425966336,1425966336,EU
-1425966337,1425966340,IT
-1425966341,1425966344,EU
-1425966345,1425966392,IT
-1425966393,1425966400,EU
-1425966401,1425966416,IT
-1425966417,1425966463,EU
-1425966464,1425966527,IT
-1425966528,1425966591,A2
-1425966592,1425966592,EU
-1425966593,1425966706,IT
-1425966707,1425966720,EU
-1425966721,1425966728,BJ
-1425966729,1425966735,EU
-1425966736,1425966751,BJ
-1425966752,1425966815,EU
-1425966816,1425966847,BJ
-1425966848,1425966852,EU
-1425966853,1425966896,DE
-1425966897,1425966910,IT
-1425966911,1425966911,EU
-1425966912,1425966975,DE
-1425966976,1425967039,IT
-1425967040,1425967103,DE
-1425967104,1425967104,EU
-1425967105,1425967120,TR
-1425967121,1425967359,IT
-1425967360,1425967615,A2
-1425967616,1425967807,IT
-1425967808,1425967871,A2
-1425967872,1425968383,DZ
-1425968384,1425968638,GB
-1425968639,1425968703,EU
-1425968704,1425968831,IT
-1425968832,1425968895,A2
-1425968896,1425969023,IT
-1425969024,1425969087,A2
-1425969088,1425969151,IT
-1425969152,1425969199,EU
-1425969200,1425969343,IT
-1425969344,1425969407,A2
-1425969408,1425969471,IT
-1425969472,1425969599,A2
-1425969600,1425969663,IT
-1425969664,1425969727,FR
-1425969728,1425969791,IT
-1425969792,1425969855,FR
-1425969856,1425969983,A2
-1425969984,1425970047,IT
-1425970048,1425970111,DE
-1425970112,1425970175,A2
+1425948672,1425965055,DE
+1425965056,1425970175,IT
1425970176,1425970431,FR
-1425970432,1425970495,EU
-1425970496,1425970687,IT
-1425970688,1425970688,EU
-1425970689,1425970751,DE
-1425970752,1425970815,EU
-1425970816,1425970943,A2
-1425970944,1425971007,IT
-1425971008,1425971071,NL
-1425971072,1425971199,A2
-1425971200,1425971231,NL
-1425971232,1425971263,DE
-1425971264,1425971455,NL
-1425971456,1425971519,A2
-1425971520,1425971583,IT
-1425971584,1425971647,A2
-1425971648,1425971711,IT
-1425971712,1425971727,AE
-1425971728,1425971743,US
-1425971744,1425971775,EU
-1425971776,1425971839,DE
-1425971840,1425971903,SE
-1425971904,1425972223,A2
-1425972224,1425972351,EU
-1425972352,1425972415,A2
-1425972416,1425972479,IT
-1425972480,1425972607,EU
-1425972608,1425972671,A2
-1425972672,1425972735,IT
-1425972736,1425972863,EU
-1425972864,1425972991,A2
-1425972992,1425973119,EU
-1425973120,1425973183,A2
-1425973184,1425973247,IT
-1425973248,1425973248,EU
-1425973249,1425973260,PL
-1425973261,1425973264,EU
-1425973265,1425973268,DE
-1425973269,1425973272,FR
-1425973273,1425973276,PL
-1425973277,1425973280,EU
-1425973281,1425973300,PL
-1425973301,1425973308,DE
-1425973309,1425973332,PL
-1425973333,1425973336,DE
-1425973337,1425973439,EU
-1425973440,1425973503,PL
-1425973504,1425973759,IT
-1425973760,1425973823,PL
-1425973824,1425973887,IT
-1425973888,1425974143,A2
-1425974144,1425974207,IT
-1425974208,1425974271,A2
-1425974272,1425974463,EU
-1425974464,1425974527,IT
-1425974528,1425974719,EU
-1425974720,1425974783,A2
-1425974784,1425974847,IT
-1425974848,1425974911,SE
-1425974912,1425974975,A2
-1425974976,1425975039,IT
-1425975040,1425975103,A2
-1425975104,1425975167,IT
-1425975168,1425975231,A2
-1425975232,1425975295,IT
-1425975296,1425975296,EU
-1425975297,1425975360,PE
-1425975361,1425975423,A2
-1425975424,1425975551,IT
-1425975552,1425975679,FR
-1425975680,1425975743,IT
-1425975744,1425975807,A2
-1425975808,1425976063,IT
-1425976064,1425976064,EU
-1425976065,1425976126,FR
-1425976127,1425976127,EU
-1425976128,1425976191,IT
-1425976192,1425976255,FR
-1425976256,1425976319,IT
-1425976320,1425976320,EU
-1425976321,1425976328,FR
-1425976329,1425976336,GB
-1425976337,1425976344,EU
-1425976345,1425976352,FR
-1425976353,1425976368,GB
-1425976369,1425976372,FR
-1425976373,1425976380,GB
-1425976381,1425976388,FR
-1425976389,1425976392,IT
-1425976393,1425976432,FR
-1425976433,1425976440,GB
-1425976441,1425976448,FR
-1425976449,1425976464,GB
-1425976465,1425976575,EU
-1425976576,1425976830,GB
-1425976831,1425976831,EU
-1425976832,1425977342,GB
-1425977343,1425977343,EU
-1425977344,1425977855,IT
-1425977856,1425978111,DE
-1425978112,1425978367,BG
-1425978368,1425978368,EU
-1425978369,1425978388,IT
-1425978389,1425978389,EU
-1425978390,1425978495,IT
-1425978496,1425978559,A2
-1425978560,1425978624,EU
-1425978625,1425978751,IT
-1425978752,1425978815,EU
-1425978816,1425978819,IT
-1425978820,1425979071,EU
-1425979072,1425979135,IT
-1425979136,1425979327,EU
-1425979328,1425979391,IT
-1425979392,1425979392,EU
-1425979393,1425979400,DE
-1425979401,1425979412,EU
-1425979413,1425979416,DE
-1425979417,1425979436,EU
-1425979437,1425979456,DE
-1425979457,1425979460,EU
-1425979461,1425979464,DE
-1425979465,1425979472,EU
-1425979473,1425979476,DE
-1425979477,1425979480,EU
-1425979481,1425979488,DE
-1425979489,1425979503,EU
-1425979504,1425979519,IT
-1425979520,1425979583,DE
-1425979584,1425979647,A2
-1425979648,1425979652,EU
-1425979653,1425979656,AE
-1425979657,1425979660,EU
-1425979661,1425979692,AE
-1425979693,1425979704,EU
-1425979705,1425979708,AE
-1425979709,1425979711,EU
-1425979712,1425979775,DE
-1425979776,1425979839,US
-1425979840,1425979903,IT
-1425979904,1425979904,EU
-1425979905,1425979968,AE
-1425979969,1425979976,EU
-1425979977,1425979984,FR
-1425979985,1425979998,IT
-1425979999,1425979999,EU
-1425980000,1425980031,US
-1425980032,1425980095,DE
-1425980096,1425980159,AE
-1425980160,1425980287,IT
-1425980288,1425980351,A2
-1425980352,1425980415,IT
+1425970432,1425980415,IT
1425980416,1425980671,IQ
-1425980672,1425981439,A2
+1425980672,1425981439,IT
1425981440,1425997823,RU
1425997824,1426014207,MT
1426014208,1426030591,DK
1426030592,1426046975,BH
1426046976,1426063359,SI
-1426063360,1426587647,CH
+1426063360,1426094335,CH
+1426094336,1426094591,DE
+1426094592,1426112511,CH
+1426112512,1426112767,DE
+1426112768,1426118271,CH
+1426118272,1426118399,DE
+1426118400,1426168575,CH
+1426168576,1426168831,DE
+1426168832,1426175999,CH
+1426176000,1426176255,DE
+1426176256,1426587647,CH
1426587648,1426604031,SE
1426604032,1426620415,DE
1426636800,1426653183,GB
1426653184,1426669567,RO
1426669568,1426685951,IR
1426685952,1426702335,TJ
-1426702336,1426703103,LV
-1426703104,1426703167,RU
-1426703168,1426703214,LV
-1426703215,1426703217,RU
-1426703218,1426716159,LV
-1426716160,1426716415,RU
-1426716416,1426718719,LV
+1426702336,1426718719,LV
1426718720,1426731007,SI
1426731008,1426735103,HR
1426735104,1426751487,BE
1426751488,1426767871,FR
-1426767872,1426778991,DE
-1426778992,1426778999,IT
-1426779000,1426784255,DE
+1426767872,1426784255,DE
1426784256,1426800639,SE
1426800640,1426817023,PL
1426817024,1426833407,BG
1426833408,1426849791,SE
-1426849792,1426851519,NL
-1426851520,1426851583,PA
-1426851584,1426852352,NL
-1426852353,1426852359,RU
-1426852360,1426852367,SE
-1426852368,1426852375,NL
-1426852376,1426852383,US
-1426852384,1426857472,NL
-1426857473,1426857500,ES
-1426857501,1426864511,NL
-1426864512,1426864639,PA
-1426864640,1426866175,NL
+1426849792,1426866175,NL
1426866176,1426882559,GB
1426882560,1426898943,FR
1426898944,1426915327,RU
@@ -56234,2240 +18523,61 @@
1426948096,1426964479,DE
1426964480,1426967287,GB
1426967288,1426967295,ES
-1426967296,1426967455,GB
-1426967456,1426967463,ES
-1426967464,1426967567,GB
-1426967568,1426967575,ES
-1426967576,1426967671,GB
-1426967672,1426967679,ES
-1426967680,1426968343,GB
-1426968344,1426968351,ES
-1426968352,1426969135,GB
-1426969136,1426969151,ES
-1426969152,1426971855,GB
-1426971856,1426971863,ES
-1426971864,1426972319,GB
-1426972320,1426972326,FR
-1426972327,1426973335,GB
-1426973336,1426973343,ES
-1426973344,1426976031,GB
-1426976032,1426976047,ES
-1426976048,1426976111,GB
-1426976112,1426976119,ES
-1426976120,1426977663,GB
-1426977664,1426977671,ES
-1426977672,1426978999,GB
-1426979000,1426979007,ES
-1426979008,1426980863,GB
+1426967296,1426980863,GB
1426980864,1426997247,BG
1426997248,1427013631,PL
1427013632,1427030015,FR
-1427030016,1427031679,DE
-1427031680,1427031743,AT
-1427031744,1427031807,DE
-1427031808,1427032063,AT
-1427032064,1427032143,DE
-1427032144,1427032151,TW
-1427032152,1427032183,DE
-1427032184,1427032191,PL
-1427032192,1427032223,DE
-1427032224,1427032231,GR
-1427032232,1427032735,DE
+1427030016,1427032143,DE
+1427032144,1427032159,TW
+1427032160,1427032735,DE
1427032736,1427032743,AT
1427032744,1427032959,DE
1427032960,1427032967,NL
1427032968,1427033247,DE
1427033248,1427033263,TW
-1427033264,1427035391,DE
-1427035392,1427035519,GB
-1427035520,1427046399,DE
+1427033264,1427046399,DE
1427046400,1427062783,IR
1427062784,1427095551,RU
1427095552,1427111935,LV
1427111936,1427177471,DE
1427177472,1427220556,NL
1427220557,1427220557,KG
-1427220558,1427227135,NL
-1427227136,1427227647,US
-1427227648,1427227967,NL
-1427227968,1427227975,GB
-1427227976,1427227983,DE
-1427227984,1427227991,IT
-1427227992,1427227999,ES
-1427228000,1427228007,PL
-1427228008,1427228015,RU
-1427228016,1427228023,FR
-1427228024,1427236631,NL
-1427236632,1427236633,US
-1427236634,1427243007,NL
+1427220558,1427243007,NL
1427243008,1427308543,IT
-1427308544,1427364571,NO
-1427364572,1427364575,SE
-1427364576,1427374079,NO
+1427308544,1427374079,NO
1427374080,1427439615,IT
1427439616,1427505151,RU
1427505152,1427570687,DE
1427570688,1427636223,FI
1427636224,1427668991,DK
1427668992,1427701759,SE
-1427701760,1427705091,DE
-1427705092,1427705094,US
-1427705095,1427705096,IN
-1427705097,1427705099,US
-1427705100,1427705100,DE
-1427705101,1427705101,IN
-1427705102,1427705102,DE
-1427705103,1427705109,IN
-1427705110,1427705111,DE
-1427705112,1427705115,US
-1427705116,1427705116,IN
-1427705117,1427705117,DE
-1427705118,1427705118,BG
-1427705119,1427705143,CA
-1427705144,1427705144,DE
-1427705145,1427705146,US
-1427705147,1427705147,UA
-1427705148,1427705148,US
-1427705149,1427705149,DE
-1427705150,1427705150,CA
-1427705151,1427705155,DE
-1427705156,1427705156,GR
-1427705157,1427705157,DE
-1427705158,1427705158,RO
-1427705159,1427705159,BR
-1427705160,1427705160,PT
-1427705161,1427705161,IN
-1427705162,1427705163,DE
-1427705164,1427705164,MX
-1427705165,1427705166,AT
-1427705167,1427705175,DE
-1427705176,1427705177,BR
-1427705178,1427705178,DE
-1427705179,1427705179,PK
-1427705180,1427705180,MX
-1427705181,1427705183,BR
-1427705184,1427705184,DE
-1427705185,1427705186,PK
-1427705187,1427705187,LT
-1427705188,1427705193,DE
-1427705194,1427705195,IR
-1427705196,1427705196,LT
-1427705197,1427705198,DE
-1427705199,1427705199,EG
-1427705200,1427705200,BR
-1427705201,1427705202,DE
-1427705203,1427705203,US
-1427705204,1427705204,PL
-1427705205,1427705205,DK
-1427705206,1427705210,DE
-1427705211,1427705211,IN
-1427705212,1427705225,DE
-1427705226,1427705228,US
-1427705229,1427705229,PK
-1427705230,1427705237,DE
-1427705238,1427705242,US
-1427705243,1427705243,DE
-1427705244,1427705245,US
-1427705246,1427705250,LT
-1427705251,1427705254,DE
-1427705255,1427705255,TR
-1427705256,1427705256,DE
-1427705257,1427705257,TR
-1427705258,1427705258,DE
-1427705259,1427705260,TR
-1427705261,1427705263,US
-1427705264,1427705266,DE
-1427705267,1427705267,US
-1427705268,1427705268,DE
-1427705269,1427705269,US
-1427705270,1427705277,DE
-1427705278,1427705278,US
-1427705279,1427705290,DE
-1427705291,1427705291,LT
-1427705292,1427705297,DE
-1427705298,1427705298,UA
-1427705299,1427705299,CO
-1427705300,1427705301,DE
-1427705302,1427705302,PK
-1427705303,1427705303,DE
-1427705304,1427705304,GR
-1427705305,1427705307,DE
-1427705308,1427705309,LT
-1427705310,1427705310,DE
-1427705311,1427705311,SG
-1427705312,1427705314,DE
-1427705315,1427705315,NL
-1427705316,1427705316,AR
-1427705317,1427705321,DE
-1427705322,1427705323,PT
-1427705324,1427705328,DE
-1427705329,1427705331,US
-1427705332,1427705334,DE
-1427705335,1427705335,IT
-1427705336,1427705336,DE
-1427705337,1427705337,BR
-1427705338,1427705338,DE
-1427705339,1427705339,GB
-1427705340,1427705342,FR
-1427705343,1427705360,DE
-1427705361,1427705361,NO
-1427705362,1427705364,DE
-1427705365,1427705365,AT
-1427705366,1427705373,DE
-1427705374,1427705374,NO
-1427705375,1427705375,DE
-1427705376,1427705386,US
-1427705387,1427705394,UG
-1427705395,1427705396,DE
-1427705397,1427705397,FI
-1427705398,1427705403,DE
-1427705404,1427705406,CA
-1427705407,1427705491,DE
-1427705492,1427705492,US
-1427705493,1427705528,DE
-1427705529,1427705529,US
-1427705530,1427705543,DE
-1427705544,1427705544,US
-1427705545,1427705548,DE
-1427705549,1427705549,MD
-1427705550,1427705550,RO
-1427705551,1427705555,DE
-1427705556,1427705556,UA
-1427705557,1427705557,DE
-1427705558,1427705558,BR
-1427705559,1427705559,DE
-1427705560,1427705560,BR
-1427705561,1427705561,BE
-1427705562,1427705562,DE
-1427705563,1427705563,BR
-1427705564,1427705564,UA
-1427705565,1427705566,DE
-1427705567,1427705567,UA
-1427705568,1427705569,DE
-1427705570,1427705570,US
-1427705571,1427705571,DE
-1427705572,1427705572,TR
-1427705573,1427705573,BR
-1427705574,1427705574,GR
-1427705575,1427705575,TR
-1427705576,1427705576,UA
-1427705577,1427705578,NL
-1427705579,1427705579,ZA
-1427705580,1427705582,DE
-1427705583,1427705583,KR
-1427705584,1427705584,NL
-1427705585,1427705586,DE
-1427705587,1427705587,GR
-1427705588,1427705588,DE
-1427705589,1427705589,BR
-1427705590,1427705590,LK
-1427705591,1427705592,DE
-1427705593,1427705593,RU
-1427705594,1427705594,US
-1427705595,1427705595,DE
-1427705596,1427705596,CH
-1427705597,1427705604,DE
-1427705605,1427705605,UY
-1427705606,1427705614,DE
-1427705615,1427705615,TR
-1427705616,1427705616,GR
-1427705617,1427705618,UY
-1427705619,1427705619,UA
-1427705620,1427705620,GR
-1427705621,1427705625,DE
-1427705626,1427705627,CO
-1427705628,1427705629,DE
-1427705630,1427705630,CY
-1427705631,1427705631,US
-1427705632,1427705632,DE
-1427705633,1427705635,UA
-1427705636,1427705638,DE
-1427705639,1427705639,TN
-1427705640,1427705642,DE
-1427705643,1427705643,UA
-1427705644,1427705644,US
-1427705645,1427705649,DE
-1427705650,1427705650,AE
-1427705651,1427705654,DE
-1427705655,1427705656,AE
-1427705657,1427705657,DE
-1427705658,1427705658,BR
-1427705659,1427705660,DE
-1427705661,1427705661,BE
-1427705662,1427705669,DE
-1427705670,1427705672,CA
-1427705673,1427705673,DE
-1427705674,1427705677,CA
-1427705678,1427705678,DE
-1427705679,1427705679,CA
-1427705680,1427705680,DE
-1427705681,1427705681,PK
-1427705682,1427705683,AU
-1427705684,1427705684,PK
-1427705685,1427705685,BR
-1427705686,1427705690,US
-1427705691,1427705706,CA
-1427705707,1427705722,US
-1427705723,1427705724,DE
-1427705725,1427705725,US
-1427705726,1427705731,DE
-1427705732,1427705732,PK
-1427705733,1427705733,BD
-1427705734,1427705734,AT
-1427705735,1427705735,GB
-1427705736,1427705746,DE
-1427705747,1427705747,TR
-1427705748,1427705748,PT
-1427705749,1427705749,CA
-1427705750,1427705750,CY
-1427705751,1427705751,DE
-1427705752,1427705752,TR
-1427705753,1427705756,DE
-1427705757,1427705759,GB
-1427705760,1427705762,DE
-1427705763,1427705763,UA
-1427705764,1427705765,DE
-1427705766,1427705766,LT
-1427705767,1427705767,FR
-1427705768,1427705769,DE
-1427705770,1427705770,AU
-1427705771,1427705771,FR
-1427705772,1427705773,DE
-1427705774,1427705774,PT
-1427705775,1427705777,DE
-1427705778,1427705778,TR
-1427705779,1427705782,DE
-1427705783,1427705784,LT
-1427705785,1427705785,BR
-1427705786,1427705786,UA
-1427705787,1427705788,DE
-1427705789,1427705789,AR
-1427705790,1427705790,CR
-1427705791,1427705795,DE
-1427705796,1427705796,PT
-1427705797,1427705797,UA
-1427705798,1427705801,DE
-1427705802,1427705802,RU
-1427705803,1427705804,GR
-1427705805,1427705805,BD
-1427705806,1427705806,DE
-1427705807,1427705807,AR
-1427705808,1427705808,DE
-1427705809,1427705809,BR
-1427705810,1427705810,GR
-1427705811,1427705811,US
-1427705812,1427705812,DE
-1427705813,1427705813,MD
-1427705814,1427705814,DE
-1427705815,1427705815,LT
-1427705816,1427705816,SE
-1427705817,1427705818,US
-1427705819,1427705830,DE
-1427705831,1427705831,US
-1427705832,1427705832,MD
-1427705833,1427705833,DE
-1427705834,1427705834,AE
-1427705835,1427705835,GR
-1427705836,1427705836,DE
-1427705837,1427705837,PT
-1427705838,1427705840,NL
-1427705841,1427705841,CY
-1427705842,1427705842,AT
-1427705843,1427705843,GE
-1427705844,1427705845,DE
-1427705846,1427705846,RU
-1427705847,1427705847,UA
-1427705848,1427705848,DE
-1427705849,1427705849,DK
-1427705850,1427705850,TR
-1427705851,1427705851,UA
-1427705852,1427706371,DE
-1427706372,1427706378,US
-1427706379,1427706380,BR
-1427706381,1427706384,US
-1427706385,1427706386,DE
-1427706387,1427706392,LT
-1427706393,1427706396,DE
-1427706397,1427706404,US
-1427706405,1427706407,DE
-1427706408,1427706408,BR
-1427706409,1427706409,IN
-1427706410,1427706410,BR
-1427706411,1427706411,IN
-1427706412,1427706412,BR
-1427706413,1427706413,DE
-1427706414,1427706416,IN
-1427706417,1427706418,DE
-1427706419,1427706421,IN
-1427706422,1427706422,PA
-1427706423,1427706426,IN
-1427706427,1427706427,DE
-1427706428,1427706429,IN
-1427706430,1427706436,DE
-1427706437,1427706438,BR
-1427706439,1427706446,DE
-1427706447,1427706448,US
-1427706449,1427706449,DE
-1427706450,1427706478,US
-1427706479,1427706479,DE
-1427706480,1427706484,BR
-1427706485,1427706492,US
-1427706493,1427706563,DE
-1427706564,1427706567,CA
-1427706568,1427706573,DE
-1427706574,1427706574,CA
-1427706575,1427706577,DE
-1427706578,1427706580,CA
-1427706581,1427706581,NO
-1427706582,1427706582,US
-1427706583,1427706583,NO
-1427706584,1427706586,DE
-1427706587,1427706588,LT
-1427706589,1427706589,IN
-1427706590,1427706597,DE
-1427706598,1427706598,IN
-1427706599,1427706599,DE
-1427706600,1427706600,IN
-1427706601,1427706601,BR
-1427706602,1427706603,DE
-1427706604,1427706605,BR
-1427706606,1427706607,DE
-1427706608,1427706612,BR
-1427706613,1427706617,IN
-1427706618,1427706621,US
-1427706622,1427706757,DE
-1427706758,1427706760,MD
-1427706761,1427706763,TR
-1427706764,1427706764,UA
-1427706765,1427706765,IN
-1427706766,1427706766,ZA
-1427706767,1427706769,AE
-1427706770,1427706770,UA
-1427706771,1427706772,DE
-1427706773,1427706773,UA
-1427706774,1427706774,DE
-1427706775,1427706775,UG
-1427706776,1427706776,BR
-1427706777,1427706777,GR
-1427706778,1427706778,ZA
-1427706779,1427706781,GB
-1427706782,1427706782,PK
-1427706783,1427706784,DE
-1427706785,1427706785,ZA
-1427706786,1427706786,TR
-1427706787,1427706787,DE
-1427706788,1427706789,TR
-1427706790,1427706792,DE
-1427706793,1427706795,NL
-1427706796,1427706796,HU
-1427706797,1427706798,NL
-1427706799,1427706799,RO
-1427706800,1427706800,UA
-1427706801,1427706801,DE
-1427706802,1427706802,ES
-1427706803,1427706803,DE
-1427706804,1427706806,AR
-1427706807,1427706808,GR
-1427706809,1427706810,DE
-1427706811,1427706811,NL
-1427706812,1427706813,CA
-1427706814,1427706814,FR
-1427706815,1427706815,DE
-1427706816,1427706823,US
-1427706824,1427706824,CA
-1427706825,1427706825,DE
-1427706826,1427706828,LT
-1427706829,1427706851,DE
-1427706852,1427706853,IN
-1427706854,1427706855,DE
-1427706856,1427706856,US
-1427706857,1427706859,BR
-1427706860,1427706863,CA
-1427706864,1427706872,US
-1427706873,1427706873,CA
-1427706874,1427706874,US
-1427706875,1427706875,CA
-1427706876,1427706878,US
-1427706879,1427706879,BR
-1427706880,1427707391,DE
-1427707392,1427707392,US
-1427707393,1427707396,DE
-1427707397,1427707397,RU
-1427707398,1427707775,DE
-1427707776,1427707777,IL
-1427707778,1427707778,BE
-1427707779,1427707779,PL
-1427707780,1427707782,TR
-1427707783,1427707783,BG
-1427707784,1427707785,UA
-1427707786,1427707788,DE
-1427707789,1427707789,HR
-1427707790,1427707791,LV
-1427707792,1427707794,DE
-1427707795,1427707795,CH
-1427707796,1427707798,CA
-1427707799,1427707800,DE
-1427707801,1427707803,TR
-1427707804,1427707804,DE
-1427707805,1427707805,BE
-1427707806,1427708672,DE
-1427708673,1427708673,TR
-1427708674,1427708674,DE
-1427708675,1427708675,RU
-1427708676,1427708676,NL
-1427708677,1427708677,IL
-1427708678,1427708678,ES
-1427708679,1427708680,GB
-1427708681,1427708681,ES
-1427708682,1427708683,DE
-1427708684,1427708684,NL
-1427708685,1427708686,DE
-1427708687,1427708687,TR
-1427708688,1427708691,DE
-1427708692,1427708692,TR
-1427708693,1427708693,BD
-1427708694,1427708694,DE
-1427708695,1427708695,NL
-1427708696,1427708696,GR
-1427708697,1427708699,BZ
-1427708700,1427708700,PK
-1427708701,1427708701,DE
-1427708702,1427708702,FR
-1427708703,1427708703,GR
-1427708704,1427708706,DE
-1427708707,1427708707,LT
-1427708708,1427708708,UA
-1427708709,1427708709,DE
-1427708710,1427708710,BD
-1427708711,1427708711,ES
-1427708712,1427708712,AT
-1427708713,1427708713,LT
-1427708714,1427708714,DE
-1427708715,1427708716,LT
-1427708717,1427708718,DE
-1427708719,1427708719,AL
-1427708720,1427708720,PK
-1427708721,1427708721,CH
-1427708722,1427708722,KZ
-1427708723,1427708723,ZA
-1427708724,1427708724,NL
-1427708725,1427708726,TR
-1427708727,1427708727,DE
-1427708728,1427708730,IT
-1427708731,1427708731,GR
-1427708732,1427708732,DE
-1427708733,1427708733,US
-1427708734,1427708740,DE
-1427708741,1427708741,BE
-1427708742,1427708742,DE
-1427708743,1427708743,UA
-1427708744,1427708744,DE
-1427708745,1427708745,NL
-1427708746,1427708749,DE
-1427708750,1427708750,US
-1427708751,1427708751,RO
-1427708752,1427708752,DE
-1427708753,1427708753,BD
-1427708754,1427708754,IT
-1427708755,1427708760,DE
-1427708761,1427708761,ES
-1427708762,1427708764,DE
-1427708765,1427708765,UA
-1427708766,1427708766,RU
-1427708767,1427708771,DE
-1427708772,1427708772,IE
-1427708773,1427708773,RU
-1427708774,1427708775,GB
-1427708776,1427708777,UA
-1427708778,1427708781,DE
-1427708782,1427708782,SI
-1427708783,1427708783,US
-1427708784,1427708784,AT
-1427708785,1427708785,DE
-1427708786,1427708786,IT
-1427708787,1427708787,MD
-1427708788,1427708790,HR
-1427708791,1427708802,DE
-1427708803,1427708804,MD
-1427708805,1427708805,LK
-1427708806,1427708807,US
-1427708808,1427708808,NO
-1427708809,1427708809,UA
-1427708810,1427708810,RO
-1427708811,1427708812,DE
-1427708813,1427708813,RO
-1427708814,1427708814,MD
-1427708815,1427708817,DE
-1427708818,1427708818,PH
-1427708819,1427708819,IT
-1427708820,1427708822,NL
-1427708823,1427708825,DE
-1427708826,1427708827,TR
-1427708828,1427708828,PK
-1427708829,1427708829,AT
-1427708830,1427708833,DE
-1427708834,1427708834,CY
-1427708835,1427708835,TW
-1427708836,1427708842,DE
-1427708843,1427708843,EG
-1427708844,1427708844,DE
-1427708845,1427708845,AT
-1427708846,1427708846,TR
-1427708847,1427708847,RU
-1427708848,1427708850,IN
-1427708851,1427708851,GR
-1427708852,1427708852,KZ
-1427708853,1427708853,RO
-1427708854,1427708854,DE
-1427708855,1427708856,UA
-1427708857,1427708858,CL
-1427708859,1427708859,DE
-1427708860,1427708860,BR
-1427708861,1427708861,TN
-1427708862,1427708862,UA
-1427708863,1427708865,DE
-1427708866,1427708866,TR
-1427708867,1427708871,DE
-1427708872,1427708872,DK
-1427708873,1427708873,DE
-1427708874,1427708874,TR
-1427708875,1427708875,DE
-1427708876,1427708876,HR
-1427708877,1427708877,DE
-1427708878,1427708880,TR
-1427708881,1427708881,CN
-1427708882,1427708884,DE
-1427708885,1427708887,BG
-1427708888,1427708888,UA
-1427708889,1427708894,DE
-1427708895,1427708895,AR
-1427708896,1427708898,PE
-1427708899,1427708899,SI
-1427708900,1427708901,ES
-1427708902,1427708902,DE
-1427708903,1427708905,IL
-1427708906,1427708907,UA
-1427708908,1427708908,IT
-1427708909,1427708909,CZ
-1427708910,1427708910,IT
-1427708911,1427708912,CZ
-1427708913,1427708915,DE
-1427708916,1427708918,UA
-1427708919,1427708921,US
-1427708922,1427708922,DE
-1427708923,1427708925,CZ
-1427708926,1427708926,UA
-1427708927,1427709823,DE
-1427709824,1427709824,FR
-1427709825,1427709826,TR
-1427709827,1427709827,DE
-1427709828,1427709830,TW
-1427709831,1427709833,PE
-1427709834,1427709836,EG
-1427709837,1427709838,BR
-1427709839,1427709841,FR
-1427709842,1427709842,UA
-1427709843,1427709845,DE
-1427709846,1427709846,AT
-1427709847,1427709849,RO
-1427709850,1427721744,DE
-1427721745,1427721745,RU
-1427721746,1427721746,CH
-1427721747,1427721747,LV
-1427721748,1427721753,DE
-1427721754,1427721756,TR
-1427721757,1427721763,DE
-1427721764,1427721764,CY
-1427721765,1427721765,DE
-1427721766,1427721766,BD
-1427721767,1427721768,DE
-1427721769,1427721769,IT
-1427721770,1427721770,RU
-1427721771,1427721776,DE
-1427721777,1427721777,ES
-1427721778,1427721784,DE
-1427721785,1427721785,BD
-1427721786,1427721786,DE
-1427721787,1427721787,GR
-1427721788,1427721788,NL
-1427721789,1427721789,PK
-1427721790,1427721790,LT
-1427721791,1427721792,DE
-1427721793,1427721793,CY
-1427721794,1427721794,US
-1427721795,1427721796,RU
-1427721797,1427721797,BD
-1427721798,1427721798,GB
-1427721799,1427721801,TR
-1427721802,1427721802,US
-1427721803,1427721803,BD
-1427721804,1427721804,DK
-1427721805,1427721806,DE
-1427721807,1427721809,CA
-1427721810,1427721810,TR
-1427721811,1427721817,DE
-1427721818,1427721818,IN
-1427721819,1427721821,DE
-1427721822,1427721822,EE
-1427721823,1427721823,BD
-1427721824,1427721825,IN
-1427721826,1427721827,DE
-1427721828,1427721828,PK
-1427721829,1427721830,DE
-1427721831,1427721831,UA
-1427721832,1427721834,DE
-1427721835,1427721836,RO
-1427721837,1427721837,BD
-1427721838,1427721838,GR
-1427721839,1427721842,DE
-1427721843,1427721843,US
-1427721844,1427721844,DE
-1427721845,1427721845,GR
-1427721846,1427721846,SK
-1427721847,1427721847,DE
-1427721848,1427721848,RU
-1427721849,1427721851,LT
-1427721852,1427721852,DE
-1427721853,1427721853,IT
-1427721854,1427721854,DK
-1427721855,1427721859,DE
-1427721860,1427721860,US
-1427721861,1427721861,DK
-1427721862,1427721863,US
-1427721864,1427721864,BD
-1427721865,1427721865,UA
-1427721866,1427721866,DE
-1427721867,1427721869,NL
-1427721870,1427721877,DE
-1427721878,1427721878,IT
-1427721879,1427721879,LV
-1427721880,1427721880,DE
-1427721881,1427721881,LV
-1427721882,1427721882,BD
-1427721883,1427721883,PK
-1427721884,1427721884,ES
-1427721885,1427721885,PK
-1427721886,1427721886,DE
-1427721887,1427721889,TR
-1427721890,1427721891,DE
-1427721892,1427721892,IE
-1427721893,1427721894,DE
-1427721895,1427721897,HR
-1427721898,1427721898,IE
-1427721899,1427721899,TR
-1427721900,1427721904,DE
-1427721905,1427721905,TR
-1427721906,1427721906,IE
-1427721907,1427721908,DE
-1427721909,1427721910,KY
-1427721911,1427721912,IN
-1427721913,1427721913,DE
-1427721914,1427721914,IE
-1427721915,1427721916,NL
-1427721917,1427721917,IE
-1427721918,1427721918,IN
-1427721919,1427721923,DE
-1427721924,1427721924,NL
-1427721925,1427721926,DE
-1427721927,1427721927,UA
-1427721928,1427721928,US
-1427721929,1427721930,DE
-1427721931,1427721932,US
-1427721933,1427721933,DE
-1427721934,1427721935,RO
-1427721936,1427721938,BR
-1427721939,1427721939,DE
-1427721940,1427721940,UA
-1427721941,1427723008,DE
-1427723009,1427723009,UA
-1427723010,1427723012,CA
-1427723013,1427723013,IN
-1427723014,1427723014,GR
-1427723015,1427723016,IT
-1427723017,1427723017,BR
-1427723018,1427723018,DE
-1427723019,1427723021,RU
-1427723022,1427723023,TR
-1427723024,1427723024,DE
-1427723025,1427723025,RU
-1427723026,1427723026,DE
-1427723027,1427723027,PE
-1427723028,1427723028,US
-1427723029,1427723031,DE
-1427723032,1427723034,RU
-1427723035,1427723038,DE
-1427723039,1427723039,UA
-1427723040,1427723040,US
-1427723041,1427723046,DE
-1427723047,1427723047,PE
-1427723048,1427723048,TR
-1427723049,1427723050,DE
-1427723051,1427723051,MD
-1427723052,1427723052,DE
-1427723053,1427723053,AZ
-1427723054,1427723055,DE
-1427723056,1427723056,BD
-1427723057,1427723057,TW
-1427723058,1427723058,DE
-1427723059,1427723059,TW
-1427723060,1427723068,DE
-1427723069,1427723069,TR
-1427723070,1427723070,IT
-1427723071,1427723391,DE
-1427723392,1427723519,LI
-1427723520,1427725887,DE
-1427725888,1427725893,TR
-1427725894,1427725895,DE
-1427725896,1427725897,US
-1427725898,1427725900,CA
-1427725901,1427725901,TR
-1427725902,1427725902,UA
-1427725903,1427725903,DE
-1427725904,1427725905,UA
-1427725906,1427725906,DE
-1427725907,1427725909,BE
-1427725910,1427725913,TR
-1427725914,1427725914,ES
-1427725915,1427725918,DE
-1427725919,1427725919,ES
-1427725920,1427725920,GR
-1427725921,1427725926,DE
-1427725927,1427725927,GB
-1427725928,1427725928,DE
-1427725929,1427725929,SA
-1427725930,1427725930,GR
-1427725931,1427725931,CZ
-1427725932,1427725983,DE
-1427725984,1427725984,EG
-1427725985,1427725985,DE
-1427725986,1427725986,US
-1427725987,1427725987,IL
-1427725988,1427725989,DE
-1427725990,1427725990,UA
-1427725991,1427725994,DE
-1427725995,1427725995,TR
-1427725996,1427725996,DE
-1427725997,1427725997,US
-1427725998,1427726478,DE
-1427726479,1427726479,IN
-1427726480,1427726480,DE
-1427726481,1427726483,LT
-1427726484,1427726484,US
-1427726485,1427726486,DE
-1427726487,1427726488,IN
-1427726489,1427726489,DE
-1427726490,1427726490,BR
-1427726491,1427726493,US
-1427726494,1427726494,DE
-1427726495,1427726495,BR
-1427726496,1427726496,DE
-1427726497,1427726499,BR
-1427726500,1427726505,DE
-1427726506,1427726511,UA
-1427726512,1427726513,DE
-1427726514,1427726515,IN
-1427726516,1427726520,DE
-1427726521,1427726522,BR
-1427726523,1427726526,PK
-1427726527,1427726529,US
-1427726530,1427726530,DE
-1427726531,1427726533,TR
-1427726534,1427726535,US
-1427726536,1427726537,TR
-1427726538,1427726538,CA
-1427726539,1427726539,TR
-1427726540,1427726542,CA
-1427726543,1427726543,TR
-1427726544,1427726545,IN
-1427726546,1427726546,CA
-1427726547,1427726552,DE
-1427726553,1427726553,US
-1427726554,1427726558,AE
-1427726559,1427726563,US
-1427726564,1427726577,IN
-1427726578,1427726585,DE
-1427726586,1427726586,TR
-1427726587,1427726588,DE
-1427726589,1427726590,TR
-1427726591,1427726789,DE
-1427726790,1427726790,MD
-1427726791,1427726792,DE
-1427726793,1427726793,UA
-1427726794,1427726795,DE
-1427726796,1427726796,UA
-1427726797,1427726809,DE
-1427726810,1427726810,NO
-1427726811,1427726811,DE
-1427726812,1427726812,TR
-1427726813,1427726825,DE
-1427726826,1427726826,CY
-1427726827,1427726835,DE
-1427726836,1427726836,US
-1427726837,1427726837,DE
-1427726838,1427726838,AZ
-1427726839,1427726840,DE
-1427726841,1427726841,RO
-1427726842,1427726845,DE
-1427726846,1427726846,TR
-1427726847,1427726980,DE
-1427726981,1427726982,TW
-1427726983,1427726983,BD
-1427726984,1427726984,DE
-1427726985,1427726985,IT
-1427726986,1427726986,MD
-1427726987,1427727007,DE
-1427727008,1427727008,TW
-1427727009,1427727235,DE
-1427727236,1427727236,IN
-1427727237,1427727237,DE
-1427727238,1427727238,BR
-1427727239,1427727240,DE
-1427727241,1427727241,TR
-1427727242,1427727244,DE
-1427727245,1427727245,BR
-1427727246,1427727247,CH
-1427727248,1427727248,DE
-1427727249,1427727249,IN
-1427727250,1427727255,DE
-1427727256,1427727256,BR
-1427727257,1427727258,DE
-1427727259,1427727261,CA
-1427727262,1427727270,DE
-1427727271,1427727271,IN
-1427727272,1427727272,DE
-1427727273,1427727273,AE
-1427727274,1427727276,DE
-1427727277,1427727277,IN
-1427727278,1427727278,DE
-1427727279,1427727281,LV
-1427727282,1427727282,CA
-1427727283,1427727283,DE
-1427727284,1427727284,UA
-1427727285,1427727285,LV
-1427727286,1427727288,US
-1427727289,1427727291,LT
-1427727292,1427727293,DE
-1427727294,1427727307,LT
-1427727308,1427727348,DE
-1427727349,1427727349,BR
-1427727350,1427728383,DE
-1427728384,1427728415,BR
-1427728416,1427728447,RU
-1427728448,1427728479,DE
-1427728480,1427728511,CY
-1427728512,1427728575,DE
-1427728576,1427728639,BR
-1427728640,1427728703,DE
-1427728704,1427728735,RU
-1427728736,1427728799,DE
-1427728800,1427728831,RU
-1427728832,1427728895,CY
-1427728896,1427728927,RU
-1427728928,1427728959,US
-1427728960,1427728991,RU
-1427728992,1427729023,LT
-1427729024,1427729055,GB
-1427729056,1427729087,CA
-1427729088,1427729119,MA
-1427729120,1427729151,BR
-1427729152,1427729215,DE
-1427729216,1427729279,IN
-1427729280,1427729311,DE
-1427729312,1427729343,GR
-1427729344,1427729375,DE
-1427729376,1427729407,LT
-1427729408,1427729925,DE
-1427729926,1427729926,CY
-1427729927,1427729927,TR
-1427729928,1427729928,GT
-1427729929,1427729929,DE
-1427729930,1427729930,HR
-1427729931,1427729932,DE
-1427729933,1427729933,MD
-1427729934,1427729937,DE
-1427729938,1427729938,PE
-1427729939,1427729942,DE
-1427729943,1427729944,EG
-1427729945,1427729946,DE
-1427729947,1427729947,EG
-1427729948,1427729958,DE
-1427729959,1427729959,CY
-1427729960,1427729960,AL
-1427729961,1427729961,DE
-1427729962,1427729963,AE
-1427729964,1427729966,DE
-1427729967,1427729968,UA
-1427729969,1427729969,DE
-1427729970,1427729970,AT
-1427729971,1427729974,DE
-1427729975,1427729975,BD
-1427729976,1427729976,AU
-1427729977,1427729981,DE
-1427729982,1427729982,MD
-1427729983,1427730002,DE
-1427730003,1427730003,US
-1427730004,1427730010,DE
-1427730011,1427730011,RU
-1427730012,1427730015,DE
-1427730016,1427730017,UA
-1427730018,1427730018,DE
-1427730019,1427730019,UA
-1427730020,1427730024,DE
-1427730025,1427730026,AT
-1427730027,1427730028,US
-1427730029,1427730029,DE
-1427730030,1427730030,MD
-1427730031,1427730033,DE
-1427730034,1427730034,UA
-1427730035,1427730035,TR
-1427730036,1427730041,DE
-1427730042,1427730042,UA
-1427730043,1427730045,DE
-1427730046,1427730046,MD
-1427730047,1427730051,DE
-1427730052,1427730052,MD
-1427730053,1427730056,DE
-1427730057,1427730057,DK
-1427730058,1427730058,DE
-1427730059,1427730059,UA
-1427730060,1427730060,SE
-1427730061,1427730061,RU
-1427730062,1427730066,DE
-1427730067,1427730067,PE
-1427730068,1427730068,PK
-1427730069,1427730076,DE
-1427730077,1427730077,BD
-1427730078,1427730078,DE
-1427730079,1427730079,MD
-1427730080,1427730080,DE
-1427730081,1427730081,AE
-1427730082,1427730084,DE
-1427730085,1427730085,BG
-1427730086,1427730089,DE
-1427730090,1427730090,AE
-1427730091,1427730098,DE
-1427730099,1427730099,SE
-1427730100,1427730102,DE
-1427730103,1427730103,AE
-1427730104,1427730104,AT
-1427730105,1427730105,DE
-1427730106,1427730107,RU
-1427730108,1427730108,SA
-1427730109,1427730117,DE
-1427730118,1427730118,US
-1427730119,1427730119,UA
-1427730120,1427730120,SA
-1427730121,1427730122,DE
-1427730123,1427730124,SA
-1427730125,1427730134,DE
-1427730135,1427730135,IN
-1427730136,1427730137,DE
-1427730138,1427730138,RU
-1427730139,1427730139,DE
-1427730140,1427730140,BD
-1427730141,1427730142,DE
-1427730143,1427730144,US
-1427730145,1427730145,HR
-1427730146,1427730147,BG
-1427730148,1427730148,DE
-1427730149,1427730149,UA
-1427730150,1427730150,GB
-1427730151,1427730151,RU
-1427730152,1427730152,DE
-1427730153,1427730153,RU
-1427730154,1427730154,IN
-1427730155,1427730157,DE
-1427730158,1427730158,TR
-1427730159,1427730159,GR
-1427730160,1427730160,DE
-1427730161,1427730161,SE
-1427730162,1427730162,DE
-1427730163,1427730163,DK
-1427730164,1427730164,LV
-1427730165,1427730165,DE
-1427730166,1427730166,NL
-1427730167,1427730167,DE
-1427730168,1427730170,DK
-1427730171,1427730171,LT
-1427730172,1427730172,AR
-1427730173,1427730173,NL
-1427730174,1427730174,RU
-1427730175,1427731462,DE
-1427731463,1427731463,TR
-1427731464,1427731469,DE
-1427731470,1427731470,CY
-1427731471,1427731471,SI
-1427731472,1427731478,DE
-1427731479,1427731480,IT
-1427731481,1427731483,DE
-1427731484,1427731485,IT
-1427731486,1427731488,DE
-1427731489,1427731489,SI
-1427731490,1427731490,DE
-1427731491,1427731492,TR
-1427731493,1427731495,DE
-1427731496,1427731496,PE
-1427731497,1427731497,PH
-1427731498,1427731511,DE
-1427731512,1427731512,US
-1427731513,1427731525,DE
-1427731526,1427731526,NO
-1427731527,1427731528,DE
-1427731529,1427731529,TR
-1427731530,1427731551,DE
-1427731552,1427731583,BR
-1427731584,1427739889,DE
+1427701760,1427712304,DE
+1427712305,1427712305,SG
+1427712306,1427712369,DE
+1427712370,1427712373,SG
+1427712374,1427712374,DE
+1427712375,1427712381,SG
+1427712382,1427712382,DE
+1427712383,1427712388,SG
+1427712389,1427722027,DE
+1427722028,1427722030,SG
+1427722031,1427722031,DE
+1427722032,1427722033,SG
+1427722034,1427728088,DE
+1427728089,1427728100,SG
+1427728101,1427728599,DE
+1427728600,1427728600,SK
+1427728601,1427739889,DE
1427739890,1427739890,RU
-1427739891,1427741183,DE
-1427741184,1427741184,US
-1427741185,1427741185,BD
-1427741186,1427741186,TR
-1427741187,1427741191,DE
-1427741192,1427741192,PE
-1427741193,1427741195,DE
-1427741196,1427741196,AZ
-1427741197,1427741197,US
-1427741198,1427741206,DE
-1427741207,1427741207,UA
-1427741208,1427741209,DE
-1427741210,1427741210,UG
-1427741211,1427741212,DE
-1427741213,1427741213,US
-1427741214,1427741214,PE
-1427741215,1427741218,DE
-1427741219,1427741220,NL
-1427741221,1427741224,DE
-1427741225,1427741227,US
-1427741228,1427741228,TR
-1427741229,1427741229,DE
-1427741230,1427741230,TR
-1427741231,1427741231,DE
-1427741232,1427741232,TR
-1427741233,1427741234,DE
-1427741235,1427741235,PL
-1427741236,1427741237,RU
-1427741238,1427741242,DE
-1427741243,1427741243,NL
-1427741244,1427741244,DE
-1427741245,1427741245,SI
-1427741246,1427741247,DE
-1427741248,1427741248,TR
-1427741249,1427741249,AZ
-1427741250,1427741250,DE
-1427741251,1427741253,RO
-1427741254,1427741254,BR
-1427741255,1427741256,TR
-1427741257,1427741258,DE
-1427741259,1427741259,TR
-1427741260,1427741261,DE
-1427741262,1427741263,TR
-1427741264,1427741265,DE
-1427741266,1427741266,MX
-1427741267,1427741267,DE
-1427741268,1427741268,UA
-1427741269,1427741270,DE
-1427741271,1427741271,EC
-1427741272,1427741272,TH
-1427741273,1427741273,DE
-1427741274,1427741274,HR
-1427741275,1427741276,DE
-1427741277,1427741278,ES
-1427741279,1427741280,HR
-1427741281,1427741281,BR
-1427741282,1427741282,PL
-1427741283,1427741283,GR
-1427741284,1427741284,TR
-1427741285,1427741285,LK
-1427741286,1427741286,UA
-1427741287,1427741287,TW
-1427741288,1427741288,DE
-1427741289,1427741289,UG
-1427741290,1427741292,DE
-1427741293,1427741293,MX
-1427741294,1427741295,DE
-1427741296,1427741296,TR
-1427741297,1427741299,DE
-1427741300,1427741300,GR
-1427741301,1427741301,RO
-1427741302,1427741302,FI
-1427741303,1427741303,DE
-1427741304,1427741304,AL
-1427741305,1427741305,AT
-1427741306,1427741306,RO
-1427741307,1427741307,RU
-1427741308,1427741309,DE
-1427741310,1427741311,UA
-1427741312,1427741312,DE
-1427741313,1427741313,KE
-1427741314,1427741314,RU
-1427741315,1427741318,DE
-1427741319,1427741319,RU
-1427741320,1427741320,DE
-1427741321,1427741321,AT
-1427741322,1427741324,DE
-1427741325,1427741325,NL
-1427741326,1427741328,DE
-1427741329,1427741329,TR
-1427741330,1427741330,AZ
-1427741331,1427741334,DE
-1427741335,1427741336,TR
-1427741337,1427741337,GR
-1427741338,1427741338,TR
-1427741339,1427741339,TW
-1427741340,1427741340,FR
-1427741341,1427741341,DE
-1427741342,1427741342,US
-1427741343,1427741347,DE
-1427741348,1427741348,TW
-1427741349,1427741350,RU
-1427741351,1427741359,DE
-1427741360,1427741360,RU
-1427741361,1427741363,IN
-1427741364,1427741368,DE
-1427741369,1427741369,KR
-1427741370,1427741370,DE
-1427741371,1427741371,GR
-1427741372,1427741376,DE
-1427741377,1427741377,AT
-1427741378,1427741382,DE
-1427741383,1427741383,TW
-1427741384,1427741384,GR
-1427741385,1427741385,IT
-1427741386,1427741386,DE
-1427741387,1427741387,AT
-1427741388,1427741388,DE
-1427741389,1427741389,TR
-1427741390,1427741390,DE
-1427741391,1427741391,TR
-1427741392,1427741393,DE
-1427741394,1427741396,GB
-1427741397,1427741399,CA
-1427741400,1427741400,AL
-1427741401,1427741403,DE
-1427741404,1427741404,HR
-1427741405,1427741405,AL
-1427741406,1427741406,CA
-1427741407,1427741409,DE
-1427741410,1427741412,SG
-1427741413,1427741413,CH
-1427741414,1427741414,KR
-1427741415,1427741416,TW
-1427741417,1427741418,DE
-1427741419,1427741419,UA
-1427741420,1427741420,LK
-1427741421,1427741421,GR
-1427741422,1427741422,US
-1427741423,1427741429,DE
-1427741430,1427741430,MY
-1427741431,1427741431,PA
-1427741432,1427741434,DE
-1427741435,1427741435,AT
-1427741436,1427741436,DE
-1427741437,1427741437,VN
-1427741438,1427741438,TR
-1427741439,1427741570,DE
-1427741571,1427741571,US
-1427741572,1427741572,SA
-1427741573,1427741576,DE
-1427741577,1427741577,DK
-1427741578,1427741579,UG
-1427741580,1427741580,DE
-1427741581,1427741581,RU
-1427741582,1427741582,MD
-1427741583,1427741583,RU
-1427741584,1427741584,CH
-1427741585,1427741585,DE
-1427741586,1427741586,GE
-1427741587,1427741587,AU
-1427741588,1427741588,GE
-1427741589,1427741590,DE
-1427741591,1427741591,TR
-1427741592,1427741594,DE
-1427741595,1427741595,TH
-1427741596,1427741596,PT
-1427741597,1427741598,IT
-1427741599,1427741599,DE
-1427741600,1427741601,RU
-1427741602,1427741602,UA
-1427741603,1427741604,AT
-1427741605,1427741605,CZ
-1427741606,1427741606,TR
-1427741607,1427741608,CZ
-1427741609,1427741609,SA
-1427741610,1427741613,DE
-1427741614,1427741614,IT
-1427741615,1427741615,RU
-1427741616,1427741616,TH
-1427741617,1427741623,DE
-1427741624,1427741624,NL
-1427741625,1427741625,RO
-1427741626,1427741627,TR
-1427741628,1427741629,DE
-1427741630,1427741630,VE
-1427741631,1427741631,TR
-1427741632,1427741632,RU
-1427741633,1427741633,UG
-1427741634,1427741635,DE
-1427741636,1427741636,FR
-1427741637,1427741637,BR
-1427741638,1427741638,DE
-1427741639,1427741643,ES
-1427741644,1427741644,DE
-1427741645,1427741645,GR
-1427741646,1427741646,AT
-1427741647,1427741647,DE
-1427741648,1427741649,TH
-1427741650,1427741650,DE
-1427741651,1427741651,AT
-1427741652,1427741652,IT
-1427741653,1427741653,DE
-1427741654,1427741654,TR
-1427741655,1427741655,DE
-1427741656,1427741656,AR
-1427741657,1427741657,KR
-1427741658,1427741658,DE
-1427741659,1427741661,UA
-1427741662,1427741662,DE
-1427741663,1427741663,NL
-1427741664,1427741664,TR
-1427741665,1427741665,NL
-1427741666,1427741666,CH
-1427741667,1427741667,UA
-1427741668,1427741669,DE
-1427741670,1427741670,RU
-1427741671,1427741674,DE
-1427741675,1427741675,BR
-1427741676,1427741676,GR
-1427741677,1427741677,TR
-1427741678,1427741678,DE
-1427741679,1427741679,GR
-1427741680,1427741680,PL
-1427741681,1427741684,DE
-1427741685,1427741685,BE
-1427741686,1427741686,CH
-1427741687,1427741688,DE
-1427741689,1427741689,SA
-1427741690,1427741692,AE
-1427741693,1427741699,DE
-1427741700,1427741700,GR
-1427741701,1427741701,GT
-1427741702,1427741702,DE
-1427741703,1427741703,GR
-1427741704,1427741706,CY
-1427741707,1427741707,GT
-1427741708,1427741709,DE
-1427741710,1427741710,BR
-1427741711,1427741713,DE
-1427741714,1427741714,RU
-1427741715,1427741718,DE
-1427741719,1427741721,CO
-1427741722,1427741724,DE
-1427741725,1427741725,IE
-1427741726,1427741726,RO
-1427741727,1427741727,PE
-1427741728,1427741728,PT
-1427741729,1427741729,DE
-1427741730,1427741732,RU
-1427741733,1427741735,DE
-1427741736,1427741736,RU
-1427741737,1427741747,DE
-1427741748,1427741750,NL
-1427741751,1427741751,DE
-1427741752,1427741754,TR
-1427741755,1427741756,DE
-1427741757,1427741757,BG
-1427741758,1427741759,RO
-1427741760,1427741762,BR
-1427741763,1427741763,HK
-1427741764,1427741772,BR
-1427741773,1427741782,IN
-1427741783,1427741783,DE
-1427741784,1427741791,UA
-1427741792,1427741794,DE
-1427741795,1427741795,CA
-1427741796,1427741801,DE
-1427741802,1427741817,TR
-1427741818,1427741825,DE
-1427741826,1427741826,PL
-1427741827,1427741827,DE
-1427741828,1427741828,GR
-1427741829,1427741830,DE
-1427741831,1427741831,AR
-1427741832,1427741833,DE
-1427741834,1427741834,US
-1427741835,1427741835,PL
-1427741836,1427741836,DE
-1427741837,1427741837,MD
-1427741838,1427741838,BR
-1427741839,1427741839,DE
-1427741840,1427741840,IT
-1427741841,1427741842,UA
-1427741843,1427741845,CY
-1427741846,1427741846,UA
-1427741847,1427741847,PE
-1427741848,1427741849,DE
-1427741850,1427741851,GR
-1427741852,1427741852,DE
-1427741853,1427741853,HU
-1427741854,1427741854,LT
-1427741855,1427741855,DE
-1427741856,1427741856,IE
-1427741857,1427741857,GR
-1427741858,1427741858,EG
-1427741859,1427741866,DE
-1427741867,1427741867,UA
-1427741868,1427741868,DE
-1427741869,1427741870,PT
-1427741871,1427741871,LK
-1427741872,1427741873,DE
-1427741874,1427741874,BR
-1427741875,1427741875,US
-1427741876,1427741876,LT
-1427741877,1427741877,IT
-1427741878,1427741878,HU
-1427741879,1427741879,BR
-1427741880,1427741880,US
-1427741881,1427741882,DE
-1427741883,1427741883,AE
-1427741884,1427741884,DE
-1427741885,1427741885,GR
-1427741886,1427741886,TR
-1427741887,1427741887,GR
-1427741888,1427741892,DE
-1427741893,1427741893,MD
-1427741894,1427741896,LK
-1427741897,1427741897,DE
-1427741898,1427741898,KH
-1427741899,1427741899,IN
-1427741900,1427741902,DE
-1427741903,1427741903,SK
-1427741904,1427741906,NL
-1427741907,1427741907,CZ
-1427741908,1427741908,DE
-1427741909,1427741911,UA
-1427741912,1427741912,DE
-1427741913,1427741913,RU
-1427741914,1427741914,GR
-1427741915,1427741923,DE
-1427741924,1427741924,RU
-1427741925,1427741930,DE
-1427741931,1427741931,AL
-1427741932,1427741932,SK
-1427741933,1427741933,DE
-1427741934,1427741934,UA
-1427741935,1427741938,DE
-1427741939,1427741939,CH
-1427741940,1427741945,DE
-1427741946,1427741946,UA
-1427741947,1427741947,HU
-1427741948,1427741949,CH
-1427741950,1427741950,KH
-1427741951,1427741951,DE
-1427741952,1427741952,RU
-1427741953,1427741954,DE
-1427741955,1427741955,BG
-1427741956,1427741956,NO
-1427741957,1427741957,DE
-1427741958,1427741958,IT
-1427741959,1427741960,DE
-1427741961,1427741962,UG
-1427741963,1427741965,TR
-1427741966,1427741970,DE
-1427741971,1427741971,LK
-1427741972,1427741972,AT
-1427741973,1427741973,DE
-1427741974,1427741974,UG
-1427741975,1427741976,DE
-1427741977,1427741978,RU
-1427741979,1427741979,IT
-1427741980,1427741980,CH
-1427741981,1427741983,DE
-1427741984,1427741986,CH
-1427741987,1427741987,SI
-1427741988,1427741988,LT
-1427741989,1427741989,UA
-1427741990,1427741990,PL
-1427741991,1427741991,DE
-1427741992,1427741993,ES
-1427741994,1427741994,DE
-1427741995,1427741995,CO
-1427741996,1427741997,DE
-1427741998,1427741998,GR
-1427741999,1427742001,DE
-1427742002,1427742002,TR
-1427742003,1427742003,CO
-1427742004,1427742006,DE
-1427742007,1427742007,TR
-1427742008,1427742009,DE
-1427742010,1427742010,LB
-1427742011,1427742013,DE
-1427742014,1427742014,ES
-1427742015,1427742016,DE
-1427742017,1427742017,US
-1427742018,1427742018,BG
-1427742019,1427742021,DE
-1427742022,1427742022,CZ
-1427742023,1427742023,PL
-1427742024,1427742024,DE
-1427742025,1427742025,GR
-1427742026,1427742028,CH
-1427742029,1427742030,DE
-1427742031,1427742031,TR
-1427742032,1427742034,DE
-1427742035,1427742036,IL
-1427742037,1427742037,DE
-1427742038,1427742038,UA
-1427742039,1427742039,HR
-1427742040,1427742042,DE
-1427742043,1427742043,PK
-1427742044,1427742044,DE
-1427742045,1427742045,BR
-1427742046,1427742046,RU
-1427742047,1427742048,DE
-1427742049,1427742049,SG
-1427742050,1427742050,DE
-1427742051,1427742051,IN
-1427742052,1427742052,DE
-1427742053,1427742055,CA
-1427742056,1427742058,BR
-1427742059,1427742063,DE
-1427742064,1427742064,PL
-1427742065,1427742065,IN
-1427742066,1427742066,TR
-1427742067,1427742079,DE
-1427742080,1427742080,RU
-1427742081,1427742084,DE
-1427742085,1427742087,BE
-1427742088,1427742088,DE
-1427742089,1427742089,BR
-1427742090,1427742090,DE
-1427742091,1427742091,GR
-1427742092,1427742092,HK
-1427742093,1427742093,DE
-1427742094,1427742096,TR
-1427742097,1427742098,SA
-1427742099,1427742106,TR
-1427742107,1427742107,DE
-1427742108,1427742108,TR
-1427742109,1427742114,DE
-1427742115,1427742115,BR
-1427742116,1427742116,RO
-1427742117,1427742117,DE
-1427742118,1427742120,BR
-1427742121,1427742122,DE
-1427742123,1427742124,TR
-1427742125,1427742125,LB
-1427742126,1427742130,DE
-1427742131,1427742131,TR
-1427742132,1427742139,DE
-1427742140,1427742142,UA
-1427742143,1427742143,DE
-1427742144,1427742144,IN
-1427742145,1427742157,DE
-1427742158,1427742158,LB
-1427742159,1427742167,DE
-1427742168,1427742168,RU
-1427742169,1427742169,IL
-1427742170,1427742170,US
-1427742171,1427742173,LT
-1427742174,1427742719,DE
-1427742720,1427742751,IO
-1427742752,1427742911,DE
-1427742912,1427742975,BR
-1427742976,1427743007,RU
-1427743008,1427743039,US
-1427743040,1427743071,BR
-1427743072,1427743103,CY
-1427743104,1427743135,DE
-1427743136,1427743136,IN
-1427743137,1427743167,DE
-1427743168,1427743199,CY
-1427743200,1427743231,TR
-1427743232,1427743263,GR
-1427743264,1427743295,DE
-1427743296,1427743327,BR
-1427743328,1427743359,DE
-1427743360,1427743423,BR
-1427743424,1427743455,US
-1427743456,1427743487,CY
-1427743488,1427743519,DE
-1427743520,1427743551,BR
-1427743552,1427743615,DE
-1427743616,1427743647,DK
-1427743648,1427743679,DE
-1427743680,1427743711,RU
-1427743712,1427743743,TR
-1427743744,1427743775,DE
-1427743776,1427743807,ZA
-1427743808,1427743839,BR
-1427743840,1427743871,RU
-1427743872,1427743903,DE
-1427743904,1427743935,US
-1427743936,1427743967,RU
-1427743968,1427743999,DE
-1427744000,1427744031,AT
-1427744032,1427744063,RU
-1427744064,1427744191,DE
-1427744192,1427744223,RU
-1427744224,1427744255,DE
-1427744256,1427744287,US
-1427744288,1427744319,TR
-1427744320,1427744351,DE
-1427744352,1427744383,UA
-1427744384,1427744415,PL
-1427744416,1427744511,DE
-1427744512,1427744543,IT
-1427744544,1427744575,DE
-1427744576,1427744607,PL
-1427744608,1427744639,DE
-1427744640,1427744671,TR
-1427744672,1427744703,DE
-1427744704,1427744799,BR
-1427744800,1427744831,LT
-1427744832,1427744863,DE
-1427744864,1427744927,TR
-1427744928,1427744959,DE
-1427744960,1427744991,RU
-1427744992,1427745023,DK
-1427745024,1427745055,BM
-1427745056,1427745087,US
-1427745088,1427745119,DE
-1427745120,1427745151,US
-1427745152,1427745183,RO
-1427745184,1427745215,CH
-1427745216,1427745247,US
-1427745248,1427745311,DE
-1427745312,1427745343,NL
-1427745344,1427745375,RU
-1427745376,1427745407,BR
-1427745408,1427745471,US
-1427745472,1427745503,RO
-1427745504,1427745535,RU
-1427745536,1427745567,BR
-1427745568,1427745599,RU
-1427745600,1427745631,DE
-1427745632,1427745663,BM
-1427745664,1427745695,CY
-1427745696,1427745727,US
-1427745728,1427745759,DE
-1427745760,1427745791,LT
-1427745792,1427745823,FR
-1427745824,1427745855,US
-1427745856,1427745887,BR
-1427745888,1427745919,IN
-1427745920,1427745983,DE
-1427745984,1427746015,RU
-1427746016,1427746047,US
-1427746048,1427746079,SE
-1427746080,1427746111,GB
-1427746112,1427746143,DE
-1427746144,1427746175,GR
-1427746176,1427746239,DE
-1427746240,1427746271,US
-1427746272,1427747839,DE
-1427747840,1427747871,FI
-1427747872,1427747935,BR
-1427747936,1427747967,US
-1427747968,1427747999,DE
-1427748000,1427748031,BR
-1427748032,1427748063,DE
-1427748064,1427748095,US
-1427748096,1427748127,BR
-1427748128,1427748159,DE
-1427748160,1427748191,GB
-1427748192,1427748255,DE
-1427748256,1427748287,US
-1427748288,1427748351,DE
-1427748352,1427748383,BR
-1427748384,1427748447,DE
-1427748448,1427748479,RU
-1427748480,1427748575,DE
-1427748576,1427748607,BR
-1427748608,1427748639,DE
-1427748640,1427748671,FR
-1427748672,1427748703,DE
-1427748704,1427748735,LT
-1427748736,1427748799,BR
-1427748800,1427749471,DE
-1427749472,1427749503,BR
-1427749504,1427749567,DE
-1427749568,1427749599,CY
-1427749600,1427749631,DE
-1427749632,1427749663,RU
-1427749664,1427749695,DE
-1427749696,1427749727,BR
-1427749728,1427749759,DE
-1427749760,1427749791,BR
-1427749792,1427749855,DE
-1427749856,1427749887,RU
-1427749888,1427749919,DE
-1427749920,1427749951,US
-1427749952,1427749983,BR
-1427749984,1427750015,RU
-1427750016,1427750079,DE
-1427750080,1427750111,US
-1427750112,1427750143,DE
-1427750144,1427750175,US
-1427750176,1427750207,SE
-1427750208,1427750239,DE
-1427750240,1427750271,US
-1427750272,1427750303,DE
-1427750304,1427750335,FR
-1427750336,1427750367,US
-1427750368,1427759935,DE
-1427759936,1427759967,HR
-1427759968,1427759999,DE
-1427760000,1427760031,BR
-1427760032,1427760063,US
-1427760064,1427760095,AR
-1427760096,1427760127,US
-1427760128,1427760159,LT
-1427760160,1427760191,PL
-1427760192,1427760255,US
-1427760256,1427760319,DE
-1427760320,1427760351,US
-1427760352,1427760383,RU
-1427760384,1427760415,DE
-1427760416,1427760447,US
-1427760448,1427760479,BR
-1427760480,1427760575,DE
-1427760576,1427760607,CH
-1427760608,1427760671,DE
-1427760672,1427760703,BR
-1427760704,1427760735,DE
-1427760736,1427760767,BR
-1427760768,1427760799,DE
-1427760800,1427760831,US
-1427760832,1427760863,DE
-1427760864,1427760895,US
-1427760896,1427760959,DE
-1427760960,1427760991,CZ
-1427760992,1427761055,DE
-1427761056,1427761087,CL
-1427761088,1427761215,DE
-1427761216,1427761247,TR
-1427761248,1427761279,US
-1427761280,1427761311,RU
-1427761312,1427761343,UA
-1427761344,1427761375,DE
-1427761376,1427761407,TW
-1427761408,1427761439,RU
-1427761440,1427761503,DE
-1427761504,1427761535,PL
-1427761536,1427761567,US
-1427761568,1427761599,RU
-1427761600,1427761631,EG
-1427761632,1427764351,DE
-1427764352,1427764352,ES
-1427764353,1427764353,DE
-1427764354,1427764354,RO
-1427764355,1427764356,DE
-1427764357,1427764357,RU
-1427764358,1427764358,TR
-1427764359,1427764359,ID
-1427764360,1427764360,DE
-1427764361,1427764361,LT
-1427764362,1427764364,DE
-1427764365,1427764365,UG
-1427764366,1427764366,DE
-1427764367,1427764367,IR
-1427764368,1427764369,RO
-1427764370,1427764385,DE
-1427764386,1427764387,BD
-1427764388,1427764389,TR
-1427764390,1427764390,DE
-1427764391,1427764391,UA
-1427764392,1427764393,DE
-1427764394,1427764394,SA
-1427764395,1427764397,DE
-1427764398,1427764399,GR
-1427764400,1427764400,LT
-1427764401,1427764401,DE
-1427764402,1427764402,LT
-1427764403,1427764404,DE
-1427764405,1427764405,TR
-1427764406,1427764407,LT
-1427764408,1427764410,DE
-1427764411,1427764411,UA
-1427764412,1427764414,IT
-1427764415,1427764415,IL
-1427764416,1427764417,DE
-1427764418,1427764418,RU
-1427764419,1427764419,DE
-1427764420,1427764420,TR
-1427764421,1427764426,DE
-1427764427,1427764428,GR
-1427764429,1427764429,RU
-1427764430,1427764430,UG
-1427764431,1427764432,DE
-1427764433,1427764435,HR
-1427764436,1427764437,DE
-1427764438,1427764438,TR
-1427764439,1427764439,RU
-1427764440,1427764441,DE
-1427764442,1427764442,AL
-1427764443,1427764445,LK
-1427764446,1427764446,DE
-1427764447,1427764447,TR
-1427764448,1427764449,US
-1427764450,1427764450,GR
-1427764451,1427764458,DE
-1427764459,1427764460,RU
-1427764461,1427764461,TR
-1427764462,1427764463,DE
-1427764464,1427764464,GR
-1427764465,1427764467,DE
-1427764468,1427764468,IT
-1427764469,1427764470,DE
-1427764471,1427764473,MD
-1427764474,1427764474,SA
-1427764475,1427764475,DE
-1427764476,1427764478,BR
-1427764479,1427765381,DE
-1427765382,1427765382,TR
-1427765383,1427765385,DE
-1427765386,1427765386,TR
-1427765387,1427765391,DE
-1427765392,1427765394,TR
-1427765395,1427765395,DE
-1427765396,1427765398,TR
-1427765399,1427765402,DE
-1427765403,1427765404,TR
-1427765405,1427765405,IN
-1427765406,1427765407,DE
-1427765408,1427765409,TR
-1427765410,1427765413,IN
-1427765414,1427765417,DE
-1427765418,1427765418,US
-1427765419,1427765420,DE
-1427765421,1427765422,UA
-1427765423,1427765424,DE
-1427765425,1427765428,IN
-1427765429,1427765429,TR
-1427765430,1427765443,DE
-1427765444,1427765445,TR
-1427765446,1427765447,DE
-1427765448,1427765448,TR
-1427765449,1427765454,DE
-1427765455,1427765455,TR
-1427765456,1427765457,DE
-1427765458,1427765458,TR
-1427765459,1427765462,DE
-1427765463,1427765463,US
-1427765464,1427765467,DE
-1427765468,1427765469,UA
-1427765470,1427765470,TR
-1427765471,1427765472,DE
-1427765473,1427765473,IN
-1427765474,1427765474,DE
-1427765475,1427765478,TR
-1427765479,1427765484,IN
-1427765485,1427765486,UA
-1427765487,1427765487,TR
-1427765488,1427765488,DE
-1427765489,1427765492,TR
-1427765493,1427765493,US
-1427765494,1427765494,DE
-1427765495,1427765501,US
-1427765502,1427765502,UA
-1427765503,1427765508,DE
-1427765509,1427765509,TR
-1427765510,1427765510,DE
-1427765511,1427765511,TR
-1427765512,1427765512,DE
-1427765513,1427765514,TR
-1427765515,1427765530,DE
-1427765531,1427765531,TR
-1427765532,1427765535,DE
-1427765536,1427765537,US
-1427765538,1427765538,DE
-1427765539,1427765542,IE
-1427765543,1427765543,DE
-1427765544,1427765544,IE
-1427765545,1427765550,DE
-1427765551,1427765555,US
-1427765556,1427765557,TR
-1427765558,1427765560,DE
-1427765561,1427765561,US
-1427765562,1427765562,TR
-1427765563,1427765565,US
-1427765566,1427765571,DE
-1427765572,1427765572,US
-1427765573,1427765575,DE
-1427765576,1427765576,US
-1427765577,1427765578,DE
-1427765579,1427765579,US
-1427765580,1427765582,DE
-1427765583,1427765585,US
-1427765586,1427765586,DE
-1427765587,1427765589,US
-1427765590,1427765590,DE
-1427765591,1427765591,US
-1427765592,1427765596,DE
-1427765597,1427765597,US
-1427765598,1427765599,DE
-1427765600,1427765601,US
-1427765602,1427765606,DE
-1427765607,1427765607,US
-1427765608,1427765616,DE
-1427765617,1427765617,US
-1427765618,1427765619,DE
-1427765620,1427765621,US
-1427765622,1427765622,DE
-1427765623,1427765625,US
-1427765626,1427765626,DE
-1427765627,1427765628,BG
-1427765629,1427765645,DE
-1427765646,1427765646,US
-1427765647,1427765647,DE
-1427765648,1427765649,US
-1427765650,1427765650,TR
-1427765651,1427765659,DE
-1427765660,1427765660,TR
-1427765661,1427765661,DE
-1427765662,1427765662,TR
-1427765663,1427765663,DE
-1427765664,1427765664,TR
-1427765665,1427765666,DE
-1427765667,1427765667,TR
-1427765668,1427765669,DE
-1427765670,1427765672,TR
-1427765673,1427765677,DE
-1427765678,1427765678,TR
-1427765679,1427765680,DE
-1427765681,1427765682,TR
-1427765683,1427765683,DE
-1427765684,1427765687,TR
-1427765688,1427765688,US
-1427765689,1427765690,DE
-1427765691,1427765691,TR
-1427765692,1427765693,BR
-1427765694,1427765694,US
-1427765695,1427765767,DE
-1427765768,1427765773,US
-1427765774,1427765776,DE
-1427765777,1427765779,LT
-1427765780,1427765780,DE
-1427765781,1427765781,LT
-1427765782,1427765785,DE
-1427765786,1427765786,TR
-1427765787,1427765787,HK
-1427765788,1427765789,DE
-1427765790,1427765790,LT
-1427765791,1427765791,DE
-1427765792,1427765796,US
-1427765797,1427765799,DE
-1427765800,1427765800,US
-1427765801,1427765802,GB
-1427765803,1427765803,DE
-1427765804,1427765804,GB
-1427765805,1427765805,DE
-1427765806,1427765806,GB
-1427765807,1427765807,DE
-1427765808,1427765808,GB
-1427765809,1427765809,DE
-1427765810,1427765813,GB
-1427765814,1427765814,DE
-1427765815,1427765817,GB
-1427765818,1427765818,BR
-1427765819,1427765819,DE
-1427765820,1427765821,GB
-1427765822,1427765831,DE
-1427765832,1427765832,PK
-1427765833,1427765837,DE
-1427765838,1427765849,BR
-1427765850,1427765850,DE
-1427765851,1427765860,BR
-1427765861,1427765861,DE
-1427765862,1427765868,BR
-1427765869,1427765895,DE
-1427765896,1427765897,GB
-1427765898,1427765899,DE
-1427765900,1427765905,GB
-1427765906,1427765906,DE
-1427765907,1427765909,GB
-1427765910,1427765916,DE
-1427765917,1427765917,US
-1427765918,1427765919,DE
-1427765920,1427765924,GB
-1427765925,1427765926,DE
-1427765927,1427765927,US
-1427765928,1427766019,DE
-1427766020,1427766021,LT
-1427766022,1427766024,DE
-1427766025,1427766025,LT
-1427766026,1427766028,DE
-1427766029,1427766029,IN
-1427766030,1427766040,DE
-1427766041,1427766042,IN
-1427766043,1427766044,DE
-1427766045,1427766045,IN
-1427766046,1427766047,LT
-1427766048,1427766048,DE
-1427766049,1427766050,LT
-1427766051,1427766051,TR
-1427766052,1427766063,DE
-1427766064,1427766064,GR
-1427766065,1427766065,IN
-1427766066,1427766067,TR
-1427766068,1427766070,IN
-1427766071,1427766072,DE
-1427766073,1427766073,IN
-1427766074,1427766074,DE
-1427766075,1427766075,LT
-1427766076,1427766085,DE
-1427766086,1427766086,IN
-1427766087,1427766087,DE
-1427766088,1427766088,TR
-1427766089,1427766089,IN
-1427766090,1427766092,DE
-1427766093,1427766094,IN
-1427766095,1427766099,DE
-1427766100,1427766100,BG
-1427766101,1427766105,DE
-1427766106,1427766108,TR
-1427766109,1427766110,DE
-1427766111,1427766111,TR
-1427766112,1427766114,DE
-1427766115,1427766115,TR
-1427766116,1427766117,DE
-1427766118,1427766118,TR
-1427766119,1427766120,DE
-1427766121,1427766121,TR
-1427766122,1427766122,US
-1427766123,1427766124,DE
-1427766125,1427766125,IN
-1427766126,1427766134,DE
-1427766135,1427766135,US
-1427766136,1427766211,DE
-1427766212,1427766212,BR
-1427766213,1427766213,DE
-1427766214,1427766215,GB
-1427766216,1427766216,TR
-1427766217,1427766217,BE
-1427766218,1427766218,DE
-1427766219,1427766219,CA
-1427766220,1427766221,BE
-1427766222,1427766224,CH
-1427766225,1427766225,DE
-1427766226,1427766226,UG
-1427766227,1427766227,DE
-1427766228,1427766228,BE
-1427766229,1427766232,DE
-1427766233,1427766233,GR
-1427766234,1427766234,AE
-1427766235,1427766235,IN
-1427766236,1427766236,AE
-1427766237,1427766240,DE
-1427766241,1427766241,LT
-1427766242,1427766242,DE
-1427766243,1427766245,PK
-1427766246,1427766249,DE
-1427766250,1427766250,ES
-1427766251,1427766251,IR
-1427766252,1427766252,DE
-1427766253,1427766253,ES
-1427766254,1427766254,DE
-1427766255,1427766257,TR
-1427766258,1427766258,DE
-1427766259,1427766259,LK
-1427766260,1427766260,DE
-1427766261,1427766261,ES
-1427766262,1427766262,DE
-1427766263,1427766263,IR
-1427766264,1427766264,DE
-1427766265,1427766265,AZ
-1427766266,1427766270,TR
-1427766271,1427766339,DE
-1427766340,1427766340,US
-1427766341,1427766343,DE
-1427766344,1427766344,AU
-1427766345,1427766347,DE
-1427766348,1427766357,US
-1427766358,1427766389,DE
-1427766390,1427766390,AU
-1427766391,1427766428,DE
-1427766429,1427766429,US
-1427766430,1427766430,TR
-1427766431,1427766441,DE
-1427766442,1427766442,GR
-1427766443,1427766443,TR
-1427766444,1427766444,DE
-1427766445,1427766446,TR
-1427766447,1427766447,DE
-1427766448,1427766448,TR
-1427766449,1427766449,DE
-1427766450,1427766450,TR
-1427766451,1427766452,DE
-1427766453,1427766453,TR
-1427766454,1427766454,IN
-1427766455,1427766455,DE
-1427766456,1427766459,IN
-1427766460,1427766460,DE
-1427766461,1427766461,IN
-1427766462,1427766467,DE
-1427766468,1427766468,BR
-1427766469,1427766469,DE
-1427766470,1427766470,BE
-1427766471,1427766471,DE
-1427766472,1427766472,PL
-1427766473,1427766474,DE
-1427766475,1427766477,TR
-1427766478,1427766479,DE
-1427766480,1427766480,AT
-1427766481,1427766483,DE
-1427766484,1427766484,GR
-1427766485,1427766489,DE
-1427766490,1427766490,PE
-1427766491,1427766491,BD
-1427766492,1427766492,PK
-1427766493,1427766493,RU
-1427766494,1427766495,HU
-1427766496,1427766496,UA
-1427766497,1427766499,PK
-1427766500,1427766500,FR
-1427766501,1427766503,DE
-1427766504,1427766504,RU
-1427766505,1427766505,DE
-1427766506,1427766506,US
-1427766507,1427766507,DE
-1427766508,1427766508,BR
-1427766509,1427766513,DE
-1427766514,1427766515,PK
-1427766516,1427766516,DE
-1427766517,1427766517,VE
-1427766518,1427766520,DE
-1427766521,1427766521,TR
-1427766522,1427766523,CA
-1427766524,1427766537,DE
-1427766538,1427766538,PK
-1427766539,1427766539,PA
-1427766540,1427766543,DE
-1427766544,1427766544,US
-1427766545,1427766546,RU
-1427766547,1427766547,EG
-1427766548,1427766549,DE
-1427766550,1427766550,PK
-1427766551,1427766551,FR
-1427766552,1427766552,BR
-1427766553,1427766554,LT
-1427766555,1427766555,SE
-1427766556,1427766556,BR
-1427766557,1427766557,FR
-1427766558,1427766559,TR
-1427766560,1427766560,PK
-1427766561,1427766561,IT
-1427766562,1427766562,DE
-1427766563,1427766563,GR
-1427766564,1427766565,DE
-1427766566,1427766566,BR
-1427766567,1427766567,DE
-1427766568,1427766569,GR
-1427766570,1427766570,DE
-1427766571,1427766571,UA
-1427766572,1427766572,DE
-1427766573,1427766573,MD
-1427766574,1427766574,DE
-1427766575,1427766575,BR
-1427766576,1427766576,IT
-1427766577,1427766577,DE
-1427766578,1427766578,PL
-1427766579,1427766579,AR
-1427766580,1427766580,US
-1427766581,1427766581,DE
-1427766582,1427766582,PT
-1427766583,1427766583,DE
-1427766584,1427766586,PK
-1427766587,1427766587,IT
-1427766588,1427766588,DE
-1427766589,1427766589,HU
-1427766590,1427766660,DE
-1427766661,1427766661,US
-1427766662,1427766665,DE
-1427766666,1427766666,US
-1427766667,1427766667,DE
-1427766668,1427766668,US
-1427766669,1427766674,DE
-1427766675,1427766695,US
-1427766696,1427766696,DE
-1427766697,1427766702,US
-1427766703,1427766710,IN
-1427766711,1427766711,DE
-1427766712,1427766714,IN
-1427766715,1427766715,DE
-1427766716,1427766716,TR
-1427766717,1427766717,DE
-1427766718,1427766718,TR
-1427766719,1427766787,DE
-1427766788,1427766788,UA
-1427766789,1427766791,DE
-1427766792,1427766792,UA
-1427766793,1427766803,DE
-1427766804,1427766804,EE
-1427766805,1427766805,UA
-1427766806,1427766809,DE
-1427766810,1427766810,PK
-1427766811,1427766812,DE
-1427766813,1427766813,CN
-1427766814,1427766816,DE
-1427766817,1427766818,CN
-1427766819,1427766819,UA
-1427766820,1427766820,RU
-1427766821,1427766823,DE
-1427766824,1427766824,UA
-1427766825,1427766825,AR
-1427766826,1427766826,DE
-1427766827,1427766827,GR
-1427766828,1427766829,EG
-1427766830,1427766830,DE
-1427766831,1427766831,IN
-1427766832,1427766833,AE
-1427766834,1427766835,DE
-1427766836,1427766836,IR
-1427766837,1427766838,GE
-1427766839,1427766839,DE
-1427766840,1427766840,LK
-1427766841,1427766844,DE
-1427766845,1427766846,EG
-1427766847,1427766857,DE
-1427766858,1427766866,US
-1427766867,1427766878,DE
-1427766879,1427766880,AU
-1427766881,1427766882,DE
-1427766883,1427766883,AU
-1427766884,1427766885,DE
-1427766886,1427766886,AU
-1427766887,1427766898,DE
-1427766899,1427766901,AU
-1427766902,1427766903,DE
-1427766904,1427766904,AU
-1427766905,1427766985,DE
-1427766986,1427766986,IT
-1427766987,1427766987,US
-1427766988,1427767007,DE
-1427767008,1427767009,CA
-1427767010,1427767010,DE
-1427767011,1427767014,CA
-1427767015,1427767015,DE
-1427767016,1427767017,CA
-1427767018,1427767018,DE
-1427767019,1427767021,CA
-1427767022,1427767024,DE
-1427767025,1427767028,CA
-1427767029,1427767029,DE
-1427767030,1427767030,CA
-1427767031,1427767031,NL
-1427767032,1427767036,DE
-1427767037,1427767038,KW
-1427767039,1427767295,DE
+1427739891,1427741372,DE
+1427741373,1427741373,AT
+1427741374,1427767295,DE
1427767296,1427800063,BE
1427800064,1427832831,RU
1427832832,1427865599,BE
1427865600,1427898367,DK
1427898368,1427914751,RU
-1427914752,1427923967,BE
-1427923968,1427924223,FR
-1427924224,1427931135,BE
+1427914752,1427931135,BE
1427931136,1427947519,PL
1427947520,1427963903,RU
1427963904,1427980287,TR
@@ -58479,15 +18589,10 @@
1428062208,1428078591,SE
1428078592,1428094975,RU
1428094976,1428103167,AT
-1428103168,1428111359,GB
-1428111360,1428118783,A2
-1428118784,1428119039,US
-1428119040,1428119551,A2
+1428103168,1428119551,GB
1428119552,1428121599,LV
1428121600,1428123647,FR
-1428123648,1428126975,RU
-1428126976,1428127231,TR
-1428127232,1428127743,RU
+1428123648,1428127743,RU
1428127744,1428129791,ES
1428129792,1428131839,GB
1428131840,1428133887,FR
@@ -58495,24 +18600,21 @@
1428135936,1428137983,IT
1428137984,1428140031,GB
1428140032,1428142079,RU
-1428142080,1428143119,DE
-1428143120,1428143135,RU
-1428143136,1428143167,DE
-1428143168,1428143199,ID
-1428143200,1428143263,DE
-1428143264,1428143279,CH
-1428143280,1428144127,DE
-1428144128,1428147287,FR
-1428147288,1428147295,GB
-1428147296,1428147343,FR
-1428147344,1428147351,GB
-1428147352,1428152319,FR
+1428142080,1428144127,DE
+1428144128,1428145151,FR
+1428145152,1428147519,GB
+1428147520,1428147583,FR
+1428147584,1428147711,GB
+1428147712,1428148223,FR
+1428148224,1428148735,GB
+1428148736,1428148991,FR
+1428148992,1428151807,GB
+1428151808,1428152063,FR
+1428152064,1428152319,GB
1428152320,1428160511,PL
1428160512,1428260863,IT
1428260864,1428261119,GB
-1428261120,1428474367,IT
-1428474368,1428474623,US
-1428474624,1428536831,IT
+1428261120,1428536831,IT
1428536832,1428537087,US
1428537088,1429209087,IT
1429209088,1430257663,ES
@@ -58524,23 +18626,13 @@
1431044096,1431306239,FI
1431306240,1431568383,DK
1431568384,1431830527,ES
-1431830528,1431832832,DE
-1431832833,1431832846,AT
-1431832847,1431837680,DE
-1431837681,1431837694,AT
-1431837695,1431838719,DE
-1431838720,1431839007,BE
-1431839008,1431839039,DE
-1431839040,1431846911,BE
+1431830528,1431838719,DE
+1431838720,1431846911,BE
1431846912,1431855103,NO
1431855104,1431863295,NL
-1431863296,1431864391,PT
-1431864392,1431864399,ES
-1431864400,1431866447,PT
-1431866448,1431866455,NL
-1431866456,1431866479,PT
-1431866480,1431866495,ES
-1431866496,1431871487,PT
+1431863296,1431866367,PT
+1431866368,1431867391,ES
+1431867392,1431871487,PT
1431871488,1431879679,RU
1431879680,1431887871,IT
1431887872,1431896063,GB
@@ -58551,9 +18643,7 @@
1431928832,1431937023,IT
1431937024,1431945215,PL
1431945216,1431953407,NO
-1431953408,1431956735,DK
-1431956736,1431956991,EU
-1431956992,1431961599,DK
+1431953408,1431961599,DK
1431961600,1431969791,CH
1431969792,1431977983,GB
1431977984,1431986175,NL
@@ -58561,9 +18651,7 @@
1431994368,1432002559,AT
1432002560,1432010751,HU
1432010752,1432018943,UA
-1432018944,1432023551,GB
-1432023552,1432023567,BG
-1432023568,1432027135,GB
+1432018944,1432027135,GB
1432027136,1432035327,IE
1432035328,1432043519,GB
1432043520,1432051711,ES
@@ -58575,61 +18663,11 @@
1432092672,1432100863,RU
1432100864,1432109055,CZ
1432109056,1432117247,GB
-1432117248,1432125439,CY
-1432125440,1432131607,NL
-1432131608,1432131615,PH
-1432131616,1432131679,NL
-1432131680,1432131695,PH
-1432131696,1432131711,NL
-1432131712,1432131727,PH
-1432131728,1432131743,NL
-1432131744,1432131759,PH
-1432131760,1432131775,NL
-1432131776,1432131783,PH
-1432131784,1432131887,NL
-1432131888,1432131903,PH
-1432131904,1432131919,NL
-1432131920,1432131935,PH
-1432131936,1432131951,NL
-1432131952,1432131967,PH
-1432131968,1432131999,NL
-1432132000,1432132031,PH
-1432132032,1432132271,NL
-1432132272,1432132287,PH
-1432132288,1432132303,NL
-1432132304,1432132319,PH
-1432132320,1432132351,NL
-1432132352,1432132495,PH
-1432132496,1432132511,NL
-1432132512,1432132559,PH
-1432132560,1432132639,NL
-1432132640,1432132655,PH
-1432132656,1432132671,NL
-1432132672,1432132687,PH
-1432132688,1432132815,NL
-1432132816,1432132831,PH
-1432132832,1432132895,NL
-1432132896,1432132911,PH
-1432132912,1432132927,NL
-1432132928,1432132943,PH
-1432132944,1432133039,NL
-1432133040,1432133055,PH
-1432133056,1432133151,NL
-1432133152,1432133167,PH
-1432133168,1432133199,NL
-1432133200,1432133215,PH
-1432133216,1432133327,NL
-1432133328,1432133343,PH
-1432133344,1432133455,NL
-1432133456,1432133503,PH
-1432133504,1432133543,NL
-1432133544,1432133551,PH
-1432133552,1432133631,NL
+1432125440,1432131583,NL
+1432131584,1432133631,US
1432133632,1432150015,GB
1432150016,1432158207,BA
-1432158208,1432165247,DE
-1432165248,1432165375,PL
-1432165376,1432166399,DE
+1432158208,1432166399,DE
1432166400,1432174591,RU
1432174592,1432182783,DE
1432182784,1432190975,CZ
@@ -58651,21 +18689,7 @@
1432322048,1432338431,RU
1432338432,1432346623,FR
1432346624,1433403391,TR
-1433403392,1433406431,ES
-1433406432,1433406447,US
-1433406448,1433407487,ES
-1433407488,1433410047,NL
-1433410048,1433410559,US
-1433410560,1433411071,ES
-1433411072,1433411327,US
-1433411328,1433411343,ES
-1433411344,1433411375,TR
-1433411376,1433411407,US
-1433411408,1433411423,TR
-1433411424,1433411439,ES
-1433411440,1433411455,TR
-1433411456,1433411519,US
-1433411520,1433411583,ES
+1433403392,1433411583,ES
1433411584,1433419775,RU
1433419776,1433427967,LB
1433427968,1433436159,RU
@@ -58689,18 +18713,22 @@
1433575424,1433583615,RU
1433583616,1433591807,UA
1433591808,1433599999,GE
-1433600000,1433602303,DE
-1433602304,1433602319,LU
-1433602320,1433608191,DE
-1433608192,1433610239,EU
+1433600000,1433608191,DE
+1433608192,1433608447,TR
+1433608448,1433608703,NL
+1433608704,1433610239,GB
1433610240,1433612287,US
1433612288,1433614335,GB
1433614336,1433615027,DE
-1433615028,1433615028,EU
+1433615028,1433615028,GB
1433615029,1433615359,DE
-1433615360,1433615871,FR
-1433615872,1433616383,CH
-1433616384,1433624575,AE
+1433615360,1433615615,FR
+1433615616,1433615871,GB
+1433615872,1433616127,CH
+1433616128,1433616383,GB
+1433616384,1433621759,AE
+1433621760,1433622015,IN
+1433622016,1433624575,AE
1433624576,1433632767,LV
1433632768,1433640959,GI
1433640960,1433649151,RU
@@ -58722,27 +18750,13 @@
1433772032,1433788415,SE
1433788416,1433796607,UZ
1433796608,1433804799,GB
-1433804800,1433805823,FR
-1433805824,1433805855,AE
-1433805856,1433805887,US
-1433805888,1433805919,LU
-1433805920,1433806591,FR
-1433806592,1433806623,GB
-1433806624,1433806655,BE
-1433806656,1433806687,IT
-1433806688,1433806719,NL
-1433806720,1433806751,DE
-1433806752,1433806783,ES
-1433806784,1433806815,CH
-1433806816,1433806847,AT
-1433806848,1433812991,FR
+1433804800,1433812991,FR
1433812992,1433821183,BG
1433821184,1433829375,GE
1433829376,1433831423,CZ
1433831424,1433833471,RU
1433833472,1433835519,IT
-1433835520,1433835775,IE
-1433835776,1433837567,GB
+1433835520,1433837567,GB
1433837568,1433839615,DE
1433839616,1433841663,GB
1433841664,1433843711,RU
@@ -58755,18 +18769,12 @@
1433856000,1433858047,GB
1433858048,1433860095,ES
1433860096,1433862143,DE
-1433862144,1433863375,CH
-1433863376,1433863399,GB
-1433863400,1433863423,CH
-1433863424,1433863487,US
-1433863488,1433864191,CH
+1433862144,1433864191,CH
1433864192,1433866239,HU
-1433866240,1433866751,NL
-1433866752,1433867007,GB
-1433867008,1433867521,NL
-1433867522,1433867522,GB
-1433867523,1433867775,NL
-1433867776,1433870335,GB
+1433866240,1433867519,NL
+1433867520,1433867775,GB
+1433867776,1433868287,NL
+1433868288,1433870335,GB
1433870336,1433872383,TR
1433872384,1433874431,IT
1433874432,1433876479,NL
@@ -58780,106 +18788,36 @@
1433890816,1433892863,GB
1433892864,1433894911,MT
1433894912,1433896959,SE
-1433896960,1433897471,NO
-1433897472,1433897727,NL
-1433897728,1433899007,NO
+1433896960,1433899007,NO
1433899008,1433901055,RU
1433901056,1433905151,DE
1433905152,1433907199,FR
1433907200,1433909247,IT
1433909248,1433911295,BE
1433911296,1433913343,ES
-1433913344,1433913875,NL
-1433913876,1433913879,DE
-1433913880,1433914047,NL
-1433914048,1433915135,DE
-1433915136,1433915391,NL
+1433913344,1433915391,NL
1433915392,1433917439,DE
1433917440,1433919487,BE
1433919488,1433921535,GB
-1433921536,1433921735,CH
-1433921736,1433921736,EU
-1433921737,1433923583,CH
-1433923584,1433923711,BE
-1433923712,1433924479,NL
-1433924480,1433925631,BE
+1433921536,1433923583,CH
+1433923584,1433925631,BE
1433925632,1433927679,GB
1433927680,1434189823,RO
1434189824,1434451967,AT
1434451968,1434517503,PL
1434517504,1434550271,DK
1434550272,1434583039,SA
-1434583040,1434611711,BG
+1434583040,1434595327,BG
+1434595328,1434596351,MK
+1434596352,1434611711,BG
1434611712,1434613759,MK
1434613760,1434615807,BG
1434615808,1434648575,IL
1434648576,1434681343,FI
-1434681344,1434681983,DE
-1434681984,1434681999,NL
-1434682000,1434682303,DE
-1434682304,1434682367,NL
-1434682368,1434683327,DE
-1434683328,1434683391,MY
-1434683392,1434685759,DE
-1434685760,1434685951,NL
-1434685952,1434686975,DE
-1434686976,1434687231,NL
-1434687232,1434687359,DE
-1434687360,1434687487,NL
-1434687488,1434687647,DE
-1434687648,1434687679,NL
-1434687680,1434688031,DE
-1434688032,1434688127,NL
-1434688128,1434688143,DE
-1434688144,1434688159,NL
-1434688160,1434688207,DE
-1434688208,1434688223,NL
-1434688224,1434688255,DE
-1434688256,1434689023,NL
-1434689024,1434689279,DE
-1434689280,1434689535,NL
-1434689536,1434689903,DE
-1434689904,1434689919,NL
-1434689920,1434689951,DE
-1434689952,1434690015,NL
-1434690016,1434691071,DE
-1434691072,1434691327,NL
-1434691328,1434692607,DE
-1434692608,1434692671,NL
-1434692672,1434694911,DE
-1434694912,1434695679,NL
-1434695680,1434696447,DE
-1434696448,1434696703,NL
-1434696704,1434698239,DE
-1434698240,1434698367,NL
-1434698368,1434698879,DE
-1434698880,1434699263,NL
-1434699264,1434702079,DE
-1434702080,1434702335,NL
-1434702336,1434702463,DE
-1434702464,1434702591,NL
-1434702592,1434702655,DE
-1434702656,1434702671,NL
-1434702672,1434702783,DE
-1434702784,1434702911,NL
-1434702912,1434702975,DE
-1434702976,1434703039,NL
-1434703040,1434704895,DE
-1434704896,1434705407,NL
-1434705408,1434705663,DE
-1434705664,1434705919,NL
-1434705920,1434708991,DE
-1434708992,1434709247,NL
-1434709248,1434709503,DE
-1434709504,1434709759,NL
-1434709760,1434710015,DE
-1434710016,1434710527,NL
-1434710528,1434712063,DE
-1434712064,1434712575,NL
-1434712576,1434712959,DE
-1434712960,1434712975,NL
-1434712976,1434714111,DE
-1434714112,1434746879,AZ
+1434681344,1434714111,DE
+1434714112,1434717951,AZ
+1434717952,1434718207,GB
+1434718208,1434746879,AZ
1434746880,1434779647,CZ
1434779648,1434812415,GB
1434812416,1434845183,IR
@@ -58892,22 +18830,16 @@
1435238400,1435500543,RU
1435500544,1436024831,NL
1436024832,1436090367,ES
-1436090368,1436101119,TR
-1436101120,1436101375,CY
-1436101376,1436102143,TR
-1436102144,1436102655,CY
-1436102656,1436155903,TR
+1436090368,1436155903,TR
1436155904,1436221439,OM
1436221440,1436286975,ES
1436286976,1436418047,FI
1436418048,1436420095,DE
-1436420096,1436422143,GB
1436422144,1436424191,FR
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
@@ -58916,43 +18848,29 @@
1436444672,1436446719,BE
1436446720,1436450815,FR
1436450816,1436452863,BH
-1436452864,1436453119,NL
-1436453120,1436453314,DE
-1436453315,1436453315,EU
-1436453316,1436453631,DE
-1436453632,1436453887,NL
-1436453888,1436454399,GB
-1436454400,1436454655,NL
-1436454656,1436454911,GB
+1436452864,1436453375,GB
+1436453376,1436453631,DE
+1436453632,1436454911,GB
1436454912,1436456959,AZ
1436456960,1436459007,GB
1436459008,1436461055,NL
1436461056,1436463103,ES
-1436463104,1436465151,DE
+1436463104,1436464383,DE
+1436464384,1436464639,AT
+1436464640,1436465151,DE
1436465152,1436467199,RU
-1436467200,1436469247,DE
+1436467200,1436468223,DE
+1436468224,1436468479,AT
+1436468480,1436469247,DE
1436469248,1436471295,NL
-1436471296,1436471551,BE
-1436471552,1436471615,NL
-1436471616,1436471679,FR
-1436471680,1436471743,BE
-1436471744,1436471807,BR
-1436471808,1436473343,BE
-1436473344,1436473599,RO
-1436473600,1436473855,IT
-1436473856,1436474111,RO
-1436474112,1436474367,IT
-1436474368,1436475391,RO
+1436471296,1436473343,BE
+1436473344,1436475391,RO
1436475392,1436477439,AT
1436477440,1436479487,CH
1436479488,1436481535,RU
1436481536,1436483583,NL
1436483584,1436485631,UA
-1436485632,1436487471,DE
-1436487472,1436487487,AT
-1436487488,1436487623,DE
-1436487624,1436487631,AT
-1436487632,1436487679,DE
+1436485632,1436487679,DE
1436487680,1436489727,IE
1436489728,1436491775,KZ
1436491776,1436495871,RU
@@ -58971,36 +18889,20 @@
1436526592,1436528639,GB
1436528640,1436530687,IT
1436530688,1436532735,GB
-1436532736,1436535039,IT
-1436535040,1436535295,AP
-1436535296,1436535839,IT
-1436535840,1436535855,ET
-1436535856,1436535943,IT
-1436535944,1436535951,ET
-1436535952,1436535999,IT
-1436536000,1436536007,MO
-1436536008,1436536831,IT
+1436532736,1436536831,IT
1436536832,1436538879,GB
1436538880,1436540927,JO
1436540928,1436542975,RU
-1436542976,1436544199,NL
-1436544200,1436544207,HK
-1436544208,1436545023,NL
+1436542976,1436545023,NL
1436545024,1436547071,DE
1436547072,1436549119,GB
-1436549120,1436745727,CZ
-1436745728,1436803071,SK
-1436803072,1436807167,CZ
-1436807168,1436811263,SK
+1436549120,1436680191,CZ
+1436680192,1436811263,SK
1436811264,1437073407,NO
1437073408,1437335551,FR
1437335552,1437597695,RU
1437597696,1438121983,DE
-1438121984,1438127103,NL
-1438127104,1438127359,GB
-1438127360,1438127615,SE
-1438127616,1438127871,BE
-1438127872,1438142463,NL
+1438121984,1438142463,NL
1438142464,1438142719,GB
1438142720,1438187519,NL
1438187520,1438253055,IR
@@ -59009,17 +18911,9 @@
1438384128,1438400511,FI
1438400512,1438433279,SE
1438433280,1438515199,GB
-1438515200,1438519007,DE
-1438519008,1438519039,SI
-1438519040,1438523391,DE
-1438523392,1438524159,NL
-1438524160,1438524415,DE
-1438524416,1438524947,NL
-1438524948,1438524951,DE
-1438524952,1438525335,NL
-1438525336,1438525343,DE
-1438525344,1438525607,NL
-1438525608,1438580735,DE
+1438515200,1438560255,DE
+1438560256,1438562303,US
+1438562304,1438580735,DE
1438580736,1438646271,NL
1438646272,1438662655,RU
1438662656,1438679039,ES
@@ -59036,121 +18930,28 @@
1438810112,1438826495,SE
1438826496,1438842879,FI
1438842880,1438859263,SE
-1438859264,1438860351,DE
-1438860352,1438860415,GB
-1438860416,1438861331,DE
-1438861332,1438861335,US
-1438861336,1438861375,DE
-1438861376,1438861439,US
-1438861440,1438861523,DE
-1438861524,1438861599,US
-1438861600,1438861631,DE
-1438861632,1438861639,US
-1438861640,1438861663,DE
-1438861664,1438861823,US
-1438861824,1438862079,CH
-1438862080,1438862339,DE
-1438862340,1438862359,US
-1438862360,1438862399,DE
-1438862400,1438862475,US
-1438862476,1438862479,DE
-1438862480,1438862599,US
-1438862600,1438862615,DE
-1438862616,1438862679,US
-1438862680,1438862751,DE
-1438862752,1438862775,US
-1438862776,1438862847,DE
-1438862848,1438862879,US
-1438862880,1438869647,DE
-1438869648,1438869651,LV
-1438869652,1438869655,DE
+1438859264,1438869655,DE
1438869656,1438869663,UA
-1438869664,1438874783,DE
-1438874784,1438874791,PA
-1438874792,1438874807,DE
-1438874808,1438874847,PA
-1438874848,1438874863,DE
-1438874864,1438874879,PA
-1438874880,1438875647,DE
-1438875648,1438876159,RU
-1438876160,1438876415,LT
-1438876416,1438876927,RU
-1438876928,1438877183,IQ
-1438877184,1438877439,A2
-1438877440,1438877695,RU
-1438877696,1438877951,LT
-1438877952,1438878975,LB
-1438878976,1438879231,IQ
-1438879232,1438880767,RU
-1438880768,1438881279,IQ
-1438881280,1438882303,RU
-1438882304,1438882559,LT
-1438882560,1438883583,RU
-1438883584,1438883839,AM
-1438883840,1438884351,RU
-1438884352,1438884607,LB
-1438884608,1438884863,IQ
-1438884864,1438885887,RU
-1438885888,1438890239,LT
-1438890240,1438890495,RU
-1438890496,1438890751,IQ
-1438890752,1438892031,RU
-1438892032,1438896127,CH
+1438869664,1438875647,DE
+1438875648,1438877951,RU
+1438877952,1438878207,LB
+1438878208,1438885887,RU
+1438885888,1438889983,LT
+1438889984,1438892031,RU
+1438892032,1438893823,IS
+1438893824,1438894079,CH
+1438894080,1438896127,IS
1438896128,1438900223,AQ
1438900224,1438908415,CH
1438908416,1438924799,GR
1438924800,1438941183,NO
1438941184,1438957567,BG
1438957568,1438973951,EE
-1438973952,1438994551,DE
-1438994552,1438994559,GB
-1438994560,1438994619,DE
-1438994620,1438994623,SE
-1438994624,1438994751,DE
-1438994752,1438994759,GB
-1438994760,1438994763,SE
-1438994764,1438995039,DE
-1438995040,1438995047,GB
-1438995048,1438995067,DE
-1438995068,1438995071,SE
-1438995072,1438995399,DE
-1438995400,1438995407,GB
-1438995408,1438995647,DE
-1438995648,1438995655,GB
-1438995656,1438998697,DE
-1438998698,1438998730,NL
-1438998731,1438998799,DE
-1438998800,1438998814,AT
-1438998815,1438998829,NL
-1438998830,1438998844,CH
-1438998845,1438998859,BE
-1438998860,1438998874,DK
-1438998875,1438998889,ES
-1438998890,1438998904,FI
-1438998905,1438998919,FR
-1438998920,1438998934,GR
-1438998935,1438998949,HU
-1438998950,1438998964,IS
-1438998965,1438998979,IT
-1438998980,1438998994,LI
-1438998995,1438999009,LU
-1438999010,1438999024,GB
-1438999025,1438999039,SE
-1438999040,1438999167,DE
-1438999168,1438999248,NL
-1438999249,1438999252,DE
-1438999253,1438999295,NL
-1438999296,1438999551,DE
-1438999552,1438999807,GB
-1438999808,1439000575,DE
-1439000576,1439000831,NL
-1439000832,1439002367,DE
+1438973952,1439000575,DE
+1439000576,1439001343,NL
+1439001344,1439002367,DE
1439002368,1439002623,NL
-1439002624,1439006567,DE
-1439006568,1439006575,AT
-1439006576,1439006671,DE
-1439006672,1439006675,PL
-1439006676,1439006719,DE
+1439002624,1439006719,DE
1439006720,1439023103,SE
1439023104,1439039487,IS
1439039488,1439055871,IR
@@ -59168,20 +18969,18 @@
1439305728,1439309823,DK
1439309824,1439318015,PL
1439318016,1439322111,DK
-1439322112,1439326207,RO
1439326208,1439330303,PL
1439330304,1439334399,RS
1439334400,1439338495,RU
1439338496,1439342591,PL
-1439342592,1439346687,UA
1439346688,1439350783,RU
-1439350784,1439354879,UA
1439354880,1439358975,PL
1439358976,1439367167,RU
-1439367168,1439375359,NL
-1439375360,1439382527,DE
-1439382528,1439432703,NL
-1439432704,1439498239,RO
+1439367168,1439399935,NL
+1439399936,1439432703,DK
+1439432704,1439477759,RO
+1439477760,1439479807,MD
+1439479808,1439498239,RO
1439498240,1439513599,DE
1439513600,1439514623,GB
1439514624,1439516671,IT
@@ -59190,8 +18989,7 @@
1439518720,1439527935,DE
1439527936,1439528959,GB
1439528960,1439529471,DE
-1439529472,1439529727,GB
-1439529728,1439529983,DE
+1439529472,1439529983,GB
1439529984,1439530239,EG
1439530240,1439534079,DE
1439534080,1439535103,GB
@@ -59220,11 +19018,7 @@
1439629312,1439694847,CZ
1439694848,1439825919,SA
1439825920,1439956991,GB
-1439956992,1440103181,DE
-1440103182,1440103182,DE
-1440103183,1440204799,DE
-1440204800,1440215039,EU
-1440215040,1440251903,DE
+1439956992,1440251903,DE
1440251904,1440284671,SK
1440284672,1440317439,FI
1440317440,1440350207,BG
@@ -59253,27 +19047,7 @@
1441357824,1441366015,AT
1441366016,1441374207,RU
1441374208,1441382399,GB
-1441382400,1441384511,FR
-1441384512,1441384543,US
-1441384544,1441385471,FR
-1441385472,1441385503,US
-1441385504,1441386111,FR
-1441386112,1441386239,IL
-1441386240,1441387519,FR
-1441387520,1441387647,US
-1441387648,1441387903,FR
-1441387904,1441387919,GN
-1441387920,1441387935,FR
-1441387936,1441387951,GB
-1441387952,1441388671,FR
-1441388672,1441388799,CA
-1441388800,1441389055,FR
-1441389056,1441389119,IE
-1441389120,1441389223,FR
-1441389224,1441389231,LU
-1441389232,1441389567,FR
-1441389568,1441389599,LU
-1441389600,1441390591,FR
+1441382400,1441390591,FR
1441390592,1441398783,DK
1441398784,1441415167,RU
1441415168,1441423359,GB
@@ -59282,66 +19056,37 @@
1441439744,1441447935,LV
1441447936,1441456127,BE
1441456128,1441464319,NL
-1441464320,1441468671,SE
-1441468672,1441470719,DK
-1441470720,1441472511,SE
+1441464320,1441468927,SE
+1441468928,1441469183,DK
+1441469184,1441472511,SE
1441472512,1441480703,RU
1441480704,1441488895,TR
-1441488896,1441492223,GB
-1441492224,1441492479,BE
-1441492480,1441497087,GB
+1441488896,1441497087,GB
1441497088,1441505279,IT
1441505280,1441521663,RU
1441521664,1441529855,DK
1441529856,1441538047,RU
-1441538048,1441542111,DE
-1441542112,1441542127,ES
-1441542128,1441542911,DE
-1441542912,1441542927,RO
-1441542928,1441543567,DE
-1441543568,1441543583,CH
-1441543584,1441543599,HR
-1441543600,1441545551,DE
-1441545552,1441545567,AT
-1441545568,1441545887,DE
-1441545888,1441545903,CH
-1441545904,1441546239,DE
+1441538048,1441546239,DE
1441546240,1441554431,DK
1441554432,1441554687,GB
1441554688,1441554943,NL
-1441554944,1441555199,GB
-1441555200,1441555455,DE
-1441555456,1441556735,GB
-1441556736,1441556991,DE
-1441556992,1441557759,GB
-1441557760,1441558015,NL
-1441558016,1441564671,GB
+1441554944,1441556991,GB
+1441556992,1441557503,SE
+1441557504,1441564671,GB
1441564672,1441566719,IQ
1441566720,1441568767,GB
1441568768,1441570815,FR
1441570816,1441579007,RU
-1441579008,1441582159,DE
-1441582160,1441582175,US
-1441582176,1441582975,DE
-1441582976,1441583103,US
-1441583104,1441586431,DE
-1441586432,1441586687,US
-1441586688,1441587199,DE
-1441587200,1441594879,AT
-1441594880,1441595135,DE
-1441595136,1441603583,AT
+1441579008,1441587199,DE
+1441587200,1441603583,AT
1441603584,1441611775,RU
1441611776,1441619967,DE
-1441619968,1441620735,FR
-1441620736,1441620767,ES
-1441620768,1441620863,FR
-1441620864,1441620895,ES
-1441620896,1441620927,PT
-1441620928,1441620959,ES
-1441620960,1441628159,FR
+1441619968,1441628159,FR
1441628160,1441636351,SA
1441636352,1441644543,PL
-1441644544,1441652735,GB
+1441644544,1441651455,GB
+1441651456,1441651711,CA
+1441651712,1441652735,GB
1441652736,1441660927,SK
1441660928,1441669119,ES
1441669120,1441677311,GE
@@ -59350,33 +19095,23 @@
1441693696,1441694719,BR
1441694720,1441695743,DE
1441695744,1441696767,US
-1441696768,1441697023,AP
+1441696768,1441697023,DE
1441697024,1441697791,SG
1441697792,1441698815,US
1441698816,1441701887,DE
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
-1441759232,1441763327,BG
-1441763328,1441765375,RO
-1441765376,1441767423,BG
+1441759232,1441767423,BG
1441767424,1441775615,IT
-1441775616,1441783807,ES
+1441775616,1441783807,IR
1441783808,1441791999,CZ
-1441792000,1441870847,PT
-1441870848,1441871359,US
-1441871360,1442316287,PT
-1442316288,1442316583,SK
-1442316584,1442316591,DE
-1442316592,1442332927,SK
-1442332928,1442333055,BE
-1442333056,1442381823,SK
+1441792000,1442316287,PT
+1442316288,1442381823,SK
1442381824,1442447359,RU
1442447360,1442512895,IL
1442512896,1442578431,ES
@@ -59385,7 +19120,9 @@
1442709504,1442775039,LV
1442775040,1442779135,PL
1442779136,1442783231,DE
-1442783232,1442787327,NO
+1442783232,1442786559,NO
+1442786560,1442786815,LV
+1442786816,1442787327,NO
1442787328,1442791423,LT
1442791424,1442795519,LV
1442799616,1442803711,LT
@@ -59404,58 +19141,7 @@
1445068800,1445199871,RO
1445199872,1445330943,QA
1445330944,1445396479,LT
-1445396480,1445429247,BE
-1445429248,1445429311,NL
-1445429312,1445430303,BE
-1445430304,1445431295,NL
-1445431296,1445431647,BE
-1445431648,1445431679,NL
-1445431680,1445431807,BE
-1445431808,1445433855,NL
-1445433856,1445433887,BE
-1445433888,1445434111,NL
-1445434112,1445434399,BE
-1445434400,1445434527,NL
-1445434528,1445434559,BE
-1445434560,1445434623,NL
-1445434624,1445435135,BE
-1445435136,1445435395,NL
-1445435396,1445435399,BE
-1445435400,1445435423,NL
-1445435424,1445435431,BE
-1445435432,1445435967,NL
-1445435968,1445435999,BE
-1445436000,1445436287,NL
-1445436288,1445436415,BE
-1445436416,1445436463,NL
-1445436464,1445436511,BE
-1445436512,1445436799,NL
-1445436800,1445436863,BE
-1445436864,1445436895,NL
-1445436896,1445436927,BE
-1445436928,1445436959,NL
-1445436960,1445437182,BE
-1445437183,1445437311,NL
-1445437312,1445437319,BE
-1445437320,1445437439,NL
-1445437440,1445437695,BE
-1445437696,1445437711,NL
-1445437712,1445437743,BE
-1445437744,1445437823,NL
-1445437824,1445438271,BE
-1445438272,1445439999,NL
-1445440000,1445440255,BE
-1445440256,1445442559,NL
-1445442560,1445443327,BE
-1445443328,1445445119,NL
-1445445120,1445445855,BE
-1445445856,1445447679,NL
-1445447680,1445451519,BE
-1445451520,1445451647,NL
-1445451648,1445456126,BE
-1445456127,1445456127,NL
-1445456128,1445458175,BE
-1445458176,1445462015,NL
+1445396480,1445462015,BE
1445462016,1445986303,IE
1445986304,1446051839,DK
1446051840,1446117375,CZ
@@ -59469,668 +19155,56 @@
1446576128,1446608895,IR
1446608896,1446641663,BY
1446641664,1446674431,SI
-1446674432,1446694543,DK
-1446694544,1446694559,SE
-1446694560,1446694591,DK
-1446694592,1446694607,NO
-1446694608,1446694623,GB
-1446694624,1446694639,TH
-1446694640,1446694655,BR
-1446694656,1446706051,DK
-1446706052,1446706056,SE
-1446706057,1446707175,DK
-1446707176,1446707183,NO
-1446707184,1446707199,DK
-1446707200,1446710687,AT
-1446710688,1446710695,CH
-1446710696,1446710799,AT
-1446710800,1446710815,MT
-1446710816,1446710887,AT
-1446710888,1446710895,MT
-1446710896,1446710903,AT
-1446710904,1446710911,MT
-1446710912,1446712783,AT
-1446712784,1446712791,DE
-1446712792,1446716399,AT
-1446716400,1446716407,MT
-1446716408,1446732671,AT
-1446732672,1446732679,IT
-1446732680,1446736503,AT
-1446736504,1446736511,US
-1446736512,1446739967,AT
+1446674432,1446707135,DK
+1446707136,1446707199,NO
+1446707200,1446739967,AT
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,1446904063,A2
-1446904064,1446904071,CY
-1446904072,1446904079,LY
-1446904080,1446904087,AF
-1446904088,1446904095,BF
-1446904096,1446904103,SD
-1446904104,1446904111,IQ
-1446904112,1446904119,GN
-1446904120,1446904127,IQ
-1446904128,1446904135,A2
-1446904136,1446904143,LY
-1446904144,1446904151,ER
-1446904152,1446904231,A2
-1446904232,1446904239,IQ
-1446904240,1446904247,A2
-1446904248,1446904255,AF
-1446904256,1446904263,CY
-1446904264,1446904319,A2
-1446904320,1446904335,AE
-1446904336,1446904351,A2
-1446904352,1446904367,AE
-1446904368,1446904383,IQ
-1446904384,1446904399,A2
-1446904400,1446904415,IQ
-1446904416,1446904575,A2
-1446904576,1446904591,SD
-1446904592,1446904599,AF
-1446904600,1446904607,A2
-1446904608,1446904623,SD
-1446904624,1446904639,A2
-1446904640,1446904679,IQ
-1446904680,1446904751,A2
-1446904752,1446904759,NG
-1446904760,1446904799,A2
-1446904800,1446904807,SD
-1446904808,1446904831,A2
-1446904832,1446904835,LY
-1446904836,1446904843,IQ
-1446904844,1446904847,CG
-1446904848,1446904851,AF
-1446904852,1446904855,LY
-1446904856,1446904859,IQ
-1446904860,1446904867,LY
-1446904868,1446904871,IQ
-1446904872,1446904879,A2
-1446904880,1446904883,IQ
-1446904884,1446904887,AF
-1446904888,1446904895,IQ
-1446904896,1446904899,LY
-1446904900,1446904903,A2
-1446904904,1446904907,AF
-1446904908,1446904919,A2
-1446904920,1446904923,LY
-1446904924,1446904927,AF
-1446904928,1446904931,TD
-1446904932,1446904935,A2
-1446904936,1446904939,AO
-1446904940,1446904943,LY
-1446904944,1446904947,IQ
-1446904948,1446904951,LY
-1446904952,1446904955,AF
-1446904956,1446904959,A2
-1446904960,1446904963,IQ
-1446904964,1446904967,TD
-1446904968,1446904971,A2
-1446904972,1446904975,LY
-1446904976,1446904979,CG
-1446904980,1446904983,TG
-1446904984,1446904991,LY
-1446904992,1446904995,IQ
-1446904996,1446905003,A2
-1446905004,1446905007,NG
-1446905008,1446905011,A2
-1446905012,1446905015,AF
-1446905016,1446905019,NG
-1446905020,1446905023,LY
-1446905024,1446905027,A2
-1446905028,1446905031,IQ
-1446905032,1446905035,LY
-1446905036,1446905039,IQ
-1446905040,1446905043,AF
-1446905044,1446905047,IQ
-1446905048,1446905051,LY
-1446905052,1446905059,IQ
-1446905060,1446905067,NG
-1446905068,1446905071,A2
-1446905072,1446905075,NG
-1446905076,1446905083,A2
-1446905084,1446905087,AF
-1446905088,1446905343,A2
-1446905344,1446905351,NG
-1446905352,1446905383,A2
-1446905384,1446905391,SD
-1446905392,1446905583,A2
-1446905584,1446905591,AF
-1446905592,1446905611,A2
-1446905612,1446905615,IQ
-1446905616,1446905619,A2
-1446905620,1446905623,TD
-1446905624,1446905627,A2
-1446905628,1446905631,IQ
-1446905632,1446905635,A2
-1446905636,1446905639,IQ
-1446905640,1446905643,A2
-1446905644,1446905647,IQ
-1446905648,1446905651,A2
-1446905652,1446905655,IQ
-1446905656,1446905659,AF
-1446905660,1446905663,ER
-1446905664,1446905667,LY
-1446905668,1446905675,AF
-1446905676,1446905683,LY
-1446905684,1446905687,A2
-1446905688,1446905691,CF
-1446905692,1446905703,A2
-1446905704,1446905707,IQ
-1446905708,1446905715,A2
-1446905716,1446905719,IQ
-1446905720,1446905723,AF
-1446905724,1446905727,A2
-1446905728,1446905731,IQ
-1446905732,1446905735,AF
-1446905736,1446905739,IQ
-1446905740,1446905743,A2
-1446905744,1446905759,LY
-1446905760,1446905763,ML
-1446905764,1446905767,A2
-1446905768,1446905775,IQ
-1446905776,1446905791,A2
-1446905792,1446905795,TD
-1446905796,1446905799,A2
-1446905800,1446905803,IQ
-1446905804,1446905815,A2
-1446905816,1446905819,LY
-1446905820,1446905823,IQ
-1446905824,1446905831,A2
-1446905832,1446905835,NG
-1446905836,1446905839,IQ
-1446905840,1446905851,A2
-1446905852,1446905855,AF
-1446905856,1446905863,LY
-1446905864,1446905871,SD
-1446905872,1446905911,A2
-1446905912,1446905927,SD
-1446905928,1446905935,A2
-1446905936,1446905943,SD
-1446905944,1446905959,A2
-1446905960,1446905967,AF
-1446905968,1446906023,A2
-1446906024,1446906031,SD
-1446906032,1446906071,A2
-1446906072,1446906079,CY
-1446906080,1446906111,A2
-1446906112,1446906119,IQ
-1446906120,1446906123,A2
-1446906124,1446906131,IQ
-1446906132,1446906135,SD
-1446906136,1446906151,A2
-1446906152,1446906159,AF
-1446906160,1446906167,A2
-1446906168,1446906171,IQ
-1446906172,1446906179,AF
-1446906180,1446906211,A2
-1446906212,1446906215,AF
-1446906216,1446906219,IQ
-1446906220,1446906223,BG
-1446906224,1446906231,A2
-1446906232,1446906239,AF
-1446906240,1446906243,IQ
-1446906244,1446906251,A2
-1446906252,1446906255,IQ
-1446906256,1446906259,A2
-1446906260,1446906263,AF
-1446906264,1446906287,A2
-1446906288,1446906295,IQ
-1446906296,1446906299,A2
-1446906300,1446906303,LY
-1446906304,1446906327,A2
-1446906328,1446906331,IQ
-1446906332,1446906343,A2
-1446906344,1446906347,NG
-1446906348,1446906359,A2
-1446906360,1446906363,SD
-1446906364,1446906391,A2
-1446906392,1446906399,CY
-1446906400,1446906879,A2
1446906880,1446907135,IQ
-1446907136,1446907143,A2
-1446907144,1446907147,AF
-1446907148,1446907151,IQ
-1446907152,1446907159,A2
-1446907160,1446907163,IQ
-1446907164,1446907171,A2
-1446907172,1446907175,IQ
-1446907176,1446907187,A2
-1446907188,1446907191,CG
-1446907192,1446907195,A2
-1446907196,1446907199,LY
-1446907200,1446907211,A2
-1446907212,1446907215,IQ
-1446907216,1446907219,A2
-1446907220,1446907223,BJ
-1446907224,1446907231,A2
-1446907232,1446907243,IQ
-1446907244,1446907251,A2
-1446907252,1446907259,IQ
-1446907260,1446907263,A2
-1446907264,1446907271,IQ
-1446907272,1446907279,A2
-1446907280,1446907283,GA
-1446907284,1446907287,A2
-1446907288,1446907291,AF
-1446907292,1446907307,A2
-1446907308,1446907311,AF
-1446907312,1446907315,A2
-1446907316,1446907319,IQ
-1446907320,1446907323,AF
-1446907324,1446907355,A2
-1446907356,1446907359,IQ
-1446907360,1446907367,A2
-1446907368,1446907368,IQ
-1446907369,1446907371,A2
-1446907372,1446907375,AF
-1446907376,1446907383,A2
-1446907384,1446907387,CI
-1446907388,1446907395,A2
-1446907396,1446907399,IQ
-1446907400,1446907403,A2
-1446907404,1446907407,IQ
-1446907408,1446907415,A2
-1446907416,1446907423,IQ
-1446907424,1446907431,A2
-1446907432,1446907435,IQ
-1446907436,1446907439,A2
-1446907440,1446907443,AF
-1446907444,1446907447,IQ
-1446907448,1446907487,A2
-1446907488,1446907491,IQ
-1446907492,1446907495,TD
-1446907496,1446907519,A2
-1446907520,1446907523,LY
-1446907524,1446907531,A2
-1446907532,1446907535,CI
-1446907536,1446907543,A2
-1446907544,1446907547,LY
-1446907548,1446907551,A2
-1446907552,1446907555,LY
-1446907556,1446907559,A2
-1446907560,1446907563,AF
-1446907564,1446907571,A2
-1446907572,1446907575,AF
-1446907576,1446907579,IQ
-1446907580,1446907583,A2
-1446907584,1446907587,IQ
-1446907588,1446907595,A2
-1446907596,1446907599,IQ
-1446907600,1446907611,A2
-1446907612,1446907615,IQ
-1446907616,1446907619,TD
-1446907620,1446907635,A2
-1446907636,1446907639,IQ
-1446907640,1446907663,A2
-1446907664,1446907667,NG
-1446907668,1446907671,IQ
-1446907672,1446907679,A2
-1446907680,1446907683,LY
-1446907684,1446907687,IQ
-1446907688,1446907691,A2
-1446907692,1446907695,IQ
-1446907696,1446907711,A2
-1446907712,1446907715,IQ
-1446907716,1446907719,AF
-1446907720,1446907735,A2
-1446907736,1446907739,IQ
-1446907740,1446907743,A2
-1446907744,1446907747,IQ
-1446907748,1446907751,A2
-1446907752,1446907755,AF
-1446907756,1446907767,A2
-1446907768,1446907775,IQ
-1446907776,1446907787,A2
-1446907788,1446907791,IQ
-1446907792,1446907811,A2
-1446907812,1446907819,IQ
-1446907820,1446907823,AF
-1446907824,1446907827,A2
-1446907828,1446907831,TD
-1446907832,1446907855,A2
-1446907856,1446907859,AF
-1446907860,1446907871,A2
-1446907872,1446907875,IQ
-1446907876,1446907891,A2
-1446907892,1446907895,AF
-1446907896,1446907899,A2
-1446907900,1446907903,EG
-1446907904,1446907911,A2
-1446907912,1446907919,SD
-1446907920,1446908143,A2
-1446908144,1446908151,AE
-1446908152,1446908159,SD
-1446908160,1446908163,AF
-1446908164,1446908187,A2
-1446908188,1446908191,GH
-1446908192,1446908195,A2
-1446908196,1446908199,IQ
-1446908200,1446908211,A2
-1446908212,1446908215,SD
-1446908216,1446908231,A2
-1446908232,1446908235,LY
-1446908236,1446908247,A2
-1446908248,1446908251,AF
-1446908252,1446908259,A2
-1446908260,1446908263,IQ
-1446908264,1446908267,A2
-1446908268,1446908271,AF
-1446908272,1446908275,A2
-1446908276,1446908279,LY
-1446908280,1446908283,A2
-1446908284,1446908287,AF
-1446908288,1446908299,A2
-1446908300,1446908303,IQ
-1446908304,1446908331,A2
-1446908332,1446908335,NG
-1446908336,1446908343,A2
-1446908344,1446908347,IQ
-1446908348,1446908351,TD
-1446908352,1446908355,IQ
-1446908356,1446908359,A2
-1446908360,1446908363,LY
-1446908364,1446908379,A2
-1446908380,1446908383,IQ
-1446908384,1446908387,A2
-1446908388,1446908391,IQ
-1446908392,1446908423,A2
-1446908424,1446908427,AF
-1446908428,1446908435,A2
-1446908436,1446908443,AF
-1446908444,1446908455,A2
-1446908456,1446908459,LB
-1446908460,1446908479,A2
-1446908480,1446908483,IQ
-1446908484,1446908603,A2
-1446908604,1446908607,CG
-1446908608,1446908631,A2
-1446908632,1446908635,IQ
-1446908636,1446908655,A2
-1446908656,1446908659,IQ
-1446908660,1446908663,A2
-1446908664,1446908667,IQ
-1446908668,1446908683,A2
-1446908684,1446908687,SD
-1446908688,1446908691,IQ
-1446908692,1446908755,A2
-1446908756,1446908759,IQ
-1446908760,1446908787,A2
-1446908788,1446908791,NG
-1446908792,1446908863,A2
-1446908864,1446908871,AF
-1446908872,1446908875,A2
-1446908876,1446908879,AF
-1446908880,1446908919,A2
-1446908920,1446908923,IQ
-1446908924,1446908927,A2
-1446908928,1446908931,IQ
-1446908932,1446908971,A2
-1446908972,1446908975,AF
-1446908976,1446908979,GA
-1446908980,1446908983,AF
-1446908984,1446908991,A2
-1446908992,1446908995,IQ
-1446908996,1446909007,A2
-1446909008,1446909011,IQ
-1446909012,1446909083,A2
-1446909084,1446909087,CG
-1446909088,1446909095,A2
-1446909096,1446909099,TD
-1446909100,1446909111,A2
-1446909112,1446909115,IQ
-1446909116,1446909163,A2
-1446909164,1446909167,IQ
-1446909168,1446909187,A2
-1446909188,1446909191,IQ
-1446909192,1446909203,A2
-1446909204,1446909207,IQ
-1446909208,1446909239,A2
-1446909240,1446909243,LY
-1446909244,1446909295,A2
-1446909296,1446909299,IQ
-1446909300,1446909363,A2
-1446909364,1446909367,IQ
-1446909368,1446909399,A2
-1446909400,1446909403,AF
-1446909404,1446909423,A2
-1446909424,1446909435,AF
-1446909436,1446909443,IQ
-1446909444,1446909447,NG
-1446909448,1446909499,A2
-1446909500,1446909503,IQ
-1446909504,1446909507,LY
-1446909508,1446909511,IQ
-1446909512,1446909515,A2
-1446909516,1446909519,EG
-1446909520,1446909523,CG
-1446909524,1446909527,A2
-1446909528,1446909531,EG
-1446909532,1446909535,A2
-1446909536,1446909539,AF
-1446909540,1446909547,IQ
-1446909548,1446909575,A2
-1446909576,1446909579,AF
-1446909580,1446909599,A2
-1446909600,1446909603,AF
-1446909604,1446909639,A2
-1446909640,1446909643,NG
-1446909644,1446909687,A2
-1446909688,1446909691,AF
-1446909692,1446909739,A2
-1446909740,1446909743,AF
-1446909744,1446909803,A2
-1446909804,1446909807,AF
-1446909808,1446909815,A2
-1446909816,1446909819,AF
-1446909820,1446909827,IQ
-1446909828,1446909967,A2
-1446909968,1446909971,LY
-1446909972,1446909999,A2
-1446910000,1446910003,AF
-1446910004,1446910019,A2
-1446910020,1446910023,IQ
-1446910024,1446910035,A2
-1446910036,1446910039,NG
-1446910040,1446910055,A2
-1446910056,1446910059,ZM
-1446910060,1446910111,A2
-1446910112,1446910115,NG
-1446910116,1446910139,A2
-1446910140,1446910143,NG
-1446910144,1446910163,A2
-1446910164,1446910167,NG
-1446910168,1446910187,A2
-1446910188,1446910191,IQ
-1446910192,1446910195,A2
-1446910196,1446910199,AF
-1446910200,1446910215,A2
-1446910216,1446910219,IQ
-1446910220,1446910223,A2
-1446910224,1446910227,IQ
-1446910228,1446910251,A2
-1446910252,1446910255,IQ
-1446910256,1446910275,A2
-1446910276,1446910279,IQ
-1446910280,1446910283,A2
-1446910284,1446910287,IQ
-1446910288,1446910303,A2
-1446910304,1446910307,IQ
-1446910308,1446910311,AF
-1446910312,1446910335,A2
-1446910336,1446910339,AF
-1446910340,1446910347,A2
-1446910348,1446910351,GA
-1446910352,1446910359,A2
-1446910360,1446910363,IQ
-1446910364,1446910375,A2
-1446910376,1446910379,AF
-1446910380,1446910459,A2
-1446910460,1446910463,LY
-1446910464,1446910471,A2
-1446910472,1446910479,LY
-1446910480,1446910487,EG
-1446910488,1446910495,A2
-1446910496,1446910503,NG
-1446910504,1446910599,A2
-1446910600,1446910607,NG
-1446910608,1446910623,A2
-1446910624,1446910639,AF
-1446910640,1446910695,A2
-1446910696,1446910711,SD
-1446910712,1446910719,A2
1446910720,1446911231,IQ
-1446911232,1446911235,A2
-1446911236,1446911239,IQ
-1446911240,1446911255,A2
-1446911256,1446911259,LY
-1446911260,1446911263,AF
-1446911264,1446911267,IQ
-1446911268,1446911271,AF
-1446911272,1446911303,A2
-1446911304,1446911307,IQ
-1446911308,1446911319,A2
-1446911320,1446911323,AF
-1446911324,1446911343,A2
-1446911344,1446911347,IQ
-1446911348,1446911351,LY
-1446911352,1446911363,A2
-1446911364,1446911367,LY
-1446911368,1446911395,A2
-1446911396,1446911399,AF
-1446911400,1446911403,A2
-1446911404,1446911407,AF
-1446911408,1446911411,LY
-1446911412,1446911423,A2
-1446911424,1446911427,AF
-1446911428,1446911435,A2
-1446911436,1446911439,SD
-1446911440,1446911443,A2
-1446911444,1446911447,IQ
-1446911448,1446911459,A2
-1446911460,1446911463,LY
-1446911464,1446911475,A2
-1446911476,1446911479,ER
-1446911480,1446911483,CG
-1446911484,1446911743,A2
-1446911744,1446911751,IQ
-1446911752,1446911763,A2
-1446911764,1446911767,LY
-1446911768,1446911771,A2
-1446911772,1446911775,AF
-1446911776,1446911779,A2
-1446911780,1446911783,AF
-1446911784,1446911787,A2
-1446911788,1446911791,AF
-1446911792,1446911795,A2
-1446911796,1446911799,IQ
-1446911800,1446911803,NG
-1446911804,1446911819,A2
-1446911820,1446911823,IQ
-1446911824,1446911827,A2
-1446911828,1446911831,IQ
-1446911832,1446911835,A2
-1446911836,1446911843,IQ
-1446911844,1446911847,A2
-1446911848,1446911855,IQ
-1446911856,1446911859,AF
-1446911860,1446911867,A2
-1446911868,1446911871,LY
-1446911872,1446911875,AF
-1446911876,1446911903,A2
-1446911904,1446911907,AF
-1446911908,1446911947,A2
-1446911948,1446911951,IQ
-1446911952,1446911955,A2
-1446911956,1446911959,IQ
-1446911960,1446911963,A2
-1446911964,1446911967,IQ
-1446911968,1446911987,A2
-1446911988,1446911995,AF
-1446911996,1446912003,A2
-1446912004,1446912007,AF
-1446912008,1446912011,A2
-1446912012,1446912015,IQ
-1446912016,1446912027,A2
-1446912028,1446912031,AF
-1446912032,1446912035,A2
-1446912036,1446912039,AF
-1446912040,1446912043,IQ
-1446912044,1446912047,CG
-1446912048,1446912051,AF
-1446912052,1446912055,ER
-1446912056,1446912059,A2
-1446912060,1446912063,NG
-1446912064,1446912067,AF
-1446912068,1446912071,A2
-1446912072,1446912075,IQ
-1446912076,1446912079,A2
-1446912080,1446912083,IQ
-1446912084,1446912087,AF
-1446912088,1446912095,A2
-1446912096,1446912103,AF
-1446912104,1446912115,A2
-1446912116,1446912119,LY
-1446912120,1446912151,A2
-1446912152,1446912155,CF
-1446912156,1446912163,A2
-1446912164,1446912167,IQ
-1446912168,1446912183,A2
-1446912184,1446912187,AF
-1446912188,1446912191,IQ
-1446912192,1446912195,A2
-1446912196,1446912203,IQ
-1446912204,1446912215,A2
-1446912216,1446912219,IQ
-1446912220,1446912239,A2
-1446912240,1446912247,IQ
-1446912248,1446912251,AF
-1446912252,1446912255,IQ
-1446912256,1446912263,AF
-1446912264,1446912295,IQ
-1446912296,1446912311,AF
-1446912312,1446912319,A2
-1446912320,1446912335,IQ
-1446912336,1446912343,KW
-1446912344,1446912367,IQ
-1446912368,1446912375,A2
-1446912376,1446912391,AF
-1446912392,1446912399,GA
-1446912400,1446912415,AF
-1446912416,1446912423,A2
-1446912424,1446912431,AF
-1446912432,1446920191,A2
1446920192,1446936575,RU
1446936576,1446952959,NO
1446952960,1446969343,QA
1446969344,1446985727,GB
1446985728,1447010303,PL
1447010304,1447018495,LV
-1447018496,1447019007,CZ
-1447019008,1447019023,BZ
-1447019024,1447026687,CZ
-1447026688,1447076354,FR
-1447076355,1447076357,FR
-1447076358,1448083455,FR
+1447018496,1447026687,CZ
+1447026688,1448083455,FR
1448083456,1449132031,NL
1449132032,1449394175,AE
1449394176,1449459711,LT
1449459712,1449525247,HU
1449525248,1449590783,RU
1449590784,1449656319,DE
-1449656320,1449808639,RO
-1449808640,1449808895,UA
-1449808896,1449840639,RO
+1449656320,1449706495,RO
+1449706496,1449707519,MD
+1449707520,1449736191,RO
+1449736192,1449738239,MD
+1449738240,1449742335,RO
+1449742336,1449744383,MD
+1449744384,1449765887,RO
+1449765888,1449766911,MD
+1449766912,1449775103,RO
+1449775104,1449776127,MD
+1449776128,1449819135,RO
+1449819136,1449820159,MD
+1449820160,1449824255,RO
+1449824256,1449826303,MD
+1449826304,1449840639,RO
1449840640,1449852927,MD
-1449852928,1449918463,RO
+1449852928,1449869311,RO
+1449869312,1449870335,MD
+1449870336,1449893887,RO
+1449893888,1449895935,MD
+1449895936,1449918463,RO
1449918464,1449951231,JO
1449951232,1449983999,TR
1449984000,1449992191,NL
-1449992192,1450000383,IR
+1449992192,1450000127,IR
+1450000128,1450000383,GB
1450000384,1450008575,HU
1450008576,1450016767,ES
1450016768,1450024959,IT
@@ -60141,16 +19215,11 @@
1450057728,1450065919,EE
1450065920,1450074111,DE
1450074112,1450082303,RU
-1450082304,1450084351,IT
-1450084352,1450085119,A2
-1450085120,1450090495,IT
+1450082304,1450090495,IT
1450090496,1450106879,RU
1450106880,1450115071,SK
1450115072,1450123263,RU
-1450123264,1450125231,AT
-1450125232,1450125239,DE
-1450125240,1450125247,US
-1450125248,1450131455,AT
+1450123264,1450131455,AT
1450131456,1450139647,UA
1450139648,1450147839,PL
1450147840,1450151935,CH
@@ -60159,7 +19228,6 @@
1450156032,1450164223,GB
1450164224,1450166271,SA
1450166272,1450168319,PL
-1450168320,1450170367,EU
1450170368,1450172415,GB
1450172416,1450174463,UA
1450174464,1450176511,DE
@@ -60169,17 +19237,11 @@
1450311680,1450442751,FI
1450442752,1450704895,CH
1450704896,1451229183,RO
-1451229184,1455204703,GB
-1455204704,1455204735,GG
-1455204736,1455423487,GB
+1451229184,1455423487,GB
1455423488,1459617791,FR
1459617792,1461714943,IT
1461714944,1462763519,IE
-1462763520,1463162611,DK
-1463162612,1463162612,US
-1463162613,1463162613,DK
-1463162614,1463162614,US
-1463162615,1463812095,DK
+1462763520,1463812095,DK
1463812096,1464074239,BE
1464074240,1464336383,IL
1464336384,1464467455,DK
@@ -60197,18 +19259,21 @@
1465974784,1466007551,HU
1466007552,1466040319,BG
1466040320,1466073087,EE
-1466073088,1466092831,FR
-1466092832,1466092863,GB
-1466092864,1466093023,FR
-1466093024,1466093039,BE
-1466093040,1466097663,FR
+1466073088,1466097663,FR
1466097664,1466099711,ES
1466099712,1466101759,PL
1466101760,1466103807,DE
-1466103808,1466104575,GB
-1466104576,1466104831,FR
-1466104832,1466105343,BE
-1466105344,1466105855,GB
+1466103808,1466104116,FR
+1466104117,1466104117,GB
+1466104118,1466104442,FR
+1466104443,1466104443,GB
+1466104444,1466104467,FR
+1466104468,1466104468,GB
+1466104469,1466104942,FR
+1466104943,1466104943,BE
+1466104944,1466105343,FR
+1466105344,1466105599,GB
+1466105600,1466105855,FR
1466105856,1466122239,PL
1466122240,1466130431,LV
1466130432,1466138623,PL
@@ -60223,9 +19288,7 @@
1466265600,1466269695,HU
1466269696,1466302463,SA
1466302464,1466335231,GB
-1466335232,1466367631,CH
-1466367632,1466367639,AT
-1466367640,1466367999,CH
+1466335232,1466367999,CH
1466368000,1466400767,PT
1466400768,1466433535,RU
1466433536,1466499071,DK
@@ -60235,23 +19298,10 @@
1466571896,1466589183,DE
1466589184,1466590207,FR
1466590208,1466591999,GB
-1466592000,1466592255,PL
-1466592256,1466592511,FR
-1466592512,1466592767,GB
-1466592768,1466592895,FR
-1466592896,1466593023,GB
-1466593024,1466606847,DE
-1466606848,1466607103,FR
-1466607104,1466608895,DE
-1466608896,1466609151,ES
-1466609152,1466613759,DE
+1466592000,1466613759,DE
1466613760,1466615807,ES
1466615808,1466616575,GB
-1466616576,1466617343,ES
-1466617344,1466617471,FR
-1466617472,1466617599,GB
-1466617600,1466617855,ES
-1466617856,1466630143,DE
+1466616576,1466630143,DE
1466630144,1466695679,IR
1466695680,1466761215,FI
1466761216,1466826751,SA
@@ -60267,44 +19317,9 @@
1467285504,1467301887,RU
1467301888,1467318271,GB
1467318272,1467334655,RU
-1467334656,1467340959,GB
-1467340960,1467340991,US
-1467340992,1467342975,GB
-1467342976,1467343103,EG
-1467343104,1467344639,GB
-1467344640,1467344895,ZA
-1467344896,1467347999,GB
-1467348000,1467348031,US
-1467348032,1467349887,GB
-1467349888,1467349903,CH
-1467349904,1467350527,GB
-1467350528,1467350783,CH
-1467350784,1467351039,GB
+1467334656,1467351039,GB
1467351040,1467367423,NO
-1467367424,1467367615,DE
-1467367616,1467367647,SE
-1467367648,1467367871,DE
-1467367872,1467367903,SE
-1467367904,1467367935,DE
-1467367936,1467368191,SI
-1467368192,1467368319,DK
-1467368320,1467368447,DE
-1467368448,1467368703,DK
-1467368704,1467369519,DE
-1467369520,1467369535,RU
-1467369536,1467369647,DE
-1467369648,1467369663,CH
-1467369664,1467369759,DE
-1467369760,1467369791,HR
-1467369792,1467369855,SE
-1467369856,1467369871,RU
-1467369872,1467369887,DE
-1467369888,1467369903,RU
-1467369904,1467369919,DE
-1467369920,1467369951,SG
-1467369952,1467369983,DE
-1467369984,1467370015,DK
-1467370016,1467383807,DE
+1467367424,1467383807,DE
1467383808,1467400191,BG
1467400192,1467416575,RU
1467416576,1467432959,PL
@@ -60312,26 +19327,13 @@
1467449344,1467457535,SI
1467457536,1467465727,EE
1467465728,1467465759,NL
-1467465760,1467465791,AT
+1467465760,1467465791,DE
1467465792,1467465799,NL
-1467465800,1467465807,AT
-1467465808,1467465823,DE
-1467465824,1467465855,AT
-1467465856,1467465983,DE
+1467465800,1467465983,DE
1467465984,1467466015,NL
-1467466016,1467466023,DE
-1467466024,1467466031,AT
-1467466032,1467466111,NL
-1467466112,1467466143,DE
-1467466144,1467466175,NL
-1467466176,1467466215,DE
-1467466216,1467466223,VG
-1467466224,1467466239,NL
-1467466240,1467466271,DE
-1467466272,1467466751,NL
-1467466752,1467467071,DE
-1467467072,1467467103,CH
-1467467104,1467472895,DE
+1467466016,1467466495,DE
+1467466496,1467466751,NL
+1467466752,1467472895,DE
1467472896,1467473919,NL
1467473920,1467482111,RU
1467482112,1467613183,BG
@@ -60340,16 +19342,10 @@
1467875328,1467940863,BG
1467940864,1468006399,GB
1468006400,1472200703,DE
-1472200704,1472226463,IE
-1472226464,1472226479,GB
-1472226480,1472259071,IE
+1472200704,1472259071,IE
1472259072,1472259327,GB
-1472259328,1472264799,IE
-1472264800,1472264807,GB
-1472264808,1472266239,IE
-1472266240,1472314335,DE
-1472314336,1472314343,A2
-1472314344,1472331775,DE
+1472259328,1472266239,IE
+1472266240,1472331775,DE
1472331776,1472397311,GB
1472397312,1472462847,NL
1472462848,1472528383,PT
@@ -60376,28 +19372,18 @@
1474723840,1474756607,SA
1474756608,1474822143,FR
1474822144,1474887679,IE
-1474887680,1474944527,NL
-1474944528,1474944535,US
-1474944536,1474953215,NL
-1474953216,1474968895,DE
-1474968896,1474968903,A2
-1474968904,1475016447,DE
-1475016448,1475016703,A2
-1475016704,1475018751,DE
+1474887680,1474953215,NL
+1474953216,1475018751,DE
1475018752,1475084287,ES
1475084288,1475086335,NL
1475086336,1475092479,RU
1475092480,1475094527,CY
1475094528,1475096575,RU
1475096576,1475098623,BH
-1475098624,1475101695,GB
-1475101696,1475102207,ZA
-1475102208,1475102719,GB
+1475098624,1475102719,GB
1475102720,1475104767,FR
1475104768,1475106815,RU
-1475106816,1475107583,SE
-1475107584,1475107839,LU
-1475107840,1475108863,SE
+1475106816,1475108863,SE
1475108864,1475110911,NL
1475110912,1475112959,DE
1475112960,1475115007,AT
@@ -60424,85 +19410,44 @@
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
1475172352,1475174399,DE
-1475174400,1475175047,NL
-1475175048,1475175055,US
-1475175056,1475176447,NL
+1475174400,1475176447,NL
1475176448,1475178495,RO
1475178496,1475180543,RU
-1475180544,1475181343,DE
-1475181344,1475181375,LU
-1475181376,1475181455,DE
-1475181456,1475181471,SC
-1475181472,1475181519,DE
-1475181520,1475181535,GB
-1475181536,1475181551,NL
-1475181552,1475181855,DE
-1475181856,1475181887,LU
-1475181888,1475181919,DE
-1475181920,1475181951,LU
-1475181952,1475182079,DE
-1475182080,1475182335,RO
-1475182336,1475184639,DE
+1475180544,1475184639,DE
1475184640,1475186687,RU
1475186688,1475188735,GB
1475188736,1475190783,SE
1475190784,1475192831,GB
1475192832,1475194879,CH
1475194880,1475196927,DE
-1475196928,1475198143,FR
-1475198144,1475198175,GB
-1475198176,1475198975,FR
+1475196928,1475198975,FR
1475198976,1475201023,BH
1475201024,1475203071,RS
1475203072,1475205119,SE
1475205120,1475205887,DE
1475205888,1475206143,US
-1475206144,1475206399,DE
-1475206400,1475206655,AP
-1475206656,1475207151,DE
+1475206144,1475207151,DE
1475207152,1475207183,US
-1475207184,1475207263,AE
-1475207264,1475207295,US
-1475207296,1475207423,AE
-1475207424,1475207679,GR
-1475207680,1475208191,SA
-1475208192,1475209215,AE
+1475207184,1475209215,AE
1475209216,1475211263,UZ
1475211264,1475213311,DE
1475213312,1475215359,FR
1475215360,1475223551,IT
-1475223552,1475229695,NO
-1475229696,1475229759,SE
-1475229760,1475229951,NO
-1475229952,1475230255,SE
-1475230256,1475230263,NO
-1475230264,1475230399,SE
-1475230400,1475230975,NO
-1475230976,1475231023,SE
-1475231024,1475233791,NO
-1475233792,1475235071,GB
-1475235072,1475235327,IE
-1475235328,1475235839,GB
-1475235840,1475236863,IE
-1475236864,1475237119,GB
-1475237120,1475237887,IE
+1475223552,1475226495,SE
+1475226496,1475227647,NO
+1475227648,1475231743,SE
+1475231744,1475233791,NO
+1475233792,1475235839,GB
+1475235840,1475237887,IE
1475237888,1475239935,ES
1475239936,1475241983,RU
-1475241984,1475242239,MC
-1475242240,1475243775,FR
-1475243776,1475244031,MC
-1475244032,1475244287,DE
-1475244288,1475244543,SD
-1475244544,1475244799,FR
-1475244800,1475245055,LB
-1475245056,1475245311,US
-1475245312,1475245823,DE
+1475241984,1475244031,FR
+1475244032,1475245823,DE
1475245824,1475246079,RU
1475246080,1475248127,CH
1475248128,1475250175,JO
@@ -60525,7 +19470,6 @@
1475284992,1475287039,GB
1475287040,1475291135,RU
1475291136,1475293183,PL
-1475293184,1475295231,GB
1475295232,1475297279,SK
1475297280,1475299327,DK
1475299328,1475301375,PL
@@ -60562,189 +19506,49 @@
1475493888,1475510271,RU
1475510272,1475543039,GB
1475543040,1475559423,RO
-1475559424,1475562751,GR
-1475562752,1475563007,BG
-1475563008,1475564031,GR
-1475564032,1475564287,BG
-1475564288,1475566591,GR
-1475566592,1475566847,BG
-1475566848,1475570687,GR
-1475570688,1475570943,BG
-1475570944,1475571711,GR
-1475571712,1475573247,BG
-1475573248,1475573503,GR
-1475573504,1475574015,BG
-1475574016,1475574271,GR
-1475574272,1475575039,BG
-1475575040,1475575807,GR
+1475559424,1475571711,GR
+1475571712,1475572735,BG
+1475572736,1475575807,GR
1475575808,1475592191,AT
1475592192,1475608575,GB
1475608576,1475624959,RU
-1475624960,1475627519,JE
-1475627520,1475627655,GB
-1475627656,1475627663,JE
-1475627664,1475627688,GB
-1475627689,1475627695,JE
-1475627696,1475627775,GB
-1475627776,1475628031,JE
-1475628032,1475628287,GB
-1475628288,1475634431,JE
-1475634432,1475634495,GB
-1475634496,1475634559,JE
-1475634560,1475634719,GB
-1475634720,1475634727,JE
-1475634728,1475634735,GB
-1475634736,1475634751,JE
-1475634752,1475634759,GB
-1475634760,1475634799,JE
-1475634800,1475634815,GB
-1475634816,1475634967,JE
-1475634968,1475634975,GB
-1475634976,1475636287,JE
-1475636288,1475636399,GB
-1475636400,1475636415,JE
-1475636416,1475636431,GB
-1475636432,1475636447,JE
-1475636448,1475636479,GB
-1475636480,1475636735,JE
-1475636736,1475637503,GB
-1475637504,1475639039,JE
-1475639040,1475639216,GB
-1475639217,1475639223,JE
-1475639224,1475639263,GB
-1475639264,1475639271,BB
-1475639272,1475639279,JE
-1475639280,1475639287,GB
-1475639288,1475639295,JE
-1475639296,1475639343,GB
-1475639344,1475639359,JE
-1475639360,1475639375,GB
-1475639376,1475639383,JE
-1475639384,1475639527,GB
-1475639528,1475639543,JE
-1475639544,1475639595,GB
-1475639596,1475639599,JE
-1475639600,1475639807,GB
-1475639808,1475641087,JE
-1475641088,1475641215,GB
-1475641216,1475641343,JE
+1475624960,1475637303,JE
+1475637304,1475637311,GB
+1475637312,1475637471,JE
+1475637472,1475637479,GB
+1475637480,1475638783,JE
+1475638784,1475639039,GB
+1475639040,1475639391,JE
+1475639392,1475639399,GB
+1475639400,1475639479,JE
+1475639480,1475639487,GB
+1475639488,1475639559,JE
+1475639560,1475639567,GB
+1475639568,1475639583,JE
+1475639584,1475639591,GB
+1475639592,1475639695,JE
+1475639696,1475639703,GB
+1475639704,1475641343,JE
1475641344,1475657727,UA
1475657728,1475674111,SK
1475674112,1475690495,DE
1475690496,1475706879,CH
1475706880,1475723263,RU
-1475723264,1475725311,GB
-1475725312,1475726527,RU
-1475726528,1475726575,GB
-1475726576,1475727167,RU
-1475727168,1475727343,GB
-1475727344,1475727359,RU
-1475727360,1475727391,FI
-1475727392,1475727615,GB
-1475727616,1475727623,FI
-1475727624,1475727631,GB
-1475727632,1475727639,FI
-1475727640,1475727647,GB
-1475727648,1475727663,FI
-1475727664,1475727735,GB
-1475727736,1475727743,RU
-1475727744,1475727807,GB
-1475727808,1475727871,FI
-1475727872,1475728383,GB
-1475728384,1475728511,CH
-1475728512,1475728767,GB
-1475728768,1475728783,FR
-1475728784,1475728887,GB
-1475728888,1475728895,RU
-1475728896,1475729087,GB
-1475729088,1475729103,DE
-1475729104,1475729135,GB
-1475729136,1475729143,RU
-1475729144,1475729151,GB
-1475729152,1475729215,AT
-1475729216,1475729343,GB
-1475729344,1475729359,RU
-1475729360,1475729391,GB
-1475729392,1475729407,RU
-1475729408,1475729536,UA
-1475729537,1475729647,GB
-1475729648,1475729671,UA
-1475729672,1475729679,GB
-1475729680,1475729687,UA
-1475729688,1475729919,GB
-1475729920,1475730431,UA
-1475730432,1475730495,RU
-1475730496,1475731455,UA
-1475731456,1475732479,GB
-1475732480,1475732991,RU
-1475732992,1475734271,GB
-1475734272,1475734279,RU
-1475734280,1475734783,GB
-1475734784,1475734791,UA
-1475734792,1475734799,RU
-1475734800,1475734807,UA
-1475734808,1475734815,RU
-1475734816,1475734823,UA
-1475734824,1475734831,RU
-1475734832,1475734911,UA
-1475734912,1475734919,RU
-1475734920,1475734991,UA
-1475734992,1475734999,RU
-1475735000,1475735039,UA
-1475735040,1475735295,GB
-1475735296,1475735319,UA
-1475735320,1475735327,RU
-1475735328,1475735343,UA
-1475735344,1475735351,RU
-1475735352,1475735367,UA
-1475735368,1475735375,RU
-1475735376,1475735383,UA
-1475735384,1475735391,RU
-1475735392,1475735439,UA
-1475735440,1475735455,RU
-1475735456,1475735551,UA
-1475735552,1475735807,US
-1475735808,1475735999,RU
-1475736000,1475736063,GB
-1475736064,1475736127,LV
-1475736128,1475736191,EE
-1475736192,1475736255,GB
-1475736256,1475736319,HU
-1475736320,1475736447,RU
-1475736448,1475736551,UA
-1475736552,1475736831,RU
-1475736832,1475736959,GB
-1475736960,1475737023,FR
-1475737024,1475737087,PL
-1475737088,1475737151,NL
-1475737152,1475737183,CZ
-1475737184,1475737191,RU
-1475737192,1475737215,CZ
-1475737216,1475737255,DE
-1475737256,1475737263,RU
-1475737264,1475737267,DE
-1475737268,1475737279,RU
-1475737280,1475737343,AT
-1475737344,1475737399,UA
-1475737400,1475737407,RU
-1475737408,1475737471,UA
-1475737472,1475737479,RU
-1475737480,1475737487,UA
-1475737488,1475737495,RU
-1475737496,1475737503,UA
-1475737504,1475737519,RU
-1475737520,1475737543,UA
-1475737544,1475737551,RU
-1475737552,1475737583,UA
-1475737584,1475737591,RU
-1475737592,1475737599,UA
-1475737600,1475737655,FI
-1475737656,1475737663,RU
-1475737664,1475737727,FI
-1475737728,1475737735,RU
-1475737736,1475737855,FI
-1475737856,1475738111,SE
-1475738112,1475739647,RU
+1475723264,1475724866,GB
+1475724867,1475724867,RU
+1475724868,1475724869,GB
+1475724870,1475724870,RU
+1475724871,1475725055,GB
+1475725056,1475725311,RU
+1475725312,1475726079,GB
+1475726080,1475726335,RU
+1475726336,1475729663,GB
+1475729664,1475729671,UA
+1475729672,1475731007,GB
+1475731008,1475731071,UA
+1475731072,1475738111,GB
+1475738112,1475738879,RU
+1475738880,1475739647,GB
1475739648,1475756031,BG
1475756032,1475772415,GB
1475772416,1475788799,LV
@@ -60761,11 +19565,7 @@
1475870720,1475878911,NO
1475878912,1475887103,IT
1475887104,1475895295,PL
-1475895296,1475895551,GB
-1475895552,1475897343,IE
-1475897344,1475899903,GB
-1475899904,1475901439,IE
-1475901440,1475903487,CH
+1475895296,1475903487,GB
1475903488,1475911679,IR
1475911680,1475919871,MD
1475919872,1475921983,IT
@@ -60778,33 +19578,14 @@
1475927632,1475927647,FR
1475927648,1475928063,IT
1475928064,1475952639,RU
-1475952640,1475953151,AE
-1475953152,1475953407,A2
-1475953408,1475954175,GB
+1475952640,1475954175,GB
1475954176,1475954687,NO
-1475954688,1475954943,A2
-1475954944,1475955199,GB
-1475955200,1475955839,NG
-1475955840,1475955967,GH
-1475955968,1475956223,GB
-1475956224,1475956607,NG
-1475956608,1475956735,GH
-1475956736,1475957503,GB
-1475957504,1475957759,IN
-1475957760,1475958015,AF
-1475958016,1475958527,GB
+1475954688,1475955247,GB
+1475955248,1475955255,NG
+1475955256,1475958527,GB
1475958528,1475958783,NO
-1475958784,1475959039,GB
-1475959040,1475959047,US
-1475959048,1475959295,A2
-1475959296,1475959647,GB
-1475959648,1475959743,A2
-1475959744,1475960207,GB
-1475960208,1475960319,A2
-1475960320,1475960831,GB
-1475960832,1475965103,NL
-1475965104,1475965119,IT
-1475965120,1475969023,NL
+1475958784,1475960831,GB
+1475960832,1475969023,NL
1475969024,1475977215,CZ
1475977216,1475985407,SE
1475985408,1476009983,RU
@@ -60815,38 +19596,28 @@
1476042752,1476050943,PL
1476050944,1476067327,RU
1476067328,1476075519,TR
-1476075520,1476079555,NL
-1476079556,1476079557,DE
-1476079558,1476083711,NL
+1476075520,1476083711,NL
1476083712,1476116479,RU
1476116480,1476124671,SE
1476124672,1476132863,PL
-1476132864,1476134911,FR
-1476134912,1476135167,GB
-1476135168,1476141055,FR
+1476132864,1476141055,FR
1476141056,1476149247,GB
1476149248,1476157439,NO
-1476157440,1476159231,BH
-1476159232,1476159487,JO
-1476159488,1476159695,GB
-1476159696,1476159727,BH
-1476159728,1476159951,GB
-1476159952,1476159983,BH
-1476159984,1476165119,GB
-1476165120,1476165375,BH
-1476165376,1476165631,JO
+1476157440,1476160511,BH
+1476160512,1476164607,GB
+1476164608,1476165631,BH
1476165632,1476173823,HR
1476173824,1476182015,BG
-1476182016,1476190207,IE
+1476182016,1476186367,GB
+1476186368,1476186383,IE
+1476186384,1476190207,GB
1476190208,1476198399,BY
1476198400,1476206591,RU
1476206592,1476214783,GE
1476214784,1476222975,SE
1476222976,1476231167,IT
1476231168,1476239359,NL
-1476239360,1476245759,DE
-1476245760,1476246015,PL
-1476246016,1476247551,DE
+1476239360,1476247551,DE
1476247552,1476255743,RU
1476255744,1476257791,ES
1476257792,1476259839,FR
@@ -60857,17 +19628,11 @@
1476288512,1476296703,LU
1476296704,1476304895,RU
1476304896,1476313087,BG
-1476313088,1476315135,FI
+1476313088,1476315135,DE
1476315136,1476316159,US
-1476316160,1476316671,SG
-1476316672,1476317183,CN
-1476317184,1476317695,FI
-1476317696,1476318207,DE
-1476318208,1476318463,FI
-1476318464,1476318719,DE
-1476318720,1476318975,FI
-1476318976,1476319231,SG
-1476319232,1476321279,FI
+1476316160,1476317183,FI
+1476317184,1476321151,DE
+1476321152,1476321279,FI
1476321280,1476329471,MC
1476329472,1476337663,RU
1476337664,1476345855,NL
@@ -60878,46 +19643,38 @@
1476378624,1476386815,KZ
1476386816,1476395007,RU
1476395008,1478492159,ES
-1478492160,1478534087,IT
-1478534088,1478534095,FR
-1478534096,1478534951,IT
-1478534952,1478534975,FR
-1478534976,1478535471,IT
-1478535472,1478535479,FR
-1478535480,1478869511,IT
-1478869512,1478869519,FR
-1478869520,1478870167,IT
-1478870168,1478870175,FR
-1478870176,1478872119,IT
-1478872120,1478872127,FR
-1478872128,1479016191,IT
-1479016192,1479016447,US
-1479016448,1479400703,IT
-1479400704,1479401471,US
-1479401472,1479898367,IT
+1478492160,1478772671,IT
+1478772672,1478772675,SI
+1478772676,1478912623,IT
+1478912624,1478912631,SI
+1478912632,1479296487,IT
+1479296488,1479296495,SI
+1479296496,1479392487,IT
+1479392488,1479392495,SI
+1479392496,1479421151,IT
+1479421152,1479421159,SI
+1479421160,1479898367,IT
1479898368,1479898623,US
1479898624,1480589311,IT
-1480589312,1481633041,DE
-1481633042,1481633042,DE
-1481633043,1481637887,DE
+1480589312,1481637887,DE
1481637888,1481646079,SE
1481646080,1481654271,RU
1481654272,1481662463,IT
1481662464,1481678847,BG
-1481678848,1481679743,SE
-1481679744,1481679775,GB
-1481679776,1481680639,SE
-1481680640,1481680643,GB
-1481680644,1481687039,SE
+1481678848,1481684991,SE
+1481684992,1481687039,GB
1481687040,1481695231,DE
1481695232,1481703423,SK
1481703424,1481711615,SA
1481711616,1481719807,RU
1481719808,1481727999,CZ
1481728000,1481736191,IE
-1481736192,1481741823,GG
-1481741824,1481742079,GB
-1481742080,1481744383,GG
+1481736192,1481741311,GG
+1481741312,1481741567,GB
+1481741568,1481741568,GG
+1481741569,1481741823,GB
+1481741824,1481742079,GG
+1481742080,1481744383,GB
1481744384,1481752575,IT
1481752576,1481760767,RU
1481760768,1481768959,UA
@@ -60936,9 +19693,7 @@
1481867264,1481875455,SE
1481875456,1481883647,CZ
1481883648,1481891839,RU
-1481891840,1481893119,CZ
-1481893120,1481893375,SK
-1481893376,1481893631,CZ
+1481891840,1481893631,CZ
1481893632,1481893887,SK
1481893888,1481900031,CZ
1481900032,1481908223,CH
@@ -60953,26 +19708,7 @@
1481973760,1481981951,FO
1481981952,1481982340,NL
1481982341,1481982341,LB
-1481982342,1481983999,NL
-1481984000,1481984127,GB
-1481984128,1481984255,PA
-1481984256,1481984383,NL
-1481984384,1481984511,GI
-1481984512,1481984639,CY
-1481984640,1481985023,NL
-1481985024,1481985279,MT
-1481985280,1481987327,NL
-1481987328,1481987583,GB
-1481987584,1481987967,NL
-1481987968,1481988031,PA
-1481988032,1481988095,NL
-1481988096,1481988159,GI
-1481988160,1481988167,RU
-1481988168,1481988319,NL
-1481988320,1481988335,BZ
-1481988336,1481988351,NL
-1481988352,1481988607,GB
-1481988608,1481990143,NL
+1481982342,1481990143,NL
1481990144,1481998335,MK
1481998336,1482006527,FI
1482006528,1482022911,RU
@@ -60980,11 +19716,7 @@
1482031104,1482039295,SY
1482039296,1482047487,SE
1482047488,1482055679,RU
-1482055680,1482059811,CZ
-1482059812,1482059813,SK
-1482059814,1482060919,CZ
-1482060920,1482060927,SK
-1482060928,1482063871,CZ
+1482055680,1482063871,CZ
1482063872,1482072063,FI
1482072064,1482080255,IT
1482080256,1482088447,RU
@@ -60992,9 +19724,7 @@
1482096640,1482104831,BG
1482104832,1482113023,NO
1482113024,1482121215,RU
-1482121216,1482127123,IT
-1482127124,1482127127,TR
-1482127128,1482129407,IT
+1482121216,1482129407,IT
1482129408,1482137599,ES
1482137600,1482145791,IE
1482145792,1482153983,ES
@@ -61010,16 +19740,17 @@
1484783616,1484849151,DE
1484849152,1484914687,SE
1484914688,1484980223,DE
-1484980224,1485001055,SE
-1485001056,1485001087,NO
-1485001088,1485045759,SE
+1484980224,1485045759,SE
1485045760,1485111295,HU
1485111296,1485242367,DE
1485242368,1485246463,RU
1485246464,1485250559,UA
1485250560,1485254655,IR
1485254656,1485258751,RU
-1485258752,1485266943,UA
+1485258752,1485262847,UA
+1485262848,1485263615,RU
+1485263616,1485263871,UA
+1485263872,1485266943,RU
1485266944,1485271039,RO
1485271040,1485275135,UA
1485275136,1485283327,LV
@@ -61033,12 +19764,9 @@
1486094336,1486127103,ES
1486127104,1486159871,FI
1486159872,1486192639,IS
-1486192640,1486211687,IT
-1486211688,1486211695,GB
-1486211696,1486225407,IT
+1486192640,1486225407,IT
1486225408,1486258175,DE
-1486258176,1486290943,RS
-1486290944,1486292991,GB
+1486258176,1486292991,GB
1486292992,1486295039,RU
1486295040,1486297087,ES
1486297088,1486299135,IE
@@ -61051,9 +19779,7 @@
1486311424,1486313471,IE
1486313472,1486315519,RU
1486315520,1486317567,HU
-1486317568,1486320383,RU
-1486320384,1486320639,US
-1486320640,1486321663,RU
+1486317568,1486321663,RU
1486321664,1486323711,NL
1486323712,1486325759,GB
1486325760,1486327807,PL
@@ -61083,212 +19809,44 @@
1489240064,1489305599,EE
1489305600,1489338367,GR
1489338368,1489371135,BE
-1489371136,1489389391,DE
-1489389392,1489389399,IT
-1489389400,1489391639,DE
-1489391640,1489391647,ES
-1489391648,1489392767,DE
-1489392768,1489392775,IT
-1489392776,1489402239,DE
-1489402240,1489402367,TR
-1489402368,1489404767,DE
-1489404768,1489404775,IT
-1489404776,1489404839,DE
-1489404840,1489404847,ES
-1489404848,1489404855,DE
-1489404856,1489404863,ES
-1489404864,1489436671,DE
+1489371136,1489436671,DE
1489436672,1489502207,PL
1489502208,1489534975,SI
1489534976,1489567743,RU
1489567744,1489600511,BH
1489600512,1489633279,RU
-1489633280,1489635327,IT
-1489635328,1489635838,GB
-1489635839,1489635839,EU
-1489635840,1489636863,IT
-1489636864,1489637119,FR
-1489637120,1489637887,IT
-1489637888,1489638399,A2
-1489638400,1489638655,IT
-1489638656,1489638911,FR
-1489638912,1489640703,IT
-1489640704,1489640959,FR
-1489640960,1489641727,IT
-1489641728,1489641983,HK
-1489641984,1489642495,IT
-1489642496,1489642751,FR
-1489642752,1489644543,IT
+1489633280,1489634303,FR
+1489634304,1489635839,IT
+1489635840,1489636863,FR
+1489636864,1489637119,IT
+1489637120,1489637631,FR
+1489637632,1489638143,IT
+1489638144,1489639423,FR
+1489639424,1489639679,IT
+1489639680,1489640959,FR
+1489640960,1489641215,IT
+1489641216,1489641471,FR
+1489641472,1489641599,PT
+1489641600,1489641727,GR
+1489641728,1489642495,FR
+1489642496,1489642751,IT
+1489642752,1489644031,FR
+1489644032,1489644287,IT
+1489644288,1489644543,FR
1489644544,1489644799,IQ
-1489644800,1489645055,A2
-1489645056,1489645567,IT
-1489645568,1489646079,A2
-1489646080,1489646335,GB
-1489646336,1489646591,US
-1489646592,1489646847,A2
-1489646848,1489647103,IT
-1489647104,1489647359,GB
-1489647360,1489648639,IT
-1489648640,1489648895,A2
-1489648896,1489649158,GB
-1489649159,1489649159,US
-1489649160,1489649407,GB
-1489649408,1489649663,EU
+1489644800,1489649663,IT
1489649664,1489650687,FR
-1489650688,1489651199,EU
-1489651200,1489653759,IT
-1489653760,1489653760,EU
-1489653761,1489653874,IT
-1489653875,1489657599,EU
-1489657600,1489659919,IT
-1489659920,1489659935,FR
-1489659936,1489659951,DE
-1489659952,1489659967,CY
-1489659968,1489659983,FI
-1489659984,1489659999,GR
-1489660000,1489660015,IE
-1489660016,1489660031,ES
-1489660032,1489660047,PL
-1489660048,1489660063,GB
-1489660064,1489660079,AD
-1489660080,1489660095,AE
-1489660096,1489660111,AL
-1489660112,1489660127,AM
-1489660128,1489660143,AT
-1489660144,1489660159,BA
-1489660160,1489660175,BE
-1489660176,1489660191,BG
-1489660192,1489660207,BH
-1489660208,1489660223,BY
-1489660224,1489660239,CH
-1489660240,1489660255,CZ
-1489660256,1489660271,DK
-1489660272,1489660287,DZ
-1489660288,1489660303,EE
-1489660304,1489660319,EG
-1489660320,1489660335,HR
-1489660336,1489660351,HU
-1489660352,1489660367,KW
-1489660368,1489660383,LI
-1489660384,1489660399,LT
-1489660400,1489660415,LU
-1489660416,1489660431,LV
-1489660432,1489660447,LY
-1489660448,1489660463,MA
-1489660464,1489660479,MC
-1489660480,1489660495,MD
-1489660496,1489660511,ME
-1489660512,1489660527,MK
-1489660528,1489660543,MT
-1489660544,1489660559,NL
-1489660560,1489660575,NO
-1489660576,1489660591,OM
-1489660592,1489660607,PT
-1489660608,1489660623,QA
-1489660624,1489660639,RO
-1489660640,1489660655,RS
-1489660656,1489660671,RU
-1489660672,1489660687,SA
-1489660688,1489660703,SE
-1489660704,1489660719,SI
-1489660720,1489660735,SK
-1489660736,1489660751,SM
-1489660752,1489660767,TN
-1489660768,1489660783,TR
-1489660784,1489660799,UA
-1489660800,1489660815,VA
-1489660816,1489660927,EU
-1489660928,1489660943,IT
-1489660944,1489660959,FR
-1489660960,1489660975,DE
-1489660976,1489660991,CY
-1489660992,1489661007,FI
-1489661008,1489661023,GR
-1489661024,1489661039,IE
-1489661040,1489661055,ES
-1489661056,1489661071,PL
-1489661072,1489661087,GB
-1489661088,1489661103,AD
-1489661104,1489661119,AE
-1489661120,1489661135,AL
-1489661136,1489661151,AM
-1489661152,1489661167,AT
-1489661168,1489661183,BA
-1489661184,1489661199,BE
-1489661200,1489661215,BG
-1489661216,1489661231,BH
-1489661232,1489661247,BY
-1489661248,1489661263,CH
-1489661264,1489661279,CZ
-1489661280,1489661295,DK
-1489661296,1489661311,DZ
-1489661312,1489661327,EE
-1489661328,1489661343,EG
-1489661344,1489661359,HR
-1489661360,1489661375,HU
-1489661376,1489661391,KW
-1489661392,1489661407,LI
-1489661408,1489661423,LT
-1489661424,1489661439,LU
-1489661440,1489661455,LV
-1489661456,1489661471,LY
-1489661472,1489661487,MA
-1489661488,1489661503,MC
-1489661504,1489661519,MD
-1489661520,1489661535,ME
-1489661536,1489661551,MK
-1489661552,1489661567,MT
-1489661568,1489661583,NL
-1489661584,1489661599,NO
-1489661600,1489661615,OM
-1489661616,1489661631,PT
-1489661632,1489661647,QA
-1489661648,1489661663,RO
-1489661664,1489661679,RS
-1489661680,1489661695,RU
-1489661696,1489661711,SA
-1489661712,1489661727,SE
-1489661728,1489661743,SI
-1489661744,1489661759,SK
-1489661760,1489661775,SM
-1489661776,1489661791,TN
-1489661792,1489661807,TR
-1489661808,1489661823,UA
-1489661824,1489661839,VA
-1489661840,1489661951,EU
-1489661952,1489662463,GB
-1489662464,1489662719,EU
-1489662720,1489662975,ZA
-1489662976,1489663999,IT
-1489664000,1489664511,LY
-1489664512,1489665023,EU
-1489665024,1489665279,ZA
-1489665280,1489666047,IT
-1489666048,1489698815,GB
+1489650688,1489660159,IT
+1489660160,1489660415,LY
+1489660416,1489666047,IT
+1489666048,1489674239,GB
+1489674240,1489676287,NL
+1489676288,1489698815,GB
1489698816,1489731583,MT
1489731584,1489764351,BG
1489764352,1489797119,RU
1489797120,1489829887,KZ
-1489829888,1489855495,DE
-1489855496,1489855503,CH
-1489855504,1489855519,RU
-1489855520,1489855535,PL
-1489855536,1489855543,DE
-1489855544,1489855551,PL
-1489855552,1489855583,DE
-1489855584,1489855615,RU
-1489855616,1489855807,DE
-1489855808,1489855871,US
-1489855872,1489855903,DE
-1489855904,1489855935,AU
-1489855936,1489855999,US
-1489856000,1489856031,PL
-1489856032,1489856063,RU
-1489856064,1489856095,DE
-1489856096,1489856103,VG
-1489856104,1489856111,DE
-1489856112,1489856127,US
-1489856128,1489862655,DE
+1489829888,1489862655,DE
1489862656,1489928191,RU
1489928192,1489960959,SE
1489960960,1489993727,HR
@@ -61296,55 +19854,36 @@
1490026496,1490028543,US
1490028544,1490029055,UA
1490029056,1490042879,NL
-1490042880,1490049879,CZ
-1490049880,1490049887,AT
-1490049888,1490049919,CZ
-1490049920,1490049983,PL
-1490049984,1490053375,CZ
+1490042880,1490053375,CZ
1490053376,1490054143,PL
1490054144,1490059263,CZ
1490059264,1490075647,DE
1490075648,1490092031,GB
1490092032,1490108415,DE
-1490108416,1490116607,MC
-1490116608,1490118143,FR
-1490118144,1490120703,MC
-1490120704,1490124287,FR
-1490124288,1490124799,MC
-1490124800,1490157567,HU
+1490108416,1490124799,MC
+1490124800,1490141183,HU
+1490141184,1490142719,CZ
+1490142720,1490143231,HU
+1490143232,1490143999,CZ
+1490144000,1490144255,HU
+1490144256,1490146559,CZ
+1490146560,1490146815,HU
+1490146816,1490148863,CZ
+1490148864,1490149119,HU
+1490149120,1490151679,CZ
+1490151680,1490151935,HU
+1490151936,1490153983,CZ
+1490153984,1490154239,HU
+1490154240,1490154495,CZ
+1490154496,1490154751,HU
+1490154752,1490157567,CZ
1490157568,1490173951,RU
1490173952,1490190335,PT
-1490190336,1490192895,GB
-1490192896,1490193151,IE
-1490193152,1490194431,GB
-1490194432,1490194687,DE
-1490194688,1490195455,GB
-1490195456,1490195519,DE
-1490195520,1490195583,PL
-1490195584,1490195711,DE
-1490195712,1490195775,IT
-1490195776,1490195903,PL
-1490195904,1490195967,CZ
-1490195968,1490196095,IT
-1490196096,1490196223,HU
-1490196224,1490196287,IT
-1490196288,1490196351,AL
-1490196352,1490196415,RS
-1490196416,1490196479,GR
-1490196480,1490196991,GB
-1490196992,1490197503,IE
-1490197504,1490198015,GB
-1490198016,1490198271,PT
-1490198272,1490198527,ES
-1490198528,1490200063,GB
-1490200064,1490200319,ES
-1490200320,1490200575,GB
-1490200576,1490200831,ES
-1490200832,1490201087,GB
-1490201088,1490201471,DE
-1490201472,1490201535,HU
-1490201536,1490201855,DE
-1490201856,1490206719,GB
+1490190336,1490196991,GB
+1490196992,1490197247,IE
+1490197248,1490205183,GB
+1490205184,1490205439,LY
+1490205440,1490206719,GB
1490206720,1490223103,GE
1490223104,1490255871,GB
1490255872,1490272255,NL
@@ -61356,22 +19895,12 @@
1490354176,1490386943,SA
1490386944,1490403327,IT
1490403328,1490419711,BG
-1490419712,1490436095,A2
+1490419712,1490436095,DE
1490436096,1490452479,UA
1490452480,1490468863,PT
-1490468864,1490472447,GB
-1490472448,1490472703,US
-1490472704,1490473983,GB
-1490473984,1490474239,US
-1490474240,1490478591,GB
-1490478592,1490479103,RU
-1490479104,1490480127,GB
+1490468864,1490480127,GB
1490480128,1490480639,RU
-1490480640,1490484223,GB
-1490484224,1490484479,US
-1490484480,1490484735,GB
-1490484736,1490485247,US
-1490485248,1490501631,GB
+1490480640,1490501631,GB
1490501632,1490518015,DE
1490518016,1490534399,RU
1490534400,1490550783,DE
@@ -61383,54 +19912,54 @@
1490878464,1490879487,DE
1490879488,1490880511,US
1490880512,1490881535,FR
-1490881536,1490885631,EU
1490885632,1490886655,US
-1490886656,1490904063,EU
1490904064,1490905087,US
-1490905088,1490909183,EU
1490909184,1490910207,US
-1490910208,1490913279,EU
1490913280,1490915327,US
1490915328,1490917375,IT
1490917376,1490919423,IL
-1490919424,1490927615,EU
1490927616,1490929663,FR
-1490929664,1490931711,EU
1490931712,1490931967,DE
1490931968,1490932223,PL
1490932224,1490933759,DE
-1490933760,1490934527,EU
1490934528,1490934783,IL
-1490934784,1490943999,EU
1490944000,1491075071,LT
1491075072,1493172223,TR
1493172224,1493303295,DE
-1493303296,1493434367,FR
+1493303296,1493430527,FR
+1493430528,1493430783,GP
+1493430784,1493431039,FR
+1493431040,1493431551,GP
+1493431552,1493431807,FR
+1493431808,1493432319,GP
+1493432320,1493434111,MQ
+1493434112,1493434367,FR
1493434368,1493565439,SA
1493565440,1493696511,ES
1493696512,1493958655,NO
1493958656,1494220799,DE
-1494220800,1494221055,FR
-1494221056,1494221311,RE
-1494221312,1494222335,FR
-1494222336,1494223103,RE
-1494223104,1494224127,FR
-1494224128,1494224383,RE
-1494224384,1494224895,FR
-1494224896,1494226431,GP
-1494226432,1494226943,FR
-1494226944,1494227455,GP
-1494227456,1494227967,FR
-1494227968,1494228991,GP
+1494220800,1494221823,FR
+1494221824,1494222335,RE
+1494222336,1494222591,FR
+1494222592,1494222847,RE
+1494222848,1494223615,FR
+1494223616,1494223871,RE
+1494223872,1494225407,FR
+1494225408,1494225663,GP
+1494225664,1494226687,FR
+1494226688,1494226943,GP
+1494226944,1494227455,FR
+1494227456,1494227967,GP
+1494227968,1494228479,FR
+1494228480,1494228735,GP
+1494228736,1494228991,FR
1494228992,1494237183,RU
1494237184,1494245375,IE
1494245376,1494253567,RU
1494253568,1494261759,DE
1494261760,1494269951,GB
1494269952,1494278143,AT
-1494278144,1494282751,GB
-1494282752,1494283007,FR
-1494283008,1494286335,GB
+1494278144,1494286335,GB
1494286336,1494294527,HR
1494294528,1494302719,RU
1494302720,1494310911,FI
@@ -61444,10 +19973,7 @@
1494368256,1494376447,IE
1494376448,1494384639,SE
1494384640,1494392831,RU
-1494392832,1494393087,US
-1494393088,1494398975,NL
-1494398976,1494399743,US
-1494399744,1494401023,NL
+1494392832,1494401023,NL
1494401024,1494409215,LV
1494409216,1494417407,FI
1494417408,1494425599,TR
@@ -61455,13 +19981,9 @@
1494441984,1494450175,UA
1494450176,1494458367,DK
1494458368,1494474751,RU
-1494474752,1494477471,DE
-1494477472,1494477503,IL
-1494477504,1494482943,DE
+1494474752,1494482943,DE
1494482944,1494499327,RU
-1494499328,1494507375,NL
-1494507376,1494507391,DE
-1494507392,1494507519,NL
+1494499328,1494507519,NL
1494507520,1494523903,RU
1494523904,1494532095,NL
1494532096,1494540287,GB
@@ -61469,20 +19991,9 @@
1494548480,1494556671,GB
1494556672,1494564863,DE
1494564864,1494573055,UA
-1494573056,1494580479,RO
-1494580480,1494580735,HU
-1494580736,1494581247,RO
+1494573056,1494581247,RO
1494581248,1494589439,RU
-1494589440,1494592511,NL
-1494592512,1494593535,US
-1494593536,1494594559,NL
-1494594560,1494595071,US
-1494595072,1494595327,A2
-1494595328,1494595583,NL
-1494595584,1494596607,US
-1494596608,1494597119,NL
-1494597120,1494597375,US
-1494597376,1494597631,NL
+1494589440,1494597631,US
1494597632,1494605823,IT
1494605824,1494614015,GB
1494614016,1494616063,RU
@@ -61510,11 +20021,7 @@
1494745088,1494810623,CZ
1494810624,1494843391,BG
1494843392,1494876159,PL
-1494876160,1494880519,AT
-1494880520,1494880527,DE
-1494880528,1494880647,AT
-1494880648,1494880655,DE
-1494880656,1494908927,AT
+1494876160,1494908927,AT
1494908928,1494941695,PT
1494941696,1494974463,FI
1494974464,1495007231,DE
@@ -61532,66 +20039,22 @@
1495060480,1495062527,GB
1495062528,1495064575,JO
1495064576,1495066623,PL
-1495066624,1495067183,GB
-1495067184,1495067191,IE
-1495067192,1495068671,GB
+1495066624,1495068671,GB
1495068672,1495070719,DE
1495070720,1495072767,RU
1495072768,1495105535,CZ
1495105536,1495138303,ES
1495138304,1495139327,FR
-1495139328,1495139583,EU
-1495139584,1495139591,GB
-1495139592,1495139711,EU
-1495139712,1495139839,GB
-1495139840,1495139871,ES
-1495139872,1495139903,FR
-1495139904,1495140351,EU
1495140352,1495142399,FR
-1495142400,1495143679,EU
-1495143680,1495143935,FR
-1495143936,1495146495,EU
-1495146496,1495150591,FR
-1495150592,1495151103,GB
-1495151104,1495151359,NL
-1495151360,1495153663,FR
-1495153664,1495153919,EU
-1495153920,1495154175,TR
-1495154176,1495154687,FR
-1495154688,1495160063,EU
-1495160064,1495160319,NL
-1495160320,1495161599,EU
-1495161600,1495161855,FR
-1495161856,1495162367,EU
-1495162368,1495162879,US
-1495162880,1495162943,FR
-1495162944,1495163007,EU
-1495163008,1495163647,FR
-1495163648,1495164415,EU
-1495164416,1495164671,FR
-1495164672,1495164927,EU
-1495164928,1495165055,FR
-1495165056,1495165183,EU
-1495165184,1495165199,FR
-1495165200,1495165207,EU
-1495165208,1495165215,ES
-1495165216,1495165439,EU
-1495165440,1495168383,FR
-1495168384,1495168415,EU
-1495168416,1495168447,FR
-1495168448,1495168511,EU
-1495168512,1495168767,FR
+1495148544,1495150591,FR
+1495151616,1495153663,FR
+1495160240,1495160255,FR
+1495160256,1495160263,GB
+1495163552,1495163567,FR
1495168768,1495169023,GB
-1495169024,1495169279,FR
-1495169280,1495169535,EU
-1495169536,1495169791,FR
-1495169792,1495170047,NL
-1495170048,1495170335,FR
-1495170336,1495170399,EU
-1495170400,1495171071,FR
-1495171072,1495174399,NL
-1495174400,1495174655,US
-1495174656,1495203839,NL
+1495170760,1495170763,DE
+1495170816,1495171071,FR
+1495171072,1495203839,NL
1495203840,1495205887,DE
1495205888,1495207935,CZ
1495207936,1495209983,RU
@@ -61604,48 +20067,9 @@
1495224320,1495228415,RU
1495228416,1495230463,NL
1495230464,1495234559,RU
-1495234560,1495236607,CH
-1495236608,1495237247,AT
-1495237248,1495237255,EU
-1495237256,1495237271,AT
-1495237272,1495237311,EU
-1495237312,1495237319,AT
-1495237320,1495237375,EU
-1495237376,1495237711,AT
-1495237712,1495237727,NL
-1495237728,1495237731,AT
-1495237732,1495237739,EU
-1495237740,1495237743,AT
-1495237744,1495237751,EU
-1495237752,1495237775,AT
-1495237776,1495237791,EU
-1495237792,1495237807,AT
-1495237808,1495237887,EU
-1495237888,1495238207,AT
-1495238208,1495238223,EU
-1495238224,1495238231,AT
-1495238232,1495238239,EU
-1495238240,1495238255,AT
-1495238256,1495238271,EU
-1495238272,1495238399,AT
-1495238400,1495238415,EU
-1495238416,1495238423,AT
-1495238424,1495238655,EU
+1495236608,1495238655,AT
1495238656,1495240703,DE
-1495240704,1495240751,FR
-1495240752,1495240759,BE
-1495240760,1495240767,CH
-1495240768,1495242367,FR
-1495242368,1495242375,HU
-1495242376,1495242383,BG
-1495242384,1495242391,SK
-1495242392,1495242399,LT
-1495242400,1495242407,LV
-1495242408,1495242415,SI
-1495242416,1495242423,EE
-1495242424,1495242431,FI
-1495242432,1495242439,SE
-1495242440,1495242751,FR
+1495240704,1495242751,FR
1495242752,1495244799,MK
1495244800,1495246847,CZ
1495246848,1495248895,IE
@@ -61655,48 +20079,102 @@
1495255040,1495257087,IT
1495257088,1495259135,GB
1495259136,1495261183,BE
-1495261184,1495261439,EU
-1495261440,1495263231,PT
+1495261184,1495263231,PT
1495263232,1495265279,GB
-1495265280,1495265791,DE
-1495265792,1495266047,RU
-1495266048,1495267327,US
+1495265280,1495267327,US
1495267328,1495269375,SE
-1495269376,1495306239,RO
+1495269376,1495283711,RO
+1495283712,1495285759,MD
+1495285760,1495304191,RO
+1495304192,1495306239,MD
1495306240,1495306573,GB
1495306574,1495306574,RO
1495306575,1495308287,GB
-1495308288,1495326719,RO
-1495326720,1495330815,MD
-1495330816,1495334911,RO
-1495334912,1495335935,MD
-1495335936,1495621887,RO
-1495621888,1495622143,TR
-1495622144,1495622655,A2
-1495622656,1495623679,RO
-1495623680,1495623935,MD
-1495623936,1495801855,RO
-1495801856,1495802879,GB
-1495802880,1495875583,RO
+1495308288,1495313407,RO
+1495313408,1495314431,MD
+1495314432,1495326719,RO
+1495326720,1495335935,MD
+1495335936,1495416831,RO
+1495416832,1495418879,MD
+1495418880,1495429119,RO
+1495429120,1495431167,MD
+1495431168,1495449599,RO
+1495449600,1495451647,MD
+1495451648,1495452671,RO
+1495452672,1495453695,MD
+1495453696,1495459839,RO
+1495459840,1495460863,MD
+1495460864,1495468031,RO
+1495468032,1495470079,MD
+1495470080,1495476223,RO
+1495476224,1495478271,MD
+1495478272,1495517183,RO
+1495517184,1495518207,MD
+1495518208,1495571455,RO
+1495571456,1495572479,MD
+1495572480,1495608319,RO
+1495608320,1495609343,MD
+1495609344,1495670783,RO
+1495670784,1495671807,MD
+1495671808,1495678975,RO
+1495678976,1495679999,MD
+1495680000,1495682047,RO
+1495682048,1495683071,MD
+1495683072,1495747583,RO
+1495747584,1495748607,MD
+1495748608,1495749631,RO
+1495749632,1495750655,MD
+1495750656,1495752703,RO
+1495752704,1495755775,MD
+1495755776,1495756799,RO
+1495756800,1495758847,MD
+1495758848,1495759871,RO
+1495759872,1495760127,MD
+1495760128,1495790079,RO
+1495790080,1495790335,MD
+1495790336,1495852031,RO
+1495852032,1495853055,MD
+1495853056,1495875583,RO
1495875584,1495891967,MD
-1495891968,1495927295,RO
-1495927296,1495927551,AE
-1495927552,1495931647,RO
-1495931648,1495931903,SE
-1495931904,1495937023,RO
-1495937024,1495937535,SE
-1495937536,1496078335,RO
+1495891968,1495941119,RO
+1495941120,1495942143,MD
+1495942144,1495943167,RO
+1495943168,1495945215,MD
+1495945216,1495951359,RO
+1495951360,1495952383,MD
+1495952384,1495957503,RO
+1495957504,1495958527,MD
+1495958528,1495970815,RO
+1495970816,1495971839,MD
+1495971840,1495982079,RO
+1495982080,1495983103,MD
+1495983104,1495986175,RO
+1495986176,1495988223,MD
+1495988224,1496018943,RO
+1496018944,1496020991,MD
+1496020992,1496023039,RO
+1496023040,1496024063,MD
+1496024064,1496033279,RO
+1496033280,1496034303,MD
+1496034304,1496053759,RO
+1496053760,1496055807,MD
+1496055808,1496078335,RO
1496078336,1496079359,MD
-1496079360,1496121343,RO
+1496079360,1496084991,RO
+1496084992,1496085247,MD
+1496085248,1496094719,RO
+1496094720,1496095743,MD
+1496095744,1496121343,RO
1496121344,1496122367,MD
-1496122368,1496178943,RO
-1496178944,1496179199,AE
-1496179200,1496197119,RO
+1496122368,1496131583,RO
+1496131584,1496132607,MD
+1496132608,1496197119,RO
1496197120,1496197631,MD
-1496197632,1496262655,RO
-1496262656,1496262911,AE
-1496262912,1496263167,US
-1496263168,1496295423,RO
+1496197632,1496228863,RO
+1496228864,1496229887,MD
+1496229888,1496276735,RO
+1496276736,1496276991,MD
+1496276992,1496295423,RO
1496295424,1496297471,GB
1496297472,1496299519,MD
1496299520,1496317951,RO
@@ -61719,34 +20197,11 @@
1500078080,1500086271,GB
1500086272,1500094463,RU
1500094464,1500102655,AT
-1500102656,1500104799,NL
-1500104800,1500104815,DE
-1500104816,1500106527,NL
-1500106528,1500106559,DE
-1500106560,1500107415,NL
-1500107416,1500107423,DE
-1500107424,1500107775,NL
-1500107776,1500107903,DE
-1500107904,1500107943,NL
-1500107944,1500107951,DE
-1500107952,1500107999,NL
-1500108000,1500108007,BE
-1500108008,1500108159,NL
-1500108160,1500108287,DE
-1500108288,1500108319,NL
-1500108320,1500108351,DE
-1500108352,1500108799,NL
-1500108800,1500109311,DE
-1500109312,1500110847,NL
+1500102656,1500110847,NL
1500110848,1500119039,UA
1500119040,1500127231,TR
1500127232,1500135423,FI
-1500135424,1500135555,DE
-1500135556,1500135559,CH
-1500135560,1500140560,DE
-1500140561,1500140564,AT
-1500140565,1500140568,CH
-1500140569,1500143615,DE
+1500135424,1500143615,DE
1500143616,1500151807,BG
1500151808,1500153855,GB
1500153856,1500155903,IE
@@ -61755,9 +20210,7 @@
1500160000,1500162047,NL
1500162048,1500164095,RU
1500164096,1500166143,GB
-1500166144,1500166399,FR
-1500166400,1500166655,DE
-1500166656,1500168191,FR
+1500166144,1500168191,FR
1500168192,1500170239,RU
1500170240,1500172287,LU
1500172288,1500174335,AT
@@ -61766,53 +20219,9 @@
1500178432,1500180479,KZ
1500180480,1500182527,BE
1500182528,1500184575,RU
-1500184576,1500184831,GB
-1500184832,1500186623,IM
+1500184576,1500186623,IM
1500186624,1500188671,KW
-1500188672,1500188687,GB
-1500188688,1500188719,FR
-1500188720,1500188799,GB
-1500188800,1500188815,FR
-1500188816,1500188831,GB
-1500188832,1500188863,FR
-1500188864,1500188879,GB
-1500188880,1500188903,FR
-1500188904,1500188911,GB
-1500188912,1500188919,FR
-1500188920,1500188927,GB
-1500188928,1500189055,FR
-1500189056,1500189071,GB
-1500189072,1500189231,FR
-1500189232,1500189247,GB
-1500189248,1500189279,FR
-1500189280,1500189295,GB
-1500189296,1500189343,FR
-1500189344,1500189695,GB
-1500189696,1500189759,FR
-1500189760,1500189887,GB
-1500189888,1500189903,FR
-1500189904,1500189919,GB
-1500189920,1500189935,FR
-1500189936,1500190015,GB
-1500190016,1500190215,FR
-1500190216,1500190223,GB
-1500190224,1500190375,FR
-1500190376,1500190391,GB
-1500190392,1500190399,FR
-1500190400,1500190407,GB
-1500190408,1500190431,FR
-1500190432,1500190467,GB
-1500190468,1500190495,FR
-1500190496,1500190527,GB
-1500190528,1500190543,FR
-1500190544,1500190599,GB
-1500190600,1500190607,FR
-1500190608,1500190623,GB
-1500190624,1500190631,FR
-1500190632,1500190639,GB
-1500190640,1500190687,FR
-1500190688,1500190703,GB
-1500190704,1500190719,FR
+1500188672,1500190719,FR
1500190720,1500194815,RU
1500194816,1500196863,GB
1500196864,1500198911,ES
@@ -61824,11 +20233,7 @@
1500209152,1500211199,KZ
1500211200,1500213247,IT
1500213248,1500217343,RU
-1500217344,1500217855,CZ
-1500217856,1500218111,DE
-1500218112,1500218367,CZ
-1500218368,1500218879,DE
-1500218880,1500219391,EE
+1500217344,1500219391,DE
1500219392,1500221439,RU
1500221440,1500223487,SK
1500223488,1500225535,PL
@@ -61851,11 +20256,7 @@
1500348416,1500413951,RU
1500413952,1500430335,DE
1500430336,1500446719,RS
-1500446720,1500447743,LV
-1500447744,1500447999,LT
-1500448000,1500448511,LV
-1500448512,1500448767,LT
-1500448768,1500463103,LV
+1500446720,1500463103,LV
1500463104,1500479487,CZ
1500479488,1500495871,RU
1500495872,1500512255,BA
@@ -61873,42 +20274,23 @@
1502478336,1502605311,SI
1502605312,1502606335,HR
1502606336,1502609407,SI
-1502609408,1502624030,DE
-1502624031,1502624047,IR
-1502624048,1502625791,DE
+1502609408,1502625791,DE
1502625792,1502642175,SA
1502642176,1502658559,IR
1502658560,1502674943,AT
1502674944,1502691327,DE
-1502691328,1502691679,GB
-1502691680,1502691711,SE
-1502691712,1502692863,GB
-1502692864,1502693119,SE
-1502693120,1502702835,GB
-1502702836,1502702839,IE
-1502702840,1502703103,GB
-1502703104,1502703615,SE
-1502703616,1502707711,GB
+1502691328,1502707711,GB
1502707712,1502715903,RU
1502715904,1502717951,IT
1502717952,1502719999,GB
-1502720000,1502722047,CH
+1502720000,1502721023,FR
+1502721024,1502722047,CH
1502722048,1502724095,TR
1502724096,1502740479,GB
1502740480,1502756863,NL
1502756864,1502773247,UZ
1502773248,1502789631,BA
-1502789632,1502791551,DE
-1502791552,1502791679,PL
-1502791680,1502793503,DE
-1502793504,1502793511,NL
-1502793512,1502794239,DE
-1502794240,1502794495,NL
-1502794496,1502795767,DE
-1502795768,1502795771,NL
-1502795772,1502797055,DE
-1502797056,1502797311,PL
-1502797312,1502806015,DE
+1502789632,1502806015,DE
1502806016,1502822399,SA
1502822400,1502838783,HU
1502838784,1502855167,SE
@@ -61920,69 +20302,28 @@
1502937088,1502953471,RO
1502953472,1502969855,MD
1502969856,1502975231,FR
-1502975232,1502975247,GB
-1502975248,1502975263,IE
-1502975264,1502975295,GB
-1502975296,1502975311,FR
-1502975312,1502975319,IE
-1502975320,1502975327,FR
-1502975328,1502975359,GB
-1502975360,1502975367,IE
-1502975368,1502975375,GB
-1502975376,1502975455,FR
-1502975456,1502975487,IE
-1502975488,1502975743,ES
+1502975232,1502975487,GB
+1502975488,1502975743,FR
1502975744,1502975999,DE
-1502976000,1502977151,FR
-1502977152,1502979071,US
-1502979072,1502979103,FR
-1502979104,1502979111,ES
-1502979112,1502979119,US
-1502979120,1502979135,ES
-1502979136,1502979199,FR
-1502979200,1502979215,ES
+1502976000,1502978047,FR
+1502978048,1502979071,US
+1502979072,1502979135,FR
+1502979136,1502979199,GB
+1502979200,1502979215,FR
1502979216,1502979231,CZ
-1502979232,1502979327,FR
-1502979328,1502979583,US
-1502979584,1502980351,FR
+1502979232,1502980351,FR
1502980352,1502980607,US
-1502980608,1502980863,FR
-1502980864,1502980871,US
-1502980872,1502980879,IL
-1502980880,1502981887,FR
+1502980608,1502981887,FR
1502981888,1502982143,NL
-1502982144,1502982911,DE
-1502982912,1502983167,FR
-1502983168,1502986255,DE
-1502986256,1502986495,TR
-1502986496,1502986511,DE
-1502986512,1502986751,PL
-1502986752,1502987535,DE
-1502987536,1502987551,AE
-1502987552,1502987775,DE
-1502987776,1502988031,TR
-1502988032,1502989055,DE
-1502989056,1502989567,TR
-1502989568,1502990847,DE
-1502990848,1502991103,PL
-1502991104,1502991359,DE
-1502991360,1502991615,PL
-1502991616,1502994687,DE
-1502994688,1502994943,PL
-1502994944,1502995967,DE
-1502995968,1502996479,PL
-1502996480,1502996735,DE
-1502996736,1502997247,PL
-1502997248,1502997503,LT
-1502997504,1502997759,HK
-1502997760,1502999734,DE
+1502982144,1502986239,FR
+1502986240,1502999734,DE
1502999735,1502999735,SA
1502999736,1502999737,DE
1502999738,1502999738,SA
1502999739,1503000063,DE
1503000064,1503000319,PL
-1503000320,1503000831,DE
-1503000832,1503001343,PL
+1503000320,1503001087,DE
+1503001088,1503001343,PL
1503001344,1503002623,DE
1503002624,1503006719,GE
1503006720,1503010815,GB
@@ -62011,9 +20352,7 @@
1503895680,1503895687,IT
1503895688,1503895695,DE
1503895696,1503895703,GB
-1503895704,1503895751,DE
-1503895752,1503895759,IT
-1503895760,1503896175,DE
+1503895704,1503896175,DE
1503896176,1503896183,NL
1503896184,1503896359,DE
1503896360,1503896367,CH
@@ -62025,7 +20364,9 @@
1503896440,1503896447,NO
1503896448,1503896543,DE
1503896544,1503896551,FR
-1503896552,1503897335,DE
+1503896552,1503897303,DE
+1503897304,1503897311,AT
+1503897312,1503897335,DE
1503897336,1503897343,PT
1503897344,1503897351,RO
1503897352,1503897367,DE
@@ -62047,12 +20388,9 @@
1503898168,1503898175,RO
1503898176,1503898183,IT
1503898184,1503898191,AT
-1503898192,1503898199,DE
-1503898200,1503898207,RO
+1503898192,1503898207,DE
1503898208,1503898215,IT
-1503898216,1503898239,DE
-1503898240,1503898303,IT
-1503898304,1503898335,DE
+1503898216,1503898335,DE
1503898336,1503898343,IT
1503898344,1503898351,DE
1503898352,1503898359,CH
@@ -62085,8 +20423,8 @@
1503898992,1503898999,GB
1503899000,1503899007,AT
1503899008,1503899015,CH
-1503899016,1503899063,DE
-1503899064,1503899087,AT
+1503899016,1503899071,DE
+1503899072,1503899087,AT
1503899088,1503899119,DE
1503899120,1503899127,NL
1503899128,1503899143,DE
@@ -62095,8 +20433,8 @@
1503899184,1503899191,GR
1503899192,1503899199,CH
1503899200,1503899271,DE
-1503899272,1503899287,BE
-1503899288,1503899295,DE
+1503899272,1503899279,BE
+1503899280,1503899295,DE
1503899296,1503899303,GR
1503899304,1503899311,NL
1503899312,1503899351,DE
@@ -62109,16 +20447,20 @@
1503899408,1503899423,DE
1503899424,1503899431,IT
1503899432,1503899439,GR
-1503899440,1503899495,DE
-1503899496,1503899503,GR
-1503899504,1503899575,DE
+1503899440,1503899463,DE
+1503899464,1503899471,IT
+1503899472,1503899543,DE
+1503899544,1503899551,SK
+1503899552,1503899575,DE
1503899576,1503899583,BE
1503899584,1503899687,DE
1503899688,1503899695,IT
1503899696,1503899703,BE
1503899704,1503899919,DE
1503899920,1503899927,BE
-1503899928,1503899951,DE
+1503899928,1503899935,IT
+1503899936,1503899943,BE
+1503899944,1503899951,DE
1503899952,1503899959,IT
1503899960,1503900143,DE
1503900144,1503900151,RU
@@ -62133,46 +20475,48 @@
1503901144,1503901151,IT
1503901152,1503901167,DE
1503901168,1503901175,IT
-1503901176,1503901567,DE
+1503901176,1503901455,DE
+1503901456,1503901463,IT
+1503901464,1503901471,CH
+1503901472,1503901567,DE
1503901568,1503901695,TW
-1503901696,1503908351,DE
-1503908352,1503909375,IT
-1503909376,1503920127,DE
-1503920128,1503985663,HR
+1503901696,1503902007,DE
+1503902008,1503902015,IT
+1503902016,1503902079,DE
+1503902080,1503902087,BA
+1503902088,1503902135,DE
+1503902136,1503902143,BE
+1503902144,1503902167,DE
+1503902168,1503902175,NL
+1503902176,1503902215,DE
+1503902216,1503902223,US
+1503902224,1503902335,DE
+1503902336,1503902399,BE
+1503902400,1503902407,RO
+1503902408,1503903687,DE
+1503903688,1503903695,IT
+1503903696,1503903711,DE
+1503903712,1503903719,IT
+1503903720,1503904319,DE
+1503904320,1503904327,IT
+1503904328,1503904343,DE
+1503904344,1503904351,BE
+1503904352,1503904367,DE
+1503904368,1503904375,CH
+1503904376,1503920127,DE
+1503920128,1503985151,HR
+1503985152,1503985407,DE
+1503985408,1503985663,HR
1503985664,1504018431,IR
1504018432,1504051199,RO
1504051200,1504083967,FI
1504083968,1504116735,DE
1504116736,1504149503,PL
-1504149504,1504151551,GB
-1504151552,1504151615,IE
-1504151616,1504152127,GB
-1504152128,1504152191,IE
-1504152192,1504152415,GB
-1504152416,1504152431,IE
-1504152432,1504154623,GB
+1504149504,1504149759,GB
+1504149760,1504150015,ES
+1504150016,1504154623,GB
1504154624,1504155647,IE
-1504155648,1504156927,GB
-1504156928,1504157183,IE
-1504157184,1504161279,GB
-1504161280,1504161535,IE
-1504161536,1504164607,GB
-1504164608,1504164863,IE
-1504164864,1504169983,GB
-1504169984,1504170239,IE
-1504170240,1504171007,GB
-1504171008,1504171263,PT
-1504171264,1504171775,GB
-1504171776,1504172031,US
-1504172032,1504173055,GB
-1504173056,1504173311,IE
-1504173312,1504174591,GB
-1504174592,1504175103,IE
-1504175104,1504176383,GB
-1504176384,1504176639,IE
-1504176640,1504178431,GB
-1504178432,1504178687,IE
-1504178688,1504247807,GB
+1504155648,1504247807,GB
1504247808,1504313343,RU
1504313344,1504378879,FR
1504378880,1504444415,PL
@@ -62193,106 +20537,17 @@
1505280000,1505288191,IR
1505288192,1505296383,RU
1505296384,1505304575,UA
-1505304576,1505305351,FR
-1505305352,1505305359,GB
-1505305360,1505305367,BE
-1505305368,1505305375,ES
-1505305376,1505305383,NL
-1505305384,1505305391,DE
-1505305392,1505305399,IT
-1505305400,1505305407,PT
-1505305408,1505305415,US
-1505305416,1505305423,CH
-1505305424,1505305908,FR
-1505305909,1505305909,LU
-1505305910,1505306303,FR
-1505306304,1505306319,ES
-1505306320,1505306335,DE
-1505306336,1505306351,GB
-1505306352,1505306367,IT
-1505306368,1505312767,FR
+1505304576,1505312767,FR
1505312768,1505320959,RU
-1505320960,1505321055,AT
-1505321056,1505321071,DE
-1505321072,1505321103,AT
-1505321104,1505321111,DE
-1505321112,1505321127,AT
-1505321128,1505321135,DE
-1505321136,1505321423,AT
-1505321424,1505321439,DE
-1505321440,1505321599,AT
-1505321600,1505321631,DE
-1505321632,1505321695,AT
-1505321696,1505321823,DE
-1505321824,1505321831,AT
-1505321832,1505321983,DE
-1505321984,1505322303,AT
-1505322304,1505322415,DE
-1505322416,1505322895,AT
-1505322896,1505324335,DE
-1505324336,1505324367,AT
-1505324368,1505324791,DE
-1505324792,1505324799,AT
-1505324800,1505326847,DE
-1505326848,1505326863,AT
-1505326864,1505326879,DE
-1505326880,1505326887,AT
-1505326888,1505326895,DE
-1505326896,1505327359,AT
-1505327360,1505327607,DE
-1505327608,1505327871,AT
-1505327872,1505328119,DE
-1505328120,1505328135,AT
-1505328136,1505328143,DE
-1505328144,1505328223,AT
-1505328224,1505328255,DE
-1505328256,1505328287,AT
-1505328288,1505328319,DE
-1505328320,1505328391,AT
-1505328392,1505328399,DE
-1505328400,1505328511,AT
-1505328512,1505328639,DE
-1505328640,1505329151,AT
-1505329152,1505329231,IE
-1505329232,1505329247,GB
-1505329248,1505329375,IE
-1505329376,1505329439,GB
-1505329440,1505329455,IE
-1505329456,1505329471,GB
-1505329472,1505331199,IE
-1505331200,1505332223,GB
-1505332224,1505332991,IE
-1505332992,1505332999,GB
-1505333000,1505333471,IE
-1505333472,1505333487,GB
-1505333488,1505333623,IE
-1505333624,1505333631,GB
-1505333632,1505333887,IE
-1505333888,1505333951,GB
-1505333952,1505335807,IE
+1505320960,1505329151,AT
+1505329152,1505335807,IE
1505335808,1505336063,GB
-1505336064,1505336576,IE
-1505336577,1505336639,GB
-1505336640,1505336655,IE
-1505336656,1505336711,GB
-1505336712,1505336823,IE
-1505336824,1505336863,GB
-1505336864,1505336959,IE
-1505336960,1505336975,GB
-1505336976,1505337023,IE
-1505337024,1505337055,GB
-1505337056,1505337071,IE
-1505337072,1505337215,GB
-1505337216,1505337343,IE
+1505336064,1505336575,IE
+1505336576,1505336831,GB
+1505336832,1505337343,IE
1505337344,1505345535,FR
1505345536,1505353727,MK
-1505353728,1505359663,CZ
-1505359664,1505359671,SK
-1505359672,1505359675,CZ
-1505359676,1505359679,SK
-1505359680,1505359759,CZ
-1505359760,1505359775,SK
-1505359776,1505361919,CZ
+1505353728,1505361919,CZ
1505361920,1505370111,PL
1505370112,1505378303,SM
1505378304,1505386495,IT
@@ -62306,50 +20561,7 @@
1505419264,1505427455,RU
1505427456,1505435647,UA
1505435648,1505443839,MD
-1505443840,1505452103,GB
-1505452104,1505452111,US
-1505452112,1505454367,GB
-1505454368,1505454375,US
-1505454376,1505454383,GB
-1505454384,1505454391,US
-1505454392,1505454399,SG
-1505454400,1505454463,GB
-1505454464,1505454495,AU
-1505454496,1505454511,GB
-1505454512,1505454527,DE
-1505454528,1505454543,NZ
-1505454544,1505454911,GB
-1505454912,1505454943,CZ
-1505454944,1505454959,GB
-1505454960,1505454975,IE
-1505454976,1505455103,US
-1505455104,1505455503,GB
-1505455504,1505455519,NL
-1505455520,1505455999,GB
-1505456000,1505456079,US
-1505456080,1505456127,GB
-1505456128,1505456255,US
-1505456256,1505456343,GB
-1505456344,1505456347,US
-1505456348,1505456351,GB
-1505456352,1505456367,US
-1505456368,1505456639,GB
-1505456640,1505456895,US
-1505456896,1505456987,GB
-1505456988,1505456991,US
-1505456992,1505457011,GB
-1505457012,1505457015,US
-1505457016,1505458175,GB
-1505458176,1505458431,US
-1505458432,1505458455,GB
-1505458456,1505458495,US
-1505458496,1505458519,GB
-1505458520,1505458527,US
-1505458528,1505458543,GB
-1505458544,1505458559,US
-1505458560,1505460079,GB
-1505460080,1505460087,HU
-1505460088,1505460223,GB
+1505443840,1505460223,GB
1505460224,1505478655,CZ
1505478656,1505482751,DE
1505482752,1505484799,LB
@@ -62373,35 +20585,40 @@
1505646848,1505647103,PL
1505647104,1505648639,CZ
1505648640,1505656831,LT
-1505656832,1505665023,BH
-1505665024,1505668263,IT
-1505668264,1505668267,DE
-1505668268,1505670615,IT
-1505670616,1505670623,US
-1505670624,1505673215,IT
+1505665024,1505673215,IT
1505673216,1505681407,BG
1505681408,1505689599,RU
-1505689600,1505691391,NO
-1505691392,1505691418,DK
-1505691419,1505691423,NO
-1505691424,1505691551,DK
-1505691552,1505691559,NO
-1505691560,1505691647,DK
-1505691648,1505697791,NO
+1505689600,1505697791,NO
1505697792,1505705983,IE
-1505705984,1505707327,DE
-1505707328,1505707519,AT
-1505707520,1505708543,DE
-1505708544,1505709055,AT
-1505709056,1505714175,DE
+1505705984,1505714175,DE
1505714176,1505722367,LV
1505722368,1505738751,PL
-1505738752,1505745839,GB
-1505745840,1505745855,IL
-1505745856,1505746943,GB
+1505738752,1505740543,GB
+1505740544,1505740607,IL
+1505740608,1505740631,GB
+1505740632,1505740799,IL
+1505740800,1505746943,GB
1505746944,1505755135,RU
1505755136,1506017279,GB
-1506017280,1506279423,DE
+1506017280,1506082815,IR
+1506082816,1506148351,GB
+1506148352,1506218751,IR
+1506218752,1506219007,DE
+1506219008,1506219263,IR
+1506219264,1506219519,DE
+1506219520,1506219775,IR
+1506219776,1506220031,DE
+1506220032,1506261759,IR
+1506261760,1506262783,DE
+1506262784,1506265343,IR
+1506265344,1506267135,DE
+1506267136,1506270207,IR
+1506270208,1506271231,DE
+1506271232,1506274303,IR
+1506274304,1506274559,DE
+1506274560,1506274815,IR
+1506274816,1506275071,DE
+1506275072,1506279423,IR
1506279424,1506312191,NL
1506312192,1506316287,GB
1506316288,1506322431,PL
@@ -62417,314 +20634,52 @@
1506342912,1506344959,UA
1506344960,1506377727,LV
1506377728,1506410495,HR
-1506410496,1506418687,DE
-1506418688,1506418695,CY
-1506418696,1506418703,GB
-1506418704,1506418719,CA
-1506418720,1506418975,DE
-1506418976,1506418983,CA
-1506418984,1506422079,DE
-1506422080,1506422111,CY
-1506422112,1506422142,CA
-1506422143,1506422319,DE
-1506422320,1506422335,GB
-1506422336,1506422399,US
-1506422400,1506422415,CA
-1506422416,1506422431,EE
-1506422432,1506427183,DE
-1506427184,1506427199,CA
-1506427200,1506436607,DE
-1506436608,1506436767,US
-1506436768,1506436863,DE
-1506436864,1506436879,FR
-1506436880,1506436883,GB
-1506436884,1506436959,DE
-1506436960,1506436975,GB
-1506436976,1506437023,DE
-1506437024,1506437039,FR
-1506437040,1506437055,DE
-1506437056,1506437071,FR
-1506437072,1506437087,US
-1506437088,1506437119,DE
-1506437120,1506437503,US
-1506437504,1506437551,DE
-1506437552,1506437567,BG
-1506437568,1506437583,DE
-1506437584,1506437615,NL
-1506437616,1506437623,US
-1506437624,1506437631,DE
-1506437632,1506437887,MU
-1506437888,1506437903,CA
-1506437904,1506437919,US
-1506437920,1506437951,IN
-1506437952,1506437983,DE
-1506437984,1506437991,US
-1506437992,1506437999,DE
-1506438000,1506438015,CA
-1506438016,1506438143,DE
-1506438144,1506438271,HK
-1506438272,1506438367,GB
-1506438368,1506438383,IL
-1506438384,1506438399,GB
-1506438400,1506438527,US
-1506438528,1506438783,DE
-1506438784,1506438799,KR
-1506438800,1506438847,DE
-1506438848,1506438863,US
-1506438864,1506438871,DE
-1506438872,1506438879,FR
-1506438880,1506438883,US
-1506438884,1506438887,HK
-1506438888,1506438895,NL
-1506438896,1506438911,CH
-1506438912,1506439039,US
-1506439040,1506439219,DE
-1506439220,1506439223,BG
-1506439224,1506439463,DE
-1506439464,1506439471,GB
-1506439472,1506439479,BG
-1506439480,1506439571,DE
-1506439572,1506439575,US
-1506439576,1506439579,DE
-1506439580,1506439583,NL
-1506439584,1506439607,DE
-1506439608,1506439615,SE
-1506439616,1506439619,CH
-1506439620,1506439623,GB
-1506439624,1506439631,DE
-1506439632,1506439647,AE
-1506439648,1506439667,GB
-1506439668,1506439671,CH
-1506439672,1506439935,DE
-1506439936,1506440191,US
-1506440192,1506440447,DE
-1506440448,1506440575,US
-1506440576,1506440591,CY
-1506440592,1506440607,NL
-1506440608,1506440639,DE
-1506440640,1506440671,US
-1506440672,1506440702,SE
-1506440703,1506440703,DE
-1506440704,1506440711,US
-1506440712,1506440719,FR
-1506440720,1506440735,US
-1506440736,1506440767,GB
-1506440768,1506440799,US
-1506440800,1506440831,DE
-1506440832,1506440959,US
-1506440960,1506440991,FR
-1506440992,1506440999,US
-1506441000,1506441007,GB
-1506441008,1506441023,US
-1506441024,1506441087,HK
-1506441088,1506441215,CA
-1506441216,1506441343,US
-1506441344,1506441407,HK
-1506441408,1506441415,DE
-1506441416,1506441423,FR
-1506441424,1506441503,DE
-1506441504,1506441535,US
-1506441536,1506441615,DE
-1506441616,1506441631,US
-1506441632,1506441647,DE
-1506441648,1506441663,GB
-1506441664,1506441671,NL
-1506441672,1506441679,CA
-1506441680,1506441695,DE
-1506441696,1506441727,CA
-1506441728,1506442239,MU
-1506442240,1506442383,US
-1506442384,1506442399,GB
-1506442400,1506442415,FR
-1506442416,1506442427,US
-1506442428,1506442431,DE
-1506442432,1506442463,HK
-1506442464,1506442623,DE
-1506442624,1506442655,GB
-1506442656,1506442687,US
-1506442688,1506442703,GB
-1506442704,1506442711,US
-1506442712,1506442715,NL
-1506442716,1506442719,US
-1506442720,1506442735,GB
-1506442736,1506442743,DE
-1506442744,1506442751,US
-1506442752,1506442879,DE
-1506442880,1506442911,GB
-1506442912,1506442919,DE
-1506442920,1506442923,GB
-1506442924,1506442927,NL
-1506442928,1506442975,US
-1506442976,1506442991,DE
-1506442992,1506442999,GB
-1506443000,1506443003,IE
-1506443004,1506443151,DE
-1506443152,1506443167,GB
-1506443168,1506443183,NL
-1506443184,1506443199,DE
-1506443200,1506443263,US
-1506443264,1506444287,GB
-1506444288,1506445055,DE
-1506445056,1506445311,GB
-1506445312,1506445337,FR
-1506445338,1506445343,GB
-1506445344,1506445519,FR
-1506445520,1506445527,GB
-1506445528,1506446335,FR
-1506446336,1506446719,NL
-1506446720,1506446735,GB
-1506446736,1506447359,NL
-1506447360,1506448255,IT
-1506448256,1506448319,GB
-1506448320,1506448383,IT
-1506448384,1506448639,AT
-1506448640,1506448647,GB
-1506448648,1506448663,AT
-1506448664,1506448671,GB
-1506448672,1506448703,AT
-1506448704,1506448895,GB
-1506448896,1506449407,BE
-1506449408,1506449663,NL
-1506449664,1506449919,SK
-1506449920,1506449927,CH
-1506449928,1506449935,GB
-1506449936,1506450031,CH
-1506450032,1506450039,GB
-1506450040,1506450431,CH
-1506450432,1506450687,CZ
-1506450688,1506450695,GB
-1506450696,1506450703,CZ
-1506450704,1506450711,GB
-1506450712,1506450751,CZ
-1506450752,1506450759,GB
-1506450760,1506450767,CZ
-1506450768,1506450847,GB
-1506450848,1506450863,CZ
-1506450864,1506450879,GB
-1506450880,1506450943,CZ
-1506450944,1506451199,DK
-1506451200,1506451791,ES
-1506451792,1506451799,GB
-1506451800,1506451967,ES
-1506451968,1506451999,GB
-1506452000,1506452063,ES
-1506452064,1506452095,GB
-1506452096,1506452143,ES
-1506452144,1506452159,GB
-1506452160,1506452223,ES
-1506452224,1506452479,DE
-1506452480,1506452735,US
-1506452736,1506452751,RO
-1506452752,1506452759,GB
-1506452760,1506452767,RO
-1506452768,1506452863,GB
-1506452864,1506452871,RO
-1506452872,1506452991,GB
-1506452992,1506453247,AT
-1506453248,1506453391,SE
-1506453392,1506453399,GB
-1506453400,1506453407,SE
-1506453408,1506453423,GB
-1506453424,1506453439,SE
-1506453440,1506453447,GB
-1506453448,1506453471,SE
-1506453472,1506453487,GB
-1506453488,1506453503,SE
-1506453504,1506453759,DE
-1506453760,1506453823,FR
-1506453824,1506453839,GB
-1506453840,1506454015,FR
-1506454016,1506454271,AT
-1506454272,1506454527,ES
-1506454528,1506454783,IT
-1506454784,1506455039,US
-1506455040,1506455295,GB
-1506455296,1506455551,IT
-1506455552,1506456063,AE
-1506456064,1506456319,HU
-1506456320,1506456575,IT
-1506456576,1506456831,IE
+1506410496,1506422063,DE
+1506422064,1506422079,GB
+1506422080,1506443263,DE
+1506443264,1506445103,GB
+1506445104,1506445119,DE
+1506445120,1506445135,GB
+1506445136,1506445151,DE
+1506445152,1506445167,GB
+1506445168,1506445183,DE
+1506445184,1506446823,GB
+1506446824,1506446831,NL
+1506446832,1506450047,GB
+1506450048,1506450111,CH
+1506450112,1506450863,GB
+1506450864,1506450879,CZ
+1506450880,1506453311,GB
+1506453312,1506453319,SE
+1506453320,1506456831,GB
1506456832,1506457087,IT
-1506457088,1506458239,GB
-1506458240,1506458271,CH
-1506458272,1506458279,GB
-1506458280,1506458287,CH
-1506458288,1506458303,GB
-1506458304,1506458623,CH
-1506458624,1506459135,GB
-1506459136,1506459177,BE
-1506459178,1506459178,EU
-1506459179,1506459647,BE
-1506459648,1506460671,FR
-1506460672,1506460927,AT
-1506460928,1506461311,IT
-1506461312,1506461315,GB
-1506461316,1506461319,IT
-1506461320,1506461327,GB
-1506461328,1506461343,IT
-1506461344,1506461351,GB
-1506461352,1506461359,FR
-1506461360,1506461695,IT
-1506461696,1506461839,FR
-1506461840,1506461855,GB
-1506461856,1506461887,FR
-1506461888,1506461951,GB
-1506461952,1506462207,FR
-1506462208,1506462463,ES
-1506462464,1506462527,FR
-1506462528,1506462583,GB
-1506462584,1506462599,FR
-1506462600,1506462607,GB
-1506462608,1506462623,A2
-1506462624,1506462719,FR
-1506462720,1506463231,IT
-1506463232,1506463487,SE
-1506463488,1506463999,DE
-1506464000,1506464767,GB
-1506464768,1506464911,NL
-1506464912,1506464919,GB
-1506464920,1506465023,NL
-1506465024,1506465187,EU
+1506457088,1506458244,GB
+1506458245,1506458245,CH
+1506458246,1506460151,GB
+1506460152,1506460159,FR
+1506460160,1506463679,GB
+1506463680,1506463695,DE
+1506463696,1506464895,GB
+1506464896,1506464911,NL
+1506464912,1506465187,GB
1506465188,1506465188,NL
-1506465189,1506465279,EU
-1506465280,1506465791,GB
-1506465792,1506466047,DE
-1506466048,1506466303,BE
-1506466304,1506466375,DE
-1506466376,1506466383,GB
-1506466384,1506466559,DE
-1506466560,1506467071,GB
-1506467072,1506467327,DE
-1506467328,1506467599,GB
-1506467600,1506467695,IT
-1506467696,1506467839,GB
-1506467840,1506468351,IT
-1506468352,1506468607,GB
-1506468608,1506468863,TZ
-1506468864,1506469471,IT
-1506469472,1506469479,GB
-1506469480,1506470143,IT
-1506470144,1506470399,GB
-1506470400,1506470655,DE
-1506470656,1506471679,IT
-1506471680,1506471951,GB
-1506471952,1506471975,NL
-1506471976,1506471979,GB
-1506471980,1506471999,NL
-1506472000,1506472031,BE
-1506472032,1506472175,NL
-1506472176,1506472191,GB
-1506472192,1506472447,IT
-1506472448,1506472703,GB
-1506472704,1506473215,IT
-1506473216,1506473471,GB
-1506473472,1506474495,IT
-1506474496,1506474751,FR
-1506474752,1506475519,IT
-1506475520,1506475551,GB
-1506475552,1506475567,AT
-1506475568,1506475775,GB
-1506475776,1506476031,DE
+1506465189,1506466383,GB
+1506466384,1506466391,DE
+1506466392,1506466399,GB
+1506466400,1506466431,DE
+1506466432,1506469663,GB
+1506469664,1506469695,IT
+1506469696,1506469759,GB
+1506469760,1506469775,IT
+1506469776,1506471983,GB
+1506471984,1506471999,NL
+1506472000,1506472031,GB
+1506472032,1506472047,NL
+1506472048,1506473471,GB
+1506473472,1506473727,IT
+1506473728,1506474239,GB
+1506474240,1506474495,IT
+1506474496,1506476031,GB
1506476032,1506508799,KW
1506508800,1506541567,CZ
1506541568,1506574335,RU
@@ -62734,16 +20689,12 @@
1506639872,1506672639,NL
1506672640,1506689023,PL
1506689024,1506705407,CH
-1506705408,1506740223,GB
+1506705408,1506727935,GB
+1506727936,1506728959,FR
+1506728960,1506740223,GB
1506740224,1506742271,FI
-1506742272,1506743167,SE
-1506743168,1506743183,DE
-1506743184,1506743199,FR
-1506743200,1506743215,IE
-1506743216,1506744319,SE
-1506744320,1506744383,NL
-1506744384,1506744391,GB
-1506744392,1506746367,NL
+1506742272,1506744319,SE
+1506744320,1506746367,NL
1506746368,1506750463,RU
1506750464,1506752511,GB
1506752512,1506754559,IE
@@ -62751,62 +20702,40 @@
1506758656,1506760703,IT
1506760704,1506764799,RU
1506764800,1506766847,IT
-1506766848,1506768383,NO
-1506768384,1506768895,GE
+1506766848,1506768895,NO
1506768896,1506770943,AT
1506770944,1506772991,NL
1506772992,1506775039,GB
1506775040,1506777087,AT
-1506777088,1506781695,GB
-1506781696,1506781951,IE
-1506781952,1506783231,GB
+1506777088,1506783231,GB
1506785280,1506787327,BE
1506787328,1506789375,ME
1506789376,1506791423,DE
1506791424,1506793471,GB
1506793472,1506795519,RU
-1506795520,1506797567,IE
-1506797568,1506799615,ES
+1506795520,1506799615,CH
1506799616,1506801663,LV
-1506801664,1506802831,DE
-1506802832,1506802839,CH
-1506802840,1506803135,DE
+1506801664,1506803135,DE
1506803136,1506803151,CH
1506803152,1506803711,DE
1506803712,1506869247,RU
1506869248,1506934783,UA
1506934784,1507000319,GR
-1507000320,1507016191,QA
-1507016192,1507016447,US
-1507016448,1507065855,QA
+1507000320,1507065855,QA
1507065856,1507131391,SI
1507131392,1507196927,GB
1507196928,1507262463,PT
1507262464,1507327999,BG
1507328000,1507393535,RS
1507393536,1507459071,CH
-1507459072,1507524607,KZ
+1507459072,1507502847,KZ
+1507502848,1507503103,GB
+1507503104,1507524607,KZ
1507524608,1507590143,EE
1507590144,1507655679,NL
1507655680,1507659775,DE
1507659776,1507663871,RU
-1507663872,1507664127,IT
-1507664128,1507664383,GR
-1507664384,1507664767,DE
-1507664768,1507664895,US
-1507664896,1507665663,IT
-1507665664,1507665791,BG
-1507665792,1507665919,GR
-1507665920,1507666431,US
-1507666432,1507666559,GR
-1507666560,1507666591,FR
-1507666592,1507666639,GR
-1507666640,1507666655,IL
-1507666656,1507666687,SG
-1507666688,1507666943,GB
-1507666944,1507667455,IT
-1507667456,1507667711,DE
-1507667712,1507667967,US
+1507663872,1507667967,IT
1507667968,1507672063,RU
1507672064,1507676159,EE
1507676160,1507680255,IR
@@ -62820,9 +20749,7 @@
1507713024,1507717119,RU
1507717120,1507717631,SE
1507717632,1507718911,NO
-1507718912,1507720191,SE
-1507720192,1507720447,NO
-1507720448,1507721215,SE
+1507718912,1507721215,SE
1507721216,1507753983,GB
1507753984,1507819519,RU
1507819520,1507852287,HU
@@ -62833,21 +20760,11 @@
1508442112,1508458495,DK
1508458496,1508466687,DE
1508466688,1508468735,NO
-1508468736,1508468991,NL
-1508468992,1508469055,US
-1508469056,1508470783,NL
+1508468736,1508470783,NL
1508470784,1508474879,SI
-1508474880,1508479263,CZ
-1508479264,1508479295,GB
-1508479296,1508486463,CZ
-1508486464,1508486527,DE
-1508486528,1508491263,CZ
+1508474880,1508491263,CZ
1508491264,1508507647,SE
-1508507648,1508514063,GB
-1508514064,1508514071,A2
-1508514072,1508521535,GB
-1508521536,1508521551,IE
-1508521552,1508524031,GB
+1508507648,1508524031,GB
1508524032,1508540415,IE
1508540416,1508556799,FR
1508556800,1508573183,PL
@@ -62855,22 +20772,13 @@
1508589568,1508605951,IR
1508605952,1508622335,RU
1508622336,1508638719,EE
-1508638720,1508639231,SE
-1508639232,1508641535,DK
-1508641536,1508642047,SE
-1508642048,1508642815,DK
-1508642816,1508646911,SE
-1508646912,1508647423,DK
-1508647424,1508647679,SE
-1508647680,1508647935,DK
-1508647936,1508648447,SE
-1508648448,1508648703,DK
-1508648704,1508650751,SE
-1508650752,1508651263,DK
-1508651264,1508652543,SE
-1508652544,1508654079,DK
-1508654080,1508654591,SE
-1508654592,1508655103,DK
+1508638720,1508639999,SE
+1508640000,1508640255,DK
+1508640256,1508642559,SE
+1508642560,1508642815,DK
+1508642816,1508650751,SE
+1508650752,1508651007,DK
+1508651008,1508655103,SE
1508655104,1508671487,FI
1508671488,1508687871,CH
1508687872,1508704255,UZ
@@ -62879,21 +20787,13 @@
1508737024,1508753407,SA
1508753408,1508769791,KG
1508769792,1508786175,PL
-1508786176,1508787199,DE
-1508787200,1508787455,ES
-1508787456,1508788031,DE
-1508788032,1508788063,BE
-1508788064,1508789831,DE
-1508789832,1508789839,AT
-1508789840,1508802559,DE
-1508802560,1508804783,GB
-1508804784,1508804791,DE
-1508804792,1508818943,GB
+1508786176,1508802559,DE
+1508802560,1508818943,GB
1508818944,1508819711,RO
1508819712,1508819967,DE
1508819968,1508830719,RO
-1508830720,1508832255,SK
-1508832256,1508835327,RO
+1508830720,1508831487,SK
+1508831488,1508835327,RO
1508835328,1508851711,CZ
1508851712,1508868095,PL
1508868096,1508884479,RU
@@ -62909,40 +20809,17 @@
1509449728,1509453823,ES
1509453824,1509457919,RU
1509457920,1509462015,NL
-1509462016,1509465855,LI
-1509465856,1509466111,CH
-1509466112,1509466879,NL
-1509466880,1509466911,FR
-1509466912,1509467055,NL
-1509467056,1509467103,SE
-1509467104,1509467399,NL
-1509467400,1509467407,PL
-1509467408,1509467423,NL
-1509467424,1509467455,PL
-1509467456,1509467487,NL
-1509467488,1509467519,PL
-1509467520,1509467583,BE
-1509467584,1509467839,NL
-1509467840,1509467871,PL
-1509467872,1509469055,NL
-1509469056,1509469183,PL
-1509469184,1509469887,NL
-1509469888,1509469919,MY
-1509469920,1509470207,NL
+1509462016,1509465599,LI
+1509465600,1509465855,CH
+1509465856,1509466111,LI
+1509466112,1509470207,NL
1509470208,1509478399,RU
1509478400,1509482495,FR
1509482496,1509486591,RU
-1509486592,1509489407,CZ
-1509489408,1509489535,DE
-1509489536,1509490687,CZ
+1509486592,1509490687,CZ
1509490688,1509494783,DK
1509494784,1509498879,RU
-1509498880,1509499391,CH
-1509499392,1509500671,DE
-1509500672,1509500927,CH
-1509500928,1509501151,DE
-1509501152,1509501159,GB
-1509501160,1509502975,CH
+1509498880,1509502975,DE
1509502976,1509507071,RU
1509507072,1509511167,GB
1509511168,1509515263,LT
@@ -62951,56 +20828,39 @@
1509535744,1509537791,IT
1509537792,1509539839,HR
1509539840,1509543935,AM
-1509543936,1509543975,LB
-1509543976,1509543983,DE
-1509543984,1509548031,LB
+1509543936,1509548031,LB
1509548032,1509564415,RU
1509564416,1509568511,GB
1509568512,1509572607,FI
1509572608,1509576703,NL
1509576704,1509580799,KZ
1509580800,1509584895,CZ
-1509584896,1509588479,NO
-1509588480,1509588607,GB
-1509588608,1509588991,NO
+1509584896,1509588991,NO
1509588992,1509593087,DE
1509593088,1509601279,RU
-1509601280,1509604111,NL
-1509604112,1509604129,BE
-1509604130,1509604130,NL
-1509604131,1509604255,BE
-1509604256,1509604287,NL
-1509604288,1509604303,BE
-1509604304,1509604311,NL
-1509604312,1509604351,BE
-1509604352,1509605375,NL
+1509601280,1509605375,NL
1509605376,1509609471,PL
1509609472,1509617663,RU
1509617664,1509621759,CZ
-1509621760,1509623807,US
-1509623808,1509624319,NL
-1509624320,1509625855,US
+1509621760,1509625855,US
1509625856,1509629951,UA
1509629952,1509634047,HU
1509634048,1509638143,FR
1509638144,1509642239,RU
-1509642240,1509644351,KW
-1509644352,1509644383,GB
-1509644384,1509646335,KW
+1509642240,1509646335,KW
1509646336,1509650431,RU
1509650432,1509654527,GB
1509654528,1509658623,DE
1509658624,1509666815,RU
1509666816,1509670911,IT
1509670912,1509675007,GB
-1509675008,1509677823,NO
-1509677824,1509679103,GB
+1509675008,1509677439,NO
+1509677440,1509679103,GB
1509679104,1509683199,ES
1509683200,1509687295,CH
1509687296,1509703679,UA
1509703680,1509720063,RU
-1509720064,1509724927,US
-1509724928,1509736447,TR
+1509720064,1509736447,TR
1509736448,1509752831,BG
1509752832,1509769215,RU
1509769216,1509785599,SE
@@ -63013,162 +20873,230 @@
1509900288,1509916671,RU
1509916672,1509933055,GB
1509933056,1509949439,US
-1509949440,1511981055,FR
-1511981056,1511986175,RE
+1509949440,1510663167,FR
+1510663168,1510663423,RE
+1510663424,1511981055,FR
+1511981056,1511981567,RE
+1511981568,1511982591,FR
+1511982592,1511983615,RE
+1511983616,1511984639,FR
+1511984640,1511985151,RE
+1511985152,1511985407,FR
+1511985408,1511986175,RE
1511986176,1511986431,FR
-1511986432,1511987967,RE
-1511987968,1511988223,FR
-1511988224,1511989247,RE
+1511986432,1511986687,RE
+1511986688,1511986943,FR
+1511986944,1511987199,RE
+1511987200,1511987967,FR
+1511987968,1511988479,RE
+1511988480,1511988735,FR
+1511988736,1511989247,RE
1511989248,1511989503,FR
-1511989504,1511989759,RE
-1511989760,1511990015,FR
-1511990016,1511990271,RE
+1511989504,1511990271,RE
1511990272,1511990527,FR
-1511990528,1511992831,RE
-1511992832,1511993087,FR
-1511993088,1511993855,RE
-1511993856,1511994367,FR
-1511994368,1511996671,RE
-1511996672,1511996927,FR
-1511996928,1511997183,RE
-1511997184,1511997439,FR
-1511997440,1511997695,MQ
-1511997696,1511997951,FR
-1511997952,1512001535,MQ
-1512001536,1512001791,FR
-1512001792,1512004863,MQ
-1512004864,1512005119,FR
-1512005120,1512005375,MQ
-1512005376,1512005631,FR
-1512005632,1512009727,GP
-1512009728,1512009983,GF
-1512009984,1512010239,FR
-1512010240,1512010495,GF
-1512010496,1512010751,FR
-1512010752,1512011263,GP
-1512011264,1512011519,GF
-1512011520,1512011775,GP
-1512011776,1512012031,GF
-1512012032,1512012287,GP
-1512012288,1512012543,GF
-1512012544,1512012799,GP
-1512012800,1512013055,FR
-1512013056,1512013311,GF
-1512013312,1512013823,FR
-1512013824,1512014847,GF
-1512014848,1512015103,FR
-1512015104,1512016383,GF
-1512016384,1512016639,FR
-1512016640,1512017151,GF
-1512017152,1512017407,FR
-1512017408,1512019967,GF
-1512019968,1512022271,FR
-1512022272,1512022783,GF
-1512022784,1512023039,FR
-1512023040,1512023807,GF
-1512023808,1512024063,FR
-1512024064,1512024575,GF
-1512024576,1512024831,FR
-1512024832,1512025599,GF
-1512025600,1512025855,FR
-1512025856,1512028159,GF
-1512028160,1512030207,FR
+1511990528,1511991295,RE
+1511991296,1511991551,FR
+1511991552,1511992575,RE
+1511992576,1511993087,FR
+1511993088,1511994367,RE
+1511994368,1511995135,FR
+1511995136,1511995391,RE
+1511995392,1511995647,FR
+1511995648,1511996415,RE
+1511996416,1511996671,FR
+1511996672,1511996927,RE
+1511996928,1511997439,FR
+1511997440,1511998207,MQ
+1511998208,1511998463,FR
+1511998464,1511998719,MQ
+1511998720,1511998975,FR
+1511998976,1511999487,MQ
+1511999488,1511999743,FR
+1511999744,1512001023,MQ
+1512001024,1512001535,FR
+1512001536,1512003583,MQ
+1512003584,1512003839,FR
+1512003840,1512004095,MQ
+1512004096,1512004351,FR
+1512004352,1512005631,MQ
+1512005632,1512006143,BL
+1512006144,1512006399,FR
+1512006400,1512006911,BL
+1512006912,1512007167,MF
+1512007168,1512007423,FR
+1512007424,1512007935,BL
+1512007936,1512008191,FR
+1512008192,1512008447,BL
+1512008448,1512008703,MF
+1512008704,1512009215,BL
+1512009216,1512009471,MF
+1512009472,1512010239,BL
+1512010240,1512010495,GP
+1512010496,1512010751,BL
+1512010752,1512011263,MF
+1512011264,1512012287,BL
+1512012288,1512012543,FR
+1512012544,1512013055,BL
+1512013056,1512013311,FR
+1512013312,1512013567,BL
+1512013568,1512013823,FR
+1512013824,1512016639,GF
+1512016640,1512016895,FR
+1512016896,1512018943,GF
+1512018944,1512019199,FR
+1512019200,1512020479,GF
+1512020480,1512022015,FR
+1512022016,1512022271,GF
+1512022272,1512022527,FR
+1512022528,1512028415,GF
+1512028416,1512030207,FR
1512030208,1512046591,YT
1512046592,1512767487,FR
-1512767488,1512769023,RE
-1512769024,1512769279,FR
-1512769280,1512771071,RE
-1512771072,1512771327,FR
-1512771328,1512772095,RE
-1512772096,1512772863,FR
-1512772864,1512773631,RE
-1512773632,1512773887,FR
-1512773888,1512774399,RE
-1512774400,1512774911,FR
-1512774912,1512775423,RE
-1512775424,1512775935,FR
-1512775936,1512776447,RE
-1512776448,1512776959,FR
-1512776960,1512777215,RE
+1512767488,1512767743,RE
+1512767744,1512767999,FR
+1512768000,1512768255,RE
+1512768256,1512768511,FR
+1512768512,1512770047,RE
+1512770048,1512770303,FR
+1512770304,1512770815,RE
+1512770816,1512771583,FR
+1512771584,1512772351,RE
+1512772352,1512772863,FR
+1512772864,1512777215,RE
1512777216,1512777471,FR
-1512777472,1512779007,RE
-1512779008,1512779263,FR
-1512779264,1512780031,RE
-1512780032,1512780287,FR
-1512780288,1512781823,RE
-1512781824,1512782847,FR
-1512782848,1512783359,RE
-1512783360,1512783615,FR
-1512783616,1512783871,RE
-1512783872,1512784127,FR
-1512784128,1512784895,RE
-1512784896,1512785407,FR
-1512785408,1512785919,RE
-1512785920,1512786943,FR
-1512786944,1512788991,RE
-1512788992,1512789247,FR
-1512789248,1512791039,RE
-1512791040,1512791295,FR
-1512791296,1512791551,RE
-1512791552,1512792063,FR
-1512792064,1512798207,RE
+1512777472,1512778495,RE
+1512778496,1512779007,FR
+1512779008,1512779519,RE
+1512779520,1512780031,FR
+1512780032,1512780287,RE
+1512780288,1512780543,FR
+1512780544,1512781567,RE
+1512781568,1512782847,FR
+1512782848,1512783103,RE
+1512783104,1512783359,FR
+1512783360,1512785919,RE
+1512785920,1512787199,FR
+1512787200,1512787967,RE
+1512787968,1512788223,FR
+1512788224,1512791807,RE
+1512791808,1512793087,FR
+1512793088,1512794111,RE
+1512794112,1512794367,FR
+1512794368,1512794623,RE
+1512794624,1512794879,FR
+1512794880,1512795135,RE
+1512795136,1512795391,FR
+1512795392,1512796415,RE
+1512796416,1512796671,FR
+1512796672,1512797183,RE
+1512797184,1512797439,FR
+1512797440,1512797695,RE
+1512797696,1512797951,FR
+1512797952,1512798207,RE
1512798208,1512799231,FR
1512799232,1512799487,RE
-1512799488,1512800255,FR
-1512800256,1512803327,MQ
-1512803328,1512803583,FR
-1512803584,1512804351,MQ
-1512804352,1512804607,FR
-1512804608,1512805887,MQ
-1512805888,1512806399,FR
-1512806400,1512809471,MQ
-1512809472,1512809983,FR
-1512809984,1512810239,MQ
-1512810240,1512810495,FR
-1512810496,1512811263,MQ
-1512811264,1512811519,FR
-1512811520,1512811775,MQ
-1512811776,1512812031,FR
-1512812032,1512816639,MQ
-1512816640,1512819199,GP
-1512819200,1512819455,FR
-1512819456,1512820223,GP
-1512820224,1512820479,FR
-1512820480,1512820735,GP
-1512820736,1512820991,FR
-1512820992,1512824063,GP
-1512824064,1512824319,FR
-1512824320,1512824831,GP
-1512824832,1512825087,FR
-1512825088,1512825599,GP
-1512825600,1512825855,FR
-1512825856,1512826879,GP
-1512826880,1512827135,FR
-1512827136,1512829183,GP
-1512829184,1512829439,FR
-1512829440,1512829951,GP
-1512829952,1512830719,FR
-1512830720,1512832767,GP
+1512799488,1512800511,FR
+1512800512,1512801023,MQ
+1512801024,1512801535,FR
+1512801536,1512802303,MQ
+1512802304,1512802815,FR
+1512802816,1512803071,MQ
+1512803072,1512803327,FR
+1512803328,1512803839,MQ
+1512803840,1512804607,FR
+1512804608,1512805375,MQ
+1512805376,1512805631,FR
+1512805632,1512806399,MQ
+1512806400,1512806655,FR
+1512806656,1512807423,MQ
+1512807424,1512807679,FR
+1512807680,1512807935,MQ
+1512807936,1512808447,FR
+1512808448,1512808959,MQ
+1512808960,1512809215,FR
+1512809216,1512810495,MQ
+1512810496,1512810751,FR
+1512810752,1512812543,MQ
+1512812544,1512812799,FR
+1512812800,1512813311,MQ
+1512813312,1512813567,FR
+1512813568,1512813823,MQ
+1512813824,1512814079,FR
+1512814080,1512815615,MQ
+1512815616,1512815871,FR
+1512815872,1512816639,MQ
+1512816640,1512818431,GP
+1512818432,1512818687,FR
+1512818688,1512819967,GP
+1512819968,1512820223,FR
+1512820224,1512822271,GP
+1512822272,1512822527,FR
+1512822528,1512824319,GP
+1512824320,1512824831,FR
+1512824832,1512826367,GP
+1512826368,1512826623,FR
+1512826624,1512828671,GP
+1512828672,1512828927,FR
+1512828928,1512830463,GP
+1512830464,1512830719,FR
+1512830720,1512831999,GP
+1512832000,1512832255,FR
+1512832256,1512832767,GP
1512832768,1514110975,FR
-1514110976,1514118143,GP
-1514118144,1514118399,FR
-1514118400,1514118655,GP
-1514118656,1514119167,FR
-1514119168,1514127359,GP
-1514127360,1514128127,RE
-1514128128,1514128383,FR
-1514128384,1514131967,RE
+1514110976,1514111487,GP
+1514111488,1514111743,FR
+1514111744,1514112255,GP
+1514112256,1514112767,FR
+1514112768,1514114047,GP
+1514114048,1514114559,FR
+1514114560,1514116863,GP
+1514116864,1514117119,FR
+1514117120,1514117887,GP
+1514117888,1514118143,FR
+1514118144,1514119423,GP
+1514119424,1514119679,FR
+1514119680,1514119935,GP
+1514119936,1514120191,FR
+1514120192,1514121215,GP
+1514121216,1514121471,FR
+1514121472,1514123007,GP
+1514123008,1514123263,FR
+1514123264,1514125055,GP
+1514125056,1514125823,FR
+1514125824,1514126079,GP
+1514126080,1514126335,FR
+1514126336,1514126591,GP
+1514126592,1514127359,FR
+1514127360,1514127871,RE
+1514127872,1514128127,FR
+1514128128,1514128895,RE
+1514128896,1514129151,FR
+1514129152,1514129919,RE
+1514129920,1514130175,FR
+1514130176,1514130687,RE
+1514130688,1514130943,FR
+1514130944,1514131455,RE
+1514131456,1514131711,FR
+1514131712,1514131967,RE
1514131968,1514132223,FR
-1514132224,1514134015,RE
+1514132224,1514132735,RE
+1514132736,1514132991,FR
+1514132992,1514134015,RE
1514134016,1514134271,FR
-1514134272,1514139391,RE
+1514134272,1514135295,RE
+1514135296,1514135551,FR
+1514135552,1514135807,RE
+1514135808,1514136063,FR
+1514136064,1514136831,RE
+1514136832,1514137855,FR
+1514137856,1514139391,RE
1514139392,1514139647,FR
-1514139648,1514143743,RE
-1514143744,1515192639,FR
-1515192640,1515192655,EU
-1515192656,1515241759,FR
-1515241760,1515241791,GB
-1515241792,1515467007,FR
+1514139648,1514140415,RE
+1514140416,1514140671,FR
+1514140672,1514142207,RE
+1514142208,1514142463,FR
+1514142464,1514143743,RE
+1514143744,1515467007,FR
1515467008,1515467263,ES
1515467264,1515467519,FR
1515467520,1515468031,US
@@ -63177,36 +21105,95 @@
1515468544,1515468799,DE
1515468800,1515469823,FR
1515469824,1515470079,DE
-1515470080,1515486975,FR
-1515486976,1515487231,CD
-1515487232,1515487495,HK
-1515487496,1515487739,FR
-1515487740,1515487775,HK
-1515487776,1515487999,FR
-1515488000,1515488255,HK
-1515488256,1515519743,FR
-1515519744,1515519999,ES
-1515520000,1518338047,FR
+1515470080,1515470335,FR
+1515470336,1515470847,US
+1515470848,1515488511,FR
+1515488512,1515488895,US
+1515488896,1515489023,FR
+1515489024,1515489039,DE
+1515489040,1515489151,FR
+1515489152,1515489167,ES
+1515489168,1518338047,FR
1518338048,1518370815,DE
1518370816,1518403583,NL
-1518403584,1518452735,SE
+1518403584,1518436351,SE
+1518436352,1518439679,NO
+1518439680,1518439935,SE
+1518439936,1518441471,NO
+1518441472,1518441727,SE
+1518441728,1518444031,NO
+1518444032,1518444287,SE
+1518444288,1518444543,NO
+1518444544,1518444799,SE
+1518444800,1518445823,NO
+1518445824,1518446335,SE
+1518446336,1518448383,NO
+1518448384,1518448895,SE
+1518448896,1518452223,NO
+1518452224,1518452735,SE
1518452736,1518460927,AT
-1518460928,1518469119,NL
-1518469120,1518479359,SE
-1518479360,1518481407,EE
-1518481408,1518493695,SE
+1518460928,1518470143,NL
+1518470144,1518472191,SE
+1518472192,1518475263,LT
+1518475264,1518476287,SE
+1518476288,1518476799,EE
+1518476800,1518477311,SE
+1518477312,1518481407,EE
+1518481408,1518489599,SE
+1518489600,1518490623,NL
+1518490624,1518493695,SE
1518493696,1518501887,NL
1518501888,1518503935,EE
1518503936,1518510079,LT
-1518510080,1518516479,LV
-1518516480,1518517247,SE
+1518510080,1518516223,LV
+1518516224,1518517247,SE
1518517248,1518518271,LV
-1518518272,1518538495,SE
-1518538496,1518538751,LT
-1518538752,1518542847,SE
+1518518272,1518542847,SE
1518542848,1518551039,LT
1518551040,1518565375,NL
-1518565376,1518633215,SE
+1518565376,1518567423,SE
+1518567424,1518568703,LV
+1518568704,1518568959,SE
+1518568960,1518570239,LV
+1518570240,1518570495,SE
+1518570496,1518572543,LV
+1518572544,1518572799,SE
+1518572800,1518573311,LV
+1518573312,1518573823,SE
+1518573824,1518574335,LV
+1518574336,1518574591,SE
+1518574592,1518576127,LV
+1518576128,1518576383,SE
+1518576384,1518577407,LV
+1518577408,1518577919,SE
+1518577920,1518578687,LV
+1518578688,1518578943,SE
+1518578944,1518580479,LV
+1518580480,1518580735,SE
+1518580736,1518582271,LV
+1518582272,1518582527,SE
+1518582528,1518583039,LV
+1518583040,1518583295,SE
+1518583296,1518585343,LV
+1518585344,1518585599,SE
+1518585600,1518585855,LV
+1518585856,1518586111,SE
+1518586112,1518586623,LV
+1518586624,1518586879,SE
+1518586880,1518587647,LV
+1518587648,1518587903,SE
+1518587904,1518591743,LV
+1518591744,1518591999,SE
+1518592000,1518592255,LV
+1518592256,1518592511,SE
+1518592512,1518594047,LV
+1518594048,1518594303,SE
+1518594304,1518594815,LV
+1518594816,1518595071,SE
+1518595072,1518595327,LV
+1518595328,1518595583,SE
+1518595584,1518600191,LV
+1518600192,1518633215,SE
1518633216,1518633471,NL
1518633472,1518635007,SE
1518635008,1518637055,NL
@@ -63215,137 +21202,73 @@
1518649344,1518665727,SE
1518665728,1518727167,RU
1518727168,1518731263,SE
-1518731264,1518764031,DE
-1518764032,1518772223,LT
-1518772224,1518927871,DE
+1518731264,1518747647,DE
+1518747648,1518772223,LT
+1518772224,1518780415,NL
+1518780416,1518796799,HR
+1518796800,1518927871,DE
1518927872,1518944255,RU
1518944256,1518960639,SE
1518960640,1518961663,LT
1518961664,1518962175,EE
-1518962176,1518962687,LV
+1518962176,1518962687,SE
1518962688,1518964735,NO
1518964736,1518966783,HR
1518966784,1518967807,SE
-1518967808,1518970879,HR
-1518970880,1518972927,SE
-1518972928,1518977023,HR
+1518967808,1518977023,HR
1518977024,1518993407,SE
1518993408,1519190015,RU
-1519190016,1519263743,SE
-1519263744,1519288319,NL
-1519288320,1519321087,SE
+1519190016,1519206399,SE
+1519206400,1519208447,LV
+1519208448,1519259647,SE
+1519259648,1519260671,NL
+1519260672,1519263743,SE
+1519263744,1519289343,NL
+1519289344,1519292415,SE
+1519292416,1519293951,LT
+1519293952,1519297023,SE
+1519297024,1519297279,LT
+1519297280,1519297535,SE
+1519297536,1519297791,LT
+1519297792,1519300607,SE
+1519300608,1519304703,LT
+1519304704,1519313151,SE
+1519313152,1519313407,LT
+1519313408,1519313663,SE
+1519313664,1519313919,LT
+1519313920,1519314175,SE
+1519314176,1519318271,LT
+1519318272,1519318527,SE
+1519318528,1519321087,LT
1519321088,1519386623,RU
-1519386624,1519452159,SE
+1519386624,1519394815,SE
+1519394816,1519398911,HR
+1519398912,1519403007,SE
+1519403008,1519411711,NL
+1519411712,1519411967,SE
+1519411968,1519415295,NL
+1519415296,1519415551,SE
+1519415552,1519416575,NL
+1519416576,1519416831,SE
+1519416832,1519419391,NL
+1519419392,1519452159,SE
1519452160,1519517695,NL
1519517696,1519583231,AT
1519583232,1519648767,IT
1519648768,1519714303,SA
1519714304,1519779839,NO
1519779840,1519910911,RU
-1519910912,1519927295,GB
-1519927296,1519927311,FR
-1519927312,1519927319,BE
-1519927320,1519927327,FR
-1519927328,1519927335,ES
-1519927336,1519927343,CH
-1519927344,1519927351,AT
-1519927352,1519927375,NL
-1519927376,1519927383,CH
-1519927384,1519927399,NL
-1519927400,1519927407,FR
-1519927408,1519927415,AT
-1519927416,1519927423,BE
-1519927424,1519927431,LU
-1519927432,1519927439,NL
-1519927440,1519927447,CH
-1519927448,1519927463,FR
-1519927464,1519927471,IT
-1519927472,1519927479,NL
-1519927480,1519927503,FR
-1519927504,1519927511,NL
-1519927512,1519927527,ES
-1519927528,1519927535,NL
-1519927536,1519927543,FR
-1519927544,1519927551,IE
-1519927552,1519927559,SE
-1519927560,1519927567,IT
-1519927568,1519927575,GB
-1519927576,1519927583,FR
-1519927584,1519927591,AT
-1519927592,1519927607,BE
-1519927608,1519927615,FR
-1519927616,1519927679,NL
-1519927680,1519927687,IE
-1519927688,1519927695,IT
-1519927696,1519927719,NL
-1519927720,1519927727,ES
-1519927728,1519927735,FR
-1519927736,1519927743,NL
-1519927744,1519927751,ES
-1519927752,1519927759,IT
-1519927760,1519927767,ES
-1519927768,1519927775,NL
-1519927776,1519927783,FR
-1519927784,1519927823,GB
-1519927824,1519927831,BE
-1519927832,1519927855,GB
-1519927856,1519927863,DK
-1519927864,1519927871,FI
-1519927872,1519927879,NL
-1519927880,1519927895,GB
-1519927896,1519927903,NL
-1519927904,1519928119,GB
-1519928120,1519928143,NO
-1519928144,1519928151,NL
-1519928152,1519928183,DK
-1519928184,1519928191,GB
-1519928192,1519928199,SE
-1519928200,1519928247,GB
-1519928248,1519928255,DK
-1519928256,1519929279,GB
-1519929280,1519929287,NL
-1519929288,1519929343,GB
-1519929344,1519934463,NL
-1519934464,1519934975,GB
-1519934976,1519935487,NL
-1519935488,1519935615,FR
-1519935616,1519935743,NL
-1519935744,1519935935,FI
-1519935936,1519936191,BE
+1519910912,1519928063,GB
+1519928064,1519928319,DK
+1519928320,1519931391,GB
+1519931392,1519934463,NL
+1519934464,1519936191,GB
1519936192,1519936255,DK
-1519936256,1519936383,NL
-1519936384,1519936447,BE
-1519936448,1519936511,NO
-1519936512,1519936575,SK
-1519936576,1519936767,DK
-1519936768,1519936895,SE
-1519936896,1519937023,BE
-1519937024,1519937279,DK
-1519937280,1519937343,NL
-1519937344,1519937407,SE
-1519937408,1519937471,NO
-1519937472,1519937535,GB
-1519937536,1519937727,NL
-1519937728,1519938559,GB
+1519936256,1519938559,GB
1519938560,1519939583,NL
-1519939584,1519939615,NO
-1519939616,1519939647,NL
-1519939648,1519939679,SE
-1519939680,1519939711,SK
-1519939712,1519939743,NL
-1519939744,1519939807,BE
-1519939808,1519939839,NL
-1519939840,1519940095,GB
-1519940096,1519940159,NL
-1519940160,1519940191,FI
-1519940192,1519940223,SE
-1519940224,1519943679,GB
+1519939584,1519943679,GB
1519943680,1519976447,AT
-1519976448,1519980159,DE
-1519980160,1519980191,GB
-1519980192,1519980199,DE
-1519980200,1519980287,GB
-1519980288,1520009215,DE
+1519976448,1520009215,DE
1520009216,1520041983,SY
1520041984,1520074751,RU
1520074752,1520107519,BG
@@ -63364,9 +21287,11 @@
1522270208,1522401279,RU
1522401280,1522532351,EE
1522532352,1524629503,GB
-1524629504,1524886783,SE
-1524886784,1524887039,DK
-1524887040,1525678079,SE
+1524629504,1525092351,SE
+1525092352,1525092479,DK
+1525092480,1525122047,SE
+1525122048,1525122175,DK
+1525122176,1525678079,SE
1525678080,1526726655,GB
1526726656,1531183103,DE
1531183104,1531445247,FR
@@ -63389,7 +21314,6 @@
1532639232,1532641279,PL
1532641280,1532643327,NO
1532643328,1532645375,PL
-1532645376,1532647423,RU
1532647424,1532649471,PL
1532649472,1532651519,FR
1532651520,1532653567,NO
@@ -63420,9 +21344,7 @@
1533431808,1533433855,IE
1533433856,1533435903,DK
1533435904,1533437951,CZ
-1533437952,1533441519,PL
-1533441520,1533441535,CH
-1533441536,1533442047,PL
+1533437952,1533442047,PL
1533442048,1533444095,AE
1533444096,1533446143,IT
1533446144,1533448191,DE
@@ -63440,27 +21362,15 @@
1533470720,1533472767,KW
1533472768,1533474815,ES
1533474816,1533476863,FR
-1533476864,1533478143,IE
-1533478144,1533478207,DK
-1533478208,1533478911,IE
+1533476864,1533478911,IE
1533478912,1533480959,RS
-1533480960,1533481727,NL
-1533481728,1533482495,GB
-1533482496,1533482751,NL
-1533482752,1533483007,GB
+1533480960,1533483007,NL
1533483008,1533485055,AM
-1533485056,1533485567,GB
-1533485568,1533485823,DE
-1533485824,1533486335,SE
+1533485056,1533486079,GB
+1533486080,1533486335,SE
1533486336,1533486591,NO
-1533486592,1533486847,DK
-1533486848,1533487103,FI
-1533487104,1533487359,FR
-1533487360,1533487615,US
-1533487616,1533487871,JP
-1533487872,1533488639,FR
-1533488640,1533488895,US
-1533488896,1533489151,JP
+1533486592,1533487103,GB
+1533487104,1533489151,FR
1533489152,1533491199,ES
1533491200,1533493247,AM
1533493248,1533499391,RU
@@ -63470,12 +21380,7 @@
1533505536,1533507583,DE
1533507584,1533509631,UA
1533509632,1533511679,GB
-1533511680,1533511935,IT
-1533511936,1533513023,FR
-1533513024,1533513087,ES
-1533513088,1533513215,FR
-1533513216,1533513471,GB
-1533513472,1533513727,DE
+1533511680,1533513727,FR
1533513728,1533515775,KW
1533515776,1533517823,RU
1533517824,1533519871,CZ
@@ -63488,12 +21393,20 @@
1533540352,1533542399,AT
1533542400,1533607935,HU
1533607936,1533640703,LV
-1533640704,1533669375,RU
+1533640704,1533659135,RU
+1533659136,1533660159,LV
+1533660160,1533661183,UA
+1533661184,1533663231,SE
+1533663232,1533665279,NL
+1533665280,1533667327,GB
+1533667328,1533669375,RU
1533669376,1533671423,DE
1533671424,1533673471,FI
1533673472,1533677567,DE
1533677568,1533679615,ES
-1533679616,1533681663,PL
+1533679616,1533680127,PL
+1533680128,1533680383,ES
+1533680384,1533681663,PL
1533681664,1533689855,IQ
1533689856,1533698047,IR
1533698048,1533702143,JO
@@ -63511,39 +21424,21 @@
1533837312,1533845503,IR
1533845504,1533847551,GB
1533847552,1533849599,RU
-1533849600,1533851135,SE
-1533851136,1533851647,US
-1533851648,1533851903,CH
-1533851904,1533851919,DE
-1533851920,1533851923,FR
-1533851924,1533851935,CH
-1533851936,1533851939,GB
-1533851940,1533851951,CH
-1533851952,1533851955,IT
-1533851956,1533851967,CH
-1533851968,1533851971,PL
-1533851972,1533851983,CH
-1533851984,1533851987,BR
-1533851988,1533852191,CH
-1533852192,1533852195,IN
-1533852196,1533853695,CH
-1533853696,1533870079,TR
-1533870080,1533870591,ES
-1533870592,1533874175,GB
+1533849600,1533851647,SE
+1533851648,1533853695,CH
+1533853696,1533874175,GB
1533874176,1533878271,DE
1533878272,1533880319,CZ
1533880320,1533882367,GB
1533882368,1533886463,IT
1533886464,1533894655,RU
1533894656,1533896703,ES
-1533896704,1533897215,PT
-1533897216,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
@@ -63552,647 +21447,45 @@
1533929472,1533932799,GB
1533932800,1533933055,DE
1533933056,1534066687,GB
-1534066688,1534129151,AT
-1534129152,1534129407,A2
-1534129408,1534328831,AT
-1534328832,1534363903,ES
-1534363904,1534364159,PT
-1534364160,1534459903,ES
+1534066688,1534328831,AT
+1534328832,1534459903,ES
1534459904,1534590975,AT
1534590976,1534656511,HU
1534656512,1534711807,FR
1534711808,1534712831,BE
-1534712832,1534713855,FR
-1534713856,1534713887,PT
-1534713888,1534713927,FR
-1534713928,1534713931,GB
-1534713932,1534713935,FI
-1534713936,1534713943,FR
-1534713944,1534713947,DE
-1534713948,1534713951,PL
-1534713952,1534713955,DE
-1534713956,1534713959,BE
-1534713960,1534713963,CH
-1534713964,1534713983,FR
-1534713984,1534713999,PL
-1534714000,1534714015,FR
-1534714016,1534714031,DE
-1534714032,1534714047,BE
-1534714048,1534714051,FR
-1534714052,1534714055,IT
-1534714056,1534714059,DE
-1534714060,1534714063,FR
-1534714064,1534714079,ES
-1534714080,1534714095,FR
-1534714096,1534714111,BE
-1534714112,1534714115,ES
-1534714116,1534714119,DE
-1534714120,1534714123,FI
-1534714124,1534714127,ES
-1534714128,1534714143,BE
-1534714144,1534714159,GB
-1534714160,1534714255,FR
-1534714256,1534714259,DE
-1534714260,1534714271,PL
-1534714272,1534714279,FR
-1534714280,1534714283,DE
-1534714284,1534714287,CH
-1534714288,1534714303,ES
-1534714304,1534714307,GB
-1534714308,1534714311,ES
-1534714312,1534714315,PL
-1534714316,1534714323,FR
-1534714324,1534714327,ES
-1534714328,1534714331,FR
-1534714332,1534714335,PL
-1534714336,1534714351,FR
-1534714352,1534714383,GB
-1534714384,1534714399,FR
-1534714400,1534714403,GB
-1534714404,1534714407,ES
-1534714408,1534714415,DE
-1534714416,1534714431,GB
-1534714432,1534714439,FR
-1534714440,1534714447,PL
-1534714448,1534714463,FR
-1534714464,1534714495,NL
-1534714496,1534714511,FR
-1534714512,1534714527,DE
-1534714528,1534714531,FR
-1534714532,1534714535,PL
-1534714536,1534714539,GB
-1534714540,1534714543,PL
-1534714544,1534714551,FR
-1534714552,1534714559,ES
-1534714560,1534714575,NL
-1534714576,1534714591,GB
-1534714592,1534714655,FR
-1534714656,1534714671,PL
-1534714672,1534714691,FR
-1534714692,1534714695,GB
-1534714696,1534714703,FR
-1534714704,1534714719,CH
-1534714720,1534714751,BE
+1534712832,1534714415,FR
+1534714416,1534714431,ES
+1534714432,1534714751,FR
1534714752,1534714767,DE
-1534714768,1534714783,IE
-1534714784,1534714799,PL
-1534714800,1534714815,GB
-1534714816,1534714819,BE
-1534714820,1534714831,FR
-1534714832,1534714839,DE
-1534714840,1534714847,FR
-1534714848,1534714855,GB
-1534714856,1534714863,CH
-1534714864,1534714871,FR
-1534714872,1534714875,ES
-1534714876,1534714879,DE
-1534714880,1534714911,FR
-1534714912,1534714927,DE
-1534714928,1534714931,PT
-1534714932,1534714935,DE
-1534714936,1534714939,FR
-1534714940,1534714975,DE
-1534714976,1534715039,FR
-1534715040,1534715055,GB
-1534715056,1534715071,IE
-1534715072,1534715103,FR
-1534715104,1534715119,BE
-1534715120,1534715135,FR
-1534715136,1534715143,PL
-1534715144,1534715199,FR
-1534715200,1534715203,IT
-1534715204,1534715207,FR
-1534715208,1534715211,GB
-1534715212,1534715215,FR
-1534715216,1534715231,BE
-1534715232,1534715267,FR
-1534715268,1534715271,PL
-1534715272,1534715279,FR
-1534715280,1534715283,PL
-1534715284,1534715287,FR
-1534715288,1534715295,CZ
-1534715296,1534715303,FR
-1534715304,1534715315,PL
-1534715316,1534715319,ES
-1534715320,1534715327,PL
-1534715328,1534715343,NL
-1534715344,1534715359,FR
-1534715360,1534715367,NL
-1534715368,1534715371,FR
-1534715372,1534715375,CH
-1534715376,1534715391,FR
-1534715392,1534715399,PL
-1534715400,1534715415,GB
-1534715416,1534715419,DE
-1534715420,1534715431,IT
-1534715432,1534715439,FR
-1534715440,1534715447,ES
-1534715448,1534715451,FR
-1534715452,1534715455,PL
-1534715456,1534715471,FR
-1534715472,1534715487,IE
-1534715488,1534715583,FR
-1534715584,1534715599,GB
-1534715600,1534715603,DE
-1534715604,1534715607,GB
-1534715608,1534715611,CH
-1534715612,1534715615,FI
-1534715616,1534715639,FR
-1534715640,1534715643,PL
-1534715644,1534715647,DE
-1534715648,1534715663,PL
-1534715664,1534715667,FR
-1534715668,1534715671,PL
-1534715672,1534715675,CZ
-1534715676,1534715679,GB
-1534715680,1534715711,FR
-1534715712,1534715727,PT
-1534715728,1534715735,FR
-1534715736,1534715759,PL
-1534715760,1534715775,ES
-1534715776,1534715783,PL
-1534715784,1534715791,BE
-1534715792,1534715807,CZ
-1534715808,1534715871,FR
-1534715872,1534715875,PL
-1534715876,1534715879,FR
-1534715880,1534715883,PT
-1534715884,1534715887,PL
-1534715888,1534715935,FR
-1534715936,1534715939,IE
-1534715940,1534715943,PL
-1534715944,1534715947,FR
-1534715948,1534715951,PL
-1534715952,1534715983,FR
-1534715984,1534715987,PL
-1534715988,1534715991,ES
-1534715992,1534715995,PL
-1534715996,1534715999,FR
-1534716000,1534716007,NL
-1534716008,1534716047,FR
-1534716048,1534716063,GB
-1534716064,1534716131,FR
-1534716132,1534716143,ES
-1534716144,1534716159,FR
-1534716160,1534716163,IT
-1534716164,1534716167,FI
-1534716168,1534716175,IE
-1534716176,1534716191,FR
-1534716192,1534716223,ES
-1534716224,1534716239,FR
-1534716240,1534716255,GB
-1534716256,1534716271,FR
-1534716272,1534716287,IE
-1534716288,1534716303,FR
-1534716304,1534716311,PL
-1534716312,1534716319,FR
-1534716320,1534716351,PL
-1534716352,1534716355,FR
-1534716356,1534716359,PL
-1534716360,1534716363,FR
-1534716364,1534716367,GB
-1534716368,1534716375,BE
-1534716376,1534716379,FR
-1534716380,1534716383,CZ
-1534716384,1534716391,FR
-1534716392,1534716395,ES
-1534716396,1534716399,GB
-1534716400,1534716403,PL
-1534716404,1534716407,NL
-1534716408,1534716415,FR
-1534716416,1534716431,ES
-1534716432,1534716447,PL
-1534716448,1534716463,IE
-1534716464,1534716479,FR
-1534716480,1534716495,ES
-1534716496,1534716575,FR
-1534716576,1534716591,PL
-1534716592,1534716639,FR
-1534716640,1534716647,BE
-1534716648,1534716655,FR
-1534716656,1534716663,IE
-1534716664,1534716671,FR
-1534716672,1534716687,PL
-1534716688,1534716703,FR
-1534716704,1534716735,ES
-1534716736,1534716751,FR
-1534716752,1534716759,PL
-1534716760,1534716763,DE
-1534716764,1534716767,ES
-1534716768,1534716775,DE
-1534716776,1534716779,PT
-1534716780,1534716787,PL
-1534716788,1534716799,FR
-1534716800,1534716803,DE
-1534716804,1534716807,PL
-1534716808,1534716811,NL
-1534716812,1534716815,PL
-1534716816,1534716823,FR
-1534716824,1534716831,GB
-1534716832,1534716863,FR
-1534716864,1534716879,ES
-1534716880,1534716895,BE
-1534716896,1534716903,ES
-1534716904,1534716911,DE
-1534716912,1534716927,FR
-1534716928,1534716943,DE
-1534716944,1534716959,FR
-1534716960,1534716963,ES
-1534716964,1534716991,FR
-1534716992,1534717007,DE
-1534717008,1534717011,PL
-1534717012,1534717019,FR
-1534717020,1534717023,PT
-1534717024,1534717031,IE
-1534717032,1534717035,DE
-1534717036,1534717039,GB
-1534717040,1534717047,PL
-1534717048,1534717063,FR
-1534717064,1534717071,IT
-1534717072,1534717103,FR
-1534717104,1534717119,PL
-1534717120,1534717135,IT
-1534717136,1534717139,CH
-1534717140,1534717143,CZ
-1534717144,1534717147,FR
-1534717148,1534717151,IT
-1534717152,1534717227,FR
-1534717228,1534717231,ES
-1534717232,1534717247,FR
-1534717248,1534717251,PL
-1534717252,1534717255,NL
-1534717256,1534717311,FR
-1534717312,1534717315,PL
-1534717316,1534717319,IE
-1534717320,1534717323,GB
-1534717324,1534717343,FR
-1534717344,1534717359,GB
-1534717360,1534717407,FR
-1534717408,1534717411,IT
-1534717412,1534717415,CH
-1534717416,1534717419,CZ
-1534717420,1534717427,PL
-1534717428,1534717431,FR
-1534717432,1534717435,GB
-1534717436,1534717439,NL
-1534717440,1534717519,FR
-1534717520,1534717535,DE
-1534717536,1534717551,PL
-1534717552,1534717567,CZ
-1534717568,1534717583,IE
-1534717584,1534717587,CZ
-1534717588,1534717591,GB
-1534717592,1534717599,DE
-1534717600,1534717647,FR
-1534717648,1534717659,PL
-1534717660,1534717663,FR
+1534714768,1534715871,FR
+1534715872,1534715875,ES
+1534715876,1534715935,FR
+1534715936,1534715939,NL
+1534715940,1534716375,FR
+1534716376,1534716379,ES
+1534716380,1534717247,FR
+1534717248,1534717251,ES
+1534717252,1534717263,FR
+1534717264,1534717267,ES
+1534717268,1534717663,FR
1534717664,1534717679,GB
-1534717680,1534717711,ES
-1534717712,1534717715,DE
-1534717716,1534717719,ES
-1534717720,1534717727,FR
-1534717728,1534717731,ES
-1534717732,1534717735,PL
-1534717736,1534717739,BE
-1534717740,1534717743,GB
-1534717744,1534717751,FR
-1534717752,1534717759,BE
-1534717760,1534717763,PL
-1534717764,1534717767,FR
-1534717768,1534717771,IT
-1534717772,1534717783,FR
-1534717784,1534717787,GB
-1534717788,1534717791,DE
-1534717792,1534717823,FR
-1534717824,1534717855,BE
-1534717856,1534717871,NL
-1534717872,1534717903,FR
-1534717904,1534717907,IT
-1534717908,1534717911,GB
-1534717912,1534717923,FR
-1534717924,1534717927,ES
-1534717928,1534717931,DE
-1534717932,1534717935,PL
-1534717936,1534717951,FR
-1534717952,1534717955,DE
-1534717956,1534717959,BE
-1534717960,1534717963,PT
-1534717964,1534717967,CH
-1534717968,1534717983,IT
-1534717984,1534717987,PL
-1534717988,1534717991,FR
-1534717992,1534717995,NL
-1534717996,1534717999,GB
-1534718000,1534718007,ES
-1534718008,1534718011,PL
-1534718012,1534718015,FR
-1534718016,1534718031,BE
-1534718032,1534718063,FR
-1534718064,1534718079,IT
-1534718080,1534718087,ES
-1534718088,1534718091,DE
-1534718092,1534718095,ES
-1534718096,1534718111,PL
-1534718112,1534718127,GB
-1534718128,1534718143,ES
-1534718144,1534718159,FR
-1534718160,1534718207,PL
-1534718208,1534718335,FR
-1534718336,1534718351,CH
-1534718352,1534718359,FR
-1534718360,1534718363,ES
-1534718364,1534718415,FR
-1534718416,1534718419,ES
-1534718420,1534718423,GB
-1534718424,1534718431,ES
-1534718432,1534718439,FR
-1534718440,1534718447,ES
-1534718448,1534718451,FR
-1534718452,1534718455,PL
-1534718456,1534718463,IT
-1534718464,1534718467,DE
-1534718468,1534718471,GB
-1534718472,1534718475,PT
-1534718476,1534718479,PL
-1534718480,1534718487,FR
-1534718488,1534718495,DE
-1534718496,1534718527,FR
-1534718528,1534718531,ES
-1534718532,1534718535,PL
-1534718536,1534718575,FR
-1534718576,1534718591,GB
-1534718592,1534718607,NL
-1534718608,1534718623,FR
-1534718624,1534718631,PL
-1534718632,1534718703,FR
-1534718704,1534718707,IT
-1534718708,1534718711,FR
-1534718712,1534718719,ES
-1534718720,1534718735,GB
-1534718736,1534718739,NL
-1534718740,1534718751,FR
-1534718752,1534718755,PL
-1534718756,1534718763,FR
-1534718764,1534718767,PL
-1534718768,1534718783,FR
-1534718784,1534718815,ES
-1534718816,1534718823,PL
-1534718824,1534718847,FR
-1534718848,1534718911,BE
-1534718912,1534718927,IT
-1534718928,1534718943,FR
-1534718944,1534718959,IT
-1534718960,1534719039,FR
-1534719040,1534719055,BE
-1534719056,1534719071,FR
-1534719072,1534719075,FI
-1534719076,1534719079,ES
-1534719080,1534719083,IT
-1534719084,1534719087,CH
-1534719088,1534719103,PL
-1534719104,1534719167,BE
-1534719168,1534719295,FR
-1534719296,1534719311,ES
-1534719312,1534719335,FR
-1534719336,1534719339,IT
-1534719340,1534719343,ES
-1534719344,1534719375,FR
-1534719376,1534719379,PL
-1534719380,1534719383,IT
-1534719384,1534719391,FR
-1534719392,1534719395,CH
-1534719396,1534719399,PT
-1534719400,1534719403,IT
-1534719404,1534719439,FR
-1534719440,1534719459,PL
-1534719460,1534719463,CH
-1534719464,1534719471,PL
-1534719472,1534719487,IE
-1534719488,1534719503,FR
-1534719504,1534719507,DE
-1534719508,1534719511,GB
-1534719512,1534719515,PL
-1534719516,1534719535,FR
-1534719536,1534719539,NL
-1534719540,1534719543,FR
-1534719544,1534719551,GB
-1534719552,1534719555,NL
-1534719556,1534719559,PL
-1534719560,1534719567,FR
-1534719568,1534719571,CH
-1534719572,1534719575,NL
-1534719576,1534719583,GB
-1534719584,1534719599,FR
-1534719600,1534719607,PL
-1534719608,1534719615,ES
-1534719616,1534719631,FR
-1534719632,1534719639,ES
-1534719640,1534719647,FR
-1534719648,1534719655,IE
-1534719656,1534719659,NL
-1534719660,1534719679,FR
-1534719680,1534719695,GB
-1534719696,1534719699,IT
-1534719700,1534719703,DE
-1534719704,1534719711,GB
-1534719712,1534719731,FR
-1534719732,1534719735,IE
-1534719736,1534719739,PL
-1534719740,1534719743,ES
-1534719744,1534719747,FR
-1534719748,1534719751,PL
-1534719752,1534719759,FR
-1534719760,1534719775,IT
-1534719776,1534719783,FR
-1534719784,1534719787,PT
-1534719788,1534719791,PL
-1534719792,1534719799,FR
-1534719800,1534719803,ES
-1534719804,1534719807,GB
-1534719808,1534719811,PL
-1534719812,1534719815,FR
-1534719816,1534719819,CH
-1534719820,1534719823,CZ
-1534719824,1534719831,FR
-1534719832,1534719839,PL
-1534719840,1534719871,FR
-1534719872,1534719887,IE
-1534719888,1534719951,FR
-1534719952,1534719967,DE
-1534719968,1534719983,ES
-1534719984,1534720003,FR
-1534720004,1534720011,ES
-1534720012,1534720015,IE
-1534720016,1534720023,FR
+1534717680,1534718763,FR
+1534718764,1534718767,ES
+1534718768,1534719747,FR
+1534719748,1534719751,ES
+1534719752,1534719783,FR
+1534719784,1534719787,ES
+1534719788,1534720003,FR
+1534720004,1534720007,ES
+1534720008,1534720023,FR
1534720024,1534720027,PL
-1534720028,1534720031,ES
-1534720032,1534720047,FR
-1534720048,1534720063,ES
-1534720064,1534720079,FR
-1534720080,1534720095,GB
-1534720096,1534720111,IT
-1534720112,1534720179,FR
-1534720180,1534720183,NL
-1534720184,1534720211,FR
-1534720212,1534720215,PL
-1534720216,1534720223,PT
-1534720224,1534720239,DE
-1534720240,1534720255,BE
-1534720256,1534720271,FR
-1534720272,1534720287,PL
-1534720288,1534720291,IT
-1534720292,1534720295,PL
-1534720296,1534720299,GB
-1534720300,1534720351,FR
-1534720352,1534720367,ES
-1534720368,1534720383,PL
-1534720384,1534720387,FR
-1534720388,1534720391,FI
-1534720392,1534720395,DE
-1534720396,1534720399,PL
-1534720400,1534720403,LT
-1534720404,1534720407,GB
-1534720408,1534720411,FR
-1534720412,1534720415,IE
-1534720416,1534720419,ES
-1534720420,1534720423,DE
-1534720424,1534720431,ES
-1534720432,1534720447,PL
-1534720448,1534720451,FR
-1534720452,1534720455,NL
-1534720456,1534720471,FR
+1534720028,1534720179,FR
+1534720180,1534720183,ES
+1534720184,1534720471,FR
1534720472,1534720479,DE
-1534720480,1534720495,IE
-1534720496,1534720511,PL
-1534720512,1534720535,FR
-1534720536,1534720539,PL
-1534720540,1534720543,FI
-1534720544,1534720559,FR
-1534720560,1534720583,IT
-1534720584,1534720591,BE
-1534720592,1534720611,FR
-1534720612,1534720615,BE
-1534720616,1534720619,DE
-1534720620,1534720623,PT
-1534720624,1534720639,FR
-1534720640,1534720643,PL
-1534720644,1534720647,FR
-1534720648,1534720655,IE
-1534720656,1534720671,ES
-1534720672,1534720735,FR
-1534720736,1534720739,CH
-1534720740,1534720743,PL
-1534720744,1534720747,IE
-1534720748,1534720767,FR
-1534720768,1534720783,ES
-1534720784,1534720787,FR
-1534720788,1534720791,DE
-1534720792,1534720795,IT
-1534720796,1534720799,ES
-1534720800,1534720815,PL
-1534720816,1534720831,FR
-1534720832,1534720863,PL
-1534720864,1534720879,ES
-1534720880,1534720895,FR
-1534720896,1534720899,ES
-1534720900,1534720903,LT
-1534720904,1534720911,PT
-1534720912,1534720943,FR
-1534720944,1534720951,CH
-1534720952,1534720959,PL
-1534720960,1534720975,IT
-1534720976,1534720979,NL
-1534720980,1534720983,GB
-1534720984,1534720991,PL
-1534720992,1534721007,IT
-1534721008,1534721023,FR
-1534721024,1534721031,DE
-1534721032,1534721055,FR
-1534721056,1534721063,ES
-1534721064,1534721071,GB
-1534721072,1534721095,FR
-1534721096,1534721099,DE
-1534721100,1534721111,PL
-1534721112,1534721115,NL
-1534721116,1534721119,FR
-1534721120,1534721135,IT
-1534721136,1534721159,FR
-1534721160,1534721163,ES
-1534721164,1534721183,FR
-1534721184,1534721191,LT
-1534721192,1534721195,FR
-1534721196,1534721199,IT
-1534721200,1534721215,FR
-1534721216,1534721223,BE
-1534721224,1534721231,CH
-1534721232,1534721247,DE
-1534721248,1534721263,FR
-1534721264,1534721279,GB
-1534721280,1534721287,PL
-1534721288,1534721311,FR
-1534721312,1534721319,PL
-1534721320,1534721327,PT
-1534721328,1534721343,FR
-1534721344,1534721359,PL
-1534721360,1534721375,GB
-1534721376,1534721391,FR
-1534721392,1534721407,PL
-1534721408,1534721439,DE
-1534721440,1534721455,FR
-1534721456,1534721471,ES
-1534721472,1534721491,GB
-1534721492,1534721495,FR
-1534721496,1534721519,PL
-1534721520,1534721567,FR
-1534721568,1534721583,GB
-1534721584,1534721587,FR
-1534721588,1534721591,GB
-1534721592,1534721595,PL
-1534721596,1534721599,ES
-1534721600,1534721615,FR
-1534721616,1534721619,PL
+1534720480,1534721619,FR
1534721620,1534721623,ES
-1534721624,1534721627,PL
-1534721628,1534721631,NL
-1534721632,1534721647,ES
-1534721648,1534721663,FR
-1534721664,1534721679,ES
-1534721680,1534721699,FR
-1534721700,1534721703,PL
-1534721704,1534721707,DE
-1534721708,1534721711,GB
-1534721712,1534721743,FR
-1534721744,1534721747,PL
-1534721748,1534721751,GB
-1534721752,1534721755,DE
-1534721756,1534721807,FR
-1534721808,1534721827,PL
-1534721828,1534721831,FR
-1534721832,1534721835,DE
-1534721836,1534721839,BE
-1534721840,1534721855,PL
-1534721856,1534721887,ES
-1534721888,1534721903,FR
-1534721904,1534721919,DE
-1534721920,1534721935,FR
-1534721936,1534721943,CH
-1534721944,1534721951,IT
-1534721952,1534721955,NL
-1534721956,1534721959,PL
-1534721960,1534721963,IE
-1534721964,1534721967,CH
-1534721968,1534721971,DE
-1534721972,1534721975,PL
-1534721976,1534721979,FI
-1534721980,1534721983,PL
-1534721984,1534721999,FR
-1534722000,1534722007,PL
-1534722008,1534722011,PT
-1534722012,1534722015,ES
-1534722016,1534722031,IE
-1534722032,1534722039,FR
-1534722040,1534722043,BE
-1534722044,1534722047,FR
+1534721624,1534722047,FR
1534722048,1534787583,RU
1534787584,1534791679,RO
1534791680,1534795775,RU
@@ -64210,14 +21503,22 @@
1534849024,1534853119,NL
1534853120,1534918655,UA
1534918656,1534984191,GB
-1534984192,1535049727,ES
+1534984192,1534985215,NO
+1534985216,1535049727,ES
1535049728,1535115263,SK
1535115264,1535197183,AT
1535197184,1535246335,SE
1535246336,1535311871,AT
-1535311872,1535377407,SE
+1535311872,1535344639,NO
+1535344640,1535350783,LV
+1535350784,1535352831,HR
+1535352832,1535361023,EE
+1535361024,1535377407,NL
1535377408,1535442943,GR
-1535442944,1535508479,FI
+1535442944,1535451135,FI
+1535451136,1535459327,DK
+1535459328,1535475711,AT
+1535475712,1535508479,IR
1535508480,1535574015,BG
1535574016,1535578111,GB
1535578112,1535582207,LV
@@ -64244,23 +21545,16 @@
1535707136,1535709183,DE
1535709184,1535715327,CH
1535715328,1535717375,DE
-1535717376,1535720447,CH
-1535720448,1535720959,DE
-1535720960,1535721087,CH
-1535721088,1535721727,DE
+1535717376,1535721471,CH
+1535721472,1535721727,DE
1535721728,1535737855,CH
-1535737856,1535769855,HU
-1535769856,1535770623,SR
+1535737856,1535770623,HU
1535770624,1535803391,CH
1535803392,1535836159,GR
-1535836160,1535868927,HU
+1535836160,1535868927,CZ
1535868928,1535901695,BG
1535901696,1535934463,GR
-1535934464,1535959551,KW
-1535959552,1535959807,US
-1535959808,1535963391,KW
-1535963392,1535963647,US
-1535963648,1535967231,KW
+1535934464,1535967231,KW
1535967232,1535999999,AT
1536000000,1536032767,NL
1536032768,1536036863,LV
@@ -64268,31 +21562,12 @@
1536040960,1536045055,GB
1536045056,1536045311,IQ
1536045312,1536045567,LB
-1536045568,1536046079,IQ
-1536046080,1536046847,DE
-1536046848,1536046975,A2
-1536046976,1536047039,SA
-1536047040,1536047103,IQ
-1536047104,1536047679,LB
-1536047680,1536047999,A2
-1536048000,1536048127,SA
-1536048128,1536048255,AE
-1536048256,1536048319,DE
-1536048320,1536048383,IQ
-1536048384,1536048511,A2
-1536048512,1536048575,IQ
-1536048576,1536048639,A2
-1536048640,1536048671,FR
-1536048672,1536048703,LU
-1536048704,1536048719,IQ
-1536048720,1536048735,NL
-1536048736,1536048895,DE
-1536048896,1536049151,A2
+1536045568,1536049151,DE
1536049152,1536051199,IT
1536051200,1536057343,RU
1536057344,1536061439,IE
1536061440,1536065535,SE
-1536065536,1536065791,DE
+1536065536,1536065791,GB
1536065792,1536066303,LU
1536066304,1536066815,NL
1536067072,1536067327,GB
@@ -64301,7 +21576,7 @@
1536067840,1536068095,PL
1536068096,1536068351,RU
1536068352,1536068607,HR
-1536068608,1536069119,RU
+1536068864,1536069119,RU
1536069120,1536069375,TR
1536069376,1536069631,IT
1536069632,1536073727,RU
@@ -64315,17 +21590,12 @@
1536114688,1536118783,GB
1536118784,1536122879,DE
1536122880,1536126975,AT
-1536126976,1536130815,DK
-1536130816,1536131071,EU
+1536126976,1536131071,DK
1536131072,1536143359,RU
1536143360,1536147455,GB
1536147456,1536151551,IT
1536151552,1536155647,RS
-1536155648,1536155655,IL
-1536155656,1536155659,GB
-1536155660,1536155663,GR
-1536155664,1536155667,US
-1536155668,1536159743,IL
+1536155648,1536159743,IL
1536159744,1536163839,DE
1536163840,1536180223,SY
1536180224,1536196607,HU
@@ -64361,31 +21631,18 @@
1536589824,1536614399,PL
1536614400,1536622591,DK
1536622592,1536626687,GB
-1536626688,1536630783,DE
+1536626688,1536626943,DE
+1536626944,1536627072,AT
+1536627073,1536630783,DE
1536630784,1536634879,RU
1536634880,1536643071,FR
1536643072,1536647167,TR
1536647168,1536651263,ES
1536651264,1536655359,FR
1536655360,1536659455,GE
-1536659456,1536659775,DE
-1536659776,1536659791,AO
-1536659792,1536659807,SD
-1536659808,1536659841,DE
-1536659842,1536659843,US
-1536659844,1536660015,DE
-1536660016,1536660031,CG
-1536660032,1536660063,CD
-1536660064,1536660079,SO
-1536660080,1536660095,DE
-1536660096,1536660159,LB
-1536660160,1536660175,AE
-1536660176,1536662271,DE
+1536659456,1536662271,DE
1536662272,1536662527,IQ
-1536662528,1536662783,AE
-1536662784,1536663295,DE
-1536663296,1536663327,LB
-1536663328,1536663551,DE
+1536662528,1536663551,DE
1536663552,1536667647,SA
1536667648,1536675839,RU
1536675840,1536679935,GB
@@ -64395,8 +21652,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
@@ -64407,55 +21664,18 @@
1538859008,1538875391,RU
1538875392,1538883583,RS
1538883584,1538891775,BE
-1538891776,1538892543,DE
-1538892544,1538892799,CY
-1538892800,1538893567,DE
-1538893568,1538894079,CY
-1538894080,1538894591,FR
-1538894592,1538894847,DE
-1538894848,1538895871,FR
-1538895872,1538896895,DE
-1538896896,1538897663,FR
-1538897664,1538897671,DE
-1538897672,1538897679,IT
-1538897680,1538897687,ES
-1538897688,1538897695,RU
-1538897696,1538897703,PL
-1538897704,1538897711,GR
-1538897712,1538897719,PT
-1538897720,1538897727,GB
-1538897728,1538897735,NL
-1538897736,1538897919,FR
-1538897920,1538898687,DE
-1538898688,1538899967,FR
-1538899968,1538904031,SI
-1538904032,1538904039,BH
-1538904040,1538908159,SI
+1538891776,1538897919,GB
+1538897920,1538899967,PL
+1538899968,1538908159,SI
1538908160,1538916351,RU
1538916352,1538924543,GB
1538924544,1538932735,DE
1538932736,1538940927,NO
1538940928,1538949119,RU
1538949120,1538957311,AT
-1538957312,1538961535,DE
-1538961536,1538961599,IT
-1538961600,1538961823,DE
-1538961824,1538961839,GB
-1538961840,1538962263,DE
-1538962264,1538962271,GB
-1538962272,1538962415,DE
-1538962416,1538962431,US
-1538962432,1538962683,DE
-1538962684,1538962687,US
-1538962688,1538963071,DE
-1538963072,1538963087,GB
-1538963088,1538963264,DE
-1538963265,1538963278,GE
-1538963279,1538963280,DE
-1538963281,1538963294,GE
-1538963295,1538963407,DE
-1538963408,1538963423,GB
-1538963424,1538965503,DE
+1538957312,1538964991,DE
+1538964992,1538965247,GB
+1538965248,1538965503,DE
1538965504,1538973695,IR
1538973696,1538981887,JO
1538981888,1538990079,BY
@@ -64466,43 +21686,14 @@
1539022848,1539031039,LT
1539031040,1539039231,IT
1539039232,1539047423,PL
-1539047424,1539047583,IT
-1539047584,1539047591,US
-1539047592,1539048439,IT
-1539048440,1539048447,SG
-1539048448,1539048543,IT
-1539048544,1539048551,LY
-1539048552,1539048559,IT
-1539048560,1539048567,LY
-1539048568,1539048639,IT
-1539048640,1539048687,IQ
-1539048688,1539049215,IT
-1539049216,1539049223,LY
-1539049224,1539049255,IT
-1539049256,1539049263,LY
-1539049264,1539049311,IT
-1539049312,1539049327,LY
-1539049328,1539049335,IT
-1539049336,1539049343,LY
-1539049344,1539050263,IT
-1539050264,1539050271,TR
-1539050272,1539050367,IT
-1539050368,1539050375,FR
-1539050376,1539050383,IT
-1539050384,1539050399,FR
-1539050400,1539055471,IT
-1539055472,1539055487,FR
-1539055488,1539055615,IT
+1539047424,1539055615,IT
1539055616,1539063807,LV
1539063808,1539071999,FR
1539072000,1539080191,PL
1539080192,1539088383,UZ
1539088384,1539096575,RU
-1539096576,1539110655,TR
-1539110656,1539110687,US
-1539110688,1539112959,TR
1539112960,1539115007,PL
-1539115008,1539117055,CH
+1539115008,1539117055,AE
1539117056,1539123199,PL
1539123200,1539125247,SE
1539125248,1539127295,RU
@@ -64523,7 +21714,6 @@
1539151872,1539153919,UA
1539153920,1539155967,RU
1539155968,1539160063,NO
-1539160064,1539162111,RU
1539162112,1539164159,DE
1539164160,1539166207,DK
1539166208,1539168255,FI
@@ -64536,30 +21726,18 @@
1539194880,1539203071,RU
1539203072,1539207167,NL
1539207168,1539211263,RU
-1539211264,1539211775,CZ
-1539211776,1539212031,DE
-1539212032,1539212287,CZ
-1539212288,1539212543,DE
-1539212544,1539213311,CZ
+1539211264,1539213311,CZ
1539213312,1539215359,SE
1539215360,1539219455,DE
-1539219456,1539221503,GG
-1539221504,1539222527,FR
-1539222528,1539222783,HK
-1539222784,1539223039,CN
-1539223040,1539223103,ES
-1539223104,1539223167,BR
-1539223168,1539223231,IT
-1539223232,1539223295,DE
-1539223296,1539223551,US
+1539219456,1539221247,GG
+1539221248,1539221503,GB
+1539221504,1539223551,FR
1539223552,1539225599,RU
1539225600,1539227647,HU
1539227648,1539229695,FI
1539229696,1539231743,DE
1539231744,1539233791,BE
-1539233792,1539234303,LU
-1539234304,1539234559,IE
-1539234560,1539235839,LU
+1539233792,1539235839,LU
1539235840,1539237887,DE
1539237888,1539239935,RU
1539239936,1539244031,DE
@@ -64574,7 +21752,6 @@
1539297280,1539301375,BG
1539301376,1539309567,RU
1539309568,1539310591,PL
-1539310592,1539311615,UA
1539311616,1539312639,NL
1539312640,1539313663,DE
1539313664,1539314687,GB
@@ -64597,7 +21774,6 @@
1539333120,1539335167,RU
1539335168,1539336191,CH
1539336192,1539336703,UA
-1539336704,1539337215,EE
1539337216,1539338239,ES
1539338240,1539339263,SE
1539339264,1539340287,NL
@@ -64610,7 +21786,6 @@
1539348480,1539351551,UA
1539351552,1539352575,PL
1539352576,1539354623,RU
-1539354624,1539355647,PL
1539355648,1539357695,UA
1539357696,1539358719,RU
1539358720,1539359743,GB
@@ -64631,7 +21806,6 @@
1539375104,1539376127,NO
1539377152,1539378175,UA
1539378176,1539379199,PL
-1539379200,1539380223,EU
1539380224,1539381247,CH
1539381248,1539382271,RS
1539382272,1539383295,RO
@@ -64644,24 +21818,22 @@
1539388416,1539389439,PL
1539389440,1539389951,FR
1539389952,1539390463,RU
-1539390464,1539391487,RO
1539391488,1539392511,LV
1539392512,1539393535,UA
1539393536,1539393791,DE
1539393792,1539394047,PL
-1539394048,1539394303,EU
+1539394048,1539394303,RU
1539394304,1539394559,RS
1539394560,1539396607,UA
1539396608,1539397631,PL
1539397632,1539398143,RU
1539398144,1539398655,PL
1539398656,1539399679,ES
-1539399680,1539401727,PL
+1539399680,1539400703,PL
1539401728,1539402239,GB
1539402240,1539402751,FR
1539402752,1539403263,GB
1539403264,1539403775,RU
-1539404800,1539405823,EE
1539405824,1539406847,PL
1539406848,1539408895,UA
1539408896,1539409919,CZ
@@ -64669,7 +21841,6 @@
1539410944,1539411967,RU
1539411968,1539412991,PL
1539412992,1539414015,RU
-1539414016,1539415039,UA
1539415040,1539416063,BG
1539416064,1539417087,PL
1539417088,1539418111,UA
@@ -64679,7 +21850,6 @@
1539421184,1539422207,GB
1539422208,1539423231,PL
1539423232,1539424255,IE
-1539424256,1539425279,LV
1539425280,1539426303,PL
1539426304,1539427327,BG
1539427328,1539428351,UA
@@ -64689,17 +21859,15 @@
1539435520,1539437567,RU
1539437568,1539438591,GB
1539439616,1539440639,UA
-1539440640,1539441663,RU
+1539441152,1539441663,RU
1539441664,1539442175,IL
1539442176,1539442687,DE
1539442688,1539443199,NL
1539443200,1539444223,RU
-1539444224,1539444735,FR
1539444736,1539445247,RU
1539445248,1539445759,PL
1539445760,1539446271,FI
1539446272,1539446783,SE
-1539446784,1539447295,RU
1539447296,1539447807,SE
1539447808,1539448831,RO
1539448832,1539449343,AT
@@ -64711,8 +21879,6 @@
1539452416,1539452927,GB
1539452928,1539453439,CH
1539453440,1539453951,UA
-1539453952,1539454463,GB
-1539454464,1539454975,RU
1539454976,1539455487,UA
1539455488,1539455999,RU
1539456000,1539456511,FR
@@ -64733,16 +21899,13 @@
1539464704,1539465215,DK
1539465216,1539466751,FR
1539466752,1539467263,KW
-1539467264,1539467775,RU
1539467776,1539468287,PL
1539468288,1539468799,DE
1539468800,1539469823,RU
1539469824,1539470335,IL
1539470336,1539470847,GB
-1539470848,1539471359,SE
1539471360,1539471871,RU
1539471872,1539472383,PL
-1539472384,1539472895,UA
1539472896,1539473407,GB
1539473408,1539473919,FR
1539473920,1539474431,KW
@@ -64750,30 +21913,26 @@
1539474944,1539475455,UA
1539475456,1539475967,NL
1539475968,1539476479,PL
-1539476480,1539476991,CZ
1539476992,1539477503,IT
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
1539481600,1539482111,RU
1539482112,1539482623,UA
1539482624,1539483135,RU
-1539483136,1539483647,ES
1539483648,1539484159,UA
-1539484160,1539484671,GB
1539484672,1539485695,RU
1539485696,1539486207,RO
1539486208,1539486719,FR
1539486720,1539487231,DE
-1539487232,1539488255,RU
+1539487744,1539488255,RU
1539488256,1539488767,SE
1539488768,1539489279,PL
-1539489280,1539490815,RU
+1539489280,1539490303,RU
1539490816,1539491327,CH
1539491328,1539491839,PL
1539491840,1539492351,RU
@@ -64794,7 +21953,6 @@
1539500544,1539501055,RO
1539501056,1539501567,BE
1539501568,1539502079,UA
-1539502080,1539502591,PL
1539502592,1539503103,HR
1539503104,1539504127,RU
1539504128,1539504639,AT
@@ -64823,17 +21981,14 @@
1539517440,1539517951,RO
1539517952,1539518463,PL
1539518464,1539518975,DE
-1539518976,1539519487,RU
1539519488,1539519999,UA
1539520000,1539520511,DE
1539520512,1539521023,PL
1539521024,1539521535,DK
1539521536,1539522047,RU
1539522048,1539522559,RO
-1539522560,1539523071,RU
-1539523072,1539523583,RO
1539523584,1539524095,UA
-1539524096,1539524607,GR
+1539524096,1539524607,GB
1539524608,1539525119,FR
1539525120,1539525631,UA
1539525632,1539526143,SE
@@ -64876,7 +22031,6 @@
1539547136,1539547647,NL
1539547648,1539548159,IL
1539548160,1539548671,FR
-1539548672,1539549183,EU
1539549184,1539549695,GB
1539549696,1539550207,RU
1539550208,1539550719,UA
@@ -64897,7 +22051,6 @@
1539558400,1539558911,RU
1539558912,1539559423,FR
1539559424,1539560447,RU
-1539560448,1539560959,GB
1539560960,1539561471,UA
1539561472,1539561983,RO
1539561984,1539563007,DE
@@ -64919,20 +22072,16 @@
1539571712,1539572735,UA
1539572736,1539573759,RU
1539573760,1539575807,PL
-1539575808,1539576831,LV
1539576832,1539577855,GB
1539577856,1539578879,RU
1539578880,1539579903,PL
1539579904,1539580927,RU
1539580928,1539581951,AM
-1539581952,1539582975,RU
1539582976,1539583999,RO
1539584000,1539585023,PL
1539585024,1539586047,UA
1539586048,1539587071,PL
1539587072,1539588095,UA
-1539588096,1539589119,BG
-1539589120,1539590143,GB
1539590144,1539591167,RU
1539591168,1539592191,UZ
1539592192,1539593215,UA
@@ -64961,13 +22110,11 @@
1539624960,1539625983,RU
1539625984,1539627007,PL
1539627008,1539628031,RU
-1539628032,1539629055,UA
1539629056,1539630079,BG
1539630080,1539631103,UA
-1539631104,1539632127,CN
1539632128,1539633151,RU
1539633152,1539634175,SE
-1539634176,1539638271,RU
+1539634176,1539637247,RU
1539638272,1539639295,UA
1539639296,1539640319,RU
1539640320,1539641343,PL
@@ -64976,8 +22123,6 @@
1539643392,1539644415,UA
1539644416,1539645439,DE
1539645440,1539646463,GB
-1539646464,1539647487,IE
-1539647488,1539648511,RU
1539648512,1539649023,CY
1539649024,1539649535,LB
1539649536,1539650559,UA
@@ -65010,7 +22155,6 @@
1539681280,1539684351,RU
1539684352,1539685375,UA
1539685376,1539688447,RU
-1539688448,1539689471,SA
1539689472,1539690495,RU
1539690496,1539691519,FI
1539691520,1539692543,RU
@@ -65019,7 +22163,6 @@
1539695616,1539696639,GB
1539696640,1539697663,RU
1539697664,1539698687,UA
-1539698688,1539699711,GE
1539699712,1539700735,RO
1539700736,1539701759,DK
1539701760,1539702783,UA
@@ -65043,13 +22186,12 @@
1539707648,1539707903,AE
1539707904,1539708159,PL
1539708160,1539708415,DE
-1539708416,1539708671,GB
+1539708416,1539708671,NL
1539708672,1539708927,RO
1539708928,1539709183,IE
1539709184,1539709439,AT
1539709440,1539709695,BE
1539709696,1539709951,NL
-1539709952,1539710207,TR
1539710208,1539710463,GB
1539710464,1539710719,FR
1539710720,1539710975,UA
@@ -65067,7 +22209,6 @@
1539714304,1539714559,AT
1539714560,1539714815,RU
1539714816,1539715071,PT
-1539715072,1539715327,SE
1539715328,1539715583,TR
1539715584,1539715839,UA
1539715840,1539716095,RU
@@ -65092,7 +22233,6 @@
1539721728,1539721983,PL
1539721984,1539722239,RU
1539722240,1539722495,PL
-1539722496,1539722751,GB
1539722752,1539723007,DE
1539723008,1539723263,CH
1539723264,1539723519,PL
@@ -65123,12 +22263,9 @@
1539729664,1539729919,FR
1539729920,1539730175,NL
1539730176,1539730431,GB
-1539730432,1539730687,GR
-1539730688,1539730943,KZ
1539730944,1539731455,PL
1539731456,1539731711,SI
1539731712,1539732223,DE
-1539732224,1539732479,FR
1539732480,1539732735,UA
1539732736,1539732991,DK
1539732992,1539733247,PL
@@ -65159,7 +22296,6 @@
1539739392,1539739647,UA
1539739648,1539739903,DK
1539739904,1539740415,PL
-1539740416,1539740671,RO
1539740672,1539740927,AT
1539740928,1539741183,RU
1539741184,1539741439,PL
@@ -65170,7 +22306,6 @@
1539742464,1539742719,RU
1539742720,1539742975,LV
1539742976,1539743231,DE
-1539743232,1539743487,GR
1539743488,1539743743,FR
1539743744,1539743999,RO
1539744000,1539744255,PL
@@ -65179,7 +22314,6 @@
1539744768,1539745023,SE
1539745024,1539745279,GB
1539745280,1539745535,GI
-1539745536,1539745791,CH
1539745792,1539746303,DK
1539746560,1539746815,RU
1539746816,1539747071,DK
@@ -65195,18 +22329,16 @@
1539749376,1539749631,PT
1539749632,1539749887,GR
1539749888,1539750143,RU
-1539750144,1539750399,TR
1539750400,1539750655,PL
1539750656,1539750911,DE
1539750912,1539751167,UA
-1539751168,1539751423,AT
+1539751168,1539751423,DE
1539751424,1539751679,SI
1539751680,1539751935,FR
1539751936,1539752191,DE
1539752192,1539752447,SE
1539752448,1539752703,PL
1539752704,1539752959,AT
-1539752960,1539753215,RO
1539753216,1539753471,DE
1539753472,1539753727,HU
1539753728,1539754239,FR
@@ -65217,16 +22349,14 @@
1539755264,1539755519,IL
1539755520,1539755775,EE
1539755776,1539756031,MT
-1539756032,1539756543,PL
+1539756288,1539756543,PL
1539756800,1539757055,BE
1539757056,1539757567,RU
1539757568,1539757823,SI
1539757824,1539758079,UA
1539758080,1539758335,HR
1539758336,1539758591,PL
-1539758592,1539758847,NL
1539758848,1539759103,BA
-1539759104,1539759359,DK
1539759360,1539759615,RU
1539759616,1539759871,PL
1539759872,1539760127,SE
@@ -65236,7 +22366,6 @@
1539760896,1539761151,DK
1539761152,1539761407,DE
1539761408,1539761663,CH
-1539761664,1539761919,PL
1539761920,1539762175,RU
1539762176,1539762431,PL
1539762432,1539762687,UA
@@ -65270,7 +22399,6 @@
1539769856,1539770111,FR
1539770112,1539770367,GR
1539770368,1539770623,DE
-1539770624,1539770879,FR
1539770880,1539771135,RU
1539771136,1539771391,FR
1539771392,1539771647,PL
@@ -65291,7 +22419,6 @@
1539775488,1539775743,UA
1539775744,1539775999,IL
1539776256,1539776511,SK
-1539776512,1539776767,HU
1539776768,1539777023,UA
1539777024,1539777279,RU
1539777280,1539777535,UA
@@ -65301,12 +22428,9 @@
1539778304,1539778559,LB
1539778560,1539778815,RU
1539778816,1539779071,RO
-1539779072,1539779327,GB
-1539779328,1539779583,NL
-1539779584,1539779839,PL
+1539779328,1539779583,CH
1539779840,1539780095,NL
1539780096,1539780351,RU
-1539780352,1539780607,AT
1539780608,1539780863,PL
1539780864,1539781119,RO
1539781120,1539781375,NL
@@ -65338,14 +22462,13 @@
1539788032,1539788287,HR
1539788288,1539788543,GB
1539788544,1539788799,HR
-1539788800,1539789311,RU
+1539788800,1539789055,RU
1539789568,1539789823,DE
1539789824,1539790079,NL
1539790080,1539790335,CH
1539790336,1539790591,LV
1539790848,1539791103,DE
1539791104,1539791359,PL
-1539791360,1539791615,RU
1539791616,1539792383,UA
1539792384,1539792639,IL
1539792640,1539792895,PL
@@ -65354,7 +22477,6 @@
1539793408,1539793663,CH
1539793664,1539794175,IL
1539794176,1539794431,PL
-1539794432,1539794687,DK
1539794688,1539794943,FR
1539794944,1539795199,RO
1539795200,1539795455,PL
@@ -65375,7 +22497,6 @@
1539799040,1539799295,ES
1539799296,1539799551,DK
1539799552,1539799807,ES
-1539799808,1539800063,RO
1539800064,1539800319,SI
1539800320,1539800575,GB
1539800576,1539800831,LV
@@ -65395,7 +22516,6 @@
1539804928,1539805439,UA
1539805440,1539805695,AT
1539805696,1539805951,CH
-1539805952,1539806207,RU
1539806208,1539806463,FI
1539806464,1539806719,RU
1539806720,1539806975,BG
@@ -65408,10 +22528,8 @@
1539808512,1539808767,GB
1539808768,1539809023,DE
1539809024,1539809279,GB
-1539809280,1539809535,EU
1539809536,1539809791,SI
1539809792,1539810047,DE
-1539810048,1539810303,UA
1539810304,1539810559,CZ
1539810560,1539810815,DE
1539810816,1539811071,TR
@@ -65419,18 +22537,15 @@
1539811584,1539811839,DE
1539811840,1539812095,IT
1539812096,1539812351,RU
-1539812352,1539812607,CH
1539812608,1539812863,IT
1539812864,1539813119,RU
1539813120,1539813375,AT
1539813376,1539813631,PL
1539813632,1539813887,NL
1539813888,1539814143,RU
-1539814144,1539814399,NL
1539814400,1539814911,GB
1539814912,1539815167,UA
1539815168,1539815423,GB
-1539815424,1539815935,RU
1539815936,1539816191,CH
1539816192,1539816447,SA
1539816448,1539816703,UA
@@ -65438,7 +22553,6 @@
1539816960,1539817215,DK
1539817216,1539817471,TR
1539817472,1539817727,DE
-1539817728,1539817983,PL
1539817984,1539818239,UA
1539818240,1539818495,NO
1539818496,1539819007,RU
@@ -65446,7 +22560,7 @@
1539819264,1539819519,RO
1539819520,1539819775,AT
1539819776,1539820031,SI
-1539820032,1539820287,VG
+1539820032,1539820287,IL
1539820288,1539820543,PL
1539820544,1539820799,ES
1539820800,1539821055,RU
@@ -65455,7 +22569,6 @@
1539821568,1539821823,DK
1539821824,1539822079,DE
1539822080,1539822335,RO
-1539822336,1539822591,RU
1539822592,1539822847,GB
1539822848,1539823103,IE
1539823104,1539823359,DE
@@ -65490,7 +22603,6 @@
1539831040,1539831295,UA
1539831296,1539831551,PL
1539831552,1539831807,DE
-1539831808,1539832063,RU
1539832064,1539832319,GB
1539832320,1539832575,PL
1539832576,1539832831,RU
@@ -65514,10 +22626,8 @@
1539853312,1539854335,PL
1539854336,1539855359,UA
1539855360,1539856383,RU
-1539856384,1539857407,UA
1539857408,1539858431,PL
1539858432,1539859455,RO
-1539859456,1539860479,DE
1539860480,1539861503,PL
1539861504,1539862527,DE
1539862528,1539863551,UA
@@ -65529,16 +22639,13 @@
1539868672,1539869695,UA
1539869696,1539870719,ES
1539870720,1539871743,IL
-1539871744,1539872767,ES
1539872768,1539873791,SE
1539873792,1539875839,UA
-1539875840,1539876863,MD
+1539875840,1539876863,RU
1539876864,1539877887,ES
1539877888,1539878911,PL
-1539878912,1539879935,EU
1539879936,1539880959,UA
1539880960,1539881983,PL
-1539881984,1539883007,UA
1539883008,1539884031,RS
1539884032,1539885055,MT
1539885056,1539886079,UA
@@ -65553,19 +22660,17 @@
1539896320,1539898367,UA
1539898368,1539899391,CZ
1539899392,1539900415,RU
-1539900416,1539901439,EU
1539901440,1539902463,RU
1539902464,1539903487,LV
1539903488,1539904511,PL
1539904512,1539905535,CZ
-1539905536,1539907583,UA
-1539907584,1539908607,EU
-1539908608,1539910655,UA
+1539905536,1539906559,UA
+1539908608,1539909631,UA
+1539909632,1539910655,RU
1539910656,1539911679,PL
1539911680,1539913727,RU
1539913728,1539914751,CH
1539914752,1539915775,SE
-1539915776,1539916799,RU
1539916800,1539917823,UA
1539917824,1539918847,RU
1539918848,1539920895,RO
@@ -65574,7 +22679,6 @@
1539922944,1539923967,SE
1539923968,1539924991,RU
1539924992,1539926015,DE
-1539926016,1539927039,RU
1539927040,1539928063,UA
1539928064,1539930111,RU
1539930112,1539931135,PL
@@ -65594,12 +22698,11 @@
1539946496,1539947519,RU
1539947520,1539948543,UA
1539948544,1539949567,RO
-1539949568,1539950591,MD
1539950592,1539950847,GB
1539950848,1539951103,RU
1539951104,1539951615,UA
1539951616,1539953663,RU
-1539953664,1539954175,CH
+1539953664,1539954175,AT
1539954176,1539954687,KZ
1539954688,1539956735,RO
1539956736,1539957759,UA
@@ -65610,7 +22713,6 @@
1539965952,1539966975,RU
1539966976,1539967999,UA
1539968000,1539972095,RU
-1539972096,1539973119,GB
1539974144,1539975167,RU
1539975168,1539976191,DE
1539976192,1539977215,RU
@@ -65645,16 +22747,14 @@
1540008960,1540011007,PL
1540011008,1540014079,RU
1540014080,1540015103,PL
-1540015104,1540016127,RU
-1540016128,1540017151,DE
-1540017152,1540019199,RU
-1540019200,1540020223,UA
+1540015104,1540018175,RU
+1540018176,1540020223,UA
1540020224,1540022271,RU
1540022272,1540023295,GB
1540023296,1540024319,PL
1540024320,1540025343,RU
1540025344,1540026367,GB
-1540026368,1540028415,UA
+1540026368,1540027391,UA
1540029440,1540031487,RU
1540031488,1540032511,UA
1540032512,1540033535,RU
@@ -65674,12 +22774,9 @@
1540046848,1540047871,RU
1540047872,1540048895,LV
1540048896,1540049919,GB
-1540049920,1540050943,UA
1540050944,1540052991,RU
-1540052992,1540055039,UA
-1540055040,1540055423,EU
-1540055424,1540055551,NO
-1540055552,1540056063,EU
+1540052992,1540054015,UA
+1540055040,1540056063,NO
1540056064,1540057087,NL
1540057088,1540057343,PL
1540057344,1540057599,RU
@@ -65688,7 +22785,6 @@
1540058112,1540059135,DE
1540059136,1540060159,UA
1540060160,1540061183,NO
-1540061184,1540062207,A2
1540062208,1540063231,RU
1540063232,1540064255,NL
1540064256,1540065279,PL
@@ -65698,7 +22794,9 @@
1540070400,1540071423,PL
1540071424,1540072447,SE
1540072448,1540073471,UA
-1540073472,1540077567,RU
+1540073472,1540074495,RU
+1540074496,1540075519,UZ
+1540075520,1540077567,RU
1540077568,1540078591,FR
1540078592,1540081663,RU
1540081664,1540082687,DE
@@ -65706,7 +22804,8 @@
1540083712,1540084735,RU
1540084736,1540085759,NL
1540085760,1540087807,PL
-1540087808,1540092927,RU
+1540087808,1540088831,RU
+1540089856,1540092927,RU
1540092928,1540094975,PL
1540094976,1540095999,RU
1540096000,1540097023,SE
@@ -65714,7 +22813,7 @@
1540099072,1540100095,UA
1540100096,1540103167,RU
1540103168,1540105215,DE
-1540105216,1540110335,UA
+1540105216,1540106239,UA
1540110336,1540111359,RU
1540111360,1540112383,UA
1540112384,1540113407,LV
@@ -65739,21 +22838,18 @@
1540136960,1540137983,PL
1540137984,1540139007,RU
1540139008,1540140031,DE
-1540140032,1540140287,US
-1540140288,1540141055,GB
+1540140032,1540141055,GB
1540141056,1540142079,RU
1540142080,1540143103,UA
1540143104,1540144127,RU
1540144128,1540145151,AM
-1540145152,1540145407,EU
-1540145408,1540146175,AT
+1540145152,1540146175,AT
1540146176,1540147199,UA
1540147200,1540148223,RU
1540148224,1540149247,PL
1540149248,1540150271,GB
1540150272,1540151295,UA
1540151296,1540152319,AT
-1540152320,1540153343,SE
1540153344,1540156415,RU
1540156416,1540157439,UZ
1540157440,1540158463,RU
@@ -65785,8 +22881,6 @@
1540185088,1540186111,RU
1540186112,1540187135,NL
1540187136,1540188159,US
-1540188160,1540189183,KZ
-1540189184,1540190207,GB
1540190208,1540191231,PT
1540191232,1540192255,FR
1540192256,1540195327,RU
@@ -65801,7 +22895,6 @@
1540205568,1540206591,DE
1540206592,1540208639,RU
1540208640,1540209663,NO
-1540209664,1540210687,RU
1540210688,1540211455,NL
1540211456,1540211711,CZ
1540212736,1540213759,RU
@@ -65812,11 +22905,8 @@
1540217856,1540218879,GB
1540218880,1540219903,RU
1540219904,1540220927,PL
-1540220928,1540221441,NL
-1540221442,1540221569,US
-1540221570,1540221825,NL
-1540221826,1540222081,US
-1540222082,1540223999,RU
+1540220928,1540221951,US
+1540221952,1540223999,RU
1540224000,1540225023,PL
1540225024,1540226047,GB
1540226048,1540227071,RU
@@ -65827,7 +22917,7 @@
1540229120,1540229631,AT
1540229632,1540230143,NL
1540230144,1540232191,RU
-1540232192,1540232703,BG
+1540232192,1540232703,LU
1540232704,1540233215,RU
1540233216,1540233727,CH
1540233728,1540234239,PL
@@ -65846,7 +22936,7 @@
1540242944,1540243455,RU
1540243456,1540243967,PL
1540243968,1540244479,RU
-1540244480,1540244991,CH
+1540244480,1540244735,CH
1540244992,1540245503,DE
1540245504,1540246015,RU
1540246016,1540246527,IT
@@ -65858,7 +22948,6 @@
1540249600,1540250111,KZ
1540250112,1540250367,PL
1540250368,1540250623,CZ
-1540250624,1540251135,RU
1540251136,1540251647,GB
1540251648,1540252159,PL
1540252160,1540252671,DE
@@ -65932,23 +23021,19 @@
1540291072,1540291583,BE
1540291584,1540292095,UA
1540292096,1540292607,RU
-1540292608,1540293119,FR
1540293120,1540293631,DK
1540293632,1540295167,UA
1540295168,1540295679,PL
-1540295680,1540296191,SA
1540296192,1540296703,PL
1540296704,1540297215,DE
1540297216,1540298239,FR
1540298240,1540298751,HR
1540298752,1540299263,RU
1540299264,1540299775,UA
-1540299776,1540300287,KZ
+1540299776,1540300287,KG
1540300288,1540300799,RU
1540300800,1540301311,DK
-1540301312,1540301568,IL
-1540301569,1540301569,A2
-1540301570,1540301823,IL
+1540301312,1540301823,IL
1540301824,1540302847,GB
1540302848,1540303871,RU
1540303872,1540304895,UA
@@ -65968,15 +23053,12 @@
1540313600,1540315135,RU
1540315136,1540315647,UA
1540315648,1540316159,IL
-1540316160,1540316415,EU
-1540316416,1540316671,DE
+1540316160,1540316671,DE
1540316672,1540317183,RO
-1540317184,1540317695,KG
1540317696,1540318207,UA
1540318208,1540318719,RU
1540318720,1540319231,RO
1540319232,1540320255,UA
-1540320256,1540320767,RU
1540320768,1540321279,GB
1540321280,1540321791,SE
1540321792,1540322303,RU
@@ -65997,7 +23079,6 @@
1540330496,1540331007,PL
1540331008,1540331519,IT
1540331520,1540332031,GB
-1540332032,1540332543,RU
1540332544,1540333055,PL
1540333056,1540333567,NO
1540333568,1540334079,RO
@@ -66005,16 +23086,14 @@
1540334592,1540335103,RU
1540335104,1540336127,PL
1540336128,1540336639,RU
-1540336640,1540337663,MC
1540337664,1540338175,FR
-1540338176,1540339199,RU
+1540338688,1540339199,RU
1540339200,1540339711,UA
1540339712,1540340735,PL
1540340736,1540341247,CZ
1540341248,1540341759,BG
1540341760,1540342271,GB
1540342272,1540342783,UA
-1540342784,1540343295,ES
1540343296,1540343807,GB
1540343808,1540344831,PL
1540344832,1540345343,UA
@@ -66030,7 +23109,6 @@
1540350464,1540350975,NO
1540350976,1540351487,DK
1540352000,1540352511,NL
-1540352512,1540353023,RU
1540353024,1540353535,GR
1540353536,1540354047,RU
1540354048,1540354559,IL
@@ -66058,9 +23136,7 @@
1540361984,1540362239,EE
1540362240,1540362495,RU
1540362496,1540363007,DE
-1540363008,1540363263,FR
1540363264,1540363519,RU
-1540363520,1540363775,GB
1540363776,1540364031,IS
1540364032,1540364287,RU
1540364288,1540364543,NO
@@ -66070,7 +23146,6 @@
1540365312,1540365567,GB
1540365568,1540365823,RU
1540365824,1540366079,CH
-1540366080,1540366335,IE
1540366336,1540366591,PL
1540366592,1540366847,RU
1540366848,1540367103,AT
@@ -66084,7 +23159,6 @@
1540368896,1540369407,RU
1540369408,1540369663,PL
1540369664,1540369919,DE
-1540369920,1540370175,UA
1540370176,1540370431,DE
1540370432,1540370687,LB
1540370688,1540370943,NL
@@ -66094,7 +23168,6 @@
1540371712,1540371967,GB
1540371968,1540372223,NO
1540372224,1540372479,PL
-1540372480,1540372735,EU
1540372736,1540372991,GR
1540372992,1540373247,DE
1540373248,1540373503,UA
@@ -66106,7 +23179,6 @@
1540374784,1540375039,UA
1540375040,1540375551,GB
1540375552,1540375807,DE
-1540375808,1540376063,NL
1540376064,1540376319,TR
1540376320,1540376575,DK
1540376576,1540376831,PL
@@ -66122,7 +23194,6 @@
1540379136,1540379391,CH
1540379392,1540379647,DE
1540379648,1540379903,RU
-1540379904,1540380159,EU
1540380160,1540380415,IL
1540380416,1540380671,NL
1540380672,1540380927,SI
@@ -66141,7 +23212,6 @@
1540384000,1540384255,SI
1540384256,1540384511,FR
1540384512,1540384767,SE
-1540384768,1540385023,HR
1540385024,1540385279,GB
1540385280,1540385535,PL
1540385536,1540385791,DE
@@ -66149,7 +23219,6 @@
1540386304,1540386559,NL
1540386560,1540386815,GB
1540386816,1540387071,NL
-1540387072,1540387327,RU
1540387328,1540387583,GB
1540387584,1540388095,UA
1540388096,1540388351,GB
@@ -66163,7 +23232,6 @@
1540390144,1540390399,SI
1540390400,1540390655,RU
1540390656,1540390911,UA
-1540390912,1540391167,SA
1540391168,1540391423,IL
1540391424,1540391679,CH
1540391680,1540391935,NL
@@ -66191,7 +23259,7 @@
1540398080,1540398335,SA
1540398336,1540398591,DK
1540398592,1540399359,DE
-1540399360,1540399871,RU
+1540399360,1540399615,RU
1540399872,1540400127,GB
1540400128,1540400383,NL
1540400384,1540400639,IR
@@ -66222,7 +23290,6 @@
1540407808,1540408063,UA
1540408064,1540408319,IT
1540408320,1540408575,NL
-1540408576,1540408831,HR
1540408832,1540409087,UA
1540409088,1540409343,TR
1540409344,1540409599,SI
@@ -66231,9 +23298,7 @@
1540410112,1540410367,KW
1540410368,1540410623,CH
1540410624,1540410879,RU
-1540410880,1540411135,TR
-1540411136,1540411391,SG
-1540411392,1540411647,RU
+1540411136,1540411391,NL
1540411648,1540411903,FR
1540411904,1540412159,RU
1540412160,1540412415,BE
@@ -66253,21 +23318,18 @@
1540415744,1540415999,SI
1540416000,1540416255,FR
1540416256,1540416511,CH
-1540416512,1540416767,RU
1540416768,1540417023,NL
-1540417024,1540417279,RU
1540417280,1540417535,UA
1540417536,1540417791,RU
1540417792,1540418047,HR
1540418048,1540418559,RO
1540418816,1540419071,FR
1540419072,1540419327,RU
-1540419328,1540419839,GB
+1540419328,1540419583,GB
1540419840,1540420095,NL
1540420096,1540420607,GB
1540420608,1540420863,DE
1540420864,1540421119,GB
-1540421120,1540421375,RU
1540421376,1540421631,PL
1540421632,1540422143,RU
1540422144,1540422399,PL
@@ -66288,7 +23350,6 @@
1540426240,1540426495,IE
1540426496,1540426751,UA
1540426752,1540427263,NL
-1540427264,1540427519,RU
1540427520,1540427775,FR
1540427776,1540428287,RU
1540428288,1540428543,SI
@@ -66311,14 +23372,12 @@
1540433152,1540433407,GB
1540433408,1540433663,AM
1540433664,1540433919,DK
-1540433920,1540434175,GB
1540434176,1540434431,CH
1540434432,1540434687,DE
1540434688,1540434943,GB
1540434944,1540435199,FR
1540435200,1540435455,RO
1540435456,1540435967,GR
-1540435968,1540436223,RU
1540436224,1540436479,SI
1540436480,1540436735,GB
1540436736,1540436991,UA
@@ -66327,22 +23386,21 @@
1540437504,1540438015,UA
1540438016,1540438271,PL
1540438272,1540438527,US
-1540438528,1540439039,RU
+1540438784,1540439039,RU
1540439040,1540439295,GB
1540439296,1540439551,RO
-1540439552,1540440063,PL
1540440064,1540440319,UA
1540440320,1540440575,RU
1540440576,1540440831,MD
1540440832,1540441087,RU
-1540441088,1540441343,PL
1540441344,1540441855,RU
1540441856,1540442111,GB
1540442112,1540442367,RU
1540442368,1540442623,GB
1540442624,1540442879,IE
1540442880,1540443135,AT
-1540443136,1540443647,RU
+1540443136,1540443391,RU
+1540443392,1540443647,CZ
1540443648,1540443903,FR
1540443904,1540444159,GB
1540444160,1540444415,RU
@@ -66363,7 +23421,6 @@
1540448256,1540448511,UA
1540448512,1540448767,IT
1540448768,1540449023,CH
-1540449280,1540449535,UA
1540449536,1540449791,CZ
1540449792,1540450047,RO
1540450048,1540450303,DE
@@ -66378,7 +23435,6 @@
1540452352,1540452607,AT
1540452608,1540452863,IL
1540452864,1540453119,HU
-1540453120,1540453375,RU
1540453376,1540453631,PL
1540453632,1540453887,FR
1540453888,1540454143,UA
@@ -66407,7 +23463,6 @@
1540461056,1540461311,BG
1540461312,1540461823,RU
1540462080,1540462335,SI
-1540462336,1540462591,UA
1540462592,1540463103,PL
1540463104,1540463359,FR
1540463360,1540463615,PL
@@ -66416,9 +23471,8 @@
1540464128,1540464383,CH
1540464384,1540464895,DE
1540464896,1540465407,GB
-1540465408,1540465663,ES
1540465664,1540465919,NL
-1540465920,1540466175,RU
+1540465920,1540466175,UA
1540466176,1540466431,DK
1540466432,1540466687,RU
1540466688,1540466943,NL
@@ -66430,13 +23484,10 @@
1540468736,1540468991,UA
1540468992,1540469247,PL
1540469248,1540469503,GB
-1540469504,1540469759,RO
1540469760,1540470015,PL
1540470016,1540470271,SI
1540470272,1540470527,IL
-1540470528,1540471039,RU
1540471040,1540471295,DE
-1540471296,1540471551,RU
1540471552,1540471807,GB
1540471808,1540472063,SI
1540472064,1540472319,RO
@@ -66469,13 +23520,10 @@
1540480000,1540480255,GB
1540480256,1540480767,PL
1540480768,1540481023,GB
-1540481024,1540481279,LT
1540481280,1540481535,GB
1540481536,1540481791,UA
-1540481792,1540482047,RU
1540482048,1540482303,DK
1540482304,1540482559,FR
-1540482560,1540482815,CH
1540482816,1540483071,DE
1540483072,1540483327,SE
1540483328,1540483839,RU
@@ -66511,7 +23559,6 @@
1540500480,1540501503,RU
1540501504,1540502527,PL
1540502528,1540503551,RU
-1540503552,1540504575,NL
1540504576,1540505599,SE
1540505600,1540506623,RO
1540506624,1540507647,GB
@@ -66521,7 +23568,6 @@
1540510720,1540511743,RU
1540511744,1540512767,BG
1540512768,1540514815,RU
-1540514816,1540515839,GB
1540515840,1540516863,RU
1540516864,1540517887,UA
1540517888,1540518911,RU
@@ -66561,12 +23607,11 @@
1540564992,1540566015,DE
1540566016,1540567039,RU
1540567040,1540568063,MD
-1540568064,1540572159,RU
+1540568064,1540571135,RU
1540572160,1540573183,UA
1540573184,1540574207,NL
1540574208,1540576255,RU
1540576256,1540577279,PL
-1540577280,1540578303,RO
1540578304,1540579327,RU
1540579328,1540580351,IE
1540580352,1540581375,PL
@@ -66577,7 +23622,6 @@
1540586496,1540588543,RU
1540588544,1540589567,UA
1540589568,1540593663,RU
-1540593664,1540594687,GB
1540594688,1540595711,IT
1540595712,1540596735,UZ
1540596736,1540597759,FR
@@ -66585,14 +23629,13 @@
1540598784,1540600831,UA
1540600832,1540602879,RU
1540602880,1540603903,BG
-1540603904,1540605951,RU
+1540603904,1540604927,RU
1540605952,1540606975,MD
1540606976,1540607999,UA
1540608000,1540609023,RU
1540609024,1540610047,UA
1540610048,1540611071,RU
1540611072,1540612095,PL
-1540612096,1540613119,TR
1540613120,1540614143,RU
1540614144,1540615167,BG
1540615168,1540616191,RU
@@ -66613,7 +23656,6 @@
1540622850,1540622853,RU
1540622854,1540622854,GB
1540622855,1540623103,RU
-1540623104,1540623359,SE
1540623360,1540623615,GB
1540623616,1540623871,BG
1540624128,1540624383,RS
@@ -66621,14 +23663,12 @@
1540624640,1540624895,BG
1540624896,1540625151,GB
1540625152,1540625407,IR
-1540625408,1540625663,RU
1540625664,1540625919,FR
1540625920,1540626175,UA
1540626176,1540626431,RO
1540626432,1540626687,SI
1540626688,1540626943,PL
1540626944,1540627199,FR
-1540627200,1540627455,PL
1540627456,1540627711,DK
1540627712,1540627967,CH
1540627968,1540628223,PL
@@ -66639,10 +23679,8 @@
1540629248,1540629503,RO
1540629504,1540629759,DK
1540629760,1540630015,BG
-1540630016,1540630271,DE
1540630272,1540630527,RO
1540630528,1540630783,CH
-1540630784,1540631039,RU
1540631040,1540631295,NL
1540631296,1540631551,CH
1540631552,1540631807,HR
@@ -66650,13 +23688,9 @@
1540632064,1540632319,AT
1540632320,1540632575,RU
1540632576,1540632831,DK
-1540632832,1540633087,GB
1540633088,1540633343,RU
-1540633344,1540633599,CH
1540633600,1540633855,RO
1540633856,1540634111,AE
-1540634112,1540634367,GB
-1540634368,1540634623,FR
1540634624,1540634879,UA
1540634880,1540635135,RU
1540635136,1540635391,FR
@@ -66665,18 +23699,14 @@
1540636160,1540636415,RO
1540636416,1540636671,LV
1540636672,1540636927,RU
-1540636928,1540637183,UA
1540637184,1540637439,RO
1540637440,1540637695,SA
1540637696,1540637951,RU
1540637952,1540638207,RS
1540638208,1540638463,RO
1540638464,1540638719,AM
-1540638720,1540638975,UA
1540639232,1540639487,RO
-1540639488,1540639491,CH
-1540639492,1540639492,EU
-1540639493,1540639743,CH
+1540639488,1540639743,CH
1540639744,1540639999,IL
1540640000,1540640255,CH
1540640256,1540640511,FR
@@ -66727,8 +23757,7 @@
1540653056,1540653311,FR
1540653312,1540653567,DK
1540653568,1540653823,DE
-1540653824,1540654079,GB
-1540654080,1540654335,EU
+1540653824,1540654335,GB
1540654336,1540654591,RU
1540654592,1540654847,SI
1540654848,1540655103,RU
@@ -66736,7 +23765,7 @@
1540655360,1540655615,RU
1540655616,1540655871,GB
1540655872,1540656383,NL
-1540656384,1540656895,RU
+1540656640,1540656895,RU
1540656896,1540657151,RO
1540657152,1540657407,DE
1540657408,1540657663,CY
@@ -66794,7 +23823,7 @@
1540673280,1540673535,SE
1540673536,1540673791,SI
1540673792,1540674047,SE
-1540674048,1540674303,NL
+1540674048,1540674303,GB
1540674304,1540674559,FR
1540674560,1540674815,GB
1540674816,1540675071,GE
@@ -66882,7 +23911,6 @@
1540697856,1540698111,NO
1540698112,1540698367,DE
1540698368,1540698623,IE
-1540698624,1540698879,EU
1540698880,1540699135,RU
1540699136,1540699391,GR
1540699392,1540699647,NL
@@ -66899,14 +23927,12 @@
1540702464,1540702719,PT
1540702720,1540702975,DK
1540702976,1540703231,RU
-1540703232,1540703487,DE
+1540703232,1540703487,GB
1540703488,1540703743,NL
1540703744,1540703999,DK
1540704000,1540704255,PL
1540704256,1540704511,KZ
1540704512,1540704767,IE
-1540704768,1540705023,UA
-1540705024,1540705279,HU
1540705280,1540705535,RO
1540705536,1540705791,AT
1540705792,1540706047,NL
@@ -66946,7 +23972,6 @@
1540715520,1540715775,DE
1540716032,1540716287,PL
1540716288,1540716543,UA
-1540716544,1540716799,RU
1540716800,1540717055,UA
1540717056,1540717311,CZ
1540717312,1540717823,PL
@@ -67032,7 +24057,6 @@
1540740608,1540740863,NL
1540740864,1540741119,RO
1540741120,1540741375,GB
-1540741376,1540741631,EU
1540741632,1540742143,NL
1540742144,1540742399,RU
1540742400,1540742655,DE
@@ -67072,7 +24096,8 @@
1540755456,1540756479,UA
1540756480,1540757503,DK
1540757504,1540758527,PL
-1540758528,1540760575,UA
+1540758528,1540759551,UA
+1540760064,1540760319,UA
1540760576,1540761599,PL
1540761600,1540762623,RU
1540762624,1540763647,LU
@@ -67080,20 +24105,20 @@
1540764672,1540765695,PL
1540765696,1540766719,RU
1540766720,1540767743,IT
-1540767744,1540768767,GB
1540768768,1540769791,RU
1540769792,1540770815,IT
1540770816,1540771839,RU
1540771840,1540773887,UA
1540773888,1540774911,SE
-1540774912,1540775935,GB
1540775936,1540776959,RU
1540776960,1540777983,IL
1540777984,1540779007,HR
1540779008,1540780031,NL
1540780032,1540781055,UA
1540781056,1540783103,RU
-1540783104,1540787199,UA
+1540783104,1540784639,UA
+1540784640,1540784895,RU
+1540784896,1540787199,UA
1540787200,1540788223,KZ
1540788224,1540790271,RU
1540790272,1540791295,KW
@@ -67117,8 +24142,8 @@
1540812800,1540813823,RU
1540813824,1540815871,UA
1540815872,1540816895,DE
-1540816896,1540817920,PL
-1540817921,1540818943,NL
+1540816896,1540817919,PL
+1540817920,1540818943,NL
1540818944,1540819967,UA
1540819968,1540820991,CZ
1540820992,1540823039,RU
@@ -67157,9 +24182,7 @@
1540860928,1540861951,KZ
1540861952,1540862975,BY
1540862976,1540865023,GB
-1540865024,1540867071,RU
-1540867072,1540868095,KZ
-1540868096,1540872191,RU
+1540865024,1540872191,RU
1540872192,1540873215,BG
1540873216,1540875263,RU
1540875264,1540876287,PL
@@ -67179,7 +24202,6 @@
1540884480,1540884735,RO
1540884736,1540884991,GB
1540884992,1540885247,BE
-1540885248,1540885503,UA
1540885504,1540885759,ES
1540885760,1540886015,DE
1540886016,1540886271,DK
@@ -67214,14 +24236,13 @@
1540893696,1540893951,HU
1540893952,1540894207,DE
1540894208,1540894463,RU
-1540894464,1540894719,RO
+1540894464,1540894719,MD
1540894720,1540895487,RU
1540895488,1540895743,PL
1540895744,1540895999,RO
1540896000,1540896255,RU
1540896256,1540896511,SI
1540896512,1540896767,GB
-1540896768,1540897023,EU
1540897024,1540897279,GB
1540897280,1540897535,FR
1540897536,1540897791,RU
@@ -67307,8 +24328,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
@@ -67343,7 +24363,6 @@
1540930304,1540930559,RU
1540930560,1540930815,KW
1540930816,1540931071,KZ
-1540931072,1540931327,EU
1540931328,1540931839,PL
1540931840,1540932095,GB
1540932096,1540932351,PL
@@ -67438,7 +24457,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
@@ -67492,7 +24511,7 @@
1540988928,1540989183,GB
1540989184,1540989439,PL
1540989440,1540989695,UA
-1540989696,1540989951,RU
+1540989696,1540989951,PL
1540989952,1540990207,FR
1540990208,1540990463,DE
1540990464,1540990719,UA
@@ -67504,7 +24523,7 @@
1540992256,1540992511,AT
1540992512,1540993279,DE
1540993280,1540993535,LB
-1540993536,1540993791,SC
+1540993536,1540993791,RU
1540993792,1540994047,UA
1540994048,1540994303,RU
1540994304,1540994559,SE
@@ -67524,7 +24543,6 @@
1540998400,1540998655,UA
1540998656,1540998911,PL
1540998912,1540999167,DE
-1540999168,1540999423,RU
1540999424,1540999679,DK
1540999680,1540999935,RU
1540999936,1541000191,RO
@@ -67545,7 +24563,6 @@
1541004288,1541004543,RU
1541004544,1541004799,PL
1541004800,1541005055,SI
-1541005056,1541005311,NL
1541005312,1541005567,PL
1541005568,1541006079,AT
1541006080,1541006335,RU
@@ -67560,7 +24577,6 @@
1541008384,1541008639,RU
1541008640,1541008895,GB
1541008896,1541009151,TR
-1541009152,1541009407,RU
1541009408,1541009663,UA
1541009664,1541009919,CH
1541009920,1541010175,PL
@@ -67585,7 +24601,6 @@
1541024768,1541026815,UA
1541026816,1541027839,LV
1541028864,1541029887,PL
-1541029888,1541030911,UA
1541030912,1541031935,PL
1541031936,1541032959,UA
1541032960,1541033983,PL
@@ -67596,16 +24611,14 @@
1541038080,1541039103,UA
1541039104,1541040127,RU
1541040128,1541041151,UA
-1541041152,1541042175,RU
-1541042176,1541043199,DE
-1541043200,1541044223,RU
+1541041152,1541044223,RU
1541044224,1541045247,US
1541045248,1541046271,NL
1541046272,1541051391,RU
1541051392,1541052415,NL
1541052416,1541053439,RO
1541053440,1541054463,PL
-1541054464,1541055487,RU
+1541054464,1541055487,TJ
1541055488,1541056511,PL
1541056512,1541057535,TJ
1541057536,1541058559,RS
@@ -67648,7 +24661,7 @@
1541099520,1541100543,UA
1541100544,1541101567,HU
1541101568,1541102591,RU
-1541102592,1541103615,EU
+1541102592,1541103615,RO
1541103616,1541105663,RU
1541105664,1541106687,PL
1541106688,1541107711,NL
@@ -67693,7 +24706,7 @@
1541147136,1541147391,PL
1541147392,1541147903,RU
1541147904,1541148415,RO
-1541148416,1541148671,US
+1541148416,1541148671,GB
1541148672,1541148927,RU
1541148928,1541149439,PL
1541149440,1541149695,SE
@@ -67710,7 +24723,7 @@
1541152768,1541153023,PL
1541153024,1541153279,RU
1541153280,1541153535,DE
-1541153536,1541153791,RO
+1541153536,1541153791,UA
1541153792,1541154047,DE
1541154048,1541154303,NL
1541154304,1541154559,RU
@@ -67750,7 +24763,7 @@
1541163520,1541163775,DE
1541163776,1541164031,RO
1541164032,1541164287,RU
-1541164288,1541164543,CH
+1541164288,1541164543,HR
1541164544,1541164799,SI
1541164800,1541165055,IR
1541165056,1541165311,UA
@@ -67845,7 +24858,6 @@
1541188864,1541189119,RU
1541189120,1541189375,UA
1541189376,1541189631,GB
-1541189632,1541189887,SC
1541189888,1541190143,PL
1541190144,1541190399,GB
1541190400,1541190655,AT
@@ -67893,7 +24905,6 @@
1541202432,1541202687,ES
1541202688,1541202943,SE
1541202944,1541203199,DE
-1541203200,1541203455,ES
1541203456,1541203711,UA
1541203712,1541203967,GB
1541203968,1541204223,RO
@@ -67932,11 +24943,7 @@
1541216768,1541217279,PL
1541217280,1541218303,RU
1541218304,1541218815,IT
-1541218816,1541219008,RU
-1541219009,1541219016,GB
-1541219017,1541219024,RU
-1541219025,1541219038,GB
-1541219039,1541219839,RU
+1541218816,1541219839,RU
1541219840,1541220351,CZ
1541220352,1541221375,RU
1541221376,1541221887,PL
@@ -67975,7 +24982,6 @@
1541237248,1541238271,RU
1541238272,1541239295,SK
1541239296,1541239807,PL
-1541239808,1541240319,RU
1541240320,1541240831,CH
1541240832,1541241343,DE
1541241344,1541241855,PL
@@ -68025,7 +25031,7 @@
1541265408,1541265919,RS
1541265920,1541266431,UA
1541266432,1541266943,KW
-1541266944,1541267455,US
+1541266944,1541267455,CY
1541267456,1541267967,FR
1541267968,1541268479,DE
1541268480,1541268991,AM
@@ -68094,7 +25100,7 @@
1541338112,1541341183,UA
1541341184,1541341439,TR
1541341440,1541341695,RU
-1541341696,1541341951,DE
+1541341696,1541341951,HU
1541341952,1541342463,PL
1541342464,1541342719,FR
1541342720,1541342975,PL
@@ -68164,7 +25170,6 @@
1541359616,1541359871,PL
1541359872,1541360127,FR
1541360128,1541360383,CZ
-1541360384,1541360639,RU
1541360640,1541360895,FR
1541360896,1541361151,UA
1541361152,1541361407,PL
@@ -68177,8 +25182,8 @@
1541362944,1541363199,DK
1541363200,1541363455,UA
1541363456,1541363711,IE
-1541363712,1541363967,UA
-1541363968,1541364479,RU
+1541363712,1541364223,UA
+1541364224,1541364479,RU
1541364480,1541364735,AT
1541364736,1541364991,SE
1541364992,1541365247,RU
@@ -68187,7 +25192,6 @@
1541365760,1541366015,DE
1541366016,1541366271,UA
1541366272,1541366527,RU
-1541366528,1541366783,RO
1541366784,1541367039,NO
1541367040,1541367295,AT
1541367296,1541367807,UA
@@ -68272,7 +25276,7 @@
1541389312,1541389567,RU
1541389568,1541389823,SI
1541389824,1541390079,RO
-1541390080,1541390335,US
+1541390080,1541390335,NL
1541390336,1541390591,DK
1541390592,1541390847,SI
1541390848,1541391103,RU
@@ -68360,7 +25364,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
@@ -68371,14 +25375,14 @@
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
1541430784,1541431295,CH
1541431296,1541431807,UA
1541431808,1541432319,RU
-1541432320,1541432831,RO
1541432832,1541433343,RU
1541433344,1541433855,PL
1541433856,1541434367,RU
@@ -68430,7 +25434,6 @@
1541463552,1541464063,UA
1541464064,1541464575,PL
1541464576,1541465087,DE
-1541465088,1541465599,RU
1541465600,1541466111,FR
1541466112,1541467135,RU
1541467136,1541467647,PL
@@ -68541,7 +25544,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
@@ -68558,7 +25561,7 @@
1541583616,1541583871,GE
1541583872,1541584127,SE
1541584128,1541584383,GB
-1541584384,1541584895,BE
+1541584384,1541584895,NL
1541584896,1541585151,DE
1541585152,1541585663,RU
1541585664,1541585919,UA
@@ -68577,7 +25580,7 @@
1541592576,1541593087,FR
1541593088,1541594111,CZ
1541594112,1541594367,AL
-1541594368,1541595135,RU
+1541594624,1541595135,RU
1541595136,1541595647,IR
1541595648,1541596159,BG
1541596160,1541597695,PL
@@ -68665,7 +25668,6 @@
1541645824,1541646079,RO
1541646080,1541646335,PL
1541646336,1541646847,RU
-1541646848,1541647359,NO
1541647360,1541648383,RU
1541648384,1541648639,PL
1541648640,1541648895,DK
@@ -68700,7 +25702,6 @@
1541666048,1541666815,GB
1541666816,1541667839,NO
1541667840,1541668095,CH
-1541668096,1541668351,GB
1541668352,1541668607,UA
1541668608,1541668863,GE
1541668864,1541669887,GB
@@ -68719,7 +25720,8 @@
1541677056,1541678079,PL
1541678080,1541678591,RO
1541678592,1541678847,BG
-1541678848,1541679615,RU
+1541678848,1541679103,KZ
+1541679104,1541679615,RU
1541679616,1541680127,PL
1541680128,1541681151,CZ
1541681152,1541682175,RU
@@ -68762,7 +25764,7 @@
1541704704,1541706239,RO
1541706240,1541706751,UA
1541706752,1541707263,RU
-1541707264,1541707519,CH
+1541707264,1541707519,DE
1541707520,1541707775,NL
1541707776,1541708799,DE
1541708800,1541709823,PL
@@ -68793,8 +25795,8 @@
1541723648,1541723903,NO
1541723904,1541724159,BE
1541724160,1541725183,CZ
-1541725184,1541727231,RU
-1541727232,1541727743,UA
+1541725184,1541727487,RU
+1541727488,1541727743,UA
1541727744,1541727999,RU
1541728256,1541729023,GB
1541729024,1541729279,DE
@@ -68824,7 +25826,7 @@
1541739776,1541740031,NO
1541740032,1541740287,PL
1541740288,1541740543,NL
-1541740544,1541740799,SK
+1541740544,1541740799,CZ
1541740800,1541741055,RU
1541741056,1541741567,PL
1541741568,1541742079,SK
@@ -68869,7 +25871,6 @@
1541766144,1541767167,GB
1541767168,1541767679,UA
1541767680,1541768191,FR
-1541768192,1541769215,RO
1541769216,1541769471,FR
1541769472,1541770239,FI
1541770240,1541770495,CH
@@ -68893,7 +25894,7 @@
1541779968,1541780479,DE
1541780480,1541780735,ES
1541780736,1541780991,GB
-1541780992,1541781503,RO
+1541781248,1541781503,RO
1541781504,1541781759,TR
1541781760,1541782015,RU
1541782016,1541782271,RO
@@ -68906,7 +25907,9 @@
1541785856,1541786111,GB
1541786112,1541786623,RU
1541786624,1541787647,UA
-1541787648,1541788671,RU
+1541787648,1541788159,RU
+1541788160,1541788415,UA
+1541788416,1541788671,RU
1541788672,1541789183,PL
1541789184,1541789695,IR
1541789696,1541790719,UA
@@ -68927,8 +25930,7 @@
1541795584,1541795839,ES
1541795840,1541796863,UA
1541796864,1541797375,RU
-1541797376,1541797887,NL
-1541797888,1541798143,DE
+1541797376,1541798143,GB
1541798144,1541798911,PL
1541798912,1541799935,CZ
1541799936,1541800447,FR
@@ -69100,7 +26102,6 @@
1541885952,1541886975,PL
1541886976,1541887999,UA
1541888000,1541888255,RS
-1541888256,1541888511,RU
1541888512,1541889023,GB
1541889024,1541889535,PL
1541889536,1541890303,RU
@@ -69145,7 +26146,6 @@
1541913088,1541914623,RU
1541914624,1541915647,IL
1541915648,1541916671,RU
-1541916672,1541917695,RO
1541917696,1541917951,CH
1541917952,1541918207,PL
1541918208,1541918463,UA
@@ -69207,7 +26207,6 @@
1541954560,1541955583,RU
1541955584,1541956095,DE
1541956096,1541956351,RO
-1541956352,1541956607,UA
1541956608,1541957119,LB
1541957120,1541957375,PL
1541957376,1541957631,UA
@@ -69220,8 +26219,7 @@
1541960192,1541960703,NL
1541960704,1541961727,UA
1541961728,1541962751,RU
-1541962752,1541963007,GB
-1541963008,1541963263,GB
+1541962752,1541963263,GB
1541963264,1541963519,RU
1541963520,1541964031,UA
1541964288,1541964543,NL
@@ -69241,13 +26239,13 @@
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
1541977856,1541978111,PL
-1541978112,1541978623,RO
-1541978624,1541978879,MD
+1541978112,1541978879,RO
1541978880,1541979135,FR
1541979136,1541979647,RU
1541979648,1541981183,PL
@@ -69260,7 +26258,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
@@ -69292,7 +26291,6 @@
1542000640,1542000895,GB
1542000896,1542001151,UA
1542001152,1542001663,PL
-1542001664,1542001919,MD
1542001920,1542002175,HU
1542002176,1542002687,NL
1542002688,1542002943,RS
@@ -69323,8 +26321,7 @@
1542017792,1542018047,GB
1542018048,1542019071,DE
1542019072,1542019327,RU
-1542019328,1542019583,RO
-1542019584,1542020095,UA
+1542019328,1542020095,UA
1542020096,1542021119,RU
1542021120,1542023167,UA
1542023168,1542023423,PL
@@ -69343,13 +26340,12 @@
1542028800,1542029055,CH
1542029056,1542029311,UA
1542029312,1542029823,GB
-1542029824,1542031359,RU
+1542030336,1542031359,RU
1542031360,1542032383,PL
1542032384,1542032639,UA
1542032640,1542032895,SA
1542032896,1542033407,DK
-1542033408,1542035199,RU
-1542035200,1542035455,UA
+1542033408,1542035455,RU
1542035456,1542036479,GB
1542036480,1542038271,PL
1542038272,1542038527,SI
@@ -69385,7 +26381,8 @@
1542060288,1542060543,RO
1542060544,1542061055,PL
1542061056,1542062079,IT
-1542062080,1542064127,UA
+1542062080,1542063103,UA
+1542063104,1542064127,RU
1542064128,1542064383,PL
1542064384,1542064639,FR
1542064640,1542065151,RU
@@ -69396,7 +26393,7 @@
1542066944,1542067199,BG
1542067200,1542067455,UA
1542067456,1542067711,BG
-1542067712,1542067967,DE
+1542067712,1542067967,US
1542067968,1542068223,GB
1542068224,1542069759,UA
1542069760,1542070015,DE
@@ -69502,7 +26499,7 @@
1542131712,1542134271,PL
1542134272,1542136319,RU
1542136320,1542136831,DE
-1542136832,1542137855,TJ
+1542136832,1542137855,RU
1542137856,1542138367,ES
1542138368,1542138623,RU
1542138624,1542138879,RO
@@ -69568,8 +26565,7 @@
1542172416,1542172671,RU
1542172672,1542173695,KZ
1542173696,1542174207,RU
-1542174208,1542174463,UA
-1542174464,1542174719,CZ
+1542174208,1542174719,CZ
1542174720,1542176767,RU
1542176768,1542177791,PL
1542177792,1542178815,UA
@@ -69586,7 +26582,8 @@
1542183936,1542184191,GB
1542184192,1542184447,RU
1542184448,1542184959,PL
-1542184960,1542185983,UA
+1542184960,1542185471,UA
+1542185472,1542185983,BY
1542185984,1542187007,PL
1542187008,1542187263,DK
1542187264,1542187519,RU
@@ -69595,9 +26592,8 @@
1542188288,1542188543,NL
1542188544,1542189055,PL
1542189056,1542189311,DE
-1542189312,1542189567,TR
1542189568,1542189823,SI
-1542189824,1542190079,GE
+1542189824,1542190079,DE
1542190080,1542191103,RU
1542191104,1542192127,BG
1542192128,1542193407,PL
@@ -69647,14 +26643,11 @@
1542218752,1542220031,RU
1542220032,1542220287,PL
1542220288,1542220799,DE
-1542220800,1542222335,RU
-1542222336,1542222591,UA
-1542222592,1542222847,PK
+1542220800,1542222591,RU
1542222848,1542223103,SE
1542223104,1542223359,GB
1542223360,1542223871,UA
1542223872,1542224127,RU
-1542224128,1542224383,UA
1542224384,1542224639,DE
1542224640,1542224895,DK
1542224896,1542225151,RU
@@ -69682,7 +26675,7 @@
1542236928,1542237183,UA
1542237184,1542238207,PL
1542238208,1542239743,RU
-1542239744,1542239999,EU
+1542239744,1542239999,HU
1542240000,1542240767,RU
1542240768,1542241023,DK
1542241024,1542241279,GB
@@ -69790,7 +26783,6 @@
1542300672,1542301695,UA
1542301696,1542302463,SK
1542302464,1542303231,PL
-1542303232,1542303743,EU
1542303744,1542303999,GB
1542304000,1542304255,FR
1542304256,1542305279,RU
@@ -69824,7 +26816,6 @@
1542320128,1542322175,UA
1542322176,1542322431,RO
1542322432,1542322687,RU
-1542322688,1542322943,UA
1542322944,1542323199,IL
1542323200,1542323711,RU
1542323712,1542324479,IR
@@ -69856,14 +26847,16 @@
1542342656,1542343167,FR
1542343168,1542343679,UA
1542343680,1542344447,PL
-1542344448,1542345471,RU
-1542345472,1542345727,MD
-1542345728,1542345983,RU
+1542344448,1542345215,RU
+1542345216,1542345471,UA
+1542345472,1542345727,RU
+1542345728,1542345983,UA
1542345984,1542346239,PL
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
@@ -69878,7 +26871,7 @@
1542357504,1542357759,GB
1542357760,1542358015,FR
1542358016,1542358271,UA
-1542358272,1542358527,RU
+1542358272,1542358527,CZ
1542358528,1542359039,PL
1542359040,1542360319,RU
1542360320,1542360575,NL
@@ -69955,7 +26948,6 @@
1542397952,1542398463,NL
1542398464,1542398975,DE
1542398976,1542399231,PL
-1542399232,1542399487,RU
1542399488,1542399999,DK
1542400000,1542401535,RU
1542401536,1542401791,GB
@@ -69968,7 +26960,7 @@
1542405376,1542405631,PL
1542405632,1542405887,GB
1542405888,1542406143,RU
-1542406144,1542406655,ES
+1542406144,1542406655,NL
1542406656,1542407167,PL
1542407168,1542408191,RU
1542408192,1542408703,GB
@@ -69988,7 +26980,8 @@
1542414336,1542414847,SI
1542414848,1542415359,RU
1542415360,1542415615,DK
-1542415616,1542416383,RU
+1542415616,1542415871,KZ
+1542415872,1542416383,RU
1542416384,1542417407,UA
1542417408,1542418431,IR
1542418432,1542418687,RU
@@ -70000,7 +26993,6 @@
1542422016,1542422527,RU
1542422528,1542422783,RO
1542422784,1542423039,PL
-1542423040,1542423295,RO
1542423296,1542424575,RU
1542424576,1542425599,UA
1542425600,1542426623,RU
@@ -70013,7 +27005,6 @@
1542428416,1542428671,RS
1542428672,1542429695,PL
1542429696,1542429951,GB
-1542429952,1542430207,VG
1542430208,1542430719,RU
1542430720,1542431743,UA
1542431744,1542432767,RO
@@ -70084,7 +27075,7 @@
1542464512,1542464767,RU
1542464768,1542465023,TR
1542465024,1542465535,RU
-1542465536,1542466559,RS
+1542465536,1542466559,XK
1542466560,1542466815,PL
1542466816,1542467071,RU
1542467072,1542467583,PL
@@ -70106,7 +27097,6 @@
1542475776,1542476799,LB
1542476800,1542477823,RU
1542477824,1542478079,DK
-1542478080,1542478335,RU
1542478336,1542478847,UA
1542478848,1542479103,RU
1542479104,1542479359,PL
@@ -70122,10 +27112,11 @@
1542483456,1542484991,RU
1542484992,1542486015,NL
1542486016,1542488319,RU
-1542488320,1542488575,EU
+1542488320,1542488575,DE
1542488576,1542491135,PL
-1542491136,1542492415,RU
-1542492416,1542492671,UA
+1542491136,1542492159,UA
+1542492160,1542492415,RU
+1542492416,1542492671,CZ
1542492672,1542493183,IL
1542493184,1542493439,PS
1542493440,1542494207,RO
@@ -70173,7 +27164,7 @@
1542512640,1542512895,GB
1542512896,1542513151,RU
1542513152,1542513663,GB
-1542513664,1542513919,LU
+1542513664,1542513919,FR
1542513920,1542514175,GB
1542514176,1542514687,IT
1542514688,1542515199,RU
@@ -70228,10 +27219,9 @@
1542541056,1542541311,BE
1542541312,1542542335,UA
1542542336,1542542847,RU
-1542542848,1542543359,IT
+1542542848,1542543359,GB
1542543360,1542544383,RU
1542544384,1542544639,IR
-1542544640,1542544895,UA
1542544896,1542545407,GR
1542545408,1542586367,UA
1542586368,1542594559,AZ
@@ -70256,7 +27246,7 @@
1542640896,1542641151,RU
1542641152,1542641663,IN
1542641664,1542641919,RO
-1542641920,1542642175,OM
+1542641920,1542642175,AE
1542642176,1542642431,PL
1542642432,1542642687,RU
1542642688,1542643199,PL
@@ -70346,7 +27336,7 @@
1542839296,1542839551,DE
1542839552,1542839807,UA
1542839808,1542840063,CY
-1542840064,1542848511,UA
+1542840064,1542840319,UA
1542848512,1542849535,RU
1542849536,1542850559,UA
1542850560,1542851583,GB
@@ -70403,21 +27393,36 @@
1542979584,1543110655,DE
1543110656,1543127039,UA
1543127040,1543143423,DE
-1543143424,1543241727,RO
+1543143424,1543167999,RO
+1543168000,1543172095,MD
+1543172096,1543241727,RO
1543241728,1543503871,IT
1543503872,1545601023,GB
-1545601024,1545673167,SE
-1545673168,1545673175,FI
-1545673176,1545673183,SE
-1545673184,1545673215,FI
-1545673216,1545674495,SE
+1545601024,1545674495,SE
1545674496,1545674751,FI
1545674752,1545863167,SE
1545863168,1545895935,RU
1545895936,1545928703,BA
1545928704,1545961471,SI
1545961472,1545994239,RU
-1545994240,1546027007,CZ
+1545994240,1545995263,CZ
+1545995264,1545995519,RU
+1545995520,1545996287,CZ
+1545996288,1545998335,RU
+1545998336,1546000383,CZ
+1546000384,1546001407,UZ
+1546001408,1546002943,RU
+1546002944,1546003199,UA
+1546003200,1546003455,RU
+1546003456,1546004479,CZ
+1546004480,1546004735,UA
+1546004736,1546005247,CZ
+1546005248,1546006527,RU
+1546006528,1546008575,UA
+1546008576,1546010623,BY
+1546010624,1546014719,CZ
+1546014720,1546015743,RU
+1546015744,1546027007,CZ
1546027008,1546059775,RU
1546059776,1546063871,SE
1546063872,1546067967,DE
@@ -70426,48 +27431,20 @@
1546076160,1546080255,RU
1546080256,1546084351,AZ
1546084352,1546088447,RU
-1546088448,1546088575,SN
-1546088576,1546088703,TM
-1546088704,1546088831,BA
-1546088832,1546088959,TJ
-1546088960,1546089087,GB
-1546089088,1546089215,DE
-1546089216,1546089343,MW
-1546089344,1546089471,ZW
-1546089472,1546089599,BI
-1546089600,1546089727,GW
-1546089728,1546089855,LS
-1546089856,1546089983,NE
-1546089984,1546090111,DE
-1546090112,1546090239,MR
-1546090240,1546090367,ZM
-1546090368,1546090495,MG
-1546090496,1546090623,BW
-1546090624,1546090751,GH
-1546090752,1546090879,ER
-1546090880,1546091007,AO
-1546091008,1546091135,NA
-1546091136,1546091263,KM
-1546091264,1546091391,GN
-1546091392,1546091519,HT
-1546091520,1546091647,AF
-1546091648,1546091775,TD
-1546091776,1546091903,BF
-1546091904,1546092031,RW
-1546092032,1546092159,TG
-1546092160,1546092287,SD
-1546092288,1546092415,RW
-1546092416,1546092543,NG
+1546088448,1546092543,GB
1546092544,1546096639,RU
1546096640,1546100735,IT
1546100736,1546104831,AT
1546104832,1546108927,IE
1546108928,1546113023,IM
1546113024,1546121215,RU
-1546121216,1546121727,FR
-1546121728,1546121983,IT
-1546121984,1546124799,ES
-1546124800,1546125311,FR
+1546121216,1546121855,FR
+1546121856,1546121856,IT
+1546121857,1546121983,FR
+1546121984,1546121987,ES
+1546121988,1546122649,FR
+1546122650,1546122650,PT
+1546122651,1546125311,FR
1546125312,1546256383,GB
1546256384,1546264575,RU
1546264576,1546266623,TR
@@ -70498,23 +27475,19 @@
1546317824,1546319871,CH
1546319872,1546321919,RS
1546321920,1546323967,RU
-1546323968,1546325503,GE
-1546325504,1546326015,SE
+1546323968,1546326015,NO
1546326016,1546328063,ES
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
1546342400,1546344447,TR
1546344448,1546346495,DK
1546346496,1546348543,AT
-1546348544,1546350399,DE
-1546350400,1546350431,JP
-1546350432,1546350591,DE
+1546348544,1546350591,DE
1546350592,1546352639,PL
1546352640,1546354687,DK
1546354688,1546356735,FR
@@ -70531,53 +27504,30 @@
1546379264,1546381311,ES
1546381312,1546383359,DK
1546383360,1546385407,IT
-1546385408,1546385471,FR
-1546385472,1546385479,DE
-1546385480,1546385487,IT
-1546385488,1546385495,ES
-1546385496,1546385535,FR
-1546385536,1546385599,US
-1546385600,1546387455,FR
-1546387456,1546460960,TR
-1546460961,1546460967,NL
-1546460968,1546518527,TR
+1546385408,1546387455,FR
+1546387456,1546518527,TR
1546518528,1546649599,KZ
1546649600,1546665983,SA
-1546665984,1546673823,GB
-1546673824,1546673839,RS
-1546673840,1546678863,GB
-1546678864,1546678871,RS
-1546678872,1546679839,GB
+1546665984,1546679839,GB
1546679840,1546679840,HR
-1546679841,1546680831,GB
-1546680832,1546680895,RS
-1546680896,1546681407,GB
-1546681408,1546681439,RS
-1546681440,1546681455,GB
-1546681456,1546681471,RS
-1546681472,1546682367,GB
+1546679841,1546682367,GB
1546682368,1546698751,BE
1546698752,1546715135,NL
1546715136,1546731519,LV
-1546731520,1546733567,RE
-1546733568,1546734079,FR
-1546734080,1546734591,RE
-1546734592,1546735103,FR
+1546731520,1546731775,RE
+1546731776,1546735103,FR
1546735104,1546735359,RE
1546735360,1546739711,FR
1546739712,1546739967,GP
-1546739968,1546740223,FR
-1546740224,1546741503,GP
-1546741504,1546742271,FR
-1546742272,1546742527,MQ
-1546742528,1546742783,FR
-1546742784,1546743039,GF
-1546743040,1546743551,FR
+1546739968,1546741503,FR
+1546741504,1546742015,GP
+1546742016,1546742527,FR
+1546742528,1546743295,GF
+1546743296,1546743551,FR
1546743552,1546743807,GF
-1546743808,1546744319,FR
-1546744320,1546744831,MQ
-1546744832,1546747647,FR
-1546747648,1546747903,MQ
+1546743808,1546745087,FR
+1546745088,1546745855,MQ
+1546745856,1546747903,FR
1546747904,1546764287,RU
1546764288,1546780671,UA
1546780672,1546797055,IR
@@ -70587,9 +27537,7 @@
1546878976,1546895359,DE
1546895360,1546911743,IE
1546911744,1546928127,SK
-1546928128,1546929407,GB
-1546929408,1546929415,A2
-1546929416,1546944511,GB
+1546928128,1546944511,GB
1546944512,1546960895,UA
1546960896,1546977279,HU
1546977280,1546993663,MK
@@ -70614,13 +27562,7 @@
1547448320,1547452415,SK
1547452416,1547456511,IT
1547456512,1547460607,RU
-1547460608,1547465727,GB
-1547465728,1547465983,ES
-1547465984,1547467775,GB
-1547467776,1547468031,ES
-1547468032,1547468287,GB
-1547468288,1547468543,ES
-1547468544,1547468799,GB
+1547460608,1547468799,GB
1547468800,1547472895,PL
1547472896,1547476991,DK
1547476992,1547481087,ES
@@ -70638,26 +27580,16 @@
1547522048,1547526143,CZ
1547526144,1547534335,HU
1547534336,1547538431,FR
-1547538432,1547542527,EU
1547542528,1547546623,FR
1547546624,1547550719,IR
1547550720,1547554815,IE
-1547554816,1547555078,AT
-1547555079,1547555079,EU
-1547555080,1547558911,AT
+1547554816,1547555071,AT
+1547555072,1547555078,DE
+1547555079,1547555079,AT
+1547555080,1547555327,DE
+1547555328,1547558911,AT
1547558912,1547563007,IL
-1547563008,1547564287,NL
-1547564288,1547564311,CH
-1547564312,1547564315,BG
-1547564316,1547564335,NL
-1547564336,1547564351,US
-1547564352,1547564415,CY
-1547564416,1547564439,NZ
-1547564440,1547564543,NL
-1547564544,1547564799,US
-1547564800,1547564831,NL
-1547564832,1547564863,LV
-1547564864,1547565311,NL
+1547563008,1547565311,NL
1547565312,1547565823,US
1547565824,1547567103,NL
1547567104,1547571199,GB
@@ -70673,111 +27605,39 @@
1547608064,1547612159,LB
1547612160,1547616255,IR
1547616256,1547620351,DK
-1547620352,1547620359,A2
-1547620360,1547620367,NG
-1547620368,1547620375,A2
-1547620376,1547620391,NG
-1547620392,1547620399,A2
+1547620352,1547620375,JE
+1547620376,1547620383,NG
+1547620384,1547620399,JE
1547620400,1547620407,NG
-1547620408,1547620415,A2
-1547620416,1547620423,NG
-1547620424,1547620439,A2
-1547620440,1547620551,NG
-1547620552,1547620559,A2
-1547620560,1547620615,NG
-1547620616,1547620639,A2
-1547620640,1547620647,NG
-1547620648,1547620863,A2
-1547620864,1547620871,NG
-1547620872,1547620879,A2
-1547620880,1547620887,NG
-1547620888,1547620895,A2
-1547620896,1547620903,NG
-1547620904,1547620911,A2
-1547620912,1547620935,NG
-1547620936,1547620951,A2
-1547620952,1547620959,NG
-1547620960,1547620967,A2
-1547620968,1547620991,NG
-1547620992,1547620999,A2
-1547621000,1547621031,NG
-1547621032,1547621039,A2
-1547621040,1547621063,NG
-1547621064,1547621071,A2
-1547621072,1547621087,NG
-1547621088,1547621095,A2
-1547621096,1547621135,NG
-1547621136,1547621143,A2
-1547621144,1547621151,NG
-1547621152,1547621167,A2
-1547621168,1547621191,NG
-1547621192,1547621199,A2
-1547621200,1547621207,NG
-1547621208,1547621215,US
+1547620408,1547620599,JE
+1547620600,1547620607,NG
+1547620608,1547620919,JE
+1547620920,1547620927,NG
+1547620928,1547621015,JE
+1547621016,1547621023,NG
+1547621024,1547621047,JE
+1547621048,1547621055,NG
+1547621056,1547621183,JE
+1547621184,1547621191,NG
+1547621192,1547621215,JE
1547621216,1547621223,NG
-1547621224,1547621231,A2
+1547621224,1547621231,JE
1547621232,1547621239,NG
-1547621240,1547621247,A2
-1547621248,1547621263,NG
-1547621264,1547621271,A2
+1547621240,1547621255,JE
+1547621256,1547621263,NG
+1547621264,1547621271,JE
1547621272,1547621279,NG
-1547621280,1547621303,A2
-1547621304,1547621335,NG
-1547621336,1547621351,A2
-1547621352,1547621375,NG
-1547621376,1547621447,A2
+1547621280,1547621447,JE
1547621448,1547621455,NG
-1547621456,1547621463,A2
+1547621456,1547621463,JE
1547621464,1547621471,NG
-1547621472,1547621575,A2
-1547621576,1547621583,NG
-1547621584,1547621615,A2
-1547621616,1547621623,NG
-1547621624,1547621687,A2
-1547621688,1547621711,NG
-1547621712,1547622407,A2
-1547622408,1547622415,NG
-1547622416,1547622455,A2
-1547622456,1547622471,NG
-1547622472,1547622511,A2
-1547622512,1547622519,NG
-1547622520,1547622527,GB
-1547622528,1547622559,A2
-1547622560,1547622575,NG
-1547622576,1547622583,A2
-1547622584,1547622615,NG
-1547622616,1547622623,A2
-1547622624,1547622631,NG
-1547622632,1547622911,A2
-1547622912,1547622935,NG
-1547622936,1547622943,A2
-1547622944,1547622951,US
-1547622952,1547622959,NG
-1547622960,1547622967,A2
-1547622968,1547622983,NG
-1547622984,1547622991,A2
-1547622992,1547623015,NG
-1547623016,1547623031,A2
-1547623032,1547623039,NG
-1547623040,1547623047,A2
-1547623048,1547623071,NG
-1547623072,1547623103,A2
-1547623104,1547623159,NG
-1547623160,1547623167,A2
+1547621472,1547622919,JE
+1547622920,1547622935,NG
+1547622936,1547623167,JE
1547623168,1547623423,NG
-1547623424,1547623455,US
-1547623456,1547623463,NG
-1547623464,1547623479,A2
+1547623424,1547623479,JE
1547623480,1547623487,NG
-1547623488,1547623495,A2
-1547623496,1547623519,NG
-1547623520,1547623527,A2
-1547623528,1547623559,NG
-1547623560,1547623567,A2
-1547623568,1547623615,NG
-1547623616,1547623727,A2
-1547623728,1547623735,NG
-1547623736,1547624447,A2
+1547623488,1547624447,JE
1547624448,1547628543,CZ
1547628544,1547632639,BG
1547632640,1547636735,TR
@@ -70787,53 +27647,46 @@
1547649024,1547653119,RU
1547653120,1547657215,LV
1547657216,1547661311,RU
-1547661312,1547665407,LV
+1547661312,1547665407,ES
1547665408,1547669503,GB
-1547669504,1547672575,AT
-1547672576,1547673087,HR
-1547673088,1547673599,AT
+1547669504,1547673599,AT
1547673600,1547677695,NL
1547677696,1547685887,RU
1547685888,1547689983,AT
1547689984,1547694079,IT
1547694080,1547698175,HU
-1547698176,1547699359,NL
-1547699360,1547699391,GB
-1547699392,1547777119,NL
-1547777120,1547777127,IT
-1547777128,1547846143,NL
-1547846144,1547846335,FR
-1547846336,1548157119,NL
-1548157120,1548157183,DE
-1548157184,1548157951,NL
-1548157952,1548158207,SE
-1548158208,1548158599,NL
+1547698176,1548130303,NL
+1548130304,1548130559,BE
+1548130560,1548158599,NL
1548158600,1548158607,GB
-1548158608,1548158623,NL
-1548158624,1548158639,DE
-1548158640,1548158647,NL
-1548158648,1548158663,GB
-1548158664,1548158671,DE
-1548158672,1548158695,NL
-1548158696,1548158703,GB
-1548158704,1548158719,NL
-1548158720,1548159103,DE
-1548159104,1548159231,NL
-1548159232,1548159487,ES
+1548158608,1548159231,NL
+1548159232,1548159235,ES
+1548159236,1548159487,NL
1548159488,1548159999,GB
-1548160000,1548160535,NL
-1548160536,1548160543,GB
-1548160544,1548160559,BE
-1548160560,1548160639,NL
-1548160640,1548160767,BE
-1548160768,1548161279,NL
-1548161280,1548161295,FR
-1548161296,1548161311,CH
-1548161312,1548161535,NL
-1548161536,1548161791,GB
-1548161792,1548162351,NL
-1548162352,1548162359,DE
-1548162360,1548222463,NL
+1548160000,1548160255,NL
+1548160256,1548160511,PL
+1548160512,1548169215,NL
+1548169216,1548171263,DE
+1548171264,1548172287,FR
+1548172288,1548173311,GB
+1548173312,1548174335,BE
+1548174336,1548174847,LU
+1548174848,1548175359,IE
+1548175360,1548175871,ES
+1548175872,1548176383,PT
+1548176384,1548176895,IT
+1548176896,1548177407,CH
+1548177408,1548177919,AT
+1548177920,1548178431,PL
+1548178432,1548178943,DK
+1548178944,1548179455,NO
+1548179456,1548179967,SE
+1548179968,1548180479,FI
+1548180480,1548180991,SK
+1548180992,1548181503,TR
+1548181504,1548182015,US
+1548182016,1548182527,HK
+1548182528,1548222463,NL
1548222464,1548746751,DE
1548746752,1549271039,RO
1549271040,1549795327,FR
@@ -70843,104 +27696,124 @@
1550319616,1550581759,CH
1550581760,1550843903,NL
1550843904,1550974975,UA
-1550974976,1550975231,MD
-1550975232,1551007743,RO
+1550974976,1551007743,RO
1551007744,1551106047,MD
1551106048,1551237119,DE
1551237120,1551368191,GR
1551368192,1551499263,NL
-1551499264,1551503359,EU
1551503360,1551504383,GB
1551504384,1551505407,FR
-1551505408,1551507455,EU
1551507456,1551508479,DE
1551508480,1551509503,IT
-1551509504,1551516671,EU
1551516672,1551517695,IT
1551517696,1551518719,ES
-1551518720,1551528959,EU
1551528960,1551529983,FR
-1551529984,1551544319,EU
1551544320,1551547391,DE
-1551547392,1551548415,EU
1551548416,1551551487,DE
-1551551488,1551556607,EU
1551556608,1551558655,FR
-1551558656,1551560703,EU
1551560704,1551561727,DE
1551561728,1551562751,FR
-1551562752,1551564799,EU
1551564800,1551572991,FR
-1551572992,1551577087,EU
1551577088,1551580159,NL
-1551580160,1551604479,EU
1551604480,1551604735,SE
-1551604736,1551630335,EU
1551630336,1551892479,RU
-1551892480,1553989631,FR
-1553989632,1553991167,MQ
-1553991168,1553991423,FR
-1553991424,1553992959,MQ
-1553992960,1553993215,FR
-1553993216,1553994495,MQ
-1553994496,1553994751,FR
-1553994752,1553997055,MQ
-1553997056,1553997311,FR
-1553997312,1553997823,MQ
-1553997824,1553998079,FR
-1553998080,1554000895,MQ
-1554000896,1554001919,FR
-1554001920,1554002687,MQ
-1554002688,1554002943,FR
-1554002944,1554005247,MQ
+1551892480,1553989887,FR
+1553989888,1553990911,MQ
+1553990912,1553991167,FR
+1553991168,1553992703,MQ
+1553992704,1553993215,FR
+1553993216,1553996031,MQ
+1553996032,1553996543,FR
+1553996544,1553997311,MQ
+1553997312,1553997567,FR
+1553997568,1554001407,MQ
+1554001408,1554001663,FR
+1554001664,1554001919,MQ
+1554001920,1554002175,FR
+1554002176,1554005247,MQ
1554005248,1554005503,FR
1554005504,1554006015,MQ
-1554006016,1554006271,FR
-1554006272,1554007039,GP
-1554007040,1554007295,FR
-1554007296,1554008063,GP
-1554008064,1554008831,FR
-1554008832,1554013183,GP
-1554013184,1554013439,FR
-1554013440,1554017279,GP
-1554017280,1554017535,FR
-1554017536,1554018303,GP
-1554018304,1554018815,FR
-1554018816,1554022143,GP
-1554022144,1554022399,FR
-1554022400,1554023167,GP
-1554023168,1554023423,FR
-1554023424,1554030591,GP
-1554030592,1554031359,MQ
-1554031360,1554031871,FR
-1554031872,1554032383,MQ
+1554006016,1554006783,GP
+1554006784,1554007295,FR
+1554007296,1554007807,GP
+1554007808,1554008063,FR
+1554008064,1554009343,GP
+1554009344,1554009855,FR
+1554009856,1554011647,GP
+1554011648,1554011903,FR
+1554011904,1554013695,GP
+1554013696,1554014207,FR
+1554014208,1554015231,GP
+1554015232,1554015487,FR
+1554015488,1554016767,GP
+1554016768,1554017279,FR
+1554017280,1554018047,GP
+1554018048,1554018303,FR
+1554018304,1554019583,GP
+1554019584,1554019839,FR
+1554019840,1554021119,GP
+1554021120,1554021375,FR
+1554021376,1554021887,GP
+1554021888,1554022399,FR
+1554022400,1554023423,GP
+1554023424,1554023679,FR
+1554023680,1554024959,GP
+1554024960,1554025215,FR
+1554025216,1554025471,GP
+1554025472,1554025727,FR
+1554025728,1554026751,GP
+1554026752,1554027007,FR
+1554027008,1554027519,GP
+1554027520,1554027775,FR
+1554027776,1554029055,GP
+1554029056,1554029311,FR
+1554029312,1554030079,GP
+1554030080,1554030335,FR
+1554030336,1554030591,GP
+1554030592,1554031615,MQ
+1554031616,1554032127,FR
+1554032128,1554032383,MQ
1554032384,1554032639,FR
-1554032640,1554034431,MQ
-1554034432,1554034687,FR
-1554034688,1554036735,MQ
-1554036736,1554036991,FR
-1554036992,1554038015,MQ
-1554038016,1554038271,FR
-1554038272,1554038783,MQ
+1554032640,1554035455,MQ
+1554035456,1554035967,FR
+1554035968,1554037503,MQ
+1554037504,1554037759,FR
+1554037760,1554038271,MQ
+1554038272,1554038783,FR
1554038784,1554039295,RE
-1554039296,1554039551,FR
-1554039552,1554039807,RE
-1554039808,1554040063,FR
-1554040064,1554044671,RE
-1554044672,1554044927,FR
-1554044928,1554046719,RE
-1554046720,1554046975,FR
-1554046976,1554049791,RE
-1554049792,1554050047,FR
-1554050048,1554054911,RE
-1554054912,1556086783,FR
-1556086784,1556491204,DE
-1556491205,1556491205,EU
-1556491206,1556493903,DE
-1556493904,1556493911,A2
-1556493912,1558708223,DE
-1558708224,1559232511,GB
-1559232512,1559240703,IL
+1554039296,1554039807,FR
+1554039808,1554040063,RE
+1554040064,1554040319,FR
+1554040320,1554041343,RE
+1554041344,1554041599,FR
+1554041600,1554042367,RE
+1554042368,1554042879,FR
+1554042880,1554043903,RE
+1554043904,1554044159,FR
+1554044160,1554046463,RE
+1554046464,1554046719,FR
+1554046720,1554047231,RE
+1554047232,1554048255,FR
+1554048256,1554048767,RE
+1554048768,1554049279,FR
+1554049280,1554049535,RE
+1554049536,1554049791,FR
+1554049792,1554052351,RE
+1554052352,1554052607,FR
+1554052608,1554053887,RE
+1554053888,1554054143,FR
+1554054144,1554054655,RE
+1554054656,1556086783,FR
+1556086784,1557921791,DE
+1557921792,1558052863,NO
+1558052864,1558118399,FR
+1558118400,1558119423,DE
+1558119424,1558122495,RU
+1558122496,1558151167,AT
+1558151168,1558183935,IT
+1558183936,1558708223,DE
+1558708224,1559236607,GB
+1559236608,1559240703,IL
1559240704,1559248895,BA
1559248896,1559257087,LV
1559257088,1559265279,UA
@@ -70949,24 +27822,17 @@
1559271424,1559273471,FI
1559273472,1559281663,CZ
1559281664,1559289855,RU
-1559289856,1559297535,SK
-1559297536,1559297599,AT
-1559297600,1559298047,SK
+1559289856,1559298047,SK
1559298048,1559306239,RU
1559306240,1559314431,JO
1559314432,1559322623,GE
1559322624,1559330815,RU
1559330816,1559339007,BA
-1559339008,1559339743,RU
-1559339744,1559339775,MH
-1559339776,1559341695,RU
-1559341696,1559341703,ES
-1559341704,1559347199,RU
+1559339008,1559347199,RU
1559347200,1559355391,SE
1559355392,1559388159,RU
1559388160,1559396351,UA
1559396352,1559404543,GB
-1559404544,1559412735,FI
1559412736,1559420927,IR
1559420928,1559429119,HR
1559429120,1559437311,FR
@@ -70994,26 +27860,33 @@
1559617536,1559625727,GB
1559625728,1559633919,DK
1559633920,1559642111,IT
-1559642112,1559650303,RU
1559650304,1559658495,IT
1559658496,1559683071,RU
1559683072,1559691263,CH
1559691264,1559756799,BG
1559756800,1559789567,AT
-1559789568,1559838719,RU
+1559789568,1559822335,RU
1559838720,1559855103,UA
1559855104,1559887871,HU
1559887872,1559920639,PT
1559920640,1559924693,LU
1559924694,1559924694,GB
1559924695,1559932927,LU
-1559932928,1559953407,DE
+1559932928,1559943167,DE
+1559943168,1559944191,LU
+1559944192,1559945727,FR
+1559945728,1559946751,LU
+1559946752,1559950335,DE
+1559950336,1559950847,LU
+1559950848,1559953407,DE
1559953408,1559986175,MT
1559986176,1560018943,IE
1560018944,1560051711,DE
1560051712,1560084479,RU
1560084480,1560117247,JO
-1560117248,1560150015,CZ
+1560117248,1560133631,CZ
+1560133632,1560137727,RU
+1560137728,1560150015,CZ
1560150016,1560182783,NL
1560182784,1560215551,SE
1560215552,1560281087,RU
@@ -71042,9 +27915,7 @@
1566121984,1566126079,NO
1566126080,1566130175,IT
1566130176,1566134271,TR
-1566134272,1566134999,GB
-1566135000,1566135007,ES
-1566135008,1566138367,GB
+1566134272,1566138367,GB
1566138368,1566142463,CZ
1566142464,1566146559,NO
1566146560,1566150655,GB
@@ -71053,37 +27924,25 @@
1566158848,1566162943,RU
1566162944,1566167039,PL
1566167040,1566171135,UA
-1566171136,1566175230,CY
-1566175231,1566175231,TR
+1566171136,1566175231,CY
1566175232,1566179327,IE
1566179328,1566183423,DK
1566183424,1566187519,ES
1566187520,1566191615,RU
1566191616,1566195711,FI
-1566195712,1566199807,AL
1566199808,1566207999,RU
1566208000,1566212095,DK
1566212096,1566216191,DE
1566216192,1566220287,SE
1566220288,1566224383,CZ
-1566224384,1566226175,DE
-1566226176,1566226239,NL
-1566226240,1566226303,DE
-1566226304,1566226335,NL
-1566226336,1566226343,DE
-1566226344,1566226367,NL
-1566226368,1566228479,DE
+1566224384,1566228479,DE
1566228480,1566232575,GB
1566232576,1566248959,RU
1566248960,1566257151,GB
1566257152,1566261247,CZ
1566261248,1566265343,TR
-1566265344,1566266367,US
-1566266368,1566269439,A2
-1566269440,1566271487,NO
-1566271488,1566271999,FI
-1566272000,1566272511,SE
-1566272512,1566273535,NO
+1566265344,1566269439,DE
+1566269440,1566273535,NO
1566273536,1566277631,RU
1566277632,1566281727,IT
1566281728,1566285823,CZ
@@ -71098,12 +27957,7 @@
1566314496,1566316543,BE
1566316544,1566318591,NL
1566318592,1566320639,RU
-1566320640,1566321151,DE
-1566321152,1566321407,NL
-1566321408,1566321663,UA
-1566321664,1566321919,BZ
-1566321920,1566322431,GB
-1566322432,1566322687,BS
+1566320640,1566322687,DE
1566322688,1566324735,CZ
1566324736,1566326783,HU
1566326784,1566328831,RU
@@ -71116,10 +27970,7 @@
1566343168,1566345215,DE
1566345216,1566347263,RU
1566347264,1566349311,DE
-1566349312,1566350591,IT
-1566350592,1566350719,US
-1566350720,1566350847,GB
-1566350848,1566351359,IT
+1566349312,1566351359,IT
1566351360,1566353407,AT
1566353408,1566355455,ES
1566355456,1566357503,RU
@@ -71136,90 +27987,23 @@
1566382080,1566384127,TR
1566384128,1566386175,CZ
1566386176,1566388223,FR
-1566388224,1566388479,HK
-1566388480,1566388991,HU
-1566388992,1566389247,SC
-1566389248,1566389503,HU
-1566389504,1566389759,SC
-1566389760,1566390271,US
+1566388224,1566390271,LU
1566390272,1566392319,LT
1566392320,1566394367,ES
-1566394368,1566394529,NO
-1566394530,1566394534,DK
-1566394535,1566396175,NO
-1566396176,1566396191,NL
-1566396192,1566396415,NO
-1566396416,1566396927,GB
-1566396928,1566397183,GI
-1566397184,1566397439,MT
-1566397440,1566398463,GB
+1566394368,1566394528,NO
+1566394529,1566394529,FR
+1566394530,1566394530,NO
+1566394531,1566394531,DE
+1566394532,1566394532,PL
+1566394533,1566394533,NL
+1566394534,1566394534,SE
+1566394535,1566394535,PT
+1566394536,1566394538,NO
+1566394539,1566394539,RU
+1566394540,1566396415,NO
+1566396416,1566398463,GB
1566398464,1566400511,RU
-1566400512,1566400575,NO
-1566400576,1566400583,GB
-1566400584,1566400607,NO
-1566400608,1566400639,GB
-1566400640,1566400671,NO
-1566400672,1566400703,DE
-1566400704,1566400735,NL
-1566400736,1566400859,NO
-1566400860,1566400863,NL
-1566400864,1566400871,GB
-1566400872,1566400903,NO
-1566400904,1566400907,DE
-1566400908,1566400911,GB
-1566400912,1566400915,GE
-1566400916,1566400919,NO
-1566400920,1566400923,NE
-1566400924,1566400943,NO
-1566400944,1566400955,NE
-1566400956,1566400967,NO
-1566400968,1566400979,GB
-1566400980,1566400983,GE
-1566400984,1566400987,NE
-1566400988,1566401023,NO
-1566401024,1566401247,US
-1566401248,1566401279,FR
-1566401280,1566401327,US
-1566401328,1566401343,NO
-1566401344,1566401376,US
-1566401377,1566401399,NO
-1566401400,1566401463,US
-1566401464,1566401467,NO
-1566401468,1566401483,US
-1566401484,1566401487,HK
-1566401488,1566401491,NO
-1566401492,1566401499,US
-1566401500,1566401503,NO
-1566401504,1566401535,US
-1566401536,1566401599,IN
-1566401600,1566401663,HK
-1566401664,1566401727,SG
-1566401728,1566401791,NO
-1566401792,1566401856,SI
-1566401857,1566401887,NO
-1566401888,1566401919,US
-1566401920,1566401951,NO
-1566401952,1566401967,GB
-1566401968,1566401975,HK
-1566401976,1566401987,AU
-1566401988,1566401991,HK
-1566401992,1566401999,SG
-1566402000,1566402003,AU
-1566402004,1566402007,NO
-1566402008,1566402011,AU
-1566402012,1566402035,HK
-1566402036,1566402111,NO
-1566402112,1566402143,HK
-1566402144,1566402175,NL
-1566402176,1566402199,US
-1566402200,1566402207,NO
-1566402208,1566402215,US
-1566402216,1566402223,NO
-1566402224,1566402239,US
-1566402240,1566402255,NO
-1566402256,1566402303,US
-1566402304,1566402559,NO
-1566402560,1566404607,IQ
+1566400512,1566402559,NO
1566404608,1566406655,ES
1566406656,1566408703,NL
1566408704,1566410751,GB
@@ -71238,39 +28022,20 @@
1566443520,1566445567,NO
1566445568,1566447615,PL
1566447616,1566451711,IT
-1566451712,1566452223,IL
-1566452224,1566452479,TR
-1566452480,1566453759,IL
+1566451712,1566453759,IL
1566453760,1566455807,IQ
-1566455808,1566456351,PT
-1566456352,1566456359,AO
-1566456360,1566457855,PT
+1566455808,1566457855,PT
1566457856,1566459903,CH
1566459904,1566461951,GB
1566461952,1566463999,DE
1566464000,1566466047,IT
1566466048,1566468095,ES
-1566468096,1566468879,BE
-1566468880,1566468895,HU
-1566468896,1566469391,BE
-1566469392,1566469407,HU
-1566469408,1566470143,BE
-1566470144,1566470165,IE
-1566470166,1566470167,GB
-1566470168,1566470351,IE
-1566470352,1566470367,GB
-1566470368,1566471755,IE
-1566471756,1566471757,GB
-1566471758,1566471783,IE
-1566471784,1566471791,GB
-1566471792,1566472005,IE
-1566472006,1566472007,GB
-1566472008,1566472051,IE
-1566472052,1566472053,GB
-1566472054,1566472117,IE
-1566472118,1566472119,GB
-1566472120,1566472191,IE
-1566472192,1566474239,GB
+1566468096,1566470143,BE
+1566470144,1566471007,GB
+1566471008,1566471011,IE
+1566471012,1566471143,GB
+1566471144,1566471147,IE
+1566471148,1566474239,GB
1566474240,1566476287,DE
1566476288,1566478335,BG
1566478336,1566482431,RU
@@ -71311,7 +28076,9 @@
1566556160,1566558207,RU
1566558208,1566560255,JO
1566560256,1566560767,IT
-1566560768,1566561023,SM
+1566560768,1566561015,SM
+1566561016,1566561017,IT
+1566561018,1566561023,SM
1566561024,1566564351,IT
1566564352,1566566399,IS
1566566400,1566568447,FR
@@ -71319,11 +28086,7 @@
1566570496,1566572543,NL
1566572544,1566703615,GB
1566703616,1566769151,SA
-1566769152,1566773759,CZ
-1566773760,1566774015,SK
-1566774016,1566793215,CZ
-1566793216,1566793471,SK
-1566793472,1566834687,CZ
+1566769152,1566834687,CZ
1566834688,1566900223,RU
1566900224,1566965759,IT
1566965760,1567031295,PT
@@ -71338,81 +28101,138 @@
1567555584,1567621119,AT
1567621120,1567696383,RO
1567696384,1567696895,MD
-1567696896,1567705087,RO
-1567705088,1567707135,MD
-1567707136,1567712767,RO
-1567712768,1567713279,DE
-1567713280,1567715327,RO
+1567696896,1567703039,RO
+1567703040,1567707391,MD
+1567707392,1567707647,RO
+1567707648,1567707903,MD
+1567707904,1567708671,RO
+1567708672,1567709183,MD
+1567709184,1567710207,RO
+1567710208,1567711231,MD
+1567711232,1567715327,RO
1567715328,1567717375,MD
-1567717376,1567719935,RO
-1567719936,1567720191,GB
-1567720192,1567750655,RO
-1567750656,1567751167,SE
-1567751168,1567752191,RO
+1567717376,1567742975,RO
+1567742976,1567743487,MD
+1567743488,1567749119,RO
+1567749120,1567750143,MD
+1567750144,1567752191,RO
1567752192,1567756287,MD
-1567756288,1567763521,RO
-1567763522,1567763522,EU
-1567763523,1567763542,RO
-1567763543,1567763543,EU
-1567763544,1567775743,RO
+1567756288,1567775743,RO
1567775744,1567776767,MD
-1567776768,1567785983,RO
-1567785984,1567786239,MD
-1567786240,1567830015,RO
+1567776768,1567830015,RO
1567830016,1567831039,MD
-1567831040,1567840255,RO
-1567840256,1567842303,DE
-1567842304,1567880191,RO
+1567831040,1567852543,RO
+1567852544,1567854591,MD
+1567854592,1567875071,RO
+1567875072,1567879167,MD
+1567879168,1567880191,RO
1567880192,1567881215,SE
1567881216,1567883263,RO
1567883264,1567948799,MD
-1567948800,1568026623,RO
+1567948800,1567961087,RO
+1567961088,1567965183,MD
+1567965184,1567966207,RO
+1567966208,1567969279,MD
+1567969280,1567981567,RO
+1567981568,1567983615,MD
+1567983616,1567984639,RO
+1567984640,1567987711,MD
+1567987712,1567988735,RO
+1567988736,1567992831,MD
+1567992832,1567997951,RO
+1567997952,1568014335,NL
+1568014336,1568026623,RO
1568026624,1568030719,MD
-1568030720,1568083967,RO
+1568030720,1568059391,RO
+1568059392,1568063487,MD
+1568063488,1568083967,RO
1568083968,1568086015,MD
-1568086016,1568178175,RO
+1568086016,1568104447,RO
+1568104448,1568106495,MD
+1568106496,1568107519,RO
+1568107520,1568108543,MD
+1568108544,1568112639,RO
+1568112640,1568114687,MD
+1568114688,1568115711,RO
+1568115712,1568118783,MD
+1568118784,1568120831,RO
+1568120832,1568122879,MD
+1568122880,1568130047,RO
+1568130048,1568133119,MD
+1568133120,1568138239,RO
+1568138240,1568141311,MD
+1568141312,1568178175,RO
1568178176,1568210943,RU
1568210944,1568243711,GB
-1568243712,1568245759,GP
-1568245760,1568246527,GF
+1568243712,1568243967,FR
+1568243968,1568244735,GP
+1568244736,1568244991,FR
+1568244992,1568245759,GP
+1568245760,1568246271,FR
+1568246272,1568246527,GF
1568246528,1568247039,GP
-1568247040,1568247551,GF
-1568247552,1568248831,GP
+1568247040,1568247295,FR
+1568247296,1568247551,GF
+1568247552,1568247807,MF
+1568247808,1568248063,FR
+1568248064,1568248831,GP
1568248832,1568249087,MQ
-1568249088,1568250879,GP
-1568250880,1568251135,MQ
-1568251136,1568251903,GP
-1568251904,1568253951,MQ
-1568253952,1568254719,GP
-1568254720,1568254975,GF
-1568254976,1568255743,GP
+1568249088,1568249599,GP
+1568249600,1568249855,MQ
+1568249856,1568250111,FR
+1568250112,1568250879,GP
+1568250880,1568251135,FR
+1568251136,1568251647,GP
+1568251648,1568251903,MF
+1568251904,1568252159,MQ
+1568252160,1568252415,GP
+1568252416,1568252671,MQ
+1568252672,1568252927,GP
+1568252928,1568253183,GF
+1568253184,1568253951,GP
+1568253952,1568255743,FR
1568255744,1568255999,GF
-1568256000,1568257791,GP
-1568257792,1568258303,MQ
-1568258304,1568259071,GF
-1568259072,1568260351,MQ
-1568260352,1568261119,GP
-1568261120,1568264191,MQ
-1568264192,1568268287,GP
-1568268288,1568268543,GF
+1568256000,1568256511,GP
+1568256512,1568259071,FR
+1568259072,1568259327,MQ
+1568259328,1568260095,GP
+1568260096,1568260351,FR
+1568260352,1568260607,MF
+1568260608,1568261119,GP
+1568261120,1568261375,FR
+1568261376,1568262143,GP
+1568262144,1568262655,MQ
+1568262656,1568262911,GP
+1568262912,1568263167,MQ
+1568263168,1568263423,FR
+1568263424,1568263679,MQ
+1568263680,1568264447,FR
+1568264448,1568264703,GP
+1568264704,1568265215,MF
+1568265216,1568265471,FR
+1568265472,1568266239,GP
+1568266240,1568266495,FR
+1568266496,1568267263,GP
+1568267264,1568268543,FR
1568268544,1568269311,GP
-1568269312,1568269823,MQ
-1568269824,1568272639,GP
-1568272640,1568273407,GF
-1568273408,1568274687,MQ
+1568269312,1568269567,MQ
+1568269568,1568270079,GP
+1568270080,1568270335,MQ
+1568270336,1568271359,GP
+1568271360,1568271615,FR
+1568271616,1568272383,GP
+1568272384,1568273151,FR
+1568273152,1568273407,GF
+1568273408,1568274175,FR
+1568274176,1568274687,MQ
1568274688,1568274943,GP
1568274944,1568275199,MQ
1568275200,1568275455,GP
-1568275456,1568276479,MQ
-1568276480,1568293135,DE
-1568293136,1568293151,SA
-1568293152,1568294983,DE
-1568294984,1568294991,FR
-1568294992,1568295855,DE
-1568295856,1568295863,GB
-1568295864,1568296239,DE
-1568296240,1568296247,ZA
-1568296248,1568309247,DE
+1568275456,1568275711,FR
+1568275712,1568275967,MQ
+1568275968,1568276223,FR
+1568276224,1568276479,MQ
+1568276480,1568309247,DE
1568309248,1568342015,RO
1568342016,1568374783,BG
1568374784,1568440319,RU
@@ -71424,7 +28244,9 @@
1568571392,1568604159,LB
1568604160,1568636927,UA
1568636928,1569193983,DE
-1569193984,1569718271,HR
+1569193984,1569438463,HR
+1569438464,1569438719,BR
+1569438720,1569718271,HR
1569718272,1570242559,IT
1570242560,1570275327,GB
1570275328,1570308095,BG
@@ -71433,11 +28255,7 @@
1570373632,1570406399,NL
1570406400,1570439167,PL
1570439168,1570471935,TR
-1570471936,1570480895,BG
-1570480896,1570481151,MK
-1570481152,1570492159,BG
-1570492160,1570492415,ES
-1570492416,1570504703,BG
+1570471936,1570504703,BG
1570504704,1570570239,ES
1570570240,1570572287,NL
1570572288,1570574335,UA
@@ -71466,158 +28284,14 @@
1570644768,1570644775,GB
1570644776,1570644991,FR
1570644992,1570645247,GB
-1570645248,1570647807,FR
-1570647808,1570648063,GB
-1570648064,1570652159,FR
-1570652160,1570652287,SE
-1570652288,1570652291,MY
-1570652292,1570652295,GB
-1570652296,1570652299,DE
-1570652300,1570652543,SE
-1570652544,1570652551,FR
-1570652552,1570652891,SE
-1570652892,1570652895,DE
-1570652896,1570655631,SE
-1570655632,1570655635,DE
-1570655636,1570655999,SE
-1570656000,1570656255,GB
-1570656256,1570660351,SE
-1570660352,1570660359,FI
-1570660360,1570660367,SE
-1570660368,1570660383,FR
-1570660384,1570660387,RU
-1570660388,1570660407,SE
-1570660408,1570660411,DE
-1570660412,1570660543,SE
-1570660544,1570660575,FI
-1570660576,1570660591,GB
-1570660592,1570660595,RU
-1570660596,1570660599,SE
-1570660600,1570660607,FI
-1570660608,1570660615,SE
-1570660616,1570660619,RU
-1570660620,1570660623,SE
-1570660624,1570660639,FR
-1570660640,1570660675,DE
-1570660676,1570660863,SE
-1570660864,1570661375,NO
-1570661376,1570661631,GB
-1570661632,1570662143,SE
-1570662144,1570662399,DE
-1570662400,1570663423,SE
-1570663424,1570663583,GB
-1570663584,1570663615,NO
-1570663616,1570663839,GB
-1570663840,1570663871,NO
-1570663872,1570663935,GB
-1570663936,1570665919,SE
-1570665920,1570665935,GB
-1570665936,1570665951,IT
-1570665952,1570665967,FR
-1570665968,1570666143,SE
-1570666144,1570666147,DE
-1570666148,1570666175,SE
-1570666176,1570666191,GB
-1570666192,1570666223,FR
-1570666224,1570666227,SE
-1570666228,1570666231,NO
-1570666232,1570666263,SE
-1570666264,1570666267,US
-1570666268,1570666367,SE
-1570666368,1570666383,FR
-1570666384,1570666387,SE
-1570666388,1570666391,NL
-1570666392,1570666395,SE
-1570666396,1570666399,DE
-1570666400,1570666431,SE
-1570666432,1570666447,GB
-1570666448,1570666463,DE
-1570666464,1570666495,SE
-1570666496,1570666499,ES
-1570666500,1570666511,SE
-1570666512,1570666519,NO
-1570666520,1570666687,SE
-1570666688,1570666703,GB
-1570666704,1570666719,ES
-1570666720,1570666735,FR
-1570666736,1570666751,SE
-1570666752,1570666755,ES
-1570666756,1570666759,SE
-1570666760,1570666767,GB
-1570666768,1570666887,SE
-1570666888,1570666891,DE
-1570666892,1570666903,SE
-1570666904,1570666911,NL
-1570666912,1570666943,SE
-1570666944,1570666959,FR
-1570666960,1570666975,SE
-1570666976,1570666991,FR
-1570666992,1570667007,SE
-1570667008,1570667011,ES
-1570667012,1570667015,SE
-1570667016,1570667023,FI
-1570667024,1570667039,ES
-1570667040,1570667167,SE
-1570667168,1570667171,DE
-1570667172,1570667199,SE
-1570667200,1570667215,FR
-1570667216,1570667231,SE
-1570667232,1570667247,FR
-1570667248,1570667263,SE
-1570667264,1570667267,ES
-1570667268,1570667283,SE
-1570667284,1570667287,MT
-1570667288,1570667295,SE
-1570667296,1570667327,GB
-1570667328,1570667335,SE
-1570667336,1570667339,GB
-1570667340,1570667343,NL
-1570667344,1570667347,DE
-1570667348,1570667455,SE
-1570667456,1570667471,FR
-1570667472,1570667487,SE
-1570667488,1570667503,FR
-1570667504,1570667515,SE
-1570667516,1570667519,US
-1570667520,1570667523,NL
-1570667524,1570667527,IT
-1570667528,1570667531,NO
-1570667532,1570667535,IT
-1570667536,1570667587,SE
-1570667588,1570667591,US
-1570667592,1570667599,SE
-1570667600,1570667603,DE
-1570667604,1570667647,SE
-1570667648,1570667651,US
-1570667652,1570667711,SE
-1570667712,1570667727,FR
-1570667728,1570667743,NL
-1570667744,1570667775,SE
-1570667776,1570667779,NL
-1570667780,1570667791,SE
-1570667792,1570667807,ES
-1570667808,1570667839,SE
-1570667840,1570667903,FR
-1570667904,1570667907,SE
-1570667908,1570667911,RU
-1570667912,1570667915,US
-1570667916,1570667919,SE
-1570667920,1570667923,DE
-1570667924,1570667967,SE
-1570667968,1570667983,FR
-1570667984,1570668031,SE
-1570668032,1570668035,NL
-1570668036,1570668047,SE
-1570668048,1570668055,ES
-1570668056,1570668063,NL
-1570668064,1570668287,SE
-1570668288,1570668291,NL
-1570668292,1570668351,SE
-1570668352,1570668415,NO
-1570668416,1570668543,SE
-1570668544,1570671983,RU
-1570671984,1570671987,TR
-1570671988,1570701311,RU
+1570645248,1570652159,FR
+1570652160,1570668543,SE
+1570668544,1570686975,RU
+1570686976,1570693119,NL
+1570693120,1570695167,RU
+1570695168,1570696191,PL
+1570696192,1570697215,BR
+1570697216,1570701311,RU
1570701312,1570717695,PL
1570717696,1570725887,HR
1570725888,1570734079,DE
@@ -71629,104 +28303,102 @@
1570764800,1570766847,DE
1570766848,1571291135,DK
1571291136,1571422207,RO
-1571422208,1571422975,UA
-1571422976,1571423231,RU
-1571423232,1571423487,UA
+1571422208,1571422463,CZ
+1571422464,1571422719,UA
+1571422720,1571423231,RU
+1571423232,1571423487,CZ
1571423488,1571423999,RU
1571424000,1571424255,KZ
1571424256,1571424511,KG
-1571424512,1571424767,RU
-1571424768,1571425023,CY
-1571425024,1571425535,RU
+1571424512,1571424767,AM
+1571424768,1571425023,CZ
+1571425024,1571425024,RU
+1571425025,1571425148,CZ
+1571425149,1571425149,RU
+1571425150,1571425231,CZ
+1571425232,1571425232,RU
+1571425233,1571425279,CZ
+1571425280,1571425535,RU
1571425536,1571425791,NL
-1571425792,1571426303,RU
-1571426304,1571428351,CZ
-1571428352,1571428863,RU
-1571428864,1571429119,CZ
-1571429120,1571429375,RU
+1571425792,1571428607,CZ
+1571428608,1571428863,UA
+1571428864,1571429375,CZ
1571429376,1571435519,UA
-1571435520,1571435775,NL
-1571435776,1571436031,RU
-1571436032,1571436543,UA
+1571435520,1571435775,RU
+1571435776,1571436287,CZ
+1571436288,1571436543,UA
1571436544,1571438591,RU
-1571438592,1571441663,UA
-1571441664,1571441791,RU
-1571441792,1571441887,DE
-1571441888,1571441919,RU
-1571441920,1571442687,NL
+1571438592,1571440639,UA
+1571440640,1571441407,CZ
+1571441408,1571441663,UA
+1571441664,1571441919,RU
+1571441920,1571442175,CZ
+1571442176,1571442687,NL
1571442688,1571443199,UA
-1571443200,1571443455,NL
+1571443200,1571443455,RU
1571443456,1571443711,UA
-1571443712,1571444735,CZ
-1571444736,1571446011,NL
-1571446012,1571446015,US
-1571446016,1571446783,NL
-1571446784,1571447807,KZ
-1571447808,1571448831,RU
-1571448832,1571450879,US
+1571443712,1571444991,CZ
+1571444992,1571445247,UA
+1571445248,1571446271,NL
+1571446272,1571446783,CZ
+1571446784,1571447039,GB
+1571447040,1571447295,CZ
+1571447296,1571447807,RU
+1571447808,1571448831,CZ
+1571448832,1571449343,NL
+1571449344,1571449855,CZ
+1571449856,1571450879,RU
1571450880,1571451903,UA
-1571451904,1571452927,RU
-1571452928,1571453951,CZ
-1571453952,1571454975,GB
-1571454976,1571455999,RU
-1571456000,1571456511,CY
-1571456512,1571457023,RU
-1571457024,1571458047,UA
+1571451904,1571453951,CZ
+1571453952,1571455999,RU
+1571456000,1571456511,UA
+1571456512,1571457535,CZ
+1571457536,1571458047,RU
1571458048,1571459071,CZ
1571459072,1571463167,UA
-1571463168,1571465215,RU
-1571465216,1571469311,CZ
-1571469312,1571470335,RU
-1571470336,1571477503,CZ
-1571477504,1571478527,RU
-1571478528,1571485695,CZ
-1571485696,1571487743,RU
+1571463168,1571471359,CZ
+1571471360,1571475455,RU
+1571475456,1571476479,CZ
+1571476480,1571477503,RU
+1571477504,1571487743,CZ
1571487744,1571495935,SK
-1571495936,1571500031,CZ
-1571500032,1571502079,RU
-1571502080,1571504127,CZ
+1571495936,1571504127,CZ
1571504128,1571508223,UA
1571508224,1571514367,CZ
1571514368,1571520511,BY
-1571520512,1571522559,KZ
-1571522560,1571522815,RU
-1571522816,1571523071,UA
-1571523072,1571523583,RU
-1571523584,1571524607,CZ
+1571520512,1571522047,UA
+1571522048,1571522815,RU
+1571522816,1571524607,CZ
1571524608,1571526655,RU
1571526656,1571528703,CZ
-1571528704,1571529727,MD
+1571528704,1571529215,BY
+1571529216,1571529727,CZ
1571529728,1571530239,RU
-1571530240,1571530751,CZ
-1571530752,1571531263,RU
+1571530240,1571531263,CZ
1571531264,1571531775,UA
1571531776,1571532799,RU
-1571532800,1571533055,SK
-1571533056,1571533823,CZ
-1571533824,1571534847,RU
+1571532800,1571534079,CZ
+1571534080,1571534847,RU
1571534848,1571535103,LV
-1571535104,1571535359,UA
-1571535360,1571539967,RU
-1571539968,1571540223,NL
-1571540224,1571540479,UA
-1571540480,1571540735,RU
-1571540736,1571540991,BY
+1571535104,1571535617,CZ
+1571535618,1571535618,RU
+1571535619,1571535871,CZ
+1571535872,1571538943,RU
+1571538944,1571540991,CZ
1571540992,1571541247,RU
1571541248,1571541503,UA
-1571541504,1571542015,CY
-1571542016,1571542527,RU
-1571542528,1571542783,SK
-1571542784,1571543039,KG
-1571543040,1571543551,CZ
+1571541504,1571543039,CZ
+1571543040,1571543551,NL
1571543552,1571543807,UA
-1571543808,1571545343,RU
+1571543808,1571544063,CZ
+1571544064,1571545343,RU
1571545344,1571545599,UA
-1571545600,1571545855,RU
-1571545856,1571546111,CZ
-1571546112,1571546623,KZ
-1571546624,1571549183,CZ
-1571549184,1571552255,UA
-1571552256,1571553279,CZ
+1571545600,1571545855,CZ
+1571545856,1571546111,RU
+1571546112,1571546879,CZ
+1571546880,1571547135,RU
+1571547136,1571549183,CZ
+1571549184,1571553279,UA
1571553280,1571684351,IL
1571684352,1571686399,ES
1571686400,1571688447,GB
@@ -71739,40 +28411,20 @@
1571702784,1571704831,RU
1571704832,1571706879,GB
1571706880,1571708927,NL
-1571708928,1571709439,GB
-1571709440,1571709567,DE
-1571709568,1571709695,GB
-1571709696,1571709823,FR
-1571709824,1571709951,GB
-1571709952,1571710079,NL
-1571710080,1571710207,GB
-1571710208,1571710335,ES
-1571710336,1571710463,GB
-1571710464,1571710591,IT
-1571710592,1571710975,GB
+1571708928,1571710975,GB
1571710976,1571713023,NL
1571713024,1571715071,RU
1571715072,1571717119,GR
1571717120,1571719167,RU
1571719168,1571721215,GB
1571721216,1571723263,FR
-1571723264,1571723775,GB
-1571723776,1571724031,SE
-1571724032,1571725311,GB
+1571723264,1571725311,GB
1571725312,1571727359,RO
1571727360,1571729407,IE
-1571729408,1571729791,SK
-1571729792,1571729799,CZ
-1571729800,1571731455,SK
-1571731456,1571732479,CH
-1571732480,1571732495,LI
-1571732496,1571733503,CH
+1571729408,1571731455,SK
+1571731456,1571733503,CH
1571733504,1571735551,FI
1571735552,1571737599,NL
-1571737600,1571737855,GB
-1571737856,1571738111,EU
-1571738112,1571738367,NL
-1571738368,1571739647,EU
1571739648,1571741695,GB
1571741696,1571743743,RU
1571743744,1571745791,GB
@@ -71787,32 +28439,40 @@
1571749888,1571758079,RU
1571758080,1571766271,IL
1571766272,1571786751,PL
-1571786752,1571790847,EU
1571790848,1571794943,PL
1571794944,1571799039,NL
1571799040,1571815423,UA
-1571815424,1571817215,FR
-1571817216,1571817983,RE
-1571817984,1571818239,FR
-1571818240,1571818751,RE
-1571818752,1571820543,FR
-1571820544,1571821311,RE
-1571821312,1571822591,FR
+1571815424,1571815679,FR
+1571815680,1571815935,RE
+1571815936,1571816959,FR
+1571816960,1571817727,RE
+1571817728,1571818495,FR
+1571818496,1571818751,RE
+1571818752,1571819007,FR
+1571819008,1571819263,RE
+1571819264,1571819519,FR
+1571819520,1571819775,RE
+1571819776,1571820287,FR
+1571820288,1571820543,RE
+1571820544,1571820799,FR
+1571820800,1571821055,RE
+1571821056,1571822591,FR
1571822592,1571823103,RE
-1571823104,1571824383,FR
-1571824384,1571824639,RE
-1571824640,1571826175,FR
-1571826176,1571826687,RE
-1571826688,1571826943,FR
-1571826944,1571827199,RE
-1571827200,1571830271,FR
-1571830272,1571831295,RE
-1571831296,1571831807,FR
+1571823104,1571823871,FR
+1571823872,1571824127,RE
+1571824128,1571824895,FR
+1571824896,1571825151,RE
+1571825152,1571826687,FR
+1571826688,1571827199,RE
+1571827200,1571827711,FR
+1571827712,1571827967,RE
+1571827968,1571828991,FR
+1571828992,1571829247,RE
+1571829248,1571831807,FR
1571831808,1571848191,DK
1571848192,1571864575,RU
1571864576,1571880959,PL
1571880960,1571897343,RU
-1571898368,1571898623,NO
1571913728,1571930111,GE
1571930112,1571946495,LV
1571946496,1571962879,SA
@@ -71821,9 +28481,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,1572043263,GB
+1572043264,1572044799,RU
1572044800,1572061183,IT
1572061184,1572077567,PL
1572077568,1572093951,RU
@@ -71832,8 +28495,7 @@
1572098048,1572100095,DK
1572100096,1572102143,CH
1572102144,1572110335,BA
-1572110336,1572110591,US
-1572110592,1572112383,GB
+1572110336,1572112383,GB
1572112384,1572114431,RU
1572114432,1572116479,BA
1572116480,1572118527,DE
@@ -71848,13 +28510,7 @@
1572257792,1572274175,FR
1572274176,1572276223,FI
1572276224,1572277247,US
-1572277248,1572277759,DE
-1572277760,1572280319,SG
-1572280320,1572280575,DE
-1572280576,1572281855,SG
-1572281856,1572282111,IN
-1572282112,1572282367,PT
-1572282368,1572290559,SG
+1572277248,1572290559,SG
1572290560,1572306943,RU
1572306944,1572323327,BG
1572323328,1572339711,UA
@@ -71874,7 +28530,10 @@
1572392960,1572393471,NL
1572393472,1572393983,GB
1572393984,1572394495,DE
-1572394496,1572397055,US
+1572394496,1572394751,FR
+1572394752,1572395263,US
+1572395264,1572395519,NL
+1572395520,1572397055,US
1572397056,1572401151,AZ
1572401152,1572405247,GB
1572405248,1572409343,CZ
@@ -71887,7 +28546,6 @@
1572433920,1572438015,IT
1572438016,1572442111,AT
1572442112,1572446207,RU
-1572446208,1572450303,NO
1572450304,1572458495,RU
1572458496,1572462591,UA
1572462592,1572466687,LB
@@ -71896,70 +28554,25 @@
1572474880,1572475135,ZA
1572475136,1572483071,GB
1572483072,1572487167,RU
-1572487168,1572490751,RS
-1572490752,1572491007,HR
+1572487168,1572491007,RS
1572491008,1572491263,LU
1572491264,1572495359,IT
1572495360,1572499455,RU
1572499456,1572503551,TR
-1572503552,1572504063,IT
-1572504064,1572504319,US
-1572504320,1572504575,DE
-1572504576,1572504703,RO
-1572504704,1572504831,TR
-1572504832,1572505087,SG
-1572505088,1572505871,IT
-1572505872,1572505887,GR
-1572505888,1572505983,IT
-1572505984,1572506623,GR
-1572506624,1572507199,IT
-1572507200,1572507207,GB
-1572507208,1572507647,IT
+1572503552,1572507647,IT
1572507648,1572511743,GB
1572511744,1572515839,DE
-1572515840,1572517759,NL
-1572517760,1572517775,CA
-1572517776,1572519935,NL
+1572515840,1572519935,NL
1572519936,1572524031,DE
1572524032,1572528127,GE
1572528128,1572532223,RU
1572532224,1572536319,IT
-1572536320,1572536831,JE
-1572536832,1572537087,GB
-1572537088,1572538111,JE
-1572538112,1572538175,GB
-1572538176,1572538367,JE
+1572536320,1572538367,JE
1572538368,1572540415,NL
-1572540416,1572541439,GB
-1572541440,1572541447,FR
-1572541448,1572541455,GB
-1572541456,1572541463,FR
-1572541464,1572541471,GB
-1572541472,1572541535,FR
-1572541536,1572541543,GB
-1572541544,1572541551,CH
-1572541552,1572541951,GB
-1572541952,1572541983,DE
-1572541984,1572541991,BE
-1572541992,1572541999,ES
-1572542000,1572542015,GB
-1572542016,1572542031,HU
-1572542032,1572542071,GB
-1572542072,1572542079,DE
-1572542080,1572542087,ES
-1572542088,1572542111,GB
-1572542112,1572542119,PL
-1572542120,1572542127,ES
-1572542128,1572542151,GB
-1572542152,1572542159,DE
-1572542160,1572542207,GB
-1572542208,1572542463,FR
+1572540416,1572542463,GB
1572542464,1572544511,IT
-1572544512,1572544575,IQ
-1572544576,1572544767,US
-1572544768,1572545279,IQ
-1572545280,1572545535,US
-1572545536,1572546559,IQ
+1572544512,1572544767,FR
+1572544768,1572546559,IQ
1572546560,1572548607,FR
1572548608,1572550655,NL
1572550656,1572552703,DE
@@ -71971,13 +28584,11 @@
1572562944,1572564991,CZ
1572564992,1572567039,DE
1572567040,1572569087,RU
-1572569088,1572569343,NL
-1572569344,1572569599,GB
-1572569600,1572571135,NL
1572571136,1572573183,RO
-1572573184,1572574975,GG
-1572574976,1572575167,GB
-1572575168,1572575231,GG
+1572573184,1572574463,GG
+1572574464,1572574719,GB
+1572574720,1572574975,GG
+1572574976,1572575231,GB
1572575232,1572577279,RU
1572577280,1572579327,AM
1572579328,1572581375,GB
@@ -71986,11 +28597,9 @@
1572587520,1572589567,TR
1572589568,1572591615,CH
1572591616,1572593663,NL
-1572593664,1572594687,GB
-1572594688,1572594943,FR
-1572594944,1572595711,GB
+1572593664,1572595711,GB
1572595712,1572597759,DE
-1572597760,1572599807,RS
+1572597760,1572599807,XK
1572599808,1572601855,DE
1572601856,1572603903,SE
1572603904,1572605951,GE
@@ -72000,15 +28609,8 @@
1572612096,1572614143,RU
1572614144,1572616191,ES
1572616192,1572618239,CH
-1572618240,1572618383,NL
-1572618384,1572618399,US
-1572618400,1572618415,HK
-1572618416,1572620287,NL
-1572620288,1572620415,CH
-1572620416,1572620431,CZ
-1572620432,1572620559,CH
-1572620560,1572620567,NL
-1572620568,1572622335,CH
+1572618240,1572620287,NL
+1572620288,1572622335,CH
1572622336,1572624383,RU
1572624384,1572626431,NO
1572626432,1572628479,IT
@@ -72020,7 +28622,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
@@ -72036,62 +28638,45 @@
1572661248,1572663295,NO
1572663296,1572665343,DE
1572665344,1572667391,NL
-1572667392,1572667455,GB
-1572667456,1572667459,SA
-1572667460,1572668655,GB
-1572668656,1572668671,CY
-1572668672,1572668703,GB
-1572668704,1572668711,CY
-1572668712,1572668719,GB
-1572668720,1572668727,CY
-1572668728,1572669439,GB
+1572667392,1572669439,GB
1572669440,1572673535,RU
1572673536,1572675583,AT
1572675584,1572677631,ES
-1572677632,1572681727,RU
-1572681728,1572681983,DE
-1572681984,1572682239,RU
-1572682240,1572682751,DE
-1572682752,1572683775,RU
+1572677632,1572683775,RU
1572683776,1572685823,CH
1572685824,1572689919,RU
1572689920,1572691967,ES
1572691968,1572694015,SA
1572694016,1572696063,GB
1572696064,1572698111,HU
-1572698112,1572700159,RU
1572700160,1572702207,NL
1572702208,1572704255,IT
1572704256,1572706303,RU
1572706304,1572708351,DE
-1572708352,1572708863,GB
-1572708864,1572709375,GG
-1572709376,1572709887,GB
-1572709888,1572710143,GG
-1572710144,1572710399,GB
+1572708352,1572708607,GB
+1572708608,1572709375,GG
+1572709376,1572710143,GB
+1572710144,1572710399,GG
1572710400,1572712447,DE
1572712448,1572714495,ES
-1572714496,1572716543,IT
+1572714496,1572714943,NG
+1572714944,1572714959,IT
+1572714960,1572716543,NG
1572716544,1572718591,SA
1572718592,1572720639,RU
1572720640,1572722687,IT
1572722688,1572724735,RU
1572724736,1572726783,BY
1572726784,1572728831,CH
-1572728832,1572730239,SE
-1572730240,1572730303,MY
-1572730304,1572730879,SE
+1572728832,1572730879,SE
1572730880,1572732927,RU
1572732928,1572734975,HU
-1572734976,1572737023,KZ
1572737024,1572739071,RU
1572739072,1572741119,IR
1572741120,1572743167,FI
1572743168,1572745215,UA
1572745216,1572749311,CZ
-1572749312,1572751111,DE
-1572751112,1572751119,GB
-1572751120,1572751359,DE
+1572749312,1572751359,DE
1572751360,1572753407,CH
1572753408,1572755455,NO
1572755456,1572757503,DE
@@ -72100,14 +28685,9 @@
1572761600,1572763647,GB
1572763648,1572765695,TR
1572765696,1572767743,CZ
-1572767744,1572769740,NL
-1572769741,1572769790,KY
-1572769791,1572769791,NL
-1572769792,1572770047,RO
-1572770048,1572770111,RS
-1572770112,1572771839,RO
-1572771840,1572772095,EU
-1572772096,1572773887,ES
+1572767744,1572769791,NL
+1572769792,1572771839,RO
+1572771840,1572773887,ES
1572773888,1572775935,RS
1572775936,1572777983,GB
1572777984,1572780031,UA
@@ -72124,9 +28704,7 @@
1572800512,1572804607,RU
1572804608,1572808703,GB
1572808704,1572810751,FR
-1572810752,1572812031,DE
-1572812032,1572812543,RO
-1572812544,1572812799,DE
+1572810752,1572812799,DE
1572812800,1572814847,RU
1572814848,1572816895,KW
1572816896,1572818943,RU
@@ -72141,50 +28719,20 @@
1572835328,1572837375,IE
1572837376,1572839423,DK
1572839424,1572841471,DE
-1572841472,1572842239,EU
-1572842240,1572842495,LV
-1572842496,1572842751,EU
-1572842752,1572843007,NL
-1572843008,1572843519,EU
1572843520,1572845567,JO
1572845568,1572847615,FR
1572847616,1572849663,GI
1572849664,1572851711,GB
1572851712,1572853759,DE
-1572853760,1572853760,EU
-1572853761,1572853767,BE
-1572853768,1572853769,EU
-1572853770,1572853770,DK
-1572853771,1572853775,EU
-1572853776,1572854015,BE
-1572854016,1572854271,LU
-1572854272,1572854272,EU
-1572854273,1572854284,BE
-1572854285,1572854285,NL
-1572854286,1572854286,CH
-1572854287,1572854287,LU
-1572854288,1572854288,BE
-1572854289,1572854289,CH
-1572854290,1572854527,BE
-1572854528,1572855039,EU
-1572855040,1572855071,BE
-1572855072,1572855295,EU
-1572855296,1572855551,CH
-1572855552,1572855552,EU
-1572855553,1572855558,BE
-1572855559,1572855561,EU
-1572855562,1572855562,DK
-1572855563,1572855567,EU
-1572855568,1572855807,BE
+1572853760,1572855807,BE
1572855808,1572857855,KZ
1572857856,1572859903,SE
1572859904,1572861951,IT
1572861952,1572863999,CH
1572864000,1577058303,DE
1577058304,1578106879,GB
-1578106880,1578139391,DE
-1578139392,1578139647,AT
-1578139648,1578172415,DE
+1578106880,1578139647,DE
+1578139648,1578172415,CH
1578172416,1578237951,MT
1578237952,1578303487,DK
1578303488,1578369023,RU
@@ -72192,696 +28740,48 @@
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,1578590223,FR
-1578590224,1578590231,DE
-1578590232,1578590239,IT
-1578590240,1578590271,FR
-1578590272,1578590275,NL
-1578590276,1578590279,PT
-1578590280,1578590283,PL
-1578590284,1578590287,GB
-1578590288,1578590303,FR
-1578590304,1578590311,IT
-1578590312,1578590339,FR
-1578590340,1578590343,DE
-1578590344,1578590351,FR
-1578590352,1578590367,GB
-1578590368,1578590415,FR
-1578590416,1578590431,PL
-1578590432,1578590447,BE
-1578590448,1578590471,FR
-1578590472,1578590479,DE
-1578590480,1578590495,IT
-1578590496,1578590527,PL
-1578590528,1578590535,ES
-1578590536,1578590543,FR
-1578590544,1578590559,PL
-1578590560,1578590563,DE
-1578590564,1578590567,FR
-1578590568,1578590571,PL
-1578590572,1578590575,IT
-1578590576,1578590599,FR
-1578590600,1578590603,LT
-1578590604,1578590607,PL
-1578590608,1578590619,DE
-1578590620,1578590623,IT
-1578590624,1578590639,FR
-1578590640,1578590647,CZ
-1578590648,1578590655,BE
-1578590656,1578590659,FR
-1578590660,1578590663,CZ
-1578590664,1578590667,FR
-1578590668,1578590671,NL
-1578590672,1578590687,PL
-1578590688,1578590691,GB
-1578590692,1578590695,DE
-1578590696,1578590699,FR
-1578590700,1578590727,PL
-1578590728,1578590731,GB
-1578590732,1578590735,PL
-1578590736,1578590787,FR
-1578590788,1578590791,LT
-1578590792,1578590799,FR
-1578590800,1578590815,ES
-1578590816,1578590831,GB
-1578590832,1578590839,NL
-1578590840,1578590847,PL
-1578590848,1578590851,DE
-1578590852,1578590855,FR
-1578590856,1578590859,GB
-1578590860,1578590879,FR
-1578590880,1578590911,PL
-1578590912,1578590927,FR
-1578590928,1578590935,DE
-1578590936,1578590943,ES
-1578590944,1578590975,FR
-1578590976,1578590991,GB
-1578590992,1578590999,PT
-1578591000,1578591007,FR
-1578591008,1578591011,GB
-1578591012,1578591023,FR
-1578591024,1578591039,PL
-1578591040,1578591055,NL
-1578591056,1578591071,FR
-1578591072,1578591119,GB
-1578591120,1578591127,FR
-1578591128,1578591135,DE
-1578591136,1578591143,FR
-1578591144,1578591151,GB
-1578591152,1578591167,ES
-1578591168,1578591183,FR
-1578591184,1578591187,CH
-1578591188,1578591191,PT
-1578591192,1578591195,GB
-1578591196,1578591279,FR
-1578591280,1578591287,ES
-1578591288,1578591291,FR
-1578591292,1578591295,ES
-1578591296,1578591327,FR
-1578591328,1578591343,PL
-1578591344,1578591391,FR
-1578591392,1578591395,IT
-1578591396,1578591399,PL
-1578591400,1578591403,DE
-1578591404,1578591407,PL
-1578591408,1578591411,ES
-1578591412,1578591415,FR
-1578591416,1578591423,ES
-1578591424,1578591431,PL
-1578591432,1578591435,NL
-1578591436,1578591439,ES
-1578591440,1578591455,FR
-1578591456,1578591459,GB
-1578591460,1578591463,FR
-1578591464,1578591487,PL
-1578591488,1578591503,FR
-1578591504,1578591519,CH
-1578591520,1578591551,ES
-1578591552,1578591555,BE
-1578591556,1578591559,IT
-1578591560,1578591575,FR
-1578591576,1578591579,DE
-1578591580,1578591583,ES
-1578591584,1578591599,IT
-1578591600,1578591703,FR
-1578591704,1578591707,DE
-1578591708,1578591791,FR
-1578591792,1578591795,ES
-1578591796,1578591799,NL
-1578591800,1578591807,PL
-1578591808,1578591855,FR
-1578591856,1578591871,SN
-1578591872,1578591887,FR
-1578591888,1578591891,PL
-1578591892,1578591899,FR
-1578591900,1578591903,NL
-1578591904,1578591919,PL
-1578591920,1578591939,ES
-1578591940,1578591951,FR
-1578591952,1578591967,PT
-1578591968,1578591975,FR
-1578591976,1578591979,PL
-1578591980,1578591983,FR
-1578591984,1578592031,PL
-1578592032,1578592039,PT
-1578592040,1578592043,ES
-1578592044,1578592047,PL
-1578592048,1578592063,FR
-1578592064,1578592067,ES
-1578592068,1578592071,FR
-1578592072,1578592079,PL
-1578592080,1578592095,ES
-1578592096,1578592111,FR
-1578592112,1578592127,GB
-1578592128,1578592143,DE
-1578592144,1578592159,NL
-1578592160,1578592163,FR
-1578592164,1578592171,IT
-1578592172,1578592175,ES
+1578590208,1578590787,FR
+1578590788,1578590791,ES
+1578590792,1578590851,FR
+1578590852,1578590855,ES
+1578590856,1578590863,FR
+1578590864,1578590879,BE
+1578590880,1578591695,FR
+1578591696,1578591699,ES
+1578591700,1578592175,FR
1578592176,1578592183,CZ
1578592184,1578592191,PT
1578592192,1578592199,BE
1578592200,1578592207,CH
-1578592208,1578592223,FR
-1578592224,1578592239,ES
-1578592240,1578592279,FR
-1578592280,1578592283,BE
-1578592284,1578592287,FR
-1578592288,1578592295,IT
-1578592296,1578592303,PT
-1578592304,1578592351,FR
-1578592352,1578592367,PL
-1578592368,1578592371,FR
-1578592372,1578592375,PL
-1578592376,1578592379,GB
-1578592380,1578592383,DE
-1578592384,1578592395,FR
-1578592396,1578592399,DE
-1578592400,1578592407,NL
-1578592408,1578592411,GB
-1578592412,1578592415,DE
-1578592416,1578592423,IT
-1578592424,1578592431,IE
-1578592432,1578592487,FR
-1578592488,1578592495,FI
-1578592496,1578592511,FR
-1578592512,1578592515,GB
-1578592516,1578592519,PL
-1578592520,1578592531,FR
-1578592532,1578592535,GB
-1578592536,1578592539,PL
-1578592540,1578592559,FR
-1578592560,1578592575,DE
-1578592576,1578592591,GB
-1578592592,1578592607,FR
-1578592608,1578592623,IE
-1578592624,1578592687,FR
-1578592688,1578592695,DE
-1578592696,1578592703,ES
-1578592704,1578592719,FR
-1578592720,1578592735,CH
-1578592736,1578592743,PL
-1578592744,1578592747,PT
-1578592748,1578592751,DE
-1578592752,1578592767,IT
-1578592768,1578592783,DE
-1578592784,1578592799,ES
-1578592800,1578592803,NL
-1578592804,1578592811,FR
-1578592812,1578592815,GB
-1578592816,1578592827,FR
-1578592828,1578592831,GB
-1578592832,1578592847,PL
-1578592848,1578592851,BE
-1578592852,1578592855,DE
-1578592856,1578592859,FR
-1578592860,1578592879,PL
-1578592880,1578592883,FR
-1578592884,1578592891,GB
-1578592892,1578592895,FR
-1578592896,1578592959,IT
-1578592960,1578592991,FR
-1578592992,1578593007,IE
-1578593008,1578593279,DE
-1578593280,1578593295,GB
-1578593296,1578593299,ES
-1578593300,1578593303,GB
-1578593304,1578593307,ES
-1578593308,1578593319,FR
-1578593320,1578593323,PT
-1578593324,1578593327,FR
-1578593328,1578593343,IT
-1578593344,1578593359,PT
-1578593360,1578593375,PL
-1578593376,1578593407,GB
-1578593408,1578593411,IT
-1578593412,1578593415,FR
-1578593416,1578593423,DE
-1578593424,1578593439,FR
-1578593440,1578593443,GB
-1578593444,1578593447,PL
-1578593448,1578593455,DE
-1578593456,1578593471,FR
-1578593472,1578593479,GB
-1578593480,1578593483,ES
-1578593484,1578593487,FR
-1578593488,1578593495,ES
-1578593496,1578593503,FR
-1578593504,1578593519,PL
-1578593520,1578593543,FR
-1578593544,1578593547,ES
-1578593548,1578593551,FI
-1578593552,1578593583,FR
-1578593584,1578593587,GB
-1578593588,1578593591,DE
-1578593592,1578593599,IE
-1578593600,1578593631,FR
-1578593632,1578593647,NL
-1578593648,1578593659,PL
-1578593660,1578593671,FR
-1578593672,1578593679,DE
-1578593680,1578593695,PL
-1578593696,1578593703,GB
-1578593704,1578593711,BE
-1578593712,1578593715,FR
-1578593716,1578593719,IT
-1578593720,1578593723,CH
-1578593724,1578593759,FR
-1578593760,1578593775,ES
-1578593776,1578593791,NL
-1578593792,1578593823,FR
-1578593824,1578593831,GB
-1578593832,1578593835,FR
-1578593836,1578593839,ES
-1578593840,1578593871,FR
-1578593872,1578593875,ES
-1578593876,1578593887,FR
-1578593888,1578593895,ES
-1578593896,1578593899,GB
-1578593900,1578593903,DE
-1578593904,1578593919,FR
-1578593920,1578593935,PL
-1578593936,1578593939,IT
-1578593940,1578593943,CH
-1578593944,1578593947,ES
-1578593948,1578593955,FR
-1578593956,1578593959,LT
-1578593960,1578593963,FR
-1578593964,1578593967,ES
-1578593968,1578594015,FR
-1578594016,1578594031,BE
-1578594032,1578594039,ES
-1578594040,1578594047,IT
-1578594048,1578594055,FR
-1578594056,1578594059,ES
-1578594060,1578594079,FR
-1578594080,1578594087,CH
-1578594088,1578594095,CZ
-1578594096,1578594147,FR
-1578594148,1578594151,ES
-1578594152,1578594159,IT
-1578594160,1578594163,FR
-1578594164,1578594167,ES
-1578594168,1578594171,DE
-1578594172,1578594175,ES
-1578594176,1578594183,DE
-1578594184,1578594211,FR
-1578594212,1578594215,DE
-1578594216,1578594239,PL
-1578594240,1578594255,PT
-1578594256,1578594271,ES
-1578594272,1578594303,PL
-1578594304,1578594307,GB
-1578594308,1578594311,FI
-1578594312,1578594319,FR
-1578594320,1578594335,PL
-1578594336,1578594351,DE
-1578594352,1578594355,GB
-1578594356,1578594359,FR
-1578594360,1578594363,PT
-1578594364,1578594367,ES
-1578594368,1578594371,GB
-1578594372,1578594375,FR
-1578594376,1578594383,PT
-1578594384,1578594399,FR
-1578594400,1578594431,PL
-1578594432,1578594447,FR
-1578594448,1578594463,PL
-1578594464,1578594479,FR
-1578594480,1578594495,ES
-1578594496,1578594511,FR
-1578594512,1578594515,PL
-1578594516,1578594519,FR
-1578594520,1578594523,PL
-1578594524,1578594527,FR
-1578594528,1578594531,PL
-1578594532,1578594535,NL
-1578594536,1578594539,DE
-1578594540,1578594543,FR
-1578594544,1578594551,ES
-1578594552,1578594555,PL
-1578594556,1578594559,LT
-1578594560,1578594575,PL
-1578594576,1578594607,ES
-1578594608,1578594623,FR
-1578594624,1578594687,DE
-1578594688,1578594703,GB
-1578594704,1578594707,BE
-1578594708,1578594711,FR
-1578594712,1578594715,IT
-1578594716,1578594751,FR
-1578594752,1578594767,ES
-1578594768,1578594775,GB
-1578594776,1578594779,ES
-1578594780,1578594783,IE
-1578594784,1578594799,FR
-1578594800,1578594815,DE
-1578594816,1578594847,FR
-1578594848,1578594863,IT
-1578594864,1578594871,PL
-1578594872,1578595039,FR
-1578595040,1578595055,GB
-1578595056,1578595103,FR
-1578595104,1578595119,GB
-1578595120,1578595151,FR
-1578595152,1578595167,ES
-1578595168,1578595199,FR
-1578595200,1578595203,DE
-1578595204,1578595207,FR
-1578595208,1578595215,PL
-1578595216,1578595231,DE
-1578595232,1578595263,BE
-1578595264,1578595267,ES
-1578595268,1578595271,FR
-1578595272,1578595275,DE
-1578595276,1578595279,ES
-1578595280,1578595327,FR
-1578595328,1578595343,IT
-1578595344,1578595363,FR
-1578595364,1578595367,DE
-1578595368,1578595379,FR
-1578595380,1578595383,CH
-1578595384,1578595387,ES
-1578595388,1578595407,PL
-1578595408,1578595411,IE
-1578595412,1578595415,IT
-1578595416,1578595419,FR
-1578595420,1578595423,IT
-1578595424,1578595439,PL
-1578595440,1578595447,FR
-1578595448,1578595455,ES
-1578595456,1578595459,DE
-1578595460,1578595467,PL
-1578595468,1578595471,FR
-1578595472,1578595479,ES
-1578595480,1578595487,GB
-1578595488,1578595503,DE
-1578595504,1578595519,PT
-1578595520,1578595523,PL
-1578595524,1578595527,FR
-1578595528,1578595531,IE
-1578595532,1578595535,GB
-1578595536,1578595543,LT
-1578595544,1578595547,GB
-1578595548,1578595607,FR
-1578595608,1578595611,GB
-1578595612,1578595615,CZ
-1578595616,1578595619,PL
-1578595620,1578595623,ES
-1578595624,1578595627,FR
-1578595628,1578595631,IT
-1578595632,1578595635,FR
-1578595636,1578595639,ES
-1578595640,1578595643,DE
-1578595644,1578595647,GB
-1578595648,1578595683,FR
-1578595684,1578595687,GB
-1578595688,1578595695,LT
-1578595696,1578595703,FR
-1578595704,1578595711,PL
-1578595712,1578595743,GB
-1578595744,1578595747,IT
-1578595748,1578595751,FR
-1578595752,1578595759,ES
-1578595760,1578595763,FR
-1578595764,1578595767,DE
-1578595768,1578595775,ES
-1578595776,1578595807,CH
-1578595808,1578595823,DE
-1578595824,1578595855,FR
-1578595856,1578595871,GB
-1578595872,1578595903,FR
-1578595904,1578595907,NL
-1578595908,1578595911,BE
-1578595912,1578595935,FR
-1578595936,1578595951,BE
-1578595952,1578595959,DE
-1578595960,1578595967,FR
-1578595968,1578595983,IE
-1578595984,1578595987,PL
-1578595988,1578595995,IT
-1578595996,1578596031,FR
-1578596032,1578596063,IT
-1578596064,1578596095,IE
-1578596096,1578596099,DE
-1578596100,1578596103,GB
-1578596104,1578596107,PL
-1578596108,1578596111,ES
-1578596112,1578596115,NL
-1578596116,1578596119,FR
-1578596120,1578596123,PT
-1578596124,1578596127,ES
-1578596128,1578596143,PL
-1578596144,1578596147,GB
-1578596148,1578596151,FR
-1578596152,1578596155,DE
-1578596156,1578596175,FR
-1578596176,1578596183,ES
-1578596184,1578596191,BE
-1578596192,1578596207,ES
-1578596208,1578596255,FR
-1578596256,1578596287,GB
-1578596288,1578596351,FR
-1578596352,1578596863,GB
-1578596864,1578598943,FR
-1578598944,1578598975,CH
-1578598976,1578599039,FR
-1578599040,1578599071,DE
-1578599072,1578599103,ES
-1578599104,1578599135,PT
-1578599136,1578599167,IE
-1578599168,1578600191,FR
-1578600192,1578600255,BE
-1578600256,1578600511,FR
-1578600512,1578600575,BE
-1578600576,1578602495,FR
+1578592208,1578593023,FR
+1578593024,1578593279,DE
+1578593280,1578593439,FR
+1578593440,1578593443,ES
+1578593444,1578593955,FR
+1578593956,1578593959,ES
+1578593960,1578595419,FR
+1578595420,1578595423,GB
+1578595424,1578595987,FR
+1578595988,1578595991,ES
+1578595992,1578602495,FR
1578602496,1578604543,NL
1578604544,1578606591,GB
1578606592,1578607725,DE
1578607726,1578607726,FR
1578607727,1578608639,DE
1578608640,1578610687,CZ
-1578610688,1578610767,FR
-1578610768,1578610771,CH
-1578610772,1578610775,GB
-1578610776,1578610779,DE
-1578610780,1578610783,FR
-1578610784,1578610799,DE
-1578610800,1578610803,FR
-1578610804,1578610807,GB
-1578610808,1578610819,FR
-1578610820,1578610823,IE
-1578610824,1578610827,FR
-1578610828,1578610831,IE
-1578610832,1578610847,CH
-1578610848,1578610851,PL
-1578610852,1578610855,IE
-1578610856,1578610859,PL
-1578610860,1578610863,FR
-1578610864,1578610867,BE
-1578610868,1578610871,FR
-1578610872,1578610879,PL
-1578610880,1578610943,FR
-1578610944,1578610975,ES
-1578610976,1578611007,PL
-1578611008,1578611023,IT
-1578611024,1578611039,NL
-1578611040,1578611043,ES
-1578611044,1578611047,FR
-1578611048,1578611051,ES
-1578611052,1578611055,NL
-1578611056,1578611071,FR
-1578611072,1578611075,DE
-1578611076,1578611087,FR
-1578611088,1578611103,DE
-1578611104,1578611107,PT
-1578611108,1578611119,DE
-1578611120,1578611123,PL
-1578611124,1578611127,FR
-1578611128,1578611135,PL
-1578611136,1578611151,CH
-1578611152,1578611167,DE
-1578611168,1578611175,PL
-1578611176,1578611183,IE
-1578611184,1578611191,ES
-1578611192,1578611195,FR
-1578611196,1578611199,ES
-1578611200,1578611215,NL
-1578611216,1578611219,GB
-1578611220,1578611223,DE
-1578611224,1578611227,ES
-1578611228,1578611231,PL
-1578611232,1578611235,IT
-1578611236,1578611239,FR
-1578611240,1578611243,IE
-1578611244,1578611251,GB
-1578611252,1578611255,IT
-1578611256,1578611259,FI
-1578611260,1578611263,PL
-1578611264,1578611279,IT
-1578611280,1578611287,FR
-1578611288,1578611291,PL
-1578611292,1578611295,DE
-1578611296,1578611303,GB
-1578611304,1578611327,PL
-1578611328,1578611343,BE
-1578611344,1578611359,FR
-1578611360,1578611375,CH
-1578611376,1578611391,FR
-1578611392,1578611399,GB
-1578611400,1578611407,ES
-1578611408,1578611423,IT
-1578611424,1578611431,GB
-1578611432,1578611435,PL
-1578611436,1578611443,FR
-1578611444,1578611447,NL
-1578611448,1578611455,PL
-1578611456,1578611711,FR
-1578611712,1578611775,CH
-1578611776,1578611783,DE
-1578611784,1578611807,FR
-1578611808,1578611839,CH
-1578611840,1578611855,BE
-1578611856,1578611903,FR
-1578611904,1578611907,PL
-1578611908,1578611911,GB
-1578611912,1578611919,PT
-1578611920,1578611935,BE
-1578611936,1578611943,PL
-1578611944,1578611947,FR
-1578611948,1578611951,GB
-1578611952,1578611967,PL
-1578611968,1578612031,GB
-1578612032,1578612039,DE
-1578612040,1578612047,CH
-1578612048,1578612051,NL
-1578612052,1578612059,DE
-1578612060,1578612063,ES
-1578612064,1578612095,FR
-1578612096,1578612111,PT
-1578612112,1578612115,FR
-1578612116,1578612119,PL
-1578612120,1578612123,IE
-1578612124,1578612127,DE
-1578612128,1578612135,ES
-1578612136,1578612139,FR
-1578612140,1578612143,ES
-1578612144,1578612223,PL
-1578612224,1578612239,IT
-1578612240,1578612255,FR
-1578612256,1578612263,IE
-1578612264,1578612303,FR
-1578612304,1578612319,NL
-1578612320,1578612383,FR
-1578612384,1578612415,PL
-1578612416,1578612487,FR
-1578612488,1578612495,ES
-1578612496,1578612499,DE
-1578612500,1578612503,CZ
-1578612504,1578612507,FR
-1578612508,1578612511,CZ
-1578612512,1578612519,FR
-1578612520,1578612527,PL
-1578612528,1578612539,FR
-1578612540,1578612543,BE
-1578612544,1578612575,FR
-1578612576,1578612579,PL
-1578612580,1578612583,FR
-1578612584,1578612587,IE
-1578612588,1578612607,IT
-1578612608,1578612623,PT
-1578612624,1578612671,FR
-1578612672,1578612687,ES
-1578612688,1578612863,FR
-1578612864,1578612895,NL
-1578612896,1578612903,PL
-1578612904,1578612907,DE
-1578612908,1578612911,PL
-1578612912,1578612927,FR
-1578612928,1578612943,ES
-1578612944,1578612959,GB
-1578612960,1578612975,DE
-1578612976,1578612983,IT
-1578612984,1578612991,FR
-1578612992,1578613247,DE
-1578613248,1578613391,FR
-1578613392,1578613399,GB
-1578613400,1578613407,PL
-1578613408,1578613423,FR
-1578613424,1578613427,DE
-1578613428,1578613435,GB
-1578613436,1578613439,PT
-1578613440,1578613447,GB
-1578613448,1578613451,NL
-1578613452,1578613455,FR
-1578613456,1578613459,IE
-1578613460,1578613467,FR
-1578613468,1578613471,PL
-1578613472,1578613475,ES
-1578613476,1578613479,PT
-1578613480,1578613487,PL
-1578613488,1578613491,FR
-1578613492,1578613495,IE
-1578613496,1578613499,FR
-1578613500,1578613503,PL
-1578613504,1578613567,DE
-1578613568,1578613631,PL
-1578613632,1578613647,DE
-1578613648,1578613663,FR
-1578613664,1578613679,PL
-1578613680,1578613695,ES
-1578613696,1578613711,FR
-1578613712,1578613719,IT
-1578613720,1578613727,IE
-1578613728,1578613735,FR
-1578613736,1578613739,PL
-1578613740,1578613743,FR
-1578613744,1578613751,ES
-1578613752,1578613759,NL
-1578613760,1578613775,DE
-1578613776,1578613779,FR
-1578613780,1578613783,DE
-1578613784,1578613787,BE
-1578613788,1578613791,CZ
-1578613792,1578613823,ES
-1578613824,1578613839,NL
-1578613840,1578613847,GB
-1578613848,1578613855,CZ
-1578613856,1578613871,NL
-1578613872,1578613887,IE
-1578613888,1578613891,IT
-1578613892,1578613895,BE
-1578613896,1578613919,FR
-1578613920,1578613923,GB
-1578613924,1578613927,FR
-1578613928,1578613935,PL
-1578613936,1578613983,FR
-1578613984,1578613999,PL
-1578614000,1578614003,FR
-1578614004,1578614007,PL
-1578614008,1578614015,DE
-1578614016,1578614047,FR
-1578614048,1578614055,FI
-1578614056,1578614071,FR
-1578614072,1578614079,ES
-1578614080,1578614175,FR
-1578614176,1578614191,ES
-1578614192,1578614195,FR
-1578614196,1578614207,GB
-1578614208,1578614271,PL
+1578610688,1578612907,FR
+1578612908,1578612911,ES
+1578612912,1578613735,FR
+1578613736,1578613739,ES
+1578613740,1578614271,FR
1578614272,1578614527,ES
-1578614528,1578614543,GB
-1578614544,1578614559,PL
-1578614560,1578614575,FR
-1578614576,1578614583,DE
-1578614584,1578614591,GB
-1578614592,1578614623,CZ
-1578614624,1578614655,BE
-1578614656,1578631167,FR
+1578614528,1578631167,FR
1578631168,1578663935,RO
1578663936,1578762239,RU
1578762240,1578795007,BG
@@ -72892,28 +28792,7 @@
1578991616,1579024383,KW
1579024384,1579057151,GB
1579057152,1579089919,LV
-1579089920,1579090431,GB
-1579090432,1579090463,NL
-1579090464,1579091759,GB
-1579091760,1579091775,IL
-1579091776,1579091839,GB
-1579091840,1579091855,US
-1579091856,1579093759,GB
-1579093760,1579094015,NL
-1579094016,1579094271,GB
-1579094272,1579094527,NL
-1579094528,1579094783,GB
-1579094784,1579095039,NL
-1579095040,1579096319,GB
-1579096320,1579096351,DK
-1579096352,1579104511,GB
-1579104512,1579104767,US
-1579104768,1579105023,GB
-1579105024,1579105087,NL
-1579105088,1579105119,DE
-1579105120,1579105535,GB
-1579105536,1579105599,NL
-1579105600,1579106303,GB
+1579089920,1579106303,GB
1579106304,1579122687,DE
1579122688,1579155455,RU
1579155456,1579679743,IT
@@ -72926,14 +28805,8 @@
1580015616,1580048383,UA
1580048384,1580064767,RU
1580064768,1580072959,DE
-1580072960,1580075071,PT
-1580075072,1580075199,GB
-1580075200,1580104959,PT
-1580104960,1580105215,CH
-1580105216,1580134399,PT
-1580134400,1580134575,ES
-1580134576,1580134583,GB
-1580134584,1580136447,ES
+1580072960,1580134399,PT
+1580134400,1580136447,ES
1580136448,1580138495,PT
1580138496,1580204031,IT
1580204032,1580335103,RO
@@ -72948,12 +28821,8 @@
1581809664,1581826047,BG
1581826048,1581842431,GB
1581842432,1581858815,BG
-1581858816,1581868287,IT
-1581868288,1581869055,US
-1581869056,1581875199,IT
-1581875200,1581890559,TR
-1581890560,1581891071,GB
-1581891072,1581891583,TR
+1581858816,1581875199,IT
+1581875200,1581891583,TR
1581891584,1581907967,RU
1581907968,1581924351,IT
1581924352,1581940735,UA
@@ -72980,158 +28849,119 @@
1582252032,1582268415,TR
1582268416,1582284799,DE
1582284800,1582301183,BH
-1582301184,1583176703,IT
-1583176704,1583177727,US
-1583177728,1583349759,IT
+1582301184,1582452223,IT
+1582452224,1582452231,SI
+1582452232,1582695151,IT
+1582695152,1582695159,SI
+1582695160,1582701383,IT
+1582701384,1582701391,SI
+1582701392,1582704639,IT
+1582704640,1582705663,SI
+1582705664,1582853903,IT
+1582853904,1582853919,SI
+1582853920,1583349759,IT
1583349760,1583611903,SA
1583611904,1583615999,LV
-1583616000,1583617791,NL
-1583617792,1583617844,US
-1583617845,1583617845,US
-1583617846,1583618047,US
-1583618048,1583619839,NL
-1583619840,1583620095,US
+1583616000,1583620095,NL
1583620096,1583624191,IT
-1583624192,1583628287,RS
+1583624192,1583624447,XK
+1583624448,1583628287,RS
1583628288,1583632383,DE
1583632384,1583636479,RU
1583636480,1583640575,MK
1583640576,1583644671,NL
-1583644672,1583646463,DE
-1583646464,1583646719,GB
-1583646720,1583648767,DE
+1583644672,1583648767,DE
1583648768,1583652863,CH
1583652864,1583656959,FR
1583656960,1583665151,RU
1583665152,1583669247,UA
1583669248,1583673343,GE
-1583673344,1583673991,DE
-1583673992,1583673999,GB
-1583674000,1583677439,DE
+1583673344,1583677439,DE
1583677440,1583681535,FI
1583681536,1583685631,PL
1583685632,1583689727,DE
1583689728,1583693823,IT
-1583693824,1583693871,RU
-1583693872,1583693879,A2
-1583693880,1583697919,RU
+1583693824,1583697919,RU
1583697920,1583702015,TR
1583702016,1583706111,RU
-1583706112,1583710207,GI
-1583710208,1583712255,IR
-1583712256,1583714303,AE
+1583710208,1583714303,IR
1583714304,1583722495,GB
1583722496,1583726591,IR
-1583726592,1583727359,BG
-1583727360,1583727871,MK
-1583727872,1583730687,BG
-1583730688,1583733247,DK
-1583733248,1583733311,DE
-1583733312,1583734783,DK
+1583726592,1583730687,BG
+1583730688,1583734783,DK
1583734784,1583738879,LV
1583738880,1583742975,IR
1583742976,1583747071,TR
1583747072,1583751167,RU
1583751168,1583755263,NO
-1583755264,1583755414,NL
-1583755415,1583755424,RU
-1583755425,1583759359,NL
+1583755264,1583759359,NL
1583759360,1583763455,TR
1583763456,1583767551,RU
1583767552,1583771647,AT
1583771648,1583775743,RU
1583775744,1583779839,IT
-1583779840,1583779855,GB
-1583779856,1583779863,BG
-1583779864,1583780135,GB
-1583780136,1583780143,IT
-1583780144,1583780255,GB
-1583780256,1583780263,IT
-1583780264,1583780335,GB
+1583779840,1583779847,GB
+1583779848,1583779855,IT
+1583779856,1583780263,GB
+1583780264,1583780271,IT
+1583780272,1583780335,GB
1583780336,1583780343,IT
1583780344,1583780423,GB
1583780424,1583780431,IT
-1583780432,1583780767,GB
+1583780432,1583780607,GB
+1583780608,1583780615,IT
+1583780616,1583780767,GB
1583780768,1583780775,IT
-1583780776,1583780943,GB
-1583780944,1583780951,IT
-1583780952,1583781127,GB
-1583781128,1583781135,IT
-1583781136,1583781279,GB
-1583781280,1583781295,IT
-1583781296,1583781359,GB
+1583780776,1583780791,GB
+1583780792,1583780799,IT
+1583780800,1583781031,GB
+1583781032,1583781039,IT
+1583781040,1583781359,GB
1583781360,1583781367,IT
-1583781368,1583781447,GB
-1583781448,1583781455,IT
-1583781456,1583781863,GB
+1583781368,1583781863,GB
1583781864,1583781871,IT
-1583781872,1583782279,GB
-1583782280,1583782287,IT
-1583782288,1583782431,GB
+1583781872,1583781911,GB
+1583781912,1583781919,IT
+1583781920,1583782415,GB
+1583782416,1583782423,IT
+1583782424,1583782431,GB
1583782432,1583782439,IT
-1583782440,1583782495,GB
-1583782496,1583782503,IT
-1583782504,1583782975,GB
+1583782440,1583782703,GB
+1583782704,1583782711,IT
+1583782712,1583782975,GB
1583782976,1583782983,IT
-1583782984,1583783479,GB
+1583782984,1583783119,GB
+1583783120,1583783127,IT
+1583783128,1583783479,GB
1583783480,1583783487,IT
-1583783488,1583783575,GB
-1583783576,1583783583,BG
-1583783584,1583783935,GB
-1583783936,1583788031,EU
+1583783488,1583783495,GB
+1583783496,1583783503,IT
+1583783504,1583783935,GB
1583788032,1583792127,TM
1583792128,1583796223,IE
-1583796224,1583800063,DE
-1583800064,1583800095,AT
-1583800096,1583800319,DE
+1583796224,1583800319,DE
1583800320,1583804415,ME
1583804416,1583808511,GB
1583808512,1583812607,MD
-1583812608,1583815167,NL
-1583815168,1583815215,US
-1583815216,1583815343,NL
-1583815344,1583815351,US
-1583815352,1583815679,NL
-1583815680,1583815711,DE
-1583815712,1583815727,US
-1583815728,1583815807,NL
-1583815808,1583815935,US
-1583815936,1583816191,GB
-1583816192,1583816255,DE
-1583816256,1583816351,NL
-1583816352,1583816431,GB
-1583816432,1583816703,NL
-1583816704,1583817616,TR
-1583817617,1583817624,CY
-1583817625,1583820799,TR
+1583812608,1583816703,NL
+1583816704,1583820799,TR
1583820800,1583824895,LV
1583824896,1583828991,SI
1583828992,1583833087,RU
1583833088,1583837183,CH
1583841280,1583845375,FR
-1583845376,1583845535,NL
-1583845536,1583845567,BE
-1583845568,1583845727,NL
-1583845728,1583845743,BE
-1583845744,1583848639,NL
-1583848640,1583848703,BE
-1583848704,1583848735,NL
-1583848736,1583848799,BE
-1583848800,1583849471,NL
-1583849472,1583850751,DE
-1583850752,1583850943,AT
-1583850944,1583850951,DE
-1583850952,1583850959,AT
-1583850960,1583850999,DE
-1583851000,1583851007,AT
-1583851008,1583853567,DE
+1583845376,1583849471,NL
+1583849472,1583853567,DE
1583853568,1583857663,RU
1583857664,1583861759,SE
1583861760,1583865855,LU
1583865856,1583869951,RU
1583869952,1583874047,KZ
-1583874048,1584398335,BE
-1584398336,1584660479,CZ
+1583874048,1584119935,BE
+1584119936,1584120063,FR
+1584120064,1584398335,BE
+1584398336,1584529407,CZ
+1584529408,1584660479,DE
1584660480,1584857087,GB
1584857088,1584859135,DE
1584859136,1584922623,GB
@@ -73144,51 +28974,38 @@
1585199104,1585201151,NL
1585201152,1585205247,IT
1585205248,1585207295,FR
-1585207296,1585209855,NL
-1585209856,1585210111,IQ
-1585210112,1585210367,IR
-1585210368,1585211391,NL
+1585207296,1585209343,NL
1585211392,1585213439,CZ
1585213440,1585214463,GB
1585214464,1585217535,NL
1585217536,1585219583,FR
1585219584,1585221631,NL
1585221632,1585223679,SK
-1585223680,1585224447,FR
-1585224448,1585224703,GP
-1585224704,1585224959,FR
+1585223680,1585224959,FR
1585224960,1585225215,RE
1585225216,1585225471,FR
1585225472,1585225727,YT
-1585225728,1585227775,UA
-1585227776,1585231359,RU
-1585231360,1585231615,NL
-1585231616,1585231871,RU
+1585225728,1585227007,UA
+1585227008,1585227263,RU
+1585227264,1585227775,UA
+1585227776,1585231871,RU
1585231872,1585233919,CZ
1585233920,1585238015,RU
1585238016,1585240063,DE
-1585240064,1585241087,MQ
-1585241088,1585242111,GP
+1585240064,1585240575,FR
+1585240576,1585241855,MQ
+1585241856,1585242111,GP
1585242112,1585244159,RU
1585244160,1585246207,FR
1585246208,1585248255,RU
1585248256,1585250303,CZ
1585250304,1585254399,RU
1585254400,1585256447,GB
-1585256448,1585256959,DE
-1585256960,1585257215,FR
-1585257216,1585258495,DE
+1585256448,1585258495,DE
1585258496,1585260543,GB
1585260544,1585264639,RU
-1585264640,1585265015,MT
-1585265016,1585265039,GG
-1585265040,1585265663,MT
-1585265664,1585265695,FR
-1585265696,1585265727,IM
-1585265728,1585266175,FR
-1585266176,1585266271,MT
-1585266272,1585266287,MA
-1585266288,1585266687,MT
+1585264640,1585265663,MT
+1585265664,1585266687,IM
1585266688,1585270783,DE
1585270784,1585272831,IT
1585272832,1585274879,RU
@@ -73224,9 +29041,7 @@
1585336320,1585338367,SE
1585338368,1585340415,RU
1585340416,1585342463,AT
-1585342464,1585343311,GB
-1585343312,1585343319,DE
-1585343320,1585344511,GB
+1585342464,1585344511,GB
1585344512,1585346559,FR
1585346560,1585348607,GB
1585348608,1585350655,CH
@@ -73257,10 +29072,8 @@
1585400064,1585400319,IL
1585400320,1585400575,GB
1585400576,1585400831,FR
-1585400832,1585401088,DE
-1585401089,1585401343,NL
-1585401344,1585401599,DE
-1585401600,1585401855,GB
+1585400832,1585401087,NL
+1585401344,1585401855,GB
1585401856,1585403903,IT
1585403904,1585405951,RU
1585405952,1585407999,GB
@@ -73279,44 +29092,13 @@
1585440768,1585442815,IT
1585442816,1585446911,RU
1585446912,1585577983,KW
-1585577984,1585709055,UA
+1585577984,1585643519,UA
+1585643520,1585709055,RU
1585709056,1585840127,PT
1585840128,1585971199,DE
1585971200,1585979391,AT
1585979392,1585987583,GB
-1585987584,1585988095,SE
-1585988096,1585988103,IT
-1585988104,1585988119,SE
-1585988120,1585988123,US
-1585988124,1585988351,SE
-1585988352,1585988359,DE
-1585988360,1585988479,SE
-1585988480,1585988483,US
-1585988484,1585989307,SE
-1585989308,1585989311,US
-1585989312,1585989671,SE
-1585989672,1585989679,NL
-1585989680,1585990655,SE
-1585990656,1585990659,US
-1585990660,1585990847,SE
-1585990848,1585990851,US
-1585990852,1585990911,SE
-1585990912,1585990915,US
-1585990916,1585991167,SE
-1585991168,1585991171,IT
-1585991172,1585991683,SE
-1585991684,1585991687,IT
-1585991688,1585991727,SE
-1585991728,1585991731,RU
-1585991732,1585991935,SE
-1585991936,1585991939,US
-1585991940,1585994511,SE
-1585994512,1585994519,NL
-1585994520,1585994543,SE
-1585994544,1585994547,MY
-1585994548,1585995647,SE
-1585995648,1585995651,US
-1585995652,1585995775,SE
+1585987584,1585995775,SE
1585995776,1586003967,AT
1586003968,1586012159,SK
1586012160,1586020351,DE
@@ -73324,14 +29106,13 @@
1586028544,1586036735,GB
1586036736,1586061311,RU
1586061312,1586069503,SE
-1586069504,1586077695,DE
+1586069504,1586073599,DK
+1586073600,1586077695,DE
1586077696,1586085887,GE
1586085888,1586110463,RU
1586110464,1586118655,IT
1586118656,1586126847,DK
-1586126848,1586128383,CZ
-1586128384,1586128639,SK
-1586128640,1586135039,CZ
+1586126848,1586135039,CZ
1586135040,1586143231,RU
1586143232,1586151423,IT
1586151424,1586159615,TR
@@ -73345,13 +29126,8 @@
1586216960,1586225151,BG
1586225152,1586233343,RU
1586233344,1586241535,FR
-1586241536,1586243779,SE
-1586243780,1586243787,NO
-1586243788,1586244559,SE
-1586244560,1586244575,FI
-1586244576,1586249727,SE
+1586241536,1586249727,SE
1586249728,1586257919,SI
-1586257920,1586266111,EU
1586266112,1586274303,RU
1586274304,1586282495,BE
1586282496,1586298879,RU
@@ -73365,37 +29141,28 @@
1586356224,1586372607,RU
1586372608,1586380799,JO
1586380800,1586388991,GB
-1586388992,1586389518,ES
-1586389519,1586389774,US
-1586389775,1586397183,ES
-1586397184,1586399231,LV
+1586388992,1586389503,ES
+1586389504,1586389759,US
+1586389760,1586397183,ES
1586399232,1586401279,RU
1586401280,1586403327,IT
1586403328,1586405375,IS
1586405376,1586407423,AT
1586407424,1586409471,GB
-1586409472,1586411519,IT
-1586411520,1586411775,GB
-1586411776,1586412287,US
-1586412288,1586412543,HK
-1586412544,1586412799,GB
-1586412800,1586413055,US
-1586413056,1586413567,GB
+1586411520,1586412031,GB
+1586412032,1586412287,US
+1586412288,1586413567,GB
1586413568,1586415615,IT
-1586415616,1586416383,ES
-1586416384,1586417663,AD
+1586415616,1586416255,ES
+1586416256,1586417663,AD
1586417664,1586419711,NL
1586419712,1586421759,DE
1586421760,1586423807,SE
1586423808,1586425855,CZ
1586425856,1586427903,NL
-1586427904,1586428159,CH
-1586428160,1586429407,FR
-1586429408,1586429423,US
-1586429424,1586429951,FR
-1586429952,1586431999,CH
+1586427904,1586431999,CH
1586432000,1586434047,DK
-1586434048,1586436095,BE
+1586434048,1586436095,FR
1586436096,1586438143,ES
1586438144,1586446335,RU
1586446336,1586448383,NO
@@ -73404,23 +29171,12 @@
1586452480,1586454527,CH
1586454528,1586456575,IT
1586456576,1586458623,GB
-1586458624,1586458911,FR
-1586458912,1586458943,BE
-1586458944,1586458975,CH
-1586458976,1586459007,DE
-1586459008,1586459039,ES
-1586459040,1586459071,GB
-1586459072,1586459103,IT
-1586459104,1586459135,NL
-1586459136,1586460527,FR
-1586460528,1586460543,ES
-1586460544,1586460671,FR
+1586458624,1586460671,FR
1586460672,1586462719,GB
1586462720,1586464767,RU
1586464768,1586466815,ES
1586466816,1586468863,RU
1586468864,1586470911,IT
-1586470912,1586472959,GB
1586472960,1586475007,CZ
1586475008,1586477055,GR
1586477056,1586479103,BE
@@ -73446,12 +29202,12 @@
1587179520,1587183615,UA
1587183616,1587199999,RU
1587200000,1587216383,UA
-1587216384,1587319295,BG
-1587319296,1587319551,DE
-1587319552,1587347455,BG
+1587216384,1587325951,BG
+1587325952,1587326975,GR
+1587326976,1587347455,BG
1587347456,1587412991,NL
1587412992,1587417087,RU
-1587417088,1587425279,UA
+1587421184,1587425279,UA
1587425280,1587429375,UZ
1587429376,1587437567,UA
1587437568,1587445759,RU
@@ -73464,27 +29220,33 @@
1587511296,1587544063,IL
1587544064,1588068351,IT
1588068352,1588592639,GB
-1588592640,1588621311,RO
+1588592640,1588593663,RO
+1588593664,1588593919,MD
+1588593920,1588609023,RO
+1588609024,1588613119,MD
+1588613120,1588621311,RO
1588621312,1588625407,MD
-1588625408,1588689407,RO
-1588689408,1588689919,DE
-1588689920,1588723711,RO
+1588625408,1588641791,RO
+1588641792,1588643839,ES
+1588643840,1588653055,RO
+1588653056,1588654079,MD
+1588654080,1588673535,RO
+1588673536,1588674559,MD
+1588674560,1588723711,RO
1588723712,1588854783,UA
1588854784,1588985855,RU
1588985856,1589182463,IR
1589182464,1589198847,OM
1589198848,1589200895,FR
1589200896,1589202943,IT
-1589202944,1589203711,SE
-1589203712,1589203775,NL
-1589203776,1589203839,SE
-1589203840,1589203967,NL
-1589203968,1589204479,SE
-1589204480,1589204991,NL
+1589202944,1589204991,SE
1589204992,1589207039,DE
1589207040,1589215231,IT
1589215232,1589247999,GB
-1589248000,1589280767,NO
+1589248000,1589256191,NO
+1589256192,1589258239,SE
+1589258240,1589264383,LV
+1589264384,1589280767,NL
1589280768,1589313535,DE
1589313536,1589346303,LB
1589346304,1589379071,KW
@@ -73495,8 +29257,13 @@
1589510144,1589542911,RU
1589542912,1589575679,BG
1589575680,1589608447,RU
-1589608448,1589612543,DK
-1589612544,1589620735,SE
+1589608448,1589608703,SE
+1589608704,1589608959,DK
+1589608960,1589609215,SE
+1589609216,1589611519,DK
+1589611520,1589611775,SE
+1589611776,1589612287,DK
+1589612288,1589620735,SE
1589620736,1589641215,DK
1589641216,1590034431,GB
1590034432,1590036479,RU
@@ -73517,9 +29284,7 @@
1590069248,1590071295,AT
1590071296,1590073343,FR
1590073344,1590075391,NL
-1590075392,1590077247,BE
-1590077248,1590077279,NL
-1590077280,1590077439,BE
+1590075392,1590077439,BE
1590077440,1590079487,GB
1590079488,1590079743,GP
1590079744,1590081535,FR
@@ -73543,19 +29308,10 @@
1590116352,1590120447,RU
1590120448,1590122495,IT
1590122496,1590124543,DE
-1590124544,1590126591,CH
1590126592,1590128639,RU
1590128640,1590130687,FI
1590130688,1590132735,FR
-1590132736,1590132991,DE
-1590132992,1590133567,GB
-1590133568,1590133599,DE
-1590133600,1590133657,GB
-1590133658,1590133659,FR
-1590133660,1590133663,GB
-1590133664,1590133667,FR
-1590133668,1590134783,GB
-1590134784,1590136831,ES
+1590132736,1590134783,GB
1590136832,1590138879,GB
1590138880,1590140927,FR
1590140928,1590142975,UA
@@ -73565,15 +29321,10 @@
1590149120,1590151167,CZ
1590151168,1590153215,TR
1590153216,1590157311,RU
-1590157312,1590158335,IE
-1590158336,1590161407,GB
+1590157312,1590161407,GB
1590161408,1590163455,DE
1590163456,1590165503,NL
-1590165504,1590176643,AE
-1590176644,1590176644,US
-1590176645,1590176831,AE
-1590176832,1590176863,A2
-1590176864,1590689791,AE
+1590165504,1590689791,AE
1590689792,1591214079,NL
1591214080,1591738367,DE
1591738368,1592000511,BE
@@ -73583,9 +29334,7 @@
1592012800,1592016895,CH
1592016896,1592020991,GB
1592020992,1592025087,SK
-1592025088,1592027903,DE
-1592027904,1592027935,GB
-1592027936,1592029183,DE
+1592025088,1592029183,DE
1592029184,1592033279,RU
1592033280,1592037375,NL
1592037376,1592041471,CH
@@ -73596,47 +29345,17 @@
1592046108,1592046111,GB
1592046112,1592049663,FR
1592049664,1592053759,RU
-1592053760,1592054271,NL
-1592054272,1592054527,US
-1592054528,1592054655,NL
-1592054656,1592054783,US
-1592054784,1592055295,AE
-1592055296,1592057727,NL
-1592057728,1592057735,IN
-1592057736,1592057855,NL
+1592053760,1592057855,NL
1592057856,1592061951,RS
1592061952,1592066047,RU
-1592066048,1592067583,US
-1592067584,1592067711,NO
-1592067712,1592068095,NL
-1592068096,1592068607,US
-1592068608,1592068863,CY
-1592068864,1592068895,US
-1592068896,1592068927,NL
-1592068928,1592068959,US
-1592068960,1592068991,CY
-1592068992,1592069087,US
-1592069088,1592069247,CY
-1592069248,1592069375,RU
-1592069376,1592069407,US
-1592069408,1592069631,CY
-1592069632,1592069711,NL
-1592069712,1592069727,CY
-1592069728,1592069759,NL
-1592069760,1592069839,CY
-1592069840,1592069887,NL
-1592069888,1592070143,CY
+1592066048,1592066559,CY
+1592066560,1592067583,US
+1592067584,1592070143,CY
1592070144,1592074239,RU
1592074240,1592078335,SK
1592078336,1592082431,NL
1592082432,1592086527,GB
-1592086528,1592087079,CZ
-1592087080,1592087087,PL
-1592087088,1592087167,CZ
-1592087168,1592087175,PL
-1592087176,1592087295,CZ
-1592087296,1592088191,PL
-1592088192,1592090623,CZ
+1592086528,1592090623,CZ
1592090624,1592094719,RU
1592094720,1592098815,RS
1592098816,1592102911,GB
@@ -73694,7 +29413,6 @@
1592317952,1592319999,PL
1592320000,1592322047,LT
1592322048,1592324095,RU
-1592326144,1592328191,UA
1592328192,1592393727,RU
1592393728,1592459263,SE
1592459264,1592524799,TR
@@ -73723,35 +29441,17 @@
1593098240,1593114623,CH
1593114624,1593122815,DK
1593122816,1593131007,SE
-1593131008,1593147135,GB
-1593147136,1593147391,EU
+1593131008,1593147391,GB
1593147392,1593163775,RU
1593163776,1593180159,AT
1593180160,1593196543,NO
-1593196544,1593202687,SE
-1593202688,1593202815,NO
-1593202816,1593203455,SE
-1593203456,1593203487,NO
-1593203488,1593204087,SE
-1593204088,1593204095,FI
-1593204096,1593205567,SE
-1593205568,1593205631,DK
-1593205632,1593209151,SE
-1593209152,1593209155,GR
-1593209156,1593209159,HU
-1593209160,1593209163,FI
-1593209164,1593209167,CH
-1593209168,1593210879,SE
-1593210880,1593211391,NO
-1593211392,1593212927,SE
+1593196544,1593212927,SE
1593212928,1593229311,PL
1593229312,1593245695,EE
1593245696,1593247743,NL
1593247744,1593249791,IT
1593249792,1593251839,RU
-1593251840,1593252159,FR
-1593252160,1593252192,GB
-1593252193,1593253631,FR
+1593251840,1593253631,FR
1593253632,1593253887,ES
1593253888,1593255935,CZ
1593255936,1593257983,DE
@@ -73782,7 +29482,13 @@
1593311232,1593343999,UA
1593344000,1593376767,HU
1593376768,1593409535,JO
-1593409536,1593442303,DE
+1593409536,1593421055,DE
+1593421056,1593421311,GB
+1593421312,1593421567,FR
+1593421568,1593421823,GB
+1593421824,1593422591,DE
+1593422592,1593422847,GB
+1593422848,1593442303,DE
1593442304,1593475071,BA
1593475072,1593491455,HR
1593491456,1593499647,DE
@@ -73812,11 +29518,71 @@
1596588032,1596719103,BG
1596719104,1596850175,IE
1596850176,1596866559,CZ
-1596866560,1596882943,RU
-1596882944,1596901375,CZ
-1596901376,1596907519,BY
+1596866560,1596887039,RU
+1596887040,1596889087,UA
+1596889088,1596889599,KZ
+1596889600,1596889855,CZ
+1596889856,1596890111,UA
+1596890112,1596890623,RU
+1596890624,1596891135,CZ
+1596891136,1596900351,RU
+1596900352,1596907519,BY
1596907520,1596915711,RU
-1596915712,1596981247,CZ
+1596915712,1596925951,CZ
+1596925952,1596932095,RU
+1596932096,1596940543,CZ
+1596940544,1596940799,RU
+1596940800,1596941055,UA
+1596941056,1596941311,CZ
+1596941312,1596942335,RU
+1596942336,1596945407,UA
+1596945408,1596945919,CZ
+1596945920,1596946175,RU
+1596946176,1596946431,NL
+1596946432,1596947455,RU
+1596947456,1596948479,UA
+1596948480,1596950527,BY
+1596950528,1596950783,UA
+1596950784,1596951551,CZ
+1596951552,1596952063,NL
+1596952064,1596952575,UA
+1596952576,1596952831,RU
+1596952832,1596953599,CZ
+1596953600,1596954623,UA
+1596954624,1596954879,RU
+1596954880,1596955391,CZ
+1596955392,1596955647,RU
+1596955648,1596956415,CZ
+1596956416,1596956671,RU
+1596956672,1596956927,CZ
+1596956928,1596956963,DE
+1596956964,1596956964,RU
+1596956965,1596957183,DE
+1596957184,1596957695,UA
+1596957696,1596958207,CZ
+1596958208,1596958463,RU
+1596958464,1596958719,UA
+1596958720,1596961023,RU
+1596961024,1596961279,CZ
+1596961280,1596961791,SK
+1596961792,1596962815,RU
+1596962816,1596963327,AM
+1596963328,1596963839,CZ
+1596963840,1596964095,KZ
+1596964096,1596964607,CZ
+1596964608,1596965887,RU
+1596965888,1596966911,KG
+1596966912,1596967167,RU
+1596967168,1596967423,CZ
+1596967424,1596967935,RU
+1596967936,1596968959,UA
+1596968960,1596973055,BA
+1596973056,1596975103,BY
+1596975104,1596975615,CZ
+1596975616,1596978431,RU
+1596978432,1596978944,CZ
+1596978945,1596978945,RU
+1596978946,1596981247,CZ
1596981248,1597243391,PL
1597243392,1597505535,RU
1597505536,1597767679,KZ
@@ -73842,19 +29608,10 @@
1599078400,1599094783,SE
1599094784,1599111167,RU
1599111168,1599127551,IR
-1599127552,1599133695,CZ
-1599133696,1599133823,SK
-1599133824,1599143935,CZ
+1599127552,1599143935,CZ
1599143936,1599160319,UA
1599160320,1599176703,IR
-1599176704,1599187967,FR
-1599187968,1599188223,DE
-1599188224,1599188991,FR
-1599188992,1599189503,DE
-1599189504,1599189759,FR
-1599189760,1599190015,DE
-1599190016,1599190271,EU
-1599190272,1599193087,FR
+1599176704,1599193087,FR
1599193088,1599209471,RU
1599209472,1599242239,IR
1599242240,1599258623,CZ
@@ -73862,14 +29619,18 @@
1599324160,1599340543,IE
1599340544,1599356927,RU
1599356928,1599373311,BH
-1599373312,1599438847,RU
+1599373312,1599406079,RU
+1599406080,1599422463,NL
+1599422464,1599438847,RU
1599438848,1599455231,RS
1599455232,1599471615,CZ
1599471616,1599487999,MK
1599488000,1599504383,IL
1599504384,1599520767,AZ
1599520768,1599537151,RU
-1599537152,1599553535,BG
+1599537152,1599550719,BG
+1599550720,1599550975,RS
+1599550976,1599553535,BG
1599553536,1599561727,KG
1599561728,1599565823,GB
1599565824,1599567871,SY
@@ -73879,15 +29640,10 @@
1599602688,1599864831,DE
1599864832,1600126975,PT
1600126976,1600389119,NL
-1600389120,1600397311,EU
1600397312,1600401407,DE
-1600401408,1600442367,EU
1600442368,1600446463,DE
-1600446464,1600453119,EU
1600453120,1600453631,IT
-1600453632,1600456703,EU
1600456704,1600457727,DE
-1600457728,1600520191,EU
1600520192,1600651263,SK
1600651264,1600684031,GE
1600684032,1600749567,RU
@@ -73895,12 +29651,7 @@
1600782336,1600880639,RU
1600880640,1600913407,AL
1600913408,1600946175,PL
-1600946176,1600963167,RU
-1600963168,1600963175,UA
-1600963176,1600963183,RU
-1600963184,1600963191,BY
-1600963192,1600963199,KZ
-1600963200,1600978943,RU
+1600946176,1600978943,RU
1600978944,1601011711,SE
1601011712,1601044479,UA
1601044480,1601077247,RU
@@ -73909,58 +29660,33 @@
1601142784,1601175551,UA
1601175552,1601699839,DE
1601699840,1602224127,ES
-1602224128,1602224515,NL
-1602224516,1602224523,DE
-1602224524,1602226175,NL
+1602224128,1602226175,NL
1602226176,1602228223,GB
1602228224,1602230270,FR
1602230271,1602230271,DE
1602230272,1602232319,DK
1602232320,1602234367,CH
-1602234368,1602235903,FR
-1602235904,1602235967,ES
-1602235968,1602236159,FR
-1602236160,1602236223,GB
-1602236224,1602236287,FR
-1602236288,1602236335,GB
-1602236336,1602236383,FR
-1602236384,1602238463,GB
+1602234368,1602236415,FR
+1602236416,1602238463,GB
1602238464,1602240511,TR
1602240512,1602242559,BY
-1602242560,1602244031,FR
-1602244032,1602244035,GB
-1602244036,1602244039,ES
-1602244040,1602244607,FR
+1602242560,1602244607,FR
1602244608,1602246655,CH
1602246656,1602248703,NL
1602248704,1602250751,BE
1602250752,1602252799,NO
1602252800,1602254847,SE
-1602254848,1602255103,PT
-1602255104,1602255359,HU
-1602255360,1602255615,US
-1602255616,1602255871,PT
-1602255872,1602256895,HU
+1602254848,1602256895,LU
1602256896,1602258943,GB
1602258944,1602260991,RU
1602260992,1602263039,FR
1602263040,1602265087,ES
1602265088,1602267135,RU
-1602267136,1602267199,DE
-1602267200,1602267263,FR
-1602267264,1602267327,GB
-1602267328,1602267391,ES
-1602267392,1602269183,RO
+1602267136,1602269183,RO
1602269184,1602271231,RU
1602271232,1602273279,MK
-1602273280,1602273535,FR
-1602273536,1602273791,GB
-1602273792,1602274559,IN
-1602274560,1602274815,IE
-1602274816,1602275071,GB
-1602275072,1602275679,DE
-1602275680,1602275695,CA
-1602275696,1602279423,DE
+1602273280,1602275327,CA
+1602275328,1602279423,DE
1602279424,1602281471,GB
1602281472,1602283519,RU
1602283520,1602285567,HR
@@ -73970,15 +29696,9 @@
1602291712,1602293759,SA
1602293760,1602295807,GB
1602295808,1602297855,NL
-1602297856,1602298367,IL
-1602298368,1602298431,MT
-1602298432,1602298879,IL
-1602298880,1602299391,MT
-1602299392,1602299903,GB
+1602297856,1602299903,IL
1602299904,1602301951,GR
-1602301952,1602303311,DE
-1602303312,1602303319,US
-1602303320,1602303999,DE
+1602301952,1602303999,DE
1602304000,1602306047,RU
1602306048,1602308095,GB
1602308096,1602310143,RU
@@ -73987,9 +29707,7 @@
1602314240,1602316287,CZ
1602316288,1602318335,GB
1602318336,1602320383,ES
-1602320384,1602322687,NL
-1602322688,1602322703,IE
-1602322704,1602324479,NL
+1602320384,1602324479,NL
1602324480,1602328575,RU
1602328576,1602330623,ES
1602330624,1602336767,RU
@@ -74015,10 +29733,7 @@
1602375680,1602377727,BY
1602377728,1602379775,PS
1602379776,1602383871,GB
-1602383872,1602383873,DE
-1602383874,1602384895,EU
-1602384896,1602385151,DE
-1602385152,1602385919,EU
+1602383872,1602385919,DE
1602385920,1602387967,AT
1602387968,1602390015,RU
1602390016,1602392063,IT
@@ -74030,9 +29745,7 @@
1602402304,1602404351,LU
1602404352,1602405631,GB
1602405632,1602405759,CN
-1602405760,1602405887,GB
-1602405888,1602406015,CN
-1602406016,1602406399,GB
+1602405760,1602406399,GB
1602406400,1602408447,DE
1602408448,1602410495,DK
1602410496,1602412543,NO
@@ -74044,37 +29757,18 @@
1602426880,1602428927,RU
1602428928,1602430975,PL
1602430976,1602433023,IT
-1602433024,1602433471,HU
-1602433472,1602433479,CY
-1602433480,1602435071,HU
+1602433024,1602435071,HU
1602435072,1602437119,IT
1602437120,1602439167,GB
1602439168,1602441215,RU
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
-1602455552,1602455690,FR
-1602455691,1602455691,BE
-1602455692,1602456015,FR
-1602456016,1602456025,ES
-1602456026,1602456026,DE
-1602456027,1602456027,NL
-1602456028,1602456028,IT
-1602456029,1602456029,ES
-1602456030,1602456030,PT
-1602456031,1602456031,ES
-1602456032,1602456175,FR
-1602456176,1602456183,ES
-1602456184,1602457471,FR
-1602457472,1602457487,BE
-1602457488,1602457599,FR
+1602455552,1602457599,FR
1602457600,1602459647,RU
1602459648,1602461695,GB
1602461696,1602465791,ES
@@ -74094,43 +29788,23 @@
1602813952,1602846719,RU
1602846720,1602879487,GE
1602879488,1602879743,RE
-1602879744,1602880255,FR
-1602880256,1602881535,RE
-1602881536,1602882559,FR
-1602882560,1602882815,RE
-1602882816,1602883327,FR
-1602883328,1602884607,RE
-1602884608,1602889215,FR
-1602889216,1602889727,RE
-1602889728,1602890239,FR
-1602890240,1602891775,RE
-1602891776,1602892287,FR
-1602892288,1602892799,RE
-1602892800,1602893823,FR
-1602893824,1602894335,RE
-1602894336,1602894847,FR
+1602879744,1602882303,MQ
+1602882304,1602882559,RE
+1602882560,1602885631,MQ
+1602885632,1602885887,RE
+1602885888,1602891775,MQ
+1602891776,1602892031,RE
+1602892032,1602894847,MQ
1602894848,1602895103,RE
-1602895104,1602896924,FR
+1602895104,1602896383,MQ
+1602896384,1602896639,RE
+1602896640,1602896924,MQ
1602896925,1602896925,RE
-1602896926,1602898431,FR
-1602898432,1602898943,MQ
-1602898944,1602900223,FR
-1602900224,1602900991,MQ
-1602900992,1602901503,FR
-1602901504,1602902783,MQ
-1602902784,1602903807,FR
-1602903808,1602904063,MQ
-1602904064,1602904319,RE
-1602904320,1602906111,FR
-1602906112,1602908415,RE
-1602908416,1602909183,FR
-1602909184,1602910207,RE
-1602910208,1602910719,FR
-1602910720,1602910975,RE
-1602910976,1602911231,FR
-1602911232,1602911487,RE
-1602911488,1602911743,FR
-1602911744,1602912255,RE
+1602896926,1602897407,MQ
+1602897408,1602897663,RE
+1602897664,1602907135,MQ
+1602907136,1602907391,RE
+1602907392,1602912255,MQ
1602912256,1602928639,GB
1602928640,1602930687,HU
1602930688,1602932735,GB
@@ -74143,9 +29817,7 @@
1603026944,1603031039,SE
1603031040,1603035135,RU
1603035136,1603039231,SY
-1603039232,1603042559,RS
-1603042560,1603042687,RS
-1603042688,1603043327,RS
+1603039232,1603043327,RS
1603043328,1603047423,IT
1603047424,1603051519,RU
1603051520,1603055615,JO
@@ -74156,29 +29828,31 @@
1603067928,1603071999,GB
1603072000,1603076095,CZ
1603076096,1603080191,RU
-1603080192,1603080447,GB
-1603080448,1603080703,FR
+1603080192,1603080703,GB
1603080704,1603080831,US
1603080832,1603080959,SE
1603080960,1603081087,DE
1603081088,1603081247,GB
1603081248,1603081255,NO
1603081256,1603081263,FI
-1603081264,1603081279,DE
+1603081264,1603081279,GB
1603081280,1603081295,US
-1603081296,1603082239,GB
+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
+1603083536,1603083551,LU
1603083552,1603083567,NL
-1603083568,1603083823,LU
-1603083824,1603084031,GB
-1603084032,1603086847,IT
-1603086848,1603087103,DE
-1603087104,1603088383,IT
+1603083568,1603083583,LU
+1603083584,1603083615,DE
+1603083616,1603083647,LU
+1603083648,1603083775,DE
+1603083776,1603084031,GB
+1603084032,1603088383,IT
1603088384,1603092479,LB
1603092480,1603100671,NO
1603100672,1603108863,FR
@@ -74188,87 +29862,17 @@
1603129344,1603133439,JO
1603133440,1603137535,RU
1603137536,1603141631,KW
-1603141632,1603144199,ES
-1603144200,1603144207,PT
-1603144208,1603144215,ES
-1603144216,1603144247,PT
-1603144248,1603145727,ES
-1603145728,1603145983,NL
-1603145984,1603145991,ES
-1603145992,1603146031,NL
-1603146032,1603146063,CY
-1603146064,1603146239,NL
-1603146240,1603146751,US
-1603146752,1603146759,DK
-1603146760,1603147007,NL
-1603147008,1603147263,US
-1603147264,1603147519,NL
-1603147520,1603147775,IL
-1603147776,1603148031,US
-1603148032,1603148287,IL
-1603148288,1603148799,NL
-1603148800,1603149311,IL
+1603141632,1603145727,ES
+1603145728,1603149311,IL
1603149312,1603149567,NL
-1603149568,1603149823,US
+1603149568,1603149823,IL
1603149824,1603153919,RU
1603153920,1603158015,NL
-1603158016,1603159167,DE
-1603159168,1603159183,NL
-1603159184,1603159199,FR
-1603159200,1603159215,AT
-1603159216,1603159487,DE
-1603159488,1603159519,AT
-1603159520,1603159535,NL
-1603159536,1603159551,GB
-1603159552,1603159823,DE
-1603159824,1603159871,CH
-1603159872,1603159903,DE
-1603159904,1603159919,GB
-1603159920,1603160079,DE
-1603160080,1603160095,NL
-1603160096,1603160111,GB
-1603160112,1603160335,DE
-1603160336,1603160351,GB
-1603160352,1603160383,DE
-1603160384,1603160399,NL
-1603160400,1603160415,CH
-1603160416,1603161007,DE
-1603161008,1603161023,GB
-1603161024,1603161103,DE
-1603161104,1603161119,GB
-1603161120,1603161135,AT
-1603161136,1603161151,GB
-1603161152,1603161167,CH
-1603161168,1603161567,DE
-1603161568,1603161599,FR
-1603161600,1603162111,DE
+1603158016,1603162111,DE
1603162112,1603166207,TJ
-1603166208,1603166751,NL
-1603166752,1603166767,MT
-1603166768,1603166815,US
-1603166816,1603166847,VE
-1603166848,1603166911,NL
-1603166912,1603166943,VE
-1603166944,1603166959,NL
-1603166960,1603166975,US
-1603166976,1603167135,NL
-1603167136,1603167167,JP
-1603167168,1603167231,NL
-1603167232,1603167743,BE
-1603167744,1603167871,NO
-1603167872,1603167999,NL
-1603168000,1603168063,CY
-1603168064,1603168127,NL
-1603168128,1603168143,SA
-1603168144,1603168191,NL
-1603168192,1603168207,US
-1603168208,1603168575,NL
-1603168576,1603168591,GB
-1603168592,1603168615,NL
+1603166208,1603168615,NL
1603168616,1603168623,US
-1603168624,1603169919,NL
-1603169920,1603169983,US
-1603169984,1603170303,NL
+1603168624,1603170303,NL
1603170304,1603174399,IE
1603174400,1603178495,TR
1603178496,1603182591,GB
@@ -74279,67 +29883,12 @@
1603198976,1603203071,IR
1603203072,1603207167,PL
1603207168,1603215359,RU
-1603215360,1603217167,DE
-1603217168,1603217183,US
-1603217184,1603219455,DE
-1603219456,1603220495,CH
-1603220496,1603220503,LI
-1603220504,1603223551,CH
-1603223552,1603223615,FR
-1603223616,1603223631,GB
-1603223632,1603223704,FR
-1603223705,1603223711,GB
-1603223712,1603223827,FR
-1603223828,1603223828,RU
-1603223829,1603223936,FR
-1603223937,1603223951,GB
-1603223952,1603224319,FR
-1603224320,1603224335,GB
-1603224336,1603224351,BE
-1603224352,1603224367,NL
-1603224368,1603224383,DE
-1603224384,1603224399,CH
-1603224400,1603224415,IT
-1603224416,1603224431,ES
-1603224432,1603224447,US
-1603224448,1603224463,MX
-1603224464,1603224575,GB
-1603224576,1603224895,FR
-1603224896,1603224911,GB
-1603224912,1603225447,FR
-1603225448,1603225455,GB
-1603225456,1603225511,FR
-1603225512,1603225583,GB
-1603225584,1603225599,FR
-1603225600,1603225607,ES
-1603225608,1603225615,GB
-1603225616,1603225623,DE
-1603225624,1603225631,IT
-1603225632,1603225639,US
-1603225640,1603225647,CN
-1603225648,1603226111,FR
-1603226112,1603226623,GB
-1603226624,1603227647,FR
-1603227648,1603227787,AT
-1603227788,1603227799,DE
-1603227800,1603227843,AT
-1603227844,1603227847,DE
-1603227848,1603227931,AT
-1603227932,1603227935,IT
-1603227936,1603227939,CZ
-1603227940,1603227947,CH
-1603227948,1603227971,IT
-1603227972,1603227983,AT
-1603227984,1603227991,DE
-1603227992,1603228415,AT
-1603228416,1603228799,DE
-1603228800,1603228883,AT
-1603228884,1603228887,DE
-1603228888,1603228927,AT
-1603228928,1603228991,DE
-1603228992,1603229047,AT
-1603229048,1603229055,SI
-1603229056,1603231743,AT
+1603215360,1603219455,DE
+1603219456,1603223551,CH
+1603223552,1603225087,GB
+1603225088,1603225343,FR
+1603225344,1603227647,GB
+1603227648,1603231743,AT
1603231744,1603235839,IT
1603235840,1603239935,RU
1603239936,1603244031,CZ
@@ -74360,25 +29909,7 @@
1603895296,1603928063,RU
1603928064,1603944447,DK
1603944448,1603977215,RU
-1603977216,1603979519,GB
-1603979520,1603979775,US
-1603979776,1603980463,GB
-1603980464,1603980479,CH
-1603980480,1603980863,GB
-1603980864,1603980927,ID
-1603980928,1603982655,GB
-1603982656,1603982687,DK
-1603982688,1603982719,CW
-1603982720,1603982783,GB
-1603982784,1603982847,CW
-1603982848,1603984895,GB
-1603984896,1603985151,PT
-1603985152,1603985279,GB
-1603985280,1603985407,BR
-1603985408,1603990015,GB
-1603990016,1603990271,GR
-1603990272,1603990527,SA
-1603990528,1603993599,GB
+1603977216,1603993599,GB
1603993600,1604009983,ME
1604009984,1604026367,PL
1604026368,1604042751,NL
@@ -74386,15 +29917,8 @@
1604059136,1604075519,MK
1604075520,1604091903,RU
1604091904,1604108287,BA
-1604108288,1604117199,DE
-1604117200,1604117215,GR
-1604117216,1604117219,JP
-1604117220,1604117223,US
-1604117224,1604117227,GB
-1604117228,1604117231,ES
-1604117232,1604117235,FR
-1604117236,1604141055,DE
-1604141056,1604157439,RO
+1604108288,1604141055,DE
+1604141056,1604157439,IT
1604157440,1604190207,FR
1604190208,1604206591,UA
1604206592,1604222975,PL
@@ -74416,49 +29940,16 @@
1604853760,1604861951,HU
1604861952,1604870143,RS
1604870144,1604878335,HR
-1604878336,1604886655,DE
-1604886656,1604886783,RU
-1604886784,1604887039,DE
-1604887040,1604887295,GB
-1604887296,1604888063,DE
-1604888064,1604889599,TR
-1604889600,1604890111,DE
-1604890112,1604890367,RU
-1604890368,1604890879,TR
-1604890880,1604891967,DE
-1604891968,1604892159,RU
-1604892160,1604892927,DE
-1604892928,1604893183,HK
-1604893184,1604893951,DE
-1604893952,1604894463,TR
-1604894464,1604894719,DE
-1604894720,1604895487,CZ
-1604895488,1604895491,SK
-1604895492,1604895607,CZ
-1604895608,1604895611,SK
-1604895612,1604900351,CZ
-1604900352,1604900383,SC
-1604900384,1604901311,CZ
-1604901312,1604901375,SC
-1604901376,1604901631,CZ
-1604901632,1604901887,SK
-1604901888,1604901911,CZ
-1604901912,1604901935,SK
-1604901936,1604901983,CZ
-1604901984,1604902023,SK
-1604902024,1604902031,CZ
-1604902032,1604902047,SK
-1604902048,1604902399,CZ
-1604902400,1604902911,SK
+1604878336,1604888063,DE
+1604888064,1604888831,TR
+1604888832,1604894719,DE
+1604894720,1604902911,CZ
1604902912,1604911103,BG
1604911104,1604919295,UA
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
@@ -74474,96 +29965,79 @@
1605083136,1605091327,BE
1605091328,1605099519,PL
1605099520,1605107711,RU
-1605107712,1605108255,GB
-1605108256,1605108263,IT
+1605107712,1605108247,GB
+1605108248,1605108263,IT
1605108264,1605108407,GB
1605108408,1605108415,IT
-1605108416,1605108439,GB
-1605108440,1605108447,IT
-1605108448,1605108567,GB
+1605108416,1605108567,GB
1605108568,1605108575,IT
-1605108576,1605108623,GB
-1605108624,1605108631,IT
-1605108632,1605109671,GB
-1605109672,1605109679,IT
-1605109680,1605110263,GB
+1605108576,1605109223,GB
+1605109224,1605109231,IT
+1605109232,1605109431,GB
+1605109432,1605109439,IT
+1605109440,1605109495,GB
+1605109496,1605109503,IT
+1605109504,1605110111,GB
+1605110112,1605110119,IT
+1605110120,1605110167,GB
+1605110168,1605110175,IT
+1605110176,1605110263,GB
1605110264,1605110271,IT
-1605110272,1605111111,GB
-1605111112,1605111119,IT
-1605111120,1605111847,GB
-1605111848,1605111855,IT
-1605111856,1605111919,GB
+1605110272,1605110559,GB
+1605110560,1605110567,IT
+1605110568,1605111023,GB
+1605111024,1605111031,IT
+1605111032,1605111199,GB
+1605111200,1605111207,IT
+1605111208,1605111799,GB
+1605111800,1605111807,IT
+1605111808,1605111919,GB
1605111920,1605111927,IT
-1605111928,1605112367,GB
-1605112368,1605112375,IT
-1605112376,1605112607,GB
-1605112608,1605112615,IT
-1605112616,1605113223,GB
-1605113224,1605113231,IT
-1605113232,1605113383,GB
+1605111928,1605111935,GB
+1605111936,1605111943,IT
+1605111944,1605112647,GB
+1605112648,1605112655,IT
+1605112656,1605112847,GB
+1605112848,1605112855,IT
+1605112856,1605113087,GB
+1605113088,1605113095,IT
+1605113096,1605113383,GB
1605113384,1605113391,IT
-1605113392,1605113415,GB
-1605113416,1605113423,IT
-1605113424,1605114199,GB
+1605113392,1605113407,GB
+1605113408,1605113415,IT
+1605113416,1605113503,GB
+1605113504,1605113511,IT
+1605113512,1605114199,GB
1605114200,1605114207,IT
1605114208,1605114263,GB
1605114264,1605114271,IT
-1605114272,1605114711,GB
-1605114712,1605114719,IT
-1605114720,1605114767,GB
-1605114768,1605114775,IT
-1605114776,1605114871,GB
+1605114272,1605114295,GB
+1605114296,1605114303,IT
+1605114304,1605114327,GB
+1605114328,1605114335,IT
+1605114336,1605114535,GB
+1605114536,1605114543,IT
+1605114544,1605114871,GB
1605114872,1605114879,IT
1605114880,1605114959,GB
1605114960,1605114967,IT
1605114968,1605115007,GB
1605115008,1605115015,IT
-1605115016,1605115047,GB
-1605115048,1605115055,IT
-1605115056,1605115759,GB
-1605115760,1605115767,IT
-1605115768,1605115807,GB
-1605115808,1605115815,IT
-1605115816,1605115903,GB
+1605115016,1605115599,GB
+1605115600,1605115607,IT
+1605115608,1605115863,GB
+1605115864,1605115871,IT
+1605115872,1605115903,GB
1605115904,1605124095,RU
-1605124096,1605124607,US
-1605124608,1605124639,GB
-1605124640,1605124735,US
-1605124736,1605124863,GB
-1605124864,1605124895,US
-1605124896,1605124927,GB
-1605124928,1605124959,US
-1605124960,1605125119,GB
-1605125120,1605125247,US
-1605125248,1605125263,GB
+1605124096,1605125263,GB
1605125264,1605125267,DE
-1605125268,1605125269,EU
+1605125268,1605125269,GB
1605125270,1605125279,DE
-1605125280,1605125335,GB
-1605125336,1605125343,US
-1605125344,1605125375,GB
-1605125376,1605125903,US
-1605125904,1605125904,GB
-1605125905,1605125920,DE
-1605125921,1605126015,GB
-1605126016,1605126911,US
-1605126912,1605127167,EU
-1605127168,1605127679,US
-1605127680,1605127935,GB
-1605127936,1605128703,US
-1605128704,1605129215,GB
-1605129216,1605129727,US
-1605129728,1605130239,GB
-1605130240,1605130244,US
-1605130245,1605130245,EU
-1605130246,1605130271,US
-1605130272,1605130295,GB
-1605130296,1605130303,US
-1605130304,1605130367,GB
-1605130368,1605130399,US
-1605130400,1605130495,GB
-1605130496,1605132159,US
-1605132160,1605132287,GB
+1605125280,1605125903,GB
+1605125904,1605125919,DE
+1605125920,1605130239,GB
+1605130240,1605130271,NL
+1605130272,1605132287,GB
1605132288,1605148671,RU
1605148672,1605156863,PT
1605156864,1605165055,JO
@@ -74572,8 +30046,7 @@
1605169413,1605173247,GB
1605173248,1605181439,TR
1605181440,1605189631,LT
-1605189632,1605189663,SK
-1605189664,1605189759,CZ
+1605189632,1605189759,CZ
1605189760,1605189887,SK
1605189888,1605197823,CZ
1605197824,1605206015,DE
@@ -74584,9 +30057,7 @@
1605238784,1605246975,IT
1605246976,1605255167,PL
1605257216,1605259263,FR
-1605259264,1605259519,DE
-1605259520,1605259583,CH
-1605259584,1605261311,DE
+1605259264,1605261311,DE
1605261312,1605271551,RU
1605271552,1605279743,DE
1605279744,1605287935,FR
@@ -74610,13 +30081,22 @@
1605599232,1605631999,GR
1605632000,1605664767,RS
1605664768,1605697535,MK
-1605697536,1605782527,RU
-1605782528,1605782783,CZ
-1605782784,1605783295,RU
-1605783296,1605783551,UA
-1605783552,1605795839,RU
+1605697536,1605734399,RU
+1605734400,1605735423,GB
+1605735424,1605742591,RU
+1605742592,1605744639,GB
+1605744640,1605750783,RU
+1605750784,1605751807,GB
+1605751808,1605763071,RU
+1605763072,1605765119,KZ
+1605765120,1605795839,RU
1605795840,1605828607,BE
-1605828608,1605861375,RU
+1605828608,1605828863,GB
+1605828864,1605830399,IL
+1605830400,1605830655,US
+1605830656,1605840895,RU
+1605840896,1605844991,CH
+1605844992,1605861375,RU
1605861376,1605894143,TR
1605894144,1606156287,RO
1606156288,1606418431,RU
@@ -74624,59 +30104,60 @@
1606636288,1606636543,GB
1606636544,1607467007,SE
1607467008,1607532543,DE
-1607532544,1607569407,SE
+1607532544,1607562495,SE
+1607562496,1607562751,DK
+1607562752,1607569407,SE
1607569408,1607572479,DK
-1607572480,1607573503,SE
-1607573504,1607577599,DK
+1607572480,1607575551,SE
+1607575552,1607577599,GB
1607577600,1607581695,SE
-1607581696,1607583743,DK
-1607583744,1607585791,SE
-1607585792,1607598079,DK
-1607598080,1607598335,IT
-1607598336,1607598591,EU
-1607598592,1607606015,IT
+1607581696,1607584511,DK
+1607584512,1607584767,SE
+1607584768,1607585023,DK
+1607585024,1607585279,SE
+1607585280,1607595263,DK
+1607595264,1607595519,SE
+1607595520,1607598079,DK
+1607598080,1607601919,IT
+1607601920,1607602175,GB
+1607602176,1607606015,IT
1607606016,1607606271,FR
-1607606272,1607609343,IT
-1607609344,1607609599,EU
-1607609600,1607610367,IT
+1607606272,1607608319,IT
+1607608320,1607609343,ES
+1607609344,1607610367,IT
1607610368,1607612415,IE
-1607612416,1607614463,EU
-1607614464,1607616511,FR
-1607616512,1607618559,EU
-1607618560,1607619071,IT
-1607619072,1607620607,GB
-1607620608,1607622655,EU
-1607622656,1607625983,IT
-1607625984,1607626239,EU
-1607626240,1607626751,IT
-1607626752,1607634431,EU
-1607634432,1607636479,IT
-1607636480,1607651583,EU
-1607651584,1607652351,FR
-1607652352,1607655423,EU
-1607655424,1607663615,IT
-1607663616,1607691455,NL
-1607691456,1607691519,GB
-1607691520,1607695559,NL
-1607695560,1607695560,NL
-1607695561,1607700735,NL
-1607700736,1607700991,GB
-1607700992,1607718207,NL
-1607718208,1607718239,GB
-1607718240,1607729151,NL
-1607729152,1607761919,EG
+1607612416,1607614463,IT
+1607614464,1607615487,FR
+1607615488,1607617535,GB
+1607617536,1607618559,IT
+1607618560,1607620607,ES
+1607620608,1607622655,IT
+1607622656,1607624703,ES
+1607624704,1607625727,IT
+1607625728,1607625983,ES
+1607625984,1607626239,IT
+1607626240,1607626751,ES
+1607626752,1607647231,IT
+1607647232,1607651327,DE
+1607651328,1607655423,FR
+1607655424,1607660287,IT
+1607660288,1607660543,PT
+1607660544,1607663615,IT
+1607663616,1607729151,NL
+1607729152,1607737343,SY
+1607737344,1607761919,EG
1607761920,1607766015,SY
1607766016,1607794687,EG
1607794688,1607860223,RU
1607860224,1607892991,ES
1607892992,1607893055,GB
1607893056,1607893119,DE
-1607893120,1607893188,DK
-1607893189,1607893247,IT
+1607893120,1607893183,DK
+1607893184,1607893247,IT
1607893248,1607893311,AT
1607893312,1607893375,FR
-1607893376,1607893443,SE
-1607893444,1607893503,NL
+1607893376,1607893439,SE
+1607893440,1607893503,NL
1607893504,1607893567,BE
1607893568,1607893631,IE
1607893632,1607925759,ES
@@ -74687,7 +30168,7 @@
1607930880,1607933951,PL
1607933952,1607934975,DE
1607934976,1607937023,UA
-1607937024,1607938047,LV
+1607937024,1607938047,SE
1607938048,1607939071,UA
1607939072,1607940095,PL
1607940096,1607941119,RU
@@ -74727,48 +30208,30 @@
1607983104,1607984127,GB
1607984128,1607985151,RU
1607985152,1607986175,PL
-1607986176,1607986687,FR
+1607986176,1607986431,FR
+1607986432,1607986687,GB
1607986688,1607988223,RU
1607988224,1607989247,KG
1607989248,1607991295,RU
1607991296,1608122367,UA
-1608122368,1608253439,RO
+1608122368,1608155135,GB
+1608155136,1608253439,RO
1608253440,1608384511,RU
1608384512,1608515583,DE
1608515584,1610612735,IT
1610612736,1610678271,US
1610678272,1610743807,CA
-1610743808,1611165943,US
-1611165944,1611165951,BD
-1611165952,1611166111,US
-1611166112,1611166119,NZ
-1611166120,1611166167,US
-1611166168,1611166175,AF
-1611166176,1611166343,US
-1611166344,1611166351,VE
-1611166352,1611166559,US
-1611166560,1611166575,HN
-1611166576,1611166735,US
-1611166736,1611166751,SE
-1611166752,1611166783,CA
-1611166784,1611167647,US
-1611167648,1611167679,CA
-1611167680,1611167727,SE
-1611167728,1611169599,US
-1611169600,1611169663,IE
-1611169664,1611227135,US
+1610743808,1611128831,US
+1611128832,1611130879,NL
+1611130880,1611227135,US
1611227136,1611235327,CA
1611235328,1611923455,US
1611923456,1612185599,CA
-1612185600,1612611583,US
-1612611584,1612636159,CA
-1612636160,1612685567,US
-1612685568,1612685583,CA
-1612685584,1612686175,US
-1612686176,1612686207,CA
-1612686208,1612689055,US
-1612689056,1612689071,CA
-1612689072,1613471743,US
+1612185600,1612611327,US
+1612611328,1612636159,CA
+1612636160,1613405695,US
+1613405696,1613405951,CA
+1613405952,1613471743,US
1613471744,1613479935,JM
1613479936,1613480191,CA
1613480192,1613488127,US
@@ -74776,66 +30239,27 @@
1613492224,1613504511,US
1613504512,1613529087,CA
1613529088,1613545471,US
-1613545472,1613545495,CA
-1613545496,1613545503,US
-1613545504,1613545551,CA
-1613545552,1613545559,US
-1613545560,1613545799,CA
-1613545800,1613545807,US
-1613545808,1613545871,CA
-1613545872,1613545879,US
-1613545880,1613545887,NL
-1613545888,1613546159,CA
-1613546160,1613546167,US
-1613546168,1613546407,CA
-1613546408,1613546423,US
-1613546424,1613546679,CA
-1613546680,1613546695,US
-1613546696,1613546703,CA
-1613546704,1613546719,US
-1613546720,1613547935,CA
-1613547936,1613547943,US
-1613547944,1613548479,CA
-1613548480,1613548487,US
-1613548488,1613548959,CA
-1613548960,1613548967,US
-1613548968,1613550487,CA
-1613550488,1613550495,US
-1613550496,1613550735,CA
-1613550736,1613550743,US
-1613550744,1613552063,CA
-1613552064,1613552079,US
-1613552080,1613552151,CA
-1613552152,1613552159,US
-1613552160,1613552199,CA
-1613552200,1613552207,US
-1613552208,1613556511,CA
-1613556512,1613556535,US
-1613556536,1613556559,CA
-1613556560,1613556583,US
-1613556584,1613556599,CA
-1613556600,1613556615,US
-1613556616,1613558359,CA
-1613558360,1613558375,NL
-1613558376,1613565951,CA
+1613545472,1613565951,CA
1613565952,1613606911,US
-1613606912,1613613119,CA
-1613613120,1613613151,IE
-1613613152,1613615103,CA
+1613606912,1613615103,CA
1613615104,1613635583,US
-1613635584,1613639679,CA
-1613639680,1613676543,US
+1613635584,1613640191,CA
+1613640192,1613640319,US
+1613640320,1613640447,CA
+1613640448,1613640575,US
+1613640576,1613643263,CA
+1613643264,1613643391,US
+1613643392,1613643775,CA
+1613643776,1613676543,US
1613676544,1613680639,CA
-1613680640,1613703670,US
-1613703671,1613703678,LK
-1613703679,1613737983,US
+1613680640,1613737983,US
1613737984,1613742079,CA
-1613742080,1613750803,US
-1613750804,1613750804,US
-1613750805,1613758463,US
+1613742080,1613758463,US
1613758464,1614282751,CA
1614282752,1614741503,US
-1614741504,1614757887,CA
+1614741504,1614743039,CA
+1614743040,1614743295,US
+1614743296,1614757887,CA
1614757888,1614774271,US
1614774272,1614786559,CA
1614786560,1618837503,US
@@ -74855,16 +30279,12 @@
1619001344,1632305151,US
1632305152,1632321535,CA
1632321536,1632354303,US
-1632354304,1632354607,CA
-1632354608,1632354615,US
-1632354616,1632354679,CA
-1632354680,1632354687,US
-1632354688,1632354919,CA
-1632354920,1632354927,NL
-1632354928,1632362495,CA
-1632362496,1632587007,US
-1632587008,1632587263,US
-1632587264,1634414591,US
+1632354304,1632362495,CA
+1632362496,1632978303,US
+1632978304,1632978431,CA
+1632978432,1632979583,US
+1632979584,1632979711,CA
+1632979712,1634414591,US
1634414592,1634418687,CA
1634418688,1634447359,US
1634447360,1634451455,CA
@@ -74872,31 +30292,22 @@
1634455552,1634459647,CA
1634459648,1634467839,US
1634467840,1634729983,CA
-1634729984,1650919315,US
-1650919316,1650919316,US
-1650919317,1652293631,US
+1634729984,1652293631,US
1652293632,1652310015,CA
-1652310016,1652460487,US
-1652460488,1652460495,CN
-1652460496,1652481279,US
+1652310016,1652447849,US
+1652447850,1652447850,CN
+1652447851,1652481279,US
1652481280,1652481791,CN
-1652481792,1652487286,US
-1652487287,1652487287,TR
-1652487288,1653500927,US
-1653500928,1653501183,FR
-1653501184,1653501439,IL
+1652481792,1653500927,US
+1653500928,1653501439,IL
1653501440,1653501695,HK
1653501696,1653534719,US
1653534720,1653538815,CA
1653538816,1653555199,US
-1653555200,1653560319,CA
-1653560320,1653560327,US
-1653560328,1653567487,CA
+1653555200,1653567487,CA
1653567488,1653571583,US
1653571584,1653575679,CA
-1653575680,1653575797,US
-1653575798,1653575798,US
-1653575799,1653592063,US
+1653575680,1653592063,US
1653592064,1653596159,CA
1653596160,1653600255,US
1653600256,1653604351,CA
@@ -74904,158 +30315,26 @@
1654542336,1654546431,CA
1654546432,1654550527,VG
1654550528,1654554623,US
-1654554624,1654558207,CA
-1654558208,1654558463,US
-1654558464,1654558719,CA
-1654558720,1654583103,US
-1654583104,1654583135,CA
-1654583136,1654597647,US
-1654597648,1654597655,PL
-1654597656,1654648831,US
+1654554624,1654558719,CA
+1654558720,1654648831,US
1654648832,1654652927,CA
-1654652928,1663444375,US
-1663444376,1663444383,CA
-1663444384,1673527295,US
+1654652928,1656731007,US
+1656731008,1656731135,VI
+1656731136,1673527295,US
1673527296,1673560063,CA
-1673560064,1673562207,US
-1673562208,1673562239,CR
-1673562240,1673562303,US
-1673562304,1673562319,CA
-1673562320,1673562335,PL
-1673562336,1673562399,US
-1673562400,1673562415,GB
-1673562416,1673562639,US
-1673562640,1673562671,GB
-1673562672,1673562719,US
-1673562720,1673562751,NL
-1673562752,1673562975,US
-1673562976,1673563007,NL
-1673563008,1673563151,US
-1673563152,1673563167,CA
-1673563168,1673563663,US
-1673563664,1673563679,CA
-1673563680,1673563695,US
-1673563696,1673563711,CA
-1673563712,1673563775,US
-1673563776,1673563903,GB
-1673563904,1673566847,US
-1673566848,1673566911,CA
-1673566912,1673567263,US
-1673567264,1673567279,AT
-1673567280,1673567583,US
-1673567584,1673567615,CA
-1673567616,1673567807,US
-1673567808,1673567823,AU
-1673567824,1673567855,US
-1673567856,1673567871,CA
-1673567872,1673568255,US
-1673568256,1673568271,CA
-1673568272,1673568303,US
-1673568304,1673568319,GB
-1673568320,1673568383,US
-1673568384,1673568447,CA
-1673568448,1673569023,US
-1673569024,1673569039,CA
-1673569040,1673569055,HR
-1673569056,1673569183,US
-1673569184,1673569215,NL
-1673569216,1673569887,US
-1673569888,1673569903,PL
-1673569904,1673569967,US
-1673569968,1673569983,GB
-1673569984,1673571679,US
-1673571680,1673571711,CA
-1673571712,1673572895,US
-1673572896,1673572911,CA
-1673572912,1673573183,US
-1673573184,1673573247,CA
-1673573248,1673573503,US
-1673573504,1673573567,NL
-1673573568,1673577231,US
-1673577232,1673577247,CA
-1673577248,1673578287,US
-1673578288,1673578303,CA
-1673578304,1673578751,US
-1673578752,1673578767,CA
-1673578768,1673579391,US
-1673579392,1673579455,LT
-1673579456,1673580095,US
-1673580096,1673580127,CA
-1673580128,1673580287,US
+1673560064,1673580287,US
1673580288,1673580543,CA
-1673580544,1673580927,US
-1673580928,1673580991,LT
-1673580992,1673581183,US
-1673581184,1673581247,LT
-1673581248,1673581439,US
-1673581440,1673581503,LT
-1673581504,1673581599,US
-1673581600,1673581615,CA
-1673581616,1673581695,US
-1673581696,1673581759,LT
-1673581760,1673581951,US
-1673581952,1673582015,LT
-1673582016,1673582207,US
-1673582208,1673582271,LT
-1673582272,1673583231,US
-1673583232,1673583295,CA
-1673583296,1673583455,US
-1673583456,1673583487,HR
-1673583488,1673583935,US
-1673583936,1673583967,HR
-1673583968,1673584191,US
-1673584192,1673584223,HR
-1673584224,1673584383,US
-1673584384,1673584399,HR
-1673584400,1673584767,US
-1673584768,1673584895,CA
-1673584896,1673585343,US
-1673585344,1673585407,SC
-1673585408,1673586175,US
-1673586176,1673586191,NL
-1673586192,1673586431,US
-1673586432,1673586447,NL
-1673586448,1673588799,US
-1673588800,1673588863,CA
-1673588864,1673588991,US
-1673588992,1673589007,HR
-1673589008,1673590783,US
-1673590784,1673590911,EC
-1673590912,1673986047,US
+1673580544,1673986047,US
1673986048,1674051583,CA
1674051584,1674575871,US
1674575872,1677721599,CA
-1677721600,1680531967,US
-1680531968,1680532447,CN
-1680532448,1680532479,US
-1680532480,1680532575,CN
-1680532576,1680532591,US
-1680532592,1680532599,CN
-1680532600,1680532623,US
-1680532624,1680532639,CN
-1680532640,1680532655,US
-1680532656,1680532671,CN
-1680532672,1680532735,US
-1680532736,1680532831,CN
-1680532832,1680532863,US
-1680532864,1680533375,CN
-1680533376,1680533407,US
-1680533408,1680533567,CN
-1680533568,1680533599,US
-1680533600,1680534663,CN
-1680534664,1680534671,US
-1680534672,1680534687,CN
-1680534688,1680534703,US
-1680534704,1680534935,CN
-1680534936,1680534975,US
-1680534976,1680535487,CN
-1680535488,1680535551,US
+1677721600,1680534015,US
+1680534016,1680534527,CN
+1680534528,1680535551,US
1680535552,1680539647,CA
1680539648,1680564223,US
1680564224,1680572415,CA
-1680572416,1680627199,US
-1680627200,1680627263,CA
-1680627264,1681915903,US
+1680572416,1681915903,US
1686110208,1694498815,US
1694498816,1694499839,CN
1694499840,1694500863,ID
@@ -75081,7 +30360,7 @@
1695023104,1695547391,TW
1695547392,1697775615,CN
1697775616,1697776639,ID
-1697776640,1697779711,JP
+1697776640,1697777663,JP
1697779712,1697783807,ID
1697783808,1697789951,JP
1697789952,1697790975,CN
@@ -75147,7 +30426,7 @@
1701740544,1701838847,JP
1701838848,1702363135,AU
1702363136,1702821887,CN
-1702821888,1702887423,HK
+1702821888,1702887423,SG
1702887424,1702888447,CN
1702888448,1702889471,AU
1702889472,1702903807,CN
@@ -75209,7 +30488,8 @@
1728152576,1728153599,MY
1728153600,1728154623,SG
1728154624,1728155647,JP
-1728155648,1728158719,MY
+1728155648,1728158463,MY
+1728158464,1728158719,NL
1728158720,1728159743,HK
1728159744,1728161791,TH
1728161792,1728162815,CN
@@ -75222,7 +30502,7 @@
1728171008,1728172031,AU
1728172032,1728173055,VN
1728173056,1728175103,AU
-1728175104,1728177151,HK
+1728176128,1728177151,HK
1728177152,1728178175,AU
1728178176,1728179199,LA
1728179200,1728180223,VN
@@ -75259,7 +30539,6 @@
1728246784,1728254975,JP
1728254976,1728255999,MY
1728256000,1728257023,HK
-1728257024,1728258047,MN
1728258048,1728259071,IN
1728259072,1728260095,KR
1728260096,1728261119,IN
@@ -75298,7 +30577,6 @@
1728316416,1728317439,MY
1728317440,1728319487,JP
1728319488,1728320511,AU
-1728320512,1728321535,PH
1728321536,1728322559,JP
1728322560,1728323583,MY
1728323584,1728324607,JP
@@ -75326,9 +30604,7 @@
1728346112,1728346367,AU
1728346368,1728346623,NZ
1728346624,1728347135,AU
-1728347136,1728347147,SG
-1728347148,1728347148,AP
-1728347149,1728348159,SG
+1728347136,1728348159,SG
1728348160,1728349183,VN
1728349184,1728349951,AU
1728349952,1728350207,NP
@@ -75356,7 +30632,6 @@
1728369664,1728370687,AU
1728370688,1728371711,TH
1728371712,1728372735,IN
-1728372736,1728373759,HK
1728373760,1728374783,TH
1728374784,1728375039,SG
1728375040,1728375295,IN
@@ -75414,7 +30689,6 @@
1728425984,1728427007,JP
1728427008,1728428031,MY
1728428032,1728430079,IN
-1728430080,1728431103,JP
1728431104,1728431615,AF
1728431616,1728431871,HK
1728431872,1728432127,SG
@@ -75433,7 +30707,7 @@
1728444416,1728445439,JP
1728445440,1728446463,CN
1728446464,1728446975,ID
-1728446976,1728447487,IN
+1728446976,1728447231,IN
1728447488,1728448511,HK
1728448512,1728449535,KH
1728449536,1728450559,AU
@@ -75458,14 +30732,11 @@
1728468480,1728468735,AU
1728468736,1728469247,IN
1728469248,1728469503,NZ
-1728469504,1728470015,HK
1728470016,1728471039,JP
1728471040,1728472063,PH
1728472064,1728473087,KR
-1728473088,1728473343,IN
1728473344,1728473599,AU
1728473600,1728474111,SG
-1728474112,1728475135,IN
1728475136,1728476159,JP
1728476160,1728476415,AU
1728476416,1728476927,ID
@@ -75499,7 +30770,7 @@
1728501248,1728501503,ID
1728501504,1728502783,AU
1728502784,1728503807,CN
-1728503808,1728505855,JP
+1728503808,1728504831,JP
1728505856,1728506879,NZ
1728506880,1728507903,MY
1728507904,1728508927,JP
@@ -75542,7 +30813,6 @@
1728544768,1728545791,IN
1728545792,1728546815,JP
1728546816,1728547839,AU
-1728547840,1728548863,MY
1728548864,1728549119,KH
1728549120,1728549375,IN
1728549376,1728549631,PH
@@ -75562,7 +30832,6 @@
1728558080,1728559103,IN
1728559104,1728560127,ID
1728560128,1728560639,AU
-1728560640,1728561151,HK
1728561152,1728562175,AU
1728562176,1728562431,VN
1728562432,1728562687,VU
@@ -75598,7 +30867,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
@@ -75610,7 +30879,6 @@
1728606208,1728607231,PK
1728607232,1728608255,IN
1728608256,1728608511,SG
-1728608512,1728608767,IN
1728608768,1728609023,ID
1728609024,1728610303,IN
1728610304,1728611327,TH
@@ -75651,7 +30919,7 @@
1728643072,1728645119,VN
1728645120,1728646143,SG
1728646144,1728647167,IN
-1728647168,1728648703,AU
+1728647168,1728648191,AU
1728648704,1728648959,ID
1728648960,1728649215,PK
1728650240,1728651263,JP
@@ -75660,7 +30928,6 @@
1728653312,1728654335,NZ
1728654336,1728655359,ID
1728655872,1728656127,SB
-1728656128,1728656383,HK
1728656384,1728661503,AU
1728661504,1728662527,IN
1728662528,1728665599,VN
@@ -75669,7 +30936,6 @@
1728668672,1728669695,SG
1728669696,1728670207,BD
1728670208,1728670463,NZ
-1728670464,1728670719,FJ
1728670720,1728671743,JP
1728671744,1728672767,BD
1728672768,1728673791,TW
@@ -75719,7 +30985,6 @@
1728716800,1728717823,AU
1728717824,1728718847,JP
1728718848,1728719871,MY
-1728719872,1728720895,NZ
1728720896,1728721919,AU
1728721920,1728722943,BD
1728722944,1728723199,ID
@@ -75778,12 +31043,10 @@
1728768000,1728768255,AU
1728768256,1728768511,NZ
1728768512,1728769023,IN
-1728769024,1728770047,HK
1728770048,1728772095,JP
1728772096,1728773375,IN
1728773376,1728773631,ID
1728773632,1728774143,PH
-1728774144,1728775167,AU
1728775168,1728776191,JP
1728776192,1728777215,AU
1728777216,1728778239,TH
@@ -75852,7 +31115,6 @@
1728836608,1728837631,HK
1728837632,1728838655,KR
1728838656,1728839679,ID
-1728839680,1728839935,FJ
1728839936,1728840191,IN
1728840192,1728840447,SG
1728840448,1728842751,AU
@@ -75880,7 +31142,6 @@
1728861184,1728861439,ID
1728861440,1728862207,AU
1728862208,1728863231,PH
-1728863232,1728864255,HK
1728864256,1728865279,AF
1728865280,1728866303,AU
1728866304,1728867327,VN
@@ -75911,7 +31172,7 @@
1728887808,1728888831,AU
1728888832,1728889855,IN
1728889856,1728890879,JP
-1728890880,1728891903,SG
+1728890880,1728891903,AU
1728891904,1728892927,BD
1728892928,1728893439,BN
1728893440,1728893695,SG
@@ -75931,11 +31192,10 @@
1728902656,1728902911,MY
1728902912,1728903167,BD
1728903168,1728905215,KR
-1728905216,1728905471,FJ
1728905472,1728905727,PK
-1728905728,1728907263,IN
+1728905728,1728906239,IN
1728907264,1728908287,NZ
-1728908288,1728912383,JP
+1728909312,1728912383,JP
1728912384,1728913407,TH
1728913408,1728914431,PH
1728914432,1728915199,ID
@@ -75946,7 +31206,7 @@
1728919552,1728920575,AU
1728920576,1728921599,JP
1728921600,1728922623,AF
-1728922624,1728924415,AU
+1728922624,1728923647,AU
1728924416,1728924671,MY
1728924672,1728925695,VN
1728925696,1728927743,AU
@@ -75956,7 +31216,6 @@
1728930816,1728931839,AU
1728931840,1728932863,JP
1728932864,1728933887,IN
-1728933888,1728934911,JP
1728934912,1728935935,NZ
1728935936,1728936959,MY
1728936960,1728937983,CN
@@ -75977,7 +31236,7 @@
1728951552,1728951807,ID
1728951808,1728952063,SG
1728952064,1728952319,IN
-1728952320,1728953343,AU
+1728952832,1728953343,AU
1728953344,1728954367,HK
1728954368,1728955391,JP
1728955392,1728956415,CN
@@ -75986,7 +31245,6 @@
1728959488,1728960511,TH
1728960512,1728961279,AU
1728961280,1728961535,IN
-1728961536,1728962559,JP
1728962560,1728963583,BD
1728963584,1728964607,TH
1728964608,1728965631,HK
@@ -75994,7 +31252,6 @@
1728966656,1728967679,IN
1728967680,1728968703,CN
1728968704,1728970751,JP
-1728970752,1728971007,FJ
1728971008,1728971263,AU
1728971264,1728971519,IN
1728971520,1728971775,NZ
@@ -76004,7 +31261,6 @@
1728974848,1728976383,ID
1728976384,1728976895,AU
1728976896,1728977151,AF
-1728977408,1728977663,HK
1728977664,1728977919,BD
1728977920,1728978943,MY
1728978944,1728979967,JP
@@ -76013,22 +31269,22 @@
1728982016,1728982527,ID
1728982528,1728982783,IN
1728982784,1728985087,AU
-1728985088,1728986111,TW
-1728986112,1728987135,PH
+1728985088,1728987135,PH
1728987136,1728988159,AU
1728988160,1728988191,NZ
1728988192,1728988199,US
1728988200,1728989183,NZ
1728989184,1728990207,BD
-1728990208,1728991231,SG
+1728990208,1728990335,MY
+1728990336,1728990463,ID
+1728990464,1728990975,KR
+1728990976,1728991231,SG
1728991232,1728992255,BD
1728992256,1728993279,CN
1728993280,1728994303,PG
1728994304,1728995327,AU
1728995328,1728996095,IN
1728996096,1728996351,SG
-1728996352,1728997375,HK
-1728997376,1728998399,PH
1728998400,1728998655,ID
1728998656,1728998911,BD
1728998912,1728999423,ID
@@ -76054,7 +31310,6 @@
1729020160,1729020415,BD
1729020416,1729020671,PH
1729020672,1729020927,ID
-1729020928,1729021951,JP
1729021952,1729022975,AU
1729022976,1729023999,BD
1729024000,1729025023,IN
@@ -76070,10 +31325,10 @@
1729031168,1729032191,SG
1729032192,1729033215,CN
1729033216,1729033727,SG
-1729033728,1729033983,GB
-1729033984,1729034239,SG
+1729033728,1729034239,GB
1729034240,1729035263,KH
-1729035264,1729036287,AU
+1729035264,1729035519,SG
+1729035520,1729036287,AU
1729036288,1729037311,JP
1729037312,1729039359,CN
1729039360,1729040383,JP
@@ -76100,9 +31355,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
@@ -76128,7 +31381,9 @@
1729081344,1729081599,NP
1729081600,1729082111,AU
1729082112,1729082367,IN
-1729082368,1729084415,HK
+1729082368,1729083391,HK
+1729083392,1729083647,JP
+1729083648,1729084415,HK
1729084416,1729085439,JP
1729085440,1729087487,HK
1729087488,1729088511,CN
@@ -76137,7 +31392,7 @@
1729091584,1729092607,HK
1729092608,1729094143,BD
1729094144,1729094655,IN
-1729094656,1729095679,AU
+1729094656,1729095167,AU
1729095680,1729096703,SG
1729096704,1729097215,AU
1729097216,1729097727,AF
@@ -76145,7 +31400,6 @@
1729098752,1729099775,BD
1729099776,1729100543,IN
1729100544,1729100799,ID
-1729100800,1729101823,PH
1729101824,1729102847,VN
1729102848,1729103871,IN
1729103872,1729104895,JP
@@ -76154,7 +31408,10 @@
1729105920,1729106943,SG
1729106944,1729107967,NZ
1729107968,1729108479,IN
-1729108480,1729108991,HK
+1729108480,1729108616,KR
+1729108617,1729108617,HK
+1729108618,1729108735,KR
+1729108736,1729108991,HK
1729108992,1729111039,IN
1729111040,1729112063,JP
1729112064,1729113087,MY
@@ -76215,11 +31472,15 @@
1729162240,1729163263,JP
1729163264,1729165311,TW
1729165312,1729166335,JP
-1729166336,1729167359,HK
+1729166336,1729166671,SG
+1729166672,1729166687,PH
+1729166688,1729166799,SG
+1729166800,1729166815,PH
+1729166816,1729166847,SG
+1729166848,1729167359,HK
1729167360,1729168383,IN
1729168384,1729169407,JP
1729169408,1729170431,TW
-1729170432,1729171455,BD
1729171456,1729171967,AU
1729171968,1729172223,IN
1729172224,1729172479,MY
@@ -76245,7 +31506,6 @@
1729189888,1729190911,VN
1729190912,1729191935,HK
1729191936,1729195007,IN
-1729195008,1729195519,MN
1729195520,1729196031,BD
1729196032,1729197055,GU
1729197056,1729198079,HK
@@ -76255,7 +31515,6 @@
1729199872,1729200127,TH
1729200128,1729201151,IN
1729201152,1729202175,AU
-1729202176,1729203199,JP
1729203200,1729205247,SG
1729205248,1729206271,JP
1729206272,1729207295,AU
@@ -76270,7 +31529,144 @@
1729213952,1729214463,ID
1729214464,1729216511,JP
1729216512,1729216767,ID
-1729217536,1729218559,HK
+1729216768,1729217023,AU
+1729217024,1729217535,IN
+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
+1729221632,1729222655,KH
+1729222656,1729225727,AU
+1729225728,1729226751,CN
+1729226752,1729227775,AU
+1729227776,1729228799,VN
+1729228800,1729229823,TW
+1729229824,1729230847,ID
+1729230848,1729231103,PH
+1729231360,1729232895,AU
+1729232896,1729233919,MY
+1729233920,1729234943,VN
+1729234944,1729236991,PK
+1729236992,1729238015,ID
+1729238016,1729239039,PK
+1729239040,1729240063,JP
+1729240064,1729242111,ID
+1729242112,1729244159,AU
+1729244160,1729245183,SG
+1729245184,1729247231,AU
+1729247232,1729247487,NZ
+1729247488,1729247743,AU
+1729247744,1729248255,NZ
+1729248256,1729249279,JP
+1729249280,1729252351,IN
+1729254400,1729255423,AU
+1729255424,1729256447,MY
+1729257472,1729258495,ID
+1729258496,1729259519,JP
+1729259520,1729260543,IN
+1729260544,1729261567,AU
+1729261568,1729262591,JP
+1729262592,1729262847,PK
+1729262848,1729263103,ID
+1729263104,1729263615,NZ
+1729263616,1729264639,IN
+1729264640,1729265663,AU
+1729265664,1729266687,TW
+1729266688,1729267711,ID
+1729267712,1729268735,NZ
+1729268736,1729269759,IN
+1729269760,1729270783,ID
+1729270784,1729271807,AU
+1729271808,1729272063,IN
+1729272064,1729272319,ID
+1729272320,1729272831,AU
+1729272832,1729273855,IN
+1729273856,1729274879,AF
+1729274880,1729276927,IN
+1729276928,1729277951,BN
+1729277952,1729278975,VN
+1729278976,1729279999,MN
+1729280000,1729281023,HK
+1729281024,1729281535,AU
+1729281536,1729282047,ID
+1729282048,1729283071,CN
+1729283072,1729284095,AU
+1729284096,1729285119,NZ
+1729285120,1729286143,AU
+1729286144,1729288191,CN
+1729288192,1729289215,IN
+1729289216,1729290239,ID
+1729290240,1729291263,CN
+1729291264,1729293311,JP
+1729293312,1729294591,ID
+1729294592,1729294847,AU
+1729294848,1729295103,IN
+1729295104,1729295359,PK
+1729295360,1729296383,MY
+1729297408,1729298431,AU
+1729299456,1729300479,NZ
+1729300480,1729300991,SG
+1729300992,1729301503,NZ
+1729301504,1729302527,CN
+1729302528,1729302783,PH
+1729302784,1729303551,IN
+1729303552,1729304575,SG
+1729304576,1729305599,HK
+1729305600,1729306623,JP
+1729306624,1729307647,PH
+1729307904,1729308159,ID
+1729308160,1729308415,HK
+1729308416,1729308671,AU
+1729308672,1729310719,CN
+1729310720,1729311743,JP
+1729311744,1729312767,IN
+1729312768,1729313791,ID
+1729313792,1729314815,AU
+1729314816,1729317887,CN
+1729317888,1729319423,ID
+1729319424,1729319935,SG
+1729319936,1729320959,HK
+1729320960,1729321983,IN
+1729321984,1729323007,AU
+1729323008,1729324031,VN
+1729324032,1729325055,NZ
+1729325056,1729326079,TH
+1729326080,1729327103,ID
+1729327104,1729328127,AU
+1729328128,1729330175,JP
+1729330176,1729331199,KR
+1729331200,1729331711,IN
+1729331712,1729332223,BD
+1729332224,1729335295,IN
+1729335296,1729336319,AU
+1729336320,1729338367,IN
+1729338368,1729340415,JP
+1729340416,1729341439,VN
+1729341440,1729341951,IN
+1729341952,1729343487,AU
+1729343488,1729346559,ID
+1729346560,1729347583,HK
+1729347584,1729348607,AU
+1729348608,1729350655,IN
+1729350656,1729352703,ID
+1729352704,1729353727,IN
+1729353728,1729353983,AU
+1729353984,1729354239,IN
+1729354240,1729354751,AU
+1729354752,1729355775,VN
+1729355776,1729356799,IN
+1729356800,1729357823,ID
+1729357824,1729358847,CN
+1729358848,1729359871,HK
+1729359872,1729360895,JP
+1729360896,1729361919,AU
+1729361920,1729362943,IN
+1729362944,1729363967,BD
1729363968,1729364991,PK
1729364992,1729367039,JP
1729367040,1729368063,CN
@@ -76282,17 +31678,14 @@
1729372160,1729373183,CN
1729373184,1729374207,JP
1729374208,1729375231,TW
-1729375232,1729376255,JP
1729376256,1729376767,AU
1729376768,1729377023,SG
1729377024,1729377279,ID
1729377280,1729378303,BD
1729378304,1729378815,IN
-1729378816,1729379071,TH
1729379072,1729379327,SG
1729379328,1729380351,HK
1729380352,1729381375,IN
-1729381376,1729382399,AU
1729382400,1729383423,JP
1729383424,1729384447,PG
1729384448,1729385471,KH
@@ -76346,7 +31739,6 @@
1729426432,1729427455,AU
1729427456,1729428479,CN
1729428480,1729430527,AU
-1729430528,1729431551,BD
1729431552,1729432575,JP
1729432576,1729433599,PH
1729433600,1729433855,IN
@@ -76405,7 +31797,6 @@
1729486848,1729488383,ID
1729488384,1729488895,SB
1729488896,1729489919,IN
-1729489920,1729490943,BD
1729490944,1729491967,CN
1729491968,1729492991,HK
1729492992,1729494015,SB
@@ -76415,7 +31806,6 @@
1729520640,1729527807,CN
1729527808,1729528831,SG
1729528832,1729530879,ID
-1729530880,1729531903,MY
1729531904,1729532927,AU
1729532928,1729533951,MY
1729533952,1729534975,JP
@@ -76431,8 +31821,9 @@
1729543168,1729544191,CN
1729544192,1729545215,IN
1729545216,1729546239,AU
-1729546240,1729547263,HK
-1729548288,1729549311,AU
+1729546240,1729546495,JP
+1729546496,1729547263,HK
+1729548544,1729549311,AU
1729549312,1729550335,JP
1729550336,1729551359,MY
1729551360,1729552383,KR
@@ -76442,7 +31833,6 @@
1729554944,1729555455,NZ
1729555456,1729556479,IN
1729556480,1729557503,ID
-1729557504,1729558527,HK
1729558528,1729559551,ID
1729559552,1729560575,CN
1729560576,1729561599,AU
@@ -76457,14 +31847,13 @@
1729569792,1729570815,AF
1729570816,1729571839,AU
1729571840,1729572863,MY
-1729572864,1729573887,MN
+1729573632,1729573887,MN
1729573888,1729574911,NC
1729574912,1729575935,CN
1729575936,1729576959,BD
1729576960,1729577983,AU
1729577984,1729578495,HK
1729578496,1729578751,AU
-1729578752,1729579007,MY
1729579008,1729580031,JP
1729580032,1729581055,SG
1729581056,1729583103,KR
@@ -76491,7 +31880,7 @@
1729599488,1729600511,AU
1729600512,1729601535,VN
1729601536,1729603583,CN
-1729603584,1729604607,BD
+1729603584,1729604607,HK
1729604608,1729605119,AU
1729605376,1729605631,ID
1729605632,1729606655,CN
@@ -76500,7 +31889,6 @@
1729609728,1729610751,HK
1729610752,1729611775,JP
1729611776,1729612799,ID
-1729612800,1729613823,JP
1729613824,1729614847,SG
1729614848,1729615103,NZ
1729615104,1729615359,KH
@@ -76516,6 +31904,271 @@
1729623552,1729623807,TH
1729623808,1729624063,AF
1729624064,1729626111,JP
+1729626112,1729627135,HK
+1729627136,1729628159,SG
+1729628160,1729629183,KR
+1729629184,1729629695,ID
+1729629696,1729629951,AU
+1729629952,1729630207,HK
+1729630208,1729631231,PH
+1729631232,1729632255,IN
+1729632256,1729633279,SG
+1729633280,1729634303,NZ
+1729634304,1729635327,KH
+1729635328,1729636351,IN
+1729636352,1729637375,NZ
+1729637376,1729637887,SG
+1729637888,1729638143,IN
+1729638144,1729638399,AU
+1729638400,1729639423,ID
+1729639424,1729640447,JP
+1729640448,1729641471,ID
+1729641472,1729642495,IN
+1729642496,1729643519,AU
+1729643520,1729644543,JP
+1729644544,1729645823,ID
+1729645824,1729646079,SG
+1729646080,1729646591,PG
+1729646592,1729649663,IN
+1729649664,1729650687,HK
+1729650688,1729651711,PK
+1729651712,1729652735,TW
+1729652736,1729653759,ID
+1729653760,1729654783,IN
+1729654784,1729655807,NC
+1729655808,1729656831,CN
+1729656832,1729657855,AU
+1729657856,1729658879,IN
+1729658880,1729659903,CN
+1729659904,1729660415,AU
+1729660416,1729660671,MY
+1729660672,1729660927,IN
+1729660928,1729662975,NZ
+1729662976,1729663999,CN
+1729664000,1729665023,ID
+1729665024,1729666047,HK
+1729666048,1729667071,SG
+1729667072,1729668095,JP
+1729668096,1729669119,SG
+1729669120,1729670143,JP
+1729670144,1729671167,IN
+1729671168,1729672191,CN
+1729672192,1729673215,IN
+1729673216,1729674239,CN
+1729674240,1729675263,IN
+1729675264,1729676287,JP
+1729676288,1729677311,AU
+1729677312,1729678335,IN
+1729678336,1729679359,HK
+1729679360,1729680383,AU
+1729680384,1729681407,ID
+1729681408,1729682431,HK
+1729682432,1729683455,CN
+1729683456,1729684479,HK
+1729684480,1729685503,CN
+1729685504,1729687551,IN
+1729687552,1729688575,AU
+1729688576,1729689599,VN
+1729689600,1729691647,CN
+1729691648,1729693695,IN
+1729693696,1729694207,CN
+1729694208,1729694719,IN
+1729694720,1729695743,MM
+1729695744,1729696767,KR
+1729696768,1729702911,CN
+1729702912,1729703935,IN
+1729703936,1729704959,CN
+1729705216,1729705471,AU
+1729705472,1729705983,ID
+1729705984,1729706751,AU
+1729706752,1729707007,NZ
+1729707008,1729708031,HK
+1729708032,1729710079,CN
+1729710080,1729711103,HK
+1729711104,1729712127,MM
+1729712128,1729713151,BD
+1729713152,1729714175,IN
+1729714176,1729715199,JP
+1729715200,1729716223,IN
+1729716224,1729717247,TH
+1729717248,1729718271,JP
+1729718272,1729719295,HK
+1729719296,1729720319,ID
+1729720320,1729721087,AU
+1729721088,1729721343,IN
+1729721344,1729722367,NZ
+1729722368,1729726463,IN
+1729726464,1729727487,PK
+1729727488,1729728511,KI
+1729728512,1729729535,JP
+1729729536,1729730559,CN
+1729730560,1729731583,IN
+1729731584,1729732607,CN
+1729732608,1729733631,AU
+1729733632,1729733887,BD
+1729733888,1729734655,ID
+1729734656,1729736703,IN
+1729736704,1729737727,PH
+1729737728,1729738751,AU
+1729738752,1729739775,BD
+1729739776,1729740799,NZ
+1729740800,1729742335,ID
+1729742336,1729742847,PH
+1729742848,1729743871,SG
+1729743872,1729744895,IN
+1729744896,1729745919,ID
+1729745920,1729746943,AU
+1729746944,1729747967,CN
+1729747968,1729748223,IN
+1729748224,1729748479,AU
+1729748480,1729748991,ID
+1729748992,1729750015,IN
+1729750016,1729750527,VU
+1729750528,1729751039,IN
+1729751040,1729753087,TW
+1729753088,1729754111,TH
+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
+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,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,1729879167,AU
+1729879168,1729879679,JP
+1729879680,1729879807,AU
+1729879808,1729880063,JP
+1729880064,1729880831,AU
+1729880832,1729881087,NZ
+1729881088,1729881215,PH
+1729881216,1729881343,TH
+1729881344,1729881471,ID
+1729881472,1729881599,VN
+1729881600,1729881727,TH
+1729881728,1729881855,PH
+1729881856,1729881983,VN
+1729881984,1729882111,ID
+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
@@ -76527,7 +32180,6 @@
1729898496,1729899519,AU
1729899520,1729900543,HK
1729900544,1729901567,AU
-1729901568,1729902079,BD
1729902080,1729902591,SG
1729902592,1729903615,ID
1729903616,1729905663,KR
@@ -76571,7 +32223,6 @@
1729939968,1729940479,PH
1729940480,1729941503,CN
1729941504,1729942527,SG
-1729942528,1729943551,IN
1729943552,1729944063,AU
1729944064,1729946623,ID
1729946624,1729949695,JP
@@ -76661,7 +32312,7 @@
1730031616,1730032639,HK
1730032640,1730033663,JP
1730033664,1730034687,ID
-1730034688,1730036735,JP
+1730034688,1730035711,JP
1730036736,1730037759,HK
1730037760,1730038783,JP
1730038784,1730039807,HK
@@ -76686,7 +32337,6 @@
1730062336,1730062591,AU
1730062592,1730062847,BD
1730062848,1730064383,ID
-1730064384,1730065407,JP
1730065408,1730066431,ID
1730066432,1730067455,AU
1730067456,1730068479,BD
@@ -76700,14 +32350,15 @@
1730074368,1730074623,SG
1730074624,1730075647,CN
1730075648,1730076671,ID
-1730076672,1730077695,AU
-1730077696,1730080767,CN
+1730076672,1730080767,CN
1730080768,1730081791,HK
1730081792,1730082815,ID
1730082816,1730083839,PW
1730083840,1730084863,JP
1730084864,1730085887,CN
-1730085888,1730086911,AU
+1730085888,1730086143,AU
+1730086144,1730086399,ID
+1730086400,1730086911,AU
1730086912,1730087935,HK
1730087936,1730088959,JP
1730088960,1730091007,HK
@@ -76760,11 +32411,800 @@
1730142208,1730143231,ID
1730143232,1730144255,SG
1730144256,1730145279,ID
-1730145280,1730146303,BD
1730146304,1730147327,HK
1730147328,1730148351,JP
1730148352,1730149375,ID
1730149376,1730150399,JP
+1742733312,1742734335,HK
+1742734336,1742735359,IN
+1742735360,1742736383,JP
+1742736384,1742737407,PK
+1742737408,1742738431,SG
+1742738432,1742738687,HK
+1742738688,1742738943,AU
+1742738944,1742739455,HK
+1742739456,1742740479,IN
+1742740480,1742741503,KH
+1742741504,1742743551,IN
+1742743552,1742745599,CN
+1742745600,1742745855,IN
+1742745856,1742746111,AU
+1742746112,1742746623,IN
+1742746624,1742747135,AU
+1742747136,1742747391,IN
+1742747392,1742747647,AU
+1742747648,1742748671,HK
+1742748672,1742749695,CN
+1742749696,1742750719,ID
+1742750720,1742751743,IN
+1742751744,1742752767,HK
+1742752768,1742753791,NZ
+1742753792,1742754815,CN
+1742754816,1742756863,AU
+1742756864,1742757887,JP
+1742757888,1742758911,BN
+1742758912,1742759935,ID
+1742759936,1742760191,AU
+1742760192,1742760447,IN
+1742760448,1742760703,HK
+1742760704,1742760959,NZ
+1742760960,1742761983,IN
+1742761984,1742763007,AU
+1742763008,1742764031,SG
+1742764032,1742765823,AU
+1742765824,1742766079,AF
+1742766080,1742767103,NZ
+1742767104,1742768127,TW
+1742768128,1742769663,ID
+1742769664,1742769919,AU
+1742769920,1742770175,JP
+1742770176,1742774271,IN
+1742774272,1742774527,AU
+1742774528,1742774783,NZ
+1742774784,1742775295,AU
+1742775296,1742776319,SG
+1742776320,1742777343,VN
+1742777344,1742779647,ID
+1742779648,1742779903,IN
+1742779904,1742780415,AU
+1742780416,1742782463,IN
+1742782464,1742783487,TW
+1742783488,1742784511,MY
+1742784512,1742786559,TW
+1742786560,1742788095,AU
+1742788096,1742788607,AF
+1742788608,1742789631,IN
+1742789632,1742793727,CN
+1742793728,1742796799,IN
+1742796800,1742797823,HK
+1742797824,1742798847,JP
+1742798848,1742799871,TW
+1742799872,1742800895,NZ
+1742800896,1742801919,HK
+1742801920,1742802943,IN
+1742802944,1742804991,HK
+1742804992,1742807039,IN
+1742807040,1742808063,AU
+1742808064,1742809087,PH
+1742809088,1742810111,IN
+1742810112,1742810623,AU
+1742810624,1742811135,IN
+1742811136,1742812159,PK
+1742812160,1742813183,JP
+1742813184,1742815231,IN
+1742815232,1742815743,SG
+1742815744,1742815999,ID
+1742816000,1742817279,AU
+1742817280,1742818815,IN
+1742818816,1742819327,KH
+1742819328,1742820351,JP
+1742820352,1742821375,CN
+1742821376,1742822399,ID
+1742822400,1742823423,BD
+1742823424,1742823679,AU
+1742823680,1742823935,IN
+1742823936,1742824191,ID
+1742824192,1742826495,IN
+1742826496,1742827519,JP
+1742827520,1742828543,IN
+1742828544,1742830591,JP
+1742830592,1742833663,IN
+1742833664,1742834687,PH
+1742834688,1742835711,AU
+1742835712,1742836735,JP
+1742836736,1742837759,ID
+1742837760,1742838783,JP
+1742838784,1742841855,AU
+1742841856,1742842367,TH
+1742842368,1742843391,ID
+1742843392,1742843647,IN
+1742843648,1742843903,ID
+1742843904,1742845951,IN
+1742845952,1742846463,ID
+1742846464,1742846975,AU
+1742846976,1742847999,IN
+1742848000,1742849023,JP
+1742849024,1742851071,HK
+1742851072,1742852095,IN
+1742852096,1742852607,ID
+1742852608,1742853119,NZ
+1742853120,1742854143,HK
+1742854144,1742855167,AF
+1742855168,1742856191,PK
+1742856192,1742857215,IN
+1742857216,1742858239,BD
+1742858240,1742859263,AU
+1742859264,1742860287,VN
+1742860288,1742860799,AU
+1742860800,1742861055,ID
+1742861056,1742861311,AU
+1742861312,1742862335,NP
+1742862336,1742863359,HK
+1742863360,1742864383,JP
+1742864384,1742866431,IN
+1742866432,1742867199,AU
+1742867200,1742867455,IN
+1742867456,1742868479,PH
+1742868480,1742869503,CN
+1742869504,1742870015,IN
+1742870016,1742870527,VU
+1742870528,1742872575,IN
+1742872576,1742873599,NZ
+1742873600,1742874623,PH
+1742874624,1742875647,CN
+1742875648,1742876671,JP
+1742876672,1742877695,ID
+1742877696,1742877951,IN
+1742877952,1742878207,AU
+1742878208,1742878463,JP
+1742878464,1742878719,ID
+1742878720,1742880767,CN
+1742880768,1742881791,NZ
+1742881792,1742882815,AU
+1742882816,1742884863,KR
+1742884864,1742885887,CN
+1742885888,1742887935,IN
+1742887936,1742888959,HK
+1742888960,1742889983,KR
+1742889984,1742891007,TW
+1742891008,1742892031,AU
+1742892032,1742893055,VN
+1742893056,1742894079,NZ
+1742894080,1742895103,CN
+1742895104,1742895615,SG
+1742895616,1742895871,BD
+1742895872,1742896127,AU
+1742896128,1742897151,HK
+1742897152,1742898175,AU
+1742898176,1742899199,CN
+1742899200,1742900223,ID
+1742900224,1742903295,IN
+1742903296,1742904319,HK
+1742904320,1742905343,CN
+1742905344,1742907391,AU
+1742907392,1742908415,IN
+1742908416,1742908927,SG
+1742908928,1742909183,ID
+1742909184,1742909439,IN
+1742909440,1742910463,AU
+1742910464,1742911487,CN
+1742911488,1742914559,IN
+1742914560,1742915583,CN
+1742915584,1742918655,IN
+1742918656,1742919679,TW
+1742919680,1742920191,PK
+1742920192,1742920447,ID
+1742920448,1742921727,AU
+1742921728,1742923775,IN
+1742923776,1742924799,ID
+1742924800,1742926847,IN
+1742926848,1742927359,AU
+1742927360,1742927615,SG
+1742927616,1742927871,AU
+1742927872,1742928895,VN
+1742928896,1742929919,NZ
+1742929920,1742930175,IN
+1742930176,1742930431,MY
+1742930432,1742930943,PH
+1742930944,1742931967,KH
+1742931968,1742932991,JP
+1742932992,1742933503,SG
+1742933504,1742933759,ID
+1742933760,1742934015,NZ
+1742934016,1742935039,AF
+1742935040,1742938111,AU
+1742938112,1742939135,TW
+1742939136,1742940159,IN
+1742940160,1742941183,JP
+1742941184,1742942207,PH
+1742942208,1742943231,CN
+1742943232,1742945279,IN
+1742945280,1742945791,AU
+1742945792,1742946047,IN
+1742946048,1742947327,AU
+1742947328,1742948351,IN
+1742948352,1742951423,CN
+1742951424,1742953471,HK
+1742953472,1742954495,BD
+1742954496,1742955519,IN
+1742955520,1742956543,CN
+1742956544,1742957567,HK
+1742957568,1742958591,AU
+1742958592,1742959615,VN
+1742959616,1742960639,IN
+1742960640,1742961663,CN
+1742961664,1742962687,IN
+1742962688,1742963711,HK
+1742963712,1742965759,CN
+1742965760,1742966015,MY
+1742966016,1742968319,ID
+1742968320,1742970879,IN
+1742970880,1742971903,JP
+1742971904,1742972927,SG
+1742972928,1742973439,AU
+1742973440,1742973951,NZ
+1742973952,1742975999,SG
+1742976000,1742977023,JP
+1742977024,1742978047,HK
+1742978048,1742979071,JP
+1742979072,1742980095,HK
+1742980096,1742981119,CN
+1742981120,1742982143,NZ
+1742982144,1742983167,CN
+1742983168,1742984191,IN
+1742984192,1742985215,CN
+1742985216,1742986239,VN
+1742986240,1742987263,ID
+1742987264,1742988287,TW
+1742988288,1742989311,CN
+1742989312,1742989567,AU
+1742989568,1742989823,PH
+1742989824,1742990335,AU
+1742990336,1742991359,IN
+1742991360,1742992383,ID
+1742992384,1742993407,LK
+1742993408,1742994431,JP
+1742994432,1742995455,ID
+1742995456,1742996479,BD
+1742996480,1742997503,TH
+1742997504,1742998527,JP
+1742998528,1742999551,CN
+1742999552,1742999807,AU
+1742999808,1743000063,ID
+1743000064,1743000575,IN
+1743000576,1743001599,VN
+1743001600,1743002623,ID
+1743002624,1743003647,CN
+1743003648,1743007999,IN
+1743008000,1743008255,BD
+1743008256,1743008767,IN
+1743008768,1743010815,MY
+1743010816,1743011839,JP
+1743011840,1743012863,HK
+1743012864,1743013887,CN
+1743013888,1743015935,IN
+1743015936,1743016447,ID
+1743016448,1743016703,HK
+1743016704,1743016959,IN
+1743016960,1743017983,KH
+1743017984,1743019007,CN
+1743019008,1743021055,HK
+1743021056,1743021311,SG
+1743021312,1743021567,NZ
+1743021568,1743021823,PH
+1743021824,1743022079,IN
+1743022080,1743023103,AU
+1743023104,1743024127,HK
+1743024128,1743025151,IN
+1743025152,1743026175,ID
+1743026176,1743027199,BD
+1743027200,1743028223,AU
+1743028224,1743029247,CN
+1743029248,1743030271,AU
+1743030272,1743031295,HK
+1743031296,1743035391,IN
+1743035392,1743036415,PK
+1743036416,1743037439,CN
+1743037440,1743038463,AU
+1743038464,1743039487,JP
+1743039488,1743040511,IN
+1743040512,1743041535,CN
+1743041536,1743042559,HK
+1743042560,1743043583,IN
+1743043584,1743044607,AU
+1743044608,1743045119,IN
+1743045120,1743045631,AU
+1743045632,1743046655,JP
+1743046656,1743047679,BD
+1743047680,1743049727,CN
+1743049728,1743050751,AU
+1743050752,1743051775,TW
+1743051776,1743052799,IN
+1743052800,1743053823,JP
+1743053824,1743055871,CN
+1743055872,1743059199,ID
+1743059200,1743059967,IN
+1743059968,1743060991,LA
+1743060992,1743061503,AU
+1743061504,1743062015,IN
+1743062016,1743062271,AU
+1743062272,1743062527,IN
+1743062528,1743063039,AU
+1743063040,1743064063,SG
+1743064064,1743064575,ID
+1743064576,1743065087,IN
+1743065088,1743066111,TW
+1743066112,1743067135,CN
+1743067136,1743068159,IN
+1743068160,1743069183,HK
+1743069184,1743070207,MY
+1743070208,1743071231,IN
+1743071232,1743072255,VN
+1743072256,1743073279,BD
+1743073280,1743074047,AU
+1743074048,1743074303,IN
+1743074304,1743075327,HK
+1743075328,1743076351,MY
+1743076352,1743077375,JP
+1743077376,1743078399,IN
+1743078400,1743079423,JP
+1743079424,1743080959,ID
+1743080960,1743081471,IN
+1743081472,1743083519,BD
+1743083520,1743084543,SG
+1743084544,1743085567,TH
+1743085568,1743085823,SG
+1743085824,1743086079,AU
+1743086080,1743086591,NZ
+1743086592,1743087615,TW
+1743087616,1743088639,PH
+1743088640,1743089663,TH
+1743089664,1743090687,MY
+1743090688,1743091711,HK
+1743091712,1743092735,MN
+1743092736,1743093759,TW
+1743093760,1743094015,SG
+1743094016,1743094271,IN
+1743094272,1743094527,NZ
+1743094528,1743094783,IN
+1743094784,1743095807,TW
+1743095808,1743096831,CN
+1743096832,1743098879,HK
+1743098880,1743099903,CN
+1743099904,1743100927,KH
+1743100928,1743101951,KR
+1743101952,1743103999,ID
+1743104000,1743105023,IN
+1743105024,1743106047,CN
+1743106048,1743107071,MN
+1743107072,1743108095,HK
+1743108096,1743108607,IN
+1743108608,1743108863,SG
+1743108864,1743109119,AU
+1743109120,1743110143,HK
+1743110144,1743111167,VN
+1743111168,1743112191,HK
+1743112192,1743113215,ID
+1743113216,1743114239,SG
+1743114240,1743115263,IN
+1743115264,1743118335,CN
+1743118336,1743119359,IN
+1743119360,1743120383,CN
+1743120384,1743121407,IN
+1743121408,1743123455,CN
+1743123456,1743124479,IN
+1743124480,1743124991,NZ
+1743124992,1743125503,IN
+1743125504,1743126527,JP
+1743126528,1743127551,CN
+1743127552,1743128575,BD
+1743128576,1743129599,JP
+1743129600,1743131647,HK
+1743131648,1743132671,IN
+1743132672,1743133695,JP
+1743133696,1743134719,CN
+1743134720,1743134975,HK
+1743134976,1743135231,IN
+1743135232,1743135743,HK
+1743135744,1743136767,SG
+1743136768,1743138815,CN
+1743138816,1743139327,ID
+1743139328,1743139839,SG
+1743139840,1743140863,IN
+1743140864,1743141887,MY
+1743141888,1743142911,BD
+1743142912,1743143935,BN
+1743143936,1743144959,HK
+1743144960,1743145983,AU
+1743145984,1743147007,NZ
+1743147008,1743147263,AU
+1743147264,1743147519,NZ
+1743147520,1743147775,MN
+1743147776,1743148031,ID
+1743148032,1743149055,IN
+1743149056,1743150079,KR
+1743150080,1743151103,JP
+1743151104,1743152127,CN
+1743152128,1743153151,IN
+1743153152,1743154175,BD
+1743154176,1743155199,HK
+1743155200,1743156223,KR
+1743156224,1743157247,KH
+1743157248,1743158271,HK
+1743158272,1743160319,JP
+1743160320,1743161343,TH
+1743161344,1743163391,HK
+1743163392,1743166463,IN
+1743166464,1743167487,AU
+1743167488,1743168511,HK
+1743168512,1743169535,IN
+1743169536,1743170559,JP
+1743170560,1743171583,KR
+1743171584,1743172607,AU
+1743172608,1743173631,BD
+1743173632,1743174655,AU
+1743174656,1743175679,ID
+1743175680,1743176703,HK
+1743176704,1743179775,CN
+1743179776,1743180799,JP
+1743180800,1743181823,CN
+1743181824,1743182847,HK
+1743182848,1743184895,IN
+1743184896,1743185919,HK
+1743185920,1743186943,SG
+1743186944,1743187967,CN
+1743187968,1743188991,HK
+1743188992,1743190015,JP
+1743190016,1743191039,SG
+1743191040,1743192063,AF
+1743192064,1743195135,IN
+1743195136,1743196159,HK
+1743196160,1743198207,CN
+1743198208,1743198719,JP
+1743198720,1743198975,AU
+1743198976,1743199231,SG
+1743199232,1743200255,HK
+1743200256,1743201279,IN
+1743201280,1743202303,PH
+1743202304,1743204351,IN
+1743204352,1743205375,TW
+1743205376,1743206399,JP
+1743206400,1743207423,HK
+1743207424,1743208447,KH
+1743208448,1743210495,CN
+1743210496,1743211519,JP
+1743211520,1743212543,IN
+1743212544,1743213567,ID
+1743213568,1743214591,HK
+1743214592,1743215615,AU
+1743215616,1743216639,MM
+1743216640,1743217151,SG
+1743217152,1743217663,JP
+1743217664,1743218687,IN
+1743218688,1743219711,HK
+1743219712,1743221759,ID
+1743221760,1743222783,IN
+1743222784,1743223807,ID
+1743223808,1743224831,IN
+1743224832,1743225855,KR
+1743225856,1743226367,IN
+1743226368,1743226623,PH
+1743226624,1743226879,BD
+1743226880,1743227903,AF
+1743227904,1743228927,HK
+1743228928,1743229951,CN
+1743229952,1743230975,VN
+1743230976,1743231999,HK
+1743232000,1743232511,NZ
+1743232512,1743233023,AU
+1743233024,1743234047,BD
+1743234048,1743235071,HK
+1743235072,1743235583,AU
+1743235584,1743236095,ID
+1743236096,1743237119,US
+1743237120,1743238143,BD
+1743238144,1743240191,CN
+1743240192,1743241215,VN
+1743241216,1743242239,JP
+1743242240,1743244287,ID
+1743244288,1743245311,AU
+1743245312,1743248383,IN
+1743248384,1743248895,SG
+1743248896,1743249407,IN
+1743249408,1743250431,MY
+1743250432,1743251455,BD
+1743251456,1743252479,IN
+1743252480,1743253503,JP
+1743253504,1743254527,PH
+1743254528,1743255551,CN
+1743255552,1743256319,SG
+1743256320,1743256575,MY
+1743256576,1743258623,HK
+1743258624,1743259647,CN
+1743259648,1743260671,IN
+1743260672,1743261695,JP
+1743261696,1743262719,HK
+1743262720,1743264767,IN
+1743264768,1743265279,MY
+1743265280,1743265535,ID
+1743265536,1743265791,AU
+1743265792,1743266303,ID
+1743266304,1743267839,HK
+1743267840,1743268863,TH
+1743268864,1743269887,SG
+1743269888,1743270911,MY
+1743270912,1743273983,VN
+1743273984,1743275007,ID
+1743275008,1743276031,HK
+1743276032,1743277055,JP
+1743277056,1743278079,PH
+1743278080,1743279103,LA
+1743279104,1743281151,HK
+1743281152,1743283199,AU
+1743283200,1743284223,BD
+1743284224,1743285247,JP
+1743285248,1743286271,NZ
+1743286272,1743287295,IN
+1743287296,1743288319,AU
+1743288320,1743289343,VN
+1743289344,1743291391,IN
+1743291392,1743292415,AU
+1743292416,1743293439,IN
+1743293440,1743293951,AU
+1743293952,1743294463,PG
+1743294464,1743295487,CN
+1743295488,1743296511,IN
+1743296512,1743297535,NP
+1743297536,1743298303,NZ
+1743298304,1743299583,AU
+1743299584,1743300607,KH
+1743300608,1743301631,AU
+1743301632,1743303679,IN
+1743303680,1743304703,NZ
+1743304704,1743305727,IN
+1743305728,1743306751,JP
+1743306752,1743307775,KH
+1743307776,1743308799,AU
+1743308800,1743309823,JP
+1743309824,1743310335,NZ
+1743310336,1743311871,AU
+1743311872,1743312895,CN
+1743312896,1743313919,AU
+1743313920,1743314943,HK
+1743781888,1743783935,JP
+1743783936,1743784959,IN
+1743784960,1743785983,JP
+1743785984,1743787007,CN
+1743787008,1743789055,JP
+1743789056,1743790079,KR
+1743790080,1743791103,IN
+1743791104,1743792127,CN
+1743792128,1743793151,HK
+1743793152,1743794175,BD
+1743794176,1743795199,KR
+1743795200,1743796223,NZ
+1743796224,1743797247,JP
+1743797248,1743798271,TH
+1743798272,1743800319,HK
+1743800320,1743801343,CN
+1743801344,1743802367,IN
+1743802368,1743803391,HK
+1743803392,1743804415,CN
+1743804416,1743804671,AU
+1743804672,1743805439,IN
+1743805440,1743806463,HK
+1743806464,1743809535,IN
+1743809536,1743810559,ID
+1743810560,1743811583,KH
+1743811584,1743813631,JP
+1743813632,1743814655,CN
+1743814656,1743815679,SG
+1743815680,1743815935,AU
+1743815936,1743816191,NZ
+1743816192,1743816703,AU
+1743816704,1743817727,IN
+1743817728,1743818751,HK
+1743818752,1743819775,IN
+1743819776,1743820799,HK
+1743820800,1743821823,NZ
+1743821824,1743822847,CN
+1743822848,1743825919,IN
+1743825920,1743826943,CN
+1743826944,1743827967,MY
+1743827968,1743828991,HK
+1743828992,1743830015,NZ
+1743830016,1743832063,IN
+1743832064,1743834111,HK
+1743834112,1743838207,IN
+1743838208,1743838463,PK
+1743838464,1743838719,HK
+1743838720,1743841279,AU
+1743841280,1743843327,IN
+1743843328,1743844351,LA
+1743844352,1743845375,CN
+1743845376,1743846399,BD
+1743846400,1743847423,JP
+1743847424,1743848447,AU
+1743848448,1743848959,ID
+1743848960,1743849471,AU
+1743849472,1743850495,IN
+1743850496,1743851519,CN
+1743851520,1743852543,HK
+1743852544,1743853567,IN
+1743853568,1743853823,ID
+1743853824,1743854079,IN
+1743854080,1743854335,AU
+1743854336,1743854591,LK
+1743854592,1743856639,TH
+1743856640,1743857663,NZ
+1743857664,1743859711,IN
+1743859712,1743860735,HK
+1743860736,1743861759,IN
+1743861760,1743862783,NZ
+1743862784,1743863807,SG
+1743863808,1743864831,JP
+1743864832,1743865855,TW
+1743865856,1743866879,CN
+1743866880,1743867903,KR
+1743867904,1743868927,JP
+1743868928,1743870975,NZ
+1743870976,1743873023,CN
+1743873024,1743874047,AU
+1743874048,1743874303,JP
+1743874304,1743875071,SG
+1743875072,1743876095,HK
+1743876096,1743877119,IN
+1743877120,1743878143,KR
+1743878144,1743879167,NZ
+1743879168,1743881215,JP
+1743881216,1743885311,IN
+1743885312,1743885823,AU
+1743885824,1743886207,MY
+1743886208,1743886335,SG
+1743886336,1743887359,JP
+1743887360,1743888383,AF
+1743888384,1743889407,CN
+1743889408,1743890431,HK
+1743890432,1743891455,IN
+1743891456,1743892479,JP
+1743892480,1743892991,AU
+1743892992,1743893503,ID
+1743893504,1743894527,IN
+1743894528,1743896575,CN
+1743896576,1743897599,JP
+1743897600,1743899647,AU
+1743899648,1743900671,ID
+1743900672,1743901695,JP
+1743901696,1743902719,IN
+1743902720,1743903743,AU
+1743903744,1743904767,CN
+1743904768,1743908863,IN
+1743908864,1743909375,AU
+1743909376,1743910911,IN
+1743910912,1743911935,VN
+1743911936,1743912959,AU
+1743912960,1743913983,HK
+1743913984,1743915007,JP
+1743915008,1743916031,CN
+1743916032,1743917055,KH
+1743917056,1743918079,MY
+1743918080,1743919103,BD
+1743919104,1743920127,NZ
+1743920128,1743921151,JP
+1743921152,1743922175,AU
+1743922176,1743923199,NZ
+1743923200,1743924223,KH
+1743924224,1743925247,MN
+1743925248,1743925503,NZ
+1743925504,1743925759,AU
+1743925760,1743926271,AF
+1743926272,1743927295,VN
+1743927296,1743928319,KH
+1743928320,1743929343,IN
+1743929344,1743930367,CN
+1743930368,1743931391,NZ
+1743931392,1743932415,HK
+1743932416,1743933439,IN
+1743933440,1743934463,AU
+1743934464,1743936511,SG
+1743936512,1743937535,AU
+1743937536,1743938559,MM
+1743938560,1743939583,HK
+1743939584,1743940607,ID
+1743940608,1743941631,HK
+1743941632,1743942655,JP
+1743942656,1743944703,IN
+1743944704,1743945215,ID
+1743945216,1743945727,TO
+1743945728,1743947775,CN
+1743947776,1743948799,JP
+1743948800,1743949823,HK
+1743949824,1743950847,TH
+1743950848,1743951359,HK
+1743951360,1743951871,SG
+1743951872,1743953919,IN
+1743953920,1743954943,CN
+1743954944,1743955967,PG
+1743955968,1743959039,CN
+1743959040,1743959551,ID
+1743959552,1743960063,AU
+1743960064,1743964159,IN
+1743964160,1743965183,CN
+1743965184,1743966719,ID
+1743966720,1743967231,AU
+1743967232,1743968255,CN
+1743968256,1743969279,BD
+1743969280,1743970303,CN
+1743970304,1743971327,IN
+1743971328,1743972351,NZ
+1743972352,1743972607,IN
+1743972608,1743972863,ID
+1743972864,1743973119,IN
+1743973120,1743973375,AU
+1743973376,1743974399,IN
+1743974400,1743975423,CN
+1743975424,1743976447,NZ
+1743976448,1743977471,AU
+1743977472,1743978495,JP
+1743978496,1743979519,HK
+1743979520,1743980543,JP
+1743980544,1743981567,IN
+1743981568,1743982591,SG
+1743982592,1743983359,AU
+1743983360,1743983615,IN
+1743983616,1743984639,KR
+1743984640,1743985663,CN
+1743985664,1743994879,IN
+1743994880,1743995903,AU
+1743995904,1743997951,IN
+1743997952,1743999999,BD
+1744000000,1744001023,AU
+1744001024,1744001535,IN
+1744001536,1744001791,NZ
+1744001792,1744002047,AU
+1744002048,1744003071,HK
+1744003072,1744004095,NZ
+1744004096,1744005119,HK
+1744005120,1744006143,VN
+1744006144,1744006655,ID
+1744006656,1744006911,AU
+1744006912,1744009215,IN
+1744009216,1744010239,JP
+1744010240,1744011263,ID
+1744011264,1744012287,HK
+1744012288,1744013311,IN
+1744013312,1744014335,CN
+1744014336,1744015359,BD
+1744015360,1744016383,IN
+1744016384,1744017407,AU
+1744017408,1744018431,JP
+1744018432,1744019455,MY
+1744019456,1744020479,NZ
+1744020480,1744021503,HK
+1744021504,1744022527,TH
+1744022528,1744023551,SG
+1744023552,1744023807,IN
+1744023808,1744024319,ID
+1744024320,1744024575,AF
+1744024576,1744025599,HK
+1744025600,1744026623,IN
+1744026624,1744027647,JP
+1744027648,1744028671,MY
+1744028672,1744029695,JP
+1744029696,1744030719,KR
+1744030720,1744031743,NZ
+1744031744,1744032767,JP
+1744032768,1744033791,MY
+1744033792,1744034815,VN
+1744034816,1744035839,SG
+1744035840,1744039423,IN
+1744039424,1744039679,PH
+1744039680,1744039935,AU
+1744039936,1744040959,JP
+1744040960,1744041471,AU
+1744041472,1744041983,ID
+1744041984,1744043007,TW
+1744043008,1744044031,CN
1744044032,1744045055,HK
1744045056,1744047103,SG
1744047104,1744048127,BD
@@ -76781,7 +33221,8 @@
1744056832,1744057087,NZ
1744057088,1744057343,ID
1744057344,1744058367,HK
-1744058368,1744067583,CN
+1744058368,1744066559,CN
+1744066560,1744067583,HK
1744067584,1744068607,JP
1744068608,1744069631,ID
1744069632,1744070655,SG
@@ -76794,7 +33235,7 @@
1744078848,1744079871,VN
1744079872,1744080895,BD
1744080896,1744081919,AF
-1744081920,1744082943,CN
+1744081920,1744082943,HK
1744082944,1744083967,IN
1744083968,1744084991,HK
1744084992,1744085503,ID
@@ -76816,7 +33257,6 @@
1744101376,1744102399,HK
1744102400,1744103423,FJ
1744103424,1744104447,CN
-1744104448,1744105471,AU
1744105472,1744106751,IN
1744106752,1744107007,ID
1744107008,1744107519,SG
@@ -76825,7 +33265,6 @@
1744109568,1744110591,IN
1744110592,1744111615,JP
1744111616,1744113663,IN
-1744113664,1744114687,JP
1744114688,1744115455,IN
1744115456,1744115711,CN
1744115712,1744116735,MY
@@ -76894,7 +33333,6 @@
1744184576,1744184831,SG
1744184832,1744185087,HK
1744185088,1744185343,JP
-1744185344,1744186367,HK
1744186368,1744187903,IN
1744187904,1744188159,TH
1744188160,1744188415,AU
@@ -76905,7 +33343,7 @@
1744192512,1744194559,JP
1744194560,1744194815,ID
1744194816,1744195071,HK
-1744195072,1744195327,SG
+1744195072,1744195327,AU
1744195328,1744195583,HK
1744195584,1744196607,JP
1744196608,1744197631,IN
@@ -76917,9 +33355,9 @@
1744202240,1744202495,IN
1744202496,1744202751,ID
1744202752,1744203775,PK
-1744203776,1744204356,MY
-1744204357,1744204484,HK
-1744204485,1744204799,MY
+1744203776,1744204287,MY
+1744204288,1744204415,HK
+1744204416,1744204799,MY
1744204800,1744205823,ID
1744205824,1744207871,CN
1744207872,1744208127,AU
@@ -76943,7 +33381,6 @@
1744222208,1744222719,ID
1744222720,1744223231,AU
1744223232,1744224255,TH
-1744224256,1744225279,JP
1744225280,1744226303,IN
1744226304,1744227327,SG
1744227328,1744228351,MY
@@ -76951,7 +33388,6 @@
1744229376,1744230399,IN
1744230400,1744230655,HK
1744230656,1744230911,MY
-1744230912,1744231423,IN
1744231424,1744232447,VN
1744232448,1744233471,IN
1744233472,1744234495,KH
@@ -76964,17 +33400,15 @@
1744238848,1744239615,NZ
1744239616,1744240639,JP
1744240640,1744241663,AU
-1744241664,1744242687,JP
1744242688,1744245503,ID
1744245504,1744245759,AU
1744245760,1744247807,ID
1744247808,1744248831,IN
-1744248832,1744250367,ID
+1744248832,1744249855,ID
1744250368,1744250879,PH
1744250880,1744251903,ID
1744251904,1744252927,BD
1744252928,1744253951,LK
-1744253952,1744254975,JP
1744254976,1744255999,NZ
1744256000,1744257023,TH
1744257024,1744257535,AU
@@ -77030,12 +33464,522 @@
1744303872,1744304127,NZ
1744304128,1744305151,AU
1744305152,1744306175,PH
+1744306176,1744306687,CN
+1744306688,1744308223,AU
+1744308224,1744309247,JP
+1744309248,1744310271,BD
+1744310272,1744312319,AU
+1744312320,1744312575,IN
+1744312576,1744312831,ID
+1744312832,1744313343,AU
+1744313344,1744315391,IN
+1744315392,1744316415,HK
+1744316416,1744317439,KH
+1744317440,1744318463,AU
+1744318464,1744320511,JP
+1744320512,1744321535,ID
+1744321536,1744322559,IN
+1744322560,1744323583,CN
+1744323584,1744324607,JP
+1744324608,1744325631,IN
+1744325632,1744326655,HK
+1744326656,1744328703,IN
+1744328704,1744329727,JP
+1744329728,1744330751,IN
+1744330752,1744331519,AU
+1744331520,1744331775,SG
+1744331776,1744332799,CN
+1744332800,1744333823,KR
+1744333824,1744334847,HK
+1744334848,1744337919,IN
+1744337920,1744338943,CN
+1744338944,1744339967,AU
+1744339968,1744340991,SG
+1744340992,1744343039,HK
+1744343040,1744343551,SG
+1744343552,1744343807,ID
+1744343808,1744344063,AU
+1744344064,1744345087,JP
+1744345088,1744346111,CN
+1744346112,1744347135,IN
+1744347136,1744349183,VN
+1744349184,1744350207,CN
+1744350208,1744351231,IN
+1744351232,1744352255,NZ
+1744352256,1744354303,HK
+1744354304,1744355327,AU
+1744355328,1744356351,CN
+1744356352,1744357375,JP
+1744357376,1744357631,NZ
+1744357632,1744358399,AU
+1744358400,1744359423,BD
+1744359424,1744360447,IN
+1744360448,1744361471,CN
+1744361472,1744362495,ID
+1744363520,1744365567,CN
+1744365568,1744366591,IN
+1744366592,1744367615,BD
+1744367616,1744368639,HK
+1744368640,1744369663,IN
+1744369664,1744369919,ID
+1744369920,1744370431,AU
+1744370432,1744370687,JP
+1744370688,1744371711,HK
+1744371712,1744372735,BD
+1744372736,1744373759,IN
+1744373760,1744374783,JP
+1744374784,1744375807,CN
+1744375808,1744376831,IN
+1744376832,1744377855,VN
+1744377856,1744378879,IN
+1744378880,1744379903,KR
+1744379904,1744380927,HK
+1744380928,1744383999,IN
+1744384000,1744385023,AU
+1744385024,1744386047,CN
+1744386048,1744386303,BD
+1744386304,1744386559,AU
+1744386560,1744387071,ID
+1744387072,1744388095,NZ
+1744388096,1744388607,ID
+1744388608,1744390143,AU
+1744390144,1744391167,HK
+1744391168,1744393215,IN
+1744393216,1744394239,MY
+1744394240,1744395263,IN
+1744395264,1744396287,MY
+1744396288,1744397311,IN
+1744397312,1744398335,VN
+1744398336,1744400383,HK
+1744400384,1744402431,JP
+1744402432,1744403455,IN
+1744403456,1744404479,AU
+1744404480,1744405503,CN
+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,1744418815,IN
+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,1744473343,TW
+1744473344,1744474111,SG
+1744474112,1744481279,IN
+1744481280,1744482303,JP
+1744482304,1744483327,IN
+1744483328,1744484351,CN
+1744484352,1744485119,IN
+1744485120,1744485375,MY
+1744485376,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,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
+1744566272,1744567295,IN
+1744567296,1744568319,JP
+1744568320,1744569343,VN
+1744569344,1744570367,IN
+1744570368,1744570879,JP
+1744570880,1744571391,AU
+1744571392,1744571903,ID
+1744571904,1744572415,AU
+1744572416,1744573439,HK
+1744573440,1744574463,ID
+1744574464,1744575487,IN
+1744575488,1744576511,CN
+1744576512,1744577535,IN
+1744577536,1744578559,CN
+1744578560,1744580607,IN
+1744580608,1744580863,PH
+1744580864,1744581119,SG
+1744581120,1744581631,ID
+1744581632,1744582655,JP
+1744582656,1744583679,AU
+1744583680,1744584703,IN
+1744584704,1744585727,CN
+1744585728,1744586751,TW
+1744586752,1744588799,HK
+1744589824,1744590079,BT
+1744590080,1744590335,ID
+1744590336,1744590591,IN
+1744590592,1744590847,AU
+1744590848,1744591871,HK
+1744591872,1744593919,IN
+1744593920,1744594431,ID
+1744594432,1744594943,AU
+1744594944,1744595967,CN
+1744595968,1744596991,IN
+1744596992,1744598015,SG
+1744598016,1744602111,JP
+1744602112,1744603135,HK
+1744603136,1744604159,JP
+1744604160,1744607231,IN
+1744607232,1744608255,AU
+1744608256,1744609791,IN
+1744609792,1744610047,HK
+1744610048,1744610303,ID
+1744610304,1744612351,IN
+1744612352,1744613375,CN
+1744613376,1744614399,HK
+1744614400,1744615423,JP
+1744615424,1744616447,IN
+1744616448,1744616959,ID
+1744616960,1744617471,AU
+1744617472,1744618495,IN
+1744618496,1744619519,JP
+1744619520,1744620543,SG
+1744620544,1744622591,CN
+1744622592,1744625663,IN
+1744625664,1744626687,SG
+1744626688,1744627711,KR
+1744627712,1744628735,CN
+1744628736,1744629759,IN
+1744629760,1744630783,HK
+1744630784,1744631039,TW
+1744631040,1744631295,IN
+1744631296,1744631551,AU
+1744631552,1744631807,NZ
+1744631808,1744632831,CN
+1744632832,1744633855,VN
+1744633856,1744634879,ID
+1744634880,1744635903,CN
+1744635904,1744636927,HK
+1744636928,1744637951,MY
+1744637952,1744638975,JP
+1744638976,1744639999,IN
+1744640000,1744641023,SG
+1744641024,1744643583,IN
+1744643584,1744644095,BD
+1744644096,1744645119,HK
+1744645120,1744646143,BD
+1744646144,1744647167,PH
+1744647168,1744648191,IN
+1744648192,1744649215,KR
+1744649216,1744650239,CN
+1744650240,1744651263,AU
+1744651264,1744651775,ID
+1744651776,1744652287,IN
+1744652288,1744653311,TH
+1744653312,1744655871,JP
+1744655872,1744656383,ID
+1744656384,1744657407,VN
+1744657408,1744658431,AU
+1744658432,1744659455,HK
+1744659456,1744660479,JP
+1744660480,1744660735,IN
+1744660736,1744660991,MY
+1744660992,1744661503,ID
+1744661504,1744662527,MY
+1744662528,1744663551,ID
+1744663552,1744663807,NZ
+1744663808,1744664063,TH
+1744664064,1744664575,AU
+1744664576,1744665599,HK
+1744665600,1744665855,ID
+1744665856,1744666111,IN
+1744666112,1744666367,AU
+1744666368,1744666623,PH
+1744666624,1744667647,JP
+1744667648,1744668671,TH
+1744668672,1744669695,NZ
+1744669696,1744670719,HK
+1744670720,1744671743,SG
+1744671744,1744673791,IN
+1744673792,1744674815,PK
+1744674816,1744675839,BD
+1744675840,1744676351,SG
+1744676352,1744678911,IN
+1744678912,1744679935,JP
+1744679936,1744680959,KH
+1744680960,1744681983,WS
+1744681984,1744683007,JP
+1744683008,1744685055,AU
+1744685056,1744686079,IN
+1744686080,1744687103,CN
+1744687104,1744688127,IN
+1744688128,1744689151,ID
+1744689152,1744690175,JP
+1744690176,1744692223,CN
+1744692224,1744693247,IN
+1744693248,1744694271,CN
+1744694272,1744696319,HK
+1744696320,1744697343,PH
+1744697344,1744698367,HK
+1744698368,1744699391,KH
+1744699392,1744700415,NZ
+1744700416,1744701439,AU
+1744701440,1744702463,CN
+1744702464,1744704511,VN
+1744704512,1744705535,CN
+1744705536,1744705791,AU
+1744705792,1744706047,ID
+1744706048,1744706303,BD
+1744706304,1744708607,IN
+1744708608,1744709631,PH
+1744709632,1744710655,VN
+1744710656,1744711679,SG
+1744711680,1744712191,ID
+1744712192,1744712447,AU
+1744712448,1744712703,ID
+1744712704,1744714751,IN
+1744714752,1744715775,JP
+1744715776,1744719871,CN
+1744719872,1744720895,IN
+1744720896,1744721919,BD
+1744721920,1744723455,AU
+1744723456,1744723711,BD
+1744723712,1744723967,ID
+1744723968,1744726015,IN
+1744726016,1744727039,ID
+1744727040,1744728063,HK
+1744728064,1744729087,CN
+1744729088,1744730111,HK
+1744730112,1744731135,MN
+1744731136,1744731647,IN
+1744731648,1744732159,ID
+1744732160,1744733183,IN
+1744733184,1744734207,NZ
+1744734208,1744736255,AU
+1744736256,1744737279,JP
+1744737280,1744738303,CN
+1744738304,1744739327,SG
+1744739328,1744740351,NZ
+1744740352,1744741375,IN
+1744741376,1744741887,AU
+1744741888,1744742143,AF
+1744742144,1744742399,BD
+1744742400,1744743423,ID
+1744743424,1744744447,IN
+1744744448,1744745471,CN
+1744745472,1744747519,NP
+1744747520,1744748543,CN
+1744748544,1744749055,JP
+1744749056,1744749567,NZ
+1744749568,1744749823,CN
+1744749824,1744750591,AU
+1744750592,1744752639,IN
+1744752640,1744753663,HK
+1744753664,1744754687,SG
+1744754688,1744755711,VN
+1744755712,1744756735,CN
+1744756736,1744757759,PF
+1744757760,1744758271,NZ
+1744758272,1744758527,IN
+1744758528,1744758783,NZ
+1744758784,1744759807,PF
+1744759808,1744762879,IN
+1744762880,1744763903,PH
+1744763904,1744764927,HK
+1744764928,1744765951,JP
+1744765952,1744766975,PK
+1744766976,1744767999,IN
+1744768000,1744768255,ID
+1744768256,1744768511,TH
+1744768512,1744769023,ID
+1744769024,1744770047,AU
+1744770048,1744771071,JP
+1744771072,1744772095,NZ
+1744772096,1744772351,IN
+1744772352,1744772607,ID
+1744772608,1744772863,BD
+1744772864,1744773119,AU
+1744773120,1744774143,SG
+1744774144,1744776191,IN
+1744776192,1744777215,HK
+1744777216,1744778239,AU
+1744778240,1744778751,ID
+1744778752,1744779263,AU
+1744779264,1744781311,HK
+1744781312,1744782335,JP
+1744782336,1744783359,CN
+1744783360,1744786431,IN
+1744786432,1744787455,VN
+1744787456,1744789503,CN
+1744789504,1744792575,IN
+1744792576,1744793599,PK
+1744793600,1744794623,IN
+1744794624,1744795647,KH
+1744795648,1744797183,ID
+1744797184,1744797439,NP
+1744797440,1744797695,HK
+1744797696,1744798719,PK
+1744798720,1744799743,HK
+1744799744,1744801791,CN
+1744801792,1744802815,IN
+1744802816,1744803839,PK
+1744803840,1744804863,PH
+1744804864,1744805375,ID
+1744805376,1744808447,IN
+1744808448,1744808959,MY
+1744808960,1744809983,MM
+1744809984,1744811007,HK
+1744811008,1744812031,IN
+1744812032,1744813055,CN
+1744813056,1744816127,IN
+1744816128,1744817151,CN
+1744817152,1744818175,IN
+1744818176,1744820223,CN
+1744820224,1744823295,IN
+1744823296,1744824319,CN
+1744824320,1744825343,IN
+1744825344,1744826367,VN
+1744826368,1744827391,ID
+1744827392,1744828415,JP
+1744828416,1744828927,AU
+1744828928,1744829183,SG
+1744829184,1744829439,AU
+1744829440,1744830463,HK
+1744830464,1747191807,US
+1747191808,1747193855,CA
+1747193856,1747198975,US
+1747200000,1747214335,US
+1747215360,1747216383,CA
+1747216384,1747218431,US
+1747219456,1747220479,CA
+1747320832,1753227263,US
+1753231360,1753243647,US
+1753350144,1753415679,US
+1762656256,1763704831,MU
+1763704832,1764753407,EG
+1764753408,1765801983,KE
+1765801984,1766850559,MA
+1766850560,1767899135,EG
+1767899136,1768947711,DZ
+1768947712,1769996287,NG
1769996288,1772093439,MA
1772093440,1772617727,KE
1772617728,1773142015,AO
-1774190592,1774452735,EG
-1774452736,1774714879,NG
-1774714880,1775239167,EG
+1773142016,1773273087,ZA
+1773273088,1773404159,RW
+1773404160,1773666303,EG
+1773666304,1773928447,ZA
+1773928448,1774190591,MA
+1774190592,1775239167,EG
1775239168,1776680959,ZA
1776680960,1776812031,KE
1776812032,1776877567,NA
@@ -77076,380 +34020,267 @@
1784676352,1785200639,KR
1785200640,1785462783,TW
1785462784,1786773503,CN
-1786773504,1790595071,JP
-1790595072,1790597119,US
-1790597120,1790648319,JP
-1790648320,1790649007,CN
-1790649008,1790649008,JP
-1790649009,1790650367,CN
-1790650368,1790967807,JP
+1786773504,1790967807,JP
1790967808,1793064959,IN
1793064960,1794113535,CN
1794113536,1795162111,KR
-1795162112,1795555359,US
-1795555360,1795555455,CA
-1795555456,1795555519,US
-1795555520,1795555583,CA
-1795555584,1795555839,US
+1795162112,1795387903,US
+1795387904,1795388159,CA
+1795388160,1795555839,US
1795555840,1795555855,CA
-1795555856,1795555863,US
-1795555864,1795555903,CA
-1795555904,1795555967,CW
-1795555968,1795556095,CA
-1795556096,1795556103,US
-1795556104,1795556127,CA
-1795556128,1795556175,US
-1795556176,1795556183,CA
-1795556184,1795556191,US
-1795556192,1795556255,CA
-1795556256,1795556287,US
-1795556288,1795556319,QA
-1795556320,1795556351,US
+1795555856,1795556351,US
1795556352,1795556607,CA
-1795556608,1795556623,US
-1795556624,1795556863,CA
-1795556864,1795556927,US
-1795556928,1795556959,CA
-1795556960,1795556991,US
-1795556992,1795557119,CA
-1795557120,1795557135,US
-1795557136,1795557143,CA
-1795557144,1795557151,US
-1795557152,1795557215,CA
-1795557216,1795557247,US
-1795557248,1795557375,CA
+1795556608,1795557375,US
1795557376,1795557631,IN
1795557632,1795559423,US
1795559424,1795559679,AR
-1795559680,1795559743,US
-1795559744,1795559807,AE
-1795559808,1795560447,US
+1795559680,1795560447,US
1795560448,1795560959,CA
-1795560960,1795561215,US
-1795561216,1795562239,CA
+1795560960,1795561471,US
+1795561472,1795562239,CA
1795562240,1795563263,US
1795563264,1795563519,CA
1795563520,1795564031,US
1795564032,1795564543,CA
-1795564544,1795565631,US
-1795565632,1795565719,CA
-1795565720,1795565759,US
-1795565760,1795565791,CA
-1795565792,1795565807,US
-1795565808,1795566143,CA
-1795566144,1795566207,US
-1795566208,1795566231,CA
-1795566232,1795566239,US
-1795566240,1795566303,CA
-1795566304,1795566335,US
+1795564544,1795565823,US
+1795565824,1795566079,CA
+1795566080,1795566335,US
1795566336,1795566591,CA
-1795566592,1795567615,US
-1795567616,1795567663,CA
-1795567664,1795567679,US
-1795567680,1795567695,CA
-1795567696,1795567711,US
-1795567712,1795567735,CA
-1795567736,1795567743,US
-1795567744,1795567775,CA
-1795567776,1795567791,US
-1795567792,1795567807,CA
-1795567808,1795567871,US
-1795567872,1795568639,CA
+1795566592,1795568127,US
+1795568128,1795568639,CA
1795568640,1795569663,US
1795569664,1795570175,CA
-1795570176,1795570463,US
-1795570464,1795570495,CA
-1795570496,1795570655,US
-1795570656,1795570671,CA
-1795570672,1795571199,US
-1795571200,1795571215,CA
-1795571216,1795571223,US
-1795571224,1795571231,CA
-1795571232,1795571327,US
-1795571328,1795571391,CA
-1795571392,1795571423,US
-1795571424,1795571455,CA
-1795571456,1795583999,US
+1795570176,1795583999,US
1795584000,1795588095,SG
-1795588096,1796253695,US
-1796253696,1796253951,CA
-1796253952,1796257919,US
-1796257920,1796258047,PR
-1796258048,1796262911,US
-1796262912,1796263167,PR
-1796263168,1796325375,US
-1796325376,1796325631,PR
-1796325632,1796514244,US
-1796514245,1796514245,US
-1796514246,1803550719,US
-1807745024,1815806207,US
-1815806208,1815806463,US
-1815806464,1815808656,US
-1815808657,1815808657,US
-1815808658,1815822335,US
+1795588096,1795591167,US
+1795591168,1795592191,NL
+1795592192,1795593727,US
+1795593728,1795595775,NL
+1795595776,1795596287,US
+1795596288,1795603455,NL
+1795603456,1805049855,US
+1805049856,1805058047,CA
+1805058048,1805144063,US
+1805144064,1805148159,CA
+1805148160,1805167103,US
+1805167104,1805167359,FR
+1805167360,1805171231,US
+1805171232,1805171239,CA
+1805171240,1805171607,US
+1805171608,1805171615,CA
+1805171616,1805190399,US
+1805190400,1805190655,ES
+1805190656,1805210623,US
+1805210624,1805210879,EG
+1805210880,1805582335,US
+1805582336,1805647871,CA
+1805647872,1805713407,US
+1805713408,1805717503,CA
+1805717504,1805721599,US
+1805721600,1805725695,CA
+1805725696,1805729791,US
+1805729792,1805733887,CA
+1805733888,1805737983,US
+1805737984,1805742079,CA
+1805742080,1805752575,US
+1805752576,1805753087,CA
+1805753088,1805754111,US
+1805754112,1805754367,CA
+1805754368,1806174207,US
+1806174208,1806174463,BR
+1806174464,1806205183,US
+1806205184,1806205439,CA
+1806205440,1806263551,US
+1806263552,1806263807,KR
+1806263808,1806401535,US
+1806401536,1806434303,CA
+1806434304,1806925823,US
+1806925824,1806958591,CA
+1806958592,1807056895,US
+1807056896,1807057151,AU
+1807057152,1807057663,US
+1807057664,1807057919,GB
+1807057920,1807597567,US
+1807597568,1807646719,CA
+1807646720,1807695871,US
+1807695872,1807699967,VI
+1807699968,1815822335,US
1815822336,1815826431,CA
1815826432,1815871487,US
1815871488,1815879679,CA
-1815879680,1815905034,US
-1815905035,1815905038,US
-1815905039,1815912447,US
+1815879680,1815912447,US
1815912448,1815920639,CA
1815920640,1815928831,US
1815928832,1815937023,BS
-1815937024,1815940111,US
-1815940112,1815940127,US
-1815940128,1815950191,US
-1815950192,1815950207,US
-1815950208,1815951247,US
-1815951248,1815951263,US
-1815951264,1815951407,US
-1815951408,1815951423,US
-1815951424,1815957823,US
-1815957824,1815957887,US
-1815957888,1815996159,US
+1815937024,1815961599,US
+1815961600,1815961855,AU
+1815961856,1815962111,ES
+1815962112,1815962623,NL
+1815962624,1815963391,US
+1815963392,1815963647,NL
+1815963648,1815964159,US
+1815964160,1815964415,DK
+1815964416,1815964671,PL
+1815964672,1815965951,US
+1815965952,1815966207,DE
+1815966208,1815966719,US
+1815966720,1815966975,GB
+1815966976,1815967231,US
+1815967232,1815967487,CA
+1815967488,1815968255,US
+1815968256,1815968511,FR
+1815968512,1815968639,US
+1815968640,1815968767,FR
+1815968768,1815969279,US
+1815969280,1815969791,JP
+1815969792,1815987199,US
+1815987200,1815987711,GB
+1815987712,1815988223,NL
+1815988224,1815988735,JP
+1815988736,1815990271,US
+1815990272,1815990783,FR
+1815990784,1815991295,US
+1815991296,1815991807,AU
+1815991808,1815995135,US
+1815995136,1815995391,AU
+1815995392,1815995903,US
+1815995904,1815996159,GB
1815996160,1815996415,CA
-1815996416,1816001791,US
+1815996416,1815997695,US
+1815997696,1815997951,FR
+1815997952,1816001791,US
1816001792,1816002559,NL
-1816002560,1816005799,US
-1816005800,1816005807,LK
-1816005808,1816007167,US
-1816007168,1816007175,CA
-1816007176,1816007663,US
-1816007664,1816007671,CA
-1816007672,1816008959,US
-1816008960,1816009215,IN
-1816009216,1816024319,US
-1816024320,1816024575,CA
-1816024576,1816031343,US
-1816031344,1816031351,CA
-1816031352,1816049983,US
-1816049984,1816050047,CN
-1816050048,1816068095,US
-1816068096,1816070415,CA
-1816070416,1816070423,AD
-1816070424,1816133631,CA
+1816002560,1816068095,US
+1816068096,1816133631,CA
1816133632,1822429183,US
1822429184,1822433279,CA
1822433280,1822445567,US
1822445568,1822451199,CA
1822451200,1822486527,US
-1822486528,1822489111,CA
-1822489112,1822489119,US
-1822489120,1822490623,CA
+1822486528,1822490623,CA
1822490624,1822498815,US
1822498816,1822502911,CA
1822502912,1822519295,US
1822519296,1822523391,CA
1822523392,1822531583,US
1822531584,1822535679,CA
-1822535680,1822552319,US
-1822552320,1822552383,GB
-1822552384,1822552527,US
-1822552528,1822552535,GB
-1822552536,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,1822670847,CA
+1822605312,1822609407,US
+1822609408,1822609535,SG
+1822609536,1822611487,US
+1822611488,1822611551,CA
+1822611552,1822611967,US
+1822611968,1822612479,CA
+1822612480,1822614015,US
+1822614016,1822614271,JP
+1822614272,1822614783,US
+1822614784,1822615039,FR
+1822615040,1822617855,US
+1822617856,1822618367,CA
+1822618368,1822618879,US
+1822618880,1822619391,CA
+1822619392,1822619903,US
+1822619904,1822620415,AU
+1822620416,1822654463,US
+1822654464,1822662143,CA
+1822662144,1822662399,US
+1822662400,1822670847,CA
1822670848,1822949375,US
1822949376,1822982143,CA
-1822982144,1823081975,US
-1823081976,1823081983,ID
-1823081984,1823082199,US
-1823082200,1823082207,TR
-1823082208,1823083583,US
-1823083584,1823083591,QA
-1823083592,1823083823,US
-1823083824,1823083831,QA
-1823083832,1823084767,US
-1823084768,1823084775,QA
-1823084776,1823084799,US
-1823084800,1823084807,TR
-1823084808,1823085855,US
-1823085856,1823085863,PE
-1823085864,1823090775,US
-1823090776,1823090783,EG
-1823090784,1823092511,US
-1823092512,1823092527,IN
-1823092528,1823093063,US
-1823093064,1823093071,QA
-1823093072,1823113215,US
+1822982144,1823113215,US
1823113216,1823129599,CA
1823129600,1823162367,US
1823162368,1823170559,CA
1823170560,1823178751,US
1823178752,1823179007,GB
-1823179008,1823211519,US
+1823179008,1823179263,DE
+1823179264,1823186687,US
+1823186688,1823186943,IN
+1823186944,1823211519,US
1823211520,1823342591,CA
1823342592,1823346687,US
1823346688,1823350783,CA
-1823350784,1823354895,US
-1823354896,1823354903,BE
-1823354904,1823354927,US
-1823354928,1823354935,VE
-1823354936,1823355039,US
-1823355040,1823355047,GB
-1823355048,1823355055,RO
-1823355056,1823355063,US
-1823355064,1823355071,CA
-1823355072,1823355087,SE
-1823355088,1823355095,US
-1823355096,1823355103,SE
-1823355104,1823355119,US
-1823355120,1823355127,VE
-1823355128,1823355135,US
-1823355136,1823355263,GB
-1823355264,1823355503,US
-1823355504,1823355507,GB
-1823355508,1823356655,US
-1823356656,1823356663,IN
-1823356664,1823357727,US
-1823357728,1823357791,CA
-1823357792,1823357887,US
-1823357888,1823357951,CA
-1823357952,1823357983,SE
-1823357984,1823358207,US
-1823358208,1823358239,SE
-1823358240,1823358287,US
-1823358288,1823358303,SE
-1823358304,1823358479,US
-1823358480,1823358487,CA
-1823358488,1823358519,US
-1823358520,1823358527,CA
-1823358528,1823358575,US
-1823358576,1823358583,GB
-1823358584,1823358591,US
-1823358592,1823358599,GB
-1823358600,1823358743,US
-1823358744,1823358751,CA
-1823358752,1823358783,US
-1823358784,1823358791,SE
-1823358792,1823358807,CA
-1823358808,1823358895,US
-1823358896,1823358911,ES
-1823358912,1823358951,US
-1823358952,1823358959,CA
-1823358960,1823359583,US
-1823359584,1823359607,CN
-1823359608,1823359695,US
-1823359696,1823359727,CA
-1823359728,1823361791,US
+1823350784,1823361791,US
1823361792,1823362303,CA
1823362304,1823375359,US
1823375360,1823379455,CA
1823379456,1823383551,US
1823383552,1823387647,CA
-1823387648,1823420511,US
-1823420512,1823420519,EC
-1823420520,1823420583,US
-1823420584,1823420591,MX
-1823420592,1823420623,US
-1823420624,1823420631,KR
-1823420632,1823420639,JP
-1823420640,1823420767,US
-1823420768,1823420783,CA
-1823420784,1823420799,US
+1823387648,1823420799,US
1823420800,1823420815,MX
-1823420816,1823420911,US
-1823420912,1823420927,IE
-1823420928,1823421279,US
-1823421280,1823421311,CA
-1823421312,1823421455,US
+1823420816,1823421455,US
1823421456,1823421463,IL
-1823421464,1823421479,US
-1823421480,1823421487,JM
-1823421488,1823421599,US
-1823421600,1823421607,LU
-1823421608,1823421631,US
-1823421632,1823421639,IT
-1823421640,1823421655,US
-1823421656,1823421663,SG
-1823421664,1823421759,US
-1823421760,1823421791,BR
-1823421792,1823422079,US
-1823422080,1823422111,CA
-1823422112,1823422463,US
-1823422464,1823422655,CA
-1823422656,1823422815,US
-1823422816,1823422847,CA
-1823422848,1823422879,US
-1823422880,1823422911,CA
-1823422912,1823422943,US
-1823422944,1823422975,AE
-1823422976,1823422991,US
-1823422992,1823423007,HK
-1823423008,1823423167,US
-1823423168,1823423183,NL
-1823423184,1823423295,US
-1823423296,1823423359,CA
-1823423360,1823423903,US
-1823423904,1823423935,IL
-1823423936,1823424031,US
-1823424032,1823424047,TW
-1823424048,1823424063,US
-1823424064,1823424079,AU
-1823424080,1823424127,US
-1823424128,1823424159,CA
-1823424160,1823428607,US
+1823421464,1823428607,US
1823428608,1823432703,CA
1823432704,1823440895,US
1823440896,1823444991,CA
-1823444992,1823449247,US
-1823449248,1823449255,MK
-1823449256,1823449311,US
-1823449312,1823449327,BO
-1823449328,1823449551,US
-1823449552,1823449559,VE
-1823449560,1823449567,MK
-1823449568,1823449599,US
-1823449600,1823449607,MK
-1823449608,1823450951,US
-1823450952,1823450959,MK
-1823450960,1823465471,US
+1823444992,1823465471,US
1823465472,1823469567,CA
-1823469568,1823573631,US
-1823573632,1823573759,IN
-1823573760,1823581183,US
-1823581184,1823581311,IN
-1823581312,1823588351,US
-1823588352,1823588479,IN
-1823588480,1823735807,US
+1823469568,1823735807,US
1823735808,1823866879,CA
-1823866880,1826955551,US
-1826955552,1826955559,AD
-1826955560,1828716543,US
-1828716544,1830813695,FR
+1823866880,1828716543,US
+1828716544,1830797007,FR
+1830797008,1830797008,MQ
+1830797009,1830813695,FR
1830813696,1831337983,NL
1831337984,1831862271,DE
1831862272,1832124415,PT
1832124416,1832386559,IT
1832386560,1832517631,DK
-1832517632,1832583167,SE
+1832517632,1832582655,SE
+1832582656,1832582911,DK
+1832582912,1832583167,SE
1832583168,1832648703,DK
1832648704,1832681471,HR
1832681472,1832714239,RU
1832714240,1832747007,HU
1832747008,1832779775,RU
-1832779776,1832782591,FR
-1832782592,1832783103,MQ
+1832779776,1832780031,FR
+1832780032,1832780287,MQ
+1832780288,1832780799,FR
+1832780800,1832781567,MQ
+1832781568,1832782335,FR
+1832782336,1832783103,MQ
1832783104,1832783359,FR
1832783360,1832783615,MQ
-1832783616,1832784127,FR
-1832784128,1832784383,GP
-1832784384,1832784639,FR
-1832784640,1832786431,GP
-1832786432,1832786943,FR
-1832786944,1832787199,GF
-1832787200,1832791807,FR
-1832791808,1832792063,YT
-1832792064,1832792319,FR
-1832792320,1832792575,RE
-1832792576,1832794111,FR
-1832794112,1832796159,GP
-1832796160,1832796415,FR
+1832783616,1832783871,FR
+1832783872,1832784639,GP
+1832784640,1832785151,FR
+1832785152,1832785407,GP
+1832785408,1832785663,FR
+1832785664,1832785919,GP
+1832785920,1832787199,FR
+1832787200,1832787455,GF
+1832787456,1832788735,FR
+1832788736,1832788991,RE
+1832788992,1832789503,FR
+1832789504,1832790015,RE
+1832790016,1832791039,FR
+1832791040,1832791295,YT
+1832791296,1832791551,FR
+1832791552,1832791807,YT
+1832791808,1832794879,FR
+1832794880,1832795135,GP
+1832795136,1832796415,FR
1832796416,1832796671,RE
1832796672,1832796927,FR
-1832796928,1832797183,MQ
-1832797184,1832812543,FR
+1832796928,1832797183,GP
+1832797184,1832798975,FR
+1832798976,1832799743,GP
+1832799744,1832801535,FR
+1832801536,1832802047,MQ
+1832802048,1832802559,FR
+1832802560,1832802815,MQ
+1832802816,1832803839,FR
+1832803840,1832804351,MQ
+1832804352,1832812543,FR
1832812544,1832845311,RU
1832845312,1832878079,BH
1832878080,1832878412,RU
@@ -77500,7 +34331,6 @@
1833267200,1833269247,HU
1833269248,1833271295,FI
1833271296,1833273343,IT
-1833273344,1833275391,EU
1833275392,1833277439,IT
1833277440,1833279487,CH
1833279488,1833281535,AL
@@ -77509,10 +34339,7 @@
1833285632,1833289727,FR
1833289728,1833291775,IT
1833291776,1833293823,CZ
-1833293824,1833294540,BE
-1833294541,1833294550,NL
-1833294551,1833294591,FR
-1833294592,1833295871,BE
+1833293824,1833295871,BE
1833295872,1833297919,NL
1833297920,1833299967,GB
1833299968,1833302015,LU
@@ -77521,49 +34348,20 @@
1833308160,1833310207,FR
1833310208,1833312255,RU
1833312256,1833314303,ES
-1833314304,1833315327,IM
-1833315328,1833315343,GB
-1833315344,1833315583,IM
-1833315584,1833315647,GB
-1833315648,1833315711,IM
-1833315712,1833315799,GB
-1833315800,1833315815,IM
-1833315816,1833315823,GB
-1833315824,1833315903,IM
-1833315904,1833315919,GB
-1833315920,1833315935,IM
-1833315936,1833315951,GB
-1833315952,1833316351,IM
+1833314304,1833316351,IM
1833316352,1833318399,DK
1833318400,1833320447,GB
1833320448,1833320959,AE
1833320960,1833321215,IQ
-1833321216,1833321282,US
-1833321283,1833321283,AE
-1833321284,1833321471,US
-1833321472,1833322495,AE
+1833321216,1833322495,AE
1833322496,1833324543,IT
1833324544,1833326591,NO
-1833326592,1833327103,GB
-1833327104,1833328639,US
+1833326592,1833328639,US
1833328640,1833330687,AT
1833330688,1833332735,UA
1833332736,1833334783,CH
1833334784,1833336831,IT
-1833336832,1833336959,ES
-1833336960,1833337071,FR
-1833337072,1833337983,ES
-1833337984,1833337999,US
-1833338000,1833338015,GB
-1833338016,1833338031,FR
-1833338032,1833338047,IT
-1833338048,1833338063,DE
-1833338064,1833338071,JP
-1833338072,1833338079,DK
-1833338080,1833338087,NL
-1833338088,1833338095,NO
-1833338096,1833338103,SE
-1833338104,1833338879,ES
+1833336832,1833338879,ES
1833338880,1833342975,GB
1833342976,1833345023,CH
1833345024,1833347071,FI
@@ -77572,35 +34370,17 @@
1833351168,1833353215,RU
1833353216,1833355263,DE
1833355264,1833357311,IT
-1833357312,1833357561,IE
-1833357562,1833357567,GB
-1833357568,1833357579,IE
-1833357580,1833357587,GB
-1833357588,1833357647,IE
-1833357648,1833357663,GB
-1833357664,1833357671,IE
-1833357672,1833357675,GB
-1833357676,1833357941,IE
-1833357942,1833358079,GB
-1833358080,1833358619,IE
-1833358620,1833358841,GB
-1833358842,1833359063,IE
-1833359064,1833359071,GB
-1833359072,1833359079,IE
-1833359080,1833359083,GB
-1833359084,1833359087,IE
-1833359088,1833359091,GB
-1833359092,1833359167,IE
-1833359168,1833359359,GB
+1833357312,1833357587,GB
+1833357588,1833357631,IE
+1833357632,1833357823,GB
+1833357824,1833358079,IE
+1833358080,1833359359,GB
1833359360,1833361407,DE
1833361408,1833363455,GB
1833363456,1833365503,RU
1833365504,1833367551,IT
1833367552,1833369599,RU
-1833369600,1833370111,NL
-1833370112,1833370367,BG
-1833370368,1833370623,SE
-1833370624,1833371647,NL
+1833369600,1833371647,NL
1833371648,1833373695,RU
1833373696,1833377791,DE
1833377792,1833379839,KZ
@@ -77609,30 +34389,22 @@
1833383936,1833385983,DK
1833385984,1833388031,SK
1833388032,1833390079,RU
-1833390080,1833390207,GB
-1833390208,1833390335,US
-1833390336,1833391871,GB
-1833391872,1833392127,US
+1833390080,1833392127,GB
1833392128,1833396223,CH
1833396224,1833398271,NL
1833398272,1833400319,DE
1833400320,1833402367,GB
1833402368,1833406463,FR
-1833406464,1833406720,GB
-1833406721,1833406751,NL
-1833406752,1833406848,GB
-1833406849,1833406863,ET
-1833406864,1833406912,GB
-1833406913,1833406919,CA
-1833406920,1833408511,GB
-1833410560,1833412607,PT
+1833406464,1833406719,GB
+1833406720,1833406975,LV
+1833406976,1833408511,GB
+1833410560,1833412607,LU
1833412608,1833414655,GB
1833414656,1833416703,RU
1833416704,1833418751,NL
1833418752,1833422847,RU
1833422848,1833424895,CZ
-1833424896,1833426687,DE
-1833426688,1833426943,GB
+1833424896,1833426943,DE
1833426944,1833428991,KG
1833428992,1833431039,IT
1833431040,1833433087,RU
@@ -77645,26 +34417,10 @@
1833455616,1833459711,NL
1833459712,1833463807,ME
1833463808,1833467903,UA
-1833467904,1833468079,RU
-1833468080,1833468159,CH
-1833468160,1833468287,RU
-1833468288,1833468575,CH
-1833468576,1833468591,RU
-1833468592,1833469439,CH
-1833469440,1833469951,IN
-1833469952,1833471999,CH
-1833472000,1833473023,UA
-1833473024,1833474047,NL
+1833467904,1833471999,CH
+1833472000,1833473023,NL
1833474048,1833475071,UA
-1833475072,1833476095,DE
-1833476096,1833476351,NL
-1833476352,1833476479,GB
-1833476480,1833477375,NL
-1833477376,1833477503,GB
-1833477504,1833477631,DE
-1833477632,1833478911,NL
-1833478912,1833479167,US
-1833479168,1833484287,NL
+1833476096,1833484287,NL
1833484288,1833488383,IR
1833488384,1833492479,GB
1833492480,1833504767,RU
@@ -77675,13 +34431,17 @@
1833521152,1833525247,IT
1833525248,1833529343,LV
1833529344,1833533439,GB
-1833533440,1833537535,RU
+1833535488,1833537535,RU
1833537536,1833541631,AT
-1833541632,1833542655,GB
+1833541632,1833541887,GB
+1833541888,1833542143,IN
+1833542144,1833542655,GB
1833542656,1833542911,IN
1833542912,1833543167,GB
1833543168,1833543423,IN
-1833543424,1833545215,GB
+1833543424,1833544959,GB
+1833544960,1833545087,IN
+1833545088,1833545215,GB
1833545216,1833545471,NL
1833545472,1833545727,GB
1833545728,1833549823,IT
@@ -77690,7 +34450,8 @@
1833558016,1833562111,RO
1833562112,1833566207,PS
1833566208,1833570303,SE
-1833570304,1833573631,GB
+1833570304,1833571583,NL
+1833571584,1833573631,GB
1833573632,1833574399,NL
1833574400,1833578495,YE
1833578496,1833582591,HU
@@ -77698,9 +34459,7 @@
1833586688,1833590783,FR
1833590784,1833594879,PL
1833594880,1833603071,RU
-1833603072,1833606399,SK
-1833606400,1833606655,CZ
-1833606656,1833607167,SK
+1833603072,1833607167,SK
1833607168,1833611263,RU
1833611264,1833615359,NO
1833615360,1833619455,GB
@@ -77710,56 +34469,16 @@
1833631744,1833635839,CZ
1833635840,1833639935,DE
1833639936,1833644031,AM
-1833644032,1833644063,TJ
-1833644064,1833644287,RU
-1833644288,1833644319,TJ
-1833644320,1833648127,RU
+1833644032,1833648127,RU
1833648128,1833652223,LB
-1833652224,1833656511,DE
-1833656512,1833656543,US
-1833656544,1833656639,DE
-1833656640,1833656671,US
-1833656672,1833656991,DE
-1833656992,1833657039,US
-1833657040,1833657151,DE
-1833657152,1833657215,US
-1833657216,1833657303,DE
-1833657304,1833657311,US
-1833657312,1833657791,DE
-1833657792,1833657855,US
-1833657856,1833658047,DE
-1833658048,1833658111,US
-1833658112,1833658303,DE
-1833658304,1833658367,US
-1833658368,1833658959,DE
-1833658960,1833658975,US
-1833658976,1833659103,DE
-1833659104,1833659199,US
-1833659200,1833659231,DE
-1833659232,1833659263,US
-1833659264,1833659423,DE
-1833659424,1833659455,US
-1833659456,1833660351,DE
-1833660352,1833660415,US
+1833652224,1833660415,DE
1833660416,1833664511,IT
1833664512,1833668607,RU
1833668608,1833672703,CZ
1833672704,1833676799,GB
-1833676800,1833677567,DE
-1833677568,1833677599,CH
-1833677600,1833677775,DE
-1833677776,1833677783,FR
-1833677784,1833680895,DE
+1833676800,1833680895,DE
1833680896,1833684991,UA
-1833684992,1833685015,DE
-1833685016,1833685023,LU
-1833685024,1833685067,DE
-1833685068,1833685071,GB
-1833685072,1833685847,DE
-1833685848,1833685851,IE
-1833685852,1833685855,DE
-1833685856,1833685871,IE
-1833685872,1833689087,DE
+1833684992,1833689087,DE
1833689088,1833693183,FI
1833693184,1833697279,RU
1833697280,1833959423,IE
@@ -77790,7 +34509,7 @@
1834964992,1834967039,PL
1834967040,1834971135,RU
1834971136,1834973183,PL
-1834973184,1834975231,RU
+1834973184,1834974207,UA
1834975232,1834977279,IL
1834977280,1834983423,PL
1834983424,1834985471,RU
@@ -77805,11 +34524,7 @@
1835008000,1835532287,RO
1835532288,1835540479,SE
1835540480,1835548671,DE
-1835548672,1835549695,GB
-1835549696,1835550207,ES
-1835550208,1835561351,GB
-1835561352,1835561359,A2
-1835561360,1835565055,GB
+1835548672,1835565055,GB
1835565056,1835573247,AL
1835573248,1835581439,UA
1835581440,1835589631,BG
@@ -77817,23 +34532,10 @@
1835597824,1835606015,HU
1835606016,1835614207,CZ
1835614208,1835622399,RU
-1835622400,1835624959,SE
-1835624960,1835625215,DK
-1835625216,1835625471,SE
-1835625472,1835625599,DK
-1835625600,1835626239,SE
-1835626240,1835626495,DK
-1835626496,1835626751,SE
-1835626752,1835627007,DK
-1835627008,1835627519,SE
-1835627520,1835627647,DK
-1835627648,1835629567,SE
-1835629568,1835630335,DK
-1835630336,1835630591,SE
+1835622400,1835630591,SE
1835630592,1835636735,RU
1835636736,1835638527,LU
-1835638528,1835638783,AM
-1835638784,1835646975,RU
+1835638528,1835646975,RU
1835646976,1835655167,BA
1835655168,1835663359,CY
1835663360,1835671551,UA
@@ -77842,7 +34544,6 @@
1835687936,1835696127,IE
1835696128,1835704319,RU
1835704320,1835709439,NL
-1835709440,1835712511,EU
1835712512,1835720703,RU
1835720704,1835728895,RS
1835728896,1835737087,PL
@@ -77858,7 +34559,7 @@
1835810816,1835819007,UA
1835819008,1835827199,CZ
1835827200,1835835391,GB
-1835835392,1835843583,ES
+1835835392,1835843583,IR
1835843584,1835851775,NO
1835851776,1835859967,UA
1835859968,1835868159,DE
@@ -77866,76 +34567,72 @@
1835876352,1835884543,NO
1835884544,1835892735,NL
1835892736,1835909119,GB
-1835909120,1835913215,RS
+1835909120,1835911167,RS
+1835911168,1835913215,DE
1835913216,1835917311,RU
-1835917312,1835917919,GB
+1835917312,1835917855,GB
+1835917856,1835917863,IT
+1835917864,1835917919,GB
1835917920,1835917935,IT
-1835917936,1835918159,GB
-1835918160,1835918167,IT
-1835918168,1835918439,GB
+1835917936,1835918439,GB
1835918440,1835918447,IT
1835918448,1835918519,GB
1835918520,1835918527,IT
-1835918528,1835918567,GB
-1835918568,1835918583,IT
-1835918584,1835918695,GB
-1835918696,1835918703,IT
-1835918704,1835918735,GB
+1835918528,1835918599,GB
+1835918600,1835918607,IT
+1835918608,1835918711,GB
+1835918712,1835918719,IT
+1835918720,1835918735,GB
1835918736,1835918743,IT
-1835918744,1835919151,GB
+1835918744,1835918823,GB
+1835918824,1835918831,IT
+1835918832,1835918847,GB
+1835918848,1835918855,IT
+1835918856,1835919095,GB
+1835919096,1835919103,IT
+1835919104,1835919127,GB
+1835919128,1835919135,IT
+1835919136,1835919151,GB
1835919152,1835919159,IT
-1835919160,1835919375,GB
-1835919376,1835919383,IT
-1835919384,1835919631,GB
-1835919632,1835919639,IT
-1835919640,1835919751,GB
+1835919160,1835919751,GB
1835919752,1835919759,IT
-1835919760,1835920127,GB
-1835920128,1835920159,PT
-1835920160,1835920167,GB
-1835920168,1835920175,PT
-1835920176,1835920191,GB
-1835920192,1835920199,PT
-1835920200,1835920207,GB
-1835920208,1835920335,PT
-1835920336,1835920343,GB
-1835920344,1835920383,PT
-1835920384,1835920407,GB
-1835920408,1835920415,IT
-1835920416,1835920479,GB
+1835919760,1835920479,GB
1835920480,1835920487,IT
-1835920488,1835920631,GB
-1835920632,1835920639,IT
-1835920640,1835920775,GB
-1835920776,1835920783,IT
-1835920784,1835920863,GB
-1835920864,1835920871,IT
-1835920872,1835921047,GB
+1835920488,1835920727,GB
+1835920728,1835920735,IT
+1835920736,1835920943,GB
+1835920944,1835920951,IT
+1835920952,1835921047,GB
1835921048,1835921055,IT
1835921056,1835921119,GB
1835921120,1835921127,IT
1835921128,1835921343,GB
1835921344,1835921351,IT
-1835921352,1835921407,GB
-1835921408,1835921415,IT
-1835921416,1835921855,GB
-1835921856,1835921863,IT
-1835921864,1835922415,GB
+1835921352,1835921463,GB
+1835921464,1835921471,IT
+1835921472,1835922415,GB
1835922416,1835922423,IT
-1835922424,1835922559,GB
+1835922424,1835922455,GB
+1835922456,1835922463,IT
+1835922464,1835922559,GB
1835922560,1835922567,IT
-1835922568,1835922815,GB
-1835922816,1835922831,IT
-1835922832,1835923863,GB
+1835922568,1835923351,GB
+1835923352,1835923359,IT
+1835923360,1835923487,GB
+1835923488,1835923495,IT
+1835923496,1835923863,GB
1835923864,1835923871,IT
-1835923872,1835923967,GB
-1835923968,1835923975,IT
-1835923976,1835924999,GB
-1835925000,1835925007,IT
-1835925008,1835925503,GB
+1835923872,1835924375,GB
+1835924376,1835924383,IT
+1835924384,1835925503,GB
1835925504,1835933695,LV
-1835933696,1835941887,RU
-1835941888,1835950079,UA
+1835933696,1835942399,RU
+1835942400,1835942655,UA
+1835942656,1835947775,RU
+1835947776,1835948031,UA
+1835948032,1835949055,RU
+1835949056,1835949311,UA
+1835949312,1835950079,RU
1835950080,1835958271,LB
1835958272,1835966463,HU
1835966464,1835974655,IR
@@ -77947,66 +34644,60 @@
1836015616,1836023807,AD
1836023808,1836040191,RU
1836040192,1836048383,GB
-1836048384,1836048467,RS
-1836048468,1836048471,SR
-1836048472,1836056575,RS
+1836048384,1836056575,RS
1836056576,1836580863,IT
1836580864,1836597247,RU
-1836597248,1836597759,LU
-1836597760,1836606463,DE
-1836606464,1836612607,LU
+1836597248,1836598271,LU
+1836598272,1836605439,FR
+1836605440,1836612607,LU
1836612608,1836613631,DE
-1836613632,1836630015,RU
+1836613632,1836626943,RU
+1836626944,1836627967,NL
+1836627968,1836630015,RU
1836630016,1836646399,BG
1836646400,1836679167,RS
-1836679168,1836685823,BG
-1836685824,1836687359,GR
+1836679168,1836686335,BG
+1836686336,1836687359,GR
1836687360,1836711935,BG
1836711936,1836728319,UA
1836728320,1836744703,RS
-1836744704,1836745983,FR
-1836745984,1836746239,RE
-1836746240,1836746495,FR
-1836746496,1836746751,RE
-1836746752,1836747775,FR
-1836747776,1836748543,RE
-1836748544,1836748799,FR
-1836748800,1836749311,RE
-1836749312,1836749567,FR
-1836749568,1836749823,RE
-1836749824,1836750335,FR
-1836750336,1836750591,RE
-1836750592,1836750847,FR
-1836750848,1836751103,RE
-1836751104,1836751359,FR
-1836751360,1836751871,RE
-1836751872,1836752127,FR
-1836752128,1836752383,RE
-1836752384,1836752895,FR
-1836752896,1836753663,RE
-1836753664,1836754175,FR
-1836754176,1836754943,RE
-1836754944,1836755711,FR
-1836755712,1836756479,RE
-1836756480,1836756735,FR
-1836756736,1836756991,RE
+1836744704,1836746495,FR
+1836746496,1836747007,RE
+1836747008,1836747263,FR
+1836747264,1836748031,RE
+1836748032,1836748543,FR
+1836748544,1836748799,RE
+1836748800,1836749055,FR
+1836749056,1836749567,RE
+1836749568,1836750079,FR
+1836750080,1836750591,RE
+1836750592,1836751103,FR
+1836751104,1836751615,RE
+1836751616,1836753151,FR
+1836753152,1836753407,RE
+1836753408,1836753919,FR
+1836753920,1836754687,RE
+1836754688,1836755455,FR
+1836755456,1836755711,RE
+1836755712,1836755967,FR
+1836755968,1836756223,RE
+1836756224,1836756479,FR
+1836756480,1836756991,RE
1836756992,1836758015,FR
-1836758016,1836758783,RE
-1836758784,1836759039,FR
-1836759040,1836759551,RE
-1836759552,1836760063,FR
-1836760064,1836760319,RE
-1836760320,1836760575,FR
-1836760576,1836761087,RE
+1836758016,1836758527,RE
+1836758528,1836758783,FR
+1836758784,1836759039,RE
+1836759040,1836759551,FR
+1836759552,1836760575,RE
+1836760576,1836760831,FR
+1836760832,1836761087,RE
1836761088,1836777471,IR
1836777472,1836793855,SI
1836793856,1836810239,GB
1836810240,1836826623,RU
1836826624,1836843007,CZ
1836843008,1836875775,RU
-1836875776,1836876543,SE
-1836876544,1836876639,RU
-1836876640,1836892159,SE
+1836875776,1836892159,SE
1836892160,1836908543,RU
1836908544,1836924927,IE
1836924928,1836941311,DE
@@ -78025,9 +34716,7 @@
1839202304,1839235071,BG
1839235072,1839267839,IL
1839267840,1839300607,RU
-1839300608,1839330303,BH
-1839330304,1839330559,US
-1839330560,1839333375,BH
+1839300608,1839333375,BH
1839333376,1839366143,UA
1839366144,1839398911,IR
1839398912,1839431679,NO
@@ -78036,24 +34725,7 @@
1839450112,1839452159,NO
1839452160,1839454207,FI
1839454208,1839456255,RU
-1839456256,1839457535,RO
-1839457536,1839457599,VG
-1839457600,1839457695,RO
-1839457696,1839457711,SY
-1839457712,1839458687,RO
-1839458688,1839458719,IN
-1839458720,1839458759,RO
-1839458760,1839458760,RO
-1839458761,1839458863,RO
-1839458864,1839458867,US
-1839458868,1839459327,RO
-1839459328,1839459599,DE
-1839459600,1839459615,RO
-1839459616,1839460031,DE
-1839460032,1839460039,RO
-1839460040,1839460127,DE
-1839460128,1839460159,RO
-1839460160,1839460351,DE
+1839456256,1839460351,RO
1839460352,1839462399,RU
1839462400,1839464447,FI
1839464448,1839497215,CZ
@@ -78063,39 +34735,11 @@
1839595520,1839661055,RO
1839661056,1839693823,UA
1839693824,1839726591,RU
-1839726592,1839753535,IT
-1839753536,1839753543,ES
-1839753544,1839756327,IT
-1839756328,1839756335,FR
-1839756336,1839759359,IT
+1839726592,1839759359,IT
1839759360,1839792127,RU
-1839792128,1839792639,GB
-1839792640,1839792655,US
-1839792656,1839794735,GB
-1839794736,1839794751,CH
-1839794752,1839794847,GB
+1839792128,1839794847,GB
1839794848,1839794879,CH
-1839794880,1839795151,GB
-1839795152,1839795167,US
-1839795168,1839796607,GB
-1839796608,1839796671,US
-1839796672,1839797759,GB
-1839797760,1839798015,GR
-1839798016,1839798271,GB
-1839798272,1839798399,US
-1839798400,1839798527,GB
-1839798528,1839798559,US
-1839798560,1839800959,GB
-1839800960,1839801023,GR
-1839801024,1839802111,GB
-1839802112,1839802239,RO
-1839802240,1839805951,GB
-1839805952,1839806207,US
-1839806208,1839806463,GB
-1839806464,1839811071,US
-1839811072,1839812607,GB
-1839812608,1839814143,US
-1839814144,1839816703,GB
+1839794880,1839816703,GB
1839816704,1839824895,NO
1839824896,1839890431,RU
1839890432,1839923199,GB
@@ -78152,7 +34796,8 @@
1841669120,1841669375,PL
1841669376,1841669631,BE
1841669632,1841670143,UA
-1841670144,1841672191,PL
+1841670144,1841671935,PL
+1841671936,1841672191,GB
1841672192,1841674239,FR
1841674240,1841676287,PL
1841676288,1841680383,RU
@@ -78179,96 +34824,68 @@
1841831936,1841840127,MT
1841840128,1841848319,PL
1841848320,1841856511,RU
-1841856512,1841864769,UA
-1841864770,1841872895,YE
+1841856512,1841864703,UA
+1841864704,1841872895,YE
1841872896,1841876991,NL
1841876992,1841878015,JP
1841878016,1841879039,AU
-1841879040,1841879551,NL
-1841879552,1841879807,US
+1841879040,1841879807,NL
1841879808,1841880063,GB
1841880064,1841881087,JP
1841881088,1841889279,UA
1841889280,1841897471,IR
1841897472,1841905663,RO
1841905664,1841922047,RU
-1841922048,1841930239,NL
+1841922048,1841924351,NL
+1841924352,1841924607,DE
+1841924608,1841925887,NL
+1841925888,1841926143,DE
+1841926144,1841930239,NL
1841930240,1841938431,KG
1841938432,1841946623,RU
1841946624,1841954815,UA
1841954816,1841971199,RU
1841971200,1841979391,CZ
1841979392,1841983487,NL
-1841983488,1841983575,GI
-1841983576,1841983599,US
-1841983600,1841983999,GI
-1841984000,1841984511,IM
-1841984512,1841984575,FR
-1841984576,1841984639,IM
-1841984640,1841985023,FR
-1841985024,1841985087,IE
-1841985088,1841985103,CY
-1841985104,1841985119,IE
-1841985120,1841985135,CY
-1841985136,1841985143,IM
-1841985144,1841985167,GG
-1841985168,1841985535,IM
+1841983488,1841985535,IM
1841985536,1841987583,SI
1841987584,1841995775,DK
1841995776,1842003967,RU
1842003968,1842012159,CH
-1842012160,1842020351,GB
+1842012160,1842017023,GB
+1842017024,1842017279,BE
+1842017280,1842020351,GB
1842020352,1842028543,NO
1842028544,1842036735,CH
-1842036736,1842038783,FR
-1842038784,1842044927,LU
-1842044928,1842047369,GB
-1842047370,1842047371,IN
-1842047372,1842053119,GB
-1842053120,1842061311,ES
-1842061312,1842069503,IR
+1842036736,1842042879,FR
+1842042880,1842044927,LU
+1842044928,1842053119,GB
+1842053120,1842069503,IR
1842069504,1842077695,RU
-1842077696,1842078207,MQ
-1842078208,1842078463,FR
-1842078464,1842078719,MQ
-1842078720,1842079743,FR
-1842079744,1842080511,MQ
-1842080512,1842082047,GP
-1842082048,1842082303,MQ
-1842082304,1842082815,GP
-1842082816,1842085887,MQ
+1842077696,1842077951,FR
+1842077952,1842078207,MQ
+1842078208,1842078719,FR
+1842078720,1842078975,MQ
+1842078976,1842079487,FR
+1842079488,1842080767,MQ
+1842080768,1842081023,GP
+1842081024,1842081279,MQ
+1842081280,1842081535,GP
+1842081536,1842081791,MQ
+1842081792,1842082047,GP
+1842082048,1842082559,MQ
+1842082560,1842082815,GP
+1842082816,1842083071,MQ
+1842083072,1842083583,GP
+1842083584,1842084607,MQ
+1842084608,1842084863,GP
+1842084864,1842085887,MQ
1842085888,1842118655,GB
1842118656,1842151423,FI
1842151424,1842153471,FR
-1842153472,1842153567,NO
-1842153568,1842153575,GB
-1842153576,1842153663,NO
-1842153664,1842153679,NL
-1842153680,1842153687,NO
-1842153688,1842153695,NL
-1842153696,1842153887,NO
-1842153888,1842153919,DE
-1842153920,1842153951,NE
-1842153952,1842153983,NO
-1842153984,1842154047,US
-1842154048,1842154055,NO
-1842154056,1842154079,US
-1842154080,1842154111,NO
-1842154112,1842154115,US
-1842154116,1842154119,NO
-1842154120,1842154143,US
-1842154144,1842154239,NO
-1842154240,1842154247,HK
-1842154248,1842154255,SG
-1842154256,1842154271,NO
-1842154272,1842154279,CN
-1842154280,1842154367,NO
-1842154368,1842154431,US
-1842154432,1842154447,SG
-1842154448,1842154495,NO
-1842154496,1842155007,US
-1842155008,1842155263,AU
-1842155264,1842155519,SG
+1842153472,1842154271,NO
+1842154272,1842154303,HK
+1842154304,1842155519,NO
1842155520,1842157567,IT
1842157568,1842159615,AE
1842159616,1842161663,BA
@@ -78281,11 +34898,7 @@
1842173952,1842175999,RO
1842176000,1842178047,FI
1842178048,1842180095,IT
-1842180096,1842180607,IQ
-1842180608,1842180791,US
-1842180792,1842180799,IQ
-1842180800,1842180863,US
-1842180864,1842182143,IQ
+1842180096,1842182143,IQ
1842182144,1842184191,LV
1842184192,1842186239,DE
1842186240,1842188287,ES
@@ -78301,23 +34914,19 @@
1842206720,1842208767,SE
1842208768,1842210815,GB
1842210816,1842212863,LT
-1842212864,1842213631,CZ
-1842213632,1842213887,SK
-1842213888,1842214911,CZ
+1842212864,1842214911,CZ
1842214912,1842216959,RU
1842216960,1842225151,RO
1842225152,1842233343,UA
1842233344,1842241535,RO
1842241536,1842249727,RS
-1842249728,1842258162,RU
-1842258163,1842266111,EU
+1842249728,1842257919,RU
1842266112,1842274303,PL
1842274304,1842282495,RO
1842282496,1842286591,RU
1842286592,1842290687,GB
1842290688,1842294783,RS
1842294784,1842298879,PL
-1842298880,1842302975,UA
1842302976,1842307071,RU
1842307072,1842311167,PL
1842311168,1842315263,UA
@@ -78336,7 +34945,9 @@
1843478528,1843494911,SE
1843494912,1843511295,IR
1843511296,1843527679,RU
-1843527680,1843544063,IL
+1843527680,1843539199,IL
+1843539200,1843539455,FR
+1843539456,1843544063,IL
1843544064,1843560447,RU
1843560448,1843576831,DE
1843576832,1843593215,RU
@@ -78356,16 +34967,7 @@
1843789824,1843806207,SK
1843806208,1843822591,IR
1843822592,1843838975,RU
-1843838976,1843841535,DE
-1843841536,1843841791,CH
-1843841792,1843842047,AU
-1843842048,1843847743,DE
-1843847744,1843847759,GR
-1843847760,1843849215,DE
-1843849216,1843850239,GB
-1843850240,1843852799,DE
-1843852800,1843853055,DE
-1843853056,1843855359,DE
+1843838976,1843855359,DE
1843855360,1843871743,PL
1843871744,1843888127,GB
1843888128,1843904511,CZ
@@ -78399,20 +35001,13 @@
1843978240,1843980287,NL
1843980288,1843982335,FR
1843982336,1843984383,PL
-1843984384,1843985407,RU
-1843985408,1843985663,UA
-1843985664,1843986431,RU
+1843984384,1843986431,RU
1843986432,1843988479,NO
-1843988480,1843988527,GB
-1843988528,1843988528,EU
-1843988529,1843990527,GB
+1843988480,1843990527,GB
1843990528,1843992575,LB
1843992576,1843994623,AT
1843994624,1844000767,GB
-1844000768,1844001791,NO
-1844001792,1844002303,NL
-1844002304,1844002559,NO
-1844002560,1844002815,NL
+1844000768,1844002815,NO
1844002816,1844006911,CZ
1844006912,1844008959,SM
1844008960,1844011007,PL
@@ -78423,11 +35018,8 @@
1844021248,1844027391,DE
1844027392,1844029439,CZ
1844029440,1844031487,RU
-1844031488,1844031999,EU
+1844031744,1844031999,AT
1844032000,1844032255,GB
-1844032256,1844033023,CH
-1844033024,1844033271,EU
-1844033272,1844033535,CH
1844033536,1844035583,RS
1844035584,1844037631,MD
1844037632,1844041727,RU
@@ -78440,34 +35032,15 @@
1844058112,1844062207,RU
1844062208,1844064255,CZ
1844064256,1844068351,IT
-1844068352,1844068479,FR
-1844068480,1844070399,ES
-1844070400,1844071423,GB
-1844071424,1844072447,DE
+1844068352,1844070399,ES
+1844070400,1844072447,LU
1844072448,1844076543,ES
-1844076544,1844076575,GB
-1844076576,1844076639,IE
-1844076640,1844076655,GB
-1844076656,1844076775,IE
-1844076776,1844076783,GB
-1844076784,1844076791,IE
-1844076792,1844076799,GB
-1844076800,1844077463,IE
-1844077464,1844077471,GB
-1844077472,1844077503,IE
-1844077504,1844077567,GB
-1844077568,1844077663,IE
-1844077664,1844077695,GB
-1844077696,1844077727,IE
-1844077728,1844078559,GB
-1844078560,1844078575,IE
-1844078576,1844078591,GB
-1844078592,1844080127,DE
-1844080128,1844080639,PL
+1844076544,1844077055,GB
+1844077056,1844077567,IE
+1844077568,1844078591,GB
+1844078592,1844080639,DE
1844080640,1844082687,GE
-1844082688,1844084055,DE
-1844084056,1844084071,CH
-1844084072,1844084735,DE
+1844082688,1844084735,DE
1844084736,1844086783,RU
1844086784,1844088831,IT
1844088832,1844090879,AT
@@ -78477,9 +35050,7 @@
1844099072,1844101119,DE
1844101120,1844105215,GB
1844105216,1844107263,ES
-1844107264,1844107807,DE
-1844107808,1844107823,CH
-1844107824,1844109311,DE
+1844107264,1844109311,DE
1844109312,1844109567,US
1844109568,1844111359,GB
1844111360,1844113407,AL
@@ -78491,20 +35062,8 @@
1844123648,1844125695,RU
1844125696,1844127743,NL
1844127744,1844129791,DE
-1844129792,1844131583,NL
-1844131584,1844131647,SC
-1844131648,1844131711,NL
-1844131712,1844131775,RU
-1844131776,1844131807,US
-1844131808,1844131817,NL
-1844131818,1844131839,US
-1844131840,1844131849,DE
-1844131850,1844131865,AT
-1844131866,1844132159,DE
-1844132160,1844132167,AT
-1844132168,1844132451,DE
-1844132452,1844132459,AT
-1844132460,1844133887,DE
+1844129792,1844131839,NL
+1844131840,1844133887,DE
1844133888,1844135935,LT
1844135936,1844137983,NL
1844137984,1844140031,FR
@@ -78514,79 +35073,39 @@
1844146176,1844148223,NO
1844148224,1844150271,GB
1844150272,1844152319,ES
-1844152320,1844154355,DE
-1844154356,1844154367,NL
-1844154368,1844155903,GB
-1844155904,1844156159,US
-1844156160,1844156415,GB
+1844152320,1844154367,DE
+1844154368,1844156415,GB
1844156416,1844158463,IT
1844158464,1844160511,RU
1844160512,1844162559,SE
1844162560,1844164607,CZ
1844164608,1844166655,RU
1844166656,1844168703,AZ
-1844168704,1844169471,SE
-1844169472,1844169487,AF
-1844169488,1844169519,US
-1844169520,1844169567,SE
+1844168704,1844169503,GI
+1844169504,1844169519,US
+1844169520,1844169567,GI
1844169568,1844169583,US
-1844169584,1844169599,SE
+1844169584,1844169599,GI
1844169600,1844169647,US
-1844169648,1844169655,AF
-1844169656,1844169663,ER
-1844169664,1844169679,US
-1844169680,1844169687,ZM
-1844169688,1844169695,IQ
-1844169696,1844169703,KZ
-1844169704,1844169707,ZA
-1844169708,1844169727,SE
-1844169728,1844169767,DE
-1844169768,1844169951,US
-1844169952,1844169983,DE
-1844169984,1844170239,US
-1844170240,1844170255,AF
-1844170256,1844170263,IQ
-1844170264,1844170303,AF
-1844170304,1844170311,GH
-1844170312,1844170319,DE
-1844170320,1844170327,IQ
-1844170328,1844170751,DE
+1844169648,1844169727,GI
+1844169728,1844170751,DE
1844170752,1844174847,RU
-1844174848,1844178457,DE
-1844178458,1844178458,FR
-1844178459,1844178943,DE
+1844174848,1844178943,DE
1844178944,1844180991,EE
-1844180992,1844181488,TR
-1844181489,1844181503,DE
-1844181504,1844181608,TR
-1844181609,1844181616,CA
-1844181617,1844181824,TR
-1844181825,1844181839,GB
-1844181840,1844181952,TR
-1844181953,1844181958,GB
-1844181959,1844181984,TR
-1844181985,1844181990,GB
-1844181991,1844183039,TR
-1844183040,1844191231,IT
+1844180992,1844183039,TR
+1844183040,1844185087,IT
+1844185088,1844187135,CH
+1844187136,1844191231,IT
1844191232,1844195327,AL
1844199424,1844203519,RU
-1844203520,1844205823,NL
-1844205824,1844205888,VG
-1844205889,1844207615,NL
+1844203520,1844207615,NL
1844207616,1844211711,RU
1844211712,1844215807,SK
1844215808,1844219903,BE
-1844219904,1844220159,KE
-1844220160,1844223999,A2
+1844219904,1844223999,DE
1844224000,1844228095,GB
-1844228096,1844228479,DK
-1844228480,1844228511,SE
-1844228512,1844230159,DK
-1844230160,1844230175,SE
-1844230176,1844232191,DK
-1844232192,1844235775,ES
-1844235776,1844236031,GB
-1844236032,1844236287,FR
+1844228096,1844232191,DK
+1844232192,1844236287,ES
1844236288,1844252671,RU
1844252672,1844256767,GB
1844256768,1844260863,BA
@@ -78605,26 +35124,11 @@
1844310016,1844318207,FR
1844318208,1844322303,IT
1844322304,1844326399,CZ
-1844326400,1844330239,DK
-1844330240,1844330303,LU
-1844330304,1844330423,DK
-1844330424,1844330439,LU
-1844330440,1844330495,DK
+1844326400,1844330495,DK
1844330496,1844334591,GB
1844334592,1844342783,RU
1844342784,1844346879,IT
-1844346880,1844347007,US
-1844347008,1844347135,GB
-1844347136,1844347263,BE
-1844347264,1844347903,GB
-1844347904,1844348159,US
-1844348160,1844348671,GB
-1844348672,1844348927,BE
-1844348928,1844349439,GB
-1844349440,1844349951,US
-1844349952,1844350207,HK
-1844350208,1844350719,CA
-1844350720,1844350975,GB
+1844346880,1844350975,GB
1844350976,1844355071,SY
1844355072,1844359167,KZ
1844359168,1844363263,IR
@@ -78639,11 +35143,7 @@
1844396032,1844400127,CZ
1844400128,1844408319,GB
1844408320,1844412415,FR
-1844412416,1844414207,RU
-1844414208,1844414463,SE
-1844414464,1844414719,NL
-1844414720,1844414975,US
-1844414976,1844416511,RU
+1844412416,1844416511,RU
1844416512,1844420607,FR
1844420608,1844424703,DE
1844424704,1844428799,SI
@@ -78694,7 +35194,9 @@
1847735296,1847736319,AU
1847736320,1847738367,HK
1847738368,1847754751,KR
-1847754752,1847783423,TH
+1847754752,1847780351,TH
+1847780352,1847780607,CN
+1847780608,1847783423,TH
1847783424,1847787519,US
1847787520,1847803903,KR
1847803904,1847807999,VN
@@ -78824,10 +35326,13 @@
1860736000,1860737023,AU
1860737024,1860739071,JP
1860739072,1860743167,PH
-1860743168,1860744191,AU
+1860743168,1860743333,AU
+1860743334,1860743334,HK
+1860743335,1860743462,AU
+1860743463,1860743464,JP
+1860743465,1860744191,AU
1860744192,1860745215,IN
1860745216,1860746239,AU
-1860746240,1860747263,PK
1860747264,1860759551,JP
1860759552,1860761599,AU
1860761600,1860763647,IN
@@ -78843,7 +35348,9 @@
1866588160,1866592255,NZ
1866592256,1866596351,VN
1866596352,1866661887,CN
-1866661888,1866670079,AU
+1866661888,1866666656,AU
+1866666657,1866666657,NZ
+1866666658,1866670079,AU
1866670080,1866674175,MY
1866674176,1866678271,TW
1866678272,1866686463,ID
@@ -78883,7 +35390,7 @@
1868300288,1868333055,IN
1868333056,1868341247,PK
1868341248,1868345343,ID
-1868345344,1868346367,GU
+1868345344,1868346367,AU
1868346368,1868347391,TH
1868347392,1868348415,AU
1868348416,1868349439,KR
@@ -78912,11 +35419,7 @@
1870118912,1870135295,IN
1870135296,1870462975,CN
1870462976,1870479359,JP
-1870479360,1870480895,PH
-1870480896,1870481151,US
-1870481152,1870487551,PH
-1870487552,1870487807,US
-1870487808,1870495743,PH
+1870479360,1870495743,PH
1870495744,1870497791,TW
1870497792,1870499839,IN
1870499840,1870501887,JP
@@ -79025,7 +35528,9 @@
1888030720,1888034815,HK
1888034816,1888038911,JP
1888038912,1888040959,CN
-1888040960,1888059391,JP
+1888040960,1888041471,JP
+1888041472,1888041727,NZ
+1888041728,1888059391,JP
1888059392,1888063487,VN
1888063488,1888067583,JP
1888067584,1888071679,MY
@@ -79105,13 +35610,16 @@
1897250816,1897259007,HK
1897259008,1897260031,NZ
1897260032,1897261055,BD
-1897261056,1897263103,JP
1897263104,1897265151,TH
1897265152,1897267199,JP
1897267200,1897365503,VN
1897365504,1897398271,MY
1897398272,1897660415,CN
-1897660416,1897725951,HK
+1897660416,1897663487,HK
+1897663488,1897663743,GB
+1897663744,1897697279,HK
+1897697280,1897697535,AU
+1897697536,1897725951,HK
1897725952,1897730047,JP
1897730048,1897734143,AU
1897734144,1897738239,HK
@@ -79121,7 +35629,10 @@
1897758720,1897779199,KR
1897779200,1897781247,AU
1897781248,1897783295,JP
-1897783296,1897787391,SG
+1897783296,1897784319,SG
+1897784320,1897784831,HK
+1897784832,1897785343,KR
+1897785344,1897787391,SG
1897787392,1897789439,AU
1897789440,1897790463,KH
1897790464,1897791487,HK
@@ -79160,7 +35671,9 @@
1899850752,1899851775,VN
1899851776,1899855871,JP
1899855872,1899888639,TW
-1899888640,1904345087,CN
+1899888640,1902210559,CN
+1902210560,1902210815,MO
+1902210816,1904345087,CN
1904345088,1904361471,JP
1904361472,1904369663,KR
1904369664,1904375807,CN
@@ -79168,9 +35681,7 @@
1904376832,1904377855,KH
1904377856,1904476159,KR
1904476160,1905262591,CN
-1905262592,1905429765,JP
-1905429766,1905429766,AP
-1905429767,1906311167,JP
+1905262592,1906311167,JP
1906311168,1908408319,VN
1908408320,1908424703,AU
1908424704,1908441087,KR
@@ -79190,9 +35701,7 @@
1908756480,1908760575,KR
1908760576,1908761599,NZ
1908761600,1908762623,CN
-1908762624,1908762879,IN
-1908762880,1908763135,HK
-1908763136,1908763647,IN
+1908762624,1908763647,IN
1908763648,1908764671,ID
1908764672,1908768767,AU
1908768768,1908801535,JP
@@ -79203,14 +35712,12 @@
1909161984,1909194751,PK
1909194752,1909456895,CN
1909456896,1909473279,JP
-1909473280,1909479939,HK
-1909479940,1909479940,US
-1909479941,1909481471,HK
+1909473280,1909481471,HK
1909481472,1909587967,CN
1909587968,1909719039,MY
1909719040,1909735423,CN
1909735424,1909736713,US
-1909736714,1909736714,AP
+1909736714,1909736714,IN
1909736715,1909743615,US
1909743616,1909744639,AU
1909744640,1909745663,CN
@@ -79236,7 +35743,6 @@
1914437632,1914503167,CN
1914503168,1914552319,KR
1914552320,1914560511,SG
-1914560512,1914568703,KH
1914568704,1914576895,KR
1914576896,1914580991,TW
1914580992,1914585087,KR
@@ -79292,7 +35798,9 @@
1919909888,1919918079,AU
1919918080,1919926271,CN
1919926272,1919942655,KR
-1919942656,1920069631,CN
+1919942656,1920006847,CN
+1920006848,1920006911,HK
+1920006912,1920069631,CN
1920069632,1920073727,HK
1920073728,1920466943,CN
1920466944,1920991231,ID
@@ -79347,9 +35855,7 @@
1921945600,1921949695,HK
1921949696,1921953791,AU
1921953792,1921957887,JP
-1921957888,1921964031,GU
-1921964032,1921964287,US
-1921964288,1921974271,GU
+1921957888,1921974271,GU
1921974272,1922039807,IN
1922039808,1925447679,JP
1925447680,1925578751,CN
@@ -79371,7 +35877,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
@@ -79387,9 +35893,7 @@
1932156928,1932161023,JP
1932161024,1932163071,TW
1932163072,1932165119,PH
-1932165120,1932182523,SG
-1932182524,1932182524,AP
-1932182525,1932197887,SG
+1932165120,1932197887,SG
1932197888,1932263423,TW
1932263424,1933574143,CN
1933574144,1933639679,AU
@@ -79397,9 +35901,7 @@
1933705216,1933770751,SG
1933770752,1933836287,TH
1933836288,1933901823,KR
-1933901824,1933909759,AU
-1933909760,1933910015,AU
-1933910016,1933918207,AU
+1933901824,1933918207,AU
1933918208,1933922303,CN
1933922304,1933926399,IN
1933926400,1933934591,KR
@@ -79445,9 +35947,7 @@
1937518592,1937522687,JP
1937522688,1937530879,ID
1937530880,1937532927,US
-1937532928,1937534975,IN
-1937534976,1937535487,US
-1937535488,1937535999,IN
+1937532928,1937535999,IN
1937536000,1937536511,GB
1937536512,1937539071,IN
1937539072,1937637375,JP
@@ -79488,9 +35988,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
@@ -79525,7 +36023,11 @@
1946163200,1946165247,CN
1946165248,1946173439,PK
1946173440,1946173695,PG
-1946173696,1946181631,SG
+1946173696,1946176511,SG
+1946176512,1946176767,PH
+1946176768,1946178047,SG
+1946178048,1946178303,HK
+1946178304,1946181631,SG
1946181632,1946189823,MY
1946189824,1946222591,JP
1946222592,1946943487,CN
@@ -79551,7 +36053,9 @@
1949448192,1949448703,HK
1949448704,1949448959,AU
1949448960,1949449215,IN
-1949449216,1949450239,HK
+1949449216,1949449471,SG
+1949449472,1949449727,JP
+1949449728,1949450239,HK
1949450240,1949466623,IN
1949466624,1949499391,PH
1949499392,1949564927,SG
@@ -79567,8 +36071,7 @@
1950089216,1950351359,CN
1950351360,1950482431,JP
1950482432,1950515199,CN
-1950515200,1950517247,US
-1950517248,1950523391,IN
+1950515200,1950523391,IN
1950523392,1950527487,AU
1950527488,1950531583,JP
1950531584,1950533631,NP
@@ -79580,10 +36083,7 @@
1950545920,1950547967,PH
1950547968,1950580735,KR
1950580736,1950613503,JP
-1950613504,1950617599,GU
-1950617600,1950619135,US
-1950619136,1950619391,GU
-1950619392,1950621695,US
+1950613504,1950621695,GU
1950621696,1950629887,KR
1950629888,1950646271,IN
1950646272,1950648319,VN
@@ -79659,7 +36159,9 @@
1958850560,1958852607,CN
1958852608,1958853631,AU
1958853632,1958854655,ID
-1958854656,1958862847,AU
+1958854656,1958858751,AU
+1958858752,1958860799,NZ
+1958860800,1958862847,BD
1958862848,1958871039,JP
1958871040,1959067647,CN
1959067648,1959100415,MY
@@ -79670,7 +36172,9 @@
1959110656,1959112703,JP
1959112704,1959113215,HK
1959113216,1959113471,IN
-1959113472,1959116799,HK
+1959113472,1959114751,HK
+1959114752,1959115007,IN
+1959115008,1959116799,HK
1959116800,1959133183,SG
1959133184,1959239679,CN
1959239680,1959241727,KR
@@ -79682,7 +36186,8 @@
1959260160,1959264255,JP
1959264256,1959395327,KR
1959395328,1959526399,IN
-1959526400,1960050687,CN
+1959526400,1959657471,CN
+1959723008,1960050687,CN
1960050688,1960058879,KR
1960058880,1960067071,VN
1960067072,1960069119,AU
@@ -79705,9 +36210,7 @@
1960187904,1960189951,IN
1960189952,1960202239,CN
1960202240,1960206335,JP
-1960206336,1960212582,SG
-1960212583,1960212583,AP
-1960212584,1960214527,SG
+1960206336,1960214527,SG
1960214528,1960574975,CN
1960574976,1960837119,JP
1960837120,1961885695,CN
@@ -79723,7 +36226,6 @@
1962672128,1962803199,CN
1962803200,1962827775,JP
1962827776,1962829823,ID
-1962829824,1962831871,JP
1962831872,1962835967,ID
1962835968,1962868735,CN
1962868736,1962885119,AU
@@ -79742,9 +36244,17 @@
1964138496,1964146687,HK
1964146688,1964171263,JP
1964171264,1964173311,BD
-1964173312,1964173776,AP
+1964173312,1964173727,AU
+1964173728,1964173743,JP
+1964173744,1964173776,AU
1964173777,1964173777,JP
-1964173778,1964175359,AP
+1964173778,1964173823,AU
+1964173824,1964174079,HK
+1964174080,1964174335,AU
+1964174336,1964174495,SG
+1964174496,1964174511,SN
+1964174512,1964174591,SG
+1964174592,1964175359,AU
1964175360,1964179455,GB
1964179456,1964244991,TW
1964244992,1964249087,AU
@@ -79821,16 +36331,12 @@
1969727488,1969729535,ID
1969729536,1969733631,JP
1969733632,1969750015,VN
-1969750016,1969782783,JP
-1969782784,1969783807,US
-1969783808,1969790975,JP
+1969750016,1969790975,JP
1969790976,1969793023,AU
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
@@ -79859,19 +36365,16 @@
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
1970995200,1971060735,KR
1971060736,1975517183,CN
-1975517184,1976195839,IN
-1976195840,1976196095,US
-1976196096,1979711487,IN
+1975517184,1979711487,IN
1979711488,1981284351,JP
-1981284352,1981546494,CN
-1981546495,1981546495,SG
+1981284352,1981480959,CN
+1981480960,1981546495,JP
1981546496,1981808639,CN
1981808640,1983905791,KR
1983905792,1984102399,CN
@@ -79894,9 +36397,7 @@
1985347584,1985478655,JP
1985478656,1985480703,IN
1985480704,1985482751,PH
-1985482752,1985484799,AU
-1985484800,1985485055,AU
-1985485056,1985486847,AU
+1985482752,1985486847,AU
1985486848,1985609727,CN
1985609728,1985675263,NZ
1985675264,1985708031,KR
@@ -79942,9 +36443,7 @@
1988034560,1988067327,AU
1988067328,1988075519,CN
1988075520,1988083711,AU
-1988083712,1988158975,KR
-1988158976,1988159231,US
-1988159232,1988362239,KR
+1988083712,1988362239,KR
1988362240,1988624383,CN
1988624384,1988755455,ID
1988755456,1988861951,AU
@@ -79967,15 +36466,11 @@
1991376896,1991442431,CN
1991442432,1991499775,BD
1991499776,1991507967,NC
-1991507968,1991835647,CN
-1991835648,1991852031,SG
-1991852032,1991868415,CN
-1991868416,1991901183,SG
-1991901184,1992097791,CN
-1992097792,1992163327,HK
+1991507968,1992097791,CN
+1992097792,1992163327,SG
1992163328,1992818687,CN
-1992818688,1992884223,SG
-1992884224,1993342975,CN
+1992818688,1992949759,SG
+1992949760,1993342975,CN
1993342976,1993605119,AU
1993605120,1993736191,CN
1993736192,1993867263,SG
@@ -79995,7 +36490,8 @@
1996636160,1996644351,ID
1996644352,1996652543,BT
1996652544,1997078527,CN
-1997078528,1997144063,HK
+1997078528,1997094911,AU
+1997094912,1997144063,HK
1997144064,1997176831,CN
1997176832,1997180927,AU
1997180928,1997185023,HK
@@ -80037,9 +36533,9 @@
1997723648,1997725695,JP
1997725696,1998061567,CN
1998061568,1998258175,JP
-1998258176,1998274047,SG
-1998274048,1998274303,US
-1998274304,1998274559,SG
+1998258176,1998271231,SG
+1998271232,1998271487,AU
+1998271488,1998274559,SG
1998274560,1998454783,CN
1998454784,1998456831,AU
1998456832,1998458879,JP
@@ -80053,21 +36549,16 @@
1998553088,1998561279,JP
1998561280,1998562047,IN
1998562048,1998562303,TH
-1998562304,1998562559,IN
-1998562560,1998562815,AP
-1998562816,1998562863,IN
+1998562304,1998562863,IN
1998562864,1998562864,HK
1998562865,1998565375,IN
1998565376,1998569471,TW
1998569472,1998577663,CN
1998577664,1998579711,AU
1998579712,1998581759,SG
-1998581760,1998583807,KR
-1998583808,1998584063,AU
-1998584064,1998585087,KR
-1998585088,1998585343,SG
-1998585344,1998585599,JP
-1998585600,1998585855,IN
+1998581760,1998584319,KR
+1998584320,1998584575,OM
+1998584576,1998585855,KR
1998585856,1999130623,CN
1999130624,1999134719,BD
1999134720,1999136767,MN
@@ -80077,9 +36568,7 @@
1999249408,1999257599,PH
1999257600,1999273983,TH
1999273984,1999278079,CN
-1999278080,1999278097,HK
-1999278098,1999278098,HK
-1999278099,1999280127,HK
+1999278080,1999280127,HK
1999280128,1999282175,IN
1999282176,1999290367,KR
1999290368,1999298559,SG
@@ -80100,11 +36589,7 @@
2000355328,2000371711,KR
2000371712,2000373759,JP
2000373760,2000375807,HK
-2000375808,2000376319,AF
-2000376320,2000376575,US
-2000376576,2000377087,AF
-2000377088,2000377343,US
-2000377344,2000377855,AF
+2000375808,2000377855,AF
2000377856,2000379903,JP
2000379904,2000388095,TH
2000388096,2000617471,CN
@@ -80177,7 +36662,6 @@
2007040000,2007048191,KR
2007048192,2007064575,AU
2007066624,2007070719,JP
-2007070720,2007072767,IN
2007072768,2007498751,CN
2007498752,2008023039,JP
2008023040,2009071615,CN
@@ -80227,18 +36711,17 @@
2015166464,2015182847,AU
2015182848,2015199231,PH
2015199232,2015203327,KR
-2015203328,2015203839,JP
-2015203840,2015205375,US
+2015203328,2015205375,JP
2015205376,2015207423,ID
2015207424,2015215615,JP
-2015215616,2015219711,IN
+2015215616,2015216383,IN
+2015216384,2015216639,AU
+2015216640,2015219711,IN
2015219712,2015219967,US
-2015219968,2015220223,PH
+2015219968,2015220223,HK
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
@@ -80269,8 +36752,8 @@
2019035136,2019037183,CN
2019037184,2019041279,JP
2019041280,2019045375,IN
-2019045376,2019046399,US
-2019046400,2019049471,JP
+2019045376,2019045631,US
+2019045632,2019049471,JP
2019049472,2019078143,AU
2019078144,2019082239,IN
2019082240,2019098623,HK
@@ -80289,12 +36772,10 @@
2022178816,2022180863,NZ
2022180864,2022182911,JP
2022184960,2022187007,KH
-2022187008,2022187663,HK
-2022187664,2022187679,US
-2022187680,2022189651,HK
-2022189652,2022189652,HK
-2022189653,2022191103,HK
-2022191104,2022195199,NZ
+2022187008,2022191103,HK
+2022191104,2022194175,NZ
+2022194176,2022194687,AU
+2022194688,2022195199,NZ
2022195200,2022211583,KR
2022211584,2022227967,CN
2022227968,2022244351,JP
@@ -80334,9 +36815,7 @@
2030059520,2030108671,KR
2030108672,2030125055,PH
2030125056,2030141439,KR
-2030141440,2030173695,JP
-2030173696,2030173951,AP
-2030173952,2030305279,JP
+2030141440,2030305279,JP
2030305280,2030436351,CN
2030436352,2030567423,SG
2030567424,2032926719,CN
@@ -80370,9 +36849,7 @@
2033631232,2033647615,KR
2033647616,2033663999,CN
2033664000,2033696767,KR
-2033696768,2033708799,GU
-2033708800,2033709055,US
-2033709056,2033713151,GU
+2033696768,2033713151,GU
2033713152,2033876991,CN
2033876992,2033879039,JP
2033879040,2033887231,CN
@@ -80457,8 +36934,8 @@
2046836736,2046885887,CN
2046885888,2046951423,JP
2046951424,2047082495,PH
-2047082496,2047475711,CN
-2047475712,2047492095,HK
+2047082496,2047442943,CN
+2047442944,2047492095,HK
2047492096,2047496191,KR
2047496192,2047508479,HK
2047508480,2047526911,CN
@@ -80510,8 +36987,8 @@
2053515264,2053519359,ID
2053519360,2053521407,JP
2053521408,2053529599,CN
-2053529600,2053532927,AU
-2053532928,2053533183,NZ
+2053529600,2053532671,AU
+2053532672,2053533183,NZ
2053533184,2053533695,AU
2053533696,2053534719,VN
2053534720,2053537791,IN
@@ -80559,13 +37036,19 @@
2056794112,2056796159,BD
2056796160,2056806399,JP
2056806400,2056814591,KR
-2056814592,2056817663,JP
+2056814592,2056816863,JP
+2056816864,2056816895,MY
+2056816896,2056817663,JP
2056817664,2056817919,AU
-2056817920,2056818943,JP
+2056817920,2056818431,JP
+2056818432,2056818687,SG
+2056818688,2056818943,JP
2056818944,2056818993,MY
-2056818994,2056818994,AP
+2056818994,2056818994,JP
2056818995,2056819199,MY
-2056819200,2056830975,JP
+2056819200,2056823849,JP
+2056823850,2056823850,SG
+2056823851,2056830975,JP
2056830976,2056847359,CN
2056847360,2056912895,KR
2056912896,2057043967,TH
@@ -80594,10 +37077,7 @@
2059997184,2060001279,MN
2060001280,2060002559,HK
2060002560,2060002815,ID
-2060002816,2060004351,HK
-2060004352,2060004607,US
-2060004608,2060005119,HK
-2060005120,2060005375,US
+2060002816,2060005375,HK
2060005376,2060009471,CN
2060009472,2060025855,AU
2060025856,2060058623,TW
@@ -80611,43 +37091,44 @@
2060451840,2061500415,JP
2061500416,2063073279,CN
2063073280,2063077375,BD
-2063077376,2063077377,HK
-2063077378,2063077378,AP
-2063077379,2063078143,HK
-2063078144,2063078399,SG
-2063078400,2063079423,HK
+2063077376,2063077377,PH
+2063077378,2063077378,HK
+2063077379,2063077631,PH
+2063077632,2063079423,HK
2063079424,2063081471,CN
2063081472,2063085567,ID
2063085568,2063089663,CN
2063089664,2063097855,JP
-2063097856,2063098367,MM
-2063098368,2063098495,SG
-2063098496,2063106047,MM
-2063106048,2063107071,JP
-2063107072,2063107327,AP
-2063107328,2063107623,JP
+2063097856,2063106047,MM
+2063106048,2063106559,JP
+2063106560,2063106815,AU
+2063106816,2063107623,JP
2063107624,2063107631,AU
-2063107632,2063111679,JP
-2063111680,2063112191,AU
-2063112192,2063114495,JP
+2063107632,2063111167,JP
+2063111168,2063112191,AU
+2063112192,2063113727,JP
+2063113728,2063113983,AU
+2063113984,2063114495,JP
2063114496,2063114751,IN
2063114752,2063115007,JP
2063115008,2063115263,IN
-2063115264,2063118335,JP
+2063115264,2063117311,JP
+2063117312,2063117567,NZ
+2063117568,2063118335,JP
2063118336,2063118591,IN
2063118592,2063119871,JP
-2063119872,2063119999,IN
-2063120000,2063120383,JP
-2063120384,2063121407,AU
-2063121408,2063122431,JP
+2063119872,2063120383,IN
+2063120384,2063120895,JP
+2063120896,2063121151,AU
+2063121152,2063122431,JP
2063122432,2063138815,SG
2063138816,2063335423,JP
2063335424,2063341567,AU
2063341568,2063343615,SG
-2063343616,2063351807,AP
+2063343616,2063351807,JP
2063351808,2063368191,KR
2063368192,2063372287,JP
-2063372288,2063374335,AP
+2063372288,2063374335,AU
2063374336,2063376383,NZ
2063376384,2063380479,TW
2063380480,2063382527,KH
@@ -80656,9 +37137,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
@@ -80691,7 +37170,9 @@
2066923520,2066939903,JP
2066939904,2066972671,AU
2066972672,2067005439,TW
-2067005440,2067726335,CN
+2067005440,2067529727,CN
+2067529728,2067595263,HK
+2067595264,2067726335,CN
2067726336,2067791871,IN
2067791872,2070052863,CN
2070052864,2070056959,AU
@@ -80708,7 +37189,9 @@
2070200320,2070208511,JP
2070208512,2070210047,SG
2070210048,2070210303,AU
-2070210304,2070216703,SG
+2070210304,2070210815,SG
+2070210816,2070211071,AU
+2070211072,2070216703,SG
2070216704,2070282239,CN
2070282240,2070347775,AU
2070347776,2070380543,CN
@@ -80821,7 +37304,12 @@
2080636928,2080702463,IN
2080702464,2080767999,KR
2080768000,2080776191,TW
-2080776192,2080784383,ID
+2080776192,2080777215,HK
+2080777216,2080778239,GB
+2080778240,2080779263,US
+2080779264,2080780287,SG
+2080780288,2080781311,ID
+2080781312,2080784383,SG
2080784384,2080800767,CN
2080800768,2080817151,PH
2080817152,2080825343,NZ
@@ -80843,8 +37331,8 @@
2082340864,2082406399,IN
2082406400,2082471935,CN
2082471936,2083007231,JP
-2083007232,2083012607,US
-2083012608,2083024895,JP
+2083007232,2083007487,US
+2083007488,2083024895,JP
2083024896,2083053567,CN
2083053568,2083057663,TH
2083058688,2083059711,IN
@@ -80964,9 +37452,7 @@
2093383680,2093416447,NZ
2093416448,2093432831,KR
2093432832,2093445119,TW
-2093445120,2093448447,AF
-2093448448,2093448703,US
-2093448704,2093449215,AF
+2093445120,2093449215,AF
2093449216,2093481983,KR
2093481984,2094006271,CN
2094006272,2094530559,JP
@@ -81063,9 +37549,7 @@
2111111168,2111143935,CN
2111143936,2111152127,ID
2111152128,2111160319,AU
-2111160320,2111161599,AF
-2111161600,2111161855,US
-2111161856,2111168511,AF
+2111160320,2111168511,AF
2111168512,2111176703,TH
2111176704,2111193087,VN
2111193088,2111201279,AU
@@ -81081,15 +37565,15 @@
2112487424,2112618495,VN
2112618496,2112880639,NZ
2112880640,2113683455,KR
-2113683456,2113685247,JP
-2113685248,2113685311,PH
-2113685312,2113685759,JP
+2113683456,2113685759,JP
2113685760,2113686015,MY
2113686016,2113687807,JP
2113687808,2113688063,AU
-2113688064,2113693695,JP
-2113693696,2113693951,HK
-2113693952,2113716223,JP
+2113688064,2113688319,JP
+2113688320,2113688575,SG
+2113688576,2113693599,JP
+2113693600,2113693615,HK
+2113693616,2113716223,JP
2113716224,2113732607,SG
2113732608,2113761279,AU
2113761280,2113765375,VN
@@ -81105,8 +37589,13 @@
2147485696,2147487743,DK
2147487744,2147489791,NO
2147489792,2147491839,RU
-2147491840,2147500031,DE
-2147500032,2147502079,NL
+2147491840,2147494911,DE
+2147494912,2147495167,RO
+2147495168,2147498239,DE
+2147498240,2147498495,RO
+2147498496,2147500031,DE
+2147500032,2147501055,FR
+2147501056,2147502079,NL
2147502080,2147504127,DK
2147504128,2147508223,RU
2147508224,2147510271,DE
@@ -81120,14 +37609,12 @@
2147526656,2147528703,UA
2147528704,2147532799,CZ
2147532800,2147534847,DE
-2147534848,2147549183,CY
+2147534848,2147536895,CY
+2147536896,2147540991,GR
+2147540992,2147549183,CY
2147549184,2147942399,US
2147942400,2148007935,DE
-2148007936,2148220515,US
-2148220516,2148220535,AU
-2148220536,2148229151,US
-2148229152,2148229183,CA
-2148229184,2148532223,US
+2148007936,2148532223,US
2148532224,2148597759,GB
2148597760,2150039551,US
2150039552,2150105087,NO
@@ -81139,7 +37626,7 @@
2150432768,2150498303,IT
2150498304,2151743487,US
2151743488,2151759871,BY
-2151759872,2151768063,US
+2151759872,2151768063,DE
2151768064,2151770111,GB
2151770112,2151772159,BA
2151772160,2151776255,IT
@@ -81150,9 +37637,9 @@
2151784448,2151792639,IR
2151792640,2151794687,CH
2151794688,2151796735,IT
-2151796736,2151797247,DE
-2151797248,2151798015,NL
-2151798016,2151800831,DE
+2151796736,2151798783,NL
+2151798784,2151799807,DE
+2151799808,2151800831,NL
2151800832,2151809023,PT
2151809024,2151940095,IT
2151940096,2152464383,RU
@@ -81161,9 +37648,41 @@
2152726528,2153119743,US
2153119744,2153185279,GB
2153185280,2153250815,SE
-2153250816,2153316095,US
-2153316096,2153316351,AP
-2153316352,2153578495,US
+2153250816,2153384447,US
+2153384448,2153385471,GB
+2153385472,2153385599,AT
+2153385600,2153385663,CZ
+2153385664,2153385727,FI
+2153385728,2153385791,PL
+2153385792,2153385855,PT
+2153385856,2153385919,TR
+2153385920,2153385983,US
+2153385984,2153387007,GB
+2153387008,2153387263,CH
+2153387264,2153387775,US
+2153387776,2153388031,CH
+2153388032,2153406463,US
+2153406464,2153407487,JP
+2153407488,2153407743,HK
+2153407744,2153407999,US
+2153408000,2153408511,BR
+2153408512,2153408767,AU
+2153408768,2153409023,PA
+2153409024,2153409279,AR
+2153409280,2153409535,CR
+2153409536,2153409791,CO
+2153409792,2153410047,MX
+2153410048,2153410303,US
+2153410304,2153410559,TW
+2153410560,2153410815,PA
+2153410816,2153411071,AR
+2153411072,2153411327,CR
+2153411328,2153411583,CO
+2153411584,2153411839,MX
+2153411840,2153412095,US
+2153412096,2153412351,TW
+2153412352,2153413119,AU
+2153413120,2153578495,US
2153578496,2153644031,FR
2153644032,2153906175,US
2153906176,2153971711,GB
@@ -81173,7 +37692,6 @@
2155610112,2155675647,UA
2155675648,2155806719,US
2155806720,2155808767,IT
-2155808768,2155810815,RU
2155810816,2155812863,FR
2155812864,2155814911,GB
2155814912,2155819007,NL
@@ -81184,7 +37702,11 @@
2155827200,2155831295,PL
2155831296,2155833343,RU
2155833344,2155833855,SE
-2155833856,2155834623,NL
+2155833856,2155834367,NL
+2155834368,2155834464,SE
+2155834465,2155834512,NL
+2155834513,2155834532,SE
+2155834533,2155834623,NL
2155834624,2155834879,LU
2155834880,2155835391,NL
2155835392,2155839487,RO
@@ -81193,7 +37715,6 @@
2155845632,2155847679,DE
2155847680,2155849727,ES
2155849728,2155851775,TR
-2155851776,2155853823,KZ
2155853824,2155855871,SE
2155855872,2155872255,RO
2155872256,2156003327,US
@@ -81203,10 +37724,7 @@
2156331008,2156593151,US
2156593152,2156658687,IL
2156658688,2156691455,IR
-2156691456,2156691478,A2
-2156691479,2156691479,FR
-2156691480,2156695551,A2
-2156695552,2156697599,FR
+2156691456,2156697599,FR
2156697600,2156699647,CY
2156699648,2156703743,RU
2156703744,2156707839,BG
@@ -81226,112 +37744,43 @@
2159149056,2159280127,CH
2159280128,2159542271,US
2159542272,2159607807,AU
-2159607808,2159869951,US
+2159607808,2159673343,IN
+2159673344,2159869951,US
2159869952,2159935487,CA
2159935488,2160525311,US
-2160525312,2160590847,GB
-2160590848,2160852991,US
+2160525312,2160590847,SG
+2160590848,2160656383,US
+2160721920,2160852991,US
2160852992,2160885759,RU
-2160885760,2160889727,AT
-2160889728,2160889759,DE
-2160889760,2160889887,AT
-2160889888,2160889919,GB
-2160889920,2160890111,AT
-2160890112,2160890127,CH
-2160890128,2160890143,AT
-2160890144,2160890159,CN
-2160890160,2160890175,AD
-2160890176,2160890191,AT
-2160890192,2160890207,FR
-2160890208,2160890239,AT
-2160890240,2160890255,SK
-2160890256,2160890335,AT
-2160890336,2160890351,TW
-2160890352,2160890383,AT
-2160890384,2160890399,GB
-2160890400,2160890415,AT
-2160890416,2160890431,DE
-2160890432,2160890495,AT
-2160890496,2160890511,FR
-2160890512,2160890527,AT
-2160890528,2160890543,DE
-2160890544,2160890599,AT
-2160890600,2160890607,GB
-2160890608,2160890615,DE
-2160890616,2160890623,AT
-2160890624,2160890751,DE
-2160890752,2160891007,AT
-2160891008,2160891135,DE
-2160891136,2160892215,AT
-2160892216,2160892223,DE
-2160892224,2160892231,IT
-2160892232,2160892255,AT
-2160892256,2160892263,BE
-2160892264,2160892279,DE
-2160892280,2160892295,AT
-2160892296,2160892303,DE
-2160892304,2160892311,GB
-2160892312,2160892319,HR
-2160892320,2160892327,AT
-2160892328,2160892335,DE
-2160892336,2160892343,US
-2160892344,2160892399,AT
-2160892400,2160892407,IE
-2160892408,2160892455,AT
-2160892456,2160892463,DE
-2160892464,2160892471,AT
-2160892472,2160892479,GB
-2160892480,2160892495,AT
-2160892496,2160892503,DE
-2160892504,2160892551,AT
-2160892552,2160892559,IN
-2160892560,2160892567,GR
-2160892568,2160893055,AT
-2160893056,2160893119,DE
-2160893120,2160893951,AT
+2160885760,2160893951,AT
2160893952,2160902143,RU
-2160902144,2160902673,NL
-2160902674,2160902675,TR
-2160902676,2160902679,NL
-2160902680,2160902681,TR
-2160902682,2160902714,NL
-2160902715,2160902716,TR
-2160902717,2160902724,NL
-2160902725,2160902727,TR
-2160902728,2160902755,NL
-2160902756,2160902756,TR
-2160902757,2160902762,NL
-2160902763,2160902763,TR
-2160902764,2160903428,NL
-2160903429,2160903429,ES
-2160903430,2160906239,NL
+2160902144,2160906239,NL
2160906240,2160908287,FR
2160908288,2160910335,PL
2160910336,2160914431,NL
2160914432,2160918527,SA
2160918528,2161508351,US
2161508352,2161573887,FI
-2161573888,2162687999,US
+2161573888,2162228223,US
+2162228224,2162228479,CA
+2162228480,2162687999,US
2162688000,2162753535,GB
2162753536,2162819071,CA
2162819072,2162884607,RO
2162884608,2163212287,US
2163212288,2163277823,GB
-2163277824,2163288063,US
-2163288064,2163290111,US
-2163290112,2163304447,US
-2163304448,2163306495,US
-2163306496,2163408895,US
+2163277824,2163408895,US
2163408896,2163474431,GB
2163474432,2163605503,US
-2163605504,2163623935,CH
-2163623936,2163624191,AP
-2163624192,2163638271,CH
+2163605504,2163623935,DE
+2163623936,2163624191,CH
+2163624192,2163638271,DE
2163638272,2163638527,US
-2163638528,2163671039,CH
+2163638528,2163671039,DE
2163671040,2163867647,US
2163867648,2163933183,AU
-2163933184,2164981759,US
+2163933184,2164260863,US
+2164326400,2164981759,US
2164981760,2165112831,GB
2165112832,2165178367,DE
2165178368,2165309439,US
@@ -81350,15 +37799,14 @@
2166571008,2166575103,GB
2166575104,2166575359,US
2166575360,2166575615,GB
-2166575616,2166598655,US
-2166598656,2166598911,FR
-2166598912,2166606335,US
-2166606336,2166606591,FR
-2166606592,2166607009,US
-2166607010,2166607011,DE
+2166575616,2166607009,US
+2166607010,2166607010,DE
+2166607011,2166607011,GB
2166607012,2166613759,US
2166613760,2166614015,DE
-2166614016,2168193023,US
+2166614016,2167209983,US
+2167275520,2167930879,US
+2167996416,2168193023,US
2168193024,2168258559,JP
2168258560,2168651775,US
2168651776,2168717311,GB
@@ -81381,7 +37829,8 @@
2170945536,2171011071,FR
2171011072,2171076607,DE
2171076608,2171142143,FR
-2171142144,2172452863,US
+2171142144,2172256255,US
+2172321792,2172452863,US
2172452864,2172518399,NL
2172518400,2172583935,US
2172583936,2172649471,AU
@@ -81406,16 +37855,12 @@
2175926272,2175991807,SE
2175991808,2176057343,US
2176057344,2176122879,AU
-2176122880,2176389119,FR
-2176389120,2176389375,NL
-2176389376,2176450559,FR
+2176122880,2176450559,FR
2176450560,2176516095,US
2176516096,2176581631,DE
2176581632,2176868607,US
2176868608,2176868863,IT
-2176868864,2176893951,US
-2176893952,2176894207,AP
-2176894208,2176897023,US
+2176868864,2176897023,US
2176897024,2176897279,AU
2176897280,2176974847,US
2176974848,2177105919,CH
@@ -81429,13 +37874,11 @@
2178351104,2178416639,GB
2178416640,2178482175,US
2178482176,2178547711,DE
-2178547712,2179379199,US
-2179379200,2179395583,GB
-2179395584,2179397632,US
+2178547712,2179391487,US
+2179391488,2179391999,GB
+2179392000,2179397632,US
2179397633,2179397633,GB
-2179397634,2179398143,US
-2179398144,2179398399,GB
-2179398400,2179465215,US
+2179397634,2179465215,US
2179530752,2179596287,DE
2179596288,2179661823,GB
2179661824,2179989503,US
@@ -81496,19 +37939,14 @@
2183266304,2183331839,JP
2183331840,2183416575,US
2183416576,2183416831,GB
-2183416832,2183419647,US
-2183419648,2183419903,EU
-2183419904,2183421695,US
-2183421696,2183421951,EU
-2183421952,2183437055,US
-2183437056,2183437311,AP
-2183437312,2183462911,US
+2183416832,2183462911,US
2183462912,2183528447,NL
2183528448,2183856127,US
2183856128,2183888895,GR
2183888896,2183905279,GB
2183905280,2183921663,HU
-2183921664,2184577023,US
+2183921664,2184380415,US
+2184445952,2184577023,US
2184577024,2184642559,JP
2184642560,2184708095,US
2184708096,2184773631,AU
@@ -81540,27 +37978,7 @@
2186870784,2186936319,NL
2186936320,2187067391,US
2187067392,2187132927,CH
-2187132928,2187221887,US
-2187221888,2187222015,US
-2187222016,2187225471,US
-2187225472,2187225599,US
-2187225600,2187225823,US
-2187225824,2187225855,US
-2187225856,2187225983,US
-2187225984,2187226111,US
-2187226112,2187229471,US
-2187229472,2187229479,US
-2187229480,2187229607,US
-2187229608,2187229615,US
-2187229616,2187229679,US
-2187229680,2187229687,US
-2187229688,2187230111,US
-2187230112,2187230143,US
-2187230144,2187232511,US
-2187232512,2187232639,US
-2187232640,2187232767,US
-2187232768,2187233023,US
-2187233024,2187263999,US
+2187132928,2187263999,US
2187264000,2187329535,AU
2187329536,2187460607,US
2187460608,2187526143,FR
@@ -81576,60 +37994,49 @@
2188509184,2188574719,US
2188574720,2188640255,NL
2188640256,2188705791,AU
-2188705792,2188705857,EU
+2188705792,2188705857,US
2188705858,2188705858,DE
-2188705859,2188705957,EU
+2188705859,2188705957,US
2188705958,2188705958,DE
-2188705959,2188706101,EU
+2188705959,2188706101,US
2188706102,2188706102,DE
-2188706103,2188706453,EU
+2188706103,2188706453,US
2188706454,2188706454,DK
-2188706455,2188707839,EU
-2188707840,2188708863,FR
-2188708864,2188711800,EU
+2188706455,2188708607,US
+2188708608,2188708863,FR
+2188708864,2188711800,US
2188711801,2188711801,DE
-2188711802,2188716031,EU
-2188716032,2188718079,FR
-2188718080,2188718581,EU
+2188711802,2188716031,US
+2188716032,2188716287,FR
+2188716288,2188718581,US
2188718582,2188718582,DE
-2188718583,2188724463,EU
+2188718583,2188724463,US
2188724464,2188724464,NL
-2188724465,2188724991,EU
-2188724992,2188725247,IL
-2188725248,2188726783,EU
+2188724465,2188726783,US
2188726784,2188727039,GB
-2188727040,2188728319,EU
+2188727040,2188728319,US
2188728320,2188728575,GB
-2188728576,2188734463,EU
+2188728576,2188734463,US
2188734464,2188734719,FR
-2188734720,2188736511,EU
-2188736512,2188737023,GB
-2188737024,2188737791,EU
-2188737792,2188738047,GB
-2188738048,2188768767,EU
-2188768768,2188769023,YT
-2188769024,2188769279,EU
-2188769280,2188769535,NL
-2188769536,2188771327,EU
-2188771328,2188900351,US
-2188900352,2188900607,EU
-2188900608,2188902399,US
+2188734720,2188738306,US
+2188738307,2188738307,GB
+2188738308,2188768767,US
+2188768768,2188769279,YT
+2188769280,2188902399,US
2188902400,2188967935,FR
2188967936,2189099007,US
2189099008,2189164543,NZ
2189164544,2189230079,US
2189230080,2189295615,CH
2189295616,2189492223,US
-2189492224,2189557759,CA
+2189492224,2189557759,CZ
2189557760,2189623295,AU
2189623296,2189754367,US
2189754368,2189819903,DE
2189819904,2189950975,US
2189950976,2190016511,IT
2190016512,2190082047,US
-2190082048,2190140159,NL
-2190140160,2190140415,EU
-2190140416,2190737407,NL
+2190082048,2190737407,NL
2190737408,2190802943,GB
2190802944,2190868479,DE
2190868480,2191065087,US
@@ -81656,25 +38063,11 @@
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
-2193188864,2193189119,DE
-2193189120,2193189247,CZ
-2193189248,2193189375,GB
-2193189376,2193189631,CZ
-2193189632,2193189919,DE
-2193189920,2193189935,GB
-2193189936,2193189951,DE
-2193189952,2193189983,IT
-2193189984,2193190015,DE
-2193190016,2193190079,CZ
-2193190080,2193190111,DE
-2193190112,2193190143,AR
-2193190144,2193190911,DE
+2193188864,2193190911,DE
2193195008,2193199103,DK
2193199104,2193201151,GB
2193201152,2193202175,SE
@@ -81692,13 +38085,34 @@
2193555456,2193620991,US
2193620992,2193686527,IT
2193686528,2193688575,FR
-2193688576,2193691199,CZ
-2193691200,2193691263,SK
-2193691264,2193692671,CZ
+2193688576,2193692671,CZ
2193692672,2193694719,FR
-2193694720,2193704959,RU
+2193694720,2193695743,US
+2193695744,2193696767,RU
+2193696768,2193697791,US
+2193697792,2193698815,RU
+2193698816,2193701887,US
+2193701888,2193704959,RU
2193704960,2193707007,IT
-2193707008,2193711103,GB
+2193707008,2193707239,GB
+2193707240,2193707247,IT
+2193707248,2193707407,GB
+2193707408,2193707415,IT
+2193707416,2193707751,GB
+2193707752,2193707759,IT
+2193707760,2193707831,GB
+2193707832,2193707839,IT
+2193707840,2193707975,GB
+2193707976,2193707983,IT
+2193707984,2193708511,GB
+2193708512,2193708519,IT
+2193708520,2193708663,GB
+2193708664,2193708671,IT
+2193708672,2193708735,GB
+2193708736,2193708743,IT
+2193708744,2193708815,GB
+2193708816,2193708823,IT
+2193708824,2193711103,GB
2193711104,2193713151,DE
2193713152,2193715199,ES
2193715200,2193717247,DE
@@ -81708,21 +38122,14 @@
2193817600,2193883135,NZ
2193883136,2194014207,US
2194014208,2194079743,CH
-2194079744,2194210815,US
-2194210816,2194276351,GB
-2194276352,2194407423,US
+2194079744,2194407423,US
2194407424,2194472959,BG
2194472960,2194538495,US
2194538496,2194604031,ES
2194604032,2194669567,US
2194669568,2194735103,IS
2194735104,2194800639,GB
-2194800640,2194866175,US
-2194931712,2195069436,US
-2195069437,2195069437,AP
-2195069438,2195073023,US
-2195073024,2195073279,EU
-2195073280,2195193855,US
+2194800640,2195193855,US
2195193856,2195324927,NZ
2195324928,2195455999,US
2195456000,2195521535,AU
@@ -81753,22 +38160,21 @@
2197776384,2197778431,DE
2197778432,2197780479,IT
2197780480,2197782527,DE
-2197782528,2197786623,UA
+2197782528,2197782685,RU
+2197782686,2197782686,UA
+2197782687,2197782783,RU
+2197782784,2197783039,UA
+2197783040,2197786623,RU
2197786624,2197788671,IT
2197788672,2197790719,PL
-2197790720,2197790947,SE
-2197790948,2197790951,EE
-2197790952,2197791111,SE
-2197791112,2197791115,LV
-2197791116,2197791455,SE
-2197791456,2197791459,LT
-2197791460,2197792767,SE
+2197790720,2197792767,SE
2197792768,2197794815,IT
2197794816,2197796863,SA
2197796864,2197798911,DE
2197798912,2197815295,IR
2197880832,2197946367,IT
-2197946368,2204172287,US
+2197946368,2202533887,US
+2202599424,2204172287,US
2204172288,2204237823,SE
2204237824,2204303359,US
2204303360,2204368895,DE
@@ -81784,8 +38190,7 @@
2205351936,2205483007,SE
2205483008,2205515775,CH
2205515776,2205519871,AZ
-2205519872,2205520383,US
-2205520384,2205523967,DE
+2205519872,2205523967,DE
2205523968,2205526015,YE
2205526016,2205528063,GB
2205528064,2205530111,SE
@@ -81850,7 +38255,7 @@
2210136064,2210201599,DE
2210201600,2210594815,US
2210594816,2210660351,CA
-2210660352,2211053567,US
+2210725888,2211053567,US
2211053568,2211119103,CA
2211119104,2211184639,NZ
2211184640,2211250175,US
@@ -81871,15 +38276,17 @@
2212691968,2212757503,GB
2212757504,2212761599,FI
2212761600,2212762623,GB
-2212762624,2212766719,FI
+2212762624,2212764927,FI
+2212764928,2212765183,BG
+2212765184,2212766719,FI
2212766720,2212767743,GB
-2212767744,2212802559,FI
-2212802560,2212802815,IN
-2212802816,2212805631,FI
-2212805632,2212806143,CN
-2212806144,2212810751,FI
-2212810752,2212811519,US
-2212811520,2212823039,FI
+2212767744,2212796415,FI
+2212796416,2212797951,NL
+2212797952,2212804095,FI
+2212804096,2212804351,NL
+2212804352,2212807679,FI
+2212807680,2212808703,US
+2212808704,2212823039,FI
2212823040,2212954111,US
2212954112,2213019647,GB
2213019648,2213085183,CA
@@ -81897,22 +38304,19 @@
2214068224,2214133759,JP
2214133760,2214264831,US
2214264832,2214330367,GB
-2214330368,2214397951,US
-2214397952,2214398207,CA
-2214398208,2214398975,US
-2214398976,2214400767,CA
-2214400768,2214401279,US
-2214401280,2214408191,CA
-2214408192,2214411519,US
-2214411520,2214461439,CA
+2214330368,2214461439,US
2214461440,2214526975,FR
2214592512,2218786815,US
2218786816,2219769855,IL
2219769856,2222521855,US
2222521856,2222522111,PR
-2222522112,2224160767,US
+2222522112,2223111679,US
+2223111680,2223111935,VI
+2223111936,2224160767,US
2224160768,2224226303,GB
-2224226304,2224357375,US
+2224226304,2224242687,US
+2224242688,2224259071,SG
+2224259072,2224357375,US
2224357376,2224422911,FR
2224422912,2224488447,NO
2224488448,2224619519,US
@@ -81921,7 +38325,7 @@
2224750592,2224816127,FI
2224816128,2224881663,CA
2224947200,2225340415,US
-2225340416,2225733631,FR
+2225405952,2225733631,FR
2225733632,2225799167,US
2225799168,2225864703,FI
2225864704,2226126847,US
@@ -81935,13 +38339,9 @@
2226716672,2226782207,GB
2226782208,2226847743,ZA
2226847744,2226913279,DE
-2226913280,2226921471,US
-2226921472,2226921727,EU
-2226921728,2227052543,US
-2227052544,2227052609,EU
+2226913280,2227052609,US
2227052610,2227052610,CH
-2227052611,2227052799,EU
-2227052800,2227109887,US
+2227052611,2227109887,US
2227175424,2227372031,US
2227372032,2227437567,DE
2227437568,2227503103,SE
@@ -81960,12 +38360,11 @@
2229796864,2229862399,GB
2229862400,2229927935,US
2229927936,2229993471,AU
-2229993472,2230583295,US
-2230583296,2230601727,GB
-2230601728,2230601983,EU
-2230601984,2230603775,GB
-2230603776,2230608127,US
-2230608128,2230637567,GB
+2229993472,2230321151,US
+2230386688,2230583295,US
+2230583296,2230603775,GB
+2230603776,2230607871,US
+2230607872,2230637567,GB
2230637568,2230638591,SG
2230638592,2230648831,GB
2230648832,2230714367,US
@@ -81981,10 +38380,9 @@
2248151040,2248153087,GB
2248153088,2248155135,DE
2248155136,2248163327,AL
-2248163328,2248165503,GB
-2248165504,2248165631,US
-2248165632,2248166399,GB
-2248166400,2248167423,US
+2248163328,2248163839,US
+2248163840,2248165375,GB
+2248165376,2248167423,US
2248167424,2248169471,IE
2248169472,2248171519,NL
2248171520,2248177663,RU
@@ -82012,9 +38410,7 @@
2249588736,2249654271,CA
2249654272,2249724671,US
2249724672,2249724927,CA
-2249724928,2249781247,US
-2249781248,2249781255,FR
-2249781256,2249785343,US
+2249724928,2249785343,US
2249785344,2249850879,SE
2249850880,2249916415,US
2249916416,2249981951,NL
@@ -82026,21 +38422,21 @@
2250375168,2250440703,DE
2250440704,2250506239,US
2250506240,2250571775,GB
-2250571776,2250637055,FI
-2250637056,2250637311,EU
-2250637312,2250702847,CH
-2250702848,2251227135,US
+2250571776,2250637311,FI
+2250637312,2250956799,US
+2250956800,2250957055,HK
+2250957056,2250957311,SG
+2250957312,2250957567,AU
+2250957568,2250957823,JP
+2250957824,2251227135,US
2251227136,2251292671,NO
2251292672,2251685887,US
-2251685888,2251686143,EU
-2251686144,2251751423,BE
+2251685888,2251751423,BE
2251751424,2251948031,US
2251948032,2252013567,BE
2252013568,2252079103,FR
2252079104,2252210175,DE
-2252210176,2252417023,US
-2252417024,2252417279,GB
-2252417280,2252931071,US
+2252210176,2252931071,US
2252996608,2253062143,US
2253062144,2253127679,KR
2253127680,2253193215,DE
@@ -82054,16 +38450,9 @@
2254045184,2254077951,GE
2254077952,2254079999,BA
2254080000,2254082047,FR
-2254082048,2254082559,NO
-2254082560,2254082815,NL
-2254082816,2254083071,NO
-2254083072,2254083327,GB
-2254083328,2254083583,DK
-2254083584,2254084095,NO
+2254082048,2254084095,NO
2254084096,2254094335,RU
-2254094336,2254096383,RO
-2254096384,2254096895,GB
-2254096896,2254098431,RO
+2254094336,2254098431,GB
2254098432,2254100479,RU
2254100480,2254102527,CH
2254102528,2254110719,IT
@@ -82073,7 +38462,7 @@
2255749120,2255814655,US
2255814656,2255880191,CA
2255880192,2255945727,US
-2255945728,2256011263,NO
+2255945728,2256011263,DE
2256011264,2256666623,US
2256666624,2256732159,DE
2256732160,2257190911,US
@@ -82082,16 +38471,10 @@
2257453056,2257518591,GB
2257518592,2257584127,NL
2257584128,2257649663,AU
-2257649664,2257715199,NL
-2257715200,2257715455,EU
-2257715456,2257716735,NL
-2257716736,2257716991,EU
-2257716992,2257717503,NL
+2257649664,2257717503,NL
2257717504,2257717759,GB
2257717760,2257718015,FR
-2257718016,2257765119,NL
-2257765120,2257765375,EU
-2257765376,2257771007,NL
+2257718016,2257771007,NL
2257771008,2257771263,NO
2257771264,2257776639,NL
2257776640,2257776895,IN
@@ -82107,54 +38490,200 @@
2258305024,2258370559,DE
2258370560,2258436095,US
2258436096,2258567167,FR
-2258567168,2258567679,US
-2258567680,2258567935,HK
-2258567936,2258583551,US
+2258567168,2258568191,US
+2258568192,2258568447,HK
+2258568448,2258582783,US
+2258582784,2258582791,GB
+2258582792,2258583551,US
2258583552,2258591743,GB
-2258591744,2258593375,AU
-2258593376,2258593535,HK
-2258593536,2258594303,AU
-2258594304,2258594559,HK
-2258594560,2258594613,AP
-2258594614,2258594614,HK
-2258594615,2258594815,AP
-2258594816,2258596095,AU
-2258596096,2258596351,HK
-2258596352,2258596863,AP
-2258596864,2258597119,AU
-2258597120,2258597375,PG
-2258597376,2258597439,HK
-2258597440,2258598079,AU
+2258591744,2258591935,AU
+2258591936,2258591967,HK
+2258591968,2258592271,AU
+2258592272,2258592279,JP
+2258592280,2258592287,AU
+2258592288,2258592291,JP
+2258592292,2258592439,AU
+2258592440,2258592447,JP
+2258592448,2258592791,AU
+2258592792,2258592803,HK
+2258592804,2258593279,AU
+2258593280,2258593535,HK
+2258593536,2258594047,AU
+2258594048,2258594111,HK
+2258594112,2258594303,AU
+2258594304,2258594319,HK
+2258594320,2258594559,PG
+2258594560,2258594815,HK
+2258594816,2258595103,AU
+2258595104,2258595167,TW
+2258595168,2258595231,AU
+2258595232,2258595263,TW
+2258595264,2258595295,AU
+2258595296,2258595327,TW
+2258595328,2258595383,AU
+2258595384,2258595391,KR
+2258595392,2258595887,AU
+2258595888,2258595895,NZ
+2258595896,2258595967,AU
+2258595968,2258595983,TW
+2258595984,2258596095,AU
+2258596096,2258596103,HK
+2258596104,2258596159,AU
+2258596160,2258596255,HK
+2258596256,2258596351,AU
+2258596352,2258596863,HK
+2258596864,2258596887,AU
+2258596888,2258596903,HK
+2258596904,2258596991,AU
+2258596992,2258597023,HK
+2258597024,2258597071,AU
+2258597072,2258597079,TW
+2258597080,2258597115,AU
+2258597116,2258597215,HK
+2258597216,2258597263,PG
+2258597264,2258597293,HK
+2258597294,2258597294,PG
+2258597295,2258597303,HK
+2258597304,2258597311,PG
+2258597312,2258597367,HK
+2258597368,2258597371,PG
+2258597372,2258597535,HK
+2258597536,2258597567,AU
+2258597568,2258597583,HK
+2258597584,2258597599,AU
+2258597600,2258597631,HK
+2258597632,2258597759,AU
+2258597760,2258597887,HK
+2258597888,2258597903,AU
+2258597904,2258597919,JP
+2258597920,2258597927,AU
+2258597928,2258597935,JP
+2258597936,2258598079,AU
2258598080,2258598087,TW
-2258598088,2258598639,AU
-2258598640,2258598655,TW
-2258598656,2258601471,AU
+2258598088,2258598095,AU
+2258598096,2258598111,TW
+2258598112,2258598143,JP
+2258598144,2258598495,AU
+2258598496,2258598511,NZ
+2258598512,2258598519,AU
+2258598520,2258598527,JP
+2258598528,2258598623,AU
+2258598624,2258598655,TW
+2258598656,2258599183,AU
+2258599184,2258599187,JP
+2258599188,2258599675,AU
+2258599676,2258599679,JP
+2258599680,2258600263,AU
+2258600264,2258600267,HK
+2258600268,2258600515,AU
+2258600516,2258600519,IN
+2258600520,2258600523,AU
+2258600524,2258600527,IN
+2258600528,2258600959,AU
+2258600960,2258601087,SG
+2258601088,2258601167,AU
+2258601168,2258601175,NZ
+2258601176,2258601215,AU
+2258601216,2258601343,TW
+2258601344,2258601471,AU
2258601472,2258601983,JP
-2258601984,2258602431,AU
-2258602432,2258602447,HK
-2258602448,2258602879,AU
-2258602880,2258603089,HK
+2258601984,2258602303,AU
+2258602304,2258602327,HK
+2258602328,2258602335,AU
+2258602336,2258602367,HK
+2258602368,2258602399,AU
+2258602400,2258602447,HK
+2258602448,2258602479,AU
+2258602480,2258602495,HK
+2258602496,2258602815,AU
+2258602816,2258602879,HK
+2258602880,2258603007,AU
+2258603008,2258603071,HK
+2258603072,2258603087,PG
+2258603088,2258603089,HK
2258603090,2258603090,PG
-2258603091,2258603263,HK
-2258603264,2258604799,AU
-2258604800,2258605055,AP
-2258605056,2258606079,AU
-2258606080,2258606335,HK
-2258606336,2258607871,AU
-2258607872,2258608639,HK
-2258608640,2258609663,AU
-2258609664,2258610175,HK
+2258603091,2258603103,HK
+2258603104,2258603135,PG
+2258603136,2258603139,HK
+2258603140,2258603199,PG
+2258603200,2258603207,HK
+2258603208,2258603263,PG
+2258603264,2258603775,AU
+2258603776,2258603839,HK
+2258603840,2258603903,AU
+2258603904,2258603943,HK
+2258603944,2258603951,AU
+2258603952,2258603967,HK
+2258603968,2258604031,AU
+2258604032,2258604287,HK
+2258604288,2258604671,AU
+2258604672,2258604735,SG
+2258604736,2258604799,AU
+2258604800,2258605055,HK
+2258605056,2258605311,AU
+2258605312,2258605439,SG
+2258605440,2258606143,AU
+2258606144,2258606147,HK
+2258606148,2258606151,AU
+2258606152,2258606191,HK
+2258606192,2258606199,AU
+2258606200,2258606367,HK
+2258606368,2258606415,AU
+2258606416,2258606423,HK
+2258606424,2258606463,AU
+2258606464,2258606471,HK
+2258606472,2258606487,AU
+2258606488,2258606535,HK
+2258606536,2258606963,AU
+2258606964,2258606967,NZ
+2258606968,2258607091,AU
+2258607092,2258607095,NZ
+2258607096,2258607351,AU
+2258607352,2258607359,NZ
+2258607360,2258607819,AU
+2258607820,2258607823,HK
+2258607824,2258607871,AU
+2258607872,2258607879,HK
+2258607880,2258607903,AU
+2258607904,2258607999,HK
+2258608000,2258608063,AU
+2258608064,2258608127,HK
+2258608128,2258608183,AU
+2258608184,2258608187,TW
+2258608188,2258608255,AU
+2258608256,2258608259,JP
+2258608260,2258608279,AU
+2258608280,2258608283,JP
+2258608284,2258608655,AU
+2258608656,2258608663,JP
+2258608664,2258608671,AU
+2258608672,2258608687,JP
+2258608688,2258610175,AU
2258610176,2258610431,IN
-2258610432,2258610687,AU
-2258610688,2258610943,HK
-2258610944,2258611071,JP
-2258611072,2258632703,HK
+2258610432,2258610703,AU
+2258610704,2258610719,TW
+2258610720,2258610751,AU
+2258610752,2258610755,TW
+2258610756,2258610759,AU
+2258610760,2258610783,TW
+2258610784,2258611071,AU
+2258611072,2258611103,JP
+2258611104,2258611119,AU
+2258611120,2258611167,JP
+2258611168,2258611215,AU
+2258611216,2258611223,NZ
+2258611224,2258614783,AU
+2258614784,2258614815,IN
+2258614816,2258615039,AU
+2258615040,2258615055,IN
+2258615056,2258616319,AU
+2258616320,2258632703,HK
2258632704,2258698239,JP
2258698240,2259222527,US
2259222528,2259288063,DE
2259288064,2259353599,US
2259353600,2259419135,DE
-2259419136,2259681279,US
+2259419136,2259615743,US
2259681280,2259746815,DE
2259746816,2259812351,US
2259812352,2259877887,AU
@@ -82167,26 +38696,30 @@
2260467712,2260533247,NL
2260533248,2260598783,US
2260598784,2260664319,CA
-2260664320,2260723711,GB
+2260664320,2260720895,GB
+2260720896,2260721151,DE
+2260721152,2260723711,GB
2260723712,2260723967,IL
2260723968,2260729343,GB
2260729344,2260729599,IL
2260729600,2260729855,GB
-2260729856,2260991999,US
+2260729856,2260926463,US
2260992000,2261057535,CN
2261057536,2261188607,US
2261188608,2261254143,CA
2261254144,2261385215,US
2261385216,2261450751,PR
2261450752,2261516287,NL
-2261516288,2261647359,US
+2261516288,2261569535,US
+2261569536,2261569791,TH
+2261569792,2261647359,US
2261647360,2261712895,FR
2261712896,2261778431,US
2261778432,2261843967,TW
2261843968,2261975039,US
2261975040,2262040575,AU
2262040576,2262106111,FR
-2262106112,2262171647,IE
+2262106112,2262171647,GB
2262171648,2262237183,FR
2262237184,2262499327,US
2262499328,2262630399,GB
@@ -82214,37 +38747,37 @@
2264905728,2264907775,ES
2264907776,2264924159,DE
2264924160,2264989695,CA
-2264989696,2265711615,US
-2265711616,2265776127,CA
+2264989696,2265605887,US
+2265605888,2265606143,GB
+2265606144,2265710847,US
+2265710848,2265776127,CA
2265776128,2266169343,US
2266169344,2266234879,CA
-2266234880,2266694655,US
+2266234880,2266431487,US
+2266431488,2266497023,CA
+2266497024,2266694655,US
2266694656,2266694911,SG
-2266694912,2276720639,US
+2266694912,2276786175,US
2276786176,2276851711,CA
2276851712,2277769215,US
2277769216,2277834751,GB
-2277834752,2280998911,US
-2280998912,2280999167,EU
-2280999168,2281007103,US
+2277834752,2281007103,US
2281007104,2281007359,IN
2281007360,2281023487,US
2281023488,2281023743,IN
-2281023744,2282226019,US
-2282226020,2282226020,AP
-2282226021,2282226175,US
+2281023744,2281029631,US
+2281029632,2281029887,FR
+2281029888,2281037823,US
+2281037824,2281038079,FR
+2281038080,2281701887,US
+2281701888,2281703423,CH
+2281703424,2282226175,US
2282226176,2282226243,AU
-2282226244,2282226245,AP
+2282226244,2282226245,US
2282226246,2282226431,AU
-2282226432,2282226943,US
-2282226944,2282227199,AP
-2282227200,2282234111,US
+2282226432,2282234111,US
2282234112,2282234367,GB
-2282234368,2282264063,US
-2282264064,2282264319,EU
-2282264320,2282264575,US
-2282264576,2282264831,EU
-2282264832,2291204095,US
+2282234368,2291204095,US
2291204096,2291269631,PR
2291269632,2291400703,US
2291400704,2291466239,GB
@@ -82264,10 +38797,13 @@
2292842496,2292908031,GB
2292908032,2292973567,US
2292973568,2293039103,DE
-2293039104,2293080063,EU
-2293080064,2293088255,BE
-2293088256,2293104639,EU
-2293104640,2293891071,US
+2293039104,2293080575,LU
+2293080576,2293080831,BE
+2293080832,2293085183,LU
+2293085184,2293085439,BE
+2293085440,2293104639,LU
+2293104640,2293825535,US
+2293825536,2293891071,IN
2293891072,2293956607,AU
2293956608,2294022143,JP
2294022144,2294677503,US
@@ -82288,11 +38824,7 @@
2297298944,2297364479,CH
2297364480,2297626623,US
2297626624,2297692159,DE
-2297692160,2298118655,US
-2298118656,2298118911,GB
-2298118912,2298395903,US
-2298395904,2298396159,GB
-2298396160,2299461631,US
+2297692160,2299461631,US
2299461632,2299527167,CA
2299527168,2299592703,US
2299592704,2299658239,NL
@@ -82307,20 +38839,17 @@
2301624320,2301755391,US
2301755392,2301820927,GB
2301820928,2302083071,US
-2302083072,2302190381,NL
-2302190382,2302190382,NL
-2302190383,2302214143,NL
+2302083072,2302214143,NL
2302214144,2302279679,US
2302279680,2302345215,SE
2302410752,2302541823,SE
2302541824,2302607359,CH
-2302672896,2302935039,US
+2302607360,2302640127,SC
+2302738432,2302935039,US
2302935040,2303000575,KR
2303000576,2303189557,US
2303189558,2303189558,IE
-2303189559,2303190527,US
-2303190528,2303190783,AP
-2303190784,2303262719,US
+2303189559,2303262719,US
2303262720,2303328255,GB
2303328256,2303393791,CA
2303393792,2303459327,US
@@ -82342,7 +38871,8 @@
2305622016,2305687551,AU
2305687552,2305753087,US
2305753088,2305818623,AU
-2305818624,2306342911,US
+2305818624,2306015231,US
+2306080768,2306342911,US
2306342912,2306408447,NL
2306408448,2306473983,FR
2306473984,2306539519,CA
@@ -82368,10 +38898,12 @@
2309160960,2309226495,FI
2309226496,2309357567,US
2309357568,2309423103,AU
-2309423104,2309750783,US
+2309423104,2309685247,US
2309750784,2309816319,AU
2309816320,2309881855,US
2309881856,2309947391,NL
+2309947392,2309980159,US
+2309980160,2310012927,CA
2310012928,2310668287,US
2310668288,2310733823,CA
2310733824,2310864895,US
@@ -82382,7 +38914,7 @@
2311127040,2311192575,DE
2311192576,2311258111,FR
2311258112,2311323647,GB
-2311323648,2311847935,US
+2311389184,2311847935,US
2311847936,2311913471,IT
2311913472,2311979007,GB
2311979008,2312044543,US
@@ -82415,9 +38947,7 @@
2315649024,2315714559,SE
2315714560,2315780095,AU
2315780096,2315911167,US
-2315911168,2315976703,CA
-2315976704,2315976959,US
-2315976960,2316042239,CA
+2315911168,2316042239,CA
2316042240,2316173311,US
2316173312,2316238847,SE
2316238848,2316500991,US
@@ -82438,9 +38968,7 @@
2317413376,2317413631,ID
2317413632,2317414655,US
2317414656,2317414911,AU
-2317414912,2317417983,US
-2317417984,2317418239,AP
-2317418240,2317484031,US
+2317414912,2317484031,US
2317484032,2317487359,CA
2317487360,2317487615,US
2317487616,2317549567,CA
@@ -82466,14 +38994,16 @@
2319974400,2320039935,US
2320039936,2320105471,CA
2320105472,2320171007,US
-2320171008,2320236543,NZ
+2320171008,2320203775,NZ
+2320203776,2320236543,SG
2320236544,2320302079,US
2320302080,2320367615,AU
2320367616,2320433151,US
2320433152,2320564223,AU
2320564224,2320629759,CH
2320629760,2320695295,CA
-2320695296,2321547263,US
+2320695296,2321416191,US
+2321481728,2321547263,US
2321547264,2321612799,FR
2321678336,2321743871,US
2321809408,2321874943,ES
@@ -82485,9 +39015,11 @@
2322202624,2322268159,SE
2322268160,2322333695,JP
2322333696,2322923519,US
-2323054592,2323185663,CA
+2323054592,2323120127,CA
2323316736,2323382271,US
-2323382272,2323447807,NO
+2323382272,2323406847,NO
+2323406848,2323407103,DK
+2323407104,2323447807,NO
2323447808,2323775487,US
2323775488,2323841023,AU
2323841024,2323906559,CH
@@ -82501,13 +39033,8 @@
2328035328,2328100863,FR
2328100864,2328231935,US
2328231936,2328297471,GB
-2328297472,2328313855,EU
-2328313856,2328317695,NL
-2328317696,2328317951,FR
-2328317952,2328342527,EU
-2328342528,2328342783,DE
-2328342784,2328362751,EU
-2328362752,2328494079,DE
+2328313856,2328317951,NL
+2328363008,2328494079,DE
2328494080,2328559615,US
2328559616,2328625151,BE
2328690688,2328756223,BE
@@ -82523,7 +39050,7 @@
2329477120,2329542655,AU
2329542656,2329608191,CA
2329673728,2329739263,US
-2329739264,2329804799,CH
+2329739264,2329804799,SE
2329804800,2329870335,DE
2329870336,2329935871,CH
2329935872,2330001407,DE
@@ -82532,15 +39059,14 @@
2330132480,2330198015,SE
2330198016,2330263551,CH
2330263552,2330267647,US
-2330329088,2330394623,US
+2330267648,2330271743,CA
+2330271744,2330394623,US
2330394624,2330460159,FR
2330460160,2330525695,AT
2330525696,2330591231,SE
2330591232,2330656767,US
2330656768,2330722303,NZ
-2330722304,2331049983,US
-2331049984,2331115519,GB
-2331115520,2331181055,US
+2330722304,2331181055,US
2331181056,2331246591,JP
2331246592,2331443199,DE
2331443200,2331508735,US
@@ -82550,10 +39076,12 @@
2331836416,2331901951,GB
2331901952,2331967487,US
2332033024,2332098559,ID
-2332098560,2332622847,DE
+2332098560,2332360703,DE
+2332426240,2332622847,DE
2332622848,2332688383,CN
2332688384,2332753919,NL
-2332753920,2333868031,DE
+2332753920,2333736959,DE
+2333802496,2333868031,DE
2333933568,2334064639,DE
2334064640,2334916607,US
2334916608,2334982143,AU
@@ -82587,23 +39115,17 @@
2337865728,2337931263,DE
2337931264,2337996799,BE
2337996800,2338062335,GR
-2338062336,2338075391,EU
-2338075392,2338075647,IL
-2338075648,2338084863,EU
-2338084864,2338085375,IL
-2338085376,2338085631,EU
-2338085632,2338086143,IL
-2338086144,2338087423,EU
-2338087424,2338087679,IL
-2338087680,2338108927,EU
-2338108928,2338109951,IL
-2338109952,2338115071,EU
+2338083840,2338084095,TR
+2338086912,2338087423,DE
+2338092288,2338092543,SE
+2338113536,2338113791,FR
2338115072,2338115839,IL
-2338115840,2338124799,EU
+2338120448,2338120703,DE
+2338123008,2338123263,AT
+2338123520,2338123775,IT
2338124800,2338125055,GB
-2338125056,2338126591,EU
-2338126592,2338127615,IL
-2338127616,2338127871,EU
+2338125056,2338125311,FR
+2338125312,2338125567,GB
2338127872,2338324479,US
2338324480,2338390015,SE
2338390016,2338455551,FI
@@ -82616,9 +39138,7 @@
2338848768,2338914303,US
2338914304,2339962879,NO
2339962880,2340028415,US
-2340028416,2340081663,NL
-2340081664,2340081919,BR
-2340081920,2340093951,NL
+2340028416,2340093951,SE
2340093952,2340159487,FI
2340159488,2340225023,FR
2340225024,2340421631,US
@@ -82680,9 +39200,7 @@
2344353792,2344419327,AU
2344419328,2344484863,CN
2344484864,2344550399,PK
-2344550400,2344566783,EU
-2344566784,2344574975,IT
-2344574976,2344615935,EU
+2344609024,2344609279,IT
2344615936,2344878079,ID
2344878080,2346188799,CN
2346188800,2346450943,AU
@@ -82708,9 +39226,8 @@
2354249728,2354315263,AU
2354315264,2354380799,DE
2354380800,2354446335,NL
-2354446336,2354511871,SE
-2354511872,2354577407,CA
-2354577408,2354839551,US
+2354446336,2354511871,FR
+2354511872,2354839551,US
2354839552,2354905087,TW
2354905088,2355036159,FR
2355036160,2355101695,US
@@ -82737,9 +39254,7 @@
2359689216,2359754751,SE
2359754752,2359820287,CA
2359820288,2359885823,AU
-2359885824,2360215807,US
-2360215808,2360216063,US
-2360216064,2360672255,US
+2359885824,2360672255,US
2360672256,2360737791,DE
2360737792,2360868863,US
2360868864,2360934399,CA
@@ -82751,7 +39266,7 @@
2361917440,2361982975,NZ
2361982976,2362114047,US
2362114048,2362179583,IE
-2362179584,2362245119,GB
+2362179584,2362245119,US
2362245120,2362441727,CN
2362441728,2362572799,US
2362572800,2362638335,CN
@@ -82761,22 +39276,18 @@
2363490304,2363555839,CN
2363555840,2363883519,US
2363883520,2363949055,CA
-2363949056,2364342271,US
+2363949056,2364211199,US
+2364276736,2364342271,US
2364342272,2364407807,CN
2364407808,2364538879,US
2364538880,2364604415,CN
2364604416,2364671487,US
-2364671488,2364671743,CN
+2364671488,2364671743,MO
2364671744,2364675839,US
2364675840,2364676095,CA
-2364676096,2364676863,US
-2364676864,2364676867,EU
+2364676096,2364676867,US
2364676868,2364677119,GB
-2364677120,2364681727,US
-2364681728,2364681983,EU
-2364681984,2364724735,US
-2364724736,2364724991,AP
-2364724992,2364725503,US
+2364677120,2364725503,US
2364725504,2364725759,IL
2364725760,2364727807,US
2364727808,2364728063,DE
@@ -82793,7 +39304,7 @@
2365587456,2365589503,JO
2365589504,2365590527,US
2365590528,2365591039,NO
-2365591040,2365591455,EU
+2365591040,2365591455,US
2365591456,2365591551,NO
2365591552,2365593599,DE
2365593600,2365595647,NL
@@ -82807,9 +39318,7 @@
2365638656,2365640703,FR
2365640704,2365644799,GB
2365644800,2365652991,NO
-2365652992,2365983487,DE
-2365983488,2365983519,EU
-2365983520,2366032895,DE
+2365652992,2366032895,DE
2366032896,2366033151,GB
2366033152,2366111743,DE
2366111744,2366144511,MT
@@ -82837,15 +39346,10 @@
2366171136,2366308351,DE
2366308352,2366368255,GB
2366368256,2366368511,FR
-2366368512,2366369791,GB
-2366369792,2366370815,FR
-2366370816,2366371071,GB
-2366371072,2366373887,FR
+2366368512,2366373887,GB
2366373888,2367487999,DE
2367488000,2367553535,SI
-2367553536,2370579746,DE
-2370579747,2370579747,DE
-2370579748,2370895871,DE
+2367553536,2370895871,DE
2370895872,2370961407,SE
2370961408,2371158015,DE
2371158016,2371223551,RO
@@ -82861,26 +39365,27 @@
2372206592,2372214783,UA
2372214784,2372218879,DE
2372218880,2372222975,FR
-2372222976,2372239359,EU
-2372239360,2372264447,RU
+2372224512,2372224767,GB
+2372227072,2372227583,NO
+2372230400,2372230655,AT
+2372231424,2372231679,HU
+2372231680,2372232191,GB
+2372238730,2372238730,US
+2372239360,2372240383,SK
+2372240384,2372240895,NL
+2372240896,2372241151,AE
+2372241152,2372241407,NL
+2372241408,2372264447,RU
2372264448,2372266495,UA
2372266496,2372272127,RU
2372272128,2372337663,US
2372337664,2372403199,ID
2372403200,2372468735,US
2372468736,2372472831,NL
-2372472832,2372474367,PL
-2372474368,2372474623,US
-2372474624,2372474879,GB
+2372472832,2372474879,PL
2372474880,2372483071,RU
2372483072,2372485119,JO
-2372485120,2372485185,RU
-2372485186,2372485246,NL
-2372485247,2372485247,RU
-2372485248,2372485375,IN
-2372485376,2372485849,RU
-2372485850,2372485887,NL
-2372485888,2372487167,RU
+2372485120,2372487167,RU
2372487168,2372489215,FR
2372489216,2372493311,LB
2372493312,2372497407,ES
@@ -82890,27 +39395,11 @@
2372505600,2372507647,NL
2372507648,2372509695,IT
2372509696,2372510207,AE
-2372510208,2372510719,ES
-2372510720,2372510975,A2
-2372510976,2372511231,GR
-2372511232,2372511743,A2
-2372511744,2372511744,SI
-2372511745,2372511998,BA
-2372511999,2372512000,SI
-2372512001,2372512254,BA
-2372512255,2372512256,SI
-2372512257,2372512510,BA
-2372512511,2372512512,SI
-2372512513,2372512766,BA
-2372512767,2372512768,SI
-2372512769,2372513022,BA
-2372513023,2372513024,SI
-2372513025,2372513278,BA
-2372513279,2372513280,SI
-2372513281,2372513534,BA
-2372513535,2372513536,SI
-2372513537,2372513790,BA
-2372513791,2372513791,SI
+2372510208,2372510335,AO
+2372510336,2372510336,ES
+2372510337,2372510463,AO
+2372510464,2372511743,AE
+2372511744,2372513791,SI
2372513792,2372534271,GB
2372534272,2372665343,US
2372665344,2372730879,IT
@@ -82932,10 +39421,14 @@
2373627904,2373648383,CH
2373648384,2373910527,US
2373910528,2373911041,FI
-2373911042,2373911042,EU
+2373911042,2373911042,US
2373911043,2373976063,FI
2373976064,2374107135,US
-2374107136,2374172671,DE
+2374107136,2374171135,DE
+2374171136,2374171206,CH
+2374171207,2374171207,DE
+2374171208,2374171391,CH
+2374171392,2374172671,DE
2374172672,2374238207,US
2374238208,2374303743,AU
2374303744,2374369279,US
@@ -82947,11 +39440,11 @@
2374512640,2374514687,SK
2374514688,2374516735,ES
2374516736,2374524927,AM
-2374524928,2374526719,DE
-2374526720,2374526975,FR
-2374526976,2374527231,DE
-2374527232,2374527743,FR
-2374527744,2374529023,DE
+2374524928,2374525717,FR
+2374525718,2374525718,BE
+2374525719,2374528261,FR
+2374528262,2374528262,PL
+2374528263,2374529023,FR
2374529024,2374531071,RU
2374531072,2374533119,NL
2374533120,2374565887,HR
@@ -82968,54 +39461,17 @@
2374674432,2374676479,NL
2374676480,2374680575,LB
2374680576,2374684671,NL
-2374684672,2374684839,GB
-2374684840,2374684847,NO
-2374684848,2374684863,FI
-2374684864,2374684879,DK
-2374684880,2374684991,GB
-2374684992,2374685119,FI
-2374685120,2374685135,DK
-2374685136,2374685167,GB
-2374685168,2374685175,NO
-2374685176,2374685239,GB
-2374685240,2374685247,DK
-2374685248,2374685375,NO
-2374685376,2374685423,GB
-2374685424,2374685431,FI
-2374685432,2374685487,GB
-2374685488,2374685503,FI
-2374685504,2374685631,DK
-2374685632,2374685647,NO
-2374685648,2374685743,GB
-2374685744,2374685759,FI
-2374685760,2374685855,NL
-2374685856,2374685871,DK
-2374685872,2374685887,NL
-2374685888,2374686007,GB
-2374686008,2374686015,FI
-2374686016,2374686111,PL
-2374686112,2374686127,DK
-2374686128,2374686143,PL
-2374686144,2374686271,GB
-2374686272,2374686303,NL
-2374686304,2374686367,GB
-2374686368,2374686399,FI
-2374686400,2374686415,DK
-2374686416,2374686639,GB
-2374686640,2374686655,DK
-2374686656,2374686671,FI
-2374686672,2374686719,GB
+2374684672,2374686719,GB
2374686720,2374688767,NL
2374688768,2374696959,GB
2374696960,2374959103,US
-2374959104,2375024639,SE
+2374959104,2375024639,BE
2375024640,2375090175,DK
2375090176,2375155711,NO
2375155712,2375221247,US
-2375221248,2375352319,SE
-2375352320,2376233215,US
-2376233216,2376233471,AU
-2376233472,2376269823,US
+2375221248,2375286783,SE
+2375286784,2375352319,CH
+2375352320,2376269823,US
2376269824,2376335359,GB
2376335360,2376597503,US
2376597504,2376663039,AU
@@ -83023,8 +39479,8 @@
2376728576,2376761343,GB
2376761344,2376777727,CZ
2376777728,2376781823,BA
-2376781824,2376783871,ES
-2376783872,2376785919,FR
+2376781824,2376782847,DZ
+2376782848,2376785919,FR
2376785920,2376794111,UA
2376794112,2376859647,CH
2376859648,2376925183,FI
@@ -83039,41 +39495,39 @@
2377842688,2377908223,GB
2377908224,2378025983,US
2378025984,2378026239,NL
-2378026240,2378026495,EU
+2378026240,2378026495,US
2378026496,2378027007,FR
2378027008,2378170367,US
2378170368,2378235903,FI
2378235904,2378301439,US
-2378301440,2378303231,FR
-2378303232,2378303487,EU
-2378303488,2378366975,FR
+2378301440,2378366975,FR
2378366976,2378432511,US
2378432512,2378498047,TR
2378498048,2378500607,US
2378500608,2378500863,GB
-2378500864,2378501631,US
-2378501632,2378501887,EU
-2378501888,2378694655,US
+2378500864,2378694655,US
2378694656,2378760191,DE
2378760192,2378825727,AT
2378825728,2378891263,US
2378891264,2378956799,AT
-2378956800,2379218943,US
+2378956800,2379131391,US
+2379131392,2379131647,IN
+2379131648,2379218943,US
2379218944,2379284479,FI
2379284480,2380201983,US
2380201984,2380267519,KR
2380267520,2380398591,US
2380398592,2380464127,IL
-2380464128,2380464896,FR
-2380464897,2380464897,US
-2380464898,2380465407,FR
-2380465408,2380465663,AP
-2380465664,2380529663,FR
+2380464128,2380464895,FR
+2380464896,2380465151,US
+2380465152,2380529663,FR
2380529664,2380558847,GB
2380558848,2380559103,ZA
-2380559104,2380593663,GB
-2380593664,2380593919,AP
-2380593920,2380595199,GB
+2380559104,2380578815,GB
+2380578816,2380579071,JP
+2380579072,2380579327,GB
+2380579328,2380579583,HK
+2380579584,2380595199,GB
2380660736,2380726271,US
2380726272,2380791807,GB
2380791808,2381119487,US
@@ -83093,85 +39547,7 @@
2382233600,2382299135,US
2382299136,2382331903,GR
2382331904,2382335999,FR
-2382336000,2382338559,NL
-2382338560,2382338575,BE
-2382338576,2382338623,NL
-2382338624,2382338639,CA
-2382338640,2382338687,NL
-2382338688,2382338703,CA
-2382338704,2382338751,NL
-2382338752,2382338767,CA
-2382338768,2382338815,NL
-2382338816,2382338831,BE
-2382338832,2382338879,NL
-2382338880,2382338895,LU
-2382338896,2382338943,NL
-2382338944,2382338959,BE
-2382338960,2382339007,NL
-2382339008,2382339023,CH
-2382339024,2382339087,NL
-2382339088,2382339103,IT
-2382339104,2382339119,NL
-2382339120,2382339135,PT
-2382339136,2382339151,FR
-2382339152,2382339167,ES
-2382339168,2382339183,DK
-2382339184,2382339199,CH
-2382339200,2382339215,NL
-2382339216,2382339231,DE
-2382339232,2382339247,PL
-2382339248,2382339263,AT
-2382339264,2382339279,FR
-2382339280,2382339295,CZ
-2382339296,2382339311,RO
-2382339312,2382339327,BG
-2382339328,2382339343,NL
-2382339344,2382339359,GB
-2382339360,2382339375,NL
-2382339376,2382339391,AU
-2382339392,2382339407,FR
-2382339408,2382339423,BE
-2382339424,2382339439,BR
-2382339440,2382339455,KY
-2382339456,2382339471,NL
-2382339472,2382339487,CA
-2382339488,2382339503,CY
-2382339504,2382339519,CO
-2382339520,2382339535,CH
-2382339536,2382339551,AE
-2382339552,2382339567,EE
-2382339568,2382339583,US
-2382339584,2382339599,NL
-2382339600,2382339615,FI
-2382339616,2382339631,NL
-2382339632,2382339647,FR
-2382339648,2382339663,ES
-2382339664,2382339679,GI
-2382339680,2382339695,GR
-2382339696,2382339711,HK
-2382339712,2382339727,NL
-2382339728,2382339743,HU
-2382339744,2382339759,IN
-2382339760,2382339775,IE
-2382339776,2382339791,BE
-2382339792,2382339807,IL
-2382339808,2382339823,NO
-2382339824,2382339839,LI
-2382339840,2382339855,NL
-2382339856,2382339871,LT
-2382339872,2382339887,NL
-2382339888,2382339903,LU
-2382339904,2382339919,CH
-2382339920,2382339935,MA
-2382339936,2382339951,MC
-2382339952,2382339983,NL
-2382339984,2382339999,NO
-2382340000,2382340015,NZ
-2382340016,2382340031,UA
-2382340032,2382340047,BE
-2382340048,2382340063,RU
-2382340064,2382340079,SG
-2382340080,2382340095,SE
+2382336000,2382340095,NL
2382340096,2382342143,CH
2382342144,2382344191,AT
2382344192,2382346239,NL
@@ -83181,163 +39557,38 @@
2382368768,2382372863,CA
2382372864,2382382847,US
2382382848,2382383103,LU
-2382383104,2382383231,AE
-2382383232,2382397439,US
-2382397440,2382397791,CN
-2382397792,2382397823,US
-2382397824,2382397863,CN
-2382397864,2382397871,US
-2382397872,2382398015,CN
-2382398016,2382398047,US
-2382398048,2382398207,CN
-2382398208,2382398215,US
-2382398216,2382398399,CN
-2382398400,2382398463,US
-2382398464,2382398479,CN
-2382398480,2382398487,US
-2382398488,2382398495,CN
-2382398496,2382398511,US
-2382398512,2382398751,CN
-2382398752,2382398759,US
-2382398760,2382398783,CN
-2382398784,2382398799,US
-2382398800,2382398895,CN
-2382398896,2382398903,US
-2382398904,2382398943,CN
-2382398944,2382398975,US
-2382398976,2382399071,CN
-2382399072,2382399087,US
-2382399088,2382399519,CN
-2382399520,2382399551,US
-2382399552,2382399695,CN
-2382399696,2382399711,US
-2382399712,2382399727,CN
-2382399728,2382399743,US
-2382399744,2382400127,CN
-2382400128,2382400135,US
-2382400136,2382400311,CN
-2382400312,2382400319,US
-2382400320,2382400351,CN
-2382400352,2382400367,US
-2382400368,2382400703,CN
-2382400704,2382400735,US
-2382400736,2382400927,CN
-2382400928,2382400943,US
-2382400944,2382400967,CN
-2382400968,2382400975,US
-2382400976,2382400983,CN
-2382400984,2382400991,US
-2382400992,2382401135,CN
-2382401136,2382401279,US
-2382401280,2382401535,CN
-2382401536,2382409727,CA
-2382409728,2382422015,US
+2382383104,2382383209,US
+2382383210,2382383210,AE
+2382383211,2382401535,US
+2382401536,2382405631,CA
+2382405632,2382422015,US
2382422016,2382426111,JM
2382426112,2382430207,US
2382430208,2382626815,CA
-2382626816,2382651391,US
-2382651392,2382651487,CN
-2382651488,2382651519,CA
-2382651520,2382651903,CN
-2382651904,2382651935,CA
-2382651936,2382652015,CN
-2382652016,2382652023,US
-2382652024,2382652063,CN
-2382652064,2382652095,US
-2382652096,2382652223,CN
-2382652224,2382652287,US
-2382652288,2382652343,CN
-2382652344,2382652351,US
-2382652352,2382652383,CN
-2382652384,2382652415,US
-2382652416,2382652583,CN
-2382652584,2382652591,US
-2382652592,2382652743,CN
-2382652744,2382652751,US
-2382652752,2382652767,CN
-2382652768,2382652783,US
-2382652784,2382652847,CN
-2382652848,2382652855,US
-2382652856,2382653007,CN
-2382653008,2382653023,US
-2382653024,2382653031,CN
-2382653032,2382653039,US
-2382653040,2382653143,CN
-2382653144,2382653151,US
-2382653152,2382653631,CN
-2382653632,2382653663,US
-2382653664,2382653711,CN
-2382653712,2382653727,US
-2382653728,2382653759,CN
-2382653760,2382653823,CA
-2382653824,2382654007,CN
-2382654008,2382654015,CA
-2382654016,2382654031,US
-2382654032,2382654039,CN
-2382654040,2382654071,US
-2382654072,2382654079,CN
-2382654080,2382654143,US
-2382654144,2382654607,CN
-2382654608,2382654615,US
-2382654616,2382654735,CN
-2382654736,2382654751,US
-2382654752,2382654847,CN
-2382654848,2382654855,US
-2382654856,2382654863,CA
-2382654864,2382654983,CN
-2382654984,2382654991,US
-2382654992,2382655359,CN
-2382655360,2382655423,CA
-2382655424,2382655455,US
-2382655456,2382655807,CN
-2382655808,2382655815,US
-2382655816,2382656031,CN
-2382656032,2382656063,CA
-2382656064,2382656167,CN
-2382656168,2382656175,US
-2382656176,2382656455,CN
-2382656456,2382656463,US
-2382656464,2382656487,CN
-2382656488,2382656511,US
-2382656512,2382656567,CN
-2382656568,2382656575,US
-2382656576,2382656687,CN
-2382656688,2382656695,US
-2382656696,2382656795,CN
-2382656796,2382656799,US
-2382656800,2382656831,CN
-2382656832,2382656847,US
-2382656848,2382656991,CN
-2382656992,2382657023,US
+2382626816,2382654207,US
+2382654208,2382654463,CN
+2382654464,2382657023,US
2382657024,2382657535,CN
-2382657536,2382657663,US
-2382657664,2382658559,CN
+2382657536,2382657791,US
+2382657792,2382658559,CN
2382658560,2382658815,CA
-2382658816,2382659199,CN
-2382659200,2382659247,US
-2382659248,2382659295,CN
-2382659296,2382659327,US
-2382659328,2382659375,CN
-2382659376,2382659455,US
-2382659456,2382659583,CN
-2382659584,2382678783,US
-2382678784,2382679039,CA
+2382658816,2382659071,CN
+2382659072,2382678527,US
+2382678528,2382679039,CA
2382679040,2382680063,US
2382680064,2382684159,CA
2382684160,2382692351,US
2382692352,2383085567,CA
2383085568,2383151103,US
2383151104,2385903615,CA
-2385903616,2385915903,US
+2385903616,2385905663,US
+2385907712,2385908223,US
+2385911808,2385915903,US
2385915904,2385919999,CA
-2385920000,2385945007,US
-2385945008,2385945015,MX
-2385945016,2385968127,US
-2385968128,2385968383,CA
-2385968384,2385969151,US
-2385969152,2386067455,CA
-2386067456,2386083839,US
-2386083840,2386624511,CA
+2385920000,2385952767,US
+2385954816,2385955327,US
+2385956864,2385969151,US
+2385969152,2386624511,CA
2386624512,2386690047,US
2386690048,2386988287,CA
2386988288,2386988543,CH
@@ -83347,16 +39598,16 @@
2387003392,2387003647,GB
2387003648,2387003903,CA
2387003904,2387004159,GB
-2387004160,2387345151,CA
+2387004160,2387344127,CA
+2387344128,2387344895,US
+2387344896,2387345151,CA
2387345152,2387345407,US
2387345408,2387410943,CA
2387410944,2387476479,US
2387476480,2387542015,CA
2387542016,2387607551,US
2387607552,2388328447,CA
-2388328448,2388340895,US
-2388340896,2388340903,CA
-2388340904,2388345343,US
+2388328448,2388345343,US
2388345344,2388345599,LK
2388345600,2388350207,US
2388350208,2388350463,LK
@@ -83371,20 +39622,28 @@
2390995456,2391015423,US
2391015424,2391277567,CA
2391277568,2391343103,US
-2391343104,2394947583,CA
+2391343104,2393044095,CA
+2393044096,2393044223,US
+2393044224,2394947583,CA
2394947584,2395013119,US
2395013120,2395209727,CA
2395209728,2395340799,US
-2395340800,2397700095,CA
+2395340800,2395804159,CA
+2395804160,2395804415,GB
+2395804416,2395814911,CA
+2395814912,2395815167,US
+2395815168,2395841279,CA
+2395841280,2395841535,GB
+2395841536,2395854079,CA
+2395854080,2395854335,US
+2395854336,2397700095,CA
2397700096,2397765631,US
2397765632,2398748671,CA
2398748672,2398945279,US
2398945280,2399010815,CA
2399010816,2399109119,US
2399109120,2399141887,PR
-2399141888,2401036287,US
-2401036288,2401036543,EU
-2401036544,2401828863,US
+2399141888,2401828863,US
2401828864,2401894399,GB
2401894400,2402222079,US
2402222080,2402287615,IE
@@ -83446,7 +39705,8 @@
2411462656,2411593727,AU
2411593728,2411986943,US
2411986944,2412052479,FR
-2412052480,2412576767,US
+2412052480,2412314623,US
+2412445696,2412576767,US
2412576768,2412642303,AT
2412642304,2412773375,US
2412838912,2412904447,US
@@ -83484,43 +39744,35 @@
2416377856,2416443391,CN
2416443392,2416705535,US
2416705536,2416771071,CN
-2416771072,2416963583,US
-2416963584,2416963839,EU
-2416963840,2416967679,US
+2416771072,2416967679,US
2416967680,2417033215,IN
2417033216,2417229823,US
2417229824,2417295359,ES
2417295360,2417360895,PT
2417360896,2417491967,CR
-2417491968,2417557503,GR
+2417491968,2417557503,GB
2417557504,2417688575,US
2417688576,2417754111,SE
2417754112,2418016255,US
2418016256,2418081791,GB
-2418081792,2418311167,US
-2418311168,2418313215,IN
-2418313216,2418315263,US
-2418315264,2418315775,IN
-2418315776,2418323007,US
+2418081792,2418312959,US
+2418312960,2418313215,IN
+2418313216,2418323007,US
2418323008,2418323008,PH
-2418323009,2418323455,US
-2418323456,2418331647,IN
-2418331648,2418332159,US
-2418332160,2418332415,IN
-2418332416,2418336767,US
-2418336768,2418337535,IN
-2418337536,2418337791,US
-2418337792,2418338047,IN
-2418338048,2418338303,US
+2418323009,2418337023,US
+2418337024,2418337279,IN
+2418337280,2418338303,US
2418338304,2418338815,IN
2418338816,2418341887,US
-2418341888,2418343935,IN
-2418343936,2418606079,US
+2418341888,2418342143,IN
+2418342144,2418606079,US
2418606080,2418671615,DE
2418671616,2418737151,US
2418737152,2418802687,NL
-2418802688,2418868223,EU
-2418868224,2419326975,US
+2418868224,2418998271,US
+2418998272,2418998527,GB
+2418998528,2419064831,US
+2419130368,2419326975,US
2419326976,2419392511,CN
2419392512,2419458047,AU
2419458048,2419523583,NL
@@ -83543,12 +39795,9 @@
2421555200,2421620735,US
2421620736,2421686271,GB
2421686272,2422145023,US
-2422145024,2422153215,NL
-2422153216,2422153471,EU
-2422153472,2422154239,NL
+2422145024,2422154239,NL
2422154240,2422155263,US
-2422155264,2422155519,AP
-2422155520,2422161407,NL
+2422155264,2422161407,NL
2422161408,2422163455,GB
2422163456,2422165503,US
2422165504,2422167551,HK
@@ -83574,25 +39823,21 @@
2425487360,2426667007,US
2426667008,2426732543,NO
2426732544,2426798079,FR
-2426798080,2427207679,US
+2426798080,2426929151,US
+2426994688,2427224063,US
+2427224064,2427256831,CA
2427256832,2427322367,GB
2427322368,2427453439,US
2427453440,2427536895,NO
2427536896,2427537151,US
-2427537152,2427544575,NO
-2427544576,2427544831,AP
-2427544832,2427584511,NO
+2427537152,2427584511,NO
2427584512,2427650047,GB
2427650048,2427846655,NO
2427846656,2428174335,US
2428174336,2428178431,GB
-2428178432,2428183562,US
-2428183563,2428183563,EU
-2428183564,2428567551,US
+2428178432,2428567551,US
2428567552,2428633087,NO
-2428633088,2428696831,CA
-2428696832,2428697087,EU
-2428697088,2428698623,CA
+2428633088,2428698623,CA
2428698624,2428960767,US
2428960768,2429026303,MY
2429026304,2429091839,CH
@@ -83607,54 +39852,48 @@
2429681664,2429878271,US
2429878272,2429943807,JP
2429943808,2430009343,HK
-2430009344,2432172031,US
+2430009344,2430205951,US
+2430271488,2432172031,US
2432172032,2432237567,BE
-2432237568,2432575487,US
-2432575488,2432576511,DE
-2432576512,2432577535,US
-2432577536,2432579583,GB
-2432579584,2432602879,US
-2432602880,2432603135,PL
-2432603136,2432604159,US
-2432604160,2432606207,GB
-2432606208,2432610303,US
-2432610304,2432614399,IT
-2432614400,2432616447,NL
-2432616448,2432616448,US
-2432616449,2432617472,NL
-2432617473,2432630783,US
+2432237568,2432568575,US
+2432568576,2432568831,BE
+2432568832,2432577535,US
+2432577536,2432577791,GB
+2432577792,2432587263,US
+2432587264,2432587519,IE
+2432587520,2432616447,US
+2432616448,2432617471,NL
+2432617472,2432630783,US
2432630784,2432696319,CN
2432696320,2433247231,NL
2433247232,2433247487,GB
2433247488,2433810431,NL
2433810432,2433875967,GB
-2433875968,2435115775,NL
-2435115776,2435116031,GB
-2435116032,2436300799,NL
+2433875968,2435055615,NL
+2435055616,2435121151,GB
+2435121152,2436300799,NL
2436300800,2436366335,GB
2436366336,2436759551,NL
2436759552,2436767743,GB
-2436767744,2436767874,EU
+2436767744,2436767874,NL
2436767875,2436767875,DE
-2436767876,2436767999,EU
+2436767876,2436767999,NL
2436768000,2436825087,GB
-2436825088,2441150463,NL
+2436825088,2436955647,NL
+2436955648,2436955903,DE
+2436955904,2441150463,NL
2441150464,2441215999,BE
2441216000,2446983167,NL
-2446983168,2447015935,EU
-2447015936,2447015939,DK
-2447015940,2447015943,SE
-2447015944,2447015947,GB
-2447015948,2447015951,HK
-2447015952,2447048703,EU
2447048704,2447376383,NL
-2447376384,2447441919,GB
-2447441920,2447507455,DE
+2447376384,2447384575,GB
+2447384576,2447384831,BE
+2447384832,2447441919,GB
+2447441920,2447446271,DE
+2447446272,2447446527,GB
+2447446528,2447507455,DE
2447507456,2447572991,FR
2447572992,2447638527,GB
-2447638528,2447679819,DE
-2447679820,2447679839,IT
-2447679840,2447704063,DE
+2447638528,2447704063,DE
2447704064,2447769599,GB
2447769600,2447835135,DE
2447835136,2447900671,FR
@@ -83662,9 +39901,9 @@
2447966208,2448031743,GB
2448031744,2448097279,CH
2448097280,2448162815,SE
-2448162816,2448174591,HU
-2448174592,2448174847,RO
-2448174848,2448228351,HU
+2448162816,2448183295,HU
+2448183296,2448183551,BG
+2448183552,2448228351,HU
2448228352,2448293887,PL
2448293888,2448359423,FR
2448359424,2448424959,GB
@@ -83674,7 +39913,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
@@ -83699,15 +39940,12 @@
2449473536,2449477631,DE
2449477632,2449479679,AL
2449479680,2449481727,FR
-2449481728,2449489919,RO
-2449489920,2449491967,FR
-2449491968,2449492223,NL
-2449492224,2449492273,RU
-2449492274,2449492341,NL
-2449492342,2449492351,RU
-2449492352,2449492805,NL
-2449492806,2449492814,IN
-2449492815,2449494015,NL
+2449481728,2449485823,DE
+2449485824,2449489919,RO
+2449489920,2449490943,FR
+2449490944,2449491199,DE
+2449491200,2449491967,FR
+2449491968,2449494015,NL
2449494016,2449496063,UA
2449496064,2449498111,FR
2449498112,2449506303,DE
@@ -83724,11 +39962,9 @@
2450849792,2450915327,SE
2450915328,2451026431,US
2451026432,2451026687,AU
-2451026688,2451031039,US
-2451031040,2451031295,AP
-2451031296,2451035135,US
-2451035136,2451035391,EU
-2451035392,2451986959,US
+2451026688,2451042815,US
+2451042816,2451043071,ZA
+2451043072,2451986959,US
2451986960,2451986960,GB
2451986961,2452619263,US
2452619264,2452684799,IT
@@ -83751,21 +39987,12 @@
2453805056,2453807103,FI
2453807104,2453815295,GB
2453815296,2453831679,RO
-2453831680,2453831807,IR
-2453831808,2453831871,IQ
-2453831872,2453832959,IR
-2453832960,2453833727,IQ
+2453831680,2453833727,IQ
2453833728,2453835775,ES
2453835776,2453837823,FR
-2453837824,2453838591,LU
-2453838592,2453838847,AT
-2453838848,2453839359,SE
-2453839360,2453839871,EU
2453839872,2453852159,RU
2453852160,2453856255,RO
-2453856256,2453856679,DE
-2453856680,2453856687,GB
-2453856688,2453858303,DE
+2453856256,2453858303,DE
2453858304,2453860351,SE
2453860352,2453864447,ES
2453864448,2453929983,CH
@@ -83782,25 +40009,31 @@
2454781952,2454847487,FI
2454847488,2454851583,US
2454851584,2454851839,DK
-2454851840,2454852095,US
-2454852096,2454852351,US
-2454852352,2454853119,US
+2454851840,2454853119,US
2454853120,2454853375,DK
-2454853376,2454870015,US
-2454870016,2454870527,CL
-2454870528,2454885503,US
+2454853376,2454885503,US
2454885504,2454885631,GB
2454885632,2454887423,US
2454887424,2454887679,DK
2454887680,2454904999,US
2454905000,2454905007,BR
-2454905008,2454906943,US
+2454905008,2454905919,US
+2454905920,2454905951,AR
+2454905952,2454906943,US
2454906944,2454906951,CL
-2454906952,2454913023,US
+2454906952,2454907265,US
+2454907266,2454907266,CL
+2454907267,2454907903,US
+2454907904,2454908159,VE
+2454908160,2454913023,US
2454913024,2454978559,CL
2454978560,2455175167,US
2455175168,2455240703,GB
-2455240704,2455371775,US
+2455240704,2455244799,US
+2455244800,2455245567,AU
+2455245568,2455245823,US
+2455245824,2455246847,AU
+2455246848,2455371775,US
2455371776,2455437311,GB
2455437312,2455830527,US
2455830528,2455896063,GB
@@ -83811,11 +40044,8 @@
2456223744,2456289279,BE
2456289280,2456354815,NL
2456354816,2456420351,GB
-2456420352,2456485887,EU
2456485888,2456551423,DE
-2456551424,2456603135,AT
-2456603136,2456603391,EU
-2456603392,2456616959,AT
+2456551424,2456616959,AT
2456616960,2456682495,CH
2456682496,2456748031,HU
2456748032,2456813567,US
@@ -83824,18 +40054,23 @@
2457075712,2457141247,AU
2457206784,2457272319,AU
2457272320,2457337855,FI
-2457337856,2457360639,RU
-2457360640,2457360895,UA
+2457337856,2457339903,RU
+2457339904,2457340927,BA
+2457340928,2457343999,RU
+2457344000,2457346047,UA
+2457346048,2457360383,RU
+2457360384,2457360895,CZ
2457360896,2457361151,RU
2457361152,2457361407,CZ
-2457361408,2457366527,RU
+2457361408,2457365503,RU
+2457365504,2457366527,CZ
2457366528,2457367551,GB
2457367552,2457372671,CZ
2457372672,2457376767,RU
2457376768,2457378815,DE
2457378816,2457393151,RU
-2457393152,2457398271,CZ
-2457398272,2457403391,RU
+2457393152,2457397247,CZ
+2457397248,2457403391,RU
2457403392,2457599999,US
2457600000,2457665535,GR
2457665536,2458058751,US
@@ -83848,9 +40083,8 @@
2458451968,2458648575,US
2458648576,2458714111,DE
2458714112,2458779647,ZA
-2458779648,2459191295,US
-2459191296,2459191551,CH
-2459191552,2459631615,US
+2458779648,2458910719,US
+2458976256,2459631615,US
2459631616,2459697151,CL
2459697152,2459828223,US
2459828224,2459860991,RU
@@ -83859,8 +40093,8 @@
2459959296,2460024831,US
2460024832,2460090367,FI
2460090368,2460152319,GB
-2460152320,2460152831,FR
-2460152832,2460155903,GB
+2460152320,2460152575,FR
+2460152576,2460155903,GB
2460155904,2460221439,US
2460221440,2460286975,BR
2460286976,2460549119,US
@@ -83879,29 +40113,21 @@
2461466624,2461597695,US
2461597696,2461599743,CH
2461599744,2461601791,SE
-2461601792,2461603762,GB
-2461603763,2461603763,GB
-2461603764,2461605887,GB
+2461601792,2461605887,GB
2461605888,2461607935,LB
2461607936,2461609983,FR
-2461609984,2461610495,BE
-2461610496,2461611519,NL
-2461611520,2461611575,BE
-2461611576,2461611583,NL
-2461611584,2461612031,BE
-2461612032,2461613271,IL
-2461613272,2461613279,PS
-2461613280,2461613567,IL
+2461609984,2461611007,BE
+2461611008,2461612031,NL
+2461612032,2461613567,IL
2461613568,2461613823,PS
2461613824,2461614079,IL
2461614080,2461630463,TR
-2461630464,2461659135,RU
-2461659136,2461659647,UA
-2461659648,2461659903,RU
-2461659904,2461659905,UA
-2461659906,2461659913,RU
-2461659914,2461660159,UA
-2461660160,2461663231,RU
+2461630464,2461646847,NL
+2461646848,2461659391,RU
+2461659392,2461659647,UA
+2461659648,2461662463,RU
+2461662464,2461662719,NL
+2461662720,2461663231,RU
2461663232,2461794303,US
2461794304,2461859839,GB
2461859840,2461990911,US
@@ -83910,7 +40136,9 @@
2462121984,2462187519,PT
2462187520,2462253055,GB
2462253056,2462326783,AU
-2462384128,2463236095,US
+2462384128,2462580735,US
+2462580736,2462646271,GB
+2462646272,2463236095,US
2463236096,2463301631,AT
2463301632,2463367167,FI
2463367168,2463432703,SI
@@ -83946,54 +40174,8 @@
2465681408,2465683455,SE
2465683456,2465685503,FR
2465685504,2465690367,DE
-2465690368,2465690431,US
-2465690432,2465690623,IT
-2465690624,2465690639,GB
-2465690640,2465690879,IT
-2465690880,2465690895,CH
-2465690896,2465691135,IT
-2465691136,2465691151,DE
-2465691152,2465691391,IT
-2465691392,2465691407,NL
-2465691408,2465691647,IT
-2465691648,2465691663,BR
-2465691664,2465691903,IT
-2465691904,2465691919,JP
-2465691920,2465692159,IT
-2465692160,2465692175,CN
-2465692176,2465692415,IT
-2465692416,2465692431,LT
-2465692432,2465692671,IT
-2465692672,2465692687,FR
-2465692688,2465692927,IT
-2465692928,2465692943,ID
-2465692944,2465693183,IT
-2465693184,2465693199,RU
-2465693200,2465693439,IT
-2465693440,2465693455,FR
-2465693456,2465693695,IT
-2465693696,2465719039,NO
-2465719040,2465719167,FR
-2465719168,2465719295,US
-2465719296,2465719423,FR
-2465719424,2465719551,US
-2465719552,2465719679,FR
-2465719680,2465719807,US
-2465719808,2465719935,FR
-2465719936,2465720063,US
-2465720064,2465720191,FR
-2465720192,2465720319,US
-2465720320,2465720351,NO
-2465720352,2465720383,DK
-2465720384,2465720607,NO
-2465720608,2465720639,DK
-2465720640,2465720863,NO
-2465720864,2465720895,DK
-2465720896,2465721119,NO
-2465721120,2465721151,DK
-2465721152,2465721375,NO
-2465721376,2465721407,DK
-2465721408,2465726463,NO
+2465690368,2465693695,IT
+2465693696,2465726463,NO
2465726464,2465791999,CH
2465792000,2465857535,FR
2465857536,2465923071,US
@@ -84021,9 +40203,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
@@ -84035,11 +40223,7 @@
2467233792,2468020223,US
2468020224,2468085759,GR
2468085760,2468151295,US
-2468151296,2468180479,DK
-2468180480,2468180735,EU
-2468180736,2468189663,DK
-2468189664,2468189695,GB
-2468189696,2468216831,DK
+2468151296,2468216831,DK
2468216832,2468282367,KZ
2468282368,2468347903,US
2468347904,2468478975,CZ
@@ -84055,9 +40239,7 @@
2469724160,2469789695,US
2469789696,2469855231,DE
2469855232,2470182911,US
-2470182912,2470183167,CH
-2470183168,2470183423,AP
-2470183424,2470248447,CH
+2470182912,2470248447,CH
2470248448,2470510591,US
2470510592,2470576127,BR
2470576128,2470641663,AU
@@ -84084,18 +40266,24 @@
2472673280,2472869887,FR
2472869888,2472935423,US
2472935424,2473000959,GR
-2473000960,2473344255,US
-2473344256,2473344511,GB
-2473344512,2473394175,US
+2473000960,2473332735,US
+2473332736,2473333247,AE
+2473333248,2473342975,US
+2473342976,2473345023,GB
+2473345024,2473345535,US
+2473345536,2473346047,AE
+2473346048,2473348095,US
+2473348096,2473348607,SA
+2473348608,2473379839,US
+2473379840,2473381887,AU
+2473381888,2473394175,US
2473394176,2473459711,AU
2473459712,2473525247,ZA
2473525248,2473656319,NO
2473656320,2473721855,US
2473721856,2473730559,GB
2473730560,2473731071,HK
-2473731072,2473785599,GB
-2473785600,2473785855,AP
-2473785856,2473787391,GB
+2473731072,2473787391,GB
2473787392,2474049535,US
2474049536,2474115071,GB
2474115072,2474246143,US
@@ -84130,11 +40318,10 @@
2477850624,2478047231,US
2478047232,2478112767,SE
2478112768,2478178303,NL
-2478178304,2478229759,US
-2478229760,2478230015,AP
-2478230016,2478309375,US
+2478178304,2478309375,US
2478309376,2478374911,GB
-2478374912,2478440447,US
+2478374912,2478404095,US
+2478407680,2478440447,US
2478440448,2478505983,SE
2478505984,2478571519,US
2478571520,2478702591,GB
@@ -84147,11 +40334,7 @@
2479226880,2479357951,US
2479357952,2479423487,AU
2479423488,2479489023,GB
-2479489024,2479584767,US
-2479584768,2479585023,US
-2479585024,2479586815,US
-2479586816,2479587071,US
-2479587072,2479620095,US
+2479489024,2479620095,US
2479620096,2479685631,DE
2479685632,2479947775,US
2479947776,2480013311,AU
@@ -84167,20 +40350,17 @@
2481455104,2481520639,SK
2481520640,2481848319,IL
2481848320,2482175999,US
-2482176000,2482193919,FI
-2482193920,2482194175,SG
-2482194176,2482208767,FI
+2482176000,2482208767,FI
2482208768,2482216959,US
2482216960,2482225151,FI
-2482225152,2482231295,SG
-2482231296,2482231551,CN
-2482231552,2482233343,SG
+2482225152,2482233343,SG
2482233344,2482241535,CN
2482241536,2482634751,US
2482634752,2482700287,FR
2482700288,2482765823,CZ
2482765824,2482831359,IE
2482831360,2483027967,US
+2483027968,2483093503,DO
2483093504,2483159039,US
2483159040,2483224575,SE
2483224576,2483290111,GB
@@ -84192,22 +40372,25 @@
2486697984,2486763519,AT
2486763520,2486960127,US
2486960128,2487025663,FR
-2487025664,2487877631,US
-2487877632,2487943167,A2
-2487943168,2488205311,US
+2487025664,2488205311,US
2488205312,2488270847,GB
2488270848,2488336383,US
2488336384,2488401919,PL
2488401920,2488532991,NO
2488532992,2488795135,US
2488795136,2488860671,GB
-2488860672,2489995544,US
-2489995545,2489995545,AP
-2489995546,2490007551,US
-2490007552,2490007807,GB
-2490007808,2490041599,US
-2490041600,2490041855,AP
-2490041856,2490043391,US
+2488860672,2489647103,US
+2489647104,2489712639,DO
+2489712640,2489745407,PE
+2489745408,2489778175,HT
+2489778176,2489843711,DO
+2489843712,2489995519,US
+2489995520,2489995544,SG
+2489995545,2489995545,US
+2489995546,2489995775,SG
+2489995776,2490013695,US
+2490013696,2490015743,GB
+2490015744,2490043391,US
2490043392,2490043647,GB
2490043648,2490236927,US
2490236928,2490302463,LU
@@ -84225,60 +40408,59 @@
2492465152,2492530687,US
2492530688,2492596223,AU
2492596224,2492727295,US
-2492727296,2492792831,NL
+2492727296,2492792831,SE
2492792832,2492923903,US
2492923904,2492989439,OM
2492989440,2493513727,US
2493513728,2493579263,SE
2493579264,2493644799,JP
-2493644800,2494103551,US
+2493644800,2493710335,US
+2493751296,2493755391,US
+2493755904,2493756415,US
+2493775872,2494103551,US
2494103552,2494169087,FR
2494169088,2494562303,US
2494562304,2494627839,GB
-2494627840,2494650367,US
-2494650368,2494652415,BR
-2494652416,2494660607,US
-2494660608,2494661119,EU
-2494661120,2494676991,US
-2494676992,2494681087,AU
-2494681088,2494683391,US
-2494683392,2494683647,AP
-2494683648,2494689791,US
+2494627840,2494650623,US
+2494650624,2494650879,BR
+2494650880,2494657535,US
+2494657536,2494657791,CO
+2494657792,2494677247,US
+2494677248,2494677503,AU
+2494677504,2494677759,US
+2494677760,2494678015,AU
+2494678016,2494683135,US
+2494683136,2494683391,SG
+2494683392,2494689791,US
2494689792,2494690047,IN
2494690048,2494889983,US
2494889984,2494955519,GB
2494955520,2495021055,AU
2495021056,2495152127,US
-2495152128,2495217663,EU
2495217664,2495283199,US
2495283200,2495348735,CH
-2495348736,2495348991,US
-2495348992,2495349051,DE
-2495349052,2495349052,EU
-2495349053,2495349247,DE
-2495349248,2495351039,US
-2495351040,2495351295,EU
-2495351296,2495353143,US
-2495353144,2495353144,EU
-2495353145,2495410943,US
+2495348736,2495410943,US
2495410944,2495411199,AU
-2495411200,2495412223,US
-2495412224,2495412479,AP
-2495412480,2495807487,US
+2495411200,2495807487,US
2495807488,2495873023,AU
2495873024,2495938559,CH
2495938560,2496004095,GB
2496004096,2496069631,AT
2496069632,2496135167,US
2496135168,2496200703,NL
-2496200704,2498475007,MX
+2496200704,2497682431,MX
+2497682432,2497683455,EC
+2497683456,2498475007,MX
2498475008,2498476031,EC
-2498476032,2499128575,MX
+2498476032,2499110519,MX
+2499110520,2499110527,NI
+2499110528,2499128575,MX
2499128576,2499128831,US
2499128832,2499477503,MX
2499477504,2499543039,DE
2499543040,2499674111,GB
2499674112,2499739647,US
+2499739648,2499805183,DO
2499805184,2499870719,TR
2499870720,2500001791,US
2500001792,2500034559,GE
@@ -84286,46 +40468,50 @@
2500038656,2500040703,IT
2500040704,2500042751,LB
2500042752,2500046847,SA
-2500046848,2500047359,IT
-2500047360,2500047615,DE
-2500047616,2500047871,GR
-2500047872,2500048895,IT
+2500046848,2500048895,IT
2500048896,2500050943,MD
2500050944,2500067327,KZ
-2500067328,2500141055,US
+2500067328,2500132991,US
+2500132992,2500133023,NL
+2500133024,2500141055,US
2500141056,2500141311,IE
2500141312,2500141471,US
2500141472,2500141503,IE
2500141504,2500141823,US
-2500141824,2500142847,IE
-2500142848,2500142975,US
-2500142976,2500144127,IE
+2500141824,2500144127,IE
2500144128,2500144895,US
2500144896,2500145151,IE
-2500145152,2500149247,US
-2500149248,2500149759,GB
-2500149760,2500150655,US
-2500150656,2500150719,GB
-2500150720,2500157439,US
-2500157440,2500165631,GB
-2500165632,2500175871,US
+2500145152,2500149503,US
+2500149504,2500149759,GB
+2500149760,2500150527,US
+2500150528,2500150783,GB
+2500150784,2500158463,US
+2500158464,2500158719,GB
+2500158720,2500161023,US
+2500161024,2500161535,GB
+2500161536,2500162175,US
+2500162176,2500162815,GB
+2500162816,2500166207,US
+2500166208,2500166223,GB
+2500166224,2500175871,US
2500175872,2500175879,RO
-2500175880,2500198911,US
+2500175880,2500188159,US
+2500188160,2500188415,CH
+2500188416,2500198911,US
2500198912,2500199167,GB
2500199168,2500199423,US
-2500199424,2500199935,IE
-2500199936,2500218879,US
-2500218880,2500220927,DE
-2500220928,2500225553,US
-2500225554,2500225561,ES
-2500225562,2500227071,US
-2500227072,2500229119,FR
-2500229120,2500231167,GB
-2500231168,2500231679,US
-2500231680,2500231935,ES
-2500231936,2500235775,US
-2500235776,2500236031,GB
-2500236032,2500236837,US
+2500199424,2500199679,IE
+2500199680,2500201535,US
+2500201536,2500201543,GB
+2500201544,2500219135,US
+2500219136,2500219391,DE
+2500219392,2500225551,US
+2500225552,2500225559,ES
+2500225560,2500228607,US
+2500228608,2500228863,FR
+2500228864,2500235775,US
+2500235776,2500236543,GB
+2500236544,2500236837,US
2500236838,2500236838,ES
2500236839,2500238047,US
2500238048,2500238055,FR
@@ -84335,40 +40521,69 @@
2500238384,2500238399,DE
2500238400,2500238463,US
2500238464,2500238527,DE
-2500238528,2500240383,US
-2500240384,2500240639,FR
-2500240640,2500240895,RE
-2500240896,2500241407,FR
-2500241408,2500245503,US
+2500238528,2500245503,US
2500245504,2500245759,GB
-2500245760,2500272127,US
-2500272128,2500280319,GB
-2500280320,2500288511,US
-2500288512,2500288767,FR
-2500288768,2500296703,DE
-2500296704,2500392959,US
+2500245760,2500246015,US
+2500246016,2500246527,GB
+2500246528,2500272127,US
+2500272128,2500272639,GB
+2500272640,2500274431,US
+2500274432,2500274687,GB
+2500274688,2500275199,US
+2500275200,2500275711,GB
+2500275712,2500276223,US
+2500276224,2500276735,GB
+2500276736,2500276991,US
+2500276992,2500277247,GB
+2500277248,2500289023,US
+2500289024,2500289279,FR
+2500289280,2500292607,US
+2500292608,2500292863,DE
+2500292864,2500293375,US
+2500293376,2500293631,DE
+2500293632,2500319231,US
+2500319232,2500319743,ES
+2500319744,2500392959,US
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
-2500537600,2500555263,US
+2500535552,2500537687,US
+2500537688,2500537695,GB
+2500537696,2500551679,US
+2500551680,2500551935,FR
+2500551936,2500553759,US
+2500553760,2500553767,GB
+2500553768,2500555263,US
2500555264,2500555519,FR
-2500555520,2500616191,US
+2500555520,2500558847,US
+2500558848,2500559103,FR
+2500559104,2500591615,US
+2500591616,2500595711,GB
+2500595712,2500608511,US
+2500608512,2500608767,ES
+2500608768,2500609023,US
+2500609024,2500609535,ES
+2500609536,2500616191,US
2500616192,2500616703,IT
2500616704,2500636735,US
2500636736,2500636799,GB
-2500636800,2500644863,US
-2500644864,2500646911,FR
+2500636800,2500638719,US
+2500638720,2500639743,GB
+2500639744,2500644863,US
+2500644864,2500645119,FR
+2500645120,2500646911,US
2500646912,2500647935,ES
-2500647936,2500648959,FR
-2500648960,2500719615,US
-2500719616,2500720639,IE
-2500720640,2500723711,US
-2500723712,2500723967,ES
-2500723968,2501574655,US
+2500647936,2500687871,US
+2500687872,2500689919,FR
+2500689920,2500694271,US
+2500694272,2500694527,IT
+2500694528,2500719103,US
+2500719104,2500720639,IE
+2500720640,2501574655,US
2501574656,2501640191,KZ
2501640192,2503016447,US
2503016448,2503081983,IL
@@ -84383,17 +40598,26 @@
2503901184,2503905279,IT
2503905280,2503907327,CZ
2503907328,2503909375,FR
-2503909376,2503911343,RU
-2503911344,2503911359,NL
-2503911360,2503911423,RU
+2503909376,2503911423,RU
2503911424,2503915519,ES
2503915520,2503917567,IT
2503917568,2503933951,BG
-2503933952,2506293247,US
+2503933952,2504470527,US
+2504470528,2504470783,ES
+2504470784,2504474623,US
+2504474624,2504482815,HR
+2504482816,2504491007,US
+2504491008,2504499199,IT
+2504499200,2504916991,US
+2504916992,2504982527,IL
+2504982528,2506293247,US
2506293248,2506358783,CA
-2506358784,2507124735,US
+2506358784,2506360831,US
+2506360832,2506361087,ES
+2506361088,2507124735,US
2507124736,2507124991,IN
-2507124992,2508062719,US
+2507124992,2507145215,US
+2507210752,2508062719,US
2508062720,2508064767,CH
2508064768,2508066815,ES
2508066816,2508068863,RU
@@ -84402,10 +40626,8 @@
2508075008,2508077055,CH
2508077056,2508079103,BE
2508079104,2508081151,DE
-2508081152,2508081407,NL
-2508081408,2508081663,IL
-2508081664,2508081919,SG
-2508081920,2508083199,GB
+2508081152,2508082175,US
+2508082176,2508083199,GB
2508083200,2508085247,IS
2508085248,2508087295,PS
2508087296,2508089343,RU
@@ -84443,20 +40665,12 @@
2509928448,2509930495,FI
2509930496,2509934591,RU
2509934592,2509936639,DE
-2509936640,2509937681,AT
-2509937682,2509937682,SX
-2509937683,2509937683,CW
-2509937684,2509937684,SS
-2509937685,2509937713,AT
-2509937714,2509937729,LI
-2509937730,2509937919,AT
+2509936640,2509937919,AT
2509937920,2509938175,IT
2509938176,2509938431,US
-2509938432,2509938557,DE
-2509938558,2509938558,FR
-2509938559,2509938559,NL
-2509938560,2509938687,DE
-2509938688,2509946879,UA
+2509938432,2509938687,DE
+2509938688,2509942783,GB
+2509942784,2509946879,UA
2509946880,2509963263,BE
2509963264,2510028799,GB
2510028800,2510094335,PL
@@ -84477,16 +40691,18 @@
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
+2514485248,2515205119,DE
+2515205120,2515206143,US
+2515206144,2515599359,DE
2515599360,2515664895,GB
-2515664896,2516058111,DE
+2515664896,2516037631,DE
+2516037632,2516038143,DK
+2516038144,2516058111,DE
2516123648,2516254719,DE
2516254720,2516320255,FR
2516320256,2516451327,US
@@ -84494,12 +40710,27 @@
2516516864,2516520959,RU
2516520960,2516523007,SA
2516523008,2516525055,RU
-2516525056,2516525727,US
+2516525056,2516525183,US
+2516525184,2516525247,NL
+2516525248,2516525391,US
+2516525392,2516525407,NL
+2516525408,2516525423,US
+2516525424,2516525431,NL
+2516525432,2516525439,US
+2516525440,2516525447,NL
+2516525448,2516525519,US
+2516525520,2516525551,NL
+2516525552,2516525727,US
2516525728,2516525823,NL
-2516525824,2516526335,US
+2516525824,2516526079,US
+2516526080,2516526143,NL
+2516526144,2516526335,US
2516526336,2516527103,NL
2516527104,2516529151,GB
-2516529152,2516531199,CH
+2516529152,2516529279,CH
+2516529280,2516529343,FR
+2516529344,2516529375,BE
+2516529376,2516531199,CH
2516531200,2516533247,GB
2516533248,2516541439,CZ
2516541440,2516545535,GB
@@ -84531,8 +40762,7 @@
2524512256,2524643327,CN
2524643328,2524963071,US
2524963072,2524963311,GB
-2524963312,2524963327,EU
-2524963328,2524971007,US
+2524963312,2524971007,US
2524971008,2525036543,ES
2525102080,2525233151,US
2525233152,2525298687,SE
@@ -84602,7 +40832,7 @@
2540961792,2541223935,US
2541223936,2541289471,CH
2541289472,2541682687,US
-2541682688,2541748223,CH
+2541682688,2541748223,PL
2541748224,2541813759,US
2541813760,2541879295,GB
2541879296,2541944831,AU
@@ -84615,11 +40845,12 @@
2543583232,2543648767,SE
2543648768,2543714303,NO
2543714304,2543779839,JP
-2543779840,2544500735,US
+2543779840,2544154840,US
+2544154841,2544154842,CA
+2544154843,2544500735,US
2544500736,2544566271,GB
2544566272,2544631807,US
2544697344,2544828415,US
-2544828416,2544893951,EU
2544893952,2544959487,GB
2544959488,2545025023,SE
2545025024,2545090559,AU
@@ -84634,33 +40865,30 @@
2545614848,2545680383,NO
2545680384,2545745919,US
2545745920,2545811455,DE
-2545811456,2546038783,US
-2546038784,2546039039,EU
-2546039040,2547187711,US
+2545811456,2547187711,US
2547187712,2547318783,GB
2547318784,2547515391,US
-2547523584,2547531775,IT
-2547548160,2547580927,RU
+2547531776,2547539967,UA
+2547542016,2547542271,ES
+2547553024,2547553279,RU
2548039680,2548563967,GB
2548563968,2548826111,IR
-2548826112,2548827630,AT
-2548827631,2548827632,BR
-2548827633,2548827634,AR
-2548827635,2548827636,VE
-2548827637,2548827638,MX
-2548827639,2548827639,CO
-2548827640,2548827640,PE
-2548827641,2548827641,CA
-2548827642,2548827642,ZA
-2548827643,2548827644,IN
-2548827645,2548827645,ID
-2548827646,2548827646,TH
-2548827647,2548829695,AT
+2548826112,2548829695,AT
2548829696,2548829951,NL
-2548829952,2548830207,AT
+2548829952,2548830207,DE
2548830208,2548830463,US
2548830464,2548830719,DE
-2548830720,2548834303,AT
+2548830720,2548830975,IT
+2548830976,2548831231,GB
+2548831232,2548831487,HK
+2548831488,2548831743,FR
+2548831744,2548831999,US
+2548832000,2548832255,ES
+2548832256,2548832511,IS
+2548832512,2548832767,PL
+2548832768,2548833279,CH
+2548833280,2548833791,NL
+2548833792,2548834303,AT
2548834304,2548842495,GB
2548842496,2548858879,RU
2548858880,2548867071,NL
@@ -84674,103 +40902,33 @@
2548928512,2548932607,KZ
2548932608,2548934655,NL
2548934656,2548936703,RU
-2548936704,2548936959,SE
-2548936960,2548937215,NL
-2548937216,2548937471,EE
-2548937472,2548937727,NO
-2548937728,2548937983,DK
-2548937984,2548938239,LU
-2548938240,2548938495,FR
-2548938496,2548940543,SE
-2548940544,2548940799,US
+2548936704,2548936959,US
+2548936960,2548940799,SE
2548940800,2548948991,ES
2548948992,2548951039,CZ
2548951040,2548953087,GB
2548953088,2548955135,RU
2548955136,2548957183,DE
2548957184,2549612543,IR
-2549612544,2549612863,SE
-2549612864,2549612879,DK
-2549612880,2549612927,SE
-2549612928,2549612943,NL
-2549612944,2549612959,DK
-2549612960,2549612975,DE
-2549612976,2549612991,DK
-2549612992,2549613007,ES
-2549613008,2549613023,SE
-2549613024,2549613039,FR
-2549613040,2549613055,FI
-2549613056,2549613071,DK
-2549613072,2549613183,SE
-2549613184,2549613199,DE
-2549613200,2549613215,NL
-2549613216,2549613247,SE
-2549613248,2549613279,TR
-2549613280,2549613295,SE
-2549613296,2549613303,FI
-2549613304,2549613439,SE
-2549613440,2549613455,NL
-2549613456,2549613471,SE
-2549613472,2549613503,DE
-2549613504,2549613519,SE
-2549613520,2549613535,FR
-2549613536,2549613551,DK
-2549613552,2549613663,SE
-2549613664,2549613679,NL
-2549613680,2549613751,SE
-2549613752,2549613759,ES
-2549613760,2549613767,SE
-2549613768,2549613775,FR
-2549613776,2549613791,SE
-2549613792,2549613807,DE
-2549613808,2549613823,TR
-2549613824,2549613839,SE
-2549613840,2549613855,DK
-2549613856,2549613919,SE
-2549613920,2549613935,NL
-2549613936,2549613975,SE
-2549613976,2549613983,ES
-2549613984,2549613999,FR
-2549614000,2549614047,SE
-2549614048,2549614063,DE
-2549614064,2549614111,SE
-2549614112,2549614127,DK
-2549614128,2549614223,SE
-2549614224,2549614239,DE
-2549614240,2549614255,ES
-2549614256,2549614271,SE
-2549614272,2549614287,FR
-2549614288,2549614319,SE
-2549614320,2549614335,NL
-2549614336,2549614415,SE
-2549614416,2549614431,DK
-2549614432,2549614447,SE
-2549614448,2549614463,NL
-2549614464,2549614495,SE
-2549614496,2549614511,DE
-2549614512,2549614527,SE
-2549614528,2549614543,TR
-2549614544,2549614559,SE
-2549614560,2549614575,ES
-2549614576,2549614591,FR
+2549612544,2549614591,SE
2549614592,2549616639,IT
2549616640,2549618687,BE
-2549618688,2549619455,A2
-2549619456,2549619711,US
-2549619712,2549620735,A2
+2549618688,2549620735,DE
2549620736,2549624831,PL
2549624832,2549626879,BE
2549626880,2549628927,PL
2549628928,2549637119,RO
2549637120,2549641215,KW
2549641216,2549645311,RU
-2549645312,2549678079,RO
+2549645312,2549678079,CH
2549678080,2549698559,GB
2549698560,2549700607,PL
-2549700608,2549701119,DE
-2549701120,2549701375,EU
+2549700608,2549701375,DE
2549701376,2549701631,SE
-2549701632,2549702655,EU
+2549701632,2549701887,PL
+2549701888,2549702143,FR
+2549702144,2549702399,GB
+2549702400,2549702655,FR
2549702656,2549704703,UA
2549704704,2549706751,CZ
2549706752,2549710847,NO
@@ -84780,106 +40938,28 @@
2549874688,2549876735,GB
2549876736,2549878783,NO
2549878784,2549880831,DE
-2549880832,2549880959,SE
-2549880960,2549880975,RS
-2549880976,2549880991,AU
-2549880992,2549881007,SE
-2549881008,2549881023,NO
-2549881024,2549881039,NL
-2549881040,2549881055,DK
-2549881056,2549881071,FI
-2549881072,2549881119,SE
-2549881120,2549881135,FI
-2549881136,2549881247,SE
-2549881248,2549881263,US
-2549881264,2549881279,LT
-2549881280,2549881295,NO
-2549881296,2549881311,DK
-2549881312,2549881327,FI
-2549881328,2549881343,NL
-2549881344,2549881503,SE
-2549881504,2549881535,US
-2549881536,2549881551,NO
-2549881552,2549881567,DK
-2549881568,2549881575,FI
-2549881576,2549881583,RU
-2549881584,2549881599,NL
-2549881600,2549881615,FI
-2549881616,2549881695,SE
-2549881696,2549881711,NL
-2549881712,2549881759,SE
-2549881760,2549881775,US
-2549881776,2549881791,SE
-2549881792,2549881807,NO
-2549881808,2549881823,DK
-2549881824,2549881839,FI
-2549881840,2549881855,ID
-2549881856,2549881887,SE
-2549881888,2549881903,US
-2549881904,2549881919,SE
-2549881920,2549881935,FI
-2549881936,2549882015,SE
-2549882016,2549882031,NL
-2549882032,2549882047,IN
-2549882048,2549882063,NO
-2549882064,2549882079,DK
-2549882080,2549882095,FI
-2549882096,2549882111,US
-2549882112,2549882207,SE
-2549882208,2549882223,NL
-2549882224,2549882271,SE
-2549882272,2549882287,US
-2549882288,2549882303,SE
-2549882304,2549882319,NO
-2549882320,2549882335,DK
-2549882336,2549882351,FI
-2549882352,2549882367,KR
-2549882368,2549882383,SE
-2549882384,2549882399,FI
-2549882400,2549882431,HU
-2549882432,2549882495,SE
-2549882496,2549882511,NL
-2549882512,2549882527,SE
-2549882528,2549882543,US
-2549882544,2549882559,SE
-2549882560,2549882575,NO
-2549882576,2549882591,DK
-2549882592,2549882607,FI
-2549882608,2549882623,HU
-2549882624,2549882703,SE
-2549882704,2549882719,FI
-2549882720,2549882735,SE
-2549882736,2549882751,NL
-2549882752,2549882783,PT
-2549882784,2549882815,SE
-2549882816,2549882831,NO
-2549882832,2549882847,DK
-2549882848,2549882863,FI
-2549882864,2549882879,US
+2549880832,2549882879,SE
2549882880,2549884927,CH
2549884928,2549891071,DE
2549891072,2549899263,RU
2549899264,2549901311,PS
2549901312,2549903359,RU
2549903360,2549905407,ES
-2549905408,2549907455,NL
+2549905408,2549907455,GB
2549907456,2549923839,DE
2549923840,2549927935,BG
2549927936,2549929983,HR
2549929984,2549932031,DE
2549932032,2549940223,HR
2549940224,2550136831,RO
-2550136832,2554211383,US
-2554211384,2554211387,AP
-2554211388,2554227967,US
-2554227968,2554228223,EU
-2554228224,2554462207,US
+2550136832,2550202367,DO
+2550202368,2553544703,US
+2553544704,2553610239,IN
+2553610240,2554462207,US
2554462208,2554527743,HU
2554527744,2554789887,US
2554789888,2554855423,GB
-2554855424,2554888703,US
-2554888704,2554888959,EU
-2554888960,2554920959,US
+2554855424,2554920959,US
2554920960,2554986495,DK
2554986496,2555052031,CL
2555052032,2555117567,US
@@ -84923,9 +41003,7 @@
2557673472,2557739007,DK
2557739008,2557870079,US
2557870080,2557935615,ID
-2557935616,2558658499,US
-2558658500,2558658500,PR
-2558658501,2558789571,US
+2557935616,2558789571,US
2558789572,2558789572,PR
2558789573,2558918655,US
2558918656,2558984191,GB
@@ -84940,15 +41018,28 @@
2559967232,2560032767,GB
2560032768,2560098303,US
2560098304,2560163839,BE
-2560163840,2560229375,NZ
-2560229376,2560628479,US
+2560229376,2560360447,US
+2560360448,2560425983,UY
+2560425984,2560628479,US
2560628480,2560628735,CA
2560628736,2560644607,US
2560644608,2560644863,CA
2560644864,2561015807,US
-2561671168,2564947967,US
+2561015808,2561146879,DO
+2561146880,2561409023,AR
+2561409024,2561671167,CL
+2561671168,2563244031,US
+2563244032,2563768319,CO
+2563768320,2564947967,US
2564947968,2565013503,SG
2565013504,2565210111,US
+2565210112,2565275647,CL
+2565275648,2565279743,HN
+2565279744,2565281791,AR
+2565281792,2565283839,CO
+2565283840,2565287935,NI
+2565287936,2565292031,AR
+2565341184,2566914047,BR
2566914048,2566979583,CN
2566979584,2567045119,FI
2567045120,2567110655,US
@@ -84969,13 +41060,14 @@
2569666560,2569797631,US
2569797632,2569863167,NO
2569863168,2569994239,CH
-2569994240,2569994495,EU
-2569994496,2570125311,US
+2569994240,2570125311,US
2570125312,2570190847,BE
2570190848,2572681215,US
2572681216,2572746751,SE
2572746752,2572943359,US
-2572943360,2573402111,DE
+2572943360,2573353983,DE
+2573353984,2573354239,BE
+2573354240,2573402111,DE
2573402112,2573467647,CN
2573467648,2573533183,DE
2573533184,2573598719,CN
@@ -84984,13 +41076,24 @@
2573991936,2574123007,CH
2574123008,2574188543,NO
2574188544,2574254079,NZ
-2574254080,2574315007,SE
-2574315008,2574315263,NO
-2574315264,2574319615,SE
+2574254080,2574286847,SE
+2574286848,2574287103,AU
+2574287104,2574319615,SE
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
+2583728128,2583730175,NG
+2583730176,2583732223,TZ
+2583732224,2583736319,ZA
+2583736320,2583740415,GA
+2583740416,2583756799,NA
+2583756800,2584018943,US
2584018944,2584084479,CA
2584084480,2584215551,US
2584215552,2584281087,GB
@@ -85004,29 +41107,209 @@
2585067520,2585788415,US
2585788416,2585853951,GB
2585853952,2585985023,JP
-2585985024,2586607615,US
-2586607616,2586610687,GB
-2586610688,2586611199,ES
-2586611200,2586615807,GB
-2586615808,2586619903,US
+2585985024,2586480639,US
+2586480640,2586484735,IL
+2586484736,2586510335,US
+2586510336,2586511359,ES
+2586511360,2586566655,US
+2586566656,2586566687,FR
+2586566688,2586610175,US
+2586610176,2586610431,ES
+2586610432,2586611711,US
+2586611712,2586611967,GB
+2586611968,2586619903,US
2586619904,2586620415,FR
2586620416,2586622463,US
2586622464,2586622975,ES
-2586622976,2586716159,US
-2586716160,2586717183,ES
-2586717184,2586804991,US
-2586804992,2586805247,ES
-2586805248,2586828799,US
-2586828800,2586828863,CH
-2586828864,2587017727,US
-2587017728,2587017983,IE
-2587017984,2587018239,US
+2586622976,2586733567,US
+2586733568,2586733823,LT
+2586733824,2586804223,US
+2586804224,2586804479,ES
+2586804480,2586828799,US
+2586828800,2586829055,CH
+2586829056,2586870783,US
+2586870784,2586874879,ES
+2586874880,2586875135,US
+2586875136,2586875903,ES
+2586875904,2586876927,US
+2586876928,2586877951,ES
+2586877952,2586952191,US
+2586952192,2586952447,FR
+2586952448,2587017215,US
+2587017216,2587017471,IE
+2587017472,2587018239,US
2587018240,2587018495,IE
-2587018496,2587066879,US
+2587018496,2587021823,US
+2587021824,2587022335,IE
+2587022336,2587066879,US
2587066880,2587067135,GB
2587067136,2587067647,US
2587067648,2587067903,GB
-2587067904,2587951103,US
+2587067904,2587068415,US
+2587068416,2587068479,GB
+2587068480,2587071759,US
+2587071760,2587071775,GB
+2587071776,2587131903,US
+2587131904,2587132159,FR
+2587132160,2587197439,US
+2587197440,2587197695,ES
+2587197696,2587240389,US
+2587240390,2587240390,FR
+2587240391,2587249417,US
+2587249418,2587249418,FR
+2587249419,2587394047,US
+2587394048,2587394559,ES
+2587394560,2587398143,US
+2587398144,2587399167,ES
+2587399168,2587443199,US
+2587443200,2587447295,CH
+2587447296,2587476760,US
+2587476761,2587476761,LB
+2587476762,2587492351,US
+2587492352,2587493375,ES
+2587493376,2587508735,US
+2587508736,2587525119,GB
+2587525120,2587926527,US
+2587926528,2587930623,BG
+2587930624,2587951103,US
+2587951104,2587952127,ZA
+2587952128,2587953151,NG
+2587953152,2587954175,MU
+2587954176,2587955199,ZA
+2587955200,2587959295,KE
+2587959296,2587961343,SN
+2587961344,2587962367,ZA
+2587962368,2587963391,SS
+2587963392,2587964415,SD
+2587964416,2587965439,ZA
+2587965440,2587966463,KE
+2587966464,2587967487,BF
+2587967488,2587975679,ZA
+2587975680,2587983871,GH
+2587983872,2588016639,AO
+2588016640,2588033023,NG
+2588033024,2588037119,ZA
+2588037120,2588038143,AO
+2588038144,2588039167,GN
+2588039168,2588041215,ZA
+2588041216,2588042239,DZ
+2588042240,2588043263,SD
+2588043264,2588044287,AO
+2588044288,2588045311,LS
+2588046336,2588047359,TD
+2588047360,2588049407,MW
+2588049408,2588053503,BJ
+2588053504,2588057599,ZA
+2588057600,2588061695,BF
+2588061696,2588070911,ZA
+2588070912,2588071935,TZ
+2588071936,2588072959,UG
+2588072960,2588073983,NE
+2588073984,2588075007,TZ
+2588075008,2588076031,MU
+2588076032,2588078079,GA
+2588078080,2588080127,MU
+2588080128,2588082175,ZA
+2588082176,2588147711,RE
+2588147712,2588164095,CI
+2588164096,2588180479,RW
+2588196864,2588213247,NG
+2588213248,2588278783,ZA
+2588278784,2588295167,KE
+2588295168,2588299263,GH
+2588303360,2588311551,CM
+2588311552,2588315647,ZA
+2588315648,2588317695,BW
+2588317696,2588318207,MU
+2588318208,2588318719,ZA
+2588318720,2588319743,UG
+2588319744,2588327935,SC
+2588327936,2588328959,ML
+2588328960,2588329983,BI
+2588329984,2588332031,MA
+2588332032,2588344319,ZA
+2588344320,2588409855,MU
+2588409856,2588410879,KE
+2588410880,2588412927,ZA
+2588412928,2588413951,ST
+2588413952,2588414975,UG
+2588414976,2588415999,TZ
+2588416000,2588417023,SO
+2588417024,2588418047,KE
+2588418048,2588420095,NG
+2588420096,2588422143,ZA
+2588422144,2588423167,SO
+2588423168,2588424191,CD
+2588424192,2588426239,ZA
+2588426240,2588434431,TZ
+2588434432,2588438527,ZA
+2588438528,2588442623,BJ
+2588442624,2588459007,CM
+2588459008,2588467199,UG
+2588467200,2588471295,TN
+2588471296,2588476415,ZA
+2588477440,2588478463,NG
+2588478464,2588479487,UG
+2588479488,2588480511,ZA
+2588480512,2588481535,CD
+2588482560,2588483583,LY
+2588484608,2588485631,BW
+2588485632,2588486655,BI
+2588487680,2588487711,SC
+2588487712,2588487743,FR
+2588487744,2588487807,BF
+2588487808,2588487839,NE
+2588487840,2588487871,SC
+2588487872,2588487935,MW
+2588487936,2588488703,SC
+2588488704,2588489727,LY
+2588490752,2588491775,GW
+2588493824,2588494847,ZA
+2588495872,2588496895,ZW
+2588500992,2588502015,CI
+2588503040,2588504063,LY
+2588504064,2588505087,TD
+2588505088,2588506111,CG
+2588506112,2588507135,ZA
+2588507136,2588508159,SO
+2588508160,2588510207,LY
+2588526592,2588528639,CM
+2588528640,2588530687,ZA
+2588532736,2588534783,ZA
+2588536832,2588538879,ZA
+2588672000,2588934143,KE
+2588934144,2589982719,SC
+2589982720,2590507007,SD
+2591547392,2591555583,ZA
+2591571968,2591588351,NG
+2591588352,2591604735,MG
+2591604736,2591612927,MU
+2591612928,2591621119,ZW
+2591621120,2591686655,DZ
+2591686656,2591817727,KE
+2591948800,2591981567,MG
+2591981568,2591997951,CM
+2591997952,2592006143,ZA
+2592006144,2592022527,TZ
+2592026624,2592026879,US
+2592026880,2592027391,MU
+2592027392,2592027647,GB
+2592027648,2592028159,MU
+2592028160,2592028415,CA
+2592028416,2592028671,MU
+2592028672,2592028799,NG
+2592028800,2592028927,KE
+2592028928,2592029183,MU
+2592029184,2592029311,CI
+2592029312,2592029695,MU
+2592029696,2592030207,ZA
+2592030208,2592030335,GH
+2592030336,2592030463,CM
+2592030464,2592030591,UG
+2592030592,2592030719,MU
+2592034816,2592038911,NE
+2592043008,2592047103,ZA
+2592047104,2592079871,AO
2600534016,2600665087,US
2600665088,2600730623,CA
2600730624,2600796159,NO
@@ -85046,14 +41329,12 @@
2604007424,2604072959,ES
2604072960,2604138495,NO
2604138496,2604204031,DE
-2604204032,2604243711,US
-2604243712,2604243967,AP
-2604243968,2604244991,US
-2604244992,2604245247,EU
-2604245248,2604335103,US
+2604204032,2604335103,US
2604335104,2604400639,NZ
2604400640,2604466175,AU
-2604466176,2604793855,US
+2604466176,2604648447,US
+2604648448,2604648959,NZ
+2604648960,2604793855,US
2604793856,2604859391,CH
2604859392,2604990463,US
2604990464,2605055999,SG
@@ -85062,31 +41343,23 @@
2605187072,2605252607,US
2605252608,2605318143,AT
2605318144,2606301183,US
-2606366720,2606448649,US
-2606448650,2606448651,EU
-2606448652,2606467071,US
-2606467072,2606467327,AP
-2606467328,2606563327,US
-2606628864,2606646783,US
-2606646784,2606647039,EU
-2606647040,2606648831,US
+2606366720,2606563327,US
+2606628864,2606645247,US
+2606646784,2606647039,US
2606648832,2606649087,IE
-2606649088,2607349759,US
+2606694400,2607349759,US
2607349760,2607415295,CH
-2607415296,2608728063,US
-2608728064,2608728319,AP
-2608728320,2609053695,US
+2607415296,2609053695,US
2609053696,2609119231,GB
2609119232,2609184767,FR
-2609184768,2609250303,DE
+2609184768,2609250303,PL
2609250304,2609381375,US
-2609381376,2609446911,GB
+2609381376,2609428479,GB
+2609428480,2609428735,IN
+2609428736,2609446911,GB
2609446912,2609512447,DK
2609512448,2609643519,US
-2609643520,2609677815,GB
-2609677816,2609677817,EU
-2609677818,2609708799,GB
-2609708800,2609709055,AP
+2609643520,2609709055,GB
2609709056,2609840127,US
2609840128,2609971199,AU
2609971200,2610036735,GB
@@ -85116,13 +41389,13 @@
2613903360,2613968895,AU
2613968896,2614034431,US
2614034432,2614099967,GR
-2614099968,2614164991,US
-2614164992,2614165247,EU
-2614165248,2614165503,US
+2614099968,2614165503,US
2614165504,2614231039,NO
2614231040,2614296575,ES
2614296576,2614362111,BR
-2614362112,2615083007,US
+2614362112,2614386431,US
+2614386432,2614386559,PR
+2614386560,2615083007,US
2615083008,2615148543,TR
2615148544,2615345151,US
2615345152,2615410687,NO
@@ -85133,26 +41406,24 @@
2615672832,2616262655,ZA
2616262656,2616524799,US
2616524800,2616590335,GB
-2616590336,2616770303,US
-2616770304,2616770559,EU
-2616770560,2616786943,US
+2616590336,2616786943,US
2616786944,2616852479,GB
-2616852480,2616885247,DE
-2616885248,2616885503,FR
-2616885504,2616885527,DE
-2616885528,2616885529,EU
-2616885530,2616918015,DE
+2616852480,2616917759,DE
+2616917760,2616918015,FR
2616983552,2617049087,US
2617049088,2617114623,IT
-2617114624,2617180159,US
-2617245696,2617769983,US
+2617114880,2617115135,US
+2617118720,2617131007,US
+2617147392,2617148159,US
+2617151488,2617155583,CA
+2617311232,2617769983,US
2617769984,2617835519,ZA
2617835520,2617901055,US
2617901056,2617966591,FI
2617966592,2618032127,CA
2618032128,2618097663,US
2618097664,2618163199,NZ
-2618163200,2618228735,IT
+2618163200,2618228735,SI
2618228736,2618294271,US
2618359808,2618425343,PL
2618425344,2618490879,FR
@@ -85167,15 +41438,11 @@
2619342848,2619473919,US
2619473920,2619539455,CA
2619539456,2619604991,ES
-2619604992,2619735295,US
-2619735296,2619735551,EU
-2619735552,2619736063,US
+2619604992,2619736063,US
2619801600,2620063743,US
2620063744,2620129279,GB
2620129280,2620194815,CA
-2620194816,2620315039,US
-2620315040,2620315063,DE
-2620315064,2620391423,US
+2620194816,2620391423,US
2620391424,2620456959,GB
2620456960,2620522495,SE
2620522496,2620588031,AU
@@ -85194,19 +41461,15 @@
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
2623668224,2624192511,US
2624192512,2624258047,CH
-2624258048,2624266495,US
-2624266496,2624266751,AP
-2624266752,2624391696,US
-2624391697,2624391697,EU
-2624391698,2624393727,US
-2624393728,2624393983,EU
-2624393984,2624716799,US
+2624258048,2624716799,US
2624716800,2624782335,NL
2624782336,2624847871,CH
2624847872,2624913407,NO
@@ -85218,10 +41481,10 @@
2626093056,2626158591,CH
2626158592,2626879487,US
2626879488,2626945023,KR
-2626945024,2627010559,IT
+2626945024,2627010559,SI
2627010560,2627076095,NZ
2627076096,2627141631,NL
-2627141632,2627469311,US
+2627141632,2627403775,US
2634022912,2634088447,CN
2634088448,2635202559,JP
2635202560,2635268095,CN
@@ -85254,7 +41517,8 @@
2640445440,2640510975,US
2640510976,2640576511,FR
2640576512,2640642047,EC
-2640642048,2641952767,JP
+2640642048,2641821695,JP
+2641887232,2641952767,JP
2641952768,2642018303,US
2642018304,2642083839,CN
2642083840,2642149375,US
@@ -85323,9 +41587,7 @@
2647916544,2648899583,US
2648899584,2648965119,IN
2648965120,2649030655,GB
-2649030656,2649413631,US
-2649413632,2649413887,AP
-2649413888,2649489407,US
+2649030656,2649489407,US
2649489408,2649554943,GB
2649554944,2649620479,NO
2649620480,2649948159,US
@@ -85335,13 +41597,13 @@
2650210304,2650275839,AT
2650275840,2650341375,US
2650341376,2650406911,NO
-2650406912,2650603519,US
+2650406912,2650423295,US
+2650423296,2650472447,JP
+2650472448,2650603519,US
2650603520,2650669055,CO
2650669056,2650734591,US
2650734592,2650800127,CN
-2650800128,2653089791,US
-2653089792,2653090047,AP
-2653090048,2653159423,US
+2650800128,2653159423,US
2653159424,2653421567,NO
2653421568,2653487103,AU
2653487104,2653552639,GB
@@ -85369,17 +41631,12 @@
2654642176,2654644223,GB
2654644224,2654646271,IT
2654646272,2654648319,FR
-2654648320,2654648655,IR
-2654648656,2654648656,SE
-2654648657,2654648665,IR
-2654648666,2654648666,SE
-2654648667,2654650367,IR
+2654648320,2654650367,IR
2654650368,2654666751,BG
2654666752,2654994431,US
2654994432,2655059967,LU
2655059968,2655125503,US
2655125504,2655191039,PL
-2655191040,2655256575,EU
2655256576,2655715327,US
2655715328,2655780863,PL
2655780864,2656632831,US
@@ -85405,9 +41662,7 @@
2658009088,2658074623,IT
2658074624,2658140159,US
2658140160,2658205695,NO
-2658205696,2658459648,US
-2658459649,2658459649,EU
-2658459650,2658598911,US
+2658205696,2658598911,US
2658598912,2658664447,GB
2658664448,2658926591,US
2658926592,2659057663,GB
@@ -85437,11 +41692,13 @@
2661416960,2661482495,PT
2661482496,2661548031,CA
2661548032,2661679103,US
-2661679104,2661878015,LU
-2661878016,2661878271,BE
-2661878272,2661909247,LU
+2661679104,2661885951,LU
+2661885952,2661886207,BE
+2661886208,2661909247,LU
2661909248,2661909503,BE
-2661909504,2661941247,LU
+2661909504,2661914111,LU
+2661914112,2661914367,BE
+2661914368,2661941247,LU
2661941248,2662006783,CL
2662006784,2662072319,US
2662072320,2662137855,ES
@@ -85466,7 +41723,9 @@
2665086976,2665152511,GB
2665152512,2665218047,US
2665218048,2665283583,CH
-2665283584,2665381887,US
+2665283584,2665349119,US
+2665359360,2665361407,US
+2665365504,2665381887,US
2665414656,2665480191,GB
2665480192,2665545727,US
2665545728,2665611263,DE
@@ -85487,9 +41746,7 @@
2667511808,2667513855,RU
2667513856,2667515903,GB
2667515904,2667517951,CZ
-2667517952,2667519103,SK
-2667519104,2667519231,CZ
-2667519232,2667519999,SK
+2667517952,2667519999,SK
2667520000,2667522047,CZ
2667522048,2667524095,GB
2667524096,2667526143,RU
@@ -85497,38 +41754,27 @@
2667528192,2667532287,FR
2667532288,2667534335,RU
2667534336,2667536383,PL
-2667536384,2667536895,FR
-2667536896,2667536959,AT
-2667536960,2667537087,FR
-2667537088,2667537119,AT
-2667537120,2667537135,FR
-2667537136,2667537151,AT
-2667537152,2667537791,FR
-2667537792,2667537919,AT
-2667537920,2667537943,FR
-2667537944,2667537951,AT
-2667537952,2667538431,FR
-2667538432,2667544575,AT
+2667536384,2667536639,FR
+2667536640,2667537087,AT
+2667537088,2667537119,FR
+2667537120,2667537151,AT
+2667537152,2667541503,FR
+2667541504,2667542527,AT
+2667542528,2667544575,FR
2667544576,2667560959,RU
2667560960,2667565055,IT
2667565056,2667565311,HK
-2667565312,2667565348,AT
-2667565349,2667565349,TR
-2667565350,2667565350,PT
-2667565351,2667565351,GR
-2667565352,2667565352,IE
-2667565353,2667565353,DK
-2667565354,2667565354,NO
-2667565355,2667565355,NL
-2667565356,2667565356,EG
-2667565357,2667565357,LU
-2667565358,2667565358,CZ
-2667565359,2667565359,BE
-2667565360,2667565360,AU
-2667565361,2667565362,PH
-2667565363,2667565363,MY
-2667565364,2667565364,NZ
-2667565365,2667566335,AT
+2667565312,2667565421,AT
+2667565422,2667565422,PT
+2667565423,2667565423,ES
+2667565424,2667565424,US
+2667565425,2667565425,CR
+2667565426,2667565426,KN
+2667565427,2667565427,BR
+2667565428,2667565428,FI
+2667565429,2667565429,CH
+2667565430,2667565430,GB
+2667565431,2667566335,AT
2667566336,2667566591,US
2667566592,2667566847,DE
2667566848,2667567103,FR
@@ -85578,9 +41824,7 @@
2670592000,2670657535,NL
2670657536,2670854143,US
2670854144,2670919679,FR
-2670919680,2670980095,DE
-2670980096,2670980351,EU
-2670980352,2670985215,DE
+2670919680,2670985215,DE
2670985216,2671050751,AU
2671050752,2671181823,US
2671181824,2671247359,CA
@@ -85588,11 +41832,9 @@
2671378432,2671443967,NO
2671443968,2671509503,US
2671509504,2671575039,NL
-2671575040,2671719167,US
-2671719168,2671719324,GB
-2671719325,2671719328,US
-2671719329,2671719423,GB
-2671719424,2671749119,US
+2671575040,2671720191,US
+2671720192,2671720447,VE
+2671720448,2671749119,US
2671749120,2671750143,CA
2671750144,2672295935,US
2672295936,2672361471,SE
@@ -85613,7 +41855,12 @@
2673737728,2673803263,US
2673803264,2673868799,FR
2673868800,2674130943,US
-2674130944,2674249727,GB
+2674130944,2674163711,GB
+2674163712,2674171903,CA
+2674171904,2674175999,GB
+2674176000,2674192383,US
+2674192384,2674196479,CH
+2674196480,2674249727,GB
2674249728,2674251775,US
2674251776,2674262015,GB
2674262016,2674327551,US
@@ -85637,9 +41884,7 @@
2676097024,2676162559,NO
2676162560,2676359167,US
2676359168,2676424703,IE
-2676424704,2676618239,US
-2676618240,2676618495,GB
-2676618496,2677014527,US
+2676424704,2677014527,US
2677014528,2677080063,CH
2677080064,2677145599,US
2677145600,2677178367,TR
@@ -85650,13 +41895,15 @@
2677407744,2677473279,US
2677473280,2677538815,FR
2677538816,2677604351,FI
-2677604352,2677639167,US
-2677639168,2677640191,CA
-2677640192,2677644287,US
-2677644288,2677644347,GB
-2677644348,2677644348,EU
-2677644349,2677644543,GB
-2677644544,2677669887,US
+2677604352,2677622783,US
+2677622784,2677623039,IE
+2677623040,2677639679,US
+2677639680,2677639935,CA
+2677639936,2677642239,US
+2677642240,2677642495,ES
+2677642496,2677650431,US
+2677650432,2677650943,RO
+2677650944,2677669887,US
2677669888,2677735423,DE
2677735424,2677800959,US
2677800960,2677866495,CH
@@ -85702,10 +41949,14 @@
2679177216,2679242751,CA
2679242752,2679308287,US
2679308288,2679373823,CH
-2679373824,2679439359,GB
-2679439360,2679525631,US
-2679525632,2679525887,BR
-2679525888,2680029183,US
+2679373824,2679406591,GB
+2679406592,2679431167,US
+2679431168,2679439359,FR
+2679439360,2679523327,US
+2679523328,2679525375,GB
+2679525376,2679535615,US
+2679535616,2679537663,GB
+2679537664,2680029183,US
2680029184,2680094719,SE
2680094720,2680225791,US
2680225792,2680356863,SE
@@ -85729,9 +41980,11 @@
2681798656,2681864191,FR
2681864192,2681929727,US
2681929728,2681995263,GB
-2681995264,2682107903,US
-2682107904,2682108159,GB
-2682108160,2682257407,US
+2681995264,2682015231,US
+2682015232,2682015487,IN
+2682015488,2682123263,US
+2682123264,2682123519,AU
+2682123520,2682257407,US
2682257408,2682322943,UA
2682322944,2682388479,US
2682388480,2682454015,CN
@@ -85749,21 +42002,15 @@
2683371520,2683437055,CH
2683437056,2683568127,US
2683568128,2683633663,GB
-2683633664,2683637759,EU
2683637760,2683637859,NL
-2683637860,2683637860,EU
2683637861,2683641855,NL
2683641856,2683645951,US
-2683645952,2683646207,AP
2683646208,2683650047,SG
2683650048,2683651071,US
-2683651072,2683699199,EU
2683699200,2683830271,US
2683830272,2683895807,AU
2683895808,2684157951,US
-2684157952,2684158463,NL
-2684158464,2684158719,BE
-2684158720,2684159999,NL
+2684157952,2684159999,NL
2684160000,2684162047,NO
2684162048,2684164095,EE
2684164096,2684166143,SE
@@ -85775,796 +42022,143 @@
2684184576,2684186623,SK
2684186624,2684188671,DE
2684188672,2684190719,RU
-2684190720,2684190739,US
-2684190740,2684190743,TR
-2684190744,2684190751,GB
-2684190752,2684190783,US
-2684190784,2684190799,NL
-2684190800,2684190807,GB
-2684190808,2684190815,US
-2684190816,2684190831,NL
-2684190832,2684190847,HR
-2684190848,2684190879,TR
-2684190880,2684190923,NL
-2684190924,2684190927,US
-2684190928,2684190935,NL
-2684190936,2684190943,US
-2684190944,2684190959,NL
-2684190960,2684190967,US
-2684190968,2684190971,IN
+2684190720,2684190735,US
+2684190736,2684190783,NL
+2684190784,2684190787,US
+2684190788,2684190971,NL
2684190972,2684190975,US
-2684190976,2684191039,CY
-2684191040,2684191071,TR
-2684191072,2684191103,NL
-2684191104,2684191167,CY
-2684191168,2684191175,NO
-2684191176,2684191183,US
-2684191184,2684191191,NO
-2684191192,2684191199,IT
-2684191200,2684191207,GB
-2684191208,2684191215,NO
-2684191216,2684191223,US
-2684191224,2684191231,CA
-2684191232,2684191239,HR
-2684191240,2684191247,IT
-2684191248,2684191259,AU
-2684191260,2684191263,US
-2684191264,2684191271,GB
-2684191272,2684191279,US
-2684191280,2684191287,GB
-2684191288,2684191295,EG
-2684191296,2684191303,HR
-2684191304,2684191307,EG
-2684191308,2684191311,DK
-2684191312,2684191319,US
-2684191320,2684191327,CA
-2684191328,2684191335,US
-2684191336,2684191343,IE
-2684191344,2684191351,HR
-2684191352,2684191359,RU
-2684191360,2684191367,SG
-2684191368,2684191375,HR
-2684191376,2684191383,AU
-2684191384,2684191391,GB
-2684191392,2684191399,NO
-2684191400,2684191407,US
-2684191408,2684191411,HK
-2684191412,2684191415,ZA
-2684191416,2684191423,US
-2684191424,2684191439,AU
-2684191440,2684191455,CN
-2684191456,2684191487,NL
-2684191488,2684191615,US
-2684191616,2684191743,DK
-2684191744,2684191751,US
-2684191752,2684191759,NL
+2684190976,2684191487,NL
+2684191488,2684191495,US
+2684191496,2684191551,NL
+2684191552,2684191615,US
+2684191616,2684191759,NL
2684191760,2684191767,US
-2684191768,2684191775,NL
-2684191776,2684191807,US
-2684191808,2684191815,KE
-2684191816,2684191839,US
-2684191840,2684191843,NL
+2684191768,2684191807,NL
+2684191808,2684191815,US
+2684191816,2684191843,NL
2684191844,2684191847,US
-2684191848,2684191855,GB
-2684191856,2684191871,US
-2684191872,2684191873,ES
-2684191874,2684191874,US
-2684191875,2684191875,SA
-2684191876,2684191879,NL
-2684191880,2684191887,LT
-2684191888,2684191899,IT
-2684191900,2684191911,US
-2684191912,2684191919,KW
-2684191920,2684191927,TR
-2684191928,2684191935,US
-2684191936,2684191939,TR
-2684191940,2684191943,US
-2684191944,2684191951,ES
-2684191952,2684191967,US
-2684191968,2684191975,NL
-2684191976,2684191999,US
-2684192000,2684192007,ES
-2684192008,2684192015,AE
-2684192016,2684192023,US
-2684192024,2684192031,IN
-2684192032,2684192039,US
-2684192040,2684192047,AL
-2684192048,2684192055,US
-2684192056,2684192063,IN
-2684192064,2684192071,AL
-2684192072,2684192079,US
-2684192080,2684192087,IN
-2684192088,2684192095,SG
-2684192096,2684192103,CY
+2684191848,2684191859,NL
+2684191860,2684191863,US
+2684191864,2684191987,NL
+2684191988,2684191999,US
+2684192000,2684192103,NL
2684192104,2684192107,US
-2684192108,2684192108,AU
-2684192109,2684192111,NL
-2684192112,2684192119,CH
-2684192120,2684192127,DO
-2684192128,2684192135,IN
-2684192136,2684192159,US
-2684192160,2684192163,HK
-2684192164,2684192175,TR
-2684192176,2684192191,JO
-2684192192,2684192199,US
-2684192200,2684192207,QA
-2684192208,2684192215,US
-2684192216,2684192223,CA
-2684192224,2684192231,TR
-2684192232,2684192239,US
-2684192240,2684192247,IN
-2684192248,2684192263,US
-2684192264,2684192265,TR
-2684192266,2684192266,EG
-2684192267,2684192271,GB
-2684192272,2684192279,US
-2684192280,2684192287,RU
-2684192288,2684192295,DK
-2684192296,2684192303,US
-2684192304,2684192311,CA
-2684192312,2684192327,US
-2684192328,2684192335,AE
-2684192336,2684192343,US
-2684192344,2684192347,AE
-2684192348,2684192351,SA
-2684192352,2684192371,US
-2684192372,2684192375,GB
-2684192376,2684192383,BM
-2684192384,2684192387,CA
+2684192108,2684192303,NL
+2684192304,2684192311,US
+2684192312,2684192387,NL
2684192388,2684192391,US
-2684192392,2684192399,NL
-2684192400,2684192407,AU
-2684192408,2684192415,US
-2684192416,2684192423,CA
-2684192424,2684192427,CH
-2684192428,2684192431,TR
-2684192432,2684192447,NL
-2684192448,2684192459,TR
-2684192460,2684192471,US
-2684192472,2684192479,CN
-2684192480,2684192495,US
-2684192496,2684192503,GB
-2684192504,2684192507,HR
-2684192508,2684192509,CA
-2684192510,2684192510,BH
-2684192511,2684192511,RU
+2684192392,2684192459,NL
+2684192460,2684192463,US
+2684192464,2684192511,NL
2684192512,2684192519,US
2684192520,2684192523,NL
2684192524,2684192535,US
-2684192536,2684192543,NL
-2684192544,2684192545,US
-2684192546,2684192547,EG
-2684192548,2684192551,CN
-2684192552,2684192559,GB
-2684192560,2684192567,NL
-2684192568,2684192583,US
-2684192584,2684192591,DE
-2684192592,2684192599,US
-2684192600,2684192607,AE
+2684192536,2684192607,NL
2684192608,2684192611,US
-2684192612,2684192615,ES
-2684192616,2684192627,US
-2684192628,2684192631,NL
-2684192632,2684192639,SE
-2684192640,2684192655,GR
-2684192656,2684192663,GB
-2684192664,2684192667,AE
-2684192668,2684192671,RU
-2684192672,2684192687,US
-2684192688,2684192695,NL
-2684192696,2684192703,US
-2684192704,2684192711,BE
-2684192712,2684192715,AU
-2684192716,2684192719,CA
-2684192720,2684192727,NL
-2684192728,2684192731,BE
-2684192732,2684192735,IT
+2684192612,2684192623,NL
+2684192624,2684192627,US
+2684192628,2684192735,NL
2684192736,2684192767,US
-2684192768,2684192775,TR
-2684192776,2684192799,US
-2684192800,2684192807,NL
-2684192808,2684192823,PL
-2684192824,2684192831,NL
-2684192832,2684192839,NO
-2684192840,2684192847,TR
-2684192848,2684192855,PK
-2684192856,2684192867,US
-2684192868,2684192871,AE
-2684192872,2684192879,CN
-2684192880,2684192895,US
-2684192896,2684192927,LT
-2684192928,2684192939,ES
-2684192940,2684192951,US
-2684192952,2684192959,CY
-2684192960,2684192967,NL
-2684192968,2684192971,GB
-2684192972,2684192975,MA
-2684192976,2684192983,US
-2684192984,2684192991,TR
-2684192992,2684192999,BR
-2684193000,2684193007,SA
-2684193008,2684193015,GB
-2684193016,2684193019,US
-2684193020,2684193020,BH
-2684193021,2684193021,US
-2684193022,2684193022,GB
-2684193023,2684193023,IT
-2684193024,2684193031,TR
-2684193032,2684193039,GR
-2684193040,2684193055,NL
-2684193056,2684193059,TR
-2684193060,2684193063,NL
-2684193064,2684193071,US
-2684193072,2684193079,EG
-2684193080,2684193087,HR
-2684193088,2684193119,GB
-2684193120,2684193127,CN
-2684193128,2684193151,US
-2684193152,2684193159,NZ
-2684193160,2684193167,SA
-2684193168,2684193175,US
-2684193176,2684193183,BH
-2684193184,2684193195,TR
-2684193196,2684193199,CN
-2684193200,2684193215,BE
-2684193216,2684193231,US
-2684193232,2684193235,BM
-2684193236,2684193239,AE
-2684193240,2684193247,PK
-2684193248,2684193251,IN
-2684193252,2684193255,AE
-2684193256,2684193263,US
-2684193264,2684193271,NO
-2684193272,2684193287,US
-2684193288,2684193295,NL
-2684193296,2684193303,IT
-2684193304,2684193311,NL
-2684193312,2684193319,IN
-2684193320,2684193327,US
-2684193328,2684193335,GR
-2684193336,2684193375,US
-2684193376,2684193383,LB
-2684193384,2684193391,US
-2684193392,2684193399,JO
-2684193400,2684193407,US
-2684193408,2684193439,NL
-2684193440,2684193447,US
-2684193448,2684193455,HU
-2684193456,2684193467,US
-2684193468,2684193471,LT
-2684193472,2684193479,MX
-2684193480,2684193487,IN
-2684193488,2684193511,US
-2684193512,2684193519,AE
-2684193520,2684193527,TR
-2684193528,2684193535,GB
-2684193536,2684193551,NL
-2684193552,2684193559,SA
-2684193560,2684193567,CN
-2684193568,2684193575,US
-2684193576,2684193583,EG
-2684193584,2684193591,RU
-2684193592,2684193599,ES
-2684193600,2684193607,IN
-2684193608,2684193611,PT
-2684193612,2684193615,NL
-2684193616,2684193623,IN
-2684193624,2684193631,TR
-2684193632,2684193639,MX
-2684193640,2684193647,TR
-2684193648,2684193655,AU
-2684193656,2684193659,ES
-2684193660,2684193663,US
-2684193664,2684193671,CH
-2684193672,2684193675,US
-2684193676,2684193679,AU
-2684193680,2684193687,DE
-2684193688,2684193691,US
-2684193692,2684193695,GR
-2684193696,2684193711,GB
-2684193712,2684193719,NL
-2684193720,2684193727,CN
-2684193728,2684193759,NL
-2684193760,2684193767,GB
-2684193768,2684193775,AR
-2684193776,2684193783,NL
-2684193784,2684193789,US
-2684193790,2684193790,TR
-2684193791,2684193791,CH
-2684193792,2684193799,NL
-2684193800,2684193807,FR
-2684193808,2684193815,GB
-2684193816,2684193823,US
-2684193824,2684193831,NL
-2684193832,2684193855,US
-2684193856,2684193871,GB
-2684193872,2684193911,US
-2684193912,2684193919,AT
-2684193920,2684193927,US
-2684193928,2684193931,AT
+2684192768,2684192775,NL
+2684192776,2684192783,US
+2684192784,2684192979,NL
+2684192980,2684192983,US
+2684192984,2684193147,NL
+2684193148,2684193151,US
+2684193152,2684193275,NL
+2684193276,2684193279,US
+2684193280,2684193447,NL
+2684193448,2684193455,AZ
+2684193456,2684193583,NL
+2684193584,2684193591,IE
+2684193592,2684193735,NL
+2684193736,2684193743,US
+2684193744,2684193887,NL
+2684193888,2684193911,US
+2684193912,2684193931,NL
2684193932,2684193935,US
-2684193936,2684193943,IN
-2684193944,2684193951,US
-2684193952,2684193959,IN
-2684193960,2684193963,CN
-2684193964,2684193967,US
-2684193968,2684193975,IN
-2684193976,2684193983,DK
-2684193984,2684193999,US
-2684194000,2684194007,NL
-2684194008,2684194039,US
-2684194040,2684194047,MT
-2684194048,2684194055,IT
-2684194056,2684194087,US
-2684194088,2684194095,GR
-2684194096,2684194103,US
-2684194104,2684194111,NL
-2684194112,2684194119,US
-2684194120,2684194127,BG
-2684194128,2684194135,GB
-2684194136,2684194143,MX
+2684193936,2684194002,NL
+2684194003,2684194003,BH
+2684194004,2684194007,US
+2684194008,2684194071,NL
+2684194072,2684194079,US
+2684194080,2684194143,NL
2684194144,2684194151,US
-2684194152,2684194159,EG
-2684194160,2684194167,IN
+2684194152,2684194167,NL
2684194168,2684194171,US
-2684194172,2684194175,IL
-2684194176,2684194207,LT
-2684194208,2684194215,CN
-2684194216,2684194223,IL
-2684194224,2684194247,US
-2684194248,2684194251,EG
-2684194252,2684194253,NL
-2684194254,2684194255,AE
-2684194256,2684194271,US
-2684194272,2684194279,GB
-2684194280,2684194287,BZ
-2684194288,2684194295,RU
-2684194296,2684194303,NO
-2684194304,2684194311,SE
-2684194312,2684194319,IL
-2684194320,2684194327,SA
-2684194328,2684194331,TR
-2684194332,2684194335,NL
-2684194336,2684194343,LV
-2684194344,2684194351,IL
-2684194352,2684194367,US
-2684194368,2684194375,TW
-2684194376,2684194383,JO
-2684194384,2684194391,CN
-2684194392,2684194399,NL
-2684194400,2684194407,GR
-2684194408,2684194423,NZ
-2684194424,2684194431,NL
-2684194432,2684194463,SG
-2684194464,2684194471,BR
-2684194472,2684194479,TR
-2684194480,2684194487,ES
+2684194172,2684194351,NL
+2684194352,2684194359,US
+2684194360,2684194487,NL
2684194488,2684194495,GB
-2684194496,2684194503,NG
-2684194504,2684194507,US
-2684194508,2684194511,SE
+2684194496,2684194511,NL
2684194512,2684194519,GB
-2684194520,2684194527,IT
+2684194520,2684194527,NL
2684194528,2684194535,US
-2684194536,2684194539,NG
-2684194540,2684194543,GB
-2684194544,2684194551,US
-2684194552,2684194559,IN
-2684194560,2684194663,US
-2684194664,2684194671,JO
-2684194672,2684194679,US
-2684194680,2684194687,NO
-2684194688,2684194695,US
-2684194696,2684194703,DK
-2684194704,2684194711,TR
-2684194712,2684194719,LV
-2684194720,2684194723,BR
+2684194536,2684194559,NL
+2684194560,2684194623,US
+2684194624,2684194723,NL
2684194724,2684194727,US
-2684194728,2684194751,DK
-2684194752,2684194754,US
-2684194755,2684194755,NL
-2684194756,2684194767,US
-2684194768,2684194815,DK
-2684194816,2684194823,US
-2684194824,2684194831,RO
-2684194832,2684194839,SG
-2684194840,2684194847,US
-2684194848,2684194855,MT
-2684194856,2684194863,UG
-2684194864,2684194871,NL
-2684194872,2684194879,SA
-2684194880,2684194887,AE
-2684194888,2684194895,ES
-2684194896,2684194903,DE
-2684194904,2684194907,TR
-2684194908,2684194911,US
-2684194912,2684194919,PT
-2684194920,2684194927,NL
-2684194928,2684194931,TR
-2684194932,2684194935,BM
-2684194936,2684194943,CN
-2684194944,2684194959,NL
-2684194960,2684194967,MA
-2684194968,2684194975,US
-2684194976,2684194983,NL
-2684194984,2684194991,BR
-2684194992,2684194999,US
-2684195000,2684195007,DK
-2684195008,2684195039,IN
-2684195040,2684195047,NL
-2684195048,2684195055,ES
-2684195056,2684195063,DK
-2684195064,2684195071,GR
-2684195072,2684195079,US
-2684195080,2684195087,ES
-2684195088,2684195095,EG
-2684195096,2684195111,US
-2684195112,2684195119,SA
-2684195120,2684195127,US
-2684195128,2684195151,NL
-2684195152,2684195167,US
-2684195168,2684195199,CY
-2684195200,2684195295,US
-2684195296,2684195303,DE
-2684195304,2684195307,SE
-2684195308,2684195319,US
-2684195320,2684195323,GB
+2684194728,2684195119,NL
+2684195120,2684195123,US
+2684195124,2684195199,NL
+2684195200,2684195263,US
+2684195264,2684195323,NL
2684195324,2684195327,US
-2684195328,2684195335,DE
-2684195336,2684195343,US
-2684195344,2684195351,GT
-2684195352,2684195359,ES
-2684195360,2684195367,CN
-2684195368,2684195371,ES
-2684195372,2684195375,MA
-2684195376,2684195383,BE
-2684195384,2684195391,NL
-2684195392,2684195407,US
-2684195408,2684195415,DE
-2684195416,2684195423,AE
-2684195424,2684195427,IT
-2684195428,2684195431,TR
-2684195432,2684195439,GB
-2684195440,2684195455,DK
-2684195456,2684195495,CN
-2684195496,2684195503,UG
-2684195504,2684195511,SA
-2684195512,2684195527,US
-2684195528,2684195535,RO
-2684195536,2684195543,US
-2684195544,2684195551,NL
-2684195552,2684195559,BA
-2684195560,2684195567,NL
-2684195568,2684195575,US
-2684195576,2684195583,TR
-2684195584,2684195647,US
-2684195648,2684195655,BA
-2684195656,2684195679,US
-2684195680,2684195683,AE
-2684195684,2684195685,SA
-2684195686,2684195686,US
-2684195687,2684195687,GB
-2684195688,2684195695,NL
-2684195696,2684195712,US
-2684195713,2684195713,CN
-2684195714,2684195715,NL
-2684195716,2684195719,US
-2684195720,2684195727,GB
-2684195728,2684195735,NL
-2684195736,2684195743,CA
-2684195744,2684195751,US
-2684195752,2684195759,BE
-2684195760,2684195767,US
-2684195768,2684195775,KW
-2684195776,2684195783,CA
-2684195784,2684195791,EG
-2684195792,2684195799,ES
-2684195800,2684195807,NL
-2684195808,2684195815,AR
-2684195816,2684195823,GB
-2684195824,2684195831,AF
-2684195832,2684195855,US
-2684195856,2684195864,GB
-2684195865,2684195865,NL
-2684195866,2684195867,CY
+2684195328,2684195335,NL
+2684195336,2684195339,US
+2684195340,2684195663,NL
+2684195664,2684195667,US
+2684195668,2684195867,NL
2684195868,2684195871,US
-2684195872,2684195879,AT
-2684195880,2684195887,US
-2684195888,2684195895,IN
-2684195896,2684195903,US
-2684195904,2684195911,IN
-2684195912,2684195919,NL
-2684195920,2684195935,HR
-2684195936,2684195967,AF
-2684195968,2684195975,CH
-2684195976,2684195979,TR
+2684195872,2684195927,NL
+2684195928,2684195935,JP
+2684195936,2684195979,NL
2684195980,2684195983,US
-2684195984,2684195991,BD
-2684195992,2684195999,IE
-2684196000,2684196007,NL
-2684196008,2684196015,FR
-2684196016,2684196023,AU
-2684196024,2684196031,US
-2684196032,2684196047,MA
-2684196048,2684196055,AT
-2684196056,2684196063,ES
-2684196064,2684196071,NL
-2684196072,2684196079,EG
-2684196080,2684196087,CA
-2684196088,2684196095,GB
+2684195984,2684196095,NL
2684196096,2684196159,US
-2684196160,2684196191,AF
-2684196192,2684196199,SA
-2684196200,2684196207,ES
-2684196208,2684196215,US
-2684196216,2684196223,NL
-2684196224,2684196227,TR
-2684196228,2684196229,GB
-2684196230,2684196231,NL
-2684196232,2684196239,IT
-2684196240,2684196255,NL
-2684196256,2684196263,VN
-2684196264,2684196279,EG
-2684196280,2684196303,DK
-2684196304,2684196311,BR
-2684196312,2684196319,NL
-2684196320,2684196327,GB
-2684196328,2684196335,NL
-2684196336,2684196343,CN
-2684196344,2684196347,TR
-2684196348,2684196383,US
-2684196384,2684196391,GB
+2684196160,2684196343,NL
+2684196344,2684196351,US
+2684196352,2684196391,NL
2684196392,2684196399,US
-2684196400,2684196415,TR
-2684196416,2684196423,US
-2684196424,2684196431,BG
-2684196432,2684196439,CZ
-2684196440,2684196447,DK
-2684196448,2684196463,EG
-2684196464,2684196511,DK
-2684196512,2684196527,US
-2684196528,2684196535,DK
-2684196536,2684196543,US
-2684196544,2684196551,DK
-2684196552,2684196567,NL
-2684196568,2684196591,US
-2684196592,2684196599,GB
-2684196600,2684196607,NL
-2684196608,2684196639,US
-2684196640,2684196671,GB
-2684196672,2684196703,CN
-2684196704,2684196711,US
-2684196712,2684196719,NL
-2684196720,2684196727,PT
-2684196728,2684196735,FI
-2684196736,2684196743,US
-2684196744,2684196751,NL
-2684196752,2684196759,US
-2684196760,2684196775,NL
-2684196776,2684196783,US
-2684196784,2684196791,TR
-2684196792,2684196799,BG
-2684196800,2684196831,TR
-2684196832,2684196839,US
-2684196840,2684196847,BR
-2684196848,2684196855,NL
-2684196856,2684196859,GB
-2684196860,2684196863,AR
-2684196864,2684196871,US
-2684196872,2684196879,MX
-2684196880,2684196881,GB
-2684196882,2684196882,US
-2684196883,2684196883,DE
-2684196884,2684196885,SA
-2684196886,2684196886,GB
-2684196887,2684196887,VG
-2684196888,2684196891,TR
-2684196892,2684196893,SA
-2684196894,2684196894,BR
-2684196895,2684196895,MA
-2684196896,2684196903,RU
-2684196904,2684196905,CY
-2684196906,2684196906,EG
-2684196907,2684196907,AU
-2684196908,2684196908,NL
-2684196909,2684196909,AU
-2684196910,2684196910,GB
-2684196911,2684196911,IT
-2684196912,2684196931,US
-2684196932,2684196935,NL
-2684196936,2684196939,EG
+2684196400,2684196419,NL
+2684196420,2684196423,US
+2684196424,2684196517,NL
+2684196518,2684196518,GB
+2684196519,2684196535,NL
+2684196536,2684196539,US
+2684196540,2684196939,NL
2684196940,2684196943,US
-2684196944,2684196951,EG
-2684196952,2684196959,NL
-2684196960,2684196967,US
-2684196968,2684196975,BR
-2684196976,2684196979,ZA
-2684196980,2684196980,TR
-2684196981,2684196981,CN
-2684196982,2684196982,NL
-2684196983,2684196983,US
-2684196984,2684196987,DK
-2684196988,2684196999,US
-2684197000,2684197007,IT
-2684197008,2684197019,US
-2684197020,2684197021,HR
-2684197022,2684197022,RU
-2684197023,2684197023,JO
-2684197024,2684197031,EG
-2684197032,2684197047,US
-2684197048,2684197055,IN
-2684197056,2684197063,US
-2684197064,2684197071,CO
-2684197072,2684197079,MX
-2684197080,2684197083,IT
-2684197084,2684197087,NO
-2684197088,2684197091,US
-2684197092,2684197092,RU
-2684197093,2684197093,US
-2684197094,2684197095,CY
-2684197096,2684197099,IT
-2684197100,2684197103,NL
-2684197104,2684197107,US
-2684197108,2684197111,AR
-2684197112,2684197119,US
-2684197120,2684197120,NL
-2684197121,2684197121,MA
-2684197122,2684197123,CY
-2684197124,2684197135,US
-2684197136,2684197143,SA
+2684196944,2684196959,NL
+2684196960,2684196963,US
+2684196964,2684197099,NL
+2684197100,2684197103,US
+2684197104,2684197115,NL
+2684197116,2684197119,US
+2684197120,2684197123,NL
+2684197124,2684197127,US
+2684197128,2684197143,NL
2684197144,2684197151,GB
-2684197152,2684197167,US
-2684197168,2684197175,NL
-2684197176,2684197179,TR
-2684197180,2684197181,CY
-2684197182,2684197182,MA
-2684197183,2684197183,EG
-2684197184,2684197191,NL
+2684197152,2684197191,NL
2684197192,2684197195,US
-2684197196,2684197196,TR
-2684197197,2684197197,NL
-2684197198,2684197198,BR
-2684197199,2684197199,AU
-2684197200,2684197215,US
-2684197216,2684197227,AT
-2684197228,2684197231,TR
-2684197232,2684197239,US
-2684197240,2684197247,GB
-2684197248,2684197263,US
-2684197264,2684197267,CO
+2684197196,2684197211,NL
+2684197212,2684197215,US
+2684197216,2684197251,NL
+2684197252,2684197255,US
+2684197256,2684197259,NL
+2684197260,2684197263,US
+2684197264,2684197267,NL
2684197268,2684197271,US
-2684197272,2684197279,HR
-2684197280,2684197283,US
-2684197284,2684197287,TR
-2684197288,2684197295,DE
-2684197296,2684197303,HR
+2684197272,2684197303,NL
2684197304,2684197311,US
-2684197312,2684197319,NL
-2684197320,2684197327,SA
-2684197328,2684197335,BR
-2684197336,2684197336,NL
-2684197337,2684197337,MA
-2684197338,2684197338,AU
-2684197339,2684197339,RU
-2684197340,2684197355,US
-2684197356,2684197356,GR
-2684197357,2684197357,NL
-2684197358,2684197358,RU
-2684197359,2684197359,IN
-2684197360,2684197368,TR
-2684197369,2684197369,US
-2684197370,2684197370,NL
-2684197371,2684197371,AU
-2684197372,2684197373,MA
-2684197374,2684197374,DK
-2684197375,2684198911,NL
-2684198912,2684199423,GB
-2684199424,2684199679,EU
-2684199680,2684200959,GB
+2684197312,2684197343,NL
+2684197344,2684197355,US
+2684197356,2684198911,NL
+2684198912,2684200959,GB
2684200960,2684203007,RU
2684203008,2684205055,GB
2684205056,2684207103,IT
2684207104,2684213247,GB
-2684213248,2684213295,SE
-2684213296,2684213311,GB
-2684213312,2684213327,FR
-2684213328,2684213343,DE
-2684213344,2684213359,DK
-2684213360,2684213375,FI
-2684213376,2684213391,NL
-2684213392,2684213407,NO
-2684213408,2684213439,TR
-2684213440,2684213471,US
-2684213472,2684213487,MK
-2684213488,2684213503,DK
-2684213504,2684213519,FR
-2684213520,2684213535,FI
-2684213536,2684213551,SE
-2684213552,2684213567,DK
-2684213568,2684213583,NL
-2684213584,2684213599,DE
-2684213600,2684213615,GB
-2684213616,2684213631,NO
-2684213632,2684213647,DK
-2684213648,2684213663,RO
-2684213664,2684213671,SE
-2684213672,2684213679,IT
-2684213680,2684213695,DE
-2684213696,2684213711,NO
-2684213712,2684213727,DK
-2684213728,2684213743,FI
-2684213744,2684213759,US
-2684213760,2684213783,SE
-2684213784,2684213791,IT
-2684213792,2684213807,FI
-2684213808,2684213823,DK
-2684213824,2684213839,NO
-2684213840,2684213855,DE
-2684213856,2684213871,NO
-2684213872,2684213887,IT
-2684213888,2684213903,DE
-2684213904,2684213919,GB
-2684213920,2684213935,FR
-2684213936,2684213951,NL
-2684213952,2684213983,DK
-2684213984,2684213999,FI
-2684214000,2684214015,ES
-2684214016,2684214031,NL
-2684214032,2684214039,DK
-2684214040,2684214047,FI
-2684214048,2684214063,FR
-2684214064,2684214079,DE
-2684214080,2684214087,GB
-2684214088,2684214095,NO
-2684214096,2684214111,DK
-2684214112,2684214127,IT
-2684214128,2684214399,SE
-2684214400,2684214415,US
-2684214416,2684214431,IT
-2684214432,2684214463,NO
-2684214464,2684214479,PL
-2684214480,2684214487,GB
-2684214488,2684214495,DE
-2684214496,2684214503,FR
-2684214504,2684214511,DK
-2684214512,2684214527,NL
-2684214528,2684214543,DE
-2684214544,2684214559,FR
-2684214560,2684214575,FI
-2684214576,2684214591,DK
-2684214592,2684214607,NL
-2684214608,2684214623,GB
-2684214624,2684214639,NO
-2684214640,2684214655,US
-2684214656,2684214687,IT
-2684214688,2684214719,SE
-2684214720,2684214735,FI
-2684214736,2684214751,DK
-2684214752,2684214783,SE
-2684214784,2684214799,GB
-2684214800,2684214815,FR
-2684214816,2684214831,NL
-2684214832,2684214847,DE
-2684214848,2684214863,DK
-2684214864,2684214879,FI
-2684214880,2684214895,US
-2684214896,2684214911,IT
-2684214912,2684214927,NO
-2684214928,2684214959,SE
-2684214960,2684214975,FI
-2684214976,2684214991,DK
-2684214992,2684215007,SE
-2684215008,2684215023,TR
-2684215024,2684215039,SE
-2684215040,2684215055,NL
-2684215056,2684215071,GB
-2684215072,2684215087,NO
-2684215088,2684215103,US
-2684215104,2684215119,DE
-2684215120,2684215135,FR
-2684215136,2684215151,FI
-2684215152,2684215167,DK
-2684215168,2684215295,SE
+2684213248,2684215295,SE
2684215296,2684217343,BE
2684217344,2684219391,CZ
2684219392,2684221439,PL
@@ -86579,18 +42173,9 @@
2684329984,2684332031,IQ
2684332032,2684334079,DE
2684334080,2684338175,PL
-2684338176,2684338303,NL
-2684338304,2684338367,ES
-2684338368,2684338687,NL
-2684338688,2684339103,ES
-2684339104,2684339199,NL
-2684339200,2684340223,ES
+2684338176,2684340223,ES
2684340224,2684344319,GB
-2684344320,2684345343,NL
-2684345344,2684345471,US
-2684345472,2684345599,NL
-2684345600,2684345855,US
-2684345856,2684346367,NL
+2684344320,2684346367,NL
2684346368,2684354559,FI
2684354560,2684616703,US
2684616704,2684682239,NZ
@@ -86608,12 +42193,7 @@
2687041536,2687238143,US
2687238144,2687297231,DE
2687297232,2687297239,GB
-2687297240,2687297247,SE
-2687297248,2687297791,DE
-2687297792,2687298047,FR
-2687298048,2687299119,DE
-2687299120,2687299127,US
-2687299128,2687301375,DE
+2687297240,2687301375,DE
2687301376,2687301631,NL
2687301632,2687560191,DE
2687560192,2687560447,ZA
@@ -86623,16 +42203,7 @@
2687893504,2688221183,DE
2688221184,2688286719,CH
2688286720,2688352255,DE
-2688352256,2688418825,CH
-2688418826,2688418826,EU
-2688418827,2688420095,CH
-2688420096,2688420351,US
-2688420352,2688420607,CN
-2688420608,2688420863,CH
-2688420864,2688421119,SG
-2688421120,2688421375,AP
-2688421376,2688421887,US
-2688421888,2688548863,CH
+2688352256,2688548863,CH
2688548864,2688614399,AU
2688614400,2688679935,US
2688679936,2688745471,IT
@@ -86658,9 +42229,7 @@
2689566208,2689566719,GB
2689566720,2689568255,US
2689568256,2689568767,GB
-2689568768,2689581823,US
-2689581824,2689582079,GB
-2689582080,2689586687,US
+2689568768,2689586687,US
2689586688,2689587199,GB
2689587200,2689593343,US
2689593344,2689593855,GB
@@ -86670,7 +42239,9 @@
2689597440,2689662975,IT
2689662976,2689794047,US
2689794048,2689802239,DE
-2689802240,2689810431,GB
+2689802240,2689802751,GB
+2689802752,2689803263,TR
+2689803264,2689810431,GB
2689810432,2689818623,US
2689818624,2689819135,IN
2689819136,2689826815,US
@@ -86678,7 +42249,8 @@
2689835008,2689843199,AU
2689843200,2689925119,US
2689925120,2689990655,CH
-2689990656,2690383871,US
+2689990656,2690187263,US
+2690318336,2690383871,US
2690383872,2690449407,FR
2690449408,2690646015,US
2690646016,2690711551,SG
@@ -86692,22 +42264,24 @@
2691301376,2691366911,CA
2691366912,2691760127,US
2691825664,2691891199,HU
-2691891200,2692546559,ZA
-2692546560,2694840319,US
+2691891200,2692218879,ZA
+2692284416,2692546559,ZA
+2692546560,2694316031,US
+2694381568,2694447103,US
2696151040,2696216575,IT
+2696216576,2696282111,ZA
2696413184,2697789439,JP
2697789440,2697854975,US
2697854976,2697889791,AU
2697889792,2697891839,US
-2697891840,2697920511,AU
+2697891840,2697892863,AU
+2697892864,2697894143,US
+2697894144,2697920511,AU
2697920512,2698117119,US
2698117120,2698182655,IS
2698182656,2698248191,DE
2698248192,2698313727,US
-2698313728,2698342399,GB
-2698342400,2698346495,DE
-2698346496,2698375167,GB
-2698375168,2698379263,DE
+2698313728,2698379263,DE
2698379264,2698444799,ES
2698444800,2698510335,JP
2698510336,2698706943,CZ
@@ -86720,8 +42294,24 @@
2699296768,2699362303,FR
2699362304,2699624447,US
2699624448,2699689983,JP
-2699755520,2700935167,JP
+2699755520,2699821055,JP
+2699886592,2700935167,JP
2700935168,2701066239,US
+2701131776,2701139967,HN
+2701139968,2701148159,NI
+2701148160,2701149183,AR
+2701149184,2701150207,HN
+2701150208,2701152255,AR
+2701152256,2701156351,BQ
+2701156352,2701160447,CW
+2701160448,2701162495,TT
+2701162496,2701164543,UY
+2701164544,2701172735,HT
+2701172736,2701176831,CL
+2701176832,2701178879,AR
+2701178880,2701180927,CL
+2701180928,2701189119,HN
+2701189120,2701197311,TT
2701197312,2701262847,US
2701262848,2701328383,GB
2701328384,2701393919,FR
@@ -86730,13 +42320,19 @@
2701524992,2701656063,US
2701656064,2701721599,RU
2701721600,2701787135,TR
+2701787136,2701852671,CO
2701852672,2701918207,US
2701918208,2701983743,GB
2701983744,2702245887,US
2702245888,2702311423,GB
+2702311424,2702376959,CO
2702376960,2702442495,CA
2702442496,2702508031,CH
2702508032,2702573567,US
+2702573568,2702581759,AR
+2702581760,2702585855,VE
+2702589952,2702606335,GF
+2702606336,2702639103,BO
2702639104,2702704639,GB
2702704640,2702770175,BR
2702770176,2702835711,CL
@@ -86751,21 +42347,22 @@
2703818752,2703884287,FI
2703884288,2703949823,DE
2703949824,2704015359,AU
-2704015360,2704064511,US
-2704064512,2704072703,CA
-2704072704,2704277503,US
+2704015360,2704277503,US
2704277504,2704343039,FR
2704343040,2704408575,US
2704408576,2704474111,AU
-2704474112,2704485119,US
+2704474112,2704476927,US
+2704476928,2704476929,GB
+2704476930,2704476930,US
+2704476931,2704477183,GB
+2704477184,2704485119,US
2704485120,2704485375,AU
2704485376,2704539647,US
2704539648,2704605183,SE
-2704605184,2704649215,HR
-2704649216,2704649471,BA
-2704649472,2704670719,HR
+2704605184,2704670719,HR
2704670720,2704736255,SE
2704736256,2704801791,US
+2704801792,2704867327,BO
2704867328,2704998399,US
2704998400,2705063935,BE
2705063936,2705195007,US
@@ -86776,7 +42373,9 @@
2705522688,2705588223,ES
2705588224,2705596159,US
2705596160,2705596415,CA
-2705596416,2705691647,US
+2705596416,2705621247,US
+2705621248,2705621503,CH
+2705621504,2705691647,US
2705691648,2705692671,GB
2705692672,2705710079,US
2705710080,2705711103,IN
@@ -86796,16 +42395,13 @@
2706960384,2706964479,US
2706964480,2707226623,NL
2707226624,2707488767,JP
-2707488768,2707619839,US
-2707619840,2707947519,GB
+2707488768,2707947519,US
2707947520,2708144127,FR
2708144128,2708340735,US
2708340736,2708406271,AT
2708406272,2708471807,ES
2708471808,2708537343,GB
-2708537344,2708635135,US
-2708635136,2708635391,EU
-2708635392,2708661247,US
+2708537344,2708661247,US
2708661248,2708661503,AU
2708661504,2708733951,US
2708733952,2708799487,ES
@@ -86819,7 +42415,9 @@
2709716992,2709782527,CL
2709782528,2709848063,PE
2709848064,2710175743,US
+2710175744,2710241279,BO
2710241280,2710306815,MY
+2710306816,2710372351,VE
2710372352,2710437887,CA
2710437888,2710503423,MY
2710503424,2710568959,AU
@@ -86831,15 +42429,15 @@
2711093248,2711158783,AU
2711158784,2711486463,US
2711486464,2711551999,NL
-2711552000,2711765247,US
-2711765248,2711765503,EU
-2711765504,2713190399,US
+2711552000,2713190399,US
2713190400,2713255935,CA
2713255936,2713387007,US
2713387008,2713452543,CA
2713452544,2713583615,US
2713583616,2713649151,AR
-2713649152,2713976831,US
+2713649152,2713946367,US
+2713946368,2713946623,CA
+2713946624,2713976831,US
2713976832,2714042367,VE
2714042368,2714238975,US
2714238976,2714304511,TH
@@ -86847,27 +42445,30 @@
2714370048,2714435583,CH
2714435584,2714697727,US
2714697728,2714763263,CN
-2714763264,2715287551,US
+2714763264,2715025407,US
+2715025408,2715090943,VE
+2715090944,2715287551,US
2715287552,2715353087,CA
2715353088,2716139519,US
2716139520,2716205055,SG
-2716205056,2716729343,US
+2716205056,2716467199,US
+2716467200,2716532735,VE
+2716532736,2716729343,US
2716729344,2716794879,CL
2716794880,2717253631,US
2717253632,2717319167,TH
2717319168,2717384703,US
-2717384704,2717450239,JP
2717450240,2717646847,US
2717646848,2717712383,KW
2717712384,2717843455,US
+2717843456,2717908991,VE
2717908992,2717974527,CA
-2717974528,2718629887,US
+2717974528,2718171135,US
+2718236672,2718629887,US
2718629888,2718695423,GB
2718695424,2718760959,US
2718760960,2718826495,GB
-2718826496,2719125247,US
-2719125248,2719125503,EU
-2719125504,2719285247,US
+2718826496,2719285247,US
2719285248,2719350783,CH
2719350784,2719416319,US
2719416320,2719481855,CH
@@ -86878,32 +42479,362 @@
2720399360,2720464895,FR
2720464896,2721382399,US
2721382400,2721447935,CA
-2721447936,2722693119,US
-2722693120,2722758655,CA
+2721447936,2721579007,US
+2721579008,2721644543,IN
+2721644544,2722693119,US
+2722693120,2722754559,CA
+2722754560,2722754815,GB
+2722754816,2722758655,CA
2722758656,2723479551,US
2723479552,2723545087,CA
2723545088,2723610623,CH
2723610624,2723832575,US
2723832576,2723832831,GB
-2723832832,2723852287,US
-2723852288,2723852543,GB
-2723852544,2724268287,US
-2724268288,2724268351,MX
-2724268352,2724790271,US
+2723832832,2724268287,US
+2724268288,2724268415,MX
+2724268416,2724790271,US
2724790272,2724855807,CN
2724855808,2724921343,CA
2724921344,2725249023,US
2725249024,2725314559,NZ
-2725314560,2725543423,US
-2725543424,2725543679,EU
-2725543680,2725904383,US
+2725314560,2725904383,US
2725904384,2725969919,VE
2725969920,2727018495,US
2727018496,2727084031,CA
2727084032,2727411711,US
2727411712,2727608319,AU
2727608320,2728132607,US
-2728394752,2731540479,US
+2728132608,2728263679,CA
+2728263680,2731543551,US
+2731543552,2731544575,CA
+2731544576,2731549695,US
+2731549696,2731550719,CA
+2731550720,2731555839,US
+2731555840,2731556863,CA
+2731556864,2731560959,US
+2731560960,2731561983,CA
+2731561984,2731563007,US
+2731563008,2731564031,CA
+2731564032,2731566079,US
+2731566080,2731567103,CA
+2731567104,2731573247,US
+2731573248,2731606015,CA
+2731606016,2731673599,US
+2731673600,2731674623,CA
+2731674624,2731679743,US
+2731679744,2731680767,CA
+2731680768,2731681791,US
+2731681792,2731682815,PR
+2731682816,2731685887,US
+2731685888,2731686911,CA
+2731686912,2731688959,US
+2731688960,2731689983,VG
+2731689984,2731711487,US
+2731711488,2731712511,AG
+2731712512,2731714559,CA
+2731714560,2731717631,US
+2731717632,2731718655,CA
+2731718656,2731728895,US
+2731728896,2731729919,CA
+2731729920,2731761663,US
+2731761664,2731763711,CA
+2731763712,2731765759,US
+2731765760,2731767807,CA
+2731767808,2731771903,US
+2731771904,2731772927,KY
+2731772928,2731784191,US
+2731784192,2731785215,CA
+2731785216,2731786239,US
+2731786240,2731788287,CA
+2731788288,2731790335,US
+2731790336,2731792383,CA
+2731792384,2731795455,US
+2731795456,2731796479,DE
+2731796480,2731797503,CA
+2731797504,2731800575,US
+2731800576,2731801599,CA
+2731801600,2731804671,US
+2731804672,2731805695,CA
+2731805696,2731806719,BB
+2731806720,2731807743,US
+2731807744,2731808767,CA
+2731808768,2731819007,US
+2731819008,2731821055,CA
+2731821056,2731828223,US
+2731828224,2731829247,CA
+2731829248,2731831295,US
+2731831296,2731832319,CA
+2731832320,2731843583,US
+2731843584,2731845631,PR
+2731845632,2731853823,US
+2731853824,2731855871,CA
+2731855872,2731856895,VC
+2731856896,2731862015,US
+2731862016,2731864063,CA
+2731864064,2731870207,US
+2731870208,2731871231,CA
+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,2732111871,US
+2732111872,2732113919,CA
+2732113920,2732189695,US
+2732189696,2732192767,CA
+2732192768,2732201983,US
+2732201984,2732203007,VG
+2732203008,2732204031,US
+2732204032,2732206079,CA
+2732206080,2732220159,US
+2732220160,2732220400,CA
+2732220401,2732220401,US
+2732220402,2732220415,CA
+2732220416,2732227583,US
+2732227584,2732228607,CA
+2732228608,2732261375,US
+2732261376,2732262399,CA
+2732262400,2732263423,US
+2732263424,2732265471,CA
+2732265472,2732273663,US
+2732273664,2732275711,CA
+2732275712,2732278783,US
+2732278784,2732279807,CA
+2732279808,2732302335,US
+2732302336,2732303359,CA
+2732303360,2732306431,US
+2732306432,2732307455,CA
+2732307456,2732308479,US
+2732308480,2732310527,CA
+2732310528,2732320767,US
+2732320768,2732321023,AU
+2732321024,2732321279,BM
+2732321280,2732321535,CA
+2732321536,2732321791,GB
+2732321792,2732322815,CA
+2732322816,2732336127,US
+2732336128,2732337151,CA
+2732337152,2732351487,US
+2732351488,2732353535,PR
+2732353536,2732361727,US
+2732361728,2732363775,BB
+2732363776,2732375039,US
+2732375040,2732376063,CA
+2732376064,2732379135,US
+2732379136,2732380159,CA
+2732380160,2732389887,US
+2732389888,2732390143,IT
+2732390144,2732390399,US
+2732390400,2732391423,CA
+2732391424,2732395519,US
+2732395520,2732396543,CA
+2732396544,2732423167,US
+2732423168,2732425215,CA
+2732425216,2732443647,US
+2732443648,2732445695,CA
+2732445696,2732446719,US
+2732446720,2732447743,BM
+2732447744,2732455935,US
+2732455936,2732457983,CA
+2732457984,2732472319,US
+2732472320,2732474367,CA
+2732474368,2732475391,US
+2732475392,2732476415,CA
+2732476416,2732478463,US
+2732478464,2732479487,CA
+2732479488,2732480511,AG
+2732480512,2732485631,US
+2732485632,2732486655,PR
+2732486656,2732488703,US
+2732488704,2732490751,CA
+2732490752,2732492799,US
+2732492800,2732493823,CA
+2732493824,2732494847,US
+2732494848,2732495871,CA
+2732495872,2732497919,US
+2732497920,2732499967,CA
+2732499968,2732500223,US
+2732500224,2732500479,TW
+2732500480,2732515327,US
+2732515328,2732516351,VG
+2732516352,2732523519,US
+2732523520,2732525567,CA
+2732525568,2732534783,US
+2732534784,2732536831,CA
+2732536832,2732549119,US
+2732549120,2732550143,CA
+2732550144,2732580863,US
+2732580864,2732582911,CA
+2732582912,2733903871,US
+2733903872,2733904895,PR
+2733904896,2733907967,CA
+2733907968,2733911039,US
+2733911040,2733912063,CA
+2733912064,2733922303,US
+2733922304,2733923327,CA
+2733923328,2733930495,US
+2733930496,2733931519,CA
+2733931520,2733942783,US
+2733942784,2733943807,PR
+2733943808,2733953023,US
+2733953024,2733954047,CA
+2733954048,2733958143,US
+2733958144,2733959167,CA
+2733959168,2733963263,US
+2733963264,2733964287,CA
+2733964288,2733977599,US
+2733978624,2733979647,US
+2733979648,2733980671,CA
+2733980672,2733984767,US
+2733984768,2733985791,VC
+2733985792,2734002175,US
+2734002176,2734003199,CA
+2734003200,2734004223,US
+2734004224,2734005247,GD
+2734005248,2734018559,US
+2734018560,2734020607,CA
+2734020608,2734026751,US
+2734026752,2734030847,CA
+2734030848,2734031871,JM
+2734031872,2734032895,US
+2734032896,2734034943,CA
+2734034944,2734044159,US
+2734044160,2734045183,CA
+2734045184,2734057471,US
+2734057472,2734059519,BB
+2734059520,2734063615,US
+2734063616,2734064639,CA
+2734064640,2734070783,US
+2734070784,2734071807,CA
+2734071808,2734074879,US
+2734074880,2734075903,PR
+2734075904,2734077951,US
+2734077952,2734078207,GB
+2734078208,2734099455,US
+2734099456,2734102527,CA
+2734102528,2734104575,VI
+2734104576,2734105599,US
+2734105600,2734106623,CA
+2734106624,2734119935,US
+2734119936,2734120959,CA
+2734120960,2734123007,VG
+2734123008,2734125055,US
+2734125056,2734129151,CA
+2734129152,2734139391,US
+2734139392,2734140415,CA
+2734140416,2734152703,US
+2734152704,2734153727,KY
+2734153728,2734155775,CA
+2734155776,2734163967,US
+2734163968,2734164991,CA
+2734164992,2734170111,US
+2734170112,2734172159,CA
+2734172160,2734173183,US
+2734173184,2734174207,PR
+2734174208,2734192639,US
+2734192640,2734194687,CA
+2734194688,2734197759,US
+2734197760,2734198783,CA
+2734198784,2734200831,US
+2734200832,2734205951,CA
+2734205952,2734206975,US
+2734206976,2734209023,CA
+2734209024,2734229503,US
+2734229504,2734230527,CA
+2734230528,2734237695,US
+2734237696,2734238719,CA
+2734238720,2734249983,US
+2734249984,2734252031,CA
+2734252032,2734260223,US
+2734260224,2734262271,KY
+2734262272,2734268415,US
+2734268416,2734269439,CA
+2734269440,2734287871,US
+2734287872,2734288895,CA
+2734288896,2734296063,US
+2734296064,2734297087,CA
+2734297088,2734304255,US
+2734304256,2734305279,CA
+2734305280,2734335999,US
+2734336000,2734338047,CA
+2734338048,2734341119,US
+2734341120,2734344191,CA
+2734344192,2734349311,US
+2734349312,2734350335,CA
+2734350336,2734362623,US
+2734362624,2734363647,CA
+2734363648,2734364671,VG
+2734364672,2734373887,US
+2734373888,2734374911,CA
+2734374912,2734376959,US
+2734376960,2734379007,CA
+2734379008,2734381055,VG
+2734381056,2734389247,US
+2734389248,2734390271,CA
+2734390272,2734398463,US
+2734398464,2734399487,PR
+2734399488,2734407679,US
+2734407680,2734409727,CA
+2734409728,2734435327,US
+2734435328,2734436351,CA
+2734436352,2734447615,US
+2734447616,2734448639,CA
+2734448640,2734452735,US
+2734452736,2734454783,CA
+2734454784,2734457855,US
+2734457856,2734458879,CA
+2734458880,2734471167,US
+2734471168,2734472191,CA
+2734472192,2734473215,AG
+2734473216,2734479359,US
+2734479360,2734481407,CA
+2734481408,2734485503,US
+2734485504,2734486527,CA
+2734486528,2734488575,US
+2734488576,2734489599,CA
+2734489600,2734491647,US
+2734491648,2734492671,CA
+2734492672,2734502911,US
+2734502912,2734503935,CA
+2734503936,2734515199,US
+2734515200,2734516223,DM
+2734516224,2734522367,US
+2734522368,2734523391,CA
+2734523392,2734524415,US
+2734524416,2734526463,CA
+2734526464,2734532607,US
+2734532608,2734533631,VI
+2734533632,2734542847,US
+2734542848,2734544895,CA
+2734544896,2734553087,US
+2734553088,2734555135,CA
+2734555136,2734565375,US
+2734565376,2734566399,CA
+2734566400,2734588927,US
+2734588928,2734589951,CA
+2734589952,2734599167,US
+2734599168,2734600191,CA
+2734600192,2734603263,US
+2734603264,2734604287,AI
+2734604288,2734633983,US
+2734633984,2734635007,CA
+2734635008,2734649343,US
+2734649344,2734650367,CA
+2734650368,2734657535,US
+2734657536,2734658559,VG
+2734658560,2734659583,CA
+2734659584,2734665727,US
+2734665728,2734666751,CA
+2734666752,2734673919,US
2734686208,2734751743,CN
2734751744,2734817279,GB
2734817280,2734882815,US
@@ -86920,7 +42851,10 @@
2736848896,2736914431,US
2736914432,2736979967,NO
2736979968,2737438719,US
-2737438720,2738749439,JP
+2737438720,2737799167,JP
+2737799168,2737800191,NZ
+2737800192,2738094079,JP
+2738225152,2738749439,JP
2738749440,2742353919,FR
2742353920,2742419455,ES
2742419456,2742484991,US
@@ -86941,9 +42875,7 @@
2744713216,2744844287,US
2744844288,2744909823,CA
2744909824,2744975359,GB
-2744975360,2745040383,SE
-2745040384,2745040639,EU
-2745040640,2745040895,SE
+2744975360,2745040895,SE
2745040896,2745106431,DE
2745106432,2745171967,SI
2745171968,2745237503,GB
@@ -86964,7 +42896,9 @@
2746351616,2746417151,CR
2746417152,2746482687,CN
2746482688,2746548223,KR
-2746548224,2747072511,US
+2746548224,2746824703,US
+2746824704,2746824959,CA
+2746824960,2747072511,US
2747072512,2747138047,AU
2747138048,2747465727,US
2747465728,2748055551,ZA
@@ -86972,7 +42906,8 @@
2748121088,2748317695,US
2748317696,2748645375,JP
2748645376,2748710911,KR
-2748710912,2749235199,JP
+2748710912,2748841983,JP
+2748907520,2749235199,JP
2749235200,2749300735,KR
2749300736,2749628415,JP
2749628416,2749693951,US
@@ -86981,9 +42916,9 @@
2749890560,2750021631,AU
2750021632,2750349311,US
2750349312,2750414847,KR
-2750414848,2750692863,US
-2750692864,2750693375,EU
-2750693376,2750873599,US
+2750414848,2750724351,US
+2750724352,2750724607,TW
+2750724608,2750873599,US
2750873600,2750939135,CL
2750939136,2751070207,US
2751070208,2751135743,CL
@@ -86994,9 +42929,7 @@
2751660032,2751716351,AT
2751716352,2751716607,US
2751716608,2751725567,AT
-2751725568,2751729951,SE
-2751729952,2751729953,EU
-2751729954,2751791103,SE
+2751725568,2751791103,SE
2751791104,2751856639,FI
2751856640,2751922175,GB
2751922176,2751987711,FR
@@ -87016,7 +42949,6 @@
2754125824,2754127871,DE
2754127872,2754129919,SK
2754129920,2754131967,SE
-2754131968,2754134015,PL
2754134016,2754138111,DE
2754138112,2754142207,GB
2754142208,2754144255,BA
@@ -87035,12 +42967,8 @@
2755002368,2755330047,US
2755330048,2755395583,DE
2755395584,2755461119,FR
-2755461120,2755514879,DE
-2755514880,2755515135,EU
-2755515136,2755526655,DE
-2755526656,2755592191,US
-2755592192,2755657727,GB
-2755657728,2755985407,US
+2755461120,2755526655,DE
+2755526656,2755985407,US
2755985408,2756182015,JP
2756182016,2756247551,US
2756247552,2756313087,UY
@@ -87075,18 +43003,8 @@
2759065600,2759589887,US
2759589888,2759720959,KR
2759720960,2759852031,PL
-2759852032,2759883439,CH
-2759883440,2759883443,LI
-2759883444,2759883451,CH
-2759883452,2759883455,LI
-2759883456,2759884111,CH
-2759884112,2759884115,GB
-2759884116,2759894559,CH
-2759894560,2759894563,LI
-2759894564,2759917567,CH
-2759917568,2759917823,FR
-2759917824,2759918079,EU
-2759918080,2759983103,FR
+2759852032,2759917567,CH
+2759917568,2759983103,FR
2759983104,2760048639,IT
2760048640,2760114175,FR
2760114176,2760179711,IT
@@ -87112,9 +43030,7 @@
2760562688,2760564735,BG
2760564736,2760566783,GB
2760566784,2760568831,IQ
-2760568832,2760569351,FR
-2760569352,2760569355,CH
-2760569356,2760570879,FR
+2760568832,2760570879,FR
2760570880,2760572927,NL
2760572928,2760638463,DE
2760638464,2760703999,NL
@@ -87123,14 +43039,12 @@
2760835072,2760898559,GB
2760898560,2760899583,US
2760899584,2760900607,GB
-2760900608,2760932096,US
-2760932097,2760932097,EU
-2760932098,2761031679,US
+2760900608,2761031679,US
2761031680,2761424895,ZA
2761424896,2761621503,US
2761621504,2761687039,ZA
2761687040,2761949183,US
-2761949184,2762211327,JP
+2762014720,2762145791,JP
2762211328,2762276863,IN
2762276864,2762342399,US
2762342400,2762407935,CA
@@ -87144,17 +43058,15 @@
2763128832,2763194367,CA
2763194368,2765553663,US
2765553664,2765561855,CY
-2765561856,2765562031,FI
-2765562032,2765562047,SE
-2765562048,2765562367,FI
-2765562368,2765562383,RU
-2765562384,2765563903,FI
+2765561856,2765563903,FI
2765563904,2765565951,IR
2765565952,2765567999,RU
2765568000,2765570047,IR
2765570048,2765578239,RU
2765578240,2765580287,AZ
-2765580288,2765582335,GB
+2765580288,2765581567,GB
+2765581568,2765581823,ZA
+2765581824,2765582335,GB
2765582336,2765586431,CZ
2765586432,2765619199,IR
2765619200,2768240639,US
@@ -87173,12 +43085,15 @@
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
2772828160,2773010431,US
-2773010432,2773010687,EU
+2773010432,2773010687,CZ
2773010688,2773024767,US
2773090304,2773221375,US
2773221376,2773286911,JP
@@ -87186,7 +43101,8 @@
2773745664,2773811199,NZ
2773811200,2773876735,US
2773876736,2773942271,AU
-2773942272,2774335487,US
+2773942272,2774138879,US
+2774204416,2774335487,US
2774335488,2774401023,JP
2774401024,2774532095,US
2774532096,2774597631,JP
@@ -87197,18 +43113,14 @@
2775318528,2775384063,JP
2775384064,2775711743,US
2775711744,2775777279,NL
-2775777280,2775806207,CA
-2775806208,2775806463,US
-2775806464,2775842815,CA
+2775777280,2775842815,CA
2775842816,2775973887,US
2775973888,2776039423,AU
-2776039424,2776478207,US
-2776478208,2776478463,EU
-2776478464,2776478975,US
+2776039424,2776104959,US
+2776104960,2776170495,GB
+2776170496,2776478975,US
2776478976,2776479231,AU
-2776479232,2776697614,US
-2776697615,2776697615,EU
-2776697616,2776891391,US
+2776479232,2776891391,US
2776891392,2777022463,KR
2777022464,2777481215,US
2777481216,2777546751,KR
@@ -87217,9 +43129,9 @@
2778071040,2778333183,US
2778333184,2778398719,CA
2778398720,2779054079,US
-2779054080,2779070463,SZ
-2779070464,2779119615,ZA
-2779119616,2779906047,US
+2779054080,2779119615,ZA
+2779119616,2779316223,US
+2779381760,2779906047,US
2779906048,2779971583,CA
2779971584,2780037119,US
2780037120,2780102655,ZA
@@ -87231,92 +43143,32 @@
2780495872,2780561407,AU
2780561408,2780758015,US
2780758016,2780823551,AU
-2780823552,2780904159,US
-2780904160,2780904191,CA
-2780904192,2780909887,US
-2780909888,2780909903,CA
-2780909904,2780921359,US
-2780921360,2780921367,GB
-2780921368,2780925951,US
+2780823552,2780925951,US
2780925952,2780926207,GB
-2780926208,2780926271,US
-2780926272,2780926303,FR
-2780926304,2780926319,IT
-2780926320,2780926327,GB
-2780926328,2780926335,US
-2780926336,2780926367,GB
-2780926368,2780926823,US
-2780926824,2780926879,GB
-2780926880,2780926911,US
-2780926912,2780926927,GB
-2780926928,2780926975,US
+2780926208,2780926975,US
2780926976,2780927487,GB
2780927488,2780927743,US
-2780927744,2780928127,GB
-2780928128,2780928287,US
-2780928288,2780928303,GB
-2780928304,2780928383,US
-2780928384,2780928415,GB
-2780928416,2780928447,US
-2780928448,2780928455,GB
-2780928456,2780928463,US
-2780928464,2780928471,DE
-2780928472,2780929023,US
+2780927744,2780927999,GB
+2780928000,2780929023,US
2780929024,2780929279,GB
2780929280,2780929791,FR
2780929792,2780930047,US
2780930048,2780930559,GB
-2780930560,2780930879,US
-2780930880,2780930927,GB
-2780930928,2780930943,US
-2780930944,2780930959,GB
-2780930960,2780930975,FR
-2780930976,2780931007,US
-2780931008,2780931039,GB
-2780931040,2780931071,US
+2780930560,2780931071,US
2780931072,2780932351,GB
2780932352,2780932607,US
2780932608,2780933119,GB
-2780933120,2780933151,US
-2780933152,2780933191,GB
-2780933192,2780933247,US
-2780933248,2780933631,GB
+2780933120,2780933375,US
+2780933376,2780933631,GB
2780933632,2780933887,US
2780933888,2780934143,GB
-2780934144,2780934167,PL
-2780934168,2780934567,US
-2780934568,2780934575,GB
-2780934576,2780934719,US
-2780934720,2780934783,NL
-2780934784,2780940367,US
-2780940368,2780940383,CA
-2780940384,2780941055,US
-2780941056,2780941087,GB
-2780941088,2780941719,US
-2780941720,2780941727,GB
-2780941728,2780943575,US
-2780943576,2780943583,BM
-2780943584,2780945311,US
-2780945312,2780945375,BM
-2780945376,2780945663,US
-2780945664,2780945695,BM
-2780945696,2780946127,US
-2780946128,2780946135,CA
-2780946136,2780947903,US
-2780947904,2780947967,MY
-2780947968,2780948815,US
-2780948816,2780948823,MY
-2780948824,2780952967,US
-2780952968,2780952975,GB
-2780952976,2780954623,US
+2780934144,2780954623,US
2780954624,2781020159,KR
2781020160,2781478911,US
2781478912,2781544447,HK
-2781544448,2781623807,US
-2781623808,2781624319,CA
-2781624320,2781629951,US
-2781629952,2781630207,EU
-2781630208,2781675519,US
+2781544448,2781624063,US
+2781624064,2781624319,CA
+2781624320,2781675519,US
2781675520,2781741055,NZ
2781741056,2781937663,US
2781937664,2782003199,TH
@@ -87328,15 +43180,11 @@
2782658560,2782724095,PH
2782724096,2782789631,US
2782789632,2782855167,CH
-2782855168,2783020735,US
-2783020736,2783020751,IN
-2783020752,2783020863,US
-2783020864,2783020879,GB
-2783020880,2783182847,US
+2782855168,2783182847,US
2783182848,2783248383,AU
2783248384,2783313919,KR
2783313920,2783379455,US
-2783379456,2783444991,ZA
+2783379456,2783444991,SC
2783444992,2783510527,US
2783510528,2783576063,ZA
2783576064,2783969279,US
@@ -87345,87 +43193,20 @@
2784165888,2784296959,KR
2784296960,2784362495,US
2784362496,2784428031,KR
-2784428032,2785542143,US
+2784428032,2784952319,US
+2785017856,2785300735,US
+2785300736,2785300991,PR
+2785300992,2785542143,US
2785542144,2786066431,CH
2786066432,2788163583,US
2788163584,2788229119,CA
-2788229120,2788229935,US
-2788229936,2788229943,GB
-2788229944,2788230663,US
-2788230664,2788230679,GB
-2788230680,2788230703,US
-2788230704,2788230719,GB
-2788230720,2788230727,CH
-2788230728,2788230735,GB
-2788230736,2788231751,US
-2788231752,2788231759,SG
-2788231760,2788232583,US
-2788232584,2788232591,SG
-2788232592,2788232599,US
-2788232600,2788232607,SG
-2788232608,2788232959,US
-2788232960,2788232967,GB
-2788232968,2788233263,US
-2788233264,2788233271,GB
-2788233272,2788234279,US
-2788234280,2788234287,CA
-2788234288,2788234767,US
-2788234768,2788234775,GB
-2788234776,2788235295,US
-2788235296,2788235311,SG
-2788235312,2788235327,US
-2788235328,2788235335,SG
-2788235336,2788238847,US
-2788238848,2788238855,GB
-2788238856,2788238911,US
-2788238912,2788238919,GB
-2788238920,2788241447,US
-2788241448,2788241455,GB
-2788241456,2788243471,US
-2788243472,2788243487,SG
-2788243488,2788243511,US
-2788243512,2788243519,SG
-2788243520,2788245007,US
-2788245008,2788245023,CA
-2788245024,2788247863,US
-2788247864,2788247871,GB
-2788247872,2788249887,US
-2788249888,2788249895,AU
-2788249896,2788253183,US
-2788253184,2788253191,JP
-2788253192,2788261887,US
+2788229120,2788261887,US
2788261888,2788294655,GB
2788294656,2789113855,US
2789113856,2789146623,CA
-2789146624,2789147159,US
-2789147160,2789147167,NG
-2789147168,2789147277,US
-2789147278,2789147279,PH
-2789147280,2789147895,US
-2789147896,2789147903,NG
-2789147904,2789148583,US
-2789148584,2789148591,NG
-2789148592,2789148623,US
-2789148624,2789148631,QA
-2789148632,2789149351,US
-2789149352,2789149359,PA
-2789149360,2789149463,US
-2789149464,2789149471,SA
-2789149472,2789149479,US
-2789149480,2789149487,IN
-2789149488,2789149559,US
-2789149560,2789149567,PK
-2789149568,2789149607,US
-2789149608,2789149615,CA
-2789149616,2789149647,US
-2789149648,2789149655,RU
-2789149656,2789149679,US
-2789149680,2789149687,SA
-2789149688,2789149695,US
-2789149696,2789149703,IT
-2789149704,2789149783,US
-2789149784,2789149791,NG
-2789149792,2789212159,US
+2789146624,2789200895,US
+2789200896,2789201151,GB
+2789201152,2789212159,US
2789212160,2789277695,AU
2789277696,2789343231,NZ
2789343232,2789933055,US
@@ -87439,7 +43220,9 @@
2790588416,2790653951,ZA
2790653952,2790719487,US
2790719488,2790785023,SA
-2790785024,2791571455,US
+2790785024,2791112703,US
+2791170304,2791170559,US
+2791178240,2791571455,US
2791571456,2791636991,JP
2791636992,2791768063,US
2791768064,2791899135,KR
@@ -87457,39 +43240,13 @@
2793209856,2793275391,KR
2793275392,2796748799,US
2796748800,2796814335,NZ
-2796814336,2798393343,US
-2798393344,2798394367,PR
-2798394368,2798412543,US
-2798412544,2798412799,PR
-2798412800,2798429439,US
-2798429440,2798430207,PR
-2798430208,2798452223,US
-2798452224,2798452479,PR
-2798452480,2798784511,US
-2798784512,2798786559,CO
-2798786560,2798821375,US
-2798821376,2798829567,CO
-2798829568,2798838015,US
+2796814336,2797646591,US
+2797646592,2797646847,VI
+2797646848,2798838015,US
2798838016,2798838271,CO
-2798838272,2799086335,US
-2799086336,2799086591,PR
-2799086592,2799097855,US
-2799097856,2799099903,PR
-2799099904,2800567295,US
-2800567296,2800567807,PA
-2800567808,2800600319,US
-2800600320,2800600575,PA
-2800600576,2800607743,US
-2800607744,2800607999,PA
-2800608000,2800609023,US
-2800609024,2800609791,PA
-2800609792,2800610303,US
-2800610304,2800610559,PA
-2800610560,2800637951,US
-2800637952,2800639999,CO
-2800640000,2802386186,US
-2802386187,2802386187,EU
-2802386188,2802515967,US
+2798838272,2801795071,US
+2801795072,2801860607,CO
+2801860608,2802515967,US
2802515968,2802581503,CA
2802581504,2802909183,US
2802909184,2802974719,CA
@@ -87498,25 +43255,46 @@
2803695616,2803761151,US
2803761152,2803826687,AU
2803826688,2803892223,US
-2803892224,2805989375,CA
-2805989376,2806644735,US
+2803892224,2805465087,CA
+2805465088,2805989375,UY
+2805989376,2806012927,US
+2806012928,2806013183,HK
+2806013184,2806644735,US
2806644736,2806710271,CA
2806710272,2807103487,US
2807103488,2807169023,NL
-2807169024,2807236863,US
-2807236864,2807237119,EU
-2807237120,2807259647,US
-2807259648,2807260159,AP
-2807260160,2807267327,US
-2807267328,2807275519,AU
-2807275520,2807824383,US
+2807169024,2807566335,US
+2807566336,2807574527,CA
+2807574528,2807587071,US
+2807587072,2807587327,IT
+2807587328,2807587583,QA
+2807587584,2807587839,IN
+2807587840,2807588095,AE
+2807588096,2807588351,ES
+2807588352,2807588863,CN
+2807588864,2807589119,JP
+2807589120,2807589375,RO
+2807589376,2807589631,FR
+2807589632,2807589887,PT
+2807589888,2807590143,AT
+2807590144,2807590399,MT
+2807590400,2807590655,GR
+2807590656,2807590911,SA
+2807590912,2807595007,US
+2807595008,2807599103,CA
+2807599104,2807607295,US
+2807607296,2807611391,CA
+2807611392,2807824383,US
2807824384,2807889919,CA
2807889920,2808545279,US
2808545280,2808610815,AU
2808610816,2808872959,US
+2808872960,2808938495,UY
2808938496,2809069567,US
2809069568,2809135103,SA
-2809135104,2809855999,US
+2809135104,2809397247,US
+2809397248,2809462783,UY
+2809462784,2809855999,US
2809856000,2809921535,AU
2809921536,2809987071,US
2809987072,2810052607,CA
@@ -87527,7 +43305,9 @@
2810576896,2810642431,VE
2810642432,2810904575,US
2810904576,2810970111,CN
-2810970112,2811559935,US
+2810970112,2811428863,US
+2811428864,2811494399,CA
+2811494400,2811559935,US
2811559936,2811625471,CH
2811625472,2812084223,US
2812084224,2812149759,BO
@@ -87559,12 +43339,10 @@
2813329408,2813526015,US
2813526016,2813591551,NZ
2813591552,2813908479,US
-2813908480,2813908735,SG
+2813908480,2813908735,AU
2813908736,2814181375,US
2814181376,2814246911,AU
-2814246912,2814377215,US
-2814377216,2814377471,EU
-2814377472,2815033343,US
+2814246912,2815033343,US
2815033344,2815098879,NL
2815098880,2815111347,GB
2815111348,2815111348,US
@@ -87573,71 +43351,49 @@
2815139584,2815164415,GB
2815164416,2815229951,US
2815229952,2815295487,ID
-2815295488,2815986687,US
-2815986688,2815986815,GB
-2815986816,2815986831,US
-2815986832,2815987215,GB
-2815987216,2815987231,US
-2815987232,2815987271,GB
-2815987272,2815987327,US
-2815987328,2815987391,GB
-2815987392,2815987711,US
-2815987712,2815988351,FR
-2815988352,2815988383,GB
-2815988384,2815988479,US
-2815988480,2815988543,GB
-2815988544,2815988551,US
-2815988552,2815988559,GB
-2815988560,2816001151,US
-2816001152,2816001183,DE
-2816001184,2816004703,US
-2816004704,2816004711,GB
-2816004712,2816008191,US
-2816008192,2816008207,IE
-2816008208,2816159743,US
+2815295488,2815986943,US
+2815986944,2815987199,GB
+2815987200,2816159743,US
2816159744,2816159999,IN
-2816160000,2816671743,US
+2816160000,2816262143,US
+2816262144,2816263167,IE
+2816263168,2816264191,GB
+2816264192,2816264447,IE
+2816264448,2816264703,GB
+2816264704,2816270335,US
+2816270336,2816271615,SG
+2816271616,2816271871,JP
+2816271872,2816272383,IN
+2816272384,2816273407,JP
+2816273408,2816275455,IN
+2816275456,2816671743,US
2816671744,2816737279,CA
-2816737280,2817059071,US
-2817059072,2817059327,AP
-2817059328,2817060863,US
-2817060864,2817061119,EU
+2816737280,2817061119,US
2817061120,2817062911,LU
-2817062912,2817325055,US
-2817325056,2817325311,EU
-2817325312,2817933055,US
+2817062912,2817933055,US
2817933056,2817933311,CA
-2817933312,2817986303,US
-2817986304,2817986559,AP
-2817986560,2818003711,US
+2817933312,2817933567,PR
+2817933568,2818003711,US
2818003712,2818003722,GB
-2818003723,2818003723,EU
+2818003723,2818003723,US
2818003724,2818003967,GB
-2818003968,2818038537,US
-2818038538,2818038538,AP
-2818038539,2818310143,US
+2818003968,2818113535,US
+2818244608,2818310143,US
2818310144,2818375679,AR
2818375680,2818572287,US
2818637824,2818703359,CH
-2818703360,2822848997,US
-2822848998,2822848998,EU
-2822848999,2823159807,US
+2818703360,2822731894,US
+2822731895,2822731895,GB
+2822731896,2823159807,US
2823159808,2823225343,HK
2823225344,2823553023,US
2823553024,2823618559,ZA
2823618560,2823684095,PA
2823684096,2823749631,KR
-2823749632,2823815167,JP
2823815168,2823946239,ZA
2823946240,2824011775,US
2824011776,2824077311,AR
-2824077312,2824274687,US
-2824274688,2824274720,CH
-2824274721,2824274721,EU
-2824274722,2824274943,CH
-2824274944,2824289279,US
-2824289280,2824289535,GB
-2824289536,2824357375,US
+2824077312,2824357375,US
2824357376,2824357631,GB
2824357632,2824404991,US
2824404992,2824470527,ZA
@@ -87669,19 +43425,7 @@
2827747328,2827812863,AU
2827812864,2827878399,US
2827878400,2827943935,ZA
-2827943936,2827972607,US
-2827972608,2827973631,US
-2827973632,2827974015,US
-2827974016,2827974143,US
-2827974144,2827974655,US
-2827974656,2827974783,US
-2827974784,2827975487,US
-2827975488,2827975551,US
-2827975552,2827991471,US
-2827991472,2827991487,US
-2827991488,2827991503,US
-2827991504,2827991519,US
-2827991520,2828009471,US
+2827943936,2828009471,US
2828009472,2828075007,CA
2828075008,2828533759,US
2828533760,2828664831,AU
@@ -87694,8 +43438,8 @@
2829041920,2829058047,US
2829058048,2829123583,CN
2829123584,2829148159,US
-2829148160,2829148415,HK
-2829148416,2829174783,US
+2829148160,2829148671,HK
+2829148672,2829174783,US
2829174784,2829175807,GB
2829175808,2829176319,US
2829176320,2829176831,DE
@@ -87715,40 +43459,24 @@
2829385728,2829451263,MX
2829451264,2829516799,US
2829516800,2829582335,BW
-2829582336,2829591033,US
-2829591034,2829591034,EU
-2829591035,2829593343,US
-2829593344,2829593599,EU
-2829593600,2829844479,US
+2829582336,2829590783,US
+2829590784,2829591033,GB
+2829591034,2829591034,US
+2829591035,2829591039,GB
+2829591040,2829844479,US
2829844480,2829910015,ZA
2829910016,2830066431,US
2830066432,2830066687,HK
2830066688,2830106623,US
2830106624,2830172159,CO
2830172160,2830434303,US
-2830499840,2830586879,US
-2830586880,2830587135,EU
-2830587136,2830761983,US
+2830499840,2830761983,US
2830761984,2830827519,AU
-2830827520,2830830335,KW
-2830830336,2830830591,US
-2830830592,2830845183,KW
-2830845184,2830845439,US
-2830845440,2830852351,KW
-2830852352,2830853119,US
-2830853120,2830853375,KW
-2830853376,2830853631,US
-2830853632,2830853887,KW
-2830853888,2830854143,US
-2830854144,2830855935,KW
-2830855936,2830856191,US
-2830856192,2830893055,KW
+2830827520,2830893055,KW
2830893056,2830958591,KR
2830958592,2831286271,US
2831548416,2831613951,AU
-2831613952,2831810559,US
-2831810560,2831876095,IT
-2831876096,2832007167,US
+2831613952,2832007167,US
2832072704,2832138239,ZA
2832138240,2832269311,US
2832269312,2832400383,ZA
@@ -87758,9 +43486,7 @@
2832924672,2832990207,KR
2832990208,2833252621,US
2833252622,2833252622,GB
-2833252623,2833293311,US
-2833293312,2833293567,EU
-2833293568,2833383423,US
+2833252623,2833383423,US
2833383424,2833448959,AR
2833580032,2833707007,US
2833707008,2833707263,GB
@@ -87777,49 +43503,57 @@
2835087360,2835152895,AU
2835218432,2835283967,US
2835283968,2835349503,MX
-2835349504,2837446655,US
+2835480576,2837446655,US
2837446656,2839543807,CH
-2839543808,2840015359,US
-2840015360,2840015615,GB
-2840015616,2843803647,US
+2839543808,2843803647,US
2843803648,2843869183,ZA
2843869184,2844524543,US
2844524544,2844590079,KR
2844590080,2844783359,US
2844783360,2844783615,AU
2844783616,2844784639,DE
-2844784640,2844902655,US
+2844784640,2844862975,US
+2844862976,2844863231,CA
+2844863232,2844884991,US
+2844884992,2844885247,FR
+2844885248,2844902655,US
2844902656,2844902911,SG
2844902912,2844912639,US
2844912640,2844912895,JP
2844912896,2845704191,US
-2845704192,2845755391,CU
-2845755392,2845755647,EU
-2845755648,2845769727,CU
-2845835264,2848522239,US
+2845704192,2845769727,CU
+2845835264,2848212991,US
+2848212992,2848215039,GB
+2848215040,2848244735,US
+2848244736,2848245759,GB
+2848245760,2848276479,US
+2848325632,2848522239,US
2848522240,2848587775,AU
2848587776,2848653311,ZA
2848653312,2848980991,US
2848980992,2849964031,KR
2849964032,2850029567,HK
-2850029568,2851995647,US
-2852126720,2852716653,US
+2850029568,2851012607,US
+2851078144,2851995647,US
+2852192256,2852716653,US
2852716654,2852716654,AU
2852716655,2853306367,US
2853306368,2853371903,CL
2853371904,2853765119,US
2853765120,2853830655,MX
-2853830656,2854617087,US
+2853830656,2854289407,US
+2854289408,2854354943,MY
+2854354944,2854617087,US
2854617088,2854682623,MY
2854748160,2855469055,US
-2855469056,2855484415,PY
-2855484416,2855485439,AR
+2855469056,2855484671,PY
+2855484672,2855485439,AR
2855485440,2855501823,UY
2855501824,2855534591,AR
-2855534592,2855706623,US
-2855706624,2855706879,EU
-2855706880,2855811583,US
-2855811584,2855811839,DE
+2855534592,2855811583,US
+2855811584,2855811730,DE
+2855811731,2855811731,US
+2855811732,2855811839,DE
2855811840,2856058879,US
2856058880,2856124415,CH
2856124416,2856184831,US
@@ -87828,17 +43562,16 @@
2856452096,2856517631,BR
2856517632,2856714239,US
2856714240,2856779775,MX
-2856779776,2857369599,US
-2857697280,2857766655,US
-2857766656,2857766911,EU
-2857766912,2859007999,US
+2856779776,2857074687,US
+2857107456,2857238527,US
+2857697280,2858352639,US
+2858418176,2859007999,US
2859008000,2859073535,JP
2859073536,2861069055,US
2861069056,2861069311,GB
-2861069312,2861850623,US
-2861850624,2861850879,AP
+2861069312,2861850879,US
2861850880,2861851391,HK
-2861851392,2861851647,AP
+2861851392,2861851647,US
2861851648,2861861375,HK
2861861376,2861862911,US
2861862912,2861863167,AU
@@ -87851,45 +43584,37 @@
2862284800,2862350335,AR
2862350336,2862415871,US
2862415872,2862481407,AU
-2862481408,2862751999,US
-2862752000,2862752255,EU
-2862752256,2863202303,US
+2862481408,2863202303,US
2863202304,2863267839,MX
2863267840,2863595519,US
2863595520,2863661055,CA
-2863661056,2863857663,US
+2863661056,2863825919,US
+2863828992,2863857663,US
2863857664,2863923199,SG
2863923200,2864844799,US
2864844800,2864845055,NL
2864845056,2864848895,US
2864848896,2864849151,GB
-2864849152,2865417457,US
-2865417458,2865417458,GB
-2865417459,2865577983,US
+2864849152,2865417215,US
+2865417216,2865417471,GB
+2865417472,2865577983,US
2865577984,2865610751,BE
2865610752,2865889279,US
2865889280,2865954815,AR
-2865954816,2867593215,US
-2867593216,2867639295,CH
-2867639296,2867639551,AT
-2867639552,2867724287,CH
+2865954816,2867265535,US
+2867331072,2867396607,US
+2867462144,2867593215,US
+2867593216,2867724287,CH
2867855360,2868117503,US
-2868379648,2868605376,US
-2868605377,2868605377,NO
-2868605378,2868658175,US
-2868658176,2868660223,GB
-2868660224,2868660479,EU
-2868660480,2868662271,US
-2868662272,2868662527,EU
-2868662528,2868673279,US
-2868673280,2868673535,ZA
-2868673536,2868674336,US
-2868674337,2868674337,EU
-2868674338,2868674559,US
-2868674560,2868682751,AU
-2868682752,2868682752,US
-2868682753,2868682753,AP
-2868682754,2868772863,US
+2868379648,2868605183,US
+2868605184,2868605439,NO
+2868605440,2868658175,US
+2868658176,2868658431,GB
+2868658432,2868676607,US
+2868676608,2868676863,AU
+2868676864,2868689407,US
+2868689408,2868689663,AU
+2868689664,2868772863,US
2868838400,2868903935,BE
2868903936,2869035007,SG
2869035008,2869166079,JP
@@ -87897,17 +43622,9 @@
2869428224,2869952511,CN
2869952512,2870018047,FR
2870018048,2870083583,DE
-2870083584,2870087935,FR
-2870087936,2870088191,ES
-2870088192,2870088959,FR
-2870088960,2870088991,ES
-2870088992,2870089727,FR
-2870089728,2870090495,DE
-2870090496,2870090751,BE
-2870090752,2870091775,DE
-2870091776,2870095871,FR
-2870095872,2870096383,SG
-2870096384,2870149119,FR
+2870083584,2870089727,FR
+2870089728,2870091775,DE
+2870091776,2870149119,FR
2870149120,2870214655,HU
2870214656,2870280191,DK
2870280192,2870345727,NL
@@ -87925,8 +43642,7 @@
2870588160,2870588415,NL
2870588416,2870588927,HU
2870588928,2870589439,PL
-2870589440,2870590975,RU
-2870590976,2870591231,LV
+2870589440,2870591231,RU
2870591232,2870591487,IT
2870591488,2870591743,PL
2870591744,2870591999,SE
@@ -87957,7 +43673,7 @@
2870935552,2871001087,HU
2871001088,2871066623,SE
2871066624,2871083007,CH
-2871083008,2871099391,RO
+2871083008,2871099391,FR
2871099392,2871101439,NL
2871101440,2871103487,CZ
2871103488,2871104063,GB
@@ -87972,29 +43688,26 @@
2871130112,2871132159,RU
2871132160,2872049663,CN
2872049664,2873098239,IN
-2873098240,2873368575,US
-2873368576,2873368831,IN
-2873368832,2873369087,US
-2873369088,2873376767,IN
-2873376768,2873884671,US
+2873098240,2873884671,US
2873884672,2874146815,IN
2874146816,2875195391,CN
2875195392,2875719679,TH
2875719680,2877292543,CN
-2877292544,2879332607,US
-2879332608,2879332863,GB
-2879332864,2879336447,US
+2877292544,2879336447,US
2879336448,2879336959,GB
-2879336960,2879467519,US
-2879467520,2879468031,AP
-2879468032,2879469567,US
-2879469568,2879470079,AP
-2879470080,2882469887,US
+2879336960,2879469567,US
+2879469568,2879470079,IN
+2879470080,2881486847,US
+2881486848,2881487103,GB
+2881487104,2882469887,US
2882469888,2882535423,SG
2882535424,2883583999,CN
2883584000,2885681151,VN
-2885681152,2886729727,US
+2885681152,2886667007,US
+2886667008,2886667263,DE
+2886667264,2886729727,US
2887778304,2889875455,US
+2890414080,2890415103,ZA
2894069760,2894921727,US
2894921728,2895118335,GB
2895118336,2895301887,US
@@ -88010,7 +43723,9 @@
2897215488,2897739775,DE
2897739776,2898001919,FR
2898001920,2898132991,GB
-2898132992,2898788351,US
+2898132992,2898264063,US
+2898264064,2898264064,AU
+2898264065,2898788351,US
2898788352,2899050495,GB
2899050496,2899116031,FR
2899116032,2899148799,VN
@@ -88022,39 +43737,7 @@
2899574784,2899902463,GB
2899902464,2899967999,US
2899968000,2900099071,CA
-2900099072,2900361215,US
-2902458368,2902462463,US
-2902462464,2902470775,US
-2902470776,2902470777,BD
-2902470778,2902472018,US
-2902472019,2902472021,AL
-2902472022,2902472725,US
-2902472726,2902472728,BD
-2902472729,2902472788,US
-2902472789,2902472790,LK
-2902472791,2902472813,US
-2902472814,2902472814,LK
-2902472815,2902472834,US
-2902472835,2902472836,BD
-2902472837,2902473028,US
-2902473029,2902473031,IN
-2902473032,2902473107,US
-2902473108,2902473109,BD
-2902473110,2902473556,US
-2902473557,2902473558,LK
-2902473559,2902473649,US
-2902473650,2902473650,BD
-2902473651,2902473652,US
-2902473653,2902473653,BD
-2902473654,2902475263,US
-2902475264,2902475327,CY
-2902475328,2902475399,US
-2902475400,2902475407,UY
-2902475408,2902475503,US
-2902475504,2902475519,CW
-2902475520,2902476287,US
-2902476288,2902476319,BE
-2902476320,2902476543,US
+2900099072,2902476543,US
2902476544,2902476799,CW
2902476800,2902507519,US
2902507520,2902515711,CA
@@ -88064,118 +43747,53 @@
2902564688,2902564703,AU
2902564704,2904555519,US
2904555520,2904817663,CA
-2904817664,2905018367,US
-2905018368,2905022463,IN
-2905022464,2905030655,US
-2905030656,2905034751,IN
-2905034752,2905045247,US
-2905045248,2905045503,SG
-2905045504,2905350729,US
-2905350730,2905350730,US
-2905350731,2905376391,US
-2905376392,2905376399,PK
-2905376400,2905376415,US
-2905376416,2905376423,CN
-2905376424,2905376431,TW
-2905376432,2905376447,US
-2905376448,2905376455,HK
-2905376456,2905376463,PK
-2905376464,2905376607,US
-2905376608,2905376615,CA
-2905376616,2905376855,US
-2905376856,2905376863,CA
-2905376864,2905377503,US
-2905377504,2905377511,ID
-2905377512,2905377519,MY
-2905377520,2905378559,US
-2905378560,2905378607,CA
-2905378608,2905378687,US
-2905378688,2905378815,CA
+2904817664,2905001983,US
+2905001984,2905002152,GB
+2905002153,2905002153,US
+2905002154,2905002495,GB
+2905002496,2905044991,US
+2905044992,2905045503,SG
+2905045504,2905378559,US
+2905378560,2905378815,CA
2905378816,2905379071,US
2905379072,2905379327,CA
2905379328,2905380607,US
2905380608,2905380863,CA
-2905380864,2905382559,US
-2905382560,2905382591,EE
-2905382592,2905385879,US
-2905385880,2905385887,PH
-2905385888,2905385911,US
-2905385912,2905385919,VN
-2905385920,2905385927,US
-2905385928,2905385935,HK
-2905385936,2905385943,PK
-2905385944,2905385951,CN
-2905385952,2905385983,CR
-2905385984,2905387519,US
+2905380864,2905387519,US
2905387520,2905388031,CA
-2905388032,2905390879,US
-2905390880,2905390895,GB
-2905390896,2905390903,CN
-2905390904,2905390911,PK
-2905390912,2905391327,US
-2905391328,2905391335,CR
-2905391336,2905391359,US
-2905391360,2905391391,EG
-2905391392,2905391599,US
-2905391600,2905391615,GB
-2905391616,2905394175,US
+2905388032,2905394175,US
2905394176,2905394687,CA
-2905394688,2905404503,US
-2905404504,2905404511,MY
-2905404512,2905404703,US
-2905404704,2905404759,IN
-2905404760,2905404767,MY
-2905404768,2905404799,IN
-2905404800,2905404943,US
-2905404944,2905404951,MY
-2905404952,2905404975,US
-2905404976,2905404983,MY
-2905404984,2905405055,US
-2905405056,2905405063,CN
-2905405064,2905405071,US
-2905405072,2905405079,HK
-2905405080,2905405095,US
-2905405096,2905405103,CN
-2905405104,2905405167,US
-2905405168,2905405231,MY
-2905405232,2905405439,US
-2905405440,2905405447,MY
-2905405448,2905405679,US
+2905394688,2905401855,US
+2905401856,2905402111,CA
+2905402112,2905405679,US
2905405680,2905405687,CN
2905405688,2905407743,US
2905407744,2905407999,TW
-2905408000,2905412095,US
-2905412096,2905412351,CN
-2905412352,2905415679,US
+2905408000,2905415679,US
2905415680,2905415935,GB
2905415936,2905446655,US
2905446656,2905446911,DE
-2905446912,2905451487,US
-2905451488,2905451503,CW
-2905451504,2905451519,US
-2905451520,2905451647,PA
-2905451648,2905473023,US
+2905446912,2905473023,US
2905473024,2905481215,CA
-2905481216,2913992703,US
+2905481216,2913086719,US
+2913086720,2913086812,CA
+2913086813,2913086813,US
+2913086814,2913086816,CA
+2913086817,2913086817,US
+2913086818,2913086819,CA
+2913086820,2913086820,US
+2913086821,2913086975,CA
+2913086976,2913992703,US
2913992704,2914516991,CA
2914516992,2915092135,US
2915092136,2915092143,SA
-2915092144,2915096014,US
-2915096015,2915096015,US
-2915096016,2915250175,US
+2915092144,2915250175,US
2915250176,2915254271,CA
-2915254272,2915274751,US
-2915274752,2915274815,PL
-2915274816,2915275007,US
-2915275008,2915275071,PL
-2915275072,2915275263,US
-2915275264,2915275327,PL
-2915275328,2915497759,US
-2915497760,2915497761,US
-2915497762,2915516415,US
+2915254272,2915516415,US
2915516416,2915516671,NL
2915516672,2915516927,CA
-2915516928,2915517439,US
+2915516928,2915517183,US
+2915517184,2915517439,RU
2915517440,2915518463,DK
2915518464,2915520511,GB
2915520512,2915521023,AU
@@ -88184,32 +43802,16 @@
2915521536,2915526911,US
2915526912,2915527167,DE
2915527168,2915527679,US
-2915527680,2915528715,NL
-2915528716,2915528719,US
-2915528720,2915528783,NL
+2915527680,2915528711,NL
+2915528712,2915528735,US
+2915528736,2915528751,NL
+2915528752,2915528767,US
+2915528768,2915528783,NL
2915528784,2915795013,US
2915795014,2915795014,MX
2915795015,2915958783,US
2915958784,2916024319,CA
-2916024320,2916098191,US
-2916098192,2916098207,CA
-2916098208,2916104703,US
-2916104704,2916104719,ZA
-2916104720,2916110399,US
-2916110400,2916110407,LK
-2916110408,2916111199,US
-2916111200,2916111215,CA
-2916111216,2916111327,US
-2916111328,2916111343,CA
-2916111344,2916111687,US
-2916111688,2916111695,CA
-2916111696,2916120823,US
-2916120824,2916120831,CA
-2916120832,2916121367,US
-2916121368,2916121375,CA
-2916121376,2916140287,US
-2916140288,2916140543,US
-2916140544,2916163583,US
+2916024320,2916163583,US
2916163584,2916171775,CA
2916171776,2916184063,US
2916184064,2916196351,CA
@@ -88219,236 +43821,27 @@
2916319232,2916335615,PR
2916335616,2916368383,US
2916368384,2916401151,CA
-2916401152,2916434623,US
-2916434624,2916434655,CA
-2916434656,2916436487,US
-2916436488,2916436495,CA
-2916436496,2916436543,US
-2916436544,2916436607,CA
-2916436608,2916437039,US
-2916437040,2916437047,DE
-2916437048,2916437055,CN
-2916437056,2916437207,US
-2916437208,2916437215,TH
-2916437216,2916437231,US
-2916437232,2916437239,SG
-2916437240,2916440143,US
-2916440144,2916440159,CA
-2916440160,2916440175,US
-2916440176,2916440191,CA
-2916440192,2916440287,US
-2916440288,2916440295,CA
-2916440296,2916441119,US
-2916441120,2916441151,CA
-2916441152,2916443151,US
-2916443152,2916443159,GB
-2916443160,2916515839,US
+2916401152,2916515839,US
2916515840,2916519935,CA
-2916519936,2916525087,US
-2916525088,2916525103,PE
-2916525104,2916528569,US
-2916528570,2916528572,IL
-2916528573,2916528690,US
-2916528691,2916528715,CH
-2916528716,2916528953,US
-2916528954,2916528962,MK
-2916528963,2916530193,US
-2916530194,2916530226,FR
-2916530227,2916530552,US
-2916530553,2916530622,AU
-2916530623,2916544927,US
-2916544928,2916544959,BZ
-2916544960,2916547839,US
-2916547840,2916547871,BZ
-2916547872,2916581375,US
-2916581376,2916594687,PR
-2916594688,2916594943,US
-2916594944,2916614143,PR
-2916614144,2917167299,US
-2917167300,2917167302,CA
-2917167303,2917167303,AR
-2917167304,2917167311,US
-2917167312,2917167316,BR
-2917167317,2917167317,US
-2917167318,2917167318,CA
-2917167319,2917167322,BR
-2917167323,2917167325,US
-2917167326,2917167328,BR
-2917167329,2917167329,AT
-2917167330,2917167332,US
-2917167333,2917167335,BR
-2917167336,2917167339,US
-2917167340,2917167340,BR
-2917167341,2917167342,US
-2917167343,2917167351,BR
-2917167352,2917167354,US
-2917167355,2917167358,BR
-2917167359,2917167679,US
-2917167680,2917167711,BR
-2917167712,2917167714,US
-2917167715,2917167717,CA
-2917167718,2917167718,BR
-2917167719,2917167722,CA
-2917167723,2917167744,BR
-2917167745,2917167773,US
-2917167774,2917167775,BR
-2917167776,2917167807,LT
-2917167808,2917167839,US
-2917167840,2917167871,TR
-2917167872,2917167903,US
-2917167904,2917167935,TR
-2917167936,2917167967,US
-2917167968,2917167968,IN
-2917167969,2917167999,US
-2917168000,2917168000,UA
-2917168001,2917168006,US
-2917168007,2917168031,UA
-2917168032,2917168095,US
-2917168096,2917168127,GB
-2917168128,2917168223,US
-2917168224,2917168230,BR
-2917168231,2917168232,US
-2917168233,2917168255,BR
-2917168256,2917168319,US
-2917168320,2917168351,AR
-2917168352,2917168352,US
-2917168353,2917168415,BR
-2917168416,2917168447,US
-2917168448,2917168479,BR
-2917168480,2917168607,US
-2917168608,2917168608,AU
-2917168609,2917168627,BR
-2917168628,2917168632,US
-2917168633,2917168633,BR
-2917168634,2917168959,US
-2917168960,2917169023,DE
-2917169024,2917169096,US
-2917169097,2917169098,CA
-2917169099,2917169100,BR
-2917169101,2917169101,US
-2917169102,2917169102,BR
-2917169103,2917169106,CA
-2917169107,2917169109,US
-2917169110,2917169110,CA
-2917169111,2917169113,BR
-2917169114,2917169114,CA
-2917169115,2917169120,US
-2917169121,2917169123,BR
-2917169124,2917169124,CA
-2917169125,2917169125,US
-2917169126,2917169144,BR
-2917169145,2917169145,US
-2917169146,2917169147,BR
-2917169148,2917169149,US
-2917169150,2917169150,BR
-2917169151,2917169663,US
-2917169664,2917169695,DE
-2917169696,2917170015,US
-2917170016,2917170047,UA
-2917170048,2917170079,BR
-2917170080,2917170111,US
-2917170112,2917170143,TR
-2917170144,2917170239,US
-2917170240,2917170303,BR
-2917170304,2917170758,US
-2917170759,2917170764,BR
-2917170765,2917170771,US
-2917170772,2917170772,BR
-2917170773,2917170774,US
-2917170775,2917170777,BR
-2917170778,2917170783,US
-2917170784,2917170785,AR
-2917170786,2917170800,BR
-2917170801,2917170801,US
-2917170802,2917170806,BR
-2917170807,2917170809,US
-2917170810,2917170812,BR
-2917170813,2917170819,US
-2917170820,2917170820,BR
-2917170821,2917170821,US
-2917170822,2917170822,BD
-2917170823,2917170823,US
-2917170824,2917170824,PH
-2917170825,2917170825,BR
-2917170826,2917170830,US
-2917170831,2917170831,PH
-2917170832,2917170839,US
-2917170840,2917170840,BD
-2917170841,2917170841,PH
-2917170842,2917170843,US
-2917170844,2917170844,EC
-2917170845,2917170846,US
-2917170847,2917170847,PK
-2917170848,2917170848,PH
-2917170849,2917170850,US
-2917170851,2917170851,BR
-2917170852,2917170852,US
-2917170853,2917170853,BR
-2917170854,2917170856,PH
-2917170857,2917170859,US
-2917170860,2917170861,PH
-2917170862,2917170862,CA
-2917170863,2917170863,US
-2917170864,2917170864,PH
-2917170865,2917170869,US
-2917170870,2917170870,BD
-2917170871,2917170871,AU
-2917170872,2917170873,BD
-2917170874,2917170877,US
-2917170878,2917170878,BD
-2917170879,2917170948,US
-2917170949,2917170949,BR
-2917170950,2917170952,US
-2917170953,2917170953,SV
-2917170954,2917170962,US
-2917170963,2917170964,UA
-2917170965,2917170965,CY
-2917170966,2917170969,US
-2917170970,2917170970,IN
-2917170971,2917170979,US
-2917170980,2917170980,NL
-2917170981,2917170999,US
-2917171000,2917171002,DE
-2917171003,2917171003,IN
-2917171004,2917171005,US
-2917171006,2917171006,CA
-2917171007,2917171007,GB
-2917171008,2917171013,US
-2917171014,2917171014,MX
-2917171015,2917171015,CA
-2917171016,2917171025,US
-2917171026,2917171027,NL
-2917171028,2917171031,US
-2917171032,2917171032,BR
-2917171033,2917171034,US
-2917171035,2917171036,BR
-2917171037,2917171050,US
-2917171051,2917171051,BR
-2917171052,2917171055,US
-2917171056,2917171056,IN
-2917171057,2917171093,US
-2917171094,2917171094,BR
-2917171095,2917171120,US
-2917171121,2917171121,BR
-2917171122,2917171167,US
-2917171168,2917171199,BR
-2917171200,2917195775,US
-2917195776,2917196031,A2
-2917196032,2917196415,CA
-2917196416,2917196543,A2
-2917196544,2917196799,CA
-2917196800,2917198847,A2
-2917198848,2917199103,CA
-2917199104,2917199359,A2
-2917199360,2917203967,CA
-2917203968,2917210335,US
-2917210336,2917210367,CA
-2917210368,2917257215,US
+2916519936,2916581375,US
+2916581376,2916614143,PR
+2916614144,2917117951,US
+2917117952,2917122047,NL
+2917122048,2917170822,US
+2917170823,2917170823,UA
+2917170824,2917170854,US
+2917170855,2917170856,UA
+2917170857,2917171086,US
+2917171087,2917171087,UA
+2917171088,2917179391,US
+2917181440,2917181951,US
+2917183488,2917195775,US
+2917195776,2917203967,CA
+2917203968,2917257215,US
2917257216,2917261311,KY
2917261312,2917265407,US
-2917265408,2917267775,JM
-2917267776,2917267839,VG
-2917267840,2917267967,AG
+2917265408,2917267711,JM
+2917267712,2917267967,AG
2917267968,2917268223,JM
2917268224,2917268479,BB
2917268480,2917269503,JM
@@ -88456,326 +43849,86 @@
2917449728,2917466111,PR
2917466112,2917572607,US
2917572608,2917580799,CA
-2917580800,2917591807,US
-2917591808,2917591823,RO
-2917591824,2917591855,US
-2917591856,2917591903,RO
-2917591904,2917597439,US
+2917580800,2917597439,US
2917597440,2917597695,GB
2917597696,2917621759,US
2917621760,2917629951,CA
-2917629952,2917646591,US
-2917646592,2917647231,CN
-2917647232,2917647359,US
-2917647360,2917648511,CN
-2917648512,2917648639,US
-2917648640,2917649279,CN
-2917649280,2917649407,US
-2917649408,2917649535,RU
-2917649536,2917649663,CN
-2917649664,2917649791,GB
-2917649792,2917649919,AZ
-2917649920,2917650047,CN
-2917650048,2917650175,US
-2917650176,2917650303,CN
-2917650304,2917650431,PA
-2917650432,2917650559,CN
-2917650560,2917651071,US
-2917651072,2917651455,CN
-2917651456,2917651711,US
-2917651712,2917651839,CR
-2917651840,2917652095,CN
-2917652096,2917652223,IN
+2917629952,2917646847,US
+2917646848,2917647103,CN
+2917647104,2917647359,US
+2917647360,2917648383,CN
+2917648384,2917648639,US
+2917648640,2917648895,CN
+2917648896,2917652223,US
2917652224,2917652479,AU
-2917652480,2917652735,CN
-2917652736,2917652863,NZ
-2917652864,2917653247,US
-2917653248,2917653375,CN
-2917653376,2917653503,PA
+2917652480,2917653503,US
2917653504,2917654015,GB
-2917654016,2917654143,FI
-2917654144,2917654271,MY
+2917654016,2917654271,US
2917654272,2917654527,CN
-2917654528,2917654655,TH
-2917654656,2917654783,MX
+2917654528,2917654783,US
2917654784,2917655039,DE
-2917655040,2917655167,US
-2917655168,2917655295,SG
-2917655296,2917655423,GB
-2917655424,2917655807,CN
-2917655808,2917655935,US
-2917655936,2917656063,HU
-2917656064,2917656447,CN
-2917656448,2917656575,FR
-2917656576,2917656703,US
-2917656704,2917657087,CN
-2917657088,2917657215,NO
-2917657216,2917657471,US
-2917657472,2917657599,CN
-2917657600,2917657855,US
-2917657856,2917657983,CN
-2917657984,2917658367,US
-2917658368,2917658495,CN
-2917658496,2917659519,US
-2917659520,2917659647,HK
-2917659648,2917659775,US
-2917659776,2917659903,CN
-2917659904,2917660415,US
-2917660416,2917660543,CA
-2917660544,2917660671,GI
+2917655040,2917655551,US
+2917655552,2917655807,CN
+2917655808,2917656063,US
+2917656064,2917656319,CN
+2917656320,2917656831,US
+2917656832,2917657087,CN
+2917657088,2917660671,US
2917660672,2917661183,GB
-2917661184,2917661311,CA
-2917661312,2917661695,CN
-2917661696,2917661823,ZA
-2917661824,2917661951,PK
-2917661952,2917662079,CN
-2917662080,2917663391,US
-2917663392,2917663423,EG
-2917663424,2917663455,US
-2917663456,2917663487,EG
-2917663488,2917663935,US
-2917663936,2917663967,EG
-2917663968,2917664095,US
-2917664096,2917664127,EG
-2917664128,2917664415,US
-2917664416,2917664447,EG
-2917664448,2917664815,US
-2917664816,2917664831,CN
-2917664832,2917665663,US
-2917665664,2917665695,EG
-2917665696,2917667391,US
-2917667392,2917667423,EG
-2917667424,2917667519,US
-2917667520,2917667583,CA
-2917667584,2917672191,US
-2917672192,2917672223,CA
-2917672224,2917672319,US
-2917672320,2917672351,EG
-2917672352,2917672927,US
-2917672928,2917672959,EG
-2917672960,2917676031,US
+2917661184,2917676031,US
2917676032,2917676287,CA
-2917676288,2917681423,US
-2917681424,2917681439,MY
-2917681440,2917697471,US
-2917697472,2917697503,EG
-2917697504,2917697567,US
-2917697568,2917697599,EG
-2917697600,2917697887,US
-2917697888,2917697919,EG
-2917697920,2917698679,US
-2917698680,2917698687,CA
-2917698688,2917699775,US
-2917699776,2917699807,EG
-2917699808,2917699839,US
+2917676288,2917699839,US
2917699840,2917700351,CA
2917700352,2917700959,US
2917700960,2917700967,CN
-2917700968,2917700975,GB
-2917700976,2917700991,US
-2917700992,2917700999,MY
-2917701000,2917704191,US
+2917700968,2917704191,US
2917704192,2917704447,CA
-2917704448,2917706239,US
-2917706240,2917707007,CA
-2917707008,2917707359,US
-2917707360,2917707391,EG
-2917707392,2917707519,US
+2917704448,2917707519,US
2917707520,2917707775,CA
-2917707776,2917710079,US
-2917710080,2917710847,CA
+2917707776,2917709823,US
+2917709824,2917710847,CA
2917710848,2917713919,US
2917713920,2917714431,CA
2917714432,2917715967,US
-2917715968,2917716223,DE
-2917716224,2917724943,US
-2917724944,2917724959,MY
-2917724960,2917724991,US
-2917724992,2917725007,MY
-2917725008,2917726463,US
-2917726464,2917726495,CR
-2917726496,2917795951,US
-2917795952,2917795959,CA
-2917795960,2917796263,US
-2917796264,2917796271,CA
-2917796272,2917801983,US
-2917801984,2917801991,CA
-2917801992,2917802047,US
-2917802048,2917802063,CA
-2917802064,2917802143,US
-2917802144,2917802159,CA
-2917802160,2917802231,US
-2917802232,2917802239,CA
-2917802240,2917802295,US
-2917802296,2917802303,CA
-2917802304,2917802367,US
-2917802368,2917802375,CA
-2917802376,2917804351,US
-2917804352,2917804383,CA
-2917804384,2917804399,US
-2917804400,2917804415,CA
-2917804416,2917804527,US
-2917804528,2917804535,LK
-2917804536,2917804543,US
-2917804544,2917804559,CA
-2917804560,2917804607,US
-2917804608,2917804639,CA
-2917804640,2917804815,US
-2917804816,2917804831,CA
-2917804832,2917804879,US
-2917804880,2917804887,CA
-2917804888,2917804911,US
-2917804912,2917804919,CA
-2917804920,2917804935,US
-2917804936,2917804943,CA
-2917804944,2917804951,US
-2917804952,2917804959,CA
-2917804960,2917805039,US
-2917805040,2917805047,CA
-2917805048,2917809231,US
-2917809232,2917809239,CA
-2917809240,2917809407,US
-2917809408,2917809439,CA
-2917809440,2917809927,US
-2917809928,2917809935,CA
-2917809936,2917811511,US
-2917811512,2917811519,LK
-2917811520,2917811583,US
-2917811584,2917811711,LK
-2917811712,2917813679,US
-2917813680,2917813687,LK
-2917813688,2917813688,US
-2917813689,2917813696,LK
-2917813697,2917815575,US
-2917815576,2917815583,RO
-2917815584,2917823831,US
-2917823832,2917823839,CA
-2917823840,2917823871,US
-2917823872,2917823887,CA
-2917823888,2917823895,US
-2917823896,2917823903,CA
-2917823904,2917823975,US
-2917823976,2917823991,CA
-2917823992,2917828351,US
-2917828352,2917828479,IN
-2917828480,2917829727,US
-2917829728,2917829743,CA
-2917829744,2917835679,US
-2917835680,2917835687,CA
-2917835688,2917835815,US
-2917835816,2917835823,CA
-2917835824,2917842175,US
+2917715968,2917716223,CA
+2917716224,2917720575,US
+2917720576,2917720831,CA
+2917720832,2917842175,US
2917842176,2917842431,CA
-2917842432,2917847063,US
-2917847064,2917847071,CA
-2917847072,2917847935,US
-2917847936,2917847943,CN
-2917847944,2917851207,US
-2917851208,2917851215,CA
-2917851216,2917853471,US
-2917853472,2917853487,CA
-2917853488,2917853519,US
-2917853520,2917853535,CA
-2917853536,2917853567,US
-2917853568,2917853575,CA
-2917853576,2917853615,US
-2917853616,2917853623,CA
-2917853624,2917854591,US
-2917854592,2917854719,LK
-2917854720,2917856511,US
-2917856512,2917856639,IN
-2917856640,2918014975,US
+2917842432,2918014975,US
2918014976,2918023167,CA
2918023168,2918043647,US
-2918043648,2918043711,CA
-2918043712,2918043719,US
-2918043720,2918043775,CA
-2918043776,2918043783,US
-2918043784,2918043799,CA
-2918043800,2918043807,US
-2918043808,2918043823,TH
-2918043824,2918043831,US
-2918043832,2918043839,PH
-2918043840,2918043847,ID
-2918043848,2918043855,IR
-2918043856,2918043863,AU
-2918043864,2918043887,US
-2918043888,2918043895,AU
-2918043896,2918043903,SG
-2918043904,2918044351,CA
-2918044352,2918044367,GB
-2918044368,2918044383,US
-2918044384,2918044399,CA
-2918044400,2918044415,US
-2918044416,2918044447,CA
-2918044448,2918044479,US
-2918044480,2918044575,CA
-2918044576,2918044639,US
-2918044640,2918044991,CA
-2918044992,2918045055,PT
-2918045056,2918045119,CA
-2918045120,2918045183,AU
-2918045184,2918047743,CA
+2918043648,2918047743,CA
2918047744,2918051839,US
2918051840,2918121471,CA
2918121472,2918154239,US
2918154240,2918170623,CA
2918170624,2918187775,US
-2918187776,2918187839,CA
-2918187840,2918199679,US
-2918199680,2918199743,CA
-2918199744,2918201551,US
-2918201552,2918201567,CA
-2918201568,2918202079,US
-2918202080,2918202087,CA
-2918202088,2918202223,US
-2918202224,2918202271,CA
-2918202272,2918212143,US
-2918212144,2918212159,GB
-2918212160,2918212175,US
-2918212176,2918212183,GB
-2918212184,2918212479,US
-2918212480,2918212511,IL
-2918212512,2918212543,US
-2918212544,2918212607,GB
-2918212608,2918213519,US
-2918213520,2918213535,NZ
-2918213536,2918214111,US
-2918214112,2918214127,SG
-2918214128,2918232063,US
+2918187776,2918188031,CA
+2918188032,2918232063,US
2918232064,2918236159,CA
2918236160,2918260735,US
2918260736,2918264831,CA
2918264832,2918277119,US
2918277120,2918281215,CA
2918281216,2918286335,US
-2918286336,2918286719,CA
-2918286720,2918286879,US
-2918286880,2918286895,GB
-2918286896,2918287103,US
+2918286336,2918286591,CA
+2918286592,2918287103,US
2918287104,2918287359,CR
2918287360,2918289407,GB
2918289408,2918314216,US
2918314217,2918314217,GB
-2918314218,2918348114,US
-2918348115,2918348115,US
-2918348116,2918348802,US
-2918348803,2918348831,GB
-2918348832,2918349026,US
-2918349027,2918349032,GB
-2918349033,2918371327,US
+2918314218,2918371327,US
2918371328,2918375423,CA
2918375424,2918391807,US
2918391808,2918395903,CA
2918395904,2918404095,US
2918404096,2918406911,PR
2918406912,2918407167,US
-2918407168,2918408191,PR
-2918408192,2918412903,US
-2918412904,2918412911,ES
-2918412912,2918412927,US
-2918412928,2918412935,ES
-2918412936,2918432767,US
+2918407168,2918407295,PR
+2918407296,2918407423,US
+2918407424,2918408191,PR
+2918408192,2918432767,US
2918432768,2918436863,CA
2918436864,2918469631,US
2918469632,2918471423,CA
@@ -88785,44 +43938,17 @@
2918473216,2918473727,CA
2918473728,2918477823,US
2918477824,2918481919,CA
-2918481920,2918502078,US
-2918502079,2918502079,US
-2918502080,2918514943,US
-2918514944,2918515079,CA
-2918515080,2918515199,US
-2918515200,2918515327,CA
-2918515328,2918515599,US
-2918515600,2918515607,NL
-2918515608,2918532095,US
-2918532096,2918532103,US
-2918532104,2918532111,US
-2918532112,2918532119,CN
-2918532120,2918532143,US
-2918532144,2918532151,PK
-2918532152,2918533119,US
-2918533120,2918533127,CN
-2918533128,2918533143,US
-2918533144,2918533151,CN
-2918533152,2918533159,US
-2918533160,2918533167,CN
-2918533168,2918533191,US
-2918533192,2918533199,AU
-2918533200,2918533215,CN
-2918533216,2918534687,US
-2918534688,2918534695,CN
-2918534696,2918534703,US
-2918534704,2918534719,CN
-2918534720,2918534815,US
-2918534816,2918534879,CN
-2918534880,2918534943,US
-2918534944,2918534975,CN
-2918534976,2918536031,US
-2918536032,2918536063,US
-2918536064,2918536183,US
-2918536184,2918536187,US
-2918536188,2918536447,US
-2918536448,2918536703,US
-2918536704,2918570239,US
+2918481920,2918528255,US
+2918528256,2918528511,NO
+2918528512,2918528767,US
+2918528768,2918528863,CA
+2918528864,2918528883,US
+2918528884,2918528885,CA
+2918528886,2918530559,US
+2918530560,2918530815,PH
+2918530816,2918536719,US
+2918536720,2918536727,CA
+2918536728,2918570239,US
2918570240,2918570495,JP
2918570496,2918580223,US
2918580224,2918588415,CA
@@ -88841,12 +43967,7 @@
2918817024,2918828031,US
2918828032,2918828543,UA
2918828544,2918829055,ES
-2918829056,2918829183,US
-2918829184,2918829311,PL
-2918829312,2918829439,CA
-2918829440,2918829567,JM
-2918829568,2918829695,GR
-2918829696,2918829823,DE
+2918829056,2918829823,US
2918829824,2918830079,CN
2918830080,2918834175,CA
2918834176,2918842367,US
@@ -88854,464 +43975,52 @@
2918875136,2918973439,US
2918973440,2918989823,CA
2918989824,2919010303,US
-2919010304,2919010815,CA
-2919010816,2919020543,US
-2919020544,2919020575,CA
-2919020576,2919020607,US
-2919020608,2919020655,CA
-2919020656,2919020711,US
-2919020712,2919020719,CA
-2919020720,2919020727,US
-2919020728,2919020799,CA
-2919020800,2919021327,US
-2919021328,2919021335,CA
-2919021336,2919021343,US
-2919021344,2919021567,CA
-2919021568,2919022079,US
-2919022080,2919022271,CA
-2919022272,2919022287,US
-2919022288,2919022463,CA
-2919022464,2919055359,US
+2919010304,2919010559,CA
+2919010560,2919020543,US
+2919020544,2919020559,CA
+2919020560,2919020607,US
+2919020608,2919020615,CA
+2919020616,2919021359,US
+2919021360,2919021375,CA
+2919021376,2919021487,US
+2919021488,2919021535,CA
+2919021536,2919022207,US
+2919022208,2919022239,CA
+2919022240,2919022455,US
+2919022456,2919022463,CA
+2919022464,2919022495,US
+2919022496,2919022527,CA
+2919022528,2919055359,US
2919055360,2919057407,CN
2919057408,2919059455,IN
2919059456,2919063551,CN
2919063552,2919064063,MX
-2919064064,2919067655,CN
-2919067656,2919067695,US
-2919067696,2919067703,PK
-2919067704,2919067711,ES
-2919067712,2919067719,CN
-2919067720,2919067727,TR
-2919067728,2919067735,IN
-2919067736,2919067743,US
-2919067744,2919067751,BR
-2919067752,2919067759,IN
-2919067760,2919067767,CA
-2919067768,2919067775,US
-2919067776,2919067783,AU
-2919067784,2919067791,US
-2919067792,2919067799,BR
-2919067800,2919067823,US
-2919067824,2919067831,BR
-2919067832,2919067839,US
-2919067840,2919067847,BR
-2919067848,2919067863,US
-2919067864,2919067871,ES
-2919067872,2919067879,CA
-2919067880,2919067887,TW
-2919067888,2919067895,IE
-2919067896,2919067903,CA
-2919067904,2919067911,US
-2919067912,2919067919,CN
-2919067920,2919067927,US
-2919067928,2919067935,RU
-2919067936,2919067943,BR
-2919067944,2919067951,PL
-2919067952,2919067959,CN
-2919067960,2919067967,IL
-2919067968,2919067975,US
-2919067976,2919067983,CA
-2919067984,2919067999,CN
-2919068000,2919068007,CM
-2919068008,2919068015,BR
-2919068016,2919068023,US
-2919068024,2919068031,HK
-2919068032,2919068039,US
-2919068040,2919068047,IN
-2919068048,2919068055,CA
-2919068056,2919068087,US
-2919068088,2919068095,TR
-2919068096,2919068103,US
-2919068104,2919068111,AE
-2919068112,2919068119,US
-2919068120,2919068127,CN
-2919068128,2919068135,US
-2919068136,2919068143,PK
-2919068144,2919068151,IN
-2919068152,2919068159,JM
-2919068160,2919068167,US
-2919068168,2919068175,CA
-2919068176,2919068183,US
-2919068184,2919068191,CA
-2919068192,2919068199,PR
-2919068200,2919068207,US
-2919068208,2919068215,GB
-2919068216,2919068223,CA
-2919068224,2919068239,US
-2919068240,2919068247,CN
+2919064064,2919067647,CN
+2919067648,2919068247,US
2919068248,2919068255,AU
-2919068256,2919068271,US
-2919068272,2919068279,SG
-2919068280,2919068287,US
-2919068288,2919068295,CN
-2919068296,2919068303,BR
-2919068304,2919068311,RO
-2919068312,2919068319,MY
-2919068320,2919068335,US
-2919068336,2919068343,RU
-2919068344,2919068359,US
-2919068360,2919068367,CM
-2919068368,2919068375,CN
-2919068376,2919068383,US
-2919068384,2919068391,BR
-2919068392,2919068415,US
-2919068416,2919068423,BR
-2919068424,2919068431,CN
-2919068432,2919068495,US
-2919068496,2919068503,BR
-2919068504,2919068511,IN
-2919068512,2919068519,CN
-2919068520,2919068527,US
-2919068528,2919068535,PL
-2919068536,2919068551,IN
-2919068552,2919068559,AU
-2919068560,2919068567,CN
-2919068568,2919068575,IN
-2919068576,2919068583,US
-2919068584,2919068591,CN
-2919068592,2919068599,US
-2919068600,2919068607,CM
-2919068608,2919068615,MY
-2919068616,2919068647,US
-2919068648,2919068655,AU
-2919068656,2919068663,CN
-2919068664,2919068703,US
-2919068704,2919068711,IN
-2919068712,2919068719,JM
-2919068720,2919068727,US
-2919068728,2919068735,RU
-2919068736,2919068743,NO
-2919068744,2919068751,PR
-2919068752,2919068775,US
-2919068776,2919068783,HK
-2919068784,2919068791,IN
-2919068792,2919068799,CR
-2919068800,2919068815,NO
-2919068816,2919068823,US
-2919068824,2919068831,CA
-2919068832,2919068839,CN
-2919068840,2919068871,US
-2919068872,2919068879,CN
-2919068880,2919068887,DO
-2919068888,2919068895,SG
-2919068896,2919068911,US
-2919068912,2919068927,CN
-2919068928,2919068935,US
-2919068936,2919068943,ZA
-2919068944,2919068967,US
-2919068968,2919068975,RU
-2919068976,2919068991,US
-2919068992,2919068999,DO
-2919069000,2919069015,US
-2919069016,2919069031,CN
-2919069032,2919069039,US
-2919069040,2919069047,CN
-2919069048,2919069055,US
-2919069056,2919069063,CN
-2919069064,2919069071,AF
-2919069072,2919069079,CN
-2919069080,2919069087,US
-2919069088,2919069095,IN
-2919069096,2919069103,BZ
-2919069104,2919069111,US
-2919069112,2919069119,CN
-2919069120,2919069127,CA
-2919069128,2919069135,US
-2919069136,2919069143,CN
-2919069144,2919069151,BR
-2919069152,2919069159,US
-2919069160,2919069167,JM
-2919069168,2919069175,GB
-2919069176,2919069183,US
-2919069184,2919069191,PR
-2919069192,2919069199,US
-2919069200,2919069207,GB
-2919069208,2919069215,BR
-2919069216,2919069231,US
-2919069232,2919069239,ES
-2919069240,2919069255,GB
-2919069256,2919069271,CN
-2919069272,2919069295,US
-2919069296,2919069303,BR
-2919069304,2919069327,US
-2919069328,2919069335,BR
-2919069336,2919069343,TR
-2919069344,2919069359,US
-2919069360,2919069367,CN
-2919069368,2919069375,AU
-2919069376,2919069391,US
-2919069392,2919069399,GB
-2919069400,2919069407,US
-2919069408,2919069415,VN
-2919069416,2919069439,US
-2919069440,2919069447,CA
-2919069448,2919069455,US
-2919069456,2919069463,CN
-2919069464,2919069471,US
-2919069472,2919069479,CA
-2919069480,2919069487,CN
-2919069488,2919069495,US
-2919069496,2919069503,CN
-2919069504,2919069511,AR
-2919069512,2919069519,US
-2919069520,2919069527,IN
-2919069528,2919069535,TR
-2919069536,2919069543,US
-2919069544,2919069559,CN
-2919069560,2919069567,AE
-2919069568,2919069575,VN
-2919069576,2919069583,CN
-2919069584,2919069607,US
-2919069608,2919069615,CN
-2919069616,2919069623,QA
-2919069624,2919069631,PK
-2919069632,2919069639,TW
-2919069640,2919069663,US
-2919069664,2919069671,CA
-2919069672,2919069679,US
-2919069680,2919069687,CA
-2919069688,2919069703,US
-2919069704,2919069711,CN
-2919069712,2919069719,UA
-2919069720,2919069735,US
-2919069736,2919069743,BR
-2919069744,2919069775,US
-2919069776,2919069791,CN
-2919069792,2919069799,PK
-2919069800,2919069807,US
-2919069808,2919069815,PK
-2919069816,2919069823,CN
-2919069824,2919069831,IN
-2919069832,2919069839,US
-2919069840,2919069847,BR
-2919069848,2919069855,US
-2919069856,2919069863,GB
-2919069864,2919069871,US
-2919069872,2919069879,IN
-2919069880,2919069895,US
-2919069896,2919069903,BR
-2919069904,2919069943,US
-2919069944,2919069951,BR
-2919069952,2919069975,US
-2919069976,2919069983,IT
-2919069984,2919069991,IN
-2919069992,2919069999,SG
-2919070000,2919070047,US
-2919070048,2919070055,TR
-2919070056,2919070071,US
-2919070072,2919070079,AE
-2919070080,2919070095,US
-2919070096,2919070103,CN
-2919070104,2919070111,AU
-2919070112,2919070119,ES
-2919070120,2919070127,JM
-2919070128,2919070135,GB
-2919070136,2919070159,US
-2919070160,2919070167,GB
-2919070168,2919070199,US
-2919070200,2919070207,ES
-2919070208,2919070223,US
-2919070224,2919070231,CN
-2919070232,2919070239,US
-2919070240,2919070247,AF
-2919070248,2919070255,CA
-2919070256,2919070263,AF
-2919070264,2919070271,CA
-2919070272,2919070279,IN
-2919070280,2919070295,US
-2919070296,2919070303,CN
-2919070304,2919070311,BR
-2919070312,2919070319,NL
-2919070320,2919070327,CN
-2919070328,2919070335,BR
-2919070336,2919070351,US
-2919070352,2919070359,ZA
-2919070360,2919070383,CN
-2919070384,2919070391,US
-2919070392,2919070399,DE
-2919070400,2919070415,US
-2919070416,2919070423,CA
-2919070424,2919070431,US
-2919070432,2919070439,NL
-2919070440,2919070447,BR
-2919070448,2919070463,US
-2919070464,2919070471,IN
-2919070472,2919070479,CN
-2919070480,2919070487,PK
-2919070488,2919070527,US
-2919070528,2919070543,CA
-2919070544,2919070551,CR
-2919070552,2919070559,PR
-2919070560,2919070567,US
-2919070568,2919070575,CA
-2919070576,2919070607,US
-2919070608,2919070615,RO
-2919070616,2919070631,US
-2919070632,2919070639,TR
-2919070640,2919070647,US
-2919070648,2919070655,GB
-2919070656,2919070663,US
-2919070664,2919070671,GB
-2919070672,2919070679,US
-2919070680,2919070687,IN
-2919070688,2919070695,BY
-2919070696,2919070711,US
-2919070712,2919070719,CN
-2919070720,2919070727,GB
-2919070728,2919070735,US
-2919070736,2919070743,PL
-2919070744,2919070751,CN
-2919070752,2919070783,US
-2919070784,2919070791,BR
-2919070792,2919070799,US
-2919070800,2919070807,NO
-2919070808,2919070815,CN
-2919070816,2919070831,US
-2919070832,2919070839,IE
-2919070840,2919070847,CN
-2919070848,2919070879,US
-2919070880,2919070887,IN
-2919070888,2919070903,US
-2919070904,2919070919,CN
-2919070920,2919070927,CA
-2919070928,2919070943,US
-2919070944,2919070951,BR
-2919070952,2919070975,US
-2919070976,2919070983,TR
+2919068256,2919070983,US
2919070984,2919070991,GB
-2919070992,2919071031,US
-2919071032,2919071039,IT
-2919071040,2919071047,IN
-2919071048,2919071055,US
-2919071056,2919071063,CN
-2919071064,2919071143,US
-2919071144,2919071151,CN
-2919071152,2919071159,US
-2919071160,2919071167,CN
-2919071168,2919071175,US
-2919071176,2919071183,GB
-2919071184,2919071199,CA
-2919071200,2919071207,DK
-2919071208,2919071215,MX
-2919071216,2919159873,US
-2919159874,2919159877,US
-2919159878,2919170351,US
-2919170352,2919170359,PE
-2919170360,2919170399,US
-2919170400,2919170407,TR
-2919170408,2919170415,ES
-2919170416,2919170431,US
-2919170432,2919170439,JP
-2919170440,2919170487,US
-2919170488,2919170495,NL
-2919170496,2919170551,US
-2919170552,2919170559,FR
-2919170560,2919170615,US
-2919170616,2919170623,CN
-2919170624,2919170639,US
-2919170640,2919170655,JP
-2919170656,2919170671,US
-2919170672,2919170679,JP
-2919170680,2919170695,US
-2919170696,2919170703,CN
-2919170704,2919170727,US
-2919170728,2919170735,IN
-2919170736,2919170759,US
-2919170760,2919170767,BR
-2919170768,2919170775,AR
-2919170776,2919170799,US
-2919170800,2919170815,SG
-2919170816,2919170903,US
-2919170904,2919170911,GR
-2919170912,2919170919,US
-2919170920,2919170927,BR
-2919170928,2919170935,US
-2919170936,2919170943,PH
-2919170944,2919170967,US
-2919170968,2919170975,NZ
-2919170976,2919171071,US
-2919171072,2919171079,IN
-2919171080,2919171087,US
-2919171088,2919171095,TR
-2919171096,2919171103,US
-2919171104,2919171111,PL
-2919171112,2919171159,US
-2919171160,2919171167,AU
-2919171168,2919171183,US
-2919171184,2919171191,ZA
-2919171192,2919171343,US
-2919171344,2919171351,BR
-2919171352,2919171359,US
-2919171360,2919171367,BR
-2919171368,2919171399,US
-2919171400,2919171407,IT
-2919171408,2919171415,CN
-2919171416,2919171455,US
-2919171456,2919171463,BR
-2919171464,2919171535,US
-2919171536,2919171543,BR
-2919171544,2919171575,US
-2919171576,2919171583,BR
-2919171584,2919171655,US
-2919171656,2919171663,BR
-2919171664,2919171695,US
-2919171696,2919171703,BR
-2919171704,2919173335,US
-2919173336,2919173343,CZ
-2919173344,2919174143,US
+2919070992,2919174143,US
2919174144,2919178239,CA
2919178240,2919186431,US
2919186432,2919190527,CA
-2919190528,2919202079,US
-2919202080,2919202111,BE
-2919202112,2919206911,US
+2919190528,2919204747,US
+2919204748,2919204755,NL
+2919204756,2919205027,US
+2919205028,2919205031,NL
+2919205032,2919206911,US
2919206912,2919211007,CA
-2919211008,2919211263,US
-2919211264,2919211519,US
-2919211520,2919218687,US
-2919218688,2919218943,US
-2919218944,2919235583,US
+2919211008,2919235583,US
2919235584,2919759871,CA
-2919759872,2921496967,US
-2921496968,2921496975,LK
-2921496976,2921497855,US
-2921497856,2921497863,CA
-2921497864,2921498031,US
-2921498032,2921498039,CA
-2921498040,2921498215,US
-2921498216,2921498223,CA
-2921498224,2921498383,US
-2921498384,2921498391,ID
-2921498392,2921498431,US
-2921498432,2921498439,CA
-2921498440,2921501167,US
-2921501168,2921501175,CA
-2921501176,2921504431,US
-2921504432,2921504439,GB
-2921504440,2921506343,US
-2921506344,2921506351,CA
-2921506352,2921506879,US
-2921506880,2921506887,CA
-2921506888,2921506895,US
-2921506896,2921506911,GB
-2921506912,2921507087,US
-2921507088,2921507095,ZA
-2921507096,2921508719,US
-2921508720,2921508727,SE
-2921508728,2921509335,US
-2921509336,2921509343,LK
-2921509344,2921509367,CA
-2921509368,2921509575,US
-2921509576,2921509583,CA
-2921509584,2921511383,US
-2921511384,2921511391,CA
-2921511392,2921512703,US
+2919759872,2921512703,US
2921512704,2921512959,CA
2921512960,2921530367,US
2921530368,2921531391,DE
2921531392,2921541119,US
2921541120,2921541375,DE
-2921541376,2921545727,US
+2921541376,2921542143,US
+2921542144,2921542399,CA
+2921542400,2921545727,US
2921545728,2921545983,NL
2921545984,2921546495,US
2921546496,2921546751,NL
@@ -89327,324 +44036,43 @@
2921553152,2921553407,BR
2921553408,2921553663,CO
2921553664,2921562111,US
-2921562112,2921589759,CA
-2921589760,2921590015,US
-2921590016,2921594879,CA
-2921594880,2921658191,US
-2921658192,2921658199,US
-2921658200,2925002751,US
+2921562112,2921594879,CA
+2921594880,2925002751,US
2925002752,2925527039,CA
2925527040,2926575615,US
-2926575616,2927099903,CA
-2927099904,2927112031,US
-2927112032,2927112039,CH
-2927112040,2927152175,US
-2927152176,2927152183,CH
-2927152184,2927154847,US
-2927154848,2927154855,CH
-2927154856,2927242751,US
+2926575616,2926777343,CA
+2926777344,2926777855,US
+2926777856,2927084799,CA
+2927084800,2927085823,US
+2927085824,2927099903,CA
+2927099904,2927242751,US
2927242752,2927243263,AE
2927243264,2927254783,US
2927254784,2927255039,AE
-2927255040,2927911183,US
-2927911184,2927911191,CH
-2927911192,2927939071,US
-2927939072,2927939327,US
-2927939328,2928173223,US
-2928173224,2928173231,JP
-2928173232,2928173343,US
-2928173344,2928173351,NL
-2928173352,2928173431,US
-2928173432,2928173439,GB
-2928173440,2928173711,US
-2928173712,2928173727,JP
-2928173728,2928173903,US
-2928173904,2928173919,NZ
-2928173920,2928173959,US
-2928173960,2928173967,CA
-2928173968,2928174223,US
-2928174224,2928174231,CA
-2928174232,2928174423,US
-2928174424,2928174431,CA
-2928174432,2928174759,US
-2928174760,2928174767,CA
-2928174768,2928174783,PH
-2928174784,2928174791,US
-2928174792,2928174799,JP
-2928174800,2928174911,US
-2928174912,2928174919,AU
-2928174920,2928175207,US
-2928175208,2928175215,CA
-2928175216,2928175303,US
-2928175304,2928175311,CN
-2928175312,2928175399,US
-2928175400,2928175407,TR
-2928175408,2928175471,US
-2928175472,2928175479,JP
-2928175480,2928175655,US
-2928175656,2928175663,AR
-2928175664,2928175831,US
-2928175832,2928175839,BE
-2928175840,2928175927,US
-2928175928,2928175935,JP
-2928175936,2928175967,US
-2928175968,2928175975,ZA
-2928175976,2928176207,US
-2928176208,2928176223,ZA
-2928176224,2928176231,JP
-2928176232,2928176327,US
-2928176328,2928176335,RU
-2928176336,2928176447,US
-2928176448,2928176455,GB
-2928176456,2928176519,US
-2928176520,2928176527,NL
-2928176528,2928176935,US
-2928176936,2928176943,AU
-2928176944,2928177151,US
+2927255040,2927581183,US
+2927581184,2927581439,SG
+2927581440,2928175551,US
+2928175552,2928175559,VN
+2928175560,2928177151,US
2928177152,2928181247,CA
-2928181248,2928186591,US
-2928186592,2928186623,CA
-2928186624,2928226303,US
+2928181248,2928226303,US
2928226304,2928230399,CA
-2928230400,2928252387,US
-2928252388,2928252388,US
-2928252389,2928252611,US
-2928252612,2928252612,US
-2928252613,2928252987,US
-2928252988,2928252988,US
-2928252989,2928261375,US
+2928230400,2928261375,US
2928261376,2928261887,CA
2928261888,2928263167,US
-2928263168,2928263679,CA
-2928263680,2928263687,US
-2928263688,2928263791,CA
-2928263792,2928263799,US
-2928263800,2928263823,CA
-2928263824,2928263831,US
-2928263832,2928263855,CA
-2928263856,2928263871,US
-2928263872,2928264759,CA
-2928264760,2928264775,US
-2928264776,2928264783,CA
-2928264784,2928264831,US
-2928264832,2928264863,CA
-2928264864,2928264871,US
-2928264872,2928264879,CA
-2928264880,2928264967,US
-2928264968,2928264983,CA
-2928264984,2928265007,US
-2928265008,2928265055,CA
-2928265056,2928265103,US
-2928265104,2928265143,CA
-2928265144,2928265215,US
-2928265216,2928265471,CA
-2928265472,2928265479,US
-2928265480,2928265503,CA
-2928265504,2928265527,US
-2928265528,2928265559,CA
-2928265560,2928265567,US
-2928265568,2928265575,CA
-2928265576,2928265623,US
-2928265624,2928265631,CA
-2928265632,2928265647,US
-2928265648,2928265671,CA
-2928265672,2928265687,US
-2928265688,2928265703,CA
-2928265704,2928265711,US
-2928265712,2928265727,CA
-2928265728,2928265735,US
-2928265736,2928266023,CA
-2928266024,2928266031,US
-2928266032,2928266055,CA
-2928266056,2928266063,US
-2928266064,2928266111,CA
-2928266112,2928266119,US
-2928266120,2928266175,CA
-2928266176,2928266191,US
-2928266192,2928266255,CA
-2928266256,2928266263,US
-2928266264,2928266295,CA
-2928266296,2928266311,US
-2928266312,2928266359,CA
-2928266360,2928266367,US
-2928266368,2928266407,CA
-2928266408,2928266415,US
-2928266416,2928270135,CA
-2928270136,2928270143,US
-2928270144,2928270175,CA
-2928270176,2928270183,US
-2928270184,2928270479,CA
-2928270480,2928270487,NL
-2928270488,2928270551,CA
-2928270552,2928270559,US
-2928270560,2928270583,CA
-2928270584,2928270591,US
-2928270592,2928270607,CA
-2928270608,2928270615,US
-2928270616,2928270623,CA
-2928270624,2928270631,US
-2928270632,2928270647,CA
-2928270648,2928270655,US
-2928270656,2928270727,CA
-2928270728,2928270743,US
-2928270744,2928270751,CA
-2928270752,2928270767,US
-2928270768,2928270791,CA
-2928270792,2928270799,US
-2928270800,2928271143,CA
-2928271144,2928271151,US
-2928271152,2928271183,CA
-2928271184,2928271191,US
-2928271192,2928272775,CA
-2928272776,2928272783,US
-2928272784,2928272839,CA
-2928272840,2928272847,US
-2928272848,2928272903,CA
-2928272904,2928272919,US
-2928272920,2928272951,CA
-2928272952,2928273071,US
-2928273072,2928273079,CA
-2928273080,2928273183,US
-2928273184,2928273191,CA
-2928273192,2928273199,US
-2928273200,2928273295,CA
-2928273296,2928273303,US
-2928273304,2928273311,CA
-2928273312,2928273367,US
-2928273368,2928273383,CA
-2928273384,2928273439,US
-2928273440,2928273447,CA
-2928273448,2928273471,US
-2928273472,2928273479,CA
-2928273480,2928273591,US
-2928273592,2928273599,CA
-2928273600,2928273607,NL
-2928273608,2928273639,CA
-2928273640,2928273647,US
-2928273648,2928273671,CA
-2928273672,2928273703,US
-2928273704,2928273735,CA
-2928273736,2928273799,US
-2928273800,2928273807,CA
-2928273808,2928273919,US
-2928273920,2928274175,CA
-2928274176,2928274199,US
-2928274200,2928274207,CA
-2928274208,2928274247,US
-2928274248,2928274263,CA
-2928274264,2928274295,US
-2928274296,2928274311,CA
-2928274312,2928274319,US
-2928274320,2928274335,CA
-2928274336,2928274359,US
-2928274360,2928274367,CA
-2928274368,2928274391,US
-2928274392,2928274495,CA
-2928274496,2928274503,US
-2928274504,2928274519,CA
-2928274520,2928274527,US
-2928274528,2928274575,CA
-2928274576,2928274583,US
-2928274584,2928274599,CA
-2928274600,2928274607,US
-2928274608,2928274615,CA
-2928274616,2928274623,US
-2928274624,2928274631,CA
-2928274632,2928274639,US
-2928274640,2928275455,CA
-2928275456,2928275463,US
-2928275464,2928275479,CA
-2928275480,2928275495,US
-2928275496,2928275599,CA
-2928275600,2928275607,US
-2928275608,2928276071,CA
-2928276072,2928276079,US
-2928276080,2928276191,CA
-2928276192,2928276231,US
-2928276232,2928276287,CA
-2928276288,2928276319,US
-2928276320,2928276367,CA
-2928276368,2928276455,US
-2928276456,2928276463,CA
-2928276464,2928276535,US
-2928276536,2928276543,CA
-2928276544,2928276599,US
-2928276600,2928276607,CA
-2928276608,2928276679,US
-2928276680,2928276695,CA
-2928276696,2928276711,US
-2928276712,2928276727,CA
-2928276728,2928276735,US
-2928276736,2928276743,CA
-2928276744,2928276903,US
-2928276904,2928276911,CA
-2928276912,2928276919,US
-2928276920,2928277167,CA
-2928277168,2928277183,US
-2928277184,2928277199,CA
-2928277200,2928277215,US
-2928277216,2928277279,CA
-2928277280,2928277303,US
-2928277304,2928277335,CA
-2928277336,2928277343,US
-2928277344,2928278791,CA
-2928278792,2928278799,US
-2928278800,2928278879,CA
-2928278880,2928278887,US
-2928278888,2928278895,CA
-2928278896,2928278911,US
-2928278912,2928279015,CA
-2928279016,2928279023,US
-2928279024,2928279383,CA
-2928279384,2928279391,US
-2928279392,2928279551,CA
+2928263168,2928279551,CA
2928279552,2928312319,US
2928312320,2928316415,CA
-2928316416,2928318719,US
-2928318720,2928318975,DO
-2928318976,2928320519,US
-2928320520,2928320527,BR
-2928320528,2928320583,US
-2928320584,2928320591,QA
-2928320592,2928320607,US
-2928320608,2928320615,PE
-2928320616,2928320967,US
-2928320968,2928320975,MV
-2928320976,2928320999,US
-2928321000,2928321007,QA
-2928321008,2928321063,US
-2928321064,2928321071,AU
-2928321072,2928321311,US
-2928321312,2928321327,GB
-2928321328,2928321679,US
-2928321680,2928321695,PE
-2928321696,2928323175,US
-2928323176,2928323183,AU
-2928323184,2928324519,US
-2928324520,2928324527,TR
-2928324528,2928328703,US
+2928316416,2928320511,HK
+2928320512,2928328703,US
2928328704,2928336895,CA
-2928336896,2928452223,US
-2928452224,2928452351,US
-2928452352,2928455679,US
+2928336896,2928455679,US
2928455680,2928459775,CA
2928459776,2928541695,US
-2928541696,2928553303,CA
-2928553304,2928553311,HU
-2928553312,2928558943,CA
-2928558944,2928558951,PE
-2928558952,2928570671,CA
+2928541696,2928570671,CA
2928570672,2928570687,FR
-2928570688,2928579543,CA
-2928579544,2928579551,HU
-2928579552,2928583735,CA
-2928583736,2928583743,SY
-2928583744,2928595959,CA
-2928595960,2928595967,US
-2928595968,2928607231,CA
-2928607232,2928633199,US
-2928633200,2928633215,CA
-2928633216,2936012799,US
+2928570688,2928607231,CA
+2928607232,2936012799,US
2936012800,2937847807,CN
2937847808,2937848831,KH
2937848832,2937849855,JP
@@ -89676,13 +44104,13 @@
2938710016,2938712063,AU
2938712064,2938716159,TW
2938716160,2938732543,JP
-2938732544,2938733823,SG
-2938733824,2938734079,AP
-2938734080,2938748927,SG
+2938732544,2938748927,SG
2938748928,2938765311,JP
2938765312,2938961919,CN
2938961920,2938978303,HK
-2938978304,2938996735,AU
+2938978304,2938986495,AU
+2938986496,2938986751,NZ
+2938986752,2938996735,AU
2938996736,2938998783,JP
2938998784,2939002879,AU
2939002880,2939004927,KR
@@ -89755,14 +44183,9 @@
2947598336,2947602431,AU
2947602432,2947603455,NZ
2947603456,2947604479,TH
-2947604480,2947609167,HK
-2947609168,2947609175,AF
-2947609176,2947609855,HK
-2947609856,2947610111,US
-2947610112,2947610367,HK
-2947610368,2947610623,PH
-2947610624,2947611647,AU
-2947611648,2947612671,HK
+2947604480,2947609599,HK
+2947609600,2947609855,GB
+2947609856,2947612671,HK
2947612672,2947678207,JP
2947678208,2947743743,CN
2947743744,2947809279,JP
@@ -89778,40 +44201,20 @@
2948595712,2952790015,KR
2952790016,2953314303,DE
2953314304,2953379839,UA
-2953379840,2953424959,DE
-2953424960,2953424975,ES
-2953424976,2953425183,DE
-2953425184,2953425199,ES
-2953425200,2953435071,DE
-2953435072,2953435079,IT
-2953435080,2953438191,DE
-2953438192,2953438199,ES
-2953438200,2953438231,DE
-2953438232,2953438239,CH
-2953438240,2953441263,DE
-2953441264,2953441279,IT
-2953441280,2953442271,DE
-2953442272,2953442287,ES
-2953442288,2953443031,DE
-2953443032,2953443039,IT
-2953443040,2953444183,DE
-2953444184,2953444191,IT
-2953444192,2953445375,DE
+2953379840,2953445375,DE
2953445376,2953453567,IT
2953453568,2953455615,IS
2953455616,2953457663,SK
2953457664,2953459711,DE
2953459712,2953461759,IT
2953461760,2953465855,ES
-2953465856,2953465991,GB
-2953465992,2953466111,EU
2953466112,2953466127,GB
-2953466128,2953466367,EU
-2953466368,2953467135,GB
-2953467136,2953467391,US
-2953467392,2953467903,GB
+2953466368,2953466879,GB
+2953467392,2953467647,GB
2953467904,2953469951,BE
-2953469952,2953478143,CH
+2953469952,2953474815,CH
+2953474816,2953475071,DE
+2953475072,2953478143,CH
2953478144,2953503551,SE
2953503552,2953503559,NO
2953503560,2953510911,SE
@@ -89821,9 +44224,9 @@
2953596928,2953598975,ES
2953598976,2953601023,IT
2953601024,2953603071,RU
-2953603072,2953603327,GB
-2953603328,2953603583,GR
-2953603584,2953605119,GB
+2953603072,2953603977,GB
+2953603978,2953603979,IE
+2953603980,2953605119,GB
2953605120,2953609215,CZ
2953609216,2953707519,IL
2953707520,2953838591,RU
@@ -89837,2590 +44240,135 @@
2954647552,2954657791,ES
2954657792,2954756095,JO
2954756096,2954821631,TR
-2954821632,2954821647,FR
-2954821648,2954821651,ES
-2954821652,2954821655,PL
-2954821656,2954821659,FR
-2954821660,2954821663,ES
-2954821664,2954821695,PL
-2954821696,2954821707,FR
-2954821708,2954821715,DE
-2954821716,2954821719,GB
-2954821720,2954821723,PL
-2954821724,2954821727,FR
-2954821728,2954821775,IE
-2954821776,2954821783,DE
-2954821784,2954821787,ES
-2954821788,2954821791,FR
-2954821792,2954821823,ES
-2954821824,2954821855,GB
-2954821856,2954821887,IT
-2954821888,2954821919,NL
-2954821920,2954821951,FR
-2954821952,2954821983,ES
-2954821984,2954822015,GB
-2954822016,2954822047,IT
-2954822048,2954822063,PL
-2954822064,2954822071,FR
-2954822072,2954822075,PT
-2954822076,2954822079,GB
-2954822080,2954822143,IE
-2954822144,2954822207,FR
-2954822208,2954822271,PL
-2954822272,2954822279,GB
-2954822280,2954822283,ES
-2954822284,2954822287,FR
-2954822288,2954822303,NL
-2954822304,2954822311,FR
-2954822312,2954822319,DE
-2954822320,2954822323,NL
-2954822324,2954822327,FI
-2954822328,2954822335,FR
-2954822336,2954822343,PL
-2954822344,2954822347,ES
-2954822348,2954822351,PL
-2954822352,2954822367,FR
-2954822368,2954822399,IT
-2954822400,2954822431,PL
-2954822432,2954822447,FR
-2954822448,2954822451,PL
-2954822452,2954822455,NL
-2954822456,2954822463,ES
-2954822464,2954822483,FR
-2954822484,2954822487,DE
-2954822488,2954822491,FR
-2954822492,2954822495,DE
-2954822496,2954822531,IE
-2954822532,2954822535,FR
-2954822536,2954822539,PL
-2954822540,2954822543,BE
-2954822544,2954822551,FR
-2954822552,2954822555,PL
-2954822556,2954822575,FR
-2954822576,2954822583,CH
-2954822584,2954822591,FR
-2954822592,2954822599,GB
-2954822600,2954822607,DE
-2954822608,2954822655,FR
-2954822656,2954822687,ES
-2954822688,2954822719,GB
-2954822720,2954822783,FR
-2954822784,2954822791,NL
-2954822792,2954822879,FR
-2954822880,2954822883,ES
-2954822884,2954822887,FR
-2954822888,2954822891,GB
-2954822892,2954822895,IE
-2954822896,2954822911,FR
-2954822912,2954822915,DE
-2954822916,2954822919,PL
-2954822920,2954822927,GB
-2954822928,2954822975,FR
-2954822976,2954822991,PL
-2954822992,2954823035,FR
-2954823036,2954823039,IT
-2954823040,2954823043,FR
-2954823044,2954823047,DE
-2954823048,2954823055,FR
-2954823056,2954823071,IE
-2954823072,2954823103,DE
-2954823104,2954823167,FR
-2954823168,2954823199,IE
-2954823200,2954823203,DE
-2954823204,2954823207,PL
-2954823208,2954823211,GB
-2954823212,2954823215,PL
-2954823216,2954823223,IE
-2954823224,2954823227,PL
-2954823228,2954823231,IT
-2954823232,2954823247,GB
-2954823248,2954823251,ES
-2954823252,2954823255,FR
-2954823256,2954823259,ES
-2954823260,2954823263,GB
-2954823264,2954823295,ES
-2954823296,2954823311,PL
-2954823312,2954823319,ES
-2954823320,2954823383,FR
-2954823384,2954823387,DE
-2954823388,2954823391,PL
-2954823392,2954823395,FR
+2954821632,2954822927,FR
+2954822928,2954822931,DE
+2954822932,2954823395,FR
2954823396,2954823399,GB
-2954823400,2954823403,NL
-2954823404,2954823407,PL
-2954823408,2954823423,IT
-2954823424,2954823551,IE
-2954823552,2954823555,PL
-2954823556,2954823559,GB
-2954823560,2954823563,FI
-2954823564,2954823607,FR
-2954823608,2954823611,CH
-2954823612,2954823619,FR
-2954823620,2954823623,PL
-2954823624,2954823627,LT
-2954823628,2954823631,ES
-2954823632,2954823639,CH
-2954823640,2954823643,FR
-2954823644,2954823647,CH
-2954823648,2954823695,FR
-2954823696,2954823703,PT
-2954823704,2954823707,FR
-2954823708,2954823711,PT
-2954823712,2954823715,FR
-2954823716,2954823719,GB
-2954823720,2954823727,FR
-2954823728,2954823735,PT
-2954823736,2954823743,FR
-2954823744,2954823759,CZ
-2954823760,2954823767,IT
-2954823768,2954823771,FR
-2954823772,2954823775,PL
-2954823776,2954823779,FR
-2954823780,2954823783,CZ
-2954823784,2954823787,ES
-2954823788,2954823791,NL
-2954823792,2954823871,FR
-2954823872,2954823887,PL
-2954823888,2954823891,ES
-2954823892,2954823895,NL
-2954823896,2954823903,PL
-2954823904,2954823911,FR
-2954823912,2954823915,PL
-2954823916,2954823919,FR
-2954823920,2954823927,PT
-2954823928,2954823935,PL
-2954823936,2954823967,FR
-2954823968,2954823999,ES
-2954824000,2954824063,FR
-2954824064,2954824071,GB
-2954824072,2954824075,FI
-2954824076,2954824079,FR
-2954824080,2954824083,PL
-2954824084,2954824087,GB
-2954824088,2954824091,IE
-2954824092,2954824095,PL
-2954824096,2954824127,GB
-2954824128,2954824131,PL
-2954824132,2954824135,BE
-2954824136,2954824139,IE
-2954824140,2954824159,FR
-2954824160,2954824175,IE
-2954824176,2954824179,PL
-2954824180,2954824183,ES
-2954824184,2954824187,PL
-2954824188,2954824191,FR
-2954824192,2954824207,GB
-2954824208,2954824223,FR
-2954824224,2954824255,NL
-2954824256,2954824259,FI
-2954824260,2954824263,IT
-2954824264,2954824271,IE
-2954824272,2954824275,ES
-2954824276,2954824279,FR
-2954824280,2954824283,PL
-2954824284,2954824287,FR
-2954824288,2954824319,ES
-2954824320,2954824351,PT
-2954824352,2954824367,PL
-2954824368,2954824431,FR
-2954824432,2954824447,BE
-2954824448,2954824451,PL
-2954824452,2954824455,DE
-2954824456,2954824463,NL
-2954824464,2954824471,FR
-2954824472,2954824479,PT
-2954824480,2954824511,BE
-2954824512,2954824543,GB
-2954824544,2954824575,PT
-2954824576,2954824607,FR
-2954824608,2954824611,PL
-2954824612,2954824623,FR
-2954824624,2954824627,GB
-2954824628,2954824631,PL
-2954824632,2954824635,FR
-2954824636,2954824639,PL
-2954824640,2954824671,IT
-2954824672,2954824703,ES
-2954824704,2954824707,FR
-2954824708,2954824711,IT
-2954824712,2954824719,FR
-2954824720,2954824767,IE
-2954824768,2954824775,FR
-2954824776,2954824779,NL
-2954824780,2954824783,FI
-2954824784,2954824799,IE
-2954824800,2954824831,PT
-2954824832,2954824863,PL
-2954824864,2954824895,IE
-2954824896,2954824903,FR
-2954824904,2954824907,CH
-2954824908,2954824919,BE
-2954824920,2954824923,GB
-2954824924,2954824927,ES
-2954824928,2954824931,FR
-2954824932,2954824943,ES
-2954824944,2954824959,FR
-2954824960,2954824975,IE
-2954824976,2954824991,ES
-2954824992,2954825023,FR
-2954825024,2954825031,GB
-2954825032,2954825063,FR
+2954823400,2954824255,FR
+2954824256,2954824259,ES
+2954824260,2954825063,FR
2954825064,2954825067,ES
-2954825068,2954825071,GB
-2954825072,2954825087,BE
-2954825088,2954825095,CZ
-2954825096,2954825099,IE
-2954825100,2954825103,PL
-2954825104,2954825119,DE
-2954825120,2954825151,PL
-2954825152,2954825159,FR
-2954825160,2954825163,DE
-2954825164,2954825167,GB
-2954825168,2954825171,DE
-2954825172,2954825175,NL
-2954825176,2954825179,IE
-2954825180,2954825183,GB
-2954825184,2954825187,DE
-2954825188,2954825191,NL
-2954825192,2954825195,FR
-2954825196,2954825199,CZ
-2954825200,2954825203,FR
-2954825204,2954825207,IT
-2954825208,2954825211,GB
-2954825212,2954825215,DE
-2954825216,2954825239,FR
-2954825240,2954825243,PL
-2954825244,2954825247,FR
-2954825248,2954825263,GB
-2954825264,2954825267,IT
-2954825268,2954825271,GB
-2954825272,2954825275,ES
-2954825276,2954825311,FR
-2954825312,2954825315,GB
-2954825316,2954825319,DE
-2954825320,2954825327,ES
-2954825328,2954825331,GB
-2954825332,2954825335,FR
-2954825336,2954825343,NL
-2954825344,2954825351,FR
-2954825352,2954825359,PT
-2954825360,2954825375,DE
-2954825376,2954825383,PT
-2954825384,2954825387,PL
-2954825388,2954825391,ES
-2954825392,2954825455,FR
-2954825456,2954825459,GB
-2954825460,2954825463,NL
-2954825464,2954825467,FR
-2954825468,2954825471,NL
-2954825472,2954825535,MA
-2954825536,2954825539,PL
-2954825540,2954825543,FR
-2954825544,2954825547,BE
-2954825548,2954825551,DE
-2954825552,2954825567,ES
-2954825568,2954825599,FR
-2954825600,2954825631,PL
-2954825632,2954825639,IE
-2954825640,2954825655,FR
-2954825656,2954825663,GB
-2954825664,2954825727,DE
-2954825728,2954825791,FR
-2954825792,2954825823,NL
-2954825824,2954825855,ES
-2954825856,2954825887,FR
-2954825888,2954825919,IT
-2954825920,2954825923,CH
-2954825924,2954825927,IT
-2954825928,2954825931,PL
-2954825932,2954825935,FR
-2954825936,2954825939,BE
-2954825940,2954825943,FI
-2954825944,2954825967,FR
-2954825968,2954825983,ES
-2954825984,2954826015,FR
-2954826016,2954826019,PT
-2954826020,2954826023,PL
-2954826024,2954826031,FR
-2954826032,2954826035,PL
-2954826036,2954826039,ES
-2954826040,2954826043,PL
-2954826044,2954826063,FR
-2954826064,2954826067,BE
-2954826068,2954826071,NL
-2954826072,2954826075,CH
-2954826076,2954826151,FR
-2954826152,2954826159,ES
-2954826160,2954826167,PL
-2954826168,2954826239,FR
-2954826240,2954826243,IT
-2954826244,2954826247,PT
-2954826248,2954826255,CH
-2954826256,2954826259,CZ
-2954826260,2954826263,PL
-2954826264,2954826267,FR
-2954826268,2954826271,NL
-2954826272,2954826279,FR
-2954826280,2954826287,IT
-2954826288,2954826299,FR
-2954826300,2954826303,GB
-2954826304,2954826367,FR
-2954826368,2954826371,DE
-2954826372,2954826375,PL
-2954826376,2954826379,FR
-2954826380,2954826391,PL
-2954826392,2954826403,FR
-2954826404,2954826407,PT
-2954826408,2954826411,ES
-2954826412,2954826415,FR
-2954826416,2954826419,GB
-2954826420,2954826423,PT
-2954826424,2954826427,DE
-2954826428,2954826447,IT
-2954826448,2954826451,GB
-2954826452,2954826471,FR
-2954826472,2954826475,GB
-2954826476,2954826751,FR
-2954826752,2954826755,CH
-2954826756,2954826759,FR
-2954826760,2954826763,PL
-2954826764,2954826767,IE
-2954826768,2954826771,GB
-2954826772,2954826775,PL
-2954826776,2954826779,FR
-2954826780,2954826783,PL
-2954826784,2954826791,FR
-2954826792,2954826799,DE
-2954826800,2954826807,NL
-2954826808,2954826811,FR
-2954826812,2954826815,IT
-2954826816,2954826879,GB
-2954826880,2954827007,DE
-2954827008,2954827263,GB
-2954827264,2954827295,ES
-2954827296,2954827327,DE
-2954827328,2954827391,FR
-2954827392,2954827487,IE
-2954827488,2954827519,PL
-2954827520,2954827647,FR
-2954827648,2954827775,GB
-2954827776,2954827783,PL
-2954827784,2954827799,FR
+2954825068,2954825315,FR
+2954825316,2954825319,ES
+2954825320,2954825403,FR
+2954825404,2954825407,ES
+2954825408,2954825535,FR
+2954825536,2954825539,ES
+2954825540,2954826031,FR
+2954826032,2954826035,ES
+2954826036,2954826159,FR
+2954826160,2954826163,ES
+2954826164,2954826759,FR
+2954826760,2954826763,ES
+2954826764,2954826775,FR
+2954826776,2954826779,ES
+2954826780,2954827799,FR
2954827800,2954827807,DE
-2954827808,2954827815,PL
-2954827816,2954827819,FR
-2954827820,2954827823,ES
-2954827824,2954827827,DE
-2954827828,2954827831,PT
-2954827832,2954827835,IE
-2954827836,2954827839,DE
-2954827840,2954827855,BE
-2954827856,2954827863,PT
-2954827864,2954827883,FR
-2954827884,2954827887,DE
-2954827888,2954827935,FR
-2954827936,2954827939,PL
-2954827940,2954827943,PT
-2954827944,2954827947,NL
-2954827948,2954827971,FR
-2954827972,2954827975,CH
-2954827976,2954827979,FR
-2954827980,2954827983,IE
-2954827984,2954827987,FR
-2954827988,2954827999,PL
-2954828000,2954828031,NL
-2954828032,2954828287,FR
-2954828288,2954828291,CZ
-2954828292,2954828303,DE
-2954828304,2954828307,PL
-2954828308,2954828311,BE
-2954828312,2954828315,FR
-2954828316,2954828319,PL
-2954828320,2954828335,FR
-2954828336,2954828339,ES
-2954828340,2954828343,PL
-2954828344,2954828347,BE
-2954828348,2954828351,DE
-2954828352,2954828415,FR
-2954828416,2954828431,IT
-2954828432,2954828435,FR
-2954828436,2954828439,IE
-2954828440,2954828443,DE
-2954828444,2954828447,PL
-2954828448,2954828463,FR
-2954828464,2954828467,GB
-2954828468,2954828471,PL
-2954828472,2954828479,FR
-2954828480,2954828495,ES
-2954828496,2954828511,IT
-2954828512,2954828799,FR
-2954828800,2954828815,NL
-2954828816,2954828819,FR
-2954828820,2954828823,GB
-2954828824,2954828831,PT
-2954828832,2954828835,ES
-2954828836,2954828839,DE
-2954828840,2954828847,FR
-2954828848,2954828863,GB
-2954828864,2954828895,FR
-2954828896,2954828927,BE
-2954828928,2954828943,IE
-2954828944,2954828955,FR
-2954828956,2954828959,DE
-2954828960,2954828975,FR
-2954828976,2954828983,GB
-2954828984,2954828987,DE
-2954828988,2954828991,IE
-2954828992,2954829007,FR
-2954829008,2954829023,IE
-2954829024,2954829135,FR
-2954829136,2954829139,ES
-2954829140,2954829143,IE
-2954829144,2954829147,FR
-2954829148,2954829151,ES
-2954829152,2954829167,CH
-2954829168,2954829171,NL
-2954829172,2954829175,FR
-2954829176,2954829179,NL
-2954829180,2954829183,GB
-2954829184,2954829263,FR
-2954829264,2954829271,PL
-2954829272,2954829279,DE
-2954829280,2954829303,FR
-2954829304,2954829307,PT
-2954829308,2954829311,PL
-2954829312,2954829319,ES
-2954829320,2954829323,GB
-2954829324,2954829331,FR
-2954829332,2954829335,CZ
-2954829336,2954829343,GB
-2954829344,2954829375,IT
-2954829376,2954829383,GB
-2954829384,2954829387,PL
-2954829388,2954829391,GB
-2954829392,2954829395,FR
-2954829396,2954829399,PL
-2954829400,2954829407,IT
-2954829408,2954829423,ES
-2954829424,2954829431,FR
-2954829432,2954829435,GB
-2954829436,2954829439,DE
-2954829440,2954829455,GB
-2954829456,2954829459,FR
-2954829460,2954829471,GB
-2954829472,2954829495,FR
-2954829496,2954829499,NL
-2954829500,2954829503,IT
-2954829504,2954829559,FR
-2954829560,2954829563,BE
-2954829564,2954829567,FI
-2954829568,2954829607,FR
-2954829608,2954829615,NL
-2954829616,2954829623,GB
-2954829624,2954829631,ES
-2954829632,2954829647,GB
-2954829648,2954829679,FR
-2954829680,2954829695,NL
-2954829696,2954829711,ES
-2954829712,2954829739,FR
-2954829740,2954829743,GB
-2954829744,2954829751,FR
-2954829752,2954829755,DE
-2954829756,2954829823,FR
-2954829824,2954829827,PT
-2954829828,2954829831,NL
-2954829832,2954829843,FR
+2954827808,2954829751,FR
+2954829752,2954829752,ES
+2954829753,2954829759,FR
+2954829760,2954829823,ES
+2954829824,2954829843,FR
2954829844,2954829847,DE
-2954829848,2954829851,BE
-2954829852,2954829855,PL
-2954829856,2954829875,FR
-2954829876,2954829879,GB
-2954829880,2954829887,FR
-2954829888,2954829903,PL
-2954829904,2954829919,GB
-2954829920,2954829951,FR
-2954829952,2954829959,ES
-2954829960,2954829963,PT
-2954829964,2954829967,PL
-2954829968,2954829975,FR
-2954829976,2954829979,ES
-2954829980,2954829983,FR
-2954829984,2954829999,GB
-2954830000,2954830015,IT
-2954830016,2954830079,FR
-2954830080,2954830087,IT
-2954830088,2954830099,FR
-2954830100,2954830103,FI
-2954830104,2954830111,DE
-2954830112,2954830143,FR
-2954830144,2954830147,ES
-2954830148,2954830151,PT
-2954830152,2954830159,IE
-2954830160,2954830163,GB
-2954830164,2954830167,PT
-2954830168,2954830175,DE
-2954830176,2954830271,FR
-2954830272,2954830279,DE
-2954830280,2954830283,PL
-2954830284,2954830303,FR
-2954830304,2954830335,NL
-2954830336,2954830343,FR
-2954830344,2954830351,IE
-2954830352,2954830355,FR
-2954830356,2954830359,GB
-2954830360,2954830367,FR
-2954830368,2954830375,NL
-2954830376,2954830383,ES
-2954830384,2954830387,PL
-2954830388,2954830399,FR
-2954830400,2954830415,IT
-2954830416,2954830431,ES
-2954830432,2954830447,FR
-2954830448,2954830455,GB
-2954830456,2954830463,CH
-2954830464,2954830591,FR
-2954830592,2954830847,GB
-2954830848,2954830859,FR
-2954830860,2954830863,GB
-2954830864,2954830879,FR
-2954830880,2954830887,GB
-2954830888,2954830927,FR
-2954830928,2954830931,CZ
-2954830932,2954830935,IE
-2954830936,2954830943,FR
-2954830944,2954830975,PT
-2954830976,2954831103,FR
-2954831104,2954831167,PT
-2954831168,2954831231,FR
-2954831232,2954831247,ES
-2954831248,2954831251,GB
-2954831252,2954831267,FR
-2954831268,2954831271,PL
-2954831272,2954831275,FR
-2954831276,2954831279,IT
-2954831280,2954831295,CH
-2954831296,2954831327,FR
-2954831328,2954831331,PL
-2954831332,2954831335,FR
-2954831336,2954831339,PL
-2954831340,2954831343,FR
-2954831344,2954831359,PL
-2954831360,2954831391,FR
-2954831392,2954831399,CZ
-2954831400,2954831403,CH
-2954831404,2954831407,DE
-2954831408,2954831411,ES
-2954831412,2954831415,FR
-2954831416,2954831423,DE
-2954831424,2954831511,FR
-2954831512,2954831515,NL
-2954831516,2954831519,FR
-2954831520,2954831523,FI
-2954831524,2954831527,FR
-2954831528,2954831539,PT
-2954831540,2954831543,FR
-2954831544,2954831547,IT
-2954831548,2954831551,FI
-2954831552,2954831583,DE
-2954831584,2954831599,ES
-2954831600,2954831603,GB
-2954831604,2954831607,BE
-2954831608,2954831611,FR
-2954831612,2954831615,ES
-2954831616,2954831631,DE
-2954831632,2954831647,FR
-2954831648,2954831651,GB
-2954831652,2954831667,FR
-2954831668,2954831671,PL
-2954831672,2954831711,FR
-2954831712,2954831743,ES
-2954831744,2954831747,FR
-2954831748,2954831751,DE
-2954831752,2954831759,FR
-2954831760,2954831775,FI
-2954831776,2954831779,CH
-2954831780,2954831783,FR
-2954831784,2954831787,DE
-2954831788,2954831791,CZ
-2954831792,2954831799,NL
-2954831800,2954831807,FR
-2954831808,2954831839,GB
-2954831840,2954831927,FR
-2954831928,2954831931,DE
-2954831932,2954831983,FR
-2954831984,2954831999,BE
-2954832000,2954832003,PL
-2954832004,2954832015,FR
-2954832016,2954832023,GB
-2954832024,2954832063,PL
-2954832064,2954832127,FR
-2954832128,2954832135,GB
-2954832136,2954832143,PL
-2954832144,2954832151,FR
-2954832152,2954832159,GB
-2954832160,2954832167,ES
-2954832168,2954832175,DE
-2954832176,2954832207,FR
-2954832208,2954832211,PT
-2954832212,2954832215,FR
-2954832216,2954832219,DE
-2954832220,2954832223,FR
-2954832224,2954832255,PL
-2954832256,2954832335,FR
-2954832336,2954832343,DE
+2954829848,2954830395,FR
+2954830396,2954830399,ES
+2954830400,2954831247,FR
+2954831248,2954831251,ES
+2954831252,2954832343,FR
2954832344,2954832347,CH
-2954832348,2954832351,ES
-2954832352,2954832383,FR
-2954832384,2954832639,NL
-2954832640,2954832643,DE
-2954832644,2954832647,FR
-2954832648,2954832655,GB
-2954832656,2954832679,FR
-2954832680,2954832687,PL
-2954832688,2954832691,GB
-2954832692,2954832695,FR
-2954832696,2954832699,PL
-2954832700,2954832703,CH
-2954832704,2954832775,FR
-2954832776,2954832779,PL
-2954832780,2954832799,FR
-2954832800,2954832815,ES
-2954832816,2954832823,FR
-2954832824,2954832831,ES
-2954832832,2954832835,GB
-2954832836,2954832839,LT
-2954832840,2954832847,GB
-2954832848,2954832851,IT
-2954832852,2954832855,PL
-2954832856,2954832859,DE
-2954832860,2954832863,ES
-2954832864,2954832887,FR
-2954832888,2954832891,PL
-2954832892,2954832895,CH
-2954832896,2954832927,FR
-2954832928,2954832959,GB
-2954832960,2954832975,IT
-2954832976,2954832991,FR
-2954832992,2954833023,GB
-2954833024,2954833047,FR
-2954833048,2954833055,PT
-2954833056,2954833063,IT
-2954833064,2954833075,FR
-2954833076,2954833079,ES
-2954833080,2954833087,PL
-2954833088,2954833095,FR
-2954833096,2954833099,PL
-2954833100,2954833103,FR
-2954833104,2954833111,CZ
-2954833112,2954833119,FR
-2954833120,2954833151,PL
-2954833152,2954833183,FR
-2954833184,2954833199,PL
-2954833200,2954833207,FR
-2954833208,2954833211,CH
-2954833212,2954833215,PL
-2954833216,2954833219,DE
-2954833220,2954833223,IT
-2954833224,2954833227,FR
-2954833228,2954833231,CH
-2954833232,2954833247,ES
-2954833248,2954833255,FR
-2954833256,2954833259,PL
-2954833260,2954833263,LT
-2954833264,2954833271,FR
-2954833272,2954833279,DE
-2954833280,2954833283,PL
-2954833284,2954833287,FR
-2954833288,2954833295,IE
-2954833296,2954833315,FR
-2954833316,2954833319,CZ
-2954833320,2954833343,FR
-2954833344,2954833391,GB
-2954833392,2954833395,FR
-2954833396,2954833399,PL
-2954833400,2954833415,FR
-2954833416,2954833419,ES
+2954832348,2954832891,FR
+2954832892,2954832895,ES
+2954832896,2954833419,FR
2954833420,2954833423,PL
-2954833424,2954833439,GB
-2954833440,2954833443,FR
-2954833444,2954833447,PL
-2954833448,2954833451,GB
-2954833452,2954833455,DE
-2954833456,2954833471,ES
-2954833472,2954833487,FR
-2954833488,2954833503,BE
-2954833504,2954833535,FR
-2954833536,2954833543,PL
-2954833544,2954833547,FR
-2954833548,2954833551,PL
-2954833552,2954833559,FR
-2954833560,2954833563,IT
-2954833564,2954833567,FR
-2954833568,2954833571,PL
-2954833572,2954833575,FR
-2954833576,2954833583,PL
-2954833584,2954833587,FR
-2954833588,2954833591,IT
-2954833592,2954833595,PL
-2954833596,2954833599,FR
-2954833600,2954833603,NL
-2954833604,2954833607,FR
-2954833608,2954833611,PL
-2954833612,2954833631,ES
-2954833632,2954833635,IT
-2954833636,2954833639,CZ
-2954833640,2954833647,FR
-2954833648,2954833651,IT
-2954833652,2954833659,FR
-2954833660,2954833663,BE
-2954833664,2954833695,FR
-2954833696,2954833699,PL
-2954833700,2954833703,BE
-2954833704,2954833707,FR
-2954833708,2954833711,FI
-2954833712,2954833719,PL
-2954833720,2954833723,DE
-2954833724,2954833727,PL
-2954833728,2954833731,ES
-2954833732,2954833735,FR
-2954833736,2954833743,PL
-2954833744,2954833759,FR
-2954833760,2954833791,BE
-2954833792,2954833807,PL
-2954833808,2954833811,FR
-2954833812,2954833815,DE
-2954833816,2954833823,PT
-2954833824,2954833855,GB
-2954833856,2954833887,ES
-2954833888,2954833919,FR
-2954833920,2954833927,PL
-2954833928,2954833931,ES
-2954833932,2954833935,IT
-2954833936,2954833951,PT
-2954833952,2954833955,PL
-2954833956,2954833959,FR
-2954833960,2954833967,DE
-2954833968,2954833983,ES
-2954833984,2954833999,FR
-2954834000,2954834011,PL
-2954834012,2954834063,FR
-2954834064,2954834067,PL
-2954834068,2954834071,NL
-2954834072,2954834079,PL
-2954834080,2954834095,IT
-2954834096,2954834099,PL
-2954834100,2954834103,CH
-2954834104,2954834107,PL
-2954834108,2954834111,ES
-2954834112,2954834143,FR
-2954834144,2954834151,GB
-2954834152,2954834175,FR
-2954834176,2954834207,LT
-2954834208,2954834223,FR
-2954834224,2954834231,IE
-2954834232,2954834235,PL
-2954834236,2954834255,FR
-2954834256,2954834271,ES
-2954834272,2954834303,CZ
-2954834304,2954834431,IE
-2954834432,2954834435,PL
-2954834436,2954834439,IE
-2954834440,2954834447,BE
-2954834448,2954834451,PL
-2954834452,2954834455,IT
-2954834456,2954834463,NL
-2954834464,2954834467,FR
-2954834468,2954834471,PL
-2954834472,2954834491,ES
-2954834492,2954834495,GB
-2954834496,2954834503,IE
-2954834504,2954834511,IT
-2954834512,2954834519,PL
-2954834520,2954834523,GB
-2954834524,2954834527,ES
-2954834528,2954834531,FR
-2954834532,2954834535,PL
-2954834536,2954834539,FR
-2954834540,2954834575,PL
-2954834576,2954834579,FR
-2954834580,2954834583,IT
-2954834584,2954834603,FR
-2954834604,2954834607,PL
-2954834608,2954834611,PT
-2954834612,2954834615,ES
-2954834616,2954834623,FR
-2954834624,2954834627,NL
-2954834628,2954834631,DE
-2954834632,2954834635,PL
-2954834636,2954834643,FR
-2954834644,2954834647,IE
-2954834648,2954834651,FR
-2954834652,2954834655,CH
-2954834656,2954834663,DE
-2954834664,2954834671,ES
-2954834672,2954834675,NL
-2954834676,2954834679,FR
-2954834680,2954834683,NL
-2954834684,2954834687,GB
-2954834688,2954834695,PL
-2954834696,2954834751,FR
-2954834752,2954834755,PL
-2954834756,2954834759,FR
-2954834760,2954834763,IT
-2954834764,2954834799,FR
-2954834800,2954834803,GB
-2954834804,2954834807,IT
-2954834808,2954834815,FR
-2954834816,2954834879,BE
-2954834880,2954834911,PL
-2954834912,2954835199,FR
-2954835200,2954835207,ES
-2954835208,2954835215,PT
-2954835216,2954835223,IT
-2954835224,2954835227,DE
-2954835228,2954835231,PL
-2954835232,2954835263,FR
-2954835264,2954835279,DE
-2954835280,2954835283,PL
-2954835284,2954835287,ES
-2954835288,2954835295,IT
-2954835296,2954835299,PL
-2954835300,2954835303,LT
-2954835304,2954835307,ES
-2954835308,2954835311,BE
-2954835312,2954835327,FR
-2954835328,2954835335,ES
-2954835336,2954835343,CZ
-2954835344,2954835351,FR
-2954835352,2954835355,ES
-2954835356,2954835359,CH
-2954835360,2954835363,BE
-2954835364,2954835367,NL
-2954835368,2954835371,IT
-2954835372,2954835375,LT
-2954835376,2954835391,CH
-2954835392,2954835399,DE
-2954835400,2954835415,FR
-2954835416,2954835419,CH
-2954835420,2954835423,GB
-2954835424,2954835439,IT
-2954835440,2954835443,DE
-2954835444,2954835447,FR
-2954835448,2954835451,PL
+2954833424,2954833555,FR
+2954833556,2954833559,NL
+2954833560,2954833567,FR
+2954833568,2954833571,ES
+2954833572,2954834519,FR
+2954834520,2954834523,ES
+2954834524,2954834671,FR
+2954834672,2954834675,ES
+2954834676,2954835295,FR
+2954835296,2954835299,ES
+2954835300,2954835443,FR
+2954835444,2954835447,ES
+2954835448,2954835451,FR
2954835452,2954835455,ES
-2954835456,2954835471,PL
-2954835472,2954835475,DE
-2954835476,2954835479,ES
-2954835480,2954835511,FR
-2954835512,2954835519,ES
-2954835520,2954835539,PL
-2954835540,2954835543,FR
-2954835544,2954835547,ES
-2954835548,2954835551,PL
-2954835552,2954835607,FR
-2954835608,2954835611,DE
-2954835612,2954835627,FR
-2954835628,2954835635,ES
-2954835636,2954835639,FR
-2954835640,2954835643,DE
-2954835644,2954835659,ES
-2954835660,2954835663,FR
-2954835664,2954835683,PL
-2954835684,2954835699,FR
-2954835700,2954835707,ES
-2954835708,2954835711,BE
-2954835712,2954836239,FR
-2954836240,2954836255,CZ
-2954836256,2954836259,GB
-2954836260,2954836263,LT
-2954836264,2954836267,GB
-2954836268,2954836335,FR
-2954836336,2954836339,IT
-2954836340,2954836351,FR
-2954836352,2954836355,IE
-2954836356,2954836367,FR
-2954836368,2954836383,CZ
-2954836384,2954836423,FR
-2954836424,2954836427,IT
-2954836428,2954836431,GB
-2954836432,2954836435,IT
-2954836436,2954836439,NL
-2954836440,2954836447,GB
-2954836448,2954836479,CH
-2954836480,2954836735,FR
-2954836736,2954836743,ES
-2954836744,2954836759,FR
-2954836760,2954836767,CH
-2954836768,2954836863,FR
-2954836864,2954836875,ES
-2954836876,2954836879,FR
-2954836880,2954836895,IT
-2954836896,2954836927,FR
-2954836928,2954836935,NL
-2954836936,2954836943,PT
-2954836944,2954836951,NL
-2954836952,2954836955,ES
-2954836956,2954836959,GB
-2954836960,2954836963,ES
-2954836964,2954836967,IE
-2954836968,2954836979,FR
-2954836980,2954836983,NL
-2954836984,2954836991,GB
-2954836992,2954837023,PT
-2954837024,2954837027,NL
-2954837028,2954837031,ES
-2954837032,2954837039,FR
-2954837040,2954837055,PL
-2954837056,2954837071,IT
+2954835456,2954837071,FR
2954837072,2954837075,ES
-2954837076,2954837091,FR
-2954837092,2954837103,NL
-2954837104,2954837123,FR
-2954837124,2954837127,ES
-2954837128,2954837131,FR
-2954837132,2954837135,FI
-2954837136,2954837151,PL
-2954837152,2954837215,FR
-2954837216,2954837247,PL
-2954837248,2954837271,FR
-2954837272,2954837275,DE
-2954837276,2954837279,PL
-2954837280,2954837311,FR
-2954837312,2954837319,FI
-2954837320,2954837327,NL
-2954837328,2954837335,GB
-2954837336,2954837343,LT
-2954837344,2954837351,GB
-2954837352,2954837359,PL
-2954837360,2954837375,FR
-2954837376,2954837383,LT
-2954837384,2954837387,FR
-2954837388,2954837391,PL
-2954837392,2954837407,FR
-2954837408,2954837423,ES
-2954837424,2954837431,FR
-2954837432,2954837435,GB
-2954837436,2954837439,FR
-2954837440,2954837471,GB
-2954837472,2954837479,ES
-2954837480,2954837487,FR
-2954837488,2954837495,CH
-2954837496,2954837499,DE
-2954837500,2954837503,ES
-2954837504,2954837535,FR
-2954837536,2954837543,PT
-2954837544,2954837551,IT
-2954837552,2954837559,GB
-2954837560,2954837563,FR
-2954837564,2954837567,PT
-2954837568,2954837575,BE
-2954837576,2954837579,FR
-2954837580,2954837583,GB
-2954837584,2954837591,IE
-2954837592,2954837599,PL
-2954837600,2954837607,GB
-2954837608,2954837615,BE
-2954837616,2954837619,FR
-2954837620,2954837623,PL
-2954837624,2954837631,GB
-2954837632,2954837639,FR
-2954837640,2954837643,PL
-2954837644,2954837647,GB
-2954837648,2954837651,BE
-2954837652,2954837663,FR
-2954837664,2954837667,IT
-2954837668,2954837671,CZ
-2954837672,2954837687,FR
-2954837688,2954837691,NL
-2954837692,2954837791,FR
-2954837792,2954837823,GB
-2954837824,2954837827,BE
+2954837076,2954837667,FR
+2954837668,2954837671,ES
+2954837672,2954837827,FR
2954837828,2954837831,DE
-2954837832,2954837839,PL
-2954837840,2954837843,ES
-2954837844,2954837851,FR
-2954837852,2954837855,IT
-2954837856,2954837859,FR
-2954837860,2954837863,DE
-2954837864,2954837867,FR
-2954837868,2954837871,DE
-2954837872,2954837879,PL
-2954837880,2954837883,FR
-2954837884,2954837887,ES
-2954837888,2954837903,IT
-2954837904,2954837919,FR
-2954837920,2954837951,PL
-2954837952,2954838015,FR
-2954838016,2954838019,PL
-2954838020,2954838047,FR
-2954838048,2954838055,BE
-2954838056,2954838071,FR
-2954838072,2954838075,PL
-2954838076,2954838079,NL
-2954838080,2954838087,FR
-2954838088,2954838091,IT
-2954838092,2954838095,FR
-2954838096,2954838099,ES
-2954838100,2954838111,FR
-2954838112,2954838115,CZ
-2954838116,2954838119,CH
-2954838120,2954838123,GB
-2954838124,2954838127,IT
-2954838128,2954838131,GB
-2954838132,2954838135,FR
-2954838136,2954838139,ES
-2954838140,2954838143,CH
-2954838144,2954838151,FR
-2954838152,2954838159,BE
-2954838160,2954838163,PT
-2954838164,2954838167,GB
-2954838168,2954838171,NL
-2954838172,2954838175,IT
-2954838176,2954838179,GB
-2954838180,2954838183,FR
-2954838184,2954838191,IT
-2954838192,2954838199,ES
-2954838200,2954838203,CH
-2954838204,2954838207,FR
-2954838208,2954838211,ES
-2954838212,2954838215,IE
-2954838216,2954838219,GB
-2954838220,2954838223,ES
-2954838224,2954838239,FR
-2954838240,2954838255,PL
-2954838256,2954838263,IE
-2954838264,2954838271,FR
-2954838272,2954838279,IE
-2954838280,2954838287,IT
-2954838288,2954838303,BE
-2954838304,2954838319,GB
-2954838320,2954838327,ES
-2954838328,2954838351,FR
-2954838352,2954838367,IE
-2954838368,2954838379,FR
-2954838380,2954838383,PL
-2954838384,2954838387,FR
-2954838388,2954838391,CH
-2954838392,2954838395,FR
-2954838396,2954838399,IE
-2954838400,2954838415,IT
-2954838416,2954838419,ES
-2954838420,2954838423,FR
-2954838424,2954838431,CZ
-2954838432,2954838435,ES
-2954838436,2954838447,FR
-2954838448,2954838455,NL
-2954838456,2954838463,FR
-2954838464,2954838467,ES
-2954838468,2954838475,PL
-2954838476,2954838479,IT
-2954838480,2954838511,FR
-2954838512,2954838519,IT
-2954838520,2954838523,DE
-2954838524,2954838527,IE
-2954838528,2954838531,IT
-2954838532,2954838535,IE
-2954838536,2954838539,PL
-2954838540,2954838543,CH
-2954838544,2954838559,PL
-2954838560,2954838575,FR
-2954838576,2954838583,IT
-2954838584,2954838591,BE
-2954838592,2954838599,DE
+2954837832,2954837867,FR
+2954837868,2954837871,ES
+2954837872,2954838599,FR
2954838600,2954838607,GB
-2954838608,2954838615,NL
-2954838616,2954838623,FR
-2954838624,2954838639,IT
-2954838640,2954838643,ES
-2954838644,2954838647,DE
-2954838648,2954838655,PL
-2954838656,2954838719,IE
-2954838720,2954838751,FR
-2954838752,2954838767,BE
-2954838768,2954838871,FR
-2954838872,2954838879,IT
-2954838880,2954838895,ES
-2954838896,2954838915,FR
-2954838916,2954838927,GB
-2954838928,2954838931,FR
-2954838932,2954838939,GB
-2954838940,2954838943,CH
-2954838944,2954838991,FR
-2954838992,2954838995,DE
-2954838996,2954838999,ES
-2954839000,2954839007,GB
-2954839008,2954839023,PT
-2954839024,2954839039,FR
-2954839040,2954839107,GB
-2954839108,2954839111,BE
-2954839112,2954839119,ES
-2954839120,2954839127,NL
-2954839128,2954839135,GB
-2954839136,2954839167,DE
-2954839168,2954839199,PL
-2954839200,2954839207,FR
-2954839208,2954839211,PT
-2954839212,2954839231,FR
-2954839232,2954839243,PL
-2954839244,2954839247,ES
-2954839248,2954839263,FR
-2954839264,2954839267,PL
-2954839268,2954839303,FR
-2954839304,2954839311,ES
-2954839312,2954839319,PL
-2954839320,2954839343,GB
-2954839344,2954839347,ES
-2954839348,2954839351,IT
-2954839352,2954839355,NL
-2954839356,2954839359,ES
-2954839360,2954839363,DE
-2954839364,2954839367,IT
-2954839368,2954839371,ES
-2954839372,2954839383,FR
-2954839384,2954839395,PL
-2954839396,2954839399,ES
-2954839400,2954839407,FR
-2954839408,2954839423,IE
-2954839424,2954839471,GB
+2954838608,2954839267,FR
+2954839268,2954839271,ES
+2954839272,2954839471,FR
2954839472,2954839479,BE
-2954839480,2954839483,DE
-2954839484,2954839487,FR
-2954839488,2954839519,ES
-2954839520,2954839523,GB
-2954839524,2954839527,PL
-2954839528,2954839535,GB
-2954839536,2954839543,FR
-2954839544,2954839547,GB
-2954839548,2954839551,ES
-2954839552,2954840063,DE
-2954840064,2954840079,CZ
-2954840080,2954840087,PL
-2954840088,2954840095,FR
-2954840096,2954840103,ES
-2954840104,2954840107,GB
-2954840108,2954840111,ES
-2954840112,2954840115,FR
-2954840116,2954840119,PL
-2954840120,2954840123,ES
-2954840124,2954840127,PL
-2954840128,2954840139,FR
-2954840140,2954840143,PL
-2954840144,2954840147,ES
-2954840148,2954840151,BE
-2954840152,2954840155,IE
-2954840156,2954840179,FR
-2954840180,2954840183,IT
-2954840184,2954840223,FR
-2954840224,2954840479,PL
-2954840480,2954840495,FR
-2954840496,2954840499,GB
-2954840500,2954840503,ES
-2954840504,2954840507,FR
-2954840508,2954840519,PL
-2954840520,2954840523,FR
-2954840524,2954840527,ES
-2954840528,2954840543,FR
-2954840544,2954840575,ES
-2954840576,2954840591,FI
-2954840592,2954840607,IT
-2954840608,2954840611,CH
-2954840612,2954840615,GB
-2954840616,2954840619,NL
-2954840620,2954840623,PL
-2954840624,2954840639,ES
-2954840640,2954840647,FR
-2954840648,2954840651,DE
-2954840652,2954840655,PL
-2954840656,2954840663,FR
-2954840664,2954840671,PL
-2954840672,2954840703,IT
-2954840704,2954840719,FR
-2954840720,2954840727,GB
-2954840728,2954840731,ES
-2954840732,2954840735,DE
-2954840736,2954840743,FR
-2954840744,2954840751,GB
-2954840752,2954840759,FR
-2954840760,2954840763,GB
-2954840764,2954840767,PL
-2954840768,2954840775,GB
-2954840776,2954840779,FR
-2954840780,2954840783,NL
-2954840784,2954840799,BE
-2954840800,2954840803,PL
-2954840804,2954840831,FR
-2954840832,2954840847,PL
-2954840848,2954840851,CH
-2954840852,2954840855,BE
-2954840856,2954840859,DE
-2954840860,2954840863,ES
-2954840864,2954840903,FR
-2954840904,2954840907,PL
-2954840908,2954840919,DE
-2954840920,2954840927,FR
-2954840928,2954840931,IT
-2954840932,2954840939,FR
-2954840940,2954840943,ES
-2954840944,2954840959,FR
-2954840960,2954841023,IT
-2954841024,2954841091,ES
-2954841092,2954841095,PL
-2954841096,2954841103,GB
-2954841104,2954841111,ES
-2954841112,2954841151,FR
-2954841152,2954841183,ES
-2954841184,2954841199,FR
-2954841200,2954841203,CZ
-2954841204,2954841215,PL
-2954841216,2954841231,FR
-2954841232,2954841239,DE
-2954841240,2954841247,GB
-2954841248,2954841255,PL
-2954841256,2954841259,ES
-2954841260,2954841263,GB
-2954841264,2954841271,FR
-2954841272,2954841275,IT
-2954841276,2954841295,FR
-2954841296,2954841299,ES
-2954841300,2954841307,PL
-2954841308,2954841311,GB
-2954841312,2954841471,FR
-2954841472,2954841503,PL
-2954841504,2954841507,DE
-2954841508,2954841511,GB
-2954841512,2954841519,FR
-2954841520,2954841523,PL
-2954841524,2954841527,DE
-2954841528,2954841535,CH
-2954841536,2954841543,GB
-2954841544,2954841551,PL
-2954841552,2954841555,FR
-2954841556,2954841559,PL
-2954841560,2954841563,FI
-2954841564,2954841567,PL
-2954841568,2954841591,ES
-2954841592,2954841595,PL
-2954841596,2954841599,ES
-2954841600,2954841631,PL
-2954841632,2954841635,FR
-2954841636,2954841639,ES
-2954841640,2954841643,FR
-2954841644,2954841647,GB
-2954841648,2954841655,FR
-2954841656,2954841659,GB
-2954841660,2954841663,FR
-2954841664,2954841667,IE
-2954841668,2954841671,NL
-2954841672,2954841675,PL
-2954841676,2954841679,FR
-2954841680,2954841683,GB
-2954841684,2954841687,FR
-2954841688,2954841691,PL
-2954841692,2954841695,FR
-2954841696,2954841699,IT
-2954841700,2954841703,FR
-2954841704,2954841711,BE
-2954841712,2954841715,FR
-2954841716,2954841719,CZ
-2954841720,2954841759,FR
-2954841760,2954841775,DE
-2954841776,2954841783,PL
-2954841784,2954841787,PT
-2954841788,2954841795,ES
-2954841796,2954841799,FR
-2954841800,2954841803,PL
-2954841804,2954841807,DE
-2954841808,2954841811,PT
-2954841812,2954841815,GB
-2954841816,2954841819,FR
-2954841820,2954841823,GB
-2954841824,2954841851,FR
-2954841852,2954841855,ES
-2954841856,2954841875,FR
-2954841876,2954841879,NL
-2954841880,2954841887,PL
-2954841888,2954841907,FR
-2954841908,2954841911,PL
-2954841912,2954841919,NL
-2954841920,2954841927,GB
-2954841928,2954841931,PL
-2954841932,2954841935,FI
-2954841936,2954841939,BE
-2954841940,2954841943,PL
-2954841944,2954841951,DE
-2954841952,2954841983,ES
-2954841984,2954842031,FR
-2954842032,2954842039,PL
-2954842040,2954842043,DE
-2954842044,2954842047,GB
-2954842048,2954842067,FR
-2954842068,2954842071,GB
-2954842072,2954842075,FR
-2954842076,2954842079,GB
-2954842080,2954842095,FR
-2954842096,2954842111,IE
-2954842112,2954842239,FR
-2954842240,2954842243,ES
-2954842244,2954842247,FR
-2954842248,2954842251,ES
-2954842252,2954842255,GB
-2954842256,2954842263,FR
-2954842264,2954842267,CZ
-2954842268,2954842271,FR
-2954842272,2954842275,IE
-2954842276,2954842279,FR
-2954842280,2954842291,PL
-2954842292,2954842295,CH
-2954842296,2954842299,GB
-2954842300,2954842367,ES
-2954842368,2954842375,NL
-2954842376,2954842403,FR
-2954842404,2954842407,IT
-2954842408,2954842411,CZ
-2954842412,2954842415,GB
-2954842416,2954842423,FR
-2954842424,2954842427,ES
-2954842428,2954842439,FR
-2954842440,2954842443,IE
-2954842444,2954842447,NL
-2954842448,2954842451,GB
-2954842452,2954842455,CZ
-2954842456,2954842459,FR
-2954842460,2954842463,FI
-2954842464,2954842467,PL
-2954842468,2954842471,FR
-2954842472,2954842479,GB
-2954842480,2954842483,IT
-2954842484,2954842487,PL
-2954842488,2954842491,CH
-2954842492,2954842559,FR
-2954842560,2954842591,GB
-2954842592,2954842623,PT
-2954842624,2954842655,DE
-2954842656,2954842659,ES
-2954842660,2954842663,FI
-2954842664,2954842667,FR
-2954842668,2954842671,IE
-2954842672,2954842703,FR
-2954842704,2954842719,DE
-2954842720,2954842723,FR
-2954842724,2954842727,PL
-2954842728,2954842731,ES
-2954842732,2954842735,LT
-2954842736,2954842743,NL
-2954842744,2954842751,CH
-2954842752,2954842767,FR
-2954842768,2954842771,BE
-2954842772,2954842775,GB
-2954842776,2954842783,FR
-2954842784,2954842791,PT
-2954842792,2954842799,BE
-2954842800,2954842807,ES
-2954842808,2954842811,GB
-2954842812,2954842815,FI
-2954842816,2954842855,FR
-2954842856,2954842863,DE
-2954842864,2954842879,FR
-2954842880,2954842911,PL
-2954842912,2954842919,IT
-2954842920,2954842927,FR
-2954842928,2954842935,BE
-2954842936,2954842943,IE
-2954842944,2954842951,CH
-2954842952,2954842955,PL
-2954842956,2954842959,IT
-2954842960,2954843007,FR
-2954843008,2954843011,DE
-2954843012,2954843015,FR
-2954843016,2954843023,LT
-2954843024,2954843027,DE
-2954843028,2954843031,ES
-2954843032,2954843035,FR
-2954843036,2954843039,IT
-2954843040,2954843043,FR
-2954843044,2954843047,GB
-2954843048,2954843055,FR
-2954843056,2954843071,PL
-2954843072,2954843103,FR
-2954843104,2954843135,NL
-2954843136,2954843183,FR
-2954843184,2954843187,NL
-2954843188,2954843191,GB
-2954843192,2954843195,NL
-2954843196,2954843199,ES
-2954843200,2954843263,FR
-2954843264,2954843271,CZ
-2954843272,2954843275,PL
-2954843276,2954843311,FR
-2954843312,2954843315,ES
-2954843316,2954843319,FR
-2954843320,2954843323,DE
-2954843324,2954843327,NL
-2954843328,2954843335,IT
-2954843336,2954843339,GB
-2954843340,2954843343,NL
-2954843344,2954843347,FR
-2954843348,2954843351,PL
-2954843352,2954843375,FR
-2954843376,2954843391,ES
-2954843392,2954843407,FR
-2954843408,2954843415,CH
-2954843416,2954843419,PL
-2954843420,2954843423,FR
-2954843424,2954843439,NL
-2954843440,2954843459,FR
-2954843460,2954843463,PL
-2954843464,2954843471,FR
-2954843472,2954843487,GB
-2954843488,2954843495,DE
-2954843496,2954843503,FR
-2954843504,2954843507,PT
-2954843508,2954843511,FR
-2954843512,2954843519,PL
-2954843520,2954843591,FR
-2954843592,2954843595,BE
-2954843596,2954843599,CH
-2954843600,2954843603,IT
-2954843604,2954843607,PL
-2954843608,2954843611,FR
-2954843612,2954843615,PL
-2954843616,2954843631,FR
-2954843632,2954843639,CH
-2954843640,2954843643,IE
-2954843644,2954843647,DE
-2954843648,2954843711,PL
-2954843712,2954843715,FR
-2954843716,2954843719,GB
-2954843720,2954843723,BE
-2954843724,2954843727,DE
-2954843728,2954843775,FR
-2954843776,2954843783,PL
-2954843784,2954843791,GB
-2954843792,2954843807,IE
-2954843808,2954843823,PL
-2954843824,2954843839,GB
-2954843840,2954843855,IE
-2954843856,2954843863,PL
-2954843864,2954843867,ES
-2954843868,2954843887,FR
-2954843888,2954843895,BE
-2954843896,2954843899,PT
-2954843900,2954844031,FR
-2954844032,2954844039,PL
-2954844040,2954844047,GB
-2954844048,2954844063,PL
-2954844064,2954844095,BE
-2954844096,2954844119,FR
-2954844120,2954844123,PL
-2954844124,2954844127,IT
-2954844128,2954844143,FR
-2954844144,2954844147,NL
+2954839480,2954840255,FR
+2954840256,2954840447,GB
+2954840448,2954840515,FR
+2954840516,2954840519,NL
+2954840520,2954840927,FR
+2954840928,2954840931,DE
+2954840932,2954841567,FR
+2954841568,2954841583,ES
+2954841584,2954843503,FR
+2954843504,2954843507,ES
+2954843508,2954843767,FR
+2954843768,2954843771,ES
+2954843772,2954844147,FR
2954844148,2954844151,DE
-2954844152,2954844155,ES
-2954844156,2954844175,FR
-2954844176,2954844179,DE
-2954844180,2954844183,NL
-2954844184,2954844187,FR
-2954844188,2954844191,ES
-2954844192,2954844223,IE
-2954844224,2954844263,FR
-2954844264,2954844267,IE
-2954844268,2954844271,ES
-2954844272,2954844275,PL
-2954844276,2954844279,GB
-2954844280,2954844287,PT
-2954844288,2954844351,PL
-2954844352,2954844415,FR
-2954844416,2954844419,IT
-2954844420,2954844423,ES
-2954844424,2954844431,FR
-2954844432,2954844447,BE
-2954844448,2954844455,CH
-2954844456,2954844463,FR
-2954844464,2954844467,ES
-2954844468,2954844471,PL
-2954844472,2954844479,NL
-2954844480,2954844483,DE
-2954844484,2954844487,GB
-2954844488,2954844499,FR
-2954844500,2954844503,PL
-2954844504,2954844507,FR
-2954844508,2954844511,ES
-2954844512,2954844543,DE
-2954844544,2954844551,FR
-2954844552,2954844559,ES
-2954844560,2954844575,FR
-2954844576,2954844591,DE
-2954844592,2954844599,ES
-2954844600,2954844603,FR
-2954844604,2954844607,CZ
-2954844608,2954844687,FR
-2954844688,2954844703,CH
-2954844704,2954844711,PL
-2954844712,2954844719,PT
-2954844720,2954844723,ES
-2954844724,2954844735,FR
-2954844736,2954844767,GB
-2954844768,2954844799,FR
-2954844800,2954844815,ES
-2954844816,2954844819,GB
-2954844820,2954844927,FR
-2954844928,2954844931,PT
-2954844932,2954844943,FR
-2954844944,2954844947,GB
-2954844948,2954844951,IT
-2954844952,2954844959,FR
-2954844960,2954844967,PL
-2954844968,2954844971,FR
-2954844972,2954844975,PL
-2954844976,2954844991,FR
-2954844992,2954844995,PL
-2954844996,2954844999,FR
-2954845000,2954845003,NL
-2954845004,2954845023,FR
-2954845024,2954845039,IE
-2954845040,2954845043,FR
-2954845044,2954845047,IT
-2954845048,2954845055,FI
-2954845056,2954845059,PT
-2954845060,2954845063,FR
-2954845064,2954845067,NL
-2954845068,2954845071,PL
-2954845072,2954845079,BE
-2954845080,2954845083,DE
-2954845084,2954845087,FR
-2954845088,2954845091,FI
-2954845092,2954845099,FR
-2954845100,2954845103,ES
-2954845104,2954845111,FR
-2954845112,2954845119,NL
-2954845120,2954845135,PL
-2954845136,2954845139,GB
-2954845140,2954845143,FR
-2954845144,2954845147,IT
-2954845148,2954845151,GB
-2954845152,2954845159,PL
-2954845160,2954845167,GB
-2954845168,2954845183,BE
-2954845184,2954845199,PL
-2954845200,2954845207,NL
-2954845208,2954845211,ES
-2954845212,2954845215,CH
-2954845216,2954845223,FR
-2954845224,2954845231,NL
-2954845232,2954845239,DE
-2954845240,2954845247,NL
-2954845248,2954845263,CH
-2954845264,2954845279,PL
-2954845280,2954845283,CZ
-2954845284,2954845287,GB
-2954845288,2954845299,FR
-2954845300,2954845303,ES
-2954845304,2954845311,PL
-2954845312,2954845315,CH
-2954845316,2954845319,FR
-2954845320,2954845327,LT
-2954845328,2954845343,FR
-2954845344,2954845359,FI
-2954845360,2954845363,FR
-2954845364,2954845367,ES
-2954845368,2954845371,NL
-2954845372,2954845375,DE
-2954845376,2954845407,PL
-2954845408,2954845439,FR
-2954845440,2954845951,GB
-2954845952,2954845967,ES
-2954845968,2954845999,FR
-2954846000,2954846015,PT
-2954846016,2954846047,FR
-2954846048,2954846055,NL
-2954846056,2954846059,FR
-2954846060,2954846063,GB
-2954846064,2954846079,NL
-2954846080,2954846087,FR
-2954846088,2954846095,DE
-2954846096,2954846099,PL
-2954846100,2954846103,NL
-2954846104,2954846107,FR
-2954846108,2954846111,GB
-2954846112,2954846119,FR
-2954846120,2954846123,IE
-2954846124,2954846127,IT
-2954846128,2954846135,FR
-2954846136,2954846139,DE
-2954846140,2954846143,GB
-2954846144,2954846191,FR
-2954846192,2954846207,FI
-2954846208,2954854403,FR
-2954854404,2954854407,IT
-2954854408,2954854411,FR
-2954854412,2954854415,PL
-2954854416,2954854431,GB
-2954854432,2954854463,ES
-2954854464,2954854471,LT
-2954854472,2954854475,FR
-2954854476,2954854479,BE
-2954854480,2954854495,FR
-2954854496,2954854511,IT
-2954854512,2954854527,ES
-2954854528,2954854559,FR
-2954854560,2954854575,NL
-2954854576,2954854619,FR
-2954854620,2954854623,ES
-2954854624,2954854655,FR
-2954854656,2954854659,PL
-2954854660,2954854663,PT
-2954854664,2954854667,FI
-2954854668,2954854687,FR
-2954854688,2954854691,PL
-2954854692,2954854695,IT
-2954854696,2954854699,PL
-2954854700,2954854703,ES
-2954854704,2954854711,FR
-2954854712,2954854719,DE
-2954854720,2954854783,ES
-2954854784,2954854815,IT
-2954854816,2954854851,FR
-2954854852,2954854855,GB
-2954854856,2954854863,FR
-2954854864,2954854867,PL
-2954854868,2954854871,GB
-2954854872,2954854879,ES
-2954854880,2954854895,IT
-2954854896,2954854899,FR
-2954854900,2954854903,PL
-2954854904,2954854919,FR
-2954854920,2954854927,GB
-2954854928,2954854943,FI
-2954854944,2954855011,FR
-2954855012,2954855015,CZ
-2954855016,2954855027,GB
-2954855028,2954855031,PL
-2954855032,2954855039,GB
-2954855040,2954855043,FR
-2954855044,2954855047,IE
-2954855048,2954855051,FR
-2954855052,2954855055,ES
-2954855056,2954855059,FR
-2954855060,2954855063,ES
-2954855064,2954855067,BE
-2954855068,2954855071,ES
-2954855072,2954855075,FR
-2954855076,2954855079,DE
-2954855080,2954855087,FR
-2954855088,2954855091,PL
-2954855092,2954855095,CH
-2954855096,2954855103,FR
-2954855104,2954855167,IE
-2954855168,2954855191,FR
-2954855192,2954855199,NL
-2954855200,2954855295,FR
-2954855296,2954855359,BE
-2954855360,2954855391,NL
-2954855392,2954855423,FR
-2954855424,2954855431,GB
-2954855432,2954855439,FR
-2954855440,2954855455,LT
-2954855456,2954855479,FR
-2954855480,2954855495,IT
-2954855496,2954855503,GB
-2954855504,2954855507,IT
+2954844152,2954844999,FR
+2954845000,2954845003,ES
+2954845004,2954846107,FR
+2954846108,2954846111,ES
+2954846112,2954846139,FR
+2954846140,2954846143,ES
+2954846144,2954855075,FR
+2954855076,2954855079,ES
+2954855080,2954855507,FR
2954855508,2954855511,DE
2954855512,2954855515,FR
-2954855516,2954855523,PL
-2954855524,2954855527,DE
-2954855528,2954855535,ES
-2954855536,2954855551,FR
-2954855552,2954855567,PL
-2954855568,2954855571,FR
-2954855572,2954855575,BE
-2954855576,2954855579,FR
-2954855580,2954855583,IT
-2954855584,2954855615,FR
-2954855616,2954855619,PL
-2954855620,2954855623,FR
-2954855624,2954855631,IT
-2954855632,2954855639,FR
-2954855640,2954855643,PL
-2954855644,2954855647,GB
-2954855648,2954855651,CZ
-2954855652,2954855655,GB
-2954855656,2954855659,FR
-2954855660,2954855663,DE
-2954855664,2954855679,FR
-2954855680,2954855695,NL
-2954855696,2954855703,FR
-2954855704,2954855707,ES
-2954855708,2954855743,PL
-2954855744,2954855807,FR
-2954855808,2954855871,IE
-2954855872,2954855879,PL
-2954855880,2954855887,ES
-2954855888,2954855903,FR
-2954855904,2954855919,PL
-2954855920,2954855999,FR
-2954856000,2954856071,PL
-2954856072,2954856075,NL
-2954856076,2954856079,FR
-2954856080,2954856083,DE
-2954856084,2954856087,FR
-2954856088,2954856095,ES
-2954856096,2954856111,FR
-2954856112,2954856115,IE
-2954856116,2954856119,DE
-2954856120,2954856123,PL
-2954856124,2954856127,CZ
-2954856128,2954856167,FR
-2954856168,2954856175,ES
-2954856176,2954856179,IT
-2954856180,2954856187,PL
-2954856188,2954856447,FR
-2954856448,2954856511,ES
-2954856512,2954856543,FR
-2954856544,2954856547,PL
-2954856548,2954856551,FR
-2954856552,2954856559,IE
-2954856560,2954856563,ES
-2954856564,2954856567,LT
-2954856568,2954856571,PL
-2954856572,2954856575,BE
-2954856576,2954856583,ES
-2954856584,2954856607,FR
-2954856608,2954856611,BE
-2954856612,2954856615,FR
-2954856616,2954856619,ES
-2954856620,2954856623,GB
-2954856624,2954856627,IT
-2954856628,2954856631,FR
-2954856632,2954856635,GB
-2954856636,2954856639,DE
-2954856640,2954856671,IT
-2954856672,2954856675,ES
-2954856676,2954856679,IT
-2954856680,2954856683,FR
-2954856684,2954856687,IT
-2954856688,2954856691,BE
-2954856692,2954856695,PL
-2954856696,2954856699,FR
-2954856700,2954856959,PL
-2954856960,2954856975,FR
-2954856976,2954856979,PL
-2954856980,2954856983,IE
-2954856984,2954856987,PL
-2954856988,2954856991,FR
-2954856992,2954856995,BE
-2954856996,2954856999,ES
-2954857000,2954857007,PL
-2954857008,2954857087,FR
-2954857088,2954857091,PL
-2954857092,2954857095,CZ
-2954857096,2954857099,PL
-2954857100,2954857111,FR
-2954857112,2954857115,PL
-2954857116,2954857119,IE
-2954857120,2954857135,PT
-2954857136,2954857143,LT
-2954857144,2954857151,FR
-2954857152,2954857215,IE
-2954857216,2954857503,FR
-2954857504,2954857519,IT
-2954857520,2954857523,FR
-2954857524,2954857527,PL
-2954857528,2954857531,GB
-2954857532,2954857535,NL
-2954857536,2954857551,IE
-2954857552,2954857567,DE
-2954857568,2954857571,PL
-2954857572,2954857583,FR
-2954857584,2954857599,ES
-2954857600,2954857663,IE
-2954857664,2954857695,FR
-2954857696,2954857699,IE
-2954857700,2954857703,ES
-2954857704,2954857707,PL
-2954857708,2954857711,ES
-2954857712,2954857727,FR
-2954857728,2954857743,FI
-2954857744,2954857755,FR
-2954857756,2954857759,NL
-2954857760,2954857823,FR
-2954857824,2954857855,ES
-2954857856,2954857983,IE
-2954857984,2954857999,IT
-2954858000,2954858015,IE
-2954858016,2954858023,PL
-2954858024,2954858027,ES
-2954858028,2954858031,IT
-2954858032,2954858035,GB
-2954858036,2954858039,PL
-2954858040,2954858043,FR
-2954858044,2954858047,PT
-2954858048,2954858051,ES
-2954858052,2954858059,FR
-2954858060,2954858063,PL
-2954858064,2954858079,IE
-2954858080,2954858111,ES
-2954858112,2954858143,DE
-2954858144,2954858175,ES
-2954858176,2954858191,FR
-2954858192,2954858207,GB
-2954858208,2954858239,IT
-2954858240,2954858271,NL
-2954858272,2954858303,GB
-2954858304,2954858335,DE
-2954858336,2954858351,FR
-2954858352,2954858359,GB
-2954858360,2954858367,LT
-2954858368,2954858375,PL
-2954858376,2954858379,ES
-2954858380,2954858383,PL
-2954858384,2954858415,FR
-2954858416,2954858423,ES
-2954858424,2954858427,FR
-2954858428,2954858431,BE
-2954858432,2954858439,GB
-2954858440,2954858443,FR
-2954858444,2954858447,GB
-2954858448,2954858463,IT
-2954858464,2954858479,FR
-2954858480,2954858483,NL
-2954858484,2954858487,DE
-2954858488,2954858491,IT
-2954858492,2954858495,NL
-2954858496,2954858751,ES
-2954858752,2954858815,IE
-2954858816,2954858819,ES
-2954858820,2954858823,FR
-2954858824,2954858831,GB
-2954858832,2954858839,PT
-2954858840,2954858843,FR
-2954858844,2954858847,PL
-2954858848,2954858863,FR
-2954858864,2954858871,NL
-2954858872,2954858879,IT
-2954858880,2954858895,FR
-2954858896,2954858899,DE
-2954858900,2954858903,ES
-2954858904,2954858911,IT
-2954858912,2954858943,DE
-2954858944,2954858975,ES
-2954858976,2954859023,FR
-2954859024,2954859027,IT
-2954859028,2954859031,PT
-2954859032,2954859043,FR
-2954859044,2954859047,DE
-2954859048,2954859071,FR
-2954859072,2954859079,PL
-2954859080,2954859083,IE
-2954859084,2954859087,FR
-2954859088,2954859103,BE
-2954859104,2954859123,FR
-2954859124,2954859127,NL
-2954859128,2954859131,GB
-2954859132,2954859135,BE
-2954859136,2954859239,FR
-2954859240,2954859243,ES
-2954859244,2954859247,PL
-2954859248,2954859267,FR
-2954859268,2954859271,ES
-2954859272,2954859275,PL
-2954859276,2954859279,ES
-2954859280,2954859311,FR
-2954859312,2954859319,ES
-2954859320,2954859323,FR
-2954859324,2954859327,CZ
-2954859328,2954859343,GB
-2954859344,2954859391,FR
-2954859392,2954859423,IT
-2954859424,2954859455,GB
-2954859456,2954859487,NL
-2954859488,2954859495,FR
-2954859496,2954859503,IT
-2954859504,2954859519,GB
-2954859520,2954859551,DE
-2954859552,2954859559,FR
-2954859560,2954859575,IT
-2954859576,2954859583,DE
-2954859584,2954859615,IE
-2954859616,2954859647,FR
-2954859648,2954859655,ES
-2954859656,2954859663,NL
-2954859664,2954859679,FR
-2954859680,2954859695,PL
-2954859696,2954859711,FR
-2954859712,2954859727,PL
-2954859728,2954859775,FR
-2954859776,2954859807,PL
-2954859808,2954859823,GB
-2954859824,2954859827,DE
-2954859828,2954859831,PL
-2954859832,2954859839,ES
-2954859840,2954859903,FR
-2954859904,2954859935,DE
-2954859936,2954859951,FR
-2954859952,2954859955,PL
-2954859956,2954859959,GB
-2954859960,2954859963,ES
-2954859964,2954859967,PL
-2954859968,2954860031,FR
-2954860032,2954860063,DE
-2954860064,2954860095,FR
-2954860096,2954860099,IT
-2954860100,2954860111,FR
-2954860112,2954860127,GB
-2954860128,2954860131,ES
-2954860132,2954860135,FR
-2954860136,2954860139,PL
-2954860140,2954860143,CH
-2954860144,2954860151,PL
-2954860152,2954860167,IE
-2954860168,2954860171,PL
-2954860172,2954860175,DE
-2954860176,2954860179,IT
-2954860180,2954860187,FR
-2954860188,2954860191,ES
-2954860192,2954860223,FR
-2954860224,2954860227,ES
-2954860228,2954860231,PL
-2954860232,2954860239,FR
-2954860240,2954860243,NL
-2954860244,2954860247,ES
-2954860248,2954860259,FR
-2954860260,2954860263,PL
-2954860264,2954860271,IE
-2954860272,2954860275,GB
-2954860276,2954860319,FR
-2954860320,2954860327,DE
-2954860328,2954860335,FR
-2954860336,2954860351,CH
-2954860352,2954860415,FR
-2954860416,2954860423,PL
-2954860424,2954860439,FR
-2954860440,2954860443,CH
-2954860444,2954860447,NL
-2954860448,2954860455,ES
-2954860456,2954860459,PL
-2954860460,2954860463,GB
-2954860464,2954860479,DE
-2954860480,2954860483,PL
-2954860484,2954860487,FR
-2954860488,2954860491,GB
-2954860492,2954860527,FR
-2954860528,2954860531,GB
-2954860532,2954860535,FR
-2954860536,2954860539,GB
-2954860540,2954860559,ES
-2954860560,2954860575,FR
-2954860576,2954860607,IT
-2954860608,2954860671,IE
-2954860672,2954860687,FR
-2954860688,2954860695,GB
-2954860696,2954860703,CZ
-2954860704,2954860767,PT
-2954860768,2954860783,ES
-2954860784,2954860791,PL
-2954860792,2954860799,IT
-2954860800,2954860863,IE
-2954860864,2954860991,FR
-2954860992,2954860999,ES
-2954861000,2954861003,PL
-2954861004,2954861023,FR
-2954861024,2954861031,GB
-2954861032,2954861035,NL
-2954861036,2954861039,PT
-2954861040,2954861055,PL
-2954861056,2954861067,FR
-2954861068,2954861071,GB
-2954861072,2954861087,FR
-2954861088,2954861119,CH
-2954861120,2954861135,GB
-2954861136,2954861143,FR
-2954861144,2954861147,DE
-2954861148,2954861151,FR
-2954861152,2954861167,GB
-2954861168,2954861183,PT
-2954861184,2954861191,IT
-2954861192,2954861195,FR
-2954861196,2954861199,CZ
-2954861200,2954861215,DE
-2954861216,2954861231,FR
-2954861232,2954861239,PL
-2954861240,2954861247,FR
-2954861248,2954861311,PL
-2954861312,2954861323,FR
-2954861324,2954861327,IT
-2954861328,2954861343,NL
-2954861344,2954861359,FR
-2954861360,2954861363,IE
-2954861364,2954861367,FR
-2954861368,2954861371,ES
-2954861372,2954861375,PT
-2954861376,2954861407,DE
-2954861408,2954861431,FR
-2954861432,2954861435,ES
-2954861436,2954861567,FR
-2954861568,2954861571,ES
-2954861572,2954861575,GB
-2954861576,2954861591,FR
-2954861592,2954861595,PL
-2954861596,2954861599,NL
-2954861600,2954861619,PL
-2954861620,2954861631,IT
-2954861632,2954861635,NL
-2954861636,2954861639,GB
-2954861640,2954861647,PL
-2954861648,2954861655,GB
-2954861656,2954861663,FR
-2954861664,2954861667,DE
-2954861668,2954861671,ES
-2954861672,2954861675,NL
-2954861676,2954861687,PL
-2954861688,2954861691,GB
-2954861692,2954861695,NL
-2954861696,2954861727,GB
-2954861728,2954861751,FR
-2954861752,2954861767,GB
-2954861768,2954861775,FR
-2954861776,2954861779,ES
-2954861780,2954861783,DE
-2954861784,2954861787,IE
-2954861788,2954861791,PL
-2954861792,2954861823,GB
-2954861824,2954861827,PL
-2954861828,2954861831,GB
-2954861832,2954861835,DE
-2954861836,2954861839,PL
-2954861840,2954861843,GB
-2954861844,2954861847,PL
-2954861848,2954861863,FR
-2954861864,2954861867,PL
-2954861868,2954861871,FR
-2954861872,2954861875,PT
+2954855516,2954855519,ES
+2954855520,2954855527,FR
+2954855528,2954855531,ES
+2954855532,2954856179,FR
+2954856180,2954856183,ES
+2954856184,2954859323,FR
+2954859324,2954859327,ES
+2954859328,2954861875,FR
2954861876,2954861879,CH
-2954861880,2954861887,FR
-2954861888,2954861919,DE
-2954861920,2954861927,PL
-2954861928,2954861935,DE
-2954861936,2954861939,FR
-2954861940,2954861943,DE
-2954861944,2954861947,FR
-2954861948,2954861951,PL
-2954861952,2954861955,FR
-2954861956,2954861967,GB
-2954861968,2954861975,ES
-2954861976,2954861983,DE
-2954861984,2954861987,FR
-2954861988,2954861991,BE
-2954861992,2954861995,PL
-2954861996,2954861999,FR
-2954862000,2954862015,NL
-2954862016,2954862047,FR
-2954862048,2954862063,IT
-2954862064,2954862079,FI
-2954862080,2954862143,FR
-2954862144,2954862207,ES
-2954862208,2954862211,PL
-2954862212,2954862215,PT
-2954862216,2954862219,BE
-2954862220,2954862239,FR
-2954862240,2954862247,IT
-2954862248,2954862251,DE
-2954862252,2954862255,CZ
-2954862256,2954862271,FR
-2954862272,2954862303,FI
-2954862304,2954862335,FR
-2954862336,2954862367,PL
-2954862368,2954862371,FR
-2954862372,2954862375,CH
-2954862376,2954862379,NL
-2954862380,2954862399,FR
-2954862400,2954862415,GB
-2954862416,2954862419,PL
-2954862420,2954862423,FR
-2954862424,2954862431,NL
-2954862432,2954862467,FR
-2954862468,2954862471,NL
-2954862472,2954862479,DE
-2954862480,2954862483,ES
-2954862484,2954862487,FR
-2954862488,2954862495,IT
-2954862496,2954862511,ES
-2954862512,2954862515,DE
-2954862516,2954862519,PT
-2954862520,2954862523,ES
-2954862524,2954862527,IT
-2954862528,2954862559,FR
-2954862560,2954862567,PL
-2954862568,2954862571,DE
-2954862572,2954862575,FR
-2954862576,2954862579,PL
-2954862580,2954862587,FR
-2954862588,2954862591,ES
-2954862592,2954863615,FR
+2954861880,2954862415,FR
+2954862416,2954862419,ES
+2954862420,2954863615,FR
2954863616,2954864639,DE
2954864640,2954865663,IT
2954865664,2954866687,ES
-2954866688,2954870783,FR
-2954870784,2954870787,DE
-2954870788,2954870791,IE
-2954870792,2954870795,FR
-2954870796,2954870799,PL
-2954870800,2954870831,FR
-2954870832,2954870835,PL
-2954870836,2954870839,GB
-2954870840,2954870843,DE
-2954870844,2954870863,FR
-2954870864,2954870867,GB
-2954870868,2954870875,ES
-2954870876,2954870879,PL
-2954870880,2954870895,IE
-2954870896,2954870903,FR
-2954870904,2954870907,PL
-2954870908,2954870911,ES
-2954870912,2954871039,FR
-2954871040,2954871295,GB
-2954871296,2954871551,FR
-2954871552,2954871583,DE
-2954871584,2954871599,GB
-2954871600,2954871603,FR
-2954871604,2954871607,PL
-2954871608,2954871611,BE
-2954871612,2954871615,CZ
-2954871616,2954871631,ES
-2954871632,2954871635,FR
-2954871636,2954871639,ES
-2954871640,2954871643,GB
-2954871644,2954871647,IT
-2954871648,2954871663,FR
-2954871664,2954871667,GB
-2954871668,2954871695,FR
-2954871696,2954871703,DE
-2954871704,2954871707,CH
-2954871708,2954871711,GB
-2954871712,2954871743,FR
-2954871744,2954871759,CH
-2954871760,2954871807,FR
-2954871808,2954871823,ES
-2954871824,2954871831,FR
-2954871832,2954871835,PL
-2954871836,2954871839,GB
-2954871840,2954871903,FR
-2954871904,2954871919,IE
-2954871920,2954871923,ES
-2954871924,2954871935,IE
-2954871936,2954871939,PL
-2954871940,2954871943,GB
-2954871944,2954871947,PL
-2954871948,2954871951,DE
-2954871952,2954871955,ES
-2954871956,2954871959,PT
-2954871960,2954871967,FR
-2954871968,2954871999,PL
-2954872000,2954872063,DE
-2954872064,2954872323,FR
-2954872324,2954872327,PL
-2954872328,2954872331,FR
-2954872332,2954872335,GB
-2954872336,2954872351,FR
-2954872352,2954872383,GB
-2954872384,2954872415,FR
-2954872416,2954872419,ES
-2954872420,2954872435,PL
-2954872436,2954872447,FR
-2954872448,2954872479,PL
-2954872480,2954872551,FR
-2954872552,2954872555,GB
-2954872556,2954872559,FR
-2954872560,2954872567,PL
-2954872568,2954872571,ES
-2954872572,2954872587,FR
-2954872588,2954872591,DE
-2954872592,2954872607,IT
-2954872608,2954872639,ES
-2954872640,2954872671,BE
-2954872672,2954872675,IE
-2954872676,2954872679,ES
-2954872680,2954872683,FR
-2954872684,2954872687,DE
-2954872688,2954872703,CZ
-2954872704,2954872831,DE
-2954872832,2954873347,FR
-2954873348,2954873351,PL
-2954873352,2954873355,GB
-2954873356,2954873359,IT
-2954873360,2954873367,FR
-2954873368,2954873371,PL
-2954873372,2954873375,NL
-2954873376,2954873391,FR
-2954873392,2954873407,PL
-2954873408,2954873447,FR
-2954873448,2954873455,PL
-2954873456,2954873459,FR
-2954873460,2954873463,NL
-2954873464,2954873471,FR
-2954873472,2954873503,PT
-2954873504,2954873583,FR
-2954873584,2954873591,ES
-2954873592,2954873599,FR
-2954873600,2954873631,DE
-2954873632,2954873635,NL
-2954873636,2954873651,FR
-2954873652,2954873655,DE
-2954873656,2954873663,PL
-2954873664,2954873679,IT
-2954873680,2954873695,FR
-2954873696,2954873727,ES
-2954873728,2954873759,FR
-2954873760,2954873783,PL
-2954873784,2954873787,FR
-2954873788,2954873791,BE
-2954873792,2954873799,FR
-2954873800,2954873803,PL
-2954873804,2954873807,NL
-2954873808,2954873815,DE
-2954873816,2954873819,FI
-2954873820,2954873831,FR
-2954873832,2954873835,IT
-2954873836,2954873839,PT
-2954873840,2954873847,IT
-2954873848,2954873851,GB
-2954873852,2954873855,PL
-2954873856,2954873871,FR
-2954873872,2954873879,LT
-2954873880,2954873887,DE
-2954873888,2954873903,FR
-2954873904,2954873911,IT
-2954873912,2954873919,FR
-2954873920,2954873983,IE
-2954873984,2954874111,GB
-2954874112,2954874119,PT
-2954874120,2954874127,PL
-2954874128,2954874135,ES
-2954874136,2954874139,FR
-2954874140,2954874143,PT
-2954874144,2954874159,FR
-2954874160,2954874175,ES
-2954874176,2954874303,PT
-2954874304,2954874307,ES
-2954874308,2954874311,BE
-2954874312,2954874315,IT
-2954874316,2954874319,CZ
-2954874320,2954874343,FR
-2954874344,2954874355,ES
-2954874356,2954874359,FR
-2954874360,2954874367,IE
-2954874368,2954874371,ES
-2954874372,2954874379,FR
-2954874380,2954874383,PL
-2954874384,2954874387,FR
-2954874388,2954874391,PL
-2954874392,2954874403,FR
-2954874404,2954874407,LT
-2954874408,2954874415,NL
-2954874416,2954874419,GB
-2954874420,2954874423,NL
-2954874424,2954874427,GB
-2954874428,2954874495,FR
-2954874496,2954874559,NL
-2954874560,2954874567,BE
-2954874568,2954874591,FR
-2954874592,2954874623,PT
-2954874624,2954874631,FR
-2954874632,2954874635,CZ
-2954874636,2954874639,FR
-2954874640,2954874647,ES
-2954874648,2954874651,FR
-2954874652,2954874655,PL
-2954874656,2954874671,FR
-2954874672,2954874675,PL
-2954874676,2954874679,CZ
-2954874680,2954874687,FR
-2954874688,2954874719,ES
-2954874720,2954874751,FI
-2954874752,2954874799,IE
-2954874800,2954874815,GB
-2954874816,2954874819,DE
-2954874820,2954874823,GB
-2954874824,2954874827,FR
-2954874828,2954874831,GB
-2954874832,2954874859,FR
-2954874860,2954874863,LT
-2954874864,2954874867,FR
-2954874868,2954874871,PL
-2954874872,2954874911,FR
-2954874912,2954874915,CH
-2954874916,2954874919,GB
-2954874920,2954874923,PL
-2954874924,2954874927,FR
-2954874928,2954874943,PL
-2954874944,2954874975,IE
-2954874976,2954874979,FR
-2954874980,2954874983,DE
-2954874984,2954874987,GB
-2954874988,2954874991,PL
-2954874992,2954875007,IE
-2954875008,2954875023,FR
-2954875024,2954875027,ES
-2954875028,2954875031,FR
-2954875032,2954875039,PL
-2954875040,2954875043,PT
-2954875044,2954875047,PL
-2954875048,2954875051,FR
-2954875052,2954875055,NL
-2954875056,2954875063,IT
-2954875064,2954875067,DE
-2954875068,2954875071,FI
-2954875072,2954875075,NL
-2954875076,2954875095,FR
-2954875096,2954875099,GB
-2954875100,2954875103,PL
-2954875104,2954875135,NL
-2954875136,2954875167,PT
-2954875168,2954875183,IT
-2954875184,2954875191,GB
-2954875192,2954875199,FR
-2954875200,2954875203,PL
-2954875204,2954875207,FR
-2954875208,2954875215,ES
-2954875216,2954875231,FR
-2954875232,2954875247,GB
-2954875248,2954875327,FR
-2954875328,2954875359,PL
-2954875360,2954875375,FR
-2954875376,2954875379,PT
-2954875380,2954875383,DE
-2954875384,2954875391,GB
-2954875392,2954875463,ES
-2954875464,2954875467,NL
-2954875468,2954875471,GB
-2954875472,2954875479,FI
-2954875480,2954875483,DE
-2954875484,2954875487,PL
-2954875488,2954875491,LT
-2954875492,2954875495,FR
-2954875496,2954875503,IT
-2954875504,2954875519,FR
-2954875520,2954875543,PL
-2954875544,2954875551,NL
-2954875552,2954875583,PL
-2954875584,2954875587,ES
-2954875588,2954875591,IT
-2954875592,2954875599,FR
-2954875600,2954875615,PT
-2954875616,2954875623,PL
-2954875624,2954875627,DE
-2954875628,2954875631,ES
-2954875632,2954875635,IE
-2954875636,2954875639,FR
-2954875640,2954875647,BE
-2954875648,2954875651,ES
-2954875652,2954875655,BE
-2954875656,2954875659,FR
-2954875660,2954875663,PT
-2954875664,2954875671,ES
-2954875672,2954875695,FR
-2954875696,2954875703,ES
-2954875704,2954875707,PL
-2954875708,2954875711,ES
-2954875712,2954875775,IE
-2954875776,2954875779,BE
-2954875780,2954875783,FR
-2954875784,2954875787,IT
-2954875788,2954875791,FR
-2954875792,2954875807,PL
-2954875808,2954875839,IT
-2954875840,2954875871,FR
-2954875872,2954875879,PL
-2954875880,2954875891,FR
-2954875892,2954875895,ES
-2954875896,2954875903,FR
-2954875904,2954875907,IT
-2954875908,2954875911,CH
-2954875912,2954875919,ES
-2954875920,2954875935,FR
-2954875936,2954875951,PL
-2954875952,2954875999,IE
-2954876000,2954876031,BE
-2954876032,2954876039,FR
-2954876040,2954876043,DE
-2954876044,2954876047,GB
-2954876048,2954876051,ES
-2954876052,2954876055,NL
-2954876056,2954876063,IE
-2954876064,2954876095,FR
-2954876096,2954876111,PT
-2954876112,2954876119,IE
-2954876120,2954876123,FR
-2954876124,2954876127,NL
-2954876128,2954876191,FR
-2954876192,2954876223,PT
-2954876224,2954876231,FR
-2954876232,2954876235,PL
-2954876236,2954876239,IE
-2954876240,2954876243,ES
-2954876244,2954876247,PL
-2954876248,2954876255,ES
-2954876256,2954876287,IE
-2954876288,2954876351,FR
-2954876352,2954876383,ES
-2954876384,2954876391,FR
-2954876392,2954876395,DE
-2954876396,2954876399,IE
-2954876400,2954876411,FR
-2954876412,2954876423,DE
-2954876424,2954876431,PL
-2954876432,2954876435,PT
-2954876436,2954876439,GB
-2954876440,2954876447,FR
-2954876448,2954876451,DE
-2954876452,2954876455,FR
-2954876456,2954876459,PL
-2954876460,2954876463,DE
-2954876464,2954876543,IT
-2954876544,2954876559,PL
-2954876560,2954876575,FR
-2954876576,2954876579,ES
-2954876580,2954876583,FR
-2954876584,2954876587,GB
-2954876588,2954876591,PL
-2954876592,2954876639,IE
-2954876640,2954876643,DE
-2954876644,2954876647,IT
-2954876648,2954876655,FR
-2954876656,2954876671,BE
-2954876672,2954876703,PT
-2954876704,2954876719,FR
-2954876720,2954876727,GB
-2954876728,2954876731,PL
-2954876732,2954876735,DE
-2954876736,2954876767,IT
-2954876768,2954876783,FR
-2954876784,2954876791,IE
-2954876792,2954876795,FR
-2954876796,2954876799,DE
-2954876800,2954876863,IE
-2954876864,2954876891,PL
-2954876892,2954876895,FR
-2954876896,2954876899,GB
-2954876900,2954876903,IT
-2954876904,2954876959,FR
-2954876960,2954876975,DE
-2954876976,2954876983,PL
-2954876984,2954876987,FR
-2954876988,2954876991,ES
-2954876992,2954877007,PL
-2954877008,2954877023,CZ
-2954877024,2954877027,ES
-2954877028,2954877031,IT
-2954877032,2954877035,FR
-2954877036,2954877039,GB
-2954877040,2954877055,FR
-2954877056,2954877059,PL
-2954877060,2954877063,GB
-2954877064,2954877071,DE
-2954877072,2954877087,CH
-2954877088,2954877103,DE
-2954877104,2954877111,PL
-2954877112,2954877119,IE
-2954877120,2954877151,ES
-2954877152,2954877159,NL
-2954877160,2954877163,PL
-2954877164,2954877167,FI
-2954877168,2954877183,DE
-2954877184,2954877455,FR
-2954877456,2954877459,PT
-2954877460,2954877463,FR
-2954877464,2954877471,DE
-2954877472,2954877503,FR
-2954877504,2954877519,ES
-2954877520,2954877523,BE
-2954877524,2954877527,ES
-2954877528,2954877535,PT
-2954877536,2954877539,IT
-2954877540,2954877547,FR
-2954877548,2954877551,PL
-2954877552,2954877583,FR
-2954877584,2954877587,FI
-2954877588,2954877591,PL
-2954877592,2954877595,DE
-2954877596,2954877599,PT
-2954877600,2954877615,PL
-2954877616,2954877631,NL
-2954877632,2954877651,FR
-2954877652,2954877655,PT
-2954877656,2954877663,FR
-2954877664,2954877667,GB
-2954877668,2954877671,PL
-2954877672,2954877675,FR
-2954877676,2954877679,GB
-2954877680,2954877963,FR
-2954877964,2954877967,DE
-2954877968,2954877983,PT
-2954877984,2954877991,DE
-2954877992,2954877995,BE
-2954877996,2954878007,FR
-2954878008,2954878011,IT
-2954878012,2954878015,GB
-2954878016,2954878031,FR
-2954878032,2954878035,NL
-2954878036,2954878039,FR
-2954878040,2954878047,PT
-2954878048,2954878063,FR
-2954878064,2954878079,IT
-2954878080,2954878095,FR
-2954878096,2954878111,ES
-2954878112,2954878143,PT
-2954878144,2954878207,FR
-2954878208,2954878463,IE
-2954878464,2954878471,CH
-2954878472,2954878475,FR
-2954878476,2954878479,GB
-2954878480,2954878495,NL
-2954878496,2954878499,GB
-2954878500,2954878511,FR
-2954878512,2954878527,BE
-2954878528,2954878543,FR
-2954878544,2954878551,PL
-2954878552,2954878555,CH
-2954878556,2954878559,PL
-2954878560,2954878575,FR
-2954878576,2954878579,CH
-2954878580,2954878583,NL
-2954878584,2954878591,GB
-2954878592,2954878607,BE
-2954878608,2954878623,FI
-2954878624,2954878627,CH
-2954878628,2954878631,PL
-2954878632,2954878635,IT
-2954878636,2954878639,PL
-2954878640,2954878655,IT
-2954878656,2954878687,PL
-2954878688,2954878695,FR
-2954878696,2954878703,IE
-2954878704,2954878707,IT
-2954878708,2954878711,PL
-2954878712,2954878719,ES
-2954878720,2954878759,FR
-2954878760,2954878763,PL
-2954878764,2954878783,FR
-2954878784,2954878847,IE
-2954878848,2954878855,FR
-2954878856,2954878863,IE
-2954878864,2954878871,FR
-2954878872,2954878875,PL
-2954878876,2954878879,PT
-2954878880,2954878883,ES
-2954878884,2954878887,PL
-2954878888,2954878891,FR
-2954878892,2954878895,GB
-2954878896,2954878899,DE
-2954878900,2954878903,GB
-2954878904,2954878911,PL
-2954878912,2954878915,DE
-2954878916,2954878919,PL
-2954878920,2954878931,FR
-2954878932,2954878939,GB
-2954878940,2954887167,FR
+2954866688,2954870799,FR
+2954870800,2954870803,ES
+2954870804,2954870843,FR
+2954870844,2954870847,ES
+2954870848,2954870903,FR
+2954870904,2954870907,ES
+2954870908,2954875879,FR
+2954875880,2954875883,ES
+2954875884,2954876871,FR
+2954876872,2954876875,ES
+2954876876,2954876887,FR
+2954876888,2954876891,ES
+2954876892,2954877103,FR
+2954877104,2954877107,PL
+2954877108,2954877163,FR
+2954877164,2954877167,ES
+2954877168,2954877819,FR
+2954877820,2954877823,ES
+2954877824,2954878907,FR
+2954878908,2954878911,ES
+2954878912,2954887167,FR
2954887168,2954891263,UA
2954891264,2954895359,IT
2954895360,2954897407,RU
@@ -92428,30 +44376,22 @@
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
2954936320,2954938367,AM
2954938368,2954940415,HU
-2954940416,2954941955,DE
-2954941956,2954941967,RU
-2954941968,2954942051,DE
-2954942052,2954942055,RU
-2954942056,2954942111,DE
-2954942112,2954942119,UA
-2954942120,2954944099,DE
-2954944100,2954944103,GR
-2954944104,2954944511,DE
+2954940416,2954944511,DE
2954944512,2954946559,GB
-2954946560,2954948095,DE
-2954948096,2954948351,NL
-2954948352,2954948607,DE
+2954946560,2954948607,DE
2954948608,2954950655,RU
2954950656,2954952703,ES
2954952704,2955018239,TR
-2955018240,2955034623,JP
+2955018240,2955027726,JP
+2955027727,2955027727,IE
+2955027728,2955034623,JP
2955034624,2955083775,IE
2955083776,2955149311,GB
2955149312,2955411455,UA
@@ -92478,7 +44418,7 @@
2956259328,2956261375,DE
2956261376,2956263423,ES
2956263424,2956296191,TR
-2956296192,2956328959,RU
+2956312576,2956328959,RU
2956328960,2956460031,TR
2956460032,2956468223,RU
2956468224,2956470271,LV
@@ -92489,38 +44429,30 @@
2956492800,2956496895,CH
2956496896,2956500991,IR
2956500992,2956503039,NL
-2956503040,2956504063,RU
+2956503040,2956504063,CY
2956504064,2956504319,CH
-2956504320,2956504383,NL
-2956504384,2956504575,RU
-2956504576,2956504831,CH
-2956504832,2956505087,GB
+2956504320,2956504575,RU
+2956504576,2956504831,NL
+2956504832,2956505087,RU
2956505088,2956506111,NL
-2956506112,2956506623,GB
-2956506624,2956506879,RU
-2956506880,2956507135,DE
+2956506112,2956507135,RU
2956507136,2956508159,NL
-2956508160,2956508415,RU
-2956508416,2956508671,FR
-2956508672,2956509183,NL
+2956508160,2956509183,RU
2956509184,2956517375,GB
-2956517376,2956518095,NL
-2956518096,2956518111,FI
-2956518112,2956519935,NL
-2956519936,2956520319,GB
-2956520320,2956521471,NL
+2956517376,2956521471,NL
2956521472,2956525567,SE
2956525568,2956533759,JO
2956533760,2956535807,FR
2956535808,2956537855,LV
2956537856,2956541951,UA
-2956541952,2956543999,FR
2956544000,2956546047,RU
2956546048,2956548095,FR
-2956548096,2956550143,ME
+2956548096,2956550143,HR
2956550144,2956554239,ES
2956554240,2956558335,IT
-2956558336,2956574719,DE
+2956558336,2956574527,DE
+2956574528,2956574559,PL
+2956574560,2956574719,DE
2956574720,2956576767,SE
2956576768,2956578815,ES
2956578816,2956582911,RU
@@ -92536,11 +44468,9 @@
2956613632,2956613887,GB
2956613888,2956614143,NL
2956614144,2956614399,FR
-2956614400,2956614655,EU
2956614656,2956614911,GB
2956614912,2956615167,NL
2956615168,2956615423,FR
-2956615424,2956615679,EU
2956615680,2956623871,GB
2956623872,2956656639,GR
2956656640,2956722175,RU
@@ -92550,12 +44480,12 @@
2956822528,2956823039,SE
2956823040,2956823167,GB
2956823168,2956823551,SE
-2956823552,2956823676,US
-2956823677,2956823677,US
-2956823678,2956824575,US
+2956823552,2956824575,US
2956824576,2956826623,PT
2956826624,2956828671,HR
-2956828672,2956836863,BA
+2956828672,2956832767,BA
+2956832768,2956833791,AT
+2956833792,2956836863,BA
2956836864,2956853247,SK
2956853248,2956865535,HR
2956865536,2956869631,IT
@@ -92564,10 +44494,7 @@
2956888064,2956890111,BE
2956890112,2956892159,IR
2956892160,2956894207,IT
-2956894208,2956897279,BE
-2956897280,2956897535,NL
-2956897536,2956898047,BE
-2956898048,2956898303,NL
+2956894208,2956898303,NL
2956898304,2956902399,RU
2956902400,2956904447,NL
2956904448,2956906495,DK
@@ -92583,143 +44510,29 @@
2957068288,2957070335,LU
2957070336,2957074431,IT
2957074432,2957082623,RU
-2957082624,2957088511,DE
-2957088512,2957088767,AT
-2957088768,2957094655,DE
-2957094656,2957095167,CH
-2957095168,2957095423,NL
-2957095424,2957095679,CH
-2957095680,2957096191,DE
-2957096192,2957096959,CH
-2957096960,2957099007,DE
+2957082624,2957090815,DE
+2957090816,2957094911,AT
+2957094912,2957099007,DE
2957099008,2957100031,CH
2957100032,2957104639,DE
2957104640,2957105663,US
-2957105664,2957105919,NL
-2957105920,2957106687,AT
-2957106688,2957106936,NL
-2957106937,2957106943,AT
-2957106944,2957107192,DE
-2957107193,2957107199,AT
-2957107200,2957107448,DE
-2957107449,2957107455,AT
-2957107456,2957107704,DE
-2957107705,2957107711,AT
-2957107712,2957107960,DE
-2957107961,2957107967,AT
-2957107968,2957108216,DE
-2957108217,2957108223,AT
-2957108224,2957108472,DE
-2957108473,2957108479,AT
-2957108480,2957108728,DE
-2957108729,2957108735,AT
-2957108736,2957108984,DE
-2957108985,2957108991,AT
-2957108992,2957109240,DE
-2957109241,2957109247,AT
-2957109248,2957109496,DE
-2957109497,2957109503,AT
-2957109504,2957109752,DE
-2957109753,2957109759,AT
-2957109760,2957110008,DE
-2957110009,2957110015,AT
-2957110016,2957110264,DE
-2957110265,2957110271,AT
-2957110272,2957110520,DE
-2957110521,2957110527,AT
-2957110528,2957110776,DE
-2957110777,2957110783,AT
-2957110784,2957111032,DE
-2957111033,2957111039,AT
-2957111040,2957111288,DE
-2957111289,2957111295,AT
-2957111296,2957111544,DE
-2957111545,2957111551,AT
-2957111552,2957111800,DE
-2957111801,2957111807,AT
-2957111808,2957112056,DE
-2957112057,2957112063,AT
-2957112064,2957112312,DE
-2957112313,2957112319,AT
-2957112320,2957112568,DE
-2957112569,2957112575,AT
-2957112576,2957112824,DE
-2957112825,2957112831,AT
-2957112832,2957113080,DE
-2957113081,2957113087,AT
-2957113088,2957113336,DE
-2957113337,2957113343,AT
-2957113344,2957113592,DE
-2957113593,2957113599,AT
-2957113600,2957113848,DE
-2957113849,2957113855,AT
-2957113856,2957114104,DE
-2957114105,2957114111,AT
-2957114112,2957114360,DE
-2957114361,2957114367,AT
-2957114368,2957114616,DE
-2957114617,2957114623,AT
-2957114624,2957114872,DE
-2957114873,2957114879,AT
-2957114880,2957115128,DE
-2957115129,2957180927,AT
+2957105664,2957115391,DE
+2957115392,2957180927,AT
2957180928,2957189119,UA
2957189120,2957193215,LV
2957193216,2957195263,RU
2957195264,2957197311,PS
2957197312,2957201407,IR
-2957201408,2957202431,US
-2957202432,2957202463,GB
-2957202464,2957202467,PL
-2957202468,2957202471,KR
-2957202472,2957202475,BR
-2957202476,2957202479,EG
-2957202480,2957202483,ZA
-2957202484,2957202487,IS
-2957202488,2957202491,CA
-2957202492,2957202495,IL
-2957202496,2957202499,DE
-2957202500,2957202503,AR
-2957202504,2957202507,NZ
-2957202508,2957202511,DE
-2957202512,2957202527,NO
-2957202528,2957202543,SE
-2957202544,2957202551,FI
-2957202552,2957202559,EE
-2957202560,2957202567,LV
-2957202568,2957202575,LT
-2957202576,2957202583,BY
-2957202584,2957202591,UA
-2957202592,2957202599,RO
-2957202600,2957202607,BG
-2957202608,2957202615,GR
-2957202616,2957202623,TR
-2957202624,2957202627,AT
-2957202628,2957202631,IT
-2957202632,2957202639,CH
-2957202640,2957202643,LU
-2957202644,2957202647,BE
-2957202648,2957202651,NL
-2957202652,2957202667,DK
-2957202668,2957202671,FR
-2957202672,2957202675,US
-2957202676,2957202679,ES
-2957202680,2957202683,PT
-2957202684,2957202687,AU
-2957202688,2957202691,RU
-2957202692,2957202699,IE
-2957202700,2957202703,JP
-2957202704,2957202943,US
-2957202944,2957203455,US
+2957201408,2957202679,US
+2957202680,2957202680,PT
+2957202681,2957203455,US
2957203456,2957205503,FR
2957205504,2957213695,PS
2957213696,2957221887,FR
-2957221888,2957223365,GB
-2957223366,2957223366,GB
-2957223367,2957223641,GB
-2957223642,2957223642,GB
-2957223643,2957223935,GB
-2957223936,2957224191,FR
+2957221888,2957223935,GB
+2957223936,2957223999,FR
+2957224000,2957224063,GB
+2957224064,2957224191,FR
2957224192,2957224447,DE
2957224448,2957224959,GB
2957224960,2957225215,FR
@@ -92744,24 +44557,8 @@
2957654016,2957656063,DE
2957656064,2957672447,GE
2957672448,2957680639,CZ
-2957680640,2957685711,GB
-2957685712,2957685727,IE
-2957685728,2957688831,GB
-2957688832,2957688895,SE
-2957688896,2957689023,US
-2957689024,2957690463,SE
-2957690464,2957690467,DK
-2957690468,2957690471,JP
-2957690472,2957690479,SE
-2957690480,2957690495,US
-2957690496,2957690703,SE
-2957690704,2957690711,NO
-2957690712,2957690719,FI
-2957690720,2957690723,DK
-2957690724,2957690735,SE
-2957690736,2957690751,US
-2957690752,2957690783,PL
-2957690784,2957690879,SE
+2957680640,2957688831,GB
+2957688832,2957690879,SE
2957690880,2957692927,RU
2957692928,2957694975,NO
2957694976,2957697023,CZ
@@ -92797,7 +44594,8 @@
2959151104,2959155199,PL
2959155200,2959159295,RU
2959159296,2959161343,PL
-2959161344,2959167487,UA
+2959161344,2959163391,UA
+2959163392,2959167487,GB
2959167488,2959171583,PL
2959171584,2959175679,RU
2959175680,2959179775,UA
@@ -92805,7 +44603,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
@@ -92839,8 +44637,7 @@
2959394816,2959398911,ES
2959398912,2959400959,RU
2959400960,2959405055,ES
-2959405056,2959409151,RU
-2959409152,2959413247,UA
+2959405056,2959413247,RU
2959413248,2959417343,ES
2959417344,2959423487,IR
2959423488,2959427583,RU
@@ -92970,16 +44767,9 @@
2960080896,2960084991,RU
2960084992,2960089087,UA
2960089088,2960091135,RU
-2960091136,2960093147,PT
-2960093148,2960093148,GB
-2960093149,2960093149,PT
-2960093150,2960093150,NL
-2960093151,2960093151,FR
-2960093152,2960093152,DE
-2960093153,2960093153,ES
-2960093154,2960093183,PT
+2960091136,2960093183,PT
2960093184,2960105471,PL
-2960105472,2960109567,RO
+2960105472,2960107519,RO
2960109568,2960113663,UA
2960113664,2960117759,NO
2960117760,2960119807,RU
@@ -92997,7 +44787,8 @@
2960162816,2960171007,CZ
2960171008,2960175103,RU
2960175104,2960179199,SK
-2960179200,2960211967,RU
+2960179200,2960205823,RU
+2960207872,2960211967,RU
2960220160,2960224255,RO
2960224256,2960228351,RU
2960228352,2960232447,TJ
@@ -93005,9 +44796,7 @@
2960240640,2960244735,RO
2960244736,2960248831,PL
2960248832,2960265215,UA
-2960265216,2960269311,RU
-2960269312,2960273407,UA
-2960273408,2960275455,RU
+2960265216,2960275455,RU
2960275456,2960277503,RO
2960277504,2960285695,RU
2960285696,2960289791,RO
@@ -93048,7 +44837,6 @@
2960486400,2960498687,RU
2960498688,2960506879,UA
2960506880,2960531455,RU
-2960531456,2960533503,RO
2960533504,2960537599,UA
2960537600,2960539647,RO
2960539648,2960543743,RU
@@ -93059,13 +44847,13 @@
2960560128,2960562175,UA
2960562176,2960564223,BY
2960574464,2960576511,RO
-2960576512,2960580607,CZ
-2960580608,2960588799,RU
+2960576512,2960588799,RU
2960588800,2960592895,UA
2960592896,2960594943,RU
2960594944,2960596991,UA
2960596992,2960605183,PL
-2960605184,2960629759,UA
+2960605184,2960621567,UA
+2960621568,2960629759,CZ
2960629760,2960646143,RU
2960646144,2960648191,KZ
2960648192,2960650239,UA
@@ -93119,7 +44907,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
@@ -93134,7 +44922,7 @@
2960907776,2960908031,GB
2960908032,2960908287,PL
2960908288,2960916479,KG
-2960916480,2960932863,UA
+2960916480,2960924671,UA
2960932864,2960933887,IR
2960933888,2960934399,GB
2960934400,2960934655,LI
@@ -93172,7 +44960,6 @@
2960982016,2960990207,RO
2960990208,2960998399,UA
2960998400,2961039359,RU
-2961039360,2961047551,UA
2961047552,2961057023,RU
2961057024,2961057279,IE
2961057280,2961057535,GR
@@ -93185,9 +44972,7 @@
2961088512,2961088767,SE
2961088768,2961089535,UA
2961089536,2961090559,KG
-2961090560,2961091839,RO
-2961091840,2961092095,SE
-2961092096,2961113087,RO
+2961090560,2961113087,RO
2961113088,2961178623,CH
2961178624,2965372927,FR
2965372928,2965766143,RU
@@ -93213,11 +44998,10 @@
2967339008,2967343103,BG
2967343104,2967345151,RU
2967345152,2967347199,ES
-2967347200,2967347455,HR
-2967347456,2967347460,GB
-2967347461,2967351295,HR
+2967347200,2967351295,HR
2967351296,2967355391,FR
-2967355392,2967371775,RO
+2967355392,2967363583,RO
+2967363584,2967371775,SE
2967371776,2967388159,KZ
2967388160,2967392255,RU
2967392256,2967394303,FR
@@ -93240,11 +45024,8 @@
2967707648,2967709695,PL
2967709696,2967711743,IT
2967711744,2967715839,RU
-2967715840,2967718721,GB
-2967718722,2967718722,GB
-2967718723,2967724031,GB
+2967715840,2967724031,GB
2967724032,2967728127,CY
-2967728128,2967730175,GB
2967730176,2967732223,CZ
2967732224,2967994367,IL
2967994368,2968584191,TR
@@ -93254,11 +45035,8 @@
2968604672,2968608767,IQ
2968608768,2968610815,RU
2968610816,2968612863,UA
-2968612864,2968613375,IL
-2968613376,2968613630,NL
-2968613631,2968613631,IL
-2968613632,2968614910,US
-2968614911,2968614911,IL
+2968612864,2968614143,IL
+2968614144,2968614911,US
2968614912,2968616959,FR
2968616960,2968625151,UA
2968625152,2968629247,DE
@@ -93267,39 +45045,24 @@
2968633344,2968643583,RU
2968643584,2968645631,NO
2968645632,2968647679,PL
-2968647680,2968647727,FR
-2968647728,2968647743,GB
-2968647744,2968647823,FR
-2968647824,2968647935,GB
-2968647936,2968647983,FR
-2968647984,2968647999,GB
-2968648000,2968648079,FR
-2968648080,2968648191,GB
-2968648192,2968648223,FR
+2968647680,2968648223,FR
2968648224,2968648255,CH
2968648256,2968648287,GB
2968648288,2968648319,BE
-2968648320,2968648383,FR
-2968648384,2968648447,GB
-2968648448,2968648479,FR
+2968648320,2968648479,FR
2968648480,2968648511,CH
2968648512,2968648543,GB
2968648544,2968648575,BE
-2968648576,2968648639,FR
-2968648640,2968648703,GB
-2968648704,2968648751,FR
-2968648752,2968648831,GB
-2968648832,2968648895,FR
-2968648896,2968648959,GB
-2968648960,2968649007,FR
-2968649008,2968649087,GB
-2968649088,2968649151,FR
-2968649152,2968649719,GB
-2968649720,2968649727,FR
+2968648576,2968649727,FR
2968649728,2969042943,IT
2969042944,2969567231,GB
2969567232,2984247295,BR
-2984247296,2984771583,MX
+2984247296,2984935423,MX
+2984935424,2984951807,BR
+2984968192,2985033727,BR
+2985033728,2985951231,MX
+2985951232,2986082303,PY
+2986082304,2986344447,CO
2986344448,2987393023,DE
2987393024,2987397119,IM
2987397120,2987401215,LV
@@ -93309,9 +45072,7 @@
2987413504,2987417599,UA
2987417600,2987425791,PL
2987425792,2987429887,BG
-2987429888,2987433215,RU
-2987433216,2987433471,KZ
-2987433472,2987433983,RU
+2987429888,2987433983,RU
2987433984,2987438079,FR
2987438080,2987442175,FI
2987442176,2987446271,IE
@@ -93322,7 +45083,7 @@
2987462656,2987466751,RS
2987466752,2987470847,GB
2987470848,2987474431,IQ
-2987474432,2987474943,US
+2987474432,2987474943,DE
2987474944,2987479039,GB
2987479040,2987487231,CZ
2987487232,2987491327,HR
@@ -93330,71 +45091,36 @@
2987495424,2987499519,NO
2987499520,2987500199,MD
2987500200,2987500207,AQ
-2987500208,2987500511,MD
-2987500512,2987500519,US
-2987500520,2987500767,MD
-2987500768,2987500799,US
-2987500800,2987502735,MD
-2987502736,2987502743,DE
-2987502744,2987503615,MD
+2987500208,2987503615,MD
2987503616,2987511807,RU
2987511808,2987515903,JO
-2987515904,2987519487,A2
-2987519488,2987519743,KE
-2987519744,2987519999,A2
+2987515904,2987518207,DE
+2987518208,2987519487,US
+2987519488,2987519999,DE
2987520000,2987524095,GB
2987524096,2987528191,RU
2987528192,2987529215,US
-2987529216,2987532287,NL
+2987529216,2987530751,NL
+2987530752,2987531775,US
+2987531776,2987532287,NL
2987532288,2987536383,MD
2987536384,2987540479,FR
2987540480,2987544575,SK
2987544576,2987548671,NL
2987548672,2987552767,RU
2987552768,2987556863,GB
-2987556864,2987557247,NL
-2987557248,2987557279,BE
-2987557280,2987557312,NL
-2987557313,2987557375,BE
-2987557376,2987558431,NL
-2987558432,2987558463,BE
-2987558464,2987559936,NL
-2987559937,2987559951,BE
-2987559952,2987560959,NL
-2987560960,2987560967,CH
-2987560968,2987562495,DE
-2987562496,2987562751,SY
-2987562752,2987563263,DE
-2987563264,2987563519,MD
-2987563520,2987565055,DE
+2987556864,2987560959,NL
+2987560960,2987565055,DE
2987565056,2987569151,AT
2987569152,2987573247,FR
2987573248,2987577343,TR
2987577344,2987585535,RU
-2987585536,2987585791,DE
-2987585792,2987585799,PA
-2987585800,2987585807,CZ
-2987585808,2987585815,ES
-2987585816,2987585823,IT
-2987585824,2987585831,FR
-2987585832,2987585839,US
-2987585840,2987585847,DK
-2987585848,2987585855,SE
-2987585856,2987585863,RU
-2987585864,2987585871,GB
-2987585872,2987585879,MX
-2987585880,2987585887,BR
-2987585888,2987585895,PL
-2987585896,2987587135,DE
-2987587136,2987587143,CN
-2987587144,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
@@ -93404,10 +45130,8 @@
2987638784,2987642879,FO
2987642880,2987651071,DE
2987651072,2987655167,RU
-2987655168,2987658367,DE
-2987658368,2987658383,AT
-2987658384,2987659263,DE
-2987659264,2987661311,BA
+2987655168,2987659263,DE
+2987659264,2987661311,SI
2987661312,2987663359,GB
2987663360,2987665407,IT
2987665408,2987667455,RU
@@ -93461,18 +45185,13 @@
2987769856,2987771903,FI
2987771904,2987773951,IT
2987773952,2987775999,FR
-2987776000,2987776663,NL
-2987776664,2987776671,BE
-2987776672,2987778047,NL
+2987776000,2987778047,NL
2987778048,2987780095,CH
2987780096,2987782143,GB
2987782144,2987784191,EE
2987784192,2987786239,DK
2987786240,2987788287,FR
-2987788288,2987788799,GB
-2987788800,2987789055,US
-2987789056,2987789311,GB
-2987789312,2987790335,TR
+2987788288,2987790335,TR
2987790336,2987792383,GB
2987792384,2987794431,CH
2987794432,2987796479,IQ
@@ -93485,8 +45204,8 @@
2987810816,2987812863,NO
2987812864,2987814911,CH
2987814912,2987816959,CZ
-2987816960,2987817792,NL
-2987817793,2987819007,GB
+2987816960,2987817983,NL
+2987817984,2987819007,GB
2987819008,2987821055,FR
2987821056,2987823103,GB
2987823104,2987827199,FR
@@ -93526,9 +45245,7 @@
2987894784,2987896831,CH
2987896832,2987898879,DK
2987898880,2987900927,NL
-2987900928,2987901439,PL
-2987901440,2987901695,GB
-2987901696,2987902975,PL
+2987900928,2987902975,PL
2987902976,2987905023,IT
2987905024,2987907071,ES
2987907072,2987909119,CZ
@@ -93537,4868 +45254,203 @@
2987913216,2987915263,DK
2987915264,2987917311,IT
2987917312,2988179455,DE
-2988179456,2988441599,SE
-2988441600,2988441603,CH
-2988441604,2988441607,GB
-2988441608,2988441615,CH
-2988441616,2988441647,FR
-2988441648,2988441663,DE
-2988441664,2988441695,IT
-2988441696,2988441791,FR
-2988441792,2988441807,PL
-2988441808,2988441815,FR
-2988441816,2988441819,PT
-2988441820,2988441839,FR
-2988441840,2988441843,IE
-2988441844,2988441855,FR
-2988441856,2988441887,IT
-2988441888,2988441895,FR
-2988441896,2988441899,PL
-2988441900,2988441903,ES
-2988441904,2988441911,IT
-2988441912,2988441915,FR
-2988441916,2988441919,ES
-2988441920,2988441923,GB
-2988441924,2988441931,PL
-2988441932,2988441935,BE
-2988441936,2988441939,FR
-2988441940,2988441943,ES
-2988441944,2988441947,PL
-2988441948,2988441951,FR
-2988441952,2988441967,PL
-2988441968,2988441971,NL
-2988441972,2988441975,CH
-2988441976,2988441979,DE
-2988441980,2988441983,IT
-2988441984,2988441991,GB
-2988441992,2988441995,ES
-2988441996,2988441999,FI
-2988442000,2988442003,GB
-2988442004,2988442067,FR
-2988442068,2988442071,GB
-2988442072,2988442079,FR
-2988442080,2988442083,GB
-2988442084,2988442087,DE
-2988442088,2988442095,FR
-2988442096,2988442099,IT
-2988442100,2988442399,FR
-2988442400,2988442431,NL
-2988442432,2988442439,CZ
-2988442440,2988442447,ES
-2988442448,2988442463,GB
-2988442464,2988442495,FR
-2988442496,2988442503,PL
-2988442504,2988442507,FR
-2988442508,2988442511,NL
-2988442512,2988442519,ES
-2988442520,2988442527,DE
-2988442528,2988442559,FR
-2988442560,2988442583,PL
-2988442584,2988442587,FR
-2988442588,2988442591,ES
-2988442592,2988442607,PL
-2988442608,2988442623,ES
-2988442624,2988442639,PL
-2988442640,2988442647,PT
-2988442648,2988442651,DE
-2988442652,2988442655,GB
-2988442656,2988442671,PL
-2988442672,2988442675,GB
-2988442676,2988442687,FR
-2988442688,2988442695,PL
-2988442696,2988442703,PT
-2988442704,2988442751,FR
-2988442752,2988442847,PT
-2988442848,2988442855,PL
-2988442856,2988442863,FR
-2988442864,2988442871,BE
-2988442872,2988442879,PL
-2988442880,2988442895,FR
-2988442896,2988442899,PL
-2988442900,2988442903,FR
-2988442904,2988442907,IT
-2988442908,2988442911,FR
-2988442912,2988442915,NL
-2988442916,2988442919,IT
-2988442920,2988442923,FR
-2988442924,2988442927,IE
-2988442928,2988442975,FR
-2988442976,2988442991,PL
-2988442992,2988442995,GB
-2988442996,2988442999,IE
-2988443000,2988443007,GB
-2988443008,2988443023,PT
-2988443024,2988443027,CZ
-2988443028,2988443031,BE
-2988443032,2988443035,GB
-2988443036,2988443039,IT
-2988443040,2988443055,PL
-2988443056,2988443071,DE
-2988443072,2988443087,ES
-2988443088,2988443111,PL
-2988443112,2988443119,ES
-2988443120,2988443135,PL
-2988443136,2988443391,GB
-2988443392,2988443407,DE
-2988443408,2988443439,FR
-2988443440,2988443443,CZ
-2988443444,2988443447,DE
-2988443448,2988443487,FR
-2988443488,2988443519,GB
-2988443520,2988443539,FR
-2988443540,2988443547,ES
-2988443548,2988443551,IT
-2988443552,2988443555,CH
-2988443556,2988443559,PL
-2988443560,2988443563,GB
-2988443564,2988443567,PL
-2988443568,2988443647,FR
-2988443648,2988443651,NL
-2988443652,2988443655,FR
-2988443656,2988443659,DE
-2988443660,2988443667,FR
-2988443668,2988443671,IT
-2988443672,2988443675,ES
-2988443676,2988443679,FR
-2988443680,2988443687,BE
-2988443688,2988443695,ES
-2988443696,2988443703,PT
-2988443704,2988443711,FR
-2988443712,2988443719,PL
-2988443720,2988443727,CZ
-2988443728,2988443735,IT
-2988443736,2988443739,FR
-2988443740,2988443743,GB
-2988443744,2988443787,FR
-2988443788,2988443791,IE
-2988443792,2988443831,FR
-2988443832,2988443839,NL
-2988443840,2988443855,FR
-2988443856,2988443859,IT
-2988443860,2988443871,PL
-2988443872,2988443875,GB
-2988443876,2988443879,DE
-2988443880,2988443887,FR
-2988443888,2988443891,PL
-2988443892,2988443895,ES
-2988443896,2988443899,FI
-2988443900,2988443903,FR
-2988443904,2988443919,BE
-2988443920,2988443923,FR
-2988443924,2988443927,PL
-2988443928,2988443935,FR
-2988443936,2988443967,IT
-2988443968,2988444031,FR
-2988444032,2988444095,CZ
-2988444096,2988444159,DE
-2988444160,2988444175,FR
-2988444176,2988444191,PT
-2988444192,2988444199,FR
-2988444200,2988444203,DE
-2988444204,2988444207,NL
-2988444208,2988444208,IT
+2988179456,2988411647,SE
+2988411648,2988411775,DE
+2988411776,2988441599,SE
+2988441600,2988442075,FR
+2988442076,2988442079,ES
+2988442080,2988442847,FR
+2988442848,2988442863,IT
+2988442864,2988444208,FR
2988444209,2988444209,FI
-2988444210,2988444211,IT
-2988444212,2988444215,PL
-2988444216,2988444219,BE
-2988444220,2988444223,FR
-2988444224,2988444287,PT
-2988444288,2988444415,GB
-2988444416,2988444671,IE
+2988444210,2988444671,FR
2988444672,2988444679,ES
-2988444680,2988444687,FR
-2988444688,2988444695,LT
-2988444696,2988444703,FR
-2988444704,2988444719,GB
-2988444720,2988444735,ES
-2988444736,2988444739,GB
-2988444740,2988444743,FR
-2988444744,2988444755,BE
-2988444756,2988444759,PL
-2988444760,2988444767,IE
-2988444768,2988444771,BE
-2988444772,2988444775,GB
-2988444776,2988444783,CZ
-2988444784,2988444791,FI
-2988444792,2988444795,DE
-2988444796,2988444799,FR
-2988444800,2988444927,ES
-2988444928,2988444931,PL
-2988444932,2988444943,DE
-2988444944,2988444967,PL
-2988444968,2988444975,IT
-2988444976,2988444991,IE
-2988444992,2988444999,FR
-2988445000,2988445007,PL
-2988445008,2988445023,FR
-2988445024,2988445027,PL
-2988445028,2988445035,FR
-2988445036,2988445039,PL
-2988445040,2988445119,FR
-2988445120,2988445127,ES
-2988445128,2988445139,FR
-2988445140,2988445143,DE
-2988445144,2988445151,IT
-2988445152,2988445167,FR
-2988445168,2988445183,PL
-2988445184,2988445215,FR
-2988445216,2988445223,DE
-2988445224,2988445231,ES
-2988445232,2988445235,FR
-2988445236,2988445239,PL
-2988445240,2988445343,FR
-2988445344,2988445375,PT
-2988445376,2988445391,GB
-2988445392,2988445395,IT
-2988445396,2988445399,FR
-2988445400,2988445407,PT
-2988445408,2988445439,FR
-2988445440,2988445951,DE
-2988445952,2988446207,IE
-2988446208,2988446271,PL
-2988446272,2988446275,IT
-2988446276,2988446279,FR
-2988446280,2988446287,BE
-2988446288,2988446291,FR
-2988446292,2988446295,ES
-2988446296,2988446299,GB
-2988446300,2988446307,FR
-2988446308,2988446311,PL
-2988446312,2988446319,FR
-2988446320,2988446323,PL
-2988446324,2988446327,FR
-2988446328,2988446399,PL
-2988446400,2988446463,FR
-2988446464,2988446719,PL
-2988446720,2988446975,DE
-2988446976,2988447103,IT
-2988447104,2988447167,GB
-2988447168,2988447231,FR
-2988447232,2988447359,DE
-2988447360,2988447423,PL
-2988447424,2988447495,FR
-2988447496,2988447499,GB
-2988447500,2988447503,NL
-2988447504,2988447507,FR
-2988447508,2988447511,NL
-2988447512,2988447515,PL
-2988447516,2988447519,NL
-2988447520,2988447543,FR
-2988447544,2988447547,DE
-2988447548,2988447551,NL
-2988447552,2988447583,FR
-2988447584,2988447599,NL
-2988447600,2988447615,FR
-2988447616,2988447747,DE
-2988447748,2988447759,ES
-2988447760,2988447775,FR
-2988447776,2988447791,PT
-2988447792,2988447871,FR
-2988447872,2988447903,PL
-2988447904,2988447919,PT
-2988447920,2988447923,PL
-2988447924,2988447927,IT
-2988447928,2988447935,PL
-2988447936,2988447943,DE
-2988447944,2988447947,GB
-2988447948,2988447959,FR
-2988447960,2988447967,IT
-2988447968,2988447999,BE
-2988448000,2988448127,DE
-2988448128,2988448255,ES
-2988448256,2988448287,FR
-2988448288,2988448319,GB
-2988448320,2988448511,DE
-2988448512,2988448515,GB
-2988448516,2988448519,FR
-2988448520,2988448527,PL
-2988448528,2988448543,NL
-2988448544,2988448547,GB
-2988448548,2988448551,FR
-2988448552,2988448559,PL
-2988448560,2988448563,DE
-2988448564,2988448567,ES
-2988448568,2988448607,FR
-2988448608,2988448639,ES
-2988448640,2988448671,NL
-2988448672,2988448691,IT
-2988448692,2988448695,DE
-2988448696,2988448703,FR
-2988448704,2988448767,PT
-2988448768,2988448783,FR
-2988448784,2988448815,PL
-2988448816,2988448895,FR
-2988448896,2988448903,IE
-2988448904,2988448907,ES
-2988448908,2988449055,FR
-2988449056,2988449071,IT
-2988449072,2988449087,FR
-2988449088,2988449103,PL
-2988449104,2988449123,FR
-2988449124,2988449127,DE
-2988449128,2988449135,ES
-2988449136,2988449151,FR
-2988449152,2988449167,PL
-2988449168,2988449175,GB
-2988449176,2988449191,FR
-2988449192,2988449199,CZ
-2988449200,2988449203,FR
-2988449204,2988449207,PL
+2988444680,2988449207,FR
2988449208,2988449215,ES
-2988449216,2988449247,FR
-2988449248,2988449535,GB
-2988449536,2988449631,FR
-2988449632,2988449639,ES
-2988449640,2988449643,BE
-2988449644,2988449647,CZ
-2988449648,2988449747,FR
-2988449748,2988449751,FI
-2988449752,2988449759,BE
-2988449760,2988451839,FR
+2988449216,2988451839,FR
2988451840,2988453887,BE
2988453888,2988457983,GB
-2988457984,2988457987,FR
-2988457988,2988457991,PL
-2988457992,2988457995,CH
-2988457996,2988457999,FR
-2988458000,2988458015,DE
-2988458016,2988458031,FR
-2988458032,2988458047,IT
-2988458048,2988458055,PL
-2988458056,2988458063,FR
-2988458064,2988458067,ES
-2988458068,2988458075,FR
-2988458076,2988458079,PL
-2988458080,2988458247,FR
-2988458248,2988458251,PL
-2988458252,2988458271,FR
-2988458272,2988458275,GB
-2988458276,2988458279,FI
-2988458280,2988458283,ES
-2988458284,2988458287,FR
-2988458288,2988458291,BE
-2988458292,2988458295,DE
-2988458296,2988458299,GB
-2988458300,2988458303,ES
-2988458304,2988458319,FR
-2988458320,2988458323,CZ
-2988458324,2988458331,FR
-2988458332,2988458335,GB
-2988458336,2988458399,FR
-2988458400,2988458431,NL
-2988458432,2988458495,FR
-2988458496,2988458751,GB
-2988458752,2988458755,PL
-2988458756,2988458759,FR
-2988458760,2988458763,NL
-2988458764,2988458767,DE
-2988458768,2988459007,FR
-2988459008,2988459015,PL
-2988459016,2988459019,FR
-2988459020,2988459023,GB
-2988459024,2988459039,IE
-2988459040,2988459047,FR
-2988459048,2988459051,PL
-2988459052,2988459055,ES
-2988459056,2988459071,CH
-2988459072,2988459079,GB
-2988459080,2988459083,DE
-2988459084,2988459087,FR
-2988459088,2988459103,GB
-2988459104,2988459107,FR
-2988459108,2988459111,PL
-2988459112,2988459119,FR
+2988457984,2988459119,FR
2988459120,2988459127,IT
-2988459128,2988459151,PL
-2988459152,2988459167,FR
-2988459168,2988459171,IE
-2988459172,2988459175,FR
-2988459176,2988459179,PL
-2988459180,2988459183,ES
-2988459184,2988459199,PL
-2988459200,2988459223,FR
-2988459224,2988459231,DE
-2988459232,2988459235,GB
-2988459236,2988459243,FR
-2988459244,2988459247,ES
-2988459248,2988459251,LT
-2988459252,2988459259,FR
-2988459260,2988459263,ES
-2988459264,2988459391,BE
-2988459392,2988459423,GB
-2988459424,2988459431,PT
-2988459432,2988459439,FR
-2988459440,2988459455,NL
-2988459456,2988459535,FR
-2988459536,2988459543,PL
-2988459544,2988459547,ES
-2988459548,2988459551,PL
-2988459552,2988459567,FR
-2988459568,2988459583,GB
-2988459584,2988459599,FR
-2988459600,2988459603,GB
-2988459604,2988459615,FR
-2988459616,2988459619,CZ
-2988459620,2988459623,FR
-2988459624,2988459627,NL
-2988459628,2988459631,PL
-2988459632,2988459639,ES
-2988459640,2988459643,IT
-2988459644,2988459647,CH
-2988459648,2988459679,GB
+2988459128,2988459135,PL
+2988459136,2988459535,FR
+2988459536,2988459539,ES
+2988459540,2988459679,FR
2988459680,2988459683,ES
-2988459684,2988459687,DE
-2988459688,2988459691,IT
-2988459692,2988459695,ES
-2988459696,2988459711,FR
-2988459712,2988459715,ES
-2988459716,2988459723,FR
-2988459724,2988459727,DE
-2988459728,2988459731,FR
-2988459732,2988459735,ES
-2988459736,2988459743,PL
-2988459744,2988459747,ES
-2988459748,2988459751,PL
-2988459752,2988459759,FR
-2988459760,2988459767,GB
-2988459768,2988459771,NL
-2988459772,2988459775,GB
-2988459776,2988459839,FR
-2988459840,2988459855,IT
-2988459856,2988459859,GB
-2988459860,2988459863,FR
-2988459864,2988459871,ES
-2988459872,2988459895,PL
-2988459896,2988459967,FR
-2988459968,2988459999,ES
-2988460000,2988460015,NL
-2988460016,2988460023,PL
-2988460024,2988460031,FR
-2988460032,2988460063,DE
-2988460064,2988460095,FR
-2988460096,2988460107,PL
-2988460108,2988460111,DE
-2988460112,2988460119,FR
-2988460120,2988460123,IT
-2988460124,2988460127,FR
-2988460128,2988460131,PL
-2988460132,2988460135,CZ
-2988460136,2988460143,FR
-2988460144,2988460147,GB
-2988460148,2988460159,ES
-2988460160,2988460191,PL
-2988460192,2988460195,FR
-2988460196,2988460199,NL
-2988460200,2988460207,LT
-2988460208,2988460223,PL
-2988460224,2988460239,FR
-2988460240,2988460243,BE
-2988460244,2988460247,PL
-2988460248,2988460255,FR
-2988460256,2988460271,ES
-2988460272,2988460275,FR
-2988460276,2988460279,NL
-2988460280,2988460287,PL
-2988460288,2988460323,FR
-2988460324,2988460327,GB
-2988460328,2988460335,PL
-2988460336,2988460339,FR
-2988460340,2988460351,GB
-2988460352,2988460367,FR
-2988460368,2988460371,PL
-2988460372,2988460375,FR
-2988460376,2988460383,DE
-2988460384,2988460415,PT
-2988460416,2988460543,FR
-2988460544,2988460547,GB
-2988460548,2988460551,DE
-2988460552,2988460559,PL
-2988460560,2988460575,FR
+2988459684,2988459687,FR
+2988459688,2988459691,PL
+2988459692,2988459863,FR
+2988459864,2988459867,ES
+2988459868,2988460575,FR
2988460576,2988460591,PT
-2988460592,2988460615,GB
-2988460616,2988460623,PT
-2988460624,2988460639,FR
-2988460640,2988460647,ES
-2988460648,2988460655,FR
-2988460656,2988460663,GB
-2988460664,2988460679,FR
-2988460680,2988460683,DE
-2988460684,2988460755,FR
-2988460756,2988460759,PT
-2988460760,2988460767,FR
-2988460768,2988460799,PL
-2988460800,2988460863,DE
-2988460864,2988460895,FR
-2988460896,2988460927,PT
-2988460928,2988460931,FR
-2988460932,2988460943,PL
-2988460944,2988460959,ES
-2988460960,2988460991,FR
-2988460992,2988460999,NL
-2988461000,2988461003,FR
-2988461004,2988461007,NL
-2988461008,2988461011,FR
-2988461012,2988461015,PL
-2988461016,2988461023,DE
-2988461024,2988461027,NL
-2988461028,2988461031,FR
-2988461032,2988461035,ES
-2988461036,2988461055,FR
-2988461056,2988461087,PL
-2988461088,2988461103,DE
-2988461104,2988461135,FR
-2988461136,2988461151,DE
-2988461152,2988461183,FR
-2988461184,2988461215,PT
-2988461216,2988461255,FR
-2988461256,2988461259,ES
-2988461260,2988461263,PT
-2988461264,2988461279,ES
-2988461280,2988461295,IT
-2988461296,2988461299,PL
-2988461300,2988461307,FR
-2988461308,2988461311,PL
-2988461312,2988461375,PT
-2988461376,2988461391,GB
-2988461392,2988461399,DE
-2988461400,2988461407,PT
-2988461408,2988461411,FR
-2988461412,2988461415,PL
-2988461416,2988461419,IE
-2988461420,2988461423,FR
-2988461424,2988461431,IT
-2988461432,2988461439,PT
-2988461440,2988461471,FI
-2988461472,2988461479,PT
-2988461480,2988461491,FR
-2988461492,2988461495,PL
-2988461496,2988461499,ES
-2988461500,2988461503,PT
-2988461504,2988461519,PL
-2988461520,2988461523,PT
-2988461524,2988461559,FR
-2988461560,2988461567,PT
-2988461568,2988461583,FR
-2988461584,2988461587,PL
-2988461588,2988461591,IE
-2988461592,2988461615,FR
-2988461616,2988461623,IT
-2988461624,2988461631,FR
-2988461632,2988461695,PL
-2988461696,2988461699,DE
-2988461700,2988461703,GB
+2988460592,2988460651,FR
+2988460652,2988460655,ES
+2988460656,2988461703,FR
2988461704,2988461707,NL
-2988461708,2988461711,BE
-2988461712,2988461719,FR
-2988461720,2988461723,DE
-2988461724,2988461727,FR
-2988461728,2988461731,PL
-2988461732,2988461735,CH
-2988461736,2988461743,PL
-2988461744,2988461747,ES
-2988461748,2988461751,IT
-2988461752,2988461755,FR
-2988461756,2988461759,NL
-2988461760,2988461791,PL
-2988461792,2988461799,FR
-2988461800,2988461807,ES
-2988461808,2988461811,FI
-2988461812,2988461815,FR
-2988461816,2988461819,PL
-2988461820,2988461823,IE
-2988461824,2988461851,FR
-2988461852,2988461855,PL
-2988461856,2988461859,DE
-2988461860,2988461871,FR
-2988461872,2988461879,GB
-2988461880,2988461883,ES
-2988461884,2988461887,IT
-2988461888,2988461907,FR
-2988461908,2988461911,ES
-2988461912,2988461915,IT
-2988461916,2988461919,NL
-2988461920,2988461935,FR
-2988461936,2988461951,GB
-2988461952,2988462079,PL
-2988462080,2988462083,FR
-2988462084,2988462087,PL
-2988462088,2988462091,DE
-2988462092,2988462095,PL
-2988462096,2988462119,FR
-2988462120,2988462123,PL
-2988462124,2988462127,GB
-2988462128,2988462131,ES
-2988462132,2988462143,FR
-2988462144,2988462151,PL
-2988462152,2988462155,IT
-2988462156,2988462159,NL
-2988462160,2988462175,ES
-2988462176,2988462191,PL
-2988462192,2988462199,FR
-2988462200,2988462203,PL
-2988462204,2988462303,FR
-2988462304,2988462307,DE
-2988462308,2988462311,NL
-2988462312,2988462323,PL
-2988462324,2988462327,DE
-2988462328,2988462331,GB
-2988462332,2988462463,ES
-2988462464,2988462495,GB
-2988462496,2988462527,DE
-2988462528,2988462559,NL
-2988462560,2988462587,FR
-2988462588,2988462591,DE
-2988462592,2988462599,FR
-2988462600,2988462603,IT
+2988461708,2988462603,FR
2988462604,2988462607,ES
-2988462608,2988462735,FR
-2988462736,2988462743,IT
-2988462744,2988462751,FR
-2988462752,2988462767,PL
-2988462768,2988462775,GB
-2988462776,2988462779,PL
-2988462780,2988462787,FR
-2988462788,2988462799,PL
-2988462800,2988462815,FR
-2988462816,2988462823,BE
-2988462824,2988462847,FR
-2988462848,2988463103,BE
-2988463104,2988463107,IT
-2988463108,2988463111,FR
-2988463112,2988463119,ES
-2988463120,2988463123,GB
-2988463124,2988463127,ES
-2988463128,2988463131,FR
-2988463132,2988463135,PT
-2988463136,2988463143,FR
-2988463144,2988463151,ES
-2988463152,2988463159,FR
-2988463160,2988463167,ES
-2988463168,2988463199,PL
-2988463200,2988463203,ES
-2988463204,2988463207,DE
-2988463208,2988463211,PL
-2988463212,2988463223,GB
-2988463224,2988463227,ES
-2988463228,2988463251,FR
-2988463252,2988463255,PL
-2988463256,2988463259,IE
-2988463260,2988463279,FR
-2988463280,2988463283,GB
-2988463284,2988463287,FR
-2988463288,2988463291,PL
-2988463292,2988463315,FR
-2988463316,2988463319,PL
-2988463320,2988463327,FR
-2988463328,2988463331,ES
-2988463332,2988463335,IT
-2988463336,2988463339,PT
-2988463340,2988463343,FR
-2988463344,2988463359,BE
-2988463360,2988463615,FR
-2988463616,2988463623,BE
-2988463624,2988463627,PL
-2988463628,2988463631,DE
-2988463632,2988463647,GB
-2988463648,2988463651,PL
-2988463652,2988463659,GB
-2988463660,2988463663,FR
-2988463664,2988463671,PT
-2988463672,2988463695,FR
-2988463696,2988463711,PL
-2988463712,2988463727,FR
-2988463728,2988463735,PT
-2988463736,2988463743,CZ
-2988463744,2988463747,BE
-2988463748,2988463751,GB
-2988463752,2988463791,FR
-2988463792,2988463799,GB
-2988463800,2988463831,FR
-2988463832,2988463835,DE
-2988463836,2988463839,FR
-2988463840,2988463871,PL
-2988463872,2988463907,FR
-2988463908,2988463911,GB
-2988463912,2988463915,FR
-2988463916,2988463919,PL
-2988463920,2988463935,BE
-2988463936,2988463939,FR
-2988463940,2988463943,DE
-2988463944,2988463947,FR
-2988463948,2988463951,GB
-2988463952,2988463999,FR
+2988462608,2988463915,FR
+2988463916,2988463919,ES
+2988463920,2988463999,FR
2988464000,2988464007,IE
2988464008,2988464015,LT
-2988464016,2988464019,PT
-2988464020,2988464023,IT
-2988464024,2988464027,GB
-2988464028,2988464031,PL
-2988464032,2988464059,FR
-2988464060,2988464063,CZ
-2988464064,2988464095,PL
-2988464096,2988464271,FR
-2988464272,2988464275,ES
-2988464276,2988464279,PL
-2988464280,2988464283,FR
-2988464284,2988464287,PL
-2988464288,2988464295,FR
-2988464296,2988464299,IT
-2988464300,2988464303,GB
-2988464304,2988464307,ES
-2988464308,2988464311,PL
-2988464312,2988464351,FR
-2988464352,2988464355,DE
-2988464356,2988464359,FR
-2988464360,2988464363,PL
-2988464364,2988464367,GB
-2988464368,2988464527,FR
-2988464528,2988464543,DE
-2988464544,2988464551,NL
-2988464552,2988464555,FR
-2988464556,2988464559,NL
-2988464560,2988464575,ES
-2988464576,2988464591,FR
-2988464592,2988464595,ES
-2988464596,2988464603,PL
-2988464604,2988464607,IT
-2988464608,2988464611,DE
-2988464612,2988464615,PL
-2988464616,2988464619,IE
-2988464620,2988464623,ES
-2988464624,2988464627,FR
-2988464628,2988464631,IT
-2988464632,2988464779,FR
-2988464780,2988464783,PL
-2988464784,2988464787,IT
-2988464788,2988464791,ES
-2988464792,2988464799,FR
-2988464800,2988464815,DE
-2988464816,2988464819,IE
-2988464820,2988464823,GB
-2988464824,2988464827,CZ
-2988464828,2988464895,FR
-2988464896,2988464911,PL
-2988464912,2988464915,NL
-2988464916,2988464919,DE
-2988464920,2988464923,FI
-2988464924,2988464927,FR
-2988464928,2988464943,ES
-2988464944,2988464947,GB
-2988464948,2988464951,PL
-2988464952,2988464959,FR
-2988464960,2988464967,GB
-2988464968,2988464971,PT
-2988464972,2988464975,PL
-2988464976,2988465215,FR
+2988464016,2988464623,FR
+2988464624,2988464627,ES
+2988464628,2988465215,FR
2988465216,2988465219,ES
-2988465220,2988465227,FR
-2988465228,2988465231,IT
-2988465232,2988465235,FR
-2988465236,2988465239,ES
-2988465240,2988465279,FR
+2988465220,2988465279,FR
2988465280,2988465295,DE
-2988465296,2988465307,FR
-2988465308,2988465311,DE
-2988465312,2988465343,FR
-2988465344,2988465359,DE
-2988465360,2988465363,GB
-2988465364,2988465367,PL
-2988465368,2988465375,FR
-2988465376,2988465391,IT
-2988465392,2988465403,FR
-2988465404,2988465407,DE
-2988465408,2988465423,CH
-2988465424,2988465439,PT
-2988465440,2988465455,GB
-2988465456,2988465479,FR
-2988465480,2988465483,NL
-2988465484,2988465503,FR
-2988465504,2988465507,DE
-2988465508,2988465511,PL
-2988465512,2988465515,PT
-2988465516,2988465519,GB
-2988465520,2988465523,IT
-2988465524,2988465527,ES
-2988465528,2988465539,FR
-2988465540,2988465543,GB
-2988465544,2988465547,CZ
-2988465548,2988465551,IT
-2988465552,2988465559,ES
-2988465560,2988465563,PL
-2988465564,2988465567,IT
-2988465568,2988465571,ES
-2988465572,2988465575,PL
-2988465576,2988465583,DE
-2988465584,2988465587,PL
-2988465588,2988465591,GB
-2988465592,2988465599,FR
-2988465600,2988465615,PL
-2988465616,2988465619,FR
-2988465620,2988465623,DE
-2988465624,2988465647,FR
-2988465648,2988465655,CZ
-2988465656,2988465663,GB
-2988465664,2988466047,FR
-2988466048,2988466111,IE
-2988466112,2988466115,FR
-2988466116,2988466127,PL
-2988466128,2988466139,FR
-2988466140,2988466143,PL
-2988466144,2988466159,NL
-2988466160,2988476415,FR
+2988465296,2988465559,FR
+2988465560,2988465563,ES
+2988465564,2988476415,FR
2988476416,2988478463,IT
-2988478464,2988478487,FR
-2988478488,2988478491,NL
-2988478492,2988478495,GB
-2988478496,2988478499,IT
-2988478500,2988478503,ES
-2988478504,2988478543,FR
-2988478544,2988478559,DE
-2988478560,2988478563,FR
-2988478564,2988478567,BE
-2988478568,2988478571,PT
-2988478572,2988478575,FR
-2988478576,2988478579,PL
+2988478464,2988478579,FR
2988478580,2988478583,DE
2988478584,2988478587,FR
2988478588,2988478591,DE
-2988478592,2988478623,FR
-2988478624,2988478631,GB
-2988478632,2988478639,FR
-2988478640,2988478643,PL
-2988478644,2988478647,FR
-2988478648,2988478655,BE
-2988478656,2988478671,DE
-2988478672,2988478679,FR
-2988478680,2988478683,ES
-2988478684,2988478687,NL
-2988478688,2988478751,FR
-2988478752,2988478783,NL
-2988478784,2988478787,FR
-2988478788,2988478791,PL
-2988478792,2988478795,FR
-2988478796,2988478799,ES
-2988478800,2988478803,NL
-2988478804,2988478807,PL
-2988478808,2988478811,IT
-2988478812,2988478815,FR
-2988478816,2988478847,PL
-2988478848,2988478851,ES
-2988478852,2988478855,FR
-2988478856,2988478859,LT
-2988478860,2988478863,NL
-2988478864,2988478867,CZ
-2988478868,2988478871,FR
-2988478872,2988478879,IT
-2988478880,2988478911,IE
-2988478912,2988478919,FR
-2988478920,2988478927,GB
-2988478928,2988478947,FR
-2988478948,2988478951,GB
-2988478952,2988478955,ES
-2988478956,2988478959,DE
-2988478960,2988478975,FR
-2988478976,2988478979,DE
-2988478980,2988478983,PL
-2988478984,2988478987,DE
-2988478988,2988478991,IT
-2988478992,2988478995,DE
-2988478996,2988478999,IE
-2988479000,2988479003,GB
-2988479004,2988479007,PL
-2988479008,2988479055,FR
-2988479056,2988479071,PL
-2988479072,2988479075,BE
-2988479076,2988479079,FR
-2988479080,2988479087,DE
-2988479088,2988479103,FR
-2988479104,2988479107,IE
-2988479108,2988479119,FR
-2988479120,2988479135,PT
-2988479136,2988479139,DE
-2988479140,2988479143,NL
-2988479144,2988479147,IE
-2988479148,2988479151,NL
-2988479152,2988479155,PL
-2988479156,2988479159,ES
-2988479160,2988479163,PT
-2988479164,2988479167,ES
-2988479168,2988479247,FR
-2988479248,2988479251,PL
-2988479252,2988479255,FR
-2988479256,2988479259,PL
-2988479260,2988479303,FR
-2988479304,2988479311,ES
-2988479312,2988479315,PT
-2988479316,2988479319,IT
-2988479320,2988479323,GB
-2988479324,2988479327,IT
-2988479328,2988479363,FR
-2988479364,2988479379,PL
-2988479380,2988479383,FR
-2988479384,2988479391,PL
-2988479392,2988479407,IE
-2988479408,2988479423,IT
-2988479424,2988479439,ES
-2988479440,2988479447,FR
-2988479448,2988479451,GB
-2988479452,2988479503,FR
-2988479504,2988479511,NL
-2988479512,2988479519,PL
-2988479520,2988479535,FR
-2988479536,2988479543,PL
-2988479544,2988479551,IE
-2988479552,2988479555,DE
-2988479556,2988479559,IE
-2988479560,2988479567,GB
-2988479568,2988479583,FR
-2988479584,2988479599,ES
-2988479600,2988479603,PL
-2988479604,2988479607,GB
-2988479608,2988479743,FR
-2988479744,2988479747,ES
-2988479748,2988479751,FR
-2988479752,2988479755,NL
-2988479756,2988479783,FR
-2988479784,2988479791,ES
+2988478592,2988479791,FR
2988479792,2988479807,GB
-2988479808,2988479839,BE
-2988479840,2988479855,FR
-2988479856,2988479863,PL
-2988479864,2988479999,FR
-2988480000,2988480003,PL
-2988480004,2988480007,GB
-2988480008,2988480011,NL
-2988480012,2988480015,GB
-2988480016,2988480031,FR
-2988480032,2988480047,IE
-2988480048,2988480063,FR
-2988480064,2988480127,ES
-2988480128,2988480155,FR
-2988480156,2988480159,CH
-2988480160,2988480175,IE
-2988480176,2988480191,FR
-2988480192,2988480207,IT
-2988480208,2988480223,FR
-2988480224,2988480227,IT
-2988480228,2988480231,IE
-2988480232,2988480235,FR
-2988480236,2988480239,IT
-2988480240,2988480259,FR
-2988480260,2988480263,GB
-2988480264,2988480267,NL
-2988480268,2988480271,FR
-2988480272,2988480275,PL
-2988480276,2988480279,FR
-2988480280,2988480283,GB
-2988480284,2988480287,PL
-2988480288,2988480383,FR
-2988480384,2988480415,PL
-2988480416,2988480431,DE
-2988480432,2988480435,FR
-2988480436,2988480439,DE
-2988480440,2988480443,NL
-2988480444,2988480447,GB
-2988480448,2988480475,FR
-2988480476,2988480479,PT
-2988480480,2988480487,FR
-2988480488,2988480495,GB
-2988480496,2988480499,NL
-2988480500,2988480503,FR
-2988480504,2988480511,PL
-2988480512,2988480767,GB
-2988480768,2988480771,FR
-2988480772,2988480775,IT
-2988480776,2988480783,FR
-2988480784,2988480799,FI
-2988480800,2988480803,FR
-2988480804,2988480807,PL
-2988480808,2988480811,FR
-2988480812,2988480815,PL
-2988480816,2988480819,FR
-2988480820,2988480823,PT
-2988480824,2988480827,PL
-2988480828,2988480831,ES
-2988480832,2988480895,PL
-2988480896,2988480903,NL
-2988480904,2988480911,FR
-2988480912,2988480915,BE
-2988480916,2988480919,IT
-2988480920,2988480923,FI
-2988480924,2988480959,ES
-2988480960,2988480975,PL
-2988480976,2988480991,CH
-2988480992,2988481007,DE
-2988481008,2988481023,FI
-2988481024,2988481039,FR
-2988481040,2988481047,GB
-2988481048,2988481055,LT
-2988481056,2988481059,FR
-2988481060,2988481063,FI
-2988481064,2988481067,FR
-2988481068,2988481071,DE
-2988481072,2988481079,NL
-2988481080,2988481087,FR
-2988481088,2988481095,CH
-2988481096,2988481111,FR
-2988481112,2988481119,DE
-2988481120,2988481127,PL
-2988481128,2988481131,NL
-2988481132,2988481135,GB
-2988481136,2988481151,LT
-2988481152,2988481159,GB
-2988481160,2988481167,PL
-2988481168,2988481183,FR
-2988481184,2988481187,DE
-2988481188,2988481191,BE
-2988481192,2988481195,ES
-2988481196,2988481199,FR
-2988481200,2988481203,PL
-2988481204,2988481207,ES
-2988481208,2988481215,FR
-2988481216,2988481219,IE
-2988481220,2988481223,FR
-2988481224,2988481227,GB
-2988481228,2988481231,BE
-2988481232,2988481279,FR
-2988481280,2988481535,GB
-2988481536,2988481663,IE
-2988481664,2988481667,BE
-2988481668,2988481671,CH
-2988481672,2988481675,FR
-2988481676,2988481679,NL
-2988481680,2988481695,PL
-2988481696,2988481711,ES
-2988481712,2988481723,FR
-2988481724,2988481727,PL
-2988481728,2988481735,BE
-2988481736,2988481743,FR
-2988481744,2988481759,ES
-2988481760,2988481767,FR
-2988481768,2988481771,GB
-2988481772,2988481775,DE
-2988481776,2988481783,BE
-2988481784,2988481791,PL
-2988481792,2988481855,FR
-2988481856,2988481859,GB
-2988481860,2988481863,ES
-2988481864,2988481867,FR
-2988481868,2988481871,PT
-2988481872,2988481883,FR
-2988481884,2988481887,ES
-2988481888,2988481903,GB
-2988481904,2988481919,BE
-2988481920,2988481935,IT
-2988481936,2988481987,FR
-2988481988,2988481991,CZ
-2988481992,2988481995,FR
-2988481996,2988481999,DE
-2988482000,2988482007,ES
-2988482008,2988482015,DE
-2988482016,2988482023,IT
-2988482024,2988482031,GB
-2988482032,2988482043,FR
-2988482044,2988482047,BE
-2988482048,2988482079,PL
-2988482080,2988482095,BE
-2988482096,2988482099,GB
-2988482100,2988482103,FR
-2988482104,2988482111,GB
+2988479808,2988482111,FR
2988482112,2988482143,DE
-2988482144,2988482159,CH
-2988482160,2988482163,ES
-2988482164,2988482167,PL
-2988482168,2988482175,ES
-2988482176,2988482191,CH
-2988482192,2988482207,GB
-2988482208,2988482223,FR
-2988482224,2988482231,ES
-2988482232,2988482235,FR
-2988482236,2988482239,GB
-2988482240,2988482255,ES
-2988482256,2988482291,FR
-2988482292,2988482295,CH
-2988482296,2988482307,FR
-2988482308,2988482311,PT
-2988482312,2988482315,GB
-2988482316,2988482335,IT
-2988482336,2988482351,ES
-2988482352,2988482367,FR
-2988482368,2988482399,ES
-2988482400,2988482411,FR
-2988482412,2988482415,PT
-2988482416,2988482431,ES
-2988482432,2988482447,FR
-2988482448,2988482455,CZ
-2988482456,2988482479,FR
-2988482480,2988482487,PL
-2988482488,2988482511,FR
-2988482512,2988482515,DE
-2988482516,2988482527,FR
-2988482528,2988482531,DE
-2988482532,2988482543,FR
-2988482544,2988482551,GB
-2988482552,2988482559,CH
-2988482560,2988482567,ES
-2988482568,2988482575,FR
+2988482144,2988482319,FR
+2988482320,2988482335,IT
+2988482336,2988482575,FR
2988482576,2988482579,CZ
-2988482580,2988482583,PL
-2988482584,2988482591,ES
-2988482592,2988482607,PL
-2988482608,2988482631,FR
-2988482632,2988482639,PL
-2988482640,2988482687,FR
-2988482688,2988482695,ES
-2988482696,2988482699,NL
-2988482700,2988482763,FR
-2988482764,2988482767,GB
-2988482768,2988482783,PL
-2988482784,2988482799,FR
-2988482800,2988482807,ES
-2988482808,2988482811,PL
-2988482812,2988482815,FR
-2988482816,2988482819,DE
-2988482820,2988482823,FR
-2988482824,2988482831,PL
-2988482832,2988482835,IE
-2988482836,2988482839,GB
-2988482840,2988482843,FR
-2988482844,2988482847,NL
-2988482848,2988482863,DE
-2988482864,2988482871,ES
-2988482872,2988482875,PT
-2988482876,2988482879,CZ
-2988482880,2988482887,PL
-2988482888,2988482891,BE
-2988482892,2988482895,PL
-2988482896,2988482927,GB
-2988482928,2988482931,FR
-2988482932,2988482935,GB
-2988482936,2988482939,PL
-2988482940,2988482943,LT
-2988482944,2988482959,PL
-2988482960,2988482975,CZ
-2988482976,2988482979,PL
-2988482980,2988482983,ES
-2988482984,2988482987,DE
-2988482988,2988482991,NL
-2988482992,2988483031,FR
-2988483032,2988483035,DE
-2988483036,2988483039,LT
-2988483040,2988483079,FR
-2988483080,2988483087,PL
-2988483088,2988483099,FR
-2988483100,2988483103,PL
-2988483104,2988483107,IE
-2988483108,2988483111,FR
-2988483112,2988483115,ES
-2988483116,2988483119,PL
-2988483120,2988483127,ES
-2988483128,2988483135,PL
-2988483136,2988483151,FR
-2988483152,2988483155,PL
-2988483156,2988483159,NL
-2988483160,2988483167,ES
-2988483168,2988483199,GB
-2988483200,2988483231,FR
-2988483232,2988483235,IE
-2988483236,2988483263,PL
-2988483264,2988483267,FR
-2988483268,2988483271,NL
-2988483272,2988483279,DE
-2988483280,2988483283,ES
-2988483284,2988483295,DE
-2988483296,2988483299,FR
-2988483300,2988483303,NL
-2988483304,2988483311,FR
-2988483312,2988483315,GB
-2988483316,2988483319,NL
-2988483320,2988483327,FR
-2988483328,2988483359,ES
-2988483360,2988483367,BE
-2988483368,2988483371,PL
-2988483372,2988483375,PT
-2988483376,2988483379,GB
-2988483380,2988483383,PL
-2988483384,2988483427,FR
-2988483428,2988483431,GB
-2988483432,2988483435,IT
-2988483436,2988483447,FR
-2988483448,2988483455,DE
-2988483456,2988483519,BE
-2988483520,2988483583,CH
-2988483584,2988483587,PL
-2988483588,2988483591,FR
-2988483592,2988483595,ES
-2988483596,2988483599,FI
-2988483600,2988483603,GB
-2988483604,2988483607,PT
-2988483608,2988483615,NL
-2988483616,2988483619,GB
-2988483620,2988483623,PL
-2988483624,2988483631,IE
-2988483632,2988483639,FR
-2988483640,2988483647,GB
-2988483648,2988483651,CH
-2988483652,2988483655,FR
-2988483656,2988483667,IT
-2988483668,2988483671,PT
-2988483672,2988483675,GB
-2988483676,2988483679,FR
-2988483680,2988483695,PL
-2988483696,2988483711,FR
-2988483712,2988483727,PL
-2988483728,2988483735,FR
-2988483736,2988483739,DE
-2988483740,2988483743,PL
-2988483744,2988483759,DE
-2988483760,2988483767,GB
-2988483768,2988483771,FR
-2988483772,2988483775,DE
-2988483776,2988483871,PL
-2988483872,2988483879,DE
-2988483880,2988483887,ES
-2988483888,2988483895,GB
-2988483896,2988483903,DE
-2988483904,2988483935,PT
-2988483936,2988483951,ES
-2988483952,2988483963,IT
-2988483964,2988483967,FR
-2988483968,2988483983,IE
-2988483984,2988483987,DE
-2988483988,2988483991,FR
-2988483992,2988483995,GB
-2988483996,2988483999,PL
-2988484000,2988484003,DE
-2988484004,2988484007,GB
-2988484008,2988484019,FR
-2988484020,2988484023,ES
-2988484024,2988484031,BE
-2988484032,2988484039,IT
-2988484040,2988484047,NL
-2988484048,2988484051,ES
-2988484052,2988484055,GB
-2988484056,2988484059,PT
-2988484060,2988484063,PL
-2988484064,2988484079,FR
-2988484080,2988484083,GB
-2988484084,2988484091,IT
-2988484092,2988484095,PT
-2988484096,2988484111,DE
-2988484112,2988484127,FR
-2988484128,2988484131,PT
-2988484132,2988484135,PL
-2988484136,2988484163,FR
-2988484164,2988484167,GB
-2988484168,2988484175,ES
-2988484176,2988484187,FR
-2988484188,2988484191,PL
-2988484192,2988484207,DE
-2988484208,2988484223,FR
-2988484224,2988484239,ES
-2988484240,2988484243,PL
-2988484244,2988484287,FR
-2988484288,2988484351,PL
-2988484352,2988484383,GB
-2988484384,2988484391,CZ
-2988484392,2988484395,PT
-2988484396,2988484399,PL
-2988484400,2988484403,PT
-2988484404,2988484427,PL
-2988484428,2988484431,GB
-2988484432,2988484439,PL
-2988484440,2988484443,ES
-2988484444,2988484447,CH
-2988484448,2988484463,SN
-2988484464,2988484471,ES
-2988484472,2988484475,BE
-2988484476,2988484479,FR
-2988484480,2988484511,PL
-2988484512,2988484543,IT
-2988484544,2988484547,BE
-2988484548,2988484551,FR
-2988484552,2988484559,PL
-2988484560,2988484831,FR
+2988482580,2988483027,FR
+2988483028,2988483031,ES
+2988483032,2988484831,FR
2988484832,2988484847,GB
-2988484848,2988484863,FR
-2988484864,2988484879,NL
-2988484880,2988484883,GB
-2988484884,2988484887,DE
-2988484888,2988484891,FR
-2988484892,2988484895,GB
-2988484896,2988484943,FR
-2988484944,2988484955,PL
-2988484956,2988484967,FR
-2988484968,2988484971,PL
-2988484972,2988484991,FR
-2988484992,2988485007,LT
-2988485008,2988485023,PL
-2988485024,2988485039,FR
-2988485040,2988485055,PL
-2988485056,2988485071,FR
-2988485072,2988485087,IE
-2988485088,2988485103,DE
-2988485104,2988485119,PL
-2988485120,2988485135,FR
-2988485136,2988485151,BE
-2988485152,2988485167,IT
-2988485168,2988485183,FR
-2988485184,2988485247,BE
-2988485248,2988485255,IT
-2988485256,2988485263,NL
-2988485264,2988485267,DE
-2988485268,2988485279,FR
-2988485280,2988485327,IT
-2988485328,2988485335,FI
-2988485336,2988485343,PT
-2988485344,2988485351,BE
-2988485352,2988485355,GB
-2988485356,2988485359,PL
-2988485360,2988485439,FR
-2988485440,2988485455,PL
-2988485456,2988485471,ES
-2988485472,2988485479,FR
-2988485480,2988485487,IT
-2988485488,2988485503,FR
-2988485504,2988485519,GB
-2988485520,2988485559,FR
-2988485560,2988485563,NL
-2988485564,2988485567,ES
-2988485568,2988485583,GB
-2988485584,2988485587,FR
-2988485588,2988485591,BE
-2988485592,2988485599,FR
-2988485600,2988485607,PL
-2988485608,2988485631,FR
-2988485632,2988485663,ES
-2988485664,2988485671,PL
-2988485672,2988485675,DE
-2988485676,2988485679,GB
-2988485680,2988485683,FR
+2988484848,2988485683,FR
2988485684,2988485687,PL
-2988485688,2988485691,GB
-2988485692,2988485695,PL
-2988485696,2988485791,FR
-2988485792,2988485799,GB
-2988485800,2988485803,PT
-2988485804,2988485807,FR
-2988485808,2988485823,NL
-2988485824,2988485831,FR
-2988485832,2988485835,NL
-2988485836,2988485839,LT
-2988485840,2988485855,DE
-2988485856,2988485871,FR
-2988485872,2988485875,PL
-2988485876,2988485879,IE
-2988485880,2988485887,FR
-2988485888,2988485903,PL
-2988485904,2988485911,GB
-2988485912,2988485919,PT
-2988485920,2988485951,FR
-2988485952,2988485955,DE
-2988485956,2988485959,CZ
-2988485960,2988485967,FR
-2988485968,2988485983,IE
-2988485984,2988485999,FR
-2988486000,2988486015,PL
-2988486016,2988486031,GB
-2988486032,2988486047,PL
-2988486048,2988486063,GB
-2988486064,2988486067,FR
-2988486068,2988486071,ES
-2988486072,2988486075,FR
-2988486076,2988486079,ES
-2988486080,2988486083,BE
-2988486084,2988486095,FR
-2988486096,2988486099,GB
-2988486100,2988486103,FR
-2988486104,2988486135,PL
-2988486136,2988486139,FR
-2988486140,2988486143,GB
-2988486144,2988486147,FR
-2988486148,2988486151,BE
-2988486152,2988486155,PL
-2988486156,2988486159,DE
-2988486160,2988486175,IE
-2988486176,2988486179,FR
-2988486180,2988486183,PL
-2988486184,2988486191,IE
-2988486192,2988486195,PL
-2988486196,2988486207,PT
-2988486208,2988486215,PL
-2988486216,2988486219,ES
-2988486220,2988486223,FR
-2988486224,2988486231,BE
-2988486232,2988486235,PL
-2988486236,2988486239,ES
-2988486240,2988486287,PL
-2988486288,2988486291,FR
-2988486292,2988486299,GB
-2988486300,2988486303,NL
-2988486304,2988486311,PL
-2988486312,2988486319,CH
-2988486320,2988486323,IT
-2988486324,2988486327,PT
-2988486328,2988486343,ES
-2988486344,2988486347,FR
-2988486348,2988486367,ES
-2988486368,2988486375,FR
-2988486376,2988486379,DE
-2988486380,2988486403,FR
-2988486404,2988486407,BE
-2988486408,2988486423,FR
-2988486424,2988486431,PT
-2988486432,2988486447,FR
-2988486448,2988486463,ES
-2988486464,2988486471,IT
-2988486472,2988486475,ES
-2988486476,2988486479,PL
-2988486480,2988486495,FR
-2988486496,2988486503,DE
-2988486504,2988486511,PL
-2988486512,2988486515,DE
-2988486516,2988486527,PL
-2988486528,2988486575,FR
-2988486576,2988486579,PL
-2988486580,2988486583,GB
-2988486584,2988486595,FR
-2988486596,2988486599,GB
-2988486600,2988486603,DE
-2988486604,2988486607,FR
-2988486608,2988486615,FI
-2988486616,2988486623,ES
-2988486624,2988486643,FR
-2988486644,2988486647,GB
-2988486648,2988486651,ES
-2988486652,2988486655,PL
-2988486656,2988486671,FR
-2988486672,2988486675,DE
-2988486676,2988486679,FR
-2988486680,2988486687,ES
-2988486688,2988486691,FR
-2988486692,2988486695,IT
-2988486696,2988486699,ES
-2988486700,2988486707,PL
-2988486708,2988486711,IT
-2988486712,2988486719,IE
-2988486720,2988486735,FR
-2988486736,2988486743,ES
-2988486744,2988486747,FR
-2988486748,2988486751,GB
-2988486752,2988486759,FR
-2988486760,2988486763,DE
-2988486764,2988486767,FR
-2988486768,2988486775,GB
-2988486776,2988486783,FR
-2988486784,2988486787,DE
-2988486788,2988486791,FR
-2988486792,2988486795,ES
-2988486796,2988486799,PL
-2988486800,2988486807,FR
-2988486808,2988486811,DE
-2988486812,2988486823,FR
-2988486824,2988486831,IT
-2988486832,2988486847,PL
-2988486848,2988486879,FR
-2988486880,2988486883,PL
-2988486884,2988486887,FR
-2988486888,2988486891,PT
-2988486892,2988486895,GB
-2988486896,2988486903,PT
-2988486904,2988486907,DE
-2988486908,2988486911,LT
-2988486912,2988487039,FR
-2988487040,2988487043,PL
-2988487044,2988487047,PT
-2988487048,2988487055,NL
-2988487056,2988487071,FR
+2988485688,2988487071,FR
2988487072,2988487075,ES
-2988487076,2988487079,PL
-2988487080,2988487087,FR
-2988487088,2988487099,PL
-2988487100,2988487103,GB
-2988487104,2988487135,FR
-2988487136,2988487167,NL
-2988487168,2988487679,FR
-2988487680,2988487935,DE
-2988487936,2988487939,BE
-2988487940,2988487947,FR
-2988487948,2988487951,PL
-2988487952,2988487967,FR
-2988487968,2988487975,PL
-2988487976,2988487979,FR
-2988487980,2988487983,ES
-2988487984,2988488011,FR
-2988488012,2988488015,LT
-2988488016,2988488023,FR
-2988488024,2988488031,GB
-2988488032,2988488047,IE
-2988488048,2988488051,IT
-2988488052,2988488095,FR
-2988488096,2988488099,DE
-2988488100,2988488103,PT
-2988488104,2988488111,FR
-2988488112,2988488127,PL
-2988488128,2988488151,FR
-2988488152,2988488159,GB
-2988488160,2988488175,FR
-2988488176,2988488179,GB
-2988488180,2988488191,DE
-2988488192,2988488479,FR
-2988488480,2988488487,PT
-2988488488,2988488491,FR
-2988488492,2988488495,ES
-2988488496,2988488543,FR
-2988488544,2988488555,GB
-2988488556,2988488563,ES
-2988488564,2988488567,FR
-2988488568,2988488571,ES
-2988488572,2988488575,PT
-2988488576,2988488607,FR
-2988488608,2988488639,DE
-2988488640,2988488647,ES
-2988488648,2988488655,IT
-2988488656,2988488663,PL
-2988488664,2988488959,FR
-2988488960,2988488963,NL
-2988488964,2988488967,FR
-2988488968,2988488971,DE
-2988488972,2988488975,IT
-2988488976,2988488983,ES
-2988488984,2988488987,FR
-2988488988,2988488991,NL
-2988488992,2988489023,ES
-2988489024,2988489055,FR
-2988489056,2988489071,IE
-2988489072,2988489095,FR
-2988489096,2988489103,GB
-2988489104,2988489119,FI
-2988489120,2988489123,DE
-2988489124,2988489127,IE
-2988489128,2988489131,IT
-2988489132,2988489167,FR
-2988489168,2988489175,PT
-2988489176,2988489179,PL
-2988489180,2988489183,GB
-2988489184,2988489215,FR
-2988489216,2988489247,IE
-2988489248,2988489251,FR
-2988489252,2988489259,NL
-2988489260,2988489263,FR
-2988489264,2988489279,IT
-2988489280,2988489283,FI
-2988489284,2988489311,FR
-2988489312,2988489327,PL
-2988489328,2988489331,NL
-2988489332,2988489335,PL
-2988489336,2988489339,DE
-2988489340,2988489343,GB
-2988489344,2988489347,FR
-2988489348,2988489351,PT
-2988489352,2988489355,FR
-2988489356,2988489359,PT
-2988489360,2988489363,FI
-2988489364,2988489367,FR
-2988489368,2988489371,GB
-2988489372,2988489375,FR
-2988489376,2988489379,ES
-2988489380,2988489383,GB
-2988489384,2988489391,FR
-2988489392,2988489399,NL
-2988489400,2988489403,PL
-2988489404,2988489407,IT
-2988489408,2988489439,PT
-2988489440,2988489443,IT
-2988489444,2988489447,GB
-2988489448,2988489455,PL
-2988489456,2988489471,FR
-2988489472,2988489475,ES
-2988489476,2988489479,GB
-2988489480,2988489483,PL
-2988489484,2988489487,GB
-2988489488,2988489503,FR
-2988489504,2988489519,GB
-2988489520,2988489527,ES
-2988489528,2988489539,NL
-2988489540,2988489543,CH
-2988489544,2988489663,FR
-2988489664,2988489667,DE
-2988489668,2988489671,GB
-2988489672,2988489675,ES
-2988489676,2988489679,IE
-2988489680,2988489695,FR
-2988489696,2988489711,FI
-2988489712,2988489719,FR
-2988489720,2988489723,IT
-2988489724,2988489727,ES
-2988489728,2988489747,FR
-2988489748,2988489751,GB
-2988489752,2988489755,ES
-2988489756,2988489759,FR
-2988489760,2988489791,NL
-2988489792,2988489855,PL
-2988489856,2988489887,GB
-2988489888,2988489903,FR
-2988489904,2988489919,IE
-2988489920,2988489935,FR
-2988489936,2988489943,ES
-2988489944,2988489947,FR
-2988489948,2988489951,GB
-2988489952,2988489967,FR
-2988489968,2988489983,GB
-2988489984,2988490047,FR
-2988490048,2988490051,ES
-2988490052,2988490055,PL
-2988490056,2988490059,LT
-2988490060,2988490063,FR
-2988490064,2988490079,GB
-2988490080,2988490095,FR
-2988490096,2988490103,PT
-2988490104,2988490107,ES
-2988490108,2988490111,FR
-2988490112,2988490143,PL
-2988490144,2988490175,FR
-2988490176,2988490179,IT
-2988490180,2988490183,PL
-2988490184,2988490191,ES
-2988490192,2988490195,GB
-2988490196,2988490223,FR
-2988490224,2988490227,DE
-2988490228,2988490231,GB
-2988490232,2988490235,ES
-2988490236,2988490239,PL
-2988490240,2988490247,FR
-2988490248,2988490251,ES
-2988490252,2988490255,GB
-2988490256,2988490271,PL
-2988490272,2988490287,ES
-2988490288,2988490295,FR
-2988490296,2988490303,DE
-2988490304,2988490319,ES
-2988490320,2988490351,FR
-2988490352,2988490355,IE
-2988490356,2988490367,DE
-2988490368,2988490371,ES
-2988490372,2988490375,NL
-2988490376,2988490379,FR
-2988490380,2988490383,GB
-2988490384,2988490399,FR
-2988490400,2988490407,GB
-2988490408,2988490411,FR
-2988490412,2988490415,ES
-2988490416,2988490419,FR
-2988490420,2988490423,CH
-2988490424,2988490463,FR
-2988490464,2988490623,PL
-2988490624,2988490751,ES
-2988490752,2988491775,FR
-2988491776,2988492031,TN
-2988492032,2988492799,FR
+2988487076,2988487095,FR
+2988487096,2988487099,ES
+2988487100,2988489479,FR
+2988489480,2988489483,DE
+2988489484,2988489675,FR
+2988489676,2988489679,ES
+2988489680,2988490179,FR
+2988490180,2988490183,ES
+2988490184,2988490686,FR
+2988490687,2988490687,BE
+2988490688,2988492799,FR
2988492800,2988494847,PL
-2988494848,2988498975,FR
-2988498976,2988498983,ES
-2988498984,2988498991,FR
-2988498992,2988499007,PL
-2988499008,2988499031,FR
-2988499032,2988499051,DE
-2988499052,2988499063,FR
-2988499064,2988499067,DE
-2988499068,2988499103,FR
-2988499104,2988499119,IE
-2988499120,2988499135,FR
-2988499136,2988499139,DE
-2988499140,2988499143,FR
-2988499144,2988499151,DE
-2988499152,2988499167,FR
-2988499168,2988499199,ES
-2988499200,2988499343,FR
-2988499344,2988499347,PL
-2988499348,2988499351,GB
-2988499352,2988499359,IE
-2988499360,2988499367,PL
-2988499368,2988499375,FR
-2988499376,2988499379,GB
-2988499380,2988499383,PL
-2988499384,2988499387,BE
-2988499388,2988499407,FR
-2988499408,2988499415,PL
-2988499416,2988499423,DE
-2988499424,2988499455,PL
-2988499456,2988499463,NL
-2988499464,2988499471,DE
-2988499472,2988499551,FR
-2988499552,2988499567,PL
-2988499568,2988499575,IE
-2988499576,2988499579,IT
-2988499580,2988499583,CH
-2988499584,2988499599,PL
-2988499600,2988499615,FR
-2988499616,2988499623,DE
-2988499624,2988499631,ES
-2988499632,2988499635,CH
-2988499636,2988499639,GB
-2988499640,2988499655,FR
-2988499656,2988499659,IT
-2988499660,2988499663,LT
-2988499664,2988499671,FR
-2988499672,2988499675,GB
-2988499676,2988499679,FR
-2988499680,2988499695,BE
-2988499696,2988499699,PL
-2988499700,2988499703,GB
-2988499704,2988499711,DE
-2988499712,2988499731,GB
-2988499732,2988499735,FR
-2988499736,2988499743,NL
-2988499744,2988499747,IE
-2988499748,2988499751,LT
-2988499752,2988499755,PL
-2988499756,2988499759,ES
-2988499760,2988499763,CH
-2988499764,2988499775,FR
-2988499776,2988499791,IT
-2988499792,2988499795,GB
-2988499796,2988499803,IT
-2988499804,2988499807,DE
-2988499808,2988499823,FR
-2988499824,2988499831,PL
-2988499832,2988499839,GB
-2988499840,2988499847,BE
-2988499848,2988499851,DE
-2988499852,2988499855,PL
-2988499856,2988499871,FR
-2988499872,2988499903,IE
-2988499904,2988499907,FR
-2988499908,2988499911,BE
-2988499912,2988499915,FR
-2988499916,2988499919,LT
-2988499920,2988499923,NL
-2988499924,2988499927,BE
-2988499928,2988499935,FR
-2988499936,2988499967,IE
-2988499968,2988500223,FR
-2988500224,2988500255,ES
-2988500256,2988500271,IT
-2988500272,2988500287,BE
-2988500288,2988500303,PL
-2988500304,2988500307,FR
-2988500308,2988500311,GB
-2988500312,2988500315,ES
-2988500316,2988500319,DE
-2988500320,2988500335,FR
-2988500336,2988500339,DE
-2988500340,2988500347,IE
-2988500348,2988500351,ES
-2988500352,2988500367,DE
-2988500368,2988500371,FR
-2988500372,2988500375,CZ
-2988500376,2988500383,PT
-2988500384,2988500399,PL
-2988500400,2988500415,DE
+2988494848,2988499729,FR
+2988499730,2988499730,GB
+2988499731,2988499736,FR
+2988499737,2988499737,NL
+2988499738,2988500415,FR
2988500416,2988500447,CZ
-2988500448,2988500479,ES
-2988500480,2988500495,DE
-2988500496,2988500499,FR
-2988500500,2988500503,DE
-2988500504,2988500511,PL
-2988500512,2988500519,FR
-2988500520,2988500523,ES
-2988500524,2988500527,FR
-2988500528,2988500543,BE
-2988500544,2988500623,PL
-2988500624,2988500639,FR
-2988500640,2988500671,GB
-2988500672,2988500679,IT
-2988500680,2988500687,PL
-2988500688,2988500703,NL
-2988500704,2988500711,PL
-2988500712,2988500767,FR
-2988500768,2988500775,NL
-2988500776,2988500783,GB
-2988500784,2988500787,PL
-2988500788,2988500791,ES
-2988500792,2988500799,IT
-2988500800,2988500815,ES
-2988500816,2988500831,FR
-2988500832,2988500847,ES
-2988500848,2988500851,IE
-2988500852,2988500855,PL
-2988500856,2988500867,FR
-2988500868,2988500871,DE
-2988500872,2988500879,ES
-2988500880,2988500887,BE
-2988500888,2988500903,FR
-2988500904,2988500907,PL
-2988500908,2988500911,PT
-2988500912,2988500919,FR
-2988500920,2988500927,PL
-2988500928,2988500935,FR
-2988500936,2988500959,IT
-2988500960,2988500975,IE
-2988500976,2988500979,PL
-2988500980,2988500987,DE
-2988500988,2988500991,CH
-2988500992,2988501023,IE
-2988501024,2988501119,FR
-2988501120,2988501123,PL
-2988501124,2988501131,FR
-2988501132,2988501135,ES
-2988501136,2988501143,FR
-2988501144,2988501147,GB
-2988501148,2988501183,FR
-2988501184,2988501215,BE
-2988501216,2988501223,FR
-2988501224,2988501227,CZ
-2988501228,2988501327,FR
-2988501328,2988501335,ES
-2988501336,2988501343,PT
-2988501344,2988501359,FR
-2988501360,2988501367,CH
-2988501368,2988501375,ES
-2988501376,2988501383,FR
-2988501384,2988501391,PL
-2988501392,2988501407,FR
-2988501408,2988501415,PL
-2988501416,2988501423,FR
-2988501424,2988501439,NL
-2988501440,2988501471,BE
-2988501472,2988501475,PT
-2988501476,2988501479,BE
-2988501480,2988501487,DE
-2988501488,2988501567,FR
-2988501568,2988501631,PL
-2988501632,2988501663,DE
-2988501664,2988501679,CH
-2988501680,2988501683,PL
-2988501684,2988501687,GB
-2988501688,2988501691,FR
-2988501692,2988501695,GB
-2988501696,2988501727,FI
-2988501728,2988501759,PL
-2988501760,2988502039,FR
-2988502040,2988502047,CZ
-2988502048,2988502051,FR
+2988500448,2988500855,FR
+2988500856,2988500859,ES
+2988500860,2988502051,FR
2988502052,2988502055,PL
-2988502056,2988502059,GB
-2988502060,2988502063,IT
-2988502064,2988502071,FR
-2988502072,2988502075,PL
-2988502076,2988502079,ES
-2988502080,2988502095,IE
-2988502096,2988502099,FI
-2988502100,2988502103,CZ
-2988502104,2988502107,PL
-2988502108,2988502111,IE
-2988502112,2988502127,FR
-2988502128,2988502143,PL
-2988502144,2988502207,FR
-2988502208,2988502223,GB
-2988502224,2988502239,IE
-2988502240,2988502255,FR
-2988502256,2988502263,DE
-2988502264,2988502267,ES
-2988502268,2988502271,DE
-2988502272,2988502399,FR
-2988502400,2988502407,NL
-2988502408,2988502411,FR
-2988502412,2988502415,PL
-2988502416,2988502419,GB
-2988502420,2988502423,IE
-2988502424,2988502431,FI
-2988502432,2988502455,FR
-2988502456,2988502459,PL
-2988502460,2988502463,PT
-2988502464,2988502479,IE
-2988502480,2988502487,PL
-2988502488,2988502491,FR
-2988502492,2988502495,PL
-2988502496,2988502511,ES
-2988502512,2988502519,FR
-2988502520,2988502523,ES
-2988502524,2988502527,PT
-2988502528,2988502535,FR
-2988502536,2988502543,PL
-2988502544,2988502559,FR
-2988502560,2988502591,PL
-2988502592,2988502599,FR
-2988502600,2988502603,DE
-2988502604,2988502607,PL
-2988502608,2988502631,FR
-2988502632,2988502639,IE
-2988502640,2988502655,FR
+2988502056,2988502479,FR
+2988502480,2988502483,ES
+2988502484,2988502655,FR
2988502656,2988502719,DE
-2988502720,2988502723,ES
-2988502724,2988502727,BE
-2988502728,2988502731,FR
-2988502732,2988502735,PL
-2988502736,2988502743,FR
-2988502744,2988502751,PL
-2988502752,2988502783,ES
-2988502784,2988502795,FR
-2988502796,2988502799,PL
-2988502800,2988502811,FR
-2988502812,2988502815,PL
-2988502816,2988502823,FR
-2988502824,2988502831,ES
-2988502832,2988502863,FR
-2988502864,2988502867,IE
-2988502868,2988502871,LT
-2988502872,2988502875,PL
-2988502876,2988502879,ES
-2988502880,2988502883,IT
-2988502884,2988502887,CZ
-2988502888,2988502891,NL
-2988502892,2988502895,PL
-2988502896,2988502911,FR
-2988502912,2988502915,DE
-2988502916,2988502919,FR
-2988502920,2988502927,PL
-2988502928,2988502959,FR
-2988502960,2988502975,DE
-2988502976,2988502983,PL
-2988502984,2988502991,ES
-2988502992,2988503007,DE
-2988503008,2988503011,FR
-2988503012,2988503015,DE
-2988503016,2988503019,PL
-2988503020,2988503031,FR
-2988503032,2988503035,ES
-2988503036,2988503039,GB
-2988503040,2988503295,FR
-2988503296,2988503343,IE
-2988503344,2988503351,FR
-2988503352,2988503359,ES
-2988503360,2988503375,FR
-2988503376,2988503383,PT
-2988503384,2988503391,PL
-2988503392,2988503395,FR
-2988503396,2988503399,BE
-2988503400,2988503415,FR
-2988503416,2988503423,PL
-2988503424,2988503455,FR
-2988503456,2988503463,BE
-2988503464,2988503471,FR
-2988503472,2988503487,ES
-2988503488,2988503495,IT
-2988503496,2988503499,PL
-2988503500,2988503519,FR
-2988503520,2988503535,NL
-2988503536,2988503539,ES
-2988503540,2988503547,FR
-2988503548,2988503551,PL
-2988503552,2988503871,FR
-2988503872,2988503903,DE
-2988503904,2988503919,FR
-2988503920,2988503927,ES
-2988503928,2988503935,NL
-2988503936,2988503939,PT
-2988503940,2988503943,CH
-2988503944,2988503947,PL
-2988503948,2988503951,IE
-2988503952,2988503991,FR
-2988503992,2988504007,PL
-2988504008,2988504015,BE
-2988504016,2988504019,FR
-2988504020,2988504023,ES
-2988504024,2988504031,FR
-2988504032,2988504063,ES
-2988504064,2988504127,IE
-2988504128,2988504143,DE
-2988504144,2988504159,FR
-2988504160,2988504191,PL
-2988504192,2988504223,FR
-2988504224,2988504227,PT
-2988504228,2988504231,FR
-2988504232,2988504239,PL
-2988504240,2988504255,GB
-2988504256,2988504287,ES
-2988504288,2988504303,GB
-2988504304,2988504307,PL
-2988504308,2988504315,FR
-2988504316,2988504319,DE
-2988504320,2988504323,FR
-2988504324,2988504327,NL
-2988504328,2988504335,DE
-2988504336,2988504351,FR
-2988504352,2988504355,GB
-2988504356,2988504359,DE
-2988504360,2988504363,GB
-2988504364,2988504367,FI
-2988504368,2988504371,IE
+2988502720,2988502881,FR
+2988502882,2988502882,IT
+2988502883,2988504371,FR
2988504372,2988504375,PL
-2988504376,2988504415,FR
-2988504416,2988504419,PL
-2988504420,2988504423,DE
-2988504424,2988504427,ES
-2988504428,2988504431,PT
-2988504432,2988504435,FR
-2988504436,2988504439,ES
-2988504440,2988504443,FR
-2988504444,2988504447,GB
-2988504448,2988504451,BE
-2988504452,2988504455,ES
-2988504456,2988504459,PL
-2988504460,2988504463,GB
-2988504464,2988504467,DE
-2988504468,2988504471,ES
-2988504472,2988504479,PL
-2988504480,2988504543,FR
-2988504544,2988504559,PL
-2988504560,2988504563,FI
-2988504564,2988504567,PL
-2988504568,2988504571,CH
-2988504572,2988504575,PL
-2988504576,2988504591,FR
-2988504592,2988504603,PL
-2988504604,2988504639,FR
-2988504640,2988504647,DE
-2988504648,2988504655,IT
-2988504656,2988504675,FR
-2988504676,2988504679,PL
-2988504680,2988504683,FR
-2988504684,2988504703,PL
-2988504704,2988504735,FR
-2988504736,2988504743,PL
-2988504744,2988504751,ES
-2988504752,2988504755,PL
-2988504756,2988504759,CZ
-2988504760,2988504763,CH
-2988504764,2988504767,FR
-2988504768,2988504815,ES
-2988504816,2988504819,BE
-2988504820,2988504863,FR
-2988504864,2988504879,PL
-2988504880,2988504967,FR
-2988504968,2988504975,BE
-2988504976,2988504983,FR
-2988504984,2988504987,ES
-2988504988,2988504991,DE
-2988504992,2988505023,CZ
-2988505024,2988505087,DE
-2988505088,2988505151,NL
-2988505152,2988505167,GB
-2988505168,2988505183,FR
-2988505184,2988505195,PL
-2988505196,2988505199,DE
-2988505200,2988505207,PL
-2988505208,2988505211,ES
-2988505212,2988505215,PT
-2988505216,2988505247,FR
-2988505248,2988505255,PL
-2988505256,2988505263,FR
-2988505264,2988505267,IT
-2988505268,2988505271,FR
-2988505272,2988505275,CZ
-2988505276,2988505311,BE
-2988505312,2988505315,DE
-2988505316,2988505319,ES
-2988505320,2988505323,PL
-2988505324,2988505327,ES
-2988505328,2988505339,PL
-2988505340,2988505343,CH
-2988505344,2988505375,IT
-2988505376,2988505391,FR
-2988505392,2988505399,PL
-2988505400,2988505403,ES
-2988505404,2988505407,GB
-2988505408,2988505439,FR
-2988505440,2988505455,PL
-2988505456,2988505463,CH
-2988505464,2988505471,IT
-2988505472,2988505475,ES
-2988505476,2988505479,NL
-2988505480,2988505487,IE
-2988505488,2988505503,PL
-2988505504,2988505535,FR
-2988505536,2988505567,ES
-2988505568,2988505583,IE
-2988505584,2988505599,FR
-2988505600,2988505603,DE
-2988505604,2988505607,ES
-2988505608,2988505615,FR
-2988505616,2988505631,ES
-2988505632,2988505663,FR
-2988505664,2988505695,PL
-2988505696,2988505703,FR
-2988505704,2988505711,PL
-2988505712,2988505715,DE
-2988505716,2988505719,IE
-2988505720,2988505723,FR
-2988505724,2988505727,GB
-2988505728,2988505735,PL
-2988505736,2988505739,DE
-2988505740,2988505743,ES
-2988505744,2988505747,PT
-2988505748,2988505751,DE
-2988505752,2988505755,CH
-2988505756,2988505759,FR
-2988505760,2988505775,BE
-2988505776,2988505791,DE
-2988505792,2988505807,FR
-2988505808,2988505811,PL
-2988505812,2988505815,DE
-2988505816,2988505819,GB
-2988505820,2988505823,PL
-2988505824,2988505839,FR
-2988505840,2988505843,CH
-2988505844,2988505847,FR
-2988505848,2988505851,PL
-2988505852,2988505855,FR
-2988505856,2988505887,PL
-2988505888,2988505919,IE
-2988505920,2988505935,GB
-2988505936,2988505943,ES
-2988505944,2988505947,PL
-2988505948,2988505951,FR
-2988505952,2988505967,GB
-2988505968,2988505971,PL
-2988505972,2988506127,FR
-2988506128,2988506135,NL
-2988506136,2988506143,DE
-2988506144,2988506151,GB
-2988506152,2988506159,PL
-2988506160,2988506191,FR
-2988506192,2988506207,GB
-2988506208,2988506239,ES
-2988506240,2988506255,BE
-2988506256,2988506271,CH
-2988506272,2988506303,FR
-2988506304,2988506335,DE
-2988506336,2988506367,FR
-2988506368,2988506375,IE
-2988506376,2988506379,IT
-2988506380,2988506383,DE
-2988506384,2988506399,IT
-2988506400,2988506415,FR
-2988506416,2988506431,BE
-2988506432,2988506447,IT
-2988506448,2988506451,ES
-2988506452,2988506455,PT
-2988506456,2988506459,BE
-2988506460,2988506463,PL
-2988506464,2988506495,FR
-2988506496,2988506499,CH
-2988506500,2988506503,IT
-2988506504,2988506507,DE
-2988506508,2988506511,ES
-2988506512,2988506515,GB
-2988506516,2988506519,FR
-2988506520,2988506523,PL
-2988506524,2988506527,IE
-2988506528,2988506543,FR
-2988506544,2988506551,DE
-2988506552,2988506559,FR
-2988506560,2988506563,IT
-2988506564,2988506567,GB
-2988506568,2988506571,PL
-2988506572,2988506575,CH
-2988506576,2988506591,FR
-2988506592,2988506623,PT
-2988506624,2988506639,CH
-2988506640,2988506647,FR
-2988506648,2988506651,CH
-2988506652,2988506655,PL
-2988506656,2988506667,FR
-2988506668,2988506687,GB
-2988506688,2988506695,FR
-2988506696,2988506703,FI
-2988506704,2988506751,FR
-2988506752,2988506763,ES
-2988506764,2988506767,PL
-2988506768,2988506771,PT
-2988506772,2988506783,ES
-2988506784,2988506819,PL
-2988506820,2988506827,FR
-2988506828,2988506831,IE
-2988506832,2988506863,FR
-2988506864,2988506871,DE
-2988506872,2988506875,ES
-2988506876,2988506887,FR
-2988506888,2988506891,ES
-2988506892,2988506895,LT
-2988506896,2988506911,ES
-2988506912,2988506975,FR
-2988506976,2988507007,DE
-2988507008,2988507135,FR
-2988507136,2988507143,NL
-2988507144,2988507147,PL
-2988507148,2988507155,IT
-2988507156,2988507159,PL
-2988507160,2988507163,CH
-2988507164,2988507167,FR
-2988507168,2988507183,DE
-2988507184,2988507199,FR
-2988507200,2988507203,GB
-2988507204,2988507207,DE
-2988507208,2988507211,ES
-2988507212,2988507215,PL
-2988507216,2988507223,IT
-2988507224,2988507231,PL
-2988507232,2988507239,ES
-2988507240,2988507243,FR
-2988507244,2988507247,GB
-2988507248,2988507263,FR
-2988507264,2988507279,ES
-2988507280,2988507283,FR
-2988507284,2988507287,ES
-2988507288,2988507295,GB
-2988507296,2988507327,FR
-2988507328,2988507335,DE
-2988507336,2988507339,ES
-2988507340,2988507343,GB
-2988507344,2988507391,FR
-2988507392,2988507423,DE
-2988507424,2988507431,PL
-2988507432,2988507439,DE
-2988507440,2988507443,IT
-2988507444,2988507447,PL
-2988507448,2988507451,IT
-2988507452,2988507455,PL
-2988507456,2988507459,GB
-2988507460,2988507463,BE
-2988507464,2988507467,CH
-2988507468,2988507471,ES
-2988507472,2988507475,FR
-2988507476,2988507479,GB
-2988507480,2988507483,IE
-2988507484,2988507487,IT
-2988507488,2988507503,FR
-2988507504,2988507519,IT
-2988507520,2988507523,PL
-2988507524,2988507531,FR
-2988507532,2988507535,DE
-2988507536,2988507539,FR
-2988507540,2988507543,PL
-2988507544,2988507547,FR
-2988507548,2988507551,PL
-2988507552,2988507560,GB
-2988507561,2988507561,FR
-2988507562,2988507567,GB
-2988507568,2988507583,IE
-2988507584,2988507591,ES
-2988507592,2988507595,FR
-2988507596,2988507599,DE
-2988507600,2988507603,ES
-2988507604,2988507607,FR
-2988507608,2988507611,ES
-2988507612,2988507615,DE
-2988507616,2988507623,IT
-2988507624,2988507627,GB
-2988507628,2988507631,PT
-2988507632,2988507639,IT
-2988507640,2988507643,FR
-2988507644,2988507647,IT
-2988507648,2988507711,FR
-2988507712,2988507715,GB
-2988507716,2988507719,FR
-2988507720,2988507727,CH
-2988507728,2988507731,FR
-2988507732,2988507735,GB
-2988507736,2988507739,ES
-2988507740,2988507743,IE
-2988507744,2988507759,NL
-2988507760,2988507767,FR
-2988507768,2988507839,PL
-2988507840,2988507855,FR
-2988507856,2988507859,BE
-2988507860,2988507863,PL
-2988507864,2988507875,ES
-2988507876,2988507879,FR
-2988507880,2988507883,ES
-2988507884,2988507887,GB
-2988507888,2988507903,ES
-2988507904,2988507919,PL
-2988507920,2988507927,DE
-2988507928,2988507935,BE
-2988507936,2988507951,FR
-2988507952,2988507955,DE
-2988507956,2988507959,BE
-2988507960,2988507967,PL
-2988507968,2988507971,FR
-2988507972,2988507975,PL
-2988507976,2988507979,FR
-2988507980,2988507983,DE
-2988507984,2988507991,PL
-2988507992,2988507999,FR
-2988508000,2988508031,NL
-2988508032,2988508035,PL
-2988508036,2988508047,FR
-2988508048,2988508055,GB
-2988508056,2988508059,FR
-2988508060,2988508063,DE
-2988508064,2988508067,ES
-2988508068,2988508071,PL
-2988508072,2988508079,FR
-2988508080,2988508095,ES
-2988508096,2988508103,FR
-2988508104,2988508111,IT
-2988508112,2988508127,BE
-2988508128,2988508135,PL
-2988508136,2988508143,GB
-2988508144,2988508151,FR
-2988508152,2988508159,ES
-2988508160,2988508175,FR
-2988508176,2988508191,IE
-2988508192,2988508207,PL
-2988508208,2988508211,FR
-2988508212,2988508215,DE
-2988508216,2988508219,FR
-2988508220,2988508223,DE
-2988508224,2988508255,FR
-2988508256,2988508259,BE
-2988508260,2988508263,FR
-2988508264,2988508267,ES
-2988508268,2988508287,FR
-2988508288,2988508303,PL
-2988508304,2988508307,PT
-2988508308,2988508315,FR
-2988508316,2988508319,ES
-2988508320,2988508343,FR
-2988508344,2988508351,GB
-2988508352,2988508367,ES
-2988508368,2988508391,FR
-2988508392,2988508399,IT
-2988508400,2988508415,GB
-2988508416,2988508423,PL
-2988508424,2988508431,FR
-2988508432,2988508435,CH
-2988508436,2988508439,DE
-2988508440,2988508443,GB
-2988508444,2988508455,PL
-2988508456,2988508479,FR
-2988508480,2988508543,PT
-2988508544,2988508607,GB
-2988508608,2988508671,IT
-2988508672,2988508679,DE
-2988508680,2988508683,LT
-2988508684,2988508687,ES
-2988508688,2988508703,PL
-2988508704,2988508711,FR
-2988508712,2988508719,DE
-2988508720,2988508723,FR
-2988508724,2988508735,GB
-2988508736,2988508767,FR
-2988508768,2988508771,IT
-2988508772,2988508779,FR
-2988508780,2988508783,GB
-2988508784,2988508791,PT
-2988508792,2988508795,FR
-2988508796,2988508799,PL
-2988508800,2988508847,FR
-2988508848,2988508855,GB
-2988508856,2988508879,FR
-2988508880,2988508895,DE
-2988508896,2988508911,FR
-2988508912,2988508919,BE
-2988508920,2988508927,FR
-2988508928,2988508931,NL
-2988508932,2988508935,GB
-2988508936,2988508939,DE
-2988508940,2988508943,PL
-2988508944,2988508951,FR
-2988508952,2988508959,ES
-2988508960,2988508987,FR
-2988508988,2988508991,PL
-2988508992,2988509007,IT
-2988509008,2988509011,PL
-2988509012,2988509015,GB
-2988509016,2988509023,CH
-2988509024,2988509119,FR
-2988509120,2988509151,IT
-2988509152,2988509183,PL
-2988509184,2988509279,FR
-2988509280,2988509283,PL
-2988509284,2988509287,PT
-2988509288,2988509291,BE
-2988509292,2988509295,IE
-2988509296,2988509343,FR
-2988509344,2988509351,BE
-2988509352,2988509355,ES
-2988509356,2988509359,FR
-2988509360,2988509363,CH
-2988509364,2988509367,IT
-2988509368,2988509371,CH
-2988509372,2988509375,PL
-2988509376,2988509403,FR
-2988509404,2988509407,FI
-2988509408,2988509415,PL
-2988509416,2988509443,FR
-2988509444,2988509447,FI
-2988509448,2988509451,GB
-2988509452,2988509459,PL
-2988509460,2988509467,GB
-2988509468,2988509471,NL
-2988509472,2988509491,FR
-2988509492,2988509495,IE
-2988509496,2988509503,FR
-2988509504,2988509519,PL
-2988509520,2988509535,FR
-2988509536,2988509543,ES
-2988509544,2988509551,PL
-2988509552,2988509575,FR
-2988509576,2988509583,PL
-2988509584,2988509615,FR
-2988509616,2988509619,PL
-2988509620,2988509623,DE
-2988509624,2988509627,CZ
-2988509628,2988509631,PT
-2988509632,2988509711,FR
-2988509712,2988509715,IE
-2988509716,2988509719,IT
-2988509720,2988509723,ES
-2988509724,2988509727,PL
-2988509728,2988509735,IE
-2988509736,2988509747,FR
+2988504376,2988505391,FR
+2988505392,2988505395,ES
+2988505396,2988507163,FR
+2988507164,2988507167,ES
+2988507168,2988507975,FR
+2988507976,2988507979,IT
+2988507980,2988509511,FR
+2988509512,2988509515,PL
+2988509516,2988509747,FR
2988509748,2988509751,LT
-2988509752,2988509759,DE
-2988509760,2988509775,PL
-2988509776,2988509779,ES
-2988509780,2988509783,GB
-2988509784,2988509787,FR
-2988509788,2988509791,BE
-2988509792,2988509823,NL
-2988509824,2988509839,FR
-2988509840,2988509855,ES
-2988509856,2988509859,FR
-2988509860,2988509863,DE
-2988509864,2988509871,FR
-2988509872,2988509875,DE
-2988509876,2988509879,PT
-2988509880,2988509883,PL
-2988509884,2988509887,PT
-2988509888,2988509903,FR
-2988509904,2988509907,PL
-2988509908,2988509919,IT
-2988509920,2988509927,FR
-2988509928,2988509935,PL
-2988509936,2988509939,DE
-2988509940,2988509943,IT
-2988509944,2988509951,BE
-2988509952,2988509955,IT
-2988509956,2988509963,PL
-2988509964,2988509967,GB
-2988509968,2988509983,ES
-2988509984,2988509987,DE
-2988509988,2988509991,CZ
-2988509992,2988509995,FR
-2988509996,2988509999,DE
-2988510000,2988510015,GB
-2988510016,2988510031,ES
-2988510032,2988510043,FR
-2988510044,2988510079,PL
-2988510080,2988510087,ES
-2988510088,2988510091,PL
-2988510092,2988510099,FR
-2988510100,2988510103,GB
-2988510104,2988510111,BE
-2988510112,2988510143,CZ
-2988510144,2988510175,NL
-2988510176,2988510207,ES
-2988510208,2988510211,GB
-2988510212,2988510215,PT
-2988510216,2988510239,FR
-2988510240,2988510243,DE
-2988510244,2988510247,FR
-2988510248,2988510251,FI
-2988510252,2988510259,GB
-2988510260,2988510263,FR
-2988510264,2988510271,PL
-2988510272,2988510303,FR
-2988510304,2988510311,FI
-2988510312,2988510319,GB
-2988510320,2988510323,FR
-2988510324,2988510327,GB
-2988510328,2988510331,FR
-2988510332,2988510335,IT
-2988510336,2988510403,FR
-2988510404,2988510407,GB
-2988510408,2988510415,PL
-2988510416,2988510431,FR
-2988510432,2988510435,IT
-2988510436,2988510439,BE
-2988510440,2988510463,FR
-2988510464,2988510495,PL
-2988510496,2988510499,IT
-2988510500,2988510503,PL
-2988510504,2988510507,FR
-2988510508,2988510511,NL
-2988510512,2988510515,PL
-2988510516,2988510519,CZ
-2988510520,2988510527,ES
-2988510528,2988510559,FR
-2988510560,2988510591,IT
-2988510592,2988510623,BE
-2988510624,2988510655,IE
-2988510656,2988510687,PL
-2988510688,2988510703,FR
-2988510704,2988510719,PL
-2988510720,2988510751,FR
-2988510752,2988510759,PT
-2988510760,2988510767,FR
-2988510768,2988510771,NL
-2988510772,2988510775,FR
-2988510776,2988510779,PT
-2988510780,2988510847,FR
-2988510848,2988510911,PL
-2988510912,2988510927,CH
-2988510928,2988510943,FR
-2988510944,2988510975,IT
-2988510976,2988510979,GB
-2988510980,2988510983,IT
-2988510984,2988510987,GB
-2988510988,2988510991,ES
-2988510992,2988511071,FR
-2988511072,2988511079,PL
-2988511080,2988511083,FR
-2988511084,2988511087,PL
-2988511088,2988511091,IT
-2988511092,2988511167,FR
-2988511168,2988511171,IT
-2988511172,2988511175,DE
-2988511176,2988511179,GB
-2988511180,2988511187,FR
-2988511188,2988511191,PL
-2988511192,2988511555,FR
-2988511556,2988511559,CZ
-2988511560,2988511567,IT
-2988511568,2988511575,FR
-2988511576,2988511583,GB
-2988511584,2988511663,FR
-2988511664,2988511671,DE
-2988511672,2988511675,PL
-2988511676,2988511679,DE
-2988511680,2988511695,ES
-2988511696,2988511707,FR
-2988511708,2988511711,PL
-2988511712,2988511719,DE
-2988511720,2988511727,FR
-2988511728,2988511731,NL
-2988511732,2988511739,DE
-2988511740,2988511747,FR
-2988511748,2988511751,GB
-2988511752,2988511759,IT
-2988511760,2988511767,FR
-2988511768,2988511771,IT
-2988511772,2988511775,FR
-2988511776,2988511807,GB
-2988511808,2988511823,ES
-2988511824,2988511831,DE
-2988511832,2988511835,GB
-2988511836,2988511855,FR
-2988511856,2988511871,PL
-2988511872,2988511879,FR
-2988511880,2988511887,PL
-2988511888,2988511903,FR
-2988511904,2988511911,IT
-2988511912,2988511915,FR
-2988511916,2988511919,PL
-2988511920,2988511923,GB
-2988511924,2988511927,ES
-2988511928,2988511931,IT
-2988511932,2988511955,FR
-2988511956,2988511959,ES
-2988511960,2988511967,FR
-2988511968,2988511975,IT
-2988511976,2988511979,BE
-2988511980,2988511983,FR
-2988511984,2988511999,BE
-2988512000,2988512047,FR
-2988512048,2988512055,ES
-2988512056,2988512059,GB
-2988512060,2988512095,FR
-2988512096,2988512127,IE
-2988512128,2988512143,ES
-2988512144,2988512151,FR
-2988512152,2988512155,CH
-2988512156,2988512195,FR
-2988512196,2988512199,DE
-2988512200,2988512207,ES
-2988512208,2988512223,FR
-2988512224,2988512227,BE
-2988512228,2988512239,FR
-2988512240,2988512247,DE
-2988512248,2988512251,GB
-2988512252,2988512255,ES
-2988512256,2988512287,FR
-2988512288,2988512303,PL
-2988512304,2988512307,IT
-2988512308,2988512311,GB
-2988512312,2988512315,FR
-2988512316,2988512319,PL
-2988512320,2988512335,FR
-2988512336,2988512343,PL
-2988512344,2988512351,FR
-2988512352,2988512383,IT
-2988512384,2988512399,FR
-2988512400,2988512403,ES
-2988512404,2988512415,FR
-2988512416,2988512435,PL
-2988512436,2988512439,DE
-2988512440,2988512447,FR
-2988512448,2988512455,IT
-2988512456,2988512459,GB
-2988512460,2988512467,FR
-2988512468,2988512471,GB
-2988512472,2988512479,FR
-2988512480,2988512483,DE
-2988512484,2988512523,FR
-2988512524,2988512527,IT
-2988512528,2988512543,FR
-2988512544,2988512551,PL
-2988512552,2988512559,NL
-2988512560,2988512575,FR
-2988512576,2988512579,NL
-2988512580,2988512583,PL
-2988512584,2988512591,FR
-2988512592,2988512595,BE
-2988512596,2988512599,IT
-2988512600,2988512607,PT
-2988512608,2988512623,PL
-2988512624,2988512631,FR
-2988512632,2988512639,PL
-2988512640,2988512647,GB
-2988512648,2988512655,FR
-2988512656,2988512663,PT
-2988512664,2988512667,FR
-2988512668,2988512671,PL
-2988512672,2988512687,FR
-2988512688,2988512703,PL
-2988512704,2988512735,FR
-2988512736,2988512767,ES
-2988512768,2988512831,IE
-2988512832,2988512835,FR
-2988512836,2988512839,ES
-2988512840,2988512847,FR
-2988512848,2988512851,ES
-2988512852,2988512855,DE
-2988512856,2988512879,FR
-2988512880,2988512887,PL
-2988512888,2988512899,FR
-2988512900,2988512911,ES
-2988512912,2988512943,FR
-2988512944,2988512951,ES
-2988512952,2988512955,FR
-2988512956,2988512959,LT
-2988512960,2988512963,ES
-2988512964,2988512967,PL
-2988512968,2988512971,GB
-2988512972,2988512975,NL
-2988512976,2988512979,FI
-2988512980,2988512983,DE
-2988512984,2988512987,CH
-2988512988,2988512991,CZ
-2988512992,2988512995,FR
-2988512996,2988512999,GB
-2988513000,2988513003,FR
-2988513004,2988513007,PL
-2988513008,2988513015,IT
-2988513016,2988513019,FI
-2988513020,2988513183,FR
-2988513184,2988513191,DE
-2988513192,2988513215,FR
-2988513216,2988513223,NL
-2988513224,2988513235,FR
-2988513236,2988513239,ES
-2988513240,2988513271,FR
-2988513272,2988513275,DE
-2988513276,2988513279,CH
-2988513280,2988513283,FR
-2988513284,2988513287,ES
-2988513288,2988513291,FR
-2988513292,2988513295,PL
-2988513296,2988513303,NL
-2988513304,2988513311,FR
-2988513312,2988513327,PT
-2988513328,2988513331,PL
-2988513332,2988513343,FR
-2988513344,2988513351,ES
-2988513352,2988513359,IT
-2988513360,2988513363,PT
-2988513364,2988513383,FR
-2988513384,2988513391,PT
-2988513392,2988513407,GB
-2988513408,2988513471,PL
-2988513472,2988513503,FR
-2988513504,2988513507,CH
-2988513508,2988513511,DE
-2988513512,2988513515,IE
-2988513516,2988513519,DE
-2988513520,2988513535,GB
-2988513536,2988513551,FR
-2988513552,2988513555,IT
-2988513556,2988513567,FR
-2988513568,2988513575,DE
-2988513576,2988513583,PL
-2988513584,2988513599,IE
-2988513600,2988513663,FR
-2988513664,2988513667,PL
-2988513668,2988513671,FR
-2988513672,2988513675,PL
-2988513676,2988513679,FR
-2988513680,2988513683,ES
-2988513684,2988513687,GB
-2988513688,2988513691,FR
-2988513692,2988513695,DE
-2988513696,2988513703,FR
-2988513704,2988513707,DE
-2988513708,2988513711,GB
-2988513712,2988513723,FR
-2988513724,2988513727,DE
-2988513728,2988513731,FR
-2988513732,2988513735,PL
-2988513736,2988513739,FR
-2988513740,2988513743,ES
-2988513744,2988513759,GB
-2988513760,2988513879,FR
-2988513880,2988513883,ES
-2988513884,2988513887,FR
-2988513888,2988513891,PL
-2988513892,2988513899,IT
-2988513900,2988513903,PL
-2988513904,2988513919,IT
-2988513920,2988513959,FR
-2988513960,2988513963,NL
-2988513964,2988513967,IE
-2988513968,2988513983,NL
-2988513984,2988513999,BE
-2988514000,2988514015,FR
-2988514016,2988514023,ES
-2988514024,2988514027,CH
-2988514028,2988514031,PL
-2988514032,2988514095,FR
-2988514096,2988514099,DE
-2988514100,2988514103,PL
-2988514104,2988514111,FR
-2988514112,2988514115,PL
-2988514116,2988514127,FR
-2988514128,2988514131,IE
-2988514132,2988514135,IT
-2988514136,2988514139,FR
-2988514140,2988514143,LT
-2988514144,2988514159,FR
-2988514160,2988514163,IT
-2988514164,2988514207,FR
-2988514208,2988514215,CH
-2988514216,2988514219,FR
-2988514220,2988514227,GB
-2988514228,2988514231,NL
-2988514232,2988514239,ES
-2988514240,2988514247,FR
-2988514248,2988514251,GB
-2988514252,2988514271,ES
-2988514272,2988514279,FR
-2988514280,2988514287,PL
-2988514288,2988514303,ES
-2988514304,2988514335,FR
-2988514336,2988514339,PT
-2988514340,2988514343,FR
-2988514344,2988514351,PL
-2988514352,2988514367,ES
-2988514368,2988514447,FR
-2988514448,2988514463,NL
-2988514464,2988514527,FR
-2988514528,2988514543,GB
-2988514544,2988514559,PL
-2988514560,2988514623,FR
-2988514624,2988514655,DE
-2988514656,2988514671,FR
-2988514672,2988514675,CH
-2988514676,2988514679,IT
-2988514680,2988514683,GB
-2988514684,2988514687,DE
-2988514688,2988514719,GB
-2988514720,2988514735,ES
-2988514736,2988514739,DE
-2988514740,2988514743,GB
-2988514744,2988514747,ES
-2988514748,2988514751,GB
-2988514752,2988514815,FI
-2988514816,2988514819,FR
-2988514820,2988514823,NL
-2988514824,2988514827,PL
-2988514828,2988514839,FR
-2988514840,2988514879,ES
-2988514880,2988514943,PL
-2988514944,2988514959,ES
-2988514960,2988514975,PL
-2988514976,2988514979,DE
-2988514980,2988514983,PL
-2988514984,2988514991,IT
-2988514992,2988514995,FR
-2988514996,2988515007,PL
-2988515008,2988515027,FR
-2988515028,2988515031,DE
-2988515032,2988515327,FR
+2988509752,2988512903,FR
+2988512904,2988512907,GB
+2988512908,2988513003,FR
+2988513004,2988513007,ES
+2988513008,2988515327,FR
2988515328,2988517375,DE
2988517376,2988519423,FR
2988519424,2988521471,PL
-2988521472,2988523519,FR
-2988523520,2988523523,GB
-2988523524,2988523599,FR
-2988523600,2988523603,ES
-2988523604,2988523607,GB
-2988523608,2988523615,PL
-2988523616,2988523631,FR
-2988523632,2988523651,PL
-2988523652,2988523655,FR
-2988523656,2988523663,FI
-2988523664,2988523667,IE
-2988523668,2988523679,FR
-2988523680,2988523711,ES
-2988523712,2988523727,FR
-2988523728,2988523731,PL
-2988523732,2988523735,IT
-2988523736,2988523739,DE
-2988523740,2988523743,FR
-2988523744,2988523775,CH
-2988523776,2988524031,FR
-2988524032,2988524039,PL
-2988524040,2988524047,ES
-2988524048,2988524055,FR
-2988524056,2988524063,CZ
-2988524064,2988524067,PL
-2988524068,2988524071,GB
-2988524072,2988524075,FR
+2988521472,2988524075,FR
2988524076,2988524079,ES
-2988524080,2988524083,GB
-2988524084,2988524087,IT
-2988524088,2988524111,FR
-2988524112,2988524127,IT
-2988524128,2988524143,FR
-2988524144,2988524147,GB
-2988524148,2988524151,IT
-2988524152,2988524155,PL
-2988524156,2988524159,PT
-2988524160,2988524163,NL
-2988524164,2988524167,FR
-2988524168,2988524175,ES
-2988524176,2988524183,IT
-2988524184,2988524191,PL
-2988524192,2988524195,FI
-2988524196,2988524199,DE
-2988524200,2988524203,IE
-2988524204,2988524207,LT
-2988524208,2988524211,FR
-2988524212,2988524215,FI
-2988524216,2988524219,FR
-2988524220,2988524223,ES
-2988524224,2988524227,DE
-2988524228,2988524231,IT
-2988524232,2988524239,ES
-2988524240,2988524255,FR
-2988524256,2988524259,LT
-2988524260,2988524263,NL
-2988524264,2988524267,CZ
-2988524268,2988524271,GB
+2988524080,2988524271,FR
2988524272,2988524287,DE
-2988524288,2988524295,IT
-2988524296,2988524299,ES
-2988524300,2988524303,FR
-2988524304,2988524307,IT
-2988524308,2988524319,GB
-2988524320,2988524335,PL
-2988524336,2988524351,FR
-2988524352,2988524359,CH
-2988524360,2988524363,ES
-2988524364,2988524367,DE
-2988524368,2988524383,GB
-2988524384,2988524415,FR
-2988524416,2988524447,FI
-2988524448,2988524479,FR
-2988524480,2988524483,CZ
-2988524484,2988524487,IT
-2988524488,2988524495,FR
-2988524496,2988524543,PL
-2988524544,2988524575,IE
-2988524576,2988524599,FR
-2988524600,2988524607,ES
-2988524608,2988524627,GB
-2988524628,2988524631,FR
-2988524632,2988524635,DE
-2988524636,2988524639,FR
-2988524640,2988524671,DE
-2988524672,2988524735,FR
-2988524736,2988524751,GB
-2988524752,2988524911,FR
-2988524912,2988524919,NL
-2988524920,2988525055,FR
-2988525056,2988525567,PL
-2988525568,2988525579,FR
-2988525580,2988525583,GB
-2988525584,2988525631,PL
-2988525632,2988525647,ES
-2988525648,2988525651,GB
-2988525652,2988525659,FR
-2988525660,2988525663,DE
-2988525664,2988525775,FR
-2988525776,2988525779,LT
-2988525780,2988525783,PL
-2988525784,2988525791,FR
-2988525792,2988525807,PL
-2988525808,2988525811,ES
-2988525812,2988525815,PL
-2988525816,2988525819,ES
-2988525820,2988525823,IT
-2988525824,2988525843,FR
-2988525844,2988525847,ES
-2988525848,2988525851,IT
-2988525852,2988525855,DE
-2988525856,2988525887,FR
-2988525888,2988525951,FI
-2988525952,2988525967,IT
-2988525968,2988525983,FR
-2988525984,2988525991,FI
-2988525992,2988526043,FR
-2988526044,2988526047,NL
-2988526048,2988526079,FR
-2988526080,2988526083,GB
-2988526084,2988526087,FR
-2988526088,2988526091,IT
-2988526092,2988526095,GB
-2988526096,2988526135,FR
-2988526136,2988526143,GB
-2988526144,2988526175,BE
-2988526176,2988526239,ES
-2988526240,2988526423,PL
-2988526424,2988526427,GB
-2988526428,2988526431,PL
-2988526432,2988526435,IT
-2988526436,2988526439,FR
-2988526440,2988526443,CH
-2988526444,2988526447,BE
-2988526448,2988526451,FR
-2988526452,2988526455,GB
-2988526456,2988526463,ES
-2988526464,2988526575,FR
-2988526576,2988526583,ES
-2988526584,2988526587,DE
-2988526588,2988526607,FR
-2988526608,2988526615,DE
-2988526616,2988526655,FR
-2988526656,2988526659,IT
-2988526660,2988526663,FI
-2988526664,2988526671,FR
-2988526672,2988526679,DE
-2988526680,2988526683,ES
-2988526684,2988526687,NL
-2988526688,2988526703,FR
-2988526704,2988526707,GB
-2988526708,2988526711,PL
-2988526712,2988526715,ES
-2988526716,2988526719,GB
-2988526720,2988526727,FR
-2988526728,2988526735,DE
-2988526736,2988526751,FR
-2988526752,2988526767,GB
-2988526768,2988526783,FR
-2988526784,2988526847,ES
-2988526848,2988526863,BE
-2988526864,2988526867,GB
-2988526868,2988526871,PT
-2988526872,2988526875,DE
-2988526876,2988526879,PL
-2988526880,2988526927,FR
-2988526928,2988526935,DE
-2988526936,2988526939,PL
-2988526940,2988526951,DE
-2988526952,2988526955,FR
-2988526956,2988526959,IT
-2988526960,2988526975,FR
-2988526976,2988526995,PL
-2988526996,2988527007,ES
-2988527008,2988527055,FR
-2988527056,2988527071,BE
-2988527072,2988527087,FR
-2988527088,2988527095,GB
-2988527096,2988527103,PL
-2988527104,2988527119,FR
-2988527120,2988527167,PL
-2988527168,2988527171,DE
-2988527172,2988527175,ES
-2988527176,2988527179,PT
-2988527180,2988527183,PL
-2988527184,2988527187,IT
-2988527188,2988527191,ES
-2988527192,2988527195,CZ
-2988527196,2988527199,DE
-2988527200,2988527207,NL
-2988527208,2988527211,CZ
-2988527212,2988527215,IE
-2988527216,2988527359,FR
-2988527360,2988527391,DE
-2988527392,2988527399,PL
-2988527400,2988527407,DE
-2988527408,2988527411,FR
-2988527412,2988527419,PL
-2988527420,2988527423,GB
-2988527424,2988527431,FR
-2988527432,2988527439,IT
-2988527440,2988527451,PL
-2988527452,2988527455,PT
-2988527456,2988527459,FR
-2988527460,2988527463,IE
-2988527464,2988527475,FR
-2988527476,2988527479,ES
-2988527480,2988527487,FR
-2988527488,2988527503,GB
-2988527504,2988527523,FR
-2988527524,2988527527,PL
-2988527528,2988527531,DE
-2988527532,2988527535,FR
-2988527536,2988527543,DE
-2988527544,2988527551,FR
-2988527552,2988527583,PL
-2988527584,2988527591,IT
-2988527592,2988527595,IE
-2988527596,2988527599,DE
-2988527600,2988527603,NL
-2988527604,2988527607,FR
-2988527608,2988527611,DE
-2988527612,2988527619,ES
-2988527620,2988527623,PL
-2988527624,2988527631,ES
-2988527632,2988527667,FR
-2988527668,2988527671,IE
-2988527672,2988527675,ES
-2988527676,2988527679,DE
-2988527680,2988527683,ES
-2988527684,2988527687,FR
-2988527688,2988527691,PL
-2988527692,2988527695,FR
-2988527696,2988527711,GB
-2988527712,2988527747,FR
-2988527748,2988527751,ES
-2988527752,2988527755,NL
-2988527756,2988527759,PL
-2988527760,2988527775,ES
-2988527776,2988527823,FR
-2988527824,2988527831,GB
+2988524288,2988525887,FR
+2988525888,2988525951,GB
+2988525952,2988526415,FR
+2988526416,2988526423,ES
+2988526424,2988527527,FR
+2988527528,2988527531,NL
+2988527532,2988527831,FR
2988527832,2988527839,ES
-2988527840,2988527843,FR
-2988527844,2988527847,NL
-2988527848,2988527851,LT
-2988527852,2988527855,GB
-2988527856,2988527871,FR
-2988527872,2988527887,IE
-2988527888,2988527895,FR
-2988527896,2988527899,PL
-2988527900,2988527903,FR
-2988527904,2988527935,ES
-2988527936,2988527967,DE
-2988527968,2988527983,PL
-2988527984,2988527999,FR
-2988528000,2988528007,IT
-2988528008,2988528011,ES
-2988528012,2988528015,FR
-2988528016,2988528063,IE
-2988528064,2988528071,GB
-2988528072,2988528079,FR
-2988528080,2988528095,ES
-2988528096,2988528115,FR
-2988528116,2988528119,PL
-2988528120,2988528123,PT
-2988528124,2988528127,FR
-2988528128,2988528159,GB
-2988528160,2988528179,ES
-2988528180,2988528183,FR
-2988528184,2988528187,PL
-2988528188,2988528191,FR
-2988528192,2988528207,IE
-2988528208,2988528215,FR
-2988528216,2988528219,IE
-2988528220,2988528223,BE
-2988528224,2988528227,FR
-2988528228,2988528231,IE
-2988528232,2988528235,GB
-2988528236,2988528239,FR
-2988528240,2988528259,GB
-2988528260,2988528263,PT
-2988528264,2988528267,PL
-2988528268,2988528271,GB
-2988528272,2988528275,ES
-2988528276,2988528279,IT
-2988528280,2988528287,DE
-2988528288,2988528303,GB
-2988528304,2988528351,FR
-2988528352,2988528383,DE
-2988528384,2988528391,PL
-2988528392,2988528399,CH
-2988528400,2988528419,FR
-2988528420,2988528423,DE
-2988528424,2988528431,NL
-2988528432,2988528435,FR
-2988528436,2988528439,PL
-2988528440,2988528455,FR
-2988528456,2988528459,GB
-2988528460,2988528463,ES
-2988528464,2988528467,DE
-2988528468,2988528471,GB
-2988528472,2988528475,ES
-2988528476,2988528479,DE
-2988528480,2988528483,NL
-2988528484,2988528487,ES
-2988528488,2988528495,FR
-2988528496,2988528511,IT
-2988528512,2988528639,FR
-2988528640,2988528643,BE
-2988528644,2988528647,PL
-2988528648,2988528651,GB
-2988528652,2988528655,FR
-2988528656,2988528659,NL
-2988528660,2988528663,PL
-2988528664,2988528671,FR
-2988528672,2988528679,CH
-2988528680,2988528695,FR
-2988528696,2988528699,NL
-2988528700,2988528735,IE
-2988528736,2988528751,FR
-2988528752,2988528755,CH
-2988528756,2988528759,PL
-2988528760,2988528767,GB
-2988528768,2988528771,PL
-2988528772,2988528783,FR
-2988528784,2988528787,ES
-2988528788,2988528791,FR
-2988528792,2988528795,DE
-2988528796,2988528799,GB
-2988528800,2988528863,FR
-2988528864,2988528867,DE
-2988528868,2988528871,FR
-2988528872,2988528879,GB
-2988528880,2988529151,FR
-2988529152,2988529159,IT
-2988529160,2988529163,PL
-2988529164,2988529167,DE
-2988529168,2988529171,IE
-2988529172,2988529175,PT
-2988529176,2988529179,ES
-2988529180,2988529199,FR
-2988529200,2988529207,PL
-2988529208,2988529247,FR
-2988529248,2988529251,GB
-2988529252,2988529255,DE
-2988529256,2988529263,IT
-2988529264,2988529267,BE
-2988529268,2988529271,PL
-2988529272,2988529275,FR
-2988529276,2988529279,ES
-2988529280,2988529295,LT
-2988529296,2988529311,IT
-2988529312,2988529315,PL
-2988529316,2988529319,DE
-2988529320,2988529323,ES
-2988529324,2988529327,PL
-2988529328,2988529331,DE
-2988529332,2988529335,GB
-2988529336,2988529339,PT
-2988529340,2988529343,DE
-2988529344,2988529351,FR
+2988527840,2988527887,FR
+2988527888,2988527891,ES
+2988527892,2988529351,FR
2988529352,2988529359,GB
-2988529360,2988529375,IT
+2988529360,2988529375,FR
2988529376,2988529383,GB
-2988529384,2988529387,NL
-2988529388,2988529391,FR
-2988529392,2988529407,PL
-2988529408,2988529411,IT
-2988529412,2988529415,NL
-2988529416,2988529419,PT
-2988529420,2988529423,CH
-2988529424,2988529431,DE
-2988529432,2988529435,NL
-2988529436,2988529439,FR
-2988529440,2988529455,PL
-2988529456,2988529535,FR
-2988529536,2988529567,FI
-2988529568,2988529583,FR
-2988529584,2988529591,ES
-2988529592,2988529599,FR
-2988529600,2988529607,IT
-2988529608,2988529631,FR
-2988529632,2988529647,LT
-2988529648,2988529663,CH
-2988529664,2988529667,PL
-2988529668,2988529671,FR
-2988529672,2988529675,CZ
-2988529676,2988529703,FR
-2988529704,2988529707,DE
-2988529708,2988529759,FR
-2988529760,2988529763,PL
-2988529764,2988529767,DE
-2988529768,2988529771,GB
-2988529772,2988529775,DE
-2988529776,2988529783,ES
-2988529784,2988529787,FR
-2988529788,2988529791,PL
-2988529792,2988529799,IE
-2988529800,2988529803,DE
-2988529804,2988529807,CH
-2988529808,2988529823,FR
-2988529824,2988529855,ES
-2988529856,2988529887,FR
-2988529888,2988529891,DE
-2988529892,2988529895,PL
-2988529896,2988529899,FR
-2988529900,2988529903,PT
-2988529904,2988529907,PL
-2988529908,2988529911,PT
-2988529912,2988529915,CZ
-2988529916,2988529919,DE
-2988529920,2988529935,GB
-2988529936,2988529939,CH
-2988529940,2988529943,GB
-2988529944,2988529947,ES
-2988529948,2988529951,DE
-2988529952,2988529955,GB
-2988529956,2988529959,FR
-2988529960,2988529983,GB
-2988529984,2988529999,PL
-2988530000,2988530003,FR
-2988530004,2988530007,GB
-2988530008,2988530031,FR
-2988530032,2988530035,CH
-2988530036,2988530043,DE
-2988530044,2988530047,NL
-2988530048,2988530063,GB
-2988530064,2988530071,BE
-2988530072,2988530079,NL
-2988530080,2988530095,FR
-2988530096,2988530099,PL
-2988530100,2988530191,FR
-2988530192,2988530207,IT
-2988530208,2988530239,PL
-2988530240,2988530271,FR
-2988530272,2988530303,IE
-2988530304,2988530307,DE
-2988530308,2988530311,PL
-2988530312,2988530319,CH
-2988530320,2988530323,FR
-2988530324,2988530327,CZ
-2988530328,2988530335,FR
-2988530336,2988530351,ES
-2988530352,2988530367,FR
-2988530368,2988530371,ES
-2988530372,2988530379,FR
-2988530380,2988530383,CH
-2988530384,2988530391,FR
-2988530392,2988530395,PT
-2988530396,2988530399,GB
-2988530400,2988530403,ES
-2988530404,2988530423,PL
-2988530424,2988530431,ES
-2988530432,2988530687,DE
-2988530688,2988530695,IT
-2988530696,2988530703,PL
-2988530704,2988530735,FR
-2988530736,2988530739,IE
-2988530740,2988530743,NL
-2988530744,2988530751,PL
-2988530752,2988530847,FR
-2988530848,2988530851,DE
-2988530852,2988530863,ES
-2988530864,2988530867,PL
-2988530868,2988530879,FR
-2988530880,2988530895,DE
-2988530896,2988530927,FR
-2988530928,2988530943,FI
-2988530944,2988530975,FR
-2988530976,2988531007,PL
-2988531008,2988531015,DE
-2988531016,2988531019,NL
-2988531020,2988531023,IE
-2988531024,2988531027,ES
-2988531028,2988531031,FR
-2988531032,2988531039,PL
-2988531040,2988531047,FR
-2988531048,2988531051,GB
-2988531052,2988531075,FR
-2988531076,2988531079,GB
-2988531080,2988531083,FR
-2988531084,2988531087,CZ
-2988531088,2988531103,FR
-2988531104,2988531107,DE
-2988531108,2988531135,FR
-2988531136,2988531151,BE
-2988531152,2988531171,PL
-2988531172,2988531175,BE
-2988531176,2988531183,GB
-2988531184,2988531187,CZ
-2988531188,2988531191,IE
-2988531192,2988531199,FR
-2988531200,2988531231,ES
-2988531232,2988531247,IT
-2988531248,2988531259,PL
-2988531260,2988531267,GB
-2988531268,2988531271,FR
-2988531272,2988531279,ES
-2988531280,2988531287,PT
-2988531288,2988531291,FR
-2988531292,2988531295,DE
-2988531296,2988531311,IE
-2988531312,2988531315,FR
-2988531316,2988531319,NL
-2988531320,2988531323,PT
-2988531324,2988531327,GB
-2988531328,2988531343,IE
-2988531344,2988531351,GB
-2988531352,2988531359,PL
-2988531360,2988531391,FR
-2988531392,2988531399,PL
-2988531400,2988531403,DE
-2988531404,2988531407,FR
-2988531408,2988531423,PL
-2988531424,2988531427,BE
-2988531428,2988531451,FR
-2988531452,2988531455,GB
-2988531456,2988535807,FR
+2988529384,2988529387,ES
+2988529388,2988535807,FR
2988535808,2988537855,ES
-2988537856,2988539935,FR
-2988539936,2988539967,GB
-2988539968,2988539971,ES
-2988539972,2988539975,IT
-2988539976,2988539983,FR
-2988539984,2988540003,PL
-2988540004,2988540007,CZ
-2988540008,2988540019,FR
-2988540020,2988540023,GB
-2988540024,2988540207,FR
-2988540208,2988540211,GB
-2988540212,2988540219,FR
-2988540220,2988540223,GB
-2988540224,2988540231,NL
-2988540232,2988540235,GB
-2988540236,2988540239,ES
-2988540240,2988540247,FR
-2988540248,2988540251,GB
-2988540252,2988540255,FR
-2988540256,2988540271,PL
-2988540272,2988540275,DE
-2988540276,2988540279,PL
-2988540280,2988540287,FR
-2988540288,2988540303,BE
-2988540304,2988540363,FR
-2988540364,2988540367,PL
-2988540368,2988540379,FR
-2988540380,2988540383,PL
-2988540384,2988540415,FR
-2988540416,2988540427,PL
-2988540428,2988540431,FR
-2988540432,2988540435,PL
-2988540436,2988540439,FR
-2988540440,2988540447,PL
-2988540448,2988540451,IT
-2988540452,2988540455,FR
-2988540456,2988540463,IT
-2988540464,2988540467,PL
-2988540468,2988540471,GB
-2988540472,2988540483,FR
-2988540484,2988540491,PL
-2988540492,2988540499,FR
-2988540500,2988540503,CZ
-2988540504,2988540507,PL
-2988540508,2988540511,DE
-2988540512,2988540607,FR
-2988540608,2988540623,BE
-2988540624,2988540631,GB
-2988540632,2988540635,DE
-2988540636,2988540639,PT
-2988540640,2988540647,CZ
-2988540648,2988540651,FR
-2988540652,2988540667,PL
-2988540668,2988540671,IT
-2988540672,2988540679,ES
-2988540680,2988540683,PL
-2988540684,2988540707,FR
-2988540708,2988540711,PL
-2988540712,2988540715,FR
-2988540716,2988540719,PL
-2988540720,2988540735,DE
-2988540736,2988540767,ES
-2988540768,2988540775,PL
-2988540776,2988540787,BE
-2988540788,2988540795,FR
-2988540796,2988540799,GB
-2988540800,2988540831,FR
-2988540832,2988540839,PL
-2988540840,2988540847,GB
-2988540848,2988540855,FR
-2988540856,2988540863,IT
-2988540864,2988540931,FR
-2988540932,2988540939,ES
-2988540940,2988540943,FR
-2988540944,2988540959,GB
-2988540960,2988540975,FR
-2988540976,2988540991,GB
-2988540992,2988541087,FR
-2988541088,2988541103,BE
-2988541104,2988541119,ES
-2988541120,2988541131,FR
-2988541132,2988541135,DE
-2988541136,2988541143,GB
-2988541144,2988541215,FR
-2988541216,2988541231,CZ
-2988541232,2988541243,FR
-2988541244,2988541247,GB
-2988541248,2988541255,NL
-2988541256,2988541263,FR
-2988541264,2988541279,IT
-2988541280,2988541311,NL
-2988541312,2988541315,ES
-2988541316,2988541319,IE
-2988541320,2988541327,FR
-2988541328,2988541335,PL
-2988541336,2988541343,FR
-2988541344,2988541347,GB
-2988541348,2988541351,IT
-2988541352,2988541355,IE
-2988541356,2988541363,ES
-2988541364,2988541367,FR
-2988541368,2988541371,PL
-2988541372,2988541375,GB
-2988541376,2988541391,IT
-2988541392,2988541399,FR
-2988541400,2988541403,GB
-2988541404,2988541407,CH
-2988541408,2988541423,BE
-2988541424,2988541439,DE
-2988541440,2988541443,IT
-2988541444,2988541447,FR
-2988541448,2988541455,ES
-2988541456,2988541463,FR
-2988541464,2988541467,ES
-2988541468,2988541503,FR
-2988541504,2988541519,CH
-2988541520,2988541539,FR
-2988541540,2988541543,GB
-2988541544,2988541547,FR
-2988541548,2988541551,ES
-2988541552,2988541575,FR
-2988541576,2988541579,ES
-2988541580,2988541583,FR
-2988541584,2988541587,ES
-2988541588,2988541603,FR
-2988541604,2988541607,NL
-2988541608,2988541611,GB
-2988541612,2988541615,IT
-2988541616,2988541619,BE
-2988541620,2988541655,FR
-2988541656,2988541663,ES
-2988541664,2988541679,FR
-2988541680,2988541683,BE
-2988541684,2988541687,DE
-2988541688,2988541691,ES
-2988541692,2988541695,IT
-2988541696,2988541727,PL
-2988541728,2988541731,NL
-2988541732,2988541735,PL
-2988541736,2988541743,NL
-2988541744,2988541759,FR
-2988541760,2988541763,BE
-2988541764,2988541767,FR
-2988541768,2988541775,PL
-2988541776,2988541779,CH
-2988541780,2988541791,FR
-2988541792,2988541807,GB
-2988541808,2988541815,PL
-2988541816,2988541819,ES
-2988541820,2988541823,CZ
-2988541824,2988541859,FR
-2988541860,2988541863,PL
-2988541864,2988541867,DE
-2988541868,2988541887,FR
-2988541888,2988541895,DE
-2988541896,2988541899,PL
-2988541900,2988541903,BE
-2988541904,2988541907,CZ
-2988541908,2988541911,GB
-2988541912,2988541927,PL
-2988541928,2988541935,LT
-2988541936,2988541943,FR
-2988541944,2988541947,GB
-2988541948,2988541951,ES
-2988541952,2988541955,GB
-2988541956,2988541959,DE
-2988541960,2988541963,CH
-2988541964,2988541967,DE
-2988541968,2988541999,FR
-2988542000,2988542003,PL
-2988542004,2988542007,DE
-2988542008,2988542011,FI
-2988542012,2988542015,CH
-2988542016,2988542019,GB
-2988542020,2988542023,FR
-2988542024,2988542027,NL
-2988542028,2988542031,PL
-2988542032,2988542047,FR
-2988542048,2988542051,DE
-2988542052,2988542055,ES
-2988542056,2988542063,FR
-2988542064,2988542067,GB
-2988542068,2988542071,ES
-2988542072,2988542255,FR
-2988542256,2988542271,IT
-2988542272,2988542343,ES
-2988542344,2988542347,PL
-2988542348,2988542351,IT
-2988542352,2988542359,FR
-2988542360,2988542367,IT
-2988542368,2988542399,CZ
-2988542400,2988542403,FI
-2988542404,2988542407,PL
-2988542408,2988542411,LT
-2988542412,2988542415,PL
-2988542416,2988542431,FR
-2988542432,2988542439,PL
-2988542440,2988542443,ES
-2988542444,2988542459,FR
-2988542460,2988542495,ES
-2988542496,2988542511,FR
-2988542512,2988542515,BE
-2988542516,2988542527,FR
-2988542528,2988542535,DE
-2988542536,2988542539,NL
-2988542540,2988542543,LT
-2988542544,2988542551,DE
-2988542552,2988542559,ES
-2988542560,2988542591,FR
-2988542592,2988542595,PT
-2988542596,2988542599,FI
-2988542600,2988542603,GB
-2988542604,2988542611,FR
-2988542612,2988542615,DE
-2988542616,2988542623,PT
-2988542624,2988542627,DE
-2988542628,2988542651,FR
-2988542652,2988542655,DE
-2988542656,2988542719,BE
-2988542720,2988542783,CH
-2988542784,2988542847,CZ
-2988542848,2988542911,DE
-2988542912,2988542919,PT
-2988542920,2988542923,PL
-2988542924,2988542935,FR
-2988542936,2988542939,IT
-2988542940,2988542943,GB
-2988542944,2988542959,DE
-2988542960,2988542963,PL
-2988542964,2988542967,GB
-2988542968,2988542975,DE
-2988542976,2988542983,CH
-2988542984,2988542987,FR
-2988542988,2988542991,BE
-2988542992,2988543007,NL
-2988543008,2988543011,PL
-2988543012,2988543015,FR
-2988543016,2988543023,IE
-2988543024,2988543039,DE
-2988543040,2988543047,GB
-2988543048,2988543051,PL
-2988543052,2988543055,FR
-2988543056,2988543059,PL
-2988543060,2988543067,FR
-2988543068,2988543071,PL
-2988543072,2988543103,FR
-2988543104,2988543167,GB
-2988543168,2988543171,PL
-2988543172,2988543179,FR
-2988543180,2988543183,ES
-2988543184,2988543191,CH
-2988543192,2988543195,IT
-2988543196,2988543199,PL
-2988543200,2988543203,GB
-2988543204,2988543207,FR
-2988543208,2988543211,PL
-2988543212,2988543215,GB
-2988543216,2988543231,FR
-2988543232,2988543235,GB
-2988543236,2988543239,FR
-2988543240,2988543243,PL
-2988543244,2988543247,IT
-2988543248,2988543251,FR
-2988543252,2988543255,ES
-2988543256,2988543263,PL
-2988543264,2988543279,ES
-2988543280,2988543295,DE
-2988543296,2988543299,ES
-2988543300,2988543303,FR
-2988543304,2988543307,ES
-2988543308,2988543311,PL
-2988543312,2988543315,FR
-2988543316,2988543319,IE
-2988543320,2988543323,FI
-2988543324,2988543327,PL
-2988543328,2988543379,FR
-2988543380,2988543383,PL
-2988543384,2988543399,DE
-2988543400,2988543403,GB
-2988543404,2988543407,ES
-2988543408,2988543411,PL
-2988543412,2988543415,FR
-2988543416,2988543419,CH
-2988543420,2988543423,PL
-2988543424,2988543431,DE
-2988543432,2988543439,GB
-2988543440,2988543447,FR
-2988543448,2988543451,BE
-2988543452,2988543455,PL
-2988543456,2988543459,NL
-2988543460,2988543487,FR
-2988543488,2988543495,DE
-2988543496,2988543499,CH
-2988543500,2988543503,NL
-2988543504,2988543519,ES
-2988543520,2988543527,FR
-2988543528,2988543535,GB
-2988543536,2988543551,DE
-2988543552,2988543555,CH
-2988543556,2988543559,BE
-2988543560,2988543563,PT
-2988543564,2988543575,FR
-2988543576,2988543579,FI
-2988543580,2988543583,FR
-2988543584,2988543615,DE
-2988543616,2988543743,FR
-2988543744,2988543775,CH
-2988543776,2988543839,FR
-2988543840,2988543871,GB
-2988543872,2988543935,ES
-2988543936,2988543947,PL
-2988543948,2988543951,BE
-2988543952,2988543959,GB
-2988543960,2988543999,FR
-2988544000,2988544003,GB
-2988544004,2988544007,PL
-2988544008,2988544011,FR
-2988544012,2988544015,PT
-2988544016,2988544031,FR
-2988544032,2988544035,CH
-2988544036,2988544039,FR
-2988544040,2988544043,DE
-2988544044,2988544047,GB
-2988544048,2988544055,FR
-2988544056,2988544063,FI
-2988544064,2988544127,FR
-2988544128,2988544159,GB
-2988544160,2988544163,FR
-2988544164,2988544167,PL
-2988544168,2988544175,GB
-2988544176,2988544179,CH
-2988544180,2988544187,PL
-2988544188,2988544191,FR
-2988544192,2988544227,ES
-2988544228,2988544231,DE
-2988544232,2988544271,FR
-2988544272,2988544275,PL
-2988544276,2988544279,FR
-2988544280,2988544283,GB
-2988544284,2988544287,CZ
-2988544288,2988544291,PL
-2988544292,2988544295,GB
-2988544296,2988544303,FR
-2988544304,2988544307,IT
-2988544308,2988544311,GB
-2988544312,2988544319,FR
-2988544320,2988544323,PL
-2988544324,2988544327,FR
-2988544328,2988544331,PL
-2988544332,2988544335,ES
-2988544336,2988544355,FR
-2988544356,2988544359,DE
-2988544360,2988544367,FR
-2988544368,2988544371,ES
-2988544372,2988544375,FR
-2988544376,2988544383,ES
-2988544384,2988544447,GB
-2988544448,2988544479,FR
-2988544480,2988544511,PL
-2988544512,2988544527,FR
-2988544528,2988544535,ES
-2988544536,2988544543,FR
-2988544544,2988544639,ES
-2988544640,2988544647,PL
-2988544648,2988544655,FR
-2988544656,2988544663,ES
-2988544664,2988544667,DE
-2988544668,2988544671,ES
+2988537856,2988539971,FR
+2988539972,2988539975,ES
+2988539976,2988540503,FR
+2988540504,2988540507,NL
+2988540508,2988544671,FR
2988544672,2988544687,GB
2988544688,2988544691,NL
-2988544692,2988544767,FR
-2988544768,2988544775,ES
-2988544776,2988544783,NL
-2988544784,2988544787,FR
-2988544788,2988544791,PL
-2988544792,2988544799,PT
-2988544800,2988544831,FI
-2988544832,2988544863,PT
-2988544864,2988544895,PL
-2988544896,2988544927,FR
-2988544928,2988544931,DE
-2988544932,2988544935,FR
-2988544936,2988544943,GB
-2988544944,2988544951,PT
-2988544952,2988544959,GB
-2988544960,2988544979,ES
-2988544980,2988544983,FR
-2988544984,2988544987,ES
-2988544988,2988544991,FR
-2988544992,2988544995,PL
-2988544996,2988544999,FR
-2988545000,2988545007,DE
-2988545008,2988545011,FR
-2988545012,2988545019,DE
-2988545020,2988545027,FR
-2988545028,2988545031,IT
-2988545032,2988545039,PL
-2988545040,2988545047,ES
-2988545048,2988545051,FR
-2988545052,2988545055,PL
-2988545056,2988545067,GB
-2988545068,2988545071,ES
-2988545072,2988545151,FR
-2988545152,2988545167,PL
-2988545168,2988545171,DE
-2988545172,2988545175,FR
-2988545176,2988545183,PL
-2988545184,2988545215,FR
-2988545216,2988545223,PT
-2988545224,2988545227,PL
-2988545228,2988545247,FR
-2988545248,2988545287,PL
-2988545288,2988545291,FR
-2988545292,2988545295,DE
-2988545296,2988545331,FR
-2988545332,2988545343,DE
-2988545344,2988545367,FR
-2988545368,2988545371,DE
-2988545372,2988545375,GB
-2988545376,2988545383,DE
-2988545384,2988545387,ES
-2988545388,2988545391,FR
-2988545392,2988545395,DE
-2988545396,2988545439,FR
-2988545440,2988545443,DE
-2988545444,2988545447,ES
-2988545448,2988545455,PL
-2988545456,2988545503,FR
-2988545504,2988545511,DE
-2988545512,2988545515,IT
-2988545516,2988545519,FR
-2988545520,2988545523,PL
-2988545524,2988545527,FR
-2988545528,2988545531,PL
-2988545532,2988545551,FR
-2988545552,2988545555,ES
-2988545556,2988545559,IT
-2988545560,2988545563,FR
-2988545564,2988545571,DE
-2988545572,2988545579,FR
-2988545580,2988545583,ES
-2988545584,2988545599,IT
-2988545600,2988545631,DE
-2988545632,2988545663,FR
-2988545664,2988545695,ES
-2988545696,2988545795,FR
-2988545796,2988545807,ES
-2988545808,2988545815,FR
-2988545816,2988545823,NL
-2988545824,2988545831,FR
-2988545832,2988545835,GB
-2988545836,2988545839,DE
-2988545840,2988545855,FR
-2988545856,2988545859,ES
-2988545860,2988545863,FR
-2988545864,2988545871,PL
-2988545872,2988545903,FR
-2988545904,2988545919,IT
-2988545920,2988545923,NL
-2988545924,2988545927,PL
-2988545928,2988545931,BE
-2988545932,2988545935,PL
-2988545936,2988545943,GB
-2988545944,2988545947,CZ
-2988545948,2988545971,FR
-2988545972,2988545975,DE
-2988545976,2988545979,NL
-2988545980,2988545983,DE
-2988545984,2988545987,FR
-2988545988,2988545991,PL
-2988545992,2988545995,LT
-2988545996,2988545999,FI
-2988546000,2988546015,GB
-2988546016,2988546031,FR
-2988546032,2988546035,ES
-2988546036,2988546039,BE
-2988546040,2988546047,FR
-2988546048,2988546111,PL
-2988546112,2988546119,FR
-2988546120,2988546123,IE
-2988546124,2988546143,GB
-2988546144,2988546159,PL
-2988546160,2988546175,ES
-2988546176,2988546239,GB
-2988546240,2988546271,LT
-2988546272,2988546279,IT
-2988546280,2988546283,FR
-2988546284,2988546287,BE
-2988546288,2988546291,GB
-2988546292,2988546295,FR
-2988546296,2988546299,PL
-2988546300,2988546307,ES
-2988546308,2988546311,GB
-2988546312,2988546315,FR
-2988546316,2988546319,PL
-2988546320,2988546327,IT
-2988546328,2988546335,ES
-2988546336,2988546351,CH
-2988546352,2988546367,ES
-2988546368,2988546431,PT
-2988546432,2988546439,FR
-2988546440,2988546443,DE
-2988546444,2988546451,FR
-2988546452,2988546463,ES
-2988546464,2988546527,FR
-2988546528,2988546535,BE
-2988546536,2988546543,FR
-2988546544,2988546547,PL
-2988546548,2988546551,FR
-2988546552,2988546555,DE
-2988546556,2988546559,ES
-2988546560,2988546567,PL
-2988546568,2988546571,GB
-2988546572,2988546575,DE
-2988546576,2988546579,ES
-2988546580,2988546583,GB
-2988546584,2988546591,DE
-2988546592,2988546595,PL
-2988546596,2988546599,ES
-2988546600,2988546603,PT
-2988546604,2988546607,GB
-2988546608,2988546615,NL
-2988546616,2988546619,FI
-2988546620,2988546623,IT
-2988546624,2988546687,FI
-2988546688,2988546699,FR
-2988546700,2988546703,IT
-2988546704,2988546719,DE
-2988546720,2988546731,FR
-2988546732,2988546735,DE
-2988546736,2988546815,FR
-2988546816,2988546819,PT
-2988546820,2988546823,NL
-2988546824,2988546831,FR
-2988546832,2988546835,DE
-2988546836,2988546839,ES
-2988546840,2988546847,FR
-2988546848,2988546851,PT
-2988546852,2988546855,FR
-2988546856,2988546863,PL
-2988546864,2988546867,CH
-2988546868,2988546871,PL
-2988546872,2988546875,GB
-2988546876,2988546879,IE
-2988546880,2988546947,ES
-2988546948,2988546951,DE
-2988546952,2988546955,FR
-2988546956,2988546959,NL
-2988546960,2988546963,CH
-2988546964,2988546967,GB
-2988546968,2988546971,FR
-2988546972,2988546975,BE
-2988546976,2988546991,FI
-2988546992,2988546995,DE
-2988546996,2988546999,ES
-2988547000,2988547003,IT
-2988547004,2988547007,ES
-2988547008,2988547011,PL
-2988547012,2988547015,FR
-2988547016,2988547019,NL
-2988547020,2988547023,ES
-2988547024,2988547039,FR
-2988547040,2988547047,ES
-2988547048,2988547055,PL
-2988547056,2988547059,IT
-2988547060,2988547063,FR
-2988547064,2988547067,GB
-2988547068,2988547071,PL
-2988547072,2988547087,IE
-2988547088,2988547095,FR
-2988547096,2988547099,GB
-2988547100,2988547103,IE
-2988547104,2988547111,FR
-2988547112,2988547115,PL
-2988547116,2988547123,FR
-2988547124,2988547127,IT
-2988547128,2988547135,FR
-2988547136,2988547167,IT
-2988547168,2988547179,FR
-2988547180,2988547183,PL
-2988547184,2988547191,ES
-2988547192,2988547195,DE
-2988547196,2988547199,PL
-2988547200,2988547207,IE
-2988547208,2988547211,ES
-2988547212,2988547215,GB
-2988547216,2988547223,FR
-2988547224,2988547227,GB
-2988547228,2988547239,FR
-2988547240,2988547243,PL
-2988547244,2988547247,DE
-2988547248,2988547255,NL
-2988547256,2988547263,FR
-2988547264,2988547267,GB
-2988547268,2988547271,ES
-2988547272,2988547275,BE
-2988547276,2988547311,FR
-2988547312,2988547327,PL
-2988547328,2988547423,FR
-2988547424,2988547431,GB
-2988547432,2988547435,ES
-2988547436,2988547443,PL
-2988547444,2988547447,DE
-2988547448,2988547451,FR
-2988547452,2988547455,PT
-2988547456,2988547471,ES
-2988547472,2988547475,LT
-2988547476,2988547487,GB
-2988547488,2988547507,FR
-2988547508,2988547511,NL
-2988547512,2988547515,FR
-2988547516,2988547519,CH
-2988547520,2988547523,NL
-2988547524,2988547527,CZ
-2988547528,2988547531,IT
-2988547532,2988547535,ES
-2988547536,2988547539,FR
-2988547540,2988547543,DE
-2988547544,2988547547,BE
-2988547548,2988547551,FR
-2988547552,2988547567,NL
-2988547568,2988547583,DE
-2988547584,2988547599,ES
-2988547600,2988547619,FR
-2988547620,2988547623,PT
-2988547624,2988547627,FR
-2988547628,2988547631,PL
-2988547632,2988547655,FR
+2988544692,2988546727,FR
+2988546728,2988546731,ES
+2988546732,2988547067,FR
+2988547068,2988547071,ES
+2988547072,2988547095,FR
+2988547096,2988547099,ES
+2988547100,2988547655,FR
2988547656,2988547663,PL
-2988547664,2988547679,FR
-2988547680,2988547683,PL
-2988547684,2988547687,FR
-2988547688,2988547691,PL
-2988547692,2988547695,CZ
-2988547696,2988547703,ES
-2988547704,2988547711,IT
-2988547712,2988547751,FR
-2988547752,2988547759,ES
-2988547760,2988547775,FR
-2988547776,2988547807,ES
-2988547808,2988547815,GB
-2988547816,2988547823,CH
-2988547824,2988547831,FR
-2988547832,2988547839,ES
-2988547840,2988547855,DE
-2988547856,2988547871,NL
+2988547664,2988547871,FR
2988547872,2988547903,GB
-2988547904,2988547935,FR
-2988547936,2988547967,LT
-2988547968,2988547971,GB
-2988547972,2988547975,DE
-2988547976,2988547983,PL
-2988547984,2988548015,FR
+2988547904,2988548015,FR
2988548016,2988548019,ES
-2988548020,2988548023,GB
-2988548024,2988548047,FR
-2988548048,2988548051,PL
-2988548052,2988548055,FR
-2988548056,2988548063,PL
-2988548064,2988550151,ES
-2988550152,2988550155,NL
-2988550156,2988550159,GB
-2988550160,2988550163,PT
-2988550164,2988550167,GB
-2988550168,2988550171,FR
-2988550172,2988550175,CH
-2988550176,2988550179,ES
-2988550180,2988550191,FR
-2988550192,2988550199,DE
-2988550200,2988550207,FR
-2988550208,2988550231,GB
-2988550232,2988550239,PL
-2988550240,2988550247,FR
-2988550248,2988550251,PL
-2988550252,2988550255,FR
-2988550256,2988550259,ES
-2988550260,2988550319,FR
-2988550320,2988550335,PL
-2988550336,2988550355,FR
-2988550356,2988550359,GB
-2988550360,2988550363,PL
-2988550364,2988550367,NL
-2988550368,2988550399,IT
-2988550400,2988550403,FR
-2988550404,2988550407,NL
-2988550408,2988550411,GB
-2988550412,2988550415,FR
-2988550416,2988550423,DE
-2988550424,2988550431,FR
-2988550432,2988550434,GB
-2988550435,2988550435,GB
-2988550436,2988550447,GB
-2988550448,2988550451,CH
-2988550452,2988550463,FR
-2988550464,2988550495,GB
-2988550496,2988550527,PT
-2988550528,2988550591,FR
-2988550592,2988550595,DE
-2988550596,2988550599,PT
-2988550600,2988550603,PL
-2988550604,2988550607,DE
-2988550608,2988550615,CH
-2988550616,2988550619,FR
-2988550620,2988550623,LT
-2988550624,2988550627,FR
-2988550628,2988550631,CH
-2988550632,2988550643,FR
-2988550644,2988550647,ES
-2988550648,2988550655,PL
-2988550656,2988550671,DE
-2988550672,2988550679,CZ
-2988550680,2988550683,PL
-2988550684,2988550687,FR
-2988550688,2988550695,LT
-2988550696,2988550699,GB
-2988550700,2988550703,ES
-2988550704,2988550719,NL
-2988550720,2988550751,PT
-2988550752,2988550783,NL
-2988550784,2988550847,FR
-2988550848,2988550863,PL
-2988550864,2988550887,FR
-2988550888,2988550895,PT
-2988550896,2988550903,PL
-2988550904,2988550911,FR
-2988550912,2988550927,LT
-2988550928,2988550951,FR
-2988550952,2988550955,PL
-2988550956,2988550959,FR
-2988550960,2988550963,GB
-2988550964,2988550967,FR
-2988550968,2988550975,ES
-2988550976,2988551007,FR
-2988551008,2988551039,PL
-2988551040,2988551087,FR
-2988551088,2988551091,NL
-2988551092,2988551095,PL
-2988551096,2988551099,DE
-2988551100,2988551135,FR
-2988551136,2988551167,CH
-2988551168,2988551171,PL
-2988551172,2988551175,FI
-2988551176,2988551179,ES
-2988551180,2988551183,GB
-2988551184,2988551199,ES
-2988551200,2988551215,IT
-2988551216,2988551231,FR
-2988551232,2988551263,IT
-2988551264,2988551295,FR
-2988551296,2988551299,PL
-2988551300,2988551303,FR
-2988551304,2988551307,NL
-2988551308,2988551319,FR
-2988551320,2988551323,PL
-2988551324,2988551327,GB
-2988551328,2988551343,FR
-2988551344,2988551359,DE
-2988551360,2988551423,FR
-2988551424,2988551427,LT
-2988551428,2988551439,FR
-2988551440,2988551447,GB
-2988551448,2988551451,ES
-2988551452,2988551455,PT
-2988551456,2988551471,GB
-2988551472,2988551475,FR
-2988551476,2988551487,IE
-2988551488,2988551511,PL
-2988551512,2988551535,ES
-2988551536,2988551543,FR
-2988551544,2988551547,GB
-2988551548,2988551551,DE
-2988551552,2988551567,PL
-2988551568,2988551583,IE
-2988551584,2988551603,FR
-2988551604,2988551607,NL
-2988551608,2988551615,IT
-2988551616,2988551631,ES
-2988551632,2988551635,FR
-2988551636,2988551643,IT
-2988551644,2988551647,FR
-2988551648,2988551651,DE
-2988551652,2988551655,FR
-2988551656,2988551663,ES
-2988551664,2988551671,GB
-2988551672,2988551743,FR
-2988551744,2988551759,PT
-2988551760,2988551775,FR
-2988551776,2988551807,PL
-2988551808,2988551903,FR
-2988551904,2988551911,GB
-2988551912,2988551915,IT
-2988551916,2988551919,DE
-2988551920,2988551923,FR
-2988551924,2988551927,PT
-2988551928,2988551935,FR
-2988551936,2988552191,GB
-2988552192,2988552319,NL
-2988552320,2988552447,FR
-2988552448,2988552479,GB
-2988552480,2988552511,CH
-2988552512,2988552551,BE
-2988552552,2988552559,IE
-2988552560,2988552563,FR
-2988552564,2988552567,IE
-2988552568,2988552579,FR
-2988552580,2988552583,DE
-2988552584,2988552587,FR
-2988552588,2988552591,PL
-2988552592,2988552595,FI
-2988552596,2988552599,DE
-2988552600,2988552603,FR
-2988552604,2988552611,GB
-2988552612,2988552615,FR
-2988552616,2988552619,GB
-2988552620,2988552623,PL
-2988552624,2988552627,FR
-2988552628,2988552631,CZ
-2988552632,2988552635,IE
-2988552636,2988552643,FR
-2988552644,2988552647,GB
-2988552648,2988552651,PT
-2988552652,2988552703,FR
-2988552704,2988552711,ES
-2988552712,2988552715,PT
-2988552716,2988552719,FR
-2988552720,2988552735,DE
-2988552736,2988552751,FR
-2988552752,2988552767,ES
-2988552768,2988552771,DE
-2988552772,2988552775,PL
-2988552776,2988552779,FR
-2988552780,2988552783,PL
-2988552784,2988552787,GB
-2988552788,2988552791,FR
-2988552792,2988552795,DE
-2988552796,2988552799,GB
-2988552800,2988552831,FR
-2988552832,2988552839,BE
-2988552840,2988552847,DE
-2988552848,2988552863,FR
-2988552864,2988552879,NL
-2988552880,2988552887,FR
-2988552888,2988552891,PL
-2988552892,2988552895,FR
-2988552896,2988552911,CZ
-2988552912,2988552915,FR
-2988552916,2988552919,DE
-2988552920,2988552959,FR
-2988552960,2988552975,ES
-2988552976,2988552991,FR
-2988552992,2988552995,ES
-2988552996,2988552999,CH
-2988553000,2988553003,FR
-2988553004,2988553007,GB
-2988553008,2988553023,IE
-2988553024,2988553087,LT
-2988553088,2988553119,PL
-2988553120,2988553135,ES
-2988553136,2988553151,FR
-2988553152,2988553159,ES
-2988553160,2988553171,FR
-2988553172,2988553175,NL
-2988553176,2988553179,IT
-2988553180,2988553199,FR
-2988553200,2988553215,BE
-2988553216,2988553235,FR
-2988553236,2988553239,PL
-2988553240,2988553247,FR
-2988553248,2988553251,PL
-2988553252,2988553255,FR
-2988553256,2988553263,CH
-2988553264,2988553279,FR
-2988553280,2988553283,ES
-2988553284,2988553287,NL
-2988553288,2988553295,ES
-2988553296,2988553299,FR
-2988553300,2988553303,PL
-2988553304,2988553311,BE
-2988553312,2988553315,ES
-2988553316,2988553319,PL
-2988553320,2988553327,IT
-2988553328,2988553335,GB
-2988553336,2988553343,FR
-2988553344,2988553359,IE
-2988553360,2988553367,FR
-2988553368,2988553375,DE
-2988553376,2988553399,FR
-2988553400,2988553403,ES
-2988553404,2988553407,GB
-2988553408,2988553411,LT
-2988553412,2988553415,IT
-2988553416,2988553423,BE
-2988553424,2988553439,FR
-2988553440,2988553447,CZ
-2988553448,2988553451,FR
-2988553452,2988553455,ES
-2988553456,2988553487,FR
-2988553488,2988553495,PL
-2988553496,2988553503,CH
-2988553504,2988553511,FR
-2988553512,2988553519,PT
-2988553520,2988553527,GB
-2988553528,2988553531,CH
-2988553532,2988553551,FR
-2988553552,2988553567,PL
-2988553568,2988553575,FR
-2988553576,2988553579,CH
-2988553580,2988553583,ES
-2988553584,2988553599,FR
-2988553600,2988553607,GB
-2988553608,2988553631,FR
-2988553632,2988553639,PL
-2988553640,2988553643,IE
-2988553644,2988553647,FR
-2988553648,2988553651,NL
-2988553652,2988553663,FR
-2988553664,2988553679,LT
-2988553680,2988553695,FR
-2988553696,2988553727,PT
-2988553728,2988553735,PL
-2988553736,2988553739,DE
-2988553740,2988553743,PL
-2988553744,2988553747,ES
-2988553748,2988553751,FI
-2988553752,2988553755,PL
-2988553756,2988553775,FR
-2988553776,2988553783,PT
-2988553784,2988553791,FR
-2988553792,2988553807,GB
-2988553808,2988553823,NL
-2988553824,2988553855,IT
-2988553856,2988553919,BE
-2988553920,2988553923,GB
-2988553924,2988553927,ES
-2988553928,2988553931,FR
-2988553932,2988553935,PL
-2988553936,2988553951,FR
-2988553952,2988553955,ES
-2988553956,2988553959,PL
-2988553960,2988553967,FR
-2988553968,2988553971,PL
-2988553972,2988553975,ES
-2988553976,2988554015,DE
-2988554016,2988554031,BE
-2988554032,2988554035,FR
-2988554036,2988554039,PL
-2988554040,2988554043,BE
-2988554044,2988554075,FR
-2988554076,2988554079,CH
-2988554080,2988554127,FR
-2988554128,2988554131,IT
-2988554132,2988554167,FR
-2988554168,2988554171,PL
-2988554172,2988554175,IE
-2988554176,2988554223,FR
-2988554224,2988554239,IT
-2988554240,2988554495,ES
-2988554496,2988554499,FR
-2988554500,2988554511,PL
-2988554512,2988554519,BE
-2988554520,2988554523,DE
-2988554524,2988554527,FR
-2988554528,2988554531,DE
-2988554532,2988554539,FR
-2988554540,2988554543,GB
-2988554544,2988554555,FR
-2988554556,2988554559,DE
-2988554560,2988554623,IT
-2988554624,2988554687,PL
-2988554688,2988554751,FR
-2988554752,2988554783,FI
-2988554784,2988554787,DE
-2988554788,2988554791,PL
-2988554792,2988554795,FR
-2988554796,2988554799,IT
-2988554800,2988554807,GB
-2988554808,2988554815,FR
-2988554816,2988554879,GB
-2988554880,2988554919,FR
-2988554920,2988554923,PL
-2988554924,2988554927,PT
-2988554928,2988554931,DE
-2988554932,2988554935,ES
-2988554936,2988554939,GB
-2988554940,2988554943,FR
-2988554944,2988555007,GB
-2988555008,2988555047,FR
-2988555048,2988555051,PL
-2988555052,2988555055,FR
-2988555056,2988555063,FI
-2988555064,2988555071,FR
-2988555072,2988555075,CH
-2988555076,2988555079,DE
-2988555080,2988555087,NL
-2988555088,2988555091,FI
-2988555092,2988555099,FR
-2988555100,2988555103,IT
-2988555104,2988555107,GB
-2988555108,2988555111,IT
-2988555112,2988555123,FR
-2988555124,2988555127,IT
-2988555128,2988555131,ES
-2988555132,2988555135,GB
-2988555136,2988555151,FR
-2988555152,2988555159,NL
-2988555160,2988555163,PL
-2988555164,2988555167,IE
-2988555168,2988555183,ES
-2988555184,2988555187,GB
-2988555188,2988555191,NL
-2988555192,2988555199,PL
-2988555200,2988555203,NL
-2988555204,2988555207,FR
-2988555208,2988555211,NL
-2988555212,2988555215,DE
-2988555216,2988555519,FR
-2988555520,2988555527,IE
-2988555528,2988555531,DE
-2988555532,2988555535,FR
-2988555536,2988555543,ES
-2988555544,2988555551,FR
-2988555552,2988555559,DE
-2988555560,2988555647,FR
-2988555648,2988555711,GB
-2988555712,2988555715,PL
-2988555716,2988555719,ES
-2988555720,2988555727,FR
-2988555728,2988555731,PT
-2988555732,2988555735,PL
-2988555736,2988555743,ES
-2988555744,2988556031,FR
-2988556032,2988556095,DE
-2988556096,2988556099,FR
-2988556100,2988556103,PL
-2988556104,2988556111,DE
-2988556112,2988556115,PL
-2988556116,2988556123,FR
-2988556124,2988556127,NL
-2988556128,2988556159,FR
-2988556160,2988556175,NL
-2988556176,2988556179,DE
-2988556180,2988556183,IT
-2988556184,2988556187,GB
-2988556188,2988556191,ES
-2988556192,2988556195,NL
-2988556196,2988556199,CH
-2988556200,2988556203,CZ
-2988556204,2988556207,FI
+2988548020,2988548095,FR
+2988548096,2988550143,ES
+2988550144,2988550359,FR
+2988550360,2988550363,ES
+2988550364,2988550438,FR
+2988550439,2988550439,GB
+2988550440,2988550463,FR
+2988550464,2988550527,DE
+2988550528,2988551443,FR
+2988551444,2988551447,ES
+2988551448,2988551535,FR
+2988551536,2988551551,DE
+2988551552,2988553531,FR
+2988553532,2988553535,ES
+2988553536,2988554035,FR
+2988554036,2988554039,ES
+2988554040,2988555527,FR
+2988555528,2988555531,ES
+2988555532,2988556207,FR
2988556208,2988556211,DE
-2988556212,2988556215,FR
-2988556216,2988556219,DE
-2988556220,2988556223,PL
-2988556224,2988556227,ES
-2988556228,2988556231,FR
-2988556232,2988556239,PL
-2988556240,2988556243,DE
-2988556244,2988556251,FR
-2988556252,2988556255,CZ
-2988556256,2988556259,ES
-2988556260,2988556263,FR
-2988556264,2988556271,GB
-2988556272,2988556275,CH
-2988556276,2988556279,FR
-2988556280,2988556283,PL
-2988556284,2988556287,GB
-2988556288,2988556295,PL
-2988556296,2988556303,FR
-2988556304,2988556311,PL
-2988556312,2988556315,FR
-2988556316,2988556319,DE
-2988556320,2988556351,GB
-2988556352,2988556355,FR
-2988556356,2988556359,CZ
-2988556360,2988556363,DE
-2988556364,2988556383,FR
-2988556384,2988556415,DE
-2988556416,2988556419,IT
-2988556420,2988556427,FR
-2988556428,2988556431,ES
-2988556432,2988556447,PL
-2988556448,2988556451,NL
-2988556452,2988556455,PL
-2988556456,2988556463,FR
-2988556464,2988556479,GB
-2988556480,2988556483,IT
-2988556484,2988556487,FR
-2988556488,2988556491,PL
-2988556492,2988556495,DE
-2988556496,2988556539,FR
-2988556540,2988556543,BE
-2988556544,2988556799,DE
-2988556800,2988556831,FR
-2988556832,2988556839,DE
-2988556840,2988556847,FR
-2988556848,2988556855,ES
-2988556856,2988556871,GB
-2988556872,2988556879,FR
-2988556880,2988556883,ES
-2988556884,2988556887,DE
-2988556888,2988556891,BE
-2988556892,2988556895,FR
-2988556896,2988556911,PL
-2988556912,2988556919,NL
-2988556920,2988556927,PL
-2988556928,2988556943,FR
-2988556944,2988556959,BE
-2988556960,2988556963,PL
-2988556964,2988556967,FR
-2988556968,2988556975,BE
-2988556976,2988556979,PL
-2988556980,2988556999,FR
-2988557000,2988557003,BE
-2988557004,2988557007,ES
-2988557008,2988557015,FR
-2988557016,2988557023,DE
-2988557024,2988557039,IE
-2988557040,2988557043,PT
-2988557044,2988557047,BE
-2988557048,2988557051,PL
-2988557052,2988557055,FR
-2988557056,2988557059,ES
-2988557060,2988557063,FR
-2988557064,2988557071,ES
-2988557072,2988557075,PL
-2988557076,2988557079,FR
-2988557080,2988557087,FI
-2988557088,2988557095,PT
-2988557096,2988557103,ES
-2988557104,2988557111,FR
-2988557112,2988557115,LT
-2988557116,2988557151,NL
-2988557152,2988557215,FR
-2988557216,2988557247,BE
-2988557248,2988557251,FR
-2988557252,2988557255,ES
-2988557256,2988557259,FR
-2988557260,2988557263,DE
-2988557264,2988557279,GB
-2988557280,2988557287,ES
-2988557288,2988557291,PL
-2988557292,2988557295,FR
-2988557296,2988557299,BE
-2988557300,2988557303,PL
-2988557304,2988557311,CZ
-2988557312,2988557327,DE
-2988557328,2988557343,ES
-2988557344,2988557359,FR
-2988557360,2988557375,PL
-2988557376,2988557379,FR
-2988557380,2988557383,PL
-2988557384,2988557387,GB
-2988557388,2988557391,CH
-2988557392,2988557399,PL
-2988557400,2988557403,ES
-2988557404,2988557407,IT
-2988557408,2988557427,ES
-2988557428,2988557431,DE
-2988557432,2988557435,PL
-2988557436,2988557439,ES
-2988557440,2988557471,GB
-2988557472,2988557487,PL
-2988557488,2988557491,FI
-2988557492,2988557495,FR
-2988557496,2988557503,PL
-2988557504,2988557511,FR
-2988557512,2988557515,GB
-2988557516,2988557519,PL
-2988557520,2988557523,FR
-2988557524,2988557531,PL
-2988557532,2988557535,DE
-2988557536,2988557543,PL
-2988557544,2988557551,GB
-2988557552,2988557599,FR
-2988557600,2988557631,IT
-2988557632,2988557635,GB
-2988557636,2988557639,PT
-2988557640,2988557643,IE
-2988557644,2988557647,GB
-2988557648,2988557651,NL
-2988557652,2988557655,FR
-2988557656,2988557663,DE
-2988557664,2988557695,PL
-2988557696,2988557727,FR
-2988557728,2988557759,PL
-2988557760,2988557763,DE
-2988557764,2988557767,ES
-2988557768,2988557771,PL
-2988557772,2988557775,FR
-2988557776,2988557791,BE
-2988557792,2988557951,FR
-2988557952,2988557983,LT
-2988557984,2988557999,NL
-2988558000,2988558015,IE
-2988558016,2988558047,FR
-2988558048,2988558063,PL
-2988558064,2988558067,DE
-2988558068,2988558071,FI
-2988558072,2988558075,DE
-2988558076,2988558079,PL
-2988558080,2988558083,FR
-2988558084,2988558087,PL
-2988558088,2988558095,FR
-2988558096,2988558103,PL
-2988558104,2988558115,IE
-2988558116,2988558123,GB
-2988558124,2988558127,FR
-2988558128,2988558131,DE
-2988558132,2988558135,PL
-2988558136,2988558139,GB
-2988558140,2988558143,DE
-2988558144,2988558191,FR
-2988558192,2988558199,CZ
-2988558200,2988558203,PL
+2988556212,2988556359,FR
+2988556360,2988556363,ES
+2988556364,2988557507,FR
+2988557508,2988557511,ES
+2988557512,2988557539,FR
+2988557540,2988557543,ES
+2988557544,2988558203,FR
2988558204,2988558207,DE
-2988558208,2988558271,ES
-2988558272,2988558335,FI
-2988558336,2988558399,IE
-2988558400,2988558463,LT
-2988558464,2988558527,NL
-2988558528,2988558591,PL
-2988558592,2988558655,GB
-2988558656,2988558719,FR
-2988558720,2988558727,PL
-2988558728,2988558731,IT
-2988558732,2988558735,PT
-2988558736,2988558743,ES
-2988558744,2988558747,FR
-2988558748,2988558767,GB
-2988558768,2988558783,CH
-2988558784,2988558799,FR
-2988558800,2988558803,IT
-2988558804,2988558807,FR
-2988558808,2988558811,BE
-2988558812,2988558815,FR
-2988558816,2988558831,PT
-2988558832,2988558847,IT
-2988558848,2988558863,FR
-2988558864,2988558879,NL
-2988558880,2988558883,FR
-2988558884,2988558887,BE
-2988558888,2988558891,GB
-2988558892,2988558895,NL
-2988558896,2988558899,CH
-2988558900,2988558903,FR
-2988558904,2988558907,NL
-2988558908,2988558911,PT
-2988558912,2988558927,LT
-2988558928,2988558935,GB
-2988558936,2988558939,ES
-2988558940,2988558943,GB
-2988558944,2988558975,FR
-2988558976,2988559007,GB
-2988559008,2988559011,BE
-2988559012,2988559015,PL
-2988559016,2988559023,DE
-2988559024,2988559043,FR
-2988559044,2988559047,NL
-2988559048,2988559051,FR
-2988559052,2988559055,CZ
-2988559056,2988559059,NL
-2988559060,2988559063,LT
-2988559064,2988559071,FR
-2988559072,2988559135,ES
-2988559136,2988559139,DE
-2988559140,2988559147,PL
-2988559148,2988559151,GB
-2988559152,2988559263,FR
-2988559264,2988559295,LT
-2988559296,2988559359,PL
-2988559360,2988559615,FR
-2988559616,2988559619,ES
-2988559620,2988559631,FR
-2988559632,2988559663,IE
-2988559664,2988559679,ES
-2988559680,2988559687,NL
-2988559688,2988559691,FR
-2988559692,2988559695,PL
-2988559696,2988559703,FR
-2988559704,2988559707,DE
-2988559708,2988559723,FR
-2988559724,2988559727,IT
-2988559728,2988559731,DE
-2988559732,2988559735,FR
-2988559736,2988559743,ES
-2988559744,2988559807,FR
-2988559808,2988559871,ES
-2988559872,2988560383,IT
-2988560384,2988560387,FR
-2988560388,2988560391,ES
-2988560392,2988560395,GB
-2988560396,2988560399,FR
-2988560400,2988560415,IE
-2988560416,2988560431,FR
-2988560432,2988560439,CH
-2988560440,2988560443,DE
-2988560444,2988560447,PL
-2988560448,2988560451,FR
-2988560452,2988560455,PL
-2988560456,2988560459,FR
-2988560460,2988560463,CH
-2988560464,2988560479,PL
-2988560480,2988560515,ES
-2988560516,2988560519,FI
-2988560520,2988560527,FR
-2988560528,2988560535,ES
-2988560536,2988560543,IE
-2988560544,2988560575,GB
-2988560576,2988560579,IT
-2988560580,2988560587,ES
-2988560588,2988560595,FR
-2988560596,2988560599,IT
-2988560600,2988560603,PL
-2988560604,2988560623,FR
-2988560624,2988560627,PL
-2988560628,2988560631,FR
-2988560632,2988560635,IE
-2988560636,2988560639,FR
-2988560640,2988560703,GB
-2988560704,2988560711,DE
-2988560712,2988560719,PL
-2988560720,2988560751,DE
-2988560752,2988560759,FR
-2988560760,2988560767,FI
-2988560768,2988560783,FR
-2988560784,2988560799,NL
-2988560800,2988560815,DE
-2988560816,2988560831,FR
-2988560832,2988560863,GB
-2988560864,2988560871,PL
-2988560872,2988560895,GB
-2988560896,2988560911,FR
-2988560912,2988560919,ES
-2988560920,2988560923,DE
-2988560924,2988560935,FR
-2988560936,2988560939,NL
-2988560940,2988560975,FR
-2988560976,2988560991,PL
-2988560992,2988560995,FR
-2988560996,2988560999,PL
-2988561000,2988561031,FR
-2988561032,2988561039,ES
-2988561040,2988561043,GB
-2988561044,2988561047,DE
-2988561048,2988561051,PL
-2988561052,2988561055,GB
-2988561056,2988561059,FR
-2988561060,2988561071,PL
-2988561072,2988561075,ES
-2988561076,2988561079,FR
-2988561080,2988561083,PL
-2988561084,2988561087,GB
-2988561088,2988561091,FR
-2988561092,2988561095,LT
-2988561096,2988561099,NL
-2988561100,2988561103,CZ
-2988561104,2988561119,BE
-2988561120,2988561171,FR
-2988561172,2988561175,PL
-2988561176,2988561179,ES
-2988561180,2988561183,NL
-2988561184,2988561187,GB
-2988561188,2988561191,FR
-2988561192,2988561195,CZ
-2988561196,2988561199,LT
-2988561200,2988561203,BE
-2988561204,2988561207,GB
-2988561208,2988561215,PL
-2988561216,2988561231,FR
-2988561232,2988561235,PT
-2988561236,2988561239,GB
-2988561240,2988561255,PL
-2988561256,2988561259,ES
-2988561260,2988561283,FR
-2988561284,2988561287,NL
-2988561288,2988561291,ES
-2988561292,2988561295,PT
-2988561296,2988561303,GB
-2988561304,2988561343,FR
-2988561344,2988561375,PL
-2988561376,2988561391,FR
-2988561392,2988561403,ES
-2988561404,2988561407,LT
-2988561408,2988561423,IE
-2988561424,2988561431,PL
-2988561432,2988561519,FR
-2988561520,2988561535,PT
-2988561536,2988561543,FR
-2988561544,2988561547,PL
-2988561548,2988561551,FR
-2988561552,2988561567,PL
-2988561568,2988561575,FR
-2988561576,2988561579,PL
-2988561580,2988561583,FR
+2988558208,2988558803,FR
+2988558804,2988558807,ES
+2988558808,2988561583,FR
2988561584,2988561591,GB
-2988561592,2988561595,FR
-2988561596,2988561599,PL
-2988561600,2988561631,NL
-2988561632,2988561663,PL
-2988561664,2988561667,GB
-2988561668,2988561671,DE
-2988561672,2988561675,NL
-2988561676,2988561679,FI
-2988561680,2988561683,FR
-2988561684,2988561687,ES
-2988561688,2988561691,DE
-2988561692,2988561695,LT
-2988561696,2988561727,GB
-2988561728,2988561743,PL
-2988561744,2988561747,FR
-2988561748,2988561751,DE
-2988561752,2988561755,FR
-2988561756,2988561759,PL
-2988561760,2988561763,LT
-2988561764,2988561767,PT
-2988561768,2988561843,FR
-2988561844,2988561847,IT
-2988561848,2988561855,FR
-2988561856,2988561871,IE
-2988561872,2988561875,CH
-2988561876,2988561879,FR
-2988561880,2988561887,FR
-2988561888,2988561903,PL
-2988561904,2988561983,FR
-2988561984,2988562015,DE
-2988562016,2988562023,ES
-2988562024,2988562027,PL
-2988562028,2988562031,LT
-2988562032,2988562047,PL
-2988562048,2988562079,DE
-2988562080,2988562095,FR
-2988562096,2988562111,IE
-2988562112,2988562115,NL
-2988562116,2988562127,FR
-2988562128,2988562143,ES
-2988562144,2988562151,FR
-2988562152,2988562159,IT
-2988562160,2988562163,PL
-2988562164,2988562167,DE
-2988562168,2988562175,IT
-2988562176,2988562431,NL
-2988562432,2988562567,FR
-2988562568,2988562575,CH
-2988562576,2988562583,PL
-2988562584,2988562587,FR
-2988562588,2988562591,IT
-2988562592,2988562599,GB
-2988562600,2988562607,FR
-2988562608,2988562611,PT
-2988562612,2988562623,FR
-2988562624,2988562687,FI
-2988562688,2988562703,NL
-2988562704,2988562707,FR
-2988562708,2988562711,DE
-2988562712,2988562719,FR
-2988562720,2988562815,BE
-2988562816,2988562823,PL
-2988562824,2988562831,PT
-2988562832,2988562835,FR
-2988562836,2988562839,NL
-2988562840,2988562843,IT
-2988562844,2988562847,PL
+2988561592,2988561763,FR
+2988561764,2988561767,IT
+2988561768,2988562847,FR
2988562848,2988562863,GB
-2988562864,2988562911,FR
-2988562912,2988562943,PL
-2988562944,2988563011,FR
-2988563012,2988563015,PT
-2988563016,2988563023,GB
-2988563024,2988563043,FR
-2988563044,2988563047,ES
-2988563048,2988563055,FR
-2988563056,2988563059,NL
-2988563060,2988563063,CH
-2988563064,2988563067,FI
-2988563068,2988563075,PT
-2988563076,2988563079,GB
-2988563080,2988563083,DE
-2988563084,2988563087,FR
-2988563088,2988563091,PL
-2988563092,2988563099,GB
-2988563100,2988563135,FR
-2988563136,2988563151,PL
-2988563152,2988563183,FR
-2988563184,2988563187,CZ
-2988563188,2988563191,PL
-2988563192,2988563199,FR
-2988563200,2988563455,IE
-2988563456,2988563487,FR
-2988563488,2988563499,GB
-2988563500,2988563503,FR
-2988563504,2988563519,PL
-2988563520,2988563523,CZ
-2988563524,2988563527,FI
-2988563528,2988563535,PL
-2988563536,2988563555,FR
-2988563556,2988563559,BE
-2988563560,2988563567,FR
-2988563568,2988563571,NL
-2988563572,2988563583,GB
-2988563584,2988563591,ES
-2988563592,2988563599,GB
-2988563600,2988563607,ES
-2988563608,2988563615,DE
-2988563616,2988563647,FR
-2988563648,2988563663,LT
-2988563664,2988563667,FR
-2988563668,2988563671,PT
-2988563672,2988563675,FR
-2988563676,2988563679,NL
-2988563680,2988563967,FR
-2988563968,2988563999,BE
-2988564000,2988564003,PL
-2988564004,2988564007,BE
-2988564008,2988564011,FR
-2988564012,2988564015,IE
-2988564016,2988564019,ES
-2988564020,2988564031,PL
-2988564032,2988564063,BE
-2988564064,2988564143,FR
+2988562864,2988564143,FR
2988564144,2988564159,ES
-2988564160,2988564175,FR
-2988564176,2988564183,GB
-2988564184,2988564187,PL
-2988564188,2988564191,GB
-2988564192,2988564195,ES
-2988564196,2988564199,LT
-2988564200,2988564203,DE
-2988564204,2988564215,FR
-2988564216,2988564219,GB
-2988564220,2988564223,IT
-2988564224,2988564275,FR
-2988564276,2988564279,CH
-2988564280,2988564287,ES
-2988564288,2988564303,FR
-2988564304,2988564307,IT
-2988564308,2988564311,PL
-2988564312,2988564319,ES
-2988564320,2988564351,FR
-2988564352,2988564367,GB
-2988564368,2988564383,FR
-2988564384,2988564387,IE
-2988564388,2988564391,GB
-2988564392,2988564395,NL
-2988564396,2988564399,CH
-2988564400,2988564403,DE
-2988564404,2988564407,ES
-2988564408,2988564471,FR
-2988564472,2988564479,GB
-2988564480,2988572671,FR
+2988564160,2988572671,FR
2988572672,2988703743,RU
2988703744,2988834815,PL
2988834816,2988965887,CH
@@ -98407,43 +45459,28 @@
2989228032,2989490175,RU
2989490176,2989555711,HU
2989555712,2989621247,RU
-2989621248,2989640447,BE
-2989640448,2989640703,FR
-2989640704,2989752319,BE
+2989621248,2989752319,BE
2989752320,2989817855,SY
2989817856,2989883391,KW
2989883392,2989948927,UA
2989948928,2990014463,FI
2990014464,2990079999,PL
-2990080000,2990145535,RU
+2990080000,2990081023,UA
+2990081024,2990096383,GB
+2990096384,2990104575,RU
+2990104576,2990112767,GB
+2990112768,2990145535,RU
2990145536,2990211071,SI
2990211072,2990276607,GR
2990276608,2990342143,ES
-2990342144,2990385919,KW
-2990385920,2990386175,US
-2990386176,2990386687,KW
-2990386688,2990386943,US
-2990386944,2990407679,KW
-2990407680,2990473215,RU
+2990342144,2990407679,KW
+2990407680,2990440447,GB
+2990440448,2990473215,NL
2990473216,2990475674,DE
2990475675,2990475675,HR
2990475676,2990500113,DE
2990500114,2990500115,PL
-2990500116,2990505535,DE
-2990505536,2990505537,IT
-2990505538,2990505538,DE
-2990505539,2990505599,IT
-2990505600,2990515967,DE
-2990515968,2990515983,IT
-2990515984,2990517655,DE
-2990517656,2990517663,IT
-2990517664,2990518015,DE
-2990518016,2990518079,IT
-2990518080,2990528703,DE
-2990528704,2990528735,RS
-2990528736,2990534655,DE
-2990534656,2990534687,EG
-2990534688,2990538751,DE
+2990500116,2990538751,DE
2990538752,2991063039,RU
2991063040,2991067135,SE
2991067136,2991071231,DK
@@ -98454,185 +45491,9 @@
2991128576,2991144959,PL
2991144960,2991161343,SA
2991161344,2991177727,FR
-2991177728,2991178751,SE
-2991178752,2991179263,SE
-2991179264,2991179327,SE
-2991179328,2991182591,SE
-2991182592,2991182847,SE
-2991182848,2991182943,SE
-2991182944,2991182975,SE
-2991182976,2991183071,SE
-2991183072,2991183103,SE
-2991183104,2991183871,SE
-2991183872,2991185919,SE
-2991185920,2991185951,GB
-2991185952,2991185967,NL
-2991185968,2991185983,DE
-2991185984,2991185999,DK
-2991186000,2991186015,ES
-2991186016,2991186019,FR
-2991186020,2991186175,SE
-2991186176,2991186207,GB
-2991186208,2991186223,NL
-2991186224,2991186239,DE
-2991186240,2991186255,DK
-2991186256,2991186271,ES
-2991186272,2991186275,FR
-2991186276,2991186431,SE
-2991186432,2991186463,GB
-2991186464,2991186479,NL
-2991186480,2991186495,DE
-2991186496,2991186511,DK
-2991186512,2991186527,ES
-2991186528,2991186531,FR
-2991186532,2991186687,SE
-2991186688,2991186719,GB
-2991186720,2991186735,NL
-2991186736,2991186751,DE
-2991186752,2991186767,DK
-2991186768,2991186783,ES
-2991186784,2991186787,FR
-2991186788,2991186943,SE
-2991186944,2991186975,GB
-2991186976,2991186991,NL
-2991186992,2991187007,DE
-2991187008,2991187023,DK
-2991187024,2991187039,ES
-2991187040,2991187043,FR
-2991187044,2991187199,SE
-2991187200,2991187231,GB
-2991187232,2991187247,NL
-2991187248,2991187263,DE
-2991187264,2991187279,DK
-2991187280,2991187295,ES
-2991187296,2991187299,FR
-2991187300,2991187455,SE
-2991187456,2991187487,GB
-2991187488,2991187503,NL
-2991187504,2991187519,DE
-2991187520,2991187535,DK
-2991187536,2991187551,ES
-2991187552,2991187555,FR
-2991187556,2991187711,SE
-2991187712,2991187743,GB
-2991187744,2991187759,NL
-2991187760,2991187775,DE
-2991187776,2991187791,DK
-2991187792,2991187807,ES
-2991187808,2991187811,FR
-2991187812,2991187967,SE
-2991187968,2991187999,GB
-2991188000,2991188015,NL
-2991188016,2991188031,DE
-2991188032,2991188047,DK
-2991188048,2991188063,ES
-2991188064,2991188067,FR
-2991188068,2991188223,SE
-2991188224,2991188255,GB
-2991188256,2991188271,NL
-2991188272,2991188287,DE
-2991188288,2991188303,DK
-2991188304,2991188319,ES
-2991188320,2991188323,FR
-2991188324,2991188479,SE
-2991188480,2991188511,GB
-2991188512,2991188527,NL
-2991188528,2991188543,DE
-2991188544,2991188559,DK
-2991188560,2991188575,ES
-2991188576,2991188579,FR
-2991188580,2991188735,SE
-2991188736,2991188767,GB
-2991188768,2991188783,NL
-2991188784,2991188799,DE
-2991188800,2991188815,DK
-2991188816,2991188831,ES
-2991188832,2991188835,FR
-2991188836,2991188991,SE
-2991188992,2991189023,GB
-2991189024,2991189039,NL
-2991189040,2991189055,DE
-2991189056,2991189071,DK
-2991189072,2991189087,ES
-2991189088,2991189091,FR
-2991189092,2991189247,SE
-2991189248,2991189279,GB
-2991189280,2991189295,NL
-2991189296,2991189311,DE
-2991189312,2991189327,DK
-2991189328,2991189343,ES
-2991189344,2991189347,FR
-2991189348,2991189503,SE
-2991189504,2991189535,GB
-2991189536,2991189551,NL
-2991189552,2991189567,DE
-2991189568,2991189583,DK
-2991189584,2991189599,ES
-2991189600,2991189603,FR
-2991189604,2991189759,SE
-2991189760,2991189791,GB
-2991189792,2991189807,NL
-2991189808,2991189823,DE
-2991189824,2991189839,DK
-2991189840,2991189855,ES
-2991189856,2991189859,FR
-2991189860,2991190015,SE
-2991190016,2991190047,GB
-2991190048,2991190063,NL
-2991190064,2991190079,DE
-2991190080,2991190095,DK
-2991190096,2991190111,ES
-2991190112,2991190115,FR
-2991190116,2991190271,SE
-2991190272,2991190303,GB
-2991190304,2991190319,NL
-2991190320,2991190335,DE
-2991190336,2991190351,DK
-2991190352,2991190367,ES
-2991190368,2991190371,FR
-2991190372,2991190527,SE
-2991190528,2991190559,GB
-2991190560,2991190575,NL
-2991190576,2991190591,DE
-2991190592,2991190607,DK
-2991190608,2991190623,ES
-2991190624,2991190627,FR
-2991190628,2991190783,SE
-2991190784,2991190815,GB
-2991190816,2991190831,NL
-2991190832,2991190847,DE
-2991190848,2991190863,DK
-2991190864,2991190879,ES
-2991190880,2991190883,FR
-2991190884,2991191039,SE
-2991191040,2991191071,GB
-2991191072,2991191087,NL
-2991191088,2991191103,DE
-2991191104,2991191119,DK
-2991191120,2991191135,ES
-2991191136,2991191139,FR
-2991191140,2991191295,SE
-2991191296,2991191327,GB
-2991191328,2991191343,NL
-2991191344,2991191359,DE
-2991191360,2991191375,DK
-2991191376,2991191391,ES
-2991191392,2991191395,FR
-2991191396,2991191551,SE
-2991191552,2991191583,GB
-2991191584,2991191599,NL
-2991191600,2991191615,DE
-2991191616,2991191631,DK
-2991191632,2991191647,ES
-2991191648,2991191651,FR
-2991191652,2991191807,SE
-2991191808,2991192063,FI
-2991192064,2991192255,DK
-2991192256,2991192319,IT
-2991192320,2991193727,SE
-2991193728,2991193791,IT
-2991193792,2991193823,PL
-2991193824,2991194111,SE
+2991177728,2991179503,SE
+2991179504,2991179507,ES
+2991179508,2991194111,SE
2991194112,2991210495,NO
2991210496,2991243263,RU
2991243264,2991259647,UA
@@ -98641,7 +45502,7 @@
2991308800,2991325183,BG
2991325184,2991341567,AZ
2991341568,2991357951,MD
-2991357952,2991374335,US
+2991357952,2991374335,DE
2991374336,2991390719,RU
2991390720,2991407103,BA
2991407104,2991423487,DE
@@ -98654,44 +45515,11 @@
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,2991587071,IT
-2991587072,2991587327,BH
+2991570944,2991587327,IT
2991587328,2991718399,SA
2991718400,2991849471,CH
2991849472,2991980543,NL
-2991980544,2991980807,UA
-2991980808,2991980815,NA
-2991980816,2991981495,UA
-2991981496,2991981503,NA
-2991981504,2991982535,UA
-2991982536,2991982543,GL
-2991982544,2991982592,UA
-2991982593,2991982599,JP
-2991982600,2991982607,UA
-2991982608,2991982751,JP
-2991982752,2991982759,UA
-2991982760,2991982846,JP
-2991982847,2991983103,UA
-2991983104,2991983111,IN
-2991983112,2991983367,UA
-2991983368,2991983615,JP
-2991983616,2991985951,UA
-2991985952,2991985959,JP
-2991985960,2991985983,UA
-2991985984,2991986079,JP
-2991986080,2991986087,UA
-2991986088,2991986175,JP
-2991986176,2992111615,UA
+2991980544,2992111615,UA
2992111616,2992373759,KZ
2992373760,2992635903,UA
2992635904,2993684479,GB
@@ -98708,8 +45536,7 @@
2995007488,2995009535,TR
2995009536,2995011583,ES
2995011584,2995013631,DE
-2995013632,2995013887,MT
-2995013888,2995015679,SE
+2995013632,2995015679,SE
2995015680,2995017727,BG
2995017728,2995019775,IT
2995019776,2995021823,RU
@@ -98718,10 +45545,9 @@
2995044352,2995046399,ES
2995046400,2995048447,RU
2995048448,2995050495,NL
-2995050496,2995050561,AT
-2995050562,2995050562,RS
-2995050563,2995050751,AT
-2995050752,2995052543,AL
+2995050496,2995050561,AL
+2995050562,2995050562,XK
+2995050563,2995052543,AL
2995052544,2995056639,DK
2995056640,2995058687,DE
2995058688,2995060735,SE
@@ -98764,100 +45590,19 @@
2996809728,2996813823,UA
2996813824,2996817919,PL
2996817920,2996826111,UA
-2996826112,2996828160,BY
-2996828161,2996830208,RU
-2996830209,2996862975,HR
+2996826112,2996828159,BY
+2996828160,2996830207,RU
+2996830208,2996862975,HR
2996862976,2996895743,AM
2996895744,2996928511,KW
2996928512,2996994047,RU
-2996994048,2996994943,DE
-2996994944,2996995071,US
-2996995072,2996995327,BZ
-2996995328,2996995647,DE
-2996995648,2996995711,BZ
-2996995712,2996995775,BY
-2996995776,2996995839,RU
-2996995840,2996996073,DE
-2996996074,2996996074,DE
-2996996075,2996996287,DE
-2996996288,2996996351,RU
-2996996352,2996996383,DE
-2996996384,2996996447,RU
-2996996448,2996996575,UA
-2996996576,2996996639,DE
-2996996640,2996996767,UA
-2996996768,2996996831,RU
-2996996832,2996996863,DE
-2996996864,2996997119,CN
-2996997120,2996998143,DE
-2996998144,2996998271,UA
-2996998272,2996998527,DE
-2996998528,2996998655,UA
-2996998656,2996998719,DE
-2996998720,2996998911,RU
-2996998912,2996999359,DE
-2996999360,2996999423,IL
-2996999424,2996999551,IN
-2996999552,2996999679,DE
+2996994048,2996999679,DE
2996999680,2996999935,GB
-2996999936,2997000447,DE
-2997000448,2997000703,RU
-2997000704,2997001471,DE
-2997001472,2997001727,BZ
-2997001728,2997001983,TR
-2997001984,2997003071,DE
-2997003072,2997003135,RU
-2997003136,2997003199,DE
-2997003200,2997003263,RU
-2997003264,2997003287,DE
-2997003288,2997003295,NL
-2997003296,2997003327,DE
-2997003328,2997003391,RU
-2997003392,2997004031,DE
-2997004032,2997004287,BZ
-2997004288,2997004543,CA
-2997004544,2997004607,DE
+2996999936,2997004607,DE
2997004608,2997004671,RU
-2997004672,2997004799,DE
-2997004800,2997005055,BZ
-2997005056,2997005183,GB
-2997005184,2997005375,DE
-2997005376,2997005439,GR
-2997005440,2997005567,GB
-2997005568,2997005823,BZ
-2997005824,2997006335,DE
-2997006336,2997006591,TR
-2997006592,2997006655,DE
-2997006656,2997006719,TR
-2997006720,2997006847,RU
-2997006848,2997008255,DE
-2997008256,2997008383,LT
-2997008384,2997008447,DE
-2997008448,2997008511,RU
-2997008512,2997008639,LT
-2997008640,2997008959,DE
-2997008960,2997009023,RU
-2997009024,2997018623,DE
+2997004672,2997018623,DE
2997018624,2997019135,GB
-2997019136,2997019391,TR
-2997019392,2997019711,DE
-2997019712,2997019903,US
-2997019904,2997020719,DE
-2997020720,2997020735,SE
-2997020736,2997020799,DE
-2997020800,2997020863,CA
-2997020864,2997022079,DE
-2997022080,2997022143,GB
-2997022144,2997022239,DE
-2997022240,2997022303,NL
-2997022304,2997022367,SG
-2997022368,2997022751,DE
-2997022752,2997022783,TR
-2997022784,2997022847,DE
-2997022848,2997023231,BZ
-2997023232,2997024255,DE
-2997024256,2997024511,TR
-2997024512,2997026815,DE
+2997019136,2997026815,DE
2997026816,2997059583,RU
2997059584,2997092351,BY
2997092352,2997125119,NO
@@ -98871,9 +45616,7 @@
2997387264,2997420031,BY
2997420032,2997452799,RU
2997452800,2997485567,BG
-2997485568,2997486847,FR
-2997486848,2997486911,BH
-2997486912,2997506559,FR
+2997485568,2997506559,FR
2997506560,2997506815,GB
2997506816,2997507071,ES
2997507072,2997507327,IT
@@ -98893,60 +45636,16 @@
2997513352,2997513352,AT
2997513353,2997513353,NL
2997513354,2997513354,IE
-2997513355,2997518335,FR
-2997518336,2997528063,RU
-2997528064,2997528319,UA
-2997528320,2997583871,RU
+2997513355,2997515683,FR
+2997515684,2997515684,GB
+2997515685,2997518335,FR
+2997518336,2997583871,RU
2997583872,2997616639,SY
2997616640,2997649407,SI
2997649408,2997682175,BY
2997682176,2997714943,RU
2997714944,2997747711,IR
-2997747712,2997748479,DE
-2997748480,2997748735,AT
-2997748736,2997748991,CH
-2997748992,2997749119,GB
-2997749120,2997749247,IE
-2997749248,2997749375,FR
-2997749376,2997749503,ES
-2997749504,2997749631,PT
-2997749632,2997749759,IT
-2997749760,2997749887,PL
-2997749888,2997750015,CZ
-2997750016,2997750143,SK
-2997750144,2997750271,RU
-2997750272,2997750399,RO
-2997750400,2997750527,HU
-2997750528,2997750655,BA
-2997750656,2997750783,HR
-2997750784,2997750911,GR
-2997750912,2997751039,TR
-2997751040,2997751167,NO
-2997751168,2997751295,FI
-2997751296,2997751423,SE
-2997751424,2997751551,DK
-2997751552,2997751679,LI
-2997751680,2997751807,BE
-2997751808,2997751935,NL
-2997751936,2997752063,LU
-2997752064,2997752191,CA
-2997752192,2997752319,MX
-2997752320,2997752447,EE
-2997752448,2997752575,LV
-2997752576,2997752703,LT
-2997752704,2997752831,CN
-2997752832,2997752959,KR
-2997752960,2997753087,JP
-2997753088,2997753215,AU
-2997753216,2997753343,NZ
-2997753344,2997753471,VN
-2997753472,2997753599,BR
-2997753600,2997753727,TH
-2997753728,2997753855,IN
-2997753856,2997754655,US
-2997754656,2997754879,DE
-2997754880,2997754895,SG
-2997754896,2997780479,DE
+2997747712,2997780479,CH
2997780480,2997813247,SE
2997813248,2997817343,AL
2997817344,2997819391,RS
@@ -98954,44 +45653,28 @@
2997823488,2997825535,RS
2997825536,2997829631,AL
2997829632,2997846015,RS
-2997846016,2997847255,MD
-2997847256,2997847263,DE
-2997847264,2997847743,MD
-2997847744,2997847751,DE
-2997847752,2997847759,US
-2997847760,2997847767,CA
-2997847768,2997847775,KR
-2997847776,2997847783,JP
-2997847784,2997847791,CN
-2997847792,2997847799,RU
-2997847800,2997847807,PA
-2997847808,2997878783,MD
+2997846016,2997878783,MD
2997878784,2998140927,RU
2998140928,2998403071,PL
2998403072,2998665215,RU
2998665216,2998927359,AT
-2998927360,2999451647,CH
+2998927360,2998991615,CH
+2998991616,2998991871,DE
+2998991872,2999026943,CH
+2999026944,2999027071,DE
+2999027072,2999380223,CH
+2999380224,2999380479,DE
+2999380480,2999451647,CH
2999451648,2999713791,DE
2999713792,2999975935,RU
2999975936,2999984127,FR
-2999984128,2999985695,BE
-2999985696,2999985711,GB
-2999985712,2999985727,BE
-2999985728,2999985743,CZ
-2999985744,2999985759,NL
-2999985760,2999988991,BE
-2999988992,2999988999,FR
-2999989000,2999989007,BE
-2999989008,2999989119,NL
-2999989120,2999989247,FR
-2999989248,2999991039,BE
-2999991040,2999992319,NL
+2999984128,2999989005,NL
+2999989006,2999989006,BE
+2999989007,2999992319,NL
2999992320,3000000511,RU
3000000512,3000008703,DE
3000008704,3000016895,RU
-3000016896,3000020991,GB
-3000020992,3000023039,US
-3000023040,3000025087,GB
+3000016896,3000025087,GB
3000025088,3000033279,GI
3000033280,3000041471,RU
3000041472,3000049663,BA
@@ -99040,7 +45723,7 @@
3000301568,3000302591,RU
3000302592,3000303103,LV
3000303104,3000303359,CH
-3000303360,3000303615,DE
+3000303360,3000303615,PL
3000303616,3000305663,UA
3000305664,3000313855,RU
3000313856,3000315903,CZ
@@ -99139,14 +45822,11 @@
3000682496,3000684543,UZ
3000684544,3000688639,RU
3000688640,3000692735,PL
-3000692736,3000696831,UA
3000696832,3000700927,RS
3000700928,3000705023,PL
3000705024,3000709119,RU
3000709120,3000713215,AM
-3000713216,3000715519,IT
-3000715520,3000715775,US
-3000715776,3000717311,IT
+3000713216,3000717311,IT
3000717312,3000721407,UA
3000721408,3000733695,PL
3000733696,3000737791,RU
@@ -99166,57 +45846,14 @@
3001815040,3001819135,RU
3001819136,3001823231,IR
3001823232,3001827327,GE
-3001827328,3001827647,SE
-3001827648,3001827743,GB
-3001827744,3001827775,US
-3001827776,3001828864,SE
-3001828865,3001828896,US
-3001828897,3001828927,SE
-3001828928,3001828991,DE
-3001828992,3001829055,GB
-3001829056,3001829120,SE
-3001829121,3001829152,US
-3001829153,3001829183,SE
-3001829184,3001829247,DE
-3001829248,3001829311,GB
-3001829312,3001830400,SE
-3001830401,3001830432,GB
-3001830433,3001830495,SE
-3001830496,3001830527,GB
-3001830528,3001830559,IT
-3001830560,3001830591,FR
-3001830592,3001830623,US
-3001830624,3001830631,SE
-3001830632,3001830639,IT
-3001830640,3001830656,SE
-3001830657,3001830688,GB
-3001830689,3001830751,SE
-3001830752,3001830783,GB
-3001830784,3001830815,IT
-3001830816,3001830847,FR
-3001830848,3001830879,US
-3001830880,3001830887,SE
-3001830888,3001830895,IT
-3001830896,3001830912,SE
-3001830913,3001830944,GB
-3001830945,3001831007,SE
-3001831008,3001831039,GB
-3001831040,3001831071,IT
-3001831072,3001831103,FR
-3001831104,3001831135,US
-3001831136,3001831167,IT
-3001831168,3001831199,GB
-3001831200,3001831263,SE
-3001831264,3001831295,GB
-3001831296,3001831327,IT
-3001831328,3001831359,FR
-3001831360,3001831391,US
-3001831392,3001831423,SE
+3001827328,3001831423,SE
3001831424,3001835519,BA
3001835520,3001839615,RU
3001839616,3001843711,ES
-3001843712,3001846271,RU
-3001846272,3001846783,GB
+3001843712,3001845759,RU
+3001845760,3001846238,GB
+3001846239,3001846239,RU
+3001846240,3001846783,GB
3001846784,3001847807,RU
3001847808,3001851903,GB
3001851904,3001855999,IT
@@ -99227,112 +45864,13 @@
3001862144,3001863167,EE
3001863168,3001864191,LT
3001864192,3001868287,RU
-3001868288,3001868799,FR
-3001868800,3001868803,US
-3001868804,3001868807,CN
-3001868808,3001868811,JP
-3001868812,3001868815,DE
-3001868816,3001868819,FR
-3001868820,3001868823,GB
-3001868824,3001868827,BR
-3001868828,3001868831,IT
-3001868832,3001868835,FR
-3001868836,3001868839,IN
-3001868840,3001868843,RU
-3001868844,3001868847,ES
-3001868848,3001868851,AU
-3001868852,3001868855,MX
-3001868856,3001868859,KR
-3001868860,3001868863,FR
-3001868864,3001868867,TR
-3001868868,3001868871,ID
-3001868872,3001868875,CH
-3001868876,3001868879,PL
-3001868880,3001868883,BE
-3001868884,3001868887,SE
-3001868888,3001868891,SA
-3001868892,3001868895,TW
-3001868896,3001868899,SJ
-3001868900,3001868903,AT
-3001868904,3001868907,AR
-3001868908,3001868911,ZA
-3001868912,3001868915,IR
-3001868916,3001868919,TH
-3001868920,3001868923,DK
-3001868924,3001868927,GR
-3001868928,3001868931,AE
-3001868932,3001868935,VE
-3001868936,3001868939,CD
-3001868940,3001868943,FI
-3001868944,3001868947,MY
-3001868948,3001868951,PT
-3001868952,3001868955,HK
-3001868956,3001868959,SG
-3001868960,3001868963,EG
-3001868964,3001868967,NG
-3001868968,3001868971,IL
-3001868972,3001868975,IE
-3001868976,3001868979,CL
-3001868980,3001868983,CZ
-3001868984,3001868987,PH
-3001868988,3001868991,PK
-3001868992,3001868995,RO
-3001868996,3001868999,DZ
-3001869000,3001869003,PE
-3001869004,3001869007,NZ
-3001869008,3001869011,KZ
-3001869012,3001869015,UA
-3001869016,3001869019,KW
-3001869020,3001869023,QA
-3001869024,3001869027,HU
-3001869028,3001869031,BD
-3001869032,3001869035,VN
-3001869036,3001869039,MA
-3001869040,3001869043,SK
-3001869044,3001869047,AO
-3001869048,3001869051,IQ
-3001869052,3001869055,LY
-3001869056,3001869311,RU
-3001869312,3001869567,SA
-3001869568,3001869599,US
-3001869600,3001869600,FR
-3001869601,3001869696,IR
-3001869697,3001869823,YE
-3001869824,3001869887,US
-3001869888,3001870079,FR
-3001870080,3001870335,US
-3001870336,3001870591,IT
-3001870592,3001870847,FR
-3001870848,3001871103,DE
-3001871104,3001871359,ES
-3001871360,3001871615,GR
-3001871616,3001871871,PL
-3001871872,3001872127,PT
-3001872128,3001872383,RO
+3001868288,3001872383,FR
3001872384,3001876479,RU
3001876480,3001880575,IT
3001880576,3001884671,RU
-3001884672,3001884927,SE
-3001884928,3001885055,NL
-3001885056,3001885087,US
-3001885088,3001885439,NL
-3001885440,3001886463,BE
-3001886464,3001886511,NL
-3001886512,3001886527,US
-3001886528,3001886543,IE
-3001886544,3001886567,NL
-3001886568,3001886575,CY
-3001886576,3001886583,GE
-3001886584,3001888767,NL
+3001884672,3001888767,NL
3001888768,3001892863,BH
-3001892864,3001893247,AZ
-3001893248,3001893631,RU
-3001893632,3001894399,AZ
-3001894400,3001894655,RU
-3001894656,3001894911,AZ
-3001894912,3001895167,RU
-3001895168,3001896191,AZ
-3001896192,3001896959,RU
+3001892864,3001896959,AZ
3001896960,3001901055,CH
3001901056,3001905151,FR
3001905152,3001909247,GB
@@ -99342,7 +45880,6 @@
3001929728,3001933823,RS
3001933824,3001937919,ES
3001937920,3001942015,RU
-3001942016,3001946111,BY
3001946112,3001950207,RU
3001950208,3001954303,CZ
3001954304,3001958399,IT
@@ -99359,9 +45896,7 @@
3002003456,3002011647,PL
3002011648,3002015743,BA
3002015744,3002019839,IT
-3002019840,3002021567,NL
-3002021568,3002021599,US
-3002021600,3002023935,NL
+3002019840,3002023935,NL
3002023936,3002028031,DE
3002028032,3002036223,GB
3002036224,3002040319,BG
@@ -99371,16 +45906,14 @@
3002052608,3002056703,IT
3002056704,3002060799,FI
3002060800,3002064895,ES
-3002064896,3002065407,BG
-3002065408,3002065919,RS
-3002065920,3002068991,BG
+3002064896,3002065432,BG
+3002065433,3002065688,RS
+3002065689,3002068991,BG
3002068992,3002073087,ES
3002073088,3002597375,TR
3002597376,3002599423,RU
3002599424,3002601471,CZ
-3002601472,3002603055,IS
-3002603056,3002603070,SL
-3002603071,3002603519,IS
+3002601472,3002603519,IS
3002603520,3002605567,SE
3002605568,3002607615,GB
3002607616,3002609663,IR
@@ -99389,13 +45922,9 @@
3002613760,3002615807,RU
3002615808,3002617855,PL
3002617856,3002619903,RU
-3002619904,3002620023,IT
-3002620024,3002620031,GB
-3002620032,3002621951,IT
+3002619904,3002621951,IT
3002621952,3002623999,NO
-3002624000,3002626551,GB
-3002626552,3002626559,US
-3002626560,3002628095,GB
+3002624000,3002628095,GB
3002628096,3002630143,NO
3002630144,3002632191,GB
3002632192,3002634239,EE
@@ -99415,11 +45944,7 @@
3002662912,3002664959,DE
3002664960,3002667007,ES
3002667008,3002669055,GE
-3002669056,3002669199,DE
-3002669200,3002669207,CH
-3002669208,3002669951,DE
-3002669952,3002669983,US
-3002669984,3002671103,DE
+3002669056,3002671103,DE
3002671104,3002673151,LV
3002673152,3002675199,GB
3002675200,3002677247,DK
@@ -99432,9 +45957,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
@@ -99450,23 +45973,13 @@
3002728448,3002730495,FR
3002730496,3002732543,DE
3002732544,3002734591,NL
-3002734592,3002735055,CH
-3002735056,3002735063,DE
-3002735064,3002735087,CH
-3002735088,3002735103,DE
-3002735104,3002736639,CH
+3002734592,3002736639,CH
3002736640,3002738687,LT
3002738688,3002740735,PL
3002740736,3002742783,GB
-3002742784,3002742927,LI
-3002742928,3002742943,CH
-3002742944,3002743039,LI
+3002742784,3002743039,LI
3002743040,3002743047,GR
-3002743048,3002743071,LI
-3002743072,3002743103,NL
-3002743104,3002743167,LI
-3002743168,3002743199,CH
-3002743200,3002744831,LI
+3002743048,3002744831,LI
3002744832,3002746879,IT
3002746880,3002748927,GB
3002748928,3002750975,DE
@@ -99479,11 +45992,9 @@
3002763264,3002765311,RS
3002765312,3002767359,NL
3002767360,3002769407,RU
-3002769408,3002771655,DE
-3002771656,3002771663,NL
-3002771664,3002771711,DE
-3002771712,3002771719,NL
-3002771720,3002773503,DE
+3002769408,3002769919,DE
+3002769920,3002770175,ES
+3002770176,3002773503,DE
3002773504,3002775551,GB
3002775552,3002777599,RO
3002777600,3002779647,NL
@@ -99498,8 +46009,8 @@
3002798080,3002800127,FR
3002800128,3002802175,NL
3002802176,3002804223,GB
-3002804224,3002806015,TR
-3002806016,3002808319,DE
+3002804224,3002806271,TR
+3002806272,3002808319,DE
3002808320,3002810367,FI
3002810368,3002812415,AT
3002812416,3002814463,IT
@@ -99512,14 +46023,7 @@
3002826752,3002828799,SE
3002828800,3002830847,RU
3002830848,3002834943,FI
-3002834944,3002834975,CH
-3002834976,3002835887,LU
-3002835888,3002835903,US
-3002835904,3002836383,LU
-3002836384,3002836399,BE
-3002836400,3002836415,LU
-3002836416,3002836431,US
-3002836432,3002836991,LU
+3002834944,3002836991,LU
3002836992,3002841087,GB
3002841088,3002843135,CZ
3002843136,3002845183,NL
@@ -99543,77 +46047,388 @@
3003023360,3003039743,RS
3003039744,3003056127,BG
3003056128,3003058175,DE
-3003058176,3003058431,MT
-3003058432,3003058687,FI
-3003058688,3003058751,EE
-3003058752,3003058943,PH
-3003058944,3003059199,IL
-3003059200,3003059711,EE
-3003059712,3003059967,GI
-3003059968,3003060223,GG
+3003058176,3003060223,EE
3003060224,3003062271,DE
3003062272,3003064319,NL
3003064320,3003066367,RO
-3003066368,3003066895,PL
-3003066896,3003066903,RU
-3003066904,3003068415,PL
+3003066368,3003068415,PL
3003068416,3003070463,NL
3003070464,3003074559,GB
3003074560,3003076607,IT
-3003076608,3003077663,GB
-3003077664,3003077679,US
-3003077680,3003077695,GB
-3003077696,3003077711,US
-3003077712,3003077887,GB
-3003077888,3003077951,US
-3003077952,3003080703,GB
-3003080704,3003081150,FR
-3003081151,3003081156,GB
-3003081157,3003081157,ES
-3003081158,3003082751,FR
+3003076608,3003078143,GB
+3003078144,3003078151,US
+3003078152,3003078155,IN
+3003078156,3003080703,GB
+3003080704,3003082751,FR
3003082752,3003084799,ES
3003086848,3003088895,RU
3003088896,3003090943,FR
3003090944,3003092991,DE
3003092992,3003095039,NO
-3003095040,3003095071,AT
-3003095072,3003095079,DE
-3003095080,3003095167,AT
-3003095168,3003095295,DE
-3003095296,3003095303,AT
-3003095304,3003095551,CH
-3003095552,3003095559,AT
-3003095560,3003095807,CZ
-3003095808,3003095815,AT
-3003095816,3003096063,IT
-3003096064,3003096079,CZ
-3003096080,3003096127,AT
-3003096128,3003096135,DE
-3003096136,3003096367,AT
-3003096368,3003096383,DE
-3003096384,3003097087,AT
+3003095040,3003095295,AT
+3003095296,3003095551,CH
+3003095552,3003095807,CZ
+3003095808,3003096063,IT
+3003096064,3003097087,AT
3003097088,3003099135,FR
3003099136,3003101183,CZ
3003101184,3003103231,UA
3003103232,3003105279,IT
-3003105280,3003107327,NL
-3003107328,3003109375,RU
+3003105280,3003109375,NL
3003109376,3003111423,FR
3003111424,3003113471,IT
-3003113472,3003114255,ES
-3003114256,3003114259,FR
-3003114260,3003114263,IT
-3003114264,3003114267,GB
-3003114268,3003114271,US
-3003114272,3003115519,ES
+3003113472,3003115519,ES
3003115520,3003117567,RU
3003117568,3003119615,IT
3003119616,3003121663,RU
+3003121664,3003122175,AR
+3003122176,3003122687,CL
+3003122688,3003123711,AR
+3003123712,3003123967,CL
+3003123968,3003124479,CO
+3003124480,3003124735,AR
+3003124736,3003125247,SV
+3003125248,3003125503,AR
+3003125504,3003125759,CO
+3003125760,3003126783,CL
+3003126784,3003127807,CR
+3003127808,3003128063,CO
+3003128064,3003128319,AR
+3003128320,3003128575,PY
+3003128576,3003128831,CO
+3003128832,3003129087,TT
+3003129088,3003129343,CO
+3003129344,3003129599,BO
+3003129600,3003129855,HN
+3003129856,3003138559,CR
+3003138560,3003139071,PA
+3003139072,3003139583,CR
+3003139584,3003140351,PA
+3003140352,3003140607,CR
+3003140608,3003141375,PA
+3003141376,3003141631,CR
+3003141632,3003141887,PA
+3003141888,3003143679,CR
+3003143680,3003144447,PA
+3003144448,3003146239,CR
+3003146240,3003146495,PA
+3003146496,3003147007,CR
+3003147008,3003147263,PA
+3003147264,3003148031,CR
+3003148032,3003148543,PA
+3003148544,3003148799,CR
+3003148800,3003149311,PA
+3003149312,3003151871,CR
+3003151872,3003152383,PA
+3003152384,3003152639,CR
+3003152640,3003152895,PA
+3003152896,3003154431,CR
+3003154432,3003154687,CL
+3003154688,3003154943,EC
+3003154944,3003159039,AR
+3003159040,3003159295,CO
+3003159296,3003160575,AR
+3003160576,3003161599,CL
+3003161600,3003162623,UY
+3003162624,3003170815,CR
+3003170816,3003171071,GT
+3003171072,3003171327,AR
+3003171328,3003171839,PA
+3003171840,3003172863,TT
+3003172864,3003173375,PA
+3003173376,3003173631,CR
+3003173632,3003173887,AR
+3003173888,3003174143,EC
+3003174144,3003174399,CO
+3003174912,3003179007,CR
+3003179008,3003187199,AR
+3003187200,3003252735,CO
3003252736,3003449343,CL
-3003580416,3003645951,PE
+3003449344,3003514879,SV
+3003514880,3003645951,PE
+3003645952,3003777023,CL
+3003777024,3003908095,BR
3003908096,3004170239,CO
+3004170240,3004301311,BR
+3004301312,3004432383,CO
+3004432384,3004694527,VE
3004694528,3005218815,UY
-3011510272,3019898879,BR
+3005218816,3005349887,CO
+3005349888,3005480959,BR
+3005480960,3005874175,AR
+3005874176,3005875455,PA
+3005875456,3005875711,CO
+3005875712,3005879807,PA
+3005879808,3005880063,CO
+3005880064,3005881343,PA
+3005881344,3005881599,CO
+3005881600,3005883135,PA
+3005883136,3005883391,CO
+3005883392,3005886975,PA
+3005886976,3005887487,CO
+3005887488,3005887999,PA
+3005888000,3005888255,CO
+3005888256,3005890047,PA
+3005890048,3005890303,CO
+3005890304,3005891071,PA
+3005891072,3005891327,CO
+3005891328,3005893119,PA
+3005893120,3005893631,CO
+3005893632,3005893887,PA
+3005893888,3005894143,CO
+3005894144,3005894655,PA
+3005894656,3005894911,CO
+3005894912,3005896703,PA
+3005896704,3005896959,CO
+3005896960,3005899263,PA
+3005899264,3005899519,CO
+3005899520,3005900031,PA
+3005900032,3005900287,CO
+3005900288,3005902591,PA
+3005902592,3005902847,CO
+3005902848,3005903359,PA
+3005903360,3005903871,CO
+3005903872,3005905151,PA
+3005905152,3005905407,CO
+3005905408,3005905919,PA
+3005905920,3005906943,CO
+3005906944,3005911039,PA
+3005911040,3005911295,CO
+3005911296,3005911551,PA
+3005911552,3005911807,CO
+3005911808,3005913343,PA
+3005913344,3005913599,CO
+3005913600,3005913855,PA
+3005913856,3005914623,CO
+3005914624,3005915135,PA
+3005915136,3005918207,AR
+3005918208,3005919231,CO
+3005919232,3005923327,AR
+3005923328,3005939711,BZ
+3005939712,3005956095,CR
+3005956096,3005960191,AR
+3005960192,3005965311,PE
+3005965312,3005966335,AR
+3005966336,3005968383,CO
+3005968384,3005972479,AR
+3005972480,3005988863,CH
+3005988864,3006005247,DO
+3006005248,3006267391,VE
+3006267392,3006267647,PA
+3006267648,3006267903,NI
+3006267904,3006268671,PA
+3006268672,3006268927,NI
+3006268928,3006271231,PA
+3006271232,3006271487,NI
+3006271488,3006273535,PA
+3006273536,3006273791,NI
+3006273792,3006275583,PA
+3006275584,3006275839,NI
+3006275840,3006276095,PA
+3006276096,3006276351,NI
+3006276352,3006277887,PA
+3006277888,3006278143,NI
+3006278144,3006279167,PA
+3006279168,3006279423,NI
+3006279424,3006283519,PA
+3006283520,3006283775,NI
+3006283776,3006284287,CR
+3006284288,3006284799,PA
+3006284800,3006285055,CR
+3006285056,3006285311,PA
+3006285312,3006285567,CR
+3006285568,3006285823,PA
+3006285824,3006286079,CR
+3006286080,3006287103,PA
+3006287104,3006287359,CR
+3006287360,3006288639,PA
+3006288640,3006289151,CR
+3006289152,3006289663,PA
+3006289664,3006289919,CR
+3006289920,3006291455,PA
+3006291456,3006291711,CR
+3006291712,3006292991,PA
+3006292992,3006293247,CR
+3006293248,3006296575,PA
+3006296576,3006296831,CR
+3006296832,3006308351,PA
+3006308352,3006308863,CR
+3006308864,3006310143,PA
+3006310144,3006310399,CR
+3006310400,3006311167,PA
+3006311168,3006311423,CR
+3006311424,3006311679,PA
+3006311680,3006312191,CR
+3006312192,3006312703,PA
+3006312704,3006312959,CR
+3006312960,3006313727,PA
+3006313728,3006313983,CR
+3006313984,3006314239,PA
+3006314240,3006314495,CR
+3006314496,3006315263,PA
+3006315264,3006315775,CR
+3006315776,3006320895,PA
+3006320896,3006321151,CR
+3006321152,3006321663,PA
+3006321664,3006322175,CR
+3006322176,3006322431,PA
+3006322432,3006323199,CR
+3006323200,3006323455,PA
+3006323456,3006323711,CR
+3006323712,3006329343,PA
+3006329344,3006329855,NI
+3006329856,3006330367,PA
+3006330368,3006330623,NI
+3006330624,3006330879,PA
+3006330880,3006331903,CR
+3006331904,3006332927,AR
+3006332928,3006349311,EC
+3006349312,3006351359,PE
+3006351360,3006353407,AR
+3006353408,3006357503,DO
+3006357504,3006361599,AR
+3006361600,3006363647,HN
+3006363648,3006365695,AR
+3006365696,3006431231,CO
+3006431232,3006463999,CR
+3006464000,3006480383,SV
+3006480384,3006484479,DO
+3006484480,3006488575,AR
+3006488576,3006496767,CO
+3006496768,3006500351,CR
+3006500352,3006500607,MX
+3006500608,3006506239,CR
+3006506240,3006506495,MX
+3006506496,3006506751,CR
+3006506752,3006507007,MX
+3006507008,3006507519,CR
+3006507520,3006507775,MX
+3006507776,3006512895,CR
+3006512896,3006513151,MX
+3006513152,3006513663,PA
+3006513664,3006514431,CR
+3006514432,3006514687,PA
+3006514688,3006517503,CR
+3006517504,3006517759,NI
+3006517760,3006518527,CR
+3006518528,3006519039,NI
+3006519040,3006521343,CR
+3006521344,3006528511,AR
+3006528512,3006529535,BZ
+3006529536,3006660607,DO
+3006660608,3006791679,BR
+3006791680,3006922751,CL
+3006922752,3007053823,BO
+3007053824,3007062015,AR
+3007062016,3007066111,CO
+3007066112,3007070207,EC
+3007070208,3007078399,CL
+3007078400,3007082495,AR
+3007082496,3007086591,BO
+3007086592,3007090687,PA
+3007090688,3007091711,NL
+3007091712,3007092223,RU
+3007092224,3007092735,DE
+3007092736,3007094783,AR
+3007094784,3007096831,CR
+3007096832,3007098879,AR
+3007098880,3007100887,HN
+3007100888,3007100895,PH
+3007100896,3007100927,HN
+3007100928,3007102975,AR
+3007102976,3007103999,US
+3007104000,3007106047,AR
+3007106048,3007107071,PE
+3007107072,3007108095,AR
+3007108096,3007109119,TT
+3007109120,3007111167,AR
+3007111168,3007112191,PE
+3007112192,3007115263,AR
+3007115264,3007116287,CO
+3007116288,3007117311,EC
+3007117312,3007122431,AR
+3007122432,3007123455,CL
+3007123456,3007143935,AR
+3007143936,3007148031,CL
+3007148032,3007152127,CO
+3007152128,3007152383,CL
+3007152384,3007152639,US
+3007152640,3007152895,CL
+3007152896,3007153151,US
+3007153152,3007153407,CL
+3007153408,3007153663,US
+3007153664,3007153919,CL
+3007153920,3007154175,US
+3007154176,3007154431,CL
+3007154432,3007154687,US
+3007154688,3007154943,CL
+3007154944,3007155199,US
+3007155200,3007155455,CL
+3007155456,3007155711,GB
+3007155712,3007155967,CL
+3007155968,3007156223,DE
+3007156224,3007175679,CL
+3007175680,3007175935,GB
+3007175936,3007184895,CL
+3007184896,3007250431,AR
+3007250432,3007268095,CR
+3007268096,3007268607,PA
+3007268608,3007269631,CR
+3007269632,3007270143,PA
+3007270144,3007270911,CR
+3007270912,3007271167,PA
+3007271168,3007272191,CR
+3007272192,3007272447,PA
+3007272448,3007272959,CR
+3007272960,3007273215,PA
+3007273216,3007273727,CR
+3007273728,3007274239,PA
+3007274240,3007274751,CR
+3007274752,3007275007,PA
+3007275008,3007279359,CR
+3007279360,3007279871,PA
+3007279872,3007280639,CR
+3007280640,3007280895,PA
+3007280896,3007281151,CR
+3007281152,3007281919,PA
+3007281920,3007283455,CR
+3007283456,3007283711,PA
+3007283712,3007283967,CR
+3007283968,3007284223,PA
+3007284224,3007286015,CR
+3007286016,3007286271,PA
+3007286272,3007286783,CR
+3007286784,3007287295,PA
+3007287296,3007287551,CR
+3007287552,3007288063,MX
+3007288064,3007289087,CR
+3007289088,3007289343,MX
+3007289344,3007290367,CR
+3007290368,3007290623,PA
+3007290624,3007291135,CR
+3007291136,3007291391,PA
+3007291392,3007292415,CR
+3007292416,3007292671,MX
+3007292672,3007293439,CR
+3007293440,3007293951,MX
+3007293952,3007294207,CR
+3007294208,3007294463,MX
+3007294464,3007294719,CR
+3007294720,3007294975,MX
+3007294976,3007296255,CR
+3007296256,3007296511,MX
+3007296512,3007296767,CR
+3007296768,3007297023,MX
+3007297024,3007299583,CR
+3007299584,3007301631,PA
+3007301632,3007305727,AR
+3007305728,3007307775,BZ
+3007307776,3007310847,CL
+3007310848,3007312895,AR
+3007312896,3007313919,CL
+3007313920,3007314943,AR
+3007314944,3007315967,HN
+3007315968,3019898879,BR
3019898880,3024093183,JP
3024093184,3024617471,KR
3024617472,3024879615,MY
@@ -99622,27 +46437,70 @@
3025403904,3025600511,CN
3025600512,3025603839,IN
3025603840,3025604095,HK
-3025604096,3025604351,IN
-3025604352,3025604637,SG
-3025604638,3025607423,IN
+3025604096,3025604381,IN
+3025604382,3025604637,SG
+3025604638,3025606815,IN
+3025606816,3025606831,SG
+3025606832,3025607167,IN
+3025607168,3025607423,SG
3025607424,3025607679,HK
-3025607680,3025633535,IN
+3025607680,3025608191,IN
+3025608192,3025608203,JP
+3025608204,3025616895,IN
+3025616896,3025617407,SG
+3025617408,3025618943,IN
+3025618944,3025619471,SG
+3025619472,3025620991,IN
+3025620992,3025621247,PH
+3025621248,3025625343,IN
+3025625344,3025625375,SG
+3025625376,3025625391,IN
+3025625392,3025625395,SG
+3025625396,3025625407,IN
+3025625408,3025625471,SG
+3025625472,3025625599,IN
+3025625600,3025625855,SG
+3025625856,3025629439,IN
+3025629440,3025629503,HK
+3025629504,3025629695,IN
+3025629696,3025629951,HK
+3025629952,3025630207,IN
+3025630208,3025630719,AU
+3025630720,3025631239,IN
+3025631240,3025631247,AU
+3025631248,3025632255,IN
+3025632256,3025632271,SG
+3025632272,3025633535,IN
3025633536,3025633791,HK
-3025633792,3025635839,IN
-3025635840,3025636095,SG
-3025636096,3025637375,IN
+3025633792,3025633807,AU
+3025633808,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
+3025638656,3025638783,IN
+3025638784,3025638791,HK
+3025638792,3025639167,IN
3025639168,3025639175,SG
-3025639176,3025647103,IN
+3025639176,3025639423,IN
+3025639424,3025639679,SG
+3025639680,3025639935,HK
+3025639936,3025640447,IN
+3025640448,3025640799,MY
+3025640800,3025641727,IN
+3025641728,3025641743,HK
+3025641744,3025641759,IN
+3025641760,3025641775,HK
+3025641776,3025647103,IN
3025647104,3025647359,SG
3025647360,3025647615,AU
-3025647616,3025647807,IN
-3025647808,3025647839,SG
-3025647840,3025649151,IN
+3025647616,3025647775,IN
+3025647776,3025647791,SG
+3025647792,3025648079,IN
+3025648080,3025648087,SG
+3025648088,3025649151,IN
3025649152,3025649663,HK
3025649664,3025666047,IN
3025666048,3025928191,CN
@@ -99671,14 +46529,7 @@
3026069504,3026071551,JP
3026071552,3026073599,HK
3026073600,3026075647,CN
-3026075648,3026076927,AF
-3026076928,3026077183,IT
-3026077184,3026079743,US
-3026079744,3026079999,AF
-3026080000,3026080511,US
-3026080512,3026080767,AF
-3026080768,3026081279,US
-3026081280,3026083839,AF
+3026075648,3026083839,AF
3026083840,3026087935,CN
3026087936,3026089983,AU
3026092032,3026108415,MO
@@ -99701,8 +46552,7 @@
3028521984,3028523007,LA
3028523008,3028525055,JP
3028525056,3028533247,HK
-3028533248,3028537343,JP
-3028537344,3028549631,US
+3028533248,3028549631,JP
3028549632,3028811775,KR
3028811776,3029336063,CN
3029336064,3029598207,JP
@@ -99764,7 +46614,9 @@
3031695360,3031760895,TH
3031760896,3031826431,AU
3031826432,3031891967,KR
-3031891968,3031957503,TH
+3031891968,3031913983,TH
+3031913984,3031914239,SG
+3031914240,3031957503,TH
3031957504,3032252415,CN
3032252416,3032271871,HK
3032271872,3032272895,AU
@@ -99832,9 +46684,7 @@
3034472448,3034478591,IN
3034478592,3034480639,JP
3034480640,3034482687,SG
-3034482688,3034483199,AF
-3034483200,3034483967,US
-3034483968,3034484735,AF
+3034482688,3034484735,AF
3034484736,3034488831,TH
3034488832,3034492927,NZ
3034492928,3034497023,JP
@@ -99875,24 +46725,52 @@
3035357184,3035365375,JP
3035365376,3035627519,KR
3035627520,3035660287,ID
-3035660288,3035693055,SG
+3035660288,3035673343,SG
+3035673344,3035673599,US
+3035673600,3035693055,SG
3035693056,3036610559,ID
3036610560,3036676095,SG
3036676096,3037790207,AR
3037790208,3037986815,VE
3037986816,3038773247,AR
+3038773248,3038904319,CO
+3038904320,3039035391,VE
3039035392,3039166463,DO
+3039166464,3039231999,PA
+3039232000,3039297535,EC
3039297536,3039363071,PY
-3039363072,3039395839,BZ
-3039428608,3039494143,CL
-3039690752,3039821823,AR
+3039363072,3039412223,BZ
+3039412224,3039412991,CL
+3039412992,3039413247,BR
+3039413248,3039413503,CL
+3039413504,3039414015,BR
+3039414016,3039414271,CL
+3039414272,3039414527,BR
+3039414528,3039415295,CL
+3039415296,3039415807,BR
+3039415808,3039416831,CL
+3039416832,3039417343,BR
+3039417344,3039417855,CL
+3039417856,3039418111,BR
+3039418112,3039418367,CL
+3039418368,3039418623,BR
+3039418624,3039419391,CL
+3039419392,3039420159,BR
+3039420160,3039420415,CL
+3039420416,3039428607,AR
+3039428608,3039559679,CL
+3039559680,3039821823,AR
3039821824,3040870399,CO
3040870400,3041132543,PE
3041132544,3041394687,CO
3041394688,3041656831,CL
-3041918976,3044016127,AR
+3041656832,3041787903,BR
+3041787904,3044016127,AR
3044016128,3044147199,EC
3044147200,3044155391,GT
+3044155392,3044161535,AR
+3044161536,3044162559,HN
+3044162560,3044163583,AR
3044163584,3044179967,BO
3044179968,3044188159,AR
3044188160,3044196351,BO
@@ -99901,17 +46779,39 @@
3044208640,3044212735,BZ
3044212736,3044245503,HN
3044245504,3044278271,BO
-3044278272,3044505599,AR
-3044505600,3044507647,US
+3044278272,3044417535,AR
+3044417536,3044425727,PA
+3044425728,3044446207,AR
+3044446208,3044450303,CO
+3044450304,3044454399,CL
+3044454400,3044482559,AR
+3044482560,3044482687,CO
+3044482688,3044503551,AR
+3044503552,3044507647,US
3044507648,3044540415,AR
-3044802560,3045064703,PY
+3044540416,3045064703,PY
3045064704,3047161855,CO
3047161856,3047423999,CL
-3047424000,3047686143,AR
+3047424000,3047948287,AR
3047948288,3048079359,CL
+3048079360,3048095743,CO
+3048095744,3048112127,GT
+3048112128,3048120319,AR
+3048120320,3048121343,PY
+3048121344,3048122367,PA
+3048122368,3048123391,CR
+3048123392,3048126463,AR
+3048126464,3048128511,VE
+3048128512,3048132607,AR
+3048132608,3048135935,CR
+3048135936,3048136447,PA
+3048136448,3048144895,CR
+3048144896,3048210431,EC
3048210432,3048275967,PE
3048275968,3048292351,AR
-3048292352,3048308735,BZ
+3048292352,3048292607,BZ
+3048292608,3048293375,HN
+3048293376,3048308735,BZ
3048308736,3048325119,BO
3048325120,3048331263,AR
3048331264,3048332287,GY
@@ -99920,40 +46820,111 @@
3048341504,3048472575,PA
3048472576,3048996863,VE
3048996864,3049029631,TT
+3049029632,3049046015,BO
+3049046016,3049062399,EC
3049062400,3049078271,CR
3049078272,3049078527,MX
3049078528,3049095167,CR
3049095168,3049103359,GT
3049103360,3049107455,AR
+3049107456,3049111551,SV
3049111552,3049119743,AR
3049119744,3049127935,HN
3049127936,3049193471,CL
-3049193472,3049259007,PA
-3049259008,3049521151,CR
-3049652224,3049717759,EC
+3049193472,3049255935,PA
+3049255936,3049256959,US
+3049256960,3049259007,PA
+3049259008,3049283583,AR
+3049283584,3049291775,BZ
+3049291776,3049324543,CO
+3049324544,3049521151,CR
+3049521152,3049586687,EC
+3049586688,3049635839,PA
+3049635840,3049652223,AR
+3049652224,3049750527,EC
+3049750528,3049754623,PE
+3049754624,3049762815,AR
+3049762816,3049766911,HN
+3049766912,3049775103,ES
+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,3051380735,CR
+3050504192,3050569727,EC
+3050635264,3050700799,BR
+3050700800,3050831871,CL
+3050831872,3051356159,BR
+3051356160,3051373055,CR
+3051373056,3051373311,PA
+3051373312,3051374335,CR
+3051374336,3051374591,PA
+3051374592,3051374847,CR
+3051374848,3051375615,PA
+3051375616,3051376895,CR
+3051376896,3051377151,PA
+3051377152,3051379455,CR
+3051379456,3051379711,PA
+3051379712,3051380735,CR
3051380736,3051388927,AR
-3051388928,3051397119,PA
+3051388928,3051395071,US
+3051395072,3051395583,NL
+3051395584,3051397119,PA
+3051397120,3051398143,CO
+3051398144,3051399167,AR
+3051399168,3051400191,DO
+3051400192,3051401215,EC
+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
-3051446272,3051450367,CO
+3051438080,3051450367,CO
3051450368,3051454463,CL
+3051454464,3051456511,SV
+3051456512,3051457535,AR
+3051457536,3051460607,CL
+3051460608,3051462655,AR
+3051462656,3051470847,PE
+3051470848,3051479039,AR
+3051479040,3051487231,CU
3051487232,3051552767,CL
3051552768,3051618303,BO
-3051618304,3051749375,AR
+3051618304,3051880447,AR
3051880448,3051913215,CO
-3051945984,3051978751,CR
+3051913216,3051963135,CR
+3051963136,3051963391,PA
+3051963392,3051964671,CR
+3051964672,3051964927,PA
+3051964928,3051965183,CR
+3051965184,3051965439,PA
+3051965440,3051965695,CR
+3051965696,3051965951,PA
+3051965952,3051968511,CR
+3051968512,3051968767,PA
+3051968768,3051969535,CR
+3051969536,3051969791,PA
+3051969792,3051971071,CR
+3051971072,3051971327,PA
+3051971328,3051971839,CR
+3051971840,3051972351,PA
+3051972352,3051973887,CR
+3051973888,3051974143,PA
+3051974144,3051974399,CR
+3051974400,3051974655,PA
+3051974656,3051976191,CR
+3051976192,3051976447,PA
+3051976448,3051983871,CR
+3051983872,3051984895,BR
+3051984896,3051995135,CR
3051995136,3052011519,PE
-3052142592,3052273663,CO
+3052011520,3052273663,CO
3052273664,3052404735,AR
3052404736,3053453311,CO
3053453312,3054501887,ID
@@ -100020,16 +46991,12 @@
3057041408,3057049599,MY
3057049600,3057050623,AU
3057050624,3057051647,SG
-3057051648,3057051903,AU
-3057051904,3057052159,EU
-3057052160,3057052415,AU
+3057051648,3057052415,AU
3057052416,3057052671,ES
3057052672,3057052927,IL
3057052928,3057053183,GB
3057053184,3057053695,AU
-3057053696,3057054719,JP
-3057054720,3057055743,HK
-3057055744,3057057791,JP
+3057053696,3057057791,JP
3057057792,3057123327,SG
3057123328,3057451007,IN
3057451008,3057516543,CN
@@ -100055,9 +47022,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
@@ -100074,9 +47039,7 @@
3064811520,3064823807,KR
3064823808,3064831999,JP
3064832000,3064840191,KR
-3064840192,3064852479,GU
-3064852480,3064854527,US
-3064854528,3064856575,GU
+3064840192,3064856575,GU
3064856576,3064987647,CN
3064987648,3066036223,PK
3066036224,3066560511,KR
@@ -100093,8 +47056,7 @@
3068986368,3068987391,AU
3068987392,3068990463,IN
3068990464,3068991487,VN
-3068991488,3068992511,IN
-3068992512,3068993535,PH
+3068991488,3068991743,IN
3068993536,3069018111,KR
3069018112,3069034495,IN
3069034496,3069050879,KR
@@ -100188,65 +47150,43 @@
3082182656,3082190847,LA
3082190848,3082289151,JP
3082289152,3087007743,CN
-3087007744,3088711167,US
-3088711168,3088711423,AU
-3088711424,3091202047,US
+3087007744,3088629759,US
+3088629760,3088633855,NL
+3088633856,3088998399,US
+3088998400,3089002495,NL
+3089002496,3090325503,US
+3090325504,3090329599,NL
+3090329600,3090389503,US
+3090389504,3090389631,CA
+3090389632,3091202047,US
3091202048,3091726335,CA
3091726336,3091955711,US
3091955712,3091959807,CA
3091959808,3091976191,US
3091976192,3091980287,CA
-3091980288,3092569855,US
-3092569856,3092570111,AU
-3092570112,3092700671,US
-3092700672,3092700927,AU
-3092700928,3093168127,US
+3091980288,3092569343,US
+3092569344,3092569599,AU
+3092569600,3092578303,US
+3092578304,3092582399,NL
+3092582400,3092615167,US
+3092615168,3092619263,NL
+3092619264,3092623359,US
+3092623360,3092631551,NL
+3092631552,3092643839,US
+3092643840,3092647935,NL
+3092647936,3092656127,US
+3092656128,3092660223,NL
+3092660224,3092688895,US
+3092688896,3092692991,NL
+3092692992,3092754431,US
+3092754432,3092758527,NL
+3092758528,3093168127,US
3093168128,3093200895,CA
-3093200896,3093206623,US
-3093206624,3093206655,GB
-3093206656,3093207775,US
-3093207776,3093207807,CA
-3093207808,3093208079,US
-3093208080,3093208095,CA
-3093208096,3093208639,US
-3093208640,3093208671,CA
-3093208672,3093213183,US
+3093200896,3093213183,US
3093213184,3093217279,CA
3093217280,3093233663,US
3093233664,3093237759,PR
-3093237760,3093241863,US
-3093241864,3093241871,AU
-3093241872,3093242287,US
-3093242288,3093242295,AU
-3093242296,3093242719,US
-3093242720,3093242751,CN
-3093242752,3093243223,US
-3093243224,3093243231,AU
-3093243232,3093245575,US
-3093245576,3093245583,BR
-3093245584,3093245719,US
-3093245720,3093245727,AU
-3093245728,3093247327,US
-3093247328,3093247335,AU
-3093247336,3093248375,US
-3093248376,3093248399,AU
-3093248400,3093248415,US
-3093248416,3093248431,AU
-3093248432,3093248479,US
-3093248480,3093248487,AU
-3093248488,3093248727,US
-3093248728,3093248735,AU
-3093248736,3093248831,US
-3093248832,3093248839,AU
-3093248840,3093248887,US
-3093248888,3093248895,AU
-3093248896,3093249071,US
-3093249072,3093249079,GB
-3093249080,3093249599,US
-3093249600,3093249623,AU
-3093249624,3093249679,US
-3093249680,3093249687,AU
-3093249688,3093282815,US
+3093237760,3093282815,US
3093282816,3093299199,CA
3093299200,3093835775,US
3093835776,3093838847,GB
@@ -100262,9 +47202,7 @@
3094032768,3094085631,CA
3094085632,3096444927,US
3096444928,3096969215,CA
-3096969216,3097130139,US
-3097130140,3097130140,US
-3097130141,3097493503,US
+3096969216,3097493503,US
3097493504,3097755647,CA
3097755648,3098095615,US
3098095616,3098099711,CA
@@ -100285,7 +47223,7 @@
3098106624,3098106879,NL
3098106880,3098107135,DE
3098107136,3098107391,FR
-3098107392,3098107647,EU
+3098107392,3098107647,US
3098107648,3098107903,SE
3098107904,3098108159,ES
3098108160,3098108415,IL
@@ -100302,175 +47240,13 @@
3098148864,3098165247,JM
3098165248,3098181631,US
3098181632,3098185727,CA
-3098185728,3098255399,US
-3098255400,3098255407,BR
-3098255408,3098255903,US
-3098255904,3098255911,MV
-3098255912,3098263551,US
+3098185728,3098263551,US
3098263552,3098271743,CA
-3098271744,3098275944,US
-3098275945,3098275945,CL
-3098275946,3098275950,US
-3098275951,3098275953,CL
-3098275954,3098276126,US
-3098276127,3098276130,IN
-3098276131,3098276708,US
-3098276709,3098276709,CL
-3098276710,3098278719,US
-3098278720,3098278751,CA
-3098278752,3098278815,US
-3098278816,3098278911,CA
-3098278912,3098279099,US
-3098279100,3098279103,BR
-3098279104,3098280591,US
-3098280592,3098280599,PA
-3098280600,3098281311,US
-3098281312,3098281343,EG
-3098281344,3098281503,US
-3098281504,3098281511,PA
-3098281512,3098281711,US
-3098281712,3098281719,PA
-3098281720,3098281943,US
-3098281944,3098281951,AU
-3098281952,3098282327,US
-3098282328,3098282335,BR
-3098282336,3098282415,US
-3098282416,3098282431,BR
-3098282432,3098282471,US
-3098282472,3098282479,BR
-3098282480,3098283719,US
-3098283720,3098283727,NL
-3098283728,3098284311,US
-3098284312,3098284319,BR
-3098284320,3098285383,US
-3098285384,3098285391,BR
-3098285392,3098285495,US
-3098285496,3098285503,BR
-3098285504,3098286191,US
-3098286192,3098286199,BR
-3098286200,3098286287,US
-3098286288,3098286295,IN
-3098286296,3098286399,US
-3098286400,3098286431,BR
-3098286432,3098287711,US
-3098287712,3098287719,AU
-3098287720,3098288343,US
-3098288344,3098288351,BR
-3098288352,3098288775,US
-3098288776,3098288783,BR
-3098288784,3098289495,US
-3098289496,3098289503,AU
-3098289504,3098294719,US
-3098294720,3098294775,BR
-3098294776,3098296151,US
-3098296152,3098296159,BR
-3098296160,3098320543,US
-3098320544,3098320559,AR
-3098320560,3098321663,US
-3098321664,3098321695,IN
-3098321696,3098322367,US
-3098322368,3098322375,BD
-3098322376,3098322383,US
-3098322384,3098322391,BD
-3098322392,3098322695,US
-3098322696,3098322703,BD
-3098322704,3098323679,US
-3098323680,3098323711,EG
-3098323712,3098323951,US
-3098323952,3098323959,TR
-3098323960,3098324735,US
-3098324736,3098324743,IN
-3098324744,3098326511,US
-3098326512,3098326519,CN
-3098326520,3098331151,US
-3098331152,3098331159,HK
-3098331160,3098331471,US
-3098331472,3098331479,CL
-3098331480,3098333951,US
-3098333952,3098333959,BD
-3098333960,3098335119,US
-3098335120,3098335127,CA
-3098335128,3098336303,US
-3098336304,3098336311,MY
-3098336312,3098364183,US
-3098364184,3098364191,EG
-3098364192,3098365535,US
-3098365536,3098365551,IN
-3098365552,3098365631,US
-3098365632,3098365639,AU
-3098365640,3098366559,US
-3098366560,3098366575,BR
-3098366576,3098366839,US
-3098366840,3098366847,BR
-3098366848,3098366863,US
-3098366864,3098366879,BR
-3098366880,3098366991,US
-3098366992,3098367007,BR
-3098367008,3098367023,US
-3098367024,3098367063,BR
-3098367064,3098367087,US
-3098367088,3098367103,BR
-3098367104,3098370895,US
-3098370896,3098370903,BR
-3098370904,3098371495,US
-3098371496,3098371503,JO
-3098371504,3098373351,US
-3098373352,3098373359,BR
-3098373360,3098375583,US
-3098375584,3098375615,BR
-3098375616,3098376599,US
-3098376600,3098376607,CA
-3098376608,3098376863,US
-3098376864,3098376895,BR
-3098376896,3098377727,US
-3098377728,3098377759,AR
-3098377760,3098380047,US
-3098380048,3098380063,IN
-3098380064,3098380527,US
-3098380528,3098380535,IN
-3098380536,3098381455,US
-3098381456,3098381471,LT
-3098381472,3098382071,US
-3098382072,3098382079,IN
-3098382080,3098382127,US
-3098382128,3098382135,RO
-3098382136,3098385727,US
-3098385728,3098385791,SE
-3098385792,3098386911,US
-3098386912,3098386919,TR
-3098386920,3098387607,US
-3098387608,3098387615,RO
-3098387616,3098388175,US
-3098388176,3098388183,SA
-3098388184,3098390271,US
-3098390272,3098390279,ES
-3098390280,3098392071,US
-3098392072,3098392079,GB
-3098392080,3098392551,US
-3098392552,3098392559,GB
-3098392560,3098395407,US
-3098395408,3098395415,BR
-3098395416,3098400503,US
-3098400504,3098400511,CA
-3098400512,3098402559,US
-3098402560,3098402575,AR
-3098402576,3098402799,US
-3098402800,3098402807,ES
-3098402808,3098403151,US
-3098403152,3098403159,PK
-3098403160,3098407295,US
-3098407296,3098407303,MX
-3098407304,3098408735,US
-3098408736,3098408743,AR
-3098408744,3098408927,US
-3098408928,3098408935,ES
-3098408936,3098476543,US
+3098271744,3098278847,US
+3098278848,3098278911,CA
+3098278912,3098476543,US
3098476544,3098492927,CA
-3098492928,3098492991,US
-3098492992,3098493023,CA
-3098493024,3098493751,US
-3098493752,3098493759,PH
-3098493760,3098494719,US
+3098492928,3098494719,US
3098494720,3098495743,CA
3098495744,3098495999,US
3098496000,3098496255,CA
@@ -100478,29 +47254,40 @@
3098503424,3098503679,CA
3098503680,3098507263,US
3098507264,3098507519,CA
-3098507520,3098507807,US
-3098507808,3098507823,AU
-3098507824,3098507839,HK
-3098507840,3098507903,US
-3098507904,3098507919,AR
-3098507920,3098507935,US
-3098507936,3098507951,CY
-3098507952,3098507999,US
-3098508000,3098508015,CR
-3098508016,3103784959,US
+3098507520,3103784959,US
3103850496,3103850751,RU
3103850752,3103851007,PS
+3103851008,3103851519,FR
3103851520,3103852543,PL
3103852544,3103852799,AE
-3103852800,3103853055,PL
+3103852800,3103853567,PL
+3103853568,3103853823,NO
+3103853824,3103854079,RU
+3103854080,3103854335,FR
+3103854336,3103854591,AE
+3103854592,3103854847,UA
+3103854848,3103855103,PL
+3103855104,3103855359,DE
+3103855360,3103855615,RU
+3103855616,3103855871,ES
+3103855872,3103856383,PL
+3103856384,3103856639,RU
+3103856640,3103856895,HU
+3103856896,3103857151,CZ
+3103857152,3103857407,FR
+3103857408,3103857663,RS
+3103857664,3103857919,FR
3103916032,3103917055,CH
3103917056,3103918079,IT
3103918080,3103919103,DE
-3103919104,3103920127,US
+3103919104,3103920127,IR
3103920128,3103921151,DE
3103921152,3103922175,CH
-3103922176,3103924223,NL
-3103924224,3103925247,RU
+3103922176,3103923199,NL
+3103923200,3103923455,SE
+3103923456,3103924223,NL
+3103924224,3103924479,DE
+3103924480,3103925247,RU
3103925248,3103926271,PL
3103926272,3103927295,CZ
3103927296,3103929343,NL
@@ -100520,22 +47307,24 @@
3103942656,3103943679,RU
3103943680,3103944703,UA
3103944704,3103945727,PL
-3103945728,3103946751,DE
-3103946752,3103947007,US
-3103947008,3103947775,DE
+3103945728,3103947775,DE
3103947776,3103948799,RU
3103948800,3103949823,ES
3103949824,3103950847,DE
3103950848,3103951871,GB
3103951872,3103952895,DE
3103952896,3103953919,IT
-3103953920,3103954943,NL
+3103953920,3103954431,NL
+3103954432,3103954943,ES
3103954944,3103955967,SE
3103955968,3103956991,AT
3103956992,3103958015,DE
3103958016,3103960063,GB
3103960064,3103961087,NL
-3103961088,3103962111,AT
+3103961088,3103961343,TR
+3103961344,3103961599,AE
+3103961600,3103961855,AR
+3103961856,3103962111,AT
3103962112,3103963135,DE
3103963136,3103964159,RU
3103964160,3103965183,MK
@@ -100544,12 +47333,11 @@
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,3103974911,SE
+3103974912,3103974919,LT
+3103974920,3103975423,SE
3103975424,3103976447,SA
3103976448,3103977471,GB
3103977472,3103978495,NL
@@ -100562,7 +47350,6 @@
3103985664,3103986687,RU
3103986688,3103987711,LB
3103987712,3103988735,FR
-3103988736,3103989759,EU
3103989760,3103990783,RU
3103990784,3103991807,IT
3103991808,3103992831,DE
@@ -100575,11 +47362,9 @@
3103998976,3103999999,RU
3104000000,3104002047,GB
3104002048,3104003071,DE
-3104003072,3104004863,GB
-3104004864,3104005119,EU
-3104005120,3104006143,GB
+3104003072,3104006143,GB
3104006144,3104007167,DE
-3104007168,3104008191,GG
+3104007168,3104008191,GB
3104008192,3104009215,NL
3104009216,3104010239,IT
3104010240,3104011263,PL
@@ -100600,7 +47385,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
@@ -100646,20 +47431,15 @@
3104075776,3104076799,NL
3104076800,3104077823,GB
3104077824,3104078847,AT
-3104078848,3104079103,LU
-3104079104,3104079871,FR
+3104078848,3104079871,LU
3104079872,3104080895,GB
3104080896,3104081919,GR
-3104081920,3104082431,DK
-3104082432,3104082687,LU
-3104082688,3104082751,DK
-3104082752,3104082767,LU
-3104082768,3104082895,DK
-3104082896,3104082943,LU
+3104081920,3104082943,DK
3104082944,3104083967,IT
3104083968,3104084991,RU
-3104084992,3104085247,DK
-3104085248,3104086015,NL
+3104084992,3104085247,NL
+3104085248,3104085503,HR
+3104085504,3104086015,NL
3104086016,3104087039,IT
3104087040,3104088063,GB
3104088064,3104089087,UZ
@@ -100691,23 +47471,17 @@
3104117760,3104118783,SE
3104118784,3104120831,DE
3104120832,3104121855,CH
-3104121856,3104121856,GB
-3104121857,3104122111,BD
-3104122112,3104122112,GB
-3104122113,3104122367,BD
-3104122368,3104122368,GB
-3104122369,3104122623,BD
-3104122624,3104122624,GB
-3104122625,3104122879,BD
+3104121856,3104122879,GB
3104122880,3104123903,RU
-3104123904,3104124927,SE
+3104123904,3104124159,SE
+3104124160,3104124415,LU
+3104124416,3104124927,SE
3104124928,3104125951,MT
3104125952,3104126975,LT
3104126976,3104127999,CH
3104128000,3104129023,IT
3104129024,3104130047,GB
3104130048,3104131071,CZ
-3104131072,3104132095,EU
3104132096,3104133119,GR
3104133120,3104134143,DE
3104134144,3104135167,ES
@@ -100722,8 +47496,7 @@
3104143360,3104144383,NL
3104144384,3104145407,ES
3104145408,3104146431,RU
-3104146432,3104147199,NL
-3104147200,3104147455,US
+3104146432,3104147455,NL
3104147456,3104149503,RU
3104149504,3104150527,GB
3104150528,3104151551,RU
@@ -100732,18 +47505,10 @@
3104153600,3104154623,RU
3104154624,3104155647,DK
3104155648,3104156671,DE
-3104156672,3104156735,GB
-3104156736,3104156767,RO
-3104156768,3104156775,GB
-3104156776,3104156783,RO
-3104156784,3104156791,GB
-3104156792,3104156959,RO
-3104156960,3104156991,US
-3104156992,3104157695,RO
+3104156672,3104157695,RO
3104157696,3104158719,TR
3104158720,3104159743,IT
-3104159744,3104160255,DE
-3104160256,3104160767,CH
+3104159744,3104160767,CH
3104160768,3104161791,GB
3104161792,3104162815,RU
3104162816,3104164863,IT
@@ -100758,7 +47523,6 @@
3104173056,3104174079,ES
3104174080,3104175103,IE
3104175104,3104176127,IT
-3104176128,3104177151,NO
3104177152,3104178175,UA
3104178176,3104179199,PL
3104179200,3104180223,ES
@@ -100780,7 +47544,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
@@ -100797,7 +47561,7 @@
3104212992,3104214015,HU
3104214016,3104215039,FR
3104215040,3104216063,DE
-3104216064,3104218111,GB
+3104217088,3104218111,GB
3104218112,3104219135,HU
3104219136,3104220159,NL
3104220160,3104221183,RU
@@ -100828,9 +47592,8 @@
3104247808,3104248831,AT
3104248832,3104250879,CZ
3104250880,3104251903,RU
-3104251904,3104252671,NL
-3104252672,3104252798,LU
-3104252799,3104252927,NL
+3104251904,3104252415,SE
+3104252416,3104252927,NL
3104252928,3104253951,FR
3104253952,3104254975,RU
3104254976,3104255999,CZ
@@ -100842,12 +47605,12 @@
3104261120,3104262143,NL
3104262144,3104263167,FR
3104263168,3104264191,NL
-3104264192,3104265215,TR
+3104264192,3104265215,GB
3104265216,3104266239,RU
3104266240,3104267263,GB
3104267264,3104268287,RU
-3104268288,3104269567,GB
-3104269568,3104270335,FR
+3104268288,3104269311,GB
+3104269312,3104270335,FR
3104270336,3104271359,PL
3104271360,3104272383,FR
3104272384,3104273407,IT
@@ -100908,20 +47671,13 @@
3104331776,3104333823,GB
3104333824,3104334847,ES
3104334848,3104335871,SE
-3104335872,3104335887,LT
-3104335888,3104335935,CN
-3104335936,3104335967,LT
-3104335968,3104335975,CN
-3104335976,3104335983,SC
-3104335984,3104335999,US
-3104336000,3104336111,CN
-3104336112,3104336119,GB
-3104336120,3104336191,LT
-3104336192,3104336223,BD
-3104336224,3104336239,PH
+3104335872,3104336239,LT
3104336240,3104336255,DE
-3104336256,3104336383,US
-3104336384,3104336895,LT
+3104336256,3104336359,LT
+3104336360,3104336367,BE
+3104336368,3104336407,LT
+3104336408,3104336415,CH
+3104336416,3104336895,LT
3104336896,3104337919,GB
3104337920,3104338943,IE
3104338944,3104339967,DE
@@ -100943,9 +47699,7 @@
3104356352,3104357375,AT
3104357376,3104358399,CZ
3104358400,3104359423,IE
-3104359424,3104359551,IT
-3104359552,3104360191,RO
-3104360192,3104360447,IT
+3104359424,3104360447,IT
3104360448,3104361471,RU
3104361472,3104362495,GB
3104362496,3104363519,CH
@@ -100969,8 +47723,7 @@
3104384000,3104385023,TR
3104385024,3104386047,UA
3104386048,3104387071,AL
-3104387072,3104387583,GB
-3104387584,3104388095,US
+3104387072,3104388095,GB
3104388096,3104389119,IT
3104389120,3104390143,PL
3104390144,3104391167,SE
@@ -101040,7 +47793,6 @@
3104463872,3104464895,DE
3104464896,3104465919,NL
3104465920,3104466943,GB
-3104466944,3104467967,EU
3104467968,3104468991,DE
3104468992,3104470015,SA
3104470016,3104471039,IE
@@ -101085,10 +47837,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
@@ -101108,7 +47857,7 @@
3104534528,3104535551,SE
3104535552,3104536575,ES
3104536576,3104537599,RO
-3104537600,3104538623,IL
+3104537600,3104538623,US
3104538624,3104539647,PL
3104539648,3104540671,RU
3104540672,3104541695,DE
@@ -101169,7 +47918,7 @@
3104598016,3104599039,ES
3104599040,3104600063,TR
3104600064,3104601087,UA
-3104601088,3104602111,FR
+3104601088,3104602111,PT
3104602112,3104603135,NL
3104603136,3104604159,RU
3104604160,3104605183,CH
@@ -101177,33 +47926,14 @@
3104606208,3104607231,GB
3104607232,3104608255,UA
3104608256,3104609279,NL
-3104609280,3104609407,SE
-3104609408,3104609439,PL
-3104609440,3104609471,US
-3104609472,3104609503,DE
-3104609504,3104609535,NL
-3104609536,3104609663,SE
-3104609664,3104609695,PL
-3104609696,3104609727,US
-3104609728,3104609759,DE
-3104609760,3104609791,NL
-3104609792,3104609919,SE
-3104609920,3104609951,PL
-3104609952,3104609983,US
-3104609984,3104610015,DE
-3104610016,3104610047,NL
-3104610048,3104610175,SE
-3104610176,3104610207,PL
-3104610208,3104610239,US
-3104610240,3104610271,DE
-3104610272,3104610303,NL
+3104609280,3104610303,SE
3104610304,3104611327,RU
3104611328,3104612351,IE
3104612352,3104613375,GB
3104613376,3104614399,SA
3104614400,3104615423,BA
3104615424,3104616447,SA
-3104616448,3104617471,FR
+3104616448,3104617471,DE
3104617472,3104618495,AT
3104618496,3104619519,PS
3104619520,3104621567,GB
@@ -101211,36 +47941,15 @@
3104622592,3104623615,GB
3104623616,3104624639,FR
3104624640,3104625663,RU
-3104625664,3104626687,BY
-3104626688,3104627711,NL
+3104625664,3104627711,NL
3104627712,3104628735,LB
3104628736,3104629759,TR
3104629760,3104630783,RU
3104630784,3104631807,GB
3104631808,3104632831,EE
-3104632832,3104633087,NL
-3104633088,3104633855,AT
+3104632832,3104633855,AT
3104633856,3104634879,JO
-3104634880,3104635031,SE
-3104635032,3104635039,BR
-3104635040,3104635071,PL
-3104635072,3104635103,DE
-3104635104,3104635135,NL
-3104635136,3104635287,SE
-3104635288,3104635295,KW
-3104635296,3104635327,PL
-3104635328,3104635359,DE
-3104635360,3104635391,NL
-3104635392,3104635543,SE
-3104635544,3104635551,MA
-3104635552,3104635583,PL
-3104635584,3104635615,DE
-3104635616,3104635647,NL
-3104635648,3104635799,SE
-3104635800,3104635807,QA
-3104635808,3104635839,PL
-3104635840,3104635871,DE
-3104635872,3104635903,NL
+3104634880,3104635903,SE
3104635904,3104637951,RU
3104637952,3104638975,UA
3104638976,3104639999,RS
@@ -101249,26 +47958,9 @@
3104642048,3104643071,KZ
3104643072,3104644095,RU
3104644096,3104645119,DE
-3104645120,3104646143,RU
+3104645120,3104646143,GB
3104646144,3104647167,FR
-3104647168,3104647319,GB
-3104647320,3104647327,AE
-3104647328,3104647359,PL
-3104647360,3104647391,IT
-3104647392,3104647423,NL
-3104647424,3104647575,GB
-3104647576,3104647583,SA
-3104647584,3104647615,PL
-3104647616,3104647647,IT
-3104647648,3104647679,NL
-3104647680,3104647839,GB
-3104647840,3104647871,PL
-3104647872,3104647903,IT
-3104647904,3104647935,NL
-3104647936,3104648095,GB
-3104648096,3104648127,PL
-3104648128,3104648159,IT
-3104648160,3104648191,NL
+3104647168,3104648191,GB
3104648192,3104649215,RU
3104649216,3104650239,GB
3104650240,3104651263,SI
@@ -101282,14 +47974,7 @@
3104658432,3104659455,JO
3104659456,3104660479,LU
3104660480,3104661503,NO
-3104661504,3104661727,SE
-3104661728,3104661759,PL
-3104661760,3104661983,SE
-3104661984,3104662015,PL
-3104662016,3104662239,SE
-3104662240,3104662271,PL
-3104662272,3104662495,SE
-3104662496,3104662527,PL
+3104661504,3104662527,SE
3104662528,3104663551,FR
3104663552,3104665599,GB
3104665600,3104668671,RU
@@ -101330,7 +48015,7 @@
3104706560,3104707583,UA
3104707584,3104708607,TR
3104708608,3104709631,ES
-3104709632,3104710655,UA
+3104709632,3104710655,NL
3104710656,3104711679,RU
3104711680,3104712703,ES
3104712704,3104714751,RU
@@ -101346,10 +48031,7 @@
3104723968,3104724991,GB
3104724992,3104726015,RU
3104726016,3104727039,DE
-3104727040,3104727295,FR
-3104727296,3104727551,DE
-3104727552,3104727807,ES
-3104727808,3104728063,IT
+3104727040,3104728063,CY
3104728064,3104729087,KZ
3104729088,3104730111,FR
3104730112,3104731135,CH
@@ -101360,7 +48042,6 @@
3104735232,3104736255,FR
3104736256,3104737279,JO
3104737280,3104738303,GB
-3104738304,3104739327,KW
3104739328,3104740351,GB
3104740352,3104741375,PL
3104741376,3104742399,GB
@@ -101401,9 +48082,7 @@
3104778240,3104779263,TR
3104779264,3104780287,PL
3104780288,3104782335,FR
-3104782336,3104783295,US
-3104783296,3104783327,NL
-3104783328,3104783359,US
+3104782336,3104783359,NL
3104783360,3104784383,RU
3104784384,3104785407,BA
3104785408,3104786431,FR
@@ -101432,7 +48111,6 @@
3104809984,3104811007,NL
3104811008,3104812031,IT
3104812032,3104813055,RU
-3104813056,3104814079,IT
3104814080,3104816127,DE
3104816128,3104817151,RU
3104817152,3104818175,DE
@@ -101448,15 +48126,7 @@
3104827392,3104828415,PL
3104828416,3104829439,AT
3104829440,3104830463,DK
-3104830464,3104831135,DE
-3104831136,3104831167,GB
-3104831168,3104831199,YE
-3104831200,3104831359,DE
-3104831360,3104831360,TR
-3104831361,3104831391,DE
-3104831392,3104831423,AT
-3104831424,3104831455,DE
-3104831456,3104831487,TR
+3104830464,3104831487,DE
3104831488,3104832511,NL
3104832512,3104833535,CZ
3104833536,3104834559,GB
@@ -101464,8 +48134,7 @@
3104835584,3104836607,RU
3104836608,3104837631,BA
3104837632,3104838655,DK
-3104838656,3104839423,NL
-3104839424,3104839679,GB
+3104838656,3104839679,NL
3104839680,3104840703,IQ
3104840704,3104841727,UA
3104841728,3104843775,PL
@@ -101475,7 +48144,8 @@
3104847872,3104848895,RU
3104848896,3104849919,DE
3104849920,3104850943,RU
-3104850944,3104851967,GB
+3104850944,3104851199,JE
+3104851200,3104851967,GB
3104851968,3104852991,DE
3104852992,3104854015,AT
3104854016,3104855039,GI
@@ -101505,8 +48175,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
@@ -101571,6 +48240,7 @@
3104948224,3104949247,DK
3104949248,3104950271,GB
3104950272,3104951295,RU
+3104951296,3104952319,DE
3104952320,3104953343,CH
3104953344,3104954367,CZ
3104954368,3104955391,DK
@@ -101595,8 +48265,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
@@ -101658,10 +48327,7 @@
3105042432,3105043455,FR
3105043456,3105044479,DE
3105044480,3105045503,NL
-3105045504,3105046527,IQ
-3105046528,3105047039,NO
-3105047040,3105047295,SE
-3105047296,3105047551,NO
+3105046528,3105047551,NO
3105047552,3105048575,ES
3105048576,3105049599,SK
3105049600,3105050623,KW
@@ -101681,14 +48347,13 @@
3105064960,3105065983,FR
3105065984,3105067007,IT
3105067008,3105068031,GB
-3105068032,3105069055,CH
3105069056,3105070079,TR
3105070080,3105071103,ES
3105071104,3105072127,FR
3105072128,3105073151,IT
3105073152,3105074175,RU
3105074176,3105075199,DE
-3105075200,3105076223,DK
+3105075200,3105076223,SE
3105076224,3105077247,BE
3105077248,3105078271,IT
3105078272,3105079295,ES
@@ -101703,12 +48368,11 @@
3105087488,3105088511,FR
3105088512,3105089535,JO
3105089536,3105090559,DE
-3105090560,3105090687,NL
-3105090688,3105091583,BE
+3105090560,3105091583,GB
3105091584,3105092607,FR
3105092608,3105093631,UA
3105093632,3105094655,SE
-3105094656,3105097727,GB
+3105095680,3105097727,GB
3105097728,3105098751,FR
3105098752,3105099775,SE
3105099776,3105100799,FR
@@ -101728,7 +48392,2419 @@
3105117184,3105118207,FR
3105118208,3105119231,BG
3105119232,3105120255,IM
-3105120256,3105121279,EU
+3105120256,3105121279,GB
+3105121280,3105122303,EE
+3105122304,3105123327,NO
+3105123328,3105124351,ES
+3105124352,3105125375,BY
+3105125376,3105126399,ES
+3105126400,3105127423,KG
+3105127424,3105128447,KZ
+3105128448,3105129471,GB
+3105129472,3105130495,RU
+3105130496,3105131519,FI
+3105131520,3105132543,DK
+3105132544,3105133567,CH
+3105133568,3105134591,PL
+3105134592,3105135615,SA
+3105135616,3105136639,BG
+3105136640,3105137663,IR
+3105137664,3105138687,GB
+3105138688,3105139711,NO
+3105139712,3105140735,PL
+3105140736,3105142783,RU
+3105142784,3105143807,UA
+3105143808,3105144831,DE
+3105144832,3105145855,ES
+3105145856,3105146879,CZ
+3105146880,3105147903,CH
+3105147904,3105148927,DK
+3105148928,3105149951,CH
+3105149952,3105150975,CY
+3105150976,3105151999,UA
+3105152000,3105153023,NL
+3105153024,3105154047,RU
+3105154048,3105156095,DE
+3105156096,3105157119,AT
+3105157120,3105158143,DK
+3105158144,3105159167,NO
+3105159168,3105161215,GB
+3105161216,3105162239,FI
+3105162240,3105163263,TR
+3105163264,3105164287,IL
+3105164288,3105165311,GB
+3105165312,3105166335,IS
+3105166336,3105167359,GB
+3105167360,3105168383,IT
+3105168384,3105169407,DE
+3105169408,3105170431,ES
+3105170432,3105171455,PL
+3105171456,3105172479,DK
+3105172480,3105173503,ES
+3105173504,3105174527,FR
+3105174528,3105177599,NL
+3105177600,3105178623,RU
+3105178624,3105179647,IR
+3105179648,3105180671,IT
+3105180672,3105181695,IR
+3105181696,3105182719,FR
+3105182720,3105183743,PL
+3105183744,3105184767,SE
+3105184768,3105185791,RO
+3105185792,3105186815,HR
+3105186816,3105187839,DE
+3105187840,3105188863,FR
+3105188864,3105189887,GB
+3105189888,3105190911,FR
+3105190912,3105191935,SM
+3105191936,3105192959,PS
+3105192960,3105193983,DE
+3105193984,3105195007,FR
+3105195008,3105196031,GB
+3105196032,3105197055,IQ
+3105197056,3105198079,RU
+3105198080,3105199103,SE
+3105199104,3105200127,PL
+3105200128,3105201151,FR
+3105201152,3105202175,RU
+3105202176,3105203199,CZ
+3105203200,3105204223,DE
+3105204224,3105205247,NL
+3105205248,3105206271,IT
+3105206272,3105207295,UA
+3105207296,3105208319,RO
+3105208320,3105210367,NL
+3105210368,3105211391,FR
+3105211392,3105212415,CZ
+3105212416,3105213439,NL
+3105213440,3105214463,TR
+3105214464,3105215487,GB
+3105215488,3105216511,FR
+3105216512,3105217535,GB
+3105217536,3105218559,CZ
+3105218560,3105219583,DE
+3105219584,3105220607,FR
+3105220608,3105221631,DK
+3105221632,3105222655,AT
+3105222656,3105223679,NL
+3105223680,3105224703,DE
+3105224704,3105225727,IT
+3105225728,3105226751,AM
+3105226752,3105227775,RO
+3105227776,3105228799,NL
+3105228800,3105229823,PL
+3105229824,3105230847,NL
+3105230848,3105231871,UA
+3105231872,3105232895,AT
+3105232896,3105233919,RU
+3105233920,3105234943,IR
+3105234944,3105235967,LB
+3105235968,3105236991,IT
+3105236992,3105238015,GB
+3105238016,3105239039,DE
+3105239040,3105240063,FR
+3105240064,3105241087,CH
+3105241088,3105242111,TR
+3105242112,3105243135,RU
+3105243136,3105244159,KZ
+3105244160,3105245183,DE
+3105245184,3105246207,DK
+3105246208,3105248255,GB
+3105248256,3105249279,IT
+3105249280,3105250303,RS
+3105250304,3105251327,ES
+3105251328,3105252351,CZ
+3105252352,3105253375,TR
+3105253376,3105254399,CH
+3105254400,3105255423,FR
+3105255424,3105256447,PL
+3105256448,3105257471,FR
+3105257472,3105258495,NO
+3105258496,3105259519,CZ
+3105259520,3105260543,FR
+3105260544,3105261567,FI
+3105261568,3105262591,PL
+3105262592,3105263615,DE
+3105263616,3105264639,RS
+3105264640,3105265663,DE
+3105265664,3105266687,RU
+3105266688,3105267711,IE
+3105267712,3105268735,TR
+3105268736,3105269759,GB
+3105269760,3105270783,FR
+3105270784,3105271807,RU
+3105271808,3105272831,SK
+3105272832,3105273855,RU
+3105273856,3105274879,TR
+3105274880,3105276927,NL
+3105276928,3105277951,FR
+3105277952,3105278975,ES
+3105278976,3105279999,RU
+3105280000,3105281023,GB
+3105281024,3105282047,SK
+3105282048,3105283071,FR
+3105283072,3105284095,DE
+3105284096,3105285119,GB
+3105285120,3105286143,IT
+3105286144,3105287167,RU
+3105287168,3105288191,CZ
+3105288192,3105289215,GB
+3105289216,3105290239,AT
+3105290240,3105291263,TR
+3105291264,3105292287,CH
+3105292288,3105293311,DE
+3105293312,3105294335,GB
+3105294336,3105295359,RU
+3105295360,3105296383,PL
+3105296384,3105297407,LT
+3105297408,3105298431,PL
+3105298432,3105299455,NL
+3105299456,3105300479,IT
+3105300480,3105301503,RU
+3105301504,3105302527,ES
+3105302528,3105303551,FR
+3105303552,3105304575,IE
+3105304576,3105305599,GE
+3105305600,3105308671,GB
+3105308672,3105309695,RU
+3105309696,3105310719,ES
+3105310720,3105311743,TR
+3105311744,3105312767,SA
+3105312768,3105313791,RU
+3105313792,3105314815,IT
+3105314816,3105315839,GR
+3105315840,3105317887,FR
+3105317888,3105318911,GB
+3105318912,3105319935,UA
+3105319936,3105320959,HU
+3105320960,3105321983,SK
+3105321984,3105323007,GB
+3105323008,3105324031,ES
+3105324032,3105324287,SA
+3105324288,3105325055,BH
+3105325056,3105326079,IR
+3105326080,3105328127,FR
+3105328128,3105329151,NL
+3105329152,3105330175,NO
+3105330176,3105331199,PL
+3105331200,3105332223,IQ
+3105332224,3105333247,DE
+3105333248,3105334271,LV
+3105335296,3105336319,GR
+3105336320,3105337343,IL
+3105337344,3105339391,GB
+3105339392,3105340415,SY
+3105340416,3105341439,FR
+3105341440,3105342463,ES
+3105342464,3105343487,AE
+3105343488,3105344511,TJ
+3105344512,3105345535,NO
+3105345536,3105346559,DE
+3105346560,3105347583,NL
+3105347584,3105348607,DK
+3105348608,3105349631,ES
+3105349632,3105350655,DE
+3105350656,3105351679,RU
+3105351680,3105352703,GB
+3105352704,3105354751,DE
+3105354752,3105355775,BE
+3105355776,3105356799,NL
+3105356800,3105357823,GB
+3105357824,3105358847,IS
+3105358848,3105359871,ES
+3105359872,3105360895,CZ
+3105360896,3105361919,GB
+3105361920,3105362943,FR
+3105362944,3105363967,CZ
+3105363968,3105364991,PL
+3105364992,3105366015,FR
+3105366016,3105367039,AL
+3105367040,3105368063,SI
+3105368064,3105370111,RU
+3105370112,3105371135,NL
+3105371136,3105373183,RU
+3105373184,3105374207,SY
+3105374208,3105375231,GB
+3105375232,3105376255,DE
+3105376256,3105377279,GB
+3105377280,3105378303,IL
+3105378304,3105380351,GB
+3105380352,3105381375,PL
+3105381376,3105382399,RU
+3105382400,3105383423,GB
+3105383424,3105383679,BY
+3105383680,3105383935,SK
+3105383936,3105384447,AT
+3105384448,3105385471,IT
+3105385472,3105386495,DE
+3105386496,3105387519,RU
+3105387520,3105388543,IT
+3105388544,3105389567,GB
+3105389568,3105389823,LB
+3105389824,3105390591,TR
+3105390592,3105391615,JO
+3105391616,3105392639,NL
+3105392640,3105393663,IR
+3105393664,3105395711,FR
+3105395712,3105396735,IR
+3105396736,3105398783,FR
+3105398784,3105399807,GB
+3105399808,3105400831,PL
+3105400832,3105401855,DK
+3105401856,3105402879,NL
+3105402880,3105404927,RU
+3105404928,3105405951,FR
+3105405952,3105406975,NO
+3105406976,3105407999,FR
+3105408000,3105410047,PL
+3105410048,3105411071,IL
+3105411072,3105412095,BA
+3105412096,3105413119,RU
+3105413120,3105414143,PL
+3105414144,3105416191,NL
+3105416192,3105417215,IR
+3105417216,3105418239,IE
+3105418240,3105419263,CZ
+3105419264,3105420287,NL
+3105420288,3105421311,RU
+3105421312,3105422335,NL
+3105422336,3105423359,IR
+3105423360,3105424383,LT
+3105424384,3105426431,RU
+3105426432,3105427455,QA
+3105427456,3105428479,RU
+3105428480,3105429503,GR
+3105429504,3105430527,ES
+3105430528,3105431551,CH
+3105431552,3105432575,GB
+3105432576,3105433599,DE
+3105433600,3105434623,FR
+3105434624,3105435647,SE
+3105435648,3105436671,LT
+3105436672,3105437695,GR
+3105437696,3105438719,GB
+3105438720,3105439743,RU
+3105439744,3105440767,GB
+3105440768,3105441791,RU
+3105441792,3105442815,IT
+3105442816,3105443839,FI
+3105443840,3105444863,NL
+3105444864,3105445887,GB
+3105445888,3105446911,RU
+3105446912,3105447935,CH
+3105447936,3105448959,DE
+3105448960,3105449983,TR
+3105449984,3105451007,AE
+3105451008,3105452031,PL
+3105452032,3105453055,ES
+3105453056,3105454079,UA
+3105454080,3105455103,PL
+3105455104,3105456127,AT
+3105456128,3105457151,IT
+3105457152,3105458175,DE
+3105458176,3105459199,IT
+3105459200,3105460223,DK
+3105460224,3105461247,GB
+3105461248,3105462271,PL
+3105462272,3105463295,RU
+3105463296,3105464319,FR
+3105464320,3105465343,BE
+3105465344,3105466367,DE
+3105466368,3105467391,BE
+3105467392,3105468415,GB
+3105468416,3105469439,RU
+3105470464,3105471487,CZ
+3105471488,3105472511,GB
+3105472512,3105473535,CH
+3105473536,3105474559,ES
+3105474560,3105475583,FI
+3105475584,3105476607,IT
+3105476608,3105477631,GB
+3105477632,3105478655,DK
+3105478656,3105479679,PL
+3105479680,3105480703,GB
+3105480704,3105481727,CH
+3105481728,3105482751,NL
+3105482752,3105483775,IT
+3105483776,3105486847,GB
+3105486848,3105487871,SK
+3105487872,3105488895,IS
+3105488896,3105489407,BG
+3105489408,3105489663,FR
+3105489664,3105489919,BG
+3105489920,3105490943,ES
+3105490944,3105491967,SE
+3105491968,3105494015,GB
+3105494016,3105495039,BE
+3105495040,3105496063,AE
+3105496064,3105497087,RU
+3105497088,3105498111,IR
+3105498112,3105499135,DE
+3105499136,3105501183,RU
+3105501184,3105502207,FI
+3105502208,3105503231,RU
+3105503232,3105504255,NL
+3105504256,3105505279,DK
+3105505280,3105506303,IT
+3105506304,3105507327,TR
+3105507328,3105508351,RU
+3105508352,3105510399,DE
+3105510400,3105511423,SA
+3105511424,3105512447,FR
+3105512448,3105513471,GB
+3105513472,3105514495,DE
+3105514496,3105515519,RU
+3105515520,3105516543,FR
+3105516544,3105517567,NL
+3105517568,3105518591,RU
+3105518592,3105519615,GB
+3105519616,3105520639,RU
+3105520640,3105521663,FR
+3105521664,3105522687,NO
+3105522688,3105523711,LT
+3105523712,3105524735,ES
+3105524736,3105525759,IT
+3105525760,3105526783,TR
+3105526784,3105527807,GB
+3105527808,3105528831,JE
+3105528832,3105529855,DE
+3105529856,3105530879,LU
+3105530880,3105531903,NO
+3105531904,3105532927,RU
+3105532928,3105533951,RS
+3105533952,3105534975,BA
+3105534976,3105535231,GB
+3105535232,3105535773,NO
+3105535774,3105535774,RU
+3105535775,3105535999,NO
+3105536000,3105537023,AZ
+3105537024,3105538047,AT
+3105538048,3105539071,RU
+3105539072,3105540095,IT
+3105540096,3105541119,DE
+3105541120,3105542143,RU
+3105542144,3105543167,IR
+3105543168,3105544191,NL
+3105544192,3105545215,RU
+3105545216,3105546239,FR
+3105546240,3105547263,ES
+3105547264,3105548287,GB
+3105548288,3105549311,IR
+3105549312,3105549823,AT
+3105549824,3105550079,NL
+3105550080,3105550335,FR
+3105551360,3105552383,US
+3105552384,3105553407,FR
+3105553408,3105554431,DE
+3105554432,3105555455,DK
+3105555456,3105556479,CH
+3105556480,3105557503,DE
+3105557504,3105558527,UA
+3105558528,3105559551,NL
+3105559552,3105560575,GB
+3105560576,3105561599,NO
+3105561600,3105563647,NL
+3105563648,3105564671,IS
+3105564672,3105565695,NL
+3105565696,3105567743,RU
+3105567744,3105568767,PL
+3105568768,3105569791,MT
+3105569792,3105570815,HU
+3105570816,3105571839,LI
+3105571840,3105572863,KZ
+3105572864,3105573887,IT
+3105573888,3105574911,FR
+3105574912,3105575935,RU
+3105575936,3105576959,DE
+3105576960,3105577983,OM
+3105577984,3105579007,LV
+3105579008,3105580031,SE
+3105580032,3105581055,RU
+3105581056,3105582079,IL
+3105582080,3105583103,CH
+3105583104,3105584127,DK
+3105584128,3105585151,EG
+3105585152,3105586175,AT
+3105586176,3105587199,ES
+3105587200,3105588223,RS
+3105588224,3105589247,GB
+3105589248,3105590271,ES
+3105590272,3105591295,NL
+3105591296,3105592319,GB
+3105592320,3105593343,RU
+3105593344,3105595391,DE
+3105595392,3105596415,RU
+3105596416,3105598463,SE
+3105598464,3105599487,NL
+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,3105629183,GB
+3105629184,3105629695,BE
+3105629696,3105629951,NL
+3105629952,3105630207,BE
+3105630208,3105631231,FR
+3105631232,3105632255,GB
+3105632256,3105633279,ES
+3105633280,3105634303,IT
+3105634304,3105635327,NL
+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,3105646335,CZ
+3105646336,3105646591,SK
+3105646592,3105647615,MD
+3105647616,3105648639,UA
+3105648640,3105649663,GB
+3105649664,3105650687,PL
+3105650688,3105651199,EE
+3105651200,3105651455,PL
+3105651456,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,3105688063,SE
+3105688064,3105688575,LV
+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,3105769471,IT
+3105769472,3105770495,IE
+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
+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,3105866239,NL
+3105866240,3105866751,RU
+3105866752,3105867775,SE
+3105867776,3105868799,NL
+3105868800,3105869823,GB
+3105869824,3105870847,DE
+3105870848,3105871871,AT
+3105871872,3105872895,PL
+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,3105899007,CZ
+3105899008,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
+3105912832,3105913855,RU
+3105913856,3105914879,CH
+3105914880,3105915903,IR
+3105915904,3105916927,RU
+3105916928,3105917951,ES
+3105917952,3105918975,NL
+3105918976,3105919999,PL
+3105921024,3105922047,IE
+3105922048,3105923071,PL
+3105923072,3105924095,CZ
+3105924096,3105925119,RU
+3105925120,3105926143,BE
+3105926144,3105927167,BA
+3105927168,3105928191,IL
+3105928192,3105928447,ES
+3105928448,3105929215,CZ
+3105929216,3105930239,RU
+3105930240,3105931263,PT
+3105932288,3105933311,SE
+3105933312,3105933343,GB
+3105933344,3105933359,IT
+3105933360,3105933463,GB
+3105933464,3105933471,IT
+3105933472,3105933631,GB
+3105933632,3105933639,IT
+3105933640,3105934007,GB
+3105934008,3105934015,IT
+3105934016,3105934215,GB
+3105934216,3105934223,IT
+3105934224,3105934231,GB
+3105934232,3105934239,IT
+3105934240,3105934335,GB
+3105934336,3105935359,SE
+3105935360,3105936383,FR
+3105936384,3105937407,CH
+3105937408,3105938431,FR
+3105938432,3105939455,CH
+3105939456,3105940479,BY
+3105940480,3105941503,GR
+3105941504,3105942527,NL
+3105942528,3105943551,LU
+3105943552,3105944575,NL
+3105944576,3105945599,DE
+3105945600,3105946623,RU
+3105946624,3105947647,IE
+3105947648,3105948671,DE
+3105948672,3105949695,GB
+3105949696,3105950719,AT
+3105950720,3105951743,FR
+3105951744,3105952767,LU
+3105952768,3105953791,CH
+3105953792,3105954815,FR
+3105954816,3105955839,JO
+3105955840,3105956863,AL
+3105956864,3105957887,PL
+3105957888,3105958911,FR
+3105958912,3105959935,IQ
+3105959936,3105960959,SI
+3105960960,3105961983,HU
+3105961984,3105963007,IT
+3105963008,3105964031,TR
+3105964032,3105965055,ES
+3105965056,3105966079,NL
+3105966080,3105967103,FI
+3105967104,3105968127,GB
+3105968128,3105969151,HU
+3105969152,3105970175,GB
+3105970176,3105971199,FR
+3105971200,3105972223,GB
+3105972224,3105973247,FI
+3105973248,3105974271,US
+3105974272,3105975295,MD
+3105975296,3105976319,TR
+3105976320,3105977343,LB
+3105977344,3105978367,NL
+3105978368,3105979391,RU
+3105979392,3105980415,KW
+3105980416,3105981439,TR
+3105981440,3105982463,ES
+3105982464,3105983487,CZ
+3105983488,3105984511,UA
+3105984512,3105985279,CZ
+3105985280,3105985535,HU
+3105985536,3105986559,GB
+3105986560,3105987583,NL
+3105987584,3105988607,CZ
+3105988608,3105989631,RU
+3105989632,3105990655,NL
+3105990656,3105991679,US
+3105991680,3105992703,SA
+3105992704,3105993727,BH
+3105993728,3105994751,DE
+3105994752,3105995775,GB
+3105995776,3105996799,DE
+3105996800,3105997823,GB
+3105997824,3105999871,RU
+3105999872,3106000895,DE
+3106000896,3106001919,GB
+3106001920,3106002943,FR
+3106002944,3106003967,DE
+3106003968,3106004991,NL
+3106004992,3106006015,CH
+3106006016,3106007039,RU
+3106007040,3106008063,CY
+3106008064,3106009087,RU
+3106009088,3106010111,GB
+3106010112,3106011135,RU
+3106011136,3106012159,CH
+3106012160,3106013183,AT
+3106013184,3106014207,DE
+3106014208,3106015231,NO
+3106015232,3106016255,GB
+3106016256,3106017279,DK
+3106017280,3106018303,IQ
+3106018304,3106019327,RU
+3106019328,3106020351,LV
+3106020352,3106021375,PL
+3106021376,3106022399,FR
+3106022400,3106023423,IT
+3106023424,3106023679,NL
+3106023680,3106024319,US
+3106024320,3106024447,RU
+3106024448,3106025471,GB
+3106025472,3106026495,PL
+3106026496,3106027519,NL
+3106027520,3106027535,PL
+3106027536,3106027551,FR
+3106027552,3106027567,CH
+3106027568,3106027583,DE
+3106027584,3106027599,CZ
+3106027600,3106027615,IT
+3106027616,3106027631,NL
+3106027632,3106029567,GB
+3106029568,3106031615,NL
+3106031616,3106032639,AZ
+3106032640,3106033663,PL
+3106033664,3106034687,GB
+3106034688,3106035711,IT
+3106035712,3106036735,DE
+3106036736,3106037759,RS
+3106037760,3106038783,GB
+3106038784,3106039807,AZ
+3106039808,3106041855,IE
+3106041856,3106042879,DE
+3106042880,3106043903,GB
+3106043904,3106044927,IE
+3106044928,3106045951,GB
+3106045952,3106046975,TR
+3106046976,3106047999,DK
+3106048000,3106049023,IT
+3106049024,3106050047,FR
+3106050048,3106051071,NL
+3106051072,3106052095,LI
+3106052096,3106053119,RU
+3106053120,3106054143,NL
+3106054144,3106055167,IR
+3106055168,3106056191,GB
+3106056192,3106057215,NL
+3106057216,3106058239,GB
+3106058240,3106059263,NL
+3106059264,3106060287,RU
+3106060288,3106061311,DE
+3106061312,3106062335,NL
+3106062336,3106063359,ES
+3106063360,3106064383,DE
+3106064384,3106065407,NL
+3106065408,3106066431,IT
+3106066432,3106067455,GB
+3106067456,3106068479,DE
+3106068480,3106070527,NL
+3106070528,3106071551,UA
+3106071552,3106072575,BH
+3106072576,3106073599,GB
+3106073600,3106074623,PL
+3106074624,3106076671,RU
+3106076672,3106078719,GB
+3106078720,3106080767,RU
+3106080768,3106081791,UA
+3106081792,3106082815,DE
+3106082816,3106083839,KZ
+3106083840,3106084863,TR
+3106084864,3106085887,GB
+3106085888,3106086911,CH
+3106086912,3106087935,NL
+3106087936,3106091007,RU
+3106091008,3106092031,GB
+3106092032,3106093055,BE
+3106093056,3106094079,GB
+3106094080,3106095103,CH
+3106095104,3106096127,FR
+3106096128,3106097151,LV
+3106097152,3106098175,GB
+3106098176,3106098431,NL
+3106098432,3106098687,GB
+3106098688,3106098943,US
+3106098944,3106099199,GB
+3106099200,3106100223,NO
+3106100224,3106101247,SE
+3106101248,3106102271,GB
+3106102272,3106103295,ES
+3106103296,3106104319,NL
+3106104320,3106105343,UA
+3106105344,3106106367,AE
+3106106368,3106107391,CZ
+3106107392,3106108415,NL
+3106108416,3106110463,RU
+3106110464,3106111487,GB
+3106111488,3106112511,RU
+3106112512,3106113535,CZ
+3106113536,3106114559,NL
+3106114560,3106115583,ES
+3106115584,3106116607,DE
+3106116608,3106117631,GB
+3106117632,3106118655,AT
+3106118656,3106119679,BA
+3106119680,3106120703,RU
+3106120704,3106121727,BE
+3106121728,3106122751,RU
+3106122752,3106123775,BE
+3106123776,3106124799,BG
+3106124800,3106125823,AT
+3106125824,3106126847,NO
+3106126848,3106127871,ES
+3106127872,3106128895,RU
+3106128896,3106129919,PL
+3106129920,3106130943,NO
+3106130944,3106131967,FR
+3106131968,3106132991,DE
+3106132992,3106134015,NO
+3106134016,3106135039,DE
+3106135040,3106136063,RU
+3106136064,3106137087,CH
+3106137088,3106138111,GB
+3106138112,3106139135,DE
+3106139136,3106140159,SE
+3106140160,3106141183,DE
+3106141184,3106142207,IS
+3106142208,3106143231,GB
+3106143232,3106144255,CH
+3106144256,3106145279,ES
+3106145280,3106146303,BE
+3106146304,3106147327,GB
+3106147328,3106148351,FR
+3106148352,3106149375,AT
+3106150400,3106151423,GB
+3106151424,3106152447,NO
+3106152448,3106153471,GB
+3106153472,3106154495,AM
+3106154496,3106155519,NL
+3106155520,3106156543,DE
+3106156544,3106157567,NO
+3106157568,3106158591,IT
+3106158592,3106159615,UA
+3106159616,3106160639,RU
+3106160640,3106161663,IT
+3106161664,3106162687,BA
+3106162688,3106163711,IT
+3106163712,3106164735,GB
+3106164736,3106165759,LT
+3106165760,3106166783,BA
+3106166784,3106167807,BH
+3106167808,3106168831,RO
+3106168832,3106169855,FI
+3106169856,3106170879,CZ
+3106170880,3106171903,RU
+3106171904,3106172927,GB
+3106172928,3106173951,NL
+3106173952,3106175999,DE
+3106176000,3106177023,NO
+3106177024,3106178047,IT
+3106178048,3106179071,NL
+3106179072,3106180095,DE
+3106180096,3106181119,NO
+3106181120,3106182143,ES
+3106182144,3106183167,AX
+3106183168,3106184191,PL
+3106184192,3106185215,RU
+3106185216,3106186239,CZ
+3106186240,3106187263,BE
+3106187264,3106188287,PL
+3106188288,3106189311,RU
+3106189312,3106190335,KW
+3106190336,3106191359,LU
+3106191360,3106192383,DK
+3106192384,3106193407,UA
+3106193408,3106194431,IR
+3106194432,3106195455,UA
+3106195456,3106196479,AZ
+3106196480,3106198527,ES
+3106198528,3106199551,NO
+3106199552,3106200575,FR
+3106200576,3106202623,CH
+3106202624,3106203647,RU
+3106203648,3106204671,GR
+3106204672,3106205695,MT
+3106205696,3106206719,NO
+3106206720,3106207743,GE
+3106207744,3106208767,GB
+3106208768,3106209791,RO
+3106209792,3106210815,CH
+3106210816,3106211839,NL
+3106211840,3106212863,BE
+3106212864,3106213887,PS
+3106213888,3106214911,DE
+3106214912,3106215935,NL
+3106215936,3106216959,RS
+3106216960,3106217983,FR
+3106217984,3106219007,ME
+3106219008,3106220031,US
+3106220032,3106221055,FR
+3106221056,3106222079,IT
+3106222080,3106223103,RU
+3106223104,3106224127,IR
+3106224128,3106226175,RU
+3106226176,3106228223,NL
+3106228224,3106229247,CH
+3106229248,3106230271,GB
+3106230272,3106231295,IT
+3106231296,3106232319,DK
+3106232320,3106233343,IQ
+3106233344,3106234367,IT
+3106234368,3106235391,QA
+3106235392,3106235647,BA
+3106235648,3106235903,RU
+3106235904,3106236159,RO
+3106236160,3106236415,TR
+3106236416,3106237439,AT
+3106237440,3106238463,QA
+3106238464,3106239487,PL
+3106239488,3106240511,IT
+3106240512,3106241535,IE
+3106241536,3106242559,NL
+3106243584,3106244607,FI
+3106244608,3106245631,DE
+3106245632,3106246655,SE
+3106246656,3106247679,DE
+3106247680,3106248703,NO
+3106248704,3106249727,DE
+3106249728,3106250751,FR
+3106250752,3106251775,IQ
+3106251776,3106252799,RU
+3106252800,3106253823,RS
+3106253824,3106255871,GB
+3106255872,3106256895,IT
+3106256896,3106257919,TR
+3106257920,3106258943,RU
+3106258944,3106259967,UA
+3106259968,3106260991,GB
+3106260992,3106262015,AT
+3106262016,3106263039,IT
+3106263040,3106264063,PT
+3106264064,3106265087,ES
+3106265088,3106266111,GB
+3106266112,3106267135,FR
+3106267136,3106269183,ES
+3106269184,3106270207,IS
+3106270208,3106271231,GB
+3106271232,3106272255,SK
+3106272256,3106273279,NL
+3106273280,3106274303,DE
+3106274304,3106275327,FR
+3106275328,3106276351,FI
+3106276352,3106277375,AT
+3106277376,3106278399,DE
+3106278400,3106279423,NL
+3106279424,3106280447,RU
+3106280448,3106281471,FR
+3106281472,3106282495,DK
+3106282496,3106283519,LB
+3106283520,3106285567,GB
+3106285568,3106286591,DE
+3106286592,3106287615,GB
+3106287616,3106289663,DE
+3106289664,3106290687,LV
+3106290688,3106291711,IE
+3106291712,3106292735,CH
+3106292736,3106293759,NO
+3106293760,3106294783,UA
+3106294784,3106295807,DE
+3106295808,3106296831,GB
+3106296832,3106297855,RU
+3106297856,3106298879,NL
+3106298880,3106299903,FR
+3106299904,3106300927,GB
+3106300928,3106301951,NL
+3106301952,3106302975,GB
+3106302976,3106303999,CZ
+3106304000,3106305023,GB
+3106305024,3106306047,DE
+3106306048,3106307071,NO
+3106307072,3106308095,HU
+3106308096,3106309119,ES
+3106309120,3106310143,GB
+3106310144,3106311167,IT
+3106311168,3106312191,PT
+3106312192,3106313215,BA
+3106313216,3106314239,GB
+3106314240,3106316287,NL
+3106316288,3106317311,RU
+3106317312,3106318335,LT
+3106318336,3106319359,AT
+3106319360,3106320383,DK
+3106320384,3106321407,HR
+3106321408,3106322431,DK
+3106322432,3106323455,ME
+3106323456,3106324479,CZ
+3106324480,3106325503,AL
+3106325504,3106326527,FR
+3106326528,3106326783,NL
+3106326784,3106327551,IL
+3106327552,3106328575,RU
+3106328576,3106329599,UA
+3106329600,3106330623,IQ
+3106330624,3106331647,UA
+3106331648,3106333695,PL
+3106333696,3106334719,GB
+3106334720,3106335743,NL
+3106335744,3106336767,NO
+3106336768,3106337791,RU
+3106337792,3106338815,GB
+3106338816,3106339839,PL
+3106339840,3106340863,IT
+3106340864,3106341887,BA
+3106341888,3106342911,RU
+3106342912,3106343935,CH
+3106343936,3106344959,DE
+3106344960,3106345983,RU
+3106345984,3106347007,DE
+3106347008,3106348031,IT
+3106348032,3106349055,UA
+3106349056,3106350079,CH
+3106350080,3106351103,SA
+3106351104,3106352127,ES
+3106352128,3106353151,NL
+3106353152,3106354175,DE
+3106354176,3106355199,NL
+3106355200,3106356223,DE
+3106356224,3106357247,ES
+3106357248,3106358271,DE
+3106358272,3106359295,ES
+3106359296,3106360319,UA
+3106360320,3106361343,IQ
+3106361344,3106362367,RU
+3106362368,3106364415,DE
+3106364416,3106365439,CH
+3106365440,3106366463,ES
+3106366464,3106367487,IT
+3106367488,3106369535,DE
+3106369536,3106371583,RU
+3106371584,3106372607,NL
+3106372608,3106373631,SE
+3106373632,3106374655,FI
+3106374656,3106375679,RU
+3106375680,3106376703,SA
+3106376704,3106377727,FR
+3106377728,3106378751,SE
+3106378752,3106379775,RU
+3106379776,3106380799,LU
+3106380800,3106381823,FR
+3106381824,3106382847,PL
+3106382848,3106383871,IE
+3106383872,3106384895,FR
+3106384896,3106385919,AT
+3106385920,3106386943,DE
+3106386944,3106387967,IR
+3106387968,3106388991,FI
+3106388992,3106390015,IT
+3106390016,3106391039,RU
+3106391040,3106392063,UA
+3106392064,3106393087,NO
+3106393088,3106394111,RU
+3106394112,3106395135,PT
+3106395136,3106396159,NO
+3106396160,3106397183,FR
+3106397184,3106398207,DE
+3106398208,3106399231,UA
+3106399232,3106400255,CH
+3106400256,3106402303,GB
+3106402304,3106403327,IT
+3106403328,3106405375,GB
+3106405376,3106406399,DE
+3106406400,3106407423,RU
+3106407424,3106409471,GB
+3106409472,3106411519,IT
+3106411520,3106412543,HU
+3106412544,3106413567,GB
+3106413568,3106414591,RU
+3106414592,3106415615,AZ
+3106415616,3106416639,ES
+3106416640,3106417663,RU
+3106417664,3106418687,DK
+3106418688,3106419711,UA
+3106419712,3106420735,AT
+3106420736,3106421759,NL
+3106421760,3106422783,LU
+3106422784,3106423807,IE
+3106423808,3106424831,BE
+3106424832,3106425855,TR
+3106425856,3106426879,RU
+3106426880,3106427903,CZ
+3106427904,3106428927,TR
+3106428928,3106429951,FI
+3106429952,3106431999,NL
+3106432000,3106433023,FR
+3106433024,3106434047,RU
+3106434048,3106435071,NL
+3106435072,3106436095,PL
+3106436096,3106437119,DE
+3106437120,3106438143,IS
+3106438144,3106439167,GB
+3106439168,3106440191,RU
+3106440192,3106441215,DE
+3106441216,3106442239,HU
+3106442240,3106443263,GB
+3106443264,3106445311,ES
+3106445312,3106446335,RU
+3106446336,3106447359,US
+3106447360,3106448383,DE
+3106448384,3106449407,BG
+3106449408,3106450431,AT
+3106450432,3106451455,DE
+3106451456,3106452479,AZ
+3106452480,3106453503,UA
+3106453504,3106454527,SE
+3106454528,3106455551,ME
+3106455552,3106456575,PS
+3106456576,3106457599,PL
+3106457600,3106458623,FI
+3106458624,3106459647,GB
+3106459648,3106460671,LB
+3106460672,3106461695,IT
+3106461696,3106462719,CH
+3106462720,3106463743,IT
+3106463744,3106464767,IR
+3106464768,3106465791,PL
+3106466816,3106467839,EE
+3106467840,3106468863,IR
+3106468864,3106469887,GB
+3106469888,3106470911,DE
+3106470912,3106471935,NL
+3106471936,3106472959,IR
+3106472960,3106473983,FR
+3106473984,3106475007,GB
+3106475008,3106476031,DE
+3106476032,3106477055,NO
+3106477056,3106478079,UA
+3106478080,3106479103,GB
+3106479104,3106480127,FR
+3106480128,3106481151,IT
+3106481152,3106482175,NL
+3106482176,3106483199,RU
+3106483200,3106484223,GB
+3106484224,3106485247,NL
+3106485248,3106486271,CZ
+3106486272,3106488319,DE
+3106488320,3106489343,NO
+3106489344,3106490367,PL
+3106490368,3106491391,IT
+3106491392,3106492415,CH
+3106492416,3106493439,PL
+3106493440,3106494463,SY
+3106494464,3106495487,SA
+3106495488,3106496511,PL
+3106496512,3106497535,ES
+3106497536,3106498559,RU
+3106498560,3106500607,DE
+3106500608,3106501631,RU
+3106501632,3106502655,PT
+3106502656,3106503679,RU
+3106503680,3106504703,NL
+3106504704,3106505727,PL
+3106505728,3106506751,CH
+3106506752,3106509823,NL
+3106509824,3106510847,SE
+3106510848,3106511871,FR
+3106511872,3106512895,GE
+3106512896,3106513919,RU
+3106513920,3106514943,IT
+3106514944,3106515967,RU
+3106515968,3106516991,SE
+3106516992,3106518015,SI
+3106518016,3106519039,FR
+3106519040,3106520063,RU
+3106520064,3106521087,GB
+3106521088,3106522111,UA
+3106522112,3106523135,RU
+3106523136,3106524159,AZ
+3106524160,3106525183,RU
+3106525184,3106526207,CY
+3106526208,3106527231,IT
+3106527232,3106528255,KW
+3106528256,3106532351,GB
+3106532352,3106533375,BE
+3106533376,3106534399,NO
+3106534400,3106535423,ES
+3106535424,3106536447,FR
+3106536448,3106537471,IT
+3106537472,3106538495,GB
+3106538496,3106539519,SK
+3106539520,3106540543,NL
+3106540544,3106541567,RU
+3106541568,3106542591,GB
+3106542592,3106543615,ES
+3106543616,3106544639,IR
+3106544640,3106545663,FR
+3106545664,3106546687,CY
+3106546688,3106547711,MK
+3106547712,3106548735,UA
+3106548736,3106549759,PL
+3106549760,3106550783,RU
+3106550784,3106551807,GB
+3106551808,3106552831,NL
+3106552832,3106553855,RU
+3106553856,3106554879,GB
+3106554880,3106556927,NL
+3106556928,3106558975,RU
+3106558976,3106559999,NL
+3106560000,3106562047,RU
+3106562048,3106563071,TJ
+3106564096,3106565119,ES
+3106565120,3106566143,RU
+3106566144,3106568191,FR
+3106568192,3106569215,ES
+3106569216,3106570239,RU
+3106570240,3106571263,UA
+3106571264,3106572287,FR
+3106572288,3106573311,SE
+3106573312,3106574335,AE
+3106574336,3106575359,RU
+3106575360,3106577407,GB
+3106577408,3106578431,RU
+3106578432,3106579455,IT
+3106579456,3106580479,RU
+3106580480,3106581503,NO
+3106581504,3106582527,TR
+3106582528,3106583551,FR
+3106583552,3106584575,RU
+3106584576,3106585599,PL
+3106585600,3106586623,FR
+3106586624,3106587647,IQ
+3106587648,3106589695,NL
+3106590720,3106591743,GR
+3106591744,3106592767,IR
+3106592768,3106593791,LU
+3106593792,3106594815,GB
+3106594816,3106595839,IR
+3106595840,3106596863,RU
+3106596864,3106597887,FR
+3106597888,3106598911,GB
+3106598912,3106599935,ES
+3106599936,3106601983,CH
+3106601984,3106603007,DE
+3106603008,3106604031,BE
+3106604032,3106606079,RU
+3106606080,3106607103,AT
+3106607104,3106608127,IT
+3106608128,3106609151,NL
+3106609152,3106611199,DE
+3106611200,3106612223,GB
+3106612224,3106613247,FR
+3106613248,3106614271,GB
+3106614272,3106615295,FR
+3106615296,3106616319,GB
+3106616320,3106617343,DE
+3106617344,3106618367,BG
+3106618368,3106619391,FR
+3106619392,3106620415,NL
+3106620416,3106621439,FR
+3106621440,3106622463,ES
+3106622464,3106623487,GB
+3106623488,3106624511,NL
+3106624512,3106625535,RU
+3106625536,3106626559,FI
+3106626560,3106627583,RU
+3106627584,3106628607,GB
+3106628608,3106629631,RU
+3106629632,3106630655,EE
+3106630656,3106630911,US
+3106630912,3106631679,GB
+3106631680,3106632703,SK
+3106632704,3106633727,DE
+3106633728,3106634751,FI
+3106634752,3106635775,BE
+3106635776,3106636799,GB
+3106636800,3106637823,CZ
+3106637824,3106638847,PL
+3106638848,3106639871,DK
+3106639872,3106640895,GB
+3106640896,3106641919,IT
+3106641920,3106642943,BE
+3106642944,3106643967,GB
+3106643968,3106644991,PL
+3106644992,3106646015,IT
+3106646016,3106647039,DE
+3106647040,3106648063,HU
+3106648064,3106649087,DE
+3106649088,3106650111,ES
+3106650112,3106651135,GB
+3106651136,3106652159,AZ
+3106652160,3106653183,IE
+3106653184,3106654207,RU
+3106654208,3106655231,CH
+3106655232,3106656255,HU
+3106656256,3106657279,GB
+3106657280,3106658303,NL
+3106658304,3106659327,GB
+3106659328,3106660351,NL
+3106660352,3106661375,UA
+3106661376,3106662399,TR
+3106662400,3106663423,IE
+3106663424,3106664447,UA
+3106664448,3106665471,FR
+3106665472,3106666495,CH
+3106666496,3106667519,UA
+3106667520,3106668543,ES
+3106668544,3106669567,RU
+3106669568,3106670591,DE
+3106670592,3106672639,RU
+3106672640,3106673663,ES
+3106673664,3106674687,CH
+3106674688,3106676735,ES
+3106676736,3106677759,DE
+3106677760,3106678783,IR
+3106678784,3106680831,FR
+3106680832,3106682879,AT
+3106682880,3106683903,LU
+3106683904,3106684927,ES
+3106684928,3106685951,IR
+3106685952,3106686975,RU
+3106686976,3106687999,LT
+3106688000,3106689023,GB
+3106689024,3106690047,CH
+3106690048,3106691071,UA
+3106691072,3106692095,FR
+3106692096,3106693119,NL
+3106693120,3106694143,NO
+3106694144,3106695167,IR
+3106695168,3106697215,DE
+3106697216,3106698239,IR
+3106698240,3106699263,BG
+3106699264,3106700287,RU
+3106700288,3106701311,BG
+3106701312,3106702335,NL
+3106702336,3106703359,DE
+3106703360,3106704383,NL
+3106704384,3106705407,FR
+3106705408,3106706431,GR
+3106706432,3106707455,DE
+3106707456,3106708479,LB
+3106708480,3106709503,LI
+3106709504,3106710527,NL
+3106710528,3106711551,RU
+3106711552,3106712575,NL
+3106712576,3106713599,PL
+3106713600,3106714623,DE
+3106714624,3106715647,IT
+3106715648,3106716671,SE
+3106716672,3106717695,CZ
+3106717696,3106718719,TR
+3106718720,3106719743,CH
+3106719744,3106720767,DE
+3106720768,3106722815,AT
+3106722816,3106723839,IT
+3106723840,3106724863,PL
+3106724864,3106725887,IT
+3106725888,3106726911,NL
+3106726912,3106727935,AM
+3106727936,3106728959,ES
+3106728960,3106729983,RU
+3106729984,3106731007,IS
+3106731008,3106732031,NL
+3106732032,3106735103,GB
+3106735104,3106737151,IE
+3106737152,3106738175,RO
+3106738176,3106739199,DE
+3106739200,3106740223,DK
+3106740224,3106741247,GB
+3106741248,3106742271,NL
+3106742272,3106743295,FR
+3106743296,3106744319,NO
+3106744320,3106745343,SM
+3106745344,3106746367,NL
+3106746368,3106747391,DK
+3106747392,3106748415,BE
+3106748416,3106749439,CZ
+3106749440,3106750463,RU
+3106750464,3106751487,BG
+3106751488,3106752511,IT
+3106752512,3106753535,ES
+3106753536,3106754559,IS
+3106754560,3106755583,RU
+3106755584,3106756607,SE
+3106756608,3106757631,DE
+3106757632,3106758655,RU
+3106758656,3106759679,GB
+3106759680,3106760703,RU
+3106760704,3106761727,IE
+3106761728,3106762751,GB
+3106762752,3106763775,DE
+3106763776,3106764799,NL
+3106764800,3106765823,SE
+3106765824,3106766847,CZ
+3106766848,3106767871,SE
+3106767872,3106768895,DE
+3106768896,3106769919,CZ
+3106769920,3106770943,EE
+3106770944,3106771967,RU
+3106771968,3106772991,DK
+3106772992,3106774015,BG
+3106774016,3106775039,AE
+3106775040,3106776063,GB
+3106776064,3106777087,ES
+3106777088,3106778111,GB
+3106778112,3106779135,FR
+3106779136,3106780159,NO
+3106780160,3106781183,FR
+3106781184,3106782207,DK
+3106782208,3106783231,IR
+3106783232,3106783743,NL
+3106783744,3106784255,AE
+3106784256,3106785279,HU
+3106785280,3106786303,CZ
+3106786304,3106787327,DE
+3106787328,3106788351,IT
+3106788352,3106789375,AT
+3106789376,3106790399,PL
+3106790400,3106792447,GB
+3106792448,3106793471,FR
+3106793472,3106794495,AT
+3106794496,3106795519,CH
+3106795520,3106796543,DE
+3106796544,3106797567,UA
+3106797568,3106798591,DE
+3106798592,3106799615,FR
+3106799616,3106800639,IR
+3106800640,3106801663,GR
+3106801664,3106804735,RU
+3106804736,3106805759,EE
+3106805760,3106806783,IT
+3106806784,3106807807,NL
+3106807808,3106808831,HR
+3106808832,3106809855,DK
+3106809856,3106810879,TR
+3106810880,3106812927,RU
+3106812928,3106813951,TR
+3106813952,3106814975,CH
+3106814976,3106815999,MD
+3106816000,3106817023,NL
+3106817024,3106818047,IT
+3106818048,3106819071,IE
+3106819072,3106820095,BE
+3106820096,3106824191,CH
+3106824192,3106825215,RU
+3106825216,3106826239,IT
+3106826240,3106827263,PL
+3106827264,3106828287,IR
+3106828288,3106829311,GB
+3106829312,3106830335,NL
+3106830336,3106831359,US
+3106831360,3106832383,ES
+3106832384,3106833407,DE
+3106833408,3106834431,NO
+3106834432,3106835455,DE
+3106835456,3106836479,IT
+3106836480,3106837503,KW
+3106837504,3106838527,UA
+3106838528,3106838783,KZ
+3106838784,3106839551,RU
+3106839552,3106840575,NL
+3106840576,3106841599,BG
+3106841600,3106842623,FR
+3106842624,3106843647,PL
+3106843648,3106844671,GB
+3106844672,3106845695,GE
+3106845696,3106846719,NL
+3106846720,3106847743,RU
+3106847744,3106848767,UA
+3106848768,3106849791,NL
+3106849792,3106850815,RU
+3106850816,3106851839,GB
+3106851840,3106852863,PL
+3106852864,3106853887,GB
+3106853888,3106854911,CH
+3106854912,3106855935,IR
+3106855936,3106856959,UA
+3106856960,3106857983,NO
+3106857984,3106859007,FR
+3106859008,3106860031,NL
+3106860032,3106861055,UA
+3106861056,3106863103,PL
+3106863104,3106864127,UA
+3106864128,3106865151,IE
+3106865152,3106866175,NL
+3106866176,3106867199,AZ
+3106867200,3106868223,LV
+3106868224,3106869247,NL
+3106869248,3106870271,ES
+3106870272,3106871295,NL
+3106871296,3106872319,CH
+3106872320,3106873343,BE
+3106873344,3106874367,ES
+3106874368,3106875391,RU
+3106875392,3106876415,SE
+3106876416,3106877439,CZ
+3106877440,3106878463,IR
+3106878464,3106879487,RU
+3106879488,3106880511,MK
+3106880512,3106881535,GB
+3106881536,3106882559,PL
+3106882560,3106883583,BE
+3106883584,3106884607,GB
+3106884608,3106885631,FI
+3106885632,3106886655,FR
+3106886656,3106887679,US
+3106887680,3106888703,RS
+3106888704,3106889727,LV
+3106889728,3106890751,IT
+3106890752,3106891775,NL
+3106891776,3106892799,GB
+3106892800,3106893823,IT
+3106893824,3106894847,NL
+3106894848,3106895871,GB
+3106895872,3106896895,NL
+3106896896,3106897919,DE
+3106897920,3106898943,ES
+3106898944,3106899967,NL
+3106899968,3106900991,IT
+3106900992,3106902015,DE
+3106902016,3106903039,IE
+3106903040,3106904063,BE
+3106904064,3106906111,RU
+3106906112,3106907135,HU
+3106907136,3106908159,SE
+3106908160,3106909183,NL
+3106909184,3106910207,IL
+3106910208,3106911231,CZ
+3106911232,3106912255,IQ
+3106912256,3106913279,HU
+3106913280,3106914303,ME
+3106914304,3106915327,SE
+3106915328,3106917375,NL
+3106917376,3106918399,RU
+3106918400,3106919423,RS
+3106919424,3106920447,ES
+3106920448,3106921471,GB
+3106921472,3106922495,CZ
+3106922496,3106923519,NL
+3106923520,3106924543,IT
+3106924544,3106925567,DE
+3106925568,3106926591,NL
+3106926592,3106927615,FR
+3106927616,3106928639,ES
+3106928640,3106929663,NO
+3106929664,3106930687,FR
+3106930688,3106931711,DE
+3106931712,3106932735,AT
+3106932736,3106933759,PL
+3106933760,3106934783,BE
+3106934784,3106935807,RU
+3106935808,3106936831,CZ
+3106936832,3106937855,TR
+3106937856,3106938879,PL
+3106938880,3106939903,IT
+3106939904,3106940927,RU
+3106940928,3106941951,HU
+3106941952,3106943999,FR
+3106944000,3106945023,IT
+3106945024,3106946047,DE
+3106946048,3106947071,GB
+3106947072,3106948095,AE
+3106948096,3106949119,NL
+3106949120,3106950143,RU
+3106950144,3106951167,GB
+3106951168,3106952191,SE
+3106952192,3106954239,ES
+3106954240,3106955263,DE
+3106955264,3106956287,IT
+3106956288,3106957311,NL
+3106957312,3106958335,DE
+3106958336,3106959359,GB
+3106959360,3106960383,RU
+3106960384,3106961407,DE
+3106961408,3106962431,IE
+3106962432,3106963455,KZ
+3106963456,3106964479,PL
+3106964480,3106965503,FR
+3106965504,3106966527,KG
+3106966528,3106967551,IT
+3106967552,3106968575,CH
+3106968576,3106969599,KZ
+3106969600,3106970623,DK
+3106970624,3106971647,DE
+3106971648,3106973695,GB
+3106973696,3106974719,PL
+3106974720,3106975743,BA
+3106975744,3106976767,PL
+3106976768,3106977791,TR
+3106977792,3106978815,RU
+3106978816,3106979839,KW
+3106979840,3106980863,ES
+3106980864,3106981887,UA
+3106981888,3106982911,FR
+3106982912,3106984959,DE
+3106984960,3106985983,TR
+3106985984,3106989055,DE
+3106989056,3106990079,CH
+3106990080,3106991103,PL
+3106991104,3106992127,RU
+3106992128,3106993151,AM
+3106993152,3106994175,DE
+3106994176,3106995199,SK
+3106995200,3106996223,FR
+3106996224,3106997247,SI
+3106997248,3106998271,NO
+3106998272,3106999295,IT
+3106999296,3107000319,PL
+3107000320,3107001343,DE
+3107001344,3107002367,FR
+3107002368,3107003391,AL
+3107003392,3107004415,PL
+3107004416,3107007487,GB
+3107007488,3107008511,TR
+3107008512,3107009535,NL
+3107009536,3107010559,AT
+3107010560,3107011583,IT
+3107011584,3107012607,IE
+3107012608,3107013631,RU
+3107013632,3107014655,DE
+3107014656,3107015679,GB
+3107015680,3107016703,DE
+3107016704,3107017727,NL
+3107017728,3107018751,IR
+3107018752,3107019775,BG
+3107019776,3107020799,GB
+3107020800,3107021823,IR
+3107021824,3107022847,DE
+3107022848,3107023871,IR
+3107023872,3107024895,RU
+3107024896,3107025919,GB
+3107025920,3107026943,SI
+3107026944,3107027967,NL
+3107027968,3107028991,GB
+3107028992,3107030015,TR
+3107030016,3107031039,SE
+3107031040,3107032063,DE
+3107032064,3107034111,NL
+3107034112,3107035135,PL
+3107035136,3107036159,CH
+3107036160,3107037183,ES
+3107037184,3107038207,BH
+3107038208,3107039231,GE
+3107039232,3107040255,ES
+3107040256,3107041279,GB
+3107041280,3107042303,AT
+3107042304,3107043327,BE
+3107043328,3107044351,ES
+3107044352,3107045375,CZ
+3107045376,3107046399,ES
+3107046400,3107047423,NO
+3107047424,3107048447,PL
+3107048448,3107049471,IT
+3107049472,3107050495,FR
+3107050496,3107051519,IT
+3107051520,3107052543,GB
+3107052544,3107053567,CH
+3107053568,3107054591,ES
+3107054592,3107057663,GB
+3107057664,3107058687,RU
+3107058688,3107059711,LU
+3107059712,3107060735,IT
+3107060736,3107061759,DK
+3107061760,3107062783,BY
+3107062784,3107063807,MD
+3107063808,3107064831,RU
+3107064832,3107065855,HR
+3107065856,3107067903,GB
+3107067904,3107068927,RU
+3107068928,3107069951,HU
+3107069952,3107070975,FR
+3107070976,3107073023,SE
+3107073024,3107074047,ES
+3107074048,3107075071,PL
+3107075072,3107076095,FR
+3107076096,3107077119,BA
+3107077120,3107078143,NL
+3107078144,3107079167,FR
+3107079168,3107080191,TR
+3107080192,3107082239,FR
+3107082240,3107083263,RU
+3107083264,3107084287,BE
+3107084288,3107085311,FI
+3107085312,3107086335,NL
+3107086336,3107087359,EE
+3107087360,3107088383,IE
+3107088384,3107089407,NL
+3107089408,3107090431,IT
+3107090432,3107091455,FR
+3107091456,3107092479,ES
+3107092480,3107093503,DE
+3107093504,3107094527,CZ
+3107094528,3107095551,FR
+3107095552,3107096575,CY
+3107096576,3107097599,RU
+3107097600,3107098623,DE
+3107098624,3107099647,ES
+3107099648,3107101695,CZ
+3107101696,3107102719,RU
+3107102720,3107103743,GB
+3107103744,3107104767,PL
+3107104768,3107105791,ES
+3107105792,3107106815,NL
+3107106816,3107107839,ES
+3107107840,3107108863,AL
+3107108864,3107109887,RS
+3107109888,3107110911,CH
+3107110912,3107111935,DE
+3107111936,3107112959,ES
+3107112960,3107113983,RU
+3107113984,3107115007,ES
+3107115008,3107116031,NL
+3107116032,3107117055,SK
+3107117056,3107118079,RU
+3107118080,3107120127,CH
+3107120128,3107121151,CZ
+3107121152,3107122175,AT
+3107122176,3107123199,CH
+3107123200,3107124223,GB
+3107124224,3107125247,FI
+3107125248,3107126271,UA
+3107126272,3107127295,FR
+3107127296,3107128319,SA
+3107128320,3107129343,US
+3107129344,3107130367,AT
+3107130368,3107131391,IT
+3107131392,3107132415,GE
+3107132416,3107133439,RU
+3107133440,3107134463,CY
+3107134464,3107135487,CZ
+3107135488,3107136511,SA
+3107136512,3107137535,TR
+3107137536,3107138559,IR
+3107138560,3107139583,ES
+3107139584,3107142655,NL
+3107142656,3107143679,RU
+3107143680,3107144703,HU
+3107144704,3107145727,CH
+3107145728,3107146751,IE
+3107146752,3107147775,DK
+3107147776,3107148799,GB
+3107148800,3107149823,DE
+3107149824,3107150847,PL
+3107150848,3107151871,PT
+3107151872,3107152895,PL
+3107152896,3107153919,GE
+3107153920,3107154943,IE
+3107154944,3107155967,ES
+3107155968,3107156991,TR
+3107156992,3107158015,PL
+3107158016,3107159039,IT
+3107159040,3107160063,RU
+3107160064,3107161087,AT
+3107161088,3107162111,GR
+3107162112,3107163135,IT
+3107163136,3107164159,RU
+3107164160,3107165183,SA
+3107165184,3107166207,NL
+3107166208,3107167231,AE
+3107167232,3107168255,RU
+3107168256,3107169279,ES
+3107169280,3107170303,TR
+3107170304,3107171327,IT
+3107171328,3107172351,GB
+3107172352,3107173375,FR
+3107173376,3107174399,PL
+3107174400,3107175423,DE
+3107175424,3107176447,HU
+3107176448,3107177471,NL
+3107177472,3107178495,AT
+3107178496,3107179519,IR
+3107179520,3107180543,SA
+3107180544,3107181567,RU
+3107181568,3107182591,JO
+3107182592,3107183615,FR
+3107183616,3107184639,IQ
+3107184640,3107185663,SE
+3107185664,3107186687,CZ
+3107186688,3107187711,GB
+3107187712,3107188735,MT
+3107188736,3107189759,CZ
+3107189760,3107190783,NL
+3107190784,3107191807,CZ
+3107191808,3107192831,GB
+3107192832,3107194879,NL
+3107194880,3107195903,IT
+3107195904,3107196927,NL
+3107196928,3107197951,ES
+3107197952,3107198975,AT
+3107198976,3107199999,GB
+3107200000,3107201023,RU
+3107201024,3107202047,FR
+3107202048,3107203071,GB
+3107203072,3107204095,NO
+3107204096,3107205119,FR
+3107205120,3107206143,BG
+3107206144,3107207167,NL
+3107207168,3107208191,DE
+3107208192,3107209215,NL
+3107209216,3107210239,IT
+3107210240,3107213311,RU
+3107213312,3107214335,GE
+3107214336,3107215359,FR
+3107215360,3107216383,CY
+3107216384,3107217407,IE
+3107217408,3107218431,CZ
+3107218432,3107219455,IQ
+3107219456,3107220479,NL
+3107220480,3107221503,GB
+3107221504,3107222527,IT
+3107222528,3107223551,IQ
+3107223552,3107224575,AT
+3107224576,3107225599,FR
+3107225600,3107226623,AZ
+3107226624,3107227647,RU
+3107227648,3107228671,US
+3107228672,3107229695,RU
+3107229696,3107231743,GB
+3107231744,3107232767,RU
+3107232768,3107233791,SE
+3107233792,3107234815,DE
+3107234816,3107235839,FI
+3107235840,3107236863,PL
+3107236864,3107237887,CZ
+3107237888,3107238911,NL
+3107238912,3107239935,SE
+3107239936,3107241983,AT
+3107241984,3107243007,PL
+3107243008,3107245055,GB
+3107245056,3107246079,BG
+3107246080,3107248127,NL
+3107248128,3107249151,IT
+3107249152,3107250175,GB
+3107250176,3107251199,NL
+3107251200,3107252223,TR
+3107252224,3107253247,SY
+3107253248,3107254271,NL
+3107254272,3107255295,IT
+3107255296,3107256319,DE
+3107256320,3107257343,CZ
+3107257344,3107258367,GB
+3107258368,3107259391,IT
+3107259392,3107260415,CZ
+3107260416,3107261439,NL
+3107261440,3107262463,SI
+3107262464,3107263487,GB
+3107263488,3107264511,RU
+3107264512,3107265535,FR
+3107265536,3107266559,GB
+3107266560,3107267583,IE
+3107267584,3107268607,IT
+3107268608,3107270655,DE
+3107270656,3107271679,NL
+3107271680,3107272703,AE
+3107272704,3107273727,GB
+3107273728,3107274751,TR
+3107274752,3107275775,SE
+3107275776,3107276799,IT
+3107276800,3107277823,BY
+3107277824,3107278847,UA
+3107278848,3107279871,FR
+3107279872,3107280895,FI
+3107280896,3107281919,NL
+3107281920,3107282943,GB
+3107282944,3107283967,PL
+3107283968,3107284991,AL
+3107284992,3107286015,KG
+3107286016,3107287039,AT
+3107287040,3107288063,RS
+3107288064,3107289087,NO
+3107289088,3107290111,IT
+3107290112,3107291135,PL
+3107291136,3107292159,NL
+3107292160,3107293183,PL
+3107293184,3107294207,FR
+3107294208,3107295231,DE
+3107295232,3107296255,PL
+3107296256,3107297279,IT
+3107297280,3107298303,PL
+3107298304,3107299327,DE
+3107299328,3107300351,NL
+3107300352,3107301375,SE
+3107301376,3107303423,GB
+3107303424,3107304447,DE
+3107304448,3107305471,AT
+3107305472,3107306495,FR
+3107306496,3107307519,NO
+3107307520,3107308543,IT
+3107308544,3107310591,RO
+3107310592,3107311615,DE
+3107311616,3107312639,IL
+3107312640,3107313663,SE
+3107313664,3107315711,DE
+3107315712,3107316735,GB
+3107316736,3107317759,KG
+3107317760,3107318783,RU
+3107318784,3107319807,NL
+3107319808,3107320831,OM
+3107320832,3107321855,SA
+3107321856,3107322879,NL
+3107322880,3107323903,IT
+3107323904,3107324927,ES
+3107324928,3107325951,CH
+3107325952,3107326975,FR
+3107326976,3107327999,LT
+3107328000,3107329023,AE
+3107329024,3107330047,RU
+3107330048,3107331071,GE
+3107331072,3107332095,NO
+3107332096,3107333119,IT
+3107333120,3107334143,FR
+3107334144,3107335167,RU
+3107335168,3107336191,NL
+3107336192,3107337215,RU
+3107337216,3107339263,PL
+3107339264,3107340287,LB
+3107340288,3107341311,GB
+3107341312,3107342335,DE
+3107342336,3107343359,GB
+3107343360,3107344383,DE
+3107344384,3107345407,CH
+3107345408,3107346431,GB
+3107346432,3107347455,TR
+3107347456,3107348479,NL
+3107348480,3107349503,LB
+3107349504,3107350527,PL
+3107350528,3107351551,IE
+3107351552,3107352575,DE
+3107352576,3107353599,NL
+3107353600,3107355647,DE
+3107355648,3107356671,GB
+3107356672,3107357695,SI
+3107357696,3107358719,SY
+3107358720,3107359743,RU
+3107359744,3107360767,GB
+3107360768,3107361791,AT
+3107361792,3107362815,DE
+3107362816,3107363839,IT
+3107363840,3107364863,IQ
+3107364864,3107365887,CY
+3107365888,3107366911,IQ
+3107366912,3107367935,GB
+3107367936,3107368959,CH
+3107368960,3107369983,RU
+3107369984,3107371007,NL
+3107371008,3107372031,PL
+3107372032,3107373055,DE
+3107373056,3107374079,ES
+3107374081,3107374100,MT
+3107374101,3107374120,CR
+3107374121,3107374140,IT
+3107374141,3107374160,ES
+3107374161,3107374180,AU
+3107374181,3107374200,SI
+3107374201,3107374220,BR
+3107374221,3107374240,CA
+3107374241,3107374260,BO
+3107374261,3107374280,US
+3107374321,3107374332,MX
+3107374334,3107374335,MX
+3107375104,3107376127,GB
+3107376128,3107377151,NL
+3107377152,3107378175,AT
+3107378176,3107379199,IT
+3107379200,3107380223,NL
+3107380224,3107381247,RU
+3107381248,3107382271,IE
+3107382272,3107383295,FR
+3107383296,3107384319,DE
+3107384320,3107385343,RU
+3107385344,3107386367,DE
+3107386368,3107387391,RU
+3107387392,3107388415,BE
+3107388416,3107389439,KG
+3107389440,3107390463,RU
+3107390464,3107391487,RO
+3107391488,3107392511,SE
+3107392512,3107393535,HU
+3107393536,3107394559,GB
+3107394560,3107395583,NL
+3107395584,3107396607,AT
+3107396608,3107397631,GR
+3107397632,3107398655,FI
+3107398656,3107399679,AZ
+3107399680,3107400703,RU
+3107400704,3107401727,AL
+3107401728,3107402751,EE
+3107402752,3107403775,NL
+3107403776,3107404799,ES
+3107404800,3107405823,GB
+3107405824,3107406847,PL
+3107406848,3107408895,DE
+3107408896,3107409919,GB
+3107409920,3107410943,IT
+3107410944,3107411967,FI
+3107411968,3107412991,IT
+3107412992,3107414015,BE
+3107414016,3107415039,FR
+3107415040,3107416063,DE
+3107416064,3107417087,NO
+3107417088,3107419135,NL
+3107419136,3107422207,DE
+3107422208,3107423231,NL
+3107423232,3107424255,GB
+3107424256,3107425279,NL
+3107425280,3107426303,RO
+3107426304,3107427327,FR
+3107427328,3107428351,AL
+3107428352,3107429375,DE
+3107429376,3107430399,CH
+3107430400,3107431423,GB
+3107431424,3107432447,FR
+3107432448,3107433471,IT
+3107433472,3107434495,RU
+3107434496,3107435519,FI
+3107435520,3107436543,DE
+3107436544,3107437567,IQ
+3107437568,3107438591,GB
+3107438592,3107439615,DE
+3107439616,3107440639,DK
+3107440640,3107442687,IE
+3107443712,3107444735,IT
+3107444736,3107445759,ES
+3107445760,3107446783,DE
+3107446784,3107447807,IR
+3107447808,3107448831,BG
+3107448832,3107449855,DE
+3107449856,3107450879,AT
+3107450880,3107451903,DE
+3107451904,3107452927,FR
+3107452928,3107453951,ES
+3107453952,3107454975,GB
+3107454976,3107455999,IT
+3107456000,3107457023,GB
+3107457024,3107458047,IT
+3107458048,3107459071,IS
+3107459072,3107460095,UA
+3107460096,3107461119,GB
+3107461120,3107462143,CH
+3107462144,3107464191,NL
+3107464192,3107465215,PL
+3107465216,3107467263,GB
+3107467264,3107468287,FR
+3107468288,3107469311,NL
+3107469312,3107470335,DK
+3107470336,3107471359,NL
+3107471360,3107473407,GB
+3107473408,3107474431,IL
+3107474432,3107475455,RO
+3107475456,3107476479,NL
+3107476480,3107477503,BG
+3107477504,3107478527,AE
+3107478528,3107480575,IR
+3107480576,3107481599,DK
+3107481600,3107482623,DE
+3107482624,3107483647,ES
+3107483648,3107484671,DE
+3107484672,3107485695,RU
+3107485696,3107486719,IT
+3107486720,3107487743,AT
+3107487744,3107489791,DE
+3107489792,3107490815,MT
+3107490816,3107491839,DK
+3107491840,3107492863,NL
+3107492864,3107493887,DE
+3107493888,3107494911,FR
+3107494912,3107495935,IT
+3107495936,3107495999,FR
+3107496000,3107496031,BS
+3107496032,3107496063,VG
+3107496064,3107496319,FR
+3107496320,3107496703,NL
+3107496704,3107496719,PE
+3107496720,3107496735,KP
+3107496736,3107496751,FJ
+3107496752,3107496767,AR
+3107496768,3107496783,FR
+3107496784,3107496799,AQ
+3107496800,3107496815,MX
+3107496816,3107496831,CN
+3107496832,3107496847,BR
+3107496848,3107496863,KP
+3107496864,3107496895,FR
+3107496896,3107496911,IS
+3107496912,3107496959,FR
+3107496960,3107497983,DK
+3107497984,3107499007,IT
+3107499008,3107500031,PL
+3107500032,3107501055,FR
+3107501056,3107502079,ES
+3107502080,3107503103,NO
+3107503104,3107504127,PL
+3107504128,3107505151,IQ
+3107505152,3107506175,SA
+3107506176,3107507199,GB
+3107507200,3107508223,FR
+3107508224,3107509247,PL
+3107509248,3107510271,SE
+3107510272,3107511295,IT
+3107511296,3107512319,SI
+3107512320,3107513343,NL
+3107513344,3107514367,DE
+3107514368,3107515391,US
+3107515392,3107516415,TR
+3107516416,3107517439,FR
+3107517440,3107518463,PL
+3107518464,3107519487,MK
+3107519488,3107520511,MT
+3107520512,3107521535,DE
+3107521536,3107522559,SE
+3107522560,3107523583,NL
+3107523584,3107524607,FR
+3107524608,3107525631,SI
+3107525632,3107526655,IT
+3107526656,3107527679,DE
+3107527680,3107528703,RU
+3107528704,3107531775,GB
+3107531776,3107532799,MD
+3107532800,3107533823,AT
+3107533824,3107534847,FR
+3107534848,3107536895,NL
+3107536896,3107537919,TR
+3107537920,3107538943,AM
+3107538944,3107539967,KZ
+3107539968,3107540991,GB
+3107540992,3107542015,RO
+3107542016,3107543039,SE
+3107543040,3107544063,DE
+3107544064,3107545087,IR
+3107545088,3107546111,NL
+3107546112,3107547135,GB
+3107547136,3107548159,SE
+3107548160,3107549183,IT
+3107549184,3107551231,IE
+3107551232,3107552255,JO
+3107552256,3107553279,FR
+3107553280,3107554303,BE
+3107554304,3107555327,IR
+3107555328,3107556351,SE
+3107556352,3107557375,NL
+3107557376,3107558399,SI
+3107558400,3107559423,FR
+3107559424,3107561471,GB
+3107561472,3107562495,GL
+3107562496,3107563519,IR
+3107563520,3107564543,SE
+3107564544,3107565567,ES
+3107565568,3107566591,AT
+3107566592,3107567615,FI
+3107567616,3107568639,DE
+3107568640,3107569663,GB
+3107569664,3107571711,ES
+3107571712,3107572735,IR
+3107572736,3107573759,ES
+3107573760,3107574783,IT
+3107574784,3107575807,JE
+3107575808,3107576831,DE
+3107576832,3107577855,FR
+3107577856,3107578879,SI
+3107578880,3107579903,CZ
+3107579904,3107580927,IT
+3107580928,3107581951,RU
+3107581952,3107582975,DE
+3107582976,3107583999,TR
+3107584000,3107585023,RU
+3107585024,3107586047,NO
+3107586048,3107587071,DE
+3107587072,3107588095,IT
+3107588096,3107589119,FR
+3107589120,3107590143,IQ
+3107590144,3107591167,IE
+3107591168,3107592191,BG
+3107592192,3107593215,NL
+3107593216,3107594239,DE
+3107594240,3107595263,FI
+3107595264,3107596287,DE
+3107596288,3107597311,CZ
+3107597312,3107598335,IT
+3107598336,3107599359,PL
+3107599360,3107600383,AT
+3107600384,3107601407,NL
+3107601408,3107602431,DK
+3107602432,3107603455,LT
+3107603456,3107604479,NO
+3107604480,3107605503,HR
+3107605504,3107606527,SE
+3107606528,3107607551,PT
+3107607552,3107609599,GB
+3107609600,3107610623,BA
+3107610624,3107611647,BE
+3107611648,3107612671,SK
+3107612672,3107613695,IT
+3107613696,3107614719,DE
+3107614720,3107615743,RU
+3107615744,3107617791,IT
+3107617792,3107618815,RU
+3107618816,3107619839,CH
+3107619840,3107620863,IT
+3107620864,3107621887,NO
+3107621888,3107622911,SA
+3107622912,3107623935,SE
+3107623936,3107624959,NL
+3107624960,3107625983,RU
+3107625984,3107627007,DE
+3107627008,3107628031,PL
+3107628032,3107629055,GB
+3107629056,3107630079,DE
+3107630080,3107631103,ES
+3107631104,3107632127,GB
+3107632128,3107633151,SI
+3107633152,3107634175,FR
+3107634176,3107635199,RU
+3107635200,3107636223,IT
+3107636224,3107637247,ES
+3107637248,3107638271,LB
+3107638272,3107639295,RU
+3107639296,3107640319,ES
+3107640320,3107641343,DK
+3107641344,3107643391,RU
+3107643392,3107644415,IT
+3107644416,3107645439,FR
+3107645440,3107646463,IE
+3107646464,3107647487,NL
+3107647488,3107648511,IR
+3107648512,3107649535,TR
+3107649536,3107651583,RU
+3107651584,3107652607,CZ
+3107652608,3107653631,PL
+3107653632,3107654655,FR
+3107654656,3107655679,DE
+3107655680,3107656703,BE
+3107656704,3107657727,IT
+3107657728,3107658751,SI
+3107658752,3107659775,TR
+3107659776,3107660799,EE
+3107660800,3107661823,NL
+3107661824,3107662847,FR
+3107662848,3107663871,TR
+3107663872,3107664895,ES
+3107664896,3107665919,CH
+3107665920,3107666943,RU
+3107666944,3107667967,GB
+3107667968,3107668991,ES
+3107668992,3107670015,AM
+3107670016,3107671039,TR
+3107671040,3107672063,NL
+3107672064,3107673087,IT
+3107673088,3107674111,AE
+3107674112,3107675135,PL
+3107675136,3107676159,GB
+3107676160,3107678207,DE
+3107678208,3107679231,DK
+3107679232,3107680255,PL
+3107680256,3107681279,IR
+3107681280,3107682303,FI
+3107682304,3107683327,CZ
+3107683328,3107684351,GB
+3107684352,3107685375,DE
+3107685376,3107686399,IT
+3107686400,3107688447,RU
+3107688448,3107689471,CZ
+3107689472,3107690495,US
+3107690496,3107691519,IT
+3107691520,3107692543,UA
+3107692544,3107693567,PL
+3107693568,3107694591,IT
+3107694592,3107695615,BE
3120562176,3120594943,CO
3120594944,3120599039,AR
3120599040,3120601087,EC
@@ -101736,7 +50812,9 @@
3120602112,3120603135,BO
3120603136,3120610303,AR
3120610304,3120611327,PY
-3120611328,3120627711,AR
+3120611328,3120617471,AR
+3120617472,3120617727,CL
+3120617728,3120627711,AR
3120627712,3120644095,NI
3120644096,3120660479,DO
3120660480,3120668671,PA
@@ -101758,7 +50836,10 @@
3120824320,3120840703,CR
3120840704,3120857087,AR
3120857088,3120922623,EC
-3120922624,3120930815,PA
+3120922624,3120922879,PA
+3120922880,3120922943,CR
+3120922944,3120930815,PA
+3120930816,3120934911,CR
3120934912,3120949247,AR
3120949248,3120951295,CL
3120951296,3120955391,AR
@@ -101799,13 +50880,17 @@
3122734080,3122734591,US
3122734592,3122735103,AR
3122735104,3122735615,US
-3122735616,3122737407,AR
-3122737408,3122737663,US
-3122737664,3122737919,AR
-3122737920,3122738431,US
+3122735616,3122736127,AR
+3122736128,3122736383,US
+3122736384,3122737407,AR
+3122737408,3122738431,US
3122738432,3122739199,AR
3122739200,3122739455,US
-3122739456,3122741247,AR
+3122739456,3122739711,AR
+3122739712,3122740223,US
+3122740224,3122740479,AR
+3122740480,3122740735,US
+3122740736,3122741247,AR
3122741248,3122757631,DO
3122757632,3122774015,EC
3122774016,3122790399,AR
@@ -101834,20 +50919,31 @@
3124846592,3124848639,AR
3124848640,3124849663,PA
3124849664,3124850687,AR
-3124850688,3124854783,HN
+3124850688,3124853887,HN
+3124853888,3124853903,FR
+3124853904,3124854783,HN
3124854784,3124887551,CL
3124887552,3124953087,EC
3124953088,3125018623,CL
3125018624,3125280767,EC
3125280768,3125542911,PA
-3125542912,3125673983,NI
+3125542912,3125658111,NI
+3125658112,3125658367,MX
+3125658368,3125673983,NI
3125673984,3125805055,CL
3125805056,3126329343,CO
3126329344,3126853631,VE
-3126853632,3126870015,AR
+3126853632,3126855807,AR
+3126855808,3126855935,US
+3126855936,3126857855,AR
+3126857856,3126857983,US
+3126857984,3126858495,AR
+3126858496,3126858623,US
+3126858624,3126870015,AR
3126870016,3126874111,VE
3126874112,3126878207,CR
-3126878208,3126886399,PA
+3126878208,3126882303,PA
+3126882304,3126886399,US
3126886400,3126918143,AR
3126918144,3126919167,HN
3126919168,3127115775,CO
@@ -101864,14 +50960,19 @@
3128557568,3129999359,AR
3129999360,3130261503,CO
3130261504,3130277887,CL
-3130294272,3130302463,AR
+3130277888,3130284031,AR
+3130284032,3130286079,DO
+3130286080,3130290175,PA
+3130290176,3130302463,AR
3130302464,3130312703,PA
3130312704,3130314751,AR
3130314752,3130315775,CL
3130315776,3130316799,CR
3130316800,3130318847,CW
-3130318848,3130327039,AR
-3130327040,3130392575,DO
+3130318848,3130319871,AR
+3130319872,3130320895,RU
+3130320896,3130327039,AR
+3130327040,3130458111,DO
3130458112,3130523647,GT
3130523648,3130654719,AR
3130654720,3130785791,CO
@@ -101887,7 +50988,8 @@
3131310080,3131572223,VE
3131572224,3131834367,CO
3131834368,3132096511,CL
-3132096512,3132227583,CR
+3132096512,3132211199,CR
+3132211200,3132227583,AR
3132227584,3132293119,EC
3132293120,3132309503,HN
3132309504,3132313599,CR
@@ -101896,7 +50998,8 @@
3132321792,3132325887,PA
3132325888,3132358655,SR
3132358656,3132489727,CO
-3132489728,3132555263,AR
+3132489728,3132588031,AR
+3132588032,3132620799,CO
3132620800,3132915711,VE
3132915712,3132948479,PA
3132948480,3133014015,AR
@@ -101906,11 +51009,14 @@
3133073408,3133074431,CW
3133074432,3133075455,CL
3133075456,3133079551,CW
-3133079552,3133083647,AR
-3133083648,3133087743,UY
-3133087744,3133145087,AR
+3133079552,3133145087,AR
3133145088,3145727999,BR
-3145728000,3154116607,MX
+3145728000,3149135871,MX
+3149135872,3149398015,BR
+3149398016,3149881343,MX
+3149881344,3149889535,BR
+3149922304,3154051071,MX
+3154051072,3154116607,BR
3154116608,3154124799,RU
3154124800,3154126847,PL
3154126848,3154128895,RU
@@ -101934,28 +51040,17 @@
3156279296,3156344831,PL
3156344832,3156410367,IR
3156410368,3156475903,RU
-3156475904,3156539391,HU
-3156539392,3156539647,RO
-3156539648,3156541439,HU
+3156475904,3156541439,HU
3156541440,3156606975,PT
3156606976,3156672511,TR
-3156672512,3156676863,GB
-3156676864,3156677119,ES
-3156677120,3156738047,GB
+3156672512,3156738047,GB
3156738048,3156759431,DE
3156759432,3156759432,GB
-3156759433,3156791439,DE
-3156791440,3156791455,NL
-3156791456,3156793751,DE
-3156793752,3156793759,IT
-3156793760,3156800287,DE
-3156800288,3156800295,IT
-3156800296,3156803583,DE
+3156759433,3156803583,DE
3156803584,3156869119,TR
-3156869120,3156901887,LU
-3156901888,3156910079,SG
-3156910080,3156918271,US
-3156918272,3156934655,LU
+3156869120,3156930559,LU
+3156930560,3156933631,US
+3156933632,3156934655,SG
3156934656,3157000191,RU
3157000192,3157008383,MK
3157008384,3157016575,RU
@@ -101967,19 +51062,15 @@
3157196800,3157262335,PL
3157262336,3157786623,SA
3157786624,3158048767,TR
-3158048768,3158310911,CH
+3158048768,3158214911,CH
+3158214912,3158215167,DE
+3158215168,3158310911,CH
3158310912,3158312959,FI
3158312960,3158315007,AZ
3158315008,3158317055,DE
3158317056,3158319103,SI
3158319104,3158321151,GB
-3158321152,3158321407,DE
-3158321408,3158321423,US
-3158321424,3158322687,DE
-3158322688,3158322879,NL
-3158322880,3158322943,DE
-3158322944,3158323071,NL
-3158323072,3158323199,DE
+3158321152,3158323199,DE
3158323200,3158325247,BE
3158325248,3158327295,DE
3158327296,3158329343,NL
@@ -102013,27 +51104,7 @@
3158388736,3158390783,RU
3158390784,3158392831,GB
3158392832,3158394879,RU
-3158394880,3158395007,AT
-3158395008,3158395135,GB
-3158395136,3158395167,AT
-3158395168,3158395175,DE
-3158395176,3158395191,AT
-3158395192,3158395199,DE
-3158395200,3158395247,AT
-3158395248,3158395295,DE
-3158395296,3158395359,AT
-3158395360,3158395367,DE
-3158395368,3158395431,AT
-3158395432,3158395439,DE
-3158395440,3158395647,AT
-3158395648,3158395663,DE
-3158395664,3158395687,AT
-3158395688,3158395695,DE
-3158395696,3158395711,AT
-3158395712,3158395743,DE
-3158395744,3158396287,AT
-3158396288,3158396327,DE
-3158396328,3158396927,AT
+3158394880,3158396927,AT
3158396928,3158398975,IT
3158398976,3158401023,ES
3158401024,3158403071,GB
@@ -102048,15 +51119,7 @@
3158417408,3158419455,NL
3158419456,3158421503,FR
3158421504,3158423551,GB
-3158423552,3158424063,MT
-3158424064,3158424095,NL
-3158424096,3158424127,MT
-3158424128,3158424159,IE
-3158424160,3158425088,MT
-3158425089,3158425119,NL
-3158425120,3158425152,MT
-3158425153,3158425183,IE
-3158425184,3158425567,MT
+3158423552,3158425567,MT
3158425568,3158425599,IE
3158425600,3158427647,NL
3158427648,3158429695,DE
@@ -102070,117 +51133,44 @@
3158446080,3158448127,NL
3158450176,3158452223,RU
3158452224,3158454271,DE
-3158454272,3158458367,EU
3158458368,3158474751,GB
3158474752,3158507519,OM
3158507520,3158573055,FI
-3158573056,3158638591,RU
+3158573056,3158630399,RU
+3158630400,3158638591,PL
3158638592,3158704127,LT
3158704128,3158835199,KW
3158835200,3158851583,IQ
-3158851584,3158867967,RU
+3158851584,3158859775,RU
+3158859776,3158864383,NL
+3158864384,3158864639,RU
+3158864640,3158867967,NL
3158867968,3158884351,AZ
-3158884352,3158884607,DE
-3158884608,3158884863,BE
+3158884352,3158884863,DE
3158884864,3158885119,GB
3158885120,3158885887,TR
-3158885888,3158886143,HK
-3158886144,3158886175,DE
-3158886176,3158886207,BZ
-3158886208,3158886271,DE
-3158886272,3158886335,RO
-3158886336,3158887167,DE
-3158887168,3158887423,CA
-3158887424,3158889983,DE
-3158889984,3158890239,HK
-3158890240,3158891263,DE
-3158891264,3158891519,CA
-3158891520,3158891551,DE
+3158885888,3158891551,DE
3158891552,3158891583,GB
-3158891584,3158891647,RU
-3158891648,3158891711,DE
-3158891712,3158891775,RU
+3158891584,3158891775,DE
3158891776,3158892031,PL
3158892032,3158892415,DE
3158892416,3158892543,GB
-3158892544,3158892671,DE
-3158892672,3158892799,RU
-3158892800,3158893567,DE
+3158892544,3158893567,DE
3158893568,3158893823,GB
-3158893824,3158895167,DE
-3158895168,3158895231,RU
-3158895232,3158895423,DE
-3158895424,3158895487,RU
-3158895488,3158895551,MK
-3158895552,3158895615,AE
-3158895616,3158896255,DE
-3158896256,3158896383,IN
-3158896384,3158897503,DE
-3158897504,3158897567,RU
-3158897568,3158897631,DE
-3158897632,3158897663,BZ
-3158897664,3158897727,DE
+3158893824,3158897727,DE
3158897728,3158897791,RU
3158897792,3158897855,DE
3158897856,3158897919,UA
3158897920,3158898207,DE
3158898208,3158898271,CZ
-3158898272,3158898335,RU
-3158898336,3158898431,DE
+3158898272,3158898431,DE
3158898432,3158898687,US
-3158898688,3158898815,DE
-3158898816,3158898943,BZ
-3158898944,3158899199,ES
-3158899200,3158899455,DE
-3158899456,3158899711,CA
-3158899712,3158900735,DE
+3158898688,3158900735,DE
3158900736,3158917119,FR
3158917120,3158933503,DE
3158933504,3158949887,RU
3158949888,3158966271,GR
-3158966272,3158966687,DE
-3158966688,3158966719,US
-3158966720,3158967327,DE
-3158967328,3158967359,US
-3158967360,3158967551,DE
-3158967552,3158967583,US
-3158967584,3158967807,DE
-3158967808,3158967839,US
-3158967840,3158970495,DE
-3158970496,3158970623,US
-3158970624,3158970751,DE
-3158970752,3158970879,US
-3158970880,3158970975,DE
-3158970976,3158971135,US
-3158971136,3158971231,DE
-3158971232,3158971391,US
-3158971392,3158971487,DE
-3158971488,3158971647,US
-3158971648,3158971775,DE
-3158971776,3158971903,US
-3158971904,3158972031,DE
-3158972032,3158972159,US
-3158972160,3158972287,DE
-3158972288,3158972415,US
-3158972416,3158972543,DE
-3158972544,3158972671,US
-3158972672,3158972799,DE
-3158972800,3158972927,US
-3158972928,3158973055,DE
-3158973056,3158973183,US
-3158973184,3158973311,DE
-3158973312,3158973439,US
-3158973440,3158973567,DE
-3158973568,3158973695,US
-3158973696,3158973823,DE
-3158973824,3158973951,US
-3158973952,3158974079,DE
-3158974080,3158974207,US
-3158974208,3158974239,DE
-3158974240,3158974271,US
-3158974272,3158974335,DE
-3158974336,3158974463,US
-3158974464,3158982655,DE
+3158966272,3158982655,DE
3158982656,3158999039,GB
3158999040,3159031807,RO
3159031808,3159048191,RU
@@ -102213,22 +51203,12 @@
3160186880,3160188927,EE
3160188928,3160190975,SE
3160190976,3160193023,RU
-3160193024,3160193279,A2
-3160193280,3160193535,IT
-3160193536,3160194543,A2
-3160194544,3160194551,IT
-3160194552,3160194687,A2
-3160194688,3160194815,IT
-3160194816,3160195071,A2
+3160193024,3160195071,IT
3160195072,3160197119,RU
3160197120,3160199167,DE
3160199168,3160201215,GE
3160201216,3160203263,RU
-3160203264,3160203775,CH
-3160203776,3160203783,DE
-3160203784,3160203807,CH
-3160203808,3160203815,FR
-3160203816,3160205311,CH
+3160203264,3160205311,CH
3160205312,3160207359,GB
3160207360,3160209407,RU
3160209408,3160211455,SE
@@ -102241,9 +51221,7 @@
3160227840,3160229887,IR
3160229888,3160231935,ES
3160231936,3160233983,BE
-3160233984,3160235519,GE
-3160235520,3160235775,DE
-3160235776,3160236031,GE
+3160233984,3160236031,GE
3160236032,3160238079,BE
3160238080,3160240127,RU
3160240128,3160242175,BE
@@ -102260,16 +51238,7 @@
3160262656,3160264703,HU
3160264704,3160266751,RU
3160266752,3160268799,DE
-3160268800,3160271615,PT
-3160271616,3160271743,ES
-3160271744,3160271807,PT
-3160271808,3160271935,ES
-3160271936,3160271951,PT
-3160271952,3160272127,ES
-3160272128,3160272319,PT
-3160272320,3160272383,ES
-3160272384,3160272638,PT
-3160272639,3160272895,ES
+3160268800,3160272895,PT
3160272896,3160274943,RU
3160274944,3160276991,AT
3160276992,3160279039,FR
@@ -102294,19 +51263,10 @@
3160315904,3160317951,KZ
3160317952,3160322047,RU
3160322048,3160324095,CH
-3160324096,3160328191,IT
+3160326144,3160328191,IT
3160328192,3160330239,FR
3160330240,3160332287,RU
-3160332288,3160332751,NO
-3160332752,3160332759,SE
-3160332760,3160332767,AU
-3160332768,3160333055,NO
-3160333056,3160333087,CO
-3160333088,3160333167,NO
-3160333168,3160333183,PA
-3160333184,3160334063,NO
-3160334064,3160334071,PA
-3160334072,3160334335,NO
+3160332288,3160334335,NO
3160334336,3160336383,RU
3160336384,3160338431,CZ
3160338432,3160340479,GB
@@ -102320,16 +51280,14 @@
3160358912,3160360959,JO
3160360960,3160363007,IT
3160363008,3160365055,GB
-3160365056,3160369151,NL
+3160367104,3160369151,NL
3160369152,3160371199,RU
3160371200,3160373247,ES
3160373248,3160375295,CZ
3160375296,3160377343,GB
3160377344,3160379391,NL
3160379392,3160381439,TR
-3160381440,3160382543,UA
-3160382544,3160382559,DE
-3160382560,3160383487,UA
+3160381440,3160383487,UA
3160383488,3160385535,SA
3160385536,3160387583,NL
3160387584,3160389631,RS
@@ -102351,40 +51309,43 @@
3161571328,3161587711,UZ
3161587712,3161604095,RU
3161604096,3161612287,PL
-3161612288,3161616383,EU
3161616384,3161618431,GB
3161618432,3161620479,IQ
3161620480,3161636863,DK
3161636864,3161653247,RU
3161653248,3161669631,LU
-3161669632,3161669887,RE
-3161669888,3161670143,FR
-3161670144,3161670655,RE
-3161670656,3161670911,FR
-3161670912,3161671167,RE
-3161671168,3161671679,FR
-3161671680,3161672191,RE
-3161672192,3161672959,FR
-3161672960,3161673727,RE
-3161673728,3161674751,FR
-3161674752,3161675263,RE
-3161675264,3161677311,FR
-3161677312,3161677823,RE
+3161669632,3161669887,FR
+3161669888,3161670143,RE
+3161670144,3161670399,FR
+3161670400,3161670655,RE
+3161670656,3161671167,FR
+3161671168,3161671423,RE
+3161671424,3161672063,FR
+3161672064,3161672191,RE
+3161672192,3161672703,FR
+3161672704,3161672959,RE
+3161672960,3161673471,FR
+3161673472,3161673983,RE
+3161673984,3161675775,FR
+3161675776,3161676031,RE
+3161676032,3161677823,FR
3161677824,3161678079,MQ
3161678080,3161678335,FR
-3161678336,3161678847,MQ
-3161678848,3161679103,FR
-3161679104,3161679871,MQ
-3161679872,3161682431,FR
-3161682432,3161682687,GF
-3161682688,3161683199,FR
-3161683200,3161683455,MQ
-3161683456,3161683711,FR
-3161683712,3161683967,MQ
-3161683968,3161684479,FR
-3161684480,3161685247,MQ
-3161685248,3161685759,FR
-3161685760,3161686015,MQ
+3161678336,3161679359,MQ
+3161679360,3161679615,FR
+3161679616,3161679871,MQ
+3161679872,3161680639,GP
+3161680640,3161681151,FR
+3161681152,3161681919,GP
+3161681920,3161682175,GF
+3161682176,3161682431,FR
+3161682432,3161682943,GF
+3161682944,3161683967,MQ
+3161683968,3161684223,FR
+3161684224,3161684479,MQ
+3161684480,3161685503,FR
+3161685504,3161685759,MQ
+3161685760,3161686015,FR
3161686016,3161702399,UA
3161702400,3161718783,AM
3161718784,3161735167,PL
@@ -102394,12 +51355,11 @@
3161784320,3161800703,FI
3161800704,3161817087,SA
3161817088,3161833471,PL
-3161833472,3161835519,MK
-3161835520,3161835775,AT
-3161835776,3161837567,MK
-3161837568,3161837695,AT
-3161837696,3161847551,MK
-3161847552,3161849855,AT
+3161833472,3161840639,AT
+3161840640,3161840895,MK
+3161840896,3161846015,AT
+3161846016,3161847039,MK
+3161847040,3161849855,AT
3161849856,3161866239,BE
3161866240,3161882623,IR
3161882624,3161899007,DE
@@ -102422,18 +51382,26 @@
3162071040,3162087423,IR
3162087424,3162095615,SK
3162095616,3162103807,GE
-3162103808,3162107903,FR
-3162107904,3162108415,NL
-3162108416,3162109951,FR
-3162109952,3162110975,NL
-3162110976,3162111231,FR
-3162111232,3162111999,NL
+3162103808,3162105087,FR
+3162105088,3162105855,NL
+3162105856,3162106111,FR
+3162106112,3162106367,NL
+3162106368,3162106623,FR
+3162106624,3162107391,NL
+3162107392,3162107647,FR
+3162107648,3162108415,NL
+3162108416,3162108671,FR
+3162108672,3162108927,NL
+3162108928,3162109183,FR
+3162109184,3162111103,NL
+3162111104,3162111167,FR
+3162111168,3162111999,NL
3162112000,3162120191,PL
3162120192,3162128383,GB
3162128384,3162129407,NL
3162129408,3162129919,DE
3162129920,3162136575,NL
-3162136576,3162144767,ES
+3162136576,3162144767,IR
3162144768,3162152959,SE
3162152960,3162161151,RU
3162161152,3162169343,CZ
@@ -102452,18 +51420,14 @@
3162267648,3162275839,RU
3162275840,3162284031,NO
3162284032,3162292223,PL
-3162292224,3162297855,BA
-3162297856,3162298111,ME
-3162298112,3162300415,BA
+3162292224,3162300415,BA
3162300416,3162308607,RU
3162308608,3162316799,HR
3162316800,3162324991,PL
3162324992,3162327039,IE
3162327040,3162329087,CH
3162329088,3162331135,IE
-3162331136,3162332671,GB
-3162332672,3162332927,NL
-3162332928,3162333183,DE
+3162331136,3162333183,GB
3162333184,3162341375,IT
3162341376,3162349567,PL
3162349568,3162357759,TR
@@ -102471,11 +51435,7 @@
3162365952,3162374143,PL
3162374144,3162382335,BG
3162382336,3162390527,RU
-3162390528,3162392959,SE
-3162392960,3162393087,SE
-3162393088,3162394623,SE
-3162394624,3162396671,SE
-3162396672,3162398719,SE
+3162390528,3162398719,SE
3162398720,3162406911,BE
3162406912,3162415103,IR
3162415104,3162423295,DE
@@ -102495,114 +51455,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,3162696703,RU
-3162696704,3162696711,BE
-3162696712,3162696719,HR
-3162696720,3162696727,CY
-3162696728,3162696735,DK
-3162696736,3162696743,EG
-3162696744,3162696751,FI
-3162696752,3162696759,FR
-3162696760,3162696767,DE
-3162696768,3162696775,GR
-3162696776,3162696783,HU
-3162696784,3162696791,IN
-3162696792,3162696799,IR
-3162696800,3162696807,IL
-3162696808,3162696815,IT
-3162696816,3162696823,JO
-3162696824,3162696831,LV
-3162696832,3162696839,LB
-3162696840,3162696847,LI
-3162696848,3162696855,MT
-3162696856,3162696863,NO
-3162696864,3162696871,PK
-3162696872,3162696879,PL
-3162696880,3162696887,PT
-3162696888,3162696895,RO
-3162696896,3162696903,RU
-3162696904,3162696911,ZA
-3162696912,3162696919,ES
-3162696920,3162696927,SE
-3162696928,3162696935,CH
-3162696936,3162696943,TR
-3162696944,3162696951,UA
-3162696952,3162696959,GB
-3162696960,3162698751,RU
-3162698752,3162699263,NL
-3162699264,3162699519,UA
-3162699520,3162700031,RU
-3162700032,3162700287,UZ
-3162700288,3162700291,AL
-3162700292,3162700295,AG
-3162700296,3162700299,AR
-3162700300,3162700303,AM
-3162700304,3162700307,AU
-3162700308,3162700311,BS
-3162700312,3162700315,BY
-3162700316,3162700319,BZ
-3162700320,3162700323,BM
-3162700324,3162700327,BA
-3162700328,3162700331,BR
-3162700332,3162700335,VG
-3162700336,3162700339,BN
-3162700340,3162700343,BG
-3162700344,3162700347,CA
-3162700348,3162700351,KY
-3162700352,3162700355,CL
-3162700356,3162700359,CO
-3162700360,3162700363,CR
-3162700364,3162700367,HR
-3162700368,3162700371,CY
-3162700372,3162700375,DK
-3162700376,3162700379,EG
-3162700380,3162700383,FR
-3162700384,3162700387,DE
-3162700388,3162700391,GR
-3162700392,3162700395,HK
-3162700396,3162700399,HU
-3162700400,3162700403,IN
-3162700404,3162700407,ID
-3162700408,3162700411,IL
-3162700412,3162700415,IT
-3162700416,3162700419,JP
-3162700420,3162700423,KR
-3162700424,3162700427,LV
-3162700428,3162700431,LB
-3162700432,3162700435,LI
-3162700436,3162700439,MY
-3162700440,3162700443,MT
-3162700444,3162700447,MX
-3162700448,3162700451,NZ
-3162700452,3162700455,NO
-3162700456,3162700459,PK
-3162700460,3162700463,PA
-3162700464,3162700467,PE
-3162700468,3162700471,PH
-3162700472,3162700475,RO
-3162700476,3162700479,RU
-3162700480,3162700483,RS
-3162700484,3162700487,SG
-3162700488,3162700491,SK
-3162700492,3162700495,ZA
-3162700496,3162700499,ES
-3162700500,3162700503,KN
-3162700504,3162700507,CH
-3162700508,3162700511,TW
-3162700512,3162700515,TH
-3162700516,3162700519,TR
-3162700520,3162700523,UA
-3162700524,3162700527,GB
-3162700528,3162700531,US
-3162700532,3162700535,UY
-3162700536,3162700539,RU
-3162700540,3162700543,VE
-3162700544,3162700799,UA
-3162700800,3162701823,RU
+3162693632,3162701823,RU
3162701824,3162734591,MD
3162734592,3162767359,RU
3162767360,3162800127,SA
@@ -102616,995 +51471,19 @@
3163062272,3163095039,IR
3163095040,3163127807,PL
3163127808,3163160575,BH
-3163160576,3163161631,DE
-3163161632,3163161663,DK
-3163161664,3163161695,US
-3163161696,3163161727,BG
-3163161728,3163161759,DE
-3163161760,3163161823,BR
-3163161824,3163161855,US
-3163161856,3163161887,BR
-3163161888,3163161951,US
-3163161952,3163162015,DE
-3163162016,3163162047,US
-3163162048,3163162079,DE
-3163162080,3163162111,RU
-3163162112,3163162239,DE
-3163162240,3163162271,MA
-3163162272,3163162335,NL
-3163162336,3163162367,RU
-3163162368,3163162431,DE
-3163162432,3163162463,CY
-3163162464,3163162559,DE
-3163162560,3163162623,US
-3163162624,3163163135,DE
-3163163136,3163163136,KZ
-3163163137,3163163145,DE
-3163163146,3163163148,NL
-3163163149,3163163149,HU
-3163163150,3163163151,TR
-3163163152,3163163152,US
-3163163153,3163163155,DE
-3163163156,3163163156,RU
-3163163157,3163163159,DE
-3163163160,3163163160,SE
-3163163161,3163163172,DE
-3163163173,3163163173,RU
-3163163174,3163163174,IL
-3163163175,3163163175,TR
-3163163176,3163163176,DE
-3163163177,3163163177,PK
-3163163178,3163163178,IN
-3163163179,3163163179,US
-3163163180,3163163180,MX
-3163163181,3163163181,DE
-3163163182,3163163182,HR
-3163163183,3163163183,NL
-3163163184,3163163184,IT
-3163163185,3163163187,DE
-3163163188,3163163189,MX
-3163163190,3163163197,DE
-3163163198,3163163198,CZ
-3163163199,3163163239,DE
-3163163240,3163163240,SA
-3163163241,3163163241,AZ
-3163163242,3163163250,DE
-3163163251,3163163251,ZA
-3163163252,3163163252,SA
-3163163253,3163163253,DE
-3163163254,3163163254,ES
-3163163255,3163163255,IT
-3163163256,3163163258,DE
-3163163259,3163163261,CZ
-3163163262,3163163270,DE
-3163163271,3163163271,EG
-3163163272,3163163272,MD
-3163163273,3163163273,IT
-3163163274,3163163274,LT
-3163163275,3163163277,DE
-3163163278,3163163278,LK
-3163163279,3163163279,DE
-3163163280,3163163280,PK
-3163163281,3163163286,DE
-3163163287,3163163287,RU
-3163163288,3163163293,DE
-3163163294,3163163294,AL
-3163163295,3163163296,DE
-3163163297,3163163298,IT
-3163163299,3163163304,DE
-3163163305,3163163305,TR
-3163163306,3163163307,DE
-3163163308,3163163308,AL
-3163163309,3163163309,DE
-3163163310,3163163310,US
-3163163311,3163163312,DE
-3163163313,3163163313,IN
-3163163314,3163163323,DE
-3163163324,3163163324,IN
-3163163325,3163163330,DE
-3163163331,3163163331,UG
-3163163332,3163163332,LT
-3163163333,3163163333,DE
-3163163334,3163163334,US
-3163163335,3163163336,DE
-3163163337,3163163337,NL
-3163163338,3163163338,TR
-3163163339,3163163340,DE
-3163163341,3163163341,BR
-3163163342,3163163342,DE
-3163163343,3163163343,IR
-3163163344,3163163345,DE
-3163163346,3163163347,CA
-3163163348,3163163348,DE
-3163163349,3163163349,BR
-3163163350,3163163350,DE
-3163163351,3163163351,RU
-3163163352,3163163352,DE
-3163163353,3163163353,BR
-3163163354,3163163356,DE
-3163163357,3163163357,HK
-3163163358,3163163358,DE
-3163163359,3163163359,BR
-3163163360,3163163361,DE
-3163163362,3163163362,BR
-3163163363,3163163363,MD
-3163163364,3163163365,DK
-3163163366,3163163366,US
-3163163367,3163163368,DE
-3163163369,3163163369,ES
-3163163370,3163163371,PE
-3163163372,3163163374,DE
-3163163375,3163163375,BR
-3163163376,3163163376,DE
-3163163377,3163163378,NL
-3163163379,3163163379,PE
-3163163380,3163163382,DE
-3163163383,3163163383,UA
-3163163384,3163163385,DE
-3163163386,3163163386,MD
-3163163387,3163163387,DE
-3163163388,3163163388,PE
-3163163389,3163163389,BG
-3163163390,3163163390,LK
-3163163391,3163163647,DE
-3163163648,3163163679,DK
-3163163680,3163163711,RU
-3163163712,3163163743,BR
-3163163744,3163163807,US
-3163163808,3163163839,DE
-3163163840,3163163871,PL
-3163163872,3163163903,DE
-3163163904,3163163935,GR
-3163163936,3163163967,BR
-3163163968,3163163999,US
-3163164000,3163164063,DE
-3163164064,3163164095,AM
-3163164096,3163164127,RU
-3163164128,3163164159,DE
-3163164160,3163164191,US
-3163164192,3163164223,DE
-3163164224,3163164255,LT
-3163164256,3163164287,DE
-3163164288,3163164319,CL
-3163164320,3163164351,RU
-3163164352,3163164383,LT
-3163164384,3163164415,US
-3163164416,3163164447,PL
-3163164448,3163164479,US
-3163164480,3163164511,DE
-3163164512,3163164543,HU
-3163164544,3163164575,RU
-3163164576,3163164607,DE
-3163164608,3163164639,ES
-3163164640,3163164671,US
-3163164672,3163165695,DE
-3163165696,3163165727,US
-3163165728,3163165759,RU
-3163165760,3163165791,PL
-3163165792,3163165823,RU
-3163165824,3163165855,BR
-3163165856,3163165887,DE
-3163165888,3163165919,AR
-3163165920,3163165951,US
-3163165952,3163165983,DE
-3163165984,3163166015,AR
-3163166016,3163166047,US
-3163166048,3163166111,DE
-3163166112,3163166121,AR
-3163166122,3163166122,DE
-3163166123,3163166143,AR
-3163166144,3163166175,DE
-3163166176,3163166207,RU
-3163166208,3163166239,TR
-3163166240,3163166271,IT
-3163166272,3163166335,DE
-3163166336,3163166399,US
-3163166400,3163166463,DE
-3163166464,3163166495,BR
-3163166496,3163166527,RO
-3163166528,3163166591,DE
-3163166592,3163166623,IN
-3163166624,3163166687,DE
-3163166688,3163166719,RU
-3163166720,3163166986,DE
-3163166987,3163166987,CH
-3163166988,3163166988,RU
-3163166989,3163166989,UA
-3163166990,3163166990,AE
-3163166991,3163166991,US
-3163166992,3163166992,DE
-3163166993,3163166993,US
-3163166994,3163166994,TR
-3163166995,3163166995,CH
-3163166996,3163166997,UA
-3163166998,3163167003,DE
-3163167004,3163167004,IR
-3163167005,3163167007,UA
-3163167008,3163167103,DE
-3163167104,3163167107,AE
-3163167108,3163167123,BR
-3163167124,3163167375,DE
-3163167376,3163167376,IN
-3163167377,3163167377,RU
-3163167378,3163167380,DE
-3163167381,3163167381,CH
-3163167382,3163167382,DE
-3163167383,3163167383,IN
-3163167384,3163167384,TR
-3163167385,3163167385,RU
-3163167386,3163167391,DE
-3163167392,3163167392,NL
-3163167393,3163167393,DE
-3163167394,3163167394,CA
-3163167395,3163167396,DE
-3163167397,3163167397,NL
-3163167398,3163167399,CA
-3163167400,3163167401,US
-3163167402,3163167403,BD
-3163167404,3163167404,GR
-3163167405,3163167405,NL
-3163167406,3163167406,CH
-3163167407,3163167426,DE
-3163167427,3163167427,BD
-3163167428,3163167431,DE
-3163167432,3163167432,GR
-3163167433,3163167433,IN
-3163167434,3163167434,DE
-3163167435,3163167435,TR
-3163167436,3163167438,DE
-3163167439,3163167440,IN
-3163167441,3163167441,DE
-3163167442,3163167442,BD
-3163167443,3163167443,RU
-3163167444,3163167445,DE
-3163167446,3163167446,TR
-3163167447,3163167453,DE
-3163167454,3163167454,TR
-3163167455,3163167456,DE
-3163167457,3163167457,IN
-3163167458,3163167458,NL
-3163167459,3163167463,DE
-3163167464,3163167465,NL
-3163167466,3163167467,HR
-3163167468,3163167469,IN
-3163167470,3163167743,DE
-3163167744,3163167775,RU
-3163167776,3163167807,DE
-3163167808,3163167839,US
-3163167840,3163167903,DE
-3163167904,3163167935,UA
-3163167936,3163167967,DE
-3163167968,3163167999,TR
-3163168000,3163168031,BR
-3163168032,3163168095,RU
-3163168096,3163168127,TR
-3163168128,3163168159,DE
-3163168160,3163168191,BR
-3163168192,3163168223,AT
-3163168224,3163168255,DE
-3163168256,3163168287,US
-3163168288,3163168319,BR
-3163168320,3163168351,DK
-3163168352,3163168383,RU
-3163168384,3163168415,DE
-3163168416,3163168447,BR
-3163168448,3163168479,DE
-3163168480,3163168543,US
-3163168544,3163168575,DE
-3163168576,3163168607,US
-3163168608,3163168671,DE
-3163168672,3163168703,US
-3163168704,3163168735,GR
-3163168736,3163169823,DE
-3163169824,3163169855,RU
-3163169856,3163169887,US
-3163169888,3163169951,DE
-3163169952,3163169983,HR
-3163169984,3163170015,DE
-3163170016,3163170047,ES
-3163170048,3163170079,RU
-3163170080,3163170111,DE
-3163170112,3163170143,CZ
-3163170144,3163170207,DE
-3163170208,3163170239,RU
-3163170240,3163170271,DE
-3163170272,3163170303,US
-3163170304,3163170335,IT
-3163170336,3163170367,RO
-3163170368,3163170399,US
-3163170400,3163170431,BR
-3163170432,3163170463,DE
-3163170464,3163170495,US
-3163170496,3163170527,DE
+3163160576,3163164927,DE
+3163164928,3163165183,FR
+3163165184,3163166975,DE
+3163166976,3163167231,FR
+3163167232,3163170527,DE
3163170528,3163170559,AE
-3163170560,3163170623,DE
-3163170624,3163170655,GR
-3163170656,3163170687,BR
-3163170688,3163170751,DE
-3163170752,3163170783,CH
-3163170784,3163170815,US
-3163170816,3163171839,DE
-3163171840,3163171871,NL
-3163171872,3163171903,RO
-3163171904,3163171935,BR
-3163171936,3163171967,DE
-3163171968,3163171999,US
-3163172000,3163172031,DE
-3163172032,3163172063,LT
-3163172064,3163172127,BR
-3163172128,3163172159,US
-3163172160,3163172255,DE
-3163172256,3163172287,US
-3163172288,3163172351,DE
-3163172352,3163172383,FR
-3163172384,3163172415,GB
-3163172416,3163172447,DE
-3163172448,3163172479,US
-3163172480,3163172511,DE
-3163172512,3163172543,RU
-3163172544,3163172607,DE
-3163172608,3163172639,DK
-3163172640,3163172671,DE
-3163172672,3163172703,BR
-3163172704,3163172767,DE
-3163172768,3163172799,US
-3163172800,3163172831,RU
-3163172832,3163172863,BR
-3163172864,3163173951,DE
-3163173952,3163173983,IN
-3163173984,3163174015,GB
-3163174016,3163174047,RU
-3163174048,3163174079,DK
-3163174080,3163174111,BR
-3163174112,3163174143,FR
-3163174144,3163174175,BD
-3163174176,3163174207,DE
-3163174208,3163174239,RU
-3163174240,3163174303,DE
-3163174304,3163174335,US
-3163174336,3163174367,RU
-3163174368,3163174431,DE
-3163174432,3163174463,BR
-3163174464,3163174495,DE
-3163174496,3163174527,US
-3163174528,3163174559,DE
-3163174560,3163174591,PL
-3163174592,3163174623,SE
-3163174624,3163174655,GB
-3163174656,3163174687,RU
-3163174688,3163174751,DE
-3163174752,3163174783,BR
-3163174784,3163174815,DE
-3163174816,3163174847,CA
-3163174848,3163174879,TR
-3163174880,3163174911,RU
-3163174912,3163175967,DE
-3163175968,3163176031,US
-3163176032,3163176063,DE
-3163176064,3163176095,RU
-3163176096,3163176127,CY
-3163176128,3163176159,US
-3163176160,3163176191,DE
-3163176192,3163176223,US
-3163176224,3163176287,DE
-3163176288,3163176319,RU
-3163176320,3163176351,DE
-3163176352,3163176383,BR
-3163176384,3163176415,IN
-3163176416,3163176479,DE
-3163176480,3163176511,FR
-3163176512,3163176543,RU
-3163176544,3163176575,UG
-3163176576,3163176607,GR
-3163176608,3163176671,DE
-3163176672,3163176735,BR
-3163176736,3163176767,DE
-3163176768,3163176799,PL
-3163176800,3163176831,EG
-3163176832,3163176895,BR
-3163176896,3163176927,SE
-3163176928,3163176959,NL
-3163176960,3163177279,DE
-3163177280,3163177280,SE
-3163177281,3163177281,BO
-3163177282,3163177283,DE
-3163177284,3163177286,BR
-3163177287,3163177289,UA
-3163177290,3163177290,DE
-3163177291,3163177293,EE
-3163177294,3163177296,DE
-3163177297,3163177298,TR
-3163177299,3163177299,SI
-3163177300,3163177301,DE
-3163177302,3163177304,BR
-3163177305,3163177307,DE
-3163177308,3163177309,MA
-3163177310,3163177311,BR
-3163177312,3163177805,DE
-3163177806,3163177806,IN
-3163177807,3163177808,KW
-3163177809,3163177809,DE
-3163177810,3163177810,IN
-3163177811,3163177812,DE
-3163177813,3163177813,IN
-3163177814,3163177817,DE
-3163177818,3163177818,IN
-3163177819,3163180671,DE
-3163180672,3163180673,DZ
-3163180674,3163180677,DE
-3163180678,3163180678,PT
-3163180679,3163180679,BD
-3163180680,3163180691,TR
-3163180692,3163180693,DE
-3163180694,3163180694,ES
-3163180695,3163180695,DE
-3163180696,3163180696,CA
-3163180697,3163180698,DE
-3163180699,3163180699,US
-3163180700,3163180700,ES
-3163180701,3163180702,TR
-3163180703,3163180707,DE
-3163180708,3163180708,VE
-3163180709,3163180709,TR
-3163180710,3163180712,DE
-3163180713,3163180713,BR
-3163180714,3163180714,GR
-3163180715,3163180716,DE
-3163180717,3163180717,AE
-3163180718,3163180718,DE
-3163180719,3163180719,ES
-3163180720,3163180720,DE
-3163180721,3163180721,NO
-3163180722,3163180724,TR
-3163180725,3163180725,RO
-3163180726,3163180727,BR
-3163180728,3163180728,TR
-3163180729,3163180729,GB
-3163180730,3163180732,DE
-3163180733,3163180734,TR
-3163180735,3163180735,SG
-3163180736,3163180767,DE
-3163180768,3163180768,TR
-3163180769,3163180769,DE
-3163180770,3163180770,UA
-3163180771,3163180772,DE
-3163180773,3163180773,LT
-3163180774,3163180775,RU
-3163180776,3163180776,MD
-3163180777,3163180777,IL
-3163180778,3163180779,DE
-3163180780,3163180780,SG
-3163180781,3163180781,BD
-3163180782,3163180782,SG
-3163180783,3163180783,MD
-3163180784,3163180786,US
-3163180787,3163180787,DE
-3163180788,3163180788,EG
-3163180789,3163180789,DE
-3163180790,3163180790,BR
-3163180791,3163180791,MX
-3163180792,3163180792,MD
-3163180793,3163180793,GR
-3163180794,3163180927,DE
-3163180928,3163180928,PE
-3163180929,3163180930,DE
-3163180931,3163180931,EE
-3163180932,3163180932,ES
-3163180933,3163180933,CL
-3163180934,3163180934,GR
-3163180935,3163180935,CL
-3163180936,3163180936,ES
-3163180937,3163180937,AE
-3163180938,3163180939,CZ
-3163180940,3163180941,DE
-3163180942,3163180942,CN
-3163180943,3163180947,DE
-3163180948,3163180948,CN
-3163180949,3163180954,DE
-3163180955,3163180955,UA
-3163180956,3163180962,DE
-3163180963,3163180963,IT
-3163180964,3163180964,DZ
-3163180965,3163180969,DE
-3163180970,3163180971,TR
-3163180972,3163180972,PE
-3163180973,3163180973,DE
-3163180974,3163180974,GR
-3163180975,3163180975,DE
-3163180976,3163180976,HU
-3163180977,3163180986,DE
-3163180987,3163180987,IN
-3163180988,3163180988,TR
-3163180989,3163180992,DE
-3163180993,3163180993,US
-3163180994,3163180994,DE
-3163180995,3163180997,TW
-3163180998,3163181001,DE
-3163181002,3163181002,LK
-3163181003,3163181006,DE
-3163181007,3163181007,US
-3163181008,3163181010,DE
-3163181011,3163181011,HR
-3163181012,3163181018,DE
-3163181019,3163181019,EG
-3163181020,3163181022,DE
-3163181023,3163181023,BR
-3163181024,3163181027,DE
-3163181028,3163181028,TR
-3163181029,3163181037,DE
-3163181038,3163181038,EG
-3163181039,3163181040,DE
-3163181041,3163181041,GB
-3163181042,3163181046,DE
-3163181047,3163181047,TR
-3163181048,3163181048,SE
-3163181049,3163181049,DE
-3163181050,3163181050,AU
-3163181051,3163181052,DE
-3163181053,3163181055,RU
-3163181056,3163181702,DE
-3163181703,3163181703,MD
-3163181704,3163181704,US
-3163181705,3163181706,DE
-3163181707,3163181707,US
-3163181708,3163181708,AR
-3163181709,3163181728,DE
-3163181729,3163181729,BR
-3163181730,3163181730,DE
-3163181731,3163181731,UA
-3163181732,3163181732,DE
-3163181733,3163181734,MD
-3163181735,3163181735,DE
-3163181736,3163181736,BD
-3163181737,3163181738,DE
-3163181739,3163181739,CA
-3163181740,3163181740,RU
-3163181741,3163181744,DE
-3163181745,3163181745,BR
-3163181746,3163181749,DE
-3163181750,3163181750,MD
-3163181751,3163181751,DE
-3163181752,3163181753,MD
-3163181754,3163181757,DE
-3163181758,3163181758,PT
-3163181759,3163181767,DE
-3163181768,3163181768,AU
-3163181769,3163181777,DE
-3163181778,3163181778,AU
-3163181779,3163181786,DE
-3163181787,3163181787,BD
-3163181788,3163181790,DE
-3163181791,3163181791,PT
-3163181792,3163181831,DE
-3163181832,3163181833,SI
-3163181834,3163181834,MY
-3163181835,3163181839,DE
-3163181840,3163181840,AE
-3163181841,3163181841,GB
-3163181842,3163181842,NL
-3163181843,3163181843,CH
-3163181844,3163181853,DE
-3163181854,3163181855,TR
-3163181856,3163181856,SI
-3163181857,3163181857,DE
-3163181858,3163181858,IN
-3163181859,3163181861,DE
-3163181862,3163181862,GB
-3163181863,3163181863,DE
-3163181864,3163181864,GR
-3163181865,3163181865,IN
-3163181866,3163181867,DE
-3163181868,3163181869,IN
-3163181870,3163181870,RU
-3163181871,3163181871,IN
-3163181872,3163181872,GR
-3163181873,3163181873,RU
-3163181874,3163181874,DE
-3163181875,3163181875,TR
-3163181876,3163181878,DE
-3163181879,3163181879,US
-3163181880,3163181882,CH
-3163181883,3163181883,IN
-3163181884,3163181885,DE
-3163181886,3163181888,CY
-3163181889,3163181892,DE
-3163181893,3163181893,GB
-3163181894,3163181894,BD
-3163181895,3163181895,DE
-3163181896,3163181896,IN
-3163181897,3163181899,DE
-3163181900,3163181900,HR
-3163181901,3163181901,GR
-3163181902,3163181903,DE
-3163181904,3163181904,HR
-3163181905,3163181905,US
-3163181906,3163181908,BR
-3163181909,3163181910,DE
-3163181911,3163181912,CY
-3163181913,3163181913,DE
-3163181914,3163181914,BR
-3163181915,3163181916,DE
-3163181917,3163181917,CY
-3163181918,3163181918,DE
-3163181919,3163181919,BD
-3163181920,3163181929,DE
-3163181930,3163181930,IN
-3163181931,3163181934,DE
-3163181935,3163181935,UA
-3163181936,3163181938,DE
-3163181939,3163181939,GR
-3163181940,3163181940,DE
-3163181941,3163181941,RU
-3163181942,3163181942,CN
-3163181943,3163181943,US
-3163181944,3163182414,DE
-3163182415,3163182415,MA
-3163182416,3163182419,DE
-3163182420,3163182420,MA
-3163182421,3163182525,DE
-3163182526,3163182526,BG
-3163182527,3163182559,DE
-3163182560,3163182560,BG
-3163182561,3163182561,DE
-3163182562,3163182562,BG
-3163182563,3163182563,DE
-3163182564,3163182564,BG
-3163182565,3163182565,DE
-3163182566,3163182566,BG
-3163182567,3163182567,DE
-3163182568,3163182571,BG
-3163182572,3163182574,DE
-3163182575,3163182575,BG
-3163182576,3163182590,RU
-3163182591,3163184457,DE
-3163184458,3163184458,PL
-3163184459,3163184460,DE
-3163184461,3163184461,US
-3163184462,3163184462,DE
-3163184463,3163184463,BD
-3163184464,3163184469,DE
-3163184470,3163184470,BD
-3163184471,3163184471,DE
-3163184472,3163184472,BE
-3163184473,3163184476,DE
-3163184477,3163184477,ME
-3163184478,3163184478,DK
-3163184479,3163184487,DE
-3163184488,3163184488,MX
-3163184489,3163184489,DE
-3163184490,3163184490,US
-3163184491,3163184496,DE
-3163184497,3163184498,CZ
-3163184499,3163184499,DE
-3163184500,3163184500,BD
-3163184501,3163184502,DE
-3163184503,3163184503,RU
-3163184504,3163184505,DE
-3163184506,3163184506,PL
-3163184507,3163184509,GR
-3163184510,3163184551,DE
-3163184552,3163184553,RU
-3163184554,3163184555,DE
-3163184556,3163184556,RU
-3163184557,3163184557,DE
-3163184558,3163184558,RU
-3163184559,3163184569,DE
-3163184570,3163184574,RU
-3163184575,3163185099,DE
-3163185100,3163185100,RU
-3163185101,3163185112,DE
-3163185113,3163185113,RU
-3163185114,3163185116,DE
-3163185117,3163185117,RU
-3163185118,3163185122,DE
-3163185123,3163185123,RU
-3163185124,3163185136,DE
-3163185137,3163185137,RU
-3163185138,3163185144,DE
-3163185145,3163185150,RU
-3163185151,3163185166,DE
-3163185167,3163185168,TN
-3163185169,3163185170,DE
-3163185171,3163185171,TN
-3163185172,3163185182,DE
-3163185183,3163185183,US
-3163185184,3163185186,DE
-3163185187,3163185187,MD
-3163185188,3163185189,DE
-3163185190,3163185190,LT
-3163185191,3163185191,DE
-3163185192,3163185193,LT
-3163185194,3163185195,GR
-3163185196,3163185196,CZ
-3163185197,3163185225,DE
-3163185226,3163185226,MA
-3163185227,3163185266,DE
-3163185267,3163185268,IN
-3163185269,3163185307,DE
-3163185308,3163185308,UA
-3163185309,3163186002,DE
-3163186003,3163186003,CA
-3163186004,3163186033,DE
-3163186034,3163186034,LT
-3163186035,3163186064,DE
-3163186065,3163186065,RU
-3163186066,3163186098,DE
-3163186099,3163186099,LT
-3163186100,3163186102,DE
-3163186103,3163186103,LT
-3163186104,3163186534,DE
+3163170560,3163186534,DE
3163186535,3163186535,FR
3163186536,3163186673,DE
3163186674,3163186674,FR
-3163186675,3163187346,DE
-3163187347,3163187347,AT
-3163187348,3163188355,DE
-3163188356,3163188356,BD
-3163188357,3163188357,DE
-3163188358,3163188358,GR
-3163188359,3163188359,DE
-3163188360,3163188360,VG
-3163188361,3163188363,DE
-3163188364,3163188364,RU
-3163188365,3163188369,DE
-3163188370,3163188370,NL
-3163188371,3163188371,US
-3163188372,3163188372,DE
-3163188373,3163188374,US
-3163188375,3163188380,DE
-3163188381,3163188382,IT
-3163188383,3163188384,GB
-3163188385,3163188387,DE
-3163188388,3163188388,GB
-3163188389,3163188391,DE
-3163188392,3163188392,LT
-3163188393,3163188394,DE
-3163188395,3163188395,LT
-3163188396,3163188397,DE
-3163188398,3163188400,GB
-3163188401,3163188401,BD
-3163188402,3163188402,BZ
-3163188403,3163188405,NL
-3163188406,3163188406,DE
-3163188407,3163188407,RU
-3163188408,3163188408,TR
-3163188409,3163188410,NL
-3163188411,3163188744,DE
-3163188745,3163188745,BD
-3163188746,3163188751,DE
-3163188752,3163188752,IT
-3163188753,3163188754,DE
-3163188755,3163188755,ME
-3163188756,3163188801,DE
-3163188802,3163188802,US
-3163188803,3163188804,DE
-3163188805,3163188806,AR
-3163188807,3163188807,DE
-3163188808,3163188808,TR
-3163188809,3163188809,DE
-3163188810,3163188810,TR
-3163188811,3163188813,DE
-3163188814,3163188815,GR
-3163188816,3163188831,DE
-3163188832,3163188832,UA
-3163188833,3163188834,DE
-3163188835,3163188835,GB
-3163188836,3163188847,DE
-3163188848,3163188848,FR
-3163188849,3163188849,FI
-3163188850,3163188851,RU
-3163188852,3163188852,GR
-3163188853,3163188854,DE
-3163188855,3163188855,PL
-3163188856,3163188856,US
-3163188857,3163188857,DE
-3163188858,3163188858,CO
-3163188859,3163188859,DE
-3163188860,3163188860,AE
-3163188861,3163188861,US
-3163188862,3163188862,IR
-3163188863,3163188930,DE
-3163188931,3163188931,TR
-3163188932,3163188932,NL
-3163188933,3163188934,DE
-3163188935,3163188935,MA
-3163188936,3163188936,AE
-3163188937,3163188937,GR
-3163188938,3163188938,TR
-3163188939,3163189062,DE
-3163189063,3163189065,GB
-3163189066,3163189071,DE
-3163189072,3163189072,VN
-3163189073,3163189074,DE
-3163189075,3163189076,RU
-3163189077,3163189082,DE
-3163189083,3163189083,HR
-3163189084,3163189086,DE
-3163189087,3163189087,TR
-3163189088,3163189088,DE
-3163189089,3163189089,AE
-3163189090,3163189090,KR
-3163189091,3163189092,DE
-3163189093,3163189094,UA
-3163189095,3163189096,DE
-3163189097,3163189099,GB
-3163189100,3163189100,UA
-3163189101,3163189103,DE
-3163189104,3163189104,CZ
-3163189105,3163189106,DE
-3163189107,3163189107,UA
-3163189108,3163189108,DE
-3163189109,3163189109,IN
-3163189110,3163189110,TR
-3163189111,3163189111,GB
-3163189112,3163189112,BR
-3163189113,3163189116,DE
-3163189117,3163189117,PE
-3163189118,3163189994,DE
-3163189995,3163189999,IN
-3163190000,3163190532,DE
-3163190533,3163190533,TR
-3163190534,3163190535,US
-3163190536,3163190553,DE
-3163190554,3163190554,HU
-3163190555,3163190563,DE
-3163190564,3163190564,US
-3163190565,3163190571,DE
-3163190572,3163190572,RU
-3163190573,3163190573,US
-3163190574,3163190575,DE
-3163190576,3163190576,RU
-3163190577,3163190586,DE
-3163190587,3163190588,US
-3163190589,3163190601,DE
-3163190602,3163190602,US
-3163190603,3163190613,DE
-3163190614,3163190614,LT
-3163190615,3163190615,DE
-3163190616,3163190616,US
-3163190617,3163190619,DE
-3163190620,3163190620,LT
-3163190621,3163190621,DE
-3163190622,3163190626,LT
-3163190627,3163190632,DE
-3163190633,3163190637,LT
-3163190638,3163191246,DE
-3163191247,3163191247,BR
-3163191248,3163191248,IT
-3163191249,3163191250,DE
-3163191251,3163191252,GB
-3163191253,3163191253,BR
-3163191254,3163191256,DE
-3163191257,3163191257,TR
-3163191258,3163191258,RU
-3163191259,3163191259,DE
-3163191260,3163191262,EE
-3163191263,3163191263,DE
-3163191264,3163191264,LT
-3163191265,3163191266,BG
-3163191267,3163191267,NL
-3163191268,3163191268,US
-3163191269,3163191269,DE
-3163191270,3163191272,NL
-3163191273,3163191273,IT
-3163191274,3163191274,DE
-3163191275,3163191275,HK
-3163191276,3163191276,FI
-3163191277,3163191278,DE
-3163191279,3163191279,IN
-3163191280,3163191280,NL
-3163191281,3163191281,DE
-3163191282,3163191282,BR
-3163191283,3163191285,NL
-3163191286,3163191288,DE
-3163191289,3163191293,IN
-3163191294,3163191432,DE
-3163191433,3163191433,IT
-3163191434,3163191440,DE
-3163191441,3163191442,US
-3163191443,3163191448,DE
-3163191449,3163191449,BZ
-3163191450,3163191450,RU
-3163191451,3163191451,IT
-3163191452,3163191454,TR
-3163191455,3163191461,DE
-3163191462,3163191464,NL
-3163191465,3163191465,CN
-3163191466,3163191471,DE
-3163191472,3163191472,NL
-3163191473,3163191473,UA
-3163191474,3163191476,DE
-3163191477,3163191477,HK
-3163191478,3163191478,PK
-3163191479,3163192193,DE
-3163192194,3163192194,BR
-3163192195,3163192196,DE
-3163192197,3163192197,UA
-3163192198,3163192200,DE
-3163192201,3163192202,TR
-3163192203,3163192207,DE
-3163192208,3163192208,TR
-3163192209,3163192210,MX
-3163192211,3163192211,DE
-3163192212,3163192213,UA
-3163192214,3163192214,TR
-3163192215,3163192216,DE
-3163192217,3163192218,GR
-3163192219,3163192219,TR
-3163192220,3163192222,US
-3163192223,3163192224,DE
-3163192225,3163192225,TH
-3163192226,3163192227,DE
-3163192228,3163192228,US
-3163192229,3163192229,DE
-3163192230,3163192230,TR
-3163192231,3163192231,BR
-3163192232,3163192232,DE
-3163192233,3163192233,US
-3163192234,3163192234,BR
-3163192235,3163192235,DE
-3163192236,3163192236,BR
-3163192237,3163192237,VE
-3163192238,3163192241,DE
-3163192242,3163192242,RU
-3163192243,3163192249,DE
-3163192250,3163192250,RU
-3163192251,3163192251,DE
-3163192252,3163192255,TR
-3163192256,3163192840,DE
-3163192841,3163192842,CZ
-3163192843,3163192846,DE
-3163192847,3163192847,CZ
-3163192848,3163192848,KW
-3163192849,3163192850,DE
-3163192851,3163192851,NL
-3163192852,3163192861,DE
-3163192862,3163192863,US
-3163192864,3163192864,DE
-3163192865,3163192865,US
-3163192866,3163192866,DE
-3163192867,3163192868,RO
-3163192869,3163192869,CH
-3163192870,3163192870,RO
-3163192871,3163192872,US
-3163192873,3163192874,DE
-3163192875,3163192876,BD
-3163192877,3163192877,RU
-3163192878,3163192878,KW
-3163192879,3163193216,DE
-3163193217,3163193217,GB
-3163193218,3163193218,DE
-3163193219,3163193219,GB
-3163193220,3163193223,DE
-3163193224,3163193224,BR
-3163193225,3163193227,DE
-3163193228,3163193228,UA
-3163193229,3163193236,DE
-3163193237,3163193237,RU
-3163193238,3163193241,DE
-3163193242,3163193243,TR
-3163193244,3163193246,DE
-3163193247,3163193247,KR
-3163193248,3163193250,DE
-3163193251,3163193251,GB
-3163193252,3163193259,DE
-3163193260,3163193260,TR
-3163193261,3163193261,UA
-3163193262,3163193262,HU
-3163193263,3163193263,DE
-3163193264,3163193264,UA
-3163193265,3163193270,DE
-3163193271,3163193272,AT
-3163193273,3163193278,DE
-3163193279,3163193279,GR
-3163193280,3163193281,DE
-3163193282,3163193283,UA
-3163193284,3163193286,DE
-3163193287,3163193287,LK
-3163193288,3163193319,DE
-3163193320,3163193320,HR
-3163193321,3163193342,DE
-3163193343,3163193343,SA
+3163186675,3163192621,DE
+3163192622,3163192622,EG
+3163192623,3163193343,DE
3163193344,3163226111,MD
3163226112,3163258879,SA
3163258880,3163291647,SY
@@ -103626,7 +51505,9 @@
3164667904,3164733439,PS
3164733440,3164798975,RU
3164798976,3164864511,UA
-3164864512,3164897279,GB
+3164864512,3164864703,GB
+3164864704,3164864735,ZA
+3164864736,3164897279,GB
3164897280,3164899327,IT
3164899328,3164901375,RU
3164901376,3164903423,PL
@@ -103646,1109 +51527,74 @@
3164936192,3164937749,LT
3164937750,3164937750,FR
3164937751,3164938239,LT
-3164938240,3164946431,FR
-3164946432,3164946435,PL
-3164946436,3164946439,PT
-3164946440,3164946447,ES
-3164946448,3164946479,FR
-3164946480,3164946483,ES
-3164946484,3164946495,PL
-3164946496,3164946499,IT
-3164946500,3164946503,GB
-3164946504,3164946507,BE
-3164946508,3164946511,CZ
-3164946512,3164946527,PL
-3164946528,3164946559,GB
-3164946560,3164946655,FR
-3164946656,3164946671,BE
-3164946672,3164946783,FR
-3164946784,3164946799,BE
-3164946800,3164946943,FR
-3164946944,3164947007,DE
-3164947008,3164947039,FR
-3164947040,3164947043,ES
-3164947044,3164947047,GB
-3164947048,3164947063,FR
-3164947064,3164947067,NL
-3164947068,3164947071,IT
-3164947072,3164947519,FR
-3164947520,3164947551,ES
-3164947552,3164947583,DE
-3164947584,3164947587,FR
-3164947588,3164947591,DE
-3164947592,3164947599,GB
-3164947600,3164947619,FR
-3164947620,3164947623,ES
-3164947624,3164947627,GB
-3164947628,3164947635,ES
-3164947636,3164947639,DE
-3164947640,3164947643,IT
-3164947644,3164947647,FR
-3164947648,3164947651,CZ
-3164947652,3164947655,PL
-3164947656,3164947743,FR
-3164947744,3164947747,ES
-3164947748,3164947751,BE
-3164947752,3164947759,PL
-3164947760,3164947839,FR
-3164947840,3164947967,GB
-3164947968,3164948479,BE
-3164948480,3164948735,FR
-3164948736,3164948739,DE
-3164948740,3164948743,CZ
-3164948744,3164948747,GB
-3164948748,3164948751,FR
-3164948752,3164948767,GB
-3164948768,3164948787,FR
-3164948788,3164948791,ES
-3164948792,3164948795,DE
-3164948796,3164948799,PL
-3164948800,3164948843,FR
-3164948844,3164948847,PL
-3164948848,3164948851,PT
-3164948852,3164948855,DE
-3164948856,3164948863,FR
-3164948864,3164948927,GB
-3164948928,3164948991,FR
-3164948992,3164949087,GB
-3164949088,3164949095,FR
-3164949096,3164949103,IT
-3164949104,3164949107,DE
-3164949108,3164949111,PL
-3164949112,3164949119,FR
-3164949120,3164949123,PT
-3164949124,3164949127,FR
-3164949128,3164949131,IT
-3164949132,3164949151,FR
-3164949152,3164949155,NL
-3164949156,3164949159,FR
-3164949160,3164949163,PL
-3164949164,3164949167,FR
-3164949168,3164949171,IT
-3164949172,3164949175,PL
-3164949176,3164949179,ES
-3164949180,3164949183,FR
-3164949184,3164949191,PT
-3164949192,3164949199,DE
-3164949200,3164949215,FR
-3164949216,3164949223,PL
-3164949224,3164949231,FR
-3164949232,3164949247,BE
-3164949248,3164949271,FR
-3164949272,3164949275,GB
-3164949276,3164949279,CH
-3164949280,3164949295,BE
-3164949296,3164949331,FR
-3164949332,3164949335,PL
-3164949336,3164949339,FR
-3164949340,3164949343,GB
-3164949344,3164949363,FR
-3164949364,3164949367,DE
-3164949368,3164949371,NL
-3164949372,3164949375,GB
-3164949376,3164949391,FR
-3164949392,3164949395,PL
-3164949396,3164949439,FR
-3164949440,3164949447,PL
-3164949448,3164949455,FR
-3164949456,3164949471,PL
-3164949472,3164949479,FR
-3164949480,3164949487,PL
-3164949488,3164949503,FR
-3164949504,3164950015,BE
-3164950016,3164950023,FR
-3164950024,3164950031,PT
-3164950032,3164950063,FR
-3164950064,3164950079,IE
-3164950080,3164950143,FR
-3164950144,3164950271,GB
-3164950272,3164950399,FR
-3164950400,3164950407,ES
-3164950408,3164950411,FR
-3164950412,3164950423,PL
-3164950424,3164950431,FR
-3164950432,3164950435,PL
-3164950436,3164950439,ES
-3164950440,3164950447,FR
-3164950448,3164950451,ES
-3164950452,3164950455,CZ
-3164950456,3164950463,FR
-3164950464,3164950479,ES
-3164950480,3164950487,IT
-3164950488,3164950495,FR
-3164950496,3164950511,ES
-3164950512,3164950515,GB
-3164950516,3164950519,ES
-3164950520,3164950523,FR
-3164950524,3164950527,ES
-3164950528,3164950543,BE
-3164950544,3164950559,IE
-3164950560,3164950591,NL
-3164950592,3164950687,FR
-3164950688,3164950707,PL
-3164950708,3164950711,FR
-3164950712,3164950715,FI
-3164950716,3164950723,GB
-3164950724,3164950735,FR
-3164950736,3164950751,ES
-3164950752,3164950759,GB
-3164950760,3164950783,ES
-3164950784,3164951039,FR
-3164951040,3164951231,DE
-3164951232,3164951239,GB
-3164951240,3164951263,FR
-3164951264,3164951295,DE
-3164951296,3164951423,GB
-3164951424,3164951455,ES
-3164951456,3164951471,PL
-3164951472,3164951519,FR
-3164951520,3164951523,ES
-3164951524,3164951527,IT
-3164951528,3164951535,FR
-3164951536,3164951543,BE
-3164951544,3164951547,NL
-3164951548,3164951551,BE
-3164951552,3164951555,IT
-3164951556,3164951559,FR
-3164951560,3164951567,PL
-3164951568,3164951571,BE
-3164951572,3164951575,CZ
-3164951576,3164951583,FR
-3164951584,3164951595,DE
-3164951596,3164951647,FR
-3164951648,3164951663,GB
+3164938240,3164949135,FR
+3164949136,3164949151,NL
+3164949152,3164951663,FR
3164951664,3164951671,PL
-3164951672,3164951675,FR
-3164951676,3164951683,ES
-3164951684,3164951687,GB
-3164951688,3164951691,FR
-3164951692,3164951695,CH
-3164951696,3164951743,FR
-3164951744,3164951775,PL
-3164951776,3164951807,NL
-3164951808,3164952191,FR
-3164952192,3164952207,ES
-3164952208,3164952215,FR
-3164952216,3164952219,NL
-3164952220,3164952223,FR
-3164952224,3164952239,GB
-3164952240,3164952243,DE
-3164952244,3164952247,BE
-3164952248,3164952255,PT
-3164952256,3164952263,BE
-3164952264,3164952271,FR
-3164952272,3164952287,DE
-3164952288,3164952303,FR
-3164952304,3164952319,LT
-3164952320,3164952351,DE
-3164952352,3164952367,NL
-3164952368,3164952399,FR
-3164952400,3164952415,NL
-3164952416,3164952423,DE
-3164952424,3164952431,GB
-3164952432,3164952447,ES
-3164952448,3164952479,FR
-3164952480,3164952511,ES
-3164952512,3164952527,IT
-3164952528,3164952959,FR
-3164952960,3164952975,GB
-3164952976,3164953007,FR
-3164953008,3164953023,ES
-3164953024,3164953087,FR
-3164953088,3164953151,LT
-3164953152,3164953215,PL
-3164953216,3164953247,FR
-3164953248,3164953255,BE
+3164951672,3164952224,FR
+3164952225,3164952231,GB
+3164952232,3164952233,FR
+3164952234,3164952235,GB
+3164952236,3164952236,FR
+3164952237,3164952237,GB
+3164952238,3164953255,FR
3164953256,3164953263,CZ
-3164953264,3164953279,BE
-3164953280,3164953327,FR
-3164953328,3164953375,PL
-3164953376,3164953379,NL
-3164953380,3164953383,PT
-3164953384,3164953391,PL
-3164953392,3164953395,IT
-3164953396,3164953399,NL
-3164953400,3164953403,BE
-3164953404,3164953407,PL
-3164953408,3164953423,BE
-3164953424,3164953439,FR
-3164953440,3164953443,PL
-3164953444,3164953447,DE
-3164953448,3164953455,ES
-3164953456,3164953459,FR
-3164953460,3164953463,GB
-3164953464,3164953467,FR
-3164953468,3164953471,GB
-3164953472,3164953515,FR
-3164953516,3164953519,IE
-3164953520,3164953535,FR
-3164953536,3164953551,PL
-3164953552,3164953571,FR
-3164953572,3164953575,GB
-3164953576,3164953583,IT
-3164953584,3164954111,ES
-3164954112,3164954143,FR
-3164954144,3164954207,NL
-3164954208,3164954215,PL
-3164954216,3164954219,IT
-3164954220,3164954223,DE
-3164954224,3164954231,FR
-3164954232,3164954239,NL
-3164954240,3164954251,PL
-3164954252,3164954255,FR
-3164954256,3164954271,NL
-3164954272,3164954275,IT
-3164954276,3164954279,GB
-3164954280,3164954287,FR
-3164954288,3164954303,NL
-3164954304,3164954367,DE
-3164954368,3164954371,FR
-3164954372,3164954375,DE
-3164954376,3164954383,FI
-3164954384,3164954399,FR
-3164954400,3164954407,PL
-3164954408,3164954431,FR
-3164954432,3164954439,ES
-3164954440,3164954443,NL
-3164954444,3164954447,PL
-3164954448,3164954479,FR
-3164954480,3164954495,GB
-3164954496,3164954499,PL
-3164954500,3164954507,FR
-3164954508,3164954511,ES
-3164954512,3164954515,FR
-3164954516,3164954519,IT
-3164954520,3164954527,CH
-3164954528,3164954543,GB
-3164954544,3164954559,LT
-3164954560,3164954567,PT
-3164954568,3164954571,PL
-3164954572,3164954575,CH
-3164954576,3164954583,FR
-3164954584,3164954591,DE
-3164954592,3164954623,IE
-3164954624,3164956383,FR
-3164956384,3164956399,DE
-3164956400,3164956479,FR
-3164956480,3164956543,GB
-3164956544,3164958847,FR
-3164958848,3164958879,IE
-3164958880,3164958911,FR
-3164958912,3164958927,CH
-3164958928,3164958943,FR
-3164958944,3164958947,PL
-3164958948,3164958955,FR
-3164958956,3164958959,GB
-3164958960,3164958975,CZ
-3164958976,3164959007,FR
-3164959008,3164959023,PL
-3164959024,3164959039,FR
-3164959040,3164959135,DE
-3164959136,3164959231,ES
-3164959232,3164959247,FR
-3164959248,3164959255,ES
-3164959256,3164959263,PL
-3164959264,3164959295,NL
-3164959296,3164959303,IT
-3164959304,3164959307,FR
-3164959308,3164959311,IT
-3164959312,3164959327,ES
-3164959328,3164959343,BE
-3164959344,3164959371,FR
-3164959372,3164959375,IE
-3164959376,3164959383,ES
-3164959384,3164959387,PL
-3164959388,3164959391,GB
-3164959392,3164959455,FR
-3164959456,3164959463,DE
-3164959464,3164959467,PL
-3164959468,3164959471,GB
-3164959472,3164959487,NL
-3164959488,3164959551,DE
-3164959552,3164959631,FR
-3164959632,3164959647,IT
-3164959648,3164959663,FR
-3164959664,3164959671,BE
-3164959672,3164959763,FR
-3164959764,3164959767,PL
-3164959768,3164959775,FR
-3164959776,3164959807,PL
-3164959808,3164959823,IE
-3164959824,3164959839,FI
-3164959840,3164959855,BE
-3164959856,3164959887,FR
-3164959888,3164959891,CH
-3164959892,3164959895,LT
-3164959896,3164959899,ES
-3164959900,3164959903,PL
-3164959904,3164959927,FR
-3164959928,3164959931,GB
-3164959932,3164959935,IE
-3164959936,3164959999,FR
-3164960000,3164960255,DE
-3164960256,3164960263,FR
-3164960264,3164960267,LT
-3164960268,3164960271,NL
-3164960272,3164960295,FR
-3164960296,3164960299,IT
-3164960300,3164960303,GB
-3164960304,3164960319,FR
-3164960320,3164960323,ES
-3164960324,3164960327,IT
-3164960328,3164960331,CZ
-3164960332,3164960339,LT
-3164960340,3164960363,FR
-3164960364,3164960367,PL
-3164960368,3164960383,FR
-3164960384,3164960387,DE
-3164960388,3164960391,PL
-3164960392,3164960395,GB
-3164960396,3164960399,DE
-3164960400,3164960415,PL
-3164960416,3164960435,FR
-3164960436,3164960439,PL
-3164960440,3164960443,CH
-3164960444,3164960447,BE
-3164960448,3164960463,PL
-3164960464,3164960467,NL
-3164960468,3164960471,GB
-3164960472,3164960479,FR
-3164960480,3164960495,GB
-3164960496,3164960507,FR
-3164960508,3164960511,CH
-3164960512,3164960575,PL
-3164960576,3164960591,DE
-3164960592,3164960599,FR
-3164960600,3164960607,DE
-3164960608,3164960623,GB
-3164960624,3164960627,FR
-3164960628,3164960639,PL
-3164960640,3164960643,LT
-3164960644,3164960647,FR
-3164960648,3164960651,CH
-3164960652,3164960655,IT
-3164960656,3164960671,FR
-3164960672,3164960675,ES
-3164960676,3164960679,GB
-3164960680,3164960687,FR
-3164960688,3164960695,PL
-3164960696,3164960703,ES
-3164960704,3164960707,PL
-3164960708,3164960719,FR
-3164960720,3164960723,CH
-3164960724,3164960727,FR
-3164960728,3164960735,PL
-3164960736,3164960751,FR
-3164960752,3164960767,ES
-3164960768,3164960799,GB
-3164960800,3164960831,ES
-3164960832,3164960839,IE
-3164960840,3164960843,FR
-3164960844,3164960847,BE
-3164960848,3164960855,PL
-3164960856,3164960863,ES
-3164960864,3164960879,IE
-3164960880,3164960887,FR
-3164960888,3164960891,PL
-3164960892,3164960895,GB
-3164960896,3164960911,FR
-3164960912,3164960919,PL
-3164960920,3164960927,FR
-3164960928,3164960931,ES
-3164960932,3164960939,FR
-3164960940,3164960943,DE
-3164960944,3164960959,PL
-3164960960,3164960963,ES
-3164960964,3164960967,GB
-3164960968,3164960975,PL
-3164960976,3164960991,GB
-3164960992,3164961003,FR
-3164961004,3164961007,DE
-3164961008,3164961023,PL
-3164961024,3164961151,FR
-3164961152,3164961167,DE
-3164961168,3164961175,PL
-3164961176,3164961319,FR
-3164961320,3164961327,PL
-3164961328,3164961331,CZ
-3164961332,3164961371,FR
-3164961372,3164961375,DE
-3164961376,3164961379,NL
-3164961380,3164961387,IT
-3164961388,3164961395,FR
-3164961396,3164961399,PL
-3164961400,3164961403,FR
-3164961404,3164961407,ES
-3164961408,3164961503,FR
-3164961504,3164961519,GB
-3164961520,3164961527,IT
-3164961528,3164961535,PL
-3164961536,3164961551,ES
-3164961552,3164961559,GB
-3164961560,3164961563,DE
-3164961564,3164961583,FR
-3164961584,3164961599,DE
-3164961600,3164961631,FR
-3164961632,3164961647,IT
-3164961648,3164961655,NL
-3164961656,3164961663,ES
-3164961664,3164961695,DE
-3164961696,3164961727,GB
-3164961728,3164961739,DE
-3164961740,3164961743,GB
-3164961744,3164961763,PL
-3164961764,3164961767,IT
-3164961768,3164961775,BE
-3164961776,3164961783,PL
-3164961784,3164961791,ES
-3164961792,3164961807,PL
-3164961808,3164961815,FR
-3164961816,3164961819,CZ
-3164961820,3164961823,DE
-3164961824,3164961827,ES
-3164961828,3164961855,FR
-3164961856,3164961859,PL
-3164961860,3164961863,ES
-3164961864,3164961871,FR
-3164961872,3164961887,IE
-3164961888,3164961903,ES
-3164961904,3164961951,FR
-3164961952,3164961967,ES
-3164961968,3164961971,IE
-3164961972,3164961975,ES
-3164961976,3164961979,FR
-3164961980,3164961983,CH
-3164961984,3164961999,FR
-3164962000,3164962007,BE
-3164962008,3164962011,DE
-3164962012,3164962015,PT
-3164962016,3164962031,FR
-3164962032,3164962035,DE
-3164962036,3164962079,FR
-3164962080,3164962095,ES
-3164962096,3164962143,FR
-3164962144,3164962151,ES
-3164962152,3164962159,DE
-3164962160,3164962175,FR
-3164962176,3164962183,NL
-3164962184,3164962191,FR
-3164962192,3164962199,DE
-3164962200,3164962203,GB
-3164962204,3164962207,PT
-3164962208,3164962239,FR
-3164962240,3164962247,PL
-3164962248,3164962255,FR
-3164962256,3164962259,BE
-3164962260,3164962263,DE
-3164962264,3164962271,PT
-3164962272,3164962279,GB
-3164962280,3164962283,DE
-3164962284,3164962287,ES
-3164962288,3164962291,FR
-3164962292,3164962295,ES
-3164962296,3164962303,PL
-3164962304,3164962319,IE
-3164962320,3164962335,FR
-3164962336,3164962367,DE
-3164962368,3164962431,FR
-3164962432,3164962439,PT
-3164962440,3164962443,FR
-3164962444,3164962447,PL
-3164962448,3164962451,GB
-3164962452,3164962455,FR
-3164962456,3164962459,IE
-3164962460,3164962463,FR
-3164962464,3164962471,IE
-3164962472,3164962475,GB
-3164962476,3164962479,NL
-3164962480,3164962495,FR
-3164962496,3164962527,GB
-3164962528,3164962535,PL
-3164962536,3164962539,CH
-3164962540,3164962543,CZ
-3164962544,3164962623,FR
-3164962624,3164962627,BE
-3164962628,3164962631,LT
-3164962632,3164962639,FR
-3164962640,3164962647,ES
-3164962648,3164962655,PT
-3164962656,3164962663,NL
-3164962664,3164962671,PT
-3164962672,3164962687,FR
-3164962688,3164962703,PL
-3164962704,3164962715,FR
-3164962716,3164962719,PT
-3164962720,3164962723,FR
-3164962724,3164962727,ES
-3164962728,3164962751,FR
-3164962752,3164962783,PT
-3164962784,3164964863,ES
+3164953264,3164953583,FR
+3164953584,3164953599,ES
+3164953600,3164960439,FR
+3164960440,3164960443,DE
+3164960444,3164960715,FR
+3164960716,3164960719,NL
+3164960720,3164961391,FR
+3164961392,3164961395,ES
+3164961396,3164961511,FR
+3164961512,3164961519,GB
+3164961520,3164961551,FR
+3164961552,3164961555,ES
+3164961556,3164962471,FR
+3164962472,3164962475,ES
+3164962476,3164962815,FR
+3164962816,3164964863,ES
3164964864,3164966911,FI
-3164966912,3164967055,FR
-3164967056,3164967071,GB
-3164967072,3164967087,FR
-3164967088,3164967095,IT
-3164967096,3164967103,PL
-3164967104,3164967135,FR
-3164967136,3164967151,ES
-3164967152,3164967155,FR
-3164967156,3164967159,PL
-3164967160,3164967167,FR
-3164967168,3164967295,PT
-3164967296,3164967303,NL
-3164967304,3164967307,PT
-3164967308,3164967311,DE
-3164967312,3164967327,IT
-3164967328,3164967351,FR
-3164967352,3164967359,PL
-3164967360,3164967375,FR
-3164967376,3164967391,GB
-3164967392,3164967423,IE
-3164967424,3164967679,ES
-3164967680,3164967935,IE
-3164967936,3164967967,DE
-3164967968,3164967971,FR
-3164967972,3164967975,GB
-3164967976,3164967983,FR
-3164967984,3164967991,PL
-3164967992,3164967999,PT
-3164968000,3164968015,GB
-3164968016,3164968031,FR
-3164968032,3164968063,NL
-3164968064,3164968831,FR
-3164968832,3164968835,PL
-3164968836,3164968839,NL
-3164968840,3164968843,ES
-3164968844,3164968847,IT
-3164968848,3164968851,GB
-3164968852,3164968855,FR
-3164968856,3164968859,IE
-3164968860,3164968863,LT
-3164968864,3164968871,CH
-3164968872,3164968895,IE
-3164968896,3164968899,PT
-3164968900,3164968903,CZ
-3164968904,3164968907,PL
-3164968908,3164968911,GB
-3164968912,3164968927,DE
-3164968928,3164968951,FR
-3164968952,3164968955,CZ
-3164968956,3164968959,DE
-3164968960,3164968991,GB
-3164968992,3164969007,IE
-3164969008,3164969015,PT
-3164969016,3164969019,NL
+3164966912,3164968319,FR
+3164968320,3164968447,GB
+3164968448,3164968455,FR
+3164968456,3164968459,NL
+3164968460,3164968835,FR
+3164968836,3164968839,ES
+3164968840,3164969019,FR
3164969020,3164969023,BE
-3164969024,3164969027,GB
-3164969028,3164969031,FR
-3164969032,3164969035,GB
-3164969036,3164969039,PL
-3164969040,3164969043,CH
-3164969044,3164969047,PT
-3164969048,3164969055,GB
-3164969056,3164969079,FR
-3164969080,3164969083,PL
-3164969084,3164969095,ES
-3164969096,3164969099,PL
-3164969100,3164969103,DE
-3164969104,3164969135,FR
-3164969136,3164969143,ES
-3164969144,3164969147,FR
-3164969148,3164969151,GB
-3164969152,3164969167,FR
-3164969168,3164969175,BE
-3164969176,3164969179,DE
-3164969180,3164969183,ES
-3164969184,3164969187,FR
-3164969188,3164969191,GB
-3164969192,3164969199,FR
-3164969200,3164969203,LT
-3164969204,3164969207,ES
-3164969208,3164969211,PL
-3164969212,3164969215,DE
-3164969216,3164969503,FR
-3164969504,3164969535,DE
-3164969536,3164969543,FR
-3164969544,3164969551,NL
-3164969552,3164969655,FR
-3164969656,3164969663,LT
-3164969664,3164969695,FR
-3164969696,3164969727,ES
-3164969728,3164969743,DE
-3164969744,3164969759,FR
-3164969760,3164969767,BE
-3164969768,3164969771,FR
-3164969772,3164969775,IT
-3164969776,3164969823,FR
-3164969824,3164969855,DE
-3164969856,3164969875,FR
-3164969876,3164969879,DE
-3164969880,3164969883,ES
-3164969884,3164969887,PL
-3164969888,3164969895,NL
-3164969896,3164969899,PT
-3164969900,3164969983,FR
-3164969984,3164970047,CH
-3164970048,3164970063,FR
-3164970064,3164970079,PL
-3164970080,3164970095,FR
-3164970096,3164970111,ES
-3164970112,3164970175,FR
-3164970176,3164970207,DE
-3164970208,3164970215,FR
-3164970216,3164970219,BE
-3164970220,3164970223,FR
-3164970224,3164970239,GB
-3164970240,3164970271,IE
-3164970272,3164970287,BE
-3164970288,3164970291,ES
-3164970292,3164970295,DE
-3164970296,3164970299,ES
-3164970300,3164970303,DE
-3164970304,3164970335,ES
-3164970336,3164970339,NL
-3164970340,3164970343,BE
-3164970344,3164970347,FI
-3164970348,3164970351,GB
-3164970352,3164970359,FR
-3164970360,3164970363,DE
-3164970364,3164970367,ES
-3164970368,3164970371,FR
-3164970372,3164970375,ES
-3164970376,3164970379,FR
-3164970380,3164970383,IT
-3164970384,3164970387,PL
-3164970388,3164970391,IT
-3164970392,3164970403,FR
-3164970404,3164970407,CH
-3164970408,3164970411,FR
-3164970412,3164970415,GB
-3164970416,3164970423,FR
-3164970424,3164970427,IE
-3164970428,3164970431,PT
-3164970432,3164970463,FR
-3164970464,3164970495,GB
-3164970496,3164970527,PL
-3164970528,3164970543,NL
-3164970544,3164970551,PL
-3164970552,3164970567,FR
-3164970568,3164970571,GB
-3164970572,3164970575,LT
-3164970576,3164970603,FR
-3164970604,3164970607,DE
-3164970608,3164970615,ES
-3164970616,3164970623,FR
-3164970624,3164970627,BE
-3164970628,3164970631,DE
-3164970632,3164970647,ES
-3164970648,3164970651,GB
-3164970652,3164970655,FR
-3164970656,3164970687,NL
-3164970688,3164970691,GB
-3164970692,3164970695,FR
-3164970696,3164970719,PL
-3164970720,3164970783,FR
-3164970784,3164970791,PL
-3164970792,3164970823,FR
-3164970824,3164970827,BE
-3164970828,3164970831,CH
-3164970832,3164970835,IT
-3164970836,3164970839,BE
-3164970840,3164970847,GB
-3164970848,3164970851,IE
-3164970852,3164970867,FR
-3164970868,3164970871,NL
-3164970872,3164970875,BE
-3164970876,3164970879,NL
-3164970880,3164970883,FR
-3164970884,3164970887,ES
-3164970888,3164970891,GB
-3164970892,3164970911,FR
-3164970912,3164970915,PL
-3164970916,3164970919,FR
-3164970920,3164970923,IT
+3164969024,3164970413,FR
+3164970414,3164970415,IT
+3164970416,3164970923,FR
3164970924,3164970927,LT
-3164970928,3164970991,FR
-3164970992,3164971007,BE
-3164971008,3164971011,DE
-3164971012,3164971015,IE
-3164971016,3164971023,PL
-3164971024,3164971071,FR
-3164971072,3164971135,DE
-3164971136,3164971263,IT
-3164971264,3164971391,GB
-3164971392,3164971455,DE
-3164971456,3164971459,FR
-3164971460,3164971463,IT
-3164971464,3164971467,CH
-3164971468,3164971471,DE
-3164971472,3164971479,FR
-3164971480,3164971483,FI
-3164971484,3164971487,PL
-3164971488,3164971503,ES
-3164971504,3164971511,PL
-3164971512,3164971519,CZ
-3164971520,3164971567,FR
-3164971568,3164971571,CZ
-3164971572,3164971575,FR
-3164971576,3164971579,PL
-3164971580,3164971583,ES
-3164971584,3164971615,FR
-3164971616,3164971619,ES
-3164971620,3164971623,CH
-3164971624,3164971719,FR
-3164971720,3164971727,CH
-3164971728,3164971735,FR
-3164971736,3164971739,PL
-3164971740,3164971743,IT
-3164971744,3164971775,ES
-3164971776,3164971799,FR
-3164971800,3164971803,NL
-3164971804,3164971807,FR
-3164971808,3164971903,BE
-3164971904,3164971967,DE
-3164971968,3164971983,PT
-3164971984,3164971991,ES
-3164971992,3164971999,FR
-3164972000,3164972015,CH
-3164972016,3164972019,GB
-3164972020,3164972023,FR
-3164972024,3164972027,IT
-3164972028,3164972031,CH
-3164972032,3164972287,GB
-3164972288,3164972319,FR
-3164972320,3164972351,DE
-3164972352,3164972367,PL
-3164972368,3164972375,NL
-3164972376,3164972379,IE
-3164972380,3164972383,CZ
-3164972384,3164972399,PL
-3164972400,3164972403,GB
-3164972404,3164972407,LT
-3164972408,3164972447,FR
-3164972448,3164972463,PL
-3164972464,3164972495,FR
-3164972496,3164972511,DE
-3164972512,3164972527,PL
-3164972528,3164972531,DE
-3164972532,3164972535,FR
-3164972536,3164972539,NL
-3164972540,3164972559,FR
-3164972560,3164972575,IT
-3164972576,3164972579,CZ
-3164972580,3164972583,GB
-3164972584,3164972587,NL
-3164972588,3164972591,FR
-3164972592,3164972599,BE
-3164972600,3164972607,FR
-3164972608,3164972639,PL
-3164972640,3164972655,IT
-3164972656,3164972671,FR
-3164972672,3164972679,PL
-3164972680,3164972691,FR
-3164972692,3164972695,FI
-3164972696,3164972699,FR
-3164972700,3164972703,DE
-3164972704,3164972735,FR
-3164972736,3164972751,GB
-3164972752,3164972767,DE
-3164972768,3164972783,IT
-3164972784,3164972799,PL
-3164972800,3164973183,FR
-3164973184,3164973311,CZ
-3164973312,3164973375,DE
-3164973376,3164973391,FR
-3164973392,3164973399,DE
-3164973400,3164973407,FR
-3164973408,3164973415,GB
-3164973416,3164973419,FR
+3164970928,3164973419,FR
3164973420,3164973423,ES
-3164973424,3164973439,DE
-3164973440,3164973503,PL
-3164973504,3164973511,FR
-3164973512,3164973515,ES
-3164973516,3164973519,DE
-3164973520,3164973535,PL
-3164973536,3164973551,CH
-3164973552,3164973555,GB
-3164973556,3164973559,FR
-3164973560,3164973575,CZ
-3164973576,3164973583,PL
-3164973584,3164973599,FR
-3164973600,3164973615,IE
-3164973616,3164973623,BE
-3164973624,3164973627,PL
-3164973628,3164973631,CH
-3164973632,3164973663,IE
-3164973664,3164973695,ES
-3164973696,3164973703,DE
-3164973704,3164973711,PT
-3164973712,3164973727,GB
-3164973728,3164973791,FR
-3164973792,3164973807,IT
-3164973808,3164973839,FR
-3164973840,3164973843,PL
-3164973844,3164973847,IE
-3164973848,3164973855,DE
-3164973856,3164973863,PL
-3164973864,3164973867,FR
-3164973868,3164973871,ES
-3164973872,3164973875,PL
-3164973876,3164973879,GB
-3164973880,3164973883,IT
-3164973884,3164973887,DE
-3164973888,3164973911,FR
-3164973912,3164973915,DE
-3164973916,3164973935,FR
-3164973936,3164973939,PL
-3164973940,3164973943,BE
-3164973944,3164973951,PL
-3164973952,3164974591,FR
-3164974592,3164974623,PL
-3164974624,3164974643,FR
-3164974644,3164974647,PL
-3164974648,3164974651,PT
-3164974652,3164974655,DE
-3164974656,3164974659,FR
-3164974660,3164974667,GB
-3164974668,3164974671,LT
-3164974672,3164974675,FR
-3164974676,3164974679,PL
-3164974680,3164974687,FR
-3164974688,3164974719,PL
-3164974720,3164974727,FR
-3164974728,3164974731,PL
-3164974732,3164974735,IT
-3164974736,3164974783,FR
-3164974784,3164974815,IT
-3164974816,3164974847,FR
-3164974848,3164974879,PL
-3164974880,3164974887,FR
-3164974888,3164974895,BE
-3164974896,3164974943,FR
-3164974944,3164974975,PL
-3164974976,3164975023,FR
-3164975024,3164975031,GB
-3164975032,3164975135,FR
-3164975136,3164975143,PL
-3164975144,3164975151,PT
-3164975152,3164975163,FR
-3164975164,3164975167,IT
-3164975168,3164975199,NL
-3164975200,3164975203,CH
-3164975204,3164975211,PL
-3164975212,3164975215,CZ
-3164975216,3164975223,DE
-3164975224,3164975231,FR
-3164975232,3164975235,CZ
-3164975236,3164975251,FR
-3164975252,3164975267,PL
-3164975268,3164975275,LT
-3164975276,3164975279,GB
-3164975280,3164975295,FR
-3164975296,3164975299,BE
-3164975300,3164975343,ES
-3164975344,3164975351,GB
-3164975352,3164975355,DE
-3164975356,3164975651,FR
-3164975652,3164975655,PL
-3164975656,3164975663,FR
-3164975664,3164975679,PL
-3164975680,3164975687,NL
-3164975688,3164975691,FR
-3164975692,3164975695,GB
-3164975696,3164975699,PL
-3164975700,3164975703,FR
-3164975704,3164975719,PL
-3164975720,3164975727,ES
-3164975728,3164975735,FR
-3164975736,3164975739,BE
-3164975740,3164975743,IT
-3164975744,3164975751,PL
-3164975752,3164975755,NL
-3164975756,3164975759,ES
-3164975760,3164975775,PL
-3164975776,3164975807,FR
-3164975808,3164975823,PL
-3164975824,3164975843,GB
-3164975844,3164975847,PL
-3164975848,3164975855,FR
-3164975856,3164975871,PL
-3164975872,3164975935,FR
-3164975936,3164975939,ES
-3164975940,3164975943,PT
-3164975944,3164975947,PL
-3164975948,3164975951,FR
-3164975952,3164975967,GB
-3164975968,3164975983,NL
-3164975984,3164975991,DE
-3164975992,3164975995,FR
-3164975996,3164975999,NL
-3164976000,3164976023,PL
-3164976024,3164976031,ES
-3164976032,3164976047,FR
-3164976048,3164976063,PL
-3164976064,3164976095,FR
-3164976096,3164976127,PL
-3164976128,3164976131,NL
-3164976132,3164976135,GB
-3164976136,3164976139,FR
-3164976140,3164976143,GB
-3164976144,3164976159,FR
-3164976160,3164976191,GB
-3164976192,3164976215,FR
-3164976216,3164976223,GB
-3164976224,3164976231,FR
-3164976232,3164976239,ES
-3164976240,3164976255,IE
-3164976256,3164976259,GB
-3164976260,3164976263,FR
-3164976264,3164976271,PT
-3164976272,3164976279,FI
-3164976280,3164976287,PL
-3164976288,3164976291,NL
-3164976292,3164976295,PL
+3164973424,3164973663,FR
+3164973664,3164973695,GB
+3164973696,3164974335,FR
+3164974336,3164974463,GB
+3164974464,3164974527,FR
+3164974528,3164974559,ES
+3164974560,3164976143,FR
+3164976144,3164976159,BE
+3164976160,3164976295,FR
3164976296,3164976303,IT
-3164976304,3164976307,FR
-3164976308,3164976311,LT
-3164976312,3164976319,PL
-3164976320,3164976327,ES
-3164976328,3164976331,FR
-3164976332,3164976335,PL
-3164976336,3164976339,LT
-3164976340,3164976343,DE
-3164976344,3164976347,PL
-3164976348,3164976351,ES
-3164976352,3164976383,IE
-3164976384,3164976399,FR
-3164976400,3164976403,CH
-3164976404,3164976407,PL
-3164976408,3164976415,PT
-3164976416,3164976431,FR
-3164976432,3164976447,PT
-3164976448,3164976455,FR
-3164976456,3164976459,LT
-3164976460,3164976463,DE
-3164976464,3164976479,ES
-3164976480,3164976575,FR
-3164976576,3164976583,LT
-3164976584,3164976591,IT
-3164976592,3164976623,FR
-3164976624,3164976631,BE
-3164976632,3164976663,FR
-3164976664,3164976671,GB
-3164976672,3164976687,FR
-3164976688,3164976703,PL
-3164976704,3164976767,FR
-3164976768,3164976783,DE
-3164976784,3164976799,CZ
-3164976800,3164976831,FR
-3164976832,3164976835,IT
-3164976836,3164976839,ES
-3164976840,3164976847,FR
-3164976848,3164976863,CH
-3164976864,3164977151,FR
-3164977152,3164977215,PL
-3164977216,3164977407,FR
-3164977408,3164977415,NL
-3164977416,3164977439,FR
-3164977440,3164977455,PT
-3164977456,3164977471,FR
-3164977472,3164977535,PT
-3164977536,3164977599,FR
-3164977600,3164977631,GB
-3164977632,3164977639,CZ
-3164977640,3164977759,FR
-3164977760,3164977775,NL
-3164977776,3164977823,FR
-3164977824,3164977839,PT
-3164977840,3164977871,FR
-3164977872,3164977875,GB
-3164977876,3164977883,DE
-3164977884,3164977887,GB
-3164977888,3164977903,IT
-3164977904,3164977907,DE
-3164977908,3164977911,BE
-3164977912,3164977915,CH
-3164977916,3164977919,CZ
-3164977920,3164977951,DE
-3164977952,3164977959,FR
-3164977960,3164977963,CZ
-3164977964,3164977967,BE
-3164977968,3164977983,IT
-3164977984,3164977999,FR
-3164978000,3164978003,PL
-3164978004,3164978007,GB
-3164978008,3164978015,FR
-3164978016,3164978047,PT
-3164978048,3164978063,FR
-3164978064,3164978067,BE
-3164978068,3164978071,FR
-3164978072,3164978079,ES
-3164978080,3164978127,GB
-3164978128,3164978147,FR
-3164978148,3164978151,BE
-3164978152,3164978155,GB
-3164978156,3164978159,DE
-3164978160,3164978175,FR
-3164978176,3164978431,IT
-3164978432,3164978559,FR
-3164978560,3164978563,PL
-3164978564,3164978567,FR
-3164978568,3164978571,DE
-3164978572,3164978575,IT
-3164978576,3164978607,FR
-3164978608,3164978615,DE
-3164978616,3164978623,FR
-3164978624,3164978655,ES
-3164978656,3164978659,IT
-3164978660,3164978663,FI
-3164978664,3164978667,PL
-3164978668,3164978671,FR
-3164978672,3164978679,PT
-3164978680,3164978687,PL
-3164978688,3164978695,PT
-3164978696,3164978703,ES
-3164978704,3164978719,BE
-3164978720,3164978783,PT
-3164978784,3164978815,FR
-3164978816,3164978879,IE
-3164978880,3164978951,FR
-3164978952,3164978955,PL
-3164978956,3164978975,FR
-3164978976,3164978983,ES
-3164978984,3164978991,CZ
-3164978992,3164978999,PL
-3164979000,3164979003,GB
-3164979004,3164979007,DE
-3164979008,3164979047,FR
-3164979048,3164979051,BE
-3164979052,3164979103,FR
-3164979104,3164979107,FI
-3164979108,3164979111,IT
-3164979112,3164979119,PL
-3164979120,3164979135,NL
-3164979136,3164979151,FR
-3164979152,3164979155,ES
-3164979156,3164979167,FR
-3164979168,3164979175,DE
-3164979176,3164979183,FR
-3164979184,3164979199,DE
-3164979200,3164995583,FR
+3164976304,3164995583,FR
3164995584,3165061119,RU
3165061120,3165126655,SK
3165126656,3165192191,RU
3165192192,3165257727,GE
3165257728,3165323263,RO
3165323264,3165388799,ES
-3165388800,3165519871,RO
+3165388800,3165417471,RO
+3165417472,3165421567,DE
+3165421568,3165437951,RO
+3165437952,3165454335,AT
+3165454336,3165519871,RO
3165519872,3165585407,DE
3165585408,3165650943,CZ
-3165650944,3165938239,DK
-3165938240,3165938367,US
-3165938368,3165938375,DK
-3165938376,3165938431,US
-3165938432,3166175231,DK
+3165650944,3166175231,DK
3166175232,3166306303,CH
3166306304,3166437375,RU
3166437376,3166568447,BE
@@ -104762,7 +51608,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
@@ -104780,111 +51626,119 @@
3166697472,3166699519,RO
3166699520,3166961663,DE
3166961664,3167223807,SI
-3167223808,3167594831,NL
-3167594832,3167594839,A2
-3167594840,3167748095,NL
-3167748096,3167781887,RO
-3167781888,3167782399,A2
-3167782400,3167875071,RO
-3167875072,3167879167,MD
-3167879168,3167940095,RO
-3167940096,3167940351,CY
-3167940352,3167950847,RO
-3167950848,3167951359,A2
-3167951360,3167986687,RO
-3167986688,3167987711,CY
+3167223808,3167748095,NL
+3167748096,3167772671,RO
+3167772672,3167773695,MD
+3167773696,3167774719,RO
+3167774720,3167775743,MD
+3167775744,3167776767,RO
+3167776768,3167777791,MD
+3167777792,3167778815,RO
+3167778816,3167780863,MD
+3167780864,3167797247,RO
+3167797248,3167798271,MD
+3167798272,3167799295,RO
+3167799296,3167801343,MD
+3167801344,3167868927,RO
+3167868928,3167879167,MD
+3167879168,3167938559,RO
+3167938560,3167939583,MD
+3167939584,3167940607,RO
+3167940608,3167943679,MD
+3167943680,3167987711,RO
3167987712,3167989759,MD
-3167989760,3168096255,RO
+3167989760,3168005887,RO
+3168005888,3168006143,NL
+3168006144,3168010239,RO
+3168010240,3168011263,MD
+3168011264,3168012287,RO
+3168012288,3168014335,MD
+3168014336,3168016383,RO
+3168016384,3168018431,MD
+3168018432,3168020479,RO
+3168020480,3168022527,MD
+3168022528,3168050431,RO
+3168050432,3168050687,MD
+3168050688,3168084991,RO
+3168084992,3168086015,MD
+3168086016,3168088063,IT
+3168088064,3168089087,RO
+3168089088,3168090111,MD
+3168090112,3168092159,FR
+3168092160,3168096255,RO
3168096256,3168100351,MD
-3168100352,3168195583,RO
-3168195584,3168196095,DE
-3168196096,3168207103,RO
-3168207104,3168207359,CY
-3168207360,3168214527,RO
-3168214528,3168214783,CY
-3168214784,3168223743,RO
-3168223744,3168224255,MD
-3168224256,3168272383,RO
+3168100352,3168129023,RO
+3168129024,3168130047,MD
+3168130048,3168132095,RO
+3168132096,3168133119,MD
+3168133120,3168136191,RO
+3168136192,3168137215,MD
+3168137216,3168138239,RO
+3168138240,3168139263,MD
+3168139264,3168156671,RO
+3168156672,3168157695,MD
+3168157696,3168176127,RO
+3168176128,3168177151,MD
+3168177152,3168178175,RO
+3168178176,3168179199,MD
+3168179200,3168192511,RO
+3168192512,3168194559,MD
+3168194560,3168199679,RO
+3168199680,3168200703,MD
+3168200704,3168267263,RO
+3168267264,3168269311,MD
+3168269312,3168271359,RO
+3168271360,3168272383,MD
3168272384,3168534527,IT
3168534528,3168796671,GB
3168796672,3168829439,FR
3168829440,3168862207,RO
3168862208,3168894975,RU
3168894976,3168927743,PS
-3168927744,3169026047,RU
+3168927744,3168960511,RU
+3168960512,3168993279,NL
+3168993280,3169026047,RU
3169026048,3169034239,CZ
3169034240,3169042431,GB
3169042432,3169044479,GR
-3169044480,3169045119,NL
-3169045120,3169045135,BE
-3169045136,3169045183,NL
-3169045184,3169045247,BE
-3169045248,3169045375,NL
-3169045376,3169045503,BE
-3169045504,3169046527,NL
+3169044480,3169046527,NL
3169046528,3169050623,AZ
3169050624,3169052671,HU
3169052672,3169054719,PS
3169054720,3169056767,GB
3169056768,3169058815,EE
-3169058816,3169077119,DK
-3169077120,3169077127,NO
-3169077128,3169087375,DK
-3169087376,3169087383,NO
-3169087384,3169087391,DK
-3169087392,3169087415,NO
-3169087416,3169091583,DK
+3169058816,3169091583,DK
3169091584,3169124351,IT
3169124352,3169157119,RO
3169157120,3169189887,SY
3169189888,3169222655,UA
3169222656,3169255423,SI
-3169255424,3169264127,KW
-3169264128,3169264383,US
-3169264384,3169264895,KW
-3169264896,3169264927,OM
-3169264928,3169265167,KW
-3169265168,3169265175,IQ
-3169265176,3169265183,SA
-3169265184,3169265223,KW
-3169265224,3169265231,IQ
-3169265232,3169265295,SA
-3169265296,3169265303,SD
-3169265304,3169265311,SA
-3169265312,3169265567,KW
-3169265568,3169265583,IQ
-3169265584,3169278991,KW
-3169278992,3169279007,SA
-3169279008,3169279231,KW
-3169279232,3169279239,IQ
-3169279240,3169279255,SA
-3169279256,3169279263,KW
-3169279264,3169279295,SA
-3169279296,3169279303,KW
-3169279304,3169279311,SA
-3169279312,3169279319,SD
-3169279320,3169279743,KW
-3169279744,3169279759,IQ
-3169279760,3169281023,KW
-3169281024,3169281279,US
-3169281280,3169288191,KW
+3169255424,3169279999,KW
+3169280000,3169282047,GB
+3169282048,3169288191,KW
3169288192,3169320959,UA
3169320960,3169583103,RU
3169583104,3169648639,KW
3169648640,3169714175,MD
3169714176,3169779711,FI
3169779712,3169845247,UA
-3169845248,3169863679,RO
+3169845248,3169854463,RO
+3169854464,3169855487,IR
+3169855488,3169863167,RO
+3169863168,3169863423,MD
+3169863424,3169863679,RO
3169863680,3169864703,MD
-3169864704,3169867775,RO
-3169867776,3169868031,DE
-3169868032,3169873919,RO
-3169873920,3169878015,MD
-3169878016,3169905151,RO
-3169905152,3169905407,GB
-3169905408,3169920767,RO
-3169920768,3169921023,SE
-3169921024,3169976319,RO
+3169864704,3169869823,RO
+3169869824,3169878015,MD
+3169878016,3169882111,RO
+3169882112,3169886207,MD
+3169886208,3169894399,RO
+3169894400,3169895423,MD
+3169895424,3169896447,RO
+3169896448,3169898495,ES
+3169898496,3169927423,RO
+3169927424,3169927679,NL
+3169927680,3169976319,RO
3169976320,3170111487,RU
3170111488,3170115583,MD
3170115584,3170119679,RU
@@ -104901,17 +51755,13 @@
3170263040,3170271231,CZ
3170271232,3170279423,PL
3170279424,3170287615,RU
-3170287616,3170289151,GB
-3170289152,3170289167,BA
-3170289168,3170295807,GB
+3170287616,3170295807,GB
3170295808,3170303999,RU
3170304000,3170312191,SY
3170312192,3170320383,RU
3170320384,3170328575,JO
3170328576,3170336767,UA
-3170336768,3170363391,RO
-3170363392,3170363647,SK
-3170363648,3170369535,RO
+3170336768,3170369535,RO
3170369536,3170500607,SA
3170500608,3170631679,PT
3170631680,3170664447,PL
@@ -104922,8 +51772,16 @@
3170795520,3170828287,BG
3170828288,3170861055,RU
3170861056,3170893823,RS
-3170893824,3179282431,BR
-3179282432,3187671039,MX
+3170893824,3173887999,BR
+3173892096,3174223871,BR
+3174227968,3179282431,BR
+3179282432,3184116735,MX
+3184116736,3184123903,BR
+3184123904,3184125951,MX
+3184125952,3184127999,BR
+3184128000,3184459775,MX
+3184525312,3184885759,MX
+3184918528,3187671039,MX
3187671040,3187687423,CO
3187687424,3187695615,DO
3187695616,3187703807,AR
@@ -104935,16 +51793,19 @@
3187732480,3187734527,CO
3187734528,3187736575,BO
3187736576,3187752959,AR
-3187752960,3187755007,VE
-3187755008,3187755519,CO
-3187755520,3187761151,VE
+3187752960,3187755519,CO
+3187755520,3187756031,VE
+3187756032,3187761151,CO
3187761152,3187769343,AR
3187769344,3187802111,CO
3187802112,3187818495,AR
+3187820544,3187822591,BR
3187822592,3187824639,AR
3187824640,3187826687,CL
3187826688,3187834879,AR
-3187834880,3187851263,CW
+3187834880,3187843071,CW
+3187843072,3187845119,AW
+3187845120,3187851263,CW
3187851264,3187855359,PY
3187855360,3187857407,PA
3187857408,3187859455,CR
@@ -104954,15 +51815,25 @@
3187910656,3187914751,CL
3187914752,3187916799,BO
3187916800,3187933183,CO
-3187933184,3187935607,GT
+3187933184,3187935519,GT
+3187935520,3187935527,HN
+3187935528,3187935607,GT
3187935608,3187935615,HN
-3187935616,3187936711,GT
+3187935616,3187936047,GT
+3187936048,3187936063,HN
+3187936064,3187936711,GT
3187936712,3187936719,HN
-3187936720,3187937279,GT
-3187937280,3187939327,HN
-3187939328,3187940351,GT
-3187940352,3187941375,HN
-3187941376,3187946111,GT
+3187936720,3187940351,GT
+3187940352,3187940607,HN
+3187940608,3187940963,GT
+3187940964,3187940967,HN
+3187940968,3187943055,GT
+3187943056,3187943063,HN
+3187943064,3187943127,GT
+3187943128,3187943135,HN
+3187943136,3187945971,GT
+3187945972,3187945975,HN
+3187945976,3187946111,GT
3187946112,3187946239,HN
3187946240,3187946639,GT
3187946640,3187946647,HN
@@ -104971,7 +51842,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
@@ -104982,6 +51855,7 @@
3188006912,3188015103,CL
3188015104,3188031487,HN
3188031488,3188039679,SV
+3188039680,3188047871,AR
3188047872,3188051967,CO
3188051968,3188054015,CR
3188054016,3188056063,AR
@@ -104995,7 +51869,9 @@
3188113408,3188117503,HN
3188117504,3188121599,AR
3188121600,3188125695,TT
-3188125696,3188146175,AR
+3188125696,3188137175,AR
+3188137176,3188137183,DE
+3188137184,3188146175,AR
3188146176,3188170751,CO
3188170752,3188174847,CR
3188174848,3188178943,AR
@@ -105013,9 +51889,14 @@
3188242432,3188244479,AR
3188244480,3188260863,CO
3188260864,3188269055,AR
-3188269056,3188269439,VE
+3188269056,3188269183,VE
+3188269184,3188269311,MX
+3188269312,3188269439,VE
3188269440,3188269567,CO
-3188269568,3188270847,VE
+3188269568,3188269823,MX
+3188269824,3188270079,VE
+3188270080,3188270335,MX
+3188270336,3188270847,VE
3188270848,3188271103,BR
3188271104,3188273151,VE
3188273152,3188275199,PA
@@ -105035,9 +51916,13 @@
3188473856,3188482047,PE
3188482048,3188490239,AR
3188490240,3188498431,CO
-3188498432,3188517119,AR
+3188498432,3188513407,AR
+3188513408,3188513535,US
+3188513536,3188517119,AR
3188517120,3188517247,US
-3188517248,3188523007,AR
+3188517248,3188518271,AR
+3188518272,3188518399,US
+3188518400,3188523007,AR
3188523008,3188539391,CO
3188539392,3188543487,CL
3188543488,3188545535,PA
@@ -105052,14 +51937,17 @@
3188597760,3188598783,PA
3188598784,3188600831,AR
3188600832,3188604927,CL
+3188604928,3188621311,BO
3188621312,3188625407,GT
3188625408,3188627455,AR
3188627456,3188628479,CR
3188628480,3188637695,AR
3188637696,3188645887,PA
3188645888,3188662271,CO
+3188662272,3188670463,BR
3188670464,3188674559,HN
3188674560,3188678655,AR
+3188678656,3188682751,BR
3188682752,3188686847,AR
3188686848,3188690943,EC
3188690944,3188695039,CU
@@ -105080,7 +51968,12 @@
3191093248,3191095295,AR
3191095296,3191099391,EC
3191099392,3191103487,AR
-3191107584,3191109119,PE
+3191103488,3191107583,VE
+3191107584,3191108607,PE
+3191108608,3191108639,MX
+3191108640,3191108959,PE
+3191108960,3191108991,CO
+3191108992,3191109119,PE
3191109120,3191109631,MX
3191109632,3191111679,PE
3191111680,3191128063,PY
@@ -105088,60 +51981,100 @@
3191132160,3191136255,AR
3191136256,3191144447,DO
3191144448,3191152639,SV
-3191152640,3191154687,NI
-3191154688,3191156735,SV
+3191152640,3191155711,NI
+3191155712,3191156735,SV
3191156736,3191169023,HN
3191169024,3191193599,SV
3191193600,3191209983,HN
3191209984,3191275519,CL
3191275520,3191341055,AR
-3191341056,3191406591,GT
+3191341056,3191405951,GT
+3191405952,3191406335,SV
+3191406336,3191406591,GT
3191406592,3191439359,SV
3191439360,3191455743,EC
3191455744,3191472127,AR
3191472128,3191603199,TT
3191603200,3191607807,CO
3191607808,3191608319,CL
-3191608320,3191611391,CO
+3191608320,3191610623,CO
+3191610624,3191610879,PE
+3191610880,3191611391,CO
3191611392,3191619583,VE
-3191619584,3191649279,CO
-3191649280,3191649791,US
-3191649792,3191650559,CO
-3191650560,3191650815,US
+3191619584,3191624703,CL
+3191624704,3191624959,CO
+3191624960,3191626239,CL
+3191626240,3191626495,CO
+3191626496,3191633663,CL
+3191633664,3191633919,CO
+3191633920,3191635967,CL
+3191635968,3191647743,CO
+3191647744,3191647807,AR
+3191647808,3191648255,CO
+3191648256,3191649791,US
+3191649792,3191650303,CO
+3191650304,3191650815,US
3191650816,3191651071,CO
-3191651072,3191651327,US
-3191651328,3191651583,CO
-3191651584,3191651839,US
+3191651072,3191651839,US
3191651840,3191670015,CO
3191670016,3191670271,AR
-3191670272,3191676927,CO
-3191676928,3191679487,AR
-3191679488,3191679743,US
-3191679744,3191683327,AR
-3191683328,3191683583,US
-3191683584,3191684351,AR
-3191684352,3191684607,US
-3191684608,3191685631,AR
+3191670272,3191670783,CO
+3191670784,3191672831,CL
+3191672832,3191674879,CO
+3191674880,3191676927,CL
+3191676928,3191677951,US
+3191677952,3191678207,AR
+3191678208,3191678719,US
+3191678720,3191678975,AR
+3191678976,3191680255,US
+3191680256,3191680511,AR
+3191680512,3191680767,US
+3191680768,3191681279,AR
+3191681280,3191681535,US
+3191681536,3191683327,AR
+3191683328,3191684607,US
+3191684608,3191684863,AR
+3191684864,3191685119,US
+3191685120,3191685631,AR
3191685632,3191685887,US
-3191685888,3191688703,AR
+3191685888,3191687167,AR
+3191687168,3191688703,CO
3191688704,3191693311,US
-3191693312,3191696383,CO
-3191696384,3191696895,US
-3191696896,3191697407,CO
-3191697408,3191701503,US
-3191701504,3191704063,CO
+3191693312,3191695871,CO
+3191695872,3191696127,US
+3191696128,3191696383,CO
+3191696384,3191701503,US
+3191701504,3191702527,CL
+3191702528,3191703039,US
+3191703040,3191704063,CO
3191704064,3191704575,US
-3191704576,3191705599,CO
+3191704576,3191704831,CO
+3191704832,3191705343,US
+3191705344,3191705599,CO
3191705600,3191705855,US
-3191705856,3191721983,CO
-3191721984,3191722495,AR
-3191722496,3191727103,CO
+3191705856,3191706111,CO
+3191706112,3191706623,US
+3191706624,3191719935,CO
+3191719936,3191721215,AR
+3191721216,3191721471,CO
+3191721472,3191722495,AR
+3191722496,3191725055,CO
+3191725056,3191725311,AR
+3191725312,3191726079,CO
+3191726080,3191726335,AR
+3191726336,3191726591,CO
+3191726592,3191726847,AR
+3191726848,3191727103,CO
3191727104,3191727359,AR
-3191727360,3191730943,CO
+3191727360,3191730431,CO
+3191730432,3191730687,AR
+3191730688,3191730943,CO
3191730944,3191731199,AR
3191731200,3191732479,CO
3191732480,3191732735,AR
-3191732736,3191734271,CO
+3191732736,3191734079,CO
+3191734080,3191734143,US
+3191734144,3191734271,CO
3191734272,3191799807,SV
3191799808,3191865343,EC
3191865344,3191930879,UY
@@ -105154,59 +52087,97 @@
3193143296,3193176063,TT
3193176064,3193307135,CO
3193307136,3193438207,SV
-3193438208,3193569279,CW
-3193569280,3193582847,CO
-3193582848,3193583103,EC
-3193583104,3193606143,CO
+3193438208,3193450495,CW
+3193450496,3193450751,SR
+3193450752,3193569279,CW
+3193569280,3193579263,CO
+3193579264,3193579519,EC
+3193579520,3193582591,CO
+3193582592,3193583103,EC
+3193583104,3193595391,CO
+3193595392,3193595647,EC
+3193595648,3193599999,CO
+3193600000,3193600255,EC
+3193600256,3193605375,CO
+3193605376,3193605631,EC
+3193605632,3193606143,CO
3193606144,3193606399,EC
-3193606400,3193622527,CO
-3193622528,3193623295,EC
-3193623296,3193625599,CO
+3193606400,3193606655,CO
+3193606656,3193607167,EC
+3193607168,3193617151,CO
+3193617152,3193617407,EC
+3193617408,3193622527,CO
+3193622528,3193623551,EC
+3193623552,3193625599,CO
3193625600,3193625855,EC
3193625856,3193626111,CO
-3193626112,3193626367,US
-3193626368,3193634815,CO
+3193626112,3193626623,US
+3193626624,3193629439,CO
+3193629440,3193629695,EC
+3193629696,3193634815,CO
3193634816,3193700351,CL
-3193700352,3193724927,HN
+3193700352,3193722751,HN
+3193722752,3193722879,GT
+3193722880,3193724927,HN
3193724928,3193729023,AR
3193729024,3193733119,CU
-3193733120,3193735423,AR
-3193735424,3193735679,US
+3193733120,3193735167,AR
+3193735168,3193735679,US
3193735680,3193736191,AR
3193736192,3193736447,US
3193736448,3193737471,AR
-3193737472,3193737727,US
-3193737728,3193737983,AR
-3193737984,3193738495,US
-3193738496,3193738751,AR
-3193738752,3193739007,US
+3193737472,3193739007,US
3193739008,3193739263,AR
3193739264,3193739519,US
-3193739520,3193740031,AR
-3193740032,3193740287,US
+3193739520,3193739775,AR
+3193739776,3193740287,US
3193740288,3193741311,AR
-3193741312,3193741567,US
-3193741568,3193743231,AR
+3193741312,3193741823,US
+3193741824,3193742079,AR
+3193742080,3193742335,US
+3193742336,3193742591,AR
+3193742592,3193742847,US
+3193742848,3193743231,AR
3193743232,3193743359,US
-3193743360,3193745279,AR
+3193743360,3193743743,AR
+3193743744,3193743871,US
+3193743872,3193743999,AR
+3193744000,3193744127,US
+3193744128,3193745279,AR
3193745280,3193745407,US
-3193745408,3193746751,AR
+3193745408,3193746431,AR
+3193746432,3193746687,US
+3193746688,3193746751,AR
3193746752,3193746815,US
-3193746816,3193747839,AR
-3193747840,3193748223,US
-3193748224,3193749503,AR
-3193749504,3193749759,US
+3193746816,3193746879,AR
+3193746880,3193746943,US
+3193746944,3193747199,AR
+3193747200,3193747455,US
+3193747456,3193747583,AR
+3193747584,3193748223,US
+3193748224,3193748863,AR
+3193748864,3193748991,US
+3193748992,3193749247,AR
+3193749248,3193749759,US
3193749760,3193750015,AR
3193750016,3193750271,US
3193750272,3193750527,AR
3193750528,3193750783,US
3193750784,3193751807,AR
3193751808,3193752319,US
-3193752320,3193753215,AR
-3193753216,3193753343,US
+3193752320,3193752831,AR
+3193752832,3193752959,US
+3193752960,3193753087,AR
+3193753088,3193753343,US
3193753344,3193754623,AR
3193754624,3193754751,US
-3193754752,3193765887,AR
+3193754752,3193755135,AR
+3193755136,3193755263,US
+3193755264,3193756415,AR
+3193756416,3193756543,US
+3193756544,3193757055,AR
+3193757056,3193757183,US
+3193757184,3193765887,AR
3193765888,3193774079,TT
3193774080,3193775103,PA
3193775104,3193776127,GY
@@ -105233,11 +52204,12 @@
3194028032,3194044415,AR
3194044416,3194052607,CO
3194052608,3194056703,TT
-3194056704,3194058751,CW
+3194056704,3194058495,CW
+3194058496,3194058751,CA
3194058752,3194060799,AR
3194060800,3194068991,CO
3194068992,3194071039,PA
-3194071040,3194073087,CL
+3194071040,3194072063,CL
3194073088,3194077183,HN
3194077184,3194085375,CO
3194085376,3194093567,VE
@@ -105251,8 +52223,8 @@
3194134528,3194135551,AR
3194135552,3194136575,GT
3194136576,3194137087,BR
-3194137088,3194140671,AR
-3194140672,3194142719,CR
+3194137088,3194140159,AR
+3194140160,3194142719,CR
3194142720,3194159103,CL
3194159104,3194165247,HN
3194165248,3194175487,SV
@@ -105272,11 +52244,7 @@
3194368000,3194370047,BO
3194370048,3194372095,PA
3194372096,3194380287,HT
-3194380288,3194381439,BZ
-3194381440,3194381567,US
-3194381568,3194383231,BZ
-3194383232,3194383359,US
-3194383360,3194388479,BZ
+3194380288,3194388479,US
3194388480,3194396671,PE
3194396672,3194413055,CO
3194413056,3194421247,CL
@@ -105287,11 +52255,14 @@
3194445824,3194454015,CO
3194454016,3194458111,AR
3194458112,3194462207,CL
+3194462208,3194466303,BR
3194466304,3194467327,AR
3194467328,3194468351,DO
3194468352,3194469375,US
3194469376,3194469631,CA
-3194469632,3194470399,CR
+3194469632,3194469887,CR
+3194469888,3194470143,US
+3194470144,3194470399,CR
3194470400,3194486783,AR
3194486784,3194494975,BO
3194494976,3194511359,AR
@@ -105299,7 +52270,9 @@
3194515456,3194519551,GT
3194519552,3194535935,PY
3194535936,3194585087,AR
-3194585088,3194589183,HN
+3194585088,3194586623,HN
+3194586624,3194586879,US
+3194586880,3194589183,HN
3194589184,3194591231,AR
3194591232,3194592255,PA
3194592256,3194593279,GY
@@ -105318,15 +52291,21 @@
3194640384,3194642431,BZ
3194642432,3194646527,AR
3194646528,3194648575,DO
-3194648576,3194659839,AR
+3194648576,3194652159,AR
+3194652160,3194652415,MX
+3194652416,3194652671,AR
+3194652672,3194654719,MX
+3194654720,3194659839,AR
3194659840,3194660351,US
-3194660352,3194662143,AR
+3194660352,3194661119,AR
+3194661120,3194661375,US
+3194661376,3194662143,AR
3194662144,3194662399,US
3194662400,3194663167,AR
-3194663168,3194663423,US
-3194663424,3194663679,AR
-3194663680,3194663935,US
-3194663936,3194665471,AR
+3194663168,3194664447,US
+3194664448,3194664959,AR
+3194664960,3194665215,US
+3194665216,3194665471,AR
3194665472,3194665727,US
3194665728,3194665983,AR
3194665984,3194666239,US
@@ -105346,24 +52325,28 @@
3194728448,3194729471,CL
3194729472,3194730495,PE
3194730496,3194732543,AR
+3194732544,3194736639,BR
3194736640,3194737663,NI
3194737664,3194740735,AR
3194740736,3194742783,CL
3194742784,3194744831,EC
3194744832,3194746879,AR
-3194746880,3194748927,US
+3194746880,3194748927,CW
3194748928,3194757119,UY
3194757120,3194765311,AR
3194765312,3194767359,EC
3194767360,3194768383,CR
3194768384,3194769407,AR
3194769408,3194773503,PE
+3194773504,3194781695,BR
3194781696,3194798079,CL
3194798080,3194799103,AR
3194799104,3194804223,GY
3194804224,3194805247,AR
3194805248,3194806271,CR
-3194806272,3194830847,AR
+3194806272,3194814463,AR
+3194814464,3194818559,PA
+3194818560,3194830847,AR
3194830848,3194839039,PA
3194839040,3194863615,CO
3194863616,3194871807,HN
@@ -105390,22 +52373,33 @@
3194982912,3194983039,US
3194983040,3194984191,PA
3194984192,3194984319,US
-3194984320,3194985471,PA
+3194984320,3194984831,PA
+3194984832,3194984959,GB
+3194984960,3194985471,PA
3194985472,3194985599,US
3194985600,3194994687,PA
-3194994688,3195011071,AR
-3195019264,3195023359,AR
+3194994688,3195023359,AR
3195023360,3195024383,CL
3195024384,3195025407,UY
3195025408,3195043839,AR
-3195043840,3195060223,CO
-3195060224,3195064319,UY
+3195043840,3195056127,CO
+3195056128,3195060223,AR
+3195060224,3195061247,US
+3195061248,3195062271,AR
+3195062272,3195062783,US
+3195062784,3195063039,UY
+3195063040,3195063295,US
+3195063296,3195064319,BR
+3195064320,3195066367,PY
3195066368,3195067391,AR
3195067392,3195068415,CR
3195068416,3195076607,CW
3195076608,3195084799,CL
3195084800,3195092991,CR
-3195092992,3195097087,AR
+3195092992,3195097087,DO
+3195097088,3195099135,CR
+3195099136,3195100159,GT
+3195100160,3195101183,PY
3195101184,3195109375,CR
3195109376,3195125759,AR
3195125760,3195133951,PE
@@ -105422,11 +52416,10 @@
3195205632,3195206655,PE
3195206656,3195207679,CL
3195207680,3195211775,GT
+3195211776,3195215871,BZ
3195215872,3195224063,AR
-3195224064,3195232511,PA
-3195232512,3195232767,CR
-3195232768,3195233023,PA
-3195233024,3195234559,CR
+3195224064,3195232255,PA
+3195232256,3195234559,CR
3195234560,3195234815,PA
3195234816,3195235327,CR
3195235328,3195235583,PA
@@ -105436,7 +52429,9 @@
3195256832,3195265023,AR
3195265024,3195273215,CO
3195273216,3195535359,PE
-3195535360,3195543551,SV
+3195535360,3195536639,SV
+3195536640,3195536895,FR
+3195536896,3195543551,SV
3195547648,3195551743,AR
3195551744,3195559935,EC
3195559936,3195568127,AR
@@ -105462,22 +52457,34 @@
3195699200,3195707391,AR
3195707392,3195711487,PA
3195711488,3195712511,SV
-3195715584,3195731967,AR
+3195712512,3195713535,AR
+3195713536,3195714559,GT
+3195714560,3195715583,PA
+3195715584,3195721727,AR
+3195721728,3195723775,VE
+3195723776,3195731967,AR
3195731968,3195736063,EC
3195736064,3195737087,BQ
3195737088,3195738111,CW
3195738112,3195740159,HN
-3195740160,3195741439,PA
-3195741440,3195741951,US
+3195740160,3195740415,US
+3195740416,3195740927,PA
+3195740928,3195741951,US
3195741952,3195744255,PA
3195744256,3195748351,EC
3195748352,3195752447,CL
-3195756544,3195763711,AR
+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
@@ -105489,6 +52496,7 @@
3195830272,3195838463,AR
3195838464,3195840511,HN
3195840512,3195842559,AR
+3195842560,3195846655,BR
3195846656,3195852799,AR
3195852800,3195853823,CW
3195853824,3195854847,GY
@@ -105503,7 +52511,9 @@
3196223488,3196305407,EC
3196305408,3196321791,CO
3196321792,3196583935,UY
-3196583936,3196846079,AR
+3196583936,3196690687,AR
+3196690688,3196690943,UY
+3196690944,3196846079,AR
3196846080,3196977151,PA
3196977152,3197042687,VE
3197042688,3197075455,CO
@@ -105528,10 +52538,17 @@
3198681088,3198877695,VE
3198877696,3198894079,CR
3198894080,3198902271,CO
+3198902272,3198910463,CR
3198910464,3198926847,CL
3198926848,3198943231,BO
3198943232,3199467519,AR
+3199467520,3199500287,BO
+3199500288,3199504383,BR
3199504384,3199505407,AR
+3199505408,3199506431,BR
+3199506432,3199508479,AR
+3199508480,3199516671,BR
+3199516672,3199533055,CL
3199533056,3199549439,BO
3199549440,3199565823,AR
3199565824,3199582207,NI
@@ -105558,6 +52575,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
@@ -105573,22 +52592,31 @@
3201534976,3201535999,CO
3201536000,3201540095,AR
3201540096,3201544191,CL
+3201544192,3201548287,DO
3201548288,3201556479,AR
3201556480,3201560575,BO
3201560576,3201561599,PY
3201561600,3201562623,AR
3201562624,3201563647,CL
-3201563648,3201564671,PA
+3201563648,3201564287,PA
+3201564288,3201564415,GB
+3201564416,3201564671,PA
3201564672,3201630207,NI
3201630208,3201695743,TT
3201695744,3201761279,EC
3201761280,3201826815,CL
-3201826816,3201859583,AR
+3201826816,3201851391,AR
+3201851392,3201855487,EC
+3201855488,3201859583,PE
3201859584,3201863679,CO
3201863680,3201865727,CL
-3201865728,3201867775,AR
+3201865728,3201867775,CO
3201867776,3201869823,PE
-3201869824,3201871871,AR
+3201869824,3201869855,AR
+3201869856,3201869871,PE
+3201869872,3201871743,AR
+3201871744,3201871807,PE
+3201871808,3201871871,AR
3201871872,3201875967,PE
3201875968,3201880063,CO
3201880064,3201884159,EC
@@ -105620,66 +52648,162 @@
3203538688,3203538943,CO
3203538944,3203539967,BZ
3203539968,3203543551,CO
-3203543552,3203544063,GT
-3203544064,3203547135,CO
+3203543552,3203544575,GT
+3203544576,3203545087,CO
+3203545088,3203545599,GT
+3203545600,3203547135,CO
3203547136,3203549183,PA
-3203549184,3203661823,CO
+3203549184,3203556863,CO
+3203556864,3203557119,DO
+3203557120,3203561471,CO
+3203561472,3203562495,SV
+3203562496,3203564031,CO
+3203564032,3203564287,PA
+3203564288,3203566591,CO
+3203566592,3203566847,PA
+3203566848,3203661823,CO
3203661824,3203923967,AR
3203923968,3204448255,CO
+3204448256,3208642559,BR
+3208642560,3209691135,CO
+3209691136,3210084351,AR
+3210084352,3210215423,BR
+3210215424,3210739711,CO
+3210739712,3210739967,CL
+3210739968,3210740223,MX
+3210740224,3210740479,AR
+3210740480,3210740735,US
+3210740736,3210742271,BR
+3210742272,3210743295,CL
+3210743296,3210743551,US
+3210743552,3210747647,CL
+3210747648,3210747903,US
+3210747904,3210748415,BR
+3210748416,3210751999,CL
+3210752000,3210752255,US
+3210752256,3210757119,CL
+3210757120,3210757375,US
+3210757376,3210763519,CL
+3210763520,3210763775,US
+3210763776,3210769919,CL
+3210769920,3210770175,US
+3210770176,3210772991,CL
+3210772992,3210773247,US
+3210773248,3210776319,CL
+3210776320,3210776575,US
+3210776576,3210776831,CL
+3210776832,3210777087,US
+3210777088,3210778367,CL
+3210778368,3210778623,US
+3210778624,3210803327,CL
+3210803328,3210803455,BR
+3210803456,3210805247,CL
+3210805248,3210809343,PA
+3210809344,3210810367,VE
+3210810368,3210811391,PA
+3210811392,3210817535,AR
+3210817536,3210821631,PE
+3210821632,3210822655,EC
+3210822656,3210825727,AR
+3210825728,3210827775,BZ
+3210827776,3210829823,DO
+3210829824,3210830847,AR
+3210830848,3210831871,PE
+3210831872,3210832895,DO
+3210832896,3210835967,AR
+3210835968,3210838015,PY
+3210838016,3210870783,AR
+3210870784,3210903551,CO
+3210903552,3210919935,PE
+3210919936,3210920959,GT
+3210920960,3210921983,PA
+3210921984,3210924031,CL
+3210924032,3210926079,DO
+3210926080,3210928127,AR
+3210928128,3210936319,NI
+3210936320,3211067391,EC
+3211067392,3211069439,US
+3211069440,3211073023,CL
+3211073024,3211073279,CA
+3211073280,3211129599,CL
+3211129600,3211129855,BR
+3211129856,3211132927,CL
+3211132928,3211137023,CO
+3211137024,3211141119,AR
+3211141120,3211142143,CL
+3211142144,3211143167,CR
+3211143168,3211145215,AR
+3211145216,3211147263,NI
+3211147264,3211148287,CR
+3211148288,3211165695,CO
+3211165696,3211182079,HN
+3211182080,3211194367,CO
+3211194368,3211195391,DO
+3211195392,3211214847,AR
+3211214848,3211223039,HN
+3211223040,3211227135,AR
+3211227136,3211231231,NI
+3211231232,3211788287,CO
+3211788288,3212312575,CL
+3212312576,3212574719,BR
+3212574720,3212836863,CL
+3212836864,3213885439,BR
+3213885440,3214934015,CO
+3214934016,3219796375,BR
+3219796376,3219796376,US
+3219796377,3221225471,BR
+3221225480,3221225727,GB
+3221225728,3221225983,US
+3221226240,3221226495,US
3221226496,3221227519,KY
-3221227520,3221229823,US
-3221229824,3221229855,CN
-3221229856,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
-3221560320,3221561343,GB
-3221561344,3221562367,US
+3221334271,3221560319,US
+3221560320,3221561087,GB
+3221561088,3221562367,US
3221562368,3221562623,SE
3221562624,3221565951,US
-3221565952,3221566207,SE
-3221566464,3221567743,US
-3221568256,3221568511,FR
+3221565952,3221566207,NL
+3221566208,3221568255,US
+3221568256,3221568511,NL
+3221568512,3221568767,US
3221568768,3221569279,FR
3221569280,3221576191,US
-3221576192,3221576447,KR
+3221576192,3221576447,AU
3221576448,3221577727,US
3221577728,3221577983,CA
-3221577984,3221578239,IT
+3221577984,3221578239,NL
3221578240,3221589503,US
-3221589504,3221589759,FR
+3221589504,3221589759,NL
3221589760,3221590015,US
3221590016,3221590271,CA
-3221590272,3221590527,DE
+3221590272,3221590527,NL
3221590528,3221594623,US
-3221594624,3221594879,AT
+3221594624,3221594879,NL
3221594880,3221605375,US
3221605376,3221605887,CA
3221605888,3221608447,US
-3221608448,3221608703,JP
+3221608448,3221608703,AU
3221608704,3221614335,US
3221614336,3221614591,GB
3221614592,3221614847,AU
-3221615104,3221616269,US
-3221616270,3221616270,AP
-3221616271,3221618175,US
-3221618176,3221618431,GB
+3221614848,3221618175,US
+3221618176,3221618431,NL
+3221618432,3221618687,US
3221618688,3221618943,GB
-3221618944,3221621247,US
-3221621248,3221621503,GB
-3221621504,3221633791,US
+3221618944,3221633791,US
3221633792,3221634047,FR
-3221634048,3221640191,US
-3221640192,3221640447,NL
-3221640448,3221647103,US
+3221634048,3221647103,US
3221647104,3221647359,FR
3221647360,3221656831,US
3221656832,3221657087,AU
-3221657088,3221664255,US
-3221664256,3221664511,EU
-3221664512,3221801983,US
+3221657088,3221795583,US
+3221795584,3221795839,IN
+3221795840,3221801983,US
3221801984,3221802239,IN
3221802240,3221803775,US
3221803776,3221804031,IN
@@ -105687,51 +52811,49 @@
3221806080,3221806335,IN
3221806336,3221806591,US
3221806592,3221806847,IN
-3221806848,3221843967,US
-3221843968,3221844223,EU
-3221844224,3221993727,US
-3221993728,3221993983,EU
-3221993984,3222003967,US
-3222003968,3222004223,AP
-3222004224,3222011903,US
-3222012160,3222012415,GB
-3222012672,3222023423,US
+3221806848,3222011903,US
+3222011904,3222012159,CA
+3222012160,3222012415,NL
+3222012416,3222023935,US
3222023936,3222024191,IT
3222024192,3222025727,US
3222025728,3222025983,NL
-3222026240,3222027775,US
+3222025984,3222027775,US
3222027776,3222028031,CA
3222028032,3222030335,US
-3222030336,3222030847,GB
+3222030336,3222030591,GB
+3222030592,3222030847,NL
3222030848,3222031359,US
3222031360,3222031615,AU
3222031616,3222031871,IT
3222031872,3222032639,US
-3222032640,3222032895,DE
+3222032640,3222032895,NL
3222032896,3222036479,US
3222036480,3222036735,FR
3222036736,3222036991,US
3222036992,3222037247,CA
-3222037248,3222037503,GB
-3222037504,3222044671,US
+3222037248,3222037503,NL
+3222037504,3222039807,US
+3222042368,3222044927,US
3222044928,3222045183,CA
-3222045184,3222055935,US
-3222056192,3222056447,US
+3222045184,3222049791,US
+3222050304,3222056447,US
3222056448,3222059007,CA
3222059008,3222061055,US
3222061056,3222061823,IT
3222061824,3222066943,US
3222066944,3222067199,CA
3222067200,3222067455,US
-3222067456,3222067967,CH
-3222068224,3222071039,US
-3222071040,3222071295,GB
-3222071296,3222071551,PT
+3222067456,3222067967,NL
+3222067968,3222071039,US
+3222071040,3222071551,NL
3222071552,3222072063,US
3222072064,3222072319,SE
3222072320,3222075135,US
-3222075136,3222075391,CH
-3222075392,3222305535,US
+3222075136,3222075391,NL
+3222075392,3222274559,US
+3222274560,3222274815,AU
+3222274816,3222305535,US
3222305536,3222309119,SE
3222309120,3222309375,DE
3222309376,3222313727,SE
@@ -105745,51 +52867,31 @@
3222326528,3222339583,CA
3222339584,3222405375,US
3222405376,3222405631,GB
-3222405632,3222406143,US
-3222406144,3222406399,EU
-3222406400,3222407167,US
-3222407168,3222407423,EU
-3222407424,3222409471,US
-3222409472,3222409727,AP
-3222409728,3222455039,US
-3222455040,3222455295,GB
-3222455296,3222466559,US
-3222466560,3222466815,EU
-3222466816,3222599167,US
-3222599168,3222599423,AP
-3222599424,3222600447,US
-3222600448,3222600703,AP
-3222600704,3222741759,US
-3222741760,3222742015,AP
-3222742016,3222775807,US
-3222775808,3222776063,AP
-3222776064,3222868735,US
-3222868736,3222868991,EU
-3222868992,3222869503,US
-3222869504,3222869759,GB
-3222869760,3222872319,US
+3222405632,3222455039,US
+3222455040,3222455295,NL
+3222455296,3222866431,US
+3222866944,3222867199,US
+3222867712,3222872319,US
3222872320,3222872575,CA
-3222872576,3222874623,US
-3222874624,3222874848,AP
+3222872576,3222874848,US
3222874849,3222874849,MY
-3222874850,3222874879,AP
-3222874880,3222876159,US
-3222876160,3222876415,AP
-3222876416,3222890751,US
+3222874850,3222890751,US
3222890752,3222891007,CA
3222891008,3222936575,US
3222936576,3222940927,CH
3222940928,3222941183,GB
3222941184,3222941695,CH
3222941696,3222952703,US
-3222952704,3222952959,JP
+3222952704,3222952959,AU
3222952960,3222953215,US
-3222953216,3222953727,JP
+3222953216,3222953727,AU
3222953728,3222953983,US
-3222953984,3222954239,JP
-3222954240,3222954495,US
-3222955008,3222956031,US
-3222956032,3222964223,FI
+3222953984,3222954239,AU
+3222954240,3222956287,US
+3222956288,3222957567,FI
+3222957824,3222962431,FI
+3222962432,3222963455,US
+3222963456,3222964223,FI
3222964224,3222968831,US
3222968832,3222973951,NL
3222973952,3222979071,DE
@@ -105797,84 +52899,104 @@
3222983168,3222983935,CA
3222983936,3222984447,US
3222984704,3222988543,AU
-3222988544,3222988799,PT
+3222988544,3222988799,NL
3222988800,3222989055,AU
3222989056,3222989311,US
-3222989312,3222989567,GB
+3222989312,3222989567,NL
3222989568,3222989823,CA
3222989824,3222990079,PT
-3222990080,3222990591,AT
+3222990080,3222990335,NL
+3222990336,3222990591,AT
3222990592,3222990847,PT
-3222990848,3223077119,US
-3223077120,3223077375,EU
-3223077376,3223201791,US
+3222990848,3223201279,US
3223201792,3223202815,PR
-3223202816,3223203071,US
-3223203840,3223214079,US
-3223214848,3223215103,US
+3223202816,3223204863,US
+3223205120,3223205375,US
+3223205888,3223207423,US
+3223207936,3223214079,US
+3223214592,3223215103,US
3223215104,3223215359,AU
-3223215360,3223215871,US
-3223216128,3223227391,US
+3223215360,3223216383,US
+3223216384,3223216639,CA
+3223217152,3223217663,US
+3223218176,3223219711,US
+3223220224,3223222271,US
+3223222784,3223223295,US
+3223223296,3223223551,AI
+3223223552,3223223807,US
+3223224320,3223227391,US
3223227904,3223228159,CA
-3223229184,3223229695,US
+3223228160,3223228415,US
+3223228928,3223229695,US
3223229696,3223229951,CA
3223230464,3223236607,US
3223236608,3223237631,GB
-3223237632,3223243007,US
+3223237632,3223239679,US
+3223240192,3223243263,US
3223243264,3223243519,CA
-3223244288,3223248895,US
+3223243520,3223243775,US
+3223244288,3223245311,US
+3223245824,3223248895,US
3223249408,3223249663,CA
-3223249920,3223250943,US
+3223249664,3223250943,US
3223250944,3223252991,CA
-3223252992,3223258623,US
+3223252992,3223254015,US
+3223254528,3223255551,US
+3223256064,3223258623,US
3223258624,3223258879,CA
3223258880,3223260671,US
3223260672,3223260927,DE
-3223261184,3223262975,US
+3223260928,3223262975,US
3223262976,3223263231,BE
3223263232,3223263743,US
-3223263744,3223263999,GB
-3223264000,3223264255,FR
-3223264256,3223265023,US
-3223265024,3223265279,GB
+3223263744,3223264255,NL
+3223264256,3223264511,US
+3223264512,3223264767,CA
+3223264768,3223265023,US
+3223265024,3223265279,NL
3223265280,3223266559,US
3223266560,3223266815,AU
3223266816,3223267327,US
3223267328,3223267583,BE
-3223267584,3223269631,US
+3223267584,3223269119,US
+3223269376,3223269887,US
3223270400,3223271423,CA
3223271424,3223272447,US
3223272960,3223273215,GB
3223273216,3223283199,US
-3223283200,3223283455,DE
-3223283712,3223286271,US
-3223286272,3223286527,IN
-3223286528,3223286783,US
-3223286784,3223289855,JP
-3223289856,3223299327,US
+3223283200,3223283455,NL
+3223283456,3223286783,US
+3223286784,3223289087,JP
+3223289088,3223289343,US
+3223289856,3223299583,US
3223299584,3223301119,NL
-3223301120,3223303167,US
+3223301120,3223302399,US
+3223302400,3223302655,CA
3223303168,3223303423,CA
3223303424,3223303679,US
-3223304192,3223307519,US
+3223304192,3223305215,US
+3223305728,3223307519,US
3223307520,3223310079,JP
3223310080,3223310335,US
-3223310592,3223311103,US
-3223311104,3223311359,FR
+3223310848,3223311103,US
+3223311104,3223311359,NL
3223311360,3223314431,US
-3223314432,3223314687,CA
3223314688,3223315455,US
+3223315456,3223315711,CA
3223315712,3223316223,US
3223316224,3223316479,NL
-3223316480,3223321599,US
+3223316480,3223319039,US
+3223319552,3223321343,US
+3223321344,3223321599,CA
3223321600,3223321855,FR
-3223321856,3223322367,US
-3223322624,3223390719,US
-3223390720,3223390975,ZA
-3223391232,3223391999,US
-3223392000,3223392255,FR
-3223392256,3223392511,GB
-3223393024,3223397375,US
+3223321856,3223388159,US
+3223388672,3223390719,US
+3223390720,3223390975,MU
+3223390976,3223391999,US
+3223392000,3223392511,NL
+3223392512,3223392767,US
+3223393024,3223393791,US
+3223394304,3223397375,US
3223397376,3223397631,NL
3223397632,3223410431,US
3223410432,3223416831,CH
@@ -105883,76 +53005,93 @@
3223417600,3223418367,US
3223418368,3223420927,CH
3223420928,3223421439,US
-3223421440,3223421695,GB
-3223421696,3223421951,NL
+3223421440,3223421951,NL
3223422464,3223422719,US
-3223422720,3223422975,JP
+3223422720,3223422975,AU
3223422976,3223424767,US
-3223424768,3223432191,FR
-3223432192,3223433215,A2
+3223424768,3223425535,NL
+3223425536,3223425791,US
+3223425792,3223430911,FR
+3223430912,3223431423,US
+3223431424,3223432191,FR
+3223432192,3223433215,US
3223433216,3223435007,FR
3223435008,3223437311,US
3223437312,3223447551,CH
3223447552,3223447807,US
3223447808,3223448063,NL
3223448064,3223449087,US
-3223449088,3223449599,EU
-3223449600,3223452671,US
-3223452928,3223453183,US
-3223453184,3223453439,DE
-3223453696,3223457791,US
-3223458560,3223458815,GB
-3223458816,3223461887,US
-3223462656,3223462911,US
+3223449088,3223449343,NL
+3223449344,3223453183,US
+3223453184,3223453439,NL
+3223453440,3223457791,US
+3223458304,3223458559,US
+3223458560,3223458815,NL
+3223458816,3223460351,US
+3223460864,3223461887,US
+3223462400,3223462911,US
3223462912,3223463935,CA
3223463936,3223465983,US
-3223466496,3223466751,GB
+3223466496,3223466751,NL
+3223466752,3223467007,US
3223467008,3223468031,CA
3223468032,3223471103,US
3223471616,3223471871,CA
-3223471872,3223472383,US
-3223473152,3223474175,CA
+3223471872,3223472639,US
+3223473152,3223473215,CA
+3223473216,3223473231,US
+3223473232,3223474175,CA
3223474176,3223476223,US
3223476736,3223476991,US
3223477248,3223478271,CA
3223478272,3223480319,US
+3223480832,3223481087,US
3223481088,3223481343,SE
3223481344,3223483391,US
3223483392,3223483647,NL
-3223484416,3223498751,US
+3223483648,3223483903,US
+3223484416,3223490559,US
+3223490816,3223491071,US
+3223491584,3223497215,US
+3223497728,3223498751,US
+3223499264,3223499519,US
3223499520,3223499775,FI
-3223499776,3223504895,CA
+3223499776,3223500031,US
+3223500032,3223503871,CA
+3223504384,3223504639,US
+3223504640,3223504895,CA
3223504896,3223508991,US
3223508992,3223513087,CA
-3223513088,3223519231,US
-3223519232,3223523583,DE
-3223523584,3223523615,EU
-3223523616,3223524351,DE
+3223513088,3223516415,US
+3223516672,3223519231,US
+3223519232,3223524351,DE
3223524352,3223528233,US
3223528234,3223528234,GB
3223528235,3223534335,US
3223534336,3223534591,AU
-3223534592,3223534847,US
-3223535104,3223535359,US
+3223534592,3223535359,US
3223535360,3223537919,DE
-3223537920,3223542271,US
-3223542272,3223542527,DE
+3223537920,3223540991,US
+3223541248,3223542271,US
+3223542272,3223542527,NL
3223542528,3223543295,US
-3223543296,3223543551,GB
-3223543552,3223546879,US
-3223546880,3223547135,GB
+3223543296,3223543551,NL
+3223543552,3223545855,US
+3223546112,3223546879,US
+3223546880,3223547135,NL
3223547136,3223552511,US
3223552512,3223553535,NL
3223553536,3223554559,US
3223554560,3223554815,GB
-3223555072,3223556095,US
+3223555328,3223556095,US
3223556096,3223556351,CA
3223556352,3223556607,US
-3223556608,3223556863,IT
+3223556608,3223556863,NL
3223556864,3223557375,US
3223557376,3223558655,DE
-3223558656,3223563263,US
-3223563264,3223563519,GB
+3223558656,3223559423,US
+3223559936,3223563263,US
+3223563264,3223563519,NL
3223563520,3223565567,US
3223565824,3223566079,US
3223566080,3223568639,NL
@@ -105966,8 +53105,7 @@
3223578112,3223580671,US
3223580672,3223581951,AT
3223581952,3223582207,US
-3223582208,3223582463,PT
-3223582464,3223582719,NL
+3223582208,3223582719,NL
3223582720,3223582975,AU
3223583488,3223584767,US
3223584768,3223585023,GB
@@ -105977,7 +53115,11 @@
3223586304,3223586559,GB
3223586560,3223589119,SE
3223589120,3223589375,US
-3223589376,3223601663,SE
+3223589376,3223594495,SE
+3223594496,3223595007,AT
+3223595008,3223599103,SE
+3223599104,3223599615,AT
+3223599616,3223601663,SE
3223601664,3223602175,GB
3223602176,3223606527,SE
3223606528,3223606783,GB
@@ -106022,11 +53164,12 @@
3223650048,3223650303,GB
3223650304,3223715839,CH
3223715840,3223781375,DK
-3223781376,3223823871,US
-3223823872,3223824127,AT
-3223824128,3223855103,US
+3223781376,3223847935,US
+3223848704,3223855103,US
3223855104,3223857151,CA
-3223857152,3223863295,US
+3223857152,3223859455,US
+3223859968,3223862271,US
+3223862528,3223862783,US
3223863552,3223863807,US
3223864576,3223864831,AE
3223864832,3223865343,HR
@@ -106035,9 +53178,14 @@
3223868416,3223869439,BM
3223869440,3223871487,US
3223871488,3223873535,CA
-3223873536,3223881727,US
+3223873536,3223874559,US
+3223874816,3223875071,US
+3223875584,3223876863,US
+3223877632,3223881727,US
3223881728,3223882751,CA
-3223883520,3223902207,US
+3223883520,3223898111,US
+3223898368,3223898623,US
+3223899136,3223902207,US
3223902464,3223902719,CA
3223903232,3223905279,US
3223905280,3223905535,FI
@@ -106055,7 +53203,7 @@
3223950336,3223950591,CA
3223950592,3223953663,CH
3223953664,3223955967,US
-3223955968,3223956223,TH
+3223955968,3223956223,AU
3223956224,3223957759,US
3223958016,3223963135,JP
3223963136,3223963647,US
@@ -106063,67 +53211,76 @@
3223964160,3223964415,US
3223964416,3223964671,AU
3223964672,3223965183,US
-3223965184,3223965439,ID
+3223965184,3223965439,AU
3223965440,3223966207,US
-3223966208,3223966463,GB
+3223966208,3223966463,NL
3223966464,3223967743,US
-3223967744,3223967999,FR
+3223967744,3223967999,NL
3223968000,3223968255,US
-3223968256,3223968511,IT
+3223968256,3223968511,NL
3223968512,3223970303,US
3223970560,3223970815,DE
-3223970816,3223977983,US
-3223978240,3223978495,DE
+3223971072,3223977983,US
+3223978240,3223978495,NL
3223978752,3223979263,US
3223979264,3223979775,CA
3223979776,3223988735,US
3223988736,3223990271,CH
3223990272,3223991295,US
-3223991552,3223991807,GB
+3223991296,3223991551,AU
+3223991552,3223991807,NL
3223991808,3223992063,CA
3223992064,3223993343,US
3223993344,3223994111,AU
3223994112,3223994623,DE
-3223994624,3223994879,NO
3223994880,3223995391,US
3223995392,3223995647,CA
3223995648,3223996159,US
3223996416,3223999487,US
-3224000256,3224000511,GB
+3224000256,3224000511,NL
3224000512,3224001023,US
3224001024,3224001279,CA
3224001280,3224002559,US
3224002816,3224003327,US
3224003328,3224003583,ZA
-3224003584,3224003839,GB
+3224003584,3224003839,NL
3224003840,3224004095,US
-3224004096,3224004351,FR
+3224004096,3224004351,NL
3224004352,3224005631,JP
3224005632,3224006655,US
-3224006656,3224012031,NL
+3224006912,3224012031,NL
3224012032,3224014591,US
-3224014592,3224014847,DE
-3224014848,3224016639,US
+3224014592,3224014847,NL
+3224014848,3224015615,US
+3224015872,3224016639,US
3224016640,3224016895,AU
-3224016896,3224023039,US
-3224023808,3224024063,US
+3224016896,3224017663,US
+3224017920,3224024063,US
3224024064,3224029695,CH
3224029696,3224030463,CA
3224030720,3224030975,CA
3224030976,3224038655,US
-3224038656,3224038911,JP
-3224038912,3224042751,US
+3224038656,3224038911,AU
+3224038912,3224039679,US
+3224039936,3224040959,US
+3224041216,3224042751,US
3224042752,3224043007,DE
3224043008,3224043263,US
3224043520,3224084991,US
3224084992,3224087551,SE
-3224087552,3224090879,US
+3224087552,3224088063,US
+3224088064,3224088319,AU
+3224088320,3224090879,US
3224090880,3224091135,AU
-3224091648,3224092671,US
+3224091648,3224091903,US
+3224091904,3224092159,AU
+3224092416,3224092671,US
3224092672,3224093951,CH
3224093952,3224094207,US
3224094208,3224094463,AU
-3224094464,3224096255,US
+3224094464,3224094975,US
+3224094976,3224095487,AU
+3224095488,3224096255,US
3224096512,3224097279,AU
3224097280,3224097535,NL
3224097536,3224097791,US
@@ -106134,19 +53291,20 @@
3224099840,3224100863,US
3224101120,3224101375,US
3224101376,3224102399,AU
-3224103424,3224103679,GB
+3224103424,3224103679,NL
3224103680,3224104447,US
3224104704,3224104959,AU
-3224104960,3224109055,US
-3224109056,3224119551,DE
+3224104960,3224105471,US
+3224105728,3224106495,US
+3224106752,3224108799,US
+3224109056,3224109311,NL
+3224109312,3224119551,DE
3224119552,3224129791,FR
3224129792,3224132351,DE
3224132352,3224170495,US
3224170496,3224173567,SE
-3224173568,3224258047,US
-3224258048,3224258303,FI
-3224258304,3224258559,BE
-3224258560,3224288255,US
+3224173568,3224174335,US
+3224174592,3224288255,US
3224288256,3224289023,DE
3224289024,3224302335,US
3224302336,3224302591,CA
@@ -106156,11 +53314,10 @@
3224368128,3224369663,CH
3224369664,3224373247,US
3224373248,3224373503,AU
-3224373504,3224373759,US
-3224373760,3224374015,AU
-3224374016,3224379135,US
-3224379136,3224379391,DE
-3224379392,3224398079,US
+3224373504,3224379135,US
+3224379136,3224379391,NL
+3224379392,3224392191,US
+3224392704,3224398079,US
3224398336,3224398591,US
3224398592,3224398847,DE
3224398848,3224399103,US
@@ -106168,17 +53325,22 @@
3224399616,3224407039,US
3224407296,3224407551,CA
3224407808,3224408319,US
-3224408320,3224408575,DE
-3224408576,3224428543,US
-3224428544,3224428799,DE
+3224408320,3224408575,NL
+3224408576,3224424959,US
+3224425216,3224427007,US
+3224427520,3224428543,US
+3224428544,3224428799,NL
3224428800,3224430079,US
-3224430336,3224430591,DE
+3224430336,3224430591,NL
3224430592,3224430847,US
3224431104,3224431359,CA
3224431360,3224431615,US
3224432128,3224432383,US
-3224432640,3224435967,US
-3224435968,3224436223,ZA
+3224433152,3224433407,US
+3224433664,3224434687,US
+3224434688,3224434943,AU
+3224434944,3224435967,US
+3224435968,3224436223,MU
3224436224,3224436479,US
3224436736,3224502271,FI
3224502272,3224567807,JP
@@ -106189,7 +53351,8 @@
3224651776,3224652287,AU
3224652800,3224660991,US
3224660992,3224661247,CA
-3224661504,3224664063,US
+3224661504,3224662527,US
+3224663040,3224663551,US
3224672000,3224672255,US
3224672256,3224672511,NL
3224672512,3224673791,US
@@ -106198,30 +53361,37 @@
3224675072,3224675839,US
3224676864,3224677119,US
3224677120,3224678655,AU
-3224678656,3224689919,US
+3224678656,3224680703,US
+3224680704,3224680959,AU
+3224680960,3224683519,US
+3224683520,3224684031,AU
+3224684032,3224689919,US
3224689920,3224690687,NL
-3224690688,3224692735,US
-3224692736,3224692991,DZ
+3224690688,3224691455,US
+3224691712,3224692735,US
+3224692736,3224692991,NL
3224692992,3224694527,US
3224694528,3224694783,CA
-3224694784,3224697343,US
+3224694784,3224695039,US
+3224695808,3224697343,US
3224697856,3224698111,US
-3224698112,3224698367,GB
-3224698368,3224698623,FR
+3224698112,3224698623,NL
3224698880,3224699135,US
3224699136,3224699647,BE
3224699648,3224725247,US
3224725248,3224725503,DE
-3224725504,3224725759,CH
+3224725504,3224725759,NL
3224725760,3224739071,US
3224739072,3224739327,FI
3224739328,3224772351,US
-3224772352,3224785151,DE
-3224785152,3224791039,US
-3224791040,3224791295,DE
+3224772352,3224778751,DE
+3224779776,3224785151,DE
+3224785152,3224787967,US
+3224788480,3224791039,US
+3224791040,3224791295,NL
3224791296,3224791807,AU
3224791808,3224793343,US
-3224793344,3224793599,DE
+3224793344,3224793599,NL
3224793600,3224793855,US
3224793856,3224795391,DK
3224795392,3224795647,CA
@@ -106229,46 +53399,44 @@
3224796160,3224796415,US
3224796416,3224797439,DE
3224797440,3224797695,US
-3224797696,3224797951,NZ
+3224797696,3224797951,AU
3224797952,3224798207,US
-3224798208,3224798463,CH
+3224798208,3224798463,NL
3224798464,3224798975,US
3224798976,3224799231,AU
+3224799488,3224799743,AU
3224799744,3224799999,US
-3224800000,3224800255,DE
-3224800256,3224816639,FR
+3224800000,3224800255,NL
+3224800512,3224816639,FR
3224816640,3224816895,IL
3224816896,3224820735,FR
3224820736,3224820991,PL
3224820992,3224821247,DE
3224821248,3224822015,US
-3224822016,3224822271,SE
+3224822016,3224822271,NL
3224822272,3224822527,US
-3224822784,3224826367,US
-3224826368,3224826531,CA
-3224826532,3224826535,CA
-3224826536,3224826623,CA
+3224822784,3224823039,US
+3224823296,3224826367,US
+3224826368,3224826623,CA
3224826624,3224826879,US
-3224827136,3224827391,GB
+3224826880,3224827391,NL
3224827392,3224827647,US
+3224827648,3224827903,AU
3224827904,3224828671,US
3224828672,3224828927,AU
3224829184,3224829439,US
-3224829440,3224829695,DE
-3224829952,3224833535,US
-3224833536,3224833791,SG
-3224833792,3224834047,US
+3224829440,3224829695,NL
+3224829952,3224834047,US
3224834048,3224834303,SG
3224834304,3224834559,US
3224834560,3224834815,TH
-3224834816,3224839423,US
-3224839424,3224839679,EU
-3224839680,3224850175,US
+3224834816,3224850175,US
3224850176,3224850431,IN
-3224850432,3224851455,US
-3224851456,3224851711,DE
+3224850432,3224850943,US
+3224851200,3224851455,US
+3224851456,3224851711,NL
3224851968,3224852735,US
-3224852736,3224852991,DE
+3224852736,3224852991,NL
3224852992,3224854527,US
3224854784,3224855039,US
3224855040,3224855551,AU
@@ -106278,55 +53446,54 @@
3224856832,3224857087,NL
3224857088,3224857855,US
3224857856,3224858111,PL
+3224858112,3224858367,AU
3224858368,3224858623,US
3224858624,3224858879,AU
3224858880,3224859391,US
3224859392,3224859647,NL
3224859648,3224860159,US
-3224860160,3224860415,JP
-3224860672,3224862719,US
+3224860160,3224860415,AU
+3224860928,3224862719,US
3224862976,3224863231,NL
3224863488,3224863743,US
-3224863744,3224863999,GB
-3224864000,3224870143,US
-3224870144,3224870399,EU
-3224870400,3224870655,US
+3224863744,3224863999,NL
+3224864000,3224870655,US
3224870656,3224870911,IT
3224870912,3224878079,US
-3224878080,3224878335,DE
+3224878080,3224878335,NL
3224878336,3224878591,US
3224878592,3224878847,AU
-3224879360,3224879615,GB
+3224879360,3224879615,NL
3224879616,3224879871,CA
3224879872,3224880383,US
-3224880384,3224880639,DE
+3224880384,3224880639,NL
3224880640,3224880895,AU
3224880896,3224882431,US
3224882688,3224882943,CA
-3224882944,3224884223,US
-3224884224,3224884479,GB
+3224882944,3224883455,US
+3224883456,3224883711,AU
+3224883712,3224884223,US
+3224884224,3224884479,NL
3224884480,3224884991,US
3224885248,3224885503,CA
3224885760,3224886015,US
-3224886016,3224886271,AU
-3224886272,3224886527,JP
+3224886016,3224886527,AU
3224886528,3224887295,US
3224887296,3224887551,CA
-3224887808,3224889343,US
+3224887808,3224889087,US
3224889344,3224889599,AU
-3224889600,3224891647,US
+3224889600,3224890879,US
+3224890880,3224891135,AU
+3224891136,3224891647,US
3224892160,3224892415,CA
-3224892416,3224892671,DE
+3224892416,3224892671,NL
3224892928,3224893183,US
-3224893440,3224899071,US
+3224893440,3224893951,US
+3224894464,3224899071,US
3224899072,3224899327,AT
3224899328,3224908543,US
3224908544,3224908799,CA
-3224908800,3224921087,US
-3224921088,3224921343,FI
-3224921344,3224928255,US
-3224928256,3224928511,FI
-3224928512,3224933887,US
+3224908800,3224933887,US
3224933888,3224934143,DE
3224934144,3224957951,US
3224957952,3224958207,CA
@@ -106339,48 +53506,51 @@
3225034752,3225035775,BG
3225035776,3225037055,US
3225037056,3225049599,FI
-3225050112,3225057535,US
+3225050112,3225051135,US
+3225052672,3225056767,US
+3225057024,3225057535,US
3225057536,3225057791,CA
3225057792,3225060351,US
3225060352,3225061631,AU
3225062400,3225063423,VC
-3225063424,3225075967,US
+3225063424,3225064447,US
+3225064704,3225075967,US
3225076224,3225076479,CA
3225076480,3225076991,US
3225076992,3225077247,SE
3225077504,3225081087,US
3225081088,3225081343,CA
3225081600,3225082367,US
-3225082368,3225082623,IT
+3225082368,3225082623,NL
3225082880,3225084671,US
3225084672,3225085183,NL
3225085184,3225085439,ES
3225085440,3225089279,US
3225089280,3225089535,CA
-3225089536,3225090047,US
-3225090048,3225090303,AP
-3225090304,3225091071,US
+3225089536,3225091071,US
3225091584,3225091839,US
3225092096,3225314303,US
3225314304,3225314559,GB
3225314560,3225419775,US
3225420032,3225420287,US
-3225420800,3225422079,CA
-3225422080,3225422095,AE
-3225422096,3225423871,CA
-3225423872,3225426943,US
-3225426944,3225427199,AT
+3225420800,3225423871,CA
+3225423872,3225424383,US
+3225424896,3225426943,US
+3225426944,3225427199,NL
3225427968,3225428991,US
3225429504,3225429759,CA
3225430016,3225431039,CA
-3225431040,3225431551,RU
+3225431040,3225431551,NL
3225431552,3225434111,US
3225434112,3225436159,CA
-3225436160,3225444607,US
+3225436160,3225437695,US
+3225438208,3225442559,US
+3225443328,3225444607,US
3225445376,3225446399,BE
3225446400,3225450495,US
-3225450496,3225451519,AG
-3225451776,3225452031,SE
+3225450496,3225451263,AG
+3225451264,3225451519,MS
+3225451776,3225452031,NL
3225452544,3225456639,CA
3225456640,3225459711,US
3225459968,3225460479,US
@@ -106388,21 +53558,21 @@
3225462784,3225468927,US
3225468928,3225469951,CA
3225470464,3225470719,US
-3225471488,3225471743,DE
+3225471488,3225471743,NL
3225471744,3225472511,US
3225473024,3225498111,US
3225498368,3225503487,NL
-3225503488,3225506047,US
+3225503488,3225505535,US
+3225505792,3225506047,US
3225506304,3225508863,AU
3225508864,3225509631,CH
3225509632,3225509887,US
3225509888,3225510143,NL
3225510144,3225518591,US
3225518592,3225518847,AU
-3225518848,3225519103,IT
-3225519104,3225519359,GB
+3225518848,3225519359,NL
3225519872,3225520639,US
-3225520896,3225521151,DE
+3225520896,3225521151,NL
3225521152,3225522175,US
3225522176,3225522943,GB
3225522944,3225524223,US
@@ -106410,7 +53580,8 @@
3225524480,3225524735,GB
3225525248,3225526271,US
3225526272,3225528319,BB
-3225528320,3225530367,US
+3225529088,3225529343,US
+3225529600,3225530367,US
3225530368,3225530623,PR
3225530624,3225530879,US
3225531136,3225531647,US
@@ -106421,10 +53592,14 @@
3225541120,3225541375,US
3225541376,3225544703,GB
3225544704,3225546751,CA
-3225546752,3225550847,US
+3225546752,3225548543,US
+3225548800,3225549055,AU
+3225549056,3225549311,US
+3225549312,3225549567,AU
+3225549568,3225550591,US
3225550848,3225616383,DK
-3225617152,3225617407,IE
-3225617408,3225617663,GB
+3225616640,3225616895,AU
+3225617152,3225617663,NL
3225617920,3225618175,US
3225618432,3225618687,US
3225618688,3225618943,CA
@@ -106434,55 +53609,62 @@
3225624576,3225625599,CA
3225626368,3225626623,GB
3225626880,3225627391,US
-3225627392,3225627647,GB
+3225627392,3225627647,NL
3225627648,3225627903,US
3225627904,3225628159,CA
3225628160,3225628415,US
-3225628416,3225628671,GB
+3225628416,3225628671,NL
3225628672,3225629183,US
-3225629184,3225629439,GB
+3225629184,3225629439,NL
3225629440,3225629695,US
-3225629696,3225629951,GB
+3225629696,3225629951,NL
3225629952,3225630207,US
-3225630464,3225630719,DE
+3225630464,3225630719,NL
3225630720,3225631231,US
-3225631232,3225631487,SE
-3225631488,3225635839,US
-3225635840,3225636095,PT
+3225631232,3225631487,NL
+3225631488,3225632767,US
+3225633536,3225633791,US
+3225634048,3225634815,US
+3225635072,3225635583,US
+3225635840,3225636095,NL
3225636096,3225636607,US
-3225636608,3225636863,ES
+3225636608,3225636863,NL
3225636864,3225637887,US
-3225637888,3225638143,AU
+3225637888,3225638399,AU
3225638400,3225638655,US
3225638656,3225638911,GB
3225639424,3225640447,US
-3225640448,3225640703,GB
+3225640448,3225640703,NL
3225640704,3225641983,US
3225641984,3225643263,GB
3225643264,3225643775,CA
-3225643776,3225650943,US
+3225643776,3225649919,US
+3225650176,3225650943,US
3225650944,3225651199,GB
3225651200,3225658367,US
-3225658624,3225659135,US
+3225658624,3225658879,US
3225659136,3225659391,DE
+3225659392,3225659647,AU
3225659904,3225660159,DE
3225660160,3225660415,AU
3225660416,3225664511,US
3225664512,3225669887,DE
3225669888,3225671935,US
-3225672192,3225672447,DE
+3225671936,3225672191,AU
+3225672192,3225672447,NL
3225672448,3225672703,US
3225672704,3225673215,NL
3225673472,3225673727,IE
3225673728,3225679871,US
3225679872,3225680127,AU
3225680128,3225680383,GR
-3225680640,3225681919,US
+3225680640,3225681151,US
+3225681408,3225681663,US
3225681920,3225682943,DE
3225682944,3225683199,AT
3225683200,3225687039,DE
3225687040,3225687807,US
-3225687808,3225688063,GB
+3225687808,3225688063,NL
3225688064,3225689343,US
3225689600,3225689855,US
3225689856,3225694975,NL
@@ -106492,30 +53674,36 @@
3225701120,3225701375,US
3225701376,3225709567,NO
3225709568,3225710079,US
-3225710592,3225714687,US
+3225710080,3225710591,AU
+3225710592,3225711615,US
+3225712128,3225715455,US
3225715456,3225715711,CA
3225715712,3225715967,AU
3225715968,3225716991,US
3225716992,3225717247,CA
-3225717248,3225717503,TN
+3225717248,3225717503,MU
+3225717504,3225717759,AU
3225717760,3225720063,US
3225720576,3225721343,GB
-3225721344,3225723903,US
+3225721344,3225722111,US
+3225722624,3225723903,US
3225723904,3225725439,DE
3225725440,3225725695,GB
3225725696,3225726207,AU
3225726208,3225726463,US
-3225726464,3225726719,GB
+3225726464,3225726719,NL
3225726720,3225726975,US
-3225726976,3225727231,IT
+3225726976,3225727231,NL
3225727232,3225727487,US
+3225727744,3225727999,AU
3225728000,3225728511,US
3225728512,3225728767,NL
3225728768,3225729023,US
3225729024,3225729279,CA
3225729280,3225729535,US
-3225729536,3225729791,PT
-3225729792,3225735167,US
+3225729536,3225729791,NL
+3225729792,3225733887,US
+3225734144,3225735167,US
3225735424,3225735679,PT
3225735680,3225735935,US
3225735936,3225737215,DE
@@ -106531,8 +53719,11 @@
3225742080,3225745919,JP
3225745920,3225746687,NL
3225746688,3225746943,US
-3225746944,3225747199,DE
-3225747456,3225757695,US
+3225746944,3225747199,NL
+3225747456,3225747711,US
+3225748480,3225752575,US
+3225752832,3225753087,US
+3225753600,3225757695,US
3225757696,3225758719,CA
3225759232,3225759487,US
3225759744,3225763839,US
@@ -106548,19 +53739,21 @@
3225781248,3225782271,CA
3225782272,3225785343,US
3225785344,3225788415,CA
-3225788416,3225806847,US
+3225788416,3225795583,US
+3225796096,3225796351,US
+3225796608,3225806847,US
3225807360,3225807615,DE
-3225807872,3225812991,US
-3225812992,3225827071,FR
-3225827072,3225827327,US
-3225827328,3225843711,FR
+3225807872,3225809919,US
+3225810688,3225812991,US
+3225812992,3225843711,FR
3225843712,3225847039,US
-3225847040,3225847551,TR
+3225847040,3225847551,NL
3225847552,3225847807,AU
-3225847808,3225848063,IT
+3225847808,3225848063,NL
3225848064,3225848831,US
3225848832,3225853951,DE
-3225853952,3225857023,US
+3225853952,3225854719,US
+3225854976,3225857023,US
3225857024,3225857279,CA
3225857280,3225857535,US
3225857536,3225857791,AU
@@ -106568,7 +53761,8 @@
3225858048,3225858559,CA
3225858560,3225858815,US
3225858816,3225859583,JP
-3225860096,3225868287,US
+3225860096,3225861887,US
+3225862144,3225868287,US
3225868288,3225868543,AU
3225868544,3225869055,US
3225869056,3225869311,AU
@@ -106579,28 +53773,22 @@
3225873920,3225874943,US
3225874944,3225875199,GB
3225875456,3225875967,US
-3225876480,3225878527,US
-3225878528,3225880319,SE
-3225880320,3225880575,US
-3225880576,3225881343,SE
+3225876480,3225878271,US
+3225878528,3225881343,SE
3225881344,3225881599,IT
-3225881600,3225886719,SE
-3225886720,3225886975,NO
-3225886976,3225887231,SE
-3225887232,3225887487,DK
-3225887488,3225887999,SE
+3225881600,3225885183,SE
+3225885184,3225885695,AT
+3225885696,3225887999,SE
3225888000,3225888255,GB
-3225888256,3225892351,SE
-3225892352,3225892863,FR
-3225892864,3225894399,SE
-3225894400,3225895423,GB
-3225895424,3225905407,SE
+3225888256,3225905407,SE
3225905408,3225905663,IT
3225905664,3225913855,SE
3225913856,3225914111,DE
3225914112,3225915135,SE
3225915136,3225915391,DK
-3225915392,3225918463,SE
+3225915392,3225917183,SE
+3225917184,3225917439,NL
+3225917440,3225918463,SE
3225918464,3225918719,GB
3225918720,3225920767,SE
3225920768,3225921023,GB
@@ -106613,11 +53801,11 @@
3225924096,3225930239,SE
3225930240,3225930495,FR
3225930496,3225932543,SE
-3225932544,3225932799,AT
+3225932544,3225932799,IM
3225932800,3225933055,IT
-3225933056,3225933311,AT
+3225933056,3225933311,ES
3225933312,3225934335,SE
-3225934336,3225934591,AT
+3225934336,3225934591,IS
3225934592,3225935359,SE
3225935360,3225935615,US
3225935616,3225936639,SE
@@ -106630,113 +53818,56 @@
3225938688,3225940991,SE
3225940992,3225941247,IL
3225941248,3225941503,IT
-3225941504,3225942038,SE
-3225942039,3225942039,EU
-3225942040,3225942271,SE
+3225941504,3225942271,SE
3225942272,3225942527,HU
3225942528,3225944063,SE
3225944064,3226008831,TW
3226008832,3226009343,US
-3226009600,3226010879,US
+3226009856,3226010879,US
3226010880,3226011135,CA
3226011136,3226012671,US
3226012672,3226012927,AU
3226012928,3226014207,US
-3226014464,3226014975,GB
-3226014976,3226015231,NZ
-3226015232,3226015487,AU
-3226015744,3226016255,ID
+3226014464,3226014975,NL
+3226014976,3226015487,AU
+3226015744,3226016255,AU
3226016256,3226018303,US
3226018304,3226018559,DE
3226018560,3226021119,CH
-3226021120,3226026495,US
+3226021376,3226023423,US
+3226023680,3226026495,US
3226026496,3226026751,AU
-3226026752,3226067455,US
+3226026752,3226064383,US
+3226064640,3226067455,US
3226067456,3226067711,BE
3226067712,3226068223,US
-3226068224,3226068479,GB
-3226068480,3226109951,US
+3226068224,3226068479,NL
+3226068480,3226074879,US
+3226074880,3226075135,AT
+3226075136,3226109951,US
3226110208,3226110719,US
3226110720,3226128639,AU
-3226128640,3226132527,US
-3226132528,3226132543,CN
-3226132544,3226132575,US
-3226132576,3226132607,CN
-3226132608,3226132623,US
-3226132624,3226132711,CN
-3226132712,3226132735,US
-3226132736,3226133183,CN
-3226133184,3226133247,US
-3226133248,3226133743,CN
-3226133744,3226133751,US
-3226133752,3226134279,CN
-3226134280,3226134287,US
-3226134288,3226134415,CN
-3226134416,3226134527,US
-3226134528,3226134719,CN
-3226134720,3226134783,US
-3226134784,3226135231,CN
-3226135232,3226135239,CA
-3226135240,3226135263,CN
-3226135264,3226135271,US
-3226135272,3226135279,CN
-3226135280,3226135295,US
-3226135296,3226135367,CN
-3226135368,3226135375,US
-3226135376,3226135615,CN
-3226135616,3226135631,US
-3226135632,3226135871,CN
-3226135872,3226135935,US
-3226135936,3226136207,CN
-3226136208,3226136215,US
-3226136216,3226136263,CN
-3226136264,3226136271,US
-3226136272,3226136287,CN
-3226136288,3226136295,US
-3226136296,3226136479,CN
-3226136480,3226136487,US
-3226136488,3226136575,CN
-3226136576,3226136607,US
-3226136608,3226136807,CN
-3226136808,3226136815,US
-3226136816,3226136991,CN
-3226136992,3226136999,US
-3226137000,3226137215,CN
-3226137216,3226137223,US
-3226137224,3226137279,CN
-3226137280,3226137343,US
-3226137344,3226137695,CN
-3226137696,3226137703,US
-3226137704,3226137711,CN
-3226137712,3226137855,US
-3226137856,3226137951,CN
-3226137952,3226138111,US
-3226138112,3226138175,CN
-3226138176,3226138183,US
-3226138184,3226138367,CN
-3226138368,3226138623,US
-3226138624,3226138911,CN
-3226138912,3226139007,US
-3226139008,3226139167,CN
-3226139168,3226139183,US
-3226139184,3226139271,CN
-3226139272,3226139327,US
-3226139328,3226139391,CN
-3226139392,3226139647,US
-3226139648,3226139671,CN
-3226139672,3226139711,US
-3226139712,3226139839,CN
-3226139840,3226139903,US
-3226139904,3226140287,CN
-3226140288,3226140415,US
-3226140416,3226140671,CN
-3226140672,3226157567,CA
+3226128640,3226140671,US
+3226140928,3226141695,CA
+3226141696,3226141951,US
+3226141952,3226143487,CA
+3226143744,3226156543,CA
+3226156800,3226157567,CA
3226157568,3226157823,US
-3226157824,3226177535,CA
+3226157824,3226167807,CA
+3226168064,3226175487,CA
+3226175744,3226175999,US
+3226176000,3226177535,CA
3226177536,3226178559,US
-3226178560,3226189823,CA
-3226189824,3226191871,US
-3226191872,3226201087,CA
+3226178560,3226188543,CA
+3226189056,3226189311,CA
+3226189568,3226189823,CA
+3226189824,3226190847,US
+3226191360,3226191615,US
+3226191872,3226194175,CA
+3226194432,3226194687,CA
+3226194944,3226201087,CA
+3226201088,3226201343,US
3226201344,3226201855,CA
3226201856,3226202111,US
3226202112,3226205439,CA
@@ -106744,7 +53875,7 @@
3226205696,3226205951,CA
3226206208,3226207231,US
3226207744,3226215423,GB
-3226215424,3226236927,US
+3226215424,3226236159,US
3226237184,3226237439,US
3226237440,3226237695,AU
3226237696,3226241535,DE
@@ -106752,28 +53883,35 @@
3226241792,3226250495,DE
3226250496,3226251263,US
3226251264,3226251519,DE
-3226251520,3226267903,US
+3226251520,3226252287,US
+3226252544,3226267903,US
3226267904,3226268159,DE
3226268160,3226268415,PT
3226268416,3226268927,AT
3226268928,3226269951,DE
3226269952,3226270719,US
3226271744,3226273791,US
+3226273792,3226274047,AU
3226274048,3226274559,US
-3226274560,3226274815,CH
-3226274816,3226283519,US
+3226274560,3226274815,NL
+3226274816,3226276095,US
+3226276096,3226276351,AU
+3226276352,3226276863,US
+3226277632,3226283519,US
3226283520,3226291199,CA
-3226291200,3226300927,US
+3226291200,3226300159,US
+3226300416,3226300927,US
3226300928,3226301439,DE
3226301440,3226302463,US
3226302464,3226303487,FI
3226303488,3226305535,US
3226305536,3226307327,GB
3226307328,3226307583,US
-3226307584,3226308095,ES
-3226308096,3226365439,US
-3226365440,3226365951,DE
-3226365952,3226366975,US
+3226307584,3226308095,NL
+3226308096,3226317823,US
+3226318080,3226318335,US
+3226319360,3226319615,US
+3226319872,3226366975,US
3226366976,3226367231,CA
3226367232,3226374143,US
3226374144,3226375423,DE
@@ -106785,57 +53923,77 @@
3226393600,3226393855,DE
3226393856,3226397695,US
3226397696,3226400255,DE
-3226400256,3226473471,US
-3226473472,3226473983,PT
+3226400256,3226470399,US
+3226470656,3226473471,US
+3226473472,3226473727,NL
+3226473728,3226473983,PT
3226473984,3226474495,US
3226474496,3226474751,CL
3226475264,3226475519,US
3226475776,3226476287,US
3226476288,3226479359,CH
3226479360,3226479871,US
-3226480128,3226480383,GB
+3226480128,3226480383,NL
3226480384,3226481407,US
-3226481408,3226481663,DE
-3226481664,3226521855,US
+3226481408,3226481663,NL
+3226481664,3226483199,US
+3226483968,3226484479,US
+3226484736,3226488831,US
+3226489088,3226520575,US
+3226521344,3226521855,US
3226521856,3226522111,BR
-3226522112,3226536191,US
+3226522112,3226523135,US
+3226523392,3226536191,US
3226536960,3226542079,CA
3226542080,3226546431,US
3226547200,3226548223,CA
3226548992,3226549247,BE
-3226549248,3226550271,GB
-3226550272,3226555391,US
+3226549248,3226550271,NL
+3226551040,3226551807,US
+3226552832,3226553087,US
+3226553344,3226555391,US
3226555648,3226555903,CA
-3226556416,3226561535,US
-3226561792,3226562047,NO
-3226562560,3226564607,US
-3226564864,3226565119,DE
+3226556416,3226556671,US
+3226557440,3226558463,US
+3226558720,3226558975,US
+3226559488,3226561535,US
+3226561792,3226562047,NL
+3226563072,3226563327,US
+3226563584,3226564607,US
+3226564864,3226565119,NL
3226565376,3226565631,FI
-3226565632,3226574847,US
+3226565632,3226569727,US
+3226569984,3226570239,US
+3226570752,3226574847,US
3226574848,3226575103,FI
3226576384,3226576639,US
3226576896,3226578943,CA
3226578944,3226579967,US
3226580480,3226581247,FI
-3226582528,3226582783,US
-3226583040,3226583295,US
-3226583552,3226583807,SE
-3226584064,3226591231,US
+3226581248,3226583295,US
+3226583552,3226583807,NL
+3226584064,3226584415,US
+3226584416,3226584447,AU
+3226584448,3226591231,US
3226591232,3226592255,CA
-3226592768,3226593023,DE
-3226593792,3226594047,GB
-3226594304,3226626047,US
+3226592768,3226593023,NL
+3226593792,3226594047,NL
+3226594304,3226598911,US
+3226599424,3226625535,US
+3226625792,3226626047,US
3226626048,3226626303,CA
-3226626304,3226629375,US
+3226626304,3226627327,US
+3226627584,3226629375,US
3226629376,3226629631,CA
3226629632,3226630399,US
-3226630400,3226630655,GB
+3226630400,3226630655,NL
3226630912,3226631167,US
-3226631168,3226631423,CH
+3226631168,3226631423,NL
3226631424,3226631935,US
-3226631936,3226632191,PT
+3226631936,3226632191,NL
3226632192,3226633215,CA
-3226635008,3226635263,US
+3226633216,3226633471,AU
+3226633472,3226635263,US
3226635264,3226635519,AU
3226635520,3226635775,US
3226635776,3226636031,ZA
@@ -106843,29 +54001,38 @@
3226637056,3226637823,US
3226637824,3226638079,CA
3226638080,3226638335,US
-3226638592,3226638847,GB
+3226638592,3226638847,NL
3226638848,3226639615,US
3226639616,3226640127,AT
3226640128,3226640639,US
3226640640,3226640895,AU
-3226640896,3226654207,US
-3226654208,3226654463,PT
+3226640896,3226652927,US
+3226653696,3226654207,US
+3226654208,3226654463,NL
3226654464,3226655743,US
-3226655744,3226656255,IT
+3226655744,3226656255,NL
3226656256,3226656511,AU
-3226656512,3226661119,US
-3226661120,3226661375,DE
+3226656512,3226658303,US
+3226658304,3226658559,AU
+3226658560,3226661119,US
+3226661120,3226661375,NL
3226661888,3226662143,US
3226662912,3226664959,US
3226664960,3226690815,FI
3226690816,3226691071,CA
-3226691072,3226691327,GB
-3226691584,3226695167,US
+3226691072,3226691327,NL
+3226691584,3226691839,AU
+3226691840,3226693631,US
+3226694144,3226695167,US
3226695168,3226695679,AU
3226695680,3226695935,US
3226695936,3226696191,CA
-3226696448,3226696703,AU
-3226696704,3226705919,US
+3226696192,3226696703,AU
+3226696704,3226698495,US
+3226698496,3226698751,CA
+3226698752,3226704895,US
+3226705152,3226705407,AU
+3226705408,3226705919,US
3226705920,3226706175,FR
3226706176,3226706943,US
3226707200,3226707455,PL
@@ -106878,183 +54045,180 @@
3226716928,3226718207,US
3226720768,3226721279,JP
3226721280,3226721791,US
-3226722048,3226722303,CH
+3226722048,3226722303,NL
3226722304,3226722559,AU
3226722560,3226723583,US
-3226723584,3226723839,DE
+3226723584,3226723839,NL
3226723840,3226724095,US
3226724096,3226724351,AU
3226724352,3226725631,US
3226725632,3226726143,AU
-3226726144,3226728191,US
+3226726144,3226727679,US
+3226727936,3226728191,US
3226728192,3226728447,CA
-3226728448,3226730495,US
+3226728448,3226729983,US
3226731008,3226731519,US
3226731776,3226732031,GB
3226732288,3226733567,US
3226733568,3226733823,MX
-3226733824,3226734079,PT
+3226733824,3226734079,NL
3226734080,3226734335,US
-3226734336,3226734591,PT
-3226734592,3226737407,US
+3226734336,3226734591,NL
+3226734592,3226736383,US
+3226736896,3226737407,US
3226737408,3226737663,AT
3226737664,3226738175,US
3226738176,3226738431,NL
3226738432,3226738687,US
-3226738688,3226739199,NO
-3226739712,3226746367,US
-3226746368,3226746623,PT
+3226738688,3226739199,NL
+3226739712,3226743807,US
+3226744576,3226746367,US
+3226746368,3226746623,NL
3226746624,3226748927,US
3226749440,3226749695,US
3226749696,3226752255,GB
3226752256,3226752767,US
-3226752768,3226753023,IT
+3226752768,3226753023,NL
3226753024,3226753279,US
3226753280,3226753535,AU
3226753536,3226753791,SI
-3226753792,3226754815,HR
-3226754816,3226755071,SI
-3226755072,3226755327,HR
-3226755328,3226755583,SI
-3226755584,3226755839,HR
-3226755840,3226757375,SI
+3226753792,3226754303,HR
+3226754304,3226757375,SI
3226757376,3226757887,HR
-3226757888,3226758143,SI
-3226758144,3226758399,HR
-3226758400,3226758655,SI
+3226757888,3226758655,SI
3226758912,3226762751,US
3226763008,3226770687,IT
3226770688,3226772991,US
-3226772992,3226773247,CH
+3226772992,3226773247,NL
3226773248,3226774783,US
3226774784,3226775039,GB
3226775040,3226775295,US
-3226775552,3226783743,FI
-3226783744,3226784767,US
+3226775552,3226782463,FI
+3226782720,3226783743,FI
+3226783744,3226783999,US
+3226784256,3226784767,US
3226784768,3226785023,GB
3226785024,3226786559,US
3226786560,3226786815,AU
-3226786816,3226787071,DE
-3226787072,3226787327,AT
+3226786816,3226787327,NL
3226787328,3226788095,US
3226788352,3226789375,HU
3226789376,3226789631,AU
3226789632,3226791167,US
3226791168,3226791679,AU
3226791680,3226792191,US
-3226792448,3226792703,AU
+3226792192,3226792703,AU
3226792704,3226792959,US
3226792960,3226793215,ZA
3226793216,3226793983,DE
3226793984,3226795263,US
-3226795264,3226795519,NZ
+3226795264,3226795519,AU
3226795520,3226795775,US
3226796032,3226800127,US
3226800128,3226800639,DE
3226800640,3226811391,US
3226811392,3226811647,DE
3226811648,3226824191,US
-3226824192,3226824447,EU
+3226824192,3226824291,DE
+3226824292,3226824293,US
+3226824294,3226824447,DE
3226824448,3226861567,US
3226861824,3226862079,CA
3226862080,3226864383,US
3226864384,3226864639,RU
+3226864640,3226864895,AU
3226864896,3226865151,US
-3226865152,3226865407,PL
+3226865152,3226865407,NL
3226865408,3226866175,US
-3226866176,3226866431,GB
+3226866176,3226866431,NL
3226866432,3226867967,US
-3226867968,3226868223,IL
+3226867968,3226868223,NL
3226868224,3226868479,US
3226868480,3226868735,GB
3226868736,3226884351,US
-3226884352,3226884607,IL
-3226884608,3226893567,US
+3226884352,3226884607,NL
+3226884608,3226892799,US
+3226893056,3226893567,US
3226893568,3226894079,NL
3226894080,3226894335,GB
-3226894336,3226895359,US
-3226895872,3226896127,GB
+3226894336,3226894591,US
+3226894592,3226894847,AU
+3226895104,3226895359,US
+3226895360,3226895871,AU
+3226895872,3226896127,NL
3226896128,3226896639,US
-3226896640,3226896895,GB
-3226896896,3226897151,PT
+3226896640,3226897151,NL
3226897152,3226902527,US
3226903040,3226903295,US
-3226903296,3226903551,DE
+3226903296,3226903551,NL
3226903552,3226903807,US
3226903808,3226904063,AU
-3226904064,3226904319,CH
-3226904320,3226904575,FR
+3226904064,3226904575,NL
3226904576,3226904831,US
-3226904832,3226905087,GB
+3226904832,3226905087,NL
3226905088,3226926591,US
-3226926592,3226926847,SE
+3226926592,3226926847,NL
3226927104,3226992639,NL
-3226992896,3226993151,CH
+3226992896,3226993151,NL
3226993152,3226993663,US
-3226993664,3226993919,DE
+3226993664,3226993919,NL
3226993920,3226994175,US
3226994176,3226994687,AU
3226994688,3226994943,US
-3226994944,3226995455,GB
-3226995456,3226996735,US
-3226996992,3226997247,PT
+3226994944,3226995455,NL
+3226995456,3226996479,US
+3226996992,3226997247,NL
3226998016,3226998527,US
-3226998528,3226999039,AT
-3226999040,3227013119,US
+3226998528,3226999039,NL
+3226999040,3227005439,US
+3227005696,3227013119,US
+3227013120,3227013375,AU
3227013376,3227013887,US
-3227013888,3227014399,GB
+3227013888,3227014399,NL
3227014400,3227014655,NZ
-3227014656,3227014911,FI
+3227014656,3227014911,NL
3227014912,3227017215,US
-3227017472,3227017983,DE
+3227017472,3227017983,NL
+3227018496,3227019007,AU
3227019008,3227020287,US
-3227020288,3227020543,DE
+3227020288,3227020543,NL
3227020800,3227022847,US
-3227022848,3227023103,GB
+3227022848,3227023103,NL
+3227023104,3227023359,AU
3227023360,3227023615,US
3227023872,3227024127,US
-3227024128,3227024383,PT
+3227024128,3227024383,NL
3227024384,3227024895,US
-3227025408,3227025663,GB
+3227025408,3227025663,NL
3227025664,3227025919,US
3227025920,3227026175,GB
3227026176,3227026687,US
3227026688,3227026943,GB
-3227027456,3227035135,US
-3227035136,3227035391,EU
-3227035392,3227035647,AP
-3227035648,3227040255,US
+3227027456,3227038207,US
+3227038720,3227040255,US
3227040512,3227040767,AU
3227040768,3227041279,US
-3227041280,3227041535,NZ
+3227041280,3227041535,AU
3227041536,3227042815,US
-3227042816,3227043071,IT
+3227042816,3227043071,NL
3227043072,3227043327,US
3227043584,3227044863,US
-3227044864,3227045119,PL
-3227045120,3227051519,US
-3227051520,3227051775,AP
-3227051776,3227053567,US
-3227053568,3227053823,GB
-3227053824,3227054079,DE
+3227044864,3227045119,NL
+3227045120,3227053567,US
+3227053568,3227054079,NL
3227054080,3227056639,US
3227056640,3227058175,PT
-3227058176,3227083519,FI
-3227083520,3227083775,ES
-3227083776,3227123199,FI
-3227123200,3227123455,AX
-3227123456,3227123711,FI
-3227123712,3227204617,US
-3227204618,3227204619,EU
-3227204620,3227225087,US
-3227225088,3227225599,LU
-3227225600,3227234559,US
-3227234560,3227234815,PT
+3227058176,3227123711,FI
+3227123712,3227224831,US
+3227225088,3227225599,NL
+3227225600,3227226111,US
+3227226368,3227234559,US
+3227234560,3227234815,NL
3227234816,3227235071,US
3227235072,3227235327,AU
3227235328,3227236607,US
3227236608,3227236863,AU
-3227236864,3227237119,RU
+3227236864,3227237119,NL
3227237120,3227237631,US
3227237632,3227237887,NO
3227237888,3227238143,US
@@ -107064,24 +54228,30 @@
3227240704,3227240959,GB
3227240960,3227243007,US
3227243008,3227243263,CA
-3227243264,3227243519,GB
+3227243264,3227243519,NL
3227243520,3227243775,US
+3227243776,3227244031,AU
3227244032,3227249151,SE
3227249408,3227249663,US
3227249664,3227252735,CH
-3227252736,3227273983,US
+3227252736,3227252991,US
+3227253248,3227254271,US
+3227254272,3227254527,AU
+3227254784,3227258623,US
+3227258624,3227258879,AU
+3227258880,3227259135,US
+3227259392,3227273983,US
3227273984,3227274239,FI
3227274240,3227274495,US
3227274496,3227274751,NL
3227274752,3227276543,US
3227276800,3227277055,FR
3227277312,3227278847,US
-3227278848,3227279103,EU
+3227278848,3227279103,IE
3227279104,3227281407,US
3227281408,3227282175,IT
3227282176,3227282431,US
-3227282432,3227282687,NL
-3227282688,3227282943,GB
+3227282432,3227282943,NL
3227282944,3227284479,US
3227284480,3227284735,FI
3227284992,3227286783,US
@@ -107101,118 +54271,163 @@
3227290880,3227291135,AT
3227291136,3227294207,PT
3227294464,3227294975,GR
-3227295232,3227310079,US
-3227310080,3227310335,NO
+3227295232,3227299839,US
+3227300096,3227301375,US
+3227301632,3227302399,US
+3227302656,3227309055,US
+3227309824,3227310079,US
+3227310080,3227310335,NL
3227310336,3227312127,US
3227312128,3227312383,DK
3227312384,3227320319,US
-3227320320,3227361791,FR
-3227361792,3227362303,US
-3227362304,3227363071,GB
-3227363072,3227385855,FR
+3227320320,3227362047,FR
+3227362048,3227362303,US
+3227362304,3227362559,GB
+3227362560,3227385855,FR
3227385856,3227391999,US
-3227392000,3227392255,PT
+3227392000,3227392255,NL
3227392256,3227393023,US
3227393024,3227393279,AT
-3227393280,3227393791,US
-3227393792,3227394047,EU
-3227394048,3227396351,US
+3227393280,3227396351,US
3227396352,3227396607,AU
3227396608,3227400447,US
3227400448,3227400703,AT
3227400704,3227400959,GB
3227400960,3227401471,US
-3227401472,3227401727,ZA
+3227401472,3227401727,MU
3227401728,3227402495,AU
-3227402496,3227403007,US
+3227402496,3227402751,US
3227403008,3227403519,GR
3227403520,3227403775,US
-3227404288,3227405311,US
-3227405312,3227405567,DE
+3227404544,3227405311,US
+3227405312,3227405567,NL
3227405568,3227414015,US
-3227414272,3227415551,GB
-3227415552,3227415807,US
-3227415808,3227416063,GB
+3227414272,3227416063,GB
3227416064,3227417087,US
-3227417088,3227417343,BN
+3227417088,3227417343,AU
3227417344,3227417599,US
3227417856,3227418111,US
3227418112,3227418367,CA
-3227418368,3227425791,US
+3227418368,3227425023,US
+3227425280,3227425791,US
3227425792,3227427583,DK
3227427584,3227427839,ES
3227427840,3227429119,US
3227429120,3227429375,NZ
3227429376,3227429887,US
-3227429888,3227430143,GB
+3227429888,3227430143,NL
3227430144,3227430399,US
-3227430400,3227430655,HK
+3227430400,3227430655,AU
3227430656,3227437055,FR
-3227437056,3227439103,US
+3227437056,3227437311,AU
+3227437312,3227437823,US
+3227438848,3227439103,US
3227439104,3227439615,AU
-3227439616,3227439871,ZA
+3227439616,3227439871,MU
3227439872,3227440127,US
-3227440128,3227440383,IT
+3227440128,3227440383,NL
3227440384,3227442175,US
-3227442432,3227442687,RU
+3227442176,3227442431,AU
+3227442432,3227442687,NL
3227442688,3227443711,US
3227443712,3227443967,AT
3227443968,3227444223,AU
3227444224,3227445503,US
3227445504,3227445759,RU
3227445760,3227446015,US
-3227446016,3227446271,GB
+3227446016,3227446271,NL
3227446272,3227446783,US
-3227447040,3227447295,AT
-3227447296,3227448063,ZA
+3227446784,3227447039,AU
+3227447040,3227447295,NL
+3227447296,3227447807,MU
+3227447808,3227448063,ZA
3227448064,3227448575,AU
3227448576,3227448831,US
-3227448832,3227449087,ZA
-3227449088,3227451455,US
+3227448832,3227449087,MU
+3227449088,3227450111,US
+3227450368,3227451455,US
3227451456,3227452375,CA
3227452376,3227452382,US
-3227452383,3227454687,CA
+3227452383,3227452735,CA
+3227452736,3227452767,US
+3227452768,3227453503,CA
+3227453504,3227453507,US
+3227453508,3227454047,CA
+3227454048,3227454079,US
+3227454080,3227454687,CA
3227454688,3227454719,US
-3227454720,3227455487,CA
+3227454720,3227455047,CA
+3227455048,3227455051,US
+3227455052,3227455487,CA
3227455488,3227456255,US
3227456256,3227457023,CA
-3227457024,3227457279,US
-3227457280,3227459001,CA
+3227457024,3227457535,US
+3227457536,3227459001,CA
3227459002,3227459002,US
-3227459003,3227464447,CA
+3227459003,3227461081,CA
+3227461082,3227461082,US
+3227461083,3227461119,CA
+3227461120,3227461631,US
+3227461632,3227461959,CA
+3227461960,3227461963,US
+3227461964,3227464447,CA
3227464448,3227464575,US
3227464576,3227465147,CA
3227465148,3227465151,US
-3227465152,3227467775,CA
-3227467776,3227475967,US
+3227465152,3227466135,CA
+3227466136,3227466143,US
+3227466144,3227467775,CA
+3227468032,3227468287,US
+3227468800,3227484159,US
3227484160,3227516927,CA
-3227516928,3227533311,ZA
+3227517184,3227517695,ZA
+3227517696,3227519743,MU
+3227519744,3227520255,ZA
+3227520256,3227520767,MU
+3227520768,3227521023,ZA
+3227521024,3227522047,MU
+3227522048,3227522559,ZA
+3227522560,3227522815,MU
+3227523072,3227526143,MU
+3227526400,3227526655,MU
+3227526656,3227526911,ZA
+3227526912,3227533311,MU
3227533312,3227534335,US
-3227534336,3227557887,ZA
+3227534336,3227539455,MU
+3227539456,3227539711,ZA
+3227539712,3227541503,MU
+3227541504,3227541759,ZA
+3227541760,3227557887,MU
3227557888,3227558911,US
-3227558912,3227559935,ZA
+3227558912,3227559935,MU
3227559936,3227561983,US
-3227561984,3227568127,ZA
+3227561984,3227567103,MU
+3227567104,3227568127,ZA
3227568128,3227574271,US
-3227574272,3227582463,ZA
+3227574272,3227579391,MU
+3227579648,3227580159,MU
+3227580160,3227580927,ZA
+3227580928,3227582463,MU
3227582464,3227638271,US
3227638272,3227638527,CA
3227638528,3227647999,US
-3227648000,3227659775,FI
-3227659776,3227660031,JP
-3227660032,3227660543,FI
-3227660544,3227660799,EE
-3227660800,3227713535,FI
-3227779328,3227779583,ZA
-3227779584,3227779839,KR
+3227648000,3227713535,FI
+3227713536,3227722521,CA
+3227722522,3227722522,US
+3227722523,3227748035,CA
+3227748036,3227748039,US
+3227748040,3227779071,CA
+3227779328,3227779583,MU
+3227779584,3227779839,AU
3227779840,3227783679,US
-3227783680,3227783935,FR
+3227783680,3227783935,NL
3227783936,3227784703,US
3227784704,3227784959,AU
3227784960,3227785727,AT
-3227785728,3227792383,US
-3227792384,3227792639,GB
-3227792640,3227792895,NZ
+3227785728,3227786495,US
+3227786752,3227792383,US
+3227792384,3227792639,NL
+3227792640,3227792895,AU
3227792896,3227794687,US
3227794688,3227794943,GB
3227794944,3227795199,US
@@ -107228,100 +54443,107 @@
3227804416,3227804671,GB
3227804672,3227804927,US
3227804928,3227805183,CA
-3227805184,3227805439,SG
-3227805440,3227805695,FI
+3227805184,3227805695,FI
3227805696,3227806463,US
-3227806464,3227806719,GB
-3227806720,3227806975,US
-3227806976,3227807039,SG
-3227807040,3227807743,US
+3227806464,3227806719,FI
+3227806720,3227807743,US
3227807744,3227809023,FI
3227809024,3227809279,IN
-3227809280,3227812351,FI
-3227812352,3227812607,EU
-3227812608,3227813375,FI
+3227809280,3227813375,FI
3227813376,3227813631,US
-3227813632,3227813887,MY
-3227813888,3227815167,GB
+3227813632,3227815167,GB
3227815168,3227815935,US
-3227815936,3227816191,GB
+3227815936,3227816191,NL
3227816192,3227818495,US
3227818496,3227818751,GB
-3227818752,3227844607,MX
+3227818752,3227819263,MX
+3227819264,3227819519,AR
+3227819520,3227822847,MX
+3227822848,3227823103,HN
+3227823104,3227824383,MX
+3227824640,3227825663,MX
+3227825920,3227826687,MX
+3227826688,3227827199,AR
+3227827200,3227829759,MX
+3227830016,3227831807,MX
+3227832064,3227833855,MX
+3227834368,3227837439,MX
+3227837952,3227842303,MX
+3227842816,3227843327,MX
3227844864,3227845119,ES
3227845120,3227845631,US
-3227845632,3227845887,RU
+3227845632,3227845887,NL
3227846144,3227846655,US
-3227846656,3227846911,ES
-3227847424,3227847679,GB
+3227846656,3227847679,NL
3227847680,3227848703,US
-3227848704,3227848959,NZ
+3227848704,3227848959,AU
3227848960,3227851775,US
-3227851776,3227852031,DE
-3227852032,3227853055,US
+3227851776,3227852031,NL
+3227852032,3227852799,US
3227853312,3227853567,GB
-3227853568,3227860991,US
-3227863808,3227864063,DE
+3227853568,3227856127,US
+3227856896,3227860991,US
+3227863808,3227864063,NL
3227864064,3227865343,US
-3227865344,3227867903,NL
-3227867904,3227868159,TH
+3227865344,3227867647,NL
+3227867648,3227867903,BR
+3227867904,3227868159,AU
3227868160,3227872767,US
3227872768,3227873023,GB
3227873024,3227874047,NL
3227874048,3227874815,US
-3227874816,3227875071,PT
+3227874816,3227875071,NL
3227875072,3227878911,US
3227878912,3227879167,AU
3227879168,3227879679,US
-3227879680,3227879935,GB
+3227879680,3227879935,NL
3227880192,3227880959,US
-3227880960,3227881215,EG
-3227881216,3227885567,US
+3227880960,3227881215,MU
+3227881472,3227885567,US
3227885568,3227887871,ES
3227887872,3227888127,PR
-3227888128,3227888383,BE
-3227888384,3227889663,US
-3227889664,3227889919,CH
-3227889920,3227890431,US
-3227890432,3227890943,DE
+3227888128,3227888383,NL
+3227888384,3227889151,US
+3227889408,3227889663,US
+3227889664,3227889919,NL
+3227890176,3227890431,US
+3227890432,3227890943,NL
3227890944,3227891455,US
3227891456,3227891711,AU
3227891712,3227893759,US
-3227893760,3227894015,FI
+3227893760,3227894015,NL
3227894016,3227895039,US
3227895040,3227895551,DE
-3227895552,3227909119,US
+3227895808,3227909119,US
3227909120,3227909375,BE
3227909376,3227909631,US
3227909632,3227909887,AU
-3227910400,3227910655,AT
+3227910400,3227910655,NL
3227910656,3227911679,US
3227911680,3227912191,UA
3227912192,3227912447,GB
-3227912448,3227912703,ZA
+3227912448,3227912703,MU
3227912704,3227912959,US
3227912960,3227913215,CA
3227913216,3227914495,US
3227914496,3227914751,AT
-3227914752,3227918591,FI
-3227918592,3227918847,US
-3227918848,3227931135,FI
+3227914752,3227931135,FI
3227931136,3227931391,US
-3227931392,3227931647,TH
+3227931392,3227931647,AU
3227931648,3227931903,PE
3227932672,3227932927,US
3227932928,3227933183,DE
3227933184,3227933695,US
-3227933696,3227933951,NZ
+3227933696,3227933951,AU
3227933952,3227934463,US
3227934464,3227934719,CH
3227934720,3227947519,US
3227947520,3227955711,DE
3227955712,3227964927,US
3227964928,3227965183,GB
-3227965184,3227967487,US
-3227967488,3227967743,FR
-3227967744,3227967999,PL
+3227965184,3227966975,US
+3227967232,3227967487,US
+3227967488,3227967999,NL
3227968000,3227968255,US
3227968256,3227968767,GB
3227968768,3227969023,RU
@@ -107333,52 +54555,61 @@
3227975936,3227976191,US
3227976192,3227976447,LU
3227976448,3227977471,US
-3227977472,3227977727,FR
+3227977472,3227977727,NL
3227977728,3227978751,US
3227979008,3227979263,US
-3227979264,3227979519,AE
+3227979264,3227979519,NL
3227979520,3227980799,US
-3227980800,3227981055,GR
+3227980800,3227981055,NL
3227981056,3227981567,US
-3227981568,3227981823,DE
-3227981824,3227982591,US
+3227981568,3227981823,NL
+3227981824,3227982335,US
3227982592,3227982847,DE
3227982848,3227985919,GB
3227985920,3227986175,DE
3227986176,3227986431,US
-3227986688,3227997439,US
+3227986432,3227986943,AU
+3227986944,3227987455,US
+3227987456,3227987711,AU
+3227987712,3227997439,US
3227997440,3228005631,FI
3228005632,3228008959,US
3228008960,3228009215,AU
-3228009472,3228010751,US
+3228009472,3228009727,AU
+3228009728,3228010751,US
3228010752,3228011519,GB
3228011520,3228013311,US
-3228013312,3228013567,PT
-3228013568,3228045055,US
-3228045056,3228045311,KR
+3228013312,3228013567,NL
+3228013568,3228039423,US
+3228040192,3228041215,US
+3228041472,3228042239,US
+3228042752,3228045055,US
+3228045056,3228045311,AU
3228045312,3228046335,US
3228046592,3228047103,US
-3228047104,3228047359,IT
+3228047104,3228047359,NL
3228047360,3228048383,US
-3228048384,3228048895,GB
+3228048384,3228048895,NL
3228048896,3228050175,US
3228050176,3228050943,PT
3228051200,3228051455,US
+3228051456,3228051711,AU
3228051712,3228051967,CH
3228051968,3228052223,US
3228052224,3228052991,AU
3228052992,3228053503,US
3228053504,3228053759,PT
3228054016,3228054783,US
-3228054784,3228055039,GB
+3228054784,3228055039,NL
3228055040,3228055295,US
3228055296,3228055807,NL
3228055808,3228056319,NO
3228056320,3228059647,US
3228059648,3228059903,CH
3228060160,3228060927,US
-3228060928,3228061183,DE
+3228060928,3228061183,NL
3228061184,3228061695,US
+3228061696,3228061951,AU
3228061952,3228062207,US
3228062208,3228062463,GB
3228062464,3228077055,US
@@ -107388,27 +54619,28 @@
3228077824,3228078847,US
3228078848,3228079103,GR
3228079104,3228080639,US
-3228080640,3228080895,IE
-3228080896,3228081151,FR
-3228081152,3228082175,US
+3228080640,3228081151,NL
+3228081152,3228081919,US
3228082944,3228083967,US
-3228083968,3228084479,BE
+3228083968,3228084479,NL
3228084480,3228085247,US
-3228085248,3228085503,JP
+3228085248,3228085503,AU
3228085504,3228100607,US
-3228100608,3228101119,JP
+3228100608,3228101119,AU
3228101120,3228102143,US
-3228102144,3228102399,GB
+3228102144,3228102399,NL
3228102400,3228103935,US
3228103936,3228104191,FR
-3228104192,3228104703,JP
-3228104704,3228104959,DK
+3228104192,3228104703,AU
+3228104704,3228104959,NL
3228104960,3228105471,US
-3228105472,3228105727,CH
-3228105728,3228109311,US
-3228109312,3228109567,NZ
+3228105472,3228105727,NL
+3228105728,3228105983,AU
+3228105984,3228106495,US
+3228106752,3228109311,US
+3228109312,3228109567,AU
3228109568,3228125951,US
-3228125952,3228126207,RU
+3228125952,3228126207,NL
3228126208,3228133375,US
3228133376,3228134655,CA
3228134656,3228150271,US
@@ -107419,11 +54651,11 @@
3228171776,3228172031,GB
3228172032,3228172287,US
3228172288,3228237823,IT
-3228238336,3228238591,GB
+3228238080,3228238591,NL
3228238592,3228238847,US
3228238848,3228239359,GB
3228239616,3228240127,US
-3228240128,3228240383,AU
+3228240128,3228240639,AU
3228240640,3228241407,GB
3228241408,3228250367,US
3228250624,3228250879,US
@@ -107433,8 +54665,8 @@
3228264448,3228264703,NI
3228264704,3228265983,US
3228265984,3228266239,IE
-3228266752,3228267007,NZ
-3228267008,3228267263,NO
+3228266496,3228267007,AU
+3228267008,3228267263,NL
3228267264,3228268543,US
3228269056,3228269311,PT
3228269312,3228269567,DE
@@ -107445,11 +54677,11 @@
3228271616,3228271871,DE
3228272128,3228272383,US
3228272640,3228280831,US
-3228280832,3228281087,GB
+3228280832,3228281087,NL
3228281088,3228281599,US
-3228281600,3228282111,NZ
+3228281600,3228282111,AU
3228282112,3228282367,US
-3228282368,3228282623,GB
+3228282368,3228282623,NL
3228282624,3228283135,US
3228283136,3228283391,GR
3228283392,3228283647,GB
@@ -107459,15 +54691,20 @@
3228289024,3228297215,FI
3228297216,3228297727,AT
3228297728,3228297983,US
-3228297984,3228298495,DE
-3228298496,3228309247,US
-3228309248,3228327167,DE
+3228297984,3228298495,NL
+3228298496,3228303103,US
+3228303360,3228309247,US
+3228309248,3228310271,DE
+3228311808,3228312063,DE
+3228312320,3228316159,DE
+3228316416,3228327167,DE
3228327168,3228328703,US
3228328704,3228328959,AU
-3228328960,3228329471,NO
+3228328960,3228329471,NL
3228329472,3228330751,US
3228330752,3228331263,SE
3228331264,3228332287,US
+3228332288,3228332543,AU
3228332544,3228332799,GR
3228332800,3228334079,FR
3228334080,3228334335,GB
@@ -107477,12 +54714,12 @@
3228335616,3228335871,CZ
3228336128,3228336639,CZ
3228336640,3228337663,SK
-3228337664,3228338431,CZ
+3228337664,3228337919,CZ
+3228337920,3228338175,SK
+3228338176,3228338431,CZ
3228338432,3228340735,SK
3228340736,3228341247,CZ
-3228341248,3228341759,SK
-3228341760,3228342271,CZ
-3228342272,3228342783,SK
+3228341248,3228342783,SK
3228342784,3228343039,CZ
3228343040,3228343295,SK
3228343296,3228343551,CZ
@@ -107493,29 +54730,28 @@
3228347392,3228348159,SK
3228348160,3228353279,US
3228353280,3228358399,SE
-3228358400,3228362239,US
-3228362240,3228362495,TH
+3228358400,3228361471,US
+3228361728,3228362239,US
+3228362240,3228362495,AU
3228362496,3228362751,US
3228363008,3228363263,US
3228363264,3228363519,CH
3228363520,3228364287,US
-3228364288,3228364543,AT
+3228364288,3228364543,NL
3228364800,3228368895,US
-3228368896,3228404735,DE
-3228404736,3228404863,FR
-3228404864,3228404895,EU
-3228404896,3228405247,FR
+3228368896,3228373247,DE
+3228373504,3228380415,DE
+3228380672,3228404735,DE
+3228404736,3228405247,FR
3228405248,3228405503,KR
3228405504,3228405759,SG
3228405760,3228406015,IN
3228406016,3228406271,US
3228406272,3228407039,FR
-3228407040,3228421119,DE
-3228421120,3228421375,BE
-3228421376,3228423679,DE
-3228423680,3228424191,CH
-3228424192,3228430847,DE
-3228430848,3228431103,ZA
+3228407040,3228420095,DE
+3228420608,3228426239,DE
+3228426752,3228430847,DE
+3228430848,3228431103,MU
3228431104,3228434431,DE
3228434432,3228456191,US
3228456192,3228456447,CA
@@ -107525,45 +54761,49 @@
3228461568,3228461823,CA
3228461824,3228464127,US
3228464128,3228464383,CA
-3228464384,3228477695,US
+3228464384,3228472831,US
+3228473344,3228477695,US
3228478464,3228479487,CA
-3228479488,3228496127,US
+3228479488,3228490751,US
+3228491520,3228496127,US
3228496128,3228496383,GB
3228496384,3228508159,US
3228508160,3228508415,AU
-3228508416,3228508671,NO
+3228508416,3228508671,NL
3228508672,3228509439,US
-3228509952,3228510207,IE
+3228509952,3228510207,NL
3228510208,3228511231,US
-3228511232,3228511487,CZ
+3228511232,3228511487,NL
3228511488,3228511999,US
-3228512000,3228512255,DE
-3228512256,3228512511,CH
+3228512000,3228512511,NL
3228512512,3228513791,US
-3228514304,3228522495,US
-3228522496,3228522751,GB
+3228514304,3228521471,US
+3228521984,3228522495,US
+3228522496,3228522751,NL
3228522752,3228525823,US
-3228525824,3228526079,PT
-3228526080,3228526335,NZ
-3228526336,3228526591,CH
-3228526592,3228526847,AT
+3228525824,3228526079,NL
+3228526080,3228526335,AU
+3228526336,3228526847,NL
3228526848,3228527103,AU
3228527104,3228531711,US
3228531712,3228532223,NO
3228532224,3228532479,US
-3228532480,3228532735,DE
-3228540928,3228558591,US
-3228558592,3228559103,BR
+3228532480,3228532735,NL
+3228532736,3228554751,US
+3228555008,3228557311,US
+3228557568,3228558591,US
+3228558592,3228558847,BR
3228559104,3228564479,US
3228564480,3228564735,AT
-3228564736,3228565247,US
-3228565504,3228572927,US
+3228564992,3228565247,US
+3228565760,3228572927,US
3228573184,3228573951,PT
3228573952,3228574463,US
-3228574720,3228577023,US
-3228577024,3228577279,PT
+3228574720,3228574975,US
+3228575232,3228577023,US
+3228577024,3228577279,NL
3228577280,3228578047,US
-3228578048,3228578303,GB
+3228578048,3228578303,NL
3228578304,3228581119,US
3228581120,3228581375,AT
3228581376,3228583167,US
@@ -107572,67 +54812,38 @@
3228590592,3228590847,GB
3228590848,3228591103,DK
3228591104,3228591359,GB
-3228591360,3228617727,US
+3228591360,3228603391,US
+3228603648,3228603903,US
+3228604160,3228617727,US
3228617728,3228617983,FI
3228617984,3228618239,US
-3228618240,3228618495,SE
+3228618240,3228618495,NL
3228618496,3228618751,US
3228618752,3228619007,DE
3228619008,3228620031,US
-3228620032,3228620287,DE
-3228620288,3228620543,CH
+3228620032,3228620543,NL
3228620544,3228620799,AU
3228620800,3228628735,US
3228628736,3228628991,ES
3228628992,3228630527,US
-3228630528,3228630783,CH
+3228630528,3228630783,NL
3228631040,3228696575,NL
3228696576,3228826371,IL
3228826372,3228826372,US
-3228826373,3228827647,IL
-3228827648,3228828159,PS
-3228828160,3228829183,IL
-3228829184,3228829695,PS
-3228829696,3228830207,IL
-3228830208,3228833791,PS
-3228833792,3228846335,IL
-3228846336,3228846591,A2
-3228846592,3228849407,IL
-3228849408,3228849663,A2
-3228849664,3228850175,IL
-3228850176,3228850431,A2
-3228850432,3228858111,IL
-3228858112,3228858367,A2
-3228858368,3228864255,IL
-3228864256,3228864511,A2
-3228864512,3229024255,IL
-3229024256,3229061119,US
-3229061120,3229061343,CA
-3229061344,3229061359,US
-3229061360,3229061375,CA
-3229061376,3229061631,US
-3229061632,3229062031,CA
-3229062032,3229062047,US
-3229062048,3229062143,CA
-3229062144,3229062175,US
-3229062176,3229062433,CA
+3228826373,3228830719,IL
+3228830720,3228833791,PS
+3228833792,3229024255,IL
+3229024512,3229024767,US
+3229025280,3229058047,US
+3229058816,3229061119,US
+3229061120,3229062433,CA
3229062434,3229062450,US
-3229062451,3229062527,CA
-3229062528,3229062591,US
-3229062592,3229062655,CA
-3229062656,3229063295,US
-3229063296,3229063423,CA
-3229063424,3229063679,US
-3229063680,3229063935,CA
-3229063936,3229064191,US
-3229064192,3229064951,CA
+3229062451,3229064951,CA
3229064952,3229064955,US
3229064956,3229065215,CA
-3229073408,3229092095,US
+3229065216,3229092095,US
3229092096,3229093887,AU
-3229093888,3229101823,US
-3229101824,3229102591,FI
-3229102592,3229104895,US
+3229093888,3229104895,US
3229104896,3229105151,ES
3229105152,3229120511,US
3229120512,3229120767,SE
@@ -107642,32 +54853,31 @@
3229155328,3229155583,GB
3229155584,3229155839,SE
3229155840,3229156095,ES
-3229156096,3229161727,SE
+3229156096,3229159423,SE
+3229159424,3229159935,AT
+3229159936,3229160959,SE
+3229160960,3229161471,DE
+3229161472,3229161727,SE
3229161728,3229161983,GB
-3229161984,3229163263,SE
-3229163264,3229163519,ES
-3229163520,3229164287,SE
-3229164288,3229164543,DK
+3229161984,3229164543,SE
3229164544,3229165055,GB
-3229165056,3229165311,NO
-3229165312,3229168895,SE
-3229168896,3229169151,JP
-3229169152,3229171455,SE
-3229171456,3229171711,MT
+3229165056,3229167103,SE
+3229167104,3229167615,IT
+3229167616,3229171711,SE
3229171712,3229172223,GB
-3229172224,3229173503,SE
-3229173504,3229173759,IT
-3229173760,3229182463,SE
+3229172224,3229182463,SE
3229182464,3229182975,GB
-3229182976,3229189119,SE
-3229189120,3229189375,GB
-3229189376,3229191167,SE
-3229191168,3229191423,GB
-3229191424,3229192191,SE
-3229192192,3229192447,FI
-3229192448,3229195263,SE
+3229182976,3229183999,SE
+3229184000,3229184511,GB
+3229184512,3229195263,SE
3229195264,3229196287,DE
-3229196288,3229200383,SE
+3229196288,3229196799,SE
+3229196800,3229197311,AT
+3229197312,3229197823,SE
+3229197824,3229198335,GB
+3229198336,3229198847,SE
+3229198848,3229199359,AT
+3229199360,3229200383,SE
3229200384,3229200895,GB
3229200896,3229201151,DE
3229201152,3229201407,SE
@@ -107679,21 +54889,22 @@
3229205504,3229206015,GB
3229206016,3229220863,SE
3229220864,3229245439,GB
-3229245440,3229246719,US
-3229246720,3229250815,GB
-3229250816,3229251071,US
-3229251072,3229254399,GB
+3229245440,3229246463,US
+3229246464,3229254399,GB
3229254400,3229256959,SG
3229256960,3229258495,GB
3229258496,3229259007,US
3229259520,3229264639,GB
-3229264640,3229264895,NZ
+3229264640,3229264895,AU
3229264896,3229265919,US
3229265920,3229266175,AU
3229266176,3229266943,US
3229266944,3229267199,NZ
-3229267200,3229275647,US
-3229275648,3229275903,GB
+3229267200,3229272319,US
+3229273856,3229274623,US
+3229274624,3229274879,AU
+3229274880,3229275647,US
+3229275648,3229275903,NL
3229276160,3229281023,IE
3229281024,3229281791,US
3229281792,3229283071,PT
@@ -107702,156 +54913,166 @@
3229286400,3229354495,US
3229354496,3229355775,AU
3229355776,3229358079,US
-3229358080,3229359359,DE
+3229358080,3229358335,AU
+3229358336,3229359359,DE
3229359872,3229360127,US
3229360128,3229360383,AT
3229360384,3229361919,US
3229361920,3229362175,BE
3229362176,3229363199,US
3229363456,3229363711,US
-3229363712,3229363967,GB
+3229363712,3229363967,NL
3229363968,3229380607,US
-3229380608,3229380863,DE
+3229380608,3229380863,NL
3229380864,3229381375,US
-3229381376,3229381631,DE
-3229381632,3229381887,PL
+3229381376,3229381887,NL
3229381888,3229382143,AU
3229382144,3229382399,US
3229382656,3229390847,US
3229390848,3229391103,AU
3229391104,3229391359,US
-3229391360,3229391615,CN
-3229391616,3229391871,AT
+3229391360,3229391615,AU
+3229391616,3229391871,NL
3229391872,3229392895,US
3229392896,3229393151,NZ
3229393152,3229394175,US
3229394944,3229408255,RU
3229408256,3229412095,US
-3229412096,3229483007,DE
+3229412096,3229412351,NL
+3229412352,3229414911,DE
+3229414912,3229415167,US
+3229415168,3229415679,NL
+3229415936,3229417215,DE
+3229417472,3229483007,DE
3229483008,3229499647,FI
3229499648,3229500671,US
-3229501440,3229507583,US
-3229515776,3229614847,US
+3229501440,3229614847,US
3229614848,3229615103,GB
-3229615104,3229679103,US
-3229679104,3229679359,EU
-3229679360,3229679615,US
-3229679872,3229680383,DE
-3229680384,3229680895,RO
-3229680896,3229695487,DE
-3229695488,3229700095,US
+3229615104,3229679615,US
+3229679616,3229695487,DE
+3229695488,3229697535,US
+3229697792,3229700095,US
3229700096,3229700351,AT
3229700352,3229701887,US
3229701888,3229702143,TR
3229702144,3229704703,US
3229704704,3229704959,DE
3229705216,3229745151,US
-3229745152,3229749759,FI
-3229749760,3229750015,BE
-3229750016,3229810687,FI
+3229745152,3229810687,FI
3229810688,3229814015,US
3229814016,3229814271,AU
3229814272,3229815807,US
-3229815808,3229816063,DE
+3229815808,3229816063,NL
3229816320,3229817087,US
-3229817088,3229817599,SE
+3229817088,3229817599,NL
3229817600,3229818623,AU
3229818624,3229818879,US
3229818880,3229820927,JM
3229820928,3229830911,US
-3229830912,3229831167,GB
+3229830912,3229831167,NL
3229831168,3229833215,US
-3229833472,3229833727,GB
+3229833472,3229833727,NL
3229833728,3229834495,AU
3229834496,3229834751,US
3229834752,3229835007,CA
3229835008,3229835263,US
-3229835264,3229835519,FI
+3229835264,3229835519,NL
3229835520,3229835775,CA
3229835776,3229838335,US
-3229838336,3229838591,GB
+3229838336,3229838591,NL
3229838592,3229838847,US
3229839104,3229844479,US
3229844480,3229844735,BE
3229844736,3229844991,US
3229845248,3229845503,US
3229845504,3229847295,CA
-3229847296,3229864703,US
-3229864704,3229864959,AP
-3229864960,3229874943,US
+3229847296,3229870335,US
+3229870848,3229874943,US
3229874944,3229875455,AU
3229875456,3229875967,US
-3229876224,3229878271,US
+3229876224,3229877503,US
+3229877760,3229878271,US
3229878528,3229878783,GB
3229878784,3229879039,IT
3229879040,3229879295,NO
3229879296,3229880063,US
-3229880064,3229880319,KR
+3229880064,3229880319,AU
3229880320,3229881087,US
3229881088,3229881343,CA
-3229881344,3229883391,US
+3229881344,3229883135,US
3229883648,3229883903,US
-3229884160,3229884415,JP
-3229884928,3229885183,IT
+3229884160,3229884415,AU
+3229884928,3229885183,NL
3229885184,3229885439,BR
3229885440,3229886719,US
3229886720,3229886975,AU
3229886976,3229889791,US
-3229889792,3229890047,PT
+3229889792,3229890047,NL
3229890048,3229890303,US
-3229890304,3229890559,PT
+3229890304,3229890559,NL
3229890560,3229891583,US
3229891584,3229891839,CA
3229892608,3229900031,US
3229900032,3229900287,AU
3229900288,3229901567,US
3229901568,3229901823,GB
-3229901824,3229937407,US
+3229901824,3229902335,US
+3229902336,3229902591,AU
+3229902592,3229928703,US
+3229928960,3229937407,US
3229937408,3229937663,GB
3229937664,3229937919,US
3229937920,3229938175,CA
3229938176,3229938431,US
-3229938688,3229938943,IL
-3229938944,3229939199,AT
+3229938688,3229939199,NL
3229939200,3229939455,US
3229939456,3229940735,KR
3229940736,3229940991,CH
3229940992,3229941247,AU
3229941248,3229941503,US
-3229941760,3229945343,US
-3229945600,3229945855,PT
+3229942272,3229942783,US
+3229943040,3229943295,US
+3229943552,3229944319,US
+3229944320,3229944575,AU
+3229944576,3229945087,US
+3229945344,3229945599,AU
+3229945600,3229945855,NL
3229945856,3229947135,US
3229947136,3229947391,AU
3229947392,3229948927,US
3229948928,3229949183,IT
3229949184,3229949695,US
3229949696,3229949951,NZ
-3229949952,3229950207,NO
+3229949952,3229950207,NL
3229950208,3229950975,US
-3229950976,3229951231,IL
+3229950976,3229951231,NL
3229951232,3229952255,US
3229952256,3229952511,AU
3229952512,3229955327,US
3229955328,3229955583,NL
3229955584,3229956095,PT
3229956096,3229956607,US
-3229956608,3229956863,GB
+3229956608,3229956863,NL
3229956864,3229958143,US
-3229958144,3229958399,NO
+3229958144,3229958399,NL
3229958400,3229958655,US
-3229958912,3229959167,SG
-3229959168,3229968895,US
+3229958656,3229959167,AU
+3229959168,3229962239,US
+3229963008,3229963519,US
+3229963776,3229967615,US
+3229967872,3229968127,US
+3229968384,3229968895,US
3229969408,3229969663,PT
3229969664,3229969919,AT
3229969920,3229970431,FI
3229970432,3229972735,US
-3229972736,3229972991,SE
+3229972736,3229972991,NL
3229972992,3229975295,US
3229975296,3229975551,GB
3229975552,3230004223,US
-3230004224,3230004479,GB
+3230004224,3230004479,NL
3230004480,3230004991,US
-3230005760,3230006015,ZA
+3230005760,3230006015,MU
3230006016,3230007295,US
3230007296,3230072831,FR
3230072832,3230074623,US
@@ -107859,16 +55080,16 @@
3230074880,3230082559,IT
3230082560,3230082815,US
3230083072,3230084607,US
-3230084608,3230084863,NO
+3230084608,3230084863,NL
3230084864,3230085119,US
3230085120,3230085375,CA
3230085376,3230085631,US
3230085888,3230086143,DE
3230086144,3230086655,GB
3230087168,3230088191,US
-3230088960,3230089215,AT
+3230088960,3230089215,NL
3230089216,3230089727,US
-3230089728,3230089983,GB
+3230089728,3230089983,NL
3230089984,3230090239,US
3230090240,3230090495,GB
3230090496,3230092543,US
@@ -107879,44 +55100,45 @@
3230094336,3230095615,US
3230095616,3230095871,JP
3230096384,3230101503,JP
-3230101504,3230105855,US
-3230105856,3230106111,PT
+3230101504,3230104319,US
+3230104576,3230105855,US
+3230105856,3230106111,NL
3230106112,3230106879,US
-3230106880,3230107135,AT
+3230106880,3230107135,NL
3230107136,3230109439,US
-3230109440,3230109695,NO
+3230109440,3230109695,NL
3230109696,3230109951,US
3230109952,3230115071,CH
3230115072,3230115327,IT
3230115328,3230115583,GR
3230115584,3230116095,BE
3230116096,3230117631,US
-3230117632,3230117887,FR
+3230117632,3230117887,NL
3230117888,3230120191,US
+3230120192,3230120447,NL
3230120448,3230120703,US
3230120704,3230120959,PT
-3230120960,3230125055,US
+3230120960,3230122495,US
+3230123008,3230125055,US
3230125312,3230125567,US
3230125824,3230126335,AU
3230126336,3230126591,US
+3230126592,3230126847,AU
3230126848,3230128639,US
-3230128896,3230129151,PT
+3230128896,3230129151,NL
3230129152,3230129663,US
-3230129664,3230129919,JP
-3230130176,3230130431,US
-3230130432,3230130687,IE
-3230130688,3230131967,US
+3230129664,3230129919,AU
+3230130432,3230130687,NL
+3230130688,3230131711,US
3230131968,3230132991,GB
3230132992,3230137599,US
-3230137600,3230137855,NO
-3230137856,3230138111,PL
+3230137600,3230138111,NL
3230138368,3230140159,US
3230140160,3230140415,MT
3230140416,3230140671,US
3230140672,3230140927,FI
3230140928,3230142975,US
-3230142976,3230143231,GB
-3230143232,3230143487,BE
+3230142976,3230143487,NL
3230143488,3230144255,US
3230144256,3230144511,NL
3230144512,3230145279,US
@@ -107928,28 +55150,27 @@
3230146560,3230147583,US
3230147840,3230148351,US
3230148352,3230148607,AU
-3230148608,3230148863,GB
-3230148864,3230149119,CH
+3230148608,3230149119,NL
3230149120,3230150655,NI
3230150656,3230150911,US
-3230150912,3230151167,PT
+3230150912,3230151167,NL
3230151168,3230151423,US
-3230151424,3230151679,NL
-3230151680,3230151935,PT
+3230151424,3230151935,NL
3230152192,3230152447,FR
3230152448,3230153215,BF
3230153216,3230153471,FR
-3230153472,3230153727,PF
+3230153472,3230153727,AU
3230153728,3230153983,US
-3230153984,3230154239,RU
+3230153984,3230154239,NL
3230154240,3230156543,US
3230156544,3230164991,FI
-3230164992,3230167295,US
+3230165504,3230167295,US
3230167552,3230168063,CA
-3230168832,3230177791,US
+3230168832,3230174463,US
+3230175232,3230177791,US
3230177792,3230178303,GB
3230178304,3230178559,CH
-3230187520,3230210047,US
+3230179328,3230210047,US
3230210048,3230210303,CA
3230210304,3230211839,US
3230211840,3230212095,CN
@@ -108013,61 +55234,77 @@
3230267904,3230269439,US
3230269440,3230271743,GB
3230272512,3230291455,US
-3230291456,3230291711,PT
+3230291456,3230291711,NL
3230291712,3230295039,US
3230295040,3230295295,AU
3230295296,3230296319,US
3230296320,3230297343,NO
-3230297344,3230300159,SE
+3230297344,3230299647,SE
3230301696,3230302207,US
-3230302208,3230302975,CA
-3230302976,3230309119,US
+3230302464,3230302719,CA
+3230302976,3230307327,US
+3230307584,3230309119,US
3230309120,3230309375,NO
3230309376,3230310143,GB
-3230310144,3230316287,US
-3230316288,3230316543,IT
+3230310144,3230310655,US
+3230310912,3230316287,US
+3230316288,3230316543,NL
3230316544,3230316799,US
3230316800,3230317311,CA
-3230317312,3230318591,US
-3230318592,3230318847,GB
+3230317312,3230317567,US
+3230317568,3230317823,AU
+3230318080,3230318591,US
+3230318592,3230318847,NL
3230318848,3230321663,US
3230321664,3230321919,PT
3230321920,3230322175,US
-3230322432,3230327807,US
+3230322432,3230322943,US
+3230323968,3230327807,US
3230327808,3230328063,AT
3230328064,3230328319,GB
3230328320,3230329087,CH
3230329088,3230332927,US
-3230332928,3230333183,GB
+3230332928,3230333183,NL
3230333184,3230333695,US
-3230333696,3230333951,NZ
-3230333952,3230334975,US
-3230334976,3230354943,CA
+3230333696,3230333951,AU
+3230333952,3230334719,US
+3230334976,3230336255,CA
+3230336512,3230339583,CA
+3230339840,3230340095,CA
+3230340352,3230350847,CA
+3230351104,3230354943,CA
3230354944,3230355199,FR
3230355200,3230365183,CA
3230365184,3230365439,US
-3230365440,3230368767,CA
+3230365440,3230367743,CA
+3230368000,3230368511,CA
3230368768,3230370303,US
3230370304,3230370559,CA
-3230370816,3230400511,CA
+3230370816,3230372607,CA
+3230372864,3230383359,CA
+3230383616,3230384127,CA
+3230384384,3230387455,CA
+3230387712,3230400255,CA
3230681088,3230683135,FR
-3230785536,3230823679,US
-3230823680,3230823935,DK
-3230824192,3230824447,FR
+3230787584,3230797311,US
+3230797312,3230797567,SG
+3230797568,3230823679,US
+3230823680,3230823935,NL
+3230824192,3230824447,NL
3230824448,3230825215,US
3230825216,3230825471,GB
3230825472,3230826239,ES
3230826240,3230827007,US
-3230827520,3230827775,AT
-3230827776,3230828031,NZ
+3230827520,3230827775,NL
+3230827776,3230828031,AU
3230828032,3230828543,HU
3230828544,3230829055,GB
3230829568,3230830079,RU
3230830080,3230832127,US
-3230832128,3230832383,NZ
+3230832128,3230832383,AU
3230832384,3230832639,US
-3230832640,3230832895,FI
-3230832896,3230833663,US
+3230832640,3230832895,NL
+3230832896,3230833151,US
3230833664,3230833919,CA
3230833920,3230834175,BR
3230834176,3230835455,US
@@ -108077,56 +55314,57 @@
3230838016,3230840319,IT
3230840320,3230840575,FR
3230840576,3230840831,US
-3230840832,3230841087,JP
-3230841088,3230841343,DE
-3230841600,3230841855,ES
-3230841856,3230843135,US
-3230843136,3230843391,NO
-3230843392,3230844927,US
+3230840832,3230841087,AU
+3230841088,3230841343,NL
+3230841600,3230841855,NL
+3230841856,3230842111,US
+3230842112,3230842367,AU
+3230842624,3230843135,US
+3230843136,3230843391,NL
+3230843392,3230844671,US
3230844928,3230845183,AU
3230845184,3230845951,US
3230845952,3230846207,CZ
3230846208,3230849535,US
-3230849536,3230850047,NZ
+3230849536,3230850047,AU
3230850048,3230851839,US
-3230851840,3230852095,NO
-3230852096,3230852351,GB
+3230851840,3230852351,NL
3230852352,3230852607,BR
+3230853120,3230853375,AU
3230853376,3230853887,FR
3230853888,3230854399,US
3230854400,3230854655,UY
3230854656,3230855167,NO
3230855168,3230855679,US
-3230855680,3230855935,IT
+3230855680,3230855935,NL
3230855936,3230857983,US
3230857984,3230858751,AU
3230858752,3230859007,US
3230859264,3230865151,US
-3230865152,3230865407,GB
-3230865408,3230867967,US
-3230867968,3230868223,IS
+3230865152,3230865407,NL
+3230865664,3230867967,US
+3230867968,3230868223,NL
3230868224,3230868479,US
-3230868480,3230868735,GB
+3230868480,3230868735,NL
3230868992,3230870015,US
-3230870016,3230870271,PL
+3230870016,3230870271,NL
3230870272,3230873343,US
3230873344,3230873599,HK
-3230873600,3230878719,US
+3230873600,3230877183,US
+3230877696,3230878719,US
3230878720,3230879487,PT
3230879488,3230879743,FR
3230879744,3230888447,US
3230888448,3230888703,AU
3230888704,3230895359,US
-3230895360,3230895615,PL
+3230895360,3230895615,NL
3230895616,3230897151,US
3230897408,3230897663,US
-3230897664,3230897919,GB
+3230897664,3230897919,NL
3230898688,3230898943,US
-3230898944,3230899199,PT
-3230899200,3230913023,US
-3230913024,3230913279,BR
-3230913280,3230913535,US
-3230913536,3230913791,GB
+3230898944,3230899199,NL
+3230899200,3230913535,US
+3230913536,3230913791,NL
3230913792,3230914047,CA
3230914048,3230914303,US
3230914304,3230914815,FI
@@ -108134,20 +55372,23 @@
3230915072,3230915327,BR
3230915328,3230915583,GB
3230915584,3230917631,US
-3230917632,3230917887,GB
+3230917632,3230917887,NL
3230917888,3230918399,US
3230918656,3230919423,US
3230919424,3230919679,AU
3230919680,3230922239,US
3230922240,3230922495,AU
-3230922496,3230922751,IT
+3230922496,3230922751,NL
3230922752,3230923519,US
-3230923520,3230923775,EU
-3230923776,3230933247,US
+3230923776,3230924031,US
+3230924032,3230924287,AU
+3230924288,3230924543,US
+3230924800,3230933247,US
3230933248,3230948607,SE
3230948608,3230951167,US
-3230951168,3230951423,PT
-3230951424,3230953471,US
+3230951168,3230951423,NL
+3230951680,3230951935,US
+3230952192,3230953471,US
3230953472,3230954495,CA
3230954496,3230967295,AU
3230967296,3230967551,RU
@@ -108168,27 +55409,26 @@
3230980096,3230980351,GB
3230980352,3230980607,CA
3230980608,3230980863,US
-3230981120,3230981375,IT
-3230981376,3230981631,NZ
+3230981120,3230981375,NL
+3230981376,3230981631,AU
3230981632,3230981887,US
3230981888,3230983935,AU
-3230983936,3230990335,US
+3230983936,3230989823,US
3230990592,3230991103,US
3230991104,3230991359,PL
3230991360,3230991615,US
3230991616,3230991871,FI
3230991872,3230994175,US
-3230994176,3230994431,GB
+3230994176,3230994431,NL
3230994432,3230994687,US
3230994944,3230995199,US
-3230995200,3230995455,ES
+3230995200,3230995455,NL
3230995456,3230995711,AU
3230995712,3230996223,US
3230996480,3230997247,US
-3230997248,3230997503,AT
+3230997248,3230997503,NL
3230997504,3230997759,US
-3230997760,3230998015,SE
-3230998016,3230999039,NL
+3230997760,3230999039,SE
3230999040,3230999295,US
3230999296,3230999551,NL
3230999552,3230999807,AU
@@ -108198,7 +55438,7 @@
3231001088,3231003903,US
3231003904,3231004159,CA
3231004160,3231004415,AU
-3231004416,3231004927,US
+3231004672,3231004927,US
3231004928,3231005183,GB
3231005440,3231005695,FR
3231005696,3231005951,GB
@@ -108207,67 +55447,82 @@
3231010048,3231010303,FR
3231010304,3231010815,NO
3231010816,3231011071,CA
-3231011072,3231014911,US
+3231011328,3231011839,US
+3231012096,3231012863,US
+3231013120,3231013375,US
+3231013888,3231014655,US
3231015168,3231015423,US
3231015424,3231015679,CA
3231015680,3231015935,US
3231015936,3231016191,NO
3231016192,3231016447,US
3231016448,3231016703,NO
-3231016704,3231018495,US
-3231018496,3231018751,IT
+3231016704,3231016959,US
+3231017216,3231018495,US
+3231018496,3231018751,NL
3231018752,3231019007,GB
-3231019008,3231020287,US
+3231019008,3231019775,US
+3231020032,3231020287,US
3231020288,3231020543,GB
3231020544,3231020799,NL
3231020800,3231021567,GB
3231021568,3231021823,US
3231021824,3231022079,CA
3231022080,3231022591,US
-3231022592,3231022847,DE
-3231022848,3231042047,US
+3231022592,3231022847,NL
+3231022848,3231028479,US
+3231028480,3231028735,AU
+3231028736,3231042047,US
3231042048,3231042303,GU
3231042304,3231043839,US
-3231043840,3231044095,JP
-3231044352,3231047935,US
-3231047936,3231048191,GB
-3231048192,3231048447,US
+3231043840,3231044095,AU
+3231044352,3231048447,US
3231048448,3231048703,NL
3231048704,3231049727,US
3231049728,3231049983,AT
3231049984,3231050239,US
3231050496,3231051263,US
3231051264,3231051519,GB
-3231051776,3231057919,US
-3231057920,3231058175,EU
-3231058176,3231060991,US
-3231060992,3231061247,EU
-3231061248,3231070463,US
-3231070720,3231077119,SE
+3231051520,3231051775,AU
+3231051776,3231053055,US
+3231053824,3231055103,US
+3231055872,3231057151,US
+3231057152,3231057407,CA
+3231057408,3231070463,US
+3231070720,3231074559,SE
+3231075072,3231075583,NL
+3231075840,3231077119,SE
3231077120,3231077375,PL
3231077376,3231077631,SE
3231078144,3231078655,US
-3231078656,3231078911,GB
+3231078656,3231078911,NL
3231078912,3231079423,CA
-3231079424,3231079679,GB
+3231079424,3231079679,NL
3231079680,3231079935,US
3231079936,3231080191,NL
-3231080192,3231082495,US
-3231082496,3231082751,PL
+3231080192,3231080447,US
+3231080448,3231080703,AU
+3231080704,3231082495,US
+3231082496,3231082751,NL
3231082752,3231083007,US
3231083008,3231083263,GB
+3231083264,3231083519,AU
3231083520,3231087615,US
3231087616,3231087871,NO
3231087872,3231088127,US
3231088128,3231088383,GT
3231088384,3231088895,US
-3231088896,3231091711,AU
-3231091712,3231091967,GB
+3231088896,3231090687,AU
+3231090944,3231091711,AU
+3231091712,3231091967,NL
3231091968,3231092223,US
3231092480,3231092735,US
+3231092736,3231092991,AU
3231092992,3231093247,US
-3231093248,3231093503,IT
-3231093504,3231101183,US
+3231093248,3231093503,NL
+3231093504,3231094527,US
+3231094784,3231100415,US
+3231100672,3231101183,US
3231101184,3231103231,GB
3231103488,3231103999,US
3231104000,3231104255,NO
@@ -108278,6 +55533,7 @@
3231106304,3231106559,NO
3231106560,3231106815,GB
3231106816,3231107071,US
+3231107072,3231107327,AU
3231107328,3231107583,US
3231107584,3231107839,AU
3231107840,3231108095,AT
@@ -108308,10 +55564,12 @@
3231121408,3231149311,US
3231149312,3231149567,CA
3231149568,3231154431,US
+3231154432,3231154687,AU
3231155200,3231155711,US
3231155712,3231156223,CA
-3231156224,3231162367,US
-3231170560,3231186687,US
+3231156224,3231174655,US
+3231174656,3231182847,CN
+3231182848,3231186687,US
3231186688,3231186943,CN
3231186944,3231188479,US
3231188480,3231188735,NO
@@ -108321,7 +55579,7 @@
3231191296,3231191551,GB
3231191552,3231192575,US
3231193600,3231194111,DE
-3231194112,3231197695,US
+3231194368,3231197695,US
3231197696,3231197951,FR
3231197952,3231198207,US
3231198208,3231198463,GB
@@ -108336,10 +55594,11 @@
3231203072,3231203327,AT
3231203328,3231204351,US
3231204352,3231204607,FI
-3231204608,3231204863,JP
+3231204608,3231204863,AU
3231204864,3231207935,US
3231207936,3231208191,DE
3231208192,3231208959,US
+3231208960,3231209471,AU
3231209472,3231211775,US
3231211776,3231212031,CA
3231212032,3231212287,CH
@@ -108356,7 +55615,11 @@
3231218688,3231218943,BE
3231218944,3231223039,US
3231223040,3231223295,IT
-3231223296,3231225599,US
+3231223296,3231223807,US
+3231223808,3231224063,AU
+3231224064,3231224319,US
+3231224320,3231224575,AU
+3231224576,3231225599,US
3231225600,3231225855,DE
3231226368,3231226879,US
3231226880,3231227135,GB
@@ -108367,15 +55630,20 @@
3231229696,3231229951,FR
3231229952,3231231487,US
3231231488,3231231743,PT
-3231231744,3231234047,US
+3231231744,3231233023,US
+3231233536,3231234047,US
3231234048,3231235071,GB
3231235072,3231236095,US
3231236608,3231236863,US
3231236864,3231237119,CA
-3231237120,3231241215,US
-3231241216,3231241471,JP
-3231241984,3231248639,US
-3231248640,3231248895,GB
+3231237120,3231237375,US
+3231237376,3231237631,AU
+3231237632,3231238911,US
+3231239168,3231241215,US
+3231241216,3231241471,AU
+3231241984,3231244287,US
+3231244544,3231248639,US
+3231248640,3231248895,NL
3231248896,3231249407,US
3231249408,3231249663,GB
3231249664,3231250431,US
@@ -108384,191 +55652,123 @@
3231251712,3231251967,GB
3231251968,3231252223,AT
3231252736,3231252991,US
-3231252992,3231253503,GB
-3231253504,3231255551,US
-3231255552,3231255807,GB
+3231252992,3231253503,NL
+3231253504,3231254015,US
+3231254272,3231254783,US
+3231254784,3231255039,AU
+3231255040,3231255551,US
3231255808,3231256063,PT
-3231256064,3231257087,US
+3231256320,3231257087,US
3231257088,3231257599,HU
-3231257600,3231275007,US
+3231257600,3231258879,US
+3231259136,3231275007,US
3231275008,3231275263,BR
-3231275264,3231275519,CH
+3231275264,3231275519,NL
3231275520,3231276287,US
3231276288,3231276543,AU
3231276544,3231276799,US
3231276800,3231281919,JP
3231281920,3231282175,US
3231282176,3231282431,HU
-3231282432,3231282943,US
+3231282688,3231282943,US
3231282944,3231283199,CL
3231283200,3231283455,BR
3231283456,3231284991,US
-3231284992,3231285247,PL
+3231284992,3231285247,NL
3231285248,3231291647,US
-3231291648,3231291903,GB
+3231291648,3231291903,NL
3231291904,3231292159,US
-3231292160,3231292415,BR
3231292416,3231292927,US
3231292928,3231293183,AU
3231293184,3231294975,US
-3231294976,3231295231,GB
+3231294976,3231295231,NL
3231295232,3231295487,CR
-3231295488,3231295743,BE
+3231295488,3231295743,NL
3231295744,3231296255,US
-3231296256,3231296511,RU
+3231296256,3231296511,NL
3231296512,3231296767,US
3231296768,3231299327,AT
3231299328,3231299583,US
3231300352,3231300607,US
-3231300608,3231300863,SE
-3231300864,3231301119,GB
+3231300608,3231301119,NL
3231301120,3231302143,US
3231302144,3231302399,NO
3231302400,3231302655,US
3231302656,3231303167,AU
3231303168,3231307007,US
-3231307008,3231307263,GB
+3231307008,3231307263,NL
3231307264,3231308031,US
3231308032,3231308287,CA
3231308288,3231308799,US
3231308800,3231309055,CA
-3231309824,3231316735,US
-3231316736,3231316991,NZ
-3231316992,3231322111,US
+3231310848,3231316735,US
+3231316736,3231316991,AU
+3231316992,3231317759,US
+3231318272,3231318783,US
+3231319040,3231322111,US
3231322112,3231324671,SG
3231325184,3231326207,CA
3231326208,3231352831,US
3231352832,3231358975,CA
-3231367168,3231383551,US
+3231358976,3231383551,US
3231383552,3231385599,NO
-3231385600,3231408127,US
-3231416320,3231475199,US
-3231475200,3231475455,PL
-3231475456,3231482879,US
+3231385600,3231477759,US
+3231477760,3231478015,CA
+3231478016,3231482879,US
3231482880,3231483135,BE
3231483136,3231484927,US
-3231484928,3231490047,JP
+3231484928,3231487999,JP
+3231488512,3231488767,JP
+3231489536,3231490047,AU
3231490048,3231490559,US
-3231490560,3231490815,GB
+3231490560,3231490815,NL
3231490816,3231491071,US
-3231491328,3231491583,NZ
+3231491328,3231491583,AU
3231491584,3231491839,US
3231491840,3231492095,GB
3231492096,3231493631,US
3231493632,3231493887,CH
-3231493888,3231499263,US
+3231493888,3231497727,US
+3231497984,3231499263,US
3231499520,3231500031,US
3231500032,3231500287,BM
3231500288,3231502079,US
-3231502080,3231502335,AU
+3231502080,3231502591,AU
3231502592,3231502847,US
-3231502848,3231503103,PT
+3231502848,3231503103,NL
3231503104,3231503615,US
3231503616,3231503871,IT
3231503872,3231504383,US
-3231504640,3231504895,RU
-3231504896,3231506687,US
-3231506688,3231506943,NZ
+3231504640,3231504895,NL
+3231505152,3231505407,US
+3231505408,3231505663,AU
+3231505664,3231506687,US
+3231506688,3231506943,AU
3231506944,3231507199,US
3231507200,3231507455,BE
3231507456,3231508479,US
3231508992,3231509247,US
-3231510272,3231510527,GB
+3231510272,3231510527,NL
3231510528,3231512575,US
3231512576,3231512831,LU
+3231512832,3231513087,AU
3231513088,3231513343,US
-3231513600,3231514623,US
+3231513600,3231514367,US
3231514624,3231515647,NO
3231515648,3231516159,US
-3231516672,3231519231,SE
-3231519744,3231526927,US
-3231526928,3231526943,CA
-3231526944,3231526983,US
-3231526984,3231526991,CA
-3231526992,3231527039,US
-3231527040,3231527047,CA
-3231527048,3231527055,US
-3231527056,3231527063,CA
-3231527064,3231527095,US
-3231527096,3231527103,CA
-3231527104,3231527111,US
-3231527112,3231527127,CA
-3231527128,3231527135,US
-3231527136,3231527143,CA
-3231527144,3231527151,US
-3231527152,3231527159,CA
-3231527160,3231527167,US
-3231527168,3231527423,CA
-3231527424,3231527679,US
-3231527680,3231527967,CA
-3231527968,3231527983,US
-3231527984,3231527991,CA
-3231527992,3231527999,US
-3231528000,3231528015,CA
-3231528016,3231528039,US
-3231528040,3231528047,CA
-3231528048,3231528063,US
-3231528064,3231528079,CA
-3231528080,3231528087,SE
-3231528088,3231528103,CA
-3231528104,3231528119,US
-3231528120,3231528127,GB
-3231528128,3231528159,US
-3231528160,3231528167,CA
-3231528168,3231528183,US
-3231528184,3231528191,GB
-3231528192,3231528447,IN
-3231528448,3231528455,US
-3231528456,3231528511,CA
-3231528512,3231528575,IN
-3231528576,3231528703,CA
-3231528704,3231528959,US
+3231516672,3231518719,SE
+3231518720,3231518975,BR
+3231518976,3231519231,SE
+3231519744,3231521791,US
+3231522560,3231528959,US
3231528960,3231528999,CA
-3231529000,3231529007,US
-3231529008,3231529015,PH
-3231529016,3231529031,LV
-3231529032,3231529039,CA
-3231529040,3231529047,PH
-3231529048,3231529055,CA
-3231529056,3231529063,PH
-3231529064,3231529071,US
-3231529072,3231529119,CA
-3231529120,3231529175,US
-3231529176,3231529191,CA
-3231529192,3231529207,US
-3231529208,3231529215,NL
-3231529216,3231529487,CA
-3231529488,3231529495,US
-3231529496,3231529599,CA
-3231529600,3231529727,US
-3231529728,3231529983,CA
-3231529984,3231530007,US
-3231530008,3231530015,CA
-3231530016,3231530031,US
-3231530032,3231530047,CA
-3231530048,3231530127,US
-3231530128,3231530135,CA
-3231530136,3231530143,US
-3231530144,3231530151,CA
-3231530152,3231530159,US
-3231530160,3231530167,CA
-3231530168,3231530191,US
-3231530192,3231530199,CA
-3231530200,3231530215,US
-3231530216,3231530223,CA
-3231530224,3231530231,US
-3231530232,3231530239,CA
-3231530240,3231530271,US
-3231530272,3231530287,CA
-3231530288,3231530295,US
-3231530296,3231530335,CA
-3231530336,3231530343,US
-3231530344,3231530367,CA
-3231530368,3231530375,US
-3231530376,3231530559,CA
-3231530560,3231539199,US
+3231529000,3231529015,US
+3231529016,3231530751,CA
+3231530752,3231533567,US
+3231534080,3231539199,US
+3231539200,3231547391,CA
3231547392,3231547647,US
-3231547648,3231547903,NO
+3231547648,3231547903,NL
3231547904,3231549951,US
3231549952,3231550207,JP
3231550208,3231550719,DE
@@ -108579,71 +55779,74 @@
3231553024,3231553791,JP
3231553792,3231554047,CH
3231554048,3231555327,DE
-3231555328,3231556095,CA
+3231555328,3231555583,CA
+3231555584,3231556095,US
+3231556096,3231556351,AU
3231556352,3231556607,US
3231556608,3231556863,CA
-3231556864,3231557119,AT
-3231557120,3231557887,US
+3231556864,3231557887,AT
3231557888,3231558399,GB
3231558400,3231558655,DE
3231558656,3231558911,GB
3231558912,3231559167,CA
-3231559168,3231559423,GB
+3231559168,3231559423,NL
3231559424,3231559679,US
-3231559680,3231559935,GB
+3231559680,3231559935,NL
3231559936,3231561983,US
-3231561984,3231562239,IT
+3231561984,3231562239,NL
3231562240,3231562495,US
-3231562496,3231562751,GB
+3231562496,3231562751,NL
3231562752,3231563007,US
-3231563008,3231563263,CH
-3231563264,3231563519,ZA
+3231563008,3231563263,NL
+3231563264,3231563519,MU
+3231563520,3231563775,AU
3231563776,3231583231,US
3231583232,3231584255,CA
-3231584256,3231588863,US
+3231584256,3231586559,US
+3231587328,3231588863,US
3231588864,3231589119,GB
3231589120,3231591679,US
3231591680,3231591935,AU
-3231591936,3231594239,US
-3231594240,3231594495,GB
-3231594496,3231649791,US
+3231591936,3231593983,US
+3231593984,3231594495,GB
+3231594496,3231644927,US
+3231645184,3231645439,US
+3231645696,3231649791,US
3231649792,3231653887,SG
3231653888,3231663103,US
-3231663616,3231663871,FI
+3231663616,3231663871,NL
3231663872,3231664127,CA
3231664128,3231664383,US
-3231664384,3231664639,GB
+3231664384,3231664639,NL
3231664640,3231665407,US
-3231665408,3231665663,IT
+3231665408,3231665663,NL
3231665664,3231667199,US
-3231667200,3231667711,ES
+3231667200,3231667711,NL
3231667712,3231668735,US
3231668736,3231668991,BE
3231669248,3231669503,US
3231669760,3231670015,CA
-3231670016,3231670271,DE
+3231670016,3231670271,NL
3231670272,3231671039,US
3231671040,3231672319,GB
3231672320,3231672575,US
3231672576,3231672831,NL
3231672832,3231673343,US
-3231673344,3231673599,NO
-3231673600,3231673855,IE
+3231673344,3231673855,NL
3231673856,3231674111,US
3231674112,3231674367,CA
3231674368,3231675391,US
-3231675392,3231675903,BR
-3231675904,3231676159,IE
-3231676672,3231676927,FR
-3231676928,3231677183,FI
-3231677440,3231686655,US
+3231675392,3231675647,BR
+3231675904,3231676159,NL
+3231676416,3231677439,NL
+3231677440,3231694847,US
3231694848,3231711231,CA
3231711232,3231713023,US
3231713024,3231713279,CA
3231713280,3231713791,US
3231713792,3231714047,GB
3231714048,3231715071,US
-3231715072,3231715327,SI
+3231715072,3231715327,NL
3231715328,3231715583,AU
3231715584,3231716095,US
3231716096,3231716351,AU
@@ -108653,76 +55856,80 @@
3231717120,3231717375,NO
3231717632,3231718143,US
3231718144,3231718399,IT
-3231718400,3231719679,US
-3231719680,3231719935,ES
+3231718400,3231718655,US
+3231718656,3231718911,AU
+3231718912,3231719679,US
+3231719680,3231719935,NL
3231720192,3231720703,US
-3231720704,3231720959,IT
+3231720704,3231720959,NL
3231720960,3231722751,US
3231722752,3231723007,BR
3231723008,3231723519,US
3231723776,3231724031,US
3231724032,3231724287,BR
-3231724288,3231727871,US
-3231727872,3231728127,DE
-3231728384,3231728639,AT
+3231724288,3231725055,US
+3231725312,3231727871,US
+3231727872,3231728127,NL
+3231728384,3231728639,NL
3231728640,3231729407,US
3231729408,3231729663,AU
3231729664,3231735551,US
3231735552,3231736063,CH
-3231736064,3231738367,US
+3231736064,3231737087,US
+3231737600,3231738367,US
3231738368,3231738623,NL
3231738624,3231739135,US
-3231739136,3231739391,GB
-3231739392,3231739647,PL
+3231739136,3231739647,NL
3231739648,3231739903,BR
3231739904,3231742719,US
-3231742720,3231742975,FR
+3231742720,3231742975,NL
3231742976,3231743487,US
-3231743488,3231743743,NO
+3231743488,3231743743,NL
3231743744,3231743999,US
3231744000,3231744255,BR
3231744256,3231747583,US
-3231747584,3231747839,DE
-3231747840,3231748095,GB
+3231747584,3231748095,NL
3231748096,3231750143,US
3231750144,3231750399,NL
3231750400,3231750911,US
+3231750912,3231751167,AU
3231751168,3231751423,IT
3231751424,3231752191,US
-3231752192,3231752447,IT
-3231752448,3231752703,JP
+3231752192,3231752447,NL
+3231752448,3231752703,AU
3231752704,3231753983,US
3231753984,3231754239,CA
3231754240,3231754495,US
3231754496,3231755263,AU
-3231755264,3231755519,HU
+3231755264,3231755519,NL
3231755520,3231755775,US
3231755776,3231756543,PR
3231756544,3231757311,GB
3231757312,3231759359,US
-3231759360,3231759615,BR
3231759616,3231760895,US
-3231760896,3231761407,GB
+3231760896,3231761151,GB
+3231761152,3231761407,NL
3231761408,3231763711,US
3231763712,3231763967,AU
3231763968,3231768575,US
-3231768576,3231768831,RU
-3231768832,3231769087,NO
+3231768576,3231769087,NL
+3231769088,3231769343,AU
3231769344,3231769855,US
3231769856,3231770111,AU
3231770112,3231770367,US
3231770368,3231770879,AT
3231770880,3231771135,RU
3231771136,3231773951,US
-3231773952,3231775743,PT
-3231775744,3231775999,IL
+3231773952,3231775231,PT
+3231775488,3231775999,NL
3231776000,3231776511,US
3231776768,3231793151,US
-3231793152,3231793663,BE
+3231793152,3231793663,NL
3231794176,3231800319,US
3231800320,3231801343,CN
-3231809536,3231810047,NZ
-3231810560,3231817727,US
+3231801344,3231809535,CA
+3231809536,3231810047,AU
+3231810560,3231825919,US
3231825920,3231842303,CA
3231842304,3231843327,RU
3231843328,3231844351,NO
@@ -108766,7 +55973,7 @@
3231886336,3231888383,PL
3231888384,3231889407,RU
3231889408,3231890431,RO
-3231890432,3231893503,RU
+3231890432,3231892479,RU
3231893504,3231894527,UA
3231895552,3231896575,UA
3231896576,3231897599,RU
@@ -108779,11 +55986,10 @@
3231903744,3231905791,RU
3231905792,3231906047,PL
3231906048,3231907839,RU
-3231907840,3231912959,US
-3231912960,3231913215,AP
+3231907840,3231913215,US
3231913984,3231916031,US
3231916032,3231948799,FI
-3231956992,3231973375,US
+3231948800,3231973375,US
3231973376,3232038911,AT
3232038912,3232039167,SE
3232039168,3232039423,DK
@@ -108792,68 +55998,49 @@
3232047360,3232048639,GB
3232048640,3232049151,SE
3232049152,3232049407,GB
-3232049408,3232051199,SE
-3232051200,3232051455,AT
-3232051456,3232051967,SE
+3232049408,3232051967,SE
3232051968,3232052991,GB
3232052992,3232053247,US
3232053248,3232056063,SE
3232056064,3232056319,IT
-3232056320,3232060159,SE
-3232060160,3232060415,GB
+3232056320,3232060415,SE
3232060416,3232060671,IE
-3232060672,3232060927,IT
-3232060928,3232065791,SE
+3232060672,3232065791,SE
3232065792,3232066303,GB
3232066304,3232066559,SE
3232066560,3232066815,NO
-3232066816,3232067839,SE
-3232067840,3232068095,PL
-3232068096,3232069887,SE
-3232069888,3232070143,CH
-3232070144,3232070399,SE
-3232070400,3232070655,ES
-3232070656,3232079871,SE
+3232066816,3232079871,SE
3232079872,3232080895,GB
3232080896,3232082687,SE
3232082688,3232083199,GB
3232083200,3232083455,SE
3232083456,3232083711,DE
-3232083712,3232086271,SE
-3232086272,3232087039,GB
+3232083712,3232086527,SE
+3232086528,3232087039,GB
3232087040,3232089087,SE
3232089088,3232089343,ES
3232089344,3232090367,SE
3232090368,3232090623,IT
-3232090624,3232092671,SE
-3232092672,3232093183,GB
-3232093184,3232093439,US
+3232090624,3232093439,SE
3232093440,3232093675,GB
-3232093676,3232093676,EU
+3232093676,3232093676,SE
3232093677,3232093695,GB
-3232093696,3232093951,AP
-3232093952,3232094207,GB
-3232094208,3232094719,CH
-3232094720,3232095231,US
+3232093696,3232095231,SE
3232095232,3232096255,GB
-3232096256,3232097279,SE
-3232097280,3232097535,IT
-3232097536,3232098047,SE
+3232096256,3232098047,SE
3232098048,3232098303,FR
3232098304,3232100095,SE
3232100096,3232100351,IE
3232100352,3232101119,GB
-3232101120,3232102144,SE
-3232102145,3232102145,EU
-3232102146,3232104447,SE
-3232104448,3232107519,DE
+3232101120,3232104447,SE
+3232104448,3232106495,DE
3232107520,3232108543,RU
-3232108544,3232129023,DE
+3232108544,3232112639,DE
+3232116736,3232129023,DE
3232129024,3232130047,NL
3232130048,3232131071,UA
3232131072,3232133119,DE
3232133120,3232133631,UA
-3232133632,3232134143,DE
3232134144,3232135167,RU
3232135168,3232135679,PL
3232135680,3232135935,RO
@@ -108866,51 +56053,55 @@
3232142336,3232143359,ES
3232143360,3232156159,DE
3232156160,3232156671,PL
-3232156672,3232159743,DE
+3232157696,3232159743,DE
3232159744,3232160767,PL
-3232160768,3232163839,DE
+3232160768,3232161791,DE
3232163840,3232165887,RU
-3232165888,3232169727,DE
+3232167936,3232168959,DE
+3232169216,3232169727,DE
3232169728,3232169983,PL
-3232169984,3232235519,IT
-3232301056,3232309247,US
+3232169984,3232183295,IT
+3232183296,3232184319,SI
+3232184320,3232235519,IT
+3232301056,3232302335,US
+3232303104,3232303615,US
+3232304128,3232309247,US
3232309248,3232311807,SG
-3232312320,3232325631,US
-3232333824,3232407039,US
+3232312320,3232317951,US
+3232318464,3232399615,US
+3232400384,3232407039,US
3232407040,3232407551,SG
-3232415744,3232432127,US
-3232432128,3232433151,EU
-3232433152,3232433407,FR
-3232433408,3232433663,EU
-3232433920,3232440319,US
-3232448512,3232462847,US
+3232407552,3232432127,US
+3232433920,3232435455,US
+3232436224,3232436735,US
+3232437248,3232440319,US
+3232440320,3232448511,CA
+3232448512,3232461311,US
+3232461824,3232462847,US
3232462848,3232464895,BB
3232464896,3232483327,GB
-3232485376,3232489471,US
-3232497664,3232555007,US
-3232555264,3232555640,US
-3232555641,3232555641,US
-3232555642,3232555775,US
-3232555776,3232560127,JP
-3232560384,3232560895,JP
+3232483328,3232555007,US
+3232555264,3232555775,US
+3232555776,3232557055,JP
+3232557056,3232557311,AU
+3232557568,3232560127,JP
3232560896,3232561663,US
3232561664,3232561919,CA
3232561920,3232562431,US
-3232562432,3232562687,LU
+3232562432,3232562687,NL
3232562688,3232562943,CA
-3232563200,3232565247,GB
+3232563456,3232564479,GB
3232565248,3232567295,US
3232567296,3232569599,NZ
3232570368,3232571391,CA
3232571392,3232595967,US
3232595968,3232598015,GB
-3232600064,3232604159,US
-3232612352,3232628735,US
+3232598016,3232628735,US
3232629248,3232629759,US
3232629760,3232630783,CA
3232630784,3232645119,US
-3232645120,3232647167,AT
-3232649216,3232653311,US
+3232645120,3232646399,AT
+3232647168,3232661503,US
3232661504,3232694271,JP
3232694272,3232702463,US
3232702464,3232703743,FI
@@ -108918,8 +56109,11 @@
3232704000,3232704511,CH
3232704512,3232705535,GB
3232705536,3232706559,FI
-3232706560,3232708607,US
-3232710656,3232718847,US
+3232706560,3232706815,US
+3232707584,3232716799,US
+3232716800,3232724151,CA
+3232724152,3232724159,US
+3232724160,3232727039,CA
3232727040,3232759807,US
3232759808,3232772095,SE
3232772096,3232774143,IT
@@ -108940,100 +56134,125 @@
3232813056,3232820223,SE
3232820224,3232820479,IE
3232820480,3232825343,SE
-3232890880,3233286143,US
+3232825344,3233285375,US
+3233286144,3233288191,US
3233288192,3233292287,CA
-3233316864,3233349631,US
-3233480704,3233484799,US
+3233292288,3233431551,US
+3233431552,3233447935,CA
+3233447936,3233449095,US
+3233449096,3233449103,GB
+3233449104,3233449207,US
+3233449208,3233449215,GB
+3233449216,3233449359,US
+3233449360,3233449367,GB
+3233449368,3233450199,US
+3233450200,3233450207,GB
+3233450208,3233451519,US
+3233451520,3233451775,GB
+3233451776,3233453567,US
+3233453568,3233453823,IT
+3233453824,3233456127,US
+3233456128,3233456383,LV
+3233456384,3233456639,UA
+3233456640,3233457151,CA
+3233457152,3233458687,US
+3233458688,3233458943,HU
+3233458944,3233459199,BG
+3233459200,3233484799,US
3233484800,3233487359,ES
3233487872,3233488895,CA
-3233488896,3233505279,US
-3233513472,3233548287,US
-3233548800,3233549055,PT
+3233488896,3233547519,US
+3233547520,3233547775,CA
+3233547776,3233548287,US
+3233548800,3233549055,NL
3233549056,3233549311,BR
3233549312,3233557247,US
-3233557248,3233557503,NZ
+3233557248,3233557503,AU
3233557504,3233561855,EC
3233561856,3233562367,US
3233562368,3233562879,GB
3233562880,3233563135,FR
3233563136,3233563903,US
-3233563904,3233564159,GB
+3233563904,3233564159,NL
3233564160,3233564415,US
-3233564416,3233564671,NZ
+3233564416,3233564671,AU
3233564672,3233564927,US
-3233564928,3233570047,JP
+3233564928,3233566719,JP
+3233567744,3233568767,JP
+3233568768,3233570047,AU
3233570048,3233570559,US
3233570816,3233571071,GB
3233571072,3233572095,US
3233572096,3233572351,AU
3233572352,3233573119,US
-3233573120,3233573375,NO
+3233573120,3233573375,NL
3233573376,3233573631,US
3233573632,3233573887,AU
3233573888,3233575679,US
3233575680,3233575935,AU
3233575936,3233576191,RU
3233576192,3233576447,GB
-3233576448,3233577215,US
-3233577216,3233577471,AT
-3233577472,3233577727,GB
+3233576448,3233576959,US
+3233576960,3233577983,NL
3233577984,3233578239,US
-3233578240,3233578495,GB
+3233578240,3233578495,NL
3233578496,3233578751,US
-3233578752,3233579007,IE
-3233579264,3233579519,GB
+3233578752,3233579007,NL
+3233579008,3233579263,AU
+3233579264,3233579519,NL
3233579520,3233580031,US
-3233580032,3233580287,GB
+3233580032,3233580287,NL
3233580288,3233581055,US
-3233581056,3233581311,DE
+3233581056,3233581311,NL
3233581312,3233583359,US
-3233583360,3233583615,GB
+3233583360,3233583615,NL
3233583616,3233584895,US
3233584896,3233585151,AU
3233585152,3233586431,US
-3233586432,3233586943,GB
+3233586432,3233586943,NL
3233586944,3233588223,US
3233588224,3233589247,GA
3233589248,3233589759,CA
3233589760,3233590015,CN
3233590528,3233590783,PR
-3233590784,3233591039,PH
-3233591040,3233591295,ID
-3233591296,3233593599,US
+3233590784,3233591295,AU
+3233591552,3233593599,US
3233593600,3233593855,NZ
3233593856,3233594111,AU
-3233594112,3233594367,RU
+3233594112,3233594367,NL
3233594368,3233594623,US
-3233594624,3233594879,RU
+3233594624,3233594879,NL
3233594880,3233595903,US
3233595904,3233596927,EC
-3233596928,3233605887,US
+3233596928,3233597695,US
+3233597952,3233605887,US
3233605888,3233607167,PL
3233607168,3233607935,US
-3233607936,3233608191,NZ
+3233607936,3233608191,AU
3233608192,3233609727,HU
-3233609728,3233611775,US
-3233612032,3233612287,GB
+3233609984,3233610495,US
+3233610752,3233611519,US
+3233612032,3233612287,NL
3233612544,3233613823,US
3233613824,3233614847,GB
3233615104,3233615359,US
-3233615360,3233615615,DE
+3233615360,3233615615,NL
3233615616,3233617151,US
3233617408,3233617663,CA
-3233617664,3233617919,GB
-3233617920,3233618175,JP
+3233617664,3233617919,NL
+3233617920,3233618175,AU
3233619456,3233620479,US
-3233620480,3233620735,NZ
+3233620480,3233620735,AU
3233620736,3233620991,US
3233620992,3233622015,CA
-3233622272,3233622527,GB
+3233622272,3233622527,NL
3233622528,3233624831,US
-3233624832,3233625087,AT
-3233625088,3233625343,GB
+3233624832,3233625343,NL
3233625344,3233625599,US
3233625600,3233625855,AU
-3233625856,3233626111,GB
-3233626112,3233628671,US
+3233625856,3233626111,NL
+3233626112,3233626879,US
+3233627136,3233628671,US
3233628672,3233628927,FR
3233628928,3233629439,CA
3233629440,3233629695,GB
@@ -109041,57 +56260,62 @@
3233629952,3233630463,US
3233630464,3233630719,NL
3233630720,3233630975,US
-3233630976,3233631231,ZA
-3233631232,3233631487,DE
+3233630976,3233631231,MU
+3233631232,3233631487,NL
3233631488,3233631743,US
-3233632000,3233642239,US
+3233632000,3233635839,US
+3233635840,3233636095,AU
+3233636096,3233642239,US
3233642240,3233642495,GB
3233642496,3233646591,US
3233646592,3233646847,AU
3233646848,3233647359,US
-3233647360,3233647871,GA
+3233647360,3233647871,MU
3233647872,3233649663,US
3233649664,3233649919,AU
3233649920,3233650431,US
-3233650432,3233650687,DE
-3233651200,3233651455,IT
+3233650432,3233650687,NL
+3233651200,3233651455,NL
3233651456,3233651967,US
-3233651968,3233652223,GB
+3233651968,3233652223,NL
3233652224,3233652479,US
-3233652736,3233652991,GB
+3233652480,3233652735,AU
+3233652736,3233652991,NL
3233652992,3233654271,US
3233654272,3233655551,GB
3233655552,3233662975,US
-3233663488,3233663999,GB
-3233664000,3233665023,US
+3233663488,3233663999,NL
+3233664256,3233665023,US
3233665024,3233666047,AU
3233666048,3233668863,US
-3233668864,3233669119,PH
+3233668864,3233669119,AU
3233669120,3233670399,US
3233670400,3233670655,AU
-3233671168,3233675263,US
+3233671680,3233675263,US
3233675520,3233676031,US
-3233676032,3233676287,DE
-3233676288,3233684991,US
-3233684992,3233685503,BR
-3233685504,3233688063,US
-3233688576,3233688831,GB
+3233676032,3233676287,NL
+3233676288,3233677055,US
+3233677312,3233679103,US
+3233679360,3233682431,US
+3233682944,3233684991,US
+3233685248,3233685503,BR
+3233685760,3233688063,US
+3233688576,3233688831,NL
3233688832,3233692159,US
-3233692160,3233692671,NO
+3233692160,3233692671,NL
3233692672,3233692927,US
3233692928,3233693183,AU
3233693184,3233693695,US
-3233693696,3233693951,GB
+3233693696,3233693951,NL
3233693952,3233694207,US
3233694208,3233694463,AU
-3233694464,3233694719,GB
+3233694464,3233694719,NL
3233694720,3233694975,US
3233694976,3233695231,FR
3233695232,3233696511,US
3233696512,3233696767,CA
-3233696768,3233697791,US
-3233699840,3233700863,US
-3233701632,3233701887,NO
+3233696768,3233700863,US
+3233701632,3233701887,NL
3233701888,3233704959,US
3233704960,3233705215,NZ
3233705216,3233710335,US
@@ -109101,23 +56325,26 @@
3233721856,3233722111,PT
3233722112,3233723391,US
3233723392,3233723903,AU
-3233723904,3233724415,GB
+3233723904,3233724415,NL
3233724416,3233725439,US
3233725952,3233726975,NO
3233726976,3233728767,US
-3233728768,3233729279,GB
+3233728768,3233729279,NL
3233729280,3233729535,US
-3233729536,3233730047,SG
+3233729536,3233729791,SG
+3233729792,3233730047,AU
3233730560,3233732607,AU
-3233732608,3233736959,US
+3233732608,3233734911,US
+3233735680,3233736959,US
3233736960,3233737983,FR
3233737984,3233738751,US
-3233738752,3233739007,GB
+3233738752,3233739007,NL
3233739008,3233739263,US
-3233739264,3233739519,FR
+3233739264,3233739519,NL
3233739520,3233740543,US
3233740544,3233741311,GB
-3233741312,3233743359,US
+3233741312,3233742591,US
+3233742848,3233743359,US
3233743360,3233743615,CA
3233743616,3233744383,US
3233744384,3233744639,PR
@@ -109171,29 +56398,22 @@
3233803008,3233803263,CA
3233803264,3233808383,US
3233808384,3233873919,TW
-3233873920,3233874943,AU
-3233874944,3233903743,US
-3233903744,3233903807,EU
-3233903808,3233907711,US
-3233907712,3233907967,AP
-3233907968,3233914879,US
-3233914880,3233915135,AP
-3233915136,3233915903,US
-3233915904,3233916159,AP
-3233916160,3233926294,US
+3233873920,3233874175,US
+3233874176,3233874687,AU
+3233874688,3233903615,US
+3233903616,3233903743,GB
+3233903744,3233903807,US
+3233903808,3233903871,GB
+3233903872,3233926294,US
3233926295,3233926295,MX
-3233926296,3233936639,US
-3233936640,3233936895,EU
-3233936896,3233939455,US
-3233939456,3233980671,FI
-3233980672,3233980927,GB
-3233980928,3233991167,FI
-3233991168,3233991423,DE
-3233991424,3234004991,FI
-3234005248,3234005503,GB
+3233926296,3233939455,US
+3233939456,3234004991,FI
+3234005248,3234005503,NL
+3234005504,3234005759,AU
3234006528,3234007039,US
-3234007040,3234007295,RU
+3234007040,3234007295,NL
3234007296,3234007551,US
+3234007552,3234007807,AU
3234007808,3234008063,US
3234008064,3234008831,NZ
3234008832,3234013183,US
@@ -109201,23 +56421,23 @@
3234013696,3234013951,AU
3234013952,3234014207,US
3234014464,3234014975,US
-3234014976,3234015487,KR
+3234014976,3234015487,AU
3234015488,3234015743,US
3234015744,3234015999,IE
3234016000,3234016255,GB
3234016256,3234019327,AU
-3234019328,3234023423,US
-3234023424,3234023679,PL
+3234019840,3234023423,US
+3234023424,3234023679,NL
3234023680,3234024703,US
-3234025472,3234030079,US
-3234030080,3234030335,DE
+3234025472,3234026495,US
+3234026752,3234030079,US
+3234030080,3234030335,NL
3234030336,3234031103,US
3234031104,3234031359,AU
3234031360,3234031871,US
-3234031872,3234032127,GB
-3234032128,3234032383,PL
+3234031872,3234032383,NL
3234032384,3234032895,US
-3234033152,3234033407,IT
+3234033152,3234033407,NL
3234033408,3234033663,US
3234033664,3234033919,AU
3234033920,3234034687,US
@@ -109231,121 +56451,165 @@
3234048000,3234048511,US
3234048512,3234048767,AU
3234048768,3234051839,US
-3234051840,3234052095,NL
-3234052096,3234052351,DE
+3234051840,3234052351,NL
3234052352,3234052607,US
+3234052608,3234052863,AU
3234052864,3234054911,US
-3234054912,3234055167,PT
+3234054912,3234055167,NL
3234055168,3234055423,US
3234055424,3234055679,AU
-3234055680,3234061055,US
-3234061056,3234061311,NZ
-3234061312,3234065407,US
-3234065408,3234065663,GB
+3234055680,3234056959,US
+3234057216,3234061055,US
+3234061056,3234061311,AU
+3234061312,3234064639,US
+3234064640,3234064895,AU
+3234064896,3234065407,US
+3234065408,3234065663,NL
3234065664,3234065919,BR
3234065920,3234070527,US
3234070528,3234110463,FR
-3234110464,3234111487,US
-3234136064,3234172927,CA
+3234110464,3234128455,US
+3234128456,3234128463,GB
+3234128464,3234130695,US
+3234130696,3234130703,AU
+3234130704,3234131183,US
+3234131184,3234131191,GB
+3234131192,3234136063,US
+3234136064,3234150911,CA
+3234151424,3234158847,CA
+3234159104,3234159359,CA
+3234160128,3234164991,CA
+3234164992,3234165247,US
+3234165248,3234167295,CA
+3234167808,3234172927,CA
3234172928,3234173951,US
3234173952,3234175999,CA
3234176000,3234177279,US
3234177280,3234187007,CA
3234187008,3234187519,US
-3234187520,3234192383,CA
+3234187520,3234189055,CA
+3234189312,3234192383,CA
3234192384,3234193663,US
-3234193664,3234201599,CA
+3234193664,3234198783,CA
+3234199040,3234201343,CA
3234201600,3234203647,US
-3234203648,3234205695,BR
-3234205696,3234226175,US
-3234234368,3234239231,US
-3234239232,3234239487,MY
-3234239488,3234240255,US
-3234240256,3234240383,EU
+3234203648,3234205183,BR
+3234205184,3234205439,AR
+3234205440,3234205695,BR
+3234205696,3234208255,US
+3234208768,3234226983,US
+3234226984,3234226991,CA
+3234226992,3234227455,US
+3234227456,3234227711,CA
+3234227712,3234230015,US
+3234230016,3234230271,ES
+3234230272,3234232319,US
+3234232320,3234232575,EG
+3234232576,3234232831,US
+3234232832,3234233087,BR
+3234233088,3234238975,US
+3234238976,3234239487,MY
+3234239488,3234240383,US
3234240384,3234240387,IE
-3234240388,3234240511,EU
-3234240512,3234240607,US
+3234240388,3234240607,US
3234240608,3234240611,IL
-3234240612,3234250751,US
-3234267136,3234269695,US
+3234240612,3234247167,US
+3234247680,3234269695,US
3234270208,3234271231,CA
3234271232,3234275327,PT
3234275328,3234279423,AU
3234279424,3234283519,CA
3234283520,3234310367,US
3234310368,3234310371,HK
-3234310372,3234314239,US
-3234332672,3234349055,US
+3234310372,3234312703,US
+3234313216,3234316287,US
+3234316288,3234320383,CA
+3234320384,3234332671,US
+3234332928,3234334975,US
+3234335744,3234349055,US
3234349056,3234353151,NZ
-3234353152,3234357247,US
-3234365440,3234373631,US
-3234398208,3234400679,US
-3234400680,3234400687,NA
-3234400688,3234401511,US
-3234401512,3234401519,NA
-3234401520,3234549759,US
+3234353152,3234549759,US
3234549760,3234550015,RU
-3234553856,3234556415,US
+3234553856,3234554367,US
+3234554624,3234554879,AU
+3234554880,3234556415,US
3234556416,3234556927,CA
3234556928,3234557439,FI
3234557440,3234564607,US
3234564608,3234566911,KR
3234566912,3234568703,US
-3234568704,3234568959,NZ
+3234568704,3234568959,AU
3234568960,3234569215,US
+3234569216,3234569727,AU
3234569728,3234569983,CL
3234569984,3234574335,US
3234574336,3234574591,AU
3234574592,3234574847,MX
-3234574848,3234579711,US
+3234574848,3234576127,US
+3234576896,3234578687,US
+3234578688,3234578943,AU
+3234578944,3234579711,US
3234579712,3234579967,CA
3234579968,3234581247,US
3234581248,3234581503,CA
3234581504,3234582527,US
+3234582528,3234583039,AU
3234583040,3234583807,US
3234583808,3234584063,AU
3234584064,3234584575,US
-3234584576,3234584831,NZ
+3234584576,3234584831,AU
3234584832,3234585343,US
3234585600,3234587391,US
-3234587392,3234587647,SA
-3234587648,3234588671,US
-3234588672,3234588927,MO
+3234587392,3234587647,NL
+3234587648,3234588415,US
+3234588672,3234588927,AU
3234588928,3234589439,US
3234589440,3234589695,AU
3234589696,3234592511,US
-3234592512,3234592767,TH
-3234592768,3234611199,US
-3234611200,3234615295,US
-3234615296,3234645247,US
-3234645248,3234645759,US
-3234645760,3234725887,US
+3234592512,3234592767,AU
+3234592768,3234594047,US
+3234594816,3234725887,US
3234726144,3234726399,CA
3234726400,3234726911,US
3234726912,3234727935,CA
3234727936,3234733055,US
3234733056,3234733311,CA
-3234733312,3234744319,US
+3234733312,3234735103,US
+3234735616,3234737407,US
+3234738176,3234739455,US
+3234740224,3234742015,US
+3234742272,3234743551,US
3234744832,3234745599,US
3234745600,3234746879,GB
3234746880,3234747903,US
-3234747904,3234748159,IL
+3234747904,3234748159,NL
3234748160,3234749439,US
3234749440,3234750463,CA
-3234750464,3234762751,US
+3234750464,3234751999,US
+3234752000,3234752255,AU
+3234752256,3234753535,US
+3234753536,3234753791,AU
+3234753792,3234754047,US
+3234754560,3234755839,US
+3234755840,3234756095,AU
+3234756096,3234762751,US
3234762752,3234764799,CA
3234764800,3234766335,NZ
3234766336,3234772223,US
3234772224,3234772479,CA
3234772480,3234772735,US
-3234772992,3234781439,US
+3234772992,3234777599,US
+3234778112,3234781439,US
3234781440,3234781951,CA
3234781952,3234782719,US
3234782720,3234783999,IL
-3234784000,3234794495,US
+3234784000,3234791167,US
+3234791424,3234794495,US
3234794752,3234795007,US
-3234795008,3234795263,GB
-3234795264,3234799359,US
+3234795008,3234795263,NL
+3234795264,3234795519,US
+3234795776,3234796031,US
+3234796544,3234799359,US
3234799360,3234799615,NL
3234799616,3234799871,US
3234799872,3234800127,AU
@@ -109354,25 +56618,26 @@
3234801664,3234802431,EC
3234802432,3234803711,US
3234803712,3234803967,PR
-3234804224,3234807807,US
-3234807808,3234808063,TH
+3234804224,3234806783,US
+3234807552,3234807807,US
+3234807808,3234808063,AU
3234808064,3234809087,EC
3234809088,3234810879,US
3234810880,3234811135,CA
3234811136,3234814719,US
-3234814720,3234814975,HK
+3234814720,3234814975,AU
3234814976,3234815999,US
3234816000,3234816767,AU
3234816768,3234820351,US
3234820352,3234820607,AU
-3234820608,3234821887,US
+3234820608,3234820863,US
+3234821120,3234821887,US
3234821888,3234822655,AU
3234822656,3234826751,US
3234826752,3234827007,CA
3234827008,3234827519,US
-3234827520,3234827775,GB
-3234827776,3234828031,LU
-3234828032,3234828287,NZ
+3234827520,3234828031,NL
+3234828032,3234828287,AU
3234828288,3234828799,US
3234828800,3234829055,CL
3234829056,3234830079,US
@@ -109388,88 +56653,57 @@
3234839296,3234839551,AU
3234839552,3234841087,US
3234841088,3234841599,BR
-3234841600,3234841855,PT
+3234841600,3234841855,NL
3234841856,3234842367,AU
3234842368,3234842623,US
3234842624,3234844415,BR
3234844416,3234853375,US
-3234853376,3234853631,TH
+3234853376,3234853631,AU
3234853632,3234853887,US
3234853888,3234854143,EC
3234854144,3234854911,US
3234854912,3234855167,AU
3234855168,3234855935,US
3234856192,3234856447,US
+3234856448,3234856703,AU
3234856960,3234861055,CA
-3234861056,3234897919,US
-3234922496,3234988031,US
-3234988032,3234992127,CA
-3234992128,3235004415,US
+3234861056,3234886143,US
+3234886656,3234926847,US
+3234927616,3234988031,US
+3234988032,3234990847,CA
+3234991104,3234998783,US
+3234999296,3235004415,US
3235004416,3235021823,CA
-3235021824,3235022079,US
-3235022080,3235022143,AU
-3235022144,3235022367,US
-3235022368,3235022383,CA
-3235022384,3235022399,US
-3235022400,3235022423,CA
-3235022424,3235024383,US
-3235024384,3235024447,BG
-3235024448,3235024511,US
-3235024512,3235024639,BG
-3235024640,3235025055,US
-3235025056,3235025071,BD
-3235025072,3235025079,CA
-3235025080,3235025135,US
-3235025136,3235025151,BD
-3235025152,3235026047,US
-3235026048,3235026079,CA
-3235026080,3235026095,US
-3235026096,3235026111,CA
-3235026112,3235026127,US
-3235026128,3235026167,CA
-3235026168,3235026687,US
-3235026688,3235026719,CA
-3235026720,3235026735,US
-3235026736,3235026895,CA
-3235026896,3235026911,BD
-3235026912,3235026943,US
+3235021824,3235026943,US
3235026944,3235028991,CA
-3235028992,3235037695,US
-3235037696,3235037743,CA
-3235037744,3235037791,SE
-3235037792,3235038463,US
+3235028992,3235038463,US
3235038464,3235038719,GB
3235038720,3235045375,US
3235045376,3235046143,CA
-3235046144,3235046271,US
-3235046272,3235046335,GB
-3235046336,3235046351,BD
-3235046352,3235047839,US
-3235047840,3235047871,GB
-3235047872,3235085311,US
+3235046144,3235085311,US
3235085312,3235086335,CA
3235086336,3235184639,US
3235184640,3235184895,CA
3235184896,3235275007,US
3235275776,3235276799,CA
+3235276800,3235278847,US
3235278848,3235282943,BB
3235282944,3235315711,CA
3235315712,3235389439,US
3235389440,3235389951,VE
-3235389952,3235417215,US
-3235417216,3235417223,BR
-3235417224,3235512319,US
+3235389952,3235512319,US
3235512320,3235577855,JP
-3235577856,3235643391,CA
+3235577856,3235641855,CA
+3235642112,3235643135,CA
3235643392,3235774463,US
3235774464,3235776767,CA
3235777536,3235807231,US
3235807232,3235839999,CA
-3235840000,3235856383,US
+3235840000,3235842303,US
+3235843072,3235844095,CA
+3235844096,3235856383,US
3235856384,3235872767,BR
-3235872768,3235876607,US
-3235876608,3235876863,AP
-3235876864,3235880447,US
+3235872768,3235880447,US
3235880448,3235880703,GB
3235880704,3235906303,US
3235906304,3235906559,CA
@@ -109535,42 +56769,40 @@
3235968512,3235968767,CA
3235968768,3235970559,US
3235970560,3235970815,CA
-3235970816,3236044799,US
+3235970816,3235977727,US
+3235978240,3235985663,US
+3235986432,3236010239,US
+3236011008,3236044799,US
3236044800,3236052991,CA
3236052992,3236069375,US
3236069376,3236102143,CA
3236102144,3236106239,PH
-3236106240,3236134911,US
-3236134912,3236134975,CA
-3236134976,3236135039,IL
-3236135040,3236135551,US
-3236135552,3236135567,BD
-3236135568,3236137119,US
-3236137120,3236137151,SE
-3236137152,3236139007,US
-3236139008,3236143103,CA
+3236106240,3236139007,US
+3236139008,3236142079,CA
+3236142080,3236142335,US
+3236142336,3236143103,CA
3236143104,3236167679,US
-3236167680,3236172543,CA
-3236172544,3236172799,US
-3236172800,3236175871,CA
-3236175872,3236192255,US
+3236167680,3236175871,CA
+3236175872,3236200447,US
3236200448,3236233215,MY
-3236233216,3236237567,US
-3236237568,3236237936,EU
-3236237937,3236238591,US
-3236241408,3236249599,US
-3236265984,3236315135,US
-3236364288,3236368127,US
-3236368128,3236368383,NZ
+3236233216,3236238591,US
+3236239360,3236241407,CA
+3236241408,3236302847,US
+3236306944,3236364287,US
+3236364544,3236365567,US
+3236365824,3236368127,US
+3236368128,3236368383,AU
3236368384,3236372991,US
3236372992,3236373247,AU
-3236373504,3236379391,US
+3236373760,3236379391,US
3236379392,3236379647,AU
3236379648,3236380927,US
3236381184,3236381439,CA
-3236381440,3236381695,AT
-3236381696,3236385279,US
-3236385280,3236385535,DE
+3236381440,3236381695,NL
+3236381696,3236383999,US
+3236384000,3236384255,AU
+3236384256,3236385279,US
+3236385280,3236385535,NL
3236385536,3236385791,US
3236386304,3236387071,US
3236387072,3236387327,CA
@@ -109586,50 +56818,74 @@
3236398848,3236399359,AU
3236399616,3236400127,US
3236400128,3236400383,CL
-3236400384,3236406783,US
+3236400384,3236401151,US
+3236401152,3236401407,AU
+3236401408,3236406783,US
3236406784,3236407551,AU
3236407552,3236408063,SG
3236408064,3236408319,US
-3236408320,3236409087,CA
-3236409088,3236409599,BR
-3236409600,3236413695,US
+3236408320,3236409343,CA
+3236409600,3236411135,US
+3236411136,3236411391,AU
+3236411392,3236412415,US
+3236412672,3236413695,US
3236413696,3236413951,AU
3236413952,3236416255,US
3236416256,3236416511,AU
-3236416512,3236418559,US
-3236418560,3236418815,AU
-3236418816,3236427519,US
+3236416512,3236418303,US
+3236418304,3236418815,AU
+3236418816,3236419071,US
+3236419328,3236419583,US
+3236419584,3236419839,AU
+3236419840,3236420095,US
+3236420096,3236420351,AU
+3236420352,3236424959,US
+3236424960,3236425215,MU
+3236425216,3236427519,US
3236427520,3236427775,CA
+3236427776,3236428031,AU
3236428800,3236429311,US
-3236429312,3236429567,ZA
+3236429312,3236429567,MU
3236429824,3236438015,US
-3236446208,3236447487,US
-3236447488,3236447743,AP
-3236447744,3236450047,US
-3236450048,3236450303,EU
-3236450304,3236462591,US
+3236446208,3236462591,US
3236462592,3236470783,AU
-3236495360,3236566783,US
+3236470784,3236560895,US
+3236561152,3236566783,US
3236566784,3236567039,CA
-3236567040,3236585983,US
+3236567040,3236568831,US
+3236569856,3236570367,US
+3236571136,3236575743,US
+3236575744,3236575999,AU
+3236576000,3236583423,US
+3236583680,3236585983,US
3236585984,3236586239,CA
-3236586240,3236604671,US
+3236586240,3236587519,US
+3236588032,3236589823,US
+3236590080,3236591103,US
+3236592128,3236601343,US
+3236601600,3236604671,US
3236604672,3236604927,CA
3236604928,3236610047,US
3236610560,3236611071,US
3236611072,3236612095,CA
-3236612096,3236617471,US
+3236612096,3236612607,US
+3236613120,3236617471,US
3236617728,3236617983,US
3236617984,3236619775,CA
3236619776,3236620031,US
+3236620032,3236620287,AU
3236620288,3236623615,US
3236623616,3236623871,AU
3236623872,3236625919,US
3236625920,3236626175,CA
-3236626432,3236642815,US
+3236626432,3236638719,US
+3236638720,3236642815,BB
+3236642816,3236659199,US
+3236659200,3236691967,CA
3236691968,3236694271,US
3236695040,3236696063,CA
-3236696064,3236708351,US
+3236696064,3236698623,US
+3236699136,3236757503,US
3236757504,3236765695,CA
3236765696,3236774911,US
3236774912,3236775423,HK
@@ -109643,17 +56899,9 @@
3236778752,3236780287,US
3236780288,3236780543,FR
3236780544,3236780799,CH
-3236780800,3236781599,US
-3236781600,3236781615,NL
-3236781616,3236781727,US
-3236781728,3236781759,NL
-3236781760,3236781823,US
+3236780800,3236781823,US
3236781824,3236782335,ES
-3236782336,3236782719,US
-3236782720,3236782751,BE
-3236782752,3236782847,US
-3236782848,3236782911,LU
-3236782912,3236784383,US
+3236782336,3236784383,US
3236784384,3236784895,IT
3236784896,3236785663,US
3236785664,3236785919,DE
@@ -109665,114 +56913,120 @@
3236787968,3236788223,JP
3236788224,3236788479,US
3236788480,3236789503,GB
-3236789504,3236790271,US
+3236789504,3236823039,US
3236823040,3236826111,CH
3236826112,3236827135,CA
-3236829184,3236855807,US
-3236888576,3236958207,US
+3236827136,3236958207,US
3236958208,3236962303,AU
-3236962304,3236978687,US
-3236986880,3236995071,US
-3237019648,3237022291,US
-3237022292,3237022335,CA
-3237022336,3237022367,US
-3237022368,3237022399,CA
-3237022400,3237022447,US
-3237022448,3237022719,CA
-3237022720,3237023231,US
-3237023232,3237023263,CA
-3237023264,3237023279,US
-3237023280,3237023487,CA
-3237023488,3237036031,US
-3237085184,3237154815,US
+3236962304,3236966143,US
+3236966400,3237021695,US
+3237021696,3237023743,CA
+3237023744,3237038079,US
+3237038080,3237038335,CA
+3237038336,3237043967,US
+3237043968,3237044223,CH
+3237044224,3237046015,US
+3237046016,3237046271,RO
+3237046272,3237047039,US
+3237047040,3237047295,FR
+3237047296,3237047551,US
+3237047552,3237047807,IE
+3237047808,3237050111,US
+3237050112,3237050367,GB
+3237050368,3237051903,US
+3237051904,3237052159,TR
+3237052160,3237052287,CA
+3237052288,3237154815,US
3237154816,3237155839,ES
3237155840,3237156863,AU
-3237156864,3237160959,US
+3237156864,3237163007,US
3237163008,3237167103,DM
+3237167104,3237182463,US
+3237182464,3237183487,NL
3237183488,3237216255,US
3237216256,3237281791,JP
-3237281792,3237285119,US
+3237282560,3237284607,US
+3237284608,3237284863,AU
+3237284864,3237285119,US
3237285120,3237285631,AU
3237285632,3237287935,US
3237287936,3237288191,CA
-3237288192,3237290495,US
+3237288192,3237289471,US
+3237289728,3237290495,US
3237291008,3237291263,NZ
3237291264,3237294847,US
3237294848,3237295103,CA
3237295104,3237296639,US
-3237296640,3237297151,SG
+3237296640,3237297151,AU
3237297152,3237297407,CL
-3237297408,3237305087,US
+3237297408,3237300479,US
+3237302528,3237305087,US
3237305088,3237305343,CA
-3237305344,3237308671,US
+3237305344,3237305855,US
+3237305856,3237306111,AU
+3237306112,3237308671,US
3237308672,3237310719,AU
3237310720,3237312767,US
3237312768,3237313023,BO
-3237313024,3237319679,US
-3237319680,3237319935,DZ
+3237313024,3237317631,US
+3237317888,3237319679,US
+3237319680,3237319935,MU
3237319936,3237320703,US
3237320704,3237320959,UA
3237320960,3237321471,US
+3237321472,3237321727,AU
3237321728,3237321983,US
-3237322752,3237325055,US
-3237325056,3237325311,PL
+3237323264,3237325055,US
+3237325056,3237325311,NL
3237325312,3237325823,US
3237325824,3237326079,CA
3237326080,3237328127,US
3237328384,3237328639,US
3237328640,3237328895,CA
3237328896,3237329151,US
-3237329152,3237329407,NZ
+3237329152,3237329407,AU
3237329408,3237330943,US
3237330944,3237331199,AU
3237331456,3237331967,US
-3237331968,3237332223,HK
+3237331968,3237332223,AU
3237332224,3237335039,US
-3237335040,3237335295,HK
+3237335040,3237335295,AU
3237335296,3237335551,US
3237335552,3237337599,AU
3237337600,3237337855,US
-3237338112,3237339391,US
-3237339392,3237339647,GB
+3237337856,3237338367,AU
+3237338368,3237339391,US
+3237339392,3237339647,NL
3237339648,3237340159,US
3237340160,3237340415,CA
3237340416,3237345535,US
3237345536,3237346303,KR
-3237346304,3237349119,US
-3237349120,3237349375,AU
-3237349376,3237366015,US
+3237346304,3237347071,US
+3237347328,3237366015,US
3237366016,3237366271,AU
3237366272,3237412863,US
3237412864,3237415935,GB
3237415936,3237416959,CA
-3237416960,3237437439,US
-3237445632,3237478399,US
+3237416960,3237478399,US
3237478400,3237511167,LK
3237511168,3237548031,US
3237548032,3237552127,KR
-3237552128,3237553154,US
-3237553155,3237553155,GB
-3237553156,3237553922,US
-3237553923,3237553923,EU
-3237553924,3237554434,US
-3237554435,3237554435,AP
-3237554436,3237558271,US
+3237552128,3237553151,US
+3237553152,3237553407,GB
+3237553408,3237568511,US
+3237568512,3237572607,CA
+3237572608,3237576703,US
+3237576704,3237609471,CA
3237609472,3237613567,US
3237613568,3237614591,CA
3237615104,3237615615,US
3237615616,3237616895,CA
-3237617152,3237622015,US
-3237622016,3237622271,AP
-3237622272,3237634309,US
+3237617152,3237634309,US
3237634310,3237634310,GB
-3237634311,3237634601,US
-3237634602,3237634603,EU
-3237634604,3237647103,US
+3237634311,3237647103,US
3237647104,3237647359,AU
-3237647360,3237648639,US
-3237648640,3237648895,AU
-3237648896,3237658623,US
-3237675008,3237681663,US
+3237647360,3237679359,US
+3237679872,3237681663,US
3237681664,3237682943,CA
3237682944,3237684991,US
3237684992,3237685247,CL
@@ -109782,7 +57036,8 @@
3237690624,3237691903,SA
3237691904,3237698303,US
3237698304,3237698559,CA
-3237698560,3237712895,US
+3237698560,3237701631,US
+3237702400,3237712895,US
3237712896,3237713151,AU
3237713152,3237716991,US
3237716992,3237717247,CA
@@ -109792,30 +57047,51 @@
3237724928,3237725183,AU
3237725184,3237725439,CA
3237725440,3237725695,US
+3237726464,3237726719,AU
3237726720,3237726975,GH
3237726976,3237727231,US
3237727232,3237728255,AU
3237728256,3237732863,US
-3237732864,3237733068,DE
-3237733069,3237733070,DE
-3237733071,3237733119,DE
+3237732864,3237733119,NL
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
-3237871616,3237887999,US
-3238002688,3238006783,NL
-3238006784,3238007039,GB
-3238007040,3238008831,NL
-3238008832,3238010879,IE
+3237863424,3237867519,US
+3237867520,3237867647,HK
+3237867648,3237867775,US
+3237867776,3237868031,GB
+3237868032,3237868287,HK
+3237868288,3237869311,US
+3237869312,3237869567,CA
+3237869568,3237869823,US
+3237869824,3237869951,PH
+3237869952,3237870079,VN
+3237870080,3237870335,IS
+3237870336,3237870591,US
+3237870592,3237870847,DE
+3237870848,3237870975,KR
+3237870976,3237871103,JP
+3237871104,3237871231,TH
+3237871232,3237871359,TW
+3237871360,3237871615,NZ
+3237871616,3237896191,US
+3237896192,3237900287,PR
+3237900288,3238002687,US
+3238002688,3238008831,NL
+3238008832,3238010879,PL
3238010880,3238017023,CH
3238017024,3238018303,DK
3238018304,3238018559,UA
3238018560,3238018815,FR
3238018816,3238019071,DE
3238019072,3238035711,PL
-3238035712,3238035967,DE
-3238035968,3238037503,RU
+3238035712,3238037503,RU
3238037504,3238039039,LV
3238039040,3238039551,UA
3238039552,3238039807,PL
@@ -109842,7 +57118,6 @@
3238053888,3238054911,RU
3238054912,3238055935,UA
3238055936,3238056959,PL
-3238056960,3238057215,MD
3238057216,3238057471,BG
3238057472,3238057983,RU
3238057984,3238059519,UA
@@ -109851,23 +57126,17 @@
3238060032,3238060287,CH
3238060288,3238060543,RO
3238060544,3238060799,HU
-3238060800,3238061311,UA
-3238061312,3238061567,GB
-3238061568,3238061823,AT
+3238061056,3238061311,UA
3238061824,3238062079,CZ
3238062080,3238062591,CH
-3238062592,3238062847,GB
-3238062848,3238063103,SE
3238063104,3238063359,PL
3238063360,3238063615,CH
-3238063616,3238063871,EU
-3238063872,3238064127,GB
+3238063616,3238063871,DE
3238064128,3238064383,UA
3238064384,3238064639,ES
3238064640,3238064895,PL
3238064896,3238065151,DK
3238065152,3238065407,SI
-3238065408,3238065663,FR
3238065664,3238065919,DE
3238065920,3238066175,UA
3238066176,3238066431,DE
@@ -109880,9 +57149,7 @@
3238067968,3238068223,GB
3238068224,3238133759,IE
3238133760,3238199295,SI
-3238199296,3238201855,DK
-3238201856,3238202111,US
-3238202112,3238264831,DK
+3238199296,3238264831,DK
3238264832,3238330367,IS
3238330368,3238337023,CH
3238337024,3238337535,LI
@@ -109892,7 +57159,8 @@
3238502400,3238504447,RU
3238504448,3238526975,DE
3238526976,3238527231,RU
-3238527232,3238535167,CH
+3238527232,3238530047,CH
+3238530560,3238535167,CH
3238535168,3238536191,SE
3238536192,3238537215,DK
3238537216,3238538495,CH
@@ -109902,32 +57170,34 @@
3238541568,3238541823,PL
3238541824,3238542591,CH
3238542592,3238542847,PL
-3238542848,3238545919,CH
+3238542848,3238545407,CH
3238545920,3238546431,RU
3238546432,3238546943,CH
3238546944,3238547455,UA
-3238547456,3238548991,CH
+3238548480,3238548991,CH
3238548992,3238549503,CZ
3238549504,3238559231,CH
3238559232,3238559487,SE
3238559488,3238562559,CH
3238562560,3238562815,IR
-3238562816,3238573567,CH
+3238562816,3238571263,CH
+3238571520,3238573567,CH
3238573568,3238574079,PL
-3238574080,3238578431,CH
+3238574080,3238574591,CH
+3238575104,3238575615,DE
+3238575616,3238578431,CH
3238578432,3238578687,UA
3238578688,3238578943,CH
3238578944,3238579199,RU
3238579200,3238589951,CH
3238589952,3238590207,LT
-3238590208,3238590975,CH
+3238590208,3238590719,CH
3238590976,3238591231,SA
3238591232,3238592511,CH
3238592512,3238594559,GB
3238594560,3238595583,BE
3238595584,3238595839,SI
-3238595840,3238596095,EU
-3238596096,3238596607,GB
+3238595840,3238596607,GB
3238596608,3238596863,BG
3238596864,3238597119,RU
3238597120,3238597375,DE
@@ -109942,26 +57212,13 @@
3238599680,3238599935,UA
3238599936,3238600703,HU
3238600704,3238604799,DE
-3238604800,3238606335,NL
-3238606336,3238606591,SE
-3238606592,3238607359,NL
-3238607360,3238607871,SE
-3238607872,3238608895,NL
3238608896,3238621183,SE
-3238621184,3238621439,FI
-3238621440,3238621695,FR
-3238621696,3238621951,IT
-3238621952,3238622207,NL
-3238622208,3238622463,NO
-3238622464,3238622719,SE
-3238622720,3238622975,DK
-3238622976,3238623231,GB
3238623232,3238623487,LV
3238623488,3238623743,PL
3238623744,3238623999,CH
3238624000,3238624255,PL
3238624256,3238625279,HU
-3238625280,3238630399,EU
+3238625280,3238630399,LU
3238630400,3238631423,GR
3238631424,3238632959,GB
3238632960,3238633215,UA
@@ -109972,16 +57229,66 @@
3238656512,3238657023,UA
3238657024,3238657535,AT
3238657536,3238657791,GB
-3238657792,3238658047,AT
-3238658048,3238675455,SE
-3238675456,3238675711,DK
-3238675712,3238723071,SE
-3238723072,3238723327,DK
-3238723328,3238801279,SE
-3238801280,3238801343,GB
-3238801344,3239051263,SE
-3239051264,3239051519,CH
-3239051520,3239062271,DE
+3238658048,3238802431,SE
+3238802432,3238804479,NL
+3238804480,3238806527,SE
+3238806528,3238807551,NL
+3238807552,3238821887,SE
+3238821888,3238823935,HR
+3238823936,3238832127,SE
+3238832128,3238833151,NL
+3238833152,3238838271,SE
+3238838272,3238839295,NL
+3238839296,3238847487,SE
+3238847488,3238848511,NL
+3238848512,3238860799,SE
+3238860800,3238862847,HR
+3238862848,3238865919,SE
+3238865920,3238867967,NL
+3238867968,3238887423,SE
+3238887424,3238888447,NL
+3238888448,3238893567,SE
+3238893568,3238894591,NL
+3238894592,3238897663,SE
+3238897664,3238899711,NL
+3238899712,3238901759,SE
+3238901760,3238902783,NL
+3238902784,3238903807,SE
+3238903808,3238905855,HR
+3238905856,3238909951,SE
+3238909952,3238910975,NL
+3238910976,3238911999,SE
+3238912000,3238913023,NL
+3238913024,3238914047,SE
+3238914048,3238916095,HR
+3238916096,3238917119,NL
+3238917120,3238919167,SE
+3238919168,3238920191,NL
+3238920192,3238941695,SE
+3238941696,3238942719,NL
+3238942720,3238967295,SE
+3238967296,3238969343,HR
+3238969344,3238975487,SE
+3238975488,3238977535,HR
+3238977536,3238981631,SE
+3238981632,3238983679,HR
+3238983680,3238986751,SE
+3238986752,3238987775,NL
+3238987776,3238993919,SE
+3238993920,3238995967,HR
+3238995968,3239001087,SE
+3239001088,3239002111,NL
+3239002112,3239008255,SE
+3239008256,3239009279,NL
+3239009280,3239018495,SE
+3239018496,3239020543,HR
+3239020544,3239022591,SE
+3239022592,3239024639,HR
+3239024640,3239026687,SE
+3239026688,3239028735,HR
+3239028736,3239051263,SE
+3239051264,3239053311,DE
+3239054336,3239059455,DE
3239062272,3239062527,ES
3239062528,3239062783,CH
3239062784,3239063039,UA
@@ -109989,7 +57296,8 @@
3239063296,3239063551,UA
3239063552,3239075839,DE
3239075840,3239076095,MT
-3239076096,3239076607,DE
+3239076096,3239076351,DE
+3239076352,3239076607,RU
3239076608,3239076863,PL
3239076864,3239077119,NL
3239077120,3239077375,UA
@@ -109997,14 +57305,11 @@
3239077632,3239077887,PT
3239077888,3239078143,CZ
3239078144,3239078399,UA
-3239078400,3239078655,RU
3239078656,3239078911,PL
3239078912,3239079167,GB
3239079168,3239079423,SI
-3239079424,3239079679,FR
3239079680,3239079935,MD
3239079936,3239088127,DE
-3239088128,3239088639,GB
3239088640,3239088895,DK
3239088896,3239089151,IL
3239089152,3239089407,RO
@@ -110014,7 +57319,6 @@
3239090432,3239090687,ES
3239090688,3239090943,NL
3239090944,3239091199,AT
-3239091200,3239091455,FR
3239091456,3239091711,BG
3239091712,3239091967,UA
3239091968,3239092223,FR
@@ -110022,24 +57326,22 @@
3239104512,3239105279,RU
3239105280,3239105535,CH
3239105536,3239105791,DE
-3239105792,3239106047,RO
-3239106048,3239106559,DE
+3239106048,3239106559,AT
3239106560,3239106815,ES
3239106816,3239107071,CH
3239107072,3239107327,RO
3239107328,3239107583,GR
3239107584,3239107839,CH
-3239107840,3239108095,RO
3239108096,3239109887,DE
3239109888,3239110143,PL
3239110144,3239110655,DE
3239110656,3239110911,RU
3239110912,3239111167,UA
3239111168,3239111423,NL
-3239111424,3239111935,DE
+3239111424,3239111679,DE
3239111936,3239112191,AT
3239112192,3239112447,IL
-3239112448,3239112959,PL
+3239112704,3239112959,PL
3239112960,3239113215,CH
3239113216,3239113471,AT
3239113472,3239113727,ES
@@ -110051,13 +57353,16 @@
3239116544,3239116799,PL
3239116800,3239117055,PT
3239117056,3239117311,SI
-3239117312,3239119871,DE
+3239117312,3239117823,DE
+3239118336,3239118591,DE
+3239118848,3239119871,DE
3239119872,3239120127,GB
3239120128,3239120383,CZ
3239120384,3239120639,PL
3239120896,3239121663,DE
3239121664,3239121919,FR
-3239121920,3239127039,DE
+3239121920,3239123967,DE
+3239124992,3239127039,DE
3239127040,3239127295,PT
3239127296,3239127551,PL
3239127552,3239127807,IL
@@ -110070,8 +57375,7 @@
3239130112,3239130367,RU
3239130368,3239130623,JO
3239130624,3239130879,PL
-3239131136,3239133183,DE
-3239133184,3239133439,CH
+3239132160,3239133183,DE
3239133440,3239133695,GB
3239133696,3239133951,ES
3239133952,3239134207,SE
@@ -110090,8 +57394,8 @@
3239138304,3239138559,PL
3239138560,3239138815,CH
3239138816,3239141375,DE
-3239141376,3239143423,US
-3239143424,3239147519,DE
+3239141376,3239145471,US
+3239145472,3239147519,DE
3239147520,3239149567,SG
3239149568,3239160319,GB
3239160320,3239160575,RU
@@ -110102,12 +57406,9 @@
3239161600,3239161855,HU
3239161856,3239162623,DE
3239162624,3239162879,BE
-3239162880,3239163903,DE
3239163904,3239164159,PL
3239164160,3239164671,DE
3239164672,3239164927,GB
-3239164928,3239165183,DK
-3239165184,3239165951,DE
3239165952,3239166207,FR
3239166208,3239166463,DE
3239166464,3239166719,CH
@@ -110133,27 +57434,23 @@
3239172096,3239172607,UA
3239172608,3239172863,SE
3239172864,3239173119,DE
-3239173120,3239173375,RO
3239173376,3239173631,DE
3239173632,3239173887,AT
3239173888,3239174143,PL
3239174400,3239174655,RO
3239174656,3239174911,GB
3239174912,3239175167,SI
-3239175168,3239175423,UA
3239175424,3239175679,BG
3239175680,3239175935,DE
-3239175936,3239176191,FI
3239176192,3239180287,DE
3239180288,3239181311,CZ
3239181312,3239181567,AT
-3239181568,3239181823,UA
-3239181824,3239205887,DE
+3239181824,3239182079,DE
+3239182336,3239205887,DE
3239205888,3239206143,US
3239206144,3239264255,DE
3239264256,3239264767,NO
3239264768,3239266303,RU
-3239266304,3239266815,PL
3239266816,3239267327,UA
3239267328,3239267839,FR
3239267840,3239268351,DE
@@ -110164,12 +57461,10 @@
3239270912,3239271423,SA
3239271424,3239271935,AT
3239271936,3239272447,CH
-3239272448,3239272959,UA
3239272960,3239273471,GB
3239273472,3239273983,UA
3239273984,3239274495,RU
3239274496,3239275007,PL
-3239275008,3239275519,RO
3239275520,3239276543,UA
3239276544,3239277055,LU
3239277056,3239277567,DE
@@ -110178,8 +57473,7 @@
3239278592,3239279103,RU
3239279104,3239280127,PL
3239280128,3239280639,RU
-3239280640,3239281663,IR
-3239281664,3239282687,UA
+3239281664,3239282687,RU
3239282688,3239283711,FI
3239283712,3239284735,PL
3239284736,3239285247,IR
@@ -110199,17 +57493,15 @@
3239296768,3239297023,GB
3239297024,3239298047,RO
3239298048,3239299071,GB
-3239300096,3239301119,UA
3239301120,3239302143,FR
3239302144,3239303167,PL
3239303168,3239304191,FR
-3239304192,3239305215,SI
+3239304192,3239305215,HR
3239305216,3239306239,NL
3239306240,3239307263,UA
3239307264,3239308287,EG
3239308288,3239309311,DE
3239309312,3239311359,UA
-3239311360,3239312383,FR
3239312384,3239313407,UA
3239313408,3239445759,DE
3239445760,3239446015,PL
@@ -110227,7 +57519,6 @@
3239465728,3239465983,PL
3239465984,3239466239,UA
3239466240,3239466495,AT
-3239466496,3239466751,FI
3239466752,3239467007,GB
3239467008,3239467263,RU
3239467264,3239467519,GB
@@ -110240,13 +57531,10 @@
3239469056,3239470591,DE
3239470592,3239470847,CH
3239470848,3239471103,BG
-3239471104,3239471871,DE
3239471872,3239472127,FR
3239472128,3239474943,DE
3239474944,3239475199,ES
-3239475200,3239479807,DE
-3239479808,3239480063,UA
-3239480064,3239480319,FR
+3239475200,3239477247,DE
3239480320,3239480575,UA
3239480576,3239480831,RO
3239480832,3239481087,CH
@@ -110254,7 +57542,6 @@
3239481344,3239486719,DE
3239486720,3239486975,ES
3239486976,3239487487,DE
-3239487488,3239487743,GB
3239487744,3239487999,PL
3239488000,3239488255,AT
3239488256,3239488511,CH
@@ -110262,10 +57549,7 @@
3239488768,3239489023,RO
3239489024,3239489279,DE
3239489280,3239489535,PL
-3239489536,3239496959,DE
-3239496960,3239497215,EU
-3239497216,3239501823,DE
-3239501824,3239505919,BE
+3239489536,3239501823,DE
3239505920,3239506431,DE
3239506432,3239506687,RU
3239506688,3239506943,GB
@@ -110280,22 +57564,20 @@
3239509504,3239509759,CH
3239509760,3239510015,DE
3239510016,3239510271,UA
-3239510272,3239521023,DE
-3239521024,3239521279,AP
-3239521280,3239522303,DE
+3239510272,3239511039,DE
+3239511552,3239511807,DE
+3239512064,3239514111,DE
+3239518208,3239521791,DE
3239522304,3239522559,PL
3239522560,3239522815,SI
-3239522816,3239523071,LT
3239523072,3239523327,PL
3239523328,3239523583,BG
3239523584,3239523839,UA
3239523840,3239524095,PL
-3239524096,3239524351,SE
3239524352,3239524607,DE
3239524608,3239524863,SE
3239524864,3239525119,UA
3239525120,3239525375,LT
-3239525376,3239525631,UA
3239525632,3239525887,PL
3239525888,3239526143,SI
3239526144,3239526399,PL
@@ -110305,7 +57587,6 @@
3239539456,3239539711,BE
3239539712,3239539967,GB
3239539968,3239540223,SE
-3239540224,3239540479,GR
3239540480,3239540735,DE
3239540736,3239540991,GB
3239540992,3239541247,FR
@@ -110314,7 +57595,6 @@
3239541760,3239542015,GB
3239542016,3239542271,PL
3239542272,3239542527,RU
-3239542528,3239542783,FR
3239542784,3239544831,DE
3239544832,3239545087,GB
3239545088,3239545343,SI
@@ -110330,7 +57610,6 @@
3239550720,3239550975,NO
3239550976,3239554047,DE
3239554048,3239554303,SE
-3239554304,3239554559,DK
3239554560,3239554815,PL
3239554816,3239555071,UA
3239555072,3239556095,DE
@@ -110347,10 +57626,11 @@
3239568128,3239568383,FR
3239568384,3239568639,SE
3239568640,3239568895,NO
-3239568896,3239575295,DE
+3239568896,3239573759,DE
+3239574016,3239574783,DE
+3239575040,3239575295,DE
3239575296,3239575551,DK
-3239575552,3239575807,RO
-3239575808,3239579135,DE
+3239575552,3239578879,DE
3239579136,3239579391,PL
3239579392,3239581695,DE
3239581696,3239581951,PL
@@ -110360,39 +57640,35 @@
3239582720,3239582975,GB
3239582976,3239583231,IT
3239583232,3239583487,UA
-3239583488,3239583743,RO
-3239583744,3239591935,DE
+3239583744,3239584767,DE
+3239585024,3239585279,DE
+3239587840,3239591935,DE
3239591936,3239592447,FI
3239592448,3239592703,US
-3239592704,3239592959,FI
-3239592960,3239593215,EU
-3239593216,3239593983,FI
+3239592704,3239593983,FI
3239593984,3239624703,DE
3239624704,3239625727,CH
3239625728,3239626751,RU
3239626752,3239628799,PL
3239628800,3239629823,DE
-3239629824,3239630847,FR
3239630848,3239631871,DE
3239631872,3239632895,UA
-3239632896,3239633919,DE
-3239633920,3239634943,FR
-3239634944,3239635967,RU
-3239635968,3239636991,DE
+3239632896,3239636991,DE
3239636992,3239638015,BG
3239638016,3239639039,PL
-3239639040,3239640063,SI
+3239639040,3239639551,SI
+3239639552,3239639807,CZ
+3239639808,3239640063,SI
3239640064,3239641087,DE
3239641088,3239643135,PL
3239643136,3239645183,RU
-3239645184,3239665663,DE
+3239645184,3239653375,DE
+3239653376,3239657471,NL
+3239657472,3239665663,DE
3239666176,3239666687,AT
3239666688,3239667199,DE
3239667200,3239667711,CH
-3239667712,3239668223,RO
-3239668224,3239668735,UA
-3239668736,3239669247,PL
-3239669248,3239670271,RO
+3239667712,3239670271,RO
3239670272,3239670783,DE
3239670784,3239671295,GB
3239671296,3239671807,DE
@@ -110410,26 +57686,25 @@
3239687168,3239687679,UA
3239687680,3239688191,DE
3239688192,3239688703,PL
-3239688704,3239689727,GB
+3239688704,3239689215,GB
3239689728,3239690239,RU
3239690240,3239690495,ES
3239690496,3239690751,PL
3239691008,3239691263,FR
3239691264,3239691519,IT
3239691520,3239691775,FR
-3239691776,3239692031,EU
+3239691822,3239691822,GB
3239692032,3239692287,AT
-3239692288,3239697407,DE
+3239692288,3239695871,DE
3239697408,3239697663,HR
3239697664,3239697919,RU
-3239697920,3239698431,PL
-3239698432,3239706367,DE
+3239697920,3239698175,PL
+3239698432,3239704575,DE
+3239706112,3239706367,DE
3239706368,3239706623,UA
-3239706624,3239706879,RU
3239706880,3239707135,NL
-3239707136,3239707391,RU
3239707392,3239707647,UA
-3239707648,3239707903,CH
+3239707648,3239707903,GB
3239707904,3239708159,DE
3239708160,3239708415,SE
3239708416,3239708671,RO
@@ -110437,7 +57712,6 @@
3239708928,3239709183,NL
3239709184,3239709439,RO
3239709440,3239709695,FR
-3239709696,3239709951,DE
3239709952,3239710207,UA
3239710464,3239710719,DE
3239710720,3239710975,RU
@@ -110445,8 +57719,6 @@
3239711232,3239711487,BY
3239711488,3239711743,RU
3239711744,3239711999,UA
-3239712000,3239712255,PL
-3239712256,3239712511,DE
3239712512,3239712767,GB
3239712768,3239713023,DE
3239713024,3239713279,PL
@@ -110464,34 +57736,26 @@
3239739904,3239740159,CH
3239740160,3239740415,PL
3239740416,3239740671,DK
-3239740672,3239740927,GB
3239740928,3239741183,UA
3239741184,3239741439,RU
3239741440,3239759871,DE
-3239759872,3239760127,RU
3239760128,3239760383,UA
-3239760384,3239760895,PL
-3239760896,3239761151,RU
-3239761152,3239761407,GB
+3239760640,3239760895,PL
3239761408,3239761663,RU
-3239761664,3239761919,PL
3239761920,3239762175,BG
3239762176,3239762431,RU
3239762432,3239762687,DK
-3239762688,3239762943,RO
3239762944,3239763199,SI
3239763200,3239763455,SE
-3239763456,3239763967,GB
+3239763456,3239763711,GB
3239763968,3239772159,DE
3239772160,3239772415,NL
-3239772416,3239772671,GB
+3239772416,3239772671,IE
3239772672,3239773183,DK
3239773184,3239773439,FR
3239773440,3239773951,PL
3239773952,3239774207,SA
-3239774208,3239774463,PL
3239774464,3239774719,ES
-3239774720,3239774975,FR
3239774976,3239775231,PT
3239775232,3239782399,DE
3239782400,3239782655,AT
@@ -110500,13 +57764,12 @@
3239783168,3239783423,CH
3239783424,3239783679,DK
3239783936,3239784191,DE
-3239784192,3239784447,FR
+3239784192,3239784447,ES
3239784448,3239788543,DE
-3239788544,3239789055,EU
3239789056,3239789567,DE
3239789568,3239790079,FR
3239790080,3239790591,RO
-3239790592,3239791103,LV
+3239790592,3239791103,NL
3239791104,3239791615,CH
3239792128,3239792639,FR
3239792640,3239793151,UA
@@ -110532,22 +57795,20 @@
3239826944,3239827455,RU
3239827456,3239827967,DK
3239827968,3239828479,CH
-3239828480,3239828735,EU
-3239828736,3239828991,DE
-3239828992,3239830015,RU
+3239828480,3239828991,DE
+3239828992,3239829503,RU
3239830016,3239830527,CH
-3239830528,3239831039,SE
-3239831040,3239832063,RU
+3239831040,3239831551,RU
3239832064,3239832575,UA
3239832576,3239834111,RU
3239834112,3239834623,UA
3239834624,3239835135,AT
-3239835648,3239836159,RU
3239836160,3239836671,DK
3239836672,3239837183,DE
3239837184,3239837695,SE
3239837696,3239837951,PL
-3239837952,3239839231,DE
+3239837952,3239838463,DE
+3239838720,3239839231,DE
3239839232,3239839487,RU
3239839488,3239839743,DE
3239839744,3239839999,SK
@@ -110555,7 +57816,7 @@
3239840512,3239840767,DE
3239840768,3239841023,AT
3239841024,3239841279,NL
-3239841280,3239848447,DE
+3239841536,3239848447,DE
3239848448,3239848703,CH
3239848960,3239849215,RU
3239849216,3239849471,GB
@@ -110568,18 +57829,14 @@
3239859968,3239860223,CA
3239860224,3239860479,DE
3239860480,3239860735,FI
-3239860736,3239860991,DE
-3239860992,3239861247,AT
+3239860736,3239861247,DE
3239861248,3239861503,UA
-3239861504,3239861759,PL
3239861760,3239862015,SA
3239862016,3239862271,IT
3239862272,3239874559,DE
-3239874560,3239874815,NL
3239874816,3239875071,DE
3239875072,3239875327,SI
3239875328,3239875583,DK
-3239875584,3239875839,PL
3239875840,3239876095,DK
3239876096,3239876351,DE
3239876352,3239876607,RO
@@ -110594,13 +57851,10 @@
3239878656,3239882751,DE
3239882752,3239883007,GB
3239883008,3239883263,UA
-3239883264,3239883316,EU
-3239883317,3239883317,GB
-3239883318,3239883519,EU
+3239883264,3239883519,GB
3239883520,3239883775,RU
3239883776,3239884031,DE
-3239884032,3239884287,IR
-3239884288,3239884543,GB
+3239884032,3239884287,RU
3239884544,3239884799,FR
3239884800,3239885055,UA
3239885056,3239885311,CH
@@ -110609,43 +57863,40 @@
3239885824,3239886079,CH
3239886080,3239886335,PL
3239886336,3239886591,RU
-3239886592,3239886847,FR
3239886848,3239888895,DE
3239888896,3239889151,UA
3239889152,3239889407,GB
-3239889408,3239889663,CZ
3239889664,3239889919,FI
3239889920,3239890175,AT
3239890176,3239890431,FR
3239890432,3239890687,NL
-3239890688,3239895039,DE
+3239890688,3239894015,DE
3239895040,3239895295,DK
3239895296,3239895551,TR
3239895552,3239895807,PL
3239895808,3239896063,DK
-3239896064,3239896319,DE
-3239896320,3239896575,AT
+3239896064,3239896575,DE
3239896576,3239896831,PL
3239896832,3239897087,HU
-3239897088,3239897343,GB
+3239897088,3239897343,IE
3239897344,3239897599,FR
3239897600,3239897855,RU
3239897856,3239898111,FR
3239898112,3239898367,NO
-3239898368,3239898623,GB
3239898624,3239898879,DE
3239898880,3239899135,RU
3239899136,3239901695,DE
3239901696,3239901951,BG
3239901952,3239902207,DE
-3239902208,3239902463,PL
3239902464,3239902719,RU
3239902720,3239902975,EE
-3239903232,3239907327,DE
+3239903232,3239904767,DE
+3239905024,3239907327,DE
3239907328,3239907583,UA
3239907584,3239908095,DE
3239908096,3239908351,RU
-3239908352,3239913215,DE
+3239908352,3239911423,DE
+3239912960,3239913215,DE
3239913216,3239913471,LT
3239913472,3239915519,DE
3239915520,3239915775,PL
@@ -110656,12 +57907,16 @@
3239916800,3239917055,KZ
3239917056,3239917311,DE
3239917312,3239917567,BG
-3239917568,3239935999,DE
-3239936000,3239936255,UA
+3239919616,3239922687,DE
+3239922688,3239922724,LU
+3239922725,3239922725,DE
+3239922726,3239922943,LU
+3239922944,3239935999,DE
3239936256,3239936511,FR
3239936512,3239938815,DE
3239938816,3239939071,NL
-3239939072,3239951103,DE
+3239939072,3239950335,DE
+3239950848,3239951103,DE
3239951104,3239951359,AT
3239951360,3239954431,DE
3239954432,3239954687,UA
@@ -110676,10 +57931,11 @@
3239959808,3239960063,BE
3239960064,3239960319,FR
3239960320,3239960575,GB
-3239960576,3239968511,DE
+3239960576,3239968255,DE
3239968512,3239968767,PL
3239968768,3239969023,NO
-3239969280,3239974911,DE
+3239969536,3239971839,DE
+3239972864,3239974911,DE
3239974912,3239975935,GB
3239975936,3239976191,RO
3239976192,3239976447,DE
@@ -110688,7 +57944,6 @@
3239978752,3239979007,RU
3239979264,3239979519,GB
3239979520,3239979775,DE
-3239979776,3239980031,SI
3239980032,3239996415,DE
3239996416,3239996671,GB
3239996672,3239996927,PL
@@ -110701,17 +57956,13 @@
3240005632,3240009727,DE
3240009728,3240009983,PL
3240009984,3240010239,IL
-3240010240,3240010495,GB
3240010496,3240010751,AT
3240010752,3240011007,HU
-3240011008,3240011263,DE
3240011520,3240011775,CH
3240011776,3240026111,DE
3240026112,3240027135,FR
3240027136,3240028159,BG
-3240028160,3240028160,GB
-3240028161,3240028161,EU
-3240028162,3240029183,GB
+3240028160,3240029183,GB
3240029184,3240030207,RU
3240030208,3240032255,UA
3240032256,3240033279,RS
@@ -110719,26 +57970,26 @@
3240033536,3240033791,UA
3240033792,3240034303,RO
3240034304,3240034559,RU
-3240034560,3240037887,DE
+3240034560,3240035327,DE
+3240035840,3240037375,DE
3240037888,3240038143,AT
-3240038144,3240038399,DK
-3240038400,3240083455,DE
+3240038400,3240040447,DE
+3240042496,3240048639,DE
+3240049664,3240083455,DE
3240083456,3240085503,RU
3240085504,3240087551,KZ
3240087552,3240098815,DE
3240098816,3240099327,CH
-3240099328,3240099839,DE
-3240099840,3240100690,GB
-3240100691,3240100691,EU
-3240100692,3240102911,GB
+3240099584,3240099839,DE
+3240100096,3240100863,GB
+3240101376,3240101887,GB
+3240102144,3240102399,GB
3240102912,3240103935,UA
-3240103936,3240104703,GB
+3240104192,3240104703,GB
3240104704,3240104959,NL
3240104960,3240105215,RU
3240105216,3240105471,UA
-3240105472,3240107583,GB
-3240107584,3240107599,EU
-3240107600,3240109055,GB
+3240105472,3240109055,GB
3240109056,3240109567,PL
3240109568,3240112639,GB
3240112640,3240112895,PL
@@ -110755,16 +58006,20 @@
3240116224,3240116479,DE
3240116480,3240116735,DK
3240116736,3240117247,RO
-3240117248,3240118271,EU
+3240117248,3240118271,RU
3240118272,3240120319,ES
3240120320,3240120831,IR
-3240120832,3240125439,GB
+3240120832,3240121343,GB
+3240122368,3240124927,GB
3240125440,3240125695,RO
-3240125696,3240165375,GB
+3240125696,3240132607,GB
+3240140800,3240142847,GB
+3240153088,3240159231,GB
+3240161536,3240161791,GB
+3240163840,3240165375,GB
3240165376,3240165887,PL
3240165888,3240166399,ES
3240166400,3240166911,PL
-3240166912,3240167423,RO
3240167424,3240167935,PL
3240167936,3240168447,RU
3240168448,3240168959,FR
@@ -110792,7 +58047,6 @@
3240180736,3240181247,NL
3240181248,3240181759,RU
3240181760,3240182271,UA
-3240182272,3240182783,RO
3240182784,3240183295,RU
3240183296,3240183807,NL
3240183808,3240184319,GB
@@ -110800,7 +58054,6 @@
3240184832,3240185343,GB
3240185344,3240185855,FR
3240185856,3240187391,RU
-3240187392,3240187903,UA
3240187904,3240188415,RU
3240188416,3240188927,RO
3240188928,3240189439,MD
@@ -110810,10 +58063,8 @@
3240190976,3240191487,RU
3240191488,3240191999,AE
3240192000,3240192511,UA
-3240192512,3240193023,RO
3240193024,3240193535,GB
3240193536,3240194047,PL
-3240194048,3240194559,GB
3240194560,3240195071,AT
3240195072,3240195583,GB
3240195584,3240196095,RO
@@ -110821,12 +58072,9 @@
3240197120,3240197631,PL
3240197632,3240198143,CZ
3240198144,3240198655,CH
-3240198656,3240199167,RO
3240199168,3240199679,RU
3240199680,3240200191,NL
-3240200192,3240200703,RO
-3240200704,3240201215,SE
-3240201216,3240201727,RO
+3240200704,3240201215,GB
3240201728,3240202239,CH
3240202240,3240202751,RU
3240202752,3240203263,GB
@@ -110837,7 +58085,7 @@
3240205312,3240205823,GB
3240205824,3240206335,DE
3240206336,3240206847,RU
-3240206848,3240207871,RO
+3240207360,3240207871,RO
3240207872,3240208127,RU
3240208128,3240208895,FR
3240208896,3240209407,GB
@@ -110855,7 +58103,6 @@
3240216064,3240216575,GB
3240216576,3240217087,RO
3240217088,3240217599,UA
-3240217600,3240218111,RU
3240218112,3240218623,UA
3240218624,3240219135,NL
3240219136,3240219647,AT
@@ -110872,11 +58119,11 @@
3240225280,3240225791,IL
3240225792,3240226303,UA
3240226304,3240226815,CH
-3240226816,3240227839,RU
+3240226816,3240227327,RU
3240227840,3240228351,GB
3240228352,3240228863,SE
3240228864,3240229375,GB
-3240229376,3240230399,RO
+3240229376,3240229887,RO
3240230400,3240230911,GB
3240230912,3240231935,PL
3240231936,3240232959,NL
@@ -110886,22 +58133,21 @@
3240237056,3240239103,DE
3240239104,3240240127,FR
3240240128,3240241151,US
-3240241152,3240241407,EU
-3240241408,3240242175,FI
+3240241152,3240242175,FI
3240242176,3240243199,PL
-3240243200,3240244223,GB
+3240243200,3240243711,GB
+3240243712,3240244223,DE
3240244224,3240245247,PL
3240245248,3240246271,IL
3240246272,3240247295,UA
3240247296,3240248319,RS
3240248320,3240249343,DE
-3240249344,3240251391,UA
+3240249344,3240250367,UA
3240251392,3240252415,IE
3240252416,3240253439,LT
3240253440,3240254463,BE
3240254464,3240256511,UA
-3240256512,3240256767,EU
-3240256768,3240257535,DE
+3240256512,3240257535,DE
3240257536,3240258559,FO
3240258560,3240259583,RO
3240259584,3240260607,PL
@@ -110940,8 +58186,6 @@
3240280064,3240280191,DE
3240280192,3240280319,SE
3240280320,3240280447,PL
-3240280448,3240280575,UA
-3240280576,3240280703,GB
3240280704,3240280831,RU
3240280832,3240280959,GB
3240280960,3240281215,PL
@@ -110968,12 +58212,13 @@
3240287232,3240288255,PL
3240288256,3240296447,GB
3240296448,3240296703,RO
-3240296704,3240302847,GB
+3240296704,3240296959,GB
+3240297472,3240300543,GB
3240302848,3240303103,UA
-3240303104,3240304639,GB
+3240303104,3240303359,GB
+3240303616,3240304639,GB
3240304640,3240305663,RU
3240305664,3240305919,PL
-3240305920,3240306175,IE
3240306176,3240306687,RU
3240306688,3240306943,BG
3240306944,3240307199,PL
@@ -110997,9 +58242,13 @@
3240324352,3240324607,RU
3240324608,3240324863,PL
3240324864,3240325119,SI
-3240325120,3240361983,GB
+3240325120,3240334335,GB
+3240336640,3240353791,GB
+3240355840,3240361983,GB
3240361984,3240362239,TR
-3240362240,3240370175,GB
+3240362240,3240362495,DE
+3240362496,3240362751,GB
+3240363008,3240370175,GB
3240370176,3240370431,CH
3240370432,3240370687,DE
3240370688,3240370943,GB
@@ -111014,38 +58263,35 @@
3240373248,3240373503,RO
3240373504,3240373759,FR
3240373760,3240374015,DE
-3240374016,3240374271,IT
-3240374272,3240407039,GB
+3240374016,3240374271,GB
+3240378368,3240394751,GB
+3240395264,3240398847,GB
+3240400896,3240407039,GB
3240407040,3240407295,IL
3240407296,3240407551,NL
3240407552,3240407807,NO
-3240407808,3240408063,NL
-3240408064,3240408319,DE
-3240408320,3240408575,CH
3240408576,3240408831,FR
3240408832,3240409087,PL
3240409088,3240409343,TR
-3240409344,3240409599,GB
3240409600,3240409855,NL
3240409856,3240410367,DE
3240410368,3240410623,AT
3240410624,3240410879,PT
3240410880,3240411135,NO
3240411136,3240419327,RO
-3240419328,3240419839,GB
3240419840,3240420095,AT
-3240420096,3240420351,DE
-3240420352,3240420607,RO
3240420608,3240420863,NL
-3240420864,3240436735,GB
+3240420864,3240421375,GB
+3240423424,3240435711,GB
+3240436224,3240436735,GB
3240436736,3240437759,DE
3240437760,3240454911,GB
3240454912,3240455167,IN
-3240455168,3240460287,GB
+3240456192,3240460287,GB
3240460288,3240461055,IL
3240461056,3240461567,DE
3240461568,3240461823,UA
-3240461824,3240462079,EU
+3240461824,3240462079,RU
3240462080,3240462335,TR
3240462336,3240462591,RO
3240462592,3240462847,RU
@@ -111061,25 +58307,30 @@
3240465408,3240465919,DE
3240465920,3240466175,FR
3240466176,3240466687,DE
-3240466688,3240466943,AO
+3240466688,3240466943,PT
3240466944,3240467199,TR
-3240467200,3240467455,NL
3240467456,3240467711,UA
3240467712,3240467967,RU
-3240467968,3240468223,GB
+3240467968,3240468223,DE
3240468224,3240468479,CH
-3240468480,3240487935,GB
+3240468480,3240486911,GB
+3240487424,3240487935,GB
3240487936,3240488191,CH
3240488192,3240488447,GB
3240488448,3240488703,BG
3240488704,3240488959,NL
3240488960,3240493055,GB
3240493056,3240501247,SE
-3240501248,3240505343,GB
+3240503296,3240504319,GB
+3240505088,3240505343,GB
3240505344,3240505599,PL
-3240505600,3240536640,GB
+3240505600,3240505855,GB
+3240506368,3240506623,GB
+3240507392,3240529919,GB
+3240534016,3240536640,GB
3240536641,3240536641,US
-3240536642,3240575487,GB
+3240536642,3240550399,GB
+3240558592,3240575487,GB
3240575488,3240575743,RO
3240575744,3240575999,GB
3240576000,3240576255,DE
@@ -111104,9 +58355,11 @@
3240589312,3240593407,SE
3240593408,3240594175,GB
3240594176,3240594431,DK
-3240594432,3240609791,GB
+3240594432,3240599551,GB
+3240602624,3240605695,GB
3240609792,3240611839,DE
-3240611840,3240622079,GB
+3240611840,3240613887,GB
+3240615936,3240622079,GB
3240622080,3240622591,RU
3240622592,3240624127,GB
3240624128,3240689663,EE
@@ -111119,13 +58372,9 @@
3240693248,3240693759,ES
3240693760,3240695807,BE
3240695808,3240697855,ES
-3240697856,3240698111,SE
3240698112,3240698367,LV
-3240698368,3240698623,GB
3240698624,3240699135,SI
3240699136,3240699391,DE
-3240699392,3240699647,UA
-3240699648,3240699903,NO
3240699904,3240700159,LT
3240700160,3240700415,AT
3240700416,3240700671,BE
@@ -111134,7 +58383,6 @@
3240701184,3240701439,LV
3240701440,3240701695,ES
3240701952,3240702975,UA
-3240702976,3240703999,DE
3240704000,3240705023,GR
3240705024,3240706047,UA
3240706048,3240707071,BG
@@ -111143,7 +58391,6 @@
3240709120,3240710143,RU
3240710144,3240710399,UA
3240710400,3240710655,LT
-3240710656,3240710911,DE
3240710912,3240711167,FR
3240711168,3240711679,IT
3240711680,3240711935,RU
@@ -111151,19 +58398,15 @@
3240712192,3240712447,UA
3240712448,3240712703,SI
3240712704,3240712959,CH
-3240712960,3240713215,IT
-3240713216,3240713471,GB
3240713472,3240713727,RU
3240713728,3240713983,AT
3240713984,3240714239,FR
3240714240,3240716287,GB
3240716288,3240718335,CH
3240718336,3240718847,PL
-3240718848,3240719359,PT
3240719360,3240719871,DE
3240719872,3240720383,SE
3240720384,3240720895,DE
-3240720896,3240721407,RO
3240721408,3240721919,DE
3240721920,3240722431,RO
3240722432,3240723455,UA
@@ -111175,7 +58418,7 @@
3240727040,3240727551,DZ
3240727552,3240728063,CH
3240728064,3240728575,GR
-3240728576,3240729599,GB
+3240728576,3240729087,GB
3240729600,3240730111,DK
3240730112,3240730623,BE
3240730624,3240731647,ES
@@ -111190,14 +58433,13 @@
3240739072,3240739327,CH
3240739328,3240739583,FR
3240739584,3240739839,LV
-3240739840,3240740095,US
+3240739840,3240740095,DE
3240740096,3240740351,LT
3240740352,3240740607,IT
3240740608,3240741119,DE
3240741120,3240741375,AT
3240741376,3240741631,IL
3240741632,3240741887,RU
-3240741888,3240742143,LV
3240742144,3240742399,IT
3240742400,3240742655,RO
3240742656,3240742911,AT
@@ -111211,7 +58453,6 @@
3240746496,3240747007,FR
3240747008,3240747263,SE
3240747264,3240747519,TR
-3240747520,3240747775,RU
3240747776,3240748031,ES
3240748032,3240748287,AT
3240748288,3240748543,GR
@@ -111220,14 +58461,14 @@
3240749312,3240749567,BE
3240749568,3240749823,ES
3240749824,3240750335,IT
-3240750336,3240750591,LU
3240750592,3240750847,FR
3240750848,3240751103,UA
3240751104,3240752127,ES
3240752128,3240754175,RO
3240754176,3240755199,DE
-3240755200,3240755455,IE
-3240755456,3240791551,IT
+3240755200,3240759295,IT
+3240771584,3240779775,IT
+3240788992,3240791551,IT
3240791552,3240791807,RU
3240791808,3240792063,ES
3240792064,3240792319,GB
@@ -111235,7 +58476,6 @@
3240792576,3240792831,CH
3240792832,3240793087,PL
3240793088,3240793343,UA
-3240793344,3240793599,RU
3240793600,3240794111,FR
3240794112,3240794367,GB
3240794368,3240794879,PL
@@ -111244,62 +58484,58 @@
3240795648,3240795903,CH
3240795904,3240796159,SE
3240796160,3240808959,IT
-3240808960,3240809215,GB
3240809216,3240809471,PL
3240809472,3240809727,NL
3240809728,3240809983,FR
-3240809984,3240810239,GR
3240810240,3240810495,SE
3240810496,3240810751,TR
-3240810752,3240811007,GB
3240811008,3240811263,PL
-3240811264,3240811519,FR
3240811520,3240811775,SA
3240811776,3240812031,DE
3240812032,3240812287,HU
3240812288,3240812543,KW
-3240812544,3240813567,IT
3240813568,3240814591,PL
-3240814592,3240818687,IT
-3240818688,3240819715,NL
-3240819716,3240819716,EU
-3240819717,3240820735,NL
+3240814592,3240816639,IT
+3240818688,3240819711,NL
+3240819712,3240819715,GB
+3240819716,3240819716,NL
+3240819717,3240819967,GB
+3240819968,3240820735,NL
3240820736,3240820799,FR
3240820800,3240820831,CY
3240820832,3240820863,GB
3240820864,3240820991,PL
-3240820992,3240823807,IT
+3240820992,3240822783,IT
3240823808,3240824319,PL
-3240824320,3240827135,IT
+3240824320,3240825855,IT
+3240826880,3240827135,IT
3240827136,3240827391,FR
3240827392,3240827647,BG
3240827648,3240827903,CH
-3240827904,3240828159,IT
3240828160,3240828415,DE
3240828416,3240837119,IT
-3240837120,3240837375,GB
-3240837376,3240840447,IT
+3240839424,3240839679,IT
+3240840192,3240840447,IT
3240840448,3240840703,PL
3240840704,3240840959,RU
-3240840960,3240841215,GB
3240841216,3240843263,IT
3240843264,3240843775,NL
3240843776,3240844031,PL
-3240844032,3240844543,NL
+3240844288,3240844543,NL
3240844544,3240844799,CH
3240845056,3240845311,UA
-3240845312,3240846847,IT
+3240845312,3240845823,IT
+3240846336,3240846847,IT
3240846848,3240847359,VA
3240847360,3240852735,IT
3240852736,3240852991,GB
-3240852992,3240853247,IT
3240853248,3240853503,RU
3240853504,3240854527,VA
3240854528,3240855039,IT
3240855040,3240855295,RU
-3240855296,3240857599,IT
+3240855552,3240857599,IT
3240857600,3240857855,PL
-3240857856,3240858623,IT
+3240857856,3240858367,IT
3240858624,3240858879,PL
3240859136,3240859391,NL
3240859392,3240859647,SE
@@ -111321,47 +58557,23 @@
3240877568,3240879103,UA
3240879104,3240880127,PL
3240880128,3240881151,RU
-3240881152,3240882175,EU
3240882176,3240883199,PL
3240883200,3240884223,IL
3240884224,3240886271,UA
-3240886272,3240952071,SE
-3240952072,3240952079,IE
-3240952080,3240952087,SE
-3240952088,3240952095,GB
-3240952096,3240952127,US
-3240952128,3240953343,SE
-3240953344,3240953375,RU
-3240953376,3240953415,SE
-3240953416,3240953423,GB
-3240953424,3240954495,SE
-3240954496,3240954623,DE
-3240954624,3240955647,SE
-3240955648,3240955903,GB
-3240955904,3240961151,SE
-3240961152,3240961279,GB
-3240961280,3240961791,SE
-3240961792,3240961799,FI
-3240961800,3240969087,SE
-3240969088,3240969215,CA
-3240969216,3240988159,SE
-3240988160,3240988167,PL
-3240988168,3240988223,SE
-3240988224,3240988287,CA
-3240988288,3241017343,SE
+3240886272,3241017343,SE
3241017344,3241017855,AT
3241017856,3241018111,RU
3241018112,3241029119,AT
3241029120,3241029375,UA
3241029376,3241029631,PL
-3241029632,3241032703,AT
+3241029632,3241031679,AT
+3241032192,3241032703,AT
3241032704,3241032959,RU
3241032960,3241033215,GB
3241033216,3241033727,DE
3241033728,3241033983,IL
3241033984,3241034239,RU
3241034240,3241034495,UA
-3241034496,3241034751,DE
3241034752,3241035007,PL
3241035008,3241035263,DK
3241035264,3241035519,RO
@@ -111372,8 +58584,6 @@
3241036544,3241036799,SI
3241036800,3241037055,GB
3241037056,3241037311,RU
-3241037312,3241037567,BE
-3241037568,3241037823,DK
3241037824,3241038079,NL
3241038080,3241038335,UA
3241038336,3241038591,DE
@@ -111385,15 +58595,14 @@
3241040128,3241040383,UA
3241040384,3241040639,GB
3241040640,3241040895,RO
-3241040896,3241063423,AT
+3241040896,3241062399,AT
3241063424,3241063679,IT
3241063680,3241063935,PL
3241063936,3241064191,DE
3241064192,3241064447,GB
3241064448,3241064703,DE
3241064704,3241065471,PL
-3241065472,3241068543,AT
-3241068544,3241068799,GB
+3241065472,3241066495,AT
3241068800,3241069311,UA
3241069312,3241069567,FR
3241069568,3241070079,GB
@@ -111401,31 +58610,25 @@
3241070336,3241070847,RU
3241070848,3241071103,AT
3241071104,3241071359,UA
-3241071360,3241071615,RU
3241071616,3241071871,PL
3241071872,3241072127,RU
3241072128,3241072383,BE
3241072384,3241072639,DE
-3241072640,3241073919,AT
+3241073664,3241073919,AT
3241073920,3241074175,GB
-3241074176,3241076735,AT
-3241076736,3241076991,GR
-3241076992,3241077759,AT
+3241074432,3241076735,AT
+3241077248,3241077759,AT
3241077760,3241078015,LV
3241078016,3241078271,PL
3241078272,3241078527,ES
3241078528,3241078783,DE
3241078784,3241082879,AT
3241082880,3241083135,FR
-3241083136,3241084927,CH
-3241084928,3241085183,AP
-3241085184,3241100799,CH
-3241100800,3241101055,UA
+3241083136,3241100287,CH
3241101056,3241101311,DK
3241101312,3241101567,RO
3241101568,3241101823,DE
3241101824,3241102079,BG
-3241102080,3241102335,RO
3241102336,3241102591,ES
3241102592,3241102847,DE
3241102848,3241103359,NL
@@ -111435,7 +58638,6 @@
3241104128,3241104383,GB
3241104384,3241104639,ES
3241104640,3241104895,UA
-3241104896,3241105151,ES
3241105152,3241105407,RU
3241105408,3241108223,CH
3241108224,3241108735,DE
@@ -111449,7 +58651,7 @@
3241118720,3241118975,CH
3241118976,3241119231,FR
3241119232,3241119487,DK
-3241119488,3241119743,EU
+3241119488,3241119743,LT
3241119744,3241119999,RO
3241120000,3241120255,ES
3241120256,3241120511,RU
@@ -111484,40 +58686,56 @@
3241146112,3241146367,PL
3241146368,3241146623,IL
3241146624,3241146879,RO
-3241146880,3241148415,CH
+3241146880,3241147903,CH
+3241148160,3241148415,CH
3241148416,3241476095,FR
-3241476096,3241481727,BE
+3241476608,3241477631,BE
+3241478144,3241481727,BE
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
3241497600,3241497855,SE
3241497856,3241498111,DK
3241498112,3241498367,BE
-3241498368,3241498623,RO
3241498624,3241498879,NO
3241498880,3241499135,UA
-3241499136,3241499903,BE
+3241499648,3241499903,BE
3241499904,3241500159,DE
3241500160,3241500671,GB
3241500672,3241501439,BE
-3241501440,3241501951,GB
-3241501952,3241502975,BE
+3241501440,3241501440,GB
+3241501696,3241501696,GB
+3241501697,3241502463,BE
3241503232,3241503487,RS
3241503488,3241508095,BE
3241508096,3241508351,NL
3241508352,3241541375,BE
3241541376,3241541631,PL
-3241541632,3241724415,FR
+3241541632,3241672703,FR
+3241673472,3241689087,FR
+3241691136,3241699327,FR
+3241699584,3241699839,FR
+3241699840,3241700095,SE
+3241700096,3241723903,FR
+3241724160,3241724415,FR
3241724416,3241724671,RU
-3241724672,3241803775,FR
+3241724672,3241724927,FR
+3241725952,3241740287,FR
+3241740544,3241748479,FR
+3241750528,3241752831,FR
+3241754368,3241758719,FR
+3241759744,3241763071,FR
+3241763072,3241763327,DE
+3241763328,3241771007,FR
+3241772032,3241789439,FR
+3241789696,3241789951,FR
+3241790464,3241790975,FR
+3241793536,3241803775,FR
3241803776,3241803823,CY
-3241803824,3241803831,EU
3241803832,3241803839,GB
3241803840,3241804031,CY
3241804032,3241820159,BE
@@ -111528,7 +58746,6 @@
3241843456,3241843711,CH
3241843712,3241848063,BE
3241848064,3241851391,CH
-3241851392,3241851903,GR
3241851904,3241852927,GB
3241852928,3241854463,SK
3241854464,3241854975,GB
@@ -111548,71 +58765,48 @@
3241864192,3241864447,TR
3241864704,3241864959,SE
3241864960,3241865215,IT
-3241865216,3241865471,DE
3241865472,3241865727,NO
3241865728,3241865983,CH
3241865984,3241866239,RO
3241866240,3241866751,DE
3241866752,3241867007,UA
3241867008,3241867263,FR
-3241867520,3241867775,PL
3241867776,3241868031,NO
3241868032,3241868287,RU
3241868288,3241868543,HR
3241868544,3241868799,DE
-3241868800,3241869055,UA
3241869056,3241869311,BY
3241869312,3241934847,PL
3241934848,3242196991,GB
3242196992,3242393599,FI
-3242393600,3242394471,NL
-3242394472,3242394479,DE
-3242394480,3242403583,NL
-3242403584,3242403591,GB
-3242403592,3242419967,NL
-3242419968,3242420223,EU
-3242420224,3242426113,NL
-3242426114,3242426114,EU
-3242426115,3242459135,NL
+3242393600,3242459135,NL
3242459136,3242467327,BG
3242467328,3242475519,HU
3242475520,3242483711,LV
-3242483712,3242493029,BG
-3242493030,3242493030,BG
-3242493031,3242524671,BG
+3242483712,3242524671,BG
3242524672,3242590207,NO
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
3243048960,3243114495,SI
-3243114496,3243150847,NL
-3243150848,3243151103,IT
-3243151104,3243223615,NL
-3243223616,3243223623,NO
-3243223624,3243223695,NL
-3243223696,3243223703,PT
-3243223704,3243245567,NL
-3243245568,3243297791,AT
-3243297792,3243298047,SI
-3243298048,3243376639,AT
-3243376640,3243441919,GB
-3243441920,3243442175,MT
+3243114496,3243238143,NL
+3243238144,3243238399,US
+3243238400,3243245567,NL
+3243245568,3243376639,AT
+3243376640,3243442175,GB
3243442176,3243507711,AT
3243507712,3243507967,GB
-3243507968,3243509759,CZ
+3243509248,3243509759,CZ
3243509760,3243510015,RU
3243510016,3243510271,NL
-3243510272,3243511807,CZ
-3243511808,3243512063,GB
+3243510272,3243510527,CZ
+3243510784,3243511807,CZ
3243512064,3243512319,UA
3243512320,3243512575,FR
-3243512576,3243512831,UA
3243512832,3243513087,DE
3243513088,3243513343,GR
3243513344,3243513855,UA
@@ -111621,10 +58815,9 @@
3243514368,3243514623,IE
3243514624,3243514879,DK
3243514880,3243515135,AT
-3243515136,3243515391,CH
-3243515392,3243515647,DE
+3243515136,3243515391,PL
3243515648,3243515903,RU
-3243515904,3243520511,CZ
+3243515904,3243519999,CZ
3243520512,3243520767,UA
3243520768,3243521023,GB
3243521024,3243521279,AT
@@ -111637,54 +58830,48 @@
3243524864,3243525119,NL
3243525120,3243525375,CZ
3243525376,3243525631,RO
-3243525632,3243525887,CZ
3243525888,3243526143,PL
3243526144,3243526399,UA
3243526400,3243526655,FR
-3243526656,3243526911,PL
3243526912,3243527167,SE
-3243527168,3243527679,UA
-3243527680,3243527935,GB
+3243527168,3243527423,RU
+3243527424,3243527679,UA
3243527936,3243528191,PL
3243528192,3243529215,CZ
3243529216,3243529471,BE
-3243529472,3243529727,GB
3243529728,3243529983,BG
3243529984,3243530239,GB
-3243530240,3243530495,RU
3243530496,3243530751,FR
3243531008,3243531263,DE
-3243531264,3243531775,CZ
3243531776,3243532031,AT
3243532032,3243532287,DE
3243532288,3243536383,CZ
3243536384,3243536639,AT
-3243536640,3243536895,CH
3243536896,3243537151,CZ
-3243537152,3243537407,RO
-3243537408,3243544063,CZ
+3243537408,3243537919,CZ
+3243538432,3243540991,CZ
+3243542528,3243543551,CZ
3243544064,3243544319,GB
3243544320,3243544575,NL
3243544576,3243552767,CZ
3243552768,3243553023,NL
3243553024,3243553279,FR
3243553280,3243553535,DE
-3243553536,3243553791,PL
-3243553792,3243554303,DE
+3243554048,3243554303,DE
3243554304,3243554559,PL
3243554560,3243554815,MD
3243554816,3243555071,LV
3243555072,3243555327,RO
3243555328,3243555583,CZ
-3243555584,3243555839,FR
-3243555840,3243565055,CZ
+3243556864,3243565055,CZ
3243565056,3243569151,GB
-3243569152,3243570687,CZ
+3243570432,3243570687,CZ
3243570688,3243570943,PL
-3243570944,3243571711,CZ
-3243571712,3243571967,GB
+3243570944,3243571199,CZ
+3243571456,3243571711,CZ
3243571968,3243572223,GR
-3243572224,3243572991,CZ
+3243572224,3243572479,CZ
+3243572736,3243572991,CZ
3243572992,3243573247,RU
3243573248,3243704319,CZ
3243704320,3243769855,SK
@@ -111696,16 +58883,12 @@
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
3244103680,3244104703,BG
-3244104704,3244105727,DE
3244105728,3244107775,GB
3244107776,3244108799,RO
3244108800,3244109823,GB
@@ -111716,9 +58899,8 @@
3244114944,3244115967,PL
3244115968,3244116991,SK
3244116992,3244118015,UA
-3244118016,3244120063,GB
+3244119040,3244120063,GB
3244120064,3244122111,PL
-3244122112,3244123135,A2
3244123136,3244124159,UA
3244124160,3244125183,PL
3244125184,3244126207,UA
@@ -111754,31 +58936,9 @@
3244161024,3244163071,NO
3244163072,3244228607,FI
3244228608,3244261375,TN
-3244261376,3244268031,IE
-3244268032,3244268159,LU
-3244268160,3244277359,IE
-3244277360,3244277367,GB
-3244277368,3244277631,IE
-3244277632,3244277695,US
-3244277696,3244277759,IE
+3244261376,3244277759,IE
3244277760,3244294143,SI
-3244294144,3244343807,DE
-3244343808,3244344063,EU
-3244344064,3244408575,DE
-3244408576,3244408831,GB
-3244408832,3244452863,DE
-3244452864,3244453119,EU
-3244453120,3244545279,DE
-3244545280,3244545535,EU
-3244545536,3244592127,DE
-3244592128,3244592639,CH
-3244592640,3244624895,DE
-3244624896,3244625919,CH
-3244625920,3244794367,DE
-3244794368,3244794879,CA
-3244794880,3244813311,DE
-3244813312,3244813823,CA
-3244813824,3244818431,DE
+3244294144,3244818431,DE
3244818432,3244818687,ES
3244818688,3244818943,AT
3244818944,3244819199,PL
@@ -111791,7 +58951,7 @@
3244820736,3244820991,DE
3244820992,3244821247,SI
3244821248,3244821503,RU
-3244821504,3244821759,PA
+3244821504,3244821759,UA
3244821760,3244822015,TR
3244822016,3244822271,RU
3244822272,3244822527,GB
@@ -111864,7 +59024,7 @@
3244840960,3244841215,PL
3244841216,3244841471,GB
3244841472,3244841727,DE
-3244841728,3244842495,GB
+3244841728,3244842239,GB
3244842496,3244842751,RU
3244842752,3244843007,DE
3244843008,3244843263,UA
@@ -111970,18 +59130,16 @@
3244871168,3244871423,LT
3244871424,3244871679,RU
3244871680,3244872447,UA
-3244872448,3244872703,CH
3244872704,3244872959,IR
3244872960,3244873215,UA
3244873216,3244873471,SE
-3244873472,3244873727,EU
+3244873472,3244873727,IE
3244873728,3244873983,DE
-3244873984,3244874239,FI
+3244873984,3244874239,SE
3244874240,3244874495,ES
3244874496,3244874751,FR
3244874752,3244875007,DE
3244875008,3244875263,PL
-3244875264,3244875519,LI
3244875520,3244875775,IT
3244875776,3244876799,RU
3244876800,3244877055,GB
@@ -112009,7 +59167,7 @@
3244882432,3244882687,IT
3244882688,3244882943,PL
3244882944,3244883199,NL
-3244883200,3244883455,KZ
+3244883200,3244883455,RU
3244883456,3244883711,CZ
3244883712,3244883967,NL
3244883968,3244884223,DE
@@ -112033,7 +59191,7 @@
3244888576,3244888831,FR
3244888832,3244889087,DE
3244889088,3244889343,PL
-3244889344,3244889599,RO
+3244889344,3244889599,US
3244889600,3244889855,SI
3244889856,3244890111,HR
3244890112,3244890367,PL
@@ -112156,7 +59314,6 @@
3244922368,3244922623,GB
3244922880,3244923135,UA
3244923136,3244923391,AT
-3244923392,3244923647,EU
3244923648,3244923903,LV
3244923904,3244924159,RU
3244924160,3244924927,CZ
@@ -112251,9 +59408,8 @@
3244951552,3244952575,FI
3244952576,3244953599,GB
3244953600,3244954623,DE
-3244954624,3244955647,PL
-3244955648,3244957695,UA
-3244957696,3244958719,EU
+3244955648,3244956671,UA
+3244956672,3244957695,LT
3244958720,3244959743,FR
3244959744,3244960767,RU
3244960768,3244961791,RO
@@ -112278,7 +59434,7 @@
3244986368,3244987391,UA
3244987392,3244988415,RU
3244988416,3244990463,PL
-3244990464,3244991487,UA
+3244990464,3244991487,RU
3244991488,3244992511,DK
3244992512,3244994559,RU
3244994560,3244995583,ES
@@ -112303,12 +59459,16 @@
3245010688,3245010943,FR
3245010944,3245011967,RU
3245011968,3245012991,PL
-3245012992,3245014015,RU
+3245012992,3245014015,UA
3245014016,3245015039,GR
3245015040,3245016063,RU
3245016064,3245017087,RS
3245017088,3245018111,PL
-3245018112,3245021183,RU
+3245018112,3245019391,RU
+3245019392,3245019462,SC
+3245019463,3245019463,RU
+3245019464,3245019647,SC
+3245019648,3245021183,RU
3245021184,3245022207,UA
3245022208,3245023231,NO
3245023232,3245024255,PL
@@ -112320,7 +59480,6 @@
3245030400,3245032447,RU
3245032448,3245033471,BG
3245033472,3245034495,UA
-3245034496,3245035519,SE
3245035520,3245036543,UA
3245036544,3245037567,IS
3245037568,3245038591,PL
@@ -112340,7 +59499,6 @@
3245057024,3245058047,PL
3245058048,3245061119,UA
3245061120,3245062143,RU
-3245062144,3245063167,UA
3245063168,3245065215,RU
3245065216,3245066239,PL
3245066240,3245067263,UA
@@ -112363,7 +59521,6 @@
3245086208,3245086463,AT
3245086464,3245086719,GH
3245086720,3245086975,BG
-3245086976,3245087231,IT
3245087488,3245087743,NL
3245087744,3245087999,GH
3245088000,3245088255,LV
@@ -112375,13 +59532,13 @@
3245090304,3245090815,UA
3245090816,3245091327,AT
3245091328,3245091839,SE
-3245091840,3245093887,UA
+3245091840,3245092351,UA
+3245092864,3245093887,UA
3245093888,3245094911,RO
3245094912,3245095935,UA
3245095936,3245096959,IT
-3245096960,3245099007,EU
+3245096960,3245099007,CZ
3245099008,3245103103,GB
-3245103104,3245105151,EU
3245105152,3245105663,GB
3245105664,3245106175,NL
3245106176,3245106687,AT
@@ -112400,7 +59557,6 @@
3245116928,3245117439,KW
3245117440,3245118463,LV
3245118464,3245119487,GB
-3245119488,3245120511,EU
3245120512,3245121093,GB
3245121094,3245121095,US
3245121096,3245121535,GB
@@ -112414,13 +59570,14 @@
3245125120,3245125631,ES
3245125632,3245125887,DE
3245125888,3245126143,PL
-3245126144,3245126399,FR
3245126400,3245126655,DE
3245126656,3245126911,FR
3245126912,3245127167,DE
3245127168,3245127423,RU
3245127424,3245127679,AT
-3245127680,3245127935,DE
+3245127680,3245127742,US
+3245127743,3245127743,DE
+3245127744,3245127935,US
3245127936,3245128191,LV
3245128192,3245128447,IT
3245128448,3245128703,CH
@@ -112430,15 +59587,13 @@
3245130240,3245130495,PL
3245130496,3245130751,IL
3245130752,3245131007,SE
-3245131008,3245131519,FR
+3245131008,3245131263,FR
3245131520,3245132031,GB
3245132032,3245132287,BE
3245132288,3245132543,PL
3245132544,3245132799,FR
3245132800,3245133311,IT
3245133312,3245133567,PL
-3245133568,3245133823,RU
-3245133824,3245134079,NO
3245134080,3245134335,UA
3245134336,3245134591,NL
3245134592,3245134847,IL
@@ -112456,9 +59611,7 @@
3245137920,3245138431,DK
3245138432,3245138943,UA
3245138944,3245139455,PL
-3245139456,3245139967,RU
3245139968,3245140479,CH
-3245140480,3245140991,RO
3245140992,3245141503,UA
3245141504,3245141759,NL
3245141760,3245142015,SE
@@ -112469,7 +59622,6 @@
3245146112,3245147135,FR
3245147136,3245148159,DE
3245148160,3245149183,UA
-3245149184,3245150207,RU
3245150208,3245154303,IS
3245154304,3245158399,IT
3245158400,3245158911,CH
@@ -112481,11 +59633,9 @@
3245161472,3245161727,RU
3245161728,3245161983,BG
3245161984,3245162495,BE
-3245162496,3245163007,DE
3245163008,3245163519,KE
3245163520,3245164543,RU
-3245164544,3245164799,BE
-3245164800,3245165055,DE
+3245164544,3245165055,BE
3245165056,3245165567,AT
3245165568,3245166079,RU
3245166080,3245166591,TZ
@@ -112493,21 +59643,17 @@
3245166848,3245167103,GB
3245167104,3245167359,IL
3245167360,3245167615,GB
-3245167616,3245167871,UA
-3245167872,3245168127,LV
3245168128,3245168383,SE
3245168384,3245168639,FR
3245168640,3245168895,AT
3245168896,3245169151,RU
3245169152,3245169407,IT
-3245169408,3245169919,PL
+3245169408,3245169663,PL
3245169920,3245170175,PT
3245170176,3245170431,GB
3245170432,3245170687,CH
3245170688,3245171711,DE
-3245171712,3245172735,UA
3245172736,3245173759,IT
-3245173760,3245174783,UA
3245174784,3245175039,IT
3245175040,3245175295,DE
3245175296,3245175551,RU
@@ -112516,7 +59662,7 @@
3245176064,3245176319,SK
3245176320,3245176575,UA
3245176576,3245176831,FR
-3245176832,3245177343,ES
+3245177088,3245177343,ES
3245177344,3245177599,NL
3245177600,3245177855,PL
3245177856,3245178111,SI
@@ -112524,9 +59670,7 @@
3245178624,3245178879,PL
3245178880,3245179391,UA
3245179392,3245179903,LU
-3245179904,3245180415,DE
3245180416,3245180927,TR
-3245180928,3245181439,NL
3245181440,3245181951,DE
3245181952,3245182463,AT
3245182464,3245182975,FR
@@ -112543,19 +59687,16 @@
3245199872,3245200127,NO
3245200128,3245200383,LV
3245200384,3245200639,PL
-3245200640,3245200895,GR
3245200896,3245201151,DE
3245201152,3245201407,KW
3245201408,3245201663,UA
-3245201664,3245201919,NO
3245201920,3245202175,SA
3245202432,3245202687,GB
-3245202688,3245203455,DE
-3245203456,3245203711,FR
+3245202944,3245203455,DE
3245203712,3245204223,PL
3245204224,3245204479,SI
3245204480,3245204735,BE
-3245204736,3245205247,ES
+3245204736,3245204991,ES
3245205248,3245205503,DE
3245205504,3245205759,AT
3245205760,3245206015,IT
@@ -112571,7 +59712,6 @@
3245210112,3245210623,FR
3245210624,3245211135,HU
3245211136,3245211647,GB
-3245212160,3245212671,NG
3245212672,3245213183,GB
3245213184,3245213695,DE
3245213696,3245214207,LV
@@ -112584,7 +59724,7 @@
3245219840,3245221887,FI
3245221888,3245223935,DE
3245223936,3245225471,NL
-3245225472,3245225727,EU
+3245225472,3245225727,GB
3245225728,3245225983,NL
3245225984,3245228031,HU
3245228032,3245229055,FI
@@ -112592,12 +59732,9 @@
3245230080,3245232127,UA
3245232128,3245232383,PL
3245232384,3245232639,BE
-3245232640,3245232895,BG
3245232896,3245233151,IT
3245233152,3245233407,DK
-3245233408,3245233452,CH
-3245233453,3245233453,EU
-3245233454,3245233663,CH
+3245233408,3245233663,CH
3245233664,3245233919,GR
3245233920,3245234175,DK
3245234176,3245234431,GB
@@ -112620,23 +59757,17 @@
3245244416,3245244671,ES
3245244672,3245244927,AT
3245244928,3245245183,BE
-3245245184,3245245439,CH
3245245440,3245245695,BG
3245245696,3245245951,DE
-3245245952,3245246207,UA
3245246208,3245246463,GB
-3245246464,3245246719,AT
3245246720,3245246975,PL
3245246976,3245247231,GB
3245247232,3245247487,DE
-3245247488,3245247999,FR
+3245247488,3245247743,FR
3245248000,3245248255,PL
-3245248256,3245248511,GB
3245248512,3245248767,UA
3245248768,3245249023,SI
-3245249024,3245249279,FR
-3245249280,3245249535,NL
-3245249536,3245249791,FR
+3245249024,3245249535,NL
3245249792,3245250047,GB
3245250048,3245250303,DE
3245250304,3245250559,IT
@@ -112646,7 +59777,6 @@
3245251328,3245251583,MT
3245251584,3245251839,UA
3245251840,3245252095,NL
-3245252096,3245252351,BE
3245252352,3245252607,BG
3245252608,3245253631,UA
3245253632,3245254143,LV
@@ -112663,7 +59793,6 @@
3245260288,3245260799,BE
3245260800,3245261823,DE
3245261824,3245262847,DK
-3245262848,3245263871,IT
3245263872,3245264895,DE
3245264896,3245266943,TR
3245266944,3245268991,BG
@@ -112675,7 +59804,6 @@
3245275136,3245277183,BE
3245277184,3245277695,UA
3245277696,3245278207,RU
-3245278208,3245278719,GB
3245278720,3245279743,UA
3245279744,3245280255,TJ
3245280256,3245280767,BE
@@ -112687,7 +59815,6 @@
3245283328,3245283839,GB
3245283840,3245284351,PL
3245284352,3245284863,GB
-3245284864,3245285375,PL
3245285376,3245285631,NL
3245285632,3245285887,GB
3245285888,3245286143,DE
@@ -112697,11 +59824,9 @@
3245287680,3245287935,PL
3245287936,3245288191,PT
3245288192,3245288703,DE
-3245288704,3245288959,FI
3245288960,3245289215,IT
3245289216,3245289471,AT
3245289472,3245290495,UA
-3245290496,3245291519,LU
3245291520,3245292543,DE
3245292544,3245293567,UA
3245293568,3245294079,FI
@@ -112709,20 +59834,15 @@
3245294592,3245295103,RO
3245295104,3245296127,IT
3245296128,3245296639,GB
-3245296640,3245297151,TJ
-3245297152,3245297663,IT
-3245297664,3245297919,FR
3245297920,3245298175,NL
-3245298176,3245298431,GB
+3245298176,3245298431,IE
3245298432,3245298687,UA
3245298688,3245298943,GB
3245298944,3245299199,UA
-3245299200,3245299455,GB
3245299456,3245299711,AT
3245299712,3245299967,DE
3245299968,3245300223,BG
-3245300224,3245300479,FR
-3245300480,3245300991,RU
+3245300736,3245300991,RU
3245300992,3245301247,FI
3245301248,3245301503,DK
3245301504,3245301759,BE
@@ -112731,17 +59851,13 @@
3245303808,3245304831,SE
3245304832,3245306367,DE
3245306368,3245306879,UA
-3245306880,3245307391,RU
3245307392,3245307903,FI
3245307904,3245308415,RO
3245308416,3245308927,ES
-3245308928,3245309439,SE
3245309440,3245309951,UA
3245309952,3245311999,CZ
3245312000,3245314047,DE
3245314048,3245315071,PL
-3245315072,3245316095,IT
-3245316096,3245317119,SE
3245317120,3245318143,UA
3245318144,3245318399,IT
3245318400,3245318655,RO
@@ -112750,15 +59866,12 @@
3245319168,3245319423,HR
3245319424,3245319679,SE
3245319680,3245319935,PL
-3245319936,3245320191,DE
-3245320448,3245320959,DE
-3245320960,3245321215,IE
+3245319936,3245321215,DE
3245321216,3245321471,NL
3245321472,3245321727,UA
-3245321728,3245321983,PL
3245321984,3245322239,DE
3245322240,3245323263,RU
-3245323264,3245325311,GB
+3245324288,3245325311,GB
3245325312,3245326335,UA
3245326336,3245326847,SI
3245326848,3245327359,BG
@@ -112771,146 +59884,49 @@
3245333504,3245334527,SI
3245334528,3245334783,HU
3245334784,3245335039,BE
-3245335040,3245335551,GB
-3245335552,3245335807,BE
-3245335808,3245336063,RO
+3245335296,3245335551,GB
+3245335552,3245335807,NL
3245336064,3245336575,GB
3245336576,3245336831,RO
-3245336832,3245337087,DE
-3245337088,3245337343,GB
-3245337344,3245337599,BE
3245337600,3245337855,PL
3245337856,3245338367,DE
3245338368,3245339647,UA
3245339648,3245340671,LV
3245340672,3245341695,UA
3245341696,3245342719,RU
-3245342720,3245442685,GB
-3245442686,3245442686,FR
-3245442687,3245867007,GB
-3245867008,3245868543,IE
-3245868544,3245868575,GB
-3245868576,3245878303,IE
-3245878304,3245878335,US
-3245878336,3245888703,IE
-3245888704,3245888767,US
-3245888768,3245892639,IE
-3245892640,3245892647,US
-3245892648,3245892719,IE
-3245892720,3245892727,US
-3245892728,3245892823,IE
-3245892824,3245892832,GB
-3245892833,3245894391,IE
-3245894392,3245894399,GB
-3245894400,3245894719,IE
-3245894720,3245894751,US
-3245894752,3245896311,IE
-3245896312,3245896319,GB
-3245896320,3245896991,IE
-3245896992,3245897007,US
-3245897008,3245898951,IE
-3245898952,3245898959,GB
-3245898960,3245898967,IE
-3245898968,3245898975,GB
-3245898976,3245899343,IE
-3245899344,3245899351,GB
-3245899352,3245901831,IE
-3245901832,3245901839,GB
-3245901840,3245902127,IE
-3245902128,3245902135,GB
-3245902136,3245902887,IE
-3245902888,3245902895,GB
-3245902896,3245902903,IE
-3245902904,3245902911,GB
-3245902912,3245903031,IE
-3245903032,3245903039,GB
-3245903040,3245903959,IE
-3245903960,3245903967,FR
-3245903968,3245904087,IE
-3245904088,3245904095,GB
-3245904096,3245904543,IE
-3245904544,3245904559,GB
-3245904560,3245906367,IE
-3245906368,3245906431,GB
-3245906432,3245909567,IE
-3245909568,3245909631,US
-3245909632,3245910831,IE
-3245910832,3245910847,GB
-3245910848,3245911319,IE
-3245911320,3245911327,BM
-3245911328,3245914879,IE
-3245914880,3245915135,LU
-3245915136,3245916159,IE
-3245916160,3245916671,GB
-3245916672,3245916927,IE
-3245916928,3245917183,GB
-3245917184,3245917951,IE
-3245917952,3245918207,LU
-3245918208,3245921279,IE
-3245921280,3245921535,BE
-3245921536,3245922959,IE
-3245922960,3245922975,US
-3245922976,3245924647,IE
-3245924648,3245924655,GB
-3245924656,3245924671,IE
-3245924672,3245924679,GB
-3245924680,3245924687,IE
-3245924688,3245924695,GB
-3245924696,3245924751,IE
-3245924752,3245924767,GB
-3245924768,3245927583,IE
-3245927584,3245927647,GB
-3245927648,3245927959,IE
-3245927960,3245927967,US
-3245927968,3245931263,IE
+3245342720,3245867007,GB
+3245867008,3245916159,IE
+3245916160,3245917183,GB
+3245917184,3245931263,IE
3245931264,3245931519,GB
3245931520,3245932543,IE
3245932544,3245998079,BE
-3245998080,3246100351,GB
-3246100352,3246100367,DE
-3246100368,3246129151,GB
-3246129152,3246141439,RU
-3246141440,3246141695,UA
-3246141696,3246142975,RU
-3246142976,3246143231,UA
-3246143232,3246147839,RU
-3246147840,3246148095,UA
-3246148096,3246260223,RU
+3245998080,3246129151,GB
+3246129152,3246260223,RU
3246260224,3246325759,PT
-3246325760,3246328831,ES
-3246328832,3246329087,EU
-3246329088,3246329855,ES
-3246329856,3246350847,EU
-3246350848,3246351103,ES
-3246351104,3246351615,EU
3246351616,3246352639,ES
-3246352640,3246375159,EU
-3246375160,3246375423,GB
-3246375424,3246378495,EU
-3246378496,3246379007,ES
+3246374400,3246374655,ES
+3246376960,3246377215,ES
+3246378752,3246379007,ES
3246379008,3246381055,GB
-3246381056,3246381567,EU
-3246381568,3246381823,ES
-3246381824,3246391295,EU
-3246391296,3246417959,GB
-3246417960,3246417967,LV
-3246417968,3246537887,GB
-3246537888,3246537903,A2
-3246537904,3246547199,GB
-3246547200,3246547455,EU
-3246547456,3246613503,GB
+3246391296,3246613503,GB
3246613504,3246614527,HU
3246614528,3246744543,GB
3246744544,3246744559,NG
3246744560,3246784511,GB
-3246784512,3246915583,CH
+3246784512,3246825727,CH
+3246825728,3246825983,GB
+3246825984,3246826239,US
+3246826240,3246874623,CH
+3246874624,3246875647,DE
+3246875648,3246915583,CH
3246915584,3247046655,PT
3247046656,3247046911,AT
3247046912,3247048191,SI
3247048192,3247048703,NO
3247048704,3247048959,EE
3247048960,3247049215,SI
-3247049216,3247054079,DE
+3247049216,3247053823,DE
3247054080,3247054335,CH
3247054336,3247054591,LT
3247054592,3247054847,DE
@@ -112926,7 +59942,6 @@
3247065088,3247065343,US
3247065344,3247065599,CH
3247065600,3247065855,SE
-3247065856,3247066111,GB
3247066112,3247066367,DK
3247066368,3247066623,LV
3247066624,3247066879,CZ
@@ -112935,12 +59950,11 @@
3247067648,3247067903,RU
3247067904,3247068159,CH
3247068160,3247068415,UA
-3247068416,3247068671,RO
3247068672,3247068927,GB
3247068928,3247069183,UA
3247069184,3247069439,DE
3247069440,3247069695,RU
-3247069696,3247069951,FR
+3247069696,3247069951,NL
3247069952,3247070207,DE
3247070208,3247070463,IL
3247070464,3247070719,UA
@@ -112948,7 +59962,7 @@
3247070976,3247071231,GB
3247071232,3247071487,DE
3247071488,3247072255,RO
-3247072256,3247072511,DE
+3247072256,3247072511,IE
3247072512,3247072767,BE
3247072768,3247073023,SE
3247073024,3247073279,RO
@@ -112959,16 +59973,12 @@
3247074304,3247074559,DE
3247074560,3247074815,SE
3247074816,3247075071,PL
-3247075072,3247075327,IE
3247075328,3247076095,DE
3247076096,3247076351,DK
3247076352,3247076607,TR
3247076608,3247076863,DE
3247076864,3247077119,PL
3247077120,3247077375,DE
-3247077376,3247077631,GB
-3247077632,3247077887,NL
-3247077888,3247078143,UA
3247078144,3247078399,AT
3247078400,3247078655,DK
3247078656,3247078911,HU
@@ -112983,8 +59993,6 @@
3247086592,3247087615,DE
3247087616,3247088639,IT
3247088640,3247089663,DE
-3247089664,3247090687,RO
-3247090688,3247091711,LV
3247091712,3247092735,RU
3247092736,3247093759,DE
3247093760,3247094783,UA
@@ -113001,697 +60009,25 @@
3247108096,3247109119,PL
3247109120,3247110143,UA
3247110144,3247111167,NL
-3247111168,3247112191,DE
3247112192,3247177727,FR
3247177728,3247243263,TR
3247243264,3247244287,DE
-3247244288,3247244351,NL
-3247244352,3247244359,DE
-3247244360,3247244367,NL
-3247244368,3247244375,DE
-3247244376,3247244391,NL
-3247244392,3247244399,DE
-3247244400,3247244767,NL
-3247244768,3247244775,DE
-3247244776,3247244927,NL
-3247244928,3247244935,DE
-3247244936,3247245047,NL
-3247245048,3247245055,DE
-3247245056,3247245063,NL
-3247245064,3247245071,DE
-3247245072,3247245175,NL
-3247245176,3247245183,DE
-3247245184,3247245471,NL
-3247245472,3247245479,DE
-3247245480,3247245519,NL
-3247245520,3247245527,DE
-3247245528,3247245583,NL
-3247245584,3247245591,DE
-3247245592,3247245599,NL
-3247245600,3247245607,DE
-3247245608,3247245639,NL
-3247245640,3247245647,DE
-3247245648,3247245655,NL
-3247245656,3247245663,DE
-3247245664,3247245791,NL
-3247245792,3247245799,DE
-3247245800,3247245959,NL
-3247245960,3247245967,DE
-3247245968,3247246007,NL
-3247246008,3247246023,DE
-3247246024,3247246039,NL
-3247246040,3247246047,DE
-3247246048,3247246175,NL
-3247246176,3247246183,DE
-3247246184,3247246271,NL
-3247246272,3247246279,DE
-3247246280,3247246503,NL
-3247246504,3247246511,DE
-3247246512,3247246527,NL
-3247246528,3247246535,DE
-3247246536,3247246559,NL
-3247246560,3247246567,DE
-3247246568,3247246639,NL
-3247246640,3247246655,DE
-3247246656,3247246839,NL
-3247246840,3247246847,DE
-3247246848,3247246943,NL
-3247246944,3247246951,DE
-3247246952,3247246967,NL
-3247246968,3247246975,DE
-3247246976,3247246991,NL
-3247246992,3247246999,DE
-3247247000,3247247111,NL
-3247247112,3247247119,DE
-3247247120,3247247175,NL
-3247247176,3247247183,DE
-3247247184,3247247367,NL
-3247247368,3247247375,DE
-3247247376,3247247407,NL
-3247247408,3247247415,DE
-3247247416,3247247535,NL
-3247247536,3247247551,DE
-3247247552,3247247671,NL
-3247247672,3247247679,DE
-3247247680,3247247791,NL
-3247247792,3247247799,DE
-3247247800,3247247807,NL
-3247247808,3247247815,DE
-3247247816,3247247871,NL
-3247247872,3247247887,DE
-3247247888,3247247975,NL
-3247247976,3247247983,DE
-3247247984,3247247999,NL
-3247248000,3247248015,DE
-3247248016,3247248055,NL
-3247248056,3247248063,DE
-3247248064,3247248095,NL
-3247248096,3247248103,DE
-3247248104,3247248159,NL
-3247248160,3247248167,DE
-3247248168,3247248175,NL
-3247248176,3247248183,DE
-3247248184,3247248199,NL
-3247248200,3247248207,DE
-3247248208,3247248359,NL
-3247248360,3247248367,DE
-3247248368,3247248383,NL
-3247248384,3247250431,DE
-3247250432,3247250583,NL
-3247250584,3247250591,DE
-3247250592,3247250663,NL
-3247250664,3247250679,DE
-3247250680,3247250847,NL
-3247250848,3247250855,DE
-3247250856,3247250863,NL
-3247250864,3247250871,DE
-3247250872,3247250927,NL
-3247250928,3247250935,DE
-3247250936,3247251047,NL
-3247251048,3247251055,DE
-3247251056,3247251143,NL
-3247251144,3247251151,DE
-3247251152,3247251191,NL
-3247251192,3247251199,DE
-3247251200,3247251319,NL
-3247251320,3247251327,DE
-3247251328,3247251487,NL
-3247251488,3247251495,DE
-3247251496,3247251583,NL
-3247251584,3247251591,DE
-3247251592,3247251615,NL
-3247251616,3247251623,DE
-3247251624,3247251631,NL
-3247251632,3247251639,DE
-3247251640,3247251647,NL
-3247251648,3247251655,DE
-3247251656,3247251759,NL
-3247251760,3247251767,DE
-3247251768,3247251791,NL
-3247251792,3247251799,DE
-3247251800,3247251871,NL
-3247251872,3247251879,DE
-3247251880,3247251887,NL
-3247251888,3247251895,DE
-3247251896,3247251943,NL
-3247251944,3247251951,DE
-3247251952,3247251975,NL
-3247251976,3247251983,DE
-3247251984,3247252023,NL
-3247252024,3247252031,DE
-3247252032,3247252111,NL
-3247252112,3247252119,DE
-3247252120,3247252199,NL
-3247252200,3247252207,DE
-3247252208,3247252327,NL
-3247252328,3247252335,DE
-3247252336,3247252463,NL
-3247252464,3247252471,DE
-3247252472,3247252479,NL
-3247252480,3247252487,DE
-3247252488,3247252623,NL
-3247252624,3247252631,DE
-3247252632,3247252687,NL
-3247252688,3247252695,DE
-3247252696,3247252959,NL
-3247252960,3247252967,DE
-3247252968,3247252999,NL
-3247253000,3247253007,DE
-3247253008,3247253111,NL
-3247253112,3247253119,DE
-3247253120,3247253143,NL
-3247253144,3247253151,DE
-3247253152,3247253215,NL
-3247253216,3247253223,DE
-3247253224,3247253479,NL
-3247253480,3247253487,DE
-3247253488,3247253503,NL
-3247253504,3247255295,DE
-3247255296,3247255367,NL
-3247255368,3247255375,DE
-3247255376,3247255559,NL
-3247255560,3247255567,DE
-3247255568,3247255655,NL
-3247255656,3247255663,DE
-3247255664,3247255671,NL
-3247255672,3247255679,DE
-3247255680,3247255711,NL
-3247255712,3247255719,DE
-3247255720,3247255759,NL
-3247255760,3247255767,DE
-3247255768,3247255823,NL
-3247255824,3247255831,DE
-3247255832,3247256071,NL
-3247256072,3247256079,DE
-3247256080,3247256279,NL
-3247256280,3247256287,DE
-3247256288,3247256367,NL
-3247256368,3247256375,DE
-3247256376,3247256415,NL
-3247256416,3247256423,DE
-3247256424,3247256607,NL
-3247256608,3247256615,DE
-3247256616,3247256623,NL
-3247256624,3247256631,DE
-3247256632,3247256799,NL
-3247256800,3247256807,DE
-3247256808,3247256831,NL
-3247256832,3247260671,DE
-3247260672,3247260679,NL
-3247260680,3247260687,DE
-3247260688,3247260879,NL
-3247260880,3247260887,DE
-3247260888,3247260983,NL
-3247260984,3247260991,DE
-3247260992,3247261039,NL
-3247261040,3247261047,DE
-3247261048,3247261207,NL
-3247261208,3247261223,DE
-3247261224,3247261303,NL
-3247261304,3247261311,DE
-3247261312,3247261791,NL
-3247261792,3247261799,DE
-3247261800,3247261935,NL
-3247261936,3247261943,DE
-3247261944,3247261951,NL
-3247261952,3247261959,DE
-3247261960,3247261991,NL
-3247261992,3247261999,DE
-3247262000,3247262015,NL
-3247262016,3247262023,DE
-3247262024,3247262047,NL
-3247262048,3247262055,DE
-3247262056,3247262095,NL
-3247262096,3247262111,DE
-3247262112,3247262151,NL
-3247262152,3247262159,DE
-3247262160,3247262223,NL
-3247262224,3247262231,DE
-3247262232,3247262439,NL
-3247262440,3247262447,DE
-3247262448,3247262615,NL
-3247262616,3247262623,DE
-3247262624,3247262663,NL
-3247262664,3247262671,DE
-3247262672,3247262839,NL
-3247262840,3247262847,DE
-3247262848,3247262855,NL
-3247262856,3247262863,DE
-3247262864,3247262975,NL
-3247262976,3247262983,DE
-3247262984,3247263047,NL
-3247263048,3247263055,DE
-3247263056,3247263231,NL
-3247263232,3247263239,DE
-3247263240,3247263255,NL
-3247263256,3247263263,DE
-3247263264,3247263303,NL
-3247263304,3247263311,DE
-3247263312,3247263335,NL
-3247263336,3247263359,DE
-3247263360,3247263551,NL
-3247263552,3247263559,DE
-3247263560,3247263599,NL
-3247263600,3247263607,DE
-3247263608,3247263623,NL
-3247263624,3247263631,DE
-3247263632,3247263855,NL
-3247263856,3247263863,DE
-3247263864,3247263887,NL
-3247263888,3247263895,DE
-3247263896,3247263911,NL
-3247263912,3247263919,DE
-3247263920,3247263927,NL
-3247263928,3247263935,DE
-3247263936,3247264359,NL
-3247264360,3247264367,DE
-3247264368,3247264447,NL
-3247264448,3247264455,DE
-3247264456,3247264615,NL
-3247264616,3247264623,DE
-3247264624,3247264719,NL
-3247264720,3247264727,DE
-3247264728,3247265095,NL
-3247265096,3247265103,DE
-3247265104,3247265175,NL
-3247265176,3247265183,DE
-3247265184,3247265199,NL
-3247265200,3247265207,DE
-3247265208,3247265239,NL
-3247265240,3247265247,DE
-3247265248,3247265319,NL
-3247265320,3247265327,DE
-3247265328,3247265535,NL
-3247265536,3247265543,DE
-3247265544,3247265663,NL
-3247265664,3247265671,DE
-3247265672,3247265799,NL
-3247265800,3247265807,DE
-3247265808,3247265815,NL
-3247265816,3247265823,DE
-3247265824,3247265839,NL
-3247265840,3247265847,DE
-3247265848,3247265871,NL
-3247265872,3247265879,DE
-3247265880,3247265895,NL
-3247265896,3247265903,DE
-3247265904,3247265935,NL
-3247265936,3247265943,DE
-3247265944,3247266175,NL
-3247266176,3247266183,DE
-3247266184,3247266287,NL
-3247266288,3247266295,DE
-3247266296,3247266559,NL
-3247266560,3247271679,DE
-3247271680,3247271687,NL
-3247271688,3247271695,DE
-3247271696,3247271807,NL
-3247271808,3247271815,DE
-3247271816,3247271935,NL
-3247271936,3247271943,DE
-3247271944,3247271999,NL
-3247272000,3247272007,DE
-3247272008,3247272071,NL
-3247272072,3247272079,DE
-3247272080,3247272087,NL
-3247272088,3247272095,DE
-3247272096,3247272151,NL
-3247272152,3247272159,DE
-3247272160,3247272367,NL
-3247272368,3247272383,DE
-3247272384,3247272591,NL
-3247272592,3247272599,DE
-3247272600,3247272671,NL
-3247272672,3247272679,DE
-3247272680,3247272727,NL
-3247272728,3247272735,DE
-3247272736,3247272935,NL
-3247272936,3247272943,DE
-3247272944,3247272983,NL
-3247272984,3247272991,DE
-3247272992,3247273031,NL
-3247273032,3247273039,DE
-3247273040,3247273063,NL
-3247273064,3247273079,DE
-3247273080,3247273111,NL
-3247273112,3247273119,DE
-3247273120,3247273415,NL
-3247273416,3247273431,DE
-3247273432,3247273503,NL
-3247273504,3247273511,DE
-3247273512,3247273527,NL
-3247273528,3247273535,DE
-3247273536,3247273591,NL
-3247273592,3247273599,DE
-3247273600,3247273671,NL
-3247273672,3247273679,DE
-3247273680,3247273711,NL
-3247273712,3247273719,DE
-3247273720,3247273751,NL
-3247273752,3247273759,DE
-3247273760,3247273791,NL
-3247273792,3247273799,DE
-3247273800,3247274167,NL
-3247274168,3247274175,DE
-3247274176,3247274239,NL
-3247274240,3247274503,DE
-3247274504,3247274519,NL
-3247274520,3247274535,DE
-3247274536,3247274567,NL
-3247274568,3247274583,DE
-3247274584,3247274615,NL
-3247274616,3247274623,DE
-3247274624,3247274647,NL
-3247274648,3247274655,DE
-3247274656,3247274863,NL
-3247274864,3247274871,DE
-3247274872,3247275239,NL
-3247275240,3247275247,DE
-3247275248,3247275263,NL
-3247275264,3247276031,DE
-3247276032,3247276079,NL
-3247276080,3247276087,DE
-3247276088,3247276127,NL
-3247276128,3247276135,DE
-3247276136,3247276415,NL
-3247276416,3247276423,DE
-3247276424,3247276471,NL
-3247276472,3247276479,DE
-3247276480,3247276503,NL
-3247276504,3247276511,DE
-3247276512,3247276615,NL
-3247276616,3247276631,DE
-3247276632,3247276759,NL
-3247276760,3247276775,DE
-3247276776,3247276807,NL
-3247276808,3247276815,DE
-3247276816,3247276831,NL
-3247276832,3247276839,DE
-3247276840,3247276855,NL
-3247276856,3247276863,DE
-3247276864,3247276871,NL
-3247276872,3247276879,DE
-3247276880,3247276927,NL
-3247276928,3247276935,DE
-3247276936,3247276951,NL
-3247276952,3247276959,DE
-3247276960,3247277319,NL
-3247277320,3247277327,DE
-3247277328,3247277479,NL
-3247277480,3247277487,DE
-3247277488,3247277743,NL
-3247277744,3247277751,DE
-3247277752,3247277847,NL
-3247277848,3247277855,DE
-3247277856,3247277935,NL
-3247277936,3247277943,DE
-3247277944,3247278047,NL
-3247278048,3247278055,DE
-3247278056,3247278103,NL
-3247278104,3247278111,DE
-3247278112,3247278495,NL
-3247278496,3247278503,DE
-3247278504,3247278591,NL
-3247278592,3247278599,DE
-3247278600,3247278751,NL
-3247278752,3247278759,DE
-3247278760,3247278783,NL
-3247278784,3247278791,DE
-3247278792,3247278847,NL
-3247278848,3247280127,DE
-3247280128,3247280191,NL
-3247280192,3247280199,DE
-3247280200,3247280255,NL
-3247280256,3247280263,DE
-3247280264,3247280279,NL
-3247280280,3247280287,DE
-3247280288,3247280487,NL
-3247280488,3247280495,DE
-3247280496,3247281159,NL
-3247281160,3247281167,DE
-3247281168,3247281239,NL
-3247281240,3247281247,DE
-3247281248,3247281351,NL
-3247281352,3247281359,DE
-3247281360,3247281447,NL
-3247281448,3247281455,DE
-3247281456,3247281519,NL
-3247281520,3247281535,DE
-3247281536,3247281543,NL
-3247281544,3247281551,DE
-3247281552,3247281567,NL
-3247281568,3247281575,DE
-3247281576,3247281655,NL
-3247281656,3247281671,DE
-3247281672,3247281703,NL
-3247281704,3247281711,DE
-3247281712,3247281791,NL
-3247281792,3247281799,DE
-3247281800,3247281855,NL
-3247281856,3247281863,DE
-3247281864,3247281903,NL
-3247281904,3247281911,DE
-3247281912,3247281983,NL
-3247281984,3247281991,DE
-3247281992,3247282063,NL
-3247282064,3247282071,DE
-3247282072,3247282095,NL
-3247282096,3247282103,DE
-3247282104,3247282271,NL
-3247282272,3247282279,DE
-3247282280,3247282311,NL
-3247282312,3247282319,DE
-3247282320,3247282335,NL
-3247282336,3247282343,DE
-3247282344,3247282479,NL
-3247282480,3247282487,DE
-3247282488,3247282575,NL
-3247282576,3247282583,DE
-3247282584,3247282799,NL
-3247282800,3247282807,DE
-3247282808,3247282999,NL
-3247283000,3247283007,DE
-3247283008,3247283103,NL
-3247283104,3247283111,DE
-3247283112,3247283143,NL
-3247283144,3247283151,DE
-3247283152,3247283263,NL
-3247283264,3247283271,DE
-3247283272,3247283311,NL
-3247283312,3247283319,DE
-3247283320,3247283391,NL
-3247283392,3247283399,DE
-3247283400,3247283415,NL
-3247283416,3247283423,DE
-3247283424,3247283447,NL
-3247283448,3247283455,DE
-3247283456,3247283567,NL
-3247283568,3247283575,DE
-3247283576,3247283759,NL
-3247283760,3247283767,DE
-3247283768,3247283799,NL
-3247283800,3247283807,DE
-3247283808,3247283927,NL
-3247283928,3247283935,DE
-3247283936,3247283943,NL
-3247283944,3247283951,DE
-3247283952,3247283983,NL
-3247283984,3247283999,DE
-3247284000,3247284015,NL
-3247284016,3247284023,DE
-3247284024,3247284263,NL
-3247284264,3247284271,DE
-3247284272,3247284319,NL
-3247284320,3247284327,DE
-3247284328,3247284367,NL
-3247284368,3247284375,DE
-3247284376,3247284447,NL
-3247284448,3247284455,DE
-3247284456,3247284647,NL
-3247284648,3247284655,DE
-3247284656,3247284727,NL
-3247284728,3247284735,DE
-3247284736,3247284887,NL
-3247284888,3247284895,DE
-3247284896,3247285127,NL
-3247285128,3247285135,DE
-3247285136,3247285183,NL
-3247285184,3247285191,DE
-3247285192,3247285375,NL
-3247285376,3247285383,DE
-3247285384,3247285391,NL
-3247285392,3247285399,DE
-3247285400,3247285471,NL
-3247285472,3247285479,DE
-3247285480,3247285623,NL
-3247285624,3247285631,DE
-3247285632,3247285711,NL
-3247285712,3247285719,DE
-3247285720,3247285807,NL
-3247285808,3247285815,DE
-3247285816,3247285855,NL
-3247285856,3247285863,DE
-3247285864,3247285871,NL
-3247285872,3247285879,DE
-3247285880,3247285943,NL
-3247285944,3247285959,DE
-3247285960,3247286007,NL
-3247286008,3247286015,DE
-3247286016,3247286047,NL
-3247286048,3247286055,DE
-3247286056,3247286087,NL
-3247286088,3247286095,DE
-3247286096,3247286135,NL
-3247286136,3247286143,DE
-3247286144,3247286327,NL
-3247286328,3247286343,DE
-3247286344,3247286359,NL
-3247286360,3247286367,DE
-3247286368,3247286455,NL
-3247286456,3247286463,DE
-3247286464,3247286503,NL
-3247286504,3247286511,DE
-3247286512,3247287167,NL
-3247287168,3247287175,DE
-3247287176,3247287503,NL
-3247287504,3247287511,DE
-3247287512,3247287895,NL
-3247287896,3247287903,DE
-3247287904,3247287959,NL
-3247287960,3247287967,DE
-3247287968,3247287975,NL
-3247287976,3247287983,DE
-3247287984,3247288055,NL
-3247288056,3247288063,DE
-3247288064,3247288231,NL
-3247288232,3247288239,DE
-3247288240,3247288247,NL
-3247288248,3247288255,DE
-3247288256,3247288319,NL
-3247288320,3247299363,DE
-3247299364,3247299364,EU
-3247299365,3247301119,DE
-3247301120,3247301375,NL
-3247301376,3247302655,DE
-3247302656,3247302783,NL
-3247302784,3247302807,DE
-3247302808,3247302871,NL
-3247302872,3247302879,DE
-3247302880,3247302951,NL
-3247302952,3247302959,DE
-3247302960,3247303047,NL
-3247303048,3247303071,DE
-3247303072,3247303151,NL
-3247303152,3247303159,DE
-3247303160,3247303343,NL
-3247303344,3247303359,DE
-3247303360,3247303615,NL
-3247303616,3247303623,DE
-3247303624,3247303671,NL
-3247303672,3247303679,DE
-3247303680,3247304007,NL
-3247304008,3247304015,DE
-3247304016,3247304351,NL
-3247304352,3247304359,DE
-3247304360,3247304751,NL
-3247304752,3247304759,DE
-3247304760,3247304879,NL
-3247304880,3247304887,DE
-3247304888,3247305247,NL
-3247305248,3247305255,DE
-3247305256,3247305455,NL
-3247305456,3247305463,DE
-3247305464,3247305471,NL
-3247305472,3247305479,DE
-3247305480,3247305583,NL
-3247305584,3247305591,DE
-3247305592,3247305623,NL
-3247305624,3247305631,DE
-3247305632,3247305823,NL
-3247305824,3247305831,DE
-3247305832,3247305959,NL
-3247305960,3247305975,DE
-3247305976,3247305991,NL
-3247305992,3247306007,DE
-3247306008,3247306151,NL
-3247306152,3247306159,DE
-3247306160,3247306199,NL
-3247306200,3247306215,DE
-3247306216,3247306295,NL
-3247306296,3247306327,DE
-3247306328,3247306335,NL
-3247306336,3247306343,DE
-3247306344,3247306423,NL
-3247306424,3247306431,DE
-3247306432,3247306447,NL
-3247306448,3247306455,DE
-3247306456,3247306567,NL
-3247306568,3247306575,DE
-3247306576,3247306583,NL
-3247306584,3247306599,DE
-3247306600,3247306631,NL
-3247306632,3247306639,DE
-3247306640,3247306671,NL
-3247306672,3247306679,DE
-3247306680,3247306783,NL
-3247306784,3247306791,DE
-3247306792,3247306799,NL
-3247306800,3247306807,DE
-3247306808,3247306919,NL
-3247306920,3247306943,DE
-3247306944,3247306959,NL
-3247306960,3247306967,DE
-3247306968,3247306999,NL
-3247307000,3247307007,DE
-3247307008,3247307071,NL
-3247307072,3247307079,DE
-3247307080,3247307303,NL
-3247307304,3247307311,DE
-3247307312,3247307375,NL
-3247307376,3247307383,DE
-3247307384,3247307415,NL
-3247307416,3247307423,DE
-3247307424,3247307543,NL
-3247307544,3247307551,DE
-3247307552,3247307575,NL
-3247307576,3247307583,DE
-3247307584,3247307591,NL
-3247307592,3247307599,DE
-3247307600,3247307687,NL
-3247307688,3247307695,DE
-3247307696,3247307871,NL
-3247307872,3247307879,DE
-3247307880,3247307959,NL
-3247307960,3247307967,DE
-3247307968,3247307991,NL
-3247307992,3247307999,DE
-3247308000,3247308087,NL
-3247308088,3247308095,DE
-3247308096,3247308111,NL
-3247308112,3247308127,DE
-3247308128,3247308159,NL
-3247308160,3247308175,DE
-3247308176,3247308183,NL
-3247308184,3247308191,DE
-3247308192,3247308207,NL
-3247308208,3247308215,DE
-3247308216,3247308223,NL
-3247308224,3247308231,DE
-3247308232,3247308415,NL
-3247308416,3247308423,DE
-3247308424,3247308479,NL
-3247308480,3247308487,DE
-3247308488,3247308727,NL
-3247308728,3247308735,DE
-3247308736,3247308783,NL
-3247308784,3247308791,DE
-3247308792,3247308799,NL
+3247244288,3247253503,NL
+3247253504,3247254527,DE
+3247254528,3247267839,NL
+3247267840,3247268351,DE
+3247268352,3247290367,NL
+3247290368,3247291391,DE
+3247291392,3247292415,NL
+3247292416,3247300607,DE
+3247300608,3247308799,NL
3247308800,3247309055,BG
-3247309056,3247313663,FI
+3247309056,3247309567,FI
+3247309824,3247313663,FI
3247313664,3247313919,AM
3247313920,3247316479,FI
3247316480,3247316991,RU
-3247316992,3247322367,FI
+3247321600,3247322111,FI
3247322368,3247322623,DE
3247322624,3247323135,FI
3247323136,3247323647,RU
@@ -113704,20 +60040,19 @@
3247334400,3247334655,NO
3247334656,3247335167,FI
3247335168,3247335423,DK
-3247335424,3247336447,FI
+3247335424,3247336447,DE
3247336448,3247337215,NO
3247337216,3247337471,CH
3247337472,3247337983,PL
3247337984,3247338239,UA
3247338240,3247338495,PL
3247338496,3247338751,SI
-3247338752,3247339519,GB
+3247339008,3247339519,GB
3247339520,3247340543,FI
3247340544,3247340799,UA
3247340800,3247341055,CH
-3247341056,3247341311,FI
3247341312,3247341567,DE
-3247341568,3247345919,FI
+3247343616,3247345919,FI
3247345920,3247346175,HU
3247346176,3247346943,FI
3247346944,3247347199,SI
@@ -113725,12 +60060,14 @@
3247347456,3247347711,IL
3247347712,3247347967,FI
3247347968,3247348223,HU
-3247348224,3247348991,FI
+3247348224,3247348479,FI
3247348992,3247349247,DE
3247349248,3247349503,FR
3247349504,3247349759,UA
3247349760,3247353855,SE
-3247353856,3247362047,FI
+3247353856,3247357951,FI
+3247358464,3247359231,FI
+3247359488,3247362047,FI
3247362048,3247362303,RO
3247362304,3247362559,HU
3247362560,3247362815,PL
@@ -113745,21 +60082,19 @@
3247365120,3247365375,GB
3247365376,3247365631,UA
3247365632,3247365887,SA
-3247365888,3247366143,DE
-3247366144,3247371007,FI
+3247366144,3247370751,FI
3247371008,3247371263,PL
3247371264,3247371519,SE
3247371520,3247371775,GB
3247371776,3247372031,RU
3247372032,3247372287,FI
3247372288,3247372543,RO
-3247372544,3247372799,RU
3247372800,3247373055,RO
-3247373056,3247374335,FI
+3247373056,3247373567,FI
3247374336,3247374591,RU
-3247374592,3247382527,FI
-3247382528,3247382783,EU
-3247382784,3247394047,FI
+3247375360,3247380479,FI
+3247382528,3247390719,FI
+3247391744,3247394047,FI
3247394048,3247394303,PL
3247394304,3247397887,FI
3247397888,3247398143,RU
@@ -113770,51 +60105,39 @@
3247405056,3247405311,RO
3247405312,3247405567,PL
3247405568,3247405823,DE
-3247405824,3247432191,FI
+3247406080,3247432191,FI
3247432192,3247432447,TR
3247432448,3247438079,FI
3247438080,3247438335,IT
3247438336,3247439871,FI
3247439872,3247702015,ES
3247702016,3247702271,RO
-3247702272,3247703551,ES
+3247702528,3247703551,ES
3247703552,3247704063,FR
-3247704064,3247704831,ES
3247704832,3247705087,GB
3247705088,3247705855,ES
3247705856,3247706111,RU
3247706112,3247711743,ES
3247711744,3247712255,IT
-3247712256,3247713279,ES
+3247712768,3247713023,ES
3247713280,3247713535,RU
3247713536,3247713791,BE
3247713792,3247714047,SK
-3247714048,3247714303,RU
3247714304,3247716351,CH
-3247716352,3247717887,ES
-3247717888,3247718399,CH
-3247718400,3247742975,ES
+3247717376,3247717631,ES
+3247726592,3247742975,ES
3247742976,3247751167,DE
-3247751168,3247769599,ES
+3247751168,3247764479,ES
+3247764992,3247765247,ES
+3247765504,3247769599,ES
3247769600,3247771647,DE
3247771648,3247775743,ES
-3247775744,3247779647,DE
-3247779648,3247779839,IE
-3247779840,3247783935,DE
+3247775744,3247783935,DE
3247783936,3247792127,GB
-3247792128,3247794438,FR
-3247794439,3247794439,EU
-3247794440,3247800319,FR
+3247792128,3247800319,FR
3247800320,3247816703,DK
-3247816704,3247817471,BE
-3247817472,3247817727,CH
-3247817728,3247820799,BE
-3247820800,3247822335,CH
-3247822336,3247823103,DE
-3247823104,3247823871,AT
-3247823872,3247825151,BE
-3247825152,3247825919,CH
-3247825920,3247826943,BE
+3247818752,3247820799,BE
+3247820800,3247821823,CH
3247826944,3247828991,CH
3247828992,3247833087,BE
3247833088,3247833599,RU
@@ -113836,8 +60159,8 @@
3247842304,3247842815,PL
3247842816,3247843327,CZ
3247843328,3247843583,LT
-3247843584,3247845376,PL
-3247845377,3247845631,CH
+3247843584,3247845375,PL
+3247845376,3247845631,CH
3247845632,3247845887,UA
3247845888,3247846399,PL
3247846400,3247847423,RU
@@ -113845,7 +60168,7 @@
3247848448,3247849471,IT
3247849472,3247849727,DE
3247849728,3247849983,RU
-3247849984,3247850239,GB
+3247849984,3247850239,SE
3247850240,3247850495,BG
3247850496,3247850751,RU
3247850752,3247851007,PL
@@ -113858,7 +60181,6 @@
3247856128,3247856639,ES
3247856640,3247857663,RU
3247857664,3247858175,UA
-3247858176,3247858687,EU
3247858688,3247859711,RU
3247859712,3247859967,SE
3247859968,3247861759,RU
@@ -113875,10 +60197,7 @@
3247872000,3247875327,NL
3247875328,3247875583,PL
3247875584,3247876095,DE
-3247876096,3247876351,PL
3247876352,3247876607,FR
-3247876608,3247876863,ES
-3247876864,3247877119,DE
3247877120,3247877631,GR
3247877632,3247879167,AT
3247879168,3247882239,GB
@@ -113912,67 +60231,61 @@
3247928320,3247929343,HU
3247929344,3247931391,GB
3247931392,3247939583,IR
-3247939584,3247947775,UA
3247947776,3247960063,RU
3247960064,3247962111,UA
3247962112,3247963135,DE
3247963136,3247964159,UA
3247964160,3248095231,ES
-3248095232,3248095823,AT
-3248095824,3248095831,HU
-3248095832,3248160767,AT
-3248160768,3248221215,DE
-3248221216,3248221223,PL
-3248221224,3248226303,DE
+3248095232,3248160767,AT
+3248160768,3248226303,DE
3248226304,3248357375,NO
3248357376,3248488447,DE
3248488448,3248488703,FR
3248488704,3248491519,NO
3248491520,3248492031,RU
-3248492032,3248496895,NO
-3248496896,3248497151,US
+3248492032,3248492543,NO
+3248493568,3248496895,NO
+3248496896,3248497151,IL
3248497152,3248498431,NO
3248498432,3248498687,DE
-3248498688,3248513279,NO
+3248498688,3248504831,NO
3248513280,3248513535,UA
3248513536,3248514047,AT
-3248514048,3248521983,NO
+3248514048,3248521215,NO
3248521984,3248522239,RU
-3248522240,3248525311,NO
+3248522240,3248524287,NO
3248525312,3248525567,DE
-3248525568,3248525823,DK
-3248525824,3248528895,NO
+3248526336,3248527359,NO
+3248528384,3248528895,NO
3248528896,3248529151,RU
-3248529152,3248529407,BG
3248529408,3248540671,NO
3248540672,3248541183,RU
-3248541184,3248545791,NO
+3248541184,3248541695,SE
3248545792,3248546815,UA
3248546816,3248547839,RU
-3248547840,3248553727,NO
+3248547840,3248548351,NO
+3248549632,3248549887,SE
+3248549888,3248553215,NO
3248553728,3248553983,RU
3248553984,3248554239,RO
-3248554240,3248557055,NO
+3248554496,3248557055,NO
3248557056,3248558079,UA
3248558080,3248575487,NO
3248575488,3248576511,CZ
-3248576512,3248603135,NO
+3248576512,3248591871,NO
+3248592384,3248599039,NO
+3248599040,3248603135,SE
3248603136,3248603391,BG
3248603392,3248603647,RU
-3248603648,3248619519,NO
-3248619520,3248638463,DK
-3248638464,3248638719,GB
-3248638720,3248719871,DK
-3248719872,3248720127,EU
-3248720128,3248748543,DK
-3248748544,3248748799,EU
-3248748800,3248750591,DK
+3248603648,3248604159,NO
+3248604928,3248608767,NO
+3248609280,3248619519,NO
+3248619520,3248750591,DK
3248750592,3248750847,PT
-3248750848,3248752383,PL
-3248752384,3248752639,NL
+3248751616,3248752127,PL
3248752640,3248752895,DE
3248752896,3248753151,TR
-3248753152,3248753663,GB
+3248753408,3248753663,GB
3248753664,3248753919,FR
3248753920,3248754431,GB
3248754432,3248754687,AT
@@ -113983,18 +60296,16 @@
3248783616,3248783871,PL
3248783872,3248784127,UA
3248784128,3248785407,DE
-3248785408,3248785663,RO
+3248785408,3248785535,SI
+3248785536,3248785663,RO
3248785664,3248786943,SI
3248786944,3248787199,PL
-3248787200,3248787455,GB
+3248787200,3248787455,DE
3248787456,3248787711,NL
3248787712,3248787967,CH
3248787968,3248788223,RU
3248788224,3248788479,ES
-3248788480,3248788735,FR
-3248788736,3248788991,UA
-3248788992,3248789503,FR
-3248789504,3248789759,RO
+3248788480,3248789503,FR
3248789760,3248790015,FR
3248790016,3248790271,DE
3248790272,3248790527,DK
@@ -114003,15 +60314,9 @@
3248791040,3248791295,BE
3248791296,3248791551,DE
3248791552,3248792063,GB
-3248792064,3248792319,EU
-3248792320,3248792343,GB
-3248792344,3248792351,EU
-3248792352,3248792575,GB
-3248792576,3248796607,EU
+3248792320,3248792575,GB
3248796608,3248796863,GB
-3248796864,3248798975,EU
3248798976,3248799231,GB
-3248799232,3248799735,EU
3248799736,3248799743,GB
3248799744,3248800255,NL
3248800256,3248800767,RU
@@ -114020,8 +60325,8 @@
3248801792,3248802303,RU
3248802304,3248802815,FR
3248802816,3248803327,RU
-3248803328,3248804351,GB
-3248804352,3248804863,EU
+3248803328,3248803839,GB
+3248804352,3248804863,LV
3248804864,3248805375,DE
3248805376,3248805887,RU
3248805888,3248806399,NL
@@ -114029,8 +60334,7 @@
3248806912,3248807423,US
3248807936,3248808447,AT
3248808448,3248808959,GR
-3248808960,3248810079,FR
-3248810080,3248810111,UA
+3248808960,3248810111,FR
3248810112,3248810143,RU
3248810144,3248810175,CY
3248810176,3248810207,FR
@@ -114047,9 +60351,8 @@
3249012736,3249012991,DE
3249012992,3249014271,LU
3249014272,3249014783,DE
-3249014784,3249025535,LU
+3249014784,3249025023,LU
3249025536,3249025791,FR
-3249025792,3249026559,LU
3249026560,3249026815,PL
3249026816,3249045503,LU
3249045504,3249078271,DE
@@ -114099,7 +60402,6 @@
3249103872,3249104383,FI
3249104384,3249104895,RU
3249104896,3249105407,IL
-3249105408,3249105919,RU
3249105920,3249106431,NL
3249106432,3249106943,RU
3249106944,3249108479,PL
@@ -114160,32 +60462,17 @@
3249142784,3249143295,UA
3249143296,3249143807,GB
3249143808,3249274879,AT
-3249274880,3249277759,NL
-3249277760,3249277775,BG
-3249277776,3249279743,NL
-3249279744,3249279999,EU
-3249280000,3249290143,NL
-3249290144,3249290159,BG
-3249290160,3249313279,NL
-3249313280,3249313535,EU
-3249313536,3249330111,NL
-3249330112,3249330143,BG
-3249330144,3249350095,NL
-3249350096,3249350111,BG
-3249350112,3249369855,NL
-3249369856,3249370111,EU
-3249370112,3249405951,NL
-3249405952,3249406975,DE
-3249406976,3249407231,IT
-3249407232,3249521279,DE
+3249274880,3249405951,NL
+3249405952,3249521279,DE
3249521280,3249521343,UA
3249521344,3249537023,DE
3249537024,3249537279,PT
-3249537280,3249537791,NL
+3249537536,3249537791,NL
3249537792,3249538047,GB
3249538048,3249551359,NL
3249551360,3249552639,GB
-3249552640,3249574143,NL
+3249552640,3249565695,NL
+3249569792,3249574143,NL
3249574144,3249574399,RU
3249574400,3249574655,GB
3249574656,3249574911,UA
@@ -114195,13 +60482,14 @@
3249600256,3249600511,AT
3249600512,3249601535,UA
3249601536,3249601791,RU
-3249601792,3249668095,NL
+3249601792,3249655807,NL
+3249659904,3249668095,NL
3249668096,3249676287,IE
3249676288,3249676543,GB
3249676544,3249676799,IE
3249676800,3249677055,UA
3249677056,3249677311,SE
-3249677312,3249679103,IE
+3249677312,3249678847,IE
3249679104,3249679359,CH
3249679360,3249683455,IE
3249683456,3249684479,SE
@@ -114209,7 +60497,6 @@
3249698048,3249698303,PL
3249698304,3249698559,RU
3249698560,3249698815,HU
-3249698816,3249699839,GB
3249699840,3249700863,UA
3249701120,3249701631,SE
3249701632,3249701887,RU
@@ -114221,7 +60508,6 @@
3249703680,3249703935,GB
3249703936,3249704191,FR
3249704192,3249704447,RO
-3249704448,3249704703,DE
3249704704,3249704959,PL
3249704960,3249705983,UA
3249705984,3249706495,AT
@@ -114253,17 +60539,15 @@
3249716480,3249716735,NL
3249716736,3249717247,UA
3249717248,3249718271,LV
-3249718272,3249719295,DE
3249719296,3249720319,IR
3249720320,3249721343,IT
3249721344,3249721599,AT
3249721600,3249721855,BE
-3249721856,3249722623,FR
+3249721856,3249722367,FR
3249722624,3249723135,PL
3249723136,3249723391,RU
3249723392,3249723647,IT
3249723648,3249723903,GB
-3249723904,3249724159,TR
3249724160,3249724415,LU
3249724416,3249724671,IL
3249724672,3249724927,RU
@@ -114272,7 +60556,6 @@
3249725440,3249725951,RO
3249725952,3249726463,DE
3249726464,3249726975,UA
-3249726976,3249727487,IT
3249727488,3249727999,LV
3249728000,3249728511,IT
3249728512,3249729023,UA
@@ -114292,35 +60575,30 @@
3249829888,3249830143,GB
3249830144,3249830399,SE
3249830400,3249830655,IT
-3249830656,3249830911,DK
-3249830912,3249843711,SE
-3249843712,3249843839,GB
-3249843840,3249843967,US
-3249843968,3249844479,SE
+3249830656,3249844479,SE
3249844480,3249844735,AT
3249844736,3249844991,AU
3249844992,3249845759,SE
3249845760,3249846271,DE
3249846272,3249850623,SE
3249850624,3249850879,GB
-3249850880,3249855487,SE
+3249850880,3249854719,SE
+3249854720,3249854975,US
+3249854976,3249855487,SE
3249855488,3249856511,NL
3249856512,3249859583,SE
3249859584,3249860095,DE
3249860096,3249861375,SE
3249861376,3249861631,BE
3249861632,3249862143,DE
-3249862144,3249862399,BE
-3249862400,3249862655,SE
+3249862144,3249862655,SE
3249862656,3249863167,DE
3249863168,3249863423,BE
3249863424,3249863679,SE
3249863680,3249863935,ES
3249863936,3249865471,SE
3249865472,3249866751,GB
-3249866752,3249868031,SE
-3249868032,3249868287,DK
-3249868288,3249868543,SE
+3249866752,3249868543,SE
3249868544,3249868799,DE
3249868800,3249869823,NL
3249869824,3249871103,SE
@@ -114330,30 +60608,23 @@
3249871872,3249872383,SE
3249872384,3249872639,GB
3249872640,3249910783,SE
-3249910784,3249912319,GB
-3249912320,3249924607,SE
-3249924608,3249924863,NO
-3249924864,3249926143,SE
+3249910784,3249911807,GB
+3249911808,3249926143,SE
3249926144,3249926399,AU
3249926400,3249926655,SE
3249926656,3249926911,AU
3249926912,3249929471,SE
3249929472,3249929983,CA
-3249929984,3249930239,NO
-3249930240,3249931007,SE
-3249931008,3249931263,GB
-3249931264,3249931775,NL
-3249931776,3249932031,SE
-3249932032,3249932287,GB
+3249929984,3249932287,SE
3249932288,3249934335,US
-3249934336,3249935103,SE
-3249935104,3249935359,IT
-3249935360,3249960447,SE
+3249934336,3249934847,IT
+3249934848,3249960447,SE
3249960448,3249960959,DE
3249960960,3249961215,CA
3249961216,3249961471,SE
3249961472,3249961727,NL
-3249961728,3249967615,SE
+3249961728,3249967103,SE
+3249967104,3249967615,IL
3249967616,3249967871,GB
3249967872,3249968127,SE
3249968128,3249969151,FR
@@ -114363,10 +60634,7 @@
3249971200,3249971455,IT
3249971456,3249971711,SE
3249971712,3249972735,DE
-3249972736,3249972991,DK
-3249972992,3249973759,SE
-3249973760,3249974015,NL
-3249974016,3249974527,SE
+3249972736,3249974527,SE
3249974528,3249974783,ES
3249974784,3249976063,SE
3249976064,3249976319,FR
@@ -114383,8 +60651,7 @@
3249995264,3249995519,GB
3249995520,3249997055,SE
3249997056,3249997311,US
-3249997312,3249997567,IT
-3249997568,3250000127,SE
+3249997312,3250000127,SE
3250000128,3250000383,GB
3250000384,3250007295,SE
3250007296,3250007551,GB
@@ -114392,20 +60659,7 @@
3250010368,3250010879,CH
3250010880,3250012159,SE
3250012160,3250013183,DE
-3250013184,3250014207,SE
-3250014208,3250014719,DE
-3250014720,3250015231,SE
-3250015232,3250015743,FI
-3250015744,3250016767,SE
-3250016768,3250017279,NL
-3250017280,3250017535,CH
-3250017536,3250017791,SE
-3250017792,3250018303,DE
-3250018304,3250018815,FR
-3250018816,3250019071,AT
-3250019072,3250020095,SE
-3250020096,3250020351,CH
-3250020352,3250020863,SE
+3250013184,3250020863,SE
3250020864,3250021375,IT
3250021376,3250022399,FR
3250022400,3250023423,SE
@@ -114417,20 +60671,14 @@
3250030592,3250031103,DE
3250031104,3250031359,DK
3250031360,3250031615,US
-3250031616,3250032639,SE
-3250032640,3250032895,AP
-3250032896,3250035455,SE
+3250031616,3250035455,SE
3250035456,3250035711,US
3250035712,3250038271,SE
3250038272,3250039295,ES
3250039296,3250042623,SE
3250042624,3250043135,FR
-3250043136,3250043391,SE
-3250043392,3250043647,ES
-3250043648,3250061311,SE
-3250061312,3250183199,FI
-3250183200,3250183215,SE
-3250183216,3250192383,FI
+3250043136,3250061311,SE
+3250061312,3250192383,FI
3250192384,3250192639,AT
3250192640,3250192895,RU
3250192896,3250193151,IL
@@ -114440,7 +60688,7 @@
3250194176,3250194431,DE
3250194432,3250194687,FR
3250194688,3250194943,UA
-3250194944,3250195455,RO
+3250194944,3250195199,RO
3250195456,3250195711,DE
3250195712,3250196223,GB
3250196224,3250196479,UA
@@ -114452,18 +60700,17 @@
3250201600,3250202111,NL
3250202112,3250202367,BG
3250202368,3250202623,PL
-3250202624,3250233855,AT
+3250202624,3250233343,AT
+3250233600,3250233855,AT
3250233856,3250234111,GB
3250234112,3250234367,GR
-3250234368,3250245631,AT
+3250234368,3250241535,AT
3250245632,3250245887,TR
3250245888,3250246143,AT
3250246144,3250246399,GB
-3250246400,3250256895,AT
-3250256896,3250257151,CH
-3250257152,3250257663,AT
+3250246656,3250247423,AT
+3250247680,3250257663,AT
3250257664,3250257919,PL
-3250257920,3250258175,EU
3250258176,3250271231,AT
3250271232,3250271743,PL
3250271744,3250271999,LB
@@ -114473,18 +60720,20 @@
3250276352,3250276607,GB
3250276608,3250276863,RU
3250276864,3250277375,IT
-3250277376,3250278399,UA
+3250277376,3250277631,UA
+3250277632,3250277887,DE
+3250277888,3250278399,UA
3250278400,3250279423,RU
-3250279424,3250323199,AT
+3250279424,3250298879,AT
+3250308096,3250323199,AT
3250323200,3250323455,RU
3250323456,3250323711,PL
-3250323712,3250324479,SA
3250324480,3250324991,GB
3250324992,3250325247,AE
3250325248,3250325503,MA
3250325504,3250326527,OM
3250326528,3250327039,BH
-3250327040,3250331647,SA
+3250327040,3250327551,SA
3250331648,3250335743,MT
3250335744,3250339839,KW
3250339840,3250348031,JO
@@ -114499,32 +60748,27 @@
3250357904,3250357919,FR
3250357920,3250357927,PL
3250357928,3250357959,CY
-3250357960,3250358015,GB
+3250357960,3250357967,GB
+3250357976,3250358015,GB
3250358016,3250358527,LB
3250358528,3250358783,HU
-3250358784,3250359295,LB
3250359296,3250359807,HU
3250359808,3250362879,KW
3250362880,3250363391,DE
3250363392,3250363903,SE
3250363904,3250364415,DE
3250364416,3250372607,KW
-3250372608,3250373375,HU
-3250373376,3250373631,GB
+3250372608,3250373631,HU
3250373632,3250374143,DE
3250374144,3250374655,PL
3250374656,3250374911,SA
3250374912,3250375679,SE
3250375680,3250376703,GB
-3250376704,3250377983,AT
-3250377984,3250378239,AP
-3250378240,3250380799,AT
+3250376704,3250380799,AT
3250380800,3250386943,CH
3250386944,3250387199,SE
3250387200,3250387455,FR
3250387456,3250387711,DE
-3250387712,3250387967,FR
-3250387968,3250388223,JO
3250388224,3250388479,PL
3250388480,3250388735,UA
3250388736,3250388991,FR
@@ -114538,10 +60782,8 @@
3250408960,3250409471,DE
3250409472,3250409983,GB
3250409984,3250410495,DE
-3250410496,3250411007,AT
3250411008,3250411519,LT
3250411520,3250412031,RU
-3250412032,3250412543,FR
3250412544,3250413055,DK
3250413056,3250413567,DE
3250413568,3250414079,UA
@@ -114553,7 +60795,6 @@
3250417664,3250418175,IT
3250418176,3250418687,DE
3250418688,3250419199,PL
-3250419200,3250419711,NO
3250419712,3250420223,RU
3250420224,3250420735,IR
3250420736,3250421247,FR
@@ -114570,30 +60811,20 @@
3250425344,3250425599,TR
3250425600,3250425855,FR
3250425856,3250426111,LT
-3250426112,3250426367,NO
3250426368,3250426623,AT
3250426624,3250426879,BE
3250426880,3250427135,JO
3250427136,3250427391,NL
3250427392,3250429951,DE
-3250429952,3250434335,SI
-3250434336,3250434351,AT
-3250434352,3250438143,SI
-3250438144,3250443519,CH
-3250443520,3250443527,DE
-3250443528,3250446335,CH
-3250446336,3250451583,DE
-3250451584,3250451599,AT
-3250451600,3250454527,DE
+3250429952,3250438143,SI
+3250438144,3250446335,CH
+3250446336,3250454527,DE
3250454528,3250585599,BE
3250585600,3250585855,NL
-3250585856,3250588671,PT
-3250588672,3250588799,IE
+3250586624,3250588671,PT
3250588800,3250588927,CY
3250588928,3250589183,GB
3250589184,3250589439,DE
-3250589440,3250589471,IE
-3250589472,3250589503,NL
3250589504,3250589567,HR
3250589568,3250589631,RU
3250589632,3250589695,NO
@@ -114613,19 +60844,17 @@
3250601984,3250610175,GB
3250610176,3250618367,TR
3250618368,3250626559,RU
-3250626560,3250633983,PL
-3250633984,3250634239,US
-3250634240,3250634751,PL
+3250626560,3250634751,PL
3250634752,3250642943,GB
3250642944,3250651135,CH
3250651136,3250659327,IT
-3250659328,3250667519,EU
+3250659328,3250660607,GB
3250667520,3250675711,PL
3250675712,3250683903,GB
3250683904,3250692095,CH
3250692096,3250692351,NO
3250692352,3250692607,NL
-3250693376,3250693631,NL
+3250693376,3250693631,UA
3250693632,3250694143,DE
3250694144,3250694399,PL
3250694400,3250694655,GB
@@ -114659,19 +60888,15 @@
3250748160,3250748415,PL
3250748416,3250749439,UA
3250749440,3250749695,GH
-3250749696,3250749951,EU
-3250749952,3250750463,RO
-3250750464,3250750537,FR
-3250750538,3250750541,EU
-3250750542,3250751487,FR
+3250749696,3250749951,IT
+3250750208,3250750463,RO
+3250750464,3250751487,FR
3250751488,3250751999,DE
3250752000,3250752511,CH
3250752512,3250753023,BG
3250753024,3250754047,DE
3250754048,3250754303,AT
-3250754304,3250754559,GB
3250754560,3250755071,DE
-3250755072,3250755583,GB
3250755584,3250755839,FR
3250755840,3250756351,RU
3250756608,3250756863,BG
@@ -114684,7 +60909,6 @@
3250847744,3250978815,DE
3250978816,3251044351,HR
3251044352,3251109887,FI
-3251109888,3251110143,SI
3251110144,3251110655,BG
3251110656,3251110911,IT
3251110912,3251111167,FR
@@ -114695,19 +60919,14 @@
3251112192,3251112447,SK
3251112448,3251112703,RU
3251112704,3251112959,SE
-3251112960,3251113215,BG
-3251113216,3251113471,VG
-3251113472,3251113983,BG
+3251112960,3251113983,BG
3251114496,3251114751,RU
3251114752,3251115007,RO
3251115008,3251115263,PL
3251115264,3251115519,RU
3251115520,3251115775,UA
3251115776,3251116031,BE
-3251116032,3251116287,BG
3251116288,3251116543,GB
-3251116544,3251116799,DK
-3251116800,3251117055,GB
3251117056,3251117311,BG
3251117312,3251117567,FR
3251117568,3251117823,IL
@@ -114725,12 +60944,10 @@
3251123712,3251124223,RU
3251124736,3251125247,FR
3251125248,3251125759,BE
-3251125760,3251126271,RU
3251126272,3251126783,UA
3251126784,3251127295,PL
3251127296,3251127807,UA
3251127808,3251128319,NL
-3251128320,3251128831,DE
3251128832,3251129343,SE
3251129344,3251129855,UA
3251129856,3251130367,CH
@@ -114744,7 +60961,6 @@
3251133952,3251134463,RU
3251134464,3251134975,DE
3251134976,3251135999,GB
-3251136000,3251136511,RO
3251136512,3251137023,DK
3251137024,3251137535,DE
3251137536,3251138047,PL
@@ -114761,7 +60977,6 @@
3251143424,3251143679,LV
3251143680,3251143935,NL
3251143936,3251144191,PL
-3251144192,3251144447,TR
3251144448,3251144703,BE
3251144704,3251144959,HU
3251144960,3251145471,DE
@@ -114776,9 +60991,7 @@
3251147520,3251147775,NL
3251147776,3251148031,SE
3251148032,3251148287,RU
-3251148288,3251148543,EU
3251148544,3251148799,UA
-3251148800,3251149055,HU
3251149056,3251149311,NL
3251149312,3251149567,DE
3251149568,3251149823,IE
@@ -114788,7 +61001,6 @@
3251150848,3251151103,DE
3251151104,3251151359,UA
3251151360,3251151615,DE
-3251151616,3251151871,PL
3251151872,3251152127,NL
3251152128,3251152639,RO
3251152640,3251152895,UA
@@ -114835,11 +61047,9 @@
3251164416,3251164671,IT
3251164672,3251164927,NL
3251164928,3251165439,PL
-3251165440,3251165695,CH
3251165696,3251165951,DE
3251165952,3251166207,UA
3251166208,3251166463,CH
-3251166464,3251166719,RU
3251166720,3251166975,FR
3251166976,3251167231,CH
3251167232,3251167487,LV
@@ -114853,23 +61063,20 @@
3251170048,3251170303,NO
3251170304,3251170559,CH
3251170560,3251170815,BG
-3251170816,3251171327,RU
+3251171072,3251171327,RU
3251171328,3251171839,DE
3251171840,3251172095,RO
3251172096,3251172351,ES
-3251172352,3251172607,RO
3251172608,3251172863,GB
3251172864,3251173119,UA
3251173120,3251173375,SA
3251173376,3251173631,UA
3251173632,3251173887,DE
3251173888,3251174143,DK
-3251174144,3251174399,RU
-3251174400,3251174655,RO
3251174656,3251174911,DE
3251174912,3251175167,RO
3251175168,3251175423,UA
-3251175424,3251177471,IT
+3251175424,3251177471,FR
3251177472,3251179519,DE
3251179520,3251180031,SE
3251180032,3251180543,PL
@@ -114882,7 +61089,6 @@
3251183616,3251183871,LT
3251183872,3251184127,CH
3251184128,3251184383,PL
-3251184384,3251184639,DK
3251184640,3251184895,PL
3251184896,3251185151,DE
3251185408,3251185663,DK
@@ -114896,7 +61102,6 @@
3251187456,3251187711,GB
3251187712,3251188735,NL
3251188736,3251189759,DE
-3251189760,3251190783,IT
3251190784,3251191807,UA
3251191808,3251192319,GB
3251192320,3251192831,LV
@@ -114910,7 +61115,8 @@
3251197952,3251198975,RU
3251198976,3251199999,DE
3251200000,3251200511,SE
-3251200512,3251201279,UA
+3251200512,3251200767,UA
+3251201024,3251201279,UA
3251201280,3251201535,SI
3251201536,3251201791,AT
3251201792,3251202047,FR
@@ -114921,20 +61127,17 @@
3251203328,3251203583,SI
3251203584,3251203839,CZ
3251203840,3251204095,RU
-3251204096,3251204607,DE
3251205120,3251205631,UA
3251205632,3251206143,RU
3251206144,3251206655,GB
3251206656,3251207167,CH
3251207168,3251207679,GB
-3251207680,3251208191,RU
3251208192,3251209215,CY
3251209216,3251210239,GB
3251210240,3251211263,PL
3251211264,3251212287,UA
3251212288,3251212415,PL
3251212416,3251212671,FI
-3251212672,3251212799,SE
3251212800,3251212927,FR
3251212928,3251213055,RO
3251213056,3251213119,SE
@@ -114942,33 +61145,27 @@
3251213152,3251213183,FR
3251213184,3251213215,UA
3251213216,3251213247,CY
-3251213248,3251213311,GB
+3251213280,3251213311,GB
3251213312,3251213375,CY
3251213376,3251213439,DE
-3251213440,3251213503,GB
3251213504,3251213567,NL
3251213568,3251213631,FR
3251213632,3251213695,PL
3251213760,3251213823,CY
3251213824,3251213887,GB
3251213888,3251214015,CY
-3251214016,3251214079,UA
3251214080,3251214143,CY
3251214144,3251214207,AF
-3251214208,3251214271,RU
3251214272,3251214335,DE
3251214336,3251214463,RU
3251214464,3251214591,UA
3251214592,3251214975,GB
3251214976,3251215103,RO
-3251215104,3251215231,SI
3251215232,3251215359,IL
3251215360,3251215487,UA
3251215488,3251215615,SE
3251215616,3251215743,CY
-3251215744,3251215871,GB
3251215872,3251216127,RO
-3251216128,3251216255,FI
3251216256,3251216383,RU
3251216384,3251216639,GB
3251216640,3251216895,RO
@@ -114985,14 +61182,13 @@
3251220224,3251220479,UA
3251220480,3251222527,DE
3251222528,3251224575,GB
-3251224576,3251225087,UA
3251225088,3251225599,FR
3251225600,3251226111,GB
3251226112,3251226623,UA
3251226624,3251227135,GB
3251227136,3251227647,DE
3251227648,3251228159,GB
-3251228160,3251229695,UA
+3251228160,3251228671,UA
3251229696,3251230719,SI
3251230720,3251231743,UA
3251231744,3251232767,NO
@@ -115001,12 +61197,9 @@
3251234816,3251235839,RO
3251235840,3251236863,DE
3251236864,3251237887,BG
-3251237888,3251238911,DK
3251238912,3251239935,FR
-3251239936,3251240959,US
3251240960,3251241215,BE
3251241216,3251243007,GB
-3251243008,3251245055,BE
3251245056,3251245311,DE
3251245312,3251245567,BE
3251245568,3251245823,TR
@@ -115017,11 +61210,10 @@
3251246848,3251247103,NL
3251247104,3251249151,DE
3251249152,3251251199,NL
-3251251200,3251252735,EU
3251252736,3251256831,CH
3251256832,3251257343,GB
3251257344,3251259903,BE
-3251259904,3251261439,FR
+3251260672,3251261439,FR
3251261440,3251264255,CH
3251264256,3251265535,FR
3251265536,3251267839,NL
@@ -115032,8 +61224,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
@@ -115049,39 +61240,31 @@
3251272960,3251273471,FR
3251273472,3251290111,DE
3251290112,3251302399,GB
-3251302400,3251306239,LI
-3251306240,3251306495,EU
+3251302400,3251306495,LI
3251306496,3251306751,AT
3251306752,3251307007,MK
3251307008,3251307519,RS
3251307520,3251307775,MK
3251307776,3251308031,GB
3251308032,3251308543,RS
-3251308544,3251310591,US
3251310592,3251311103,SI
3251311104,3251311615,RS
3251311616,3251312127,GB
-3251312128,3251312383,RS
3251312384,3251312639,CH
-3251312640,3251314175,RS
-3251314176,3251314687,CH
+3251312640,3251314687,RS
3251314688,3251315711,FR
3251315712,3251317759,RU
3251317760,3251318783,PL
3251318784,3251319807,UA
-3251319808,3251320831,HU
3251320832,3251321855,PL
3251321856,3251322879,RU
-3251322880,3251329727,GB
-3251329728,3251329791,FR
-3251329792,3251331071,GB
-3251331072,3251331583,FR
+3251322880,3251331327,GB
+3251331328,3251331583,FR
3251331584,3251332095,PL
3251332096,3251333119,RU
3251333120,3251333631,CH
3251333632,3251334143,PT
3251334144,3251334655,FR
-3251334656,3251335167,UA
3251335168,3251335679,RU
3251335680,3251336191,RO
3251336192,3251336703,GB
@@ -115093,8 +61276,7 @@
3251347456,3251355647,DE
3251355648,3251356159,GB
3251356160,3251356671,AT
-3251356672,3251356927,LV
-3251356928,3251357183,EE
+3251356672,3251357183,EE
3251357184,3251357695,BG
3251357696,3251358207,ES
3251358208,3251358719,RU
@@ -115102,7 +61284,6 @@
3251359232,3251360255,PL
3251360256,3251360767,GB
3251360768,3251361279,FR
-3251361280,3251361791,RO
3251361792,3251362303,AT
3251362304,3251362815,UA
3251362816,3251363327,NL
@@ -115114,110 +61295,76 @@
3251366912,3251367423,UA
3251367424,3251367935,DE
3251367936,3251372031,GB
-3251372032,3251604447,IT
-3251604448,3251604455,CH
-3251604456,3251634175,IT
-3251634176,3251661311,FI
-3251661312,3251661567,NO
-3251661568,3251672575,FI
-3251672576,3251672831,NL
-3251672832,3251674879,FI
-3251674880,3251675135,BE
-3251675136,3251705343,FI
-3251705344,3251705599,DK
-3251705600,3251707391,FI
-3251707392,3251707647,SE
-3251707648,3251710207,FI
-3251710208,3251710215,NL
-3251710216,3251710223,FI
-3251710224,3251710239,NL
-3251710240,3251734271,FI
-3251734272,3251734527,CH
-3251734528,3251734783,NL
-3251734784,3251765247,FI
-3251765248,3251765503,NL
-3251765504,3251774207,FI
-3251774208,3251774463,DE
-3251774464,3251783423,FI
-3251783424,3251783679,GB
-3251783680,3251795455,FI
-3251795456,3251795711,GB
-3251795712,3251802879,FI
-3251802880,3251803135,BE
-3251803136,3251806207,FI
-3251806208,3251815167,BE
-3251815168,3251815679,LU
-3251815680,3251818495,BE
-3251818496,3251850495,FI
-3251850496,3251850751,FR
-3251850752,3251851007,CH
-3251851008,3251896319,FI
-3251896320,3252015687,NO
-3252015688,3252015695,SE
-3252015696,3252166655,NO
-3252166656,3252167423,SE
-3252167424,3252167679,NO
+3251372032,3251376127,IT
+3251376128,3251378175,SI
+3251378176,3251406847,IT
+3251406848,3251407871,SI
+3251407872,3251460095,IT
+3251460096,3251462143,SI
+3251462144,3251470335,IT
+3251470336,3251472383,SI
+3251472384,3251634175,IT
+3251634176,3251896319,FI
+3251896320,3252166655,NO
+3252166656,3252167679,SE
3252167680,3252176127,NL
-3252176128,3252176383,NO
-3252176384,3252176895,HR
-3252176896,3252177151,NO
-3252177152,3252178943,HR
-3252178944,3252179199,NO
-3252179200,3252179455,SE
+3252176128,3252177919,SE
+3252177920,3252178943,HR
+3252178944,3252179455,SE
3252179456,3252189183,NL
-3252189184,3252191231,NO
-3252191232,3252197119,HR
-3252197120,3252197375,NO
-3252197376,3252203519,HR
-3252203520,3252207615,NO
+3252189184,3252190719,SE
+3252190720,3252190975,NO
+3252190976,3252191231,SE
+3252191232,3252196351,HR
+3252196352,3252197375,SE
+3252197376,3252202495,HR
+3252202496,3252203007,SE
+3252203008,3252205567,HR
+3252205568,3252205823,SE
+3252205824,3252207615,NO
3252207616,3252211711,NL
-3252211712,3252211967,SE
-3252211968,3252214527,NO
-3252214528,3252214783,SE
-3252214784,3252219135,NO
-3252219136,3252219391,SE
-3252219392,3252221183,NO
-3252221184,3252221439,SE
-3252221440,3252222463,HR
-3252222464,3252223231,NO
-3252223232,3252223743,SE
-3252223744,3252223999,NO
+3252211712,3252214271,NO
+3252214272,3252214783,SE
+3252214784,3252220927,NO
+3252220928,3252223999,SE
3252224000,3252232320,NL
3252232321,3252233215,SE
3252233216,3252248575,NO
3252248576,3252256767,NL
-3252256768,3252277759,NO
-3252277760,3252279295,HR
-3252279296,3252279807,NO
-3252279808,3252286463,HR
-3252286464,3252289535,NO
+3252256768,3252277247,NO
+3252277248,3252277759,SE
+3252277760,3252286463,HR
+3252286464,3252287487,SE
+3252287488,3252289535,LT
3252289536,3252289791,BG
3252289792,3252291327,GR
-3252291328,3252291583,SK
3252291584,3252293631,FR
-3252293632,3252297983,DE
-3252297984,3252313599,GR
+3252293632,3252297727,DE
+3252297984,3252298239,GR
+3252298752,3252308223,GR
+3252308224,3252308479,DE
+3252308480,3252310527,GR
+3252311040,3252313599,GR
3252313600,3252313855,SI
3252313856,3252314111,DE
3252314112,3252314623,GR
3252314624,3252314879,HU
3252314880,3252315135,GB
3252315136,3252316415,CH
-3252316416,3252316671,FR
3252316672,3252318463,GR
3252318464,3252318719,TR
-3252318720,3252318975,MQ
+3252318720,3252318975,GP
3252318976,3252319231,PL
3252319232,3252319743,AT
-3252319744,3252319999,UA
+3252319744,3252319999,RU
3252320000,3252320255,GR
3252320256,3252320511,CZ
-3252320512,3252321791,GR
+3252320768,3252321791,GR
3252321792,3252322303,PL
3252322304,3252323327,NO
3252323328,3252324351,PL
3252324352,3252326399,RU
-3252326400,3252327423,UA
+3252326400,3252327423,DE
3252327424,3252329471,PL
3252329472,3252330495,UA
3252330496,3252334591,GB
@@ -115227,15 +61374,14 @@
3252337664,3252338687,RU
3252338688,3252340735,BE
3252340736,3252340991,TR
-3252340992,3252341247,GR
3252341248,3252341503,DE
-3252341504,3252342015,GR
+3252341504,3252341759,GR
3252342016,3252342079,GB
3252342080,3252342239,CY
3252342240,3252342271,CH
3252342272,3252342527,SE
3252342528,3252342543,NO
-3252342544,3252342591,DE
+3252342544,3252342591,CH
3252342592,3252342607,IE
3252342608,3252342655,CY
3252342656,3252342783,IL
@@ -115243,7 +61389,8 @@
3252346368,3252346623,GB
3252346624,3252355071,GR
3252355072,3252355327,GB
-3252355328,3252358911,LT
+3252355328,3252356351,LT
+3252357120,3252358911,LT
3252358912,3252359167,DE
3252359168,3252362239,DK
3252362240,3252362495,PL
@@ -115255,7 +61402,6 @@
3252380160,3252380415,BE
3252380416,3252380671,UA
3252380672,3252380927,SI
-3252380928,3252381183,RU
3252381184,3252381439,IT
3252381440,3252381695,ES
3252381696,3252381951,RU
@@ -115273,7 +61419,6 @@
3252385280,3252385535,GB
3252385536,3252385791,RO
3252385792,3252386047,GB
-3252386048,3252386303,SI
3252386304,3252386559,GB
3252386560,3252386815,BE
3252386816,3252387071,UA
@@ -115281,368 +61426,32 @@
3252387328,3252387583,PL
3252387584,3252387839,RU
3252387840,3252404223,LT
-3252404224,3252406783,NO
-3252406784,3252407295,LT
-3252407296,3252407551,ZA
-3252407552,3252407759,LT
-3252407760,3252407775,CD
-3252407776,3252408319,LT
-3252408320,3252408327,MW
-3252408328,3252408335,LT
-3252408336,3252408339,CD
-3252408340,3252408359,LT
-3252408360,3252408367,GN
-3252408368,3252408375,LT
-3252408376,3252408383,GN
-3252408384,3252408391,BI
-3252408392,3252408511,LT
-3252408512,3252408527,AF
-3252408528,3252408575,LT
-3252408576,3252408607,GQ
-3252408608,3252408639,LT
-3252408640,3252408671,CF
-3252408672,3252408703,SO
-3252408704,3252408735,NG
-3252408736,3252408751,SO
-3252408752,3252408831,LT
-3252408832,3252408839,NG
-3252408840,3252408847,KE
-3252408848,3252408855,LR
-3252408856,3252408863,LT
-3252408864,3252408871,LR
-3252408872,3252408879,CI
-3252408880,3252409023,LT
-3252409024,3252409039,TZ
-3252409040,3252409047,MR
-3252409048,3252409151,LT
-3252409152,3252409167,KE
-3252409168,3252409175,UG
-3252409176,3252409183,LT
-3252409184,3252409191,UG
-3252409192,3252409207,LT
-3252409208,3252409215,TZ
-3252409216,3252409223,BW
-3252409224,3252409231,LT
-3252409232,3252409247,UG
-3252409248,3252409263,CD
-3252409264,3252409271,SS
-3252409272,3252409279,LT
-3252409280,3252409295,SO
-3252409296,3252409303,LT
-3252409304,3252409343,SO
-3252409344,3252409375,TD
-3252409376,3252409407,LT
-3252409408,3252409439,BI
-3252409440,3252409471,LT
-3252409472,3252409503,MR
-3252409504,3252409511,GH
-3252409512,3252409519,BF
-3252409520,3252409535,CD
-3252409536,3252409599,LT
-3252409600,3252409615,MA
-3252409616,3252409631,LT
-3252409632,3252409647,AO
-3252409648,3252409663,LT
+3252404224,3252405759,NO
+3252405760,3252409663,LT
3252409664,3252409679,CD
-3252409680,3252409727,LT
-3252409728,3252409735,LR
-3252409736,3252409751,NG
-3252409752,3252409759,BJ
-3252409760,3252409775,BI
-3252409776,3252409791,LT
-3252409792,3252409823,BI
-3252409824,3252410431,LT
-3252410432,3252410463,BI
-3252410464,3252410495,LT
-3252410496,3252410623,BI
-3252410624,3252410751,ZW
-3252410752,3252410783,SL
-3252410784,3252411327,LT
-3252411328,3252411367,CD
-3252411368,3252411375,LT
-3252411376,3252411391,CD
-3252411392,3252411647,LT
-3252411648,3252411679,BI
-3252411680,3252411807,LT
-3252411808,3252411823,NG
-3252411824,3252411839,SO
-3252411840,3252411879,LT
-3252411880,3252411887,CD
-3252411888,3252411895,LT
-3252411896,3252411903,CD
-3252411904,3252411967,GN
-3252411968,3252412159,LT
-3252412160,3252412415,GN
-3252412416,3252414463,LT
-3252414464,3252414471,GH
-3252414472,3252414479,LT
-3252414480,3252414487,TZ
-3252414488,3252414495,LT
-3252414496,3252414511,ML
-3252414512,3252414527,MR
-3252414528,3252414607,LT
-3252414608,3252414623,ER
-3252414624,3252414639,TZ
-3252414640,3252414647,GH
-3252414648,3252414655,NE
-3252414656,3252414719,ER
-3252414720,3252414983,LT
-3252414984,3252415007,IQ
-3252415008,3252415015,LT
-3252415016,3252415039,IQ
-3252415040,3252415055,LT
-3252415056,3252415063,IQ
-3252415064,3252415079,LT
-3252415080,3252415111,IQ
-3252415112,3252415119,LT
-3252415120,3252415159,IQ
-3252415160,3252415167,LT
-3252415168,3252415191,IQ
-3252415192,3252415199,LT
-3252415200,3252415231,IQ
-3252415232,3252415487,LT
-3252415488,3252415743,US
-3252415744,3252415967,LT
-3252415968,3252415999,CM
-3252416000,3252416895,LT
-3252416896,3252416927,GN
-3252416928,3252417279,LT
-3252417280,3252417287,IQ
-3252417288,3252417295,LT
-3252417296,3252417311,AF
-3252417312,3252417327,LT
-3252417328,3252417375,AF
-3252417376,3252417391,LT
-3252417392,3252417439,AF
-3252417440,3252417455,LT
-3252417456,3252417527,AF
-3252417528,3252417935,LT
-3252417936,3252417951,ZM
-3252417952,3252418559,LT
-3252418560,3252418623,JO
-3252418624,3252418687,LT
-3252418688,3252418719,JO
-3252418720,3252418815,LT
-3252418816,3252418847,KE
-3252418848,3252419103,LT
-3252419104,3252419119,SL
-3252419120,3252419127,GH
-3252419128,3252419135,LT
-3252419136,3252419167,SL
-3252419168,3252419199,CD
-3252419200,3252419215,LT
-3252419216,3252419247,GN
-3252419248,3252419311,LT
-3252419312,3252419327,ZM
-3252419328,3252419359,LT
-3252419360,3252419423,GH
-3252419424,3252419839,LT
-3252419840,3252419879,IQ
-3252419880,3252419919,LT
-3252419920,3252419927,IQ
-3252419928,3252420031,LT
-3252420032,3252420047,IQ
-3252420048,3252420095,LT
-3252420096,3252420111,IQ
-3252420112,3252420119,GB
-3252420120,3252420143,IQ
-3252420144,3252420367,LT
-3252420368,3252420383,IQ
-3252420384,3252420415,LT
-3252420416,3252420431,GB
-3252420432,3252420455,LT
-3252420456,3252420463,IQ
-3252420464,3252420471,AF
-3252420472,3252420583,LT
-3252420584,3252420591,IQ
-3252420592,3252421631,LT
+3252409680,3252421631,LT
3252421632,3252423679,NO
-3252423680,3252424703,LT
-3252424704,3252424719,GN
-3252424720,3252424735,LT
-3252424736,3252424751,GA
-3252424752,3252424799,LT
-3252424800,3252424823,SS
-3252424824,3252424831,AF
-3252424832,3252424895,LT
-3252424896,3252424928,KE
-3252424929,3252425023,LT
-3252425024,3252425215,SO
-3252425216,3252425343,TD
-3252425344,3252425471,LT
-3252425472,3252425535,AO
-3252425536,3252425551,LT
-3252425552,3252425567,AO
-3252425568,3252425727,LT
-3252425728,3252425983,A2
-3252425984,3252427775,LT
-3252427776,3252428287,MW
-3252428288,3252428303,AO
-3252428304,3252428319,LT
-3252428320,3252428335,AO
-3252428336,3252428351,LT
-3252428352,3252428383,AO
-3252428384,3252428391,LT
-3252428392,3252428415,AO
-3252428416,3252428447,KE
-3252428448,3252428543,LT
-3252428544,3252428799,NG
-3252428800,3252430463,LT
-3252430464,3252430479,BJ
-3252430480,3252430543,LT
-3252430544,3252430559,BJ
-3252430560,3252430847,LT
-3252430848,3252431359,MW
-3252431360,3252431871,LT
-3252431872,3252432127,SO
-3252432128,3252432383,LR
-3252432384,3252432575,LT
-3252432576,3252432591,MW
-3252432592,3252434687,LT
-3252434688,3252434703,GH
-3252434704,3252434711,TZ
-3252434712,3252434719,LT
-3252434720,3252434743,GH
-3252434744,3252434751,ML
-3252434752,3252434759,GN
-3252434760,3252434767,SL
-3252434768,3252434775,BF
-3252434776,3252434783,SL
-3252434784,3252434791,ZM
-3252434792,3252434807,ML
-3252434808,3252435199,LT
-3252435200,3252435231,TZ
-3252435232,3252435247,LT
-3252435248,3252435263,BW
-3252435264,3252435279,ML
-3252435280,3252435287,GN
-3252435288,3252435295,GH
-3252435296,3252435303,LR
-3252435304,3252435311,LT
-3252435312,3252435319,CF
-3252435320,3252435327,MZ
-3252435328,3252435343,CD
-3252435344,3252435375,BF
-3252435376,3252435415,GN
-3252435416,3252435455,CD
-3252435456,3252435711,TZ
-3252435712,3252435855,GH
-3252435856,3252435871,MR
-3252435872,3252435887,GH
-3252435888,3252435903,CD
-3252435904,3252435919,BW
-3252435920,3252435935,BF
-3252435936,3252435959,CD
-3252435960,3252435967,ZM
-3252435968,3252436223,TZ
-3252436224,3252436239,GN
-3252436240,3252436271,ML
-3252436272,3252436287,BF
-3252436288,3252436303,CD
-3252436304,3252436319,ZM
-3252436320,3252436351,LT
-3252436352,3252436383,GN
-3252436384,3252436399,LR
-3252436400,3252436415,SL
-3252436416,3252436447,LT
-3252436448,3252436479,ER
-3252436480,3252436991,LT
-3252436992,3252437503,NG
-3252437504,3252439263,LT
-3252439264,3252439271,SN
-3252439272,3252439295,LT
-3252439296,3252439391,SO
-3252439392,3252439807,LT
-3252439808,3252439871,SO
-3252439872,3252444287,LT
-3252444288,3252444351,TZ
-3252444352,3252445183,LT
-3252445184,3252445263,GN
-3252445264,3252446711,LT
-3252446712,3252446719,NO
-3252446720,3252447231,LT
-3252447232,3252448255,NO
-3252448256,3252448511,SE
+3252423680,3252448511,LT
3252448512,3252448767,NO
-3252448768,3252449279,SE
-3252449280,3252449535,CN
-3252449536,3252449607,LT
-3252449608,3252449615,CH
-3252449616,3252449623,DK
-3252449624,3252449791,LT
+3252448768,3252449791,LT
3252449792,3252450047,DK
-3252450048,3252450303,LT
-3252450304,3252450815,NO
-3252450816,3252450823,ET
-3252450824,3252450847,LT
-3252450848,3252450863,IQ
-3252450864,3252450879,LT
-3252450880,3252450911,NO
-3252450912,3252450943,LT
-3252450944,3252450959,CH
-3252450960,3252451071,LT
-3252451072,3252451327,CH
-3252451328,3252451359,SL
-3252451360,3252451591,LT
-3252451592,3252451607,GM
-3252451608,3252451631,GW
-3252451632,3252451655,GN
-3252451656,3252451679,SL
-3252451680,3252451695,LR
-3252451696,3252452095,LT
-3252452096,3252452127,NO
-3252452128,3252452175,LT
-3252452176,3252452191,NO
-3252452192,3252452223,LT
-3252452224,3252452227,NL
-3252452228,3252452271,LT
-3252452272,3252452351,NO
-3252452352,3252452487,LT
-3252452488,3252452495,MW
-3252452496,3252452503,ZM
-3252452504,3252452511,SD
-3252452512,3252452543,LT
+3252450048,3252452543,LT
3252452544,3252452551,SS
-3252452552,3252452607,LT
-3252452608,3252452735,TD
-3252452736,3252453263,LT
-3252453264,3252453271,NG
-3252453272,3252454399,LT
-3252454400,3252454431,CD
-3252454432,3252454655,LT
-3252454656,3252454911,IQ
-3252454912,3252455679,LT
-3252455680,3252455935,BI
-3252455936,3252456447,LT
-3252456448,3252456959,BJ
-3252456960,3252460287,LT
-3252460288,3252460319,US
-3252460320,3252460543,LT
-3252460544,3252460671,US
-3252460672,3252460767,LT
-3252460768,3252460799,US
-3252460800,3252460831,AF
-3252460832,3252461055,US
-3252461056,3252461567,NO
-3252461568,3252469759,LT
+3252452552,3252455679,LT
+3252455680,3252455807,BI
+3252455808,3252469759,LT
3252469760,3252473855,NL
-3252473856,3252475903,LT
-3252475904,3252476159,US
-3252476160,3252486143,LT
+3252473856,3252486143,LT
3252486144,3252490239,BE
3252490240,3252496127,SE
3252496128,3252496383,AU
3252496384,3252500223,SE
3252500224,3252500479,GB
-3252500480,3252501247,SE
-3252501248,3252501503,EU
-3252501504,3252505343,SE
+3252500480,3252505343,SE
3252505344,3252505599,US
3252505600,3252507135,SE
3252507136,3252507647,RO
-3252507648,3252509183,GB
-3252509184,3252509439,AP
-3252509440,3252509951,GB
+3252507648,3252509951,GB
3252509952,3252510719,CH
3252510720,3252514815,FR
3252514816,3252515071,SI
@@ -115653,18 +61462,13 @@
3252516096,3252516351,FR
3252516352,3252516607,GB
3252516608,3252516863,SE
-3252516864,3252517119,FR
-3252517120,3252517375,EU
3252517376,3252517631,PL
-3252517632,3252517887,BE
3252517888,3252518143,DK
3252518144,3252518399,NL
3252518400,3252518655,PL
3252518656,3252518911,DE
3252518912,3252527103,NL
3252527104,3252535295,BE
-3252535296,3252539391,GB
-3252539392,3252540415,IE
3252540416,3252541951,NL
3252541952,3252542207,CI
3252542208,3252551679,BE
@@ -115707,9 +61511,8 @@
3252616704,3252616959,ES
3252616960,3252617215,CH
3252617216,3252617471,PL
-3252617472,3252634623,CH
+3252617472,3252633599,CH
3252634624,3252634879,RU
-3252634880,3252636671,CH
3252636672,3252636927,TR
3252636928,3252637183,DE
3252637184,3252637695,GB
@@ -115719,14 +61522,11 @@
3252642816,3252643071,NL
3252643072,3252643327,RO
3252643328,3252643583,CH
-3252643584,3252643839,AT
3252643840,3252682751,CH
3252682752,3252813823,HU
3252813824,3252830207,RO
-3252830208,3252832255,MD
-3252832256,3252832767,RO
-3252832768,3252834303,MD
-3252834304,3252862975,RO
+3252830208,3252830719,MD
+3252830720,3252862975,RO
3252862976,3252879359,HU
3252879360,3252895743,EG
3252895744,3252903935,IT
@@ -115736,30 +61536,25 @@
3252904960,3252905215,PL
3252905216,3252905471,CH
3252905472,3252905727,LT
-3252905728,3252905983,BE
3252905984,3252906239,IT
3252906240,3252906495,PL
3252906496,3252906751,GB
3252906752,3252907007,FR
3252907008,3252907263,AT
-3252907264,3252907775,RO
+3252907520,3252907775,RO
3252907776,3252908031,GB
3252908032,3252908287,PL
3252908288,3252908543,AT
-3252908544,3252908799,MT
3252908800,3252909055,UA
3252909056,3252909311,PL
3252909312,3252909567,DE
3252909568,3252909823,GB
3252909824,3252910335,UA
-3252910336,3252910591,NL
3252910848,3252911103,PL
3252911104,3252911359,DE
-3252911360,3252911615,RU
3252911616,3252911871,SE
3252911872,3252912127,SA
3252912128,3252912383,EG
-3252912384,3252912639,HU
3252912640,3252912895,FR
3252912896,3252913151,PL
3252913152,3252913407,ES
@@ -115782,8 +61577,7 @@
3252937728,3252938239,FR
3252938240,3252938751,UA
3252938752,3252939263,RU
-3252939264,3252939775,EU
-3252939776,3252940287,RO
+3252939264,3252939775,DE
3252940288,3252940799,PT
3252940800,3252941311,RU
3252941312,3252941823,RO
@@ -115796,15 +61590,12 @@
3252945152,3252945407,GB
3252945408,3252945663,UA
3252945664,3252980735,AT
-3252980736,3252980991,PL
3252980992,3252981247,GB
3252981248,3252981503,RU
3252981504,3252981759,SE
3252981760,3252982015,DE
-3252982016,3252982271,RO
3252982272,3252982527,DE
3252982528,3252982783,FR
-3252982784,3252983039,UA
3252983040,3252983551,DE
3252983552,3252983807,SI
3252983808,3252984063,BG
@@ -115821,15 +61612,7 @@
3253005056,3253010431,AT
3253010432,3253075967,FI
3253075968,3253207039,RO
-3253207040,3253223679,RU
-3253223680,3253223935,UA
-3253223936,3253230591,RU
-3253230592,3253230847,BY
-3253230848,3253247999,RU
-3253248000,3253248255,DE
-3253248256,3253265407,RU
-3253265408,3253265919,AM
-3253265920,3253270527,RU
+3253207040,3253270527,RU
3253270528,3253271551,BY
3253271552,3253338111,RU
3253338112,3253338367,PL
@@ -115837,44 +61620,36 @@
3253380864,3253381119,IT
3253381120,3253383935,SE
3253383936,3253384191,NO
-3253384192,3253384447,SE
-3253384448,3253384703,IT
-3253384704,3253388287,SE
+3253384192,3253388287,SE
3253388288,3253388799,FR
-3253388800,3253389055,CY
+3253388800,3253389055,SE
3253389056,3253389823,FR
-3253389824,3253398271,SE
+3253389824,3253395455,SE
+3253395456,3253395967,IT
+3253395968,3253398271,SE
3253398272,3253398783,FR
3253398784,3253399039,SE
3253399040,3253399295,FR
3253399296,3253399551,IT
3253399552,3253400575,SE
3253400576,3253401087,IT
-3253401088,3253401343,SE
-3253401344,3253401599,EU
-3253401600,3253402111,SE
+3253401088,3253402111,SE
3253402112,3253402367,IT
3253402368,3253402623,JP
3253402624,3253403647,SE
3253403648,3253403903,PL
-3253403904,3253405563,SE
-3253405564,3253405564,EU
-3253405565,3253409279,SE
-3253409280,3253409791,AT
+3253403904,3253409791,SE
3253409792,3253410047,GB
-3253410048,3253411327,SE
-3253411328,3253411583,NO
-3253411584,3253412351,SE
+3253410048,3253412351,SE
3253412352,3253412607,US
3253412608,3253416447,SE
-3253416448,3253416959,GB
-3253416960,3253428223,SE
+3253416448,3253416703,GB
+3253416704,3253428223,SE
3253428224,3253428479,DE
3253428480,3253429247,SE
3253429248,3253429759,JP
3253429760,3253430015,ES
-3253430016,3253432831,SE
-3253432832,3253433087,IT
+3253430016,3253433087,SE
3253433088,3253433343,DE
3253433344,3253434111,SE
3253434112,3253434367,GB
@@ -115886,32 +61661,24 @@
3253436160,3253436415,NO
3253436416,3253440511,SE
3253440512,3253440767,FR
-3253440768,3253443839,SE
+3253440768,3253441023,SE
+3253441024,3253441535,AT
+3253441536,3253443839,SE
3253443840,3253444351,NO
3253444352,3253453311,SE
3253453312,3253453567,NO
3253453568,3253454079,SE
3253454080,3253454335,GB
-3253454336,3253454591,EU
-3253454592,3253455615,SE
-3253455616,3253455871,US
-3253455872,3253456383,SE
-3253456384,3253456639,US
-3253456640,3253460735,SE
+3253454336,3253460735,SE
3253460736,3253460991,IT
-3253460992,3253461247,US
-3253461248,3253461759,SE
+3253460992,3253461759,SE
3253461760,3253462015,PL
3253462016,3253462527,SE
3253462528,3253463039,US
3253463040,3253464063,GB
-3253464064,3253464575,SE
-3253464576,3253465087,NL
-3253465088,3253469183,SE
-3253469184,3253471231,AO
-3253471232,3253534719,PT
+3253464064,3253469183,SE
+3253469184,3253534719,PT
3253534720,3253600255,GB
-3253600256,3253601279,RO
3253601280,3253602303,FI
3253602304,3253603327,DE
3253603328,3253605375,PL
@@ -115922,7 +61689,6 @@
3253607424,3253608447,NG
3253608448,3253610495,UA
3253610496,3253611519,PL
-3253611520,3253612543,UA
3253612544,3253613567,RU
3253613568,3253614591,ES
3253614592,3253615615,RO
@@ -115956,7 +61722,6 @@
3253646336,3253647359,PL
3253647360,3253648383,DK
3253648384,3253649407,IL
-3253649408,3253650431,UA
3253650432,3253651455,DE
3253651456,3253652479,PL
3253652480,3253653503,LI
@@ -115965,7 +61730,6 @@
3253657600,3253658623,UA
3253658624,3253659647,DE
3253659648,3253660671,GB
-3253660672,3253661695,NO
3253661696,3253662719,NL
3253662720,3253663743,RO
3253663744,3253664767,NL
@@ -116008,29 +61772,24 @@
3253701120,3253702143,RO
3253702144,3253702655,UA
3253702656,3253703167,PL
-3253703168,3253703679,RO
3253703680,3253704191,HU
-3253704192,3253704703,RU
3253704704,3253705215,UA
3253705728,3253706239,DE
3253706240,3253706751,RO
-3253707264,3253708287,DE
-3253708288,3253708799,RO
+3253706752,3253708799,DE
3253708800,3253709311,DK
3253709312,3253709823,UA
3253709824,3253710335,RO
3253710336,3253710847,GB
3253710848,3253711359,DK
-3253711360,3253712383,UA
+3253711872,3253712383,UA
3253712384,3253712895,MD
3253712896,3253713151,PL
3253713152,3253713407,DE
3253713408,3253713919,NL
3253713920,3253714431,AT
-3253714432,3253714943,RO
3253714944,3253715455,FR
3253715456,3253715967,RO
-3253715968,3253716479,DE
3253716480,3253716991,FR
3253716992,3253717503,CH
3253717504,3253718015,NL
@@ -116049,17 +61808,54 @@
3253725184,3253725439,SE
3253725440,3253725695,RU
3253725696,3253726207,UA
-3253726208,3253726719,RO
3253726720,3253727231,UA
3253727232,3253727743,FR
3253727744,3253728255,RU
-3253728256,3253728767,PL
3253728768,3253729279,RO
3253729280,3253729791,AT
3253729792,3253730303,UA
3253730304,3253730815,RO
3253730816,3253731327,UA
-3253731328,3253796863,GB
+3253731328,3253731583,DE
+3253731584,3253737823,GB
+3253737824,3253737831,PL
+3253737832,3253737839,AT
+3253737840,3253737847,GB
+3253737848,3253737855,HU
+3253737856,3253738559,GB
+3253738560,3253738567,CZ
+3253738568,3253738575,BE
+3253738576,3253741679,GB
+3253741680,3253741695,RU
+3253741696,3253745151,GB
+3253745152,3253745279,NO
+3253745280,3253745983,GB
+3253745984,3253745999,SE
+3253746000,3253746007,DK
+3253746008,3253746015,IE
+3253746016,3253746023,AT
+3253746024,3253746031,CH
+3253746032,3253746039,FI
+3253746040,3253746047,GB
+3253746048,3253746111,IT
+3253746112,3253746175,DE
+3253746176,3253760511,GB
+3253760512,3253760767,FR
+3253760768,3253761407,GB
+3253761408,3253761471,ES
+3253761472,3253762559,GB
+3253762560,3253762815,IT
+3253762816,3253762943,CH
+3253762944,3253763071,GB
+3253763072,3253763327,SE
+3253763328,3253765119,GB
+3253765120,3253765183,ES
+3253765184,3253765247,FR
+3253765248,3253765279,GB
+3253765280,3253765295,NL
+3253765296,3253765311,BE
+3253765312,3253765375,TR
+3253765376,3253796863,GB
3253796864,3253862399,SE
3253862400,3253862655,GB
3253862656,3253882879,FR
@@ -116077,7 +61873,6 @@
3253889536,3253889791,DE
3253889792,3253890047,DK
3253890048,3253890303,NL
-3253890304,3253890559,SE
3253890560,3253890815,GB
3253890816,3253891071,IE
3253891072,3253891327,DE
@@ -116110,7 +61905,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
@@ -116136,20 +61931,18 @@
3253917184,3253917439,CY
3253917440,3253917695,PL
3253917696,3253918207,RU
-3253918208,3253918719,DE
+3253918208,3253918719,CH
3253918720,3253919743,IL
3253919744,3253923839,GB
3253923840,3253927935,GR
3253927936,3253961727,GB
3253961728,3253962239,MD
-3253962240,3253962751,SE
3253962752,3253963263,BE
3253963264,3253963775,RU
3253963776,3253964287,SI
3253964288,3253964799,PL
3253964800,3253965311,SE
3253965312,3253966335,PL
-3253966336,3253966847,DE
3253966848,3253967359,UA
3253967360,3253967871,PL
3253967872,3253968895,UA
@@ -116167,153 +61960,44 @@
3253975040,3253977087,DE
3253977088,3253985279,TR
3253985280,3253993471,GB
-3253993472,3254067711,BE
-3254067712,3254067967,CZ
-3254067968,3254124543,BE
-3254124544,3254156799,CH
-3254156800,3254157055,LI
-3254157056,3254177279,CH
-3254177280,3254177535,LI
-3254177536,3254255615,CH
-3254255616,3254255871,FR
-3254255872,3254256127,RE
-3254256128,3254256639,GP
-3254256640,3254261247,FR
-3254261248,3254261503,YT
-3254261504,3254261759,FR
-3254261760,3254262015,YT
-3254262016,3254275327,FR
-3254275328,3254275583,MQ
-3254275584,3254276607,FR
-3254276608,3254278143,YT
-3254278144,3254291711,FR
-3254291712,3254291967,RE
-3254291968,3254485503,FR
-3254485504,3254485799,CI
-3254485800,3254485807,FR
-3254485808,3254485819,CI
-3254485820,3254485820,FR
-3254485821,3254485821,CI
-3254485822,3254485822,FR
-3254485823,3254485855,CI
-3254485856,3254485859,FR
-3254485860,3254485887,CI
-3254485888,3254486527,FR
-3254486528,3254486543,CH
-3254486544,3254486559,US
-3254486560,3254486591,GB
-3254486592,3254486655,FR
-3254486656,3254486671,CH
-3254486672,3254486687,FR
-3254486688,3254486719,CH
-3254486720,3254486735,FR
-3254486736,3254486767,US
-3254486768,3254486783,HK
-3254486784,3254487039,A2
-3254487040,3254487199,KM
-3254487200,3254487263,FR
-3254487264,3254487295,KM
-3254487296,3254487419,CF
-3254487420,3254487551,FR
-3254487552,3254487803,CI
-3254487804,3254487807,FR
-3254487808,3254487855,LB
-3254487856,3254487863,FR
-3254487864,3254488063,LB
-3254488064,3254488431,FR
+3253993472,3254124543,BE
+3254124544,3254255615,CH
+3254255616,3254263807,FR
+3254263808,3254264063,GF
+3254264064,3254488431,FR
3254488432,3254488447,MG
-3254488448,3254488831,FR
-3254488832,3254489087,DJ
-3254489088,3254489343,DZ
-3254489344,3254489365,FR
-3254489366,3254489367,MR
-3254489368,3254489369,FR
-3254489370,3254489370,MR
-3254489371,3254489373,FR
-3254489374,3254489375,MR
-3254489376,3254489407,FR
+3254488448,3254489407,FR
3254489408,3254489439,MR
-3254489440,3254489443,FR
-3254489444,3254489455,MR
-3254489456,3254489463,FR
-3254489464,3254489519,MR
-3254489520,3254489535,FR
-3254489536,3254489567,MR
-3254489568,3254489599,FR
-3254489600,3254489855,MR
-3254489856,3254490111,TD
-3254490112,3254490367,FR
-3254490368,3254490623,CF
-3254490624,3254491135,FR
-3254491136,3254491391,DZ
-3254491392,3254491647,GQ
-3254491648,3254491903,FR
+3254489440,3254489447,FR
+3254489448,3254489455,MR
+3254489456,3254489487,FR
+3254489488,3254489503,MR
+3254489504,3254491903,FR
3254491904,3254492031,CM
-3254492032,3254492159,FR
-3254492160,3254492671,LB
-3254492672,3254492927,FR
-3254492928,3254493183,CI
-3254493184,3254493323,GP
-3254493324,3254493327,FR
-3254493328,3254493335,GP
-3254493336,3254493343,FR
-3254493344,3254493439,GP
-3254493440,3254493695,CI
+3254492032,3254493183,FR
+3254493184,3254493253,GP
+3254493254,3254493311,FR
+3254493312,3254493323,GP
+3254493324,3254493343,FR
+3254493344,3254493354,GP
+3254493355,3254493375,FR
+3254493376,3254493410,GP
+3254493411,3254493695,FR
3254493696,3254493951,GP
3254493952,3254494207,MQ
3254494208,3254494527,GP
-3254494528,3254494719,FR
-3254494720,3254494735,LB
-3254494736,3254494743,FR
-3254494744,3254494803,LB
-3254494804,3254494807,FR
-3254494808,3254494975,LB
-3254494976,3254495087,DJ
-3254495088,3254495231,FR
-3254495232,3254495487,CI
+3254494528,3254494975,FR
+3254494976,3254494983,DJ
+3254494984,3254495055,FR
+3254495056,3254495063,DJ
+3254495064,3254495487,FR
3254495488,3254495743,DZ
-3254495744,3254496255,LB
-3254496256,3254496511,FR
-3254496512,3254496527,CI
-3254496528,3254496767,FR
-3254496768,3254497247,DZ
-3254497248,3254508031,FR
-3254508032,3254508543,GQ
-3254508544,3254508799,FR
+3254495744,3254508799,FR
3254508800,3254508831,MQ
-3254508832,3254509055,FR
-3254509056,3254509567,GQ
-3254509568,3254509783,DJ
-3254509784,3254521855,FR
-3254521856,3254522367,GB
-3254522368,3254523739,FR
-3254523740,3254523740,UG
-3254523741,3254523741,CH
-3254523742,3254523742,RO
-3254523743,3254550527,FR
-3254550528,3254550783,US
-3254550784,3254551039,IR
-3254551040,3254551295,US
-3254551296,3254551551,IR
-3254551552,3254551807,US
-3254551808,3254552063,FR
-3254552064,3254552319,US
-3254552320,3254552831,IR
-3254552832,3254553087,HK
-3254553088,3254553343,FR
-3254553344,3254553599,HK
-3254553600,3254554879,FR
-3254554880,3254555135,HK
-3254555136,3254555391,FR
-3254555392,3254555647,HK
-3254555648,3254557439,FR
-3254557440,3254557695,AT
-3254557696,3254576383,FR
-3254576384,3254576543,DO
-3254576544,3254607871,FR
-3254607872,3254608383,RE
-3254608384,3254608639,FR
-3254608640,3254610175,RE
+3254508832,3254521855,FR
+3254521856,3254522111,GB
+3254522112,3254607871,FR
+3254607872,3254610175,RE
3254610176,3254610431,FR
3254610432,3254610687,RE
3254610688,3254611455,FR
@@ -116321,42 +62005,40 @@
3254611457,3254611711,FR
3254611712,3254611712,YT
3254611713,3254611967,FR
-3254611968,3254613503,RE
-3254613504,3254615551,FR
+3254611968,3254612991,RE
+3254612992,3254613247,FR
+3254613248,3254614015,RE
+3254614016,3254614527,FR
+3254614528,3254615039,RE
+3254615040,3254615551,FR
3254615552,3254615552,YT
3254615553,3254615807,FR
3254615808,3254615808,YT
-3254615809,3254623743,FR
-3254623744,3254624255,US
-3254624256,3254648831,FR
-3254648832,3254648895,DK
-3254648896,3254649087,GB
+3254615809,3254648831,FR
+3254648832,3254649087,GB
3254649088,3254649855,AL
3254649856,3254650879,SE
3254650880,3254653439,CH
3254653440,3254654847,DE
3254654848,3254654975,DK
-3254654976,3254655743,IT
-3254655744,3254656255,GB
+3254654976,3254655999,IT
3254656256,3254656511,BG
3254656512,3254656767,DE
3254656768,3254657023,GB
3254657024,3254665215,RO
-3254665216,3254681599,EU
3254681600,3254697983,DE
3254697984,3254698495,SE
3254698496,3254699007,GB
3254699008,3254699519,UA
-3254699520,3254700031,US
3254700032,3254700543,GR
3254700544,3254701055,DE
-3254701056,3254701567,RU
3254701568,3254702079,IL
3254702080,3254702591,RU
3254702592,3254703103,GB
3254703104,3254703615,DE
3254703616,3254704127,NL
-3254704128,3254705663,UA
+3254704128,3254704639,UA
+3254705152,3254705663,UA
3254705664,3254706175,GR
3254706176,3254707199,RU
3254707200,3254707711,TR
@@ -116397,7 +62079,6 @@
3254788352,3254789119,ES
3254789120,3254789375,FR
3254789376,3254789631,BE
-3254789632,3254790655,TK
3254790656,3254790911,LU
3254790912,3254791423,BE
3254791424,3254791679,SK
@@ -116422,7 +62103,6 @@
3254804480,3254806527,PL
3254807552,3254808575,KZ
3254808576,3254809599,RU
-3254809600,3254810623,UA
3254810624,3254811647,RU
3254811648,3254812671,RO
3254812672,3254812927,PL
@@ -116430,7 +62110,6 @@
3254813184,3254813439,TR
3254813440,3254813695,UA
3254813696,3254813951,DK
-3254813952,3254814207,IT
3254814208,3254814463,SE
3254814464,3254814719,DE
3254814720,3254814975,RU
@@ -116438,7 +62117,6 @@
3254815232,3254815487,UA
3254815488,3254815743,GB
3254815744,3254815999,IT
-3254816000,3254816255,RU
3254816256,3254816511,TR
3254816512,3254816767,DE
3254816768,3254817279,RU
@@ -116453,7 +62131,7 @@
3254819584,3254819839,DK
3254819840,3254820095,GB
3254820096,3254820351,UA
-3254820352,3254820863,GB
+3254820352,3254820607,GB
3254820864,3254821119,LT
3254821120,3254821375,DK
3254821376,3254821631,RU
@@ -116473,14 +62151,11 @@
3254825216,3254825471,RO
3254825472,3254825727,TR
3254825728,3254825983,FR
-3254825984,3254826239,DE
3254826240,3254826495,PL
3254826496,3254827263,DE
3254827264,3254827519,GR
-3254827520,3254827775,PL
3254827776,3254828031,UA
-3254828032,3254828287,DE
-3254828288,3254828799,RO
+3254828544,3254828799,RO
3254828800,3254829055,SI
3254829056,3254829311,NO
3254829312,3254829567,GB
@@ -116502,8 +62177,7 @@
3254833408,3254833663,RU
3254833664,3254833919,GB
3254833920,3254834175,PL
-3254834176,3254834431,CH
-3254834432,3254834687,FR
+3254834176,3254834687,CH
3254834688,3254834943,GB
3254834944,3254835199,NL
3254835200,3254835455,DE
@@ -116512,27 +62186,22 @@
3254835968,3254836223,RU
3254836224,3254836479,PL
3254836736,3254836991,AT
-3254836992,3254837247,GB
3254837248,3254837503,HR
3254837504,3254837759,RU
3254837760,3254838015,IE
3254838016,3254838271,GE
-3254838272,3254838527,DE
3254838528,3254838783,CH
3254838784,3254839039,AT
-3254839040,3254839295,RU
3254839296,3254839551,DE
3254839552,3254839807,PL
3254839808,3254840063,BE
3254840064,3254840319,BG
-3254840320,3254840575,EU
+3254840320,3254840575,DK
3254840576,3254840831,UA
3254840832,3254841343,GB
3254841344,3254841599,PL
3254841600,3254841855,IE
3254841856,3254842111,LV
-3254842112,3254842367,GB
-3254842368,3254842623,PL
3254842624,3254842879,RU
3254842880,3254843135,SE
3254843136,3254843391,DE
@@ -116568,14 +62237,13 @@
3254888960,3254889471,RU
3254889472,3254890495,SK
3254890496,3254890751,DE
-3254890752,3254891007,UA
-3254891008,3254891519,RO
+3254891008,3254891263,RO
3254891520,3254891775,GB
3254891776,3254892031,DE
3254892032,3254892287,GB
3254892288,3254892543,BE
3254892544,3254892799,RU
-3254892800,3254893567,SK
+3254892800,3254893055,SK
3254893568,3254894079,CZ
3254894080,3254894335,CH
3254894336,3254894591,SK
@@ -116602,7 +62270,6 @@
3254899968,3254900479,RU
3254900480,3254900991,SK
3254900992,3254901247,PL
-3254901248,3254901503,SK
3254901504,3254901759,DK
3254901760,3254902271,UA
3254902272,3254904831,SK
@@ -116614,81 +62281,61 @@
3254908928,3254909951,RU
3254909952,3254910719,PL
3254910720,3254910975,HR
-3254910976,3254937999,FR
-3254938000,3254938007,GB
-3254938008,3254959623,FR
-3254959624,3254959631,A2
-3254959632,3254994734,FR
-3254994735,3254994735,BE
-3254994736,3255006719,FR
-3255006720,3255006975,A2
-3255006976,3255120639,FR
+3254910976,3255044095,FR
+3255044608,3255056383,FR
+3255058432,3255117823,FR
+3255118336,3255120639,FR
3255120640,3255120895,DE
3255120896,3255123711,FR
3255123712,3255123967,DE
-3255123968,3255129855,FR
+3255123968,3255127551,FR
+3255127808,3255128575,FR
3255129856,3255130111,HR
-3255130112,3255172351,FR
+3255130112,3255146495,FR
+3255148544,3255153151,FR
+3255153664,3255166975,FR
+3255167488,3255172351,FR
3255172352,3255172607,DE
3255172608,3255173119,FR
3255173120,3255173631,SH
-3255173632,3255173647,EU
3255173648,3255173711,GB
-3255173712,3255173759,EU
3255173760,3255173823,GB
-3255173824,3255173839,EU
-3255173840,3255175167,GB
-3255175168,3255175199,EU
+3255173840,3255174151,GB
+3255174160,3255174167,GB
+3255174200,3255174207,GB
+3255174216,3255174247,GB
+3255174272,3255174279,GB
+3255174312,3255174319,GB
+3255174328,3255174335,GB
+3255174376,3255174383,GB
+3255174400,3255175167,GB
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,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
@@ -116707,7 +62354,6 @@
3255231744,3255231999,PT
3255232000,3255232255,RO
3255232256,3255233023,UA
-3255233024,3255233279,DE
3255233280,3255233535,GB
3255233536,3255233791,SE
3255233792,3255234047,SI
@@ -116719,140 +62365,14 @@
3255235328,3255235583,SE
3255235584,3255235839,GB
3255235840,3255236351,PL
-3255236352,3255236607,IT
3255236608,3255236863,GB
3255236864,3255237119,DE
3255237120,3255237375,AT
-3255237376,3255237887,SE
3255237888,3255238143,ES
-3255238144,3255238399,GB
3255238400,3255238655,QA
-3255238656,3255243679,BE
-3255243680,3255243711,LU
-3255243712,3255245567,BE
-3255245568,3255245583,LU
-3255245584,3255245599,BE
-3255245600,3255245631,LU
-3255245632,3255245687,BE
-3255245688,3255245695,LU
-3255245696,3255246591,BE
-3255246592,3255246623,LU
-3255246624,3255247615,BE
-3255247616,3255247631,LU
-3255247632,3255247647,BE
-3255247648,3255247663,LU
-3255247664,3255248127,BE
-3255248128,3255248383,LU
-3255248384,3255250079,BE
-3255250080,3255250111,LU
-3255250112,3255250815,BE
-3255250816,3255250879,LU
-3255250880,3255252487,BE
-3255252488,3255252495,FR
-3255252496,3255252527,BE
-3255252528,3255252543,LU
-3255252544,3255252799,BE
-3255252800,3255252863,LU
-3255252864,3255254847,BE
-3255254848,3255254879,LU
-3255254880,3255255751,BE
-3255255752,3255255759,DK
-3255255760,3255256319,BE
-3255256320,3255256575,LU
-3255256576,3255259919,BE
-3255259920,3255259927,LU
-3255259928,3255260095,BE
-3255260096,3255260127,LU
-3255260128,3255260319,BE
-3255260320,3255260335,LU
-3255260336,3255260343,BE
-3255260344,3255260347,LU
-3255260348,3255261471,BE
-3255261472,3255261535,LU
-3255261536,3255262799,BE
-3255262800,3255262815,LU
-3255262816,3255263295,BE
-3255263296,3255263327,US
-3255263328,3255264543,BE
-3255264544,3255264575,LU
-3255264576,3255264703,BE
-3255264704,3255264735,LU
-3255264736,3255265007,BE
-3255265008,3255265023,LU
-3255265024,3255270431,BE
-3255270432,3255270463,FR
-3255270464,3255271807,BE
-3255271808,3255271839,LU
-3255271840,3255274015,BE
-3255274016,3255274047,US
-3255274048,3255274335,BE
-3255274336,3255274367,LU
-3255274368,3255274847,BE
-3255274848,3255274879,LU
-3255274880,3255274911,BE
-3255274912,3255274943,LU
-3255274944,3255276223,BE
-3255276224,3255276255,FR
-3255276256,3255276575,BE
-3255276576,3255276607,LU
-3255276608,3255276671,BE
-3255276672,3255276703,LU
-3255276704,3255276783,BE
-3255276784,3255276799,LU
-3255276800,3255277247,BE
-3255277248,3255277255,LU
-3255277256,3255278607,BE
-3255278608,3255278623,LU
-3255278624,3255279007,BE
-3255279008,3255279039,LU
-3255279040,3255279087,BE
-3255279088,3255279103,LU
-3255279104,3255279639,BE
-3255279640,3255279647,LU
-3255279648,3255280018,BE
-3255280019,3255280019,EU
-3255280020,3255280047,BE
-3255280048,3255280055,LU
-3255280056,3255281407,BE
-3255281408,3255281439,LU
-3255281440,3255281759,BE
-3255281760,3255281791,LU
-3255281792,3255283415,BE
-3255283416,3255283423,LU
-3255283424,3255283927,BE
-3255283928,3255283931,LU
-3255283932,3255284239,BE
-3255284240,3255284255,LU
-3255284256,3255285535,BE
-3255285536,3255285567,LU
-3255285568,3255286095,BE
-3255286096,3255286103,DK
-3255286104,3255286111,LU
-3255286112,3255286279,BE
-3255286280,3255286287,LU
-3255286288,3255288735,BE
-3255288736,3255288799,LU
-3255288800,3255288831,BE
-3255288832,3255289087,LU
-3255289088,3255290143,BE
-3255290144,3255290175,LU
-3255290176,3255290271,BE
-3255290272,3255290287,LU
-3255290288,3255290879,BE
-3255290880,3255291391,LU
-3255291392,3255291399,BE
-3255291400,3255291423,LU
-3255291424,3255291615,BE
-3255291616,3255291623,LU
-3255291624,3255291983,BE
-3255291984,3255291999,LU
-3255292000,3255292311,BE
+3255238656,3255292311,BE
3255292312,3255292319,LU
-3255292320,3255297015,BE
-3255297016,3255297023,HU
-3255297024,3255300803,BE
-3255300804,3255300807,LU
-3255300808,3255304191,BE
+3255292320,3255304191,BE
3255304192,3255304447,DE
3255304448,3255305215,LV
3255305216,3255305471,BG
@@ -116860,14 +62380,13 @@
3255307776,3255308031,PL
3255308032,3255308287,CH
3255308288,3255311359,LV
-3255311360,3255311615,GB
3255311616,3255311871,SE
3255311872,3255312127,PT
3255312128,3255312383,SE
3255312384,3255315711,LV
3255315712,3255316223,PL
3255316224,3255316479,RU
-3255316736,3255316991,EU
+3255316736,3255316991,GB
3255316992,3255317247,FR
3255317248,3255317503,UA
3255317504,3255317759,BE
@@ -116876,7 +62395,6 @@
3255318272,3255318527,RU
3255318528,3255318783,UA
3255318784,3255319295,DE
-3255319296,3255319551,UA
3255319552,3255319807,BG
3255319808,3255320063,AT
3255320064,3255320319,BE
@@ -116913,11 +62431,9 @@
3255368192,3255368703,FR
3255368704,3255369215,CZ
3255369216,3255369727,GB
-3255369728,3255370239,LU
3255370240,3255370751,RU
3255370752,3255371263,DE
3255371264,3255371775,BG
-3255371776,3255372287,SE
3255372288,3255372799,DE
3255372800,3255373311,MC
3255373312,3255373823,UA
@@ -116940,7 +62456,6 @@
3255382528,3255383039,UA
3255383040,3255383551,PL
3255383552,3255384063,CH
-3255384064,3255384575,RO
3255384576,3255385087,AT
3255385088,3255385599,RO
3255385600,3255386111,FR
@@ -116952,140 +62467,63 @@
3255388672,3255389183,SE
3255389184,3255389695,GB
3255389696,3255390207,PL
-3255390208,3255390719,GB
3255390720,3255391231,KE
3255391232,3255391743,NL
3255391744,3255392767,DE
3255392768,3255393791,RO
3255393792,3255399679,SE
3255399680,3255400447,DE
-3255400448,3255400703,CH
-3255400704,3255400959,EU
-3255400960,3255401471,CH
+3255400448,3255401471,CH
3255401472,3255412479,DE
3255412480,3255412735,RO
3255412736,3255413247,DE
3255413248,3255413503,LV
3255413504,3255413759,UZ
-3255413760,3255414271,GB
-3255414272,3255414527,TR
3255414528,3255414783,LV
-3255414784,3255415807,BE
3255415808,3255416319,AT
3255416320,3255416831,DE
3255417856,3255418879,GB
3255418880,3255422975,DE
-3255422976,3255423999,RO
3255424000,3255425023,LV
3255426048,3255426559,IT
3255426816,3255427071,PL
3255427072,3255431167,RU
-3255431168,3255434464,GB
-3255434465,3255434465,EU
-3255434466,3255434720,GB
-3255434721,3255434721,EU
-3255434722,3255436543,GB
-3255436544,3255436799,NL
-3255436800,3255437055,DE
-3255437056,3255437311,GB
-3255437312,3255446527,EU
-3255446528,3255446783,GB
-3255446784,3255449599,EU
-3255449600,3255450111,BE
-3255450112,3255450367,GB
-3255450368,3255450623,FR
-3255450624,3255451135,DE
-3255451136,3255452671,FR
-3255452672,3255468031,EU
-3255468032,3255468543,GB
-3255468544,3255469055,EU
-3255469056,3255469567,GB
-3255469568,3255469823,DE
-3255469824,3255470079,DK
-3255470080,3255470591,AT
-3255470592,3255470847,DE
-3255470848,3255471103,HU
-3255471104,3255471359,BE
-3255471360,3255471615,EU
-3255471616,3255471871,GB
-3255471872,3255472127,BE
-3255472128,3255472383,GB
-3255472384,3255472639,BE
-3255472640,3255472895,NL
-3255472896,3255473151,BE
-3255473152,3255473407,GB
-3255473408,3255473663,CH
-3255473664,3255473919,BE
-3255473920,3255474175,NO
-3255474176,3255476735,GB
-3255476736,3255476991,IE
-3255476992,3255477247,NL
-3255477248,3255477503,GB
-3255477504,3255477759,CH
-3255477760,3255478271,GB
-3255478272,3255482367,EU
-3255482368,3255482623,GB
-3255482624,3255482815,BE
-3255482816,3255482831,FR
-3255482832,3255482839,BE
-3255482840,3255482847,FR
-3255482848,3255482871,BE
-3255482872,3255482879,EU
-3255482880,3255483135,GB
-3255483136,3255484415,DE
-3255484416,3255484671,PL
-3255484672,3255484927,NL
-3255484928,3255485183,CH
-3255485184,3255485439,AT
+3255431168,3255436287,GB
+3255451648,3255452671,FR
+3255474176,3255476223,GB
+3255483392,3255484415,DE
3255485440,3255486463,FR
-3255486464,3255486719,BE
-3255486720,3255486975,EU
-3255486976,3255487487,GB
-3255487488,3255487743,BE
-3255487744,3255487999,GB
-3255488000,3255488255,BE
-3255488256,3255488511,GB
3255488512,3255489535,AT
-3255489536,3255489887,DE
-3255489888,3255490047,GB
-3255490048,3255490559,DE
-3255490560,3255492607,EU
3255492608,3255496703,GB
-3255496704,3255497727,EU
-3255497728,3255497983,BE
-3255497984,3255498239,DE
-3255498240,3255498495,FR
-3255498496,3255498751,GB
3255498752,3255500799,FR
3255500800,3255504895,CH
3255504896,3255505151,RU
-3255505152,3255505919,GB
+3255505152,3255505663,GB
3255505920,3255506431,RU
3255506432,3255506687,PL
3255506688,3255506943,PT
3255506944,3255507199,PL
-3255507200,3255507455,PT
3255507456,3255507711,FR
3255507712,3255507967,AT
3255507968,3255508223,UA
3255508224,3255508479,RU
-3255508480,3255521023,CH
-3255521024,3255521279,EU
-3255521280,3255544319,CH
+3255508480,3255544319,CH
3255544320,3255544575,DE
3255544576,3255544831,AT
3255544832,3255558143,CH
3255558144,3255558399,BE
3255558400,3255558655,UA
-3255558656,3255564031,CH
+3255558656,3255563263,CH
+3255563776,3255564031,CH
3255564032,3255564287,RU
-3255564288,3255565955,CH
-3255565956,3255565956,EU
-3255565957,3255566335,CH
+3255564288,3255565311,CH
+3255565312,3255565955,DE
+3255565956,3255565956,CH
+3255565957,3255566079,DE
3255566336,3255570431,GB
3255570432,3255574527,CH
3255574528,3255578623,CZ
-3255578624,3255582719,IT
+3255578624,3255582719,CY
3255582720,3255599103,UA
3255599104,3255615487,CH
3255615488,3255623679,DE
@@ -117095,86 +62533,57 @@
3255660544,3255666431,NL
3255666432,3255666687,DE
3255666688,3255697407,NL
-3255697408,3255698687,SE
-3255698688,3255698943,GB
-3255698944,3255710719,SE
+3255697408,3255710719,SE
3255710720,3255710975,ES
-3255710976,3255716351,SE
-3255716352,3255716863,CH
-3255716864,3255724543,SE
+3255710976,3255724543,SE
3255724544,3255725055,US
3255725056,3255725311,ES
3255725312,3255730943,SE
3255730944,3255731199,GB
-3255731200,3255739647,SE
-3255739648,3255739903,GB
-3255739904,3255742719,SE
-3255742720,3255742975,SG
-3255742976,3255743231,SE
+3255731200,3255743231,SE
3255743232,3255743487,IT
3255743488,3255743743,DE
3255743744,3255743999,US
-3255744000,3255745535,SE
-3255745536,3255746047,DK
-3255746048,3255762431,SE
-3255762432,3255762943,BE
-3255762944,3255791615,DE
+3255744000,3255762943,SE
+3255762944,3255771135,DE
+3255779328,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
3255800576,3255800831,UA
-3255800832,3255817215,DE
+3255800832,3255801855,DE
+3255802368,3255817215,DE
3255817216,3255817471,SE
3255817472,3255817727,ES
-3255817728,3255821311,DE
-3255821312,3255821823,CH
-3255821824,3255822079,DE
-3255822080,3255822335,CH
+3255817728,3255820287,DE
+3255821312,3255822335,CH
3255822336,3255828479,DE
-3255828480,3255947484,SE
-3255947485,3255947485,EU
-3255947486,3256025087,SE
+3255828480,3256025087,SE
3256025088,3256057855,NO
-3256057856,3256076287,DK
-3256076288,3256076799,SE
-3256076800,3256082431,DK
-3256082432,3256088063,LV
-3256088064,3256088095,RU
-3256088096,3256088103,LV
-3256088104,3256088319,RU
-3256088320,3256090623,LV
-3256090624,3256164863,IT
-3256164864,3256165375,SE
-3256165376,3256187391,IT
-3256187392,3256187647,SM
-3256187648,3256221695,IT
-3256221696,3256222207,SE
-3256222208,3256222463,NL
-3256222464,3256223743,SE
-3256223744,3256226047,NL
-3256226048,3256229887,SE
+3256057856,3256082431,DK
+3256082432,3256090623,LV
+3256090624,3256221695,IT
+3256221696,3256223743,SE
+3256223744,3256225791,NL
+3256225792,3256229887,SE
3256229888,3256233983,DE
3256233984,3256238079,SE
3256238080,3256246271,NO
3256246272,3256352767,SE
-3256352768,3256353279,CH
-3256353280,3256353535,EU
-3256353536,3256385535,CH
+3256352768,3256385535,CH
3256385536,3256393727,AT
3256393728,3256394239,DE
-3256394240,3256394751,UA
3256394752,3256395263,PL
3256395264,3256395775,GB
3256395776,3256396287,TR
3256396288,3256396799,GR
3256396800,3256397311,DE
3256397312,3256397823,PL
-3256397824,3256398847,RO
+3256398336,3256398847,RO
3256398848,3256399359,PL
3256399360,3256400895,UA
3256400896,3256401407,GB
@@ -117184,7 +62593,6 @@
3256410624,3256411135,GR
3256411136,3256411647,FR
3256411648,3256412159,DE
-3256412160,3256412671,GB
3256412672,3256413183,RO
3256413184,3256413695,UA
3256413696,3256414207,PL
@@ -117193,28 +62601,19 @@
3256415232,3256415743,PL
3256415744,3256416255,UA
3256416256,3256416767,RS
-3256416768,3256417279,GB
+3256417024,3256417279,GB
3256417280,3256417791,NO
3256417792,3256418303,GB
-3256418304,3256444415,DE
-3256444416,3256444671,EU
-3256444672,3256446855,DE
-3256446856,3256446863,US
-3256446864,3256448575,DE
-3256448576,3256448591,ES
-3256448592,3256448935,DE
-3256448936,3256448943,IT
-3256448944,3256483839,DE
+3256418304,3256483839,DE
3256483840,3256489471,NL
3256489472,3256489983,GR
3256489984,3256490239,BE
-3256490240,3256490495,DE
-3256490496,3256513791,NL
-3256513792,3256514047,GB
-3256514048,3256524287,NL
+3256490496,3256490751,CH
+3256490752,3256513023,NL
+3256513280,3256524287,NL
3256524288,3256524799,DE
3256524800,3256528895,NL
-3256528896,3256530943,DE
+3256530688,3256530943,DE
3256530944,3256549375,NL
3256549376,3256614911,TR
3256614912,3256615935,FI
@@ -117271,34 +62670,12 @@
3256680448,3256688639,CH
3256688640,3256692735,IL
3256692736,3256693759,GR
-3256693760,3256694783,IT
3256694784,3256695807,DE
3256695808,3256696831,UA
-3256696832,3256697087,BE
-3256697088,3256697599,EU
-3256697600,3256697855,GB
-3256697856,3256698367,IT
-3256698368,3256698623,NL
-3256698624,3256698879,GB
-3256698880,3256699135,DE
-3256699136,3256699391,NL
-3256699392,3256700415,GB
-3256700416,3256700671,NL
-3256700672,3256701183,DE
-3256701184,3256701439,BE
-3256701440,3256701951,GB
-3256701952,3256705023,EU
+3256699392,3256699647,GB
3256705024,3256705279,IE
-3256705280,3256705791,BE
-3256705792,3256706047,AT
-3256706048,3256706559,GR
-3256706560,3256709631,EU
-3256709632,3256709887,AT
-3256709888,3256710143,EU
-3256710144,3256710655,AT
-3256710656,3256711167,SE
-3256711168,3256711423,DE
-3256711424,3256713215,EU
+3256705536,3256705791,BE
+3256710656,3256710911,SE
3256713216,3256727551,PL
3256727552,3256727807,DE
3256727808,3256728063,HU
@@ -117320,7 +62697,6 @@
3256787456,3256787711,DE
3256787712,3256787967,UA
3256787968,3256788223,PL
-3256788224,3256788479,RU
3256788480,3256788735,GB
3256788736,3256788991,DE
3256788992,3256789247,RO
@@ -117330,21 +62706,17 @@
3256790016,3256790271,UA
3256790272,3256790783,DE
3256790784,3256791039,NL
-3256791296,3256791551,RO
3256791552,3256791807,GR
3256791808,3256792063,PL
3256792064,3256792319,DE
-3256792320,3256792489,CH
-3256792490,3256792490,EU
-3256792491,3256792575,CH
+3256792320,3256792575,CH
3256792576,3256792831,NL
-3256792832,3256793087,DE
3256793088,3256793343,GB
3256793344,3256793599,DE
3256793600,3256793855,GB
3256793856,3256794111,SK
3256794112,3256794367,NL
-3256794368,3256794623,DK
+3256794368,3256794623,GB
3256794624,3256794879,RU
3256794880,3256795135,AT
3256795136,3256811519,GR
@@ -117369,7 +62741,9 @@
3256864512,3256864767,CH
3256864768,3256870911,DE
3256870912,3256871167,RU
-3256871168,3256875007,DE
+3256871168,3256871935,DE
+3256872448,3256874239,DE
+3256874496,3256875007,DE
3256875008,3256875519,UA
3256875520,3256876031,RU
3256876032,3256876287,PL
@@ -117387,8 +62761,7 @@
3256946176,3256946431,RO
3256946432,3256946687,UA
3256946688,3256946943,GB
-3256946944,3256947199,EU
-3256947200,3256947711,DE
+3256946944,3256947711,DE
3256947712,3256958975,GB
3256958976,3256959999,RO
3256960000,3256960255,SA
@@ -117408,7 +62781,7 @@
3256968192,3256969215,RO
3256969216,3256970239,IR
3256970240,3256970495,AT
-3256970496,3256970751,UA
+3256970496,3256970751,GB
3256970752,3256971007,RU
3256971008,3256971263,PL
3256971264,3256971775,NL
@@ -117431,20 +62804,28 @@
3256991488,3256991743,RU
3256991744,3257011199,GB
3257011200,3257011455,BG
-3257011456,3257058815,GB
+3257011456,3257024511,GB
+3257024512,3257032703,AU
+3257032704,3257051135,GB
+3257051648,3257057279,GB
3257058816,3257059071,PL
3257059072,3257092607,GB
3257092608,3257092863,RO
-3257092864,3257139199,GB
+3257092864,3257121535,GB
+3257121792,3257139199,GB
3257139200,3257139455,DK
3257139456,3257143295,GB
3257143296,3257143807,RU
3257143808,3257144063,DE
3257144064,3257144319,RU
-3257144320,3257144575,AT
+3257144320,3257144575,DE
3257144576,3257144831,GB
3257144832,3257145087,FR
-3257145088,3257180159,GB
+3257145088,3257146367,GB
+3257147392,3257163775,GB
+3257167872,3257169919,GB
+3257170176,3257176063,GB
+3257178112,3257180159,GB
3257180160,3257180415,TR
3257180416,3257180671,RU
3257180672,3257180927,EE
@@ -117454,10 +62835,13 @@
3257181696,3257181951,FR
3257181952,3257182207,BG
3257182208,3257182463,PL
-3257182464,3257196543,GB
+3257182464,3257186303,GB
+3257188352,3257196543,GB
3257196544,3257200639,LU
3257200640,3257204735,GB
-3257204736,3257268223,AT
+3257204736,3257225215,AT
+3257226240,3257227263,AT
+3257229312,3257268223,AT
3257268224,3257268479,UA
3257268480,3257268735,SE
3257268736,3257269247,AT
@@ -117468,19 +62852,20 @@
3257294848,3257303039,HU
3257303040,3257311231,PT
3257311232,3257335807,CH
-3257335808,3257357311,DE
+3257335808,3257355775,DE
+3257356288,3257357311,DE
3257357312,3257357567,PT
3257357568,3257357823,SI
3257357824,3257371903,DE
-3257371904,3257372159,EU
-3257372160,3257372671,GB
-3257372672,3257383679,DE
-3257383680,3257383935,CH
+3257371904,3257372159,BE
+3257372416,3257372671,GB
+3257372672,3257382911,DE
+3257382912,3257383167,NL
+3257383168,3257383679,DE
3257383936,3257388799,DE
3257388800,3257389055,FR
-3257389056,3257391615,DE
-3257391616,3257391871,EU
-3257391872,3257401343,DE
+3257389056,3257390079,DE
+3257390592,3257401343,DE
3257401344,3257453567,CH
3257453568,3257454591,RO
3257454592,3257455103,IT
@@ -117490,20 +62875,18 @@
3257466880,3257467135,DE
3257467392,3257467903,SE
3257467904,3257468927,IT
-3257468928,3257469183,EU
3257469184,3257469439,IT
3257469440,3257469951,GB
3257469952,3257470975,PL
-3257470976,3257475071,FI
+3257470976,3257471999,FI
+3257472000,3257472511,SG
+3257472512,3257475071,FI
3257475072,3257475327,ES
3257475328,3257475583,FI
3257475584,3257477119,DE
3257477120,3257477375,NL
3257477376,3257477887,SE
-3257477888,3257480447,GB
-3257480448,3257480959,NL
-3257480960,3257481215,SE
-3257481216,3257481471,GB
+3257479168,3257481471,GB
3257481472,3257481727,DE
3257481728,3257481983,FI
3257481984,3257482239,FR
@@ -117511,9 +62894,7 @@
3257482752,3257483007,NL
3257483008,3257491455,CH
3257491456,3257495551,BE
-3257495552,3257497855,CH
-3257497856,3257499647,NL
-3257499648,3257532415,CH
+3257495552,3257532415,CH
3257532416,3257542655,CY
3257542656,3257542911,PL
3257542912,3257543423,IT
@@ -117531,28 +62912,11 @@
3257546688,3257546719,DE
3257546720,3257546751,DK
3257546752,3257548799,IE
-3257548800,3257549623,GB
-3257549624,3257549631,FR
-3257549632,3257549823,GB
-3257549824,3257550079,US
-3257550080,3257550847,GB
-3257550848,3257551103,HK
-3257551104,3257551359,GB
-3257551360,3257551871,BE
-3257551872,3257552127,GB
-3257552128,3257552415,SE
-3257552416,3257554687,GB
-3257554688,3257554943,DE
-3257554944,3257555295,CH
-3257555296,3257555327,RO
-3257555328,3257555343,GB
-3257555344,3257555391,CH
-3257555392,3257555423,GB
-3257555424,3257555967,CH
-3257555968,3257556991,DE
-3257556992,3257557503,MW
+3257548800,3257554943,GB
+3257554944,3257555455,CH
+3257555456,3257556991,GB
3257557504,3257558015,LU
-3257558016,3257559551,RO
+3257558016,3257559039,RO
3257559552,3257560063,UA
3257560064,3257560575,DE
3257560576,3257561087,PL
@@ -117562,19 +62926,9 @@
3257563648,3257564159,NL
3257564160,3257564671,GB
3257564672,3257565183,RO
-3257565184,3257570303,CY
-3257570304,3257570307,GR
-3257570308,3257570311,CY
-3257570312,3257570327,GR
-3257570328,3257570367,CY
-3257570368,3257570431,GR
-3257570432,3257573375,CY
+3257565184,3257573375,CY
3257573376,3257574015,CH
-3257574016,3257574143,BE
-3257574144,3257574399,GB
-3257574400,3257574655,IT
-3257574656,3257576191,BE
-3257576192,3257577471,AT
+3257576448,3257577471,AT
3257577472,3257581567,DE
3257581568,3257585663,UA
3257585664,3257586175,BE
@@ -117588,1116 +62942,28 @@
3257588736,3257589759,NL
3257589760,3257663487,GB
3257663488,3257729023,UA
-3257729024,3257731071,DE
-3257731072,3257731375,NL
-3257731376,3257731383,DE
-3257731384,3257731439,NL
-3257731440,3257731447,DE
-3257731448,3257731551,NL
-3257731552,3257731559,DE
-3257731560,3257731567,NL
-3257731568,3257731575,DE
-3257731576,3257731823,NL
-3257731824,3257731831,DE
-3257731832,3257732023,NL
-3257732024,3257732031,DE
-3257732032,3257732095,NL
-3257732096,3257732607,DE
-3257732608,3257732703,NL
-3257732704,3257732719,DE
-3257732720,3257732727,NL
-3257732728,3257732735,DE
-3257732736,3257732815,NL
-3257732816,3257732823,DE
-3257732824,3257732903,NL
-3257732904,3257732911,DE
-3257732912,3257733303,NL
-3257733304,3257733311,DE
-3257733312,3257733431,NL
-3257733432,3257733439,DE
-3257733440,3257733903,NL
-3257733904,3257733911,DE
-3257733912,3257734135,NL
-3257734136,3257736191,DE
-3257736192,3257736575,NL
-3257736576,3257736583,DE
-3257736584,3257736631,NL
-3257736632,3257736639,DE
-3257736640,3257736671,NL
-3257736672,3257736679,DE
-3257736680,3257736887,NL
-3257736888,3257736895,DE
-3257736896,3257736943,NL
-3257736944,3257736951,DE
-3257736952,3257736975,NL
-3257736976,3257736983,DE
-3257736984,3257737023,NL
-3257737024,3257737031,DE
-3257737032,3257737039,NL
-3257737040,3257737047,DE
-3257737048,3257737119,NL
-3257737120,3257737127,DE
-3257737128,3257737175,NL
-3257737176,3257737183,DE
-3257737184,3257737279,NL
-3257737280,3257737287,DE
-3257737288,3257737295,NL
-3257737296,3257737303,DE
-3257737304,3257737447,NL
-3257737448,3257737455,DE
-3257737456,3257737471,NL
-3257737472,3257743615,DE
-3257743616,3257743623,NL
-3257743624,3257743631,DE
-3257743632,3257743703,NL
-3257743704,3257743711,DE
-3257743712,3257743743,NL
-3257743744,3257743751,DE
-3257743752,3257743775,NL
-3257743776,3257743783,DE
-3257743784,3257743943,NL
-3257743944,3257743959,DE
-3257743960,3257744111,NL
-3257744112,3257744119,DE
-3257744120,3257744159,NL
-3257744160,3257744167,DE
-3257744168,3257744175,NL
-3257744176,3257744183,DE
-3257744184,3257744247,NL
-3257744248,3257744255,DE
-3257744256,3257744671,NL
-3257744672,3257744679,DE
-3257744680,3257744775,NL
-3257744776,3257744783,DE
-3257744784,3257744871,NL
-3257744872,3257744887,DE
-3257744888,3257744951,NL
-3257744952,3257744959,DE
-3257744960,3257744999,NL
-3257745000,3257745007,DE
-3257745008,3257745119,NL
-3257745120,3257745127,DE
-3257745128,3257745255,NL
-3257745256,3257745263,DE
-3257745264,3257745823,NL
-3257745824,3257745831,DE
-3257745832,3257745879,NL
-3257745880,3257745887,DE
-3257745888,3257745935,NL
-3257745936,3257745943,DE
-3257745944,3257746047,NL
-3257746048,3257746055,DE
-3257746056,3257746079,NL
-3257746080,3257746087,DE
-3257746088,3257746167,NL
-3257746168,3257746175,DE
-3257746176,3257746455,NL
-3257746456,3257746463,DE
-3257746464,3257746487,NL
-3257746488,3257746495,DE
-3257746496,3257746527,NL
-3257746528,3257746535,DE
-3257746536,3257746647,NL
-3257746648,3257746655,DE
-3257746656,3257746671,NL
-3257746672,3257746679,DE
-3257746680,3257746847,NL
-3257746848,3257746855,DE
-3257746856,3257746919,NL
-3257746920,3257746927,DE
-3257746928,3257746943,NL
-3257746944,3257747455,DE
-3257747456,3257747471,NL
-3257747472,3257747479,DE
-3257747480,3257747607,NL
-3257747608,3257747615,DE
-3257747616,3257747655,NL
-3257747656,3257747663,DE
-3257747664,3257747719,NL
-3257747720,3257747727,DE
-3257747728,3257747847,NL
-3257747848,3257747855,DE
-3257747856,3257747903,NL
-3257747904,3257747911,DE
-3257747912,3257747991,NL
-3257747992,3257747999,DE
-3257748000,3257748015,NL
-3257748016,3257748023,DE
-3257748024,3257748063,NL
-3257748064,3257748071,DE
-3257748072,3257748119,NL
-3257748120,3257748127,DE
-3257748128,3257748303,NL
-3257748304,3257748311,DE
-3257748312,3257748383,NL
-3257748384,3257748391,DE
-3257748392,3257748423,NL
-3257748424,3257748431,DE
-3257748432,3257748455,NL
-3257748456,3257748463,DE
-3257748464,3257748479,NL
-3257748480,3257749527,DE
-3257749528,3257749551,NL
-3257749552,3257749559,DE
-3257749560,3257749663,NL
-3257749664,3257749687,DE
-3257749688,3257749727,NL
-3257749728,3257749735,DE
-3257749736,3257749743,NL
-3257749744,3257749751,DE
-3257749752,3257749759,NL
-3257749760,3257749767,DE
-3257749768,3257749783,NL
-3257749784,3257749791,DE
-3257749792,3257749839,NL
-3257749840,3257749879,DE
-3257749880,3257749887,NL
-3257749888,3257749903,DE
-3257749904,3257749943,NL
-3257749944,3257749951,DE
-3257749952,3257749959,NL
-3257749960,3257749967,DE
-3257749968,3257750015,NL
-3257750016,3257750023,DE
-3257750024,3257750071,NL
-3257750072,3257750079,DE
-3257750080,3257750119,NL
-3257750120,3257750127,DE
-3257750128,3257750151,NL
-3257750152,3257750167,DE
-3257750168,3257750191,NL
-3257750192,3257750199,DE
-3257750200,3257750231,NL
-3257750232,3257750247,DE
-3257750248,3257750359,NL
-3257750360,3257750367,DE
-3257750368,3257750391,NL
-3257750392,3257750399,DE
-3257750400,3257750471,NL
-3257750472,3257750479,DE
-3257750480,3257750615,NL
-3257750616,3257750623,DE
-3257750624,3257750631,NL
-3257750632,3257750639,DE
-3257750640,3257750655,NL
-3257750656,3257750663,DE
-3257750664,3257750671,NL
-3257750672,3257750687,DE
-3257750688,3257750735,NL
-3257750736,3257750751,DE
-3257750752,3257750759,NL
-3257750760,3257750767,DE
-3257750768,3257751087,NL
-3257751088,3257751103,DE
-3257751104,3257751183,NL
-3257751184,3257751191,DE
-3257751192,3257751199,NL
-3257751200,3257751207,DE
-3257751208,3257751215,NL
-3257751216,3257751223,DE
-3257751224,3257751247,NL
-3257751248,3257751263,DE
-3257751264,3257751279,NL
-3257751280,3257751287,DE
-3257751288,3257751351,NL
-3257751352,3257751359,DE
-3257751360,3257751391,NL
-3257751392,3257751399,DE
-3257751400,3257751519,NL
-3257751520,3257751527,DE
-3257751528,3257751591,NL
-3257751592,3257751599,DE
-3257751600,3257751623,NL
-3257751624,3257751631,DE
-3257751632,3257751639,NL
-3257751640,3257751647,DE
-3257751648,3257751711,NL
-3257751712,3257751719,DE
-3257751720,3257751775,NL
-3257751776,3257751783,DE
-3257751784,3257751823,NL
-3257751824,3257751831,DE
-3257751832,3257751871,NL
-3257751872,3257751887,DE
-3257751888,3257751903,NL
-3257751904,3257751911,DE
-3257751912,3257751975,NL
-3257751976,3257751983,DE
-3257751984,3257752007,NL
-3257752008,3257752015,DE
-3257752016,3257752023,NL
-3257752024,3257752031,DE
-3257752032,3257752047,NL
-3257752048,3257752055,DE
-3257752056,3257752071,NL
-3257752072,3257752079,DE
-3257752080,3257752103,NL
-3257752104,3257752111,DE
-3257752112,3257752135,NL
-3257752136,3257752143,DE
-3257752144,3257752167,NL
-3257752168,3257752183,DE
-3257752184,3257752343,NL
-3257752344,3257752351,DE
-3257752352,3257752399,NL
-3257752400,3257752407,DE
-3257752408,3257752447,NL
-3257752448,3257752455,DE
-3257752456,3257752495,NL
-3257752496,3257752503,DE
-3257752504,3257752527,NL
-3257752528,3257752543,DE
-3257752544,3257752583,NL
-3257752584,3257752591,DE
-3257752592,3257752607,NL
-3257752608,3257752615,DE
-3257752616,3257752623,NL
-3257752624,3257752631,DE
-3257752632,3257752655,NL
-3257752656,3257752663,DE
-3257752664,3257752727,NL
-3257752728,3257752735,DE
-3257752736,3257752783,NL
-3257752784,3257752791,DE
-3257752792,3257752799,NL
-3257752800,3257752807,DE
-3257752808,3257752919,NL
-3257752920,3257752935,DE
-3257752936,3257752959,NL
-3257752960,3257752967,DE
-3257752968,3257752983,NL
-3257752984,3257752991,DE
-3257752992,3257753071,NL
-3257753072,3257753079,DE
-3257753080,3257753087,NL
-3257753088,3257756671,DE
-3257756672,3257756735,NL
-3257756736,3257756743,DE
-3257756744,3257756783,NL
-3257756784,3257756791,DE
-3257756792,3257756807,NL
-3257756808,3257756823,DE
-3257756824,3257756887,NL
-3257756888,3257756895,DE
-3257756896,3257756919,NL
-3257756920,3257756935,DE
-3257756936,3257757007,NL
-3257757008,3257757015,DE
-3257757016,3257757079,NL
-3257757080,3257757087,DE
-3257757088,3257757247,NL
-3257757248,3257757255,DE
-3257757256,3257757263,NL
-3257757264,3257757271,DE
-3257757272,3257757343,NL
-3257757344,3257757351,DE
-3257757352,3257757375,NL
-3257757376,3257757383,DE
-3257757384,3257757407,NL
-3257757408,3257757423,DE
-3257757424,3257757471,NL
-3257757472,3257757479,DE
-3257757480,3257757511,NL
-3257757512,3257757519,DE
-3257757520,3257757583,NL
-3257757584,3257757591,DE
-3257757592,3257757639,NL
-3257757640,3257757655,DE
-3257757656,3257757703,NL
-3257757704,3257757711,DE
-3257757712,3257757735,NL
-3257757736,3257757751,DE
-3257757752,3257757799,NL
-3257757800,3257757807,DE
-3257757808,3257757815,NL
-3257757816,3257757831,DE
-3257757832,3257757919,NL
-3257757920,3257757943,DE
-3257757944,3257758143,NL
-3257758144,3257758151,DE
-3257758152,3257758239,NL
-3257758240,3257758247,DE
-3257758248,3257758271,NL
-3257758272,3257758279,DE
-3257758280,3257758335,NL
-3257758336,3257758343,DE
-3257758344,3257758375,NL
-3257758376,3257758383,DE
-3257758384,3257758423,NL
-3257758424,3257758431,DE
-3257758432,3257758511,NL
-3257758512,3257758519,DE
-3257758520,3257758567,NL
-3257758568,3257758575,DE
-3257758576,3257758591,NL
-3257758592,3257758599,DE
-3257758600,3257758623,NL
-3257758624,3257758639,DE
-3257758640,3257758647,NL
-3257758648,3257758655,DE
-3257758656,3257758703,NL
-3257758704,3257758711,DE
-3257758712,3257758775,NL
-3257758776,3257758783,DE
-3257758784,3257758855,NL
-3257758856,3257758863,DE
-3257758864,3257758879,NL
-3257758880,3257758887,DE
-3257758888,3257758927,NL
-3257758928,3257758935,DE
-3257758936,3257759087,NL
-3257759088,3257759095,DE
-3257759096,3257759135,NL
-3257759136,3257759167,DE
-3257759168,3257759215,NL
-3257759216,3257759223,DE
-3257759224,3257759231,NL
-3257759232,3257759239,DE
-3257759240,3257759255,NL
-3257759256,3257759279,DE
-3257759280,3257759287,NL
-3257759288,3257759295,DE
-3257759296,3257759415,NL
-3257759416,3257759431,DE
-3257759432,3257759575,NL
-3257759576,3257759583,DE
-3257759584,3257759591,NL
-3257759592,3257759599,DE
-3257759600,3257759647,NL
-3257759648,3257759671,DE
-3257759672,3257759695,NL
-3257759696,3257759703,DE
-3257759704,3257759735,NL
-3257759736,3257759743,DE
-3257759744,3257759791,NL
-3257759792,3257759799,DE
-3257759800,3257759823,NL
-3257759824,3257759831,DE
-3257759832,3257759847,NL
-3257759848,3257759879,DE
-3257759880,3257759887,NL
-3257759888,3257759903,DE
-3257759904,3257759911,NL
-3257759912,3257759919,DE
-3257759920,3257759975,NL
-3257759976,3257759983,DE
-3257759984,3257759999,NL
-3257760000,3257760007,DE
-3257760008,3257760015,NL
-3257760016,3257760023,DE
-3257760024,3257760039,NL
-3257760040,3257760047,DE
-3257760048,3257760095,NL
-3257760096,3257760103,DE
-3257760104,3257760119,NL
-3257760120,3257760127,DE
-3257760128,3257760167,NL
-3257760168,3257760175,DE
-3257760176,3257760231,NL
-3257760232,3257760239,DE
-3257760240,3257760263,NL
-3257760264,3257760271,DE
-3257760272,3257760303,NL
-3257760304,3257760311,DE
-3257760312,3257760335,NL
-3257760336,3257760343,DE
-3257760344,3257760359,NL
-3257760360,3257760367,DE
-3257760368,3257760431,NL
-3257760432,3257760439,DE
-3257760440,3257760487,NL
-3257760488,3257760503,DE
-3257760504,3257760559,NL
-3257760560,3257760575,DE
-3257760576,3257760655,NL
-3257760656,3257760663,DE
-3257760664,3257760791,NL
-3257760792,3257760799,DE
-3257760800,3257760839,NL
-3257760840,3257760847,DE
-3257760848,3257760863,NL
-3257760864,3257760871,DE
-3257760872,3257760927,NL
-3257760928,3257760935,DE
-3257760936,3257760959,NL
-3257760960,3257760967,DE
-3257760968,3257761055,NL
-3257761056,3257761071,DE
-3257761072,3257761151,NL
-3257761152,3257761159,DE
-3257761160,3257761183,NL
-3257761184,3257761191,DE
-3257761192,3257761279,NL
-3257761280,3257761791,DE
-3257761792,3257761839,NL
-3257761840,3257761847,DE
-3257761848,3257761879,NL
-3257761880,3257761887,DE
-3257761888,3257761903,NL
-3257761904,3257761919,DE
-3257761920,3257761951,NL
-3257761952,3257761959,DE
-3257761960,3257762023,NL
-3257762024,3257762031,DE
-3257762032,3257762175,NL
-3257762176,3257762183,DE
-3257762184,3257762215,NL
-3257762216,3257762223,DE
-3257762224,3257762247,NL
-3257762248,3257762263,DE
-3257762264,3257762583,NL
-3257762584,3257762599,DE
-3257762600,3257762655,NL
-3257762656,3257762663,DE
-3257762664,3257762679,NL
-3257762680,3257762695,DE
-3257762696,3257762711,NL
-3257762712,3257762719,DE
-3257762720,3257762807,NL
-3257762808,3257762815,DE
-3257762816,3257762863,NL
-3257762864,3257762871,DE
-3257762872,3257762895,NL
-3257762896,3257762903,DE
-3257762904,3257762951,NL
-3257762952,3257762959,DE
-3257762960,3257763023,NL
-3257763024,3257763031,DE
-3257763032,3257763055,NL
-3257763056,3257763063,DE
-3257763064,3257763151,NL
-3257763152,3257763159,DE
-3257763160,3257763247,NL
-3257763248,3257763255,DE
-3257763256,3257763327,NL
-3257763328,3257763839,DE
-3257763840,3257763855,NL
-3257763856,3257763871,DE
-3257763872,3257763887,NL
-3257763888,3257763895,DE
-3257763896,3257763927,NL
-3257763928,3257763935,DE
-3257763936,3257763943,NL
-3257763944,3257763959,DE
-3257763960,3257763999,NL
-3257764000,3257764007,DE
-3257764008,3257764015,NL
-3257764016,3257764023,DE
-3257764024,3257764095,NL
-3257764096,3257764103,DE
-3257764104,3257764143,NL
-3257764144,3257764151,DE
-3257764152,3257764175,NL
-3257764176,3257764183,DE
-3257764184,3257764247,NL
-3257764248,3257764255,DE
-3257764256,3257764287,NL
-3257764288,3257764295,DE
-3257764296,3257764487,NL
-3257764488,3257764511,DE
-3257764512,3257764543,NL
-3257764544,3257764551,DE
-3257764552,3257764559,NL
-3257764560,3257764567,DE
-3257764568,3257764575,NL
-3257764576,3257764583,DE
-3257764584,3257764591,NL
-3257764592,3257764599,DE
-3257764600,3257764647,NL
-3257764648,3257764655,DE
-3257764656,3257764799,NL
-3257764800,3257764807,DE
-3257764808,3257764855,NL
-3257764856,3257764863,DE
-3257764864,3257764879,NL
-3257764880,3257764887,DE
-3257764888,3257764927,NL
-3257764928,3257764935,DE
-3257764936,3257764983,NL
-3257764984,3257764991,DE
-3257764992,3257765039,NL
-3257765040,3257765047,DE
-3257765048,3257765055,NL
-3257765056,3257765071,DE
-3257765072,3257765079,NL
-3257765080,3257765087,DE
-3257765088,3257765103,NL
-3257765104,3257765111,DE
-3257765112,3257765167,NL
-3257765168,3257765175,DE
-3257765176,3257765247,NL
-3257765248,3257765255,DE
-3257765256,3257765263,NL
-3257765264,3257765279,DE
-3257765280,3257765375,NL
-3257765376,3257768959,DE
-3257768960,3257769071,NL
-3257769072,3257769079,DE
-3257769080,3257769215,NL
-3257769216,3257769223,DE
-3257769224,3257769543,NL
-3257769544,3257769551,DE
-3257769552,3257769567,NL
-3257769568,3257769575,DE
-3257769576,3257769687,NL
-3257769688,3257769695,DE
-3257769696,3257769703,NL
-3257769704,3257769711,DE
-3257769712,3257769719,NL
-3257769720,3257769727,DE
-3257769728,3257770023,NL
-3257770024,3257770031,DE
-3257770032,3257770039,NL
-3257770040,3257770047,DE
-3257770048,3257770071,NL
-3257770072,3257770079,DE
-3257770080,3257770095,NL
-3257770096,3257770103,DE
-3257770104,3257770151,NL
-3257770152,3257770159,DE
-3257770160,3257770191,NL
-3257770192,3257770199,DE
-3257770200,3257770279,NL
-3257770280,3257770287,DE
-3257770288,3257770295,NL
-3257770296,3257770303,DE
-3257770304,3257770359,NL
-3257770360,3257770367,DE
-3257770368,3257770455,NL
-3257770456,3257770463,DE
-3257770464,3257770511,NL
-3257770512,3257770519,DE
-3257770520,3257770599,NL
-3257770600,3257770615,DE
-3257770616,3257770623,NL
-3257770624,3257770631,DE
-3257770632,3257770687,NL
-3257770688,3257770695,DE
-3257770696,3257770767,NL
-3257770768,3257770775,DE
-3257770776,3257770823,NL
-3257770824,3257770831,DE
-3257770832,3257770879,NL
-3257770880,3257770887,DE
-3257770888,3257770911,NL
-3257770912,3257770919,DE
-3257770920,3257771007,NL
-3257771008,3257772551,DE
-3257772552,3257772575,NL
-3257772576,3257772583,DE
-3257772584,3257772631,NL
-3257772632,3257772639,DE
-3257772640,3257772679,NL
-3257772680,3257772687,DE
-3257772688,3257772711,NL
-3257772712,3257772743,DE
-3257772744,3257772783,NL
-3257772784,3257772791,DE
-3257772792,3257772815,NL
-3257772816,3257772831,DE
-3257772832,3257772847,NL
-3257772848,3257772855,DE
-3257772856,3257772895,NL
-3257772896,3257772903,DE
-3257772904,3257772935,NL
-3257772936,3257772951,DE
-3257772952,3257772967,NL
-3257772968,3257772975,DE
-3257772976,3257772991,NL
-3257772992,3257772999,DE
-3257773000,3257773095,NL
-3257773096,3257773103,DE
-3257773104,3257773199,NL
-3257773200,3257773223,DE
-3257773224,3257773303,NL
-3257773304,3257773311,DE
-3257773312,3257773391,NL
-3257773392,3257773399,DE
-3257773400,3257773415,NL
-3257773416,3257773423,DE
-3257773424,3257773439,NL
-3257773440,3257773447,DE
-3257773448,3257773591,NL
-3257773592,3257773599,DE
-3257773600,3257773759,NL
-3257773760,3257773775,DE
-3257773776,3257773799,NL
-3257773800,3257773807,DE
-3257773808,3257773831,NL
-3257773832,3257773855,DE
-3257773856,3257773903,NL
-3257773904,3257773919,DE
-3257773920,3257773927,NL
-3257773928,3257773935,DE
-3257773936,3257773951,NL
-3257773952,3257773959,DE
-3257773960,3257774007,NL
-3257774008,3257774015,DE
-3257774016,3257774055,NL
-3257774056,3257774063,DE
-3257774064,3257774263,NL
-3257774264,3257774279,DE
-3257774280,3257774287,NL
-3257774288,3257774295,DE
-3257774296,3257774335,NL
-3257774336,3257774343,DE
-3257774344,3257774359,NL
-3257774360,3257774367,DE
-3257774368,3257774375,NL
-3257774376,3257774383,DE
-3257774384,3257774487,NL
-3257774488,3257774495,DE
-3257774496,3257774527,NL
-3257774528,3257774535,DE
-3257774536,3257774703,NL
-3257774704,3257774711,DE
-3257774712,3257774775,NL
-3257774776,3257774791,DE
-3257774792,3257774871,NL
-3257774872,3257774879,DE
-3257774880,3257774951,NL
-3257774952,3257774959,DE
-3257774960,3257774983,NL
-3257774984,3257774999,DE
-3257775000,3257775015,NL
-3257775016,3257775023,DE
-3257775024,3257775047,NL
-3257775048,3257775055,DE
-3257775056,3257775063,NL
-3257775064,3257775071,DE
-3257775072,3257775103,NL
-3257775104,3257776639,DE
-3257776640,3257776663,NL
-3257776664,3257776671,DE
-3257776672,3257776727,NL
-3257776728,3257776735,DE
-3257776736,3257776767,NL
-3257776768,3257776775,DE
-3257776776,3257776983,NL
-3257776984,3257776991,DE
-3257776992,3257777047,NL
-3257777048,3257777055,DE
-3257777056,3257777111,NL
-3257777112,3257777119,DE
-3257777120,3257777127,NL
-3257777128,3257777135,DE
-3257777136,3257777151,NL
-3257777152,3257777159,DE
-3257777160,3257777175,NL
-3257777176,3257777183,DE
-3257777184,3257777223,NL
-3257777224,3257777239,DE
-3257777240,3257777279,NL
-3257777280,3257777287,DE
-3257777288,3257777303,NL
-3257777304,3257777311,DE
-3257777312,3257777335,NL
-3257777336,3257777343,DE
-3257777344,3257777487,NL
-3257777488,3257777495,DE
-3257777496,3257777551,NL
-3257777552,3257777567,DE
-3257777568,3257777575,NL
-3257777576,3257777583,DE
-3257777584,3257777751,NL
-3257777752,3257777767,DE
-3257777768,3257777783,NL
-3257777784,3257777791,DE
-3257777792,3257777799,NL
-3257777800,3257777807,DE
-3257777808,3257777855,NL
-3257777856,3257777863,DE
-3257777864,3257777935,NL
-3257777936,3257777943,DE
-3257777944,3257777975,NL
-3257777976,3257777983,DE
-3257777984,3257777991,NL
-3257777992,3257777999,DE
-3257778000,3257778023,NL
-3257778024,3257778031,DE
-3257778032,3257778047,NL
-3257778048,3257778055,DE
-3257778056,3257778071,NL
-3257778072,3257778079,DE
-3257778080,3257778087,NL
-3257778088,3257778103,DE
-3257778104,3257778159,NL
-3257778160,3257778167,DE
-3257778168,3257778439,NL
-3257778440,3257778447,DE
-3257778448,3257778479,NL
-3257778480,3257778487,DE
-3257778488,3257778503,NL
-3257778504,3257778511,DE
-3257778512,3257778543,NL
-3257778544,3257778551,DE
-3257778552,3257778583,NL
-3257778584,3257778591,DE
-3257778592,3257778663,NL
-3257778664,3257778671,DE
-3257778672,3257778727,NL
-3257778728,3257778735,DE
-3257778736,3257778815,NL
-3257778816,3257778823,DE
-3257778824,3257778895,NL
-3257778896,3257778903,DE
-3257778904,3257778943,NL
-3257778944,3257778951,DE
-3257778952,3257778959,NL
-3257778960,3257778975,DE
-3257778976,3257779055,NL
-3257779056,3257779063,DE
-3257779064,3257779079,NL
-3257779080,3257779087,DE
-3257779088,3257779095,NL
-3257779096,3257779103,DE
-3257779104,3257779111,NL
-3257779112,3257779127,DE
-3257779128,3257779199,NL
-3257779200,3257780735,DE
-3257780736,3257780743,NL
-3257780744,3257780751,DE
-3257780752,3257780775,NL
-3257780776,3257780783,DE
-3257780784,3257780967,NL
-3257780968,3257780983,DE
-3257780984,3257780999,NL
-3257781000,3257781007,DE
-3257781008,3257781111,NL
-3257781112,3257781119,DE
-3257781120,3257781135,NL
-3257781136,3257781143,DE
-3257781144,3257781191,NL
-3257781192,3257781199,DE
-3257781200,3257781215,NL
-3257781216,3257781223,DE
-3257781224,3257781255,NL
-3257781256,3257781263,DE
-3257781264,3257781279,NL
-3257781280,3257781287,DE
-3257781288,3257781391,NL
-3257781392,3257781399,DE
-3257781400,3257781431,NL
-3257781432,3257781439,DE
-3257781440,3257781479,NL
-3257781480,3257781487,DE
-3257781488,3257781567,NL
-3257781568,3257781575,DE
-3257781576,3257781591,NL
-3257781592,3257781599,DE
-3257781600,3257781615,NL
-3257781616,3257781623,DE
-3257781624,3257781639,NL
-3257781640,3257781647,DE
-3257781648,3257781711,NL
-3257781712,3257781719,DE
-3257781720,3257781791,NL
-3257781792,3257781799,DE
-3257781800,3257781807,NL
-3257781808,3257781815,DE
-3257781816,3257781839,NL
-3257781840,3257781847,DE
-3257781848,3257781863,NL
-3257781864,3257781871,DE
-3257781872,3257781895,NL
-3257781896,3257781903,DE
-3257781904,3257781919,NL
-3257781920,3257781927,DE
-3257781928,3257781943,NL
-3257781944,3257781951,DE
-3257781952,3257781975,NL
-3257781976,3257781999,DE
-3257782000,3257782015,NL
-3257782016,3257782023,DE
-3257782024,3257782031,NL
-3257782032,3257782047,DE
-3257782048,3257782103,NL
-3257782104,3257782111,DE
-3257782112,3257782191,NL
-3257782192,3257782207,DE
-3257782208,3257782239,NL
-3257782240,3257782255,DE
-3257782256,3257782271,NL
-3257782272,3257784831,DE
-3257784832,3257784855,NL
-3257784856,3257784863,DE
-3257784864,3257784871,NL
-3257784872,3257784879,DE
-3257784880,3257784903,NL
-3257784904,3257784911,DE
-3257784912,3257784959,NL
-3257784960,3257784967,DE
-3257784968,3257785071,NL
-3257785072,3257785079,DE
-3257785080,3257785087,NL
-3257785088,3257785095,DE
-3257785096,3257785151,NL
-3257785152,3257785159,DE
-3257785160,3257785167,NL
-3257785168,3257785175,DE
-3257785176,3257785183,NL
-3257785184,3257785191,DE
-3257785192,3257785199,NL
-3257785200,3257785215,DE
-3257785216,3257785247,NL
-3257785248,3257785255,DE
-3257785256,3257785343,NL
-3257785344,3257785359,DE
-3257785360,3257785375,NL
-3257785376,3257785383,DE
-3257785384,3257785415,NL
-3257785416,3257785431,DE
-3257785432,3257785471,NL
-3257785472,3257785479,DE
-3257785480,3257785623,NL
-3257785624,3257785631,DE
-3257785632,3257785663,NL
-3257785664,3257785695,DE
-3257785696,3257785719,NL
-3257785720,3257785727,DE
-3257785728,3257785735,NL
-3257785736,3257785743,DE
-3257785744,3257785807,NL
-3257785808,3257785823,DE
-3257785824,3257785983,NL
-3257785984,3257785991,DE
-3257785992,3257786079,NL
-3257786080,3257786087,DE
-3257786088,3257786191,NL
-3257786192,3257786199,DE
-3257786200,3257786255,NL
-3257786256,3257786263,DE
-3257786264,3257786271,NL
-3257786272,3257786279,DE
-3257786280,3257786335,NL
-3257786336,3257786343,DE
-3257786344,3257786359,NL
-3257786360,3257786367,DE
-3257786368,3257786383,NL
-3257786384,3257786391,DE
-3257786392,3257786415,NL
-3257786416,3257786423,DE
-3257786424,3257786431,NL
-3257786432,3257786439,DE
-3257786440,3257786559,NL
-3257786560,3257786567,DE
-3257786568,3257786623,NL
-3257786624,3257786631,DE
-3257786632,3257786647,NL
-3257786648,3257786655,DE
-3257786656,3257786703,NL
-3257786704,3257786711,DE
-3257786712,3257786719,NL
-3257786720,3257786727,DE
-3257786728,3257786807,NL
-3257786808,3257786823,DE
-3257786824,3257786839,NL
-3257786840,3257786847,DE
-3257786848,3257786863,NL
-3257786864,3257787391,DE
-3257787392,3257787503,NL
-3257787504,3257787511,DE
-3257787512,3257787695,NL
-3257787696,3257787703,DE
-3257787704,3257787727,NL
-3257787728,3257787735,DE
-3257787736,3257787751,NL
-3257787752,3257787759,DE
-3257787760,3257787879,NL
-3257787880,3257787887,DE
-3257787888,3257787895,NL
-3257787896,3257787903,DE
-3257787904,3257787911,NL
-3257787912,3257787919,DE
-3257787920,3257787967,NL
-3257787968,3257787975,DE
-3257787976,3257787999,NL
-3257788000,3257788015,DE
-3257788016,3257788071,NL
-3257788072,3257788079,DE
-3257788080,3257788095,NL
-3257788096,3257788103,DE
-3257788104,3257788119,NL
-3257788120,3257788127,DE
-3257788128,3257788175,NL
-3257788176,3257788183,DE
-3257788184,3257788231,NL
-3257788232,3257788239,DE
-3257788240,3257788247,NL
-3257788248,3257788255,DE
-3257788256,3257788303,NL
-3257788304,3257788311,DE
-3257788312,3257788415,NL
-3257788416,3257789951,DE
-3257789952,3257789975,NL
-3257789976,3257789983,DE
-3257789984,3257789999,NL
-3257790000,3257790007,DE
-3257790008,3257790039,NL
-3257790040,3257790047,DE
-3257790048,3257790103,NL
-3257790104,3257790111,DE
-3257790112,3257790135,NL
-3257790136,3257790143,DE
-3257790144,3257790159,NL
-3257790160,3257790167,DE
-3257790168,3257790191,NL
-3257790192,3257790199,DE
-3257790200,3257790239,NL
-3257790240,3257790263,DE
-3257790264,3257790319,NL
-3257790320,3257790327,DE
-3257790328,3257790391,NL
-3257790392,3257790407,DE
-3257790408,3257790415,NL
-3257790416,3257790423,DE
-3257790424,3257790479,NL
-3257790480,3257790503,DE
-3257790504,3257790559,NL
-3257790560,3257790567,DE
-3257790568,3257790623,NL
-3257790624,3257790639,DE
-3257790640,3257790663,NL
-3257790664,3257790671,DE
-3257790672,3257790711,NL
-3257790712,3257790719,DE
-3257790720,3257790847,NL
-3257790848,3257790855,DE
-3257790856,3257790879,NL
-3257790880,3257790887,DE
-3257790888,3257790903,NL
-3257790904,3257790919,DE
-3257790920,3257790975,NL
-3257790976,3257790991,DE
-3257790992,3257790999,NL
-3257791000,3257791023,DE
-3257791024,3257791047,NL
-3257791048,3257791055,DE
-3257791056,3257791095,NL
-3257791096,3257791103,DE
-3257791104,3257791151,NL
-3257791152,3257791159,DE
-3257791160,3257791223,NL
-3257791224,3257791231,DE
-3257791232,3257791255,NL
-3257791256,3257791263,DE
-3257791264,3257791271,NL
-3257791272,3257791287,DE
-3257791288,3257791327,NL
-3257791328,3257791343,DE
-3257791344,3257791359,NL
-3257791360,3257791375,DE
-3257791376,3257791503,NL
-3257791504,3257791511,DE
-3257791512,3257791527,NL
-3257791528,3257791535,DE
-3257791536,3257791583,NL
-3257791584,3257791591,DE
-3257791592,3257791615,NL
-3257791616,3257791631,DE
-3257791632,3257791639,NL
-3257791640,3257791647,DE
-3257791648,3257791703,NL
-3257791704,3257791711,DE
-3257791712,3257791727,NL
-3257791728,3257791743,DE
-3257791744,3257791831,NL
-3257791832,3257791839,DE
-3257791840,3257791863,NL
-3257791864,3257791871,DE
-3257791872,3257791879,NL
-3257791880,3257791903,DE
-3257791904,3257791951,NL
-3257791952,3257791959,DE
-3257791960,3257792007,NL
-3257792008,3257792015,DE
-3257792016,3257792095,NL
-3257792096,3257792111,DE
-3257792112,3257792119,NL
-3257792120,3257792135,DE
-3257792136,3257792143,NL
-3257792144,3257792159,DE
-3257792160,3257792167,NL
-3257792168,3257792175,DE
-3257792176,3257792191,NL
-3257792192,3257792199,DE
-3257792200,3257792207,NL
-3257792208,3257792215,DE
-3257792216,3257792383,NL
-3257792384,3257792391,DE
-3257792392,3257792399,NL
-3257792400,3257792407,DE
-3257792408,3257792487,NL
-3257792488,3257792495,DE
-3257792496,3257792503,NL
-3257792504,3257792511,DE
-3257792512,3257792607,NL
-3257792608,3257792615,DE
-3257792616,3257792719,NL
-3257792720,3257792727,DE
-3257792728,3257792783,NL
-3257792784,3257792791,DE
-3257792792,3257792927,NL
-3257792928,3257792935,DE
-3257792936,3257793087,NL
-3257793088,3257793095,DE
-3257793096,3257793119,NL
-3257793120,3257793127,DE
-3257793128,3257793167,NL
-3257793168,3257793175,DE
-3257793176,3257793215,NL
-3257793216,3257793223,DE
-3257793224,3257793231,NL
-3257793232,3257793239,DE
-3257793240,3257793351,NL
-3257793352,3257793359,DE
-3257793360,3257793391,NL
-3257793392,3257793399,DE
-3257793400,3257793415,NL
-3257793416,3257793431,DE
-3257793432,3257793439,NL
-3257793440,3257793447,DE
-3257793448,3257793519,NL
-3257793520,3257793527,DE
-3257793528,3257793551,NL
-3257793552,3257793559,DE
-3257793560,3257793583,NL
-3257793584,3257793591,DE
-3257793592,3257793727,NL
-3257793728,3257793735,DE
-3257793736,3257793839,NL
-3257793840,3257793847,DE
-3257793848,3257793919,NL
-3257793920,3257793927,DE
-3257793928,3257793951,NL
-3257793952,3257793959,DE
-3257793960,3257794079,NL
-3257794080,3257794087,DE
-3257794088,3257794095,NL
-3257794096,3257794103,DE
-3257794104,3257794279,NL
-3257794280,3257794287,DE
-3257794288,3257794327,NL
-3257794328,3257794335,DE
-3257794336,3257794351,NL
-3257794352,3257794359,DE
-3257794360,3257794511,NL
-3257794512,3257794519,DE
-3257794520,3257794559,NL
-3257794560,3257827327,GB
-3257827328,3257827839,IE
-3257827840,3257829375,GB
-3257829376,3257830399,IE
-3257830400,3257835519,GB
-3257835520,3257844223,IE
-3257844224,3257844735,GB
+3257729024,3257730047,DE
+3257730048,3257740799,NL
+3257740800,3257741055,FR
+3257741056,3257742335,NL
+3257742336,3257743359,DE
+3257743360,3257748479,NL
+3257748480,3257749503,DE
+3257749504,3257753087,NL
+3257753088,3257753343,DE
+3257753344,3257765887,NL
+3257765888,3257767935,DE
+3257767936,3257782271,NL
+3257782272,3257784319,DE
+3257784320,3257794559,NL
+3257794560,3257835519,GB
+3257835520,3257843711,IE
+3257843712,3257844735,GB
3257844736,3257860095,IE
3257860096,3257925631,SE
3257925632,3257925887,AT
3257925888,3257926143,SE
-3257926144,3257970431,AT
-3257970432,3257970687,UA
-3257970688,3257977855,AT
+3257926144,3257977855,AT
3257977856,3257978111,GB
3257978112,3257978367,SE
3257978368,3257978623,BG
@@ -118716,24 +62982,25 @@
3257981696,3257981951,PL
3257981952,3257987327,AT
3257987328,3257987583,CZ
-3257987584,3257991167,AT
-3257991168,3258003967,DE
+3257987584,3257988095,AT
+3257989120,3257991167,AT
+3257991168,3257995519,DE
+3257995776,3258003967,DE
3258003968,3258004479,RU
-3258004480,3258021887,DE
+3258004480,3258018815,DE
+3258019328,3258021887,DE
3258021888,3258022911,RU
3258022912,3258023167,PL
3258023168,3258023423,DE
3258023424,3258023679,TR
3258023680,3258023935,RU
3258023936,3258056703,DE
-3258056704,3258056959,UA
-3258056960,3258058239,CZ
+3258057216,3258057727,CZ
3258058240,3258058495,RU
3258058496,3258059007,RO
3258059008,3258059263,UA
3258059264,3258059519,RU
3258059520,3258059775,RO
-3258059776,3258062847,CZ
3258062848,3258063103,RU
3258063104,3258063871,CZ
3258063872,3258064127,AT
@@ -118751,11 +63018,9 @@
3258067968,3258068223,RO
3258068224,3258068479,CH
3258068736,3258068991,DE
-3258068992,3258069247,NL
3258069248,3258069503,PL
3258069504,3258069759,RO
3258069760,3258070015,UA
-3258070016,3258070271,GB
3258070272,3258070527,PL
3258070528,3258071295,GB
3258071296,3258071551,DK
@@ -118769,15 +63034,12 @@
3258074112,3258074879,DE
3258074880,3258075135,IL
3258075136,3258075391,RO
-3258075392,3258075647,BG
-3258075648,3258075903,FR
3258075904,3258076159,PL
3258076160,3258076415,BG
3258076416,3258076927,FR
3258076928,3258077183,UA
3258077184,3258077439,GB
3258077440,3258077695,UA
-3258077696,3258077951,NL
3258077952,3258078207,PL
3258078208,3258078463,TR
3258078464,3258078719,UA
@@ -118787,9 +63049,7 @@
3258079488,3258079743,PL
3258079744,3258079999,GB
3258080000,3258080255,BE
-3258080256,3258080511,FR
3258080512,3258080767,DE
-3258080768,3258081023,GB
3258081024,3258081279,FR
3258081280,3258081535,NL
3258081536,3258081791,BE
@@ -118843,7 +63103,6 @@
3258099456,3258099711,UA
3258099712,3258099967,FI
3258099968,3258100223,UA
-3258100480,3258100735,DK
3258100736,3258100991,CH
3258100992,3258101247,AT
3258101248,3258101503,RO
@@ -118856,11 +63115,10 @@
3258103040,3258103295,SE
3258103296,3258103551,DE
3258103552,3258103807,AE
-3258103808,3258104063,SE
3258104064,3258104319,GB
3258104320,3258104575,PL
3258104576,3258104831,DE
-3258104832,3258105599,CZ
+3258105088,3258105599,CZ
3258105600,3258105855,DE
3258105856,3258109951,CZ
3258109952,3258110207,DK
@@ -118868,28 +63126,22 @@
3258111488,3258111743,PL
3258111744,3258118399,CZ
3258118400,3258118655,UA
-3258118656,3258121215,CZ
+3258118656,3258119679,CZ
+3258120192,3258121215,CZ
3258121216,3258121471,PL
-3258121472,3258121727,AT
3258121728,3258121983,UA
3258121984,3258122239,RU
-3258122240,3258128895,FR
-3258128896,3258129151,MC
-3258129152,3258163967,FR
-3258163968,3258164223,BJ
-3258164224,3258167551,FR
-3258167552,3258167807,ES
-3258167808,3258187775,FR
-3258187776,3258231551,SE
-3258231552,3258232831,NO
-3258232832,3258250495,SE
-3258250496,3258250751,NO
-3258250752,3258251007,SE
-3258251008,3258251775,NO
-3258251776,3258253311,SE
+3258122240,3258187775,FR
+3258187776,3258230783,SE
+3258230784,3258232831,NO
+3258232832,3258249215,SE
+3258249216,3258253311,NO
3258253312,3258272767,NL
3258272768,3258273791,FR
-3258273792,3258297343,NL
+3258273792,3258279935,NL
+3258281984,3258284031,NL
+3258284288,3258290175,NL
+3258294272,3258297343,NL
3258297344,3258297599,BE
3258297600,3258298111,NL
3258298112,3258298367,GB
@@ -118903,7 +63155,7 @@
3258335232,3258336255,RU
3258336256,3258337279,NO
3258337280,3258338303,DE
-3258338304,3258340351,UA
+3258339328,3258340351,UA
3258340352,3258341375,PL
3258341376,3258342399,UA
3258342400,3258343423,DE
@@ -118919,13 +63171,15 @@
3258361856,3258362879,IL
3258362880,3258363903,IM
3258363904,3258364927,RU
-3258364928,3258365951,RS
+3258364928,3258365951,XK
3258365952,3258366975,UA
3258366976,3258367999,PL
3258368000,3258384383,KW
-3258384384,3258427647,DE
+3258384384,3258411007,DE
+3258411520,3258427647,DE
3258427648,3258427903,RO
-3258427904,3258449919,DE
+3258427904,3258428159,DE
+3258428416,3258449919,DE
3258449920,3258503935,CH
3258503936,3258504191,PL
3258504192,3258504703,CH
@@ -118933,13 +63187,10 @@
3258504960,3258505215,IL
3258505216,3258506495,CH
3258506496,3258506751,DE
-3258506752,3258515455,CH
+3258507008,3258515455,CH
3258515456,3258580991,FR
3258580992,3258646527,RU
-3258646528,3258690559,DE
-3258690560,3258690815,EU
-3258690816,3258691583,DE
-3258691584,3258691839,RU
+3258646528,3258691583,DE
3258691840,3258692351,AT
3258692352,3258692607,DE
3258692608,3258692863,FR
@@ -118949,7 +63200,6 @@
3258693632,3258693887,RU
3258693888,3258694143,SI
3258694144,3258694399,RU
-3258694400,3258694655,DE
3258694656,3258694911,GB
3258694912,3258712063,DE
3258712064,3258728447,GB
@@ -118969,9 +63219,10 @@
3258732544,3258732799,SE
3258732800,3258733055,CH
3258733056,3258733311,RO
-3258733312,3258746879,GB
-3258746880,3258748927,DE
-3258748928,3258764287,GB
+3258733312,3258734591,GB
+3258735104,3258735359,GB
+3258736640,3258762751,GB
+3258763264,3258764287,GB
3258764288,3258764543,DE
3258764800,3258765055,BE
3258765056,3258765311,NL
@@ -118983,7 +63234,7 @@
3258771456,3258772479,KZ
3258772480,3258773503,RU
3258773504,3258774015,FR
-3258774016,3258774271,MD
+3258774016,3258774271,UA
3258774272,3258774527,DK
3258774528,3258776063,RU
3258776064,3258776319,GE
@@ -119002,17 +63253,19 @@
3258795008,3258796031,PL
3258796032,3258802175,GB
3258802176,3258806271,LU
-3258806272,3258818047,GB
+3258806272,3258813439,GB
+3258814464,3258818047,GB
3258818048,3258818303,SE
-3258818304,3258843135,GB
+3258818560,3258843135,GB
3258843136,3258843391,RU
-3258843392,3258848767,GB
+3258843392,3258847231,GB
+3258848256,3258848767,GB
3258848768,3258849023,RO
3258849024,3258849279,DE
3258849280,3258859519,GB
3258859520,3258859775,BY
-3258859776,3258902783,GB
-3258902784,3258903039,RU
+3258859776,3258900479,GB
+3258901504,3258902783,GB
3258903040,3258903295,FR
3258903296,3258903551,GB
3258903552,3258903807,DE
@@ -119020,75 +63273,45 @@
3258904064,3258941439,GB
3258941440,3258943487,PL
3258943488,3258944511,BG
-3258944512,3258946559,RU
+3258944512,3258945535,RU
3258946560,3258947583,CH
-3258947584,3258948607,RO
3258948608,3258949631,RU
3258949632,3258972159,GR
3258972160,3258974207,NO
-3258974208,3259006079,DE
-3259006080,3259006111,BE
-3259006112,3259023103,DE
-3259023104,3259023107,ES
-3259023108,3259031895,DE
-3259031896,3259031899,ES
-3259031900,3259032151,DE
-3259032152,3259032159,GB
-3259032160,3259032199,DE
-3259032200,3259032203,ES
-3259032204,3259034319,DE
-3259034320,3259034327,GB
-3259034328,3259035535,DE
-3259035536,3259035551,FR
-3259035552,3259036031,DE
-3259036032,3259036035,ES
-3259036036,3259039743,DE
+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,3259227391,RU
-3259227392,3259227903,KZ
-3259227904,3259228159,DE
-3259228160,3259236351,RU
+3259226112,3259227391,RU
+3259227392,3259227647,KZ
+3259227648,3259236351,RU
3259236352,3259236863,SE
3259236864,3259237119,CH
3259237120,3259237887,SE
3259237888,3259238143,FR
-3259238144,3259243519,SE
+3259238144,3259243007,SE
+3259243008,3259243519,AT
3259243520,3259244543,US
-3259244544,3259248127,SE
+3259244544,3259246591,SE
+3259246592,3259247615,IT
+3259247616,3259248127,SE
3259248128,3259248383,GB
-3259248384,3259250722,SE
-3259250723,3259250723,EU
-3259250724,3259252479,SE
-3259252480,3259252735,EU
-3259252736,3259258623,SE
+3259248384,3259248895,SE
+3259248896,3259249151,GB
+3259249152,3259258623,SE
3259258624,3259258879,ES
3259258880,3259262719,SE
3259262720,3259262975,DK
-3259262976,3259266047,SE
-3259266048,3259266303,SG
-3259266304,3259269375,SE
-3259269376,3259269631,FR
-3259269632,3259276287,SE
+3259262976,3259276287,SE
3259276288,3259276543,ES
-3259276544,3259279615,SE
-3259279616,3259279871,JP
-3259279872,3259280639,SE
+3259276544,3259280639,SE
3259280640,3259280895,US
3259280896,3259281407,SE
3259281408,3259282431,US
-3259282432,3259282687,SE
-3259282688,3259282943,JP
-3259282944,3259283711,SE
+3259282432,3259283711,SE
3259283712,3259283967,US
3259283968,3259284479,SE
3259284480,3259284735,US
@@ -119096,9 +63319,7 @@
3259285760,3259286015,GB
3259286016,3259290879,SE
3259290880,3259291135,US
-3259291136,3259292415,SE
-3259292416,3259292671,IT
-3259292672,3259297535,SE
+3259291136,3259297535,SE
3259297536,3259297791,GB
3259297792,3259301887,SE
3259301888,3259302143,DE
@@ -119106,86 +63327,17 @@
3259302400,3259303423,CH
3259303424,3259305983,SE
3259305984,3259310079,NL
-3259310080,3259310335,FR
-3259310336,3259311103,DK
-3259311104,3259311615,DE
-3259311616,3259312639,EU
-3259312640,3259313151,GB
-3259313152,3259317247,EU
3259317248,3259318271,CH
-3259318272,3259318343,GB
-3259318344,3259318351,FR
-3259318352,3259318599,GB
-3259318600,3259318607,AT
-3259318608,3259318663,GB
-3259318664,3259318671,DK
-3259318672,3259318679,GB
-3259318680,3259318687,IT
-3259318688,3259318727,GB
-3259318728,3259318735,FR
-3259318736,3259319055,GB
-3259319056,3259319071,IT
-3259319072,3259319087,GB
-3259319088,3259319095,SE
-3259319096,3259319103,DK
-3259319104,3259319111,FR
-3259319112,3259319199,GB
-3259319200,3259319215,DE
-3259319216,3259319255,GB
-3259319256,3259319263,DK
-3259319264,3259319287,GB
-3259319288,3259319295,BE
-3259319296,3259319303,GB
-3259319304,3259319311,BE
-3259319312,3259319319,DK
-3259319320,3259319367,GB
-3259319368,3259319375,BE
-3259319376,3259319407,GB
-3259319408,3259319423,LU
-3259319424,3259319439,GB
-3259319440,3259319447,CH
-3259319448,3259319463,GB
-3259319464,3259319471,DK
-3259319472,3259319587,GB
-3259319588,3259319591,NL
-3259319592,3259319663,GB
-3259319664,3259319667,FR
-3259319668,3259319823,GB
-3259319824,3259319831,FR
-3259319832,3259319879,GB
-3259319880,3259319887,BY
-3259319888,3259319987,GB
-3259319988,3259319991,NL
-3259319992,3259320011,GB
-3259320012,3259320015,BE
-3259320016,3259320055,GB
-3259320056,3259320063,AT
-3259320064,3259320575,GB
-3259320576,3259320583,FR
-3259320584,3259334655,GB
+3259318272,3259334655,GB
3259334656,3259338751,DE
3259338752,3259339263,GB
-3259339264,3259339519,EU
-3259339520,3259339775,JP
-3259339776,3259340031,US
-3259340032,3259342847,GB
+3259339520,3259342847,GB
3259342848,3259344895,CH
-3259344896,3259345151,GB
-3259345152,3259345407,IE
-3259345408,3259345663,CH
-3259345664,3259346943,EU
-3259346944,3259347199,SE
-3259347200,3259347455,DE
-3259347456,3259347967,CH
-3259347968,3259348223,SE
-3259348224,3259348991,CH
3259348992,3259351039,NL
3259351040,3259351551,IT
3259351552,3259352063,FR
3259352064,3259352575,CH
3259352576,3259353087,IE
-3259353088,3259353855,NO
-3259353856,3259354111,GB
3259354112,3259354367,NL
3259354368,3259354623,DE
3259354880,3259355135,PL
@@ -119196,132 +63348,32 @@
3259435264,3259435519,IT
3259435520,3259438079,SE
3259438080,3259438335,ES
-3259438336,3259438591,SE
-3259438592,3259439103,NO
-3259439104,3259454719,SE
-3259454720,3259454975,EU
-3259454976,3259457279,SE
+3259438336,3259457279,SE
3259457280,3259457535,IT
-3259457536,3259460351,SE
-3259460352,3259460607,DE
-3259460608,3259465215,SE
-3259465216,3259465471,KH
-3259465472,3259470847,SE
+3259457536,3259470847,SE
3259470848,3259471871,US
-3259471872,3259479551,SE
-3259479552,3259479807,IT
+3259471872,3259479807,SE
3259479808,3259480063,DK
3259480064,3259480831,SE
3259480832,3259481087,ES
-3259481088,3259484671,SE
-3259484672,3259485183,ES
-3259485184,3259495935,SE
-3259495936,3259496447,DK
-3259496448,3259498495,SE
-3259498496,3259506943,GB
-3259506944,3259507199,ES
-3259507200,3259507711,GB
-3259507712,3259507967,CH
-3259507968,3259508223,GB
-3259508224,3259508479,ES
-3259508480,3259511807,GB
-3259511808,3259512063,IM
-3259512064,3259515647,GB
-3259515648,3259515903,ES
-3259515904,3259518207,GB
-3259518208,3259518463,ES
-3259518464,3259518719,GB
-3259518720,3259518975,ES
-3259518976,3259521023,GB
-3259521024,3259521535,NL
-3259521536,3259541503,GB
+3259481088,3259490303,SE
+3259490304,3259490815,IN
+3259490816,3259498495,SE
+3259498496,3259541503,GB
3259541504,3259543551,NL
-3259543552,3259545599,GB
-3259545600,3259546111,LB
-3259546112,3259555839,GB
-3259555840,3259556095,ES
-3259556096,3259562495,GB
-3259562496,3259562751,ES
-3259562752,3259576799,GB
-3259576800,3259576831,ES
-3259576832,3259581439,GB
-3259581440,3259581951,ES
-3259581952,3259587583,GB
-3259587584,3259588095,ES
-3259588096,3259588607,IT
-3259588608,3259596799,GB
-3259596800,3259597055,ES
-3259597056,3259599359,GB
-3259599360,3259599615,FR
-3259599616,3259600639,GB
-3259600640,3259600895,IM
-3259600896,3259601151,GB
-3259601152,3259601407,IE
-3259601408,3259614463,GB
-3259614464,3259614719,DE
-3259614720,3259614975,GB
-3259614976,3259615231,DE
-3259615232,3259615743,GB
-3259615744,3259615999,FR
-3259616000,3259620095,GB
-3259620096,3259620351,DE
-3259620352,3259628031,GB
-3259628032,3259628543,CH
-3259628544,3259630335,GB
-3259630336,3259630591,ES
-3259630592,3259632127,GB
-3259632128,3259632383,IM
-3259632384,3259633407,GB
-3259633408,3259633663,DE
-3259633664,3259635711,GB
-3259635712,3259635967,ES
-3259635968,3259637759,GB
-3259637760,3259638015,ES
-3259638016,3259638783,GB
-3259638784,3259639039,BE
-3259639040,3259639551,GB
-3259639552,3259639807,DE
-3259639808,3259640319,GB
-3259640320,3259640575,ES
-3259640576,3259640831,GB
-3259640832,3259641343,ES
-3259641344,3259642367,GB
-3259642368,3259642623,BE
-3259642624,3259650047,GB
-3259650048,3259650559,NL
-3259650560,3259650815,GB
-3259650816,3259652095,NL
-3259652096,3259656959,GB
-3259656960,3259657215,BE
-3259657216,3259657727,GB
-3259657728,3259657887,BE
-3259657888,3259657919,GB
-3259657920,3259657983,BE
-3259657984,3259660543,GB
-3259660544,3259660799,CH
-3259660800,3259695871,GB
-3259695872,3259695903,ES
-3259695904,3259696639,GB
-3259696640,3259696895,ES
-3259696896,3259701759,GB
-3259701760,3259702303,DE
-3259702304,3259752191,GB
-3259752192,3259752447,FR
-3259752448,3259760639,GB
+3259543552,3259760639,GB
3259760640,3259814399,DE
3259814400,3259814655,AT
-3259814656,3259821823,DE
+3259814656,3259816447,DE
+3259816704,3259821823,DE
3259821824,3259822079,AT
3259822080,3259823103,DE
3259823104,3259823615,RO
3259823616,3259823871,NO
3259823872,3259824127,IE
-3259824128,3259891711,DE
-3259891712,3259893503,BE
-3259893504,3259893759,EU
-3259893760,3259900866,BE
-3259900867,3259900867,EU
-3259900868,3259957247,BE
+3259824128,3259825919,DE
+3259826176,3259891711,DE
+3259891712,3259957247,BE
3259957248,3259958271,DE
3259958272,3259959295,RU
3259959296,3259960319,UA
@@ -119331,10 +63383,8 @@
3259963392,3259964415,PL
3259964416,3259965439,GB
3259965440,3259966463,RU
-3259966464,3259967487,DE
3259967488,3259968511,RS
3259968512,3259969535,RU
-3259969536,3259970559,FR
3259970560,3259971583,CZ
3259971584,3259972607,IT
3259972608,3259973631,UA
@@ -119351,15 +63401,7 @@
3260021760,3260022271,GR
3260022272,3260022783,NL
3260022784,3260284927,GB
-3260284928,3260288767,RU
-3260288768,3260289023,KZ
-3260289024,3260303935,RU
-3260303936,3260304127,BY
-3260304128,3260322047,RU
-3260322048,3260322303,BY
-3260322304,3260353535,RU
-3260353536,3260353791,AZ
-3260353792,3260415487,RU
+3260284928,3260415487,RU
3260415488,3260415999,BY
3260416000,3260481535,FI
3260481536,3260547071,RU
@@ -119369,23 +63411,16 @@
3260547840,3260548095,PL
3260548096,3260548351,IE
3260548352,3260548607,DK
-3260548608,3260548863,RO
-3260548864,3260549119,CH
3260549120,3260549375,AT
3260549376,3260549631,CH
3260549632,3260549887,DE
-3260549888,3260550143,RU
3260550144,3260550399,PL
3260550400,3260550655,DE
3260550656,3260551167,RU
3260551168,3260553983,DE
3260553984,3260554239,GB
3260554240,3260555263,SE
-3260555264,3260559615,HU
-3260559616,3260559647,RO
-3260559648,3260559711,HU
-3260559712,3260559719,RO
-3260559720,3260563455,HU
+3260555264,3260563455,HU
3260563456,3260571647,GB
3260571648,3260579839,BE
3260579840,3260580351,PL
@@ -119417,7 +63452,6 @@
3260602880,3260603903,UA
3260603904,3260604415,FR
3260604416,3260604927,PL
-3260604928,3260605439,RO
3260605440,3260605951,BG
3260605952,3260606463,NL
3260606464,3260607487,SE
@@ -119429,24 +63463,10 @@
3260610048,3260610559,FR
3260610560,3260611071,RO
3260611072,3260611583,BG
-3260611584,3260612095,RU
3260612096,3260612607,SE
-3260612608,3260613631,FI
-3260613632,3260613887,DE
-3260613888,3260614143,DK
-3260614144,3260626175,FI
-3260626176,3260626431,ES
-3260626432,3260668415,FI
-3260668416,3260668671,ES
-3260668672,3260668927,GB
-3260668928,3260669183,FI
-3260669184,3260669695,DE
-3260669696,3260669951,IT
-3260669952,3260678143,FI
+3260612608,3260678143,FI
3260678144,3260743679,IL
-3260743680,3260800255,IT
-3260800256,3260800271,BE
-3260800272,3260809215,IT
+3260743680,3260809215,IT
3260809216,3260874751,PL
3260874752,3260893439,DK
3260893440,3260894207,SE
@@ -119469,71 +63489,44 @@
3261071360,3261136895,AT
3261136896,3261150143,DE
3261150144,3261150207,US
-3261150208,3261170687,DE
-3261170688,3261170943,CH
-3261170944,3261173987,DE
-3261173988,3261173991,AT
-3261173992,3261174007,DE
-3261174008,3261174015,AT
-3261174016,3261177599,DE
-3261177600,3261177607,AT
-3261177608,3261202431,DE
-3261202432,3261205503,FR
-3261205504,3261205759,EU
-3261205760,3261212671,FR
-3261212672,3261212927,EU
-3261212928,3261213202,FR
-3261213203,3261213203,EU
-3261213204,3261213439,FR
+3261150208,3261202431,DE
+3261202432,3261213439,FR
3261213440,3261213695,AF
-3261213696,3261225503,FR
-3261225504,3261225511,GB
-3261225512,3261239237,FR
-3261239238,3261239238,EU
-3261239239,3261267967,FR
-3261267968,3261280512,DE
-3261280513,3261280513,EU
-3261280514,3261297663,DE
+3261213696,3261267967,FR
+3261267968,3261297663,DE
3261297664,3261297919,RU
3261297920,3261298175,PL
3261298176,3261333503,DE
3261333504,3261399039,FI
3261399040,3261472767,GB
-3261472768,3261503487,RO
-3261503488,3261503935,MD
-3261503936,3261530111,RO
+3261472768,3261530111,RO
3261530112,3261531903,SE
3261531904,3261532159,GB
-3261532160,3261532671,SE
-3261532672,3261532927,US
-3261532928,3261533439,SE
-3261533440,3261533695,US
-3261533696,3261539327,SE
+3261532160,3261534207,SE
+3261534208,3261534463,NL
+3261534464,3261534719,SE
+3261534720,3261534975,US
+3261534976,3261539327,SE
3261539328,3261540351,SG
-3261540352,3261570303,SE
-3261570304,3261570559,IT
-3261570560,3261583103,SE
-3261583104,3261583359,DK
-3261583360,3261584127,SE
-3261584128,3261584383,ES
-3261584384,3261595647,SE
-3261595648,3261661183,NL
+3261540352,3261595647,SE
+3261595648,3261599743,NL
+3261600768,3261627903,NL
+3261628160,3261632511,NL
+3261633536,3261636095,NL
+3261636352,3261643775,NL
+3261644800,3261661183,NL
3261661184,3261669375,RO
3261669376,3261673471,MT
3261673472,3261675519,IT
3261675520,3261675775,LV
3261675776,3261676031,IT
-3261676032,3261676287,GB
-3261676288,3261676543,IT
3261676800,3261677055,IT
3261677056,3261685759,GB
3261685760,3261687807,DE
3261687808,3261689855,RO
-3261689856,3261690351,GB
-3261690352,3261690352,EU
-3261690353,3261690354,SG
-3261690355,3261690355,EU
-3261690356,3261691903,GB
+3261689856,3261690623,GB
+3261690624,3261690879,AU
+3261690880,3261691903,GB
3261691904,3261692997,NL
3261692998,3261692998,US
3261692999,3261694463,NL
@@ -119562,10 +63555,11 @@
3261767680,3261775871,RS
3261775872,3261776383,PL
3261776384,3261777407,RU
-3261777408,3261777663,NL
+3261777408,3261777449,IR
+3261777450,3261777451,NL
+3261777452,3261777663,IR
3261777664,3261777919,GB
3261777920,3261778431,PL
-3261778432,3261778943,RU
3261778944,3261779455,RO
3261779456,3261779967,DE
3261779968,3261780479,UA
@@ -119574,7 +63568,9 @@
3261781504,3261782015,PL
3261782016,3261783039,UA
3261783040,3261784063,GB
-3261784064,3261796351,AT
+3261784064,3261787647,AT
+3261787648,3261788159,FR
+3261788160,3261796351,AT
3261796352,3261796607,GB
3261796608,3261796863,RU
3261796864,3261797119,PL
@@ -119600,10 +63596,11 @@
3261823232,3261823487,NL
3261823488,3261823743,RO
3261823744,3261823999,BE
-3261824000,3261824511,RU
+3261824000,3261824255,RU
3261824512,3261824767,FR
3261824768,3261825023,PT
-3261825024,3261857791,AT
+3261825024,3261837311,AT
+3261839360,3261855743,AT
3261857792,3261923327,CZ
3261923328,3261988863,NL
3261988864,3261989119,SE
@@ -119614,9 +63611,7 @@
3261993728,3261995263,FI
3261995264,3261995519,DE
3261995520,3261995775,PL
-3261995776,3261996031,FI
-3261996032,3261996287,NL
-3261996288,3262005247,FI
+3261995776,3262005247,FI
3262005248,3262005759,PL
3262005760,3262006015,RU
3262006016,3262006271,NL
@@ -119625,39 +63620,38 @@
3262006784,3262007039,SE
3262007040,3262007295,IT
3262007552,3262007807,GR
-3262007808,3262008063,RO
3262008064,3262008319,GB
3262008320,3262008575,PT
3262008576,3262008831,PL
3262008832,3262009087,AT
3262009088,3262009343,UA
-3262009344,3262013439,FI
+3262009344,3262013183,FI
3262013440,3262017535,SE
3262017536,3262018559,FI
3262018560,3262018815,PL
-3262018816,3262021119,FI
+3262018816,3262019071,FI
+3262019328,3262021119,FI
3262021120,3262021375,UA
3262021376,3262021631,PL
3262021632,3262021887,CH
3262021888,3262022143,UA
3262022144,3262022911,FI
3262022912,3262023167,DE
-3262023168,3262023679,FI
3262023680,3262023935,DK
-3262023936,3262027263,FI
+3262023936,3262026239,FI
3262027264,3262027519,TR
3262027520,3262027775,BE
3262027776,3262028287,RU
3262028288,3262028543,FR
3262028544,3262028799,AE
3262028800,3262029823,DE
-3262029824,3262030847,US
+3262029824,3262030847,NL
3262030848,3262031871,FR
3262031872,3262033919,FI
3262033920,3262038015,AX
3262038016,3262038271,FR
3262038272,3262038527,RU
-3262038528,3262038783,GB
+3262038528,3262038783,IL
3262038784,3262039039,NO
3262039040,3262039295,DE
3262039296,3262039551,GB
@@ -119670,7 +63664,6 @@
3262041600,3262041855,DK
3262041856,3262042367,FR
3262042368,3262042623,GB
-3262042624,3262042879,UA
3262042880,3262043135,NL
3262043136,3262043391,RO
3262043392,3262043647,TR
@@ -119692,7 +63685,6 @@
3262050816,3262051071,CH
3262051072,3262051583,GB
3262051584,3262051839,FR
-3262051840,3262052351,DE
3262052352,3262052607,UA
3262052608,3262052863,IL
3262052864,3262053119,GB
@@ -119700,108 +63692,52 @@
3262053376,3262053631,UA
3262053632,3262053887,RU
3262054144,3262054399,RU
-3262054400,3262096127,FI
-3262096128,3262096383,AX
-3262096384,3262099199,FI
-3262099200,3262099455,NL
-3262099456,3262108671,FI
-3262108672,3262108927,RU
-3262108928,3262114047,FI
-3262114048,3262114303,SE
-3262114304,3262115071,FI
-3262115072,3262115327,RU
-3262115328,3262119935,FI
-3262119936,3262120447,AX
-3262120448,3262120703,FI
-3262120704,3262121599,AX
-3262121600,3262121663,FI
-3262121664,3262122007,AX
-3262122008,3262122015,FI
-3262122016,3262122031,AX
-3262122032,3262122039,FI
-3262122040,3262122047,AX
-3262122048,3262122143,FI
-3262122144,3262122159,AX
-3262122160,3262122167,FI
-3262122168,3262122183,AX
-3262122184,3262122199,FI
-3262122200,3262122207,AX
-3262122208,3262122239,FI
-3262122240,3262122367,AX
-3262122368,3262122431,FI
-3262122432,3262122623,AX
-3262122624,3262122631,FI
-3262122632,3262122655,AX
-3262122656,3262122751,FI
-3262122752,3262123007,AX
-3262123008,3262123263,FI
-3262123264,3262123295,AX
-3262123296,3262123311,FI
-3262123312,3262123327,AX
-3262123328,3262123391,FI
-3262123392,3262123519,AX
-3262123520,3262123527,FI
-3262123528,3262123775,AX
-3262123776,3262124031,FI
+3262054400,3262119935,FI
+3262119936,3262122175,AX
+3262122176,3262122183,SE
+3262122184,3262124031,AX
3262124032,3262128127,DE
3262128128,3262136319,GB
-3262136320,3262137599,EU
3262137600,3262137855,DE
-3262137856,3262139391,EU
3262139392,3262140415,GB
3262140416,3262140671,DE
-3262140672,3262141183,EU
3262141184,3262141439,DE
3262141440,3262142463,ES
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,3262149375,FR
-3262149376,3262149631,EU
+3262149168,3262149375,FR
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
-3262200832,3262224895,DE
+3262185472,3262191615,DE
+3262192128,3262192383,DE
+3262192640,3262196479,DE
+3262196736,3262203903,DE
+3262204928,3262224383,DE
3262224896,3262225151,AT
3262225152,3262227711,DE
3262227712,3262227967,RO
-3262227968,3262283775,DE
+3262227968,3262229247,DE
+3262229248,3262229503,NL
+3262229504,3262283775,DE
3262283776,3262284799,RU
3262284800,3262286847,UA
3262286848,3262287871,SE
@@ -119810,9 +63746,7 @@
3262288384,3262288895,IL
3262288896,3262289919,PL
3262289920,3262316543,SE
-3262316544,3262348799,DE
-3262348800,3262349055,NL
-3262349056,3262382079,DE
+3262316544,3262382079,DE
3262382080,3262414847,IT
3262414848,3262415359,DE
3262415360,3262416895,PL
@@ -119824,7 +63758,6 @@
3262419968,3262420479,FR
3262420480,3262420991,CH
3262420992,3262421503,ES
-3262421504,3262422015,DE
3262422016,3262422527,SE
3262422528,3262423039,AT
3262423040,3262423551,GB
@@ -119835,7 +63768,6 @@
3262425088,3262425343,GR
3262425344,3262425599,RU
3262425600,3262426111,UA
-3262426112,3262426623,DE
3262426624,3262427135,GB
3262427136,3262427647,FR
3262427648,3262428159,DK
@@ -119844,7 +63776,6 @@
3262429184,3262429695,ES
3262429696,3262430207,DE
3262430208,3262430719,EE
-3262430720,3262431231,RO
3262431232,3262431743,PL
3262431744,3262432255,UA
3262432256,3262432767,CH
@@ -119855,8 +63786,6 @@
3262434816,3262435839,DE
3262435840,3262436351,CH
3262436352,3262436863,SE
-3262436864,3262437375,GB
-3262437376,3262437887,RO
3262437888,3262438399,FR
3262438400,3262438911,NL
3262438912,3262439423,DK
@@ -119865,13 +63794,11 @@
3262440960,3262441471,IL
3262441472,3262441983,UA
3262441984,3262442495,DE
-3262442496,3262443007,RO
3262443008,3262443519,UA
3262443520,3262444031,ES
3262444032,3262444543,AT
3262444544,3262445055,UA
3262445056,3262445567,RO
-3262445568,3262446079,PL
3262446592,3262447103,PL
3262447104,3262447615,GB
3262447616,3262460415,PT
@@ -119888,2392 +63815,115 @@
3262461824,3262461951,RO
3262461952,3262463999,IQ
3262464000,3262472191,RU
-3262472192,3262472207,DE
-3262472208,3262472211,FR
-3262472212,3262472215,DE
-3262472216,3262472219,NL
-3262472220,3262472223,AT
-3262472224,3262472231,DE
-3262472232,3262472235,AT
-3262472236,3262472247,DE
-3262472248,3262472251,IT
-3262472252,3262472267,DE
-3262472268,3262472271,AT
-3262472272,3262472275,IT
-3262472276,3262472279,BE
-3262472280,3262472311,DE
-3262472312,3262472315,NL
-3262472316,3262472335,DE
-3262472336,3262472339,US
-3262472340,3262472351,DE
-3262472352,3262472355,NL
-3262472356,3262472359,DE
-3262472360,3262472363,NL
-3262472364,3262472367,GB
-3262472368,3262472371,NL
-3262472372,3262472375,FR
-3262472376,3262472379,GB
-3262472380,3262472387,DE
-3262472388,3262472391,FR
-3262472392,3262472395,GB
-3262472396,3262472399,DE
-3262472400,3262472403,NL
-3262472404,3262472407,DE
-3262472408,3262472411,US
-3262472412,3262472415,DE
-3262472416,3262472419,ES
-3262472420,3262472423,DE
-3262472424,3262472427,BE
-3262472428,3262472431,CH
-3262472432,3262472435,AE
-3262472436,3262472443,DE
-3262472444,3262472447,LU
-3262472448,3262472459,DE
-3262472460,3262472463,CH
-3262472464,3262472479,DE
-3262472480,3262472483,IT
-3262472484,3262472495,DE
-3262472496,3262472499,CH
-3262472500,3262472511,DE
-3262472512,3262472515,CA
-3262472516,3262472519,GB
-3262472520,3262472527,DE
-3262472528,3262472531,CH
-3262472532,3262472539,DE
-3262472540,3262472543,US
-3262472544,3262472547,DE
-3262472548,3262472551,NL
-3262472552,3262472555,HU
-3262472556,3262472563,DE
-3262472564,3262472567,DK
-3262472568,3262472575,DE
-3262472576,3262472579,CA
-3262472580,3262472583,AT
-3262472584,3262472591,US
-3262472592,3262472595,DE
-3262472596,3262472599,CH
-3262472600,3262472603,FR
-3262472604,3262472607,CH
-3262472608,3262472615,US
-3262472616,3262472619,CA
-3262472620,3262472623,TR
-3262472624,3262472631,DE
-3262472632,3262472635,ES
-3262472636,3262472655,DE
-3262472656,3262472659,GB
-3262472660,3262472663,IT
-3262472664,3262472667,ES
-3262472668,3262472675,DE
-3262472676,3262472679,FR
-3262472680,3262472683,CL
-3262472684,3262472691,US
-3262472692,3262472695,DE
-3262472696,3262472699,IT
-3262472700,3262472703,AT
-3262472704,3262472707,US
-3262472708,3262472711,DE
-3262472712,3262472715,US
-3262472716,3262472727,NL
-3262472728,3262472735,DE
+3262472192,3262472735,DE
3262472736,3262472739,IT
-3262472740,3262472743,PT
-3262472744,3262472747,DE
-3262472748,3262472751,GB
-3262472752,3262472763,DE
-3262472764,3262472767,CA
-3262472768,3262472771,DE
-3262472772,3262472775,US
-3262472776,3262472779,DE
-3262472780,3262472783,US
-3262472784,3262472791,DE
-3262472792,3262472795,GB
-3262472796,3262472799,AT
-3262472800,3262472807,DE
-3262472808,3262472811,CH
-3262472812,3262472819,DE
-3262472820,3262472823,CH
-3262472824,3262472827,US
-3262472828,3262472835,DE
-3262472836,3262472839,DK
-3262472840,3262472843,DE
-3262472844,3262472847,AT
-3262472848,3262472851,DE
-3262472852,3262472855,IT
-3262472856,3262472859,FR
-3262472860,3262472863,US
-3262472864,3262472867,FR
-3262472868,3262472871,GB
-3262472872,3262472875,DE
-3262472876,3262472879,FR
-3262472880,3262472883,DE
-3262472884,3262472891,CA
-3262472892,3262472899,DE
-3262472900,3262472903,AT
-3262472904,3262472907,US
-3262472908,3262472911,DE
-3262472912,3262472915,IT
-3262472916,3262472923,DE
-3262472924,3262472927,IT
-3262472928,3262472931,NL
-3262472932,3262472935,LB
-3262472936,3262472939,DE
-3262472940,3262472943,CH
-3262472944,3262472947,PT
-3262472948,3262472951,LU
-3262472952,3262472955,DE
-3262472956,3262472959,CA
-3262472960,3262472963,DE
-3262472964,3262472967,AT
-3262472968,3262472975,DE
-3262472976,3262472979,LU
-3262472980,3262472983,AT
-3262472984,3262472987,PT
-3262472988,3262472991,US
-3262472992,3262472995,DE
-3262472996,3262472999,FR
-3262473000,3262473003,HU
-3262473004,3262473007,DE
-3262473008,3262473011,US
-3262473012,3262473015,DE
-3262473016,3262473019,AR
-3262473020,3262473023,US
-3262473024,3262473027,ES
-3262473028,3262473031,BM
-3262473032,3262473035,DE
-3262473036,3262473039,IT
-3262473040,3262473043,GB
-3262473044,3262473047,US
-3262473048,3262473051,DE
-3262473052,3262473055,AT
-3262473056,3262473075,DE
-3262473076,3262473079,GB
-3262473080,3262473083,DE
-3262473084,3262473087,US
-3262473088,3262473091,NL
-3262473092,3262473099,DE
-3262473100,3262473103,BE
-3262473104,3262473107,DE
-3262473108,3262473115,ES
-3262473116,3262473119,DE
-3262473120,3262473127,FR
-3262473128,3262473135,DE
-3262473136,3262473139,US
-3262473140,3262473143,ES
-3262473144,3262473151,DE
-3262473152,3262473155,FR
-3262473156,3262473159,IT
-3262473160,3262473163,NL
-3262473164,3262473167,CH
-3262473168,3262473171,DE
-3262473172,3262473175,US
-3262473176,3262473195,DE
-3262473196,3262473199,AT
-3262473200,3262473203,ES
-3262473204,3262473207,US
-3262473208,3262473211,DE
-3262473212,3262473215,FR
-3262473216,3262473323,JP
-3262473324,3262473327,KR
-3262473328,3262473471,JP
-3262473472,3262473473,DE
-3262473474,3262473478,US
-3262473479,3262473480,CA
-3262473481,3262473483,US
-3262473484,3262473484,VE
-3262473485,3262473485,US
-3262473486,3262473486,CA
-3262473487,3262473516,US
-3262473517,3262473517,CN
-3262473518,3262473526,US
-3262473527,3262473527,CN
-3262473528,3262473538,US
-3262473539,3262473539,DE
-3262473540,3262473540,US
-3262473541,3262473541,DE
-3262473542,3262473543,US
-3262473544,3262473544,CA
-3262473545,3262473548,US
-3262473549,3262473549,CA
-3262473550,3262473557,US
-3262473558,3262473558,DE
-3262473559,3262473567,US
-3262473568,3262473568,CA
-3262473569,3262473570,US
-3262473571,3262473571,DE
-3262473572,3262473582,US
-3262473583,3262473583,CA
-3262473584,3262473586,US
-3262473587,3262473587,CA
-3262473588,3262473658,US
-3262473659,3262473659,DE
-3262473660,3262473663,US
-3262473664,3262473664,CA
-3262473665,3262473688,US
-3262473689,3262473689,CA
-3262473690,3262473691,AR
-3262473692,3262473692,CA
-3262473693,3262473729,DE
-3262473730,3262473735,US
-3262473736,3262473736,CA
-3262473737,3262473771,US
-3262473772,3262473772,DE
-3262473773,3262473785,US
-3262473786,3262473855,DE
+3262472740,3262473476,DE
+3262473477,3262473477,US
+3262473478,3262473596,DE
+3262473597,3262473597,US
+3262473598,3262473685,DE
+3262473686,3262473686,US
+3262473687,3262473730,DE
+3262473731,3262473731,US
+3262473732,3262473732,DE
+3262473733,3262473733,US
+3262473734,3262473752,DE
+3262473753,3262473753,US
+3262473754,3262473777,DE
+3262473778,3262473778,US
+3262473779,3262473781,DE
+3262473782,3262473782,US
+3262473783,3262473855,DE
3262473856,3262473859,US
-3262473860,3262473903,DE
-3262473904,3262473907,US
-3262473908,3262473931,DE
-3262473932,3262473935,US
-3262473936,3262473963,DE
-3262473964,3262473967,US
-3262473968,3262473971,DE
-3262473972,3262473983,US
-3262473984,3262473985,DE
-3262473986,3262473986,TW
-3262473987,3262473987,IN
-3262473988,3262473988,SG
-3262473989,3262473989,IN
-3262473990,3262473990,SG
-3262473991,3262473991,DE
-3262473992,3262473992,SG
-3262473993,3262473993,IN
-3262473994,3262473995,TW
-3262473996,3262473996,MY
-3262473997,3262473998,ID
-3262473999,3262473999,TW
-3262474000,3262474000,SG
-3262474001,3262474001,TW
-3262474002,3262474002,MY
-3262474003,3262474003,TW
-3262474004,3262474004,SG
-3262474005,3262474005,TW
-3262474006,3262474007,SG
-3262474008,3262474009,TW
-3262474010,3262474010,SG
-3262474011,3262474011,ID
-3262474012,3262474013,SG
-3262474014,3262474014,HK
-3262474015,3262474016,SG
-3262474017,3262474018,MY
-3262474019,3262474026,SG
-3262474027,3262474027,CN
-3262474028,3262474030,SG
-3262474031,3262474031,IN
-3262474032,3262474032,MY
-3262474033,3262474033,SG
-3262474034,3262474034,MY
-3262474035,3262474035,SG
-3262474036,3262474036,MY
-3262474037,3262474037,SG
-3262474038,3262474038,MY
-3262474039,3262474039,TW
-3262474040,3262474041,MY
-3262474042,3262474042,CN
-3262474043,3262474043,SG
+3262473860,3262474043,DE
3262474044,3262474044,GB
-3262474045,3262474048,SG
-3262474049,3262474049,IN
-3262474050,3262474061,SG
-3262474062,3262474063,CN
-3262474064,3262474064,TW
-3262474065,3262474065,IN
-3262474066,3262474066,SG
-3262474067,3262474067,MY
-3262474068,3262474068,SG
-3262474069,3262474069,MY
-3262474070,3262474070,SG
-3262474071,3262474071,TW
-3262474072,3262474072,IN
-3262474073,3262474075,SG
-3262474076,3262474076,MY
-3262474077,3262474077,SG
-3262474078,3262474078,IN
-3262474079,3262474079,MY
-3262474080,3262474083,SG
-3262474084,3262474084,TW
-3262474085,3262474087,SG
-3262474088,3262474088,MY
-3262474089,3262474089,SG
-3262474090,3262474091,MY
-3262474092,3262474094,SG
-3262474095,3262474095,HK
-3262474096,3262474097,SG
-3262474098,3262474098,MY
-3262474099,3262474102,SG
-3262474103,3262474103,MY
-3262474104,3262474104,CN
-3262474105,3262474105,IN
-3262474106,3262474106,MY
-3262474107,3262474107,CN
-3262474108,3262474108,HK
-3262474109,3262474110,MY
-3262474111,3262474111,TH
-3262474112,3262474112,SG
-3262474113,3262474113,PH
-3262474114,3262474114,IN
+3262474045,3262474051,DE
+3262474052,3262474052,SG
+3262474053,3262474060,DE
+3262474061,3262474061,SG
+3262474062,3262474114,DE
3262474115,3262474115,SG
-3262474116,3262474116,TW
-3262474117,3262474117,IN
-3262474118,3262474118,TH
-3262474119,3262474119,TW
-3262474120,3262474120,BN
-3262474121,3262474121,TW
-3262474122,3262474122,SG
-3262474123,3262474125,MY
-3262474126,3262474126,IN
-3262474127,3262474128,SG
-3262474129,3262474130,MY
-3262474131,3262474131,IN
-3262474132,3262474133,MY
-3262474134,3262474134,CN
-3262474135,3262474136,SG
-3262474137,3262474137,TW
-3262474138,3262474139,CN
-3262474140,3262474140,TW
-3262474141,3262474142,SG
-3262474143,3262474143,PH
-3262474144,3262474150,SG
-3262474151,3262474151,MY
-3262474152,3262474152,SG
-3262474153,3262474153,IN
-3262474154,3262474154,SG
-3262474155,3262474155,MY
-3262474156,3262474156,IN
+3262474116,3262474145,DE
+3262474146,3262474146,SG
+3262474147,3262474156,DE
3262474157,3262474157,SG
-3262474158,3262474159,MY
-3262474160,3262474162,SG
-3262474163,3262474163,MY
-3262474164,3262474164,IN
-3262474165,3262474165,CN
-3262474166,3262474166,SG
-3262474167,3262474167,HK
-3262474168,3262474168,TW
-3262474169,3262474169,DE
-3262474170,3262474170,SG
-3262474171,3262474171,MY
-3262474172,3262474172,SG
-3262474173,3262474173,CN
-3262474174,3262474174,TW
-3262474175,3262474175,SG
-3262474176,3262474176,MY
+3262474158,3262474176,DE
3262474177,3262474177,SG
-3262474178,3262474178,TW
-3262474179,3262474179,CN
-3262474180,3262474180,MY
-3262474181,3262474181,SG
-3262474182,3262474182,MY
-3262474183,3262474185,SG
-3262474186,3262474186,MY
-3262474187,3262474187,SG
-3262474188,3262474188,MY
-3262474189,3262474189,SG
-3262474190,3262474190,CN
-3262474191,3262474192,SG
-3262474193,3262474193,PH
-3262474194,3262474194,SG
-3262474195,3262474195,MY
-3262474196,3262474196,IN
-3262474197,3262474198,SG
-3262474199,3262474199,CN
-3262474200,3262474200,MY
-3262474201,3262474201,SG
-3262474202,3262474203,CN
-3262474204,3262474204,IN
+3262474178,3262474183,DE
+3262474184,3262474184,SG
+3262474185,3262474204,DE
3262474205,3262474205,SG
-3262474206,3262474206,IN
-3262474207,3262474207,MY
-3262474208,3262474208,SG
-3262474209,3262474209,MY
-3262474210,3262474210,TW
-3262474211,3262474211,SG
-3262474212,3262474212,MY
-3262474213,3262474213,SG
-3262474214,3262474214,CN
-3262474215,3262474215,IN
-3262474216,3262474216,SG
-3262474217,3262474217,MY
-3262474218,3262474218,SG
-3262474219,3262474219,MY
-3262474220,3262474222,IN
-3262474223,3262474223,SG
-3262474224,3262474224,MY
-3262474225,3262474225,SG
-3262474226,3262474226,MY
-3262474227,3262474227,IN
-3262474228,3262474228,SG
-3262474229,3262474230,IN
-3262474231,3262474231,SG
-3262474232,3262474234,IN
-3262474235,3262474236,MY
-3262474237,3262474238,SG
-3262474239,3262474239,DE
-3262474240,3262474255,AU
-3262474256,3262474259,NZ
-3262474260,3262474263,AU
-3262474264,3262474267,NZ
-3262474268,3262474271,AU
-3262474272,3262474275,NZ
-3262474276,3262474367,AU
-3262474368,3262474371,NZ
-3262474372,3262474395,AU
-3262474396,3262474399,NZ
-3262474400,3262474463,AU
-3262474464,3262474467,NZ
-3262474468,3262474495,AU
-3262474496,3262474631,DE
-3262474632,3262474635,DK
-3262474636,3262474791,DE
-3262474792,3262474815,JP
-3262474816,3262474895,DE
-3262474896,3262475007,JP
-3262475008,3262475009,DE
-3262475010,3262475023,US
-3262475024,3262475024,CO
-3262475025,3262475025,US
-3262475026,3262475027,DE
-3262475028,3262475029,US
-3262475030,3262475033,DE
-3262475034,3262475036,US
-3262475037,3262475037,DE
-3262475038,3262475042,US
-3262475043,3262475043,DE
-3262475044,3262475044,US
-3262475045,3262475045,BR
-3262475046,3262475065,US
-3262475066,3262475068,MX
-3262475069,3262475072,US
-3262475073,3262475075,BR
-3262475076,3262475076,US
-3262475077,3262475077,BR
-3262475078,3262475079,US
-3262475080,3262475080,CA
-3262475081,3262475081,US
-3262475082,3262475082,BR
-3262475083,3262475083,US
-3262475084,3262475084,MX
-3262475085,3262475085,BR
-3262475086,3262475087,US
-3262475088,3262475088,BR
-3262475089,3262475090,US
-3262475091,3262475092,DE
-3262475093,3262475094,BR
-3262475095,3262475095,MX
-3262475096,3262475140,US
-3262475141,3262475141,BR
-3262475142,3262475167,US
-3262475168,3262475168,DE
-3262475169,3262475174,US
-3262475175,3262475175,DE
-3262475176,3262475185,US
-3262475186,3262475186,DE
-3262475187,3262475189,US
-3262475190,3262475190,MX
-3262475191,3262475191,BR
-3262475192,3262475192,MX
-3262475193,3262475201,US
-3262475202,3262475205,BR
-3262475206,3262475209,US
-3262475210,3262475210,BR
-3262475211,3262475213,US
-3262475214,3262475214,DE
-3262475215,3262475222,US
-3262475223,3262475263,DE
-3262475264,3262475267,MU
-3262475268,3262475271,US
-3262475272,3262475275,IT
-3262475276,3262475279,US
-3262475280,3262475283,DE
-3262475284,3262475287,NL
-3262475288,3262475295,DE
-3262475296,3262475303,NL
-3262475304,3262475307,FR
-3262475308,3262475311,AR
-3262475312,3262475315,FR
-3262475316,3262475319,SE
-3262475320,3262475323,DE
-3262475324,3262475327,MX
-3262475328,3262475331,US
-3262475332,3262475335,BR
-3262475336,3262475339,DE
-3262475340,3262475343,FR
-3262475344,3262475347,CH
-3262475348,3262475351,DE
-3262475352,3262475355,ES
-3262475356,3262475359,DE
-3262475360,3262475363,IT
-3262475364,3262475367,DE
-3262475368,3262475371,FR
-3262475372,3262475375,NL
-3262475376,3262475383,DE
-3262475384,3262475387,US
-3262475388,3262475395,AT
-3262475396,3262475399,NL
-3262475400,3262475403,US
-3262475404,3262475407,SE
-3262475408,3262475415,DE
-3262475416,3262475419,CH
-3262475420,3262475423,DE
-3262475424,3262475427,US
-3262475428,3262475431,ES
-3262475432,3262475435,IT
-3262475436,3262475439,GB
-3262475440,3262475443,DE
-3262475444,3262475447,US
-3262475448,3262475451,FR
-3262475452,3262475459,DE
-3262475460,3262475463,FR
-3262475464,3262475479,DE
+3262474206,3262474236,DE
+3262474237,3262474237,SG
+3262474238,3262474347,DE
+3262474348,3262474351,AU
+3262474352,3262474435,DE
+3262474436,3262474439,AU
+3262474440,3262474475,DE
+3262474476,3262474479,AU
+3262474480,3262475057,DE
+3262475058,3262475058,US
+3262475059,3262475109,DE
+3262475110,3262475110,US
+3262475111,3262475205,DE
+3262475206,3262475206,US
+3262475207,3262475479,DE
3262475480,3262475483,US
-3262475484,3262475487,IT
-3262475488,3262475491,MX
-3262475492,3262475495,CH
-3262475496,3262475499,NL
-3262475500,3262475503,DE
-3262475504,3262475507,FR
-3262475508,3262475511,DE
-3262475512,3262475515,US
-3262475516,3262475519,DE
-3262475520,3262475527,US
-3262475528,3262475531,DE
-3262475532,3262475559,US
-3262475560,3262475575,DE
-3262475576,3262475591,US
-3262475592,3262475595,BR
-3262475596,3262475607,US
-3262475608,3262475611,IE
-3262475612,3262475631,DE
-3262475632,3262475635,US
-3262475636,3262475639,DE
-3262475640,3262475683,US
-3262475684,3262475687,BR
-3262475688,3262475691,DE
-3262475692,3262475695,BR
-3262475696,3262475715,US
-3262475716,3262475719,DE
-3262475720,3262475723,BR
-3262475724,3262475775,US
-3262475776,3262475783,DE
-3262475784,3262475787,BE
-3262475788,3262475791,DE
-3262475792,3262475807,AE
-3262475808,3262475811,US
-3262475812,3262475815,IE
-3262475816,3262475819,FR
-3262475820,3262475823,DE
-3262475824,3262475839,RO
-3262475840,3262475855,DE
-3262475856,3262475871,TR
-3262475872,3262475875,BE
-3262475876,3262475879,NL
-3262475880,3262475883,PL
-3262475884,3262475887,BE
-3262475888,3262475891,DE
-3262475892,3262475895,SA
-3262475896,3262475903,CY
-3262475904,3262475919,GR
-3262475920,3262475935,DE
-3262475936,3262475951,FR
-3262475952,3262475963,US
-3262475964,3262475967,HU
-3262475968,3262475975,DE
-3262475976,3262475983,BG
-3262475984,3262475991,SG
-3262475992,3262476015,DE
-3262476016,3262476019,ES
-3262476020,3262476023,FR
-3262476024,3262476027,DE
-3262476028,3262476031,FR
-3262476032,3262476039,DE
-3262476040,3262476043,CH
-3262476044,3262476047,DE
-3262476048,3262476055,IL
-3262476056,3262476059,PE
-3262476060,3262476063,US
-3262476064,3262476067,DE
-3262476068,3262476071,PL
-3262476072,3262476075,US
-3262476076,3262476079,DE
-3262476080,3262476083,FR
-3262476084,3262476087,DE
-3262476088,3262476091,DK
-3262476092,3262476095,NL
-3262476096,3262476103,US
-3262476104,3262476107,DE
-3262476108,3262476111,BE
-3262476112,3262476115,NL
-3262476116,3262476119,DE
-3262476120,3262476123,FR
-3262476124,3262476127,DE
-3262476128,3262476131,GB
-3262476132,3262476135,AR
-3262476136,3262476139,US
-3262476140,3262476143,BE
-3262476144,3262476147,CH
-3262476148,3262476155,US
-3262476156,3262476159,BE
-3262476160,3262476163,GR
-3262476164,3262476171,DE
-3262476172,3262476175,GB
-3262476176,3262476179,ES
-3262476180,3262476183,DE
-3262476184,3262476187,AT
-3262476188,3262476191,PT
-3262476192,3262476195,DE
-3262476196,3262476199,US
-3262476200,3262476203,GB
-3262476204,3262476207,NA
-3262476208,3262476211,US
-3262476212,3262476215,CL
-3262476216,3262476223,FR
-3262476224,3262476227,GR
-3262476228,3262476231,SE
-3262476232,3262476235,FR
+3262475484,3262475523,DE
+3262475524,3262475527,US
+3262475528,3262475555,DE
+3262475556,3262475559,US
+3262475560,3262476235,DE
3262476236,3262476239,US
-3262476240,3262476243,IT
-3262476244,3262476247,ES
-3262476248,3262476251,NL
-3262476252,3262476255,DE
-3262476256,3262476259,US
-3262476260,3262476267,DE
-3262476268,3262476271,US
-3262476272,3262476275,DE
+3262476240,3262476275,DE
3262476276,3262476279,CA
-3262476280,3262476283,BE
-3262476284,3262476291,DE
-3262476292,3262476295,ZA
-3262476296,3262476299,US
-3262476300,3262476303,DO
-3262476304,3262476307,US
-3262476308,3262476315,DE
-3262476316,3262476319,BE
-3262476320,3262476323,DE
-3262476324,3262476327,IT
-3262476328,3262476331,NL
-3262476332,3262476339,DE
-3262476340,3262476343,ES
-3262476344,3262476351,DE
-3262476352,3262476355,AR
-3262476356,3262476363,US
-3262476364,3262476367,PT
-3262476368,3262476371,US
-3262476372,3262476375,DE
-3262476376,3262476387,US
-3262476388,3262476391,SK
-3262476392,3262476395,DE
-3262476396,3262476399,AT
-3262476400,3262476403,ES
-3262476404,3262476411,DE
-3262476412,3262476415,US
-3262476416,3262476419,DE
-3262476420,3262476423,CH
-3262476424,3262476427,ES
-3262476428,3262476431,US
-3262476432,3262476435,IT
-3262476436,3262476439,AT
-3262476440,3262476443,DE
-3262476444,3262476447,AT
-3262476448,3262476455,DE
-3262476456,3262476459,CA
-3262476460,3262476463,DK
-3262476464,3262476467,SK
-3262476468,3262476471,DE
+3262476280,3262476471,DE
3262476472,3262476475,CA
-3262476476,3262476483,US
-3262476484,3262476487,DE
-3262476488,3262476491,US
-3262476492,3262476495,BE
-3262476496,3262476499,US
-3262476500,3262476503,DE
-3262476504,3262476507,CH
-3262476508,3262476511,DE
-3262476512,3262476515,US
-3262476516,3262476519,DE
-3262476520,3262476523,GB
-3262476524,3262476527,MX
-3262476528,3262476531,DE
-3262476532,3262476535,IL
-3262476536,3262476539,US
-3262476540,3262476543,DE
-3262476544,3262476547,DK
-3262476548,3262476551,AR
-3262476552,3262476555,IT
-3262476556,3262476559,FR
-3262476560,3262476567,DE
-3262476568,3262476571,US
-3262476572,3262476575,DE
-3262476576,3262476587,US
-3262476588,3262476591,ES
+3262476476,3262476591,DE
3262476592,3262476595,GB
-3262476596,3262476603,DE
-3262476604,3262476607,NL
-3262476608,3262476611,SK
-3262476612,3262476615,GB
-3262476616,3262476619,TR
-3262476620,3262476623,NL
-3262476624,3262476627,US
-3262476628,3262476635,DE
-3262476636,3262476639,DK
-3262476640,3262476643,DE
-3262476644,3262476647,ZA
-3262476648,3262476651,US
-3262476652,3262476655,FR
-3262476656,3262476667,US
-3262476668,3262476671,GB
-3262476672,3262476675,SE
-3262476676,3262476679,DE
-3262476680,3262476683,NL
-3262476684,3262476687,IT
-3262476688,3262476691,DE
-3262476692,3262476695,FR
-3262476696,3262476699,ES
-3262476700,3262476707,DE
-3262476708,3262476715,US
-3262476716,3262476719,FR
-3262476720,3262476723,IT
-3262476724,3262476727,FR
-3262476728,3262476731,US
-3262476732,3262476735,DE
-3262476736,3262476739,CA
-3262476740,3262476743,DE
-3262476744,3262476747,CH
-3262476748,3262476751,BE
-3262476752,3262476755,ES
-3262476756,3262476759,DE
-3262476760,3262476763,US
-3262476764,3262476767,ES
-3262476768,3262476771,DE
-3262476772,3262476779,US
-3262476780,3262476783,DE
-3262476784,3262476787,IT
-3262476788,3262476791,US
-3262476792,3262476795,ES
-3262476796,3262476799,DE
-3262476800,3262476803,CA
-3262476804,3262476807,TR
-3262476808,3262476827,DE
-3262476828,3262476831,LU
-3262476832,3262476839,DE
-3262476840,3262476843,IT
-3262476844,3262476847,DE
-3262476848,3262476851,CH
-3262476852,3262476855,US
-3262476856,3262476859,ES
-3262476860,3262476863,DE
-3262476864,3262476867,US
-3262476868,3262476883,DE
-3262476884,3262476887,FR
-3262476888,3262476891,DE
-3262476892,3262476895,HU
-3262476896,3262476899,SK
-3262476900,3262476903,FR
-3262476904,3262476907,DE
-3262476908,3262476911,NL
-3262476912,3262476915,CH
-3262476916,3262476919,DE
-3262476920,3262476923,US
-3262476924,3262476927,AT
-3262476928,3262476935,DE
-3262476936,3262476939,AT
-3262476940,3262476951,DE
-3262476952,3262476955,NL
-3262476956,3262476971,DE
-3262476972,3262476975,US
-3262476976,3262476979,BE
-3262476980,3262476995,DE
-3262476996,3262476999,IT
-3262477000,3262477003,GB
-3262477004,3262477007,DE
-3262477008,3262477011,CA
-3262477012,3262477015,DE
-3262477016,3262477019,CH
-3262477020,3262477023,DE
-3262477024,3262477035,FR
-3262477036,3262477039,DK
-3262477040,3262477043,US
-3262477044,3262477047,GB
-3262477048,3262477059,DE
-3262477060,3262477063,US
-3262477064,3262477067,DE
-3262477068,3262477071,AT
-3262477072,3262477075,PT
-3262477076,3262477083,FR
-3262477084,3262477087,NL
-3262477088,3262477091,DE
-3262477092,3262477095,BE
-3262477096,3262477107,DE
-3262477108,3262477111,ES
-3262477112,3262477131,DE
-3262477132,3262477135,SK
-3262477136,3262477147,DE
-3262477148,3262477151,FR
-3262477152,3262477155,CH
-3262477156,3262477159,ES
-3262477160,3262477163,US
-3262477164,3262477167,FR
-3262477168,3262477171,NL
-3262477172,3262477175,DE
-3262477176,3262477187,US
-3262477188,3262477191,IT
-3262477192,3262477195,GB
-3262477196,3262477199,PL
-3262477200,3262477203,GB
-3262477204,3262477207,US
-3262477208,3262477211,ES
-3262477212,3262477215,AT
-3262477216,3262477219,US
-3262477220,3262477223,KW
-3262477224,3262477227,BE
-3262477228,3262477231,GB
-3262477232,3262477239,DE
-3262477240,3262477243,CA
-3262477244,3262477247,US
-3262477248,3262477251,AR
-3262477252,3262477255,ES
-3262477256,3262477259,DE
-3262477260,3262477263,GB
-3262477264,3262477267,GR
-3262477268,3262477271,NL
-3262477272,3262477275,US
-3262477276,3262477279,NL
-3262477280,3262477283,DE
-3262477284,3262477287,FR
-3262477288,3262477291,BM
-3262477292,3262477295,US
-3262477296,3262477299,DK
-3262477300,3262477303,IT
-3262477304,3262477307,FR
-3262477308,3262477311,DE
+3262476596,3262477311,DE
3262477312,3262477315,ES
-3262477316,3262477319,HU
-3262477320,3262477327,US
-3262477328,3262477331,HU
-3262477332,3262477335,DE
-3262477336,3262477339,CA
-3262477340,3262477343,US
-3262477344,3262477347,CH
-3262477348,3262477355,DE
-3262477356,3262477359,PL
-3262477360,3262477363,LU
-3262477364,3262477367,ES
+3262477316,3262477367,DE
3262477368,3262477371,US
-3262477372,3262477375,FR
-3262477376,3262477379,AT
-3262477380,3262477383,US
-3262477384,3262477387,FR
-3262477388,3262477399,DE
-3262477400,3262477403,CH
-3262477404,3262477407,DE
-3262477408,3262477411,US
-3262477412,3262477415,SA
-3262477416,3262477419,DK
-3262477420,3262477427,DE
-3262477428,3262477431,US
-3262477432,3262477439,DE
-3262477440,3262477443,CH
-3262477444,3262477447,BE
-3262477448,3262477451,AR
-3262477452,3262477455,PT
-3262477456,3262477467,DE
-3262477468,3262477471,AT
-3262477472,3262477475,HU
-3262477476,3262477479,FR
-3262477480,3262477483,SE
-3262477484,3262477487,NL
-3262477488,3262477499,DE
-3262477500,3262477503,ES
-3262477504,3262477507,FR
-3262477508,3262477511,CH
-3262477512,3262477519,US
-3262477520,3262477523,DE
-3262477524,3262477527,IT
-3262477528,3262477543,DE
-3262477544,3262477547,US
-3262477548,3262477551,DE
-3262477552,3262477555,BR
-3262477556,3262477559,US
-3262477560,3262477563,CA
-3262477564,3262477571,BE
-3262477572,3262477575,NL
-3262477576,3262477579,DE
-3262477580,3262477583,NO
-3262477584,3262477587,CA
-3262477588,3262477591,FR
-3262477592,3262477595,GB
-3262477596,3262477599,CH
-3262477600,3262477603,DE
-3262477604,3262477607,IT
-3262477608,3262477611,DE
-3262477612,3262477615,US
-3262477616,3262477619,IT
-3262477620,3262477623,DE
-3262477624,3262477627,FR
-3262477628,3262477631,CH
-3262477632,3262477635,AT
-3262477636,3262477639,VE
-3262477640,3262477643,DE
-3262477644,3262477647,GB
-3262477648,3262477655,DE
-3262477656,3262477659,NL
-3262477660,3262477671,US
-3262477672,3262477675,NL
-3262477676,3262477687,DE
-3262477688,3262477691,FR
-3262477692,3262477695,DE
-3262477696,3262477699,NL
-3262477700,3262477703,FR
-3262477704,3262477707,IT
-3262477708,3262477711,GB
-3262477712,3262477727,DE
-3262477728,3262477731,AT
-3262477732,3262477735,NL
-3262477736,3262477739,BR
-3262477740,3262477743,NL
-3262477744,3262477751,CH
-3262477752,3262477759,DE
-3262477760,3262477763,US
-3262477764,3262477767,VE
-3262477768,3262477771,DE
+3262477372,3262477771,DE
3262477772,3262477775,CA
-3262477776,3262477779,CZ
-3262477780,3262477783,GB
-3262477784,3262477787,DE
-3262477788,3262477791,US
-3262477792,3262477795,GB
-3262477796,3262477799,FR
-3262477800,3262477803,BE
-3262477804,3262477807,CH
-3262477808,3262477811,CA
-3262477812,3262477819,US
-3262477820,3262477823,DE
-3262477824,3262477827,GB
-3262477828,3262477831,US
-3262477832,3262477835,DE
-3262477836,3262477839,ES
-3262477840,3262477843,GB
-3262477844,3262477847,DE
-3262477848,3262477851,GB
-3262477852,3262477855,DE
-3262477856,3262477859,CA
+3262477776,3262477859,DE
3262477860,3262477863,US
-3262477864,3262477867,TR
-3262477868,3262477871,HU
-3262477872,3262477883,DE
-3262477884,3262477891,US
-3262477892,3262477895,IT
-3262477896,3262477899,US
-3262477900,3262477903,DE
-3262477904,3262477907,GB
-3262477908,3262477911,CH
-3262477912,3262477915,US
-3262477916,3262477919,DE
-3262477920,3262477923,US
-3262477924,3262477927,HU
-3262477928,3262477931,DE
-3262477932,3262477935,US
-3262477936,3262477939,DE
-3262477940,3262477943,CA
-3262477944,3262477955,DE
-3262477956,3262477959,US
-3262477960,3262477963,CA
-3262477964,3262477967,DE
-3262477968,3262477971,IT
-3262477972,3262477987,DE
-3262477988,3262477991,NL
-3262477992,3262477999,DE
-3262478000,3262478003,US
-3262478004,3262478007,FR
-3262478008,3262478011,IT
-3262478012,3262478015,PE
-3262478016,3262478019,CH
-3262478020,3262478027,DE
-3262478028,3262478031,SE
-3262478032,3262478035,AT
-3262478036,3262478039,DE
-3262478040,3262478043,NL
-3262478044,3262478047,IS
-3262478048,3262478055,DE
-3262478056,3262478063,CH
-3262478064,3262478067,DE
-3262478068,3262478071,KE
-3262478072,3262478081,DE
-3262478082,3262478082,ES
-3262478083,3262478083,SA
-3262478084,3262478084,TR
-3262478085,3262478085,FR
-3262478086,3262478088,DE
-3262478089,3262478089,AT
-3262478090,3262478090,DE
-3262478091,3262478091,HU
-3262478092,3262478092,PT
-3262478093,3262478093,SA
-3262478094,3262478094,PT
-3262478095,3262478095,DE
-3262478096,3262478096,PL
-3262478097,3262478097,KE
-3262478098,3262478098,TR
-3262478099,3262478099,DE
-3262478100,3262478100,TR
-3262478101,3262478101,ZW
-3262478102,3262478102,TR
-3262478103,3262478103,DE
-3262478104,3262478104,TR
-3262478105,3262478105,PL
-3262478106,3262478106,IT
-3262478107,3262478107,TR
-3262478108,3262478108,DE
-3262478109,3262478109,AE
-3262478110,3262478113,DE
-3262478114,3262478114,TR
-3262478115,3262478115,DE
-3262478116,3262478116,NO
-3262478117,3262478117,NA
-3262478118,3262478118,DE
-3262478119,3262478119,SA
-3262478120,3262478120,NA
-3262478121,3262478121,AO
-3262478122,3262478122,NA
-3262478123,3262478123,CY
-3262478124,3262478124,DE
-3262478125,3262478125,PT
-3262478126,3262478126,CY
-3262478127,3262478127,GR
-3262478128,3262478128,CH
-3262478129,3262478129,HU
-3262478130,3262478130,FR
-3262478131,3262478131,SK
-3262478132,3262478132,ES
-3262478133,3262478133,TR
-3262478134,3262478134,ES
-3262478135,3262478135,TR
-3262478136,3262478137,HU
-3262478138,3262478138,TR
-3262478139,3262478139,DE
-3262478140,3262478140,FR
-3262478141,3262478143,TR
-3262478144,3262478145,DE
-3262478146,3262478146,GR
-3262478147,3262478147,FR
-3262478148,3262478148,KZ
-3262478149,3262478149,UA
-3262478150,3262478151,DE
-3262478152,3262478152,PL
-3262478153,3262478153,TR
-3262478154,3262478154,DE
-3262478155,3262478155,CU
-3262478156,3262478156,TR
-3262478157,3262478157,DE
-3262478158,3262478158,IT
-3262478159,3262478159,IL
-3262478160,3262478160,TR
-3262478161,3262478161,ZW
-3262478162,3262478162,SA
-3262478163,3262478163,FR
-3262478164,3262478164,ZW
-3262478165,3262478165,SK
-3262478166,3262478166,TR
-3262478167,3262478167,KZ
-3262478168,3262478168,ES
-3262478169,3262478169,PL
-3262478170,3262478171,FR
-3262478172,3262478172,GR
-3262478173,3262478174,TR
-3262478175,3262478175,DE
-3262478176,3262478176,TR
-3262478177,3262478177,DE
-3262478178,3262478178,MZ
-3262478179,3262478180,TR
-3262478181,3262478181,CN
-3262478182,3262478182,ES
-3262478183,3262478183,PL
-3262478184,3262478184,MZ
-3262478185,3262478185,PL
-3262478186,3262478186,ES
-3262478187,3262478187,PT
-3262478188,3262478188,TR
-3262478189,3262478189,NA
-3262478190,3262478191,DE
-3262478192,3262478192,ZA
-3262478193,3262478194,NA
-3262478195,3262478211,DE
-3262478212,3262478215,NL
-3262478216,3262478219,FR
-3262478220,3262478223,SE
-3262478224,3262478227,GB
-3262478228,3262478231,ES
-3262478232,3262478235,FR
-3262478236,3262478239,IT
-3262478240,3262478243,FR
-3262478244,3262478247,DE
-3262478248,3262478251,IT
-3262478252,3262478255,CH
-3262478256,3262478259,ES
-3262478260,3262478263,DE
-3262478264,3262478267,IT
-3262478268,3262478271,ES
-3262478272,3262478275,CH
-3262478276,3262478299,DE
-3262478300,3262478303,ES
-3262478304,3262478307,PT
+3262477864,3262478307,DE
3262478308,3262478311,ES
3262478312,3262478319,DE
3262478320,3262478323,GB
-3262478324,3262478327,BE
-3262478328,3262478331,ES
-3262478332,3262478335,GB
-3262478336,3262478337,DE
-3262478338,3262478338,PL
-3262478339,3262478343,DE
-3262478344,3262478344,IT
-3262478345,3262478345,CH
-3262478346,3262478346,PT
-3262478347,3262478347,DE
-3262478348,3262478348,DK
-3262478349,3262478349,BE
-3262478350,3262478350,AT
-3262478351,3262478351,TR
-3262478352,3262478352,CH
-3262478353,3262478353,DK
-3262478354,3262478355,DE
-3262478356,3262478356,FR
-3262478357,3262478358,DE
-3262478359,3262478360,FR
-3262478361,3262478361,DE
-3262478362,3262478362,FR
-3262478363,3262478363,CH
-3262478364,3262478364,PT
-3262478365,3262478366,DE
-3262478367,3262478367,HU
-3262478368,3262478368,DE
-3262478369,3262478369,NO
-3262478370,3262478370,CH
-3262478371,3262478371,DE
-3262478372,3262478373,CH
-3262478374,3262478374,PT
-3262478375,3262478376,FR
-3262478377,3262478377,DE
-3262478378,3262478378,CH
-3262478379,3262478379,DE
-3262478380,3262478381,FR
-3262478382,3262478382,AE
-3262478383,3262478383,DE
-3262478384,3262478384,AE
-3262478385,3262478385,ZA
-3262478386,3262478386,DE
-3262478387,3262478387,IT
-3262478388,3262478388,DE
-3262478389,3262478389,CH
+3262478324,3262478389,DE
3262478390,3262478390,ES
-3262478391,3262478391,HU
-3262478392,3262478393,DE
-3262478394,3262478394,IT
-3262478395,3262478396,DE
-3262478397,3262478397,PT
-3262478398,3262478398,HU
-3262478399,3262478399,DE
-3262478400,3262478400,GB
-3262478401,3262478401,DE
-3262478402,3262478402,IT
-3262478403,3262478403,CZ
-3262478404,3262478404,FI
-3262478405,3262478406,GB
-3262478407,3262478412,DE
-3262478413,3262478413,ES
-3262478414,3262478414,PL
-3262478415,3262478415,SE
-3262478416,3262478416,SA
-3262478417,3262478417,DE
-3262478418,3262478418,AT
-3262478419,3262478419,FR
-3262478420,3262478421,DE
-3262478422,3262478422,CH
-3262478423,3262478423,SA
-3262478424,3262478424,FR
-3262478425,3262478425,IT
-3262478426,3262478426,NO
-3262478427,3262478428,FR
-3262478429,3262478429,PT
-3262478430,3262478430,CH
-3262478431,3262478431,HU
-3262478432,3262478432,RE
-3262478433,3262478433,AT
-3262478434,3262478434,PT
-3262478435,3262478435,IT
-3262478436,3262478437,DE
-3262478438,3262478438,ZA
-3262478439,3262478439,DE
-3262478440,3262478440,SE
-3262478441,3262478441,FR
-3262478442,3262478442,IT
-3262478443,3262478443,DE
-3262478444,3262478444,AT
-3262478445,3262478445,PT
-3262478446,3262478449,DE
-3262478450,3262478450,TR
-3262478451,3262478451,FR
-3262478452,3262478452,IL
-3262478453,3262478453,DE
-3262478454,3262478454,SE
-3262478455,3262478455,IT
-3262478456,3262478456,DE
-3262478457,3262478457,GB
-3262478458,3262478458,HU
-3262478459,3262478459,ES
-3262478460,3262478460,CY
-3262478461,3262478465,DE
-3262478466,3262478466,FR
-3262478467,3262478467,HU
-3262478468,3262478468,DE
-3262478469,3262478469,FR
-3262478470,3262478470,DE
-3262478471,3262478471,ES
-3262478472,3262478472,DE
-3262478473,3262478473,FR
-3262478474,3262478474,HU
-3262478475,3262478476,DE
-3262478477,3262478478,CH
-3262478479,3262478479,DK
-3262478480,3262478480,DE
-3262478481,3262478481,DK
-3262478482,3262478482,IT
-3262478483,3262478483,FR
-3262478484,3262478484,DE
-3262478485,3262478485,CH
-3262478486,3262478487,FR
-3262478488,3262478488,HU
-3262478489,3262478489,HR
-3262478490,3262478490,SE
-3262478491,3262478491,DE
-3262478492,3262478492,CH
-3262478493,3262478493,DE
+3262478391,3262478404,DE
+3262478405,3262478405,GB
+3262478406,3262478493,DE
3262478494,3262478494,FR
-3262478495,3262478495,DE
-3262478496,3262478496,PT
-3262478497,3262478500,DE
-3262478501,3262478501,CH
-3262478502,3262478502,SE
-3262478503,3262478503,ZA
-3262478504,3262478504,FR
-3262478505,3262478505,IT
-3262478506,3262478506,PT
-3262478507,3262478507,IT
-3262478508,3262478508,PT
-3262478509,3262478509,NL
-3262478510,3262478513,DE
-3262478514,3262478514,SE
-3262478515,3262478515,PT
-3262478516,3262478519,DE
-3262478520,3262478520,CH
-3262478521,3262478521,NL
-3262478522,3262478522,DE
-3262478523,3262478523,FR
-3262478524,3262478524,ES
-3262478525,3262478526,DE
-3262478527,3262478527,ES
-3262478528,3262478528,NL
-3262478529,3262478529,ES
-3262478530,3262478530,DE
-3262478531,3262478531,FR
-3262478532,3262478536,DE
-3262478537,3262478537,HU
-3262478538,3262478538,DE
-3262478539,3262478539,FI
-3262478540,3262478540,HU
-3262478541,3262478542,DE
-3262478543,3262478543,AT
-3262478544,3262478544,NL
-3262478545,3262478546,DE
-3262478547,3262478547,FR
-3262478548,3262478548,ES
-3262478549,3262478549,FR
-3262478550,3262478550,DE
-3262478551,3262478551,PL
-3262478552,3262478552,HU
-3262478553,3262478553,PL
-3262478554,3262478554,SE
-3262478555,3262478555,DE
-3262478556,3262478556,GB
-3262478557,3262478557,DE
+3262478495,3262478557,DE
3262478558,3262478558,IT
-3262478559,3262478560,DE
-3262478561,3262478562,FR
-3262478563,3262478563,DK
-3262478564,3262478564,RU
-3262478565,3262478566,FR
-3262478567,3262478567,HU
-3262478568,3262478568,DE
-3262478569,3262478569,TR
-3262478570,3262478570,FR
-3262478571,3262478594,DE
-3262478595,3262478595,CH
-3262478596,3262478596,PT
-3262478597,3262478597,SE
-3262478598,3262478599,DE
-3262478600,3262478600,IT
-3262478601,3262478601,KW
-3262478602,3262478602,FR
-3262478603,3262478604,DE
-3262478605,3262478605,ES
-3262478606,3262478606,FI
-3262478607,3262478607,GR
-3262478608,3262478608,DE
-3262478609,3262478609,IT
-3262478610,3262478610,ES
-3262478611,3262478611,HU
-3262478612,3262478620,DE
-3262478621,3262478621,SE
-3262478622,3262478622,TR
-3262478623,3262478623,ES
-3262478624,3262478624,FR
-3262478625,3262478625,DE
-3262478626,3262478626,HU
-3262478627,3262478627,DE
-3262478628,3262478628,HU
-3262478629,3262478629,DE
-3262478630,3262478630,FR
-3262478631,3262478631,PL
-3262478632,3262478632,CW
-3262478633,3262478633,AT
-3262478634,3262478634,ES
-3262478635,3262478635,SA
-3262478636,3262478636,CH
-3262478637,3262478637,GB
-3262478638,3262478639,DE
-3262478640,3262478640,PT
-3262478641,3262478641,DE
-3262478642,3262478642,CH
-3262478643,3262478643,DE
-3262478644,3262478644,ES
-3262478645,3262478645,DE
-3262478646,3262478646,AT
-3262478647,3262478647,FR
-3262478648,3262478648,PT
-3262478649,3262478649,CZ
-3262478650,3262478650,ES
-3262478651,3262478651,FR
-3262478652,3262478653,ES
-3262478654,3262478655,DE
-3262478656,3262478656,PL
-3262478657,3262478657,DE
-3262478658,3262478658,ES
-3262478659,3262478659,DE
-3262478660,3262478660,SK
-3262478661,3262478661,BE
-3262478662,3262478662,TR
-3262478663,3262478663,AT
-3262478664,3262478664,ES
-3262478665,3262478665,DE
-3262478666,3262478666,AT
-3262478667,3262478667,DE
-3262478668,3262478668,IT
-3262478669,3262478670,DE
-3262478671,3262478671,FR
-3262478672,3262478673,DE
-3262478674,3262478674,SK
-3262478675,3262478675,PL
-3262478676,3262478676,CH
-3262478677,3262478677,HU
-3262478678,3262478678,IT
-3262478679,3262478679,FR
-3262478680,3262478680,GB
-3262478681,3262478681,ES
-3262478682,3262478682,CH
-3262478683,3262478683,IT
-3262478684,3262478684,BE
-3262478685,3262478685,DE
-3262478686,3262478686,FR
-3262478687,3262478687,ES
-3262478688,3262478688,TR
-3262478689,3262478689,GB
-3262478690,3262478690,AT
-3262478691,3262478691,CH
-3262478692,3262478692,PL
-3262478693,3262478693,TR
-3262478694,3262478694,CH
-3262478695,3262478695,DE
-3262478696,3262478696,LI
+3262478559,3262478696,DE
3262478697,3262478697,ES
-3262478698,3262478698,IT
-3262478699,3262478699,ES
-3262478700,3262478700,IT
-3262478701,3262478701,DE
-3262478702,3262478702,CH
-3262478703,3262478703,FR
-3262478704,3262478704,IT
-3262478705,3262478706,PT
-3262478707,3262478707,ES
-3262478708,3262478721,DE
-3262478722,3262478722,FR
-3262478723,3262478724,DE
-3262478725,3262478725,IT
-3262478726,3262478726,FR
-3262478727,3262478727,AT
-3262478728,3262478728,NL
-3262478729,3262478729,SK
-3262478730,3262478730,IT
-3262478731,3262478731,PT
-3262478732,3262478732,PL
-3262478733,3262478733,SK
-3262478734,3262478735,DE
-3262478736,3262478736,HU
-3262478737,3262478737,ES
-3262478738,3262478738,SK
-3262478739,3262478739,SE
-3262478740,3262478740,FR
-3262478741,3262478741,DK
-3262478742,3262478742,CH
-3262478743,3262478743,FR
-3262478744,3262478744,GR
-3262478745,3262478745,IT
-3262478746,3262478746,SE
-3262478747,3262478748,DE
-3262478749,3262478751,FR
-3262478752,3262478752,PT
-3262478753,3262478753,IE
-3262478754,3262478754,DE
-3262478755,3262478755,DK
-3262478756,3262478756,DE
-3262478757,3262478757,AT
-3262478758,3262478758,FR
-3262478759,3262478759,CH
-3262478760,3262478760,TR
-3262478761,3262478761,HU
-3262478762,3262478762,CY
-3262478763,3262478763,ES
-3262478764,3262478764,DE
-3262478765,3262478766,ES
-3262478767,3262478767,PT
-3262478768,3262478768,PL
-3262478769,3262478769,ES
-3262478770,3262478770,IT
-3262478771,3262478771,SK
-3262478772,3262478772,FR
-3262478773,3262478773,CZ
-3262478774,3262478774,DE
-3262478775,3262478775,CH
-3262478776,3262478776,ES
-3262478777,3262478778,IT
-3262478779,3262478779,ES
-3262478780,3262478780,PT
-3262478781,3262478781,PL
-3262478782,3262478782,MA
-3262478783,3262478783,ES
-3262478784,3262478785,TR
-3262478786,3262478786,DE
-3262478787,3262478787,PT
-3262478788,3262478788,NO
-3262478789,3262478789,GR
-3262478790,3262478790,DE
-3262478791,3262478791,GB
-3262478792,3262478792,PT
-3262478793,3262478793,FR
-3262478794,3262478794,PT
-3262478795,3262478795,PL
-3262478796,3262478796,HU
-3262478797,3262478797,CY
-3262478798,3262478798,IT
-3262478799,3262478799,HU
-3262478800,3262478800,PL
-3262478801,3262478801,DE
-3262478802,3262478802,IT
-3262478803,3262478803,ES
-3262478804,3262478804,DE
-3262478805,3262478806,GR
-3262478807,3262478807,CH
-3262478808,3262478808,HU
-3262478809,3262478809,TR
-3262478810,3262478810,CH
-3262478811,3262478811,FR
-3262478812,3262478812,PL
-3262478813,3262478813,LB
-3262478814,3262478851,DE
-3262478852,3262478853,CH
-3262478854,3262478855,DE
-3262478856,3262478856,FR
-3262478857,3262478857,LI
-3262478858,3262478860,DE
-3262478861,3262478861,FR
-3262478862,3262478862,DE
-3262478863,3262478863,AT
-3262478864,3262478864,NL
-3262478865,3262478865,DE
-3262478866,3262478866,CH
-3262478867,3262478867,GB
-3262478868,3262478868,IT
-3262478869,3262478870,FR
-3262478871,3262478872,DE
-3262478873,3262478873,NL
-3262478874,3262478874,AT
-3262478875,3262478875,DE
-3262478876,3262478876,GB
-3262478877,3262478877,DE
-3262478878,3262478878,AT
-3262478879,3262478881,DE
-3262478882,3262478882,GR
-3262478883,3262478886,DE
-3262478887,3262478887,NL
-3262478888,3262478888,DK
-3262478889,3262478890,FR
-3262478891,3262478893,DE
-3262478894,3262478894,AT
-3262478895,3262478895,DE
-3262478896,3262478896,NL
-3262478897,3262478897,FR
-3262478898,3262478898,GB
-3262478899,3262478899,SE
-3262478900,3262478900,GB
-3262478901,3262478901,DE
-3262478902,3262478902,IT
-3262478903,3262478904,DE
-3262478905,3262478905,SE
-3262478906,3262478909,DE
-3262478910,3262478910,DK
-3262478911,3262478911,BH
-3262478912,3262478912,NL
-3262478913,3262478913,FR
-3262478914,3262478914,DE
-3262478915,3262478915,NL
-3262478916,3262478920,DE
-3262478921,3262478921,AT
-3262478922,3262478924,DE
-3262478925,3262478925,NL
-3262478926,3262478926,AT
-3262478927,3262478927,DE
-3262478928,3262478928,DK
-3262478929,3262478929,GB
-3262478930,3262478931,DE
-3262478932,3262478932,CH
-3262478933,3262478935,DE
-3262478936,3262478937,CH
-3262478938,3262478938,NL
-3262478939,3262478939,GB
-3262478940,3262478940,NL
-3262478941,3262478941,DE
-3262478942,3262478942,BE
-3262478943,3262478943,SI
-3262478944,3262478945,DE
-3262478946,3262478946,IE
-3262478947,3262478947,DE
-3262478948,3262478948,IT
-3262478949,3262478949,SE
-3262478950,3262478954,DE
-3262478955,3262478955,FR
-3262478956,3262478956,DE
-3262478957,3262478957,PT
-3262478958,3262478958,SE
-3262478959,3262478961,NL
-3262478962,3262478963,DE
-3262478964,3262478964,CH
-3262478965,3262478966,DE
-3262478967,3262478967,NL
-3262478968,3262478968,ES
-3262478969,3262478969,DE
-3262478970,3262478970,BE
-3262478971,3262478971,DE
-3262478972,3262478972,NO
-3262478973,3262478973,CH
-3262478974,3262478974,GB
-3262478975,3262478980,DE
-3262478981,3262478981,IT
-3262478982,3262478982,DE
-3262478983,3262478983,NL
-3262478984,3262478984,CH
-3262478985,3262478985,PT
-3262478986,3262478986,DE
-3262478987,3262478987,GB
-3262478988,3262478988,IE
-3262478989,3262478989,NL
-3262478990,3262478990,DE
-3262478991,3262478992,FR
-3262478993,3262478993,NL
-3262478994,3262478997,DE
-3262478998,3262478998,GB
+3262478698,3262478998,DE
3262478999,3262478999,AT
3262479000,3262479000,CH
-3262479001,3262479001,AT
-3262479002,3262479002,DE
-3262479003,3262479003,FR
-3262479004,3262479007,DE
-3262479008,3262479008,NL
-3262479009,3262479009,NO
-3262479010,3262479011,NL
-3262479012,3262479012,DE
-3262479013,3262479013,NL
-3262479014,3262479014,DE
-3262479015,3262479015,CH
-3262479016,3262479016,SE
-3262479017,3262479017,DK
-3262479018,3262479018,IT
-3262479019,3262479019,DE
-3262479020,3262479022,CH
-3262479023,3262479024,DE
-3262479025,3262479025,NL
-3262479026,3262479027,DE
-3262479028,3262479028,CH
-3262479029,3262479029,DE
-3262479030,3262479030,ES
-3262479031,3262479031,AT
-3262479032,3262479036,DE
-3262479037,3262479037,AT
-3262479038,3262479038,DK
-3262479039,3262479039,DE
-3262479040,3262479040,NL
-3262479041,3262479041,CH
-3262479042,3262479042,DK
-3262479043,3262479043,FR
-3262479044,3262479044,DE
-3262479045,3262479045,IT
-3262479046,3262479046,DE
-3262479047,3262479047,AT
-3262479048,3262479048,NL
-3262479049,3262479050,DE
-3262479051,3262479051,GB
-3262479052,3262479052,DE
-3262479053,3262479053,NL
-3262479054,3262479056,DE
-3262479057,3262479057,GB
-3262479058,3262479058,FR
-3262479059,3262479059,IT
-3262479060,3262479062,DE
-3262479063,3262479063,CH
-3262479064,3262479064,FR
-3262479065,3262479065,DE
-3262479066,3262479066,IT
-3262479067,3262479067,DE
-3262479068,3262479068,ES
-3262479069,3262479069,FR
-3262479070,3262479070,ES
-3262479071,3262479074,DE
-3262479075,3262479075,CH
-3262479076,3262479076,BE
-3262479077,3262479077,DE
-3262479078,3262479078,IT
-3262479079,3262479079,ES
-3262479080,3262479080,LU
-3262479081,3262479081,CH
-3262479082,3262479082,IT
-3262479083,3262479083,NL
-3262479084,3262479084,CH
-3262479085,3262479085,IT
-3262479086,3262479086,FR
-3262479087,3262479088,DE
-3262479089,3262479089,CH
-3262479090,3262479090,FR
-3262479091,3262479091,DE
-3262479092,3262479092,IT
-3262479093,3262479093,FR
-3262479094,3262479095,GB
-3262479096,3262479096,ES
-3262479097,3262479097,FR
-3262479098,3262479098,GB
-3262479099,3262479099,DE
-3262479100,3262479100,DK
-3262479101,3262479101,CH
-3262479102,3262479102,IT
-3262479103,3262479105,DE
-3262479106,3262479106,ES
-3262479107,3262479107,IT
-3262479108,3262479108,AT
-3262479109,3262479109,FR
-3262479110,3262479110,DE
-3262479111,3262479111,LU
-3262479112,3262479115,DE
-3262479116,3262479116,IT
-3262479117,3262479117,CH
-3262479118,3262479118,GR
-3262479119,3262479120,DE
-3262479121,3262479121,ES
-3262479122,3262479122,FR
-3262479123,3262479123,DE
-3262479124,3262479124,FR
-3262479125,3262479125,IL
-3262479126,3262479130,DE
-3262479131,3262479131,NL
-3262479132,3262479132,AT
-3262479133,3262479133,NL
-3262479134,3262479134,ES
-3262479135,3262479139,DE
-3262479140,3262479140,NL
-3262479141,3262479142,DE
-3262479143,3262479143,GB
-3262479144,3262479144,CH
-3262479145,3262479145,NO
-3262479146,3262479146,DE
-3262479147,3262479147,IT
-3262479148,3262479149,ES
-3262479150,3262479151,DE
-3262479152,3262479152,NL
-3262479153,3262479153,DE
-3262479154,3262479154,FR
-3262479155,3262479155,NL
-3262479156,3262479156,DE
-3262479157,3262479157,ES
-3262479158,3262479158,DE
-3262479159,3262479159,FR
-3262479160,3262479160,DE
-3262479161,3262479161,FR
-3262479162,3262479162,DE
-3262479163,3262479163,FR
-3262479164,3262479164,DE
-3262479165,3262479167,CH
-3262479168,3262479168,DE
-3262479169,3262479169,IT
-3262479170,3262479170,CH
-3262479171,3262479171,ES
-3262479172,3262479174,DE
-3262479175,3262479175,FR
-3262479176,3262479178,DE
-3262479179,3262479179,AT
-3262479180,3262479180,NL
-3262479181,3262479181,DE
-3262479182,3262479182,LU
-3262479183,3262479183,DK
-3262479184,3262479184,CH
+3262479001,3262479184,DE
3262479185,3262479185,IT
-3262479186,3262479186,ES
-3262479187,3262479187,DE
-3262479188,3262479188,CH
-3262479189,3262479189,ES
-3262479190,3262479191,IT
-3262479192,3262479192,FR
-3262479193,3262479193,GB
-3262479194,3262479194,DE
-3262479195,3262479195,BE
-3262479196,3262479196,DE
-3262479197,3262479197,GB
-3262479198,3262479199,DE
-3262479200,3262479200,NL
-3262479201,3262479201,HU
-3262479202,3262479202,FR
-3262479203,3262479208,DE
-3262479209,3262479209,ES
-3262479210,3262479212,DE
-3262479213,3262479213,NO
-3262479214,3262479214,DE
-3262479215,3262479215,IT
-3262479216,3262479219,DE
-3262479220,3262479220,NL
-3262479221,3262479223,DE
-3262479224,3262479224,BE
-3262479225,3262479225,FR
-3262479226,3262479226,DE
-3262479227,3262479227,NL
-3262479228,3262479228,DK
-3262479229,3262479233,DE
-3262479234,3262479234,GB
-3262479235,3262479236,DE
-3262479237,3262479238,NL
-3262479239,3262479239,FR
-3262479240,3262479240,DE
-3262479241,3262479242,FR
-3262479243,3262479243,NL
-3262479244,3262479244,IT
-3262479245,3262479249,DE
-3262479250,3262479250,AT
-3262479251,3262479252,DE
-3262479253,3262479253,NL
-3262479254,3262479254,FR
-3262479255,3262479255,DE
-3262479256,3262479256,IT
-3262479257,3262479257,US
-3262479258,3262479261,DE
-3262479262,3262479262,CH
-3262479263,3262479264,DE
-3262479265,3262479265,CH
-3262479266,3262479266,FR
-3262479267,3262479267,DE
+3262479186,3262479267,DE
3262479268,3262479268,NL
-3262479269,3262479269,DE
-3262479270,3262479271,DK
-3262479272,3262479272,IT
-3262479273,3262479273,DE
-3262479274,3262479274,ES
-3262479275,3262479275,IT
-3262479276,3262479276,DE
-3262479277,3262479277,NL
-3262479278,3262479278,DE
-3262479279,3262479279,ES
-3262479280,3262479280,DE
-3262479281,3262479281,FR
-3262479282,3262479282,DE
-3262479283,3262479283,IT
-3262479284,3262479284,NO
-3262479285,3262479289,DE
-3262479290,3262479290,BE
-3262479291,3262479293,DE
-3262479294,3262479294,FR
-3262479295,3262479295,DE
-3262479296,3262479296,IT
-3262479297,3262479300,DE
-3262479301,3262479301,ES
-3262479302,3262479303,DE
-3262479304,3262479304,AT
-3262479305,3262479307,DE
-3262479308,3262479308,DK
-3262479309,3262479309,SE
-3262479310,3262479312,DE
-3262479313,3262479313,FR
-3262479314,3262479318,DE
-3262479319,3262479319,DK
-3262479320,3262479320,DE
-3262479321,3262479321,GR
-3262479322,3262479323,CH
+3262479269,3262479323,DE
3262479324,3262479324,NL
-3262479325,3262479325,ES
-3262479326,3262479327,DE
-3262479328,3262479328,DK
-3262479329,3262479329,ES
-3262479330,3262479330,NL
-3262479331,3262479332,FR
-3262479333,3262479333,HU
-3262479334,3262479334,NL
-3262479335,3262479335,DE
-3262479336,3262479336,FR
-3262479337,3262479337,ES
-3262479338,3262479338,DE
-3262479339,3262479339,NL
-3262479340,3262479340,CH
-3262479341,3262479341,DE
-3262479342,3262479342,PT
-3262479343,3262479343,NO
-3262479344,3262479344,NL
-3262479345,3262479345,DE
-3262479346,3262479346,DK
-3262479347,3262479347,NO
-3262479348,3262479350,IT
-3262479351,3262479351,DE
-3262479352,3262479352,IT
-3262479353,3262479353,CH
-3262479354,3262479355,DE
-3262479356,3262479356,CH
-3262479357,3262479357,FR
-3262479358,3262479361,DE
-3262479362,3262479362,PT
-3262479363,3262479366,DE
-3262479367,3262479367,CH
-3262479368,3262479368,DE
-3262479369,3262479369,FR
-3262479370,3262479370,CH
-3262479371,3262479371,GB
-3262479372,3262479372,DE
-3262479373,3262479373,IT
-3262479374,3262479374,DE
-3262479375,3262479375,NL
-3262479376,3262479377,FR
-3262479378,3262479378,DE
-3262479379,3262479379,CH
-3262479380,3262479380,AT
-3262479381,3262479381,FR
-3262479382,3262479385,DE
-3262479386,3262479386,NL
-3262479387,3262479387,DK
-3262479388,3262479389,DE
-3262479390,3262479390,DK
-3262479391,3262479391,NO
-3262479392,3262479393,DE
-3262479394,3262479394,FR
-3262479395,3262479395,NL
-3262479396,3262479396,CH
-3262479397,3262479397,IT
-3262479398,3262479399,DE
-3262479400,3262479400,NL
-3262479401,3262479402,DE
-3262479403,3262479403,GB
-3262479404,3262479404,DE
-3262479405,3262479405,IE
-3262479406,3262479406,GB
-3262479407,3262479410,DE
-3262479411,3262479411,ES
-3262479412,3262479413,DE
-3262479414,3262479414,CH
-3262479415,3262479415,DE
-3262479416,3262479416,DK
-3262479417,3262479419,DE
-3262479420,3262479420,ES
-3262479421,3262479421,DE
-3262479422,3262479422,SE
-3262479423,3262479426,DE
-3262479427,3262479427,IT
-3262479428,3262479429,FR
-3262479430,3262479430,GB
-3262479431,3262479433,DE
-3262479434,3262479434,IT
-3262479435,3262479437,DE
-3262479438,3262479438,IT
-3262479439,3262479439,DE
-3262479440,3262479440,AT
-3262479441,3262479441,DK
-3262479442,3262479442,IT
-3262479443,3262479443,GR
-3262479444,3262479444,ES
-3262479445,3262479445,DE
-3262479446,3262479446,IT
-3262479447,3262479448,DE
-3262479449,3262479449,GB
-3262479450,3262479452,DE
-3262479453,3262479453,CH
-3262479454,3262479455,DE
-3262479456,3262479456,IT
-3262479457,3262479462,DE
-3262479463,3262479463,IT
-3262479464,3262479464,NL
-3262479465,3262479465,DE
-3262479466,3262479466,GB
-3262479467,3262479467,CH
-3262479468,3262479469,DE
-3262479470,3262479471,GB
-3262479472,3262479472,DE
-3262479473,3262479473,CH
-3262479474,3262479474,BE
-3262479475,3262479475,CH
-3262479476,3262479476,GB
-3262479477,3262479477,BE
-3262479478,3262479478,IT
-3262479479,3262479480,DE
-3262479481,3262479481,LI
-3262479482,3262479482,IT
-3262479483,3262479483,DE
-3262479484,3262479484,AT
-3262479485,3262479489,DE
-3262479490,3262479490,IT
-3262479491,3262479492,DE
-3262479493,3262479493,CH
-3262479494,3262479494,DE
-3262479495,3262479495,BE
-3262479496,3262479498,DE
-3262479499,3262479499,ES
-3262479500,3262479502,IT
-3262479503,3262479503,DE
-3262479504,3262479504,GB
-3262479505,3262479507,DE
-3262479508,3262479508,HU
-3262479509,3262479509,FR
-3262479510,3262479513,DE
-3262479514,3262479514,FR
-3262479515,3262479515,ES
-3262479516,3262479517,DE
-3262479518,3262479518,GB
-3262479519,3262479519,GR
-3262479520,3262479521,DE
-3262479522,3262479522,CH
-3262479523,3262479526,DE
-3262479527,3262479528,NL
-3262479529,3262479529,DE
-3262479530,3262479530,BE
-3262479531,3262479535,DE
-3262479536,3262479536,GB
-3262479537,3262479538,DE
-3262479539,3262479539,IT
-3262479540,3262479540,DE
-3262479541,3262479541,CH
-3262479542,3262479543,DE
-3262479544,3262479544,IT
-3262479545,3262479545,BE
-3262479546,3262479546,GB
-3262479547,3262479547,AT
-3262479548,3262479548,CH
-3262479549,3262479549,IT
-3262479550,3262479552,DE
-3262479553,3262479553,IL
-3262479554,3262479554,DK
-3262479555,3262479555,FR
-3262479556,3262479556,IE
-3262479557,3262479558,DE
-3262479559,3262479559,SE
-3262479560,3262479560,DE
-3262479561,3262479561,BE
-3262479562,3262479562,GB
-3262479563,3262479563,DE
-3262479564,3262479564,GB
-3262479565,3262479565,SE
-3262479566,3262479566,NL
-3262479567,3262479567,CH
-3262479568,3262479568,NO
-3262479569,3262479573,DE
-3262479574,3262479574,CH
-3262479575,3262479575,DE
-3262479576,3262479576,NL
-3262479577,3262479577,FR
-3262479578,3262479578,DE
-3262479579,3262479579,ZA
-3262479580,3262479580,DE
-3262479581,3262479581,IT
-3262479582,3262479583,DE
-3262479584,3262479584,NL
-3262479585,3262479585,DE
-3262479586,3262479586,GR
-3262479587,3262479588,DE
-3262479589,3262479589,IT
-3262479590,3262479590,GB
-3262479591,3262479591,NL
-3262479592,3262479592,DE
-3262479593,3262479593,FR
-3262479594,3262479594,DE
-3262479595,3262479596,FR
-3262479597,3262479598,DE
-3262479599,3262479600,IT
-3262479601,3262479601,DE
-3262479602,3262479602,GB
-3262479603,3262479604,DE
-3262479605,3262479605,SE
-3262479606,3262479606,FR
-3262479607,3262479607,NL
-3262479608,3262479609,DE
-3262479610,3262479610,SI
-3262479611,3262479611,DE
-3262479612,3262479612,ES
-3262479613,3262479613,NL
-3262479614,3262479617,DE
-3262479618,3262479618,NO
-3262479619,3262479619,ES
-3262479620,3262479620,GB
-3262479621,3262479622,DE
-3262479623,3262479623,CH
-3262479624,3262479624,ES
-3262479625,3262479625,NL
-3262479626,3262479626,AT
-3262479627,3262479628,DE
-3262479629,3262479629,SI
-3262479630,3262479630,NL
-3262479631,3262479631,HU
-3262479632,3262479632,DE
-3262479633,3262479633,LU
-3262479634,3262479634,DE
-3262479635,3262479636,GB
-3262479637,3262479637,ES
-3262479638,3262479638,DE
-3262479639,3262479639,AT
-3262479640,3262479640,FR
-3262479641,3262479641,IT
-3262479642,3262479642,GB
-3262479643,3262479643,DE
-3262479644,3262479644,NL
-3262479645,3262479645,DE
-3262479646,3262479646,GB
-3262479647,3262479647,DE
-3262479648,3262479648,NO
-3262479649,3262479653,DE
-3262479654,3262479654,ES
+3262479325,3262479427,DE
+3262479428,3262479428,FR
+3262479429,3262479654,DE
3262479655,3262479655,NL
-3262479656,3262479656,CH
-3262479657,3262479657,NL
-3262479658,3262479658,DE
-3262479659,3262479659,NL
-3262479660,3262479660,PT
-3262479661,3262479662,FR
-3262479663,3262479664,DE
-3262479665,3262479665,DK
-3262479666,3262479667,DE
-3262479668,3262479668,NL
-3262479669,3262479669,IT
-3262479670,3262479670,DK
-3262479671,3262479671,IT
-3262479672,3262479673,DE
-3262479674,3262479674,BE
-3262479675,3262479676,DE
-3262479677,3262479677,ES
-3262479678,3262479678,IT
-3262479679,3262479679,AT
-3262479680,3262479680,IT
-3262479681,3262479681,DE
-3262479682,3262479682,IT
-3262479683,3262479683,HU
-3262479684,3262479685,DE
-3262479686,3262479687,FR
-3262479688,3262479688,DE
-3262479689,3262479689,NL
-3262479690,3262479690,LU
-3262479691,3262479691,DE
-3262479692,3262479692,LU
-3262479693,3262479693,DE
-3262479694,3262479694,CH
-3262479695,3262479695,ES
-3262479696,3262479696,CH
-3262479697,3262479697,GB
-3262479698,3262479698,FR
-3262479699,3262479699,NL
-3262479700,3262479700,DE
-3262479701,3262479701,NL
-3262479702,3262479702,AT
-3262479703,3262479703,FR
-3262479704,3262479707,DE
-3262479708,3262479708,CH
-3262479709,3262479709,NL
-3262479710,3262479711,DE
-3262479712,3262479712,GB
-3262479713,3262479713,DE
-3262479714,3262479714,AT
-3262479715,3262479715,ES
-3262479716,3262479716,DE
-3262479717,3262479717,BE
-3262479718,3262479720,DE
-3262479721,3262479721,AT
-3262479722,3262479724,DE
-3262479725,3262479725,AT
-3262479726,3262479727,DE
-3262479728,3262479728,BE
-3262479729,3262479730,ES
-3262479731,3262479731,CH
-3262479732,3262479732,IT
-3262479733,3262479734,DE
-3262479735,3262479736,CH
-3262479737,3262479737,DE
-3262479738,3262479738,AT
-3262479739,3262479739,DK
-3262479740,3262479740,DE
-3262479741,3262479741,NL
-3262479742,3262479742,FR
-3262479743,3262479745,DE
-3262479746,3262479746,GB
-3262479747,3262479747,CH
-3262479748,3262479748,DE
-3262479749,3262479749,FR
-3262479750,3262479750,AT
-3262479751,3262479751,DE
+3262479656,3262479751,DE
3262479752,3262479752,CH
-3262479753,3262479753,DE
-3262479754,3262479754,FR
-3262479755,3262479755,NL
-3262479756,3262479756,FR
-3262479757,3262479757,SE
-3262479758,3262479762,DE
-3262479763,3262479763,NO
-3262479764,3262479764,FR
-3262479765,3262479765,DE
-3262479766,3262479766,CH
-3262479767,3262479770,DE
-3262479771,3262479771,IT
-3262479772,3262479775,DE
-3262479776,3262479776,IT
-3262479777,3262479777,BE
-3262479778,3262479778,NL
-3262479779,3262479782,DE
-3262479783,3262479783,GB
-3262479784,3262479784,AT
-3262479785,3262479785,FR
-3262479786,3262479786,CH
-3262479787,3262479788,DE
-3262479789,3262479789,IT
-3262479790,3262479790,DE
-3262479791,3262479792,IT
-3262479793,3262479793,DE
-3262479794,3262479794,FR
-3262479795,3262479795,CH
-3262479796,3262479797,AT
-3262479798,3262479799,GB
-3262479800,3262479808,DE
-3262479809,3262479809,FR
-3262479810,3262479810,NL
-3262479811,3262479811,ES
-3262479812,3262479816,DE
-3262479817,3262479817,HU
-3262479818,3262479818,DE
-3262479819,3262479819,NL
-3262479820,3262479820,DE
-3262479821,3262479822,NL
-3262479823,3262479823,ES
-3262479824,3262479824,GB
-3262479825,3262479825,DE
-3262479826,3262479826,BE
-3262479827,3262479827,DE
-3262479828,3262479829,CH
-3262479830,3262479830,GB
-3262479831,3262479832,DE
-3262479833,3262479833,ES
-3262479834,3262479834,DE
-3262479835,3262479835,AT
-3262479836,3262479836,NL
-3262479837,3262479837,HU
-3262479838,3262479838,CH
-3262479839,3262479839,NL
-3262479840,3262479840,DE
-3262479841,3262479841,FR
-3262479842,3262479842,DK
-3262479843,3262479843,GB
-3262479844,3262479844,DE
-3262479845,3262479845,CH
-3262479846,3262479846,DE
-3262479847,3262479847,LU
-3262479848,3262479852,DE
-3262479853,3262479853,IS
-3262479854,3262479855,DE
-3262479856,3262479856,CH
-3262479857,3262479859,DE
-3262479860,3262479860,NL
-3262479861,3262479861,NO
-3262479862,3262479862,BE
-3262479863,3262479863,NL
-3262479864,3262479864,DE
-3262479865,3262479865,FR
-3262479866,3262479866,DE
-3262479867,3262479867,SE
-3262479868,3262479868,DE
-3262479869,3262479869,GB
-3262479870,3262479871,DE
-3262479872,3262479881,EU
-3262479882,3262479882,DE
-3262479883,3262480127,EU
-3262480128,3262480133,DE
-3262480134,3262480134,AT
-3262480135,3262480135,NL
-3262480136,3262480136,FR
-3262480137,3262480139,DE
-3262480140,3262480140,FR
-3262480141,3262480141,AT
-3262480142,3262480146,DE
-3262480147,3262480147,IT
-3262480148,3262480148,GB
-3262480149,3262480150,DE
-3262480151,3262480151,GB
-3262480152,3262480154,DE
-3262480155,3262480155,ES
-3262480156,3262480158,DE
-3262480159,3262480159,IT
-3262480160,3262480161,DE
-3262480162,3262480162,NO
-3262480163,3262480164,DE
-3262480165,3262480165,FR
-3262480166,3262480172,DE
-3262480173,3262480173,NL
-3262480174,3262480174,DE
-3262480175,3262480175,NL
-3262480176,3262480176,DE
-3262480177,3262480177,CH
-3262480178,3262480178,IT
-3262480179,3262480179,DE
-3262480180,3262480180,FR
-3262480181,3262480181,ES
-3262480182,3262480184,DE
-3262480185,3262480185,FR
-3262480186,3262480186,PT
-3262480187,3262480187,DE
-3262480188,3262480188,FI
-3262480189,3262480189,CH
-3262480190,3262480190,DE
-3262480191,3262480191,NO
-3262480192,3262480193,DE
-3262480194,3262480194,NL
-3262480195,3262480195,GB
-3262480196,3262480197,DE
-3262480198,3262480198,NL
-3262480199,3262480199,GB
-3262480200,3262480201,DE
-3262480202,3262480202,GB
-3262480203,3262480205,DE
-3262480206,3262480206,CH
-3262480207,3262480212,DE
-3262480213,3262480213,FR
-3262480214,3262480215,DE
-3262480216,3262480216,HU
-3262480217,3262480218,DE
-3262480219,3262480219,ES
-3262480220,3262480220,NL
-3262480221,3262480221,BE
-3262480222,3262480226,DE
-3262480227,3262480227,IE
-3262480228,3262480229,DE
-3262480230,3262480230,SE
-3262480231,3262480232,DE
-3262480233,3262480233,SE
-3262480234,3262480234,DE
-3262480235,3262480235,HU
-3262480236,3262480236,DE
-3262480237,3262480237,PL
-3262480238,3262480238,DE
-3262480239,3262480239,NL
-3262480240,3262480243,DE
-3262480244,3262480244,CH
-3262480245,3262480246,DE
-3262480247,3262480247,NL
-3262480248,3262480248,DE
-3262480249,3262480249,NL
-3262480250,3262480250,DE
-3262480251,3262480251,NL
-3262480252,3262480253,DE
-3262480254,3262480254,CH
-3262480255,3262480260,DE
-3262480261,3262480261,BE
-3262480262,3262480264,DE
-3262480265,3262480265,GB
-3262480266,3262480267,DE
-3262480268,3262480268,FR
-3262480269,3262480269,NL
-3262480270,3262480270,DE
-3262480271,3262480271,CH
-3262480272,3262480272,DK
-3262480273,3262480273,DE
-3262480274,3262480274,IT
-3262480275,3262480275,BE
-3262480276,3262480276,ES
-3262480277,3262480277,DE
-3262480278,3262480278,CH
-3262480279,3262480282,DE
+3262479753,3262480282,DE
3262480283,3262480283,GB
-3262480284,3262480293,DE
-3262480294,3262480294,FR
-3262480295,3262480295,CH
-3262480296,3262480296,NO
-3262480297,3262480302,DE
-3262480303,3262480304,IT
-3262480305,3262480305,DE
-3262480306,3262480306,AT
-3262480307,3262480311,DE
-3262480312,3262480312,NL
-3262480313,3262480313,FR
-3262480314,3262480314,NL
-3262480315,3262480315,DE
-3262480316,3262480316,IT
+3262480284,3262480316,DE
3262480317,3262480317,NL
3262480318,3262480318,IT
-3262480319,3262480319,AT
-3262480320,3262480320,DK
-3262480321,3262480321,DE
-3262480322,3262480322,GB
-3262480323,3262480324,DE
-3262480325,3262480325,ES
-3262480326,3262480329,DE
-3262480330,3262480330,FR
-3262480331,3262480331,IT
-3262480332,3262480332,DE
-3262480333,3262480333,CH
-3262480334,3262480334,DE
-3262480335,3262480335,GB
-3262480336,3262480336,DE
-3262480337,3262480337,NL
-3262480338,3262480340,DE
-3262480341,3262480341,CH
-3262480342,3262480342,DE
-3262480343,3262480343,DK
-3262480344,3262480344,DE
-3262480345,3262480345,CH
-3262480346,3262480346,DE
-3262480347,3262480347,NL
-3262480348,3262480348,IS
-3262480349,3262480349,AT
-3262480350,3262480352,DE
-3262480353,3262480353,CH
-3262480354,3262480354,DE
-3262480355,3262480355,GB
-3262480356,3262480356,DE
-3262480357,3262480357,GB
-3262480358,3262480359,CH
-3262480360,3262480365,DE
-3262480366,3262480366,AT
-3262480367,3262480367,DE
-3262480368,3262480368,GB
-3262480369,3262480369,FR
-3262480370,3262480370,ES
-3262480371,3262480371,GB
-3262480372,3262480372,DE
-3262480373,3262480373,AT
-3262480374,3262480374,ES
-3262480375,3262480375,NL
-3262480376,3262480376,DE
-3262480377,3262480378,IT
-3262480379,3262480379,CH
-3262480380,3262480380,GB
-3262480381,3262480381,IT
-3262480382,3262480382,ES
-3262480383,3262480383,DE
+3262480319,3262480383,DE
3262480384,3262488575,GB
3262488576,3262496767,SE
3262496768,3262504959,FR
@@ -122282,12 +63932,11 @@
3262505984,3262506495,PL
3262506496,3262507007,RO
3262507008,3262507519,DK
-3262507520,3262509055,RO
+3262507520,3262508543,RO
3262509056,3262509567,PL
3262509568,3262510079,RO
3262510080,3262511103,FR
3262511104,3262511615,GB
-3262511616,3262512127,DE
3262512128,3262512639,UA
3262512640,3262513151,DE
3262513152,3262578687,AT
@@ -122296,153 +63945,51 @@
3262627840,3262636031,IT
3262636032,3262644223,BE
3262644224,3262648319,NL
-3262648320,3262648575,EU
-3262648576,3262648831,DE
-3262648832,3262649855,NL
-3262649856,3262650623,DE
-3262650624,3262654463,NL
+3262648320,3262648575,DE
+3262648576,3262654463,NL
3262654464,3262654719,DE
-3262654720,3262655231,NL
-3262655232,3262655487,DE
-3262655488,3262658303,NL
-3262658304,3262658559,DE
-3262658560,3262661119,NL
-3262661120,3262661375,DE
-3262661376,3262664703,NL
-3262664704,3262665727,DE
-3262665728,3262665983,EU
-3262665984,3262666751,DE
-3262666752,3262667007,EU
-3262667008,3262671359,DE
-3262671360,3262672127,NL
-3262672128,3262672895,DE
-3262672896,3262673919,NL
-3262673920,3262674175,DE
-3262674176,3262674687,NL
-3262674688,3262674943,DE
-3262674944,3262676479,NL
-3262676480,3262676735,DE
-3262676736,3262678271,NL
-3262678272,3262678527,DE
-3262678528,3262681087,NL
-3262681088,3262681343,DE
-3262681344,3262682623,NL
-3262682624,3262682879,DE
-3262682880,3262685951,NL
-3262685952,3262686463,DE
-3262686464,3262687743,NL
-3262687744,3262688255,DE
-3262688256,3262688511,NL
-3262688512,3262688767,DE
-3262688768,3262690815,NL
+3262654720,3262664703,NL
+3262664704,3262670847,DE
+3262670848,3262690815,NL
3262690816,3262691583,DE
-3262691584,3262692607,NL
-3262692608,3262692863,DE
-3262692864,3262693375,NL
+3262691584,3262693375,NL
3262693376,3262701567,DE
-3262701568,3262703103,NL
-3262703104,3262703615,DE
-3262703616,3262704127,NL
-3262704128,3262704383,DE
-3262704384,3262707807,NL
-3262707808,3262707839,DE
-3262707840,3262707967,NL
-3262707968,3262708223,DE
-3262708224,3262709759,NL
-3262709760,3262710015,DE
-3262710016,3262710271,NL
-3262710272,3262710527,DE
-3262710528,3262712575,NL
-3262712576,3262712831,DE
-3262712832,3262715135,NL
+3262701568,3262715135,NL
3262715136,3262715391,DE
-3262715392,3262716415,NL
-3262716416,3262716671,DE
-3262716672,3262721535,NL
-3262721536,3262721791,DE
-3262721792,3262722047,NL
-3262722048,3262723071,DE
-3262723072,3262724095,NL
-3262724096,3262724351,DE
-3262724352,3262724863,NL
-3262724864,3262725119,DE
-3262725120,3262725631,NL
-3262725632,3262726143,DE
-3262726144,3262726655,NL
-3262726656,3262726911,DE
-3262726912,3262732799,NL
+3262715392,3262722815,NL
+3262722816,3262723071,DE
+3262723072,3262732799,NL
3262732800,3262733055,DE
-3262733056,3262736383,NL
-3262736384,3262736895,DE
-3262736896,3262741247,NL
-3262741248,3262741503,DE
-3262741504,3262753791,NL
+3262733056,3262753791,NL
3262753792,3262754815,DE
-3262754816,3262761727,NL
-3262761728,3262761983,DE
-3262761984,3262766079,NL
-3262766080,3262766087,DE
-3262766088,3262774783,NL
-3262774784,3262775039,DE
-3262775040,3262794815,NL
-3262794816,3262795007,DE
-3262795008,3262796799,NL
-3262796800,3262797055,DE
-3262797056,3262808831,NL
-3262808832,3262809087,DE
-3262809088,3262832639,NL
+3262754816,3262832639,NL
3262832640,3262840319,DE
-3262840320,3262842624,NL
-3262842625,3262842625,DE
-3262842626,3262872063,NL
-3262872064,3262872127,DE
-3262872128,3262872159,NL
-3262872160,3262872191,DE
-3262872192,3262872255,NL
-3262872256,3262872271,DE
-3262872272,3262872275,NL
-3262872276,3262872279,DE
-3262872280,3262872307,NL
-3262872308,3262872308,DE
-3262872309,3262872309,NL
-3262872310,3262872313,DE
-3262872314,3262882815,NL
-3262882816,3262883071,DE
-3262883072,3262906367,NL
+3262840320,3262906367,NL
3262906368,3262964991,CH
3262964992,3262965247,DE
3262965248,3262971903,CH
3262971904,3263029247,IE
3263029248,3263030271,UA
-3263030272,3263031295,GB
3263031296,3263032319,TR
3263032320,3263033343,RU
3263033344,3263033855,LV
3263033856,3263034367,IT
3263034368,3263034879,UA
3263034880,3263035391,GB
-3263035392,3263035903,UA
-3263035904,3263036415,CH
3263036416,3263036927,GR
3263036928,3263037439,RU
3263037440,3263045631,LB
-3263045632,3263046847,KW
-3263046848,3263046911,IQ
-3263046912,3263047935,KW
-3263047936,3263048191,LB
-3263048192,3263053823,KW
+3263045632,3263053823,KW
3263053824,3263062015,GB
3263062016,3263070207,EE
3263070208,3263070719,FR
3263070720,3263070975,NL
3263070976,3263071487,DE
-3263071488,3263072255,NL
3263072256,3263074303,LB
3263074304,3263074815,CH
3263074816,3263075327,RO
3263075328,3263075839,IT
3263075840,3263076351,SE
-3263076352,3263076863,RO
3263077376,3263077887,FR
3263077888,3263078399,DE
3263079424,3263080447,PL
@@ -122458,7 +64005,6 @@
3263088128,3263088383,DE
3263088384,3263088639,LV
3263088640,3263089151,CH
-3263089152,3263089407,RO
3263089408,3263089663,RU
3263089664,3263089919,UA
3263089920,3263090175,RO
@@ -122474,20 +64020,18 @@
3263092736,3263092991,PL
3263092992,3263093247,FR
3263093248,3263093503,CH
-3263093504,3263093759,RU
3263093760,3263094015,RO
3263094016,3263094527,PL
3263094528,3263094783,DK
3263094784,3263095039,UA
3263095040,3263095295,ES
-3263095296,3263095551,EU
+3263095296,3263095551,FR
3263095552,3263095807,RO
3263095808,3263096063,DE
3263096064,3263096319,PL
3263096320,3263096575,TR
3263096576,3263096831,SA
3263096832,3263097087,PL
-3263097088,3263097343,FR
3263097344,3263097599,DK
3263097600,3263097855,NL
3263097856,3263098111,FR
@@ -122498,7 +64042,6 @@
3263099136,3263099391,NL
3263099392,3263099903,DE
3263099904,3263100159,RO
-3263100160,3263100415,FR
3263100416,3263100671,DE
3263100672,3263100927,GB
3263100928,3263101183,AT
@@ -122509,180 +64052,65 @@
3263102208,3263102463,RO
3263102464,3263102719,PL
3263102720,3263102975,GR
-3263102976,3263121407,DE
-3263121408,3263121420,EU
+3263102976,3263104030,DE
+3263104031,3263104031,FR
+3263104032,3263104040,DE
+3263104041,3263104041,GB
+3263104042,3263121420,DE
3263121421,3263121421,BE
-3263121422,3263121663,EU
-3263121664,3263137791,DE
+3263121422,3263131647,DE
+3263132672,3263137791,DE
3263137792,3263138303,PL
3263138304,3263138551,DE
3263138552,3263138815,AT
3263138816,3263168511,DE
3263168512,3263430655,GB
-3263430656,3263433471,SE
-3263433472,3263433727,NO
-3263433728,3263436543,SE
+3263430656,3263436543,SE
3263436544,3263436799,ES
-3263436800,3263437311,GB
-3263437312,3263438591,SE
-3263438592,3263438847,IT
-3263438848,3263439103,CY
-3263439104,3263443199,SE
-3263443200,3263443455,AT
-3263443456,3263443967,NL
-3263443968,3263446271,SE
-3263446272,3263446527,CH
-3263446528,3263447039,DE
-3263447040,3263458047,SE
-3263458048,3263458559,DE
-3263458560,3263458815,SE
-3263458816,3263459327,FR
-3263459328,3263459583,AT
+3263436800,3263458047,SE
+3263458048,3263458303,DE
+3263458304,3263459583,SE
3263459584,3263459839,FR
-3263459840,3263461631,SE
-3263461632,3263461887,AE
-3263461888,3263467519,SE
-3263467520,3263468031,IT
-3263468032,3263469567,SE
+3263459840,3263469567,SE
3263469568,3263470591,SG
-3263470592,3263472127,SE
-3263472128,3263472383,SG
-3263472384,3263475711,SE
+3263470592,3263475711,SE
3263475712,3263476735,JP
-3263476736,3263477759,SE
-3263477760,3263478015,JP
-3263478016,3263478271,AU
-3263478272,3263478527,SE
+3263476736,3263478527,SE
3263478528,3263478783,ES
3263478784,3263480831,SE
3263480832,3263481855,JP
3263481856,3263482879,SE
3263482880,3263483903,IT
3263483904,3263496191,SE
-3263496192,3263497983,EU
-3263497984,3263498239,GB
-3263498240,3263498751,EU
-3263498752,3263498879,US
-3263498880,3263498943,GB
-3263498944,3263498959,EU
-3263498960,3263499007,GB
-3263499008,3263499775,EU
-3263499776,3263500031,FR
-3263500032,3263500287,GB
-3263500288,3263501311,EU
-3263501312,3263501341,GB
-3263501342,3263501343,EU
-3263501344,3263501439,GB
-3263501440,3263501503,US
-3263501504,3263501519,GB
+3263496192,3263501519,GB
3263501520,3263501527,IE
-3263501528,3263501535,GB
-3263501536,3263501551,DE
-3263501552,3263501823,GB
-3263501824,3263503135,EU
-3263503136,3263503167,DE
-3263503168,3263503199,EU
-3263503200,3263503267,DE
-3263503268,3263503271,EU
-3263503272,3263503279,DE
-3263503280,3263503295,EU
-3263503296,3263503359,DE
-3263503360,3263504127,EU
-3263504128,3263504255,EG
-3263504256,3263506687,EU
-3263506688,3263506815,DE
-3263506816,3263506943,US
-3263506944,3263507199,EU
-3263507200,3263507455,US
-3263507456,3263509759,EU
-3263509760,3263509791,GB
-3263509792,3263509807,IE
-3263509808,3263509831,GB
-3263509832,3263509839,FR
-3263509840,3263509847,GB
-3263509848,3263509887,US
-3263509888,3263510023,GB
-3263510024,3263510031,BE
-3263510032,3263510063,GB
-3263510064,3263510079,US
-3263510080,3263510271,GB
-3263510272,3263511295,EU
-3263511296,3263511551,GB
-3263511552,3263512063,EU
-3263512064,3263512319,GB
-3263512320,3263513343,EU
-3263513344,3263513599,US
-3263513600,3263516671,EU
-3263516672,3263516927,US
-3263516928,3263517183,GB
-3263517184,3263517695,EU
-3263517696,3263517951,US
-3263517952,3263518463,GB
-3263518464,3263518719,FR
+3263501528,3263503103,GB
+3263503104,3263503359,DE
+3263503360,3263511551,GB
+3263511552,3263512063,BE
+3263512064,3263512575,GB
+3263512576,3263512831,ES
+3263512832,3263513855,GB
+3263513856,3263514111,RU
+3263514112,3263518719,GB
3263518720,3263518751,IE
-3263518752,3263519743,EU
-3263519744,3263519759,GB
-3263519760,3263520255,EU
-3263520256,3263520511,FR
-3263520512,3263520767,US
-3263520768,3263523071,EU
-3263523072,3263523583,DE
-3263523584,3263525759,EU
-3263525760,3263525887,DE
+3263518752,3263520767,GB
+3263520768,3263525887,DE
3263525888,3263526143,ZA
-3263526144,3263527423,EU
-3263527424,3263527679,ZW
-3263527680,3263527935,DE
-3263527936,3263528191,EU
-3263528192,3263528447,FR
-3263528448,3263530495,EU
-3263530496,3263530751,GB
-3263530752,3263531519,EU
-3263531520,3263531535,DE
-3263531536,3263531551,EU
-3263531552,3263531775,DE
-3263531776,3263538175,EU
-3263538176,3263538431,TR
-3263538432,3263540223,EU
-3263540224,3263540479,TR
-3263540480,3263540735,GB
-3263540736,3263541503,EU
-3263541504,3263541535,GB
-3263541536,3263557631,EU
-3263557632,3263557887,TR
-3263557888,3263558655,EU
-3263558656,3263558911,TR
-3263558912,3263559679,GB
-3263559680,3263560447,EU
-3263560448,3263560703,TR
-3263560704,3263561215,EU
-3263561216,3263561231,TR
-3263561232,3263561727,EU
+3263526144,3263545343,DE
+3263545344,3263561727,US
3263561728,3263627263,NL
-3263627264,3263692799,RU
-3263692800,3263760127,FI
-3263760128,3263760383,SE
-3263760384,3263764991,FI
-3263764992,3263765503,BE
-3263765504,3263766975,FI
-3263766976,3263767039,RU
-3263767040,3263773951,FI
-3263773952,3263774207,BE
-3263774208,3263774463,FI
-3263774464,3263774719,BE
-3263774720,3263792351,FI
-3263792352,3263792367,SE
-3263792368,3263793151,FI
-3263793152,3263793407,BE
-3263793408,3263816703,FI
-3263816704,3263816959,ES
-3263816960,3263817215,NL
-3263817216,3263823871,FI
+3263627264,3263647743,RU
+3263647744,3263651839,LT
+3263651840,3263666175,RU
+3263666176,3263676415,AZ
+3263676416,3263678463,RU
+3263678464,3263680511,DE
+3263680512,3263692799,RU
+3263692800,3263823871,FI
3263823872,3263826943,DE
3263826944,3263827199,AT
-3263827200,3263833903,DE
-3263833904,3263833919,EU
-3263833920,3263878145,DE
+3263827200,3263878145,DE
3263878146,3263878146,US
3263878147,3263886079,DE
3263886080,3263886335,SG
@@ -122691,12 +64119,9 @@
3263979520,3263987711,DE
3263987712,3264004095,ES
3264004096,3264012287,HU
-3264012288,3264012543,AT
-3264012544,3264012799,FR
-3264012800,3264013055,GB
+3264012544,3264013055,GB
3264013056,3264013311,TR
3264013312,3264013567,UA
-3264013568,3264013823,RU
3264013824,3264014079,NL
3264014080,3264014335,DE
3264014336,3264014591,PT
@@ -122714,22 +64139,12 @@
3264017920,3264018175,NL
3264018176,3264018431,FR
3264018432,3264018687,HU
-3264018688,3264018943,GB
3264018944,3264019199,PL
3264019200,3264019967,GB
3264019968,3264020223,AT
3264020224,3264020479,PL
3264020480,3264086015,BG
-3264086016,3264099839,FI
-3264099840,3264100095,GB
-3264100096,3264124927,FI
-3264124928,3264125183,DE
-3264125184,3264125439,NL
-3264125440,3264125695,FI
-3264125696,3264125951,BE
-3264125952,3264133375,FI
-3264133376,3264133631,SE
-3264133632,3264151551,FI
+3264086016,3264151551,FI
3264151552,3264184319,NO
3264184320,3264184831,MD
3264184832,3264185343,NL
@@ -122751,15 +64166,15 @@
3264282624,3264290815,GB
3264290816,3264296191,FI
3264296192,3264297727,FR
-3264297728,3264298239,PT
-3264298240,3264298495,DE
-3264298496,3264298751,PT
+3264297728,3264297983,DE
+3264297984,3264298239,PT
+3264298240,3264298751,DE
3264298752,3264299007,BG
3264299008,3264307199,DE
3264307200,3264311295,PL
3264311296,3264311551,FR
3264311808,3264312063,DE
-3264312064,3264312319,EU
+3264312064,3264312319,CH
3264312320,3264312575,PL
3264312576,3264312831,UA
3264312832,3264313087,DE
@@ -122769,9 +64184,7 @@
3264313856,3264314623,DE
3264314624,3264314879,SE
3264314880,3264315135,GB
-3264315136,3264315391,GR
3264315392,3264317439,IE
-3264317440,3264318463,SK
3264318464,3264318975,ES
3264318976,3264319487,DE
3264319488,3264319743,FR
@@ -122779,7 +64192,6 @@
3264320000,3264320255,DE
3264320256,3264321023,GB
3264321024,3264321535,DE
-3264321536,3264321791,GB
3264321792,3264322047,RS
3264322048,3264322303,FR
3264322304,3264322559,RO
@@ -122803,9 +64215,7 @@
3264334336,3264334847,UA
3264334848,3264335359,PL
3264335360,3264335871,SK
-3264335872,3264336383,NL
-3264336384,3264336895,GB
-3264336896,3264337407,RU
+3264335872,3264336383,GB
3264337408,3264338431,UA
3264338432,3264338943,DE
3264338944,3264339455,UA
@@ -122827,8 +64237,8 @@
3264345088,3264346111,NL
3264346112,3264347135,SE
3264347136,3264348159,DE
-3264348160,3264372223,FR
-3264372224,3264372735,GB
+3264348672,3264358143,FR
+3264358400,3264372223,FR
3264372736,3264375039,FR
3264375040,3264376063,SE
3264376064,3264376319,HR
@@ -122836,8 +64246,7 @@
3264376576,3264376831,CH
3264376832,3264377087,UA
3264377088,3264377343,RU
-3264377344,3264377599,IT
-3264377600,3264378111,RU
+3264377600,3264377855,RU
3264378112,3264378367,SE
3264378368,3264378623,DE
3264378624,3264378879,RU
@@ -122845,32 +64254,25 @@
3264379136,3264379391,BE
3264379392,3264379647,RU
3264379648,3264379903,PL
-3264379904,3264380159,DE
3264380160,3264380415,RO
-3264380416,3264380671,CH
3264380672,3264380927,NL
3264380928,3264381951,PL
3264381952,3264385023,UA
3264385024,3264386047,DE
3264386048,3264387071,IR
3264387072,3264388095,LB
-3264388096,3264389119,UA
3264389120,3264390143,RU
-3264390144,3264391167,IR
3264391168,3264392191,SE
3264392192,3264393215,FR
3264393216,3264394239,DE
3264394240,3264395263,UA
3264395264,3264396287,AT
3264396288,3264397311,UA
-3264397312,3264398335,GB
3264398336,3264399359,UA
3264399360,3264400383,RU
-3264400384,3264401407,PA
3264401408,3264402431,DE
3264402432,3264403455,CH
3264403456,3264404479,PL
-3264404480,3264405503,UA
3264405504,3264406527,FR
3264406528,3264407551,UA
3264407552,3264408575,BG
@@ -122878,34 +64280,31 @@
3264409600,3264410623,RU
3264410624,3264411647,NO
3264411648,3264413695,PL
-3264413696,3264431103,CH
+3264417536,3264431103,CH
3264431104,3264431615,LI
-3264431616,3264441343,CH
+3264431616,3264431871,CH
+3264432128,3264441343,CH
3264441344,3264441599,PL
-3264441600,3264446207,CH
-3264446208,3264446463,FR
-3264446464,3264447743,CH
+3264442112,3264444927,CH
+3264444928,3264445183,DE
+3264445184,3264445439,CH
+3264447488,3264447743,CH
3264447744,3264447999,DE
-3264448000,3264463871,CH
+3264448000,3264452607,CH
+3264454656,3264456191,CH
+3264456704,3264463871,CH
3264463872,3264466943,LI
3264466944,3264476671,CH
3264476672,3264477183,RU
3264477184,3264477439,PL
3264477440,3264477695,RU
-3264477696,3264483071,CH
-3264483072,3264483327,LI
-3264483328,3264486527,CH
-3264486528,3264486559,LI
-3264486560,3264494079,CH
-3264494080,3264494335,US
-3264494336,3264544767,CH
+3264477696,3264544767,CH
3264544768,3264561151,HU
3264561152,3264563199,RU
3264563200,3264564223,ES
3264564224,3264565247,IE
3264565248,3264567295,NL
3264567296,3264567551,PL
-3264567552,3264567807,GB
3264567808,3264568063,RU
3264568320,3264568575,UA
3264568832,3264569087,FR
@@ -122926,83 +64325,32 @@
3264606976,3264607231,BE
3264607232,3264607487,IT
3264607488,3264610303,DE
-3264610304,3264612351,GB
-3264612352,3264613375,FR
-3264613376,3264613887,NL
-3264613888,3264613895,GB
-3264613896,3264613919,NL
-3264613920,3264613935,GB
-3264613936,3264613943,NL
-3264613944,3264613951,GB
-3264613952,3264614131,NL
-3264614132,3264614135,GB
-3264614136,3264614143,NL
-3264614144,3264614399,GB
-3264614400,3264614655,NL
-3264614656,3264615423,SE
-3264615424,3264615935,CH
-3264615936,3264616191,GB
-3264616192,3264616447,CH
-3264616448,3264616479,DE
-3264616480,3264616503,GB
-3264616504,3264616511,DE
-3264616512,3264616575,GB
-3264616576,3264616703,DE
-3264616704,3264616959,GB
-3264616960,3264617471,DE
-3264617472,3264617727,GB
-3264617728,3264617983,US
-3264617984,3264618239,GB
-3264618240,3264618495,US
-3264618496,3264619007,PL
-3264619008,3264619311,BE
-3264619312,3264619327,GB
-3264619328,3264619359,BE
-3264619360,3264619391,GB
+3264610304,3264614911,GB
+3264614912,3264615167,SE
+3264615168,3264617983,GB
+3264617984,3264618239,US
+3264618240,3264619391,GB
3264619392,3264619519,BE
-3264619520,3264620543,GB
-3264620544,3264620607,FR
-3264620608,3264620639,GB
-3264620640,3264620679,FR
-3264620680,3264620687,ES
-3264620688,3264620703,FR
-3264620704,3264620719,GB
-3264620720,3264620751,FR
-3264620752,3264620759,GB
-3264620760,3264621567,FR
-3264621568,3264621663,DE
-3264621664,3264621695,GB
-3264621696,3264622591,DE
-3264622592,3264622847,GB
-3264622848,3264623103,FR
-3264623104,3264623615,BG
-3264623616,3264624127,BE
-3264624128,3264624143,GI
-3264624144,3264624383,GB
-3264624384,3264624639,MT
+3264619520,3264624639,GB
3264624640,3264624671,US
-3264624672,3264624767,GB
-3264624768,3264626303,NL
-3264626304,3264626431,GB
-3264626432,3264626687,NL
+3264624672,3264626687,GB
3264626688,3264627711,EE
3264627712,3264628735,GR
3264628736,3264630783,UA
3264630784,3264631807,DE
3264631808,3264632831,RO
3264632832,3264633855,RU
-3264633856,3264634879,UA
3264634880,3264636927,PL
3264636928,3264637951,RU
3264637952,3264639999,DK
3264640000,3264641023,BG
3264641024,3264642047,GB
-3264642048,3264651263,RU
+3264643072,3264651263,RU
3264651264,3264651775,CH
3264651776,3264652287,IT
3264652288,3264652799,RU
3264652800,3264653311,PL
-3264653312,3264653823,EU
+3264653312,3264653823,DE
3264653824,3264654335,PL
3264654336,3264654847,DE
3264654848,3264655359,UA
@@ -123023,7 +64371,6 @@
3264663552,3264664063,NL
3264664064,3264664575,DE
3264664576,3264665087,NO
-3264665088,3264665599,SE
3264665600,3264666111,RO
3264666112,3264666623,IL
3264666624,3264667135,UA
@@ -123032,7 +64379,6 @@
3264668160,3264669183,DE
3264669184,3264669695,PL
3264669696,3264670207,UA
-3264670208,3264670719,RU
3264670720,3264671231,FR
3264671232,3264671743,PL
3264671744,3264672255,DE
@@ -123043,11 +64389,7 @@
3264674304,3264674815,PL
3264674816,3264675327,GB
3264675328,3264675839,RU
-3264675840,3264695039,NL
-3264695040,3264695295,EU
-3264695296,3264697924,NL
-3264697925,3264697925,EU
-3264697926,3264741375,NL
+3264675840,3264741375,NL
3264741376,3264749567,SI
3264749568,3264750079,LV
3264750080,3264750591,RU
@@ -123073,11 +64415,12 @@
3264806912,3264815103,GB
3264815104,3264825343,SE
3264825344,3264825599,NO
-3264825856,3264826879,GB
+3264825856,3264826111,NL
+3264826112,3264826367,GB
3264826880,3264827135,NL
3264827136,3264827391,LV
3264827648,3264828159,GR
-3264828160,3264828415,EU
+3264828160,3264828415,CH
3264828416,3264828671,SE
3264828672,3264828927,MT
3264828928,3264829439,DE
@@ -123118,7 +64461,6 @@
3264844800,3264845311,UA
3264845312,3264845951,DE
3264845952,3264846079,GB
-3264846080,3264846207,UG
3264846208,3264846335,AE
3264846336,3264846463,GB
3264846464,3264846591,NO
@@ -123126,13 +64468,11 @@
3264846720,3264846847,RU
3264846848,3264846911,DK
3264846912,3264847103,CY
-3264847104,3264847135,FR
3264847168,3264847199,IE
3264847200,3264847231,NO
3264847232,3264847263,CH
3264847264,3264847295,LI
3264847296,3264847359,CY
-3264847360,3264847487,FR
3264847488,3264847615,RU
3264847616,3264847679,PL
3264847680,3264847743,FI
@@ -123140,12 +64480,11 @@
3264847808,3264847871,SE
3264847872,3264849919,DE
3264849920,3264850431,GB
-3264850432,3264850687,PL
3264850688,3264850943,LV
3264850944,3264851967,IT
3264851968,3264854015,CH
3264854016,3264854271,GB
-3264854528,3264854783,EU
+3264854528,3264854783,DE
3264854784,3264855039,IT
3264855040,3264855551,CH
3264855552,3264856063,DE
@@ -123160,43 +64499,36 @@
3264872448,3264888831,GB
3264888832,3264897023,RU
3264897024,3264905215,GB
-3264905216,3264908799,CY
-3264908800,3264909055,GB
-3264909056,3264913407,CY
+3264905216,3264913407,CY
3264913408,3264921599,GB
-3264921600,3264922303,LU
-3264922304,3264922319,SA
-3264922320,3264929791,LU
+3264921600,3264929791,LU
3264929792,3264937983,SK
3264937984,3265003519,GB
-3265003520,3265015807,DE
-3265015808,3265016063,EU
-3265016064,3265045759,DE
+3265003520,3265018879,DE
+3265018880,3265019903,HK
+3265019904,3265043199,DE
+3265043456,3265045759,DE
3265045760,3265046015,TR
-3265046016,3265055231,DE
+3265046016,3265049087,DE
+3265049600,3265055231,DE
3265055232,3265055743,FR
3265055744,3265069055,DE
3265069056,3265134591,FI
-3265134592,3265134863,BE
-3265134864,3265135615,CH
-3265135616,3265136127,FR
-3265136128,3265136639,CH
-3265136640,3265136895,NL
-3265136896,3265136927,CH
-3265136928,3265136975,NL
-3265136976,3265136991,CH
-3265136992,3265137150,NL
-3265137151,3265137407,CH
-3265137408,3265137663,NL
-3265137664,3265139711,CH
-3265139712,3265139967,BE
-3265139968,3265140735,CH
-3265140736,3265141043,GB
-3265141044,3265141055,CH
-3265141056,3265141151,GB
-3265141152,3265141167,CH
-3265141168,3265141759,GB
-3265141760,3265142783,CH
+3265134592,3265137983,CH
+3265137984,3265138047,NL
+3265138048,3265138863,CH
+3265138864,3265138879,SE
+3265138880,3265139999,CH
+3265140000,3265140015,BE
+3265140016,3265140991,CH
+3265140992,3265141247,GB
+3265141248,3265141551,CH
+3265141552,3265141555,IE
+3265141556,3265141759,CH
+3265141760,3265141775,GB
+3265141776,3265141791,CH
+3265141792,3265141887,GB
+3265141888,3265142783,CH
3265142784,3265150975,MT
3265150976,3265159167,AD
3265159168,3265167359,FR
@@ -123204,95 +64536,38 @@
3265175552,3265183743,NL
3265183744,3265191935,BY
3265191936,3265200127,CH
-3265200128,3265216767,GB
-3265216768,3265217023,FR
-3265217024,3265218559,GB
-3265218560,3265219071,NL
-3265219072,3265265663,GB
+3265200128,3265265663,GB
3265265664,3265331199,SK
-3265331200,3265340415,GB
-3265340416,3265340671,DE
-3265340672,3265340927,GB
-3265340928,3265341183,CH
-3265341184,3265341279,AT
-3265341280,3265341311,EU
-3265341312,3265341439,FR
-3265341440,3265341695,GB
-3265341696,3265341951,DE
-3265341952,3265343487,GB
-3265343488,3265347583,DE
-3265347584,3265352703,FR
-3265352704,3265352959,BE
-3265352960,3265353215,FR
-3265353216,3265355263,DE
-3265355264,3265355775,FR
-3265355776,3265357055,BE
-3265357056,3265357311,FR
-3265357312,3265357567,DE
-3265357568,3265357823,BE
-3265357824,3265358847,NL
-3265358848,3265359103,BE
-3265359104,3265359871,NL
-3265359872,3265360127,CH
-3265360128,3265360383,GB
-3265360384,3265360895,CH
+3265331200,3265334271,GB
+3265336320,3265337343,GB
+3265338368,3265340415,GB
+3265342464,3265343487,GB
+3265345536,3265347583,DE
+3265347584,3265348607,FR
+3265349632,3265351679,FR
3265360896,3265361919,GB
3265361920,3265363967,IT
3265363968,3265366015,ES
-3265366016,3265366079,EU
-3265366080,3265366271,BE
-3265366272,3265366527,HU
-3265366528,3265367039,DK
-3265367040,3265367295,AT
-3265367296,3265367551,ES
-3265367552,3265367807,SE
-3265367808,3265369343,DK
-3265369344,3265369599,IL
-3265369600,3265369855,SE
-3265369856,3265370111,DE
-3265370112,3265370623,DK
-3265370624,3265370879,GB
-3265370880,3265376255,DE
-3265376256,3265376511,IT
-3265376512,3265378303,GB
-3265378304,3265380095,NL
-3265380096,3265382399,GB
-3265382400,3265382911,CH
-3265382912,3265384447,GB
-3265384448,3265386495,DE
+3265368064,3265369087,DK
+3265371136,3265376255,DE
+3265377280,3265378303,GB
+3265378304,3265379327,NL
+3265380352,3265382399,GB
3265386496,3265386751,NL
-3265386752,3265387007,EU
3265387008,3265387263,NL
-3265387264,3265388543,EU
-3265388544,3265396735,GB
-3265396736,3265464847,DE
-3265464848,3265464863,AT
-3265464864,3265465343,DE
-3265465344,3265465599,AT
-3265465600,3265467519,DE
-3265467520,3265467523,ES
-3265467524,3265527055,DE
-3265527056,3265527059,ES
-3265527060,3265527063,DE
-3265527064,3265527071,SE
-3265527072,3265527087,DE
-3265527088,3265527095,SE
-3265527096,3265527807,DE
-3265527808,3265569279,GB
-3265569280,3265569791,AE
-3265569792,3265582335,GB
-3265582336,3265582476,A2
+3265388544,3265392639,GB
+3265394688,3265396735,GB
+3265396736,3265527807,DE
+3265527808,3265582476,GB
3265582477,3265582477,LB
-3265582478,3265582591,A2
-3265582592,3265593343,GB
+3265582478,3265593343,GB
3265593344,3265594367,RU
-3265594368,3265595391,UA
+3265594880,3265595391,UA
3265595392,3265595903,PL
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
@@ -123318,9 +64593,8 @@
3265606656,3265606911,AT
3265606912,3265607167,RU
3265607168,3265607423,PL
-3265607424,3265607935,DK
+3265607424,3265607679,DK
3265607936,3265608191,CZ
-3265608192,3265608447,RU
3265608448,3265608703,SE
3265608704,3265608959,GB
3265608960,3265609215,RU
@@ -123328,24 +64602,21 @@
3265609728,3265617919,NL
3265617920,3265626111,SI
3265626112,3265634303,JO
-3265634304,3265642287,IE
-3265642288,3265642303,US
-3265642304,3265642495,IE
+3265634304,3265642495,IE
3265642496,3265650687,GB
3265650688,3265658879,SE
3265658880,3265724415,AT
3265724416,3265789951,FR
3265789952,3265824767,GB
3265824768,3265825023,US
-3265825024,3265887487,GB
+3265825024,3265879039,GB
+3265880064,3265887487,GB
3265887488,3265887743,PT
3265887744,3265888255,PL
3265888256,3265902335,GB
3265902336,3265902591,FR
-3265902592,3265904383,GB
3265904384,3265904639,RO
3265904640,3265904895,DE
-3265904896,3265905151,UA
3265905152,3265905663,GB
3265905664,3265905919,IE
3265905920,3265906175,GB
@@ -123361,11 +64632,10 @@
3265909248,3265909503,UA
3265909504,3265909759,DE
3265909760,3265910015,RO
-3265910016,3265910271,PL
3265910272,3265910527,FR
3265910528,3265910783,PT
-3265910784,3265911039,DE
-3265911040,3265911551,GB
+3265910784,3265911295,DE
+3265911296,3265911551,GB
3265911552,3265911807,CH
3265911808,3265912063,PL
3265912064,3265912319,GB
@@ -123374,21 +64644,18 @@
3265912832,3265913087,CZ
3265913088,3265913343,SE
3265913344,3265914367,PL
-3265914368,3265914623,RU
3265914624,3265914879,BG
3265914880,3265915135,GR
3265915136,3265915391,RO
3265915392,3265915647,GB
3265915648,3265915903,RO
-3265915904,3265916415,PL
+3265915904,3265916159,PL
3265916416,3265916671,UA
3265916672,3265916927,DE
3265916928,3265917183,FR
3265917184,3265917439,PL
-3265917440,3265917695,RU
3265917696,3265917951,SE
3265917952,3265918207,GB
-3265918208,3265918463,EU
3265918464,3265918719,AT
3265918720,3265918975,RU
3265918976,3265919231,NL
@@ -123396,32 +64663,21 @@
3265919488,3265919743,RU
3265919744,3265919999,DE
3265920000,3265920255,CZ
-3265920256,3265920511,TR
3265920512,3265920767,GB
3265920768,3265921023,RU
3265921024,3265986559,AE
3265986560,3266052095,NL
-3266052096,3266073823,DE
-3266073824,3266073839,GB
-3266073840,3266122751,DE
-3266122752,3266123007,EU
-3266123008,3266199807,DE
-3266199808,3266200063,EU
-3266200064,3266310911,DE
-3266310912,3266311167,EU
-3266311168,3266322431,DE
+3266052096,3266322431,DE
3266322432,3266330623,LT
3266330624,3266338815,GB
3266338816,3266339071,RU
3266339072,3266339327,UA
-3266339328,3266339583,ES
3266339840,3266340095,RU
3266340096,3266340607,PL
3266340608,3266340863,FI
3266340864,3266341119,CH
3266341120,3266341375,GB
3266341376,3266341631,DE
-3266341632,3266341887,GB
3266341888,3266342143,KW
3266342144,3266342399,CH
3266342400,3266342655,BE
@@ -123431,35 +64687,23 @@
3266343424,3266343679,RU
3266343680,3266343935,RO
3266343936,3266344191,CH
-3266344192,3266344447,UA
3266344448,3266344703,RU
3266344704,3266344959,ES
-3266344960,3266345727,DE
-3266345728,3266345983,DK
+3266344960,3266345983,DE
3266345984,3266346495,GB
3266346496,3266346751,IT
3266346752,3266347007,FR
-3266347008,3266347263,GB
-3266347264,3266351359,EU
-3266351360,3266352639,GB
-3266352640,3266352895,EU
+3266351360,3266352607,GB
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,3266355199,GB
+3266353920,3266354175,GB
+3266354688,3266355199,GB
3266355200,3266363391,RO
3266363392,3266371583,GB
3266371584,3266379775,HU
@@ -123471,11 +64715,9 @@
3266384896,3266385919,RU
3266385920,3266386943,UA
3266386944,3266387967,PL
-3266387968,3266389247,FR
-3266389248,3266389327,LU
-3266389328,3266395135,FR
-3266395136,3266395647,NL
-3266395648,3266396159,FR
+3266387968,3266395647,FR
+3266395648,3266395903,NL
+3266395904,3266396159,FR
3266396160,3266412543,IT
3266412544,3266420735,AT
3266420736,3266428927,GB
@@ -123483,41 +64725,24 @@
3266437120,3266445311,GL
3266445312,3266472959,NL
3266472960,3266473215,SE
-3266473216,3266473807,NL
-3266473808,3266473823,GB
-3266473824,3266510847,NL
+3266473216,3266510847,NL
3266510848,3266543615,ES
3266543616,3266576383,IT
-3266576384,3266617327,DE
+3266576384,3266582783,DE
+3266583040,3266603519,DE
+3266604032,3266617327,DE
3266617328,3266617343,GB
-3266617344,3266634391,DE
+3266617344,3266634383,DE
3266634392,3266634399,EE
3266634400,3266641919,DE
3266641920,3266707455,PL
3266707456,3266772991,DK
3266772992,3266781183,IT
3266781184,3266789375,PL
-3266789376,3266796543,SM
-3266796544,3266796799,IT
-3266796800,3266797567,SM
-3266797568,3266798335,ES
-3266798336,3266798591,GB
-3266798592,3266798847,CZ
-3266798848,3266799103,GB
-3266799104,3266799615,NL
-3266799616,3266800639,GB
-3266800640,3266800895,CH
-3266800896,3266801663,GB
-3266801664,3266802215,BG
-3266802216,3266802687,GB
-3266802688,3266803711,FR
-3266803712,3266803815,GB
-3266803816,3266803823,NL
-3266803824,3266804223,GB
-3266804224,3266804479,NL
-3266804480,3266804735,GB
-3266804736,3266805247,DK
-3266805248,3266805759,GB
+3266789376,3266797567,SM
+3266797568,3266797823,GB
+3266797824,3266798079,ES
+3266798080,3266805759,GB
3266805760,3266813951,AT
3266813952,3266822143,UA
3266822144,3266830335,FR
@@ -123525,15 +64750,11 @@
3266836480,3266837503,LU
3266837504,3266838527,BE
3266838528,3266969599,IT
-3266969600,3267030095,RU
-3267030096,3267030103,KZ
-3267030104,3267032575,RU
-3267032576,3267032831,KZ
-3267032832,3267035135,RU
+3266969600,3267035135,RU
3267035136,3267039231,NO
3267039232,3267040255,DE
3267040256,3267041279,RO
-3267041280,3267043327,UA
+3267042304,3267043327,UA
3267043328,3267044351,GB
3267044352,3267045375,RU
3267045376,3267046399,PL
@@ -123554,7 +64775,7 @@
3267060736,3267061759,LV
3267061760,3267063807,UA
3267063808,3267064576,BE
-3267064577,3267064577,EU
+3267064577,3267064577,DE
3267064578,3267064831,BE
3267064832,3267065855,PL
3267066880,3267067903,IT
@@ -123588,756 +64809,183 @@
3267097600,3267098623,KZ
3267098624,3267099647,GB
3267099648,3267100671,IT
-3267100672,3267117311,FI
-3267117312,3267118079,AX
-3267118080,3267166207,FI
+3267100672,3267166207,FI
3267166208,3267231743,GB
3267231744,3267297279,RU
3267297280,3267362815,CH
-3267362816,3267368480,DK
-3267368481,3267368481,EU
-3267368482,3267426879,DK
-3267426880,3267426943,CH
-3267426944,3267428351,DK
+3267362816,3267428351,DK
3267428352,3267493887,GB
-3267493888,3267494143,DE
-3267494144,3267498239,GB
-3267498240,3267498495,IE
-3267498496,3267498751,DE
-3267498752,3267504383,GB
-3267504384,3267504639,AT
-3267504640,3267505151,FR
-3267505152,3267507711,DE
-3267507712,3267507743,GB
-3267507744,3267507775,DE
-3267507776,3267507807,GB
-3267507808,3267507839,ZA
-3267507840,3267508223,GB
-3267508224,3267508735,DE
-3267508736,3267508991,IL
-3267508992,3267509247,GB
-3267509248,3267509503,AT
-3267509504,3267509695,CH
-3267509696,3267509727,EU
-3267509728,3267509759,CH
-3267509760,3267510271,GB
-3267510272,3267512831,FR
-3267512832,3267513343,GB
+3267501056,3267504127,GB
+3267511296,3267512319,FR
3267513344,3267514367,FR
-3267514368,3267517951,DE
-3267517952,3267518463,GB
-3267518464,3267524607,DE
-3267524608,3267526655,EU
-3267526656,3267527679,DE
-3267527680,3267529215,FR
-3267529216,3267529471,GB
-3267529472,3267529727,FR
+3267514368,3267515391,DE
+3267516416,3267517439,DE
+3267520512,3267521535,DE
+3267522560,3267523583,DE
+3267527680,3267528703,FR
3267529728,3267530751,AT
-3267530752,3267534335,FR
-3267534336,3267534527,RS
-3267534528,3267534559,EU
-3267534560,3267534575,FR
-3267534576,3267534591,AT
-3267534592,3267538943,FR
-3267538944,3267540223,NL
-3267540224,3267540479,GB
-3267540480,3267541759,NL
-3267541760,3267542527,GB
-3267542528,3267542783,CH
-3267542784,3267543039,DE
-3267543040,3267543295,IT
-3267543296,3267543551,AT
-3267543552,3267544319,GB
-3267544320,3267544575,DE
-3267544576,3267544703,IT
-3267544704,3267544831,DE
-3267544832,3267545087,FR
-3267545088,3267545855,ES
-3267545856,3267546111,DE
-3267546112,3267546623,ES
-3267546624,3267547135,FR
-3267547136,3267547391,BE
-3267547392,3267547647,DE
-3267547648,3267549183,GB
-3267549184,3267550463,DK
-3267550464,3267550719,NL
-3267550720,3267551231,DK
-3267551232,3267551743,AT
-3267551744,3267551999,SE
-3267552000,3267552255,NO
-3267552256,3267553023,AT
-3267553024,3267553279,NL
-3267553280,3267554303,DK
-3267554304,3267554815,DE
-3267554816,3267555071,FR
-3267555072,3267555199,EU
-3267555200,3267555327,ZA
-3267555328,3267555583,FI
-3267555584,3267556095,GB
-3267556096,3267556351,NO
-3267556352,3267556607,GB
-3267556608,3267556863,NO
-3267556864,3267557375,IL
-3267557376,3267557631,NO
-3267557632,3267557887,AT
-3267557888,3267558399,IL
-3267558400,3267558911,CH
-3267558912,3267559423,AT
-3267559424,3267560703,DE
-3267560704,3267560711,GB
-3267560712,3267561407,DE
-3267561408,3267561471,CH
-3267561472,3267561727,DE
-3267561728,3267561759,GB
-3267561760,3267622527,DE
-3267622528,3267622559,GB
-3267622560,3267624959,DE
-3267624960,3267625471,GB
-3267625472,3267625727,FR
-3267625728,3267625983,BE
-3267625984,3267626239,NL
-3267626240,3267626495,BE
-3267626496,3267626751,ES
-3267626752,3267627007,RU
-3267627008,3267627263,EU
-3267627264,3267627347,DE
-3267627348,3267627351,EU
-3267627352,3267627391,DE
-3267627392,3267627423,EU
-3267627424,3267627519,DE
-3267627520,3267627775,EU
-3267627776,3267627807,DE
-3267627808,3267627871,EU
-3267627872,3267628031,DE
-3267628032,3267628287,IT
-3267628288,3267628327,FR
-3267628328,3267628543,EU
-3267628544,3267628799,IT
-3267628800,3267629055,HU
-3267629056,3267629311,CZ
-3267629312,3267629567,DK
-3267629568,3267629711,BE
-3267629712,3267629719,EU
-3267629720,3267629759,BE
-3267629760,3267629791,EU
-3267629792,3267629823,BE
-3267629824,3267630079,GR
-3267630080,3267630591,GB
-3267630592,3267630847,SK
-3267630848,3267630863,IT
-3267630864,3267630943,FR
-3267630944,3267630959,GB
-3267630960,3267631055,IT
-3267631056,3267631087,GB
-3267631088,3267631103,IT
+3267531776,3267532799,FR
+3267534848,3267536895,FR
+3267537920,3267538943,FR
+3267549184,3267550207,DK
+3267559424,3267624959,DE
+3267630080,3267631095,GB
+3267631096,3267631103,IT
3267631104,3267631615,GB
-3267631616,3267632127,DE
-3267632128,3267632383,EU
-3267632384,3267632511,BE
-3267632512,3267632639,EU
-3267632640,3267632895,IT
-3267632896,3267633151,BE
-3267633152,3267633679,NO
-3267633680,3267633727,EU
-3267633728,3267633855,NO
-3267633856,3267634175,EU
-3267634176,3267635711,GB
-3267635712,3267635967,EU
-3267635968,3267636223,BE
-3267636224,3267636735,EU
-3267636736,3267636783,ZA
-3267636784,3267636799,EU
-3267636800,3267636815,ZA
-3267636816,3267636831,EU
-3267636832,3267636991,ZA
-3267636992,3267637247,AT
-3267637248,3267637503,EU
-3267637504,3267637723,IT
-3267637724,3267637727,EU
-3267637728,3267637731,IT
-3267637732,3267637735,EU
-3267637736,3267637759,IT
-3267637760,3267637823,ES
-3267637824,3267638015,EU
-3267638016,3267638271,ES
-3267638272,3267638527,BE
-3267638528,3267638783,DK
-3267638784,3267639295,CZ
-3267639296,3267639551,NL
-3267639552,3267639807,GB
-3267639808,3267640063,CH
-3267640064,3267640319,GB
-3267640320,3267640575,CH
-3267640576,3267640831,IT
-3267640832,3267641087,GR
-3267641088,3267641343,EU
-3267641344,3267641855,IE
-3267641856,3267642111,GB
-3267642112,3267642367,SE
-3267642368,3267642623,GB
-3267642624,3267642879,NO
-3267642880,3267643135,SI
-3267643136,3267643391,BE
-3267643392,3267643407,RU
-3267643408,3267643423,EU
-3267643424,3267643439,RU
-3267643440,3267643455,EU
-3267643456,3267643487,RU
-3267643488,3267643519,EU
-3267643520,3267643647,RU
-3267643648,3267643903,GB
-3267643904,3267644159,EU
-3267644160,3267644415,BE
-3267644416,3267644671,DE
-3267644672,3267644927,SI
-3267644928,3267644935,EU
-3267644936,3267644943,BE
-3267644944,3267644951,EU
-3267644952,3267644959,BE
-3267644960,3267644975,FR
-3267644976,3267644983,GB
-3267644984,3267645055,BE
-3267645056,3267645439,EU
-3267645440,3267645695,GB
-3267645696,3267645951,DE
-3267645952,3267647487,EU
-3267647488,3267647743,GB
-3267647744,3267647999,SI
-3267648000,3267648255,DE
-3267648256,3267648511,GB
-3267648512,3267648767,DE
-3267648768,3267649023,NL
-3267649024,3267649279,RU
-3267649280,3267649535,DE
-3267649536,3267649791,EU
-3267649792,3267650303,NL
-3267650304,3267650319,EU
-3267650320,3267650367,AT
-3267650368,3267650463,EU
-3267650464,3267650495,AT
-3267650496,3267650527,EU
-3267650528,3267650559,AT
-3267650560,3267651071,GB
-3267651072,3267651327,DE
-3267651328,3267651583,EU
-3267651584,3267651839,FR
-3267651840,3267652095,EU
-3267652096,3267652351,GB
-3267652352,3267652607,EU
-3267652608,3267652863,DE
-3267652864,3267653119,PT
-3267653120,3267653375,GB
-3267653376,3267653887,EU
-3267653888,3267654143,GB
-3267654144,3267654911,EU
-3267654912,3267655167,SK
-3267655168,3267655679,GB
-3267655680,3267656191,IT
-3267656192,3267656447,DK
-3267656448,3267657215,EU
-3267657216,3267657471,HU
-3267657472,3267657487,RO
-3267657488,3267657503,EU
-3267657504,3267657575,RO
-3267657576,3267657663,EU
-3267657664,3267657695,RO
-3267657696,3267657703,EU
-3267657704,3267657711,RO
-3267657712,3267657983,EU
-3267657984,3267658239,GB
-3267658240,3267658495,IT
-3267658496,3267658751,EU
-3267658752,3267659263,CH
-3267659264,3267659519,EU
-3267659520,3267659775,IT
-3267659776,3267660287,EU
-3267660288,3267660543,CH
-3267660544,3267660695,ES
-3267660696,3267660719,EU
-3267660720,3267660791,ES
-3267660792,3267661311,EU
-3267661312,3267661567,SK
-3267661568,3267661679,GB
-3267661680,3267661687,EU
-3267661688,3267661823,GB
-3267661824,3267661851,ES
-3267661852,3267661855,EU
-3267661856,3267661887,ES
-3267661888,3267662015,EU
-3267662016,3267662079,ES
-3267662080,3267662847,EU
-3267662848,3267662879,IE
-3267662880,3267662887,EU
-3267662888,3267662895,GB
-3267662896,3267662911,EU
-3267662912,3267662951,IE
-3267662952,3267662959,GB
-3267662960,3267662991,IE
-3267662992,3267663007,EU
-3267663008,3267663103,IE
-3267663104,3267663327,IT
-3267663328,3267663359,EU
-3267663360,3267663871,GB
-3267663872,3267664127,DE
-3267664128,3267664383,EU
-3267664384,3267664639,GB
-3267664640,3267664671,SK
-3267664672,3267664799,EU
-3267664800,3267664815,SK
-3267664816,3267664831,EU
-3267664832,3267664879,SK
-3267664880,3267664887,EU
-3267664888,3267664895,SK
-3267664896,3267665919,EU
-3267665920,3267666191,GB
-3267666192,3267666207,GR
-3267666208,3267666255,GB
-3267666256,3267666263,GR
-3267666264,3267666271,GB
-3267666272,3267666431,GR
-3267666432,3267667199,GB
-3267667200,3267667455,NL
+3267634176,3267635199,GB
+3267636864,3267636991,ZA
+3267648320,3267648335,GB
+3267650320,3267650335,AT
+3267660608,3267660671,ES
+3267665920,3267666943,GB
3267667456,3267667967,GB
-3267667968,3267670015,EU
-3267670016,3267671551,ZA
-3267671552,3267671583,DE
-3267671584,3267671615,EU
-3267671616,3267671807,DE
-3267671808,3267672063,NO
-3267672064,3267672223,DE
-3267672224,3267672255,EU
-3267672256,3267672319,DE
-3267672320,3267672575,EU
-3267672576,3267672831,AT
-3267672832,3267672847,FR
-3267672848,3267672855,EU
-3267672856,3267673015,FR
-3267673016,3267673023,EU
-3267673024,3267673087,FR
-3267673088,3267673487,DE
-3267673488,3267673495,EU
-3267673496,3267673543,DE
-3267673544,3267673599,EU
-3267673600,3267673759,DE
-3267673760,3267673807,EU
-3267673808,3267673855,DE
-3267673856,3267674111,EU
-3267674112,3267674127,NL
-3267674128,3267674159,EU
-3267674160,3267674167,BE
-3267674168,3267674175,EU
-3267674176,3267674207,BE
+3267670016,3267671039,ZA
3267674208,3267674239,GB
-3267674240,3267674303,BE
-3267674304,3267674335,EU
-3267674336,3267674367,GB
-3267674368,3267674879,BE
-3267674880,3267675135,EU
-3267675136,3267675391,AT
-3267675392,3267675619,CH
-3267675620,3267675623,EU
-3267675624,3267675647,CH
-3267675648,3267675775,CY
-3267675776,3267675903,CH
-3267675904,3267676159,EU
-3267676160,3267676415,GB
-3267676416,3267676671,EU
-3267676672,3267676679,HU
-3267676680,3267676687,EU
-3267676688,3267676711,HU
-3267676712,3267676735,EU
-3267676736,3267676767,HU
-3267676768,3267676783,EU
-3267676784,3267676799,HU
-3267676800,3267676863,EU
-3267676864,3267676879,HU
-3267676880,3267676927,EU
-3267676928,3267677367,GB
-3267677368,3267677375,EU
-3267677376,3267677695,GB
-3267677696,3267678207,EU
-3267678208,3267678719,FR
-3267678720,3267678975,EU
-3267678976,3267679231,NL
-3267679232,3267679487,EU
-3267679488,3267679743,BE
-3267679744,3267679999,EU
-3267680000,3267680255,CZ
-3267680256,3267680767,SK
-3267680768,3267681279,EU
-3267681280,3267681535,FR
-3267681536,3267681791,EU
-3267681792,3267681887,FR
-3267681888,3267681903,EU
-3267681904,3267681975,FR
-3267681976,3267682015,EU
-3267682016,3267682047,FR
-3267682048,3267682303,EU
-3267682304,3267682559,BE
-3267682560,3267683335,EU
-3267683336,3267683359,PL
-3267683360,3267683391,EU
-3267683392,3267683463,PL
-3267683464,3267683519,EU
-3267683520,3267683527,PL
-3267683528,3267683535,EU
-3267683536,3267683551,PL
-3267683552,3267683567,EU
-3267683568,3267683575,PL
-3267683576,3267683911,EU
-3267683912,3267683935,PL
-3267683936,3267684351,EU
-3267684352,3267685119,GB
-3267685120,3267685375,DE
-3267685376,3267685887,NL
-3267685888,3267686399,CH
-3267686400,3267687935,EU
-3267687936,3267687999,IE
-3267688000,3267688063,EU
-3267688064,3267688191,IE
-3267688192,3267688703,DE
-3267688704,3267688959,SE
-3267688960,3267689215,EU
-3267689216,3267689247,CZ
-3267689248,3267689327,EU
-3267689328,3267689471,CZ
-3267689472,3267689727,EU
-3267689728,3267689983,GB
-3267689984,3267690239,FR
-3267690240,3267690271,EU
-3267690272,3267690495,FR
+3267684352,3267684863,GB
3267690496,3267691519,FI
3267691520,3267692543,SE
-3267692544,3267710847,FI
-3267710848,3267710975,SE
-3267710976,3267741439,FI
-3267741440,3267741695,BE
-3267741696,3267741759,FI
+3267692544,3267741759,FI
3267741760,3267741791,SE
-3267741792,3267741855,FI
-3267741856,3267741919,SE
-3267741920,3267743743,FI
-3267743744,3267743999,AX
-3267744000,3267744255,DE
-3267744256,3267744511,BE
-3267744512,3267746303,FI
-3267746304,3267746559,NL
-3267746560,3267756031,FI
-3267756032,3267760639,SE
-3267760640,3267761151,NO
-3267761152,3267761919,SE
-3267761920,3267762175,NO
-3267762176,3267763711,SE
-3267763712,3267763967,NO
-3267763968,3267764223,SE
-3267764224,3267764479,NO
-3267764480,3267765775,SE
-3267765776,3267765791,NO
-3267765792,3267765823,SE
-3267765824,3267765855,NO
-3267765856,3267766031,SE
-3267766032,3267766047,NO
-3267766048,3267766303,SE
-3267766304,3267766319,NO
-3267766320,3267766351,SE
-3267766352,3267766367,NO
-3267766368,3267766383,SE
-3267766384,3267766415,NO
-3267766416,3267787007,SE
-3267787008,3267787263,NO
-3267787264,3267787519,SE
-3267787520,3267787775,NO
-3267787776,3267793919,SE
-3267793920,3267794175,DK
-3267794176,3267821567,SE
-3267821568,3267824639,FR
-3267824640,3267824895,MQ
-3267824896,3267845375,FR
+3267741792,3267756031,FI
+3267756032,3267821567,SE
+3267821568,3267845375,FR
3267845376,3267845631,GP
3267845632,3267846655,FR
3267846656,3267846911,MQ
3267846912,3267887103,FR
-3267887104,3268017407,GB
-3268017408,3268017663,KE
-3268017664,3268078591,GB
-3268078592,3268078847,EU
-3268078848,3268139005,GB
-3268139006,3268139006,EU
-3268139007,3268149247,GB
+3267887104,3268149247,GB
3268149248,3268165631,EE
-3268165632,3268167170,CH
-3268167171,3268167171,EU
-3268167172,3268173823,CH
+3268165632,3268173823,CH
3268173824,3268182015,MT
3268182016,3268198399,PL
3268198400,3268214783,MA
-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,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,3268226815,GB
-3268226816,3268227327,EU
+3268226368,3268226399,GB
+3268226496,3268226663,GB
+3268226688,3268226815,GB
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,3268237855,EU
-3268237856,3268237887,GB
-3268237888,3268238335,EU
-3268238336,3268238847,GB
-3268238848,3268239103,EU
-3268239104,3268239359,GB
-3268239360,3268239583,EU
+3268238336,3268238359,GB
+3268238368,3268238399,GB
+3268238472,3268238543,GB
+3268238552,3268238847,GB
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,3268243967,EU
-3268243968,3268244031,GB
-3268244032,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,3268254463,EU
+3268249600,3268251311,GB
+3268251312,3268251327,IE
+3268251328,3268251647,GB
3268254464,3268254543,GB
-3268254544,3268254591,EU
3268254592,3268254607,GB
-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,3268259817,EU
-3268259818,3268259819,GB
-3268259820,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,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
+3268268032,3268272127,GB
+3268272640,3268272671,GB
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,3268335615,FR
-3268335616,3268335871,CH
-3268335872,3268345855,FR
+3268280320,3268345855,FR
3268345856,3268411391,GB
-3268411392,3268424959,AT
-3268424960,3268425727,CH
-3268425728,3268426495,AT
-3268426496,3268428031,CH
-3268428032,3268428287,AT
-3268428288,3268428543,CH
-3268428544,3268429055,AT
-3268429056,3268429311,CH
-3268429312,3268429567,AT
-3268429568,3268430079,CH
-3268430080,3268464127,AT
+3268411392,3268426751,AT
+3268426752,3268427775,CH
+3268427776,3268464127,AT
3268464128,3268464383,LI
3268464384,3268476927,AT
3268476928,3268537087,CH
@@ -124345,11 +64993,7 @@
3268537344,3268542463,CH
3268542464,3268607999,PT
3268608000,3268673535,FI
-3268673536,3268703799,CZ
-3268703800,3268703807,CR
-3268703808,3268728287,CZ
-3268728288,3268728299,CR
-3268728300,3268739071,CZ
+3268673536,3268739071,CZ
3268739072,3268739327,DE
3268739328,3268739583,PL
3268739584,3268739839,DE
@@ -124358,17 +65002,14 @@
3268740352,3268740607,DE
3268740608,3268740863,RO
3268740864,3268741119,CH
-3268741120,3268741375,FR
3268741376,3268741631,LV
3268741888,3268742143,AT
3268742144,3268742399,RU
-3268742400,3268742655,CZ
3268742656,3268742911,BE
3268742912,3268743167,NL
3268743168,3268743423,RO
3268743680,3268743935,GB
3268743936,3268744191,ES
-3268744192,3268744447,DE
3268744448,3268744703,RU
3268744704,3268744959,PL
3268744960,3268745215,UA
@@ -124387,7 +65028,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
@@ -124399,375 +65040,132 @@
3268771840,3268788223,NO
3268788224,3268804607,CZ
3268804608,3268869375,FR
-3268869376,3268870143,PF
-3268870144,3268876063,FI
-3268876064,3268876127,SE
-3268876128,3268876191,FI
-3268876192,3268876223,SE
-3268876224,3268881151,FI
-3268881152,3268881407,SE
-3268881408,3268881919,FI
-3268881920,3268882175,SE
-3268882176,3268916223,FI
-3268916224,3268916479,GB
-3268916480,3268920575,FI
-3268920576,3268920831,SE
-3268920832,3268932351,FI
-3268932352,3268932607,RU
-3268932608,3268935679,FI
+3268869376,3268869631,PF
+3268869632,3268870143,FR
+3268870144,3268935679,FI
3268935680,3269066751,GB
-3269066752,3269118087,SE
-3269118088,3269118091,GB
-3269118092,3269131555,SE
-3269131556,3269131559,NO
-3269131560,3269132287,SE
+3269066752,3269132287,SE
3269132288,3269197823,GR
3269197824,3269263359,RU
-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,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,GB
3269275904,3269276159,DE
3269276160,3269276415,GB
-3269276416,3269277183,EU
3269277184,3269277695,FR
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,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
+3269284864,3269285079,FR
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,3269285375,GB
-3269285376,3269285631,FR
+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,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
+3269294080,3269295103,GB
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,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,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,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
-3269525504,3269556223,IR
-3269556224,3269556479,AE
-3269556480,3269591039,IR
+3269525504,3269591039,IR
3269591040,3269621759,RU
-3269621760,3269623551,BY
-3269623552,3269656575,RU
+3269621760,3269623295,BY
+3269623296,3269656575,RU
3269656576,3269722111,GB
-3269722112,3269750799,CZ
-3269750800,3269750815,CR
-3269750816,3269771007,CZ
-3269771008,3269771263,GB
-3269771264,3269787647,CZ
+3269722112,3269787647,CZ
3269787648,3269853183,NL
3269853184,3269918719,CH
3269918720,3269984255,DE
3269984256,3270049791,AT
-3270049792,3270062191,DE
-3270062192,3270062195,ES
-3270062196,3270078391,DE
-3270078392,3270078395,ES
-3270078396,3270100735,DE
-3270100736,3270100767,GB
-3270100768,3270115327,DE
-3270115328,3270117503,EU
-3270117504,3270117631,DK
-3270117632,3270122239,EU
-3270122240,3270122495,DK
-3270122496,3270123715,EU
-3270123716,3270123719,DK
-3270123720,3270123775,EU
-3270123776,3270124031,DK
-3270124032,3270124543,EU
-3270124544,3270124799,DK
-3270124800,3270125055,EU
-3270125056,3270125567,DK
-3270125568,3270126079,EU
-3270126080,3270126335,DK
-3270126336,3270126623,EU
-3270126624,3270126655,DK
-3270126656,3270131967,EU
-3270131968,3270132223,NO
-3270132224,3270132991,EU
-3270132992,3270133023,NO
-3270133024,3270136927,EU
-3270136928,3270136959,NO
-3270136960,3270136991,EU
-3270136992,3270137055,NO
-3270137056,3270140927,EU
-3270140928,3270141439,NO
-3270141440,3270142207,EU
-3270142208,3270142463,NO
-3270142464,3270143999,EU
-3270144000,3270144767,NO
-3270144768,3270146815,EU
-3270146816,3270147327,NO
-3270147328,3270147583,EU
-3270147584,3270148095,NO
-3270148096,3270151423,FI
-3270151424,3270151935,EU
-3270151936,3270154527,FI
-3270154528,3270155007,EU
-3270155008,3270155775,FI
-3270155776,3270156287,EU
-3270156288,3270156799,DK
-3270156800,3270159615,EU
-3270159616,3270159871,DK
-3270159872,3270164991,EU
-3270164992,3270165247,NO
-3270165248,3270166527,EU
-3270166528,3270167807,NO
-3270167808,3270169087,EU
-3270169088,3270169343,NO
-3270169344,3270170111,EU
-3270170112,3270170623,NO
-3270170624,3270174719,EU
-3270174720,3270174975,NO
-3270174976,3270175743,EU
-3270175744,3270175999,NO
-3270176000,3270181119,EU
-3270181120,3270181375,CH
-3270181376,3270181631,EU
-3270181632,3270181887,CH
-3270181888,3270182143,EU
-3270182144,3270182399,CH
-3270182400,3270182655,EU
-3270182656,3270183679,CH
-3270183680,3270189055,EU
-3270189056,3270189311,BE
-3270189312,3270190079,EU
-3270190080,3270190591,IT
-3270190592,3270191103,CH
-3270191104,3270191935,EU
-3270191936,3270192047,CH
-3270192048,3270196991,EU
-3270196992,3270197247,CH
-3270197248,3270200063,EU
-3270200064,3270200319,NL
-3270200320,3270201343,EU
-3270201344,3270201599,NL
-3270201600,3270202879,EU
-3270202880,3270203135,NL
-3270203136,3270205439,EU
-3270205440,3270205695,NL
-3270205696,3270205983,EU
-3270205984,3270205999,ES
-3270206000,3270206063,EU
-3270206064,3270206079,ES
-3270206080,3270206975,EU
-3270206976,3270207231,ES
-3270207232,3270207487,CH
-3270207488,3270207743,EU
-3270207744,3270207903,IT
-3270207904,3270207999,EU
-3270208000,3270208255,CH
-3270208256,3270208511,LU
-3270208512,3270208767,EU
-3270208768,3270209023,RO
-3270209024,3270209279,NL
-3270209280,3270212351,EU
-3270212352,3270212863,NL
-3270212864,3270213119,EU
-3270213120,3270213375,NL
-3270213376,3270213887,EU
-3270213888,3270214279,PT
-3270214280,3270214287,US
-3270214288,3270214303,PT
-3270214304,3270214319,EU
-3270214320,3270215439,PT
-3270215440,3270215519,EU
-3270215520,3270215935,PT
-3270215936,3270216191,EU
-3270216192,3270216351,PT
-3270216352,3270216383,EU
-3270216384,3270216703,PT
-3270216704,3270216735,EU
-3270216736,3270216751,IT
-3270216752,3270216799,EU
-3270216800,3270216815,IT
-3270216816,3270216831,EU
-3270216832,3270216879,IT
-3270216880,3270217471,EU
-3270217472,3270217727,CH
-3270217728,3270218495,EU
-3270218496,3270218751,CH
-3270218752,3270224639,EU
-3270224640,3270224895,CH
-3270224896,3270230271,EU
-3270230272,3270230783,LU
-3270230784,3270231295,EU
-3270231296,3270231647,LU
-3270231648,3270232575,EU
-3270232576,3270232831,LU
-3270232832,3270234111,EU
-3270234112,3270234367,LU
-3270234368,3270234623,NL
-3270234624,3270235135,EU
-3270235136,3270236159,NL
-3270236160,3270238207,EU
-3270238208,3270238719,NL
-3270238720,3270238975,EU
-3270238976,3270239487,CH
-3270239488,3270241791,EU
-3270241792,3270242559,RO
-3270242560,3270243327,EU
-3270243328,3270243839,RO
-3270243840,3270244095,EU
-3270244096,3270244351,NL
-3270244352,3270244863,CH
-3270244864,3270245887,EU
-3270245888,3270246143,RO
-3270246144,3270246399,CH
-3270246400,3270247951,SE
-3270247952,3270247955,NO
-3270247956,3270348287,SE
-3270348288,3270348543,EU
-3270348544,3270369919,SE
-3270369920,3270369927,NO
-3270369928,3270377471,SE
+3270049792,3270115327,DE
+3270140928,3270141183,NO
+3270148352,3270149887,FI
+3270150656,3270151423,FI
+3270152704,3270153727,FI
+3270166528,3270167551,NO
+3270205440,3270207487,ES
+3270208512,3270209535,NL
+3270234112,3270242303,NL
+3270246400,3270377471,SE
3270377472,3270443007,GB
3270443008,3270508543,DK
-3270508544,3270522367,FI
-3270522368,3270522623,AX
-3270522624,3270639615,FI
+3270508544,3270639615,FI
3270639616,3270640127,PL
3270640128,3270642175,RU
3270642176,3270642687,NO
@@ -124789,10 +65187,8 @@
3270649856,3270650111,DK
3270650112,3270650367,AT
3270650368,3270650623,DK
-3270650624,3270651391,FR
-3270651392,3270651647,DE
+3270650624,3270651135,FR
3270651648,3270651903,FR
-3270651904,3270652415,IT
3270652416,3270652671,DK
3270652672,3270652927,CH
3270652928,3270653183,PL
@@ -124814,35 +65210,26 @@
3270670336,3270672383,RU
3270672384,3270680575,GB
3270680576,3270688767,FR
-3270688768,3270781343,IT
-3270781344,3270781359,RO
-3270781360,3270808127,IT
-3270808128,3270808159,LU
-3270808160,3270836223,IT
+3270688768,3270836223,IT
3270836224,3270901759,DE
-3270901760,3270905855,IT
-3270905856,3270906111,EU
-3270906112,3270909951,IT
-3270909952,3270911839,DE
+3270901760,3270909951,IT
+3270909952,3270911807,DE
3270911840,3270911871,PL
3270911872,3270911935,DE
3270911936,3270911967,PL
3270911968,3270911999,NL
-3270912000,3270913535,DE
-3270913536,3270913791,EU
-3270913792,3270920703,DE
+3270913024,3270920703,DE
3270920704,3270921215,UA
3270921216,3270921471,DK
3270921472,3270921727,UA
3270921728,3270922239,GB
-3270922240,3270926335,DE
-3270926336,3270926591,US
+3270922240,3270924287,DE
+3270926336,3270926591,AT
3270926592,3270926847,CH
3270926848,3270927103,PL
3270927104,3270927359,UA
3270927616,3270927871,FR
3270927872,3270928127,HU
-3270928128,3270928383,RO
3270928384,3270928895,UA
3270928896,3270929407,PL
3270929408,3270929919,GB
@@ -124909,190 +65296,30 @@
3271014400,3271014911,RU
3271015424,3271015935,DK
3271015936,3271016447,RU
-3271016448,3271024447,RS
-3271024448,3271024451,BA
-3271024452,3271024639,RS
+3271016448,3271024639,RS
3271024640,3271032831,GB
3271032832,3271098367,NO
3271098368,3271163903,SI
-3271163904,3271200767,FR
-3271200768,3271200775,GB
-3271200776,3271224319,FR
-3271224320,3271224575,MQ
-3271224576,3271229439,FR
-3271229440,3271249919,FI
-3271249920,3271250175,SE
-3271250176,3271280351,FI
-3271280352,3271280383,RU
-3271280384,3271280687,FI
+3271163904,3271229439,FR
+3271229440,3271280687,FI
3271280688,3271280703,SE
-3271280704,3271280719,FI
-3271280720,3271280735,SE
-3271280736,3271290623,FI
-3271290624,3271290879,BE
-3271290880,3271301631,FI
-3271301632,3271302143,AX
-3271302144,3271310079,FI
-3271310080,3271310335,DE
-3271310336,3271360511,FI
-3271360512,3271363407,GB
-3271363408,3271363415,AT
-3271363416,3271363423,GB
-3271363424,3271363455,IT
-3271363456,3271363471,GB
-3271363472,3271363487,ZA
-3271363488,3271363519,IT
-3271363520,3271363551,EU
-3271363552,3271363583,FR
-3271363584,3271365887,GB
-3271365888,3271366143,DE
-3271366144,3271366399,GB
-3271366400,3271366655,NL
-3271366656,3271371263,GB
-3271371264,3271371519,IE
-3271371520,3271371679,ZA
-3271371680,3271371711,DE
-3271371712,3271371775,CH
-3271371776,3271372031,GB
-3271372032,3271372287,BE
-3271372288,3271372799,FR
-3271372800,3271373055,SE
-3271373056,3271373311,BE
-3271373312,3271373567,GB
-3271373568,3271373823,FR
-3271373824,3271374079,DE
-3271374080,3271374335,BE
-3271374336,3271374847,DE
-3271374848,3271375359,GB
-3271375360,3271375871,CH
-3271375872,3271376383,BE
-3271376384,3271376447,GB
-3271376448,3271376463,FR
-3271376464,3271376479,IT
-3271376480,3271376511,FR
-3271376512,3271376639,DE
-3271376640,3271376895,AT
-3271376896,3271377407,ES
-3271377408,3271377919,NL
-3271377920,3271378687,BE
-3271378688,3271378943,SE
+3271280704,3271360511,FI
3271378944,3271380991,GB
-3271380992,3271381247,BE
-3271381248,3271381503,NO
-3271381504,3271381759,SE
-3271381760,3271382527,IT
-3271382528,3271383039,IL
-3271383040,3271383295,CH
-3271383296,3271383551,BE
-3271383552,3271384063,GB
-3271384064,3271384319,CH
-3271384320,3271384575,BE
-3271384576,3271384831,GB
-3271384832,3271385087,BE
-3271385088,3271385159,DE
-3271385160,3271385183,GB
-3271385184,3271385215,ES
-3271385216,3271385343,NL
-3271385344,3271391231,DE
-3271391232,3271391743,NL
-3271391744,3271391999,NO
-3271392000,3271392255,DE
-3271392256,3271392511,FR
-3271392512,3271392767,BE
-3271392768,3271393279,FR
-3271393280,3271393791,AT
-3271393792,3271394047,DK
-3271394048,3271394303,DE
-3271394304,3271394559,BE
-3271394560,3271394815,GB
-3271394816,3271395071,DE
-3271395072,3271395327,GB
-3271395328,3271396863,IT
-3271396864,3271397119,GB
-3271397120,3271397375,NL
-3271397376,3271397887,CH
-3271397888,3271397951,FR
-3271397952,3271397983,IT
-3271397984,3271397999,NL
-3271398000,3271398015,FR
-3271398016,3271398047,NL
-3271398048,3271398079,ZA
-3271398080,3271398143,GB
-3271398144,3271398303,NL
-3271398304,3271398335,DE
-3271398336,3271398399,IT
-3271398400,3271398911,DE
-3271398912,3271399167,GB
-3271399168,3271400959,BE
-3271400960,3271401215,CH
-3271401216,3271401471,DE
-3271401472,3271403263,DK
-3271403264,3271403519,DE
-3271403520,3271403775,NL
-3271403776,3271403903,ZA
-3271403904,3271403919,GB
-3271403920,3271403935,IE
-3271403936,3271403967,GB
-3271403968,3271403983,ZA
-3271403984,3271403991,GB
-3271403992,3271403999,ZA
-3271404000,3271404031,DE
-3271404032,3271405311,NL
-3271405312,3271405567,FR
-3271405568,3271405823,ES
-3271405824,3271406079,AT
-3271406080,3271406335,ZA
-3271406336,3271406591,RO
-3271406592,3271406847,GB
-3271406848,3271407615,AT
-3271407616,3271407871,DE
-3271407872,3271408127,AT
-3271408128,3271408383,DE
-3271408384,3271408639,FR
-3271408640,3271408895,BE
-3271408896,3271409151,ES
-3271409152,3271409407,IT
-3271409408,3271409663,GB
+3271389184,3271391231,DE
+3271395328,3271396351,IT
3271409664,3271417855,BE
-3271417856,3271424071,FR
-3271424072,3271424079,IT
-3271424080,3271424095,IE
-3271424096,3271424111,GB
-3271424112,3271424127,BE
-3271424128,3271424191,GB
-3271424192,3271424511,FR
-3271424512,3271425023,GB
-3271425024,3271425279,DE
-3271425280,3271425535,DK
-3271425536,3271426047,DE
-3271426048,3271426303,PF
-3271426304,3271491583,FR
-3271491584,3271497087,DK
-3271497088,3271497215,SE
-3271497216,3271501567,DK
-3271501568,3271501575,SE
-3271501576,3271501663,DK
-3271501664,3271501679,DE
-3271501680,3271501695,SE
-3271501696,3271501783,DK
-3271501784,3271501791,SE
-3271501792,3271513343,DK
-3271513344,3271513599,EU
-3271513600,3271557119,DK
+3271419904,3271421951,FR
+3271426048,3271491583,FR
+3271491584,3271557119,DK
3271557120,3271589887,BE
3271589888,3271688191,NO
-3271688192,3271691775,EU
3271691776,3271692031,US
3271692032,3271692287,GB
-3271692288,3271694591,EU
+3271694080,3271694335,IE
3271694592,3271695103,GB
-3271695104,3271696383,EU
3271696384,3271698431,GB
-3271698432,3271704575,EU
3271704576,3271712767,RU
-3271712768,3271716863,LV
-3271716864,3271717119,RU
-3271717120,3271720959,LV
+3271712768,3271720959,LV
3271720960,3271729151,GB
3271729152,3271737343,DE
3271737344,3271738367,RU
@@ -125103,7 +65330,8 @@
3271740416,3271740927,UA
3271740928,3271741439,RU
3271741440,3271741951,PL
-3271741952,3271743999,RU
+3271741952,3271742463,RU
+3271742976,3271743999,RU
3271744000,3271744511,RO
3271744512,3271745023,AT
3271745024,3271745535,PL
@@ -125115,7 +65343,6 @@
3271748096,3271748607,GR
3271748608,3271749119,UA
3271749120,3271750143,RU
-3271750144,3271750655,UA
3271750656,3271751167,GB
3271751168,3271751679,RO
3271751680,3271752191,NL
@@ -125143,7 +65370,6 @@
3271803904,3271804927,UA
3271804928,3271805951,PL
3271805952,3271806975,UA
-3271806976,3271807999,EU
3271808000,3271810047,DE
3271810048,3271811071,PL
3271811072,3271812095,UA
@@ -125168,7 +65394,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
@@ -125179,9 +65405,7 @@
3271926784,3271927295,SI
3271927296,3271927551,NO
3271927552,3271927807,GB
-3271927808,3271928063,TR
3271928064,3271928319,GB
-3271928320,3271928575,RU
3271928576,3271928831,CH
3271928832,3271929087,IE
3271929088,3271929343,LB
@@ -125201,54 +65425,29 @@
3271933184,3271933439,GB
3271933440,3271933695,SE
3271933696,3271933951,DE
-3271933952,3271977533,FR
-3271977534,3271977534,US
-3271977535,3272015871,FR
-3272015872,3272019967,RO
+3271933952,3272015871,FR
+3272015872,3272017407,RO
+3272017664,3272018943,RO
3272019968,3272020991,IT
3272020992,3272024063,DK
3272024064,3272032255,IE
3272032256,3272040447,SE
-3272040448,3272041885,FR
-3272041886,3272041886,EU
-3272041887,3272048639,FR
+3272040448,3272048639,FR
3272048640,3272056831,NL
3272056832,3272065023,RU
-3272065024,3272065631,GB
-3272065632,3272065663,NL
-3272065664,3272069503,GB
-3272069504,3272069567,NL
-3272069568,3272070143,GB
-3272070144,3272070175,NL
-3272070176,3272070239,GB
-3272070240,3272070255,NL
-3272070256,3272081407,GB
-3272081408,3272081919,PT
-3272081920,3272082687,CV
-3272082688,3272082943,AO
-3272082944,3272083455,PT
-3272083456,3272083711,ST
-3272083712,3272084025,PT
+3272065024,3272073727,GB
+3272073728,3272073855,IE
+3272073856,3272081407,GB
+3272081408,3272084025,PT
3272084026,3272084026,AO
-3272084027,3272084735,PT
-3272084736,3272084991,CV
-3272084992,3272086015,PT
-3272086016,3272086527,ST
-3272086528,3272086655,AO
-3272086656,3272086975,PT
-3272086976,3272087039,CW
-3272087040,3272087551,PT
+3272084027,3272087551,PT
3272087552,3272088575,MR
-3272088576,3272089343,PT
-3272089344,3272089479,ST
-3272089480,3272089535,PT
-3272089536,3272089551,ST
-3272089552,3272089599,PT
+3272088576,3272089599,PT
3272089600,3272090111,NO
3272090112,3272091647,RU
3272091648,3272092671,UA
3272092672,3272093183,RU
-3272093184,3272094207,RO
+3272093184,3272093695,RO
3272094208,3272094719,AM
3272094720,3272095231,PL
3272095232,3272095743,FI
@@ -125256,29 +65455,23 @@
3272096256,3272096767,PT
3272096768,3272097279,FI
3272097280,3272097791,RU
-3272097792,3272098519,GB
-3272098520,3272098527,FR
-3272098528,3272106239,GB
+3272097792,3272106239,GB
3272106240,3272106495,PL
3272106496,3272106751,SE
3272106752,3272107007,PL
3272107008,3272107263,GB
3272107264,3272107519,PL
-3272107520,3272107775,RU
3272107776,3272108031,GB
3272108032,3272108287,DE
3272108288,3272108543,RO
3272108544,3272109055,PL
3272109056,3272109311,CH
3272109312,3272109567,TR
-3272109568,3272109823,GB
3272109824,3272110079,FR
-3272110080,3272110335,SE
3272110336,3272110591,CH
-3272110592,3272110847,AT
3272110848,3272111103,LV
-3272111104,3272111871,GB
-3272111872,3272112383,RO
+3272111104,3272111615,GB
+3272112128,3272112383,RO
3272112384,3272113151,DE
3272113152,3272113407,FR
3272113408,3272113919,GB
@@ -125319,88 +65512,58 @@
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,3272213823,NL
-3272213824,3272213831,DE
-3272213832,3272213839,NL
-3272213840,3272213855,RU
-3272213856,3272213887,NL
-3272213888,3272214015,GB
+3272213760,3272214015,NL
3272214016,3272214271,ES
-3272214272,3272214527,GB
+3272214272,3272214351,GB
+3272214352,3272214407,FR
+3272214432,3272214463,SE
3272214528,3272215039,FR
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,3272217215,EU
3272217216,3272217279,BE
3272217280,3272217303,DE
3272217304,3272217311,BE
-3272217312,3272217599,EU
+3272217344,3272217599,GB
3272217600,3272217631,CH
-3272217632,3272217855,EU
3272217856,3272217875,ES
-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,3272218639,RU
-3272218640,3272218671,DE
-3272218672,3272218687,EU
3272218688,3272218719,DE
-3272218720,3272218879,EU
+3272218752,3272218879,GB
3272218880,3272219135,BE
3272219136,3272219391,NL
3272219392,3272219647,GB
@@ -125412,40 +65575,27 @@
3272221440,3272221447,SE
3272221448,3272221455,NO
3272221456,3272221463,SE
-3272221464,3272221695,EU
+3272221472,3272221495,SE
3272221696,3272221951,NL
3272221952,3272222207,GB
3272222208,3272222463,ES
3272222464,3272222719,NL
-3272222720,3272222975,DE
-3272222976,3272223015,GB
-3272223016,3272223023,EU
+3272222720,3272223015,GB
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,3272224383,GI
-3272224384,3272224511,EU
-3272224512,3272225279,GB
+3272223520,3272223551,HK
+3272223744,3272224255,GB
+3272224768,3272225023,GB
3272225280,3272225535,IT
3272225536,3272225791,GB
-3272225792,3272225855,EU
3272225856,3272225919,GB
-3272225920,3272226047,EU
+3272225920,3272226047,IT
3272226048,3272226815,FR
3272226816,3272227071,GB
-3272227072,3272227327,FR
+3272227072,3272227327,PT
3272227328,3272227359,US
3272227360,3272227511,GB
-3272227512,3272227519,EU
3272227520,3272227583,GB
3272227584,3272227839,FR
3272227840,3272228095,ES
@@ -125461,66 +65611,7 @@
3272228736,3272228799,NL
3272228800,3272228863,CH
3272228864,3272237055,LU
-3272237056,3272237823,GB
-3272237824,3272238079,IM
-3272238080,3272238591,GB
-3272238592,3272238847,IM
-3272238848,3272238919,GB
-3272238920,3272238975,IM
-3272238976,3272239039,GB
-3272239040,3272239103,IM
-3272239104,3272239687,GB
-3272239688,3272239695,IM
-3272239696,3272239703,GB
-3272239704,3272239711,IM
-3272239712,3272239775,GB
-3272239776,3272239799,IM
-3272239800,3272240127,GB
-3272240128,3272240367,IM
-3272240368,3272240575,GB
-3272240576,3272240639,GH
-3272240640,3272240703,IM
-3272240704,3272240767,GB
-3272240768,3272240895,IM
-3272240896,3272241159,GB
-3272241160,3272241167,IM
-3272241168,3272241215,GB
-3272241216,3272241247,IM
-3272241248,3272241279,GB
-3272241280,3272241295,IM
-3272241296,3272241391,GB
-3272241392,3272241919,IM
-3272241920,3272242215,GB
-3272242216,3272242223,IM
-3272242224,3272242239,GB
-3272242240,3272242591,IM
-3272242592,3272242607,GB
-3272242608,3272242623,IM
-3272242624,3272242655,GB
-3272242656,3272242719,IM
-3272242720,3272242735,GB
-3272242736,3272242751,IM
-3272242752,3272242783,GB
-3272242784,3272242943,IM
-3272242944,3272243207,GB
-3272243208,3272243215,IM
-3272243216,3272243231,GB
-3272243232,3272243263,IM
-3272243264,3272243327,GB
-3272243328,3272243455,IM
-3272243456,3272244015,GB
-3272244016,3272244031,IM
-3272244032,3272244039,GB
-3272244040,3272244047,IM
-3272244048,3272244071,GB
-3272244072,3272244079,IM
-3272244080,3272244111,GB
-3272244112,3272244127,IM
-3272244128,3272244151,GB
-3272244152,3272244159,IM
-3272244160,3272244175,GB
-3272244176,3272244215,IM
-3272244216,3272245247,GB
+3272237056,3272245247,IM
3272245248,3272261631,FI
3272261632,3272261887,MT
3272261888,3272262143,BG
@@ -125538,25 +65629,18 @@
3272265216,3272265471,AT
3272265472,3272265727,DK
3272265728,3272265983,DE
-3272265984,3272266239,GB
3272266240,3272266495,UA
3272266496,3272266751,SE
3272266752,3272267007,NL
3272267008,3272267263,GB
3272267264,3272267519,RU
-3272267520,3272267775,GB
3272267776,3272268031,LV
3272268032,3272268287,MT
3272268288,3272268543,UA
-3272268544,3272268799,RO
3272268800,3272269055,IL
3272269056,3272269311,GB
3272269312,3272269567,IL
-3272269568,3272293631,GB
-3272293632,3272293887,AU
-3272293888,3272339711,GB
-3272339712,3272339775,NL
-3272339776,3272351743,GB
+3272269568,3272351743,GB
3272351744,3272352767,PL
3272352768,3272353791,UA
3272353792,3272355839,CH
@@ -125566,68 +65650,22 @@
3272358912,3272359935,NL
3272359936,3272368127,RU
3272368128,3272376319,KZ
-3272376320,3272376463,SK
-3272376464,3272376479,SR
-3272376480,3272376495,SK
-3272376496,3272376527,SR
-3272376528,3272376535,SK
-3272376536,3272376543,SR
-3272376544,3272376607,SK
-3272376608,3272376639,SR
-3272376640,3272376735,SK
-3272376736,3272376751,SR
-3272376752,3272376767,SK
-3272376768,3272376831,SR
-3272376832,3272378183,SK
-3272378184,3272378201,SR
-3272378202,3272384511,SK
+3272376320,3272384511,SK
3272384512,3272392703,LT
3272392704,3272400895,AT
-3272400896,3272400911,EU
-3272400912,3272400935,GB
-3272400936,3272401007,EU
-3272401008,3272401023,SE
-3272401024,3272401087,GB
-3272401088,3272401215,EU
-3272401216,3272401247,PL
-3272401248,3272401279,EU
-3272401280,3272401407,NL
-3272401408,3272401951,EU
-3272401952,3272401967,SE
-3272401968,3272401983,GB
-3272401984,3272402031,DE
-3272402032,3272402039,EU
-3272402040,3272402047,US
-3272402048,3272402079,EU
-3272402080,3272402111,SE
-3272402112,3272402175,EU
-3272402176,3272402191,GB
-3272402192,3272402303,EU
-3272402304,3272402431,FR
-3272402432,3272402447,EU
-3272402448,3272402455,FR
-3272402456,3272402559,EU
-3272402560,3272402623,GB
-3272402624,3272402687,EU
+3272400912,3272400919,GB
+3272402432,3272402687,GB
3272402688,3272402815,SE
-3272402816,3272403007,EU
-3272403008,3272403023,FR
-3272403024,3272403039,EU
-3272403040,3272403055,DE
-3272403056,3272403071,NL
-3272403072,3272403199,EU
-3272403200,3272403455,SE
-3272403456,3272404991,FR
+3272403968,3272404991,FR
3272404992,3272406015,DE
3272406016,3272407039,NL
-3272407040,3272409087,EU
3272409088,3272417279,BE
3272417280,3272418687,FR
3272418688,3272419327,PL
-3272419328,3272420863,DE
+3272419328,3272420351,DE
+3272420608,3272420863,DE
3272420864,3272420991,PL
3272420992,3272421119,DK
-3272421120,3272421375,UA
3272421376,3272421887,RO
3272421888,3272422143,RU
3272422144,3272422399,GB
@@ -125635,19 +65673,18 @@
3272422912,3272423423,SE
3272423424,3272423935,BE
3272423936,3272424447,FR
-3272424448,3272426655,GB
-3272426656,3272426671,IL
-3272426672,3272441855,GB
+3272424448,3272424703,GB
+3272424704,3272425471,DE
+3272425472,3272441855,GB
3272441856,3272474623,LV
3272474624,3272474879,FR
3272474880,3272475135,NL
3272475136,3272475391,RU
3272475392,3272475903,PL
3272475904,3272476159,FR
-3272476160,3272476671,RO
+3272476160,3272476415,RO
3272476672,3272476927,DE
3272476928,3272477183,GR
-3272477184,3272477439,GB
3272477440,3272477695,PL
3272477696,3272477951,RU
3272477952,3272478207,RO
@@ -125659,10 +65696,9 @@
3272479488,3272479743,SA
3272479744,3272480255,SE
3272480256,3272480511,FR
-3272480512,3272480767,GB
+3272480512,3272480767,CH
3272480768,3272481023,DE
3272481024,3272481279,SE
-3272481280,3272481535,CH
3272481536,3272481791,FR
3272481792,3272482047,IT
3272482048,3272482303,NL
@@ -125676,7 +65712,6 @@
3272500736,3272501247,IT
3272501248,3272502783,RU
3272502784,3272503295,KW
-3272503296,3272503807,UA
3272503808,3272504319,RU
3272504320,3272504831,PL
3272504832,3272505343,RU
@@ -125686,106 +65721,23 @@
3272507392,3272515583,CY
3272515584,3272523775,LT
3272523776,3272540159,DE
-3272540160,3272552735,CH
-3272552736,3272552743,FR
-3272552744,3272552879,CH
-3272552880,3272552887,FR
-3272552888,3272553471,CH
-3272553472,3272553487,FR
-3272553488,3272554779,CH
-3272554780,3272554783,FR
-3272554784,3272555247,CH
-3272555248,3272555255,FR
-3272555256,3272555407,CH
-3272555408,3272555423,FR
-3272555424,3272556599,CH
-3272556600,3272556607,FR
-3272556608,3272568079,CH
-3272568080,3272568095,FR
-3272568096,3272572879,CH
-3272572880,3272572895,FR
-3272572896,3272605695,CH
+3272540160,3272605695,CH
3272605696,3272613887,BE
3272613888,3272622079,RU
-3272622080,3272623103,RO
3272623104,3272624127,DE
3272624128,3272625151,RU
3272625152,3272626175,UA
3272626176,3272627199,DE
3272627200,3272628223,NL
3272628224,3272629247,UA
-3272629248,3272633983,RU
-3272633984,3272634047,KZ
-3272634048,3272638463,RU
+3272629248,3272638463,RU
3272638464,3272646655,ES
-3272646656,3272646784,DE
-3272646785,3272646911,GB
-3272646912,3272647423,DE
-3272647424,3272649215,GB
-3272649216,3272649471,IE
-3272649472,3272649727,SA
-3272649728,3272650623,GB
-3272650624,3272650639,FR
-3272650640,3272650655,GB
-3272650656,3272650751,DE
-3272650752,3272651135,GB
-3272651136,3272651151,CH
-3272651152,3272651183,GB
-3272651184,3272651191,NL
-3272651192,3272651231,GB
-3272651232,3272651239,UZ
-3272651240,3272652287,GB
-3272652288,3272652799,FR
-3272652800,3272653055,GB
-3272653056,3272653087,CH
-3272653088,3272653247,GB
-3272653248,3272653279,FR
-3272653280,3272653311,GB
-3272653312,3272653439,SE
-3272653440,3272653447,GB
-3272653448,3272653455,IE
-3272653456,3272653463,DE
-3272653464,3272653543,GB
-3272653544,3272653551,NL
-3272653552,3272653567,GB
-3272653568,3272653631,SE
-3272653632,3272653663,FR
-3272653664,3272653695,DE
-3272653696,3272653727,IT
-3272653728,3272653759,NL
-3272653760,3272653791,DK
-3272653792,3272653823,GB
-3272653824,3272653951,FR
-3272653952,3272654207,DE
-3272654208,3272654335,FR
-3272654336,3272654463,ES
-3272654464,3272654591,GB
-3272654592,3272654719,NO
-3272654720,3272654783,IT
-3272654784,3272654847,NL
+3272646656,3272647385,GB
+3272647386,3272647386,DE
+3272647387,3272654847,GB
3272654848,3272663039,FI
3272663040,3272671231,AT
-3272671232,3272704255,SE
-3272704256,3272705279,IE
-3272705280,3272705535,SE
-3272705536,3272707071,IE
-3272707072,3272707327,SE
-3272707328,3272707583,IE
-3272707584,3272712191,SE
-3272712192,3272712447,GB
-3272712448,3272712703,SE
-3272712704,3272712959,GB
-3272712960,3272713215,SE
-3272713216,3272713983,GB
-3272713984,3272714495,SE
-3272714496,3272714751,GB
-3272714752,3272715015,SE
-3272715016,3272715023,GB
-3272715024,3272715135,SE
-3272715136,3272715263,GB
-3272715264,3272733983,SE
-3272733984,3272733991,RU
-3272733992,3272736767,SE
+3272671232,3272736767,SE
3272736768,3272737791,IT
3272737792,3272738815,GB
3272738816,3272739839,IL
@@ -125806,10 +65758,8 @@
3272876032,3272884223,NL
3272884224,3272892415,DE
3272892416,3272892927,UA
-3272892928,3272893439,DE
3272893440,3272893951,SE
3272893952,3272894463,UA
-3272894464,3272894975,FR
3272894976,3272895487,RO
3272895488,3272895999,GB
3272896000,3272896511,PL
@@ -125832,10 +65782,8 @@
3272902912,3272903167,RU
3272903168,3272903423,PL
3272903424,3272903679,AT
-3272903680,3272903935,RU
-3272903936,3272904191,DK
+3272903680,3272904191,RU
3272904192,3272904447,SI
-3272904448,3272904703,BE
3272904704,3272904959,NL
3272904960,3272905215,RO
3272905216,3272905727,CH
@@ -125851,12 +65799,7 @@
3272908032,3272908287,CH
3272908288,3272908543,AT
3272908544,3272908799,DE
-3272908800,3272909055,NO
-3272909056,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
@@ -125872,13 +65815,8 @@
3272923648,3272924159,PL
3272924160,3272924671,DE
3272924672,3272925183,GB
-3272925184,3272931135,DE
-3272931136,3272931151,GB
-3272931152,3272933375,DE
-3272933376,3272934399,FI
-3272934400,3272940287,GB
-3272940288,3272940543,DE
-3272940544,3272998911,GB
+3272925184,3272933375,DE
+3272933376,3272998911,GB
3272998912,3273007103,PT
3273007104,3273015295,CZ
3273015296,3273023487,SE
@@ -125888,10 +65826,8 @@
3273026560,3273028607,UA
3273028608,3273029631,PL
3273029632,3273029887,CH
-3273029888,3273029897,GB
-3273029898,3273029898,EU
-3273029899,3273030143,GB
-3273030144,3273030655,RU
+3273029888,3273030143,GB
+3273030400,3273030655,RU
3273030656,3273031679,PL
3273031680,3273032191,GB
3273032192,3273033215,UA
@@ -125902,45 +65838,11 @@
3273035264,3273035775,DE
3273035776,3273036287,FR
3273036288,3273036799,BG
-3273036800,3273037311,IL
3273037312,3273037823,GB
-3273037824,3273038335,UA
3273038336,3273038847,GR
3273038848,3273039871,GB
3273039872,3273048063,LT
-3273048064,3273048319,IT
-3273048320,3273048575,GR
-3273048576,3273048831,IT
-3273048832,3273049087,US
-3273049088,3273049855,IT
-3273049856,3273050111,US
-3273050112,3273050783,IT
-3273050784,3273050879,GR
-3273050880,3273051647,IT
-3273051648,3273051903,US
-3273051904,3273051967,IE
-3273051968,3273052039,IT
-3273052040,3273052047,NL
-3273052048,3273052063,GR
-3273052064,3273052095,IT
-3273052096,3273052127,GR
-3273052128,3273052415,IT
-3273052416,3273052671,GB
-3273052672,3273052927,FR
-3273052928,3273053183,DE
-3273053184,3273053439,CH
-3273053440,3273053695,NL
-3273053696,3273053951,BE
-3273053952,3273054207,AT
-3273054208,3273054463,US
-3273054464,3273054719,ES
-3273054720,3273054975,IT
-3273054976,3273055231,BR
-3273055232,3273055487,AR
-3273055488,3273055743,CL
-3273055744,3273055999,US
-3273056000,3273056127,IT
-3273056128,3273056255,HK
+3273048064,3273056255,IT
3273056256,3273064447,MD
3273064448,3273129983,PT
3273129984,3273138175,DK
@@ -125963,17 +65865,13 @@
3273192448,3273192959,DK
3273192960,3273193471,FR
3273193472,3273193983,PL
-3273193984,3273194495,EU
3273194496,3273195007,UA
3273195008,3273195519,RU
-3273195520,3273225727,FR
-3273225728,3273225983,GF
-3273225984,3273261055,FR
+3273195520,3273261055,FR
3273261056,3273261567,NO
3273261568,3273262079,BE
3273262080,3273262591,LU
3273262592,3273263103,RU
-3273263104,3273263615,FR
3273263616,3273264127,SE
3273264128,3273264639,PL
3273264640,3273265151,AT
@@ -125984,11 +65882,8 @@
3273267712,3273268223,GB
3273268224,3273268735,SE
3273268736,3273269247,RU
-3273269248,3273276119,GB
-3273276120,3273276127,US
-3273276128,3273277439,GB
+3273269248,3273277439,GB
3273277440,3273278463,UA
-3273278464,3273279487,RU
3273279488,3273281535,PL
3273281536,3273283583,UA
3273283584,3273284607,GB
@@ -125999,221 +65894,137 @@
3273310208,3273318399,AT
3273318400,3273326591,GB
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,3273328511,EU
+3273327376,3273327423,IE
+3273327424,3273327511,GB
+3273327520,3273327551,IE
+3273327552,3273327583,GB
+3273327584,3273327615,IE
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
+3273328640,3273329423,GB
3273329424,3273329439,DE
3273329440,3273330175,GB
3273330176,3273330183,IR
-3273330184,3273330191,IE
-3273330192,3273330199,GB
+3273330184,3273330199,GB
3273330200,3273330223,IE
3273330224,3273330271,GB
3273330272,3273330431,IE
3273330432,3273331199,GB
-3273331200,3273331711,EU
-3273331712,3273331967,GB
+3273331712,3273331743,GB
+3273331752,3273331791,GB
+3273331808,3273331823,GB
+3273331832,3273331887,GB
+3273331904,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,3273335039,EU
+3273334784,3273335039,AE
3273335040,3273335295,DE
-3273335296,3273335807,GB
-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
+3273339136,3273339391,DE
+3273339392,3273340415,GB
3273340928,3273341695,FR
3273341696,3273341951,DE
-3273341952,3273342463,EU
+3273341952,3273342207,GB
+3273342208,3273342231,AE
3273342464,3273342975,DE
3273342976,3273343999,GB
3273344000,3273344767,DE
-3273344768,3273345023,EU
3273345024,3273345279,DE
-3273345280,3273346815,EU
+3273346560,3273346815,OM
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
+3273357312,3273358335,GB
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,3273367295,EU
3273367296,3273367423,DE
-3273367424,3273367551,EU
3273367552,3273367567,DE
-3273367568,3273368063,EU
3273368064,3273368575,DE
-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,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,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
+3273390368,3273390463,DE
3273391104,3273391359,DE
-3273391360,3273391871,EU
3273391872,3273392127,DE
3273392128,3273392639,PL
3273392640,3273393663,RO
-3273393664,3273394175,BG
3273394176,3273394687,RO
-3273394688,3273395199,RU
3273395200,3273395711,DE
3273395712,3273396223,RU
3273396224,3273396735,PL
@@ -126230,102 +66041,49 @@
3273433600,3273434111,RO
3273434112,3273434623,BE
3273434624,3273435135,IL
-3273435136,3273435647,GB
3273435648,3273436159,PL
3273436160,3273436671,NO
3273436672,3273437183,DE
3273437184,3273437695,RO
-3273437696,3273438207,PL
3273438208,3273438719,IL
3273438720,3273439231,RU
3273439232,3273439743,RO
3273439744,3273440255,DE
3273440256,3273440767,RO
-3273440768,3273441279,AT
-3273441280,3273445375,FR
-3273445376,3273447423,GB
-3273447424,3273449471,FR
-3273449472,3273449727,GB
-3273449728,3273457663,CH
+3273440768,3273441023,AT
+3273441024,3273441279,PL
+3273441280,3273449471,FR
+3273449472,3273457663,CH
3273457664,3273523199,HR
3273523200,3273588735,DE
3273588736,3273687039,IT
3273687040,3273719807,DE
-3273719808,3273719879,NL
-3273719880,3273719887,GB
-3273719888,3273719935,NL
-3273719936,3273719999,GB
-3273720000,3273720127,NL
-3273720128,3273720159,GB
-3273720160,3273720831,NL
+3273719808,3273720831,NL
3273720832,3273720847,IE
-3273720848,3273721855,NL
-3273721856,3273722367,GB
-3273722368,3273726399,NL
-3273726400,3273726431,GB
-3273726432,3273726719,NL
+3273720848,3273726719,NL
3273726720,3273726975,GB
-3273726976,3273727071,NL
-3273727072,3273727079,DK
-3273727080,3273727087,FR
+3273726976,3273727087,DK
3273727088,3273727088,GB
3273727089,3273727095,ES
-3273727096,3273727103,DE
-3273727104,3273727119,NL
+3273727096,3273727119,DK
3273727120,3273727127,PT
-3273727128,3273727135,FI
-3273727136,3273727143,NO
-3273727144,3273727151,CZ
-3273727152,3273727183,IT
-3273727184,3273727231,NL
-3273727232,3273727239,GB
-3273727240,3273728255,NL
-3273728256,3273728511,GB
-3273728512,3273728590,NL
-3273728591,3273728592,EU
-3273728593,3273732095,NL
+3273727128,3273727135,DK
+3273727136,3273727167,IT
+3273727168,3273727231,DK
+3273727232,3273732095,NL
3273732096,3273736191,GB
-3273736192,3273743359,FR
-3273743360,3273743615,JO
-3273743616,3273744383,FR
-3273744384,3273744799,GB
-3273744800,3273744807,DE
-3273744808,3273746943,GB
-3273746944,3273747199,EU
-3273747200,3273748751,GB
-3273748752,3273748767,DE
-3273748768,3273749631,GB
-3273749632,3273749759,FR
-3273749760,3273751455,GB
-3273751456,3273751471,AU
-3273751472,3273751487,FI
-3273751488,3273751951,GB
-3273751952,3273751959,FI
-3273751960,3273751999,GB
-3273752000,3273752015,AU
-3273752016,3273752063,GB
-3273752064,3273752071,IE
-3273752072,3273752239,GB
-3273752240,3273752255,AU
-3273752256,3273752335,GB
-3273752336,3273752343,IE
-3273752344,3273752575,GB
-3273752576,3273752831,NL
-3273752832,3273753087,EU
-3273753088,3273753343,NL
-3273753344,3273753599,EU
-3273753600,3273755647,NL
-3273755648,3273755903,EU
-3273755904,3273760767,NL
+3273736192,3273744383,FR
+3273744384,3273746943,GB
+3273746944,3273747199,NL
+3273747200,3273752575,GB
+3273752576,3273760767,NL
3273760768,3273762303,DE
-3273762304,3273762559,EU
+3273762304,3273762559,NL
3273762560,3273768959,DE
3273768960,3273785343,TR
3273785344,3273801727,RU
3273801728,3273802239,DE
-3273802240,3273802751,RO
3273802752,3273803263,SA
-3273803264,3273803775,ES
3273803776,3273804287,CH
3273804288,3273804799,UA
3273804800,3273805311,RO
@@ -126340,12 +66098,10 @@
3273809408,3273809919,UA
3273809920,3273818111,BG
3273818112,3273826303,AT
-3273826304,3273831231,DE
-3273831232,3273831247,PL
-3273831248,3273831263,LV
-3273831264,3273834495,DE
+3273826304,3273834495,DE
3273834496,3273835519,RU
-3273835520,3273838591,UA
+3273835520,3273836543,UA
+3273837568,3273838591,UA
3273838592,3273839615,PL
3273839616,3273840639,LT
3273840640,3273841663,PL
@@ -126384,7 +66140,6 @@
3273879552,3273880063,GB
3273880064,3273880575,NL
3273880576,3273881087,RU
-3273881088,3273881343,RO
3273881600,3273881855,GB
3273881856,3273882111,CH
3273882112,3273882367,SI
@@ -126396,8 +66151,6 @@
3273932800,3273949183,DE
3273949184,3273981951,FR
3273981952,3274047487,DE
-3274047488,3274049535,SE
-3274049536,3274050559,DE
3274050560,3274051583,PL
3274051584,3274052351,UA
3274052352,3274052607,GB
@@ -126416,24 +66169,19 @@
3274088448,3274096639,KG
3274096640,3274113023,NL
3274113024,3274145791,CZ
-3274145792,3274150911,KW
-3274150912,3274151167,US
-3274151168,3274152447,KW
-3274152448,3274152703,US
-3274152704,3274162175,KW
+3274145792,3274162175,KW
3274162176,3274162687,GB
-3274162688,3274163199,DE
3274163200,3274163711,UA
3274163712,3274164223,BG
3274164224,3274164735,AT
3274165248,3274165759,GB
3274165760,3274166271,RU
-3274166272,3274166783,RO
+3274166272,3274166783,AT
3274166784,3274167295,UA
3274167296,3274167807,BG
3274168320,3274168831,PL
3274168832,3274169343,DZ
-3274169344,3274170367,DE
+3274169856,3274170367,DE
3274170368,3274170879,TR
3274170880,3274171391,DE
3274171392,3274171903,RU
@@ -126447,17 +66195,9 @@
3274175488,3274175999,BE
3274176000,3274176511,DE
3274176512,3274177023,UA
-3274177024,3274177535,FR
-3274177536,3274178047,UA
3274178048,3274178559,NL
-3274178560,3274204063,GB
-3274204064,3274204095,FR
-3274204096,3274227199,GB
-3274227200,3274227455,A2
-3274227456,3274244095,GB
-3274244096,3274255106,DK
-3274255107,3274255107,EU
-3274255108,3274309631,DK
+3274178560,3274244095,GB
+3274244096,3274309631,DK
3274309632,3274326015,FR
3274326016,3274334719,RU
3274334720,3274335231,PL
@@ -126488,12 +66228,12 @@
3274347520,3274348031,FR
3274348032,3274348543,DK
3274348544,3274349055,PL
-3274349056,3274358783,RU
+3274349056,3274350079,RU
+3274350592,3274358783,RU
3274358784,3274366975,SE
3274366976,3274368511,NL
3274368512,3274368767,AT
3274368768,3274369023,FR
-3274369024,3274370047,DE
3274370048,3274371071,GB
3274371072,3274373375,NL
3274373376,3274373631,PL
@@ -126519,8 +66259,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
@@ -126534,7 +66273,7 @@
3274410496,3274410751,NL
3274410752,3274411007,AT
3274411008,3274411263,CH
-3274411264,3274411519,LI
+3274411264,3274411519,DE
3274411520,3274412031,PL
3274412032,3274412287,RU
3274412288,3274412543,NO
@@ -126556,159 +66295,84 @@
3274424320,3274435711,SE
3274435712,3274435839,US
3274435840,3274440703,SE
-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,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,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
+3274490176,3274490895,GB
+3274490912,3274491199,GB
+3274491208,3274491247,GB
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
@@ -126726,9 +66390,7 @@
3274604544,3274612735,TR
3274612736,3274620927,RU
3274620928,3274629119,FR
-3274629120,3274637175,LU
-3274637176,3274637183,A2
-3274637184,3274637311,LU
+3274629120,3274637311,LU
3274637312,3274670079,CZ
3274670080,3274686463,DK
3274686464,3274686719,RU
@@ -126751,15 +66413,12 @@
3274690816,3274691071,ES
3274691072,3274691327,DK
3274691328,3274691583,SI
-3274691584,3274691839,UA
3274691840,3274692095,SI
3274692096,3274692351,RO
3274692352,3274692607,BE
-3274692608,3274692863,DK
3274692864,3274693119,AT
-3274693120,3274693375,LT
3274693376,3274693631,UA
-3274693632,3274693887,KZ
+3274693632,3274693887,RU
3274693888,3274694143,IT
3274694144,3274694399,DK
3274694400,3274694655,GB
@@ -126778,10 +66437,8 @@
3274697728,3274697983,ES
3274697984,3274698239,GB
3274698240,3274698495,SE
-3274698496,3274698751,PL
3274698752,3274699007,GB
3274699008,3274699263,FR
-3274699264,3274699519,RO
3274699520,3274699775,SI
3274699776,3274700031,GB
3274700032,3274700287,CH
@@ -126789,14 +66446,12 @@
3274700544,3274700799,DK
3274700800,3274701055,UA
3274701056,3274701311,DE
-3274701312,3274701567,TJ
3274701568,3274701823,IT
3274701824,3274702079,IL
3274702080,3274702335,UA
3274702336,3274702591,SE
3274702592,3274702847,KZ
3274702848,3274801151,CH
-3274801152,3274802175,UA
3274802176,3274803199,FR
3274803200,3274804223,DE
3274804224,3274805247,FR
@@ -126811,8 +66466,11 @@
3274814464,3274815487,GB
3274815488,3274816511,RU
3274816512,3274817535,SK
-3274817536,3274819583,RU
-3274819584,3274821631,UA
+3274817536,3274819839,RU
+3274819840,3274820095,UA
+3274820096,3274821119,RU
+3274821120,3274821375,UA
+3274821376,3274821631,RU
3274821632,3274823679,KZ
3274823680,3274825727,TR
3274825728,3274827775,DE
@@ -126823,185 +66481,18 @@
3274850304,3274866687,GB
3274866688,3274883071,DE
3274883072,3274899455,EE
-3274899456,3274902399,DE
-3274902400,3274902423,AT
-3274902424,3274902527,EU
-3274902528,3274909695,DE
-3274909696,3274910207,EU
-3274910208,3274910975,DE
-3274910976,3274911231,EU
-3274911232,3274911743,DE
-3274911744,3274911999,FR
-3274912000,3274912031,GB
-3274912032,3274912063,DE
-3274912064,3274912191,FR
-3274912192,3274912287,DE
-3274912288,3274912295,LU
-3274912296,3274912303,GB
-3274912304,3274912447,FR
-3274912448,3274912511,NL
-3274912512,3274912767,FR
-3274912768,3274912799,DE
-3274912800,3274912831,IT
-3274912832,3274912895,FR
-3274912896,3274913023,RO
-3274913024,3274913279,FR
-3274913280,3274914815,DE
-3274914816,3274915071,EU
-3274915072,3274915839,DE
-3274915840,3274916735,NL
-3274916736,3274916863,DE
-3274916864,3274917215,NL
-3274917216,3274917311,GB
-3274917312,3274917327,ZA
-3274917328,3274917335,CH
-3274917336,3274917343,GB
-3274917344,3274917375,SE
-3274917376,3274917887,NL
-3274917888,3274918399,BE
-3274918400,3274918655,IT
-3274918656,3274918911,BE
-3274918912,3274919359,CH
-3274919360,3274919391,EU
-3274919392,3274919423,CH
-3274919424,3274919935,GB
-3274919936,3274921983,BE
-3274921984,3274922847,ZA
-3274922848,3274922863,BE
-3274922864,3274922871,GB
-3274922872,3274922879,IT
-3274922880,3274922943,ZA
-3274922944,3274923007,NL
-3274923008,3274923263,EU
+3274903552,3274908671,DE
+3274913792,3274914815,DE
+3274920960,3274921983,BE
3274923264,3274924031,NL
-3274924032,3274928127,FR
-3274928128,3274928511,ES
-3274928512,3274928575,RU
-3274928576,3274928639,GB
-3274928640,3274929151,ES
-3274929152,3274929407,EU
-3274929408,3274929663,FR
-3274929664,3274930175,BE
-3274930176,3274932223,IT
-3274932224,3274932991,GB
-3274932992,3274933151,DE
-3274933152,3274933183,CH
-3274933184,3274933215,ZA
-3274933216,3274933247,BE
-3274933248,3274936063,GB
-3274936064,3274936159,SE
-3274936160,3274936175,GB
-3274936176,3274936191,EU
-3274936192,3274936863,GB
-3274936864,3274936871,BE
-3274936872,3274936879,CH
-3274936880,3274936895,SE
-3274936896,3274938367,GB
-3274938368,3274938495,EU
-3274938496,3274938535,GB
-3274938536,3274938543,FR
-3274938544,3274938559,GB
-3274938560,3274938623,EU
-3274938624,3274938879,GB
-3274938880,3274939135,DE
-3274939136,3274939391,IT
+3274926080,3274928127,FR
3274939392,3274940415,ZA
-3274940416,3274941055,DE
-3274941056,3274941087,NL
-3274941088,3274941095,EU
-3274941096,3274941103,IT
-3274941104,3274942463,DE
-3274942464,3274944511,FR
+3274941440,3274942463,DE
+3274942464,3274943487,FR
3274944512,3274948607,NL
-3274948608,3274952447,DK
-3274952448,3274952479,SE
-3274952480,3274952511,FR
-3274952512,3274952527,GB
-3274952528,3274952543,BE
-3274952544,3274952575,GB
-3274952576,3274952703,IT
-3274952704,3274954239,AT
-3274954240,3274954399,NL
-3274954400,3274954415,BE
-3274954416,3274954431,GB
-3274954432,3274954495,PT
-3274954496,3274954623,AT
-3274954624,3274954751,NL
-3274954752,3274955007,SE
-3274955008,3274955263,EU
-3274955264,3274956287,SE
-3274956288,3274956543,GB
-3274956544,3274956615,BE
-3274956616,3274956623,AT
-3274956624,3274956639,DE
-3274956640,3274956655,GB
-3274956656,3274956671,FR
-3274956672,3274956735,DE
-3274956736,3274956767,DK
-3274956768,3274956799,SE
-3274956800,3274957055,CH
-3274957056,3274957567,AT
-3274957568,3274957823,CH
-3274957824,3274957831,GR
-3274957832,3274957951,EU
-3274957952,3274957959,BE
-3274957960,3274957967,EU
-3274957968,3274957983,FR
-3274957984,3274957999,BE
-3274958000,3274958007,GB
-3274958008,3274958015,BE
-3274958016,3274958079,EU
-3274958080,3274958279,IE
-3274958280,3274958287,EU
-3274958288,3274958335,IE
-3274958336,3274959231,AT
-3274959232,3274959247,IT
-3274959248,3274959255,GB
-3274959256,3274959263,ZA
-3274959264,3274959271,EU
-3274959272,3274959279,GB
-3274959280,3274959287,DE
-3274959288,3274959295,GB
-3274959296,3274959327,ES
-3274959328,3274959615,DE
-3274959616,3274960383,EU
-3274960384,3274960447,BE
-3274960448,3274960511,ES
-3274960512,3274960575,GB
-3274960576,3274960639,IT
-3274960640,3274961407,AT
-3274961408,3274961503,CH
-3274961504,3274961535,DK
-3274961536,3274961559,CH
-3274961560,3274961567,EU
-3274961568,3274961663,CH
-3274961664,3274961727,BY
-3274961728,3274961919,EU
-3274961920,3274962111,AT
-3274962112,3274962175,GB
-3274962176,3274962431,ZA
-3274962432,3274962687,BE
-3274962688,3274962879,GR
-3274962880,3274963167,GB
-3274963168,3274963183,IE
-3274963184,3274963191,GB
-3274963192,3274963199,NL
-3274963200,3274963455,DE
-3274963456,3274963711,CH
-3274963712,3274963743,DE
-3274963744,3274963775,FR
-3274963776,3274963783,GB
-3274963784,3274963791,BE
-3274963792,3274963807,NL
-3274963808,3274963839,IT
-3274963840,3274963967,DE
-3274963968,3274964223,FR
-3274964224,3274964735,BE
-3274964736,3274964863,GB
-3274964864,3274964879,HU
-3274964880,3274964895,FR
-3274964896,3274964927,NL
-3274964928,3274964991,GB
+3274948608,3274951679,DK
+3274952704,3274953727,AT
+3274958080,3274958207,IE
3274964992,3275030527,DE
3275030528,3275096063,ES
3275096064,3275104767,RU
@@ -127020,13 +66511,8 @@
3275110912,3275111423,GB
3275111424,3275111935,IT
3275111936,3275112447,FR
-3275112448,3275117581,DK
-3275117582,3275117582,EU
-3275117583,3275120639,DK
-3275120640,3275136639,SE
-3275136640,3275136767,DK
-3275136768,3275137023,SE
-3275137024,3275137535,DE
+3275112448,3275120639,DK
+3275120640,3275137023,SE
3275137536,3275138047,UA
3275138048,3275138559,DE
3275138560,3275139071,UA
@@ -127042,15 +66528,9 @@
3275145216,3275153407,RU
3275153408,3275161599,GB
3275161600,3275227135,ES
-3275227136,3275246847,HU
-3275246848,3275247103,EU
-3275247104,3275262975,HU
-3275262976,3275263231,EU
-3275263232,3275292671,HU
+3275227136,3275292671,HU
3275292672,3275358207,ES
-3275358208,3275371775,RU
-3275371776,3275372031,TJ
-3275372032,3275374591,RU
+3275358208,3275374591,RU
3275374592,3275382783,GB
3275382784,3275390975,SE
3275390976,3275399167,GB
@@ -127058,87 +66538,82 @@
3275407360,3275415551,GB
3275415552,3275423743,UA
3275423744,3275423751,GB
-3275423752,3275423775,EU
-3275423776,3275423839,GB
-3275423840,3275423871,EU
-3275423872,3275424743,GB
-3275424744,3275424751,EU
+3275423808,3275423839,GB
+3275423872,3275424735,GB
3275424752,3275425343,GB
-3275425344,3275425535,EU
3275425536,3275425559,GB
-3275425560,3275425791,EU
-3275425792,3275428407,GB
-3275428408,3275428415,EU
+3275425568,3275425583,GB
+3275425792,3275426559,GB
+3275426576,3275428367,GB
+3275428376,3275428407,GB
3275428416,3275428447,GB
-3275428448,3275429887,EU
3275429888,3275430143,GB
-3275430144,3275430271,EU
3275430272,3275430399,GB
-3275430400,3275430591,EU
3275430592,3275430631,GB
-3275430632,3275430655,EU
3275430656,3275430911,GB
-3275430912,3275431935,EU
3275431936,3275432959,GB
-3275432960,3275433983,EU
3275433984,3275436543,GB
-3275436544,3275436799,EU
-3275436800,3275441407,GB
-3275441408,3275442175,EU
-3275442176,3275442723,GB
-3275442724,3275443199,EU
-3275443200,3275443727,GB
-3275443728,3275443759,EU
+3275436800,3275438655,GB
+3275438672,3275438847,GB
+3275439104,3275441407,GB
+3275441424,3275441439,GB
+3275441472,3275441535,GB
+3275441600,3275441823,GB
+3275441832,3275441835,GB
+3275441840,3275442723,GB
+3275443200,3275443227,GB
+3275443232,3275443239,GB
+3275443248,3275443407,GB
+3275443424,3275443727,GB
3275443760,3275443775,GB
-3275443776,3275443967,EU
-3275443968,3275444735,GB
-3275444736,3275446271,EU
-3275446272,3275447039,GB
-3275447040,3275447055,EU
+3275443840,3275443967,GB
+3275444224,3275444735,GB
+3275446272,3275446783,GB
+3275446800,3275446823,GB
+3275446848,3275447039,GB
3275447056,3275447151,GB
-3275447152,3275448319,EU
-3275448320,3275449927,GB
-3275449928,3275449935,EU
-3275449936,3275450879,GB
-3275450880,3275451231,EU
+3275448320,3275450207,GB
+3275450224,3275450879,GB
3275451232,3275451263,GB
-3275451264,3275451391,EU
3275451392,3275451663,GB
-3275451664,3275452415,EU
-3275452416,3275457023,GB
-3275457024,3275457791,FK
+3275451680,3275451711,GB
+3275451720,3275451727,GB
+3275451744,3275451767,GB
+3275452416,3275455231,GB
+3275455248,3275456407,GB
+3275456416,3275457535,GB
+3275457536,3275457791,FK
3275457792,3275458559,GB
3275458560,3275460095,IE
3275460096,3275460223,GB
3275460224,3275460239,IE
-3275460240,3275460607,EU
+3275460288,3275460295,GB
+3275460352,3275460607,IE
3275460608,3275460863,HK
-3275460864,3275463199,GB
-3275463200,3275463215,EU
-3275463216,3275468655,GB
+3275460864,3275468655,GB
3275468656,3275468671,IE
3275468672,3275468735,GB
3275468736,3275468751,IE
3275468752,3275468767,GB
3275468768,3275468799,IE
-3275468800,3275475043,GB
-3275475044,3275475047,EU
-3275475048,3275475327,GB
-3275475328,3275475359,EU
-3275475360,3275475839,GB
-3275475840,3275475967,EU
-3275475968,3275476223,GB
-3275476224,3275476991,EU
+3275468800,3275474951,GB
+3275474960,3275475039,GB
+3275475044,3275475071,GB
+3275475200,3275476223,GB
+3275476288,3275476479,GB
+3275476656,3275476687,GB
+3275476704,3275476735,GB
3275476992,3275477567,GB
-3275477568,3275477759,EU
-3275477760,3275481087,GB
-3275481088,3275483135,EU
+3275477760,3275478271,GB
+3275478528,3275481087,GB
3275483136,3275483647,GB
-3275483648,3275485183,EU
+3275484160,3275484415,GB
3275485184,3275485215,GB
-3275485216,3275485247,EU
+3275485224,3275485231,GB
3275485248,3275485375,GB
-3275485376,3275489279,EU
+3275485408,3275485423,GB
+3275485440,3275485759,GB
+3275488768,3275489279,CZ
3275489280,3275497471,GB
3275497472,3275505663,DE
3275505664,3275506175,PL
@@ -127146,7 +66621,6 @@
3275506688,3275507199,SE
3275507200,3275507711,UA
3275507712,3275509759,RO
-3275509760,3275509855,IT
3275509856,3275509887,PL
3275509888,3275509919,AM
3275509920,3275509951,PL
@@ -127168,8 +66642,7 @@
3275510720,3275510751,GB
3275510752,3275510783,NL
3275510784,3275510911,CY
-3275510912,3275511167,GB
-3275511168,3275511295,LV
+3275511040,3275511167,GB
3275511296,3275511551,GB
3275511552,3275511679,NL
3275511680,3275511807,CY
@@ -127185,11 +66658,9 @@
3275512960,3275513023,PL
3275513024,3275513087,UA
3275513088,3275513151,CY
-3275513152,3275513215,ES
3275513216,3275513279,CH
3275513280,3275513343,CY
3275513344,3275513471,PL
-3275513472,3275513599,FR
3275513600,3275513727,CY
3275513728,3275513855,GB
3275513856,3275522047,DE
@@ -127199,7 +66670,7 @@
3275531264,3275531775,GB
3275531776,3275532287,IE
3275532288,3275532799,UA
-3275532800,3275533823,GB
+3275532800,3275533311,GB
3275533824,3275534335,UA
3275534848,3275535359,RO
3275535360,3275535871,DE
@@ -127210,7 +66681,7 @@
3275537920,3275538431,IT
3275538432,3275539455,CH
3275539456,3275540479,GB
-3275540480,3275542527,UA
+3275540480,3275541503,UA
3275542528,3275543551,DE
3275543552,3275544575,NL
3275544576,3275545599,PL
@@ -127222,173 +66693,8 @@
3275551744,3275552767,RU
3275552768,3275553791,LV
3275553792,3275554815,FI
-3275554816,3275555391,EU
-3275555392,3275555455,ES
-3275555456,3275555591,EU
-3275555592,3275555647,ES
-3275555648,3275555743,EU
-3275555744,3275555759,ES
-3275555760,3275555767,EU
-3275555768,3275555776,ES
-3275555777,3275560959,EU
-3275560960,3275561215,ES
-3275561216,3275561471,EU
-3275561472,3275561727,ES
-3275561728,3275562495,EU
-3275562496,3275562751,ES
-3275562752,3275563007,EU
-3275563008,3275563519,CH
-3275563520,3275563583,EU
-3275563584,3275563647,CH
-3275563648,3275563775,DE
-3275563776,3275564031,CH
-3275564032,3275564415,EU
-3275564416,3275564495,CH
-3275564496,3275564799,EU
-3275564800,3275565055,CH
-3275565056,3275565311,EU
-3275565312,3275565567,CH
-3275565568,3275565823,EU
-3275565824,3275566079,CH
-3275566080,3275566847,EU
-3275566848,3275567359,CH
-3275567360,3275567615,EU
-3275567616,3275568127,CH
-3275568128,3275568383,EU
-3275568384,3275569407,CH
-3275569408,3275569919,EU
-3275569920,3275570687,CH
-3275570688,3275571199,EU
-3275571200,3275571455,PT
-3275571456,3275571967,EU
-3275571968,3275572095,PT
-3275572096,3275572767,EU
-3275572768,3275572863,PT
-3275572864,3275572991,EU
-3275572992,3275573055,PT
-3275573056,3275573119,EU
-3275573120,3275574015,PT
-3275574016,3275574031,EU
-3275574032,3275574047,PT
-3275574048,3275574143,EU
-3275574144,3275574147,PT
-3275574148,3275574151,EU
-3275574152,3275574159,PT
-3275574160,3275574175,EU
-3275574176,3275574191,PT
-3275574192,3275574783,EU
-3275574784,3275575103,PT
-3275575104,3275575167,EU
-3275575168,3275575231,PT
-3275575232,3275575423,EU
-3275575424,3275575727,PT
-3275575728,3275575871,EU
-3275575872,3275575935,PT
-3275575936,3275576063,EU
-3275576064,3275576319,PT
-3275576320,3275577343,EU
-3275577344,3275577407,PT
-3275577408,3275577471,EU
-3275577472,3275577495,PT
-3275577496,3275577519,EU
-3275577520,3275577567,PT
-3275577568,3275577599,EU
-3275577600,3275577727,PT
-3275577728,3275577791,EU
-3275577792,3275577807,PT
-3275577808,3275577839,EU
-3275577840,3275578623,PT
-3275578624,3275579135,EU
-3275579136,3275579391,PT
-3275579392,3275579519,FR
-3275579520,3275579583,NL
-3275579584,3275579599,EU
-3275579600,3275579615,NL
-3275579616,3275579647,EU
-3275579648,3275580159,NL
-3275580160,3275580927,EU
-3275580928,3275580948,NL
-3275580949,3275580949,EU
-3275580950,3275581311,NL
-3275581312,3275581535,EU
-3275581536,3275581671,NL
-3275581672,3275581679,EU
-3275581680,3275581695,NL
-3275581696,3275582223,EU
-3275582224,3275582247,NL
-3275582248,3275582279,EU
-3275582280,3275582287,NL
-3275582288,3275582655,EU
-3275582656,3275582719,NL
-3275582720,3275582975,EU
-3275582976,3275583231,NL
-3275583232,3275584255,EU
-3275584256,3275584287,NL
-3275584288,3275584511,EU
-3275584512,3275584527,NL
-3275584528,3275585023,EU
-3275585024,3275585279,NL
-3275585280,3275587583,EU
-3275587584,3275587855,BE
-3275587856,3275588095,EU
-3275588096,3275588287,BE
-3275588288,3275588319,NL
-3275588320,3275588351,EU
-3275588352,3275588607,BE
-3275588608,3275588639,EU
-3275588640,3275588655,BE
-3275588656,3275588711,EU
-3275588712,3275588719,CH
-3275588720,3275588735,EU
-3275588736,3275588799,BE
-3275588800,3275588847,EU
-3275588848,3275588855,BE
-3275588856,3275588863,EU
-3275588864,3275589119,IT
-3275589120,3275589271,EU
-3275589272,3275589279,BE
-3275589280,3275589375,EU
-3275589376,3275589471,BE
-3275589472,3275589887,EU
-3275589888,3275590655,BE
-3275590656,3275590911,EU
-3275590912,3275591167,BE
-3275591168,3275591423,EU
-3275591424,3275591679,BE
-3275591680,3275592063,RO
-3275592064,3275592447,EU
-3275592448,3275592959,RO
-3275592960,3275593343,EU
-3275593344,3275593855,RO
-3275593856,3275593983,EU
-3275593984,3275595007,RO
-3275595008,3275595039,BE
-3275595040,3275595263,EU
-3275595264,3275595519,US
-3275595520,3275596167,EU
-3275596168,3275596175,AT
-3275596176,3275599103,EU
-3275599104,3275599231,AT
-3275599232,3275599871,EU
-3275599872,3275600127,AT
-3275600128,3275603967,EU
-3275603968,3275604735,IT
-3275604736,3275604767,IL
-3275604768,3275604991,EU
-3275604992,3275605759,IT
-3275605760,3275606015,EU
-3275606016,3275606271,IT
-3275606272,3275606527,EU
-3275606528,3275606783,IT
-3275606784,3275608831,EU
-3275608832,3275610063,IT
-3275610064,3275610111,EU
-3275610112,3275610623,IT
-3275610624,3275612159,EU
-3275612160,3275612287,LU
-3275612288,3275612927,EU
-3275612928,3275613951,LU
-3275613952,3275620351,EU
+3275588448,3275588463,BE
+3275612928,3275613183,LU
3275620352,3275622399,RU
3275622400,3275623423,GB
3275623424,3275623935,PL
@@ -127396,7 +66702,6 @@
3275624448,3275624959,SK
3275624960,3275625471,IL
3275625472,3275625983,DE
-3275625984,3275626495,BG
3275626496,3275627007,UA
3275627008,3275627519,AT
3275627520,3275628031,GB
@@ -127423,7 +66728,6 @@
3275640832,3275641343,DE
3275641344,3275641855,NL
3275641856,3275642367,AT
-3275642368,3275642879,RU
3275642880,3275643391,RO
3275643392,3275643903,BE
3275643904,3275644415,RU
@@ -127434,12 +66738,9 @@
3275669504,3275677695,GB
3275677696,3275685887,IT
3275685888,3275751423,DE
-3275751424,3275751679,AT
-3275751680,3275751935,EU
-3275751936,3275759615,AT
+3275751424,3275759615,AT
3275759616,3275775999,NL
3275776000,3275784191,DE
-3275784192,3275784703,RO
3275784704,3275785215,PL
3275785216,3275785727,RO
3275785728,3275786239,CH
@@ -127451,7 +66752,6 @@
3275788800,3275789311,AT
3275789312,3275789823,UA
3275789824,3275790335,PL
-3275790336,3275790847,MD
3275790848,3275791359,UA
3275791360,3275791871,RU
3275791872,3275792383,PL
@@ -127472,11 +66772,7 @@
3275800064,3275800575,UA
3275800576,3275808767,RU
3275808768,3275816959,UA
-3275816960,3275818207,CH
-3275818208,3275818215,DE
-3275818216,3275839231,CH
-3275839232,3275839487,EU
-3275839488,3275882495,CH
+3275816960,3275882495,CH
3275882496,3275884543,DE
3275884544,3275886591,IT
3275886592,3275888639,PL
@@ -127502,7 +66798,6 @@
3275904000,3275904255,RU
3275904256,3275904511,CH
3275904512,3275904767,PL
-3275904768,3275905023,RU
3275905024,3275905279,PL
3275905280,3275905535,RU
3275905536,3275905791,NL
@@ -127515,9 +66810,8 @@
3275907840,3275908095,DE
3275908096,3275908351,SA
3275908352,3275908607,SE
-3275908608,3275908863,US
+3275908608,3275908863,DE
3275908864,3275909119,PL
-3275909120,3275909375,RU
3275909376,3275909631,UA
3275909632,3275909887,EE
3275909888,3275910143,SI
@@ -127527,13 +66821,11 @@
3275910912,3275911167,DE
3275911168,3275911423,FR
3275911424,3275911679,RO
-3275911680,3275911935,UA
3275911936,3275912191,BE
3275912192,3275912447,PL
3275912448,3275912703,RU
3275912704,3275912959,IL
3275912960,3275913215,FR
-3275913216,3275913471,UA
3275913472,3275913983,DE
3275913984,3275914239,CH
3275914240,3275914495,RO
@@ -127550,385 +66842,56 @@
3275919872,3275920383,UA
3275920384,3275920895,GB
3275920896,3275921407,ES
-3275921408,3275921919,UA
3275921920,3275922431,DE
3275922432,3275922943,UA
3275922944,3275923455,GR
3275923456,3275931647,ME
3275931648,3275939839,UA
3275939840,3275948031,GB
-3275948032,3275984007,SE
-3275984008,3275984011,DK
-3275984012,3275984043,SE
-3275984044,3275984047,DK
-3275984048,3276013567,SE
-3276013568,3276014087,FR
-3276014088,3276014095,GB
-3276014096,3276014151,FR
-3276014152,3276014167,GB
-3276014168,3276014191,FR
-3276014192,3276014207,GB
-3276014208,3276014255,FR
-3276014256,3276014263,GB
-3276014264,3276015103,FR
-3276015104,3276015119,GB
-3276015120,3276015191,FR
-3276015192,3276015231,GB
-3276015232,3276015247,FR
-3276015248,3276015263,GB
-3276015264,3276015295,FR
-3276015296,3276015327,GB
-3276015328,3276016391,FR
-3276016392,3276016399,GB
-3276016400,3276016415,FR
-3276016416,3276016463,GB
-3276016464,3276016511,FR
-3276016512,3276016591,GB
-3276016592,3276016895,FR
-3276016896,3276016927,GB
-3276016928,3276016943,FR
-3276016944,3276016959,GB
-3276016960,3276016975,FR
-3276016976,3276016991,GB
-3276016992,3276017039,FR
-3276017040,3276017043,GB
-3276017044,3276017047,FR
-3276017048,3276017055,GB
-3276017056,3276017119,FR
-3276017120,3276017151,GB
-3276017152,3276017327,FR
-3276017328,3276017343,GB
-3276017344,3276017551,FR
-3276017552,3276017567,GB
-3276017568,3276017607,FR
-3276017608,3276017663,GB
-3276017664,3276018431,FR
-3276018432,3276018447,GB
-3276018448,3276018495,FR
-3276018496,3276018527,GB
-3276018528,3276018543,FR
-3276018544,3276018623,GB
-3276018624,3276018943,FR
-3276018944,3276018975,GB
-3276018976,3276018985,FR
-3276018986,3276019007,GB
-3276019008,3276019023,FR
-3276019024,3276019071,GB
-3276019072,3276019135,FR
-3276019136,3276019151,GB
-3276019152,3276019575,FR
-3276019576,3276019599,GB
-3276019600,3276019639,FR
-3276019640,3276019671,GB
-3276019672,3276019679,FR
-3276019680,3276019687,GB
-3276019688,3276019695,FR
-3276019696,3276019703,GB
-3276019704,3276019719,FR
-3276019720,3276019727,GB
-3276019728,3276019823,FR
-3276019824,3276019831,GB
-3276019832,3276019839,FR
-3276019840,3276019855,GB
-3276019856,3276019863,FR
-3276019864,3276019871,GB
-3276019872,3276019919,FR
-3276019920,3276019927,GB
-3276019928,3276019959,FR
-3276019960,3276019967,GB
-3276019968,3276020503,FR
-3276020504,3276020511,GB
-3276020512,3276020623,FR
-3276020624,3276020631,GB
-3276020632,3276020679,FR
-3276020680,3276020687,GB
-3276020688,3276022127,FR
-3276022128,3276022143,GB
-3276022144,3276022215,FR
-3276022216,3276022223,GB
-3276022224,3276022255,FR
-3276022256,3276022271,GB
-3276022272,3276022399,FR
-3276022400,3276022407,GB
-3276022408,3276022455,FR
-3276022456,3276022463,GB
-3276022464,3276022479,FR
-3276022480,3276022495,GB
-3276022496,3276023071,FR
-3276023072,3276023079,GB
-3276023080,3276023087,FR
-3276023088,3276023167,GB
-3276023168,3276023207,FR
-3276023208,3276023215,BE
-3276023216,3276023743,FR
-3276023744,3276023767,GB
-3276023768,3276023847,FR
-3276023848,3276023855,GB
-3276023856,3276023871,FR
-3276023872,3276023887,GB
-3276023888,3276023943,FR
-3276023944,3276023967,GB
-3276023968,3276025111,FR
-3276025112,3276025135,GB
-3276025136,3276025151,FR
-3276025152,3276025159,GB
+3275948032,3276013567,SE
+3276013568,3276014239,GB
+3276014240,3276014247,FR
+3276014248,3276014799,GB
+3276014800,3276014815,FR
+3276014816,3276014951,GB
+3276014952,3276014959,ES
+3276014960,3276018175,GB
+3276018176,3276018431,FR
+3276018432,3276019495,GB
+3276019496,3276019503,FR
+3276019504,3276019631,GB
+3276019632,3276019639,FR
+3276019640,3276020129,GB
+3276020130,3276020130,FR
+3276020131,3276020735,GB
+3276020736,3276020991,FR
+3276020992,3276025159,GB
3276025160,3276025167,FR
-3276025168,3276025175,GB
-3276025176,3276025183,FR
-3276025184,3276025191,GB
-3276025192,3276025207,FR
-3276025208,3276025215,GB
-3276025216,3276026167,FR
-3276026168,3276026175,GB
-3276026176,3276026191,FR
-3276026192,3276026199,GB
-3276026200,3276026215,FR
-3276026216,3276026223,GB
-3276026224,3276026319,FR
-3276026320,3276026351,GB
-3276026352,3276026703,FR
-3276026704,3276026719,GB
-3276026720,3276026727,FR
-3276026728,3276026783,GB
-3276026784,3276026815,FR
-3276026816,3276026823,GB
-3276026824,3276026847,FR
-3276026848,3276026927,GB
-3276026928,3276026943,FR
-3276026944,3276026991,GB
-3276026992,3276027311,FR
-3276027312,3276027327,GB
-3276027328,3276027671,FR
-3276027672,3276027679,GB
-3276027680,3276027695,FR
-3276027696,3276027743,GB
-3276027744,3276027791,FR
-3276027792,3276027807,GB
-3276027808,3276027855,FR
-3276027856,3276027871,GB
-3276027872,3276027951,FR
-3276027952,3276027967,GB
-3276027968,3276028047,FR
-3276028048,3276028063,GB
-3276028064,3276028079,FR
-3276028080,3276028111,GB
-3276028112,3276028127,FR
-3276028128,3276028143,GB
-3276028144,3276028159,FR
-3276028160,3276028231,GB
-3276028232,3276028247,FR
-3276028248,3276028255,GB
-3276028256,3276028263,FR
-3276028264,3276028287,GB
-3276028288,3276028479,FR
-3276028480,3276028511,GB
-3276028512,3276028743,FR
-3276028744,3276028751,GB
-3276028752,3276028759,FR
-3276028760,3276028767,GB
-3276028768,3276028791,FR
-3276028792,3276028799,GB
-3276028800,3276028807,FR
-3276028808,3276028815,GB
-3276028816,3276028863,FR
-3276028864,3276028871,GB
-3276028872,3276028879,FR
-3276028880,3276028887,GB
-3276028888,3276028895,FR
-3276028896,3276028927,GB
-3276028928,3276029183,FR
-3276029184,3276029199,GB
-3276029200,3276029343,FR
-3276029344,3276029359,GB
-3276029360,3276029375,FR
-3276029376,3276029407,GB
-3276029408,3276029423,FR
-3276029424,3276029439,GB
-3276029440,3276029583,FR
-3276029584,3276029599,GB
-3276029600,3276029727,FR
-3276029728,3276029791,GB
-3276029792,3276029855,FR
-3276029856,3276029887,GB
-3276029888,3276029919,FR
-3276029920,3276029951,GB
-3276029952,3276029983,FR
-3276029984,3276029999,GB
-3276030000,3276030079,FR
-3276030080,3276030095,GB
-3276030096,3276030191,FR
-3276030192,3276030207,GB
-3276030208,3276030719,FR
-3276030720,3276030975,GB
-3276030976,3276031527,FR
-3276031528,3276031551,GB
-3276031552,3276031559,FR
-3276031560,3276031591,GB
-3276031592,3276031631,FR
-3276031632,3276031679,GB
-3276031680,3276031719,FR
-3276031720,3276031743,GB
-3276031744,3276032007,FR
-3276032008,3276032015,GB
-3276032016,3276032023,FR
-3276032024,3276032047,GB
-3276032048,3276032055,FR
-3276032056,3276032063,GB
-3276032064,3276032103,FR
-3276032104,3276032111,GB
-3276032112,3276032191,FR
-3276032192,3276032207,GB
-3276032208,3276032223,FR
-3276032224,3276032255,GB
-3276032256,3276032263,FR
-3276032264,3276032271,GB
-3276032272,3276032279,FR
-3276032280,3276032303,GB
-3276032304,3276032319,FR
-3276032320,3276032343,GB
-3276032344,3276032367,FR
-3276032368,3276032415,GB
-3276032416,3276032431,FR
-3276032432,3276032479,GB
-3276032480,3276032543,FR
-3276032544,3276032559,GB
-3276032560,3276032591,FR
-3276032592,3276032607,GB
-3276032608,3276032719,FR
-3276032720,3276032735,GB
-3276032736,3276033039,FR
-3276033040,3276033119,GB
-3276033120,3276033151,FR
-3276033152,3276033167,GB
-3276033168,3276033215,FR
-3276033216,3276033231,GB
-3276033232,3276033247,FR
-3276033248,3276033279,GB
-3276033280,3276033535,FR
-3276033536,3276033655,GB
-3276033656,3276033663,FR
-3276033664,3276033695,GB
-3276033696,3276033791,FR
-3276033792,3276033823,GB
-3276033824,3276033839,FR
-3276033840,3276033855,GB
-3276033856,3276033863,FR
-3276033864,3276033887,GB
-3276033888,3276036383,FR
-3276036384,3276036415,GB
-3276036416,3276036671,FR
-3276036672,3276036863,GB
-3276036864,3276037703,FR
-3276037704,3276037759,GB
-3276037760,3276037887,FR
-3276037888,3276037903,GB
-3276037904,3276037959,FR
-3276037960,3276037983,GB
-3276037984,3276038047,FR
-3276038048,3276038111,GB
-3276038112,3276038159,FR
-3276038160,3276038399,GB
-3276038400,3276038663,FR
-3276038664,3276038671,GB
-3276038672,3276038703,FR
-3276038704,3276038719,GB
-3276038720,3276038735,FR
-3276038736,3276038767,GB
-3276038768,3276038799,FR
-3276038800,3276038815,GB
-3276038816,3276038847,FR
-3276038848,3276038911,GB
-3276038912,3276038919,FR
-3276038920,3276039167,GB
-3276039168,3276039975,FR
-3276039976,3276039999,GB
-3276040000,3276040063,FR
-3276040064,3276040095,GB
-3276040096,3276040159,FR
-3276040160,3276040175,GB
-3276040176,3276040231,FR
-3276040232,3276040239,GB
-3276040240,3276040319,FR
-3276040320,3276040335,GB
-3276040336,3276040439,FR
-3276040440,3276040495,GB
-3276040496,3276040543,FR
-3276040544,3276040575,GB
-3276040576,3276040591,FR
-3276040592,3276040607,GB
-3276040608,3276040639,FR
-3276040640,3276040671,GB
-3276040672,3276040879,FR
-3276040880,3276040895,GB
-3276040896,3276040975,FR
-3276040976,3276041007,GB
-3276041008,3276041071,FR
-3276041072,3276041087,GB
-3276041088,3276041199,FR
-3276041200,3276041215,GB
-3276041216,3276041279,FR
-3276041280,3276041311,GB
-3276041312,3276041391,FR
-3276041392,3276041407,GB
-3276041408,3276041503,FR
-3276041504,3276041535,GB
-3276041536,3276041551,FR
-3276041552,3276041599,GB
-3276041600,3276041759,FR
-3276041760,3276041775,GB
-3276041776,3276041839,FR
-3276041840,3276041887,GB
-3276041888,3276041919,FR
-3276041920,3276041951,GB
-3276041952,3276041967,FR
-3276041968,3276041983,GB
-3276041984,3276042223,FR
-3276042224,3276042239,GB
-3276042240,3276044351,FR
-3276044352,3276044359,GB
-3276044360,3276044367,FR
-3276044368,3276044383,GB
-3276044384,3276044447,FR
-3276044448,3276044495,GB
-3276044496,3276044511,FR
-3276044512,3276044543,GB
-3276044544,3276044559,FR
-3276044560,3276044575,GB
-3276044576,3276044607,FR
-3276044608,3276044639,GB
-3276044640,3276044671,FR
-3276044672,3276044703,GB
-3276044704,3276044735,FR
-3276044736,3276044799,GB
-3276044800,3276045191,FR
-3276045192,3276045199,GB
-3276045200,3276045223,FR
-3276045224,3276045239,GB
-3276045240,3276045255,FR
-3276045256,3276045271,GB
-3276045272,3276045287,FR
-3276045288,3276045311,GB
-3276045312,3276045351,FR
-3276045352,3276045359,GB
-3276045360,3276045391,FR
-3276045392,3276045407,GB
-3276045408,3276045455,FR
-3276045456,3276045487,GB
-3276045488,3276045543,FR
-3276045544,3276045551,GB
-3276045552,3276045567,FR
-3276045568,3276045575,GB
-3276045576,3276045583,FR
-3276045584,3276045607,GB
-3276045608,3276045631,FR
-3276045632,3276045647,GB
-3276045648,3276045767,FR
-3276045768,3276045783,GB
-3276045784,3276045815,FR
-3276045816,3276045855,GB
-3276045856,3276045919,FR
-3276045920,3276045951,GB
-3276045952,3276046335,FR
+3276025168,3276026367,GB
+3276026368,3276026623,FR
+3276026624,3276027647,GB
+3276027648,3276027903,FR
+3276027904,3276029375,GB
+3276029376,3276029439,FR
+3276029440,3276030591,GB
+3276030592,3276030607,FR
+3276030608,3276031479,GB
+3276031480,3276031487,FR
+3276031488,3276032311,GB
+3276032312,3276032319,FR
+3276032320,3276039263,GB
+3276039264,3276039279,FR
+3276039280,3276040351,GB
+3276040352,3276040367,FR
+3276040368,3276042015,GB
+3276042016,3276042031,FR
+3276042032,3276042079,GB
+3276042080,3276042095,FR
+3276042096,3276042495,GB
+3276042496,3276042751,FR
+3276042752,3276045247,GB
+3276045248,3276045255,FR
+3276045256,3276046335,GB
3276046336,3276062719,RU
3276062720,3276063231,PL
3276063232,3276063743,FR
@@ -127945,8 +66908,6 @@
3276068864,3276069887,UA
3276069888,3276070399,GB
3276070400,3276070911,UA
-3276070912,3276071423,GB
-3276071424,3276071935,PL
3276071936,3276072447,GB
3276072448,3276072959,SK
3276072960,3276073471,PL
@@ -127958,10 +66919,8 @@
3276076032,3276076287,NL
3276076288,3276076543,RU
3276076544,3276077055,DE
-3276077056,3276077567,UA
3276077568,3276078079,FR
3276078080,3276078591,RU
-3276078592,3276079103,GB
3276079104,3276095487,NO
3276095488,3276096511,RU
3276096512,3276097535,IT
@@ -127972,7 +66931,6 @@
3276101632,3276102655,LV
3276102656,3276103679,GB
3276103680,3276104703,SI
-3276104704,3276105727,RU
3276105728,3276106751,AT
3276106752,3276107775,BG
3276107776,3276108799,DE
@@ -127981,7 +66939,6 @@
3276110848,3276111871,PL
3276111872,3276112895,DK
3276112896,3276114943,UA
-3276114944,3276115967,KW
3276115968,3276116991,NL
3276116992,3276118015,RU
3276118016,3276119039,GB
@@ -128002,12 +66959,10 @@
3276134400,3276135423,RU
3276135424,3276136447,UA
3276136448,3276137471,NL
-3276137472,3276138495,PL
3276138496,3276139519,NL
3276139520,3276140543,RU
3276140544,3276141567,DE
3276141568,3276143615,UA
-3276143616,3276144639,GB
3276144640,3276152831,CH
3276152832,3276161023,HU
3276161024,3276169215,GB
@@ -128018,17 +66973,7 @@
3276201984,3276210175,AT
3276210176,3276234303,DE
3276234304,3276234367,GB
-3276234368,3276241759,DE
-3276241760,3276241767,FR
-3276241768,3276244447,DE
-3276244448,3276244479,RO
-3276244480,3276249279,DE
-3276249280,3276249287,FR
-3276249288,3276249855,DE
-3276249856,3276249983,GB
-3276249984,3276250079,DE
-3276250080,3276250095,FR
-3276250096,3276275711,DE
+3276234368,3276275711,DE
3276275712,3276283903,SK
3276283904,3276292095,GB
3276292096,3276300287,BE
@@ -128088,430 +67033,25 @@
3276431104,3276431359,RU
3276431360,3276447743,GB
3276447744,3276451583,DE
-3276451584,3276455935,EU
3276455936,3276464127,BE
3276464128,3276472319,GR
-3276472320,3276472575,EU
-3276472576,3276472831,AT
-3276472832,3276472863,EU
-3276472864,3276472879,AT
-3276472880,3276473103,EU
-3276473104,3276473111,AT
-3276473112,3276473119,EU
-3276473120,3276473135,AT
-3276473136,3276473143,EU
-3276473144,3276473199,AT
-3276473200,3276473215,EU
-3276473216,3276473279,AT
-3276473280,3276473295,EU
-3276473296,3276473311,AT
-3276473312,3276473343,EU
-3276473344,3276473855,AT
-3276473856,3276474271,EU
-3276474272,3276474295,AT
-3276474296,3276474319,EU
-3276474320,3276474367,AT
-3276474368,3276474623,EU
-3276474624,3276474879,GB
-3276474880,3276475007,EU
-3276475008,3276475023,IT
-3276475024,3276475039,FR
-3276475040,3276475055,EU
-3276475056,3276475071,IT
-3276475072,3276475903,EU
-3276475904,3276476111,IT
-3276476112,3276476119,GB
-3276476120,3276476159,IT
-3276476160,3276476415,GB
-3276476416,3276476671,CH
-3276476672,3276477439,EU
-3276477440,3276477999,CH
-3276478000,3276478015,EU
-3276478016,3276478039,CH
-3276478040,3276478319,EU
-3276478320,3276478335,CH
-3276478336,3276478463,EU
-3276478464,3276479279,FR
-3276479280,3276479343,EU
-3276479344,3276479351,GB
-3276479352,3276479359,EU
-3276479360,3276479615,FR
-3276479616,3276479647,EU
-3276479648,3276479743,FR
-3276479744,3276479999,EU
-3276480000,3276480331,FR
-3276480332,3276480335,EU
-3276480336,3276480375,FR
-3276480376,3276480383,EU
-3276480384,3276480439,FR
-3276480440,3276480455,EU
-3276480456,3276480499,FR
-3276480500,3276480511,EU
-3276480512,3276480767,RU
-3276480768,3276481023,EU
-3276481024,3276481535,RU
-3276481536,3276482559,EU
-3276482560,3276482815,GR
-3276482816,3276483071,EU
-3276483072,3276483359,GR
-3276483360,3276483391,EU
-3276483392,3276483519,GR
-3276483520,3276483583,EU
-3276483584,3276483711,GR
-3276483712,3276483839,EU
-3276483840,3276484351,GR
-3276484352,3276484383,EU
-3276484384,3276484479,GR
-3276484480,3276484607,EU
-3276484608,3276484863,SK
-3276484864,3276485631,EU
+3276473304,3276473311,AT
+3276480256,3276480511,FR
3276485632,3276486655,GB
-3276486656,3276486911,EU
-3276486912,3276487167,GR
-3276487168,3276488959,EU
-3276488960,3276489215,CZ
-3276489216,3276491263,EU
-3276491264,3276491327,CZ
-3276491328,3276491359,EU
-3276491360,3276491391,NO
-3276491392,3276491775,CZ
-3276491776,3276491847,GB
-3276491848,3276491855,EU
-3276491856,3276492047,GB
-3276492048,3276492063,EU
-3276492064,3276492127,GB
-3276492128,3276492143,EU
-3276492144,3276492151,GB
-3276492152,3276492159,EU
-3276492160,3276492191,GB
-3276492192,3276492287,EU
-3276492288,3276492831,GB
-3276492832,3276492839,EU
-3276492840,3276493135,GB
-3276493136,3276493151,EU
-3276493152,3276493215,GB
-3276493216,3276493247,EU
-3276493248,3276495543,GB
-3276495544,3276495551,EU
-3276495552,3276495763,GB
-3276495764,3276495767,EU
-3276495768,3276495831,GB
-3276495832,3276495839,EU
-3276495840,3276496639,GB
-3276496640,3276496895,EU
-3276496896,3276497279,DE
-3276497280,3276497295,EU
-3276497296,3276497311,DE
-3276497312,3276497343,EU
-3276497344,3276497603,DE
-3276497604,3276497607,EU
-3276497608,3276497919,DE
-3276497920,3276498047,GB
-3276498048,3276498175,EU
-3276498176,3276498431,GB
-3276498432,3276499199,DE
-3276499200,3276499455,EU
-3276499456,3276499503,DE
-3276499504,3276499519,EU
-3276499520,3276499655,DE
-3276499656,3276499679,EU
-3276499680,3276499759,DE
-3276499760,3276499791,EU
-3276499792,3276499823,DE
-3276499824,3276499839,EU
-3276499840,3276499999,DE
-3276500000,3276500031,CH
-3276500032,3276500095,DE
-3276500096,3276500127,EU
-3276500128,3276500223,DE
-3276500224,3276500479,EU
-3276500480,3276500735,DE
-3276500736,3276500991,EU
-3276500992,3276501023,DE
-3276501024,3276501055,FR
-3276501056,3276501119,EU
-3276501120,3276501151,DE
-3276501152,3276501167,EU
-3276501168,3276501183,DE
-3276501184,3276501247,EU
-3276501248,3276501503,DE
-3276501504,3276502271,EU
-3276502272,3276505087,DE
-3276505088,3276505231,ZA
-3276505232,3276505247,EU
-3276505248,3276505599,ZA
-3276505600,3276505855,EU
-3276505856,3276505887,ZA
-3276505888,3276505903,EU
-3276505904,3276505919,ZA
-3276505920,3276505983,EU
-3276505984,3276506047,ZA
-3276506048,3276506071,EU
-3276506072,3276506079,ZA
-3276506080,3276506095,EU
-3276506096,3276506159,ZA
-3276506160,3276506175,EU
-3276506176,3276506191,ZA
-3276506192,3276506207,EU
-3276506208,3276506367,ZA
-3276506368,3276506623,EU
-3276506624,3276507135,ZA
-3276507136,3276507231,CH
-3276507232,3276507391,EU
-3276507392,3276507647,CH
-3276507648,3276508159,EU
-3276508160,3276508327,GB
-3276508328,3276508351,EU
-3276508352,3276508415,FR
-3276508416,3276508671,GB
-3276508672,3276508679,EU
-3276508680,3276508975,GB
-3276508976,3276508983,EU
-3276508984,3276509047,GB
-3276509048,3276509055,EU
-3276509056,3276509087,GB
-3276509088,3276509103,EU
-3276509104,3276509107,GB
-3276509108,3276509119,EU
-3276509120,3276509155,GB
-3276509156,3276509183,EU
+3276503040,3276505087,DE
+3276508680,3276508687,GB
+3276508928,3276509183,GB
3276509184,3276510207,IT
-3276510208,3276510719,EU
-3276510720,3276510751,IT
-3276510752,3276510783,EU
-3276510784,3276510815,IT
-3276510816,3276510847,EU
-3276510848,3276510911,GB
-3276510912,3276511487,EU
-3276511488,3276511775,ZA
-3276511776,3276511823,EU
-3276511824,3276511839,ZA
-3276511840,3276511871,EU
-3276511872,3276511919,ZA
-3276511920,3276511935,EU
-3276511936,3276511951,ZA
-3276511952,3276511967,EU
-3276511968,3276512191,ZA
-3276512192,3276512199,EU
-3276512200,3276512207,ZA
-3276512208,3276512255,EU
3276512256,3276513023,ZA
-3276513024,3276513535,EU
-3276513536,3276513551,CH
-3276513552,3276513559,EU
-3276513560,3276513567,CH
-3276513568,3276514335,EU
-3276514336,3276514367,CH
-3276514368,3276514559,EU
-3276514560,3276514815,CH
-3276514816,3276515327,EU
-3276515328,3276515583,ES
-3276515584,3276517375,EU
-3276517376,3276517503,NL
-3276517504,3276517631,EU
-3276517632,3276517647,NL
-3276517648,3276517655,EU
-3276517656,3276517759,NL
-3276517760,3276517791,EU
-3276517792,3276517887,NL
-3276517888,3276517903,EU
-3276517904,3276517951,NL
-3276517952,3276518015,EU
-3276518016,3276518023,NL
-3276518024,3276518095,EU
-3276518096,3276518111,NL
-3276518112,3276518127,EU
-3276518128,3276518191,NL
-3276518192,3276518207,EU
-3276518208,3276518271,NL
-3276518272,3276518303,EU
-3276518304,3276518335,NL
-3276518336,3276518351,EU
-3276518352,3276518367,NL
-3276518368,3276518911,EU
-3276518912,3276519423,BE
-3276519424,3276519679,EU
-3276519680,3276520191,DK
-3276520192,3276520223,BE
-3276520224,3276520255,GB
-3276520256,3276520407,BE
-3276520408,3276520423,EU
-3276520424,3276520447,BE
-3276520448,3276520463,EU
-3276520464,3276520591,SE
-3276520592,3276520607,EU
-3276520608,3276520623,SE
-3276520624,3276520639,EU
-3276520640,3276520703,SE
-3276520704,3276520767,EU
-3276520768,3276520815,SE
-3276520816,3276520831,EU
-3276520832,3276520927,SE
-3276520928,3276520943,EU
-3276520944,3276521215,SE
-3276521216,3276521471,EU
-3276521472,3276521487,RO
-3276521488,3276521983,EU
-3276521984,3276523519,NL
-3276523520,3276523791,EU
-3276523792,3276523911,NO
-3276523912,3276523919,EU
-3276523920,3276523951,NO
-3276523952,3276523967,EU
-3276523968,3276524031,NO
-3276524032,3276524063,EU
-3276524064,3276524095,TR
-3276524096,3276524191,EU
-3276524192,3276524287,TR
-3276524288,3276524543,EU
-3276524544,3276524799,GB
-3276524800,3276524863,PT
-3276524864,3276525039,EU
-3276525040,3276525055,PT
-3276525056,3276525311,FI
-3276525312,3276525503,EU
-3276525504,3276525527,HR
-3276525528,3276525535,PL
-3276525536,3276525567,HR
-3276525568,3276526079,EU
-3276526080,3276526087,CH
-3276526088,3276526095,EU
-3276526096,3276526111,CH
-3276526112,3276526143,EU
-3276526144,3276526159,CH
-3276526160,3276526335,EU
-3276526336,3276526591,CH
-3276526592,3276527103,EU
-3276527104,3276527135,SI
-3276527136,3276527167,EU
-3276527168,3276527199,SI
-3276527200,3276527215,EU
-3276527216,3276527231,SI
-3276527232,3276527359,EU
-3276527360,3276527615,SI
+3276517632,3276517887,NL
+3276518368,3276518383,NL
+3276522496,3276523519,NL
3276527616,3276527743,PK
-3276527744,3276527871,EU
-3276527872,3276527999,PK
-3276528000,3276528127,EU
-3276528128,3276528223,BE
-3276528224,3276528239,EU
-3276528240,3276528247,BE
-3276528248,3276528255,GB
-3276528256,3276528351,BE
3276528352,3276528359,GB
-3276528360,3276528367,FR
-3276528368,3276528399,BE
-3276528400,3276528447,EU
-3276528448,3276528503,BE
-3276528504,3276528511,EU
-3276528512,3276528519,BE
-3276528520,3276528527,EU
-3276528528,3276528543,BE
-3276528544,3276528559,EU
-3276528560,3276528567,BE
-3276528568,3276528575,EU
-3276528576,3276528719,BE
-3276528720,3276528727,EU
-3276528728,3276528735,BE
-3276528736,3276528767,EU
-3276528768,3276528799,BE
-3276528800,3276528815,GB
-3276528816,3276528831,EU
-3276528832,3276528895,BE
-3276528896,3276528927,IE
-3276528928,3276528935,EU
-3276528936,3276529151,IE
-3276529152,3276529167,TR
-3276529168,3276529183,EU
-3276529184,3276529279,TR
-3276529280,3276529327,EU
-3276529328,3276529351,TR
-3276529352,3276529359,EU
-3276529360,3276529375,TR
-3276529376,3276529391,EU
-3276529392,3276529407,TR
-3276529408,3276529663,EU
-3276529664,3276530439,NL
-3276530440,3276530447,EU
-3276530448,3276530495,NL
-3276530496,3276530559,EU
-3276530560,3276532639,NL
-3276532640,3276532640,EU
-3276532641,3276532735,NL
-3276532736,3276532775,TR
-3276532776,3276532783,EU
-3276532784,3276532791,TR
-3276532792,3276532855,EU
-3276532856,3276532991,TR
-3276532992,3276533023,HU
-3276533024,3276533071,EU
-3276533072,3276533087,HU
-3276533088,3276533119,EU
-3276533120,3276533183,HU
-3276533184,3276533247,EU
-3276533248,3276533375,TR
-3276533376,3276533775,EU
-3276533776,3276533791,GB
-3276533792,3276533823,EU
-3276533824,3276533887,IE
-3276533888,3276533927,EU
-3276533928,3276533951,IE
-3276533952,3276533983,EU
-3276533984,3276534015,IE
-3276534016,3276534271,EU
-3276534272,3276534415,GB
-3276534416,3276534431,NL
-3276534432,3276534463,GB
-3276534464,3276534495,FR
-3276534496,3276534527,EU
-3276534528,3276534783,AU
-3276534784,3276534879,NL
-3276534880,3276534887,EU
-3276534888,3276534895,NL
-3276534896,3276534911,EU
-3276534912,3276534919,NL
-3276534920,3276535015,EU
-3276535016,3276535039,GB
-3276535040,3276535063,RU
-3276535064,3276535071,LV
-3276535072,3276535103,RU
-3276535104,3276535311,EU
-3276535312,3276535319,FI
-3276535320,3276535335,EU
-3276535336,3276535343,FI
-3276535344,3276535351,EU
-3276535352,3276535359,FI
-3276535360,3276535375,EU
-3276535376,3276535455,FI
-3276535456,3276535551,EU
-3276535552,3276535807,PK
-3276535808,3276536063,FI
-3276536064,3276536319,EU
-3276536320,3276536430,ES
-3276536431,3276536431,EU
-3276536432,3276536511,ES
-3276536512,3276536583,EU
-3276536584,3276536591,HR
-3276536592,3276536607,HU
-3276536608,3276536639,EU
-3276536640,3276536675,HU
-3276536676,3276536687,EU
-3276536688,3276536711,HU
-3276536712,3276536735,EU
-3276536736,3276536751,HU
-3276536752,3276536831,EU
-3276536832,3276536895,ES
-3276536896,3276536959,EU
-3276536960,3276537007,ES
-3276537008,3276537151,EU
-3276537152,3276537215,AT
-3276537216,3276537343,EU
+3276530688,3276531711,NL
+3276536688,3276536695,HU
3276537344,3276537599,AT
-3276537600,3276537663,GR
-3276537664,3276537855,EU
-3276537856,3276627711,ES
-3276627712,3276627967,PT
-3276627968,3276668927,ES
+3276537856,3276668927,ES
3276668928,3276677119,MC
3276677120,3276678143,HR
3276678144,3276678655,SE
@@ -128520,10 +67060,8 @@
3276679680,3276680191,UA
3276680192,3276680703,SK
3276680704,3276681215,AT
-3276681216,3276681727,PL
3276681728,3276682239,BE
3276682240,3276682751,AT
-3276682752,3276683263,GB
3276683264,3276684287,UA
3276684288,3276684799,RU
3276684800,3276685311,DE
@@ -128548,7 +67086,6 @@
3276695040,3276695551,RU
3276695552,3276696063,UA
3276696064,3276696575,RO
-3276696576,3276697087,EU
3276697088,3276697599,GB
3276697600,3276698111,UA
3276698112,3276699647,RU
@@ -128567,375 +67104,15 @@
3276731392,3276732415,UA
3276732416,3276733439,DE
3276733440,3276734463,UA
-3276734464,3276734735,AT
-3276734736,3276734751,DK
-3276734752,3276734815,AT
-3276734816,3276734847,DE
-3276734848,3276734879,EU
-3276734880,3276734895,GB
-3276734896,3276734911,NL
-3276734912,3276734943,FR
-3276734944,3276735455,AT
-3276735456,3276735487,NL
-3276735488,3276735871,AT
-3276735872,3276735935,EU
-3276735936,3276735999,ES
-3276736000,3276736511,AT
-3276736512,3276736575,IT
-3276736576,3276736735,GB
-3276736736,3276736767,EU
-3276736768,3276736799,IT
-3276736800,3276736815,DE
-3276736816,3276736831,CZ
-3276736832,3276736863,NL
-3276736864,3276736871,DE
-3276736872,3276736879,NL
-3276736880,3276736959,DK
-3276736960,3276736991,CH
-3276736992,3276737015,GB
-3276737016,3276737023,BE
-3276737024,3276737343,IT
-3276737344,3276737407,DE
-3276737408,3276737535,ES
-3276737536,3276737615,IT
-3276737616,3276737631,DE
-3276737632,3276737791,RU
-3276737792,3276737935,NL
-3276737936,3276737943,DE
-3276737944,3276737991,GB
-3276737992,3276737999,IT
-3276738000,3276738015,GB
-3276738016,3276738047,BE
-3276738048,3276738079,GB
-3276738080,3276738111,ES
-3276738112,3276738143,GB
-3276738144,3276738175,IT
-3276738176,3276738559,GB
-3276738560,3276738847,CH
-3276738848,3276739071,EU
-3276739072,3276739151,CH
-3276739152,3276739167,EU
-3276739168,3276740127,CH
-3276740128,3276740167,GB
-3276740168,3276740175,DE
-3276740176,3276740191,NL
-3276740192,3276740223,EU
-3276740224,3276740351,CH
-3276740352,3276740703,FR
-3276740704,3276740719,IT
-3276740720,3276740735,CZ
-3276740736,3276740799,PT
-3276740800,3276740815,SI
-3276740816,3276740831,SK
-3276740832,3276740863,DE
-3276740864,3276741375,FR
-3276741376,3276741631,EU
-3276741632,3276742655,FR
-3276742656,3276742735,RU
-3276742736,3276742751,NL
-3276742752,3276742783,GR
-3276742784,3276742911,HU
-3276742912,3276743071,AT
-3276743072,3276743103,DE
-3276743104,3276743135,HU
-3276743136,3276743167,NL
-3276743168,3276743423,EU
-3276743424,3276743903,AT
-3276743904,3276743935,BE
-3276743936,3276744191,AT
-3276744192,3276744703,BE
-3276744704,3276744959,IT
-3276744960,3276745215,GR
-3276745216,3276745295,DK
-3276745296,3276745311,NL
-3276745312,3276745343,DK
-3276745344,3276745407,DE
-3276745408,3276745655,DK
-3276745656,3276745663,EU
-3276745664,3276745727,DK
-3276745728,3276746047,GB
-3276746048,3276746111,DE
-3276746112,3276746239,IT
-3276746240,3276746335,GB
-3276746336,3276746351,BE
-3276746352,3276746367,NL
-3276746368,3276746751,GB
-3276746752,3276748287,CH
-3276748288,3276748799,GB
-3276748800,3276748951,AT
-3276748952,3276748959,GB
-3276748960,3276749023,AT
-3276749024,3276749055,IT
-3276749056,3276749087,AT
-3276749088,3276749103,FR
-3276749104,3276749119,EU
-3276749120,3276749183,NL
-3276749184,3276749311,DE
-3276749312,3276749343,BE
-3276749344,3276749375,DE
-3276749376,3276749823,BE
-3276749824,3276750151,NL
-3276750152,3276750159,GB
-3276750160,3276750175,FR
-3276750176,3276750207,BE
-3276750208,3276750335,FR
-3276750336,3276750431,GB
-3276750432,3276750463,EU
-3276750464,3276751039,GB
-3276751040,3276751071,FR
-3276751072,3276751087,GB
-3276751088,3276751103,NL
-3276751104,3276751175,GB
-3276751176,3276751199,SE
-3276751200,3276751231,EU
-3276751232,3276751295,IL
-3276751296,3276751359,AT
-3276751360,3276753055,GB
-3276753056,3276753071,NO
-3276753072,3276753119,GB
-3276753120,3276753151,IT
-3276753152,3276753375,GB
-3276753376,3276753407,FI
-3276753408,3276753951,GB
-3276753952,3276753983,HU
-3276753984,3276754991,GB
-3276754992,3276755007,DE
-3276755008,3276755071,HU
-3276755072,3276755199,DE
-3276755200,3276755775,GB
-3276755776,3276755791,NO
-3276755792,3276755807,RU
-3276755808,3276755839,GB
-3276755840,3276755967,ES
-3276755968,3276756031,GB
-3276756032,3276756063,NL
-3276756064,3276756095,BE
-3276756096,3276756287,GB
-3276756288,3276756319,SE
-3276756320,3276756351,FR
-3276756352,3276756671,GB
-3276756672,3276756735,DE
-3276756736,3276757119,GB
-3276757120,3276757135,NO
-3276757136,3276757151,NL
-3276757152,3276757183,GB
-3276757184,3276757247,EU
-3276757248,3276757503,GB
-3276757504,3276757759,EU
-3276757760,3276757823,GB
-3276757824,3276757839,DE
-3276757840,3276757855,ES
-3276757856,3276757887,CH
-3276757888,3276759039,GB
-3276759040,3276759695,DE
-3276759696,3276759711,NL
-3276759712,3276759743,DE
-3276759744,3276759775,CH
-3276759776,3276759807,EU
-3276759808,3276761215,DE
-3276761216,3276761279,ES
-3276761280,3276761919,DE
-3276761920,3276761983,GB
-3276761984,3276762015,DK
-3276762016,3276762111,FR
-3276762112,3276762623,DE
-3276762624,3276762879,EU
-3276762880,3276762943,DE
-3276762944,3276762959,GB
-3276762960,3276762975,IT
-3276762976,3276763007,NO
-3276763008,3276763327,DE
-3276763328,3276763391,SE
-3276763392,3276763519,DE
-3276763520,3276763551,IT
-3276763552,3276763567,CH
-3276763568,3276763583,GR
-3276763584,3276763647,GB
-3276763648,3276763967,DE
-3276763968,3276763983,DK
-3276763984,3276763991,GB
-3276763992,3276763999,BE
-3276764000,3276764031,IT
-3276764032,3276764159,EU
-3276764160,3276765183,DE
-3276765184,3276766975,GB
-3276766976,3276766983,FR
-3276766984,3276766991,EU
-3276766992,3276767015,FR
-3276767016,3276767023,DK
-3276767024,3276767039,BE
-3276767040,3276767079,FR
-3276767080,3276767087,GB
-3276767088,3276767103,NL
-3276767104,3276767231,FR
-3276767232,3276767743,ZA
-3276767744,3276767807,NL
-3276767808,3276767871,DK
-3276767872,3276767935,NL
-3276767936,3276767967,FR
-3276767968,3276767999,AT
-3276768000,3276768511,NL
-3276768512,3276768767,DE
-3276768768,3276768863,ES
-3276768864,3276768895,AT
-3276768896,3276769023,HU
-3276769024,3276769279,DE
-3276769280,3276769295,ES
-3276769296,3276769311,DE
-3276769312,3276769343,CH
-3276769344,3276769407,NL
-3276769408,3276769919,ES
-3276769920,3276769983,EU
-3276769984,3276770015,AT
-3276770016,3276770031,IT
-3276770032,3276770047,CH
-3276770048,3276770143,ES
-3276770144,3276770175,FI
-3276770176,3276770239,ES
-3276770240,3276770303,DK
-3276770304,3276770815,ES
-3276770816,3276770943,EU
-3276770944,3276771135,ES
-3276771136,3276771199,EU
-3276771200,3276771327,ES
-3276771328,3276771455,NL
-3276771456,3276771583,GB
-3276771584,3276772287,NL
-3276772288,3276772351,AT
-3276772352,3276772567,BE
-3276772568,3276772575,EU
-3276772576,3276773375,BE
-3276773376,3276774047,DK
-3276774048,3276774079,FI
-3276774080,3276774095,DK
-3276774096,3276774111,EU
-3276774112,3276774143,IE
-3276774144,3276774271,DK
-3276774272,3276774303,DE
-3276774304,3276774335,FR
-3276774336,3276774399,GB
-3276774400,3276774543,SE
-3276774544,3276774559,GB
-3276774560,3276774591,DE
-3276774592,3276774655,CH
-3276774656,3276775103,SE
-3276775104,3276775167,NL
-3276775168,3276775295,SE
-3276775296,3276775359,FR
-3276775360,3276775391,DK
-3276775392,3276775423,DE
-3276775424,3276781151,NL
-3276781152,3276781247,FR
-3276781248,3276781311,BE
-3276781312,3276781503,NL
-3276781504,3276781567,FR
-3276781568,3276782719,BE
-3276782720,3276782783,EU
-3276782784,3276782799,FR
-3276782800,3276782815,CZ
-3276782816,3276782847,ES
-3276782848,3276782975,BE
-3276782976,3276783039,GR
-3276783040,3276783055,DK
-3276783056,3276783071,GB
-3276783072,3276783087,PT
-3276783088,3276783103,CH
-3276783104,3276783615,IT
-3276783616,3276784383,FR
-3276784384,3276784639,EU
-3276784640,3276784895,FR
-3276784896,3276785151,NO
-3276785152,3276785407,IE
-3276785408,3276785439,PT
-3276785440,3276785455,GR
-3276785456,3276785463,GB
-3276785464,3276785471,IE
-3276785472,3276785535,PT
-3276785536,3276785567,BE
-3276785568,3276785599,PT
-3276785600,3276785607,TR
-3276785608,3276785615,PL
-3276785616,3276785631,CZ
-3276785632,3276785663,IT
-3276785664,3276785791,IL
-3276785792,3276785823,NL
-3276785824,3276785855,EU
-3276785856,3276785919,GB
-3276785920,3276786175,AT
-3276786176,3276786431,NO
-3276786432,3276786687,EU
-3276786688,3276786815,HU
-3276786816,3276786879,SE
-3276786880,3276786911,TR
-3276786912,3276786943,BE
-3276786944,3276787359,AT
-3276787360,3276787391,DE
-3276787392,3276787455,BE
-3276787456,3276787775,FR
-3276787776,3276787967,EU
-3276787968,3276788735,FR
-3276788736,3276788863,IE
-3276788864,3276788895,DE
-3276788896,3276788927,EU
-3276788928,3276788991,NL
-3276788992,3276789247,NO
-3276789248,3276789439,FI
-3276789440,3276789503,EU
-3276789504,3276789567,FR
-3276789568,3276789583,ES
-3276789584,3276789599,FR
-3276789600,3276789615,ES
-3276789616,3276789631,NL
-3276789632,3276789759,FR
-3276789760,3276790015,IT
-3276790016,3276790111,ES
-3276790112,3276790127,FR
-3276790128,3276790143,NL
-3276790144,3276790175,IT
-3276790176,3276790199,NL
-3276790200,3276790207,DE
-3276790208,3276790223,NL
-3276790224,3276790271,GB
-3276790272,3276790527,IE
-3276790528,3276790783,HU
-3276790784,3276790943,PK
-3276790944,3276791007,IT
-3276791008,3276791039,NL
-3276791040,3276791295,GB
-3276791296,3276791327,PT
-3276791328,3276791551,EU
-3276791552,3276792831,GB
-3276792832,3276793087,FR
-3276793088,3276793279,GB
-3276793280,3276793343,IE
-3276793344,3276793735,FR
-3276793736,3276793743,NL
-3276793744,3276793751,BE
-3276793752,3276793759,FR
-3276793760,3276793791,PL
-3276793792,3276793855,FR
-3276793856,3276794111,EU
-3276794112,3276794255,NL
-3276794256,3276794271,DE
-3276794272,3276794303,EU
-3276794304,3276794335,DK
-3276794336,3276794367,NL
-3276794368,3276795903,BE
+3276746752,3276747775,CH
+3276758016,3276759039,GB
+3276760064,3276761087,DE
+3276765184,3276766207,GB
+3276775424,3276780543,NL
+3276781568,3276782591,BE
+3276789280,3276789295,FI
+3276794880,3276795903,BE
3276795904,3276797951,AT
-3276797952,3276799103,EU
-3276799104,3276799231,GB
-3276799232,3276799295,EU
-3276799296,3276799359,GB
-3276799360,3276799391,NL
-3276799392,3276799455,AT
-3276799456,3276799471,PL
-3276799472,3276799487,NL
-3276799488,3276799743,DE
-3276799744,3276799775,NL
-3276799776,3276799807,GB
-3276799808,3276799839,FR
-3276799840,3276799871,ES
-3276799872,3276799999,NL
3276800000,3276824575,GB
3276824576,3276832767,EE
3276832768,3276834815,PL
@@ -128953,233 +67130,72 @@
3276858112,3276858367,KW
3276858368,3276858623,RU
3276858624,3276858879,PL
-3276859136,3276859647,UA
+3276859392,3276859647,UA
3276859648,3276859903,CH
3276859904,3276860159,AT
-3276860160,3276860415,EU
+3276860160,3276860415,CH
3276860416,3276860927,PL
3276860928,3276861183,BE
3276861184,3276861439,DE
3276861440,3276865535,DK
3276865536,3276866303,NL
-3276866304,3276866559,EU
+3276866304,3276866559,GB
3276866560,3276866815,IT
-3276866816,3276867071,EU
-3276867072,3276868607,IT
-3276868608,3276868863,NL
-3276868864,3276869119,IT
-3276869120,3276869631,GB
-3276869632,3276869695,IT
-3276869696,3276869727,GB
-3276869728,3276869855,IT
-3276869856,3276869887,GB
-3276869888,3276870143,NL
-3276870144,3276871679,IT
-3276871680,3276872255,DE
-3276872256,3276872319,CZ
-3276872320,3276872479,DE
-3276872480,3276872511,GB
-3276872512,3276872543,DE
-3276872544,3276872559,GB
-3276872560,3276872703,DE
-3276872704,3276873727,GB
-3276873728,3276874367,ES
-3276874368,3276874383,GB
-3276874384,3276874423,ES
-3276874424,3276874431,GB
-3276874432,3276874447,ES
-3276874448,3276874463,GB
-3276874464,3276874559,ES
-3276874560,3276874751,GB
-3276874752,3276875007,NL
-3276875008,3276875263,CH
-3276875264,3276875775,NL
-3276875776,3276876031,GB
-3276876032,3276876287,DK
-3276876288,3276876415,NL
-3276876416,3276876431,GB
-3276876432,3276876479,NL
-3276876480,3276877055,GB
-3276877056,3276877063,AT
-3276877064,3276877535,GB
-3276877536,3276877551,AT
-3276877552,3276877567,GB
-3276877568,3276877823,AT
-3276877824,3276878079,GB
-3276878080,3276878335,BG
-3276878336,3276878399,GB
-3276878400,3276878431,FR
-3276878432,3276878463,ES
-3276878464,3276878575,FR
-3276878576,3276878591,GB
-3276878592,3276878847,FR
-3276878848,3276879359,ES
-3276879360,3276879431,TR
-3276879432,3276879615,GB
-3276879616,3276879871,TR
-3276879872,3276880895,DK
-3276880896,3276881215,DE
-3276881216,3276881279,GB
-3276881280,3276881407,DE
-3276881408,3276881919,FR
-3276881920,3276883327,IT
-3276883328,3276883391,GB
-3276883392,3276883967,IT
-3276883968,3276884519,PL
-3276884520,3276884735,GB
-3276884736,3276884991,PL
-3276884992,3276886015,GB
-3276886016,3276886271,RO
-3276886272,3276887039,DE
-3276887040,3276887047,GB
-3276887048,3276888063,DE
-3276888064,3276888575,GB
-3276888576,3276889215,IT
-3276889216,3276890111,GB
-3276890112,3276890623,US
-3276890624,3276891135,IT
-3276891136,3276891391,BE
-3276891392,3276892159,US
-3276892160,3276895487,IT
-3276895488,3276895743,GB
-3276895744,3276895999,IT
-3276896000,3276896255,CZ
-3276896256,3276896767,BE
-3276896768,3276896775,GB
-3276896776,3276896831,BE
-3276896832,3276896847,SE
-3276896848,3276896863,BE
-3276896864,3276896879,GB
-3276896880,3276896959,BE
-3276896960,3276897023,GB
-3276897024,3276897663,BE
-3276897664,3276897727,GB
-3276897728,3276897759,BE
-3276897760,3276897919,GB
-3276897920,3276898303,CZ
-3276898304,3276898383,CH
-3276898384,3276898407,GB
-3276898408,3276898463,CH
-3276898464,3276898479,GB
-3276898480,3276900351,CH
-3276900352,3276900607,GB
-3276900608,3276901503,CH
-3276901504,3276901519,ES
-3276901520,3276901551,CH
-3276901552,3276901559,GB
-3276901560,3276902151,CH
-3276902152,3276902159,GB
-3276902160,3276902399,CH
-3276902400,3276902583,SE
-3276902584,3276902615,GB
-3276902616,3276902639,SE
-3276902640,3276902655,GB
-3276902656,3276903935,SE
-3276903936,3276903999,GB
-3276904000,3276904079,SE
-3276904080,3276904095,GB
-3276904096,3276904143,SE
-3276904144,3276904191,GB
-3276904192,3276904447,SE
-3276904448,3276905311,GB
-3276905312,3276905319,ES
-3276905320,3276905327,BE
-3276905328,3276905335,NL
-3276905336,3276905471,GB
-3276905472,3276905727,SE
-3276905728,3276905983,BE
-3276905984,3276905999,GB
-3276906000,3276906003,BE
-3276906004,3276906239,GB
-3276906240,3276906279,SE
-3276906280,3276906287,GB
-3276906288,3276906319,SE
-3276906320,3276906335,GB
-3276906336,3276906391,SE
-3276906392,3276906399,FI
-3276906400,3276906447,SE
-3276906448,3276906455,NO
-3276906456,3276906471,GB
-3276906472,3276906487,SE
-3276906488,3276906495,GB
-3276906496,3276906623,NL
-3276906624,3276906751,GB
-3276906752,3276906823,NL
-3276906824,3276906831,CH
-3276906832,3276907339,NL
-3276907340,3276907343,GB
-3276907344,3276908159,NL
-3276908160,3276908175,CH
-3276908176,3276908183,NL
-3276908184,3276908191,GB
-3276908192,3276908543,NL
-3276908544,3276908671,SE
-3276908672,3276908687,NL
-3276908688,3276908703,GB
-3276908704,3276908799,SE
-3276908800,3276909055,NL
-3276909056,3276909567,GB
-3276909568,3276910591,NL
-3276910592,3276911359,IT
-3276911360,3276911615,GB
-3276911616,3276912607,IT
-3276912608,3276912623,GB
-3276912624,3276912799,IT
-3276912800,3276912831,GB
-3276912832,3276912863,IT
-3276912864,3276912895,GB
-3276912896,3276913279,IT
-3276913280,3276913295,GB
-3276913296,3276913359,IT
-3276913360,3276913360,GB
-3276913361,3276913374,IT
-3276913375,3276913407,GB
-3276913408,3276913919,IT
-3276913920,3276913983,US
-3276913984,3276914079,IT
-3276914080,3276914095,GB
-3276914096,3276914687,IT
-3276914688,3276915567,ES
-3276915568,3276915583,NL
-3276915584,3276915711,GB
-3276915712,3276916047,ES
-3276916048,3276916055,GB
-3276916056,3276916087,ES
-3276916088,3276916095,GB
-3276916096,3276916167,ES
-3276916168,3276916183,GB
-3276916184,3276917151,ES
-3276917152,3276917167,GI
-3276917168,3276917183,GB
-3276917184,3276917231,ES
+3276866816,3276873983,GB
+3276873984,3276874239,ES
+3276874240,3276876383,GB
+3276876384,3276876415,NL
+3276876416,3276882431,GB
+3276882432,3276882943,IT
+3276882944,3276883711,GB
+3276883712,3276883967,IT
+3276883968,3276886363,GB
+3276886364,3276886367,DE
+3276886368,3276890111,GB
+3276890112,3276890367,US
+3276890368,3276892159,GB
+3276892160,3276893183,IT
+3276893184,3276893695,GB
+3276893696,3276893951,IT
+3276893952,3276898671,GB
+3276898672,3276898687,CH
+3276898688,3276903167,GB
+3276903168,3276903679,SE
+3276903680,3276907519,GB
+3276907520,3276907775,NL
+3276907776,3276908287,GB
+3276908288,3276908543,BE
+3276908544,3276908799,SE
+3276908800,3276909823,GB
+3276909824,3276910079,SE
+3276910080,3276911615,GB
+3276911616,3276911871,IT
+3276911872,3276912207,GB
+3276912208,3276912215,IT
+3276912216,3276912383,GB
+3276912384,3276912511,IT
+3276912512,3276912879,GB
+3276912880,3276912895,IT
+3276912896,3276917231,GB
3276917232,3276917247,FR
-3276917248,3276917279,ES
-3276917280,3276917295,GB
-3276917296,3276917327,ES
-3276917328,3276917343,GB
-3276917344,3276918783,ES
-3276918784,3276920447,DE
-3276920448,3276920479,GB
-3276920480,3276920551,DE
-3276920552,3276920559,GB
-3276920560,3276921183,DE
-3276921184,3276921187,GB
-3276921188,3276921239,DE
-3276921240,3276921247,GB
-3276921248,3276921279,DE
-3276921280,3276921303,GB
-3276921304,3276921343,DE
-3276921344,3276921399,GB
-3276921400,3276921403,DK
-3276921404,3276921599,GB
-3276921600,3276922623,DE
-3276922624,3276926847,FR
-3276926848,3276931071,GB
+3276917248,3276919375,GB
+3276919376,3276919391,DE
+3276919392,3276919471,GB
+3276919472,3276919479,DE
+3276919480,3276919487,GB
+3276919488,3276919535,DE
+3276919536,3276922879,GB
+3276922880,3276923135,FR
+3276923136,3276923647,GB
+3276923648,3276924159,FR
+3276924160,3276925951,GB
+3276925952,3276926207,FR
+3276926208,3276931071,GB
3276931072,3276939263,KZ
3276939264,3276955647,DE
3276955648,3276963839,GB
3276963840,3276964351,IL
-3276964352,3276965375,RO
+3276964352,3276964863,RO
3276965376,3276966399,RU
3276966400,3276966911,BH
3276966912,3276968959,RU
@@ -129197,17 +67213,14 @@
3277160448,3277176831,NL
3277176832,3277177087,SI
3277177088,3277177343,GB
-3277177344,3277177599,RO
3277177600,3277178111,PL
-3277178112,3277178623,UA
+3277178368,3277178623,UA
3277178624,3277178879,PL
3277178880,3277179135,ES
-3277179136,3277179391,RO
3277179392,3277179647,DE
3277179648,3277180159,BE
3277180160,3277180415,NL
3277180416,3277180671,RU
-3277180672,3277180927,FR
3277180928,3277181183,UA
3277181184,3277181439,PL
3277181440,3277181695,DE
@@ -129218,15 +67231,12 @@
3277182720,3277182975,BG
3277182976,3277183231,UA
3277183232,3277183487,DE
-3277183488,3277183743,DK
3277183744,3277183999,UA
3277184000,3277184255,DE
3277184256,3277184511,PT
3277184512,3277184767,DE
-3277184768,3277185023,UA
3277185024,3277185279,SA
3277185280,3277185535,RU
-3277185536,3277185791,DE
3277185792,3277186047,PL
3277186048,3277186303,IT
3277186304,3277186559,DE
@@ -129251,14 +67261,13 @@
3277191936,3277192191,DK
3277192192,3277192447,PL
3277192448,3277192703,DK
-3277192704,3277192959,GG
+3277192704,3277192959,DE
3277192960,3277193215,TR
-3277193216,3277254727,NL
-3277254728,3277254735,DE
-3277254736,3277258751,NL
+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
@@ -129268,7 +67277,6 @@
3277328896,3277329407,NL
3277329408,3277329919,GB
3277329920,3277330431,RU
-3277330432,3277330943,RO
3277330944,3277331455,UA
3277331456,3277332479,PL
3277332480,3277332991,NL
@@ -129283,7 +67291,7 @@
3277337088,3277337599,PL
3277337600,3277338111,UA
3277338112,3277338623,NO
-3277338624,3277339647,RU
+3277339136,3277339647,RU
3277339648,3277340159,DE
3277340160,3277340671,RU
3277340672,3277341183,RO
@@ -129303,7 +67311,7 @@
3277348352,3277348863,FR
3277348864,3277349887,RO
3277349888,3277350399,GB
-3277350400,3277351423,RU
+3277350400,3277350911,RU
3277351424,3277351935,NO
3277351936,3277352447,DE
3277352448,3277352959,SE
@@ -129327,13 +67335,12 @@
3277362176,3277362687,ES
3277363200,3277363711,ES
3277363712,3277364223,RU
-3277364224,3277364735,NL
+3277364224,3277364735,GB
3277364736,3277365247,UA
3277365248,3277365759,NL
3277365760,3277366271,GR
3277366272,3277366783,CZ
3277366784,3277367295,AT
-3277367296,3277367807,PL
3277367808,3277368319,RU
3277368320,3277369343,RO
3277369344,3277369855,CY
@@ -129357,9 +67364,7 @@
3277380608,3277381119,RU
3277381120,3277381631,KW
3277381632,3277382143,RU
-3277382144,3277382655,MD
3277382656,3277383167,GB
-3277383168,3277383679,UA
3277383680,3277384191,PL
3277384704,3277385215,GB
3277385216,3277385727,AT
@@ -129373,45 +67378,53 @@
3277389312,3277389823,AM
3277389824,3277394943,GB
3277394944,3277395455,US
-3277395456,3277403135,GB
-3277403136,3277403647,FR
-3277403648,3277404159,ES
+3277395456,3277402591,GB
+3277402592,3277402607,ES
+3277402608,3277403135,GB
+3277403136,3277403215,FR
+3277403216,3277403231,GB
+3277403232,3277403279,FR
+3277403280,3277403295,DE
+3277403296,3277403311,FR
+3277403312,3277403327,GB
+3277403328,3277403359,FR
+3277403360,3277403391,GB
+3277403392,3277403455,FR
+3277403456,3277403647,GB
+3277403648,3277403807,ES
+3277403808,3277404159,GB
3277404160,3277404415,DE
-3277404416,3277404671,IT
-3277404672,3277404927,CH
-3277404928,3277405183,NL
-3277405184,3277405439,SE
-3277405440,3277452639,GB
+3277404416,3277404511,IT
+3277404512,3277404527,GB
+3277404528,3277404649,IT
+3277404650,3277404671,GB
+3277404672,3277404735,CH
+3277404736,3277404927,GB
+3277404928,3277404975,NL
+3277404976,3277405183,GB
+3277405184,3277405263,SE
+3277405264,3277405439,GB
+3277405440,3277405471,DE
+3277405472,3277452639,GB
3277452640,3277452647,IE
3277452648,3277452655,DK
3277452656,3277455359,GB
-3277455360,3277456895,DE
-3277456896,3277457151,CH
-3277457152,3277463551,DE
-3277463552,3277463807,GB
-3277463808,3277464063,US
-3277464064,3277464575,FR
-3277464576,3277464831,BE
-3277464832,3277467471,US
-3277467472,3277467551,CA
-3277467552,3277471743,US
-3277471744,3277472607,NL
-3277472608,3277472623,IL
-3277472624,3277474815,NL
+3277455360,3277463551,DE
+3277463552,3277471743,US
+3277471744,3277474815,NL
3277474816,3277475711,BE
3277475712,3277476607,NL
3277476608,3277477631,BE
3277477632,3277479935,NL
-3277479936,3277480959,GB
+3277479936,3277480447,GB
3277480960,3277481471,DK
3277481472,3277481983,PL
3277481984,3277482495,SE
3277482496,3277483007,PL
3277483008,3277483519,IT
3277483520,3277484031,RO
-3277484032,3277484543,CH
-3277485056,3277485567,CH
-3277485568,3277486591,GB
+3277484032,3277486079,CH
+3277486080,3277486591,GB
3277486592,3277487103,UA
3277487104,3277487615,RO
3277487616,3277488127,PL
@@ -129446,21 +67459,17 @@
3277695488,3277695999,ES
3277696000,3277696511,UA
3277696512,3277697023,AT
-3277697024,3277697535,RO
3277697536,3277698047,PL
3277698048,3277698559,RU
3277698560,3277699071,DE
-3277699072,3277699583,UA
3277699584,3277700607,RU
3277700608,3277701119,UA
3277701120,3277701631,DK
3277701632,3277702143,AT
-3277702144,3277702655,EU
3277702656,3277703679,DE
3277703680,3277704191,PL
3277704192,3277704703,UA
3277704704,3277705215,RU
-3277705216,3277705727,KZ
3277705728,3277706239,ES
3277706240,3277707263,UA
3277707264,3277707775,CZ
@@ -129484,7 +67493,8 @@
3277717504,3277725695,YE
3277725696,3277733887,CH
3277733888,3277742079,DE
-3277742080,3277750271,FI
+3277742080,3277746175,FI
+3277746176,3277750271,GB
3277750272,3277766655,IT
3277766656,3277774847,PL
3277774848,3277783039,RU
@@ -129494,7 +67504,7 @@
3277816576,3277816831,GB
3277816832,3277817087,CH
3277817088,3277817343,GB
-3277817344,3277817855,FR
+3277817600,3277817855,FR
3277817856,3277818111,BE
3277818112,3277818367,DE
3277818368,3277818623,CY
@@ -129509,12 +67519,11 @@
3277820672,3277820927,UA
3277820928,3277821183,CH
3277821184,3277821439,TR
-3277821440,3277821695,GB
+3277821440,3277821695,NL
3277821696,3277821951,UA
3277821952,3277822207,RO
3277822208,3277822463,ES
3277822464,3277822719,PL
-3277822720,3277822975,RU
3277822976,3277823231,SG
3277823232,3277823487,UA
3277823488,3277823743,SI
@@ -129540,23 +67549,20 @@
3277829632,3277829887,PL
3277829888,3277830143,IL
3277830144,3277830399,SE
-3277830400,3277830655,UA
3277830656,3277830911,PL
3277830912,3277831167,GB
3277831168,3277831423,PL
3277831424,3277831679,UA
3277831680,3277832191,IE
-3277832192,3277833215,EU
3277833216,3277833727,BE
3277833728,3277834239,NL
-3277834240,3277834751,RU
3277834752,3277835263,UA
3277835264,3277835775,SK
3277835776,3277836287,UA
3277836288,3277836799,FI
3277836800,3277837311,UA
3277837312,3277839103,RU
-3277839104,3277839359,CH
+3277839104,3277839359,AE
3277839360,3277839871,DE
3277839872,3277840383,UA
3277840384,3277840895,FR
@@ -129575,19 +67581,11 @@
3277856768,3277864959,DE
3277864960,3277873151,RU
3277873152,3277881343,NL
-3277881344,3277881375,A2
-3277881376,3277881407,IT
-3277881408,3277884175,A2
-3277884176,3277884191,IR
-3277884192,3277885439,A2
-3277885440,3277885695,IQ
-3277885696,3277885727,LB
-3277885728,3277885951,A2
-3277885952,3277886463,LB
+3277881344,3277886463,IT
3277886464,3277887487,IQ
-3277887488,3277888255,A2
+3277887488,3277888255,IT
3277888256,3277888767,LB
-3277888768,3277889535,A2
+3277888768,3277889535,IT
3277889536,3277897727,RU
3277897728,3277905919,IT
3277905920,3277914111,BG
@@ -129601,51 +67599,17 @@
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,3278103039,GB
-3278103040,3278103295,FR
-3278103296,3278110719,GB
-3278110720,3278110751,SE
-3278110752,3278110767,ES
-3278110768,3278115327,SE
-3278115328,3278116607,ES
-3278116608,3278116863,SE
-3278116864,3278118399,ES
-3278118400,3278118911,SE
-3278118912,3278118975,NL
-3278118976,3278119935,SE
-3278119936,3278119943,DE
-3278119944,3278120151,SE
-3278120152,3278120159,DE
-3278120160,3278125055,SE
-3278125056,3278125567,NL
-3278125568,3278161631,SE
-3278161632,3278161647,DE
-3278161648,3278168111,SE
-3278168112,3278168119,DK
-3278168120,3278168175,SE
-3278168176,3278168191,DK
-3278168192,3278176255,SE
-3278176256,3278220799,FR
-3278220800,3278221055,GB
-3278221056,3278221091,FR
-3278221092,3278221093,GB
-3278221094,3278241791,FR
+3278065664,3278110719,GB
+3278110720,3278176255,SE
+3278176256,3278210559,FR
+3278210560,3278210815,MQ
+3278210816,3278241791,FR
3278241792,3278307327,GB
-3278307328,3278358527,IT
-3278358528,3278358783,US
-3278358784,3278372863,IT
+3278307328,3278372863,IT
3278372864,3278635007,GB
-3278635008,3278635263,NL
-3278635264,3278635519,EU
-3278635520,3278744791,NL
-3278744792,3278744799,A2
-3278744800,3278766079,NL
-3278766080,3278766591,RO
-3278766592,3278767103,RU
+3278635008,3278766079,NL
3278767104,3278767615,RO
3278767616,3278768127,UA
3278768128,3278769151,GB
@@ -129653,7 +67617,6 @@
3278769664,3278770175,DE
3278770176,3278770687,DK
3278770688,3278771711,DE
-3278771712,3278772223,NL
3278772224,3278772735,BG
3278772736,3278773247,DE
3278773248,3278773759,NO
@@ -129673,2452 +67636,148 @@
3278780928,3278781439,LT
3278781440,3278781951,DE
3278781952,3278782463,RU
-3278782464,3278782975,GB
-3278782976,3278783231,DE
-3278783232,3278784703,GB
-3278784704,3278784735,NL
-3278784736,3278786911,GB
-3278786912,3278786943,LU
-3278786944,3278787567,GB
-3278787568,3278787583,FR
-3278787584,3278789935,GB
-3278789936,3278789951,US
-3278789952,3278790095,GB
+3278782464,3278790095,GB
3278790096,3278790111,ES
3278790112,3278790655,GB
3278790656,3278807039,IT
3278807040,3278815231,GB
3278815232,3278823423,AT
3278823424,3278831615,FR
-3278831616,3278865663,HU
-3278865664,3278865919,SK
-3278865920,3278897151,HU
+3278831616,3278897151,HU
3278897152,3278913535,GB
3278913536,3278921727,CH
3278921728,3278929919,RU
3278929920,3278938111,TR
-3278938112,3278938119,DE
-3278938120,3278938123,DK
-3278938124,3278938127,DE
-3278938128,3278938131,TR
-3278938132,3278938151,DE
-3278938152,3278938155,GB
-3278938156,3278938159,DE
-3278938160,3278938163,ES
-3278938164,3278938167,CH
-3278938168,3278938171,DE
-3278938172,3278938175,NL
-3278938176,3278938179,FR
-3278938180,3278938183,NL
-3278938184,3278938187,DE
-3278938188,3278938191,PT
-3278938192,3278938195,ES
-3278938196,3278938199,NL
-3278938200,3278938203,CH
-3278938204,3278938207,DE
-3278938208,3278938219,IT
-3278938220,3278938223,FR
-3278938224,3278938227,DE
-3278938228,3278938231,FR
-3278938232,3278938235,DE
-3278938236,3278938239,FR
-3278938240,3278938243,LI
-3278938244,3278938247,IT
-3278938248,3278938251,AT
-3278938252,3278938255,GR
-3278938256,3278938263,CH
-3278938264,3278938267,PL
-3278938268,3278938275,FR
-3278938276,3278938279,NL
-3278938280,3278938283,AT
-3278938284,3278938287,FR
-3278938288,3278938291,ES
-3278938292,3278938299,DE
-3278938300,3278938303,ES
-3278938304,3278938307,DE
-3278938308,3278938311,GB
-3278938312,3278938315,DE
-3278938316,3278938323,FR
-3278938324,3278938335,DE
-3278938336,3278938339,CH
-3278938340,3278938343,DE
-3278938344,3278938347,NL
-3278938348,3278938351,FR
-3278938352,3278938359,DE
-3278938360,3278938363,DK
-3278938364,3278938367,BH
-3278938368,3278938375,FR
-3278938376,3278938379,DE
-3278938380,3278938383,FR
-3278938384,3278938399,DE
-3278938400,3278938403,AT
-3278938404,3278938407,GB
-3278938408,3278938411,CH
-3278938412,3278938415,DE
-3278938416,3278938419,CH
-3278938420,3278938423,GB
-3278938424,3278938427,DE
-3278938428,3278938431,FR
-3278938432,3278938435,SI
-3278938436,3278938439,DE
-3278938440,3278938443,IT
-3278938444,3278938447,DE
-3278938448,3278938451,IT
-3278938452,3278938455,GB
-3278938456,3278938459,ES
-3278938460,3278938463,FR
-3278938464,3278938467,DE
-3278938468,3278938471,NL
-3278938472,3278938479,DE
-3278938480,3278938483,CH
-3278938484,3278938487,DE
-3278938488,3278938491,NL
-3278938492,3278938495,ES
-3278938496,3278938499,NL
-3278938500,3278938503,DE
-3278938504,3278938507,SE
-3278938508,3278938511,IT
-3278938512,3278938515,DE
-3278938516,3278938523,NL
-3278938524,3278938527,FR
-3278938528,3278938531,NO
-3278938532,3278938535,DK
-3278938536,3278938555,DE
-3278938556,3278938559,HU
-3278938560,3278938563,CY
-3278938564,3278938567,FR
-3278938568,3278938575,DE
-3278938576,3278938579,CZ
-3278938580,3278938583,DE
-3278938584,3278938587,GB
-3278938588,3278938591,CH
-3278938592,3278938595,DE
-3278938596,3278938599,DK
-3278938600,3278938603,DE
-3278938604,3278938607,IT
-3278938608,3278938611,AT
-3278938612,3278938615,NL
-3278938616,3278938619,DK
-3278938620,3278938627,FR
-3278938628,3278938631,DE
-3278938632,3278938635,NL
-3278938636,3278938639,GB
-3278938640,3278938643,DE
-3278938644,3278938647,GB
-3278938648,3278938659,DE
-3278938660,3278938663,CH
-3278938664,3278938667,GB
-3278938668,3278938671,AT
-3278938672,3278938675,IT
-3278938676,3278938679,FR
-3278938680,3278938683,NO
-3278938684,3278938687,DE
-3278938688,3278938691,CH
-3278938692,3278938695,DE
-3278938696,3278938699,IT
-3278938700,3278938703,ES
-3278938704,3278938707,FR
-3278938708,3278938715,DE
-3278938716,3278938719,CH
-3278938720,3278938723,NL
-3278938724,3278938727,BE
-3278938728,3278938731,ES
-3278938732,3278938735,CH
-3278938736,3278938739,IT
-3278938740,3278938743,FR
-3278938744,3278938751,DE
-3278938752,3278938755,CH
-3278938756,3278938759,DE
-3278938760,3278938763,GB
-3278938764,3278938767,FR
-3278938768,3278938771,GB
-3278938772,3278938775,SE
-3278938776,3278938779,GB
-3278938780,3278938783,IT
-3278938784,3278938787,BE
-3278938788,3278938791,ES
-3278938792,3278938795,DE
-3278938796,3278938799,GR
-3278938800,3278938803,DE
-3278938804,3278938807,IT
-3278938808,3278938815,GB
-3278938816,3278938819,ES
-3278938820,3278938827,DE
-3278938828,3278938831,GB
-3278938832,3278938835,IT
-3278938836,3278938839,FR
-3278938840,3278938843,DE
-3278938844,3278938847,HU
-3278938848,3278938851,CH
-3278938852,3278938855,DE
-3278938856,3278938859,PT
-3278938860,3278938863,DE
-3278938864,3278938871,IT
-3278938872,3278938875,DE
-3278938876,3278938879,NL
-3278938880,3278938887,FR
-3278938888,3278938891,ES
-3278938892,3278938895,DE
-3278938896,3278938903,FR
-3278938904,3278938911,GB
-3278938912,3278938919,DE
-3278938920,3278938923,SK
-3278938924,3278938927,DE
-3278938928,3278938935,GB
-3278938936,3278938939,CH
-3278938940,3278938943,GR
-3278938944,3278938947,IT
-3278938948,3278938951,DE
-3278938952,3278938955,FR
-3278938956,3278938959,GB
-3278938960,3278938967,DE
-3278938968,3278938971,BE
-3278938972,3278938975,DE
-3278938976,3278938979,NL
-3278938980,3278938987,FR
-3278938988,3278938991,AT
-3278938992,3278938995,FR
-3278938996,3278938999,DE
-3278939000,3278939003,ES
-3278939004,3278939007,NL
-3278939008,3278939011,IE
-3278939012,3278939015,RU
-3278939016,3278939019,ES
-3278939020,3278939023,NL
-3278939024,3278939027,IT
-3278939028,3278939031,CY
-3278939032,3278939035,DE
-3278939036,3278939039,HU
-3278939040,3278939047,DE
-3278939048,3278939055,FR
-3278939056,3278939075,DE
-3278939076,3278939079,CH
-3278939080,3278939083,DE
-3278939084,3278939087,IT
-3278939088,3278939091,IS
-3278939092,3278939095,DE
-3278939096,3278939099,IT
-3278939100,3278939103,DE
-3278939104,3278939107,CH
-3278939108,3278939111,FR
-3278939112,3278939115,DE
-3278939116,3278939119,NL
-3278939120,3278939131,DE
-3278939132,3278939135,NL
-3278939136,3278939147,US
-3278939148,3278939151,AR
-3278939152,3278939155,ES
-3278939156,3278939195,US
-3278939196,3278939199,CL
-3278939200,3278939259,US
-3278939260,3278939263,BR
-3278939264,3278939271,AR
-3278939272,3278939279,US
-3278939280,3278939283,CO
-3278939284,3278939291,US
-3278939292,3278939295,AR
-3278939296,3278939307,US
-3278939308,3278939311,MX
-3278939312,3278939315,US
-3278939316,3278939319,AR
-3278939320,3278939323,US
-3278939324,3278939327,CA
-3278939328,3278939331,US
-3278939332,3278939335,BR
-3278939336,3278939339,CA
-3278939340,3278939351,US
-3278939352,3278939355,BR
-3278939356,3278939379,US
-3278939380,3278939383,BR
-3278939384,3278939391,US
-3278939392,3278939395,DE
-3278939396,3278939399,GB
-3278939400,3278939403,DE
-3278939404,3278939407,CH
-3278939408,3278939415,DE
-3278939416,3278939419,ZW
-3278939420,3278939423,IE
-3278939424,3278939427,GB
-3278939428,3278939439,DE
-3278939440,3278939443,IT
-3278939444,3278939447,DE
-3278939448,3278939451,PL
-3278939452,3278939459,DE
-3278939460,3278939463,DK
-3278939464,3278939467,CY
-3278939468,3278939471,DE
-3278939472,3278939475,PL
-3278939476,3278939479,BE
-3278939480,3278939483,IT
-3278939484,3278939491,NL
-3278939492,3278939495,DE
-3278939496,3278939499,CH
-3278939500,3278939503,ES
-3278939504,3278939511,DE
-3278939512,3278939515,LU
-3278939516,3278939523,NL
-3278939524,3278939527,LU
-3278939528,3278939531,FR
-3278939532,3278939535,DE
-3278939536,3278939539,BE
-3278939540,3278939555,DE
-3278939556,3278939559,IT
-3278939560,3278939563,DE
-3278939564,3278939567,FR
-3278939568,3278939571,PT
-3278939572,3278939575,ES
-3278939576,3278939579,DE
-3278939580,3278939583,NL
-3278939584,3278939587,IT
-3278939588,3278939591,LU
-3278939592,3278939595,AO
-3278939596,3278939599,NL
-3278939600,3278939603,GB
-3278939604,3278939607,DE
-3278939608,3278939611,DK
+3278938112,3278939611,DE
3278939612,3278939615,FR
-3278939616,3278939631,DE
-3278939632,3278939635,GB
-3278939636,3278939639,DK
-3278939640,3278939643,DE
-3278939644,3278939647,UA
-3278939648,3278939651,FR
-3278939652,3278939655,DE
-3278939656,3278939659,FR
-3278939660,3278939663,TR
-3278939664,3278939667,IT
-3278939668,3278939671,GB
-3278939672,3278939679,FR
-3278939680,3278939683,GR
-3278939684,3278939687,FR
-3278939688,3278939691,DE
-3278939692,3278939695,FR
-3278939696,3278939699,GR
-3278939700,3278939703,TR
-3278939704,3278939707,KE
-3278939708,3278939711,TR
-3278939712,3278939715,CY
-3278939716,3278939723,TR
-3278939724,3278939727,MC
-3278939728,3278939731,DE
-3278939732,3278939735,AT
-3278939736,3278939739,RU
-3278939740,3278939743,HU
-3278939744,3278939747,GB
-3278939748,3278939751,ES
-3278939752,3278939755,GR
-3278939756,3278939759,DE
-3278939760,3278939763,FR
-3278939764,3278939767,DE
-3278939768,3278939771,ES
-3278939772,3278939775,IT
-3278939776,3278939779,DE
-3278939780,3278939783,FR
-3278939784,3278939787,BE
-3278939788,3278939791,DE
-3278939792,3278939795,ES
-3278939796,3278939799,DE
-3278939800,3278939803,ES
-3278939804,3278939807,GB
-3278939808,3278939815,DE
-3278939816,3278939819,NL
-3278939820,3278939823,DE
-3278939824,3278939827,HU
-3278939828,3278939835,DE
-3278939836,3278939839,FR
-3278939840,3278939843,IT
-3278939844,3278939847,BE
-3278939848,3278939851,CH
-3278939852,3278939855,DE
-3278939856,3278939859,FR
-3278939860,3278939863,GB
-3278939864,3278939867,IT
-3278939868,3278939871,CH
-3278939872,3278939875,ES
-3278939876,3278939879,IT
-3278939880,3278939883,ES
-3278939884,3278939887,DE
-3278939888,3278939891,PL
-3278939892,3278939899,ES
-3278939900,3278939903,IT
-3278939904,3278939907,HK
-3278939908,3278939911,MY
-3278939912,3278939915,TH
-3278939916,3278939923,SG
-3278939924,3278939927,CN
-3278939928,3278939931,SG
-3278939932,3278939935,IN
-3278939936,3278939939,MY
-3278939940,3278939943,SG
-3278939944,3278939947,TW
-3278939948,3278939951,SG
-3278939952,3278939955,MY
-3278939956,3278939959,SG
-3278939960,3278939963,CN
-3278939964,3278939967,MY
-3278939968,3278939971,TW
-3278939972,3278939979,MY
-3278939980,3278939983,TH
-3278939984,3278939987,DE
-3278939988,3278939991,CN
-3278939992,3278939995,SG
-3278939996,3278939999,MY
-3278940000,3278940011,SG
-3278940012,3278940015,ID
-3278940016,3278940059,SG
-3278940060,3278940067,CN
-3278940068,3278940071,TW
-3278940072,3278940083,SG
-3278940084,3278940091,MY
-3278940092,3278940095,SG
-3278940096,3278940099,IN
-3278940100,3278940103,SG
-3278940104,3278940107,MY
-3278940108,3278940127,SG
-3278940128,3278940131,TW
-3278940132,3278940135,BD
-3278940136,3278940139,SG
-3278940140,3278940143,IN
-3278940144,3278940151,MY
-3278940152,3278940155,IN
-3278940156,3278940159,PH
-3278940160,3278940163,GR
-3278940164,3278940167,CH
-3278940168,3278940171,DK
-3278940172,3278940175,FR
-3278940176,3278940179,GB
-3278940180,3278940183,CH
-3278940184,3278940187,DE
-3278940188,3278940195,GB
-3278940196,3278940211,DE
-3278940212,3278940215,PT
-3278940216,3278940219,NL
-3278940220,3278940223,GB
-3278940224,3278940227,CH
-3278940228,3278940231,DE
-3278940232,3278940235,CH
-3278940236,3278940239,ES
-3278940240,3278940243,CY
-3278940244,3278940247,DE
-3278940248,3278940251,FR
-3278940252,3278940255,IT
-3278940256,3278940259,BE
-3278940260,3278940263,DE
-3278940264,3278940267,ES
-3278940268,3278940275,DE
-3278940276,3278940279,GB
-3278940280,3278940283,CH
-3278940284,3278940291,NL
-3278940292,3278940295,DE
-3278940296,3278940299,IT
-3278940300,3278940303,FR
-3278940304,3278940307,DE
-3278940308,3278940311,CH
-3278940312,3278940315,IT
-3278940316,3278940319,DE
-3278940320,3278940323,NL
-3278940324,3278940327,ES
-3278940328,3278940335,DE
-3278940336,3278940339,NL
-3278940340,3278940347,DE
-3278940348,3278940355,GB
+3278939616,3278940055,DE
+3278940056,3278940059,SG
+3278940060,3278940355,DE
3278940356,3278940359,NL
-3278940360,3278940363,GR
-3278940364,3278940367,IT
-3278940368,3278940371,FR
-3278940372,3278940375,GB
-3278940376,3278940379,PT
-3278940380,3278940383,FR
-3278940384,3278940387,NL
-3278940388,3278940391,IE
-3278940392,3278940395,FR
-3278940396,3278940399,NL
-3278940400,3278940403,DE
-3278940404,3278940407,FR
-3278940408,3278940411,IT
-3278940412,3278940412,CH
-3278940413,3278940415,DE
-3278940416,3278940419,BE
-3278940420,3278940423,DE
-3278940424,3278940427,CH
-3278940428,3278940431,DE
-3278940432,3278940443,CH
-3278940444,3278940447,DE
-3278940448,3278940451,GB
-3278940452,3278940455,DE
-3278940456,3278940459,GB
-3278940460,3278940463,DE
-3278940464,3278940467,FR
-3278940468,3278940471,DE
-3278940472,3278940475,ES
-3278940476,3278940479,FR
-3278940480,3278940483,CH
-3278940484,3278940487,FR
-3278940488,3278940491,ES
-3278940492,3278940495,IT
-3278940496,3278940499,NL
-3278940500,3278940503,FR
-3278940504,3278940507,DK
-3278940508,3278940511,FR
-3278940512,3278940515,DE
-3278940516,3278940523,CH
-3278940524,3278940531,ES
-3278940532,3278940535,DE
-3278940536,3278940539,CH
-3278940540,3278940543,ES
-3278940544,3278940551,DE
-3278940552,3278940555,GB
-3278940556,3278940559,DE
-3278940560,3278940563,AT
-3278940564,3278940571,FR
-3278940572,3278940579,CH
-3278940580,3278940587,DE
-3278940588,3278940591,IT
-3278940592,3278940595,FR
-3278940596,3278940599,BE
-3278940600,3278940603,DE
-3278940604,3278940607,FR
-3278940608,3278940611,ES
-3278940612,3278940615,PT
-3278940616,3278940619,IT
-3278940620,3278940623,DE
-3278940624,3278940631,IT
-3278940632,3278940635,GB
-3278940636,3278940639,BE
-3278940640,3278940643,CH
-3278940644,3278940647,IT
-3278940648,3278940651,DE
-3278940652,3278940655,FR
-3278940656,3278940663,IT
-3278940664,3278940671,FR
-3278940672,3278940679,DE
-3278940680,3278940683,CH
-3278940684,3278940691,NL
-3278940692,3278940695,SE
-3278940696,3278940707,DE
-3278940708,3278940711,ES
-3278940712,3278940715,BE
-3278940716,3278940723,ES
-3278940724,3278940727,FR
-3278940728,3278940731,DE
-3278940732,3278940739,FR
-3278940740,3278940743,GB
-3278940744,3278940747,ES
-3278940748,3278940751,DE
-3278940752,3278940759,FR
-3278940760,3278940763,NL
-3278940764,3278940767,DE
-3278940768,3278940771,GB
-3278940772,3278940783,DE
-3278940784,3278940787,CH
-3278940788,3278940791,GB
-3278940792,3278940795,NL
-3278940796,3278940803,DE
-3278940804,3278940807,DK
-3278940808,3278940815,DE
-3278940816,3278940819,IT
-3278940820,3278940823,DE
-3278940824,3278940827,IT
-3278940828,3278940831,DE
-3278940832,3278940835,CH
-3278940836,3278940839,IT
-3278940840,3278940847,DE
-3278940848,3278940851,CH
-3278940852,3278940855,DE
-3278940856,3278940859,PT
-3278940860,3278940863,NL
-3278940864,3278940867,CH
+3278940360,3278940867,DE
3278940868,3278940871,GB
-3278940872,3278940875,DE
-3278940876,3278940879,IT
-3278940880,3278940883,CH
-3278940884,3278940887,ES
-3278940888,3278940891,BE
-3278940892,3278940895,DE
-3278940896,3278940899,IT
-3278940900,3278940903,FR
-3278940904,3278940911,ES
-3278940912,3278940915,IT
-3278940916,3278940919,DE
-3278940920,3278940923,PT
-3278940924,3278940931,DE
-3278940932,3278940935,NL
-3278940936,3278940939,ES
-3278940940,3278940943,FR
-3278940944,3278940947,NL
-3278940948,3278940951,FR
-3278940952,3278940955,IT
-3278940956,3278940959,DK
-3278940960,3278940963,FR
-3278940964,3278940967,IT
-3278940968,3278940971,FR
-3278940972,3278940983,DE
-3278940984,3278940987,IT
-3278940988,3278940991,NL
-3278940992,3278940995,PT
-3278940996,3278940999,DE
-3278941000,3278941003,NL
-3278941004,3278941007,CH
-3278941008,3278941011,ES
-3278941012,3278941015,GB
-3278941016,3278941023,DE
-3278941024,3278941027,IT
-3278941028,3278941031,FR
-3278941032,3278941035,DE
-3278941036,3278941039,IT
-3278941040,3278941043,DE
-3278941044,3278941047,FR
-3278941048,3278941051,ES
-3278941052,3278941059,DE
-3278941060,3278941063,GB
-3278941064,3278941067,IT
-3278941068,3278941071,ES
-3278941072,3278941075,IT
-3278941076,3278941083,DE
-3278941084,3278941087,GB
-3278941088,3278941091,BE
-3278941092,3278941095,DK
-3278941096,3278941099,FR
-3278941100,3278941107,DE
-3278941108,3278941111,DK
-3278941112,3278941119,FR
-3278941120,3278941127,DE
-3278941128,3278941131,BE
-3278941132,3278941135,NL
-3278941136,3278941139,GB
-3278941140,3278941143,DE
-3278941144,3278941151,IT
-3278941152,3278941155,DE
-3278941156,3278941159,SE
-3278941160,3278941167,DE
-3278941168,3278941171,GB
-3278941172,3278941175,AT
-3278941176,3278941179,IT
-3278941180,3278941183,FR
-3278941184,3278941191,US
-3278941192,3278941195,BR
-3278941196,3278941215,US
-3278941216,3278941219,BR
-3278941220,3278941243,US
-3278941244,3278941247,CO
-3278941248,3278941255,US
-3278941256,3278941259,MX
-3278941260,3278941279,US
-3278941280,3278941283,BR
-3278941284,3278941287,AR
-3278941288,3278941303,US
-3278941304,3278941307,CO
-3278941308,3278941319,US
-3278941320,3278941323,CA
-3278941324,3278941331,US
-3278941332,3278941335,BR
-3278941336,3278941343,US
-3278941344,3278941347,AR
-3278941348,3278941371,US
-3278941372,3278941375,CA
-3278941376,3278941399,US
-3278941400,3278941403,VE
-3278941404,3278941407,BR
-3278941408,3278941419,US
-3278941420,3278941423,DE
-3278941424,3278941427,CL
-3278941428,3278941431,PE
-3278941432,3278941439,US
-3278941440,3278941443,AR
-3278941444,3278941455,US
-3278941456,3278941459,JM
-3278941460,3278941475,US
-3278941476,3278941479,BR
-3278941480,3278941491,US
-3278941492,3278941495,MX
-3278941496,3278941499,US
-3278941500,3278941503,CA
-3278941504,3278941587,US
-3278941588,3278941591,DE
-3278941592,3278941595,US
-3278941596,3278941599,PE
-3278941600,3278941615,US
-3278941616,3278941619,CA
-3278941620,3278941639,US
-3278941640,3278941643,BR
-3278941644,3278941651,US
-3278941652,3278941655,VE
-3278941656,3278941659,US
-3278941660,3278941663,BR
-3278941664,3278941667,CA
-3278941668,3278941671,US
-3278941672,3278941675,VE
-3278941676,3278941691,US
-3278941692,3278941695,MX
-3278941696,3278941735,US
-3278941736,3278941739,CA
-3278941740,3278941743,US
-3278941744,3278941747,CA
-3278941748,3278941819,US
-3278941820,3278941823,CL
-3278941824,3278941847,US
-3278941848,3278941855,AR
-3278941856,3278941891,US
-3278941892,3278941895,CA
-3278941896,3278941911,US
-3278941912,3278941915,MX
-3278941916,3278941943,US
-3278941944,3278941947,CO
-3278941948,3278941951,US
-3278941952,3278941955,GB
-3278941956,3278941959,FR
-3278941960,3278941963,DE
-3278941964,3278941971,GB
-3278941972,3278941979,DE
-3278941980,3278941987,ES
-3278941988,3278941995,FR
-3278941996,3278941999,ES
-3278942000,3278942003,DE
-3278942004,3278942011,IT
-3278942012,3278942015,DE
-3278942016,3278942019,FR
-3278942020,3278942023,DE
-3278942024,3278942027,FR
-3278942028,3278942031,CH
-3278942032,3278942035,GR
-3278942036,3278942039,CH
-3278942040,3278942043,ES
-3278942044,3278942047,FR
-3278942048,3278942051,DE
-3278942052,3278942055,CH
-3278942056,3278942059,ES
-3278942060,3278942063,DE
-3278942064,3278942071,ES
-3278942072,3278942075,FR
-3278942076,3278942079,DE
-3278942080,3278942083,ES
-3278942084,3278942087,BE
-3278942088,3278942091,ES
-3278942092,3278942095,BE
-3278942096,3278942099,PL
-3278942100,3278942103,GB
-3278942104,3278942107,CH
-3278942108,3278942111,DE
-3278942112,3278942115,FR
-3278942116,3278942119,DE
-3278942120,3278942123,GB
-3278942124,3278942127,AT
-3278942128,3278942131,DE
-3278942132,3278942135,GB
-3278942136,3278942139,UA
+3278940872,3278941251,DE
+3278941252,3278941255,US
+3278941256,3278941295,DE
+3278941296,3278941299,US
+3278941300,3278942139,DE
3278942140,3278942143,NL
-3278942144,3278942147,GB
-3278942148,3278942155,DE
-3278942156,3278942159,FR
-3278942160,3278942163,DE
-3278942164,3278942167,IT
-3278942168,3278942171,CH
-3278942172,3278942175,GB
-3278942176,3278942179,DE
-3278942180,3278942183,FR
-3278942184,3278942187,DK
-3278942188,3278942191,IT
-3278942192,3278942203,DE
-3278942204,3278942207,CH
-3278942208,3278942211,TW
-3278942212,3278942227,AU
-3278942228,3278942231,NZ
-3278942232,3278942243,AU
-3278942244,3278942247,NZ
-3278942248,3278942255,AU
+3278942144,3278942255,DE
3278942256,3278942259,NZ
-3278942260,3278942271,AU
-3278942272,3278942275,NZ
-3278942276,3278942291,AU
-3278942292,3278942295,NZ
-3278942296,3278942299,PG
-3278942300,3278942355,AU
-3278942356,3278942359,NZ
-3278942360,3278942383,AU
-3278942384,3278942387,NZ
-3278942388,3278942399,AU
-3278942400,3278942403,NZ
-3278942404,3278942435,AU
-3278942436,3278942439,DE
-3278942440,3278942443,AU
-3278942444,3278942447,NZ
-3278942448,3278942455,AU
-3278942456,3278942463,DE
-3278942464,3278942467,SG
-3278942468,3278942471,MY
-3278942472,3278942475,IN
-3278942476,3278942483,SG
-3278942484,3278942487,CN
-3278942488,3278942491,IN
-3278942492,3278942495,MY
-3278942496,3278942499,CN
-3278942500,3278942507,MY
-3278942508,3278942511,TH
-3278942512,3278942515,SG
-3278942516,3278942519,PH
-3278942520,3278942539,IN
-3278942540,3278942543,TW
-3278942544,3278942547,PK
-3278942548,3278942551,MY
-3278942552,3278942555,TW
-3278942556,3278942559,IN
-3278942560,3278942571,MY
-3278942572,3278942575,IN
-3278942576,3278942579,MY
-3278942580,3278942583,TW
-3278942584,3278942587,SG
-3278942588,3278942591,CN
-3278942592,3278942595,TW
-3278942596,3278942599,IN
-3278942600,3278942603,SG
-3278942604,3278942607,TW
-3278942608,3278942611,TH
-3278942612,3278942615,PH
-3278942616,3278942627,SG
-3278942628,3278942635,MY
-3278942636,3278942643,SG
-3278942644,3278942647,MY
-3278942648,3278942651,IN
-3278942652,3278942655,MY
-3278942656,3278942667,SG
-3278942668,3278942671,MY
-3278942672,3278942675,SG
-3278942676,3278942679,HK
-3278942680,3278942683,TW
-3278942684,3278942687,DE
-3278942688,3278942691,SG
-3278942692,3278942695,IN
+3278942260,3278942359,DE
+3278942360,3278942363,AU
+3278942364,3278942523,DE
+3278942524,3278942527,IN
+3278942528,3278942695,DE
3278942696,3278942699,SG
-3278942700,3278942703,TW
-3278942704,3278942707,MY
-3278942708,3278942719,SG
-3278942720,3278942721,DE
-3278942722,3278942722,GB
-3278942723,3278942724,DE
-3278942725,3278942725,GB
-3278942726,3278942726,IT
-3278942727,3278942727,DE
-3278942728,3278942728,CH
-3278942729,3278942730,BE
-3278942731,3278942731,DE
-3278942732,3278942732,ES
-3278942733,3278942733,LU
-3278942734,3278942734,GB
-3278942735,3278942735,DE
-3278942736,3278942736,IT
-3278942737,3278942737,GB
-3278942738,3278942739,DE
-3278942740,3278942740,NL
-3278942741,3278942741,GB
-3278942742,3278942742,DE
-3278942743,3278942743,ES
-3278942744,3278942748,DE
-3278942749,3278942749,GB
-3278942750,3278942750,IT
-3278942751,3278942751,FR
-3278942752,3278942753,CH
-3278942754,3278942754,DE
-3278942755,3278942755,GB
-3278942756,3278942756,DE
-3278942757,3278942757,GB
-3278942758,3278942759,IT
-3278942760,3278942761,DE
-3278942762,3278942762,GB
-3278942763,3278942763,NL
-3278942764,3278942764,FR
-3278942765,3278942765,CH
-3278942766,3278942766,PL
-3278942767,3278942767,FR
-3278942768,3278942768,NO
-3278942769,3278942769,GB
-3278942770,3278942771,DE
-3278942772,3278942772,BE
-3278942773,3278942773,DE
-3278942774,3278942774,CH
-3278942775,3278942775,FR
-3278942776,3278942776,DE
-3278942777,3278942778,GB
-3278942779,3278942779,SE
-3278942780,3278942781,DE
-3278942782,3278942782,ES
-3278942783,3278942784,DE
-3278942785,3278942785,GR
-3278942786,3278942786,SI
-3278942787,3278942787,IT
-3278942788,3278942789,DE
-3278942790,3278942790,ES
-3278942791,3278942791,IT
-3278942792,3278942792,US
-3278942793,3278942793,CH
-3278942794,3278942794,DE
-3278942795,3278942795,GB
-3278942796,3278942796,IT
-3278942797,3278942797,GB
-3278942798,3278942798,DE
-3278942799,3278942799,IT
-3278942800,3278942800,FR
-3278942801,3278942801,GB
-3278942802,3278942803,DE
-3278942804,3278942804,IT
-3278942805,3278942805,DE
-3278942806,3278942806,BE
-3278942807,3278942807,AT
-3278942808,3278942809,DE
-3278942810,3278942810,ES
-3278942811,3278942811,NL
-3278942812,3278942813,DE
-3278942814,3278942814,CH
-3278942815,3278942815,DE
-3278942816,3278942816,AT
-3278942817,3278942817,FR
-3278942818,3278942818,DK
-3278942819,3278942819,DE
-3278942820,3278942820,IT
-3278942821,3278942821,NL
-3278942822,3278942824,DE
-3278942825,3278942825,NL
-3278942826,3278942826,RU
-3278942827,3278942827,FR
-3278942828,3278942828,ES
-3278942829,3278942829,NL
-3278942830,3278942830,IT
-3278942831,3278942831,CH
-3278942832,3278942832,IT
-3278942833,3278942833,DE
-3278942834,3278942834,NL
-3278942835,3278942835,AT
-3278942836,3278942837,DE
-3278942838,3278942838,ES
-3278942839,3278942839,FR
-3278942840,3278942843,DE
-3278942844,3278942844,ES
-3278942845,3278942850,DE
-3278942851,3278942851,HU
-3278942852,3278942852,DE
-3278942853,3278942853,ES
-3278942854,3278942854,GB
-3278942855,3278942855,DE
-3278942856,3278942856,NO
-3278942857,3278942857,DE
-3278942858,3278942858,IT
-3278942859,3278942859,DE
-3278942860,3278942860,IT
-3278942861,3278942861,FR
-3278942862,3278942863,DE
-3278942864,3278942864,ES
-3278942865,3278942865,GB
-3278942866,3278942867,NL
-3278942868,3278942868,DE
-3278942869,3278942869,IT
-3278942870,3278942870,CH
-3278942871,3278942871,IS
-3278942872,3278942872,ES
-3278942873,3278942873,IT
-3278942874,3278942875,DE
-3278942876,3278942876,PL
-3278942877,3278942877,DE
-3278942878,3278942878,NL
-3278942879,3278942879,DK
-3278942880,3278942881,DE
-3278942882,3278942882,CH
-3278942883,3278942883,GB
-3278942884,3278942884,DE
-3278942885,3278942885,NL
-3278942886,3278942886,DE
-3278942887,3278942887,IT
-3278942888,3278942889,DE
-3278942890,3278942890,ES
-3278942891,3278942894,DE
-3278942895,3278942895,NL
-3278942896,3278942896,GB
-3278942897,3278942897,CH
-3278942898,3278942899,NL
-3278942900,3278942903,DE
-3278942904,3278942904,BE
-3278942905,3278942905,IE
-3278942906,3278942907,DE
-3278942908,3278942908,GB
-3278942909,3278942910,DE
-3278942911,3278942911,IT
-3278942912,3278942913,DE
-3278942914,3278942914,CH
-3278942915,3278942915,DE
-3278942916,3278942916,CH
-3278942917,3278942922,DE
-3278942923,3278942923,NL
-3278942924,3278942924,DE
-3278942925,3278942925,GB
-3278942926,3278942930,DE
-3278942931,3278942931,CH
-3278942932,3278942932,NL
-3278942933,3278942933,BE
-3278942934,3278942934,IT
-3278942935,3278942936,NL
-3278942937,3278942937,DE
-3278942938,3278942938,CH
-3278942939,3278942939,ES
-3278942940,3278942940,DE
-3278942941,3278942941,IT
-3278942942,3278942942,DE
-3278942943,3278942944,NL
-3278942945,3278942946,DE
-3278942947,3278942947,BE
-3278942948,3278942948,AT
-3278942949,3278942949,CH
-3278942950,3278942950,DE
-3278942951,3278942951,IT
-3278942952,3278942953,DE
-3278942954,3278942954,AT
-3278942955,3278942955,DE
-3278942956,3278942956,IT
-3278942957,3278942957,DE
-3278942958,3278942958,CH
-3278942959,3278942959,DE
-3278942960,3278942960,FR
-3278942961,3278942961,PT
-3278942962,3278942963,NL
-3278942964,3278942966,DE
-3278942967,3278942967,NO
-3278942968,3278942968,NL
-3278942969,3278942969,AT
-3278942970,3278942970,ES
-3278942971,3278942972,IT
-3278942973,3278942977,DE
-3278942978,3278942978,BE
-3278942979,3278942979,FR
-3278942980,3278942980,IT
-3278942981,3278942983,DE
-3278942984,3278942984,IT
-3278942985,3278942985,ES
-3278942986,3278942986,CH
-3278942987,3278942987,BE
-3278942988,3278942990,CH
-3278942991,3278942991,GB
-3278942992,3278942992,DE
-3278942993,3278942993,GB
-3278942994,3278942994,CH
-3278942995,3278942997,DE
-3278942998,3278942998,CH
-3278942999,3278942999,GB
-3278943000,3278943002,DE
-3278943003,3278943003,CH
-3278943004,3278943005,DE
-3278943006,3278943006,FR
-3278943007,3278943007,DE
-3278943008,3278943008,IT
-3278943009,3278943009,DE
-3278943010,3278943010,NL
-3278943011,3278943011,DE
-3278943012,3278943012,CZ
-3278943013,3278943013,IT
-3278943014,3278943014,DE
-3278943015,3278943016,ES
-3278943017,3278943017,FR
-3278943018,3278943018,CH
-3278943019,3278943019,DE
-3278943020,3278943020,CH
-3278943021,3278943021,BE
-3278943022,3278943022,ES
-3278943023,3278943023,BE
-3278943024,3278943024,FR
-3278943025,3278943025,DE
-3278943026,3278943026,DK
-3278943027,3278943027,DE
-3278943028,3278943029,GB
-3278943030,3278943030,ES
-3278943031,3278943031,NL
-3278943032,3278943032,FR
-3278943033,3278943033,IT
-3278943034,3278943034,DE
-3278943035,3278943035,ES
-3278943036,3278943036,DE
-3278943037,3278943037,FR
-3278943038,3278943038,DE
-3278943039,3278943039,CH
-3278943040,3278943040,IT
-3278943041,3278943041,DE
-3278943042,3278943042,BE
-3278943043,3278943043,SI
-3278943044,3278943044,FR
-3278943045,3278943048,DE
-3278943049,3278943049,GB
-3278943050,3278943050,IT
-3278943051,3278943052,DE
-3278943053,3278943053,IT
-3278943054,3278943056,DE
-3278943057,3278943057,CH
-3278943058,3278943058,FR
-3278943059,3278943059,CH
-3278943060,3278943065,DE
-3278943066,3278943066,GB
-3278943067,3278943069,DE
-3278943070,3278943070,PL
-3278943071,3278943072,DE
-3278943073,3278943073,AT
-3278943074,3278943074,ES
-3278943075,3278943076,FR
-3278943077,3278943077,DE
-3278943078,3278943079,CH
-3278943080,3278943080,BE
-3278943081,3278943081,FR
-3278943082,3278943082,CH
-3278943083,3278943084,DE
-3278943085,3278943085,NL
-3278943086,3278943087,DE
-3278943088,3278943088,NL
-3278943089,3278943090,DE
-3278943091,3278943091,IT
-3278943092,3278943092,ES
-3278943093,3278943096,DE
-3278943097,3278943097,BE
-3278943098,3278943098,DE
-3278943099,3278943099,AT
-3278943100,3278943100,SE
-3278943101,3278943101,AT
-3278943102,3278943102,ZA
-3278943103,3278943105,DE
-3278943106,3278943106,FR
-3278943107,3278943107,DE
-3278943108,3278943108,FR
-3278943109,3278943109,IT
-3278943110,3278943110,DK
-3278943111,3278943111,GB
-3278943112,3278943112,PT
-3278943113,3278943113,ES
-3278943114,3278943114,CH
-3278943115,3278943115,PT
-3278943116,3278943116,CH
-3278943117,3278943117,DE
-3278943118,3278943119,IT
-3278943120,3278943120,FR
-3278943121,3278943121,AT
-3278943122,3278943122,GB
-3278943123,3278943123,FR
-3278943124,3278943124,BE
-3278943125,3278943125,CH
-3278943126,3278943126,IT
-3278943127,3278943127,DE
-3278943128,3278943128,GB
-3278943129,3278943130,DE
-3278943131,3278943131,BE
-3278943132,3278943132,FR
-3278943133,3278943133,IT
-3278943134,3278943135,NL
-3278943136,3278943136,FR
-3278943137,3278943137,CH
-3278943138,3278943138,BE
-3278943139,3278943139,IT
-3278943140,3278943140,ES
-3278943141,3278943141,NL
-3278943142,3278943142,FR
-3278943143,3278943143,ES
-3278943144,3278943145,DE
-3278943146,3278943146,CH
-3278943147,3278943147,NL
-3278943148,3278943148,FR
-3278943149,3278943149,BE
-3278943150,3278943150,DE
-3278943151,3278943151,NL
-3278943152,3278943153,DE
-3278943154,3278943154,SE
-3278943155,3278943159,DE
-3278943160,3278943160,ES
-3278943161,3278943161,BE
-3278943162,3278943162,ES
-3278943163,3278943163,DE
-3278943164,3278943164,NL
-3278943165,3278943165,SE
-3278943166,3278943168,DE
-3278943169,3278943169,BE
-3278943170,3278943172,FR
-3278943173,3278943173,NL
-3278943174,3278943174,DE
-3278943175,3278943177,ES
-3278943178,3278943178,DE
-3278943179,3278943179,CH
-3278943180,3278943181,DE
-3278943182,3278943182,SE
-3278943183,3278943183,FR
-3278943184,3278943184,DE
-3278943185,3278943185,BE
-3278943186,3278943186,NL
-3278943187,3278943187,DE
-3278943188,3278943188,GB
-3278943189,3278943191,DE
-3278943192,3278943192,LU
-3278943193,3278943193,DE
-3278943194,3278943194,IT
-3278943195,3278943195,DE
-3278943196,3278943196,CH
-3278943197,3278943197,NL
-3278943198,3278943198,GR
-3278943199,3278943199,GB
-3278943200,3278943200,DE
-3278943201,3278943202,CH
-3278943203,3278943203,SE
-3278943204,3278943206,DE
-3278943207,3278943207,IT
-3278943208,3278943208,DE
-3278943209,3278943209,ES
-3278943210,3278943212,IT
-3278943213,3278943213,DE
-3278943214,3278943214,IT
-3278943215,3278943215,GB
-3278943216,3278943216,CH
-3278943217,3278943217,GB
-3278943218,3278943218,IT
-3278943219,3278943220,DE
-3278943221,3278943221,CH
-3278943222,3278943222,DE
-3278943223,3278943223,NL
-3278943224,3278943225,DE
-3278943226,3278943226,FR
-3278943227,3278943227,GB
-3278943228,3278943228,ES
-3278943229,3278943235,DE
-3278943236,3278943236,ES
-3278943237,3278943237,FR
-3278943238,3278943239,DE
-3278943240,3278943240,NL
-3278943241,3278943242,DE
-3278943243,3278943243,ES
-3278943244,3278943244,FR
-3278943245,3278943245,DE
-3278943246,3278943246,NL
-3278943247,3278943247,CH
-3278943248,3278943248,DE
-3278943249,3278943249,ES
-3278943250,3278943251,FR
-3278943252,3278943252,IT
-3278943253,3278943253,DE
-3278943254,3278943254,DK
-3278943255,3278943255,DE
-3278943256,3278943256,FR
-3278943257,3278943257,IT
-3278943258,3278943260,DE
-3278943261,3278943261,ES
-3278943262,3278943262,NL
-3278943263,3278943263,FR
-3278943264,3278943265,DE
-3278943266,3278943266,FR
-3278943267,3278943267,NL
-3278943268,3278943268,DE
-3278943269,3278943270,CH
-3278943271,3278943271,ES
-3278943272,3278943274,DE
-3278943275,3278943275,IT
-3278943276,3278943277,DE
-3278943278,3278943278,GB
-3278943279,3278943279,DE
-3278943280,3278943280,FR
-3278943281,3278943281,IT
-3278943282,3278943283,DE
-3278943284,3278943284,IT
-3278943285,3278943287,DE
-3278943288,3278943288,FR
-3278943289,3278943289,DE
-3278943290,3278943290,IT
-3278943291,3278943292,DE
-3278943293,3278943293,GB
-3278943294,3278943294,IT
-3278943295,3278943296,ES
-3278943297,3278943297,IT
-3278943298,3278943298,PT
-3278943299,3278943299,DK
-3278943300,3278943300,GB
-3278943301,3278943301,CH
-3278943302,3278943302,BE
-3278943303,3278943303,DK
-3278943304,3278943304,FR
-3278943305,3278943305,LU
-3278943306,3278943306,AT
-3278943307,3278943308,DE
-3278943309,3278943309,PT
-3278943310,3278943310,ES
+3278942700,3278943027,DE
+3278943028,3278943028,GB
+3278943029,3278943310,DE
3278943311,3278943311,BE
-3278943312,3278943314,DE
-3278943315,3278943316,FR
-3278943317,3278943318,DE
-3278943319,3278943319,NL
-3278943320,3278943320,BE
-3278943321,3278943321,DE
-3278943322,3278943322,NL
-3278943323,3278943323,FR
-3278943324,3278943324,GB
-3278943325,3278943326,DE
-3278943327,3278943328,IT
-3278943329,3278943329,DE
-3278943330,3278943330,ES
-3278943331,3278943331,PL
-3278943332,3278943333,DE
-3278943334,3278943334,FR
-3278943335,3278943335,AT
-3278943336,3278943337,IT
-3278943338,3278943338,DE
-3278943339,3278943339,PT
-3278943340,3278943340,ES
-3278943341,3278943341,CH
-3278943342,3278943343,DE
-3278943344,3278943344,GB
-3278943345,3278943345,DE
-3278943346,3278943346,FR
-3278943347,3278943347,DE
-3278943348,3278943349,GB
-3278943350,3278943351,DE
-3278943352,3278943352,NL
-3278943353,3278943353,DE
-3278943354,3278943355,ES
-3278943356,3278943356,FR
-3278943357,3278943357,ES
-3278943358,3278943358,FR
-3278943359,3278943359,ES
-3278943360,3278943360,CH
-3278943361,3278943361,DE
-3278943362,3278943362,IT
-3278943363,3278943363,DE
-3278943364,3278943364,IT
-3278943365,3278943366,DE
-3278943367,3278943367,FR
-3278943368,3278943369,DE
-3278943370,3278943370,FR
-3278943371,3278943371,DE
-3278943372,3278943372,CH
-3278943373,3278943374,GR
-3278943375,3278943375,ES
-3278943376,3278943376,NO
-3278943377,3278943377,IT
-3278943378,3278943378,DE
-3278943379,3278943379,CH
-3278943380,3278943380,ES
-3278943381,3278943381,GB
-3278943382,3278943382,ES
-3278943383,3278943383,PL
-3278943384,3278943384,IT
-3278943385,3278943385,DE
-3278943386,3278943387,FR
-3278943388,3278943388,ES
-3278943389,3278943389,BE
-3278943390,3278943390,ES
-3278943391,3278943391,DE
-3278943392,3278943392,PL
-3278943393,3278943393,CH
-3278943394,3278943394,FR
-3278943395,3278943395,IT
-3278943396,3278943396,NL
-3278943397,3278943399,DE
-3278943400,3278943400,FR
-3278943401,3278943401,DE
-3278943402,3278943402,FR
-3278943403,3278943403,GB
-3278943404,3278943404,DE
-3278943405,3278943405,GB
-3278943406,3278943406,AT
-3278943407,3278943407,DE
-3278943408,3278943408,FR
-3278943409,3278943409,IT
-3278943410,3278943410,NL
-3278943411,3278943411,ES
-3278943412,3278943412,GB
-3278943413,3278943413,NL
-3278943414,3278943414,ES
-3278943415,3278943415,UA
+3278943312,3278943415,DE
3278943416,3278943416,NL
-3278943417,3278943417,DE
-3278943418,3278943418,GB
-3278943419,3278943419,ES
-3278943420,3278943420,BE
-3278943421,3278943422,DE
-3278943423,3278943423,IT
-3278943424,3278943424,DE
-3278943425,3278943425,GB
-3278943426,3278943426,DE
-3278943427,3278943427,AT
-3278943428,3278943428,DE
-3278943429,3278943430,IT
-3278943431,3278943431,CH
-3278943432,3278943432,DE
-3278943433,3278943433,GB
-3278943434,3278943435,DE
-3278943436,3278943436,ES
-3278943437,3278943437,FR
-3278943438,3278943438,DE
-3278943439,3278943439,SE
-3278943440,3278943440,DK
-3278943441,3278943441,IT
-3278943442,3278943442,FR
-3278943443,3278943445,DE
-3278943446,3278943446,CH
-3278943447,3278943447,DE
-3278943448,3278943448,FR
-3278943449,3278943449,DE
-3278943450,3278943450,CH
-3278943451,3278943451,AT
-3278943452,3278943452,DE
-3278943453,3278943453,PT
-3278943454,3278943455,DE
-3278943456,3278943456,IT
-3278943457,3278943457,GB
-3278943458,3278943459,DE
-3278943460,3278943460,FR
-3278943461,3278943464,DE
-3278943465,3278943465,ES
-3278943466,3278943466,DE
-3278943467,3278943467,ES
-3278943468,3278943468,DE
-3278943469,3278943469,NL
-3278943470,3278943471,ES
-3278943472,3278943472,BE
-3278943473,3278943473,DE
-3278943474,3278943474,BE
-3278943475,3278943477,DE
-3278943478,3278943478,NL
-3278943479,3278943481,DE
-3278943482,3278943482,IT
-3278943483,3278943489,DE
-3278943490,3278943490,BE
-3278943491,3278943491,DE
-3278943492,3278943492,CH
-3278943493,3278943494,DE
-3278943495,3278943495,FR
-3278943496,3278943496,GB
-3278943497,3278943497,AT
-3278943498,3278943499,DE
-3278943500,3278943500,IT
-3278943501,3278943501,FR
-3278943502,3278943504,DE
-3278943505,3278943505,LI
-3278943506,3278943506,AT
-3278943507,3278943507,FR
-3278943508,3278943509,IT
-3278943510,3278943510,DE
-3278943511,3278943512,IT
-3278943513,3278943513,ES
-3278943514,3278943514,BE
-3278943515,3278943515,DE
-3278943516,3278943517,ES
-3278943518,3278943518,FR
-3278943519,3278943519,HU
-3278943520,3278943520,AT
-3278943521,3278943521,ES
-3278943522,3278943523,DE
-3278943524,3278943524,AT
-3278943525,3278943525,BE
-3278943526,3278943526,FR
-3278943527,3278943527,DE
-3278943528,3278943528,CH
-3278943529,3278943529,DE
-3278943530,3278943530,AT
-3278943531,3278943531,DE
-3278943532,3278943532,NL
-3278943533,3278943533,ES
-3278943534,3278943534,GB
-3278943535,3278943535,BR
-3278943536,3278943537,ES
-3278943538,3278943538,RE
-3278943539,3278943539,IT
-3278943540,3278943540,ES
-3278943541,3278943542,DE
-3278943543,3278943543,IT
-3278943544,3278943545,DE
-3278943546,3278943546,NL
-3278943547,3278943547,CH
-3278943548,3278943548,GB
-3278943549,3278943549,IL
-3278943550,3278943550,IT
-3278943551,3278943551,DE
-3278943552,3278943552,IT
-3278943553,3278943553,DE
-3278943554,3278943554,FR
-3278943555,3278943555,DE
-3278943556,3278943556,FR
-3278943557,3278943557,DE
-3278943558,3278943558,AT
-3278943559,3278943560,DE
-3278943561,3278943561,FR
-3278943562,3278943564,DE
-3278943565,3278943565,GB
-3278943566,3278943566,BE
-3278943567,3278943567,AE
-3278943568,3278943568,NL
-3278943569,3278943569,ES
-3278943570,3278943570,DE
-3278943571,3278943571,BE
-3278943572,3278943572,GB
-3278943573,3278943573,DE
-3278943574,3278943574,DK
-3278943575,3278943575,BE
-3278943576,3278943576,NL
-3278943577,3278943577,FR
-3278943578,3278943578,DE
-3278943579,3278943579,BE
-3278943580,3278943580,IT
-3278943581,3278943581,CH
-3278943582,3278943582,DE
-3278943583,3278943583,NL
-3278943584,3278943585,DE
-3278943586,3278943586,NL
-3278943587,3278943587,ES
-3278943588,3278943588,DE
-3278943589,3278943589,IT
-3278943590,3278943590,DE
-3278943591,3278943591,NL
-3278943592,3278943592,DE
-3278943593,3278943593,PL
-3278943594,3278943594,ES
-3278943595,3278943595,GB
-3278943596,3278943596,GR
-3278943597,3278943598,DE
-3278943599,3278943599,ES
-3278943600,3278943601,DE
-3278943602,3278943602,PL
-3278943603,3278943603,FR
-3278943604,3278943604,ES
-3278943605,3278943605,DE
-3278943606,3278943606,AT
-3278943607,3278943607,DE
-3278943608,3278943608,ES
-3278943609,3278943609,DE
-3278943610,3278943610,BE
-3278943611,3278943611,NL
-3278943612,3278943613,DE
-3278943614,3278943614,IT
-3278943615,3278943615,CH
-3278943616,3278943616,DE
-3278943617,3278943617,ES
-3278943618,3278943619,DE
-3278943620,3278943620,IT
-3278943621,3278943621,CH
-3278943622,3278943622,DE
-3278943623,3278943623,DK
-3278943624,3278943624,DE
-3278943625,3278943625,FR
-3278943626,3278943628,DE
-3278943629,3278943630,FR
-3278943631,3278943632,DE
-3278943633,3278943633,GB
-3278943634,3278943634,DE
-3278943635,3278943635,IT
-3278943636,3278943636,CH
-3278943637,3278943638,IT
-3278943639,3278943639,HU
-3278943640,3278943641,DE
-3278943642,3278943642,FR
-3278943643,3278943643,NL
-3278943644,3278943645,FR
-3278943646,3278943646,IT
-3278943647,3278943647,DE
-3278943648,3278943648,DK
-3278943649,3278943649,DE
-3278943650,3278943650,ES
-3278943651,3278943651,FR
-3278943652,3278943653,IT
-3278943654,3278943654,BE
-3278943655,3278943655,FR
-3278943656,3278943656,AT
-3278943657,3278943658,DE
-3278943659,3278943659,NL
-3278943660,3278943660,CY
-3278943661,3278943661,DE
-3278943662,3278943662,ES
-3278943663,3278943663,CH
-3278943664,3278943666,ES
+3278943417,3278943428,DE
+3278943429,3278943429,IT
+3278943430,3278943666,DE
3278943667,3278943667,IT
-3278943668,3278943669,DE
-3278943670,3278943670,IT
-3278943671,3278943672,DE
-3278943673,3278943673,ES
-3278943674,3278943676,DE
-3278943677,3278943677,IT
-3278943678,3278943678,BE
-3278943679,3278943679,FR
-3278943680,3278943680,GB
-3278943681,3278943681,CH
-3278943682,3278943682,DE
-3278943683,3278943683,PT
-3278943684,3278943684,AD
-3278943685,3278943686,DE
-3278943687,3278943687,CH
-3278943688,3278943689,IT
-3278943690,3278943690,ES
-3278943691,3278943692,DE
-3278943693,3278943693,PL
-3278943694,3278943694,GB
-3278943695,3278943695,DE
-3278943696,3278943696,GB
-3278943697,3278943697,DE
-3278943698,3278943698,IT
-3278943699,3278943699,FR
-3278943700,3278943700,CH
-3278943701,3278943701,AT
-3278943702,3278943702,FR
-3278943703,3278943703,PL
-3278943704,3278943705,DE
-3278943706,3278943706,ES
-3278943707,3278943707,CH
-3278943708,3278943710,DE
-3278943711,3278943711,IT
-3278943712,3278943713,DE
-3278943714,3278943714,ES
-3278943715,3278943715,DE
-3278943716,3278943716,ES
-3278943717,3278943719,DE
-3278943720,3278943720,CH
-3278943721,3278943726,DE
-3278943727,3278943727,PL
-3278943728,3278943729,DE
-3278943730,3278943730,FR
-3278943731,3278943731,DK
-3278943732,3278943733,CH
-3278943734,3278943734,DE
-3278943735,3278943735,AD
-3278943736,3278943736,DE
-3278943737,3278943737,ES
-3278943738,3278943740,DE
-3278943741,3278943741,PT
-3278943742,3278943742,IL
-3278943743,3278943745,DE
-3278943746,3278943746,CH
-3278943747,3278943747,DE
-3278943748,3278943749,ES
-3278943750,3278943751,DE
-3278943752,3278943752,GR
-3278943753,3278943753,DE
-3278943754,3278943754,FR
-3278943755,3278943755,SL
-3278943756,3278943756,DE
-3278943757,3278943757,FR
-3278943758,3278943758,DE
-3278943759,3278943759,NL
-3278943760,3278943761,DE
-3278943762,3278943762,CY
-3278943763,3278943763,DE
-3278943764,3278943764,FR
-3278943765,3278943765,CH
-3278943766,3278943766,BE
-3278943767,3278943767,ES
-3278943768,3278943768,DE
-3278943769,3278943769,CZ
-3278943770,3278943770,FR
-3278943771,3278943771,CH
-3278943772,3278943772,ES
-3278943773,3278943773,IT
-3278943774,3278943774,DE
-3278943775,3278943776,PT
-3278943777,3278943777,FR
-3278943778,3278943778,CH
-3278943779,3278943780,DE
-3278943781,3278943781,GB
-3278943782,3278943782,IT
-3278943783,3278943786,DE
-3278943787,3278943787,IT
-3278943788,3278943788,DE
-3278943789,3278943789,ES
-3278943790,3278943790,DE
-3278943791,3278943791,IT
-3278943792,3278943792,FR
-3278943793,3278943793,IT
-3278943794,3278943794,HU
-3278943795,3278943796,DE
-3278943797,3278943797,ES
-3278943798,3278943798,DE
-3278943799,3278943799,IE
-3278943800,3278943800,DE
-3278943801,3278943801,LU
-3278943802,3278943802,DE
-3278943803,3278943803,GB
-3278943804,3278943804,DE
-3278943805,3278943805,DK
-3278943806,3278943806,ES
-3278943807,3278943807,DE
-3278943808,3278943808,IT
-3278943809,3278943809,FR
-3278943810,3278943810,DE
-3278943811,3278943811,GR
-3278943812,3278943812,IT
-3278943813,3278943813,IN
-3278943814,3278943814,ES
-3278943815,3278943815,MA
-3278943816,3278943816,GB
-3278943817,3278943817,FR
-3278943818,3278943818,DE
-3278943819,3278943819,AT
-3278943820,3278943820,DE
-3278943821,3278943821,SM
-3278943822,3278943822,PL
-3278943823,3278943823,DE
-3278943824,3278943824,CH
-3278943825,3278943826,DE
-3278943827,3278943827,AT
-3278943828,3278943828,ES
-3278943829,3278943829,CH
-3278943830,3278943830,ES
-3278943831,3278943831,US
-3278943832,3278943832,BE
-3278943833,3278943833,IT
-3278943834,3278943835,GB
-3278943836,3278943836,DE
-3278943837,3278943837,ES
-3278943838,3278943838,DE
-3278943839,3278943839,IT
-3278943840,3278943845,DE
-3278943846,3278943846,GB
-3278943847,3278943847,FR
-3278943848,3278943848,IT
-3278943849,3278943849,DE
-3278943850,3278943851,FR
-3278943852,3278943852,BE
-3278943853,3278943853,GB
-3278943854,3278943854,ES
-3278943855,3278943855,BE
-3278943856,3278943856,DE
-3278943857,3278943857,PL
-3278943858,3278943858,NL
-3278943859,3278943859,DE
-3278943860,3278943860,FR
-3278943861,3278943862,DE
-3278943863,3278943863,IT
-3278943864,3278943864,DK
-3278943865,3278943865,GB
-3278943866,3278943866,IT
-3278943867,3278943867,ES
-3278943868,3278943868,IT
-3278943869,3278943869,IE
-3278943870,3278943870,NL
-3278943871,3278943871,FR
-3278943872,3278943872,DE
-3278943873,3278943873,IT
-3278943874,3278943874,CH
-3278943875,3278943875,IL
-3278943876,3278943881,DE
-3278943882,3278943882,PL
-3278943883,3278943883,CH
-3278943884,3278943884,DE
-3278943885,3278943885,IT
-3278943886,3278943888,DE
-3278943889,3278943889,BE
-3278943890,3278943890,NL
-3278943891,3278943891,ES
-3278943892,3278943893,DE
-3278943894,3278943894,IT
-3278943895,3278943895,DE
-3278943896,3278943896,PL
-3278943897,3278943897,ES
-3278943898,3278943898,IT
-3278943899,3278943899,GB
-3278943900,3278943900,ES
-3278943901,3278943901,DE
-3278943902,3278943902,GB
-3278943903,3278943903,IT
-3278943904,3278943904,DE
-3278943905,3278943905,FR
-3278943906,3278943907,IT
-3278943908,3278943908,GB
-3278943909,3278943909,HU
-3278943910,3278943910,FR
-3278943911,3278943911,DE
-3278943912,3278943913,IT
-3278943914,3278943914,DE
-3278943915,3278943915,PL
-3278943916,3278943916,DE
-3278943917,3278943917,FR
-3278943918,3278943918,ES
-3278943919,3278943920,FR
-3278943921,3278943921,DE
-3278943922,3278943922,ES
-3278943923,3278943923,DE
-3278943924,3278943924,IT
-3278943925,3278943926,ES
-3278943927,3278943927,GB
-3278943928,3278943928,DE
-3278943929,3278943929,PT
-3278943930,3278943930,IT
-3278943931,3278943932,DE
-3278943933,3278943933,ES
-3278943934,3278943934,DE
-3278943935,3278943935,GR
-3278943936,3278943939,DE
-3278943940,3278943940,DK
+3278943668,3278943940,DE
3278943941,3278943941,GB
-3278943942,3278943942,NL
-3278943943,3278943943,AT
-3278943944,3278943944,IT
-3278943945,3278943945,NL
-3278943946,3278943946,LU
-3278943947,3278943947,DE
-3278943948,3278943948,ES
-3278943949,3278943949,DE
+3278943942,3278943949,DE
3278943950,3278943950,BE
-3278943951,3278943951,LU
-3278943952,3278943953,DE
-3278943954,3278943954,FR
-3278943955,3278943956,DE
-3278943957,3278943957,GB
-3278943958,3278943958,DK
-3278943959,3278943959,DE
-3278943960,3278943960,FR
-3278943961,3278943964,DE
-3278943965,3278943965,CH
-3278943966,3278943967,DE
-3278943968,3278943968,ES
-3278943969,3278943969,PL
-3278943970,3278943970,ES
-3278943971,3278943971,BE
-3278943972,3278943972,IT
-3278943973,3278943973,DE
-3278943974,3278943974,GR
-3278943975,3278943975,CH
-3278943976,3278943976,DE
-3278943977,3278943977,DK
-3278943978,3278943978,DE
-3278943979,3278943979,ES
-3278943980,3278943980,GB
-3278943981,3278943981,DE
-3278943982,3278943982,ES
-3278943983,3278943983,DE
-3278943984,3278943984,AT
-3278943985,3278943985,NL
-3278943986,3278943987,IT
-3278943988,3278943988,ES
-3278943989,3278943990,DE
-3278943991,3278943991,NL
-3278943992,3278943992,IT
-3278943993,3278943993,AT
-3278943994,3278943995,DE
-3278943996,3278943997,CH
-3278943998,3278943998,FR
-3278943999,3278944001,DE
-3278944002,3278944002,GB
-3278944003,3278944003,LU
-3278944004,3278944006,DE
-3278944007,3278944007,NL
-3278944008,3278944008,IT
-3278944009,3278944009,CH
-3278944010,3278944010,NL
-3278944011,3278944012,DE
-3278944013,3278944013,DK
-3278944014,3278944014,IT
-3278944015,3278944015,IS
-3278944016,3278944016,PL
-3278944017,3278944017,DE
-3278944018,3278944018,BE
-3278944019,3278944020,DE
-3278944021,3278944021,IT
-3278944022,3278944022,FR
+3278943951,3278944022,DE
3278944023,3278944023,AT
-3278944024,3278944025,CH
-3278944026,3278944027,FR
-3278944028,3278944028,DE
-3278944029,3278944029,IT
-3278944030,3278944030,DE
-3278944031,3278944031,FR
-3278944032,3278944033,DE
-3278944034,3278944034,GR
-3278944035,3278944035,FR
-3278944036,3278944036,US
-3278944037,3278944037,FR
-3278944038,3278944038,GB
-3278944039,3278944039,DE
-3278944040,3278944040,FR
-3278944041,3278944041,DE
-3278944042,3278944042,FR
-3278944043,3278944043,DE
-3278944044,3278944045,FR
-3278944046,3278944046,NL
-3278944047,3278944047,GB
-3278944048,3278944048,BE
-3278944049,3278944049,IT
-3278944050,3278944050,DE
-3278944051,3278944051,BE
-3278944052,3278944052,AT
-3278944053,3278944053,IT
-3278944054,3278944054,DE
-3278944055,3278944055,IT
-3278944056,3278944058,DE
-3278944059,3278944059,ES
-3278944060,3278944060,BE
-3278944061,3278944061,FR
-3278944062,3278944063,DE
-3278944064,3278944064,FR
-3278944065,3278944065,IT
-3278944066,3278944066,GB
-3278944067,3278944067,DE
-3278944068,3278944068,ES
-3278944069,3278944069,PL
-3278944070,3278944070,DE
-3278944071,3278944071,DK
-3278944072,3278944072,AT
-3278944073,3278944073,FR
-3278944074,3278944075,ES
-3278944076,3278944076,DE
-3278944077,3278944077,GB
-3278944078,3278944078,DE
-3278944079,3278944079,GB
-3278944080,3278944080,DE
+3278944024,3278944080,DE
3278944081,3278944081,GB
-3278944082,3278944082,IT
-3278944083,3278944084,ES
-3278944085,3278944085,PT
-3278944086,3278944086,NL
-3278944087,3278944087,CH
-3278944088,3278944088,IT
-3278944089,3278944089,DE
-3278944090,3278944090,IT
-3278944091,3278944091,MA
-3278944092,3278944092,GR
-3278944093,3278944094,DE
-3278944095,3278944095,AT
-3278944096,3278944096,GB
-3278944097,3278944097,DE
-3278944098,3278944098,SE
+3278944082,3278944098,DE
3278944099,3278944099,GB
-3278944100,3278944102,DE
-3278944103,3278944104,IT
-3278944105,3278944105,FR
-3278944106,3278944106,AT
-3278944107,3278944108,DE
-3278944109,3278944109,ES
-3278944110,3278944111,DE
-3278944112,3278944112,NL
-3278944113,3278944113,DE
-3278944114,3278944114,IT
-3278944115,3278944116,ES
-3278944117,3278944118,IT
-3278944119,3278944119,ES
-3278944120,3278944121,DE
-3278944122,3278944122,FR
-3278944123,3278944123,IT
-3278944124,3278944124,DE
-3278944125,3278944125,SE
-3278944126,3278944126,ES
-3278944127,3278944127,IT
-3278944128,3278944128,PT
-3278944129,3278944129,BE
-3278944130,3278944130,DE
-3278944131,3278944131,FR
-3278944132,3278944132,IE
-3278944133,3278944133,IT
-3278944134,3278944134,ES
-3278944135,3278944135,NL
-3278944136,3278944137,DE
+3278944100,3278944137,DE
3278944138,3278944138,GB
-3278944139,3278944139,FR
-3278944140,3278944140,PT
-3278944141,3278944141,FR
-3278944142,3278944142,GB
-3278944143,3278944143,AT
-3278944144,3278944144,DE
-3278944145,3278944145,SE
-3278944146,3278944147,DE
-3278944148,3278944148,ES
-3278944149,3278944149,DE
-3278944150,3278944150,IE
-3278944151,3278944151,IT
-3278944152,3278944152,IS
-3278944153,3278944158,DE
-3278944159,3278944159,CH
-3278944160,3278944160,FR
-3278944161,3278944161,DE
+3278944139,3278944161,DE
3278944162,3278944162,GB
-3278944163,3278944163,HU
-3278944164,3278944164,IT
-3278944165,3278944166,DE
-3278944167,3278944167,IT
-3278944168,3278944168,CH
-3278944169,3278944169,DE
-3278944170,3278944171,CH
-3278944172,3278944172,DE
-3278944173,3278944173,FR
-3278944174,3278944174,GB
-3278944175,3278944175,DE
-3278944176,3278944176,ES
-3278944177,3278944177,LU
-3278944178,3278944179,DE
-3278944180,3278944180,GB
-3278944181,3278944181,IT
-3278944182,3278944182,FR
-3278944183,3278944184,ES
-3278944185,3278944185,NL
-3278944186,3278944192,DE
-3278944193,3278944193,FR
-3278944194,3278944194,GB
-3278944195,3278944195,IT
-3278944196,3278944197,DE
-3278944198,3278944198,IT
-3278944199,3278944199,AT
-3278944200,3278944200,DE
-3278944201,3278944201,SE
-3278944202,3278944202,NO
+3278944163,3278944202,DE
3278944203,3278944203,NL
-3278944204,3278944207,DE
-3278944208,3278944208,NL
-3278944209,3278944209,PL
-3278944210,3278944210,AT
-3278944211,3278944211,DE
-3278944212,3278944212,FR
-3278944213,3278944213,DK
-3278944214,3278944214,GB
-3278944215,3278944215,IT
-3278944216,3278944216,DE
-3278944217,3278944217,IT
-3278944218,3278944219,DE
-3278944220,3278944220,GB
-3278944221,3278944221,GR
-3278944222,3278944222,IT
-3278944223,3278944224,DE
-3278944225,3278944225,NL
-3278944226,3278944226,RU
-3278944227,3278944227,IT
-3278944228,3278944230,DE
-3278944231,3278944231,CH
-3278944232,3278944232,NL
-3278944233,3278944233,GB
-3278944234,3278944234,AT
-3278944235,3278944235,DE
-3278944236,3278944236,IT
-3278944237,3278944238,DE
-3278944239,3278944239,SE
-3278944240,3278944240,FR
-3278944241,3278944241,IT
-3278944242,3278944242,ES
-3278944243,3278944243,DE
-3278944244,3278944244,ES
-3278944245,3278944245,BE
-3278944246,3278944246,NL
-3278944247,3278944247,ES
-3278944248,3278944248,NL
-3278944249,3278944249,ES
-3278944250,3278944250,IT
-3278944251,3278944251,AT
-3278944252,3278944252,IT
-3278944253,3278944254,GB
-3278944255,3278944256,DE
-3278944257,3278944272,US
-3278944273,3278944273,CA
-3278944274,3278944274,US
-3278944275,3278944275,CA
-3278944276,3278944277,US
-3278944278,3278944278,VE
-3278944279,3278944279,DE
-3278944280,3278944284,US
-3278944285,3278944285,DE
-3278944286,3278944286,US
-3278944287,3278944288,CA
-3278944289,3278944293,US
-3278944294,3278944294,CA
-3278944295,3278944346,US
-3278944347,3278944347,AR
-3278944348,3278944360,US
-3278944361,3278944361,AR
-3278944362,3278944365,US
-3278944366,3278944366,MX
-3278944367,3278944367,US
-3278944368,3278944368,CA
-3278944369,3278944379,US
-3278944380,3278944380,DE
-3278944381,3278944385,US
-3278944386,3278944386,DE
-3278944387,3278944388,US
-3278944389,3278944389,CA
-3278944390,3278944390,AR
-3278944391,3278944391,CA
-3278944392,3278944395,US
-3278944396,3278944396,CA
-3278944397,3278944399,US
-3278944400,3278944400,BR
-3278944401,3278944401,US
-3278944402,3278944402,CA
-3278944403,3278944412,US
-3278944413,3278944413,CA
-3278944414,3278944418,US
-3278944419,3278944419,DE
-3278944420,3278944420,CA
-3278944421,3278944421,DE
-3278944422,3278944432,US
-3278944433,3278944433,DE
-3278944434,3278944444,US
-3278944445,3278944449,DE
-3278944450,3278944451,CA
-3278944452,3278944460,DE
-3278944461,3278944461,US
-3278944462,3278944470,DE
-3278944471,3278944471,US
-3278944472,3278944513,DE
-3278944514,3278944517,US
-3278944518,3278944518,DE
-3278944519,3278944520,US
-3278944521,3278944521,CA
-3278944522,3278944522,US
-3278944523,3278944523,CA
-3278944524,3278944524,US
-3278944525,3278944525,CL
-3278944526,3278944526,US
-3278944527,3278944527,CA
-3278944528,3278944528,US
-3278944529,3278944529,CA
-3278944530,3278944537,US
-3278944538,3278944538,AR
-3278944539,3278944544,US
-3278944545,3278944545,CA
-3278944546,3278944555,US
-3278944556,3278944556,CL
-3278944557,3278944559,US
-3278944560,3278944560,AR
-3278944561,3278944561,US
-3278944562,3278944562,CA
-3278944563,3278944563,US
-3278944564,3278944564,CA
-3278944565,3278944569,US
-3278944570,3278944570,DE
-3278944571,3278944572,US
-3278944573,3278944573,DE
-3278944574,3278944574,US
-3278944575,3278944575,DE
-3278944576,3278944578,US
-3278944579,3278944579,DE
-3278944580,3278944580,AR
-3278944581,3278944581,US
-3278944582,3278944583,DE
-3278944584,3278944588,US
-3278944589,3278944589,DE
-3278944590,3278944599,US
-3278944600,3278944600,SA
-3278944601,3278944606,US
-3278944607,3278944608,DE
-3278944609,3278944611,US
-3278944612,3278944612,DE
-3278944613,3278944626,US
-3278944627,3278944627,DE
-3278944628,3278944633,US
-3278944634,3278944634,DE
-3278944635,3278944638,US
-3278944639,3278944640,DE
-3278944641,3278944642,US
-3278944643,3278944643,CL
-3278944644,3278944650,US
-3278944651,3278944651,DE
-3278944652,3278944654,US
-3278944655,3278944657,AR
-3278944658,3278944659,US
-3278944660,3278944660,AR
+3278944204,3278944286,DE
+3278944287,3278944287,CA
+3278944288,3278944294,DE
+3278944295,3278944295,US
+3278944296,3278944305,DE
+3278944306,3278944306,US
+3278944307,3278944375,DE
+3278944376,3278944376,US
+3278944377,3278944417,DE
+3278944418,3278944418,US
+3278944419,3278944612,DE
+3278944613,3278944613,US
+3278944614,3278944616,DE
+3278944617,3278944617,US
+3278944618,3278944628,DE
+3278944629,3278944629,US
+3278944630,3278944643,DE
+3278944644,3278944644,US
+3278944645,3278944660,DE
3278944661,3278944661,US
-3278944662,3278944663,DE
-3278944664,3278944665,AR
-3278944666,3278944667,US
-3278944668,3278944668,AR
-3278944669,3278944670,US
-3278944671,3278944671,CL
-3278944672,3278944672,DE
-3278944673,3278944673,PE
-3278944674,3278944674,DE
-3278944675,3278944677,US
+3278944662,3278944666,DE
+3278944667,3278944667,US
+3278944668,3278944677,DE
3278944678,3278944678,CA
-3278944679,3278944679,US
-3278944680,3278944680,CA
-3278944681,3278944683,US
-3278944684,3278944686,DE
-3278944687,3278944687,US
-3278944688,3278944688,AR
-3278944689,3278944693,US
-3278944694,3278944695,DE
-3278944696,3278944696,US
+3278944679,3278944680,DE
+3278944681,3278944681,US
+3278944682,3278944696,DE
3278944697,3278944697,CA
-3278944698,3278944706,US
-3278944707,3278944707,DE
-3278944708,3278944708,PE
+3278944698,3278944708,DE
3278944709,3278944709,US
-3278944710,3278944710,DE
-3278944711,3278944712,CL
-3278944713,3278944713,DE
-3278944714,3278944714,JM
+3278944710,3278944714,DE
3278944715,3278944715,CA
-3278944716,3278944716,DE
-3278944717,3278944718,US
-3278944719,3278944719,CA
-3278944720,3278944720,US
-3278944721,3278944721,CA
-3278944722,3278944727,US
-3278944728,3278944728,DE
-3278944729,3278944730,US
-3278944731,3278944731,DE
-3278944732,3278944734,US
-3278944735,3278944735,DE
-3278944736,3278944736,AR
-3278944737,3278944739,US
-3278944740,3278944740,CA
-3278944741,3278944741,DE
-3278944742,3278944743,US
-3278944744,3278944745,DE
-3278944746,3278944749,US
-3278944750,3278944750,DE
-3278944751,3278944751,US
-3278944752,3278944752,DE
-3278944753,3278944753,US
-3278944754,3278944754,BR
-3278944755,3278944755,AR
-3278944756,3278944758,US
-3278944759,3278944760,DE
-3278944761,3278944761,UY
-3278944762,3278944763,DE
-3278944764,3278944764,AR
-3278944765,3278944765,US
-3278944766,3278944767,DE
-3278944768,3278944771,DO
-3278944772,3278944819,US
-3278944820,3278944823,AR
-3278944824,3278944827,BR
-3278944828,3278944851,US
-3278944852,3278944855,CA
-3278944856,3278944863,US
-3278944864,3278944867,MX
-3278944868,3278944871,US
-3278944872,3278944875,DE
-3278944876,3278944887,US
-3278944888,3278944891,CO
-3278944892,3278944903,US
-3278944904,3278944907,BR
-3278944908,3278944919,US
-3278944920,3278944923,CO
-3278944924,3278944935,US
-3278944936,3278944939,BR
-3278944940,3278944947,US
-3278944948,3278944951,CO
-3278944952,3278944963,US
-3278944964,3278944971,CA
-3278944972,3278944975,US
-3278944976,3278944995,CA
-3278944996,3278944999,CO
-3278945000,3278945007,US
-3278945008,3278945011,CO
-3278945012,3278945015,PE
-3278945016,3278945023,US
-3278945024,3278945027,BR
-3278945028,3278945031,CW
-3278945032,3278945087,US
-3278945088,3278945091,BR
-3278945092,3278945099,US
-3278945100,3278945107,BR
-3278945108,3278945111,DO
-3278945112,3278945127,US
-3278945128,3278945131,AR
-3278945132,3278945135,BR
-3278945136,3278945151,US
-3278945152,3278945155,CA
-3278945156,3278945159,BR
-3278945160,3278945171,US
-3278945172,3278945175,AR
-3278945176,3278945191,US
-3278945192,3278945199,CA
-3278945200,3278945203,US
-3278945204,3278945207,AR
-3278945208,3278945227,US
-3278945228,3278945235,CA
-3278945236,3278945247,US
-3278945248,3278945255,CA
-3278945256,3278945267,US
-3278945268,3278945271,AR
-3278945272,3278945275,US
-3278945276,3278945279,CL
-3278945280,3278945283,CA
-3278945284,3278945299,US
-3278945300,3278945303,DE
-3278945304,3278945307,CO
-3278945308,3278945311,CA
-3278945312,3278945319,US
-3278945320,3278945323,MX
-3278945324,3278945327,AR
-3278945328,3278945331,CA
-3278945332,3278945335,US
-3278945336,3278945339,CA
-3278945340,3278945343,US
-3278945344,3278945347,BR
-3278945348,3278945363,US
-3278945364,3278945367,PR
-3278945368,3278945395,US
-3278945396,3278945399,AR
-3278945400,3278945403,MX
-3278945404,3278945427,US
-3278945428,3278945431,CA
-3278945432,3278945435,AR
-3278945436,3278945439,MX
-3278945440,3278945451,US
-3278945452,3278945455,BR
-3278945456,3278945459,US
-3278945460,3278945463,MX
-3278945464,3278945479,US
-3278945480,3278945483,CL
-3278945484,3278945491,BR
-3278945492,3278945503,US
-3278945504,3278945507,MX
-3278945508,3278945515,AR
-3278945516,3278945519,BR
-3278945520,3278945523,US
-3278945524,3278945527,CA
+3278944716,3278944726,DE
+3278944727,3278944727,US
+3278944728,3278944732,DE
+3278944733,3278944733,US
+3278944734,3278944747,DE
+3278944748,3278944748,US
+3278944749,3278944755,DE
+3278944756,3278944756,US
+3278944757,3278944983,DE
+3278944984,3278944987,CA
+3278944988,3278945063,DE
+3278945064,3278945067,US
+3278945068,3278945287,DE
+3278945288,3278945291,US
+3278945292,3278945315,DE
+3278945316,3278945319,US
+3278945320,3278945407,DE
+3278945408,3278945411,US
+3278945412,3278945527,DE
3278945528,3278945531,US
-3278945532,3278945535,CW
-3278945536,3278945539,AR
-3278945540,3278945579,US
-3278945580,3278945583,AR
-3278945584,3278945587,US
-3278945588,3278945591,DO
-3278945592,3278945659,US
-3278945660,3278945663,AR
-3278945664,3278945667,US
-3278945668,3278945671,UY
-3278945672,3278945675,DE
-3278945676,3278945687,US
-3278945688,3278945691,BR
-3278945692,3278945699,US
-3278945700,3278945703,AR
-3278945704,3278945715,US
-3278945716,3278945719,CO
-3278945720,3278945723,US
-3278945724,3278945727,AR
-3278945728,3278945743,US
-3278945744,3278945747,MX
-3278945748,3278945763,US
-3278945764,3278945767,MX
-3278945768,3278945771,CO
-3278945772,3278945779,US
-3278945780,3278945783,PE
-3278945784,3278945791,US
-3278945792,3278945794,DE
-3278945795,3278945795,CH
-3278945796,3278945796,DE
-3278945797,3278945797,BE
-3278945798,3278945798,NL
-3278945799,3278945799,LU
-3278945800,3278945800,DE
-3278945801,3278945801,NL
-3278945802,3278945802,PT
-3278945803,3278945803,GB
-3278945804,3278945804,DE
-3278945805,3278945805,DK
+3278945532,3278945571,DE
+3278945572,3278945575,US
+3278945576,3278945775,DE
+3278945776,3278945779,US
+3278945780,3278945805,DE
3278945806,3278945806,FR
-3278945807,3278945807,DE
-3278945808,3278945808,RU
-3278945809,3278945809,DE
-3278945810,3278945810,CH
-3278945811,3278945815,DE
-3278945816,3278945816,GB
-3278945817,3278945821,DE
-3278945822,3278945822,GR
-3278945823,3278945823,CH
-3278945824,3278945826,DE
-3278945827,3278945827,DK
-3278945828,3278945828,FR
-3278945829,3278945829,DE
-3278945830,3278945831,NL
-3278945832,3278945832,DE
-3278945833,3278945833,GB
+3278945807,3278945833,DE
3278945834,3278945834,NL
-3278945835,3278945835,CH
-3278945836,3278945840,DE
-3278945841,3278945841,CH
-3278945842,3278945844,DE
-3278945845,3278945845,ES
-3278945846,3278945846,CH
-3278945847,3278945847,DE
-3278945848,3278945848,GB
-3278945849,3278945849,DE
-3278945850,3278945850,NL
-3278945851,3278945852,DE
-3278945853,3278945853,CH
-3278945854,3278945854,FR
-3278945855,3278945855,DE
-3278945856,3278945856,DK
-3278945857,3278945858,DE
-3278945859,3278945859,GB
-3278945860,3278945860,FR
-3278945861,3278945861,IT
-3278945862,3278945862,BE
-3278945863,3278945863,ES
-3278945864,3278945864,IE
-3278945865,3278945866,DE
-3278945867,3278945867,FR
-3278945868,3278945868,NO
-3278945869,3278945870,DE
-3278945871,3278945871,IT
-3278945872,3278945872,FR
-3278945873,3278945873,DE
-3278945874,3278945874,IT
-3278945875,3278945875,ES
-3278945876,3278945876,NL
-3278945877,3278945877,SE
-3278945878,3278945878,FR
-3278945879,3278945880,DE
-3278945881,3278945881,BE
-3278945882,3278945886,DE
-3278945887,3278945888,IT
-3278945889,3278945890,DE
-3278945891,3278945891,CH
-3278945892,3278945892,BE
-3278945893,3278945893,DE
-3278945894,3278945894,AT
-3278945895,3278945895,ES
-3278945896,3278945896,GB
-3278945897,3278945897,IT
-3278945898,3278945898,ES
-3278945899,3278945899,DE
-3278945900,3278945900,FR
-3278945901,3278945904,DE
-3278945905,3278945905,PT
-3278945906,3278945906,FR
-3278945907,3278945907,GB
-3278945908,3278945908,DE
-3278945909,3278945909,FR
-3278945910,3278945910,DE
-3278945911,3278945911,NL
-3278945912,3278945917,DE
-3278945918,3278945918,IT
-3278945919,3278946049,DE
-3278946050,3278946054,US
-3278946055,3278946055,CA
-3278946056,3278946059,US
-3278946060,3278946060,CN
-3278946061,3278946061,US
-3278946062,3278946062,DE
-3278946063,3278946067,US
-3278946068,3278946068,DE
-3278946069,3278946084,US
-3278946085,3278946085,DE
-3278946086,3278946091,US
-3278946092,3278946092,DE
-3278946093,3278946108,US
-3278946109,3278946109,GB
-3278946110,3278946142,US
-3278946143,3278946143,DE
-3278946144,3278946166,US
-3278946167,3278946167,DE
-3278946168,3278946208,US
-3278946209,3278946213,DE
-3278946214,3278946214,US
-3278946215,3278946221,DE
-3278946222,3278946222,US
-3278946223,3278946224,DE
-3278946225,3278946225,US
-3278946226,3278946229,DE
-3278946230,3278946231,US
-3278946232,3278946239,DE
-3278946240,3278946263,US
-3278946264,3278946267,DE
-3278946268,3278946271,US
-3278946272,3278946275,SV
-3278946276,3278946279,DO
-3278946280,3278946283,DE
-3278946284,3278946287,US
-3278946288,3278946291,DE
-3278946292,3278946299,US
-3278946300,3278946303,DE
+3278945835,3278946074,DE
+3278946075,3278946075,US
+3278946076,3278946081,DE
+3278946082,3278946082,US
+3278946083,3278946093,DE
+3278946094,3278946094,US
+3278946095,3278946147,DE
+3278946148,3278946148,US
+3278946149,3278946158,DE
+3278946159,3278946159,US
+3278946160,3278946167,DE
+3278946168,3278946168,US
+3278946169,3278946303,DE
3278946304,3278954495,LB
3278954496,3278962687,RU
3278962688,3279028223,CZ
3279028224,3279028735,PL
3279028736,3279029247,RU
-3279029248,3279030271,UA
+3279029760,3279030271,UA
3279030272,3279030783,RU
3279030784,3279031295,DE
3279031296,3279031807,NL
-3279031808,3279032319,RO
3279032320,3279032831,HU
3279032832,3279033343,FR
3279033344,3279033855,RU
@@ -132127,284 +67786,74 @@
3279035392,3279035903,PS
3279035904,3279036415,UA
3279036416,3279044607,LV
-3279044608,3279050455,FR
-3279050456,3279050463,A2
-3279050464,3279052799,FR
+3279044608,3279052799,FR
3279052800,3279053311,UA
3279053312,3279053823,DE
3279053824,3279054335,NL
3279054336,3279054847,GB
3279054848,3279055359,RU
3279055360,3279055871,SA
-3279055872,3279056383,TR
-3279056384,3279056895,GB
3279056896,3279057151,RU
3279057152,3279057407,GB
3279057408,3279057919,FR
-3279057920,3279058431,RO
-3279058432,3279058943,RU
3279058944,3279059455,UA
3279059456,3279060479,RU
3279060480,3279060991,PL
3279060992,3279069183,UA
3279069184,3279077375,PL
-3279077376,3279078399,ES
-3279078400,3279078655,IT
-3279078656,3279078911,FR
-3279078912,3279084543,ES
-3279084544,3279085567,IT
+3279077376,3279085567,ES
3279085568,3279089663,NL
3279089664,3279093759,KG
-3279093760,3279103103,FR
-3279103104,3279103135,GB
-3279103136,3279123455,FR
-3279123456,3279123711,RE
-3279123712,3279159295,FR
+3279093760,3279123455,FR
+3279123456,3279123967,RE
+3279123968,3279159295,FR
3279159296,3279290367,PL
-3279290368,3279291391,NL
-3279291392,3279291647,GB
-3279291648,3279294463,NL
-3279294464,3279294719,EU
-3279294720,3279294975,IE
-3279294976,3279295231,SE
-3279295232,3279295487,ES
-3279295488,3279295743,PT
-3279295744,3279295999,IL
+3279292416,3279294463,NL
3279296000,3279296511,ZA
-3279296512,3279297279,ES
-3279297280,3279297535,ZA
-3279297536,3279298047,SE
3279298048,3279298559,ZA
-3279298560,3279305471,DE
-3279305472,3279305487,EU
-3279305488,3279305503,DE
-3279305504,3279305535,GB
-3279305536,3279305631,DE
-3279305632,3279305663,GB
-3279305664,3279305727,ES
-3279305728,3279306751,DE
-3279306752,3279310847,FR
+3279301632,3279304703,DE
3279310848,3279311871,DE
-3279311872,3279312895,EU
-3279312896,3279313415,DE
-3279313416,3279313423,EU
-3279313424,3279313919,DE
-3279313920,3279314943,GB
-3279314944,3279315711,CH
-3279315712,3279315967,BE
-3279315968,3279316223,DE
-3279316224,3279316479,BE
-3279316480,3279317759,IT
-3279317760,3279317887,DE
-3279317888,3279317951,IT
-3279317952,3279317967,DE
-3279317968,3279317983,IT
-3279317984,3279318015,NL
-3279318016,3279318271,DE
-3279318272,3279318527,GB
-3279318528,3279318559,CZ
-3279318560,3279318655,FR
-3279318656,3279318687,CZ
-3279318688,3279318719,FR
-3279318720,3279318751,ZA
-3279318752,3279318783,GB
-3279318784,3279319039,NL
-3279319040,3279320063,AT
+3279319296,3279319423,AT
3279320064,3279321087,FR
-3279321088,3279322623,DK
-3279322624,3279322663,NL
-3279322664,3279322671,AT
-3279322672,3279322687,GB
-3279322688,3279322879,DE
-3279322880,3279322975,NL
-3279322976,3279323071,DE
-3279323072,3279330079,GB
-3279330080,3279330111,DK
-3279330112,3279330815,GB
-3279330816,3279331071,EU
-3279331072,3279335295,GB
-3279335296,3279335423,BE
-3279335424,3279339519,GB
-3279339520,3279340031,ES
-3279340032,3279340543,IT
-3279340544,3279340671,FR
-3279340672,3279340799,EU
-3279340800,3279341055,FR
-3279341056,3279341567,IT
-3279341568,3279341823,SE
-3279341824,3279342079,ZA
-3279342080,3279342335,IT
-3279342336,3279342591,ZA
-3279342592,3279342847,SE
-3279342848,3279343103,HR
-3279343104,3279343359,SI
-3279343360,3279343615,ZA
-3279343616,3279345151,BE
-3279345152,3279345663,SE
-3279345664,3279346943,GB
-3279346944,3279347711,FR
-3279347712,3279348223,SE
-3279348224,3279348735,IT
-3279348736,3279348991,GB
-3279348992,3279349247,ES
-3279349248,3279349503,IT
-3279349504,3279349759,FR
-3279349760,3279351039,DE
-3279351040,3279351295,FR
-3279351296,3279351807,GB
-3279351808,3279352319,DK
-3279352320,3279352575,GB
-3279352576,3279352831,BE
-3279352832,3279352855,SE
-3279352856,3279353087,EU
-3279353088,3279353343,GB
-3279353344,3279354879,DK
-3279354880,3279355647,AT
-3279355648,3279355903,BE
-3279355904,3279356039,EU
-3279356040,3279356047,NO
-3279356048,3279356063,EU
-3279356064,3279356127,NO
-3279356128,3279356159,EU
-3279356160,3279356415,NO
-3279356416,3279356927,EU
-3279356928,3279357439,NO
-3279357440,3279372287,EU
-3279372288,3279372799,FI
-3279372800,3279373055,EU
-3279373056,3279375359,FI
-3279375360,3279380479,EU
-3279380480,3279380991,CH
-3279380992,3279382783,EU
-3279382784,3279383807,CH
-3279383808,3279384063,EU
-3279384064,3279385343,CH
-3279385344,3279386367,EU
-3279386368,3279386495,CH
-3279386496,3279387135,EU
-3279387136,3279387391,CH
-3279387392,3279388671,EU
-3279388672,3279388927,GR
-3279388928,3279389183,EU
-3279389184,3279389243,GR
-3279389244,3279389247,EU
-3279389248,3279389255,GR
-3279389256,3279389259,EU
-3279389260,3279389275,GR
-3279389276,3279389279,EU
-3279389280,3279389359,GR
-3279389360,3279389363,EU
-3279389364,3279389379,GR
-3279389380,3279389383,EU
-3279389384,3279389439,GR
-3279389440,3279389711,EU
-3279389712,3279389727,GR
-3279389728,3279390015,EU
-3279390016,3279390143,GR
-3279390144,3279393791,EU
-3279393792,3279394047,GR
-3279394048,3279394303,EU
-3279394304,3279394559,GR
-3279394560,3279402751,EU
-3279402752,3279403007,CZ
-3279403008,3279403263,EU
-3279403264,3279403903,CZ
-3279403904,3279404287,EU
-3279404288,3279404415,CZ
-3279404416,3279404799,EU
-3279404800,3279405055,CZ
-3279405056,3279421439,EU
+3279327232,3279329279,GB
+3279331328,3279332351,GB
+3279337472,3279339519,GB
+3279343872,3279344127,BE
+3279353856,3279354879,DK
+3279373312,3279374335,FI
+3279374592,3279375359,FI
+3279388672,3279396863,GR
3279421440,3279486975,IT
3279486976,3279552511,NL
3279552512,3279560703,LV
3279560704,3279568895,GB
3279568896,3279577087,IT
3279577088,3279585279,BE
-3279585280,3279585919,DE
-3279585920,3279585935,GB
-3279585936,3279585951,NL
-3279585952,3279585991,DE
-3279585992,3279585999,GB
-3279586000,3279586303,DE
-3279586304,3279586559,GB
-3279586560,3279588095,DE
-3279588096,3279588159,GB
-3279588160,3279588191,DE
-3279588192,3279588255,GB
-3279588256,3279588287,DE
-3279588288,3279588607,GB
-3279588608,3279588863,DE
-3279588864,3279589375,GB
-3279589376,3279589887,DE
-3279589888,3279590399,GB
-3279590400,3279590655,DE
-3279590656,3279590911,GB
-3279590912,3279590935,DE
-3279590936,3279591167,GB
-3279591168,3279591423,DE
-3279591424,3279591679,GB
-3279591680,3279591935,DE
-3279591936,3279592959,GB
-3279592960,3279593215,DE
-3279593216,3279593247,GB
-3279593248,3279593267,DE
-3279593268,3279593271,GB
-3279593272,3279593275,DE
-3279593276,3279593407,GB
+3279585280,3279587583,GB
+3279587584,3279588095,DE
+3279588096,3279590911,GB
+3279590912,3279591167,DE
+3279591168,3279593407,GB
3279593408,3279593440,DE
-3279593441,3279593471,GB
-3279593472,3279593503,DE
-3279593504,3279593535,GB
-3279593536,3279593567,DE
-3279593568,3279593599,GB
-3279593600,3279594495,DE
-3279594496,3279595775,GB
-3279595776,3279595839,DE
-3279595840,3279595903,GB
-3279595904,3279595999,DE
-3279596000,3279596023,GB
-3279596024,3279596031,DE
-3279596032,3279596543,GB
+3279593441,3279593599,GB
+3279593600,3279593727,DE
+3279593728,3279596543,GB
3279596544,3279597311,DE
3279597312,3279598591,GB
3279598592,3279599615,DE
-3279599616,3279600383,GB
-3279600384,3279600479,DE
-3279600480,3279600487,GB
-3279600488,3279600639,DE
-3279600640,3279601663,GB
+3279599616,3279601663,GB
3279601664,3279609855,CZ
3279609856,3279618047,RU
3279618048,3279683583,UA
-3279683584,3279688191,DE
-3279688192,3279688447,EU
-3279688448,3279723215,DE
-3279723216,3279723223,A2
-3279723224,3279727615,DE
-3279727616,3279727647,GB
-3279727648,3279744391,DE
-3279744392,3279744399,PL
-3279744400,3279752959,DE
-3279752960,3279753215,CH
-3279753216,3279789439,DE
-3279789440,3279789455,PL
-3279789456,3279837919,DE
-3279837920,3279837927,RU
-3279837928,3279895295,DE
-3279895296,3279895551,EU
-3279895552,3279897583,DE
-3279897584,3279897591,GB
-3279897592,3279946751,DE
+3279683584,3279946751,DE
3279946752,3279947775,SE
3279947776,3279948799,NL
-3279948800,3279949823,GB
3279949824,3279950847,UA
3279950848,3279951871,DE
-3279951872,3279952895,IQ
3279952896,3279953919,PL
3279953920,3279955967,TR
3279955968,3279958015,DE
-3279958016,3279972351,RU
+3279958016,3279970303,RU
3279972352,3279974399,AT
3279974400,3279976447,PL
3279976448,3279978495,RU
@@ -132437,7 +67886,6 @@
3279985664,3279985919,DE
3279985920,3279986687,RU
3279986688,3279987199,NL
-3279987200,3279987711,RU
3279987712,3279988223,RO
3279988224,3279988735,AM
3279988736,3279989247,RO
@@ -132445,7 +67893,6 @@
3279989760,3279990271,PL
3279990272,3279990783,DK
3279990784,3279991295,IL
-3279991296,3279991807,UA
3279991808,3279992319,PL
3279992320,3279992831,UA
3279992832,3279993855,NL
@@ -132460,81 +67907,12 @@
3280005632,3280006143,IT
3280006144,3280006655,DK
3280006656,3280007167,GB
-3280007168,3280007679,SE
3280007680,3280008191,PL
3280008192,3280009215,RU
3280009216,3280009727,UA
3280009728,3280010239,GB
3280010240,3280010751,UA
-3280010752,3280011263,TR
-3280011264,3280011327,DE
-3280011328,3280011391,NL
-3280011392,3280011407,EU
-3280011408,3280011415,GB
-3280011416,3280011551,EU
-3280011552,3280011567,GB
-3280011568,3280011647,EU
-3280011648,3280011775,IT
-3280011776,3280011783,NL
-3280011784,3280011791,BE
-3280011792,3280011903,EU
-3280011904,3280011951,BE
-3280011952,3280015103,EU
-3280015104,3280015359,GB
-3280015360,3280015871,EU
-3280015872,3280016383,GB
-3280016384,3280016447,EU
-3280016448,3280016463,BE
-3280016464,3280016543,EU
-3280016544,3280016559,BE
-3280016560,3280016575,GR
-3280016576,3280016607,NO
-3280016608,3280016623,CH
-3280016624,3280016959,EU
-3280016960,3280016991,BE
-3280016992,3280017023,FR
-3280017024,3280017055,IT
-3280017056,3280017087,EU
-3280017088,3280017151,IE
-3280017152,3280017919,EU
-3280017920,3280018431,IT
-3280018432,3280019455,GB
-3280019456,3280019711,EU
-3280019712,3280020479,CH
-3280020480,3280020735,IE
-3280020736,3280020991,BE
-3280020992,3280021087,GB
-3280021088,3280021119,EU
-3280021120,3280021183,NL
-3280021184,3280021247,EU
-3280021248,3280021503,CH
-3280021504,3280021759,EU
-3280021760,3280021823,BE
-3280021824,3280022783,EU
-3280022784,3280023039,IT
-3280023040,3280023551,EU
3280023552,3280024575,IT
-3280024576,3280024831,SE
-3280024832,3280027647,EU
-3280027648,3280027903,CH
-3280027904,3280028159,EU
-3280028160,3280028415,IT
-3280028416,3280028671,BE
-3280028672,3280030207,EU
-3280030208,3280030463,CH
-3280030464,3280031743,EU
-3280031744,3280031999,IE
-3280032000,3280032127,EU
-3280032128,3280032255,CH
-3280032256,3280035327,EU
-3280035328,3280035583,CH
-3280035584,3280036607,EU
-3280036608,3280036863,CH
-3280036864,3280037887,EU
-3280037888,3280038399,CH
-3280038400,3280041471,EU
-3280041472,3280041727,CH
-3280041728,3280076799,EU
3280076800,3280084991,GB
3280084992,3280093183,BA
3280093184,3280109567,GR
@@ -132547,15 +67925,13 @@
3280126976,3280127231,CH
3280127232,3280127487,PL
3280127488,3280127743,AT
-3280127744,3280127999,NL
3280128000,3280128255,SE
3280128256,3280128511,GB
3280128512,3280129023,HU
-3280129024,3280129279,RU
3280129280,3280129535,LV
3280129536,3280129791,SA
3280129792,3280130047,FR
-3280130048,3280130559,RU
+3280130304,3280130559,RU
3280130560,3280130815,GB
3280130816,3280131071,IS
3280131072,3280131327,PL
@@ -132571,9 +67947,7 @@
3280133632,3280133887,FR
3280133888,3280134143,NL
3280134144,3280142335,IT
-3280142336,3280144815,RU
-3280144816,3280144823,RO
-3280144824,3280207871,RU
+3280142336,3280207871,RU
3280207872,3280273407,FR
3280273408,3280338943,RU
3280338944,3280347135,GB
@@ -132584,13 +67958,7 @@
3280381952,3280383999,NL
3280384000,3280386047,IT
3280386048,3280388095,SA
-3280388096,3280390719,GB
-3280390720,3280390751,FR
-3280390752,3280392703,GB
-3280392704,3280392831,FR
-3280392832,3280395263,GB
-3280395264,3280395519,FR
-3280395520,3280396287,GB
+3280388096,3280396287,GB
3280396288,3280404479,FI
3280404480,3280437247,IT
3280437248,3280453631,DE
@@ -132604,7 +67972,6 @@
3280460800,3280462847,DE
3280462848,3280463871,PL
3280463872,3280466943,RU
-3280466944,3280467967,UA
3280467968,3280468991,ES
3280470016,3280535551,PL
3280535552,3280568319,GB
@@ -132634,9 +68001,7 @@
3280582400,3280582655,DK
3280582656,3280582911,FR
3280582912,3280583167,UA
-3280583168,3280583423,RO
3280583424,3280583679,RU
-3280583680,3280583935,PS
3280583936,3280584191,PL
3280584192,3280584447,KW
3280584448,3280584703,DE
@@ -132646,7 +68011,6 @@
3280586240,3280586751,DE
3280586752,3280587263,RU
3280587264,3280587775,UA
-3280587776,3280588287,RO
3280588288,3280588799,UA
3280588800,3280589311,PL
3280589312,3280590335,DE
@@ -132658,8 +68022,7 @@
3280592896,3280593407,DE
3280593408,3280593919,UA
3280593920,3280594431,LU
-3280594432,3280594687,NL
-3280594688,3280594943,EU
+3280594432,3280594943,NL
3280594944,3280595455,UA
3280595456,3280595967,DE
3280595968,3280596479,DK
@@ -132677,9 +68040,7 @@
3280609280,3280617471,DE
3280617472,3280625663,UA
3280625664,3280633855,MD
-3280633856,3280635935,BG
-3280635936,3280635943,MK
-3280635944,3280642047,BG
+3280633856,3280642047,BG
3280642048,3280650239,UA
3280650240,3280650495,RO
3280650496,3280650751,UA
@@ -132703,31 +68064,14 @@
3280655872,3280656127,RO
3280656128,3280656639,CH
3280656640,3280657407,UA
-3280657408,3280657663,RU
3280657664,3280657919,SE
3280657920,3280658175,RO
3280658176,3280658431,DE
3280658432,3280660479,MT
3280660480,3280662527,RU
-3280662528,3280662543,IN
-3280662544,3280662559,DE
-3280662560,3280662607,IT
-3280662608,3280662655,DE
-3280662656,3280662687,AR
-3280662688,3280662783,DE
-3280662784,3280663295,CZ
-3280663296,3280663327,AR
-3280663328,3280663391,DE
-3280663392,3280663407,HK
-3280663408,3280664575,DE
-3280664576,3280664703,GB
-3280664704,3280664831,IN
-3280664832,3280665087,JO
-3280665088,3280665855,US
-3280665856,3280666623,DE
+3280662528,3280666623,DE
3280666624,3280732159,NO
3280732160,3280764927,DE
-3280764928,3280765951,TJ
3280765952,3280766975,DK
3280766976,3280767999,AT
3280768000,3280769023,FR
@@ -132750,7 +68094,7 @@
3280785408,3280787455,DE
3280787456,3280788479,GB
3280788480,3280789503,PL
-3280789504,3280791551,UA
+3280790528,3280791551,UA
3280791552,3280792575,DE
3280792576,3280793599,PL
3280793600,3280794623,NL
@@ -132759,265 +68103,19 @@
3280796672,3280797695,CZ
3280797696,3280863231,CH
3280863232,3280928767,TR
-3280928768,3280928831,RU
-3280928832,3280930303,GB
-3280930304,3280930559,DE
-3280930560,3280930959,GB
-3280930960,3280930975,DE
-3280930976,3280933175,GB
-3280933176,3280933183,DE
-3280933184,3280933359,GB
-3280933360,3280933375,DE
-3280933376,3280933631,GB
-3280933632,3280934399,DE
-3280934400,3280936191,GB
-3280936192,3280936447,DE
-3280936448,3280938767,GB
-3280938768,3280938783,DE
-3280938784,3280938799,GB
-3280938800,3280938815,DE
-3280938816,3280950655,GB
-3280950656,3280950687,DE
-3280950688,3280951039,GB
-3280951040,3280951295,DE
-3280951296,3280951807,GB
-3280951808,3280952323,DE
-3280952324,3280952327,GB
-3280952328,3280952335,DE
-3280952336,3280952351,GB
-3280952352,3280952375,DE
-3280952376,3280952383,GB
-3280952384,3280952455,DE
-3280952456,3280952463,GB
-3280952464,3280952575,DE
-3280952576,3280952615,GB
-3280952616,3280952623,DE
-3280952624,3280952631,GB
-3280952632,3280952643,DE
-3280952644,3280952671,GB
-3280952672,3280952687,DE
-3280952688,3280952695,GB
-3280952696,3280952767,DE
-3280952768,3280952783,GB
-3280952784,3280952791,DE
-3280952792,3280952799,GB
-3280952800,3280952831,DE
-3280952832,3280955407,GB
-3280955408,3280955419,DE
-3280955420,3280955503,GB
-3280955504,3280955646,DE
-3280955647,3280955647,GB
-3280955648,3280955703,DE
-3280955704,3280955707,GB
-3280955708,3280955791,DE
-3280955792,3280955799,GB
-3280955800,3280955999,DE
-3280956000,3280956007,GB
-3280956008,3280956015,DE
-3280956016,3280956023,GB
-3280956024,3280956039,DE
-3280956040,3280956047,GB
-3280956048,3280956095,DE
-3280956096,3280956103,GB
-3280956104,3280956143,DE
-3280956144,3280956415,GB
-3280956416,3280956927,DE
-3280956928,3280957255,GB
-3280957256,3280957263,DE
-3280957264,3280957311,GB
-3280957312,3280957503,DE
-3280957504,3280957831,GB
-3280957832,3280957839,DE
-3280957840,3280958463,GB
-3280958464,3280958807,DE
-3280958808,3280958863,GB
-3280958864,3280958871,DE
-3280958872,3280958879,GB
-3280958880,3280958911,DE
-3280958912,3280958919,GB
-3280958920,3280959111,DE
-3280959112,3280959119,GB
-3280959120,3280959279,DE
-3280959280,3280959487,GB
-3280959488,3280959775,DE
-3280959776,3280960015,GB
-3280960016,3280960023,DE
-3280960024,3280960031,GB
-3280960032,3280960039,DE
-3280960040,3280962815,GB
-3280962816,3280962831,DE
-3280962832,3280963343,GB
-3280963344,3280963367,DE
-3280963368,3280963375,GB
-3280963376,3280963391,DE
-3280963392,3280963407,GB
-3280963408,3280963423,DE
-3280963424,3280963487,GB
-3280963488,3280963495,DE
-3280963496,3280963519,GB
-3280963520,3280963527,DE
-3280963528,3280963535,GB
-3280963536,3280963551,DE
-3280963552,3280968447,GB
-3280968448,3280968703,DE
-3280968704,3280970239,GB
-3280970240,3280970495,DE
-3280970496,3280971039,GB
-3280971040,3280971055,DE
-3280971056,3280974079,GB
-3280974080,3280974335,DE
-3280974336,3280974399,GB
-3280974400,3280974415,DE
-3280974416,3280974591,GB
-3280974592,3280974847,DE
-3280974848,3280976911,GB
-3280976912,3280976927,DE
-3280976928,3280976935,GB
-3280976936,3280976951,DE
-3280976952,3280976991,GB
-3280976992,3280977023,DE
-3280977024,3280977031,GB
-3280977032,3280977111,DE
-3280977112,3280977119,GB
-3280977120,3280977407,DE
-3280977408,3280977951,GB
-3280977952,3280977955,DE
-3280977956,3280977999,GB
-3280978000,3280978007,DE
-3280978008,3280978191,GB
-3280978192,3280978195,DE
-3280978196,3280978231,GB
-3280978232,3280978239,DE
-3280978240,3280978335,GB
-3280978336,3280978367,DE
-3280978368,3280978383,GB
-3280978384,3280978399,DE
-3280978400,3280978495,GB
-3280978496,3280978499,DE
-3280978500,3280978623,GB
-3280978624,3280978631,DE
-3280978632,3280979023,GB
-3280979024,3280979039,DE
-3280979040,3280979103,GB
-3280979104,3280979111,DE
-3280979112,3280979151,GB
-3280979152,3280979159,DE
-3280979160,3280979167,GB
-3280979168,3280979183,DE
-3280979184,3280979555,GB
-3280979556,3280979559,DE
-3280979560,3280979576,GB
-3280979577,3280979577,DE
-3280979578,3280979839,GB
-3280979840,3280979975,DE
-3280979976,3280980080,GB
-3280980081,3280980081,DE
-3280980082,3280980351,GB
-3280980352,3280980367,DE
-3280980368,3280980423,GB
-3280980424,3280980431,DE
-3280980432,3280980471,GB
-3280980472,3280980479,DE
-3280980480,3280981039,GB
-3280981040,3280981055,DE
-3280981056,3280981215,GB
-3280981216,3280981231,DE
-3280981232,3280981487,GB
-3280981488,3280981503,DE
-3280981504,3280981607,GB
-3280981608,3280981615,DE
-3280981616,3280981839,GB
-3280981840,3280981847,DE
-3280981848,3280981983,GB
-3280981984,3280981999,DE
-3280982000,3280982015,GB
-3280982016,3280982023,DE
-3280982024,3280982255,GB
-3280982256,3280982263,DE
-3280982264,3280982607,GB
-3280982608,3280982623,DE
-3280982624,3280982655,GB
-3280982656,3280982671,DE
-3280982672,3280982951,GB
-3280982952,3280982959,DE
-3280982960,3280983112,GB
-3280983113,3280983113,DE
-3280983114,3280983119,GB
-3280983120,3280983167,DE
-3280983168,3280983359,GB
-3280983360,3280983375,DE
-3280983376,3280983423,GB
-3280983424,3280983431,DE
-3280983432,3280983887,GB
-3280983888,3280983895,DE
-3280983896,3280984495,GB
-3280984496,3280984503,DE
-3280984504,3280985087,GB
-3280985088,3280985343,CH
-3280985344,3280985639,GB
-3280985640,3280985647,DE
-3280985648,3280986263,GB
-3280986264,3280986267,DE
-3280986268,3280987135,GB
-3280987136,3280987391,CH
-3280987392,3280987647,NL
-3280987648,3280987983,GB
-3280987984,3280987999,DE
-3280988000,3280988303,GB
-3280988304,3280988311,DE
-3280988312,3280988383,GB
-3280988384,3280988391,DE
-3280988392,3280988399,GB
-3280988400,3280988431,DE
-3280988432,3280988815,GB
-3280988816,3280988831,DE
-3280988832,3280988855,GB
-3280988856,3280988863,DE
-3280988864,3280989015,GB
-3280989016,3280989039,DE
-3280989040,3280989063,GB
-3280989064,3280989067,DE
-3280989068,3280989335,GB
-3280989336,3280989343,DE
-3280989344,3280989375,GB
-3280989376,3280989391,DE
-3280989392,3280989463,GB
-3280989464,3280989471,DE
-3280989472,3280989535,GB
-3280989536,3280989551,DE
-3280989552,3280989631,GB
-3280989632,3280989647,DE
-3280989648,3280989820,GB
-3280989821,3280989821,DE
-3280989822,3280990047,GB
-3280990048,3280990063,DE
-3280990064,3280990191,GB
-3280990192,3280990223,DE
-3280990224,3280990231,GB
-3280990232,3280990239,DE
-3280990240,3280990271,GB
-3280990272,3280990287,DE
-3280990288,3280990479,GB
-3280990480,3280990487,DE
-3280990488,3280990575,GB
-3280990576,3280990591,DE
-3280990592,3280990703,GB
-3280990704,3280990719,DE
-3280990720,3280990863,GB
-3280990864,3280990871,DE
-3280990872,3280991231,GB
+3280928768,3280928831,GB
+3280928832,3280928847,RU
+3280928848,3280928855,GB
+3280928856,3280928863,RU
+3280928864,3280955707,GB
+3280955708,3280955711,DE
+3280955712,3280958919,GB
+3280958920,3280958927,DE
+3280958928,3280963375,GB
+3280963376,3280963383,DE
+3280963384,3280991231,GB
3280991232,3280991743,DE
-3280991744,3280992231,GB
-3280992232,3280992239,DE
-3280992240,3280992399,GB
-3280992400,3280992415,DE
-3280992416,3280992799,GB
-3280992800,3280992815,DE
-3280992816,3280992847,GB
-3280992848,3280992863,DE
-3280992864,3280993535,GB
-3280993536,3280993791,DE
-3280993792,3280994559,GB
+3280991744,3280994559,GB
3280994560,3280994815,RU
3280994816,3280995071,NL
3280995072,3280995327,DE
@@ -133041,7 +68139,6 @@
3281000448,3281000703,FR
3281000704,3281000959,UA
3281000960,3281001215,SI
-3281001216,3281001471,RO
3281001472,3281001727,UA
3281001728,3281001983,RU
3281001984,3281002239,CH
@@ -133050,45 +68147,17 @@
3281010688,3281018879,BE
3281018880,3281027071,CZ
3281027072,3281027327,GB
-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
-3281063168,3281068543,DE
-3281068544,3281068647,US
-3281068648,3281068655,DE
-3281068656,3281068751,US
-3281068752,3281068759,DE
-3281068760,3281068799,US
-3281068800,3281074671,DE
-3281074672,3281074679,ES
-3281074680,3281103935,DE
-3281103936,3281103943,AT
-3281103944,3281104127,DE
-3281104128,3281104383,FR
-3281104384,3281116927,DE
-3281116928,3281117007,PL
-3281117008,3281117023,DE
-3281117024,3281117119,PL
-3281117120,3281117135,DE
-3281117136,3281117183,PL
-3281117184,3281125375,DE
+3281059840,3281125375,DE
3281125376,3281133567,SK
3281133568,3281141759,IR
3281141760,3281149951,RU
@@ -133102,7 +68171,6 @@
3281338368,3281338623,PL
3281338624,3281338879,SA
3281338880,3281339135,FR
-3281339136,3281339391,RO
3281339392,3281339647,PL
3281339648,3281339903,GB
3281339904,3281340159,UA
@@ -133123,7 +68191,6 @@
3281344768,3281345279,RU
3281345280,3281345535,SA
3281345536,3281345791,CH
-3281345792,3281346047,RU
3281346048,3281346303,SI
3281346304,3281346559,PL
3281346560,3281346815,UA
@@ -133146,17 +68213,14 @@
3281351680,3281351935,TR
3281351936,3281352191,UA
3281352192,3281352447,PL
-3281352448,3281352703,RO
-3281352704,3281352959,EU
+3281352704,3281352959,DE
3281352960,3281353215,GB
3281353216,3281353471,DE
3281353472,3281353727,SE
3281353728,3281353983,PL
3281353984,3281354239,UA
3281354240,3281354751,GB
-3281354752,3281359071,SE
-3281359072,3281359103,CW
-3281359104,3281371135,SE
+3281354752,3281371135,SE
3281371136,3281372159,RS
3281372160,3281372671,RU
3281372672,3281373183,PL
@@ -133167,30 +68231,12 @@
3281383424,3281385471,AT
3281385472,3281387519,BG
3281387520,3281453055,PL
-3281453056,3281470975,RU
-3281470976,3281471231,UZ
-3281471232,3281518591,RU
-3281518592,3281578431,GB
-3281578432,3281578447,IE
-3281578448,3281640959,GB
-3281640960,3281640983,SE
-3281640984,3281641023,GB
-3281641024,3281641039,SE
-3281641040,3281641087,GB
-3281641088,3281641119,SE
-3281641120,3281649663,GB
+3281453056,3281518591,RU
+3281518592,3281649663,GB
3281649664,3281715199,FR
3281715200,3281780735,TR
-3281780736,3281836543,FI
-3281836544,3281836799,AX
-3281836800,3281846271,FI
-3281846272,3281868271,GB
-3281868272,3281868287,FR
-3281868288,3281880191,GB
-3281880192,3281880223,FR
-3281880224,3281886207,GB
-3281886208,3281886335,FR
-3281886336,3281911807,GB
+3281780736,3281846271,FI
+3281846272,3281911807,GB
3281911808,3281919999,UZ
3281920000,3281928191,DE
3281928192,3281944575,MT
@@ -133199,14 +68245,13 @@
3281969152,3281969663,RU
3281969664,3281970175,PL
3281970176,3281970687,RU
-3281970688,3281971199,LI
+3281970688,3281971199,CH
3281971200,3281971711,RU
3281971712,3281972223,RO
3281972224,3281972735,DE
3281972736,3281973247,RU
3281973248,3281973759,FR
3281973760,3281974271,DK
-3281974272,3281974783,RU
3281974784,3281975295,PL
3281975296,3281976319,RU
3281976320,3281976831,DE
@@ -133225,7 +68270,6 @@
3282088448,3282089471,PL
3282089472,3282089983,SK
3282089984,3282090495,PL
-3282090496,3282091007,GB
3282091008,3282091519,FR
3282091520,3282092031,CH
3282092032,3282093055,UA
@@ -133242,16 +68286,12 @@
3282104320,3282105343,IL
3282105344,3282106367,RU
3282106368,3282107391,DE
-3282107392,3282108415,EU
-3282108416,3282119423,RU
-3282119424,3282119679,KZ
-3282119680,3282149455,RU
-3282149456,3282149471,KG
-3282149472,3282173951,RU
+3282107392,3282108415,NL
+3282108416,3282173951,RU
3282173952,3282174463,UA
3282174464,3282174975,GB
3282174976,3282175487,DE
-3282175488,3282177023,RU
+3282176000,3282177023,RU
3282177024,3282177535,GB
3282177536,3282178047,KZ
3282178048,3282178559,PL
@@ -133279,53 +68319,10 @@
3282206720,3282223103,CH
3282223104,3282231295,BE
3282231296,3282239487,DE
-3282239488,3282284559,SE
-3282284560,3282284579,FI
-3282284580,3282284591,SE
-3282284592,3282284595,FI
-3282284596,3282284599,SE
-3282284600,3282284603,FI
-3282284604,3282284735,SE
-3282284736,3282284783,FI
-3282284784,3282287615,SE
-3282287616,3282287871,FI
-3282287872,3282305023,SE
+3282239488,3282305023,SE
3282305024,3282370559,PL
-3282370560,3282388175,FI
-3282388176,3282388191,SE
-3282388192,3282390015,FI
-3282390016,3282390271,NL
-3282390272,3282416383,FI
-3282416384,3282416511,RU
-3282416512,3282429279,FI
-3282429280,3282429311,SE
-3282429312,3282429343,NO
-3282429344,3282436095,FI
-3282436096,3282444159,GB
-3282444160,3282444223,US
-3282444224,3282449023,GB
-3282449024,3282449151,NL
-3282449152,3282452479,GB
-3282452480,3282452735,DE
-3282452736,3282456023,GB
-3282456024,3282456031,IT
-3282456032,3282461439,GB
-3282461440,3282461695,CH
-3282461696,3282464767,GB
-3282464768,3282465023,SE
-3282465024,3282465279,DE
-3282465280,3282465535,IT
-3282465536,3282466047,GB
-3282466048,3282466111,US
-3282466112,3282466643,GB
-3282466644,3282466655,IT
-3282466656,3282466687,GB
-3282466688,3282466727,IT
-3282466728,3282466815,GB
-3282466816,3282467071,US
-3282467072,3282467327,GB
-3282467328,3282467359,DE
-3282467360,3282477055,GB
+3282370560,3282436095,FI
+3282436096,3282477055,GB
3282477056,3282485247,RU
3282485248,3282493439,GI
3282493440,3282501631,NG
@@ -133347,9 +68344,7 @@
3282739712,3282739967,FR
3282739968,3282740223,IR
3282740224,3282740479,FR
-3282740480,3282740735,AT
3282740736,3282740991,BG
-3282740992,3282741247,DE
3282741248,3282741503,PT
3282741504,3282741759,GB
3282741760,3282742015,ES
@@ -133374,18 +68369,12 @@
3282746880,3282747135,RO
3282747136,3282747391,PL
3282747392,3282763775,RU
-3282763776,3282772991,GB
-3282772992,3282773247,EU
-3282773248,3282844855,GB
-3282844856,3282844863,A2
-3282844864,3282960383,GB
+3282763776,3282960383,GB
3282960384,3283091455,TR
3283091456,3283111935,CH
3283111936,3283113471,LI
3283113472,3283156991,CH
-3283156992,3283158215,DE
-3283158216,3283158219,EE
-3283158220,3283173375,DE
+3283156992,3283173375,DE
3283173376,3283174399,PL
3283174400,3283176447,UA
3283176448,3283177471,GB
@@ -133396,7 +68385,7 @@
3283181568,3283182591,NO
3283182592,3283183615,PL
3283183616,3283184639,RU
-3283185664,3283187711,UA
+3283186688,3283187711,UA
3283187712,3283188735,RU
3283188736,3283189759,UA
3283189760,3283206143,DE
@@ -133409,9 +68398,7 @@
3283209728,3283210239,TR
3283210240,3283210751,UA
3283210752,3283211263,PL
-3283211264,3283211488,GB
-3283211489,3283211489,EU
-3283211490,3283211775,GB
+3283211264,3283211775,GB
3283211776,3283212287,NL
3283212288,3283212799,PL
3283212800,3283213311,BG
@@ -133420,7 +68407,6 @@
3283214336,3283214847,RO
3283214848,3283215359,RU
3283215360,3283215871,AT
-3283215872,3283216383,TR
3283216384,3283216895,DE
3283216896,3283217407,CH
3283217408,3283218943,UA
@@ -133433,7 +68419,6 @@
3283222016,3283223039,DE
3283223040,3283223551,RU
3283223552,3283224063,NL
-3283224064,3283224575,EU
3283224576,3283225087,BG
3283225088,3283225599,UA
3283225600,3283226111,RU
@@ -133451,60 +68436,26 @@
3283248128,3283248639,DE
3283248640,3283249151,RO
3283249152,3283249663,UA
-3283249664,3283249919,MD
-3283249920,3283250175,RO
+3283249664,3283250175,RO
3283250176,3283250687,RU
3283250688,3283251199,RO
3283251200,3283251711,FR
3283251712,3283252223,PL
3283252224,3283252735,BG
3283252736,3283253247,SI
-3283253248,3283253759,RO
3283253760,3283254271,PL
-3283254272,3283255295,RO
3283255296,3283263487,UA
3283263488,3283271679,SE
3283271680,3283279871,RU
3283279872,3283288063,SE
-3283288064,3283288575,DE
-3283288576,3283288579,BE
-3283288580,3283291487,DE
-3283291488,3283291491,ES
-3283291492,3283304919,DE
-3283304920,3283304923,ES
-3283304924,3283304959,DE
-3283304960,3283305023,GB
-3283305024,3283305087,DE
-3283305088,3283305127,FR
-3283305128,3283305711,DE
-3283305712,3283305715,ES
-3283305716,3283318687,DE
-3283318688,3283318691,ES
-3283318692,3283318975,DE
-3283318976,3283318991,NL
-3283318992,3283318999,ES
-3283319000,3283319167,DE
-3283319168,3283319171,ES
-3283319172,3283321087,DE
-3283321088,3283321119,GB
-3283321120,3283321151,DE
-3283321152,3283321155,ES
-3283321156,3283321711,DE
-3283321712,3283321715,ES
-3283321716,3283321871,DE
-3283321872,3283321875,ES
-3283321876,3283329923,DE
-3283329924,3283329927,ES
-3283329928,3283419135,DE
+3283288064,3283419135,DE
3283419136,3283484671,DK
3283484672,3283484927,UA
3283484928,3283485183,NL
3283485184,3283485439,DE
3283485440,3283485695,RU
3283485696,3283485951,GB
-3283485952,3283486128,US
-3283486129,3283486129,SE
-3283486130,3283486207,US
+3283485952,3283486207,SE
3283486208,3283486463,AT
3283486464,3283486719,UA
3283486720,3283486975,RU
@@ -133514,7 +68465,6 @@
3283487744,3283487999,CH
3283488000,3283488255,NL
3283488256,3283488511,PL
-3283488512,3283488767,RU
3283488768,3283489279,FR
3283489280,3283489535,DE
3283489536,3283489791,PL
@@ -133533,7 +68483,6 @@
3283493120,3283493375,IL
3283493376,3283493887,PL
3283493888,3283494143,DK
-3283494144,3283494399,GB
3283494400,3283494655,PL
3283494656,3283494911,DK
3283494912,3283495167,PL
@@ -133565,10 +68514,7 @@
3283525632,3283533823,GB
3283533824,3283534847,UA
3283534848,3283535359,DE
-3283535360,3283535871,RO
-3283535872,3283536383,GI
3283536384,3283536895,UA
-3283536896,3283537407,DK
3283537408,3283537919,PL
3283537920,3283538431,RO
3283538432,3283538943,IT
@@ -133579,344 +68525,11 @@
3283540992,3283541503,RO
3283541504,3283542015,CH
3283542016,3283550207,IT
-3283550208,3283550287,EU
-3283550288,3283550319,AT
-3283550320,3283550463,EU
-3283550464,3283550623,AT
-3283550624,3283550655,FR
-3283550656,3283550719,GB
-3283550720,3283552255,AT
-3283552256,3283552343,IT
-3283552344,3283552351,EU
-3283552352,3283552575,IT
-3283552576,3283552639,DE
-3283552640,3283552671,IT
-3283552672,3283552703,CH
-3283552704,3283552735,DE
-3283552736,3283552751,FR
-3283552752,3283553047,IT
-3283553048,3283553055,GB
-3283553056,3283553071,ZA
-3283553072,3283553079,SE
-3283553080,3283553087,EU
-3283553088,3283553119,DE
-3283553120,3283553151,GR
-3283553152,3283553279,GB
-3283553280,3283553535,IT
-3283553536,3283553791,EU
-3283553792,3283554047,GB
-3283554048,3283554079,IT
-3283554080,3283554095,ES
-3283554096,3283554111,NL
-3283554112,3283554175,IT
-3283554176,3283554239,FR
-3283554240,3283554255,ZA
-3283554256,3283554271,RU
-3283554272,3283554303,GB
-3283554304,3283554327,CH
-3283554328,3283554335,EU
-3283554336,3283554367,CH
-3283554368,3283554431,EU
-3283554432,3283555743,CH
-3283555744,3283555759,SE
-3283555760,3283555775,DE
-3283555776,3283555807,NL
-3283555808,3283555839,DE
-3283555840,3283556351,CH
-3283556352,3283556391,FR
-3283556392,3283556399,EU
-3283556400,3283556623,FR
-3283556624,3283556671,EU
-3283556672,3283556735,FR
-3283556736,3283556863,EU
-3283556864,3283558303,FR
-3283558304,3283558335,DE
-3283558336,3283558367,IT
-3283558368,3283558383,ZA
-3283558384,3283558399,GB
-3283558400,3283558431,RU
-3283558432,3283558463,DE
-3283558464,3283558535,RU
-3283558536,3283558655,EU
-3283558656,3283558751,FR
-3283558752,3283558783,BE
-3283558784,3283558799,GB
-3283558800,3283558815,BE
-3283558816,3283558847,NL
-3283558848,3283558863,ZA
-3283558864,3283558871,GB
-3283558872,3283558879,ZA
-3283558880,3283558895,GB
-3283558896,3283558911,BE
-3283558912,3283559039,DE
-3283559040,3283559167,IE
-3283559168,3283559231,DE
-3283559232,3283559263,GB
-3283559264,3283559295,ZA
-3283559296,3283559423,DE
-3283559424,3283559679,NL
-3283559680,3283559935,IT
-3283559936,3283560191,GB
-3283560192,3283560447,NO
-3283560448,3283560703,EU
-3283560704,3283560847,ZA
-3283560848,3283560863,EU
-3283560864,3283560895,SE
-3283560896,3283560959,GB
-3283560960,3283561215,BE
-3283561216,3283561375,EU
-3283561376,3283561407,GB
-3283561408,3283561471,ES
3283561472,3283562495,GB
-3283562496,3283562751,DE
-3283562752,3283562895,GB
-3283562896,3283562903,NL
-3283562904,3283562911,CH
-3283562912,3283562943,DE
-3283562944,3283563007,IT
-3283563008,3283566015,GB
-3283566016,3283566079,ZA
-3283566080,3283566591,GB
-3283566592,3283566719,PL
-3283566720,3283566847,EU
-3283566848,3283567103,NO
-3283567104,3283567423,GB
-3283567424,3283567455,DE
-3283567456,3283567471,GB
-3283567472,3283567487,ES
-3283567488,3283567615,ZA
-3283567616,3283567967,GB
-3283567968,3283567999,IT
-3283568000,3283568031,GB
-3283568032,3283568063,DE
-3283568064,3283568079,NL
-3283568080,3283568095,ZA
-3283568096,3283568127,DK
-3283568128,3283569991,GB
-3283569992,3283570015,SE
-3283570016,3283570047,DK
-3283570048,3283570175,DE
-3283570176,3283570439,GB
-3283570440,3283570447,SE
-3283570448,3283570463,IT
-3283570464,3283570495,GB
-3283570496,3283570559,DE
-3283570560,3283570623,FR
-3283570624,3283571167,GB
-3283571168,3283571199,DE
-3283571200,3283571711,GB
-3283571712,3283571719,HU
-3283571720,3283571743,EU
-3283571744,3283571775,DE
-3283571776,3283571839,GB
-3283571840,3283571903,SE
-3283571904,3283571967,DE
-3283571968,3283572111,GB
-3283572112,3283572127,BE
-3283572128,3283572159,SE
-3283572160,3283572175,GB
-3283572176,3283572191,ZA
-3283572192,3283572223,CH
-3283572224,3283572615,GB
-3283572616,3283572623,FR
-3283572624,3283572631,GB
-3283572632,3283572639,CH
-3283572640,3283572671,GB
-3283572672,3283572735,DE
-3283572736,3283573247,EU
-3283573248,3283574527,GB
-3283574528,3283574591,EU
-3283574592,3283574607,GB
-3283574608,3283574615,NL
-3283574616,3283574623,GB
-3283574624,3283574639,ZA
-3283574640,3283574655,GB
-3283574656,3283575071,DE
-3283575072,3283575087,NL
-3283575088,3283575103,EU
-3283575104,3283575295,DE
-3283575296,3283575327,EU
-3283575328,3283576415,DE
-3283576416,3283576447,ZA
-3283576448,3283580159,DE
-3283580160,3283580415,EU
-3283580416,3283580455,DE
-3283580456,3283580463,EU
-3283580464,3283582975,DE
-3283582976,3283582979,ZA
-3283582980,3283582991,EU
-3283582992,3283583359,ZA
-3283583360,3283583487,EU
-3283583488,3283583503,ZA
-3283583504,3283583519,EU
-3283583520,3283583615,ZA
-3283583616,3283583743,EU
-3283583744,3283583839,ZA
-3283583840,3283583847,IT
-3283583848,3283583871,GB
-3283583872,3283583999,BE
-3283584000,3283584031,ZA
-3283584032,3283584063,DE
-3283584064,3283584127,IE
-3283584128,3283585023,ZA
-3283585024,3283585279,ES
-3283585280,3283585535,ZA
-3283585536,3283585679,ES
-3283585680,3283585695,IE
-3283585696,3283585727,FR
-3283585728,3283585791,ES
-3283585792,3283586047,IE
-3283586048,3283586351,ES
-3283586352,3283586367,EU
-3283586368,3283586407,ES
-3283586408,3283586415,EU
-3283586416,3283586503,ES
-3283586504,3283586511,EU
-3283586512,3283586519,ES
-3283586520,3283586559,EU
-3283586560,3283586815,FR
-3283586816,3283587071,DE
-3283587072,3283587199,EU
-3283587200,3283587231,NL
-3283587232,3283587263,EU
-3283587264,3283587335,NL
-3283587336,3283587343,GB
-3283587344,3283587359,NL
-3283587360,3283587391,SE
-3283587392,3283587423,NL
-3283587424,3283587431,SE
-3283587432,3283587439,EU
-3283587440,3283587447,GB
-3283587448,3283587455,DE
-3283587456,3283587487,CH
-3283587488,3283587519,EU
-3283587520,3283587551,CH
-3283587552,3283587583,EU
-3283587584,3283587647,NL
-3283587648,3283587679,DE
-3283587680,3283587711,CH
-3283587712,3283587839,DE
-3283587840,3283587871,NL
-3283587872,3283587887,ZA
-3283587888,3283587895,SE
-3283587896,3283587903,CH
-3283587904,3283587967,IE
-3283587968,3283588095,DE
-3283588096,3283588191,BE
-3283588192,3283588223,EU
-3283588224,3283588479,BE
-3283588480,3283588543,AT
-3283588544,3283588607,GB
-3283588608,3283589119,BE
-3283589120,3283589791,DK
-3283589792,3283589823,DE
-3283589824,3283589839,EU
-3283589840,3283589887,DE
-3283589888,3283590143,DK
-3283590144,3283590223,SE
-3283590224,3283590271,EU
-3283590272,3283590319,SE
-3283590320,3283590335,EU
-3283590336,3283590359,SE
-3283590360,3283590367,EU
-3283590368,3283590527,SE
-3283590528,3283590543,ZA
-3283590544,3283590591,DE
-3283590592,3283590623,CH
-3283590624,3283590655,GB
-3283590656,3283590847,SE
-3283590848,3283590879,ZA
-3283590880,3283590911,DE
-3283590912,3283591167,SE
-3283591168,3283591359,DE
-3283591360,3283591367,GB
-3283591368,3283591375,ZA
-3283591376,3283591423,CH
-3283591424,3283592191,DE
-3283592192,3283592847,CH
-3283592848,3283592863,GB
-3283592864,3283592895,DE
-3283592896,3283592903,SE
-3283592904,3283592911,GB
-3283592912,3283592927,ZA
-3283592928,3283593023,CH
-3283593024,3283593055,BE
-3283593056,3283593087,IT
-3283593088,3283593215,CH
+3283563520,3283564543,GB
+3283568640,3283569663,GB
+3283576832,3283579903,DE
3283593216,3283595263,IT
-3283595264,3283595775,DE
-3283595776,3283596287,EU
-3283596288,3283598127,GB
-3283598128,3283598143,EU
-3283598144,3283598175,DE
-3283598176,3283598207,EU
-3283598208,3283598335,DE
-3283598336,3283598639,GB
-3283598640,3283598655,CH
-3283598656,3283598687,IE
-3283598688,3283598719,SE
-3283598720,3283598735,DE
-3283598736,3283598743,DK
-3283598744,3283598847,DE
-3283598848,3283598879,GB
-3283598880,3283598911,CH
-3283598912,3283598975,GB
-3283598976,3283599103,DK
-3283599104,3283599295,GB
-3283599296,3283599311,DE
-3283599312,3283599327,NL
-3283599328,3283599359,GB
-3283599360,3283599615,SE
-3283599616,3283599871,IE
-3283599872,3283600527,ZA
-3283600528,3283600543,FR
-3283600544,3283600575,DE
-3283600576,3283600607,IT
-3283600608,3283600639,EU
-3283600640,3283600671,ZA
-3283600672,3283600703,DE
-3283600704,3283600767,IT
-3283600768,3283600895,ZA
-3283600896,3283601343,AT
-3283601344,3283601375,IT
-3283601376,3283601391,IE
-3283601392,3283601399,NL
-3283601400,3283601919,AT
-3283601920,3283602239,ZA
-3283602240,3283602271,GB
-3283602272,3283602287,IT
-3283602288,3283602303,ZA
-3283602304,3283602367,GB
-3283602368,3283602431,BE
-3283602432,3283602943,ZA
-3283602944,3283603007,CH
-3283603008,3283603071,IT
-3283603072,3283603199,CH
-3283603200,3283603455,EU
-3283603456,3283604479,GB
-3283604480,3283604735,EU
-3283604736,3283605503,GB
-3283605504,3283606783,DE
-3283606784,3283607359,BE
-3283607360,3283607423,NO
-3283607424,3283607551,AT
-3283607552,3283608575,BE
-3283608576,3283608831,DE
-3283608832,3283608895,EU
-3283608896,3283608959,DE
-3283608960,3283609087,IT
-3283609088,3283610783,DE
-3283610784,3283610815,CH
-3283610816,3283610879,TR
-3283610880,3283611903,DE
-3283611904,3283613247,IT
-3283613248,3283613311,DE
-3283613312,3283613695,IT
-3283613696,3283614079,CH
-3283614080,3283614207,FR
-3283614208,3283614975,CH
-3283614976,3283615231,EU
-3283615232,3283615743,CH
3283615744,3283623935,HU
3283623936,3283632127,DK
3283632128,3283632639,NL
@@ -133928,101 +68541,20 @@
3283635712,3283636223,RU
3283636224,3283636735,UA
3283636736,3283637759,PL
-3283637760,3283638271,UA
3283638272,3283638783,PL
3283638784,3283639295,RU
3283639296,3283639807,CH
3283639808,3283640319,DE
3283640320,3283648511,DK
-3283648512,3283649023,BE
-3283649024,3283649535,GB
-3283649536,3283649791,DE
-3283649792,3283650047,FR
-3283650048,3283650559,DE
-3283650560,3283650687,SE
-3283650688,3283650815,CH
-3283650816,3283650879,SE
-3283650880,3283650911,GB
-3283650912,3283650927,SE
+3283648512,3283650927,BE
3283650928,3283650943,GB
-3283650944,3283650959,RU
-3283650960,3283650975,CH
-3283650976,3283651071,GB
-3283651072,3283651135,IT
-3283651136,3283651167,BE
-3283651168,3283651183,ES
-3283651184,3283651199,BE
-3283651200,3283651263,HU
-3283651264,3283651327,ZA
-3283651328,3283651423,BE
-3283651424,3283651439,DE
-3283651440,3283651463,BE
-3283651464,3283651471,DE
-3283651472,3283651487,BE
-3283651488,3283651519,FR
-3283651520,3283651583,IL
-3283651584,3283651591,GB
-3283651592,3283651599,BE
-3283651600,3283651615,DE
-3283651616,3283651647,BE
-3283651648,3283651663,SE
-3283651664,3283651671,RO
-3283651672,3283651687,BE
-3283651688,3283651695,IT
-3283651696,3283651711,GB
-3283651712,3283651727,CH
-3283651728,3283651735,FR
-3283651736,3283651743,CH
-3283651744,3283651775,FR
-3283651776,3283651839,SE
-3283651840,3283651967,NL
-3283651968,3283652031,DK
-3283652032,3283652063,DE
-3283652064,3283652071,BE
-3283652072,3283652079,GB
-3283652080,3283652095,BE
-3283652096,3283652351,GB
-3283652352,3283652479,IT
-3283652480,3283652519,BE
-3283652520,3283652527,SE
-3283652528,3283652543,BE
-3283652544,3283652575,FR
-3283652576,3283652607,DE
-3283652608,3283652863,NO
-3283652864,3283653247,BE
-3283653248,3283653311,NO
-3283653312,3283653503,BE
-3283653504,3283653631,GB
-3283653632,3283653887,FR
-3283653888,3283654015,SE
-3283654016,3283654143,FR
-3283654144,3283654399,DE
-3283654400,3283654655,CH
-3283654656,3283654911,DK
-3283654912,3283655039,BE
-3283655040,3283655167,DK
-3283655168,3283655295,DE
-3283655296,3283655423,BE
-3283655424,3283655679,FR
-3283655680,3283655935,ES
-3283655936,3283656191,ZA
-3283656192,3283656223,GB
-3283656224,3283656255,BE
-3283656256,3283656271,GB
-3283656272,3283656303,BE
-3283656304,3283656311,GB
-3283656312,3283656447,BE
-3283656448,3283656559,ES
-3283656560,3283656575,FR
-3283656576,3283656591,BE
-3283656592,3283656599,FR
-3283656600,3283656703,BE
+3283650944,3283650975,BE
+3283650976,3283651007,GB
+3283651008,3283656703,BE
3283656704,3283664895,HU
3283664896,3283673087,UA
3283673088,3283681279,GB
-3283681280,3283729023,DE
-3283729024,3283729151,US
-3283729152,3283746815,DE
+3283681280,3283746815,DE
3283746816,3283812351,CH
3283812352,3283877887,PL
3283877888,3283943423,GB
@@ -134030,7 +68562,8 @@
3283944448,3283945471,AT
3283945472,3283946495,UA
3283946496,3283947519,GB
-3283947520,3283948543,UA
+3283947520,3283947775,UA
+3283947776,3283948543,RU
3283948544,3283949567,NL
3283949568,3283950591,SE
3283950592,3283951615,KZ
@@ -134064,24 +68597,23 @@
3283977728,3283978751,RU
3283978752,3283979263,RO
3283979264,3283979775,IL
-3283979776,3283980287,EU
+3283979776,3283980287,NO
3283980288,3283980799,RO
3283980800,3283981823,CH
-3283981824,3283983359,RO
+3283981824,3283982335,RO
+3283982848,3283983359,RO
3283983360,3283983871,CY
3283983872,3283984383,GB
3283984384,3283984895,SE
3283984896,3283985407,GR
-3283985408,3283985919,RO
3283985920,3283986431,AT
-3283986432,3283986943,RU
3283986944,3283987455,AT
3283987456,3283987967,GB
-3283987968,3283988991,RO
+3283988480,3283988991,RO
3283988992,3283989503,FR
3283989504,3283990015,RU
3283990016,3283990527,SE
-3283990528,3283991551,RO
+3283991040,3283991551,RO
3283991552,3283992063,SE
3283992064,3283992575,RO
3283992576,3283993087,IL
@@ -134134,7 +68666,7 @@
3284014336,3284014591,IT
3284014592,3284014847,GB
3284014848,3284015103,IL
-3284015104,3284015359,PL
+3284015104,3284015359,US
3284015360,3284015615,DK
3284015616,3284015871,AT
3284015872,3284016127,FR
@@ -134142,23 +68674,9 @@
3284016384,3284016639,CH
3284016640,3284017151,DK
3284017152,3284025343,GR
-3284025344,3284025439,GB
-3284025440,3284025471,DE
-3284025472,3284027327,GB
-3284027328,3284027343,DE
-3284027344,3284028415,GB
-3284028416,3284028671,DE
-3284028672,3284028879,GB
-3284028880,3284028895,DE
-3284028896,3284031743,GB
-3284031744,3284031999,DE
-3284032000,3284032063,GB
-3284032064,3284032095,DE
-3284032096,3284032159,GB
-3284032160,3284032191,DE
-3284032192,3284032671,GB
-3284032672,3284032703,DE
-3284032704,3284033535,GB
+3284025344,3284030479,GB
+3284030480,3284030495,FR
+3284030496,3284033535,GB
3284033536,3284041727,RU
3284041728,3284041983,DK
3284041984,3284042239,SI
@@ -134170,24 +68688,19 @@
3284043520,3284043775,DE
3284043776,3284044031,HR
3284044032,3284044287,FR
-3284044288,3284044799,DE
+3284044288,3284044543,DE
3284044800,3284045055,CZ
-3284045056,3284045311,EE
+3284045056,3284045311,LT
3284045312,3284045567,DE
3284045568,3284045823,AT
-3284045824,3284046079,UA
3284046080,3284046335,DE
3284046336,3284046591,NL
3284046592,3284046847,SE
3284046848,3284047103,DE
-3284047104,3284047359,DK
-3284047360,3284047615,EU
3284047616,3284047871,NL
3284047872,3284048127,UA
3284048128,3284048383,DK
-3284048384,3284048639,GB
3284048640,3284049151,FR
-3284049152,3284049407,UA
3284049408,3284049663,SI
3284049664,3284049919,RO
3284049920,3284058111,CH
@@ -134203,7 +68716,6 @@
3284078592,3284079103,NL
3284079104,3284079615,RU
3284079616,3284080127,DE
-3284080128,3284080639,BE
3284080640,3284081151,UA
3284081152,3284081663,DE
3284081664,3284082175,IE
@@ -134241,11 +68753,9 @@
3284099328,3284099583,HU
3284099584,3284100095,GR
3284100096,3284100607,AM
-3284100608,3284101119,US
3284101120,3284101631,UA
3284101632,3284102143,GB
-3284102144,3284102399,DK
-3284102400,3284102655,EU
+3284102144,3284102655,DK
3284102656,3284103167,AT
3284103168,3284103679,NL
3284103680,3284104191,DE
@@ -134289,7 +68799,6 @@
3284124672,3284125183,DE
3284125696,3284126207,UA
3284126208,3284127231,CZ
-3284127232,3284127743,HK
3284127744,3284128255,RU
3284128256,3284128767,GB
3284128768,3284129279,SE
@@ -134313,16 +68822,12 @@
3284138496,3284139007,RU
3284139008,3284140031,AT
3284140032,3284205567,DK
-3284205568,3284206335,NL
-3284206336,3284206591,EU
-3284206592,3284257535,NL
+3284205568,3284257535,NL
3284257536,3284257791,GB
3284257792,3284271103,NL
3284271104,3284402175,GB
3284402176,3284467711,SE
-3284467712,3284531775,FI
-3284531776,3284531779,NL
-3284531780,3284533247,FI
+3284467712,3284533247,FI
3284533248,3284598783,SE
3284598784,3284664319,HU
3284664320,3284672511,GB
@@ -134341,12 +68846,10 @@
3284686336,3284686847,RO
3284686848,3284687359,PL
3284687360,3284687871,UA
-3284687872,3284688383,NG
+3284687872,3284688383,IL
3284688384,3284688895,IT
3284688896,3284697087,FR
-3284697088,3284697215,GB
-3284697216,3284697279,FR
-3284697280,3284705279,GB
+3284697088,3284705279,GB
3284705280,3284713471,FR
3284713472,3284713727,DE
3284713728,3284713983,GR
@@ -134357,9 +68860,7 @@
3284715008,3284715263,GB
3284715264,3284715519,PL
3284715520,3284715775,SI
-3284715776,3284715816,BE
-3284715817,3284715817,EU
-3284715818,3284716031,BE
+3284715776,3284716031,BE
3284716032,3284716287,IT
3284716288,3284716543,RU
3284716544,3284716799,GR
@@ -134372,12 +68873,10 @@
3284718592,3284718847,PL
3284718848,3284719103,RU
3284719104,3284719359,PL
-3284719360,3284719615,DE
3284719616,3284719871,RU
3284719872,3284720127,FR
3284720128,3284720383,CH
3284720384,3284720895,SE
-3284720896,3284721151,UA
3284721152,3284721407,TR
3284721408,3284721663,NL
3284721664,3284722175,BE
@@ -134402,38 +68901,16 @@
3284811776,3284819967,KE
3284819968,3284828159,GB
3284828160,3284844543,AT
-3284844544,3284860927,CH
-3284860928,3284863743,DE
-3284863744,3284863999,FR
-3284864000,3284868863,DE
-3284868864,3284869375,FR
-3284869376,3284869631,DE
-3284869632,3284869887,IT
-3284869888,3284872959,DE
-3284872960,3284873471,IT
-3284873472,3284913919,DE
-3284913920,3284914175,GB
-3284914176,3284926463,DE
+3284844544,3284856063,CH
+3284856064,3284856191,DE
+3284856192,3284860927,CH
+3284860928,3284926463,DE
3284926464,3284991999,NO
3284992000,3285057535,PL
3285057536,3285065727,IT
3285065728,3285073919,RU
-3285073920,3285074687,GB
-3285074688,3285076479,NL
-3285076480,3285076735,EU
-3285076736,3285076767,BE
-3285076768,3285078111,NL
-3285078112,3285078143,GB
-3285078144,3285078175,NL
-3285078176,3285078191,GB
-3285078192,3285079423,NL
-3285079424,3285079551,DE
-3285079552,3285079967,NL
-3285079968,3285079999,DE
-3285080000,3285082111,NL
+3285073920,3285082111,NL
3285082112,3285084159,AT
-3285084160,3285085183,LU
-3285085184,3285086207,GB
3285086208,3285088255,PL
3285088256,3285088511,RO
3285088512,3285088767,DK
@@ -134443,7 +68920,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
@@ -134455,14 +68932,8 @@
3285121024,3285121535,SE
3285121536,3285122047,CY
3285122048,3285123071,RU
-3285123072,3285158639,BE
-3285158640,3285158647,FR
-3285158648,3285164367,BE
-3285164368,3285164375,NL
-3285164376,3285188607,BE
-3285188608,3285265999,RU
-3285266000,3285266007,CH
-3285266008,3285319679,RU
+3285123072,3285188607,BE
+3285188608,3285319679,RU
3285319680,3285320191,HU
3285320192,3285320703,RU
3285320704,3285321215,RO
@@ -134543,1206 +69014,54 @@
3285446656,3285447679,UA
3285447680,3285449727,RU
3285449728,3285450751,UA
-3285450752,3285453055,GB
-3285453056,3285453119,EU
-3285453120,3285454847,GB
-3285454848,3285455103,EU
-3285455104,3285455743,DE
-3285455744,3285455871,EU
-3285455872,3285455887,DE
-3285455888,3285455895,EU
-3285455896,3285455903,GB
-3285455904,3285455935,EU
-3285455936,3285456255,DE
-3285456256,3285456287,EU
-3285456288,3285456351,DE
-3285456352,3285456383,EU
-3285456384,3285456639,DE
-3285456640,3285456703,DK
-3285456704,3285456735,EU
-3285456736,3285456767,DK
-3285456768,3285456831,EU
-3285456832,3285456871,DK
-3285456872,3285456879,EU
-3285456880,3285456895,DK
-3285456896,3285456959,GB
-3285456960,3285456975,EU
-3285456976,3285457151,GB
-3285457152,3285457167,EU
-3285457168,3285457183,SE
-3285457184,3285457231,EU
-3285457232,3285457247,SE
-3285457248,3285457279,EU
-3285457280,3285457407,SE
-3285457408,3285457663,GB
-3285457664,3285457759,IT
-3285457760,3285457791,EU
-3285457792,3285457919,IT
-3285457920,3285458175,GB
-3285458176,3285458431,EU
-3285458432,3285458943,GB
-3285458944,3285458975,DK
-3285458976,3285459007,EU
-3285459008,3285459079,DK
-3285459080,3285459119,EU
-3285459120,3285459327,DK
-3285459328,3285459391,EU
-3285459392,3285459535,DK
-3285459536,3285459543,EU
-3285459544,3285459711,DK
-3285459712,3285459967,NO
-3285459968,3285460479,FI
-3285460480,3285460991,DK
-3285460992,3285461031,NL
-3285461032,3285461055,EU
-3285461056,3285461111,NL
-3285461112,3285461119,EU
-3285461120,3285461263,NL
-3285461264,3285461279,BE
-3285461280,3285461311,EU
-3285461312,3285461375,CH
-3285461376,3285461415,NL
-3285461416,3285461423,EU
-3285461424,3285461447,NL
-3285461448,3285461455,DE
-3285461456,3285461535,NL
-3285461536,3285461567,EU
-3285461568,3285461791,NL
-3285461792,3285461799,EU
-3285461800,3285461807,NL
-3285461808,3285461855,EU
-3285461856,3285461877,NL
-3285461878,3285461879,EU
-3285461880,3285461967,NL
-3285461968,3285461975,EU
-3285461976,3285461991,NL
-3285461992,3285461999,GB
-3285462000,3285462007,NL
-3285462008,3285462015,EU
-3285462016,3285462207,DE
-3285462208,3285462223,GB
-3285462224,3285462383,DE
-3285462384,3285462399,EU
-3285462400,3285462527,DE
-3285462528,3285462543,EU
-3285462544,3285462655,DE
-3285462656,3285462783,EU
-3285462784,3285462831,AT
-3285462832,3285462951,EU
-3285462952,3285462959,AT
-3285462960,3285463007,EU
-3285463008,3285463039,AT
-3285463040,3285463087,LU
-3285463088,3285463103,EU
-3285463104,3285463143,LU
-3285463144,3285463295,EU
-3285463296,3285463311,FR
-3285463312,3285463319,BE
-3285463320,3285463359,EU
-3285463360,3285463455,BE
-3285463456,3285463487,EU
-3285463488,3285463503,GB
-3285463504,3285463519,EU
-3285463520,3285463615,BE
-3285463616,3285463647,FR
-3285463648,3285463663,BE
-3285463664,3285463671,EU
-3285463672,3285463743,BE
-3285463744,3285463775,EU
-3285463776,3285463807,BE
-3285463808,3285464071,EU
-3285464072,3285464095,BE
-3285464096,3285464127,GB
-3285464128,3285464319,EU
-3285464320,3285464383,BE
-3285464384,3285464415,GB
-3285464416,3285464431,BE
-3285464432,3285464447,DE
-3285464448,3285465087,BE
-3285465088,3285465103,DK
-3285465104,3285465151,EU
-3285465152,3285465175,DK
-3285465176,3285465215,EU
-3285465216,3285465231,DK
-3285465232,3285465247,EU
-3285465248,3285465343,DK
-3285465344,3285465631,EU
-3285465632,3285465727,DE
-3285465728,3285465855,EU
-3285465856,3285465951,DE
-3285465952,3285465983,EU
-3285465984,3285466367,DE
-3285466368,3285466447,CH
-3285466448,3285466455,EU
-3285466456,3285466463,CH
-3285466464,3285466527,EU
-3285466528,3285466559,CH
-3285466560,3285466623,EU
-3285466624,3285466879,AT
-3285466880,3285466895,BG
-3285466896,3285466911,EU
-3285466912,3285466959,BG
-3285466960,3285466975,EU
-3285466976,3285467007,BG
-3285467008,3285467015,EU
-3285467016,3285467023,BG
-3285467024,3285467135,EU
-3285467136,3285467391,DE
-3285467392,3285467663,EU
-3285467664,3285467679,DE
-3285467680,3285467711,EU
-3285467712,3285467823,DE
-3285467824,3285467831,EU
-3285467832,3285467839,DE
-3285467840,3285467871,EU
-3285467872,3285467903,DE
-3285467904,3285467935,EU
-3285467936,3285467951,DE
-3285467952,3285467959,GB
-3285467960,3285467967,EU
-3285467968,3285468511,DE
-3285468512,3285468575,EU
-3285468576,3285468599,DE
-3285468600,3285468607,EU
-3285468608,3285468615,DE
-3285468616,3285468623,EU
-3285468624,3285469695,DE
-3285469696,3285469727,EU
-3285469728,3285470975,DE
-3285470976,3285471231,IN
-3285471232,3285471743,DE
-3285471744,3285471807,EU
-3285471808,3285471871,DE
-3285471872,3285471935,EU
-3285471936,3285472127,DE
-3285472128,3285472159,EU
-3285472160,3285472175,DE
-3285472176,3285472183,EU
-3285472184,3285472223,DE
-3285472224,3285472255,EU
-3285472256,3285472511,US
-3285472512,3285473315,EU
-3285473316,3285473411,DE
-3285473412,3285473415,EU
-3285473416,3285473423,DE
-3285473424,3285473439,EU
-3285473440,3285473583,DE
-3285473584,3285473591,GB
-3285473592,3285473599,DE
-3285473600,3285473631,EU
-3285473632,3285473663,DE
-3285473664,3285473791,EU
-3285473792,3285474047,DE
-3285474048,3285474095,EU
-3285474096,3285474111,DE
-3285474112,3285474175,EU
-3285474176,3285474271,DE
-3285474272,3285474303,EU
-3285474304,3285474319,DE
-3285474320,3285474335,EU
-3285474336,3285474367,DE
-3285474368,3285474383,EU
-3285474384,3285474559,DE
-3285474560,3285474815,EU
-3285474816,3285475135,DE
-3285475136,3285475143,EU
-3285475144,3285475167,DE
-3285475168,3285475199,EU
-3285475200,3285475207,DE
-3285475208,3285475215,EU
-3285475216,3285475327,DE
-3285475328,3285475623,EU
-3285475624,3285475647,AT
-3285475648,3285475703,EU
-3285475704,3285475711,AT
-3285475712,3285475775,EU
-3285475776,3285475783,AT
-3285475784,3285475807,EU
-3285475808,3285475823,AT
-3285475824,3285475903,EU
-3285475904,3285475951,AT
-3285475952,3285475967,EU
-3285475968,3285476031,AT
-3285476032,3285476351,EU
-3285476352,3285476607,DE
-3285476608,3285476735,EU
-3285476736,3285476863,GB
-3285476864,3285476895,AT
-3285476896,3285477023,EU
-3285477024,3285477087,AT
-3285477088,3285477151,EU
-3285477152,3285477343,IT
-3285477344,3285477359,EU
-3285477360,3285477375,IT
-3285477376,3285477919,FR
-3285477920,3285477951,EU
-3285477952,3285477983,FR
-3285477984,3285477999,EU
-3285478000,3285478655,FR
-3285478656,3285478911,EU
-3285478912,3285479391,FR
-3285479392,3285479399,EU
-3285479400,3285479407,GB
-3285479408,3285479423,FR
-3285479424,3285479807,CH
-3285479808,3285480447,EU
-3285480448,3285480575,CH
-3285480576,3285480719,EU
-3285480720,3285480767,CH
-3285480768,3285480775,EU
-3285480776,3285480895,CH
-3285480896,3285480959,EU
+3285451456,3285451471,GB
+3285451608,3285451615,GB
+3285452496,3285452511,GB
+3285453440,3285453567,GB
+3285457072,3285457079,GB
+3285461184,3285461215,NL
+3285472256,3285472271,US
+3285472272,3285472287,DE
+3285472288,3285472511,US
3285480960,3285481215,CH
-3285481216,3285481471,EU
-3285481472,3285481727,IT
-3285481728,3285481743,CH
-3285481744,3285481751,EU
-3285481752,3285481791,CH
-3285481792,3285481983,EU
-3285481984,3285481999,FR
-3285482000,3285482007,CY
-3285482008,3285482087,FR
-3285482088,3285482095,EU
-3285482096,3285482239,FR
-3285482240,3285482495,EU
-3285482496,3285482527,CH
-3285482528,3285482751,EU
-3285482752,3285482783,CH
-3285482784,3285483007,EU
-3285483008,3285483519,CH
-3285483520,3285484543,EU
-3285484544,3285485055,IE
-3285485056,3285485103,EU
-3285485104,3285485119,SK
-3285485120,3285485639,EU
-3285485640,3285485647,SK
-3285485648,3285485727,EU
-3285485728,3285485743,SK
-3285485744,3285485751,EU
-3285485752,3285485759,SK
-3285485760,3285485799,EU
-3285485800,3285485815,SK
-3285485816,3285486591,EU
-3285486592,3285487103,IT
-3285487104,3285487359,HU
-3285487360,3285487375,NL
-3285487376,3285487423,EU
-3285487424,3285487487,GB
-3285487488,3285487615,EU
-3285487616,3285487679,NL
-3285487680,3285487743,EU
-3285487744,3285488127,NL
-3285488128,3285488639,EU
-3285488640,3285489663,GB
-3285489664,3285490175,EU
-3285490176,3285490319,RU
-3285490320,3285490335,EU
-3285490336,3285490463,RU
-3285490464,3285490495,EU
-3285490496,3285490519,RU
-3285490520,3285490527,LT
-3285490528,3285490535,LV
-3285490536,3285490543,RU
-3285490544,3285490559,EU
-3285490560,3285490687,RU
-3285490688,3285490943,EU
-3285490944,3285491007,RU
-3285491008,3285491455,EU
-3285491456,3285491711,RU
-3285491712,3285492223,EU
-3285492224,3285492479,FR
-3285492480,3285492687,GB
-3285492688,3285492695,EU
-3285492696,3285492735,GB
-3285492736,3285493759,EU
-3285493760,3285493775,ES
-3285493776,3285493791,EU
-3285493792,3285493887,ES
-3285493888,3285493951,EU
-3285493952,3285493983,ES
-3285493984,3285493999,EU
-3285494000,3285494015,ES
-3285494016,3285494079,IT
-3285494080,3285494111,EU
-3285494112,3285494783,IT
-3285494784,3285495807,EU
-3285495808,3285496319,DE
-3285496320,3285496383,ES
-3285496384,3285496447,EU
-3285496448,3285496471,ES
-3285496472,3285496495,EU
-3285496496,3285496527,FR
-3285496528,3285496543,ES
-3285496544,3285496575,FR
-3285496576,3285496607,EU
-3285496608,3285497855,DE
-3285497856,3285497887,EU
-3285497888,3285498079,DE
-3285498080,3285498095,EU
-3285498096,3285498111,DE
-3285498112,3285498367,IT
-3285498368,3285498623,DE
-3285498624,3285498879,CH
-3285498880,3285499391,EU
-3285499392,3285499455,FR
-3285499456,3285499487,EU
-3285499488,3285499647,FR
-3285499648,3285499903,DE
-3285499904,3285500159,CZ
-3285500160,3285500287,EU
-3285500288,3285500415,CZ
-3285500416,3285500927,GB
-3285500928,3285501183,DK
-3285501184,3285501327,CZ
-3285501328,3285501335,EU
-3285501336,3285501343,CZ
-3285501344,3285501375,GB
-3285501376,3285501407,CZ
-3285501408,3285501439,EU
-3285501440,3285501567,CZ
-3285501568,3285501695,EU
-3285501696,3285501823,GB
-3285501824,3285501887,CZ
-3285501888,3285501951,GB
-3285501952,3285502207,EU
-3285502208,3285502463,CZ
-3285502464,3285502495,IL
-3285502496,3285502503,CY
-3285502504,3285502511,IL
-3285502512,3285502527,CY
-3285502528,3285502591,BY
-3285502592,3285502655,GB
-3285502656,3285502719,IL
-3285502720,3285503391,EU
-3285503392,3285503423,CZ
-3285503424,3285503487,EU
-3285503488,3285503551,ES
-3285503552,3285503743,EU
-3285503744,3285503999,FI
-3285504000,3285504511,EU
-3285504512,3285504607,CZ
-3285504608,3285505215,EU
-3285505216,3285505279,CZ
-3285505280,3285505439,EU
-3285505440,3285505471,CZ
-3285505472,3285506047,EU
-3285506048,3285506079,CZ
-3285506080,3285507327,EU
-3285507328,3285507391,GR
-3285507392,3285507663,EU
-3285507664,3285507711,CZ
-3285507712,3285507839,EU
-3285507840,3285508095,CZ
-3285508096,3285508607,DE
-3285508608,3285508623,RU
-3285508624,3285508639,EU
-3285508640,3285508671,RU
-3285508672,3285508735,EU
-3285508736,3285508863,RU
-3285508864,3285508871,EU
-3285508872,3285508927,PT
-3285508928,3285509119,EU
-3285509120,3285509247,SE
-3285509248,3285509279,EU
-3285509280,3285509311,SE
-3285509312,3285510015,EU
-3285510016,3285510047,HU
-3285510048,3285510111,EU
-3285510112,3285510143,HU
+3285501696,3285501951,GB
3285510144,3285512191,GB
-3285512192,3285512319,GR
-3285512320,3285512383,EU
-3285512384,3285512511,GR
-3285512512,3285512575,EU
-3285512576,3285512719,GR
-3285512720,3285512767,EU
-3285512768,3285512831,GR
-3285512832,3285513215,EU
-3285513216,3285513223,GB
-3285513224,3285513231,EU
-3285513232,3285513247,GR
-3285513248,3285513279,EU
-3285513280,3285513343,GR
-3285513344,3285513727,EU
-3285513728,3285514239,GR
-3285514240,3285515263,EU
-3285515264,3285515519,AT
-3285515520,3285515791,EU
-3285515792,3285515803,GR
-3285515804,3285515807,EU
-3285515808,3285515815,GR
-3285515816,3285516159,EU
-3285516160,3285516191,GR
-3285516192,3285516223,EU
-3285516224,3285516287,GR
-3285516288,3285516543,DK
-3285516544,3285516671,NO
-3285516672,3285516687,BE
+3285516288,3285516687,BE
3285516688,3285516691,NL
-3285516692,3285516695,IT
-3285516696,3285516703,NL
-3285516704,3285516719,GB
-3285516720,3285516735,IL
-3285516736,3285516799,DE
-3285516800,3285516927,GB
-3285516928,3285516991,PL
-3285516992,3285517023,BE
-3285517024,3285517055,SE
-3285517056,3285517215,GB
-3285517216,3285517247,AT
-3285517248,3285518335,GB
-3285518336,3285518351,NL
-3285518352,3285518367,ES
-3285518368,3285518463,BE
-3285518464,3285518591,ES
-3285518592,3285518847,CH
-3285518848,3285519103,BE
-3285519104,3285519359,FR
-3285519360,3285519615,DE
-3285519616,3285520127,GB
-3285520128,3285520383,NL
-3285520384,3285520527,GB
-3285520528,3285520543,CH
-3285520544,3285520575,GB
-3285520576,3285520639,DE
-3285520640,3285520767,NL
-3285520768,3285520895,GB
-3285520896,3285521167,BE
-3285521168,3285521407,GB
-3285521408,3285521695,BE
-3285521696,3285521791,GB
-3285521792,3285522175,BE
-3285522176,3285523071,GB
-3285523072,3285523079,BE
-3285523080,3285523087,ES
-3285523088,3285523199,CH
-3285523200,3285523231,ZA
-3285523232,3285523327,BE
-3285523328,3285523335,FI
-3285523336,3285523359,BE
-3285523360,3285523391,GB
-3285523392,3285523711,FR
-3285523712,3285523967,CH
-3285523968,3285524063,GB
-3285524064,3285524095,LU
-3285524096,3285524159,ZA
-3285524160,3285524175,GB
-3285524176,3285524191,CH
-3285524192,3285524223,BE
+3285516692,3285517311,BE
+3285517312,3285518335,GB
+3285518336,3285524223,BE
3285524224,3285524351,GB
-3285524352,3285524479,BE
-3285524480,3285524735,DK
-3285524736,3285524863,GB
-3285524864,3285524895,BE
-3285524896,3285524927,ES
-3285524928,3285524991,GB
-3285524992,3285525247,BE
-3285525248,3285525503,CH
-3285525504,3285526015,BE
-3285526016,3285526023,IL
-3285526024,3285526035,BE
-3285526036,3285526039,FR
-3285526040,3285526047,BE
-3285526048,3285526079,CZ
-3285526080,3285526143,BE
-3285526144,3285526175,HU
-3285526176,3285526383,BE
-3285526384,3285526399,PT
-3285526400,3285526527,CH
-3285526528,3285526783,ES
-3285526784,3285526815,CH
-3285526816,3285526847,BE
-3285526848,3285526911,CH
-3285526912,3285527295,GB
-3285527296,3285527423,BE
-3285527424,3285527427,GB
-3285527428,3285527431,BE
-3285527432,3285527439,FR
-3285527440,3285527455,LU
+3285524352,3285527455,BE
3285527456,3285527487,IL
-3285527488,3285527495,BE
-3285527496,3285527503,DE
-3285527504,3285527519,JP
-3285527520,3285527551,BE
-3285527552,3285527615,IL
-3285527616,3285527679,GB
-3285527680,3285527807,BE
-3285527808,3285527811,GB
-3285527812,3285527815,PL
-3285527816,3285527855,BE
-3285527856,3285527871,FR
-3285527872,3285527967,BE
-3285527968,3285527999,DE
-3285528000,3285528319,BE
-3285528320,3285528447,DE
-3285528448,3285528575,FR
-3285528576,3285528799,BE
-3285528800,3285528831,GB
-3285528832,3285528847,BE
-3285528848,3285528863,ZA
-3285528864,3285528883,BE
-3285528884,3285528887,FR
-3285528888,3285528895,BE
-3285528896,3285528911,GB
-3285528912,3285528931,BE
-3285528932,3285528935,FR
-3285528936,3285528943,BE
-3285528944,3285529071,GB
-3285529072,3285529151,BE
-3285529152,3285529183,DE
-3285529184,3285529199,NL
+3285527488,3285529199,BE
3285529200,3285529215,IL
-3285529216,3285529247,CH
-3285529248,3285529263,GB
-3285529264,3285529343,BE
-3285529344,3285529599,IT
-3285529600,3285529631,NO
-3285529632,3285529663,IE
-3285529664,3285529679,LI
-3285529680,3285529687,FI
-3285529688,3285529695,IT
-3285529696,3285529727,BE
+3285529216,3285529727,BE
3285529728,3285529855,GB
-3285529856,3285529951,LU
-3285529952,3285529983,GR
-3285529984,3285529999,CZ
-3285530000,3285530143,BE
-3285530144,3285530175,GB
-3285530176,3285530183,NL
-3285530184,3285530215,BE
-3285530216,3285530223,GB
-3285530224,3285530271,FR
-3285530272,3285530399,BE
-3285530400,3285530431,NL
-3285530432,3285530463,IT
-3285530464,3285530495,DE
-3285530496,3285530559,AT
-3285530560,3285530575,BE
-3285530576,3285530583,GB
-3285530584,3285530591,BE
-3285530592,3285530607,GB
-3285530608,3285530655,BE
-3285530656,3285530687,ZA
-3285530688,3285530719,GB
-3285530720,3285530723,BE
-3285530724,3285530727,GB
-3285530728,3285530735,DE
-3285530736,3285530739,GB
-3285530740,3285530743,BE
-3285530744,3285530751,GB
-3285530752,3285530767,IT
-3285530768,3285530783,DE
-3285530784,3285530815,BE
-3285530816,3285530831,GB
-3285530832,3285530879,BE
-3285530880,3285530911,CH
-3285530912,3285530975,GB
-3285530976,3285530983,BE
-3285530984,3285530991,IE
-3285530992,3285531007,GB
-3285531008,3285531023,FR
-3285531024,3285531039,LU
-3285531040,3285531071,ES
-3285531072,3285531103,NL
-3285531104,3285531119,FR
-3285531120,3285531263,BE
-3285531264,3285531311,GB
-3285531312,3285531327,DK
-3285531328,3285531343,BE
-3285531344,3285531351,GB
-3285531352,3285531355,FR
-3285531356,3285531359,ES
-3285531360,3285531367,BE
-3285531368,3285531375,DE
-3285531376,3285531383,BE
-3285531384,3285531391,DE
-3285531392,3285531423,BE
-3285531424,3285531455,DE
-3285531456,3285531495,BE
-3285531496,3285531503,NL
-3285531504,3285531519,FR
-3285531520,3285531535,BE
-3285531536,3285531551,DE
-3285531552,3285531567,IL
-3285531568,3285531615,BE
-3285531616,3285531647,NL
-3285531648,3285531903,BE
-3285531904,3285532159,GB
-3285532160,3285532223,BE
-3285532224,3285532231,ES
-3285532232,3285532415,BE
-3285532416,3285532687,IT
-3285532688,3285532703,DE
-3285532704,3285532711,BE
-3285532712,3285532719,RU
-3285532720,3285532735,IT
-3285532736,3285532799,CH
-3285532800,3285532831,DE
-3285532832,3285532847,FI
-3285532848,3285532863,IT
-3285532864,3285532895,BE
-3285532896,3285532959,IT
-3285532960,3285533039,BE
-3285533040,3285533047,NL
-3285533048,3285533055,BE
-3285533056,3285533059,NL
-3285533060,3285533087,BE
-3285533088,3285533103,IT
-3285533104,3285533119,LU
-3285533120,3285533127,BE
-3285533128,3285533135,SE
-3285533136,3285533151,GB
-3285533152,3285533183,FR
-3285533184,3285533311,IT
-3285533312,3285533343,SE
-3285533344,3285533367,BE
-3285533368,3285533375,CH
-3285533376,3285533471,GB
-3285533472,3285533503,BE
+3285529856,3285533503,BE
3285533504,3285533519,GB
-3285533520,3285533535,SE
-3285533536,3285533543,BE
-3285533544,3285533551,DE
+3285533520,3285533551,BE
3285533552,3285533567,GB
-3285533568,3285533951,IT
-3285533952,3285534079,IL
-3285534080,3285534095,IT
-3285534096,3285534111,TR
-3285534112,3285534143,BE
-3285534144,3285534207,IT
-3285534208,3285534463,PT
-3285534464,3285534479,NL
-3285534480,3285534527,BE
-3285534528,3285534559,FR
-3285534560,3285534591,IT
-3285534592,3285534627,GB
-3285534628,3285534639,BE
-3285534640,3285534655,GB
-3285534656,3285534719,IT
-3285534720,3285534751,GB
-3285534752,3285534767,BE
-3285534768,3285534783,GB
-3285534784,3285534799,DK
-3285534800,3285534815,ES
-3285534816,3285534831,HU
-3285534832,3285534927,IE
-3285534928,3285534943,GB
-3285534944,3285534975,BE
-3285534976,3285535103,IT
-3285535104,3285535123,BE
-3285535124,3285535127,ES
-3285535128,3285535131,BE
-3285535132,3285535135,NL
-3285535136,3285535139,FR
-3285535140,3285535143,BE
-3285535144,3285535147,GR
-3285535148,3285535151,CZ
-3285535152,3285535155,SE
-3285535156,3285535231,BE
-3285535232,3285535743,NO
-3285535744,3285535871,IT
-3285535872,3285535903,FR
-3285535904,3285535907,DK
-3285535908,3285535911,NO
-3285535912,3285535919,BE
-3285535920,3285535927,NL
-3285535928,3285535951,BE
-3285535952,3285535967,GB
-3285535968,3285535999,BE
-3285536000,3285536063,GB
-3285536064,3285536079,BE
-3285536080,3285536095,IT
-3285536096,3285536111,GB
-3285536112,3285536255,BE
-3285536256,3285536511,GB
-3285536512,3285536543,LU
-3285536544,3285536575,DE
-3285536576,3285536607,IL
-3285536608,3285536703,BE
-3285536704,3285536735,GB
-3285536736,3285536739,IT
-3285536740,3285536743,GB
-3285536744,3285536747,DE
-3285536748,3285536751,AT
-3285536752,3285536755,BE
-3285536756,3285536759,IL
-3285536760,3285536767,BE
-3285536768,3285536959,DK
-3285536960,3285536991,ES
-3285536992,3285537023,GB
-3285537024,3285537087,IL
-3285537088,3285537127,GB
-3285537128,3285537135,BE
-3285537136,3285537143,DK
-3285537144,3285537151,GB
-3285537152,3285537167,DK
-3285537168,3285537175,CH
-3285537176,3285537183,BE
-3285537184,3285537215,DE
-3285537216,3285537231,GB
-3285537232,3285537535,BE
-3285537536,3285537599,RU
-3285537600,3285537615,FR
-3285537616,3285537631,BE
-3285537632,3285537663,SE
-3285537664,3285537727,DE
-3285537728,3285537759,IT
-3285537760,3285537791,LU
-3285537792,3285537919,NL
-3285537920,3285538047,LU
-3285538048,3285538175,NL
-3285538176,3285538183,DE
-3285538184,3285538187,LU
-3285538188,3285538207,BE
-3285538208,3285538239,LU
-3285538240,3285538271,NO
-3285538272,3285538287,FI
-3285538288,3285538295,CH
-3285538296,3285538299,BE
-3285538300,3285538319,GB
-3285538320,3285538327,LU
-3285538328,3285538335,BE
-3285538336,3285538351,GB
-3285538352,3285538367,LU
-3285538368,3285538375,BE
-3285538376,3285538383,AT
-3285538384,3285538399,BE
-3285538400,3285538431,DK
-3285538432,3285538623,BE
-3285538624,3285538687,LU
-3285538688,3285538719,BE
-3285538720,3285538751,DE
-3285538752,3285538755,IT
-3285538756,3285538759,FR
-3285538760,3285538763,IE
-3285538764,3285538767,BE
-3285538768,3285538783,CZ
-3285538784,3285538815,BE
-3285538816,3285538847,CH
-3285538848,3285538879,BE
-3285538880,3285539071,ES
-3285539072,3285539327,NL
-3285539328,3285539583,BE
-3285539584,3285539711,IE
-3285539712,3285539839,GB
-3285539840,3285539967,IT
-3285539968,3285540031,GB
-3285540032,3285540095,ZA
-3285540096,3285540103,GB
-3285540104,3285540107,IT
-3285540108,3285540111,BE
-3285540112,3285540127,IL
-3285540128,3285540159,ZA
-3285540160,3285540191,FI
-3285540192,3285540207,CH
-3285540208,3285540215,IE
-3285540216,3285540219,BE
-3285540220,3285540223,ZA
-3285540224,3285540351,CZ
-3285540352,3285540415,PT
-3285540416,3285540423,ZA
-3285540424,3285540447,BE
-3285540448,3285540479,DE
-3285540480,3285540607,NL
-3285540608,3285540671,BE
-3285540672,3285540735,DE
-3285540736,3285540863,BE
-3285540864,3285540871,FR
-3285540872,3285540879,BE
-3285540880,3285541375,FR
-3285541376,3285541391,GB
-3285541392,3285541439,FR
-3285541440,3285541519,GB
-3285541520,3285541535,BE
-3285541536,3285541551,FR
-3285541552,3285541567,BE
-3285541568,3285541599,GB
-3285541600,3285541631,BE
-3285541632,3285541663,ES
-3285541664,3285541695,FR
-3285541696,3285541759,BE
-3285541760,3285541887,FR
-3285541888,3285541919,GB
-3285541920,3285541951,FR
-3285541952,3285542079,DE
-3285542080,3285542143,FR
-3285542144,3285542399,BE
-3285542400,3285542655,GB
-3285542656,3285542911,ZA
-3285542912,3285543167,IT
-3285543168,3285543423,NL
-3285543424,3285543679,SE
-3285543680,3285543743,AT
-3285543744,3285543759,FR
-3285543760,3285543775,BE
-3285543776,3285543791,IT
-3285543792,3285543795,ES
-3285543796,3285543799,BE
-3285543800,3285543807,FR
-3285543808,3285543871,NL
-3285543872,3285543935,FR
-3285543936,3285544191,BE
-3285544192,3285544255,IL
-3285544256,3285544319,DE
-3285544320,3285544335,ES
-3285544336,3285544351,NL
-3285544352,3285544383,BE
-3285544384,3285544479,FR
-3285544480,3285544511,ES
-3285544512,3285544639,FR
-3285544640,3285544703,BE
-3285544704,3285544959,FR
-3285544960,3285545215,EU
-3285545216,3285545343,BE
-3285545344,3285545379,GB
-3285545380,3285545471,BE
-3285545472,3285545727,SE
-3285545728,3285545983,FI
-3285545984,3285545999,IT
-3285546000,3285546015,BE
-3285546016,3285546063,ES
-3285546064,3285546071,IT
-3285546072,3285546111,ES
-3285546112,3285546239,AT
-3285546240,3285546367,ZA
-3285546368,3285546495,FR
-3285546496,3285546559,NL
-3285546560,3285546623,BE
-3285546624,3285546671,FR
-3285546672,3285546687,SE
+3285533568,3285536991,BE
+3285536992,3285537007,GB
+3285537008,3285546687,BE
3285546688,3285546751,GB
-3285546752,3285547007,DK
-3285547008,3285547023,AT
-3285547024,3285547039,FR
-3285547040,3285547071,AT
-3285547072,3285547135,AU
-3285547136,3285547167,RU
-3285547168,3285547199,LU
-3285547200,3285547263,SE
-3285547264,3285547519,LU
-3285547520,3285547775,NL
-3285547776,3285547903,ES
-3285547904,3285548031,BE
-3285548032,3285548287,FR
-3285548288,3285548543,DE
-3285548544,3285548607,FR
-3285548608,3285548639,LI
-3285548640,3285548647,BE
-3285548648,3285548655,LI
-3285548656,3285548735,GB
-3285548736,3285548767,BE
-3285548768,3285548799,LU
-3285548800,3285548831,IT
-3285548832,3285548839,GB
-3285548840,3285548847,IL
-3285548848,3285548959,IT
-3285548960,3285549023,FR
-3285549024,3285549039,PT
-3285549040,3285549055,FR
-3285549056,3285549183,DE
-3285549184,3285549215,BE
-3285549216,3285549247,CH
-3285549248,3285549279,DE
-3285549280,3285549311,GB
-3285549312,3285549695,DE
-3285549696,3285549719,BE
-3285549720,3285549727,GB
-3285549728,3285549735,SE
-3285549736,3285549767,BE
-3285549768,3285549775,FI
-3285549776,3285549791,DE
-3285549792,3285549823,LU
-3285549824,3285549871,DE
-3285549872,3285549887,DK
-3285549888,3285549951,DE
-3285549952,3285550335,BE
+3285546752,3285550335,BE
3285550336,3285550463,GB
-3285550464,3285550527,DE
-3285550528,3285550591,IT
-3285550592,3285550847,FR
-3285550848,3285550943,IT
-3285550944,3285550975,NL
-3285550976,3285551007,BE
-3285551008,3285551039,CH
-3285551040,3285551071,DE
-3285551072,3285551103,BE
-3285551104,3285551359,DE
-3285551360,3285551391,BE
-3285551392,3285551423,DE
-3285551424,3285551487,DK
-3285551488,3285551551,BE
-3285551552,3285551615,DE
-3285551616,3285551647,GB
-3285551648,3285551679,FR
-3285551680,3285551807,GB
-3285551808,3285551839,RU
-3285551840,3285552127,BE
-3285552128,3285552191,DE
-3285552192,3285552255,ZA
-3285552256,3285552287,CZ
-3285552288,3285552319,HU
-3285552320,3285552383,GB
-3285552384,3285552511,DE
+3285550464,3285552511,BE
3285552512,3285552639,GB
-3285552640,3285552927,DE
-3285552928,3285552959,BE
-3285552960,3285553023,FR
-3285553024,3285553039,BE
-3285553040,3285553055,EG
-3285553056,3285553087,BE
-3285553088,3285553151,IT
-3285553152,3285553215,DE
-3285553216,3285553247,BE
-3285553248,3285553263,PL
-3285553264,3285553727,DE
-3285553728,3285553759,CH
-3285553760,3285553767,GB
-3285553768,3285553775,ZA
-3285553776,3285553791,FR
-3285553792,3285553855,BE
-3285553856,3285553887,ZA
-3285553888,3285553919,DE
-3285553920,3285554047,CH
-3285554048,3285554127,DE
-3285554128,3285554143,BE
-3285554144,3285554175,GB
-3285554176,3285554431,AT
-3285554432,3285554687,BE
-3285554688,3285554703,DE
-3285554704,3285554719,BE
-3285554720,3285554751,FR
-3285554752,3285554815,BE
-3285554816,3285554943,CH
-3285554944,3285555199,LU
-3285555200,3285555231,AT
-3285555232,3285555263,NL
-3285555264,3285555327,FR
-3285555328,3285555455,IL
-3285555456,3285555711,BE
-3285555712,3285555967,LU
-3285555968,3285556223,IT
-3285556224,3285556479,BE
-3285556480,3285556735,DE
-3285556736,3285556767,CH
-3285556768,3285556775,BE
-3285556776,3285556779,NL
-3285556780,3285556799,BE
-3285556800,3285556863,DE
-3285556864,3285556991,BE
-3285556992,3285557055,GB
-3285557056,3285557119,NL
-3285557120,3285557247,DE
-3285557248,3285557363,NL
-3285557364,3285557375,BE
-3285557376,3285557519,NL
-3285557520,3285557535,FI
-3285557536,3285557575,NL
-3285557576,3285557579,SE
-3285557580,3285557583,BE
-3285557584,3285557599,NL
-3285557600,3285557631,BE
-3285557632,3285557791,NL
-3285557792,3285557823,NO
-3285557824,3285557887,SE
-3285557888,3285557911,CH
-3285557912,3285557919,CZ
-3285557920,3285557951,FR
-3285557952,3285558015,DE
-3285558016,3285558271,NL
-3285558272,3285558463,BE
-3285558464,3285558591,NL
-3285558592,3285558655,BE
-3285558656,3285558783,IT
-3285558784,3285559039,GB
-3285559040,3285559167,BE
-3285559168,3285559231,NL
-3285559232,3285559295,BE
-3285559296,3285559807,SE
-3285559808,3285559839,IE
-3285559840,3285559871,CH
-3285559872,3285559887,BE
-3285559888,3285559903,SE
-3285559904,3285559919,NL
-3285559920,3285559935,SE
-3285559936,3285560063,NO
-3285560064,3285560351,SE
-3285560352,3285560383,ES
-3285560384,3285560447,SE
-3285560448,3285560479,LI
-3285560480,3285560511,CH
-3285560512,3285560575,BE
-3285560576,3285560831,DE
-3285560832,3285561215,SE
-3285561216,3285561343,NO
-3285561344,3285561407,GB
-3285561408,3285561471,PL
-3285561472,3285561599,DK
-3285561600,3285561619,NO
-3285561620,3285561623,DE
-3285561624,3285561647,BE
-3285561648,3285561663,NO
-3285561664,3285561727,BE
-3285561728,3285561791,NO
-3285561792,3285561919,BE
-3285561920,3285561951,CH
-3285561952,3285561967,NO
-3285561968,3285561983,BE
-3285561984,3285562111,FI
-3285562112,3285562367,NO
-3285562368,3285562751,FI
-3285562752,3285562783,NL
-3285562784,3285562815,BE
-3285562816,3285562879,IT
-3285562880,3285562911,FI
-3285562912,3285562943,BE
-3285562944,3285562975,DE
-3285562976,3285562991,FI
-3285562992,3285562999,BE
-3285563000,3285563007,GB
-3285563008,3285563135,SE
-3285563136,3285563391,FI
-3285563392,3285563455,BE
-3285563456,3285563471,NL
-3285563472,3285563487,BE
-3285563488,3285563519,SE
-3285563520,3285563647,PL
-3285563648,3285563903,CH
-3285563904,3285564031,SE
-3285564032,3285564159,FI
-3285564160,3285564415,GB
-3285564416,3285564511,CH
-3285564512,3285564543,NO
-3285564544,3285564671,BE
-3285564672,3285564735,CH
-3285564736,3285564751,FR
-3285564752,3285564767,BE
-3285564768,3285564799,SE
-3285564800,3285564927,BE
-3285564928,3285565183,FR
-3285565184,3285565439,NL
-3285565440,3285565951,GB
-3285565952,3285566015,FR
-3285566016,3285566031,IT
-3285566032,3285566047,BE
-3285566048,3285566079,CH
-3285566080,3285566143,FR
-3285566144,3285566207,BE
-3285566208,3285566495,RU
-3285566496,3285566511,SE
-3285566512,3285566527,FI
-3285566528,3285566559,CH
-3285566560,3285566575,BE
-3285566576,3285566591,CH
-3285566592,3285566655,NL
-3285566656,3285566847,BE
-3285566848,3285566975,FR
-3285566976,3285567231,GB
-3285567232,3285567487,PT
+3285552640,3285553663,BE
+3285553664,3285553727,DE
+3285553728,3285561087,BE
+3285561088,3285561103,SE
+3285561104,3285567487,BE
3285567488,3285568511,NL
-3285568512,3285568671,DE
-3285568672,3285568703,CH
-3285568704,3285568751,BE
-3285568752,3285569023,DE
-3285569024,3285569407,BE
-3285569408,3285569535,GB
-3285569536,3285569791,DE
-3285569792,3285570047,FI
-3285570048,3285570175,FR
-3285570176,3285570207,BE
-3285570208,3285570223,PL
-3285570224,3285570239,NL
-3285570240,3285570559,BE
-3285570560,3285570815,SE
-3285570816,3285571071,IT
-3285571072,3285571327,DE
-3285571328,3285571583,FI
-3285571584,3285571711,FR
-3285571712,3285571775,SE
-3285571776,3285571807,BE
-3285571808,3285571839,DE
-3285571840,3285571903,BE
-3285571904,3285571967,SE
-3285571968,3285572095,BE
-3285572096,3285572223,DE
-3285572224,3285572335,BE
-3285572336,3285572351,ES
-3285572352,3285572367,IR
-3285572368,3285572383,ES
-3285572384,3285572447,BE
-3285572448,3285572479,CH
-3285572480,3285572607,FR
-3285572608,3285572863,DK
-3285572864,3285573119,IT
-3285573120,3285573375,SE
-3285573376,3285573535,BE
-3285573536,3285573567,CH
-3285573568,3285573631,FR
-3285573632,3285573887,NL
-3285573888,3285573951,IL
-3285573952,3285574143,BE
-3285574144,3285574399,RU
-3285574400,3285574655,IL
-3285574656,3285574911,GB
-3285574912,3285575167,EU
-3285575168,3285575423,ES
-3285575424,3285575679,IL
-3285575680,3285575935,BE
-3285575936,3285575999,DK
-3285576000,3285576063,BE
-3285576064,3285576127,FR
-3285576128,3285576159,BE
-3285576160,3285576191,DK
-3285576192,3285576447,BE
-3285576448,3285576703,CZ
-3285576704,3285576959,HU
-3285576960,3285577215,BE
-3285577216,3285577471,ZA
-3285577472,3285577599,IT
-3285577600,3285577983,BE
+3285568512,3285577983,BE
3285577984,3285578111,IT
-3285578112,3285578239,DE
-3285578240,3285578367,BE
-3285578368,3285578431,FR
-3285578432,3285578495,BE
-3285578496,3285578751,DE
-3285578752,3285579007,BE
-3285579008,3285579519,ES
-3285579520,3285579775,FR
-3285579776,3285580031,US
-3285580032,3285580287,HU
+3285578112,3285580287,BE
3285580288,3285580415,DE
-3285580416,3285580543,BE
-3285580544,3285580547,NL
-3285580548,3285580651,BE
-3285580652,3285580655,SE
-3285580656,3285580799,BE
-3285580800,3285580831,SE
-3285580832,3285580847,PL
-3285580848,3285580927,BE
-3285580928,3285581055,ZA
-3285581056,3285581503,BE
-3285581504,3285581567,AT
-3285581568,3285581599,FR
-3285581600,3285581615,GB
-3285581616,3285581695,FR
-3285581696,3285581759,LV
-3285581760,3285581823,FR
-3285581824,3285595135,DE
-3285595136,3285595167,CZ
-3285595168,3285595175,US
-3285595176,3285595263,DE
-3285595264,3285595423,US
-3285595424,3285596159,DE
-3285596160,3285596191,US
-3285596192,3285596223,DE
-3285596224,3285596255,US
-3285596256,3285596287,DE
-3285596288,3285596319,US
-3285596320,3285596351,DE
-3285596352,3285596383,FR
-3285596384,3285597183,DE
-3285597184,3285597215,US
-3285597216,3285606399,DE
+3285580416,3285581823,BE
+3285581824,3285606399,DE
3285606400,3285614591,GB
3285614592,3285630975,TR
3285630976,3285633023,UA
@@ -135758,13 +69077,7 @@
3285647360,3285712895,DK
3285712896,3285721087,GB
3285721088,3285729279,SE
-3285729280,3285734143,CH
-3285734144,3285734159,GB
-3285734160,3285734335,CH
-3285734336,3285734351,LI
-3285734352,3285734399,CH
-3285734400,3285734655,LI
-3285734656,3285737471,CH
+3285729280,3285737471,CH
3285737472,3285745663,PL
3285745664,3285753855,IT
3285753856,3285762047,LV
@@ -135772,11 +69085,11 @@
3285762560,3285763071,RU
3285763072,3285763583,GB
3285763584,3285764095,DE
-3285764096,3285765119,RU
+3285764096,3285764607,RU
3285765120,3285766143,UA
3285766144,3285766655,DE
3285766656,3285767679,UA
-3285767680,3285768191,EU
+3285767680,3285768191,FR
3285768192,3285768703,RU
3285768704,3285768959,RO
3285768960,3285769215,PL
@@ -135792,7 +69105,6 @@
3285772032,3285772287,SE
3285772288,3285772543,TR
3285772544,3285772799,LT
-3285772800,3285773055,MT
3285773056,3285773311,DE
3285773312,3285773567,LV
3285773568,3285773823,KG
@@ -135803,9 +69115,7 @@
3285774848,3285775103,FR
3285775104,3285775359,GB
3285775360,3285775615,RU
-3285775616,3285775871,NG
3285775872,3285776127,NL
-3285776128,3285776383,RO
3285776384,3285776639,UA
3285776640,3285776895,FR
3285776896,3285777151,PL
@@ -135820,259 +69130,35 @@
3285860352,3285868543,FI
3285868544,3285876735,IE
3285876736,3285909503,RU
-3285909504,3285910271,GB
-3285910272,3285910303,ES
-3285910304,3285910319,GB
-3285910320,3285910327,EU
-3285910328,3285910331,GB
-3285910332,3285910335,EU
3285910336,3285910399,ES
-3285910400,3285910407,IT
-3285910408,3285910415,GB
-3285910416,3285910431,EU
-3285910432,3285910463,NG
-3285910464,3285910527,ES
-3285910528,3285911551,GB
-3285911552,3285912575,EU
-3285912576,3285913087,GB
-3285913088,3285913215,ES
-3285913216,3285913279,GB
-3285913280,3285913343,ES
-3285913344,3285913599,GB
-3285913600,3285915647,EU
-3285915648,3285915903,GB
-3285915904,3285916159,AT
-3285916160,3285916415,FR
-3285916416,3285916671,YE
-3285916672,3285916703,BH
-3285916704,3285916711,DE
-3285916712,3285916719,CY
-3285916720,3285916735,ES
-3285916736,3285916799,GB
-3285916800,3285916815,EU
-3285916816,3285916831,GB
-3285916832,3285916845,DE
-3285916846,3285916847,EU
-3285916848,3285916855,IT
-3285916856,3285916863,GB
-3285916864,3285916927,EU
-3285916928,3285917183,GB
-3285917184,3285917439,ES
-3285917440,3285917695,YE
-3285917696,3285918719,EU
-3285918720,3285918975,SE
-3285918976,3285919231,YE
-3285919232,3285919487,GB
-3285919488,3285919743,UA
+3285911552,3285912447,GB
+3285913648,3285913655,IE
+3285913656,3285913695,GB
+3285917696,3285917703,GB
+3285917728,3285917759,GB
3285919744,3285921791,QA
-3285921792,3285921823,CZ
-3285921824,3285922047,GB
3285922048,3285922303,FR
-3285922304,3285922559,DE
-3285922560,3285922815,GB
-3285922816,3285923327,KW
-3285923328,3285924415,ES
-3285924416,3285924431,DE
-3285924432,3285924479,GB
-3285924480,3285924863,ES
-3285924864,3285925887,EU
-3285925888,3285926143,NL
-3285926144,3285926399,YE
-3285926400,3285926407,GB
-3285926408,3285926415,ES
-3285926416,3285926431,GB
3285926432,3285926463,CH
-3285926464,3285926527,GB
-3285926528,3285926591,EU
-3285926592,3285926623,FR
-3285926624,3285926631,US
-3285926632,3285926671,GB
-3285926672,3285926687,EU
-3285926688,3285926719,IN
-3285926720,3285926783,NL
-3285926784,3285926911,GB
-3285926912,3285927423,DE
-3285927424,3285927679,GB
-3285927680,3285927935,IR
-3285927936,3285927951,EU
-3285927952,3285927999,GB
-3285928000,3285928063,EU
-3285928064,3285928191,ES
-3285928192,3285928207,PL
-3285928208,3285928223,GB
-3285928224,3285928255,DE
-3285928256,3285928271,GB
-3285928272,3285928287,DE
-3285928288,3285928383,GB
-3285928384,3285928447,EU
-3285928448,3285928959,ES
-3285928960,3285929983,EU
-3285929984,3285930511,GB
-3285930512,3285930527,EU
-3285930528,3285930559,GB
-3285930560,3285930575,ES
-3285930576,3285930623,GB
-3285930624,3285930631,BE
-3285930632,3285930639,GB
-3285930640,3285930655,ES
-3285930656,3285930671,NL
-3285930672,3285930679,BE
-3285930680,3285930687,DE
-3285930688,3285930703,GB
-3285930704,3285930719,EU
-3285930720,3285931263,GB
-3285931264,3285932031,EU
-3285932032,3285932287,NL
-3285932288,3285932799,GB
-3285932800,3285933055,ES
-3285933056,3285933311,DE
-3285933312,3285933567,ES
-3285933568,3285934079,DE
-3285934080,3285934591,GB
-3285934592,3285934847,ES
-3285934848,3285935679,GB
-3285935680,3285935743,EU
-3285935744,3285936127,GB
-3285936128,3285938175,EU
-3285938176,3285938431,ES
-3285938432,3285938511,GB
-3285938512,3285938559,EU
-3285938560,3285938607,GB
-3285938608,3285938623,FR
-3285938624,3285938631,NG
-3285938632,3285938639,ES
-3285938640,3285938655,GB
-3285938656,3285938687,DE
-3285938688,3285938943,ES
-3285938944,3285938951,NG
-3285938952,3285938959,NL
-3285938960,3285938975,US
-3285938976,3285939007,GB
-3285939008,3285939071,ES
-3285939072,3285939087,GB
-3285939088,3285939103,FR
-3285939104,3285939119,GB
-3285939120,3285939127,ES
-3285939128,3285939135,EU
+3285926592,3285926623,DE
+3285928304,3285928311,GB
+3285931528,3285931535,DE
+3285935872,3285936127,GB
3285939136,3285939175,GB
-3285939176,3285939183,EU
3285939184,3285939191,GB
-3285939192,3285939199,EU
-3285939200,3285939711,ES
-3285939712,3285939775,GB
-3285939776,3285939839,EU
+3285939744,3285939759,GB
3285939840,3285939967,GB
-3285939968,3285939975,NL
-3285939976,3285939983,ES
-3285939984,3285939999,GB
-3285940000,3285940223,EU
-3285940224,3285940479,ES
-3285940480,3285941247,GB
-3285941248,3285941503,EU
-3285941504,3285942287,GB
-3285942288,3285942303,NL
-3285942304,3285942319,FR
-3285942320,3285942527,EU
-3285942528,3285942783,PT
-3285942784,3285943039,ES
-3285943040,3285943295,SE
-3285943296,3285943551,ES
-3285943552,3285943647,GB
-3285943648,3285943679,NG
-3285943680,3285944319,GB
-3285944320,3285944831,US
-3285944832,3285945343,DK
-3285945344,3285945599,ES
-3285945600,3285945615,GB
-3285945616,3285945663,EU
-3285945664,3285945695,FR
-3285945696,3285945759,GB
-3285945760,3285945855,EU
-3285945856,3285946111,GB
+3285941248,3285941503,ES
3285946112,3285946367,ES
-3285946368,3285946879,GB
-3285946880,3285947391,NL
-3285947392,3285947647,DE
-3285947648,3285947903,ES
-3285947904,3285948159,NL
-3285948160,3285948671,GB
-3285948672,3285948927,SA
-3285948928,3285949183,NG
-3285949184,3285949439,ES
-3285949440,3285949695,DE
-3285949696,3285949823,ES
-3285949824,3285949855,EU
3285949856,3285949887,ES
-3285949888,3285949903,GB
-3285949904,3285949951,EU
-3285949952,3285950463,ES
-3285950464,3285950719,GB
-3285950720,3285950783,US
-3285950784,3285950799,GB
-3285950800,3285950943,EU
-3285950944,3285950975,GB
-3285950976,3285951231,NL
-3285951232,3285951487,IT
-3285951488,3285951999,GB
-3285952000,3285952255,IT
-3285952256,3285952511,SA
-3285952512,3285953535,CA
+3285950208,3285950463,IT
+3285951648,3285951679,ES
3285953536,3285954047,PK
-3285954048,3285954559,GB
-3285954560,3285954815,SA
-3285954816,3285955583,GB
-3285955584,3285955839,DE
-3285955840,3285956095,ES
-3285956096,3285956351,FR
-3285956352,3285956607,DE
-3285956608,3285956863,GB
-3285956864,3285957631,PT
-3285957632,3285957887,PL
-3285957888,3285958143,GB
-3285958144,3285958399,DE
-3285958400,3285958655,NL
-3285958656,3285958671,GB
-3285958672,3285958783,EU
-3285958784,3285958799,GB
-3285958800,3285958847,EU
-3285958848,3285958895,NL
-3285958896,3285959039,GB
-3285959040,3285959167,DE
-3285959168,3285959423,NL
-3285959424,3285959935,GB
-3285959936,3285960191,ES
-3285960192,3285960447,FR
-3285960448,3285960703,GB
-3285960704,3285961727,CA
-3285961728,3285961983,NL
-3285961984,3285962495,ES
-3285962496,3285963775,DE
-3285963776,3285964287,GB
-3285964288,3285964799,FR
-3285964800,3285966335,GB
-3285966336,3285966847,EU
-3285966848,3285967103,FR
-3285967104,3285967359,PL
-3285967360,3285967615,ES
-3285967616,3285968383,BE
-3285968384,3285968639,ES
-3285968640,3285968895,PL
-3285968896,3285970943,CA
-3285970944,3285971199,EU
-3285971200,3285971455,FR
-3285971456,3285971711,DE
-3285971712,3285971967,GB
-3285971968,3285972223,ES
-3285972224,3285972479,GB
-3285972480,3285972735,PL
-3285972736,3285972991,FR
-3285972992,3285973095,GB
-3285973096,3285973247,EU
-3285973248,3285973767,GB
-3285973768,3285973791,EU
-3285973792,3285973823,GB
-3285973824,3285974015,EU
-3285974016,3285975039,GB
+3285954048,3285954303,AE
+3285954560,3285954567,GB
+3285954568,3285954575,PL
+3285954576,3285954815,GB
+3285962752,3285963775,DE
+3285964800,3285964927,DE
3285975040,3286013695,FR
3286013696,3286013951,RE
3286013952,3286106111,FR
@@ -136090,17 +69176,7 @@
3286138880,3286155263,RU
3286155264,3286171647,DE
3286171648,3286237183,IT
-3286237184,3286243583,GB
-3286243584,3286243839,US
-3286243840,3286245887,GB
-3286245888,3286246143,US
-3286246144,3286254167,GB
-3286254168,3286254175,NL
-3286254176,3286279423,GB
-3286279424,3286279679,US
-3286279680,3286291807,GB
-3286291808,3286291823,US
-3286291824,3286302719,GB
+3286237184,3286302719,GB
3286302720,3286310911,NO
3286310912,3286311423,CH
3286311424,3286311935,NL
@@ -136117,8 +69193,6 @@
3286317056,3286317567,RU
3286317568,3286318079,RO
3286318080,3286318591,CH
-3286318592,3286319103,A2
-3286319104,3286320127,RO
3286320128,3286321151,PL
3286321152,3286322175,CZ
3286322176,3286323199,PL
@@ -136145,7 +69219,6 @@
3286345728,3286346751,IT
3286346752,3286347775,UA
3286347776,3286348799,PA
-3286348800,3286349823,PL
3286349824,3286350847,SE
3286350848,3286351871,GB
3286351872,3286352895,CH
@@ -136165,22 +69238,16 @@
3286367232,3286368255,BG
3286368256,3286376447,CH
3286376448,3286384639,GB
-3286384640,3286397607,DE
-3286397608,3286397615,A2
-3286397616,3286399759,DE
-3286399760,3286399807,GB
-3286399808,3286399815,DE
-3286399816,3286399831,GB
-3286399832,3286399839,DE
-3286399840,3286399999,GB
-3286400000,3286401023,DE
-3286401024,3286404095,GB
-3286404096,3286405375,GG
+3286384640,3286401023,DE
+3286401024,3286403071,GB
+3286403072,3286403327,GG
+3286403328,3286404863,GB
+3286404864,3286405375,GG
3286405376,3286405887,GB
-3286405888,3286407167,GG
-3286407168,3286407679,GB
-3286407680,3286407935,GG
-3286407936,3286409215,GB
+3286405888,3286406143,GG
+3286406144,3286406399,GB
+3286406400,3286406655,GG
+3286406656,3286409215,GB
3286409216,3286417407,DE
3286417408,3286417663,UA
3286417664,3286417919,IT
@@ -136208,22 +69275,16 @@
3286423808,3286424063,CZ
3286424064,3286424319,LV
3286424320,3286424575,FR
-3286424576,3286424831,RU
+3286424576,3286424831,UA
3286424832,3286425087,TR
3286425088,3286425343,RU
3286425344,3286425599,IT
3286425600,3286433791,KW
3286433792,3286499327,DE
-3286499328,3286519039,HU
-3286519040,3286519295,RO
-3286519296,3286564863,HU
-3286564864,3286566143,AE
-3286566144,3286566271,TZ
-3286566272,3286566655,AE
+3286499328,3286564863,HU
+3286564864,3286566655,AE
3286566656,3286567423,KW
-3286567424,3286571007,AE
-3286571008,3286571775,KW
-3286571776,3286630399,AE
+3286567424,3286630399,AE
3286630400,3286638591,BG
3286638592,3286646783,AT
3286646784,3286654975,RU
@@ -136238,7 +69299,6 @@
3286657024,3286657279,BE
3286657280,3286657535,ES
3286657536,3286657791,HU
-3286657792,3286658047,RU
3286658048,3286658303,US
3286658304,3286658559,RU
3286658560,3286658815,NL
@@ -136260,65 +69320,13 @@
3286662656,3286662911,DE
3286662912,3286671359,UA
3286671360,3286679551,AT
-3286679552,3286680063,IT
-3286680064,3286680071,US
-3286680072,3286680079,AR
-3286680080,3286681631,IT
-3286681632,3286681647,DE
-3286681648,3286681651,IT
-3286681652,3286681655,TN
-3286681656,3286681659,IT
-3286681660,3286681663,ES
-3286681664,3286681695,FR
-3286681696,3286681699,ES
-3286681700,3286681711,IT
-3286681712,3286681727,CH
-3286681728,3286681743,HK
-3286681744,3286681751,CH
-3286681752,3286681767,IT
-3286681768,3286681775,DE
-3286681776,3286681815,IT
-3286681816,3286681823,FR
-3286681824,3286681839,IT
-3286681840,3286681847,GR
-3286681848,3286682463,IT
-3286682464,3286682495,RO
-3286682496,3286682623,IT
-3286682624,3286682879,SM
-3286682880,3286695935,IT
+3286679552,3286695935,IT
3286695936,3286761471,DK
-3286761472,3286761727,DE
-3286761728,3286769663,GB
-3286769664,3286769919,DE
-3286769920,3286773759,GB
+3286761472,3286773759,GB
3286773760,3286777855,DE
-3286777856,3286781951,FR
-3286781952,3286782207,GB
-3286782208,3286782463,DE
-3286782464,3286782535,GB
-3286782536,3286782543,FR
-3286782544,3286782575,GB
-3286782576,3286782583,DE
-3286782584,3286783599,GB
-3286783600,3286783615,CH
-3286783616,3286783679,DE
-3286783680,3286784511,GB
-3286784512,3286784767,CH
-3286784768,3286785023,DE
-3286785024,3286787071,GB
-3286787072,3286787327,FR
-3286787328,3286787583,DE
-3286787584,3286788095,GB
-3286788096,3286788351,DE
-3286788352,3286788607,FR
-3286788608,3286789119,GB
-3286789120,3286789631,DE
-3286789632,3286790143,FR
-3286790144,3286790655,GB
-3286790656,3286790911,DE
-3286790912,3286791679,GB
-3286791680,3286791935,AT
-3286791936,3286794239,GB
+3286777856,3286778111,GB
+3286778112,3286781951,FR
+3286781952,3286794239,GB
3286794240,3286888447,DE
3286888448,3286889471,IE
3286889472,3286892543,DE
@@ -136333,7 +69341,6 @@
3286897152,3286897663,AT
3286897664,3286898175,PL
3286898176,3286898687,HR
-3286898688,3286899199,EU
3286899200,3286899711,IL
3286899712,3286900223,DE
3286900224,3286900735,RO
@@ -136362,23 +69369,20 @@
3286907648,3286907903,ES
3286907904,3286908159,CH
3286908160,3286908415,ES
-3286908416,3286908671,FR
3286908672,3286908927,PL
3286908928,3286909951,CH
3286909952,3286913023,UA
-3286913024,3286913535,DE
+3286913024,3286913535,GB
3286914048,3286915071,BG
3286915072,3286916095,FR
3286917120,3286918143,RU
3286918144,3286919167,AT
3286919168,3286920191,DE
-3286920192,3286921215,RU
+3286920192,3286920447,RU
3286921216,3286922239,UA
3286922240,3286923263,GB
3286923264,3286924287,CM
-3286924288,3286925311,UA
3286925312,3286925823,DE
-3286925824,3286926079,RO
3286926080,3286926335,LV
3286926336,3286926591,UA
3286926592,3286926847,DE
@@ -136390,7 +69394,6 @@
3286928128,3286928383,DE
3286928640,3286928895,PL
3286928896,3286929151,FI
-3286929152,3286929407,DE
3286929408,3286929663,LV
3286929664,3286929919,BE
3286929920,3286930175,SE
@@ -136403,9 +69406,8 @@
3286931712,3286931967,GB
3286931968,3286932223,FR
3286932224,3286932479,DK
-3286932480,3286932735,GB
3286932736,3286932991,AT
-3286932992,3286933503,IL
+3286932992,3286933247,IL
3286933504,3286933759,DK
3286933760,3286934015,RO
3286934016,3286934271,BE
@@ -136414,7 +69416,6 @@
3286934784,3286935039,TR
3286935040,3286935551,ES
3286935552,3286935807,EG
-3286935808,3286936063,RO
3286936064,3286936319,RU
3286936320,3286936575,IT
3286936576,3286936831,RO
@@ -136426,16 +69427,14 @@
3286938112,3286938367,DE
3286938368,3286938623,ES
3286938624,3286938879,CH
-3286938880,3286939391,RO
+3286939136,3286939391,RO
3286939392,3286939647,DE
3286939648,3286939903,BE
3286939904,3286940159,EG
3286940160,3286940415,BE
3286940416,3286940671,NL
3286940672,3286940927,RO
-3286940928,3286941183,PL
3286941184,3286941439,RU
-3286941440,3286941695,RO
3286941696,3286942719,DE
3286942720,3286943743,FI
3286943744,3286944767,UA
@@ -136450,29 +69449,22 @@
3286952960,3286953983,BG
3286953984,3286955007,GB
3286955008,3286956031,DE
-3286956032,3286957055,A2
+3286956032,3286957055,FR
3286957056,3286958079,EG
3286958080,3287023615,ES
-3287023616,3287097343,FI
-3287097344,3287097599,AX
-3287097600,3287154687,FI
+3287023616,3287154687,FI
3287154688,3287162879,BE
-3287162880,3287164927,US
-3287164928,3287165183,DE
-3287165184,3287165439,US
+3287162880,3287165439,DE
3287165440,3287165695,SA
-3287165696,3287165951,US
+3287165696,3287165951,DE
3287165952,3287166207,SA
-3287166208,3287166975,US
-3287166976,3287167999,SA
-3287168000,3287168511,US
-3287168512,3287168767,EU
+3287166208,3287166975,DE
+3287166976,3287167743,SA
+3287167744,3287168767,DE
3287168768,3287169279,SA
-3287169280,3287169535,US
+3287169280,3287169535,DE
3287169536,3287169791,SA
-3287169792,3287170303,US
-3287170304,3287170559,DE
-3287170560,3287170815,US
+3287169792,3287170815,DE
3287170816,3287171071,GB
3287171072,3287171583,LT
3287171584,3287172095,PL
@@ -136481,35 +69473,27 @@
3287173120,3287173631,RU
3287173632,3287174143,NL
3287174144,3287174655,SE
-3287174656,3287175167,GB
3287175168,3287176191,RO
3287176192,3287176703,BG
3287176704,3287177215,NL
3287177216,3287178239,RO
3287178240,3287178751,UA
-3287178752,3287179263,RO
3287179264,3287180287,FR
3287180288,3287181311,RU
3287181312,3287182335,UZ
3287182336,3287185407,UA
-3287185408,3287186431,SE
-3287186432,3287187455,FI
3287187456,3287196671,DE
3287196672,3287198719,PL
3287198720,3287199743,GB
3287199744,3287201791,UA
3287201792,3287202815,PL
3287202816,3287203839,UA
-3287203840,3287204895,FI
-3287204896,3287204951,EE
-3287204952,3287204959,FI
-3287204960,3287204991,EE
-3287204992,3287212031,FI
+3287203840,3287212031,FI
3287212032,3287212543,DE
3287212544,3287212799,FR
3287212800,3287213311,PL
3287213312,3287213567,FR
-3287213568,3287214079,RU
+3287213568,3287213823,RU
3287214080,3287214335,GB
3287214336,3287214591,DE
3287214592,3287214847,NO
@@ -136519,28 +69503,19 @@
3287215616,3287215871,DE
3287215872,3287216127,RU
3287216128,3287216639,GB
-3287216640,3287216895,MD
3287217152,3287217407,NL
3287217408,3287217663,PL
3287217664,3287217919,RU
-3287217920,3287218175,PL
-3287218176,3287218431,DE
3287218432,3287218687,GB
3287218688,3287218943,RU
3287218944,3287219199,FR
3287219200,3287219455,DE
3287219456,3287219711,CH
3287219712,3287220223,SE
-3287220224,3287259375,RU
-3287259376,3287259383,DK
-3287259384,3287271119,RU
-3287271120,3287271127,UZ
-3287271128,3287285759,RU
+3287220224,3287285759,RU
3287285760,3287416831,NL
3287416832,3287425023,RU
-3287425024,3287427759,SE
-3287427760,3287427775,GB
-3287427776,3287433215,SE
+3287425024,3287433215,SE
3287433216,3287433727,PL
3287433728,3287434239,DE
3287434240,3287434751,PL
@@ -136557,13 +69532,10 @@
3287439872,3287440895,PL
3287440896,3287441407,UA
3287441408,3287442431,NL
-3287442432,3287442943,PL
-3287442944,3287443967,DE
+3287443456,3287443967,DE
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
@@ -136598,12 +69570,10 @@
3287461376,3287461631,CH
3287461632,3287461887,AT
3287461888,3287462143,PL
-3287462144,3287462399,SA
3287462400,3287462655,BE
3287462656,3287462911,UA
3287462912,3287463167,FR
3287463168,3287463423,IT
-3287463424,3287463679,RO
3287463680,3287463935,PL
3287463936,3287464191,AT
3287464192,3287464447,SK
@@ -136626,26 +69596,13 @@
3287479296,3287480319,RO
3287480320,3287481343,AT
3287481344,3287482367,PL
-3287482368,3287499439,DE
-3287499440,3287499471,GB
-3287499472,3287499487,DE
-3287499488,3287499503,GB
-3287499504,3287507983,DE
-3287507984,3287507991,FR
-3287507992,3287515375,DE
-3287515376,3287515383,CZ
-3287515384,3287524095,DE
-3287524096,3287524351,GB
-3287524352,3287542815,DE
-3287542816,3287542831,US
-3287542832,3287548927,DE
+3287482368,3287548927,DE
3287548928,3287549439,UA
3287549440,3287549951,SE
3287549952,3287550463,UA
3287550464,3287550975,DE
3287550976,3287551487,LT
3287552000,3287552511,GB
-3287552512,3287553023,RO
3287553024,3287553535,FR
3287553536,3287554047,IL
3287554048,3287554559,RU
@@ -136654,9 +69611,7 @@
3287555584,3287556095,FR
3287556096,3287564287,TR
3287564288,3287572479,FI
-3287572480,3287580575,DE
-3287580576,3287580607,LI
-3287580608,3287580671,DE
+3287572480,3287580671,DE
3287580672,3287588863,LV
3287588864,3287597055,BE
3287597056,3287605247,GI
@@ -136667,32 +69622,26 @@
3287632384,3287632895,SE
3287632896,3287633407,RU
3287633408,3287633919,SK
-3287633920,3287634431,GB
+3287633920,3287634431,UA
3287634432,3287634943,RO
3287634944,3287635455,PL
3287635456,3287635967,DE
-3287635968,3287636479,RO
3287636480,3287636991,IE
3287636992,3287637503,AT
3287637504,3287638015,PL
3287638528,3287639039,DE
3287639040,3287639551,GB
-3287639552,3287640063,RU
3287640064,3287640575,PL
3287640576,3287641087,SI
-3287641088,3287641599,A2
-3287641600,3287642111,FI
3287642112,3287642623,UA
3287642624,3287643135,BE
3287643136,3287643647,IT
3287643648,3287644671,UA
3287644672,3287645183,NL
-3287645184,3287646207,EU
3287646208,3287662591,PT
3287662592,3287662847,DE
3287662848,3287663103,DK
3287663104,3287663359,LV
-3287663360,3287663615,GB
3287663616,3287663871,ES
3287663872,3287664127,PT
3287664128,3287664383,PL
@@ -136702,7 +69651,6 @@
3287665152,3287665407,NO
3287665408,3287665919,PL
3287665920,3287666431,RU
-3287666432,3287666687,DK
3287666688,3287666943,SI
3287666944,3287667199,CZ
3287667200,3287667455,DK
@@ -136733,11 +69681,7 @@
3287673600,3287673855,GB
3287673856,3287674111,NL
3287674112,3287674367,CH
-3287674368,3287674623,DE
-3287674624,3287674879,RO
3287674880,3287675135,SE
-3287675136,3287675391,GB
-3287675392,3287675647,SE
3287675648,3287675903,DE
3287675904,3287676159,BE
3287676160,3287676415,DE
@@ -136761,28 +69705,19 @@
3287705600,3287706111,SA
3287706112,3287706623,RU
3287706624,3287707135,GB
-3287707136,3287707647,FR
3287707648,3287708159,BE
3287708160,3287708671,NL
-3287708672,3287709183,EU
3287709184,3287709695,RU
3287709696,3287710207,SE
3287710208,3287710719,RU
3287710720,3287711231,UA
3287711232,3287711743,PL
-3287711744,3287718911,GB
-3287718912,3287719167,FR
-3287719168,3287719423,GB
-3287719424,3287719679,FR
-3287719680,3287719935,GB
+3287711744,3287719935,GB
3287719936,3287728127,DE
3287728128,3287729407,IT
-3287729408,3287729663,SE
3287729664,3287729919,DK
3287729920,3287730175,HU
-3287730176,3287730431,PL
-3287730432,3287730687,GB
-3287730688,3287732223,DE
+3287730176,3287732223,DE
3287732224,3287734271,IT
3287734272,3287734527,PL
3287734528,3287734783,UA
@@ -136792,18 +69727,15 @@
3287736832,3287737343,LV
3287737344,3287737855,GB
3287737856,3287738367,FR
-3287738368,3287738879,CH
+3287738368,3287738879,GB
3287738880,3287739391,DE
3287739392,3287739903,NL
3287739904,3287740415,PT
3287740416,3287740927,BG
3287740928,3287741439,RO
3287741440,3287741951,CH
-3287741952,3287742463,RO
-3287742464,3287742975,RU
3287742976,3287743487,RO
3287743488,3287743999,DE
-3287744000,3287744511,FR
3287744512,3287810047,DE
3287810048,3287818239,FR
3287818240,3287826431,AT
@@ -136843,19 +69775,12 @@
3287851008,3287859199,UA
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
@@ -136864,7 +69789,6 @@
3287869952,3287870463,UA
3287870464,3287870975,RU
3287870976,3287871487,NL
-3287872000,3287872511,RU
3287872512,3287873023,GB
3287873024,3287873535,PL
3287873536,3287874047,RU
@@ -136900,7 +69824,6 @@
3287956480,3287956735,BG
3287956736,3287956991,SE
3287956992,3287957247,UA
-3287957248,3287957503,GB
3287957504,3287965695,AM
3287965696,3287973887,RS
3287973888,3287982079,CZ
@@ -136909,32 +69832,13 @@
3287998464,3288006655,IT
3288006656,3288072191,GR
3288072192,3288088575,SE
-3288088576,3288102543,RS
-3288102544,3288102551,DK
-3288102552,3288104959,RS
-3288104960,3288143615,DE
-3288143616,3288143871,CH
-3288143872,3288145663,DE
-3288145664,3288146175,CH
-3288146176,3288150015,DE
-3288150016,3288150103,NL
-3288150104,3288150271,DE
-3288150272,3288150359,NL
-3288150360,3288150495,DE
-3288150496,3288150591,NL
-3288150592,3288150783,DE
-3288150784,3288150871,NL
-3288150872,3288150911,DE
-3288150912,3288150975,NL
-3288150976,3288151039,DE
-3288151040,3288151551,NL
-3288151552,3288236031,DE
+3288088576,3288104959,RS
+3288104960,3288236031,DE
3288236032,3288236543,LI
3288236544,3288237055,FR
3288237056,3288238591,RO
3288238592,3288239103,PL
3288239104,3288239615,RO
-3288239616,3288240127,UA
3288240128,3288240639,CH
3288240640,3288241151,FR
3288241152,3288241663,ES
@@ -136988,7 +69892,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
@@ -137018,23 +69922,24 @@
3288467456,3288469503,BI
3288469504,3288481791,ZA
3288481792,3288482303,ZW
-3288482304,3288485631,ZA
+3288482304,3288483071,ZA
+3288483072,3288483327,ZW
+3288483328,3288485631,ZA
3288485632,3288485887,ZW
3288485888,3288489983,MA
3288489984,3288514559,ZA
3288514560,3288522751,EG
3288530944,3288532991,JM
3288532992,3288534527,PR
-3288534528,3288535039,EG
+3288534528,3288535039,MG
3288535040,3288539135,CW
-3288539136,3288543487,US
-3288543488,3288543743,AP
+3288539136,3288540415,US
+3288540416,3288540671,BR
+3288540672,3288543743,US
3288543744,3288543996,CH
-3288543997,3288543997,EU
+3288543997,3288543997,US
3288543998,3288543999,CH
-3288544000,3288544498,US
-3288544499,3288544499,EU
-3288544500,3288544767,US
+3288544000,3288544767,US
3288544768,3288545023,MX
3288545024,3288545279,FR
3288545280,3288545535,AU
@@ -137065,7 +69970,6 @@
3288569856,3288570111,CU
3288570112,3288570367,JM
3288570368,3288577023,ZA
-3288577024,3288578047,NG
3288578048,3288580095,JM
3288580096,3288588287,BB
3288588288,3288608255,ZA
@@ -137081,15 +69985,78 @@
3288758272,3288758527,EG
3288758528,3288772607,ZA
3288774656,3288774911,ZA
-3288775168,3288775679,NG
-3288776704,3289063423,ZA
-3289069568,3289070335,ZA
-3289070336,3289070591,ZW
-3289070592,3289070847,NA
-3289070848,3289071103,ZA
-3289071616,3289086975,ZA
+3288774912,3288775167,EG
+3288775168,3288777727,NG
+3288777728,3288778239,TZ
+3288778240,3288778495,ZA
+3288778496,3288778751,MU
+3288778752,3288779007,EG
+3288779008,3288779263,ZA
+3288779264,3288779775,KE
+3288779776,3288780799,NG
+3288781824,3288782591,ZA
+3288782592,3288782847,KE
+3288783872,3288784127,KE
+3288784128,3288784895,ZA
+3288787968,3288788223,EG
+3288788224,3288792831,ZA
+3288792832,3288793087,AO
+3288793088,3289004031,ZA
+3289004032,3289005055,NG
+3289005056,3289005311,TZ
+3289005312,3289014527,ZA
+3289014528,3289014783,EG
+3289014784,3289015295,ZA
+3289015296,3289015551,CM
+3289015552,3289020159,ZA
+3289020160,3289020415,UG
+3289020416,3289020671,EG
+3289020672,3289020927,ZA
+3289020928,3289021439,CI
+3289021440,3289024767,ZA
+3289024768,3289025023,GH
+3289025024,3289025535,UG
+3289026048,3289027327,ZA
+3289027328,3289027583,TZ
+3289027584,3289027839,MZ
+3289027840,3289041407,ZA
+3289041408,3289041663,NG
+3289041664,3289044991,ZA
+3289044992,3289047039,ML
+3289047040,3289048063,ZA
+3289048064,3289048319,UG
+3289048320,3289048831,ZA
+3289048832,3289049087,NG
+3289049088,3289053951,ZA
+3289053952,3289055231,NG
+3289055232,3289063423,ZA
+3289067520,3289071103,ZA
+3289071104,3289071359,SO
+3289071616,3289074431,ZA
+3289074432,3289074687,DZ
+3289074688,3289075711,ZA
+3289077760,3289078271,KE
+3289078272,3289078527,GH
+3289078528,3289081599,ZA
+3289081856,3289082111,NG
+3289082112,3289086975,ZA
3289086976,3289087231,SZ
-3289087232,3289120767,ZA
+3289087232,3289089791,ZA
+3289089792,3289090047,MZ
+3289090048,3289093631,ZA
+3289093632,3289094143,NG
+3289096192,3289100031,ZA
+3289100032,3289100287,LS
+3289102336,3289103359,NG
+3289103360,3289103615,ZA
+3289103616,3289103871,AO
+3289103872,3289104383,KE
+3289104384,3289107967,ZA
+3289108480,3289114367,ZA
+3289114368,3289114623,NG
+3289114624,3289115135,ZA
+3289115392,3289120511,ZA
+3289120512,3289120767,TZ
3289120768,3289123327,PR
3289123328,3289123583,NA
3289123584,3289123839,EG
@@ -137100,14 +70067,19 @@
3289153536,3289161727,RW
3289161728,3289169919,PR
3289169920,3289186303,MA
-3289186304,3289229311,ZA
+3289186304,3289212159,ZA
+3289212160,3289212415,MZ
+3289214976,3289215231,NG
+3289215232,3289220351,ZA
+3289221632,3289229311,ZA
3289229312,3289229567,SZ
3289229824,3289230591,ZA
-3289233408,3289319423,ZA
-3289319424,3289319679,A2
-3289319680,3289319935,ZA
-3289319936,3289320447,A2
-3289320448,3289321471,ZA
+3289233408,3289233919,ZA
+3289234176,3289235199,ZA
+3289235200,3289235455,KE
+3289237504,3289243391,ZA
+3289243392,3289243647,BI
+3289243648,3289321471,ZA
3289321472,3289325567,IN
3289325568,3289333759,SA
3289333760,3289645055,ZA
@@ -137137,64 +70109,35 @@
3290031360,3290060287,ZA
3290060288,3290060543,SZ
3290060544,3290103807,ZA
-3290103808,3290104319,JO
-3290104320,3290104831,EG
-3290104832,3290106879,VE
-3290106880,3290107135,CL
-3290107136,3290107151,CA
-3290107152,3290107167,US
-3290107168,3290107231,CA
-3290107232,3290107263,US
-3290107264,3290107311,CA
-3290107312,3290107343,US
-3290107344,3290107359,CA
-3290107360,3290107375,US
-3290107376,3290107383,CA
-3290107384,3290107391,US
-3290107392,3290107647,CA
-3290107648,3290108415,US
-3290108416,3290108671,CA
-3290108672,3290108927,US
-3290108928,3290109183,GH
-3290109184,3290109439,MU
-3290109440,3290109695,ET
-3290109696,3290110207,PR
-3290110208,3290110463,US
-3290110464,3290110719,ES
-3290110720,3290110975,DO
-3290110976,3290111487,US
-3290111488,3290111743,MX
-3290111744,3290111999,US
-3290112000,3290112143,CA
-3290112144,3290116095,US
-3290116096,3290118399,PE
-3290118400,3290120191,US
+3290103808,3290107647,US
+3290107648,3290107903,CA
+3290107904,3290111999,US
+3290112000,3290112255,CA
+3290112256,3290120191,US
3290120192,3290128383,MU
3290128384,3290136575,ZW
3290136576,3290169343,NG
3290169344,3290171135,ZA
3290171136,3290171391,SZ
-3290171392,3290171647,ZA
+3290171392,3290171903,ZA
3290171904,3290172159,NG
3290172160,3290172415,KE
3290172416,3290181631,ZA
-3290181632,3290181951,PR
-3290181952,3290181959,US
-3290181960,3290181967,PR
-3290181968,3290182031,US
-3290182032,3290182032,PR
-3290182033,3290182047,US
-3290182048,3290182078,PR
-3290182079,3290182143,US
-3290182144,3290182335,PR
-3290182336,3290182399,US
-3290182400,3290185727,PR
+3290181632,3290181887,US
+3290181888,3290182911,PR
+3290182912,3290183167,US
+3290183168,3290183423,PR
+3290183424,3290183679,US
+3290183680,3290184959,PR
+3290184960,3290185215,US
+3290185216,3290185727,PR
3290185728,3290226687,ZA
3290226688,3290230783,MZ
3290230784,3290234879,BF
3290234880,3290243071,ZA
3290243072,3290245119,ZW
3290245120,3290246143,DZ
+3290246144,3290247167,NG
3290247168,3290249215,TZ
3290249216,3290251263,ZA
3290251264,3290259455,TT
@@ -137210,9 +70153,7 @@
3290447872,3290456063,AR
3290456064,3290460159,MZ
3290460160,3290464255,ML
-3290464256,3290471487,PR
-3290471488,3290471551,DO
-3290471552,3290472447,PR
+3290464256,3290472447,PR
3290472448,3290480639,ZA
3290480640,3290482687,AO
3290482688,3290484735,CF
@@ -137228,14 +70169,15 @@
3290955776,3290980351,CR
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
+3291103232,3291119615,ZA
3291152384,3291168767,ZA
3291168768,3291176959,TZ
3291176960,3291185151,ZW
@@ -137291,7 +70233,6 @@
3291215616,3291215871,BF
3291215872,3291216127,KE
3291216128,3291216383,LS
-3291216384,3291216639,AO
3291216640,3291216895,NG
3291217920,3291230207,ZA
3291230208,3291234303,GH
@@ -137304,22 +70245,17 @@
3291279360,3291283455,RW
3291283456,3291287551,NA
3291287552,3291291647,ZA
-3291291648,3291293375,TZ
-3291293376,3291293439,NG
-3291293440,3291293951,TZ
-3291293952,3291294079,KE
-3291294080,3291295743,TZ
+3291291648,3291295743,TZ
3291295744,3291299839,NG
-3291299840,3291316223,ZA
+3291299840,3291315199,ZA
+3291315200,3291316223,UG
3291316224,3291324415,TZ
3291324416,3291325439,AO
3291325440,3291326463,BW
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
@@ -137357,82 +70293,62 @@
3291408384,3291410431,GM
3291410432,3291412479,NG
3291412480,3291414527,DZ
-3291414528,3291431423,ZA
-3291431424,3291431551,NA
-3291431552,3291432191,ZA
-3291432192,3291432447,NA
-3291432448,3291432703,ZA
+3291414528,3291426815,ZA
+3291426816,3291430911,NA
+3291430912,3291432703,ZA
3291432704,3291432959,NA
-3291432960,3291433471,ZA
-3291433472,3291433727,NA
-3291433728,3291434239,ZA
-3291434240,3291434751,A2
-3291434752,3291435007,ZA
-3291435008,3291439103,A2
+3291432960,3291439103,ZA
+3291439104,3291447295,NG
3291447296,3291463679,CI
-3291480064,3291545599,SC
-3291742208,3292004351,ZA
+3291480064,3291488255,DE
+3291488256,3291496447,SC
+3291496448,3291512831,US
+3291512832,3291529215,SC
+3291529216,3291545599,US
+3291545600,3291545855,CI
+3291545856,3291546111,GM
+3291546112,3291546367,NA
+3291546368,3291546623,BI
+3291546624,3291546879,SZ
+3291546880,3291547135,TZ
+3291742208,3292004351,US
3292004352,3292266495,SC
+3292397568,3292528639,ZA
3300917248,3300921343,MU
+3300921344,3300925439,BJ
3300925440,3300929535,MG
-3300933632,3300950015,MU
-3300982784,3301179391,ZA
-3301179392,3301441535,SC
-3301441536,3301441567,ZA
-3301441568,3301441575,NG
-3301441576,3301441655,ZA
-3301441656,3301441663,NG
-3301441664,3301441815,ZA
-3301441816,3301441823,NG
-3301441824,3301441879,ZA
-3301441880,3301441887,NG
-3301441888,3301441911,ZA
-3301441912,3301441919,NG
-3301441920,3301441999,ZA
-3301442000,3301442007,NG
-3301442008,3301442351,ZA
-3301442352,3301442359,NG
-3301442360,3301442391,ZA
-3301442392,3301442399,NG
-3301442400,3301442415,ZA
-3301442416,3301442423,NG
-3301442424,3301442599,ZA
-3301442600,3301442607,NG
-3301442608,3301442679,ZA
-3301442680,3301442687,NG
-3301442688,3301442727,ZA
-3301442728,3301442735,NG
-3301442736,3301442823,ZA
-3301442824,3301442831,NG
-3301442832,3301443007,ZA
-3301443008,3301443015,NG
-3301443016,3301443295,ZA
-3301443296,3301443303,NG
-3301443304,3301443519,ZA
-3301443520,3301443527,NG
-3301443528,3301443591,ZA
-3301443592,3301443599,NG
-3301443600,3301443655,ZA
-3301443656,3301443663,NG
-3301443664,3301443695,ZA
-3301443696,3301443703,NG
-3301443704,3301443847,ZA
-3301443848,3301443855,NG
-3301443856,3301444383,ZA
-3301444384,3301444391,NG
-3301444392,3301444415,ZA
-3301444416,3301444431,NG
-3301444432,3301444599,ZA
-3301444600,3301444607,NG
-3301444608,3301445047,ZA
-3301445048,3301445055,NG
-3301445056,3301445063,ZA
-3301445064,3301445071,NG
-3301445072,3301445175,ZA
-3301445176,3301445183,NG
-3301445184,3301445255,ZA
-3301445256,3301445263,NG
-3301445264,3301445631,ZA
+3300933632,3300935679,MU
+3300937728,3300938751,MU
+3300941824,3300950015,MU
+3300953088,3300954111,MU
+3300982784,3301113855,ZA
+3301113856,3301146623,NG
+3301146624,3301175295,ZA
+3301175296,3301177343,AF
+3301177344,3301177599,ZA
+3301177600,3301179391,AF
+3301179392,3301181439,SC
+3301181440,3301182463,SE
+3301182464,3301212159,SC
+3301212160,3301214207,SE
+3301214208,3301215231,SC
+3301215232,3301216255,SE
+3301216256,3301244927,SC
+3301244928,3301246975,SE
+3301246976,3301311487,SC
+3301311488,3301313535,SA
+3301313536,3301314559,SC
+3301314560,3301315583,SE
+3301315584,3301318655,SC
+3301318656,3301322751,DE
+3301322752,3301330943,SA
+3301330944,3301335039,SE
+3301335040,3301339135,SA
+3301339136,3301347327,SE
+3301347328,3301351423,PL
+3301351424,3301375999,SE
+3301376000,3301441535,SC
+3301441536,3301445631,ZA
3301445632,3301453823,KE
3301453824,3301457919,ML
3301457920,3301462015,NG
@@ -137443,21 +70359,20 @@
3301471488,3301474047,NG
3301474048,3301474303,GH
3301474304,3301490687,MA
-3301494784,3301498879,TZ
+3301494784,3301498879,ZM
3301507328,3301507583,ZW
3301507584,3301507839,GH
3301507840,3301508095,EG
-3301508096,3301508607,MW
3301508608,3301509119,ZA
3301510144,3301511167,MW
-3301511168,3301513215,ZW
+3301511168,3301512191,ZW
+3301512192,3301513215,MU
3301513216,3301515263,EG
3301515264,3301523455,GH
3301523456,3301531647,CI
-3301539840,3301543935,A2
-3301543936,3301544959,KE
-3301544960,3301545215,A2
-3301545216,3301548031,KE
+3301539840,3301544191,KE
+3301544192,3301544959,DE
+3301544960,3301548031,KE
3301548032,3301556223,GH
3301556224,3301557759,DJ
3301557760,3301558015,US
@@ -137475,9 +70390,7 @@
3301638144,3301703679,TN
3301703680,3301834751,EG
3301834752,3301900287,MA
-3301900288,3301902663,NG
-3301902664,3301902671,CM
-3301902672,3301904383,NG
+3301900288,3301904383,NG
3301904384,3301908479,KE
3301908480,3301912575,ZA
3301912576,3301916671,MU
@@ -137516,6 +70429,10 @@
3302540800,3302541311,AO
3302541312,3302542335,NG
3302543360,3302544383,NG
+3302544384,3302544639,CM
+3302544640,3302544895,MU
+3302544896,3302545151,GH
+3302545152,3302545407,ZA
3302548480,3302548991,GH
3302548992,3302549503,ZA
3302549504,3302550015,KE
@@ -137524,7 +70441,6 @@
3302551040,3302551551,MU
3302551552,3302552063,EG
3302552064,3302552575,KE
-3302552576,3302552831,TZ
3302552832,3302553087,KE
3302553088,3302553343,EG
3302553344,3302553599,TZ
@@ -137538,12 +70454,9 @@
3302555648,3302621183,MA
3302621184,3302684671,EG
3302684672,3302686719,JO
-3302686720,3302752255,EG
-3302752256,3302753359,NG
-3302753360,3302753363,CM
-3302753364,3302753607,NG
-3302753608,3302753615,GH
-3302753616,3302760447,NG
+3302686720,3302750207,EG
+3302750208,3302752255,JO
+3302752256,3302760447,NG
3302760448,3302762495,ZA
3302762496,3302766591,US
3302766592,3302768639,ZA
@@ -137580,11 +70493,22 @@
3302956032,3302956287,CD
3302956544,3302957055,ZA
3302957056,3302957311,CG
+3302957312,3302957567,MZ
+3302957568,3302957823,GM
+3302957824,3302958079,NA
+3302958080,3302958335,BI
+3302958336,3302958591,SZ
+3302985728,3302987775,MU
3304062976,3304456191,SC
-3304456192,3304521727,ZA
+3304456192,3304521727,NG
3304521728,3304587263,SC
-3304587264,3305111551,ZA
-3305111552,3307208703,TN
+3304587264,3304718335,ZA
+3304849408,3305111551,ZA
+3305111552,3305130239,TN
+3305130240,3305130495,GP
+3305130496,3305362687,TN
+3305362688,3305362943,GP
+3305362944,3307208703,TN
3307208704,3309305855,EG
3309305856,3312451583,ZA
3312451584,3312975871,DZ
@@ -137593,7 +70517,9 @@
3313762304,3314024447,EG
3314024448,3314286591,KE
3314286592,3314548735,DZ
-3314548736,3314810879,MA
+3314548736,3314750463,MA
+3314750464,3314751487,US
+3314751488,3314810879,MA
3314810880,3314827263,AO
3314827264,3314829311,ZA
3314829312,3314831359,GM
@@ -137657,8 +70583,10 @@
3315462144,3315463167,ZA
3315463168,3315464191,SO
3315464192,3315465215,CD
-3315465216,3315466239,MU
-3315466240,3315482623,MZ
+3315465216,3315466239,CG
+3315466240,3315467263,MZ
+3315467264,3315467519,ZA
+3315467520,3315482623,MZ
3315482624,3315499007,MG
3315499008,3315515391,ZM
3315515392,3315531775,SC
@@ -137678,9 +70606,17 @@
3316645888,3317170175,KE
3317170176,3317301247,ZA
3317301248,3317432319,TZ
+3317432320,3317497855,NA
+3317497856,3317530623,CD
+3317530624,3317538815,LS
+3317538816,3317539071,ZA
+3317539072,3317547007,LS
+3317547008,3317563391,ZA
+3317563392,3317694463,GH
3317694464,3318218751,EG
3318218752,3318743039,DZ
3318743040,3318874111,SD
+3318874112,3318939647,NG
3318939648,3318947839,KE
3318947840,3318956031,NG
3318956032,3318964223,ZA
@@ -137693,11 +70629,17 @@
3319156736,3319160831,GW
3319160832,3319164927,NG
3319164928,3319166975,ZA
+3319166976,3319169023,ZW
3319169024,3319201791,CG
3319201792,3319234559,SL
3319234560,3319242751,LY
3319242752,3319250943,ZA
3319250944,3319255039,MG
+3319255040,3319257087,ZA
+3319257088,3319258111,LR
+3319258112,3319259135,CD
+3319259136,3319263231,ZA
+3319263232,3319267327,TZ
3319267328,3319398399,AO
3319398400,3319529471,MZ
3319529472,3319537663,ZM
@@ -137717,7 +70659,10 @@
3319660544,3319791615,EG
3319791616,3320053759,MU
3320053760,3320184831,ZA
+3320184832,3320250367,MA
3320250368,3320258559,MR
+3320258560,3320266751,LS
+3320266752,3320283135,GA
3320283136,3320285183,GM
3320285184,3320287231,GA
3320287232,3320289279,ZA
@@ -137736,10 +70681,17 @@
3320307712,3320308735,CV
3320308736,3320309759,LY
3320309760,3320310783,ZA
-3320310784,3320311807,SD
+3320310784,3320311807,SS
3320311808,3320312831,BJ
3320312832,3320313855,ZM
+3320313856,3320314879,BI
+3320314880,3320315903,CD
+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
@@ -137749,6 +70701,8 @@
3320507392,3320508415,KE
3320508416,3320509439,SC
3320509440,3320510463,RW
+3320510464,3320511487,LY
+3320511488,3320512511,ZA
3320512512,3320578047,MZ
3320578048,3320643583,ZA
3320643584,3320709119,KE
@@ -137792,10 +70746,7 @@
3321790464,3321806847,LS
3321806848,3321823231,SD
3321823232,3321839615,NG
-3321839616,3321843711,GH
-3321843712,3321853695,MU
-3321853696,3321853951,GH
-3321853952,3321855999,MU
+3321839616,3321855999,GH
3321856000,3321860095,CV
3321860096,3321864191,ZA
3321864192,3321868287,NG
@@ -137807,349 +70758,188 @@
3321885696,3321886719,NG
3321886720,3321887743,GA
3321887744,3321888767,NG
-3321954304,3321968639,US
+3321888768,3321968639,US
3321968640,3321970687,CA
-3321970688,3321987071,US
+3321970688,3322003455,US
+3322003456,3322019839,CA
3322019840,3322023935,US
3322023936,3322028031,CL
3322028032,3322036223,US
3322036224,3322052607,CA
-3322085376,3322167551,US
-3322167552,3322167807,GB
-3322167808,3322202111,US
+3322052608,3322202111,US
3322202112,3322203135,GB
-3322203136,3322250975,US
-3322250976,3322251007,IL
-3322251008,3322251335,US
-3322251336,3322251343,IL
-3322251344,3322254719,US
-3322254720,3322254783,CA
-3322254784,3322339583,US
+3322203136,3322339583,US
3322339584,3322339839,GB
-3322339840,3322361856,US
-3322361857,3322361864,AT
-3322361865,3322361870,US
-3322361871,3322361882,CY
-3322361883,3322361890,US
-3322361891,3322361906,RS
-3322361907,3322361914,GB
-3322361915,3322362047,US
-3322362048,3322362063,CN
-3322362064,3322362079,US
-3322362080,3322362111,VG
-3322362112,3322362367,US
-3322362368,3322362431,DE
-3322362432,3322363039,US
-3322363040,3322363071,BR
-3322363072,3322363327,US
-3322363328,3322363359,GB
-3322363360,3322609663,US
+3322339840,3322354175,US
+3322354176,3322354431,JP
+3322354432,3322609663,US
3322609664,3322610687,SA
-3322610688,3322642431,US
-3322675200,3322683391,US
+3322610688,3322683391,US
3322683392,3322691583,BR
-3322691584,3322691647,US
-3322691648,3322691655,KW
-3322691656,3322691791,US
-3322691792,3322691807,CA
-3322691808,3322691823,GB
-3322691824,3322691839,US
+3322691584,3322691839,US
3322691840,3322692095,SE
-3322692096,3322692223,US
-3322692224,3322692351,CA
-3322692352,3322692927,US
-3322692928,3322692935,KW
-3322692936,3322692943,US
-3322692944,3322692959,CA
-3322692960,3322692991,US
-3322692992,3322693119,CA
-3322693120,3322693183,US
-3322693184,3322693215,CA
-3322693216,3322693343,US
-3322693344,3322693375,CA
-3322693376,3322695775,US
-3322695776,3322695783,CA
-3322695784,3322695807,US
-3322695808,3322695871,AU
-3322695872,3322695903,US
-3322695904,3322695919,GB
-3322695920,3322706271,US
-3322706272,3322706303,CA
-3322706304,3322706959,US
-3322706960,3322706975,CA
-3322706976,3322707151,US
-3322707152,3322707167,CA
-3322707168,3322707327,US
-3322707328,3322707343,GB
-3322707344,3322707487,US
-3322707488,3322707519,CA
-3322707520,3322707551,US
-3322707552,3322707583,CA
-3322707584,3322707615,ID
-3322707616,3322707719,US
-3322707720,3322707727,ID
-3322707728,3322707967,US
-3322740736,3322773503,US
+3322692096,3322773503,US
+3322773504,3322806271,CA
3322806272,3322875903,US
3322880000,3322888191,AU
-3322888192,3322889199,US
-3322889200,3322889207,CN
-3322889208,3322889535,US
-3322889536,3322889599,CN
-3322889600,3322889607,PE
-3322889608,3322889839,US
-3322889840,3322889855,PE
-3322889856,3322890223,US
-3322890224,3322890239,BG
-3322890240,3322890423,US
-3322890424,3322890431,QA
-3322890432,3322890439,US
-3322890440,3322890447,QA
-3322890448,3322890719,US
-3322890720,3322890727,QA
-3322890728,3322892631,US
-3322892632,3322892639,IN
-3322892640,3322893063,US
-3322893064,3322893071,BR
-3322893072,3322893087,US
-3322893088,3322893119,BR
-3322893120,3322894207,US
-3322894208,3322894215,CN
-3322894216,3322894335,US
-3322894336,3322894399,CN
-3322894400,3322894703,US
-3322894704,3322894719,IN
-3322894720,3322897063,US
-3322897064,3322897071,QA
-3322897072,3322898839,US
-3322898840,3322898847,BR
-3322898848,3322899135,US
-3322899136,3322899143,IN
-3322899144,3322902831,US
-3322902832,3322902847,IN
-3322902848,3322903375,US
-3322903376,3322903383,GB
-3322903384,3322903423,US
-3322903424,3322903455,GB
-3322903456,3322903487,US
-3322903488,3322903495,GB
-3322903496,3322903519,US
-3322903520,3322903535,GB
-3322903536,3322904575,US
-3322937344,3322940671,US
-3322940672,3322940927,AP
-3322940928,3322945535,US
+3322888192,3322945535,US
3322945536,3322951679,CN
3322951680,3322970111,US
-3323003136,3323003391,JP
-3323003392,3323003647,US
-3323003904,3323013631,US
+3322970112,3323002879,CA
+3323002880,3323004671,US
+3323004928,3323013887,US
3323013888,3323014143,CA
3323014144,3323017727,US
3323017728,3323017983,CA
-3323017984,3323018239,US
-3323018752,3323020799,US
-3323020800,3323021055,AP
+3323017984,3323020799,US
+3323020800,3323021055,SG
3323021056,3323022591,US
3323022592,3323022847,GB
-3323022848,3323023103,US
-3323023360,3323031551,US
+3323022848,3323027455,US
+3323027456,3323027711,CA
+3323027712,3323030015,US
+3323030272,3323031807,US
3323032576,3323032831,US
3323032832,3323033087,IT
3323033088,3323033343,JP
+3323033344,3323033599,US
3323033600,3323034111,BR
3323034112,3323038719,US
3323038720,3323038975,CA
3323038976,3323048959,US
3323048960,3323049727,NL
-3323049728,3323061247,US
-3323061504,3323062015,US
-3323062016,3323062527,BR
-3323062784,3323068415,US
+3323049728,3323062271,US
+3323062272,3323062527,BR
+3323062528,3323064319,US
+3323064832,3323068415,US
3323199488,3323201535,US
3323201536,3323203583,CA
3323203584,3323207679,US
3323207680,3323215871,CA
-3323215872,3323232255,US
-3323267072,3323270420,US
+3323215872,3323224063,US
+3323224064,3323232255,NL
+3323232256,3323241727,US
+3323241728,3323241983,CA
+3323241984,3323244543,US
+3323244544,3323244671,CA
+3323244672,3323245319,US
+3323245320,3323245327,CA
+3323245328,3323270420,US
3323270421,3323270421,CH
-3323270422,3323330559,US
-3323330816,3323331071,US
-3323331072,3323331839,CA
-3323331840,3323342335,US
+3323270422,3323331583,US
+3323331584,3323331839,CA
+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
-3323395072,3323430015,US
-3323430016,3323430079,CA
-3323430080,3323430143,US
-3323430144,3323430399,CA
-3323430400,3323431943,US
-3323431944,3323431951,GB
-3323431952,3323432143,US
-3323432144,3323432151,GB
-3323432152,3323432255,US
-3323432256,3323432319,AU
-3323432320,3323432415,US
-3323432416,3323432447,IL
-3323432448,3323432703,US
-3323432704,3323432959,SE
-3323432960,3323432991,US
-3323432992,3323433023,MA
-3323433024,3323434239,US
-3323434240,3323434367,BG
-3323434368,3323434399,US
-3323434400,3323434431,BG
-3323434432,3323434463,US
-3323434464,3323434485,BG
-3323434486,3323434486,US
-3323434487,3323434495,BG
-3323434496,3323436031,US
-3323436032,3323436039,ES
-3323436040,3323436223,US
-3323436224,3323436255,IL
-3323436256,3323436559,US
-3323436560,3323436575,KW
-3323436576,3323436927,US
-3323436928,3323436935,ID
-3323436936,3323436991,US
-3323436992,3323437055,ID
-3323437056,3323437567,US
-3323437568,3323438079,CA
-3323438080,3323438111,AU
-3323438112,3323438911,US
-3323438912,3323438943,MA
-3323438944,3323460223,US
-3323460224,3323460287,BG
-3323460288,3323461119,US
+3323395072,3323402751,US
+3323403264,3323416399,US
+3323416400,3323416479,GB
+3323416480,3323437823,US
+3323437824,3323438079,CA
+3323438080,3323461119,US
3323461120,3323461375,GB
-3323461376,3323461503,CA
-3323461504,3323462655,US
+3323461376,3323462655,US
3323462656,3323463167,BR
-3323463168,3323494895,US
-3323494896,3323494911,GB
-3323494912,3323495015,US
-3323495016,3323495023,QA
-3323495024,3323497519,US
-3323497520,3323497527,QA
-3323497528,3323659263,US
+3323463168,3323477983,US
+3323477984,3323478015,GB
+3323478016,3323659263,US
3323659264,3323660543,NZ
+3323660544,3323661311,US
3323661312,3323662335,CA
3323662336,3323674623,US
-3323674624,3323678015,CA
-3323678016,3323678031,US
-3323678032,3323678047,CA
-3323678048,3323678055,US
-3323678056,3323678063,CA
-3323678064,3323678111,US
-3323678112,3323678127,CA
-3323678128,3323678135,US
-3323678136,3323678143,CA
-3323678144,3323678147,US
-3323678148,3323678151,CA
-3323678152,3323678159,US
-3323678160,3323678167,CA
-3323678168,3323678171,US
-3323678172,3323678207,CA
-3323678208,3323678511,US
-3323678512,3323678519,CA
-3323678520,3323678527,US
-3323678528,3323678607,CA
-3323678608,3323678635,US
-3323678636,3323678687,CA
-3323678688,3323678695,US
-3323678696,3323680255,CA
-3323680256,3323741439,US
+3323674624,3323678207,CA
+3323678208,3323678463,US
+3323678464,3323678523,CA
+3323678524,3323678527,US
+3323678528,3323678583,CA
+3323678584,3323678587,US
+3323678588,3323680327,CA
+3323680328,3323680328,US
+3323680329,3323680413,CA
+3323680414,3323680414,US
+3323680415,3323680511,CA
+3323680512,3323680767,US
+3323680768,3323681023,CA
+3323681024,3323681279,US
+3323681280,3323682955,CA
+3323682956,3323682959,US
+3323682960,3323684863,CA
+3323684864,3323685375,US
+3323685376,3323685887,CA
+3323685888,3323687423,US
+3323687424,3323688959,CA
+3323688960,3323689471,US
+3323689472,3323690495,CA
+3323690496,3323741439,US
3323741440,3323741695,GB
3323741696,3323747327,US
3323747328,3323747583,GB
-3323747584,3324031999,US
+3323747584,3323987967,US
+3323987968,3323988223,KN
+3323988224,3324011007,US
+3324011008,3324011263,KN
+3324011264,3324023039,US
+3324023040,3324023295,KN
+3324023296,3324030463,US
+3324030464,3324030719,KN
+3324030720,3324031999,US
3324032000,3324032255,KN
3324032256,3324033791,US
3324033792,3324034047,KN
3324034048,3324035327,US
-3324035328,3324035839,KN
-3324035840,3324040191,US
+3324035328,3324035583,KN
+3324035584,3324040191,US
3324040192,3324040447,AU
3324040448,3324047359,US
3324047360,3324047615,KN
3324047616,3324051455,US
3324051456,3324182527,CA
3324182528,3324193279,US
-3324193792,3324194815,CA
-3324194816,3324195167,US
-3324195168,3324195199,GB
-3324195200,3324195775,US
-3324195776,3324195807,CA
-3324195808,3324196319,US
-3324196320,3324196335,GB
-3324196336,3324196639,US
-3324196640,3324196671,DO
-3324196672,3324255231,US
+3324193280,3324193791,CA
+3324193792,3324255231,US
3324255232,3324256255,VI
-3324256256,3324259327,SA
-3324259328,3324259583,US
-3324259584,3324259839,SA
-3324259840,3324266495,US
-3324266496,3324266751,AP
-3324266752,3324270079,US
-3324270080,3324270591,EU
-3324270592,3324277247,US
+3324256256,3324260095,SA
+3324260096,3324277759,US
3324277760,3324278783,CA
-3324280832,3324354559,US
+3324278784,3324354559,US
3324354560,3324362751,CA
3324362752,3324379135,US
3324379136,3324380159,CA
-3324380160,3324470271,US
+3324380160,3324380927,US
+3324380928,3324381183,CA
+3324381184,3324470271,US
3324470272,3324474367,GB
3324474368,3324522495,US
3324522496,3324522751,CN
3324522752,3324523007,US
-3324523008,3324523431,CN
-3324523432,3324523455,US
-3324523456,3324523559,CN
-3324523560,3324523567,US
-3324523568,3324523575,CN
-3324523576,3324523583,US
-3324523584,3324524047,CN
-3324524048,3324524055,US
-3324524056,3324524255,CN
-3324524256,3324524287,US
-3324524288,3324524439,CN
-3324524440,3324524447,US
-3324524448,3324524543,CN
-3324524544,3324524551,US
-3324524552,3324524783,CN
-3324524784,3324524791,US
-3324524792,3324524991,CN
-3324524992,3324525055,US
-3324525056,3324525095,CN
-3324525096,3324525103,US
-3324525104,3324525111,CN
-3324525112,3324525119,US
-3324525120,3324525583,CN
-3324525584,3324525631,US
-3324525632,3324525695,CN
-3324525696,3324525791,US
-3324525792,3324526015,CN
-3324526016,3324526335,US
+3324523008,3324523263,CN
+3324523264,3324525311,US
+3324525312,3324525567,CN
+3324525568,3324526335,US
3324526336,3324526591,CN
-3324526592,3324579839,US
+3324526592,3324533247,US
+3324533248,3324533503,DE
+3324533504,3324579839,US
3324582912,3324583935,CA
-3324583936,3324588031,CL
-3324588032,3324642303,US
+3324583936,3324587775,CL
+3324587776,3324642303,US
3324642304,3324642559,CA
3324642560,3324645887,US
3324645888,3324646143,CA
@@ -138219,104 +71009,190 @@
3324704000,3324704255,CA
3324704256,3324706303,US
3324706304,3324706559,CA
-3324706560,3324732415,US
-3324732416,3324732671,EU
-3324732672,3324772351,US
-3324837888,3324843799,US
-3324843800,3324843801,AP
-3324843802,3324844543,US
-3324844544,3324844799,EU
-3324844800,3324936191,US
-3324968960,3324980223,US
+3324706560,3324811047,US
+3324811048,3324811055,AU
+3324811056,3324843775,US
+3324843776,3324843799,AU
+3324843800,3324843801,US
+3324843802,3324844031,AU
+3324844032,3324980223,US
3324980224,3324981247,CA
-3324981248,3325001727,US
+3324981248,3325034495,US
3325034496,3325035519,NZ
3325035520,3325067263,US
-3325100032,3325128703,US
+3325067264,3325100287,CA
+3325100288,3325100543,US
+3325101056,3325108223,US
+3325110272,3325128703,US
3325128704,3325129215,TH
3325129216,3325131775,US
3325131776,3325132031,AU
3325132032,3325132799,US
-3325132800,3325134335,BR
-3325134336,3325134591,US
-3325134848,3325135359,US
+3325132800,3325133823,BR
+3325134336,3325136127,US
3325136128,3325136383,CA
-3325136384,3325136639,US
-3325136896,3325142015,US
+3325136384,3325142015,US
3325142016,3325142271,CR
3325142272,3325144831,US
3325144832,3325145087,CA
3325145088,3325169663,US
3325169664,3325171711,BR
3325171712,3325190143,US
-3325190144,3325198335,CA
+3325190144,3325191687,CA
+3325191688,3325191695,US
+3325191696,3325202047,CA
+3325202048,3325202079,US
+3325202080,3325204479,CA
+3325204480,3325205503,US
+3325205504,3325206428,CA
+3325206429,3325206429,US
+3325206430,3325206639,CA
+3325206640,3325206655,US
+3325206656,3325207807,CA
+3325207808,3325207935,US
+3325207936,3325211419,CA
+3325211420,3325211423,US
+3325211424,3325211647,CA
+3325211648,3325211775,US
+3325211776,3325213687,CA
+3325213688,3325213695,US
+3325213696,3325216527,CA
+3325216528,3325216531,US
+3325216532,3325217939,CA
+3325217940,3325217943,US
+3325217944,3325218207,CA
+3325218208,3325218239,US
+3325218240,3325220635,CA
+3325220636,3325220636,US
+3325220637,3325220863,CA
+3325220864,3325220879,US
+3325220880,3325221451,CA
+3325221452,3325221455,US
+3325221456,3325221791,CA
+3325221792,3325221795,FR
+3325221796,3325224671,CA
+3325224672,3325224675,US
+3325224676,3325225671,CA
+3325225672,3325225675,US
+3325225676,3325226592,CA
+3325226593,3325226593,US
+3325226594,3325226751,CA
+3325226752,3325227007,US
+3325227008,3325229591,CA
+3325229592,3325229599,US
+3325229600,3325230319,CA
+3325230320,3325230323,US
+3325230324,3325231103,CA
3325231104,3325232127,US
3325233152,3325234175,US
3325234176,3325234431,SA
3325234432,3325249279,US
3325249280,3325249535,CO
-3325249536,3325257727,US
+3325249536,3325250303,US
+3325250304,3325250559,CA
+3325250560,3325256703,US
+3325257216,3325257727,US
3325257728,3325258751,CA
3325258752,3325259775,US
3325259776,3325261311,CA
3325261312,3325265919,US
3325265920,3325266943,CA
-3325267200,3325267711,US
+3325266944,3325267711,US
3325267712,3325268735,SY
3325268736,3325269759,US
3325269760,3325270015,CA
3325270016,3325271039,US
3325271040,3325271295,CA
-3325271296,3325271551,US
-3325271808,3325281023,US
+3325271296,3325278719,US
+3325278976,3325281023,US
3325281024,3325281279,NZ
-3325281280,3325284863,US
+3325281536,3325284863,US
3325284864,3325285119,AU
-3325285376,3325304831,US
+3325285376,3325296383,US
+3325296384,3325296639,CA
+3325296640,3325304063,US
+3325304064,3325304319,AS
+3325304320,3325304831,US
3325304832,3325307647,CA
3325307648,3325307903,BB
3325307904,3325313023,CA
-3325313024,3325323687,US
-3325323688,3325323695,GB
-3325323696,3325329407,US
+3325313024,3325337599,US
+3325337600,3325338111,GB
+3325338112,3325362175,US
3325362176,3325427711,CA
-3325427712,3325450239,ZA
-3325451008,3325451263,ZA
-3325451264,3325452287,US
-3325452800,3325453311,ZA
+3325427712,3325427967,US
+3325427968,3325430527,MU
+3325430528,3325431551,US
+3325431552,3325433343,MU
+3325433344,3325438975,ZA
+3325438976,3325442559,MU
+3325442560,3325443583,ZA
+3325443584,3325444095,US
+3325444096,3325444351,MU
+3325444352,3325444607,ZA
+3325444608,3325448447,MU
+3325448448,3325448959,US
+3325448960,3325450239,MU
+3325450240,3325451007,US
+3325451008,3325451263,MU
+3325451264,3325452799,US
+3325452800,3325453311,MU
3325453312,3325454335,CA
-3325456384,3325456751,US
-3325456752,3325456759,CA
-3325456760,3325456855,US
-3325456856,3325456863,PH
-3325456864,3325457015,US
-3325457016,3325457023,PH
-3325457024,3325457975,US
-3325457976,3325457983,CA
-3325457984,3325459679,US
-3325459680,3325459687,CA
-3325459688,3325459983,US
-3325459984,3325459999,CA
-3325460000,3325460079,US
-3325460080,3325460095,CA
-3325460096,3325460479,US
-3325463808,3325464063,ZA
-3325464064,3325465087,NA
-3325465088,3325493247,ZA
-3325493248,3325497343,US
-3325497344,3325501439,PR
-3325501440,3325505535,US
+3325454336,3325463807,US
+3325463808,3325466623,MU
+3325466624,3325467135,US
+3325467136,3325469695,MU
+3325469696,3325469951,US
+3325469952,3325470207,MU
+3325470208,3325471231,US
+3325471232,3325471487,MU
+3325471488,3325471999,US
+3325472000,3325472255,ZA
+3325472256,3325474303,MU
+3325474304,3325474559,US
+3325474560,3325478655,MU
+3325478656,3325478911,ZA
+3325478912,3325479423,US
+3325479424,3325481471,ZA
+3325481472,3325481727,MU
+3325481728,3325481983,US
+3325481984,3325483007,CA
+3325483008,3325483775,US
+3325483776,3325484287,MU
+3325484288,3325484799,US
+3325484800,3325485055,ZA
+3325485056,3325485311,US
+3325485312,3325486591,MU
+3325486592,3325486847,US
+3325486848,3325487103,ZA
+3325487104,3325487359,MU
+3325487360,3325487615,US
+3325487616,3325487871,ZA
+3325487872,3325490943,US
+3325490944,3325492991,MU
+3325492992,3325497343,US
+3325497344,3325499903,PR
+3325499904,3325505535,US
3325505536,3325509631,CA
-3325509632,3325591551,US
-3325624320,3325640703,US
+3325509632,3325551615,US
+3325551616,3325552639,CA
+3325552640,3325562879,US
+3325565440,3325573119,US
+3325573120,3325575167,BB
+3325575168,3325630975,US
+3325630976,3325631487,CA
+3325631488,3325640703,US
3325640704,3325644799,CA
3325644800,3325689855,US
3325689856,3325690367,JM
-3325690368,3325691903,US
-3325691904,3325693951,BR
-3325693952,3325722623,US
+3325690368,3325691647,US
+3325691648,3325691903,CA
+3325691904,3325693183,BR
+3325693184,3325722623,US
3325722624,3325755391,CA
-3325755392,3325956095,US
+3325755392,3325886719,US
+3325887488,3325888511,US
+3325890560,3325956095,US
3325956096,3325960191,CA
3325960192,3325976063,US
3325976064,3325976319,CA
@@ -138324,31 +71200,19 @@
3325980672,3325980927,CA
3325980928,3325992447,US
3325992448,3325992959,CA
-3325992960,3325996799,US
+3325992960,3325993983,US
+3325993984,3325994239,CA
+3325994240,3325996799,US
3325996800,3325997055,CA
-3325997056,3326189567,US
-3326189568,3326189823,US
-3326189824,3326190591,US
-3326190592,3326190719,US
-3326190720,3326190847,US
-3326190848,3326190975,US
-3326190976,3326191295,US
-3326191296,3326191359,US
-3326191360,3326191551,US
-3326191552,3326191583,US
-3326191584,3326349823,US
+3325997056,3326349823,US
3326349824,3326350335,EC
-3326350336,3326390527,US
-3326390528,3326390535,CA
-3326390536,3326406655,US
+3326350336,3326406655,US
3326406656,3326408703,CO
3326408704,3326413823,US
3326413824,3326414335,YE
3326414336,3326420991,US
3326420992,3326423039,PR
-3326423040,3326492239,US
-3326492240,3326492255,CA
-3326492256,3326526463,US
+3326423040,3326526463,US
3326526464,3326526719,CA
3326526720,3326613503,US
3326613504,3326615551,CA
@@ -138356,27 +71220,32 @@
3326619648,3326623743,CA
3326623744,3326631935,US
3326631936,3326640127,CA
-3326640128,3326676991,US
-3326680832,3326682623,CA
+3326640128,3326680831,US
+3326680832,3326681087,CA
+3326681088,3326681343,US
+3326681344,3326682623,CA
3326682624,3326682879,US
-3326682880,3326713343,CA
+3326682880,3326697215,CA
+3326697216,3326699519,US
+3326699520,3326713343,CA
3326713344,3326714111,US
3326714112,3326716927,CA
3326716928,3326717951,US
-3326717952,3326729215,CA
+3326717952,3326726399,CA
+3326726400,3326726655,US
+3326726656,3326729215,CA
3326729216,3326729471,JP
3326729472,3326729727,CA
3326729728,3326734335,US
3326734336,3326737663,CA
3326737664,3326737919,US
3326737920,3326738175,CA
-3326738432,3326764863,US
-3326764864,3326764871,GB
-3326764872,3326768887,US
-3326768888,3326768895,GB
-3326768896,3326770863,US
-3326770864,3326770871,GB
-3326770872,3326952191,US
+3326738176,3326740479,US
+3326741760,3326742015,US
+3326742528,3326746623,US
+3326749184,3326796863,US
+3326796864,3326796927,GB
+3326796928,3326952191,US
3326952192,3326952447,AS
3326952448,3326953983,US
3326953984,3326954495,AS
@@ -138386,46 +71255,65 @@
3327162368,3327162623,GB
3327162624,3327162879,US
3327162880,3327163391,GB
-3327163392,3327172863,US
-3327172864,3327173119,AP
-3327173120,3327197183,US
+3327163392,3327197183,US
3327197184,3327198207,JP
3327198208,3327199231,US
3327199232,3327200255,BR
3327200256,3327256831,US
3327256832,3327257087,GU
-3327257088,3327426559,US
+3327257088,3327397375,US
+3327397376,3327397887,CA
+3327397888,3327426559,US
3327426560,3327459327,CA
-3327459328,3327591237,US
-3327591238,3327591238,US
-3327591239,3327723519,US
-3327723520,3327725567,CA
-3327725568,3327803647,US
-3327803648,3327803903,AP
-3327803904,3327805695,US
-3327807488,3327811583,CA
+3327459328,3327723519,US
+3327723520,3327725311,CA
+3327725312,3327788287,US
+3327788288,3327789055,CA
+3327789056,3327806463,US
+3327806464,3327811583,CA
3327811584,3327885311,US
3327885312,3327918079,CA
3327918080,3327995903,US
3327995904,3327996927,CW
3327996928,3328028671,US
3328028672,3328030719,CW
-3328030720,3328180223,US
-3328180224,3328202751,CA
+3328030720,3328180479,US
+3328180480,3328181247,CA
+3328181248,3328181759,US
+3328181760,3328185855,CA
+3328185856,3328186111,US
+3328186112,3328187647,CA
+3328187648,3328187903,US
+3328187904,3328196351,CA
+3328196352,3328196607,US
+3328196608,3328202751,CA
3328202752,3328204799,US
3328204800,3328214783,CA
3328214784,3328215295,GB
-3328215296,3328223231,CA
-3328223232,3328225279,US
-3328225280,3328235007,CA
-3328235008,3328235263,US
-3328235520,3328241663,CA
+3328215296,3328224255,CA
+3328224256,3328224511,US
+3328224512,3328235007,CA
+3328235008,3328235519,US
+3328235520,3328236543,CA
+3328236544,3328237311,US
+3328237312,3328241663,CA
3328241664,3328242943,US
3328242944,3328243199,GB
3328243200,3328245759,CA
-3328245760,3328393727,US
-3328393728,3328393983,GB
-3328393984,3328394239,US
+3328245760,3328265471,US
+3328265728,3328271871,US
+3328272128,3328297471,US
+3328297984,3328299775,US
+3328299776,3328301055,CA
+3328301056,3328306431,US
+3328306432,3328306687,CA
+3328306688,3328307455,US
+3328307968,3328309247,US
+3328309504,3328358399,US
+3328358400,3328360447,CA
+3328360448,3328383999,US
+3328384000,3328385023,CA
+3328385024,3328394239,US
3328394240,3328394495,GB
3328394496,3328414719,US
3328414720,3328414975,CH
@@ -138440,29 +71328,31 @@
3328475136,3328477183,CA
3328477184,3328479231,US
3328479232,3328481279,CA
-3328481280,3328617983,US
+3328481280,3328481791,US
+3328481792,3328482303,CA
+3328482304,3328510064,US
+3328510065,3328510077,AE
+3328510078,3328515071,US
+3328515072,3328516095,DM
+3328516096,3328617983,US
3328617984,3328618239,CA
-3328618240,3328629503,US
-3328629504,3328629759,EU
-3328629760,3328630783,US
+3328618240,3328630015,US
+3328630016,3328630271,CA
+3328630272,3328630783,US
3328630784,3328631807,CA
3328631808,3328638975,US
3328638976,3328704511,CA
3328704512,3328774399,US
3328774400,3328775935,CA
-3328775936,3328776703,US
-3328778240,3328788479,US
+3328775936,3328788479,US
3328788480,3328789503,FR
-3328789504,3328790015,AP
-3328790016,3328794623,US
+3328789504,3328794623,US
3328794624,3328802815,CA
3328802816,3328826813,US
3328826814,3328826814,SG
3328826815,3329230335,US
3329230336,3329230591,JP
-3329230592,3329497343,US
-3329497344,3329497599,KE
-3329497600,3329498623,US
+3329230592,3329498623,US
3329498624,3329498879,ES
3329498880,3330613247,US
3330613248,3330614783,CA
@@ -138471,15 +71361,15 @@
3330617344,3330621183,US
3330621184,3330623743,CA
3330623744,3330624255,US
+3330624256,3330624511,CA
3330624512,3330625535,US
3330625536,3330627071,GB
3330627072,3330640895,US
3330640896,3330641151,CH
-3330641152,3330641663,US
-3330641920,3330646527,US
+3330641152,3330646527,US
3330646528,3330647295,CA
3330647296,3330647807,US
-3330648064,3330649343,US
+3330648064,3330649599,US
3330649600,3330649855,CA
3330649856,3330662911,US
3330662912,3330663167,GB
@@ -138487,16 +71377,13 @@
3330664192,3330664447,CA
3330664448,3330677759,US
3330677760,3330678783,CA
-3330678784,3330684927,US
-3330684928,3330685183,IN
-3330685184,3330714367,US
+3330678784,3330714367,US
3330714368,3330714623,CA
3330714624,3330726655,US
3330726656,3330726911,CA
3330726912,3330754559,US
3330754560,3330754815,CA
-3330754816,3330755071,US
-3330755328,3330763519,US
+3330754816,3330763519,US
3330763520,3330763775,CA
3330763776,3330765823,US
3330765824,3330766335,CA
@@ -138504,20 +71391,21 @@
3330771200,3330771711,CH
3330771712,3330778879,US
3330778880,3330779135,GB
-3330779136,3330791423,US
+3330779136,3330785279,US
+3330785280,3330785791,CA
+3330785792,3330791423,US
3330791424,3330791679,CA
-3330791680,3330815743,US
+3330791680,3330812927,US
+3330812928,3330813951,CA
+3330813952,3330815743,US
3330815744,3330815999,CA
-3330816000,3330817882,US
-3330817883,3330817887,CL
-3330817888,3330817899,ES
-3330817900,3330883583,US
+3330816000,3330866943,US
+3330866944,3330867199,CA
+3330867200,3330883583,US
3330883584,3330884351,NL
3330884352,3330884863,US
3330884864,3330885119,GB
-3330885120,3330888063,US
-3330888064,3330888127,NL
-3330888128,3330888191,US
+3330885120,3330888191,US
3330888192,3330888703,AU
3330888704,3330888959,US
3330888960,3330889215,CH
@@ -138536,149 +71424,113 @@
3330897920,3330898175,CA
3330898176,3330898431,DE
3330898432,3330898943,FR
-3330898944,3331102463,US
+3330898944,3330904575,US
+3330904576,3330904831,CA
+3330904832,3331098111,US
+3331098112,3331098367,CA
+3331098368,3331102463,US
3331102464,3331102719,CA
3331102720,3331194879,US
3331194880,3331260415,AU
-3331260416,3331352919,US
-3331352920,3331352920,US
-3331352921,3331356671,US
+3331260416,3331356671,US
3331356672,3331357183,BZ
3331357184,3331362815,US
3331362816,3331366911,CA
-3331366912,3331371279,US
-3331371280,3331371295,SE
-3331371296,3331371327,US
-3331371328,3331371343,SE
-3331371344,3331371375,US
-3331371376,3331371391,SE
-3331371392,3331371455,US
-3331371456,3331371471,ES
-3331371472,3331371775,US
-3331371776,3331371823,GB
-3331371824,3331371999,US
-3331372000,3331372031,GB
-3331372032,3331372351,US
-3331372352,3331372367,ES
-3331372368,3331374079,US
-3331374080,3331374335,CA
-3331374336,3331527167,US
+3331366912,3331523583,US
+3331523584,3331523839,GB
+3331523840,3331524095,US
+3331524096,3331524607,SG
+3331524608,3331527167,US
3331527168,3331527679,GB
3331527680,3331563519,US
3331563520,3331563775,CH
-3331563776,3331617855,US
-3331617856,3331617919,GB
-3331617920,3331620079,US
-3331620080,3331620095,GB
-3331620096,3331620527,US
-3331620528,3331620543,GB
-3331620544,3331633407,US
+3331563776,3331565567,US
+3331565568,3331566079,CA
+3331566080,3331575807,US
+3331575808,3331576831,KY
+3331576832,3331632639,US
+3331632640,3331632895,CA
+3331632896,3331633407,US
3331633408,3331633919,CH
3331633920,3331647231,US
3331647232,3331647487,CA
3331647488,3331649279,US
3331649280,3331649535,CA
-3331649536,3331818495,US
+3331649536,3331798271,US
+3331798272,3331798527,AU
+3331798528,3331818495,US
3331818496,3331818751,MX
-3331818752,3331853823,US
-3331853824,3331854079,AP
-3331854080,3331868161,US
-3331868162,3331868162,EU
-3331868163,3332002303,US
-3332002304,3332002304,CA
-3332002305,3332002558,US
-3332002559,3332002559,CA
-3332002560,3332002879,US
-3332002880,3332002943,CA
-3332002944,3332003071,US
-3332003072,3332003079,NO
-3332003080,3332003327,CA
-3332003328,3332003359,US
-3332003360,3332003455,CA
-3332003456,3332003583,UA
-3332003584,3332003584,US
-3332003585,3332003838,IN
-3332003839,3332003847,US
-3332003848,3332003855,CA
-3332003856,3332003903,US
-3332003904,3332003905,CA
-3332003906,3332003909,MY
-3332003910,3332003911,CA
-3332003912,3332003919,CN
-3332003920,3332003920,CA
-3332003921,3332003924,MY
-3332003925,3332003929,CA
-3332003930,3332003934,US
-3332003935,3332004096,CA
-3332004097,3332004158,US
-3332004159,3332004160,CA
-3332004161,3332004222,US
-3332004223,3332004275,CA
-3332004276,3332004282,US
-3332004283,3332004303,CA
-3332004304,3332004335,US
-3332004336,3332004352,CA
-3332004353,3332004479,US
-3332004480,3332004480,CA
-3332004481,3332004542,US
-3332004543,3332004736,CA
-3332004737,3332004798,US
-3332004799,3332004800,CA
-3332004801,3332004830,US
-3332004831,3332004831,CA
-3332004832,3332004863,US
-3332004864,3332005119,CA
-3332005120,3332005182,UA
-3332005183,3332005190,DK
-3332005191,3332005206,CA
-3332005207,3332005214,US
-3332005215,3332005222,PH
-3332005223,3332005230,BR
-3332005231,3332005246,US
-3332005247,3332005254,CA
-3332005255,3332005262,DE
-3332005263,3332005278,US
-3332005279,3332005286,GB
-3332005287,3332005375,CA
-3332005376,3332005438,US
-3332005439,3332005503,IN
-3332005504,3332005632,CA
-3332005633,3332005886,US
-3332005887,3332005887,CA
-3332005888,3332026879,US
-3332028416,3332030463,CA
+3331818752,3331840111,US
+3331840112,3331840115,CA
+3331840116,3331935231,US
+3331935232,3331936255,CA
+3331936256,3331983103,US
+3331983104,3331983359,CA
+3331983360,3331988479,US
+3331988480,3331989503,CA
+3331989504,3332002047,US
+3332002048,3332002559,CA
+3332002560,3332002815,US
+3332002816,3332003583,CA
+3332003584,3332028415,US
+3332028416,3332028927,CA
+3332028928,3332029183,US
+3332029184,3332030463,CA
3332030464,3332083967,US
-3332083968,3332084223,AP
-3332084224,3332095231,US
-3332095232,3332095487,EU
-3332095488,3332440063,US
-3332440064,3332460543,CA
+3332083968,3332084223,AU
+3332084224,3332423423,US
+3332423424,3332423679,CA
+3332423680,3332440319,US
+3332440320,3332460543,CA
3332460544,3332460799,US
3332460800,3332461311,CA
-3332461568,3332473855,CA
+3332461312,3332461567,US
+3332461568,3332462335,CA
+3332462336,3332462591,US
+3332462592,3332473855,CA
3332473856,3332477951,US
3332477952,3332482303,CA
-3332482560,3332483071,US
-3332483072,3332484095,A2
+3332482304,3332484095,US
3332484096,3332491263,CA
-3332491264,3332491775,US
-3332492032,3332503039,CA
+3332491264,3332492031,US
+3332492032,3332500735,CA
+3332500736,3332500991,US
+3332500992,3332503039,CA
3332503040,3332503551,US
-3332503552,3332528127,CA
+3332503552,3332505343,CA
+3332505344,3332505855,US
+3332505856,3332508671,CA
+3332508672,3332508927,US
+3332508928,3332528127,CA
3332528128,3332529663,US
3332529664,3332554751,CA
3332554752,3332558847,US
3332558848,3332562943,CA
3332562944,3332563455,US
-3332563456,3332579327,CA
+3332563456,3332564479,CA
+3332564480,3332564735,US
+3332564736,3332570879,CA
+3332570880,3332571391,US
+3332571392,3332579327,CA
3332579328,3332581375,US
3332581376,3332590079,CA
3332590080,3332590591,US
-3332590592,3332616191,CA
+3332590592,3332594687,CA
+3332594688,3332594943,US
+3332594944,3332595455,CA
+3332595456,3332595711,US
+3332595712,3332610559,CA
+3332610560,3332611071,US
+3332611072,3332611327,CA
+3332611328,3332611583,US
+3332611584,3332616191,CA
3332616192,3332616959,US
-3332616960,3332617471,CA
-3332618240,3332624383,US
-3332624384,3332724735,CA
+3332616960,3332617727,CA
+3332617728,3332624383,US
+3332624384,3332625919,CA
+3332626688,3332636415,CA
+3332636416,3332636671,US
+3332636672,3332724735,CA
3332724736,3332726783,PM
3332726784,3332737023,CA
3332737024,3332738047,PM
@@ -138686,67 +71538,77 @@
3332744192,3332745215,PM
3332745216,3332752127,CA
3332752128,3332752383,PM
-3332752384,3332866303,CA
-3332867072,3332874239,US
-3332874240,3332876287,CA
-3332878336,3332882431,US
+3332752384,3332833279,CA
+3332833280,3332833535,US
+3332833536,3332841471,CA
+3332841472,3332841727,US
+3332841728,3332866303,CA
+3332866304,3332874239,US
+3332874240,3332875007,CA
+3332875008,3332875263,US
+3332875264,3332876287,CA
+3332876288,3332882431,US
3332882432,3332890623,KN
-3332890624,3332894719,US
-3332896768,3332906495,CA
-3332906496,3332906751,US
-3332907008,3332925695,CA
-3332926464,3332927487,US
-3332927488,3332947967,CA
+3332890624,3332897279,US
+3332897280,3332898559,CA
+3332898560,3332899071,US
+3332899072,3332906495,CA
+3332906496,3332909567,US
+3332909568,3332909823,CA
+3332909824,3332910079,US
+3332910080,3332922879,CA
+3332922880,3332923391,US
+3332923392,3332925695,CA
+3332925696,3332929023,US
+3332929024,3332930047,CA
+3332930560,3332931327,US
+3332931328,3332947967,CA
3332947968,3332948223,US
3332948224,3332966143,CA
3332966144,3332966399,US
-3332966400,3332988927,CA
+3332966400,3332979967,CA
+3332979968,3332980735,US
+3332980736,3332988927,CA
3332988928,3332989951,US
-3332989952,3333012479,CA
+3332989952,3332997119,CA
+3332997120,3332997375,US
+3332997376,3333008383,CA
+3333008384,3333008895,US
+3333008896,3333012479,CA
3333012480,3333012991,US
-3333012992,3333023743,CA
-3333023744,3333024767,US
-3333025280,3333029887,CA
-3333029888,3333212415,US
-3333212416,3333212927,US
-3333212928,3333213055,US
-3333213056,3333213439,US
-3333213440,3333213695,US
-3333213696,3333214079,US
-3333214080,3333246505,US
-3333246506,3333246506,US
-3333246507,3333385983,US
+3333012992,3333014015,CA
+3333014016,3333014527,US
+3333014528,3333017599,CA
+3333017600,3333018111,US
+3333018112,3333023231,CA
+3333023232,3333025279,US
+3333025280,3333029631,CA
+3333029632,3333374975,US
+3333374976,3333375231,IN
+3333375232,3333385983,US
3333385984,3333386239,JP
-3333386240,3333396689,US
-3333396690,3333396691,EU
-3333396692,3333427967,US
+3333386240,3333427967,US
3333427968,3333428007,GB
-3333428008,3333428008,EU
+3333428008,3333428008,US
3333428009,3333428223,GB
-3333428224,3333429759,US
-3333431296,3333480191,US
+3333428224,3333476607,US
+3333477376,3333480191,US
3333480192,3333481471,DE
-3333481472,3333502975,US
-3333502976,3333503135,CN
-3333503136,3333503167,US
-3333503168,3333503359,CN
-3333503360,3333503391,US
-3333503392,3333503783,CN
-3333503784,3333503791,US
-3333503792,3333504095,CN
-3333504096,3333504127,US
-3333504128,3333504431,CN
-3333504432,3333504447,US
-3333504448,3333505023,CN
-3333505024,3333593855,US
+3333481472,3333517823,US
+3333517824,3333518335,CA
+3333518336,3333583871,US
+3333583872,3333584895,CA
+3333584896,3333593855,US
3333593856,3333594111,CA
-3333594112,3333603327,US
-3333603328,3333603328,GB
-3333603329,3333603329,EU
-3333603330,3333603583,GB
-3333603584,3333609733,US
+3333594112,3333609733,US
3333609734,3333609734,AU
-3333609735,3333701887,US
+3333609735,3333614591,US
+3333614592,3333614847,GB
+3333614848,3333624319,US
+3333624320,3333624575,CA
+3333624576,3333675775,US
+3333675776,3333676031,CA
+3333676032,3333701887,US
3333701888,3333702143,GB
3333702144,3333702399,US
3333702400,3333702655,CH
@@ -138769,9 +71631,7 @@
3333781504,3333783551,CA
3333783552,3333801727,US
3333801728,3333801983,CA
-3333801984,3333825791,US
-3333825792,3333826047,EU
-3333826048,3333829657,US
+3333801984,3333829657,US
3333829658,3333829658,IN
3333829659,3333859839,US
3333859840,3333860095,BM
@@ -138785,9 +71645,7 @@
3333997824,3333998079,CA
3333998080,3334006781,US
3334006782,3334006782,NL
-3334006783,3334007551,US
-3334007552,3334007807,EU
-3334007808,3334019583,US
+3334006783,3334020095,US
3334020096,3334021119,CA
3334021120,3334138623,US
3334138624,3334138879,BM
@@ -138797,10 +71655,14 @@
3334932224,3334932479,CA
3334932480,3334934015,US
3334934016,3334934527,CA
-3334934528,3334946815,US
+3334934528,3334962431,US
+3334962432,3334963199,NL
3334963200,3334995967,US
3334995968,3334998527,PH
-3334998528,3335012351,US
+3334998528,3335004655,US
+3335004656,3335004671,CN
+3335004672,3335012351,US
+3335012352,3335028735,CA
3335028736,3335057919,US
3335057920,3335058175,CA
3335058176,3335160319,US
@@ -138817,17 +71679,11 @@
3335458816,3335460863,BM
3335460864,3335475199,US
3335475200,3335475455,DE
-3335475456,3335480191,US
-3335480192,3335480319,IT
-3335480320,3335524351,US
+3335475456,3335524351,US
3335524352,3335524607,AU
3335524608,3335573759,US
3335573760,3335574015,IN
-3335574016,3335581695,US
-3335581696,3335581951,EU
-3335581952,3335582463,US
-3335582464,3335582719,EU
-3335582720,3335784191,US
+3335574016,3335784191,US
3335784192,3335784447,CA
3335784448,3335860991,US
3335860992,3335861247,MX
@@ -138835,9 +71691,13 @@
3336139776,3336140799,CA
3336140800,3336854015,US
3336854016,3336854271,CO
-3336854272,3336990719,US
-3336990720,3336994815,CA
-3336994816,3337044479,US
+3336854272,3336991231,US
+3336991232,3336991487,CA
+3336991488,3336993023,US
+3336993024,3336993535,CA
+3336993536,3337030655,US
+3337030656,3337030911,GB
+3337030912,3337044479,US
3337044480,3337044735,CA
3337044736,3337044991,US
3337044992,3337046015,CA
@@ -138854,8 +71714,8 @@
3337060352,3337069055,US
3337069056,3337069119,GB
3337069120,3337289983,US
-3337289984,3337292799,CA
-3337292800,3337293823,US
+3337289984,3337293567,CA
+3337293568,3337293823,US
3337293824,3337297919,CA
3337297920,3337302015,US
3337302016,3337303551,CA
@@ -138872,34 +71732,18 @@
3337341952,3337342463,US
3337342464,3337355007,CA
3337355008,3337650175,US
-3337650176,3337650250,GB
-3337650251,3337650251,EU
-3337650252,3337650687,GB
-3337650688,3337651199,US
-3337651200,3337651455,CH
+3337650176,3337650431,GB
+3337650432,3337650943,US
+3337650944,3337651455,CH
3337651456,3337651711,SG
-3337651712,3337653503,CH
-3337653504,3337653759,JP
-3337653760,3337654783,CH
+3337651712,3337654783,CH
3337654784,3337655039,AU
3337655040,3337682943,CH
-3337682944,3337891839,US
-3337891840,3337892127,IN
-3337892128,3337892159,US
-3337892160,3337892255,IN
-3337892256,3337892607,US
+3337682944,3337892607,US
3337892608,3337892671,HK
3337892672,3337893119,US
3337893120,3337893631,CN
-3337893632,3337894655,US
-3337894656,3337894719,CN
-3337894720,3337894783,US
-3337894784,3337894911,CN
-3337894912,3337895167,US
-3337895168,3337895295,CN
-3337895296,3337895423,US
-3337895424,3337895615,CN
-3337895616,3337895679,US
+3337893632,3337895679,US
3337895680,3337895935,CN
3337895936,3337900031,PR
3337900032,3337948671,US
@@ -138908,7 +71752,11 @@
3337957376,3337958399,CA
3337958400,3337960447,US
3337960448,3337961471,CA
-3337961472,3337969663,US
+3337961472,3337961727,US
+3337961728,3337961983,CA
+3337961984,3337963391,US
+3337963392,3337963519,CA
+3337963520,3337969663,US
3337969664,3337973759,PR
3337973760,3337977855,CA
3337977856,3337980671,US
@@ -139014,12 +71862,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
@@ -139027,18 +71879,22 @@
3338825728,3338827775,AW
3338827776,3338912767,US
3338912768,3338913023,EC
-3338913024,3338916351,US
-3338916352,3338916479,CN
-3338916480,3338934015,US
-3338934016,3338934271,GB
-3338934272,3338935039,US
+3338913024,3338935039,US
3338935040,3338935295,GB
-3338935296,3339059629,US
+3338935296,3338964991,US
+3338964992,3338965247,CA
+3338965248,3338969343,US
+3338969600,3339000319,US
+3339000832,3339028735,US
+3339028992,3339031295,US
+3339031552,3339045119,US
+3339045376,3339050751,US
+3339051008,3339059629,US
3339059630,3339059885,NL
-3339059886,3339075583,US
+3339059886,3339063039,US
+3339063296,3339075583,US
3339075584,3339076863,GB
-3339076864,3339077119,NO
-3339077120,3339077631,JP
+3339076864,3339077631,NO
3339077632,3339077887,SG
3339077888,3339079167,US
3339079168,3339079423,DK
@@ -139075,27 +71931,24 @@
3339179008,3339180031,US
3339180032,3339181055,CA
3339181056,3339184127,US
-3339184128,3339185839,CA
-3339185840,3339185843,US
-3339185844,3339186175,CA
-3339186176,3339327999,US
+3339184128,3339186175,CA
+3339186176,3339270399,US
+3339271168,3339327999,US
3339328512,3339329535,CA
3339329536,3339337727,US
3339337984,3339338239,US
3339338240,3339338495,CA
-3339338496,3339669503,US
+3339338496,3339342847,US
+3339343104,3339343615,US
+3339343872,3339348223,US
+3339348480,3339373055,US
+3339373568,3339655679,US
+3339656192,3339667967,US
+3339668480,3339669503,US
3339669504,3339671807,CA
-3339672576,3339678721,US
-3339678722,3339678782,CN
-3339678783,3339678785,US
-3339678786,3339678846,CN
-3339678847,3339679487,US
+3339672576,3339679487,US
3339679488,3339679743,CN
-3339679744,3339727343,US
-3339727344,3339727351,CA
-3339727352,3339728319,US
-3339728320,3339728351,IN
-3339728352,3339728591,US
+3339679744,3339728591,US
3339728592,3339728599,IN
3339728600,3339728895,US
3339728896,3339729919,AG
@@ -139109,129 +71962,28 @@
3339753472,3339754495,CA
3339754496,3339760639,US
3339760640,3339761663,CA
-3339761664,3339766023,US
-3339766024,3339766031,UA
-3339766032,3339766047,US
-3339766048,3339766055,RO
-3339766056,3339766079,US
-3339766080,3339766087,AF
-3339766088,3339766095,US
-3339766096,3339766103,GB
-3339766104,3339766151,US
-3339766152,3339766159,RU
-3339766160,3339766183,US
-3339766184,3339766191,RO
-3339766192,3339766231,US
-3339766232,3339766239,RO
-3339766240,3339766247,OM
-3339766248,3339766271,US
-3339766272,3339766287,CA
-3339766288,3339766319,US
-3339766320,3339766335,CH
-3339766336,3339766351,US
-3339766352,3339766367,GB
-3339766368,3339766399,US
-3339766400,3339766415,RU
-3339766416,3339766551,US
-3339766552,3339766559,RO
-3339766560,3339766583,US
-3339766584,3339766591,AU
-3339766592,3339766623,US
-3339766624,3339766631,NO
-3339766632,3339766679,US
-3339766680,3339766687,RO
-3339766688,3339766695,US
-3339766696,3339766703,PT
-3339766704,3339766719,US
-3339766720,3339766727,CA
-3339766728,3339766751,US
-3339766752,3339766759,BE
-3339766760,3339766767,US
-3339766768,3339766775,HU
-3339766776,3339766823,US
-3339766824,3339766831,GP
-3339766832,3339766839,US
-3339766840,3339766847,NL
-3339766848,3339766855,US
-3339766856,3339766863,OM
-3339766864,3339766879,US
-3339766880,3339766887,IL
-3339766888,3339766903,US
-3339766904,3339766911,NZ
-3339766912,3339766943,US
-3339766944,3339766951,RU
-3339766952,3339766975,US
-3339766976,3339766983,DE
-3339766984,3339767071,US
-3339767072,3339767079,CA
-3339767080,3339767103,US
-3339767104,3339767111,CA
-3339767112,3339767119,GB
-3339767120,3339767127,RU
-3339767128,3339767135,RO
-3339767136,3339767143,GB
-3339767144,3339767167,US
-3339767168,3339767175,RU
-3339767176,3339767199,US
-3339767200,3339767207,IT
-3339767208,3339767215,GB
-3339767216,3339767231,US
-3339767232,3339767239,RU
-3339767240,3339767247,BR
-3339767248,3339767255,DE
-3339767256,3339767263,US
-3339767264,3339767271,AR
-3339767272,3339767423,US
-3339767424,3339767431,GB
-3339767432,3339767439,CN
-3339767440,3339767455,US
-3339767456,3339767463,IL
-3339767464,3339767519,US
-3339767520,3339767527,OM
-3339767528,3339767535,US
-3339767536,3339767543,GB
-3339767544,3339767551,DE
-3339767552,3339767679,US
-3339767680,3339767711,BR
-3339767712,3339923455,US
-3339923456,3339927551,CA
+3339761664,3339766047,US
+3339766048,3339766055,DE
+3339766056,3339766183,US
+3339766184,3339766191,AU
+3339766192,3339767007,US
+3339767008,3339767015,DE
+3339767016,3339923455,US
+3339923456,3339926015,CA
+3339926528,3339927551,CA
3339927552,3339934719,US
3339934720,3339935743,CA
3339935744,3339937279,US
3339937280,3339937535,MX
-3339937536,3339937816,US
-3339937817,3339937879,CN
-3339937880,3339937922,US
-3339937923,3339937983,PL
-3339937984,3339938595,US
-3339938596,3339938622,ID
-3339938623,3339938652,TH
-3339938653,3339938817,US
-3339938818,3339938830,IN
-3339938831,3339939130,US
-3339939131,3339939191,BR
-3339939192,3339939396,US
-3339939397,3339939426,GB
-3339939427,3339939440,US
-3339939441,3339939446,TR
-3339939447,3339939473,US
-3339939474,3339939534,GB
-3339939535,3339939582,TR
-3339939583,3339941650,US
-3339941651,3339941651,BR
-3339941652,3339941664,US
-3339941665,3339941665,BR
-3339941666,3339941790,US
-3339941791,3339941791,BR
-3339941792,3339952127,US
+3339937536,3339952127,US
3339952128,3339956223,CA
3339956224,3339965439,US
3339965440,3339968511,CA
-3339968512,3340059343,US
-3340059344,3340059359,CA
-3340059360,3340071679,US
-3340071680,3340071743,ES
-3340071744,3340080127,US
+3339968512,3339975935,US
+3339975936,3339976191,CA
+3339976192,3339991807,US
+3339991808,3339992063,CA
+3339992064,3340080127,US
3340080128,3340081151,CA
3340081152,3340084223,US
3340084224,3340085247,KN
@@ -139246,22 +71998,19 @@
3340387328,3340388351,CA
3340388352,3340390399,US
3340390400,3340391423,CA
-3340391424,3340391777,US
-3340391778,3340391785,LK
-3340391786,3340391793,EG
-3340391794,3340391825,US
-3340391826,3340391833,EG
-3340391834,3340391841,VE
-3340391842,3340391849,IN
-3340391850,3340429823,US
+3340391424,3340411903,US
+3340412160,3340417023,US
+3340417280,3340418559,US
+3340419328,3340425983,US
+3340426752,3340429823,US
3340429824,3340430079,PA
-3340430080,3340452863,US
+3340430080,3340431871,US
+3340432384,3340435199,US
+3340435456,3340452863,US
3340452864,3340453887,CA
3340453888,3340460031,US
3340460032,3340462079,PR
-3340462080,3340466175,US
-3340466176,3340467199,A2
-3340467200,3340481535,US
+3340462080,3340481535,US
3340481536,3340482559,CA
3340482560,3340490751,US
3340490752,3340492799,CA
@@ -139269,197 +72018,48 @@
3340493568,3340493823,HK
3340493824,3340584703,US
3340584704,3340584959,KW
-3340584960,3340648959,US
-3340648960,3340649215,US
-3340649216,3340664831,US
+3340584960,3340664831,US
3340664832,3340665855,CA
3340665856,3340677119,US
3340677120,3340679167,CA
3340679168,3340694783,US
3340694784,3340695039,CA
-3340695040,3340857343,US
-3340857344,3340858015,CA
-3340858016,3340858047,US
-3340858048,3340858367,CA
-3340858368,3340925095,US
-3340925096,3340925103,CA
-3340925104,3340925159,US
-3340925160,3340925167,FR
-3340925168,3340925175,BE
-3340925176,3340925335,US
-3340925336,3340925343,DK
-3340925344,3340925383,US
-3340925384,3340925391,RU
-3340925392,3340925439,US
-3340925440,3340925447,GB
-3340925448,3340925471,US
-3340925472,3340925479,CH
-3340925480,3340925495,US
-3340925496,3340925503,BR
-3340925504,3340925519,US
-3340925520,3340925527,GB
-3340925528,3340925535,US
-3340925536,3340925543,RU
-3340925544,3340925551,GB
-3340925552,3340925631,US
-3340925632,3340925639,FR
-3340925640,3340925647,CO
-3340925648,3340925695,US
-3340925696,3340925703,AU
-3340925704,3340925711,FR
-3340925712,3340925719,NZ
-3340925720,3340925727,CA
-3340925728,3340925735,US
-3340925736,3340925743,UA
-3340925744,3340925759,US
-3340925760,3340925767,FR
-3340925768,3340925783,US
-3340925784,3340925791,BR
-3340925792,3340925807,US
-3340925808,3340925815,RU
+3340695040,3340835327,US
+3340835840,3340845567,US
+3340846080,3340848127,US
+3340848896,3340849151,US
+3340849408,3340849663,US
+3340850176,3340857343,US
+3340857344,3340858367,CA
+3340859136,3340865279,US
+3340865536,3340923391,US
+3340923904,3340925815,US
3340925816,3340925823,AU
-3340925824,3340925887,GB
-3340925888,3340925895,CA
-3340925896,3340925903,GR
-3340925904,3340925919,US
-3340925920,3340925927,PT
-3340925928,3340925935,US
-3340925936,3340925943,BR
-3340925944,3340925951,CA
-3340925952,3340925959,BE
-3340925960,3340925999,US
-3340926000,3340926007,RU
-3340926008,3340926015,US
-3340926016,3340926023,RU
-3340926024,3340926063,US
-3340926064,3340926071,CA
-3340926072,3340926143,US
-3340926144,3340926151,FR
-3340926152,3340926159,CN
-3340926160,3340926175,AR
-3340926176,3340926191,US
-3340926192,3340926199,BR
-3340926200,3340926215,US
-3340926216,3340926223,SE
-3340926224,3340926231,PT
-3340926232,3340926247,US
-3340926248,3340926255,AR
-3340926256,3340926263,AU
-3340926264,3340926271,US
-3340926272,3340926279,CA
-3340926280,3340926295,US
-3340926296,3340926303,AR
-3340926304,3340926319,US
-3340926320,3340926327,RU
-3340926328,3340926343,US
-3340926344,3340926351,DE
-3340926352,3340926439,US
-3340926440,3340926447,NO
-3340926448,3340926455,DE
-3340926456,3340926463,US
-3340926464,3340926479,MX
-3340926480,3340926487,BR
-3340926488,3340926495,US
-3340926496,3340926503,DE
-3340926504,3340926511,MX
-3340926512,3340926527,SE
-3340926528,3340926543,US
-3340926544,3340926559,GB
-3340926560,3340926599,US
-3340926600,3340926607,BR
-3340926608,3340926623,US
-3340926624,3340926655,BR
-3340926656,3340926663,RU
-3340926664,3340926679,US
-3340926680,3340926687,HU
-3340926688,3340926807,US
-3340926808,3340926815,IN
-3340926816,3340926823,CA
-3340926824,3340926887,US
-3340926888,3340926895,BR
-3340926896,3340926903,US
-3340926904,3340926911,IL
-3340926912,3340926927,US
-3340926928,3340926935,ES
-3340926936,3341056079,US
-3341056080,3341056095,CH
-3341056096,3341056223,IN
-3341056224,3341056239,AU
-3341056240,3341056255,US
-3341056256,3341056271,IN
-3341056272,3341056287,US
-3341056288,3341056346,IN
-3341056347,3341056347,US
-3341056348,3341056415,IN
-3341056416,3341082623,US
+3340925824,3340926295,US
+3340926296,3340926303,DE
+3340926304,3341027839,US
+3341028352,3341031935,US
+3341032448,3341082623,US
3341082624,3341084671,CA
-3341084672,3341180927,US
+3341084672,3341162751,US
+3341163520,3341180927,US
3341180928,3341182975,CA
-3341182976,3341205503,US
-3341205504,3341207551,VC
+3341182976,3341196799,US
+3341197312,3341205503,US
+3341205504,3341207551,BB
3341207552,3341216255,US
3341216256,3341216511,JP
3341216512,3341216767,US
3341216768,3341217791,CA
-3341217792,3341217807,US
-3341217808,3341217823,IN
-3341217824,3341217839,PH
-3341217840,3341217847,US
-3341217848,3341217855,PH
-3341217856,3341217863,US
-3341217864,3341217871,AU
-3341217872,3341217887,PH
-3341217888,3341217895,US
-3341217896,3341217903,PH
-3341217904,3341217935,US
-3341217936,3341217951,AU
-3341217952,3341217967,NL
-3341217968,3341217983,EG
-3341217984,3341218015,US
-3341218016,3341218023,PH
-3341218024,3341218039,US
-3341218040,3341218047,PH
-3341218048,3341218055,JP
-3341218056,3341218063,US
-3341218064,3341218071,SG
-3341218072,3341218151,US
-3341218152,3341218167,PH
-3341218168,3341218207,US
-3341218208,3341218215,JP
-3341218216,3341218223,US
-3341218224,3341218231,AU
-3341218232,3341218247,US
-3341218248,3341218255,PH
-3341218256,3341218271,US
-3341218272,3341218279,CN
-3341218280,3341218287,NZ
-3341218288,3341218319,US
-3341218320,3341218335,SG
-3341218336,3341218351,US
-3341218352,3341218367,PH
-3341218368,3341218431,US
-3341218432,3341218463,CN
-3341218464,3341218495,US
-3341218496,3341218527,CL
-3341218528,3341218559,CN
-3341218560,3341218591,US
-3341218592,3341218623,CN
-3341218624,3341218687,CA
-3341218688,3341218815,US
-3341218816,3341219007,CA
-3341219008,3341219071,US
-3341219072,3341219103,JP
-3341219104,3341219199,US
-3341219200,3341219231,IN
-3341219232,3341219647,US
-3341219648,3341219711,CA
-3341219712,3341339647,US
-3341339648,3341339903,AP
+3341217792,3341218623,US
+3341218624,3341218655,CA
+3341218656,3341339647,US
+3341339648,3341339903,CZ
3341339904,3341340159,US
-3341340160,3341340415,AP
-3341340416,3341438975,US
-3341438976,3341439231,CA
-3341439232,3341444863,US
+3341340160,3341340415,CZ
+3341340416,3341439200,US
+3341439201,3341439201,CA
+3341439202,3341444863,US
3341444864,3341445631,DE
3341445632,3341464575,US
3341464576,3341464831,GB
@@ -139471,14 +72071,21 @@
3341484288,3341485055,CA
3341485056,3341488639,US
3341488640,3341488895,JP
-3341488896,3341489151,AP
-3341489152,3341511679,US
-3341511680,3341517823,CA
+3341488896,3341489151,HK
+3341489152,3341495551,US
+3341495552,3341495807,HK
+3341495808,3341500159,US
+3341500160,3341500415,HK
+3341500416,3341511679,US
+3341511680,3341513215,CA
+3341513728,3341517823,CA
3341517824,3341518847,US
3341518848,3341520895,CA
3341520896,3341521663,US
3341521664,3341531135,CA
-3341531136,3341534207,US
+3341531392,3341531647,US
+3341531648,3341531903,IN
+3341531904,3341534207,US
3341534976,3341537279,CA
3341537280,3341546239,US
3341546240,3341547007,CA
@@ -139502,17 +72109,7 @@
3341646080,3341646591,CA
3341646592,3341709311,US
3341709312,3341710335,CA
-3341710336,3341712639,US
-3341712640,3341712767,CN
-3341712768,3341712847,US
-3341712848,3341712855,CN
-3341712856,3341712983,US
-3341712984,3341712991,CN
-3341712992,3341713063,US
-3341713064,3341713071,CN
-3341713072,3341713103,US
-3341713104,3341713111,CA
-3341713112,3341727999,US
+3341710336,3341727999,US
3341728000,3341728255,AU
3341728256,3341758463,US
3341758464,3341759487,CA
@@ -139523,64 +72120,25 @@
3341778944,3341796863,US
3341796864,3341797375,JP
3341797376,3341807615,US
-3341807616,3341807652,CA
-3341807653,3341807653,US
-3341807654,3341807706,CA
-3341807707,3341807815,US
-3341807816,3341807822,CA
-3341807823,3341807844,US
-3341807845,3341807855,CA
-3341807856,3341807865,US
-3341807866,3341808192,CA
-3341808193,3341808206,ID
-3341808207,3341808607,CA
-3341808608,3341808638,US
-3341808639,3341808639,CA
-3341808640,3341828095,US
+3341807616,3341808639,CA
+3341808640,3341815039,US
+3341815808,3341828095,US
3341828096,3341829119,CA
3341829120,3341837311,US
3341837312,3341838335,CA
-3341838336,3341849375,US
-3341849376,3341853471,US
-3341853472,3341854551,US
-3341854552,3341854559,SG
-3341854560,3341863963,US
-3341863964,3341864959,AG
+3341838336,3341863935,US
+3341863936,3341864959,AG
3341864960,3341867007,US
3341867008,3341869055,CA
-3341869056,3341873151,US
-3341873152,3341875199,US
-3341875200,3342139391,US
+3341869056,3341881087,US
+3341881088,3341881343,SG
+3341881344,3341891071,US
+3341891072,3341891327,AU
+3341891328,3342139391,US
3342139392,3342204927,CH
3342204928,3342487551,US
3342487552,3342488575,CA
-3342488576,3342488831,US
-3342488832,3342488863,GB
-3342488864,3342488872,US
-3342488873,3342488882,BG
-3342488883,3342488896,US
-3342488897,3342488908,GB
-3342488909,3342488909,US
-3342488910,3342488925,GB
-3342488926,3342488959,US
-3342488960,3342489215,SC
-3342489216,3342489279,GB
-3342489280,3342489301,US
-3342489302,3342489311,AR
-3342489312,3342489376,US
-3342489377,3342489391,HK
-3342489392,3342489450,US
-3342489451,3342489463,IL
-3342489464,3342489474,US
-3342489475,3342489482,GB
-3342489483,3342489490,US
-3342489491,3342489501,IL
-3342489502,3342489503,US
-3342489504,3342489567,GB
-3342489568,3342489599,AR
-3342489600,3342493759,US
-3342493760,3342493791,CA
-3342493792,3342496767,US
+3342488576,3342496767,US
3342496768,3342497791,CA
3342497792,3342499839,GD
3342499840,3342505983,US
@@ -139591,19 +72149,10 @@
3342516224,3342517247,CA
3342517248,3342526463,US
3342526464,3342528511,CA
-3342528512,3342548167,US
-3342548168,3342548175,GB
-3342548176,3342548183,US
-3342548184,3342548191,TN
-3342548192,3342548575,US
-3342548576,3342548607,GB
-3342548608,3342552063,US
+3342528512,3342543359,US
+3342543872,3342552063,US
3342552064,3342553087,CA
-3342553088,3342556127,US
-3342556128,3342556159,CA
-3342556160,3342556207,US
-3342556208,3342556223,CA
-3342556224,3342565375,US
+3342553088,3342565375,US
3342565376,3342567423,CA
3342567424,3342579711,US
3342579712,3342581759,CA
@@ -139617,95 +72166,59 @@
3342603264,3342604799,US
3342604800,3342605311,CA
3342605312,3342605567,US
-3342605568,3342663679,CA
-3342663680,3342795007,US
-3342795008,3342795263,AP
-3342795264,3342831103,US
+3342605568,3342614271,CA
+3342614528,3342623743,CA
+3342624256,3342627839,CA
+3342628096,3342663423,CA
+3342663680,3342831103,US
3342831104,3342831359,IN
-3342831360,3342878971,US
-3342878972,3342878972,EU
-3342878973,3343013887,US
+3342831360,3343013887,US
3343013888,3343015935,CA
-3343015936,3343046919,US
-3343046920,3343046923,IT
-3343046924,3343046939,US
-3343046940,3343046943,RU
-3343046944,3343046955,US
-3343046956,3343046959,IT
-3343046960,3343046963,BE
-3343046964,3343046967,US
-3343046968,3343046971,NL
-3343046972,3343046987,US
-3343046988,3343046991,CA
-3343046992,3343047111,US
-3343047112,3343047127,SG
-3343047128,3343047143,US
-3343047144,3343047151,IT
-3343047152,3343047327,US
-3343047328,3343047343,IT
-3343047344,3343047423,US
-3343047424,3343047439,RU
-3343047440,3343047455,UA
-3343047456,3343047519,US
-3343047520,3343047535,IN
-3343047536,3343047751,US
-3343047752,3343047759,BR
-3343047760,3343047791,US
-3343047792,3343047799,PL
-3343047800,3343047847,US
-3343047848,3343047855,IT
-3343047856,3343047863,US
-3343047864,3343047871,RU
-3343047872,3343047935,US
-3343047936,3343047967,CA
-3343047968,3343055871,US
+3343015936,3343055871,US
3343055872,3343056895,CA
-3343056896,3343108863,US
-3343108864,3343109119,EU
-3343109120,3343153151,US
-3343153152,3343153167,CA
-3343153168,3343153175,US
-3343153176,3343155199,CA
-3343155200,3343167487,US
+3343056896,3343129087,US
+3343129600,3343153151,US
+3343153152,3343154943,CA
+3343154944,3343167487,US
3343167488,3343169535,CA
3343169536,3343171583,US
3343171584,3343172607,BM
-3343172608,3343172695,US
-3343172696,3343172703,NL
-3343172704,3343319295,US
-3343319296,3343346175,CA
+3343172608,3343319295,US
+3343319296,3343342847,CA
+3343343104,3343346175,CA
3343346176,3343346687,US
3343346688,3343355391,CA
3343355392,3343355903,US
-3343355904,3343364095,CA
+3343355904,3343359743,CA
+3343360000,3343364095,CA
3343364096,3343365631,US
-3343365632,3343372543,CA
-3343372800,3343378431,US
-3343378432,3343378447,BR
-3343378448,3343380479,US
-3343380480,3343384575,CA
-3343384576,3343457607,US
-3343457608,3343457615,AU
-3343457616,3343457743,US
-3343457744,3343457759,CA
-3343457760,3343457807,US
-3343457808,3343457815,GB
-3343457816,3343460863,US
+3343365632,3343366655,CA
+3343366912,3343372543,CA
+3343372800,3343378511,US
+3343378512,3343378519,GB
+3343378520,3343378535,US
+3343378536,3343378543,GB
+3343378544,3343378575,US
+3343378576,3343378583,GB
+3343378584,3343378823,US
+3343378824,3343378839,SE
+3343378840,3343379079,US
+3343379080,3343379087,SE
+3343379088,3343380479,US
+3343380480,3343384319,CA
+3343384576,3343456511,US
+3343456768,3343460863,US
3343460864,3343461375,CA
3343461376,3343465471,US
3343465472,3343466495,JM
-3343466496,3343858687,US
+3343466496,3343470847,US
+3343471104,3343557119,US
+3343557376,3343858687,US
3343858688,3343859199,VG
-3343859200,3343922975,US
-3343922976,3343923007,PA
-3343923008,3343923071,US
-3343923072,3343923135,CY
-3343923136,3343923199,HK
-3343923200,3344116223,US
+3343859200,3344111871,US
+3344112128,3344116223,US
3344116224,3344116735,CA
-3344116736,3344118527,US
-3344118528,3344118783,HK
-3344118784,3344126975,US
+3344116736,3344126975,US
3344126976,3344127999,CA
3344128000,3344138751,US
3344138752,3344139007,GB
@@ -139716,14 +72229,13 @@
3344146432,3344154623,US
3344154624,3344156671,GD
3344156672,3344158719,CA
-3344158720,3344165631,US
-3344165632,3344165663,MX
-3344165664,3344166911,US
+3344158720,3344166911,US
3344166912,3344168959,CA
3344168960,3344171263,US
-3344171264,3344236543,CA
+3344171264,3344236287,CA
3344236544,3344237055,US
-3344237056,3344242175,CA
+3344237056,3344238335,CA
+3344238592,3344242175,CA
3344242176,3344242687,US
3344242688,3344255999,CA
3344256000,3344261631,US
@@ -139732,7 +72244,8 @@
3344266752,3344268543,CA
3344268544,3344268799,GB
3344268800,3344269311,US
-3344269312,3344288767,CA
+3344269312,3344287743,CA
+3344288000,3344288767,CA
3344288768,3344289791,PR
3344289792,3344292863,US
3344292864,3344296447,CA
@@ -139743,52 +72256,38 @@
3344299520,3344299775,US
3344299776,3344300543,CA
3344300544,3344300799,US
-3344300800,3344302079,CA
-3344302080,3344379903,US
+3344300800,3344301823,CA
+3344302080,3344367871,US
+3344368128,3344379903,US
3344379904,3344380927,CA
-3344380928,3344380951,US
-3344380952,3344380959,GB
-3344380960,3344381047,US
-3344381048,3344381055,BR
-3344381056,3344381087,US
-3344381088,3344381095,CA
-3344381096,3344381151,US
-3344381152,3344381159,MX
-3344381160,3344381167,US
-3344381168,3344381175,NZ
-3344381176,3344381199,US
-3344381200,3344381207,AU
-3344381208,3344381215,US
-3344381216,3344381223,NG
-3344381224,3344381255,US
-3344381256,3344381263,CA
-3344381264,3344381271,MX
-3344381272,3344406527,US
+3344380928,3344406527,US
3344406528,3344408575,CA
-3344408576,3344415679,US
-3344415680,3344415743,AR
-3344415744,3344426239,US
-3344426240,3344426495,US
-3344426496,3344429055,US
-3344429056,3344429343,CA
-3344429344,3344429375,US
-3344429376,3344431103,CA
-3344431104,3344486399,US
+3344408576,3344429055,US
+3344429056,3344431103,CA
+3344431104,3344446463,US
+3344447488,3344469247,US
+3344469504,3344486399,US
3344486400,3344488447,NL
-3344488448,3344552959,US
+3344488448,3344495871,US
+3344496128,3344511231,US
+3344511488,3344531711,US
+3344531968,3344536831,US
+3344537088,3344552959,US
3344552960,3344553215,GB
3344553216,3344633855,US
3344633856,3344637951,CH
3344637952,3344649215,US
3344649216,3344650239,PR
3344650240,3344652287,CA
-3344652288,3344658431,US
+3344652288,3344654335,US
+3344654336,3344656383,VG
+3344656384,3344658431,US
3344658432,3344660479,CA
3344660480,3344670719,US
-3344670720,3344671743,GP
-3344671744,3344673983,US
-3344673984,3344673991,SC
-3344673992,3344676863,US
+3344670720,3344671231,GP
+3344671232,3344671487,MF
+3344671488,3344671743,GP
+3344671744,3344676863,US
3344676864,3344677407,CA
3344677408,3344677423,US
3344677424,3344678911,CA
@@ -139806,81 +72305,24 @@
3344964608,3344965631,CA
3344965632,3344973823,US
3344973824,3344974847,BM
-3344974848,3344979839,US
-3344979840,3344979967,US
+3344974848,3344979967,US
3344979968,3344982015,CA
3344982016,3345007615,US
3345007616,3345008639,CA
3345008640,3345010687,US
3345010688,3345011711,CA
-3345011712,3345299455,US
+3345011712,3345295871,US
+3345296384,3345299455,US
3345299456,3345301503,CA
-3345301504,3345309855,US
-3345309856,3345309871,BR
-3345309872,3345310207,US
-3345310208,3345310231,CA
-3345310232,3345310287,US
-3345310288,3345310295,AR
-3345310296,3345310319,US
-3345310320,3345310321,IN
-3345310322,3345310323,US
-3345310324,3345310335,IN
-3345310336,3345310351,US
-3345310352,3345310367,BR
-3345310368,3345310383,ID
-3345310384,3345310399,BR
-3345310400,3345310559,US
-3345310560,3345310575,IN
-3345310576,3345310591,US
-3345310592,3345310599,HK
-3345310600,3345310615,US
-3345310616,3345310623,GB
-3345310624,3345310751,US
-3345310752,3345310783,CN
-3345310784,3345310799,BR
-3345310800,3345310975,US
-3345310976,3345311039,PL
-3345311040,3345311103,CN
-3345311104,3345311119,BR
-3345311120,3345311135,GB
-3345311136,3345311167,RO
-3345311168,3345311175,US
-3345311176,3345311183,BR
-3345311184,3345311199,US
-3345311200,3345311207,BR
-3345311208,3345311215,SK
-3345311216,3345311223,BR
-3345311224,3345311231,SK
-3345311232,3345318943,US
-3345318944,3345318975,CY
-3345318976,3345321471,US
+3345301504,3345315071,US
+3345315072,3345315327,TW
+3345315328,3345315583,US
+3345315584,3345315839,TW
+3345315840,3345321471,US
3345321472,3345321727,CA
-3345321728,3345322039,US
-3345322040,3345322047,CN
-3345322048,3345322319,US
-3345322320,3345322327,HK
-3345322328,3345322495,US
-3345322496,3345322503,BR
-3345322504,3345322711,US
-3345322712,3345322719,CN
-3345322720,3345322911,US
-3345322912,3345322919,CN
-3345322920,3345327103,US
+3345321728,3345327103,US
3345327104,3345328127,CA
-3345328128,3345332255,US
-3345332256,3345332287,GB
-3345332288,3345332295,US
-3345332296,3345332303,KW
-3345332304,3345332311,US
-3345332312,3345332319,TR
-3345332320,3345332327,US
-3345332328,3345332335,ID
-3345332336,3345332375,US
-3345332376,3345332383,MX
-3345332384,3345332423,US
-3345332424,3345332431,MY
-3345332432,3345332435,ID
-3345332436,3345333247,US
+3345328128,3345333247,US
3345333248,3345334271,MF
3345334272,3345339391,US
3345339392,3345340415,CA
@@ -139890,103 +72332,11 @@
3345383424,3345384447,CA
3345384448,3345390591,US
3345390592,3345391615,CA
-3345391616,3345393151,US
-3345393152,3345393279,AU
-3345393280,3345393407,US
-3345393408,3345393535,AU
-3345393536,3345398783,US
+3345391616,3345398783,US
3345398784,3345399807,BS
3345399808,3345401855,PR
3345401856,3345403903,CA
-3345403904,3345408005,US
-3345408006,3345408009,CZ
-3345408010,3345408017,US
-3345408018,3345408021,GB
-3345408022,3345408092,US
-3345408093,3345408094,GB
-3345408095,3345408098,VE
-3345408099,3345408110,US
-3345408111,3345408114,AU
-3345408115,3345408161,US
-3345408162,3345408165,CA
-3345408166,3345408189,US
-3345408190,3345408193,AR
-3345408194,3345408197,US
-3345408198,3345408225,IN
-3345408226,3345408227,GB
-3345408228,3345408235,US
-3345408236,3345408239,CN
-3345408240,3345408319,US
-3345408320,3345408323,GB
-3345408324,3345408386,US
-3345408387,3345408394,GB
-3345408395,3345408415,US
-3345408416,3345408420,AU
-3345408421,3345408424,US
-3345408425,3345408428,GB
-3345408429,3345408460,US
-3345408461,3345408464,IN
-3345408465,3345408534,US
-3345408535,3345408538,AU
-3345408539,3345408542,CA
-3345408543,3345408569,US
-3345408570,3345408573,CA
-3345408574,3345408577,US
-3345408578,3345408589,GB
-3345408590,3345408634,US
-3345408635,3345408639,CA
-3345408640,3345408651,US
-3345408652,3345408655,CA
-3345408656,3345408667,US
-3345408668,3345408671,CA
-3345408672,3345408697,US
-3345408698,3345408701,GB
-3345408702,3345408784,US
-3345408785,3345408788,CA
-3345408789,3345408888,US
-3345408889,3345408892,MX
-3345408893,3345408903,US
-3345408904,3345408907,GB
-3345408908,3345408949,US
-3345408950,3345408993,IN
-3345408994,3345409033,US
-3345409034,3345409037,CA
-3345409038,3345409085,US
-3345409086,3345409089,CA
-3345409090,3345409093,US
-3345409094,3345409097,CA
-3345409098,3345409175,US
-3345409176,3345409179,CN
-3345409180,3345409204,US
-3345409205,3345409212,AU
-3345409213,3345409217,US
-3345409218,3345409221,AU
-3345409222,3345409245,US
-3345409246,3345409255,GB
-3345409256,3345409558,US
-3345409559,3345409562,CA
-3345409563,3345409576,US
-3345409577,3345409580,GB
-3345409581,3345409706,US
-3345409707,3345409718,IN
-3345409719,3345409782,US
-3345409783,3345409786,SG
-3345409787,3345409816,US
-3345409817,3345409820,GB
-3345409821,3345409871,US
-3345409872,3345409875,CA
-3345409876,3345409887,US
-3345409888,3345409891,GB
-3345409892,3345409899,US
-3345409900,3345409903,CA
-3345409904,3345409911,US
-3345409912,3345409915,CA
-3345409916,3345409919,AU
-3345409920,3345409945,US
-3345409946,3345409949,SG
-3345409950,3345410032,US
-3345410033,3345410036,GB
-3345410037,3345418239,US
+3345403904,3345418239,US
3345418240,3345419519,NL
3345419520,3345422847,US
3345423360,3345424383,TC
@@ -140016,7 +72366,9 @@
3345443328,3345443583,CH
3345443584,3345443839,DE
3345443840,3345444607,US
-3345444608,3345444676,CH
+3345444608,3345444627,CH
+3345444628,3345444629,US
+3345444630,3345444676,CH
3345444677,3345444678,US
3345444679,3345445119,CH
3345445120,3345445375,US
@@ -140024,89 +72376,24 @@
3345446400,3345446655,US
3345446656,3345446911,IT
3345446912,3345447679,US
-3345447680,3345447935,BE
-3345447936,3345448447,FR
+3345447680,3345448447,FR
3345448448,3345448703,BE
3345448704,3345448959,DE
-3345448960,3345666567,US
-3345666568,3345666591,IN
-3345666592,3345666623,US
-3345666624,3345666639,NO
-3345666640,3345667103,US
-3345667104,3345667119,IN
-3345667120,3346193919,US
-3346193920,3346194431,US
-3346194432,3346196479,US
+3345448960,3346140671,US
+3346141184,3346188799,US
+3346189312,3346196479,US
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,3346221583,US
-3346221584,3346221591,IT
-3346221592,3346221623,US
-3346221624,3346221631,RU
-3346221632,3346221655,US
-3346221656,3346221663,IT
-3346221664,3346221671,BE
-3346221672,3346221679,US
-3346221680,3346221687,NL
-3346221688,3346221719,US
-3346221720,3346221727,CA
-3346221728,3346221871,US
-3346221872,3346221887,SG
-3346221888,3346221903,US
-3346221904,3346221911,IT
-3346221912,3346221999,US
-3346222000,3346222007,BR
-3346222008,3346222039,US
-3346222040,3346222047,PL
-3346222048,3346222095,US
-3346222096,3346222103,IT
-3346222104,3346222111,US
-3346222112,3346222119,RU
-3346222120,3346222335,US
-3346222336,3346222351,IT
-3346222352,3346222431,US
-3346222432,3346222447,RU
-3346222448,3346222463,UA
-3346222464,3346222527,US
-3346222528,3346222543,IN
-3346222544,3346225151,US
+3346221056,3346225151,US
3346225152,3346227199,CA
-3346227200,3346231615,US
-3346231616,3346231647,GB
-3346231648,3346231743,US
-3346231744,3346231807,SC
-3346231808,3346231810,US
-3346231811,3346231827,AR
-3346231828,3346231846,US
-3346231847,3346231854,GB
-3346231855,3346231916,US
-3346231917,3346231924,GB
-3346231925,3346232383,US
-3346232384,3346232447,VG
-3346232448,3346232608,US
-3346232609,3346232617,AR
-3346232618,3346232703,US
-3346232704,3346232767,GB
-3346232768,3346232831,US
-3346232832,3346232895,GB
-3346232896,3346232911,UA
-3346232912,3346232959,US
-3346232960,3346232991,GB
-3346232992,3346233023,US
-3346233024,3346233087,GB
-3346233088,3346233256,US
-3346233257,3346233268,AR
-3346233269,3346233279,US
-3346233280,3346233311,GB
-3346233312,3346234367,US
-3346234368,3346234687,CA
-3346234688,3346234695,US
-3346234696,3346234911,CA
-3346234912,3346234919,FR
-3346234920,3346235391,CA
+3346227200,3346234367,US
+3346234368,3346235391,CA
3346235392,3346241535,US
3346241536,3346243327,CA
3346243328,3346282495,US
@@ -140115,62 +72402,14 @@
3346323456,3346325503,CA
3346325504,3346327551,US
3346327552,3346328575,CA
-3346328576,3346332103,US
-3346332104,3346332111,GB
-3346332112,3346497535,US
+3346328576,3346329599,US
+3346329600,3346330623,CA
+3346330624,3346471423,US
+3346471936,3346497535,US
3346497536,3346498559,CA
-3346498560,3346505783,US
-3346505784,3346505791,GB
-3346505792,3346505895,US
-3346505896,3346505903,AU
-3346505904,3346505951,US
-3346505952,3346505959,CA
-3346505960,3346506007,US
-3346506008,3346506015,EG
-3346506016,3346506023,US
-3346506024,3346506031,CA
-3346506032,3346506039,US
-3346506040,3346506047,CA
-3346506048,3346506111,US
-3346506112,3346506119,JM
-3346506120,3346506127,MX
-3346506128,3346506159,US
-3346506160,3346506167,VE
-3346506168,3346506271,US
-3346506272,3346506279,GB
-3346506280,3346506287,CA
-3346506288,3346506311,US
-3346506312,3346506319,CO
-3346506320,3346506415,US
-3346506416,3346506423,IN
-3346506424,3346506447,US
-3346506448,3346506455,CA
-3346506456,3346506487,US
-3346506488,3346506495,CA
-3346506496,3346506527,US
-3346506528,3346506535,GB
-3346506536,3346506559,US
-3346506560,3346506567,CA
-3346506568,3346506575,TR
-3346506576,3346506743,US
-3346506744,3346506751,GB
-3346506752,3346520063,US
+3346498560,3346520063,US
3346520064,3346521087,CA
-3346521088,3346522347,US
-3346522348,3346522350,BD
-3346522351,3346522401,US
-3346522402,3346522404,IN
-3346522405,3346522411,US
-3346522412,3346522413,AE
-3346522414,3346522523,US
-3346522524,3346522525,BD
-3346522526,3346522787,US
-3346522788,3346522788,FR
-3346522789,3346522840,US
-3346522841,3346522841,FR
-3346522842,3346523113,US
-3346523114,3346523121,TH
-3346523122,3346523135,US
+3346521088,3346523135,US
3346523136,3346523391,BO
3346523392,3346523647,RU
3346523648,3346523903,US
@@ -140179,24 +72418,25 @@
3346525184,3346528255,US
3346528256,3346529279,PR
3346529280,3346530303,CA
-3346530304,3346591487,US
+3346530304,3346545151,US
+3346545664,3346591487,US
3346591488,3346591743,CA
3346591744,3346663167,US
3346663168,3346663423,CA
3346663424,3346691071,US
3346691072,3346692095,CA
-3346692096,3346793215,US
+3346692096,3346730495,US
+3346731008,3346793215,US
3346793216,3346793471,CA
3346793472,3346793983,US
-3346794496,3346923519,US
+3346794496,3346799103,US
+3346799616,3346807295,US
+3346807808,3346923519,US
3346923520,3346989055,CA
-3346989056,3347014255,US
-3347014256,3347014271,CY
-3347014272,3347014367,US
-3347014368,3347014399,CA
-3347014400,3347015615,US
-3347015616,3347015631,AE
-3347015632,3347015647,RU
+3346989056,3346998527,US
+3346998528,3346998783,CA
+3346998784,3346999807,US
+3347000320,3347015647,US
3347015648,3347015663,AE
3347015664,3347016703,US
3347016704,3347017727,CA
@@ -140220,22 +72460,24 @@
3349463040,3349463295,CA
3349463296,3349479167,US
3349479168,3349479423,CA
-3349479424,3349532671,US
-3349532672,3349533695,GB
+3349479424,3349533695,US
3349533696,3349533951,CA
3349533952,3349545215,US
3349545216,3349545727,CA
3349545728,3349545983,US
-3349545984,3349551103,CA
+3349545984,3349549567,CA
+3349550080,3349551103,CA
3349551104,3349553663,US
-3349553664,3349608447,CA
-3349608448,3349609215,US
-3349609216,3349610239,CA
+3349553664,3349605375,CA
+3349605632,3349607423,CA
+3349607936,3349608447,CA
+3349608448,3349609471,US
+3349609472,3349610239,CA
3349610240,3349614591,US
-3349614592,3349617663,CA
-3349617664,3349621243,US
-3349621244,3349621245,IN
-3349621246,3349637119,US
+3349614592,3349616127,CA
+3349616128,3349616639,US
+3349616640,3349617663,CA
+3349617664,3349637119,US
3349637120,3349639167,CA
3349639168,3349640191,US
3349640192,3349641215,CA
@@ -140245,22 +72487,13 @@
3349645312,3349647359,CA
3349647360,3349649407,US
3349649408,3349653503,CA
-3349653504,3349711539,US
-3349711540,3349711547,GB
-3349711548,3349723260,US
-3349723261,3349723265,CA
-3349723266,3349723360,US
-3349723361,3349723367,CA
-3349723368,3349723996,US
-3349723997,3349724000,LK
-3349724001,3349724985,US
-3349724986,3349724999,PK
-3349725000,3349731327,US
+3349653504,3349678591,US
+3349679104,3349682687,US
+3349683200,3349686783,US
+3349687296,3349731327,US
3349731328,3349733375,CA
3349733376,3349739519,US
-3349739520,3349739551,CA
-3349739552,3349739559,US
-3349739560,3349740543,CA
+3349739520,3349740543,CA
3349740544,3349987327,US
3349987328,3349996543,BM
3349996544,3349997055,KY
@@ -140272,7 +72505,8 @@
3350146048,3350150143,US
3350150144,3350160639,CA
3350160640,3350160895,US
-3350160896,3350181887,CA
+3350160896,3350175743,CA
+3350176256,3350181887,CA
3350181888,3350183167,US
3350183168,3350200063,CA
3350200064,3350469119,US
@@ -140281,62 +72515,24 @@
3350475776,3350476799,CA
3350476800,3350487039,US
3350487040,3350488063,CA
-3350488064,3350488111,US
-3350488112,3350488127,CN
-3350488128,3350488215,US
-3350488216,3350488223,CN
-3350488224,3350488247,US
-3350488248,3350488255,CN
-3350488256,3350488271,US
-3350488272,3350488279,CN
-3350488280,3350488359,US
-3350488360,3350488367,CN
-3350488368,3350488455,US
-3350488456,3350488463,CN
-3350488464,3350488471,US
-3350488472,3350488479,CN
-3350488480,3350488495,US
-3350488496,3350488511,CN
-3350488512,3350488575,US
-3350488576,3350488607,CN
-3350488608,3350488743,US
-3350488744,3350488751,CN
-3350488752,3350488847,US
-3350488848,3350488855,CN
-3350488856,3350488959,US
-3350488960,3350489023,CN
-3350489024,3350489063,US
-3350489064,3350489071,CN
-3350489072,3350491391,US
-3350491392,3350491647,PH
+3350488064,3350491647,US
3350491648,3350491903,PL
-3350491904,3350492961,US
-3350492962,3350492990,GB
-3350492991,3350496532,US
-3350496533,3350496533,IN
-3350496534,3350496721,US
-3350496722,3350496723,IN
-3350496724,3350514639,US
-3350514640,3350514655,GB
-3350514656,3350514879,US
-3350514880,3350514911,GB
-3350514912,3350515135,US
-3350515136,3350515167,GB
-3350515168,3350548735,US
+3350491904,3350501631,US
+3350501632,3350501887,MX
+3350501888,3350505471,US
+3350505472,3350507519,CA
+3350507520,3350548735,US
3350548736,3350548991,CA
-3350548992,3350561279,US
-3350561280,3350561535,AP
-3350561536,3350593535,US
+3350548992,3350574591,US
+3350575104,3350577151,US
+3350577664,3350588927,US
+3350589440,3350593535,US
3350593536,3350605823,CA
3350605824,3350606847,US
3350606848,3350607871,CA
3350607872,3350618111,US
3350618112,3350619135,CA
-3350619136,3350620383,US
-3350620384,3350620415,GB
-3350620416,3350620991,US
-3350620992,3350621023,KY
-3350621024,3350623231,US
+3350619136,3350623231,US
3350623232,3350624255,CA
3350624256,3350626303,US
3350626304,3350628351,CA
@@ -140348,97 +72544,36 @@
3350648832,3350650623,CA
3350650624,3350650631,US
3350650632,3350650879,CA
-3350650880,3350790399,US
+3350650880,3350756863,US
+3350757376,3350760959,US
+3350761472,3350790399,US
3350790400,3350814975,CA
3350814976,3350815231,US
-3350815232,3350825727,CA
+3350815232,3350823423,CA
+3350823936,3350825727,CA
3350825728,3350825983,GB
-3350825984,3350836223,CA
+3350825984,3350834687,CA
+3350835200,3350836223,CA
3350836736,3350836991,US
-3350836992,3350843391,CA
+3350836992,3350837247,CA
+3350837760,3350843391,CA
3350843392,3350843647,US
3350843648,3350855679,CA
3350855680,3350862079,US
3350862080,3350864639,CL
-3350864640,3350952495,US
-3350952496,3350952511,PE
-3350952512,3350952583,US
-3350952584,3350952591,BA
-3350952592,3350952799,US
-3350952800,3350952815,AZ
-3350952816,3350953135,US
-3350953136,3350953143,AZ
-3350953144,3350953615,US
-3350953616,3350953623,AR
-3350953624,3350953631,NZ
-3350953632,3350953855,US
-3350953856,3350953871,AZ
-3350953872,3350970367,US
+3350864640,3350950399,US
+3350950912,3350970367,US
3350970368,3350971391,CA
3350971392,3350979583,US
3350979584,3350980607,CA
-3350980608,3350994943,US
+3350980608,3350988287,US
+3350988800,3350994943,US
3350994944,3350998015,CA
3350998016,3351002111,US
3351002112,3351003135,CA
3351003136,3351004159,US
3351004160,3351005183,CA
-3351005184,3351012351,US
-3351012352,3351012359,CA
-3351012360,3351012543,US
-3351012544,3351012575,SE
-3351012576,3351012591,GB
-3351012592,3351012607,CA
-3351012608,3351012735,US
-3351012736,3351012767,GB
-3351012768,3351013151,US
-3351013152,3351013167,KW
-3351013168,3351013183,ID
-3351013184,3351013343,US
-3351013344,3351013375,CA
-3351013376,3351013383,US
-3351013384,3351013391,CN
-3351013392,3351013407,US
-3351013408,3351013439,CN
-3351013440,3351013447,US
-3351013448,3351013567,CN
-3351013568,3351013631,CA
-3351013632,3351013679,CN
-3351013680,3351013695,US
-3351013696,3351014063,CN
-3351014064,3351014079,US
-3351014080,3351014183,CN
-3351014184,3351014207,US
-3351014208,3351014271,CN
-3351014272,3351014335,US
-3351014336,3351014375,CN
-3351014376,3351014399,US
-3351014400,3351014591,CN
-3351014592,3351014655,US
-3351014656,3351014663,CN
-3351014664,3351014671,US
-3351014672,3351014751,CN
-3351014752,3351014783,US
-3351014784,3351014799,CN
-3351014800,3351014807,CA
-3351014808,3351014847,CN
-3351014848,3351014911,US
-3351014912,3351014943,CN
-3351014944,3351015039,US
-3351015040,3351015151,CN
-3351015152,3351015159,US
-3351015160,3351015167,CN
-3351015168,3351015231,US
-3351015232,3351015239,CN
-3351015240,3351015255,US
-3351015256,3351015263,CN
-3351015264,3351015279,US
-3351015280,3351015295,CN
-3351015296,3351015303,US
-3351015304,3351015327,CN
-3351015328,3351015343,US
-3351015344,3351015359,CN
-3351015360,3351015423,US
+3351005184,3351015423,US
3351015424,3351016447,CA
3351016448,3351030783,US
3351030784,3351031807,CA
@@ -140449,69 +72584,17 @@
3351037952,3351043071,US
3351043072,3351043583,FR
3351043584,3351044095,CA
-3351044096,3351045311,US
-3351045312,3351045343,RU
-3351045344,3351045439,US
-3351045440,3351045471,CA
-3351045472,3351045631,US
-3351045632,3351045695,TW
-3351045696,3351071743,US
+3351044096,3351058943,US
+3351059456,3351071743,US
3351071744,3351072767,CA
-3351072768,3351074217,US
-3351074218,3351074218,AR
-3351074219,3351074221,US
-3351074222,3351074231,IN
-3351074232,3351074688,US
-3351074689,3351074689,AR
-3351074690,3351074690,DE
-3351074691,3351074692,US
-3351074693,3351074693,UY
-3351074694,3351074696,US
-3351074697,3351074697,BR
-3351074698,3351074698,US
-3351074699,3351074701,GB
-3351074702,3351074703,US
-3351074704,3351074704,MX
-3351074705,3351074705,US
-3351074706,3351074706,AF
-3351074707,3351074707,US
-3351074708,3351074709,MX
-3351074710,3351074710,AF
-3351074711,3351074711,DE
-3351074712,3351074712,BR
-3351074713,3351074718,US
-3351074719,3351074719,UA
-3351074720,3351074720,MX
-3351074721,3351074724,US
-3351074725,3351074725,PK
-3351074726,3351074726,EE
-3351074727,3351074727,US
-3351074728,3351074729,CA
-3351074730,3351074730,US
-3351074731,3351074731,IL
-3351074732,3351074732,BR
-3351074733,3351074733,EG
-3351074734,3351074734,US
-3351074735,3351074735,BR
-3351074736,3351074736,PE
-3351074737,3351074738,CA
-3351074739,3351074740,US
-3351074741,3351074741,CA
-3351074742,3351074742,US
-3351074743,3351074743,AU
-3351074744,3351074745,LK
-3351074746,3351074746,AU
-3351074747,3351074750,US
-3351074751,3351074751,BR
-3351074752,3351074783,DE
-3351074784,3351074815,BR
+3351072768,3351074815,US
3351074816,3351076863,CA
3351076864,3351080959,US
3351080960,3351081983,AG
3351081984,3351086079,US
3351086080,3351087103,CA
-3351087104,3351094271,US
-3351094272,3351095295,CA
+3351087104,3351094527,US
+3351094528,3351095295,CA
3351095296,3351103487,US
3351103488,3351104511,CA
3351104512,3351104639,JP
@@ -140524,69 +72607,11 @@
3351105024,3351105151,CA
3351105152,3351112703,US
3351112704,3351113727,CA
-3351113728,3351197711,US
-3351197712,3351197719,RO
-3351197720,3351197735,US
-3351197736,3351197739,CA
-3351197740,3351197811,US
-3351197812,3351197815,GB
-3351197816,3351197827,US
-3351197828,3351197831,TR
-3351197832,3351197839,US
-3351197840,3351197843,MX
-3351197844,3351197847,TR
-3351197848,3351197859,US
-3351197860,3351197887,GB
-3351197888,3351197911,US
-3351197912,3351197919,SG
-3351197920,3351197951,GB
-3351197952,3351197983,US
-3351197984,3351198015,MX
-3351198016,3351198047,US
-3351198048,3351198063,GB
-3351198064,3351198095,US
-3351198096,3351198103,CA
-3351198104,3351198131,US
-3351198132,3351198135,VN
-3351198136,3351198139,US
-3351198140,3351198143,PK
-3351198144,3351198147,CA
-3351198148,3351198159,US
-3351198160,3351198163,PT
-3351198164,3351198183,US
-3351198184,3351198187,DE
-3351198188,3351198255,US
-3351198256,3351198259,ID
-3351198260,3351198303,US
-3351198304,3351198335,ID
-3351198336,3351198351,US
-3351198352,3351198359,CA
-3351198360,3351198371,US
-3351198372,3351198383,CA
-3351198384,3351198391,US
-3351198392,3351198395,DK
-3351198396,3351198399,BR
-3351198400,3351198415,US
-3351198416,3351198419,DE
-3351198420,3351198423,BR
-3351198424,3351198427,US
-3351198428,3351198447,BR
-3351198448,3351198479,US
-3351198480,3351198487,TH
-3351198488,3351198503,US
-3351198504,3351198511,FR
-3351198512,3351198515,US
-3351198516,3351198527,NL
-3351198528,3351198543,US
-3351198544,3351198551,SG
-3351198552,3351198559,US
-3351198560,3351198567,CY
-3351198568,3351198575,CA
-3351198576,3351198607,US
-3351198608,3351198615,GR
-3351198616,3351198703,US
-3351198704,3351198719,BR
-3351198720,3351232511,US
+3351113728,3351167487,US
+3351168512,3351171327,US
+3351171584,3351196159,US
+3351196672,3351197183,US
+3351197696,3351232511,US
3351232512,3351232767,IL
3351232768,3351275519,US
3351275520,3351276543,CA
@@ -140598,13 +72623,10 @@
3351303168,3351304191,CA
3351304192,3351306239,US
3351306240,3351307263,VC
-3351307264,3351307295,US
-3351307296,3351307311,MX
-3351307312,3351308287,US
+3351307264,3351308287,US
3351308288,3351310335,CA
-3351310336,3351310895,US
-3351310896,3351310911,GB
-3351310912,3351326719,US
+3351310336,3351318015,US
+3351318528,3351326719,US
3351326720,3351328767,CA
3351328768,3351336959,US
3351336960,3351339007,CA
@@ -140626,9 +72648,7 @@
3351384320,3351384575,CA
3351384576,3351385343,US
3351385344,3351385599,CA
-3351385600,3351386111,US
-3351386112,3351386367,PR
-3351386368,3351386623,US
+3351385600,3351386623,US
3351386624,3351386879,CA
3351386880,3351387135,US
3351387136,3351387391,CA
@@ -140712,25 +72732,34 @@
3351441152,3351441407,CA
3351441408,3351441919,US
3351441920,3351442175,CA
-3351442176,3351483391,US
+3351442176,3351447039,US
+3351447552,3351449087,US
+3351449600,3351474687,US
+3351475200,3351475711,US
+3351475712,3351475967,IS
+3351475968,3351483391,US
3351483392,3351484415,CA
3351484416,3351485439,US
-3351485440,3351485567,CA
-3351485568,3351485575,US
-3351485576,3351485695,CA
+3351485440,3351485695,CA
3351485696,3351486463,US
3351486464,3351488511,CA
-3351488512,3351494655,US
-3351494656,3351496703,SG
+3351488512,3351494911,US
+3351494912,3351495679,SG
+3351495680,3351495935,US
+3351495936,3351496191,SG
+3351496192,3351496447,US
+3351496448,3351496703,SG
3351496704,3351497727,US
3351497728,3351498751,CA
3351498752,3351501823,US
3351501824,3351502847,JM
3351502848,3351503871,US
3351503872,3351504895,CA
-3351504896,3351524095,US
+3351504896,3351512575,US
+3351513088,3351524095,US
3351524096,3351524351,GB
-3351524352,3351642111,US
+3351524352,3351579135,US
+3351579648,3351642111,US
3351642112,3351695871,CA
3351696384,3351696639,CA
3351696640,3351696895,US
@@ -140739,20 +72768,22 @@
3351699200,3351699455,CA
3351699456,3351706367,US
3351706368,3351706623,CA
-3351706624,3351850239,US
-3351850240,3351850495,AP
-3351850496,3351860223,US
+3351706624,3351774719,US
+3351775232,3351860223,US
3351860224,3351861247,KY
3351861248,3351869439,US
3351869440,3351871487,CA
3351871488,3351895551,US
3351895552,3351895807,CA
3351895808,3351904255,US
-3351912448,3351927551,CA
+3351904256,3351927551,CA
3351927552,3351927807,US
3351927808,3351959551,CA
3351959552,3351961599,US
-3351961600,3351969791,CA
+3351961600,3351963647,CA
+3351963648,3351969279,US
+3351969280,3351969535,CA
+3351969536,3351969791,US
3351969792,3352035327,IL
3352035328,3352036351,CA
3352036352,3352046591,US
@@ -140763,13 +72794,7 @@
3352066048,3352067071,CA
3352067072,3352068095,US
3352068096,3352069119,CA
-3352069120,3352069919,US
-3352069920,3352069935,CO
-3352069936,3352069943,US
-3352069944,3352069951,BD
-3352069952,3352082431,US
-3352082432,3352083455,JM
-3352083456,3352088575,US
+3352069120,3352088575,US
3352088576,3352090623,CA
3352090624,3352094719,US
3352094720,3352096767,VG
@@ -140777,129 +72802,19 @@
3352559872,3352563199,CA
3352563200,3352563455,US
3352563456,3352573951,CA
-3352573952,3352574207,US
-3352574464,3352583935,CA
+3352573952,3352574463,US
+3352574464,3352581631,CA
+3352582144,3352583935,CA
3352583936,3352584191,US
3352584192,3352591359,CA
3352591360,3352591615,US
3352591616,3352615423,CA
3352615424,3352616959,US
3352616960,3352887295,CA
-3352887296,3352916479,US
-3352916480,3352916486,BR
-3352916487,3352916512,US
-3352916513,3352916516,BM
-3352916517,3352916524,US
-3352916525,3352916532,BM
-3352916533,3352916533,IN
-3352916534,3352916544,US
-3352916545,3352916552,BR
-3352916553,3352916553,US
-3352916554,3352916558,BR
-3352916559,3352916565,US
-3352916566,3352916567,AT
-3352916568,3352916568,BR
-3352916569,3352916569,US
-3352916570,3352916570,AR
-3352916571,3352916583,US
-3352916584,3352916584,AR
-3352916585,3352916648,US
-3352916649,3352916649,BR
-3352916650,3352916657,US
-3352916658,3352916668,BR
-3352916669,3352916669,US
-3352916670,3352916718,BR
-3352916719,3352916728,US
-3352916729,3352916735,BR
-3352916736,3352918015,US
+3352887296,3352918015,US
3352918016,3352919039,CA
-3352919040,3353335303,US
-3353335304,3353335309,NL
-3353335310,3353335311,US
-3353335312,3353335313,NL
-3353335314,3353335315,US
-3353335316,3353335323,NL
-3353335324,3353335325,US
-3353335326,3353335333,NL
-3353335334,3353335335,US
-3353335336,3353335339,NL
-3353335340,3353335341,US
-3353335342,3353335349,NL
-3353335350,3353335353,IN
-3353335354,3353335359,NL
-3353335360,3353335361,US
-3353335362,3353335363,NL
-3353335364,3353335366,US
-3353335367,3353335376,NL
-3353335377,3353335378,US
-3353335379,3353335380,NL
-3353335381,3353335382,US
-3353335383,3353335390,NL
-3353335391,3353335392,US
-3353335393,3353335406,NL
-3353335407,3353335407,US
-3353335408,3353335411,NL
-3353335412,3353335412,US
-3353335413,3353335420,NL
-3353335421,3353335422,US
-3353335423,3353335435,NL
-3353335436,3353335437,US
-3353335438,3353335457,NL
-3353335458,3353335458,US
-3353335459,3353335460,NL
-3353335461,3353335462,US
-3353335463,3353335468,NL
-3353335469,3353335471,US
-3353335472,3353335473,NL
-3353335474,3353335474,US
-3353335475,3353335476,NL
-3353335477,3353335481,US
-3353335482,3353335483,NL
-3353335484,3353335485,US
-3353335486,3353335487,NL
-3353335488,3353335489,US
-3353335490,3353335493,NL
-3353335494,3353335505,US
-3353335506,3353335507,NL
-3353335508,3353335508,US
-3353335509,3353335510,NL
-3353335511,3353335513,US
-3353335514,3353335515,NL
-3353335516,3353335517,US
-3353335518,3353335519,NL
-3353335520,3353335521,US
-3353335522,3353335529,NL
-3353335530,3353335559,US
-3353335560,3353335594,NL
-3353335595,3353335596,US
-3353335597,3353335598,NL
-3353335599,3353335600,US
-3353335601,3353335606,NL
-3353335607,3353335608,US
-3353335609,3353335616,NL
-3353335617,3353335619,US
-3353335620,3353335655,NL
-3353335656,3353335658,US
-3353335659,3353335664,NL
-3353335665,3353335666,US
-3353335667,3353335668,NL
-3353335669,3353335670,US
-3353335671,3353335676,NL
-3353335677,3353335681,US
-3353335682,3353335685,NL
-3353335686,3353335686,US
-3353335687,3353335688,NL
-3353335689,3353335690,US
-3353335691,3353335706,NL
-3353335707,3353335708,US
-3353335709,3353335743,NL
-3353335744,3353335767,US
-3353335768,3353335791,NL
-3353335792,3353335792,US
-3353335793,3353335794,NL
-3353335795,3353652735,US
-3353652736,3353652863,DE
-3353652864,3353653503,US
+3352919040,3353309695,US
+3353310208,3353653503,US
3353653504,3353653759,GB
3353653760,3353722367,US
3353722368,3353722623,GB
@@ -140909,104 +72824,28 @@
3353730048,3353731071,CA
3353731072,3353731487,US
3353731488,3353731503,AU
-3353731504,3353731775,US
-3353731776,3353731823,IL
-3353731824,3353731999,US
-3353732000,3353732031,CN
-3353732032,3353732063,US
-3353732064,3353732071,RU
-3353732072,3353732127,US
-3353732128,3353732143,RU
-3353732144,3353732159,US
-3353732160,3353732191,CA
-3353732192,3353732607,US
+3353731504,3353732607,US
3353732608,3353732863,DE
-3353732864,3353752581,US
-3353752582,3353752585,FR
-3353752586,3353752589,BE
-3353752590,3353752677,US
-3353752678,3353752681,ES
-3353752682,3353752829,US
-3353752830,3353752830,GB
-3353752831,3353752916,US
-3353752917,3353752917,GB
-3353752918,3353752969,US
-3353752970,3353752970,GB
-3353752971,3353752987,US
-3353752988,3353752991,GB
-3353752992,3353753055,US
-3353753056,3353753059,BR
-3353753060,3353753097,US
-3353753098,3353753098,GB
-3353753099,3353780223,US
+3353732864,3353736191,US
+3353736192,3353736703,PR
+3353736704,3353737215,US
+3353737216,3353737471,GB
+3353737472,3353741823,US
+3353742336,3353780223,US
3353780224,3353780479,GB
-3353780480,3353821183,US
-3353821184,3353821199,CN
-3353821200,3353821215,US
-3353821216,3353821279,CN
-3353821280,3353821284,US
-3353821285,3353821286,CN
-3353821287,3353821287,US
-3353821288,3353821295,CN
-3353821296,3353821296,US
-3353821297,3353821300,CN
-3353821301,3353821301,US
-3353821302,3353821302,CN
-3353821303,3353821303,US
-3353821304,3353821306,CN
-3353821307,3353821308,US
-3353821309,3353821309,CN
-3353821310,3353821311,US
-3353821312,3353821375,CN
-3353821376,3353821439,US
-3353821440,3353821663,CN
-3353821664,3353821695,US
-3353821696,3353821719,CN
-3353821720,3353821727,US
-3353821728,3353821887,CN
-3353821888,3353821983,US
-3353821984,3353822111,CN
-3353822112,3353822207,US
-3353822208,3353822215,CN
-3353822216,3353822223,US
-3353822224,3353822231,CN
-3353822232,3353822239,US
-3353822240,3353822375,CN
-3353822376,3353822383,US
-3353822384,3353822687,CN
-3353822688,3353822719,US
-3353822720,3353822967,CN
-3353822968,3353822975,US
-3353822976,3353822983,CN
-3353822984,3353822991,US
-3353822992,3353823231,CN
-3353823232,3353828703,US
-3353828704,3353828735,RU
-3353828736,3353836543,US
-3353836544,3353837567,CA
-3353837568,3353855999,US
+3353780480,3353855999,US
3353856000,3353858047,CA
3353858048,3353861119,US
3353861120,3353862143,CA
3353862144,3353862719,US
3353862720,3353862751,CA
-3353862752,3353863279,US
-3353863280,3353863287,IL
-3353863288,3353863319,US
-3353863320,3353863327,CN
-3353863328,3353863415,US
-3353863416,3353863423,CN
-3353863424,3353863631,US
-3353863632,3353863639,KW
-3353863640,3353863727,US
-3353863728,3353863751,IL
-3353863752,3353863967,US
-3353863968,3353863975,CN
-3353863976,3353864447,US
+3353862752,3353864447,US
3353864448,3353864703,CA
3353864704,3353864959,US
3353864960,3353865215,CA
-3353865216,3353942527,US
+3353865216,3353884927,US
+3353884928,3353885183,GB
+3353885184,3353942527,US
3353942528,3353943039,CA
3353943040,3353960191,US
3353960192,3353960447,CA
@@ -141014,156 +72853,31 @@
3353979648,3353979903,CA
3353979904,3353982719,US
3353982720,3353983231,CA
-3353983232,3353995639,US
-3353995640,3353995647,ID
-3353995648,3353995711,GB
-3353995712,3353995775,US
-3353995776,3353995783,BR
-3353995784,3353995815,US
-3353995816,3353995823,BR
-3353995824,3354066943,US
+3353983232,3354066943,US
3354066944,3354132479,CA
-3354132480,3354484911,US
-3354484912,3354484927,GB
-3354484928,3354485375,US
-3354485376,3354485439,GB
-3354485440,3354492927,US
+3354132480,3354466815,US
+3354467328,3354492927,US
3354492928,3354494975,CA
-3354494976,3354501119,US
+3354494976,3354499071,US
+3354499072,3354501119,AU
3354501120,3354503167,CA
-3354503168,3354507327,US
-3354507328,3354507335,CY
-3354507336,3354507367,US
-3354507368,3354507375,CA
-3354507376,3354507403,US
-3354507404,3354507407,TH
-3354507408,3354507439,US
-3354507440,3354507443,ID
-3354507444,3354507471,US
-3354507472,3354507475,SG
-3354507476,3354507515,US
-3354507516,3354507519,CN
-3354507520,3354507535,US
-3354507536,3354507551,IE
-3354507552,3354507599,US
-3354507600,3354507607,BR
-3354507608,3354507615,US
-3354507616,3354507631,MY
-3354507632,3354507687,US
-3354507688,3354507691,CA
-3354507692,3354507759,US
-3354507760,3354507775,AU
-3354507776,3354507795,US
-3354507796,3354507799,BG
-3354507800,3354507803,CN
-3354507804,3354507807,CH
-3354507808,3354507815,CN
-3354507816,3354507823,CY
-3354507824,3354507879,US
-3354507880,3354507887,ID
-3354507888,3354507915,US
-3354507916,3354507919,CA
-3354507920,3354507927,US
-3354507928,3354507931,CA
-3354507932,3354507983,US
-3354507984,3354507999,CN
-3354508000,3354508031,US
-3354508032,3354508035,AU
-3354508036,3354508043,US
-3354508044,3354508047,VN
-3354508048,3354508059,US
-3354508060,3354508063,BR
-3354508064,3354508071,US
-3354508072,3354508075,VN
-3354508076,3354508119,US
-3354508120,3354508123,PT
-3354508124,3354508131,US
-3354508132,3354508135,HR
-3354508136,3354508143,US
-3354508144,3354508147,VN
-3354508148,3354508151,NZ
-3354508152,3354508155,IE
-3354508156,3354508163,US
-3354508164,3354508167,AU
-3354508168,3354508183,US
-3354508184,3354508187,MY
-3354508188,3354508191,US
-3354508192,3354508195,IN
-3354508196,3354508199,US
-3354508200,3354508203,BR
-3354508204,3354508223,US
-3354508224,3354508227,VN
-3354508228,3354508231,TR
-3354508232,3354508235,VN
-3354508236,3354508243,CA
-3354508244,3354508247,US
-3354508248,3354508251,HR
-3354508252,3354508271,US
-3354508272,3354508275,IN
-3354508276,3354508279,BD
-3354508280,3354508287,US
-3354508288,3354508295,FR
-3354508296,3354508303,CY
-3354508304,3354508359,US
-3354508360,3354508367,BR
-3354508368,3354508375,GB
-3354508376,3354508383,MY
-3354508384,3354508391,CA
-3354508392,3354508415,US
-3354508416,3354508423,BR
-3354508424,3354508431,US
-3354508432,3354508439,FR
-3354508440,3354508487,US
-3354508488,3354508495,IN
-3354508496,3354508567,US
-3354508568,3354508575,FR
-3354508576,3354508607,US
-3354508608,3354508623,AU
-3354508624,3354508655,US
-3354508656,3354508671,CY
-3354508672,3354508863,US
-3354508864,3354508895,CY
-3354508896,3354508959,US
-3354508960,3354508991,TR
-3354508992,3354508999,RU
-3354509000,3354509007,CN
-3354509008,3354509015,BR
-3354509016,3354509019,US
-3354509020,3354509023,GR
-3354509024,3354509119,US
-3354509120,3354509183,TR
-3354509184,3354509215,GB
-3354509216,3354513151,US
+3354503168,3354513151,US
3354513152,3354513407,CA
-3354513408,3354515711,US
-3354515712,3354515775,CA
-3354515776,3354515967,US
-3354515968,3354516031,CA
-3354516032,3354516223,US
-3354516224,3354516287,CA
-3354516288,3354591231,US
+3354513408,3354532351,US
+3354532864,3354571775,US
+3354572288,3354591231,US
3354591232,3354656767,CA
-3354656768,3354676223,US
+3354656768,3354663423,US
+3354663936,3354676223,US
3354676224,3354677247,CA
3354677248,3354687487,US
3354687488,3354688511,CA
-3354688512,3354708207,US
-3354708208,3354708223,CA
-3354708224,3354731007,US
-3354731008,3354731018,BE
-3354731019,3354731019,EU
-3354731020,3354731263,BE
-3354731264,3354731519,US
-3354731520,3354731775,AP
-3354731776,3354737663,US
-3354737664,3354737919,HK
-3354737920,3354738175,CN
-3354738176,3354770687,US
+3354688512,3354720767,US
+3354721280,3354758655,US
+3354759168,3354770687,US
3354770688,3354770943,CA
3354770944,3354788095,US
-3354788096,3354806639,CA
-3354806640,3354806655,SE
-3354806656,3354807551,CA
+3354788096,3354807551,CA
3354807552,3354810367,US
3354810368,3354814975,CA
3354814976,3354815231,US
@@ -141176,17 +72890,18 @@
3354955776,3354956031,AR
3354956032,3354972159,US
3354972160,3354972415,CA
-3354972416,3355013119,US
+3354972416,3355012607,US
3355013120,3355017215,CA
-3355017216,3355052287,US
+3355017216,3355052031,US
+3355052032,3355052287,CA
3355052288,3355052543,AU
3355052544,3355053311,CA
3355053312,3355053567,US
-3355054080,3355260927,US
+3355054080,3355249151,US
+3355249664,3355253247,US
+3355253760,3355260927,US
3355260928,3355262719,CA
-3355262720,3355272189,US
-3355272190,3355272190,EU
-3355272191,3355310591,US
+3355262720,3355310591,US
3355310592,3355311103,CA
3355311104,3355319295,US
3355319296,3355320319,CA
@@ -141198,30 +72913,17 @@
3355351040,3355351295,CA
3355351296,3355372287,US
3355372288,3355372543,CA
-3355372544,3355384095,US
-3355384096,3355384127,AR
-3355384128,3355384703,US
-3355384704,3355384831,ES
+3355372544,3355384831,US
3355384832,3355385855,CA
3355385856,3355407359,US
3355407360,3355408383,PR
3355408384,3355412479,US
3355412480,3355412991,BE
-3355412992,3355417791,US
-3355417792,3355417795,CA
-3355417796,3355417799,US
-3355417800,3355417807,KW
-3355417808,3355417999,US
-3355418000,3355418015,BE
-3355418016,3355418023,AE
-3355418024,3355418039,US
-3355418040,3355418047,CA
-3355418048,3355418079,US
-3355418080,3355418111,CN
-3355418112,3355430911,US
-3355430912,3355432959,US
-3355432960,3355443199,US
-3355443200,3355445247,CO
+3355412992,3355432959,US
+3355432960,3355435007,CA
+3355435008,3355443199,US
+3355443200,3355443200,GB
+3355443201,3355445247,CO
3355445248,3355447295,BR
3355447296,3355447551,CU
3355447552,3355447807,AR
@@ -141236,7 +72938,7 @@
3355459584,3355459839,PA
3355459840,3355460095,VE
3355460096,3355460351,CL
-3355460352,3355461887,BR
+3355460864,3355461631,BR
3355461888,3355463423,EC
3355463424,3355463935,AR
3355463936,3355464191,BR
@@ -141244,22 +72946,21 @@
3355464448,3355464959,MX
3355464960,3355465727,BR
3355465728,3355465983,UY
-3355465984,3355467263,BR
+3355466752,3355467007,BR
3355467264,3355467519,US
3355467520,3355467775,MX
3355467776,3355468799,AR
-3355468800,3355469567,BR
+3355469312,3355469567,BR
3355469568,3355470591,MX
3355470592,3355470847,PE
3355470848,3355471103,CL
3355471104,3355471359,MX
3355471360,3355471615,PE
3355471616,3355472383,MX
-3355472384,3355472639,BR
3355472640,3355473407,CL
3355473408,3355473919,PE
3355473920,3355475199,CL
-3355475200,3355478015,MX
+3355475200,3355477503,MX
3355478016,3355478271,PE
3355478272,3355478783,US
3355478784,3355479039,VE
@@ -141317,13 +73018,16 @@
3355557888,3355559935,CO
3355559936,3355561983,PY
3355561984,3355564031,SR
+3355564032,3355566079,BR
3355566080,3355574271,AR
3355574272,3355576319,CL
3355576320,3355578367,VE
3355578368,3355582463,CL
3355582464,3355590655,UY
3355590656,3355592703,CO
-3355592704,3355604991,CL
+3355592704,3355599871,CL
+3355599872,3355600895,BR
+3355600896,3355604991,CL
3355604992,3355607039,AR
3355607040,3355615231,HT
3355615232,3355623423,SR
@@ -141379,8 +73083,7 @@
3355843584,3355844863,EC
3355844864,3355845119,CL
3355845120,3355845375,EC
-3355845376,3355848959,BR
-3355849216,3355849727,AR
+3355845376,3355848703,BR
3355849728,3355849983,PA
3355849984,3355850495,CL
3355850496,3355850751,NI
@@ -141391,13 +73094,15 @@
3355860992,3355869183,CL
3355869184,3355870719,BR
3355870720,3355871231,CR
+3355871232,3355873279,BR
3355873280,3355875327,BQ
-3355875328,3355877375,VE
+3355875328,3355876351,MX
+3355876352,3355877375,VE
3355877376,3355885567,CO
3355885568,3355901951,GT
3355901952,3355902975,BR
3355902976,3355903999,CL
-3355904000,3355905535,BR
+3355904000,3355905023,BR
3355905536,3355905791,PY
3355905792,3355906047,AR
3355906048,3355910143,CL
@@ -141405,6 +73110,7 @@
3355918336,3355923455,EC
3355923456,3355924479,UY
3355924480,3355926527,TT
+3355930624,3355934719,BR
3355934720,3355939839,AR
3355939840,3355940863,SR
3355940864,3355942911,AR
@@ -141413,55 +73119,62 @@
3355949056,3355951103,CW
3355951104,3355967487,EC
3355967488,3356033023,VE
-3356033024,3356033791,BR
+3356033280,3356033791,BR
3356033792,3356034047,CL
3356034048,3356035071,PY
3356035072,3356037119,MX
3356037120,3356041215,CO
3356041216,3356049407,CR
3356049408,3356049663,CL
-3356049664,3356051455,BR
+3356049664,3356050175,BR
+3356050432,3356051455,BR
3356051456,3356051711,CO
3356051712,3356051967,CL
3356051968,3356052223,GT
3356052224,3356052479,AR
-3356052480,3356052991,BR
+3356052480,3356052735,BR
3356053248,3356054015,CL
3356054016,3356054527,US
-3356054528,3356057599,BR
+3356054528,3356056575,BR
+3356056832,3356057087,BR
+3356057344,3356057599,BR
3356057600,3356057855,EC
3356057856,3356059135,CL
3356059136,3356060671,BR
3356060672,3356061695,CL
3356061696,3356062463,BR
3356062464,3356062719,JM
-3356062720,3356064255,BR
+3356062720,3356062975,BR
+3356062976,3356063231,CR
+3356063232,3356063743,BR
+3356064000,3356064255,BR
3356064256,3356064511,CL
-3356064512,3356065791,BR
+3356065024,3356065791,BR
3356065792,3356066047,CL
-3356066048,3356069119,BR
+3356066048,3356067839,BR
+3356068352,3356069119,BR
3356069120,3356069631,CL
-3356069632,3356070143,BR
+3356069888,3356070143,BR
3356070144,3356070655,CL
3356070656,3356070911,AR
3356070912,3356071423,BR
3356071424,3356072447,CL
3356073216,3356073471,AR
-3356073472,3356075263,BR
+3356073472,3356073983,BR
3356075264,3356076287,BO
3356076288,3356078079,BR
3356078080,3356078335,EC
3356078336,3356079359,CL
-3356079360,3356080895,BR
+3356080128,3356080383,BR
3356080896,3356082431,NI
3356082432,3356082687,CL
3356082688,3356082943,AR
3356082944,3356083967,CL
-3356083968,3356084479,BR
+3356083968,3356084223,BR
3356084480,3356084735,CL
3356084736,3356085247,BR
3356085248,3356085759,CL
-3356085760,3356086271,BR
+3356085760,3356086015,BR
3356086272,3356086527,AR
3356086528,3356087295,CR
3356087296,3356087807,AR
@@ -141486,7 +73199,6 @@
3356097792,3356098303,AR
3356098304,3356098559,GT
3356098560,3356099583,CL
-3356099584,3356100607,BR
3356100608,3356102399,CL
3356102400,3356102655,PA
3356102656,3356105727,CL
@@ -141496,9 +73208,8 @@
3356114944,3356123135,PE
3356123136,3356131839,AR
3356131840,3356132351,PE
-3356132352,3356134143,BR
+3356133376,3356134143,BR
3356134144,3356134655,AR
-3356134656,3356134911,BR
3356134912,3356135167,DO
3356135168,3356135423,MX
3356135424,3356135679,BR
@@ -141508,16 +73219,16 @@
3356137472,3356137727,JM
3356137728,3356138239,BR
3356138240,3356138495,US
-3356138496,3356139519,BR
+3356138496,3356138751,BR
+3356139264,3356139519,BR
3356139520,3356139775,US
3356139776,3356140031,AR
3356140032,3356140287,DO
-3356140288,3356140799,BR
3356140800,3356141311,BM
3356141312,3356142847,CL
-3356142848,3356145151,BR
+3356143104,3356143615,BR
+3356144128,3356145151,BR
3356145152,3356145407,CL
-3356145408,3356145663,BR
3356145664,3356145919,CL
3356145920,3356146175,BR
3356146176,3356146431,AR
@@ -141552,9 +73263,7 @@
3356160000,3356160255,MX
3356160256,3356160511,GT
3356160512,3356160767,CL
-3356160768,3356161279,MX
-3356161280,3356161535,BR
-3356161536,3356162559,MX
+3356160768,3356162559,MX
3356162560,3356162815,PE
3356162816,3356163583,CL
3356163584,3356163839,VE
@@ -141577,7 +73286,6 @@
3356237824,3356246015,GT
3356246016,3356262655,MX
3356262656,3356263167,CL
-3356263168,3356263423,BR
3356263424,3356263679,CL
3356263680,3356265215,AR
3356265216,3356265471,BR
@@ -141587,7 +73295,6 @@
3356268800,3356269055,PA
3356269056,3356269311,AR
3356269312,3356269823,UY
-3356269824,3356270079,BR
3356270080,3356272383,MX
3356272384,3356272639,CR
3356272640,3356272895,US
@@ -141603,31 +73310,13 @@
3356280832,3356282879,AR
3356282880,3356284927,PA
3356284928,3356286975,AR
-3356286976,3356286991,US
-3356286992,3356287007,GT
-3356287008,3356287023,HN
-3356287024,3356287039,GT
-3356287040,3356287047,US
-3356287048,3356287071,GT
-3356287072,3356287087,SV
-3356287088,3356287103,US
-3356287104,3356287151,GT
-3356287152,3356287359,US
-3356287360,3356287367,GT
-3356287368,3356287487,US
+3356286976,3356287487,US
3356287488,3356287743,SV
3356287744,3356288255,HN
3356288256,3356288767,SV
3356288768,3356289023,GT
3356289024,3356289791,SV
-3356289792,3356289799,US
-3356289800,3356289807,GT
-3356289808,3356289823,SV
-3356289824,3356289887,US
-3356289888,3356289919,SV
-3356289920,3356289951,US
-3356289952,3356289983,GT
-3356289984,3356290303,US
+3356289792,3356290303,US
3356290304,3356290559,SV
3356290560,3356291071,CR
3356291072,3356293119,TT
@@ -141650,8 +73339,8 @@
3356338176,3356339967,SV
3356339968,3356341247,HN
3356341248,3356341759,SV
-3356341760,3356342015,HN
-3356342016,3356343039,SV
+3356341760,3356342271,HN
+3356342272,3356343039,SV
3356343040,3356343551,HN
3356343552,3356344319,SV
3356344320,3356360703,CO
@@ -141660,7 +73349,7 @@
3356364800,3356368895,MX
3356368896,3356369407,BR
3356369408,3356369663,EC
-3356369664,3356370175,BR
+3356369664,3356369919,BR
3356370176,3356370943,AR
3356370944,3356372991,CO
3356372992,3356375039,CU
@@ -141678,7 +73367,17 @@
3356390400,3356390655,AR
3356390656,3356391167,CL
3356391168,3356391423,PA
-3356393472,3356426239,CL
+3356393472,3356413439,CL
+3356413440,3356413823,CO
+3356413824,3356420607,CL
+3356420608,3356420991,CO
+3356420992,3356421247,CL
+3356421248,3356421375,CO
+3356421376,3356421759,CL
+3356421760,3356422015,CO
+3356422016,3356425471,CL
+3356425472,3356425599,CO
+3356425600,3356426239,CL
3356426240,3356427263,BR
3356427264,3356491775,US
3356491776,3356493823,PE
@@ -141705,8 +73404,23 @@
3356557312,3356819455,BR
3356819456,3356884991,CO
3356884992,3356950527,CL
-3356950528,3357016063,MX
-3357016064,3357048831,CO
+3356950528,3356958463,MX
+3356958720,3356967167,MX
+3356967424,3356967935,MX
+3356968960,3356970495,MX
+3356971520,3356972031,MX
+3356972288,3356979967,MX
+3356980480,3356980735,MX
+3356981248,3356988415,MX
+3356988672,3356989439,MX
+3356989952,3356996607,MX
+3356997632,3357003007,MX
+3357003776,3357007871,MX
+3357007872,3357011967,BR
+3357011968,3357015551,MX
+3357016064,3357018623,CO
+3357020160,3357032447,CO
+3357040640,3357048831,CO
3357057024,3357065215,PE
3357065216,3357073407,EC
3357073408,3357077503,CL
@@ -141730,10 +73444,11 @@
3357409280,3357411327,BR
3357411328,3357412351,VE
3357412352,3357412863,PE
-3357412864,3357413119,US
+3357412864,3357413119,BR
3357413120,3357413375,FR
3357413376,3357414399,US
-3357414400,3357415679,PR
+3357414400,3357415423,PR
+3357415424,3357415679,US
3357415680,3357416447,MX
3357416448,3357417215,VE
3357417216,3357417471,US
@@ -141766,17 +73481,14 @@
3357442960,3357442967,SV
3357442968,3357443007,GT
3357443008,3357443071,SV
-3357443072,3357443583,GT
+3357443072,3357443327,NI
+3357443328,3357443583,GT
3357443584,3357444351,HN
3357444352,3357444479,GT
3357444480,3357444487,HN
-3357444488,3357444623,GT
-3357444624,3357444631,SV
-3357444632,3357444647,GT
-3357444648,3357444655,SV
-3357444656,3357444663,GT
-3357444664,3357444671,SV
-3357444672,3357448407,GT
+3357444488,3357444607,GT
+3357444608,3357444863,SV
+3357444864,3357448407,GT
3357448408,3357448415,SV
3357448416,3357448447,GT
3357448448,3357448703,SV
@@ -141790,10 +73502,8 @@
3357451120,3357451127,HN
3357451128,3357451143,GT
3357451144,3357451151,HN
-3357451152,3357451343,GT
-3357451344,3357451351,HN
-3357451352,3357451503,GT
-3357451504,3357451519,HN
+3357451152,3357451263,GT
+3357451264,3357451519,HN
3357451520,3357451575,GT
3357451576,3357451583,NI
3357451584,3357452287,GT
@@ -141801,12 +73511,21 @@
3357452800,3357453055,NI
3357453056,3357453071,GT
3357453072,3357453079,SV
-3357453080,3357453311,GT
+3357453080,3357453135,GT
+3357453136,3357453151,SV
+3357453152,3357453311,GT
3357453312,3357453567,HN
-3357453568,3357454847,GT
+3357453568,3357454591,GT
+3357454592,3357454847,NI
3357454848,3357455103,HN
3357455104,3357455359,SV
-3357455360,3357458431,GT
+3357455360,3357455871,GT
+3357455872,3357456127,NI
+3357456128,3357456639,GT
+3357456640,3357456895,HN
+3357456896,3357457711,GT
+3357457712,3357457727,CR
+3357457728,3357458431,GT
3357458432,3357474815,CL
3357474816,3357475071,US
3357475072,3357475887,AR
@@ -141821,14 +73540,43 @@
3357476288,3357476351,VE
3357476352,3357476479,AR
3357476480,3357476607,EC
-3357476608,3357476735,AR
+3357476608,3357476687,AR
+3357476688,3357476703,US
+3357476704,3357476735,AR
3357476736,3357476799,US
-3357476800,3357477247,AR
-3357477248,3357477375,EC
+3357476800,3357476863,AR
+3357476864,3357477375,EC
3357477376,3357477423,AR
3357477424,3357477431,EC
-3357477432,3357477887,AR
-3357477888,3357480959,CO
+3357477432,3357477543,AR
+3357477544,3357477551,EC
+3357477552,3357477887,AR
+3357477888,3357478911,CO
+3357478912,3357479063,AR
+3357479064,3357479071,CO
+3357479072,3357479135,AR
+3357479136,3357479151,CO
+3357479152,3357479183,AR
+3357479184,3357479191,CO
+3357479192,3357479215,AR
+3357479216,3357479223,CO
+3357479224,3357479551,AR
+3357479552,3357479679,CO
+3357479680,3357479863,AR
+3357479864,3357479867,CO
+3357479868,3357479871,AR
+3357479872,3357479879,CO
+3357479880,3357480103,AR
+3357480104,3357480111,CO
+3357480112,3357480335,AR
+3357480336,3357480343,CO
+3357480344,3357480359,AR
+3357480360,3357480367,CO
+3357480368,3357480463,AR
+3357480464,3357480479,CO
+3357480480,3357480719,AR
+3357480720,3357480735,CO
+3357480736,3357480959,AR
3357480960,3357483007,EC
3357483008,3357491199,CL
3357491200,3357499391,CO
@@ -141838,7 +73586,8 @@
3357523968,3357532159,CO
3357532160,3357556735,AR
3357556736,3357556991,VE
-3357556992,3357557759,AR
+3357556992,3357557247,AR
+3357557248,3357557759,MX
3357557760,3357558783,EC
3357558784,3357559039,AR
3357559040,3357559295,EC
@@ -141846,7 +73595,9 @@
3357559552,3357559807,US
3357559808,3357559935,AR
3357559936,3357560063,VE
-3357560064,3357560247,AR
+3357560064,3357560199,AR
+3357560200,3357560207,VE
+3357560208,3357560247,AR
3357560248,3357560255,VE
3357560256,3357560263,AR
3357560264,3357560271,VE
@@ -141857,19 +73608,52 @@
3357561856,3357581311,AR
3357581312,3357589503,CL
3357589504,3357605887,BZ
-3357605888,3357736959,MX
+3357605888,3357606911,MX
+3357607168,3357613055,MX
+3357613312,3357616127,MX
+3357616384,3357618943,MX
+3357619200,3357623039,MX
+3357623296,3357626623,MX
+3357627392,3357627647,MX
+3357627904,3357628415,MX
+3357630720,3357633535,MX
+3357633792,3357634815,MX
+3357635072,3357635327,MX
+3357635584,3357635839,MX
+3357636096,3357637887,MX
+3357638656,3357640703,BR
+3357640704,3357644799,MX
+3357644800,3357646847,BR
+3357646848,3357647871,MX
+3357648896,3357650431,MX
+3357650944,3357657855,MX
+3357658112,3357670655,MX
+3357670912,3357712383,MX
+3357713408,3357715199,MX
+3357715456,3357715711,MX
+3357715968,3357723903,MX
+3357724416,3357725183,MX
+3357725440,3357726463,MX
+3357728000,3357728767,MX
+3357728768,3357736959,BR
3357736960,3357745151,VE
3357745152,3357753343,CO
3357753344,3357757487,VE
3357757488,3357757495,BO
3357757496,3357773823,VE
3357773824,3357775871,PA
-3357775872,3357776895,UY
+3357775872,3357776127,US
+3357776128,3357776383,UY
+3357776384,3357776895,US
+3357776896,3357777919,CL
3357777920,3357786111,GT
3357786112,3357802495,VE
3357802496,3357868031,MX
3357868032,3357933567,PE
-3357933568,3358064639,MX
+3357933568,3358015487,MX
+3358015488,3358023679,BR
+3358023680,3358040063,MX
+3358048256,3358064639,MX
3358064640,3358130175,UY
3358130176,3358131199,EC
3358131200,3358131327,AR
@@ -141880,29 +73664,32 @@
3358131984,3358132031,CO
3358132032,3358132087,AR
3358132088,3358132095,CO
-3358132096,3358132607,AR
+3358132096,3358132127,AR
+3358132128,3358132135,CO
+3358132136,3358132607,AR
3358132608,3358132735,CO
3358132736,3358132991,AR
3358132992,3358133119,EC
3358133120,3358133247,AR
3358133248,3358133759,VE
-3358133760,3358142975,AR
+3358133760,3358142719,AR
+3358142720,3358142975,US
3358142976,3358143231,CO
3358143232,3358143487,AR
3358143488,3358143999,US
3358144000,3358144255,AR
3358144256,3358144511,CL
3358144512,3358145023,VE
-3358145024,3358149719,AR
-3358149720,3358149727,CO
-3358149728,3358150015,AR
+3358145024,3358149631,AR
+3358149632,3358149887,CO
+3358149888,3358150015,AR
3358150016,3358150143,CO
3358150144,3358150423,AR
3358150424,3358150431,CO
-3358150432,3358150495,AR
-3358150496,3358150655,CO
-3358150656,3358150783,EC
-3358150784,3358151263,AR
+3358150432,3358150479,AR
+3358150480,3358150655,CO
+3358150656,3358150911,EC
+3358150912,3358151263,AR
3358151264,3358151271,EC
3358151272,3358151423,AR
3358151424,3358151551,EC
@@ -141917,14 +73704,14 @@
3358152960,3358153087,EC
3358153088,3358153279,AR
3358153280,3358153311,US
-3358153312,3358153471,AR
-3358153472,3358153535,US
+3358153312,3358153343,AR
+3358153344,3358153535,US
3358153536,3358153599,AR
3358153600,3358153663,PR
3358153664,3358153703,AR
3358153704,3358153711,PR
-3358153712,3358153855,AR
-3358153856,3358153983,EC
+3358153712,3358153727,AR
+3358153728,3358153983,EC
3358153984,3358154239,US
3358154240,3358154751,CL
3358154752,3358158847,PE
@@ -141943,19 +73730,15 @@
3358326784,3358392319,VE
3358392320,3358457855,AR
3358457856,3358523391,PA
-3358523392,3358525439,VE
-3358525440,3358527487,AR
-3358527488,3358529791,VE
-3358529792,3358530303,AR
-3358530304,3358531071,VE
-3358531072,3358533631,AR
-3358533632,3358534143,VE
-3358534144,3358534655,AR
-3358534656,3358535423,VE
-3358535424,3358535679,AR
-3358535680,3358536703,VE
-3358536704,3358537727,AR
-3358537728,3358539519,VE
+3358523392,3358529535,VE
+3358529536,3358530303,AR
+3358530304,3358532607,VE
+3358532608,3358532863,AR
+3358532864,3358534399,VE
+3358534400,3358534655,AR
+3358534656,3358535167,VE
+3358535168,3358535679,AR
+3358535680,3358539519,VE
3358539520,3358539775,AR
3358539776,3358543871,VE
3358543872,3358544127,MX
@@ -141963,9 +73746,9 @@
3358548224,3358548479,AR
3358548480,3358549759,VE
3358549760,3358550015,AR
-3358550016,3358552063,VE
-3358552064,3358556159,AR
-3358556160,3358558463,VE
+3358550016,3358553599,VE
+3358553600,3358553855,AR
+3358553856,3358558463,VE
3358558464,3358558591,PY
3358558592,3358562303,VE
3358562304,3358563327,PE
@@ -141994,7 +73777,9 @@
3358565568,3358565599,AR
3358565600,3358565791,VE
3358565792,3358565855,AR
-3358565856,3358566047,VE
+3358565856,3358565951,VE
+3358565952,3358566015,AR
+3358566016,3358566047,VE
3358566048,3358566111,AR
3358566112,3358566847,VE
3358566848,3358566879,AR
@@ -142014,17 +73799,14 @@
3358568960,3358570495,VE
3358570496,3358570751,MX
3358570752,3358571263,PE
-3358571264,3358572031,MX
-3358572032,3358573055,VE
+3358571264,3358572543,MX
+3358572544,3358573055,VE
3358573056,3358573311,AR
3358573312,3358574847,VE
-3358574848,3358575103,AR
-3358575104,3358575615,VE
-3358575616,3358576127,AR
+3358574848,3358576127,AR
3358576128,3358577151,VE
3358577152,3358577407,PE
-3358577408,3358577663,VE
-3358577664,3358577919,AR
+3358577408,3358577919,AR
3358577920,3358578175,VE
3358578176,3358578431,AR
3358578432,3358578687,VE
@@ -142043,9 +73825,7 @@
3358717952,3358719999,US
3358720000,3358728191,PR
3358728192,3358736383,CL
-3358736384,3358737111,BB
-3358737112,3358737119,CA
-3358737120,3358738175,BB
+3358736384,3358738175,BB
3358738176,3358738687,GD
3358738688,3358739711,BB
3358739712,3358739967,KN
@@ -142058,7 +73838,15 @@
3358777344,3358779391,CR
3358779392,3358781439,EC
3358781440,3358851071,AR
-3358851072,3358982143,MX
+3358851072,3358855167,MX
+3358855168,3358859263,BR
+3358859264,3358887935,MX
+3358887936,3358892031,HN
+3358892032,3358918655,MX
+3358918656,3358920703,BR
+3358924800,3358965759,MX
+3358966784,3358967039,MX
+3358973952,3358982143,MX
3358982144,3359047679,CL
3359047680,3359080447,AR
3359080448,3359096831,CU
@@ -142067,42 +73855,7 @@
3359109120,3359111167,AR
3359111168,3359113215,EC
3359113216,3359244287,MX
-3359244288,3359248383,US
-3359248384,3359248399,BR
-3359248400,3359249679,US
-3359249680,3359249695,AR
-3359249696,3359249727,BR
-3359249728,3359249759,US
-3359249760,3359249791,BR
-3359249792,3359249887,AR
-3359249888,3359250431,US
-3359250432,3359250815,AR
-3359250816,3359250879,US
-3359250880,3359250943,AR
-3359250944,3359251455,US
-3359251456,3359251711,AR
-3359251712,3359251967,US
-3359251968,3359252031,AR
-3359252032,3359252039,US
-3359252040,3359252047,IT
-3359252048,3359252063,US
-3359252064,3359252095,AR
-3359252096,3359252159,US
-3359252160,3359252223,AR
-3359252224,3359256575,US
-3359256576,3359256639,BR
-3359256640,3359257087,US
-3359257088,3359257103,BR
-3359257104,3359257127,AR
-3359257128,3359257135,BR
-3359257136,3359257151,US
-3359257152,3359257183,BR
-3359257184,3359257215,US
-3359257216,3359257247,AR
-3359257248,3359257263,BR
-3359257264,3359257279,US
-3359257280,3359257311,AR
-3359257312,3359260671,US
+3359244288,3359260671,US
3359260672,3359268863,BO
3359268864,3359277055,AR
3359277056,3359285247,UY
@@ -142114,7 +73867,9 @@
3359315968,3359318015,HN
3359318016,3359356927,AR
3359356928,3359358975,VE
-3359358976,3359375359,AR
+3359358976,3359363071,AR
+3359363072,3359367167,PA
+3359367168,3359375359,AR
3359375360,3359440895,PE
3359440896,3359461951,AR
3359461952,3359462015,HN
@@ -142150,9 +73905,13 @@
3359586304,3359588351,CL
3359588352,3359596543,AR
3359596544,3359598591,CL
-3359600640,3359621119,AR
+3359598592,3359599615,EC
+3359599616,3359621119,AR
3359621120,3359637503,EC
-3359637504,3359899647,MX
+3359637504,3359789583,MX
+3359789584,3359789599,US
+3359789600,3359797247,MX
+3359801344,3359899647,MX
3359899648,3359916031,CL
3359916032,3359932415,AR
3359948800,3359989759,AR
@@ -142173,12 +73932,11 @@
3360161792,3360251903,CL
3360251904,3360253951,BO
3360253952,3360255999,SV
-3360258048,3360260095,CL
+3360256000,3360260095,CL
3360260096,3360276479,AR
3360276480,3360278527,VE
3360278528,3360280575,EC
3360280576,3360282623,CL
-3360282624,3360284671,CO
3360284672,3360325631,CL
3360325632,3360333823,CO
3360333824,3360342015,CL
@@ -142193,27 +73951,45 @@
3360399360,3360403455,BO
3360405504,3360407551,HN
3360407552,3360423935,PA
-3360423936,3360686079,MX
-3360686080,3360705791,AR
-3360705792,3360706047,US
-3360706048,3360707071,AR
-3360707072,3360707327,US
-3360707328,3360708223,AR
+3360423936,3360456447,MX
+3360456448,3360456703,US
+3360456704,3360534527,MX
+3360538624,3360667647,MX
+3360667648,3360669695,BR
+3360669696,3360686079,MX
+3360686080,3360705535,AR
+3360705536,3360706047,US
+3360706048,3360706815,AR
+3360706816,3360707327,US
+3360707328,3360707583,AR
+3360707584,3360708095,US
+3360708096,3360708223,AR
3360708224,3360708351,US
3360708352,3360708991,AR
-3360708992,3360709119,US
-3360709120,3360710271,AR
+3360708992,3360709247,US
+3360709248,3360709631,AR
+3360709632,3360709759,US
+3360709760,3360710271,AR
3360710272,3360710399,US
-3360710400,3360710655,AR
+3360710400,3360710527,AR
+3360710528,3360710655,US
3360710656,3360718847,HT
3360718848,3360760575,AR
3360760576,3360760831,UY
3360760832,3360763903,AR
3360763904,3360765951,GT
3360765952,3360767999,CO
-3360768000,3360788479,AR
+3360768000,3360772351,AR
+3360772352,3360772479,BO
+3360772480,3360781839,AR
+3360781840,3360781847,DO
+3360781848,3360781943,AR
+3360781944,3360781947,MX
+3360781948,3360782167,AR
+3360782168,3360782175,MX
+3360782176,3360788479,AR
3360788480,3360790527,CL
-3360792576,3360849919,AR
+3360790528,3360849919,AR
3360849920,3360882687,VE
3360882688,3360948223,CL
3360948224,3361013759,VE
@@ -142228,16 +74004,26 @@
3361054720,3361058815,NI
3361058816,3361062911,AR
3361062912,3361071103,CL
-3361071104,3361078527,CO
-3361078528,3361078655,VE
-3361078656,3361079295,CO
+3361071104,3361072639,CO
+3361072640,3361072767,VE
+3361072768,3361072895,CO
+3361072896,3361073151,VE
+3361073152,3361074175,CO
+3361074176,3361074431,VE
+3361074432,3361079295,CO
3361079296,3361144831,CL
3361144832,3361210367,BO
3361210368,3361275903,DO
-3361275904,3361281279,PE
-3361281280,3361281791,VE
-3361281792,3361282047,PE
-3361282048,3361284095,VE
+3361275904,3361276415,VE
+3361276416,3361276543,PE
+3361276544,3361278463,VE
+3361278464,3361278591,PE
+3361278592,3361278719,VE
+3361278720,3361278975,PE
+3361278976,3361279615,VE
+3361279616,3361279743,PE
+3361279744,3361279999,VE
+3361280000,3361284095,PE
3361284096,3361296383,CL
3361296384,3361298431,SV
3361298432,3361300479,DO
@@ -142258,24 +74044,28 @@
3361538048,3361570815,VE
3361570816,3361587199,CO
3361587200,3361599487,EC
-3361599488,3361601535,UY
+3361599488,3361601279,UY
3361601536,3361603583,EC
-3361603584,3361734655,MX
+3361603584,3361665023,MX
+3361669120,3361713151,MX
+3361726464,3361734655,MX
3361734656,3362258943,BR
3362258944,3362324479,CL
3362324480,3362324735,AR
3362324736,3362324991,US
3362324992,3362328063,AR
-3362328064,3362328319,US
-3362328320,3362337279,AR
+3362328064,3362328575,US
+3362328576,3362337279,AR
3362337280,3362338047,US
3362338048,3362342143,AR
3362342144,3362342399,PA
-3362342400,3362344447,AR
+3362342400,3362343423,AR
+3362343424,3362343679,US
+3362343680,3362344447,AR
3362344448,3362344703,US
3362344704,3362344959,AR
-3362344960,3362347007,US
-3362347008,3362348799,AR
+3362344960,3362346751,US
+3362346752,3362348799,AR
3362348800,3362349055,US
3362349056,3362351103,CR
3362351104,3362353151,AR
@@ -142288,8 +74078,8 @@
3362426880,3362428927,PA
3362428928,3362430975,CL
3362430976,3362447359,CO
-3362447360,3362448383,SV
-3362448384,3362448895,HN
+3362447360,3362447871,SV
+3362447872,3362448895,HN
3362448896,3362449151,SV
3362449152,3362449407,HN
3362449408,3362451199,SV
@@ -142304,8 +74094,8 @@
3362476032,3362476287,HN
3362476288,3362476543,AR
3362476544,3362477055,CR
-3362477056,3362478079,CW
-3362478080,3362480127,AR
+3362477056,3362478079,BQ
+3362478080,3362484223,AR
3362486272,3362488319,HN
3362488320,3362504703,PE
3362504704,3362506751,VE
@@ -142326,11 +74116,12 @@
3362586624,3362652159,VE
3362652160,3362664447,PE
3362664448,3362668543,BO
-3362668544,3362684927,EC
-3362684928,3362686975,AR
-3362686976,3362687263,CO
-3362687264,3362687304,AR
-3362687305,3362689279,CO
+3362668544,3362676735,EC
+3362680832,3362684927,EC
+3362684928,3362687999,AR
+3362688000,3362688511,CO
+3362688512,3362688767,AR
+3362688768,3362689279,CO
3362689280,3362689311,AR
3362689312,3362690367,CO
3362690368,3362690431,AR
@@ -142342,20 +74133,24 @@
3362692608,3362692863,CO
3362692864,3362695167,AR
3362695168,3362697215,CO
-3362697216,3362711551,AR
+3362697216,3362703359,AR
+3362705408,3362711551,AR
3362711552,3362713599,EC
-3362713600,3362714623,GT
+3362713600,3362714623,VE
3362714624,3362714879,HN
-3362714880,3362717695,GT
+3362714880,3362716415,VE
+3362716416,3362716671,CR
+3362716672,3362717695,VE
3362717696,3362815999,CL
3362816000,3362832383,AR
-3362836480,3362838527,CO
+3362832384,3362838527,CO
3362838528,3362840575,EC
3362840576,3362897919,CL
-3362897920,3362903807,HT
-3362903808,3362904063,MX
+3362897920,3362903551,HT
+3362903552,3362904063,MX
3362904064,3362914303,HT
3362914304,3362930687,CO
+3362930688,3362934783,CL
3362934784,3362936831,AR
3362936832,3362938879,CL
3362938880,3362942975,AR
@@ -142370,7 +74165,9 @@
3362992128,3362996223,AR
3362996224,3363000319,UY
3363000320,3363004415,AR
-3363012608,3363024895,PA
+3363012608,3363013967,PA
+3363013968,3363013975,NI
+3363013976,3363024895,PA
3363024896,3363025151,HN
3363025152,3363025407,PA
3363025408,3363025663,CO
@@ -142394,9 +74191,13 @@
3363504128,3363512319,PE
3363512320,3363554047,AR
3363554048,3363554175,US
-3363554176,3363556095,AR
-3363556096,3363556223,US
-3363556224,3363557375,AR
+3363554176,3363554943,AR
+3363554944,3363555071,US
+3363555072,3363555839,AR
+3363555840,3363556223,US
+3363556224,3363556351,AR
+3363556352,3363556607,US
+3363556608,3363557375,AR
3363557376,3363559423,BZ
3363559424,3363561471,AR
3363565568,3363569663,AR
@@ -142423,14 +74224,88 @@
3363684352,3363708927,EC
3363708928,3363713023,CL
3363713024,3363713279,EC
+3363713536,3363714047,CL
+3363714048,3363717119,PE
3363717120,3363733503,CL
3363733504,3363831807,AR
-3363831808,3378511871,BR
+3363831808,3364794367,BR
+3364798464,3367796735,BR
+3367804928,3368321023,BR
+3368325120,3370487807,BR
+3370491904,3370504191,BR
+3370508288,3372732415,BR
+3372736512,3375874047,BR
+3375878144,3376873471,BR
+3376881664,3376922623,BR
+3376926720,3377291263,BR
+3377295360,3377303551,BR
+3377307648,3378511871,BR
3378511872,3380506879,MX
3380506880,3380507135,BR
-3380507136,3383754751,MX
+3380507136,3380744191,MX
+3380748288,3380760831,MX
+3380762624,3380764671,BR
+3380764672,3380807167,MX
+3380807680,3380808191,MX
+3380808704,3380811775,MX
+3380813824,3380815103,MX
+3380815872,3380816127,MX
+3380816896,3380817151,MX
+3380817920,3380818175,MX
+3380818944,3380822527,MX
+3380824064,3380826111,MX
+3380828160,3380828671,MX
+3380830208,3380830463,MX
+3380831232,3380831743,MX
+3380832256,3380832767,MX
+3380833280,3380833791,MX
+3380834304,3380834815,MX
+3380835328,3380835839,MX
+3380836352,3380836607,MX
+3380837376,3380840447,MX
+3380854784,3380858879,MX
+3380865024,3380867071,MX
+3380869120,3381350399,MX
+3381354496,3381373951,MX
+3381374976,3381377023,MX
+3381379072,3381448703,MX
+3381460992,3381559295,MX
+3381592064,3381944319,MX
+3381952512,3381960703,MX
+3381968896,3381972991,MX
+3381985280,3382009855,MX
+3382018048,3382054911,MX
+3382059008,3382063103,MX
+3382067200,3382071295,MX
+3382083584,3382087679,MX
+3382099968,3382558719,MX
+3382575104,3382577151,MX
+3382579200,3382580223,MX
+3382583296,3382585343,MX
+3382591488,3382602751,MX
+3382603776,3382605823,MX
+3382607872,3382642687,MX
+3382644736,3382646783,MX
+3382648832,3382651903,MX
+3382652928,3382653951,MX
+3382657024,3382659071,MX
+3382661120,3382662143,MX
+3382665216,3382669311,MX
+3382673408,3382677503,MX
+3382681600,3382683647,MX
+3382685696,3382686719,MX
+3382689792,3382695935,MX
+3382697984,3382853631,MX
+3382902784,3383148543,MX
+3383164928,3383295999,MX
+3383361536,3383630843,MX
+3383630844,3383630847,US
+3383630848,3383701503,MX
+3383721984,3383754751,MX
3383754752,3384147967,AR
-3384147968,3384156159,US
+3384147968,3384154879,US
+3384154880,3384155135,HN
+3384155136,3384156159,US
3384156160,3384160255,PA
3384160256,3384164351,US
3384164352,3384183807,PA
@@ -142443,10 +74318,12 @@
3384688640,3384705023,CO
3384705024,3384705535,US
3384705536,3384706047,PA
-3384706048,3384706559,US
-3384706560,3384721407,PA
+3384706048,3384707071,US
+3384707072,3384721407,PA
3384721408,3384725503,US
-3384725504,3384737791,PA
+3384725504,3384732415,PA
+3384732416,3384732671,BR
+3384732672,3384737791,PA
3384737792,3385851903,CR
3385851904,3386114047,VE
3386114048,3386245119,AR
@@ -142477,21 +74354,19 @@
3386613760,3386621951,AR
3386621952,3386630143,CO
3386630144,3386632191,UY
+3386632192,3386634239,CL
+3386634240,3386636287,CO
+3386637312,3386638335,UY
3386638336,3386640895,CW
3386640896,3386641151,US
-3386641152,3386642175,CW
-3386642176,3386642431,CA
+3386641152,3386642431,CW
3386642432,3386644735,AR
3386644736,3386644991,PY
-3386646528,3386647551,CO
-3386647552,3386647679,VE
-3386647680,3386647743,CO
-3386647744,3386649599,VE
-3386649600,3386649855,CO
-3386649856,3386650111,VE
-3386650112,3386650623,CO
-3386650624,3386654719,VE
-3386654720,3386662911,CO
+3386644992,3386645247,CR
+3386645248,3386645503,CL
+3386645504,3386645759,AR
+3386645760,3386646015,CR
+3386646016,3386662911,CO
3386662912,3386671103,CL
3386671104,3386675199,HN
3386675200,3386687487,AR
@@ -142515,6 +74390,7 @@
3386777600,3386781695,CW
3386781696,3386783743,PY
3386783744,3386784767,AR
+3386784768,3386785791,GT
3386785792,3386802175,BO
3386802176,3386900479,CL
3386900480,3387162623,PA
@@ -142527,23 +74403,22 @@
3387555840,3387568127,AR
3387568128,3387572223,PE
3387572224,3387573375,AR
-3387573376,3387573631,CO
-3387573632,3387574015,AR
+3387573376,3387573759,CO
+3387573760,3387574015,AR
3387574016,3387574143,CO
-3387574144,3387575807,AR
+3387574144,3387574783,AR
+3387574784,3387575039,CO
+3387575040,3387575295,AR
+3387575296,3387575423,CO
+3387575424,3387575807,AR
3387575808,3387576063,CO
-3387576064,3387577599,AR
-3387577600,3387577855,EC
-3387577856,3387584511,AR
+3387576064,3387576319,AR
+3387576320,3387578367,EC
+3387578368,3387584511,AR
3387584512,3387588607,PE
3387588608,3387600895,AR
3387600896,3387604991,CO
-3387604992,3387608319,AR
-3387608320,3387608447,EC
-3387608448,3387608575,AR
-3387608576,3387608831,EC
-3387608832,3387609087,AR
-3387609088,3387613183,EC
+3387604992,3387613183,EC
3387613184,3387617279,VE
3387617280,3387619327,CO
3387619328,3387686911,AR
@@ -142572,7 +74447,7 @@
3389016064,3389016575,JP
3389016576,3389017087,AU
3389017088,3389017343,JP
-3389017344,3389017599,IN
+3389017344,3389017599,HK
3389017600,3389017855,AU
3389017856,3389018111,VN
3389018112,3389018367,PG
@@ -142594,8 +74469,10 @@
3389025536,3389025791,IN
3389025792,3389026047,PK
3389026048,3389026303,TH
-3389026304,3389028351,IN
-3389028352,3389028607,TH
+3389026304,3389026559,IN
+3389026560,3389027071,AU
+3389027072,3389027583,IN
+3389027584,3389028607,TH
3389028608,3389028863,NZ
3389028864,3389029375,CN
3389029376,3389029887,NZ
@@ -142647,10 +74524,15 @@
3389161472,3389194239,JP
3389194240,3389195775,AU
3389195776,3389196287,HK
-3389196288,3389198335,AU
+3389196288,3389197567,AU
+3389197568,3389197823,IN
+3389197824,3389198079,ID
+3389198080,3389198335,IN
3389198336,3389202431,KR
3389202432,3389203455,NZ
-3389203456,3389204479,AU
+3389203456,3389203967,AU
+3389203968,3389204223,NZ
+3389204224,3389204479,AU
3389204480,3389210623,NZ
3389210624,3389210879,IN
3389210880,3389211135,AU
@@ -142664,7 +74546,10 @@
3389214720,3389218815,NZ
3389218816,3389222911,AU
3389222912,3389223935,US
-3389223936,3389227007,IN
+3389223936,3389225983,IN
+3389225984,3389226239,SG
+3389226240,3389226495,AU
+3389226496,3389227007,IN
3389227008,3389227519,CN
3389227520,3389228031,PK
3389228032,3389228799,AU
@@ -142706,9 +74591,7 @@
3389306624,3389306879,AU
3389306880,3389307135,SG
3389307136,3389307647,ID
-3389307648,3389307903,JP
3389307904,3389308159,AU
-3389308160,3389308415,KH
3389308416,3389308671,AU
3389308672,3389308927,PH
3389308928,3389317119,HK
@@ -142728,9 +74611,7 @@
3389358080,3389366271,PK
3389366272,3389370177,AU
3389370178,3389370178,PG
-3389370179,3389372415,AU
-3389372416,3389373439,US
-3389373440,3389374463,AU
+3389370179,3389374463,AU
3389374464,3389378559,MN
3389382656,3389390847,TW
3389390848,3389391359,HK
@@ -142806,8 +74687,7 @@
3389525504,3389526015,TW
3389526016,3389528063,JP
3389528064,3389528319,CN
-3389528576,3389528831,JP
-3389528832,3389529087,AP
+3389528576,3389529087,JP
3389529088,3389529599,ID
3389529600,3389529855,PH
3389529856,3389530111,HK
@@ -142847,7 +74727,8 @@
3389604352,3389604863,SG
3389604864,3389605119,HK
3389605120,3389605375,ID
-3389605376,3389605887,AU
+3389605376,3389605631,AU
+3389605632,3389605887,SG
3389605888,3389606399,ID
3389606400,3389606655,AU
3389606656,3389606911,IN
@@ -142868,7 +74749,8 @@
3389612032,3389616127,MY
3389620224,3389640703,IN
3389640704,3389644799,JP
-3389644800,3389661183,AU
+3389644800,3389645823,NZ
+3389645824,3389661183,AU
3389661184,3389669375,ID
3389669376,3389673471,CN
3389673472,3389677567,AU
@@ -142918,8 +74800,8 @@
3389812736,3389813759,AU
3389813760,3389814015,CN
3389814016,3389814527,TH
-3389814528,3389846271,AU
-3389846272,3389847551,JP
+3389814528,3389846527,AU
+3389846528,3389847551,JP
3389847552,3389849599,NZ
3389849600,3389915135,JP
3389915136,3389916159,AU
@@ -143011,8 +74893,11 @@
3389980672,3390308351,JP
3390308352,3390310399,NZ
3390310400,3390316543,AU
-3390316544,3390324735,NZ
-3390324736,3390328831,AU
+3390316544,3390325247,NZ
+3390325248,3390325503,CN
+3390325504,3390327807,AU
+3390327808,3390328575,NZ
+3390328576,3390328831,CN
3390328832,3390329087,NZ
3390329088,3390329343,AU
3390329344,3390330623,KR
@@ -143068,9 +74953,7 @@
3390414336,3390414847,SG
3390414848,3390418943,JP
3390418944,3390423039,MV
-3390423040,3390423807,SG
-3390423808,3390424063,AP
-3390424064,3390439423,SG
+3390423040,3390439423,SG
3390439424,3390441471,NZ
3390441472,3390443519,TH
3390443520,3390447359,NZ
@@ -143089,19 +74972,18 @@
3390767104,3390769407,NZ
3390769408,3390769663,IN
3390769664,3390770175,TH
-3390770176,3390771199,AU
+3390770432,3390770687,AU
+3390770944,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
3390963712,3391094783,KR
-3391094784,3391192063,JP
-3391192064,3391192319,AP
-3391192320,3391356927,JP
-3391356928,3391441407,NZ
+3391094784,3391356927,JP
+3391356928,3391388159,NZ
+3391388672,3391414783,NZ
+3391415040,3391441407,NZ
3391441408,3391441663,PH
3391441664,3391444479,NZ
3391444480,3391444991,VN
@@ -143177,16 +75059,85 @@
3391725568,3391733759,TH
3391733760,3391734015,CN
3391734016,3391734783,AU
-3391735808,3391736831,JP
3391736832,3391737855,IN
3391737856,3391741951,JP
-3391741952,3391746047,HK
+3391741952,3391742207,HK
+3391742208,3391742211,IN
+3391742212,3391742223,HK
+3391742224,3391742227,IN
+3391742228,3391742231,HK
+3391742232,3391742243,IN
+3391742244,3391742287,HK
+3391742288,3391742291,IN
+3391742292,3391742319,HK
+3391742320,3391742323,IN
+3391742324,3391742327,HK
+3391742328,3391742331,IN
+3391742332,3391742335,HK
+3391742336,3391742343,IN
+3391742344,3391742347,HK
+3391742348,3391742351,IN
+3391742352,3391742399,HK
+3391742400,3391742403,IN
+3391742404,3391742423,HK
+3391742424,3391742427,IN
+3391742428,3391742443,HK
+3391742444,3391742447,IN
+3391742448,3391742471,HK
+3391742472,3391742475,IN
+3391742476,3391742523,HK
+3391742524,3391742531,IN
+3391742532,3391742571,HK
+3391742572,3391742575,IN
+3391742576,3391742591,HK
+3391742592,3391742595,IN
+3391742596,3391742687,HK
+3391742688,3391742691,IN
+3391742692,3391742719,HK
+3391742720,3391742727,IN
+3391742728,3391742731,HK
+3391742732,3391742735,IN
+3391742736,3391742847,HK
+3391742848,3391742879,IN
+3391742880,3391742903,HK
+3391742904,3391742919,IN
+3391742920,3391742927,HK
+3391742928,3391742935,IN
+3391742936,3391742943,HK
+3391742944,3391742951,IN
+3391742952,3391742983,HK
+3391742984,3391742991,IN
+3391742992,3391743135,HK
+3391743136,3391743151,IN
+3391743152,3391743175,HK
+3391743176,3391743199,IN
+3391743200,3391743359,HK
+3391743360,3391743391,IN
+3391743392,3391743743,HK
+3391743744,3391743759,IN
+3391743760,3391744039,HK
+3391744040,3391744063,IN
+3391744064,3391744111,HK
+3391744112,3391744119,IN
+3391744120,3391744271,HK
+3391744272,3391744367,IN
+3391744368,3391744383,HK
+3391744384,3391744447,IN
+3391744448,3391744511,HK
+3391744512,3391744519,IN
+3391744520,3391744535,HK
+3391744536,3391744543,IN
+3391744544,3391744791,HK
+3391744792,3391744799,IN
+3391744800,3391744823,HK
+3391744824,3391744831,IN
+3391744832,3391745055,HK
+3391745056,3391745087,IN
+3391745088,3391745279,HK
+3391745280,3391745295,IN
+3391745296,3391746047,HK
3391746048,3391750143,CN
-3391750144,3391766783,SG
-3391766784,3391767039,AP
-3391767040,3391810047,SG
-3391810048,3391810303,AP
-3391810304,3391815679,SG
+3391750144,3391815679,SG
3391815680,3391817727,AU
3391817728,3391819775,TO
3391819776,3391823871,JP
@@ -143211,10 +75162,7 @@
3391843328,3391844351,VN
3391844352,3391845887,ID
3391845888,3391846399,PK
-3391847424,3391848447,PK
-3391848448,3391851007,AU
-3391851008,3391851263,AP
-3391851264,3391852543,AU
+3391848448,3391852543,AU
3391852544,3391856639,CN
3391856640,3391864831,ID
3391864832,3391866879,TW
@@ -143238,8 +75186,7 @@
3391906304,3391906815,AU
3391906816,3391907839,PH
3391907840,3391909887,BD
-3391909888,3391910399,US
-3391910400,3391910911,IO
+3391909888,3391910911,IO
3391910912,3391911935,AU
3391911936,3391913983,HK
3391913984,3391914239,TH
@@ -143267,9 +75214,7 @@
3391954944,3391971327,HK
3391971328,3391979519,AU
3391979520,3391979775,HK
-3391979776,3391979955,JP
-3391979956,3391979957,AP
-3391979958,3391980031,JP
+3391979776,3391980031,JP
3391980032,3391980543,HK
3391980544,3391983615,MY
3391983616,3391984639,NP
@@ -143311,7 +75256,6 @@
3392100864,3392101887,ID
3392101888,3392102143,PK
3392102144,3392102399,AU
-3392102400,3392106495,KH
3392106496,3392108543,IN
3392108544,3392109567,AU
3392109824,3392110079,PH
@@ -143328,12 +75272,15 @@
3392114432,3392114687,KR
3392114688,3392118783,GU
3392118784,3392126975,MY
-3392126976,3392135167,ID
+3392126976,3392127847,ID
+3392127848,3392127851,HK
+3392127852,3392128423,ID
+3392128424,3392128431,HK
+3392128432,3392135167,ID
3392135168,3392143359,TH
3392143360,3392208895,JP
-3392208896,3392286975,NZ
-3392286976,3392287231,AP
-3392287232,3392287743,NZ
+3392208896,3392217343,NZ
+3392217600,3392287743,NZ
3392287744,3392288767,NP
3392288768,3392324607,NZ
3392324608,3392325119,AU
@@ -143352,7 +75299,6 @@
3392385024,3392389119,BD
3392389120,3392401407,ID
3392401408,3392403455,SG
-3392403456,3392404479,AU
3392404480,3392405503,ID
3392405504,3392406015,NP
3392406016,3392406527,IN
@@ -143360,7 +75306,6 @@
3392407552,3392409599,ID
3392409600,3392413695,JP
3392413696,3392413951,PK
-3392414208,3392414463,PH
3392414464,3392414719,HK
3392414720,3392415231,AU
3392415232,3392415487,JP
@@ -143452,11 +75397,11 @@
3392692224,3392700415,IN
3392700416,3392708607,SG
3392708608,3392712703,ID
-3392712704,3392716799,AF
-3392716800,3392733439,IN
-3392733440,3392733695,ID
-3392733696,3392734207,IN
-3392734208,3392741375,ID
+3392712704,3392714751,AF
+3392714752,3392715007,FR
+3392715008,3392716799,AF
+3392716800,3392733183,IN
+3392733184,3392741375,ID
3392741376,3392765951,PH
3392765952,3392782335,TH
3392789504,3392790527,HK
@@ -143474,13 +75419,11 @@
3392823296,3392824319,KH
3392824320,3392824831,AU
3392824832,3392825343,IN
-3392825344,3392826367,JP
3392828416,3392829439,JP
3392829440,3392830463,IN
3392830464,3392830719,ID
3392830720,3392830975,IN
3392830976,3392831231,TH
-3392831232,3392831487,IN
3392831488,3392832511,PG
3392832512,3392833535,IN
3392833536,3392835583,AU
@@ -143504,7 +75447,6 @@
3392861696,3392861951,PH
3392861952,3392862207,AU
3392864256,3392864511,CN
-3392864512,3392864767,AU
3392864768,3392865279,IN
3392865280,3392866303,NU
3392866304,3392880639,AU
@@ -143531,7 +75473,7 @@
3392924672,3392924927,CN
3392924928,3392925183,AU
3392925184,3392925695,VN
-3392925696,3392926719,AU
+3392925952,3392926719,AU
3392926720,3392927231,IN
3392927232,3392927743,AU
3392927744,3392927999,IN
@@ -143546,9 +75488,7 @@
3392942080,3392944127,CN
3392944128,3392945151,MY
3392945152,3392946175,IN
-3392946176,3392946719,AU
-3392946720,3392946720,AU
-3392946721,3392954367,AU
+3392946176,3392954367,AU
3392954368,3392956415,CN
3392956416,3392958463,VN
3392958464,3392962559,CN
@@ -143608,26 +75548,26 @@
3393126144,3393126399,CN
3393126400,3393134591,HK
3393134592,3393146879,AU
-3393146880,3393147135,PK
-3393147136,3393150975,CN
+3393146880,3393150975,CN
3393150976,3393159167,IN
3393159168,3393167359,SG
3393167360,3393175551,CN
3393175552,3393183743,PK
3393183744,3393183999,ID
-3393184000,3393184255,AP
+3393184000,3393184255,SG
3393184256,3393184767,PK
3393184768,3393187839,SG
3393187840,3393189887,NP
3393189888,3393190911,CN
3393190912,3393191167,IN
3393191424,3393191935,SB
-3393191936,3393257471,HK
+3393191936,3393222911,HK
+3393222912,3393223167,MY
+3393223168,3393257471,HK
3393257472,3393260031,CN
3393260032,3393260543,BD
3393260544,3393265663,AU
-3393265664,3393267711,NZ
-3393267712,3393273855,CK
+3393265664,3393273855,CK
3393273856,3393282047,AU
3393286144,3393290239,ID
3393290240,3393298431,IN
@@ -143637,7 +75577,8 @@
3393306624,3393314815,HK
3393314816,3393318911,ID
3393318912,3393320959,SG
-3393320960,3393388543,HK
+3393320960,3393363967,HK
+3393372160,3393388543,HK
3393388544,3393389567,CN
3393389568,3393390591,IN
3393390592,3393392639,ID
@@ -143693,7 +75634,6 @@
3393634304,3393638399,CN
3393638400,3393650687,JP
3393650688,3393658879,IN
-3393658880,3393662975,KH
3393662976,3393675263,JP
3393675264,3393679359,MY
3393679360,3393683455,TH
@@ -143709,9 +75649,7 @@
3393741568,3393741823,MG
3393741824,3393742847,US
3393742848,3393743871,TL
-3393743872,3393744639,US
-3393744640,3393744895,KH
-3393744896,3393748991,PH
+3393743872,3393744895,US
3393748992,3393765375,AU
3393765376,3393773567,ID
3393775616,3393777663,BD
@@ -143740,12 +75678,10 @@
3393855744,3393855999,NZ
3393856000,3393856255,AU
3393856256,3393856511,HK
-3393856768,3393856896,AU
-3393856897,3393856897,AP
-3393856898,3393857023,AU
+3393856768,3393857023,SG
3393857024,3393857535,NZ
3393857536,3393858047,HK
-3393858048,3393858559,ID
+3393858304,3393858559,ID
3393858560,3393858815,AU
3393858816,3393859071,ID
3393859072,3393859327,AU
@@ -143758,13 +75694,15 @@
3393862144,3393862655,VN
3393862656,3393862911,NZ
3393862912,3393863167,AU
-3393863168,3393863679,HK
+3393863168,3393863679,SG
3393863680,3393865727,AU
3393865728,3393867775,ID
3393867776,3393871871,CN
-3393871872,3393878015,HK
-3393878016,3393878271,IN
-3393878272,3393880063,HK
+3393871872,3393874943,HK
+3393874944,3393875967,AU
+3393875968,3393878271,HK
+3393878272,3393878527,IN
+3393878528,3393880063,HK
3393880064,3393896447,AU
3393896448,3393906687,NZ
3393908736,3393910783,BD
@@ -143808,12 +75746,9 @@
3394078720,3394078975,AU
3394078976,3394079231,IN
3394079232,3394079743,PH
-3394079744,3394092543,HK
-3394092544,3394092799,AP
-3394092800,3394111487,HK
+3394079744,3394111487,HK
3394111488,3394113535,CN
-3394113536,3394113791,AP
-3394113792,3394117631,SG
+3394113536,3394117631,SG
3394117632,3394121727,AU
3394121728,3394125823,SG
3394125824,3394142207,PH
@@ -143835,9 +75770,9 @@
3394191360,3394207743,SG
3394207744,3394215935,JP
3394215936,3394220031,AU
-3394220032,3394226943,SG
-3394226944,3394227199,AP
-3394227200,3394232319,SG
+3394220032,3394230271,SG
+3394230272,3394230527,AU
+3394230528,3394232319,SG
3394232320,3394234367,CN
3394234368,3394236415,VN
3394236416,3394238463,JP
@@ -143852,15 +75787,13 @@
3394273280,3394277375,HK
3394277376,3394279423,AU
3394279424,3394281471,PH
-3394281472,3394282239,SG
-3394282240,3394282495,US
-3394282496,3394285567,SG
+3394281472,3394285567,SG
3394285568,3394289663,AU
3394289664,3394293759,CN
3394293760,3394297855,ID
3394297856,3394306047,TH
3394306048,3394307071,CN
-3394307072,3394308095,SG
+3394307072,3394308095,AU
3394308096,3394310143,JP
3394310144,3394313727,AU
3394313728,3394313983,PH
@@ -143873,9 +75806,7 @@
3394347008,3394351103,PH
3394355200,3394359295,IN
3394359296,3394363391,AU
-3394363392,3394418431,HK
-3394418432,3394418687,AP
-3394418688,3394441215,HK
+3394363392,3394441215,HK
3394441216,3394453503,IN
3394453504,3394461695,AU
3394461696,3394465791,SG
@@ -143884,16 +75815,13 @@
3394478080,3394482175,PK
3394482176,3394484223,AU
3394484224,3394486271,JP
-3394486272,3394489599,HK
-3394489600,3394489631,AP
-3394489632,3394494463,HK
+3394486272,3394494463,HK
3394494464,3394498559,JP
3394498560,3394500607,HK
3394500608,3394501631,SG
3394501632,3394502655,CN
3394502656,3394503679,HK
-3394503680,3394506751,CN
-3394506752,3394507263,HK
+3394503680,3394507263,CN
3394507264,3394507775,JP
3394508544,3394508799,PH
3394508800,3394510847,CN
@@ -143903,9 +75831,7 @@
3394521088,3394523135,KH
3394523136,3394527231,JP
3394527232,3394535423,PH
-3394535424,3394544895,HK
-3394544896,3394545151,AP
-3394545152,3394621439,HK
+3394535424,3394621439,HK
3394621440,3394625535,CN
3394625536,3394629631,HK
3394629632,3394631679,AU
@@ -143946,8 +75872,7 @@
3394764800,3394772991,HK
3394772992,3394775039,PK
3394777088,3394781183,JP
-3394781184,3394783231,US
-3394783232,3394789375,MP
+3394781184,3394789375,MP
3394789376,3394797567,HK
3394797568,3394813951,IN
3394813952,3394815999,JP
@@ -143956,20 +75881,19 @@
3394830336,3394831359,HK
3394831360,3394832383,NZ
3394832384,3394834431,CN
-3394834432,3394835967,HK
-3394835968,3394836223,AP
-3394836224,3394836479,HK
+3394834432,3394836479,HK
3394836480,3394838527,BT
-3394838528,3394841087,NZ
-3394841088,3394841599,AU
-3394841600,3394846719,NZ
+3394838528,3394844671,NZ
+3394844672,3394845695,AU
+3394845696,3394846207,NZ
+3394846208,3394846719,AU
3394846720,3394850815,IN
3394850816,3394854911,JP
3394855936,3394856959,AU
3394856960,3394859007,IN
3394859008,3394860031,JP
3394860032,3394860543,ID
-3394860544,3394861055,IN
+3394860544,3394860799,IN
3394861056,3394862079,HK
3394862080,3394863103,KR
3394863104,3394871295,NZ
@@ -143990,8 +75914,8 @@
3394906112,3394906367,IN
3394906368,3394906623,AU
3394906624,3394907135,IN
-3394907136,3394909183,NZ
-3394909184,3394910207,AU
+3394907136,3394908159,NZ
+3394908160,3394910207,AU
3394910208,3394912255,NZ
3394912256,3394920447,PF
3394920448,3394924543,IN
@@ -144006,7 +75930,6 @@
3394946560,3394947071,ID
3394947072,3394948095,BD
3394948096,3394948351,IN
-3394948352,3394948607,PH
3394948608,3394949119,AU
3394949120,3394953215,JP
3394953216,3394957311,CN
@@ -144075,7 +75998,6 @@
3395175936,3395176191,SG
3395176192,3395176703,AU
3395176704,3395176959,TH
-3395176960,3395177215,IN
3395177216,3395177471,HK
3395177472,3395177983,TH
3395177984,3395178495,AU
@@ -144085,10 +76007,8 @@
3395180032,3395180287,JP
3395180288,3395180543,HK
3395180544,3395181055,VN
-3395181056,3395181567,HK
3395181568,3395182591,CN
-3395182592,3395182847,AP
-3395182848,3395190783,SG
+3395182592,3395190783,SG
3395190784,3395198975,JP
3395198976,3395203071,MY
3395203072,3395215359,JP
@@ -144096,9 +76016,7 @@
3395219456,3395223551,TH
3395223552,3395231743,CN
3395231744,3395239935,JP
-3395239936,3395243007,SG
-3395243008,3395243263,AP
-3395243264,3395254783,SG
+3395239936,3395254783,SG
3395254784,3395255039,IN
3395255040,3395256319,SG
3395256320,3395264511,ID
@@ -144126,9 +76044,7 @@
3397027072,3397027327,PH
3397027328,3397027839,IN
3397027840,3397029887,JP
-3397029888,3397031423,MY
-3397031424,3397031679,AP
-3397031680,3397033983,MY
+3397029888,3397033983,MY
3397033984,3397038079,ID
3397038080,3397058559,JP
3397058560,3397066751,MU
@@ -144136,7 +76052,9 @@
3397070848,3397074943,PH
3397074944,3397083135,HK
3397083136,3397087231,CN
-3397091328,3397099519,GU
+3397091328,3397097471,GU
+3397097472,3397097855,MP
+3397097856,3397099519,GU
3397099520,3397103615,HK
3397103616,3397105663,LA
3397105664,3397107711,JP
@@ -144185,7 +76103,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
@@ -144202,10 +76120,44 @@
3397279744,3397283839,AU
3397283840,3397285887,KR
3397285888,3397287935,BD
-3397287936,3397296127,SG
-3397296128,3397298687,HK
-3397298688,3397299455,SG
-3397299456,3397304319,HK
+3397287936,3397296175,SG
+3397296176,3397296191,HK
+3397296192,3397296271,SG
+3397296272,3397296279,HK
+3397296280,3397296479,SG
+3397296480,3397297263,HK
+3397297264,3397297271,SG
+3397297272,3397297295,HK
+3397297296,3397297311,SG
+3397297312,3397297407,HK
+3397297408,3397297439,SG
+3397297440,3397297919,HK
+3397297920,3397297983,SG
+3397297984,3397298015,HK
+3397298016,3397298071,SG
+3397298072,3397298079,HK
+3397298080,3397298431,SG
+3397298432,3397298495,HK
+3397298496,3397298511,SG
+3397298512,3397298559,HK
+3397298560,3397298943,SG
+3397298944,3397298959,HK
+3397298960,3397299047,SG
+3397299048,3397299055,HK
+3397299056,3397299183,SG
+3397299184,3397299191,HK
+3397299192,3397299359,SG
+3397299360,3397299375,IN
+3397299376,3397299455,SG
+3397299456,3397299483,HK
+3397299484,3397299487,SG
+3397299488,3397299599,HK
+3397299600,3397299603,SG
+3397299604,3397304211,HK
+3397304212,3397304215,SG
+3397304216,3397304299,HK
+3397304300,3397304303,SG
+3397304304,3397304319,HK
3397304320,3397308415,NZ
3397308416,3397312511,HK
3397312512,3397320703,JP
@@ -144214,7 +76166,11 @@
3397323776,3397328895,CN
3397328896,3397330943,ID
3397330944,3397337087,CN
-3397337088,3397341183,HK
+3397337088,3397338375,HK
+3397338376,3397338379,JP
+3397338380,3397339647,HK
+3397339648,3397339687,SG
+3397339688,3397341183,HK
3397341184,3397345279,JP
3397345280,3397349375,ID
3397349376,3397363711,CN
@@ -144223,12 +76179,10 @@
3397369856,3397374463,CN
3397374464,3397374975,AU
3397374976,3397386239,CN
-3397386240,3397387775,GU
-3397387776,3397388031,US
-3397388032,3397394431,GU
+3397386240,3397394431,GU
3397394432,3397402623,PH
3397402624,3397410815,GU
-3397410816,3397411327,IN
+3397410816,3397411327,AU
3397411328,3397411583,SG
3397411584,3397411839,HK
3397411840,3397412351,KR
@@ -144239,7 +76193,15 @@
3397413888,3397414399,NZ
3397414400,3397414911,IN
3397414912,3397419007,AU
-3397419008,3397427199,HK
+3397419008,3397419583,HK
+3397419584,3397419599,KR
+3397419600,3397419607,HK
+3397419608,3397419615,KR
+3397419616,3397419647,HK
+3397419648,3397419671,KR
+3397419672,3397419711,HK
+3397419712,3397419719,KR
+3397419720,3397427199,HK
3397427200,3397443583,SG
3397443584,3397451775,HK
3397451776,3397468159,TH
@@ -144258,9 +76220,8 @@
3397507840,3397508095,IN
3397508096,3397509119,PH
3397509120,3397510143,ID
-3397510144,3397510399,FJ
-3397510400,3397510655,VU
-3397510656,3397511167,FJ
+3397510144,3397510911,FJ
+3397510912,3397511167,AU
3397511168,3397512191,LK
3397512192,3397512447,KH
3397512448,3397512703,AU
@@ -144282,11 +76243,7 @@
3397530624,3397531647,ID
3397531648,3397532671,SG
3397532672,3397533695,JP
-3397533696,3397551359,HK
-3397551360,3397551615,AP
-3397551616,3397557247,HK
-3397557248,3397557503,AP
-3397557504,3397566463,HK
+3397533696,3397566463,HK
3397566464,3397574655,AU
3397574656,3397582847,CN
3397582848,3397584895,MN
@@ -144331,16 +76288,11 @@
3397794816,3397812223,HK
3397812224,3397816319,CN
3397816320,3397832703,IN
-3397832704,3397836799,JP
3397836800,3397844991,AU
3397844992,3397869823,JP
3397869824,3397870079,AU
-3397870080,3397908735,JP
-3397908736,3397908991,AU
-3397908992,3397910527,JP
-3397910528,3397914111,SG
-3397914112,3397914367,AP
-3397914368,3397918719,SG
+3397870080,3397910527,JP
+3397910528,3397918719,SG
3397918720,3397922815,AU
3397922816,3397926911,CN
3397935104,3397939199,AU
@@ -144442,10 +76394,18 @@
3398637120,3398637183,HK
3398637184,3398637823,JP
3398637824,3398638079,PH
-3398638080,3398640639,JP
-3398640640,3398640895,AU
-3398640896,3398641663,JP
-3398641664,3398668287,AU
+3398638080,3398639903,JP
+3398639904,3398639907,MY
+3398639908,3398641407,JP
+3398641408,3398641663,MY
+3398641664,3398641919,JP
+3398641920,3398642175,AU
+3398642176,3398642431,JP
+3398642432,3398642943,AU
+3398642944,3398643199,JP
+3398643200,3398643455,AU
+3398643456,3398647807,JP
+3398647808,3398668287,AU
3398668288,3398672383,CN
3398672384,3398680575,PK
3398680576,3398684671,ID
@@ -144474,7 +76434,8 @@
3398830080,3398831103,KH
3398831104,3398831359,JP
3398831360,3398831615,HK
-3398831616,3398832127,JP
+3398831616,3398831871,SG
+3398831872,3398832127,JP
3398832128,3398840319,CN
3398840320,3398842367,JP
3398842368,3398843391,CN
@@ -144494,9 +76455,7 @@
3398902784,3398903807,AU
3398903808,3398905855,TH
3398905856,3398909951,TW
-3398909952,3398913535,GU
-3398913536,3398913791,US
-3398913792,3398918143,GU
+3398909952,3398918143,GU
3398918144,3398926335,JP
3398926336,3398934527,CN
3398934528,3398938623,VN
@@ -144548,7 +76507,6 @@
3399414016,3399414271,AU
3399414528,3399414783,AU
3399414784,3399415807,VN
-3399415808,3399416831,SG
3399416832,3399417087,ID
3399417088,3399417855,AU
3399417856,3399450623,ID
@@ -144569,8 +76527,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
@@ -144601,8 +76558,7 @@
3399729152,3399745535,PH
3399745536,3399749631,CN
3399749632,3399751679,AU
-3399751680,3399751935,IN
-3399751936,3399752191,CN
+3399751680,3399752191,IN
3399752192,3399752447,AU
3399752448,3399752703,HK
3399752704,3399753727,NZ
@@ -144622,16 +76578,12 @@
3399826432,3399826943,PH
3399826944,3399827455,IN
3399827456,3399835647,AU
-3399835648,3399839743,AP
+3399835648,3399839743,CN
3399839744,3399841791,JP
3399841792,3399852031,TW
3399852032,3399856127,JP
3399856128,3399860223,CN
-3399860224,3399863551,PG
-3399863552,3399863615,AU
-3399863616,3399863647,PG
-3399863648,3399863807,AU
-3399863808,3399864319,PG
+3399860224,3399864319,PG
3399864320,3399868415,CN
3399868416,3399872255,PK
3399872256,3399873023,CN
@@ -144653,17 +76605,20 @@
3399942144,3399945983,HK
3399945984,3399946239,AU
3399946240,3399950335,HK
-3399950336,3399954175,US
-3399954176,3399954431,AU
-3399954432,3399974911,US
-3399974912,3399995391,MY
+3399950336,3399954943,AU
+3399954944,3399974911,US
+3399974912,3399983744,MY
+3399983745,3399983745,SG
+3399983746,3399991295,MY
+3399991296,3399995391,IN
3399995392,3399999487,KR
-3399999488,3400001535,AU
-3400001536,3400004607,SG
-3400004608,3400005631,AU
-3400005632,3400006143,SG
-3400006144,3400006399,HK
-3400006400,3400006911,SG
+3399999488,3400000255,SG
+3400000256,3400000511,AU
+3400000512,3400004607,SG
+3400004608,3400004863,AU
+3400004864,3400005119,SG
+3400005120,3400005375,AU
+3400005376,3400006911,SG
3400006912,3400006927,AU
3400006928,3400007679,SG
3400007680,3400024063,AU
@@ -144719,9 +76674,7 @@
3400264704,3400265215,ID
3400265216,3400265471,AU
3400265472,3400265727,IN
-3400265728,3400265983,PG
-3400265984,3400266239,AU
-3400266240,3400267775,PG
+3400265728,3400267775,PG
3400267776,3400268799,KR
3400268800,3400269823,MO
3400269824,3400270847,CN
@@ -144766,15 +76719,9 @@
3400431872,3400432127,HK
3400432128,3400432639,IN
3400433664,3400435711,HK
-3400435712,3400436223,BD
-3400436224,3400438201,HK
-3400438202,3400438202,US
-3400438203,3400438527,HK
-3400438528,3400438783,AF
-3400438784,3400441599,HK
-3400441600,3400441855,AU
-3400441856,3400445951,NZ
-3400445952,3400450047,AU
+3400435712,3400435967,BD
+3400435968,3400441855,HK
+3400441856,3400450047,NZ
3400450048,3400458239,JP
3400458240,3400466431,AU
3400466432,3400499199,MO
@@ -144795,9 +76742,12 @@
3400608768,3400609791,IN
3400609792,3400630271,JP
3400630272,3400646655,IN
-3400646656,3400648815,AU
+3400646656,3400647935,SG
+3400647936,3400648191,AU
+3400648192,3400648815,SG
3400648816,3400648831,HK
-3400648832,3400654847,AU
+3400648832,3400650239,SG
+3400650240,3400654847,AU
3400654848,3400663039,IN
3400663040,3400683519,MY
3400683520,3400691711,JP
@@ -144806,9 +76756,7 @@
3400728576,3400736767,MN
3400736768,3400744959,JP
3400744960,3400753151,IN
-3400753152,3400753407,MY
-3400753408,3400753663,AP
-3400753664,3400761343,MY
+3400753152,3400761343,MY
3400773632,3400775679,KR
3400775680,3400777727,ID
3400777728,3400790015,JP
@@ -144871,17 +76819,7 @@
3401545728,3401547775,BD
3401547776,3401580543,IN
3401580544,3402629119,CN
-3402629120,3404506879,JP
-3404506880,3404507135,US
-3404507136,3404630015,JP
-3404630016,3404633087,US
-3404633088,3404693503,JP
-3404693504,3404697599,US
-3404697600,3404857954,JP
-3404857955,3404857955,ID
-3404857956,3404857966,JP
-3404857967,3404857967,IN
-3404857968,3405774847,JP
+3402629120,3405774847,JP
3405774848,3405775871,AU
3405775872,3405776895,CN
3405776896,3405777407,AU
@@ -145161,8 +77099,7 @@
3406382592,3406383359,CN
3406383360,3406383871,AU
3406383872,3406384639,CN
-3406384640,3406384895,AP
-3406384896,3406385151,SG
+3406384640,3406385151,SG
3406385152,3406389247,AU
3406389248,3406390783,CN
3406390784,3406392319,AU
@@ -145210,19 +77147,17 @@
3406527232,3406527999,AU
3406528000,3406528255,CN
3406528256,3406528511,AU
-3406528512,3406528767,AP
-3406528768,3406529535,HK
-3406529536,3406529791,IN
-3406529792,3406530047,HK
-3406530048,3406530303,SG
-3406530304,3406530559,HK
+3406528512,3406528767,HK
+3406528768,3406529023,AU
+3406529024,3406529535,HK
+3406529536,3406529791,IL
+3406529792,3406530559,HK
3406530560,3406531583,CN
3406531584,3406531839,AU
3406531840,3406532607,CN
3406532608,3406541823,AU
3406541824,3406542847,CN
-3406542848,3406543103,AP
-3406543104,3406548991,AU
+3406542848,3406548991,AU
3406548992,3406550015,CN
3406550016,3406565375,AU
3406565376,3406565631,CN
@@ -145238,7 +77173,7 @@
3406577920,3406578431,CN
3406578432,3406579199,AU
3406579200,3406579711,CN
-3406579712,3406583551,AU
+3406579712,3406583295,AU
3406583552,3406585855,CN
3406585856,3406586879,AU
3406586880,3406587391,CN
@@ -145367,7 +77302,8 @@
3406835968,3406836735,CN
3406836736,3406838271,AU
3406838272,3406838527,CN
-3406838528,3406857471,AU
+3406838528,3406839551,AU
+3406839808,3406857471,AU
3406857472,3406857727,CN
3406857728,3406864639,AU
3406864640,3406865151,CN
@@ -145407,7 +77343,7 @@
3406930944,3406931199,CN
3406931200,3406936831,AU
3406936832,3406937087,CN
-3406937088,3406937599,AU
+3406937088,3406937343,AU
3406937600,3406938111,CN
3406938112,3406938623,AU
3406938624,3406938879,IN
@@ -145417,11 +77353,10 @@
3406948096,3406948351,CN
3406948352,3406948607,AU
3406948608,3406948863,CN
-3406948864,3406950399,AU
-3406950400,3406951423,NF
+3406948864,3406950655,AU
+3406950656,3406951423,NF
3406951424,3406952447,AU
3406952448,3406952703,CN
-3406952704,3406952959,PH
3406952960,3406954239,AU
3406954240,3406954495,CN
3406954496,3406955007,AU
@@ -145533,19 +77468,20 @@
3407089920,3407090175,CN
3407090176,3407095807,AU
3407095808,3407096319,CN
-3407096320,3407097855,AU
+3407096576,3407097855,AU
3407097856,3407098111,CN
3407098112,3407101183,AU
3407101184,3407101439,CN
3407101440,3407101695,AU
3407101952,3407102207,AU
3407102208,3407102463,CN
-3407102464,3407107071,AU
+3407102464,3407104255,AU
+3407104512,3407107071,AU
3407107072,3407107583,CN
3407107584,3407108351,AU
3407108352,3407108607,CN
3407108608,3407112447,AU
-3407112448,3407112703,AP
+3407112448,3407112703,SG
3407112704,3407113215,CN
3407113216,3407115007,AU
3407115008,3407115263,CN
@@ -145559,7 +77495,11 @@
3407120128,3407122431,CN
3407122432,3407123967,AU
3407123968,3407124223,CN
-3407124224,3407144447,AU
+3407124224,3407124479,AU
+3407124480,3407126015,HK
+3407126016,3407126271,AU
+3407126272,3407126527,HK
+3407126528,3407144447,AU
3407144448,3407144703,CN
3407144704,3407144959,AU
3407144960,3407145215,CN
@@ -145620,7 +77560,8 @@
3407241984,3407242239,CN
3407242240,3407243775,AU
3407243776,3407244031,CN
-3407244032,3407247871,AU
+3407244032,3407244543,AU
+3407244800,3407247871,AU
3407247872,3407248383,CN
3407248384,3407250175,AU
3407250176,3407250431,CN
@@ -145676,8 +77617,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
@@ -145763,7 +77704,8 @@
3407450880,3407451135,CN
3407451136,3407452415,AU
3407452416,3407453183,CN
-3407453184,3407455231,AU
+3407453184,3407454463,AU
+3407454720,3407455231,AU
3407455232,3407455487,CN
3407455488,3407455743,AU
3407455744,3407455999,CN
@@ -145830,9 +77772,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
@@ -145860,7 +77800,8 @@
3407549440,3407549695,CN
3407549696,3407549951,AU
3407549952,3407550463,CN
-3407550464,3407554559,AU
+3407550464,3407553023,AU
+3407553280,3407554559,AU
3407554560,3407554815,CN
3407554816,3407555839,AU
3407555840,3407556095,CN
@@ -146013,7 +77954,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
@@ -146255,7 +78196,8 @@
3408032768,3408033023,LK
3408033024,3408033279,IN
3408033280,3408033791,ID
-3408033792,3408039935,AU
+3408033792,3408035071,AU
+3408035328,3408039935,AU
3408039936,3408040191,VN
3408040192,3408040703,AU
3408040704,3408040959,CN
@@ -146263,7 +78205,6 @@
3408041472,3408041727,CN
3408041728,3408041983,AU
3408041984,3408042495,CN
-3408042496,3408042751,HK
3408042752,3408044287,AU
3408044288,3408044799,CN
3408044800,3408050943,AU
@@ -146322,9 +78263,7 @@
3409435904,3409436159,CN
3409436160,3409436671,AU
3409436672,3409436927,CN
-3409436928,3409438563,AU
-3409438564,3409438564,AU
-3409438565,3409445119,AU
+3409436928,3409445119,AU
3409445120,3409445375,CN
3409445376,3409445887,AU
3409445888,3409446143,CN
@@ -146346,7 +78285,11 @@
3409462272,3409462783,CN
3409462784,3409465855,AU
3409465856,3409466879,CN
-3409466880,3409469183,AU
+3409466880,3409467135,AU
+3409467136,3409467391,HK
+3409467392,3409467903,AU
+3409467904,3409468415,HK
+3409468416,3409469183,AU
3409469184,3409469439,CN
3409469440,3409473023,AU
3409473024,3409473279,CN
@@ -146453,7 +78396,7 @@
3409879552,3409882111,AU
3409882112,3409883135,IN
3409883136,3409887999,AU
-3409888000,3409888255,SG
+3409888000,3409888255,HK
3409888256,3409888511,AU
3409888512,3409888767,CN
3409888768,3409896447,AU
@@ -146565,7 +78508,6 @@
3411204608,3411204863,IN
3411204864,3411205631,KR
3411205632,3411206143,HK
-3411206144,3411210239,KH
3411210240,3411212287,KR
3411212288,3411213311,IN
3411213312,3411214335,HK
@@ -146573,7 +78515,7 @@
3411215360,3411216383,AU
3411218432,3411220479,PG
3411220480,3411226623,ID
-3411226624,3411228671,US
+3411226624,3411228671,IO
3411228672,3411230719,CN
3411230720,3411247103,HK
3411247104,3411255295,KR
@@ -146585,7 +78527,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
@@ -146619,13 +78562,7 @@
3411509248,3411542015,PH
3411542016,3411550207,IN
3411550208,3411558399,CN
-3411558400,3411559935,HK
-3411559936,3411560191,US
-3411560192,3411561727,HK
-3411561728,3411561983,AU
-3411561984,3411564311,HK
-3411564312,3411564319,AU
-3411564320,3411565257,HK
+3411558400,3411565257,HK
3411565258,3411565258,US
3411565259,3411566591,HK
3411566592,3411570687,BD
@@ -146651,9 +78588,15 @@
3411644928,3411645951,ID
3411645952,3411646207,SG
3411646208,3411647487,IN
-3411647488,3411648511,AU
-3411648512,3411656703,NZ
-3411656704,3411673087,AU
+3411647488,3411648767,AU
+3411648768,3411649023,NZ
+3411649024,3411649279,AU
+3411649280,3411649535,NZ
+3411649536,3411649791,AU
+3411649792,3411650303,NZ
+3411650304,3411654399,AU
+3411654400,3411654655,NZ
+3411654656,3411673087,AU
3411673088,3411674111,CN
3411674112,3411674623,IN
3411674624,3411675135,HK
@@ -146670,11 +78613,7 @@
3411763200,3411767295,CN
3411767296,3411769343,MN
3411769344,3411771391,CN
-3411771392,3411773951,HK
-3411773952,3411774207,BD
-3411774208,3411775811,HK
-3411775812,3411775813,US
-3411775814,3411777023,HK
+3411771392,3411777023,HK
3411777024,3411777279,ID
3411777280,3411779327,HK
3411779328,3411779583,ID
@@ -146683,28 +78622,22 @@
3411795968,3411804159,AU
3411804160,3411805183,CN
3411805184,3411805695,PK
-3411805696,3411805951,JP
3411805952,3411806207,AU
3411806208,3411808255,PH
3411808256,3411810303,JP
-3411810304,3411810559,MN
-3411810560,3411810815,NZ
+3411810304,3411810815,NZ
3411810816,3411812351,AU
3411812352,3411820543,IN
3411820544,3411836927,SG
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,3411859967,AP
-3411859968,3411861503,JP
+3411859252,3411861503,JP
3411861504,3411869695,AU
3411869696,3411943423,CN
-3411943424,3411951615,AU
+3411943424,3411951615,NZ
3411951616,3411967999,LK
3411968000,3411984383,AU
3411984384,3412000767,IN
@@ -146712,7 +78645,8 @@
3412002816,3412004863,GU
3412004864,3412017151,JP
3412017152,3412025343,SG
-3412025344,3412066303,CN
+3412025344,3412049919,CN
+3412058112,3412066303,CN
3412066304,3412213759,NZ
3412213760,3412221951,AU
3412221952,3412230143,IN
@@ -146749,20 +78683,27 @@
3412328448,3412336639,AU
3412336640,3412342783,CN
3412342784,3412343039,AU
-3412343040,3412343295,IN
-3412343296,3412343807,AU
+3412343040,3412343295,HK
+3412343552,3412343807,AU
3412344064,3412344319,AU
3412344320,3412344575,SG
3412344576,3412344831,CN
3412344832,3412348927,IN
3412348928,3412361215,CN
-3412361216,3412369407,AP
+3412361216,3412369407,HK
3412369408,3412377599,KR
3412377600,3412381695,CN
3412381696,3412385791,NZ
3412385792,3412393983,AU
3412393984,3412426751,IN
-3412426752,3412434943,HK
+3412426752,3412431487,HK
+3412431488,3412431551,TH
+3412431552,3412433679,HK
+3412433680,3412433695,TH
+3412433696,3412433759,HK
+3412433760,3412433775,ID
+3412433776,3412433783,TH
+3412433784,3412434943,HK
3412434944,3412443135,PK
3412443136,3412451327,SG
3412451328,3412526079,AU
@@ -146777,8 +78718,9 @@
3412656128,3412672511,HK
3412672512,3412675071,JP
3412675072,3412675327,US
-3412675328,3412678655,JP
-3412678656,3412680703,US
+3412675328,3412680191,JP
+3412680192,3412680447,US
+3412680448,3412680703,JP
3412680704,3412697087,CN
3412697088,3412705279,IN
3412705280,3412713471,AU
@@ -146796,17 +78738,12 @@
3413008384,3413016575,JP
3413016576,3413024767,AU
3413024768,3413032959,CN
-3413032960,3413033471,AU
-3413033472,3413033727,US
-3413033728,3413036287,AU
-3413036288,3413037055,US
+3413032960,3413037055,AU
3413037056,3413041151,CN
3413041152,3413043199,JP
3413043200,3413043967,CN
3413043968,3413044223,AU
-3413044224,3413044735,HK
-3413044736,3413044991,IN
-3413044992,3413045247,HK
+3413044224,3413045247,HK
3413045248,3413047295,IN
3413047296,3413098495,AU
3413098496,3413102591,JP
@@ -146814,14 +78751,9 @@
3413106688,3413110783,PH
3413110784,3413112831,JP
3413112832,3413113855,IN
-3413113856,3413133311,JP
+3413114880,3413133311,JP
3413133312,3413135359,BD
-3413135360,3413135615,AP
-3413135616,3413135871,HK
-3413135872,3413136127,AP
-3413136128,3413136383,HK
-3413136384,3413136639,AP
-3413136640,3413139455,HK
+3413135360,3413139455,HK
3413139456,3413147647,AU
3413147648,3413155839,IN
3413155840,3413164031,SG
@@ -146830,9 +78762,7 @@
3413180416,3413213183,TH
3413213184,3413229567,VN
3413229568,3413245951,AU
-3413245952,3413246335,SG
-3413246336,3413246463,MY
-3413246464,3413262335,SG
+3413245952,3413262335,SG
3413262336,3413270527,PH
3413270528,3413278719,TH
3413278720,3413295103,NZ
@@ -146849,11 +78779,11 @@
3413327872,3413344255,IN
3413344256,3413360639,PH
3413360640,3413377023,MY
-3413377024,3413387519,SG
-3413387520,3413387775,AP
-3413387776,3413437951,SG
-3413437952,3413438207,AP
-3413438208,3413524479,SG
+3413377024,3413395199,SG
+3413395200,3413395455,AU
+3413395456,3413415935,SG
+3413415936,3413416191,AU
+3413416192,3413524479,SG
3413524480,3413540863,TH
3413540864,3413557247,NZ
3413557248,3413565439,CN
@@ -146915,7 +78845,6 @@
3413835776,3413843967,SG
3413843968,3413848063,IN
3413848064,3413850111,SG
-3413850112,3413850879,JP
3413850880,3413851135,AU
3413851136,3413852159,ID
3413852160,3413868543,AU
@@ -146932,11 +78861,9 @@
3413934080,3413946367,IN
3413946368,3413950463,AU
3413950464,3413966847,IN
-3413966848,3414040063,SG
-3414040064,3414040319,AP
-3414040320,3414067199,SG
-3414067200,3414067455,AP
-3414067456,3414163455,SG
+3413966848,3414155519,SG
+3414155520,3414155775,PH
+3414155776,3414163455,SG
3414163456,3414171647,PK
3414171648,3414179839,CN
3414179840,3414188031,ID
@@ -147001,8 +78928,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
@@ -147060,9 +78987,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
@@ -147072,14 +78997,12 @@
3415801856,3415802879,CN
3415802880,3415803391,HK
3415803392,3415805951,PH
-3415805952,3415807999,MY
3415808000,3415810047,ID
3415810048,3415814399,IN
3415814400,3415814655,ID
3415814656,3415815167,TH
3415815168,3415816191,IN
3415816192,3415817215,JP
-3415817216,3415817727,ID
3415818240,3415822335,JP
3415822336,3415826431,MY
3415826432,3415834623,ID
@@ -147087,7 +79010,6 @@
3415838720,3415842815,KR
3415842816,3415851007,TH
3415851008,3415855103,AU
-3415855104,3415855615,HK
3415855616,3415856127,IN
3415856128,3415858175,ID
3415858176,3415859199,LK
@@ -147134,7 +79056,7 @@
3416371712,3416371967,VN
3416371968,3416372223,IN
3416372224,3416372479,CN
-3416372480,3416372735,AP
+3416372480,3416372735,SG
3416372736,3416372991,AU
3416373248,3416373503,AU
3416373504,3416373759,SG
@@ -147147,8 +79069,10 @@
3416391680,3416457215,VN
3416457216,3416475391,JP
3416475392,3416475647,NZ
-3416475648,3416489471,JP
-3416489472,3416489983,AU
+3416475648,3416482047,JP
+3416482048,3416482303,SG
+3416482304,3416489727,JP
+3416489728,3416489983,AU
3416489984,3416506367,VN
3416506368,3416514559,TW
3416514560,3416522751,IN
@@ -147162,9 +79086,7 @@
3416709120,3416709375,AU
3416709376,3416709631,ID
3416709632,3416710143,AU
-3416710144,3416710655,HK
-3416710656,3416710911,JP
-3416710912,3416711167,HK
+3416710144,3416711167,HK
3416711168,3416719359,AU
3416719360,3416727551,PH
3416727552,3416735743,JP
@@ -147218,8 +79140,7 @@
3417014272,3417022463,JP
3417022464,3417030655,KR
3417030656,3417034751,AU
-3417034752,3417035007,NZ
-3417035008,3417035775,IN
+3417034752,3417035775,IN
3417035776,3417036799,JP
3417036800,3417037823,ID
3417037824,3417038079,AU
@@ -147242,13 +79163,16 @@
3417179904,3417180159,CN
3417180160,3417182207,ID
3417182208,3417184767,AU
-3417184768,3417185023,NZ
+3417184768,3417185023,MN
3417185024,3417185279,AF
-3417185280,3417185791,SG
+3417185280,3417185535,AU
+3417185536,3417185791,SG
3417185792,3417186303,NZ
3417186304,3417194495,HK
3417194496,3417198591,JP
-3417198592,3417200639,SG
+3417198592,3417200127,SG
+3417200128,3417200383,AU
+3417200384,3417200639,SG
3417200640,3417202687,JP
3417202688,3417210879,CN
3417210880,3417227263,AU
@@ -147276,10 +79200,11 @@
3417338368,3417338879,HK
3417338880,3417339903,PH
3417339904,3417340415,AU
-3417340416,3417341951,NZ
+3417340416,3417340927,NZ
3417341952,3417346047,KH
3417346048,3417348095,MY
-3417348096,3417348607,AU
+3417348096,3417348351,AU
+3417348352,3417348607,IN
3417348608,3417349119,NZ
3417349120,3417349631,IN
3417349632,3417350143,AU
@@ -147292,11 +79217,7 @@
3417357824,3417358335,PK
3417358336,3417374719,HK
3417374720,3417440255,PH
-3417440256,3417664511,JP
-3417664512,3417665279,US
-3417665280,3417706095,JP
-3417706096,3417706099,HK
-3417706100,3417833471,JP
+3417440256,3417833471,JP
3417833472,3417849855,NZ
3417849856,3417853951,AU
3417853952,3417858047,CN
@@ -147304,7 +79225,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
@@ -147342,7 +79265,6 @@
3418184960,3418185727,AU
3418185728,3418189823,JP
3418189824,3418190847,CN
-3418190848,3418191871,TH
3418191872,3418192895,ID
3418192896,3418193919,AU
3418193920,3418202111,KH
@@ -147365,8 +79287,7 @@
3418243072,3418251263,PH
3418251264,3418255359,CN
3418255360,3418257407,ID
-3418257408,3418259199,HK
-3418259200,3418259455,MY
+3418257408,3418259455,HK
3418259456,3418267647,IN
3418267648,3418271743,VN
3418271744,3418273791,SG
@@ -147387,17 +79308,16 @@
3418291200,3418291711,AU
3418291712,3418292223,BD
3418292224,3418292735,CN
-3418292736,3418292991,AU
3418292992,3418293503,HK
3418293760,3418294015,AU
3418294272,3418296319,VN
-3418296320,3418300415,CN
+3418296320,3418300415,HK
3418300416,3418300927,BD
3418300928,3418301439,IN
3418301440,3418302463,AU
3418302464,3418304511,ID
3418304512,3418306559,VN
-3418306560,3418308607,MN
+3418306560,3418307583,MN
3418308608,3418324991,CN
3418324992,3418326015,VU
3418326016,3418326271,AU
@@ -147410,24 +79330,24 @@
3418365952,3418374143,TH
3418374144,3418382335,AU
3418382336,3418390527,JP
-3418390528,3418394623,AU
-3418394624,3418397183,AP
+3418390528,3418392831,AU
+3418392832,3418393919,JP
+3418393920,3418393927,AU
+3418393928,3418397183,JP
3418397184,3418397439,MY
-3418397440,3418399231,AP
+3418397440,3418399231,JP
3418399232,3418399247,PH
-3418399248,3418400255,AP
-3418400256,3418400767,AU
-3418400768,3418402815,AP
-3418402816,3418404863,AU
-3418404864,3418405439,AP
-3418405440,3418405471,AU
-3418405472,3418406911,AP
+3418399248,3418400255,JP
+3418400256,3418400511,AU
+3418400512,3418401455,JP
+3418401456,3418401459,TW
+3418401460,3418403583,JP
+3418403584,3418403839,AU
+3418403840,3418406911,JP
3418406912,3418423295,IN
3418423296,3418444091,HK
3418444092,3418444095,CN
-3418444096,3418448639,HK
-3418448640,3418448895,SG
-3418448896,3418456063,HK
+3418444096,3418456063,HK
3418456064,3418472447,IN
3418472448,3418480639,AU
3418480640,3418488831,CN
@@ -147452,21 +79372,7 @@
3418642944,3418643199,ID
3418643200,3418643455,JP
3418643456,3418644479,AU
-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,3418648591,AU
-3418648592,3418649343,JP
-3418649344,3418649599,AP
-3418649600,3418652671,JP
+3418644480,3418652671,JP
3418652672,3418750975,IN
3418750976,3418816511,HK
3418816512,3418947583,IN
@@ -147495,8 +79401,7 @@
3419078656,3419209727,TW
3419209728,3419226111,VN
3419226112,3419234303,CN
-3419234304,3419238399,JP
-3419238400,3419242495,US
+3419234304,3419242495,JP
3419242496,3419275263,CN
3419275264,3419340799,AU
3419340800,3419344895,TW
@@ -147514,15 +79419,11 @@
3419412480,3419414527,PH
3419414528,3419422719,CN
3419422720,3419439103,AU
-3419439104,3419456767,SG
-3419456768,3419457023,US
-3419457024,3419459407,SG
+3419439104,3419459407,SG
3419459408,3419459423,GB
3419459424,3419459551,SG
3419459552,3419459583,HK
-3419459584,3419470591,SG
-3419470592,3419470847,AP
-3419470848,3419471871,SG
+3419459584,3419471871,SG
3419471872,3419504639,TH
3419504640,3419508735,HK
3419508736,3419512831,JP
@@ -147536,8 +79437,7 @@
3419529216,3419537407,CN
3419537408,3419541503,HK
3419541504,3419553791,KR
-3419553792,3419557631,AU
-3419557632,3419557887,AP
+3419553792,3419557887,AU
3419557888,3419558399,ID
3419558400,3419558655,AU
3419558656,3419559935,ID
@@ -147555,7 +79455,6 @@
3419668480,3419672575,CN
3419672576,3419674623,AU
3419674624,3419675647,IN
-3419675648,3419676671,MN
3419676672,3419684863,JP
3419684864,3419688959,IN
3419688960,3419693055,CN
@@ -147566,9 +79465,7 @@
3419734016,3419774975,AU
3419774976,3419783167,JP
3419783168,3419791359,PH
-3419791360,3419844607,AU
-3419844608,3419844863,MY
-3419844864,3419873279,AU
+3419791360,3419873279,AU
3419873280,3419877375,AF
3419877376,3419877631,ID
3419877632,3419877887,KH
@@ -147622,13 +79519,11 @@
3420061696,3420127231,HK
3420127232,3420323839,AU
3420323840,3420332031,TW
-3420332032,3420336127,AU
-3420336128,3420336383,SG
-3420336384,3420367359,AU
-3420367360,3420367615,AP
-3420367616,3420369007,AU
+3420332032,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
@@ -147646,25 +79541,19 @@
3420413952,3420422143,KR
3420422144,3420430335,MY
3420430336,3420434431,PK
-3420434432,3420435455,IN
+3420434432,3420434687,IN
+3420434688,3420434943,KR
+3420434944,3420435199,HK
+3420435200,3420435455,AU
3420435456,3420436479,JP
3420436480,3420437503,AU
3420437504,3420438527,IN
3420438528,3420454911,HK
3420454912,3420463103,LK
-3420463104,3422000533,KR
-3422000534,3422000535,AP
+3420463104,3422000535,KR
3422000536,3422000536,IN
-3422000537,3422000537,AP
-3422000538,3422552063,KR
-3422552064,3422717439,US
-3422717440,3422717695,US
-3422717696,3422847487,US
-3422847488,3422847743,GB
-3422847744,3422847999,FR
-3422848000,3422848511,US
-3422848512,3422848767,GB
-3422848768,3422850559,US
+3422000537,3422552063,KR
+3422552064,3422850559,US
3422850560,3422851071,GB
3422851072,3422955519,US
3422955520,3422956799,FR
@@ -147676,457 +79565,88 @@
3423092848,3423093759,VI
3423093760,3423094783,US
3423094784,3423095807,CA
-3423095808,3423143935,US
+3423095808,3423128575,US
+3423129600,3423143935,US
3423143936,3423145983,CA
-3423145984,3423161031,US
-3423161032,3423161039,CA
-3423161040,3423161613,US
-3423161614,3423161621,CA
-3423161622,3423162159,US
-3423162160,3423162167,MX
-3423162168,3423162367,US
+3423145984,3423149055,US
+3423150080,3423162367,US
3423162368,3423163391,CA
-3423163392,3423182847,US
-3423182848,3423183199,CA
-3423183200,3423183231,BM
-3423183232,3423183263,CA
-3423183264,3423183279,EE
-3423183280,3423183743,CA
-3423183744,3423183871,EE
-3423183872,3423183935,CA
-3423183936,3423183967,EE
-3423183968,3423184175,CA
-3423184176,3423184191,US
-3423184192,3423184207,CA
-3423184208,3423184215,EE
-3423184216,3423184895,CA
+3423163392,3423171583,US
+3423172608,3423182847,US
+3423182848,3423184895,CA
3423184896,3423204095,US
3423204096,3423204351,CA
3423204352,3423221759,US
3423221760,3423222783,CA
-3423222784,3423235543,US
-3423235544,3423235551,TR
-3423235552,3423235559,US
-3423235560,3423235563,TR
-3423235564,3423235711,US
-3423235712,3423235743,CA
-3423235744,3423235807,US
-3423235808,3423235823,IN
-3423235824,3423235975,US
-3423235976,3423235983,IL
-3423235984,3423236095,US
-3423236096,3423238143,JM
-3423238144,3423258623,US
+3423222784,3423229951,US
+3423232000,3423236095,US
+3423238144,3423248383,US
+3423250432,3423258623,US
3423258624,3423260671,CA
3423260672,3423264831,US
3423264832,3423264863,NG
-3423264864,3423265025,US
-3423265026,3423265026,A2
-3423265027,3423265247,US
-3423265248,3423265263,EC
-3423265264,3423268863,US
+3423264864,3423268863,US
3423268864,3423269887,CA
-3423269888,3423285247,US
-3423285248,3423285535,CA
-3423285536,3423285543,JP
-3423285544,3423285583,CA
-3423285584,3423285591,US
-3423285592,3423285647,CA
-3423285648,3423285655,US
-3423285656,3423285671,CA
-3423285672,3423285679,JP
-3423285680,3423285703,CA
-3423285704,3423285711,TL
-3423285712,3423285791,CA
-3423285792,3423285807,CR
-3423285808,3423285887,CA
-3423285888,3423285903,US
-3423285904,3423286175,CA
-3423286176,3423286207,US
-3423286208,3423287295,CA
+3423269888,3423272959,US
+3423273984,3423285247,US
+3423285248,3423287295,CA
3423287296,3423288319,VG
-3423288320,3423303679,US
+3423288320,3423301631,US
+3423302656,3423303679,US
3423303680,3423304703,CA
3423304704,3423311871,US
3423311872,3423313151,VI
3423313152,3423313407,US
3423313408,3423313919,VI
-3423313920,3423329567,US
-3423329568,3423329599,IL
-3423329600,3423338527,US
-3423338528,3423338535,AE
-3423338536,3423338927,US
-3423338928,3423338943,DE
-3423338944,3423339375,US
-3423339376,3423339383,DE
-3423339384,3423340399,US
-3423340400,3423340407,AU
-3423340408,3423341015,US
-3423341016,3423341023,CA
-3423341024,3423341511,US
-3423341512,3423341519,PE
-3423341520,3423341543,US
-3423341544,3423341551,GB
-3423341552,3423341567,US
-3423341568,3423341599,GB
-3423341600,3423342279,US
-3423342280,3423342287,IL
-3423342288,3423342631,US
-3423342632,3423342639,IN
-3423342640,3423342759,US
-3423342760,3423342775,GB
-3423342776,3423342967,US
-3423342968,3423342975,AU
-3423342976,3423343039,US
-3423343040,3423343055,IN
-3423343056,3423343135,US
-3423343136,3423343151,PK
-3423343152,3423343167,RO
-3423343168,3423343327,US
-3423343328,3423343343,AU
-3423343344,3423344007,US
-3423344008,3423344023,CA
-3423344024,3423344767,US
-3423344768,3423344791,PK
-3423344792,3423344807,CA
-3423344808,3423344991,US
-3423344992,3423344999,IE
-3423345000,3423345087,US
-3423345088,3423345095,CA
-3423345096,3423345111,US
-3423345112,3423345119,IE
-3423345120,3423345399,US
-3423345400,3423345407,IE
-3423345408,3423345431,US
-3423345432,3423345439,GT
-3423345440,3423345503,US
-3423345504,3423345535,AU
-3423345536,3423345551,CA
-3423345552,3423345583,US
-3423345584,3423345591,JO
-3423345592,3423345623,US
-3423345624,3423345631,GB
-3423345632,3423345695,US
-3423345696,3423345719,CA
-3423345720,3423346127,US
-3423346128,3423346143,CA
-3423346144,3423346319,US
-3423346320,3423346327,DK
-3423346328,3423346431,US
-3423346432,3423346447,GB
-3423346448,3423346487,US
-3423346488,3423346495,AE
-3423346496,3423346503,SA
-3423346504,3423346831,US
-3423346832,3423346847,IM
-3423346848,3423346943,US
-3423346944,3423346951,CA
-3423346952,3423346983,US
-3423346984,3423346991,AE
-3423346992,3423346999,AU
-3423347000,3423347207,US
-3423347208,3423347231,CA
-3423347232,3423347447,US
-3423347448,3423347455,CA
-3423347456,3423347503,US
-3423347504,3423347519,DE
-3423347520,3423347639,US
-3423347640,3423347663,GB
-3423347664,3423347783,US
-3423347784,3423347791,SA
-3423347792,3423347823,US
-3423347824,3423347831,FR
-3423347832,3423347879,US
-3423347880,3423347903,CA
-3423347904,3423347919,US
-3423347920,3423347927,AU
-3423347928,3423347951,US
-3423347952,3423347959,TH
-3423347960,3423348007,US
-3423348008,3423348023,GB
-3423348024,3423348071,US
-3423348072,3423348095,AU
-3423348096,3423349119,US
-3423349120,3423349135,IT
-3423349136,3423349247,US
-3423349248,3423349263,AU
-3423349264,3423349295,US
-3423349296,3423349303,AU
-3423349304,3423349327,US
-3423349328,3423349335,DE
-3423349336,3423349359,US
-3423349360,3423349383,DE
-3423349384,3423349679,US
-3423349680,3423349687,IL
-3423349688,3423350663,US
-3423350664,3423350671,AU
-3423350672,3423350719,US
-3423350720,3423350727,CA
-3423350728,3423350735,US
-3423350736,3423350743,SA
-3423350744,3423351551,US
-3423351552,3423351615,PR
-3423351616,3423351831,US
-3423351832,3423351839,AU
-3423351840,3423352023,US
-3423352024,3423352047,CA
-3423352048,3423352063,GB
-3423352064,3423352071,US
-3423352072,3423352079,CA
-3423352080,3423352255,US
-3423352256,3423352271,CA
-3423352272,3423352439,US
-3423352440,3423352447,IL
-3423352448,3423352495,US
-3423352496,3423352503,CA
-3423352504,3423352511,IL
-3423352512,3423352679,US
-3423352680,3423352687,NL
-3423352688,3423352695,US
-3423352696,3423352703,MX
-3423352704,3423352711,BR
-3423352712,3423353031,US
-3423353032,3423353039,AU
-3423353040,3423353143,US
-3423353144,3423353151,KH
-3423353152,3423353295,US
-3423353296,3423353303,BR
-3423353304,3423353351,US
-3423353352,3423353367,PA
-3423353368,3423353471,US
-3423353472,3423353479,KH
-3423353480,3423353503,US
-3423353504,3423353511,GB
-3423353512,3423353543,US
-3423353544,3423353551,IN
-3423353552,3423353791,US
-3423353792,3423353807,GB
-3423353808,3423353855,US
-3423353856,3423353871,CA
-3423353872,3423353919,US
-3423353920,3423353927,BB
-3423353928,3423354031,US
-3423354032,3423354039,IL
-3423354040,3423354047,PT
-3423354048,3423354063,PK
-3423354064,3423354095,US
-3423354096,3423354103,CA
-3423354104,3423354143,US
-3423354144,3423354207,CA
-3423354208,3423354335,US
-3423354336,3423354359,PE
-3423354360,3423354583,US
-3423354584,3423354591,AU
-3423354592,3423354623,GB
-3423354624,3423354655,US
-3423354656,3423354663,AE
-3423354664,3423354719,US
-3423354720,3423354727,BR
-3423354728,3423354783,US
-3423354784,3423354791,PA
-3423354792,3423356087,US
-3423356088,3423356119,BR
-3423356120,3423356287,US
-3423356288,3423356319,CA
-3423356320,3423356383,US
-3423356384,3423356399,IN
-3423356400,3423357111,US
-3423357112,3423357127,AE
-3423357128,3423361023,US
-3423361024,3423361279,AU
-3423361280,3423363463,US
-3423363464,3423363471,AU
-3423363472,3423363487,CA
-3423363488,3423363511,US
-3423363512,3423363519,MX
-3423363520,3423363567,US
-3423363568,3423363583,ZA
-3423363584,3423363615,US
-3423363616,3423363631,AU
-3423363632,3423365775,US
-3423365776,3423365783,CA
-3423365784,3423365903,US
-3423365904,3423365911,AE
-3423365912,3423366127,US
-3423366128,3423366135,SA
-3423366136,3423366223,US
-3423366224,3423366239,AU
-3423366240,3423366295,US
-3423366296,3423366303,CA
-3423366304,3423366351,US
-3423366352,3423366367,AU
-3423366368,3423366479,US
+3423313920,3423366479,US
3423366480,3423366495,IT
-3423366496,3423366703,US
-3423366704,3423366711,GB
-3423366712,3423366855,US
-3423366856,3423366871,BR
-3423366872,3423366991,US
-3423366992,3423366999,CA
-3423367000,3423367223,US
-3423367224,3423367231,AU
-3423367232,3423367279,US
-3423367280,3423367303,BR
-3423367304,3423367311,AU
-3423367312,3423367343,US
-3423367344,3423367359,NL
-3423367360,3423367367,US
-3423367368,3423367375,GB
-3423367376,3423367807,US
-3423367808,3423367823,IT
-3423367824,3423367831,US
-3423367832,3423367847,MX
-3423367848,3423367903,US
-3423367904,3423367919,IL
-3423367920,3423367983,US
-3423367984,3423368007,CA
-3423368008,3423368103,US
-3423368104,3423368111,CA
-3423368112,3423368143,US
-3423368144,3423368167,IL
-3423368168,3423368255,US
-3423368256,3423368287,CA
-3423368288,3423368319,US
-3423368320,3423368327,CA
-3423368328,3423369071,US
-3423369072,3423369159,CA
-3423369160,3423369327,US
-3423369328,3423369343,BR
-3423369344,3423369591,US
-3423369592,3423369599,BR
-3423369600,3423369719,US
-3423369720,3423369727,AU
-3423369728,3423369991,US
-3423369992,3423369999,CA
-3423370000,3423370015,US
-3423370016,3423370031,CA
-3423370032,3423370303,US
-3423370304,3423370319,IL
-3423370320,3423370551,US
-3423370552,3423370559,IE
-3423370560,3423370719,US
-3423370720,3423370727,VG
-3423370728,3423370775,US
-3423370776,3423370783,LB
-3423370784,3423370855,US
-3423370856,3423370863,BR
-3423370864,3423370871,US
-3423370872,3423370879,VG
-3423370880,3423371263,US
+3423366496,3423371263,US
3423371264,3423375359,ZA
-3423375360,3423377151,CA
-3423377152,3423377407,US
-3423377408,3423378175,CA
-3423378176,3423378303,US
-3423378304,3423378431,CA
-3423378432,3423378943,US
-3423378944,3423379455,CA
-3423379456,3423389047,US
-3423389048,3423389055,MX
-3423389056,3423393903,US
-3423393904,3423393911,RU
-3423393912,3423396487,US
-3423396488,3423396495,RU
-3423396496,3423398839,US
-3423398840,3423398847,RU
-3423398848,3423400863,US
-3423400864,3423400871,RU
-3423400872,3423401151,US
-3423401152,3423401159,RU
-3423401160,3423401191,US
-3423401192,3423401199,RU
-3423401200,3423402943,US
-3423402944,3423402951,RU
-3423402952,3423416319,US
+3423375360,3423379455,CA
+3423379456,3423416319,US
3423416320,3423417343,CA
3423417344,3423430655,US
3423430656,3423431167,TC
-3423431168,3423462655,US
-3423462656,3423462671,CA
-3423462672,3423469567,US
+3423431168,3423458303,US
+3423459328,3423468543,US
3423471616,3423473663,US
-3423473664,3423474655,CA
-3423474656,3423474671,CY
-3423474672,3423474687,CA
-3423474688,3423479807,US
-3423479808,3423480831,A2
+3423473664,3423474687,CA
+3423474688,3423480063,US
+3423480064,3423480319,AU
+3423480320,3423480831,US
3423480832,3423480987,NG
3423480988,3423480988,US
3423480989,3423481343,NG
-3423481344,3423481855,A2
-3423481856,3423493631,US
+3423481344,3423489023,US
+3423489024,3423490047,CA
+3423491072,3423493631,US
3423493632,3423493887,RU
-3423493888,3423493903,ID
-3423493904,3423493911,US
-3423493912,3423493919,TT
-3423493920,3423493967,US
-3423493968,3423493975,AT
-3423493976,3423533055,US
+3423493888,3423533055,US
3423533056,3423535103,AI
3423535104,3423543295,US
3423543296,3423545343,CA
-3423545344,3423554183,US
-3423554184,3423554191,CA
-3423554192,3423554271,US
-3423554272,3423554279,GB
-3423554280,3423554759,US
-3423554760,3423554767,CA
-3423554768,3423571967,US
+3423545344,3423571967,US
3423571968,3423574015,PR
3423574016,3423579135,US
3423579136,3423580159,CA
3423580160,3423582207,US
-3423582208,3423584271,CA
-3423584272,3423584279,US
-3423584280,3423584303,CA
-3423584304,3423584311,AU
-3423584312,3423584327,CA
-3423584328,3423584351,US
-3423584352,3423584359,AU
-3423584360,3423584367,CA
-3423584368,3423584375,US
-3423584376,3423584407,CA
-3423584408,3423584415,US
-3423584416,3423584423,CA
-3423584424,3423584431,US
-3423584432,3423584447,CA
-3423584448,3423584455,US
-3423584456,3423584527,CA
-3423584528,3423584543,US
-3423584544,3423584719,CA
-3423584720,3423584735,US
-3423584736,3423586303,CA
-3423586304,3423589151,US
-3423589152,3423589159,GB
-3423589160,3423590871,US
-3423590872,3423590879,HT
-3423590880,3423591143,US
-3423591144,3423591151,HN
-3423591152,3423592599,US
-3423592600,3423592607,ES
-3423592608,3423592687,US
-3423592688,3423592703,CA
-3423592704,3423592739,US
-3423592740,3423592755,CA
-3423592756,3423592895,US
-3423592896,3423592911,IL
-3423592912,3423602687,US
+3423582208,3423586303,CA
+3423586304,3423588351,US
+3423590400,3423602687,US
3423602688,3423603711,KN
-3423603712,3423604967,US
-3423604968,3423604975,BZ
-3423604976,3423626239,US
+3423603712,3423626239,US
3423626240,3423627263,CA
3423627264,3423629311,US
3423629312,3423630335,AG
-3423630336,3423632383,US
-3423632384,3423633407,A2
-3423633408,3423637503,US
+3423630336,3423637503,US
3423637504,3423639551,CA
3423639552,3423651839,US
3423651840,3423653887,CA
3423653888,3423705599,US
3423705600,3423705855,CA
-3423705856,3423797503,US
+3423705856,3423725423,US
+3423725424,3423725427,CA
+3423725428,3423797503,US
3423797504,3423801087,CA
3423801088,3423801343,US
3423801344,3423823359,CA
@@ -148157,60 +79677,26 @@
3424378880,3424379135,PR
3424379136,3424412415,US
3424412416,3424412671,CA
-3424412672,3424493823,US
+3424412672,3424413695,US
+3424415744,3424493823,US
3424493824,3424494079,CA
3424494080,3424507135,US
3424507136,3424507391,CA
3424507392,3425173503,US
3425173504,3425304575,CA
-3425304576,3425484543,US
-3425484544,3425484799,GU
-3425484800,3425529504,US
-3425529505,3425529510,US
-3425529511,3425564159,US
-3425564160,3425564415,US
-3425564416,3425697791,US
+3425304576,3425471487,US
+3425472512,3425697791,US
3425697792,3425699839,CA
-3425699840,3425714175,US
+3425699840,3425711615,US
+3425713152,3425714175,US
3425714176,3425722367,CA
-3425722368,3425828863,US
-3425828864,3425846783,CA
-3425846784,3425847039,EU
-3425847040,3425850519,CA
-3425850520,3425850527,US
-3425850528,3425864583,CA
-3425864584,3425864591,US
-3425864592,3425864711,CA
-3425864712,3425864719,US
-3425864720,3425865327,CA
-3425865328,3425865335,US
-3425865336,3425894399,CA
-3425894400,3425911967,US
-3425911968,3425911983,IL
-3425911984,3425911999,US
-3425912000,3425912031,CA
-3425912032,3425912575,US
-3425912576,3425912591,IL
-3425912592,3425912815,US
-3425912816,3425912831,DO
-3425912832,3425912847,US
-3425912848,3425912863,BB
-3425912864,3425914127,US
-3425914128,3425914143,IL
-3425914144,3425914159,US
-3425914160,3425914239,A2
-3425914240,3425916479,US
-3425916480,3425916543,DK
-3425916544,3426007807,US
-3426007808,3426008063,EU
-3426008064,3426013183,US
+3425722368,3425726463,US
+3425728512,3425828863,US
+3425828864,3425894399,CA
+3425894400,3426013183,US
3426013184,3426013439,IL
3426013440,3426306559,US
-3426306560,3426306567,IN
-3426306568,3426306591,US
-3426306592,3426306623,IN
-3426306624,3426306687,US
-3426306688,3426306815,IN
+3426306560,3426306815,IN
3426306816,3426369023,US
3426369024,3426369535,CA
3426369536,3426387967,US
@@ -148219,23 +79705,25 @@
3426400256,3426400511,CA
3426400512,3426415871,US
3426415872,3426416127,GB
-3426416128,3426617855,US
+3426416128,3426418687,US
+3426418688,3426435071,GB
+3426435072,3426439167,SG
+3426439168,3426441215,AU
+3426441216,3426441727,HK
+3426441728,3426445823,US
+3426445824,3426446335,DE
+3426446336,3426482687,US
+3426482688,3426484223,CA
+3426484224,3426617855,US
3426617856,3426618367,CA
-3426618368,3426618911,US
-3426618912,3426619071,NZ
-3426619072,3426619103,US
-3426619104,3426619135,NZ
-3426619136,3426619167,US
-3426619168,3426619247,NZ
-3426619248,3426619263,US
-3426619264,3426619295,NZ
-3426619296,3426619335,US
-3426619336,3426619359,NZ
-3426619360,3426679039,US
+3426618368,3426628607,US
+3426629632,3426679039,US
3426679040,3426679295,ES
-3426679296,3426729471,US
+3426679296,3426717695,US
+3426719744,3426729471,US
3426729472,3426729983,CA
-3426729984,3426744319,US
+3426729984,3426735615,US
+3426736128,3426744319,US
3426744320,3426746367,CA
3426746368,3427112447,US
3427112448,3427112703,CN
@@ -148243,9 +79731,7 @@
3427117056,3427117311,CA
3427117312,3427127295,US
3427127296,3427127551,CA
-3427127552,3427132927,US
-3427132928,3427133183,EU
-3427133184,3427426303,US
+3427127552,3427426303,US
3427426304,3427426559,HK
3427426560,3427428863,US
3427428864,3427429119,GB
@@ -148253,7 +79739,8 @@
3427487744,3427487999,GB
3427488000,3427618303,US
3427618304,3427618559,CA
-3427618560,3427647999,US
+3427618560,3427631103,US
+3427632128,3427647999,US
3427648000,3427648511,CA
3427648512,3427651071,US
3427651072,3427651327,CA
@@ -148274,8 +79761,8 @@
3427741952,3427742207,DE
3427742208,3427742463,US
3427742464,3427742719,AT
-3427742720,3427742975,CH
-3427742976,3427743487,GB
+3427742720,3427743231,CH
+3427743232,3427743487,GB
3427743488,3427743743,DE
3427743744,3427743999,CA
3427744000,3427744255,SE
@@ -148296,10 +79783,7 @@
3427749632,3427749887,NL
3427749888,3427750655,DE
3427750656,3427750911,GB
-3427750912,3427751423,US
-3427751424,3427751519,BE
-3427751520,3427752447,US
-3427752448,3427752703,EU
+3427750912,3427752703,US
3427752704,3427752959,GB
3427752960,3427753215,US
3427753216,3427753471,JP
@@ -148384,7 +79868,7 @@
3427782656,3427783423,FR
3427783424,3427783679,GB
3427783680,3427783935,US
-3427783936,3427784703,GB
+3427783936,3427784703,FR
3427784704,3427785215,US
3427785216,3427785471,JP
3427785472,3427785727,NO
@@ -148413,17 +79897,20 @@
3427860480,3428025343,CA
3428025344,3428025855,US
3428025856,3428057087,CA
-3428057088,3428286719,US
+3428057088,3428217855,US
+3428218880,3428286719,US
3428286720,3428286975,CA
3428286976,3428296959,US
3428296960,3428297215,CL
3428297216,3428299519,US
-3428299520,3428299775,ZA
+3428299520,3428299775,MU
3428299776,3428302079,US
3428302080,3428302335,CA
-3428302336,3428318975,US
+3428302336,3428306175,US
+3428306432,3428318975,US
3428318976,3428319231,CA
-3428319232,3428399359,US
+3428319232,3428388863,US
+3428391936,3428399359,US
3428399360,3428399615,CA
3428399616,3428433919,US
3428433920,3428434175,CA
@@ -148431,171 +79918,55 @@
3428434944,3428435199,CA
3428435200,3428437503,US
3428437504,3428437759,MX
-3428437760,3428496639,US
-3428496640,3428497151,NL
-3428497152,3428581375,US
-3428581376,3428581567,CA
-3428581568,3428581695,US
-3428581696,3428581759,CA
-3428581760,3428581823,US
-3428581824,3428581887,CA
-3428581888,3428581951,US
-3428581952,3428582231,CA
-3428582232,3428582239,US
-3428582240,3428582279,CA
-3428582280,3428582287,DK
-3428582288,3428582303,CA
-3428582304,3428582311,US
-3428582312,3428582319,CA
-3428582320,3428582327,US
-3428582328,3428582399,CA
-3428582400,3428582655,US
+3428437760,3428582655,US
3428582656,3428582911,CA
-3428582912,3428583167,US
-3428583168,3428583455,CA
-3428583456,3428583487,US
-3428583488,3428583551,CA
-3428583552,3428583583,US
-3428583584,3428583743,CA
-3428583744,3428583871,US
-3428583872,3428583935,CA
-3428583936,3428584127,US
-3428584128,3428584191,CA
-3428584192,3428584511,US
-3428584512,3428584703,CA
-3428584704,3428584767,US
-3428584768,3428584895,CA
-3428584896,3428584959,US
-3428584960,3428585471,CA
-3428585472,3428585599,US
-3428585600,3428585727,CA
-3428585728,3428585983,US
+3428582912,3428585215,US
+3428585216,3428585471,CA
+3428585472,3428585983,US
3428585984,3428586495,CA
-3428586496,3428586751,US
-3428586752,3428586879,CA
-3428586880,3428587007,US
+3428586496,3428587007,US
3428587008,3428587519,CA
3428587520,3428587775,US
3428587776,3428588287,CA
3428588288,3428588543,US
-3428588544,3428589055,CA
-3428589056,3428589311,US
+3428588544,3428588799,CA
+3428588800,3428589311,US
3428589312,3428589567,CA
-3428589568,3428591623,US
-3428591624,3428591663,CA
-3428591664,3428591679,US
-3428591680,3428591695,CA
-3428591696,3428591831,US
-3428591832,3428591847,CA
-3428591848,3428591871,US
-3428591872,3428592135,CA
-3428592136,3428592151,US
-3428592152,3428592191,CA
-3428592192,3428592207,US
-3428592208,3428592247,CA
-3428592248,3428592255,US
-3428592256,3428592271,CA
-3428592272,3428592343,US
-3428592344,3428592359,CA
-3428592360,3428592367,US
-3428592368,3428594303,CA
-3428594304,3428594431,US
-3428594432,3428594495,CA
-3428594496,3428594623,US
-3428594624,3428595199,CA
-3428595200,3428595215,US
-3428595216,3428595247,CA
-3428595248,3428595455,US
-3428595456,3428595743,CA
-3428595744,3428595807,US
-3428595808,3428595871,CA
-3428595872,3428595903,US
-3428595904,3428595967,CA
-3428595968,3428596095,US
-3428596096,3428596783,CA
-3428596784,3428596791,US
-3428596792,3428596799,CA
-3428596800,3428596815,US
-3428596816,3428596823,CA
-3428596824,3428596831,US
-3428596832,3428596839,CA
-3428596840,3428596847,US
-3428596848,3428596887,CA
-3428596888,3428596895,US
-3428596896,3428596991,CA
-3428596992,3428597247,US
-3428597248,3428597511,CA
-3428597512,3428597519,US
-3428597520,3428597551,CA
-3428597552,3428597559,US
-3428597560,3428597575,CA
-3428597576,3428597583,US
-3428597584,3428597623,CA
-3428597624,3428597631,US
-3428597632,3428597655,CA
-3428597656,3428597663,US
-3428597664,3428597727,CA
-3428597728,3428597759,US
-3428597760,3428598271,CA
-3428598272,3428598527,US
-3428598528,3428598687,CA
-3428598688,3428598719,US
-3428598720,3428598751,CA
-3428598752,3428598783,US
-3428598784,3428599103,CA
-3428599104,3428599231,US
-3428599232,3428599295,CA
-3428599296,3428599551,US
-3428599552,3428601599,CA
+3428589568,3428591871,US
+3428591872,3428592127,CA
+3428592128,3428592383,US
+3428592384,3428594175,CA
+3428594176,3428594687,US
+3428594688,3428595199,CA
+3428595200,3428596223,US
+3428596224,3428596735,CA
+3428596736,3428597247,US
+3428597248,3428597503,CA
+3428597504,3428598015,US
+3428598016,3428598271,CA
+3428598272,3428598591,US
+3428598592,3428598623,CA
+3428598624,3428598783,US
+3428598784,3428599039,CA
+3428599040,3428599551,US
+3428599552,3428600575,CA
+3428600576,3428600831,US
+3428600832,3428601599,CA
3428601600,3428602111,US
3428602112,3428602367,CA
-3428602368,3428602623,US
-3428602624,3428602687,CA
-3428602688,3428602719,US
-3428602720,3428602847,CA
-3428602848,3428603135,US
-3428603136,3428603199,CA
-3428603200,3428603263,US
-3428603264,3428603327,CA
-3428603328,3428603391,US
-3428603392,3428603519,CA
-3428603520,3428603903,US
+3428602368,3428603903,US
3428603904,3428605183,CA
-3428605184,3428605695,US
-3428605696,3428605823,CA
-3428605824,3428605855,US
-3428605856,3428606023,CA
-3428606024,3428606031,US
-3428606032,3428606039,CA
-3428606040,3428606111,US
-3428606112,3428606119,CA
-3428606120,3428606207,US
-3428606208,3428606271,CA
-3428606272,3428606367,US
-3428606368,3428606383,CA
-3428606384,3428606415,US
-3428606416,3428606431,CA
-3428606432,3428606463,US
-3428606464,3428606591,CA
-3428606592,3428606655,US
-3428606656,3428606719,CA
-3428606720,3428606911,US
-3428606912,3428606975,IS
-3428606976,3428607743,US
-3428607744,3428607871,CA
-3428607872,3428607999,US
+3428605184,3428607999,US
3428608000,3428609023,CA
3428609024,3428610047,US
3428610048,3428611071,CA
3428611072,3428612607,US
3428612608,3428613887,CA
3428613888,3428614143,US
-3428614144,3428620095,CA
-3428620096,3428620287,US
-3428620288,3428621887,CA
-3428621888,3428622047,US
-3428622048,3428622095,CA
-3428622096,3428622335,US
+3428614144,3428620031,CA
+3428620032,3428620287,US
+3428620288,3428621823,CA
+3428621824,3428622335,US
3428622336,3428623615,CA
3428623616,3428623871,US
3428623872,3428624639,CA
@@ -148606,83 +79977,41 @@
3428634624,3428634879,US
3428634880,3428635135,CA
3428635136,3428635391,US
-3428635392,3428635679,CA
-3428635680,3428635711,US
-3428635712,3428635775,CA
-3428635776,3428635871,US
-3428635872,3428636927,CA
-3428636928,3428636991,US
-3428636992,3428637055,CA
-3428637056,3428637119,US
-3428637120,3428637215,CA
-3428637216,3428637247,US
-3428637248,3428637375,CA
-3428637376,3428637407,US
-3428637408,3428638015,CA
-3428638016,3428638079,US
-3428638080,3428638143,CA
-3428638144,3428638207,US
-3428638208,3428638591,CA
-3428638592,3428638719,US
+3428635392,3428635647,CA
+3428635648,3428635903,US
+3428635904,3428636927,CA
+3428636928,3428637439,US
+3428637440,3428637951,CA
+3428637952,3428638719,US
3428638720,3428639487,CA
3428639488,3428640255,US
3428640256,3428640511,CA
3428640512,3428640767,US
3428640768,3428643327,CA
3428643328,3428643583,US
-3428643584,3428643855,CA
-3428643856,3428643871,US
-3428643872,3428643903,CA
-3428643904,3428643919,US
-3428643920,3428643935,CA
-3428643936,3428643951,US
-3428643952,3428644015,CA
-3428644016,3428644047,US
-3428644048,3428644063,CA
-3428644064,3428644351,US
+3428643584,3428643839,CA
+3428643840,3428644351,US
3428644352,3428645631,CA
-3428645632,3428645695,US
-3428645696,3428645759,CA
-3428645760,3428645791,US
-3428645792,3428645855,CA
-3428645856,3428645887,US
-3428645888,3428645951,CA
-3428645952,3428646015,US
-3428646016,3428646079,CA
-3428646080,3428646143,US
-3428646144,3428646911,CA
+3428645632,3428646143,US
+3428646144,3428646399,CA
+3428646400,3428646655,US
+3428646656,3428646911,CA
3428646912,3428660735,US
3428660736,3428661503,CA
-3428661504,3428671487,US
-3428679680,3428689646,US
-3428689647,3428689647,US
-3428689648,3428701439,US
-3428701440,3428701567,CA
-3428701568,3428743167,US
+3428661504,3428743167,US
3428743168,3428744191,CA
3428744192,3428752383,US
3428752384,3428753407,GH
-3428753408,3428756479,US
-3428756480,3428756487,SE
-3428756488,3428818727,US
-3428818728,3428818735,GB
-3428818736,3428894039,US
-3428894040,3428894047,CA
-3428894048,3428958207,US
+3428753408,3428958207,US
3428958208,3428962303,CO
3428962304,3429171199,US
3429171200,3429236735,CA
-3429236736,3429381887,US
-3429381888,3429382143,EU
+3429236736,3429382143,US
3429382144,3429382399,DE
-3429382400,3429396223,US
-3429396224,3429396479,DE
-3429396480,3429408511,US
-3429408512,3429408767,DE
-3429408768,3429411583,US
-3429411584,3429411839,DE
-3429411840,3429500927,US
-3429500928,3429502975,A2
+3429382400,3429401855,US
+3429401856,3429402111,CA
+3429402112,3429500927,US
+3429500928,3429502975,CA
3429502976,3429517407,US
3429517408,3429517411,HK
3429517412,3429518763,US
@@ -148693,39 +80022,35 @@
3429739176,3429739179,GB
3429739180,3429775359,US
3429775360,3429777407,TC
-3429777408,3429892095,US
+3429777408,3429809151,US
+3429810176,3429892095,US
3429892096,3429957631,CA
-3429957632,3430073343,US
-3430073344,3430073354,AP
+3429957632,3430073354,US
3430073355,3430073355,AU
-3430073356,3430073599,AP
-3430073600,3430074111,US
+3430073356,3430074111,US
3430074112,3430074367,AU
-3430074368,3430291295,US
-3430291296,3430291327,IS
-3430291328,3430313967,US
-3430313968,3430313983,CA
-3430313984,3430319135,US
-3430319136,3430319143,SE
-3430319144,3430328831,US
+3430074368,3430146047,US
+3430148096,3430328831,US
3430328832,3430329087,GH
3430329088,3430354943,US
3430354944,3430356991,PR
3430356992,3430468607,US
3430468608,3430468863,AQ
3430468864,3430701055,US
-3430701056,3430702079,CA
3430702080,3430703871,US
3430703872,3430704127,PR
3430704128,3430705151,US
3430705152,3430706175,MX
-3430706176,3430722303,US
+3430706176,3430714367,US
+3430715392,3430722303,US
3430722304,3430722559,CA
3430722560,3430729244,US
3430729245,3430729245,GB
3430729246,3430729471,US
3430729472,3430729727,GB
-3430729728,3430747903,US
+3430729728,3430732543,US
+3430732544,3430732799,GB
+3430732800,3430747903,US
3430747904,3430748159,CA
3430748160,3430749951,US
3430749952,3430750207,CA
@@ -148755,9 +80080,7 @@
3430780672,3430780927,CA
3430780928,3430782463,US
3430782464,3430782719,CA
-3430782720,3430793983,US
-3430793984,3430794239,PR
-3430794240,3430795007,US
+3430782720,3430795007,US
3430795008,3430795263,CA
3430795264,3430805759,US
3430805760,3430806015,CA
@@ -148773,15 +80096,12 @@
3430845440,3430845951,MX
3430845952,3430849535,US
3430849536,3430850047,CA
-3430850048,3431114495,US
+3430850048,3430973951,US
+3430974208,3431114495,US
3431114496,3431114751,CA
3431114752,3431468031,US
3431468032,3431469055,CA
-3431469056,3431520767,US
-3431520768,3431521023,AP
-3431521024,3431526921,US
-3431526922,3431526922,EU
-3431526923,3431596287,US
+3431469056,3431596287,US
3431596288,3431602687,CA
3431602688,3431602943,US
3431602944,3431606271,CA
@@ -148803,24 +80123,8 @@
3431642624,3431657471,CA
3431657472,3431658495,US
3431658496,3431661311,CA
-3431661312,3431731199,US
-3431731200,3431731207,ES
-3431731208,3431731211,CO
-3431731212,3431731215,US
-3431731216,3431731231,CO
-3431731232,3431731247,US
-3431731248,3431731263,CO
-3431731264,3431732055,US
-3431732056,3431732063,NL
-3431732064,3431732755,US
-3431732756,3431732759,BE
-3431732760,3431732803,US
-3431732804,3431732807,RO
-3431732808,3431732895,US
-3431732896,3431732927,RO
-3431732928,3431734095,US
-3431734096,3431734103,IL
-3431734104,3431745023,US
+3431661312,3431675903,US
+3431677952,3431745023,US
3431745024,3431745279,BE
3431745280,3431745791,US
3431745792,3431746047,GB
@@ -148839,9 +80143,7 @@
3431755008,3431755775,NL
3431755776,3431759615,CA
3431759616,3431759871,DE
-3431759872,3431783431,US
-3431783432,3431783435,NL
-3431783436,3432004607,US
+3431759872,3432004607,US
3432004608,3432005631,CA
3432005632,3432009215,US
3432009216,3432009471,PR
@@ -148870,64 +80172,43 @@
3432476672,3432493823,US
3432493824,3432495103,DE
3432495104,3432517119,US
-3432517120,3432517631,NA
-3432517632,3432520703,US
-3432520704,3432520959,GB
-3432520960,3432571647,US
+3432517120,3432517631,MU
+3432517632,3432571647,US
3432571648,3432571903,CA
-3432571904,3432572799,US
-3432572800,3432572927,DO
-3432572928,3432585215,US
+3432571904,3432579071,US
+3432580096,3432585215,US
3432585216,3432585727,MX
-3432585728,3432613631,US
+3432585728,3432609791,US
+3432610560,3432611839,US
+3432612864,3432613631,US
3432613632,3432613887,CA
3432613888,3432634111,US
3432634112,3432634367,CA
3432634368,3432660991,US
-3432660992,3432662527,DE
-3432662528,3432662531,PT
-3432662532,3432663039,DE
-3432663040,3432689151,US
+3432660992,3432663039,DE
+3432663040,3432676351,US
+3432677376,3432689151,US
3432689152,3432689663,CA
-3432689664,3432807423,US
+3432689664,3432695807,US
+3432697856,3432708095,US
+3432710144,3432807423,US
3432807424,3432808447,CA
-3432808448,3433090582,US
-3433090583,3433090583,CA
-3433090584,3433581312,US
-3433581313,3433581567,CA
-3433581568,3433824511,US
+3432808448,3433824511,US
3433824512,3433824767,DE
3433824768,3433955583,US
3433955584,3433964799,CA
3433964800,3433965055,US
3433965056,3433967359,CA
3433967360,3433967615,US
-3433967616,3433981951,CA
+3433967616,3433980927,CA
+3433981184,3433981951,CA
3433981952,3433983999,US
3433984000,3434012671,CA
3434012672,3434012927,US
3434012928,3434014719,CA
3434014720,3434015231,US
3434015232,3434020607,CA
-3434020608,3434096063,US
-3434096064,3434096079,AU
-3434096080,3434097919,US
-3434097920,3434097983,GB
-3434097984,3434108639,US
-3434108640,3434108671,IL
-3434108672,3434112239,US
-3434112240,3434112255,IN
-3434112256,3434117631,US
-3434117632,3434117695,CA
-3434117696,3434133551,US
-3434133552,3434133567,IL
-3434133568,3434133759,US
-3434133760,3434133791,IL
-3434133792,3434134015,US
-3434134016,3434134079,CA
-3434134080,3434423295,US
-3434423296,3434423303,CA
-3434423304,3434427391,US
+3434020608,3434427391,US
3434427392,3434428415,HR
3434428416,3434433279,US
3434433280,3434433535,PR
@@ -148940,36 +80221,10 @@
3434575616,3434583039,US
3434583040,3434584063,NL
3434584064,3434807551,US
-3434807552,3434810111,CA
-3434810112,3434810367,US
-3434810368,3434810670,CA
-3434810671,3434810673,US
-3434810674,3434810879,CA
-3434810880,3434810895,GB
-3434810896,3434810911,US
-3434810912,3434810943,CA
-3434810944,3434810959,US
-3434810960,3434810975,AE
-3434810976,3434811007,CA
-3434811008,3434811023,US
-3434811024,3434811039,ZA
-3434811040,3434811071,US
-3434811072,3434811135,CA
-3434811136,3434811151,US
-3434811152,3434811167,CA
-3434811168,3434811199,US
-3434811200,3434811215,AU
-3434811216,3434811311,US
-3434811312,3434811327,GB
-3434811328,3434811359,US
-3434811360,3434811375,CA
-3434811376,3434811383,US
-3434811384,3434831359,CA
+3434807552,3434831359,CA
3434831360,3434831615,US
3434831616,3434872575,CA
-3434872576,3434907647,US
-3434907648,3434909695,PA
-3434909696,3434913791,US
+3434872576,3434913791,US
3434913792,3434914047,AG
3434914048,3434914303,DM
3434914304,3434914559,VG
@@ -148985,15 +80240,11 @@
3434917376,3434917887,AG
3434917888,3435069439,US
3435069440,3435134975,CA
-3435134976,3435216637,US
-3435216638,3435216638,EU
-3435216639,3435271423,US
+3435134976,3435271423,US
3435271424,3435271679,CA
3435271680,3435507711,US
3435507712,3435511807,CA
-3435511808,3435518463,US
-3435518464,3435518527,GI
-3435518528,3436249343,US
+3435511808,3436249343,US
3436249344,3436255743,CA
3436255744,3436256255,US
3436256256,3436278271,CA
@@ -149007,7 +80258,9 @@
3436476416,3436478463,AW
3436478464,3436492799,US
3436492800,3436493055,NL
-3436493056,3436697087,US
+3436493056,3436507135,US
+3436507136,3436509183,BB
+3436509184,3436697087,US
3436697088,3436697343,VE
3436697344,3437232383,US
3437232384,3437232639,CA
@@ -149034,9 +80287,12 @@
3437301760,3437305855,US
3437305856,3437307391,CA
3437307392,3437307903,US
-3437307904,3437310975,CA
+3437307904,3437308415,CA
+3437308416,3437308927,US
+3437308928,3437310975,CA
3437310976,3437311487,US
-3437311488,3437331711,CA
+3437311488,3437326591,CA
+3437326848,3437331711,CA
3437331712,3437331967,US
3437331968,3437332479,CA
3437332480,3437332735,US
@@ -149100,9 +80356,7 @@
3437725696,3437726207,DE
3437726208,3437726463,US
3437726464,3437726975,GB
-3437726976,3437731583,US
-3437731584,3437731615,AF
-3437731616,3437734399,US
+3437726976,3437734399,US
3437734400,3437734655,SG
3437734656,3437736447,US
3437736448,3437737471,CL
@@ -149154,190 +80408,56 @@
3438261760,3438262015,US
3438262016,3438280703,CA
3438280704,3438542847,US
-3438542848,3438544943,CA
-3438544944,3438544959,TC
-3438544960,3438545735,CA
-3438545736,3438545743,US
-3438545744,3438546175,CA
-3438546176,3438546183,US
-3438546184,3438552271,CA
-3438552272,3438552287,US
-3438552288,3438559647,CA
-3438559648,3438559679,US
-3438559680,3438570031,CA
-3438570032,3438570039,MY
-3438570040,3438570495,CA
-3438570496,3438570527,US
-3438570528,3438590975,CA
-3438590976,3438591231,TC
-3438591232,3438600319,CA
-3438600320,3438600351,US
-3438600352,3438608383,CA
+3438542848,3438608383,CA
3438608384,3438614607,US
3438614608,3438614615,BR
3438614616,3438813183,US
3438813184,3438814207,GH
3438814208,3438895103,US
-3438895104,3438896895,HN
-3438896896,3439059711,US
+3438895104,3438896639,HN
+3438896640,3439059711,US
3439059712,3439059967,PR
-3439059968,3439070975,US
-3439070976,3439071135,MX
-3439071136,3439219967,US
-3439219968,3439220079,CL
-3439220080,3439220087,US
-3439220088,3439220159,CL
-3439220160,3439220175,US
-3439220176,3439220191,CL
-3439220192,3448159471,US
-3448159472,3448159487,AG
-3448159488,3448170511,US
-3448170512,3448170527,UY
-3448170528,3448170551,US
-3448170552,3448170559,CA
-3448170560,3448173919,US
-3448173920,3448173935,UY
-3448173936,3448263423,US
-3448263424,3448263431,AG
-3448263432,3448263439,KN
-3448263440,3448263447,AG
-3448263448,3448263471,KN
-3448263472,3448263487,AG
-3448263488,3448263551,AI
-3448263552,3448263655,AG
-3448263656,3448263663,MS
-3448263664,3448263743,AG
-3448263744,3448263871,VG
-3448263872,3448263935,AG
-3448263936,3448303103,US
-3448303104,3448303871,KY
-3448303872,3448338687,US
-3448338688,3448339455,GB
-3448339456,3448377343,US
+3439059968,3439071103,US
+3439071104,3439071135,MX
+3439071136,3448263423,US
+3448263424,3448263935,AG
+3448263936,3448303615,US
+3448303616,3448303871,KY
+3448303872,3448377343,US
3448377344,3448377855,AG
-3448377856,3448379415,US
-3448379416,3448379423,IL
-3448379424,3448379439,US
-3448379440,3448379447,SG
-3448379448,3448379519,US
-3448379520,3448379647,IN
+3448377856,3448379647,US
3448379648,3448379903,SG
-3448379904,3448380063,US
-3448380064,3448380079,JP
-3448380080,3448380095,US
-3448380096,3448380239,SG
-3448380240,3448380255,US
-3448380256,3448380287,SG
-3448380288,3448380415,US
-3448380416,3448380719,SG
-3448380720,3448380735,US
-3448380736,3448380775,SG
-3448380776,3448380783,AE
-3448380784,3448380799,SG
-3448380800,3448380839,US
+3448379904,3448380415,US
+3448380416,3448380671,SG
+3448380672,3448380839,US
3448380840,3448380847,SG
-3448380848,3448380927,US
-3448380928,3448380959,SG
-3448380960,3448380975,US
-3448380976,3448380991,AU
-3448380992,3448381023,US
-3448381024,3448381055,SG
-3448381056,3448381183,US
+3448380848,3448380943,US
+3448380944,3448380959,SG
+3448380960,3448381183,US
3448381184,3448381439,SG
3448381440,3448381695,GB
-3448381696,3448382343,US
-3448382344,3448382351,IE
-3448382352,3448382367,GB
-3448382368,3448382415,US
-3448382416,3448382447,GB
-3448382448,3448382567,US
-3448382568,3448382583,GB
-3448382584,3448397887,US
-3448397888,3448397967,CA
-3448397968,3448398335,US
+3448381696,3448398335,US
3448398336,3448399103,CA
3448399104,3448399359,US
3448399360,3448399871,CA
-3448399872,3448411391,US
-3448411392,3448411455,CA
-3448411456,3448414271,US
-3448414272,3448414295,JP
-3448414296,3448414303,US
-3448414304,3448414335,JP
-3448414336,3448461311,US
-3448461312,3448461391,GB
-3448461392,3448461415,US
-3448461416,3448461423,SG
-3448461424,3448461431,US
-3448461432,3448461439,GB
-3448461440,3448461543,US
-3448461544,3448461551,GB
-3448461552,3448461559,US
-3448461560,3448461567,GB
-3448461568,3448461599,SG
-3448461600,3448461631,US
-3448461632,3448461695,SG
-3448461696,3448461735,US
-3448461736,3448461743,GB
-3448461744,3448462111,US
-3448462112,3448462127,SG
-3448462128,3448462143,US
-3448462144,3448462223,SG
-3448462224,3448462239,GB
-3448462240,3448462255,US
-3448462256,3448462271,GB
-3448462272,3448500479,US
+3448399872,3448500479,US
3448500480,3448500735,SG
-3448500736,3448545599,US
-3448545600,3448545679,AU
-3448545680,3448545695,US
-3448545696,3448545727,AU
-3448545728,3448545791,US
-3448545792,3448545823,SG
-3448545824,3448545855,AU
-3448545856,3448545879,US
-3448545880,3448545919,SG
-3448545920,3448545951,US
-3448545952,3448545967,SG
-3448545968,3448545975,MY
-3448545976,3448546007,AU
-3448546008,3448546047,US
-3448546048,3448546079,MY
-3448546080,3448546119,SG
-3448546120,3448546175,US
-3448546176,3448546207,SG
-3448546208,3448546431,US
-3448546432,3448546455,AU
-3448546456,3448547583,US
-3448547584,3448547599,SG
-3448547600,3448547615,US
-3448547616,3448547639,SG
-3448547640,3448547711,US
-3448547712,3448547743,SG
-3448547744,3448556671,US
-3448556672,3448556735,GB
-3448556736,3448556799,US
-3448556800,3448556815,GB
-3448556816,3448558911,US
-3448558912,3448558919,GB
-3448558920,3448559103,US
+3448500736,3448559103,US
3448559104,3448559359,GB
-3448559360,3448563015,US
-3448563016,3448563031,GB
-3448563032,3448569055,US
-3448569056,3448569087,MX
-3448569088,3448569735,US
-3448569736,3448569743,GB
-3448569744,3448717311,US
+3448559360,3448651775,US
+3448652800,3448673279,US
+3448674304,3448711167,US
+3448713216,3448717311,US
3448717312,3448717567,AU
3448717568,3448838143,US
3448838144,3448838399,CA
-3448838400,3448983807,US
-3448983808,3448983871,GB
-3448983872,3448985599,US
-3448987648,3449001245,US
-3449001246,3449001246,MC
-3449001247,3449159679,US
+3448838400,3448868863,US
+3448870912,3448985599,US
+3448987648,3448989695,IN
+3448989696,3448990719,HK
+3448990720,3448991743,IN
+3448991744,3449096191,US
+3449098240,3449159679,US
3449159680,3449160703,CA
3449160704,3449161471,US
3449161472,3449163519,CA
@@ -149350,153 +80470,71 @@
3449168640,3449168895,US
3449168896,3449169151,CA
3449169152,3449169663,US
-3449169664,3449171199,CA
+3449169664,3449170431,CA
+3449170432,3449170687,US
+3449170688,3449171199,CA
3449171200,3449171711,US
3449171712,3449172991,CA
3449172992,3449173247,US
-3449173248,3449174783,CA
+3449173248,3449173503,CA
+3449173504,3449173759,US
+3449173760,3449174783,CA
3449174784,3449175039,US
3449175040,3449175295,CA
3449175296,3449175551,US
3449175552,3449175807,CA
3449175808,3449176063,US
-3449176064,3449177087,CA
-3449177088,3449177103,US
-3449177104,3449178367,CA
+3449176064,3449178367,CA
3449178368,3449178623,US
-3449178624,3449179967,CA
-3449179968,3449180031,US
-3449180032,3449180095,CA
-3449180096,3449180671,US
+3449178624,3449179903,CA
+3449179904,3449180671,US
3449180672,3449181951,CA
-3449181952,3449181967,US
-3449181968,3449181999,CA
-3449182000,3449182015,US
+3449181952,3449182015,US
3449182016,3449182031,CA
-3449182032,3449182047,US
-3449182048,3449182063,CA
-3449182064,3449182079,US
-3449182080,3449182095,CA
-3449182096,3449182111,US
-3449182112,3449182159,CA
-3449182160,3449182207,US
+3449182032,3449182207,US
3449182208,3449186303,CA
3449186304,3449186559,US
3449186560,3449186815,CA
3449186816,3449187071,US
-3449187072,3449187647,CA
-3449187648,3449187711,US
-3449187712,3449188159,CA
-3449188160,3449188223,US
-3449188224,3449188831,CA
-3449188832,3449188863,US
-3449188864,3449189599,CA
-3449189600,3449189631,US
-3449189632,3449189647,CA
-3449189648,3449189663,US
-3449189664,3449189679,CA
-3449189680,3449189711,US
-3449189712,3449189759,CA
-3449189760,3449189775,US
-3449189776,3449189791,CA
-3449189792,3449189839,US
-3449189840,3449190655,CA
+3449187072,3449187583,CA
+3449187584,3449187839,US
+3449187840,3449188095,CA
+3449188096,3449188351,US
+3449188352,3449188607,CA
+3449188608,3449188671,US
+3449188672,3449188703,CA
+3449188704,3449188863,US
+3449188864,3449189375,CA
+3449189376,3449189887,US
+3449189888,3449190655,CA
3449190656,3449190911,US
3449190912,3449191679,CA
-3449191680,3449191743,US
-3449191744,3449195775,CA
+3449191680,3449192447,US
+3449192448,3449195775,CA
3449195776,3449196031,US
3449196032,3449196287,CA
3449196288,3449198687,US
-3449198688,3449198783,CA
-3449198784,3449198879,US
-3449198880,3449199103,CA
-3449199104,3449199647,US
-3449199648,3449199695,CA
-3449199696,3449199711,US
-3449199712,3449199871,CA
-3449199872,3449202767,US
-3449202768,3449202847,CA
-3449202848,3449202863,US
-3449202864,3449202911,CA
-3449202912,3449202943,US
-3449202944,3449202959,CA
-3449202960,3449202967,US
-3449202968,3449203023,CA
-3449203024,3449203031,US
-3449203032,3449203039,CA
-3449203040,3449203047,US
-3449203048,3449203095,CA
-3449203096,3449203103,US
-3449203104,3449203119,CA
-3449203120,3449203127,US
-3449203128,3449203263,CA
-3449203264,3449203295,US
-3449203296,3449203479,CA
-3449203480,3449203487,US
-3449203488,3449203527,CA
-3449203528,3449203543,US
-3449203544,3449203599,CA
-3449203600,3449203607,US
-3449203608,3449203623,CA
-3449203624,3449203631,US
-3449203632,3449203655,CA
-3449203656,3449203663,US
-3449203664,3449203687,CA
-3449203688,3449203695,US
-3449203696,3449203775,CA
-3449203776,3449203839,GB
-3449203840,3449203903,US
-3449203904,3449203967,CA
-3449203968,3449204031,US
-3449204032,3449204479,CA
+3449198688,3449198719,CA
+3449198720,3449203711,US
+3449203712,3449203775,CA
+3449203776,3449204223,US
+3449204224,3449204479,CA
3449204480,3449204735,US
3449204736,3449205759,CA
-3449205760,3449206271,US
-3449206272,3449206335,CA
-3449206336,3449206367,US
-3449206368,3449206591,CA
-3449206592,3449206655,US
-3449206656,3449206879,CA
-3449206880,3449206911,US
-3449206912,3449207007,CA
-3449207008,3449208575,US
-3449208576,3449208767,CA
-3449208768,3449208831,US
-3449208832,3449208879,CA
-3449208880,3449208895,US
-3449208896,3449208975,CA
-3449208976,3449209007,US
-3449209008,3449209023,CA
-3449209024,3449209039,US
-3449209040,3449209599,CA
-3449209600,3449209855,US
-3449209856,3449209983,CA
-3449209984,3449210015,US
-3449210016,3449210111,CA
-3449210112,3449210367,US
-3449210368,3449212415,CA
-3449212416,3449212671,US
-3449212672,3449212927,CA
+3449205760,3449208927,US
+3449208928,3449208943,CA
+3449208944,3449209343,US
+3449209344,3449209599,CA
+3449209600,3449210367,US
+3449210368,3449212927,CA
3449212928,3449213183,US
3449213184,3449213695,CA
-3449213696,3449213951,US
-3449213952,3449214079,CA
-3449214080,3449214143,US
-3449214144,3449214575,CA
-3449214576,3449214583,US
-3449214584,3449214591,SE
-3449214592,3449214623,CA
-3449214624,3449214647,US
-3449214648,3449214719,CA
-3449214720,3449214735,US
-3449214736,3449214815,CA
-3449214816,3449214831,US
-3449214832,3449214847,CA
-3449214848,3449214863,US
-3449214864,3449215999,CA
-3449216000,3449220351,US
-3449220352,3449221375,CA
+3449213696,3449214975,US
+3449214976,3449215743,CA
+3449215744,3449215871,US
+3449215872,3449215999,CA
+3449216000,3449220607,US
+3449220608,3449221375,CA
3449221376,3449222655,US
3449222656,3449224959,CA
3449224960,3449225471,US
@@ -149507,16 +80545,15 @@
3449273856,3449278975,CA
3449278976,3449279487,US
3449279488,3449290495,CA
-3449290496,3449582848,US
-3449582849,3449582849,EU
-3449582850,3449593855,US
+3449290496,3449409535,US
+3449410560,3449575423,US
+3449575424,3449575679,AU
+3449575680,3449593855,US
3449593856,3449594111,AU
-3449594112,3449598207,US
-3449598208,3449598463,GB
-3449598464,3449598975,US
-3449598976,3449599231,AU
-3449599232,3449638911,US
-3449638912,3449639679,GB
+3449594112,3449638911,US
+3449638912,3449639167,GB
+3449639168,3449639423,US
+3449639424,3449639679,GB
3449639680,3449639935,US
3449639936,3449640191,GB
3449640192,3449640447,NL
@@ -149524,7 +80561,7 @@
3449640960,3449641215,NL
3449641216,3449641471,GB
3449641472,3449769727,US
-3449769728,3449769983,ZA
+3449769728,3449769983,MU
3449769984,3449823231,US
3449823232,3449824255,CO
3449824256,3449835519,US
@@ -149533,22 +80570,13 @@
3449843200,3449843711,YE
3449843712,3449874687,US
3449874688,3449874943,AG
-3449874944,3449884159,US
-3449884160,3449884415,AS
-3449884416,3449910719,US
-3449910720,3449910783,CA
-3449910784,3449923583,US
+3449874944,3449923583,US
3449923584,3449923839,ES
3449923840,3449974783,US
3449974784,3449976831,CA
-3449976832,3449980159,US
-3449980160,3449980415,CW
-3449980416,3449994239,US
+3449976832,3449994239,US
3449994240,3449994495,MX
-3449994496,3450078463,US
-3450078464,3450079487,US
-3450079488,3450213887,US
-3450213888,3450214143,CA
+3449994496,3450213887,US
3450214144,3450217215,US
3450217216,3450217471,LC
3450217472,3450254079,US
@@ -149558,25 +80586,14 @@
3450272768,3450275327,US
3450275328,3450275583,GB
3450275584,3450275839,FR
-3450275840,3450345231,US
-3450345232,3450345247,FR
-3450345248,3450345263,RO
-3450345264,3450345279,US
-3450345280,3450345311,NE
-3450345312,3450345327,GE
-3450345328,3450345359,US
-3450345360,3450345367,GE
-3450345368,3450345375,RO
-3450345376,3450345391,US
-3450345392,3450345399,NO
-3450345400,3450345407,GE
-3450345408,3450345439,US
-3450345440,3450345471,GE
-3450345472,3450612479,US
+3450275840,3450345359,US
+3450345360,3450345367,DE
+3450345368,3450612479,US
3450612480,3450612735,CA
3450612736,3450685183,US
3450685184,3450685439,CA
-3450685440,3450699007,US
+3450685440,3450686975,US
+3450687488,3450699007,US
3450699008,3450699263,CA
3450699776,3450731519,US
3450731520,3450732543,CA
@@ -149584,62 +80601,30 @@
3450773504,3450774783,CA
3450774784,3450775039,US
3450775040,3450777599,CA
-3450777600,3450849791,US
-3450849792,3450850047,EU
-3450850048,3450851839,US
+3450777600,3450851839,US
3450855424,3450935295,US
3450935296,3450935551,MY
-3450935552,3450935807,AP
+3450935552,3450935807,US
3450935808,3450936319,MY
-3450936320,3450936351,HK
-3450936352,3450936383,US
-3450936384,3450936447,DM
-3450936448,3450940415,US
+3450936320,3450940415,US
3450940416,3450941439,SG
3450941440,3450942463,US
3450942464,3450944511,SG
-3450944512,3450947583,US
-3450947584,3450947839,A2
-3450947840,3450949375,US
-3450949376,3450949631,A2
-3450949632,3450950655,US
+3450944512,3450950655,US
3450950656,3450951679,JP
3450951680,3450953727,US
3450953728,3450957823,DE
-3450957824,3450959871,US
-3450959872,3450959879,DM
-3450959880,3450959887,US
-3450959888,3450959999,DM
-3450960000,3450960031,US
-3450960032,3450960095,DM
-3450960096,3450960111,US
-3450960112,3450960127,DM
-3450960128,3450960415,US
-3450960416,3450960431,DM
-3450960432,3450960535,US
-3450960536,3450960543,DM
-3450960544,3450960591,US
-3450960592,3450960623,DM
-3450960624,3450960815,US
-3450960816,3450960839,DM
-3450960840,3450960927,US
-3450960928,3450960943,DM
-3450960944,3450960959,US
-3450960960,3450960975,DM
-3450960976,3450961007,US
-3450961008,3450961015,DM
-3450961016,3450974255,US
-3450974256,3450974271,GB
-3450974272,3450974975,US
-3450974976,3450975231,ZM
+3450957824,3450974207,US
+3450974208,3450974463,GB
+3450974464,3450975231,US
3450975232,3450975743,LB
-3450975744,3450976511,US
-3450976512,3450976767,IL
-3450976768,3450982399,US
+3450975744,3450982399,US
3450982400,3450984447,TW
3450984448,3450986495,PH
3450986496,3450986751,HK
-3450986752,3451170303,US
+3450986752,3450987007,US
+3450987008,3450987263,CN
+3450987264,3451170303,US
3451170304,3451170559,VE
3451170560,3451187967,US
3451187968,3451188223,AU
@@ -149651,13 +80636,12 @@
3451371520,3451371775,GB
3451371776,3451507199,US
3451507200,3451507711,BR
-3451507712,3451507839,US
-3451507840,3451507903,BR
-3451507904,3451715839,US
+3451507712,3451715839,US
3451715840,3451724543,CA
3451724544,3451724799,US
3451725312,3451725567,US
-3451725568,3451737343,CA
+3451725568,3451726847,CA
+3451727360,3451737343,CA
3451737344,3451737599,US
3451737600,3451740927,CA
3451740928,3451741183,US
@@ -149692,9 +80676,7 @@
3451821568,3451821823,PR
3451821824,3451824127,US
3451824128,3451824383,CA
-3451824384,3451827455,US
-3451827456,3451827711,PR
-3451827712,3451828991,US
+3451824384,3451828991,US
3451828992,3451829247,CA
3451829248,3451835903,US
3451835904,3451836159,CA
@@ -149716,53 +80698,135 @@
3451896320,3451896575,DE
3451896576,3451912191,US
3451912192,3452174335,CA
-3452174336,3452436479,US
+3452174336,3452180479,US
+3452181504,3452436479,US
3452436480,3452502015,CA
-3452502016,3452678143,US
-3452678144,3452678399,EU
+3452502016,3452678399,US
3452678400,3452682239,BE
3452682240,3452715007,US
3452715008,3452723199,CA
-3452723200,3452764159,US
-3452764160,3452764439,CA
-3452764440,3452764447,US
-3452764448,3452764487,CA
-3452764488,3452764495,US
-3452764496,3452764615,CA
-3452764616,3452764623,US
-3452764624,3452764639,CA
-3452764640,3452764647,US
-3452764648,3452764655,CA
-3452764656,3452764663,US
-3452764664,3452768399,CA
-3452768400,3452768431,US
-3452768432,3452768751,CA
-3452768752,3452768767,US
-3452768768,3452771647,CA
-3452771648,3452771711,US
-3452771712,3452776895,CA
-3452776896,3452776959,US
-3452776960,3452785399,CA
-3452785400,3452785407,US
-3452785408,3452787519,CA
-3452787520,3452787583,US
-3452787584,3452791039,CA
-3452791040,3452791055,US
-3452791056,3452793215,CA
-3452793216,3452793343,US
-3452793344,3452798951,CA
-3452798952,3452798959,US
-3452798960,3452810239,CA
-3452810240,3452810751,US
-3452810752,3452818527,CA
-3452818528,3452818535,US
-3452818536,3452818599,CA
-3452818600,3452818615,US
-3452818616,3452818639,CA
-3452818640,3452818647,US
-3452818648,3452824575,CA
-3452824576,3452824607,US
-3452824608,3452895231,CA
+3452723200,3452764671,US
+3452764672,3452765183,CA
+3452765184,3452765439,US
+3452765440,3452766463,CA
+3452766464,3452766975,US
+3452766976,3452767487,CA
+3452767488,3452767743,US
+3452767744,3452767999,CA
+3452768000,3452768607,US
+3452768608,3452768639,CA
+3452768640,3452769023,US
+3452769024,3452769535,CA
+3452769536,3452769791,US
+3452769792,3452770047,CA
+3452770048,3452770303,US
+3452770304,3452770559,CA
+3452770560,3452770815,US
+3452770816,3452771071,CA
+3452771072,3452771327,US
+3452771328,3452771583,CA
+3452771584,3452771839,US
+3452771840,3452773119,CA
+3452773120,3452773375,US
+3452773376,3452773887,CA
+3452773888,3452774143,US
+3452774144,3452774911,CA
+3452774912,3452775167,US
+3452775168,3452775935,CA
+3452775936,3452776191,US
+3452776192,3452776703,CA
+3452776704,3452776959,US
+3452776960,3452777471,CA
+3452777472,3452777727,US
+3452777728,3452779007,CA
+3452779008,3452779263,US
+3452779264,3452779519,CA
+3452779520,3452780031,US
+3452780032,3452780543,CA
+3452780544,3452781055,US
+3452781056,3452781567,CA
+3452781568,3452781823,US
+3452781824,3452782079,CA
+3452782080,3452782335,US
+3452782336,3452783359,CA
+3452783360,3452783871,US
+3452783872,3452784639,CA
+3452784640,3452784895,US
+3452784896,3452785151,CA
+3452785152,3452785407,US
+3452785408,3452785919,CA
+3452785920,3452786175,US
+3452786176,3452787455,CA
+3452787456,3452787711,US
+3452787712,3452789503,CA
+3452789504,3452789759,US
+3452789760,3452790271,CA
+3452790272,3452791551,US
+3452791552,3452793087,CA
+3452793088,3452793343,US
+3452793344,3452793599,CA
+3452793600,3452793855,US
+3452793856,3452795135,CA
+3452795136,3452795391,US
+3452795392,3452796159,CA
+3452796160,3452796415,US
+3452796416,3452797183,CA
+3452797184,3452797439,US
+3452797440,3452798719,CA
+3452798720,3452798975,US
+3452798976,3452799487,CA
+3452799488,3452799743,US
+3452799744,3452801535,CA
+3452801536,3452801791,US
+3452801792,3452802559,CA
+3452802560,3452802815,US
+3452802816,3452803327,CA
+3452803328,3452803583,US
+3452803584,3452806143,CA
+3452806144,3452806911,US
+3452806912,3452807167,CA
+3452807168,3452807423,US
+3452807424,3452807679,CA
+3452807680,3452807935,US
+3452807936,3452808191,CA
+3452808192,3452808447,US
+3452808448,3452809727,CA
+3452809728,3452809983,US
+3452809984,3452810239,CA
+3452810240,3452811007,US
+3452811008,3452811519,CA
+3452811520,3452811775,US
+3452811776,3452812287,CA
+3452812288,3452812543,US
+3452812544,3452813311,CA
+3452813312,3452813567,US
+3452813568,3452816127,CA
+3452816128,3452816511,US
+3452816512,3452816527,CA
+3452816528,3452816895,US
+3452816896,3452817663,CA
+3452817664,3452817919,US
+3452817920,3452818431,CA
+3452818432,3452818687,US
+3452818688,3452818943,CA
+3452818944,3452819199,US
+3452819200,3452819711,CA
+3452819712,3452820479,US
+3452820480,3452820735,CA
+3452820736,3452820991,US
+3452820992,3452821503,CA
+3452821504,3452822271,US
+3452822272,3452822527,CA
+3452822528,3452822783,US
+3452822784,3452824063,CA
+3452824064,3452824319,US
+3452824320,3452824575,CA
+3452824576,3452824831,US
+3452824832,3452825599,CA
+3452825600,3452825855,US
+3452825856,3452828927,CA
+3452828928,3452829439,US
+3452829440,3452895231,CA
3452895232,3452895487,US
3452895488,3452902399,CA
3452902400,3452902655,US
@@ -149774,9 +80838,14 @@
3452920832,3452923391,US
3452923392,3452931327,CA
3452931328,3452931583,US
-3452931584,3452934911,CA
+3452931584,3452933119,CA
+3452933632,3452934911,CA
3452934912,3452936191,US
-3452936192,3452942847,CA
+3452936192,3452938839,CA
+3452938840,3452938847,US
+3452938848,3452939066,CA
+3452939067,3452939067,US
+3452939068,3452942847,CA
3452942848,3452943103,US
3452943104,3452953087,CA
3452953088,3452953343,US
@@ -149787,16 +80856,9 @@
3453028352,3453028607,CA
3453028608,3453028863,US
3453028864,3453029375,CA
-3453029376,3453039167,US
-3453039168,3453039183,AU
-3453039184,3453039199,US
-3453039200,3453039215,CA
-3453039216,3453039623,US
-3453039624,3453039631,AU
-3453039632,3453039919,US
-3453039920,3453039935,AU
-3453039936,3453092095,US
-3453092096,3453101055,CA
+3453029376,3453092095,US
+3453092096,3453096959,CA
+3453097984,3453101055,CA
3453101056,3453101311,US
3453101312,3453123839,CA
3453123840,3453124095,US
@@ -149804,7 +80866,8 @@
3453128960,3453129215,US
3453129216,3453129983,CA
3453129984,3453130239,US
-3453130240,3453139455,CA
+3453130240,3453133823,CA
+3453134848,3453139455,CA
3453139456,3453140991,US
3453140992,3453149183,CA
3453149184,3453149439,US
@@ -149818,11 +80881,14 @@
3453159424,3453159935,BM
3453159936,3453163519,CA
3453163520,3453164031,US
-3453164032,3453180671,CA
+3453164032,3453178623,CA
+3453178624,3453178879,US
+3453178880,3453180671,CA
3453180672,3453180927,US
3453180928,3453195263,CA
3453195264,3453195519,US
-3453195520,3453206527,CA
+3453195520,3453199871,CA
+3453200384,3453206527,CA
3453206528,3453207551,HN
3453207552,3453207807,NI
3453207808,3453208575,HN
@@ -149842,71 +80908,7 @@
3453219584,3453219839,SV
3453219840,3453220607,US
3453220608,3453222911,HN
-3453222912,3453241343,US
-3453241344,3453243391,US
-3453243392,3453370583,US
-3453370584,3453370607,CA
-3453370608,3453370703,US
-3453370704,3453370719,CA
-3453370720,3453371191,US
-3453371192,3453371199,CA
-3453371200,3453371215,US
-3453371216,3453371223,MY
-3453371224,3453371639,US
-3453371640,3453371663,CA
-3453371664,3453371671,US
-3453371672,3453371679,CA
-3453371680,3453371767,US
-3453371768,3453371783,SA
-3453371784,3453371807,US
-3453371808,3453371815,SA
-3453371816,3453371831,US
-3453371832,3453371839,JP
-3453371840,3453371967,US
-3453371968,3453371975,AT
-3453371976,3453371983,CA
-3453371984,3453372047,US
-3453372048,3453372063,SA
-3453372064,3453372183,US
-3453372184,3453372191,JP
-3453372192,3453372199,CH
-3453372200,3453372415,US
-3453372416,3453372439,UA
-3453372440,3453372535,US
-3453372536,3453372543,HK
-3453372544,3453372551,LB
-3453372552,3453372711,US
-3453372712,3453372727,SA
-3453372728,3453372735,OM
-3453372736,3453372767,US
-3453372768,3453372775,AE
-3453372776,3453372783,US
-3453372784,3453372791,LB
-3453372792,3453372951,US
-3453372952,3453372967,IN
-3453372968,3453372975,US
-3453372976,3453372991,IN
-3453372992,3453373007,US
-3453373008,3453373023,IN
-3453373024,3453373095,US
-3453373096,3453373127,SA
-3453373128,3453374583,US
-3453374584,3453374591,CY
-3453374592,3453374871,US
-3453374872,3453374879,UA
-3453374880,3453375999,US
-3453376000,3453376255,CA
-3453376256,3453377159,US
-3453377160,3453377167,GB
-3453377168,3453377319,US
-3453377320,3453377327,GB
-3453377328,3453378143,US
-3453378144,3453378151,SA
-3453378152,3453378271,US
-3453378272,3453378279,DK
-3453378280,3453378503,US
-3453378504,3453378511,BE
-3453378512,3453403135,US
+3453222912,3453403135,US
3453403136,3453405951,BB
3453405952,3453406207,KN
3453406208,3453406463,TC
@@ -149917,92 +80919,17 @@
3453408256,3453409023,BB
3453409024,3453409535,KN
3453409536,3453411327,BB
-3453411328,3453488527,US
-3453488528,3453488543,MX
-3453488544,3453490303,US
-3453490304,3453490311,MX
-3453490312,3453493119,US
-3453493120,3453493247,MX
-3453493248,3453503519,US
-3453503520,3453503551,GB
-3453503552,3453504031,US
-3453504032,3453504095,JP
-3453504096,3453504111,US
-3453504112,3453504127,JP
-3453504128,3453506199,US
-3453506200,3453506271,GB
-3453506272,3453551839,US
-3453551840,3453551879,GB
-3453551880,3453551895,US
-3453551896,3453551903,GB
-3453551904,3453551935,US
-3453551936,3453551967,GB
-3453551968,3453552039,US
-3453552040,3453552047,GB
-3453552048,3453552399,US
-3453552400,3453552407,GB
-3453552408,3453552455,US
-3453552456,3453552463,IE
-3453552464,3453552471,GB
-3453552472,3453552511,US
-3453552512,3453552639,IE
+3453411328,3453552127,US
+3453552128,3453552383,GB
+3453552384,3453552639,US
3453552640,3453552895,GB
3453552896,3453553151,US
3453553152,3453553407,GB
-3453553408,3453553631,US
-3453553632,3453553639,GB
-3453553640,3453553919,US
-3453553920,3453553983,GB
-3453553984,3453554063,US
-3453554064,3453554095,GB
-3453554096,3453554207,US
-3453554208,3453554215,GB
-3453554216,3453554239,US
-3453554240,3453554255,GB
-3453554256,3453554431,US
+3453553408,3453554431,US
3453554432,3453554687,GB
-3453554688,3453554863,US
-3453554864,3453554879,NL
-3453554880,3453555711,US
-3453555712,3453555767,GB
-3453555768,3453556903,US
-3453556904,3453556911,GB
-3453556912,3453556927,US
-3453556928,3453556991,GB
-3453556992,3453557255,US
-3453557256,3453557263,GB
-3453557264,3453577855,US
-3453577856,3453577983,IL
-3453577984,3453583615,US
-3453583616,3453583647,SG
-3453583648,3453583655,CA
-3453583656,3453583695,SG
-3453583696,3453583743,US
-3453583744,3453583775,SG
-3453583776,3453583791,US
-3453583792,3453583799,CA
-3453583800,3453583807,US
-3453583808,3453583839,CA
-3453583840,3453584327,US
-3453584328,3453584335,HK
-3453584336,3453595527,US
-3453595528,3453595551,CA
-3453595552,3453595583,US
-3453595584,3453595623,CA
-3453595624,3453595775,US
-3453595776,3453595807,CA
-3453595808,3453595871,US
-3453595872,3453595887,CA
-3453595888,3453599999,US
+3453554688,3453599999,US
3453600000,3453600767,GB
-3453600768,3453601863,US
-3453601864,3453601871,GB
-3453601872,3453601879,CH
-3453601880,3453602175,US
-3453602176,3453602183,GB
-3453602184,3453602207,US
-3453602208,3453602223,GB
-3453602224,3453607935,US
+3453600768,3453607935,US
3453607936,3453608959,KN
3453608960,3453609983,LC
3453609984,3453610495,AG
@@ -150016,21 +80943,13 @@
3453615104,3453615359,AG
3453615360,3453615615,KN
3453615616,3453616127,AG
-3453616128,3453620239,US
-3453620240,3453620255,CA
-3453620256,3453620271,US
-3453620272,3453620287,AR
-3453620288,3453681943,US
-3453681944,3453681951,IN
-3453681952,3453740031,US
-3453740032,3453740159,MX
-3453740160,3454003013,US
+3453616128,3454003013,US
3454003014,3454003014,ES
3454003015,3454004997,US
3454004998,3454004998,GB
-3454004999,3454292479,US
-3454292480,3454292735,GB
-3454292736,3454436351,US
+3454004999,3454287871,US
+3454287872,3454296063,GB
+3454296064,3454436351,US
3454436352,3454436607,GU
3454436608,3454497791,US
3454497792,3454498815,MX
@@ -150066,58 +80985,9 @@
3454662656,3454664447,CA
3454664448,3454672895,US
3454672896,3454681087,CA
-3454681088,3454698823,US
-3454698824,3454698839,CA
-3454698840,3454698887,US
-3454698888,3454698895,HK
-3454698896,3454703135,US
-3454703136,3454703143,IN
-3454703144,3454703255,US
-3454703256,3454703263,CA
-3454703264,3454703647,US
-3454703648,3454703663,CA
-3454703664,3454703951,US
-3454703952,3454703959,AF
-3454703960,3454704063,US
-3454704064,3454704079,CA
-3454704080,3454704087,AE
-3454704088,3454704103,US
-3454704104,3454704111,GB
-3454704112,3454705151,US
-3454705152,3454705215,GB
-3454705216,3454705431,US
-3454705432,3454705439,SE
-3454705440,3454705447,GB
-3454705448,3454705511,US
-3454705512,3454705519,CA
-3454705520,3454705535,US
-3454705536,3454705543,SE
-3454705544,3454708353,US
+3454681088,3454708353,US
3454708354,3454708355,GB
-3454708356,3454708927,US
-3454708928,3454708991,IN
-3454708992,3454710551,US
-3454710552,3454710559,SO
-3454710560,3454710671,US
-3454710672,3454710679,IN
-3454710680,3454711487,US
-3454711488,3454711519,HK
-3454711520,3454717551,US
-3454717552,3454717559,CA
-3454717560,3454718623,US
-3454718624,3454718655,HK
-3454718656,3454718767,US
-3454718768,3454718775,EG
-3454718776,3454718783,BE
-3454718784,3454718959,US
-3454718960,3454718967,TR
-3454718968,3454721183,US
-3454721184,3454721191,EG
-3454721192,3454725759,US
-3454725760,3454725767,DE
-3454725768,3454727799,US
-3454727800,3454727807,CA
-3454727808,3454730239,US
+3454708356,3454730239,US
3454730240,3454732287,EC
3454732288,3454796031,US
3454796032,3454808831,CA
@@ -150154,9 +81024,7 @@
3455126528,3455126783,MX
3455126784,3455132159,US
3455132160,3455133695,BO
-3455133696,3455242407,US
-3455242408,3455242415,CA
-3455242416,3455320063,US
+3455133696,3455320063,US
3455320064,3455322111,FR
3455322112,3455328255,US
3455328256,3455329279,DO
@@ -150216,13 +81084,9 @@
3455616512,3455616767,CA
3455616768,3455617279,US
3455617280,3455619071,GB
-3455619072,3455619263,US
-3455619264,3455619327,AR
-3455619328,3455619839,US
+3455619072,3455619839,US
3455619840,3455620095,GB
-3455620096,3455620287,US
-3455620288,3455620351,VE
-3455620352,3455621631,US
+3455620096,3455621631,US
3455621632,3455622143,GB
3455622144,3455624191,US
3455624192,3455624447,FR
@@ -150269,74 +81133,20 @@
3455647488,3455647743,IT
3455647744,3455713279,US
3455713280,3455778815,CA
-3455778816,3455797375,US
-3455797376,3455797407,FR
-3455797408,3455850255,US
-3455850256,3455850271,DM
-3455850272,3455850287,US
-3455850288,3455850303,DM
-3455850304,3455850399,US
-3455850400,3455850415,DM
-3455850416,3455850447,US
-3455850448,3455850751,DM
-3455850752,3455856639,US
-3455856640,3455856655,DM
-3455856656,3455856751,US
-3455856752,3455856767,DM
-3455856768,3455856967,US
-3455856968,3455856975,DM
-3455856976,3455857039,US
-3455857040,3455857087,DM
-3455857088,3455864831,US
+3455778816,3455864831,US
3455864832,3455866879,TW
3455866880,3455871999,US
3455872000,3455872255,ZM
3455872256,3455873023,GB
-3455873024,3455885695,US
-3455885696,3455885727,DM
-3455885728,3455885791,US
-3455885792,3455885807,DM
-3455885808,3455886847,US
-3455886848,3455887111,DM
-3455887112,3455887119,US
-3455887120,3455887231,DM
-3455887232,3455887359,US
+3455873024,3455887359,US
3455887360,3455889407,MY
-3455889408,3455899967,US
-3455899968,3455899999,HK
-3455900000,3455907895,US
-3455907896,3455907903,DM
-3455907904,3455907935,US
-3455907936,3455907967,DM
-3455907968,3455907983,US
-3455907984,3455907999,DM
-3455908000,3455908015,US
-3455908016,3455908031,DM
-3455908032,3455908063,US
-3455908064,3455908079,DM
-3455908080,3455908239,US
-3455908240,3455908271,DM
-3455908272,3455908335,US
-3455908336,3455908351,DM
-3455908352,3455908527,US
-3455908528,3455908591,DM
-3455908592,3455908607,US
-3455908608,3455908703,DM
-3455908704,3455908767,US
-3455908768,3455908783,DM
-3455908784,3455908831,US
-3455908832,3455908863,DM
-3455908864,3456303103,US
+3455889408,3456303103,US
3456303104,3456311295,JP
-3456311296,3456892927,US
+3456311296,3456360447,US
+3456360448,3456364543,BG
+3456364544,3456892927,US
3456892928,3456958463,CA
-3456958464,3457246367,US
-3457246368,3457246383,SE
-3457246384,3457312191,US
-3457312192,3457312255,IE
-3457312256,3457327663,US
-3457327664,3457327679,NZ
-3457327680,3457551871,US
+3456958464,3457551871,US
3457551872,3457552127,CA
3457552128,3457553151,US
3457553152,3457553663,CA
@@ -150366,68 +81176,22 @@
3457600512,3457600767,CA
3457600768,3457683967,US
3457683968,3457684991,CA
-3457684992,3457723535,US
-3457723536,3457723551,GB
-3457723552,3457808447,US
-3457808448,3457808463,IE
-3457808464,3457859839,US
+3457684992,3457859839,US
3457859840,3457860095,CA
-3457860096,3457862847,US
-3457862848,3457862911,CA
-3457862912,3457892351,US
-3457892352,3457892623,IN
-3457892624,3458084927,US
-3458084928,3458084935,CA
-3458084936,3458141631,US
-3458141632,3458141655,GB
-3458141656,3458142543,US
-3458142544,3458142559,IE
-3458142560,3458143863,US
-3458143864,3458143871,AE
-3458143872,3458143919,US
-3458143920,3458143935,AE
-3458143936,3458143999,US
-3458144000,3458144015,DE
-3458144016,3458144031,US
-3458144032,3458144047,DE
-3458144048,3458144111,US
-3458144112,3458144119,CA
-3458144120,3458144415,US
-3458144416,3458144423,DE
-3458144424,3458145727,US
-3458145728,3458145735,DE
-3458145736,3458145743,US
-3458145744,3458145759,DE
-3458145760,3458195455,US
+3457860096,3457892351,US
+3457892352,3457892607,IN
+3457892608,3458039807,US
+3458039808,3458043903,CA
+3458043904,3458195455,US
3458195456,3458196479,SG
-3458196480,3458765631,US
-3458765632,3458765695,CA
-3458765696,3458811903,US
+3458196480,3458233343,US
+3458233344,3458234367,CA
+3458234368,3458813951,US
3458813952,3458818047,CA
3458818048,3458820095,US
-3458822144,3458823559,US
-3458823560,3458823575,LB
-3458823576,3458823583,US
-3458823584,3458823591,MY
-3458823592,3458823701,US
-3458823702,3458823717,GB
-3458823718,3458823725,US
-3458823726,3458823733,GR
-3458823734,3458823765,US
-3458823766,3458823781,RU
-3458823782,3458823846,US
-3458823847,3458823862,GB
-3458823863,3458823903,US
-3458823904,3458823919,JP
-3458823920,3458823935,US
-3458823936,3458823967,CA
-3458823968,3458823983,JP
-3458823984,3458824087,US
-3458824088,3458824111,GB
-3458824112,3458824159,US
-3458824160,3458824183,ID
-3458824184,3458824191,GB
-3458824192,3459055615,US
+3458820096,3458820351,CA
+3458820352,3458820607,US
+3458822144,3459055615,US
3459055616,3459121151,CA
3459121152,3459186687,US
3459186688,3459252223,CA
@@ -150440,9 +81204,7 @@
3459259392,3459264767,US
3459264768,3459265023,VE
3459265024,3459266559,US
-3459266560,3459266623,AG
-3459266624,3459266655,KN
-3459266656,3459267327,AG
+3459266560,3459267327,AG
3459267328,3459267583,AI
3459267584,3459267839,AG
3459267840,3459268095,DM
@@ -150451,10 +81213,8 @@
3459273728,3459274751,CL
3459274752,3459277823,US
3459277824,3459278847,AW
-3459278848,3459285247,US
-3459285248,3459285311,CL
-3459285312,3459285375,US
-3459285376,3459286271,CL
+3459278848,3459285503,US
+3459285504,3459286271,CL
3459286272,3459287807,US
3459287808,3459288063,CL
3459288064,3459290111,US
@@ -150464,8 +81224,8 @@
3459296256,3459310591,US
3459310592,3459310847,KY
3459310848,3459312639,US
-3459312640,3459312687,MX
-3459312688,3459312767,US
+3459312640,3459312671,MX
+3459312672,3459312767,US
3459312768,3459312895,MX
3459312896,3459325951,US
3459325952,3459326207,VE
@@ -150474,14 +81234,7 @@
3459327488,3459327999,CO
3459328000,3459329023,CL
3459329024,3459330047,VE
-3459330048,3459330559,CL
-3459330560,3459331071,US
-3459331072,3459331583,MX
-3459331584,3459332607,PA
-3459332608,3459333119,US
-3459333120,3459333631,PW
-3459333632,3459333887,MR
-3459333888,3459334399,US
+3459330048,3459334399,US
3459334400,3459334655,CA
3459334656,3459335423,US
3459335424,3459335679,VE
@@ -150513,18 +81266,16 @@
3459342592,3459342847,BY
3459342848,3459343103,VE
3459343104,3459343359,BR
-3459343360,3459343439,CA
-3459343440,3459343455,US
-3459343456,3459343591,CA
-3459343592,3459343599,US
-3459343600,3459343615,CA
+3459343360,3459343615,CA
3459343616,3459344127,OM
3459344128,3459345663,US
3459345664,3459345919,OM
3459345920,3459346431,US
3459346432,3459346687,LK
3459346688,3459346943,US
-3459346944,3459348223,PR
+3459346944,3459347455,PR
+3459347456,3459347711,US
+3459347712,3459348223,PR
3459348224,3459348479,AG
3459348480,3459348735,CO
3459348736,3459348991,BW
@@ -150549,15 +81300,7 @@
3459364864,3459366911,AR
3459366912,3459367167,VE
3459367168,3459367423,US
-3459367424,3459367455,VE
-3459367456,3459367535,VN
-3459367536,3459367551,VE
-3459367552,3459367647,VN
-3459367648,3459367935,VE
-3459367936,3459367999,VN
-3459368000,3459368063,VE
-3459368064,3459368095,VN
-3459368096,3459368703,VE
+3459367424,3459368703,VE
3459368704,3459368959,US
3459368960,3459371007,MX
3459371008,3459373055,PE
@@ -150581,15 +81324,17 @@
3459513856,3459592191,US
3459592192,3459596287,CA
3459596288,3459614719,US
-3459616768,3459617791,US
-3459617792,3459617999,AP
+3459616768,3459617023,CA
+3459617024,3459617791,US
+3459617792,3459617999,CA
3459618000,3459618000,ID
-3459618001,3459618047,AP
+3459618001,3459618047,CA
3459618048,3459618815,US
-3459618816,3459619071,AP
+3459618816,3459619071,CA
3459619072,3459622911,US
3459624960,3459629055,BM
-3459629056,3459731455,US
+3459629056,3459631103,US
+3459633152,3459731455,US
3459731456,3459735551,CA
3459735552,3459745535,US
3459745536,3459745791,IT
@@ -150597,135 +81342,40 @@
3459842816,3459843071,AR
3459843072,3459848959,US
3459848960,3459849215,FR
-3459849216,3459850431,US
-3459850432,3459850495,CA
-3459850496,3459852991,US
-3459852992,3459853007,CA
-3459853008,3459873807,US
-3459873808,3459873823,IT
-3459873824,3460057283,US
+3459849216,3459850239,US
+3459850240,3459850495,CA
+3459850496,3460057283,US
3460057284,3460057287,TH
3460057288,3460061687,US
3460061688,3460061691,HK
3460061692,3460063175,US
3460063176,3460063179,HK
-3460063180,3460104703,US
+3460063180,3460070959,US
+3460070960,3460070963,GB
+3460070964,3460071043,US
+3460071044,3460071047,GB
+3460071048,3460104703,US
3460104704,3460105215,MX
-3460105216,3460108895,US
-3460108896,3460108903,FI
-3460108904,3460111871,US
-3460111872,3460111887,CA
-3460111888,3460114431,US
+3460105216,3460114431,US
3460114432,3460116479,SR
3460116480,3460161535,US
3460161536,3460165631,PR
3460165632,3460374527,US
3460374528,3460375551,MX
-3460375552,3460411149,US
-3460411150,3460411150,EU
-3460411151,3460453631,US
+3460375552,3460453631,US
3460453632,3460453887,BS
3460453888,3460507647,US
3460507648,3460507903,MX
-3460507904,3460854831,US
-3460854832,3460854847,VE
-3460854848,3460854911,US
-3460854912,3460854943,GB
-3460854944,3460855015,US
-3460855016,3460855031,AU
-3460855032,3460855187,US
-3460855188,3460855191,NZ
-3460855192,3460855195,US
-3460855196,3460855199,AU
-3460855200,3460855255,US
-3460855256,3460855263,VE
-3460855264,3460855271,US
-3460855272,3460855279,GB
-3460855280,3460855287,CA
-3460855288,3460855311,US
-3460855312,3460855319,NL
-3460855320,3460855463,US
-3460855464,3460855471,SA
-3460855472,3460855535,US
-3460855536,3460855543,NZ
-3460855544,3460855551,AU
-3460855552,3460855631,US
-3460855632,3460855647,CA
-3460855648,3460855703,US
-3460855704,3460855711,AU
-3460855712,3460855743,US
-3460855744,3460855775,CA
-3460855776,3460855807,US
-3460855808,3460855815,GB
-3460855816,3460855855,US
-3460855856,3460855863,GB
-3460855864,3460855871,US
-3460855872,3460855879,GB
-3460855880,3460855887,GU
-3460855888,3460855991,US
-3460855992,3460855999,GB
-3460856000,3460856007,US
-3460856008,3460856015,CA
-3460856016,3460856119,US
-3460856120,3460856127,GB
-3460856128,3460856135,JP
-3460856136,3460856191,US
-3460856192,3460856199,ZA
-3460856200,3460856215,US
-3460856216,3460856223,GB
-3460856224,3460856287,US
-3460856288,3460856295,IN
-3460856296,3460856351,US
-3460856352,3460856355,TZ
-3460856356,3460856383,US
-3460856384,3460856399,GB
-3460856400,3460856447,US
-3460856448,3460856495,GB
-3460856496,3460856623,US
-3460856624,3460856639,NZ
-3460856640,3460856815,US
-3460856816,3460856831,NZ
-3460856832,3460857055,US
-3460857056,3460857087,NZ
-3460857088,3460857151,US
-3460857152,3460857183,CA
-3460857184,3460857343,US
-3460857344,3460857359,CA
-3460857360,3460857367,US
-3460857368,3460857375,NZ
-3460857376,3460857383,GB
-3460857384,3460857431,US
-3460857432,3460857439,VE
-3460857440,3460857599,US
-3460857600,3460857855,AU
-3460857856,3460878335,US
+3460507904,3460761599,US
+3460763648,3460794367,US
+3460796416,3460878335,US
3460878336,3460878591,CA
-3460878592,3460878847,US
-3460882432,3460891135,US
-3460891136,3460891199,CL
-3460891200,3460891967,US
-3460891968,3460891999,BR
-3460892000,3460892031,CO
-3460892032,3460892095,VE
-3460892096,3460892127,BR
-3460892128,3460892159,US
-3460892160,3460892223,FR
-3460892224,3460892271,BR
-3460892272,3460892287,US
-3460892288,3460892415,FR
-3460892416,3460893439,US
+3460878592,3460879359,US
+3460882432,3460893439,US
3460893440,3460893695,IT
-3460893696,3460894223,US
-3460894224,3460894239,MX
-3460894240,3460894335,US
-3460894336,3460894367,MX
-3460894368,3460894463,US
+3460893696,3460894463,US
3460894464,3460894719,JP
-3460894720,3460894735,NL
-3460894736,3460894751,CA
-3460894752,3460894783,US
-3460894784,3460894975,NL
-3460894976,3460895231,DK
+3460894720,3460895231,US
3460895232,3460895487,BE
3460895488,3460896255,US
3460896256,3460896511,ZA
@@ -150734,127 +81384,38 @@
3460897024,3460897279,GB
3460897280,3460899327,US
3460899328,3460899583,ZA
-3460899584,3460900607,US
-3460900608,3460900671,PE
-3460900672,3460900735,US
-3460900736,3460900799,PR
-3460900800,3460900831,EC
-3460900832,3460901375,US
+3460899584,3460901375,US
3460901376,3460901631,SE
-3460901632,3460902143,US
-3460902144,3460902271,IN
-3460902272,3460903215,US
-3460903216,3460903231,AR
-3460903232,3460903239,BR
-3460903240,3460903263,US
-3460903264,3460903295,VE
-3460903296,3460903359,US
-3460903360,3460903423,MX
-3460903424,3460903807,US
-3460903808,3460903871,BO
-3460903872,3460903935,US
-3460903936,3460904063,VE
-3460904064,3460904079,MX
-3460904080,3460904191,US
-3460904192,3460904223,FI
-3460904224,3460904255,US
-3460904256,3460904319,DE
-3460904320,3460904447,US
-3460904448,3460904479,FI
-3460904480,3460904591,US
-3460904592,3460904607,CA
-3460904608,3460904639,US
-3460904640,3460904703,BR
-3460904704,3460904735,US
-3460904736,3460904751,CA
-3460904752,3460905255,US
-3460905256,3460905263,MX
-3460905264,3460905295,US
-3460905296,3460905311,BR
-3460905312,3460905407,US
-3460905408,3460905471,BR
-3460905472,3460905743,US
-3460905744,3460905759,BR
-3460905760,3460905791,US
-3460905792,3460905823,BR
-3460905824,3460906047,US
-3460906048,3460906079,ID
-3460906080,3460906111,CN
-3460906112,3460906143,HK
-3460906144,3460906495,US
-3460906496,3460906559,ID
-3460906560,3460907263,US
+3460901632,3460907263,US
3460907264,3460907519,SG
-3460907520,3460908159,US
-3460908160,3460908191,CN
-3460908192,3460908287,US
+3460907520,3460908287,US
3460908288,3460908543,FI
3460908544,3460908799,US
3460908800,3460910335,IE
3460910336,3460910591,US
3460910592,3460910847,IE
-3460910848,3460911167,US
-3460911168,3460911199,ID
-3460911200,3460912127,US
+3460910848,3460912127,US
3460912128,3460912383,IT
3460912384,3460912639,FR
3460912640,3460912895,ES
-3460912896,3460913407,US
-3460913408,3460913439,FR
-3460913440,3460913471,US
-3460913472,3460913663,FR
-3460913664,3460913951,US
-3460913952,3460914015,CN
-3460914016,3460914047,US
-3460914048,3460914111,DE
-3460914112,3460916223,US
+3460912896,3460916223,US
3460916224,3460916479,CH
3460916480,3460916735,GB
3460916736,3460916991,AR
-3460916992,3460917023,CA
-3460917024,3460917135,US
-3460917136,3460917151,MX
-3460917152,3460917183,PR
-3460917184,3460917279,US
-3460917280,3460917311,CA
-3460917312,3460917343,US
-3460917344,3460917359,CA
-3460917360,3460917423,US
-3460917424,3460917439,MX
-3460917440,3460917759,US
+3460916992,3460917759,US
3460917760,3460918015,CA
-3460918016,3460918207,US
-3460918208,3460918239,AR
-3460918240,3460918271,US
+3460918016,3460918271,US
3460918272,3460918527,NL
-3460918528,3460918687,US
-3460918688,3460918719,MX
-3460918720,3460918783,US
+3460918528,3460918783,US
3460918784,3460919039,JP
3460919040,3460919295,NL
-3460919296,3460919535,US
-3460919536,3460919543,AR
-3460919544,3460919551,CO
-3460919552,3460920319,US
+3460919296,3460920319,US
3460920320,3460920575,IT
3460920576,3460920831,BE
3460920832,3460921343,US
3460921344,3460921599,DE
3460921600,3460921855,AU
-3460921856,3460923679,US
-3460923680,3460923711,FR
-3460923712,3460923743,DE
-3460923744,3460923775,CH
-3460923776,3460923807,SE
-3460923808,3460923839,GB
-3460923840,3460923871,AT
-3460923872,3460924159,US
-3460924160,3460924175,GB
-3460924176,3460924223,US
-3460924224,3460924287,GB
-3460924288,3460924415,DE
-3460924416,3460924607,GB
-3460924608,3460924671,US
+3460921856,3460924671,US
3460924672,3460925183,GB
3460925184,3460925695,US
3460925696,3460925951,ES
@@ -150862,41 +81423,24 @@
3460926208,3460926463,GB
3460926464,3460926719,US
3460926720,3460926975,DE
-3460926976,3460927103,US
-3460927104,3460927231,ES
+3460926976,3460927231,US
3460927232,3460929023,BE
3460929024,3460929279,US
3460929280,3460929535,DE
3460929536,3460929791,GB
3460929792,3460930047,DK
-3460930048,3460931007,US
-3460931008,3460931071,IT
-3460931072,3460931199,GR
-3460931200,3460931247,US
-3460931248,3460931327,BE
-3460931328,3460931583,US
+3460930048,3460931583,US
3460931584,3460931839,SE
3460931840,3460932095,DE
3460932096,3460932351,GB
3460932352,3460932607,FR
3460932608,3460932863,US
3460932864,3460933119,GB
-3460933120,3460933375,US
-3460933376,3460933439,DE
-3460933440,3460933679,US
-3460933680,3460933695,SE
-3460933696,3460933823,US
-3460933824,3460933887,IL
+3460933120,3460933887,US
3460933888,3460934143,DE
-3460934144,3460934655,US
-3460934656,3460934783,CH
-3460934784,3460934911,IT
+3460934144,3460934911,US
3460934912,3460935167,SG
-3460935168,3460935199,US
-3460935200,3460935231,ES
-3460935232,3460935295,US
-3460935296,3460935423,HU
-3460935424,3460935679,FR
+3460935168,3460935679,US
3460935680,3460935935,FI
3460935936,3460936191,FR
3460936192,3460936447,US
@@ -150908,30 +81452,9 @@
3460937728,3460937983,DK
3460937984,3460938239,IE
3460938240,3460938495,DE
-3460938496,3460939039,US
-3460939040,3460939071,BE
-3460939072,3460939103,IT
-3460939104,3460939263,US
+3460938496,3460939263,US
3460939264,3460939519,HK
-3460939520,3460939711,US
-3460939712,3460939775,CH
-3460939776,3460939903,US
-3460939904,3460939935,AU
-3460939936,3460939967,SG
-3460939968,3460940287,US
-3460940288,3460940351,MX
-3460940352,3460940415,ID
-3460940416,3460940479,US
-3460940480,3460940511,HK
-3460940512,3460940543,TH
-3460940544,3460940559,US
-3460940560,3460940567,GB
-3460940568,3460940607,US
-3460940608,3460940639,CN
-3460940640,3460941311,US
-3460941312,3460941375,MY
-3460941376,3460941439,US
-3460941440,3460941567,TW
+3460939520,3460941567,US
3460941568,3460941823,AU
3460941824,3460942079,US
3460942080,3460942335,GB
@@ -150940,159 +81463,58 @@
3460943616,3460943871,HK
3460943872,3460944127,US
3460944128,3460944383,AU
-3460944384,3460944447,KR
-3460944448,3460944479,US
-3460944480,3460944511,CN
-3460944512,3460944543,TH
-3460944544,3460944575,JP
-3460944576,3460944671,KR
-3460944672,3460944767,US
-3460944768,3460944895,TH
+3460944384,3460944895,US
3460944896,3460945151,DE
3460945152,3460945663,US
3460945664,3460945919,GB
3460945920,3460946687,US
3460946688,3460946943,DE
-3460946944,3460946975,CH
-3460946976,3460947455,US
+3460946944,3460947455,US
3460947456,3460947711,DE
3460947712,3460947967,SE
-3460947968,3460948095,US
-3460948096,3460948159,KR
-3460948160,3460948735,US
-3460948736,3460948799,PH
-3460948800,3460948863,CN
-3460948864,3460948927,US
-3460948928,3460948959,ID
-3460948960,3460949015,US
-3460949016,3460949023,CN
-3460949024,3460949055,JP
-3460949056,3460949183,ID
-3460949184,3460950271,US
+3460947968,3460950271,US
3460950272,3460950527,DE
-3460950528,3460950783,HK
-3460950784,3460950991,US
-3460950992,3460951007,JP
-3460951008,3460951295,US
+3460950528,3460951295,US
3460951296,3460951551,GB
-3460951552,3460951559,JP
-3460951560,3460951567,US
-3460951568,3460951583,HK
-3460951584,3460951743,US
-3460951744,3460951751,HK
-3460951752,3460951759,ID
-3460951760,3460951823,US
-3460951824,3460951831,CA
-3460951832,3460951855,US
-3460951856,3460951871,JP
-3460951872,3460951887,CH
-3460951888,3460951935,US
-3460951936,3460951951,MX
-3460951952,3460952007,US
-3460952008,3460952015,CA
-3460952016,3460952255,US
-3460952256,3460952287,CA
-3460952288,3460952319,US
+3460951552,3460952319,US
3460952320,3460952575,GB
3460952576,3460952831,ES
-3460952832,3460952895,US
-3460952896,3460952927,BR
-3460952928,3460952959,US
-3460952960,3460953023,CA
-3460953024,3460953111,US
-3460953112,3460953119,TW
-3460953120,3460953135,MX
-3460953136,3460953151,US
-3460953152,3460953167,TH
-3460953168,3460953183,JP
-3460953184,3460953199,MX
-3460953200,3460953231,US
-3460953232,3460953247,ID
-3460953248,3460953279,US
-3460953280,3460953343,CA
-3460953344,3460953599,US
-3460953600,3460953615,BR
-3460953616,3460953623,US
-3460953624,3460953631,SG
-3460953632,3460953647,CN
-3460953648,3460953663,SG
-3460953664,3460953727,US
-3460953728,3460953855,HK
+3460952832,3460953855,US
3460953856,3460954111,GB
-3460954112,3460954191,US
-3460954192,3460954207,SG
-3460954208,3460954367,US
-3460954368,3460954431,DO
-3460954432,3460954463,US
-3460954464,3460954479,MY
-3460954480,3460954527,US
+3460954112,3460954527,US
3460954528,3460954559,KR
3460954560,3460954623,US
3460954624,3460954879,DE
3460954880,3460955135,LU
-3460955136,3460955391,US
-3460955392,3460955423,JP
-3460955424,3460955455,US
-3460955456,3460955487,BR
-3460955488,3460955519,CO
-3460955520,3460955583,BR
-3460955584,3461021695,US
+3460955136,3461021695,US
3461021696,3461031935,CA
3461031936,3461032191,US
3461032192,3461087231,CA
-3461087232,3461285903,US
-3461285904,3461285975,GB
-3461285976,3461286143,US
-3461286144,3461286335,FR
-3461286336,3461286399,US
-3461286400,3461286463,FR
-3461286464,3461286471,GB
-3461286472,3461286503,US
-3461286504,3461286511,GB
-3461286512,3461286519,US
-3461286520,3461286543,GB
-3461286544,3461286599,US
-3461286600,3461286623,GB
-3461286624,3461286815,US
-3461286816,3461286847,CA
-3461286848,3461286879,GB
-3461286880,3461330943,US
+3461087232,3461330943,US
3461330944,3461331199,SG
-3461331200,3461331247,US
-3461331248,3461331263,SG
-3461331264,3461331295,US
-3461331296,3461331311,SG
-3461331312,3461331455,US
-3461331456,3461331551,SG
-3461331552,3461331567,US
-3461331568,3461331583,SG
-3461331584,3461331711,US
+3461331200,3461331711,US
3461331712,3461331967,SG
3461331968,3461332223,US
-3461332224,3461332559,SG
-3461332560,3461332735,US
+3461332224,3461332479,SG
+3461332480,3461332735,US
3461332736,3461332991,SG
3461332992,3461356543,US
3461356544,3461357567,AS
3461357568,3461408767,US
3461410816,3461414911,CA
-3461414912,3461513215,US
-3461513216,3461513727,CA
+3461414912,3461441535,US
+3461443584,3461507071,US
+3461509120,3461513727,US
3461513728,3461513983,BF
-3461513984,3461514495,CA
+3461513984,3461514495,US
3461514496,3461514751,QA
-3461514752,3461516287,CA
+3461514752,3461516287,US
3461516288,3461516543,IL
-3461516544,3461517055,CA
-3461517056,3461536959,US
-3461536960,3461536975,CA
-3461536976,3461554175,US
+3461516544,3461548031,US
+3461550080,3461554175,US
3461554176,3461556223,CA
-3461558272,3461597887,US
-3461597888,3461597951,CO
-3461597952,3461598015,US
-3461598016,3461598079,CO
-3461598080,3461808127,US
+3461558272,3461580799,US
+3461582848,3461808127,US
3461808128,3461873663,CA
3461873664,3461897727,US
3461897728,3461897983,CA
@@ -151120,17 +81542,13 @@
3461977856,3461978111,CA
3461978112,3461992703,US
3461992704,3461992959,CA
-3461992960,3461999871,US
-3461999872,3462000127,PR
-3462000128,3462000895,US
+3461992960,3462000895,US
3462000896,3462001151,CA
3462001152,3462001919,US
3462001920,3462002431,CA
3462002432,3462148607,US
3462148608,3462148863,CA
-3462148864,3462160895,US
-3462160896,3462161151,PR
-3462161152,3462163967,US
+3462148864,3462163967,US
3462163968,3462164223,CA
3462164224,3462168319,US
3462168320,3462168575,CA
@@ -151148,9 +81566,7 @@
3462179840,3462180095,CA
3462180096,3462181375,US
3462181376,3462181887,CA
-3462181888,3462191871,US
-3462191872,3462192127,PR
-3462192128,3462194175,US
+3462181888,3462194175,US
3462194176,3462194431,CA
3462194432,3462231039,US
3462231040,3462231295,CA
@@ -151182,21 +81598,11 @@
3462633824,3462633855,SG
3462633856,3462633983,US
3462633984,3462634239,SG
-3462634240,3462634247,US
-3462634248,3462634271,SG
-3462634272,3462634367,AE
-3462634368,3462634495,SG
-3462634496,3462634751,US
+3462634240,3462634751,US
3462634752,3462635007,SG
3462635008,3462635263,US
3462635264,3462635519,SG
-3462635520,3462660175,US
-3462660176,3462660191,SG
-3462660192,3462889479,US
-3462889480,3462889487,GB
-3462889488,3462991183,US
-3462991184,3462991191,CA
-3462991192,3463004159,US
+3462635520,3463004159,US
3463004160,3463006207,CO
3463006208,3463032319,US
3463032320,3463032831,PR
@@ -151208,38 +81614,21 @@
3463116800,3463118847,CO
3463118848,3463156735,US
3463156736,3463157759,BO
-3463157760,3463176191,US
-3463176192,3463176703,CW
-3463176704,3463183943,US
-3463183944,3463183951,CN
-3463183952,3463184383,US
+3463157760,3463176447,US
+3463176448,3463176703,CW
+3463176704,3463184383,US
3463184384,3463194623,CA
3463194624,3463198719,US
3463198720,3463213311,CA
-3463213312,3463213567,US
-3463214080,3463215103,US
-3463215104,3463229327,CA
-3463229328,3463229335,US
-3463229336,3463243775,CA
+3463213312,3463215103,US
+3463215104,3463243775,CA
3463243776,3463245055,US
3463245056,3463249663,CA
-3463249664,3463502335,US
-3463502336,3463502399,GB
-3463502400,3463503423,US
-3463503424,3463503519,GB
-3463503520,3463518207,US
+3463249664,3463518207,US
3463518208,3463520255,NL
3463520256,3463536895,US
3463536896,3463537151,NG
-3463537152,3463583567,US
-3463583568,3463583583,UM
-3463583584,3463602687,US
-3463602688,3463602943,PH
-3463602944,3463632383,US
-3463632384,3463632391,CA
-3463632392,3463632399,US
-3463632400,3463632415,CA
-3463632416,3463708671,US
+3463537152,3463708671,US
3463708672,3463774207,CA
3463774208,3464108031,US
3464108032,3464108287,DE
@@ -151257,117 +81646,61 @@
3464173824,3464174591,CA
3464175104,3464175359,US
3464175360,3464180735,CA
-3464180736,3464191791,US
-3464191792,3464191799,ES
-3464191800,3464191911,US
-3464191912,3464191919,ES
-3464191920,3464195943,US
-3464195944,3464195951,AU
-3464195952,3464195959,IT
-3464195960,3464196151,US
-3464196152,3464196159,AU
-3464196160,3464196175,US
-3464196176,3464196183,AU
-3464196184,3464196191,IT
-3464196192,3464196490,US
+3464180736,3464196490,US
3464196491,3464196491,ZA
3464196492,3464208383,US
3464208384,3464216575,CA
-3464216576,3464309903,US
-3464309904,3464309911,CA
-3464309912,3464310463,US
-3464310464,3464310495,AU
-3464310496,3464310591,US
-3464310592,3464310655,AU
-3464310656,3464340479,US
-3464340480,3464340543,CA
-3464340544,3464340551,MU
-3464340552,3464341503,CA
-3464341504,3464341759,US
-3464341760,3464341775,JP
-3464341776,3464341783,AU
-3464341784,3464341799,US
-3464341800,3464341807,CA
-3464341808,3464341815,JP
-3464341816,3464341911,US
-3464341912,3464341919,IE
-3464341920,3464341927,US
-3464341928,3464341935,CV
-3464341936,3464342351,US
-3464342352,3464342359,TR
-3464342360,3464342879,US
-3464342880,3464342887,GB
-3464342888,3464343055,US
-3464343056,3464343063,CN
-3464343064,3464343159,US
-3464343160,3464343167,MQ
-3464343168,3464343271,US
-3464343272,3464343279,CA
-3464343280,3464343391,US
-3464343392,3464343399,GB
-3464343400,3464343423,US
-3464343424,3464343431,SG
-3464343432,3464382463,US
+3464216576,3464243199,US
+3464245248,3464259583,US
+3464261632,3464340479,US
+3464340480,3464341503,CA
+3464341504,3464342287,US
+3464342288,3464342295,VN
+3464342296,3464349695,US
+3464351744,3464382463,US
3464384512,3464388607,CA
-3464388608,3464394751,US
-3464394752,3464396799,LC
-3464396800,3464548367,US
-3464548368,3464548375,AG
-3464548376,3464548391,US
-3464548392,3464548399,AG
-3464548400,3464548415,US
-3464548416,3464548431,AG
-3464548432,3464548479,US
-3464548480,3464548599,AG
-3464548600,3464548607,US
+3464388608,3464391935,US
+3464391936,3464392191,CA
+3464392192,3464394751,US
+3464394752,3464396799,VC
+3464396800,3464415231,US
+3464417280,3464421631,US
+3464421632,3464421887,CA
+3464422400,3464423423,US
+3464423936,3464425983,US
+3464426496,3464426751,GD
+3464426752,3464427007,US
+3464428032,3464428287,US
+3464428800,3464429311,US
+3464429568,3464464383,US
+3464466432,3464472575,US
+3464474624,3464548607,US
3464548608,3464548863,LC
3464548864,3464549119,KN
3464549120,3464549375,VG
-3464549376,3464549391,US
-3464549392,3464549399,AG
-3464549400,3464549415,US
-3464549416,3464549439,AG
-3464549440,3464549503,MS
-3464549504,3464549519,AG
-3464549520,3464549551,US
-3464549552,3464549567,AG
-3464549568,3464549639,US
-3464549640,3464549679,AG
-3464549680,3464549687,US
-3464549688,3464549727,AG
+3464549376,3464549695,US
+3464549696,3464549727,AG
3464549728,3464549759,KN
-3464549760,3464549855,AG
-3464549856,3464549863,US
-3464549864,3464549871,AG
-3464549872,3464549919,US
-3464549920,3464549927,AG
-3464549928,3464549935,US
-3464549936,3464549943,AG
-3464549944,3464549951,US
-3464549952,3464550015,AG
-3464550016,3464550047,US
-3464550048,3464550127,AG
-3464550128,3464550143,US
+3464549760,3464550143,US
3464550144,3464550399,LC
-3464550400,3464551663,US
-3464551664,3464551671,SG
-3464551672,3464551679,US
-3464551680,3464551711,SG
-3464551712,3464626175,US
+3464550400,3464626175,US
3464626176,3464626687,CA
3464626688,3464627199,US
-3464627968,3464630271,CA
+3464627968,3464628735,CA
+3464628736,3464628991,US
+3464628992,3464630271,CA
3464630272,3464631295,US
-3464631296,3464650751,CA
+3464631296,3464631807,CA
+3464632064,3464642047,CA
+3464642560,3464642815,CA
+3464643072,3464647935,CA
+3464648192,3464648703,CA
+3464649216,3464650239,CA
3464650752,3464664063,US
-3464664064,3464691711,CA
-3464691712,3464766143,US
-3464766144,3464766207,IN
-3464766208,3464768607,US
-3464768608,3464768623,IT
-3464768624,3464768767,US
-3464768768,3464768895,CA
-3464768896,3464769535,US
+3464664320,3464684543,CA
+3464684800,3464688383,CA
+3464688640,3464691711,CA
+3464691712,3464769535,US
3464769536,3464773631,CA
3464773632,3464774079,US
3464774080,3464774111,ES
@@ -151377,250 +81710,59 @@
3464785152,3464785407,AR
3464785408,3464802303,US
3464802304,3464806399,CA
-3464806400,3464818943,US
-3464818944,3464819199,PL
-3464819200,3465154559,US
+3464806400,3465154559,US
3465154560,3465158655,BS
3465158656,3465177087,US
3465177088,3465179135,PE
3465179136,3465412607,US
-3465412608,3465412871,HK
-3465412872,3465412895,GB
-3465412896,3465412927,US
-3465412928,3465413055,HK
-3465413056,3465413119,US
-3465413120,3465413127,HK
-3465413128,3465413375,US
-3465413376,3465413383,HK
-3465413384,3465413775,US
-3465413776,3465413799,HK
-3465413800,3465462783,US
+3465412608,3465412863,HK
+3465412864,3465462783,US
3465462784,3465463039,GB
-3465463040,3465463279,US
-3465463280,3465463295,GB
-3465463296,3465463367,US
-3465463368,3465463391,GB
-3465463392,3465463423,US
-3465463424,3465463487,LU
-3465463488,3465464655,US
-3465464656,3465464671,GB
-3465464672,3465464735,US
-3465464736,3465464767,GB
-3465464768,3465466687,US
-3465466688,3465466703,GB
-3465466704,3465466879,US
-3465466880,3465466975,GB
-3465466976,3465467071,US
-3465467072,3465467079,GB
-3465467080,3465468079,US
-3465468080,3465468087,GB
-3465468088,3465468351,US
-3465468352,3465468367,FI
-3465468368,3465468383,US
-3465468384,3465468399,GB
-3465468400,3465468639,US
-3465468640,3465468671,GB
-3465468672,3465468879,US
-3465468880,3465468911,SG
-3465468912,3465468935,US
-3465468936,3465468943,SG
-3465468944,3465469183,US
-3465469184,3465469215,GB
-3465469216,3465469503,US
-3465469504,3465469519,GB
-3465469520,3465470719,US
-3465470720,3465470751,CA
-3465470752,3465510911,US
+3465463040,3465468159,US
+3465468160,3465468415,GB
+3465468416,3465468671,US
+3465468672,3465468927,GB
+3465468928,3465510911,US
3465510912,3465543679,JP
-3465543680,3465953503,US
-3465953504,3465953535,CA
-3465953536,3465953791,US
-3465953792,3465953823,CA
-3465953824,3465953855,US
-3465953856,3465953887,CA
-3465953888,3465954175,US
-3465954176,3465954303,CA
-3465954304,3465954495,US
-3465954496,3465954511,CA
-3465954512,3465954559,US
-3465954560,3465954575,CA
-3465954576,3465954959,US
-3465954960,3465954975,CA
-3465954976,3465955007,US
-3465955008,3465955199,CA
-3465955200,3465955375,US
-3465955376,3465955391,CA
-3465955392,3465956351,US
-3465956352,3465956367,CA
-3465956368,3465961607,US
-3465961608,3465961615,CA
-3465961616,3465961631,US
-3465961632,3465961671,CA
-3465961672,3465961783,US
-3465961784,3465961791,CA
-3465961792,3465961983,US
-3465961984,3465962015,CA
-3465962016,3465962495,US
+3465543680,3465962495,US
3465962496,3465962751,CA
-3465962752,3465982991,US
-3465982992,3465983007,GB
-3465983008,3465983023,US
-3465983024,3465983127,GB
-3465983128,3465983167,US
-3465983168,3465983199,GB
-3465983200,3465983207,ZA
-3465983208,3465983263,GB
-3465983264,3465983271,US
-3465983272,3465983311,GB
-3465983312,3465983463,US
-3465983464,3465983487,GB
-3465983488,3465983511,NL
-3465983512,3465983519,US
-3465983520,3465983551,NL
-3465983552,3465983647,GB
-3465983648,3465983711,US
-3465983712,3465983743,GB
-3465983744,3466044903,US
-3466044904,3466044911,PH
-3466044912,3466067967,US
-3466067968,3466068247,CA
-3466068248,3466068351,US
-3466068352,3466068383,CA
-3466068384,3466068415,US
-3466068416,3466068423,CA
-3466068424,3466068991,US
-3466068992,3466069055,CA
-3466069056,3466069071,US
-3466069072,3466069119,CA
-3466069120,3466069279,US
-3466069280,3466069295,CA
-3466069296,3466071039,US
-3466071040,3466071103,CA
-3466071104,3466158079,US
+3465962752,3466067967,US
+3466067968,3466068223,CA
+3466068224,3466068991,US
+3466068992,3466069247,CA
+3466069248,3466069343,US
+3466069344,3466069375,CA
+3466069376,3466069447,US
+3466069448,3466069455,CA
+3466069456,3466072431,US
+3466072432,3466072439,CA
+3466072440,3466072775,US
+3466072776,3466072783,CA
+3466072784,3466073055,US
+3466073056,3466073087,CA
+3466073088,3466158079,US
3466158080,3466166271,PA
-3466166272,3466282111,US
-3466282112,3466282119,GB
-3466282120,3466282727,US
-3466282728,3466282743,CA
-3466282744,3466283327,US
-3466283328,3466283391,CA
-3466283392,3466285279,US
-3466285280,3466285295,GB
-3466285296,3466286103,US
-3466286104,3466286111,DE
-3466286112,3466287839,US
-3466287840,3466287847,GB
-3466287848,3466290687,US
+3466166272,3466290687,US
3466290688,3466290943,CH
-3466290944,3466294271,US
-3466294272,3466294319,CA
-3466294320,3466295263,US
-3466295264,3466295279,CA
-3466295280,3466295647,US
-3466295648,3466295679,CA
-3466295680,3466295935,US
-3466295936,3466296063,GB
-3466296064,3466296575,US
+3466290944,3466296575,US
3466296576,3466296831,GB
3466296832,3466313727,US
3466313728,3466317823,CA
3466317824,3466489855,US
3466489856,3466490111,CA
-3466490112,3466555199,US
-3466555200,3466555215,CA
-3466555216,3466558207,US
+3466490112,3466558207,US
3466558208,3466558463,EC
3466558464,3466560255,US
3466560256,3466560511,GH
-3466560512,3466627007,US
-3466627008,3466627039,PR
-3466627040,3466661887,US
+3466560512,3466661887,US
3466661888,3466663935,TW
3466663936,3466683135,US
3466683136,3466683391,NG
-3466683392,3466688511,US
-3466688512,3466688767,A2
-3466688768,3466689119,US
-3466689120,3466689135,DM
-3466689136,3466689143,US
-3466689144,3466689151,DM
-3466689152,3466689215,US
-3466689216,3466689247,DM
-3466689248,3466689375,US
-3466689376,3466689391,DM
-3466689392,3466689423,US
-3466689424,3466689439,DM
-3466689440,3466689455,US
-3466689456,3466689535,DM
-3466689536,3466689647,US
-3466689648,3466689695,DM
-3466689696,3466689711,US
-3466689712,3466689727,DM
-3466689728,3466689743,US
-3466689744,3466689759,DM
-3466689760,3466689903,US
-3466689904,3466689999,DM
-3466690000,3466690031,US
-3466690032,3466690095,DM
-3466690096,3466690175,US
-3466690176,3466690207,DM
-3466690208,3466690223,US
-3466690224,3466690239,DM
-3466690240,3466690303,US
-3466690304,3466690383,DM
-3466690384,3466690463,US
-3466690464,3466690479,DM
-3466690480,3466690495,US
-3466690496,3466690559,DM
-3466690560,3466691231,US
-3466691232,3466691247,DM
-3466691248,3466706975,US
-3466706976,3466707007,DM
-3466707008,3466707199,US
-3466707200,3466707231,DM
-3466707232,3466707311,US
-3466707312,3466707359,DM
-3466707360,3466707375,US
-3466707376,3466707407,DM
-3466707408,3466707415,US
-3466707416,3466707455,DM
-3466707456,3466708991,US
-3466708992,3466709007,DM
-3466709008,3466709023,US
-3466709024,3466709039,DM
-3466709040,3466709087,US
-3466709088,3466709103,DM
-3466709104,3466709183,US
-3466709184,3466709215,DM
-3466709216,3466709247,US
-3466709248,3466709391,DM
-3466709392,3466709407,US
-3466709408,3466709503,DM
-3466709504,3466709631,US
-3466709632,3466709647,DM
-3466709648,3466709727,US
-3466709728,3466709759,DM
-3466709760,3466710271,US
-3466710272,3466710351,DM
-3466710352,3466710431,US
-3466710432,3466710447,DM
-3466710448,3466710463,US
-3466710464,3466710495,DM
-3466710496,3466710751,US
-3466710752,3466710767,DM
-3466710768,3466710783,US
-3466710784,3466710895,DM
-3466710896,3466710975,US
-3466710976,3466710991,DM
-3466710992,3466711007,US
-3466711008,3466711023,DM
-3466711024,3466734847,US
+3466683392,3466734847,US
3466734848,3466735103,RU
3466735104,3466756095,US
3466756096,3466772479,CA
-3466772480,3466784767,US
-3466784768,3466784783,PH
-3466784784,3466846207,US
+3466772480,3466846207,US
3466846208,3466854399,CA
3466854400,3466860799,US
3466860800,3466861311,FR
@@ -151632,41 +81774,24 @@
3466914304,3466914559,FR
3466914560,3466929407,US
3466929408,3466929663,IT
-3466929664,3466937667,US
-3466937668,3466937669,DE
-3466937670,3466937670,EU
-3466937671,3466937731,DE
-3466937732,3466938444,US
+3466929664,3466937663,US
+3466937664,3466937669,DE
+3466937670,3466937670,US
+3466937671,3466937727,DE
+3466937728,3466938444,US
3466938445,3466938448,HK
-3466938449,3466958079,US
+3466938449,3466938807,US
+3466938808,3466938811,GB
+3466938812,3466958079,US
3466958080,3466958335,CA
-3466958336,3466958591,GB
-3466958592,3466976767,US
-3466976768,3466977023,US
-3466977024,3467051007,US
-3467051008,3467116543,CA
-3467116544,3467145351,US
-3467145352,3467145359,DE
-3467145360,3467145743,US
-3467145744,3467145751,DE
-3467145752,3467145815,US
-3467145816,3467145823,DE
-3467145824,3467145831,CH
-3467145832,3467145839,US
-3467145840,3467145847,HK
-3467145848,3467145855,DE
-3467145856,3467146495,US
-3467146496,3467146559,CO
-3467146560,3467146591,DE
-3467146592,3467146655,US
-3467146656,3467146671,CN
-3467146672,3467378687,US
+3466958336,3467051007,US
+3467051008,3467068927,CA
+3467069440,3467116543,CA
+3467116544,3467378687,US
3467378688,3467444223,CA
3467444224,3467554815,US
3467554816,3467567103,CA
-3467567104,3467619935,US
-3467619936,3467619967,CA
-3467619968,3467706367,US
+3467567104,3467706367,US
3467706368,3467902975,CA
3467902976,3467964415,US
3467964416,3467968511,CA
@@ -151686,33 +81811,19 @@
3468041216,3468041471,FI
3468041472,3468041727,US
3468041728,3468041983,TW
-3468041984,3468042367,US
-3468042368,3468042431,IT
-3468042432,3468042495,US
+3468041984,3468042495,US
3468042496,3468042751,AT
-3468042752,3468043135,US
-3468043136,3468043263,DK
-3468043264,3468044799,US
-3468044800,3468044927,GB
-3468044928,3468045055,DK
+3468042752,3468045055,US
3468045056,3468045311,DE
-3468045312,3468045695,US
-3468045696,3468045823,ZA
+3468045312,3468045823,US
3468045824,3468046079,NO
3468046080,3468046335,ZA
3468046336,3468046591,FR
-3468046592,3468046719,US
-3468046720,3468046847,DE
+3468046592,3468046847,US
3468046848,3468047103,IT
3468047104,3468047359,US
3468047360,3468047615,DE
-3468047616,3468047743,US
-3468047744,3468047807,LU
-3468047808,3468047871,US
-3468047872,3468047887,ES
-3468047888,3468047999,US
-3468048000,3468048127,DE
-3468048128,3468048383,US
+3468047616,3468048383,US
3468048384,3468048639,FR
3468048640,3468049407,US
3468049408,3468049663,GB
@@ -151720,12 +81831,7 @@
3468049920,3468050175,IT
3468050176,3468050431,US
3468050432,3468050687,SE
-3468050688,3468050943,US
-3468050944,3468051007,IT
-3468051008,3468051231,US
-3468051232,3468051263,DK
-3468051264,3468051327,AT
-3468051328,3468052479,US
+3468050688,3468052479,US
3468052480,3468052735,ES
3468052736,3468052991,GB
3468052992,3468053759,US
@@ -151735,853 +81841,107 @@
3468055552,3468055807,IT
3468055808,3468056575,US
3468056576,3468056831,NO
-3468056832,3468056959,DK
-3468056960,3468057023,IN
-3468057024,3468057087,US
-3468057088,3468057215,LU
-3468057216,3468057375,GB
-3468057376,3468057599,US
+3468056832,3468057599,US
3468057600,3468057855,IL
-3468057856,3468058111,US
-3468058112,3468058175,BE
-3468058176,3468058239,CH
-3468058240,3468058367,GB
-3468058368,3468058368,US
-3468058369,3468058432,IT
-3468058433,3468058559,US
-3468058560,3468058623,SG
-3468058624,3468058687,US
+3468057856,3468058687,US
3468058688,3468058719,ES
3468058720,3468059647,US
3468059648,3468059903,FR
3468059904,3468060159,DE
3468060160,3468060671,FR
-3468060672,3468060927,US
-3468060928,3468060991,FR
-3468060992,3468061119,US
-3468061120,3468061183,CH
-3468061184,3468061695,US
+3468060672,3468061695,US
3468061696,3468061951,JP
-3468061952,3468062079,US
-3468062080,3468062143,GB
-3468062144,3468062335,US
-3468062336,3468062399,TW
-3468062400,3468062463,DE
+3468061952,3468062463,US
3468062464,3468062719,AT
3468062720,3468063231,NL
-3468063232,3468063359,US
-3468063360,3468063423,RO
-3468063424,3468063487,US
+3468063232,3468063487,US
3468063488,3468063743,BE
3468063744,3468063999,US
3468064000,3468064255,HK
-3468064256,3468064511,US
-3468064512,3468064527,BE
-3468064528,3468064543,US
-3468064544,3468064575,NO
-3468064576,3468064639,US
-3468064640,3468064703,LU
-3468064704,3468064735,US
-3468064736,3468064767,CH
+3468064256,3468064767,US
3468064768,3468065023,DE
3468065024,3468065279,US
3468065280,3468065535,DE
-3468065536,3468065791,US
-3468065792,3468065919,IT
-3468065920,3468065951,GB
-3468065952,3468065983,LU
-3468065984,3468065999,CZ
-3468066000,3468066015,BE
-3468066016,3468066047,DE
-3468066048,3468066239,US
-3468066240,3468066271,IE
-3468066272,3468066319,US
-3468066320,3468066327,FR
-3468066328,3468066463,US
-3468066464,3468066495,SE
-3468066496,3468066527,CH
-3468066528,3468066559,US
-3468066560,3468066623,IT
-3468066624,3468067199,US
-3468067200,3468067231,CA
-3468067232,3468067263,US
-3468067264,3468067295,IL
-3468067296,3468067327,US
-3468067328,3468067359,BR
-3468067360,3468067391,US
-3468067392,3468067399,BR
-3468067400,3468067551,US
-3468067552,3468067567,GB
-3468067568,3468067759,US
-3468067760,3468067775,AR
-3468067776,3468068095,US
+3468065536,3468068095,US
3468068096,3468068351,MC
3468068352,3468068863,US
3468068864,3468069631,CA
-3468069632,3468071791,US
-3468071792,3468071807,MX
-3468071808,3468071871,US
-3468071872,3468071887,MX
-3468071888,3468072351,US
-3468072352,3468072383,CA
-3468072384,3468073727,US
-3468073728,3468073791,CA
-3468073792,3468073855,US
-3468073856,3468073919,CA
-3468073920,3468074463,US
-3468074464,3468074479,GB
-3468074480,3468075919,US
-3468075920,3468075935,BR
-3468075936,3468075967,US
-3468075968,3468075999,MX
-3468076000,3468076031,PH
-3468076032,3468077631,US
-3468077632,3468077663,AR
-3468077664,3468079327,US
-3468079328,3468079359,BR
-3468079360,3468079487,US
-3468079488,3468079551,JP
-3468079552,3468081407,US
+3468069632,3468081407,US
3468081408,3468081663,DE
3468081664,3468081919,AT
3468081920,3468082431,US
3468082432,3468082687,NO
-3468082688,3468083311,US
-3468083312,3468083327,IN
-3468083328,3468083663,US
-3468083664,3468083679,ID
-3468083680,3468083967,US
+3468082688,3468083967,US
3468083968,3468084223,AU
3468084224,3468084735,US
3468084736,3468084991,SG
-3468084992,3468085055,CA
-3468085056,3468085119,US
-3468085120,3468085183,CA
-3468085184,3468085191,JP
-3468085192,3468085199,PH
-3468085200,3468085207,CN
-3468085208,3468085247,US
-3468085248,3468085279,BR
-3468085280,3468085311,US
-3468085312,3468085375,BR
-3468085376,3468085439,CN
-3468085440,3468085503,BR
-3468085504,3468085535,JP
-3468085536,3468085567,US
-3468085568,3468085599,HK
-3468085600,3468085607,US
-3468085608,3468085623,HK
-3468085624,3468085663,US
-3468085664,3468085695,ID
-3468085696,3468085759,US
+3468084992,3468085759,US
3468085760,3468086015,ID
-3468086016,3468086143,US
-3468086144,3468086271,SG
-3468086272,3468086783,US
-3468086784,3468086799,HK
-3468086800,3468086879,US
-3468086880,3468086911,SG
-3468086912,3468087807,US
+3468086016,3468087807,US
3468087808,3468088063,SG
-3468088064,3468088191,US
-3468088192,3468088207,HK
-3468088208,3468088223,US
-3468088224,3468088231,HK
-3468088232,3468088335,US
-3468088336,3468088351,JP
-3468088352,3468088383,ID
-3468088384,3468088415,US
-3468088416,3468088431,TW
-3468088432,3468088959,US
-3468088960,3468088991,JP
-3468088992,3468089023,US
-3468089024,3468089055,HK
-3468089056,3468089663,US
-3468089664,3468089695,JP
-3468089696,3468089823,US
-3468089824,3468089855,SG
-3468089856,3468090623,US
-3468090624,3468090687,IT
-3468090688,3468090719,MY
-3468090720,3468090727,US
-3468090728,3468090735,JP
-3468090736,3468090751,CN
-3468090752,3468090815,US
-3468090816,3468090879,CN
-3468090880,3468091135,US
-3468091136,3468091199,JP
-3468091200,3468091391,US
+3468088064,3468091391,US
3468091392,3468091647,NL
-3468091648,3468091903,US
-3468091904,3468091935,KR
-3468091936,3468092031,US
-3468092032,3468092063,TH
-3468092064,3468092127,US
-3468092128,3468092159,SG
-3468092160,3468093247,US
-3468093248,3468093263,JP
-3468093264,3468093279,US
-3468093280,3468093287,JP
-3468093288,3468093343,US
-3468093344,3468093375,HK
-3468093376,3468093391,SG
-3468093392,3468093407,ID
-3468093408,3468093439,AU
-3468093440,3468093695,US
+3468091648,3468093695,US
3468093696,3468093951,DE
-3468093952,3468094207,US
-3468094208,3468094223,HK
-3468094224,3468094271,US
-3468094272,3468094303,KR
-3468094304,3468094335,ID
-3468094336,3468095135,US
-3468095136,3468095167,JP
-3468095168,3468095231,US
+3468093952,3468095231,US
3468095232,3468095487,SE
-3468095488,3468096255,US
-3468096256,3468096383,CA
-3468096384,3468096447,TW
-3468096448,3468096479,US
-3468096480,3468096511,MY
+3468095488,3468096511,US
3468096512,3468096767,NO
-3468096768,3468096895,PH
-3468096896,3468097023,AU
-3468097024,3468098047,US
-3468098048,3468098079,JP
-3468098080,3468098111,SG
-3468098112,3468098239,US
-3468098240,3468098271,SG
-3468098272,3468099327,US
+3468096768,3468099327,US
3468099328,3468099583,FR
3468099584,3468127743,US
3468127744,3468128255,IN
-3468128256,3468296191,US
+3468128256,3468142591,US
+3468144640,3468296191,US
3468296192,3468361727,CA
-3468361728,3468427359,US
-3468427360,3468427375,IL
-3468427376,3468427935,US
-3468427936,3468427967,AU
-3468427968,3468428191,US
-3468428192,3468428207,BG
-3468428208,3468428415,US
-3468428416,3468428447,GR
-3468428448,3468428543,US
-3468428544,3468428559,CA
-3468428560,3468428607,US
-3468428608,3468428671,CA
-3468428672,3468428927,US
-3468428928,3468428991,SE
-3468428992,3468430495,US
-3468430496,3468430527,CA
-3468430528,3468431999,US
-3468432000,3468432063,CA
-3468432064,3468432671,US
-3468432672,3468432687,ES
-3468432688,3468433167,US
-3468433168,3468433183,CA
-3468433184,3468433215,US
-3468433216,3468433279,SE
-3468433280,3468433439,US
-3468433440,3468433455,AU
-3468433456,3468435359,US
-3468435360,3468435423,AU
-3468435424,3468443647,US
+3468361728,3468443647,US
3468443648,3468460031,CA
3468460032,3468468223,BM
3468468224,3468545791,US
3468545792,3468546047,SG
-3468546048,3468619007,US
+3468546048,3468598527,US
+3468598528,3468598783,SG
+3468598784,3468599039,NL
+3468599040,3468599295,SG
+3468599296,3468619007,US
3468619008,3468619263,CA
3468619264,3468623871,US
-3468623872,3468627663,CA
-3468627664,3468627679,US
-3468627680,3468628119,CA
-3468628120,3468628127,GB
-3468628128,3468628143,CA
-3468628144,3468628159,US
-3468628160,3468628183,CA
-3468628184,3468628191,US
-3468628192,3468631583,CA
-3468631584,3468631615,US
-3468631616,3468631679,CA
-3468631680,3468631695,US
-3468631696,3468632735,CA
-3468632736,3468632743,US
-3468632744,3468632975,CA
-3468632976,3468632991,US
-3468632992,3468633759,CA
-3468633760,3468633791,US
-3468633792,3468635583,CA
-3468635584,3468635647,US
-3468635648,3468635919,CA
-3468635920,3468635935,US
-3468635936,3468637839,CA
-3468637840,3468637847,SK
-3468637848,3468638143,CA
-3468638144,3468638159,US
-3468638160,3468639935,CA
-3468639936,3468639967,US
-3468639968,3468656639,CA
-3468656640,3468799999,US
-3468800000,3468800255,GB
-3468800256,3468978131,US
-3468978132,3468978133,US
-3468978134,3469032191,US
-3469032192,3469032447,AP
-3469032448,3469055743,US
+3468623872,3468656639,CA
+3468656640,3469010687,US
+3469010688,3469010943,AU
+3469010944,3469055743,US
3469055744,3469055999,CA
-3469056000,3469070335,US
+3469056000,3469068287,US
+3469068800,3469070335,US
3469070336,3469070591,CA
3469070592,3469176319,US
3469176320,3469176575,MX
3469176576,3469186303,US
3469186304,3469186559,MX
-3469186560,3469893631,US
+3469186560,3469859583,US
+3469859584,3469859839,CA
+3469859840,3469893631,US
3469893632,3469901823,CA
-3469901824,3470131199,US
+3469901824,3469989887,US
+3469990400,3470131199,US
3470131200,3470135295,AG
3470135296,3470137343,LC
3470137344,3470139391,VG
3470139392,3470148095,US
3470148096,3470148351,CA
-3470148352,3470148543,US
-3470148544,3470148575,EG
-3470148576,3470148607,US
+3470148352,3470148607,US
3470148608,3470148863,CA
-3470148864,3470149055,US
-3470149056,3470149087,EG
-3470149088,3470149375,US
-3470149376,3470149407,EG
-3470149408,3470149887,US
-3470149888,3470149919,BR
-3470149920,3470150015,US
-3470150016,3470150047,EG
-3470150048,3470150079,US
-3470150080,3470150111,EE
-3470150112,3470150303,US
-3470150304,3470150335,EG
-3470150336,3470151295,US
-3470151296,3470151359,CA
-3470151360,3470151679,US
-3470151680,3470151935,CA
+3470148864,3470151807,US
+3470151808,3470151871,CA
+3470151872,3470151935,US
3470151936,3470152191,EG
-3470152192,3470153087,US
-3470153088,3470153119,EG
-3470153120,3470154079,US
-3470154080,3470154111,EG
-3470154112,3470154687,US
-3470154688,3470154719,HK
-3470154720,3470155743,US
-3470155744,3470155775,EE
-3470155776,3470184476,US
-3470184477,3470184480,CN
-3470184481,3470184492,US
-3470184493,3470184496,ID
-3470184497,3470184544,US
-3470184545,3470184545,MY
-3470184546,3470184549,US
-3470184550,3470184550,SI
-3470184551,3470184552,US
-3470184553,3470184553,SI
-3470184554,3470184557,IN
-3470184558,3470184574,US
-3470184575,3470184575,BE
-3470184576,3470184577,CA
-3470184578,3470184581,MX
-3470184582,3470184593,US
-3470184594,3470184597,JP
-3470184598,3470184617,US
-3470184618,3470184619,NZ
-3470184620,3470184639,US
-3470184640,3470184643,TW
-3470184644,3470184671,US
-3470184672,3470184675,MY
-3470184676,3470184683,US
-3470184684,3470184687,BR
-3470184688,3470184691,CA
-3470184692,3470184699,US
-3470184700,3470184701,AU
-3470184702,3470184722,US
-3470184723,3470184723,MY
-3470184724,3470184731,US
-3470184732,3470184733,NZ
-3470184734,3470184737,US
-3470184738,3470184741,SG
-3470184742,3470184746,US
-3470184747,3470184750,MY
-3470184751,3470184769,US
-3470184770,3470184773,ID
-3470184774,3470184785,US
-3470184786,3470184789,NZ
-3470184790,3470184801,US
-3470184802,3470184805,TW
-3470184806,3470184809,US
-3470184810,3470184813,MY
-3470184814,3470184817,CA
-3470184818,3470184821,US
-3470184822,3470184825,AU
-3470184826,3470184829,US
-3470184830,3470184833,JP
-3470184834,3470184837,US
-3470184838,3470184841,GB
-3470184842,3470184849,US
-3470184850,3470184853,JP
-3470184854,3470184857,SG
-3470184858,3470184861,RO
-3470184862,3470184865,US
-3470184866,3470184869,AU
-3470184870,3470184873,HK
-3470184874,3470184881,US
-3470184882,3470184884,AU
-3470184885,3470184905,US
-3470184906,3470184907,SG
-3470184908,3470184919,US
-3470184920,3470184923,MX
-3470184924,3470184929,US
-3470184930,3470184933,AU
-3470184934,3470184957,US
-3470184958,3470184958,LK
-3470184959,3470184975,US
-3470184976,3470184976,MY
-3470184977,3470184990,US
-3470184991,3470184994,NZ
-3470184995,3470185010,US
-3470185011,3470185014,GB
-3470185015,3470185016,AU
-3470185017,3470185020,US
-3470185021,3470185021,BE
-3470185022,3470185050,US
-3470185051,3470185054,IN
-3470185055,3470185062,US
-3470185063,3470185066,BR
-3470185067,3470185070,PL
-3470185071,3470185082,US
-3470185083,3470185086,AU
-3470185087,3470185090,IN
-3470185091,3470185138,US
-3470185139,3470185142,ID
-3470185143,3470185146,US
-3470185147,3470185150,AR
-3470185151,3470185154,AU
-3470185155,3470185166,US
-3470185167,3470185170,CN
-3470185171,3470185199,US
-3470185200,3470185203,ID
-3470185204,3470185207,GB
-3470185208,3470185213,US
-3470185214,3470185214,LK
-3470185215,3470185234,US
-3470185235,3470185238,AE
-3470185239,3470185242,NL
-3470185243,3470185250,US
-3470185251,3470185254,CA
-3470185255,3470185258,SG
-3470185259,3470185262,AU
-3470185263,3470185270,US
-3470185271,3470185274,ID
-3470185275,3470185278,AU
-3470185279,3470185282,CA
-3470185283,3470185286,US
-3470185287,3470185290,CN
-3470185291,3470185294,US
-3470185295,3470185295,MY
-3470185296,3470185312,US
-3470185313,3470185316,TW
-3470185317,3470185336,US
-3470185337,3470185340,AU
-3470185341,3470185344,US
-3470185345,3470185348,EC
-3470185349,3470185352,US
-3470185353,3470185353,NZ
-3470185354,3470185365,US
-3470185366,3470185367,AU
-3470185368,3470185371,PH
-3470185372,3470185379,US
-3470185380,3470185383,AU
-3470185384,3470185399,US
-3470185400,3470185403,ID
-3470185404,3470185415,US
-3470185416,3470185419,BE
-3470185420,3470185423,NL
-3470185424,3470185427,CA
-3470185428,3470185431,US
-3470185432,3470185435,CN
-3470185436,3470185451,US
-3470185452,3470185455,VE
-3470185456,3470185463,US
-3470185464,3470185467,NZ
-3470185468,3470185468,US
-3470185469,3470185469,LK
-3470185470,3470186003,US
-3470186004,3470186007,MX
-3470186008,3470186011,CA
-3470186012,3470186012,CA
-3470186013,3470186015,CA
-3470186016,3470186019,AU
-3470186020,3470186060,US
-3470186061,3470186064,CN
-3470186065,3470186068,AU
-3470186069,3470186072,US
-3470186073,3470186076,IN
-3470186077,3470186084,US
-3470186085,3470186085,BE
-3470186086,3470186089,US
-3470186090,3470186093,SG
-3470186094,3470186097,CA
-3470186098,3470186113,US
-3470186114,3470186117,AU
-3470186118,3470186251,US
-3470186252,3470186255,CN
-3470186256,3470186267,US
-3470186268,3470186271,MX
-3470186272,3470186275,SG
-3470186276,3470186283,US
-3470186284,3470186287,CA
-3470186288,3470186306,US
-3470186307,3470186310,MY
-3470186311,3470186314,TH
-3470186315,3470186318,AU
-3470186319,3470186324,US
-3470186325,3470186328,CN
-3470186329,3470186329,NZ
-3470186330,3470186338,US
-3470186339,3470186342,UA
-3470186343,3470186513,US
-3470186514,3470186517,CA
-3470186518,3470186525,US
-3470186526,3470186529,ID
-3470186530,3470186537,GB
-3470186538,3470186573,US
-3470186574,3470186577,CH
-3470186578,3470186593,US
-3470186594,3470186597,CA
-3470186598,3470186601,DE
-3470186602,3470186605,US
-3470186606,3470186609,CA
-3470186610,3470186613,ES
-3470186614,3470186617,US
-3470186618,3470186621,RO
-3470186622,3470186625,BR
-3470186626,3470186637,US
-3470186638,3470186641,BR
-3470186642,3470186669,US
-3470186670,3470186673,AU
-3470186674,3470186677,US
-3470186678,3470186681,CA
-3470186682,3470186685,US
-3470186686,3470186689,IL
-3470186690,3470186693,IN
-3470186694,3470186697,ES
-3470186698,3470186701,CA
-3470186702,3470186705,AU
-3470186706,3470186721,US
-3470186722,3470186725,IN
-3470186726,3470186729,US
-3470186730,3470186733,IN
-3470186734,3470186737,US
-3470186738,3470186741,CA
-3470186742,3470186745,IL
-3470186746,3470186757,US
-3470186758,3470186761,CA
-3470186762,3470186765,US
-3470186766,3470186769,HU
-3470186770,3470186785,US
-3470186786,3470186789,GB
-3470186790,3470186805,US
-3470186806,3470186809,IN
-3470186810,3470186813,US
-3470186814,3470186817,EE
-3470186818,3470186825,US
-3470186826,3470186829,GB
-3470186830,3470186833,IN
-3470186834,3470186837,US
-3470186838,3470186841,AR
-3470186842,3470186845,CA
-3470186846,3470186849,EG
-3470186850,3470186853,US
-3470186854,3470186857,KW
-3470186858,3470186861,US
-3470186862,3470186865,AR
-3470186866,3470186873,US
-3470186874,3470186877,AE
-3470186878,3470186881,CA
-3470186882,3470186885,US
-3470186886,3470186889,FR
-3470186890,3470186891,CA
-3470186892,3470186895,FR
-3470186896,3470186899,AU
-3470186900,3470186903,US
-3470186904,3470186907,IN
-3470186908,3470186933,US
-3470186934,3470186935,BR
-3470186936,3470186943,US
-3470186944,3470186947,CA
-3470186948,3470186963,US
-3470186964,3470186967,TR
-3470186968,3470186989,US
-3470186990,3470186993,PE
-3470186994,3470186997,US
-3470186998,3470187001,GB
-3470187002,3470187041,US
-3470187042,3470187045,GB
-3470187046,3470187057,US
-3470187058,3470187061,MY
-3470187062,3470187073,US
-3470187074,3470187077,IT
-3470187078,3470187081,CA
-3470187082,3470187085,CZ
-3470187086,3470187089,US
-3470187090,3470187093,TR
-3470187094,3470187097,GB
-3470187098,3470187101,IN
-3470187102,3470187109,US
-3470187110,3470187113,BR
-3470187114,3470187117,VN
-3470187118,3470187125,US
-3470187126,3470187129,GB
-3470187130,3470187133,AR
-3470187134,3470187137,BA
-3470187138,3470187141,US
-3470187142,3470187145,CA
-3470187146,3470187153,IN
-3470187154,3470187157,ID
-3470187158,3470187161,US
-3470187162,3470187165,AU
-3470187166,3470187169,NO
-3470187170,3470187181,US
-3470187182,3470187185,GR
-3470187186,3470187229,US
-3470187230,3470187231,CA
-3470187232,3470187235,GB
-3470187236,3470187247,US
-3470187248,3470187251,GB
-3470187252,3470187255,US
-3470187256,3470187259,ES
-3470187260,3470187269,US
-3470187270,3470187273,AU
-3470187274,3470187309,US
-3470187310,3470187313,ES
-3470187314,3470187317,CA
-3470187318,3470187335,US
-3470187336,3470187339,CA
-3470187340,3470187343,GR
-3470187344,3470187356,US
-3470187357,3470187360,GB
-3470187361,3470187364,BG
-3470187365,3470187368,US
-3470187369,3470187372,GR
-3470187373,3470187380,US
-3470187381,3470187384,AR
-3470187385,3470187388,US
-3470187389,3470187392,GB
-3470187393,3470187396,IN
-3470187397,3470187400,RU
-3470187401,3470187404,GB
-3470187405,3470187408,DO
-3470187409,3470187416,US
-3470187417,3470187420,IN
-3470187421,3470187429,US
-3470187430,3470187431,RU
-3470187432,3470187437,US
-3470187438,3470187441,PH
-3470187442,3470187446,US
-3470187447,3470187450,CA
-3470187451,3470187454,US
-3470187455,3470187458,IT
-3470187459,3470187470,US
-3470187471,3470187474,PT
-3470187475,3470187502,US
-3470187503,3470187503,JP
-3470187504,3470187511,US
-3470187512,3470187515,UA
-3470187516,3470187525,US
-3470187526,3470187529,EC
-3470187530,3470187557,US
-3470187558,3470187561,AE
-3470187562,3470187569,US
-3470187570,3470187573,IN
-3470187574,3470187577,US
-3470187578,3470187581,GB
-3470187582,3470187589,US
-3470187590,3470187593,IT
-3470187594,3470187606,US
-3470187607,3470187610,IL
-3470187611,3470187614,PL
-3470187615,3470187618,US
-3470187619,3470187622,IT
-3470187623,3470187634,US
-3470187635,3470187638,SG
-3470187639,3470187646,US
-3470187647,3470187650,IT
-3470187651,3470187654,AR
-3470187655,3470187666,US
-3470187667,3470187670,IN
-3470187671,3470187674,RS
-3470187675,3470187678,US
-3470187679,3470187682,PT
-3470187683,3470187686,US
-3470187687,3470187690,JP
-3470187691,3470187702,US
-3470187703,3470187706,GB
-3470187707,3470187725,US
-3470187726,3470187729,GB
-3470187730,3470187741,US
-3470187742,3470187745,VN
-3470187746,3470187755,US
-3470187756,3470187759,PH
-3470187760,3470187763,ZA
-3470187764,3470187781,US
-3470187782,3470187785,SI
-3470187786,3470187801,US
-3470187802,3470187805,IN
-3470187806,3470187813,US
-3470187814,3470187817,HK
-3470187818,3470187825,US
-3470187826,3470187829,CA
-3470187830,3470187841,US
-3470187842,3470187845,TR
-3470187846,3470187857,US
-3470187858,3470187861,MX
-3470187862,3470187867,US
-3470187868,3470187871,IL
-3470187872,3470187885,US
-3470187886,3470187889,IN
-3470187890,3470187940,US
-3470187941,3470187944,SA
-3470187945,3470187952,US
-3470187953,3470187956,NO
-3470187957,3470187960,US
-3470187961,3470187964,IN
-3470187965,3470187976,US
-3470187977,3470187980,ES
-3470187981,3470187988,US
-3470187989,3470187992,CA
-3470187993,3470188004,US
-3470188005,3470188008,AU
-3470188009,3470188016,SE
-3470188017,3470188024,US
-3470188025,3470188028,GB
-3470188029,3470188041,US
-3470188042,3470188045,TH
-3470188046,3470188049,GB
-3470188050,3470188069,US
-3470188070,3470188073,NZ
-3470188074,3470188095,US
-3470188096,3470188099,GB
-3470188100,3470188103,US
-3470188104,3470188107,CA
-3470188108,3470188111,US
+3470152192,3470188111,US
3470188112,3470188115,CA
-3470188116,3470188131,US
-3470188132,3470188135,AU
-3470188136,3470188151,US
-3470188152,3470188155,KW
-3470188156,3470188163,US
-3470188164,3470188167,ID
-3470188168,3470188171,US
-3470188172,3470188175,NL
-3470188176,3470188199,US
-3470188200,3470188203,AR
-3470188204,3470188207,US
-3470188208,3470188211,ES
-3470188212,3470188215,TR
-3470188216,3470188227,US
-3470188228,3470188231,GB
-3470188232,3470188243,US
-3470188244,3470188247,CA
-3470188248,3470188251,BE
-3470188252,3470188255,US
-3470188256,3470188259,CA
-3470188260,3470188275,US
-3470188276,3470188279,IN
-3470188280,3470188283,GR
-3470188284,3470188293,US
-3470188294,3470188295,RU
-3470188296,3470188347,US
-3470188348,3470188351,HU
-3470188352,3470188393,US
-3470188394,3470188397,GB
-3470188398,3470188405,US
-3470188406,3470188409,GR
-3470188410,3470188425,US
-3470188426,3470188433,ES
-3470188434,3470188437,AR
-3470188438,3470188483,US
-3470188484,3470188487,PH
-3470188488,3470188491,ID
-3470188492,3470188503,US
-3470188504,3470188507,CA
-3470188508,3470188509,US
-3470188510,3470188510,IL
-3470188511,3470188521,US
-3470188522,3470188541,HK
-3470188542,3470192639,US
-3470192640,3470194915,CA
-3470194916,3470194935,US
-3470194936,3470194939,CA
-3470194940,3470194943,US
-3470194944,3470196463,CA
-3470196464,3470196479,US
-3470196480,3470196735,CA
-3470196736,3470360623,US
-3470360624,3470360631,CA
-3470360632,3470360639,SE
-3470360640,3470360687,US
-3470360688,3470360695,AF
-3470360696,3470360895,US
-3470360896,3470360911,KW
-3470360912,3470360927,US
-3470360928,3470360935,CA
-3470360936,3470361023,US
-3470361024,3470361031,SE
-3470361032,3470361039,US
-3470361040,3470361055,SE
-3470361056,3470361663,US
-3470361664,3470361671,CA
-3470361672,3470361703,US
-3470361704,3470361711,AF
-3470361712,3470361743,US
-3470361744,3470361759,SE
-3470361760,3470361771,US
-3470361772,3470361775,AE
-3470361776,3470361815,US
-3470361816,3470361823,GB
-3470361824,3470362099,US
-3470362100,3470362103,AE
-3470362104,3470362159,US
-3470362160,3470362167,AF
-3470362168,3470362263,US
-3470362264,3470362271,NZ
-3470362272,3470362559,US
-3470362560,3470362591,SE
-3470362592,3470362623,US
-3470362624,3470362687,SE
-3470362688,3470362731,US
-3470362732,3470362735,AE
-3470362736,3470362847,US
-3470362848,3470362855,AF
-3470362856,3470362895,US
-3470362896,3470362911,AU
-3470362912,3470363455,US
-3470363456,3470363519,SE
-3470363520,3470363551,US
-3470363552,3470363555,AF
-3470363556,3470363599,US
-3470363600,3470363615,KW
-3470363616,3470363631,ES
-3470363632,3470363759,US
-3470363760,3470363767,CA
-3470363768,3470363903,US
-3470363904,3470363919,CA
-3470363920,3470363967,US
-3470363968,3470363983,CA
-3470363984,3470364095,US
-3470364096,3470364103,EG
-3470364104,3470364415,US
-3470364416,3470364479,SE
-3470364480,3470364559,US
-3470364560,3470364575,HN
-3470364576,3470458879,US
+3470188116,3470192639,US
+3470192640,3470194927,CA
+3470194928,3470194935,US
+3470194936,3470196735,CA
+3470196736,3470458879,US
3470458880,3470475263,KR
3470475264,3470509311,US
3470509312,3470509567,CA
@@ -152590,154 +81950,14 @@
3470559232,3470573567,US
3470573568,3470575615,CA
3470575616,3470610431,US
-3470610432,3470614527,BR
-3470614528,3470643615,US
-3470643616,3470643631,CA
-3470643632,3470643647,US
-3470643648,3470643711,CA
-3470643712,3470645511,US
-3470645512,3470645519,GB
-3470645520,3470645527,FR
-3470645528,3470645567,US
-3470645568,3470645575,CA
-3470645576,3470645583,US
-3470645584,3470645591,FR
-3470645592,3470645623,US
-3470645624,3470645631,BR
-3470645632,3470645655,US
-3470645656,3470645663,RU
-3470645664,3470645687,US
-3470645688,3470645695,ES
-3470645696,3470645731,US
-3470645732,3470645735,AU
-3470645736,3470645739,CN
-3470645740,3470645743,US
-3470645744,3470645747,ES
-3470645748,3470645751,US
-3470645752,3470645759,BR
-3470645760,3470645791,US
-3470645792,3470645799,CN
-3470645800,3470645863,US
-3470645864,3470645871,IN
-3470645872,3470646015,US
-3470646016,3470646019,BR
-3470646020,3470646055,US
-3470646056,3470646063,ES
-3470646064,3470646087,US
-3470646088,3470646095,ES
-3470646096,3470646103,US
-3470646104,3470646119,BR
-3470646120,3470646135,US
-3470646136,3470646143,AU
-3470646144,3470646151,CA
-3470646152,3470646159,AU
-3470646160,3470646167,US
-3470646168,3470646175,BR
-3470646176,3470646215,US
-3470646216,3470646223,BR
-3470646224,3470646231,IL
-3470646232,3470646239,US
-3470646240,3470646247,IL
-3470646248,3470646255,DE
-3470646256,3470646263,AU
-3470646264,3470646271,AR
-3470646272,3470646279,US
-3470646280,3470646287,CN
-3470646288,3470646359,US
-3470646360,3470646367,ZA
-3470646368,3470646375,US
-3470646376,3470646383,BR
-3470646384,3470646415,US
-3470646416,3470646423,CA
-3470646424,3470646431,FR
-3470646432,3470646487,US
-3470646488,3470646495,PL
-3470646496,3470646503,BR
-3470646504,3470646527,US
-3470646528,3470646543,FR
-3470646544,3470646567,US
-3470646568,3470646575,BR
-3470646576,3470646583,US
-3470646584,3470646591,LK
+3470610432,3470614527,AR
+3470614528,3470646591,US
3470646592,3470646599,CN
-3470646600,3470646607,US
-3470646608,3470646623,ZA
-3470646624,3470646631,DE
-3470646632,3470646639,BR
-3470646640,3470646703,US
-3470646704,3470646711,CN
-3470646712,3470646719,UY
-3470646720,3470646727,US
-3470646728,3470646735,GB
-3470646736,3470646743,US
-3470646744,3470646751,BR
-3470646752,3470646767,FR
-3470646768,3470646775,US
-3470646776,3470646783,IT
-3470646784,3470646831,US
-3470646832,3470646847,IL
-3470646848,3470646983,US
-3470646984,3470646991,AR
-3470646992,3470646999,CN
-3470647000,3470651391,US
+3470646600,3470651391,US
3470651392,3470655487,CA
-3470655488,3470656063,US
-3470656064,3470656095,IL
-3470656096,3470657695,US
-3470657696,3470657711,RU
-3470657712,3470658599,US
-3470658600,3470658607,JP
-3470658608,3470658615,US
-3470658616,3470658623,ZA
-3470658624,3470658751,US
-3470658752,3470658759,IE
-3470658760,3470659183,US
-3470659184,3470659191,BE
-3470659192,3470659471,US
-3470659472,3470659487,ES
-3470659488,3470659567,US
-3470659568,3470659575,BR
-3470659576,3470659735,US
-3470659736,3470659743,AU
-3470659744,3470659951,US
-3470659952,3470659959,MY
-3470659960,3470659967,IN
-3470659968,3470660079,US
-3470660080,3470660087,CA
-3470660088,3470660103,US
-3470660104,3470660111,HK
-3470660112,3470660223,US
-3470660224,3470660239,PH
-3470660240,3470660247,US
-3470660248,3470660255,PH
-3470660256,3470660647,US
+3470655488,3470660647,US
3470660648,3470660655,IE
-3470660656,3470661191,US
-3470661192,3470661199,CA
-3470661200,3470661215,US
-3470661216,3470661223,IN
-3470661224,3470661231,US
-3470661232,3470661239,ES
-3470661240,3470661319,US
-3470661320,3470661327,BD
-3470661328,3470662167,US
-3470662168,3470662175,IL
-3470662176,3470662183,CN
-3470662184,3470662663,US
-3470662664,3470662671,AE
-3470662672,3470662863,US
-3470662864,3470662871,IN
-3470662872,3470662911,US
-3470662912,3470662919,GB
-3470662920,3470663055,US
-3470663056,3470663063,NL
-3470663064,3470663095,US
-3470663096,3470663103,GB
-3470663104,3470663119,US
-3470663120,3470663127,VE
-3470663128,3470663287,US
-3470663288,3470663295,TH
-3470663296,3470671871,US
+3470660656,3470671871,US
3470671872,3470680063,CA
3470680064,3470744063,US
3470744064,3470744575,CA
@@ -152750,24 +81970,16 @@
3470753024,3470754303,US
3470754304,3470754559,PE
3470754560,3470755839,US
-3470755840,3470756095,ZA
+3470755840,3470756095,MU
3470756096,3470761983,US
-3470761984,3470762751,CA
-3470762752,3470762759,NL
-3470762760,3470767871,CA
+3470761984,3470767871,CA
3470767872,3470768127,IE
3470768128,3470770175,CA
3470770176,3470778367,US
3470778368,3470786559,CA
3470786560,3470794751,US
3470794752,3470802943,PA
-3470802944,3470873288,US
-3470873289,3470873296,MX
-3470873297,3470875817,US
-3470875818,3470875827,JP
-3470875828,3470876402,US
-3470876403,3470876410,IN
-3470876411,3470884863,US
+3470802944,3470884863,US
3470884864,3470885887,HK
3470885888,3471057919,US
3471057920,3471058943,VE
@@ -152793,69 +82005,39 @@
3472392192,3472408575,CA
3472408576,3472571647,US
3472571648,3472571903,GH
-3472571904,3472990207,US
-3472990208,3472990463,AS
-3472990464,3473039359,US
+3472571904,3472721919,US
+3472723968,3473039359,US
3473039360,3473040639,BM
3473040640,3473040895,US
3473040896,3473041407,BM
-3473041408,3473096192,US
-3473096193,3473096447,PH
-3473096448,3473276927,US
+3473041408,3473043455,US
+3473047552,3473067007,US
+3473067008,3473068031,CA
+3473068032,3473276927,US
3473276928,3473342463,CA
-3473342464,3473375495,US
-3473375496,3473375503,NZ
-3473375504,3473381311,US
-3473381312,3473381343,DE
-3473381344,3473703551,US
-3473703552,3473703679,CA
-3473703680,3473755391,US
+3473342464,3473755391,US
3473755392,3473755647,HN
3473755648,3473765887,US
3473765888,3473766399,EC
-3473766400,3473786111,US
-3473786112,3473786127,PR
-3473786128,3473813567,US
-3473813568,3473813599,CA
-3473813600,3473901055,US
+3473766400,3473901055,US
3473901056,3473901311,EC
3473901312,3473917439,US
3473917440,3473917695,PR
-3473917696,3474046719,US
-3474046720,3474046975,MX
-3474046976,3474053119,US
+3473917696,3474053119,US
3474053120,3474055167,PE
3474055168,3474193407,US
3474193408,3474193663,PH
3474193664,3474193919,US
3474193920,3474194431,PH
-3474194432,3474362783,US
-3474362784,3474362815,AU
-3474362816,3474363647,US
-3474363648,3474363687,GB
-3474363688,3474363695,US
-3474363696,3474363711,GB
-3474363712,3474391039,US
+3474194432,3474391039,US
3474391040,3474456575,CA
-3474456576,3474463071,US
-3474463072,3474463087,GB
-3474463088,3474463183,US
-3474463184,3474463199,GB
-3474463200,3474463231,US
+3474456576,3474463231,US
3474463232,3474463487,GB
-3474463488,3474463791,US
-3474463792,3474463807,GB
-3474463808,3474463855,US
-3474463856,3474463871,GB
-3474463872,3474463903,US
-3474463904,3474463919,GB
-3474463920,3474464255,US
+3474463488,3474464255,US
3474464256,3474464767,GB
3474464768,3474548223,US
3474548224,3474548479,JP
-3474548480,3474623599,US
-3474623600,3474623615,CA
-3474623616,3475112191,US
+3474548480,3475112191,US
3475112192,3475113215,CA
3475113216,3475115007,US
3475115008,3475120127,CA
@@ -152865,241 +82047,66 @@
3475296462,3475296462,AE
3475296463,3475310847,US
3475310848,3475311103,DE
-3475311104,3475384615,US
-3475384616,3475384623,SV
-3475384624,3475384679,US
-3475384680,3475384687,CA
-3475384688,3475405743,US
-3475405744,3475405751,SV
-3475405752,3475589887,US
+3475311104,3475589887,US
3475589888,3475590143,EC
3475590144,3475670015,US
-3475670016,3475670047,AG
-3475670048,3475670079,KN
-3475670080,3475670175,AG
-3475670176,3475670207,KN
-3475670208,3475670271,AG
+3475670016,3475670271,AG
3475670272,3475670527,AI
3475670528,3475670783,LC
-3475670784,3475671039,DM
+3475670784,3475670847,DM
+3475670848,3475671039,AG
3475671040,3475681279,US
3475681280,3475685375,HN
-3475685376,3475752703,US
-3475752704,3475752959,CW
-3475752960,3475813423,US
-3475813424,3475813679,US
-3475813680,3475881983,US
-3475881984,3475882751,CA
-3475882752,3475882767,US
+3475685376,3475851263,US
+3475853312,3475882767,US
3475882768,3475882783,FR
3475882784,3475882799,US
3475882800,3475882815,FR
-3475882816,3475882831,US
-3475882832,3475882847,CA
-3475882848,3475882863,US
-3475882864,3475883007,CA
-3475883008,3475883039,US
-3475883040,3475883487,CA
-3475883488,3475883519,US
-3475883520,3475884031,CA
-3475884032,3475884287,US
-3475884288,3475884319,CA
-3475884320,3475884327,US
-3475884328,3475885119,CA
-3475885120,3475885135,US
-3475885136,3475888127,CA
-3475888128,3475888383,US
-3475888384,3475890175,CA
-3475890176,3475896319,US
+3475882816,3475896319,US
3475896320,3475896575,FR
-3475896576,3475896831,EU
-3475896832,3475897471,US
+3475896576,3475897471,US
3475897472,3475897503,FR
-3475897504,3475911167,US
-3475911168,3475911237,AP
+3475897504,3475911237,US
3475911238,3475911239,IN
-3475911240,3475911423,AP
-3475911424,3475912447,US
+3475911240,3475912447,US
3475912448,3475912703,IN
3475912704,3475921151,US
3475921152,3475921407,JP
3475921408,3475996671,US
3475996672,3476029439,CA
-3476029440,3476041567,US
-3476041568,3476041583,MX
-3476041584,3476076319,US
-3476076320,3476076351,JO
-3476076352,3476111359,US
+3476029440,3476111359,US
3476111360,3476111871,CA
-3476111872,3476265855,US
-3476265856,3476265919,EG
-3476265920,3476348927,US
+3476111872,3476348927,US
3476348928,3476349183,CA
-3476349184,3476422143,US
-3476422144,3476422655,AZ
-3476422656,3476447231,US
+3476349184,3476447231,US
3476447232,3476455423,CA
-3476455424,3476718616,US
-3476718617,3476718617,IN
-3476718618,3476720363,US
-3476720364,3476720367,LV
-3476720368,3476721159,US
-3476721160,3476721167,IT
-3476721168,3476721319,US
-3476721320,3476721327,GB
-3476721328,3476721679,US
-3476721680,3476721687,IT
-3476721688,3476721743,US
-3476721744,3476721759,CA
-3476721760,3476721823,US
-3476721824,3476721831,GB
-3476721832,3476721895,US
-3476721896,3476721903,CA
-3476721904,3476721911,AU
-3476721912,3476722191,US
-3476722192,3476722207,BE
-3476722208,3476722239,IT
-3476722240,3476722255,SA
-3476722256,3476722287,US
-3476722288,3476722319,IT
-3476722320,3476722495,US
-3476722496,3476722511,AU
-3476722512,3476722527,US
-3476722528,3476722543,AU
-3476722544,3476722591,US
-3476722592,3476722607,GB
-3476722608,3476725151,US
-3476725152,3476725183,AU
-3476725184,3476725215,ZA
-3476725216,3476725247,US
-3476725248,3476725255,CA
-3476725256,3476725295,US
-3476725296,3476725303,CA
-3476725304,3476725351,US
-3476725352,3476725359,NL
-3476725360,3476725367,US
-3476725368,3476725375,CA
-3476725376,3476725399,US
-3476725400,3476725415,CA
-3476725416,3476725423,US
-3476725424,3476725431,GB
-3476725432,3476726600,US
-3476726601,3476726604,SI
-3476726605,3476730319,US
-3476730320,3476730323,FR
-3476730324,3476730453,US
-3476730454,3476730454,FR
-3476730455,3476731909,US
-3476731910,3476731913,IN
-3476731914,3476732049,US
-3476732050,3476732053,IN
-3476732054,3476732073,US
-3476732074,3476732077,IN
-3476732078,3476732113,US
-3476732114,3476732117,IN
-3476732118,3476881407,US
+3476455424,3476881407,US
3476881408,3476946943,CA
-3476946944,3477311871,US
-3477311872,3477312255,US
-3477312256,3477312511,US
-3477312512,3477313023,US
-3477313024,3477313279,US
-3477313280,3477313535,US
-3477313536,3477542143,US
-3477542144,3477542175,IN
-3477542176,3478114303,US
+3476946944,3477542143,US
+3477542144,3477542399,IN
+3477542400,3478114303,US
3478114304,3478118399,PE
3478118400,3478192127,US
3478192128,3478257663,CA
-3478257664,3478261791,US
-3478261792,3478261823,SG
-3478261824,3478261855,US
-3478261856,3478261887,SG
-3478261888,3478261903,US
-3478261904,3478261935,SG
-3478261936,3478261951,AU
-3478261952,3478261959,HK
-3478261960,3478261983,SG
-3478261984,3478262271,US
-3478262272,3478262279,SG
-3478262280,3478262399,US
-3478262400,3478262415,SG
-3478262416,3478262655,US
-3478262656,3478262671,SG
-3478262672,3478262743,US
-3478262744,3478262751,SG
-3478262752,3478262775,US
-3478262776,3478262783,HK
-3478262784,3478274255,US
-3478274256,3478274303,GB
-3478274304,3478274399,US
-3478274400,3478274431,GB
-3478274432,3478274463,US
-3478274464,3478274495,GB
-3478274496,3478274559,US
-3478274560,3478274591,NL
-3478274592,3478274607,US
-3478274608,3478274623,GB
-3478274624,3478274639,US
-3478274640,3478274655,GB
-3478274656,3478274687,US
-3478274688,3478274719,GB
-3478274720,3478274823,US
+3478257664,3478274823,US
3478274824,3478274831,GB
-3478274832,3478274943,US
-3478274944,3478275007,GB
-3478275008,3478285407,US
-3478285408,3478285439,GB
-3478285440,3478285567,US
-3478285568,3478285607,GB
-3478285608,3478285615,US
-3478285616,3478285631,GB
-3478285632,3478294527,US
-3478294528,3478294543,GB
-3478294544,3478323391,US
-3478323392,3478323399,CA
-3478323400,3478331519,US
-3478331520,3478331647,GB
-3478331648,3478332991,US
-3478332992,3478332999,CA
-3478333000,3478347903,US
-3478347904,3478348031,MX
-3478348032,3478351951,US
-3478351952,3478351967,GB
-3478351968,3478352111,US
-3478352112,3478352119,GB
-3478352120,3478364159,US
-3478364160,3478364167,BR
-3478364168,3478364191,US
-3478364192,3478364223,BR
-3478364224,3478364255,US
-3478364256,3478364271,BR
-3478364272,3478372351,US
+3478274832,3478372351,US
3478372352,3478380543,MX
-3478380544,3479207935,US
+3478380544,3478831103,US
+3478847488,3479207935,US
3479207936,3479240703,CA
3479240704,3479568383,US
3479568384,3479633919,CA
-3479633920,3479789343,US
-3479789344,3479789360,UY
-3479789361,3479896063,US
+3479633920,3479896063,US
3479896064,3479956479,CA
3479956480,3479956735,US
3479956736,3479961599,CA
3479961600,3480223743,US
-3480223744,3480226415,CA
-3480226416,3480226423,US
-3480226424,3480251007,CA
-3480251008,3480251071,US
-3480251072,3480256511,CA
+3480223744,3480256511,CA
3480256512,3480284159,US
3480284160,3480284671,CA
3480284672,3480444927,US
-3480444928,3480446231,CA
-3480446232,3480446239,US
-3480446240,3480446335,CA
-3480446336,3480446463,US
-3480446464,3480449023,CA
+3480444928,3480449023,CA
3480453120,3480551423,US
3480551424,3480551679,JP
3480551680,3480551935,DE
@@ -153108,9 +82115,7 @@
3480552448,3480552703,CH
3480552704,3480552959,US
3480552960,3480553215,AT
-3480553216,3480553343,US
-3480553344,3480553470,MX
-3480553471,3480553471,US
+3480553216,3480553471,US
3480553472,3480553727,SG
3480553728,3480553983,HK
3480553984,3480554239,US
@@ -153134,18 +82139,13 @@
3480560896,3480561151,BR
3480561152,3480561919,US
3480561920,3480562175,JP
-3480562176,3480562751,US
-3480562752,3480562815,PR
-3480562816,3480564735,US
+3480562176,3480564735,US
3480564736,3480564991,DE
3480564992,3480567039,US
3480567040,3480567551,GB
3480567552,3480568319,US
3480568320,3480568575,HK
-3480568576,3480568671,IT
-3480568672,3480568703,GB
-3480568704,3480568831,FR
-3480568832,3480569599,US
+3480568576,3480569599,US
3480569600,3480569855,HK
3480569856,3480570111,US
3480570112,3480570367,FR
@@ -153153,43 +82153,24 @@
3480570624,3480570879,JP
3480570880,3480571391,CH
3480571392,3480571647,BE
-3480571648,3480571775,FI
-3480571776,3480573567,US
-3480573568,3480573631,IT
-3480573632,3480573695,DE
-3480573696,3480574527,US
-3480574528,3480574591,NL
-3480574592,3480575231,US
+3480571648,3480575231,US
3480575232,3480575487,IL
3480575488,3480575743,US
3480575744,3480577023,IT
-3480577024,3480579711,US
-3480579712,3480579775,BG
-3480579776,3480579839,AU
-3480579840,3480580607,US
+3480577024,3480580607,US
3480580608,3480580863,SE
3480580864,3480581119,DK
-3480581120,3480581247,US
-3480581248,3480581375,NL
-3480581376,3480581631,US
+3480581120,3480581631,US
3480581632,3480581887,CL
3480581888,3480582143,NO
3480582144,3480582399,US
3480582400,3480582655,RU
3480582656,3480583423,MX
-3480583424,3480585599,US
-3480585600,3480585663,ES
-3480585664,3480587647,US
-3480587648,3480587775,PT
-3480587776,3480588799,US
+3480583424,3480588799,US
3480588800,3480589055,SE
-3480589056,3480590463,US
-3480590464,3480590591,FR
-3480590592,3480591103,US
+3480589056,3480591103,US
3480591104,3480591359,ZA
-3480591360,3480591423,US
-3480591424,3480591487,GR
-3480591488,3480591615,US
+3480591360,3480591615,US
3480591616,3480592127,ID
3480592128,3480592383,NO
3480592384,3480592639,CH
@@ -153234,9 +82215,7 @@
3480607232,3480607487,IT
3480607488,3480610303,US
3480610304,3480610559,ES
-3480610560,3480610815,US
-3480610816,3480610943,AU
-3480610944,3480611327,US
+3480610560,3480611327,US
3480611328,3480611583,JP
3480611584,3480611839,MX
3480611840,3480612095,BR
@@ -153248,122 +82227,142 @@
3480907264,3480907775,FR
3480907776,3480968191,US
3480968192,3480968447,AU
-3480968448,3481164801,US
-3481164802,3481164802,US
-3481164803,3481165057,US
-3481165058,3481165058,US
-3481165059,3481165313,US
-3481165314,3481165314,US
-3481165315,3481165569,US
-3481165570,3481165570,US
-3481165571,3481182503,US
-3481182504,3481182511,CA
-3481182512,3481665535,US
+3480968448,3481176063,US
+3481178112,3481665535,US
3481665536,3481731071,CA
3481731072,3481812991,US
-3481812992,3481822063,CA
-3481822064,3481822079,US
-3481822080,3481829375,CA
+3481812992,3481829375,CA
3481829376,3481843455,US
3481843456,3481843711,GB
-3481843712,3481936895,US
-3481936896,3481937919,VE
-3481937920,3481951395,US
+3481843712,3481951395,US
3481951396,3481951399,GB
-3481951400,3481958143,US
-3481958144,3481958399,NL
-3481958400,3481964575,US
+3481951400,3481964575,US
3481964576,3481964579,IE
-3481964580,3481966719,US
-3481966720,3481966847,CH
-3481966848,3481973247,US
-3481973248,3481973503,CA
-3481973504,3481993215,US
-3481993216,3481993783,CA
-3481993784,3481993791,US
-3481993792,3481995279,CA
-3481995280,3481995287,US
-3481995288,3481995303,CA
-3481995304,3481995311,US
-3481995312,3481995519,CA
-3481995520,3481995527,US
-3481995528,3481995543,CA
-3481995544,3481995551,US
-3481995552,3481998591,CA
+3481964580,3481993791,US
+3481993792,3481993799,CA
+3481993800,3481994239,US
+3481994240,3481994751,CA
+3481994752,3481995007,US
+3481995008,3481995263,CA
+3481995264,3481996031,US
+3481996032,3481996287,CA
+3481996288,3481996543,US
+3481996544,3481997311,CA
+3481997312,3481997567,US
+3481997568,3481998591,CA
3481998592,3481998847,AG
-3481998848,3482014079,CA
-3482014080,3482014207,AG
-3482014208,3482018815,CA
-3482018816,3482019071,US
-3482019072,3482022783,CA
-3482022784,3482022847,US
-3482022848,3482043735,CA
-3482043736,3482043743,US
-3482043744,3482048191,CA
-3482048192,3482048255,US
-3482048256,3482058751,CA
-3482058752,3482583039,US
+3481998848,3481999103,US
+3481999104,3481999359,CA
+3481999360,3481999615,US
+3481999616,3482001663,CA
+3482001664,3482001919,US
+3482001920,3482002175,CA
+3482002176,3482002431,US
+3482002432,3482003455,CA
+3482003456,3482004479,US
+3482004480,3482006015,CA
+3482006016,3482007551,US
+3482007552,3482008063,CA
+3482008064,3482008319,US
+3482008320,3482011135,CA
+3482011136,3482011647,US
+3482011648,3482012159,CA
+3482012160,3482012927,US
+3482012928,3482013951,CA
+3482013952,3482014207,US
+3482014208,3482014719,CA
+3482014720,3482014863,US
+3482014864,3482014879,CA
+3482014880,3482016255,US
+3482016256,3482016767,CA
+3482016768,3482017023,US
+3482017024,3482017279,CA
+3482017280,3482017535,US
+3482017536,3482017791,CA
+3482017792,3482018047,US
+3482018048,3482018303,CA
+3482018304,3482018559,US
+3482018560,3482018815,CA
+3482018816,3482019327,US
+3482019328,3482019583,CA
+3482019584,3482020607,US
+3482020608,3482020863,CA
+3482020864,3482021119,US
+3482021120,3482022143,CA
+3482022144,3482022911,US
+3482022912,3482024703,CA
+3482024704,3482024959,US
+3482024960,3482025215,CA
+3482025216,3482025471,US
+3482025472,3482028543,CA
+3482028544,3482028799,US
+3482028800,3482029311,CA
+3482029312,3482029567,US
+3482029568,3482032895,CA
+3482032896,3482033151,US
+3482033152,3482033663,CA
+3482033664,3482033919,US
+3482033920,3482034431,CA
+3482034432,3482035199,US
+3482035200,3482035711,CA
+3482035712,3482035967,US
+3482035968,3482036223,CA
+3482036224,3482036479,US
+3482036480,3482036735,CA
+3482036736,3482036991,US
+3482036992,3482037247,CA
+3482037248,3482037759,US
+3482037760,3482038015,CA
+3482038016,3482038271,US
+3482038272,3482038783,CA
+3482038784,3482039039,US
+3482039040,3482039295,CA
+3482039296,3482039551,US
+3482039552,3482040319,CA
+3482040320,3482041087,US
+3482041088,3482041343,CA
+3482041344,3482041599,US
+3482041600,3482042367,CA
+3482042368,3482043903,US
+3482043904,3482044927,CA
+3482044928,3482045183,US
+3482045184,3482045695,CA
+3482045696,3482046207,US
+3482046208,3482046463,CA
+3482046464,3482046975,US
+3482046976,3482047487,CA
+3482047488,3482047743,US
+3482047744,3482047999,CA
+3482048000,3482048511,US
+3482048512,3482048767,CA
+3482048768,3482049791,US
+3482049792,3482050559,CA
+3482050560,3482051327,US
+3482051328,3482051583,CA
+3482051584,3482051839,US
+3482051840,3482052863,CA
+3482052864,3482053631,US
+3482053632,3482054655,CA
+3482054656,3482058239,US
+3482058240,3482058495,CA
+3482058496,3482583039,US
3482583040,3482632191,CA
3482632192,3482775551,US
3482775552,3482779647,PR
3482779648,3482910719,US
3482910720,3482927103,CA
-3482927104,3483239423,US
-3483239424,3483239679,US
-3483239680,3483240703,US
-3483240704,3483240959,US
-3483240960,3483247359,US
-3483247360,3483247871,US
-3483247872,3483248639,US
-3483248640,3483248895,US
-3483248896,3483296004,US
-3483296005,3483296005,BE
-3483296006,3483435007,US
+3482927104,3483435007,US
3483435008,3483533311,CA
-3483533312,3483552511,US
-3483552512,3483552607,GB
-3483552608,3483631615,US
+3483533312,3483631615,US
3483631616,3483697151,CA
-3483697152,3483791375,US
-3483791376,3483791407,PR
-3483791408,3483791423,US
-3483791424,3483791431,PR
-3483791432,3483791471,US
-3483791472,3483791479,PR
-3483791480,3483791495,US
-3483791496,3483791503,PR
-3483791504,3483791511,US
-3483791512,3483791519,PR
-3483791520,3483791535,US
-3483791536,3483791543,PR
-3483791544,3483791551,US
-3483791552,3483791599,PR
-3483791600,3483791607,US
-3483791608,3483791623,PR
+3483697152,3483791359,US
+3483791360,3483791623,PR
3483791624,3483791631,US
-3483791632,3483791639,PR
-3483791640,3483791647,US
-3483791648,3483791663,PR
-3483791664,3483791679,US
-3483791680,3483791695,PR
-3483791696,3483791743,US
-3483791744,3483791751,PR
-3483791752,3483791767,US
-3483791768,3483791799,PR
-3483791800,3483791823,US
-3483791824,3483791831,PR
-3483791832,3483791855,US
-3483791856,3483791887,PR
-3483791888,3483791895,US
-3483791896,3483791951,PR
-3483791952,3483791967,US
-3483791968,3483791983,PR
-3483791984,3483791999,US
-3483792000,3483792015,PR
-3483792016,3483792031,IL
-3483792032,3483792047,PR
-3483792048,3483792079,US
-3483792080,3483795455,PR
+3483791632,3483791815,PR
+3483791816,3483791823,US
+3483791824,3483793919,PR
+3483793920,3483794431,US
+3483794432,3483795455,PR
3483795456,3483828223,US
3483828224,3483836415,CA
3483836416,3483877375,US
@@ -153377,126 +82376,67 @@
3484321792,3484322047,PR
3484322048,3484323839,US
3484326912,3484327423,US
-3484327936,3484419583,US
-3484419584,3484419839,A2
-3484419840,3484419847,DM
-3484419848,3484419855,US
-3484419856,3484419967,DM
-3484419968,3484419983,US
-3484419984,3484420031,DM
-3484420032,3484424255,US
-3484424256,3484424287,DM
-3484424288,3484424319,US
-3484424320,3484424447,DM
-3484424448,3484437503,US
+3484331008,3484437503,US
3484437504,3484442623,GB
3484442624,3484450815,US
3484450816,3484451839,CA
-3484451840,3484451871,US
-3484451872,3484453695,CA
-3484453696,3484453759,US
-3484453760,3484455263,CA
-3484455264,3484455295,US
-3484455296,3484455807,CA
-3484455808,3484455871,US
-3484455872,3484456191,CA
+3484451840,3484452095,US
+3484452096,3484453631,CA
+3484453632,3484453887,US
+3484453888,3484455167,CA
+3484455168,3484455423,US
+3484455424,3484455679,CA
+3484455680,3484455935,US
+3484455936,3484456191,CA
3484456192,3484456703,US
3484456704,3484457727,CA
3484457728,3484457983,US
-3484457984,3484459791,CA
-3484459792,3484459807,US
-3484459808,3484459823,CA
-3484459824,3484459839,US
-3484459840,3484459855,CA
-3484459856,3484459871,US
-3484459872,3484459887,CA
-3484459888,3484459919,US
-3484459920,3484459967,CA
-3484459968,3484459999,US
-3484460000,3484460015,CA
-3484460016,3484460031,US
-3484460032,3484460287,CA
-3484460288,3484460543,US
-3484460544,3484460575,CA
-3484460576,3484460591,US
-3484460592,3484460703,CA
-3484460704,3484460719,US
-3484460720,3484460783,CA
-3484460784,3484460799,US
-3484460800,3484461079,CA
-3484461080,3484461095,US
-3484461096,3484461103,CA
-3484461104,3484461111,US
-3484461112,3484461119,CA
-3484461120,3484461135,US
-3484461136,3484461143,CA
-3484461144,3484461199,US
-3484461200,3484461231,CA
-3484461232,3484461263,US
-3484461264,3484461271,CA
-3484461272,3484461279,US
-3484461280,3484461375,CA
-3484461376,3484461439,US
-3484461440,3484461503,CA
-3484461504,3484461631,US
-3484461632,3484461759,CA
-3484461760,3484461823,US
-3484461824,3484462103,CA
-3484462104,3484462143,US
-3484462144,3484462159,CA
-3484462160,3484462175,US
-3484462176,3484462207,CA
-3484462208,3484462215,US
-3484462216,3484462279,CA
-3484462280,3484462295,US
-3484462296,3484462975,CA
-3484462976,3484463039,US
-3484463040,3484463151,CA
-3484463152,3484463183,US
-3484463184,3484464143,CA
-3484464144,3484464159,US
-3484464160,3484464175,CA
-3484464176,3484464191,US
-3484464192,3484464223,CA
-3484464224,3484464287,US
-3484464288,3484464303,CA
-3484464304,3484464319,US
+3484457984,3484458751,CA
+3484458752,3484459007,US
+3484459008,3484459775,CA
+3484459776,3484460687,US
+3484460688,3484460703,CA
+3484460704,3484460735,US
+3484460736,3484460751,CA
+3484460752,3484460799,US
+3484460800,3484461055,CA
+3484461056,3484461823,US
+3484461824,3484462079,CA
+3484462080,3484462335,US
+3484462336,3484462591,CA
+3484462592,3484463359,US
+3484463360,3484464127,CA
+3484464128,3484464319,US
3484464320,3484464335,CA
-3484464336,3484464383,US
-3484464384,3484464703,CA
-3484464704,3484464735,US
-3484464736,3484465151,CA
-3484465152,3484465407,US
-3484465408,3484466431,CA
+3484464336,3484464895,US
+3484464896,3484465151,CA
+3484465152,3484465663,US
+3484465664,3484465919,CA
+3484465920,3484466175,US
+3484466176,3484466431,CA
3484466432,3484466687,US
-3484466688,3484468287,CA
-3484468288,3484468479,US
-3484468480,3484469119,CA
-3484469120,3484469247,US
+3484466688,3484468223,CA
+3484468224,3484468479,US
+3484468480,3484468991,CA
+3484468992,3484469247,US
3484469248,3484469759,CA
-3484469760,3484469791,US
-3484469792,3484469887,CA
-3484469888,3484469951,US
-3484469952,3484470527,CA
-3484470528,3484471295,US
-3484471296,3484471551,CA
-3484471552,3484471807,US
-3484471808,3484472135,CA
-3484472136,3484472167,US
-3484472168,3484472183,CA
-3484472184,3484472199,US
-3484472200,3484472223,CA
-3484472224,3484472279,US
-3484472280,3484473087,CA
-3484473088,3484473151,US
-3484473152,3484473599,CA
-3484473600,3484473727,US
-3484473728,3484473791,CA
-3484473792,3484473855,US
-3484473856,3484477183,CA
+3484469760,3484470015,US
+3484470016,3484470527,CA
+3484470528,3484471807,US
+3484471808,3484472063,CA
+3484472064,3484472319,US
+3484472320,3484472575,CA
+3484472576,3484472967,US
+3484472968,3484472975,CA
+3484472976,3484473343,US
+3484473344,3484473599,CA
+3484473600,3484473855,US
+3484473856,3484474879,CA
+3484474880,3484475135,US
+3484475136,3484477183,CA
3484477184,3484477695,US
-3484477696,3484478207,CA
-3484478208,3484478719,US
+3484477696,3484477951,CA
+3484477952,3484478719,US
3484478720,3484478975,CA
3484478976,3484479231,US
3484479232,3484479487,CA
@@ -153504,64 +82444,39 @@
3484479744,3484479999,CA
3484480000,3484480255,US
3484480256,3484481279,CA
-3484481280,3484481343,US
-3484481344,3484482047,CA
+3484481280,3484481535,US
+3484481536,3484482047,CA
3484482048,3484482559,US
3484482560,3484483583,CA
-3484483584,3484604039,US
-3484604040,3484604047,AU
-3484604048,3484647423,US
+3484483584,3484647423,US
3484647424,3484663807,CA
-3484663808,3484746815,US
-3484746816,3484746943,GB
-3484746944,3484762111,US
-3484762112,3484775743,CA
-3484775744,3484775775,US
-3484775776,3484777663,CA
-3484777664,3484777695,US
-3484777696,3484778495,CA
+3484663808,3484762111,US
+3484762112,3484778495,CA
3484778496,3484884991,US
3484884992,3484893183,CA
3484893184,3485220863,US
3485220864,3485229055,CA
-3485229056,3485290463,US
-3485290464,3485290479,GB
-3485290480,3485327359,US
+3485229056,3485327359,US
3485327360,3485335551,CA
-3485335552,3485458847,US
-3485458848,3485458863,FR
-3485458864,3485460559,US
-3485460560,3485460575,IN
-3485460576,3485462527,US
+3485335552,3485442047,US
+3485446144,3485462527,US
3485462528,3485464575,VC
3485464576,3485466623,LC
3485466624,3485597695,US
-3485597696,3485671583,CA
-3485671584,3485671615,US
-3485671616,3485695999,CA
+3485597696,3485672543,CA
+3485672544,3485672551,US
+3485672552,3485695999,CA
3485696000,3485721056,US
3485721057,3485721057,AE
-3485721058,3485724671,US
-3485724672,3485728767,US
-3485728768,3485885127,US
-3485885128,3485885141,CA
-3485885142,3485887747,US
-3485887748,3485887777,AU
-3485887778,3485891519,US
-3485891520,3485891583,DE
-3485891584,3485959423,US
+3485721058,3485959423,US
3485959424,3485960191,CA
3485960192,3486023679,US
3486023680,3486031871,CA
3486031872,3486269439,US
3486269440,3486285823,JM
-3486285824,3486287359,PR
-3486287360,3486287487,US
-3486287488,3486302207,PR
+3486285824,3486302207,PR
3486302208,3486310399,CA
-3486310400,3486501951,US
-3486501952,3486501967,DE
-3486501968,3486580735,US
+3486310400,3486580735,US
3486580736,3486580991,GB
3486580992,3486581503,DE
3486581504,3486581759,TW
@@ -153586,17 +82501,12 @@
3486587648,3486587903,CL
3486587904,3486588415,GB
3486588416,3486588671,FR
-3486588672,3486589119,US
-3486589120,3486589151,NL
-3486589152,3486589247,US
-3486589248,3486589279,ZA
-3486589280,3486589951,US
+3486588672,3486589951,US
3486589952,3486590207,IT
3486590208,3486590463,US
3486590464,3486591743,GB
3486591744,3486591999,CH
-3486592000,3486592063,FI
-3486592064,3486592255,US
+3486592000,3486592255,US
3486592256,3486592511,NL
3486592512,3486593023,NO
3486593024,3486593279,NL
@@ -153604,27 +82514,19 @@
3486593792,3486594047,FR
3486594048,3486594303,DE
3486594304,3486594559,BE
-3486594560,3486594719,US
-3486594720,3486594751,LU
-3486594752,3486594783,GB
-3486594784,3486594815,US
-3486594816,3486594943,AR
-3486594944,3486595071,US
+3486594560,3486595071,US
3486595072,3486595327,DK
3486595328,3486595583,ID
3486595584,3486595839,PR
3486595840,3486596095,DK
3486596096,3486596351,NL
3486596352,3486596607,NO
-3486596608,3486596735,US
-3486596736,3486596799,CH
-3486596800,3486596863,FR
+3486596608,3486596863,US
3486596864,3486597119,GB
3486597120,3486597375,IE
3486597376,3486597631,IT
3486597632,3486597887,GB
-3486597888,3486598591,US
-3486598592,3486598655,FR
+3486597888,3486598655,US
3486598656,3486598911,BR
3486598912,3486599167,NO
3486599168,3486599423,SE
@@ -153633,30 +82535,16 @@
3486599936,3486600447,BR
3486600448,3486601215,US
3486601216,3486601471,BE
-3486601472,3486601535,TR
-3486601536,3486601727,US
+3486601472,3486601727,US
3486601728,3486601983,BE
3486601984,3486602239,NZ
-3486602240,3486602431,US
-3486602432,3486602495,CO
-3486602496,3486603007,US
+3486602240,3486603007,US
3486603008,3486603263,SG
-3486603264,3486603295,US
-3486603296,3486603327,BR
-3486603328,3486603391,CL
-3486603392,3486603407,US
-3486603408,3486603423,AR
-3486603424,3486603455,US
-3486603456,3486603519,AR
+3486603264,3486603519,US
3486603520,3486603775,JP
3486603776,3486604287,US
3486604288,3486604543,BE
-3486604544,3486604575,US
-3486604576,3486604607,SG
-3486604608,3486604615,MY
-3486604616,3486604671,US
-3486604672,3486604735,CO
-3486604736,3486605055,US
+3486604544,3486605055,US
3486605056,3486605311,ES
3486605312,3486605567,NL
3486605568,3486606079,US
@@ -153675,16 +82563,12 @@
3486610176,3486610431,US
3486610432,3486610687,SE
3486610688,3486610943,NL
-3486610944,3486611199,US
-3486611200,3486611215,BR
-3486611216,3486611455,US
+3486610944,3486611455,US
3486611456,3486611711,SG
-3486611712,3486611775,EC
-3486611776,3486611967,US
+3486611712,3486611967,US
3486611968,3486612223,HK
3486612224,3486612479,SG
-3486612480,3486612607,US
-3486612608,3486612735,FR
+3486612480,3486612735,US
3486612736,3486612991,DE
3486612992,3486613247,US
3486613248,3486613759,GB
@@ -153695,15 +82579,9 @@
3486614784,3486615039,FR
3486615040,3486615295,BE
3486615296,3486615551,PH
-3486615552,3486615871,US
-3486615872,3486615903,LU
-3486615904,3486615935,US
-3486615936,3486615967,CH
-3486615968,3486616319,US
+3486615552,3486616319,US
3486616320,3486616831,NO
-3486616832,3486617215,US
-3486617216,3486617343,SE
-3486617344,3486617599,US
+3486616832,3486617599,US
3486617600,3486617855,CH
3486617856,3486618111,AU
3486618112,3486618367,NO
@@ -153733,20 +82611,13 @@
3486624256,3486624511,SG
3486624512,3486624767,SE
3486624768,3486625023,ES
-3486625024,3486625055,US
-3486625056,3486625087,MX
-3486625088,3486625151,US
-3486625152,3486625183,MX
-3486625184,3486625279,US
+3486625024,3486625279,US
3486625280,3486625535,SE
3486625536,3486625791,NO
3486625792,3486626047,NL
3486626048,3486626303,FI
3486626304,3486626559,IL
-3486626560,3486626567,CH
-3486626568,3486626591,US
-3486626592,3486626623,FI
-3486626624,3486627071,US
+3486626560,3486627071,US
3486627072,3486627327,JP
3486627328,3486627583,US
3486627584,3486627839,BE
@@ -153765,9 +82636,7 @@
3486632704,3486632959,JP
3486632960,3486633215,IT
3486633216,3486633471,GB
-3486633472,3486633599,US
-3486633600,3486633727,CN
-3486633728,3486633983,US
+3486633472,3486633983,US
3486633984,3486634239,HK
3486634240,3486634495,US
3486634496,3486634751,KR
@@ -153784,9 +82653,7 @@
3486637312,3486637823,BE
3486637824,3486638335,SE
3486638336,3486638591,FR
-3486638592,3486638623,US
-3486638624,3486638639,CN
-3486638640,3486638847,US
+3486638592,3486638847,US
3486638848,3486639103,DK
3486639104,3486639359,BE
3486639360,3486639615,SG
@@ -153797,202 +82664,45 @@
3486642176,3486642431,BR
3486642432,3486642687,PT
3486642688,3486642943,DK
-3486642944,3486646015,US
-3486646016,3486646143,JP
-3486646144,3486646271,US
+3486642944,3486646271,US
3486646272,3486662655,CA
-3486662656,3486677055,US
-3486677056,3486677071,CA
-3486677072,3486688255,US
+3486662656,3486688255,US
3486688256,3486688511,GB
3486688512,3486699519,US
3486699520,3486699775,CA
-3486699776,3486700399,US
-3486700400,3486700407,CA
-3486700408,3486700439,US
-3486700440,3486700447,IT
-3486700448,3486707519,US
-3486707520,3486707535,SE
-3486707536,3486707559,US
-3486707560,3486707567,HN
-3486707568,3487039487,US
+3486699776,3486702591,US
+3486702592,3486702847,CA
+3486702848,3487039487,US
3487039488,3487105023,CA
3487105024,3487175935,US
3487175936,3487176191,GB
-3487176192,3487178111,US
-3487178112,3487178239,GB
+3487176192,3487177983,US
+3487177984,3487178239,GB
3487178240,3487181359,US
3487181360,3487181375,GB
3487181376,3487189247,US
3487189248,3487189503,DK
-3487189504,3487194111,US
-3487194112,3487194367,GB
-3487194368,3487197183,US
+3487189504,3487197183,US
3487197184,3487197439,DK
3487197440,3487216383,US
3487216384,3487216639,SE
3487216640,3487236095,US
-3487236096,3487238023,CA
-3487238024,3487238024,CA
-3487238025,3487301631,CA
-3487301632,3487559719,US
-3487559720,3487559727,AU
-3487559728,3487559839,US
-3487559840,3487559871,AU
-3487559872,3487560167,US
-3487560168,3487560183,AU
-3487560184,3487561471,US
+3487236096,3487301631,CA
+3487301632,3487561471,US
3487561472,3487561727,AU
3487561728,3487703039,US
3487703040,3487703073,DE
-3487703074,3487703074,A2
+3487703074,3487703074,US
3487703075,3487704849,DE
3487704850,3487704850,NG
3487704851,3487704851,DE
3487704852,3487704853,NG
3487704854,3487705855,DE
-3487705856,3487706367,A2
+3487705856,3487706367,US
3487706368,3487706623,RU
-3487706624,3487707135,A2
-3487707136,3487725567,US
+3487706624,3487725567,US
3487725568,3487727615,TW
-3487727616,3487735807,US
-3487735808,3487735815,DM
-3487735816,3487735839,US
-3487735840,3487735847,DM
-3487735848,3487736327,US
-3487736328,3487736335,DM
-3487736336,3487736351,US
-3487736352,3487736367,DM
-3487736368,3487736431,US
-3487736432,3487736447,DM
-3487736448,3487736559,US
-3487736560,3487736567,DM
-3487736568,3487736575,US
-3487736576,3487736583,DM
-3487736584,3487736591,US
-3487736592,3487736623,DM
-3487736624,3487736687,US
-3487736688,3487736703,DM
-3487736704,3487736719,US
-3487736720,3487736735,DM
-3487736736,3487736751,US
-3487736752,3487736767,DM
-3487736768,3487736879,US
-3487736880,3487736895,DM
-3487736896,3487736911,US
-3487736912,3487736919,DM
-3487736920,3487736927,US
-3487736928,3487736943,DM
-3487736944,3487736951,US
-3487736952,3487736975,DM
-3487736976,3487736991,US
-3487736992,3487737023,DM
-3487737024,3487737855,US
-3487737856,3487737887,DM
-3487737888,3487737919,US
-3487737920,3487737935,DM
-3487737936,3487737951,US
-3487737952,3487737967,DM
-3487737968,3487738239,US
-3487738240,3487738247,DM
-3487738248,3487738287,US
-3487738288,3487738303,DM
-3487738304,3487738495,US
-3487738496,3487738503,DM
-3487738504,3487738511,US
-3487738512,3487738527,DM
-3487738528,3487738575,US
-3487738576,3487738607,DM
-3487738608,3487738623,US
-3487738624,3487738639,DM
-3487738640,3487738655,US
-3487738656,3487738687,DM
-3487738688,3487738751,US
-3487738752,3487738759,DM
-3487738760,3487738767,US
-3487738768,3487738783,DM
-3487738784,3487738799,US
-3487738800,3487738823,DM
-3487738824,3487738863,US
-3487738864,3487738879,DM
-3487738880,3487738959,US
-3487738960,3487738975,DM
-3487738976,3487739007,US
-3487739008,3487739015,DM
-3487739016,3487739039,US
-3487739040,3487739071,DM
-3487739072,3487739183,US
-3487739184,3487739215,DM
-3487739216,3487739231,US
-3487739232,3487739271,DM
-3487739272,3487739295,US
-3487739296,3487739303,DM
-3487739304,3487739311,US
-3487739312,3487739327,DM
-3487739328,3487739351,US
-3487739352,3487739359,DM
-3487739360,3487739455,US
-3487739456,3487739471,DM
-3487739472,3487739487,US
-3487739488,3487739503,DM
-3487739504,3487739519,US
-3487739520,3487739527,DM
-3487739528,3487739543,US
-3487739544,3487739551,DM
-3487739552,3487739567,US
-3487739568,3487739583,DM
-3487739584,3487739647,US
-3487739648,3487739655,DM
-3487739656,3487739663,US
-3487739664,3487739735,DM
-3487739736,3487739743,US
-3487739744,3487739903,DM
-3487739904,3487740271,US
-3487740272,3487740287,DM
-3487740288,3487740303,US
-3487740304,3487740319,DM
-3487740320,3487740367,US
-3487740368,3487740415,DM
-3487740416,3487740431,US
-3487740432,3487740527,DM
-3487740528,3487740543,US
-3487740544,3487740607,DM
-3487740608,3487740623,US
-3487740624,3487740671,DM
-3487740672,3487740687,US
-3487740688,3487740751,DM
-3487740752,3487740767,US
-3487740768,3487740783,DM
-3487740784,3487740791,US
-3487740792,3487740927,DM
-3487740928,3487740951,US
-3487740952,3487740991,DM
-3487740992,3487741023,US
-3487741024,3487741183,DM
-3487741184,3487741207,US
-3487741208,3487741407,DM
-3487741408,3487741423,US
-3487741424,3487741439,DM
-3487741440,3487741455,US
-3487741456,3487741471,DM
-3487741472,3487741479,US
-3487741480,3487741503,DM
-3487741504,3487741519,US
-3487741520,3487741551,DM
-3487741552,3487741631,US
-3487741632,3487741639,DM
-3487741640,3487741647,US
-3487741648,3487741663,DM
-3487741664,3487741679,US
-3487741680,3487741695,DM
-3487741696,3487741711,US
-3487741712,3487741735,DM
-3487741736,3487741759,US
-3487741760,3487741911,DM
-3487741912,3487741919,US
-3487741920,3487741951,DM
-3487741952,3487766527,US
+3487727616,3487766527,US
3487766528,3487768575,CA
3487768576,3487842303,US
3487842304,3487858687,CA
@@ -154006,50 +82716,47 @@
3487969792,3487970047,KW
3487970048,3488014335,US
3488014336,3488022527,CA
-3488022528,3488071679,US
+3488022528,3488049151,US
+3488051200,3488065535,US
+3488067584,3488071679,US
3488071680,3488072703,CA
3488072704,3488079871,US
3488079872,3488083967,CA
3488083968,3488088063,US
3488088064,3488104447,IL
3488104448,3488112639,US
-3488112640,3488113839,CA
-3488113840,3488113847,US
-3488113848,3488116863,CA
-3488116864,3488116871,US
-3488116872,3488118559,CA
-3488118560,3488118567,US
-3488118568,3488120831,CA
-3488120832,3488291103,US
-3488291104,3488291135,IN
-3488291136,3488291295,US
-3488291296,3488291327,IN
-3488291328,3488291439,US
-3488291440,3488291447,IN
-3488291448,3488291519,US
-3488291520,3488291647,IN
-3488291648,3488300287,US
-3488300288,3488300543,A2
-3488300544,3488350207,US
-3488350208,3488361215,CA
-3488361216,3488361471,US
-3488361472,3488415743,CA
+3488112640,3488120831,CA
+3488120832,3488307711,US
+3488307712,3488308223,IN
+3488308224,3488350207,US
+3488350208,3488415743,CA
3488415744,3488615935,US
3488615936,3488616191,AU
-3488616192,3488718847,US
-3488718848,3488719615,A2
-3488719616,3488720895,US
-3488720896,3488725503,A2
-3488725504,3488725759,US
-3488725760,3488727039,A2
-3488727040,3488901887,US
+3488616192,3488901887,US
3488901888,3488902143,CA
-3488902144,3488940031,US
+3488902144,3488909311,US
+3488911360,3488940031,US
3488940032,3488956415,CA
3488956416,3488989183,US
3488989184,3489005567,CA
3489005568,3489136639,US
-3489136640,3489267711,MX
+3489136640,3489153535,MX
+3489153536,3489154047,HN
+3489154048,3489155583,MX
+3489155584,3489156095,AR
+3489156608,3489157119,MX
+3489157632,3489158399,MX
+3489158400,3489158655,AR
+3489159168,3489160191,MX
+3489160192,3489161215,AR
+3489161216,3489163775,MX
+3489164288,3489166591,MX
+3489166848,3489167615,MX
+3489167872,3489168127,MX
+3489168384,3489169407,AR
+3489169408,3489185791,MX
+3489185792,3489193983,CL
+3489193984,3489267711,MX
3489267712,3489341439,US
3489341440,3489345535,CA
3489345536,3489398783,US
@@ -154057,43 +82764,25 @@
3489399040,3489464319,US
3489464320,3489529855,CA
3489529856,3489562623,US
-3489562624,3489566719,JM
-3489566720,3489575423,US
-3489575424,3489575551,CN
-3489575552,3489575679,US
-3489575680,3489575807,CN
-3489575808,3489575935,US
-3489575936,3489577008,CN
-3489577009,3489577215,US
+3489563136,3489563391,JM
+3489566720,3489575935,US
+3489575936,3489576959,CN
+3489576960,3489577215,US
3489577216,3489578239,CN
-3489578240,3489665481,US
-3489665482,3489665482,PR
-3489665483,3489673471,US
-3489673472,3489673727,PR
-3489673728,3489717759,US
+3489578240,3489685503,US
+3489685504,3489687551,BB
+3489687552,3489717759,US
3489717760,3489718015,PR
3489718016,3489718271,US
3489718272,3489718527,DM
3489718528,3489719039,LC
-3489719040,3489719191,AG
-3489719192,3489719199,VG
-3489719200,3489719551,AG
+3489719040,3489719551,AG
3489719552,3489719807,VG
3489719808,3489720063,DM
3489720064,3489720319,LC
3489720320,3489738751,US
3489738752,3489740799,PH
-3489740800,3489741783,US
-3489741784,3489741791,CA
-3489741792,3489749503,US
-3489749504,3489749519,CA
-3489749520,3489756119,US
-3489756120,3489756127,DE
-3489756128,3489761743,US
-3489761744,3489761759,CA
-3489761760,3489774831,US
-3489774832,3489774839,GB
-3489774840,3489775103,US
+3489740800,3489775103,US
3489775104,3489775359,BO
3489775360,3489969151,US
3489969152,3489969663,PR
@@ -154105,197 +82794,99 @@
3490265344,3490267135,CO
3490267136,3490488319,US
3490488320,3490489343,PR
-3490489344,3490653871,US
-3490653872,3490653887,CA
-3490653888,3490702847,US
-3490702848,3490703103,AS
-3490703104,3490703615,US
+3490489344,3490703615,US
3490703616,3490703871,PR
-3490703872,3490732431,US
-3490732432,3490732447,CA
-3490732448,3490786047,US
+3490703872,3490786047,US
3490786048,3490786303,PR
3490786304,3490879231,US
3490879232,3490879487,PR
-3490879488,3490974719,US
-3490974720,3490975743,PR
-3490975744,3491219183,US
-3491219184,3491219191,PR
-3491219192,3491226687,US
-3491226688,3491226719,CA
-3491226720,3491351455,US
-3491351456,3491351463,HR
-3491351464,3491358183,US
-3491358184,3491358191,PR
-3491358192,3491381247,US
+3490879488,3491381247,US
3491381248,3491389439,BM
3491389440,3491476991,US
3491476992,3491478527,VI
-3491478528,3491478591,US
-3491478592,3491478599,PR
-3491478600,3491506631,US
-3491506632,3491506639,DK
-3491506640,3491508223,US
-3491508224,3491512319,CA
-3491512320,3491637247,US
+3491478528,3491637247,US
3491637248,3491637759,CO
3491637760,3491651583,US
-3491651584,3491659775,VI
-3491659776,3491705023,US
-3491705024,3491705039,SG
-3491705040,3491712927,US
-3491712928,3491712959,TW
-3491712960,3491743743,US
+3491651584,3491654655,VI
+3491654656,3491654911,US
+3491654912,3491659775,VI
+3491659776,3491743743,US
3491743744,3491745791,CO
-3491745792,3491764783,US
-3491764784,3491764791,PR
-3491764792,3491826687,US
-3491826688,3491826943,CW
-3491826944,3491907591,US
-3491907592,3491907592,US
-3491907593,3491921663,US
-3491921664,3491921919,PR
-3491921920,3491951495,US
-3491951496,3491951503,GB
-3491951504,3491951519,US
-3491951520,3491951527,GB
-3491951528,3491968423,US
-3491968424,3491968431,PR
-3491968432,3491968447,AF
-3491968448,3491969023,US
+3491745792,3491969023,US
3491969024,3491970047,PR
-3491970048,3491971607,US
-3491971608,3491971615,IT
-3491971616,3491971751,US
-3491971752,3491971759,AU
-3491971760,3491971951,US
-3491971952,3491971967,HK
-3491971968,3491973151,US
-3491973152,3491973159,VE
-3491973160,3492005375,US
-3492005376,3492005391,DK
-3492005392,3492005439,US
-3492005440,3492005447,DK
-3492005448,3492005463,US
-3492005464,3492005487,AU
-3492005488,3492151295,US
+3491970048,3492151295,US
3492151296,3492167679,CA
-3492167680,3492188799,US
-3492188800,3492188831,CH
-3492188832,3492472039,US
-3492472040,3492472047,GB
-3492472048,3492669695,US
-3492669696,3492671487,PA
-3492671488,3492710167,US
-3492710168,3492710175,CA
-3492710176,3492710191,US
-3492710192,3492710199,CA
-3492710200,3492710223,US
-3492710224,3492710239,CA
-3492710240,3492710255,US
-3492710256,3492710263,CA
-3492710264,3492710375,US
-3492710376,3492710383,CA
-3492710384,3492712191,US
-3492712192,3492712447,CA
-3492712448,3492712511,US
-3492712512,3492712543,CA
-3492712544,3492730415,US
-3492730416,3492730431,CA
-3492730432,3492795775,US
-3492795776,3492795903,AR
-3492795904,3492815359,US
-3492815360,3492815487,GB
-3492815488,3492827391,US
-3492827392,3492827423,CA
-3492827424,3492827431,US
-3492827432,3492827439,DE
-3492827440,3492827455,AU
-3492827456,3492827519,US
-3492827520,3492827647,AU
-3492827648,3492827903,US
-3492827904,3492827967,AU
-3492827968,3492845823,US
+3492167680,3492669951,US
+3492669952,3492671487,PA
+3492671488,3492812759,US
+3492812760,3492812763,JP
+3492812764,3492845823,US
3492845824,3492846079,CH
-3492846080,3492869631,US
-3492869632,3492870143,BR
-3492870144,3492886527,US
+3492846080,3492867071,US
+3492867072,3492867327,FR
+3492867328,3492868607,US
+3492868608,3492868863,MX
+3492868864,3492869631,US
+3492869632,3492869887,BR
+3492869888,3492877954,US
+3492877955,3492877955,CA
+3492877956,3492886527,US
3492886528,3492886559,GB
3492886560,3492886591,US
3492886592,3492886783,GB
-3492886784,3492893951,US
-3492893952,3492893953,GB
-3492893954,3492893954,US
-3492893955,3492893985,GB
-3492893986,3492893986,US
-3492893987,3492894207,GB
-3492894208,3492894975,US
+3492886784,3492894975,US
3492894976,3492895231,BE
-3492895232,3492897023,US
-3492897024,3492897279,GB
-3492897280,3492905983,US
-3492905984,3492906239,FR
-3492906240,3492906495,US
-3492906496,3492906751,EU
-3492906752,3492912127,US
+3492895232,3492912127,US
3492912128,3492912151,GB
3492912152,3492912159,US
3492912160,3492912383,GB
-3492912384,3492917247,US
+3492912384,3492913663,US
+3492913664,3492913919,CA
+3492913920,3492917247,US
3492917248,3492917503,VI
-3492917504,3492924991,US
-3492924992,3492925007,DE
-3492925008,3492926079,US
-3492926080,3492926095,EU
-3492926096,3492934111,US
+3492917504,3492923391,US
+3492923392,3492923647,GB
+3492923648,3492933375,US
+3492933376,3492933376,CA
+3492933377,3492933377,CH
+3492933378,3492933631,CA
+3492933632,3492934111,US
3492934112,3492934143,GB
-3492934144,3492947087,US
-3492947088,3492947103,DE
-3492947104,3492950863,US
+3492934144,3492939022,US
+3492939023,3492939023,DE
+3492939024,3492950863,US
3492950864,3492950879,DE
-3492950880,3492960383,US
-3492960384,3492960511,ES
-3492960512,3492962303,US
-3492962304,3492962893,GB
-3492962894,3492962894,US
-3492962895,3492963327,GB
-3492963328,3492968415,US
-3492968416,3492968447,GB
-3492968448,3492968703,US
-3492968704,3492970239,VI
-3492970240,3492996127,US
+3492950880,3492954623,US
+3492954624,3492955135,GB
+3492955136,3492960255,US
+3492960256,3492960511,ES
+3492960512,3492962815,US
+3492962816,3492963071,GB
+3492963072,3492968191,US
+3492968192,3492968447,GB
+3492968448,3492969505,US
+3492969506,3492969506,VI
+3492969507,3492969535,US
+3492969536,3492969599,VI
+3492969600,3492994815,US
+3492994816,3492995071,GB
+3492995072,3492996127,US
3492996128,3492996136,GB
-3492996137,3493003519,US
-3493003520,3493003775,AU
-3493003776,3493008255,US
-3493008256,3493008383,MX
-3493008384,3493009279,US
-3493009280,3493009407,GB
-3493009408,3493011327,US
+3492996137,3493011327,US
3493011328,3493011455,GB
-3493011456,3493013247,US
-3493013248,3493013503,MX
-3493013504,3493014527,US
-3493014528,3493014560,GB
-3493014561,3493014592,US
-3493014593,3493014783,GB
-3493014784,3493018639,US
-3493018640,3493018655,AE
-3493018656,3493029341,US
+3493011456,3493013759,US
+3493013760,3493014015,GB
+3493014016,3493014627,US
+3493014628,3493014628,GB
+3493014629,3493029341,US
3493029342,3493029342,GB
3493029343,3493039359,US
3493039360,3493039615,AR
-3493039616,3493050367,US
-3493050368,3493050464,FR
-3493050465,3493050496,US
-3493050497,3493050623,FR
-3493050624,3493061119,US
+3493039616,3493061119,US
3493061120,3493061375,BR
-3493061376,3493068543,US
-3493068544,3493068799,GB
-3493068800,3493069055,US
-3493069056,3493069311,A2
-3493069312,3493073151,US
+3493061376,3493062911,US
+3493062912,3493063167,DE
+3493063168,3493073151,US
3493073152,3493073407,BO
3493073408,3493073663,US
3493073664,3493073919,BO
@@ -154312,49 +82903,24 @@
3493140224,3493140479,DE
3493140480,3493142271,US
3493142272,3493142527,ID
-3493142528,3493174877,US
-3493174878,3493174878,US
-3493174879,3493244927,US
+3493142528,3493244927,US
3493244928,3493249023,PR
3493249024,3493866495,US
3493866496,3493867519,VG
3493867520,3493881855,US
3493881856,3493882879,CA
-3493882880,3493886715,US
-3493886716,3493886719,BZ
-3493886720,3493887823,US
-3493887824,3493887831,BR
-3493887832,3493900371,US
+3493882880,3493900371,US
3493900372,3493900375,GB
-3493900376,3493900911,US
-3493900912,3493900927,MX
-3493900928,3493901023,US
+3493900376,3493901023,US
3493901024,3493901031,HK
-3493901032,3493901103,US
-3493901104,3493901119,EC
-3493901120,3493901215,US
-3493901216,3493901231,AE
-3493901232,3493901307,US
-3493901308,3493901311,CA
+3493901032,3493901311,US
3493901312,3493901567,AE
-3493901568,3493901579,US
-3493901580,3493901583,TT
-3493901584,3493901599,VG
-3493901600,3493901759,US
-3493901760,3493901767,AE
-3493901768,3493901791,US
-3493901792,3493901823,AE
-3493901824,3493901847,US
-3493901848,3493901851,CA
-3493901852,3493903551,US
-3493903552,3493903567,KW
-3493903568,3493914239,US
-3493914240,3493914367,CA
-3493914368,3493936127,US
+3493901568,3493928959,US
+3493931008,3493936127,US
3493936128,3493937151,CA
-3493937152,3493939199,US
-3493939200,3493940223,CA
-3493940224,3493980159,US
+3493937152,3493939455,US
+3493939456,3493939711,CA
+3493939712,3493980159,US
3493980160,3493981183,CA
3493981184,3493982207,US
3493982208,3493984255,CA
@@ -154363,58 +82929,28 @@
3493987328,3493990399,US
3493990400,3493991423,CA
3493991424,3493998591,US
-3493998592,3494000639,AI
+3493998592,3493998847,AI
+3493998848,3493999359,KN
+3493999360,3494000639,AI
3494000640,3494003711,US
3494003712,3494004735,CA
3494004736,3494009855,US
3494009856,3494010879,CA
-3494010880,3494011231,US
-3494011232,3494011247,HK
-3494011248,3494014975,US
+3494010880,3494014975,US
3494014976,3494017023,CA
-3494017024,3494044671,US
+3494017024,3494043647,US
3494044672,3494045695,CA
3494045696,3494049791,US
3494049792,3494051839,CA
-3494051840,3494075391,US
+3494051840,3494059007,US
+3494060032,3494075391,US
3494075392,3494076415,CA
3494076416,3494088703,US
3494088704,3494090751,CA
3494090752,3494094847,US
3494094848,3494095871,CA
-3494095872,3494101319,US
-3494101320,3494101327,GB
-3494101328,3494101377,US
-3494101378,3494101385,JM
-3494101386,3494101407,US
-3494101408,3494101415,CO
-3494101416,3494101429,US
-3494101430,3494101437,JM
-3494101438,3494102481,US
-3494102482,3494102489,CA
-3494102490,3494102631,US
-3494102632,3494102639,SB
-3494102640,3494102687,US
-3494102688,3494102701,PE
-3494102702,3494102735,US
-3494102736,3494102743,VI
-3494102744,3494115471,US
-3494115472,3494115487,AU
-3494115488,3494115495,US
-3494115496,3494115503,CA
-3494115504,3494115983,US
-3494115984,3494115991,AU
-3494115992,3494116007,US
-3494116008,3494116015,GB
-3494116016,3494116375,US
-3494116376,3494116383,GB
-3494116384,3494116407,US
-3494116408,3494116415,CA
-3494116416,3494116431,US
-3494116432,3494116439,GB
-3494116440,3494116495,US
-3494116496,3494116519,NL
-3494116520,3494121471,US
+3494095872,3494106111,US
+3494107136,3494121471,US
3494121472,3494122495,CA
3494122496,3494125567,US
3494125568,3494126591,CA
@@ -154428,96 +82964,33 @@
3494168576,3494170623,CA
3494170624,3494181631,US
3494181632,3494181887,SN
-3494181888,3494184959,US
+3494182912,3494184959,US
3494184960,3494187007,CA
3494187008,3494191359,US
3494191360,3494191615,DE
3494191616,3494191871,GB
3494191872,3494192127,NL
3494192128,3494197247,US
-3494197248,3494197391,CA
-3494197392,3494197412,FR
-3494197413,3494197448,CA
-3494197449,3494197456,AE
-3494197457,3494197493,CA
-3494197494,3494197502,FR
-3494197503,3494197536,CA
-3494197537,3494197560,AE
-3494197561,3494197569,FR
-3494197570,3494197604,CA
-3494197605,3494197614,US
-3494197615,3494197760,CA
-3494197761,3494197777,AE
-3494197778,3494197953,CA
-3494197954,3494197967,US
-3494197968,3494198259,CA
-3494198260,3494198260,US
-3494198261,3494198271,CA
-3494198272,3494228031,US
-3494228032,3494228095,AU
-3494228096,3494228319,US
-3494228320,3494228335,RU
-3494228336,3494228863,US
-3494228864,3494228927,IN
-3494228928,3494229375,US
-3494229376,3494229407,BZ
-3494229408,3494229999,US
-3494230000,3494230015,CA
-3494230016,3494241927,US
-3494241928,3494241935,AU
-3494241936,3494241951,US
-3494241952,3494241959,IN
-3494241960,3494242247,US
-3494242248,3494242255,CO
-3494242256,3494244351,US
+3494197248,3494198271,CA
+3494198272,3494244351,US
3494244352,3494246399,CA
3494246400,3494247423,US
3494247424,3494250495,CA
3494250496,3494262783,US
3494262784,3494264831,CA
-3494264832,3494267007,US
-3494267008,3494267023,AE
-3494267024,3494267087,US
-3494267088,3494267103,PK
-3494267104,3494267423,US
-3494267424,3494267439,GB
-3494267440,3494268287,US
-3494268288,3494268319,TH
-3494268320,3494268335,UA
-3494268336,3494268815,US
-3494268816,3494268831,UA
-3494268832,3494271999,US
+3494264832,3494271999,US
3494272000,3494273023,KN
3494273024,3494275071,US
3494275072,3494277119,CA
-3494277120,3494291743,US
-3494291744,3494291751,GB
-3494291752,3494299663,US
-3494299664,3494299679,TH
-3494299680,3494299687,US
-3494299688,3494299695,SC
-3494299696,3494299727,US
-3494299728,3494299735,SC
-3494299736,3494301247,US
-3494301248,3494301311,SG
-3494301312,3494302719,US
+3494277120,3494294527,US
+3494295040,3494302719,US
3494302720,3494303743,CA
3494303744,3494310911,US
3494310912,3494311935,CA
-3494311936,3494313135,US
-3494313136,3494313143,GB
-3494313144,3494313327,US
-3494313328,3494313343,CO
-3494313344,3494313359,US
-3494313360,3494313375,MX
-3494313376,3494316031,US
+3494311936,3494316031,US
3494316032,3494317055,CA
3494317056,3494336511,US
-3494336512,3494337023,CA
-3494337024,3494337087,US
-3494337088,3494337135,CA
-3494337136,3494337151,US
-3494337152,3494337535,CA
+3494336512,3494337535,CA
3494337536,3494342655,US
3494342656,3494344703,CA
3494344704,3494359039,US
@@ -154530,61 +83003,31 @@
3494402560,3494402815,GB
3494402816,3494410239,US
3494410240,3494412287,CA
-3494412288,3494420415,US
-3494420416,3494420447,CA
-3494420448,3494422527,US
+3494412288,3494422527,US
3494422528,3494425599,CA
-3494425600,3494427199,US
-3494427200,3494427215,CA
-3494427216,3494428223,US
-3494428224,3494428239,CA
-3494428240,3494432767,US
+3494425600,3494432767,US
3494432768,3494433791,CA
3494433792,3494437887,US
-3494437888,3494437983,GP
-3494437984,3494437999,KN
-3494438000,3494438023,GP
-3494438024,3494438031,KN
-3494438032,3494438063,GP
-3494438064,3494438071,KN
-3494438072,3494438143,GP
+3494437888,3494438143,GP
3494438144,3494438399,DM
3494438400,3494438655,KN
3494438656,3494438911,DM
3494438912,3494455295,US
3494455296,3494456319,CA
-3494456320,3494457779,US
-3494457780,3494457787,GB
-3494457788,3494457819,US
-3494457820,3494457827,GB
-3494457828,3494459391,US
+3494456320,3494459391,US
3494459392,3494460415,CA
3494460416,3494464511,US
3494464512,3494465535,CA
-3494465536,3494501023,US
-3494501024,3494501039,AU
-3494501040,3494510591,US
+3494465536,3494470655,US
+3494471680,3494510591,US
3494510592,3494512639,CA
3494512640,3494512895,US
3494512896,3494513151,NO
3494513152,3494516735,US
3494516736,3494517759,CA
-3494517760,3494539263,US
-3494539264,3494540031,A2
+3494517760,3494540031,US
3494540032,3494540287,UG
-3494540288,3494554453,US
-3494554454,3494554461,ES
-3494554462,3494554554,US
-3494554555,3494554562,ES
-3494554563,3494554655,US
-3494554656,3494554687,TR
-3494554688,3494555167,US
-3494555168,3494555199,TR
-3494555200,3494555263,US
-3494555264,3494555295,TR
-3494555296,3494555392,US
-3494555393,3494555423,CN
-3494555424,3494563839,US
+3494540288,3494563839,US
3494563840,3494565887,CA
3494565888,3494594559,US
3494594560,3494595583,CA
@@ -154596,141 +83039,55 @@
3494624256,3494625279,CA
3494625280,3494627327,US
3494627328,3494628351,BM
-3494628352,3494651903,US
+3494628352,3494646783,US
+3494647808,3494651903,US
3494651904,3494652927,CA
3494652928,3494660095,US
3494660096,3494661119,CA
3494661120,3494668287,US
-3494668288,3494669375,CA
-3494669376,3494669439,US
-3494669440,3494670207,CA
-3494670208,3494670215,US
-3494670216,3494670335,CA
+3494668288,3494670335,CA
3494670336,3494700031,US
3494700032,3494701055,CA
3494701056,3494712319,US
3494712320,3494712575,CA
-3494712576,3494713091,US
-3494713092,3494713092,US
-3494713093,3494727679,US
+3494712576,3494727679,US
3494727680,3494729727,CA
3494729728,3494730751,US
3494730752,3494731775,CA
3494731776,3494743039,US
-3494743040,3494744063,CA
-3494744064,3494744399,US
-3494744400,3494744407,AU
-3494744408,3494744703,US
-3494744704,3494744711,DE
-3494744712,3494745151,US
-3494745152,3494745159,AU
-3494745160,3494745303,US
-3494745304,3494745311,AU
-3494745312,3494745951,US
-3494745952,3494745959,GB
-3494745960,3494746019,US
-3494746020,3494746023,AU
-3494746024,3494747135,US
+3494744064,3494747135,US
3494747136,3494748159,CA
-3494748160,3494757375,US
+3494748160,3494749439,US
+3494750208,3494757375,US
3494757376,3494758399,CA
-3494758400,3494763047,US
-3494763048,3494763055,JP
-3494763056,3494763063,AU
-3494763064,3494763071,MX
-3494763072,3494763119,US
-3494763120,3494763127,DE
-3494763128,3494763199,US
-3494763200,3494763207,KY
-3494763208,3494763903,US
-3494763904,3494763919,AU
-3494763920,3494763983,US
-3494763984,3494763999,AU
-3494764000,3494764295,US
-3494764296,3494764303,CA
-3494764304,3494764343,US
-3494764344,3494764351,GB
-3494764352,3494764375,US
-3494764376,3494764383,AU
-3494764384,3494764447,US
-3494764448,3494764455,GB
-3494764456,3494764527,US
-3494764528,3494764535,ES
-3494764536,3494776831,US
+3494758400,3494776831,US
3494776832,3494777855,CA
3494777856,3494785023,US
-3494785024,3494785279,GP
-3494785280,3494785535,MF
-3494785536,3494786047,GP
-3494786048,3494786303,MF
-3494786304,3494786559,GP
-3494786560,3494787071,MF
-3494787072,3494787199,A2
-3494787200,3494787231,GB
-3494787232,3494787327,A2
+3494785024,3494787071,MF
+3494787072,3494787327,CA
3494787328,3494787583,NG
-3494787584,3494788095,A2
+3494787584,3494788095,CA
3494788096,3494788351,NG
3494788352,3494788607,LY
-3494788608,3494788863,A2
-3494788864,3494789119,CA
-3494789120,3494852607,US
+3494788608,3494789119,CA
+3494789120,3494830079,US
+3494831104,3494852607,US
3494852608,3494854655,CA
-3494854656,3494861087,US
-3494861088,3494861095,CA
-3494861096,3494861407,US
-3494861408,3494861415,CN
-3494861416,3494861575,US
-3494861576,3494861583,CH
-3494861584,3494861615,US
-3494861616,3494861623,AU
-3494861624,3494861991,US
-3494861992,3494861999,GB
-3494862000,3494862639,US
-3494862640,3494862647,JP
-3494862648,3494862695,US
-3494862696,3494862703,TR
-3494862704,3494862847,US
+3494854656,3494862847,US
3494862848,3494863871,DM
3494863872,3494866943,US
3494866944,3494867967,CA
-3494867968,3494874111,US
+3494867968,3494868991,US
+3494870016,3494874111,US
3494874112,3494874367,ES
-3494874368,3494874879,US
-3494874880,3494874911,ES
-3494874912,3494893567,US
+3494874368,3494879743,US
+3494881280,3494893567,US
3494893568,3494894591,CA
-3494894592,3494906455,US
-3494906456,3494906463,GB
-3494906464,3494917119,US
+3494894592,3494917119,US
3494917120,3494917631,CA
3494917632,3494928383,US
3494928384,3494930431,CA
-3494930432,3494935684,US
-3494935685,3494935685,AU
-3494935686,3494935746,US
-3494935747,3494935747,GB
-3494935748,3494935756,US
-3494935757,3494935757,AU
-3494935758,3494935940,US
-3494935941,3494935941,AU
-3494935942,3494936002,US
-3494936003,3494936003,GB
-3494936004,3494936012,US
-3494936013,3494936013,AU
-3494936014,3494936196,US
-3494936197,3494936197,AU
-3494936198,3494936258,US
-3494936259,3494936259,GB
-3494936260,3494936268,US
-3494936269,3494936269,AU
-3494936270,3494936452,US
-3494936453,3494936453,AU
-3494936454,3494936514,US
-3494936515,3494936515,GB
-3494936516,3494936524,US
-3494936525,3494936525,AU
-3494936526,3494938623,US
+3494930432,3494938623,US
3494938624,3494939647,CA
3494939648,3494950655,US
3494950656,3494950911,PH
@@ -154754,69 +83111,44 @@
3495057408,3495059455,CA
3495059456,3495065599,US
3495065600,3495066623,CA
-3495066624,3495068031,US
-3495068032,3495068047,PL
-3495068048,3495068223,US
-3495068224,3495068239,PL
-3495068240,3495068655,US
-3495068656,3495068671,PL
-3495068672,3495076863,US
+3495066624,3495076863,US
3495076864,3495077887,BM
3495077888,3495090175,US
3495090176,3495091199,KY
3495091200,3495098367,US
3495098368,3495100415,CA
-3495100416,3495120895,US
+3495100416,3495113727,US
+3495114752,3495120895,US
3495120896,3495122943,AG
3495122944,3495123423,US
3495123424,3495123439,IN
3495123440,3495123455,US
3495123456,3495123967,GB
-3495123968,3495127615,US
-3495127616,3495127647,CA
-3495127648,3495128991,US
-3495128992,3495129007,AE
-3495129008,3495136471,US
-3495136472,3495136479,AR
-3495136480,3495136495,US
-3495136496,3495136503,IN
-3495136504,3495153663,US
+3495123968,3495153663,US
3495153664,3495155711,CA
-3495155712,3495157039,US
-3495157040,3495157047,SE
-3495157048,3495164191,US
-3495164192,3495164199,CA
-3495164200,3495164239,US
-3495164240,3495164247,CA
-3495164248,3495164335,US
-3495164336,3495164343,CO
-3495164344,3495187199,US
+3495155712,3495157759,US
+3495159808,3495187199,US
3495187200,3495187455,IM
3495187456,3495192575,US
3495192576,3495193599,CA
3495193600,3495215103,US
3495215104,3495217151,VI
3495217152,3495219199,VC
-3495219200,3495251967,US
+3495219200,3495239679,US
+3495241728,3495251967,US
3495251968,3495254015,CA
3495254016,3495260159,US
3495260160,3495261183,CA
-3495261184,3495276287,US
-3495276288,3495276351,IN
-3495276352,3495286783,US
+3495262208,3495271423,US
+3495272192,3495285759,US
3495286784,3495288831,CA
-3495288832,3495331839,US
-3495331840,3495332863,A2
+3495288832,3495332863,US
3495332864,3495333887,CA
3495333888,3495349247,US
3495349248,3495350271,CA
3495350272,3495358463,US
3495358464,3495359487,CA
-3495359488,3495361023,US
-3495361024,3495361055,CA
-3495361056,3495363019,US
-3495363020,3495363023,AR
-3495363024,3495367679,US
+3495359488,3495367679,US
3495367680,3495368703,CA
3495368704,3495370239,US
3495370240,3495370495,RU
@@ -154828,83 +83160,30 @@
3495399424,3495400447,KN
3495400448,3495412735,US
3495412736,3495413759,CA
-3495413760,3495424033,US
-3495424034,3495424042,IN
-3495424043,3495424286,US
-3495424287,3495424308,IN
-3495424309,3495424321,US
-3495424322,3495424346,IN
-3495424347,3495424355,US
-3495424356,3495424381,IN
-3495424382,3495424629,US
-3495424630,3495424637,IN
-3495424638,3495424789,US
-3495424790,3495424797,IN
-3495424798,3495424865,US
-3495424866,3495424878,IN
-3495424879,3495424913,US
-3495424914,3495424919,IN
-3495424920,3495429119,US
+3495413760,3495429119,US
3495429120,3495430143,CA
-3495430144,3495440799,US
-3495440800,3495440815,PL
-3495440816,3495440831,US
+3495430144,3495440831,US
3495440832,3495440847,IN
-3495440848,3495440895,US
-3495440896,3495440911,PL
-3495440912,3495441151,US
-3495441152,3495441167,PL
-3495441168,3495441407,US
-3495441408,3495441423,PL
-3495441424,3495441663,US
-3495441664,3495441679,PL
-3495441680,3495441919,US
-3495441920,3495441935,PL
-3495441936,3495442319,US
-3495442320,3495442335,PL
-3495442336,3495455743,US
+3495440848,3495455743,US
3495455744,3495456767,CA
3495456768,3495463935,US
3495463936,3495464959,CA
3495464960,3495475199,US
-3495475200,3495475711,CA
-3495475712,3495476223,EE
-3495476224,3495477247,CA
+3495475200,3495477247,CA
3495477248,3495478271,US
3495478272,3495479295,CA
-3495479296,3495485599,US
-3495485600,3495485615,GB
-3495485616,3495485631,US
-3495485632,3495485663,VG
-3495485664,3495486079,US
-3495486080,3495486143,PA
-3495486144,3495486207,US
-3495486208,3495486239,AI
-3495486240,3495486335,US
-3495486336,3495486399,VG
-3495486400,3495505919,US
+3495479296,3495501823,US
+3495502848,3495505919,US
3495505920,3495507967,CA
-3495507968,3495515135,US
+3495507968,3495508991,US
+3495510016,3495515135,US
3495515136,3495516159,CA
-3495516160,3495520375,US
-3495520376,3495520379,SG
-3495520380,3495520571,US
-3495520572,3495520579,KE
-3495520580,3495520667,US
-3495520668,3495520706,BR
-3495520707,3495520787,US
-3495520788,3495520791,CH
-3495520792,3495526399,US
+3495516160,3495521279,US
+3495522304,3495526399,US
3495526400,3495527423,CA
-3495527424,3495542783,US
-3495542784,3495544063,A2
+3495527424,3495544063,US
3495544064,3495544319,NG
-3495544320,3495544831,A2
-3495544832,3495549809,US
-3495549810,3495549813,IN
-3495549814,3495549917,US
-3495549918,3495549923,CA
-3495549924,3495550207,US
+3495544320,3495550207,US
3495550208,3495550463,CA
3495550464,3495551999,US
3495552000,3495553023,BM
@@ -154914,17 +83193,16 @@
3495583744,3495585791,CA
3495585792,3495587839,US
3495587840,3495588863,MS
-3495588864,3495618559,US
+3495588864,3495593983,US
+3495594496,3495595519,US
+3495596032,3495618559,US
3495618560,3495619583,CA
3495619584,3495620607,US
3495620608,3495622655,CA
-3495622656,3495653887,US
-3495653888,3495654399,CA
-3495654400,3495657551,US
-3495657552,3495657567,GB
-3495657568,3495658527,US
-3495658528,3495658559,FR
-3495658560,3495673855,US
+3495622656,3495647231,US
+3495648000,3495653887,US
+3495653888,3495654143,CA
+3495654144,3495673855,US
3495673856,3495674879,MF
3495674880,3495675391,VG
3495675392,3495688191,US
@@ -154934,71 +83212,39 @@
3495696384,3495703551,US
3495703552,3495704063,GB
3495704064,3495704575,CA
-3495704576,3495718911,US
+3495704576,3495712767,US
+3495714816,3495718911,US
3495718912,3495723007,CA
3495723008,3495724031,US
3495724032,3495727103,CA
3495727104,3495749631,US
-3495749632,3495750655,CA
-3495750656,3495781311,US
-3495781312,3495781375,CA
-3495781376,3495815167,US
-3495815168,3495815407,CA
-3495815408,3495815411,US
-3495815412,3495817215,CA
+3495749632,3495749856,CA
+3495749857,3495749861,RU
+3495749862,3495750655,CA
+3495750656,3495792639,US
+3495794688,3495815167,US
+3495815168,3495817215,CA
3495817216,3495828479,US
3495828480,3495829503,CA
3495829504,3495837695,US
-3495837696,3495838463,CA
+3495837696,3495837703,CA
+3495837704,3495837711,US
+3495837712,3495838463,CA
3495838464,3495847935,US
3495847936,3495849983,CA
-3495849984,3495859332,US
-3495859333,3495859333,AU
-3495859334,3495859394,US
-3495859395,3495859395,GB
-3495859396,3495859404,US
-3495859405,3495859405,AU
-3495859406,3495859588,US
-3495859589,3495859589,AU
-3495859590,3495859650,US
-3495859651,3495859651,GB
-3495859652,3495859660,US
-3495859661,3495859661,AU
-3495859662,3495862271,US
+3495849984,3495862271,US
3495862272,3495864319,CA
3495864320,3495864831,DM
3495864832,3495865343,MF
-3495865344,3495865407,US
-3495865408,3495865423,CA
-3495865424,3495865535,US
-3495865536,3495865599,CA
-3495865600,3495865727,US
-3495865728,3495865759,CA
-3495865760,3495865855,US
-3495865856,3495865871,CA
-3495865872,3495865903,US
-3495865904,3495865983,CA
-3495865984,3495866015,US
-3495866016,3495866047,CA
-3495866048,3495866079,US
-3495866080,3495866095,CA
-3495866096,3495866103,US
-3495866104,3495866111,CA
-3495866112,3495866175,US
-3495866176,3495866287,CA
-3495866288,3495866303,US
-3495866304,3495866335,CA
-3495866336,3495866351,BD
-3495866352,3495866355,US
-3495866356,3495866359,CA
-3495866360,3495866363,US
-3495866364,3495866367,CA
-3495866368,3495868415,LC
+3495865344,3495866367,US
+3495866368,3495866623,VC
+3495866624,3495866879,LC
+3495866880,3495867391,VC
+3495867392,3495867647,LC
+3495867648,3495868415,VC
3495868416,3495871487,US
3495871488,3495872511,CA
-3495872512,3495881119,US
-3495881120,3495881151,PA
-3495881152,3495881471,US
+3495872512,3495881471,US
3495881472,3495881727,PA
3495881728,3495896063,US
3495896064,3495897087,PR
@@ -155011,25 +83257,16 @@
3495985152,3495988223,NI
3495988224,3495989247,GT
3495989248,3496034303,US
-3496034304,3496048135,CA
-3496048136,3496048351,US
-3496048352,3496048359,CA
-3496048360,3496048383,US
-3496048384,3496050687,CA
+3496034304,3496050687,CA
3496050688,3496132607,US
3496132608,3496148991,CA
3496148992,3496181759,US
3496181760,3496189951,CA
-3496189952,3496190463,US
-3496190464,3496190975,CA
-3496190976,3496202239,US
-3496202240,3496202303,CA
-3496202304,3496205839,US
-3496205840,3496205855,ID
-3496205856,3496205871,CA
-3496205872,3496217983,US
-3496217984,3496218111,PL
-3496218112,3496296447,US
+3496189952,3496190519,US
+3496190520,3496190527,CA
+3496190528,3496190719,US
+3496190720,3496190975,CA
+3496190976,3496296447,US
3496296448,3496312831,CA
3496312832,3496468479,US
3496468480,3496476671,CA
@@ -155037,288 +83274,51 @@
3496875264,3496875519,BD
3496875520,3496878079,US
3496878080,3496882175,CA
-3496882176,3496886399,US
-3496886400,3496886407,TR
-3496886408,3496886423,US
-3496886424,3496886463,TR
-3496886464,3496886495,US
-3496886496,3496886503,CA
-3496886504,3496886615,US
-3496886616,3496886623,CA
-3496886624,3496886655,US
-3496886656,3496886671,IN
-3496886672,3496886711,US
-3496886712,3496886727,AU
-3496886728,3496886823,US
-3496886824,3496886831,IN
-3496886832,3496886935,US
-3496886936,3496886943,PK
-3496886944,3496887135,US
-3496887136,3496887167,AU
-3496887168,3496887399,US
-3496887400,3496887407,PK
-3496887408,3496887471,US
-3496887472,3496887503,AU
-3496887504,3496887511,US
-3496887512,3496887519,CA
-3496887520,3496887527,AU
-3496887528,3496887535,US
-3496887536,3496887543,PK
-3496887544,3496887575,US
-3496887576,3496887583,AU
-3496887584,3496887631,US
-3496887632,3496887639,RU
-3496887640,3496887655,US
-3496887656,3496887663,AU
-3496887664,3496887703,US
-3496887704,3496887727,AU
-3496887728,3496887807,US
-3496887808,3496887935,AU
-3496887936,3496887975,US
-3496887976,3496887983,AU
-3496887984,3496888063,US
-3496888064,3496888095,AU
-3496888096,3496888127,US
-3496888128,3496888159,TR
-3496888160,3496888207,US
-3496888208,3496888223,AU
-3496888224,3496888231,US
-3496888232,3496888239,BR
-3496888240,3496888319,US
-3496888320,3496888335,AU
-3496888336,3496888343,US
-3496888344,3496888351,AU
-3496888352,3496888367,US
-3496888368,3496888383,AU
-3496888384,3496888399,US
-3496888400,3496888415,AU
-3496888416,3496888431,US
-3496888432,3496888439,AU
-3496888440,3496888583,US
-3496888584,3496888591,AU
-3496888592,3496888599,US
-3496888600,3496888607,PK
-3496888608,3496888623,US
-3496888624,3496888655,AU
-3496888656,3496888671,US
-3496888672,3496888679,NO
-3496888680,3496893695,US
-3496893696,3496893703,RU
-3496893704,3496894463,US
+3496882176,3496894463,US
3496894464,3496902655,CA
3496902656,3496946175,US
3496946176,3496946431,HK
3496946432,3496946943,US
3496946944,3496947199,IN
3496947200,3496947711,US
-3496947712,3496951807,JP
+3496947712,3496949759,JP
+3496949760,3496951807,US
3496951808,3496959999,CA
-3496960000,3497001247,US
-3497001248,3497001263,AU
-3497001264,3497001327,US
-3497001328,3497001343,DE
-3497001344,3497005887,US
-3497005888,3497005951,CA
-3497005952,3497008071,US
-3497008072,3497008079,CA
-3497008080,3497008671,US
-3497008672,3497008687,CA
-3497008688,3497009399,US
-3497009400,3497009407,AE
-3497009408,3497010703,US
-3497010704,3497010711,PK
-3497010712,3497010719,US
-3497010720,3497010727,AE
-3497010728,3497010735,US
-3497010736,3497010751,CA
-3497010752,3497014687,US
-3497014688,3497014695,GB
-3497014696,3497017343,US
-3497017344,3497017375,GB
-3497017376,3497017399,US
-3497017400,3497017439,GB
-3497017440,3497018599,US
-3497018600,3497018607,IL
-3497018608,3497019231,US
-3497019232,3497019247,PK
-3497019248,3497020415,US
+3496960000,3497020415,US
3497020416,3497020671,IL
-3497020672,3497020943,US
-3497020944,3497020959,CA
-3497020960,3497022367,US
-3497022368,3497022399,AU
-3497022400,3497023447,US
-3497023448,3497023455,CA
-3497023456,3497024639,US
-3497024640,3497024655,AU
-3497024656,3497024735,US
-3497024736,3497024751,GB
-3497024752,3497024991,US
-3497024992,3497025007,JP
-3497025008,3497025127,US
-3497025128,3497025135,PK
-3497025136,3497026815,US
-3497026816,3497026847,ES
-3497026848,3497026919,US
-3497026920,3497026927,CA
-3497026928,3497027375,US
-3497027376,3497027383,AE
-3497027384,3497028383,US
-3497028384,3497028391,MX
-3497028392,3497028431,US
-3497028432,3497028439,MX
-3497028440,3497028479,US
-3497028480,3497028495,AE
-3497028496,3497028983,US
-3497028984,3497029055,CA
-3497029056,3497029071,US
-3497029072,3497029087,TH
-3497029088,3497029095,GB
-3497029096,3497029151,US
-3497029152,3497029167,TH
-3497029168,3497029231,US
-3497029232,3497029239,GB
-3497029240,3497030415,US
-3497030416,3497030423,IN
-3497030424,3497030495,US
-3497030496,3497030511,AU
-3497030512,3497030767,US
-3497030768,3497030775,CH
-3497030776,3497030911,US
-3497030912,3497030943,CH
-3497030944,3497031071,US
-3497031072,3497031079,CA
-3497031080,3497032111,US
-3497032112,3497032119,CA
-3497032120,3497033383,US
-3497033384,3497033391,CH
-3497033392,3497033439,US
-3497033440,3497033447,PK
-3497033448,3497066495,US
+3497020672,3497066495,US
3497066496,3497082879,CA
-3497082880,3497156863,US
-3497156864,3497156879,NL
-3497156880,3497156983,US
-3497156984,3497157006,DZ
-3497157007,3497157375,US
-3497157376,3497158143,A2
-3497158144,3497160191,US
-3497160192,3497160351,NL
-3497160352,3497161215,US
-3497161216,3497161343,HK
-3497161344,3497161375,US
-3497161376,3497161407,HK
-3497161408,3497161735,US
+3497082880,3497161735,US
3497161736,3497161743,MT
-3497161744,3497161751,US
-3497161752,3497161759,GB
+3497161744,3497161759,US
3497161760,3497161767,PT
3497161768,3497161775,MT
3497161776,3497161895,US
3497161896,3497161903,MT
-3497161904,3497161911,US
-3497161912,3497161919,TN
-3497161920,3497161927,US
-3497161928,3497161935,GB
+3497161904,3497161935,US
3497161936,3497161943,MT
3497161944,3497162495,US
3497162496,3497162751,GB
3497162752,3497163007,NL
-3497163008,3497163311,US
-3497163312,3497163319,NO
-3497163320,3497163351,US
-3497163352,3497163359,ES
-3497163360,3497163383,GB
-3497163384,3497163399,US
-3497163400,3497163407,NO
-3497163408,3497163447,US
-3497163448,3497163455,ES
-3497163456,3497163463,US
-3497163464,3497163471,ES
-3497163472,3497163519,US
-3497163520,3497163655,DK
-3497163656,3497163663,NO
-3497163664,3497163679,DK
-3497163680,3497163695,US
-3497163696,3497163703,DK
-3497163704,3497163711,ES
-3497163712,3497163723,US
-3497163724,3497163727,GB
-3497163728,3497164287,US
-3497164288,3497164295,GB
-3497164296,3497164463,US
-3497164464,3497164479,ES
-3497164480,3497164487,US
-3497164488,3497164495,ES
-3497164496,3497164799,US
+3497163008,3497163167,US
+3497163168,3497163175,GB
+3497163176,3497164799,US
3497164800,3497181183,CA
-3497181184,3497225583,US
-3497225584,3497225591,AU
-3497225592,3497226295,US
-3497226296,3497226303,SG
-3497226304,3497226391,US
-3497226392,3497226399,IR
-3497226400,3497226687,US
-3497226688,3497226719,GB
-3497226720,3497226943,US
-3497226944,3497226975,CA
-3497226976,3497227311,US
-3497227312,3497227327,CA
-3497227328,3497227599,US
-3497227600,3497227615,CA
-3497227616,3497229687,US
-3497229688,3497229695,AU
-3497229696,3497233407,US
+3497181184,3497233407,US
3497233408,3497233663,CN
-3497233664,3497251915,US
-3497251916,3497251916,US
-3497251917,3497263815,US
-3497263816,3497263823,GB
-3497263824,3497264127,US
-3497264128,3497264159,CA
-3497264160,3497264913,US
-3497264914,3497264950,GB
-3497264951,3497266527,US
-3497266528,3497266535,GB
-3497266536,3497268223,US
-3497268224,3497268287,GB
-3497268288,3497268703,US
-3497268704,3497268719,CA
-3497268720,3497268815,US
-3497268816,3497268831,CA
-3497268832,3497273919,US
-3497273920,3497273927,CA
-3497273928,3497274175,US
-3497274176,3497274207,CA
-3497274208,3497340671,US
-3497340672,3497340799,PL
-3497340800,3497410559,US
+3497233664,3497410559,US
3497410560,3497431039,CA
3497431040,3497447423,US
3497447424,3497451519,CA
-3497451520,3497453119,US
-3497453120,3497453135,GB
-3497453136,3497453695,US
-3497453696,3497453711,GB
-3497453712,3497664255,US
+3497451520,3497664255,US
3497664256,3497664511,NL
-3497664512,3497713415,US
-3497713416,3497713423,EC
-3497713424,3497717759,US
-3497717760,3497719807,A2
-3497719808,3497720063,MR
-3497720064,3497721343,A2
-3497721344,3497721599,NG
-3497721600,3497721855,A2
-3497721856,3497739679,US
-3497739680,3497739687,CA
-3497739688,3497820159,US
+3497664512,3497717759,US
+3497717760,3497721855,CA
+3497721856,3497778943,US
+3497778944,3497779199,CA
+3497779200,3497820159,US
3497820160,3497852927,CA
-3497852928,3498254335,US
-3498254336,3498254367,JM
-3498254368,3498254431,US
-3498254432,3498254447,JM
-3498254448,3498254591,US
+3497852928,3498254591,US
3498254592,3498254847,JM
3498254848,3498287103,US
3498287104,3498295295,JM
@@ -155326,11 +83326,9 @@
3498428416,3498429439,CR
3498429440,3498429951,US
3498429952,3498430207,CR
-3498430208,3498505343,US
-3498505344,3498505375,SG
-3498505376,3498509055,US
-3498509056,3498510335,PR
-3498510336,3498513151,US
+3498430208,3498509055,US
+3498509056,3498509311,PR
+3498509312,3498513151,US
3498513152,3498513407,CL
3498513408,3498513919,US
3498513920,3498514431,CL
@@ -155339,26 +83337,20 @@
3498588160,3498599935,US
3498599936,3498600191,WS
3498600192,3498708991,US
-3498708992,3498712687,JM
-3498712688,3498712703,US
-3498712704,3498717183,JM
+3498708992,3498717183,JM
3498717184,3498760191,US
-3498760192,3498762239,PR
-3498762240,3498812415,US
+3498760192,3498761215,PR
+3498761216,3498761727,US
+3498761728,3498761983,PR
+3498761984,3498812415,US
3498812416,3498812671,PF
-3498812672,3499186591,US
-3499186592,3499186623,MX
-3499186624,3499299327,US
+3498812672,3499299327,US
3499299328,3499299583,WS
3499299584,3499403263,US
3499403264,3499403775,MW
3499403776,3499436031,US
3499436032,3499436287,DE
-3499436288,3499437055,US
-3499437056,3499437151,DE
-3499437152,3499437423,US
-3499437424,3499437431,IT
-3499437432,3499450367,US
+3499436288,3499450367,US
3499450368,3499451391,IN
3499451392,3499705343,US
3499705344,3499705855,TZ
@@ -155376,39 +83368,23 @@
3500018944,3500019199,LC
3500019200,3500019455,AG
3500019456,3500019711,LC
-3500019712,3500076415,US
-3500076416,3500076543,SG
-3500076544,3500126207,US
+3500019712,3500126207,US
3500126208,3500126463,SE
3500126464,3500126719,GB
-3500126720,3500144639,US
-3500144640,3500144895,IT
-3500144896,3500274175,US
-3500274176,3500274239,IE
-3500274240,3500351487,US
-3500351488,3500352607,JM
-3500352608,3500352647,US
-3500352648,3500359679,JM
-3500359680,3500371583,US
-3500371584,3500371599,GB
-3500371600,3500486655,US
+3500126720,3500351487,US
+3500351488,3500359679,JM
+3500359680,3500486655,US
3500486656,3500490751,CR
3500490752,3500613631,US
3500613632,3500614655,MZ
-3500614656,3500664262,US
-3500664263,3500664263,US
-3500664264,3500664575,US
-3500664576,3500664831,US
-3500664832,3500664870,US
+3500614656,3500664870,US
3500664871,3500664871,CA
-3500664872,3500666751,US
-3500666752,3500666879,US
-3500666880,3500689407,US
+3500664872,3500689407,US
3500689408,3500689919,CL
3500689920,3500707327,US
3500707328,3500707839,CA
-3500707840,3500724991,US
-3500724992,3500725503,EC
+3500707840,3500725247,US
+3500725248,3500725503,EC
3500725504,3500725759,HT
3500725760,3500726015,EC
3500726016,3500726271,HT
@@ -155416,43 +83392,17 @@
3500728320,3500736511,KY
3500736512,3500752895,US
3500752896,3500761087,KY
-3500761088,3500809991,US
-3500809992,3500809999,CA
-3500810000,3500810247,US
-3500810248,3500810255,CA
-3500810256,3500811567,US
-3500811568,3500811583,AU
-3500811584,3500811591,US
-3500811592,3500811631,AU
-3500811632,3500812175,US
-3500812176,3500812183,GB
-3500812184,3500921279,US
-3500921280,3500921311,AU
-3500921312,3501146175,US
-3501146176,3501146335,DE
-3501146336,3501146951,US
-3501146952,3501146959,CA
-3501146960,3501146975,GB
-3501146976,3501147039,US
-3501147040,3501147071,CA
-3501147072,3501181703,US
-3501181704,3501181711,AU
-3501181712,3501181727,KR
-3501181728,3501181743,US
-3501181744,3501181951,JP
-3501181952,3501182975,US
-3501182976,3501183007,SG
-3501183008,3501183023,US
-3501183024,3501183047,SG
-3501183048,3501183167,US
-3501183168,3501183231,SG
-3501183232,3501183487,US
+3500761088,3500807019,US
+3500807020,3500807023,GB
+3500807024,3500807195,US
+3500807196,3500807199,GB
+3500807200,3500807299,US
+3500807300,3500807303,GB
+3500807304,3500813219,US
+3500813220,3500813223,GB
+3500813224,3501183487,US
3501183488,3501183743,GB
-3501183744,3501340415,US
-3501340416,3501340471,DE
-3501340472,3501340478,US
-3501340479,3501340671,DE
-3501340672,3501368831,US
+3501183744,3501368831,US
3501368832,3501369087,NL
3501369088,3501376147,US
3501376148,3501376151,NL
@@ -155460,23 +83410,7 @@
3501378048,3501378303,DE
3501378304,3501522943,US
3501522944,3501588479,CA
-3501588480,3501721187,US
-3501721188,3501721188,US
-3501721189,3501728831,US
-3501728832,3501728863,AU
-3501728864,3501732071,US
-3501732072,3501732087,AU
-3501732088,3501747967,US
-3501747968,3501748031,CA
-3501748032,3501789442,US
-3501789443,3501789443,US
-3501789444,3501789695,US
-3501789696,3501789703,GB
-3501789704,3501791751,US
-3501791752,3501791759,TW
-3501791760,3501817983,US
-3501817984,3501818015,HK
-3501818016,3502439167,US
+3501588480,3502439167,US
3502439168,3502439423,PK
3502439424,3502470143,US
3502470144,3502471167,MX
@@ -155490,15 +83424,9 @@
3502683136,3502683391,MC
3502683392,3502993407,US
3502993408,3502993919,NL
-3502993920,3503058431,US
-3503058432,3503058447,CA
-3503058448,3503206399,US
+3502993920,3503206399,US
3503206400,3503206911,CR
-3503206912,3503222695,US
-3503222696,3503222703,CA
-3503222704,3503227391,US
-3503227392,3503227407,CA
-3503227408,3503250431,US
+3503206912,3503250431,US
3503250432,3503250943,PK
3503250944,3503323135,US
3503323136,3503323647,KE
@@ -155510,9 +83438,7 @@
3503478784,3503479039,DE
3503479040,3503738879,US
3503738880,3503740927,CO
-3503740928,3503826087,US
-3503826088,3503826095,PR
-3503826096,3503890431,US
+3503740928,3503890431,US
3503890432,3503894527,CO
3503894528,3503990783,US
3503990784,3503992831,AE
@@ -155526,7 +83452,9 @@
3504207872,3504208127,CA
3504208128,3504223743,US
3504223744,3504223999,RO
-3504224000,3504889343,US
+3504224000,3504521215,US
+3504521216,3504521727,GU
+3504521728,3504889343,US
3504889344,3504889855,PK
3504889856,3504922623,US
3504922624,3504923391,PH
@@ -155540,354 +83468,68 @@
3505006080,3505012735,PR
3505012736,3505112063,US
3505112064,3505112319,EC
-3505112320,3505112335,US
-3505112336,3505113087,EC
-3505113088,3505119231,US
+3505112320,3505112575,US
+3505112576,3505112831,EC
+3505112832,3505119231,US
3505119232,3505119487,PH
3505119488,3505121023,US
3505121024,3505121279,PH
-3505121280,3505201151,US
-3505201152,3505201407,JO
-3505201408,3505220351,US
-3505220352,3505220479,CA
-3505220480,3505227247,US
-3505227248,3505227255,GB
-3505227256,3505270271,US
+3505121280,3505270271,US
3505270272,3505270527,JM
3505270528,3505270783,HT
3505270784,3505416703,US
3505416704,3505417471,MX
3505417472,3505424383,US
3505424384,3505425407,PK
-3505425408,3505432159,US
-3505432160,3505432191,A2
-3505432192,3505446271,US
-3505446272,3505446399,CA
-3505446400,3505474559,US
+3505425408,3505474559,US
3505474560,3505474815,GU
3505474816,3505511679,US
3505511680,3505511935,RO
3505511936,3505661951,US
3505661952,3505662463,JM
-3505662464,3505664799,US
-3505664800,3505664831,UA
-3505664832,3505818623,US
+3505662464,3505818623,US
3505818624,3505819647,BS
-3505819648,3505999359,US
-3505999360,3506000127,PR
-3506000128,3506043135,US
+3505819648,3506043135,US
3506043136,3506044927,PA
-3506044928,3506058815,US
-3506058816,3506058823,AF
-3506058824,3506135263,US
-3506135264,3506135295,GB
-3506135296,3506155751,US
-3506155752,3506155759,AF
-3506155760,3506161975,US
-3506161976,3506161983,AF
-3506161984,3506192639,US
-3506192640,3506192895,A2
-3506192896,3506194535,US
-3506194536,3506194543,AU
-3506194544,3506198007,US
-3506198008,3506198015,NO
-3506198016,3506214159,US
-3506214160,3506214175,CA
-3506214176,3506231807,US
+3506044928,3506231807,US
3506231808,3506232063,IN
-3506232064,3506307631,US
-3506307632,3506307647,GB
-3506307648,3506383999,US
-3506384000,3506384031,CA
-3506384032,3506421983,US
-3506421984,3506422015,PR
-3506422016,3506644727,US
-3506644728,3506644735,CA
-3506644736,3506765823,US
-3506765824,3506806719,CA
-3506806720,3506806727,US
-3506806728,3506831359,CA
+3506232064,3506765823,US
+3506765824,3506831359,CA
3506831360,3506964479,US
3506964480,3506966527,TW
-3506966528,3506967455,US
-3506967456,3506967471,DM
-3506967472,3506967487,US
-3506967488,3506967535,DM
-3506967536,3506967567,US
-3506967568,3506967583,DM
-3506967584,3506967679,US
-3506967680,3506967791,DM
-3506967792,3506967823,US
-3506967824,3506967839,DM
-3506967840,3506967871,US
-3506967872,3506967919,DM
-3506967920,3506967935,US
-3506967936,3506967967,DM
-3506967968,3506968095,US
-3506968096,3506968191,DM
-3506968192,3506968223,US
-3506968224,3506968239,DM
-3506968240,3506968271,US
-3506968272,3506968287,DM
-3506968288,3506968319,US
-3506968320,3506968351,DM
-3506968352,3506968383,US
-3506968384,3506968399,DM
-3506968400,3506968575,US
-3506968576,3506968591,DM
-3506968592,3506968639,US
-3506968640,3506968655,DM
-3506968656,3506968783,US
-3506968784,3506968799,DM
-3506968800,3506968959,US
-3506968960,3506968975,DM
-3506968976,3506969031,US
-3506969032,3506969087,DM
-3506969088,3506969599,US
-3506969600,3506969631,DM
-3506969632,3506969663,US
-3506969664,3506969687,DM
-3506969688,3506969703,US
-3506969704,3506969711,DM
-3506969712,3506969759,US
-3506969760,3506969871,DM
-3506969872,3506969887,US
-3506969888,3506969903,DM
-3506969904,3506969919,US
-3506969920,3506970015,DM
-3506970016,3506970079,US
-3506970080,3506970095,DM
-3506970096,3506970127,US
-3506970128,3506970143,DM
-3506970144,3506970239,US
-3506970240,3506970247,DM
-3506970248,3506970263,US
-3506970264,3506970319,DM
-3506970320,3506970335,US
-3506970336,3506970367,DM
-3506970368,3506972703,US
-3506972704,3506972735,DM
-3506972736,3506972783,US
-3506972784,3506972799,DM
-3506972800,3506972927,US
-3506972928,3506973183,A2
-3506973184,3506973695,US
-3506973696,3506973727,DM
-3506973728,3506973743,US
-3506973744,3506973823,DM
-3506973824,3506973831,US
-3506973832,3506973855,DM
-3506973856,3506973873,US
-3506973874,3506973874,DM
-3506973875,3506973951,US
-3506973952,3506974111,DM
-3506974112,3506974127,US
-3506974128,3506974143,DM
-3506974144,3506974215,US
-3506974216,3506974495,DM
-3506974496,3506974511,US
-3506974512,3506974623,DM
-3506974624,3506974639,US
-3506974640,3506974655,DM
-3506974656,3506977791,US
+3506966528,3506977791,US
3506977792,3506978815,NL
3506978816,3506986751,US
3506986752,3506987007,DE
-3506987008,3507001215,US
-3507001216,3507001343,DM
-3507001344,3507003647,US
-3507003648,3507003663,DM
-3507003664,3507003671,US
-3507003672,3507003687,DM
-3507003688,3507003727,US
-3507003728,3507003743,DM
-3507003744,3507003775,US
-3507003776,3507003815,DM
-3507003816,3507003839,US
-3507003840,3507003855,DM
-3507003856,3507003871,US
-3507003872,3507003903,DM
-3507003904,3507013631,US
+3506987008,3507013631,US
3507013632,3507015679,DE
3507015680,3507019775,US
3507019776,3507021823,GB
-3507021824,3507022079,US
-3507022080,3507022335,A2
-3507022336,3507023871,US
+3507021824,3507023871,US
3507023872,3507024383,GB
3507024384,3507024639,AU
3507024640,3507025919,GB
3507025920,3507038207,US
3507038208,3507040255,TW
-3507040256,3507071231,US
-3507071232,3507071295,DM
-3507071296,3507071311,US
-3507071312,3507071343,DM
-3507071344,3507071375,US
-3507071376,3507071407,DM
-3507071408,3507071423,US
-3507071424,3507071455,DM
-3507071456,3507071471,US
-3507071472,3507071487,DM
-3507071488,3507071535,US
-3507071536,3507071551,DM
-3507071552,3507071567,US
-3507071568,3507071599,DM
-3507071600,3507071615,US
-3507071616,3507071679,DM
-3507071680,3507071711,US
-3507071712,3507071839,DM
-3507071840,3507071855,US
-3507071856,3507071903,DM
-3507071904,3507071935,US
-3507071936,3507071999,DM
-3507072000,3507101919,US
-3507101920,3507101935,IL
-3507101936,3507290111,US
+3507040256,3507290111,US
3507290112,3507355647,AR
3507355648,3507470335,US
-3507470336,3507477124,CA
-3507477125,3507477125,US
-3507477126,3507477129,CA
-3507477130,3507477130,US
-3507477131,3507477131,CA
-3507477132,3507477132,US
-3507477133,3507477144,CA
-3507477145,3507477145,US
-3507477146,3507477165,CA
-3507477166,3507477166,US
-3507477167,3507478046,CA
-3507478047,3507478057,US
-3507478058,3507478130,CA
-3507478131,3507478135,US
-3507478136,3507479188,CA
-3507479189,3507479190,US
-3507479191,3507482196,CA
-3507482197,3507482197,US
-3507482198,3507482198,CA
-3507482199,3507482211,US
-3507482212,3507482212,CA
-3507482213,3507482229,US
-3507482230,3507482235,CA
-3507482236,3507482267,US
-3507482268,3507486719,CA
-3507486720,3507540015,US
-3507540016,3507540031,IN
-3507540032,3507585023,US
+3507470336,3507486719,CA
+3507486720,3507585023,US
3507585024,3507598911,CA
3507598912,3507598943,US
3507598944,3507601407,CA
-3507601408,3507634335,US
-3507634336,3507634351,IQ
-3507634352,3507634383,US
-3507634384,3507634399,ES
-3507634400,3507634623,US
-3507634624,3507634655,CA
-3507634656,3507635391,US
-3507635392,3507635407,AU
-3507635408,3507636959,US
-3507636960,3507636975,CA
-3507636976,3507637551,US
-3507637552,3507637567,IL
-3507637568,3507639189,US
-3507639190,3507639199,IT
-3507639200,3507639385,US
-3507639386,3507639395,BE
-3507639396,3507639671,US
-3507639672,3507639681,SY
-3507639682,3507639711,US
-3507639712,3507639721,BE
-3507639722,3507639741,US
-3507639742,3507639751,NZ
-3507639752,3507642527,US
-3507642528,3507642559,IL
-3507642560,3507642591,CA
-3507642592,3507643007,US
-3507643008,3507643039,GB
-3507643040,3507643175,US
-3507643176,3507643185,FR
-3507643186,3507643265,US
-3507643266,3507643275,IQ
-3507643276,3507643285,US
-3507643286,3507643295,ES
-3507643296,3507643315,US
-3507643316,3507643325,JP
-3507643326,3507643461,US
-3507643462,3507643471,AU
-3507643472,3507643601,US
-3507643602,3507643611,IT
-3507643612,3507644031,US
-3507644032,3507644063,IL
-3507644064,3507644127,US
-3507644128,3507644159,FR
-3507644160,3507644511,US
-3507644512,3507644543,NO
-3507644544,3507644591,US
-3507644592,3507644607,GB
-3507644608,3507645017,US
-3507645018,3507645027,AU
-3507645028,3507645037,UA
-3507645038,3507645117,US
-3507645118,3507645127,NZ
-3507645128,3507645193,US
-3507645194,3507645203,NZ
-3507645204,3507645223,US
-3507645224,3507645233,AU
-3507645234,3507645333,US
-3507645334,3507645343,IR
-3507645344,3507645353,UA
-3507645354,3507645423,US
-3507645424,3507645433,GB
-3507645434,3507645479,US
-3507645480,3507645489,GR
-3507645490,3507646127,US
-3507646128,3507646143,ES
-3507646144,3507647807,US
-3507647808,3507647871,AU
-3507647872,3507649263,US
-3507649264,3507649279,QA
-3507649280,3507650335,US
-3507650336,3507650367,PA
-3507650368,3507650431,US
-3507650432,3507650495,AU
-3507650496,3507748863,US
+3507601408,3507748863,US
3507748864,3507749375,CA
3507749376,3507749631,US
3507749632,3507765247,CA
3507765248,3507809279,US
3507809280,3507809535,BG
-3507809536,3508110015,US
-3508110016,3508110047,CA
-3508110048,3508110207,US
-3508110208,3508110239,ES
-3508110240,3508111359,US
+3507809536,3508111359,US
3508111360,3508111615,CA
3508111616,3508114431,US
3508114432,3508114687,ID
-3508114688,3508115807,US
-3508115808,3508115839,RU
-3508115840,3508117439,US
-3508117440,3508117503,CA
-3508117504,3508118527,US
-3508118528,3508118559,AU
-3508118560,3508118911,US
-3508118912,3508118943,CA
-3508118944,3508123935,US
-3508123936,3508123951,CA
-3508123952,3508126239,US
-3508126240,3508126255,GB
-3508126256,3508130815,US
-3508130816,3508130831,RU
-3508130832,3508131135,US
-3508131136,3508131199,CA
-3508131200,3508133119,US
-3508133120,3508133247,GB
-3508133248,3508137631,US
-3508137632,3508137647,SK
-3508137648,3508137695,US
-3508137696,3508137711,ID
-3508137712,3508219903,US
-3508219904,3508220927,CA
+3508114688,3508219903,US
3508220928,3508221951,KY
3508221952,3508222975,US
3508222976,3508223999,KY
@@ -155896,17 +83538,7 @@
3508243968,3508244223,BM
3508244224,3508273407,US
3508273408,3508273663,MX
-3508273664,3508274719,US
-3508274720,3508274751,AR
-3508274752,3508275199,US
-3508275200,3508275327,IT
-3508275328,3508275455,US
-3508275456,3508275487,ZA
-3508275488,3508277343,US
-3508277344,3508277375,CA
-3508277376,3508277487,US
-3508277488,3508277503,PR
-3508277504,3508278527,US
+3508273664,3508278527,US
3508278528,3508278783,AU
3508278784,3508279039,US
3508279040,3508279295,VE
@@ -155919,182 +83551,53 @@
3508281088,3508281343,KR
3508281344,3508281599,PH
3508281600,3508281855,NZ
-3508281856,3508282047,US
-3508282048,3508282111,SG
+3508281856,3508282111,US
3508282112,3508282367,HK
-3508282368,3508282591,US
-3508282592,3508282623,IT
+3508282368,3508282623,US
3508282624,3508282879,AU
-3508282880,3508282887,KP
-3508282888,3508283135,US
+3508282880,3508283135,US
3508283136,3508283391,HK
3508283392,3508283647,US
3508283648,3508283903,AU
3508283904,3508284159,MY
3508284160,3508284415,SG
3508284416,3508284671,AU
-3508284672,3508284735,JP
-3508284736,3508284927,US
-3508284928,3508284991,ES
-3508284992,3508285087,US
-3508285088,3508285095,ES
-3508285096,3508285119,US
-3508285120,3508285151,ES
-3508285152,3508285823,US
-3508285824,3508285855,ES
-3508285856,3508285887,US
-3508285888,3508285951,GB
-3508285952,3508286015,NL
-3508286016,3508286079,US
-3508286080,3508286111,NL
-3508286112,3508286207,US
+3508284672,3508286207,US
3508286208,3508286463,SE
3508286464,3508286719,HK
-3508286720,3508286847,US
-3508286848,3508286863,TW
-3508286864,3508286911,US
-3508286912,3508286927,PH
-3508286928,3508286943,US
-3508286944,3508286975,ID
-3508286976,3508287039,TH
-3508287040,3508287055,US
-3508287056,3508287063,TH
-3508287064,3508287103,US
-3508287104,3508287167,HK
-3508287168,3508287231,US
-3508287232,3508287263,HK
-3508287264,3508287295,US
-3508287296,3508287359,HK
-3508287360,3508287999,US
-3508288000,3508288127,MY
-3508288128,3508288255,SG
+3508286720,3508288255,US
3508288256,3508288511,JP
3508288512,3508289023,US
3508289024,3508289279,AU
-3508289280,3508289343,BR
-3508289344,3508289407,US
-3508289408,3508289471,BR
-3508289472,3508289535,US
+3508289280,3508289535,US
3508289536,3508289791,CA
-3508289792,3508290847,US
-3508290848,3508290879,MX
-3508290880,3508290895,US
-3508290896,3508290911,BR
-3508290912,3508290927,US
-3508290928,3508290943,BR
-3508290944,3508291263,US
-3508291264,3508291327,IT
+3508289792,3508291327,US
3508291328,3508292095,GB
3508292096,3508292351,CH
-3508292352,3508292415,US
-3508292416,3508292447,CL
-3508292448,3508292863,US
+3508292352,3508292863,US
3508292864,3508294143,DE
-3508294144,3508295439,US
-3508295440,3508295487,BR
-3508295488,3508295519,GB
-3508295520,3508295551,US
-3508295552,3508295615,BR
-3508295616,3508295631,ES
-3508295632,3508295679,US
+3508294144,3508295679,US
3508295680,3508295935,GB
-3508295936,3508295999,US
-3508296000,3508296015,BR
-3508296016,3508296095,US
-3508296096,3508296127,BR
-3508296128,3508296191,US
-3508296192,3508296319,GB
-3508296320,3508296447,US
-3508296448,3508296479,GB
-3508296480,3508296495,BE
-3508296496,3508296543,US
-3508296544,3508296559,SE
-3508296560,3508296671,US
-3508296672,3508296703,GB
-3508296704,3508296767,FR
-3508296768,3508296831,US
-3508296832,3508296959,NO
+3508295936,3508296959,US
3508296960,3508297215,CH
-3508297216,3508297407,GB
-3508297408,3508297471,SG
+3508297216,3508297471,US
3508297472,3508297727,IT
-3508297728,3508297791,CH
-3508297792,3508298047,US
-3508298048,3508298079,BE
-3508298080,3508298111,US
-3508298112,3508298159,BE
-3508298160,3508298207,US
-3508298208,3508298223,BE
-3508298224,3508298239,US
+3508297728,3508298239,US
3508298240,3508298495,DE
-3508298496,3508298559,DK
-3508298560,3508298623,US
-3508298624,3508298655,DK
-3508298656,3508298687,US
-3508298688,3508298751,DK
+3508298496,3508298751,US
3508298752,3508299007,ES
3508299008,3508299263,BE
3508299264,3508299519,GB
-3508299520,3508299647,US
-3508299648,3508299679,CH
-3508299680,3508299775,US
+3508299520,3508299775,US
3508299776,3508300031,SE
3508300032,3508300287,DE
3508300288,3508300543,US
3508300544,3508300799,FR
-3508300800,3508300863,US
-3508300864,3508300879,GB
-3508300880,3508300895,US
-3508300896,3508300911,GB
-3508300912,3508301631,US
-3508301632,3508301663,BR
-3508301664,3508301823,US
-3508301824,3508301951,GB
-3508301952,3508301983,DK
-3508301984,3508301999,IT
-3508302000,3508302079,US
-3508302080,3508302111,DE
-3508302112,3508302207,US
-3508302208,3508302223,DE
-3508302224,3508302239,US
-3508302240,3508302255,GB
-3508302256,3508302335,US
-3508302336,3508302463,SG
-3508302464,3508302527,BE
-3508302528,3508302623,US
-3508302624,3508302687,BE
-3508302688,3508303359,US
-3508303360,3508303391,BE
-3508303392,3508303423,US
-3508303424,3508303439,BE
-3508303440,3508303455,US
-3508303456,3508303471,BE
-3508303472,3508303487,US
-3508303488,3508303551,ES
-3508303552,3508303615,US
+3508300800,3508303615,US
3508303616,3508303871,DE
-3508303872,3508303903,US
-3508303904,3508303935,CL
-3508303936,3508303951,US
-3508303952,3508303967,CO
-3508303968,3508303983,US
-3508303984,3508303999,BR
-3508304000,3508304383,US
+3508303872,3508304383,US
3508304384,3508304639,DE
-3508304640,3508304703,IR
-3508304704,3508304927,US
-3508304928,3508304943,DE
-3508304944,3508305151,US
-3508305152,3508305215,NL
-3508305216,3508305247,US
-3508305248,3508305263,NL
-3508305264,3508305791,US
-3508305792,3508305823,CO
-3508305824,3508305855,US
-3508305856,3508305871,BE
-3508305872,3508306431,US
-3508306432,3508306687,EC
-3508306688,3508306943,US
+3508304640,3508306943,US
3508306944,3508307199,CH
3508307200,3508308991,US
3508308992,3508309247,BE
@@ -156103,25 +83606,17 @@
3508310784,3508311039,BE
3508311040,3508311295,NL
3508311296,3508311807,IE
-3508311808,3508311967,US
-3508311968,3508311983,DE
-3508311984,3508312063,US
+3508311808,3508312063,US
3508312064,3508312319,NL
3508312320,3508312575,CH
-3508312576,3508312591,ES
-3508312592,3508312831,US
+3508312576,3508312831,US
3508312832,3508313343,DE
3508313344,3508313599,SE
3508313600,3508313855,DK
3508313856,3508314367,GB
3508314368,3508314623,US
3508314624,3508314879,DK
-3508314880,3508314911,US
-3508314912,3508314927,FR
-3508314928,3508314943,US
-3508314944,3508314959,CH
-3508314960,3508314975,PT
-3508314976,3508315135,US
+3508314880,3508315135,US
3508315136,3508315391,NO
3508315392,3508315647,US
3508315648,3508315903,FR
@@ -156130,12 +83625,7 @@
3508316416,3508316671,GB
3508316672,3508316927,US
3508316928,3508317183,SE
-3508317184,3508317199,US
-3508317200,3508317207,RU
-3508317208,3508317231,US
-3508317232,3508317247,AT
-3508317248,3508317375,US
-3508317376,3508317439,FR
+3508317184,3508317439,US
3508317440,3508317695,DE
3508317696,3508317951,US
3508317952,3508318463,FI
@@ -156145,27 +83635,13 @@
3508319488,3508319743,RU
3508319744,3508319999,CH
3508320000,3508320255,SE
-3508320256,3508320383,PT
-3508320384,3508320511,US
-3508320512,3508320527,DE
-3508320528,3508320543,PT
-3508320544,3508320767,US
+3508320256,3508320767,US
3508320768,3508321791,BE
-3508321792,3508321823,NL
-3508321824,3508321855,ZA
-3508321856,3508321871,FR
-3508321872,3508321887,SE
-3508321888,3508322111,US
-3508322112,3508322143,PL
-3508322144,3508322175,US
-3508322176,3508322191,CH
-3508322192,3508322239,US
-3508322240,3508322303,CH
+3508321792,3508322303,US
3508322304,3508322559,GB
3508322560,3508322815,FI
3508322816,3508323071,NO
-3508323072,3508323135,DE
-3508323136,3508323327,US
+3508323072,3508323327,US
3508323328,3508323583,NO
3508323584,3508323839,DE
3508323840,3508324095,FI
@@ -156174,10 +83650,7 @@
3508324608,3508324863,NO
3508324864,3508325119,GB
3508325120,3508325375,DE
-3508325376,3508325471,GR
-3508325472,3508325503,US
-3508325504,3508325567,GB
-3508325568,3508325631,US
+3508325376,3508325631,US
3508325632,3508325887,ZA
3508325888,3508326399,SE
3508326400,3508326655,GB
@@ -156189,32 +83662,18 @@
3508328448,3508328703,BE
3508328704,3508329471,IL
3508329472,3508329727,NL
-3508329728,3508329983,FR
+3508329728,3508329983,US
3508329984,3508330495,SE
3508330496,3508331263,GB
3508331264,3508331519,BE
-3508331520,3508331583,FR
-3508331584,3508331711,US
-3508331712,3508331743,FR
-3508331744,3508331775,US
-3508331776,3508331807,IT
-3508331808,3508331839,US
-3508331840,3508331871,AT
-3508331872,3508332031,US
+3508331520,3508332031,US
3508332032,3508332287,GB
3508332288,3508332543,GR
3508332544,3508332799,IE
3508332800,3508333055,NO
-3508333056,3508333183,GB
-3508333184,3508333311,US
+3508333056,3508333311,US
3508333312,3508333823,CH
-3508333824,3508333951,GB
-3508333952,3508334079,US
-3508334080,3508334207,GB
-3508334208,3508334335,US
-3508334336,3508334463,DE
-3508334464,3508334527,GB
-3508334528,3508334591,US
+3508333824,3508334591,US
3508334592,3508334847,AU
3508334848,3508335103,SG
3508335104,3508335359,MY
@@ -156227,435 +83686,197 @@
3508337152,3508337663,PH
3508337664,3508337919,KR
3508337920,3508338175,JP
-3508338176,3508338303,HK
-3508338304,3508338335,ID
-3508338336,3508338367,US
-3508338368,3508338399,SG
-3508338400,3508338431,US
+3508338176,3508338431,US
3508338432,3508338687,KR
3508338688,3508404223,CA
3508404224,3508690943,US
3508690944,3508695039,CA
-3508695040,3508729935,US
-3508729936,3508729951,GB
-3508729952,3508761120,US
-3508761121,3508761136,BE
-3508761137,3508761184,US
-3508761185,3508761200,BE
-3508761201,3508780079,US
-3508780080,3508780111,NL
-3508780112,3508780623,US
-3508780624,3508780639,IT
-3508780640,3509144575,US
+3508695040,3509144575,US
3509144576,3509144831,BR
-3509144832,3509145487,US
-3509145488,3509145495,BR
-3509145496,3509151375,US
-3509151376,3509151391,CA
-3509151392,3509151407,US
-3509151408,3509151423,CA
-3509151424,3509151439,US
-3509151440,3509151455,CA
-3509151456,3509151663,US
-3509151664,3509151679,PA
-3509151680,3509151695,US
-3509151696,3509151727,MX
-3509151728,3509157887,US
+3509144832,3509157887,US
3509157888,3509166079,CA
3509166080,3509215231,US
3509215232,3509223423,CA
3509223424,3509305599,US
3509305600,3509305615,GB
-3509305616,3509326079,US
-3509326080,3509326087,CA
-3509326088,3509346303,US
+3509305616,3509346303,US
3509346304,3509350711,CA
3509350712,3509350719,US
3509350720,3509354495,CA
3509354496,3509387263,US
3509387264,3509420031,PE
-3509420032,3509518591,US
-3509518592,3509518815,CA
-3509518816,3509518831,US
-3509518832,3509519359,CA
-3509519360,3509519423,US
-3509519424,3509519647,CA
-3509519648,3509519679,US
-3509519680,3509519711,CA
-3509519712,3509519727,US
-3509519728,3509520511,CA
-3509520512,3509520639,US
-3509520640,3509520831,CA
-3509520832,3509520895,US
+3509420032,3509518847,US
+3509518848,3509519103,CA
+3509519104,3509519871,US
+3509519872,3509520127,CA
+3509520128,3509520895,US
3509520896,3509521151,CA
3509521152,3509521407,US
-3509521408,3509521791,CA
-3509521792,3509521919,US
-3509521920,3509522431,CA
+3509521408,3509521663,CA
+3509521664,3509522175,US
+3509522176,3509522431,CA
3509522432,3509522687,KW
-3509522688,3509523071,CA
-3509523072,3509523199,US
-3509523200,3509523327,CA
-3509523328,3509523391,US
-3509523392,3509523455,CA
-3509523456,3509523471,US
-3509523472,3509523775,CA
-3509523776,3509523839,US
-3509523840,3509523903,CA
-3509523904,3509524223,US
+3509522688,3509522943,CA
+3509522944,3509523679,US
+3509523680,3509523695,CA
+3509523696,3509524223,US
3509524224,3509524735,CA
3509524736,3509524991,US
-3509524992,3509525823,CA
-3509525824,3509525887,US
-3509525888,3509526815,CA
-3509526816,3509526879,US
-3509526880,3509527071,CA
-3509527072,3509527119,US
-3509527120,3509527199,CA
-3509527200,3509527215,US
-3509527216,3509527551,CA
-3509527552,3509527807,US
-3509527808,3509528319,CA
-3509528320,3509528831,US
-3509528832,3509529343,CA
-3509529344,3509529599,US
-3509529600,3509529727,CA
-3509529728,3509529823,US
-3509529824,3509529887,CA
-3509529888,3509529951,US
-3509529952,3509530239,CA
-3509530240,3509530367,US
-3509530368,3509530559,CA
-3509530560,3509530623,US
+3509524992,3509525759,CA
+3509525760,3509526015,US
+3509526016,3509526271,CA
+3509526272,3509526527,US
+3509526528,3509526783,CA
+3509526784,3509527807,US
+3509527808,3509528063,CA
+3509528064,3509529087,US
+3509529088,3509529215,CA
+3509529216,3509530623,US
3509530624,3509532671,CA
3509532672,3509532927,US
-3509532928,3509533471,CA
-3509533472,3509533535,US
-3509533536,3509533567,CA
-3509533568,3509533599,US
-3509533600,3509533823,CA
-3509533824,3509534335,US
-3509534336,3509534367,CA
-3509534368,3509534719,US
-3509534720,3509535535,CA
-3509535536,3509535551,US
-3509535552,3509535663,CA
-3509535664,3509535679,US
-3509535680,3509536895,CA
-3509536896,3509537023,US
-3509537024,3509538335,CA
-3509538336,3509538351,US
-3509538352,3509538399,CA
-3509538400,3509538415,US
-3509538416,3509538447,CA
-3509538448,3509538463,NO
-3509538464,3509538815,CA
+3509532928,3509533439,CA
+3509533440,3509534719,US
+3509534720,3509535999,CA
+3509536000,3509536255,US
+3509536256,3509536767,CA
+3509536768,3509537279,US
+3509537280,3509538303,CA
+3509538304,3509538559,US
+3509538560,3509538815,CA
3509538816,3509539071,US
3509539072,3509539327,CA
3509539328,3509539583,US
-3509539584,3509539679,CA
-3509539680,3509539695,US
-3509539696,3509539727,CA
-3509539728,3509539743,US
-3509539744,3509539823,CA
-3509539824,3509539839,US
-3509539840,3509539903,CA
-3509539904,3509539967,US
-3509539968,3509540095,CA
-3509540096,3509540127,US
-3509540128,3509540351,CA
-3509540352,3509540607,US
-3509540608,3509541663,CA
-3509541664,3509541695,US
-3509541696,3509541951,CA
-3509541952,3509541999,US
-3509542000,3509542063,CA
-3509542064,3509542079,US
-3509542080,3509542399,CA
-3509542400,3509542655,US
-3509542656,3509544447,CA
+3509539584,3509540095,CA
+3509540096,3509540607,US
+3509540608,3509541503,CA
+3509541504,3509541631,US
+3509541632,3509541887,CA
+3509541888,3509542911,US
+3509542912,3509543167,CA
+3509543168,3509543423,US
+3509543424,3509543935,CA
+3509543936,3509544191,US
+3509544192,3509544447,CA
3509544448,3509544703,US
-3509544704,3509545151,CA
-3509545152,3509545471,US
-3509545472,3509545999,CA
-3509546000,3509546015,US
-3509546016,3509546031,CA
-3509546032,3509546063,US
-3509546064,3509546159,CA
-3509546160,3509546175,US
-3509546176,3509546207,CA
-3509546208,3509546223,US
-3509546224,3509549823,CA
-3509549824,3509550079,US
-3509550080,3509553151,CA
-3509553152,3509553407,US
-3509553408,3509553855,CA
-3509553856,3509553919,US
-3509553920,3509555119,CA
-3509555120,3509555135,US
-3509555136,3509557439,CA
-3509557440,3509557759,US
-3509557760,3509558367,CA
-3509558368,3509558399,US
-3509558400,3509558463,CA
-3509558464,3509558495,US
-3509558496,3509558527,CA
-3509558528,3509558559,US
-3509558560,3509558783,CA
-3509558784,3509559039,US
+3509544704,3509544959,CA
+3509544960,3509546095,US
+3509546096,3509546111,CA
+3509546112,3509546495,US
+3509546496,3509547007,CA
+3509547008,3509551359,US
+3509551360,3509551871,CA
+3509551872,3509552127,US
+3509552128,3509552639,CA
+3509552640,3509553919,US
+3509553920,3509554959,CA
+3509554960,3509555199,US
+3509555200,3509556735,CA
+3509556736,3509557759,US
+3509557760,3509558015,CA
+3509558016,3509559039,US
3509559040,3509559295,KW
-3509559296,3509560319,CA
-3509560320,3509560703,US
-3509560704,3509561215,CA
-3509561216,3509561279,US
-3509561280,3509562623,CA
-3509562624,3509562751,US
-3509562752,3509562879,CA
-3509562880,3509563167,US
-3509563168,3509565087,CA
-3509565088,3509565119,US
-3509565120,3509566799,CA
-3509566800,3509566815,US
-3509566816,3509566847,CA
-3509566848,3509566863,US
-3509566864,3509566927,CA
-3509566928,3509566943,US
-3509566944,3509567151,CA
-3509567152,3509567167,US
-3509567168,3509567199,CA
-3509567200,3509567231,US
+3509559296,3509559807,CA
+3509559808,3509560063,US
+3509560064,3509560319,CA
+3509560320,3509560831,US
+3509560832,3509561087,CA
+3509561088,3509561343,US
+3509561344,3509562623,CA
+3509562624,3509563391,US
+3509563392,3509564159,CA
+3509564160,3509564415,US
+3509564416,3509564927,CA
+3509564928,3509565183,US
+3509565184,3509566463,CA
+3509566464,3509567231,US
3509567232,3509569023,CA
3509569024,3509569535,US
-3509569536,3509569919,CA
-3509569920,3509570047,US
-3509570048,3509570431,CA
-3509570432,3509570687,US
-3509570688,3509571583,CA
-3509571584,3509571647,US
-3509571648,3509571663,CA
-3509571664,3509571839,US
+3509569536,3509569791,CA
+3509569792,3509570815,US
+3509570816,3509571583,CA
+3509571584,3509571839,US
3509571840,3509572095,CA
-3509572096,3509572223,US
-3509572224,3509573487,CA
-3509573488,3509573503,US
-3509573504,3509573887,CA
-3509573888,3509573919,US
-3509573920,3509575695,CA
-3509575696,3509575999,US
-3509576000,3509576063,CA
-3509576064,3509576191,US
-3509576192,3509576255,CA
-3509576256,3509576271,US
-3509576272,3509576703,CA
+3509572096,3509572351,US
+3509572352,3509573375,CA
+3509573376,3509573439,US
+3509573440,3509573455,CA
+3509573456,3509573631,US
+3509573632,3509573887,CA
+3509573888,3509574143,US
+3509574144,3509575679,CA
+3509575680,3509575935,US
+3509575936,3509576191,CA
+3509576192,3509576447,US
+3509576448,3509576703,CA
3509576704,3509576959,US
-3509576960,3509577407,CA
-3509577408,3509577471,US
-3509577472,3509577535,CA
-3509577536,3509577551,US
-3509577552,3509577727,CA
-3509577728,3509577983,US
-3509577984,3509578367,CA
-3509578368,3509578495,US
-3509578496,3509579263,CA
-3509579264,3509579327,US
-3509579328,3509579455,CA
-3509579456,3509579519,US
+3509576960,3509577215,CA
+3509577216,3509577983,US
+3509577984,3509578239,CA
+3509578240,3509578495,US
+3509578496,3509578751,CA
+3509578752,3509579007,US
+3509579008,3509579263,CA
+3509579264,3509579519,US
3509579520,3509579775,CA
3509579776,3509580031,US
3509580032,3509580287,CA
-3509580288,3509580671,US
-3509580672,3509581087,CA
-3509581088,3509581119,US
-3509581120,3509581199,CA
-3509581200,3509581215,US
-3509581216,3509581231,CA
-3509581232,3509581247,US
-3509581248,3509581263,CA
-3509581264,3509581279,US
-3509581280,3509581375,CA
-3509581376,3509581407,US
-3509581408,3509581503,CA
-3509581504,3509581567,US
-3509581568,3509581823,CA
-3509581824,3509582335,US
+3509580288,3509580799,US
+3509580800,3509581055,CA
+3509581056,3509582335,US
3509582336,3509582847,CA
3509582848,3509583615,US
3509583616,3509583871,CA
3509583872,3509731327,US
3509731328,3509739519,CA
-3509739520,3509773991,US
-3509773992,3509774003,GR
-3509774004,3509774013,US
-3509774014,3509774033,GB
-3509774034,3509774120,US
-3509774121,3509774135,GB
-3509774136,3509774138,US
-3509774139,3509774163,GB
-3509774164,3509774263,US
-3509774264,3509774295,HR
-3509774296,3509774575,US
-3509774576,3509774591,GR
-3509774592,3509775104,US
-3509775105,3509775120,CA
-3509775121,3509775296,US
-3509775297,3509775312,GB
-3509775313,3509775444,US
-3509775445,3509775454,TH
-3509775455,3509775477,US
-3509775478,3509775492,CA
-3509775493,3509775504,US
-3509775505,3509775520,NL
-3509775521,3509775536,US
-3509775537,3509775552,DK
-3509775553,3509775584,US
-3509775585,3509775614,DE
-3509775615,3509775616,US
-3509775617,3509775648,DE
-3509775649,3509775664,CA
-3509775665,3509775792,US
-3509775793,3509775870,CA
-3509775871,3509775903,US
-3509775904,3509775919,AU
-3509775920,3509775943,US
-3509775944,3509775951,IT
-3509775952,3509776023,US
-3509776024,3509776031,CA
-3509776032,3509776047,US
-3509776048,3509776055,SA
-3509776056,3509776095,US
-3509776096,3509776103,AU
-3509776104,3509776111,US
-3509776112,3509776119,IT
-3509776120,3509777167,US
-3509777168,3509777175,RU
-3509777176,3509777215,US
-3509777216,3509777223,TH
-3509777224,3509777449,US
-3509777450,3509777545,ID
-3509777546,3509777584,US
-3509777585,3509777648,ID
-3509777649,3509778239,US
-3509778240,3509778271,IN
-3509778272,3509778919,US
-3509778920,3509778927,GB
-3509778928,3509779007,US
-3509779008,3509779039,IN
-3509779040,3509822335,US
-3509822336,3509822351,DE
-3509822352,3509830287,US
-3509830288,3509830295,BE
-3509830296,3509830407,US
-3509830408,3509830415,GB
-3509830416,3509830943,US
-3509830944,3509830951,BE
-3509830952,3509831135,US
-3509831136,3509831143,IN
-3509831144,3509831535,US
-3509831536,3509831551,LB
-3509831552,3509831615,US
-3509831616,3509831647,IL
-3509831648,3509831735,US
-3509831736,3509831743,AT
-3509831744,3509831807,US
-3509831808,3509831815,IN
-3509831816,3509831823,CA
-3509831824,3509833103,US
-3509833104,3509833111,IN
-3509833112,3509833535,US
-3509833536,3509833543,CA
-3509833544,3509833551,IN
-3509833552,3509833703,US
-3509833704,3509833711,ZA
-3509833712,3509834111,US
-3509834112,3509834143,IL
-3509834144,3509834495,US
-3509834496,3509834503,NO
-3509834504,3509834519,US
-3509834520,3509834527,BD
-3509834528,3509834591,US
-3509834592,3509834599,IN
-3509834600,3509834831,US
-3509834832,3509834847,CO
-3509834848,3509835103,US
-3509835104,3509835111,GB
-3509835112,3509837167,US
-3509837168,3509837175,GB
-3509837176,3509837623,US
-3509837624,3509837639,GB
-3509837640,3509837751,US
-3509837752,3509837759,GB
-3509837760,3509846015,US
+3509739520,3509846015,US
3509846016,3509977087,CA
3509977088,3509993471,US
3509993472,3509997567,CA
3509997568,3510005759,US
-3510005760,3510009855,CA
-3510009856,3510010311,US
-3510010312,3510010319,CA
-3510010320,3510239231,US
-3510239232,3510240607,CA
-3510240608,3510240639,US
-3510240640,3510240703,CA
-3510240704,3510240735,AM
-3510240736,3510240743,US
-3510240744,3510240767,CA
-3510240768,3510241023,US
-3510241024,3510241063,CA
-3510241064,3510241071,US
-3510241072,3510242303,CA
+3510005760,3510009343,CA
+3510009344,3510240743,US
+3510240744,3510240751,CA
+3510240752,3510242303,US
3510242304,3510242559,OM
-3510242560,3510245375,CA
+3510242560,3510245375,US
3510245376,3510245631,BD
-3510245632,3510246728,CA
-3510246729,3510246729,US
-3510246730,3510246735,CA
-3510246736,3510246775,US
-3510246776,3510249471,CA
+3510245632,3510249471,US
3510249472,3510249983,QA
-3510249984,3510251519,CA
+3510249984,3510251519,US
3510251520,3510252799,DO
-3510252800,3510253311,CA
+3510252800,3510253311,US
3510253312,3510253567,NC
-3510253568,3510253631,US
-3510253632,3510253759,CA
-3510253760,3510253775,US
-3510253776,3510255423,CA
-3510255424,3510255447,US
-3510255448,3510261503,CA
+3510253568,3510254079,US
+3510254080,3510254591,CA
+3510254592,3510257663,US
+3510257664,3510258175,CA
+3510258176,3510261503,US
3510261504,3510261759,ZM
-3510261760,3510262783,CA
-3510262784,3510263039,US
-3510263040,3510264063,CA
+3510261760,3510263295,US
+3510263296,3510263551,CA
+3510263552,3510264063,US
3510264064,3510264319,UG
-3510264320,3510268671,CA
+3510264320,3510265087,US
+3510265088,3510265343,CA
+3510265344,3510268415,US
+3510268416,3510268671,CA
3510268672,3510268927,SY
-3510268928,3510269823,CA
-3510269824,3510269951,CO
+3510268928,3510269951,US
3510269952,3510270719,LY
3510270720,3510270975,SY
-3510270976,3510271999,CA
-3510272000,3510284423,US
-3510284424,3510284431,CA
-3510284432,3510312959,US
-3510312960,3510321151,US
+3510270976,3510321151,US
3510321152,3510321663,VG
3510321664,3510321919,AG
3510321920,3510322175,KN
3510322176,3510323199,AG
3510323200,3510324223,KN
3510324224,3510325247,AI
-3510325248,3510325503,AG
-3510325504,3510325759,KN
-3510325760,3510326271,AG
+3510325248,3510326271,AG
3510326272,3510327295,VG
3510327296,3510328319,AG
3510328320,3510328575,KN
3510328576,3510328831,MS
-3510328832,3510329279,AG
-3510329280,3510329295,MS
-3510329296,3510329303,AG
-3510329304,3510329311,MS
-3510329312,3510329599,AG
+3510328832,3510329599,AG
3510329600,3510329855,MS
3510329856,3510331391,AG
3510331392,3510332415,DM
@@ -156675,147 +83896,32 @@
3510479792,3510479799,IE
3510479800,3510788447,US
3510788448,3510788479,GB
-3510788480,3510831527,US
-3510831528,3510831535,GB
-3510831536,3510833423,US
-3510833424,3510833439,CA
-3510833440,3510836671,US
-3510836672,3510836687,CA
-3510836688,3510839135,US
-3510839136,3510839151,GB
-3510839152,3510839215,US
-3510839216,3510839231,GB
-3510839232,3510839311,US
-3510839312,3510839327,IN
-3510839328,3510843087,US
-3510843088,3510843095,CA
-3510843096,3510843103,GB
-3510843104,3510844415,US
+3510788480,3510844415,US
3510844416,3510844927,CA
-3510844928,3510846527,US
-3510846528,3510846559,CA
-3510846560,3510897442,US
-3510897443,3510897443,IE
-3510897444,3510935551,US
+3510844928,3510935551,US
3510935552,3510943743,CA
3510943744,3511140351,US
3511140352,3511156735,CA
-3511156736,3511331199,US
-3511331200,3511331231,CA
-3511331232,3511335231,US
-3511335232,3511335263,RU
-3511335264,3511335295,US
-3511335296,3511335423,RU
-3511335424,3511419951,US
-3511419952,3511419959,UA
-3511419960,3511812095,US
+3511156736,3511314431,US
+3511316480,3511812095,US
3511812096,3511844863,CA
-3511844864,3512011311,US
-3512011312,3512011327,UM
-3512011328,3512011359,US
-3512011360,3512011375,TR
-3512011376,3512011807,US
-3512011808,3512011823,TW
-3512011824,3512011855,US
-3512011856,3512011871,SE
-3512011872,3512012095,US
+3511844864,3512012095,US
3512012096,3512012159,GB
-3512012160,3512012175,MX
-3512012176,3512012255,US
-3512012256,3512012287,GB
-3512012288,3512013583,US
-3512013584,3512013599,CA
-3512013600,3512013647,US
-3512013648,3512013663,CA
-3512013664,3512013679,US
-3512013680,3512013695,GR
-3512013696,3512016543,US
-3512016544,3512016559,IT
-3512016560,3512016575,US
-3512016576,3512016591,TW
-3512016592,3512016607,US
-3512016608,3512016623,CA
-3512016624,3512016767,GB
-3512016768,3512016831,US
-3512016832,3512016895,JO
-3512016896,3512017183,US
-3512017184,3512017199,AR
-3512017200,3512017231,US
-3512017232,3512017247,ES
-3512017248,3512017263,MX
-3512017264,3512017279,GB
-3512017280,3512017359,US
-3512017360,3512017375,RU
-3512017376,3512017407,GB
+3512012160,3512017407,US
3512017408,3512017663,BR
-3512017664,3512017695,CA
-3512017696,3512017727,RU
-3512017728,3512017743,US
-3512017744,3512017759,IT
-3512017760,3512017791,US
-3512017792,3512017807,LT
-3512017808,3512017823,US
-3512017824,3512017855,JO
-3512017856,3512019071,US
-3512019072,3512019135,GB
+3512017664,3512019135,US
3512019136,3512019151,MX
-3512019152,3512019199,US
-3512019200,3512019263,ES
-3512019264,3512019295,US
-3512019296,3512019311,CA
-3512019312,3512019327,US
-3512019328,3512019359,CA
-3512019360,3512020095,US
-3512020096,3512020223,ES
-3512020224,3512020479,US
-3512020480,3512020511,GB
-3512020512,3512021503,US
+3512019152,3512021503,US
3512021504,3512021759,GB
-3512021760,3512022335,US
-3512022336,3512022399,ES
-3512022400,3512022431,US
-3512022432,3512022447,IN
-3512022448,3512022463,GB
-3512022464,3512023807,US
-3512023808,3512023839,CA
-3512023840,3512023855,GB
-3512023856,3512023887,US
-3512023888,3512023903,MX
-3512023904,3512023999,US
-3512024000,3512024063,BR
-3512024064,3512024319,US
+3512021760,3512024319,US
3512024320,3512024575,AU
-3512024576,3512024591,CA
-3512024592,3512025087,US
-3512025088,3512025103,CA
-3512025104,3512025183,US
-3512025184,3512025215,CA
-3512025216,3512025343,US
-3512025344,3512025359,CA
-3512025360,3512027391,US
-3512027392,3512027519,AU
-3512027520,3512028271,US
-3512028272,3512028287,GB
-3512028288,3512029119,US
-3512029120,3512029135,CA
-3512029136,3512029263,US
-3512029264,3512029279,CA
-3512029280,3512031295,US
-3512031296,3512031359,JO
-3512031360,3512031375,CA
-3512031376,3512031535,US
-3512031536,3512031551,CA
-3512031552,3512031759,US
-3512031760,3512031775,CA
-3512031776,3512037247,US
-3512037248,3512037311,AU
-3512037312,3512038863,US
-3512038864,3512038879,CA
-3512038880,3512040143,US
-3512040144,3512040159,CA
-3512040160,3512045055,US
+3512024576,3512043519,US
+3512043520,3512043775,FI
+3512043776,3512045055,US
3512045056,3512045311,IE
-3512045312,3512053247,US
+3512045312,3512052735,US
+3512052736,3512052991,FI
+3512052992,3512053247,US
3512053248,3512053503,MY
3512053504,3512066559,US
3512066560,3512066815,BE
@@ -156832,22 +83938,17 @@
3512205824,3512206079,AW
3512206080,3512206335,CL
3512206336,3512207103,HN
-3512207104,3512207231,NI
-3512207232,3512207359,US
+3512207104,3512207359,US
3512207360,3512209407,CO
-3512209408,3512210687,US
-3512210688,3512210943,NA
+3512209408,3512210943,US
3512210944,3512211199,CL
3512211200,3512211455,AR
-3512211456,3512221439,US
-3512221440,3512221471,CO
-3512221472,3512221695,US
+3512211456,3512221695,US
3512221696,3512221759,AG
3512221760,3512221791,GP
3512221792,3512221951,AG
3512221952,3512222207,VG
-3512222208,3512222239,AG
-3512222240,3512222271,VG
+3512222208,3512222271,AG
3512222272,3512222335,KN
3512222336,3512222463,AG
3512222464,3512222975,AI
@@ -156856,30 +83957,14 @@
3512225792,3512227839,PR
3512227840,3512229887,ZW
3512229888,3512230143,VE
-3512230144,3512230271,US
-3512230272,3512230287,CA
-3512230288,3512230399,US
-3512230400,3512230431,CO
-3512230432,3512230911,US
+3512230144,3512230911,US
3512230912,3512231167,CL
-3512231168,3512231199,VE
-3512231200,3512231295,US
-3512231296,3512231423,VE
+3512231168,3512231423,US
3512231424,3512231679,CL
3512231680,3512231935,VE
-3512231936,3512231967,CO
-3512231968,3512232063,US
-3512232064,3512232127,CO
-3512232128,3512232191,US
-3512232192,3512232223,CO
-3512232224,3512232319,US
-3512232320,3512232351,CO
-3512232352,3512233215,US
+3512231936,3512233215,US
3512233216,3512233471,CL
-3512233472,3512233503,VE
-3512233504,3512233599,US
-3512233600,3512233631,CO
-3512233632,3512233727,US
+3512233472,3512233727,US
3512233728,3512233983,HN
3512233984,3512236031,ZA
3512236032,3512236287,US
@@ -156897,12 +83982,8 @@
3512246784,3512247039,US
3512247040,3512247295,NG
3512247296,3512248319,US
-3512248320,3512248863,CO
-3512248864,3512248927,US
-3512248928,3512248959,CO
-3512248960,3512249023,US
-3512249024,3512249055,CO
-3512249056,3512249087,US
+3512248320,3512248831,CO
+3512248832,3512249087,CL
3512249088,3512249343,CO
3512249344,3512256511,IL
3512256512,3512258559,CL
@@ -156922,429 +84003,94 @@
3512269824,3512270847,US
3512270848,3512336383,CA
3512336384,3512369151,US
-3512369152,3512371343,CA
-3512371344,3512371351,US
-3512371352,3512378983,CA
-3512378984,3512378991,US
-3512378992,3512381583,CA
-3512381584,3512381591,US
-3512381592,3512385535,CA
+3512369152,3512385535,CA
3512385536,3512397823,US
3512397824,3512401919,CA
3512401920,3512418303,US
3512418304,3512451071,CA
-3512451072,3512467455,PR
-3512467456,3512534015,US
-3512534016,3512534079,BR
-3512534080,3512535679,US
-3512535680,3512535743,CA
-3512535744,3512535935,US
-3512535936,3512536063,DE
-3512536064,3512536191,US
-3512536192,3512536319,HK
-3512536320,3512536383,CO
-3512536384,3512536447,US
-3512536448,3512536511,ES
-3512536512,3512536575,US
-3512536576,3512536703,MX
-3512536704,3512537087,US
-3512537088,3512537151,CL
-3512537152,3512537215,DK
-3512537216,3512537599,US
+3512451072,3512459519,PR
+3512459520,3512459775,US
+3512459776,3512460031,PR
+3512460032,3512460287,US
+3512460288,3512460543,PR
+3512460544,3512461055,US
+3512461056,3512463103,PR
+3512463104,3512463359,US
+3512463360,3512464639,PR
+3512464640,3512465151,US
+3512465152,3512465407,PR
+3512465408,3512465663,US
+3512465664,3512465919,PR
+3512465920,3512466175,US
+3512466176,3512466687,PR
+3512466688,3512466943,US
+3512466944,3512467455,PR
+3512467456,3512537599,US
3512537600,3512537855,CA
-3512537856,3512537983,US
-3512537984,3512538111,BR
-3512538112,3512538495,US
-3512538496,3512538623,VE
-3512538624,3512539007,US
-3512539008,3512539135,ID
-3512539136,3512539327,US
-3512539328,3512539391,CO
-3512539392,3512539903,US
-3512539904,3512540031,MX
-3512540032,3512540287,US
-3512540288,3512540295,TH
-3512540296,3512540351,US
-3512540352,3512540415,CO
-3512540416,3512541055,US
-3512541056,3512541119,CO
-3512541120,3512541231,US
-3512541232,3512541247,SE
-3512541248,3512541279,US
-3512541280,3512541295,IT
-3512541296,3512541439,US
-3512541440,3512541583,IT
-3512541584,3512541599,US
-3512541600,3512541615,IT
-3512541616,3512541631,US
-3512541632,3512541695,IT
-3512541696,3512541921,NO
-3512541922,3512542207,US
-3512542208,3512542239,SE
-3512542240,3512542719,US
-3512542720,3512542751,DE
-3512542752,3512542975,US
-3512542976,3512543023,IL
-3512543024,3512543743,US
-3512543744,3512543903,FI
-3512543904,3512543999,US
-3512544000,3512544063,DE
-3512544064,3512544071,ID
-3512544072,3512544079,TW
-3512544080,3512544087,MY
-3512544088,3512544095,US
-3512544096,3512544103,HK
-3512544104,3512544111,JP
-3512544112,3512544255,US
-3512544256,3512544335,GB
-3512544336,3512544383,US
-3512544384,3512544447,GB
-3512544448,3512544511,US
-3512544512,3512544527,DE
-3512544528,3512544575,US
-3512544576,3512544639,DE
-3512544640,3512544767,US
-3512544768,3512544799,NO
-3512544800,3512544831,US
-3512544832,3512544911,NO
-3512544912,3512545023,US
-3512545024,3512545151,TW
-3512545152,3512545407,US
-3512545408,3512545439,GB
-3512545440,3512545471,US
-3512545472,3512545663,GB
-3512545664,3512545759,US
-3512545760,3512545791,GB
-3512545792,3512545935,IT
-3512545936,3512545983,US
-3512545984,3512546047,IT
-3512546048,3512546175,GB
-3512546176,3512546303,US
-3512546304,3512546463,FR
-3512546464,3512546559,US
-3512546560,3512546591,IT
-3512546592,3512546607,SG
-3512546608,3512546623,JP
-3512546624,3512546631,KR
-3512546632,3512546687,US
-3512546688,3512546815,BE
-3512546816,3512546879,DE
-3512546880,3512546943,US
-3512546944,3512547071,DE
-3512547072,3512547103,LU
-3512547104,3512547231,BE
-3512547232,3512547263,US
-3512547264,3512547327,ES
-3512547328,3512547359,SE
-3512547360,3512547391,US
-3512547392,3512547455,ZA
-3512547456,3512547839,US
-3512547840,3512547871,PT
-3512547872,3512548095,US
-3512548096,3512548143,CH
-3512548144,3512548671,US
-3512548672,3512548703,NL
-3512548704,3512548735,US
-3512548736,3512548863,NL
-3512548864,3512548991,CH
-3512548992,3512549087,US
-3512549088,3512549119,GR
-3512549120,3512549247,FR
-3512549248,3512549311,US
-3512549312,3512549375,FR
-3512549376,3512549567,US
-3512549568,3512549631,BE
-3512549632,3512549695,DE
-3512549696,3512549727,TW
-3512549728,3512549759,US
-3512549760,3512549887,TH
-3512549888,3512550015,US
-3512550016,3512550031,DE
-3512550032,3512550143,US
-3512550144,3512550175,AT
-3512550176,3512550255,US
-3512550256,3512550271,AT
-3512550272,3512550399,US
-3512550400,3512550415,CH
-3512550416,3512550911,US
-3512550912,3512551167,GB
+3512537856,3512551167,US
3512551168,3512551423,DE
-3512551424,3512551551,IL
-3512551552,3512552191,US
+3512551424,3512552191,US
3512552192,3512552447,NL
-3512552448,3512552559,US
-3512552560,3512552703,DE
-3512552704,3512552959,US
-3512552960,3512553111,GR
-3512553112,3512553471,US
-3512553472,3512553663,AT
-3512553664,3512553727,US
-3512553728,3512553855,CH
-3512553856,3512553983,US
+3512552448,3512553983,US
3512553984,3512554751,GB
-3512554752,3512554767,DK
-3512554768,3512555775,US
-3512555776,3512556287,IE
-3512556288,3512556415,SE
-3512556416,3512556479,DE
-3512556480,3512556543,US
+3512554752,3512555775,US
+3512555776,3512556031,IE
+3512556032,3512556543,US
3512556544,3512556799,FR
-3512556800,3512556831,US
-3512556832,3512556847,BE
-3512556848,3512556863,US
-3512556864,3512556927,BE
-3512556928,3512557055,US
+3512556800,3512557055,US
3512557056,3512557311,DE
3512557312,3512557567,GB
-3512557568,3512557911,US
-3512557912,3512557919,JP
-3512557920,3512557951,US
-3512557952,3512558015,ID
-3512558016,3512558079,HK
-3512558080,3512558591,US
-3512558592,3512558719,JP
-3512558720,3512558783,MY
-3512558784,3512558847,US
-3512558848,3512558911,JP
-3512558912,3512558959,SG
-3512558960,3512558975,US
-3512558976,3512559039,JP
-3512559040,3512559071,AU
-3512559072,3512559103,US
-3512559104,3512559135,SG
-3512559136,3512559231,US
-3512559232,3512559359,ID
-3512559360,3512560127,US
-3512560128,3512560257,TH
-3512560258,3512560383,US
-3512560384,3512560511,JP
-3512560512,3512561151,US
-3512561152,3512561279,CN
-3512561280,3512561407,US
-3512561408,3512561535,HK
-3512561536,3512561663,US
-3512561664,3512561727,AU
-3512561728,3512561791,JP
-3512561792,3512561919,CN
+3512557568,3512561919,US
3512561920,3512562175,JP
-3512562176,3512562239,CH
-3512562240,3512562271,HK
-3512562272,3512562303,US
-3512562304,3512562367,CN
-3512562368,3512562431,HK
-3512562432,3512562463,TH
-3512562464,3512562543,US
-3512562544,3512562559,TH
-3512562560,3512562943,US
-3512562944,3512563071,PH
-3512563072,3512563135,US
-3512563136,3512563199,SG
-3512563200,3512563391,US
-3512563392,3512563455,ID
-3512563456,3512563711,US
-3512563712,3512563727,MY
-3512563728,3512563743,US
-3512563744,3512563775,AU
-3512563776,3512563807,JP
-3512563808,3512563967,US
-3512563968,3512564095,PH
-3512564096,3512564223,US
+3512562176,3512564223,US
3512564224,3512564479,SG
-3512564480,3512565119,US
-3512565120,3512565247,HK
+3512564480,3512565247,US
3512565248,3512565503,PH
-3512565504,3512566527,US
-3512566528,3512566655,BR
-3512566656,3512567199,US
-3512567200,3512567231,CA
-3512567232,3512567295,US
-3512567296,3512567423,GB
-3512567424,3512567935,US
-3512567936,3512568063,BR
-3512568064,3512569087,US
-3512569088,3512569215,CA
-3512569216,3512569983,US
-3512569984,3512569999,VE
-3512570000,3512570015,CA
-3512570016,3512570239,US
-3512570240,3512570367,MX
-3512570368,3512571775,US
-3512571776,3512571903,CL
-3512571904,3512571967,VE
-3512571968,3512572927,US
-3512572928,3512573055,MX
-3512573056,3512573151,US
-3512573152,3512573183,BR
-3512573184,3512573311,US
-3512573312,3512573375,CL
-3512573376,3512573439,US
-3512573440,3512573695,CL
-3512573696,3512573727,KR
-3512573728,3512573759,HK
-3512573760,3512573791,TW
-3512573792,3512573823,ID
-3512573824,3512573855,SG
-3512573856,3512573887,US
-3512573888,3512574207,ID
+3512565504,3512573951,US
+3512573952,3512574207,ID
3512574208,3512574719,US
3512574720,3512574975,SG
-3512574976,3512575551,US
-3512575552,3512575615,MY
-3512575616,3512575743,JP
-3512575744,3512575999,US
-3512576000,3512576031,KR
-3512576032,3512576063,US
-3512576064,3512576127,KR
-3512576128,3512576255,US
+3512574976,3512576255,US
3512576256,3512576511,HK
-3512576512,3512576767,US
-3512576768,3512576895,KR
-3512576896,3512577023,US
-3512577024,3512577087,JP
-3512577088,3512577279,US
-3512577280,3512577343,TW
-3512577344,3512577407,SG
-3512577408,3512577439,TH
-3512577440,3512577535,US
-3512577536,3512577599,AU
-3512577600,3512577631,PH
-3512577632,3512577663,US
-3512577664,3512577727,TH
-3512577728,3512577791,US
-3512577792,3512577855,JP
-3512577856,3512578047,US
-3512578048,3512578111,KR
-3512578112,3512578559,US
-3512578560,3512578720,CN
-3512578721,3512578815,US
-3512578816,3512578943,TH
-3512578944,3512579071,US
-3512579072,3512579199,ID
-3512579200,3512579327,HK
-3512579328,3512579455,KR
-3512579456,3512579583,NZ
-3512579584,3512579839,US
-3512579840,3512579967,SG
-3512579968,3512580031,KR
-3512580032,3512580095,TW
-3512580096,3512580223,JP
-3512580224,3512580287,US
-3512580288,3512580351,CN
-3512580352,3512580367,CH
-3512580368,3512580415,US
-3512580416,3512580479,SG
-3512580480,3512580863,HK
-3512580864,3512580991,ID
-3512580992,3512581055,SG
-3512581056,3512581119,KR
-3512581120,3512581247,NZ
-3512581248,3512581375,TW
+3512576512,3512580607,US
+3512580608,3512580863,HK
+3512580864,3512581375,US
3512581376,3512582143,CN
-3512582144,3512582207,US
-3512582208,3512582223,BR
-3512582224,3512582463,US
-3512582464,3512582527,BR
-3512582528,3512582655,PE
-3512582656,3512582719,BR
-3512582720,3512582783,CN
-3512582784,3512582911,BR
-3512582912,3512583295,US
-3512583296,3512583679,BR
-3512583680,3512584447,US
-3512584448,3512584479,BR
-3512584480,3512585407,US
-3512585408,3512585439,BR
-3512585440,3512585887,US
-3512585888,3512585919,PE
-3512585920,3512585983,CO
-3512585984,3512586175,US
-3512586176,3512586239,VE
-3512586240,3512586495,US
-3512586496,3512586687,BR
-3512586688,3512586751,AR
-3512586752,3512587295,US
-3512587296,3512587327,CH
-3512587328,3512587647,US
-3512587648,3512587775,CO
-3512587776,3512587903,US
-3512587904,3512588031,CO
-3512588032,3512588159,US
-3512588160,3512588191,PE
-3512588192,3512588223,US
-3512588224,3512588287,BR
-3512588288,3512588415,US
-3512588416,3512588543,MX
-3512588544,3512589407,US
-3512589408,3512589567,BR
-3512589568,3512589887,US
-3512589888,3512589951,CO
-3512589952,3512590015,US
-3512590016,3512590079,CO
-3512590080,3512590143,MX
-3512590144,3512590207,CH
-3512590208,3512590847,US
-3512590848,3512590975,TH
-3512590976,3512591103,PH
+3512582144,3512583423,US
+3512583424,3512583679,BR
+3512583680,3512591103,US
3512591104,3512591359,JP
3512591360,3512592383,US
3512592384,3512592895,GB
3512592896,3512593151,PH
3512593152,3512593279,GB
-3512593280,3512593407,SG
-3512593408,3512593471,TH
-3512593472,3512593511,US
-3512593512,3512593519,CN
-3512593520,3512593663,US
+3512593280,3512593663,US
3512593664,3512593791,JP
-3512593792,3512593887,US
-3512593888,3512593919,DE
-3512593920,3512594175,AP
+3512593792,3512594175,US
3512594176,3512594431,MY
-3512594432,3512594495,HK
-3512594496,3512594559,US
-3512594560,3512594687,CN
-3512594688,3512594943,US
-3512594944,3512595007,TH
-3512595008,3512595199,US
+3512594432,3512595199,US
3512595200,3512595455,TW
-3512595456,3512595711,US
-3512595712,3512595743,KR
-3512595744,3512595775,US
-3512595776,3512595839,KR
-3512595840,3512596223,US
+3512595456,3512596223,US
3512596224,3512596479,JP
3512596480,3512596991,US
3512596992,3512597247,TH
3512597248,3512597759,US
3512597760,3512598015,JP
-3512598016,3512598079,KR
-3512598080,3512598143,US
-3512598144,3512598271,TH
+3512598016,3512598271,US
3512598272,3512598527,PH
3512598528,3512647679,US
3512647680,3512655871,TT
-3512655872,3512690591,US
-3512690592,3512690623,IN
-3512690624,3512695839,US
-3512695840,3512695871,GB
-3512695872,3512696831,US
-3512696832,3512699647,SE
-3512699648,3512699903,US
-3512699904,3512701951,SE
+3512655872,3512696831,US
+3512696832,3512701951,SE
3512701952,3512702975,US
3512702976,3512703231,SE
3512703232,3512703359,US
3512703360,3512705023,SE
3512705024,3512844287,US
3512844288,3512852479,CA
-3512852480,3512891135,US
-3512891136,3512891167,BE
-3512891168,3512891199,AU
-3512891200,3512891231,FR
-3512891232,3512891263,KW
-3512891264,3512891327,US
-3512891328,3512891359,CA
-3512891360,3512983551,US
+3512852480,3512931583,US
+3512931584,3512931839,CA
+3512931840,3512983551,US
3512983552,3512987647,AR
3512987648,3513188351,US
3513188352,3513204735,CA
@@ -157358,17 +84104,11 @@
3513475072,3513483263,CA
3513499648,3513501183,US
3513501184,3513501439,PH
-3513501440,3513502719,US
-3513502720,3513502975,US
-3513502976,3513506559,US
+3513501440,3513506559,US
3513506560,3513506815,CA
-3513506816,3513670911,US
-3513670912,3513671167,A2
-3513671168,3513778175,US
+3513506816,3513778175,US
3513778176,3513794559,CA
-3513794560,3513840127,US
-3513840128,3513840383,US
-3513840384,3514007551,US
+3513794560,3514007551,US
3514007552,3514040319,CA
3514040320,3514367999,US
3514368000,3514433535,CA
@@ -157379,44 +84119,15 @@
3514582016,3514582527,US
3514582528,3514582783,GB
3514582784,3514583295,US
-3514583296,3514583455,GB
-3514583456,3514583463,ZA
-3514583464,3514583471,GB
-3514583472,3514583479,ZA
-3514583480,3514583487,US
-3514583488,3514583511,GB
-3514583512,3514583543,US
-3514583544,3514583583,GB
-3514583584,3514583591,US
-3514583592,3514583599,GB
-3514583600,3514583639,US
-3514583640,3514583807,GB
+3514583296,3514583511,GB
+3514583512,3514583535,US
+3514583536,3514583807,GB
3514583808,3514584063,US
-3514584064,3514584383,GB
-3514584384,3514584415,US
-3514584416,3514584575,GB
-3514584576,3514584591,US
-3514584592,3514584607,GB
-3514584608,3514584639,US
-3514584640,3514584831,GB
+3514584064,3514584831,GB
3514584832,3514585343,US
-3514585344,3514585599,GB
-3514585600,3514585615,AI
-3514585616,3514585855,GB
-3514585856,3514585871,AI
-3514585872,3514586111,GB
-3514586112,3514586127,US
-3514586128,3514586367,GB
-3514586368,3514586383,US
-3514586384,3514586895,GB
-3514586896,3514586911,US
-3514586912,3514587135,GB
-3514587136,3514587407,US
-3514587408,3514587647,GB
-3514587648,3514587663,US
-3514587664,3514588671,GB
-3514588672,3514588687,US
-3514588688,3514589183,GB
+3514585344,3514587135,GB
+3514587136,3514587391,US
+3514587392,3514589183,GB
3514589184,3514589439,US
3514589440,3514589695,GT
3514589696,3514590207,SV
@@ -157436,53 +84147,29 @@
3514993992,3514994007,GB
3514994008,3514994023,DK
3514994024,3514994049,GB
-3514994050,3514994050,EU
+3514994050,3514994050,US
3514994051,3514994175,GB
3514994176,3515001869,US
3515001870,3515001873,GB
3515001874,3515007869,US
3515007870,3515007870,GB
-3515007871,3515136511,US
-3515136512,3515136767,GB
-3515136768,3515149567,US
-3515149568,3515149583,AU
-3515149584,3515301887,US
+3515007871,3515082751,US
+3515084800,3515222271,US
+3515222272,3515224831,TR
+3515224832,3515301887,US
3515301888,3515318271,CA
-3515318272,3515454399,US
-3515454400,3515454463,JP
-3515454464,3515455999,US
-3515456000,3515456015,JP
-3515456016,3515456703,US
-3515456704,3515456767,JP
-3515456768,3515596799,US
+3515318272,3515358975,US
+3515358976,3515359231,MX
+3515359232,3515596799,US
3515596800,3515613183,CA
-3515613184,3515617495,US
-3515617496,3515617503,IN
-3515617504,3515711487,US
+3515613184,3515711487,US
3515711488,3515731967,CA
-3515731968,3515860351,US
-3515860352,3515860431,IN
-3515860432,3515867151,US
-3515867152,3515867167,AU
-3515867168,3515867391,US
-3515867392,3515867519,AU
-3515867520,3515868463,US
-3515868464,3515868479,IT
-3515868480,3515882375,US
-3515882376,3515882383,AU
-3515882384,3515913631,US
-3515913632,3515913663,CA
-3515913664,3515916519,US
-3515916520,3515916527,AU
-3515916528,3515932895,US
-3515932896,3515932903,CA
-3515932904,3515955375,US
-3515955376,3515955391,GB
-3515955392,3515955551,US
-3515955552,3515955567,ES
-3515955568,3515956319,US
-3515956320,3515956335,NL
-3515956336,3515965439,US
+3515731968,3515736063,US
+3515736064,3515744255,DE
+3515744256,3515760639,CA
+3515760640,3515844095,US
+3515844096,3515844607,GB
+3515844608,3515965439,US
3515965440,3515973631,CA
3515973632,3515990015,US
3515990016,3516006399,CA
@@ -157490,41 +84177,26 @@
3516039168,3516071935,CA
3516071936,3516139007,US
3516139008,3516139263,GB
-3516139264,3516153855,US
-3516162048,3516170239,US
-3516170240,3516193943,CA
-3516193944,3516193951,US
-3516193952,3516203007,CA
+3516139264,3516170239,US
+3516170240,3516203007,CA
3516203008,3516334079,US
3516334080,3516342271,CA
-3516342272,3516351055,US
-3516351056,3516351087,TR
-3516351088,3516351095,US
-3516351096,3516351103,MY
-3516351104,3516351255,US
-3516351256,3516351271,AE
-3516351272,3516355663,US
-3516355664,3516355679,CA
-3516355680,3516357631,US
+3516342272,3516357631,US
3516357632,3516357887,MY
3516357888,3516358143,CA
3516358144,3516366847,US
3516366848,3516370943,CA
3516370944,3516514303,US
3516514304,3516530687,CA
-3516530688,3516897367,US
-3516897368,3516897375,IN
-3516897376,3516899327,US
-3516899328,3516899839,A2
+3516530688,3516899839,US
3516899840,3516900095,NG
-3516900096,3516900351,A2
+3516900096,3516900351,US
3516900352,3516900607,NG
-3516900608,3516900863,A2
+3516900608,3516900863,US
3516900864,3516901119,NG
-3516901120,3516902399,US
-3516902400,3516902655,A2
+3516901120,3516902655,US
3516902656,3516902911,NG
-3516902912,3516903167,A2
+3516902912,3516903167,US
3516903168,3516903423,NG
3516903424,3516907519,CA
3516907520,3517019135,US
@@ -157535,13 +84207,7 @@
3517038592,3517054975,CA
3517054976,3517095935,US
3517095936,3517100031,CA
-3517100032,3517100213,US
-3517100214,3517100223,NZ
-3517100224,3517100720,US
-3517100721,3517100730,CA
-3517100731,3517103316,US
-3517103317,3517103330,NZ
-3517103331,3517112319,US
+3517100032,3517112319,US
3517112320,3517116159,CA
3517116160,3517116415,US
3517116416,3517120511,CA
@@ -157550,266 +84216,150 @@
3517174784,3517233151,US
3517233152,3517235199,GU
3517235200,3517382655,US
-3517382656,3517384703,CA
+3517382656,3517383167,CA
+3517383168,3517383423,US
+3517383424,3517384703,CA
3517384704,3517385215,US
-3517385216,3517387775,CA
-3517387776,3517388031,US
-3517388032,3517388799,CA
+3517385216,3517387263,CA
+3517387264,3517387519,US
+3517387520,3517387775,CA
+3517387776,3517388287,US
+3517388288,3517388799,CA
3517388800,3517389311,US
3517389312,3517389567,CA
3517389568,3517389823,US
-3517389824,3517391471,CA
-3517391472,3517391487,US
-3517391488,3517391535,CA
-3517391536,3517391551,US
-3517391552,3517392127,CA
+3517389824,3517390335,CA
+3517390336,3517390591,US
+3517390592,3517391359,CA
+3517391360,3517391871,US
+3517391872,3517392127,CA
3517392128,3517392383,US
3517392384,3517392639,CA
-3517392640,3517392655,US
-3517392656,3517392719,CA
-3517392720,3517392735,US
-3517392736,3517392815,CA
-3517392816,3517392831,US
-3517392832,3517392847,CA
-3517392848,3517392879,US
-3517392880,3517393407,CA
-3517393408,3517393439,US
-3517393440,3517393471,CA
-3517393472,3517393503,US
-3517393504,3517395663,CA
-3517395664,3517395679,US
-3517395680,3517395695,CA
-3517395696,3517395743,US
-3517395744,3517395807,CA
-3517395808,3517395839,US
-3517395840,3517395871,CA
-3517395872,3517395903,US
-3517395904,3517396911,CA
-3517396912,3517396927,US
-3517396928,3517397503,CA
+3517392640,3517392895,US
+3517392896,3517393407,CA
+3517393408,3517394431,US
+3517394432,3517394943,CA
+3517394944,3517395199,US
+3517395200,3517395455,CA
+3517395456,3517396111,US
+3517396112,3517396127,CA
+3517396128,3517396223,US
+3517396224,3517396479,CA
+3517396480,3517396751,US
+3517396752,3517396767,CA
+3517396768,3517397247,US
+3517397248,3517397503,CA
3517397504,3517397759,US
3517397760,3517398015,CA
3517398016,3517398527,US
-3517398528,3517399551,CA
-3517399552,3517399807,US
+3517398528,3517399039,CA
+3517399040,3517399807,US
3517399808,3517399871,CA
-3517399872,3517399935,IL
-3517399936,3517400831,CA
-3517400832,3517400847,US
-3517400848,3517401183,CA
-3517401184,3517401199,US
-3517401200,3517401279,CA
-3517401280,3517401343,US
-3517401344,3517401599,CA
-3517401600,3517401855,US
-3517401856,3517402879,CA
-3517402880,3517403391,US
-3517403392,3517403455,CA
-3517403456,3517403519,US
-3517403520,3517404159,CA
+3517399872,3517400063,US
+3517400064,3517400575,CA
+3517400576,3517401855,US
+3517401856,3517402367,CA
+3517402368,3517402623,US
+3517402624,3517402879,CA
+3517402880,3517403647,US
+3517403648,3517404159,CA
3517404160,3517404415,US
3517404416,3517404927,CA
3517404928,3517405183,US
-3517405184,3517406751,CA
-3517406752,3517406783,US
-3517406784,3517407359,CA
-3517407360,3517407487,US
-3517407488,3517407999,CA
+3517405184,3517405439,CA
+3517405440,3517405695,US
+3517405696,3517406719,CA
+3517406720,3517406975,US
+3517406976,3517407231,CA
+3517407232,3517407743,US
+3517407744,3517407999,CA
3517408000,3517408255,US
-3517408256,3517408583,CA
-3517408584,3517408591,US
-3517408592,3517408703,CA
-3517408704,3517408711,US
-3517408712,3517408727,CA
-3517408728,3517408735,US
-3517408736,3517408743,CA
-3517408744,3517408767,US
-3517408768,3517408799,CA
-3517408800,3517408815,US
-3517408816,3517408895,CA
-3517408896,3517408911,US
-3517408912,3517408991,CA
-3517408992,3517409007,US
-3517409008,3517409279,CA
+3517408256,3517408511,CA
+3517408512,3517409023,US
+3517409024,3517409279,CA
3517409280,3517409791,US
3517409792,3517411071,CA
3517411072,3517411327,US
-3517411328,3517414463,CA
-3517414464,3517414495,US
-3517414496,3517415983,CA
-3517415984,3517415999,GB
-3517416000,3517416063,CA
-3517416064,3517416079,US
-3517416080,3517416111,CA
-3517416112,3517416127,US
-3517416128,3517416143,CA
-3517416144,3517416159,US
-3517416160,3517416591,CA
-3517416592,3517416607,US
-3517416608,3517417535,CA
-3517417536,3517417567,US
-3517417568,3517417631,CA
-3517417632,3517417663,US
-3517417664,3517417695,CA
-3517417696,3517417855,US
-3517417856,3517418367,CA
-3517418368,3517418399,US
-3517418400,3517419103,CA
-3517419104,3517419135,US
-3517419136,3517420159,CA
-3517420160,3517420287,US
-3517420288,3517420303,CA
-3517420304,3517420311,US
-3517420312,3517420327,CA
-3517420328,3517420335,US
-3517420336,3517420351,CA
-3517420352,3517420359,US
-3517420360,3517420383,CA
-3517420384,3517420399,US
-3517420400,3517420407,CA
-3517420408,3517420431,US
-3517420432,3517420439,CA
-3517420440,3517420447,US
-3517420448,3517420471,CA
-3517420472,3517420479,US
-3517420480,3517420487,CA
-3517420488,3517420495,US
-3517420496,3517422663,CA
-3517422664,3517422687,US
-3517422688,3517422695,CA
-3517422696,3517422703,US
-3517422704,3517422719,CA
-3517422720,3517422759,US
-3517422760,3517422783,CA
-3517422784,3517422791,US
-3517422792,3517424319,CA
-3517424320,3517424335,SE
-3517424336,3517424511,CA
-3517424512,3517424543,US
-3517424544,3517424623,CA
-3517424624,3517424639,US
-3517424640,3517425023,CA
-3517425024,3517425087,US
-3517425088,3517426047,CA
-3517426048,3517426111,US
-3517426112,3517426687,CA
-3517426688,3517426751,US
-3517426752,3517427711,CA
-3517427712,3517427727,US
-3517427728,3517428063,CA
-3517428064,3517428095,US
-3517428096,3517428431,CA
-3517428432,3517428447,US
-3517428448,3517429759,CA
-3517429760,3517429791,US
-3517429792,3517430015,CA
-3517430016,3517430031,US
-3517430032,3517430127,CA
-3517430128,3517430143,US
-3517430144,3517430175,CA
-3517430176,3517430191,US
-3517430192,3517430207,CA
-3517430208,3517430223,US
-3517430224,3517430239,CA
-3517430240,3517430255,US
-3517430256,3517430783,CA
-3517430784,3517431039,US
-3517431040,3517431599,CA
-3517431600,3517431615,US
-3517431616,3517431663,CA
-3517431664,3517431679,US
-3517431680,3517431695,CA
-3517431696,3517431711,NL
-3517431712,3517431727,CA
-3517431728,3517431743,US
-3517431744,3517431759,CA
-3517431760,3517431775,US
-3517431776,3517431807,CA
-3517431808,3517431823,US
-3517431824,3517431935,CA
-3517431936,3517431951,US
-3517431952,3517431967,CA
-3517431968,3517431983,US
-3517431984,3517432191,CA
-3517432192,3517432319,US
-3517432320,3517433919,CA
-3517433920,3517433983,US
-3517433984,3517434367,CA
-3517434368,3517434375,US
-3517434376,3517434503,CA
-3517434504,3517434527,US
-3517434528,3517434567,CA
-3517434568,3517434583,US
-3517434584,3517434599,CA
-3517434600,3517434615,US
-3517434616,3517435007,CA
-3517435008,3517435135,US
-3517435136,3517436935,CA
-3517436936,3517436943,US
-3517436944,3517436975,CA
-3517436976,3517436983,US
-3517436984,3517436991,CA
-3517436992,3517436999,US
-3517437000,3517437007,CA
-3517437008,3517437015,US
-3517437016,3517437039,CA
-3517437040,3517437055,US
-3517437056,3517437071,CA
-3517437072,3517437079,US
-3517437080,3517437087,CA
-3517437088,3517437095,NO
-3517437096,3517437135,CA
-3517437136,3517437143,US
-3517437144,3517437151,CA
-3517437152,3517437175,US
-3517437176,3517438143,CA
-3517438144,3517438207,US
+3517411328,3517412351,CA
+3517412352,3517412607,US
+3517412608,3517412863,CA
+3517412864,3517413119,US
+3517413120,3517414399,CA
+3517414400,3517414911,US
+3517414912,3517415423,CA
+3517415424,3517416191,US
+3517416192,3517416447,CA
+3517416448,3517416703,US
+3517416704,3517417471,CA
+3517417472,3517418495,US
+3517418496,3517419007,CA
+3517419008,3517419519,US
+3517419520,3517420031,CA
+3517420032,3517420375,US
+3517420376,3517420383,CA
+3517420384,3517420799,US
+3517420800,3517421567,CA
+3517421568,3517421823,US
+3517421824,3517422079,CA
+3517422080,3517422847,US
+3517422848,3517423359,CA
+3517423360,3517423423,US
+3517423424,3517423455,CA
+3517423456,3517423487,US
+3517423488,3517423519,CA
+3517423520,3517423871,US
+3517423872,3517424127,CA
+3517424128,3517424767,US
+3517424768,3517424831,CA
+3517424832,3517425407,US
+3517425408,3517425919,CA
+3517425920,3517426751,US
+3517426752,3517426815,CA
+3517426816,3517426943,US
+3517426944,3517427711,CA
+3517427712,3517428735,US
+3517428736,3517429503,CA
+3517429504,3517430271,US
+3517430272,3517430527,CA
+3517430528,3517430687,US
+3517430688,3517430719,CA
+3517430720,3517432319,US
+3517432320,3517433343,CA
+3517433344,3517434111,US
+3517434112,3517434367,CA
+3517434368,3517435135,US
+3517435136,3517435391,CA
+3517435392,3517435647,US
+3517435648,3517436415,CA
+3517436416,3517436671,US
+3517436672,3517437439,CA
+3517437440,3517437695,US
+3517437696,3517437951,CA
+3517437952,3517438207,US
3517438208,3517438463,CA
-3517438464,3517438527,US
-3517438528,3517438591,CA
-3517438592,3517438655,US
-3517438656,3517438751,CA
-3517438752,3517438783,US
-3517438784,3517438879,CA
-3517438880,3517438911,KW
-3517438912,3517439487,CA
-3517439488,3517439615,US
-3517439616,3517442239,CA
-3517442240,3517442303,US
-3517442304,3517442319,CA
-3517442320,3517442335,US
-3517442336,3517442383,CA
-3517442384,3517442399,US
-3517442400,3517442431,CA
-3517442432,3517442447,US
-3517442448,3517443647,CA
-3517443648,3517443679,US
-3517443680,3517444223,CA
-3517444224,3517444351,US
-3517444352,3517444671,CA
-3517444672,3517444735,US
-3517444736,3517444799,CA
-3517444800,3517444863,US
-3517444864,3517445199,CA
-3517445200,3517445375,US
-3517445376,3517445503,CA
-3517445504,3517445567,US
-3517445568,3517445887,CA
-3517445888,3517446015,US
-3517446016,3517446911,CA
-3517446912,3517447167,US
-3517447168,3517447727,CA
-3517447728,3517447743,US
-3517447744,3517447783,CA
-3517447784,3517447791,US
-3517447792,3517447847,CA
-3517447848,3517447863,US
-3517447864,3517448191,CA
-3517448192,3517523167,US
-3517523168,3517523183,BS
-3517523184,3517524183,US
-3517524184,3517524191,VI
-3517524192,3517546495,US
+3517438464,3517438943,US
+3517438944,3517439231,CA
+3517439232,3517439743,US
+3517439744,3517442047,CA
+3517442048,3517442175,US
+3517442176,3517442207,CA
+3517442208,3517442559,US
+3517442560,3517442623,CA
+3517442624,3517442815,US
+3517442816,3517443583,CA
+3517443584,3517444863,US
+3517444864,3517445119,CA
+3517445120,3517445631,US
+3517445632,3517445887,CA
+3517445888,3517446143,US
+3517446144,3517446655,CA
+3517446656,3517447167,US
+3517447168,3517447679,CA
+3517447680,3517447863,US
+3517447864,3517447871,CA
+3517447872,3517447935,US
+3517447936,3517448191,CA
+3517448192,3517546495,US
3517546496,3517562879,CA
3517562880,3517595647,US
3517595648,3517596671,SE
@@ -157819,125 +84369,60 @@
3517597696,3517597951,IE
3517597952,3517598207,DE
3517598208,3517598463,IE
-3517598464,3517598527,SE
-3517598528,3517598559,FR
-3517598560,3517598591,SE
-3517598592,3517598719,US
-3517598720,3517599359,SE
+3517598464,3517599359,SE
3517599360,3517599615,US
3517599616,3517600767,SE
3517600768,3517601279,US
3517601280,3517602047,SE
3517602048,3517602303,DE
3517602304,3517602559,US
-3517602560,3517602575,SE
-3517602576,3517602591,US
-3517602592,3517602687,SE
+3517602560,3517602687,SE
3517602688,3517602815,US
3517602816,3517603071,SE
-3517603072,3517603615,US
-3517603616,3517603647,DE
+3517603072,3517603583,US
+3517603584,3517603647,SE
3517603648,3517603711,US
-3517603712,3517603967,SE
-3517603968,3517604031,DE
-3517604032,3517604095,SE
+3517603712,3517604095,SE
3517604096,3517604351,US
3517604352,3517605119,SE
3517605120,3517605375,US
-3517605376,3517605775,SE
-3517605776,3517605791,US
-3517605792,3517605887,SE
+3517605376,3517605887,SE
3517605888,3517606143,US
3517606144,3517606207,SE
3517606208,3517606399,US
-3517606400,3517606911,SE
-3517606912,3517607935,US
+3517606400,3517607935,SE
3517607936,3517608191,DE
3517608192,3517608447,US
3517608448,3517608703,GB
-3517608704,3517610015,US
-3517610016,3517610111,SE
-3517610112,3517610143,NO
-3517610144,3517610159,ES
-3517610160,3517610175,SE
-3517610176,3517610183,US
-3517610184,3517610191,SE
-3517610192,3517610199,US
-3517610200,3517610495,SE
+3517608704,3517609727,US
+3517609728,3517610495,SE
3517610496,3517611263,IE
-3517611264,3517611295,SE
-3517611296,3517611303,DE
-3517611304,3517611311,CA
-3517611312,3517611367,SE
-3517611368,3517611383,US
-3517611384,3517611463,SE
-3517611464,3517611471,IL
-3517611472,3517612031,SE
+3517611264,3517612031,SE
3517612032,3517644799,US
3517644800,3517710335,CA
3517710336,3517718527,US
3517718528,3517726719,CA
-3517726720,3517838927,US
-3517838928,3517838938,LB
-3517838939,3517979103,US
-3517979104,3517979111,CA
-3517979112,3517989487,US
-3517989488,3517989503,CA
-3517989504,3517989695,US
-3517989696,3517989727,CA
-3517989728,3517990023,US
-3517990024,3517990031,CA
-3517990032,3517990911,US
+3517726720,3517990911,US
3517990912,3517991423,CA
-3517991424,3518062591,US
+3517991424,3518056447,US
+3518058496,3518062591,US
3518062592,3518066687,CA
-3518066688,3518075455,US
-3518075456,3518075519,AR
-3518075520,3518075583,US
-3518075584,3518075647,MX
+3518066688,3518075647,US
3518075648,3518075903,AU
-3518075904,3518076079,US
-3518076080,3518076087,AU
-3518076088,3518076671,US
+3518075904,3518076671,US
3518076672,3518076927,PA
-3518076928,3518374719,US
-3518374720,3518374783,IN
-3518374784,3518380223,US
-3518380224,3518380287,DE
-3518380288,3518381055,US
+3518076928,3518381055,US
3518381056,3518381311,IN
-3518381312,3518381439,US
-3518381440,3518381567,IN
-3518381568,3518381631,DE
-3518381632,3518431231,US
+3518381312,3518392319,US
+3518394368,3518431231,US
3518431232,3518439423,CA
3518439424,3518463999,US
3518464000,3518472191,CA
-3518472192,3518759407,US
-3518759408,3518759423,CY
-3518759424,3518762495,US
+3518472192,3518762495,US
3518762496,3518762751,GB
-3518762752,3518764671,US
-3518764672,3518764703,NL
-3518764704,3518765311,US
+3518762752,3518765311,US
3518765312,3518765567,CA
-3518765568,3518766879,US
-3518766880,3518766911,TH
-3518766912,3518892415,US
-3518892416,3518892423,GB
-3518892424,3518894439,US
-3518894440,3518894447,TR
-3518894448,3518895783,US
-3518895784,3518895791,TH
-3518895792,3518896215,US
-3518896216,3518896223,CA
-3518896224,3518896231,US
-3518896232,3518896239,CN
-3518896240,3518897119,US
-3518897120,3518897127,IT
-3518897128,3518903191,US
-3518903192,3518903199,JP
-3518903200,3518905599,US
+3518765568,3518905599,US
3518905600,3518905855,GB
3518905856,3518911743,US
3518911744,3518911999,GB
@@ -157947,581 +84432,122 @@
3518918144,3518918399,IN
3518918400,3518919423,US
3518919424,3518919679,IN
-3518919680,3518929535,US
-3518929536,3518929599,CA
-3518929600,3518995695,US
-3518995696,3518995703,GB
-3518995704,3519217671,US
-3519217672,3519217679,BB
-3519217680,3519220095,US
-3519220096,3519220111,GA
-3519220112,3519220119,US
-3519220120,3519220127,GA
-3519220128,3519220575,US
-3519220576,3519220591,GA
-3519220592,3519234047,US
+3518919680,3519234047,US
3519234048,3519250431,CA
-3519250432,3519320975,US
-3519320976,3519320983,GR
-3519320984,3519340543,US
+3519250432,3519340543,US
3519340544,3519344639,CA
-3519344640,3519350079,US
-3519350080,3519350087,NL
-3519350088,3519350271,US
-3519350272,3519350399,US
-3519350400,3519351327,US
+3519344640,3519351327,US
3519351328,3519351359,GB
3519351360,3519351423,US
3519351424,3519351455,GB
3519351456,3519351551,US
3519351552,3519351807,GB
-3519351808,3519352831,US
-3519352832,3519352959,US
-3519352960,3519354047,US
-3519354048,3519354111,US
-3519354112,3519355391,US
-3519355392,3519355519,US
-3519355520,3519381503,US
+3519351808,3519381503,US
3519381504,3519397887,CA
-3519397888,3519406079,US
-3519406080,3519406143,IT
-3519406144,3519406255,US
-3519406256,3519406263,SA
-3519406264,3519406375,US
-3519406376,3519406383,IT
-3519406384,3519406391,IN
-3519406392,3519406407,GB
-3519406408,3519406503,US
-3519406504,3519406511,CA
-3519406512,3519406695,US
-3519406696,3519406831,SA
-3519406832,3519407151,US
-3519407152,3519407199,MY
-3519407200,3519407215,US
-3519407216,3519407351,AE
-3519407352,3519407591,US
-3519407592,3519407599,AE
-3519407600,3519407607,US
-3519407608,3519407615,RU
-3519407616,3519409111,US
-3519409112,3519409119,MY
-3519409120,3519409135,OM
-3519409136,3519409295,US
-3519409296,3519409303,CA
-3519409304,3519409407,US
-3519409408,3519409423,AE
-3519409424,3519409455,US
-3519409456,3519409599,MY
-3519409600,3519409807,US
-3519409808,3519409815,GB
-3519409816,3519409927,US
-3519409928,3519409943,MY
-3519409944,3519409951,US
-3519409952,3519410175,MY
-3519410176,3519410279,US
-3519410280,3519410287,AU
-3519410288,3519411327,US
-3519411328,3519411391,RU
-3519411392,3519412519,US
-3519412520,3519412527,RU
-3519412528,3519412735,US
-3519412736,3519412751,RU
-3519412752,3519412799,US
-3519412800,3519412815,RU
-3519412816,3519412999,US
-3519413000,3519413007,CY
-3519413008,3519415847,US
-3519415848,3519415851,CA
-3519415852,3519416847,US
-3519416848,3519416879,CA
-3519416880,3519417087,US
-3519417088,3519417151,IT
-3519417152,3519417183,CA
-3519417184,3519466895,US
-3519466896,3519466911,SZ
-3519466912,3519467519,US
+3519397888,3519467519,US
3519469568,3519475711,US
3519475712,3519476223,BH
-3519476224,3519477759,A2
-3519477760,3519554047,US
-3519554048,3519554175,US
-3519554176,3519578367,US
+3519476224,3519477759,DE
+3519477760,3519578367,US
3519578368,3519578623,NA
3519578624,3519578879,US
3519578880,3519579135,CA
-3519579136,3519579967,US
-3519579968,3519579983,CY
-3519579984,3519586303,US
+3519579136,3519586303,US
3519586304,3519586559,GB
-3519586560,3519587039,US
-3519587040,3519587071,AG
-3519587072,3519588639,US
-3519588640,3519588671,GB
-3519588672,3519590655,US
+3519586560,3519590655,US
3519590656,3519590911,CA
-3519590912,3519603204,US
-3519603205,3519603212,VN
-3519603213,3519603271,US
-3519603272,3519603286,CA
-3519603287,3519603772,US
-3519603773,3519603781,IN
-3519603782,3519676415,US
-3519676416,3519700559,CA
-3519700560,3519700567,US
-3519700568,3519700575,CA
-3519700576,3519700607,US
-3519700608,3519702319,CA
-3519702320,3519702327,US
-3519702328,3519709183,CA
-3519709184,3519712447,US
-3519712448,3519712511,CA
-3519712512,3519715295,US
-3519715296,3519715327,GB
-3519715328,3519716863,US
-3519716864,3519716999,CA
-3519717000,3519717567,US
-3519717568,3519717631,CA
-3519717632,3519723519,US
+3519590912,3519676415,US
+3519676416,3519709183,CA
+3519709184,3519723519,US
3519723520,3519724031,CA
3519724032,3519741951,US
3519741952,3519758335,ZA
-3519758336,3519799871,US
-3519799872,3519799903,IN
-3519799904,3519805119,US
-3519805120,3519805183,GB
-3519805184,3519873023,US
-3519873024,3519877295,CA
-3519877296,3519877311,US
-3519877312,3519879679,CA
-3519879680,3519879687,US
-3519879688,3519879767,CA
-3519879768,3519879775,US
-3519879776,3519879807,CA
-3519879808,3519879815,US
-3519879816,3519880767,CA
-3519880768,3519880831,DE
-3519880832,3519881375,CA
-3519881376,3519881407,US
-3519881408,3519881567,CA
-3519881568,3519881599,US
-3519881600,3519901695,CA
-3519901696,3519934463,US
+3519758336,3519873023,US
+3519873024,3519874559,CA
+3519874560,3519875071,US
+3519875072,3519877119,CA
+3519877120,3519877167,US
+3519877168,3519877183,CA
+3519877184,3519877887,US
+3519877888,3519878143,CA
+3519878144,3519878271,US
+3519878272,3519878303,CA
+3519878304,3519879727,US
+3519879728,3519879735,CA
+3519879736,3519879935,US
+3519879936,3519880447,CA
+3519880448,3519881983,US
+3519881984,3519882495,CA
+3519882496,3519882751,US
+3519882752,3519884031,CA
+3519884032,3519884287,US
+3519884288,3519901695,CA
+3519901696,3519930367,US
3519934464,3519938559,CA
3519938560,3520020479,US
-3520020480,3520020991,CA
-3520020992,3520021015,US
-3520021016,3520021055,CA
-3520021056,3520021071,US
-3520021072,3520021183,CA
-3520021184,3520021191,US
-3520021192,3520021687,CA
-3520021688,3520021695,US
-3520021696,3520021839,CA
-3520021840,3520021847,US
-3520021848,3520021895,CA
-3520021896,3520021903,US
-3520021904,3520021911,CA
-3520021912,3520021919,US
-3520021920,3520021927,CA
-3520021928,3520021935,US
-3520021936,3520021967,CA
-3520021968,3520021975,US
-3520021976,3520021983,CA
-3520021984,3520021991,US
-3520021992,3520021999,CA
-3520022000,3520022007,US
-3520022008,3520022015,CA
-3520022016,3520022023,US
-3520022024,3520022071,CA
-3520022072,3520022087,US
-3520022088,3520022143,CA
-3520022144,3520022151,US
-3520022152,3520022207,CA
-3520022208,3520022215,US
-3520022216,3520022271,CA
-3520022272,3520022279,US
-3520022280,3520022375,CA
-3520022376,3520022383,US
-3520022384,3520022391,CA
-3520022392,3520022399,US
-3520022400,3520022863,CA
-3520022864,3520022871,US
-3520022872,3520022927,CA
-3520022928,3520022935,US
-3520022936,3520023047,CA
-3520023048,3520023063,US
-3520023064,3520023087,CA
-3520023088,3520023103,US
-3520023104,3520023111,CA
-3520023112,3520023119,US
-3520023120,3520023127,CA
-3520023128,3520023135,US
-3520023136,3520023151,CA
-3520023152,3520023159,US
-3520023160,3520023383,CA
-3520023384,3520023415,US
-3520023416,3520023879,CA
-3520023880,3520023887,US
-3520023888,3520023911,CA
-3520023912,3520023919,US
-3520023920,3520024487,CA
-3520024488,3520024495,US
-3520024496,3520024807,CA
-3520024808,3520024815,US
-3520024816,3520025503,CA
-3520025504,3520025511,US
-3520025512,3520025591,CA
-3520025592,3520025599,NL
-3520025600,3520025623,CA
-3520025624,3520025631,US
-3520025632,3520025639,CA
-3520025640,3520025647,US
-3520025648,3520025791,CA
-3520025792,3520025799,US
-3520025800,3520026671,CA
-3520026672,3520026679,US
-3520026680,3520026703,CA
-3520026704,3520026711,US
-3520026712,3520026783,CA
-3520026784,3520026791,US
-3520026792,3520026991,CA
-3520026992,3520026999,US
-3520027000,3520027047,CA
-3520027048,3520027055,US
-3520027056,3520027111,CA
-3520027112,3520027119,US
-3520027120,3520027231,CA
-3520027232,3520027239,US
-3520027240,3520027271,CA
-3520027272,3520027279,US
-3520027280,3520027711,CA
-3520027712,3520027727,US
-3520027728,3520027815,CA
-3520027816,3520027823,US
-3520027824,3520027839,CA
-3520027840,3520027887,US
-3520027888,3520027951,CA
-3520027952,3520027991,US
-3520027992,3520028047,CA
-3520028048,3520028055,US
-3520028056,3520028095,CA
-3520028096,3520028103,US
-3520028104,3520028191,CA
-3520028192,3520028199,US
-3520028200,3520028487,CA
-3520028488,3520028535,US
-3520028536,3520028543,CA
-3520028544,3520028551,US
-3520028552,3520028655,CA
-3520028656,3520028671,US
-3520028672,3520028695,CA
-3520028696,3520028711,US
-3520028712,3520029167,CA
-3520029168,3520029175,IL
-3520029176,3520030975,CA
-3520030976,3520030983,NL
-3520030984,3520031143,CA
-3520031144,3520031151,US
-3520031152,3520032039,CA
-3520032040,3520032087,US
-3520032088,3520032103,CA
-3520032104,3520032111,US
-3520032112,3520032119,CA
-3520032120,3520032127,US
-3520032128,3520032159,CA
-3520032160,3520032191,US
-3520032192,3520032199,CA
-3520032200,3520032223,US
-3520032224,3520032303,CA
-3520032304,3520032311,US
-3520032312,3520032399,CA
-3520032400,3520032407,US
-3520032408,3520032591,CA
-3520032592,3520032599,US
-3520032600,3520032687,CA
-3520032688,3520032711,US
-3520032712,3520032735,CA
-3520032736,3520032759,US
-3520032760,3520032767,CA
-3520032768,3520032791,US
-3520032792,3520032807,CA
-3520032808,3520032847,US
-3520032848,3520032855,CA
-3520032856,3520032863,US
-3520032864,3520033583,CA
-3520033584,3520033591,US
-3520033592,3520033631,CA
-3520033632,3520033639,US
-3520033640,3520033671,CA
-3520033672,3520033679,US
-3520033680,3520033695,CA
-3520033696,3520033703,US
-3520033704,3520033759,CA
-3520033760,3520033767,US
-3520033768,3520034151,CA
-3520034152,3520034159,US
-3520034160,3520034167,CA
-3520034168,3520034175,US
-3520034176,3520034263,CA
-3520034264,3520034271,US
-3520034272,3520034487,CA
-3520034488,3520034495,US
-3520034496,3520034559,CA
-3520034560,3520034567,US
-3520034568,3520034639,CA
-3520034640,3520034647,GH
-3520034648,3520034775,CA
-3520034776,3520034791,US
-3520034792,3520035135,CA
-3520035136,3520035263,US
-3520035264,3520035279,CA
-3520035280,3520035287,US
-3520035288,3520035327,CA
-3520035328,3520035335,US
-3520035336,3520035495,CA
-3520035496,3520035503,US
-3520035504,3520035519,CA
-3520035520,3520035543,US
-3520035544,3520036143,CA
-3520036144,3520036151,US
-3520036152,3520036191,CA
-3520036192,3520036199,US
-3520036200,3520036287,CA
-3520036288,3520036295,US
-3520036296,3520036327,CA
-3520036328,3520036343,US
-3520036344,3520036351,CA
-3520036352,3520036359,US
-3520036360,3520036863,CA
-3520036864,3520072751,US
-3520072752,3520072767,AR
-3520072768,3520073039,US
-3520073040,3520073055,CA
-3520073056,3520073239,US
-3520073240,3520073247,BO
-3520073248,3520073255,US
-3520073256,3520073263,BR
-3520073264,3520074671,US
-3520074672,3520074687,GB
-3520074688,3520074783,US
-3520074784,3520074815,NL
-3520074816,3520074847,US
-3520074848,3520074863,GB
-3520074864,3520075311,US
-3520075312,3520075327,BR
-3520075328,3520075455,US
-3520075456,3520075471,CA
-3520075472,3520075743,US
-3520075744,3520075775,NL
-3520075776,3520078031,US
-3520078032,3520078047,BS
-3520078048,3520078911,US
-3520078912,3520078927,AU
-3520078928,3520078943,EC
-3520078944,3520082151,US
-3520082152,3520082167,CA
-3520082168,3520083967,US
-3520083968,3520084031,AE
-3520084032,3520086271,US
+3520020480,3520036863,CA
+3520036864,3520086271,US
3520086272,3520086527,CA
-3520086528,3520086959,US
-3520086960,3520086975,CA
-3520086976,3520087327,US
-3520087328,3520087359,DE
-3520087360,3520087727,US
-3520087728,3520087735,DE
-3520087736,3520088447,US
-3520088448,3520088463,ES
-3520088464,3520092687,US
-3520092688,3520092691,DE
-3520092692,3520095455,US
-3520095456,3520095471,NL
-3520095472,3520097135,US
-3520097136,3520097151,CA
-3520097152,3520097791,US
-3520097792,3520098047,CA
-3520098048,3520099567,US
-3520099568,3520099583,FR
-3520099584,3520100031,US
-3520100032,3520100039,LB
-3520100040,3520101919,US
-3520101920,3520101927,BR
-3520101928,3520112975,US
-3520112976,3520112991,ES
-3520112992,3520114399,US
-3520114400,3520114407,VG
-3520114408,3520121519,US
-3520121520,3520121535,GB
-3520121536,3520356351,US
+3520086528,3520135167,US
+3520167936,3520344063,US
+3520348160,3520356351,US
3520356352,3520364543,ZA
-3520364544,3520369096,US
-3520369097,3520369097,US
-3520369098,3520397311,US
-3520401408,3520413439,US
+3520364544,3520413439,US
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,3520652287,US
-3520652288,3520652543,US
-3520652544,3520656383,US
-3520656384,3520656639,US
-3520656640,3520675839,US
-3520675840,3520679439,CA
-3520679440,3520679447,US
-3520679448,3520691583,CA
-3520691584,3520691591,US
-3520691592,3520691807,CA
-3520691808,3520691839,US
-3520691840,3520692223,CA
-3520692224,3520716908,US
-3520716909,3520716910,IN
-3520716911,3520717015,US
-3520717016,3520717023,IN
-3520717024,3520749871,US
-3520749872,3520749879,CA
-3520749880,3520937983,US
+3520634880,3520675839,US
+3520675840,3520692223,CA
+3520692224,3520937983,US
3520937984,3520954367,CA
-3520954368,3520978943,US
-3520978944,3520979711,BZ
-3520979712,3520980735,GB
-3520980736,3520981247,NL
-3520981248,3520987903,US
-3520987904,3520987935,US
-3520987936,3520994815,US
-3520994816,3520995327,ES
+3520954368,3520994815,US
+3520994816,3520995071,GB
+3520995072,3520995327,ES
3520995328,3520999423,US
3520999424,3521003519,CA
3521003520,3521028095,US
3521028096,3521032191,CA
3521032192,3521044479,US
3521044480,3521048575,CA
-3521048576,3521049599,US
-3521052672,3521061671,US
-3521061672,3521061679,CA
-3521061680,3521074687,US
-3521074688,3521074695,CA
-3521074696,3521074735,US
-3521074736,3521074751,AU
-3521074752,3521086207,US
+3521048576,3521086207,US
3521086208,3521086463,AU
-3521086464,3521098551,US
-3521098552,3521098559,MX
-3521098560,3521103231,US
-3521103232,3521103263,CA
-3521103264,3521106527,US
-3521106528,3521106543,CA
-3521106544,3521186623,US
-3521186624,3521186687,AR
-3521186688,3521192703,US
-3521192704,3521192735,FR
-3521192736,3521196287,US
+3521086464,3521196287,US
3521196288,3521196543,AR
-3521196544,3521199103,US
-3521199104,3521199167,CA
-3521199168,3521199215,US
-3521199216,3521199223,CA
-3521199224,3521199231,US
-3521199232,3521199239,CA
-3521199240,3521249279,US
+3521196544,3521216511,US
+3521216512,3521220351,CA
+3521220352,3521220607,US
+3521220608,3521222143,CA
+3521222144,3521222399,US
+3521222400,3521224959,CA
+3521224960,3521225215,US
+3521225216,3521232127,CA
+3521232128,3521232383,US
+3521232384,3521232895,CA
+3521232896,3521249279,US
3521249280,3521314815,CA
-3521314816,3521364735,US
-3521364736,3521364815,IT
-3521364816,3521366783,US
+3521314816,3521347583,US
+3521347584,3521363967,CA
+3521363968,3521366783,US
3521366784,3521367039,CY
-3521367040,3521371423,US
-3521371424,3521371455,IT
-3521371456,3521371463,US
-3521371464,3521371495,IT
-3521371496,3521371647,US
-3521371648,3521371679,CA
-3521371680,3521371711,US
-3521371712,3521371759,CA
-3521371760,3521371903,US
-3521371904,3521371911,IT
-3521371912,3521371919,US
-3521371920,3521371983,IT
-3521371984,3521371999,US
-3521372000,3521372031,IT
-3521372032,3521372063,US
-3521372064,3521372079,IN
-3521372080,3521372095,IT
-3521372096,3521372159,CA
-3521372160,3521377407,US
-3521377408,3521377439,IT
-3521377440,3521835903,US
-3521835904,3521835967,CA
-3521835968,3521904639,US
+3521367040,3521802239,US
+3521806336,3521888483,US
+3521888484,3521888484,KW
+3521888485,3521896927,US
+3521896928,3521896935,NG
+3521896936,3521899263,US
+3521899264,3521899271,KW
+3521899272,3521904148,US
+3521904149,3521904149,NG
+3521904150,3521904639,US
3521904640,3521921023,JM
-3521921024,3521933337,US
-3521933338,3521933345,MA
-3521933346,3521933389,US
-3521933390,3521933397,AE
-3521933398,3521933405,US
-3521933406,3521933413,VE
-3521933414,3521933421,IN
-3521933422,3521933429,US
-3521933430,3521933437,EG
-3521933438,3521933445,VE
-3521933446,3521933493,US
-3521933494,3521933501,EG
-3521933502,3521933833,US
-3521933834,3521933841,EG
-3521933842,3521933929,US
-3521933930,3521933937,IN
-3521933938,3521933945,US
-3521933946,3521933953,EG
-3521933954,3521933965,US
-3521933966,3521933973,ID
-3521933974,3521933981,EG
-3521933982,3521933989,IN
-3521933990,3521933997,EG
-3521933998,3521934061,US
-3521934062,3521934069,EG
-3521934070,3521934089,US
-3521934090,3521934097,EG
-3521934098,3521934121,US
-3521934122,3521934129,ID
-3521934130,3521934137,US
-3521934138,3521934145,GR
-3521934146,3521934153,US
-3521934154,3521934161,ID
-3521934162,3521934193,US
-3521934194,3521934201,LK
-3521934202,3521934289,US
-3521934290,3521934297,EG
-3521934298,3521934318,US
-3521934319,3521934326,SA
-3521934327,3521934369,US
-3521934370,3521934377,IN
-3521934378,3521934421,US
-3521934422,3521934429,EG
-3521934430,3521934437,US
-3521934438,3521934445,IN
-3521934446,3521934509,US
-3521934510,3521934517,IN
-3521934518,3521934735,US
-3521934736,3521934743,EG
-3521934744,3521935245,US
-3521935246,3521935253,LK
-3521935254,3521935310,US
-3521935311,3521935318,EG
-3521935319,3521965055,US
+3521921024,3521965055,US
3521965056,3521966079,DE
-3521966080,3521989631,US
-3521989632,3521989887,A2
-3521989888,3522029439,US
-3522029440,3522029503,FI
-3522029504,3522029567,CA
-3522029568,3522101247,US
+3521966080,3522101247,US
3522101248,3522109439,CA
-3522109440,3522118143,US
-3522118144,3522118655,GB
+3522109440,3522118399,US
+3522118400,3522118655,GB
3522118656,3522118911,US
3522118912,3522119679,GB
3522119680,3522119935,US
@@ -158538,391 +84564,22 @@
3522123520,3522123775,GB
3522123776,3522125055,US
3522125056,3522125311,GB
-3522125312,3522130193,US
-3522130194,3522130194,BR
-3522130195,3522130195,CA
-3522130196,3522130205,US
-3522130206,3522130207,BR
-3522130208,3522130210,US
-3522130211,3522130211,CA
-3522130212,3522130220,US
-3522130221,3522130221,BR
-3522130222,3522130230,US
-3522130231,3522130231,TH
-3522130232,3522130236,US
-3522130237,3522130237,BR
-3522130238,3522130238,US
-3522130239,3522130240,BR
-3522130241,3522130252,US
-3522130253,3522130253,BR
+3522125312,3522130253,US
3522130254,3522130254,UA
-3522130255,3522130259,US
-3522130260,3522130260,CH
-3522130261,3522130263,US
-3522130264,3522130264,PE
-3522130265,3522130269,US
-3522130270,3522130270,IN
-3522130271,3522130280,US
-3522130281,3522130281,BR
-3522130282,3522130282,DE
-3522130283,3522130283,BR
-3522130284,3522130284,US
-3522130285,3522130285,BR
-3522130286,3522130289,US
-3522130290,3522130290,AR
-3522130291,3522130291,BR
-3522130292,3522130293,US
-3522130294,3522130294,GT
-3522130295,3522130296,US
-3522130297,3522130297,CA
-3522130298,3522130298,DE
-3522130299,3522130299,CA
-3522130300,3522130302,US
-3522130303,3522130303,BR
-3522130304,3522130306,US
-3522130307,3522130307,NP
-3522130308,3522130309,BR
-3522130310,3522130312,CA
-3522130313,3522130313,US
-3522130314,3522130314,BR
-3522130315,3522130325,US
-3522130326,3522130326,EE
-3522130327,3522130330,US
-3522130331,3522130331,BR
-3522130332,3522130332,US
-3522130333,3522130333,DE
-3522130334,3522130334,BR
-3522130335,3522130335,US
-3522130336,3522130336,DO
-3522130337,3522130339,US
-3522130340,3522130341,DO
-3522130342,3522130342,PK
-3522130343,3522130343,BR
-3522130344,3522130346,US
-3522130347,3522130348,CA
-3522130349,3522130349,US
-3522130350,3522130350,GT
-3522130351,3522130351,US
-3522130352,3522130352,BR
-3522130353,3522130356,US
-3522130357,3522130357,RU
-3522130358,3522130360,CA
-3522130361,3522130361,US
-3522130362,3522130362,BR
-3522130363,3522130363,US
-3522130364,3522130364,DE
-3522130365,3522130365,EC
-3522130366,3522130366,US
-3522130367,3522130368,TW
-3522130369,3522130370,HK
-3522130371,3522130371,US
-3522130372,3522130372,CO
-3522130373,3522130373,MX
-3522130374,3522130374,CO
-3522130375,3522130376,BR
-3522130377,3522130377,US
-3522130378,3522130378,BR
-3522130379,3522130383,US
-3522130384,3522130384,UA
-3522130385,3522130389,US
-3522130390,3522130391,PK
-3522130392,3522130392,AR
-3522130393,3522130393,US
-3522130394,3522130394,AR
-3522130395,3522130400,US
-3522130401,3522130401,PK
-3522130402,3522130405,US
-3522130406,3522130408,BR
-3522130409,3522130412,US
-3522130413,3522130413,TW
-3522130414,3522130415,US
-3522130416,3522130416,EC
-3522130417,3522130417,US
-3522130418,3522130418,CO
-3522130419,3522130421,US
-3522130422,3522130422,BR
-3522130423,3522130423,CA
-3522130424,3522130425,SE
-3522130426,3522130426,PH
-3522130427,3522130427,BG
-3522130428,3522130428,US
-3522130429,3522130429,PK
-3522130430,3522130430,CA
-3522130431,3522130710,US
-3522130711,3522130728,BR
-3522130729,3522130787,US
-3522130788,3522130810,BR
-3522130811,3522130831,US
-3522130832,3522130894,BR
-3522130895,3522131455,US
-3522131456,3522131487,CY
-3522131488,3522131519,DE
-3522131520,3522131528,BR
-3522131529,3522131531,TR
-3522131532,3522131532,US
-3522131533,3522131551,BR
-3522131552,3522131615,US
-3522131616,3522131647,BR
-3522131648,3522131711,US
-3522131712,3522131743,GB
-3522131744,3522131775,US
-3522131776,3522131807,TR
-3522131808,3522131844,US
-3522131845,3522131846,BR
-3522131847,3522131850,US
-3522131851,3522131851,BR
-3522131852,3522131855,US
-3522131856,3522131856,IN
-3522131857,3522131857,US
-3522131858,3522131858,IN
-3522131859,3522131860,PK
-3522131861,3522131886,US
-3522131887,3522131889,BR
-3522131890,3522131890,US
-3522131891,3522131891,UA
-3522131892,3522131892,VN
-3522131893,3522131893,BR
-3522131894,3522131897,US
-3522131898,3522131898,RU
-3522131899,3522131899,BD
-3522131900,3522131900,BR
-3522131901,3522131904,US
-3522131905,3522131905,BR
-3522131906,3522131906,CA
-3522131907,3522131907,DE
-3522131908,3522131909,US
-3522131910,3522131911,DE
-3522131912,3522131913,IN
-3522131914,3522131916,US
-3522131917,3522131917,RO
-3522131918,3522131919,GB
-3522131920,3522131922,US
-3522131923,3522131923,GB
-3522131924,3522131926,BR
-3522131927,3522131929,US
-3522131930,3522131931,UA
-3522131932,3522131932,US
-3522131933,3522131933,BR
-3522131934,3522131936,US
-3522131937,3522131937,BD
-3522131938,3522131940,BR
-3522131941,3522131942,US
-3522131943,3522131943,IN
-3522131944,3522131948,US
-3522131949,3522131949,IN
-3522131950,3522131950,SV
-3522131951,3522131953,US
-3522131954,3522131954,AR
-3522131955,3522131957,US
-3522131958,3522131959,DE
-3522131960,3522131960,US
-3522131961,3522131964,BR
-3522131965,3522132100,US
-3522132101,3522132101,BR
-3522132102,3522132107,US
-3522132108,3522132109,BR
-3522132110,3522132123,US
-3522132124,3522132124,GB
-3522132125,3522132129,US
-3522132130,3522132130,BD
-3522132131,3522132132,BR
-3522132133,3522132133,BD
-3522132134,3522132138,US
-3522132139,3522132142,BR
-3522132143,3522132144,GB
-3522132145,3522132145,US
-3522132146,3522132147,IN
-3522132148,3522132151,US
-3522132152,3522132152,BR
-3522132153,3522132155,US
-3522132156,3522132156,BD
-3522132157,3522132157,US
-3522132158,3522132158,BR
-3522132159,3522132159,US
-3522132160,3522132160,BR
-3522132161,3522132162,PK
-3522132163,3522132163,IN
-3522132164,3522132166,US
-3522132167,3522132167,IN
-3522132168,3522132175,BR
-3522132176,3522132176,IN
-3522132177,3522132180,PK
-3522132181,3522132181,IN
-3522132182,3522132182,PK
-3522132183,3522132184,BR
-3522132185,3522132185,VN
-3522132186,3522132188,NL
-3522132189,3522132189,US
-3522132190,3522132190,DE
-3522132191,3522132191,GB
-3522132192,3522132192,BR
-3522132193,3522132193,PK
-3522132194,3522132194,US
-3522132195,3522132195,IN
-3522132196,3522132197,AT
-3522132198,3522132198,MX
-3522132199,3522132202,US
-3522132203,3522132203,BR
-3522132204,3522132204,AR
-3522132205,3522132205,US
-3522132206,3522132206,BR
-3522132207,3522132210,US
-3522132211,3522132211,GB
-3522132212,3522132212,US
-3522132213,3522132213,BR
-3522132214,3522132219,US
-3522132220,3522132220,IN
-3522132221,3522132221,JP
-3522132222,3522132222,BD
-3522132223,3522132356,US
-3522132357,3522132358,BR
-3522132359,3522132359,AT
-3522132360,3522132365,US
-3522132366,3522132366,BR
-3522132367,3522132372,US
-3522132373,3522132373,BR
-3522132374,3522132380,US
-3522132381,3522132381,BR
-3522132382,3522132389,US
-3522132390,3522132390,BR
-3522132391,3522132395,US
-3522132396,3522132397,BD
-3522132398,3522132400,IN
-3522132401,3522132402,US
-3522132403,3522132404,CA
-3522132405,3522132407,US
-3522132408,3522132408,DE
-3522132409,3522132409,GB
-3522132410,3522132410,TR
-3522132411,3522132411,CL
-3522132412,3522132414,US
-3522132415,3522132415,CA
-3522132416,3522132417,GB
-3522132418,3522132418,BD
-3522132419,3522132419,IN
-3522132420,3522132422,US
-3522132423,3522132425,IN
-3522132426,3522132426,BR
-3522132427,3522132427,BD
-3522132428,3522132430,BR
-3522132431,3522132431,BY
-3522132432,3522132432,TR
-3522132433,3522132433,US
-3522132434,3522132437,BR
-3522132438,3522132443,US
-3522132444,3522132444,VN
-3522132445,3522132446,US
-3522132447,3522132453,BR
-3522132454,3522132459,US
-3522132460,3522132460,BD
-3522132461,3522132461,BR
-3522132462,3522132462,BD
-3522132463,3522132463,IN
-3522132464,3522132464,US
-3522132465,3522132466,IN
-3522132467,3522132468,ZA
-3522132469,3522132470,US
-3522132471,3522132472,IN
-3522132473,3522132473,BR
-3522132474,3522132475,US
-3522132476,3522132476,BD
-3522132477,3522132477,IN
-3522132478,3522132575,US
-3522132576,3522132607,BR
-3522132608,3522132639,CA
-3522132640,3522132671,US
-3522132672,3522132703,BR
-3522132704,3522132735,LK
-3522132736,3522132746,IN
-3522132747,3522132747,BR
-3522132748,3522132748,IN
-3522132749,3522132749,BR
-3522132750,3522132750,IN
-3522132751,3522132752,BR
-3522132753,3522132753,IN
-3522132754,3522132767,BR
-3522132768,3522132831,US
-3522132832,3522132863,BR
-3522132864,3522132895,US
-3522132896,3522132927,CA
-3522132928,3522132994,US
-3522132995,3522132996,GB
-3522132997,3522133002,US
-3522133003,3522133003,MX
-3522133004,3522133005,PK
-3522133006,3522133006,BR
-3522133007,3522133007,TR
-3522133008,3522133008,PK
-3522133009,3522133010,US
-3522133011,3522133011,SK
-3522133012,3522133013,US
-3522133014,3522133014,CZ
-3522133015,3522133016,IN
-3522133017,3522133017,UA
-3522133018,3522133018,DE
-3522133019,3522133023,US
-3522133024,3522133055,BR
-3522133056,3522133124,US
-3522133125,3522133125,BR
-3522133126,3522133134,US
-3522133135,3522133135,GT
-3522133136,3522133136,UA
-3522133137,3522133137,US
-3522133138,3522133138,BD
-3522133139,3522133139,US
-3522133140,3522133142,BR
-3522133143,3522133146,US
-3522133147,3522133147,AR
-3522133148,3522133148,US
-3522133149,3522133149,BG
-3522133150,3522133154,US
-3522133155,3522133155,BR
-3522133156,3522133158,VN
-3522133159,3522133159,US
-3522133160,3522133160,BR
-3522133161,3522133161,US
-3522133162,3522133162,PK
-3522133163,3522133163,BR
-3522133164,3522133164,US
-3522133165,3522133165,PE
-3522133166,3522133168,US
-3522133169,3522133169,DE
-3522133170,3522133171,US
-3522133172,3522133172,PE
-3522133173,3522133173,VN
-3522133174,3522133175,US
-3522133176,3522133176,AR
-3522133177,3522133178,US
-3522133179,3522133179,TR
-3522133180,3522133180,BR
-3522133181,3522133311,US
-3522133312,3522133375,CH
-3522133376,3522133535,US
-3522133536,3522133567,TR
-3522133568,3522133599,BR
-3522133600,3522133603,US
-3522133604,3522133620,BR
-3522133621,3522133621,US
-3522133622,3522133622,BR
-3522133623,3522133639,US
-3522133640,3522133647,DE
-3522133648,3522133663,US
-3522133664,3522133695,DE
-3522133696,3522133759,US
-3522133760,3522133791,TR
-3522133792,3522174975,US
+3522130255,3522174975,US
3522174976,3522179071,BM
3522179072,3522195455,US
3522195456,3522199551,CA
-3522199552,3522773503,US
-3522773504,3522773759,US
-3522773760,3522854911,US
+3522199552,3522854911,US
3522854912,3522871295,CA
-3522871296,3522902015,US
+3522871296,3522893823,US
+3522895872,3522902015,US
3522902016,3522903039,CA
3522903040,3522937855,US
3522937856,3522938367,GB
-3522938368,3523215359,US
+3522938368,3522940415,US
+3522940416,3522940671,HK
+3522940672,3523215359,US
3523215360,3523223551,AU
3523223552,3523231743,KR
3523231744,3523248127,AU
@@ -158960,29 +84617,14 @@
3523557376,3523559423,CN
3523559424,3523575807,PH
3523575808,3523583999,CN
-3523584000,3523592495,HK
-3523592496,3523592503,IQ
-3523592504,3523593535,HK
-3523593536,3523593599,IR
-3523593600,3523593855,HK
-3523593856,3523593919,IR
-3523593920,3523597823,HK
-3523597824,3523598079,US
-3523598080,3523601663,HK
+3523584000,3523601663,HK
3523601664,3523601919,SA
-3523601920,3523603199,HK
-3523603200,3523603455,US
-3523603456,3523603711,HK
-3523603712,3523603967,EU
-3523603968,3523674111,HK
+3523601920,3523674111,HK
3523674112,3523682303,FJ
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
@@ -159010,9 +84652,26 @@
3524722688,3524730879,SG
3524730880,3524739071,CN
3524739072,3524743167,ID
-3524743168,3524747263,MP
+3524743168,3524745727,MP
+3524745728,3524745983,GU
+3524745984,3524747263,MP
3524747264,3524755455,PH
-3524755456,3524763647,AU
+3524755456,3524756223,AU
+3524756224,3524756479,SG
+3524756480,3524756991,AU
+3524756992,3524757247,SG
+3524757248,3524758015,AU
+3524758016,3524758271,SG
+3524758272,3524758527,AU
+3524758528,3524758783,SG
+3524758784,3524759039,AU
+3524759040,3524759295,SG
+3524759296,3524759551,AU
+3524759552,3524760575,SG
+3524760576,3524761343,AU
+3524761344,3524761599,SG
+3524761600,3524761855,AU
+3524761856,3524763647,SG
3524763648,3524788223,PH
3524788224,3524853759,SG
3524853760,3526361087,CN
@@ -159029,7 +84688,9 @@
3526557696,3526651135,CN
3526651136,3526651391,KP
3526651392,3526754303,CN
-3526754304,3526885375,NZ
+3526754304,3526845183,NZ
+3526845184,3526845439,AU
+3526845440,3526885375,NZ
3526885376,3526893567,PK
3526893568,3526897663,NZ
3526897664,3526901759,HK
@@ -159055,13 +84716,11 @@
3528441856,3528445951,JP
3528445952,3528450047,ID
3528450048,3528458239,CN
-3528458240,3528474623,AP
+3528458240,3528474623,AF
3528474624,3528482815,TW
3528482816,3528491007,KR
3528491008,3528507391,AU
-3528507392,3528576767,JP
-3528576768,3528577023,AP
-3528577024,3528589311,JP
+3528507392,3528589311,JP
3528589312,3528720383,CN
3528720384,3528785919,AU
3528785920,3528851455,TW
@@ -159081,14 +84740,23 @@
3529089024,3529097215,KR
3529097216,3529113599,JP
3529113600,3531603967,KR
-3531603968,3532929279,JP
-3532929280,3532929535,AP
-3532929536,3534749695,JP
-3534749696,3534763775,HK
-3534763776,3534764031,AP
-3534764032,3534867711,HK
-3534867712,3534867967,AP
-3534867968,3534880767,HK
+3531603968,3533765631,JP
+3533765632,3533765887,CN
+3533765888,3534749695,JP
+3534749696,3534758043,HK
+3534758044,3534758143,AU
+3534758144,3534758147,JP
+3534758148,3534758911,HK
+3534758912,3534758927,PH
+3534758928,3534758975,HK
+3534758976,3534759039,PH
+3534759040,3534759167,HK
+3534759168,3534759183,JP
+3534759184,3534760703,HK
+3534760704,3534760711,NZ
+3534760712,3534761471,HK
+3534761472,3534761535,AU
+3534761536,3534880767,HK
3534880768,3535273983,KR
3535273984,3535339519,HK
3535339520,3535355903,NZ
@@ -159127,9 +84795,7 @@
3537174528,3537190911,TH
3537190912,3537240063,PH
3537240064,3537305599,IN
-3537305600,3537325567,AU
-3537325568,3537325823,AP
-3537325824,3537371135,AU
+3537305600,3537371135,AU
3537371136,3537895423,KR
3537895424,3538943999,JP
3538944000,3539271679,TW
@@ -159140,9 +84806,7 @@
3539402752,3539435519,JP
3539435520,3539464191,AU
3539464192,3539468287,ID
-3539468288,3539510271,JP
-3539510272,3539510527,AP
-3539510528,3541303295,JP
+3539468288,3541303295,JP
3541303296,3541565439,TW
3541565440,3541696511,MY
3541696512,3542089727,AU
@@ -159153,34 +84817,17 @@
3544711168,3545235455,TW
3545235456,3546808319,CN
3546808320,3547856895,KR
-3547856896,3547916287,JP
-3547916288,3547916543,US
-3547916544,3548905471,JP
+3547856896,3548905471,JP
3548905472,3551002623,CN
3551002624,3556769791,KR
-3556769792,3556774399,DE
-3556774400,3556786175,EU
+3556769792,3556773887,DE
3556786176,3556794367,RU
-3556794368,3556797839,ES
-3556797840,3556797847,PT
-3556797848,3556800079,ES
-3556800080,3556800087,FR
-3556800088,3556800399,ES
-3556800400,3556800407,FR
-3556800408,3556800799,ES
-3556800800,3556800807,FR
-3556800808,3556802479,ES
-3556802480,3556802487,PT
-3556802488,3556802559,ES
+3556794368,3556802559,ES
3556802560,3556810751,SD
3556810752,3556818943,PT
3556818944,3556827135,MD
-3556827136,3556837887,NL
-3556837888,3556838143,EU
-3556838144,3556843519,NL
-3556843520,3556847935,DE
-3556847936,3556847967,US
-3556847968,3556851711,DE
+3556827136,3556843519,NL
+3556843520,3556851711,DE
3556851712,3556868095,UA
3556868096,3556876287,GB
3556876288,3556884479,NL
@@ -159198,84 +84845,21 @@
3556958208,3556966399,KG
3556966400,3556974591,SE
3556974592,3556982783,ES
-3556982784,3556984123,DE
-3556984124,3556984127,IT
-3556984128,3556984415,DE
-3556984416,3556984419,ES
-3556984420,3556984623,DE
-3556984624,3556984639,FR
-3556984640,3556984647,DE
-3556984648,3556984651,FR
-3556984652,3556984655,DE
-3556984656,3556984743,FR
-3556984744,3556984747,DE
-3556984748,3556984751,FR
-3556984752,3556984759,DE
-3556984760,3556984767,FR
-3556984768,3556985119,DE
-3556985120,3556985135,ES
-3556985136,3556985143,DE
-3556985144,3556985151,ES
-3556985152,3556985155,DE
-3556985156,3556985159,ES
-3556985160,3556985207,DE
-3556985208,3556985215,ES
-3556985216,3556985663,DE
-3556985664,3556985671,HU
-3556985672,3556986143,DE
-3556986144,3556986155,DK
-3556986156,3556986399,DE
-3556986400,3556986415,AT
-3556986416,3556990975,DE
+3556982784,3556990975,DE
3556990976,3556999167,UA
3556999168,3557007359,RU
3557007360,3557015551,IT
3557015552,3557023743,DE
-3557023744,3557023879,BE
-3557023880,3557023887,GB
-3557023888,3557023999,BE
-3557024000,3557024255,GB
-3557024256,3557024767,BE
-3557024768,3557025791,GB
-3557025792,3557026047,BE
-3557026048,3557026303,GB
-3557026304,3557026815,BE
-3557026816,3557027071,GB
-3557027072,3557027839,BE
-3557027840,3557027863,GB
-3557027864,3557028031,BE
-3557028032,3557028063,GB
-3557028064,3557028095,BE
-3557028096,3557028351,GB
-3557028352,3557028735,BE
-3557028736,3557028799,GB
-3557028800,3557029887,BE
-3557029888,3557029951,GB
-3557029952,3557030079,BE
-3557030080,3557030143,GB
-3557030144,3557030719,BE
-3557030720,3557030751,GB
-3557030752,3557030767,BE
-3557030768,3557030783,GB
-3557030784,3557031807,BE
-3557031808,3557031935,GB
-3557031936,3557033575,IT
-3557033576,3557033583,GB
-3557033584,3557040127,IT
+3557023744,3557027327,GB
+3557027328,3557027583,NL
+3557027584,3557031935,GB
+3557031936,3557040127,IT
3557040128,3557048319,NO
3557048320,3557056511,CH
3557056512,3557064703,ES
-3557064704,3557072511,CZ
-3557072512,3557072543,US
-3557072544,3557072895,CZ
+3557064704,3557072895,CZ
3557072896,3557081087,DE
-3557081088,3557086015,NL
-3557086016,3557086047,DE
-3557086048,3557086079,GB
-3557086080,3557086719,NL
-3557086720,3557086783,CH
-3557086784,3557086847,IT
-3557086848,3557089279,NL
+3557081088,3557089279,NL
3557089280,3557105663,DE
3557105664,3557113855,BG
3557113856,3557130239,RU
@@ -159283,39 +84867,14 @@
3557138432,3557146623,RU
3557146624,3557154815,SK
3557154816,3557171199,RU
-3557171200,3557172479,A2
-3557172480,3557172991,IR
-3557172992,3557173503,IQ
-3557173504,3557173631,IR
-3557173632,3557173695,IQ
-3557173696,3557173703,AE
-3557173704,3557173759,A2
-3557173760,3557174015,IR
-3557174016,3557174527,A2
-3557174528,3557174783,IR
-3557174784,3557175039,AE
-3557175040,3557176063,IR
-3557176064,3557176575,A2
-3557176576,3557176619,NE
-3557176620,3557176831,A2
-3557176832,3557177023,IQ
-3557177024,3557177343,A2
-3557177344,3557177599,IT
-3557177600,3557179135,A2
-3557179136,3557179391,IT
-3557179392,3557213351,DE
-3557213352,3557213359,US
-3557213360,3557228543,DE
+3557171200,3557179391,IT
+3557179392,3557228543,DE
3557228544,3557236735,EE
3557236736,3557244927,ES
3557244928,3557253119,IT
3557253120,3557261311,RU
3557261312,3557277695,DE
-3557277696,3557278710,NL
-3557278711,3557278714,CH
-3557278715,3557280334,NL
-3557280335,3557280336,IN
-3557280337,3557283839,NL
+3557277696,3557283839,NL
3557283840,3557284863,PL
3557284864,3557285887,NL
3557285888,3557294079,RU
@@ -159323,133 +84882,24 @@
3557302272,3557310463,UA
3557310464,3557326847,ES
3557326848,3557335039,DE
-3557335040,3557335311,BE
-3557335312,3557335327,EU
-3557335328,3557335391,BE
-3557335392,3557335455,EU
-3557335456,3557335519,BE
-3557335520,3557335535,EU
-3557335536,3557335679,BE
-3557335680,3557336127,EU
-3557336128,3557336191,BE
-3557336192,3557336255,EU
-3557336256,3557336319,BE
-3557336320,3557336575,EU
-3557336576,3557336647,BE
-3557336648,3557336655,EU
-3557336656,3557336831,BE
-3557336832,3557338111,EU
-3557338112,3557338367,BE
-3557338368,3557338495,EU
-3557338496,3557338615,BE
-3557338616,3557338879,EU
-3557338880,3557340159,BE
-3557340160,3557340191,EU
-3557340192,3557340927,BE
-3557340928,3557341183,EU
-3557341184,3557341455,BE
-3557341456,3557341471,EU
-3557341472,3557341527,BE
-3557341528,3557341535,EU
-3557341536,3557341551,BE
-3557341552,3557341559,EU
-3557341560,3557341567,BE
-3557341568,3557341663,EU
-3557341664,3557341695,BE
-3557341696,3557341951,EU
-3557341952,3557342503,BE
-3557342504,3557342559,EU
-3557342560,3557342623,BE
-3557342624,3557342719,EU
-3557342720,3557343231,BE
+3557340288,3557340927,BE
3557343232,3557351423,DE
3557351424,3557359615,RU
-3557359616,3557359647,GB
-3557359648,3557359655,JE
-3557359656,3557359671,GB
-3557359672,3557359743,JE
-3557359744,3557359791,GB
-3557359792,3557359871,JE
-3557359872,3557360045,GB
-3557360046,3557360047,JE
-3557360048,3557360243,GB
-3557360244,3557360247,JE
-3557360248,3557360399,GB
-3557360400,3557360407,JE
-3557360408,3557360471,GB
-3557360472,3557360487,JE
-3557360488,3557360495,GB
-3557360496,3557360527,JE
-3557360528,3557360535,GB
-3557360536,3557360543,JE
-3557360544,3557360559,GB
-3557360560,3557360575,JE
-3557360576,3557360680,GB
-3557360681,3557360687,JE
-3557360688,3557360895,GB
-3557360896,3557361151,JE
-3557361152,3557361159,GB
-3557361160,3557361167,JE
-3557361168,3557361375,GB
-3557361376,3557361391,JE
-3557361392,3557361415,GB
-3557361416,3557361423,JE
-3557361424,3557361607,GB
-3557361608,3557361615,JE
-3557361616,3557361951,GB
-3557361952,3557361983,JE
-3557361984,3557362047,GB
-3557362048,3557362175,JE
-3557362176,3557362439,GB
-3557362440,3557363199,JE
-3557363200,3557363359,GB
-3557363360,3557363455,JE
-3557363456,3557363471,GB
-3557363472,3557363479,JE
-3557363480,3557363535,GB
-3557363536,3557363543,JE
-3557363544,3557363655,GB
-3557363656,3557363663,JE
-3557363664,3557363671,GB
-3557363672,3557363679,JE
-3557363680,3557364103,GB
-3557364104,3557364107,JE
-3557364108,3557364187,GB
-3557364188,3557364199,JE
-3557364200,3557364479,GB
-3557364480,3557364735,JE
-3557364736,3557364751,GB
-3557364752,3557364759,JE
-3557364760,3557364791,GB
-3557364792,3557364847,JE
-3557364848,3557364895,GB
-3557364896,3557364927,JE
-3557364928,3557364959,GB
-3557364960,3557364975,JE
-3557364976,3557364984,GB
-3557364985,3557365375,JE
-3557365376,3557365415,GB
-3557365416,3557365503,JE
-3557365504,3557365511,GB
-3557365512,3557365519,JE
-3557365520,3557365551,GB
-3557365552,3557365567,JE
-3557365568,3557365631,GB
-3557365632,3557365695,JE
-3557365696,3557365807,GB
-3557365808,3557365823,JE
-3557365824,3557365847,GB
-3557365848,3557365871,JE
-3557365872,3557365887,GB
-3557365888,3557365895,JE
-3557365896,3557365911,GB
-3557365912,3557365919,JE
-3557365920,3557365927,GB
-3557365928,3557366015,JE
-3557366016,3557366055,GB
-3557366056,3557366063,JE
-3557366064,3557366783,GB
-3557366784,3557367807,JE
+3557359616,3557359991,JE
+3557359992,3557359999,GB
+3557360000,3557360047,JE
+3557360048,3557360055,GB
+3557360056,3557360127,JE
+3557360128,3557360135,GB
+3557360136,3557360263,JE
+3557360264,3557360271,GB
+3557360272,3557360743,JE
+3557360744,3557360751,GB
+3557360752,3557360863,JE
+3557360864,3557360871,GB
+3557360872,3557365791,JE
+3557365792,3557365799,GB
+3557365800,3557367807,JE
3557367808,3557375999,DE
3557376000,3557384191,ES
3557384192,3557392383,GB
@@ -159458,9 +84908,7 @@
3557408768,3557416959,GB
3557416960,3557425151,UA
3557425152,3557490687,DK
-3557490688,3557497431,FR
-3557497432,3557497439,A2
-3557497440,3557507071,FR
+3557490688,3557507071,FR
3557507072,3557515263,GB
3557515264,3557523455,CZ
3557523456,3557531647,RU
@@ -159470,19 +84918,9 @@
3557556224,3557564415,RU
3557564416,3557572607,DE
3557572608,3557580799,RU
-3557580800,3557584287,DE
-3557584288,3557584319,GB
-3557584320,3557585151,DE
-3557585152,3557585279,CH
-3557585280,3557585695,DE
-3557585696,3557585711,CH
-3557585712,3557585887,DE
-3557585888,3557585903,CH
-3557585904,3557588991,DE
+3557580800,3557588991,DE
3557588992,3557597183,TR
-3557597184,3557597711,SA
-3557597712,3557597719,AS
-3557597720,3557605375,SA
+3557597184,3557605375,SA
3557605376,3557613567,LT
3557613568,3557621759,EG
3557621760,3557629951,RU
@@ -159511,22 +84949,13 @@
3557834752,3557842943,IR
3557842944,3557851135,FI
3557851136,3557859327,HU
-3557859328,3557859839,SE
-3557859840,3557860095,NO
-3557860096,3557860607,SE
-3557860608,3557860863,FI
-3557860864,3557861119,NO
-3557861120,3557861983,SE
+3557859328,3557860831,SE
+3557860832,3557860847,FI
+3557860848,3557861983,SE
3557861984,3557862015,FI
-3557862016,3557862399,SE
-3557862400,3557862911,FI
-3557862912,3557863295,SE
-3557863296,3557863359,FI
-3557863360,3557863391,SE
-3557863392,3557863399,FI
-3557863400,3557864287,SE
-3557864288,3557864303,DK
-3557864304,3557864311,SE
+3557862016,3557863295,SE
+3557863296,3557863327,FI
+3557863328,3557864311,SE
3557864312,3557864319,FI
3557864320,3557867519,SE
3557867520,3557875711,RU
@@ -159537,307 +84966,105 @@
3557916672,3557920055,NO
3557920056,3557920056,DK
3557920057,3557924863,NO
-3557924864,3557925887,FI
-3557925888,3557926911,AX
-3557926912,3557933055,FI
+3557924864,3557925887,AX
+3557925888,3557929983,FI
+3557929984,3557933055,AX
3557933056,3557941247,IT
-3557941248,3557945183,DE
-3557945184,3557945199,GB
-3557945200,3557957631,DE
+3557941248,3557957631,DE
3557957632,3557965823,SI
-3557965824,3557969407,DE
-3557969408,3557969663,EU
-3557969664,3557974015,DE
+3557965824,3557974015,DE
3557974016,3557982207,CH
3557982208,3557990399,NO
3557990400,3557998591,PT
3557998592,3558006783,DE
-3558006784,3558014975,GB
+3558006784,3558010879,GB
+3558010880,3558012927,FR
+3558012928,3558014975,GB
3558014976,3558023167,RU
-3558023168,3558023199,GB
-3558023200,3558023343,DE
-3558023344,3558023359,GB
-3558023360,3558024383,DE
-3558024384,3558024415,GB
-3558024416,3558028063,DE
-3558028064,3558028071,CH
-3558028072,3558030655,DE
-3558030656,3558030659,CH
-3558030660,3558031359,DE
+3558023168,3558031359,DE
3558031360,3558039551,GB
3558039552,3558047743,IT
3558047744,3558055935,KZ
3558055936,3558064127,FR
-3558064128,3558067839,NL
-3558067840,3558067855,US
-3558067856,3558080511,NL
+3558064128,3558080511,NL
3558080512,3558096895,RU
3558096896,3558113279,CZ
-3558113280,3558122767,DE
-3558122768,3558122783,CH
-3558122784,3558129663,DE
+3558113280,3558129663,DE
3558129664,3558137855,NO
3558137856,3558146047,GB
3558146048,3558154239,RU
-3558154240,3558154367,NG
-3558154368,3558154495,SD
-3558154496,3558154623,MZ
-3558154624,3558154751,CI
-3558154752,3558154879,CM
-3558154880,3558155007,SD
-3558155008,3558155263,US
-3558155264,3558155391,ET
-3558155392,3558155399,A2
-3558155400,3558155407,KE
-3558155408,3558155423,A2
-3558155424,3558155431,MM
-3558155432,3558155487,A2
-3558155488,3558155503,SO
-3558155504,3558155511,A2
-3558155512,3558155515,DE
-3558155516,3558155519,A2
-3558155520,3558156031,SD
-3558156032,3558156287,KG
-3558156288,3558156351,US
-3558156352,3558156359,GB
-3558156360,3558156543,US
-3558156544,3558156671,KN
-3558156672,3558156927,SM
-3558156928,3558157183,AF
-3558157184,3558157311,SM
-3558157312,3558157319,A2
-3558157320,3558157327,DE
-3558157328,3558157335,SL
-3558157336,3558157375,A2
-3558157376,3558157391,UG
+3558154240,3558157391,GB
3558157392,3558157407,AF
-3558157408,3558157439,SS
-3558157440,3558157567,SZ
-3558157568,3558157583,A2
-3558157584,3558157599,GB
-3558157600,3558157727,SS
-3558157728,3558157759,SO
-3558157760,3558157791,A2
-3558157792,3558158079,SL
-3558158080,3558158207,US
-3558158208,3558158239,SC
-3558158240,3558158335,US
-3558158336,3558158847,SE
-3558158848,3558159359,DE
-3558159360,3558159615,US
-3558159616,3558159747,A2
-3558159748,3558159748,US
-3558159749,3558159807,A2
-3558159808,3558159839,DE
-3558159840,3558159871,A2
-3558159872,3558160127,SL
-3558160128,3558160383,GB
-3558160384,3558161151,A2
-3558161152,3558161407,AF
-3558161408,3558162143,A2
-3558162144,3558162175,SO
-3558162176,3558162431,BI
+3558157408,3558161663,GB
+3558161664,3558161919,TD
+3558161920,3558162431,GB
3558162432,3558170623,DE
3558170624,3558178815,GB
3558178816,3558187007,BG
3558187008,3558195199,DE
-3558195200,3558195455,BE
-3558195456,3558195711,ES
-3558195712,3558196031,GB
-3558196032,3558196035,IT
-3558196036,3558196063,GB
-3558196064,3558196095,IT
-3558196096,3558196119,GB
-3558196120,3558196127,IT
-3558196128,3558196159,GB
-3558196160,3558196167,IT
-3558196168,3558196175,GB
-3558196176,3558196191,IT
-3558196192,3558196199,GB
-3558196200,3558196239,IT
-3558196240,3558196255,GB
-3558196256,3558196271,IT
-3558196272,3558196351,GB
-3558196352,3558196359,IT
-3558196360,3558196367,GB
-3558196368,3558196415,IT
-3558196416,3558196543,GB
-3558196544,3558196595,IT
-3558196596,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
-3558227968,3558236159,RU
+3558227968,3558234623,RU
+3558234624,3558234879,UA
+3558234880,3558236159,RU
3558236160,3558244351,GB
3558244352,3558252543,IT
3558252544,3558260735,KE
3558260736,3558268927,UA
3558268928,3558277119,GI
-3558277120,3558285567,GB
-3558285568,3558285823,DE
-3558285824,3558285951,GB
+3558277120,3558285951,GB
3558285952,3558286079,DE
-3558286080,3558286591,GB
-3558286592,3558286847,FR
-3558286848,3558287679,GB
-3558287680,3558287743,BE
-3558287744,3558287871,NL
-3558287872,3558287935,FR
-3558287936,3558287999,IT
-3558288000,3558288063,DE
-3558288064,3558288127,ES
-3558288128,3558288191,AT
-3558288192,3558288255,SE
-3558288256,3558288319,US
-3558288320,3558288383,CH
-3558288384,3558288423,US
-3558288424,3558288447,GB
-3558288448,3558288483,US
-3558288484,3558288487,GB
-3558288488,3558288639,US
-3558288640,3558288895,EU
-3558288896,3558289151,FR
-3558289152,3558289407,GB
-3558289408,3558289663,NL
-3558289664,3558289727,GB
-3558289728,3558289747,IT
-3558289748,3558289751,GB
-3558289752,3558289775,IT
-3558289776,3558289783,GB
-3558289784,3558289919,IT
-3558289920,3558290175,CZ
-3558290176,3558290431,GB
-3558290432,3558290559,BE
-3558290560,3558290591,GB
-3558290592,3558290599,BE
-3558290600,3558290615,GB
-3558290616,3558290663,BE
-3558290664,3558290679,GB
-3558290680,3558290687,BE
-3558290688,3558290871,ES
-3558290872,3558290879,GB
-3558290880,3558290943,ES
-3558290944,3558290959,DE
-3558290960,3558290967,NL
-3558290968,3558290975,GB
-3558290976,3558290991,NL
-3558290992,3558291023,DE
-3558291024,3558291031,SE
-3558291032,3558291135,DE
-3558291136,3558291199,GB
-3558291200,3558291207,CH
-3558291208,3558291215,GB
-3558291216,3558291231,AT
-3558291232,3558291239,CH
-3558291240,3558291263,GB
-3558291264,3558291279,AT
-3558291280,3558291295,GB
-3558291296,3558291455,CH
-3558291456,3558291459,DE
-3558291460,3558291463,GB
-3558291464,3558291471,DE
-3558291472,3558292223,GB
-3558292224,3558292479,SE
-3558292480,3558292735,EU
-3558292736,3558292863,GB
-3558292864,3558292871,CH
-3558292872,3558292879,GB
-3558292880,3558292911,NL
-3558292912,3558292919,GB
-3558292920,3558293119,NL
-3558293120,3558293143,CH
-3558293144,3558293151,GB
-3558293152,3558293247,NL
-3558293248,3558293503,GB
+3558286080,3558289119,GB
+3558289120,3558289151,FR
+3558289152,3558289431,GB
+3558289432,3558289439,NL
+3558289440,3558289975,GB
+3558289976,3558289983,CZ
+3558289984,3558291071,GB
+3558291072,3558291135,DE
+3558291136,3558291295,GB
+3558291296,3558291311,CH
+3558291312,3558293055,GB
+3558293056,3558293087,NL
+3558293088,3558293503,GB
3558293504,3558301695,RU
3558301696,3558318079,DE
3558318080,3558334463,FR
-3558334464,3558337447,CH
-3558337448,3558337455,ES
-3558337456,3558337515,CH
-3558337516,3558337519,ES
-3558337520,3558337783,CH
-3558337784,3558337787,DE
-3558337788,3558337789,CH
-3558337790,3558337790,GB
-3558337791,3558339699,CH
-3558339700,3558339703,DE
-3558339704,3558340655,CH
-3558340656,3558340663,CG
-3558340664,3558342655,CH
+3558334464,3558339959,CH
+3558339960,3558339967,DE
+3558339968,3558342655,CH
3558342656,3558350847,IT
3558350848,3558359039,RU
3558359040,3558367231,GB
-3558367232,3558367271,AT
-3558367272,3558367279,GI
-3558367280,3558368015,AT
-3558368016,3558368031,AR
-3558368032,3558368063,CL
-3558368064,3558368079,ES
-3558368080,3558368095,DE
-3558368096,3558368111,US
-3558368112,3558368127,GB
-3558368128,3558368159,AT
-3558368160,3558368191,DE
-3558368192,3558368207,US
-3558368208,3558368223,GB
-3558368224,3558368239,ES
-3558368240,3558368255,AR
-3558368256,3558368271,AT
-3558368272,3558368287,GB
-3558368288,3558368319,CL
-3558368320,3558368383,AR
-3558368384,3558368447,AT
-3558368448,3558368479,DE
-3558368480,3558368495,ES
-3558368496,3558368511,US
-3558368512,3558369487,AT
-3558369488,3558369503,CH
-3558369504,3558369519,FR
-3558369520,3558372351,AT
-3558372352,3558372607,BG
-3558372608,3558372735,AT
-3558372736,3558372863,ES
-3558372864,3558375423,AT
-3558375424,3558379999,CZ
-3558380000,3558380015,CY
-3558380016,3558382743,CZ
-3558382744,3558382747,CY
-3558382748,3558383615,CZ
+3558367232,3558375423,AT
+3558375424,3558383615,CZ
3558383616,3558391807,HU
3558391808,3558399999,LU
3558400000,3558408191,SA
-3558408192,3558412095,CH
-3558412096,3558412103,GB
-3558412104,3558416383,CH
+3558408192,3558416383,CH
3558416384,3558424575,BG
3558424576,3558440959,IL
3558440960,3558449151,SE
3558449152,3558457343,IT
-3558457344,3558457407,BE
-3558457408,3558457599,GB
-3558457600,3558457727,FR
-3558457728,3558465535,NL
-3558465536,3558468607,GB
-3558468608,3558469119,US
-3558469120,3558473727,GB
+3558457344,3558465535,NL
+3558465536,3558473727,GB
3558473728,3558506495,SA
3558506496,3558514687,UA
3558514688,3558522879,SK
3558522880,3558531071,NL
3558531072,3558539263,RU
-3558539264,3558547455,DK
+3558539264,3558542591,DK
+3558542592,3558542847,SE
+3558542848,3558547455,DK
3558547456,3558555647,FR
3558555648,3558572031,AT
3558572032,3558580223,DE
-3558580224,3558581423,CH
-3558581424,3558581439,DE
-3558581440,3558582527,CH
-3558582528,3558582591,BE
-3558582592,3558588415,CH
+3558580224,3558588415,CH
3558588416,3558596607,CZ
3558596608,3558604799,EE
3558604800,3558612991,GB
@@ -159851,104 +85078,17 @@
3558670336,3558686719,DE
3558686720,3558703103,TR
3558703104,3558711295,IT
-3558711296,3558717695,NL
-3558717696,3558717951,EU
-3558717952,3558718207,NL
-3558718208,3558718463,EU
-3558718464,3558719487,NL
+3558711296,3558719487,NL
3558719488,3558735871,IL
-3558735872,3558736127,GB
-3558736128,3558736639,GG
-3558736640,3558737055,GB
-3558737056,3558737151,GG
-3558737152,3558737279,GB
-3558737280,3558737919,GG
-3558737920,3558738751,GB
-3558738752,3558738943,GG
-3558738944,3558738991,GB
-3558738992,3558739007,GG
-3558739008,3558739039,GB
-3558739040,3558739055,GG
-3558739056,3558739199,GB
-3558739200,3558739231,GG
-3558739232,3558739295,GB
-3558739296,3558739711,GG
-3558739712,3558739975,GB
-3558739976,3558739983,GG
-3558739984,3558740015,GB
-3558740016,3558740023,GG
-3558740024,3558740031,GB
-3558740032,3558740039,GG
-3558740040,3558740063,GB
-3558740064,3558740079,GG
-3558740080,3558740087,GB
-3558740088,3558740095,GG
-3558740096,3558740183,GB
-3558740184,3558740199,GG
-3558740200,3558740207,GB
-3558740208,3558740215,GG
-3558740216,3558740222,GB
-3558740223,3558740223,GG
-3558740224,3558740255,GB
-3558740256,3558740271,GG
-3558740272,3558740287,GB
-3558740288,3558740295,GG
-3558740296,3558740343,GB
-3558740344,3558740351,GG
-3558740352,3558740359,GB
-3558740360,3558740367,GG
-3558740368,3558740383,GB
-3558740384,3558741255,GG
-3558741256,3558741271,GB
-3558741272,3558741279,GG
-3558741280,3558741287,GB
-3558741288,3558741295,GG
-3558741296,3558741311,GB
-3558741312,3558741335,GG
-3558741336,3558741359,GB
-3558741360,3558741367,GG
-3558741368,3558741391,GB
-3558741392,3558741399,GG
-3558741400,3558741423,GB
-3558741424,3558741431,GG
-3558741432,3558741439,GB
-3558741440,3558741447,GG
-3558741448,3558741471,GB
-3558741472,3558741487,GG
-3558741488,3558741503,GB
+3558735872,3558741503,GB
3558741504,3558742015,GG
-3558742016,3558742039,GB
-3558742040,3558742047,GG
-3558742048,3558742055,GB
-3558742056,3558742071,GG
-3558742072,3558742079,GB
-3558742080,3558742087,GG
-3558742088,3558742103,GB
-3558742104,3558742135,GG
-3558742136,3558742159,GB
-3558742160,3558742191,GG
-3558742192,3558742215,GB
-3558742216,3558742223,GG
-3558742224,3558742239,GB
-3558742240,3558742247,GG
-3558742248,3558742255,GB
-3558742256,3558742527,GG
-3558742528,3558742543,GB
-3558742544,3558742551,GG
-3558742552,3558742567,GB
-3558742568,3558742583,GG
-3558742584,3558742623,GB
-3558742624,3558742631,GG
-3558742632,3558742655,GB
-3558742656,3558742663,GG
-3558742664,3558742679,GB
-3558742680,3558742695,GG
-3558742696,3558742727,GB
-3558742728,3558742735,GG
-3558742736,3558742743,GB
-3558742744,3558742751,GG
-3558742752,3558742775,GB
-3558742776,3558744063,GG
+3558742016,3558742527,GB
+3558742528,3558742783,GG
+3558742784,3558743039,GB
+3558743040,3558743295,GG
+3558743296,3558743551,GB
+3558743552,3558743807,GG
+3558743808,3558744063,GB
3558744064,3558752255,LB
3558752256,3558760447,SI
3558760448,3558768639,FR
@@ -159956,75 +85096,17 @@
3558785024,3558801407,IS
3558801408,3558809599,TR
3558809600,3558817791,ES
-3558817792,3558823327,AT
-3558823328,3558823359,DE
-3558823360,3558825983,AT
-3558825984,3558828287,CY
-3558828288,3558828303,A2
-3558828304,3558832383,CY
-3558832384,3558832639,LB
-3558832640,3558834175,CY
+3558817792,3558825983,AT
+3558825984,3558834175,CY
3558834176,3558842367,FR
3558842368,3558850559,SE
-3558850560,3558850815,ES
-3558850816,3558851327,US
-3558851328,3558851391,ES
-3558851392,3558851423,GB
-3558851424,3558851471,ES
-3558851472,3558851479,NO
-3558851480,3558851535,ES
-3558851536,3558851543,GB
-3558851544,3558851583,ES
-3558851584,3558851599,GB
-3558851600,3558851623,ES
-3558851624,3558851627,GB
-3558851628,3558851647,ES
-3558851648,3558851711,GB
-3558851712,3558851719,ES
-3558851720,3558851727,GB
-3558851728,3558851735,ES
-3558851736,3558851743,GB
-3558851744,3558851791,ES
-3558851792,3558851807,GB
-3558851808,3558852095,ES
-3558852096,3558853119,GB
-3558853120,3558853375,BE
-3558853376,3558853399,GB
-3558853400,3558853407,DE
-3558853408,3558853439,GB
-3558853440,3558853455,DE
-3558853456,3558853463,GB
-3558853464,3558853467,DE
-3558853468,3558853503,GB
-3558853504,3558853511,DE
-3558853512,3558853535,GB
-3558853536,3558853547,DE
-3558853548,3558853887,GB
-3558853888,3558854295,ES
-3558854296,3558854303,GB
-3558854304,3558854655,ES
-3558854656,3558854911,US
-3558854912,3558854919,GB
-3558854920,3558854943,ES
-3558854944,3558854975,GB
-3558854976,3558855039,US
-3558855040,3558855167,GB
-3558855168,3558855183,US
-3558855184,3558855199,ES
-3558855200,3558855295,GB
-3558855296,3558855423,ES
-3558855424,3558855431,NL
-3558855432,3558855439,GB
-3558855440,3558855935,ES
-3558855936,3558856191,US
-3558856192,3558856639,GB
-3558856640,3558856703,NL
+3558850560,3558851327,GB
+3558851328,3558851335,ES
+3558851336,3558854367,GB
+3558854368,3558854399,ES
+3558854400,3558856703,GB
3558856704,3558858751,US
-3558858752,3558864167,IT
-3558864168,3558864175,GB
-3558864176,3558864695,IT
-3558864696,3558864703,GB
-3558864704,3558866943,IT
+3558858752,3558866943,IT
3558866944,3558899711,GB
3558899712,3558916095,SE
3558916096,3558924287,RU
@@ -160039,331 +85121,35 @@
3558989824,3558998015,RU
3558998016,3559006207,JO
3559006208,3559014399,RU
-3559014400,3559016191,DE
-3559016192,3559016207,GB
-3559016208,3559016215,JP
-3559016216,3559022591,DE
+3559014400,3559022591,DE
3559022592,3559030783,RU
-3559030784,3559038720,ES
-3559038721,3559038975,US
-3559038976,3559042855,DE
-3559042856,3559042863,CH
-3559042864,3559047167,DE
+3559030784,3559038975,ES
+3559038976,3559047167,DE
3559047168,3559055359,IT
3559055360,3559063551,AM
3559063552,3559079935,CH
3559079936,3559088127,JO
-3559088128,3559088263,BE
-3559088264,3559088267,GB
-3559088268,3559088307,BE
-3559088308,3559088311,GB
-3559088312,3559088367,BE
-3559088368,3559088371,GB
-3559088372,3559088375,BE
-3559088376,3559088379,GB
-3559088380,3559088919,BE
-3559088920,3559088927,GB
-3559088928,3559089047,BE
-3559089048,3559089055,DE
-3559089056,3559089063,BE
-3559089064,3559089071,GB
-3559089072,3559089079,BE
-3559089080,3559089087,GB
-3559089088,3559089407,BE
-3559089408,3559089411,GB
-3559089412,3559089415,BE
-3559089416,3559089423,GB
-3559089424,3559089439,BE
-3559089440,3559089443,GB
-3559089444,3559089447,BE
-3559089448,3559089451,GB
-3559089452,3559089463,BE
-3559089464,3559089467,GB
-3559089468,3559089479,BE
-3559089480,3559089487,GB
-3559089488,3559089495,BE
-3559089496,3559089503,GB
-3559089504,3559089535,BE
-3559089536,3559089543,GB
-3559089544,3559089547,BE
-3559089548,3559089551,GB
-3559089552,3559089559,BE
-3559089560,3559089567,GB
-3559089568,3559089591,BE
-3559089592,3559089599,GB
-3559089600,3559089607,BE
-3559089608,3559089611,GB
-3559089612,3559089623,BE
-3559089624,3559089627,GB
-3559089628,3559089639,BE
-3559089640,3559089643,GB
-3559089644,3559089655,BE
-3559089656,3559089659,GB
-3559089660,3559090071,BE
-3559090072,3559090079,NL
-3559090080,3559090103,BE
-3559090104,3559090111,GB
-3559090112,3559090407,BE
-3559090408,3559090415,GB
-3559090416,3559090759,BE
-3559090760,3559090767,GB
-3559090768,3559090775,BE
-3559090776,3559090779,GB
-3559090780,3559090791,BE
-3559090792,3559090799,GB
-3559090800,3559090803,BE
-3559090804,3559090807,GB
-3559090808,3559090823,BE
-3559090824,3559090831,GB
-3559090832,3559090863,BE
-3559090864,3559090879,GB
-3559090880,3559090887,BE
-3559090888,3559090899,GB
-3559090900,3559090903,BE
-3559090904,3559090907,GB
-3559090908,3559090923,BE
-3559090924,3559090927,GB
-3559090928,3559090943,BE
-3559090944,3559091007,GB
-3559091008,3559091011,BE
-3559091012,3559091023,GB
-3559091024,3559091047,BE
-3559091048,3559091055,GB
-3559091056,3559091087,BE
-3559091088,3559091091,GB
-3559091092,3559091095,BE
-3559091096,3559091103,GB
-3559091104,3559091175,BE
-3559091176,3559091183,GB
-3559091184,3559091203,BE
-3559091204,3559091207,GB
-3559091208,3559091211,BE
-3559091212,3559091215,GB
-3559091216,3559091223,BE
-3559091224,3559091231,GB
-3559091232,3559091263,BE
-3559091264,3559091327,GB
-3559091328,3559091423,BE
-3559091424,3559091427,GB
-3559091428,3559091439,BE
-3559091440,3559091447,ES
-3559091448,3559091455,BE
-3559091456,3559091487,DE
-3559091488,3559091495,BE
-3559091496,3559091503,GB
-3559091504,3559091507,BE
-3559091508,3559091511,GB
-3559091512,3559091527,BE
-3559091528,3559091543,GB
-3559091544,3559091571,BE
-3559091572,3559091575,GB
-3559091576,3559091591,BE
-3559091592,3559091615,GB
-3559091616,3559091631,BE
-3559091632,3559091639,LU
-3559091640,3559091815,BE
-3559091816,3559091823,GB
-3559091824,3559092159,BE
-3559092160,3559092223,GB
-3559092224,3559092239,BE
-3559092240,3559092247,GB
-3559092248,3559092263,BE
-3559092264,3559092271,GB
-3559092272,3559092279,BE
-3559092280,3559092287,GB
-3559092288,3559092319,BE
-3559092320,3559092327,GB
-3559092328,3559092351,BE
-3559092352,3559092383,GB
-3559092384,3559092391,BE
-3559092392,3559092399,GB
-3559092400,3559092407,BE
-3559092408,3559092423,GB
-3559092424,3559092455,BE
-3559092456,3559092463,GB
-3559092464,3559092471,BE
-3559092472,3559092479,GB
-3559092480,3559092735,BE
-3559092736,3559092739,GB
-3559092740,3559092767,BE
-3559092768,3559092783,GB
-3559092784,3559092799,BE
-3559092800,3559092803,GB
-3559092804,3559092807,BE
-3559092808,3559092815,GB
-3559092816,3559092839,BE
-3559092840,3559092863,GB
-3559092864,3559092871,BE
-3559092872,3559092895,GB
-3559092896,3559092939,BE
-3559092940,3559092943,GB
-3559092944,3559092959,BE
-3559092960,3559092991,GB
-3559092992,3559092995,BE
-3559092996,3559092999,GB
-3559093000,3559093007,BE
-3559093008,3559093015,GB
-3559093016,3559093023,FR
-3559093024,3559093031,BE
-3559093032,3559093039,GB
-3559093040,3559093047,BE
-3559093048,3559093055,GB
-3559093056,3559093063,BE
-3559093064,3559093071,FR
-3559093072,3559093075,BE
-3559093076,3559093079,GB
-3559093080,3559093083,BE
-3559093084,3559093087,GB
-3559093088,3559093103,BE
-3559093104,3559093119,FR
-3559093120,3559093135,BE
-3559093136,3559093159,FR
-3559093160,3559093163,GB
-3559093164,3559093167,BE
-3559093168,3559093171,GB
-3559093172,3559093175,BE
-3559093176,3559093183,GB
-3559093184,3559093195,BE
-3559093196,3559093203,GB
-3559093204,3559093215,BE
-3559093216,3559093219,GB
-3559093220,3559093223,BE
-3559093224,3559093243,GB
-3559093244,3559094019,BE
-3559094020,3559094023,GB
-3559094024,3559094031,BE
-3559094032,3559094039,FR
-3559094040,3559094047,BE
-3559094048,3559094055,FR
-3559094056,3559094063,GB
-3559094064,3559094083,BE
-3559094084,3559094087,GB
-3559094088,3559094095,FR
-3559094096,3559094099,GB
-3559094100,3559094103,BE
-3559094104,3559094111,GB
-3559094112,3559094143,BE
-3559094144,3559094147,GB
-3559094148,3559094151,BE
-3559094152,3559094159,GB
-3559094160,3559094175,BE
-3559094176,3559094179,GB
-3559094180,3559094183,BE
-3559094184,3559094191,GB
-3559094192,3559094211,BE
-3559094212,3559094215,GB
-3559094216,3559094219,BE
-3559094220,3559094223,GB
-3559094224,3559094231,BE
-3559094232,3559094235,GB
-3559094236,3559094239,BE
-3559094240,3559094243,GB
-3559094244,3559094247,BE
-3559094248,3559094251,GB
-3559094252,3559094271,BE
-3559094272,3559094287,GB
-3559094288,3559094319,BE
-3559094320,3559094335,GB
-3559094336,3559094407,BE
-3559094408,3559094415,GB
-3559094416,3559094423,BE
-3559094424,3559094447,GB
-3559094448,3559094455,ES
-3559094456,3559094495,BE
-3559094496,3559094511,GB
-3559094512,3559094527,BE
-3559094528,3559095039,GB
-3559095040,3559095055,BE
-3559095056,3559095063,GB
-3559095064,3559095071,BE
-3559095072,3559095103,GB
-3559095104,3559095167,BE
-3559095168,3559095231,GB
-3559095232,3559095263,BE
-3559095264,3559095303,GB
-3559095304,3559095359,BE
-3559095360,3559095423,GB
-3559095424,3559095439,BE
-3559095440,3559095455,GB
-3559095456,3559095487,BE
-3559095488,3559095551,GB
-3559095552,3559095591,BE
-3559095592,3559095623,GB
-3559095624,3559095631,BE
-3559095632,3559095647,GB
-3559095648,3559095767,BE
-3559095768,3559095807,GB
-3559095808,3559095871,BE
-3559095872,3559095887,GB
-3559095888,3559095919,BE
-3559095920,3559095927,GB
-3559095928,3559095935,BE
-3559095936,3559095999,GB
-3559096000,3559096031,BE
-3559096032,3559096063,GB
-3559096064,3559096123,BE
-3559096124,3559096127,GB
-3559096128,3559096191,BE
-3559096192,3559096199,GB
-3559096200,3559096207,DE
-3559096208,3559096215,BE
-3559096216,3559096223,NL
-3559096224,3559096247,BE
-3559096248,3559096255,GB
-3559096256,3559096319,BE
-3559096320,3559103231,RO
-3559103232,3559103487,GB
-3559103488,3559104511,RO
+3559088128,3559090239,GB
+3559090240,3559090303,BE
+3559090304,3559093311,GB
+3559093312,3559093319,BE
+3559093320,3559093503,GB
+3559093504,3559093759,BE
+3559093760,3559095455,GB
+3559095456,3559095456,BE
+3559095457,3559096063,GB
+3559096064,3559096319,BE
+3559096320,3559104511,RO
3559104512,3559112703,RU
3559112704,3559120895,IT
3559120896,3559129087,GB
3559129088,3559137279,BG
3559137280,3559145471,GB
3559145472,3559153663,ES
-3559153664,3559161855,GB
-3559161856,3559161887,FR
-3559161888,3559162047,GB
-3559162048,3559162079,BE
-3559162080,3559163903,GB
-3559163904,3559163935,FR
-3559163936,3559163999,GB
-3559164000,3559164031,NL
-3559164032,3559164151,GB
-3559164152,3559164159,IT
-3559164160,3559166335,GB
-3559166336,3559166351,CH
-3559166352,3559169023,GB
-3559169024,3559169055,CH
-3559169056,3559174703,GB
-3559174704,3559174711,IT
-3559174712,3559174743,GB
-3559174744,3559174751,DE
-3559174752,3559174767,GB
-3559174768,3559174775,DE
-3559174776,3559174783,GB
-3559174784,3559174791,DK
-3559174792,3559174799,GB
-3559174800,3559174807,NO
-3559174808,3559174943,GB
-3559174944,3559174951,IT
-3559174952,3559174975,GB
-3559174976,3559174983,DE
-3559174984,3559175079,GB
-3559175080,3559175095,FR
-3559175096,3559175127,GB
-3559175128,3559175135,DE
-3559175136,3559175143,FR
-3559175144,3559175151,GB
-3559175152,3559175167,FR
-3559175168,3559177215,GB
-3559177216,3559177471,DE
-3559177472,3559177727,GB
-3559177728,3559178239,DE
+3559153664,3559178239,GB
3559178240,3559186431,LB
3559186432,3559194623,RU
-3559194624,3559198463,SE
-3559198464,3559198719,FI
-3559198720,3559202815,SE
+3559194624,3559202815,SE
3559202816,3559211007,DE
3559211008,3559219199,SK
3559219200,3559227391,SE
@@ -160374,26 +85160,15 @@
3559260160,3559268351,DE
3559268352,3559276543,IT
3559276544,3559284735,GB
-3559284736,3559284895,RU
-3559284896,3559284911,UA
-3559284912,3559288175,RU
-3559288176,3559288191,UA
-3559288192,3559288207,AZ
-3559288208,3559288831,RU
-3559288832,3559289855,AZ
-3559289856,3559291391,RU
-3559291392,3559291647,AZ
-3559291648,3559292927,RU
+3559284736,3559292927,RU
3559292928,3559301119,JO
3559301120,3559305215,GB
-3559305216,3559305727,US
-3559305728,3559309311,GB
+3559305216,3559305471,US
+3559305472,3559309311,GB
3559309312,3559317503,PL
3559317504,3559325695,FI
3559325696,3559333887,IT
-3559333888,3559336447,SE
-3559336448,3559336703,US
-3559336704,3559342079,SE
+3559333888,3559342079,SE
3559342080,3559350271,BG
3559350272,3559358463,BA
3559358464,3559366655,FR
@@ -160411,26 +85186,7 @@
3559448576,3559456767,ES
3559456768,3559473151,RU
3559473152,3559489535,CH
-3559489536,3559490591,NL
-3559490592,3559490623,DE
-3559490624,3559490655,NL
-3559490656,3559490719,GB
-3559490720,3559490751,NL
-3559490752,3559490783,GB
-3559490784,3559490791,NL
-3559490792,3559490799,BE
-3559490800,3559491447,NL
-3559491448,3559491519,GB
-3559491520,3559491871,NL
-3559491872,3559491903,GB
-3559491904,3559491935,BE
-3559491936,3559491999,GB
-3559492000,3559492013,NL
-3559492014,3559492015,GB
-3559492016,3559492023,NL
-3559492024,3559492031,GB
-3559492032,3559497727,NL
-3559497728,3559505919,GB
+3559489536,3559505919,GB
3559505920,3559514111,CH
3559514112,3559522303,AT
3559522304,3559530495,GB
@@ -160440,24 +85196,10 @@
3559555072,3559563263,CH
3559563264,3559571455,GB
3559571456,3559579647,AM
-3559579648,3559586271,DE
-3559586272,3559586303,US
-3559586304,3559587839,DE
+3559579648,3559587839,DE
3559587840,3559596031,KW
3559596032,3559604223,BG
-3559604224,3559607983,DE
-3559607984,3559607999,LU
-3559608000,3559608079,DE
-3559608080,3559608095,LU
-3559608096,3559608135,DE
-3559608136,3559608143,LU
-3559608144,3559611135,DE
-3559611136,3559611391,GB
-3559611392,3559611583,DE
-3559611584,3559611647,LU
-3559611648,3559611731,DE
-3559611732,3559611735,NL
-3559611736,3559612415,DE
+3559604224,3559612415,DE
3559612416,3559620607,IT
3559620608,3559628799,CH
3559628800,3559636991,GB
@@ -160466,17 +85208,13 @@
3559669760,3559677951,RU
3559677952,3559686143,SI
3559686144,3559694335,RU
-3559694336,3559702655,DE
-3559702656,3559702719,RU
-3559702720,3559710719,DE
+3559694336,3559710719,DE
3559710720,3559718911,FR
3559718912,3559727103,RU
3559727104,3559735295,NL
3559735296,3559743487,BG
3559743488,3559745535,IT
-3559745536,3559746099,DE
-3559746100,3559746103,GB
-3559746104,3559747583,DE
+3559745536,3559747583,DE
3559747584,3559751679,DK
3559751680,3559759871,IT
3559759872,3559768063,NO
@@ -160484,127 +85222,43 @@
3559776256,3559792639,RU
3559792640,3559800831,SA
3559800832,3559809023,IT
-3559809024,3559815595,DE
-3559815596,3559815599,NL
-3559815600,3559816283,DE
-3559816284,3559816287,NL
-3559816288,3559817215,DE
+3559809024,3559817215,DE
3559817216,3559825407,GB
3559825408,3559833599,IT
3559833600,3559849983,RU
3559849984,3559858175,CZ
3559858176,3559866367,IT
3559866368,3559874559,GB
-3559874560,3559877951,LT
-3559877952,3559877967,CH
-3559877968,3559882751,LT
+3559874560,3559882751,LT
3559882752,3559890943,AZ
3559890944,3559899135,CH
-3559899136,3559899487,UA
-3559899488,3559899519,EE
-3559899520,3559899647,UA
-3559899648,3559899903,EE
-3559899904,3559900275,UA
-3559900276,3559900279,EE
-3559900280,3559900431,UA
-3559900432,3559900432,EE
-3559900433,3559900439,UA
-3559900440,3559900447,EE
-3559900448,3559900483,UA
-3559900484,3559900487,EE
-3559900488,3559900492,UA
-3559900493,3559900493,EE
-3559900494,3559900503,UA
-3559900504,3559900511,EE
-3559900512,3559900611,UA
-3559900612,3559900624,EE
-3559900625,3559900671,UA
-3559900672,3559900951,EE
-3559900952,3559900959,DE
-3559900960,3559900975,SE
-3559900976,3559900983,PL
-3559900984,3559900991,GB
-3559900992,3559901007,RU
-3559901008,3559901183,UA
-3559901184,3559902011,EE
-3559902012,3559902015,UA
-3559902016,3559902031,EE
-3559902032,3559902047,UA
-3559902048,3559902055,EE
-3559902056,3559902071,UA
-3559902072,3559902079,EE
-3559902080,3559902151,UA
-3559902152,3559902159,EE
-3559902160,3559902175,UA
-3559902176,3559902215,EE
-3559902216,3559902223,UA
-3559902224,3559902271,EE
-3559902272,3559902399,UA
-3559902400,3559902591,EE
-3559902592,3559902975,UA
-3559902976,3559907327,EE
+3559899136,3559899903,UA
+3559899904,3559899967,EE
+3559899968,3559900223,UA
+3559900224,3559900287,EE
+3559900288,3559903231,UA
+3559903232,3559907327,EE
3559907328,3559915519,FR
3559915520,3559923711,IT
3559923712,3559931903,RU
3559931904,3559940095,GB
-3559940096,3559945471,DE
-3559945472,3559945727,US
-3559945728,3559948287,DE
+3559940096,3559948287,DE
3559948288,3559956479,RU
-3559956480,3559957567,IT
-3559957568,3559957599,NL
-3559957600,3559964159,IT
-3559964160,3559964415,HU
-3559964416,3559964671,IT
+3559956480,3559964671,IT
3559964672,3559981055,RU
3559981056,3559989247,EE
3559989248,3559997439,PL
3559997440,3560005631,KE
3560005632,3560013823,RU
-3560013824,3560016543,ES
-3560016544,3560016639,GB
-3560016640,3560018879,ES
-3560018880,3560018895,GB
-3560018896,3560018943,ES
-3560018944,3560019199,GB
-3560019200,3560019631,ES
-3560019632,3560019639,GB
-3560019640,3560019967,ES
-3560019968,3560020223,GB
-3560020224,3560020303,ES
-3560020304,3560020319,GB
-3560020320,3560020351,ES
-3560020352,3560020367,GB
-3560020368,3560020991,ES
-3560020992,3560021247,GB
-3560021248,3560021503,ES
-3560021504,3560021759,GB
-3560021760,3560022015,ES
-3560022016,3560022527,GB
-3560022528,3560024319,ES
-3560024320,3560024447,GB
-3560024448,3560024455,ES
-3560024456,3560024463,GB
-3560024464,3560024831,ES
-3560024832,3560025087,GB
-3560025088,3560025343,ES
-3560025344,3560025855,GB
-3560025856,3560027134,ES
-3560027135,3560027135,GB
-3560027136,3560027623,ES
-3560027624,3560027631,GB
-3560027632,3560027647,ES
-3560027648,3560028159,GB
-3560028160,3560028767,ES
-3560028768,3560028863,GB
-3560028864,3560029239,ES
-3560029240,3560029247,GB
-3560029248,3560029279,ES
-3560029280,3560029295,GB
-3560029296,3560029723,ES
-3560029724,3560029727,GB
-3560029728,3560030207,ES
-3560030208,3560046591,GB
+3560013824,3560022527,GB
+3560022528,3560022783,ES
+3560022784,3560023631,GB
+3560023632,3560023639,ES
+3560023640,3560023791,GB
+3560023792,3560023799,ES
+3560023800,3560030095,GB
+3560030096,3560030103,ES
+3560030104,3560046591,GB
3560046592,3560054783,BG
3560054784,3560062975,TR
3560062976,3560071167,BG
@@ -160629,55 +85283,32 @@
3560235008,3560243199,DE
3560243200,3560247295,BE
3560247296,3560251391,NL
-3560251392,3560252159,RU
-3560252160,3560252415,CZ
-3560252416,3560253439,RU
-3560253440,3560253695,CZ
-3560253696,3560259583,RU
+3560251392,3560259583,RU
3560259584,3560267775,GB
3560267776,3560275967,EE
-3560275968,3560285439,DE
-3560285440,3560285695,PL
-3560285696,3560285951,DE
-3560285952,3560286207,PL
-3560286208,3560308735,DE
+3560275968,3560308735,DE
3560308736,3560316927,FI
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
-3560366080,3560366687,CH
-3560366688,3560366695,IT
-3560366696,3560366703,CH
-3560366704,3560366719,IT
-3560366720,3560374271,CH
+3560366080,3560374271,CH
3560374272,3560382463,ES
3560382464,3560390655,FO
-3560390656,3560391423,UA
-3560391424,3560391679,RU
-3560391680,3560394751,UA
-3560394752,3560395007,RU
-3560395008,3560398847,UA
+3560390656,3560398847,UA
3560398848,3560407039,RU
3560407040,3560423423,PT
3560423424,3560431615,CH
3560431616,3560439807,SK
3560439808,3560447999,BG
-3560448000,3560449791,GB
-3560449792,3560450047,US
-3560450048,3560472575,GB
+3560448000,3560472575,GB
3560472576,3560480767,MT
3560480768,3560488959,IT
3560488960,3560497151,MD
-3560497152,3560501247,LU
-3560501248,3560501503,EU
+3560497152,3560501503,LU
3560501504,3560502527,DE
3560502528,3560502783,LU
3560502784,3560503039,DE
@@ -160711,1996 +85342,121 @@
3560726528,3560734719,DK
3560734720,3560742911,DE
3560742912,3560751103,AT
-3560751104,3560761856,DE
-3560761857,3560761857,A2
-3560761858,3560767487,DE
-3560767488,3560832791,NL
-3560832792,3560832799,BE
-3560832800,3560833023,NL
+3560751104,3560767487,DE
+3560767488,3560833023,NL
3560833024,3560841215,GB
3560841216,3560849407,RS
-3560849408,3560849663,DE
-3560849664,3560849727,NL
-3560849728,3560850127,DE
-3560850128,3560850143,NL
-3560850144,3560852959,DE
-3560852960,3560852967,GB
-3560852968,3560857599,DE
+3560849408,3560857599,DE
3560857600,3560865791,SA
3560865792,3560882175,FR
3560882176,3560890367,DE
3560890368,3560898559,NO
3560898560,3560906751,FI
-3560906752,3560919047,DE
-3560919048,3560919055,CH
-3560919056,3560923135,DE
+3560906752,3560923135,DE
3560923136,3560931327,ES
-3560931328,3560939523,DE
-3560939524,3560939527,AT
-3560939528,3560939535,DE
-3560939536,3560939539,PT
-3560939540,3560939543,IT
-3560939544,3560939555,DE
-3560939556,3560939559,ES
-3560939560,3560939567,DE
-3560939568,3560939571,NL
-3560939572,3560939579,ES
-3560939580,3560939583,BE
-3560939584,3560939587,DE
-3560939588,3560939591,BE
-3560939592,3560939607,DE
-3560939608,3560939611,IT
-3560939612,3560939643,DE
-3560939644,3560939647,BE
-3560939648,3560939655,DE
-3560939656,3560939659,CH
-3560939660,3560939663,DE
-3560939664,3560939667,DK
-3560939668,3560939679,DE
-3560939680,3560939683,IT
-3560939684,3560939687,AT
-3560939688,3560939691,ES
-3560939692,3560939695,FR
-3560939696,3560939703,DE
-3560939704,3560939707,ES
-3560939708,3560939719,DE
-3560939720,3560939727,GR
-3560939728,3560939735,NL
-3560939736,3560939751,FR
-3560939752,3560939755,IT
-3560939756,3560939759,DE
-3560939760,3560939763,IT
-3560939764,3560939767,DE
-3560939768,3560939771,IE
-3560939772,3560939775,CZ
-3560939776,3560939779,BE
-3560939780,3560939791,DE
-3560939792,3560939795,FR
-3560939796,3560939799,GB
-3560939800,3560939803,DE
-3560939804,3560939807,IT
-3560939808,3560939811,FR
-3560939812,3560939815,DE
-3560939816,3560939819,CH
-3560939820,3560939823,DE
-3560939824,3560939827,LI
-3560939828,3560939831,FR
-3560939832,3560939839,DE
-3560939840,3560939843,GB
-3560939844,3560939847,ES
-3560939848,3560939851,BE
-3560939852,3560939855,ES
-3560939856,3560939859,FR
-3560939860,3560939863,HU
-3560939864,3560939867,ES
-3560939868,3560939875,DE
-3560939876,3560939879,CH
-3560939880,3560939887,DE
-3560939888,3560939891,CH
-3560939892,3560939895,DE
-3560939896,3560939899,ES
-3560939900,3560939903,GB
-3560939904,3560939907,BR
-3560939908,3560939911,NL
-3560939912,3560939915,RE
-3560939916,3560939919,ES
-3560939920,3560939927,DE
-3560939928,3560939931,NL
-3560939932,3560939935,IT
-3560939936,3560939939,DE
-3560939940,3560939943,AT
-3560939944,3560939951,FR
-3560939952,3560939955,DE
-3560939956,3560939959,AT
-3560939960,3560939967,DE
-3560939968,3560939971,ES
-3560939972,3560939975,DE
-3560939976,3560939983,BE
-3560939984,3560939987,FR
-3560939988,3560939991,ES
-3560939992,3560939995,IT
-3560939996,3560939999,DE
-3560940000,3560940007,ES
-3560940008,3560940015,DE
-3560940016,3560940019,BE
-3560940020,3560940023,GB
-3560940024,3560940027,GR
-3560940028,3560940043,DE
-3560940044,3560940047,GB
-3560940048,3560940051,ES
-3560940052,3560940055,BE
-3560940056,3560940059,NL
-3560940060,3560940063,LU
-3560940064,3560940067,CH
-3560940068,3560940071,FR
-3560940072,3560940075,DE
-3560940076,3560940079,ES
-3560940080,3560940087,DE
-3560940088,3560940091,IT
-3560940092,3560940095,CH
-3560940096,3560940099,DE
-3560940100,3560940103,FR
-3560940104,3560940115,DE
-3560940116,3560940119,FR
-3560940120,3560940123,GB
-3560940124,3560940127,DE
-3560940128,3560940135,IT
-3560940136,3560940139,AT
-3560940140,3560940143,HU
-3560940144,3560940147,DE
-3560940148,3560940151,IT
-3560940152,3560940155,FR
-3560940156,3560940159,ES
-3560940160,3560940163,IT
-3560940164,3560940171,FR
-3560940172,3560940175,DE
-3560940176,3560940179,FR
-3560940180,3560940183,BE
-3560940184,3560940187,FR
-3560940188,3560940191,IT
-3560940192,3560940195,AT
-3560940196,3560940199,DE
-3560940200,3560940203,CY
-3560940204,3560940207,DE
-3560940208,3560940211,ES
-3560940212,3560940215,FR
-3560940216,3560940219,IE
-3560940220,3560940227,DE
-3560940228,3560940231,CH
-3560940232,3560940235,IT
-3560940236,3560940239,DE
-3560940240,3560940243,PT
-3560940244,3560940247,GB
-3560940248,3560940251,DE
-3560940252,3560940255,CH
-3560940256,3560940267,DE
-3560940268,3560940275,GB
-3560940276,3560940279,FR
-3560940280,3560940283,AT
-3560940284,3560940287,DE
-3560940288,3560940291,FR
-3560940292,3560940307,DE
-3560940308,3560940311,BE
-3560940312,3560940327,DE
-3560940328,3560940331,ES
-3560940332,3560940339,DE
-3560940340,3560940343,CH
-3560940344,3560940347,NL
-3560940348,3560940367,DE
-3560940368,3560940371,FR
-3560940372,3560940379,CH
-3560940380,3560940387,DE
-3560940388,3560940391,ES
-3560940392,3560940395,DE
-3560940396,3560940399,IL
-3560940400,3560940403,CH
-3560940404,3560940407,DE
-3560940408,3560940411,IT
-3560940412,3560940419,DE
-3560940420,3560940423,GR
-3560940424,3560940431,DE
-3560940432,3560940435,FR
-3560940436,3560940439,DE
-3560940440,3560940443,BE
-3560940444,3560940447,SL
-3560940448,3560940451,DE
-3560940452,3560940455,NL
-3560940456,3560940459,DE
-3560940460,3560940463,HU
-3560940464,3560940467,CY
-3560940468,3560940471,DE
-3560940472,3560940475,FR
-3560940476,3560940479,CH
-3560940480,3560940487,ES
-3560940488,3560940491,CZ
-3560940492,3560940495,ES
-3560940496,3560940499,IT
-3560940500,3560940503,DE
-3560940504,3560940507,GB
-3560940508,3560940511,IT
-3560940512,3560940523,DE
-3560940524,3560940527,FR
-3560940528,3560940531,DE
-3560940532,3560940535,FR
-3560940536,3560940539,HU
-3560940540,3560940543,IT
-3560940544,3560940547,DE
-3560940548,3560940551,IE
-3560940552,3560940563,DE
-3560940564,3560940567,GB
-3560940568,3560940571,DE
-3560940572,3560940575,DK
-3560940576,3560940579,ES
-3560940580,3560940583,IT
-3560940584,3560940587,FR
-3560940588,3560940591,IT
-3560940592,3560940595,GR
-3560940596,3560940599,CH
-3560940600,3560940603,MA
-3560940604,3560940607,GB
-3560940608,3560940611,FR
-3560940612,3560940615,CH
-3560940616,3560940619,DE
-3560940620,3560940623,AT
-3560940624,3560940627,SM
-3560940628,3560940631,PL
-3560940632,3560940635,AT
-3560940636,3560940639,DE
-3560940640,3560940647,GB
-3560940648,3560940655,DE
-3560940656,3560940663,IT
-3560940664,3560940683,DE
-3560940684,3560940687,DK
-3560940688,3560940691,IT
-3560940692,3560940695,NO
-3560940696,3560940699,FR
-3560940700,3560940703,GB
-3560940704,3560940707,ES
-3560940708,3560940711,BE
-3560940712,3560940715,DE
-3560940716,3560940719,ES
-3560940720,3560940723,PL
-3560940724,3560940727,DE
-3560940728,3560940731,FR
-3560940732,3560940735,DE
-3560940736,3560940739,DK
-3560940740,3560940743,IT
-3560940744,3560940751,DE
-3560940752,3560940755,IE
-3560940756,3560940763,FR
-3560940764,3560940767,CH
-3560940768,3560940779,DE
-3560940780,3560940783,IT
-3560940784,3560940787,NL
-3560940788,3560940791,GB
-3560940792,3560940799,ES
-3560940800,3560940803,DE
-3560940804,3560940807,GB
-3560940808,3560940811,IT
-3560940812,3560940815,DE
-3560940816,3560940819,FR
-3560940820,3560940823,NL
-3560940824,3560940827,IT
-3560940828,3560940831,ES
-3560940832,3560940839,DE
-3560940840,3560940843,IT
-3560940844,3560940851,ES
-3560940852,3560940859,DE
-3560940860,3560940863,PT
-3560940864,3560940867,IT
-3560940868,3560940875,DE
-3560940876,3560940879,FR
-3560940880,3560940883,IT
-3560940884,3560940887,NL
-3560940888,3560940891,LU
-3560940892,3560940895,ES
-3560940896,3560940899,DE
-3560940900,3560940903,NL
-3560940904,3560940907,DE
-3560940908,3560940915,GB
-3560940916,3560940923,DE
-3560940924,3560940927,ES
-3560940928,3560940931,GR
-3560940932,3560940935,CH
-3560940936,3560940939,IT
-3560940940,3560940951,DE
-3560940952,3560940955,AT
-3560940956,3560940963,NL
-3560940964,3560940967,DE
-3560940968,3560940971,NL
-3560940972,3560940975,DE
-3560940976,3560940979,FR
-3560940980,3560940983,LU
-3560940984,3560940987,IT
-3560940988,3560940995,DE
-3560940996,3560940999,DK
-3560941000,3560941003,ES
-3560941004,3560941007,PL
-3560941008,3560941019,DE
-3560941020,3560941023,IT
-3560941024,3560941027,FR
-3560941028,3560941031,CH
-3560941032,3560941035,FR
-3560941036,3560941039,DE
-3560941040,3560941043,FR
-3560941044,3560941047,DE
-3560941048,3560941051,GR
-3560941052,3560941059,FR
-3560941060,3560941063,GB
-3560941064,3560941071,FR
-3560941072,3560941075,NL
-3560941076,3560941079,GB
-3560941080,3560941083,BE
-3560941084,3560941087,IT
-3560941088,3560941091,DE
-3560941092,3560941095,BE
-3560941096,3560941099,AT
-3560941100,3560941103,IT
-3560941104,3560941107,FR
-3560941108,3560941119,DE
-3560941120,3560941123,BE
-3560941124,3560941127,FR
-3560941128,3560941131,DE
-3560941132,3560941135,GB
-3560941136,3560941147,DE
-3560941148,3560941151,IT
-3560941152,3560941155,DK
-3560941156,3560941159,ES
-3560941160,3560941163,IT
-3560941164,3560941167,DE
-3560941168,3560941171,NL
-3560941172,3560941175,DE
-3560941176,3560941179,ES
+3560931328,3560941179,DE
3560941180,3560941183,GB
-3560941184,3560941187,IT
-3560941188,3560941191,ES
-3560941192,3560941195,CH
-3560941196,3560941199,FR
-3560941200,3560941203,DE
-3560941204,3560941207,IT
-3560941208,3560941211,MA
-3560941212,3560941215,DE
-3560941216,3560941219,NL
-3560941220,3560941223,GB
-3560941224,3560941227,DE
-3560941228,3560941231,SE
-3560941232,3560941235,FR
-3560941236,3560941243,DE
-3560941244,3560941251,IT
-3560941252,3560941255,FR
-3560941256,3560941259,AT
-3560941260,3560941263,GB
-3560941264,3560941271,ES
-3560941272,3560941275,DK
-3560941276,3560941279,GR
-3560941280,3560941283,NL
-3560941284,3560941287,DE
-3560941288,3560941291,ES
-3560941292,3560941295,DE
-3560941296,3560941303,IT
-3560941304,3560941307,FR
-3560941308,3560941315,DE
-3560941316,3560941319,SE
-3560941320,3560941323,ES
-3560941324,3560941331,IT
-3560941332,3560941335,PT
-3560941336,3560941339,BE
+3560941184,3560941339,DE
3560941340,3560941343,GB
-3560941344,3560941347,FR
-3560941348,3560941351,IE
-3560941352,3560941355,NL
-3560941356,3560941359,ES
-3560941360,3560941367,DE
-3560941368,3560941371,DK
-3560941372,3560941379,DE
-3560941380,3560941383,CH
-3560941384,3560941387,IE
-3560941388,3560941391,SE
-3560941392,3560941395,DK
-3560941396,3560941399,IS
-3560941400,3560941407,DE
-3560941408,3560941411,CH
-3560941412,3560941415,IT
-3560941416,3560941419,DE
-3560941420,3560941423,FR
-3560941424,3560941427,DE
-3560941428,3560941431,FR
-3560941432,3560941435,DE
-3560941436,3560941439,IN
-3560941440,3560941443,DE
-3560941444,3560941447,ES
-3560941448,3560941451,DE
-3560941452,3560941459,GB
-3560941460,3560941467,DE
-3560941468,3560941471,CH
-3560941472,3560941475,BE
-3560941476,3560941479,ES
-3560941480,3560941483,DE
-3560941484,3560941487,ES
-3560941488,3560941491,DE
-3560941492,3560941495,GB
-3560941496,3560941499,FR
-3560941500,3560941503,ES
-3560941504,3560941507,DE
-3560941508,3560941511,IT
-3560941512,3560941515,AT
-3560941516,3560941519,SE
-3560941520,3560941523,NO
-3560941524,3560941535,DE
-3560941536,3560941539,DK
-3560941540,3560941543,FR
-3560941544,3560941547,GB
-3560941548,3560941551,DE
-3560941552,3560941555,IT
-3560941556,3560941559,DE
-3560941560,3560941563,GB
-3560941564,3560941567,GR
-3560941568,3560941587,DE
-3560941588,3560941591,ES
-3560941592,3560941599,DE
-3560941600,3560941603,FR
-3560941604,3560941607,CH
-3560941608,3560941611,GB
-3560941612,3560941623,DE
-3560941624,3560941627,GB
-3560941628,3560941631,ES
-3560941632,3560941635,NL
-3560941636,3560941639,BE
-3560941640,3560941643,GB
-3560941644,3560941647,BE
-3560941648,3560941651,NO
-3560941652,3560941655,DE
-3560941656,3560941659,GB
-3560941660,3560941663,NL
-3560941664,3560941671,DE
-3560941672,3560941679,FR
-3560941680,3560941683,GB
-3560941684,3560941687,IT
-3560941688,3560941691,DE
-3560941692,3560941695,IT
-3560941696,3560941699,FR
-3560941700,3560941703,GB
-3560941704,3560941711,DE
-3560941712,3560941715,FR
-3560941716,3560941723,DE
-3560941724,3560941727,FR
-3560941728,3560941735,DE
-3560941736,3560941739,NL
-3560941740,3560941743,NO
-3560941744,3560941747,FR
-3560941748,3560941751,ES
-3560941752,3560941755,BE
-3560941756,3560941771,DE
-3560941772,3560941787,GB
-3560941788,3560941791,DE
-3560941792,3560941795,ES
-3560941796,3560941799,FR
-3560941800,3560941803,NL
-3560941804,3560941807,ES
-3560941808,3560941811,FR
-3560941812,3560941815,NO
-3560941816,3560941819,FR
-3560941820,3560941823,NL
-3560941824,3560941827,DE
-3560941828,3560941831,ES
-3560941832,3560941835,GB
-3560941836,3560941843,DE
-3560941844,3560941847,IT
-3560941848,3560941851,BE
-3560941852,3560941855,CH
-3560941856,3560941859,BE
-3560941860,3560941867,DE
-3560941868,3560941871,AT
-3560941872,3560941875,GB
-3560941876,3560941879,NL
-3560941880,3560941883,BG
-3560941884,3560941887,DE
-3560941888,3560941891,ES
-3560941892,3560941895,IT
-3560941896,3560941899,ES
-3560941900,3560941903,DE
-3560941904,3560941907,GB
-3560941908,3560941911,DE
-3560941912,3560941919,FR
-3560941920,3560941931,DE
-3560941932,3560941935,CH
-3560941936,3560941947,DE
-3560941948,3560941951,DK
-3560941952,3560941955,IT
-3560941956,3560941959,DE
-3560941960,3560941963,LU
-3560941964,3560941967,FR
-3560941968,3560941971,DE
-3560941972,3560941975,DK
-3560941976,3560941983,DE
-3560941984,3560941987,NL
-3560941988,3560941991,DE
-3560941992,3560941995,GB
-3560941996,3560941999,BE
-3560942000,3560942003,FR
-3560942004,3560942007,GB
-3560942008,3560942011,IT
-3560942012,3560942015,DE
-3560942016,3560942019,NL
-3560942020,3560942023,ES
-3560942024,3560942027,CH
-3560942028,3560942035,DE
-3560942036,3560942039,GB
-3560942040,3560942047,DE
-3560942048,3560942051,IT
-3560942052,3560942055,DE
-3560942056,3560942059,IS
-3560942060,3560942063,GB
-3560942064,3560942067,ES
-3560942068,3560942071,BE
-3560942072,3560942083,DE
-3560942084,3560942087,FR
-3560942088,3560942095,DE
-3560942096,3560942099,FR
-3560942100,3560942103,DE
-3560942104,3560942107,NL
-3560942108,3560942115,DE
-3560942116,3560942119,HU
-3560942120,3560942123,AT
-3560942124,3560942127,BE
-3560942128,3560942131,DE
-3560942132,3560942135,ES
-3560942136,3560942143,DE
-3560942144,3560942147,GB
-3560942148,3560942151,DE
-3560942152,3560942155,IT
-3560942156,3560942159,ES
-3560942160,3560942163,DE
-3560942164,3560942171,ES
-3560942172,3560942175,SE
-3560942176,3560942179,BE
-3560942180,3560942183,ES
-3560942184,3560942191,DE
-3560942192,3560942195,HU
-3560942196,3560942199,ES
-3560942200,3560942203,FR
-3560942204,3560942211,DE
-3560942212,3560942219,IT
-3560942220,3560942227,FR
-3560942228,3560942231,IT
-3560942232,3560942243,DE
-3560942244,3560942247,IT
-3560942248,3560942251,TR
-3560942252,3560942255,GB
-3560942256,3560942259,DE
-3560942260,3560942263,ES
-3560942264,3560942267,NL
-3560942268,3560942271,DE
-3560942272,3560942275,PL
-3560942276,3560942279,IT
-3560942280,3560942283,NL
-3560942284,3560942287,DK
-3560942288,3560942291,FR
-3560942292,3560942295,BH
-3560942296,3560942299,MA
-3560942300,3560942307,DE
-3560942308,3560942319,ES
-3560942320,3560942323,DE
-3560942324,3560942327,IT
-3560942328,3560942339,PT
-3560942340,3560942343,DE
-3560942344,3560942347,FR
-3560942348,3560942351,DE
-3560942352,3560942355,ES
-3560942356,3560942359,IT
-3560942360,3560942363,AT
-3560942364,3560942367,DE
-3560942368,3560942375,FR
-3560942376,3560942379,DE
-3560942380,3560942383,GB
-3560942384,3560942387,DE
-3560942388,3560942391,IT
-3560942392,3560942407,DE
-3560942408,3560942411,GB
-3560942412,3560942415,DE
-3560942416,3560942419,IT
-3560942420,3560942423,FR
-3560942424,3560942427,NO
-3560942428,3560942447,DE
-3560942448,3560942455,CH
-3560942456,3560942459,ES
-3560942460,3560942463,RU
-3560942464,3560942467,BE
-3560942468,3560942471,ES
-3560942472,3560942475,DE
-3560942476,3560942479,CH
-3560942480,3560942483,ES
-3560942484,3560942487,HU
-3560942488,3560942495,FR
-3560942496,3560942499,ES
-3560942500,3560942503,DE
-3560942504,3560942511,ES
-3560942512,3560942515,IT
-3560942516,3560942523,DE
-3560942524,3560942527,NL
-3560942528,3560942535,DE
-3560942536,3560942539,FR
-3560942540,3560942543,DE
-3560942544,3560942547,CH
-3560942548,3560942551,DK
-3560942552,3560942555,DE
-3560942556,3560942559,FR
-3560942560,3560942563,IT
-3560942564,3560942567,ES
-3560942568,3560942571,DE
-3560942572,3560942579,FR
-3560942580,3560942583,DE
-3560942584,3560942587,GB
-3560942588,3560942590,ES
-3560942591,3560942599,DE
-3560942600,3560942603,DK
-3560942604,3560942619,DE
-3560942620,3560942623,BE
-3560942624,3560942627,IT
-3560942628,3560942631,GB
-3560942632,3560942635,FR
-3560942636,3560942643,DE
-3560942644,3560942647,FR
-3560942648,3560942651,DE
-3560942652,3560942655,GR
-3560942656,3560942663,ES
-3560942664,3560942667,NL
-3560942668,3560942675,IT
-3560942676,3560942679,BE
-3560942680,3560942683,DE
-3560942684,3560942687,BE
-3560942688,3560942691,NL
-3560942692,3560942695,LU
-3560942696,3560942699,DE
-3560942700,3560942703,ES
-3560942704,3560942707,DE
-3560942708,3560942711,IT
-3560942712,3560942715,LU
-3560942716,3560942719,BE
-3560942720,3560942727,IT
-3560942728,3560942731,GB
-3560942732,3560942735,DE
-3560942736,3560942739,CH
-3560942740,3560942743,ES
-3560942744,3560942751,GB
-3560942752,3560942763,DE
-3560942764,3560942767,FR
-3560942768,3560942779,DE
-3560942780,3560942783,CH
-3560942784,3560942787,DE
-3560942788,3560942791,HU
-3560942792,3560942795,DE
-3560942796,3560942799,FR
-3560942800,3560942803,AT
-3560942804,3560942807,TR
-3560942808,3560942811,AT
-3560942812,3560942815,FR
-3560942816,3560942819,TR
-3560942820,3560942823,ES
-3560942824,3560942827,GB
-3560942828,3560942831,AT
-3560942832,3560942835,IT
-3560942836,3560942839,CH
-3560942840,3560942843,BE
-3560942844,3560942847,ES
-3560942848,3560942851,IT
-3560942852,3560942855,ES
-3560942856,3560942859,DE
-3560942860,3560942863,IT
-3560942864,3560942871,DE
-3560942872,3560942875,IT
-3560942876,3560942879,PL
-3560942880,3560942883,GB
-3560942884,3560942887,DE
-3560942888,3560942891,FR
-3560942892,3560942895,DE
-3560942896,3560942899,ES
-3560942900,3560942903,DE
-3560942904,3560942907,CH
-3560942908,3560942915,DE
-3560942916,3560942919,BE
-3560942920,3560942923,DE
-3560942924,3560942927,IT
-3560942928,3560942931,SE
-3560942932,3560942935,AT
-3560942936,3560942939,DE
-3560942940,3560942943,AE
-3560942944,3560942951,DE
-3560942952,3560942955,ES
-3560942956,3560942959,DE
-3560942960,3560942963,GB
-3560942964,3560942983,DE
-3560942984,3560942987,BE
-3560942988,3560942999,IT
-3560943000,3560943003,PL
-3560943004,3560943007,DK
-3560943008,3560943011,CH
-3560943012,3560943015,IT
-3560943016,3560943019,ES
-3560943020,3560943023,DE
-3560943024,3560943027,GR
-3560943028,3560943031,DE
-3560943032,3560943035,FR
-3560943036,3560943039,PL
-3560943040,3560943043,NO
-3560943044,3560943047,ES
-3560943048,3560943051,HR
-3560943052,3560943055,CY
-3560943056,3560943059,BE
-3560943060,3560943075,DE
-3560943076,3560943079,ES
-3560943080,3560943095,DE
-3560943096,3560943099,PL
-3560943100,3560943110,DE
-3560943111,3560943111,ES
-3560943112,3560943113,DE
-3560943114,3560943115,ES
-3560943116,3560943116,DK
-3560943117,3560943117,IL
-3560943118,3560943118,DE
-3560943119,3560943119,IT
-3560943120,3560943120,DE
-3560943121,3560943121,CH
-3560943122,3560943122,ES
-3560943123,3560943125,DE
-3560943126,3560943126,FR
-3560943127,3560943127,HU
-3560943128,3560943129,DE
-3560943130,3560943130,BE
-3560943131,3560943131,RU
-3560943132,3560943132,BE
-3560943133,3560943133,ES
-3560943134,3560943136,DE
-3560943137,3560943137,ES
-3560943138,3560943138,CH
-3560943139,3560943139,DE
-3560943140,3560943140,ES
-3560943141,3560943141,CH
-3560943142,3560943142,DE
-3560943143,3560943145,HU
-3560943146,3560943146,IE
-3560943147,3560943147,CH
-3560943148,3560943149,DE
-3560943150,3560943150,ES
-3560943151,3560943151,IT
-3560943152,3560943152,HU
-3560943153,3560943154,DE
-3560943155,3560943155,FR
-3560943156,3560943157,DE
-3560943158,3560943158,FR
-3560943159,3560943159,IT
-3560943160,3560943160,NO
-3560943161,3560943161,BE
-3560943162,3560943162,GR
-3560943163,3560943163,DE
-3560943164,3560943164,PL
-3560943165,3560943165,FR
-3560943166,3560943166,GB
-3560943167,3560943167,FR
-3560943168,3560943168,ES
-3560943169,3560943169,DE
-3560943170,3560943170,ES
-3560943171,3560943171,IT
-3560943172,3560943172,ES
-3560943173,3560943173,BE
-3560943174,3560943175,DE
-3560943176,3560943177,CH
-3560943178,3560943178,IT
-3560943179,3560943179,PL
-3560943180,3560943180,GB
-3560943181,3560943181,DE
-3560943182,3560943183,ES
-3560943184,3560943184,IT
-3560943185,3560943185,DK
-3560943186,3560943186,ES
-3560943187,3560943187,PT
-3560943188,3560943188,IT
-3560943189,3560943192,DE
-3560943193,3560943193,ES
-3560943194,3560943194,AT
-3560943195,3560943195,DE
-3560943196,3560943197,IT
-3560943198,3560943198,DE
-3560943199,3560943199,PT
-3560943200,3560943200,AT
-3560943201,3560943201,IT
-3560943202,3560943202,IL
-3560943203,3560943204,DE
-3560943205,3560943205,IT
-3560943206,3560943207,DE
-3560943208,3560943208,AT
-3560943209,3560943210,ES
-3560943211,3560943211,FR
-3560943212,3560943212,DE
-3560943213,3560943213,FR
-3560943214,3560943214,PL
-3560943215,3560943218,DE
-3560943219,3560943219,ES
-3560943220,3560943221,DE
-3560943222,3560943222,ES
-3560943223,3560943223,FR
-3560943224,3560943224,DE
-3560943225,3560943226,GR
-3560943227,3560943227,DE
-3560943228,3560943230,NL
-3560943231,3560943232,FR
-3560943233,3560943233,PL
-3560943234,3560943234,EE
-3560943235,3560943235,CH
-3560943236,3560943237,NL
-3560943238,3560943238,DE
-3560943239,3560943239,FR
-3560943240,3560943240,GB
-3560943241,3560943241,FR
-3560943242,3560943242,DE
-3560943243,3560943243,FR
-3560943244,3560943244,PL
-3560943245,3560943245,CH
-3560943246,3560943247,DE
-3560943248,3560943248,GR
-3560943249,3560943249,CH
-3560943250,3560943250,AT
-3560943251,3560943251,GB
-3560943252,3560943252,BE
-3560943253,3560943253,DE
-3560943254,3560943254,ES
-3560943255,3560943255,GB
-3560943256,3560943256,DE
-3560943257,3560943257,ES
-3560943258,3560943258,FR
-3560943259,3560943259,DE
-3560943260,3560943260,ES
-3560943261,3560943261,IE
-3560943262,3560943262,DE
-3560943263,3560943263,IT
-3560943264,3560943264,CZ
-3560943265,3560943267,DE
-3560943268,3560943269,IT
-3560943270,3560943270,GB
-3560943271,3560943271,IT
-3560943272,3560943272,ES
-3560943273,3560943273,FR
-3560943274,3560943274,GB
-3560943275,3560943275,DE
-3560943276,3560943276,FR
-3560943277,3560943277,IT
-3560943278,3560943278,DE
-3560943279,3560943279,FR
-3560943280,3560943281,DE
-3560943282,3560943282,FR
-3560943283,3560943283,ES
-3560943284,3560943286,DE
-3560943287,3560943287,NL
-3560943288,3560943290,FR
-3560943291,3560943292,IT
-3560943293,3560943293,ES
-3560943294,3560943294,IT
-3560943295,3560943295,DE
-3560943296,3560943296,RU
-3560943297,3560943297,ES
-3560943298,3560943298,FR
-3560943299,3560943299,GB
-3560943300,3560943300,DE
-3560943301,3560943301,FR
-3560943302,3560943302,ES
-3560943303,3560943303,IT
-3560943304,3560943304,FR
-3560943305,3560943306,DE
-3560943307,3560943307,ES
-3560943308,3560943309,DE
-3560943310,3560943311,IT
-3560943312,3560943312,PL
-3560943313,3560943313,DE
-3560943314,3560943314,ES
-3560943315,3560943315,IT
-3560943316,3560943316,GB
-3560943317,3560943317,IT
-3560943318,3560943318,CH
-3560943319,3560943319,ES
-3560943320,3560943320,IT
-3560943321,3560943321,GB
-3560943322,3560943322,DE
-3560943323,3560943323,NL
-3560943324,3560943324,DE
-3560943325,3560943325,CH
-3560943326,3560943326,RU
-3560943327,3560943329,DE
-3560943330,3560943331,IT
-3560943332,3560943335,DE
-3560943336,3560943336,ES
-3560943337,3560943337,IT
-3560943338,3560943338,BE
-3560943339,3560943339,NL
-3560943340,3560943341,DE
-3560943342,3560943342,ES
-3560943343,3560943343,FR
-3560943344,3560943344,NL
-3560943345,3560943345,CH
-3560943346,3560943346,IT
-3560943347,3560943347,ES
-3560943348,3560943348,FR
-3560943349,3560943349,DE
-3560943350,3560943350,BE
-3560943351,3560943351,SE
-3560943352,3560943352,IT
-3560943353,3560943354,DE
-3560943355,3560943355,IT
-3560943356,3560943356,DE
-3560943357,3560943357,ES
-3560943358,3560943358,BE
-3560943359,3560943361,DE
-3560943362,3560943362,GB
-3560943363,3560943365,DE
-3560943366,3560943367,IT
-3560943368,3560943368,DE
-3560943369,3560943369,GR
-3560943370,3560943370,DE
-3560943371,3560943371,AT
-3560943372,3560943372,FR
-3560943373,3560943375,DE
-3560943376,3560943376,ES
-3560943377,3560943377,GB
-3560943378,3560943378,DE
-3560943379,3560943380,ES
-3560943381,3560943383,DE
-3560943384,3560943384,FR
-3560943385,3560943385,ES
-3560943386,3560943386,CH
-3560943387,3560943387,GB
-3560943388,3560943391,DE
-3560943392,3560943392,GB
-3560943393,3560943393,DE
-3560943394,3560943394,ES
-3560943395,3560943395,NL
-3560943396,3560943396,BE
-3560943397,3560943397,DE
-3560943398,3560943398,BE
-3560943399,3560943399,CH
-3560943400,3560943400,IT
-3560943401,3560943401,DE
-3560943402,3560943402,NL
-3560943403,3560943403,DE
-3560943404,3560943404,BE
-3560943405,3560943405,DE
-3560943406,3560943407,ES
-3560943408,3560943408,IT
-3560943409,3560943409,ES
-3560943410,3560943410,NL
-3560943411,3560943411,DE
-3560943412,3560943412,IT
-3560943413,3560943413,ES
-3560943414,3560943415,DE
-3560943416,3560943416,FR
-3560943417,3560943417,DE
-3560943418,3560943418,GB
-3560943419,3560943419,FR
-3560943420,3560943420,DE
-3560943421,3560943421,HU
-3560943422,3560943422,DE
-3560943423,3560943423,FR
-3560943424,3560943424,DE
-3560943425,3560943425,ES
-3560943426,3560943426,IT
-3560943427,3560943427,FR
-3560943428,3560943428,NO
-3560943429,3560943430,NL
-3560943431,3560943432,DE
-3560943433,3560943433,GB
-3560943434,3560943434,SE
-3560943435,3560943435,DE
-3560943436,3560943436,FR
-3560943437,3560943437,ES
-3560943438,3560943438,FR
-3560943439,3560943439,NO
-3560943440,3560943440,FR
-3560943441,3560943441,DE
-3560943442,3560943442,ES
-3560943443,3560943443,BE
-3560943444,3560943444,CH
-3560943445,3560943445,PT
-3560943446,3560943446,DE
-3560943447,3560943447,GB
-3560943448,3560943450,DE
-3560943451,3560943451,PL
-3560943452,3560943452,GB
-3560943453,3560943454,DE
-3560943455,3560943456,GB
-3560943457,3560943457,ES
-3560943458,3560943459,IT
-3560943460,3560943460,ES
-3560943461,3560943461,CH
-3560943462,3560943462,FR
-3560943463,3560943463,NL
-3560943464,3560943464,ES
-3560943465,3560943465,FR
-3560943466,3560943466,NO
-3560943467,3560943467,IT
-3560943468,3560943468,CH
-3560943469,3560943469,IT
-3560943470,3560943471,DE
-3560943472,3560943472,BE
-3560943473,3560943473,AT
-3560943474,3560943474,CH
-3560943475,3560943475,ES
-3560943476,3560943476,BE
-3560943477,3560943477,DE
-3560943478,3560943478,IT
-3560943479,3560943479,GB
-3560943480,3560943480,NL
-3560943481,3560943481,BG
-3560943482,3560943482,DE
-3560943483,3560943486,ES
-3560943487,3560943487,DE
-3560943488,3560943488,ES
-3560943489,3560943489,DE
-3560943490,3560943490,GB
-3560943491,3560943491,DE
-3560943492,3560943493,FR
-3560943494,3560943494,GB
-3560943495,3560943495,IT
-3560943496,3560943499,DE
-3560943500,3560943500,CH
-3560943501,3560943501,ES
-3560943502,3560943507,DE
-3560943508,3560943508,DK
-3560943509,3560943510,DE
-3560943511,3560943511,IT
-3560943512,3560943512,DE
-3560943513,3560943513,LU
-3560943514,3560943515,ES
-3560943516,3560943517,DE
-3560943518,3560943518,LU
-3560943519,3560943519,DE
-3560943520,3560943520,DK
-3560943521,3560943521,DE
-3560943522,3560943522,GB
-3560943523,3560943524,DE
-3560943525,3560943525,NL
-3560943526,3560943526,IT
-3560943527,3560943527,DE
-3560943528,3560943528,FR
-3560943529,3560943529,DE
-3560943530,3560943530,CH
-3560943531,3560943532,DE
-3560943533,3560943533,HU
-3560943534,3560943534,BY
-3560943535,3560943535,FR
-3560943536,3560943536,BE
-3560943537,3560943537,DE
-3560943538,3560943538,GB
-3560943539,3560943539,DE
-3560943540,3560943540,BE
-3560943541,3560943541,NL
-3560943542,3560943542,DE
-3560943543,3560943543,NL
-3560943544,3560943544,ES
-3560943545,3560943546,DE
-3560943547,3560943547,SI
-3560943548,3560943548,GB
-3560943549,3560943549,DE
-3560943550,3560943550,HU
-3560943551,3560943551,FR
-3560943552,3560943552,IT
-3560943553,3560943553,DE
-3560943554,3560943554,IS
-3560943555,3560943555,FR
-3560943556,3560943556,DE
-3560943557,3560943557,ES
-3560943558,3560943558,DE
-3560943559,3560943559,GB
-3560943560,3560943562,IT
-3560943563,3560943563,HU
-3560943564,3560943564,DE
-3560943565,3560943565,GB
-3560943566,3560943566,DE
-3560943567,3560943567,FR
-3560943568,3560943568,GB
-3560943569,3560943570,FR
-3560943571,3560943572,DE
-3560943573,3560943573,FR
-3560943574,3560943574,NO
-3560943575,3560943575,BE
-3560943576,3560943576,IT
-3560943577,3560943577,DK
-3560943578,3560943578,ES
-3560943579,3560943580,DE
-3560943581,3560943581,NL
-3560943582,3560943582,DE
-3560943583,3560943583,ES
-3560943584,3560943584,IT
-3560943585,3560943585,FR
-3560943586,3560943586,ES
-3560943587,3560943587,DE
-3560943588,3560943588,IT
-3560943589,3560943589,NL
-3560943590,3560943590,HU
-3560943591,3560943591,AT
-3560943592,3560943592,SK
-3560943593,3560943593,PL
-3560943594,3560943594,FR
-3560943595,3560943596,ES
-3560943597,3560943599,DE
-3560943600,3560943600,AT
-3560943601,3560943602,IT
-3560943603,3560943603,CH
-3560943604,3560943604,ES
-3560943605,3560943605,GB
-3560943606,3560943607,DE
-3560943608,3560943608,IT
-3560943609,3560943610,DE
-3560943611,3560943611,FR
-3560943612,3560943612,DE
+3560941344,3560943366,DE
+3560943367,3560943367,IT
+3560943368,3560943514,DE
+3560943515,3560943515,ES
+3560943516,3560943612,DE
3560943613,3560943613,ES
-3560943614,3560943617,DE
-3560943618,3560943618,FR
-3560943619,3560943620,ES
-3560943621,3560943621,SE
-3560943622,3560943622,BE
-3560943623,3560943623,DE
-3560943624,3560943624,ES
-3560943625,3560943625,DE
-3560943626,3560943626,ES
-3560943627,3560943627,DK
-3560943628,3560943628,DE
-3560943629,3560943629,IT
-3560943630,3560943630,DE
-3560943631,3560943631,HU
-3560943632,3560943632,CH
-3560943633,3560943633,ES
-3560943634,3560943634,FR
+3560943614,3560943634,DE
3560943635,3560943635,ES
-3560943636,3560943636,DE
-3560943637,3560943637,PL
-3560943638,3560943638,IT
-3560943639,3560943639,ES
-3560943640,3560943640,FR
-3560943641,3560943641,DE
-3560943642,3560943643,IT
-3560943644,3560943644,DE
-3560943645,3560943645,GB
-3560943646,3560943646,DE
-3560943647,3560943647,ES
-3560943648,3560943648,DE
-3560943649,3560943649,NL
-3560943650,3560943651,DE
-3560943652,3560943652,AT
-3560943653,3560943653,DE
-3560943654,3560943654,IT
-3560943655,3560943655,DE
-3560943656,3560943656,IT
-3560943657,3560943657,DE
-3560943658,3560943658,GB
-3560943659,3560943659,DE
-3560943660,3560943660,PT
-3560943661,3560943661,DK
-3560943662,3560943662,DE
-3560943663,3560943664,NL
-3560943665,3560943666,DE
-3560943667,3560943667,PL
-3560943668,3560943668,DK
-3560943669,3560943669,FR
-3560943670,3560943671,DE
-3560943672,3560943672,BH
-3560943673,3560943673,SE
-3560943674,3560943674,MA
-3560943675,3560943675,FR
-3560943676,3560943677,DE
-3560943678,3560943680,ES
-3560943681,3560943682,DE
-3560943683,3560943683,GR
-3560943684,3560943684,NL
-3560943685,3560943685,IT
-3560943686,3560943686,FR
-3560943687,3560943687,PT
-3560943688,3560943688,DE
-3560943689,3560943689,PT
-3560943690,3560943690,IT
-3560943691,3560943691,DE
-3560943692,3560943692,SE
-3560943693,3560943693,DE
-3560943694,3560943694,FR
-3560943695,3560943695,DE
-3560943696,3560943697,CH
-3560943698,3560943698,DE
-3560943699,3560943699,IT
-3560943700,3560943700,DE
-3560943701,3560943701,AT
-3560943702,3560943702,DE
-3560943703,3560943703,FR
-3560943704,3560943704,DE
-3560943705,3560943705,CH
-3560943706,3560943706,LI
-3560943707,3560943709,DE
-3560943710,3560943710,NL
-3560943711,3560943711,DE
-3560943712,3560943712,IT
-3560943713,3560943713,PL
-3560943714,3560943714,NL
-3560943715,3560943715,DE
-3560943716,3560943716,GB
-3560943717,3560943717,FR
-3560943718,3560943719,DE
-3560943720,3560943721,IT
-3560943722,3560943726,DE
-3560943727,3560943727,ES
-3560943728,3560943728,GB
-3560943729,3560943729,DE
-3560943730,3560943730,NL
-3560943731,3560943731,IT
-3560943732,3560943732,FR
-3560943733,3560943733,NO
-3560943734,3560943736,DE
-3560943737,3560943737,GR
-3560943738,3560943738,PT
-3560943739,3560943740,DE
-3560943741,3560943741,FR
-3560943742,3560943742,DE
-3560943743,3560943743,PL
-3560943744,3560943744,DE
-3560943745,3560943745,PL
-3560943746,3560943748,DE
-3560943749,3560943749,GB
-3560943750,3560943750,DE
-3560943751,3560943751,IT
-3560943752,3560943752,DE
-3560943753,3560943753,ES
-3560943754,3560943754,HU
-3560943755,3560943755,BE
-3560943756,3560943756,IT
-3560943757,3560943757,DE
-3560943758,3560943758,CZ
-3560943759,3560943759,IE
-3560943760,3560943760,NO
-3560943761,3560943761,GB
-3560943762,3560943762,IT
-3560943763,3560943763,FR
-3560943764,3560943764,DE
-3560943765,3560943765,SE
-3560943766,3560943766,CY
-3560943767,3560943768,DE
-3560943769,3560943769,FR
-3560943770,3560943770,NL
-3560943771,3560943771,IT
-3560943772,3560943774,DE
-3560943775,3560943775,FR
-3560943776,3560943780,DE
-3560943781,3560943781,ES
-3560943782,3560943782,DE
-3560943783,3560943783,BE
-3560943784,3560943786,DE
-3560943787,3560943787,ES
-3560943788,3560943788,DK
-3560943789,3560943789,IT
-3560943790,3560943790,DE
-3560943791,3560943791,IT
-3560943792,3560943793,DE
-3560943794,3560943794,FR
-3560943795,3560943795,DE
-3560943796,3560943796,IT
-3560943797,3560943797,DE
-3560943798,3560943798,DK
-3560943799,3560943799,DE
-3560943800,3560943800,CH
-3560943801,3560943801,FR
-3560943802,3560943802,IT
-3560943803,3560943803,HU
-3560943804,3560943804,ES
-3560943805,3560943805,DE
-3560943806,3560943806,ES
-3560943807,3560943807,DK
-3560943808,3560943810,DE
-3560943811,3560943811,ES
-3560943812,3560943812,IT
-3560943813,3560943813,CH
-3560943814,3560943814,DE
-3560943815,3560943815,IT
-3560943816,3560943817,FR
-3560943818,3560943818,PT
-3560943819,3560943819,DE
-3560943820,3560943820,FR
-3560943821,3560943821,IT
-3560943822,3560943822,DE
-3560943823,3560943823,GR
-3560943824,3560943827,DE
+3560943636,3560943827,DE
3560943828,3560943828,ES
-3560943829,3560943829,NL
-3560943830,3560943830,DK
-3560943831,3560943833,FR
-3560943834,3560943836,DE
-3560943837,3560943837,CH
-3560943838,3560943838,DE
-3560943839,3560943839,NO
-3560943840,3560943840,DE
-3560943841,3560943841,GB
-3560943842,3560943842,DE
+3560943829,3560943842,DE
3560943843,3560943843,GB
-3560943844,3560943844,BE
-3560943845,3560943845,CZ
-3560943846,3560943846,LU
-3560943847,3560943847,CZ
-3560943848,3560943848,FR
-3560943849,3560943849,DE
-3560943850,3560943850,NL
-3560943851,3560943857,DE
-3560943858,3560943858,GB
-3560943859,3560943859,DE
-3560943860,3560943860,GB
-3560943861,3560943865,DE
-3560943866,3560943866,BE
-3560943867,3560943867,ES
-3560943868,3560943868,DE
-3560943869,3560943869,LU
-3560943870,3560943871,DE
-3560943872,3560943875,BR
-3560943876,3560943879,DE
-3560943880,3560943887,US
-3560943888,3560943891,CA
-3560943892,3560943895,DE
-3560943896,3560943899,CL
-3560943900,3560943903,DE
-3560943904,3560943915,US
-3560943916,3560943919,CA
-3560943920,3560943923,US
-3560943924,3560943927,MX
-3560943928,3560943935,US
-3560943936,3560943939,PE
-3560943940,3560943943,DE
-3560943944,3560943947,US
-3560943948,3560943975,DE
-3560943976,3560943979,US
-3560943980,3560943983,DE
+3560943844,3560943907,DE
+3560943908,3560943911,US
+3560943912,3560943983,DE
3560943984,3560943987,US
-3560943988,3560943991,DE
-3560943992,3560943999,US
-3560944000,3560944023,DE
-3560944024,3560944031,US
-3560944032,3560944035,MX
-3560944036,3560944039,US
-3560944040,3560944043,MX
-3560944044,3560944059,DE
-3560944060,3560944063,US
-3560944064,3560944067,DE
-3560944068,3560944071,US
-3560944072,3560944079,DE
-3560944080,3560944083,US
-3560944084,3560944087,CL
-3560944088,3560944103,DE
-3560944104,3560944107,US
-3560944108,3560944119,DE
-3560944120,3560944639,US
-3560944640,3560944643,TR
-3560944644,3560944647,ES
-3560944648,3560944651,TR
-3560944652,3560944655,HU
-3560944656,3560944659,TR
-3560944660,3560944663,DE
-3560944664,3560944667,FR
-3560944668,3560944671,TR
-3560944672,3560944675,KZ
-3560944676,3560944679,GR
-3560944680,3560944687,TR
-3560944688,3560944695,DE
-3560944696,3560944699,TR
-3560944700,3560944703,CU
-3560944704,3560944707,ZW
-3560944708,3560944711,TR
-3560944712,3560944715,IL
-3560944716,3560944719,ZW
-3560944720,3560944723,SK
-3560944724,3560944727,TR
-3560944728,3560944731,KZ
-3560944732,3560944735,TR
-3560944736,3560944743,FR
-3560944744,3560944747,GR
-3560944748,3560944755,TR
-3560944756,3560944759,MZ
-3560944760,3560944767,TR
-3560944768,3560944771,MZ
-3560944772,3560944779,DE
-3560944780,3560944783,ES
-3560944784,3560944787,FR
-3560944788,3560944791,NL
-3560944792,3560944795,ES
-3560944796,3560944799,GB
-3560944800,3560944803,ES
-3560944804,3560944807,FR
-3560944808,3560944811,DE
-3560944812,3560944815,ES
-3560944816,3560944823,IT
-3560944824,3560944827,DE
-3560944828,3560944831,IE
-3560944832,3560944835,DE
-3560944836,3560944839,IT
-3560944840,3560944843,TR
-3560944844,3560944847,DE
-3560944848,3560944855,FR
-3560944856,3560944859,NL
-3560944860,3560944863,DK
-3560944864,3560944871,FR
-3560944872,3560944875,DE
-3560944876,3560944879,ES
-3560944880,3560944883,SA
-3560944884,3560944887,ES
-3560944888,3560944891,CH
-3560944892,3560944895,DE
-3560944896,3560944899,TW
-3560944900,3560944903,SG
-3560944904,3560944907,MY
-3560944908,3560944919,SG
-3560944920,3560944923,MY
-3560944924,3560944927,CN
-3560944928,3560944931,MY
-3560944932,3560944935,SG
-3560944936,3560944943,CN
-3560944944,3560944947,MY
-3560944948,3560944951,SG
-3560944952,3560944955,TW
-3560944956,3560944959,SG
-3560944960,3560944963,IN
-3560944964,3560944967,MY
-3560944968,3560944971,SG
-3560944972,3560944975,CN
-3560944976,3560944987,IN
-3560944988,3560944991,SG
-3560944992,3560944995,MY
-3560944996,3560944999,SG
-3560945000,3560945003,MY
-3560945004,3560945007,IN
-3560945008,3560945011,SG
-3560945012,3560945015,DE
-3560945016,3560945027,IN
-3560945028,3560945031,MY
-3560945032,3560945035,IN
-3560945036,3560945039,CN
-3560945040,3560945043,SG
-3560945044,3560945047,TW
-3560945048,3560945059,IN
-3560945060,3560945063,SG
-3560945064,3560945067,MY
-3560945068,3560945075,IN
-3560945076,3560945083,CN
-3560945084,3560945087,IN
-3560945088,3560945091,DE
-3560945092,3560945095,SG
-3560945096,3560945099,CN
-3560945100,3560945103,SG
-3560945104,3560945107,MY
-3560945108,3560945111,TW
-3560945112,3560945115,SG
-3560945116,3560945119,IN
-3560945120,3560945123,CN
-3560945124,3560945131,SG
-3560945132,3560945135,TW
-3560945136,3560945139,MY
-3560945140,3560945143,SG
-3560945144,3560945147,IN
-3560945148,3560945151,SG
-3560945152,3560945153,DE
-3560945154,3560945156,AU
-3560945157,3560945157,NZ
-3560945158,3560945167,AU
-3560945168,3560945168,DE
-3560945169,3560945169,AU
-3560945170,3560945191,DE
-3560945192,3560945192,AU
-3560945193,3560945194,DE
-3560945195,3560945195,AU
-3560945196,3560945204,DE
-3560945205,3560945205,AU
-3560945206,3560945206,IN
-3560945207,3560945209,AU
-3560945210,3560945227,DE
-3560945228,3560945231,IN
-3560945232,3560945267,DE
-3560945268,3560945271,AU
-3560945272,3560945275,DE
-3560945276,3560945279,AU
-3560945280,3560945355,JP
-3560945356,3560945359,TH
-3560945360,3560945403,JP
-3560945404,3560945407,TH
-3560945408,3560945409,DE
-3560945410,3560945410,MY
-3560945411,3560945411,TW
-3560945412,3560945412,CN
-3560945413,3560945413,SG
-3560945414,3560945414,IN
-3560945415,3560945416,SG
-3560945417,3560945418,CN
-3560945419,3560945419,MY
-3560945420,3560945420,DE
-3560945421,3560945422,SG
-3560945423,3560945423,CN
-3560945424,3560945424,MY
-3560945425,3560945425,IN
-3560945426,3560945426,MY
+3560943988,3560944139,DE
+3560944140,3560944143,US
+3560944144,3560944231,DE
+3560944232,3560944235,US
+3560944236,3560944391,DE
+3560944392,3560944395,US
+3560944396,3560944487,DE
+3560944488,3560944491,CA
+3560944492,3560944567,DE
+3560944568,3560944571,US
+3560944572,3560944607,DE
+3560944608,3560944611,US
+3560944612,3560945164,DE
+3560945165,3560945165,AU
+3560945166,3560945347,DE
+3560945348,3560945351,JP
+3560945352,3560945426,DE
3560945427,3560945427,CN
-3560945428,3560945428,SG
-3560945429,3560945429,TW
-3560945430,3560945430,MY
-3560945431,3560945431,CN
-3560945432,3560945433,IN
-3560945434,3560945434,TW
-3560945435,3560945435,MY
-3560945436,3560945436,CN
-3560945437,3560945437,SG
-3560945438,3560945438,TW
-3560945439,3560945439,SG
-3560945440,3560945440,ID
-3560945441,3560945441,SG
-3560945442,3560945443,IN
-3560945444,3560945447,SG
-3560945448,3560945448,DE
-3560945449,3560945449,IN
-3560945450,3560945450,SG
-3560945451,3560945451,IN
-3560945452,3560945452,DE
-3560945453,3560945453,IN
-3560945454,3560945458,SG
-3560945459,3560945459,TW
-3560945460,3560945461,SG
-3560945462,3560945462,IN
-3560945463,3560945465,SG
-3560945466,3560945466,CN
-3560945467,3560945467,MY
-3560945468,3560945469,SG
-3560945470,3560945470,CN
-3560945471,3560945471,SG
-3560945472,3560945472,CN
-3560945473,3560945473,TW
-3560945474,3560945475,SG
-3560945476,3560945476,CN
-3560945477,3560945477,TW
-3560945478,3560945478,IN
-3560945479,3560945479,SG
-3560945480,3560945481,IN
-3560945482,3560945482,DE
-3560945483,3560945485,MY
-3560945486,3560945487,IN
-3560945488,3560945488,DE
-3560945489,3560945489,MY
-3560945490,3560945490,TH
-3560945491,3560945492,IN
-3560945493,3560945495,DE
-3560945496,3560945496,IN
-3560945497,3560945497,DE
-3560945498,3560945499,IN
-3560945500,3560945500,SG
-3560945501,3560945501,US
-3560945502,3560945502,IN
-3560945503,3560945539,DE
-3560945540,3560945543,SG
-3560945544,3560945551,IN
-3560945552,3560945555,DE
-3560945556,3560945559,IN
-3560945560,3560945563,DE
-3560945564,3560945567,SG
-3560945568,3560945571,DE
-3560945572,3560945575,IN
-3560945576,3560945579,SG
-3560945580,3560945583,MY
-3560945584,3560945587,SG
-3560945588,3560945591,TW
-3560945592,3560945603,SG
-3560945604,3560945607,US
-3560945608,3560945611,IN
-3560945612,3560945619,SG
-3560945620,3560945627,CN
-3560945628,3560945635,SG
-3560945636,3560945639,CN
-3560945640,3560945643,SG
-3560945644,3560945647,MY
-3560945648,3560945651,IN
-3560945652,3560945659,DE
-3560945660,3560945663,IN
-3560945664,3560945667,US
-3560945668,3560945671,BR
+3560945428,3560945671,DE
3560945672,3560945675,US
-3560945676,3560945679,PE
-3560945680,3560945683,BR
-3560945684,3560945691,CO
-3560945692,3560945699,US
-3560945700,3560945703,CO
-3560945704,3560945707,US
-3560945708,3560945711,CO
-3560945712,3560945727,US
-3560945728,3560945731,AR
-3560945732,3560945739,US
-3560945740,3560945743,BR
-3560945744,3560945747,US
-3560945748,3560945751,AR
-3560945752,3560945763,US
-3560945764,3560945767,AR
-3560945768,3560945771,BR
-3560945772,3560945775,CA
-3560945776,3560945787,US
-3560945788,3560945791,CO
-3560945792,3560945795,AR
+3560945676,3560945695,DE
+3560945696,3560945699,US
+3560945700,3560945795,DE
3560945796,3560945799,US
-3560945800,3560945803,BR
-3560945804,3560945807,US
-3560945808,3560945811,CO
-3560945812,3560945815,US
-3560945816,3560945819,AR
-3560945820,3560945823,US
-3560945824,3560945827,BR
-3560945828,3560945835,US
-3560945836,3560945839,CL
-3560945840,3560945843,BR
-3560945844,3560945851,US
-3560945852,3560945855,DE
-3560945856,3560945859,US
-3560945860,3560945863,DE
+3560945800,3560945863,DE
3560945864,3560945867,US
-3560945868,3560945871,DE
-3560945872,3560945875,CA
-3560945876,3560945911,US
-3560945912,3560945915,CA
-3560945916,3560945919,US
-3560945920,3560946017,DE
-3560946018,3560946018,FI
-3560946019,3560946019,CZ
-3560946020,3560946176,DE
-3560946177,3560946189,US
-3560946190,3560946190,AR
-3560946191,3560946194,US
-3560946195,3560946195,PE
-3560946196,3560946196,CA
-3560946197,3560946197,US
-3560946198,3560946198,CA
-3560946199,3560946199,AR
-3560946200,3560946200,US
-3560946201,3560946201,CA
-3560946202,3560946202,DE
-3560946203,3560946203,CA
-3560946204,3560946204,US
-3560946205,3560946205,PE
-3560946206,3560946208,US
+3560945868,3560946208,DE
3560946209,3560946209,CA
-3560946210,3560946212,US
-3560946213,3560946213,CO
-3560946214,3560946214,CA
-3560946215,3560946215,PE
-3560946216,3560946229,US
-3560946230,3560946230,AR
-3560946231,3560946231,US
-3560946232,3560946232,CA
-3560946233,3560946234,US
-3560946235,3560946235,CL
-3560946236,3560946237,US
-3560946238,3560946238,AR
-3560946239,3560946253,US
-3560946254,3560946254,SG
-3560946255,3560946256,US
-3560946257,3560946257,MX
-3560946258,3560946259,US
-3560946260,3560946260,AR
-3560946261,3560946262,US
-3560946263,3560946263,AR
-3560946264,3560946266,US
+3560946210,3560946219,DE
+3560946220,3560946220,US
+3560946221,3560946224,DE
+3560946225,3560946225,US
+3560946226,3560946226,DE
+3560946227,3560946227,US
+3560946228,3560946239,DE
+3560946240,3560946240,US
+3560946241,3560946248,DE
+3560946249,3560946249,US
+3560946250,3560946252,DE
+3560946253,3560946253,US
+3560946254,3560946266,DE
3560946267,3560946267,CA
-3560946268,3560946271,US
-3560946272,3560946272,DE
-3560946273,3560946273,CA
-3560946274,3560946279,US
-3560946280,3560946280,ES
-3560946281,3560946282,US
-3560946283,3560946283,CL
+3560946268,3560946283,DE
3560946284,3560946284,US
-3560946285,3560946285,CO
-3560946286,3560946290,US
-3560946291,3560946291,CA
-3560946292,3560946295,US
-3560946296,3560946296,CL
-3560946297,3560946297,DE
-3560946298,3560946298,US
-3560946299,3560946299,DE
-3560946300,3560946300,CL
-3560946301,3560946311,DE
-3560946312,3560946312,US
-3560946313,3560946317,DE
-3560946318,3560946319,US
-3560946320,3560946320,DE
-3560946321,3560946326,US
-3560946327,3560946327,CA
-3560946328,3560946328,US
-3560946329,3560946329,DO
-3560946330,3560946330,US
-3560946331,3560946331,DO
-3560946332,3560946333,CA
-3560946334,3560946335,US
-3560946336,3560946336,CA
-3560946337,3560946337,DE
-3560946338,3560946338,CA
-3560946339,3560946339,US
-3560946340,3560946340,CL
-3560946341,3560946342,CA
-3560946343,3560946343,DO
-3560946344,3560946344,AR
-3560946345,3560946345,US
-3560946346,3560946346,PE
-3560946347,3560946347,US
-3560946348,3560946361,DE
-3560946362,3560946363,US
-3560946364,3560946367,DE
-3560946368,3560946368,US
-3560946369,3560946372,DE
+3560946285,3560946372,DE
3560946373,3560946373,US
-3560946374,3560946374,DE
-3560946375,3560946375,US
-3560946376,3560946398,DE
-3560946399,3560946399,US
-3560946400,3560946408,DE
-3560946409,3560946409,US
-3560946410,3560946419,DE
-3560946420,3560946420,US
-3560946421,3560946431,DE
-3560946432,3560946443,US
-3560946444,3560946447,BR
-3560946448,3560946451,DE
-3560946452,3560946455,BO
-3560946456,3560946467,US
-3560946468,3560946471,BR
-3560946472,3560946483,US
-3560946484,3560946487,MX
-3560946488,3560946491,US
-3560946492,3560946495,BR
-3560946496,3560946499,VE
-3560946500,3560946503,AR
-3560946504,3560946507,US
-3560946508,3560946511,MX
-3560946512,3560946523,US
-3560946524,3560946527,MX
-3560946528,3560946531,US
-3560946532,3560946535,CA
-3560946536,3560946539,PE
-3560946540,3560946543,US
-3560946544,3560946547,CA
-3560946548,3560946551,US
-3560946552,3560946555,PE
-3560946556,3560946559,US
-3560946560,3560946563,BR
-3560946564,3560946567,US
-3560946568,3560946571,BR
-3560946572,3560946579,US
-3560946580,3560946583,CA
-3560946584,3560946587,US
-3560946588,3560946591,AR
-3560946592,3560946603,US
-3560946604,3560946607,AR
-3560946608,3560946611,BR
-3560946612,3560946623,US
-3560946624,3560946635,MX
-3560946636,3560946643,US
-3560946644,3560946647,AR
-3560946648,3560946651,MX
-3560946652,3560946655,CL
-3560946656,3560946659,BR
-3560946660,3560946663,MX
-3560946664,3560946667,US
-3560946668,3560946671,MX
-3560946672,3560946679,BR
-3560946680,3560946687,US
-3560946688,3560946689,DE
-3560946690,3560946695,US
-3560946696,3560946696,BR
-3560946697,3560946698,US
-3560946699,3560946700,DE
-3560946701,3560946701,CO
-3560946702,3560946706,US
-3560946707,3560946707,VE
-3560946708,3560946708,BR
-3560946709,3560946710,VE
-3560946711,3560946711,US
-3560946712,3560946712,VE
-3560946713,3560946714,US
-3560946715,3560946715,CO
-3560946716,3560946716,US
-3560946717,3560946717,AR
-3560946718,3560946718,US
-3560946719,3560946720,BR
-3560946721,3560946723,CO
-3560946724,3560946724,MX
-3560946725,3560946729,US
-3560946730,3560946730,MX
-3560946731,3560946733,US
-3560946734,3560946734,PR
-3560946735,3560946747,US
-3560946748,3560946748,DE
-3560946749,3560946760,US
-3560946761,3560946761,DE
-3560946762,3560946767,US
-3560946768,3560946768,CA
-3560946769,3560946769,US
-3560946770,3560946825,DE
-3560946826,3560946826,US
-3560946827,3560946835,DE
-3560946836,3560946836,US
-3560946837,3560946839,DE
-3560946840,3560946840,US
-3560946841,3560946943,DE
-3560946944,3560947199,US
+3560946374,3560946751,DE
+3560946752,3560946752,US
+3560946753,3560947059,DE
+3560947060,3560947063,US
+3560947064,3560947075,DE
+3560947076,3560947079,US
+3560947080,3560947159,DE
+3560947160,3560947163,PR
+3560947164,3560947167,US
+3560947168,3560947199,DE
3560947200,3560947203,CA
-3560947204,3560947207,US
-3560947208,3560947211,DE
-3560947212,3560947231,US
-3560947232,3560947235,CA
-3560947236,3560947239,CO
-3560947240,3560947247,US
-3560947248,3560947251,CA
-3560947252,3560947267,US
-3560947268,3560947271,CO
-3560947272,3560947275,US
-3560947276,3560947279,AR
-3560947280,3560947283,MX
-3560947284,3560947287,US
-3560947288,3560947291,BR
-3560947292,3560947331,US
-3560947332,3560947335,MX
-3560947336,3560947343,US
-3560947344,3560947347,MX
-3560947348,3560947351,CO
-3560947352,3560947355,US
-3560947356,3560947359,CW
-3560947360,3560947363,US
-3560947364,3560947367,HN
-3560947368,3560947371,BR
-3560947372,3560947375,CA
-3560947376,3560947383,US
-3560947384,3560947391,CO
-3560947392,3560947395,MX
-3560947396,3560947399,US
-3560947400,3560947407,AR
-3560947408,3560947411,US
-3560947412,3560947415,AR
-3560947416,3560947431,US
-3560947432,3560947435,MX
-3560947436,3560947439,DE
-3560947440,3560947443,BR
-3560947444,3560947455,US
-3560947456,3560947495,JP
-3560947496,3560947499,KR
-3560947500,3560947663,JP
-3560947664,3560947667,DE
-3560947668,3560947686,JP
-3560947687,3560947687,DE
-3560947688,3560947711,JP
-3560947712,3560950839,SE
-3560950840,3560950843,CZ
-3560950844,3560950847,FI
-3560950848,3560950863,SE
-3560950864,3560950867,DK
-3560950868,3560950871,ES
-3560950872,3560950956,SE
-3560950957,3560950958,PL
-3560950959,3560951027,SE
-3560951028,3560951031,DK
-3560951032,3560951039,SE
-3560951040,3560951043,NO
-3560951044,3560951083,SE
-3560951084,3560951087,DK
-3560951088,3560951088,SE
-3560951089,3560951090,PL
-3560951091,3560951091,SE
-3560951092,3560951095,IT
-3560951096,3560951103,SE
-3560951104,3560951107,DE
-3560951108,3560951111,DK
-3560951112,3560951115,FR
-3560951116,3560951119,SE
-3560951120,3560951123,CZ
-3560951124,3560951127,GB
-3560951128,3560951131,SE
-3560951132,3560951135,ES
-3560951136,3560951143,SE
-3560951144,3560951147,BR
-3560951148,3560951155,SE
-3560951156,3560951159,US
-3560951160,3560951195,SE
-3560951196,3560951199,DK
-3560951200,3560951203,SE
-3560951204,3560951207,AE
-3560951208,3560951211,DK
-3560951212,3560951215,IT
-3560951216,3560951307,SE
-3560951308,3560951311,IT
-3560951312,3560951376,SE
-3560951377,3560951378,PL
-3560951379,3560951380,SE
-3560951381,3560951382,FI
-3560951383,3560951383,SE
-3560951384,3560951387,NO
-3560951388,3560951388,SE
-3560951389,3560951390,PT
-3560951391,3560951391,SE
-3560951392,3560951395,IT
-3560951396,3560951399,DE
-3560951400,3560951403,SE
-3560951404,3560951407,NO
-3560951408,3560951423,SE
-3560951424,3560951427,NL
-3560951428,3560951431,DK
-3560951432,3560951435,SE
-3560951436,3560951439,DK
-3560951440,3560951440,SE
-3560951441,3560951442,JP
-3560951443,3560951444,SE
-3560951445,3560951446,HU
-3560951447,3560951447,SE
-3560951448,3560951451,FR
-3560951452,3560951459,SE
-3560951460,3560951463,FI
-3560951464,3560951551,SE
-3560951552,3560951555,ES
-3560951556,3560951559,NO
-3560951560,3560951583,SE
-3560951584,3560951587,FI
-3560951588,3560951591,SE
-3560951592,3560951595,NO
-3560951596,3560951599,CZ
-3560951600,3560951679,SE
-3560951680,3560951683,DE
-3560951684,3560951759,SE
-3560951760,3560951763,DK
-3560951764,3560951767,HU
-3560951768,3560951807,SE
-3560951808,3560951811,US
-3560951812,3560951816,SE
-3560951817,3560951818,ES
-3560951819,3560951820,SE
-3560951821,3560951822,IT
-3560951823,3560951831,SE
-3560951832,3560951835,DE
-3560951836,3560951915,SE
-3560951916,3560951919,PL
-3560951920,3560951935,SE
-3560951936,3560951939,NL
-3560951940,3560951943,SE
-3560951944,3560951947,NO
-3560951948,3560951995,SE
-3560951996,3560951999,US
-3560952000,3560952039,SE
-3560952040,3560952043,FI
-3560952044,3560952223,SE
-3560952224,3560952227,CZ
-3560952228,3560952231,SE
-3560952232,3560952235,US
-3560952236,3560952239,PT
-3560952240,3560952255,SE
-3560952256,3560952259,PL
-3560952260,3560952295,SE
-3560952296,3560952299,NL
-3560952300,3560952431,SE
-3560952432,3560952435,DK
-3560952436,3560953103,SE
-3560953104,3560953119,JP
-3560953120,3560955903,SE
+3560947204,3560947259,DE
+3560947260,3560947263,US
+3560947264,3560947299,DE
+3560947300,3560947303,US
+3560947304,3560947515,DE
+3560947516,3560947519,JP
+3560947520,3560947711,DE
+3560947712,3560955903,SE
3560955904,3560964095,BE
3560964096,3560996863,NL
3560996864,3561005055,GB
3561005056,3561013247,ES
3561013248,3561021439,TR
-3561021440,3561021695,EU
+3561021440,3561021695,AT
3561021696,3561022463,DE
-3561022464,3561022719,EU
-3561022720,3561022975,AT
+3561022464,3561022975,AT
3561022976,3561037823,DE
-3561037824,3561039231,BE
-3561039232,3561039263,NL
-3561039264,3561039327,BE
-3561039328,3561039330,NL
-3561039331,3561046015,BE
+3561037824,3561046015,BE
3561046016,3561054207,RU
3561054208,3561062399,MT
3561062400,3561070591,TR
-3561070592,3561070847,DE
-3561070848,3561078783,CH
+3561070592,3561078783,CH
3561078784,3561095167,CZ
3561095168,3561103359,DE
3561103360,3561111551,UA
-3561111552,3561113855,LU
-3561113856,3561113856,EU
-3561113857,3561119743,LU
+3561111552,3561119743,LU
3561119744,3561127935,IT
3561127936,3561136127,DE
3561136128,3561144319,ES
@@ -162713,9 +85469,7 @@
3561185280,3561193471,GB
3561193472,3561201663,PL
3561201664,3561209855,NL
-3561209856,3561214975,GB
-3561214976,3561215231,ES
-3561215232,3561218047,GB
+3561209856,3561218047,GB
3561218048,3561226239,AT
3561226240,3561234431,FI
3561234432,3561242623,TR
@@ -162733,167 +85487,52 @@
3561357312,3561365503,DK
3561365504,3561373695,SA
3561373696,3561381887,GB
-3561381888,3561382479,AT
-3561382480,3561382495,DE
-3561382496,3561390079,AT
-3561390080,3561395455,BG
-3561395456,3561395711,GR
-3561395712,3561398271,BG
+3561381888,3561390079,AT
+3561390080,3561398271,BG
3561398272,3561406463,LV
3561406464,3561414655,GR
3561414656,3561422847,IT
-3561422848,3561427207,BE
-3561427208,3561427211,NL
-3561427212,3561428135,BE
-3561428136,3561428143,NL
-3561428144,3561429279,BE
-3561429280,3561429287,NL
-3561429288,3561431039,BE
+3561422848,3561431039,BE
3561431040,3561439231,SA
3561439232,3561447423,NO
3561447424,3561455615,CH
-3561455616,3561471231,CZ
-3561471232,3561471295,PL
-3561471296,3561471999,CZ
+3561455616,3561471999,CZ
3561472000,3561480191,DE
3561480192,3561488383,GB
3561488384,3561496575,OM
-3561496576,3561496831,NL
-3561496832,3561496887,GB
-3561496888,3561496891,NL
-3561496892,3561496955,GB
-3561496956,3561496959,NL
-3561496960,3561497087,GB
-3561497088,3561497423,NL
-3561497424,3561497471,GB
-3561497472,3561497535,NL
-3561497536,3561497599,GB
-3561497600,3561498239,NL
-3561498240,3561498399,GB
-3561498400,3561498431,NL
-3561498432,3561498487,GB
-3561498488,3561498491,NL
-3561498492,3561498495,GB
-3561498496,3561498559,NL
-3561498560,3561498607,GB
-3561498608,3561498615,NL
-3561498616,3561498623,GB
-3561498624,3561500703,NL
-3561500704,3561500719,GB
-3561500720,3561500751,NL
-3561500752,3561500763,GB
-3561500764,3561500767,NL
-3561500768,3561500775,GB
-3561500776,3561501311,NL
-3561501312,3561501343,GB
-3561501344,3561501375,NL
-3561501376,3561501407,GB
-3561501408,3561501443,NL
-3561501444,3561501487,GB
-3561501488,3561501503,NL
-3561501504,3561501535,GB
-3561501536,3561501631,NL
-3561501632,3561501695,GB
-3561501696,3561502047,NL
-3561502048,3561502079,GB
-3561502080,3561502143,NL
-3561502144,3561502207,GB
-3561502208,3561502631,NL
-3561502632,3561502655,GB
-3561502656,3561504287,NL
-3561504288,3561504383,GB
-3561504384,3561504767,NL
+3561496576,3561502719,GB
+3561502720,3561503743,NL
+3561503744,3561504767,GB
3561504768,3561512959,DE
3561512960,3561521151,SI
3561521152,3561529343,GE
-3561529344,3561534559,DE
-3561534560,3561534575,US
-3561534576,3561537535,DE
+3561529344,3561537535,DE
3561537536,3561545727,BG
3561545728,3561553919,NL
3561553920,3561562111,SE
3561562112,3561570303,ES
3561570304,3561578495,AM
3561578496,3561586687,RU
-3561586688,3561590591,BG
-3561590592,3561590623,CY
-3561590624,3561594879,BG
-3561594880,3561594935,SE
-3561594936,3561594939,DK
-3561594940,3561594975,SE
-3561594976,3561595007,DK
-3561595008,3561603071,SE
-3561603072,3561603263,FR
-3561603264,3561603295,GB
-3561603296,3561604911,FR
-3561604912,3561604927,GB
-3561604928,3561604959,FR
-3561604960,3561605119,GB
-3561605120,3561607231,FR
-3561607232,3561607235,GB
-3561607236,3561607239,FR
-3561607240,3561607247,GB
-3561607248,3561607343,FR
-3561607344,3561607359,GB
-3561607360,3561607679,FR
-3561607680,3561607711,GB
-3561607712,3561610239,FR
-3561610240,3561610495,US
-3561610496,3561610497,FR
-3561610498,3561610511,GB
-3561610512,3561610527,FR
-3561610528,3561610559,GB
-3561610560,3561610663,FR
-3561610664,3561610671,GB
-3561610672,3561611311,FR
-3561611312,3561611327,GB
-3561611328,3561611391,FR
-3561611392,3561611519,GB
-3561611520,3561612415,FR
-3561612416,3561613311,GB
-3561613312,3561613319,FR
-3561613320,3561613343,GB
-3561613344,3561613407,FR
-3561613408,3561613439,GB
-3561613440,3561613471,FR
-3561613472,3561613503,GB
-3561613504,3561613567,FR
-3561613568,3561614175,GB
-3561614176,3561614199,FR
-3561614200,3561614335,GB
-3561614336,3561614847,FR
-3561614848,3561615359,GB
-3561615360,3561615615,FR
-3561615616,3561615871,IT
-3561615872,3561616639,FR
-3561616640,3561616767,GB
-3561616768,3561616959,FR
-3561616960,3561617151,GB
-3561617152,3561617407,FR
-3561617408,3561617663,FI
-3561617664,3561617919,LU
-3561617920,3561618175,SE
-3561618176,3561618431,IE
-3561618432,3561618687,DK
-3561618688,3561618815,FR
-3561618816,3561618943,PL
+3561586688,3561594879,BG
+3561594880,3561603071,SE
+3561603072,3561604351,GB
+3561604352,3561604607,FR
+3561604608,3561607391,GB
+3561607392,3561607423,FR
+3561607424,3561609215,GB
+3561609216,3561609471,FR
+3561609472,3561616639,GB
+3561616640,3561616895,FR
+3561616896,3561618943,GB
3561618944,3561619455,ES
-3561619456,3561640575,GB
-3561640576,3561640831,FR
-3561640832,3561641450,GB
+3561619456,3561641450,GB
3561641451,3561641451,FR
3561641452,3561652223,GB
3561652224,3561668607,CH
-3561668608,3561679359,RU
-3561679360,3561679615,UA
-3561679616,3561684991,RU
+3561668608,3561684991,RU
3561684992,3561693183,BG
-3561693184,3561694487,DE
-3561694488,3561694495,CH
-3561694496,3561701375,DE
-3561701376,3561706031,SE
-3561706032,3561706047,DK
-3561706048,3561709567,SE
+3561693184,3561701375,DE
+3561701376,3561709567,SE
3561709568,3561717759,PL
3561717760,3561725951,RU
3561725952,3561734143,ES
@@ -162904,11 +85543,14 @@
3561775104,3561783295,IL
3561783296,3561799679,RU
3561799680,3561807871,DE
-3561807872,3561815295,BE
-3561815296,3561815551,LU
-3561815552,3561816063,BE
-3561816064,3561823999,VA
-3561824000,3561824255,IT
+3561807872,3561808895,BE
+3561808896,3561809151,LU
+3561809152,3561814271,BE
+3561814272,3561814527,LU
+3561814528,3561815039,BE
+3561815040,3561815295,LU
+3561815296,3561816063,BE
+3561816064,3561824255,VA
3561824256,3561832447,LI
3561832448,3561840639,IT
3561840640,3561848831,PL
@@ -162919,108 +85561,27 @@
3561881600,3561889791,IT
3561889792,3561897983,FR
3561897984,3561906175,GB
-3561906176,3561907759,DE
-3561907760,3561907763,GB
-3561907764,3561909891,DE
-3561909892,3561909895,GB
-3561909896,3561910207,DE
-3561910208,3561910223,GB
-3561910224,3561914367,DE
+3561906176,3561914367,DE
3561914368,3561922559,ES
-3561922560,3561922815,NL
-3561922816,3561922847,GB
-3561922848,3561922863,NL
-3561922864,3561922871,FR
-3561922872,3561922927,GB
-3561922928,3561922943,NL
-3561922944,3561922991,GB
-3561922992,3561923015,NL
-3561923016,3561923063,GB
-3561923064,3561923067,NL
-3561923068,3561923071,GB
-3561923072,3561923327,NL
-3561923328,3561923403,GB
-3561923404,3561923407,NL
-3561923408,3561923423,GB
-3561923424,3561923519,NL
-3561923520,3561923535,GB
-3561923536,3561923551,NL
-3561923552,3561923647,GB
-3561923648,3561923679,NL
-3561923680,3561923839,GB
-3561923840,3561924175,NL
-3561924176,3561924183,GB
-3561924184,3561924215,NL
-3561924216,3561924223,GB
-3561924224,3561924351,NL
-3561924352,3561924607,GB
-3561924608,3561924631,NL
-3561924632,3561924655,GB
-3561924656,3561924663,NL
-3561924664,3561924679,GB
-3561924680,3561924687,NL
-3561924688,3561924703,GB
-3561924704,3561924719,NL
-3561924720,3561924895,GB
-3561924896,3561924903,FR
-3561924904,3561924911,GB
-3561924912,3561924927,NL
-3561924928,3561924943,GB
-3561924944,3561925039,NL
-3561925040,3561925103,GB
-3561925104,3561925631,NL
-3561925632,3561926943,GB
-3561926944,3561926975,NL
-3561926976,3561926983,GB
-3561926984,3561926999,NL
-3561927000,3561927015,GB
-3561927016,3561927039,NL
-3561927040,3561927103,GB
-3561927104,3561927167,NL
-3561927168,3561927551,GB
-3561927552,3561929727,NL
-3561929728,3561929791,GB
-3561929792,3561929823,NL
-3561929824,3561929855,CH
-3561929856,3561929879,GB
-3561929880,3561929903,NL
-3561929904,3561929967,GB
-3561929968,3561930239,NL
-3561930240,3561930495,GB
-3561930496,3561930511,NL
-3561930512,3561930519,BE
-3561930520,3561930527,FR
-3561930528,3561930535,CH
-3561930536,3561930543,GB
-3561930544,3561930551,FR
-3561930552,3561930575,NL
-3561930576,3561930583,DE
-3561930584,3561930599,NL
-3561930600,3561930615,GB
-3561930616,3561930671,NL
-3561930672,3561930679,GB
-3561930680,3561930719,NL
-3561930720,3561930727,GB
-3561930728,3561938943,NL
-3561938944,3561939832,IE
-3561939833,3561939835,GB
-3561939836,3561940991,IE
+3561922560,3561925023,GB
+3561925024,3561925039,NL
+3561925040,3561925343,GB
+3561925344,3561925375,NL
+3561925376,3561929967,GB
+3561929968,3561929983,NL
+3561929984,3561930751,GB
+3561930752,3561938943,NL
+3561938944,3561940991,IE
3561940992,3561942015,GB
-3561942016,3561942847,IE
-3561942848,3561942911,GB
-3561942912,3561947135,IE
+3561942016,3561947135,IE
3561947136,3561963519,DE
3561963520,3561971711,BE
3561971712,3561975807,CZ
3561975808,3561979903,UA
3561979904,3561988095,ES
3561988096,3562004479,DE
-3562004480,3562010495,NL
-3562010496,3562010623,DE
-3562010624,3562012671,NL
-3562012672,3562020095,IR
-3562020096,3562020351,AE
-3562020352,3562020863,IR
+3562004480,3562012671,NL
+3562012672,3562020863,IR
3562020864,3562029055,UA
3562029056,3562037247,CZ
3562037248,3562045439,CH
@@ -163035,54 +85596,23 @@
3562057472,3562057727,DE
3562057728,3562057975,ES
3562057976,3562057983,FR
-3562057984,3562058303,ES
-3562058304,3562058367,IT
-3562058368,3562059327,ES
+3562057984,3562059327,ES
3562059328,3562059335,CH
3562059336,3562059391,ES
-3562059392,3562059775,CH
-3562059776,3562061823,ES
-3562061824,3562070015,IT
+3562059392,3562059519,CH
+3562059520,3562061823,ES
3562070016,3562078207,DE
3562078208,3562086399,SK
3562086400,3562087423,SE
3562087424,3562088447,GB
3562088448,3562094591,SE
-3562094592,3562095607,GB
-3562095608,3562095615,FR
-3562095616,3562096063,GB
-3562096064,3562096127,FR
-3562096128,3562098367,GB
-3562098368,3562098375,FR
-3562098376,3562101471,GB
-3562101472,3562101479,FR
-3562101480,3562101631,GB
-3562101632,3562101639,FR
-3562101640,3562104991,GB
-3562104992,3562104999,FR
-3562105000,3562105599,GB
-3562105600,3562105855,FR
-3562105856,3562106879,GB
-3562106880,3562107135,FR
-3562107136,3562107231,GB
-3562107232,3562107263,FR
-3562107264,3562107519,GB
-3562107520,3562107583,FR
-3562107584,3562108959,GB
-3562108960,3562108975,FR
-3562108976,3562109567,GB
-3562109568,3562109583,FR
-3562109584,3562110399,GB
-3562110400,3562110431,FR
-3562110432,3562110463,GB
-3562110464,3562110719,FR
-3562110720,3562110975,GB
+3562094592,3562106879,GB
+3562106880,3562106911,FR
+3562106912,3562110975,GB
3562110976,3562143743,ES
3562143744,3562151935,GB
3562151936,3562160127,DE
-3562160128,3562161151,GB
-3562161152,3562161183,NL
-3562161184,3562169343,GB
+3562160128,3562169343,GB
3562169344,3562170367,CH
3562170368,3562172415,IE
3562172416,3562173951,CH
@@ -163093,32 +85623,18 @@
3562192896,3562201087,UA
3562201088,3562209279,DE
3562209280,3562217471,RU
-3562217472,3562221311,DE
-3562221312,3562221567,CH
-3562221568,3562225151,DE
-3562225152,3562225159,CH
-3562225160,3562225663,DE
+3562217472,3562225663,DE
3562225664,3562233855,NL
3562233856,3562242047,FI
3562242048,3562258431,FR
-3562258432,3562263975,NL
-3562263976,3562263983,BE
-3562263984,3562283007,NL
+3562258432,3562283007,NL
3562283008,3562285055,IT
3562285056,3562287103,IE
3562287104,3562289151,IT
3562289152,3562291199,FR
3562291200,3562307583,GB
3562307584,3562315775,NL
-3562315776,3562321231,GB
-3562321232,3562321239,BE
-3562321240,3562322743,GB
-3562322744,3562322751,GG
-3562322752,3562323135,GB
-3562323136,3562323143,BE
-3562323144,3562323951,GB
-3562323952,3562323959,GG
-3562323960,3562323967,GB
+3562315776,3562323967,GB
3562323968,3562340351,DE
3562340352,3562348543,GB
3562348544,3562356735,ES
@@ -163126,12 +85642,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
@@ -163144,20 +85655,19 @@
3562487808,3562495999,GB
3562496000,3562504191,BE
3562504192,3562512383,DE
-3562512384,3562520575,UA
+3562512384,3562519551,UA
+3562519552,3562520575,BG
3562528768,3562536959,PL
3562536960,3562545151,AT
3562545152,3562553343,GB
3562553344,3562561535,DK
3562561536,3562569727,UG
-3562569728,3562577919,DE
+3562569728,3562572543,DE
+3562572544,3562572799,LU
+3562572800,3562577919,DE
3562577920,3562586111,AT
3562586112,3562594303,DE
-3562594304,3562595423,BE
-3562595424,3562595455,LU
-3562595456,3562598207,BE
-3562598208,3562598223,LU
-3562598224,3562602495,BE
+3562594304,3562602495,BE
3562602496,3562610687,ES
3562610688,3562618879,NO
3562618880,3562627071,GB
@@ -163168,22 +85678,17 @@
3562668032,3562676223,IT
3562676224,3562684415,UA
3562684416,3562692607,FI
-3562692608,3562700799,UA
3562700800,3562708991,DE
3562708992,3562717183,UA
3562717184,3562725375,CH
3562725376,3562733567,CZ
-3562733568,3562738695,PL
-3562738696,3562738703,IT
-3562738704,3562741759,PL
+3562733568,3562741759,PL
3562741760,3562758143,IT
3562758144,3562766335,HR
3562766336,3562774527,SE
3562774528,3562782719,BG
3562782720,3562790911,RU
-3562790912,3562797951,DE
-3562797952,3562797967,CH
-3562797968,3562799103,DE
+3562790912,3562799103,DE
3562799104,3562807295,HU
3562807296,3562815487,ES
3562815488,3562823679,NL
@@ -163205,27 +85710,11 @@
3562971136,3562987519,FR
3562987520,3562995711,DE
3562995712,3563003903,AT
-3563003904,3563005183,DE
-3563005184,3563005311,KZ
-3563005312,3563005439,DE
-3563005440,3563005695,TR
-3563005696,3563005951,DE
-3563005952,3563006463,TR
-3563006464,3563006591,DE
-3563006592,3563006719,CA
-3563006720,3563007487,DE
-3563007488,3563007999,TR
-3563008000,3563008255,DE
+3563003904,3563008255,DE
3563008256,3563008511,PL
-3563008512,3563009279,DE
-3563009280,3563009535,LT
-3563009536,3563009791,DE
-3563009792,3563010047,HK
-3563010048,3563010815,DE
+3563008512,3563010815,DE
3563010816,3563011071,PL
-3563011072,3563011583,DE
-3563011584,3563011839,ES
-3563011840,3563012095,DE
+3563011072,3563012095,DE
3563012096,3563020287,FR
3563020288,3563028479,DE
3563028480,3563036671,IR
@@ -163237,20 +85726,9 @@
3563067392,3563068415,MZ
3563068416,3563069439,NG
3563069440,3563077631,HU
-3563077632,3563079679,KZ
-3563079680,3563085823,SE
+3563077632,3563085823,KZ
3563085824,3563094015,RU
-3563094016,3563096255,DE
-3563096256,3563096287,GB
-3563096288,3563097087,DE
-3563097088,3563097119,GB
-3563097120,3563097151,DE
-3563097152,3563097183,GB
-3563097184,3563097215,DE
-3563097216,3563097247,GB
-3563097248,3563097311,DE
-3563097312,3563097343,GB
-3563097344,3563102207,DE
+3563094016,3563102207,DE
3563102208,3563110399,CZ
3563110400,3563118591,RU
3563118592,3563126783,PL
@@ -163258,42 +85736,30 @@
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
3563200512,3563208703,CH
-3563208704,3563210751,DK
-3563210752,3563211007,DE
-3563211008,3563211639,DK
-3563211640,3563211647,DE
-3563211648,3563212799,DK
-3563212800,3563212807,DE
-3563212808,3563212847,DK
-3563212848,3563212895,GB
-3563212896,3563220123,DK
-3563220124,3563220127,A2
-3563220128,3563225087,DK
+3563208704,3563225087,DK
3563225088,3563233279,LB
3563233280,3563241471,BY
3563241472,3563257855,TR
-3563257856,3563290623,FR
+3563257856,3563268351,FR
+3563268352,3563268607,BE
+3563268608,3563290623,FR
3563290624,3563315199,DE
3563315200,3563323391,DK
-3563323392,3563329791,GB
-3563329792,3563331583,EU
+3563323648,3563329791,GB
3563331584,3563339775,DE
3563339776,3563347967,NG
-3563347968,3563356159,GB
+3563347968,3563348991,GB
+3563348992,3563353087,FI
+3563353088,3563356159,GB
3563356160,3563364351,RU
3563364352,3563372543,BE
3563372544,3563380735,SA
-3563380736,3563382583,GB
-3563382584,3563382587,AT
-3563382588,3563382589,DE
-3563382590,3563388927,GB
+3563380736,3563388927,GB
3563388928,3563397119,CH
3563397120,3563405311,DE
3563405312,3563407871,ES
@@ -163311,16 +85777,9 @@
3563503616,3563511807,GB
3563511808,3563519999,DE
3563520000,3563528191,FR
-3563528192,3563536383,DE
-3563536384,3563539087,CH
-3563539088,3563539095,US
-3563539096,3563539119,CH
-3563539120,3563539135,DE
-3563539136,3563544575,CH
+3563536384,3563544575,CH
3563544576,3563552767,RU
-3563552768,3563554727,SI
-3563554728,3563554735,DE
-3563554736,3563560959,SI
+3563552768,3563560959,SI
3563560960,3563569151,EG
3563569152,3563577343,IT
3563577344,3563585535,GB
@@ -163341,158 +85800,17 @@
3563741184,3563749375,GB
3563749376,3563765759,PL
3563765760,3563782143,ES
-3563782144,3563790335,GR
3563790336,3563798527,EE
-3563798528,3563800447,FR
-3563800448,3563800463,GB
-3563800464,3563800495,FR
-3563800496,3563800511,GB
-3563800512,3563800607,FR
-3563800608,3563800623,GB
-3563800624,3563800767,FR
-3563800768,3563800783,GB
-3563800784,3563800911,FR
-3563800912,3563800927,GB
-3563800928,3563800943,FR
-3563800944,3563800991,GB
-3563800992,3563801135,FR
-3563801136,3563801151,DE
-3563801152,3563801183,FR
-3563801184,3563801199,DE
-3563801200,3563801279,FR
-3563801280,3563801295,NL
-3563801296,3563801375,FR
-3563801376,3563801391,GB
-3563801392,3563801407,IT
-3563801408,3563801423,DE
-3563801424,3563801455,FR
-3563801456,3563801519,GB
-3563801520,3563801551,FR
-3563801552,3563801567,GB
-3563801568,3563801599,FR
-3563801600,3563801631,GB
-3563801632,3563801647,FR
-3563801648,3563801743,GB
-3563801744,3563801775,FR
-3563801776,3563801791,BE
-3563801792,3563801839,FR
-3563801840,3563801855,GB
-3563801856,3563801871,FR
-3563801872,3563801887,GB
-3563801888,3563801922,FR
-3563801923,3563801935,GB
-3563801936,3563802015,FR
-3563802016,3563802031,BE
-3563802032,3563802047,FR
-3563802048,3563802063,IT
-3563802064,3563802207,FR
-3563802208,3563802223,GB
-3563802224,3563802255,FR
-3563802256,3563802271,GB
-3563802272,3563802303,FR
-3563802304,3563802319,IT
-3563802320,3563802447,FR
-3563802448,3563802463,GB
-3563802464,3563802623,FR
-3563802624,3563802655,GB
-3563802656,3563802735,FR
-3563802736,3563802751,US
-3563802752,3563802783,GB
-3563802784,3563803007,FR
-3563803008,3563803023,GB
-3563803024,3563803039,FR
-3563803040,3563803055,GB
-3563803056,3563803119,FR
-3563803120,3563803135,NL
-3563803136,3563803151,FR
-3563803152,3563803167,GB
-3563803168,3563803183,FR
-3563803184,3563803215,GB
-3563803216,3563803247,FR
-3563803248,3563803263,GB
-3563803264,3563803279,FR
-3563803280,3563803295,GB
-3563803296,3563803311,FR
-3563803312,3563803327,GB
-3563803328,3563803359,FR
-3563803360,3563803423,GB
-3563803424,3563803439,FR
-3563803440,3563803455,DE
-3563803456,3563803487,GB
-3563803488,3563803503,US
-3563803504,3563803519,GB
-3563803520,3563803631,FR
-3563803632,3563803647,GB
-3563803648,3563803967,FR
-3563803968,3563803983,BE
-3563803984,3563804695,FR
-3563804696,3563804703,GB
-3563804704,3563804719,FR
-3563804720,3563804727,GB
-3563804728,3563806543,FR
-3563806544,3563806559,DE
-3563806560,3563806687,FR
-3563806688,3563806703,DE
-3563806704,3563806719,FR
+3563798528,3563806719,FR
3563806720,3563814911,SA
3563814912,3563823103,SE
3563823104,3563831295,DE
3563831296,3563847679,RU
-3563847680,3563848231,NL
-3563848232,3563848239,GB
-3563848240,3563848319,NL
-3563848320,3563848327,GB
-3563848328,3563848383,NL
-3563848384,3563848447,GB
-3563848448,3563848847,NL
-3563848848,3563848855,EU
-3563848856,3563848979,NL
-3563848980,3563848983,GB
-3563848984,3563848987,NL
-3563848988,3563848991,GB
-3563848992,3563849151,NL
-3563849152,3563849183,GB
-3563849184,3563849207,NL
-3563849208,3563849727,GB
-3563849728,3563849999,NL
-3563850000,3563850007,FI
-3563850008,3563850239,NL
-3563850240,3563850751,GB
-3563850752,3563851007,NL
-3563851008,3563851135,GB
-3563851136,3563852031,NL
-3563852032,3563852071,GB
-3563852072,3563852079,NL
-3563852080,3563852095,GB
-3563852096,3563852191,NL
-3563852192,3563852207,GB
-3563852208,3563852216,NL
-3563852217,3563852223,GB
-3563852224,3563852543,NL
-3563852544,3563853311,GB
-3563853312,3563853315,NL
-3563853316,3563853319,GB
-3563853320,3563853567,NL
-3563853568,3563854079,GB
-3563854080,3563854095,NL
-3563854096,3563854103,GB
-3563854104,3563854143,NL
-3563854144,3563854175,GB
-3563854176,3563854191,NL
-3563854192,3563854207,GB
-3563854208,3563854215,NL
-3563854216,3563854223,GB
-3563854224,3563854259,NL
-3563854260,3563854263,GB
-3563854264,3563854271,NL
-3563854272,3563854591,GB
-3563854592,3563854847,NL
-3563854848,3563855359,GB
-3563855360,3563855487,NL
-3563855488,3563855551,GB
-3563855552,3563855583,NL
-3563855584,3563855615,GB
-3563855616,3563855871,US
+3563847680,3563848447,NL
+3563848448,3563848703,ES
+3563848704,3563848847,NL
+3563848848,3563848855,ES
+3563848856,3563855871,NL
3563855872,3563864063,AT
3563864064,3563872255,GB
3563872256,3563880447,RU
@@ -163500,11 +85818,7 @@
3563884652,3563884652,TR
3563884653,3563888639,CY
3563888640,3563896831,DE
-3563896832,3563899903,HU
-3563899904,3563900159,SK
-3563900160,3563900415,HU
-3563900416,3563900671,SK
-3563900672,3563913215,HU
+3563896832,3563913215,HU
3563913216,3563921407,RU
3563921408,3563929599,UA
3563929600,3563937791,CH
@@ -163516,119 +85830,43 @@
3563970560,3563978751,TR
3563978752,3563995135,IT
3563995136,3564003327,MK
-3564003328,3564008191,DE
-3564008192,3564008223,CH
-3564008224,3564011519,DE
+3564003328,3564011519,DE
3564011520,3564019711,UA
-3564019712,3564021247,GB
-3564021248,3564021279,IT
-3564021280,3564022687,GB
-3564022688,3564022719,RU
-3564022720,3564024095,GB
-3564024096,3564024103,IT
-3564024104,3564024135,GB
-3564024136,3564024143,IT
-3564024144,3564024191,GB
-3564024192,3564024207,IT
-3564024208,3564024639,GB
-3564024640,3564024671,IT
-3564024672,3564027903,GB
-3564027904,3564036351,DE
-3564036352,3564039423,A2
-3564039424,3564039679,DE
-3564039680,3564041215,A2
-3564041216,3564041727,RU
-3564041728,3564043263,A2
-3564043264,3564043519,DE
-3564043520,3564044287,A2
+3564019712,3564023807,GB
+3564023808,3564024831,IT
+3564024832,3564027903,GB
+3564027904,3564044287,DE
3564044288,3564052479,CZ
3564052480,3564060671,GB
3564060672,3564068863,RU
3564068864,3564077055,ES
3564077056,3564093439,GB
3564093440,3564101631,UA
-3564101632,3564103743,DE
-3564103744,3564103759,A2
-3564103760,3564109823,DE
+3564101632,3564109823,DE
3564109824,3564126207,SE
-3564126208,3564128287,IT
-3564128288,3564128303,BG
-3564128304,3564129727,IT
+3564126208,3564129727,IT
3564129728,3564129743,PH
-3564129744,3564130655,IT
-3564130656,3564130671,IN
-3564130672,3564134399,IT
-3564134400,3564141055,KG
-3564141056,3564141311,US
-3564141312,3564142591,KG
-3564142592,3564146175,DE
-3564146176,3564150783,DK
-3564150784,3564152607,SE
-3564152608,3564152639,NO
-3564152640,3564153087,SE
-3564153088,3564153151,NO
-3564153152,3564153183,SE
-3564153184,3564153343,NO
-3564153344,3564155151,SE
-3564155152,3564155159,NO
-3564155160,3564156415,SE
-3564156416,3564156419,NO
-3564156420,3564156919,SE
-3564156920,3564156927,FI
-3564156928,3564157207,SE
-3564157208,3564157215,NO
-3564157216,3564158831,SE
+3564129744,3564134399,IT
+3564134400,3564142591,KG
+3564142592,3564150783,DK
+3564150784,3564158831,SE
3564158832,3564158839,FI
3564158840,3564158975,SE
-3564158976,3564161855,DE
-3564161856,3564161891,NL
-3564161892,3564165119,DE
-3564165120,3564165439,NL
-3564165440,3564175359,DE
+3564158976,3564175359,DE
3564175360,3564183551,GB
-3564183552,3564185087,UA
-3564185088,3564185160,DE
-3564185161,3564185161,UA
-3564185162,3564185343,DE
-3564185344,3564191743,UA
+3564183552,3564191743,UA
3564191744,3564199935,BE
3564199936,3564208127,RU
-3564208128,3564212735,GB
-3564212736,3564213007,IE
-3564213008,3564216319,GB
+3564208128,3564216319,GB
3564216320,3564224511,PT
3564224512,3564232703,GB
-3564232704,3564240895,RU
-3564240896,3564241407,TJ
-3564241408,3564249087,RU
-3564249088,3564260735,DE
-3564260736,3564260863,NL
-3564260864,3564265471,DE
+3564232704,3564249087,RU
+3564249088,3564265471,DE
3564265472,3564273663,NL
-3564273664,3564302655,DE
-3564302656,3564302687,BE
-3564302688,3564306431,DE
+3564273664,3564306431,DE
3564306432,3564314623,TR
-3564314624,3564322815,GB
3564322816,3564331007,IT
-3564331008,3564339199,ES
-3564339200,3564339991,GB
-3564339992,3564339999,NL
-3564340000,3564344031,GB
-3564344032,3564344047,NL
-3564344048,3564344207,GB
-3564344208,3564344215,NL
-3564344216,3564345143,GB
-3564345144,3564345151,NL
-3564345152,3564349615,GB
-3564349616,3564349631,NL
-3564349632,3564350399,GB
-3564350400,3564350431,NL
-3564350432,3564351551,GB
-3564351552,3564351615,NL
-3564351616,3564353207,GB
-3564353208,3564353215,NL
-3564353216,3564355583,GB
+3564339200,3564355583,GB
3564355584,3564363775,NL
3564363776,3564371967,UA
3564371968,3564380159,DE
@@ -163637,12 +85875,8 @@
3564396544,3564404735,RU
3564404736,3564412927,BG
3564412928,3564421119,IL
-3564421120,3564428185,SA
-3564428186,3564428186,A2
-3564428187,3564429311,SA
-3564429312,3564431567,KZ
-3564431568,3564431583,AF
-3564431584,3564437503,KZ
+3564421120,3564429311,SA
+3564429312,3564437503,KZ
3564437504,3564445695,LT
3564445696,3564453887,BG
3564453888,3564462079,DE
@@ -163650,169 +85884,18 @@
3564470272,3564478463,IL
3564478464,3564486655,LU
3564486656,3564494847,CH
-3564494848,3564494907,GB
-3564494908,3564494911,FR
-3564494912,3564495103,GB
-3564495104,3564495167,DE
-3564495168,3564495203,GB
-3564495204,3564495615,EU
-3564495616,3564495743,GB
-3564495744,3564495871,EU
-3564495872,3564495927,GB
-3564495928,3564495935,EU
-3564495936,3564496111,GB
-3564496112,3564496127,EU
-3564496128,3564496175,GB
-3564496176,3564496183,EU
-3564496184,3564496199,GB
-3564496200,3564496207,EU
-3564496208,3564496215,GB
-3564496216,3564496223,EU
-3564496224,3564496263,GB
-3564496264,3564496271,EU
-3564496272,3564496319,GB
-3564496320,3564496327,FR
-3564496328,3564496335,EU
-3564496336,3564496607,GB
-3564496608,3564496639,EU
-3564496640,3564496655,GB
-3564496656,3564496671,EU
-3564496672,3564496847,GB
-3564496848,3564496863,FR
-3564496864,3564496895,GB
-3564496896,3564498943,EU
-3564498944,3564499007,NL
-3564499008,3564499055,GB
-3564499056,3564499199,EU
-3564499200,3564499215,NL
-3564499216,3564499231,DK
-3564499232,3564499239,NL
-3564499240,3564499247,EU
-3564499248,3564499335,GB
-3564499336,3564499455,EU
-3564499456,3564499551,NL
-3564499552,3564499711,GB
-3564499712,3564500991,EU
-3564500992,3564500999,SE
-3564501000,3564501247,EU
-3564501248,3564501263,DE
-3564501264,3564501279,SE
-3564501280,3564501311,GB
-3564501312,3564501503,EU
-3564501504,3564501507,SE
-3564501508,3564501511,DE
-3564501512,3564501759,EU
-3564501760,3564501887,DE
-3564501888,3564502527,EU
-3564502528,3564502559,DE
-3564502560,3564502591,GB
-3564502592,3564503039,EU
3564503040,3564511231,JO
3564511232,3564519423,RU
3564519424,3564527615,SI
3564527616,3564543999,SA
3564544000,3564560383,DE
-3564560384,3564560531,GB
-3564560532,3564560532,EU
-3564560533,3564560895,GB
-3564560896,3564560911,US
-3564560912,3564561151,GB
-3564561152,3564561407,US
-3564561408,3564561663,GB
-3564561664,3564561671,US
-3564561672,3564561679,GB
-3564561680,3564561687,US
-3564561688,3564561695,GB
-3564561696,3564561791,US
-3564561792,3564561855,GB
-3564561856,3564561919,US
-3564561920,3564562431,CH
-3564562432,3564562687,GB
-3564562688,3564562831,US
-3564562832,3564562847,GB
-3564562848,3564562943,US
-3564562944,3564563711,GB
-3564563712,3564563967,GB
-3564563968,3564564223,GB
-3564564224,3564564239,US
-3564564240,3564564351,GB
-3564564352,3564564415,US
-3564564416,3564564419,GB
-3564564420,3564564427,US
-3564564428,3564564447,GB
-3564564448,3564564479,US
-3564564480,3564565247,GB
-3564565248,3564565279,US
-3564565280,3564565327,GB
-3564565328,3564565384,US
-3564565385,3564565385,GB
-3564565386,3564565439,US
-3564565440,3564565567,GB
-3564565568,3564565631,US
-3564565632,3564565663,GB
-3564565664,3564565679,US
-3564565680,3564565695,GB
-3564565696,3564565711,US
-3564565712,3564565727,GB
-3564565728,3564565759,US
-3564565760,3564566047,GB
-3564566048,3564566079,US
-3564566080,3564566143,GB
-3564566144,3564566175,US
-3564566176,3564566239,GB
-3564566240,3564566527,US
-3564566528,3564567047,GB
-3564567048,3564567055,US
-3564567056,3564567079,GB
-3564567080,3564567095,US
-3564567096,3564567143,GB
-3564567144,3564567151,US
-3564567152,3564567183,GB
-3564567184,3564567199,US
-3564567200,3564567247,GB
-3564567248,3564567255,US
-3564567256,3564567295,GB
-3564567296,3564567551,US
-3564567552,3564567807,GB
-3564567808,3564567935,US
-3564567936,3564568039,GB
-3564568040,3564568063,US
-3564568064,3564568223,GB
-3564568224,3564568231,US
-3564568232,3564568255,GB
-3564568256,3564568319,US
-3564568320,3564571055,GB
-3564571056,3564571071,DE
-3564571072,3564571391,GB
-3564571392,3564571455,FR
-3564571456,3564571479,GB
-3564571480,3564571487,FR
-3564571488,3564571511,GB
-3564571512,3564571519,FR
-3564571520,3564571567,GB
-3564571568,3564571583,FR
-3564571584,3564571591,GB
-3564571592,3564571599,FR
-3564571600,3564571647,GB
-3564571648,3564571679,DE
-3564571680,3564571775,GB
-3564571776,3564571823,DE
-3564571824,3564571839,GB
-3564571840,3564571903,DE
-3564571904,3564572415,GB
-3564572416,3564572427,DE
+3564560384,3564571695,GB
+3564571696,3564571703,DE
+3564571704,3564572427,GB
3564572428,3564572431,ES
-3564572432,3564572543,DE
-3564572544,3564573183,GB
-3564573184,3564573311,FR
-3564573312,3564573695,GB
-3564573696,3564574079,DE
-3564574080,3564574975,GB
-3564574976,3564575231,DE
-3564575232,3564575487,GB
-3564575488,3564575615,DE
-3564575616,3564576767,GB
-3564576768,3564584959,RU
+3564572432,3564572527,GB
+3564572528,3564572531,DK
+3564572532,3564576767,GB
3564584960,3564593151,SA
3564593152,3564601343,RU
3564601344,3564609535,EE
@@ -163820,80 +85903,26 @@
3564634112,3564642303,MK
3564642304,3564650495,CH
3564650496,3564666879,NL
-3564666880,3564668927,IE
-3564668928,3564669183,EU
-3564669184,3564669407,IE
-3564669408,3564669439,GB
-3564669440,3564670207,IE
-3564670208,3564670239,GB
-3564670240,3564673023,IE
-3564673024,3564673055,GB
-3564673056,3564673135,IE
-3564673136,3564673215,GB
-3564673216,3564673535,IE
-3564673536,3564673663,GB
-3564673664,3564673791,IE
-3564673792,3564673807,GB
-3564673808,3564673823,IE
-3564673824,3564673839,GB
-3564673840,3564674047,IE
-3564674048,3564674431,GB
-3564674432,3564675071,IE
+3564666880,3564675071,IE
3564675072,3564683263,RU
3564683264,3564691455,IR
3564691456,3564699647,GI
3564699648,3564716031,GB
3564716032,3564724223,IT
3564724224,3564732415,NL
-3564732416,3564733183,DE
-3564733184,3564733439,GB
-3564733440,3564734207,DE
-3564734208,3564734463,EU
-3564734464,3564734815,DE
-3564734816,3564734823,GB
-3564734824,3564734847,DE
-3564734848,3564734975,GB
-3564734976,3564736511,DE
-3564736512,3564736527,GB
-3564736528,3564736583,DE
-3564736584,3564736603,GB
-3564736604,3564736607,DE
-3564736608,3564736611,GB
-3564736612,3564736623,DE
-3564736624,3564736631,GB
-3564736632,3564736871,DE
-3564736872,3564736887,GB
-3564736888,3564736895,DE
-3564736896,3564736903,GB
-3564736904,3564736927,DE
-3564736928,3564736959,GB
-3564736960,3564736967,DE
-3564736968,3564736975,GB
-3564736976,3564736991,DE
-3564736992,3564737023,GB
-3564737024,3564739335,DE
-3564739336,3564739343,GB
-3564739344,3564739383,DE
-3564739384,3564739391,ES
-3564739392,3564739495,DE
-3564739496,3564739503,GB
-3564739504,3564739519,AT
-3564739520,3564739807,GB
-3564739808,3564739815,DE
-3564739816,3564739823,GB
-3564739824,3564740351,DE
-3564740352,3564740383,GB
-3564740384,3564740455,DE
-3564740456,3564740459,GB
-3564740460,3564740479,DE
-3564740480,3564740495,GB
-3564740496,3564740503,DE
-3564740504,3564740527,GB
-3564740528,3564740591,DE
-3564740592,3564740595,GB
-3564740596,3564740599,DE
-3564740600,3564740603,GB
-3564740604,3564740607,DE
+3564732416,3564733183,GB
+3564733184,3564733215,DE
+3564733216,3564734457,GB
+3564734458,3564734458,DE
+3564734459,3564734741,GB
+3564734742,3564734742,DE
+3564734743,3564734743,GB
+3564734744,3564734751,DE
+3564734752,3564736535,GB
+3564736536,3564736543,DE
+3564736544,3564739345,GB
+3564739346,3564739346,DE
+3564739347,3564740607,GB
3564740608,3564748799,FR
3564748800,3564756991,GB
3564756992,3564765183,ES
@@ -163905,452 +85934,73 @@
3564806144,3564814335,BG
3564814336,3564822527,PL
3564822528,3564830719,EG
-3564830720,3564831487,BE
-3564831488,3564831743,EU
-3564831744,3564832511,BE
-3564832512,3564832767,EU
-3564832768,3564838911,BE
+3564830720,3564838911,BE
3564838912,3564847103,DE
3564847104,3564855295,IT
-3564855296,3564862863,DE
-3564862864,3564862871,AE
-3564862872,3564863487,DE
-3564863488,3564880127,NL
-3564880128,3564880383,GB
-3564880384,3564880895,NL
-3564880896,3564880911,GB
-3564880912,3564880927,NL
-3564880928,3564880943,GB
-3564880944,3564880951,NL
-3564880952,3564880967,FR
-3564880968,3564880975,NL
-3564880976,3564881103,GB
-3564881104,3564881159,NL
-3564881160,3564881199,GB
-3564881200,3564881203,FR
-3564881204,3564881231,GB
-3564881232,3564881247,NL
-3564881248,3564881343,GB
-3564881344,3564881359,NL
-3564881360,3564881407,GB
-3564881408,3564881439,NL
-3564881440,3564881455,GB
-3564881456,3564881463,NL
-3564881464,3564881471,GB
-3564881472,3564881551,NL
-3564881552,3564881663,GB
-3564881664,3564881727,NL
-3564881728,3564881935,GB
-3564881936,3564881939,NL
-3564881940,3564881999,GB
-3564882000,3564882079,NL
-3564882080,3564882143,GB
-3564882144,3564882239,NL
-3564882240,3564882431,GB
-3564882432,3564882687,EU
-3564882688,3564883007,GB
-3564883008,3564883039,NL
-3564883040,3564883071,GB
-3564883072,3564883087,NL
-3564883088,3564883199,GB
-3564883200,3564883711,NL
-3564883712,3564884223,GB
-3564884224,3564884255,NL
-3564884256,3564884303,GB
-3564884304,3564884319,NL
-3564884320,3564884359,GB
-3564884360,3564884367,NL
-3564884368,3564884407,GB
-3564884408,3564884415,NL
-3564884416,3564884431,GB
-3564884432,3564884439,NL
-3564884440,3564884455,GB
-3564884456,3564884463,NL
-3564884464,3564884487,GB
-3564884488,3564884519,NL
-3564884520,3564884527,FR
-3564884528,3564884552,NL
-3564884553,3564884559,GB
-3564884560,3564884567,NL
-3564884568,3564884735,GB
-3564884736,3564885039,NL
-3564885040,3564885215,GB
-3564885216,3564885231,NL
-3564885232,3564885247,GB
-3564885248,3564885343,NL
-3564885344,3564885359,GB
-3564885360,3564885367,NL
-3564885368,3564885487,GB
-3564885488,3564885495,NL
-3564885496,3564885503,GB
-3564885504,3564885543,NL
-3564885544,3564885551,BE
-3564885552,3564885559,NL
-3564885560,3564885567,GB
-3564885568,3564885599,NL
-3564885600,3564885647,GB
-3564885648,3564885663,NL
-3564885664,3564885727,FR
-3564885728,3564885743,NL
-3564885744,3564885791,GB
-3564885792,3564885799,NL
-3564885800,3564885839,GB
-3564885840,3564885855,NL
-3564885856,3564885871,GB
-3564885872,3564885887,NL
-3564885888,3564885919,GB
-3564885920,3564885935,NL
-3564885936,3564885951,GB
-3564885952,3564885967,NL
-3564885968,3564885999,GB
-3564886000,3564886031,NL
-3564886032,3564886063,GB
-3564886064,3564886079,NL
-3564886080,3564886175,GB
-3564886176,3564886191,NL
-3564886192,3564886271,GB
-3564886272,3564886527,NL
-3564886528,3564886655,GB
-3564886656,3564886751,NL
-3564886752,3564887039,GB
-3564887040,3564888063,NL
-3564888064,3564888079,GB
-3564888080,3564888095,CH
-3564888096,3564888127,NL
-3564888128,3564888143,GB
-3564888144,3564888183,NL
-3564888184,3564888223,GB
-3564888224,3564888255,NL
-3564888256,3564888271,GB
-3564888272,3564888327,NL
-3564888328,3564888351,GB
-3564888352,3564888367,NL
-3564888368,3564888383,FR
-3564888384,3564888447,NL
-3564888448,3564888463,GB
-3564888464,3564888479,DE
-3564888480,3564888495,NL
-3564888496,3564888511,GB
-3564888512,3564888527,DE
-3564888528,3564888559,NL
-3564888560,3564888575,GB
-3564888576,3564888591,NL
-3564888592,3564888607,GB
-3564888608,3564888615,NL
-3564888616,3564888623,GB
-3564888624,3564888655,NL
-3564888656,3564888663,BE
-3564888664,3564888671,NL
-3564888672,3564888735,BE
-3564888736,3564888815,NL
-3564888816,3564888831,GB
-3564888832,3564888959,NL
-3564888960,3564889023,GB
-3564889024,3564889087,NL
-3564889088,3564889135,GB
-3564889136,3564889167,NL
-3564889168,3564889215,GB
-3564889216,3564889311,NL
-3564889312,3564889375,GB
-3564889376,3564889471,NL
-3564889472,3564889511,GB
-3564889512,3564889519,NL
-3564889520,3564889535,GB
-3564889536,3564889599,NL
-3564889600,3564889615,GB
-3564889616,3564889623,DE
-3564889624,3564889639,NL
-3564889640,3564889647,GB
-3564889648,3564889695,NL
-3564889696,3564889727,DE
-3564889728,3564889759,NL
-3564889760,3564889807,GB
-3564889808,3564889823,BE
-3564889824,3564889839,GB
-3564889840,3564889847,NL
-3564889848,3564889887,GB
-3564889888,3564889919,NL
-3564889920,3564889983,GB
-3564889984,3564890111,NL
-3564890112,3564890191,GB
-3564890192,3564890207,NL
-3564890208,3564890231,GB
-3564890232,3564890271,NL
-3564890272,3564890303,GB
-3564890304,3564890367,NL
-3564890368,3564890399,FR
-3564890400,3564890527,NL
-3564890528,3564890535,BE
-3564890536,3564890543,NL
-3564890544,3564890567,GB
-3564890568,3564890579,NL
-3564890580,3564890591,GB
-3564890592,3564890623,NL
-3564890624,3564890631,BE
-3564890632,3564890639,GB
-3564890640,3564890655,NL
-3564890656,3564890663,IE
-3564890664,3564890703,NL
-3564890704,3564890735,GB
-3564890736,3564890751,NL
-3564890752,3564890799,GB
-3564890800,3564890815,NL
-3564890816,3564890831,GB
-3564890832,3564890847,BE
-3564890848,3564890879,GB
-3564890880,3564890943,NL
-3564890944,3564890991,BE
-3564890992,3564891023,NL
-3564891024,3564891263,GB
-3564891264,3564891295,NL
-3564891296,3564891391,GB
-3564891392,3564891903,NL
-3564891904,3564892415,GB
-3564892416,3564892927,NL
-3564892928,3564893039,GB
-3564893040,3564893055,NL
-3564893056,3564893695,GB
-3564893696,3564893759,NL
-3564893760,3564894207,GB
+3564855296,3564863487,DE
+3564863488,3564879871,NL
+3564879872,3564879935,GB
+3564879936,3564879999,NL
+3564880000,3564880651,GB
+3564880652,3564880655,NL
+3564880656,3564880945,GB
+3564880946,3564880946,NL
+3564880947,3564882015,GB
+3564882016,3564882031,NL
+3564882032,3564883071,GB
+3564883072,3564883079,NL
+3564883080,3564883199,GB
+3564883200,3564883455,NL
+3564883456,3564886719,GB
+3564886720,3564886751,NL
+3564886752,3564889633,GB
+3564889634,3564889634,NL
+3564889635,3564892735,GB
+3564892736,3564892751,NL
+3564892752,3564894207,GB
3564894208,3564895743,NL
3564895744,3564896255,GB
3564896256,3564904447,RU
3564904448,3564912639,DE
3564912640,3564920831,BG
-3564920832,3564921855,DE
-3564921856,3564929023,US
+3564920832,3564922111,DE
+3564922112,3564929023,US
3564929024,3564937215,AT
-3564937216,3564945407,RS
-3564945408,3564947175,GB
-3564947176,3564947183,FR
-3564947184,3564948063,GB
-3564948064,3564948071,IE
-3564948072,3564948319,GB
-3564948320,3564948351,IE
-3564948352,3564953647,GB
-3564953648,3564953651,CH
-3564953652,3564953727,GB
-3564953728,3564953743,AT
-3564953744,3564953744,GB
-3564953745,3564953759,AT
-3564953760,3564953791,GB
-3564953792,3564953855,AT
-3564953856,3564954111,GB
-3564954112,3564954131,AT
-3564954132,3564954139,GB
-3564954140,3564954143,AT
-3564954144,3564954155,GB
-3564954156,3564954159,AT
-3564954160,3564954175,DE
-3564954176,3564954183,AT
-3564954184,3564954191,CH
-3564954192,3564954211,AT
-3564954212,3564954231,GB
-3564954232,3564954239,AT
-3564954240,3564954303,GB
-3564954304,3564954311,AT
-3564954312,3564954367,GB
-3564954368,3564954383,AT
-3564954384,3564954415,GB
-3564954416,3564954431,DE
-3564954432,3564956160,GB
-3564956161,3564956671,AT
-3564956672,3564956967,GB
-3564956968,3564956971,CH
-3564956972,3564956975,US
-3564956976,3564956979,GB
-3564956980,3564956991,AT
-3564956992,3564956999,GB
-3564957000,3564957007,AT
-3564957008,3564957023,GB
-3564957024,3564957039,AT
-3564957040,3564957087,GB
-3564957088,3564957255,AT
-3564957256,3564957263,GB
-3564957264,3564957439,AT
-3564957440,3564957447,GB
-3564957448,3564957455,CH
-3564957456,3564957459,AT
-3564957460,3564957471,GB
-3564957472,3564957499,AT
-3564957500,3564957503,GB
-3564957504,3564957507,AT
-3564957508,3564957511,GB
-3564957512,3564957519,AT
-3564957520,3564957527,GB
-3564957528,3564957531,AT
-3564957532,3564957547,GB
-3564957548,3564957551,AT
-3564957552,3564957559,GB
-3564957560,3564957591,AT
-3564957592,3564957595,GB
-3564957596,3564957599,AT
-3564957600,3564957607,GB
-3564957608,3564957615,AT
-3564957616,3564957619,GB
-3564957620,3564957631,AT
-3564957632,3564957663,GB
-3564957664,3564957671,AT
-3564957672,3564957679,GB
-3564957680,3564957695,AT
-3564957696,3564957855,GB
-3564957856,3564957859,ES
-3564957860,3564957863,AT
-3564957864,3564957867,IT
-3564957868,3564957871,AT
-3564957872,3564957891,GB
-3564957892,3564957903,AT
-3564957904,3564957911,GB
-3564957912,3564957919,AT
-3564957920,3564957951,GB
-3564957952,3564957967,AT
-3564957968,3564957987,GB
-3564957988,3564958015,AT
-3564958016,3564958111,GB
-3564958112,3564958143,AT
-3564958144,3564958147,GB
-3564958148,3564958155,AT
-3564958156,3564958159,GB
-3564958160,3564958179,AT
-3564958180,3564958183,US
-3564958184,3564958191,AT
-3564958192,3564958207,GB
-3564958208,3564958463,AT
-3564958464,3564958487,GB
-3564958488,3564958591,AT
-3564958592,3564958719,GB
-3564958720,3564958799,AT
-3564958800,3564958807,GB
-3564958808,3564958847,AT
-3564958848,3564958911,GB
-3564958912,3564958975,AT
-3564958976,3564959007,NL
-3564959008,3564959055,AT
-3564959056,3564959075,GB
-3564959076,3564959091,AT
-3564959092,3564959095,GB
-3564959096,3564959103,AT
-3564959104,3564959119,GB
-3564959120,3564959127,AT
-3564959128,3564959135,GB
-3564959136,3564959155,AT
-3564959156,3564959191,GB
-3564959192,3564959195,AT
-3564959196,3564959199,GB
-3564959200,3564959227,AT
-3564959228,3564959231,GB
-3564959232,3564959359,AT
-3564959360,3564959383,GB
-3564959384,3564959391,AT
-3564959392,3564959399,SA
-3564959400,3564959407,AT
-3564959408,3564959423,CH
-3564959424,3564959443,GB
-3564959444,3564959451,AT
-3564959452,3564959455,FR
-3564959456,3564959471,GB
-3564959472,3564959479,AT
-3564959480,3564959487,GB
-3564959488,3564959495,AT
-3564959496,3564959499,GB
-3564959500,3564959519,AT
-3564959520,3564959535,GB
-3564959536,3564959551,AT
-3564959552,3564959567,GB
-3564959568,3564959579,AT
-3564959580,3564959583,GB
-3564959584,3564959615,AT
-3564959616,3564959623,GB
-3564959624,3564959639,AT
-3564959640,3564959655,GB
-3564959656,3564959663,CH
-3564959664,3564959679,AT
-3564959680,3564959695,GB
-3564959696,3564959711,AT
-3564959712,3564959755,GB
-3564959756,3564959759,AT
-3564959760,3564959775,GB
-3564959776,3564959807,AT
-3564959808,3564959839,GB
-3564959840,3564959903,AT
-3564959904,3564959904,GB
-3564959905,3564959967,AT
-3564959968,3564959999,GB
-3564960000,3564960127,AT
-3564960128,3564960135,DE
-3564960136,3564960159,GB
-3564960160,3564960195,AT
-3564960196,3564960211,GB
-3564960212,3564960223,AT
-3564960224,3564960231,GB
-3564960232,3564960511,AT
-3564960512,3564960543,GB
-3564960544,3564960559,AT
-3564960560,3564960615,GB
-3564960616,3564960623,FR
-3564960624,3564960631,GB
-3564960632,3564960639,AT
-3564960640,3564960767,GB
-3564960768,3564960879,AT
-3564960880,3564960927,GB
-3564960928,3564960959,AT
-3564960960,3564960991,GB
-3564960992,3564961007,AT
-3564961008,3564961023,GB
-3564961024,3564961079,AT
-3564961080,3564961151,GB
-3564961152,3564961311,AT
-3564961312,3564961319,GB
-3564961320,3564961791,AT
+3564937216,3564945407,IT
+3564945408,3564953599,GB
+3564953600,3564954879,AT
+3564954880,3564955903,GB
+3564955904,3564956671,AT
+3564956672,3564956927,GB
+3564956928,3564960959,AT
+3564960960,3564960975,GB
+3564960976,3564961791,AT
3564961792,3564969983,TR
-3564969984,3564972607,DE
-3564972608,3564972623,AT
-3564972624,3564972631,DE
-3564972632,3564972639,LI
-3564972640,3564978175,DE
+3564969984,3564978175,DE
3564978176,3564986367,GB
3564986368,3564994559,DE
3564994560,3565002751,NL
-3565002752,3565007247,NO
-3565007248,3565007251,SE
-3565007252,3565012663,NO
-3565012664,3565012667,SE
-3565012668,3565027327,NO
+3565002752,3565027327,NO
3565027328,3565035519,PL
3565035520,3565036287,IE
-3565036288,3565036543,GB
-3565036544,3565037119,IE
-3565037120,3565037135,GB
-3565037136,3565037343,IE
-3565037344,3565037567,GB
-3565037568,3565037823,IE
-3565037824,3565038591,GB
-3565038592,3565038859,IE
-3565038860,3565038863,GB
-3565038864,3565038943,IE
-3565038944,3565038951,GB
-3565038952,3565039087,IE
-3565039088,3565039615,GB
-3565039616,3565042199,IE
-3565042200,3565042207,GB
-3565042208,3565042255,IE
-3565042256,3565043711,GB
-3565043712,3565045263,AT
-3565045264,3565045279,SK
-3565045280,3565045311,DE
-3565045312,3565047807,AT
-3565047808,3565048063,LI
-3565048064,3565051903,AT
+3565036288,3565037055,GB
+3565037056,3565037311,IE
+3565037312,3565038079,GB
+3565038080,3565038335,IE
+3565038336,3565038879,GB
+3565038880,3565038895,IE
+3565038896,3565039103,GB
+3565039104,3565039359,IE
+3565039360,3565039615,GB
+3565039616,3565041663,IE
+3565041664,3565043711,GB
+3565043712,3565051903,AT
3565051904,3565060095,IQ
3565060096,3565068287,GB
3565068288,3565076479,CH
3565076480,3565084671,DE
3565084672,3565092863,IS
-3565092864,3565096759,GB
-3565096760,3565096767,IE
-3565096768,3565097151,GB
-3565097152,3565097167,TZ
-3565097168,3565101055,GB
+3565092864,3565101055,GB
3565101056,3565109247,DE
3565109248,3565117439,PL
3565117440,3565125631,TR
@@ -164360,296 +86010,96 @@
3565240320,3565248511,IE
3565248512,3565256703,RU
3565256704,3565289471,NL
-3565289472,3565344039,DK
-3565344040,3565344047,DE
-3565344048,3565355007,DK
+3565289472,3565355007,DK
3565355008,3565420543,IT
-3565420544,3565486079,GB
-3565486080,3565486335,IE
+3565420544,3565486335,GB
3565486336,3565486975,FR
3565486976,3565487615,NL
-3565487616,3565487871,SE
-3565487872,3565488127,SK
-3565488128,3565488383,GB
-3565488384,3565488639,ES
-3565488640,3565488895,GB
-3565488896,3565489535,DE
-3565489536,3565489791,GB
-3565489792,3565489823,DE
-3565489824,3565490175,GB
-3565490176,3565490431,NL
-3565490432,3565491199,GB
-3565491200,3565491215,FR
-3565491216,3565491455,GB
-3565491456,3565491711,IT
-3565491712,3565491839,GB
-3565491840,3565491903,IT
-3565491904,3565491967,NL
-3565491968,3565492295,GB
-3565492296,3565492303,IE
-3565492304,3565492319,GB
-3565492320,3565492327,DE
-3565492328,3565492335,GB
-3565492336,3565492351,FR
-3565492352,3565492479,GB
-3565492480,3565492607,NL
-3565492608,3565492639,GB
-3565492640,3565492655,FR
-3565492656,3565492671,GB
-3565492672,3565492735,IT
-3565492736,3565492991,CH
-3565492992,3565493247,NL
-3565493248,3565493583,GB
-3565493584,3565493591,DE
-3565493592,3565493679,GB
-3565493680,3565493687,FR
-3565493688,3565493759,GB
-3565493760,3565493775,NL
-3565493776,3565493983,GB
-3565493984,3565494055,DE
-3565494056,3565494063,GB
-3565494064,3565494079,NL
-3565494080,3565494143,GB
-3565494144,3565494271,DE
-3565494272,3565494527,IS
-3565494528,3565494543,GB
-3565494544,3565494551,IT
-3565494552,3565494559,DE
-3565494560,3565494591,GB
-3565494592,3565494655,FR
-3565494656,3565494671,SE
-3565494672,3565494687,DE
-3565494688,3565494703,SE
-3565494704,3565494719,DK
-3565494720,3565494735,GB
-3565494736,3565494743,CA
-3565494744,3565495295,GB
-3565495296,3565496447,FR
-3565496448,3565496511,DE
-3565496512,3565496575,US
-3565496576,3565496831,GB
-3565496832,3565497087,IT
-3565497088,3565497103,GB
-3565497104,3565497119,IE
-3565497120,3565497151,DE
-3565497152,3565497159,IE
-3565497160,3565497167,US
-3565497168,3565497199,GB
-3565497200,3565497207,IT
-3565497208,3565497215,GB
-3565497216,3565497279,CZ
-3565497280,3565497287,NL
-3565497288,3565497343,GB
-3565497344,3565497599,US
-3565497600,3565497871,GB
-3565497872,3565497887,DE
-3565497888,3565497903,GB
-3565497904,3565497911,IE
-3565497912,3565497919,DE
-3565497920,3565497927,PR
-3565497928,3565497951,GB
-3565497952,3565497967,US
-3565497968,3565498111,GB
-3565498112,3565498367,NL
-3565498368,3565498431,FR
-3565498432,3565498479,US
-3565498480,3565498519,GB
-3565498520,3565498527,ZA
-3565498528,3565499815,GB
-3565499816,3565499823,FR
-3565499824,3565500479,GB
-3565500480,3565500543,DE
-3565500544,3565500567,GB
-3565500568,3565500575,IE
-3565500576,3565500591,GB
-3565500592,3565500599,DE
-3565500600,3565500607,GB
-3565500608,3565500623,FR
-3565500624,3565501095,GB
-3565501096,3565501103,FR
-3565501104,3565501119,FI
-3565501120,3565501231,GB
-3565501232,3565501247,DE
-3565501248,3565501311,GB
-3565501312,3565501439,DE
-3565501440,3565501679,GB
-3565501680,3565501695,IE
-3565501696,3565502207,GB
-3565502208,3565502239,IT
-3565502240,3565502463,GB
+3565487616,3565495295,GB
+3565495296,3565496319,FR
+3565496320,3565502463,GB
3565502464,3565503487,NL
-3565503488,3565503999,GB
-3565504000,3565504511,NL
-3565504512,3565510655,GB
-3565510656,3565511679,NL
-3565511680,3565512191,CH
-3565512192,3565512703,DE
-3565512704,3565512767,GB
-3565512768,3565512959,DE
-3565512960,3565514111,GB
-3565514112,3565514239,DE
-3565514240,3565514495,DK
-3565514496,3565518847,GB
+3565503488,3565518847,GB
3565518848,3565551615,TR
-3565551616,3565578495,GB
-3565578496,3565578751,CA
-3565578752,3565641487,GB
-3565641488,3565641503,DE
-3565641504,3565682687,GB
-3565682688,3565688063,NL
-3565688064,3565688319,GB
-3565688320,3565748223,NL
+3565551616,3565682687,GB
+3565682688,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,3565753799,EU
+3565753344,3565753791,GB
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
+3565764256,3565766655,GB
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
+3565767408,3565767439,GB
+3565767456,3565767487,GB
+3565767504,3565767599,GB
+3565767616,3565767631,GB
+3565767680,3565767999,GB
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
@@ -164664,618 +86114,186 @@
3566354432,3566370815,RO
3566370816,3566403583,TR
3566403584,3566436351,CH
-3566436352,3566438546,IE
-3566438547,3566438547,EU
-3566438548,3566469119,IE
+3566436352,3566469119,IE
3566469120,3566534655,GB
3566534656,3566551039,DE
-3566551040,3566574747,FI
-3566574748,3566574751,SE
-3566574752,3566600191,FI
+3566551040,3566600191,FI
3566600192,3566607359,IL
3566607360,3566607615,GN
-3566607616,3566647403,IL
-3566647404,3566647404,IL
-3566647405,3566665727,IL
+3566607616,3566665727,IL
3566665728,3566723071,SE
3566723072,3566723327,RU
3566723328,3566739455,SE
3566739456,3566747647,RU
3566747648,3566764031,GR
3566764032,3566796799,AT
-3566796800,3566816511,NL
-3566816512,3566816767,US
-3566816768,3566862335,NL
+3566796800,3566862335,NL
3566862336,3566895103,TR
3566895104,3566927871,KZ
-3566927872,3566976767,FR
-3566976768,3566977023,EU
-3566977024,3566993407,FR
+3566927872,3566993407,FR
3566993408,3567058943,TR
-3567058944,3567103047,FR
-3567103048,3567103055,IT
-3567103056,3567124479,FR
-3567124480,3567124991,EU
+3567058944,3567124479,FR
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,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,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
3567173632,3567239167,GB
3567239168,3567241215,NL
-3567241216,3567241471,EU
3567241472,3567255551,NL
3567255552,3567321087,PL
-3567321088,3567323007,GB
-3567323008,3567323023,CH
-3567323024,3567323135,GB
-3567323136,3567323391,IE
-3567323392,3567324479,GB
-3567324480,3567324543,ES
-3567324544,3567324559,GB
-3567324560,3567324575,ES
-3567324576,3567324607,GB
-3567324608,3567324671,ES
-3567324672,3567325119,GB
-3567325120,3567325135,ES
-3567325136,3567329711,GB
-3567329712,3567329727,IE
-3567329728,3567331743,GB
-3567331744,3567331775,IE
-3567331776,3567350807,GB
-3567350808,3567350815,US
-3567350816,3567350839,GB
-3567350840,3567350847,CH
-3567350848,3567350935,GB
-3567350936,3567350943,CH
-3567350944,3567352479,GB
-3567352480,3567352487,NL
-3567352488,3567352511,GB
-3567352512,3567352519,FR
-3567352520,3567352759,GB
-3567352760,3567352767,NL
-3567352768,3567353855,GB
+3567321088,3567353855,GB
3567353856,3567386623,CH
-3567386624,3567386671,GB
-3567386672,3567386687,DE
-3567386688,3567386751,GB
-3567386752,3567386815,DE
-3567386816,3567386879,GB
-3567386880,3567386883,DE
-3567386884,3567386911,GB
-3567386912,3567386943,DE
-3567386944,3567386975,GB
-3567386976,3567387007,DE
-3567387008,3567387071,GB
-3567387072,3567387407,DE
-3567387408,3567387439,GB
-3567387440,3567387471,DE
-3567387472,3567387487,GB
-3567387488,3567387539,DE
-3567387540,3567387543,GB
-3567387544,3567387547,DE
-3567387548,3567387583,GB
-3567387584,3567388031,DE
-3567388032,3567388159,GB
-3567388160,3567388399,DE
-3567388400,3567388415,GB
-3567388416,3567388607,DE
-3567388608,3567388639,GB
-3567388640,3567388647,DE
-3567388648,3567388671,GB
-3567388672,3567388927,CZ
-3567388928,3567389183,DE
-3567389184,3567389311,GB
-3567389312,3567389375,DE
-3567389376,3567389407,GB
-3567389408,3567389439,DE
-3567389440,3567389695,GB
+3567386624,3567388351,GB
+3567388352,3567388383,DE
+3567388384,3567388543,GB
+3567388544,3567388607,DE
+3567388608,3567389695,GB
3567389696,3567390975,DE
-3567390976,3567391107,GB
-3567391108,3567391111,DE
-3567391112,3567391147,GB
-3567391148,3567391151,DE
-3567391152,3567391231,GB
-3567391232,3567391743,DE
-3567391744,3567391767,PL
-3567391768,3567391807,GB
-3567391808,3567391839,DE
-3567391840,3567391999,GB
-3567392000,3567392255,PL
-3567392256,3567392767,GB
-3567392768,3567393023,DE
-3567393024,3567393279,FR
-3567393280,3567393535,HU
-3567393536,3567393791,GB
-3567393792,3567394047,SI
-3567394048,3567394175,HR
-3567394176,3567394975,GB
-3567394976,3567395007,DE
-3567395008,3567395071,GB
-3567395072,3567395327,DE
-3567395328,3567396863,GB
-3567396864,3567397119,DE
-3567397120,3567397375,GB
-3567397376,3567397503,ES
-3567397504,3567397887,GB
-3567397888,3567398143,DE
-3567398144,3567398191,RO
-3567398192,3567398199,DE
-3567398200,3567398399,RO
-3567398400,3567398655,GB
-3567398656,3567398911,DE
-3567398912,3567398975,GB
-3567398976,3567399031,DE
-3567399032,3567399039,GB
-3567399040,3567399047,DE
-3567399048,3567399071,GB
-3567399072,3567399135,DE
-3567399136,3567399167,GB
-3567399168,3567399391,DE
-3567399392,3567399423,GB
-3567399424,3567399439,DE
-3567399440,3567399487,GB
-3567399488,3567399647,DE
-3567399648,3567399679,GB
-3567399680,3567399807,DE
-3567399808,3567399935,GB
+3567390976,3567391231,GB
+3567391232,3567391487,DE
+3567391488,3567394815,GB
+3567394816,3567395071,FR
+3567395072,3567399167,GB
+3567399168,3567399423,DE
+3567399424,3567399935,GB
3567399936,3567401471,DE
-3567401472,3567401503,GB
-3567401504,3567401519,DE
-3567401520,3567401543,GB
-3567401544,3567401551,DE
-3567401552,3567401727,GB
-3567401728,3567402367,DE
-3567402368,3567402495,GB
-3567402496,3567403007,DE
+3567401472,3567403007,GB
3567403008,3567419391,IT
3567419392,3567427583,SA
3567427584,3567435775,SE
-3567435776,3567441375,GB
-3567441376,3567441407,NL
-3567441408,3567444223,GB
-3567444224,3567444479,TZ
-3567444480,3567445951,GB
-3567445952,3567445983,NL
-3567445984,3567452159,GB
-3567452160,3567452351,ES
-3567452352,3567452383,GB
-3567452384,3567452399,ES
-3567452400,3567452415,GB
-3567452416,3567453439,ES
-3567453440,3567453695,GB
-3567453696,3567454239,ES
-3567454240,3567454255,GB
-3567454256,3567454335,ES
-3567454336,3567454463,GB
-3567454464,3567454975,ES
-3567454976,3567455039,GB
-3567455040,3567455103,ES
-3567455104,3567455167,GB
-3567455168,3567455999,ES
-3567456000,3567456255,GB
-3567456256,3567458047,ES
-3567458048,3567458303,GB
-3567458304,3567458319,ES
-3567458320,3567458335,GB
-3567458336,3567458367,ES
-3567458368,3567458559,GB
-3567458560,3567458815,ES
-3567458816,3567458879,GB
-3567458880,3567459231,ES
-3567459232,3567459583,GB
-3567459584,3567459839,ES
-3567459840,3567459903,GB
-3567459904,3567459959,ES
-3567459960,3567460095,GB
-3567460096,3567460607,ES
-3567460608,3567460671,GB
-3567460672,3567460767,ES
-3567460768,3567460783,GB
-3567460784,3567460815,ES
-3567460816,3567460823,GB
-3567460824,3567462271,ES
-3567462272,3567462399,GB
-3567462400,3567462559,ES
-3567462560,3567462591,GB
-3567462592,3567462655,ES
-3567462656,3567462719,GB
-3567462720,3567462751,ES
-3567462752,3567462783,GB
-3567462784,3567462815,ES
-3567462816,3567463007,GB
-3567463008,3567463135,ES
-3567463136,3567463151,IT
-3567463152,3567463167,ES
-3567463168,3567463423,GB
-3567463424,3567465663,ES
-3567465664,3567465695,GB
-3567465696,3567468031,ES
-3567468032,3567468287,GB
-3567468288,3567468800,ES
-3567468801,3567469055,GB
-3567469056,3567469567,ES
-3567469568,3567469823,GB
-3567469824,3567472127,ES
-3567472128,3567472639,GB
-3567472640,3567474943,ES
-3567474944,3567475199,GB
-3567475200,3567475711,ES
-3567475712,3567476223,GB
-3567476224,3567477663,ES
-3567477664,3567477695,GB
-3567477696,3567484927,ES
-3567484928,3567486463,GB
-3567486464,3567488511,ES
-3567488512,3567488767,GB
-3567488768,3567490431,ES
-3567490432,3567490559,GB
-3567490560,3567491071,ES
-3567491072,3567491327,GB
-3567491328,3567492319,ES
-3567492320,3567492335,GB
-3567492336,3567492831,ES
-3567492832,3567493375,GB
-3567493376,3567493407,ES
-3567493408,3567493439,GB
-3567493440,3567493503,ES
-3567493504,3567493631,GB
-3567493632,3567494719,ES
-3567494720,3567494847,GB
-3567494848,3567496383,ES
-3567496384,3567496415,GB
-3567496416,3567496447,ES
-3567496448,3567496607,GB
-3567496608,3567496639,ES
-3567496640,3567496671,GB
-3567496672,3567497087,ES
-3567497088,3567497215,GB
-3567497216,3567498495,ES
-3567498496,3567499007,GB
-3567499008,3567499143,ES
-3567499144,3567499151,GB
-3567499152,3567500863,ES
-3567500864,3567500895,GB
-3567500896,3567500959,ES
-3567500960,3567500991,GB
-3567500992,3567501023,ES
-3567501024,3567501567,GB
-3567501568,3567502031,ES
-3567502032,3567502079,GB
-3567502080,3567502607,ES
-3567502608,3567502719,GB
-3567502720,3567502783,ES
-3567502784,3567502815,GB
-3567502816,3567502831,ES
-3567502832,3567502847,GB
-3567502848,3567502911,ES
-3567502912,3567502943,GB
-3567502944,3567502975,ES
-3567502976,3567503039,GB
-3567503040,3567505663,ES
-3567505664,3567505919,GB
-3567505920,3567506559,ES
-3567506560,3567506623,GB
-3567506624,3567506687,ES
-3567506688,3567506719,GB
-3567506720,3567506751,ES
-3567506752,3567506783,GB
-3567506784,3567506815,ES
-3567506816,3567507231,GB
-3567507232,3567507239,ES
-3567507240,3567507247,GB
-3567507248,3567507391,ES
-3567507392,3567507407,GB
-3567507408,3567507455,ES
-3567507456,3567509503,NL
-3567509504,3567510527,ES
-3567510528,3567511487,GB
-3567511488,3567511519,ES
-3567511520,3567511551,GB
-3567511552,3567511807,ES
-3567511808,3567512319,GB
-3567512320,3567512575,ES
-3567512576,3567513599,NL
-3567513600,3567514367,ES
-3567514368,3567515647,GB
-3567515648,3567517695,ES
+3567435776,3567456407,GB
+3567456408,3567456415,ES
+3567456416,3567458305,GB
+3567458306,3567458306,ES
+3567458307,3567459935,GB
+3567459936,3567459943,ES
+3567459944,3567465983,GB
+3567465984,3567466239,ES
+3567466240,3567495679,GB
+3567495680,3567495935,ES
+3567495936,3567499007,GB
+3567499008,3567499135,ES
+3567499136,3567503359,GB
+3567503360,3567504383,ES
+3567504384,3567511487,GB
+3567511488,3567511495,ES
+3567511496,3567516671,GB
+3567516672,3567517695,ES
3567517696,3567583231,RU
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
+3567585280,3567585311,TR
3567585792,3567586303,GB
-3567586304,3567587327,EU
+3567586304,3567586815,TR
3567587328,3567591423,GB
3567591424,3567599615,IT
3567599616,3567615999,NL
-3567616000,3567616255,CG
-3567616256,3567616351,A2
-3567616352,3567616383,GQ
-3567616384,3567616525,A2
+3567616000,3567616525,GB
3567616526,3567616526,KE
-3567616527,3567616527,A2
-3567616528,3567616535,GB
-3567616536,3567616575,A2
-3567616576,3567616583,GB
-3567616584,3567616767,A2
+3567616527,3567616767,GB
3567616768,3567617023,US
-3567617024,3567617151,A2
-3567617152,3567617279,CD
-3567617280,3567617535,IN
-3567617536,3567617791,A2
-3567617792,3567618047,CD
+3567617024,3567618047,GB
3567618048,3567619071,IN
-3567619072,3567619075,NG
-3567619076,3567619087,A2
-3567619088,3567619095,NG
-3567619096,3567619103,A2
-3567619104,3567619111,KE
-3567619112,3567619135,A2
-3567619136,3567619839,NG
-3567619840,3567620095,TZ
+3567619072,3567619583,GB
+3567619584,3567619839,NG
+3567619840,3567620095,GB
3567620096,3567620351,IN
-3567620352,3567620479,TZ
-3567620480,3567620623,A2
-3567620624,3567620631,PK
-3567620632,3567620639,IN
-3567620640,3567620679,PK
-3567620680,3567620695,A2
-3567620696,3567620719,PK
-3567620720,3567620727,A2
-3567620728,3567620735,IN
-3567620736,3567620931,A2
-3567620932,3567620935,TZ
-3567620936,3567620959,KE
-3567620960,3567620991,A2
-3567620992,3567621055,NG
-3567621056,3567621119,KE
-3567621120,3567621263,GB
-3567621264,3567621279,CG
-3567621280,3567621375,GB
-3567621376,3567621391,A2
-3567621392,3567621399,CG
-3567621400,3567621407,A2
-3567621408,3567621423,CG
-3567621424,3567621631,A2
-3567621632,3567621887,ID
-3567621888,3567621895,TZ
-3567621896,3567621903,KE
-3567621904,3567621911,A2
-3567621912,3567621919,TZ
-3567621920,3567621951,NG
-3567621952,3567622655,A2
-3567622656,3567622911,KE
-3567622912,3567622919,A2
-3567622920,3567622927,KE
-3567622928,3567622943,A2
-3567622944,3567622951,KE
-3567622952,3567622959,A2
-3567622960,3567622963,TZ
-3567622964,3567622967,NG
-3567622968,3567622975,A2
-3567622976,3567623039,TZ
-3567623040,3567623055,GA
-3567623056,3567623071,NG
-3567623072,3567623087,TZ
-3567623088,3567623095,A2
-3567623096,3567623103,GA
-3567623104,3567623135,TZ
-3567623136,3567623143,A2
-3567623144,3567623151,TZ
-3567623152,3567623471,A2
-3567623472,3567623479,KE
-3567623480,3567623727,A2
-3567623728,3567623759,PK
-3567623760,3567623767,A2
-3567623768,3567623775,PK
-3567623776,3567623791,A2
-3567623792,3567623839,PK
-3567623840,3567623935,A2
-3567623936,3567624191,PK
-3567624192,3567624447,GB
-3567624448,3567625215,LR
-3567625216,3567625727,TZ
-3567625728,3567625983,A2
-3567625984,3567626239,KE
+3567620352,3567626239,GB
3567626240,3567626751,TZ
-3567626752,3567627008,NG
-3567627009,3567629311,A2
-3567629312,3567630207,TJ
-3567630208,3567635711,A2
-3567635712,3567635839,CG
-3567635840,3567647487,A2
-3567647488,3567648767,GB
+3567626752,3567648767,GB
3567648768,3567665151,BE
3567665152,3567673343,ES
-3567673344,3567674171,AT
-3567674172,3567674175,DE
-3567674176,3567681535,AT
+3567673344,3567681535,AT
3567681536,3567714303,ES
3567714304,3567715327,GB
-3567715328,3567715583,EU
3567715584,3567715839,GB
-3567715840,3567716351,EU
-3567716352,3567716383,GB
-3567716384,3567716607,EU
-3567716608,3567716639,IL
-3567716640,3567716943,EU
-3567716944,3567717119,GB
-3567717120,3567717375,DE
-3567717376,3567717631,GB
-3567717632,3567717679,DE
-3567717680,3567717759,EU
-3567717760,3567717887,DE
-3567717888,3567718015,GB
-3567718016,3567718143,EU
-3567718144,3567718399,CH
-3567718400,3567719423,US
+3567716352,3567717375,GB
+3567718400,3567718655,US
+3567718656,3567718911,GB
+3567718912,3567719423,US
3567719424,3567719679,GB
-3567719680,3567779839,EU
3567779840,3567845375,DE
3567845376,3567861759,GB
3567861760,3567878143,NO
3567878144,3567976447,ES
3567976448,3568041983,IT
3568041984,3568107519,DE
-3568107520,3568153759,GB
-3568153760,3568153767,CH
-3568153768,3568173055,GB
+3568107520,3568173055,GB
3568173056,3568304127,TR
-3568304128,3568309775,RU
-3568309776,3568309791,UZ
-3568309792,3568309919,BY
-3568309920,3568309951,RU
-3568309952,3568310015,BY
-3568310016,3568369663,RU
+3568304128,3568369663,RU
3568369664,3568435199,IT
3568435200,3568443391,UA
3568443392,3568476159,NL
3568476160,3568484351,DK
-3568484352,3568486655,NL
-3568486656,3568486911,EU
-3568486912,3568492543,NL
+3568484352,3568492543,NL
3568492544,3568500735,RS
-3568500736,3568566271,IL
-3568566272,3568574967,FR
-3568574968,3568574975,A2
-3568574976,3568577151,FR
-3568577152,3568577167,A2
-3568577168,3568577231,FR
-3568577232,3568577239,A2
-3568577240,3568583783,FR
-3568583784,3568583791,A2
-3568583792,3568585471,FR
-3568585472,3568585727,EU
-3568585728,3568595079,FR
-3568595080,3568595087,A2
-3568595088,3568599039,FR
+3568500736,3568520137,IL
+3568520138,3568520138,SY
+3568520139,3568566271,IL
+3568566272,3568599039,FR
3568599040,3568631807,PL
3568631808,3568697343,SE
3568697344,3568730111,PL
@@ -165285,438 +86303,54 @@
3568795648,3568803839,GB
3568803840,3568812031,IT
3568812032,3568828415,ES
-3568828416,3568829631,DE
-3568829632,3568829639,CH
-3568829640,3568848791,DE
-3568848792,3568848799,PL
-3568848800,3568848871,DE
-3568848872,3568848879,GB
-3568848880,3568900095,DE
-3568900096,3568900351,A2
-3568900352,3568904191,DE
-3568904192,3568904447,EU
-3568904448,3568915791,DE
-3568915792,3568915807,LU
-3568915808,3568939519,DE
-3568939520,3568939527,IT
-3568939528,3568943199,DE
-3568943200,3568943207,A2
-3568943208,3568959487,DE
+3568828416,3568904191,DE
+3568904192,3568904447,GB
+3568904448,3568959487,DE
3568959488,3569025023,AT
3569025024,3569057791,NL
-3569057792,3569060863,GB
-3569060864,3569060927,IE
-3569060928,3569068543,GB
-3569068544,3569068671,BG
-3569068672,3569068951,GB
-3569068952,3569068991,DE
-3569068992,3569074687,GB
+3569057792,3569074687,GB
3569074688,3569074943,IE
3569074944,3569075455,GB
3569075456,3569075711,IE
-3569075712,3569075839,FR
-3569075840,3569083903,GB
-3569083904,3569084159,US
-3569084160,3569090559,GB
+3569075712,3569090559,GB
3569090560,3569123327,RU
3569123328,3569156095,GB
-3569156096,3569156351,NL
-3569156352,3569156607,EU
-3569156608,3569157379,NL
-3569157380,3569157380,EU
-3569157381,3569165311,NL
-3569165312,3569165567,EU
-3569165568,3569167871,NL
-3569167872,3569168127,EU
-3569168128,3569188863,NL
+3569156096,3569188863,NL
3569188864,3569221631,IT
-3569221632,3569238399,BE
-3569238400,3569238527,AT
-3569238528,3569239071,BE
-3569239072,3569239103,LU
-3569239104,3569239519,BE
-3569239520,3569239551,LU
-3569239552,3569239983,BE
-3569239984,3569239999,BN
-3569240000,3569240031,BE
-3569240032,3569240063,FR
-3569240064,3569241583,BE
-3569241584,3569241599,LU
-3569241600,3569241907,BE
-3569241908,3569241911,LU
-3569241912,3569242047,BE
-3569242048,3569242111,LU
-3569242112,3569243903,BE
-3569243904,3569244031,NL
-3569244032,3569244303,BE
-3569244304,3569244319,LU
-3569244320,3569245695,BE
-3569245696,3569245727,LU
-3569245728,3569250879,BE
-3569250880,3569250895,LU
-3569250896,3569251071,BE
-3569251072,3569251327,LU
-3569251328,3569251839,US
-3569251840,3569252991,BE
-3569252992,3569253007,LU
-3569253008,3569253095,BE
-3569253096,3569253103,LU
-3569253104,3569255007,BE
-3569255008,3569255039,LU
-3569255040,3569255071,BE
-3569255072,3569255103,LU
-3569255104,3569271935,BE
-3569271936,3569271943,IT
-3569271944,3569273167,BE
-3569273168,3569273183,LU
-3569273184,3569273791,BE
-3569273792,3569273823,LU
-3569273824,3569274303,BE
-3569274304,3569274311,LU
-3569274312,3569274367,BE
-3569274368,3569274383,LU
-3569274384,3569274495,BE
-3569274496,3569274559,LU
-3569274560,3569274687,BE
-3569274688,3569274719,LU
-3569274720,3569277183,BE
-3569277184,3569277439,LU
-3569277440,3569279039,BE
-3569279040,3569279071,LU
-3569279072,3569279223,BE
-3569279224,3569279231,US
-3569279232,3569279263,LU
-3569279264,3569279279,US
-3569279280,3569287167,BE
+3569221632,3569287167,BE
3569287168,3569352703,PL
3569352704,3569483775,RU
3569483776,3569614847,FR
3569614848,3569680383,GB
-3569680384,3569683711,SK
-3569683712,3569683719,IQ
-3569683720,3569710959,SK
-3569710960,3569710975,NL
-3569710976,3569713151,SK
+3569680384,3569713151,SK
3569713152,3569729535,AT
-3569729536,3569731167,FR
-3569731168,3569731183,IT
-3569731184,3569731215,GB
-3569731216,3569731231,FR
-3569731232,3569731247,DE
-3569731248,3569731263,GB
-3569731264,3569731311,FR
-3569731312,3569731327,GB
-3569731328,3569731375,FR
-3569731376,3569731391,GB
-3569731392,3569731423,FR
-3569731424,3569731439,GB
-3569731440,3569731455,FR
-3569731456,3569731471,GB
-3569731472,3569731487,FR
-3569731488,3569731503,GB
-3569731504,3569731519,IT
-3569731520,3569731551,GB
-3569731552,3569731583,FR
-3569731584,3569731599,GB
-3569731600,3569731615,FR
-3569731616,3569731631,DE
-3569731632,3569731647,IT
-3569731648,3569731727,FR
-3569731728,3569731743,GB
-3569731744,3569731791,FR
-3569731792,3569731807,GB
-3569731808,3569731839,FR
-3569731840,3569731871,GB
-3569731872,3569731903,FR
-3569731904,3569731919,BE
-3569731920,3569731951,FR
-3569731952,3569731967,NL
-3569731968,3569731983,GB
-3569731984,3569732031,FR
-3569732032,3569732047,DE
-3569732048,3569732063,GB
-3569732064,3569732079,FR
-3569732080,3569732095,GB
-3569732096,3569732143,FR
-3569732144,3569732191,GB
-3569732192,3569732207,DE
-3569732208,3569732287,FR
-3569732288,3569732303,GB
-3569732304,3569732319,DE
-3569732320,3569732335,FR
-3569732336,3569732351,GB
-3569732352,3569732383,FR
-3569732384,3569732399,US
-3569732400,3569732447,FR
-3569732448,3569732479,US
-3569732480,3569732495,GB
-3569732496,3569732543,FR
-3569732544,3569732575,GB
-3569732576,3569732607,FR
-3569732608,3569732639,GB
-3569732640,3569732671,FR
-3569732672,3569732703,GB
-3569732704,3569732719,FR
-3569732720,3569732735,GB
-3569732736,3569732751,FR
-3569732752,3569732767,GB
-3569732768,3569732783,FR
-3569732784,3569732847,GB
-3569732848,3569732863,FR
-3569732864,3569732879,GB
-3569732880,3569732895,FR
-3569732896,3569732911,IT
-3569732912,3569733007,FR
-3569733008,3569733023,IE
-3569733024,3569733055,FR
-3569733056,3569733087,GB
-3569733088,3569733103,IT
-3569733104,3569733183,FR
-3569733184,3569733199,GB
-3569733200,3569733263,FR
-3569733264,3569733279,US
-3569733280,3569733295,DE
-3569733296,3569733311,GB
-3569733312,3569733327,FR
-3569733328,3569733343,GB
-3569733344,3569733423,FR
-3569733424,3569733439,GB
-3569733440,3569733471,FR
-3569733472,3569733487,GB
-3569733488,3569733519,FR
-3569733520,3569733535,GB
-3569733536,3569733551,NL
-3569733552,3569733567,FR
-3569733568,3569733583,GB
-3569733584,3569733599,FR
-3569733600,3569733615,GB
-3569733616,3569733647,FR
-3569733648,3569733663,GB
-3569733664,3569733679,FR
-3569733680,3569733695,GB
-3569733696,3569733775,FR
-3569733776,3569733791,IE
-3569733792,3569733807,FR
-3569733808,3569733823,GB
-3569733824,3569733887,FR
-3569733888,3569733919,GB
-3569733920,3569733935,FR
-3569733936,3569733951,GB
-3569733952,3569733967,FR
-3569733968,3569733983,ES
-3569733984,3569733999,GB
-3569734000,3569734047,FR
-3569734048,3569734079,GB
-3569734080,3569734143,FR
-3569734144,3569734159,GB
-3569734160,3569734191,FR
-3569734192,3569734207,GB
-3569734208,3569734367,FR
-3569734368,3569734399,GB
-3569734400,3569734447,BE
-3569734448,3569734463,FR
-3569734464,3569734511,BE
-3569734512,3569736047,FR
-3569736048,3569736063,GB
-3569736064,3569736071,FR
-3569736072,3569736079,ES
-3569736080,3569736191,FR
-3569736192,3569736223,NL
-3569736224,3569736239,FR
-3569736240,3569736383,NL
-3569736384,3569736399,SE
-3569736400,3569736655,NL
-3569736656,3569736671,FR
-3569736672,3569736703,NL
-3569736704,3569739263,FR
-3569739264,3569739295,NL
-3569739296,3569739327,FR
-3569739328,3569739471,NL
-3569739472,3569739487,FR
-3569739488,3569739599,NL
-3569739600,3569739631,FR
-3569739632,3569739647,NL
-3569739648,3569739663,FR
-3569739664,3569739679,NL
-3569739680,3569739695,FR
-3569739696,3569739839,NL
-3569739840,3569739855,FR
-3569739856,3569739903,NL
-3569739904,3569739919,FR
-3569739920,3569739935,NL
-3569739936,3569739951,FR
-3569739952,3569740047,NL
-3569740048,3569740063,FR
-3569740064,3569740111,NL
-3569740112,3569740127,FR
-3569740128,3569740255,NL
-3569740256,3569740271,FR
-3569740272,3569740303,NL
-3569740304,3569740319,FR
-3569740320,3569740367,NL
-3569740368,3569740383,FR
-3569740384,3569740415,NL
-3569740416,3569740431,FR
-3569740432,3569740463,NL
-3569740464,3569740479,FR
-3569740480,3569740495,NL
-3569740496,3569740511,FR
-3569740512,3569740543,NL
-3569740544,3569740559,FR
-3569740560,3569740655,NL
-3569740656,3569740671,FR
-3569740672,3569740687,NL
-3569740688,3569740703,FR
-3569740704,3569740799,NL
-3569740800,3569741311,FR
-3569741312,3569741823,BE
-3569741824,3569742335,FR
-3569742336,3569742351,BE
-3569742352,3569742383,FR
-3569742384,3569742399,BE
-3569742400,3569742415,FR
-3569742416,3569742511,BE
-3569742512,3569742527,FR
-3569742528,3569742623,BE
-3569742624,3569742639,FR
-3569742640,3569742671,BE
-3569742672,3569742687,FR
-3569742688,3569742735,BE
-3569742736,3569742751,FR
-3569742752,3569742767,BE
-3569742768,3569742783,FR
-3569742784,3569742927,BE
-3569742928,3569742943,FR
-3569742944,3569743087,BE
-3569743088,3569743103,FR
-3569743104,3569743135,BE
-3569743136,3569743199,FR
-3569743200,3569743215,BE
-3569743216,3569743359,FR
-3569743360,3569743391,BE
-3569743392,3569743407,FR
-3569743408,3569743423,BE
-3569743424,3569743455,FR
-3569743456,3569743583,BE
-3569743584,3569743599,NL
-3569743600,3569743615,FR
-3569743616,3569743631,BE
-3569743632,3569743647,FR
-3569743648,3569743679,BE
-3569743680,3569743711,FR
-3569743712,3569743775,BE
-3569743776,3569743791,FR
-3569743792,3569743871,BE
-3569743872,3569743983,NL
-3569743984,3569743999,FR
-3569744000,3569744047,NL
-3569744048,3569744063,FR
-3569744064,3569744127,NL
-3569744128,3569744143,FR
-3569744144,3569744543,NL
-3569744544,3569744559,FR
-3569744560,3569744575,NL
-3569744576,3569744623,FR
-3569744624,3569744815,NL
-3569744816,3569744831,FR
-3569744832,3569744911,NL
-3569744912,3569744927,FR
-3569744928,3569744975,NL
-3569744976,3569744991,FR
-3569744992,3569745007,NL
-3569745008,3569745023,FR
-3569745024,3569745039,NL
-3569745040,3569745055,FR
-3569745056,3569745103,NL
-3569745104,3569745119,FR
-3569745120,3569745167,NL
-3569745168,3569745183,FR
-3569745184,3569745215,NL
-3569745216,3569745231,FR
-3569745232,3569745247,NL
-3569745248,3569745279,FR
-3569745280,3569745311,NL
-3569745312,3569745327,FR
-3569745328,3569745359,NL
-3569745360,3569745375,FR
-3569745376,3569745407,NL
-3569745408,3569745663,FR
-3569745664,3569745727,NL
-3569745728,3569745743,FR
-3569745744,3569745813,NL
-3569745814,3569745823,FR
-3569745824,3569745839,NL
-3569745840,3569745871,FR
-3569745872,3569745887,NL
-3569745888,3569745903,FR
-3569745904,3569745919,NL
-3569745920,3569811175,FR
+3569729536,3569811175,FR
3569811176,3569811176,GP
3569811177,3569811455,FR
3569811456,3569876991,IL
3569876992,3569942527,RS
3569942528,3570073599,DE
3570073600,3570081791,NL
-3570081792,3570098687,CH
-3570098688,3570098943,EU
-3570098944,3570106367,CH
+3570081792,3570106367,CH
3570106368,3570139135,PL
-3570139136,3570170079,DE
-3570170080,3570170111,BE
-3570170112,3570171655,DE
-3570171656,3570171663,AU
-3570171664,3570171903,DE
+3570139136,3570171903,DE
3570171904,3570204671,NL
-3570204672,3570215679,GR
-3570215680,3570215807,DE
-3570215808,3570223103,GR
-3570223104,3570223231,DE
-3570223232,3570236159,GR
-3570236160,3570236415,DE
-3570236416,3570236927,GR
-3570236928,3570237183,DE
-3570237184,3570241791,GR
-3570241792,3570242047,DE
-3570242048,3570270207,GR
+3570204672,3570270207,GR
3570270208,3570335743,NL
3570335744,3570401279,GB
3570401280,3570466815,FR
-3570466816,3570507439,SE
-3570507440,3570507455,CH
-3570507456,3570532351,SE
+3570466816,3570532351,SE
3570532352,3570597887,IT
-3570597888,3570607103,GB
-3570607104,3570608127,DE
-3570608128,3570611199,GB
-3570611200,3570611455,FR
-3570611456,3570614271,GB
+3570597888,3570614271,GB
3570614272,3570617343,DE
-3570617344,3570617855,GB
-3570617856,3570622463,DE
-3570622464,3570630655,GB
-3570630656,3570640383,DE
-3570640384,3570640415,CH
-3570640416,3570642135,DE
-3570642136,3570642151,AT
-3570642152,3570642159,DE
-3570642160,3570642167,AT
-3570642168,3570643487,DE
-3570643488,3570643519,AT
-3570643520,3570643583,DE
-3570643584,3570643647,AT
-3570643648,3570643679,DE
-3570643680,3570643711,AT
-3570643712,3570646143,DE
-3570646144,3570646175,CH
-3570646176,3570663423,DE
+3570617344,3570618367,GB
+3570618368,3570622207,DE
+3570622208,3570630655,GB
+3570630656,3570663423,DE
3570663424,3570728959,GB
3570728960,3570729983,FI
3570729984,3570731007,SE
-3570731008,3570756191,FI
-3570756192,3570756223,RU
-3570756224,3570760543,FI
-3570760544,3570760575,RU
-3570760576,3570794495,FI
+3570731008,3570794495,FI
3570794496,3570860031,SE
3570860032,3570892799,CH
3570892800,3570925567,SA
@@ -165726,158 +86360,23 @@
3571056640,3571122175,DE
3571122176,3571187711,GB
3571187712,3571253247,RU
-3571253248,3571264607,BE
-3571264608,3571264639,FR
-3571264640,3571268607,BE
-3571268608,3571268639,LU
-3571268640,3571286015,BE
+3571253248,3571286015,BE
3571286016,3571318783,DE
-3571318784,3571319807,GB
-3571319808,3571319935,DE
-3571319936,3571320855,GB
-3571320856,3571320863,DE
-3571320864,3571320943,GB
-3571320944,3571320959,DE
-3571320960,3571321055,GB
+3571318784,3571321055,GB
3571321056,3571321071,DE
-3571321072,3571321599,GB
-3571321600,3571321727,DE
-3571321728,3571321823,GB
-3571321824,3571321855,DE
-3571321856,3571321983,GB
-3571321984,3571321999,DE
-3571322000,3571323967,GB
-3571323968,3571324031,DE
-3571324032,3571326207,GB
-3571326208,3571326215,DE
-3571326216,3571326231,GB
-3571326232,3571326247,DE
-3571326248,3571326983,GB
-3571326984,3571326991,DE
-3571326992,3571328511,GB
-3571328512,3571328543,DE
-3571328544,3571328863,GB
-3571328864,3571328879,DE
-3571328880,3571329215,GB
-3571329216,3571329247,DE
-3571329248,3571331647,GB
-3571331648,3571331679,DE
-3571331680,3571331839,GB
-3571331840,3571332351,DE
-3571332352,3571335807,GB
-3571335808,3571335935,DE
-3571335936,3571340415,GB
-3571340416,3571340447,DE
-3571340448,3571342079,GB
-3571342080,3571342335,DE
-3571342336,3571343391,GB
-3571343392,3571343455,DE
-3571343456,3571347455,GB
-3571347456,3571347711,BE
-3571347712,3571348387,GB
-3571348388,3571348391,DE
-3571348392,3571349087,GB
-3571349088,3571349119,DE
-3571349120,3571351551,GB
-3571351552,3571351807,DE
-3571351808,3571355071,GB
-3571355072,3571355135,DE
-3571355136,3571355391,GB
-3571355392,3571355903,DE
-3571355904,3571355999,GB
-3571356000,3571356031,DE
-3571356032,3571357183,GB
-3571357184,3571357695,DE
-3571357696,3571357871,GB
-3571357872,3571357919,DE
-3571357920,3571358239,GB
-3571358240,3571358255,DE
-3571358256,3571358999,GB
-3571359000,3571359007,DE
-3571359008,3571359011,GB
-3571359012,3571359015,DE
-3571359016,3571359143,GB
-3571359144,3571359151,DE
-3571359152,3571359191,GB
-3571359192,3571359199,DE
-3571359200,3571359303,GB
-3571359304,3571359311,DE
-3571359312,3571359407,GB
-3571359408,3571359415,DE
-3571359416,3571359447,GB
-3571359448,3571359455,DE
-3571359456,3571361279,GB
-3571361280,3571361535,DE
-3571361536,3571361999,GB
-3571362000,3571362015,DE
-3571362016,3571362815,GB
-3571362816,3571362879,DE
-3571362880,3571363583,GB
-3571363584,3571364095,DE
-3571364096,3571368623,GB
-3571368624,3571368639,DE
-3571368640,3571368703,GB
-3571368704,3571368959,DE
-3571368960,3571371327,GB
-3571371328,3571371359,DE
-3571371360,3571379343,GB
-3571379344,3571379351,DE
-3571379352,3571379359,GB
-3571379360,3571379367,DE
-3571379368,3571379375,GB
-3571379376,3571379391,DE
-3571379392,3571379535,GB
-3571379536,3571379559,DE
-3571379560,3571379887,GB
-3571379888,3571379895,DE
-3571379896,3571382623,GB
-3571382624,3571382655,DE
-3571382656,3571384319,GB
-3571384320,3571385151,DE
-3571385152,3571385183,GB
-3571385184,3571385631,DE
-3571385632,3571385663,GB
-3571385664,3571389503,DE
-3571389504,3571389519,HU
-3571389520,3571414015,DE
-3571414016,3571414271,IE
-3571414272,3571414783,DE
-3571414784,3571414799,IE
-3571414800,3571414943,DE
-3571414944,3571414959,GB
-3571414960,3571415039,DE
-3571415040,3571415295,GB
-3571415296,3571415311,DE
-3571415312,3571415327,AT
-3571415328,3571423743,DE
-3571423744,3571423999,US
-3571424000,3571425695,DE
+3571321072,3571384319,GB
+3571384320,3571425695,DE
3571425696,3571425727,ES
-3571425728,3571426895,DE
-3571426896,3571426899,ES
-3571426900,3571456575,DE
-3571456576,3571456591,GB
-3571456592,3571468367,DE
-3571468368,3571468383,ES
-3571468384,3571473151,DE
-3571473152,3571473407,NL
-3571473408,3571482367,DE
-3571482368,3571482623,CH
-3571482624,3571485191,BE
-3571485192,3571485195,NL
-3571485196,3571515391,BE
+3571425728,3571474431,DE
+3571474432,3571475455,US
+3571475456,3571482623,DE
+3571482624,3571515391,BE
3571515392,3571548159,GB
3571548160,3571580927,ES
3571580928,3571646463,FI
-3571646464,3571657727,DE
-3571657728,3571657983,FR
-3571657984,3571658239,GB
-3571658240,3571658751,PL
-3571658752,3571675679,DE
-3571675680,3571675687,GB
-3571675688,3571710207,DE
-3571710208,3571710463,GB
-3571710464,3571711999,DE
+3571646464,3571655560,DE
+3571655561,3571655561,RO
+3571655562,3571711999,DE
3571712000,3571843071,GB
3571843072,3571974143,ES
3571974144,3571978239,RU
@@ -165886,31 +86385,16 @@
3571982336,3572006911,RU
3572006912,3572039679,CH
3572039680,3572047871,BE
-3572047872,3572055743,LU
-3572055744,3572055775,BE
-3572055776,3572056063,LU
+3572047872,3572056063,LU
3572056064,3572072447,RU
3572072448,3572105215,BG
-3572105216,3572116527,FR
-3572116528,3572116535,A2
-3572116536,3572170751,FR
-3572170752,3572195791,IL
-3572195792,3572195807,GB
-3572195808,3572203519,IL
+3572105216,3572170751,FR
+3572170752,3572203519,IL
3572203520,3572236287,SI
3572236288,3572301823,AT
3572301824,3572367359,DK
3572367360,3572432895,NL
-3572432896,3572436047,IT
-3572436048,3572436063,GB
-3572436064,3572442495,IT
-3572442496,3572442511,NL
-3572442512,3572447231,IT
-3572447232,3572447239,AT
-3572447240,3572447247,FR
-3572447248,3572447255,GB
-3572447256,3572447263,ES
-3572447264,3572465663,IT
+3572432896,3572465663,IT
3572465664,3572498431,BE
3572498432,3572563967,GB
3572563968,3572572159,KG
@@ -165918,9 +86402,7 @@
3572580352,3572596735,AT
3572596736,3572629503,GB
3572629504,3572695039,DK
-3572695040,3572715519,CH
-3572715520,3572715775,GB
-3572715776,3572760575,CH
+3572695040,3572760575,CH
3572760576,3572826111,PL
3572826112,3572891647,IT
3572891648,3572957183,FI
@@ -165929,20 +86411,8 @@
3573003839,3573022719,SE
3573022720,3573055487,RU
3573055488,3573088255,GB
-3573088256,3573089759,CH
-3573089760,3573089791,AT
-3573089792,3573090055,CH
-3573090056,3573090063,CD
-3573090064,3573101055,CH
-3573101056,3573101311,EU
-3573101312,3573142015,CH
-3573142016,3573142271,AT
-3573142272,3573153791,CH
-3573153792,3573175711,GB
-3573175712,3573175727,IE
-3573175728,3573208511,GB
-3573208512,3573208543,IE
-3573208544,3573219327,GB
+3573088256,3573153791,CH
+3573153792,3573219327,GB
3573219328,3573252095,GR
3573252096,3573284863,NO
3573284864,3573415935,TR
@@ -165978,139 +86448,45 @@
3573940224,3574005759,PS
3574005760,3574071295,CY
3574071296,3574136831,IL
-3574136832,3574137823,DE
-3574137824,3574137855,NL
-3574137856,3574138559,DE
-3574138560,3574138623,NL
-3574138624,3574138735,DE
-3574138736,3574138751,NL
-3574138752,3574138767,DE
-3574138768,3574138775,NL
-3574138776,3574151823,DE
-3574151824,3574151831,AT
-3574151832,3574153615,DE
-3574153616,3574153623,AT
-3574153624,3574155627,DE
-3574155628,3574155631,NL
-3574155632,3574155739,DE
-3574155740,3574155743,AT
-3574155744,3574155883,DE
-3574155884,3574155887,NL
-3574155888,3574159879,DE
-3574159880,3574159887,NL
-3574159888,3574159919,DE
-3574159920,3574159927,NL
-3574159928,3574160931,DE
-3574160932,3574160935,NL
-3574160936,3574161039,DE
-3574161040,3574161043,NL
-3574161044,3574161055,DE
-3574161056,3574161087,NL
-3574161088,3574161107,DE
-3574161108,3574161111,NL
-3574161112,3574161335,DE
-3574161336,3574161339,AI
-3574161340,3574169599,DE
-3574169600,3574172415,ES
-3574172416,3574172431,GB
-3574172432,3574172535,ES
-3574172536,3574172543,GB
-3574172544,3574174328,ES
-3574174329,3574174335,GB
-3574174336,3574174847,ES
-3574174848,3574174975,GB
-3574174976,3574175783,ES
-3574175784,3574175791,GB
-3574175792,3574175839,ES
-3574175840,3574175871,GB
-3574175872,3574177119,ES
-3574177120,3574177151,GB
-3574177152,3574177183,ES
-3574177184,3574177231,GB
-3574177232,3574177723,ES
-3574177724,3574177727,GB
-3574177728,3574181119,ES
-3574181120,3574181135,GB
-3574181136,3574181183,ES
-3574181184,3574181215,GB
-3574181216,3574181311,ES
-3574181312,3574181383,GB
-3574181384,3574181391,ES
-3574181392,3574181399,GB
-3574181400,3574181423,ES
-3574181424,3574181431,GB
-3574181432,3574181527,ES
-3574181528,3574181535,GB
-3574181536,3574182727,ES
-3574182728,3574182975,GB
-3574182976,3574183679,ES
-3574183680,3574183807,GB
-3574183808,3574185031,ES
-3574185032,3574185039,GB
-3574185040,3574186847,ES
-3574186848,3574187007,GB
-3574187008,3574190591,ES
-3574190592,3574190847,EU
-3574190848,3574192639,ES
-3574192640,3574192703,GB
-3574192704,3574192719,ES
-3574192720,3574192735,GB
-3574192736,3574192767,ES
-3574192768,3574192831,GB
-3574192832,3574193207,ES
-3574193208,3574193215,GB
-3574193216,3574193247,ES
-3574193248,3574193407,GB
-3574193408,3574193415,ES
-3574193416,3574193423,GB
-3574193424,3574193439,ES
-3574193440,3574193503,GB
-3574193504,3574193567,ES
-3574193568,3574193599,GB
-3574193600,3574193655,ES
-3574193656,3574193919,GB
-3574193920,3574193959,ES
-3574193960,3574193983,GB
-3574193984,3574194015,ES
-3574194016,3574194175,GB
-3574194176,3574194527,ES
-3574194528,3574195199,GB
-3574195200,3574197135,ES
-3574197136,3574197143,GB
-3574197144,3574197183,ES
-3574197184,3574197247,GB
-3574197248,3574202367,ES
+3574136832,3574169599,DE
+3574169600,3574174839,GB
+3574174840,3574174847,ES
+3574174848,3574187007,GB
+3574187008,3574188031,ES
+3574188032,3574190591,GB
+3574190592,3574190847,ES
+3574190848,3574191615,GB
+3574191616,3574192127,ES
+3574192128,3574195199,GB
+3574195200,3574196223,ES
+3574196224,3574198271,GB
+3574198272,3574199295,ES
+3574199296,3574199807,GB
+3574199808,3574202367,ES
3574202368,3574267903,NL
3574267904,3574333439,FR
3574333440,3574341631,GB
-3574341632,3574348287,EU
3574348288,3574348543,GB
-3574348544,3574398975,EU
3574398976,3574464511,PT
3574464512,3574530047,TR
-3574530048,3574563807,SE
-3574563808,3574563823,FI
-3574563824,3574594559,SE
+3574530048,3574594559,SE
3574594560,3574595583,GB
-3574595584,3574595839,GP
-3574595840,3574596095,MQ
-3574596096,3574596351,FR
-3574596352,3574596607,MQ
-3574596608,3574596863,GP
-3574596864,3574597119,GF
-3574597120,3574597631,MQ
-3574597632,3574598143,GP
+3574595584,3574595839,GF
+3574595840,3574597887,FR
+3574597888,3574598143,GP
3574598144,3574598399,MQ
-3574598400,3574598655,GP
-3574598656,3574599679,MQ
+3574598400,3574599423,FR
+3574599424,3574599679,MQ
3574599680,3574599935,GP
-3574599936,3574600959,MQ
-3574600960,3574601471,GP
-3574601472,3574601983,MQ
-3574601984,3574602495,GF
-3574602496,3574603263,MQ
-3574603264,3574603519,GP
-3574603520,3574603775,GF
+3574599936,3574600191,FR
+3574600192,3574600447,MQ
+3574600448,3574601215,FR
+3574601216,3574601471,GP
+3574601472,3574602239,FR
+3574602240,3574602495,GF
+3574602496,3574602751,FR
+3574602752,3574603007,RE
+3574603008,3574603775,FR
3574603776,3574611967,BG
3574611968,3574628351,HU
3574628352,3574661119,GR
@@ -166118,47 +86494,16 @@
3574693888,3574726655,PL
3574726656,3574792191,GB
3574792192,3574824959,CZ
-3574824960,3574825023,NL
-3574825024,3574825279,GB
-3574825280,3574825407,NL
-3574825408,3574825471,GB
-3574825472,3574826111,NL
-3574826112,3574826239,GB
-3574826240,3574829311,NL
-3574829312,3574829567,GB
-3574829568,3574829823,NL
-3574829824,3574830079,GB
-3574830080,3574831359,NL
-3574831360,3574833151,GB
-3574833152,3574833215,NL
-3574833216,3574833279,GB
-3574833280,3574833311,NL
-3574833312,3574833343,GB
-3574833344,3574833359,NL
-3574833360,3574833407,GB
-3574833408,3574833439,NL
-3574833440,3574834431,GB
-3574834432,3574834559,NL
-3574834560,3574834943,GB
-3574834944,3574835199,NL
-3574835200,3574836351,GB
-3574836352,3574838015,NL
-3574838016,3574838271,GB
-3574838272,3574838527,NL
-3574838528,3574857727,GB
-3574857728,3574915455,DE
-3574915456,3574915487,CH
-3574915488,3574917375,DE
-3574917376,3574917631,CH
-3574917632,3574918751,DE
-3574918752,3574918783,CH
-3574918784,3574919359,DE
-3574919360,3574919391,FR
-3574919392,3574920503,DE
-3574920504,3574920511,LU
-3574920512,3574923263,DE
+3574824960,3574830079,GB
+3574830080,3574831103,NL
+3574831104,3574857727,GB
+3574857728,3574923263,DE
3574923264,3574939647,RU
-3574939648,3574956031,SE
+3574939648,3574941375,SE
+3574941376,3574941439,NO
+3574941440,3574949743,SE
+3574949744,3574949759,NO
+3574949760,3574956031,SE
3574956032,3574972415,IT
3574972416,3574988799,LV
3574988800,3575054335,PT
@@ -166167,1359 +86512,277 @@
3575185408,3575250943,PL
3575250944,3575316479,IT
3575316480,3575349247,RU
-3575349248,3575351943,ES
-3575351944,3575351951,FR
-3575351952,3575354599,ES
-3575354600,3575354607,GB
-3575354608,3575355231,ES
-3575355232,3575355247,GB
-3575355248,3575358799,ES
-3575358800,3575358815,FR
-3575358816,3575360895,ES
-3575360896,3575360903,FR
-3575360904,3575365983,ES
-3575365984,3575365991,FR
-3575365992,3575366135,ES
-3575366136,3575366143,GB
-3575366144,3575373183,ES
-3575373184,3575373191,GB
-3575373192,3575375279,ES
-3575375280,3575375287,FR
-3575375288,3575375319,ES
-3575375320,3575375327,GB
-3575375328,3575376191,ES
-3575376192,3575376199,US
-3575376200,3575382015,ES
-3575382016,3575412991,FI
-3575412992,3575413119,RU
-3575413120,3575447551,FI
+3575349248,3575382015,ES
+3575382016,3575447551,FI
3575447552,3575513087,CZ
3575513088,3575545855,PT
3575545856,3575562239,FR
3575562240,3575578623,DE
-3575578624,3575578879,BE
-3575578880,3575579135,AU
-3575579136,3575579647,BE
-3575579648,3575579903,AU
-3575579904,3575581439,BE
-3575581440,3575581695,EU
-3575581696,3575582207,BE
-3575582208,3575582463,CH
-3575582464,3575582719,FR
-3575582720,3575583103,BE
-3575583104,3575583111,HU
-3575583112,3575583115,GB
-3575583116,3575583119,FR
-3575583120,3575583231,BE
-3575583232,3575583487,IT
-3575583488,3575585791,BE
-3575585792,3575586047,EG
-3575586048,3575586303,IT
-3575586304,3575586815,BE
-3575586816,3575587071,GB
-3575587072,3575587231,BE
-3575587232,3575587247,NL
-3575587248,3575587255,FR
-3575587256,3575587263,BE
-3575587264,3575587271,CH
-3575587272,3575587287,BE
-3575587288,3575587295,PL
-3575587296,3575587319,BE
-3575587320,3575587323,PL
-3575587324,3575587839,BE
-3575587840,3575588351,GB
-3575588352,3575588863,BE
-3575588864,3575589631,A2
+3575578624,3575589631,BE
3575589632,3575589887,CY
-3575589888,3575590399,BE
-3575590400,3575590655,A2
+3575589888,3575590655,BE
3575590656,3575590911,GB
-3575590912,3575595007,BE
-3575595008,3575595519,GB
-3575595520,3575596287,BE
-3575596288,3575596415,GB
-3575596416,3575596543,BE
-3575596544,3575596799,FR
-3575596800,3575622607,BE
-3575622608,3575622611,GB
-3575622612,3575622655,BE
-3575622656,3575622815,GB
-3575622816,3575622847,BE
-3575622848,3575622879,IT
-3575622880,3575622911,FI
-3575622912,3575623167,GB
-3575623168,3575624703,BE
-3575624704,3575624959,EU
-3575624960,3575624991,GB
-3575624992,3575624999,IT
-3575625000,3575625007,GB
-3575625008,3575625023,NL
-3575625024,3575625027,EG
-3575625028,3575625035,BE
-3575625036,3575625039,GB
-3575625040,3575625047,BE
-3575625048,3575625055,FI
-3575625056,3575625071,BE
-3575625072,3575625087,PL
-3575625088,3575625103,BE
-3575625104,3575625151,GB
-3575625152,3575625351,BE
-3575625352,3575625359,GB
-3575625360,3575625375,BE
-3575625376,3575625407,IT
-3575625408,3575625439,BE
-3575625440,3575625455,ES
-3575625456,3575625471,BE
-3575625472,3575625503,NO
-3575625504,3575625983,BE
-3575625984,3575625991,SE
-3575625992,3575626047,BE
-3575626048,3575626111,FR
-3575626112,3575626319,BE
-3575626320,3575626335,GB
-3575626336,3575626351,ES
-3575626352,3575626367,DE
-3575626368,3575626503,BE
-3575626504,3575626511,CH
-3575626512,3575626519,BE
-3575626520,3575626527,FR
-3575626528,3575626567,BE
-3575626568,3575626575,RO
-3575626576,3575626599,BE
-3575626600,3575626607,IE
-3575626608,3575626631,BE
-3575626632,3575626639,GB
-3575626640,3575626647,DE
-3575626648,3575626655,IT
-3575626656,3575626751,BE
-3575626752,3575627007,A2
-3575627008,3575627311,BE
-3575627312,3575627327,ES
-3575627328,3575627335,SE
-3575627336,3575627359,BE
-3575627360,3575627367,ES
-3575627368,3575627423,BE
-3575627424,3575627431,DE
-3575627432,3575627487,BE
-3575627488,3575627503,GB
-3575627504,3575627711,BE
-3575627712,3575627775,GB
-3575627776,3575628543,NL
-3575628544,3575628631,BE
-3575628632,3575628639,GB
-3575628640,3575628671,BE
-3575628672,3575628687,IE
-3575628688,3575628815,BE
-3575628816,3575628823,ES
-3575628824,3575628831,FR
-3575628832,3575629183,BE
-3575629184,3575629247,NL
-3575629248,3575629279,BE
-3575629280,3575629287,GB
-3575629288,3575629295,BE
-3575629296,3575629303,NL
-3575629304,3575629823,BE
-3575629824,3575629855,GR
-3575629856,3575629871,DE
-3575629872,3575629935,BE
-3575629936,3575629951,FR
-3575629952,3575630015,BE
-3575630016,3575630023,GR
-3575630024,3575630063,BE
-3575630064,3575630079,ZA
-3575630080,3575630335,BE
-3575630336,3575630463,IT
-3575630464,3575630591,CH
-3575630592,3575630847,IL
-3575630848,3575630975,BE
-3575630976,3575630991,FR
-3575630992,3575631103,BE
-3575631104,3575631359,EU
-3575631360,3575631615,BE
-3575631616,3575631631,SE
-3575631632,3575631639,BE
-3575631640,3575631647,CH
-3575631648,3575631663,SE
-3575631664,3575631679,DE
-3575631680,3575631695,SE
-3575631696,3575631711,IT
-3575631712,3575631759,BE
-3575631760,3575631775,ZA
-3575631776,3575631791,BE
-3575631792,3575631799,ES
-3575631800,3575631807,CZ
-3575631808,3575631855,BE
-3575631856,3575631863,ZA
-3575631864,3575631871,BE
-3575631872,3575632127,IL
-3575632128,3575632639,BE
-3575632640,3575632655,NO
-3575632656,3575632703,BE
-3575632704,3575632711,GB
-3575632712,3575632783,BE
-3575632784,3575632791,GB
-3575632792,3575632847,BE
-3575632848,3575632863,CH
-3575632864,3575632879,BE
-3575632880,3575632895,DE
-3575632896,3575632967,BE
-3575632968,3575632975,GB
-3575632976,3575632991,BE
-3575632992,3575632999,IT
-3575633000,3575633039,BE
-3575633040,3575633055,DE
-3575633056,3575633063,SE
-3575633064,3575633071,NL
-3575633072,3575633087,BE
-3575633088,3575633119,GB
-3575633120,3575633135,BE
-3575633136,3575633143,GB
-3575633144,3575633599,BE
-3575633600,3575633663,NL
-3575633664,3575633727,BE
-3575633728,3575633735,AT
-3575633736,3575633743,IT
-3575633744,3575633783,BE
-3575633784,3575633791,DE
-3575633792,3575633887,BE
-3575633888,3575633895,SE
-3575633896,3575633919,BE
-3575633920,3575633983,CH
-3575633984,3575633991,DE
-3575633992,3575633999,BE
-3575634000,3575634007,PT
-3575634008,3575634015,DK
-3575634016,3575634047,GB
-3575634048,3575634183,BE
-3575634184,3575634191,AT
-3575634192,3575634255,BE
-3575634256,3575634271,IT
-3575634272,3575634367,BE
-3575634368,3575634399,NO
-3575634400,3575634431,GB
-3575634432,3575634455,BE
-3575634456,3575634463,DE
-3575634464,3575634495,BE
-3575634496,3575634511,FI
-3575634512,3575634591,BE
-3575634592,3575634599,ES
-3575634600,3575634607,BE
-3575634608,3575634615,GB
-3575634616,3575634623,DE
-3575634624,3575634695,BE
-3575634696,3575634703,FI
-3575634704,3575634711,BE
-3575634712,3575634719,DE
-3575634720,3575634767,BE
-3575634768,3575634775,NO
-3575634776,3575634783,BE
-3575634784,3575634791,FR
-3575634792,3575634799,ES
-3575634800,3575634807,BE
-3575634808,3575634815,SE
-3575634816,3575634879,BE
-3575634880,3575634911,GB
-3575634912,3575634919,SE
-3575634920,3575634927,GB
-3575634928,3575634935,IT
-3575634936,3575635015,BE
-3575635016,3575635023,CH
-3575635024,3575635039,ES
-3575635040,3575635055,BE
-3575635056,3575635063,CH
-3575635064,3575635071,BE
-3575635072,3575635087,SE
-3575635088,3575635103,BE
-3575635104,3575635119,PT
-3575635120,3575635135,PL
-3575635136,3575635151,DE
-3575635152,3575635159,PT
-3575635160,3575635167,DE
-3575635168,3575635175,GB
-3575635176,3575635199,BE
-3575635200,3575635455,NO
-3575635456,3575635463,RU
-3575635464,3575635471,GB
-3575635472,3575635583,BE
-3575635584,3575635615,EG
-3575635616,3575635631,FI
-3575635632,3575635647,BE
-3575635648,3575635679,GB
-3575635680,3575635695,BE
-3575635696,3575635703,GB
-3575635704,3575635775,BE
-3575635776,3575635839,CH
-3575635840,3575635847,GB
-3575635848,3575635855,BE
-3575635856,3575635871,TR
-3575635872,3575635983,BE
-3575635984,3575635999,DE
-3575636000,3575636143,BE
-3575636144,3575636151,HU
-3575636152,3575636607,BE
-3575636608,3575636735,FR
-3575636736,3575636807,BE
-3575636808,3575636815,GB
-3575636816,3575636823,BE
-3575636824,3575636831,RU
-3575636832,3575636855,BE
-3575636856,3575636863,DE
-3575636864,3575636871,BE
-3575636872,3575636879,CZ
-3575636880,3575636895,BE
-3575636896,3575636903,PL
-3575636904,3575636911,CZ
-3575636912,3575636927,BE
-3575636928,3575636959,DE
-3575636960,3575636983,BE
-3575636984,3575636991,FR
-3575636992,3575637039,BE
-3575637040,3575637055,DE
-3575637056,3575637151,BE
-3575637152,3575637183,GB
-3575637184,3575637407,BE
-3575637408,3575637439,LU
-3575637440,3575637471,GB
-3575637472,3575638103,BE
-3575638104,3575638111,GB
-3575638112,3575638175,BE
-3575638176,3575638181,GB
-3575638182,3575638182,EU
-3575638183,3575638239,GB
-3575638240,3575638263,BE
-3575638264,3575638271,PL
-3575638272,3575638279,BE
-3575638280,3575638287,RU
-3575638288,3575638303,BE
-3575638304,3575638335,NO
-3575638336,3575638527,BE
-3575638528,3575638543,DE
-3575638544,3575638559,BE
-3575638560,3575638591,GB
-3575638592,3575638623,BE
-3575638624,3575638639,PL
-3575638640,3575638719,BE
-3575638720,3575638735,NL
-3575638736,3575638751,GR
-3575638752,3575638767,BE
-3575638768,3575638783,SE
-3575638784,3575638911,BE
-3575638912,3575638943,FR
-3575638944,3575638975,GB
-3575638976,3575639007,BE
-3575639008,3575639011,GB
-3575639012,3575639023,IE
-3575639024,3575639039,PL
-3575639040,3575640063,BE
+3575590912,3575640063,BE
3575640064,3575644159,TR
3575644160,3575709695,DK
-3575709696,3575730175,AT
-3575730176,3575730191,SA
-3575730192,3575732735,AT
-3575732736,3575732991,LI
-3575732992,3575736319,AT
-3575736320,3575736895,LI
-3575736896,3575742463,AT
+3575709696,3575739391,AT
+3575739392,3575739647,FR
+3575739648,3575742463,AT
3575742464,3575775231,RU
-3575775232,3575775295,AT
-3575775296,3575775487,NL
-3575775488,3575775743,AT
-3575775744,3575824383,NL
+3575775232,3575824383,NL
3575824384,3575832575,KW
3575832576,3575840767,NL
-3575840768,3575848991,GB
-3575848992,3575849007,NL
-3575849008,3575850255,GB
-3575850256,3575850263,NL
-3575850264,3575850543,GB
-3575850544,3575850559,NL
-3575850560,3575850783,GB
-3575850784,3575850815,NL
-3575850816,3575852799,GB
-3575852800,3575853055,NL
-3575853056,3575853311,GB
-3575853312,3575853375,NL
-3575853376,3575853439,GB
-3575853440,3575853503,NL
-3575853504,3575853567,GB
-3575853568,3575853579,NL
-3575853580,3575853587,GB
-3575853588,3575853591,NL
-3575853592,3575853619,GB
-3575853620,3575853631,NL
-3575853632,3575853635,GB
-3575853636,3575853647,NL
-3575853648,3575853655,GB
-3575853656,3575853663,NL
-3575853664,3575853691,GB
-3575853692,3575853695,NL
-3575853696,3575853719,GB
-3575853720,3575853723,NL
-3575853724,3575853739,GB
-3575853740,3575853743,NL
-3575853744,3575853763,GB
-3575853764,3575853767,NL
-3575853768,3575853799,GB
-3575853800,3575853807,NL
-3575853808,3575853815,GB
-3575853816,3575853823,NL
-3575853824,3575853831,GB
-3575853832,3575853863,NL
-3575853864,3575853871,GB
-3575853872,3575853879,NL
-3575853880,3575853895,GB
-3575853896,3575853927,NL
-3575853928,3575853943,GB
-3575853944,3575853951,NL
-3575853952,3575853959,GB
-3575853960,3575853975,NL
-3575853976,3575853999,GB
-3575854000,3575854015,NL
-3575854016,3575854031,GB
-3575854032,3575854039,NL
-3575854040,3575857151,GB
-3575857152,3575857407,BE
-3575857408,3575858529,GB
-3575858530,3575858543,US
-3575858544,3575860299,GB
-3575860300,3575860303,BE
-3575860304,3575860735,GB
-3575860736,3575860863,NL
-3575860864,3575860991,GB
-3575860992,3575861247,NL
-3575861248,3575861503,GB
-3575861504,3575861519,NL
-3575861520,3575864327,GB
-3575864328,3575864331,NL
-3575864332,3575864343,GB
-3575864344,3575864347,NL
-3575864348,3575864359,GB
-3575864360,3575864363,NL
-3575864364,3575864380,GB
-3575864381,3575864382,NL
-3575864383,3575864387,GB
-3575864388,3575864391,NL
-3575864392,3575864395,GB
-3575864396,3575864403,NL
-3575864404,3575864583,GB
-3575864584,3575864599,NL
-3575864600,3575864607,GB
-3575864608,3575864615,NL
-3575864616,3575864631,GB
-3575864632,3575864639,NL
-3575864640,3575864663,GB
-3575864664,3575864671,NL
-3575864672,3575864687,GB
-3575864688,3575864703,NL
-3575864704,3575864775,GB
-3575864776,3575864783,NL
-3575864784,3575865087,GB
-3575865088,3575865215,NL
-3575865216,3575866367,GB
-3575866368,3575867135,US
-3575867136,3575872047,GB
-3575872048,3575872063,NL
-3575872064,3575872079,GB
-3575872080,3575872095,NL
-3575872096,3575872255,GB
-3575872256,3575872767,NL
-3575872768,3575873535,GB
+3575840768,3575873535,GB
3575873536,3575906303,EE
3575906304,3575971839,FR
3575971840,3576037375,ES
-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,3576040191,EU
-3576040192,3576040447,GB
-3576040448,3576040831,EU
+3576040216,3576040223,GB
+3576040272,3576040287,GB
+3576040352,3576040383,GB
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,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
+3576057040,3576057047,GB
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,3576060095,EU
-3576060096,3576060159,GB
-3576060160,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,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,3576072703,GB
-3576072704,3576073215,EU
+3576072416,3576072447,GB
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,3576076703,EU
-3576076704,3576076719,GB
-3576076720,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,3576086015,EU
3576086016,3576086143,GB
-3576086144,3576086367,EU
-3576086368,3576086431,GB
-3576086432,3576086495,EU
+3576086368,3576086399,GB
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,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,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,3576099071,EU
3576099072,3576100863,GB
-3576100864,3576101375,EU
-3576101376,3576103375,GB
-3576103376,3576103423,FR
-3576103424,3576105791,GB
-3576105792,3576105855,FR
-3576105856,3576107711,GB
-3576107712,3576107743,FR
-3576107744,3576108287,GB
-3576108288,3576108303,FR
-3576108304,3576111423,GB
-3576111424,3576111551,FR
-3576111552,3576119471,GB
-3576119472,3576119487,CH
-3576119488,3576121343,GB
-3576121344,3576121471,CH
-3576121472,3576121855,GB
-3576121856,3576122111,CH
-3576122112,3576133759,GB
-3576133760,3576133775,CH
-3576133776,3576134399,GB
-3576134400,3576134463,SE
-3576134464,3576134655,CH
-3576134656,3576135295,GB
-3576135296,3576135359,CH
-3576135360,3576135679,GB
+3576101376,3576111359,GB
+3576111360,3576111615,FR
+3576111616,3576135679,GB
3576135680,3576168447,DE
3576168448,3576233983,GB
-3576233984,3576236671,FR
-3576236672,3576236687,GB
-3576236688,3576236703,FR
-3576236704,3576236719,GB
-3576236720,3576236743,FR
-3576236744,3576236751,GB
-3576236752,3576236775,FR
-3576236776,3576236783,GB
-3576236784,3576236895,FR
-3576236896,3576236927,GB
-3576236928,3576237055,FR
-3576237056,3576237119,GB
-3576237120,3576237231,FR
-3576237232,3576237311,GB
-3576237312,3576237455,FR
-3576237456,3576237503,GB
-3576237504,3576237575,FR
-3576237576,3576237583,GB
-3576237584,3576237599,FR
-3576237600,3576237631,GB
-3576237632,3576237663,FR
-3576237664,3576237679,GB
-3576237680,3576237711,FR
-3576237712,3576237743,GB
-3576237744,3576237919,FR
-3576237920,3576237935,GB
-3576237936,3576238863,FR
-3576238864,3576238879,GB
-3576238880,3576238927,FR
-3576238928,3576238975,GB
-3576238976,3576239007,FR
-3576239008,3576239023,GB
-3576239024,3576239039,FR
-3576239040,3576239071,GB
-3576239072,3576239087,FR
-3576239088,3576239103,GB
-3576239104,3576240039,FR
-3576240040,3576240047,GB
-3576240048,3576240111,FR
-3576240112,3576240127,GB
-3576240128,3576240475,FR
-3576240476,3576240511,GB
-3576240512,3576240575,FR
-3576240576,3576240895,GB
-3576240896,3576241855,FR
-3576241856,3576241887,GB
-3576241888,3576241951,FR
-3576241952,3576241991,GB
-3576241992,3576242007,FR
-3576242008,3576242031,GB
-3576242032,3576242039,FR
-3576242040,3576242047,GB
-3576242048,3576242111,FR
-3576242112,3576242143,GB
-3576242144,3576244119,FR
-3576244120,3576244143,GB
-3576244144,3576246423,FR
-3576246424,3576246463,GB
-3576246464,3576246656,FR
-3576246657,3576246727,GB
-3576246728,3576246743,FR
-3576246744,3576246751,GB
-3576246752,3576249743,FR
-3576249744,3576249791,GB
-3576249792,3576249807,FR
-3576249808,3576249823,GB
-3576249824,3576249831,FR
-3576249832,3576249839,GB
-3576249840,3576250175,FR
-3576250176,3576250335,GB
-3576250336,3576250623,FR
-3576250624,3576251007,GB
-3576251008,3576251055,FR
-3576251056,3576251095,GB
-3576251096,3576251103,FR
-3576251104,3576251135,GB
-3576251136,3576251407,FR
-3576251408,3576251519,GB
-3576251520,3576251583,FR
-3576251584,3576251599,GB
-3576251600,3576251615,FR
-3576251616,3576251647,GB
-3576251648,3576254543,FR
-3576254544,3576254551,GB
-3576254552,3576254567,FR
-3576254568,3576254575,GB
-3576254576,3576254631,FR
-3576254632,3576254647,GB
-3576254648,3576254847,FR
-3576254848,3576254855,GB
-3576254856,3576254863,FR
-3576254864,3576254879,GB
-3576254880,3576254895,FR
-3576254896,3576254911,GB
-3576254912,3576255375,FR
-3576255376,3576255383,GB
-3576255384,3576255407,FR
-3576255408,3576255423,GB
-3576255424,3576255431,FR
-3576255432,3576255439,GB
-3576255440,3576255447,FR
-3576255448,3576255455,GB
-3576255456,3576255471,FR
-3576255472,3576255479,GB
-3576255480,3576255519,FR
-3576255520,3576255527,GB
-3576255528,3576255543,FR
-3576255544,3576255567,GB
-3576255568,3576255575,FR
-3576255576,3576255583,GB
-3576255584,3576255615,FR
-3576255616,3576255623,GB
-3576255624,3576255631,FR
-3576255632,3576255647,GB
-3576255648,3576255671,FR
-3576255672,3576255679,GB
-3576255680,3576255703,FR
-3576255704,3576255719,GB
-3576255720,3576255727,FR
-3576255728,3576255751,GB
-3576255752,3576255887,FR
-3576255888,3576255919,GB
-3576255920,3576255983,FR
-3576255984,3576255999,GB
-3576256000,3576256127,FR
-3576256128,3576256143,GB
-3576256144,3576256239,FR
-3576256240,3576256255,GB
-3576256256,3576256263,FR
-3576256264,3576256287,GB
-3576256288,3576256351,FR
-3576256352,3576256367,GB
-3576256368,3576256383,FR
-3576256384,3576256415,GB
-3576256416,3576256431,FR
-3576256432,3576256511,GB
-3576256512,3576256895,FR
-3576256896,3576256959,GB
-3576256960,3576256991,FR
-3576256992,3576257007,GB
-3576257008,3576257279,FR
-3576257280,3576257295,GB
-3576257296,3576257327,FR
-3576257328,3576257359,GB
-3576257360,3576257367,FR
-3576257368,3576257375,GB
-3576257376,3576257391,FR
-3576257392,3576257399,GB
-3576257400,3576257439,FR
-3576257440,3576257471,GB
-3576257472,3576257487,FR
-3576257488,3576257535,GB
-3576257536,3576257551,FR
-3576257552,3576257615,GB
-3576257616,3576257631,FR
-3576257632,3576257647,GB
-3576257648,3576257727,FR
-3576257728,3576257807,GB
-3576257808,3576257823,FR
-3576257824,3576257839,GB
-3576257840,3576257855,FR
-3576257856,3576257871,GB
-3576257872,3576257887,FR
-3576257888,3576257903,GB
-3576257904,3576257975,FR
-3576257976,3576258015,GB
-3576258016,3576258351,FR
-3576258352,3576258399,GB
-3576258400,3576258415,FR
-3576258416,3576258431,GB
-3576258432,3576258447,FR
-3576258448,3576258479,GB
-3576258480,3576258495,FR
-3576258496,3576258511,GB
-3576258512,3576258527,FR
-3576258528,3576258575,GB
-3576258576,3576258591,FR
-3576258592,3576258623,GB
-3576258624,3576258671,FR
-3576258672,3576258687,GB
-3576258688,3576258703,FR
-3576258704,3576258783,GB
-3576258784,3576258863,FR
-3576258864,3576258871,GB
-3576258872,3576258887,FR
-3576258888,3576258895,GB
-3576258896,3576259103,FR
-3576259104,3576259199,GB
-3576259200,3576259215,FR
-3576259216,3576259247,GB
-3576259248,3576259279,FR
-3576259280,3576259295,GB
-3576259296,3576259311,FR
-3576259312,3576259327,GB
-3576259328,3576259343,FR
-3576259344,3576259391,GB
-3576259392,3576259423,FR
-3576259424,3576259439,GB
-3576259440,3576259471,FR
-3576259472,3576259487,GB
-3576259488,3576259519,FR
-3576259520,3576259583,GB
-3576259584,3576260095,FR
-3576260096,3576260111,GB
-3576260112,3576260175,FR
-3576260176,3576260191,GB
-3576260192,3576260207,FR
-3576260208,3576260223,GB
-3576260224,3576260239,FR
-3576260240,3576260255,GB
-3576260256,3576260271,FR
-3576260272,3576260287,GB
-3576260288,3576260303,FR
-3576260304,3576260335,GB
-3576260336,3576260415,FR
-3576260416,3576260447,GB
-3576260448,3576260463,FR
-3576260464,3576260543,GB
-3576260544,3576260559,FR
-3576260560,3576260607,GB
-3576260608,3576260655,FR
-3576260656,3576260663,GB
-3576260664,3576260671,FR
-3576260672,3576260679,GB
-3576260680,3576260703,FR
-3576260704,3576260735,GB
-3576260736,3576261415,FR
-3576261416,3576261439,GB
-3576261440,3576261503,FR
-3576261504,3576261631,GB
-3576261632,3576261887,FR
-3576261888,3576261919,GB
-3576261920,3576261927,FR
-3576261928,3576261935,GB
-3576261936,3576262119,FR
-3576262120,3576262127,GB
-3576262128,3576263679,FR
-3576263680,3576263695,ES
-3576263696,3576263831,FR
-3576263832,3576263839,GB
-3576263840,3576263855,FR
-3576263856,3576263871,GB
-3576263872,3576263879,FR
-3576263880,3576263903,GB
-3576263904,3576263911,FR
-3576263912,3576263919,GB
-3576263920,3576264263,FR
-3576264264,3576264271,GB
-3576264272,3576264287,FR
-3576264288,3576264319,GB
-3576264320,3576264383,FR
-3576264384,3576264399,GB
-3576264400,3576264415,FR
-3576264416,3576264439,GB
-3576264440,3576264639,FR
-3576264640,3576264655,GB
-3576264656,3576299519,FR
+3576233984,3576236543,FR
+3576236544,3576241991,GB
+3576241992,3576241999,FR
+3576242000,3576242383,GB
+3576242384,3576242391,FR
+3576242392,3576245247,GB
+3576245248,3576245503,FR
+3576245504,3576251135,GB
+3576251136,3576251391,FR
+3576251392,3576252415,GB
+3576252416,3576252671,FR
+3576252672,3576253807,GB
+3576253808,3576253815,FR
+3576253816,3576254511,GB
+3576254512,3576254527,FR
+3576254528,3576254695,GB
+3576254696,3576254703,FR
+3576254704,3576254775,GB
+3576254776,3576254783,FR
+3576254784,3576260607,GB
+3576260608,3576260623,FR
+3576260624,3576260863,GB
+3576260864,3576261119,FR
+3576261120,3576263447,GB
+3576263448,3576263455,FR
+3576263456,3576263679,GB
+3576263680,3576263935,FR
+3576263936,3576264255,GB
+3576264256,3576264263,FR
+3576264264,3576264351,GB
+3576264352,3576264359,FR
+3576264360,3576264375,GB
+3576264376,3576264383,FR
+3576264384,3576264679,GB
+3576264680,3576264687,FR
+3576264688,3576264959,GB
+3576264960,3576265215,FR
+3576265216,3576266751,GB
+3576266752,3576299519,FR
3576299520,3576365055,AE
3576365056,3576430591,TR
3576430592,3576496127,FR
3576496128,3576561663,IT
-3576561664,3576603135,NL
-3576603136,3576603391,BE
-3576603392,3576603647,FR
-3576603648,3576604159,NL
-3576604160,3576604415,HU
-3576604416,3576605183,NL
-3576605184,3576605439,RO
-3576605440,3576605695,NL
-3576605696,3576605951,CZ
-3576605952,3576606207,AT
-3576606208,3576606463,GB
-3576606464,3576606719,NL
-3576606720,3576606975,SE
-3576606976,3576607231,NO
-3576607232,3576607487,PL
-3576607488,3576607743,DE
-3576607744,3576620543,NL
-3576620544,3576620799,GB
-3576620800,3576622079,NL
-3576622080,3576622591,GB
-3576622592,3576623871,NL
-3576623872,3576624127,AT
-3576624128,3576627199,NL
+3576561664,3576627199,NL
3576627200,3576692735,AT
3576692736,3576758271,GB
3576758272,3576823807,BE
3576823808,3576889343,SE
3576889344,3576954879,NL
3576954880,3576987647,NO
-3576987648,3577000959,GB
-3577000960,3577001215,A2
-3577001216,3577001343,NL
-3577001344,3577001983,GB
-3577001984,3577002751,NL
-3577002752,3577003519,A2
-3577003520,3577003643,NL
-3577003644,3577003647,GB
-3577003648,3577004031,NL
-3577004032,3577020415,GB
+3576987648,3577020415,GB
3577020416,3577085951,NL
3577085952,3577151487,DE
-3577151488,3577151999,FR
-3577152000,3577152511,RE
-3577152512,3577153535,FR
-3577153536,3577154047,RE
-3577154048,3577154303,FR
-3577154304,3577155327,RE
-3577155328,3577155455,FR
-3577155456,3577156735,RE
-3577156736,3577156863,FR
-3577156864,3577159679,RE
-3577159680,3577161727,FR
-3577161728,3577161983,RE
-3577161984,3577162751,FR
-3577162752,3577163263,RE
-3577163264,3577164031,FR
-3577164032,3577164287,RE
-3577164288,3577167871,FR
+3577151488,3577152767,RE
+3577152768,3577154047,FR
+3577154048,3577155583,RE
+3577155584,3577155839,FR
+3577155840,3577156351,RE
+3577156352,3577157631,FR
+3577157632,3577158399,RE
+3577158400,3577158911,FR
+3577158912,3577159167,RE
+3577159168,3577159679,FR
+3577159680,3577159935,RE
+3577159936,3577160959,FR
+3577160960,3577161023,YT
+3577161024,3577161087,FR
+3577161088,3577161215,YT
+3577161216,3577165567,FR
+3577165568,3577166079,RE
+3577166080,3577166591,FR
+3577166592,3577167103,RE
+3577167104,3577167871,FR
3577167872,3577184255,ET
3577184256,3577217023,CH
3577217024,3577282559,FR
3577282560,3577348095,IL
-3577348096,3577392767,PT
-3577392768,3577392783,DE
-3577392784,3577413631,PT
-3577413632,3577417519,RU
-3577417520,3577417535,KZ
-3577417536,3577479167,RU
+3577348096,3577413631,PT
+3577413632,3577479167,RU
3577479168,3577544703,ES
-3577544704,3577545863,DE
-3577545864,3577545871,US
-3577545872,3577545983,DE
+3577544704,3577545983,DE
3577545984,3577546111,SE
-3577546112,3577546239,DE
-3577546240,3577546367,US
-3577546368,3577547487,DE
-3577547488,3577547519,FR
-3577547520,3577551407,DE
-3577551408,3577551411,US
-3577551412,3577557215,DE
-3577557216,3577557231,US
-3577557232,3577571391,DE
-3577571392,3577571399,DK
-3577571400,3577577231,DE
-3577577232,3577577247,US
-3577577248,3577610151,DE
-3577610152,3577610159,FR
-3577610160,3577610367,DE
-3577610368,3577610495,GB
-3577610496,3577610751,DE
-3577610752,3577611199,CH
-3577611200,3577611263,EU
-3577611264,3577612287,DE
-3577612288,3577612319,EU
-3577612320,3577612383,DE
-3577612384,3577612415,EU
-3577612416,3577612543,NO
-3577612544,3577612799,HU
-3577612800,3577613055,FI
-3577613056,3577613311,EU
-3577613312,3577613567,DE
-3577613568,3577614079,EU
-3577614080,3577614111,DE
-3577614112,3577614143,EU
-3577614144,3577614207,DE
-3577614208,3577617919,EU
-3577617920,3577618175,DE
-3577618176,3577618431,EU
-3577618432,3577618447,GB
-3577618448,3577618463,NL
-3577618464,3577618559,GB
-3577618560,3577618623,BE
-3577618624,3577618655,EU
-3577618656,3577618671,AT
-3577618672,3577618687,EU
-3577618688,3577619935,GB
-3577619936,3577619967,EU
-3577619968,3577620575,GB
-3577620576,3577620623,EU
-3577620624,3577620671,GB
-3577620672,3577620735,TR
-3577620736,3577620991,EU
-3577620992,3577621055,GB
-3577621056,3577621119,EU
-3577621120,3577621151,GB
-3577621152,3577621215,EU
-3577621216,3577621223,SK
-3577621224,3577621247,EU
-3577621248,3577622143,GB
-3577622144,3577622271,DE
-3577622272,3577622527,GB
-3577622528,3577622591,EU
-3577622592,3577622927,GB
-3577622928,3577623039,EU
-3577623040,3577623807,GB
-3577623808,3577624063,EU
-3577624064,3577624319,GB
-3577624320,3577624447,EU
-3577624448,3577624879,GB
-3577624880,3577624895,EU
-3577624896,3577625199,GB
-3577625200,3577625207,EU
-3577625208,3577625215,GB
-3577625216,3577625231,EU
-3577625232,3577626623,GB
-3577626624,3577627135,FR
-3577627136,3577627391,EU
-3577627392,3577627647,GB
-3577627648,3577627967,FR
-3577627968,3577627999,EU
-3577628000,3577628671,FR
-3577628672,3577630719,CH
-3577630720,3577632255,GB
-3577632256,3577632511,EU
-3577632512,3577632767,GB
-3577632768,3577633791,EU
-3577633792,3577633951,CZ
-3577633952,3577633959,EU
-3577633960,3577633967,CZ
-3577633968,3577634047,EU
-3577634048,3577634239,CZ
-3577634240,3577634815,EU
-3577634816,3577635455,FR
-3577635456,3577635519,EU
-3577635520,3577635839,FR
+3577546112,3577610239,DE
+3577625600,3577625855,GB
+3577626112,3577626367,GB
+3577628672,3577629695,CH
3577635840,3577636863,DE
-3577636864,3577638143,GB
-3577638144,3577638399,BE
-3577638400,3577638911,GB
-3577638912,3577638959,FR
-3577638960,3577638967,EU
-3577638968,3577639239,FR
-3577639240,3577639247,EU
-3577639248,3577639743,FR
-3577639744,3577639767,EU
-3577639768,3577639783,FR
-3577639784,3577639799,EU
-3577639800,3577639807,FR
-3577639808,3577639839,EU
-3577639840,3577639847,FR
-3577639848,3577639863,EU
-3577639864,3577639871,FR
-3577639872,3577639935,EU
-3577639936,3577640719,FR
-3577640720,3577640735,EU
-3577640736,3577641151,FR
-3577641152,3577641159,EU
-3577641160,3577641471,FR
-3577641472,3577641983,EU
-3577641984,3577642239,GB
-3577642240,3577642495,EU
-3577642496,3577642751,DE
-3577642752,3577643007,FR
-3577643008,3577643231,NL
-3577643232,3577643247,GB
-3577643248,3577643263,NL
-3577643264,3577645431,EU
-3577645432,3577645447,NL
-3577645448,3577645455,EU
-3577645456,3577645503,NL
-3577645504,3577645567,SK
-3577645568,3577645823,EU
-3577645824,3577645887,NL
-3577645888,3577645903,EU
-3577645904,3577645951,NL
-3577645952,3577646079,EU
-3577646080,3577646207,NL
-3577646208,3577646335,NO
-3577646336,3577646407,NL
-3577646408,3577646415,EU
-3577646416,3577646527,NL
-3577646528,3577646591,EU
-3577646592,3577646847,NL
-3577646848,3577647103,EU
-3577647104,3577647911,DK
-3577647912,3577647935,EU
-3577647936,3577647967,DK
-3577647968,3577647999,EU
-3577648000,3577648127,DK
-3577648128,3577648895,EU
-3577648896,3577649151,NL
-3577649152,3577650047,EU
+3577636864,3577637887,GB
+3577641200,3577641215,FR
3577650048,3577650063,NL
-3577650064,3577651199,EU
-3577651200,3577651455,GB
-3577651456,3577652223,EU
-3577652224,3577652671,IT
-3577652672,3577652735,EU
-3577652736,3577652743,NO
-3577652744,3577652751,EU
-3577652752,3577652767,NO
-3577652768,3577652863,EU
-3577652864,3577652943,NO
-3577652944,3577652991,EU
-3577652992,3577653119,NO
-3577653120,3577653247,EU
3577653248,3577655295,IT
-3577655296,3577655519,AT
-3577655520,3577655551,EU
-3577655552,3577655647,AT
-3577655648,3577655663,EU
-3577655664,3577655679,AT
-3577655680,3577655711,EU
-3577655712,3577655743,AT
-3577655744,3577655807,EU
-3577655808,3577656447,AT
-3577656448,3577657343,EU
-3577657344,3577657599,GB
-3577657600,3577657663,EU
-3577657664,3577659391,GB
-3577659392,3577659679,GR
-3577659680,3577659711,EU
-3577659712,3577659743,GR
-3577659744,3577659903,EU
-3577659904,3577660159,GB
-3577660160,3577660607,BE
-3577660608,3577660671,EU
-3577660672,3577661439,BE
-3577661440,3577663487,EU
-3577663488,3577665215,SE
-3577665216,3577665247,EU
-3577665248,3577665311,SE
-3577665312,3577665343,EU
-3577665344,3577665375,SE
-3577665376,3577665407,EU
-3577665408,3577665455,SE
-3577665456,3577665535,EU
-3577665536,3577665591,ES
-3577665592,3577665599,EU
-3577665600,3577665607,ES
-3577665608,3577665615,EU
-3577665616,3577665679,ES
-3577665680,3577665791,EU
-3577665792,3577665823,BE
-3577665824,3577665855,RO
-3577665856,3577665919,LU
-3577665920,3577666047,EU
-3577666048,3577666175,ES
-3577666176,3577667583,EU
-3577667584,3577667743,PL
-3577667744,3577668639,EU
-3577668640,3577668671,IE
-3577668672,3577668735,EU
-3577668736,3577668799,IE
-3577668800,3577669119,EU
-3577669120,3577669383,HU
-3577669384,3577669503,EU
-3577669504,3577669631,HU
-3577669632,3577671679,BE
-3577671680,3577672191,ZA
-3577672192,3577673727,DE
-3577673728,3577675775,EU
+3577663488,3577664511,SE
+3577669632,3577670655,BE
3577675776,3577741311,PT
3577741312,3578003455,SE
-3578003456,3578040319,DE
-3578040320,3578040575,EU
-3578040576,3578049023,DE
-3578049024,3578049055,CH
-3578049056,3578064383,DE
-3578064384,3578064508,EU
-3578064509,3578064510,DE
-3578064511,3578064639,EU
-3578064640,3578159615,DE
-3578159616,3578159871,EU
-3578159872,3578208127,DE
-3578208128,3578208191,PK
-3578208192,3578234623,DE
-3578234624,3578234879,EU
-3578234880,3578265599,DE
+3578003456,3578265599,DE
3578265600,3578331135,GB
3578331136,3578339327,PL
3578339328,3578347519,ES
@@ -167539,278 +86802,23 @@
3578855424,3578888191,GB
3578888192,3578920959,SK
3578920960,3578986495,IT
-3578986496,3578988095,DE
-3578988096,3578988099,CH
-3578988100,3578992895,DE
-3578992896,3578992927,CH
-3578992928,3578992959,DE
-3578992960,3578992975,GB
-3578992976,3578996999,DE
-3578997000,3578997007,CH
-3578997008,3578997935,DE
-3578997936,3578997943,FR
-3578997944,3578998575,DE
-3578998576,3578998583,GB
-3578998584,3578999647,DE
-3578999648,3578999651,CH
-3578999652,3579002879,DE
+3578986496,3579002879,DE
3579002880,3579019263,GB
3579019264,3579052031,DK
3579052032,3579117567,NL
-3579117568,3579132159,RU
-3579132160,3579132415,BY
-3579132416,3579183103,RU
-3579183104,3579183247,GB
-3579183248,3579183263,DE
-3579183264,3579188239,GB
-3579188240,3579188255,BE
-3579188256,3579188415,GB
-3579188416,3579188431,IS
-3579188432,3579189071,GB
-3579189072,3579189087,CH
-3579189088,3579193599,GB
-3579193600,3579193655,BE
-3579193656,3579193663,NL
-3579193664,3579193855,BE
-3579193856,3579194103,GB
-3579194104,3579194111,US
-3579194112,3579197055,GB
-3579197056,3579197183,US
-3579197184,3579197311,GB
+3579117568,3579183103,RU
+3579183104,3579193759,GB
+3579193760,3579193775,NL
+3579193776,3579197311,GB
3579197312,3579197439,US
-3579197440,3579197887,GB
-3579197888,3579197903,IT
-3579197904,3579204127,GB
-3579204128,3579204143,BE
-3579204144,3579204231,GB
-3579204232,3579204239,IE
-3579204240,3579204271,GB
-3579204272,3579204287,DE
-3579204288,3579204303,GB
-3579204304,3579204319,NL
-3579204320,3579205631,GB
-3579205632,3579205887,IE
-3579205888,3579210079,GB
-3579210080,3579210087,BE
-3579210088,3579212287,GB
-3579212288,3579212543,FR
-3579212544,3579213247,GB
-3579213248,3579213311,IT
-3579213312,3579221023,GB
-3579221024,3579221039,FR
-3579221040,3579221071,GB
-3579221072,3579221087,DE
-3579221088,3579221103,GB
-3579221104,3579221119,IT
-3579221120,3579221471,GB
-3579221472,3579221503,ES
-3579221504,3579223071,GB
-3579223072,3579223087,BE
-3579223088,3579223103,FR
-3579223104,3579226143,GB
-3579226144,3579226151,DE
-3579226152,3579226327,GB
-3579226328,3579226351,FR
-3579226352,3579228191,GB
-3579228192,3579228207,IT
-3579228208,3579228223,ES
-3579228224,3579228671,GB
-3579228672,3579228799,US
-3579228800,3579231815,GB
-3579231816,3579231831,FR
-3579231832,3579231919,GB
-3579231920,3579231927,US
-3579231928,3579237183,GB
-3579237184,3579237215,DE
-3579237216,3579237247,NL
-3579237248,3579240143,GB
-3579240144,3579240159,CH
-3579240160,3579241151,GB
-3579241152,3579241215,IE
-3579241216,3579244375,GB
-3579244376,3579244383,CH
-3579244384,3579247199,GB
-3579247200,3579247207,DE
-3579247208,3579247223,GB
-3579247224,3579247231,FR
-3579247232,3579247271,GB
-3579247272,3579247279,US
-3579247280,3579247311,GB
-3579247312,3579247319,FR
-3579247320,3579247391,GB
-3579247392,3579247399,US
-3579247400,3579247407,GB
-3579247408,3579247415,US
-3579247416,3579247535,GB
-3579247536,3579247543,IE
-3579247544,3579247567,GB
-3579247568,3579247575,DE
-3579247576,3579247583,GB
-3579247584,3579247615,US
-3579247616,3579248135,GB
-3579248136,3579248143,DE
-3579248144,3579248639,GB
+3579197440,3579248639,GB
3579248640,3579346943,RU
-3579346944,3579361535,SE
-3579361536,3579361791,NO
-3579361792,3579362047,SE
-3579362048,3579362063,NO
-3579362064,3579362303,SE
-3579362304,3579362559,NO
-3579362560,3579362815,SE
-3579362816,3579363327,NO
-3579363328,3579445247,SE
-3579445248,3579463679,AT
-3579463680,3579463683,US
-3579463684,3579478015,AT
-3579478016,3579480847,FR
-3579480848,3579480855,NL
-3579480856,3579480863,FR
-3579480864,3579480871,NL
-3579480872,3579481095,FR
-3579481096,3579481103,CH
-3579481104,3579481119,FR
-3579481120,3579481127,GB
-3579481128,3579481143,FR
-3579481144,3579481151,CH
-3579481152,3579481159,FR
-3579481160,3579481167,GB
-3579481168,3579481191,FR
-3579481192,3579481199,CH
-3579481200,3579481247,FR
-3579481248,3579481255,GB
-3579481256,3579481263,CH
-3579481264,3579481279,FR
-3579481280,3579481287,GB
-3579481288,3579482623,FR
-3579482624,3579482783,NL
-3579482784,3579482799,FR
-3579482800,3579482927,NL
-3579482928,3579482943,FR
-3579482944,3579482991,NL
-3579482992,3579483151,FR
-3579483152,3579483263,NL
-3579483264,3579483295,FR
-3579483296,3579483311,NL
-3579483312,3579483359,FR
-3579483360,3579483375,NL
-3579483376,3579484751,FR
-3579484752,3579484767,BE
-3579484768,3579485263,FR
-3579485264,3579485279,BE
-3579485280,3579485695,FR
-3579485696,3579485711,GB
-3579485712,3579485714,FR
-3579485715,3579485727,GB
-3579485728,3579485807,FR
-3579485808,3579485823,GB
-3579485824,3579485887,FR
-3579485888,3579485888,GB
-3579485889,3579485903,FR
-3579485904,3579485919,DE
-3579485920,3579485983,FR
-3579485984,3579485999,CH
-3579486000,3579486015,FR
-3579486016,3579486031,GB
-3579486032,3579486047,DE
-3579486048,3579486095,GB
-3579486096,3579486143,FR
-3579486144,3579486175,GB
-3579486176,3579486191,FR
-3579486192,3579486207,GB
-3579486208,3579486271,FR
-3579486272,3579486287,GB
-3579486288,3579486303,FR
-3579486304,3579486319,GB
-3579486320,3579486335,FR
-3579486336,3579486351,GB
-3579486352,3579486367,FR
-3579486368,3579486383,IT
-3579486384,3579486399,DE
-3579486400,3579486415,FR
-3579486416,3579486431,DE
-3579486432,3579486447,GB
-3579486448,3579486735,FR
-3579486736,3579486751,DE
-3579486752,3579486831,FR
-3579486832,3579486847,BE
-3579486848,3579486863,FR
-3579486864,3579486879,GB
-3579486880,3579487007,FR
-3579487008,3579487039,GB
-3579487040,3579487055,DE
-3579487056,3579487103,FR
-3579487104,3579487119,GB
-3579487120,3579487215,FR
-3579487216,3579487231,GB
-3579487232,3579487247,FR
-3579487248,3579487263,GB
-3579487264,3579487471,FR
-3579487472,3579487487,ES
-3579487488,3579487519,FR
-3579487520,3579487531,IT
-3579487532,3579487535,FR
-3579487536,3579487551,GB
-3579487552,3579487567,FR
-3579487568,3579487583,GB
-3579487584,3579487599,FR
-3579487600,3579487615,IT
-3579487616,3579487663,FR
-3579487664,3579487711,DE
-3579487712,3579487727,SE
-3579487728,3579487743,GB
-3579487744,3579487807,FR
-3579487808,3579487823,GB
-3579487824,3579487855,FR
-3579487856,3579487871,GB
-3579487872,3579487887,IE
-3579487888,3579487903,DE
-3579487904,3579487951,FR
-3579487952,3579487967,GB
-3579487968,3579487983,IT
-3579487984,3579487999,GB
-3579488000,3579488047,FR
-3579488048,3579488079,GB
-3579488080,3579490559,FR
-3579490560,3579490655,PT
-3579490656,3579490671,FR
-3579490672,3579490719,PT
-3579490720,3579490735,NL
-3579490736,3579490751,FR
-3579490752,3579490799,PT
-3579490800,3579490831,FR
-3579490832,3579490943,PT
-3579490944,3579490959,FR
-3579490960,3579490975,PT
-3579490976,3579491007,FR
-3579491008,3579491023,PT
-3579491024,3579491231,FR
-3579491232,3579491247,PT
-3579491248,3579491263,NL
-3579491264,3579491471,FR
-3579491472,3579491487,PT
-3579491488,3579497983,FR
-3579497984,3579497991,NL
-3579497992,3579527167,FR
+3579346944,3579445247,SE
+3579445248,3579478015,AT
+3579478016,3579527167,FR
3579527168,3579543551,BA
-3579543552,3579553535,BG
-3579553536,3579553791,A2
-3579553792,3579576319,BG
-3579576320,3579581821,IT
-3579581822,3579581822,EU
-3579581823,3579595967,IT
-3579595968,3579595983,A2
-3579595984,3579596799,IT
-3579596800,3579597055,EU
-3579597056,3579600191,IT
-3579600192,3579600207,US
-3579600208,3579601471,IT
-3579601472,3579601487,US
-3579601488,3579605487,IT
-3579605488,3579605503,DE
-3579605504,3579607551,IT
-3579607552,3579607807,US
-3579607808,3579609087,IT
+3579543552,3579576319,BG
+3579576320,3579609087,IT
3579609088,3579641855,PL
3579641856,3579707391,NL
3579707392,3579723775,ES
@@ -167818,60 +86826,49 @@
3579740160,3579772927,IE
3579772928,3579838463,DE
3579838464,3580100607,ES
-3580100608,3580103167,SE
-3580103168,3580103679,LV
-3580103680,3580104703,SE
-3580104704,3580107775,LV
-3580107776,3580110079,SE
-3580110080,3580110143,LV
-3580110144,3580110495,SE
-3580110496,3580110511,LV
-3580110512,3580110527,SE
-3580110528,3580110543,LV
-3580110544,3580112895,SE
+3580100608,3580103679,SE
+3580103680,3580106751,LV
+3580106752,3580112895,SE
3580112896,3580116991,LV
-3580116992,3580133375,SE
-3580133376,3580133887,LV
-3580133888,3580138495,SE
-3580138496,3580139007,HR
-3580139008,3580150783,SE
+3580116992,3580131327,SE
+3580131328,3580133375,LV
+3580133376,3580135423,SE
+3580135424,3580135531,EE
+3580135532,3580135532,SE
+3580135533,3580135935,EE
+3580135936,3580136447,SE
+3580136448,3580138495,HR
+3580138496,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,3580199935,SE
+3580199936,3580200447,EE
+3580200448,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
3580209152,3580213247,HR
-3580213248,3580214783,LV
-3580214784,3580215295,HR
+3580213248,3580214271,LV
+3580214272,3580215295,SE
3580215296,3580217343,EE
-3580217344,3580220415,SE
-3580220416,3580221439,LV
-3580221440,3580221951,HR
-3580221952,3580222207,EE
-3580222208,3580222335,SE
-3580222336,3580222719,HR
-3580222720,3580222975,SE
-3580222976,3580223487,HR
+3580217344,3580223487,SE
3580223488,3580231679,DE
-3580231680,3580231935,LT
-3580231936,3580232447,LV
-3580232448,3580233727,LT
-3580233728,3580234751,NO
-3580234752,3580236799,LT
+3580231680,3580232447,SE
+3580232448,3580233215,LT
+3580233216,3580233727,SE
+3580233728,3580235263,LT
+3580235264,3580235775,SE
+3580235776,3580236799,LT
3580236800,3580237567,LV
-3580237568,3580237823,LT
-3580237824,3580239871,LV
+3580237568,3580239871,SE
3580239872,3580241919,EE
3580241920,3580243967,SE
3580243968,3580244991,EE
@@ -167880,62 +86877,38 @@
3580248064,3580254207,EE
3580254208,3580255231,LV
3580255232,3580258303,DE
-3580258304,3580258559,LV
-3580258560,3580260351,DE
-3580260352,3580265727,AT
-3580265728,3580268543,EE
+3580258304,3580258815,SE
+3580258816,3580260351,DE
+3580260352,3580265471,AT
+3580265472,3580266495,SE
+3580266496,3580268543,EE
3580268544,3580272639,LV
3580272640,3580276735,SE
3580276736,3580280831,NL
3580280832,3580329983,RU
-3580329984,3580338175,SE
-3580338176,3580339711,HR
+3580329984,3580338175,NL
+3580338176,3580338687,SE
+3580338688,3580339199,HR
+3580339200,3580339711,SE
3580339712,3580340223,EE
3580340224,3580344319,LT
-3580344320,3580345343,SE
-3580345344,3580345855,EE
-3580345856,3580354559,SE
+3580344320,3580354559,SE
3580354560,3580362751,LT
-3580362752,3580473375,GB
-3580473376,3580473391,IE
-3580473392,3580473503,GB
-3580473504,3580473511,IE
-3580473512,3580473519,GB
-3580473520,3580473527,IE
-3580473528,3580473695,GB
-3580473696,3580473727,IE
-3580473728,3580473759,GB
-3580473760,3580473887,IE
-3580473888,3580473951,GB
-3580473952,3580473959,IE
-3580473960,3580473967,GB
-3580473968,3580473983,IE
-3580473984,3580473999,GB
-3580474000,3580474007,IE
-3580474008,3580474095,GB
-3580474096,3580474111,IE
-3580474112,3580474495,GB
-3580474496,3580474559,IE
-3580474560,3580475055,GB
-3580475056,3580475063,IE
-3580475064,3580475123,GB
-3580475124,3580475127,IE
-3580475128,3580475343,GB
-3580475344,3580475351,IE
-3580475352,3580624895,GB
+3580362752,3580473871,GB
+3580473872,3580473887,IE
+3580473888,3580624895,GB
3580624896,3580626943,RU
3580626944,3580628991,PL
3580628992,3580631039,RU
-3580631040,3580632831,NL
-3580632832,3580633087,GB
+3580631040,3580633087,NL
3580633088,3580635135,RU
3580635136,3580637183,UA
-3580637184,3580639231,KZ
3580639232,3580641279,PL
3580641280,3580643327,FR
3580643328,3580645375,UA
3580645376,3580647423,PL
-3580647424,3580649471,DE
+3580647424,3580647935,GB
+3580647936,3580649471,DE
3580649472,3580651519,SE
3580651520,3580653567,NL
3580653568,3580655615,PL
@@ -167967,53 +86940,22 @@
3580821504,3580837887,FR
3580837888,3580887039,UA
3580887040,3581149183,SE
-3581149184,3581150367,EU
-3581150368,3581150463,IE
-3581150464,3581150591,EU
-3581150592,3581150719,NL
-3581150720,3581150783,SE
-3581150784,3581150975,EU
-3581150976,3581151039,SE
-3581151040,3581151231,EU
-3581151232,3581151295,SE
-3581151296,3581154047,EU
-3581154048,3581154303,NL
-3581154304,3581157119,EU
-3581157120,3581158655,AT
-3581158656,3581159167,EU
-3581159168,3581159295,AT
-3581159296,3581159423,EU
+3581157376,3581158399,AT
3581159424,3581161471,IE
-3581161472,3581173759,EU
-3581173760,3581196799,NL
-3581196800,3581197311,EU
-3581197312,3581197567,IE
-3581197568,3581197823,EU
-3581197824,3581198335,GB
-3581198336,3581200127,NL
-3581200128,3581203967,EU
-3581203968,3581214719,SE
+3581173760,3581196287,NL
+3581198336,3581199359,NL
+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,3581261311,EU
-3581261312,3581261439,FR
-3581261440,3581279103,EU
-3581279104,3581279199,NL
-3581279200,3581280255,EU
+3581255680,3581258751,FR
3581280256,3581411327,BE
3581411328,3581673471,GB
3581673472,3581935615,NL
3581935616,3581943807,RU
3581943808,3581951999,FR
3581952000,3581960191,TR
-3581960192,3581966849,DE
-3581966850,3581966850,EU
-3581966851,3581976575,DE
+3581960192,3581976575,DE
3581976576,3581984767,NO
3581984768,3581992959,RU
3581992960,3582001151,GB
@@ -168026,37 +86968,19 @@
3582050304,3582058495,NL
3582058496,3582066687,AT
3582066688,3582074879,UA
-3582074880,3582074967,GB
-3582074968,3582074975,DE
-3582074976,3582075391,GB
-3582075392,3582075535,DE
-3582075536,3582076079,GB
-3582076080,3582076095,AE
-3582076096,3582076863,GB
-3582076864,3582076895,DE
-3582076896,3582076927,GB
-3582076928,3582077111,ES
-3582077112,3582077439,GB
-3582077440,3582077791,DE
-3582077792,3582078090,GB
+3582074880,3582077439,GB
+3582077440,3582077471,DE
+3582077472,3582078090,GB
3582078091,3582078091,CH
-3582078092,3582078631,GB
-3582078632,3582078639,DE
-3582078640,3582081055,GB
-3582081056,3582081087,ES
-3582081088,3582081535,GB
-3582081536,3582081791,DE
-3582081792,3582083071,GB
+3582078092,3582083071,GB
3582083072,3582091263,BG
3582091264,3582099455,QA
3582099456,3582107647,GB
3582107648,3582115839,NL
-3582115840,3582116095,SE
-3582116096,3582116351,EE
-3582116352,3582116863,NO
+3582115840,3582116863,SE
3582116864,3582117887,EE
3582117888,3582120447,LT
-3582120448,3582120959,NO
+3582120448,3582120959,SE
3582120960,3582121983,EE
3582121984,3582124031,LT
3582124032,3582132223,FI
@@ -168068,17 +86992,7 @@
3582173184,3582181375,GB
3582181376,3582190927,DE
3582190928,3582190931,FR
-3582190932,3582190943,DE
-3582190944,3582190951,PL
-3582190952,3582192127,DE
-3582192128,3582192143,NL
-3582192144,3582193151,DE
-3582193152,3582193407,EU
-3582193408,3582194775,DE
-3582194776,3582194783,CY
-3582194784,3582197127,DE
-3582197128,3582197135,BZ
-3582197136,3582197759,DE
+3582190932,3582197759,DE
3582197760,3582205951,DK
3582205952,3582214143,AE
3582214144,3582222335,RU
@@ -168086,117 +87000,28 @@
3582224376,3582224379,FI
3582224380,3582225719,SE
3582225720,3582225727,FI
-3582225728,3582226031,SE
-3582226032,3582226047,NO
-3582226048,3582227199,SE
-3582227200,3582227231,NO
-3582227232,3582227391,SE
+3582225728,3582227391,SE
3582227392,3582227455,FI
3582227456,3582230527,SE
3582230528,3582238719,BE
3582238720,3582251319,NL
3582251320,3582251327,FI
3582251328,3582255103,NL
-3582255104,3582263039,KW
-3582263040,3582263295,A2
+3582255104,3582263295,KW
3582263296,3582271487,ME
3582271488,3582279679,NL
3582279680,3582287871,GB
3582287872,3582296063,DE
3582296064,3582304255,GB
3582304256,3582312447,UA
-3582312448,3582313249,JE
-3582313250,3582313250,GB
-3582313251,3582313256,JE
-3582313257,3582313260,GB
-3582313261,3582313271,JE
-3582313272,3582313342,GB
-3582313343,3582313343,JE
-3582313344,3582313470,GB
-3582313471,3582313471,JE
-3582313472,3582313559,GB
-3582313560,3582313567,JE
-3582313568,3582313599,GB
-3582313600,3582313695,JE
-3582313696,3582313726,GB
-3582313727,3582313727,JE
-3582313728,3582313743,GB
-3582313744,3582313759,JE
-3582313760,3582313775,GB
-3582313776,3582313791,JE
-3582313792,3582313799,GB
-3582313800,3582313807,JE
-3582313808,3582313871,GB
-3582313872,3582313967,JE
-3582313968,3582313982,GB
-3582313983,3582313991,JE
-3582313992,3582314007,GB
-3582314008,3582314015,JE
-3582314016,3582314079,GB
-3582314080,3582314095,JE
-3582314096,3582314119,GB
-3582314120,3582314127,JE
-3582314128,3582314167,GB
-3582314168,3582314175,JE
-3582314176,3582314187,GB
-3582314188,3582314195,JE
-3582314196,3582314199,GB
-3582314200,3582314207,JE
-3582314208,3582314235,GB
-3582314236,3582314239,JE
-3582314240,3582314263,GB
-3582314264,3582314271,JE
-3582314272,3582314303,GB
-3582314304,3582314311,JE
-3582314312,3582314343,GB
-3582314344,3582314383,JE
-3582314384,3582314399,GB
-3582314400,3582314415,JE
-3582314416,3582314443,GB
-3582314444,3582314447,JE
-3582314448,3582314451,GB
-3582314452,3582314455,JE
-3582314456,3582314491,GB
-3582314492,3582315519,JE
-3582315520,3582315775,GB
-3582315776,3582316543,JE
-3582316544,3582316863,GB
-3582316864,3582316871,JE
-3582316872,3582317055,GB
-3582317056,3582317311,JE
-3582317312,3582317479,GB
-3582317480,3582317487,JE
-3582317488,3582317567,GB
-3582317568,3582318079,JE
-3582318080,3582318399,GB
-3582318400,3582318407,JE
-3582318408,3582318511,GB
-3582318512,3582318519,JE
-3582318520,3582318591,GB
-3582318592,3582318847,JE
-3582318848,3582318935,GB
-3582318936,3582318943,JE
-3582318944,3582318999,GB
-3582319000,3582319007,JE
-3582319008,3582319103,GB
-3582319104,3582319487,JE
-3582319488,3582319870,GB
-3582319871,3582319871,JE
-3582319872,3582319879,GB
-3582319880,3582319887,JE
-3582319888,3582319895,GB
-3582319896,3582319903,JE
-3582319904,3582319927,GB
-3582319928,3582319935,JE
-3582319936,3582320207,GB
-3582320208,3582320367,JE
-3582320368,3582320375,GB
-3582320376,3582320639,JE
+3582312448,3582313855,JE
+3582313856,3582313871,GB
+3582313872,3582320639,JE
3582320640,3582328831,CH
3582328832,3582337023,HU
-3582337024,3582341119,ES
-3582341120,3582343167,PT
-3582343168,3582345215,ES
+3582337024,3582343167,ES
+3582343168,3582343423,PT
+3582343424,3582345215,ES
3582345216,3582353407,IT
3582353408,3582361599,SE
3582361600,3582377983,PL
@@ -168208,210 +87033,20 @@
3582435328,3582443519,MK
3582443520,3582451711,DE
3582451712,3582459903,LU
-3582459904,3582462143,NL
-3582462144,3582462207,DE
-3582462208,3582467135,NL
-3582467136,3582467199,DE
-3582467200,3582468095,NL
+3582459904,3582468095,NL
3582468096,3582476287,SE
3582476288,3582484479,DE
3582484480,3582492671,CI
3582492672,3582509055,IT
3582509056,3582517247,SA
3582517248,3582525439,PL
-3582525440,3582525695,IM
-3582525696,3582525743,GB
-3582525744,3582525747,IM
-3582525748,3582525879,GB
-3582525880,3582525895,IM
-3582525896,3582526059,GB
-3582526060,3582526063,IM
-3582526064,3582526135,GB
-3582526136,3582526143,IM
-3582526144,3582526151,GB
-3582526152,3582526159,IM
-3582526160,3582526207,GB
-3582526208,3582527743,IM
-3582527744,3582529023,GB
-3582529024,3582530303,IM
-3582530304,3582530399,GB
-3582530400,3582530815,IM
-3582530816,3582530951,GB
-3582530952,3582530959,IM
-3582530960,3582530979,GB
-3582530980,3582530983,IM
-3582530984,3582530991,GB
-3582530992,3582530999,IM
-3582531000,3582531031,GB
-3582531032,3582531039,IM
-3582531040,3582531135,GB
-3582531136,3582531631,IM
-3582531632,3582531651,GB
-3582531652,3582531663,IM
-3582531664,3582531671,GB
-3582531672,3582531695,IM
-3582531696,3582531767,GB
-3582531768,3582531775,IM
-3582531776,3582531783,GB
-3582531784,3582531791,IM
-3582531792,3582531799,GB
-3582531800,3582531807,IM
-3582531808,3582531823,GB
-3582531824,3582532607,IM
-3582532608,3582532927,GB
-3582532928,3582532983,IM
-3582532984,3582532991,GB
-3582532992,3582533119,IM
-3582533120,3582533631,GB
-3582533632,3582534143,BG
-3582534144,3582534399,RO
-3582534400,3582538183,BG
-3582538184,3582538191,GB
-3582538192,3582541311,BG
-3582541312,3582541567,RO
-3582541568,3582541823,BG
+3582525440,3582533631,IM
+3582533632,3582541823,BG
3582541824,3582550015,US
3582550016,3582558207,RS
-3582558208,3582558487,MC
-3582558488,3582558571,EU
-3582558572,3582558751,MC
-3582558752,3582558783,EU
-3582558784,3582558815,MC
-3582558816,3582558847,EU
-3582558848,3582559283,MC
-3582559284,3582559288,EU
-3582559289,3582559294,MC
-3582559295,3582559295,EU
-3582559296,3582559487,MC
-3582559488,3582559647,EU
-3582559648,3582560255,MC
-3582560256,3582560511,GN
-3582560512,3582560527,MC
-3582560528,3582561039,EU
-3582561040,3582561055,MC
-3582561056,3582561057,EU
-3582561058,3582561071,MC
-3582561072,3582566431,EU
-3582566432,3582566479,BE
-3582566480,3582566527,EU
-3582566528,3582566591,BE
-3582566592,3582566735,EU
-3582566736,3582566743,BE
-3582566744,3582566751,EU
-3582566752,3582566767,BE
-3582566768,3582566783,EU
-3582566784,3582566847,BE
-3582566848,3582566911,EU
-3582566912,3582567019,BE
-3582567020,3582567023,EU
-3582567024,3582567039,BE
-3582567040,3582567135,EU
-3582567136,3582567151,BE
-3582567152,3582567231,EU
-3582567232,3582567295,BE
-3582567296,3582567391,EU
-3582567392,3582567399,BE
-3582567400,3582567423,EU
-3582567424,3582567807,US
-3582567808,3582567903,EU
-3582567904,3582567935,US
-3582567936,3582568215,EU
-3582568216,3582568223,SE
-3582568224,3582568247,EU
-3582568248,3582568263,SE
-3582568264,3582568335,EU
-3582568336,3582568339,SE
-3582568340,3582568439,EU
-3582568440,3582568447,SE
-3582568448,3582568703,US
-3582568704,3582568831,EU
-3582568832,3582568959,US
-3582568960,3582568975,HU
-3582568976,3582568991,EU
-3582568992,3582569023,CZ
-3582569024,3582569031,EU
-3582569032,3582569035,AT
-3582569036,3582569039,DE
-3582569040,3582569043,AT
-3582569044,3582569079,EU
-3582569080,3582569087,HU
-3582569088,3582569095,EU
-3582569096,3582569103,HU
-3582569104,3582569207,EU
-3582569208,3582569215,AT
-3582569216,3582569279,EU
-3582569280,3582569295,AT
-3582569296,3582569471,EU
-3582569472,3582569535,FR
-3582569536,3582569983,EU
-3582569984,3582570239,FR
-3582570240,3582570399,GB
-3582570400,3582570487,FR
-3582570488,3582570751,EU
-3582570752,3582571263,FR
-3582571264,3582571303,EU
-3582571304,3582571307,CH
-3582571308,3582571375,EU
-3582571376,3582571391,FR
-3582571392,3582571407,EU
-3582571408,3582571423,FR
-3582571424,3582571455,EU
-3582571456,3582571487,FR
-3582571488,3582571647,EU
-3582571648,3582571687,IE
-3582571688,3582571695,EU
-3582571696,3582571703,IE
-3582571704,3582571707,EU
-3582571708,3582571719,IE
-3582571720,3582571751,EU
-3582571752,3582571839,IE
-3582571840,3582571999,EU
-3582572000,3582572015,IE
-3582572016,3582572415,EU
+3582558208,3582570911,MC
+3582570912,3582570943,FR
3582572416,3582572423,CH
-3582572424,3582572447,EU
-3582572448,3582572451,CH
-3582572452,3582572455,EU
-3582572456,3582572459,CH
-3582572460,3582572479,EU
-3582572480,3582572543,CH
-3582572544,3582572559,EU
-3582572560,3582572567,DE
-3582572568,3582572799,EU
-3582572800,3582572863,DE
-3582572864,3582572943,EU
-3582572944,3582572951,DE
-3582572952,3582572975,EU
-3582572976,3582572983,DE
-3582572984,3582573023,EU
-3582573024,3582573055,DE
-3582573056,3582573087,EU
-3582573088,3582573095,DE
-3582573096,3582573103,EU
-3582573104,3582573111,DE
-3582573112,3582573127,EU
-3582573128,3582573135,DE
-3582573136,3582573407,EU
-3582573408,3582573423,DE
-3582573424,3582573431,EU
-3582573432,3582573439,DE
-3582573440,3582573511,EU
-3582573512,3582573519,DE
-3582573520,3582573551,EU
-3582573552,3582573567,DE
-3582573568,3582573599,EU
-3582573600,3582573615,CH
-3582573616,3582573823,EU
-3582573824,3582573887,CH
-3582573888,3582573895,EU
-3582573896,3582573903,CH
-3582573904,3582573919,EU
-3582573920,3582573951,CH
-3582573952,3582574431,EU
-3582574432,3582574435,CH
-3582574436,3582574455,EU
-3582574456,3582574463,CH
-3582574464,3582574591,EU
3582574592,3582582783,DE
3582582784,3582590975,RU
3582590976,3582599167,FR
@@ -168419,17 +87054,11 @@
3582607360,3582615551,RU
3582615552,3582623743,GB
3582623744,3582631935,FI
-3582631936,3582635007,NO
-3582635008,3582635263,SE
-3582635264,3582640127,NO
+3582631936,3582640127,NO
3582640128,3582648319,RU
3582648320,3582656511,PT
-3582656512,3582664047,ES
-3582664048,3582664055,FR
-3582664056,3582664703,ES
-3582664704,3582668095,JO
-3582668096,3582668223,US
-3582668224,3582672895,JO
+3582656512,3582664703,ES
+3582664704,3582672895,JO
3582672896,3582681087,DE
3582681088,3582689279,FR
3582689280,3582697471,DE
@@ -168443,16 +87072,12 @@
3582746624,3582754815,RU
3582754816,3582763007,GR
3582763008,3582771199,FI
-3582771200,3582772479,CY
-3582772480,3582772735,GB
-3582772736,3582779391,CY
+3582771200,3582779391,CY
3582779392,3582787583,RU
3582787584,3582795775,PT
3582795776,3582803967,ES
3582803968,3582812159,SE
-3582812160,3582814319,FI
-3582814320,3582814327,US
-3582814328,3582820351,FI
+3582812160,3582820351,FI
3582820352,3582828543,RU
3582828544,3582836735,KZ
3582836736,3582853119,RU
@@ -168477,12 +87102,10 @@
3582992384,3583000575,ES
3583000576,3583008767,IT
3583008768,3583016959,TR
-3583016960,3583019367,CH
-3583019368,3583019375,DE
-3583019376,3583025151,CH
-3583025152,3583031807,A2
+3583016960,3583025151,CH
+3583025152,3583031807,IT
3583031808,3583032063,GR
-3583032064,3583033343,A2
+3583032064,3583033343,IT
3583033344,3583041535,FR
3583041536,3583049727,NL
3583049728,3583066111,RU
@@ -168496,19 +87119,13 @@
3583123456,3583131647,PL
3583131648,3583139839,SE
3583139840,3583148031,DE
-3583148032,3583157247,GB
-3583157248,3583157471,IE
-3583157472,3583157487,GB
-3583157488,3583157759,IE
-3583157760,3583158783,GB
-3583158784,3583159039,DE
-3583159040,3583160319,GB
+3583148032,3583157503,GB
+3583157504,3583157759,IE
+3583157760,3583160319,GB
3583160320,3583161343,DE
-3583161344,3583162367,GB
-3583162368,3583162623,DE
-3583162624,3583163391,GB
-3583163392,3583163903,IE
-3583163904,3583164415,GB
+3583161344,3583162623,GB
+3583162624,3583162879,ZA
+3583162880,3583164415,GB
3583164416,3583172607,PT
3583172608,3583188991,DE
3583188992,3583197183,RU
@@ -168521,9 +87138,7 @@
3583246336,3583254527,RU
3583254528,3583262719,GB
3583262720,3583270911,TR
-3583270912,3583283743,DE
-3583283744,3583283747,A2
-3583283748,3583287295,DE
+3583270912,3583287295,DE
3583287296,3583295487,RU
3583295488,3583303679,ES
3583303680,3583311871,NL
@@ -168533,16 +87148,7 @@
3583336448,3583337727,ME
3583337728,3583337983,AL
3583337984,3583344639,ME
-3583344640,3583345663,BG
-3583345664,3583346175,MK
-3583346176,3583346687,BG
-3583346688,3583346943,MK
-3583346944,3583348735,BG
-3583348736,3583348991,MK
-3583348992,3583350271,BG
-3583350272,3583351039,MK
-3583351040,3583352319,BG
-3583352320,3583352831,MK
+3583344640,3583352831,BG
3583352832,3583361023,CY
3583361024,3583369215,IT
3583369216,3583377407,ES
@@ -168569,11 +87175,7 @@
3583533056,3583541247,DE
3583541248,3583549439,RU
3583549440,3583557631,NL
-3583557632,3583558239,IT
-3583558240,3583558335,SM
-3583558336,3583561471,IT
-3583561472,3583561503,SM
-3583561504,3583565823,IT
+3583557632,3583565823,IT
3583565824,3583574015,GB
3583574016,3583582207,NO
3583582208,3583590399,AT
@@ -168587,271 +87189,33 @@
3583680512,3583688703,RU
3583688704,3583696895,UA
3583696896,3583705087,NL
-3583705088,3583705255,UA
-3583705256,3583705263,NA
-3583705264,3583705303,UA
-3583705304,3583705319,NA
-3583705320,3583705471,UA
-3583705472,3583705487,NA
-3583705488,3583705495,UA
-3583705496,3583705503,NA
-3583705504,3583705603,UA
-3583705604,3583705607,NA
-3583705608,3583705647,UA
-3583705648,3583705663,NA
-3583705664,3583705727,UA
-3583705728,3583705855,TH
-3583705856,3583705859,UA
-3583705860,3583705863,NA
-3583705864,3583706023,UA
-3583706024,3583706031,NA
-3583706032,3583706055,UA
-3583706056,3583706063,RU
-3583706064,3583706103,UA
-3583706104,3583706107,NA
-3583706108,3583706191,UA
-3583706192,3583706199,NA
-3583706200,3583706295,UA
-3583706296,3583706319,NA
-3583706320,3583706463,UA
-3583706464,3583706471,NA
-3583706472,3583706495,UA
-3583706496,3583706511,NA
-3583706512,3583706519,UA
-3583706520,3583706527,NA
-3583706528,3583706575,UA
-3583706576,3583706583,NA
-3583706584,3583706591,UA
-3583706592,3583706607,NA
-3583706608,3583706615,UA
-3583706616,3583706623,NA
-3583706624,3583706695,UA
-3583706696,3583706711,NA
-3583706712,3583706743,UA
-3583706744,3583706767,NA
-3583706768,3583706775,UA
-3583706776,3583706791,NA
-3583706792,3583706863,UA
-3583706864,3583706879,NA
-3583706880,3583706883,UA
-3583706884,3583706887,NA
-3583706888,3583706903,UA
-3583706904,3583706911,NA
-3583706912,3583706927,UA
-3583706928,3583706943,NA
-3583706944,3583706959,UA
-3583706960,3583706967,NA
-3583706968,3583706991,UA
-3583706992,3583706999,NA
-3583707000,3583707015,UA
-3583707016,3583707023,NA
-3583707024,3583707031,UA
-3583707032,3583707039,NA
-3583707040,3583707071,UA
-3583707072,3583707111,NA
-3583707112,3583707127,UA
-3583707128,3583707135,NA
-3583707136,3583707215,UA
-3583707216,3583707223,NA
-3583707224,3583707519,UA
-3583707520,3583707535,NA
-3583707536,3583707751,UA
-3583707752,3583707759,NA
-3583707760,3583707807,UA
-3583707808,3583707815,NA
-3583707816,3583707839,UA
-3583707840,3583707855,NA
-3583707856,3583708031,UA
-3583708032,3583708032,NA
-3583708033,3583708040,UA
-3583708041,3583708095,NA
-3583708096,3583708167,UA
-3583708168,3583708175,NA
-3583708176,3583708231,UA
-3583708232,3583708239,NA
-3583708240,3583708423,UA
-3583708424,3583708431,NA
-3583708432,3583708479,UA
-3583708480,3583708543,NA
-3583708544,3583708607,UA
-3583708608,3583708623,NA
-3583708624,3583709447,UA
-3583709448,3583709455,NA
-3583709456,3583709503,UA
-3583709504,3583709511,RU
-3583709512,3583709607,UA
-3583709608,3583709615,RU
-3583709616,3583709699,UA
-3583709700,3583709703,NA
-3583709704,3583709847,UA
-3583709848,3583709855,NA
-3583709856,3583709863,UA
-3583709864,3583709871,RU
-3583709872,3583709887,UA
-3583709888,3583709911,NA
-3583709912,3583709927,UA
-3583709928,3583709943,NA
-3583709944,3583710055,UA
-3583710056,3583710072,NA
-3583710073,3583710079,UA
-3583710080,3583710087,NA
-3583710088,3583710103,UA
-3583710104,3583710111,NA
-3583710112,3583710119,UA
-3583710120,3583710135,NA
-3583710136,3583710211,UA
-3583710212,3583710215,NA
-3583710216,3583710319,UA
-3583710320,3583710327,NA
-3583710328,3583710367,UA
-3583710368,3583710375,AQ
-3583710376,3583710383,NA
-3583710384,3583710407,UA
-3583710408,3583710415,NA
-3583710416,3583710455,UA
-3583710456,3583710459,NA
-3583710460,3583710631,UA
-3583710632,3583710639,NA
-3583710640,3583710703,UA
-3583710704,3583710711,NA
-3583710712,3583710743,UA
-3583710744,3583710751,BE
-3583710752,3583710887,UA
-3583710888,3583710895,NA
-3583710896,3583711247,UA
-3583711248,3583711255,NA
-3583711256,3583711327,UA
-3583711328,3583711335,NA
-3583711336,3583711359,UA
-3583711360,3583711367,NA
-3583711368,3583711375,UA
-3583711376,3583711383,NA
-3583711384,3583711711,UA
-3583711712,3583711719,NA
-3583711720,3583711783,UA
-3583711784,3583711799,NA
-3583711800,3583711815,UA
-3583711816,3583711823,NA
-3583711824,3583712015,UA
-3583712016,3583712023,NA
-3583712024,3583712119,UA
-3583712120,3583712127,NA
-3583712128,3583712159,UA
-3583712160,3583712191,NA
-3583712192,3583712455,UA
-3583712456,3583712463,NA
-3583712464,3583712471,UA
-3583712472,3583712479,NA
-3583712480,3583712527,UA
-3583712528,3583712535,IN
-3583712536,3583712607,UA
-3583712608,3583712615,HU
-3583712616,3583713007,UA
-3583713008,3583713015,RU
-3583713016,3583713279,UA
+3583705088,3583713279,UA
3583713280,3583721471,CZ
3583721472,3583729663,DE
3583729664,3583737855,TR
-3583737856,3583740671,EU
-3583740672,3583741183,GB
-3583741184,3583741439,EU
-3583741440,3583741695,GB
-3583741696,3583741951,NL
-3583741952,3583742719,EU
-3583742720,3583743487,DE
-3583743488,3583743503,FR
-3583743504,3583743519,EU
-3583743520,3583743551,FR
-3583743552,3583743615,EU
-3583743616,3583743743,GB
-3583743744,3583743775,EU
-3583743776,3583743807,NL
-3583743808,3583743975,EU
-3583743976,3583743983,IE
-3583743984,3583744063,EU
-3583744064,3583744067,FR
-3583744068,3583744071,GB
-3583744072,3583744095,EU
-3583744096,3583744099,DE
-3583744100,3583744103,FR
-3583744104,3583744111,GB
-3583744112,3583744127,EU
-3583744128,3583744255,PL
-3583744256,3583744287,EU
-3583744288,3583744303,GB
-3583744304,3583744319,EU
+3583742976,3583743487,PL
+3583743488,3583743743,GB
+3583743744,3583743999,IE
3583744320,3583744447,GB
-3583744448,3583744463,EU
-3583744464,3583744467,FR
-3583744468,3583744471,EU
-3583744472,3583744479,FR
-3583744480,3583744487,GB
-3583744488,3583744511,EU
3583744512,3583744767,GB
-3583744768,3583744831,DE
-3583744832,3583744911,EU
-3583744912,3583744927,GB
-3583744928,3583744959,DE
3583744960,3583744991,GB
-3583744992,3583744999,EU
-3583745000,3583745003,NL
-3583745004,3583745055,EU
-3583745056,3583745087,CA
-3583745088,3583745183,EU
-3583745184,3583745279,SE
3583745280,3583745535,GB
-3583745536,3583745663,SE
-3583745664,3583745719,EU
-3583745720,3583745723,FR
-3583745724,3583745799,EU
-3583745800,3583745807,NL
-3583745808,3583745823,GB
-3583745824,3583745855,EU
-3583745856,3583745919,SE
-3583745920,3583745951,GB
-3583745952,3583745983,EU
-3583745984,3583746047,CH
3583746048,3583754239,PL
3583754240,3583762431,RU
3583762432,3583770623,CZ
-3583770624,3583772351,NL
-3583772352,3583772367,IT
-3583772368,3583778815,NL
+3583770624,3583778815,NL
3583778816,3583787007,IT
3583787008,3583795199,UA
3583795200,3583803391,PL
-3583803392,3583806719,RU
-3583806720,3583806975,BY
-3583806976,3583811583,RU
-3583811584,3583811839,GB
-3583811840,3583819775,DE
+3583803392,3583811583,RU
+3583811584,3583819775,DE
3583819776,3583827967,RU
3583827968,3583836159,CH
3583836160,3583844351,DE
3583844352,3583852543,KZ
-3583852544,3583853055,SG
-3583853056,3583854591,FI
-3583854592,3583854871,GB
-3583854872,3583854879,FI
-3583854880,3583854927,GB
-3583854928,3583854943,FI
-3583854944,3583855103,GB
-3583855104,3583855167,US
-3583855168,3583855175,FI
-3583855176,3583855183,US
-3583855184,3583855191,FI
-3583855192,3583855199,US
-3583855200,3583855207,FI
-3583855208,3583855247,US
-3583855248,3583855311,FI
-3583855312,3583855327,US
-3583855328,3583856383,FI
-3583856384,3583856510,SG
-3583856511,3583856511,FI
-3583856512,3583856590,SG
-3583856591,3583856615,FI
-3583856616,3583856639,SG
-3583856640,3583860735,FI
+3583852544,3583854783,FI
+3583854784,3583854847,GB
+3583854848,3583860735,FI
3583860736,3583868927,HU
3583868928,3583877119,AT
3583877120,3583885311,RO
@@ -168874,44 +87238,18 @@
3584024576,3584032767,UA
3584032768,3584040959,DE
3584040960,3584049151,CH
-3584049152,3584055911,DE
-3584055912,3584055919,TR
-3584055920,3584057343,DE
+3584049152,3584057343,DE
3584057344,3584065535,GB
3584065536,3584073727,UA
3584073728,3584081919,SK
-3584081920,3584081951,AT
-3584081952,3584081959,NL
-3584081960,3584082143,AT
-3584082144,3584082175,NL
-3584082176,3584082279,AT
-3584082280,3584082287,NL
-3584082288,3584082943,AT
-3584082944,3584089087,NL
-3584089088,3584089855,AT
-3584089856,3584089871,NL
-3584089872,3584089903,AT
-3584089904,3584089919,NL
-3584089920,3584090111,AT
-3584090112,3584090623,NO
-3584090624,3584090879,NL
-3584090880,3584091135,NO
-3584091136,3584091391,NL
-3584091392,3584093783,NO
-3584093784,3584093791,NL
-3584093792,3584094893,NO
-3584094894,3584094895,NL
-3584094896,3584095807,NO
-3584095808,3584095855,NL
-3584095856,3584095935,NO
-3584095936,3584095999,NL
-3584096000,3584096255,NO
+3584081920,3584082007,NL
+3584082008,3584082015,AT
+3584082016,3584090111,NL
+3584090112,3584096255,NO
3584096256,3584098303,NL
3584098304,3584106495,SI
3584106496,3584114687,FI
-3584114688,3584120063,GB
-3584120064,3584120319,EU
-3584120320,3584122879,GB
+3584114688,3584122879,GB
3584122880,3584131071,PL
3584131072,3584139263,TR
3584139264,3584147455,NO
@@ -168926,84 +87264,43 @@
3584212992,3584221183,ES
3584221184,3584229375,NO
3584229376,3584245759,HU
-3584245760,3584245802,NL
-3584245803,3584245803,NL
-3584245804,3584246065,NL
-3584246066,3584246066,NL
-3584246067,3584247651,NL
-3584247652,3584247652,NL
-3584247653,3584247956,NL
-3584247957,3584247957,NL
-3584247958,3584253951,NL
-3584253952,3584260135,AL
-3584260136,3584260139,RS
-3584260140,3584260151,AL
-3584260152,3584260155,RS
-3584260156,3584260231,AL
-3584260232,3584260239,RS
-3584260240,3584260247,AL
-3584260248,3584260255,RS
-3584260256,3584260351,AL
-3584260352,3584260607,RS
-3584260608,3584260863,ME
-3584260864,3584260991,RS
-3584260992,3584261119,AL
-3584261120,3584261375,ME
-3584261376,3584262143,AL
+3584245760,3584253951,NL
+3584253952,3584254975,ME
+3584254976,3584255743,AL
+3584255744,3584255999,ME
+3584256000,3584260095,AL
+3584260096,3584262143,ME
3584262144,3584270335,SE
3584270336,3584278527,FR
3584278528,3584286719,GB
-3584286720,3584295759,AT
-3584295760,3584295767,PT
-3584295768,3584295807,AT
-3584295808,3584295815,PT
-3584295816,3584303103,AT
+3584286720,3584303103,AT
3584303104,3584311295,ES
3584311296,3584319487,DE
3584319488,3584327679,LT
-3584327680,3584332519,DE
-3584332520,3584332527,NL
-3584332528,3584335871,DE
+3584327680,3584335871,DE
3584335872,3584344063,ES
3584344064,3584352255,SE
3584352256,3584360447,RO
3584360448,3584368639,GB
3584368640,3584376831,SA
-3584376832,3584379135,DE
-3584379136,3584379391,IT
-3584379392,3584393215,DE
+3584376832,3584393215,DE
3584393216,3584401407,GB
3584401408,3584409599,MT
-3584409600,3584413439,RU
-3584413440,3584413695,DE
-3584413696,3584414207,GB
-3584414208,3584414719,RU
-3584414720,3584414975,DE
-3584414976,3584416255,RU
-3584416256,3584416767,GB
-3584416768,3584417791,RU
+3584409600,3584417791,RU
3584417792,3584434175,GB
3584434176,3584442367,LU
3584442368,3584450559,GB
-3584450560,3584458751,EU
3584458752,3584466943,SA
3584466944,3584475135,NO
3584475136,3584483327,FR
3584483328,3584491519,DE
3584491520,3584499711,BG
3584499712,3584507903,RU
-3584507904,3584508927,GB
-3584508928,3584508943,CY
-3584508944,3584508951,KY
-3584508952,3584509231,GB
+3584507904,3584509231,GB
3584509232,3584509239,AW
-3584509240,3584510999,GB
-3584511000,3584511007,KY
-3584511008,3584511023,GB
-3584511024,3584511039,KY
-3584511040,3584511807,GB
-3584511808,3584511871,MT
-3584511872,3584516095,GB
+3584509240,3584509695,GB
+3584509696,3584509951,JE
+3584509952,3584516095,GB
3584516096,3584524287,NO
3584524288,3584532479,IS
3584532480,3584540671,DE
@@ -169015,29 +87312,13 @@
3584589824,3584598015,RU
3584598016,3584606207,CZ
3584606208,3584614399,DE
-3584614400,3584614495,GB
-3584614496,3584614527,IE
-3584614528,3584614591,GB
-3584614592,3584614615,IE
-3584614616,3584614655,GB
-3584614656,3584614751,IE
-3584614752,3584614759,GB
-3584614760,3584614763,IE
-3584614764,3584614767,GB
-3584614768,3584615167,IE
-3584615168,3584615327,GB
-3584615328,3584622335,IE
-3584622336,3584622591,GB
+3584614400,3584622591,IE
3584622592,3584630783,FI
-3584630784,3584635799,BG
-3584635800,3584635800,BG
-3584635801,3584638975,BG
+3584630784,3584638975,BG
3584638976,3584647167,UA
3584647168,3584648191,LU
3584648192,3584648447,IT
-3584648448,3584649983,LU
-3584649984,3584650239,EU
-3584650240,3584655359,LU
+3584648448,3584655359,LU
3584655360,3584663551,CY
3584663552,3584671743,FR
3584671744,3584688127,NL
@@ -169052,7 +87333,6 @@
3584704512,3584720895,RU
3584720896,3584729087,GB
3584729088,3584737279,DE
-3584737280,3584745471,GR
3584745472,3584753663,DK
3584753664,3584770047,RU
3584770048,3584778239,NL
@@ -169072,30 +87352,22 @@
3584901120,3584909311,AT
3584909312,3584917503,IT
3584917504,3584925695,FI
-3584925696,3584931375,CH
-3584931376,3584931391,ES
-3584931392,3584933887,CH
-3584933888,3584942079,NO
+3584925696,3584933887,CH
+3584933888,3584937983,NO
+3584937984,3584942079,NL
3584942080,3584950271,DK
3584950272,3584958463,UA
3584958464,3584966655,DE
-3584966656,3584972799,DK
-3584972800,3584973823,SE
-3584973824,3584974591,DK
-3584974592,3584974847,SE
+3584966656,3584974847,DK
3584974848,3584983039,FR
3584983040,3584991231,US
3584991232,3584999423,IT
-3584999424,3585001983,GB
-3585001984,3585002111,DE
-3585002112,3585007615,GB
+3584999424,3585007615,GB
3585007616,3585015807,AT
3585015808,3585023999,IT
3585024000,3585032191,CZ
3585032192,3585048575,LV
-3585048576,3585050879,GB
-3585050880,3585051391,A2
-3585051392,3585056767,GB
+3585048576,3585056767,GB
3585056768,3585064959,LB
3585064960,3585081343,GB
3585081344,3585114111,IR
@@ -169107,9 +87379,7 @@
3585155072,3585163263,GB
3585163264,3585171455,BE
3585171456,3585179647,RU
-3585179648,3585189887,BE
-3585189888,3585190399,DZ
-3585190400,3585190527,BE
+3585179648,3585190527,BE
3585190528,3585190655,DZ
3585190656,3585196031,BE
3585196032,3585204223,ES
@@ -169123,34 +87393,19 @@
3585261568,3585269759,IT
3585269760,3585277951,SY
3585277952,3585286143,SE
-3585286144,3585289095,NO
-3585289096,3585289215,GB
-3585289216,3585289552,NO
-3585289553,3585289599,GB
-3585289600,3585289631,NO
-3585289632,3585290751,GB
-3585290752,3585290759,NO
-3585290760,3585290783,GB
-3585290784,3585290975,NO
-3585290976,3585291007,GB
-3585291008,3585293023,NO
-3585293024,3585293055,GB
-3585293056,3585293215,NO
-3585293216,3585293247,GB
-3585293248,3585293255,US
-3585293256,3585293263,GB
+3585286144,3585288959,NO
+3585288960,3585291007,GB
+3585291008,3585292543,NO
+3585292544,3585292863,GB
+3585292864,3585292895,NO
+3585292896,3585293263,GB
3585293264,3585293271,ZA
-3585293272,3585293327,GB
-3585293328,3585293335,SE
-3585293336,3585293343,NL
-3585293344,3585294335,GB
+3585293272,3585294335,GB
3585294336,3585302527,DE
3585302528,3585310719,ES
3585310720,3585318911,DE
3585318912,3585327103,DZ
-3585327104,3585332223,NL
-3585332224,3585332351,NL
-3585332352,3585335295,NL
+3585327104,3585335295,NL
3585335296,3585343487,UA
3585343488,3585351679,EE
3585351680,3585359871,CZ
@@ -169159,7 +87414,7 @@
3585376256,3585384447,PL
3585384448,3585392639,CH
3585392640,3585400831,RU
-3585400832,3585409023,A2
+3585400832,3585409023,FR
3585409024,3585417215,RU
3585417216,3585425407,BE
3585425408,3585433599,ES
@@ -169175,12 +87430,7 @@
3585515520,3585523711,RU
3585523712,3585531903,LV
3585531904,3585540095,AT
-3585540096,3585543295,DE
-3585543296,3585543303,CH
-3585543304,3585544903,DE
-3585544904,3585544911,CH
-3585544912,3585544927,TR
-3585544928,3585548287,DE
+3585540096,3585548287,DE
3585548288,3585556479,RU
3585556480,3585564671,DE
3585564672,3585572863,RU
@@ -169189,93 +87439,23 @@
3585597440,3585605631,RU
3585605632,3585613823,PL
3585613824,3585622015,EE
-3585622016,3585630207,RU
-3585630208,3585638399,RS
+3585630208,3585638399,IL
3585638400,3585646591,RU
3585646592,3585654783,SA
3585654784,3585662975,NO
3585662976,3585671167,BY
-3585671168,3585672191,SE
-3585672192,3585672447,DK
-3585672448,3585672703,SE
-3585672704,3585673727,DK
-3585673728,3585674239,SE
-3585674240,3585675775,DK
-3585675776,3585676287,SE
-3585676288,3585677567,DK
-3585677568,3585679359,SE
+3585671168,3585679359,SE
3585679360,3585687551,FI
3585687552,3585695743,DE
-3585695744,3585695999,CM
-3585696000,3585696063,BD
-3585696064,3585696511,A2
-3585696512,3585696767,LB
-3585696768,3585696799,NO
-3585696800,3585696831,LR
-3585696832,3585696847,GB
-3585696848,3585697023,A2
-3585697024,3585697279,GB
-3585697280,3585697535,NO
-3585697536,3585697791,A2
-3585697792,3585698047,NG
-3585698048,3585698303,A2
-3585698304,3585698559,US
-3585698560,3585698815,A2
-3585698816,3585699071,GB
-3585699072,3585699583,A2
-3585699584,3585699711,US
-3585699712,3585699839,AU
-3585699840,3585700095,IQ
-3585700096,3585700159,NG
-3585700160,3585700191,A2
-3585700192,3585700223,NG
-3585700224,3585700231,A2
-3585700232,3585700239,US
-3585700240,3585700255,ZA
-3585700256,3585700271,A2
-3585700272,3585700287,NG
-3585700288,3585700303,A2
-3585700304,3585700319,NG
-3585700320,3585700343,AU
-3585700344,3585700351,ZA
-3585700352,3585700607,NG
-3585700608,3585700863,TZ
-3585700864,3585701119,IQ
-3585701120,3585701375,US
-3585701376,3585701439,MW
-3585701440,3585701503,A2
-3585701504,3585701519,NG
-3585701520,3585701535,CA
-3585701536,3585701631,NG
-3585701632,3585701887,A2
-3585701888,3585702143,FR
-3585702144,3585702399,LR
-3585702400,3585702463,US
-3585702464,3585702527,A2
+3585695744,3585702527,GB
3585702528,3585702655,TZ
-3585702656,3585702911,TG
-3585702912,3585703167,NG
-3585703168,3585703423,FR
-3585703424,3585703935,A2
+3585702656,3585703935,GB
3585703936,3585712127,DE
3585712128,3585720319,AT
3585720320,3585728511,GB
3585728512,3585736703,SE
3585736704,3585744895,HR
-3585744896,3585749295,FR
-3585749296,3585749311,ES
-3585749312,3585750015,FR
-3585750016,3585750031,GB
-3585750032,3585750271,FR
-3585750272,3585750287,ES
-3585750288,3585750335,FR
-3585750336,3585750351,GB
-3585750352,3585750367,DE
-3585750368,3585750383,ES
-3585750384,3585750399,PT
-3585750400,3585750447,FR
-3585750448,3585750463,DE
-3585750464,3585753087,FR
+3585744896,3585753087,FR
3585753088,3585761279,PL
3585761280,3585769471,UA
3585769472,3585777663,TR
@@ -169286,64 +87466,44 @@
3585810432,3585818623,GB
3585818624,3585826815,DE
3585826816,3585835007,RU
-3585835008,3585835023,GB
-3585835024,3585835775,NL
-3585835776,3585835839,GQ
-3585835840,3585835847,AO
-3585835848,3585836287,NL
-3585836288,3585836543,CH
-3585836544,3585837055,NL
-3585837056,3585837311,NG
-3585837312,3585837567,IQ
-3585837568,3585838719,NL
-3585838720,3585838847,NG
-3585838848,3585838879,NL
-3585838880,3585838911,IQ
-3585838912,3585838975,NG
-3585838976,3585839103,DZ
-3585839104,3585841407,NL
-3585841408,3585841415,NG
-3585841416,3585841927,NL
-3585841928,3585842431,NG
-3585842432,3585842943,US
-3585842944,3585843199,NL
+3585835008,3585843199,US
3585843200,3585851391,NO
3585851392,3585859583,SE
-3585859584,3585860095,DE
-3585860096,3585860607,RU
-3585860608,3585863679,DE
-3585863680,3585864703,RU
-3585864704,3585865471,DE
+3585859584,3585860607,AF
+3585860608,3585861631,RU
+3585861632,3585863679,EE
+3585863680,3585865471,NL
3585865472,3585865727,LB
-3585865728,3585867775,RU
+3585865728,3585866495,EE
+3585866496,3585866751,RU
+3585866752,3585867775,EE
3585867776,3585875967,NO
3585875968,3585884159,CH
3585884160,3585892351,IQ
3585892352,3585900543,DE
-3585900544,3585902239,NO
-3585902240,3585902271,GB
-3585902272,3585902447,NO
-3585902448,3585902463,GB
-3585902464,3585908735,NO
-3585908736,3585908991,GP
-3585908992,3585909759,GF
-3585909760,3585910015,GP
-3585910016,3585910271,MQ
+3585900544,3585906687,NO
+3585906688,3585907711,CZ
+3585907712,3585908735,NO
+3585908736,3585908991,FR
+3585908992,3585909247,GF
+3585909248,3585909503,FR
+3585909504,3585909759,GF
+3585909760,3585910271,FR
3585910272,3585910527,GP
-3585910528,3585910783,FR
-3585910784,3585911039,GP
-3585911040,3585911295,FR
-3585911296,3585914623,GP
+3585910528,3585912831,FR
+3585912832,3585913087,GP
+3585913088,3585913855,FR
+3585913856,3585914623,GP
3585914624,3585914879,GF
-3585914880,3585915135,MQ
-3585915136,3585916415,GP
-3585916416,3585916671,FR
+3585914880,3585915391,FR
+3585915392,3585915647,GP
+3585915648,3585915903,FR
+3585915904,3585916159,GP
+3585916160,3585916671,FR
3585916672,3585916927,MQ
3585916928,3585925119,IT
3585925120,3585933311,CH
-3585933312,3585940479,NL
-3585940480,3585940735,BE
-3585940736,3585941503,NL
+3585933312,3585941503,NL
3585941504,3585949695,PL
3585949696,3585957887,KW
3585957888,3585966079,SE
@@ -169366,69 +87526,21 @@
3586129920,3586146303,CZ
3586146304,3586162687,PL
3586162688,3586179071,FI
-3586179072,3586191871,ES
-3586191872,3586191887,FR
-3586191888,3586195455,ES
+3586179072,3586195455,ES
3586195456,3586203647,RU
-3586203648,3586204159,ZM
-3586204160,3586205695,KE
+3586203648,3586205695,KE
3586205696,3586207743,BW
-3586207744,3586207999,ZA
-3586208000,3586208255,A2
-3586208256,3586208767,ZA
+3586207744,3586208767,ZA
3586208768,3586211071,KE
3586211072,3586211327,BW
3586211328,3586211839,KE
-3586211840,3586220287,CH
-3586220288,3586220303,FR
-3586220304,3586228223,CH
-3586228224,3586237695,BE
-3586237696,3586237951,NL
-3586237952,3586244607,BE
-3586244608,3586245119,NL
-3586245120,3586246655,GB
+3586211840,3586228223,CH
+3586228224,3586244607,BE
+3586244608,3586246655,NL
3586246656,3586248703,BE
-3586248704,3586250449,NL
-3586250450,3586250457,BE
-3586250458,3586252799,NL
-3586252800,3586254847,BE
-3586254848,3586258943,NL
-3586258944,3586259455,BE
-3586259456,3586269471,NL
-3586269472,3586269503,GB
-3586269504,3586269519,NL
-3586269520,3586269607,GB
-3586269608,3586269615,NL
-3586269616,3586269695,GB
-3586269696,3586269759,NL
-3586269760,3586269783,GB
-3586269784,3586269787,NL
-3586269788,3586269823,GB
-3586269824,3586269855,NL
-3586269856,3586269887,GB
-3586269888,3586269919,NL
-3586269920,3586270079,GB
-3586270080,3586270207,NL
-3586270208,3586271231,ES
-3586271232,3586271487,NL
-3586271488,3586271823,GB
-3586271824,3586271871,IT
-3586271872,3586272255,GB
-3586272256,3586272511,NL
-3586272512,3586272815,GB
-3586272816,3586272823,IT
-3586272824,3586272863,GB
-3586272864,3586272895,NL
-3586272896,3586272991,GB
-3586272992,3586273007,IT
-3586273008,3586273015,GB
-3586273016,3586273023,IT
-3586273024,3586276351,NL
-3586276352,3586276863,GB
-3586276864,3586277375,NL
-3586277376,3586286591,TR
-3586286592,3586286607,A2
-3586286608,3586293759,TR
+3586248704,3586260991,NL
+3586260992,3586277375,GB
+3586277376,3586293759,TR
3586293760,3586310143,ES
3586310144,3586326527,CZ
3586326528,3586342911,IR
@@ -169440,116 +87552,47 @@
3586424832,3586441215,CH
3586441216,3586457599,DE
3586457600,3586473983,NL
-3586473984,3586473987,SK
-3586473988,3586476031,HU
-3586476032,3586476063,TR
-3586476064,3586476287,HU
+3586473984,3586476287,HU
3586476288,3586476303,SK
-3586476304,3586476351,HU
-3586476352,3586476383,AT
-3586476384,3586476407,UA
-3586476408,3586476431,HU
-3586476432,3586476439,SK
-3586476440,3586490367,HU
+3586476304,3586490367,HU
3586490368,3586506751,LT
3586506752,3586523135,NL
-3586523136,3586541247,DE
-3586541248,3586541255,GB
-3586541256,3586543519,DE
-3586543520,3586543527,GB
-3586543528,3586543759,DE
-3586543760,3586543791,GB
-3586543792,3586545119,DE
-3586545120,3586545127,GB
-3586545128,3586545136,DE
-3586545137,3586545150,GE
-3586545151,3586545679,DE
-3586545680,3586545703,GB
-3586545704,3586546287,DE
-3586546288,3586546303,GB
-3586546304,3586546311,DE
-3586546312,3586546319,GB
-3586546320,3586546415,DE
-3586546416,3586546423,GB
-3586546424,3586547087,DE
-3586547088,3586547095,GB
-3586547096,3586547263,DE
-3586547264,3586547295,GB
-3586547296,3586555903,DE
+3586523136,3586544267,DE
+3586544268,3586544271,DK
+3586544272,3586544383,DE
+3586544384,3586544511,DK
+3586544512,3586555903,DE
3586555904,3586572287,IT
3586572288,3586588671,RS
3586588672,3586596863,IT
3586596864,3586605055,GB
3586605056,3586621439,SE
-3586621440,3586621695,EU
+3586621440,3586621695,GB
3586621696,3586625535,IE
3586625536,3586629631,GB
3586629632,3586637823,IE
3586637824,3586654207,PL
3586654208,3586662399,GE
3586662400,3586670591,UA
-3586670592,3586677183,DE
-3586677184,3586677247,FR
-3586677248,3586677311,DE
-3586677312,3586677327,FR
-3586677328,3586677439,DE
-3586677440,3586677487,FR
-3586677488,3586677641,DE
-3586677642,3586677645,GB
-3586677646,3586677647,SG
+3586670592,3586675967,DE
+3586675968,3586676223,FR
+3586676224,3586676991,DE
+3586676992,3586677434,FR
+3586677435,3586677435,DE
+3586677436,3586677631,FR
+3586677632,3586677639,DE
+3586677640,3586677643,GB
+3586677644,3586677647,SG
3586677648,3586677655,US
-3586677656,3586677759,DE
-3586677760,3586678015,GR
-3586678016,3586678271,DE
-3586678272,3586678399,FR
-3586678400,3586678415,GB
-3586678416,3586678431,FR
-3586678432,3586678439,IE
-3586678440,3586678447,FR
-3586678448,3586678527,IE
-3586678528,3586678655,FR
-3586678656,3586678671,CY
-3586678672,3586678679,GB
-3586678680,3586678687,MU
-3586678688,3586678783,GB
-3586678784,3586679039,IT
-3586679040,3586679103,FR
-3586679104,3586679167,DE
-3586679168,3586679295,FR
-3586679296,3586679327,BE
-3586679328,3586679343,DK
-3586679344,3586679359,BE
-3586679360,3586679423,DE
-3586679424,3586679583,FR
-3586679584,3586679599,IT
-3586679600,3586679647,FR
-3586679648,3586679711,IT
-3586679712,3586679727,FR
-3586679728,3586679807,IT
-3586679808,3586679855,FR
-3586679856,3586679871,GB
-3586679872,3586680319,FR
+3586677656,3586679599,FR
+3586679600,3586679615,IT
+3586679616,3586680319,FR
3586680320,3586680575,ES
-3586680576,3586680583,BE
-3586680584,3586680607,FR
-3586680608,3586680615,ES
-3586680616,3586680623,GB
-3586680624,3586680703,FR
-3586680704,3586680831,ES
-3586680832,3586680975,FR
-3586680976,3586680991,BE
-3586680992,3586681343,FR
-3586681344,3586681471,BE
-3586681472,3586681615,FR
+3586680576,3586681615,FR
3586681616,3586681631,CZ
-3586681632,3586681727,FR
-3586681728,3586681855,BE
-3586681856,3586682207,FR
-3586682208,3586682223,RU
-3586682224,3586682239,IE
+3586681632,3586682239,FR
3586682240,3586682367,US
-3586682368,3586682399,AT
-3586682400,3586682879,FR
+3586682368,3586682879,FR
3586682880,3586686975,US
3586686976,3586703359,SE
3586703360,3586719743,CH
@@ -169557,81 +87600,23 @@
3586752512,3586785279,NL
3586785280,3586793471,OM
3586793472,3586801663,CH
-3586801664,3586803487,HR
-3586803488,3586803519,DE
-3586803520,3586804751,HR
-3586804752,3586804767,HU
-3586804768,3586804863,HR
-3586804864,3586804871,RO
-3586804872,3586818047,HR
+3586801664,3586818047,HR
3586818048,3586834431,IE
-3586834432,3586844543,DE
-3586844544,3586844559,FR
-3586844560,3586850495,DE
-3586850496,3586850511,US
-3586850512,3586850815,DE
+3586834432,3586850815,DE
3586850816,3586867199,NO
3586867200,3586883583,FR
3586883584,3586899967,IT
-3586899968,3586901311,DE
-3586901312,3586901375,ES
-3586901376,3586904831,DE
-3586904832,3586904839,VG
-3586904840,3586905287,DE
-3586905288,3586905295,CY
-3586905296,3586906225,DE
-3586906226,3586906226,DE
-3586906227,3586910559,DE
-3586910560,3586910567,NL
-3586910568,3586910575,CY
-3586910576,3586910587,NL
-3586910588,3586910591,DE
-3586910592,3586910623,NL
-3586910624,3586910655,DE
-3586910656,3586910687,NL
-3586910688,3586910991,DE
-3586910992,3586911039,BE
+3586899968,3586911007,DE
+3586911008,3586911039,BE
3586911040,3586911103,DE
3586911104,3586911167,NL
3586911168,3586912721,DE
3586912722,3586912722,FR
3586912723,3586916351,DE
-3586916352,3586924031,IT
-3586924032,3586924047,US
-3586924048,3586924543,IT
-3586924544,3586924743,FI
-3586924744,3586924751,AX
-3586924752,3586924767,FI
-3586924768,3586924799,AX
-3586924800,3586924871,FI
-3586924872,3586924879,AX
-3586924880,3586924919,FI
-3586924920,3586924927,AX
-3586924928,3586924943,FI
-3586924944,3586924959,AX
-3586924960,3586924983,FI
-3586924984,3586925055,AX
-3586925056,3586925103,FI
-3586925104,3586925135,AX
-3586925136,3586925471,FI
-3586925472,3586925503,AX
-3586925504,3586925535,FI
-3586925536,3586925567,AX
-3586925568,3586925695,FI
-3586925696,3586925759,AX
-3586925760,3586925791,FI
-3586925792,3586925823,AX
+3586916352,3586924543,IT
+3586924544,3586925823,AX
3586925824,3586926079,FI
-3586926080,3586926591,AX
-3586926592,3586926847,SE
-3586926848,3586927103,FI
-3586927104,3586927999,AX
-3586928000,3586928159,FI
-3586928160,3586928175,AX
-3586928176,3586928303,FI
-3586928304,3586928319,AX
-3586928320,3586928639,FI
-3586928640,3586929663,AX
+3586926080,3586929663,AX
3586929664,3586930687,FI
3586930688,3586932735,AX
3586932736,3586949119,LB
@@ -169640,308 +87625,57 @@
3586981888,3586998271,IT
3586998272,3587006463,PT
3587006464,3587014655,FR
-3587014656,3587051007,GB
-3587051008,3587051775,DE
-3587051776,3587052031,GB
-3587052032,3587052799,NL
-3587052800,3587053055,GB
-3587053056,3587053823,FR
-3587053824,3587055615,GB
+3587014656,3587055615,GB
3587055616,3587063807,UZ
3587063808,3587080191,NL
-3587080192,3587082367,GB
-3587082368,3587082431,US
-3587082432,3587088383,GB
+3587080192,3587088383,GB
3587088384,3587096575,DE
-3587096576,3587110863,NL
-3587110864,3587110871,BE
-3587110872,3587121151,NL
+3587096576,3587121151,NL
3587121152,3587129343,AL
-3587129344,3587134463,NL
-3587134464,3587134591,ES
-3587134592,3587145727,NL
+3587129344,3587145727,NL
3587145728,3587162111,CY
3587162112,3587178495,IR
-3587178496,3587178795,AT
-3587178796,3587178799,US
-3587178800,3587179439,AT
-3587179440,3587179455,GB
-3587179456,3587186687,AT
+3587178496,3587186687,AT
3587186688,3587186943,DE
-3587186944,3587187711,GB
-3587187712,3587188223,A2
+3587186944,3587187199,GB
+3587187200,3587187455,DE
+3587187456,3587187711,GB
+3587187712,3587188223,DE
3587188224,3587188479,AM
-3587188480,3587188735,DE
-3587188736,3587192831,A2
-3587192832,3587193087,DE
+3587188480,3587193087,DE
3587193088,3587193599,GB
-3587193600,3587194495,A2
-3587194496,3587194511,RU
-3587194512,3587194879,A2
+3587193600,3587194879,DE
3587194880,3587211263,GB
-3587211264,3587211531,AT
-3587211532,3587211535,DE
-3587211536,3587213911,AT
-3587213912,3587213919,UY
-3587213920,3587217151,AT
-3587217152,3587217407,DE
-3587217408,3587219455,AT
+3587211264,3587219455,AT
3587219456,3587227647,RU
-3587227648,3587227663,NL
-3587227664,3587227679,GB
-3587227680,3587227759,NL
-3587227760,3587227775,GB
-3587227776,3587227807,NL
-3587227808,3587227823,GB
-3587227824,3587227903,NL
-3587227904,3587228047,GB
-3587228048,3587228087,NL
-3587228088,3587228127,GB
-3587228128,3587228271,NL
-3587228272,3587228287,GB
-3587228288,3587228351,NL
-3587228352,3587228367,GB
-3587228368,3587228447,NL
-3587228448,3587228463,GB
-3587228464,3587228591,NL
-3587228592,3587228607,GB
-3587228608,3587228640,NL
-3587228641,3587228655,GB
-3587228656,3587228927,NL
-3587228928,3587229455,GB
-3587229456,3587229647,NL
-3587229648,3587229663,GB
-3587229664,3587229823,NL
-3587229824,3587229839,GB
-3587229840,3587229855,ES
-3587229856,3587229887,GB
-3587229888,3587229920,NL
-3587229921,3587229935,GB
-3587229936,3587230159,NL
-3587230160,3587230511,GB
-3587230512,3587230519,NL
-3587230520,3587230527,GB
-3587230528,3587230543,NL
-3587230544,3587230607,GB
-3587230608,3587230623,NL
-3587230624,3587230847,GB
-3587230848,3587230911,NL
-3587230912,3587231359,GB
-3587231360,3587231999,NL
-3587232000,3587232255,GB
-3587232256,3587232511,NL
-3587232512,3587232519,GB
-3587232520,3587232527,NL
-3587232528,3587232767,GB
-3587232768,3587232911,NL
-3587232912,3587232927,GB
-3587232928,3587233103,NL
-3587233104,3587233119,GB
-3587233120,3587233167,NL
-3587233168,3587233175,GB
-3587233176,3587233791,NL
-3587233792,3587233919,GB
-3587233920,3587233935,NL
-3587233936,3587233951,GB
-3587233952,3587233967,NL
-3587233968,3587233983,GB
-3587233984,3587233999,NL
-3587234000,3587234047,GB
-3587234048,3587234079,NL
-3587234080,3587234127,GB
-3587234128,3587234143,NL
-3587234144,3587234159,GB
-3587234160,3587234207,NL
-3587234208,3587234815,GB
-3587234816,3587235103,NL
-3587235104,3587235111,GB
-3587235112,3587236351,NL
-3587236352,3587236495,GB
-3587236496,3587236511,NL
-3587236512,3587236543,GB
-3587236544,3587236607,NL
-3587236608,3587237391,GB
-3587237392,3587237399,NL
-3587237400,3587237407,GB
-3587237408,3587237503,NL
-3587237504,3587237519,GB
-3587237520,3587237535,NL
-3587237536,3587237551,GB
-3587237552,3587237567,NL
-3587237568,3587237887,GB
-3587237888,3587238463,NL
-3587238464,3587238479,GB
-3587238480,3587238511,NL
-3587238512,3587238519,GB
-3587238520,3587238527,NL
-3587238528,3587238543,GB
-3587238544,3587238567,NL
-3587238568,3587238583,GB
-3587238584,3587238591,NL
-3587238592,3587238599,GB
-3587238600,3587238607,NL
-3587238608,3587238911,GB
-3587238912,3587239439,NL
-3587239440,3587239447,BE
-3587239448,3587239487,NL
-3587239488,3587239503,GB
-3587239504,3587240231,NL
-3587240232,3587240255,GB
-3587240256,3587240271,NL
-3587240272,3587240279,GB
-3587240280,3587240359,NL
-3587240360,3587240367,GB
-3587240368,3587240431,NL
-3587240432,3587240439,GB
-3587240440,3587241223,NL
-3587241224,3587241247,GB
-3587241248,3587241263,NL
-3587241264,3587241271,GB
-3587241272,3587241287,NL
-3587241288,3587241295,GB
-3587241296,3587241343,NL
-3587241344,3587241471,GB
-3587241472,3587242271,NL
-3587242272,3587242287,GB
-3587242288,3587242463,NL
-3587242464,3587242495,GB
-3587242496,3587242551,NL
-3587242552,3587242559,GB
-3587242560,3587242671,NL
+3587227648,3587231231,GB
+3587231232,3587231263,NL
+3587231264,3587233087,GB
+3587233088,3587233095,NL
+3587233096,3587233279,GB
+3587233280,3587233535,NL
+3587233536,3587234191,GB
+3587234192,3587234207,NL
+3587234208,3587237631,GB
+3587237632,3587237887,NL
+3587237888,3587238487,GB
+3587238488,3587238495,NL
+3587238496,3587239487,GB
+3587239488,3587239495,NL
+3587239496,3587239583,GB
+3587239584,3587239599,NL
+3587239600,3587239711,GB
+3587239712,3587239727,NL
+3587239728,3587239791,GB
+3587239792,3587239799,NL
+3587239800,3587242671,GB
3587242672,3587242679,DE
-3587242680,3587243903,NL
-3587243904,3587243919,GB
-3587243920,3587243935,NL
-3587243936,3587243951,GB
-3587243952,3587243967,NL
-3587243968,3587243975,GB
-3587243976,3587243983,NL
-3587243984,3587243991,GB
-3587243992,3587244007,NL
-3587244008,3587244015,GB
-3587244016,3587244023,NL
-3587244024,3587244031,GB
+3587242680,3587244031,GB
3587244032,3587260415,IT
3587260416,3587284991,DE
-3587284992,3587285135,EU
-3587285136,3587285159,HK
-3587285160,3587285216,EU
-3587285217,3587285217,US
-3587285218,3587285247,EU
-3587285248,3587285523,IT
-3587285524,3587285524,A2
-3587285525,3587286527,IT
-3587286528,3587286783,EU
-3587286784,3587287039,IT
-3587287040,3587287043,EU
-3587287044,3587287047,LY
-3587287048,3587287055,EU
-3587287056,3587287059,LY
-3587287060,3587287295,EU
-3587287296,3587287307,GE
-3587287308,3587287311,DE
-3587287312,3587287319,GE
-3587287320,3587287327,FR
-3587287328,3587287335,GB
-3587287336,3587287339,DE
-3587287340,3587287343,PL
-3587287344,3587287351,GE
-3587287352,3587287359,IS
-3587287360,3587287363,NL
-3587287364,3587287367,IT
-3587287368,3587287387,NL
-3587287388,3587287391,CZ
-3587287392,3587287395,DE
-3587287396,3587287403,IS
-3587287404,3587287411,PL
-3587287412,3587287415,DE
-3587287416,3587287419,IQ
-3587287420,3587287423,DE
-3587287424,3587287427,SE
-3587287428,3587287431,DE
-3587287432,3587287435,IT
-3587287436,3587287439,DE
-3587287440,3587287447,TR
-3587287448,3587287451,DE
-3587287452,3587287455,IT
-3587287456,3587287459,DE
-3587287460,3587287463,IT
-3587287464,3587287475,SE
-3587287476,3587287479,PL
-3587287480,3587287487,EU
-3587287488,3587287535,IT
-3587287536,3587287543,DE
-3587287544,3587287551,PL
-3587287552,3587287559,GB
-3587287560,3587287563,FR
-3587287564,3587287571,PL
-3587287572,3587287575,DE
-3587287576,3587287579,FR
-3587287580,3587287583,DE
-3587287584,3587287591,FR
-3587287592,3587287599,GB
-3587287600,3587287679,IT
-3587287680,3587287687,NL
-3587287688,3587287711,IS
-3587287712,3587287719,GE
-3587287720,3587287723,IT
-3587287724,3587287727,SE
-3587287728,3587287807,IT
-3587287808,3587287815,IS
-3587287816,3587287823,GB
-3587287824,3587287835,FR
-3587287836,3587287847,GB
-3587287848,3587287851,SE
-3587287852,3587287879,IQ
-3587287880,3587287887,FR
-3587287888,3587287935,IT
-3587287936,3587287943,FR
-3587287944,3587287947,DE
-3587287948,3587287959,IT
-3587287960,3587287963,FR
-3587287964,3587287967,GB
-3587287968,3587287983,DE
-3587287984,3587288063,IT
-3587288064,3587288319,EU
-3587288320,3587288575,IT
-3587288576,3587288703,AE
-3587288704,3587288707,DE
-3587288708,3587288759,NL
-3587288760,3587288959,A2
-3587288960,3587289087,DE
-3587289088,3587289343,FR
-3587289344,3587289347,ES
-3587289348,3587289351,FR
-3587289352,3587289359,PT
-3587289360,3587289367,ES
-3587289368,3587289375,FR
-3587289376,3587289383,EU
-3587289384,3587289387,GB
-3587289388,3587289391,ES
-3587289392,3587289399,GB
-3587289400,3587289407,ES
-3587289408,3587289411,EU
-3587289412,3587289415,FR
-3587289416,3587289423,EU
-3587289424,3587289467,GB
-3587289468,3587290111,EU
-3587290112,3587290367,IT
-3587290368,3587290622,GB
-3587290623,3587290623,EU
-3587290624,3587290879,FR
-3587290880,3587291135,A2
-3587291136,3587291139,NL
-3587291140,3587291647,EU
-3587291648,3587291967,IT
-3587291968,3587292031,AL
-3587292032,3587292159,IT
-3587292160,3587292223,EU
-3587292224,3587292415,IT
-3587292416,3587292419,ES
-3587292420,3587292671,EU
-3587292672,3587292799,IT
-3587292800,3587292863,AT
-3587292864,3587309567,IT
+3587284992,3587291135,IT
+3587291136,3587292159,FR
+3587292160,3587309567,IT
3587309568,3587325951,GB
3587325952,3587342335,RU
3587342336,3587358719,CZ
@@ -169949,22 +87683,22 @@
3587375104,3587383295,TR
3587383296,3587391487,CZ
3587391488,3587407871,KZ
-3587407872,3587408383,NL
-3587408384,3587408895,BE
-3587408896,3587409407,RU
-3587409408,3587410431,BE
-3587410432,3587410687,NL
-3587410688,3587412223,BE
+3587407872,3587412223,BE
3587412224,3587413759,NL
3587413760,3587414015,BE
-3587414016,3587424255,NL
+3587414016,3587415039,NL
+3587415040,3587422719,BE
+3587422720,3587423743,NL
+3587423744,3587424255,BE
3587424256,3587440639,DE
3587440640,3587444900,SE
3587444901,3587444916,FI
3587444917,3587445759,SE
3587445760,3587446015,FI
-3587446016,3587446103,SE
-3587446104,3587446271,FI
+3587446016,3587446071,SE
+3587446072,3587446079,FI
+3587446080,3587446143,SE
+3587446144,3587446271,FI
3587446272,3587457023,SE
3587457024,3587473407,GB
3587473408,3587489791,IT
@@ -169981,19 +87715,11 @@
3587620864,3587637247,SE
3587637248,3587646975,FR
3587646976,3587647231,MC
-3587647232,3587653631,FR
-3587653632,3587655615,SK
-3587655616,3587655679,US
-3587655680,3587670015,SK
-3587670016,3587686031,IT
-3587686032,3587686039,FR
-3587686040,3587687591,IT
-3587687592,3587687599,NL
-3587687600,3587691399,IT
-3587691400,3587691407,DE
-3587691408,3587701295,IT
-3587701296,3587701303,FR
-3587701304,3587702783,IT
+3587647232,3587647743,FR
+3587647744,3587647999,GB
+3587648000,3587653631,FR
+3587653632,3587670015,SK
+3587670016,3587702783,IT
3587702784,3587710975,DE
3587710976,3587719167,CZ
3587719168,3587735551,PL
@@ -170008,50 +87734,39 @@
3587850240,3587854335,NL
3587854336,3587866623,PL
3587866624,3587874815,FR
-3587874816,3587877407,DE
-3587877408,3587877439,NL
-3587877440,3587878527,DE
-3587878528,3587878559,AT
-3587878560,3587883007,DE
+3587874816,3587883007,DE
3587883008,3587915775,GB
3587915776,3587932159,EE
-3587932160,3587932415,NL
-3587932416,3587944447,BE
-3587944448,3587945471,NL
-3587945472,3587948031,BE
-3587948032,3587948543,NL
+3587932160,3587948543,BE
3587948544,3587964927,RU
3587964928,3587981311,ES
3587981312,3587997695,IS
3587997696,3588014079,DE
3588014080,3588030463,CZ
-3588030464,3588031615,RU
-3588031616,3588031623,LV
-3588031624,3588046847,RU
-3588046848,3588060351,DE
-3588060352,3588060359,CH
-3588060360,3588063231,DE
+3588030464,3588046847,RU
+3588046848,3588063231,DE
3588063232,3588071423,CH
3588071424,3588079615,GB
3588079616,3588095999,CH
3588096000,3588104191,NL
3588104192,3588112383,BG
-3588112384,3588128767,FR
+3588112384,3588128767,RE
3588128768,3588145151,HU
3588145152,3588153343,PL
3588153344,3588161535,RU
-3588161536,3588227071,FR
+3588161536,3588173311,FR
+3588173312,3588173567,RE
+3588173568,3588173823,YT
+3588173824,3588227071,FR
3588227072,3588292607,BE
3588292608,3588308991,AT
3588308992,3588325375,NO
-3588325376,3588328191,GB
-3588328192,3588328447,EU
-3588328448,3588333567,GB
+3588325376,3588333567,GB
3588333568,3588341759,FR
3588341760,3588358143,IT
3588358144,3588374527,BG
-3588390912,3588393983,LT
-3588393984,3588394495,LV
+3588390912,3588394239,LT
+3588394240,3588394495,LV
3588394496,3588407295,LT
3588407296,3588423679,CZ
3588423680,3588440063,ES
@@ -170062,26 +87777,14 @@
3588489216,3588505599,FR
3588505600,3588521983,RU
3588521984,3588538367,PT
-3588538368,3588544383,GB
-3588544384,3588544391,IE
-3588544392,3588553983,GB
-3588553984,3588554239,IE
-3588554240,3588554687,GB
-3588554688,3588554751,IE
+3588538368,3588554751,GB
3588554752,3588571135,AT
3588571136,3588587519,GB
-3588587520,3588588567,ES
-3588588568,3588588575,IT
-3588588576,3588588583,PT
-3588588584,3588590591,ES
+3588587520,3588590591,ES
3588590592,3588590847,FR
-3588590848,3588591999,ES
-3588592000,3588592127,FR
-3588592128,3588595199,ES
+3588590848,3588595199,ES
3588595200,3588595455,FR
-3588595456,3588598607,ES
-3588598608,3588598615,IT
-3588598616,3588603903,ES
+3588595456,3588603903,ES
3588603904,3588620287,SI
3588620288,3588628479,SA
3588628480,3588636671,CH
@@ -170096,19 +87799,11 @@
3588718592,3588734975,BG
3588734976,3588751359,PL
3588751360,3588767743,TR
-3588767744,3588773759,GB
-3588773760,3588773887,SL
-3588773888,3588775935,GB
-3588775936,3588776191,NG
-3588776192,3588782271,GB
-3588782272,3588782279,A2
-3588782280,3588784127,GB
+3588767744,3588784127,GB
3588784128,3588800511,CH
3588800512,3588816895,RU
3588816896,3588833279,IT
-3588833280,3588848767,RO
-3588848768,3588848775,FR
-3588848776,3588849663,RO
+3588833280,3588849663,RO
3588849664,3588857855,IE
3588857856,3588866047,IR
3588866048,3588882431,NL
@@ -170122,891 +87817,148 @@
3588997120,3589013503,AT
3589013504,3589021695,ES
3589021696,3589029887,SA
-3589029888,3589029951,GB
-3589029952,3589030015,NL
-3589030016,3589030111,GB
-3589030112,3589030127,NL
-3589030128,3589030143,GB
-3589030144,3589030183,NL
-3589030184,3589030191,GB
-3589030192,3589030207,NL
-3589030208,3589030239,GB
-3589030240,3589030303,NL
-3589030304,3589030335,FR
-3589030336,3589031423,NL
-3589031424,3589031935,GB
-3589031936,3589034015,NL
-3589034016,3589034111,GB
-3589034112,3589034143,NL
-3589034144,3589034159,ES
-3589034160,3589034167,GB
-3589034168,3589034175,NL
-3589034176,3589034191,GB
-3589034192,3589034207,DE
-3589034208,3589034223,GB
-3589034224,3589034239,NL
-3589034240,3589034495,EU
-3589034496,3589037055,ES
-3589037056,3589037311,EU
-3589037312,3589037343,NL
-3589037344,3589037375,SE
-3589037376,3589037391,NL
-3589037392,3589037407,GB
-3589037408,3589037423,NL
-3589037424,3589037439,ES
-3589037440,3589037471,GB
-3589037472,3589037487,NL
-3589037488,3589037495,IT
-3589037496,3589037503,CH
-3589037504,3589037535,NL
-3589037536,3589037551,GB
-3589037552,3589037559,BE
-3589037560,3589037567,NL
-3589037568,3589038079,ES
-3589038080,3589040127,NL
-3589040128,3589042207,GB
-3589042208,3589042239,NL
-3589042240,3589042271,GB
-3589042272,3589042367,NL
-3589042368,3589043231,GB
-3589043232,3589043327,NL
-3589043328,3589043455,GB
-3589043456,3589043711,NL
-3589043712,3589044223,GB
-3589044224,3589044319,NL
-3589044320,3589046271,GB
+3589029888,3589030119,GB
+3589030120,3589030127,NL
+3589030128,3589031055,GB
+3589031056,3589031056,NL
+3589031057,3589034239,GB
+3589034240,3589034495,NL
+3589034496,3589037055,GB
+3589037056,3589037311,NL
+3589037312,3589046271,GB
3589046272,3589079039,NO
-3589079040,3589092223,DK
-3589092224,3589092227,SE
-3589092228,3589128191,DK
+3589079040,3589128191,DK
3589128192,3589144575,GB
3589144576,3589152767,UA
-3589152768,3589152927,DE
-3589152928,3589152935,CH
-3589152936,3589153027,DE
-3589153028,3589153031,ES
-3589153032,3589156591,DE
-3589156592,3589156607,CH
-3589156608,3589160959,DE
+3589152768,3589160959,DE
3589160960,3589177343,PL
3589177344,3589193727,TR
3589193728,3589210111,SE
3589210112,3589226495,NL
3589226496,3589242879,NO
-3589242880,3589248511,NL
-3589248512,3589248767,GB
-3589248768,3589256191,NL
-3589256192,3589256447,GR
-3589256448,3589258495,NL
-3589258496,3589258751,GB
-3589258752,3589259263,NL
+3589242880,3589259263,NL
3589259264,3589275647,DE
3589275648,3589292031,RS
3589292032,3589308415,AT
3589308416,3589324799,DE
3589324800,3589341183,BG
3589341184,3589373951,PL
-3589373952,3589375495,DE
-3589375496,3589375503,CI
-3589375504,3589390335,DE
+3589373952,3589390335,DE
3589390336,3589423103,RU
-3589423104,3589423615,IT
-3589423616,3589424127,CH
-3589424128,3589424639,SE
-3589424640,3589425151,ES
-3589425152,3589425663,CH
-3589425664,3589426175,GB
-3589426176,3589426239,FR
-3589426240,3589426335,IT
-3589426336,3589426367,GB
-3589426368,3589426399,IT
-3589426400,3589427199,GB
-3589427200,3589427247,FR
-3589427248,3589428223,GB
-3589428224,3589428351,CH
-3589428352,3589429247,GB
-3589429248,3589429503,FR
-3589429504,3589430271,GB
-3589430272,3589430543,FR
-3589430544,3589430559,ES
-3589430560,3589430575,GB
-3589430576,3589430591,ES
-3589430592,3589431039,GB
+3589423104,3589431039,GB
3589431040,3589431295,ES
-3589431296,3589431343,FR
-3589431344,3589431359,GB
-3589431360,3589431423,ES
-3589431424,3589431807,GB
-3589431808,3589432111,CH
-3589432112,3589432127,GB
-3589432128,3589432159,CH
-3589432160,3589432319,GB
-3589432320,3589432575,CH
-3589432576,3589432895,FR
-3589432896,3589432967,CH
-3589432968,3589432975,GB
-3589432976,3589432991,CH
-3589432992,3589433343,GB
-3589433344,3589433375,IT
-3589433376,3589433407,CH
-3589433408,3589433439,SE
-3589433440,3589433471,ES
-3589433472,3589433503,CH
-3589433504,3589433535,IE
-3589433536,3589433567,DK
-3589433568,3589433599,GB
-3589433600,3589434111,IE
-3589434112,3589434623,DK
-3589434624,3589434751,GB
-3589434752,3589434879,ES
-3589434880,3589435391,FR
-3589435392,3589435519,PL
-3589435520,3589435775,ES
-3589435776,3589435903,GB
-3589435904,3589436159,ES
-3589436160,3589436415,GB
-3589436416,3589436671,FR
-3589436672,3589436799,PL
-3589436800,3589436927,GB
-3589436928,3589437183,PL
-3589437184,3589437311,FR
-3589437312,3589437439,GB
-3589437440,3589437695,FR
-3589437696,3589439487,GB
-3589439488,3589444631,SE
-3589444632,3589444639,NO
-3589444640,3589455871,SE
+3589431296,3589432831,GB
+3589432832,3589433087,CH
+3589433088,3589433855,GB
+3589433856,3589434111,IE
+3589434112,3589435759,GB
+3589435760,3589435763,ES
+3589435764,3589439487,GB
+3589439488,3589455871,SE
3589455872,3589472255,RU
3589472256,3589488639,TR
-3589488640,3589491711,RU
-3589491712,3589491743,TJ
-3589491744,3589505023,RU
+3589488640,3589505023,RU
3589505024,3589521407,FI
3589521408,3589537791,IT
3589537792,3589545983,FR
3589545984,3589554175,DE
3589554176,3589570559,PS
-3589570560,3589570655,NL
-3589570656,3589570671,GB
-3589570672,3589570687,NL
-3589570688,3589570783,GB
-3589570784,3589570815,NL
-3589570816,3589571071,GB
-3589571072,3589571135,NL
-3589571136,3589571583,GB
-3589571584,3589571839,NL
-3589571840,3589578751,GB
-3589578752,3589579391,NL
-3589579392,3589579775,GB
-3589579776,3589580799,NL
-3589580800,3589580895,GB
-3589580896,3589581055,NL
-3589581056,3589581183,GB
-3589581184,3589581231,NL
-3589581232,3589581327,GB
-3589581328,3589581439,NL
-3589581440,3589581567,GB
-3589581568,3589581807,NL
-3589581808,3589581823,GB
-3589581824,3589582639,NL
-3589582640,3589582655,GB
-3589582656,3589583487,NL
-3589583488,3589583647,GB
-3589583648,3589583663,NL
-3589583664,3589583743,GB
-3589583744,3589584127,NL
-3589584128,3589584255,GB
-3589584256,3589584271,NL
-3589584272,3589584639,GB
-3589584640,3589585983,NL
-3589585984,3589586175,GB
-3589586176,3589586943,NL
+3589570560,3589578751,GB
+3589578752,3589579007,IN
+3589579008,3589580543,GB
+3589580544,3589580799,NL
+3589580800,3589582975,GB
+3589582976,3589583103,NL
+3589583104,3589583871,GB
+3589583872,3589584127,NL
+3589584128,3589586943,GB
3589586944,3589603327,RS
3589603328,3589668863,FR
3589668864,3589677055,RU
-3589677056,3589680287,FR
-3589680288,3589680303,MQ
-3589680304,3589680600,FR
-3589680601,3589680601,FR
-3589680602,3589680751,FR
-3589680752,3589680767,MQ
-3589680768,3589685247,FR
+3589677056,3589685247,FR
3589685248,3589718015,GB
-3589718016,3589719279,BE
-3589719280,3589719287,FR
-3589719288,3589719343,BE
-3589719344,3589719347,LU
-3589719348,3589720071,BE
-3589720072,3589720079,FR
-3589720080,3589720135,BE
-3589720136,3589720143,GB
-3589720144,3589720263,BE
-3589720264,3589720271,GB
-3589720272,3589720279,FR
-3589720280,3589720303,BE
-3589720304,3589720311,FR
-3589720312,3589720575,BE
-3589720576,3589720583,ES
-3589720584,3589720599,FR
-3589720600,3589720623,BE
-3589720624,3589720631,GB
-3589720632,3589720639,FR
-3589720640,3589720655,BE
-3589720656,3589720663,ES
-3589720664,3589720687,BE
-3589720688,3589720695,GB
-3589720696,3589720703,ES
-3589720704,3589720727,BE
-3589720728,3589720735,GB
-3589720736,3589720743,BE
-3589720744,3589720767,GB
-3589720768,3589720783,BE
-3589720784,3589720799,GB
-3589720800,3589720815,BE
-3589720816,3589720823,GB
-3589720824,3589720839,BE
-3589720840,3589720847,GB
-3589720848,3589720879,BE
-3589720880,3589720887,FR
-3589720888,3589720895,BE
-3589720896,3589720903,IT
-3589720904,3589720935,BE
-3589720936,3589720943,GB
-3589720944,3589720951,FR
-3589720952,3589720983,GB
-3589720984,3589720995,BE
-3589720996,3589721003,GB
-3589721004,3589721015,BE
-3589721016,3589721031,GB
-3589721032,3589721039,BE
-3589721040,3589721047,GB
-3589721048,3589721055,ES
-3589721056,3589721063,BE
-3589721064,3589721071,GB
-3589721072,3589721159,BE
-3589721160,3589721167,GB
-3589721168,3589721231,BE
-3589721232,3589721247,GB
-3589721248,3589721255,FR
-3589721256,3589721279,GB
-3589721280,3589721295,BE
-3589721296,3589721311,FR
-3589721312,3589721855,BE
-3589721856,3589721863,GB
-3589721864,3589721867,BE
-3589721868,3589721883,GB
-3589721884,3589721903,BE
-3589721904,3589721911,GB
-3589721912,3589721951,BE
-3589721952,3589721967,GB
-3589721968,3589722023,BE
+3589718016,3589722023,BE
3589722024,3589722031,FR
-3589722032,3589722111,BE
-3589722112,3589722143,GB
-3589722144,3589722159,BE
-3589722160,3589722167,FR
-3589722168,3589722175,BE
-3589722176,3589722191,GB
-3589722192,3589722199,BE
-3589722200,3589722207,FR
-3589722208,3589722263,BE
-3589722264,3589722271,GB
-3589722272,3589722279,BE
-3589722280,3589722287,FR
-3589722288,3589722303,BE
-3589722304,3589722311,FR
-3589722312,3589722319,GB
-3589722320,3589722335,FR
-3589722336,3589722343,BE
-3589722344,3589722359,FR
-3589722360,3589722383,BE
-3589722384,3589722391,DE
-3589722392,3589722431,BE
-3589722432,3589722439,ES
-3589722440,3589722447,GB
-3589722448,3589722623,BE
-3589722624,3589722631,GB
-3589722632,3589722639,BE
-3589722640,3589722647,GB
-3589722648,3589722703,BE
-3589722704,3589722711,FR
-3589722712,3589722791,BE
-3589722792,3589722799,GB
-3589722800,3589722835,BE
-3589722836,3589722843,GB
-3589722844,3589722943,BE
-3589722944,3589722951,GB
-3589722952,3589722959,FR
-3589722960,3589722983,BE
-3589722984,3589722991,GB
-3589722992,3589723023,BE
-3589723024,3589723031,FR
-3589723032,3589723791,BE
-3589723792,3589723799,FR
-3589723800,3589723975,BE
-3589723976,3589723983,FR
-3589723984,3589724671,BE
-3589724672,3589724679,FR
-3589724680,3589724695,GB
-3589724696,3589724703,BE
-3589724704,3589724719,FR
-3589724720,3589724727,GB
-3589724728,3589724791,BE
-3589724792,3589724807,GB
-3589724808,3589725495,BE
-3589725496,3589725503,PT
-3589725504,3589725663,BE
-3589725664,3589725695,GB
-3589725696,3589725799,BE
-3589725800,3589725807,IE
-3589725808,3589725847,BE
-3589725848,3589725855,IE
-3589725856,3589725911,BE
-3589725912,3589725919,GB
-3589725920,3589725959,BE
-3589725960,3589725967,LU
-3589725968,3589725999,BE
-3589726000,3589726007,FR
-3589726008,3589726047,BE
-3589726048,3589726055,FR
-3589726056,3589726111,BE
-3589726112,3589726119,GB
-3589726120,3589726367,BE
-3589726368,3589726375,FR
-3589726376,3589726423,BE
-3589726424,3589726431,FR
-3589726432,3589726455,BE
-3589726456,3589726463,FR
-3589726464,3589726471,BE
-3589726472,3589726479,GB
-3589726480,3589726487,BE
-3589726488,3589726495,GB
-3589726496,3589726535,BE
-3589726536,3589726543,GB
-3589726544,3589727007,BE
-3589727008,3589727015,FR
-3589727016,3589729735,BE
-3589729736,3589729743,ES
-3589729744,3589729751,GB
-3589729752,3589730087,BE
-3589730088,3589730095,GB
-3589730096,3589730111,BE
-3589730112,3589730119,GB
-3589730120,3589732671,BE
-3589732672,3589732687,GB
-3589732688,3589733375,BE
-3589733376,3589733439,LU
-3589733440,3589734167,BE
-3589734168,3589734175,GB
-3589734176,3589734399,BE
+3589722032,3589734399,BE
3589734400,3589742591,EG
-3589742592,3589742687,NL
-3589742688,3589742695,AT
-3589742696,3589742975,NL
-3589742976,3589743039,IE
-3589743040,3589743458,NL
-3589743459,3589743460,US
-3589743461,3589744895,NL
-3589744896,3589744959,BE
-3589744960,3589745119,NL
-3589745120,3589745151,BE
-3589745152,3589746175,NL
+3589742592,3589746175,NL
3589746176,3589746687,US
-3589746688,3589747071,NL
-3589747072,3589747103,ES
-3589747104,3589767167,NL
+3589746688,3589767167,NL
3589767168,3589816319,RU
-3589816320,3589825791,EU
3589825792,3589826047,DE
-3589826048,3589827071,EU
-3589827072,3589827327,SE
-3589827328,3589827647,EU
-3589827648,3589827679,DE
-3589827680,3589827711,EU
-3589827712,3589828095,DE
-3589828096,3589828111,FR
-3589828112,3589828127,EU
-3589828128,3589828159,DE
-3589828160,3589828223,GB
-3589828224,3589828607,FR
-3589828608,3589828639,SE
-3589828640,3589828671,NL
-3589828672,3589828735,SE
-3589828736,3589828991,NL
-3589828992,3589829119,ES
-3589829120,3589829375,GB
-3589829376,3589829503,FR
-3589829504,3589829631,DE
-3589829632,3589830655,GB
-3589830656,3589831167,DE
-3589831168,3589831679,US
+3589827712,3589827839,DE
+3589828352,3589828607,FR
+3589828736,3589828863,NL
+3589829632,3589830143,GB
3589831680,3589831935,FR
-3589831936,3589832191,EU
-3589832192,3589832703,FR
3589832704,3589849087,TR
3589849088,3589865471,GB
3589865472,3589881855,GR
3589881856,3589890047,NL
-3589890048,3589890191,BE
-3589890192,3589890303,GB
-3589890304,3589890367,BE
-3589890368,3589890431,GB
-3589890432,3589890559,BE
-3589890560,3589890687,GB
-3589890688,3589891327,BE
-3589891328,3589891615,GB
-3589891616,3589891631,BE
-3589891632,3589931007,GB
-3589931008,3589937647,SI
-3589937648,3589937663,AT
-3589937664,3589947391,SI
+3589890048,3589931007,GB
+3589931008,3589947391,SI
3589947392,3589963775,FI
-3589963776,3589971231,ES
-3589971232,3589971247,CA
-3589971248,3589980159,ES
+3589963776,3589980159,ES
3589980160,3589996543,CZ
-3589996544,3589997055,GB
-3589997056,3589997311,NL
-3589997312,3590012927,GB
+3589996544,3590012927,GB
3590012928,3590029311,BE
-3590029312,3590033759,FR
-3590033760,3590033775,AU
-3590033776,3590045695,FR
+3590029312,3590045695,FR
3590045696,3590062079,RU
3590062080,3590078463,DE
3590078464,3590094847,RU
3590094848,3590111231,DE
-3590111232,3590113023,LT
-3590113024,3590113279,LV
-3590113280,3590127615,LT
+3590111232,3590127615,LT
3590127616,3590143999,GB
-3590144000,3590155775,SI
-3590155776,3590155799,HR
-3590155800,3590155815,SI
-3590155816,3590155823,HR
-3590155824,3590155871,SI
-3590155872,3590156407,HR
-3590156408,3590156415,RS
-3590156416,3590156431,HR
-3590156432,3590156447,SI
-3590156448,3590156599,HR
-3590156600,3590156607,SI
-3590156608,3590156671,HR
-3590156672,3590156687,SI
-3590156688,3590156719,HR
-3590156720,3590156735,SI
-3590156736,3590156943,HR
-3590156944,3590156951,SI
-3590156952,3590156959,HR
-3590156960,3590157039,SI
-3590157040,3590157311,HR
-3590157312,3590157343,RS
-3590157344,3590157351,SI
-3590157352,3590157359,RS
-3590157360,3590157439,SI
-3590157440,3590157471,RS
-3590157472,3590157487,SI
-3590157488,3590157567,RS
-3590157568,3590157631,SI
-3590157632,3590157727,RS
-3590157728,3590157743,SI
-3590157744,3590157751,RS
-3590157752,3590157759,SI
-3590157760,3590157783,RS
-3590157784,3590157791,SI
-3590157792,3590157839,RS
-3590157840,3590157855,SI
-3590157856,3590157887,HR
-3590157888,3590157951,RS
-3590157952,3590158079,SI
-3590158080,3590158335,BA
-3590158336,3590158343,RS
-3590158344,3590158359,SI
-3590158360,3590158367,RS
-3590158368,3590158407,SI
-3590158408,3590158415,RS
-3590158416,3590158431,ME
-3590158432,3590158503,RS
-3590158504,3590158519,SI
-3590158520,3590159359,RS
-3590159360,3590160383,SI
+3590144000,3590156287,SI
+3590156288,3590157311,HR
+3590157312,3590158335,RS
+3590158336,3590160383,SI
3590160384,3590176767,GB
-3590176768,3590178615,HU
-3590178616,3590178623,MK
-3590178624,3590193151,HU
-3590193152,3590196575,IT
-3590196576,3590196583,DE
-3590196584,3590201343,IT
+3590176768,3590193151,HU
+3590193152,3590201343,IT
3590201344,3590209535,DE
3590209536,3590225919,ES
3590225920,3590234111,TR
3590234112,3590242303,GB
3590242304,3590244351,US
3590244352,3590244607,DE
-3590244608,3590244863,IT
-3590244864,3590245119,US
-3590245120,3590245135,BE
-3590245136,3590245143,GB
-3590245144,3590245183,BE
-3590245184,3590245311,FR
+3590244608,3590245311,FR
3590245312,3590245439,US
-3590245440,3590245503,FR
-3590245504,3590245567,GB
-3590245568,3590246175,FR
-3590246176,3590246207,AU
-3590246208,3590246271,FR
-3590246272,3590246287,DE
-3590246288,3590246399,FR
-3590246400,3590246911,US
-3590246912,3590247039,DE
-3590247040,3590247055,IT
-3590247056,3590247063,DE
-3590247064,3590247071,FR
-3590247072,3590247103,IT
-3590247104,3590247167,FR
+3590245440,3590247167,FR
3590247168,3590247231,US
-3590247232,3590247295,IT
+3590247232,3590247295,FR
3590247296,3590247423,US
-3590247424,3590247487,IT
+3590247424,3590247487,FR
3590247488,3590247551,US
-3590247552,3590247679,IT
-3590247680,3590247687,GB
-3590247688,3590247711,FR
-3590247712,3590247743,FR
-3590247744,3590248447,FR
-3590248448,3590248959,US
-3590248960,3590249471,ES
-3590249472,3590249983,IE
-3590249984,3590250239,FR
-3590250240,3590250495,GR
+3590247552,3590247711,FR
+3590247712,3590247743,IE
+3590247744,3590250495,FR
3590250496,3590250751,IE
-3590250752,3590251263,FR
-3590251264,3590251519,DE
-3590251520,3590251583,FR
-3590251584,3590251647,US
+3590250752,3590251647,FR
3590251648,3590251775,NL
-3590251776,3590251967,FR
-3590251968,3590252287,ES
-3590252288,3590252543,FR
+3590251776,3590252543,FR
3590252544,3590253055,LB
-3590253056,3590253311,DE
+3590253056,3590253311,FR
3590253312,3590253567,GB
-3590253568,3590254079,FR
-3590254080,3590254111,DE
-3590254112,3590254127,FR
-3590254128,3590254135,GB
-3590254136,3590254143,FR
-3590254144,3590254271,US
-3590254272,3590254279,GB
-3590254280,3590254287,BE
-3590254288,3590254847,FR
+3590253568,3590254847,FR
3590254848,3590255103,GB
-3590255104,3590255359,ES
-3590255360,3590255871,FR
-3590255872,3590256127,US
+3590255104,3590255871,FR
+3590255872,3590255935,US
+3590255936,3590256127,FR
3590256128,3590256383,ES
-3590256384,3590256639,FR
-3590256640,3590256703,US
-3590256704,3590256719,BE
-3590256720,3590256735,PL
+3590256384,3590256735,FR
3590256736,3590256767,BE
3590256768,3590257151,US
-3590257152,3590258175,DE
-3590258176,3590258387,FR
-3590258388,3590258391,DE
-3590258392,3590258399,GB
-3590258400,3590258431,FR
-3590258432,3590258447,GB
-3590258448,3590258463,FR
-3590258464,3590258495,US
-3590258496,3590258559,FR
+3590257152,3590258559,FR
3590258560,3590258687,US
3590258688,3590291455,IT
3590291456,3590299647,EG
3590299648,3590307839,FI
-3590307840,3590307903,FR
-3590307904,3590307935,UA
-3590307936,3590307951,GB
-3590307952,3590307967,NG
-3590307968,3590307975,GB
-3590307976,3590307979,VG
-3590307980,3590307987,GB
-3590307988,3590307991,CD
-3590307992,3590307995,FR
-3590307996,3590308031,GB
-3590308032,3590308047,UG
-3590308048,3590308055,NG
-3590308056,3590308063,GB
-3590308064,3590308071,SO
-3590308072,3590308079,GB
-3590308080,3590308087,IQ
-3590308088,3590308095,GB
-3590308096,3590308103,IQ
-3590308104,3590308135,GB
-3590308136,3590308143,IQ
-3590308144,3590308183,GB
-3590308184,3590308191,IQ
-3590308192,3590308199,GB
-3590308200,3590308238,IQ
-3590308239,3590308255,GB
-3590308256,3590308287,IQ
-3590308288,3590308303,GB
-3590308304,3590308311,SO
-3590308312,3590308319,IQ
-3590308320,3590308327,GB
-3590308328,3590308335,IQ
-3590308336,3590308359,GB
-3590308360,3590308367,IQ
-3590308368,3590308375,GB
-3590308376,3590308391,IQ
-3590308392,3590308399,GB
-3590308400,3590308407,IQ
-3590308408,3590308415,GB
-3590308416,3590308431,IQ
-3590308432,3590308439,GB
-3590308440,3590308447,IQ
-3590308448,3590308519,GB
-3590308520,3590308527,IQ
-3590308528,3590308535,GB
-3590308536,3590308543,IQ
-3590308544,3590308551,GB
-3590308552,3590308559,IQ
-3590308560,3590308567,GB
-3590308568,3590308583,IQ
-3590308584,3590308607,GB
-3590308608,3590308863,US
-3590308864,3590309119,ZM
-3590309120,3590309123,GB
-3590309124,3590309127,IQ
-3590309128,3590309175,GB
-3590309176,3590309179,KE
-3590309180,3590309199,GB
-3590309200,3590309203,KE
-3590309204,3590309251,GB
-3590309252,3590309255,SO
-3590309256,3590309503,GB
-3590309504,3590309511,KE
-3590309512,3590309519,AO
-3590309520,3590309527,VG
-3590309528,3590309535,CM
-3590309536,3590309543,SO
-3590309544,3590309551,AM
-3590309552,3590309575,GB
-3590309576,3590309583,US
-3590309584,3590309615,GB
-3590309616,3590309623,UG
-3590309624,3590309631,GB
-3590309632,3590309647,IQ
-3590309648,3590309671,GB
-3590309672,3590309687,IQ
-3590309688,3590309711,GB
-3590309712,3590309719,IQ
-3590309720,3590309727,GB
-3590309728,3590309759,IQ
-3590309760,3590309775,GB
-3590309776,3590309791,IQ
-3590309792,3590309799,GB
-3590309800,3590309807,IQ
-3590309808,3590309815,GB
-3590309816,3590309839,IQ
-3590309840,3590309863,GB
-3590309864,3590309871,IQ
-3590309872,3590309879,GB
-3590309880,3590309887,IQ
-3590309888,3590310143,BF
-3590310144,3590310167,IQ
-3590310168,3590310175,GB
-3590310176,3590310183,LR
-3590310184,3590310191,GB
-3590310192,3590310215,IQ
-3590310216,3590310223,GB
-3590310224,3590310247,IQ
-3590310248,3590310271,GB
-3590310272,3590310279,IQ
-3590310280,3590310287,GB
-3590310288,3590310303,IQ
-3590310304,3590310311,GB
-3590310312,3590310319,IQ
-3590310320,3590310359,GB
-3590310360,3590310367,IQ
-3590310368,3590310911,GB
-3590310912,3590310919,IQ
-3590310920,3590310951,GB
-3590310952,3590310959,IQ
-3590310960,3590310967,GB
-3590310968,3590310991,IQ
-3590310992,3590311031,GB
-3590311032,3590311039,IQ
-3590311040,3590311055,GB
-3590311056,3590311063,IQ
-3590311064,3590311079,GB
-3590311080,3590311087,IQ
-3590311088,3590311103,GB
-3590311104,3590311111,IQ
-3590311112,3590311127,GB
-3590311128,3590311135,IQ
-3590311136,3590311151,GB
-3590311152,3590311167,IQ
-3590311168,3590311175,GB
-3590311176,3590311183,CD
-3590311184,3590311207,GB
-3590311208,3590311215,CD
-3590311216,3590311223,GB
-3590311224,3590311231,CD
-3590311232,3590311255,GB
-3590311256,3590311263,ZW
-3590311264,3590311271,GB
-3590311272,3590311279,SD
-3590311280,3590311295,GB
-3590311296,3590311303,LR
-3590311304,3590311311,GB
-3590311312,3590311319,CD
-3590311320,3590311327,CI
-3590311328,3590311335,CD
-3590311336,3590311343,SD
-3590311344,3590311351,GB
-3590311352,3590311359,CD
-3590311360,3590311367,LY
-3590311368,3590311383,CD
-3590311384,3590311391,NG
-3590311392,3590311679,GB
-3590311680,3590311935,YT
-3590311936,3590311999,GB
-3590312000,3590312007,CM
-3590312008,3590312015,GB
-3590312016,3590312023,IL
-3590312024,3590312031,VG
-3590312032,3590312039,IL
-3590312040,3590312047,LR
-3590312048,3590312055,MU
-3590312056,3590312063,GB
-3590312064,3590312071,LR
-3590312072,3590312079,IL
-3590312080,3590312095,GB
-3590312096,3590312103,ZA
-3590312104,3590312111,GB
-3590312112,3590312119,SS
-3590312120,3590312135,GB
-3590312136,3590312143,SS
-3590312144,3590312151,GB
-3590312152,3590312159,ER
-3590312160,3590312175,GB
-3590312176,3590312183,IL
-3590312184,3590312447,GB
-3590312448,3590312703,MW
-3590312704,3590312799,GB
-3590312800,3590312807,KE
-3590312808,3590312895,GB
-3590312896,3590312903,ZA
-3590312904,3590312911,AO
-3590312912,3590312919,NG
-3590312920,3590312927,GB
-3590312928,3590312943,UG
-3590312944,3590312951,GB
-3590312952,3590312959,NG
-3590312960,3590314495,GB
-3590314496,3590315007,US
-3590315008,3590316031,GB
-3590316032,3590316039,TZ
-3590316040,3590316047,GB
-3590316048,3590316055,GH
-3590316056,3590316063,IQ
-3590316064,3590316071,SO
-3590316072,3590316079,GB
-3590316080,3590316087,LB
-3590316088,3590316127,GB
-3590316128,3590316151,NG
-3590316152,3590316287,US
-3590316288,3590316351,GB
-3590316352,3590316415,US
-3590316416,3590316479,GB
-3590316480,3590316543,SO
-3590316544,3590316559,GB
-3590316560,3590316567,US
-3590316568,3590316575,GA
-3590316576,3590316591,GB
-3590316592,3590316599,IQ
-3590316600,3590316603,SO
-3590316604,3590316623,GB
-3590316624,3590316631,KE
-3590316632,3590316663,GB
-3590316664,3590316671,LY
-3590316672,3590316731,GB
-3590316732,3590316735,VG
-3590316736,3590317055,GB
-3590317056,3590317311,NG
-3590317312,3590317343,AO
-3590317344,3590317439,GB
-3590317440,3590317447,AM
-3590317448,3590317455,LB
-3590317456,3590317463,IQ
-3590317464,3590317471,GB
-3590317472,3590317479,MW
-3590317480,3590317495,GB
-3590317496,3590317503,LB
-3590317504,3590317527,GB
-3590317528,3590317543,IQ
-3590317544,3590317951,GB
-3590317952,3590318047,UA
-3590318048,3590319167,GB
-3590319168,3590319231,AE
-3590319232,3590319335,GB
-3590319336,3590319359,AE
-3590319360,3590319423,GB
-3590319424,3590319455,AE
-3590319456,3590319967,GB
-3590319968,3590319999,AE
-3590320000,3590320199,GB
-3590320200,3590320207,IQ
-3590320208,3590320231,GB
-3590320232,3590320239,IQ
-3590320240,3590320303,GB
-3590320304,3590320319,IQ
-3590320320,3590320335,GB
-3590320336,3590320343,UG
-3590320344,3590320351,GB
-3590320352,3590320359,IQ
-3590320360,3590320375,GB
-3590320376,3590320383,IQ
-3590320384,3590321679,GB
-3590321680,3590321687,CM
-3590321688,3590321695,GB
-3590321696,3590321711,ZW
-3590321712,3590321943,GB
-3590321944,3590321959,IQ
-3590321960,3590321967,GB
-3590321968,3590321983,TR
-3590321984,3590322007,GB
-3590322008,3590322015,IQ
-3590322016,3590322063,GB
-3590322064,3590322071,IQ
-3590322072,3590322111,GB
-3590322112,3590322119,BJ
-3590322120,3590322151,GB
-3590322152,3590322159,LY
-3590322160,3590322175,GB
-3590322176,3590322431,A2
-3590322432,3590322559,LB
-3590322560,3590322607,GB
-3590322608,3590322687,LB
-3590322688,3590323199,IQ
-3590323200,3590323711,MW
-3590323712,3590323903,GB
-3590323904,3590323911,CD
-3590323912,3590323983,GB
-3590323984,3590323991,MU
-3590323992,3590323999,VG
-3590324000,3590324007,LR
-3590324008,3590324015,GB
-3590324016,3590324023,NG
-3590324024,3590324031,ZW
-3590324032,3590324151,GB
-3590324152,3590324159,US
-3590324160,3590324167,UG
-3590324168,3590324199,GB
-3590324200,3590324207,TZ
-3590324208,3590324215,CD
-3590324216,3590324223,NG
+3590307840,3590312935,GB
+3590312936,3590312943,UG
+3590312944,3590317951,GB
+3590317952,3590318015,UA
+3590318016,3590324223,GB
3590324224,3623890943,US
3623890944,3623891199,ZA
3623891200,3623891455,US
@@ -171023,14 +87975,11 @@
3624255488,3624257535,ZA
3624257536,3624271871,US
3624271872,3624272383,SY
-3624272384,3624272415,US
-3624272416,3624272639,CA
+3624272384,3624272639,CA
3624272640,3624272895,DZ
3624272896,3624275967,CA
3624275968,3624276223,US
-3624276224,3624279071,CA
-3624279072,3624279087,BD
-3624279088,3624281087,CA
+3624276224,3624281087,CA
3624281088,3624281343,HT
3624281344,3624283135,CA
3624283136,3624284159,US
@@ -171057,502 +88006,79 @@
3624302848,3624303103,MY
3624303104,3624303359,CA
3624303360,3624303615,US
-3624303616,3624303743,CA
-3624303744,3624303759,ZA
-3624303760,3624304639,CA
+3624303616,3624304639,CA
3624304640,3624321023,US
3624321024,3624325119,CA
-3624325120,3624330511,US
-3624330512,3624330519,CA
-3624330520,3624357887,US
+3624325120,3624357887,US
3624357888,3624358143,KN
3624358144,3624359679,US
3624359680,3624360703,CW
-3624360704,3624374431,US
-3624374432,3624374439,GB
-3624374440,3624376279,US
-3624376280,3624376295,GB
+3624360704,3624374447,US
+3624374448,3624374455,ES
+3624374456,3624375871,US
+3624375872,3624375879,NL
+3624375880,3624376247,US
+3624376248,3624376263,ES
+3624376264,3624376287,US
+3624376288,3624376295,GB
3624376296,3624376335,US
3624376336,3624376343,AU
3624376344,3624376351,US
3624376352,3624376359,PT
-3624376360,3624376567,US
-3624376568,3624376575,NL
-3624376576,3624376655,US
-3624376656,3624376679,GB
-3624376680,3624377879,US
+3624376360,3624377863,US
+3624377864,3624377871,GB
+3624377872,3624377879,US
3624377880,3624377887,GB
3624377888,3624377903,US
3624377904,3624377911,GB
-3624377912,3624377919,US
-3624377920,3624377935,ES
-3624377936,3624380831,US
-3624380832,3624380839,OM
-3624380840,3624380935,US
-3624380936,3624380943,SA
-3624380944,3624381567,US
-3624381568,3624381583,MY
-3624381584,3624381807,US
-3624381808,3624381823,IN
-3624381824,3624381903,US
-3624381904,3624381919,CA
-3624381920,3624382031,US
-3624382032,3624382047,RO
-3624382048,3624382111,US
-3624382112,3624382127,AU
-3624382128,3624382671,US
-3624382672,3624382687,AU
-3624382688,3624383071,US
-3624383072,3624383087,GB
-3624383088,3624383287,US
-3624383288,3624383295,AU
-3624383296,3624386559,US
+3624377912,3624386559,US
3624386560,3624394751,CA
3624394752,3624435711,US
-3624435712,3624443903,CA
-3624443904,3624443919,US
-3624443920,3624444303,CA
-3624444304,3624444319,US
-3624444320,3624444343,CA
-3624444344,3624444351,US
-3624444352,3624444359,CA
-3624444360,3624444367,US
-3624444368,3624452095,CA
+3624435712,3624443391,CA
+3624443392,3624443903,US
+3624443904,3624452095,CA
3624452096,3624480767,US
3624480768,3624484863,CA
3624484864,3624534015,US
3624534016,3624534271,PA
3624534272,3624536063,CA
-3624536064,3624546559,US
-3624546560,3624546687,A2
-3624546688,3624546695,CA
-3624546696,3624546815,A2
-3624546816,3624547327,US
-3624547328,3624547647,A2
-3624547648,3624547711,US
-3624547712,3624547743,A2
-3624547744,3624547839,US
-3624547840,3624547847,A2
-3624547848,3624547863,US
-3624547864,3624547871,A2
-3624547872,3624547895,US
-3624547896,3624547919,A2
-3624547920,3624547967,US
-3624547968,3624548007,A2
-3624548008,3624548031,US
-3624548032,3624548039,A2
-3624548040,3624548063,US
-3624548064,3624548087,A2
-3624548088,3624548095,US
-3624548096,3624548351,A2
-3624548352,3624548359,US
-3624548360,3624548679,A2
-3624548680,3624548687,US
-3624548688,3624548703,A2
-3624548704,3624548711,US
-3624548712,3624548735,A2
-3624548736,3624548935,US
-3624548936,3624548959,A2
-3624548960,3624548975,US
-3624548976,3624549023,A2
-3624549024,3624549047,US
-3624549048,3624549063,A2
-3624549064,3624549079,US
-3624549080,3624549087,A2
-3624549088,3624549103,US
-3624549104,3624549111,A2
-3624549112,3624549383,US
-3624549384,3624549471,A2
-3624549472,3624549479,US
-3624549480,3624549583,A2
-3624549584,3624549615,US
-3624549616,3624550143,A2
-3624550144,3624587263,US
+3624536064,3624587263,US
3624587264,3624591359,JM
-3624591360,3624714239,US
-3624714240,3624714703,SG
-3624714704,3624714711,MV
-3624714712,3624716223,SG
-3624716224,3624716255,AU
-3624716256,3624717311,SG
+3624594176,3624594431,US
+3624595456,3624706047,US
+3624710144,3624714239,US
+3624714240,3624717311,SG
3624717312,3624718335,US
3624718336,3624720383,SG
3624720384,3624720895,US
3624720896,3624721919,SG
3624721920,3624730623,US
-3624730624,3624781823,CA
-3624781824,3624782079,SS
-3624782080,3624796159,CA
-3624796160,3624820735,US
-3624820736,3624820799,CY
-3624820800,3624821695,US
-3624821696,3624821703,GB
-3624821704,3624828927,US
+3624730624,3624796159,CA
+3624796160,3624812543,US
+3624813056,3624814079,US
+3624814336,3624815103,US
+3624815616,3624828927,US
3624828928,3624833023,CA
3624833024,3624845311,US
3624845312,3624849407,AU
-3624849408,3624895055,US
-3624895056,3624895071,TZ
-3624895072,3624895103,US
-3624895104,3624895119,DE
-3624895120,3624895135,US
-3624895136,3624895151,IN
-3624895152,3624895167,US
-3624895168,3624895183,VE
-3624895184,3624895935,US
-3624895936,3624895967,IN
-3624895968,3624895999,US
-3624896000,3624896255,CA
-3624896256,3624896383,US
-3624896384,3624896415,IN
-3624896416,3624897279,US
-3624897280,3624897407,CA
-3624897408,3624897535,US
-3624897536,3624897663,CA
-3624897664,3624897791,US
-3624897792,3624898047,IN
-3624898048,3624898303,US
-3624898304,3624898559,CA
-3624898560,3624899583,US
-3624899584,3624899839,CR
-3624899840,3624900607,US
-3624900608,3624900639,AU
-3624900640,3624900735,US
-3624900736,3624900767,CA
-3624900768,3624900831,US
-3624900832,3624900863,DE
-3624900864,3624900903,US
-3624900904,3624900911,CA
-3624900912,3624900951,US
-3624900952,3624900959,FR
-3624900960,3624901279,US
-3624901280,3624901311,CA
-3624901312,3624902111,US
-3624902112,3624902143,IN
-3624902144,3624902271,US
-3624902272,3624902399,MY
-3624902400,3624902655,US
-3624902656,3624902783,IN
-3624902784,3624902911,CA
-3624902912,3624902943,US
-3624902944,3624902975,CA
-3624902976,3624903071,US
-3624903072,3624903103,HK
-3624903104,3624903455,US
-3624903456,3624903487,CA
-3624903488,3624903519,US
-3624903520,3624903583,CA
-3624903584,3624903679,US
-3624903680,3624903807,CA
-3624903808,3624903935,US
-3624903936,3624904447,CA
-3624904448,3624904703,US
-3624904704,3624904767,IN
-3624904768,3624904831,US
-3624904832,3624904895,CA
-3624904896,3624905087,US
-3624905088,3624905215,CA
-3624905216,3624905471,US
-3624905472,3624905727,CA
-3624905728,3624906239,US
-3624906240,3624906495,CA
-3624906496,3624906751,US
-3624906752,3624906879,CA
-3624906880,3624907007,TW
-3624907008,3624907071,US
-3624907072,3624907103,CA
-3624907104,3624907519,US
-3624907520,3624907551,IN
-3624907552,3624907583,US
-3624907584,3624907615,CA
-3624907616,3624907679,US
-3624907680,3624907711,IN
-3624907712,3624907745,US
-3624907746,3624907775,IN
-3624907776,3624907903,US
-3624907904,3624908031,SG
-3624908032,3624908159,CA
-3624908160,3624908383,US
-3624908384,3624908415,IN
-3624908416,3624908447,CA
-3624908448,3624908479,US
-3624908480,3624908511,CA
-3624908512,3624908559,US
-3624908560,3624908575,MY
-3624908576,3624908607,US
-3624908608,3624908622,CA
-3624908623,3624908639,US
-3624908640,3624908687,CA
-3624908688,3624909471,US
-3624909472,3624909503,AU
-3624909504,3624909567,US
-3624909568,3624909822,MY
-3624909823,3624909823,US
-3624909824,3624909951,CA
-3624909952,3624910079,US
-3624910080,3624910111,CA
-3624910112,3624910143,US
-3624910144,3624910175,CA
-3624910176,3624910271,US
-3624910272,3624910303,FR
-3624910304,3624910591,US
-3624910592,3624910623,CA
-3624910624,3624910687,US
-3624910688,3624910719,CA
-3624910720,3624910751,US
-3624910752,3624910783,TZ
-3624910784,3624910815,US
-3624910816,3624910847,AU
-3624910848,3624910911,US
-3624910912,3624910943,IN
-3624910944,3624910975,US
-3624910976,3624911007,FR
-3624911008,3624911039,CA
-3624911040,3624911167,US
-3624911168,3624911199,MY
-3624911200,3624911231,US
-3624911232,3624911263,CA
-3624911264,3624911327,US
-3624911328,3624911359,CA
-3624911360,3624911391,US
-3624911392,3624911399,TR
-3624911400,3624911607,US
-3624911608,3624911615,UA
-3624911616,3624911647,US
-3624911648,3624911651,RU
-3624911652,3624911999,US
-3624912000,3624912127,CA
-3624912128,3624912679,US
-3624912680,3624912687,IN
-3624912688,3624912727,US
-3624912728,3624912735,TT
-3624912736,3624912759,US
-3624912760,3624912767,MY
-3624912768,3624912807,US
-3624912808,3624912815,MY
-3624912816,3624912863,US
-3624912864,3624912871,MX
-3624912872,3624913023,US
-3624913024,3624913087,IN
-3624913088,3624913247,US
-3624913248,3624913279,CA
-3624913280,3624913311,US
-3624913312,3624913343,CA
-3624913344,3624913375,PK
-3624913376,3624913407,US
-3624913408,3624913535,CA
-3624913536,3624913663,IN
-3624913664,3624914047,US
-3624914048,3624914079,IN
-3624914080,3624914143,US
-3624914144,3624914175,GB
-3624914176,3624914271,US
-3624914272,3624914303,CA
-3624914304,3624914335,US
-3624914336,3624914367,CA
-3624914368,3624914399,IN
-3624914400,3624914943,US
-3624914944,3624915071,CA
-3624915072,3624915455,US
-3624915456,3624915487,CA
-3624915488,3624915903,US
-3624915904,3624915935,HK
-3624915936,3624916223,US
-3624916224,3624916479,CA
-3624916480,3624917919,US
-3624917920,3624917951,CA
-3624917952,3624918527,US
-3624918528,3624918815,CA
-3624918816,3624918847,US
-3624918848,3624918875,IN
-3624918876,3624919423,US
-3624919424,3624919551,IN
-3624919552,3624919999,US
-3624920000,3624920031,CA
-3624920032,3624920063,TZ
-3624920064,3624920191,CA
-3624920192,3624920319,IN
-3624920320,3624920703,CA
-3624920704,3624920831,IN
-3624920832,3624920959,US
-3624920960,3624921087,IN
-3624921088,3624921215,PK
-3624921216,3624921855,US
-3624921856,3624922111,CA
-3624922112,3624922143,US
-3624922144,3624922175,FR
-3624922176,3624922207,MY
-3624922208,3624922239,FR
-3624922240,3624922335,US
-3624922336,3624922367,FR
-3624922368,3624922495,IN
-3624922496,3624922623,US
-3624922624,3624922687,CA
-3624922688,3624922783,US
-3624922784,3624922815,CN
-3624922816,3624922847,FR
-3624922848,3624922879,US
-3624922880,3624923135,IN
-3624923136,3624923263,CA
-3624923264,3624923391,US
-3624923392,3624923519,CA
-3624923520,3624923647,US
-3624923648,3624923775,CA
-3624923776,3624923903,US
-3624923904,3624923935,CA
-3624923936,3624923967,US
-3624923968,3624923999,IN
-3624924000,3624924095,US
-3624924096,3624924127,CA
-3624924128,3624924287,US
-3624924288,3624924703,CA
-3624924704,3624924895,US
-3624924896,3624924927,CA
-3624924928,3624925054,US
-3624925055,3624925695,CA
-3624925696,3624926335,US
-3624926336,3624926463,TZ
-3624926464,3624926527,CA
-3624926528,3624926655,US
-3624926656,3624926975,CA
-3624926976,3624927167,US
-3624927168,3624927199,TH
-3624927200,3624984575,US
-3624984576,3624986367,CA
-3624986368,3624986399,US
-3624986400,3624991223,CA
-3624991224,3624991231,US
-3624991232,3624992767,CA
-3624992768,3625042327,US
-3625042328,3625042335,IT
-3625042336,3625058303,US
+3624849408,3624984575,US
+3624984576,3624992767,CA
+3624992768,3625058303,US
3625058304,3625091071,CA
-3625091072,3625116671,US
-3625116672,3625116767,CA
-3625116768,3625116927,US
+3625091072,3625116927,US
3625116928,3625117183,SE
-3625117184,3625118233,US
-3625118234,3625118241,CA
-3625118242,3625118271,US
-3625118272,3625118287,CA
-3625118288,3625118975,US
-3625118976,3625119056,PL
-3625119057,3625140223,US
+3625117184,3625140223,US
3625140224,3625148415,CA
3625148416,3625168895,US
3625168896,3625172991,CA
-3625172992,3625176767,US
-3625176768,3625176831,NZ
-3625176832,3625243215,US
-3625243216,3625243223,CA
-3625243224,3625245439,US
-3625245440,3625245767,MX
-3625245768,3625245903,US
-3625245904,3625245911,BZ
-3625245912,3625245951,US
-3625245952,3625246255,MX
-3625246256,3625246263,US
-3625246264,3625246271,MX
-3625246272,3625246279,US
-3625246280,3625246287,MX
-3625246288,3625246295,US
-3625246296,3625246375,MX
-3625246376,3625246399,US
-3625246400,3625246535,MX
-3625246536,3625246543,US
-3625246544,3625246719,MX
-3625246720,3625287679,US
-3625287680,3625288887,CA
-3625288888,3625288895,US
-3625288896,3625289959,CA
-3625289960,3625289967,US
-3625289968,3625292575,CA
-3625292576,3625292583,US
-3625292584,3625292671,CA
-3625292672,3625292679,US
-3625292680,3625292927,CA
-3625292928,3625292935,US
-3625292936,3625295871,CA
-3625299968,3625314559,US
-3625314560,3625314815,CA
-3625314816,3625320447,US
-3625320448,3625320467,CA
-3625320468,3625325055,US
-3625325056,3625325087,RU
-3625325088,3625326632,US
-3625326633,3625326642,GB
-3625326643,3625327748,US
-3625327749,3625327812,ID
-3625327813,3625327814,US
-3625327815,3625327824,GB
-3625327825,3625333383,US
-3625333384,3625333391,GB
-3625333392,3625333455,US
-3625333456,3625333463,GB
-3625333464,3625346047,US
+3625172992,3625259263,US
+3625260032,3625287679,US
+3625287680,3625295871,CA
+3625295872,3625346047,US
3625346048,3625346303,AR
-3625346304,3625357631,US
-3625357632,3625357639,CA
-3625357640,3625358055,US
-3625358056,3625358063,CH
-3625358064,3625364351,US
-3625364352,3625364479,DE
-3625364480,3625364607,NL
-3625364608,3625364733,DE
-3625364734,3625364895,US
-3625364896,3625364911,NO
-3625364912,3625364951,US
-3625364952,3625364959,NL
-3625364960,3625364967,ZA
-3625364968,3625373711,US
-3625373712,3625373719,GB
-3625373720,3625373735,US
-3625373736,3625373743,CA
-3625373744,3625373751,GB
-3625373752,3625373823,US
-3625373824,3625373831,CA
-3625373832,3625373887,US
-3625373888,3625373895,GB
-3625373896,3625373953,US
-3625373954,3625373983,CA
-3625373984,3625374031,US
-3625374032,3625374044,GB
-3625374045,3625374047,US
-3625374048,3625374063,CA
-3625374064,3625374143,US
-3625374144,3625374159,CA
-3625374160,3625374879,US
-3625374880,3625374911,MX
-3625374912,3625375039,US
-3625375040,3625375071,CA
-3625375072,3625375135,US
-3625375136,3625375167,RU
-3625375168,3625375247,US
-3625375248,3625375255,CA
-3625375256,3625375359,US
-3625375360,3625375367,SE
-3625375368,3625375399,US
-3625375400,3625375407,MT
-3625375408,3625375519,US
-3625375520,3625375527,JM
-3625375528,3625375599,US
-3625375600,3625375607,JM
-3625375608,3625375935,US
-3625375936,3625375982,SG
-3625375983,3625376031,US
-3625376032,3625376063,AR
-3625376064,3625376159,US
-3625376160,3625376191,LB
-3625376192,3625376223,TR
-3625376224,3625377023,US
-3625377024,3625377535,TH
-3625377536,3625377583,US
-3625377584,3625377599,CA
-3625377600,3625381911,US
-3625381912,3625381919,CA
-3625381920,3625382079,US
-3625382080,3625382111,CA
-3625382112,3625418751,US
+3625346304,3625377279,US
+3625377280,3625377535,TH
+3625377536,3625418751,US
3625418752,3625420031,CA
3625420032,3625420543,US
3625420544,3625422591,CA
@@ -171560,454 +88086,30 @@
3625423104,3625426943,CA
3625426944,3625508863,US
3625508864,3625512959,CA
-3625512960,3625514303,US
-3625514304,3625514367,GB
-3625514368,3625528541,US
-3625528542,3625528551,AU
-3625528552,3625574399,US
-3625574400,3625577983,A2
-3625577984,3625581631,US
-3625581632,3625581647,NL
-3625581648,3625631743,US
+3625512960,3625631743,US
3625631744,3625639935,CA
3625639936,3625959423,US
3625959424,3625961471,GB
3625961472,3625961983,US
3625961984,3625962239,GB
-3625962240,3626025919,US
-3626025920,3626025951,LT
-3626025952,3626060735,US
-3626060736,3626060743,BM
-3626060744,3626061903,US
-3626061904,3626061911,BM
-3626061912,3626069279,US
-3626069280,3626069311,NL
-3626069312,3626072959,US
-3626072960,3626072991,AE
-3626072992,3626073439,US
-3626073440,3626073455,AE
-3626073456,3626091519,US
+3625962240,3626091519,US
3626091520,3626092031,AR
-3626092032,3626108895,US
-3626108896,3626108927,AU
-3626108928,3626130415,US
-3626130416,3626130431,CA
-3626130432,3626132127,US
-3626132128,3626132159,CA
-3626132160,3626140479,US
-3626140480,3626140671,AU
-3626140672,3626142623,US
-3626142624,3626142639,AU
-3626142640,3626184191,US
-3626184192,3626184223,LT
-3626184224,3626189359,US
-3626189360,3626189367,NO
-3626189368,3626189375,US
-3626189376,3626189383,IL
-3626189384,3626189431,US
-3626189432,3626189439,IL
-3626189440,3626191119,US
-3626191120,3626191135,GB
-3626191136,3626192639,US
-3626192640,3626192703,CY
-3626192704,3626192767,US
-3626192768,3626192799,CH
-3626192800,3626213439,US
-3626213440,3626213471,GB
-3626213472,3626222653,US
+3626092032,3626222653,US
3626222654,3626222654,CA
-3626222655,3626225407,US
-3626225408,3626225663,HK
-3626225664,3626227167,US
-3626227168,3626227199,AR
-3626227200,3626228463,US
-3626228464,3626228479,AE
-3626228480,3626230367,US
-3626230368,3626230399,GB
-3626230400,3626230495,US
-3626230496,3626230527,GB
-3626230528,3626230799,US
-3626230800,3626230815,GB
-3626230816,3626230847,DE
-3626230848,3626230879,US
-3626230880,3626230911,GB
-3626230912,3626230991,US
-3626230992,3626230999,GB
-3626231000,3626231007,US
-3626231008,3626231039,GB
-3626231040,3626231767,US
-3626231768,3626231783,GB
-3626231784,3626231791,US
-3626231792,3626231967,GB
-3626231968,3626231991,US
-3626231992,3626231999,GB
-3626232000,3626232415,US
-3626232416,3626232447,GB
-3626232448,3626232607,US
-3626232608,3626232623,GB
-3626232624,3626270719,US
+3626222655,3626270719,US
3626270720,3626287103,CA
3626287104,3626332159,US
3626332160,3626334207,CA
3626334208,3626334463,US
3626334464,3626336255,CA
-3626336256,3626381317,US
-3626381318,3626381321,AU
-3626381322,3626381373,US
-3626381374,3626381377,AU
-3626381378,3626381451,US
-3626381452,3626381456,GB
-3626381457,3626381460,CA
-3626381461,3626381492,US
-3626381493,3626381496,CO
-3626381497,3626381510,US
-3626381511,3626381512,BE
-3626381513,3626381520,US
-3626381521,3626381524,IN
-3626381525,3626381541,US
-3626381542,3626381545,CL
-3626381546,3626381555,US
-3626381556,3626381559,RU
-3626381560,3626381573,US
-3626381574,3626381577,ID
-3626381578,3626381601,US
-3626381602,3626381605,IL
-3626381606,3626381609,US
-3626381610,3626381613,DE
-3626381614,3626381621,US
-3626381622,3626381625,FR
-3626381626,3626381641,US
-3626381642,3626381645,VI
-3626381646,3626381657,US
-3626381658,3626381661,BE
-3626381662,3626381675,US
-3626381676,3626381679,GB
-3626381680,3626381748,US
-3626381749,3626381750,CA
-3626381751,3626381752,US
-3626381753,3626381755,GB
-3626381756,3626381759,US
-3626381760,3626381763,SA
-3626381764,3626381874,US
-3626381875,3626381878,IN
-3626381879,3626381894,US
-3626381895,3626381898,CA
-3626381899,3626381920,US
-3626381921,3626381924,NL
-3626381925,3626381944,US
-3626381945,3626381948,CA
-3626381949,3626381976,US
-3626381977,3626381980,VN
-3626381981,3626382025,US
-3626382026,3626382029,CO
-3626382030,3626382033,RO
-3626382034,3626382074,US
-3626382075,3626382078,IN
-3626382079,3626382117,US
-3626382118,3626382121,SG
-3626382122,3626382133,US
-3626382134,3626382137,CA
-3626382138,3626382145,US
-3626382146,3626382149,CA
-3626382150,3626382173,US
-3626382174,3626382177,NZ
-3626382178,3626382181,US
-3626382182,3626382185,ES
-3626382186,3626382207,US
-3626382208,3626382211,IN
-3626382212,3626382223,US
-3626382224,3626382227,CN
-3626382228,3626382239,US
-3626382240,3626382243,NL
-3626382244,3626382263,US
-3626382264,3626382267,CA
-3626382268,3626382271,IT
-3626382272,3626382295,US
-3626382296,3626382299,AR
-3626382300,3626382315,US
-3626382316,3626382319,IN
-3626382320,3626382324,US
-3626382325,3626382328,CA
-3626382329,3626382353,US
-3626382354,3626382357,GB
-3626382358,3626382361,RU
-3626382362,3626382378,US
-3626382379,3626382383,IN
-3626382384,3626382391,US
-3626382392,3626382395,IT
-3626382396,3626382450,US
-3626382451,3626382454,GR
-3626382455,3626382458,FR
-3626382459,3626382478,US
-3626382479,3626382482,JP
-3626382483,3626382486,US
-3626382487,3626382490,IL
-3626382491,3626382494,MY
-3626382495,3626382570,US
-3626382571,3626382574,IT
-3626382575,3626382670,US
-3626382671,3626382674,AU
-3626382675,3626382755,US
-3626382756,3626382759,GB
-3626382760,3626382771,US
-3626382772,3626382775,IN
-3626382776,3626382791,US
-3626382792,3626382795,PT
-3626382796,3626382843,US
-3626382844,3626382845,IN
-3626382846,3626382862,US
-3626382863,3626382866,RU
-3626382867,3626382870,IT
-3626382871,3626382878,US
-3626382879,3626382882,GB
-3626382883,3626382892,US
-3626382893,3626382896,BR
-3626382897,3626382901,US
-3626382902,3626382905,SG
-3626382906,3626382909,CA
-3626382910,3626382913,IN
-3626382914,3626382925,US
-3626382926,3626382930,HN
-3626382931,3626382977,US
-3626382978,3626382981,IT
-3626382982,3626382985,US
-3626382986,3626382993,GB
-3626382994,3626383026,US
-3626383027,3626383030,SG
-3626383031,3626383086,US
-3626383087,3626383090,GR
-3626383091,3626383135,US
-3626383136,3626383139,CO
-3626383140,3626383204,US
-3626383205,3626383208,AE
-3626383209,3626383220,US
-3626383221,3626383225,TR
-3626383226,3626383270,US
-3626383271,3626383278,GB
-3626383279,3626383282,US
-3626383283,3626383286,DE
-3626383287,3626383294,US
-3626383295,3626383298,MX
-3626383299,3626383383,US
-3626383384,3626383391,CA
-3626383392,3626383399,US
-3626383400,3626383407,IN
-3626383408,3626383423,US
-3626383424,3626383431,GB
-3626383432,3626383439,AU
-3626383440,3626383447,GR
-3626383448,3626383455,IN
-3626383456,3626383503,US
-3626383504,3626383519,GB
-3626383520,3626383527,US
-3626383528,3626383535,GB
-3626383536,3626383583,US
-3626383584,3626383591,CA
-3626383592,3626383599,US
-3626383600,3626383607,IN
-3626383608,3626383647,US
-3626383648,3626383679,CH
-3626383680,3626383759,US
-3626383760,3626383775,GB
-3626383776,3626383871,US
-3626383872,3626383903,NL
-3626383904,3626384901,US
-3626384902,3626384905,MX
-3626384906,3626384921,US
-3626384922,3626384925,IN
-3626384926,3626384957,US
-3626384958,3626384961,GB
-3626384962,3626384977,US
-3626384978,3626384981,SG
-3626384982,3626384985,US
-3626384986,3626384989,CA
-3626384990,3626384993,NZ
-3626384994,3626384997,US
-3626384998,3626385001,IT
-3626385002,3626385029,US
-3626385030,3626385033,ID
-3626385034,3626385037,IN
-3626385038,3626385097,US
-3626385098,3626385101,IN
-3626385102,3626385113,US
-3626385114,3626385117,JP
-3626385118,3626385125,US
-3626385126,3626385129,ID
-3626385130,3626385133,US
-3626385134,3626385137,CA
-3626385138,3626385141,GB
-3626385142,3626385145,IN
-3626385146,3626385187,US
-3626385188,3626385191,CA
-3626385192,3626385207,US
-3626385208,3626385209,NZ
-3626385210,3626385217,US
-3626385218,3626385221,CA
-3626385222,3626385237,US
-3626385238,3626385241,BE
-3626385242,3626385357,US
-3626385358,3626385361,CA
-3626385362,3626385373,US
-3626385374,3626385377,SI
-3626385378,3626385381,US
-3626385382,3626385385,IN
-3626385386,3626385389,US
-3626385390,3626385393,GB
-3626385394,3626443839,US
-3626443840,3626443847,CA
-3626443848,3626508287,US
+3626336256,3626508287,US
3626508288,3626512383,CA
-3626512384,3626513427,US
-3626513428,3626513428,EU
-3626513429,3626524671,US
-3626524672,3626524927,CA
-3626524928,3626524943,US
-3626524944,3626524967,CA
-3626524968,3626524975,US
-3626524976,3626525783,CA
-3626525784,3626525799,US
-3626525800,3626525807,IN
-3626525808,3626526031,CA
-3626526032,3626526039,US
-3626526040,3626526239,CA
-3626526240,3626526247,US
-3626526248,3626526255,CA
-3626526256,3626526263,US
-3626526264,3626526279,CA
-3626526280,3626526287,US
-3626526288,3626526295,CA
-3626526296,3626526303,US
-3626526304,3626526431,CA
-3626526432,3626526463,CR
-3626526464,3626526567,CA
-3626526568,3626526575,US
-3626526576,3626526623,CA
-3626526624,3626526631,US
-3626526632,3626526711,CA
-3626526712,3626526719,US
-3626526720,3626526983,CA
-3626526984,3626527023,US
-3626527024,3626527135,CA
-3626527136,3626527159,US
-3626527160,3626527167,CA
-3626527168,3626527183,US
-3626527184,3626527423,CA
-3626527424,3626527463,US
-3626527464,3626527471,CA
-3626527472,3626527479,US
-3626527480,3626527487,CA
-3626527488,3626527495,US
-3626527496,3626527551,CA
-3626527552,3626527559,US
-3626527560,3626527903,CA
-3626527904,3626527911,US
-3626527912,3626528239,CA
-3626528240,3626528247,US
-3626528248,3626528535,CA
-3626528536,3626528543,US
-3626528544,3626528631,CA
-3626528632,3626528639,US
-3626528640,3626528679,CA
-3626528680,3626528703,US
-3626528704,3626529183,CA
-3626529184,3626529191,US
-3626529192,3626529639,CA
-3626529640,3626529647,US
-3626529648,3626529735,CA
-3626529736,3626529751,US
-3626529752,3626529807,CA
-3626529808,3626529847,US
-3626529848,3626529855,CA
-3626529856,3626529863,US
-3626529864,3626529919,CA
-3626529920,3626529927,US
-3626529928,3626529951,CA
-3626529952,3626529959,US
-3626529960,3626530039,CA
-3626530040,3626530055,US
-3626530056,3626530151,CA
-3626530152,3626530159,US
-3626530160,3626530335,CA
-3626530336,3626530343,US
-3626530344,3626530391,CA
-3626530392,3626530407,US
-3626530408,3626530439,CA
-3626530440,3626530455,US
-3626530456,3626530471,CA
-3626530472,3626530479,US
-3626530480,3626530487,CA
-3626530488,3626530495,US
-3626530496,3626530543,CA
-3626530544,3626530559,US
-3626530560,3626530815,CA
-3626530816,3626530831,US
-3626530832,3626530943,CA
-3626530944,3626530951,US
-3626530952,3626530999,CA
-3626531000,3626531007,US
-3626531008,3626531015,CA
-3626531016,3626531023,US
-3626531024,3626531031,CA
-3626531032,3626531047,US
-3626531048,3626531143,CA
-3626531144,3626531151,US
-3626531152,3626531199,CA
-3626531200,3626531207,US
-3626531208,3626531279,CA
-3626531280,3626531287,US
-3626531288,3626531463,CA
-3626531464,3626531471,US
-3626531472,3626531519,CA
-3626531520,3626531535,US
-3626531536,3626531551,CA
-3626531552,3626531559,US
-3626531560,3626531575,CA
-3626531576,3626531583,US
-3626531584,3626531607,CA
-3626531608,3626531615,US
-3626531616,3626531639,CA
-3626531640,3626531647,US
-3626531648,3626531703,CA
-3626531704,3626531711,US
-3626531712,3626531799,CA
-3626531800,3626531807,US
-3626531808,3626531839,CA
-3626531840,3626531847,US
-3626531848,3626531855,CA
-3626531856,3626531863,US
-3626531864,3626531871,CA
-3626531872,3626531879,US
-3626531880,3626531887,CA
-3626531888,3626531895,US
-3626531896,3626532287,CA
-3626532288,3626532311,US
-3626532312,3626532319,CA
-3626532320,3626532327,US
-3626532328,3626532399,CA
-3626532400,3626532439,US
-3626532440,3626532447,CA
-3626532448,3626532519,US
-3626532520,3626532535,CA
-3626532536,3626532543,US
-3626532544,3626532551,CA
-3626532552,3626532591,US
-3626532592,3626532607,CA
-3626532608,3626532615,US
-3626532616,3626532623,CA
-3626532624,3626532655,US
-3626532656,3626532663,CA
-3626532664,3626532703,US
-3626532704,3626532727,CA
-3626532728,3626532735,US
-3626532736,3626532759,CA
-3626532760,3626532767,US
-3626532768,3626532855,CA
-3626532856,3626852351,US
+3626512384,3626524671,US
+3626524672,3626532863,CA
+3626532864,3626852351,US
3626852352,3626860543,CA
3626860544,3626893311,US
-3626893312,3626896175,CA
-3626896176,3626896183,US
-3626896184,3626905599,CA
+3626893312,3626905599,CA
3626905600,3626926079,US
3626926080,3626934271,CA
3626934272,3627044863,US
@@ -172016,150 +88118,44 @@
3627065344,3627069439,CA
3627069440,3627299071,US
3627299072,3627299327,IN
-3627299328,3627309695,US
-3627309696,3627309823,AE
-3627309824,3627310471,US
-3627310472,3627310479,BM
-3627310480,3627328055,US
-3627328056,3627328063,SR
-3627328064,3627399935,US
-3627399936,3627399967,GE
-3627399968,3627399999,US
-3627400000,3627400063,DE
-3627400064,3627400151,US
-3627400152,3627400191,DE
-3627400192,3627400319,US
-3627400320,3627400351,BR
-3627400352,3627400639,US
-3627400640,3627400671,CA
-3627400672,3627400959,US
-3627400960,3627401103,DE
-3627401104,3627401151,US
-3627401152,3627401215,BR
-3627401216,3627507711,US
+3627299328,3627507711,US
3627507712,3627511807,CA
-3627511808,3627519616,US
-3627519617,3627519626,CA
-3627519627,3627524979,US
-3627524980,3627524987,IR
-3627524988,3627532287,US
+3627511808,3627532287,US
3627532288,3627544575,CA
3627544576,3627659263,US
3627659264,3627663359,CA
3627663360,3627679743,US
3627679744,3627712511,CA
-3627712512,3627741759,US
-3627741760,3627741791,CA
-3627741792,3627745343,US
-3627745344,3627745375,BE
-3627745376,3627745439,US
-3627745440,3627745471,IN
-3627745472,3627745503,CA
-3627745504,3627746399,US
-3627746400,3627746431,CA
-3627746432,3627752191,US
-3627752192,3627752319,US
-3627752320,3627753471,US
+3627712512,3627753471,US
3627753472,3627753727,AR
-3627753728,3627755007,US
-3627755008,3627755135,IE
-3627755136,3627755263,US
-3627755264,3627755391,IE
-3627755392,3627758847,US
-3627758848,3627758863,GB
-3627758864,3627759071,US
-3627759072,3627759103,GB
-3627759104,3627759359,US
+3627753728,3627759359,US
3627759360,3627759615,NL
-3627759616,3627760639,US
-3627760640,3627760895,EU
-3627760896,3627802623,US
+3627759616,3627802623,US
3627802624,3627810815,CA
3627810816,3627842047,US
3627842048,3627842303,IS
-3627842304,3628123615,US
-3628123616,3628123647,CA
-3628123648,3628123711,BM
-3628123712,3628123903,US
-3628123904,3628123935,GB
-3628123936,3628129087,US
-3628129088,3628129103,CA
-3628129104,3628139311,US
-3628139312,3628139327,SG
-3628139328,3628139343,GB
-3628139344,3628139487,US
-3628139488,3628139503,NZ
-3628139504,3628139519,US
-3628139520,3628139535,RU
-3628139536,3628139695,US
-3628139696,3628139711,VI
-3628139712,3628139967,US
-3628139968,3628139999,AU
-3628140000,3628140351,US
-3628140352,3628140415,RU
-3628140416,3628145919,US
+3627842304,3628145919,US
3628145920,3628146175,AU
-3628146176,3628146527,US
-3628146528,3628146559,GB
-3628146560,3628148447,US
-3628148448,3628148479,SK
-3628148480,3628148815,US
-3628148816,3628148831,NL
-3628148832,3628148847,IT
-3628148848,3628148871,US
-3628148872,3628148879,CA
-3628148880,3628151423,US
-3628151424,3628151551,DE
-3628151552,3628151871,US
-3628151872,3628151935,DO
-3628151936,3628152063,ID
-3628152064,3628153087,US
+3628146176,3628153087,US
3628153088,3628153343,KW
-3628153344,3628154239,US
-3628154240,3628154303,PH
-3628154304,3628154463,US
-3628154464,3628154495,GB
-3628154496,3628155023,US
-3628155024,3628155039,ID
-3628155040,3628155103,US
-3628155104,3628155119,NZ
-3628155120,3628155647,US
+3628153344,3628155647,US
3628155648,3628155903,CA
3628155904,3628161023,US
3628161024,3628161279,CA
-3628161280,3628164927,US
-3628164928,3628164943,IE
-3628164944,3628164959,ES
-3628164960,3628165119,US
-3628165120,3628165183,CA
-3628165184,3628165311,US
-3628165312,3628165375,DO
-3628165376,3628165647,US
-3628165648,3628165663,VI
-3628165664,3628165759,US
-3628165760,3628165775,US
-3628165776,3628169471,US
-3628169472,3628169599,IT
-3628169600,3628179455,US
+3628161280,3628179455,US
3628179456,3628187647,CA
-3628187648,3628215191,US
-3628215192,3628215199,ES
-3628215200,3628224735,US
-3628224736,3628224743,IT
-3628224744,3628236799,US
+3628187648,3628225779,US
+3628225780,3628225783,GB
+3628225784,3628236799,US
3628236800,3628257279,CA
-3628257280,3628328559,US
-3628328560,3628328567,MY
-3628328568,3628598271,US
+3628257280,3628598271,US
3628598272,3628599295,CO
3628599296,3628603391,CL
3628603392,3628604415,US
3628604416,3628605439,GT
3628605440,3628608511,IL
3628608512,3628609023,VE
-3628609024,3628609151,US
-3628609152,3628609215,VE
-3628609216,3628613375,US
+3628609024,3628613375,US
3628613376,3628613631,HN
3628613632,3628614399,ID
3628614400,3628614911,CO
@@ -172183,8 +88179,7 @@
3628628992,3628629247,GT
3628629248,3628629503,US
3628629504,3628631807,VE
-3628631808,3628633855,US
-3628633856,3628634111,CO
+3628631808,3628634111,CO
3628634112,3628636159,AR
3628636160,3628636671,VE
3628636672,3628636927,US
@@ -172203,69 +88198,34 @@
3628654592,3628654847,US
3628654848,3628655103,CR
3628655104,3628655359,VE
-3628655360,3628656383,CO
-3628656384,3628656639,EC
-3628656640,3628657407,CO
-3628657408,3628657663,US
+3628655360,3628657663,CO
3628657664,3628657919,VE
3628657920,3628658175,BS
3628658176,3628679167,US
3628679168,3628683263,CA
-3628683264,3628762335,US
-3628762336,3628762367,IL
-3628762368,3628762519,US
-3628762520,3628762527,CY
-3628762528,3628766143,US
-3628766144,3628766151,GB
-3628766152,3628767039,US
-3628767040,3628767055,IE
-3628767056,3628767135,US
-3628767136,3628767167,GB
-3628767168,3628769087,US
-3628769088,3628769119,AU
-3628769120,3628770367,US
-3628770368,3628770383,CY
-3628770384,3628771455,US
-3628771456,3628771647,GB
-3628771648,3628772431,US
-3628772432,3628772447,GB
-3628772448,3628834815,US
+3628683264,3628834815,US
3628834816,3628843007,CA
-3628843008,3628848639,US
-3628848640,3628848895,EU
-3628848896,3628963007,US
-3628963008,3628963039,PA
-3628963040,3629187071,US
+3628843008,3629187071,US
3629187072,3629195263,CA
3629195264,3629199359,US
3629199360,3629201439,CA
3629201440,3629201447,US
-3629201448,3629201463,CA
-3629201464,3629201467,US
-3629201468,3629201471,CA
-3629201472,3629201511,US
-3629201512,3629201543,CA
-3629201544,3629201547,US
-3629201548,3629201551,CA
-3629201552,3629201559,US
-3629201560,3629201563,CA
-3629201564,3629201583,US
-3629201584,3629201587,CA
-3629201588,3629201595,US
-3629201596,3629201627,CA
-3629201628,3629202431,US
+3629201448,3629201471,CA
+3629201472,3629201475,US
+3629201476,3629201495,CA
+3629201496,3629201499,US
+3629201500,3629201503,CA
+3629201504,3629201507,US
+3629201508,3629201919,CA
+3629201920,3629202431,US
3629202432,3629203199,CA
3629203200,3629318143,US
3629318144,3629326335,CA
-3629326336,3629534657,US
-3629534658,3629534658,US
-3629534659,3629539327,US
+3629326336,3629539327,US
3629539328,3629547519,CA
3629547520,3629662207,US
3629662208,3629662463,GB
-3629662464,3629735943,US
-3629735944,3629735951,CA
-3629735952,3629737215,US
+3629662464,3629737215,US
3629737216,3629737471,CA
3629737472,3629767935,US
3629767936,3629768191,CA
@@ -172273,518 +88233,215 @@
3629789440,3629789695,CA
3629789696,3629789951,US
3629789952,3629790207,CA
-3629790208,3629808095,US
-3629808096,3629808127,CA
-3629808128,3629838551,US
-3629838552,3629838559,CA
-3629838560,3629838583,US
-3629838584,3629838591,CA
-3629838592,3629839103,US
+3629790208,3629839103,US
3629839104,3629839359,CA
-3629839360,3629859551,US
-3629859552,3629859583,CA
-3629859584,3629875775,US
-3629875776,3629875807,CA
-3629875808,3629876255,US
-3629876256,3629876263,CA
-3629876264,3629876279,US
-3629876280,3629876287,CA
-3629876288,3630022639,US
-3630022640,3630022643,US
-3630022644,3630039039,US
+3629839360,3630039039,US
3630039040,3630039551,CA
-3630039552,3630039583,US
-3630039584,3630039599,CA
-3630039600,3630039615,US
-3630039616,3630039807,CA
-3630039808,3630039815,US
-3630039816,3630039823,CA
-3630039824,3630039831,US
-3630039832,3630039839,CA
-3630039840,3630040063,US
-3630040064,3630040335,CA
-3630040336,3630040351,US
-3630040352,3630040383,CA
-3630040384,3630040399,US
-3630040400,3630040447,CA
-3630040448,3630040463,US
-3630040464,3630040479,CA
-3630040480,3630040495,US
-3630040496,3630040527,CA
-3630040528,3630040543,US
-3630040544,3630040831,CA
-3630040832,3630040895,US
-3630040896,3630041023,CA
-3630041024,3630041087,US
-3630041088,3630041215,CA
-3630041216,3630041279,US
-3630041280,3630041895,CA
-3630041896,3630041911,US
-3630041912,3630041927,CA
-3630041928,3630041935,US
-3630041936,3630042015,CA
-3630042016,3630042023,US
-3630042024,3630042399,CA
-3630042400,3630042407,US
-3630042408,3630042431,CA
-3630042432,3630042439,US
-3630042440,3630042655,CA
-3630042656,3630042687,US
-3630042688,3630042751,CA
-3630042752,3630042783,US
-3630042784,3630042847,CA
-3630042848,3630042975,US
-3630042976,3630043007,CA
-3630043008,3630043039,US
-3630043040,3630043103,CA
-3630043104,3630043135,US
+3630039552,3630040063,US
+3630040064,3630040319,CA
+3630040320,3630040431,US
+3630040432,3630040447,CA
+3630040448,3630040575,US
+3630040576,3630040831,CA
+3630040832,3630041343,US
+3630041344,3630041855,CA
+3630041856,3630043135,US
3630043136,3630043391,CA
-3630043392,3630043903,US
-3630043904,3630043919,CA
-3630043920,3630043935,US
-3630043936,3630043967,CA
-3630043968,3630043983,US
-3630043984,3630043999,CA
-3630044000,3630044015,US
-3630044016,3630044063,CA
-3630044064,3630044079,US
-3630044080,3630044111,CA
-3630044112,3630044127,US
-3630044128,3630044287,CA
-3630044288,3630044351,US
-3630044352,3630044415,CA
-3630044416,3630044671,US
-3630044672,3630046367,CA
-3630046368,3630046399,US
-3630046400,3630047791,CA
-3630047792,3630047807,US
-3630047808,3630047983,CA
-3630047984,3630047999,US
-3630048000,3630049791,CA
-3630049792,3630050047,US
-3630050048,3630050391,CA
-3630050392,3630050399,US
-3630050400,3630050487,CA
-3630050488,3630050495,US
-3630050496,3630050543,CA
-3630050544,3630050559,US
-3630050560,3630051135,CA
-3630051136,3630051327,US
-3630051328,3630051583,CA
-3630051584,3630051599,US
-3630051600,3630052863,CA
-3630052864,3630052927,US
-3630052928,3630053183,CA
-3630053184,3630053247,US
-3630053248,3630053631,CA
-3630053632,3630053695,IL
-3630053696,3630053759,CA
-3630053760,3630053887,US
-3630053888,3630054495,CA
-3630054496,3630054511,US
-3630054512,3630055519,CA
-3630055520,3630055551,US
-3630055552,3630055679,CA
-3630055680,3630055935,US
+3630043392,3630044671,US
+3630044672,3630046207,CA
+3630046208,3630046719,US
+3630046720,3630047487,CA
+3630047488,3630047999,US
+3630048000,3630048255,CA
+3630048256,3630048511,US
+3630048512,3630049599,CA
+3630049600,3630050047,US
+3630050048,3630050303,CA
+3630050304,3630050559,US
+3630050560,3630050815,CA
+3630050816,3630051839,US
+3630051840,3630052607,CA
+3630052608,3630053887,US
+3630053888,3630054143,CA
+3630054144,3630054655,US
+3630054656,3630055167,CA
+3630055168,3630055935,US
3630055936,3630056959,CA
-3630056960,3630057215,US
-3630057216,3630057471,CA
+3630056960,3630057407,US
+3630057408,3630057471,CA
3630057472,3630057727,US
3630057728,3630057983,CA
-3630057984,3630058047,US
-3630058048,3630058335,CA
-3630058336,3630058367,US
-3630058368,3630058495,CA
-3630058496,3630058751,US
+3630057984,3630058751,US
3630058752,3630059007,CA
3630059008,3630059263,US
-3630059264,3630059775,CA
-3630059776,3630060031,US
-3630060032,3630060351,CA
-3630060352,3630060383,US
-3630060384,3630060543,CA
-3630060544,3630060671,US
-3630060672,3630060799,CA
-3630060800,3630060815,US
-3630060816,3630060823,CA
-3630060824,3630060831,US
-3630060832,3630060847,CA
-3630060848,3630060855,US
-3630060856,3630060895,CA
-3630060896,3630060903,US
-3630060904,3630060935,CA
-3630060936,3630060943,US
-3630060944,3630060959,CA
-3630060960,3630060975,US
-3630060976,3630060983,CA
-3630060984,3630060991,US
-3630060992,3630061055,CA
-3630061056,3630061311,US
-3630061312,3630061359,CA
-3630061360,3630061375,US
-3630061376,3630062591,CA
+3630059264,3630059519,CA
+3630059520,3630060799,US
+3630060800,3630061055,CA
+3630061056,3630061567,US
+3630061568,3630062079,CA
+3630062080,3630062335,US
+3630062336,3630062591,CA
3630062592,3630062847,US
-3630062848,3630063903,CA
-3630063904,3630063919,US
-3630063920,3630063951,CA
-3630063952,3630063983,US
-3630063984,3630063999,CA
-3630064000,3630064015,US
-3630064016,3630064383,CA
-3630064384,3630064511,US
-3630064512,3630065199,CA
-3630065200,3630065215,US
-3630065216,3630065327,CA
-3630065328,3630065343,US
-3630065344,3630065359,CA
-3630065360,3630065391,US
-3630065392,3630065727,CA
-3630065728,3630065791,US
-3630065792,3630065919,CA
-3630065920,3630066175,CN
-3630066176,3630068223,CA
-3630068224,3630068479,US
-3630068480,3630068863,CA
-3630068864,3630068991,CN
+3630062848,3630063871,CA
+3630063872,3630063935,US
+3630063936,3630063951,CA
+3630063952,3630064895,US
+3630064896,3630065151,CA
+3630065152,3630066175,US
+3630066176,3630067967,CA
+3630067968,3630068479,US
+3630068480,3630068735,CA
+3630068736,3630068991,US
3630068992,3630069247,CA
3630069248,3630069503,US
-3630069504,3630071247,CA
-3630071248,3630071263,US
-3630071264,3630071551,CA
-3630071552,3630071807,US
-3630071808,3630071871,CA
-3630071872,3630072063,US
-3630072064,3630072223,CA
-3630072224,3630072255,US
-3630072256,3630074255,CA
-3630074256,3630074287,US
-3630074288,3630074375,CA
-3630074376,3630074383,US
-3630074384,3630074415,CA
-3630074416,3630074431,US
-3630074432,3630074471,CA
-3630074472,3630074495,US
-3630074496,3630074527,CA
-3630074528,3630074543,US
-3630074544,3630075183,CA
-3630075184,3630075199,US
-3630075200,3630075375,CA
-3630075376,3630075391,US
+3630069504,3630069759,CA
+3630069760,3630070015,US
+3630070016,3630071039,CA
+3630071040,3630071295,US
+3630071296,3630071551,CA
+3630071552,3630072255,US
+3630072256,3630072287,CA
+3630072288,3630072575,US
+3630072576,3630074111,CA
+3630074112,3630074879,US
+3630074880,3630075135,CA
+3630075136,3630075311,US
+3630075312,3630075327,CA
+3630075328,3630075391,US
3630075392,3630075647,CA
-3630075648,3630076223,US
-3630076224,3630076287,CA
-3630076288,3630076351,US
-3630076352,3630076415,CA
-3630076416,3630076703,US
-3630076704,3630076831,CA
-3630076832,3630076863,US
-3630076864,3630077823,CA
-3630077824,3630077887,US
-3630077888,3630078847,CA
-3630078848,3630078879,US
-3630078880,3630079263,CA
-3630079264,3630079279,US
-3630079280,3630079439,CA
-3630079440,3630079455,AG
-3630079456,3630079487,CA
-3630079488,3630080511,US
-3630080512,3630080895,CA
-3630080896,3630081023,US
-3630081024,3630081791,CA
+3630075648,3630076927,US
+3630076928,3630077439,CA
+3630077440,3630078463,US
+3630078464,3630078719,CA
+3630078720,3630078975,US
+3630078976,3630079039,CA
+3630079040,3630079407,US
+3630079408,3630079423,CA
+3630079424,3630080575,US
+3630080576,3630080639,CA
+3630080640,3630081151,US
+3630081152,3630081791,CA
3630081792,3630082047,US
-3630082048,3630082751,CA
-3630082752,3630082815,US
+3630082048,3630082559,CA
+3630082560,3630082815,US
3630082816,3630083071,CA
-3630083072,3630083103,CH
-3630083104,3630083327,CA
-3630083328,3630083391,US
-3630083392,3630083519,CA
-3630083520,3630083583,US
-3630083584,3630083839,CA
-3630083840,3630084159,US
-3630084160,3630084351,CA
-3630084352,3630084607,US
+3630083072,3630084607,US
3630084608,3630084863,CA
3630084864,3630085119,US
3630085120,3630085375,CA
3630085376,3630085631,US
3630085632,3630086143,CA
-3630086144,3630086287,US
-3630086288,3630086295,CA
-3630086296,3630086319,US
-3630086320,3630086399,CA
-3630086400,3630086655,US
-3630086656,3630086847,CA
-3630086848,3630086911,US
-3630086912,3630087935,CA
+3630086144,3630086375,US
+3630086376,3630086383,CA
+3630086384,3630087039,US
+3630087040,3630087935,CA
3630087936,3630088447,US
3630088448,3630088959,CA
3630088960,3630089471,US
-3630089472,3630090271,CA
-3630090272,3630090287,US
-3630090288,3630090319,CA
-3630090320,3630090335,US
-3630090336,3630090751,CA
-3630090752,3630091007,US
-3630091008,3630092335,CA
-3630092336,3630092351,US
-3630092352,3630092527,CA
-3630092528,3630092543,US
-3630092544,3630092575,CA
-3630092576,3630092799,US
-3630092800,3630092975,CA
-3630092976,3630092991,US
-3630092992,3630093310,CA
-3630093311,3630093319,US
-3630093320,3630093367,CA
-3630093368,3630093375,US
-3630093376,3630093495,CA
-3630093496,3630093503,US
-3630093504,3630093823,CA
-3630093824,3630094079,US
-3630094080,3630094335,CA
-3630094336,3630094367,US
-3630094368,3630094495,CA
-3630094496,3630094559,US
-3630094560,3630094847,CA
-3630094848,3630094855,US
-3630094856,3630094863,CA
-3630094864,3630094871,US
-3630094872,3630094903,CA
-3630094904,3630094927,US
-3630094928,3630094935,CA
-3630094936,3630094943,US
-3630094944,3630094999,CA
-3630095000,3630095015,US
-3630095016,3630095031,CA
-3630095032,3630095039,US
-3630095040,3630095047,CA
-3630095048,3630095055,US
-3630095056,3630095103,CA
-3630095104,3630095359,US
-3630095360,3630095615,CA
-3630095616,3630095743,US
-3630095744,3630096943,CA
-3630096944,3630097151,US
+3630089472,3630090239,CA
+3630090240,3630091007,US
+3630091008,3630092287,CA
+3630092288,3630093567,US
+3630093568,3630093823,CA
+3630093824,3630094591,US
+3630094592,3630094847,CA
+3630094848,3630096127,US
+3630096128,3630096639,CA
+3630096640,3630097151,US
3630097152,3630097663,CA
3630097664,3630098175,KW
-3630098176,3630098495,CA
-3630098496,3630098543,US
-3630098544,3630100223,CA
+3630098176,3630098431,CA
+3630098432,3630098687,US
+3630098688,3630100223,CA
3630100224,3630100479,KW
-3630100480,3630100863,CA
-3630100864,3630101247,US
-3630101248,3630101823,CA
-3630101824,3630101855,US
-3630101856,3630101887,CA
-3630101888,3630101919,US
-3630101920,3630102015,CA
-3630102016,3630102335,US
-3630102336,3630103999,CA
-3630104000,3630104063,US
+3630100480,3630101247,US
+3630101248,3630101503,CA
+3630101504,3630102783,US
+3630102784,3630103807,CA
+3630103808,3630104063,US
3630104064,3630104575,CA
-3630104576,3630104831,US
-3630104832,3630105087,CA
-3630105088,3630106015,US
-3630106016,3630106031,CA
-3630106032,3630106063,US
-3630106064,3630106079,CA
-3630106080,3630120959,US
-3630120960,3630130175,CA
-3630130176,3630136575,US
-3630136576,3630136831,CA
-3630136832,3630139391,US
-3630139392,3630139647,CA
-3630139648,3630141439,US
-3630141440,3630144031,CA
-3630144032,3630144063,US
-3630144064,3630144223,CA
-3630144224,3630144255,US
-3630144256,3630145023,CA
-3630145024,3630145039,GB
-3630145040,3630145247,CA
-3630145248,3630145535,US
-3630145536,3630146815,CA
+3630104576,3630108159,US
+3630108160,3630108415,CA
+3630108416,3630141951,US
+3630141952,3630142207,CA
+3630142208,3630142463,US
+3630142464,3630143487,CA
+3630143488,3630143743,US
+3630143744,3630145023,CA
+3630145024,3630145535,US
+3630145536,3630145791,CA
+3630145792,3630146047,US
+3630146048,3630146815,CA
3630146816,3630147071,US
-3630147072,3630147647,CA
-3630147648,3630147839,US
-3630147840,3630148623,CA
-3630148624,3630148639,US
-3630148640,3630148655,CA
-3630148656,3630148671,US
-3630148672,3630148751,CA
-3630148752,3630148799,US
-3630148800,3630148815,CA
-3630148816,3630148863,US
-3630148864,3630149151,CA
-3630149152,3630149183,US
-3630149184,3630149215,CA
-3630149216,3630149375,US
-3630149376,3630149439,CA
-3630149440,3630149471,US
-3630149472,3630149503,CA
-3630149504,3630149535,US
-3630149536,3630153407,CA
-3630153408,3630153727,US
-3630153728,3630154751,CA
-3630154752,3630155007,US
+3630147072,3630147583,CA
+3630147584,3630148095,US
+3630148096,3630148607,CA
+3630148608,3630148863,US
+3630148864,3630149119,CA
+3630149120,3630149631,US
+3630149632,3630150143,CA
+3630150144,3630150399,US
+3630150400,3630151423,CA
+3630151424,3630151679,US
+3630151680,3630153215,CA
+3630153216,3630153727,US
+3630153728,3630154239,CA
+3630154240,3630155007,US
3630155008,3630155263,CA
-3630155264,3630155519,US
-3630155520,3630155583,CA
-3630155584,3630155599,US
-3630155600,3630155615,CA
-3630155616,3630155631,US
-3630155632,3630158135,CA
-3630158136,3630158151,US
-3630158152,3630158591,CA
-3630158592,3630158847,US
-3630158848,3630158911,CA
-3630158912,3630158943,US
-3630158944,3630158975,CA
-3630158976,3630159007,US
-3630159008,3630159487,CA
-3630159488,3630159551,US
-3630159552,3630159871,CA
+3630155264,3630155775,US
+3630155776,3630158079,CA
+3630158080,3630158295,US
+3630158296,3630158303,CA
+3630158304,3630159103,US
+3630159104,3630159359,CA
+3630159360,3630159615,US
+3630159616,3630159871,CA
3630159872,3630160127,US
3630160128,3630160383,CA
-3630160384,3630160399,US
-3630160400,3630160471,CA
-3630160472,3630160487,US
-3630160488,3630160495,CA
-3630160496,3630160503,US
-3630160504,3630160527,CA
-3630160528,3630160559,US
-3630160560,3630160599,CA
-3630160600,3630160607,US
-3630160608,3630160895,CA
-3630160896,3630160919,US
-3630160920,3630160927,CA
-3630160928,3630161111,US
-3630161112,3630161135,CA
-3630161136,3630161151,US
-3630161152,3630161983,CA
-3630161984,3630162047,US
-3630162048,3630162303,CA
-3630162304,3630162367,US
-3630162368,3630162943,CA
+3630160384,3630160639,US
+3630160640,3630160895,CA
+3630160896,3630161151,US
+3630161152,3630161919,CA
+3630161920,3630162431,US
+3630162432,3630162943,CA
3630162944,3630163199,US
3630163200,3630163455,CA
-3630163456,3630163711,US
-3630163712,3630163719,CA
-3630163720,3630163727,US
-3630163728,3630163759,CA
-3630163760,3630163767,US
-3630163768,3630163879,CA
-3630163880,3630163887,US
-3630163888,3630163927,CA
-3630163928,3630163959,US
-3630163960,3630164847,CA
-3630164848,3630164863,US
-3630164864,3630164911,CA
-3630164912,3630164927,US
-3630164928,3630164975,CA
-3630164976,3630164991,US
-3630164992,3630166719,CA
-3630166720,3630166751,US
-3630166752,3630166815,CA
-3630166816,3630166831,US
-3630166832,3630166863,CA
-3630166864,3630166879,US
-3630166880,3630166975,CA
-3630166976,3630166991,US
-3630166992,3630167295,CA
-3630167296,3630167359,US
-3630167360,3630167487,CA
-3630167488,3630167551,US
-3630167552,3630167911,CA
-3630167912,3630167919,FR
-3630167920,3630167927,CA
-3630167928,3630167943,US
-3630167944,3630168127,CA
-3630168128,3630168191,US
-3630168192,3630169087,CA
-3630169088,3630169343,US
-3630169344,3630170111,CA
+3630163456,3630163967,US
+3630163968,3630164735,CA
+3630164736,3630164991,US
+3630164992,3630166527,CA
+3630166528,3630167007,US
+3630167008,3630167023,CA
+3630167024,3630168319,US
+3630168320,3630169087,CA
+3630169088,3630169855,US
+3630169856,3630170111,CA
3630170112,3630309375,US
3630309376,3630317567,CA
-3630317568,3630328063,US
-3630328064,3630328087,JP
-3630328088,3630328191,US
-3630328192,3630328319,JP
-3630328320,3630328703,US
-3630328704,3630328831,JP
-3630328832,3630375423,US
+3630317568,3630354431,US
+3630358528,3630370815,US
+3630372864,3630375423,US
3630375424,3630383103,CA
3630383104,3630391295,US
3630391296,3630395391,CA
3630395392,3630718975,US
3630718976,3630727167,CA
-3630727168,3630745855,US
-3630745856,3630746111,UG
-3630746112,3630746367,US
-3630746368,3630746623,UG
-3630746624,3630746879,US
-3630746880,3630747391,TZ
-3630747392,3630780415,US
+3630727168,3630745599,US
+3630745600,3630747647,UG
+3630747648,3630780415,US
3630780416,3630784511,CA
-3630784512,3630850047,US
+3630784512,3630801919,US
+3630804992,3630850047,US
3630850048,3630854143,CA
-3630854144,3630897407,US
+3630854144,3630895615,US
+3630895616,3630895871,CA
+3630895872,3630897407,US
3630897408,3630897919,CA
-3630897920,3630923776,US
-3630923777,3630923926,IN
-3630923927,3630924027,DE
-3630924028,3630924438,US
-3630924439,3630924539,TH
-3630924540,3630925824,US
-3630925825,3630925974,DE
-3630925975,3630927104,US
-3630927105,3630927254,IN
-3630927255,3630956543,US
+3630897920,3630956543,US
3630956544,3631005695,CA
-3631005696,3631014915,US
-3631014916,3631015011,HU
-3631015012,3631015075,US
-3631015076,3631015111,HU
-3631015112,3631015139,US
-3631015140,3631015147,CN
-3631015148,3631015295,US
-3631015296,3631015311,CN
-3631015312,3631015887,US
-3631015888,3631015903,CN
-3631015904,3631016555,US
-3631016556,3631016571,CN
-3631016572,3631016613,US
-3631016614,3631016645,UA
-3631016646,3631017175,US
-3631017176,3631017191,CN
-3631017192,3631017475,US
-3631017476,3631017726,LT
-3631017727,3631039439,US
-3631039440,3631039455,CA
-3631039456,3631039487,US
+3631005696,3631039487,US
3631039488,3631039743,CA
-3631039744,3631043663,US
-3631043664,3631043679,CA
-3631043680,3631043759,US
-3631043760,3631043767,CA
-3631043768,3631045631,US
-3631045632,3631045759,CA
-3631045760,3631045983,US
-3631045984,3631045991,CA
-3631045992,3631057577,US
-3631057578,3631057597,GB
-3631057598,3631058405,US
-3631058406,3631058415,CA
-3631058416,3631058511,US
-3631058512,3631058521,CA
-3631058522,3631058581,US
-3631058582,3631058591,CA
-3631058592,3631059229,US
-3631059230,3631059239,NO
-3631059240,3631096951,US
-3631096952,3631096952,US
-3631096953,3631112191,US
+3631039744,3631112191,US
3631112192,3631112703,VC
3631112704,3631116543,BB
3631116544,3631117567,GD
@@ -172801,61 +88458,16 @@
3631333376,3631341567,CA
3631341568,3631435007,US
3631435008,3631435263,GB
-3631435264,3631644671,US
+3631435264,3631515647,US
+3631517696,3631644671,US
3631644672,3631652863,CA
-3631652864,3631663151,US
-3631663152,3631663159,CA
-3631663160,3631665151,US
+3631652864,3631665151,US
3631665152,3631667199,CA
-3631667200,3631669247,US
-3631669248,3631677439,A2
-3631677440,3631712287,US
-3631712288,3631712295,AR
-3631712296,3631712303,US
-3631712304,3631712311,CA
-3631712312,3631712407,US
-3631712408,3631712415,GB
-3631712416,3631712423,US
-3631712424,3631712431,PT
-3631712432,3631712439,US
-3631712440,3631712447,IN
-3631712448,3631712455,US
-3631712456,3631712463,UA
-3631712464,3631712495,US
-3631712496,3631712503,UY
-3631712504,3631712511,DE
-3631712512,3631712535,US
-3631712536,3631712543,JP
-3631712544,3631712551,CY
-3631712552,3631712559,US
-3631712560,3631712567,AR
-3631712568,3631712695,US
-3631712696,3631712703,NZ
-3631712704,3631712751,US
-3631712752,3631712767,CA
-3631712768,3631712799,US
-3631712800,3631712807,CN
-3631712808,3631712823,US
-3631712824,3631712831,IL
-3631712832,3631712895,US
-3631712896,3631712903,MX
-3631712904,3631712911,CA
-3631712912,3631712927,US
-3631712928,3631712935,BR
-3631712936,3631712951,GB
-3631712952,3631713031,US
-3631713032,3631713039,BR
-3631713040,3631713047,IN
-3631713048,3631713063,US
-3631713064,3631713071,ZA
-3631713072,3631713079,US
-3631713080,3631713087,BR
-3631713088,3631713095,GT
-3631713096,3631713111,US
-3631713112,3631713119,MX
-3631713120,3631713135,US
-3631713136,3631713143,UA
-3631713144,3631822815,US
+3631667200,3631667455,US
+3631667456,3631668223,CA
+3631668224,3631668479,US
+3631668480,3631668991,CA
+3631668992,3631822815,US
3631822816,3631822831,AU
3631822832,3631825647,US
3631825648,3631825663,NZ
@@ -172863,37 +88475,15 @@
3631829024,3631829039,IN
3631829040,3631841279,US
3631841280,3631874047,CA
-3631874048,3631879199,US
-3631879200,3631879231,CA
-3631879232,3631881759,US
-3631881760,3631881791,CA
-3631881792,3631939583,US
+3631874048,3631939583,US
3631939584,3632005119,CA
-3632005120,3632152575,US
+3632005120,3632150527,US
3632152576,3632168959,CA
3632168960,3632197631,US
3632197632,3632201727,CA
-3632201728,3632219272,US
-3632219273,3632219528,US
-3632219529,3632220166,US
-3632220167,3632220167,US
-3632220168,3632222816,US
-3632222817,3632223074,US
-3632223075,3632232447,US
-3632232448,3632232703,A2
-3632232704,3632242943,US
-3632242944,3632243007,GB
-3632243008,3632244223,US
+3632201728,3632244223,US
3632244224,3632244479,CA
-3632244480,3632278527,US
-3632278528,3632279551,SA
-3632279552,3632284879,US
-3632284880,3632284895,CA
-3632284896,3632289583,US
-3632289584,3632289599,PH
-3632289600,3632291775,US
-3632291776,3632291839,GB
-3632291840,3632332799,US
+3632244480,3632332799,US
3632332800,3632357375,CA
3632357376,3632381951,US
3632381952,3632390143,CA
@@ -172903,299 +88493,70 @@
3632448256,3632448511,CA
3632448512,3632451583,US
3632451584,3632455679,CA
-3632455680,3632482349,US
-3632482350,3632482350,US
-3632482351,3632652559,US
-3632652560,3632652575,GB
-3632652576,3632826495,US
-3632826496,3632826511,CN
-3632826512,3632833231,US
-3632833232,3632833247,CN
-3632833248,3632837135,US
-3632837136,3632837151,IN
-3632837152,3632838399,US
-3632838400,3632838431,TW
-3632838432,3632838583,US
-3632838584,3632838591,CN
-3632838592,3632847279,US
-3632847280,3632847295,CN
-3632847296,3632857087,US
-3632857088,3632861183,BS
+3632455680,3632467967,US
+3632470016,3632857087,US
+3632857088,3632859229,BS
+3632859230,3632859230,US
+3632859231,3632861183,BS
3632861184,3632881663,US
3632881664,3632889855,CA
3632889856,3632898047,US
-3632898048,3632898335,CA
-3632898336,3632898351,US
-3632898352,3632902143,CA
+3632898048,3632902143,CA
3632902144,3632971775,US
3632971776,3632988159,CA
-3632988160,3632994047,US
-3632994048,3632994303,US
-3632994304,3633029119,US
+3632988160,3633029119,US
3633029120,3633029631,PY
3633029632,3633030143,NI
-3633030144,3633030159,US
-3633030160,3633030167,A2
-3633030168,3633030175,US
-3633030176,3633030183,A2
-3633030184,3633030191,US
-3633030192,3633030199,A2
-3633030200,3633030207,US
-3633030208,3633030215,A2
-3633030216,3633030223,NG
-3633030224,3633030231,A2
-3633030232,3633030287,US
-3633030288,3633030303,A2
-3633030304,3633030335,US
-3633030336,3633030359,A2
-3633030360,3633030655,US
+3633030144,3633030655,US
3633030656,3633030911,SN
-3633030912,3633031167,A2
-3633031168,3633031615,US
-3633031616,3633031623,A2
-3633031624,3633031647,US
-3633031648,3633031655,NG
-3633031656,3633031679,US
-3633031680,3633031935,A2
+3633030912,3633031935,US
3633031936,3633032191,PG
-3633032192,3633032223,US
-3633032224,3633032231,NG
-3633032232,3633032239,US
-3633032240,3633032247,A2
-3633032248,3633032271,US
-3633032272,3633032279,A2
-3633032280,3633032287,US
-3633032288,3633032319,GQ
-3633032320,3633032415,US
-3633032416,3633032431,NG
-3633032432,3633032439,US
-3633032440,3633032447,A2
-3633032448,3633032543,US
-3633032544,3633032567,NG
-3633032568,3633032591,US
-3633032592,3633032607,A2
-3633032608,3633033247,US
-3633033248,3633033255,A2
-3633033256,3633033263,US
-3633033264,3633033271,A2
-3633033272,3633033287,US
-3633033288,3633033295,GH
-3633033296,3633033303,NG
-3633033304,3633033319,A2
-3633033320,3633033327,NG
-3633033328,3633033335,US
-3633033336,3633033359,A2
-3633033360,3633033367,NG
-3633033368,3633033375,A2
-3633033376,3633033391,NG
-3633033392,3633033399,A2
-3633033400,3633034047,US
-3633034048,3633034079,A2
-3633034080,3633034519,US
-3633034520,3633034527,NG
-3633034528,3633034623,US
-3633034624,3633034751,NG
-3633034752,3633035015,US
-3633035016,3633035023,NL
-3633035024,3633035071,US
-3633035072,3633035087,NR
-3633035088,3633035095,CN
-3633035096,3633035135,US
-3633035136,3633035151,NR
-3633035152,3633035199,US
-3633035200,3633035207,ID
-3633035208,3633035287,US
-3633035288,3633035295,A2
-3633035296,3633035311,US
-3633035312,3633035319,ID
-3633035320,3633035439,US
-3633035440,3633035447,ID
-3633035448,3633035455,US
-3633035456,3633035487,ID
-3633035488,3633035527,US
-3633035528,3633035535,NG
-3633035536,3633035551,US
-3633035552,3633035599,A2
-3633035600,3633036031,US
+3633032192,3633036031,US
3633036032,3633036287,HT
3633036288,3633036543,TT
-3633036544,3633036607,US
-3633036608,3633036671,A2
-3633036672,3633039503,US
-3633039504,3633039519,CA
-3633039520,3633166079,US
-3633166080,3633166207,MX
-3633166208,3633336319,US
-3633336320,3633336463,KY
-3633336464,3633336479,US
-3633336480,3633340415,KY
+3633036544,3633336319,US
+3633336320,3633340415,KY
3633340416,3633344511,US
3633344512,3633348607,CA
3633348608,3633405951,US
3633405952,3633410047,CA
-3633410048,3633479679,US
+3633410048,3633446911,US
+3633454080,3633454335,US
+3633455104,3633456383,US
+3633456384,3633456639,AU
+3633456640,3633479679,US
3633479680,3633483775,CA
-3633483776,3633513984,US
-3633513985,3633514238,ES
-3633514239,3633545215,US
+3633483776,3633545215,US
3633545216,3633545727,GA
-3633545728,3633545983,A2
-3633545984,3633546239,US
+3633545728,3633546239,US
3633546240,3633546751,GA
-3633546752,3633547007,A2
-3633547008,3633547263,US
+3633546752,3633547263,US
3633547264,3633547775,GA
3633547776,3633548287,NG
-3633548288,3633548543,A2
+3633548288,3633548543,US
3633548544,3633548799,GA
-3633548800,3633548927,A2
-3633548928,3633549055,GA
-3633549056,3633549375,A2
-3633549376,3633549391,US
-3633549392,3633549567,A2
+3633548800,3633549567,US
3633549568,3633549823,GA
-3633549824,3633550335,US
-3633550336,3633550431,A2
-3633550432,3633550847,US
+3633549824,3633550847,US
3633550848,3633551359,GA
-3633551360,3633552127,US
-3633552128,3633552383,A2
-3633552384,3633552639,US
-3633552640,3633552911,A2
-3633552912,3633552927,GA
-3633552928,3633553119,US
-3633553120,3633553127,A2
-3633553128,3633553143,US
-3633553144,3633553151,A2
-3633553152,3633757439,US
+3633551360,3633757439,US
3633757440,3633757695,IN
-3633757696,3633776399,US
-3633776400,3633776415,CN
-3633776416,3633782527,US
-3633782528,3633782783,US
-3633782784,3633815551,US
-3633815552,3633815807,CA
-3633815808,3633815839,US
-3633815840,3633815843,GB
-3633815844,3633815847,CA
-3633815848,3633815851,GB
-3633815852,3633815879,US
-3633815880,3633815883,EG
-3633815884,3633815887,CA
-3633815888,3633815931,US
-3633815932,3633815935,CA
-3633815936,3633815943,US
-3633815944,3633815951,CA
-3633815952,3633815967,US
-3633815968,3633816031,CA
-3633816032,3633816035,US
-3633816036,3633816039,GB
-3633816040,3633816047,US
-3633816048,3633816051,CA
-3633816052,3633816055,US
-3633816056,3633816079,CA
-3633816080,3633816087,US
-3633816088,3633816119,CA
-3633816120,3633816127,IN
-3633816128,3633816143,US
-3633816144,3633816151,CA
-3633816152,3633816159,IN
-3633816160,3633816175,ZA
-3633816176,3633816191,US
-3633816192,3633816223,CA
-3633816224,3633816231,IN
-3633816232,3633816247,US
-3633816248,3633816255,IN
-3633816256,3633816263,NG
-3633816264,3633816279,CA
-3633816280,3633816311,US
-3633816312,3633816319,CA
-3633816320,3633816327,ZA
-3633816328,3633816351,CA
-3633816352,3633816383,IN
-3633816384,3633816391,NG
-3633816392,3633816399,US
-3633816400,3633816407,CA
-3633816408,3633816463,US
-3633816464,3633816471,CA
-3633816472,3633816479,IN
-3633816480,3633816495,CA
-3633816496,3633816503,ZA
-3633816504,3633816511,IN
-3633816512,3633816519,US
-3633816520,3633816527,ZA
-3633816528,3633816535,CA
-3633816536,3633816543,US
-3633816544,3633816559,ZA
-3633816560,3633816567,IN
-3633816568,3633818663,CA
-3633818664,3633818667,US
-3633818668,3633818703,CA
-3633818704,3633818711,US
-3633818712,3633818799,CA
-3633818800,3633818807,US
-3633818808,3633818847,CA
-3633818848,3633818855,US
-3633818856,3633819135,CA
-3633819136,3633819199,IN
-3633819200,3633819231,US
-3633819232,3633819263,CA
-3633819264,3633819275,US
-3633819276,3633819279,CA
-3633819280,3633819291,US
-3633819292,3633819295,GB
-3633819296,3633819303,US
-3633819304,3633819307,AM
-3633819308,3633819315,CA
-3633819316,3633819331,US
-3633819332,3633819343,CA
-3633819344,3633819347,US
-3633819348,3633819351,CA
-3633819352,3633819391,US
-3633819392,3633819423,IN
-3633819424,3633819427,CA
-3633819428,3633819439,US
-3633819440,3633819443,CA
-3633819444,3633819451,US
-3633819452,3633819455,CA
-3633819456,3633819463,US
-3633819464,3633819467,CA
-3633819468,3633819487,US
-3633819488,3633819491,CA
-3633819492,3633819499,US
-3633819500,3633819511,CA
-3633819512,3633819515,US
-3633819516,3633819519,AR
-3633819520,3633819539,US
-3633819540,3633819547,CA
-3633819548,3633819555,US
-3633819556,3633819559,GB
-3633819560,3633819563,US
-3633819564,3633819583,CA
-3633819584,3633819615,US
-3633819616,3633819639,CA
-3633819640,3633821279,US
-3633821280,3633821311,BB
-3633821312,3633822207,US
-3633822208,3633822335,US
-3633822336,3633823487,US
-3633823488,3633823743,US
-3633823744,3633828970,US
-3633828971,3633828977,IN
-3633828978,3633831306,US
-3633831307,3633831338,IN
-3633831339,3633831383,US
-3633831384,3633831395,AU
-3633831396,3633881087,US
+3633757696,3633785343,US
+3633785600,3633786367,US
+3633786880,3633815807,US
+3633815808,3633816063,CA
+3633816064,3633817087,US
+3633817088,3633817343,CA
+3633817344,3633818623,US
+3633818624,3633819135,CA
+3633819136,3633844223,US
+3633848320,3633881087,US
3633881088,3633885183,CW
3633885184,3633889279,US
3633889280,3633893375,CA
-3633893376,3633897471,US
-3633901568,3633915647,US
+3633893376,3633915647,US
3633915648,3633915903,IT
-3633915904,3633922303,US
-3633922304,3633922367,TN
-3633922368,3633971199,US
+3633915904,3633971199,US
3633971200,3633974527,CA
3633974528,3633975039,US
3633975040,3634020351,CA
@@ -173204,60 +88565,26 @@
3634037760,3634052863,US
3634052864,3634053119,CA
3634053120,3634061311,CL
-3634061312,3634065311,US
-3634065312,3634065343,SV
-3634065344,3634094079,US
+3634061312,3634094079,US
3634094080,3634098175,SE
-3634098176,3634125831,US
-3634125832,3634125839,CA
-3634125840,3634125855,JP
-3634125856,3634125951,US
-3634125952,3634125967,CA
-3634125968,3634136103,US
-3634136104,3634136111,CA
-3634136112,3634138127,US
-3634138128,3634138143,CA
-3634138144,3634204255,US
-3634204256,3634204263,AT
-3634204264,3634204591,US
-3634204592,3634204607,GB
-3634204608,3634267649,US
-3634267650,3634267681,GB
-3634267682,3634269669,US
-3634269670,3634269679,GB
-3634269680,3634269801,US
-3634269802,3634269815,CA
-3634269816,3634270016,US
-3634270017,3634270080,CN
-3634270081,3634270976,US
-3634270977,3634271231,CN
-3634271232,3634271232,US
-3634271233,3634271328,CA
-3634271329,3634367023,US
-3634367024,3634367031,CA
-3634367032,3634511871,US
+3634098176,3634511871,US
3634511872,3634515967,CA
3634515968,3634552831,US
3634552832,3634556927,CA
3634556928,3634741247,US
3634741248,3634749439,CA
-3634749440,3634880511,US
+3634749440,3634759679,US
+3634759680,3634759935,CA
+3634759936,3634880511,US
3634880512,3634888703,CA
3634888704,3634913279,US
-3634913280,3634914175,CA
-3634914176,3634914207,US
-3634914208,3634914223,CA
-3634914224,3634914239,US
-3634914240,3634917663,CA
-3634917664,3634917679,BM
-3634917680,3634921471,CA
+3634913280,3634915663,CA
+3634915664,3634915679,US
+3634915680,3634921471,CA
3634921472,3634925567,US
3634925568,3634929663,CA
-3634929664,3634982399,US
-3634982400,3634982655,US
-3634982656,3635107903,US
-3635107904,3635107967,MX
-3635107968,3635109887,US
+3634929664,3635044351,US
+3635048448,3635109887,US
3635109888,3635113983,CA
3635113984,3635142655,US
3635142656,3635146751,CA
@@ -173271,11 +88598,7 @@
3635425280,3635429375,CA
3635429376,3635466239,US
3635466240,3635470335,CA
-3635470336,3635532287,US
-3635532288,3635532303,ES
-3635532304,3635532543,US
-3635532544,3635532799,PR
-3635532800,3635533535,US
+3635470336,3635533535,US
3635533536,3635533551,IN
3635533552,3635643391,US
3635643392,3635644415,JP
@@ -173305,20 +88628,102 @@
3635670528,3635671039,TL
3635671040,3635674623,US
3635674624,3635675135,HK
-3635675136,3635847791,US
-3635847792,3635847807,CA
-3635847808,3635856511,US
-3635856512,3635856543,CA
-3635856544,3635859807,US
-3635859808,3635859815,AR
-3635859816,3635871743,US
+3635675136,3635740671,US
+3635740672,3635740927,CA
+3635740928,3635741439,US
+3635741440,3635741695,CA
+3635741696,3635741951,US
+3635741952,3635742463,CA
+3635742464,3635742719,US
+3635742720,3635743487,CA
+3635743488,3635744255,US
+3635744256,3635744511,CA
+3635744512,3635744767,US
+3635744768,3635745023,CA
+3635745024,3635745279,US
+3635745280,3635745535,CA
+3635745536,3635746047,US
+3635746048,3635749375,CA
+3635749376,3635749631,US
+3635749632,3635750143,CA
+3635750144,3635750399,US
+3635750400,3635751679,CA
+3635751680,3635752191,US
+3635752192,3635752447,CA
+3635752448,3635752703,US
+3635752704,3635753215,CA
+3635753216,3635753471,US
+3635753472,3635754239,CA
+3635754240,3635755007,US
+3635755008,3635755519,CA
+3635755520,3635755775,US
+3635755776,3635756287,CA
+3635756288,3635756543,US
+3635756544,3635757311,CA
+3635757312,3635758079,US
+3635758080,3635758335,CA
+3635758336,3635758591,US
+3635758592,3635758847,CA
+3635758848,3635759103,US
+3635759104,3635760895,CA
+3635760896,3635761151,US
+3635761152,3635762687,CA
+3635762688,3635762943,US
+3635762944,3635763199,CA
+3635763200,3635763455,US
+3635763456,3635764735,CA
+3635764736,3635765247,US
+3635765248,3635765759,CA
+3635765760,3635768575,US
+3635768576,3635768831,CA
+3635768832,3635769087,US
+3635769088,3635771135,CA
+3635771136,3635771647,US
+3635771648,3635771903,CA
+3635771904,3635772415,US
+3635772416,3635772671,CA
+3635772672,3635772927,US
+3635772928,3635773439,CA
+3635773440,3635773695,US
+3635773696,3635773951,CA
+3635773952,3635774207,US
+3635774208,3635774463,CA
+3635774464,3635774719,US
+3635774720,3635775231,CA
+3635775232,3635775487,US
+3635775488,3635775743,CA
+3635775744,3635775999,US
+3635776000,3635776511,CA
+3635776512,3635776767,US
+3635776768,3635777023,CA
+3635777024,3635777279,US
+3635777280,3635777791,CA
+3635777792,3635778047,US
+3635778048,3635778559,CA
+3635778560,3635778815,US
+3635778816,3635780607,CA
+3635780608,3635780863,US
+3635780864,3635781119,CA
+3635781120,3635783167,US
+3635783168,3635789055,CA
+3635789056,3635789311,US
+3635789312,3635791359,CA
+3635791360,3635791615,US
+3635791616,3635793407,CA
+3635793408,3635794175,US
+3635794176,3635799551,CA
+3635799552,3635800063,US
+3635800064,3635804159,CA
+3635804160,3635804671,US
+3635804672,3635805439,CA
+3635805440,3635805455,US
+3635805456,3635806207,CA
+3635806208,3635871743,US
3635871744,3635879935,CA
3635879936,3635892223,US
3635892224,3635895785,CA
3635895786,3635895786,US
-3635895787,3635895807,CA
-3635895808,3635895839,US
-3635895840,3635896319,CA
+3635895787,3635896319,CA
3635896320,3635904511,US
3635904512,3635912703,CA
3635912704,3635961855,US
@@ -173333,174 +88738,67 @@
3636027392,3636027647,US
3636027648,3636029439,SG
3636029440,3636029695,US
-3636029696,3636029767,SG
-3636029768,3636029775,CH
-3636029776,3636029951,SG
+3636029696,3636029951,SG
3636029952,3636030207,US
3636030208,3636031231,SG
3636031232,3636031999,US
-3636032000,3636032199,SG
-3636032200,3636032207,US
-3636032208,3636032511,SG
+3636032000,3636032511,SG
3636032512,3636032767,US
-3636032768,3636033519,SG
-3636033520,3636033791,US
+3636032768,3636033535,SG
+3636033536,3636033791,US
3636033792,3636034303,SG
3636034304,3636035327,US
3636035328,3636035583,SG
3636035584,3636064255,US
3636064256,3636068351,CA
-3636068352,3636150495,US
-3636150496,3636150527,CA
-3636150528,3636150783,US
-3636150784,3636150839,CA
-3636150840,3636150911,US
-3636150912,3636150935,CA
-3636150936,3636150943,US
-3636150944,3636150991,CA
-3636150992,3636151007,US
-3636151008,3636151023,BS
-3636151024,3636151031,CA
-3636151032,3636151039,US
-3636151040,3636151455,CA
-3636151456,3636151479,US
-3636151480,3636151488,CA
-3636151489,3636151535,US
-3636151536,3636151551,CA
-3636151552,3636151561,US
-3636151562,3636151563,CA
-3636151564,3636151583,US
-3636151584,3636151759,CA
-3636151760,3636151775,US
-3636151776,3636152303,CA
-3636152304,3636152319,US
+3636068352,3636150783,US
+3636150784,3636150799,CA
+3636150800,3636151807,US
+3636151808,3636152063,CA
+3636152064,3636152319,US
3636152320,3636152575,CA
-3636152576,3636152591,US
-3636152592,3636152607,CA
-3636152608,3636152615,US
-3636152616,3636152623,CA
-3636152624,3636152647,US
-3636152648,3636152655,CA
-3636152656,3636152703,US
-3636152704,3636152767,CA
-3636152768,3636152775,MX
-3636152776,3636152783,US
-3636152784,3636152799,CA
-3636152800,3636152831,US
-3636152832,3636152855,CA
-3636152856,3636152879,US
-3636152880,3636153023,CA
-3636153024,3636153055,KN
-3636153056,3636153343,CA
-3636153344,3636153375,US
-3636153376,3636153823,CA
-3636153824,3636153839,US
-3636153840,3636153847,CA
-3636153848,3636153855,US
-3636153856,3636154895,CA
-3636154896,3636154911,US
-3636154912,3636154975,CA
-3636154976,3636154979,US
-3636154980,3636154990,CA
-3636154991,3636155071,US
-3636155072,3636155391,CA
-3636155392,3636155407,US
-3636155408,3636155455,CA
-3636155456,3636155519,US
-3636155520,3636155775,CA
-3636155776,3636155839,US
-3636155840,3636156159,CA
-3636156160,3636156191,US
-3636156192,3636156255,CA
-3636156256,3636156256,US
-3636156257,3636156415,CA
-3636156416,3636156927,US
-3636156928,3636157063,CA
-3636157064,3636157167,US
-3636157168,3636157183,CA
-3636157184,3636157439,US
-3636157440,3636158015,CA
-3636158016,3636158031,US
-3636158032,3636158071,CA
-3636158072,3636158079,US
-3636158080,3636158215,CA
-3636158216,3636158223,US
-3636158224,3636158335,CA
-3636158336,3636158351,US
-3636158352,3636158367,CA
-3636158368,3636158383,US
-3636158384,3636158719,CA
-3636158720,3636158751,US
-3636158752,3636158815,CA
-3636158816,3636158831,US
-3636158832,3636158847,CA
-3636158848,3636158975,US
+3636152576,3636152735,US
+3636152736,3636152751,CA
+3636152752,3636152783,US
+3636152784,3636152791,CA
+3636152792,3636152831,US
+3636152832,3636152847,CA
+3636152848,3636153855,US
+3636153856,3636154879,CA
+3636154880,3636155135,US
+3636155136,3636155391,CA
+3636155392,3636155647,US
+3636155648,3636156159,CA
+3636156160,3636157439,US
+3636157440,3636157951,CA
+3636157952,3636158063,US
+3636158064,3636158071,CA
+3636158072,3636158207,US
+3636158208,3636158215,CA
+3636158216,3636158463,US
+3636158464,3636158719,CA
+3636158720,3636158975,US
3636158976,3636159743,CA
-3636159744,3636159775,US
-3636159776,3636159807,CA
-3636159808,3636159839,US
-3636159840,3636159871,CA
-3636159872,3636159999,IN
-3636160000,3636160255,US
-3636160256,3636160335,CA
-3636160336,3636160343,US
-3636160344,3636160415,CA
-3636160416,3636160431,US
-3636160432,3636160831,CA
-3636160832,3636160895,US
-3636160896,3636160943,CA
-3636160944,3636160975,US
-3636160976,3636161279,CA
-3636161280,3636161327,US
-3636161328,3636161407,CA
-3636161408,3636161439,US
-3636161440,3636161535,CA
-3636161536,3636161791,US
-3636161792,3636161871,CA
-3636161872,3636161885,US
-3636161886,3636161943,CA
-3636161944,3636161951,US
-3636161952,3636161983,CA
-3636161984,3636162015,US
-3636162016,3636162559,CA
+3636159744,3636160511,US
+3636160512,3636160767,CA
+3636160768,3636161023,US
+3636161024,3636161279,CA
+3636161280,3636162047,US
+3636162048,3636162559,CA
3636162560,3636163583,US
3636163584,3636164095,CA
-3636164096,3636164111,US
-3636164112,3636164143,CA
-3636164144,3636164159,US
-3636164160,3636164255,CA
-3636164256,3636164271,US
-3636164272,3636164319,CA
-3636164320,3636164327,US
+3636164096,3636164327,US
3636164328,3636164335,CA
-3636164336,3636164351,US
-3636164352,3636164607,CA
-3636164608,3636165471,US
-3636165472,3636165503,CA
-3636165504,3636166399,US
+3636164336,3636165119,US
+3636165120,3636165375,CA
+3636165376,3636166399,US
3636166400,3636166655,CA
3636166656,3636206079,US
3636206080,3636206335,AU
-3636206336,3636266879,US
-3636266880,3636266911,HK
-3636266912,3636273663,US
-3636273664,3636273919,CA
-3636273920,3636274175,US
-3636274176,3636274431,CA
-3636274432,3636287487,US
-3636287488,3636287743,CA
-3636287744,3636291839,US
-3636291840,3636292095,CA
-3636292096,3636292863,US
-3636292864,3636293119,CA
-3636293120,3636294399,US
-3636294400,3636294655,CA
-3636294656,3636396031,US
+3636206336,3636396031,US
3636396032,3636461567,CA
3636461568,3636609023,US
-3636609024,3636610559,CA
-3636610560,3636610815,US
-3636610816,3636621311,CA
+3636609024,3636621311,CA
3636621312,3636625407,US
3636625408,3636626431,AR
3636626432,3636626943,BR
@@ -173508,493 +88806,97 @@
3636627200,3636627455,BR
3636627456,3636628479,MX
3636628480,3636628991,PE
-3636628992,3636633599,US
-3636637696,3636822015,US
+3636628992,3636822015,US
3636822016,3636854783,CA
-3636854784,3636862975,US
-3636862976,3636863231,CA
-3636863232,3636863295,US
-3636863296,3636863359,CA
-3636863360,3636863423,US
-3636863424,3636863551,CA
-3636863552,3636863615,US
-3636863616,3636863647,CA
-3636863648,3636863679,US
-3636863680,3636863711,CA
-3636863712,3636863743,US
-3636863744,3636863791,CA
-3636863792,3636863807,US
-3636863808,3636863823,CA
-3636863824,3636863839,US
-3636863840,3636863919,CA
-3636863920,3636863951,US
-3636863952,3636864031,CA
-3636864032,3636864055,US
-3636864056,3636864063,CA
-3636864064,3636864079,US
-3636864080,3636864135,CA
-3636864136,3636864143,US
-3636864144,3636864159,CA
-3636864160,3636864167,US
-3636864168,3636864175,CA
-3636864176,3636864183,US
-3636864184,3636864223,CA
-3636864224,3636864231,US
-3636864232,3636864255,CA
-3636864256,3636864511,US
-3636864512,3636864575,CA
-3636864576,3636864607,US
-3636864608,3636865151,CA
-3636865152,3636865215,US
-3636865216,3636865407,CA
-3636865408,3636865519,US
-3636865520,3636865543,CA
-3636865544,3636865551,US
-3636865552,3636865791,CA
-3636865792,3636866063,US
-3636866064,3636866071,CA
-3636866072,3636866079,US
-3636866080,3636866095,CA
-3636866096,3636866127,US
-3636866128,3636866143,CA
-3636866144,3636866159,US
-3636866160,3636866175,CA
-3636866176,3636866207,US
-3636866208,3636866367,CA
-3636866368,3636866383,US
-3636866384,3636866399,CA
-3636866400,3636866415,US
-3636866416,3636866527,CA
-3636866528,3636866575,US
-3636866576,3636866591,CA
-3636866592,3636866607,US
-3636866608,3636866623,CA
-3636866624,3636866687,US
-3636866688,3636866751,CA
-3636866752,3636866783,US
-3636866784,3636866815,CA
-3636866816,3636887551,US
+3636854784,3636887551,US
3636887552,3636895743,CA
-3636895744,3636904063,US
-3636904064,3636904095,GB
-3636904096,3636904159,US
-3636904160,3636904191,CA
-3636904192,3636904447,US
-3636904448,3636904479,CA
-3636904480,3636904511,HK
-3636904512,3636904543,CA
-3636904544,3636904575,IN
-3636904576,3636904607,US
-3636904608,3636904671,IN
-3636904672,3636905471,US
+3636895744,3636905471,US
3636905472,3636905727,CA
-3636905728,3636905791,US
-3636905792,3636905823,IN
-3636905824,3636905887,US
-3636905888,3636905951,CA
-3636905952,3636906015,US
-3636906016,3636906047,IN
-3636906048,3636906079,US
-3636906080,3636906111,BE
-3636906112,3636906143,US
-3636906144,3636906175,BE
-3636906176,3636906207,IN
-3636906208,3636906367,US
-3636906368,3636906465,IN
-3636906466,3636906495,US
-3636906496,3636906623,CA
-3636906624,3636906751,IN
-3636906752,3636906879,US
-3636906880,3636907007,IN
-3636907008,3636907039,CA
-3636907040,3636907103,US
-3636907104,3636907135,IN
-3636907136,3636907167,CA
-3636907168,3636907199,US
-3636907200,3636907231,CA
-3636907232,3636907775,US
+3636905728,3636907775,US
3636907776,3636908031,CA
-3636908032,3636908543,US
-3636908544,3636908799,IN
-3636908800,3636908863,US
-3636908864,3636908927,CN
-3636908928,3636908991,CA
-3636908992,3636909055,US
+3636908032,3636909055,US
3636909056,3636909311,CA
-3636909312,3636909663,US
-3636909664,3636909695,IT
-3636909696,3636909727,CA
-3636909728,3636909759,US
-3636909760,3636909791,CA
-3636909792,3636909887,US
-3636909888,3636909951,IT
-3636909952,3636909983,US
-3636909984,3636910015,TZ
-3636910016,3636910335,US
-3636910336,3636910367,IN
-3636910368,3636910399,US
-3636910400,3636910431,IN
-3636910432,3636910495,US
-3636910496,3636910527,BE
-3636910528,3636910591,US
-3636910592,3636910719,CA
-3636910720,3636911295,US
-3636911296,3636911359,CA
-3636911360,3636911423,US
-3636911424,3636911455,BE
-3636911456,3636911615,US
-3636911616,3636911743,CA
-3636911744,3636911871,IN
-3636911872,3636911903,US
-3636911904,3636911935,CA
-3636911936,3636912383,US
-3636912384,3636912447,JP
-3636912448,3636912959,US
-3636912960,3636912991,BE
-3636912992,3636913535,US
-3636913536,3636913663,CA
-3636913664,3636913919,US
+3636909312,3636913919,US
3636913920,3636914687,CA
-3636914688,3636914879,US
-3636914880,3636914943,CA
-3636914944,3636915103,US
-3636915104,3636915135,IN
-3636915136,3636915199,US
-3636915200,3636915327,IN
-3636915328,3636915455,CA
-3636915456,3636915583,IN
-3636915584,3636915711,CA
-3636915712,3636915839,US
-3636915840,3636915967,CA
-3636915968,3636916031,US
-3636916032,3636916063,CA
-3636916064,3636916223,US
-3636916224,3636916351,CA
-3636916352,3636916479,US
-3636916480,3636916607,CA
-3636916608,3636916735,IN
-3636916736,3636916927,US
-3636916928,3636916959,CA
-3636916960,3636916991,US
-3636916992,3636917119,CA
-3636917120,3636917255,US
-3636917256,3636917263,IN
-3636917264,3636917295,US
-3636917296,3636917303,IN
-3636917304,3636917359,US
-3636917360,3636917367,AU
-3636917368,3636917447,US
-3636917448,3636917455,HK
-3636917456,3636917503,US
-3636917504,3636917759,CA
-3636917760,3636918015,US
+3636914688,3636918015,US
3636918016,3636919039,CA
-3636919040,3636919071,IN
-3636919072,3636919103,US
-3636919104,3636919135,CA
-3636919136,3636919167,IN
-3636919168,3636919199,CA
-3636919200,3636919231,IN
-3636919232,3636919711,US
-3636919712,3636919743,BE
-3636919744,3636919807,US
-3636919808,3636919871,GB
-3636919872,3636920127,US
-3636920128,3636920191,CA
-3636920192,3637015327,US
-3637015328,3637015343,GB
-3637015344,3637023423,US
-3637023424,3637023487,TW
-3637023488,3637024767,US
-3637024768,3637024895,CA
-3637024896,3637025023,US
-3637025024,3637025087,CA
-3637025088,3637071887,US
-3637071888,3637071903,AD
-3637071904,3637071935,US
-3637071936,3637071943,SK
-3637071944,3637071951,IL
-3637071952,3637071967,CY
-3637071968,3637072015,US
-3637072016,3637072031,CY
-3637072032,3637072071,US
-3637072072,3637072079,FI
-3637072080,3637072095,CA
-3637072096,3637072127,GB
-3637072128,3637072135,US
-3637072136,3637072143,AD
-3637072144,3637072159,CY
-3637072160,3637072279,US
-3637072280,3637072287,CA
-3637072288,3637072303,NE
-3637072304,3637072319,US
-3637072320,3637072335,IL
-3637072336,3637072343,CA
-3637072344,3637072895,US
+3636919040,3637072895,US
3637072896,3637073151,CY
-3637073152,3637073167,US
-3637073168,3637073183,AD
-3637073184,3637073215,US
-3637073216,3637073231,CY
-3637073232,3637073935,US
-3637073936,3637073959,AD
-3637073960,3637074239,US
-3637074240,3637074303,PA
-3637074304,3637074943,US
-3637074944,3637074959,CA
-3637074960,3637075967,US
+3637073152,3637075967,US
3637075968,3637080063,CA
-3637080064,3637427711,US
-3637427712,3637427743,CA
-3637427744,3637441599,US
-3637441600,3637441607,CA
-3637441608,3637469439,US
+3637080064,3637469439,US
3637469440,3637469695,GE
3637469696,3637510143,US
-3637510144,3637520127,CA
-3637520128,3637520191,US
-3637520192,3637641215,CA
+3637510144,3637641215,CA
3637641216,3637665791,US
-3637665792,3637667439,CA
-3637667440,3637667518,US
-3637667519,3637669887,CA
+3637665792,3637669887,CA
3637669888,3637706751,US
3637706752,3637739519,CA
-3637739520,3637740767,US
-3637740768,3637740799,CA
-3637740800,3638165503,US
+3637739520,3638165503,US
3638165504,3638181887,CA
-3638181888,3638198951,US
-3638198952,3638198959,BM
-3638198960,3638198983,US
-3638198984,3638198991,ES
-3638198992,3638206407,US
-3638206408,3638206415,LU
-3638206416,3638208527,US
-3638208528,3638208543,CN
-3638208544,3638214399,US
+3638181888,3638214399,US
3638214400,3638214655,GR
-3638214656,3638214871,US
-3638214872,3638214879,CK
-3638214880,3638215663,US
-3638215664,3638215679,GB
-3638215680,3638215855,US
-3638215856,3638215863,AU
-3638215864,3638216735,US
-3638216736,3638216743,LU
-3638216744,3638219455,US
-3638219456,3638219519,AU
-3638219520,3638220511,US
-3638220512,3638220519,CN
-3638220520,3638222087,US
-3638222088,3638222095,DE
-3638222096,3638222463,US
-3638222464,3638222591,AU
-3638222592,3638222655,CA
-3638222656,3638224639,US
+3638214656,3638224639,US
3638224640,3638224895,GR
-3638224896,3638225983,US
-3638225984,3638226015,IN
-3638226016,3638226687,US
+3638224896,3638226687,US
3638226688,3638226943,NL
-3638226944,3638228023,US
-3638228024,3638228031,GB
-3638228032,3638230815,US
-3638230816,3638230847,ES
-3638230848,3638230927,US
-3638230928,3638230935,CA
-3638230936,3638231031,US
-3638231032,3638231039,GB
-3638231040,3638247439,US
-3638247440,3638247455,GB
-3638247456,3638247487,US
-3638247488,3638247551,GB
-3638247552,3638247615,US
-3638247616,3638247679,GB
-3638247680,3638247855,US
-3638247856,3638247871,DE
-3638247872,3638247919,US
-3638247920,3638248703,GB
-3638248704,3638249215,FR
+3638226944,3638247935,US
+3638247936,3638248703,GB
+3638248704,3638249215,US
3638249216,3638249471,GB
-3638249472,3638249751,US
-3638249752,3638249791,GB
-3638249792,3638249983,US
-3638249984,3638250031,GB
-3638250032,3638250063,US
-3638250064,3638250079,GB
-3638250080,3638250535,US
-3638250536,3638250543,GB
-3638250544,3638250559,US
-3638250560,3638250623,GB
-3638250624,3638250687,US
-3638250688,3638250703,GB
-3638250704,3638250719,US
-3638250720,3638250735,GB
-3638250736,3638250743,US
-3638250744,3638250815,GB
-3638250816,3638250831,US
-3638250832,3638250847,GB
-3638250848,3638250863,US
-3638250864,3638250871,GB
-3638250872,3638250895,US
-3638250896,3638250911,GB
-3638250912,3638250983,US
-3638250984,3638250991,GB
-3638250992,3638304767,US
+3638249472,3638304767,US
3638304768,3638312959,CA
3638312960,3638349823,US
3638349824,3638350079,AU
3638350080,3638370303,US
-3638370304,3638374751,CA
-3638374752,3638374767,US
-3638374768,3638386687,CA
-3638386688,3638398975,US
-3638398976,3638398991,GB
-3638398992,3638399007,CH
-3638399008,3638399487,US
-3638399488,3638399615,CH
-3638399616,3638399647,BM
-3638399648,3638399679,US
-3638399680,3638399743,CA
+3638370304,3638386687,CA
+3638386688,3638399743,US
3638399744,3638399999,CH
-3638400000,3638400063,CA
-3638400064,3638400271,US
-3638400272,3638400279,CA
-3638400280,3638400559,US
-3638400560,3638400567,PA
-3638400568,3638400575,US
-3638400576,3638400607,CA
-3638400608,3638400639,US
-3638400640,3638400767,CA
-3638400768,3638401087,US
-3638401088,3638401151,CA
-3638401152,3638401279,CZ
-3638401280,3638509567,US
-3638509568,3638528751,CA
-3638528752,3638528759,US
-3638528760,3638530047,CA
-3638530048,3638530063,US
-3638530064,3638530239,CA
-3638530240,3638530255,US
-3638530256,3638534143,CA
+3638400000,3638401087,US
+3638401088,3638401119,CA
+3638401120,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,3638738943,US
+3638740992,3638746111,US
+3638746112,3638746367,MX
+3638746368,3638874111,US
3638874112,3638878207,CA
-3638878208,3638960383,US
-3638960384,3638960639,BR
-3638960640,3638984703,US
-3638984704,3638985983,GT
-3638985984,3638986239,HN
-3638986240,3638992895,GT
-3638992896,3639052031,US
+3638878208,3638984703,US
+3638984704,3638992895,GT
+3638992896,3638996991,US
+3639001088,3639052031,US
3639052032,3639052287,ES
-3639052288,3639083007,US
+3639052288,3639069439,US
+3639069440,3639069695,HK
+3639069696,3639083007,US
3639083008,3639148543,CA
3639148544,3639222271,US
3639222272,3639230463,CA
-3639230464,3639255039,US
+3639230464,3639247359,US
+3639248128,3639249151,US
+3639249664,3639255039,US
3639255040,3639263231,CA
3639263232,3639279615,US
3639279616,3639283711,CA
-3639283712,3639343231,US
-3639343232,3639343263,GB
-3639343264,3639344447,US
-3639344448,3639344463,MA
-3639344464,3639344543,US
-3639344544,3639344575,GB
-3639344576,3639344591,PL
-3639344592,3639369727,US
-3639369728,3639372031,A2
-3639372032,3639372287,US
-3639372288,3639375359,A2
-3639375360,3639375871,US
-3639375872,3639376895,A2
-3639376896,3639377407,GU
-3639377408,3639390207,US
+3639283712,3639390207,US
3639390208,3639394303,ZA
-3639394304,3639396095,US
-3639396096,3639396351,A2
-3639396352,3639396383,NE
-3639396384,3639396415,A2
-3639396416,3639396431,PK
-3639396432,3639396447,A2
-3639396448,3639396463,NG
-3639396464,3639396471,TZ
-3639396472,3639396487,A2
-3639396488,3639396519,IN
-3639396520,3639396543,A2
-3639396544,3639396551,TZ
-3639396552,3639396671,A2
-3639396672,3639396735,NE
-3639396736,3639396743,IN
-3639396744,3639396863,A2
-3639396864,3639396879,NE
-3639396880,3639396927,A2
-3639396928,3639396959,FR
-3639396960,3639396975,NG
-3639396976,3639396991,A2
-3639396992,3639397023,CD
-3639397024,3639397119,A2
+3639394304,3639397119,US
3639397120,3639397375,IN
3639397376,3639397631,US
3639397632,3639397887,NG
-3639397888,3639398399,US
-3639398400,3639398423,A2
-3639398424,3639398431,LB
-3639398432,3639398439,A2
-3639398440,3639398447,LB
-3639398448,3639398463,A2
-3639398464,3639398495,SA
-3639398496,3639398527,A2
-3639398528,3639398591,SA
-3639398592,3639398599,LB
-3639398600,3639398655,A2
-3639398656,3639398663,SA
-3639398664,3639398911,A2
-3639398912,3639399679,US
+3639397888,3639399679,US
3639399680,3639399935,HN
-3639399936,3639400447,A2
+3639399936,3639400447,US
3639400448,3639401471,RS
-3639401472,3639401495,PK
-3639401496,3639401511,A2
-3639401512,3639401519,ID
-3639401520,3639401535,A2
-3639401536,3639401541,TZ
+3639401472,3639401541,US
3639401542,3639401542,KE
-3639401543,3639401551,TZ
-3639401552,3639401559,LK
-3639401560,3639401591,A2
-3639401592,3639401599,US
-3639401600,3639401623,A2
-3639401624,3639401631,TZ
-3639401632,3639401647,A2
-3639401648,3639401655,PK
-3639401656,3639401687,A2
-3639401688,3639401727,PK
-3639401728,3639402015,A2
-3639402016,3639402039,PK
-3639402040,3639402047,A2
-3639402048,3639402055,US
-3639402056,3639402071,PK
-3639402072,3639402079,A2
-3639402080,3639402095,PK
-3639402096,3639402111,A2
-3639402112,3639402175,NG
-3639402176,3639402191,PK
-3639402192,3639402199,A2
-3639402200,3639402207,PK
-3639402208,3639402239,A2
+3639401543,3639402239,US
3639402240,3639402495,GH
-3639402496,3639439631,US
-3639439632,3639439639,RO
-3639439640,3639440767,US
-3639440768,3639440895,IN
-3639440896,3639513239,US
+3639402496,3639513239,US
3639513240,3639513243,AE
3639513244,3639533567,US
3639533568,3639537663,CA
@@ -174019,11 +88921,15 @@
3639556016,3639556023,CO
3639556024,3639558143,US
3639558144,3639566335,CA
-3639566336,3639593983,US
+3639566336,3639566847,US
+3639566848,3639567103,HK
+3639567104,3639593983,US
3639593984,3639595007,GB
3639595008,3639607295,US
3639607296,3639611391,CA
-3639611392,3639656447,US
+3639611392,3639639807,US
+3639639808,3639640063,CA
+3639640064,3639656447,US
3639656448,3639660543,CA
3639660544,3639664639,US
3639664640,3639668735,CA
@@ -174031,275 +88937,81 @@
3639672832,3639681023,CL
3639681024,3639684991,US
3639684992,3639685119,SA
-3639685120,3639692032,US
-3639692033,3639692288,GB
-3639692289,3639730175,US
+3639685120,3639692031,US
+3639692032,3639692287,GB
+3639692288,3639704573,US
+3639704574,3639704574,GB
+3639704575,3639730175,US
3639730176,3639734271,CA
-3639734272,3639886215,US
-3639886216,3639886223,SA
-3639886224,3639886591,US
-3639886592,3639886599,SG
-3639886600,3639887639,US
-3639887640,3639887647,AU
-3639887648,3639887783,US
-3639887784,3639887791,SA
-3639887792,3639887823,US
-3639887824,3639887831,AU
-3639887832,3639888415,US
-3639888416,3639888423,ID
-3639888424,3639888447,US
-3639888448,3639888463,ID
-3639888464,3639888631,US
-3639888632,3639888639,AU
-3639888640,3639888767,US
-3639888768,3639888775,AU
-3639888776,3639889175,US
-3639889176,3639889183,AU
-3639889184,3639889207,US
-3639889208,3639889215,SA
-3639889216,3639889279,US
-3639889280,3639889287,AU
-3639889288,3639889407,US
-3639889408,3639889415,AU
-3639889416,3639889423,US
-3639889424,3639889439,SA
-3639889440,3639890359,US
-3639890360,3639890367,SA
-3639890368,3639890447,US
-3639890448,3639890463,AU
-3639890464,3639890479,US
-3639890480,3639890487,BR
-3639890488,3639890783,US
-3639890784,3639890799,AU
-3639890800,3639890823,US
-3639890824,3639890831,AU
-3639890832,3639890907,US
-3639890908,3639890911,AU
-3639890912,3639891055,US
-3639891056,3639891063,AU
-3639891064,3639891551,US
-3639891552,3639891559,AU
-3639891560,3639891711,US
-3639891712,3639891727,LK
-3639891728,3639891919,US
-3639891920,3639891935,LK
-3639891936,3639891959,US
-3639891960,3639891967,AU
-3639891968,3639892359,US
-3639892360,3639892367,ID
-3639892368,3639892375,US
-3639892376,3639892383,ID
-3639892384,3639892415,US
-3639892416,3639892431,MX
-3639892432,3639893503,US
-3639893504,3639893519,ID
-3639893520,3639902207,US
+3639734272,3639737343,US
+3639737344,3639737373,GB
+3639737374,3639737374,FR
+3639737375,3639737599,GB
+3639737600,3639737629,US
+3639737630,3639737630,GB
+3639737631,3639902207,US
3639902208,3639918591,PE
3639918592,3639934975,AR
-3639934976,3640001751,US
-3640001752,3640001759,IL
-3640001760,3640003239,US
-3640003240,3640003247,TR
-3640003248,3640007311,US
-3640007312,3640007319,HK
-3640007320,3640007359,US
-3640007360,3640007367,SO
-3640007368,3640013767,US
-3640013768,3640013775,GI
-3640013776,3640023079,US
-3640023080,3640023087,EG
-3640023088,3640023231,US
-3640023232,3640023247,GI
-3640023248,3640023271,US
-3640023272,3640023279,HK
-3640023280,3640027415,US
-3640027416,3640027423,GB
-3640027424,3640028207,US
-3640028208,3640028215,GB
-3640028216,3640028295,US
-3640028296,3640028303,CA
-3640028304,3640028335,US
-3640028336,3640028343,CA
-3640028344,3640028447,US
-3640028448,3640028455,GB
-3640028456,3640028591,US
-3640028592,3640028599,CA
-3640028600,3640057855,US
+3639934976,3640057855,US
3640057856,3640066047,CA
-3640066048,3640075391,US
-3640075392,3640075407,NL
-3640075408,3640075759,US
-3640075760,3640075775,CA
-3640075776,3640112063,US
-3640112064,3640112079,NL
-3640112080,3640112575,US
-3640112576,3640112591,NL
-3640112592,3640197119,US
+3640066048,3640197119,US
3640197120,3640201215,CA
3640201216,3640205311,US
3640205312,3640209407,BM
3640209408,3640213503,CA
-3640213504,3640312079,US
-3640312080,3640312095,ID
-3640312096,3640312103,GB
-3640312104,3640312159,US
-3640312160,3640312191,ID
-3640312192,3640312319,US
+3640213504,3640287231,US
+3640291328,3640312319,US
3640312320,3640312575,NI
-3640312576,3640312607,NG
-3640312608,3640312831,US
+3640312576,3640312831,US
3640312832,3640313087,TO
-3640313088,3640314879,US
-3640314880,3640315135,A2
-3640315136,3640315391,US
+3640313088,3640315391,US
3640315392,3640315647,TR
3640315648,3640316927,US
3640316928,3640317183,MX
-3640317184,3640317327,US
-3640317328,3640317343,A2
-3640317344,3640317407,US
-3640317408,3640317423,A2
-3640317424,3640317503,US
-3640317504,3640317535,ID
-3640317536,3640317559,US
-3640317560,3640317567,NL
-3640317568,3640318207,US
+3640317184,3640318207,US
3640318208,3640318975,NC
-3640318976,3640319103,GQ
-3640319104,3640319231,US
+3640318976,3640319231,US
3640319232,3640319487,NG
-3640319488,3640344959,US
-3640344960,3640345007,MX
-3640345008,3640345023,US
-3640345024,3640345086,MX
-3640345087,3640345087,US
-3640345088,3640345342,MX
-3640345343,3640345391,US
-3640345392,3640345407,MX
-3640345408,3640345423,US
-3640345424,3640345431,MX
-3640345432,3640345455,US
-3640345456,3640345503,MX
-3640345504,3640345743,US
-3640345744,3640345854,MX
-3640345855,3640346815,US
-3640346816,3640346847,MX
-3640346848,3640346879,US
+3640319488,3640346879,US
3640346880,3640347134,MX
-3640347135,3640347391,US
-3640347392,3640347455,MX
-3640347456,3640347471,US
-3640347472,3640347487,MX
-3640347488,3640347503,US
-3640347504,3640347519,MX
-3640347520,3640347535,US
-3640347536,3640347551,MX
-3640347552,3640347567,US
-3640347568,3640347599,MX
-3640347600,3640347615,US
-3640347616,3640347631,MX
-3640347632,3640347647,US
-3640347648,3640347711,MX
-3640347712,3640347839,US
-3640347840,3640347902,MX
-3640347903,3640360959,US
+3640347135,3640360959,US
3640360960,3640369151,CA
3640369152,3640410111,US
3640410112,3640418303,CA
3640418304,3640430591,US
-3640430592,3640432639,A2
+3640430592,3640432639,DE
3640432640,3640433407,US
-3640433408,3640433663,A2
+3640433408,3640433663,DE
3640433664,3640434943,US
3640436480,3640436735,GH
-3640438784,3640442879,A2
+3640438784,3640442879,DE
3640442880,3640446975,US
-3640449024,3640450047,A2
-3640451072,3640459263,A2
+3640449024,3640450047,DE
+3640451072,3640459263,DE
3640459264,3640557567,US
-3640557568,3640564455,CA
-3640564456,3640564463,US
-3640564464,3640565631,CA
-3640565632,3640565647,US
-3640565648,3640578391,CA
-3640578392,3640578399,GB
-3640578400,3640582143,CA
+3640557568,3640582143,CA
3640582144,3640647679,US
3640647680,3640651775,JP
3640651776,3640655871,US
3640655872,3641020121,DE
3641020122,3641020122,GB
-3641020123,3641029631,DE
-3641029632,3641029695,US
-3641029696,3641029711,DE
-3641029712,3641029759,US
-3641029760,3641061119,DE
-3641061120,3641061199,US
-3641061200,3641061207,DE
-3641061208,3641061279,US
-3641061280,3641061295,DE
-3641061296,3641061375,US
-3641061376,3641078271,DE
-3641078272,3641078327,US
-3641078328,3641078335,DE
-3641078336,3641078351,US
-3641078352,3641078359,DE
-3641078360,3641078367,US
-3641078368,3641078375,DE
-3641078376,3641078495,US
-3641078496,3641078503,DE
-3641078504,3641078511,US
-3641078512,3641078519,DE
-3641078520,3641078527,US
-3641078528,3641085687,DE
-3641085688,3641085695,CZ
-3641085696,3641147519,DE
-3641147520,3641147527,AT
-3641147528,3641150719,DE
-3641150720,3641150759,CN
-3641150760,3641150767,DE
-3641150768,3641151232,CN
-3641151233,3641157951,DE
-3641157952,3641157959,AT
-3641157960,3641158031,DE
-3641158032,3641158055,FR
-3641158056,3641158103,DE
-3641158104,3641158111,FR
-3641158112,3641158127,DE
-3641158128,3641158135,ES
-3641158136,3641158199,DE
-3641158200,3641158207,NL
-3641158208,3641158335,DE
-3641158336,3641158343,ES
-3641158344,3641158423,DE
-3641158424,3641158431,IT
-3641158432,3641158519,DE
-3641158520,3641158527,ES
-3641158528,3641159679,DE
-3641159680,3641159687,ES
-3641159688,3641159727,DE
-3641159728,3641159743,ES
-3641159744,3641159767,DE
-3641159768,3641159775,ES
-3641159776,3641180159,DE
+3641020123,3641150975,DE
+3641150976,3641151232,CN
+3641151233,3641180159,DE
3641180160,3641188351,GB
3641188352,3641192447,TJ
3641192448,3641196543,DE
3641196544,3641200639,SA
3641200640,3641204735,RU
-3641204736,3641206015,NL
-3641206016,3641206271,CN
-3641206272,3641208831,NL
+3641204736,3641208831,NL
3641208832,3641212927,JO
3641212928,3641221119,NO
3641221120,3641229311,PL
3641229312,3641237503,CH
3641237504,3641241599,RU
-3641241600,3641242879,GB
-3641242880,3641243135,ES
-3641243136,3641245695,GB
+3641241600,3641245695,GB
3641245696,3641249791,UA
-3641249792,3641262079,DE
+3641253888,3641262079,DE
3641262080,3641266175,IT
3641266176,3641270271,RU
3641270272,3641278463,DE
@@ -174313,82 +89025,21 @@
3641311232,3641315327,DE
3641315328,3641319423,DK
3641319424,3641323519,RU
-3641323520,3641324543,DE
-3641324544,3641324799,AT
-3641324800,3641331711,DE
+3641323520,3641331711,DE
3641331712,3641335807,ES
3641335808,3641343999,SE
-3641344000,3641352959,GB
-3641352960,3641353151,A2
-3641353152,3641353183,BD
-3641353184,3641353215,A2
-3641353216,3641353231,GB
-3641353232,3641353247,IQ
-3641353248,3641353703,A2
-3641353704,3641353711,GB
-3641353712,3641353727,A2
-3641353728,3641353759,NG
-3641353760,3641353775,GB
-3641353776,3641353807,NG
-3641353808,3641353823,GB
-3641353824,3641353839,A2
-3641353840,3641353855,GB
-3641353856,3641353879,NG
-3641353880,3641353983,A2
-3641353984,3641354239,AF
-3641354240,3641354255,A2
-3641354256,3641354272,GB
-3641354273,3641354303,A2
-3641354304,3641354311,US
-3641354312,3641354319,GB
-3641354320,3641354327,A2
-3641354328,3641354335,GB
-3641354336,3641354339,A2
-3641354340,3641354343,GB
-3641354344,3641354351,A2
-3641354352,3641354359,GB
-3641354360,3641354431,A2
-3641354432,3641354751,GB
-3641354752,3641355263,NG
-3641355264,3641355519,AO
-3641355520,3641355583,A2
-3641355584,3641355599,GB
-3641355600,3641355775,A2
-3641355776,3641356031,LB
-3641356032,3641356191,A2
-3641356192,3641356207,NG
-3641356208,3641356287,A2
-3641356288,3641356351,GB
-3641356352,3641356415,NG
-3641356416,3641356535,A2
+3641344000,3641356535,GB
3641356536,3641356543,CM
-3641356544,3641357855,A2
-3641357856,3641357879,GB
-3641357880,3641357887,A2
-3641357888,3641357927,GB
-3641357928,3641357983,A2
+3641356544,3641357983,GB
3641357984,3641358015,SL
-3641358016,3641358079,A2
-3641358080,3641359359,GB
-3641359360,3641359615,IQ
-3641359616,3641359639,GB
-3641359640,3641359871,A2
-3641359872,3641360383,GB
+3641358016,3641360383,GB
3641360384,3641368575,RO
3641368576,3641372671,GB
3641372672,3641376767,BG
3641376768,3641380863,IT
3641380864,3641384959,IR
3641384960,3641389055,CH
-3641389056,3641391426,DE
-3641391427,3641391439,CH
-3641391440,3641391583,DE
-3641391584,3641391591,AT
-3641391592,3641391807,DE
-3641391808,3641391823,AT
-3641391824,3641392575,DE
-3641392576,3641392583,RO
-3641392584,3641393151,DE
+3641389056,3641393151,DE
3641393152,3641397247,KZ
3641397248,3641401343,IT
3641401344,3641409535,ES
@@ -174410,10 +89061,8 @@
3641479168,3641483263,GB
3641483264,3641491455,IT
3641491456,3641493503,UA
-3641493504,3641494015,RU
-3641494016,3641495551,UA
-3641495552,3641496063,RU
-3641496064,3641499647,UA
+3641493504,3641494015,NL
+3641494016,3641499647,UA
3641499648,3641503743,SA
3641503744,3641507839,RU
3641507840,3641516031,NO
@@ -174426,10 +89075,7 @@
3641540608,3641548799,GB
3641548800,3641552895,DE
3641552896,3641556991,AT
-3641556992,3641559103,DE
-3641559104,3641559135,NL
-3641559136,3641560959,DE
-3641560960,3641561087,NL
+3641556992,3641561087,DE
3641561088,3641565183,RU
3641565184,3641573375,SE
3641573376,3641577471,NO
@@ -174440,9 +89086,7 @@
3641593856,3641597951,NG
3641597952,3641602047,AZ
3641602048,3641606143,DE
-3641606144,3641607695,GB
-3641607696,3641607711,FR
-3641607712,3641610239,GB
+3641606144,3641610239,GB
3641610240,3641618431,DE
3641618432,3641622527,GB
3641622528,3641626623,RU
@@ -174456,20 +89100,15 @@
3641655296,3641659391,GB
3641659392,3641663487,FR
3641663488,3641667583,MT
-3641667584,3641668607,GB
-3641668608,3641670655,ZW
-3641670656,3641670783,SO
-3641670784,3641670791,NG
-3641670792,3641670911,GB
+3641667584,3641669119,GB
+3641669120,3641670271,ZW
+3641670272,3641670911,GB
3641670912,3641671167,LS
3641671168,3641671423,ZW
3641671424,3641671679,GB
3641671680,3641679871,RU
-3641679872,3641680127,DK
-3641680128,3641681151,GB
3641681152,3641681407,SE
3641681408,3641681663,FR
-3641681664,3641683967,FR
3641683968,3641688063,KZ
3641688064,3641692159,RU
3641692160,3641696255,IT
@@ -174493,10 +89132,7 @@
3641769984,3641774079,NO
3641774080,3641778175,DE
3641778176,3641782271,PL
-3641782272,3641782607,GB
-3641782608,3641782783,BG
-3641782784,3641784575,GB
-3641784576,3641786367,BG
+3641782272,3641786367,GB
3641786368,3641790463,SE
3641790464,3641794559,LT
3641794560,3641798655,RS
@@ -174504,20 +89140,7 @@
3641802752,3641806847,NL
3641806848,3641807871,TR
3641807872,3641808895,NL
-3641808896,3641809663,TR
-3641809664,3641809919,NL
-3641809920,3641810315,TR
-3641810316,3641810431,CY
-3641810432,3641810439,NL
-3641810440,3641810447,US
-3641810448,3641810463,NL
-3641810464,3641810479,US
-3641810480,3641810559,TR
-3641810560,3641810623,US
-3641810624,3641810631,TR
-3641810632,3641810642,US
-3641810643,3641810687,TR
-3641810688,3641810943,CY
+3641808896,3641810943,TR
3641810944,3641819135,RU
3641819136,3641823231,DE
3641823232,3641827327,NO
@@ -174531,21 +89154,7 @@
3641860096,3641868287,IT
3641868288,3641876479,RU
3641876480,3641880575,ES
-3641880576,3641881343,DE
-3641881344,3641881359,US
-3641881360,3641881391,DE
-3641881392,3641881395,CH
-3641881396,3641881399,DE
-3641881400,3641881407,CH
-3641881408,3641881423,DE
-3641881424,3641881439,US
-3641881440,3641881447,DE
-3641881448,3641881455,CH
-3641881456,3641881567,DE
-3641881568,3641881583,CH
-3641881584,3641882727,DE
-3641882728,3641882735,CH
-3641882736,3641884671,DE
+3641880576,3641884671,DE
3641884672,3641888767,NO
3641888768,3641892863,IT
3641892864,3641896959,ES
@@ -174557,17 +89166,14 @@
3641917440,3641925631,GR
3641925632,3641933823,RU
3641933824,3641937919,GB
-3641937920,3641941759,IT
-3641941760,3641942015,EU
+3641937920,3641942015,IT
3641942016,3641950207,DE
3641950208,3641954303,FR
3641954304,3641958399,MD
-3641958400,3641960699,BE
-3641960700,3641960703,NL
+3641958400,3641960447,BE
+3641960448,3641960703,NL
3641960704,3641961727,BE
-3641961728,3641961743,NL
-3641961744,3641961791,BE
-3641961792,3641961799,US
+3641961728,3641961799,NL
3641961800,3641962495,BE
3641962496,3641966591,GB
3641966592,3641970687,IT
@@ -174582,103 +89188,28 @@
3642015744,3642019839,CH
3642019840,3642023935,SY
3642023936,3642028031,EG
-3642028032,3642028287,A2
-3642028288,3642028543,NG
-3642028544,3642028544,A2
-3642028545,3642028799,NG
-3642028800,3642028800,A2
+3642028032,3642028800,GB
3642028801,3642028863,SO
-3642028864,3642028928,A2
-3642028929,3642029055,NG
-3642029056,3642029567,A2
-3642029568,3642029823,GB
-3642029824,3642030591,A2
-3642030592,3642030847,GN
-3642030848,3642031359,A2
-3642031360,3642031615,GB
-3642031616,3642031616,A2
-3642031617,3642031743,SL
-3642031744,3642031871,A2
-3642031872,3642032127,GB
+3642028864,3642032127,GB
3642032128,3642036223,PS
3642036224,3642040319,HU
3642040320,3642048511,BY
-3642048512,3642053439,A2
-3642053440,3642053631,TZ
-3642053632,3642056703,A2
+3642048512,3642056703,GB
3642056704,3642060799,RU
3642060800,3642064895,KE
-3642064896,3642068991,SE
+3642064896,3642068991,IT
3642068992,3642073087,AL
3642073088,3642077183,LV
-3642077184,3642078999,BE
-3642079000,3642079007,NL
-3642079008,3642081271,BE
-3642081272,3642081278,US
-3642081279,3642085375,NL
+3642077184,3642085375,NL
3642085376,3642089471,RU
3642089472,3642093567,SE
3642093568,3642097663,NL
3642097664,3642101759,GB
3642101760,3642109951,NO
-3642109952,3642110463,BE
-3642110464,3642110991,NL
-3642110992,3642111023,BE
-3642111024,3642111103,NL
-3642111104,3642111486,BE
-3642111487,3642111791,NL
-3642111792,3642111839,BE
-3642111840,3642111887,NL
-3642111888,3642111903,BE
-3642111904,3642111919,NL
-3642111920,3642111935,BE
-3642111936,3642111951,NL
-3642111952,3642111983,BE
-3642111984,3642111999,NL
-3642112000,3642112031,BE
-3642112032,3642112047,NL
-3642112048,3642112063,BE
-3642112064,3642112143,NL
-3642112144,3642112159,BE
-3642112160,3642112207,NL
-3642112208,3642112239,BE
-3642112240,3642112351,NL
-3642112352,3642112383,BE
-3642112384,3642112415,NL
-3642112416,3642112447,BE
-3642112448,3642112527,NL
-3642112528,3642112543,BE
-3642112544,3642112559,NL
-3642112560,3642112575,BE
-3642112576,3642112591,NL
-3642112592,3642112607,BE
-3642112608,3642112623,NL
-3642112624,3642112655,BE
-3642112656,3642112671,NL
-3642112672,3642112687,BE
-3642112688,3642112719,NL
-3642112720,3642112751,BE
-3642112752,3642112767,NL
-3642112768,3642112831,BE
-3642112832,3642113023,NL
-3642113024,3642113215,BE
-3642113216,3642113279,NL
-3642113280,3642113311,BE
-3642113312,3642113791,NL
-3642113792,3642113823,BE
-3642113824,3642113855,NL
-3642113856,3642113919,BE
-3642113920,3642114591,NL
-3642114592,3642114815,NO
-3642114816,3642114831,NL
-3642114832,3642115095,NO
-3642115096,3642115103,NL
-3642115104,3642116095,NO
+3642109952,3642114047,BE
+3642114048,3642116095,NO
3642116096,3642117119,NL
-3642117120,3642117375,NO
-3642117376,3642117631,NL
-3642117632,3642117887,NO
-3642117888,3642118143,NL
+3642117120,3642118143,NO
3642118144,3642122239,GB
3642122240,3642126335,ES
3642126336,3642130431,IL
@@ -174688,27 +89219,12 @@
3642142720,3642146815,MT
3642146816,3642150911,DE
3642150912,3642163199,IT
-3642163200,3642164046,NL
-3642164047,3642164048,AF
-3642164049,3642167295,NL
+3642163200,3642167295,NL
3642167296,3642171391,RU
3642171392,3642175487,JO
3642175488,3642179583,DE
3642179584,3642187775,RU
-3642187776,3642190591,DK
-3642190592,3642190623,NO
-3642190624,3642191423,DK
-3642191424,3642191455,ES
-3642191456,3642191487,TR
-3642191488,3642191519,CH
-3642191520,3642191551,CY
-3642191552,3642191583,ES
-3642191584,3642191615,US
-3642191616,3642191647,ZA
-3642191648,3642191679,AU
-3642191680,3642191711,TH
-3642191712,3642191743,BR
-3642191744,3642191871,DK
+3642187776,3642191871,DK
3642191872,3642195967,BY
3642195968,3642204159,RU
3642204160,3642208255,GB
@@ -174726,28 +89242,21 @@
3642253312,3642257407,FI
3642257408,3642261503,RU
3642261504,3642265599,BA
-3642265600,3642265855,AE
-3642265856,3642269695,IR
+3642265600,3642267647,AE
+3642267648,3642269695,IR
3642269696,3642273791,UA
3642273792,3642277887,RU
3642277888,3642290175,DE
3642290176,3642294271,AL
3642294272,3642298367,GB
3642298368,3642302463,AZ
-3642302464,3642302759,SE
-3642302760,3642302764,GB
-3642302765,3642302975,SE
-3642302976,3642303007,GB
-3642303008,3642304031,SE
-3642304032,3642304036,GB
-3642304037,3642306559,SE
+3642302464,3642306559,SE
3642306560,3642310655,IR
3642310656,3642314751,DE
3642314752,3642318847,RU
3642318848,3642322943,FI
3642322944,3642327039,AT
-3642327040,3642327295,PL
-3642327296,3642331135,DE
+3642327040,3642331135,DE
3642331136,3642335231,RU
3642335232,3642339327,DE
3642339328,3642343423,FR
@@ -174768,25 +89277,11 @@
3642415104,3642417151,GB
3642417152,3642419199,DE
3642419200,3642421247,GB
-3642421248,3642422783,A2
-3642422784,3642423039,US
-3642423040,3642425087,A2
-3642425088,3642425343,US
-3642425344,3642429439,DE
+3642421248,3642429439,DE
3642429440,3642433535,GB
3642433536,3642435583,CY
3642435584,3642436607,RU
-3642436608,3642437119,CY
-3642437120,3642437631,GB
-3642437632,3642439423,CY
-3642439424,3642439459,RU
-3642439460,3642439463,CY
-3642439464,3642439471,RU
-3642439472,3642439483,CY
-3642439484,3642439495,RU
-3642439496,3642439551,CY
-3642439552,3642439567,RU
-3642439568,3642441727,CY
+3642436608,3642441727,CY
3642441728,3642449919,IT
3642449920,3642454015,CH
3642454016,3642458111,IT
@@ -174799,9 +89294,8 @@
3642486784,3642490879,GB
3642490880,3642494975,IM
3642494976,3642499071,GB
-3642499072,3642499715,SE
-3642499716,3642499716,EU
-3642499717,3642503167,SE
+3642499072,3642501119,SE
+3642501120,3642503167,LU
3642503168,3642507263,LV
3642507264,3642509311,FR
3642509312,3642511359,RU
@@ -174810,186 +89304,17 @@
3642519552,3642523647,IT
3642523648,3642527743,GB
3642527744,3642531839,PL
-3642531840,3642532351,DK
-3642532352,3642532607,GB
+3642531840,3642532607,DK
3642532608,3642532863,US
3642532864,3642535935,DK
3642535936,3642540031,IS
-3642540032,3642540063,SE
-3642540064,3642540079,NO
-3642540080,3642540135,SE
-3642540136,3642540143,NO
-3642540144,3642544127,SE
+3642540032,3642544127,SE
3642544128,3642552319,RU
-3642552320,3642552639,UA
-3642552640,3642552655,EE
-3642552656,3642552663,HU
-3642552664,3642552665,EE
-3642552666,3642552671,UA
-3642552672,3642552687,SE
-3642552688,3642552831,UA
-3642552832,3642552847,EE
-3642552848,3642553087,UA
-3642553088,3642553101,LV
-3642553102,3642553107,UA
-3642553108,3642553161,LV
-3642553162,3642553163,UA
-3642553164,3642553165,LV
-3642553166,3642553167,UA
-3642553168,3642553175,LV
-3642553176,3642553183,UA
-3642553184,3642553223,LV
-3642553224,3642553247,UA
-3642553248,3642553285,LV
-3642553286,3642553289,UA
-3642553290,3642553303,LV
-3642553304,3642553311,UA
-3642553312,3642553343,LV
-3642553344,3642553359,RU
-3642553360,3642553367,UA
-3642553368,3642553371,RU
-3642553372,3642553379,UA
-3642553380,3642553383,RU
-3642553384,3642553407,UA
-3642553408,3642553411,RU
-3642553412,3642553415,UA
-3642553416,3642553423,RU
-3642553424,3642553431,UA
-3642553432,3642553455,RU
-3642553456,3642553503,UA
-3642553504,3642553519,RU
-3642553520,3642553523,UA
-3642553524,3642553531,RU
-3642553532,3642553547,UA
-3642553548,3642553551,RU
-3642553552,3642553571,UA
-3642553572,3642553575,RU
-3642553576,3642553579,UA
-3642553580,3642553589,RU
-3642553590,3642553855,UA
-3642553856,3642553923,RU
-3642553924,3642553935,UA
-3642553936,3642553959,RU
-3642553960,3642553967,UA
-3642553968,3642553983,RU
-3642553984,3642554111,UA
-3642554112,3642554121,RU
-3642554122,3642554127,UA
-3642554128,3642554159,RU
-3642554160,3642554191,UA
-3642554192,3642554193,RU
-3642554194,3642554195,UA
-3642554196,3642554199,RU
-3642554200,3642554205,UA
-3642554206,3642554207,RU
-3642554208,3642554367,UA
-3642554368,3642554377,LT
-3642554378,3642554379,FI
-3642554380,3642554383,LT
-3642554384,3642554391,UA
-3642554392,3642554395,LT
-3642554396,3642554415,UA
-3642554416,3642554423,LT
-3642554424,3642554427,UA
-3642554428,3642554431,LT
-3642554432,3642554559,UA
-3642554560,3642554575,LT
-3642554576,3642554623,UA
-3642554624,3642554671,LV
-3642554672,3642554679,UA
-3642554680,3642554735,LV
-3642554736,3642554783,UA
-3642554784,3642554787,LV
-3642554788,3642554791,UA
-3642554792,3642554795,LV
-3642554796,3642554807,UA
-3642554808,3642554811,LV
-3642554812,3642554815,UA
-3642554816,3642554831,LV
-3642554832,3642554851,UA
-3642554852,3642554879,LV
-3642554880,3642554911,DE
-3642554912,3642554919,NL
-3642554920,3642554931,DE
-3642554932,3642554935,UA
-3642554936,3642554943,EE
-3642554944,3642554951,UA
-3642554952,3642554967,DE
-3642554968,3642554971,UA
-3642554972,3642554975,DE
-3642554976,3642554977,CZ
-3642554978,3642554979,FR
-3642554980,3642554983,BE
-3642554984,3642554987,EE
-3642554988,3642554989,FR
-3642554990,3642554991,UA
-3642554992,3642555007,DE
-3642555008,3642555015,UA
-3642555016,3642555017,NL
-3642555018,3642555023,DE
-3642555024,3642555039,NL
-3642555040,3642555045,DE
-3642555046,3642555047,UA
-3642555048,3642555051,DE
-3642555052,3642555055,UA
-3642555056,3642555067,DE
-3642555068,3642555069,NL
-3642555070,3642555071,DE
-3642555072,3642555087,GE
-3642555088,3642555103,DE
-3642555104,3642555111,CZ
-3642555112,3642555119,UA
-3642555120,3642555135,DE
-3642555136,3642555143,LT
-3642555144,3642555151,UA
-3642555152,3642555153,LT
-3642555154,3642555199,UA
-3642555200,3642555215,LT
-3642555216,3642555227,UA
-3642555228,3642555289,LT
-3642555290,3642555311,UA
-3642555312,3642555359,LT
-3642555360,3642555375,UA
-3642555376,3642555391,LT
-3642555392,3642555423,PL
-3642555424,3642555427,EE
-3642555428,3642555431,PL
-3642555432,3642555439,EE
-3642555440,3642555445,PL
-3642555446,3642555455,UA
-3642555456,3642555471,PL
-3642555472,3642555483,UA
-3642555484,3642555507,PL
-3642555508,3642555519,UA
-3642555520,3642555583,PL
-3642555584,3642555647,UA
-3642555648,3642555683,SE
-3642555684,3642555685,GB
-3642555686,3642555687,EE
-3642555688,3642555691,UA
-3642555692,3642555695,SE
-3642555696,3642555703,UA
-3642555704,3642555707,FI
-3642555708,3642555711,SE
-3642555712,3642555727,RU
-3642555728,3642555735,SE
-3642555736,3642555743,GB
-3642555744,3642555759,SE
-3642555760,3642555783,UA
-3642555784,3642555787,GB
-3642555788,3642555789,UA
-3642555790,3642555791,SE
-3642555792,3642555795,CZ
-3642555796,3642555807,UA
-3642555808,3642555827,SE
-3642555828,3642555839,UA
-3642555840,3642555903,EE
-3642555904,3642556159,UA
-3642556160,3642556415,LV
+3642552320,3642554198,UA
+3642554199,3642554199,RU
+3642554200,3642556415,UA
3642556416,3642560511,CZ
-3642560512,3642561535,KG
-3642561536,3642561791,US
-3642561792,3642564607,KG
+3642560512,3642564607,KG
3642564608,3642568703,DE
3642568704,3642572799,RU
3642572800,3642576895,IT
@@ -175004,10 +89329,7 @@
3642613760,3642617855,FI
3642617856,3642621951,JO
3642621952,3642626047,IT
-3642626048,3642626303,A2
-3642626304,3642628607,BE
-3642628608,3642628863,A2
-3642628864,3642630143,BE
+3642626048,3642630143,BE
3642630144,3642634239,DK
3642634240,3642638335,DE
3642638336,3642642431,CZ
@@ -175021,9 +89343,7 @@
3642675200,3642679295,BG
3642679296,3642683391,DE
3642683392,3642687487,RU
-3642687488,3642691071,GB
-3642691072,3642691327,LU
-3642691328,3642691583,GB
+3642687488,3642691583,GB
3642691584,3642695679,DE
3642695680,3642699775,SK
3642699776,3642703871,CZ
@@ -175036,9 +89356,7 @@
3642736640,3642740735,CZ
3642740736,3642744831,DE
3642744832,3642753023,TR
-3642753024,3642858217,GB
-3642858218,3642858218,EU
-3642858219,3643801599,GB
+3642753024,3643801599,GB
3643801600,3644063743,DE
3644063744,3644325887,EG
3644325888,3644588031,IT
@@ -175050,9 +89368,7 @@
3644854272,3644858367,AZ
3644858368,3644862463,FI
3644862464,3644866559,FR
-3644866560,3644871167,DE
-3644871168,3644871423,AT
-3644871424,3644874751,DE
+3644866560,3644874751,DE
3644874752,3644878847,ML
3644878848,3644882943,GB
3644882944,3644887039,RU
@@ -175061,43 +89377,27 @@
3644895232,3644899327,FI
3644899328,3644903423,IT
3644903424,3644907519,TR
-3644907520,3644908983,GB
-3644908984,3644908991,US
-3644908992,3644909855,GB
-3644909856,3644909859,IS
-3644909860,3644911615,GB
+3644907520,3644911615,GB
3644911616,3644915711,BE
3644915712,3644919807,RU
3644919808,3644923903,DE
-3644923904,3644924159,IL
-3644924160,3644924671,GB
-3644924672,3644924927,IL
+3644923904,3644924927,IL
3644924928,3644925183,US
-3644925184,3644925439,IL
-3644925440,3644925695,US
-3644925696,3644925951,IL
-3644925952,3644927231,US
-3644927232,3644927743,IL
-3644927744,3644927999,US
+3644925184,3644926463,IL
+3644926464,3644926719,US
+3644926720,3644927999,IL
3644928000,3644932095,GI
3644932096,3644936191,IT
3644936192,3644940287,RU
3644940288,3644948479,HU
3644948480,3644952575,DE
3644952576,3644960767,GB
-3644960768,3644961311,DE
-3644961312,3644961343,TR
-3644961344,3644961791,DE
-3644961792,3644964351,TR
-3644964352,3644964383,DE
-3644964384,3644964863,TR
+3644960768,3644964863,TR
3644964864,3644968959,RS
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
@@ -175107,8 +89407,7 @@
3645018112,3645022207,RU
3645022208,3645023743,CZ
3645023744,3645023999,SK
-3645024000,3645030143,CZ
-3645030144,3645030399,SK
+3645024000,3645030399,CZ
3645030400,3645038591,IR
3645038592,3645046783,PS
3645046784,3645050879,RU
@@ -175125,13 +89424,7 @@
3645091840,3645095935,RU
3645095936,3645104127,PL
3645104128,3645112319,NL
-3645112320,3645113919,DE
-3645113920,3645113927,UA
-3645113928,3645113935,DE
-3645113936,3645113943,US
-3645113944,3645114079,DE
-3645114080,3645114095,IL
-3645114096,3645116415,DE
+3645112320,3645116415,DE
3645116416,3645120511,GB
3645120512,3645124607,SE
3645124608,3645128703,NL
@@ -175139,40 +89432,18 @@
3645132800,3645136895,HR
3645136896,3645145087,NO
3645145088,3645149183,GB
-3645149184,3645149487,DE
-3645149488,3645149495,GB
-3645149496,3645150615,DE
-3645150616,3645150639,US
-3645150640,3645150975,DE
-3645150976,3645151231,US
-3645151232,3645161471,DE
-3645161472,3645165567,AT
+3645149184,3645161471,DE
+3645161472,3645163519,AT
+3645163520,3645164031,GB
+3645164032,3645165567,AT
3645165568,3645169663,TR
3645169664,3645173759,CH
3645173760,3645177855,GB
3645177856,3645181951,GR
-3645181952,3645182703,FR
-3645182704,3645182719,GB
-3645182720,3645183327,FR
-3645183328,3645183359,GB
-3645183360,3645183375,FR
+3645181952,3645183375,FR
3645183376,3645183383,SA
-3645183384,3645183439,FR
-3645183440,3645183455,US
-3645183456,3645183743,FR
-3645183744,3645183871,GB
-3645183872,3645183895,FR
-3645183896,3645183899,GB
-3645183900,3645183903,FR
-3645183904,3645183935,IE
-3645183936,3645184255,FR
-3645184256,3645184447,GB
-3645184448,3645184471,FR
-3645184472,3645184511,GB
-3645184512,3645184863,FR
-3645184864,3645184895,GB
-3645184896,3645185663,FR
-3645185664,3645185775,GB
+3645183384,3645185759,FR
+3645185760,3645185775,GB
3645185776,3645186047,FR
3645186048,3645190143,GB
3645190144,3645194239,FI
@@ -175193,22 +89464,14 @@
3645259776,3645263871,PT
3645263872,3645267967,FR
3645267968,3645276159,RU
-3645276160,3645278423,DE
-3645278424,3645278431,PT
-3645278432,3645280255,DE
-3645280256,3645281279,IT
-3645281280,3645281535,DE
-3645281536,3645281791,IT
-3645281792,3645281919,HU
-3645281920,3645284351,IT
+3645276160,3645280255,DE
+3645280256,3645284351,IT
3645284352,3645288447,DE
-3645288448,3645292543,FR
-3645292544,3645295103,DE
-3645295104,3645295359,NL
-3645295360,3645296639,DE
-3645296640,3645297407,NL
-3645297408,3645297663,EU
-3645297664,3645300735,NL
+3645288448,3645288895,FR
+3645288896,3645288959,LU
+3645288960,3645292543,FR
+3645292544,3645296639,DE
+3645296640,3645300735,NL
3645300736,3645304831,BE
3645304832,3645308927,ES
3645308928,3645313023,DK
@@ -175217,28 +89480,8 @@
3645321216,3645325311,BA
3645325312,3645329407,IT
3645329408,3645333503,CH
-3645333504,3645334039,DE
-3645334040,3645334271,EU
-3645334272,3645336927,DE
-3645336928,3645336935,EU
-3645336936,3645336991,DE
-3645336992,3645337007,EU
-3645337008,3645337023,DE
-3645337024,3645337087,EU
-3645337088,3645337599,DE
-3645337600,3645337631,FR
-3645337632,3645337663,BE
-3645337664,3645339295,FR
-3645339296,3645339359,BE
-3645339360,3645339903,FR
-3645339904,3645339967,BE
-3645339968,3645340415,FR
-3645340416,3645340447,NL
-3645340448,3645340543,FR
-3645340544,3645340927,BE
-3645340928,3645341183,FR
-3645341184,3645341439,BE
-3645341440,3645341695,FR
+3645334272,3645335039,DE
+3645337600,3645341695,FR
3645341696,3645345791,RU
3645345792,3645349887,FI
3645349888,3645353983,RU
@@ -175255,9 +89498,7 @@
3645390848,3645399039,SI
3645399040,3645403135,IT
3645403136,3645407231,GB
-3645407232,3645408255,DE
-3645408256,3645408319,CH
-3645408320,3645411327,DE
+3645407232,3645411327,DE
3645411328,3645415423,RU
3645415424,3645423615,GB
3645423616,3645431807,DE
@@ -175266,10 +89507,7 @@
3645440000,3645444095,SE
3645444096,3645448191,SK
3645448192,3645454335,DE
-3645454336,3645455359,RU
-3645455360,3645455615,DE
-3645455616,3645456127,RU
-3645456128,3645456383,DE
+3645454336,3645456383,RU
3645456384,3645460479,GB
3645460480,3645464575,UA
3645464576,3645468671,SE
@@ -175281,15 +89519,7 @@
3645489152,3645493247,RU
3645493248,3645501439,IT
3645501440,3645505535,PL
-3645505536,3645506559,DE
-3645506560,3645506815,AT
-3645506816,3645507583,DE
-3645507584,3645507587,AT
-3645507588,3645507591,DE
-3645507592,3645507595,AT
-3645507596,3645507599,DE
-3645507600,3645507607,AT
-3645507608,3645509631,DE
+3645505536,3645509631,DE
3645509632,3645511679,NL
3645511680,3645513727,TR
3645513728,3645517823,RU
@@ -175302,39 +89532,17 @@
3645546496,3645550591,RU
3645550592,3645558783,DE
3645558784,3645562879,DK
-3645562880,3645563135,ZW
+3645562880,3645563135,GB
3645563136,3645564671,LS
-3645564672,3645564927,ZW
-3645564928,3645565055,SO
-3645565056,3645565183,GB
-3645565184,3645565439,ZW
-3645565440,3645565695,GB
-3645565696,3645566975,ZW
+3645564672,3645565951,GB
+3645565952,3645566975,ZW
3645566976,3645571071,RU
3645571072,3645575167,IE
3645575168,3645579263,CH
3645579264,3645583359,NL
3645583360,3645587455,PL
-3645587456,3645594711,SK
-3645594712,3645594719,SR
-3645594720,3645594799,SK
-3645594800,3645594815,SR
-3645594816,3645594863,SK
-3645594864,3645594871,SR
-3645594872,3645595647,SK
-3645595648,3645597751,SE
-3645597752,3645597759,GB
-3645597760,3645601471,SE
-3645601472,3645601487,NO
-3645601488,3645601503,SE
-3645601504,3645601507,GB
-3645601508,3645601759,SE
-3645601760,3645601775,FR
-3645601776,3645601779,GB
-3645601780,3645601783,US
-3645601784,3645601799,SE
-3645601800,3645601803,GB
-3645601804,3645603839,SE
+3645587456,3645595647,SK
+3645595648,3645603839,SE
3645603840,3645612031,BG
3645612032,3645616127,GB
3645616128,3645620223,AT
@@ -175349,21 +89557,35 @@
3645657088,3645661183,SE
3645661184,3645665279,DE
3645665280,3645669375,PL
-3645669376,3645669631,ES
-3645669632,3645669855,FR
-3645669856,3645670399,ES
-3645670400,3645670527,FR
+3645669376,3645669599,ES
+3645669600,3645669887,PT
+3645669888,3645670399,ES
+3645670400,3645670427,PT
+3645670428,3645670429,ES
+3645670430,3645670430,PT
+3645670431,3645670433,ES
+3645670434,3645670436,PT
+3645670437,3645670441,ES
+3645670442,3645670456,PT
+3645670457,3645670460,ES
+3645670461,3645670508,PT
+3645670509,3645670509,ES
+3645670510,3645670527,PT
3645670528,3645670655,ES
-3645670656,3645670911,FR
+3645670656,3645670911,PT
3645670912,3645673471,ES
-3645673472,3645673535,FR
-3645673536,3645675263,ES
-3645675264,3645675519,PT
+3645673472,3645673535,PT
+3645673536,3645674239,ES
+3645674240,3645674271,PT
+3645674272,3645675007,ES
+3645675008,3645675519,PT
3645675520,3645675759,ES
-3645675760,3645675775,FR
+3645675760,3645675775,PT
3645675776,3645676015,ES
-3645676016,3645676031,FR
-3645676032,3645677567,ES
+3645676016,3645676031,PT
+3645676032,3645676543,ES
+3645676544,3645676799,PT
+3645676800,3645677567,ES
3645677568,3645681663,AT
3645681664,3645685759,RU
3645685760,3645689855,UA
@@ -175383,879 +89605,15 @@
3645751296,3645755391,FI
3645755392,3645759487,UA
3645759488,3645763583,FR
-3645763584,3645763585,DE
-3645763586,3645763587,IT
-3645763588,3645763588,DE
-3645763589,3645763589,IE
-3645763590,3645763590,ES
-3645763591,3645763591,BE
-3645763592,3645763593,DE
-3645763594,3645763594,CH
-3645763595,3645763595,IT
-3645763596,3645763597,DE
-3645763598,3645763598,NL
-3645763599,3645763600,DE
-3645763601,3645763601,GR
-3645763602,3645763603,FR
-3645763604,3645763609,DE
-3645763610,3645763610,PL
-3645763611,3645763612,DE
-3645763613,3645763613,HU
-3645763614,3645763614,CH
-3645763615,3645763615,ES
-3645763616,3645763616,FR
-3645763617,3645763617,DE
-3645763618,3645763618,ES
-3645763619,3645763619,DE
-3645763620,3645763620,FR
-3645763621,3645763621,CH
-3645763622,3645763622,GB
-3645763623,3645763623,FR
-3645763624,3645763624,DE
-3645763625,3645763625,FR
-3645763626,3645763626,NL
-3645763627,3645763627,AT
-3645763628,3645763629,DE
-3645763630,3645763631,NL
-3645763632,3645763633,GB
-3645763634,3645763634,NL
-3645763635,3645763635,DE
-3645763636,3645763636,AT
-3645763637,3645763637,FR
-3645763638,3645763638,NL
-3645763639,3645763639,DE
-3645763640,3645763640,HU
-3645763641,3645763641,IT
-3645763642,3645763642,GB
-3645763643,3645763645,DE
-3645763646,3645763647,ES
-3645763648,3645763648,DE
-3645763649,3645763649,IL
-3645763650,3645763650,DE
-3645763651,3645763651,NL
-3645763652,3645763653,DE
-3645763654,3645763654,ES
-3645763655,3645763660,DE
-3645763661,3645763662,FR
-3645763663,3645763663,HU
-3645763664,3645763665,DE
-3645763666,3645763666,NL
-3645763667,3645763670,DE
-3645763671,3645763671,FR
-3645763672,3645763672,DE
-3645763673,3645763673,BE
-3645763674,3645763676,DE
-3645763677,3645763678,HU
-3645763679,3645763679,IT
-3645763680,3645763680,DE
-3645763681,3645763681,CH
-3645763682,3645763682,DE
-3645763683,3645763683,NO
-3645763684,3645763684,CH
-3645763685,3645763685,NL
-3645763686,3645763686,DE
-3645763687,3645763687,ES
-3645763688,3645763690,NL
-3645763691,3645763691,CH
-3645763692,3645763692,DE
-3645763693,3645763693,NL
-3645763694,3645763696,DE
-3645763697,3645763697,NL
-3645763698,3645763698,DE
-3645763699,3645763699,BE
-3645763700,3645763700,NL
-3645763701,3645763701,DE
-3645763702,3645763702,IT
-3645763703,3645763703,CH
-3645763704,3645763705,DE
-3645763706,3645763706,GB
-3645763707,3645763707,NL
-3645763708,3645763708,GR
-3645763709,3645763709,NL
-3645763710,3645763710,GB
-3645763711,3645763713,NL
-3645763714,3645763714,DE
-3645763715,3645763715,NL
-3645763716,3645763716,DE
-3645763717,3645763717,NL
-3645763718,3645763719,DE
-3645763720,3645763720,IT
-3645763721,3645763721,DE
-3645763722,3645763722,GR
-3645763723,3645763723,NL
-3645763724,3645763726,IT
-3645763727,3645763727,NL
-3645763728,3645763728,GR
-3645763729,3645763730,IT
-3645763731,3645763732,DE
-3645763733,3645763733,FR
-3645763734,3645763734,DE
-3645763735,3645763735,GB
-3645763736,3645763736,FR
-3645763737,3645763737,DE
-3645763738,3645763738,CH
-3645763739,3645763741,ES
-3645763742,3645763742,DE
-3645763743,3645763743,IT
-3645763744,3645763744,DE
-3645763745,3645763745,FR
-3645763746,3645763746,DE
-3645763747,3645763752,NL
-3645763753,3645763753,ES
-3645763754,3645763755,NL
-3645763756,3645763756,DE
-3645763757,3645763757,BE
-3645763758,3645763758,FR
-3645763759,3645763760,NL
-3645763761,3645763761,SE
-3645763762,3645763762,ES
-3645763763,3645763764,NL
-3645763765,3645763765,DE
-3645763766,3645763766,IL
-3645763767,3645763768,NL
-3645763769,3645763769,FR
-3645763770,3645763770,NL
-3645763771,3645763771,GB
-3645763772,3645763772,CH
-3645763773,3645763773,DE
-3645763774,3645763774,NL
-3645763775,3645763775,DE
-3645763776,3645763776,NL
-3645763777,3645763777,BE
-3645763778,3645763781,DE
-3645763782,3645763782,NL
-3645763783,3645763783,DE
-3645763784,3645763784,NL
-3645763785,3645763785,DE
-3645763786,3645763786,CH
-3645763787,3645763787,NL
-3645763788,3645763788,IE
-3645763789,3645763789,AT
-3645763790,3645763790,ES
-3645763791,3645763791,IT
-3645763792,3645763792,FR
-3645763793,3645763793,ES
-3645763794,3645763794,DE
-3645763795,3645763795,IT
-3645763796,3645763797,DE
-3645763798,3645763798,FR
-3645763799,3645763801,DE
-3645763802,3645763802,ES
-3645763803,3645763803,NL
-3645763804,3645763806,DE
-3645763807,3645763807,IT
-3645763808,3645763808,DE
-3645763809,3645763809,IT
-3645763810,3645763810,NL
-3645763811,3645763813,DE
-3645763814,3645763814,IT
-3645763815,3645763816,DE
-3645763817,3645763817,GR
-3645763818,3645763818,ES
-3645763819,3645763825,DE
-3645763826,3645763826,IT
-3645763827,3645763827,ZA
-3645763828,3645763841,DE
-3645763842,3645763842,CH
-3645763843,3645763845,DE
-3645763846,3645763846,FR
-3645763847,3645763847,IT
-3645763848,3645763849,DE
-3645763850,3645763850,IT
-3645763851,3645763851,GB
-3645763852,3645763852,DE
-3645763853,3645763853,CH
-3645763854,3645763854,NL
-3645763855,3645763858,DE
-3645763859,3645763859,DK
-3645763860,3645763860,IT
-3645763861,3645763861,DE
-3645763862,3645763862,FR
-3645763863,3645763864,ES
-3645763865,3645763865,CH
-3645763866,3645763866,DE
-3645763867,3645763868,GB
-3645763869,3645763869,DE
-3645763870,3645763870,HU
-3645763871,3645763874,DE
-3645763875,3645763875,GB
-3645763876,3645763876,PL
-3645763877,3645763877,FR
-3645763878,3645763879,DE
-3645763880,3645763881,FR
-3645763882,3645763882,DE
-3645763883,3645763883,NL
-3645763884,3645763884,IT
-3645763885,3645763886,DE
-3645763887,3645763887,FR
-3645763888,3645763888,DE
-3645763889,3645763889,GR
-3645763890,3645763890,ES
-3645763891,3645763894,DE
-3645763895,3645763895,ES
-3645763896,3645763896,DE
-3645763897,3645763897,BE
-3645763898,3645763898,NL
-3645763899,3645763899,ES
-3645763900,3645763900,NL
-3645763901,3645763902,LU
-3645763903,3645763903,DE
-3645763904,3645763904,BE
-3645763905,3645763905,RS
-3645763906,3645763906,DE
-3645763907,3645763908,IT
-3645763909,3645763909,DE
-3645763910,3645763910,ES
-3645763911,3645763911,DE
-3645763912,3645763912,IE
-3645763913,3645763913,PT
-3645763914,3645763914,DE
-3645763915,3645763915,IL
-3645763916,3645763916,BE
-3645763917,3645763917,DE
-3645763918,3645763918,IT
-3645763919,3645763919,GB
-3645763920,3645763920,DE
-3645763921,3645763921,CH
-3645763922,3645763922,ES
-3645763923,3645763923,GB
-3645763924,3645763924,PL
-3645763925,3645763926,DE
-3645763927,3645763927,HU
-3645763928,3645763928,FR
-3645763929,3645763929,NL
-3645763930,3645763930,ES
-3645763931,3645763931,FR
-3645763932,3645763932,DE
-3645763933,3645763933,FR
-3645763934,3645763934,IT
-3645763935,3645763935,FR
-3645763936,3645763936,DE
-3645763937,3645763937,FR
-3645763938,3645763938,DE
-3645763939,3645763939,NL
-3645763940,3645763941,DE
-3645763942,3645763942,CH
-3645763943,3645763943,ES
-3645763944,3645763944,CH
-3645763945,3645763945,DE
-3645763946,3645763947,HU
-3645763948,3645763949,DE
-3645763950,3645763950,ES
-3645763951,3645763951,CH
-3645763952,3645763952,IT
-3645763953,3645763953,TR
-3645763954,3645763954,IT
-3645763955,3645763955,FR
-3645763956,3645763956,DE
-3645763957,3645763957,GB
-3645763958,3645763958,AT
-3645763959,3645763959,DE
-3645763960,3645763960,IT
-3645763961,3645763961,DE
-3645763962,3645763962,ES
-3645763963,3645763964,DE
-3645763965,3645763965,AT
-3645763966,3645763966,DE
-3645763967,3645763967,IT
-3645763968,3645763968,DE
-3645763969,3645763969,ES
-3645763970,3645763970,IT
-3645763971,3645763971,ES
-3645763972,3645763972,IT
-3645763973,3645763973,BE
-3645763974,3645763974,GB
-3645763975,3645763975,AT
-3645763976,3645763976,IT
-3645763977,3645763977,DE
-3645763978,3645763978,NL
-3645763979,3645763979,IT
-3645763980,3645763981,DE
-3645763982,3645763982,IT
-3645763983,3645763984,FR
-3645763985,3645763985,NL
-3645763986,3645763986,DE
-3645763987,3645763987,PL
-3645763988,3645763988,CH
-3645763989,3645763989,FR
-3645763990,3645763991,DE
-3645763992,3645763992,NL
-3645763993,3645763993,DE
-3645763994,3645763994,IT
-3645763995,3645763995,ES
-3645763996,3645764000,DE
-3645764001,3645764001,IT
-3645764002,3645764007,DE
-3645764008,3645764008,PL
-3645764009,3645764010,FR
-3645764011,3645764012,DE
-3645764013,3645764013,HU
-3645764014,3645764015,GB
-3645764016,3645764016,IT
-3645764017,3645764017,GB
-3645764018,3645764018,DE
-3645764019,3645764019,NL
-3645764020,3645764020,IT
-3645764021,3645764021,DE
-3645764022,3645764022,ES
-3645764023,3645764023,FR
-3645764024,3645764026,ES
-3645764027,3645764028,DE
-3645764029,3645764029,ES
-3645764030,3645764030,DE
-3645764031,3645764031,NL
-3645764032,3645764032,FR
-3645764033,3645764034,DE
-3645764035,3645764035,IT
-3645764036,3645764037,ES
-3645764038,3645764038,IT
-3645764039,3645764039,HU
-3645764040,3645764040,ES
-3645764041,3645764041,DE
-3645764042,3645764042,CH
-3645764043,3645764043,DE
-3645764044,3645764044,ES
-3645764045,3645764045,AE
-3645764046,3645764046,ES
-3645764047,3645764048,DE
-3645764049,3645764049,ES
-3645764050,3645764051,DE
-3645764052,3645764052,FR
-3645764053,3645764055,DE
-3645764056,3645764056,BE
-3645764057,3645764057,DE
-3645764058,3645764058,TR
-3645764059,3645764059,DE
-3645764060,3645764060,FR
-3645764061,3645764061,IT
-3645764062,3645764062,SE
-3645764063,3645764063,AT
-3645764064,3645764064,SI
-3645764065,3645764065,DE
-3645764066,3645764066,IT
-3645764067,3645764067,DE
-3645764068,3645764068,IT
-3645764069,3645764069,CH
-3645764070,3645764070,GB
-3645764071,3645764074,DE
-3645764075,3645764075,SE
-3645764076,3645764076,GR
-3645764077,3645764078,DE
-3645764079,3645764079,ES
-3645764080,3645764080,DE
-3645764081,3645764081,GB
-3645764082,3645764084,DE
-3645764085,3645764085,IE
-3645764086,3645764086,IT
-3645764087,3645764087,CH
-3645764088,3645764091,DE
-3645764092,3645764092,FR
-3645764093,3645764097,DE
-3645764098,3645764098,IT
-3645764099,3645764099,DE
-3645764100,3645764100,BE
-3645764101,3645764102,DE
-3645764103,3645764103,SK
-3645764104,3645764105,IT
-3645764106,3645764106,NL
-3645764107,3645764107,GR
-3645764108,3645764108,PL
-3645764109,3645764109,CH
-3645764110,3645764110,DK
-3645764111,3645764111,DE
-3645764112,3645764112,IT
-3645764113,3645764113,ES
-3645764114,3645764114,DE
-3645764115,3645764115,GB
-3645764116,3645764116,GR
-3645764117,3645764117,DE
-3645764118,3645764118,GB
-3645764119,3645764119,CH
-3645764120,3645764120,FR
-3645764121,3645764121,IT
-3645764122,3645764122,DE
-3645764123,3645764123,PL
-3645764124,3645764124,DE
-3645764125,3645764125,NO
-3645764126,3645764126,LU
-3645764127,3645764127,GB
-3645764128,3645764128,GR
-3645764129,3645764129,HR
-3645764130,3645764130,FR
-3645764131,3645764131,DE
-3645764132,3645764132,ES
-3645764133,3645764133,CY
-3645764134,3645764134,DE
-3645764135,3645764135,IT
-3645764136,3645764136,BE
-3645764137,3645764137,DE
-3645764138,3645764138,CH
-3645764139,3645764140,DE
-3645764141,3645764141,ES
-3645764142,3645764142,HU
-3645764143,3645764145,DE
-3645764146,3645764147,NL
-3645764148,3645764148,DK
-3645764149,3645764149,DE
-3645764150,3645764150,ES
-3645764151,3645764154,DE
-3645764155,3645764155,ES
-3645764156,3645764156,AT
-3645764157,3645764158,DE
-3645764159,3645764159,IT
-3645764160,3645764160,BE
-3645764161,3645764161,ES
-3645764162,3645764162,DE
-3645764163,3645764163,NL
-3645764164,3645764164,DE
-3645764165,3645764165,CH
-3645764166,3645764166,HU
-3645764167,3645764167,DE
-3645764168,3645764168,ES
-3645764169,3645764169,GR
-3645764170,3645764170,IT
-3645764171,3645764172,DE
-3645764173,3645764173,IT
-3645764174,3645764174,DE
-3645764175,3645764175,PL
-3645764176,3645764176,DE
-3645764177,3645764177,GB
-3645764178,3645764178,ES
-3645764179,3645764179,GR
-3645764180,3645764181,DE
-3645764182,3645764182,FR
-3645764183,3645764184,DE
-3645764185,3645764185,IT
-3645764186,3645764186,FR
-3645764187,3645764187,BE
-3645764188,3645764188,GB
-3645764189,3645764189,FR
-3645764190,3645764190,IT
-3645764191,3645764191,GB
-3645764192,3645764193,DE
-3645764194,3645764194,ES
-3645764195,3645764195,DE
-3645764196,3645764196,IT
-3645764197,3645764197,DE
-3645764198,3645764198,GR
-3645764199,3645764199,DE
-3645764200,3645764200,IT
-3645764201,3645764201,BE
-3645764202,3645764202,IT
-3645764203,3645764203,DE
-3645764204,3645764204,ES
-3645764205,3645764205,FR
-3645764206,3645764206,DE
-3645764207,3645764207,IT
-3645764208,3645764208,NO
-3645764209,3645764210,DE
-3645764211,3645764211,FR
-3645764212,3645764212,NL
-3645764213,3645764213,GB
-3645764214,3645764214,NL
-3645764215,3645764216,DE
-3645764217,3645764217,IT
-3645764218,3645764218,CH
-3645764219,3645764219,FR
-3645764220,3645764220,NL
-3645764221,3645764221,IT
-3645764222,3645764222,BE
-3645764223,3645764223,DE
-3645764224,3645764224,ES
-3645764225,3645764225,GB
-3645764226,3645764226,DE
-3645764227,3645764227,CH
-3645764228,3645764228,FR
-3645764229,3645764229,PL
-3645764230,3645764230,NL
-3645764231,3645764231,CH
-3645764232,3645764234,DE
-3645764235,3645764235,FR
-3645764236,3645764236,IT
-3645764237,3645764238,DE
-3645764239,3645764240,ES
-3645764241,3645764241,DE
-3645764242,3645764242,AT
-3645764243,3645764243,GR
-3645764244,3645764244,FR
-3645764245,3645764246,NL
-3645764247,3645764247,IT
-3645764248,3645764250,DE
-3645764251,3645764251,FR
-3645764252,3645764253,ES
-3645764254,3645764254,DE
-3645764255,3645764255,CH
-3645764256,3645764257,DE
-3645764258,3645764258,NL
-3645764259,3645764259,IT
-3645764260,3645764260,DE
-3645764261,3645764261,GB
-3645764262,3645764262,BE
-3645764263,3645764264,IT
-3645764265,3645764265,TR
-3645764266,3645764269,DE
-3645764270,3645764270,ES
-3645764271,3645764271,IT
-3645764272,3645764272,DE
-3645764273,3645764273,IT
-3645764274,3645764274,DE
-3645764275,3645764275,FR
-3645764276,3645764277,DE
-3645764278,3645764278,NL
-3645764279,3645764279,ES
-3645764280,3645764280,IT
-3645764281,3645764281,DE
-3645764282,3645764282,NL
-3645764283,3645764284,FR
-3645764285,3645764285,IT
-3645764286,3645764286,NL
-3645764287,3645764287,BE
-3645764288,3645764288,FR
-3645764289,3645764289,NL
-3645764290,3645764290,DE
-3645764291,3645764291,NL
-3645764292,3645764292,FR
-3645764293,3645764294,IT
-3645764295,3645764295,ES
-3645764296,3645764297,DE
-3645764298,3645764298,GR
-3645764299,3645764299,NL
-3645764300,3645764300,PL
-3645764301,3645764301,GR
-3645764302,3645764302,IT
-3645764303,3645764303,DE
-3645764304,3645764304,ES
-3645764305,3645764305,GB
-3645764306,3645764306,BM
-3645764307,3645764307,NL
-3645764308,3645764309,DE
-3645764310,3645764310,ZA
-3645764311,3645764313,ES
-3645764314,3645764315,DE
-3645764316,3645764316,IT
-3645764317,3645764317,ES
-3645764318,3645764318,HU
-3645764319,3645764319,FR
-3645764320,3645764320,IT
-3645764321,3645764321,DE
-3645764322,3645764322,CH
-3645764323,3645764323,DE
-3645764324,3645764324,FR
-3645764325,3645764325,DE
-3645764326,3645764326,ES
-3645764327,3645764327,DK
-3645764328,3645764328,CH
-3645764329,3645764329,ES
-3645764330,3645764330,DE
-3645764331,3645764331,RU
-3645764332,3645764332,NL
-3645764333,3645764333,GR
-3645764334,3645764334,ES
-3645764335,3645764335,DE
-3645764336,3645764336,MY
-3645764337,3645764337,HU
-3645764338,3645764338,NL
-3645764339,3645764340,DE
-3645764341,3645764341,IE
-3645764342,3645764342,IT
-3645764343,3645764343,ES
-3645764344,3645764345,DE
-3645764346,3645764346,IT
-3645764347,3645764347,IE
-3645764348,3645764348,NL
-3645764349,3645764349,BE
-3645764350,3645764350,IT
-3645764351,3645764356,DE
-3645764357,3645764357,RU
-3645764358,3645764358,FR
-3645764359,3645764359,IT
-3645764360,3645764360,DE
-3645764361,3645764361,CH
-3645764362,3645764362,GB
-3645764363,3645764364,NL
-3645764365,3645764365,BE
-3645764366,3645764367,DE
-3645764368,3645764368,IT
-3645764369,3645764369,DE
-3645764370,3645764370,GB
-3645764371,3645764371,ES
-3645764372,3645764373,FR
-3645764374,3645764375,DE
-3645764376,3645764377,NL
-3645764378,3645764378,DE
-3645764379,3645764380,GB
-3645764381,3645764381,DE
-3645764382,3645764382,NL
-3645764383,3645764383,FR
-3645764384,3645764384,AT
-3645764385,3645764388,DE
-3645764389,3645764389,NL
-3645764390,3645764390,DE
-3645764391,3645764391,NL
-3645764392,3645764392,GR
-3645764393,3645764393,DE
-3645764394,3645764394,FR
-3645764395,3645764396,NL
-3645764397,3645764397,DE
-3645764398,3645764398,NL
-3645764399,3645764399,DE
-3645764400,3645764401,NL
-3645764402,3645764403,FR
-3645764404,3645764406,NL
-3645764407,3645764408,DE
-3645764409,3645764409,FR
-3645764410,3645764410,DE
-3645764411,3645764411,FR
-3645764412,3645764412,NL
-3645764413,3645764413,FR
-3645764414,3645764414,NL
-3645764415,3645764415,DE
-3645764416,3645764417,NL
-3645764418,3645764418,DE
-3645764419,3645764419,NL
-3645764420,3645764420,GB
-3645764421,3645764421,DE
-3645764422,3645764422,IT
-3645764423,3645764423,HU
-3645764424,3645764424,DE
-3645764425,3645764425,GB
-3645764426,3645764433,DE
-3645764434,3645764434,NL
-3645764435,3645764435,AT
-3645764436,3645764436,NL
-3645764437,3645764437,FR
-3645764438,3645764439,DE
-3645764440,3645764440,CH
-3645764441,3645764441,DE
-3645764442,3645764442,IT
-3645764443,3645764445,DE
-3645764446,3645764446,NL
-3645764447,3645764456,DE
-3645764457,3645764457,IT
-3645764458,3645764458,AT
-3645764459,3645764459,IT
-3645764460,3645764462,DE
-3645764463,3645764463,NL
-3645764464,3645764464,BE
-3645764465,3645764465,DE
-3645764466,3645764466,GR
-3645764467,3645764467,DE
-3645764468,3645764468,IT
-3645764469,3645764470,DE
-3645764471,3645764471,IT
-3645764472,3645764472,GR
-3645764473,3645764473,NL
-3645764474,3645764474,DE
-3645764475,3645764475,GR
-3645764476,3645764476,DE
-3645764477,3645764477,NL
-3645764478,3645764478,GB
-3645764479,3645764479,DE
-3645764480,3645764481,NL
-3645764482,3645764482,DE
-3645764483,3645764483,NL
-3645764484,3645764484,FR
-3645764485,3645764485,NL
-3645764486,3645764486,IE
-3645764487,3645764487,DE
-3645764488,3645764490,NL
-3645764491,3645764491,DE
-3645764492,3645764492,NL
-3645764493,3645764493,ES
-3645764494,3645764494,FR
-3645764495,3645764495,NL
-3645764496,3645764496,DE
-3645764497,3645764497,NL
-3645764498,3645764498,FR
-3645764499,3645764500,NL
-3645764501,3645764501,DE
-3645764502,3645764505,NL
-3645764506,3645764506,DE
-3645764507,3645764507,ES
-3645764508,3645764508,IT
-3645764509,3645764509,NL
-3645764510,3645764510,DE
-3645764511,3645764511,NL
-3645764512,3645764512,DE
-3645764513,3645764513,NL
-3645764514,3645764514,ES
-3645764515,3645764515,DE
-3645764516,3645764516,NL
-3645764517,3645764518,DE
-3645764519,3645764522,NL
-3645764523,3645764524,DE
-3645764525,3645764531,NL
-3645764532,3645764533,DE
-3645764534,3645764535,NL
-3645764536,3645764536,IT
-3645764537,3645764539,NL
-3645764540,3645764540,DE
-3645764541,3645764541,IT
-3645764542,3645764549,NL
-3645764550,3645764550,DE
-3645764551,3645764551,GR
-3645764552,3645764553,DE
-3645764554,3645764554,NL
-3645764555,3645764555,DE
-3645764556,3645764556,CH
-3645764557,3645764557,NL
-3645764558,3645764561,DE
-3645764562,3645764562,FR
-3645764563,3645764563,ES
-3645764564,3645764565,NL
-3645764566,3645764566,DE
-3645764567,3645764568,NL
-3645764569,3645764569,DE
-3645764570,3645764570,MA
-3645764571,3645765127,DE
-3645765128,3645765131,GR
-3645765132,3645765135,DE
-3645765136,3645765139,BE
-3645765140,3645765143,IT
-3645765144,3645765147,DE
-3645765148,3645765151,IT
-3645765152,3645765155,BE
-3645765156,3645765171,IT
-3645765172,3645765175,NO
-3645765176,3645765179,DE
-3645765180,3645765183,FR
-3645765184,3645765187,GR
-3645765188,3645765195,DE
-3645765196,3645765199,CH
-3645765200,3645765203,GB
-3645765204,3645765207,DE
-3645765208,3645765211,FR
-3645765212,3645765215,DE
-3645765216,3645765219,ES
-3645765220,3645765223,PL
-3645765224,3645765227,BE
+3645763584,3645764014,DE
+3645764015,3645764015,GB
+3645764016,3645765227,DE
3645765228,3645765231,GB
-3645765232,3645765235,IT
-3645765236,3645765239,FR
-3645765240,3645765243,GB
-3645765244,3645765247,IT
-3645765248,3645765251,ES
-3645765252,3645765255,DE
-3645765256,3645765259,GR
-3645765260,3645765263,PL
-3645765264,3645765267,IT
-3645765268,3645765271,PL
-3645765272,3645765275,IT
-3645765276,3645765279,FR
-3645765280,3645765283,DE
-3645765284,3645765287,ES
-3645765288,3645765295,DE
-3645765296,3645765299,ES
-3645765300,3645765303,FR
-3645765304,3645765311,IT
-3645765312,3645765315,TR
-3645765316,3645765319,IT
-3645765320,3645765323,FR
-3645765324,3645765331,ES
-3645765332,3645765335,FR
-3645765336,3645765339,IT
-3645765340,3645765343,FR
-3645765344,3645765347,PL
-3645765348,3645765351,GR
-3645765352,3645765355,IT
-3645765356,3645765359,ES
-3645765360,3645765363,FR
-3645765364,3645765367,ES
-3645765368,3645765371,IT
-3645765372,3645765375,CH
-3645765376,3645765379,DE
-3645765380,3645765383,BM
-3645765384,3645765387,NL
-3645765388,3645765391,DE
-3645765392,3645765403,ES
-3645765404,3645765407,GR
-3645765408,3645765411,DK
-3645765412,3645765415,IT
-3645765416,3645765419,FR
-3645765420,3645765423,DE
-3645765424,3645765427,IT
-3645765428,3645765443,DE
-3645765444,3645765447,FR
-3645765448,3645765451,ES
-3645765452,3645765455,FR
-3645765456,3645765459,AT
-3645765460,3645765463,FR
-3645765464,3645765467,GB
-3645765468,3645765471,DE
-3645765472,3645765475,NL
-3645765476,3645765487,DE
-3645765488,3645765491,HU
-3645765492,3645765495,DE
-3645765496,3645765499,GB
-3645765500,3645765503,NL
-3645765504,3645765507,CH
-3645765508,3645765511,IT
-3645765512,3645765519,GB
-3645765520,3645765523,FR
-3645765524,3645765527,IT
-3645765528,3645765535,FR
-3645765536,3645765539,SE
-3645765540,3645765543,IL
-3645765544,3645765547,BE
-3645765548,3645765555,DE
-3645765556,3645765559,IT
-3645765560,3645765563,IE
-3645765564,3645765567,ES
-3645765568,3645765571,FR
-3645765572,3645765575,DE
-3645765576,3645765579,IT
-3645765580,3645765591,DE
-3645765592,3645765595,IE
-3645765596,3645765611,DE
-3645765612,3645765615,IT
-3645765616,3645765619,GB
-3645765620,3645765623,CH
-3645765624,3645765627,FR
-3645765628,3645765639,DE
-3645765640,3645765643,DK
-3645765644,3645765647,GB
-3645765648,3645765651,NL
-3645765652,3645765667,DE
-3645765668,3645765675,FR
-3645765676,3645765679,DE
-3645765680,3645765683,FR
-3645765684,3645765687,NL
-3645765688,3645765691,FR
-3645765692,3645765695,CH
-3645765696,3645765703,IT
-3645765704,3645765707,DE
-3645765708,3645765711,FR
-3645765712,3645765715,DE
-3645765716,3645765719,FR
-3645765720,3645766401,DE
-3645766402,3645766407,US
-3645766408,3645767187,DE
-3645767188,3645767188,US
-3645767189,3645767193,DE
-3645767194,3645767194,US
-3645767195,3645767195,DE
-3645767196,3645767196,US
-3645767197,3645767197,DE
-3645767198,3645767198,US
-3645767199,3645767208,DE
-3645767209,3645767209,US
-3645767210,3645767222,DE
-3645767223,3645767223,US
-3645767224,3645767240,DE
-3645767241,3645767241,US
-3645767242,3645767426,DE
-3645767427,3645767427,US
-3645767428,3645767428,DE
+3645765232,3645767428,DE
3645767429,3645767429,US
-3645767430,3645767431,DE
-3645767432,3645767433,US
-3645767434,3645767434,CA
-3645767435,3645767448,US
-3645767449,3645767449,DE
-3645767450,3645767455,US
-3645767456,3645767502,DE
-3645767503,3645767503,US
-3645767504,3645767679,DE
+3645767430,3645767443,DE
+3645767444,3645767444,US
+3645767445,3645767679,DE
3645767680,3645771775,IE
3645771776,3645779967,SE
3645779968,3645784063,PS
@@ -176279,215 +89637,84 @@
3645874176,3645878271,GB
3645878272,3645882367,DE
3645882368,3645886463,CH
-3645886464,3645887007,DE
-3645887008,3645887015,US
-3645887016,3645887067,DE
-3645887068,3645887071,US
-3645887072,3645887079,AT
-3645887080,3645887487,DE
-3645887488,3645887742,US
-3645887743,3645887743,DE
-3645887744,3645887871,US
-3645887872,3645888127,DE
-3645888128,3645888143,AT
-3645888144,3645888159,DE
-3645888160,3645888191,AT
-3645888192,3645888511,DE
-3645888512,3645888767,EU
-3645888768,3645889791,DE
-3645889792,3645889919,US
-3645889920,3645890559,DE
+3645886464,3645890559,DE
3645890560,3645894655,RU
3645894656,3645898751,NL
-3645898752,3646513103,DE
-3646513104,3646513111,CA
-3646513112,3646947327,DE
+3645898752,3646947327,DE
3646947328,3647209471,PL
3647209472,3647602687,NL
-3647602688,3647658751,RU
-3647658752,3647659007,GE
-3647659008,3647665151,RU
-3647665152,3647665407,GE
-3647665408,3647722751,RU
-3647722752,3647722879,BY
-3647722880,3647733759,RU
-3647733760,3647814855,FR
-3647814856,3647814863,A2
-3647814864,3647864831,FR
-3647864832,3647875583,DE
-3647875584,3647875839,CH
-3647875840,3647886543,DE
-3647886544,3647886559,BE
-3647886560,3647889663,DE
-3647889664,3647889671,BE
-3647889672,3647890463,DE
-3647890464,3647890471,FR
-3647890472,3647890687,DE
-3647890688,3647890943,EU
-3647890944,3647916799,DE
+3647602688,3647733759,RU
+3647733760,3647864831,FR
+3647864832,3647916799,DE
3647916800,3647917055,SE
-3647917056,3647917599,DE
-3647917600,3647917615,US
-3647917616,3647947263,DE
-3647947264,3647947519,US
-3647947520,3647949567,DE
-3647949568,3647949823,EU
-3647949824,3647957511,DE
-3647957512,3647957519,GB
-3647957520,3647961215,DE
-3647961216,3647961247,IT
-3647961248,3647963167,DE
-3647963168,3647963183,BE
-3647963184,3647963231,DE
-3647963232,3647963263,BE
-3647963264,3647963519,DE
-3647963520,3647963775,BE
-3647963776,3647963839,FR
-3647963840,3647964159,DE
-3647964160,3647964287,BE
-3647964288,3647964415,DE
-3647964416,3647964487,AU
-3647964488,3647964495,ES
-3647964496,3647964543,AU
-3647964544,3647964551,ES
-3647964552,3647964671,AU
-3647964672,3647964679,DE
-3647964680,3647964703,ES
-3647964704,3647965183,DE
-3647965184,3647965695,ES
+3647917056,3647964159,DE
+3647964160,3647964287,ES
+3647964288,3647964439,DE
+3647964440,3647964447,ES
+3647964448,3647964463,DE
+3647964464,3647964471,ES
+3647964472,3647964503,DE
+3647964504,3647964511,ES
+3647964512,3647964519,DE
+3647964520,3647964527,ES
+3647964528,3647964551,DE
+3647964552,3647964567,ES
+3647964568,3647964591,DE
+3647964592,3647964599,ES
+3647964600,3647964607,DE
+3647964608,3647964615,ES
+3647964616,3647964623,DE
+3647964624,3647964639,ES
+3647964640,3647965695,DE
3647965696,3647966207,CH
3647966208,3647967231,GB
3647967232,3647968255,BE
3647968256,3647969279,FR
-3647969280,3647969791,IT
-3647969792,3647970303,BE
-3647970304,3647971327,FR
+3647969280,3647971327,DE
3647971328,3647972351,GB
-3647972352,3647973663,IT
-3647973664,3647973671,DE
-3647973672,3647973679,IT
-3647973680,3647973695,DE
-3647973696,3647973703,IT
-3647973704,3647973711,BE
-3647973712,3647973735,IT
-3647973736,3647973743,DE
-3647973744,3647973791,IT
-3647973792,3647973799,DE
-3647973800,3647973943,IT
-3647973944,3647973959,DE
-3647973960,3647973967,IT
-3647973968,3647973975,DE
-3647973976,3647974047,IT
-3647974048,3647974055,DE
+3647972352,3647973375,IT
+3647973376,3647973615,DE
+3647973616,3647973623,IT
+3647973624,3647973711,DE
+3647973712,3647973719,IT
+3647973720,3647974055,DE
3647974056,3647974063,IT
-3647974064,3647974071,DE
-3647974072,3647974399,IT
-3647974400,3647976447,ES
-3647976448,3647976719,BE
-3647976720,3647976727,DE
-3647976728,3647976743,BE
-3647976744,3647976751,DE
-3647976752,3647976767,BE
-3647976768,3647976783,DE
-3647976784,3647976791,BE
-3647976792,3647976799,DE
-3647976800,3647976831,BE
-3647976832,3647976855,DE
-3647976856,3647976895,BE
-3647976896,3647976935,DE
-3647976936,3647977119,BE
-3647977120,3647977135,DE
-3647977136,3647977151,BE
-3647977152,3647977215,DE
-3647977216,3647977471,BE
+3647974064,3647975423,DE
+3647975424,3647976447,ES
+3647976448,3647977471,DE
3647977472,3647978495,GB
-3647978496,3647979007,NL
-3647979008,3647979136,IT
-3647979137,3647979519,DE
-3647979520,3647980543,FR
-3647980544,3647981055,GB
-3647981056,3647981567,IE
-3647981568,3647982591,BE
+3647978496,3647980223,DE
+3647980224,3647980239,FR
+3647980240,3647980383,DE
+3647980384,3647980415,FR
+3647980416,3647980543,DE
+3647980544,3647981567,GB
+3647981568,3647981823,BE
+3647981824,3647982079,DK
+3647982080,3647982591,BE
3647982592,3647983615,IT
-3647983616,3647983935,NL
-3647983936,3647983999,DE
-3647984000,3647984031,NL
-3647984032,3647984047,DE
-3647984048,3647984175,NL
-3647984176,3647984191,DE
-3647984192,3647984287,NL
-3647984288,3647984639,DE
-3647984640,3647985151,DK
-3647985152,3647985663,BE
-3647985664,3647985919,ES
-3647985920,3647985935,BE
-3647985936,3647986431,ES
-3647986432,3647986687,FR
-3647986688,3647986951,ES
-3647986952,3647986959,DE
-3647986960,3647987071,ES
-3647987072,3647987087,DE
-3647987088,3647987119,ES
-3647987120,3647987127,DE
-3647987128,3647987183,ES
-3647987184,3647987191,DE
-3647987192,3647987711,ES
+3647983616,3647984031,DE
+3647984032,3647984047,NL
+3647984048,3647986431,DE
+3647986432,3647986687,ES
+3647986688,3647987647,DE
+3647987648,3647987655,ES
+3647987656,3647987695,DE
+3647987696,3647987711,ES
3647987712,3647988735,IT
3647988736,3647989759,BE
-3647989760,3647990271,DE
-3647990272,3647990759,ES
-3647990760,3647990767,IT
-3647990768,3647991807,ES
-3647991808,3647992831,DE
-3647992832,3647993263,BE
-3647993264,3647993279,FR
-3647993280,3647993343,BE
-3647993344,3647993855,DE
-3647993856,3647994255,BE
-3647994256,3647994263,FR
-3647994264,3647994367,BE
-3647994368,3647994879,NR
-3647994880,3647994903,BE
-3647994904,3647994911,DE
-3647994912,3647995903,BE
-3647995904,3648004223,RU
-3648004224,3648004351,GB
-3648004352,3648006271,RU
-3648006272,3648006399,GB
-3648006400,3648007167,RU
-3648007168,3648008191,GB
+3647989760,3647995903,DE
+3647995904,3648004095,RU
+3648004096,3648008191,GB
3648008192,3648016383,FR
3648016384,3648020479,GB
3648020480,3648024575,IT
3648024576,3648028671,NL
3648028672,3648032767,HU
-3648032768,3648033087,IE
-3648033088,3648033103,EU
-3648033104,3648033119,IE
-3648033120,3648033215,EU
-3648033216,3648033223,IE
-3648033224,3648033535,EU
-3648033536,3648033791,IE
-3648033792,3648034047,EU
-3648034048,3648034303,GB
-3648034304,3648034815,EU
-3648034816,3648034847,DE
-3648034848,3648034879,EU
-3648034880,3648034895,IE
-3648034896,3648034943,EU
-3648034944,3648035007,IE
-3648035008,3648035023,EU
-3648035024,3648035039,IE
-3648035040,3648035071,NL
-3648035072,3648036863,EU
+3648032768,3648033023,IE
+3648034888,3648034895,IE
3648036864,3648040959,CZ
-3648040960,3648041020,BE
-3648041021,3648041022,NL
-3648041023,3648041024,BE
-3648041025,3648041026,FR
-3648041027,3648041047,BE
-3648041048,3648041055,NL
-3648041056,3648045055,BE
+3648040960,3648045055,BE
3648045056,3648049151,FI
3648049152,3648053247,UA
3648053248,3648057343,FR
@@ -176495,29 +89722,18 @@
3648061440,3648069631,AM
3648069632,3648073727,DE
3648073728,3648077823,HU
-3648077824,3648077895,BE
-3648077896,3648077911,CG
-3648077912,3648078047,BE
-3648078048,3648078063,CG
-3648078064,3648078079,BE
-3648078080,3648078463,CG
-3648078464,3648078591,BF
-3648078592,3648079007,CG
-3648079008,3648079023,BE
-3648079024,3648079031,CG
-3648079032,3648079071,BE
-3648079072,3648079359,CG
-3648079360,3648079615,CD
-3648079616,3648079679,CG
-3648079680,3648080383,BE
-3648080384,3648080511,TZ
+3648077824,3648078527,BE
+3648078528,3648078591,BF
+3648078592,3648079103,BE
+3648079104,3648079359,CG
+3648079360,3648080511,BE
3648080512,3648080543,BF
-3648080544,3648080639,TZ
+3648080544,3648080639,BE
3648080640,3648080895,GA
-3648080896,3648081151,ZM
-3648081152,3648081407,BE
-3648081408,3648082175,MW
-3648082176,3648082239,BE
+3648080896,3648081023,ZM
+3648081024,3648081055,GA
+3648081056,3648081151,ZM
+3648081152,3648082239,BE
3648082240,3648082311,NE
3648082312,3648082431,BE
3648082432,3648082479,ZM
@@ -176529,9 +89745,7 @@
3648086016,3648090111,AT
3648090112,3648094207,RU
3648094208,3648102399,PL
-3648102400,3648104703,GB
-3648104704,3648104959,IE
-3648104960,3648106495,GB
+3648102400,3648106495,GB
3648106496,3648110591,DE
3648110592,3648114687,FR
3648114688,3648118783,IT
@@ -176540,83 +89754,29 @@
3648126976,3648139263,RU
3648139264,3648143359,GB
3648143360,3648147455,DE
-3648147456,3648149503,SE
-3648149504,3648150015,GB
-3648150016,3648150271,SE
-3648150272,3648150527,FI
-3648150528,3648150783,DK
-3648150784,3648151551,SE
-3648151552,3648152759,NL
-3648152760,3648152767,IT
-3648152768,3648155647,NL
+3648147456,3648151551,SE
+3648151552,3648155647,NL
3648155648,3648159743,CH
3648159744,3648163839,ES
3648163840,3648167935,RU
-3648167936,3648172031,IE
+3648167936,3648170239,GB
+3648170240,3648170495,IE
+3648170496,3648171679,GB
+3648171680,3648171695,IE
+3648171696,3648172031,GB
3648172032,3648176127,RU
3648176128,3648178175,DE
-3648178176,3648178495,FR
-3648178496,3648178503,AD
-3648178504,3648178687,FR
-3648178688,3648178815,LU
-3648178816,3648180223,FR
-3648180224,3648180703,DE
-3648180704,3648180751,IT
-3648180752,3648180767,DE
-3648180768,3648180799,AT
-3648180800,3648181247,DE
-3648181248,3648181279,IT
-3648181280,3648181311,DE
-3648181312,3648181343,AT
-3648181344,3648181375,DE
-3648181376,3648181407,RU
-3648181408,3648181423,DE
-3648181424,3648181439,CH
-3648181440,3648181551,DE
-3648181552,3648181567,RU
-3648181568,3648181631,DE
-3648181632,3648181647,AT
-3648181648,3648181887,DE
-3648181888,3648181903,AT
-3648181904,3648182079,DE
-3648182080,3648182111,DK
-3648182112,3648182127,CY
-3648182128,3648182143,DE
-3648182144,3648182159,JO
-3648182160,3648182175,DE
-3648182176,3648182207,RU
-3648182208,3648182271,GB
-3648182272,3648182303,DK
-3648182304,3648182335,IT
-3648182336,3648182591,DE
-3648182592,3648182623,AT
-3648182624,3648182655,CH
-3648182656,3648182783,DE
-3648182784,3648182799,IT
-3648182800,3648182815,DE
-3648182816,3648182823,US
-3648182824,3648182831,RU
-3648182832,3648182847,AE
-3648182848,3648182879,AT
-3648182880,3648183551,DE
-3648183552,3648183679,IT
-3648183680,3648183807,DK
-3648183808,3648183871,DE
-3648183872,3648183935,GB
-3648183936,3648184319,DE
+3648178176,3648180223,FR
+3648180224,3648184319,DE
3648184320,3648192511,RU
3648192512,3648196607,DE
3648196608,3648200703,IT
3648200704,3648208895,SE
-3648208896,3648209663,DE
-3648209664,3648209919,EU
-3648209920,3648212991,DE
+3648208896,3648212991,DE
3648212992,3648217087,RU
3648217088,3648221183,UA
3648221184,3648225279,IE
-3648225280,3648231263,DE
-3648231264,3648231295,NL
-3648231296,3648233471,DE
+3648225280,3648233471,DE
3648233472,3648237567,FR
3648237568,3648241663,RU
3648241664,3648245759,NL
@@ -176631,24 +89791,11 @@
3648282624,3648286719,PL
3648286720,3648290815,DE
3648290816,3648299007,RU
-3648299008,3648303103,FI
+3648299008,3648301055,FI
+3648301056,3648303103,CZ
3648303104,3648307199,AT
3648307200,3648311295,TR
-3648311296,3648315615,DK
-3648315616,3648315631,CA
-3648315632,3648316079,DK
-3648316080,3648316087,SE
-3648316088,3648316415,DK
-3648316416,3648316671,NL
-3648316672,3648317247,DK
-3648317248,3648317263,CA
-3648317264,3648319527,DK
-3648319528,3648319535,CH
-3648319536,3648321631,DK
-3648321632,3648321639,CA
-3648321640,3648321823,DK
-3648321824,3648321839,GB
-3648321840,3648323583,DK
+3648311296,3648323583,DK
3648323584,3648327679,NG
3648327680,3648331775,LT
3648331776,3648339967,BE
@@ -176657,71 +89804,30 @@
3648348160,3648352255,DE
3648352256,3648356351,RU
3648356352,3648360447,PL
-3648360448,3648362251,FR
-3648362252,3648362255,GB
-3648362256,3648362263,FR
-3648362264,3648362271,GB
-3648362272,3648364543,FR
+3648360448,3648364543,FR
3648364544,3648368639,CH
3648368640,3648372735,RU
3648372736,3648376831,LU
3648376832,3648380927,CZ
-3648380928,3648381183,EU
-3648381184,3648385023,NL
+3648380928,3648385023,NL
3648385024,3648389119,RU
3648389120,3648393215,IT
3648393216,3648397311,DE
3648397312,3648405503,NO
3648405504,3648413695,RU
3648413696,3648417791,SK
-3648417792,3648417807,AT
-3648417808,3648417815,GB
-3648417816,3648417831,AT
-3648417832,3648417839,GB
-3648417840,3648417855,AT
-3648417856,3648417919,GB
-3648417920,3648418047,AT
-3648418048,3648418079,GB
-3648418080,3648418111,ES
-3648418112,3648418135,GB
-3648418136,3648418239,ES
-3648418240,3648418247,SE
-3648418248,3648418255,CH
-3648418256,3648418271,GB
-3648418272,3648418303,ES
-3648418304,3648419327,GB
-3648419328,3648419455,FR
-3648419456,3648419519,IT
-3648419520,3648419583,ES
-3648419584,3648419839,GB
-3648419840,3648419901,BE
-3648419902,3648419903,GB
-3648419904,3648419951,BE
-3648419952,3648420095,GB
-3648420096,3648420351,NL
-3648420352,3648420863,GB
-3648420864,3648421119,US
-3648421120,3648421375,GB
-3648421376,3648421631,DE
-3648421632,3648421887,CH
-3648421888,3648425983,GB
+3648417792,3648425983,GB
3648425984,3648430079,IT
-3648430080,3648432127,NL
-3648432128,3648433151,DE
-3648433152,3648434175,NL
+3648430080,3648434175,NL
3648434176,3648438271,RU
3648438272,3648442367,CH
3648442368,3648446463,SE
-3648446464,3648449119,FR
-3648449120,3648449135,ES
-3648449136,3648450559,FR
+3648446464,3648450559,FR
3648450560,3648454655,IT
3648454656,3648458751,NL
3648458752,3648462847,RU
3648462848,3648466943,FI
-3648466944,3648469295,DE
-3648469296,3648469311,AT
-3648469312,3648471039,DE
+3648466944,3648471039,DE
3648471040,3648475135,PL
3648475136,3648479231,RU
3648479232,3648483327,CH
@@ -176732,8 +89838,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
@@ -176746,35 +89852,20 @@
3649512192,3649512447,FR
3649512448,3649568767,GB
3649568768,3649634303,BE
-3649634304,3649700159,GB
-3649700160,3649700247,US
-3649700248,3649700251,BB
-3649700252,3649700287,US
-3649700288,3649708791,GB
-3649708792,3649709055,GD
-3649709056,3649709815,GB
-3649709816,3649709823,TT
-3649709824,3649765375,GB
+3649634304,3649765375,GB
3649765376,3649830911,EG
-3649830912,3649831167,NL
-3649831168,3649831423,EU
-3649831424,3649835007,NL
-3649835008,3649838079,ES
-3649838080,3649839103,NL
+3649830912,3649835007,NL
+3649835008,3649837055,ES
+3649837056,3649839103,NL
3649839104,3649840127,GB
-3649840128,3649840383,NL
-3649840384,3649843455,GB
-3649843456,3649845247,NL
-3649845248,3649845759,GB
-3649845760,3649847039,NL
-3649847040,3649847295,GB
-3649847296,3649847942,NL
-3649847943,3649847943,AT
-3649847944,3649848319,NL
-3649848320,3649855487,DE
+3649840128,3649841151,NL
+3649841152,3649843199,GB
+3649843200,3649847817,NL
+3649847818,3649855487,DE
3649855488,3649856511,GB
3649856512,3649857535,US
-3649857536,3649858047,JP
+3649857536,3649857791,JP
+3649857792,3649858047,IN
3649858048,3649859071,GB
3649859072,3649859583,US
3649859584,3649863679,SE
@@ -176793,14 +89884,10 @@
3650129920,3650134015,GB
3650134016,3650142207,RU
3650142208,3650150399,PL
-3650150400,3650155263,NO
-3650155264,3650155519,EU
-3650155520,3650158591,NO
+3650150400,3650158591,NO
3650158592,3650162687,MT
3650162688,3650166783,RU
-3650166784,3650167807,BE
-3650167808,3650168063,LU
-3650168064,3650170879,BE
+3650166784,3650170879,BE
3650170880,3650174975,DK
3650174976,3650179071,GB
3650179072,3650183167,BG
@@ -176812,55 +89899,50 @@
3650207744,3650211839,SK
3650211840,3650215935,LV
3650220032,3650224127,SA
-3650224128,3650232319,AT
-3650232320,3650233343,RU
-3650233344,3650233599,CY
-3650233600,3650236415,RU
+3650224128,3650224383,TH
+3650224384,3650224639,ES
+3650224640,3650224895,UA
+3650224896,3650225151,FR
+3650225152,3650225407,HU
+3650225408,3650225663,BR
+3650225664,3650226175,TR
+3650226176,3650226431,RS
+3650226432,3650226687,AT
+3650226688,3650227455,IN
+3650227456,3650227711,PL
+3650227712,3650227967,PT
+3650227968,3650228223,AR
+3650228224,3650228479,HK
+3650228480,3650229503,AT
+3650229504,3650229759,LU
+3650229760,3650230527,DE
+3650230528,3650231295,AT
+3650231296,3650231551,AR
+3650231552,3650231807,GB
+3650231808,3650232063,DE
+3650232064,3650232319,SE
+3650232320,3650236415,RU
3650236416,3650240511,CH
3650240512,3650244607,EE
3650244608,3650256895,GB
3650256896,3650265087,DE
3650265088,3650269183,CH
-3650269184,3650273071,GB
-3650273072,3650273279,IR
+3650269184,3650273279,GB
3650273280,3650277375,IT
3650277376,3650281471,IR
3650281472,3650285567,FR
3650285568,3650289663,UA
3650289664,3650297855,RU
3650297856,3650301951,LT
-3650301952,3650306775,DE
-3650306776,3650306779,GE
-3650306780,3650307007,DE
-3650307008,3650307010,GB
-3650307011,3650310143,DE
+3650301952,3650310143,DE
3650310144,3650314239,GB
-3650314240,3650316287,DE
-3650316288,3650316543,EU
-3650316544,3650316711,DE
-3650316712,3650316715,FR
-3650316716,3650318335,DE
+3650314240,3650318335,DE
3650318336,3650322431,GI
-3650322432,3650323327,IT
-3650323328,3650323359,SZ
-3650323360,3650330623,IT
+3650322432,3650330623,IT
3650330624,3650334719,UA
3650334720,3650338815,GB
3650338816,3650342911,FR
-3650342912,3650344423,CH
-3650344424,3650344427,GB
-3650344428,3650344463,CH
-3650344464,3650344479,AT
-3650344480,3650344559,CH
-3650344560,3650344575,AT
-3650344576,3650344863,CH
-3650344864,3650344879,AE
-3650344880,3650344911,PT
-3650344912,3650345935,CH
-3650345936,3650345951,PT
-3650345952,3650346207,CH
-3650346208,3650346239,IM
-3650346240,3650347007,CH
+3650342912,3650347007,CH
3650347008,3650351103,GE
3650351104,3650351871,GB
3650351872,3650351879,NL
@@ -176880,19 +89962,11 @@
3650351992,3650351999,HU
3650352000,3650352007,GB
3650352008,3650352015,IE
-3650352016,3650352127,GB
-3650352128,3650352279,DE
-3650352280,3650352287,IT
-3650352288,3650352295,DE
-3650352296,3650352303,SE
-3650352304,3650352319,DE
-3650352320,3650352327,PL
-3650352328,3650352895,DE
-3650352896,3650355199,GB
+3650352016,3650352264,GB
+3650352265,3650352265,DE
+3650352266,3650355199,GB
3650355200,3650359295,CH
-3650359296,3650360703,NL
-3650360704,3650360831,BE
-3650360832,3650363391,NL
+3650359296,3650363391,NL
3650363392,3650367487,GB
3650367488,3650371583,RU
3650371584,3650375679,ES
@@ -176907,13 +89981,7 @@
3650416640,3650420735,BE
3650420736,3650424831,ES
3650424832,3650428927,RU
-3650428928,3650429714,NL
-3650429715,3650429715,EU
-3650429716,3650431999,NL
-3650432000,3650432255,EU
-3650432256,3650432431,NL
-3650432432,3650432447,DE
-3650432448,3650433023,NL
+3650428928,3650433023,NL
3650433024,3650437119,FI
3650437120,3650441215,NL
3650441216,3650445311,IT
@@ -176925,11 +89993,7 @@
3650465792,3650469887,RU
3650469888,3650478079,NL
3650478080,3650482175,AT
-3650482176,3650484479,PL
-3650484480,3650484487,DE
-3650484488,3650484639,PL
-3650484640,3650484671,US
-3650484672,3650486271,PL
+3650482176,3650486271,PL
3650486272,3650502655,RU
3650502656,3650504703,SE
3650504704,3650506751,RU
@@ -176937,25 +90001,14 @@
3650508800,3650510847,NL
3650510848,3650519039,GB
3650519040,3650523135,HU
-3650523136,3650525687,DE
-3650525688,3650525695,GB
-3650525696,3650527231,DE
-3650527232,3650534911,SE
-3650534912,3650535423,NL
+3650523136,3650527231,DE
+3650527232,3650535423,SE
3650535424,3650539519,RU
3650539520,3650543615,ES
-3650543616,3650548109,CH
-3650548110,3650548110,CH
-3650548111,3650548827,CH
-3650548828,3650548828,CH
-3650548829,3650548884,CH
-3650548885,3650548885,CH
-3650548886,3650551807,CH
+3650543616,3650551807,CH
3650551808,3650555903,FR
3650555904,3650559999,RU
-3650560000,3650560039,HK
-3650560040,3650560043,GB
-3650560044,3650564095,HK
+3650560000,3650564095,GB
3650564096,3650568191,SE
3650568192,3650572287,RU
3650572288,3650576383,DE
@@ -176967,219 +90020,80 @@
3650600960,3650605055,SE
3650605056,3650609180,DE
3650609181,3650609181,LB
-3650609182,3650609279,DE
-3650609280,3650609311,CY
-3650609312,3650609407,DE
-3650609408,3650609439,IQ
-3650609440,3650609447,KZ
-3650609448,3650609455,RU
-3650609456,3650609663,DE
-3650609664,3650609919,KZ
-3650609920,3650610175,RU
-3650610176,3650610687,KZ
-3650610688,3650610943,RU
-3650610944,3650611711,DE
-3650611712,3650611967,LB
-3650611968,3650612735,KZ
-3650612736,3650617343,DE
+3650609182,3650610175,DE
+3650610176,3650611711,RU
+3650611712,3650611866,LB
+3650611867,3650611867,RU
+3650611868,3650611967,LB
+3650611968,3650613247,RU
+3650613248,3650617343,DE
3650617344,3650682879,FI
3650682880,3650748415,PL
-3650748416,3650789375,GB
-3650789376,3650790143,NL
-3650790144,3650879487,GB
+3650748416,3650879487,GB
3650879488,3650912255,RO
-3650912256,3650912639,GB
-3650912640,3650912767,FR
-3650912768,3650915327,GB
+3650912256,3650915327,GB
3650915328,3650915337,FR
-3650915338,3650915338,US
+3650915338,3650915338,BE
3650915339,3650915583,FR
-3650915584,3650922495,GB
-3650922496,3650922751,US
-3650922752,3650923103,GB
-3650923104,3650923135,FR
-3650923136,3650926591,GB
+3650915584,3650920447,GB
+3650920448,3650920457,FR
+3650920458,3650920458,GB
+3650920459,3650920703,FR
+3650920704,3650926079,GB
+3650926080,3650926335,BE
+3650926336,3650926591,GB
3650926592,3650929663,ES
-3650929664,3650930431,GB
+3650929664,3650929847,GB
+3650929848,3650929855,FR
+3650929856,3650929863,DE
+3650929864,3650930431,GB
3650930432,3650930687,DE
-3650930688,3650931967,GB
-3650931968,3650932223,ES
-3650932224,3650935839,GB
-3650935840,3650935855,FR
-3650935856,3650935871,GB
-3650935872,3650935903,FR
-3650935904,3650935967,GB
-3650935968,3650935983,FR
-3650935984,3650935999,GB
-3650936000,3650936063,NL
-3650936064,3650939599,GB
+3650930688,3650932943,GB
+3650932944,3650932975,IT
+3650932976,3650939599,GB
3650939600,3650939607,FR
-3650939608,3650944511,GB
+3650939608,3650939615,TR
+3650939616,3650944511,GB
3650944512,3650944767,FR
3650944768,3650945023,GB
3650945024,3651010559,DK
3651010560,3651076095,GB
-3651076096,3651077375,DE
-3651077376,3651077887,GB
-3651077888,3651078143,IE
-3651078144,3651078399,ES
-3651078400,3651078655,IE
-3651078656,3651078783,ES
-3651078784,3651078911,DE
-3651078912,3651079807,GB
-3651079808,3651079935,ES
-3651079936,3651080191,DE
-3651080192,3651080831,GB
-3651080832,3651081215,DE
-3651081216,3651081727,GB
-3651081728,3651081983,AT
-3651081984,3651082239,DE
-3651082240,3651082751,GB
-3651082752,3651083007,IE
-3651083008,3651083519,GB
-3651083520,3651083775,DE
-3651083776,3651084031,IE
-3651084032,3651084543,FR
-3651084544,3651084799,IE
-3651084800,3651085311,ES
-3651085312,3651085567,FR
-3651085568,3651086079,DE
-3651086080,3651086335,IE
-3651086336,3651086463,DE
-3651086464,3651086591,IE
-3651086592,3651086719,GR
-3651086720,3651086847,DE
-3651086848,3651087103,FR
-3651087104,3651087615,ES
-3651087616,3651087871,GB
-3651087872,3651088127,DE
-3651088128,3651088383,IE
-3651088384,3651088639,GR
-3651088640,3651090767,DE
-3651090768,3651090775,GB
-3651090776,3651090919,DE
-3651090920,3651090959,IE
-3651090960,3651098111,DE
-3651098112,3651098367,IE
-3651098368,3651098623,FR
-3651098624,3651101439,DE
-3651101440,3651101695,FR
-3651101696,3651101951,CH
-3651101952,3651102207,FR
-3651102208,3651102719,DE
-3651102720,3651102975,GB
-3651102976,3651103231,SL
-3651103232,3651103487,IT
-3651103488,3651103743,FR
-3651103744,3651103999,IT
-3651104000,3651104511,DE
-3651104512,3651104767,PL
-3651104768,3651105535,DE
-3651105536,3651105791,IT
-3651105792,3651106047,ES
-3651106048,3651106559,GB
-3651106560,3651106815,IE
-3651106816,3651107327,DE
-3651107328,3651107583,GB
-3651107584,3651107839,NL
-3651107840,3651107967,GB
-3651107968,3651108351,IE
-3651108352,3651108479,NL
-3651108480,3651108543,ES
-3651108544,3651108863,DE
+3651076096,3651108863,DE
3651108864,3651141631,EE
-3651141632,3651148287,DE
-3651148288,3651148799,ES
-3651148800,3651159295,DE
-3651159296,3651159359,ES
-3651159360,3651159423,FR
-3651159424,3651159487,DE
-3651159488,3651159551,GB
-3651159552,3651159807,DE
-3651159808,3651160063,ES
-3651160064,3651173375,DE
-3651173376,3651173631,ES
-3651173632,3651198975,DE
-3651198976,3651199231,GB
-3651199232,3651199487,ES
-3651199488,3651199743,GB
-3651199744,3651200255,ES
-3651200256,3651201023,PL
-3651201024,3651201279,ES
-3651201280,3651201535,PL
-3651201536,3651201791,ES
-3651201792,3651201919,FR
-3651201920,3651202047,ES
-3651202048,3651202175,FR
-3651202176,3651202303,GB
-3651202304,3651202815,ES
-3651202816,3651203071,GB
-3651203072,3651203327,DE
-3651203328,3651204351,ES
-3651204352,3651204607,PL
-3651204608,3651205119,ES
-3651205120,3651205375,GB
-3651205376,3651206143,ES
-3651206144,3651206399,PL
-3651206400,3651206655,DE
-3651206656,3651207167,ES
+3651141632,3651152895,DE
+3651152896,3651153919,GB
+3651153920,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,3651220383,EU
-3651220384,3651220479,GB
-3651220480,3651221503,EU
+3651220384,3651220415,GB
+3651220432,3651220479,GB
3651221504,3651221695,GB
-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,3651232255,EU
3651232256,3651232287,GB
-3651232288,3651232319,EU
3651232320,3651232383,GB
-3651232384,3651232447,EU
3651232448,3651232511,GB
-3651232512,3651233791,EU
-3651233792,3651233855,GB
-3651233856,3651236863,EU
-3651236864,3651237631,SC
-3651237632,3651237887,EU
-3651237888,3651238399,SC
-3651238400,3651239935,EU
+3651237376,3651237631,SC
3651239936,3651272703,GB
-3651272704,3651338239,CH
-3651338240,3651350783,GB
-3651350784,3651351039,EU
-3651351040,3651403775,GB
+3651272704,3651289087,CH
+3651289088,3651289599,DE
+3651289600,3651338239,CH
+3651338240,3651403775,GB
3651403776,3651534847,AE
3651534848,3651600383,NL
3651600384,3651665919,FR
@@ -177189,20 +90103,10 @@
3651682304,3651686399,RU
3651686400,3651690495,NO
3651690496,3651694591,FR
-3651694592,3651694847,PT
-3651694848,3651694975,NG
-3651694976,3651695103,PT
-3651695104,3651695359,CV
-3651695360,3651695871,AO
-3651695872,3651696127,PT
-3651696128,3651696383,AO
-3651696384,3651696639,PT
-3651696640,3651698687,AO
+3651694592,3651698687,PT
3651698688,3651702783,PL
3651702784,3651706879,GB
-3651706880,3651709791,MT
-3651709792,3651709807,CY
-3651709808,3651710975,MT
+3651706880,3651710975,MT
3651710976,3651715071,AZ
3651715072,3651719167,PL
3651719168,3651723263,CZ
@@ -177236,60 +90140,18 @@
3651870720,3651874815,IT
3651874816,3651878911,PL
3651878912,3651883007,IT
-3651883008,3651885827,CD
-3651885828,3651885831,BE
-3651885832,3651885847,CD
-3651885848,3651885851,BE
-3651885852,3651885867,CD
-3651885868,3651885911,BE
-3651885912,3651885919,CD
-3651885920,3651885935,BE
-3651885936,3651885967,CD
-3651885968,3651886079,BE
-3651886080,3651886347,CD
-3651886348,3651886379,BE
-3651886380,3651886383,CD
-3651886384,3651886391,BE
-3651886392,3651886395,CD
-3651886396,3651886407,BE
-3651886408,3651886415,CD
-3651886416,3651886423,BE
-3651886424,3651886427,CD
-3651886428,3651886435,BE
-3651886436,3651886451,CD
-3651886452,3651886455,BE
-3651886456,3651886459,CD
-3651886460,3651886463,BE
-3651886464,3651886471,CD
-3651886472,3651886479,BE
-3651886480,3651886495,CD
-3651886496,3651886511,BE
-3651886512,3651886543,CD
-3651886544,3651886591,BE
-3651886592,3651886847,CD
-3651886848,3651887103,BE
+3651883008,3651884287,CD
+3651884288,3651885839,BE
+3651885840,3651885843,CD
+3651885844,3651887103,BE
3651887104,3651891199,GB
3651891200,3651895295,DE
3651895296,3651899391,GB
3651899392,3651903487,RU
3651903488,3651907583,IT
-3651907584,3651908095,IQ
-3651908096,3651908607,DE
-3651908608,3651908863,US
-3651908864,3651908991,IQ
-3651908992,3651909046,DE
+3651907584,3651909046,DE
3651909047,3651909047,IQ
-3651909048,3651909311,DE
-3651909312,3651909375,IQ
-3651909376,3651909631,DE
-3651909632,3651910655,IQ
-3651910656,3651910783,DE
-3651910784,3651911167,IQ
-3651911168,3651911623,DE
-3651911624,3651911631,IQ
-3651911632,3651911643,DE
-3651911644,3651911647,IR
-3651911648,3651911679,DE
+3651909048,3651911679,DE
3651911680,3651915775,NO
3651915776,3651919871,IS
3651919872,3651921919,NL
@@ -177297,128 +90159,21 @@
3651923968,3651928063,DE
3651928064,3651932159,IT
3651932160,3651936255,RU
-3651936256,3651936511,DE
-3651936512,3651936767,EU
-3651936768,3651937023,DE
+3651936256,3651937023,DE
3651937024,3651938047,FR
-3651938048,3651938175,DE
-3651938176,3651938207,GB
-3651938208,3651938255,DE
-3651938256,3651938271,PL
-3651938272,3651938943,DE
-3651938944,3651938959,NL
-3651938960,3651938975,DE
-3651938976,3651939007,TR
-3651939008,3651939071,DE
-3651939072,3651941119,FR
-3651941120,3651941183,DE
-3651941184,3651941215,IT
-3651941216,3651941249,TR
-3651941250,3651941695,DE
-3651941696,3651941759,IT
-3651941760,3651942655,DE
-3651942656,3651942719,GB
-3651942720,3651942735,SE
-3651942736,3651942751,US
-3651942752,3651942783,DE
-3651942784,3651942815,GB
-3651942816,3651942911,DE
-3651942912,3651944447,FR
+3651938048,3651940351,DE
+3651940352,3651941119,FR
+3651941120,3651944447,DE
3651944448,3651948543,ES
3651948544,3651952639,FO
3651952640,3651953663,IR
3651953664,3651954687,AE
-3651954688,3651958271,IR
-3651958272,3651958783,AE
-3651958784,3651959039,IR
-3651959040,3651960831,AE
+3651954688,3651957759,IR
+3651957760,3651958783,AE
+3651958784,3651960831,IR
3651960832,3651964927,GB
3651964928,3651969023,SK
-3651969024,3651971661,DE
-3651971662,3651971662,US
-3651971663,3651971663,DE
-3651971664,3651971666,US
-3651971667,3651971667,DE
-3651971668,3651971670,CA
-3651971671,3651971673,BR
-3651971674,3651971674,DE
-3651971675,3651971675,GR
-3651971676,3651971676,DE
-3651971677,3651971679,UA
-3651971680,3651971681,DE
-3651971682,3651971682,EG
-3651971683,3651971684,DE
-3651971685,3651971686,GR
-3651971687,3651971687,DE
-3651971688,3651971688,GR
-3651971689,3651971787,DE
-3651971788,3651971788,BR
-3651971789,3651971798,DE
-3651971799,3651971799,IL
-3651971800,3651971800,GR
-3651971801,3651971801,US
-3651971802,3651971806,DE
-3651971807,3651971807,UA
-3651971808,3651971812,DE
-3651971813,3651971814,TR
-3651971815,3651971815,FI
-3651971816,3651971817,DE
-3651971818,3651971818,TR
-3651971819,3651971819,DE
-3651971820,3651971821,US
-3651971822,3651971824,TW
-3651971825,3651971825,SA
-3651971826,3651971826,BD
-3651971827,3651971828,DE
-3651971829,3651971829,UA
-3651971830,3651971830,GT
-3651971831,3651971831,US
-3651971832,3651975433,DE
-3651975434,3651975434,TR
-3651975435,3651975437,DE
-3651975438,3651975438,TR
-3651975439,3651975440,DE
-3651975441,3651975441,TR
-3651975442,3651975442,AT
-3651975443,3651975446,DE
-3651975447,3651975449,US
-3651975450,3651975453,DE
-3651975454,3651975454,US
-3651975455,3651975459,DE
-3651975460,3651975470,US
-3651975471,3651975471,DE
-3651975472,3651975473,US
-3651975474,3651975475,DE
-3651975476,3651975482,US
-3651975483,3651975483,DE
-3651975484,3651975486,US
-3651975487,3651975560,DE
-3651975561,3651975561,US
-3651975562,3651975562,DE
-3651975563,3651975563,US
-3651975564,3651975567,DE
-3651975568,3651975568,CN
-3651975569,3651975638,DE
-3651975639,3651975639,CN
-3651975640,3651975640,DE
-3651975641,3651975650,CN
-3651975651,3651975653,DE
-3651975654,3651975654,CN
-3651975655,3651975655,DE
-3651975656,3651975656,CN
-3651975657,3651975658,DE
-3651975659,3651975661,CN
-3651975662,3651975662,DE
-3651975663,3651975664,CN
-3651975665,3651975667,IN
-3651975668,3651975668,DE
-3651975669,3651975670,IN
-3651975671,3651975671,DE
-3651975672,3651975673,IN
-3651975674,3651975676,DE
-3651975677,3651975677,IN
-3651975678,3651975678,US
-3651975679,3651977215,DE
+3651969024,3651977215,DE
3651977216,3651985407,IT
3651985408,3651997695,PL
3651997696,3652001791,RU
@@ -177426,75 +90181,14 @@
3652005888,3652009983,GB
3652009984,3652014079,RU
3652014080,3652018175,SA
-3652018176,3652019327,IE
-3652019328,3652019335,GB
-3652019336,3652019455,IE
-3652019456,3652019471,GB
-3652019472,3652019479,IE
-3652019480,3652019487,GB
-3652019488,3652019567,IE
-3652019568,3652019583,GB
-3652019584,3652019599,IE
-3652019600,3652019615,GB
-3652019616,3652019679,IE
-3652019680,3652019687,GB
-3652019688,3652019735,IE
-3652019736,3652019739,GB
-3652019740,3652019751,IE
-3652019752,3652019759,GB
-3652019760,3652020799,IE
-3652020800,3652020863,DE
-3652020864,3652022271,IE
+3652018176,3652022271,IE
3652022272,3652026367,ES
-3652026368,3652028031,DE
-3652028032,3652028063,US
-3652028064,3652028095,CH
-3652028096,3652028223,DE
-3652028224,3652028255,ES
-3652028256,3652031743,DE
-3652031744,3652031999,US
-3652032000,3652032767,DE
-3652032768,3652033791,NL
-3652033792,3652033855,GD
-3652033856,3652033887,NL
-3652033888,3652033919,VG
-3652033920,3652033935,TR
-3652033936,3652033951,DE
-3652033952,3652033967,CH
-3652033968,3652033983,NL
-3652033984,3652034015,TR
-3652034016,3652034047,NL
-3652034048,3652034111,CY
-3652034112,3652034143,TR
-3652034144,3652034175,CH
-3652034176,3652034207,NL
-3652034208,3652034239,ES
-3652034240,3652034271,VG
-3652034272,3652034367,CY
-3652034368,3652034383,ES
-3652034384,3652034399,VG
-3652034400,3652034559,CY
+3652026368,3652032511,DE
+3652032512,3652033791,NL
+3652033792,3652034559,DE
3652034560,3652046847,PL
-3652046848,3652050271,IE
-3652050272,3652050299,GB
-3652050300,3652050327,IE
-3652050328,3652050343,GB
-3652050344,3652050499,IE
-3652050500,3652050503,GB
-3652050504,3652050527,IE
-3652050528,3652050535,GB
-3652050536,3652050567,IE
-3652050568,3652050615,GB
-3652050616,3652050619,IE
-3652050620,3652050627,GB
-3652050628,3652050631,IE
-3652050632,3652050671,GB
-3652050672,3652050943,IE
-3652050944,3652051711,LI
-3652051712,3652051967,CH
-3652051968,3652053631,LI
-3652053632,3652053759,CH
-3652053760,3652055039,LI
+3652046848,3652050943,IE
+3652050944,3652055039,LI
3652055040,3652059135,NO
3652059136,3652063231,RU
3652063232,3652067327,IR
@@ -177502,69 +90196,36 @@
3652071424,3652075519,BG
3652075520,3652083711,SE
3652083712,3652087807,RU
-3652087808,3652094463,IT
-3652094464,3652094975,US
-3652094976,3652095231,IT
-3652095232,3652095999,US
+3652087808,3652095999,IT
3652096000,3652100095,BG
-3652100096,3652105471,RU
-3652105472,3652105535,US
-3652105536,3652108287,RU
+3652100096,3652108287,RU
3652108288,3652116479,FR
3652116480,3652120575,TM
3652120576,3652124671,GB
3652124672,3652128767,UA
3652128768,3652136959,RU
3652136960,3652141055,IT
-3652141056,3652141311,GB
-3652141312,3652142847,A2
-3652142848,3652143359,GB
-3652143360,3652144127,A2
-3652144128,3652144383,KE
-3652144384,3652144639,A2
-3652144640,3652145151,GB
+3652141056,3652145151,GB
3652145152,3652149247,UA
3652149248,3652153343,DE
3652153344,3652157439,SE
3652157440,3652165631,RU
-3652165632,3652165887,MQ
-3652165888,3652168703,FR
-3652168704,3652168959,MQ
-3652168960,3652169215,FR
-3652169216,3652169471,GF
-3652169472,3652169983,FR
-3652169984,3652170239,MQ
-3652170240,3652170495,FR
-3652170496,3652170751,MQ
-3652170752,3652171263,FR
-3652171264,3652171775,MQ
-3652171776,3652173055,FR
-3652173056,3652173311,RE
-3652173312,3652173823,FR
+3652165632,3652169471,FR
+3652169472,3652169727,GF
+3652169728,3652170495,MQ
+3652170496,3652170751,FR
+3652170752,3652171007,MQ
+3652171008,3652172031,FR
+3652172032,3652172287,RE
+3652172288,3652172799,FR
+3652172800,3652173055,RE
+3652173056,3652173823,FR
3652173824,3652177919,AT
3652177920,3652182015,CY
-3652182016,3652182527,DE
-3652182528,3652182783,AT
-3652182784,3652186591,DE
-3652186592,3652186623,CH
-3652186624,3652186879,DE
-3652186880,3652187007,AT
-3652187008,3652190207,DE
+3652182016,3652190207,DE
3652190208,3652714495,GB
-3652714496,3652985039,DE
-3652985040,3652985047,FR
-3652985048,3653029775,DE
-3653029776,3653029791,LU
-3653029792,3653031727,DE
-3653031728,3653031735,LU
-3653031736,3653039103,DE
-3653039104,3653039359,IT
-3653039360,3653039999,DE
-3653040000,3653040015,LU
-3653040016,3653238783,DE
-3653238784,3653334141,CH
-3653334142,3653334142,AT
-3653334143,3653369855,CH
+3652714496,3653238783,DE
+3653238784,3653369855,CH
3653369856,3653373951,IT
3653373952,3653378047,NL
3653378048,3653382143,DE
@@ -177572,136 +90233,9 @@
3653386240,3653390335,DE
3653390336,3653394431,FR
3653394432,3653402623,NL
-3653402624,3653403135,GB
-3653403136,3653403647,CD
-3653403648,3653403903,ZW
-3653403904,3653403911,GB
-3653403912,3653403919,IQ
-3653403920,3653403927,GB
-3653403928,3653403931,UA
-3653403932,3653403943,GB
-3653403944,3653403951,LB
-3653403952,3653403959,IQ
-3653403960,3653403967,MW
-3653403968,3653403975,NG
-3653403976,3653403983,GB
-3653403984,3653403999,UA
-3653404000,3653404015,ZM
-3653404016,3653404039,GB
-3653404040,3653404047,IQ
-3653404048,3653404063,GB
-3653404064,3653404071,LB
-3653404072,3653404079,AO
-3653404080,3653404087,UA
-3653404088,3653404127,GB
-3653404128,3653404135,RS
-3653404136,3653404159,GB
-3653404160,3653404415,AT
-3653404416,3653404543,GB
-3653404544,3653404559,NG
-3653404560,3653404639,GB
-3653404640,3653404655,UA
-3653404656,3653404671,GB
-3653404672,3653404679,TR
-3653404680,3653404707,GB
-3653404708,3653404713,IQ
-3653404714,3653404719,GB
-3653404720,3653404735,LB
-3653404736,3653404823,GB
-3653404824,3653404831,LB
-3653404832,3653404847,NG
-3653404848,3653404855,GB
-3653404856,3653404863,SL
-3653404864,3653404903,GB
-3653404904,3653404911,IQ
-3653404912,3653404919,LY
-3653404920,3653404959,GB
-3653404960,3653404975,UA
-3653404976,3653405039,GB
-3653405040,3653405047,LB
-3653405048,3653405055,IQ
-3653405056,3653405063,GB
-3653405064,3653405071,IQ
-3653405072,3653405095,GB
-3653405096,3653405103,NG
-3653405104,3653405167,GB
-3653405168,3653405183,UA
-3653405184,3653405439,AT
-3653405440,3653405695,CF
-3653405696,3653407015,GB
-3653407016,3653407023,UG
-3653407024,3653407031,GB
-3653407032,3653407039,US
-3653407040,3653407071,NG
-3653407072,3653407103,GB
-3653407104,3653407111,UG
-3653407112,3653407119,GB
-3653407120,3653407127,VG
-3653407128,3653407135,GB
-3653407136,3653407151,MZ
-3653407152,3653407167,GB
-3653407168,3653407231,NG
-3653407232,3653407391,GB
-3653407392,3653407399,NG
-3653407400,3653407487,GB
-3653407488,3653407743,US
-3653407744,3653407999,AT
-3653408000,3653408119,US
-3653408120,3653408127,GB
-3653408128,3653408255,US
-3653408256,3653408271,GB
-3653408272,3653408279,IQ
-3653408280,3653408319,GB
-3653408320,3653408327,IQ
-3653408328,3653408767,GB
-3653408768,3653409023,CD
-3653409024,3653409039,GB
-3653409040,3653409047,NG
-3653409048,3653409063,GB
-3653409064,3653409071,CD
-3653409072,3653409087,GB
-3653409088,3653409095,CD
-3653409096,3653409103,GB
-3653409104,3653409111,GR
-3653409112,3653409215,GB
-3653409216,3653409223,SS
-3653409224,3653409239,GB
-3653409240,3653409247,SS
-3653409248,3653409263,GB
-3653409264,3653409271,SD
-3653409272,3653409311,GB
-3653409312,3653409319,IQ
-3653409320,3653409535,GB
-3653409536,3653409559,UA
-3653409560,3653409567,CM
-3653409568,3653409575,UA
-3653409576,3653409615,GB
-3653409616,3653409623,IQ
-3653409624,3653409639,NG
-3653409640,3653409647,GB
-3653409648,3653409663,NG
-3653409664,3653409791,CM
-3653409792,3653409919,GB
-3653409920,3653410047,NG
-3653410048,3653410063,YT
-3653410064,3653410079,US
-3653410080,3653410095,GB
-3653410096,3653410111,US
-3653410112,3653410119,GB
-3653410120,3653410127,NG
-3653410128,3653410131,GB
-3653410132,3653410135,IQ
-3653410136,3653410151,GB
-3653410152,3653410159,FR
-3653410160,3653410175,NG
-3653410176,3653410183,KE
-3653410184,3653410191,MZ
-3653410192,3653410199,ZW
-3653410200,3653410255,US
-3653410256,3653410295,GB
-3653410296,3653410303,MW
-3653410304,3653410559,GB
-3653410560,3653410815,IL
+3653402624,3653410060,GB
+3653410061,3653410061,YT
+3653410062,3653410815,GB
3653410816,3653414911,CZ
3653414912,3653419007,IT
3653419008,3653423103,IL
@@ -177710,36 +90244,14 @@
3653431296,3653435391,RU
3653435392,3653439487,DE
3653439488,3653443583,FR
-3653443584,3653444351,DE
-3653444352,3653444383,IT
-3653444384,3653447167,DE
-3653447168,3653447679,NL
+3653443584,3653447679,DE
3653447680,3653451775,LV
3653451776,3653464063,RU
3653464064,3653468159,NL
3653468160,3653472255,GR
-3653472256,3653472279,NL
-3653472280,3653472291,AF
-3653472292,3653472511,NL
-3653472512,3653472559,AF
-3653472560,3653472567,NL
-3653472568,3653472575,AF
-3653472576,3653472591,NL
-3653472592,3653472767,AF
-3653472768,3653472775,NL
-3653472776,3653472791,AF
-3653472792,3653472831,NL
-3653472832,3653472871,AF
-3653472872,3653472879,NL
-3653472880,3653472915,AF
-3653472916,3653472919,NL
-3653472920,3653472983,AF
-3653472984,3653472999,NL
-3653473000,3653473023,AF
-3653473024,3653473279,US
-3653473280,3653474303,NL
-3653474304,3653474367,US
-3653474368,3653476351,NL
+3653472256,3653472511,NL
+3653472512,3653472767,US
+3653472768,3653476351,NL
3653476352,3653480447,CZ
3653480448,3653484543,DK
3653484544,3653488639,TR
@@ -177749,36 +90261,11 @@
3653505024,3653509119,KZ
3653509120,3653513215,NL
3653513216,3653517311,NO
-3653517312,3653518367,AT
-3653518368,3653518399,SK
-3653518400,3653518479,AT
-3653518480,3653518495,SK
-3653518496,3653523199,AT
-3653523200,3653523455,SK
-3653523456,3653523615,AT
-3653523616,3653523647,SK
-3653523648,3653524415,AT
-3653524416,3653524479,SK
-3653524480,3653524551,AT
-3653524552,3653524559,GR
-3653524560,3653524735,AT
-3653524736,3653524863,SK
-3653524864,3653524959,AT
-3653524960,3653525151,SK
-3653525152,3653525183,AT
-3653525184,3653525215,SK
-3653525216,3653525439,AT
-3653525440,3653525503,SK
+3653517312,3653525503,AT
3653525504,3653529599,RU
3653529600,3653533695,CZ
3653533696,3653537791,IT
-3653537792,3653539031,AT
-3653539032,3653539039,US
-3653539040,3653539295,AT
-3653539296,3653539311,US
-3653539312,3653539839,AT
-3653539840,3653539863,DE
-3653539864,3653541887,AT
+3653537792,3653541887,AT
3653541888,3653545983,UA
3653545984,3653550079,CH
3653550080,3653554175,MK
@@ -177798,9 +90285,7 @@
3653607424,3653611519,PL
3653611520,3653615615,HU
3653615616,3653619711,RU
-3653619712,3653623295,CH
-3653623296,3653623551,JP
-3653623552,3653623807,US
+3653619712,3653623807,CH
3653623808,3653636095,RU
3653636096,3653640191,NL
3653640192,3653648383,GB
@@ -177808,14 +90293,10 @@
3653652480,3653656575,RU
3653656576,3653660671,GB
3653660672,3653664767,CZ
-3653664768,3653664895,DE
-3653664896,3653664911,FR
-3653664912,3653665023,NL
-3653665024,3653665087,DE
-3653665088,3653665151,NL
-3653665152,3653665279,DE
-3653665280,3653665791,NL
-3653665792,3653668863,DE
+3653664768,3653665791,NL
+3653665792,3653666815,DE
+3653666816,3653667839,NL
+3653667840,3653668863,DE
3653668864,3653672959,SE
3653672960,3653681151,RU
3653681152,3653685247,ES
@@ -177823,103 +90304,46 @@
3653689344,3653693439,LV
3653693440,3653697535,DE
3653697536,3653705727,IT
-3653705728,3653705735,SE
-3653705736,3653705863,NO
-3653705864,3653705871,SE
-3653705872,3653705895,NO
-3653705896,3653705903,BS
-3653705904,3653706175,NO
-3653706176,3653706191,SE
-3653706192,3653706271,NO
-3653706272,3653706303,SE
-3653706304,3653706495,NO
-3653706496,3653706751,SE
-3653706752,3653710847,NO
-3653710848,3653710911,SE
-3653710912,3653713919,NO
+3653705728,3653713919,NO
3653713920,3653718015,DE
3653718016,3653722111,AT
3653722112,3653730303,LV
3653730304,3653734399,BA
3653734400,3653738495,KE
-3653738496,3653740287,GB
-3653740288,3653740543,ES
-3653740544,3653746687,GB
+3653738496,3653746687,GB
3653746688,3653750783,DE
-3653750784,3653753087,RU
-3653753088,3653753215,VG
-3653753216,3653754879,RU
+3653750784,3653754879,RU
3653754880,3653758975,UA
3653758976,3653763071,RU
3653763072,3654025215,IT
-3654025216,3654034783,GB
-3654034784,3654034799,LU
-3654034800,3654035583,GB
-3654035584,3654035591,US
-3654035592,3654035607,GB
-3654035608,3654035615,SE
-3654035616,3654045879,GB
-3654045880,3654045887,IT
-3654045888,3654061951,GB
-3654061952,3654062079,DE
-3654062080,3654066027,GB
-3654066028,3654066031,MC
-3654066032,3654287359,GB
-3654287360,3654607103,SE
-3654607104,3654607359,DE
-3654607360,3654607871,SE
-3654607872,3654608127,NO
-3654608128,3654608404,SE
+3654025216,3654287359,GB
+3654287360,3654608404,SE
3654608405,3654608405,NO
-3654608406,3654608895,SE
+3654608406,3654608639,SE
+3654608640,3654608895,RU
3654608896,3654609919,NO
-3654609920,3654610431,SE
-3654610432,3654610943,FR
-3654610944,3654611199,SE
-3654611200,3654611455,NL
-3654611456,3654613007,SE
-3654613008,3654613015,RU
-3654613016,3654613055,SE
-3654613056,3654613071,RU
-3654613072,3654613087,SE
-3654613088,3654613151,RU
-3654613152,3654613183,DE
-3654613184,3654613247,SE
-3654613248,3654614015,NO
-3654614016,3654614079,SE
-3654614080,3654614271,FI
-3654614272,3654614527,NL
-3654614528,3654614783,RU
-3654614784,3654615039,NO
-3654615040,3654811647,SE
+3654609920,3654614143,SE
+3654614144,3654614271,FI
+3654614272,3654811647,SE
3654811648,3654942719,ES
3654942720,3655073791,IR
3655073792,3655335935,IT
-3655335936,3656633487,DE
-3656633488,3656633495,GB
-3656633496,3656633503,US
-3656633504,3656635647,DE
-3656635648,3656635903,GB
-3656635904,3656650583,DE
-3656650584,3656650591,US
-3656650592,3656661183,DE
-3656661184,3656661199,AT
-3656661200,3656661583,DE
-3656661584,3656661599,AT
-3656661600,3656661647,DE
-3656661648,3656661679,AT
-3656661680,3656662271,DE
-3656662272,3656662367,AT
-3656662368,3656662431,DE
-3656662432,3656662463,AT
-3656662464,3657433087,DE
+3655335936,3657433087,DE
3657433088,3659530239,CN
3659530240,3659595775,TW
3659595776,3659628543,ID
3659628544,3659661311,JP
3659661312,3659792383,TW
3659792384,3660054527,KR
-3660054528,3660578815,JP
+3660054528,3660097535,JP
+3660097536,3660097791,US
+3660097792,3660099583,JP
+3660099584,3660099839,US
+3660099840,3660102143,JP
+3660102144,3660102399,US
+3660102400,3660102655,JP
+3660102656,3660102911,US
+3660102912,3660578815,JP
3660578816,3661103103,KR
3661103104,3663986687,CN
3663986688,3663987711,AU
@@ -177948,7 +90372,6 @@
3663998464,3663998975,TH
3663998976,3663999487,IN
3663999488,3663999743,AU
-3663999744,3663999999,KH
3664000000,3664000767,AU
3664000768,3664001023,ID
3664001024,3664001279,NZ
@@ -177962,7 +90385,6 @@
3664003584,3664003839,TH
3664003840,3664004095,JP
3664004352,3664004607,MY
-3664004608,3664004863,SG
3664004864,3664005119,KH
3664005120,3664005887,ID
3664005888,3664006143,MY
@@ -178001,9 +90423,7 @@
3671130112,3671195647,KR
3671195648,3671326719,TW
3671326720,3671392255,SG
-3671392256,3671411711,HK
-3671411712,3671411967,AP
-3671411968,3671457791,HK
+3671392256,3671457791,HK
3671457792,3671588863,AU
3671588864,3672637439,JP
3672637440,3673161727,KR
@@ -178039,9 +90459,7 @@
3680239616,3680403455,MY
3680403456,3680436223,JP
3680436224,3680501759,MY
-3680501760,3682554623,JP
-3682554624,3682554879,AP
-3682554880,3682598911,JP
+3680501760,3682598911,JP
3682598912,3684696063,CN
3684696064,3688366079,JP
3688366080,3689938943,CN
@@ -178050,7 +90468,13 @@
3690463232,3690987519,KR
3690987520,3695181823,JP
3695181824,3697278975,KR
-3697278976,3697606655,JP
+3697278976,3697574399,JP
+3697574400,3697574687,GB
+3697574688,3697574719,JP
+3697574720,3697574783,GB
+3697574784,3697574903,JP
+3697574904,3697574911,GB
+3697574912,3697606655,JP
3697606656,3697655807,AU
3697655808,3697672191,CN
3697672192,3697737727,JP
@@ -178075,7 +90499,8 @@
3701293056,3701301247,AU
3701301248,3701305343,ID
3701305344,3701309439,TW
-3701309440,3701473279,JP
+3701309440,3701374975,JP
+3701407744,3701473279,JP
3701473280,3704619007,CN
3704619008,3705667583,JP
3705667584,3705929727,IN
@@ -178096,11 +90521,15 @@
3707109376,3707174911,HK
3707174912,3707207679,JP
3707208704,3707209727,WS
-3707209728,3707211775,CN
-3707211776,3707215871,SG
+3707209728,3707215871,CN
3707215872,3707217919,BD
3707217920,3707219967,ID
-3707219968,3707222015,AU
+3707219968,3707220479,NZ
+3707220480,3707220735,AU
+3707220736,3707220991,NZ
+3707220992,3707221247,AU
+3707221248,3707221759,NZ
+3707221760,3707222015,AU
3707222016,3707224063,JP
3707224064,3707240447,LK
3707240448,3707568127,CN
@@ -178174,7 +90603,9 @@
3735404544,3735420927,ID
3735420928,3735551999,HK
3735552000,3739222015,CN
-3739222016,3739570175,JP
+3739222016,3739555071,JP
+3739555072,3739555327,US
+3739555328,3739570175,JP
3739570176,3739572223,ID
3739572224,3739574271,AU
3739574272,3739680767,JP
@@ -178190,9 +90621,7 @@
3742629888,3742760959,CN
3742760960,3742892031,TW
3742892032,3742957567,TH
-3742957568,3742959871,PH
-3742959872,3742960127,US
-3742960128,3742973951,PH
+3742957568,3742973951,PH
3742973952,3742982143,SG
3742982144,3742986239,ID
3742986240,3742988287,AU
@@ -178201,14 +90630,16 @@
3743006720,3743014911,TH
3743014912,3743016959,AU
3743016960,3743019007,SG
-3743019008,3743023103,MY
+3743019008,3743022079,MY
3743023104,3743027199,TW
3743027200,3743031295,SG
3743031296,3743035391,IN
3743035392,3743039487,HK
3743039488,3743055871,TW
3743055872,3743088639,KR
-3743088640,3743096831,AU
+3743088640,3743093647,AU
+3743093648,3743093648,NZ
+3743093649,3743096831,AU
3743096832,3743105023,TW
3743105024,3743106047,AU
3743106048,3743109119,JP
@@ -178221,8 +90652,7 @@
3743120384,3743121407,JP
3743121408,3743125503,MY
3743125504,3743129599,ID
-3743129600,3743129855,MY
-3743129856,3743130623,HK
+3743129600,3743130623,HK
3743130624,3743133695,SG
3743133696,3743134719,AU
3743134720,3743135743,JP
@@ -178246,7 +90676,8 @@
3749183488,3749838847,CN
3749838848,3749839871,SG
3749839872,3749840895,IN
-3749841920,3749847039,AU
+3749841920,3749842943,AU
+3749843968,3749846015,AU
3749847040,3749855231,HK
3749855232,3749969919,KR
3749969920,3750232063,JP
@@ -178288,11 +90719,14 @@
3755988992,3755990015,HK
3755990016,3755991039,SG
3755991040,3755999231,JP
-3755999232,3756007423,LK
-3756007424,3757047807,IN
+3755999232,3756002815,IN
+3756002816,3756003071,LK
+3756003072,3757047807,IN
3757047808,3757834239,CN
3757834240,3757867007,AU
-3757867008,3757899775,CN
+3757867008,3757875519,CN
+3757875520,3757875583,HK
+3757875584,3757899775,CN
3757899776,3757965311,KR
3757965312,3758063615,CN
3758063616,3758079999,HK
@@ -178302,7 +90736,6 @@
3758091264,3758092287,CN
3758092288,3758093311,HK
3758093312,3758094335,IN
-3758094336,3758095359,AU
3758095360,3758095871,CN
3758095872,3758096127,SG
3758096128,3758096383,AU
diff --git a/src/config/geoip6 b/src/config/geoip6
new file mode 100644
index 000000000..0804892d4
--- /dev/null
+++ b/src/config/geoip6
@@ -0,0 +1,18119 @@
+# Last updated based on June 4 2014 Maxmind GeoLite2 Country
+# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
+# gunzip GeoLite2-Country.mmdb.gz
+# python mmdb-convert.py GeoLite2-Country.mmdb
+2001:218::,2001:218:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:220::,2001:220:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:230::,2001:230:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:238::,2001:238:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:240::,2001:240:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:250::,2001:252:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:254::,2001:254:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:256::,2001:256:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:258::,2001:258:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:260::,2001:260:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:268::,2001:268:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:270::,2001:270:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:278::,2001:278:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:280::,2001:280:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:288::,2001:288:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:290::,2001:290:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:298::,2001:298:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2a0::,2001:2a0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2a8::,2001:2a8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2b0::,2001:2b0:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:2b8::,2001:2b8:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:2c0::,2001:2c0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2c8::,2001:2c8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2d8::,2001:2d8:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:2e0::,2001:2e0:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2001:2e8::,2001:2e8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2f0::,2001:2f0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:2f8::,2001:2f8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:300::,2001:300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:308::,2001:308:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:310::,2001:310:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:318::,2001:318:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:320::,2001:320:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:328::,2001:328:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:330::,2001:330:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:338::,2001:338:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:340::,2001:340:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:348::,2001:348:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:350::,2001:350:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:358::,2001:358:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:360::,2001:360:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:368::,2001:368:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:370::,2001:370:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:378::,2001:378:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:380::,2001:380:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:388::,2001:388:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:390::,2001:390:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:398::,2001:398:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3a0::,2001:3a0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3a8::,2001:3a8:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:3b0::,2001:3b0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3b8::,2001:3b8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3c0::,2001:3c0:1fff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3c8::,2001:3c8:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:3d0::,2001:3d0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3d8::,2001:3d8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3e0::,2001:3e0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:3e8::,2001:3e8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:400::,2001:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:408::,2001:408:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:410::,2001:410:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:418::,2001:418:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:420::,2001:420:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:428::,2001:428:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:430::,2001:430:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:438::,2001:438:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:440::,2001:440:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:448::,2001:448:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:450::,2001:450:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:458::,2001:458:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:460::,2001:460:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:468::,2001:468:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:470::,2001:470:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:478::,2001:478:ffff:ffff:ffff:ffff:ffff:ffff,KN
+2001:480::,2001:480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:490::,2001:490:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4a0::,2001:4a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4b0::,2001:4b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4b8::,2001:4b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4c0::,2001:4c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4c8::,2001:4c8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4d0::,2001:4d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4e0::,2001:4e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4e8::,2001:4e8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4f0::,2001:4f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4f8::,2001:4f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:500:1::,2001:500:4:ffff:ffff:ffff:ffff:ffff,US
+2001:500:6::,2001:500:f:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:10::,2001:500:10:ffff:ffff:ffff:ffff:ffff,PR
+2001:500:11::,2001:500:15:ffff:ffff:ffff:ffff:ffff,US
+2001:500:16::,2001:500:2c:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:2d::,2001:500:31:ffff:ffff:ffff:ffff:ffff,US
+2001:500:40::,2001:500:56:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:60::,2001:500:7d:ffff:ffff:ffff:ffff:ffff,US
+2001:500:80::,2001:500:83:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:84::,2001:500:89:ffff:ffff:ffff:ffff:ffff,US
+2001:500:8c::,2001:500:9a:ffff:ffff:ffff:ffff:ffff,US
+2001:500:9c::,2001:500:9f:ffff:ffff:ffff:ffff:ffff,US
+2001:500:a0::,2001:500:a7:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:a8::,2001:500:a8:ffff:ffff:ffff:ffff:ffff,US
+2001:500:c0::,2001:500:ef:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:f0::,2001:500:f0:ffff:ffff:ffff:ffff:ffff,US
+2001:500:f1::,2001:500:f1:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:100::,2001:500:109:ffff:ffff:ffff:ffff:ffff,CA
+2001:500:3e5::,2001:500:3e5:ffff:ffff:ffff:ffff:ffff,US
+2001:500:30ff::,2001:500:30ff:ffff:ffff:ffff:ffff:ffff,US
+2001:500:3682::,2001:500:3682:ffff:ffff:ffff:ffff:ffff,US
+2001:500:4431::,2001:500:4431:ffff:ffff:ffff:ffff:ffff,US
+2001:500:7967::,2001:500:7967:ffff:ffff:ffff:ffff:ffff,US
+2001:500:856e::,2001:500:856e:ffff:ffff:ffff:ffff:ffff,US
+2001:500:d937::,2001:500:d937:ffff:ffff:ffff:ffff:ffff,US
+2001:500:ed30::,2001:500:ed30:ffff:ffff:ffff:ffff:ffff,US
+2001:501:8a29::,2001:501:8a29:ffff:ffff:ffff:ffff:ffff,US
+2001:501:973c::,2001:501:973c:ffff:ffff:ffff:ffff:ffff,US
+2001:501:b1f9::,2001:501:b1f9:ffff:ffff:ffff:ffff:ffff,US
+2001:502:8cc::,2001:502:8cc:ffff:ffff:ffff:ffff:ffff,US
+2001:502:100e::,2001:502:100e:ffff:ffff:ffff:ffff:ffff,US
+2001:502:1ca1::,2001:502:1ca1:ffff:ffff:ffff:ffff:ffff,US
+2001:502:2eda::,2001:502:2eda:ffff:ffff:ffff:ffff:ffff,US
+2001:502:4612::,2001:502:4612:ffff:ffff:ffff:ffff:ffff,US
+2001:502:63bd::,2001:502:63bd:ffff:ffff:ffff:ffff:ffff,US
+2001:502:7094::,2001:502:7094:ffff:ffff:ffff:ffff:ffff,US
+2001:502:7a71::,2001:502:7a71:ffff:ffff:ffff:ffff:ffff,US
+2001:502:8c25::,2001:502:8c25:ffff:ffff:ffff:ffff:ffff,US
+2001:502:ad09::,2001:502:ad09:ffff:ffff:ffff:ffff:ffff,US
+2001:502:be98::,2001:502:be98:ffff:ffff:ffff:ffff:ffff,US
+2001:502:cbe4::,2001:502:cbe4:ffff:ffff:ffff:ffff:ffff,US
+2001:502:cfb5::,2001:502:cfb5:ffff:ffff:ffff:ffff:ffff,US
+2001:502:d399::,2001:502:d399:ffff:ffff:ffff:ffff:ffff,US
+2001:502:f3ff::,2001:502:f3ff:ffff:ffff:ffff:ffff:ffff,US
+2001:503:c27::,2001:503:c27:ffff:ffff:ffff:ffff:ffff,US
+2001:503:d2d::,2001:503:d2d:ffff:ffff:ffff:ffff:ffff,US
+2001:503:231d::,2001:503:231d:ffff:ffff:ffff:ffff:ffff,US
+2001:503:3227::,2001:503:3227:ffff:ffff:ffff:ffff:ffff,US
+2001:503:39c1::,2001:503:39c1:ffff:ffff:ffff:ffff:ffff,US
+2001:503:4872::,2001:503:4872:ffff:ffff:ffff:ffff:ffff,US
+2001:503:5419::,2001:503:5419:ffff:ffff:ffff:ffff:ffff,US
+2001:503:5ae2::,2001:503:5ae2:ffff:ffff:ffff:ffff:ffff,US
+2001:503:6810::,2001:503:6810:ffff:ffff:ffff:ffff:ffff,US
+2001:503:7bbb::,2001:503:7bbb:ffff:ffff:ffff:ffff:ffff,US
+2001:503:7bbf::,2001:503:7bbf:ffff:ffff:ffff:ffff:ffff,US
+2001:503:8028::,2001:503:8028:ffff:ffff:ffff:ffff:ffff,US
+2001:503:83eb::,2001:503:83eb:ffff:ffff:ffff:ffff:ffff,US
+2001:503:91ef::,2001:503:91ef:ffff:ffff:ffff:ffff:ffff,US
+2001:503:a124::,2001:503:a124:ffff:ffff:ffff:ffff:ffff,US
+2001:503:a83e::,2001:503:a83e:ffff:ffff:ffff:ffff:ffff,US
+2001:503:ba3e::,2001:503:ba3e:ffff:ffff:ffff:ffff:ffff,US
+2001:503:bfb0::,2001:503:bfb0:ffff:ffff:ffff:ffff:ffff,US
+2001:503:c779::,2001:503:c779:ffff:ffff:ffff:ffff:ffff,US
+2001:503:cc2c::,2001:503:cc2c:ffff:ffff:ffff:ffff:ffff,US
+2001:503:d1ae::,2001:503:d1ae:ffff:ffff:ffff:ffff:ffff,US
+2001:503:d414::,2001:503:d414:ffff:ffff:ffff:ffff:ffff,US
+2001:503:e239::,2001:503:e239:ffff:ffff:ffff:ffff:ffff,US
+2001:503:e8ef::,2001:503:e8ef:ffff:ffff:ffff:ffff:ffff,US
+2001:503:eea3::,2001:503:eea3:ffff:ffff:ffff:ffff:ffff,US
+2001:503:f189::,2001:503:f189:ffff:ffff:ffff:ffff:ffff,US
+2001:503:f261::,2001:503:f261:ffff:ffff:ffff:ffff:ffff,US
+2001:503:f3da::,2001:503:f3da:ffff:ffff:ffff:ffff:ffff,US
+2001:503:ff39::,2001:503:ff39:ffff:ffff:ffff:ffff:ffff,US
+2001:504::,2001:504:13:ffff:ffff:ffff:ffff:ffff,US
+2001:504:15::,2001:504:15:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:16::,2001:504:19:ffff:ffff:ffff:ffff:ffff,US
+2001:504:1a::,2001:504:1a:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:1b::,2001:504:1c:ffff:ffff:ffff:ffff:ffff,US
+2001:504:1d::,2001:504:1d:ffff:ffff:ffff:ffff:ffff,PR
+2001:504:20::,2001:504:23:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:24::,2001:504:24:ffff:ffff:ffff:ffff:ffff,US
+2001:504:25::,2001:504:26:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:27::,2001:504:2a:ffff:ffff:ffff:ffff:ffff,US
+2001:504:2b::,2001:504:2d:ffff:ffff:ffff:ffff:ffff,CA
+2001:504:2e::,2001:504:2e:ffff:ffff:ffff:ffff:ffff,US
+2001:504:2f::,2001:504:2f:ffff:ffff:ffff:ffff:ffff,CA
+2001:506::,2001:506:1:ffff:ffff:ffff:ffff:ffff,US
+2001:506:8::,2001:506:8:ffff:ffff:ffff:ffff:ffff,US
+2001:506:20::,2001:506:20:ffff:ffff:ffff:ffff:ffff,CA
+2001:506:28::,2001:506:28:ffff:ffff:ffff:ffff:ffff,US
+2001:506:100::,2001:506:100:ffff:ffff:ffff:ffff:ffff,US
+2001:506:1000::,2001:506:2fff:ffff:ffff:ffff:ffff:ffff,US
+2001:506:4000::,2001:506:7fff:ffff:ffff:ffff:ffff:ffff,US
+2001:508::,2001:508:ffff:ffff:ffff:ffff:ffff:ffff,BM
+2001:510::,2001:510:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:518::,2001:518:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:520::,2001:520:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:528::,2001:528:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:530::,2001:530:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:538::,2001:538:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:540::,2001:540:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:548::,2001:548:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:550::,2001:550:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:558::,2001:560:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:568::,2001:56f:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:570::,2001:570:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:578::,2001:57b:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:580::,2001:580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:590::,2001:590:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:598::,2001:598:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5a0::,2001:5a0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5a8::,2001:5a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5b0::,2001:5b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5b8::,2001:5b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5c0::,2001:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:5c8::,2001:5c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5d0::,2001:5d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5d8::,2001:5d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5e0::,2001:5e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5e8::,2001:5e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5f0::,2001:5f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:5f8::,2001:5f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:608::,2001:608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:610::,2001:610:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:618::,2001:618:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:620::,2001:620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:628::,2001:62f:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:630::,2001:630:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:638::,2001:638:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:640::,2001:640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:648::,2001:648:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:650::,2001:658:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:660::,2001:667:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:668::,2001:66f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:670::,2001:673:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:678:1::,2001:678:1:ffff:ffff:ffff:ffff:ffff,CZ
+2001:678:2::,2001:678:2:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:3::,2001:678:3:ffff:ffff:ffff:ffff:ffff,CH
+2001:678:4::,2001:678:5:ffff:ffff:ffff:ffff:ffff,GB
+2001:678:6::,2001:678:6:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:7::,2001:678:7:ffff:ffff:ffff:ffff:ffff,GR
+2001:678:8::,2001:678:8:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:9::,2001:678:a:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:b::,2001:678:b:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:c::,2001:678:c:ffff:ffff:ffff:ffff:ffff,FR
+2001:678:d::,2001:678:d:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:e::,2001:678:e:ffff:ffff:ffff:ffff:ffff,DE
+2001:678:f::,2001:678:11:ffff:ffff:ffff:ffff:ffff,CZ
+2001:678:12::,2001:678:12:ffff:ffff:ffff:ffff:ffff,IT
+2001:678:13::,2001:678:18:ffff:ffff:ffff:ffff:ffff,RU
+2001:678:19::,2001:678:19:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:1a::,2001:678:1a:ffff:ffff:ffff:ffff:ffff,DK
+2001:678:1b::,2001:678:1b:ffff:ffff:ffff:ffff:ffff,LU
+2001:678:1c::,2001:678:1c:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:20::,2001:678:20:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:24::,2001:678:24:ffff:ffff:ffff:ffff:ffff,AT
+2001:678:28::,2001:678:28:ffff:ffff:ffff:ffff:ffff,SM
+2001:678:2c::,2001:678:2c:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:30::,2001:678:30:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:34::,2001:678:34:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:38::,2001:678:38:ffff:ffff:ffff:ffff:ffff,NL
+2001:678:3c::,2001:678:3c:ffff:ffff:ffff:ffff:ffff,BG
+2001:678:40::,2001:678:40:ffff:ffff:ffff:ffff:ffff,ES
+2001:678:44::,2001:678:44:ffff:ffff:ffff:ffff:ffff,ES
+2001:678:48::,2001:678:48:ffff:ffff:ffff:ffff:ffff,ES
+2001:678:4c::,2001:678:4c:ffff:ffff:ffff:ffff:ffff,FR
+2001:678:60::,2001:678:60:ffff:ffff:ffff:ffff:ffff,LU
+2001:678:64::,2001:678:64:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:68::,2001:678:68:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:6c::,2001:678:6c:ffff:ffff:ffff:ffff:ffff,BE
+2001:678:70::,2001:678:70:ffff:ffff:ffff:ffff:ffff,SK
+2001:678:74::,2001:678:74:ffff:ffff:ffff:ffff:ffff,DK
+2001:678:78::,2001:678:78:ffff:ffff:ffff:ffff:ffff,DK
+2001:678:7c::,2001:678:7c:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:80::,2001:678:80:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:84::,2001:678:84:ffff:ffff:ffff:ffff:ffff,LV
+2001:678:88::,2001:678:88:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:8c::,2001:678:8c:ffff:ffff:ffff:ffff:ffff,LT
+2001:678:90::,2001:678:90:ffff:ffff:ffff:ffff:ffff,SK
+2001:678:94::,2001:678:94:ffff:ffff:ffff:ffff:ffff,EE
+2001:678:98::,2001:678:98:ffff:ffff:ffff:ffff:ffff,KZ
+2001:67c::,2001:67c::ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:4::,2001:67c:4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:8::,2001:67c:8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:c::,2001:67c:c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:10::,2001:67c:10:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:14::,2001:67c:14:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18::,2001:67c:18:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1c::,2001:67c:1c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:20::,2001:67c:20:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:24::,2001:67c:24:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c::,2001:67c:2c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:30::,2001:67c:30:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:34::,2001:67c:34:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:38::,2001:67c:38:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:40::,2001:67c:40:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:44::,2001:67c:44:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:4c::,2001:67c:4c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:50::,2001:67c:50:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:54::,2001:67c:54:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:58::,2001:67c:58:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:5c::,2001:67c:5c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:60::,2001:67c:60:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:64::,2001:67c:64:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:68::,2001:67c:68:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:6c::,2001:67c:6c:ffff:ffff:ffff:ffff:ffff,IS
+2001:67c:70::,2001:67c:70:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:74::,2001:67c:74:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:78::,2001:67c:78:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:84::,2001:67c:84:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:88::,2001:67c:88:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:8c::,2001:67c:8c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:90::,2001:67c:90:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:94::,2001:67c:94:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:98::,2001:67c:98:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:9c::,2001:67c:9c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:a0::,2001:67c:a0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:a4::,2001:67c:a4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:a8::,2001:67c:a8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:ac::,2001:67c:ac:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:b0::,2001:67c:b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:b4::,2001:67c:b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:b8::,2001:67c:b8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:bc::,2001:67c:bc:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:c4::,2001:67c:c4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:c8::,2001:67c:c8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:cc::,2001:67c:cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:d0::,2001:67c:d0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:d4::,2001:67c:d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:d8::,2001:67c:d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:dc::,2001:67c:dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:e0::,2001:67c:e0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:e4::,2001:67c:e4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:e8::,2001:67c:e8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:ec::,2001:67c:ec:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:f0::,2001:67c:f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:f4::,2001:67c:f4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:f8::,2001:67c:f8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:fc::,2001:67c:fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:100::,2001:67c:100:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:108::,2001:67c:108:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:10c::,2001:67c:10c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:110::,2001:67c:110:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:114::,2001:67c:114:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:118::,2001:67c:118:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:11c::,2001:67c:11c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:120::,2001:67c:120:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:124::,2001:67c:124:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:128::,2001:67c:128:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:12c::,2001:67c:12c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:130::,2001:67c:130:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:134::,2001:67c:134:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:138::,2001:67c:138:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:13c::,2001:67c:13c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:140::,2001:67c:140:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:148::,2001:67c:148:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:14c::,2001:67c:14d:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:154::,2001:67c:154:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:158::,2001:67c:158:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:15c::,2001:67c:15c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:160::,2001:67c:160:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:164::,2001:67c:164:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:168::,2001:67c:168:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:170::,2001:67c:170:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:174::,2001:67c:174:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:178::,2001:67c:178:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:17c::,2001:67c:17c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:180::,2001:67c:180:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:184::,2001:67c:184:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:188::,2001:67c:188:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:18c::,2001:67c:18c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:190::,2001:67c:190:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:194::,2001:67c:194:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19c::,2001:67c:19c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1a0::,2001:67c:1a0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1a4::,2001:67c:1a4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1a8::,2001:67c:1a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1ac::,2001:67c:1ac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b0::,2001:67c:1b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b4::,2001:67c:1b4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b8::,2001:67c:1b8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1bc::,2001:67c:1bc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1c0::,2001:67c:1c0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1c4::,2001:67c:1c4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1c8::,2001:67c:1c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1cc::,2001:67c:1cc:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1d0::,2001:67c:1d0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1d4::,2001:67c:1d4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1d8::,2001:67c:1d8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1dc::,2001:67c:1dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1e0::,2001:67c:1e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1e4::,2001:67c:1e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1e8::,2001:67c:1e8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1ec::,2001:67c:1ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1f0::,2001:67c:1f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1f4::,2001:67c:1f4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1f8::,2001:67c:1f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1fc::,2001:67c:1fc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:200::,2001:67c:200:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:204::,2001:67c:204:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:208::,2001:67c:208:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:20c::,2001:67c:20c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:210::,2001:67c:210:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:214::,2001:67c:214:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:218::,2001:67c:218:ffff:ffff:ffff:ffff:ffff,LT
+2001:67c:21c::,2001:67c:21c:ffff:ffff:ffff:ffff:ffff,AM
+2001:67c:220::,2001:67c:220:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:224::,2001:67c:224:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:228::,2001:67c:228:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:22c::,2001:67c:22c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:230::,2001:67c:230:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:234::,2001:67c:234:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:238::,2001:67c:238:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23c::,2001:67c:23c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:240::,2001:67c:240:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:244::,2001:67c:244:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:248::,2001:67c:248:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:24c::,2001:67c:24c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:250::,2001:67c:250:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:254::,2001:67c:254:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:258::,2001:67c:258:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:25c::,2001:67c:25c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:260::,2001:67c:260:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:264::,2001:67c:264:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:268::,2001:67c:268:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:26c::,2001:67c:26c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:270::,2001:67c:270:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:274::,2001:67c:274:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:278::,2001:67c:278:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:27c::,2001:67c:27c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:280::,2001:67c:280:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:284::,2001:67c:284:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:288::,2001:67c:288:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:28c::,2001:67c:28c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:294::,2001:67c:294:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:298::,2001:67c:298:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:29c::,2001:67c:29c:ffff:ffff:ffff:ffff:ffff,IT
+2001:67c:2a0::,2001:67c:2a0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a4::,2001:67c:2a4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a8::,2001:67c:2a8:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2ac::,2001:67c:2ac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b0::,2001:67c:2b0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2b8::,2001:67c:2b8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2bc::,2001:67c:2bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2c0::,2001:67c:2c0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2c4::,2001:67c:2c4:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2c8::,2001:67c:2c8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2cc::,2001:67c:2cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2d0::,2001:67c:2d0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d4::,2001:67c:2d4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2d8::,2001:67c:2d8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2dc::,2001:67c:2dc:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2e0::,2001:67c:2e0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2e4::,2001:67c:2e4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2e8::,2001:67c:2e8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2ec::,2001:67c:2ec:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2f4::,2001:67c:2f4:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:2f8::,2001:67c:2f8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2fc::,2001:67c:2fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:300::,2001:67c:300:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:304::,2001:67c:304:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:308::,2001:67c:308:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:30c::,2001:67c:30c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:310::,2001:67c:310:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:314::,2001:67c:314:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:318::,2001:67c:318:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:31c::,2001:67c:31c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:324::,2001:67c:324:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:328::,2001:67c:328:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:32c::,2001:67c:32c:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:330::,2001:67c:330:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:334::,2001:67c:334:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:338::,2001:67c:338:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:33c::,2001:67c:33c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:340::,2001:67c:340:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:344::,2001:67c:344:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:348::,2001:67c:348:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:34c::,2001:67c:34c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:350::,2001:67c:350:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:354::,2001:67c:354:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:358::,2001:67c:358:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:35c::,2001:67c:35c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:360::,2001:67c:360:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:364::,2001:67c:364:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:368::,2001:67c:368:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:36c::,2001:67c:36c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:370::,2001:67c:370:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:374::,2001:67c:374:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:37c::,2001:67c:37c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:380::,2001:67c:380:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:384::,2001:67c:384:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:388::,2001:67c:388:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:38c::,2001:67c:38c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:390::,2001:67c:390:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:394::,2001:67c:394:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:398::,2001:67c:398:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:39c::,2001:67c:39c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:3a0::,2001:67c:3a0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3a4::,2001:67c:3a4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3a8::,2001:67c:3a8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:3ac::,2001:67c:3ac:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:3b0::,2001:67c:3b0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:3b4::,2001:67c:3b4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:3b8::,2001:67c:3b8:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:3bc::,2001:67c:3bc:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:3c0::,2001:67c:3c0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:3c4::,2001:67c:3c4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:3c8::,2001:67c:3c8:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:3cc::,2001:67c:3cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:3d0::,2001:67c:3d0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:3d4::,2001:67c:3d4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:3d8::,2001:67c:3d8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3dc::,2001:67c:3dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3e0::,2001:67c:3e0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3e4::,2001:67c:3e4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3e8::,2001:67c:3e9:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:3f0::,2001:67c:3f0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:3f4::,2001:67c:3f4:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:3f8::,2001:67c:3f8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:3fc::,2001:67c:3fc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:400::,2001:67c:400:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:404::,2001:67c:404:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:408::,2001:67c:408:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:40c::,2001:67c:40c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:410::,2001:67c:410:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:414::,2001:67c:414:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:418::,2001:67c:418:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:41c::,2001:67c:41c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:420::,2001:67c:420:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:424::,2001:67c:424:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:428::,2001:67c:428:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:42c::,2001:67c:42c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:430::,2001:67c:430:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:434::,2001:67c:434:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:438::,2001:67c:438:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:43c::,2001:67c:43c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:440::,2001:67c:440:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:444::,2001:67c:444:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:448::,2001:67c:448:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:44c::,2001:67c:44c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:450::,2001:67c:450:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:454::,2001:67c:454:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:458::,2001:67c:458:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:45c::,2001:67c:45c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:460::,2001:67c:460:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:464::,2001:67c:464:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:468::,2001:67c:468:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:46c::,2001:67c:46c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:470::,2001:67c:470:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:474::,2001:67c:474:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:478::,2001:67c:478:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:47c::,2001:67c:47c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:480::,2001:67c:480:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:484::,2001:67c:484:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:488::,2001:67c:488:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:48c::,2001:67c:48c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:490::,2001:67c:490:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:494::,2001:67c:494:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:498::,2001:67c:498:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:49c::,2001:67c:49c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4a0::,2001:67c:4a0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4a4::,2001:67c:4a4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4a8::,2001:67c:4a8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:4ac::,2001:67c:4ac:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:4b0::,2001:67c:4b0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:4b4::,2001:67c:4b4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:4b8::,2001:67c:4b8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:4bc::,2001:67c:4bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4c0::,2001:67c:4c0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:4c4::,2001:67c:4c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4c8::,2001:67c:4c8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4cc::,2001:67c:4cc:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:4d0::,2001:67c:4d0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4d4::,2001:67c:4d4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:4d8::,2001:67c:4d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4dc::,2001:67c:4dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:4e0::,2001:67c:4e0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:4e4::,2001:67c:4e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:4e8::,2001:67c:4e8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:4ec::,2001:67c:4ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:4f0::,2001:67c:4f0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:4f4::,2001:67c:4f4:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:4f8::,2001:67c:4f8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:4fc::,2001:67c:4fc:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:500::,2001:67c:500:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:504::,2001:67c:504:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:508::,2001:67c:508:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:50c::,2001:67c:50c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:510::,2001:67c:510:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:514::,2001:67c:514:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:518::,2001:67c:518:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:51c::,2001:67c:51c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:520::,2001:67c:520:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:524::,2001:67c:524:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:528::,2001:67c:528:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:530::,2001:67c:530:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:534::,2001:67c:534:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:538::,2001:67c:538:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:53c::,2001:67c:53c:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:540::,2001:67c:540:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:544::,2001:67c:544:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:548::,2001:67c:548:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:54c::,2001:67c:54c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:550::,2001:67c:550:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:554::,2001:67c:554:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:558::,2001:67c:558:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:55c::,2001:67c:55c:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:560::,2001:67c:560:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:564::,2001:67c:564:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:568::,2001:67c:568:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:56c::,2001:67c:56c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:570::,2001:67c:570:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:574::,2001:67c:574:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:578::,2001:67c:578:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:57c::,2001:67c:57c:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:580::,2001:67c:580:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:584::,2001:67c:584:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:588::,2001:67c:588:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:58c::,2001:67c:58c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:590::,2001:67c:590:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:594::,2001:67c:594:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:598::,2001:67c:598:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:59c::,2001:67c:59c:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:5a0::,2001:67c:5a1:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:5a8::,2001:67c:5a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:5ac::,2001:67c:5ac:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:5b0::,2001:67c:5b0:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:5b4::,2001:67c:5b4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:5b8::,2001:67c:5b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:5bc::,2001:67c:5bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5c0::,2001:67c:5c0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:5c4::,2001:67c:5c4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:5c8::,2001:67c:5c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:5cc::,2001:67c:5cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5d0::,2001:67c:5d0:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:5d4::,2001:67c:5d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5d8::,2001:67c:5d8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:5dc::,2001:67c:5dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:5e0::,2001:67c:5e0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:5e4::,2001:67c:5e4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5e8::,2001:67c:5e8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:5ec::,2001:67c:5ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:5f0::,2001:67c:5f0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:5f4::,2001:67c:5f4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:5f8::,2001:67c:5f8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:5fc::,2001:67c:5fc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:600::,2001:67c:600:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1000::,2001:67c:1001:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1008::,2001:67c:1009:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1010::,2001:67c:1011:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1018::,2001:67c:1019:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1020::,2001:67c:1021:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1028::,2001:67c:1029:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1030::,2001:67c:1030:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1034::,2001:67c:1034:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1038::,2001:67c:1038:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:103c::,2001:67c:103c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1040::,2001:67c:1040:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1044::,2001:67c:1044:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1048::,2001:67c:1048:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:104c::,2001:67c:104c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1050::,2001:67c:1050:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1054::,2001:67c:1054:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1058::,2001:67c:1058:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:105c::,2001:67c:105c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1060::,2001:67c:1060:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:1064::,2001:67c:1064:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1068::,2001:67c:1068:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:106c::,2001:67c:106c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1070::,2001:67c:1071:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1078::,2001:67c:1078:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:107c::,2001:67c:107c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1080::,2001:67c:1080:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1084::,2001:67c:1084:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1090::,2001:67c:1090:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1098::,2001:67c:1098:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:109c::,2001:67c:109c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10a0::,2001:67c:10a0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10a4::,2001:67c:10a4:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:10a8::,2001:67c:10a9:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:10b0::,2001:67c:10b0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:10b4::,2001:67c:10b4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:10b8::,2001:67c:10b8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10bc::,2001:67c:10bc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10c0::,2001:67c:10c0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10c4::,2001:67c:10c4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10c8::,2001:67c:10c8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10cc::,2001:67c:10cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10d0::,2001:67c:10d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10d4::,2001:67c:10d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10d8::,2001:67c:10d8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:10dc::,2001:67c:10dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10e0::,2001:67c:10e0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10e4::,2001:67c:10e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:10e8::,2001:67c:10e8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:10ec::,2001:67c:10ec:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:10f0::,2001:67c:10f0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:10f4::,2001:67c:10f4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:10f8::,2001:67c:10f8:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:10fc::,2001:67c:10fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1100::,2001:67c:1100:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1104::,2001:67c:1104:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1108::,2001:67c:1109:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1110::,2001:67c:1111:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1118::,2001:67c:1118:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:111c::,2001:67c:111c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1120::,2001:67c:1120:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1124::,2001:67c:1124:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1128::,2001:67c:1128:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:112c::,2001:67c:112c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1130::,2001:67c:1130:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1134::,2001:67c:1134:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1138::,2001:67c:1138:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:113c::,2001:67c:113c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1140::,2001:67c:1140:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1144::,2001:67c:1144:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1148::,2001:67c:1148:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:114c::,2001:67c:114c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1150::,2001:67c:1150:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:1154::,2001:67c:1154:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:1158::,2001:67c:1158:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:115c::,2001:67c:115c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1160::,2001:67c:1160:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1164::,2001:67c:1164:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:116c::,2001:67c:116c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1170::,2001:67c:1170:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1174::,2001:67c:1174:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1178::,2001:67c:1178:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:117c::,2001:67c:117c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1180::,2001:67c:1180:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1184::,2001:67c:1184:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:1188::,2001:67c:1188:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:118c::,2001:67c:118c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1190::,2001:67c:1190:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1194::,2001:67c:1194:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1198::,2001:67c:1199:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:11a0::,2001:67c:11a0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:11a4::,2001:67c:11a4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:11a8::,2001:67c:11a8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:11ac::,2001:67c:11ac:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:11b0::,2001:67c:11b0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:11b4::,2001:67c:11b4:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:11b8::,2001:67c:11b8:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:11bc::,2001:67c:11bc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:11c0::,2001:67c:11c0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:11c4::,2001:67c:11c4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:11c8::,2001:67c:11c8:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:11cc::,2001:67c:11cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:11d0::,2001:67c:11d0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:11d4::,2001:67c:11d4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:11d8::,2001:67c:11d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:11dc::,2001:67c:11dc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:11e0::,2001:67c:11e0:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:11e4::,2001:67c:11e4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:11e8::,2001:67c:11e8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:11ec::,2001:67c:11ec:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:11f4::,2001:67c:11f4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:11f8::,2001:67c:11f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:11fc::,2001:67c:11fc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1200::,2001:67c:1203:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1210::,2001:67c:1213:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1220::,2001:67c:1223:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1230::,2001:67c:1233:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1240::,2001:67c:1240:ffff:ffff:ffff:ffff:ffff,IE
+2001:67c:1244::,2001:67c:1244:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1248::,2001:67c:1248:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:124c::,2001:67c:124c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1250::,2001:67c:1250:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:1254::,2001:67c:1254:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:125c::,2001:67c:125c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1260::,2001:67c:1260:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1264::,2001:67c:1264:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1268::,2001:67c:1268:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:126c::,2001:67c:126c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1270::,2001:67c:1270:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1274::,2001:67c:1274:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1278::,2001:67c:1278:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1280::,2001:67c:1280:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1284::,2001:67c:1284:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1288::,2001:67c:1288:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:128c::,2001:67c:128c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1294::,2001:67c:1294:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:129c::,2001:67c:129c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:12a0::,2001:67c:12a0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:12a4::,2001:67c:12a4:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:12a8::,2001:67c:12a8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:12ac::,2001:67c:12ac:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:12b0::,2001:67c:12b0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:12b4::,2001:67c:12b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:12b8::,2001:67c:12b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:12bc::,2001:67c:12bc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:12c0::,2001:67c:12c1:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:12c8::,2001:67c:12c8:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:12cc::,2001:67c:12cc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:12d0::,2001:67c:12d0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:12d4::,2001:67c:12d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:12d8::,2001:67c:12d8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:12dc::,2001:67c:12dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:12e0::,2001:67c:12e0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:12e4::,2001:67c:12e4:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:12e8::,2001:67c:12e9:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:12f0::,2001:67c:12f0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:12f4::,2001:67c:12f4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:12f8::,2001:67c:12f8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:12fc::,2001:67c:12fc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1300::,2001:67c:1300:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1304::,2001:67c:1304:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1308::,2001:67c:1308:ffff:ffff:ffff:ffff:ffff,MD
+2001:67c:130c::,2001:67c:130c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1310::,2001:67c:1310:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1314::,2001:67c:1314:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1318::,2001:67c:1318:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:131c::,2001:67c:131c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1320::,2001:67c:1320:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1324::,2001:67c:1324:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1328::,2001:67c:1328:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:132c::,2001:67c:132c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1330::,2001:67c:1330:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1334::,2001:67c:1334:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1338::,2001:67c:1338:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:133c::,2001:67c:133c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1340::,2001:67c:1340:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:1344::,2001:67c:1344:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1348::,2001:67c:1348:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:134c::,2001:67c:134c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1350::,2001:67c:1350:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:1354::,2001:67c:1354:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1358::,2001:67c:1358:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:135c::,2001:67c:135c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1360::,2001:67c:1360:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1364::,2001:67c:1364:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1368::,2001:67c:1368:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:136c::,2001:67c:136c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1370::,2001:67c:1370:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1374::,2001:67c:1374:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1378::,2001:67c:1378:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:137c::,2001:67c:137c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:1380::,2001:67c:1380:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1384::,2001:67c:1384:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1388::,2001:67c:1388:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:138c::,2001:67c:138c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1390::,2001:67c:1390:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1394::,2001:67c:1394:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1398::,2001:67c:1398:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:139c::,2001:67c:139c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:13a0::,2001:67c:13a0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:13a4::,2001:67c:13a4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13a8::,2001:67c:13a8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:13ac::,2001:67c:13ac:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:13b0::,2001:67c:13b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:13b4::,2001:67c:13b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:13b8::,2001:67c:13b8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:13bc::,2001:67c:13bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:13c0::,2001:67c:13c0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:13c4::,2001:67c:13c4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:13c8::,2001:67c:13c8:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:13cc::,2001:67c:13cc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:13d0::,2001:67c:13d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13d4::,2001:67c:13d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:13d8::,2001:67c:13d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:13e0::,2001:67c:13e0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:13e4::,2001:67c:13e4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13e8::,2001:67c:13e8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:13ec::,2001:67c:13ec:ffff:ffff:ffff:ffff:ffff,PT
+2001:67c:13f0::,2001:67c:13f0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:13f4::,2001:67c:13f4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:13f8::,2001:67c:13f8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:13fc::,2001:67c:13fc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1400::,2001:67c:1407:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1420::,2001:67c:1427:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1440::,2001:67c:1447:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1460::,2001:67c:1467:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1480::,2001:67c:1480:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1484::,2001:67c:1484:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1488::,2001:67c:1488:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:148c::,2001:67c:148c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1490::,2001:67c:1490:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1494::,2001:67c:1494:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1498::,2001:67c:1498:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:149c::,2001:67c:149c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:14a0::,2001:67c:14a0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:14a4::,2001:67c:14a4:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:14a8::,2001:67c:14a8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:14ac::,2001:67c:14ac:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:14b0::,2001:67c:14b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:14b4::,2001:67c:14b4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:14b8::,2001:67c:14b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:14bc::,2001:67c:14bc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:14c4::,2001:67c:14c4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:14d0::,2001:67c:14d0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:14d4::,2001:67c:14d4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:14d8::,2001:67c:14d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:14dc::,2001:67c:14dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:14e0::,2001:67c:14e7:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1500::,2001:67c:1500:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1504::,2001:67c:1504:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1508::,2001:67c:1508:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:150c::,2001:67c:150c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1510::,2001:67c:1510:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1514::,2001:67c:1514:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1518::,2001:67c:1518:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:151c::,2001:67c:151c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1520::,2001:67c:1520:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1524::,2001:67c:1524:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1528::,2001:67c:1528:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:152c::,2001:67c:152c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1530::,2001:67c:1530:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1534::,2001:67c:1534:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1538::,2001:67c:1538:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:153c::,2001:67c:153c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1540::,2001:67c:1540:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1544::,2001:67c:1544:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:154c::,2001:67c:154c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1554::,2001:67c:1554:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:1558::,2001:67c:1558:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:155c::,2001:67c:155c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1560::,2001:67c:1563:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1570::,2001:67c:1570:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1574::,2001:67c:1574:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1578::,2001:67c:1578:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:157c::,2001:67c:157c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1580::,2001:67c:1580:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1584::,2001:67c:1584:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:158c::,2001:67c:158c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1590::,2001:67c:1591:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1598::,2001:67c:1598:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:159c::,2001:67c:159c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:15a0::,2001:67c:15a3:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:15b0::,2001:67c:15b0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:15b8::,2001:67c:15b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:15bc::,2001:67c:15bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15c0::,2001:67c:15c0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:15c4::,2001:67c:15c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15c8::,2001:67c:15c8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15cc::,2001:67c:15cc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:15d0::,2001:67c:15d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:15d4::,2001:67c:15d4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15d8::,2001:67c:15d8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:15dc::,2001:67c:15dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:15e0::,2001:67c:15e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:15e4::,2001:67c:15e4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:15e8::,2001:67c:15e8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15ec::,2001:67c:15ec:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:15f0::,2001:67c:15f0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:15f4::,2001:67c:15f4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:15f8::,2001:67c:15f8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:15fc::,2001:67c:15fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1600::,2001:67c:160f:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1640::,2001:67c:164f:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1680::,2001:67c:1680:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1684::,2001:67c:1684:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1688::,2001:67c:1688:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:168c::,2001:67c:168c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1690::,2001:67c:1690:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1694::,2001:67c:1694:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1698::,2001:67c:1698:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:169c::,2001:67c:169c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:16a0::,2001:67c:16a0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:16a4::,2001:67c:16a4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:16a8::,2001:67c:16a8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:16ac::,2001:67c:16ac:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:16b0::,2001:67c:16b0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:16b4::,2001:67c:16b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:16b8::,2001:67c:16b8:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:16bc::,2001:67c:16bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:16c0::,2001:67c:16c0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:16c4::,2001:67c:16c4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:16c8::,2001:67c:16c8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:16d0::,2001:67c:16d1:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:16d8::,2001:67c:16d8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:16dc::,2001:67c:16dc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:16e0::,2001:67c:16e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:16e4::,2001:67c:16e4:ffff:ffff:ffff:ffff:ffff,HR
+2001:67c:16e8::,2001:67c:16e8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:16ec::,2001:67c:16ec:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:16f0::,2001:67c:16f0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:16f4::,2001:67c:16f4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:16f8::,2001:67c:16f8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:16fc::,2001:67c:16fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1700::,2001:67c:1700:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1704::,2001:67c:1704:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1708::,2001:67c:1708:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:170c::,2001:67c:170c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1710::,2001:67c:1710:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1720::,2001:67c:1720:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1724::,2001:67c:1724:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1728::,2001:67c:1728:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:172c::,2001:67c:172c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1730::,2001:67c:1730:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1734::,2001:67c:1734:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1738::,2001:67c:1738:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:173c::,2001:67c:173c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1740::,2001:67c:1740:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1744::,2001:67c:1744:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1748::,2001:67c:1748:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:174c::,2001:67c:174c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1750::,2001:67c:1750:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1754::,2001:67c:1754:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1758::,2001:67c:1758:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:175c::,2001:67c:175c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1760::,2001:67c:1760:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1764::,2001:67c:1764:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1768::,2001:67c:1768:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:176c::,2001:67c:176c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1770::,2001:67c:1770:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1774::,2001:67c:1774:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:177c::,2001:67c:177c:ffff:ffff:ffff:ffff:ffff,LT
+2001:67c:1780::,2001:67c:1780:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1784::,2001:67c:1784:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1788::,2001:67c:1788:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:178c::,2001:67c:178c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1790::,2001:67c:1790:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1794::,2001:67c:1794:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1798::,2001:67c:1798:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:179c::,2001:67c:179c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17a0::,2001:67c:17a0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:17a8::,2001:67c:17a8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17ac::,2001:67c:17ac:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17b0::,2001:67c:17b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:17b4::,2001:67c:17b4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:17b8::,2001:67c:17b8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:17bc::,2001:67c:17bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17c0::,2001:67c:17c0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17c4::,2001:67c:17c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17c8::,2001:67c:17c8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:17cc::,2001:67c:17cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17d0::,2001:67c:17d0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:17d4::,2001:67c:17d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:17d8::,2001:67c:17d8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:17dc::,2001:67c:17dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17e0::,2001:67c:17e0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17e4::,2001:67c:17e4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:17e8::,2001:67c:17e8:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:17ec::,2001:67c:17ec:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:17f0::,2001:67c:17f0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17f4::,2001:67c:17f4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:17f8::,2001:67c:17f8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:17fc::,2001:67c:17fc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1800::,2001:67c:1800:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1804::,2001:67c:1804:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1808::,2001:67c:1809:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1810::,2001:67c:1810:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1814::,2001:67c:1814:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1818::,2001:67c:1818:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:181c::,2001:67c:181c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1820::,2001:67c:1820:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1828::,2001:67c:1828:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:182c::,2001:67c:182c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1830::,2001:67c:1830:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1834::,2001:67c:1834:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1838::,2001:67c:1838:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:183c::,2001:67c:183c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1840::,2001:67c:1840:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1844::,2001:67c:1844:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1848::,2001:67c:1848:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:184c::,2001:67c:184c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1850::,2001:67c:1850:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1854::,2001:67c:1854:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1858::,2001:67c:1858:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:185c::,2001:67c:185c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:1860::,2001:67c:1860:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1864::,2001:67c:1864:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1868::,2001:67c:1868:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:186c::,2001:67c:186c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1870::,2001:67c:1870:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1874::,2001:67c:1874:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1878::,2001:67c:1878:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:187c::,2001:67c:187c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1880::,2001:67c:1880:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1884::,2001:67c:1884:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1888::,2001:67c:1888:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:188c::,2001:67c:188c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1890::,2001:67c:1890:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1894::,2001:67c:1894:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1898::,2001:67c:1898:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:189c::,2001:67c:189c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:18a0::,2001:67c:18a0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:18a4::,2001:67c:18a4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:18a8::,2001:67c:18a8:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:18ac::,2001:67c:18ac:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:18b0::,2001:67c:18b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18b4::,2001:67c:18b4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:18b8::,2001:67c:18b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18bc::,2001:67c:18bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18c0::,2001:67c:18c0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:18c4::,2001:67c:18c4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:18c8::,2001:67c:18c9:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:18d0::,2001:67c:18d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:18d4::,2001:67c:18d4:ffff:ffff:ffff:ffff:ffff,NZ
+2001:67c:18d8::,2001:67c:18d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:18dc::,2001:67c:18dc:ffff:ffff:ffff:ffff:ffff,LI
+2001:67c:18e0::,2001:67c:18e0:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:18e4::,2001:67c:18e4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:18e8::,2001:67c:18e8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18ec::,2001:67c:18ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18f0::,2001:67c:18f0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:18f4::,2001:67c:18f4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:18f8::,2001:67c:18f8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:18fc::,2001:67c:18fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1900::,2001:67c:1903:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:1910::,2001:67c:1910:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1914::,2001:67c:1914:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1918::,2001:67c:1918:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:191c::,2001:67c:191c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1920::,2001:67c:1920:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1924::,2001:67c:1924:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1928::,2001:67c:1928:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:192c::,2001:67c:192c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1930::,2001:67c:1933:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1940::,2001:67c:1940:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1944::,2001:67c:1944:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1948::,2001:67c:1948:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:194c::,2001:67c:194c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1950::,2001:67c:1950:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1954::,2001:67c:1954:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1958::,2001:67c:1958:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:195c::,2001:67c:195c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:1960::,2001:67c:1960:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1964::,2001:67c:1964:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1968::,2001:67c:1968:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:196c::,2001:67c:196c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1970::,2001:67c:1970:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1974::,2001:67c:1974:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1978::,2001:67c:1978:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:197c::,2001:67c:197c:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:1980::,2001:67c:1980:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1984::,2001:67c:1984:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:1988::,2001:67c:1988:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:198c::,2001:67c:198c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1990::,2001:67c:1990:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1994::,2001:67c:1994:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1998::,2001:67c:1998:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:199c::,2001:67c:199c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:19a0::,2001:67c:19a0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19a4::,2001:67c:19a4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19a8::,2001:67c:19a8:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:19ac::,2001:67c:19ac:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:19b0::,2001:67c:19b3:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:19c0::,2001:67c:19c0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19c4::,2001:67c:19c4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:19c8::,2001:67c:19c8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:19cc::,2001:67c:19cc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19d0::,2001:67c:19d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19d4::,2001:67c:19d4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19d8::,2001:67c:19d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:19dc::,2001:67c:19dc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:19e0::,2001:67c:19e0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:19e4::,2001:67c:19e4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:19e8::,2001:67c:19e8:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:19ec::,2001:67c:19ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:19f0::,2001:67c:19f0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19f4::,2001:67c:19f4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19f8::,2001:67c:19f8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:19fc::,2001:67c:19fc:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1a00::,2001:67c:1a3f:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1b00::,2001:67c:1b00:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b04::,2001:67c:1b04:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b08::,2001:67c:1b08:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b0c::,2001:67c:1b0c:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:1b10::,2001:67c:1b10:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b14::,2001:67c:1b14:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1b18::,2001:67c:1b18:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b1c::,2001:67c:1b1c:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:1b20::,2001:67c:1b20:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b24::,2001:67c:1b24:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1b2c::,2001:67c:1b2c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b30::,2001:67c:1b30:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b34::,2001:67c:1b34:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b3c::,2001:67c:1b3c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:1b40::,2001:67c:1b43:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1b50::,2001:67c:1b50:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b54::,2001:67c:1b54:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b58::,2001:67c:1b59:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:1b60::,2001:67c:1b60:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b64::,2001:67c:1b64:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b6c::,2001:67c:1b6c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b70::,2001:67c:1b70:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:1b74::,2001:67c:1b74:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b78::,2001:67c:1b78:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b7c::,2001:67c:1b7c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b80::,2001:67c:1b80:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1b84::,2001:67c:1b84:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1b88::,2001:67c:1b88:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1b8c::,2001:67c:1b8c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b90::,2001:67c:1b90:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:1b94::,2001:67c:1b94:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1b98::,2001:67c:1b98:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1b9c::,2001:67c:1b9c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1ba4::,2001:67c:1ba4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1ba8::,2001:67c:1ba8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bb0::,2001:67c:1bb0:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1bb4::,2001:67c:1bb4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1bb8::,2001:67c:1bb8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bbc::,2001:67c:1bbc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:1bc0::,2001:67c:1bc0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1bc4::,2001:67c:1bc4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:1bc8::,2001:67c:1bc8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1bcc::,2001:67c:1bcc:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1bd0::,2001:67c:1bd0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:1bd4::,2001:67c:1bd4:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:1bd8::,2001:67c:1bd8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bdc::,2001:67c:1bdc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:1be0::,2001:67c:1be0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:1be4::,2001:67c:1be4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:1be8::,2001:67c:1be8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:1bec::,2001:67c:1bec:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:1bf4::,2001:67c:1bf4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:1bf8::,2001:67c:1bf8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:1bfc::,2001:67c:1bfc:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:1c00::,2001:67c:1cff:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2004::,2001:67c:2004:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2008::,2001:67c:2008:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:200c::,2001:67c:200c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2010::,2001:67c:2010:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2014::,2001:67c:2014:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2018::,2001:67c:2018:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2020::,2001:67c:2020:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2024::,2001:67c:2024:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2028::,2001:67c:2028:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:202c::,2001:67c:202c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2030::,2001:67c:2030:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2034::,2001:67c:2034:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2038::,2001:67c:2038:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:203c::,2001:67c:203c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2040::,2001:67c:2040:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:2044::,2001:67c:2044:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2048::,2001:67c:2048:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:204c::,2001:67c:204c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2050::,2001:67c:2050:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:205c::,2001:67c:205c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2060::,2001:67c:2060:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2064::,2001:67c:2064:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2068::,2001:67c:2068:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:206c::,2001:67c:206c:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2070::,2001:67c:2070:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2074::,2001:67c:2074:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2078::,2001:67c:2078:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:207c::,2001:67c:207c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2080::,2001:67c:2080:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2084::,2001:67c:2084:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2088::,2001:67c:2088:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:208c::,2001:67c:208c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20a0::,2001:67c:20a1:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:20a8::,2001:67c:20a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20ac::,2001:67c:20ac:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:20b0::,2001:67c:20b0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:20b4::,2001:67c:20b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:20b8::,2001:67c:20b9:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:20c0::,2001:67c:20c0:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:20c4::,2001:67c:20c4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20c8::,2001:67c:20c8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20cc::,2001:67c:20cc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:20d0::,2001:67c:20d1:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:20d8::,2001:67c:20d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:20dc::,2001:67c:20dc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:20e0::,2001:67c:20e0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:20e4::,2001:67c:20e4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:20e8::,2001:67c:20e8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:20ec::,2001:67c:20ec:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:20f0::,2001:67c:20f0:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:20f4::,2001:67c:20f4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:20f8::,2001:67c:20f8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:20fc::,2001:67c:20fc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2100::,2001:67c:2100:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2104::,2001:67c:2104:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2108::,2001:67c:2108:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:210c::,2001:67c:210c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2110::,2001:67c:2110:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2114::,2001:67c:2114:ffff:ffff:ffff:ffff:ffff,IS
+2001:67c:2118::,2001:67c:2118:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:211c::,2001:67c:211c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2120::,2001:67c:2120:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2124::,2001:67c:2124:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:2128::,2001:67c:2128:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:212c::,2001:67c:212c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2130::,2001:67c:2130:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2134::,2001:67c:2134:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2138::,2001:67c:2138:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:213c::,2001:67c:213c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2144::,2001:67c:2144:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2148::,2001:67c:2148:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:214c::,2001:67c:214c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2150::,2001:67c:2150:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2154::,2001:67c:2154:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2158::,2001:67c:2158:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:215c::,2001:67c:215c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2160::,2001:67c:2160:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2164::,2001:67c:2164:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:2168::,2001:67c:2168:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:216c::,2001:67c:216c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2170::,2001:67c:2170:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2174::,2001:67c:2174:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2178::,2001:67c:2178:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:217c::,2001:67c:217c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2180::,2001:67c:2180:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2188::,2001:67c:2188:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:218c::,2001:67c:218c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2190::,2001:67c:2190:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2194::,2001:67c:2194:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2198::,2001:67c:2198:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:219c::,2001:67c:219c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:21a0::,2001:67c:21a0:ffff:ffff:ffff:ffff:ffff,IT
+2001:67c:21a4::,2001:67c:21a4:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:21a8::,2001:67c:21a8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:21ac::,2001:67c:21ac:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:21b0::,2001:67c:21b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:21b4::,2001:67c:21b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:21b8::,2001:67c:21b8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:21bc::,2001:67c:21bc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:21c0::,2001:67c:21c0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:21c4::,2001:67c:21c4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:21c8::,2001:67c:21c8:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:21cc::,2001:67c:21cc:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:21d0::,2001:67c:21d0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:21d8::,2001:67c:21d8:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:21dc::,2001:67c:21dc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:21e0::,2001:67c:21e0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:21e4::,2001:67c:21e4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:21e8::,2001:67c:21e8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:21ec::,2001:67c:21ec:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:21f0::,2001:67c:21f0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:21f4::,2001:67c:21f4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:21f8::,2001:67c:21f8:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:21fc::,2001:67c:21fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2200::,2001:67c:2200:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2204::,2001:67c:2204:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2208::,2001:67c:2208:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:220c::,2001:67c:220c:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2210::,2001:67c:2210:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:2214::,2001:67c:2214:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2218::,2001:67c:2219:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2220::,2001:67c:2220:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2224::,2001:67c:2224:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2228::,2001:67c:2228:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:222c::,2001:67c:222c:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2234::,2001:67c:2234:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2238::,2001:67c:2238:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:223c::,2001:67c:223c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2240::,2001:67c:2240:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2244::,2001:67c:2244:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2248::,2001:67c:2248:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2250::,2001:67c:2250:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2254::,2001:67c:2254:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2258::,2001:67c:2258:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:225c::,2001:67c:225c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2260::,2001:67c:2260:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2264::,2001:67c:2264:ffff:ffff:ffff:ffff:ffff,KG
+2001:67c:2268::,2001:67c:2268:ffff:ffff:ffff:ffff:ffff,BY
+2001:67c:226c::,2001:67c:226c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2270::,2001:67c:2270:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2274::,2001:67c:2274:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2278::,2001:67c:2278:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:227c::,2001:67c:227c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2280::,2001:67c:2280:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2284::,2001:67c:2284:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2288::,2001:67c:2288:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:228c::,2001:67c:228c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2290::,2001:67c:2290:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2294::,2001:67c:2294:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:2298::,2001:67c:2298:ffff:ffff:ffff:ffff:ffff,US
+2001:67c:229c::,2001:67c:229c:ffff:ffff:ffff:ffff:ffff,GR
+2001:67c:22a0::,2001:67c:22a0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:22a4::,2001:67c:22a4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:22a8::,2001:67c:22a8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:22b0::,2001:67c:22b0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:22b4::,2001:67c:22b4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:22b8::,2001:67c:22b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22bc::,2001:67c:22bc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:22c0::,2001:67c:22c0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22c4::,2001:67c:22c4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:22c8::,2001:67c:22c8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22cc::,2001:67c:22cc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:22d0::,2001:67c:22d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:22d8::,2001:67c:22d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:22dc::,2001:67c:22dc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:22e0::,2001:67c:22e0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:22e4::,2001:67c:22e4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:22e8::,2001:67c:22e8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:22ec::,2001:67c:22ec:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:22f0::,2001:67c:22f0:ffff:ffff:ffff:ffff:ffff,RS
+2001:67c:22f8::,2001:67c:22f8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:22fc::,2001:67c:22fc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2300::,2001:67c:2300:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2304::,2001:67c:2304:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2308::,2001:67c:2308:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:230c::,2001:67c:230c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2310::,2001:67c:2310:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2314::,2001:67c:2314:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2318::,2001:67c:2318:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:231c::,2001:67c:231c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2320::,2001:67c:2320:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2324::,2001:67c:2324:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2328::,2001:67c:2328:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:232c::,2001:67c:232c:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:2330::,2001:67c:2330:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2334::,2001:67c:2334:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2338::,2001:67c:2338:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:233c::,2001:67c:233c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2340::,2001:67c:2340:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2348::,2001:67c:2348:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:234c::,2001:67c:234c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2354::,2001:67c:2354:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2358::,2001:67c:2358:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:235c::,2001:67c:235c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2360::,2001:67c:2360:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2364::,2001:67c:2364:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2368::,2001:67c:2368:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:236c::,2001:67c:236c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2370::,2001:67c:2370:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2374::,2001:67c:2374:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2378::,2001:67c:2378:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:237c::,2001:67c:237c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2380::,2001:67c:2380:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2384::,2001:67c:2384:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2388::,2001:67c:2388:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:238c::,2001:67c:238c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2394::,2001:67c:2394:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2398::,2001:67c:2398:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:239c::,2001:67c:239c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:23a0::,2001:67c:23a0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:23a4::,2001:67c:23a4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23a8::,2001:67c:23a8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:23b0::,2001:67c:23b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:23b4::,2001:67c:23b4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:23b8::,2001:67c:23b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:23bc::,2001:67c:23bc:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:23c0::,2001:67c:23c0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:23c4::,2001:67c:23c4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:23c8::,2001:67c:23c8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:23cc::,2001:67c:23cc:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23d4::,2001:67c:23d4:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:23d8::,2001:67c:23d9:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:23e4::,2001:67c:23e4:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:23e8::,2001:67c:23e8:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:23ec::,2001:67c:23ec:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:23f0::,2001:67c:23f0:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:23f4::,2001:67c:23f4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:23f8::,2001:67c:23f8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:23fc::,2001:67c:23fc:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:2400::,2001:67c:2400:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2404::,2001:67c:2404:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2408::,2001:67c:2408:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:240c::,2001:67c:240c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2410::,2001:67c:2410:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2414::,2001:67c:2414:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2418::,2001:67c:2418:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2420::,2001:67c:2420:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2424::,2001:67c:2424:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2428::,2001:67c:2428:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:242c::,2001:67c:242c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2430::,2001:67c:2433:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2440::,2001:67c:2440:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2444::,2001:67c:2444:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2448::,2001:67c:2448:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:244c::,2001:67c:244c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2454::,2001:67c:2454:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:245c::,2001:67c:245c:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2460::,2001:67c:2460:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2464::,2001:67c:2464:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2468::,2001:67c:2468:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:246c::,2001:67c:246c:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2470::,2001:67c:2470:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2474::,2001:67c:2474:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2478::,2001:67c:2478:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:247c::,2001:67c:247c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2480::,2001:67c:2480:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2484::,2001:67c:2484:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2488::,2001:67c:2488:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:248c::,2001:67c:248c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2490::,2001:67c:2490:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2494::,2001:67c:2494:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2498::,2001:67c:2498:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:249c::,2001:67c:249c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:24a0::,2001:67c:24a0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24a4::,2001:67c:24a4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24a8::,2001:67c:24a8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:24ac::,2001:67c:24ac:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:24b4::,2001:67c:24b4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:24b8::,2001:67c:24b8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:24bc::,2001:67c:24bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:24c4::,2001:67c:24c4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:24c8::,2001:67c:24c8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:24cc::,2001:67c:24cc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:24d0::,2001:67c:24d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:24d4::,2001:67c:24d4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:24d8::,2001:67c:24d8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:24dc::,2001:67c:24dc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:24e0::,2001:67c:24e0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:24e4::,2001:67c:24e4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:24e8::,2001:67c:24e9:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24f0::,2001:67c:24f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:24f4::,2001:67c:24f4:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:24f8::,2001:67c:24f8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:24fc::,2001:67c:24fc:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2500::,2001:67c:2507:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2520::,2001:67c:2520:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2524::,2001:67c:2524:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2528::,2001:67c:2528:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:252c::,2001:67c:252c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2534::,2001:67c:2534:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2538::,2001:67c:2538:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:253c::,2001:67c:253c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2540::,2001:67c:2540:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2544::,2001:67c:2544:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2548::,2001:67c:2548:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:254c::,2001:67c:254c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2550::,2001:67c:2550:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2554::,2001:67c:2554:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2558::,2001:67c:2558:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:255c::,2001:67c:255c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2560::,2001:67c:2560:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2564::,2001:67c:2564:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:256c::,2001:67c:256c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2574::,2001:67c:2574:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2578::,2001:67c:2578:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:257c::,2001:67c:257c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2580::,2001:67c:2580:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2584::,2001:67c:2584:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2588::,2001:67c:2588:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:258c::,2001:67c:258c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2590::,2001:67c:2590:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2594::,2001:67c:2594:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2598::,2001:67c:2598:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:259c::,2001:67c:259c:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:25a0::,2001:67c:25a0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:25a4::,2001:67c:25a4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:25a8::,2001:67c:25a8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:25ac::,2001:67c:25ac:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:25b0::,2001:67c:25b0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:25b4::,2001:67c:25b4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:25b8::,2001:67c:25b8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:25bc::,2001:67c:25bc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:25c0::,2001:67c:25c0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:25c4::,2001:67c:25c4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:25cc::,2001:67c:25cc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:25d0::,2001:67c:25d0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:25d4::,2001:67c:25d4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:25d8::,2001:67c:25d8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:25dc::,2001:67c:25dc:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:25e4::,2001:67c:25e4:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:25f4::,2001:67c:25f4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:25fc::,2001:67c:25fc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2600::,2001:67c:2600:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2604::,2001:67c:2604:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:260c::,2001:67c:260c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2610::,2001:67c:2610:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2614::,2001:67c:2614:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2618::,2001:67c:2618:ffff:ffff:ffff:ffff:ffff,EE
+2001:67c:261c::,2001:67c:261c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2620::,2001:67c:2620:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2624::,2001:67c:2624:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:262c::,2001:67c:262c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2630::,2001:67c:2630:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2634::,2001:67c:2634:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2638::,2001:67c:2638:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:263c::,2001:67c:263c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2640::,2001:67c:2640:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:2644::,2001:67c:2644:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:264c::,2001:67c:264c:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2650::,2001:67c:2650:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2654::,2001:67c:2654:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:265c::,2001:67c:265c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2660::,2001:67c:2660:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2664::,2001:67c:2664:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2668::,2001:67c:2668:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:266c::,2001:67c:266c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2670::,2001:67c:2670:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2674::,2001:67c:2674:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2678::,2001:67c:2678:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:267c::,2001:67c:267c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2684::,2001:67c:2684:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2688::,2001:67c:2688:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:268c::,2001:67c:268c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2690::,2001:67c:2690:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2694::,2001:67c:2694:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2698::,2001:67c:2698:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:269c::,2001:67c:269c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:26a0::,2001:67c:26a0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:26a4::,2001:67c:26a4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:26ac::,2001:67c:26ac:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:26b0::,2001:67c:26b0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:26b4::,2001:67c:26b4:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26b8::,2001:67c:26b8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26bc::,2001:67c:26bc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:26c0::,2001:67c:26c3:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:26d0::,2001:67c:26d0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:26d4::,2001:67c:26d4:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:26d8::,2001:67c:26d8:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:26dc::,2001:67c:26dc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:26e0::,2001:67c:26e0:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:26e4::,2001:67c:26e4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:26e8::,2001:67c:26e8:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26ec::,2001:67c:26ec:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:26f0::,2001:67c:26f0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:26f4::,2001:67c:26f4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:26f8::,2001:67c:26f8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:26fc::,2001:67c:26fc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2700::,2001:67c:2700:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2704::,2001:67c:2704:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2708::,2001:67c:2708:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:270c::,2001:67c:270c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2710::,2001:67c:2710:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2714::,2001:67c:2714:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2718::,2001:67c:2718:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:271c::,2001:67c:271c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2720::,2001:67c:2720:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2724::,2001:67c:2724:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2728::,2001:67c:2728:ffff:ffff:ffff:ffff:ffff,IR
+2001:67c:272c::,2001:67c:272c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2730::,2001:67c:2730:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2734::,2001:67c:2734:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2738::,2001:67c:2738:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:273c::,2001:67c:273c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2740::,2001:67c:2740:ffff:ffff:ffff:ffff:ffff,SK
+2001:67c:2744::,2001:67c:2744:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2748::,2001:67c:2748:ffff:ffff:ffff:ffff:ffff,GR
+2001:67c:274c::,2001:67c:274c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2750::,2001:67c:2750:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2758::,2001:67c:2758:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:275c::,2001:67c:275c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2760::,2001:67c:2760:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2764::,2001:67c:2764:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2768::,2001:67c:2768:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:276c::,2001:67c:276c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2770::,2001:67c:2770:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2774::,2001:67c:2774:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:2778::,2001:67c:2778:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:277c::,2001:67c:277c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2780::,2001:67c:2780:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2784::,2001:67c:2784:ffff:ffff:ffff:ffff:ffff,FI
+2001:67c:2788::,2001:67c:2788:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:278c::,2001:67c:278c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2790::,2001:67c:2790:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2794::,2001:67c:2794:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2798::,2001:67c:2798:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27c0::,2001:67c:27c0:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:27c4::,2001:67c:27c4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:27c8::,2001:67c:27c8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:27cc::,2001:67c:27cc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27d0::,2001:67c:27d0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:27d4::,2001:67c:27d4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:27d8::,2001:67c:27d8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:27dc::,2001:67c:27dc:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:27e0::,2001:67c:27e0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27e4::,2001:67c:27e4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:27e8::,2001:67c:27e8:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:27ec::,2001:67c:27ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:27f0::,2001:67c:27f0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:27f4::,2001:67c:27f4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:27f8::,2001:67c:27f8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:27fc::,2001:67c:27fc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2800::,2001:67c:2800:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2804::,2001:67c:2804:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2808::,2001:67c:2808:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:280c::,2001:67c:280c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2810::,2001:67c:2810:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2814::,2001:67c:2814:ffff:ffff:ffff:ffff:ffff,LI
+2001:67c:2818::,2001:67c:2818:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:281c::,2001:67c:281c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2820::,2001:67c:2820:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2824::,2001:67c:2824:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2828::,2001:67c:2828:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:282c::,2001:67c:282c:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2830::,2001:67c:2830:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2834::,2001:67c:2834:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2838::,2001:67c:2838:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:283c::,2001:67c:283c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:2840::,2001:67c:2840:ffff:ffff:ffff:ffff:ffff,IL
+2001:67c:2844::,2001:67c:2844:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2848::,2001:67c:2848:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:284c::,2001:67c:284c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2850::,2001:67c:2850:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2854::,2001:67c:2854:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:285c::,2001:67c:285c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2860::,2001:67c:2860:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2864::,2001:67c:2864:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2868::,2001:67c:2868:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:286c::,2001:67c:286c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2870::,2001:67c:2870:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2874::,2001:67c:2874:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2878::,2001:67c:2878:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:287c::,2001:67c:287c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2880::,2001:67c:2880:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2884::,2001:67c:2884:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2888::,2001:67c:2889:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2890::,2001:67c:2890:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2894::,2001:67c:2894:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2898::,2001:67c:2898:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:289c::,2001:67c:289c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:28a0::,2001:67c:28a0:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:28a4::,2001:67c:28a4:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:28a8::,2001:67c:28a8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28ac::,2001:67c:28ac:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:28b0::,2001:67c:28b0:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:28b4::,2001:67c:28b4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:28b8::,2001:67c:28b8:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:28bc::,2001:67c:28bc:ffff:ffff:ffff:ffff:ffff,HU
+2001:67c:28c0::,2001:67c:28c0:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:28c4::,2001:67c:28c4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:28cc::,2001:67c:28cc:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:28d0::,2001:67c:28d0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28d4::,2001:67c:28d4:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28d8::,2001:67c:28d8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:28e0::,2001:67c:28e0:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:28e4::,2001:67c:28e4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:28e8::,2001:67c:28e8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:28f0::,2001:67c:28f0:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:28f4::,2001:67c:28f4:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:28f8::,2001:67c:28f8:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:28fc::,2001:67c:28fc:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2900::,2001:67c:291f:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2980::,2001:67c:2980:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2984::,2001:67c:2984:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2988::,2001:67c:2989:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2994::,2001:67c:2994:ffff:ffff:ffff:ffff:ffff,SA
+2001:67c:2998::,2001:67c:2998:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:299c::,2001:67c:299c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:29a0::,2001:67c:29a0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:29a8::,2001:67c:29a8:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:29ac::,2001:67c:29ac:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:29b0::,2001:67c:29b1:ffff:ffff:ffff:ffff:ffff,CY
+2001:67c:29bc::,2001:67c:29bc:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:29c0::,2001:67c:29c1:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:29c8::,2001:67c:29c8:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:29cc::,2001:67c:29cc:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:29d0::,2001:67c:29d0:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:29d4::,2001:67c:29d4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:29d8::,2001:67c:29d8:ffff:ffff:ffff:ffff:ffff,AE
+2001:67c:29dc::,2001:67c:29dc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:29e0::,2001:67c:29e0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:29e4::,2001:67c:29e4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:29e8::,2001:67c:29e8:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:29ec::,2001:67c:29ec:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:29f0::,2001:67c:29f0:ffff:ffff:ffff:ffff:ffff,BG
+2001:67c:29f4::,2001:67c:29f4:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:29f8::,2001:67c:29f8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:29fc::,2001:67c:29fc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2a00::,2001:67c:2a00:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2a04::,2001:67c:2a04:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a08::,2001:67c:2a08:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2a0c::,2001:67c:2a0c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a14::,2001:67c:2a14:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a18::,2001:67c:2a18:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a1c::,2001:67c:2a1c:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2a20::,2001:67c:2a20:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2a24::,2001:67c:2a24:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2a28::,2001:67c:2a28:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a2c::,2001:67c:2a2c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a30::,2001:67c:2a30:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a34::,2001:67c:2a34:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a38::,2001:67c:2a38:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2a3c::,2001:67c:2a3c:ffff:ffff:ffff:ffff:ffff,ES
+2001:67c:2a40::,2001:67c:2a40:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2a44::,2001:67c:2a44:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2a48::,2001:67c:2a48:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2a4c::,2001:67c:2a4c:ffff:ffff:ffff:ffff:ffff,GB
+2001:67c:2a50::,2001:67c:2a50:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a54::,2001:67c:2a54:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a58::,2001:67c:2a58:ffff:ffff:ffff:ffff:ffff,BE
+2001:67c:2a5c::,2001:67c:2a5c:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2a64::,2001:67c:2a64:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a68::,2001:67c:2a68:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a6c::,2001:67c:2a6c:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2a70::,2001:67c:2a70:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2a74::,2001:67c:2a74:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a78::,2001:67c:2a78:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2a7c::,2001:67c:2a7c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2a80::,2001:67c:2a80:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2a84::,2001:67c:2a84:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a88::,2001:67c:2a88:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:2a8c::,2001:67c:2a8c:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2a90::,2001:67c:2a90:ffff:ffff:ffff:ffff:ffff,NO
+2001:67c:2a94::,2001:67c:2a94:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2a98::,2001:67c:2a98:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2a9c::,2001:67c:2a9c:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2aa0::,2001:67c:2aa0:ffff:ffff:ffff:ffff:ffff,LU
+2001:67c:2aa4::,2001:67c:2aa4:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2aa8::,2001:67c:2aa8:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2aac::,2001:67c:2aac:ffff:ffff:ffff:ffff:ffff,IS
+2001:67c:2ab0::,2001:67c:2ab0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ab4::,2001:67c:2ab4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2ab8::,2001:67c:2ab8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2abc::,2001:67c:2abc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2ac0::,2001:67c:2ac0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2ac4::,2001:67c:2ac4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ac8::,2001:67c:2ac8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2acc::,2001:67c:2acc:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2ad0::,2001:67c:2ad0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2ad4::,2001:67c:2ad4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ad8::,2001:67c:2ad8:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2adc::,2001:67c:2adc:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ae0::,2001:67c:2ae0:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2ae4::,2001:67c:2ae4:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ae8::,2001:67c:2ae8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2aec::,2001:67c:2aec:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2af0::,2001:67c:2af0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2af4::,2001:67c:2af4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2afc::,2001:67c:2afc:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2b04::,2001:67c:2b04:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2b08::,2001:67c:2b08:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b0c::,2001:67c:2b0c:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2b10::,2001:67c:2b10:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2b14::,2001:67c:2b14:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2b18::,2001:67c:2b18:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2b1c::,2001:67c:2b1c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b20::,2001:67c:2b20:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b24::,2001:67c:2b24:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b28::,2001:67c:2b28:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2b2c::,2001:67c:2b2c:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b30::,2001:67c:2b30:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b34::,2001:67c:2b34:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b38::,2001:67c:2b38:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b3c::,2001:67c:2b3c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2b40::,2001:67c:2b40:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2b44::,2001:67c:2b44:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2b48::,2001:67c:2b48:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b4c::,2001:67c:2b4c:ffff:ffff:ffff:ffff:ffff,CZ
+2001:67c:2b50::,2001:67c:2b50:ffff:ffff:ffff:ffff:ffff,AT
+2001:67c:2b54::,2001:67c:2b54:ffff:ffff:ffff:ffff:ffff,CH
+2001:67c:2b58::,2001:67c:2b58:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b5c::,2001:67c:2b5c:ffff:ffff:ffff:ffff:ffff,FR
+2001:67c:2b60::,2001:67c:2b60:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2b64::,2001:67c:2b64:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b68::,2001:67c:2b68:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b6c::,2001:67c:2b6c:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b70::,2001:67c:2b70:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2b74::,2001:67c:2b74:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b78::,2001:67c:2b79:ffff:ffff:ffff:ffff:ffff,GR
+2001:67c:2b80::,2001:67c:2b80:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2b84::,2001:67c:2b84:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2b88::,2001:67c:2b88:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b8c::,2001:67c:2b8c:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2b90::,2001:67c:2b90:ffff:ffff:ffff:ffff:ffff,SI
+2001:67c:2b94::,2001:67c:2b94:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2b98::,2001:67c:2b98:ffff:ffff:ffff:ffff:ffff,DK
+2001:67c:2b9c::,2001:67c:2b9c:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2ba0::,2001:67c:2ba0:ffff:ffff:ffff:ffff:ffff,TR
+2001:67c:2ba4::,2001:67c:2ba4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2ba8::,2001:67c:2ba8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2bac::,2001:67c:2bac:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2bb4::,2001:67c:2bb4:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2bb8::,2001:67c:2bb8:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2bbc::,2001:67c:2bbc:ffff:ffff:ffff:ffff:ffff,RO
+2001:67c:2bc0::,2001:67c:2bc0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bc4::,2001:67c:2bc4:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2bc8::,2001:67c:2bc8:ffff:ffff:ffff:ffff:ffff,DE
+2001:67c:2bcc::,2001:67c:2bcc:ffff:ffff:ffff:ffff:ffff,LV
+2001:67c:2bd0::,2001:67c:2bd0:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bd4::,2001:67c:2bd4:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bd8::,2001:67c:2bd8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bdc::,2001:67c:2bdc:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2be0::,2001:67c:2be0:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2be4::,2001:67c:2be4:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2be8::,2001:67c:2be8:ffff:ffff:ffff:ffff:ffff,NL
+2001:67c:2bec::,2001:67c:2bec:ffff:ffff:ffff:ffff:ffff,PL
+2001:67c:2bf0::,2001:67c:2bf0:ffff:ffff:ffff:ffff:ffff,UA
+2001:67c:2bf4::,2001:67c:2bf4:ffff:ffff:ffff:ffff:ffff,RU
+2001:67c:2bf8::,2001:67c:2bf8:ffff:ffff:ffff:ffff:ffff,SE
+2001:67c:2bfc::,2001:67c:2bfc:ffff:ffff:ffff:ffff:ffff,SE
+2001:680::,2001:680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:688::,2001:688:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:690::,2001:697:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:6a0::,2001:6a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:6a8::,2001:6a8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:6b0::,2001:6b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:6b8::,2001:6b8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:6c8::,2001:6cf:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:6d0::,2001:6d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:6d8::,2001:6df:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:6e0::,2001:6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:6e8::,2001:6ef:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:6f0::,2001:6f7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:6f8::,2001:6f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:700::,2001:7ff:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2001:800::,2001:8ff:ffff:ffff:ffff:ffff:ffff:ffff,GD
+2001:900::,2001:9ff:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:a00::,2001:aff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2001:b00::,2001:b07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:b08::,2001:b08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:b10::,2001:b10:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:b18::,2001:b18:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:b20::,2001:b20:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:b28::,2001:b28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:b30::,2001:b30:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2001:b38::,2001:b38:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:b40::,2001:b40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:b48::,2001:b4f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:b50::,2001:b50:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:b58::,2001:b58:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:b60::,2001:b67:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:b68::,2001:b68:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2001:b70::,2001:b70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:b80::,2001:b87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:b88::,2001:b88:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:b90::,2001:b90:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:b98::,2001:b98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:ba0::,2001:ba0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:ba8::,2001:ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:bb0::,2001:bb0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:bb8::,2001:bb8:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:bc0::,2001:bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:bc8::,2001:bc8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:bd0::,2001:bd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:be0::,2001:be7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:be8::,2001:be8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:bf0::,2001:bf7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:bf8::,2001:bf8:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:c00::,2001:cff:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2001:d00::,2001:d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d08::,2001:d08:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:d10::,2001:d10:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:d18::,2001:d18:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:d28::,2001:d28:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d30::,2001:d30:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d38::,2001:d38:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:d40::,2001:d40:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:d48::,2001:d48:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:d50::,2001:d50:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d58::,2001:d58:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:d68::,2001:d68:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:d70::,2001:d73:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d80::,2001:d80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d88::,2001:d88:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d90::,2001:d90:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:d98::,2001:d98:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2001:da0::,2001:da0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:da8::,2001:daa:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:db0::,2001:db0:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dc0::,2001:dc0:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dc1::,2001:dc1:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:dc2::,2001:dc4:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:dc5::,2001:dc5:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:dc6::,2001:dc6:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:dc7::,2001:dc7:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:dc8::,2001:dc8:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2001:dc9::,2001:dc9:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:dca::,2001:dca:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2001:dcc::,2001:dcc:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:dcd::,2001:dcd:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dce::,2001:dce:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:dd8::,2001:dd8::ffff:ffff:ffff:ffff:ffff,FJ
+2001:dd8:1::,2001:dd8:1:ffff:ffff:ffff:ffff:ffff,CN
+2001:dd8:2::,2001:dd8:2:ffff:ffff:ffff:ffff:ffff,MY
+2001:dd8:3::,2001:dd8:3:ffff:ffff:ffff:ffff:ffff,NZ
+2001:dd8:4::,2001:dd8:4:ffff:ffff:ffff:ffff:ffff,SG
+2001:dd8:5::,2001:dd8:5:ffff:ffff:ffff:ffff:ffff,CN
+2001:dd8:6::,2001:dd8:6:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:7::,2001:dd8:7:ffff:ffff:ffff:ffff:ffff,NP
+2001:dd8:8::,2001:dd8:f:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:10::,2001:dd8:11:ffff:ffff:ffff:ffff:ffff,NP
+2001:dd8:12::,2001:dd8:12:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:13::,2001:dd8:13:ffff:ffff:ffff:ffff:ffff,NZ
+2001:dd8:14::,2001:dd8:14:ffff:ffff:ffff:ffff:ffff,AU
+2001:dd8:15::,2001:dd8:15:ffff:ffff:ffff:ffff:ffff,HK
+2001:dd8:16::,2001:dd8:16:ffff:ffff:ffff:ffff:ffff,SG
+2001:dd8:17::,2001:dd8:17:ffff:ffff:ffff:ffff:ffff,KR
+2001:dd8:18::,2001:dd8:18:ffff:ffff:ffff:ffff:ffff,TW
+2001:dd8:19::,2001:dd8:19:ffff:ffff:ffff:ffff:ffff,IN
+2001:dd8:1a::,2001:dd8:1a:ffff:ffff:ffff:ffff:ffff,CN
+2001:dd8:1b::,2001:dd8:1b:ffff:ffff:ffff:ffff:ffff,IN
+2001:dd8:1c::,2001:dd8:1c:ffff:ffff:ffff:ffff:ffff,PK
+2001:dd8:1d::,2001:dd8:1d:ffff:ffff:ffff:ffff:ffff,BD
+2001:dd8:1e::,2001:dd8:1e:ffff:ffff:ffff:ffff:ffff,KH
+2001:dd8:1f::,2001:dd8:1f:ffff:ffff:ffff:ffff:ffff,ID
+2001:dd8:20::,2001:dd8:21:ffff:ffff:ffff:ffff:ffff,IN
+2001:dd8:22::,2001:dd8:22:ffff:ffff:ffff:ffff:ffff,JP
+2001:dd8:24::,2001:dd8:25:ffff:ffff:ffff:ffff:ffff,NP
+2001:de1::,2001:de1:3f:ffff:ffff:ffff:ffff:ffff,JP
+2001:de8::,2001:de8::ffff:ffff:ffff:ffff:ffff,TH
+2001:de8:1::,2001:de8:1:ffff:ffff:ffff:ffff:ffff,IN
+2001:de8:2::,2001:de8:2:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:3::,2001:de8:3:ffff:ffff:ffff:ffff:ffff,VN
+2001:de8:4::,2001:de8:7:ffff:ffff:ffff:ffff:ffff,SG
+2001:de8:8::,2001:de8:8:ffff:ffff:ffff:ffff:ffff,JP
+2001:de8:9::,2001:de8:9:ffff:ffff:ffff:ffff:ffff,AU
+2001:de8:a::,2001:de8:a:ffff:ffff:ffff:ffff:ffff,VN
+2001:de8:b::,2001:de8:b:ffff:ffff:ffff:ffff:ffff,BD
+2001:de8:c::,2001:de8:c:ffff:ffff:ffff:ffff:ffff,JP
+2001:de8:d::,2001:de8:d:ffff:ffff:ffff:ffff:ffff,SG
+2001:de8:e::,2001:de8:e:ffff:ffff:ffff:ffff:ffff,TH
+2001:de8:f::,2001:de8:10:ffff:ffff:ffff:ffff:ffff,MY
+2001:de8:11::,2001:de8:11:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:12::,2001:de8:12:ffff:ffff:ffff:ffff:ffff,SG
+2001:de8:13::,2001:de8:13:ffff:ffff:ffff:ffff:ffff,MY
+2001:de8:14::,2001:de8:14:ffff:ffff:ffff:ffff:ffff,AU
+2001:de8:15::,2001:de8:15:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:16::,2001:de8:16:ffff:ffff:ffff:ffff:ffff,PF
+2001:de8:17::,2001:de8:17:ffff:ffff:ffff:ffff:ffff,AU
+2001:de8:19::,2001:de8:19:ffff:ffff:ffff:ffff:ffff,NZ
+2001:de8:1a::,2001:de8:1a:ffff:ffff:ffff:ffff:ffff,ID
+2001:de8:1b::,2001:de8:1b:ffff:ffff:ffff:ffff:ffff,MY
+2001:de8:1d::,2001:de8:1d:ffff:ffff:ffff:ffff:ffff,KH
+2001:de8:1e::,2001:de8:1e:ffff:ffff:ffff:ffff:ffff,JP
+2001:de9::,2001:de9::ffff:ffff:ffff:ffff:ffff,LK
+2001:dea::,2001:dea::ffff:ffff:ffff:ffff:ffff,AU
+2001:dec::,2001:dec::ffff:ffff:ffff:ffff:ffff,VU
+2001:dee::,2001:dee::ffff:ffff:ffff:ffff:ffff,HK
+2001:df0::,2001:df0:1:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2::,2001:df0:2:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:4::,2001:df0:4:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:7::,2001:df0:7:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:8::,2001:df0:8:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:9::,2001:df0:a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c::,2001:df0:13:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:14::,2001:df0:14:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:15::,2001:df0:15:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:17::,2001:df0:17:ffff:ffff:ffff:ffff:ffff,LK
+2001:df0:18::,2001:df0:18:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:19::,2001:df0:1d:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:1e::,2001:df0:1e:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:1f::,2001:df0:1f:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:20::,2001:df0:3f:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:40::,2001:df0:40:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:41::,2001:df0:41:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:42::,2001:df0:42:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:43::,2001:df0:43:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:44::,2001:df0:44:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:45::,2001:df0:46:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:48::,2001:df0:48:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:49::,2001:df0:49:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:4a::,2001:df0:4a:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:4b::,2001:df0:4d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:4f::,2001:df0:60:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:62::,2001:df0:62:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:63::,2001:df0:63:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:65::,2001:df0:65:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:66::,2001:df0:66:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:68::,2001:df0:68:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:69::,2001:df0:69:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:6a::,2001:df0:6a:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:6b::,2001:df0:6b:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:6c::,2001:df0:6c:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:6f::,2001:df0:6f:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:70::,2001:df0:70:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:71::,2001:df0:71:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:73::,2001:df0:74:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:75::,2001:df0:75:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:76::,2001:df0:76:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:77::,2001:df0:77:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:78::,2001:df0:78:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:7b::,2001:df0:7c:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:7d::,2001:df0:7d:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:7e::,2001:df0:81:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:82::,2001:df0:82:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:83::,2001:df0:83:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:84::,2001:df0:84:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:85::,2001:df0:85:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:86::,2001:df0:87:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:89::,2001:df0:89:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8b::,2001:df0:8b:ffff:ffff:ffff:ffff:ffff,NP
+2001:df0:8c::,2001:df0:8c:ffff:ffff:ffff:ffff:ffff,NU
+2001:df0:8e::,2001:df0:90:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:91::,2001:df0:91:ffff:ffff:ffff:ffff:ffff,FJ
+2001:df0:92::,2001:df0:92:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:93::,2001:df0:93:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:94::,2001:df0:94:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:95::,2001:df0:95:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:96::,2001:df0:96:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:97::,2001:df0:97:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:98::,2001:df0:9a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:9c::,2001:df0:9c:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:9d::,2001:df0:9d:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:9e::,2001:df0:9e:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:9f::,2001:df0:9f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:a0::,2001:df0:a1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a2::,2001:df0:a2:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:a3::,2001:df0:a3:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:a4::,2001:df0:a4:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a5::,2001:df0:a6:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:a7::,2001:df0:ab:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:ad::,2001:df0:ad:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:ae::,2001:df0:ae:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:b0::,2001:df0:b0:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:b1::,2001:df0:b8:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:b9::,2001:df0:b9:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:ba::,2001:df0:bd:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:be::,2001:df0:be:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:bf::,2001:df0:bf:ffff:ffff:ffff:ffff:ffff,LA
+2001:df0:c0::,2001:df0:c0:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:c1::,2001:df0:c2:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c4::,2001:df0:c4:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c5::,2001:df0:c5:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:c6::,2001:df0:c6:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:c7::,2001:df0:c8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:c9::,2001:df0:cc:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:cd::,2001:df0:cd:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:ce::,2001:df0:ce:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:cf::,2001:df0:cf:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:d1::,2001:df0:d1:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:d2::,2001:df0:d2:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:d4::,2001:df0:d6:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d7::,2001:df0:d7:ffff:ffff:ffff:ffff:ffff,KR
+2001:df0:d8::,2001:df0:d8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d9::,2001:df0:d9:ffff:ffff:ffff:ffff:ffff,TW
+2001:df0:da::,2001:df0:da:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:db::,2001:df0:db:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:dc::,2001:df0:dc:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:dd::,2001:df0:dd:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:de::,2001:df0:df:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:e1::,2001:df0:e1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e2::,2001:df0:e2:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:e3::,2001:df0:e3:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:e4::,2001:df0:e5:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e6::,2001:df0:e6:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:e7::,2001:df0:e8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e9::,2001:df0:e9:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:ea::,2001:df0:ea:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:eb::,2001:df0:eb:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:ed::,2001:df0:ed:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:ee::,2001:df0:ee:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:ef::,2001:df0:f0:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:f1::,2001:df0:f1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f2::,2001:df0:f2:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:f3::,2001:df0:f3:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f4::,2001:df0:f4:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:f5::,2001:df0:f5:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f6::,2001:df0:f6:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:f7::,2001:df0:f7:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:f8::,2001:df0:fa:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:fb::,2001:df0:fb:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:fc::,2001:df0:fc:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:fd::,2001:df0:fe:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:100::,2001:df0:1ff:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:201::,2001:df0:201:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:202::,2001:df0:202:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:203::,2001:df0:203:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:204::,2001:df0:204:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:205::,2001:df0:205:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:206::,2001:df0:206:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:207::,2001:df0:207:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:208::,2001:df0:208:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:209::,2001:df0:209:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:20a::,2001:df0:20a:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:20b::,2001:df0:20b:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:20c::,2001:df0:20c:ffff:ffff:ffff:ffff:ffff,NF
+2001:df0:20d::,2001:df0:20d:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:20e::,2001:df0:20e:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:210::,2001:df0:210:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:211::,2001:df0:211:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:212::,2001:df0:212:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:213::,2001:df0:213:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:214::,2001:df0:214:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:215::,2001:df0:215:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:216::,2001:df0:217:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:218::,2001:df0:219:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:21a::,2001:df0:21a:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:21b::,2001:df0:21b:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:21c::,2001:df0:21c:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:21d::,2001:df0:21d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:21e::,2001:df0:21e:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:21f::,2001:df0:220:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:221::,2001:df0:221:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:222::,2001:df0:222:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:224::,2001:df0:224:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:225::,2001:df0:225:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:226::,2001:df0:228:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:229::,2001:df0:229:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:22b::,2001:df0:22b:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:22c::,2001:df0:22d:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:22e::,2001:df0:22f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:230::,2001:df0:230:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:231::,2001:df0:231:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:232::,2001:df0:232:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:233::,2001:df0:234:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:235::,2001:df0:235:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:237::,2001:df0:237:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:238::,2001:df0:238:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:239::,2001:df0:239:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:23a::,2001:df0:23a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:23b::,2001:df0:23b:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:23c::,2001:df0:23d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:23e::,2001:df0:23e:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:23f::,2001:df0:23f:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:240::,2001:df0:241:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:242::,2001:df0:242:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:243::,2001:df0:243:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:245::,2001:df0:246:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:247::,2001:df0:247:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:248::,2001:df0:248:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:249::,2001:df0:24a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:24b::,2001:df0:24b:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:24c::,2001:df0:24c:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:24e::,2001:df0:24e:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:24f::,2001:df0:24f:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:250::,2001:df0:250:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:251::,2001:df0:252:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:253::,2001:df0:253:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:254::,2001:df0:254:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:255::,2001:df0:255:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:256::,2001:df0:256:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:257::,2001:df0:257:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:258::,2001:df0:258:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:259::,2001:df0:259:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:25a::,2001:df0:25a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:25b::,2001:df0:25b:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:25c::,2001:df0:25d:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:25e::,2001:df0:25e:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:260::,2001:df0:260:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:261::,2001:df0:261:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:262::,2001:df0:262:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:263::,2001:df0:263:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:264::,2001:df0:264:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:265::,2001:df0:265:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:266::,2001:df0:266:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:267::,2001:df0:267:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:268::,2001:df0:269:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:26a::,2001:df0:26b:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:26c::,2001:df0:26c:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:26d::,2001:df0:26f:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:270::,2001:df0:270:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:271::,2001:df0:271:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:272::,2001:df0:272:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:273::,2001:df0:273:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:274::,2001:df0:277:ffff:ffff:ffff:ffff:ffff,NP
+2001:df0:278::,2001:df0:278:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:279::,2001:df0:279:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:27a::,2001:df0:27a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:27b::,2001:df0:27b:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:27c::,2001:df0:27c:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:27d::,2001:df0:27d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:27e::,2001:df0:27e:ffff:ffff:ffff:ffff:ffff,CN
+2001:df0:27f::,2001:df0:27f:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:280::,2001:df0:28f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:290::,2001:df0:290:ffff:ffff:ffff:ffff:ffff,KR
+2001:df0:291::,2001:df0:291:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:292::,2001:df0:292:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:293::,2001:df0:293:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:294::,2001:df0:294:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:295::,2001:df0:296:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:298::,2001:df0:298:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:299::,2001:df0:299:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:29a::,2001:df0:29a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:29b::,2001:df0:29b:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:29c::,2001:df0:29c:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:29d::,2001:df0:29d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:29f::,2001:df0:29f:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:2a0::,2001:df0:2a0:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:2a1::,2001:df0:2a1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2a2::,2001:df0:2a2:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:2a3::,2001:df0:2a3:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2a4::,2001:df0:2a4:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2a5::,2001:df0:2a5:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2a6::,2001:df0:2a6:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2a7::,2001:df0:2a7:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2a8::,2001:df0:2a8:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:2a9::,2001:df0:2aa:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2ab::,2001:df0:2ab:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2ac::,2001:df0:2ac:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2ad::,2001:df0:2ad:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2ae::,2001:df0:2ae:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:2af::,2001:df0:2af:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:2b0::,2001:df0:2b1:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2b2::,2001:df0:2b2:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2b3::,2001:df0:2b3:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2b4::,2001:df0:2b4:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2b5::,2001:df0:2b5:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2b6::,2001:df0:2b6:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2b7::,2001:df0:2b7:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2b8::,2001:df0:2b8:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:2b9::,2001:df0:2b9:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2ba::,2001:df0:2ba:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2bb::,2001:df0:2bb:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2bc::,2001:df0:2bc:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2bd::,2001:df0:2bd:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2be::,2001:df0:2be:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2bf::,2001:df0:2bf:ffff:ffff:ffff:ffff:ffff,GB
+2001:df0:2c1::,2001:df0:2c1:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2c2::,2001:df0:2c2:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2c3::,2001:df0:2c3:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:2c4::,2001:df0:2c4:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2c5::,2001:df0:2c5:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:2c6::,2001:df0:2c8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2c9::,2001:df0:2c9:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2ca::,2001:df0:2ca:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2cb::,2001:df0:2cb:ffff:ffff:ffff:ffff:ffff,PK
+2001:df0:2cc::,2001:df0:2cc:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2cd::,2001:df0:2cd:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:2ce::,2001:df0:2e0:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2e1::,2001:df0:2e1:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2e2::,2001:df0:2e2:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2e3::,2001:df0:2e3:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2e4::,2001:df0:2e4:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2e5::,2001:df0:2e5:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2e6::,2001:df0:2e7:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2e8::,2001:df0:2e8:ffff:ffff:ffff:ffff:ffff,VN
+2001:df0:2e9::,2001:df0:2e9:ffff:ffff:ffff:ffff:ffff,CN
+2001:df0:2ea::,2001:df0:2ea:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:2ec::,2001:df0:2ec:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2ed::,2001:df0:2ee:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2ef::,2001:df0:2ef:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:2f0::,2001:df0:2f3:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2f4::,2001:df0:2f4:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2f5::,2001:df0:2f5:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2f6::,2001:df0:2f6:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2f7::,2001:df0:2f7:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:2f8::,2001:df0:2f8:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2f9::,2001:df0:2f9:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2fa::,2001:df0:2fa:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2fb::,2001:df0:2fb:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:2fc::,2001:df0:2fc:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:2fd::,2001:df0:2fd:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:2fe::,2001:df0:2ff:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:300::,2001:df0:311:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:314::,2001:df0:317:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:400::,2001:df0:400:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:401::,2001:df0:401:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:402::,2001:df0:403:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:404::,2001:df0:404:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:405::,2001:df0:405:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:407::,2001:df0:407:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:408::,2001:df0:408:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:409::,2001:df0:409:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:40a::,2001:df0:40a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:40c::,2001:df0:40c:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:40d::,2001:df0:40d:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:40e::,2001:df0:40f:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:410::,2001:df0:410:ffff:ffff:ffff:ffff:ffff,VU
+2001:df0:411::,2001:df0:411:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:412::,2001:df0:412:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:413::,2001:df0:413:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:415::,2001:df0:415:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:417::,2001:df0:417:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:418::,2001:df0:419:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:41a::,2001:df0:41a:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:41b::,2001:df0:41b:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:41c::,2001:df0:41c:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:41d::,2001:df0:41e:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:41f::,2001:df0:41f:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:420::,2001:df0:420:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:421::,2001:df0:421:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:422::,2001:df0:422:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:423::,2001:df0:423:ffff:ffff:ffff:ffff:ffff,CN
+2001:df0:424::,2001:df0:424:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:425::,2001:df0:425:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:426::,2001:df0:426:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:427::,2001:df0:427:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:430::,2001:df0:43f:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:440::,2001:df0:440:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:441::,2001:df0:441:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:442::,2001:df0:443:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:444::,2001:df0:445:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:446::,2001:df0:446:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:447::,2001:df0:447:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:448::,2001:df0:448:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:449::,2001:df0:449:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:44a::,2001:df0:44a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:44b::,2001:df0:44b:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:44c::,2001:df0:44d:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:44e::,2001:df0:44e:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:44f::,2001:df0:44f:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:450::,2001:df0:450:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:451::,2001:df0:451:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:452::,2001:df0:452:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:453::,2001:df0:453:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:454::,2001:df0:454:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:455::,2001:df0:455:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:456::,2001:df0:456:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:457::,2001:df0:457:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:458::,2001:df0:458:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:459::,2001:df0:459:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:45a::,2001:df0:45a:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:45b::,2001:df0:45b:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:45c::,2001:df0:45d:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:45e::,2001:df0:45e:ffff:ffff:ffff:ffff:ffff,BD
+2001:df0:45f::,2001:df0:45f:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:460::,2001:df0:460:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:461::,2001:df0:461:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:462::,2001:df0:462:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:463::,2001:df0:463:ffff:ffff:ffff:ffff:ffff,SG
+2001:df0:464::,2001:df0:464:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:465::,2001:df0:465:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:466::,2001:df0:466:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:467::,2001:df0:467:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:468::,2001:df0:469:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:46a::,2001:df0:46a:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:46b::,2001:df0:46b:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:46c::,2001:df0:46c:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:500::,2001:df0:5ff:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:800::,2001:df0:800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:1000::,2001:df0:1000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df0:1800::,2001:df0:1800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:2000::,2001:df0:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:2800::,2001:df0:2800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:3000::,2001:df0:3000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:3800::,2001:df0:3800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df0:4000::,2001:df0:4000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:4800::,2001:df0:4800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:5000::,2001:df0:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:5800::,2001:df0:5800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df0:6000::,2001:df0:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:6800::,2001:df0:6800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df0:7000::,2001:df0:7000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:7800::,2001:df0:7800:ffff:ffff:ffff:ffff:ffff,WS
+2001:df0:8000::,2001:df0:8000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:8800::,2001:df0:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:9800::,2001:df0:9800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:a000::,2001:df0:a000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:a800::,2001:df0:a800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:b000::,2001:df0:b000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df0:b800::,2001:df0:b800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df0:c000::,2001:df0:c000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:c800::,2001:df0:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:d000::,2001:df0:d000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df0:d800::,2001:df0:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:e000::,2001:df0:e000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:e800::,2001:df0:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df0:f000::,2001:df0:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df0:f800::,2001:df0:f800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1::,2001:df1::ffff:ffff:ffff:ffff:ffff,TH
+2001:df1:800::,2001:df1:800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:1000::,2001:df1:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:1800::,2001:df1:1800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:2000::,2001:df1:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:2800::,2001:df1:2800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:3000::,2001:df1:3000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:3800::,2001:df1:3800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df1:4000::,2001:df1:4000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:4800::,2001:df1:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:5000::,2001:df1:5000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df1:5800::,2001:df1:5800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df1:6000::,2001:df1:6000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:6800::,2001:df1:6800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:7000::,2001:df1:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:7800::,2001:df1:7800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:8000::,2001:df1:8000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:8800::,2001:df1:8800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:9000::,2001:df1:9000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:9800::,2001:df1:9800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df1:a000::,2001:df1:a000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df1:a800::,2001:df1:a800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df1:b000::,2001:df1:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df1:b800::,2001:df1:b800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:c000::,2001:df1:c000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:c800::,2001:df1:c800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df1:d000::,2001:df1:d000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:d800::,2001:df1:d800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:e000::,2001:df1:e000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:e800::,2001:df1:e800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df1:f000::,2001:df1:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df1:f800::,2001:df1:f800:ffff:ffff:ffff:ffff:ffff,BN
+2001:df2::,2001:df2::ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:800::,2001:df2:800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:1000::,2001:df2:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:1800::,2001:df2:1803:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:2000::,2001:df2:2000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:2800::,2001:df2:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:3000::,2001:df2:3000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df2:3800::,2001:df2:3800:ffff:ffff:ffff:ffff:ffff,TH
+2001:df2:4000::,2001:df2:4000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:4800::,2001:df2:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:5000::,2001:df2:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:5800::,2001:df2:5800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:6000::,2001:df2:6000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:6800::,2001:df2:6800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df2:7000::,2001:df2:7000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:7800::,2001:df2:7800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:8000::,2001:df2:8000:ffff:ffff:ffff:ffff:ffff,BN
+2001:df2:8800::,2001:df2:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:9000::,2001:df2:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:9800::,2001:df2:9803:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:a000::,2001:df2:a000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:a800::,2001:df2:a800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:b000::,2001:df2:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:c000::,2001:df2:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df2:c800::,2001:df2:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:d000::,2001:df2:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df2:d800::,2001:df2:d800:ffff:ffff:ffff:ffff:ffff,JP
+2001:df2:e000::,2001:df2:e000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df2:e800::,2001:df2:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df2:f000::,2001:df2:f000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df2:f800::,2001:df2:f800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3::,2001:df3::ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:800::,2001:df3:80f:ffff:ffff:ffff:ffff:ffff,CN
+2001:df3:1000::,2001:df3:1000:ffff:ffff:ffff:ffff:ffff,BD
+2001:df3:1800::,2001:df3:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:2000::,2001:df3:2000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:2800::,2001:df3:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:3000::,2001:df3:3000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:3800::,2001:df3:3800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:4000::,2001:df3:4000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df3:4800::,2001:df3:4800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:5000::,2001:df3:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:5800::,2001:df3:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:6000::,2001:df3:6000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:6800::,2001:df3:6800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:7000::,2001:df3:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:7800::,2001:df3:7800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:8000::,2001:df3:8000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:8800::,2001:df3:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:9000::,2001:df3:9000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df3:9800::,2001:df3:9800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:a000::,2001:df3:a003:ffff:ffff:ffff:ffff:ffff,PH
+2001:df3:a800::,2001:df3:a800:ffff:ffff:ffff:ffff:ffff,MY
+2001:df3:b000::,2001:df3:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df3:b800::,2001:df3:b800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:c000::,2001:df3:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:c800::,2001:df3:c800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:d000::,2001:df3:d000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df3:d800::,2001:df3:d800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df3:e000::,2001:df3:e000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df3:e800::,2001:df3:e800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df3:f000::,2001:df3:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df3:f800::,2001:df3:f800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4::,2001:df4::ffff:ffff:ffff:ffff:ffff,MY
+2001:df4:800::,2001:df4:800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:1000::,2001:df4:1000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:1800::,2001:df4:1800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:2000::,2001:df4:2000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df4:2800::,2001:df4:2800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:3000::,2001:df4:3000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df4:3800::,2001:df4:3800:ffff:ffff:ffff:ffff:ffff,BD
+2001:df4:4000::,2001:df4:400f:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:4800::,2001:df4:4800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:5000::,2001:df4:5000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:5800::,2001:df4:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:6000::,2001:df4:6000:ffff:ffff:ffff:ffff:ffff,MY
+2001:df4:6800::,2001:df4:6800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:7000::,2001:df4:7000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:7800::,2001:df4:7800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:8000::,2001:df4:8000:ffff:ffff:ffff:ffff:ffff,MY
+2001:df4:8800::,2001:df4:8800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df4:9000::,2001:df4:9000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:9800::,2001:df4:9800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:a000::,2001:df4:a000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df4:a800::,2001:df4:a800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:b000::,2001:df4:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:b800::,2001:df4:b800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df4:c000::,2001:df4:c000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df4:c800::,2001:df4:c800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df4:d000::,2001:df4:d000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:d800::,2001:df4:d800:ffff:ffff:ffff:ffff:ffff,VN
+2001:df4:e000::,2001:df4:e000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:e800::,2001:df4:e800:ffff:ffff:ffff:ffff:ffff,MN
+2001:df4:f000::,2001:df4:f000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df4:f800::,2001:df4:f800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5::,2001:df5::ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:800::,2001:df5:800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df5:1000::,2001:df5:1000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:1800::,2001:df5:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:2000::,2001:df5:2000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:2800::,2001:df5:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:3000::,2001:df5:3000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:3800::,2001:df5:3800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:4000::,2001:df5:4000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:4800::,2001:df5:4800:ffff:ffff:ffff:ffff:ffff,BN
+2001:df5:5000::,2001:df5:5000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:5800::,2001:df5:5800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:6000::,2001:df5:6000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:6800::,2001:df5:6800:ffff:ffff:ffff:ffff:ffff,KR
+2001:df5:7000::,2001:df5:7000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:7800::,2001:df5:7800:ffff:ffff:ffff:ffff:ffff,CN
+2001:df5:8000::,2001:df5:8000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df5:8800::,2001:df5:8800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:9000::,2001:df5:9000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df5:9800::,2001:df5:9800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df5:a000::,2001:df5:a000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:a800::,2001:df5:a800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:b000::,2001:df5:b000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df5:b800::,2001:df5:b800:ffff:ffff:ffff:ffff:ffff,HK
+2001:df5:c800::,2001:df5:c800:ffff:ffff:ffff:ffff:ffff,AU
+2001:df5:d000::,2001:df5:d000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:d800::,2001:df5:d800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df5:e000::,2001:df5:e000:ffff:ffff:ffff:ffff:ffff,MY
+2001:df5:e800::,2001:df5:e800:ffff:ffff:ffff:ffff:ffff,PH
+2001:df5:f000::,2001:df5:f000:ffff:ffff:ffff:ffff:ffff,ID
+2001:df5:f800::,2001:df5:f800:ffff:ffff:ffff:ffff:ffff,SG
+2001:df6::,2001:df6:1:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:800::,2001:df6:80f:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:1000::,2001:df6:1000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df6:1800::,2001:df6:1800:ffff:ffff:ffff:ffff:ffff,ID
+2001:df6:2000::,2001:df6:2001:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:2800::,2001:df6:2800:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:3000::,2001:df6:3000:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:3800::,2001:df6:3800:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df6:4000::,2001:df6:4001:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:5000::,2001:df6:5000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:6000::,2001:df6:6000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:7000::,2001:df6:7000:ffff:ffff:ffff:ffff:ffff,VN
+2001:df6:8000::,2001:df6:8000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:9000::,2001:df6:9000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df6:a000::,2001:df6:a000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df6:b000::,2001:df6:b000:ffff:ffff:ffff:ffff:ffff,TH
+2001:df6:c000::,2001:df6:c000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df6:d000::,2001:df6:d000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df6:e000::,2001:df6:e000:ffff:ffff:ffff:ffff:ffff,VU
+2001:df6:f000::,2001:df6:f000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df7::,2001:df7::ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:1000::,2001:df7:1000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:2000::,2001:df7:2000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:3000::,2001:df7:3001:ffff:ffff:ffff:ffff:ffff,NZ
+2001:df7:4000::,2001:df7:4000:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:5000::,2001:df7:5000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:6000::,2001:df7:6000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:7000::,2001:df7:7000:ffff:ffff:ffff:ffff:ffff,HK
+2001:df7:9000::,2001:df7:9000:ffff:ffff:ffff:ffff:ffff,PH
+2001:df7:a000::,2001:df7:a000:ffff:ffff:ffff:ffff:ffff,AU
+2001:df7:b000::,2001:df7:b000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:c000::,2001:df7:c003:ffff:ffff:ffff:ffff:ffff,SG
+2001:df7:d000::,2001:df7:d000:ffff:ffff:ffff:ffff:ffff,BD
+2001:df7:e000::,2001:df7:e000:ffff:ffff:ffff:ffff:ffff,IN
+2001:df7:f000::,2001:df7:f000:ffff:ffff:ffff:ffff:ffff,JP
+2001:df8::,2001:df9:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:dfa::,2001:dfa:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:e00::,2001:eff:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2001:f00::,2001:f00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:f08::,2001:f08:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f10::,2001:f10:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:f18::,2001:f18:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:f20::,2001:f20:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:f28::,2001:f28:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:f30::,2001:f30:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:f38::,2001:f38:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:f40::,2001:f40:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:f48::,2001:f48:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:f50::,2001:f50:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:f58::,2001:f58:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f60::,2001:f6f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f80::,2001:f80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:f88::,2001:f88:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:f90::,2001:f90:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2001:f98::,2001:f98:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fa0::,2001:fa0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fa8::,2001:fa8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fb0::,2001:fb1:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:fc0::,2001:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2001:fc8::,2001:fc8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:fd0::,2001:fd0:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:fd8::,2001:fd8:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:fe0::,2001:fe0:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:fe8::,2001:fe8:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2001:ff0::,2001:ff0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:ff8::,2001:ff8:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2001:1200::,2001:1200:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1208::,2001:1208:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1210::,2001:1210:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1218::,2001:1218:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1220::,2001:1220:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1228::,2001:1228:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:122c::,2001:122c:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1230::,2001:1230:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1238::,2001:1238:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1240::,2001:1240:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1248::,2001:1248:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1250::,2001:1250:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1258::,2001:1258:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1260::,2001:1260:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1270::,2001:1270:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1278::,2001:1278:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:1280::,2001:1280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1284::,2001:1284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1288::,2001:1288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:128c::,2001:128c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1290::,2001:1291:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1294::,2001:1294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1298::,2001:1298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:129c::,2001:129c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12a0::,2001:12a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12a4::,2001:12a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12ac::,2001:12ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12b0::,2001:12b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12b4::,2001:12b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12b8::,2001:12b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12bc::,2001:12bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12c0::,2001:12c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12c4::,2001:12c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12c8::,2001:12c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12d0::,2001:12d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12d8::,2001:12d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12e0::,2001:12e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12e8::,2001:12e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12f0::,2001:12f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:12f8::,2001:12f8:1:ffff:ffff:ffff:ffff:ffff,BR
+2001:12f8:4::,2001:12f8:4:ffff:ffff:ffff:ffff:ffff,BR
+2001:12fe::,2001:12ff:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2001:1300::,2001:1300:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:1308::,2001:1308:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2001:1310::,2001:1310:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2001:1318::,2001:1318:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:1320::,2001:1320:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2001:1328::,2001:1328:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2001:1330::,2001:1337:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2001:1338::,2001:1338:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2001:1340::,2001:1340:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2001:1348::,2001:1348:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2001:1350::,2001:1350:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2001:1358::,2001:1358:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2001:1360::,2001:1360:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2001:1368::,2001:1368:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2001:1370::,2001:1370:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2001:1378::,2001:1378:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2001:1380::,2001:1380:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:1388::,2001:1388:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:1398::,2001:1398:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2001:13a0::,2001:13a0:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2001:13a8::,2001:13a8:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2001:13b0::,2001:13b7:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6000::,2001:13c7:6000:ffff:ffff:ffff:ffff:ffff,CO
+2001:13c7:6001::,2001:13c7:6001:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6002::,2001:13c7:6002:ffff:ffff:ffff:ffff:ffff,SX
+2001:13c7:6003::,2001:13c7:6003:ffff:ffff:ffff:ffff:ffff,HT
+2001:13c7:6004::,2001:13c7:6005:ffff:ffff:ffff:ffff:ffff,CW
+2001:13c7:6006::,2001:13c7:6006:ffff:ffff:ffff:ffff:ffff,EC
+2001:13c7:6007::,2001:13c7:600e:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6010::,2001:13c7:601f:ffff:ffff:ffff:ffff:ffff,AR
+2001:13c7:6f00::,2001:13c7:6fff:ffff:ffff:ffff:ffff:ffff,EC
+2001:13c7:7000::,2001:13c7:7000:ffff:ffff:ffff:ffff:ffff,MX
+2001:13c7:7001::,2001:13c7:7003:ffff:ffff:ffff:ffff:ffff,UY
+2001:13c7:7004::,2001:13c7:7004:ffff:ffff:ffff:ffff:ffff,CR
+2001:13c7:7005::,2001:13c7:7009:ffff:ffff:ffff:ffff:ffff,UY
+2001:13c7:7010::,2001:13c7:7013:ffff:ffff:ffff:ffff:ffff,UY
+2001:13c7:7014::,2001:13c7:7014:ffff:ffff:ffff:ffff:ffff,MX
+2001:13c8::,2001:13c8:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2001:13d0::,2001:13d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:13d8::,2001:13d8:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2001:13e0::,2001:13e0:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2001:13e8::,2001:13e8:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2001:13f0::,2001:13f0:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2001:13f8::,2001:13f8:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2001:1400::,2001:1400:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1408::,2001:1408:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:1410::,2001:1410:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1418::,2001:1418:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1420::,2001:1420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1428::,2001:1428:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:1430::,2001:1430:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:1438::,2001:1438:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1440::,2001:1440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1448::,2001:1448:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:1450::,2001:1450:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1458::,2001:1459:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1460::,2001:1460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1468::,2001:146f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1470::,2001:1477:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:1478::,2001:1478:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1488::,2001:1488:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1490::,2001:1490:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2001:1498::,2001:1498:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:14a0::,2001:14a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:14a8::,2001:14a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:14b0::,2001:14b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14b8::,2001:14bf:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:14c0::,2001:14c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14c8::,2001:14c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:14d0::,2001:14d0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:14d8::,2001:14d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14e0::,2001:14e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14e8::,2001:14e8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:14f0::,2001:14f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:14f8::,2001:14f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1500::,2001:1500:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:1508::,2001:1508:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1510::,2001:1510:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1520::,2001:1520:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1528::,2001:1528:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1530::,2001:1530:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:1538::,2001:1538:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1540::,2001:1540:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1548::,2001:1548:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:1558::,2001:1558:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1560::,2001:1560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1568::,2001:1568:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:1570::,2001:1570:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1578::,2001:1578:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1580::,2001:1580:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:1588::,2001:1588:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:1590::,2001:1590:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:1598::,2001:1598:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:15a0::,2001:15a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:15a8::,2001:15a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:15b0::,2001:15b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:15b8::,2001:15b8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:15c0::,2001:15c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:15c8::,2001:15c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:15d8::,2001:15d8:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2001:15e0::,2001:15e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:15e8::,2001:15e8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:15f0::,2001:15f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:15f8::,2001:15f8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2001:1600::,2001:1607:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1608::,2001:1608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1610::,2001:1610:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:1618::,2001:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:1620::,2001:1623:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1628::,2001:1628:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1630::,2001:1637:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1638::,2001:1638:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1640::,2001:1640:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1650::,2001:1650:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1658::,2001:1658:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:1660::,2001:1660:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1668::,2001:1668:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1670::,2001:1670:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2001:1678::,2001:1678:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1680::,2001:1687:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1688::,2001:168f:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2001:1690::,2001:1690:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1698::,2001:1698:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2001:16a0::,2001:16a7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2001:16a8::,2001:16a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:16b0::,2001:16b0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:16b8::,2001:16b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16c0::,2001:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:16c8::,2001:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:16d0::,2001:16d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:16d8::,2001:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:16e0::,2001:16e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16e8::,2001:16e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:16f0::,2001:16f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:16f8::,2001:16f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1700::,2001:171f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1800::,2001:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1808::,2001:1808:ffff:ffff:ffff:ffff:ffff:ffff,GD
+2001:1810::,2001:1810:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1818::,2001:1818:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1820::,2001:1820:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1828::,2001:1828:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1830::,2001:1830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1838::,2001:1838:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1840::,2001:1840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1848::,2001:1848:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1850::,2001:1850:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1858::,2001:1858:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1860::,2001:1860:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1868::,2001:1868:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1878::,2001:1878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1888::,2001:1888:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1890::,2001:1898:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18a0::,2001:18a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18a8::,2001:18a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18b0::,2001:18b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18b8::,2001:18b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18c0::,2001:18c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:18c8::,2001:18c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18d8::,2001:18d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18e0::,2001:18e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18e8::,2001:18e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:18f0::,2001:18f0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:18f8::,2001:18f8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1900::,2001:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1908::,2001:1908:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1910::,2001:1910:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1920::,2001:1920:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1928::,2001:1928:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1930::,2001:1930:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1938::,2001:1938:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1940::,2001:1940:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1948::,2001:1948:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1950::,2001:1950:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1958::,2001:1958:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1960::,2001:1960:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1968::,2001:1968:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1970::,2001:1970:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:1978::,2001:1978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1980::,2001:1980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1988::,2001:1988:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1990::,2001:1990:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1998::,2001:1998:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19a0::,2001:19a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19a8::,2001:19a8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:19b0::,2001:19b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19b8::,2001:19b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19c0::,2001:19c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:19c8::,2001:19c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19d0::,2001:19d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19d8::,2001:19d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19e0::,2001:19e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19e8::,2001:19e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f0::,2001:19f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:19f8::,2001:19f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:1a00::,2001:1aff:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:1b00::,2001:1b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:1b08::,2001:1b08:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b10::,2001:1b10:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b18::,2001:1b18:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b20::,2001:1b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b28::,2001:1b28:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:1b30::,2001:1b37:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b38::,2001:1b38:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b40::,2001:1b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1b48::,2001:1b48:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b50::,2001:1b57:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:1b58::,2001:1b58:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b60::,2001:1b60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1b68::,2001:1b68:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2001:1b70::,2001:1b77:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1b78::,2001:1b78:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:1b80::,2001:1b80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:1b88::,2001:1b88:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1b90::,2001:1b90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1b98::,2001:1b98:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:1ba0::,2001:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2001:1ba8::,2001:1ba8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:1bb0::,2001:1bb0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:1bb8::,2001:1bb8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:1bc0::,2001:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:1bc8::,2001:1bcf:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:1bd0::,2001:1bd0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:1bd8::,2001:1bd8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:1be0::,2001:1be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:1be8::,2001:1be8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:1bf0::,2001:1bf7:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2001:1bf8::,2001:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2001:1c00::,2001:1dff:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4000::,2001:4000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4010::,2001:4010:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4018::,2001:4018:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4020::,2001:4020:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4028::,2001:4028:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4030::,2001:4030:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4038::,2001:4038:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4040::,2001:4040:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:4048::,2001:4048:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2001:4050::,2001:4050:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4058::,2001:4058:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:4060::,2001:4060:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4068::,2001:4068:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4070::,2001:4070:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4078::,2001:407f:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:4080::,2001:4080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4088::,2001:4088:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4090::,2001:4090:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:40a0::,2001:40a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:40a8::,2001:40a8:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:40b0::,2001:40b0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:40b8::,2001:40b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:40c0::,2001:40c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:40c8::,2001:40cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:40d0::,2001:40d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:40d8::,2001:40d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:40e0::,2001:40e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:40e8::,2001:40e8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2001:40f0::,2001:40f0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:40f8::,2001:40f8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4100::,2001:4100:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4108::,2001:4108:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4118::,2001:4118:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2001:4120::,2001:4120:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4128::,2001:4128:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4130::,2001:4130:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2001:4138::,2001:4140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4150::,2001:4150:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4158::,2001:415f:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:4160::,2001:4160:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4168::,2001:4168:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4170::,2001:4170:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2001:4178::,2001:4180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4188::,2001:4188:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2001:4190::,2001:4190:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:4198::,2001:4198:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:41a0::,2001:41a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:41a8::,2001:41a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:41b0::,2001:41b0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2001:41b8::,2001:41b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:41c0::,2001:41cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:41d0::,2001:41d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:41d8::,2001:41d8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:41e0::,2001:41e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:41e8::,2001:41e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:41f0::,2001:41f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:41f8::,2001:41f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4200::,2001:4200:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4208::,2001:4208:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4210::,2001:4210:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4218::,2001:4218:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4220::,2001:4220:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:4228::,2001:4228:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2001:4238::,2001:4238:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4240::,2001:4240:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2001:4248::,2001:4248:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:4250::,2001:4250:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2001:4258::,2001:4258:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2001:4260::,2001:4260:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4268::,2001:4268:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2001:4270::,2001:4270:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2001:4278::,2001:4278:ffff:ffff:ffff:ffff:ffff:ffff,SN
+2001:4288::,2001:4288:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2001:4290::,2001:4290:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:4298::,2001:4298:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2001:42a0::,2001:42a0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42a8::,2001:42a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42b0::,2001:42b0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2001:42b8::,2001:42b8:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:42c0::,2001:42c0:ffff:ffff:ffff:ffff:ffff:ffff,ML
+2001:42c8::,2001:42c8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42d0::,2001:42d0:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:42d8::,2001:42d8:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2001:42e0::,2001:42e0:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2001:42f0::,2001:42f0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:42f8::,2001:42f8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2001:4300::,2001:4300:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:4308::,2001:4308:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4310::,2001:4310:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2001:4318::,2001:4318:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2001:4320::,2001:4320:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2001:4328::,2001:4328:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:4330::,2001:4330:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:4338::,2001:4338:ffff:ffff:ffff:ffff:ffff:ffff,SZ
+2001:4340::,2001:4340:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2001:4350::,2001:4350:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2001:4358::,2001:4358:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4368::,2001:4368:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4370::,2001:4370:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:4378::,2001:4378:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2001:4388::,2001:4388:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:4398::,2001:4398:ffff:ffff:ffff:ffff:ffff:ffff,MG
+2001:43a0::,2001:43a0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43a8::,2001:43a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43b0::,2001:43b0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2001:43b8::,2001:43b8:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2001:43c0::,2001:43c0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2001:43c8::,2001:43c8:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2001:43d0::,2001:43d0:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2001:43d8::,2001:43d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43e0::,2001:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2001:43e8::,2001:43e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f0::,2001:43f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2001:43f8::,2001:43f8:1:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:10::,2001:43f8:10:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:20::,2001:43f8:20:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:30::,2001:43f8:30:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:50::,2001:43f8:50:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:60::,2001:43f8:60:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:70::,2001:43f8:77:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:80::,2001:43f8:80:ffff:ffff:ffff:ffff:ffff,NA
+2001:43f8:90::,2001:43f8:90:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:a0::,2001:43f8:a0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:b0::,2001:43f8:b0:ffff:ffff:ffff:ffff:ffff,SL
+2001:43f8:c0::,2001:43f8:c0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:d0::,2001:43f8:d0:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:e0::,2001:43f8:e0:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:100::,2001:43f8:100:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:110::,2001:43f8:110:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:120::,2001:43f8:120:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:130::,2001:43f8:130:ffff:ffff:ffff:ffff:ffff,UG
+2001:43f8:140::,2001:43f8:140:ffff:ffff:ffff:ffff:ffff,ZM
+2001:43f8:150::,2001:43f8:150:ffff:ffff:ffff:ffff:ffff,RW
+2001:43f8:160::,2001:43f8:160:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:170::,2001:43f8:170:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:180::,2001:43f8:180:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:190::,2001:43f8:190:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:1a0::,2001:43f8:1a0:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:1c0::,2001:43f8:1c0:ffff:ffff:ffff:ffff:ffff,DZ
+2001:43f8:1d0::,2001:43f8:1d0:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:1e0::,2001:43f8:1e0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:1f0::,2001:43f8:1f5:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:200::,2001:43f8:200:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:210::,2001:43f8:210:ffff:ffff:ffff:ffff:ffff,LS
+2001:43f8:220::,2001:43f8:220:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:230::,2001:43f8:230:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:240::,2001:43f8:241:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:250::,2001:43f8:250:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:260::,2001:43f8:260:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:270::,2001:43f8:270:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:290::,2001:43f8:290:ffff:ffff:ffff:ffff:ffff,MG
+2001:43f8:2a0::,2001:43f8:2a0:ffff:ffff:ffff:ffff:ffff,BW
+2001:43f8:2b0::,2001:43f8:2b0:ffff:ffff:ffff:ffff:ffff,BW
+2001:43f8:2c0::,2001:43f8:2c0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:2e0::,2001:43f8:2e0:ffff:ffff:ffff:ffff:ffff,EG
+2001:43f8:2f0::,2001:43f8:2f0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:310::,2001:43f8:310:ffff:ffff:ffff:ffff:ffff,ZW
+2001:43f8:320::,2001:43f8:320:ffff:ffff:ffff:ffff:ffff,TN
+2001:43f8:330::,2001:43f8:330:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:340::,2001:43f8:340:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:360::,2001:43f8:360:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:370::,2001:43f8:370:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:380::,2001:43f8:380:ffff:ffff:ffff:ffff:ffff,MW
+2001:43f8:390::,2001:43f8:390:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:3a0::,2001:43f8:3a0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:3b0::,2001:43f8:3b0:ffff:ffff:ffff:ffff:ffff,NA
+2001:43f8:3c0::,2001:43f8:3c0:ffff:ffff:ffff:ffff:ffff,CD
+2001:43f8:3d0::,2001:43f8:3d0:ffff:ffff:ffff:ffff:ffff,BF
+2001:43f8:400::,2001:43f8:4ff:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:600::,2001:43f8:60f:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:610::,2001:43f8:610:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:620::,2001:43f8:620:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:630::,2001:43f8:630:ffff:ffff:ffff:ffff:ffff,MW
+2001:43f8:640::,2001:43f8:640:ffff:ffff:ffff:ffff:ffff,MZ
+2001:43f8:650::,2001:43f8:650:ffff:ffff:ffff:ffff:ffff,MA
+2001:43f8:660::,2001:43f8:660:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:670::,2001:43f8:670:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:680::,2001:43f8:680:ffff:ffff:ffff:ffff:ffff,TZ
+2001:43f8:6a0::,2001:43f8:6a0:ffff:ffff:ffff:ffff:ffff,CG
+2001:43f8:6b0::,2001:43f8:6b3:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:6c0::,2001:43f8:6c0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:6d0::,2001:43f8:6d3:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:6e0::,2001:43f8:6e0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:700::,2001:43f8:70f:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:720::,2001:43f8:720:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:750::,2001:43f8:75f:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:760::,2001:43f8:760:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:770::,2001:43f8:773:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:780::,2001:43f8:780:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:790::,2001:43f8:790:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:7a0::,2001:43f8:7a0:ffff:ffff:ffff:ffff:ffff,MU
+2001:43f8:7b0::,2001:43f8:7b0:ffff:ffff:ffff:ffff:ffff,KE
+2001:43f8:7c0::,2001:43f8:7c0:ffff:ffff:ffff:ffff:ffff,AO
+2001:43f8:7d0::,2001:43f8:7d0:ffff:ffff:ffff:ffff:ffff,NG
+2001:43f8:7e0::,2001:43f8:7e0:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:7f0::,2001:43f8:7f0:ffff:ffff:ffff:ffff:ffff,SD
+2001:43f8:800::,2001:43f8:83f:ffff:ffff:ffff:ffff:ffff,GH
+2001:43f8:900::,2001:43f8:900:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:910::,2001:43f8:910:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:920::,2001:43f8:920:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:930::,2001:43f8:930:ffff:ffff:ffff:ffff:ffff,MZ
+2001:43f8:940::,2001:43f8:940:ffff:ffff:ffff:ffff:ffff,CI
+2001:43f8:950::,2001:43f8:950:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:960::,2001:43f8:960:ffff:ffff:ffff:ffff:ffff,ZA
+2001:43f8:970::,2001:43f8:970:ffff:ffff:ffff:ffff:ffff,GM
+2001:43f8:980::,2001:43f8:981:ffff:ffff:ffff:ffff:ffff,NA
+2001:43f8:990::,2001:43f8:991:ffff:ffff:ffff:ffff:ffff,BI
+2001:43f8:9a0::,2001:43f8:9a0:ffff:ffff:ffff:ffff:ffff,BJ
+2001:43f8:9b0::,2001:43f8:9b1:ffff:ffff:ffff:ffff:ffff,SZ
+2001:4400::,2001:4403:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4408::,2001:4408:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4410::,2001:4410:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4420::,2001:4420:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4428::,2001:4428:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4430::,2001:4430:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:4438::,2001:4438:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:4450::,2001:4450:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2001:4458::,2001:4458:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:4460::,2001:4460:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:4470::,2001:4470:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:4478::,2001:447b:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:4480::,2001:4480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2001:4488::,2001:448b:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2001:4490::,2001:4493:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4498::,2001:4498:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2001:44a0::,2001:44a0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:44a8::,2001:44a8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:44b0::,2001:44b0:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:44b8::,2001:44b8:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:44c0::,2001:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:44c8::,2001:44c8:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2001:44d0::,2001:44df:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2001:44f0::,2001:44f0:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4500::,2001:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4508::,2001:4508:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4510::,2001:4517:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2001:4520::,2001:4520:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4528::,2001:452b:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2001:4530::,2001:4530:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2001:4538::,2001:4538:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2001:4540::,2001:455f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4580::,2001:45bf:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2001:4600::,2001:46ff:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4800::,2001:4808:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4810::,2001:4810:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4818::,2001:4818:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4828::,2001:4828:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4830::,2001:4830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4838::,2001:4838:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4840::,2001:4840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4848::,2001:4848:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4850::,2001:4850:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4858::,2001:4858:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4860::,2001:4860:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4868::,2001:4868:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4870::,2001:4871:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4878::,2001:4878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4880::,2001:4880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4888::,2001:4888:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4890::,2001:4890:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4898::,2001:489a:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48a0::,2001:48a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48a8::,2001:48a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48b0::,2001:48b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48b8::,2001:48b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48c0::,2001:48c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48c8::,2001:48c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48d0::,2001:48d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48d8::,2001:48d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48e0::,2001:48e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48e8::,2001:48e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48f0::,2001:48f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:48f8::,2001:48f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4900::,2001:4900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4908::,2001:4908:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4910::,2001:4910:ffff:ffff:ffff:ffff:ffff:ffff,BM
+2001:4918::,2001:4918:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4920::,2001:4920:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4928::,2001:4928:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4930::,2001:4930:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4938::,2001:4938:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4940::,2001:4940:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4948::,2001:4948:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4950::,2001:4950:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4958::,2001:4958:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2001:4960::,2001:4960:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4968::,2001:4968:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4970::,2001:4970:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4978::,2001:4978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4980::,2001:4980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4988::,2001:4988:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4990::,2001:4990:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4998::,2001:4998:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49a0::,2001:49a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49a8::,2001:49a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49b0::,2001:49b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49b8::,2001:49b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49c0::,2001:49c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49c8::,2001:49c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49d0::,2001:49d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49d8::,2001:49d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49e0::,2001:49e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49e8::,2001:49e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49f0::,2001:49f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:49f8::,2001:49f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2001:4a00::,2001:4a1f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b00::,2001:4b07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4b08::,2001:4b08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b10::,2001:4b10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b18::,2001:4b18:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4b20::,2001:4b28:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4b30::,2001:4b30:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4b38::,2001:4b3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4b40::,2001:4b40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4b48::,2001:4b48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4b50::,2001:4b50:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2001:4b58::,2001:4b58:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2001:4b60::,2001:4b60:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4b68::,2001:4b68:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4b70::,2001:4b7f:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4b80::,2001:4b87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4b88::,2001:4b88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4b90::,2001:4b90:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4b98::,2001:4b98:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2001:4ba0::,2001:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4ba8::,2001:4ba8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:4bb0::,2001:4bb0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4bb8::,2001:4bb8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4bc0::,2001:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4bc8::,2001:4bc8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2001:4bd0::,2001:4bd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4bd8::,2001:4bd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4be0::,2001:4be0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2001:4be8::,2001:4be8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4bf0::,2001:4bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4bf8::,2001:4bf8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4c00::,2001:4cff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2001:4d00::,2001:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2001:4d08::,2001:4d08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d10::,2001:4d10:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4d18::,2001:4d18:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2001:4d20::,2001:4d20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d30::,2001:4d30:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d38::,2001:4d38:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2001:4d48::,2001:4d48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d50::,2001:4d50:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d58::,2001:4d58:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4d60::,2001:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4d68::,2001:4d68:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2001:4d70::,2001:4d70:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2001:4d78::,2001:4d78:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4d80::,2001:4d80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2001:4d88::,2001:4d88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4d90::,2001:4d90:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2001:4d98::,2001:4d98:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4da0::,2001:4da7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2001:4da8::,2001:4da8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4db0::,2001:4db0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4db8::,2001:4db8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2001:4dc0::,2001:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2001:4dc8::,2001:4dc8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4dd0::,2001:4dd7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2001:4dd8::,2001:4dd8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2001:4de0::,2001:4de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2001:4de8::,2001:4de8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2001:4df0::,2001:4df0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2001:8000::,2001:8fff:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2001:a000::,2001:a7ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2001:b000::,2001:b7ff:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2003::,2003:1fff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2400::,2400:fff:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:1000::,2400:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:1080::,2400:1080:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1100::,2400:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1180::,2400:1180:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1200::,2400:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:1300::,2400:1300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:1380::,2400:1380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:1400::,2400:1400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:1480::,2400:1480:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1500::,2400:1500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:1580::,2400:1580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:1600::,2400:1600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1680::,2400:1680:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:1700::,2400:1700:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1780::,2400:1780:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1800::,2400:1800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:1880::,2400:1880:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:1900::,2400:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1980::,2400:1980:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:1a00::,2400:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:1a80::,2400:1a80:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:1b00::,2400:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:1b80::,2400:1b80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:1c00::,2400:1c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1c80::,2400:1c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1d00::,2400:1d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:1d80::,2400:1d80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1e00::,2400:1e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1e80::,2400:1e80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:1f00::,2400:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:1f80::,2400:1f80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:2000::,2400:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3080::,2400:3080:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:3100::,2400:3100:ffff:ffff:ffff:ffff:ffff:ffff,VU
+2400:3180::,2400:3180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3200::,2400:3200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3280::,2400:3280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3300::,2400:3300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:3380::,2400:3380:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3400::,2400:3400:ffff:ffff:ffff:ffff:ffff:ffff,VU
+2400:3480::,2400:3480:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:3500::,2400:3500:ffff:ffff:ffff:ffff:ffff:ffff,TV
+2400:3580::,2400:3580:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:3600::,2400:3600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3680::,2400:3680:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3700::,2400:3700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:3800::,2400:3800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3880::,2400:3880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3900::,2400:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3980::,2400:3980:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3a00::,2400:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3a80::,2400:3a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3b00::,2400:3b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3b80::,2400:3b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:3c00::,2400:3c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:3c80::,2400:3c80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3d00::,2400:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:3d80::,2400:3d80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:3e00::,2400:3e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:3e80::,2400:3e80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:3f00::,2400:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:3f80::,2400:3f80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:4000::,2400:43ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:4400::,2400:4400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:4480::,2400:4480:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:4500::,2400:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:4580::,2400:4580:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:4600::,2400:4600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:4680::,2400:4680:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4700::,2400:4700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4780::,2400:4780:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:4800::,2400:4800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:4880::,2400:4880:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2400:4900::,2400:4900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4980::,2400:4980:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:4a00::,2400:4a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4a80::,2400:4a80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:4b00::,2400:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4b80::,2400:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4c00::,2400:4c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:4c80::,2400:4c80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:4d00::,2400:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:4d80::,2400:4d80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:4e00::,2400:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:4e80::,2400:4e80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:4f00::,2400:4f00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:4f80::,2400:4f80:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:5000::,2400:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5080::,2400:5080:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5100::,2400:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:5180::,2400:5180:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:5200::,2400:5200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5280::,2400:5280:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5300::,2400:5300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5380::,2400:5380:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:5400::,2400:5400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5480::,2400:5480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:5500::,2400:5500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:5580::,2400:5580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5600::,2400:5600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5680::,2400:5680:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:5700::,2400:5700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:5780::,2400:5780:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:5800::,2400:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:5880::,2400:5880:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:5900::,2400:5900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:5980::,2400:5980:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:5a00::,2400:5a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5a80::,2400:5a80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:5b00::,2400:5b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:5b80::,2400:5b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5c00::,2400:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5c80::,2400:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5d00::,2400:5d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5d80::,2400:5d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5e00::,2400:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:5e80::,2400:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:5f00::,2400:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PF
+2400:5f80::,2400:5f80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:6000::,2400:6000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6080::,2400:6080:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:6100::,2400:6100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6180::,2400:6180:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6200::,2400:6200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6280::,2400:6280:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:6300::,2400:6300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6380::,2400:6380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6400::,2400:6400:ffff:ffff:ffff:ffff:ffff:ffff,TO
+2400:6480::,2400:6480:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6500::,2400:6500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6580::,2400:6580:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6600::,2400:6600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6680::,2400:6680:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6700::,2400:6700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:6780::,2400:6780:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:6800::,2400:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6880::,2400:6880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6900::,2400:6900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:6980::,2400:6980:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6a00::,2400:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6a80::,2400:6a80:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:6b00::,2400:6b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:6b80::,2400:6b80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:6c00::,2400:6c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6c80::,2400:6c80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:6d00::,2400:6d00:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2400:6d80::,2400:6d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:6e00::,2400:6e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:6e80::,2400:6e80:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:6f00::,2400:6f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:6f80::,2400:6f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7000::,2400:7000:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:7080::,2400:7080:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:7100::,2400:7100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7180::,2400:7180:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7200::,2400:7200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7300::,2400:7300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:7380::,2400:7380:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:7400::,2400:7400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:7480::,2400:7480:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2400:7500::,2400:7500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:7580::,2400:7580:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7600::,2400:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7680::,2400:7680:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:7700::,2400:7700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:7780::,2400:7780:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:7800::,2400:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:7880::,2400:7880:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:7900::,2400:7900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:7980::,2400:7980:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:7a00::,2400:7a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:7a80::,2400:7a80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:7b00::,2400:7b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:7b80::,2400:7b83:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:7c00::,2400:7c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:7c80::,2400:7c80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:7d00::,2400:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7d80::,2400:7d80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7e00::,2400:7e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:7e80::,2400:7e80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:7f00::,2400:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:7f80::,2400:7f80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8000::,2400:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:8080::,2400:8080:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8100::,2400:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8180::,2400:8180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:8200::,2400:8200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8280::,2400:8280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8300::,2400:8300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8380::,2400:8380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8400::,2400:8400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8480::,2400:8480:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2400:8500::,2400:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8580::,2400:8580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8600::,2400:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8680::,2400:8680:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8700::,2400:8700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:8780::,2400:8780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8800::,2400:8800:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8880::,2400:8880:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:8900::,2400:8900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:8980::,2400:8980:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8a00::,2400:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8a80::,2400:8a80:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:8b00::,2400:8b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:8b80::,2400:8b80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:8c00::,2400:8c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:8c80::,2400:8c80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:8d00::,2400:8d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8d80::,2400:8d80:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2400:8e00::,2400:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8e80::,2400:8e80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:8f00::,2400:8f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:8f80::,2400:8f80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9000::,2400:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9080::,2400:9080:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:9100::,2400:9100:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2400:9180::,2400:9180:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:9200::,2400:9200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:9280::,2400:9280:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:9300::,2400:9300:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2400:9380::,2400:9381:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:9400::,2400:9400:ffff:ffff:ffff:ffff:ffff:ffff,BN
+2400:9480::,2400:9480:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9500::,2400:9500:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9580::,2400:9580:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9600::,2400:9600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9680::,2400:9680:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:9700::,2400:9700:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9780::,2400:9780:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:9800::,2400:9800:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:9880::,2400:9880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9900::,2400:9900:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9980::,2400:9980:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:9a00::,2400:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9a80::,2400:9a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9b00::,2400:9b00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:9b80::,2400:9b80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9c00::,2400:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:9c80::,2400:9c80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:9d00::,2400:9d00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:9d80::,2400:9d80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:9e00::,2400:9e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:9e80::,2400:9e80:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:9f80::,2400:9f80:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:a000::,2400:a000:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:a080::,2400:a080:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:a100::,2400:a100:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:a180::,2400:a180:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:a280::,2400:a280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a300::,2400:a300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:a380::,2400:a380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a400::,2400:a400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2400:a480::,2400:a480:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a500::,2400:a500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a580::,2400:a580:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:a600::,2400:a600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a680::,2400:a680:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:a700::,2400:a700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a780::,2400:a780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a800::,2400:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:a880::,2400:a880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:a900::,2400:a900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:a980::,2400:a980:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:aa00::,2400:aa00:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2400:aa80::,2400:aa80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:ab00::,2400:ab00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:ab80::,2400:ab80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:ac00::,2400:ac00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:ac80::,2400:ac80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ad00::,2400:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ad80::,2400:ad80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:ae00::,2400:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ae80::,2400:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:af80::,2400:af80:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:b000::,2400:b000:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:b080::,2400:b080:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:b100::,2400:b100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b180::,2400:b180:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:b200::,2400:b200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b280::,2400:b280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b300::,2400:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b380::,2400:b380:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:b400::,2400:b400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:b480::,2400:b480:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:b500::,2400:b500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b580::,2400:b580:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:b600::,2400:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b680::,2400:b680:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:b700::,2400:b700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:b780::,2400:b780:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b800::,2400:b800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b880::,2400:b880:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:b900::,2400:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:b980::,2400:b980:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:ba00::,2400:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ba80::,2400:ba80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:bb00::,2400:bb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:bb80::,2400:bb80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:bc00::,2400:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:bc80::,2400:bc80:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2400:bd00::,2400:bd00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:bd80::,2400:bd80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:be00::,2400:be00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:be80::,2400:be80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:bf00::,2400:bf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:bf80::,2400:bf80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:c000::,2400:c000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:c080::,2400:c080:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:c100::,2400:c100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c180::,2400:c180:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2400:c200::,2400:c200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:c300::,2400:c300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c380::,2400:c380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:c400::,2400:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c480::,2400:c480:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c500::,2400:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:c580::,2400:c580:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:c600::,2400:c600:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:c680::,2400:c680:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c700::,2400:c700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:c780::,2400:c780:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:c800::,2400:c807:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:c880::,2400:c880:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:c900::,2400:c900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:c980::,2400:c980:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ca00::,2400:ca00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:ca80::,2400:ca80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:cb00::,2400:cb00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:cb80::,2400:cb80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:cc00::,2400:cc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:cc80::,2400:cc80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:cd00::,2400:cd00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:cd80::,2400:cd80:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:ce00::,2400:ce00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ce80::,2400:ce80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:cf00::,2400:cf00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:cf80::,2400:cf80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d000::,2400:d000:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:d080::,2400:d080:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d100::,2400:d100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d180::,2400:d180:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:d200::,2400:d200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d280::,2400:d280:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:d300::,2400:d300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d380::,2400:d380:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d400::,2400:d400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d480::,2400:d480:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d500::,2400:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:d580::,2400:d580:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:d600::,2400:d600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d680::,2400:d680:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:d700::,2400:d700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:d780::,2400:d780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:d800::,2400:d803:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:d880::,2400:d880:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:d900::,2400:d900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2400:d980::,2400:d980:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:da00::,2400:da00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:da80::,2400:da80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:db00::,2400:db00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:db80::,2400:db80:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2400:dc00::,2400:dc00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:dc80::,2400:dc80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:dd00::,2400:dd0f:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:dd80::,2400:dd80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:de00::,2400:de00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:de80::,2400:de80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:df00::,2400:df00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:df80::,2400:df80:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2400:e000::,2400:e000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:e080::,2400:e080:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e100::,2400:e100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:e180::,2400:e180:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:e200::,2400:e200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:e280::,2400:e280:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e300::,2400:e300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:e380::,2400:e380:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e400::,2400:e400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:e480::,2400:e480:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:e500::,2400:e500:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2400:e580::,2400:e580:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:e680::,2400:e680:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:e780::,2400:e780:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:e880::,2400:e880:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:e900::,2400:e900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:e980::,2400:e980:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:ea00::,2400:ea00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2400:ea80::,2400:ea80:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:eb00::,2400:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:eb80::,2400:eb80:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:ec00::,2400:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ec80::,2400:ec80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ed00::,2400:ed00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:ed80::,2400:ed80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ee00::,2400:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:ee80::,2400:ee80:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2400:ef00::,2400:ef00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:ef80::,2400:ef80:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f000::,2400:f000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f080::,2400:f080:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f100::,2400:f100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f180::,2400:f180:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:f200::,2400:f200:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:f280::,2400:f280:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:f300::,2400:f300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f380::,2400:f380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:f400::,2400:f400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2400:f480::,2400:f480:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:f580::,2400:f580:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:f600::,2400:f600:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2400:f680::,2400:f680:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f700::,2400:f700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f780::,2400:f780:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2400:f800::,2400:f800:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f880::,2400:f880:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2400:f900::,2400:f900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:f980::,2400:f980:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:fa00::,2400:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:fa80::,2400:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:fb00::,2400:fb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2400:fb80::,2400:fb80:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2400:fc00::,2400:fc00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2400:fc80::,2400:fc80:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2400:fd00::,2400:fd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2400:fd80::,2400:fd80:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2400:fe00::,2400:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2400:fe80::,2400:fe80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2400:ff00::,2400:ff00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2400:ff80::,2400:ff80:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2401::,2401:1:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:80::,2401:80:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:100::,2401:100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:180::,2401:180:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:200::,2401:200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:280::,2401:280:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:300::,2401:300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:380::,2401:380:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:400::,2401:400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:480::,2401:480:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:500::,2401:500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:580::,2401:580:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:600::,2401:600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:680::,2401:680:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:700::,2401:700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:780::,2401:780:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:800::,2401:800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:880::,2401:880:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:900::,2401:900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:980::,2401:980:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:a00::,2401:a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:a80::,2401:a80:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b00::,2401:b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:c00::,2401:c00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2401:d00::,2401:d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:e00::,2401:e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:f00::,2401:f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1000::,2401:1000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:1100::,2401:1100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:1200::,2401:1200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:1300::,2401:1300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:1400::,2401:1400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:1500::,2401:1500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:1600::,2401:1600:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:1700::,2401:1700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1800::,2401:1801:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:1900::,2401:1900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:1a00::,2401:1a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:1b00::,2401:1b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1c00::,2401:1c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:1d00::,2401:1d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:1e00::,2401:1e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:1f00::,2401:1f01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:2000::,2401:2000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:2001::,2401:2001:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:2100::,2401:2100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:2200::,2401:2200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:2300::,2401:2300:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:2400::,2401:2400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:2500::,2401:2500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:2600::,2401:2600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:2700::,2401:2700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:2800::,2401:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:2900::,2401:2900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:2a00::,2401:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:2b00::,2401:2b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:2c00::,2401:2c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:2d00::,2401:2d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:2e00::,2401:2e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:2f00::,2401:2f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:3000::,2401:3000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:3100::,2401:3100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:3200::,2401:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:3300::,2401:3300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:3400::,2401:3400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:3500::,2401:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:3600::,2401:3600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:3800::,2401:3800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:3900::,2401:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:3a00::,2401:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:3b00::,2401:3b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:3c00::,2401:3c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:3d00::,2401:3d0f:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:3e00::,2401:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:3f00::,2401:3f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:4000::,2401:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:4100::,2401:4100:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:4200::,2401:4200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:4300::,2401:4300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4400::,2401:4400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:4500::,2401:4500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:4700::,2401:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4800::,2401:4800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4900::,2401:4900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:4a00::,2401:4a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:4b00::,2401:4b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:4c00::,2401:4c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:4d00::,2401:4d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:4e00::,2401:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:4f00::,2401:4f00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:5000::,2401:5000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:5100::,2401:5100:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2401:5200::,2401:5200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:5300::,2401:5300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:5400::,2401:5400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:5500::,2401:5500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5700::,2401:5700:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:5800::,2401:5800:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:5900::,2401:5900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:5a00::,2401:5a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:5b00::,2401:5b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5c00::,2401:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:5d00::,2401:5d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:5e00::,2401:5e00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:5f00::,2401:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:6000::,2401:6fff:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7000::,2401:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:7100::,2401:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7200::,2401:7200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7300::,2401:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7400::,2401:7401:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:7500::,2401:7500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:7600::,2401:7600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:7700::,2401:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7800::,2401:7800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:7900::,2401:7900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:7a00::,2401:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7b00::,2401:7b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:7c00::,2401:7c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:7d00::,2401:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:7e00::,2401:7e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:7f00::,2401:7f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8000::,2401:803f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:8100::,2401:8100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:8200::,2401:8200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8300::,2401:8300:ffff:ffff:ffff:ffff:ffff:ffff,MV
+2401:8400::,2401:8400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:8500::,2401:8500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:8600::,2401:8600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8700::,2401:8700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8800::,2401:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:8900::,2401:8900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:8a00::,2401:8a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:8b00::,2401:8b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:8c00::,2401:8c01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:8d00::,2401:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:8e00::,2401:8e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:8f00::,2401:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:9100::,2401:9100:ffff:ffff:ffff:ffff:ffff:ffff,MO
+2401:9200::,2401:9200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:9300::,2401:9300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:9400::,2401:9400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9500::,2401:9500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9600::,2401:9600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:9700::,2401:9700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:9800::,2401:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:9900::,2401:9900:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:9a00::,2401:9a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:9b00::,2401:9b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:9c00::,2401:9c00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:9d00::,2401:9d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:9e00::,2401:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:9f00::,2401:9f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:a000::,2401:a000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:a100::,2401:a100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a300::,2401:a300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:a400::,2401:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:a500::,2401:a500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:a600::,2401:a600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:a700::,2401:a700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:a800::,2401:a800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:a900::,2401:a900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:aa00::,2401:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ab00::,2401:ab00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2401:ac00::,2401:ac00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ad00::,2401:ad00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:ae00::,2401:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:af00::,2401:af00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2401:b000::,2401:b000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:b100::,2401:b100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:b200::,2401:b200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:b300::,2401:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b400::,2401:b400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:b500::,2401:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b600::,2401:b600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:b700::,2401:b700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:b800::,2401:b800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:b900::,2401:b900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:ba00::,2401:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:bb00::,2401:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:bc00::,2401:bc00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2401:bd00::,2401:bd00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:be00::,2401:be00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:bf00::,2401:bf00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:c000::,2401:c000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:c100::,2401:c100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:c200::,2401:c200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:c300::,2401:c300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:c400::,2401:c400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:c500::,2401:c500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:c600::,2401:c600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:c700::,2401:c700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:c800::,2401:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:c900::,2401:c901:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:ca00::,2401:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cb00::,2401:cb00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2401:cc00::,2401:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cd00::,2401:cd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:ce00::,2401:ce00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:cf00::,2401:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:d000::,2401:d000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:d100::,2401:d100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:d200::,2401:d200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:d300::,2401:d300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:d400::,2401:d400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:d500::,2401:d500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d600::,2401:d600:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2401:d700::,2401:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:d800::,2401:d800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:d900::,2401:d900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:da00::,2401:da00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:db00::,2401:db00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:dc00::,2401:dc00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:dd00::,2401:dd00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2401:de00::,2401:de00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:df00::,2401:df01:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e000::,2401:e000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2401:e100::,2401:e100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e200::,2401:e200:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2401:e300::,2401:e300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:e400::,2401:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:e500::,2401:e500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:e600::,2401:e600:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2401:e700::,2401:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:e800::,2401:e800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2401:e900::,2401:e900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2401:ea00::,2401:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2401:eb00::,2401:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ec00::,2401:ec00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:ed00::,2401:ed00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ee00::,2401:ee00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2401:ef00::,2401:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:f000::,2401:f000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:f100::,2401:f100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:f200::,2401:f200:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2401:f300::,2401:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2401:f400::,2401:f400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2401:f500::,2401:f500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2401:f600::,2401:f600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:f700::,2401:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:f800::,2401:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2401:f900::,2401:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2401:fa00::,2401:fa00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:fb00::,2401:fb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2401:fc00::,2401:fc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:fd00::,2401:fd00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2401:fe00::,2401:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2401:ff00::,2401:ff00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402::,2402:3ff:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:400::,2402:400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:500::,2402:500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:600::,2402:600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:700::,2402:700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:800::,2402:800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:900::,2402:900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:a00::,2402:a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:b00::,2402:b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:c00::,2402:c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:d00::,2402:d00:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2402:e00::,2402:e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:f00::,2402:f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1000::,2402:1000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:1100::,2402:1100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:1200::,2402:1200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:1300::,2402:1300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1400::,2402:1400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:1500::,2402:1500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:1600::,2402:1600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:1700::,2402:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1800::,2402:1800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1900::,2402:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1a00::,2402:1a00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:1b00::,2402:1b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:1c00::,2402:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:1d00::,2402:1d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:1e00::,2402:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:1f00::,2402:1f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:2000::,2402:2000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2100::,2402:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:2200::,2402:2200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:2300::,2402:2300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:2400::,2402:2400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2500::,2402:2500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2600::,2402:2600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:2700::,2402:2700:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2402:2800::,2402:2800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:2900::,2402:2900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:2a00::,2402:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2b00::,2402:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:2c00::,2402:2c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:2d00::,2402:2d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:2f00::,2402:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3000::,2402:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3100::,2402:3100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:3200::,2402:3200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3300::,2402:3300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:3400::,2402:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3500::,2402:3500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3600::,2402:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3700::,2402:3700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:3800::,2402:3800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3900::,2402:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3a00::,2402:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:3b00::,2402:3b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3c00::,2402:3c00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:3d00::,2402:3d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:3e00::,2402:3e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:3f00::,2402:3f00:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2402:4000::,2402:4000:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2402:4100::,2402:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:4200::,2402:4200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:4300::,2402:4300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:4400::,2402:4400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:4500::,2402:4500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:4600::,2402:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:4700::,2402:4700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:4800::,2402:4800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:4900::,2402:4900:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:4a00::,2402:4a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:4b00::,2402:4b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:4c00::,2402:4c01:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:4d00::,2402:4d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:4e00::,2402:4e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:4f00::,2402:4f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:5100::,2402:5100:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2402:5200::,2402:5200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:5300::,2402:5300:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:5400::,2402:5400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:5500::,2402:5500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2402:5600::,2402:5600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:5700::,2402:5700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:5800::,2402:5800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:5900::,2402:5900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:5a00::,2402:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:5b00::,2402:5b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:5c00::,2402:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:5d00::,2402:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:5e00::,2402:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:5f00::,2402:5f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:6000::,2402:6000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:6100::,2402:6100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:6200::,2402:6200:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2402:6300::,2402:6300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6400::,2402:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6500::,2402:6500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6600::,2402:6600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6700::,2402:6700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:6800::,2402:6800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:6900::,2402:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:6a00::,2402:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:6b00::,2402:6bff:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2402:6c00::,2402:6c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:6d00::,2402:6d00:ffff:ffff:ffff:ffff:ffff:ffff,PF
+2402:6e00::,2402:6e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:6f00::,2402:6f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:7000::,2402:7000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:7100::,2402:7100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:7200::,2402:7200:ffff:ffff:ffff:ffff:ffff:ffff,TK
+2402:7300::,2402:7300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2402:7400::,2402:7400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7500::,2402:7500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:7600::,2402:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7700::,2402:7700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:7800::,2402:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7900::,2402:7900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:7a00::,2402:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:7b00::,2402:7b00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:7c00::,2402:7c00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2402:7d00::,2402:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:7e00::,2402:7e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:7f00::,2402:7f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8000::,2402:8000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:8100::,2402:8100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8200::,2402:8200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:8300::,2402:8300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:8400::,2402:8400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8500::,2402:8500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:8600::,2402:8600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:8700::,2402:8700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:8800::,2402:8800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:8900::,2402:8900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:8a00::,2402:8a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8b00::,2402:8b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:8c00::,2402:8c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8d00::,2402:8d03:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:8e00::,2402:8e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:8f00::,2402:8f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:9100::,2402:9100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9200::,2402:9200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9300::,2402:9300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:9400::,2402:9400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9500::,2402:9500:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:9800::,2402:9800:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:9900::,2402:9900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:9a00::,2402:9a00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:9b00::,2402:9b00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2402:9c00::,2402:9c00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:9d00::,2402:9d00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2402:9e00::,2402:9e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:9f00::,2402:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:a000::,2402:a000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a100::,2402:a100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a200::,2402:a200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:a300::,2402:a300:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2402:a400::,2402:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:a500::,2402:a500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a600::,2402:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:a700::,2402:a700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:a800::,2402:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:a900::,2402:a900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:ab00::,2402:ab00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:ac00::,2402:ac00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:ad00::,2402:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ae00::,2402:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:af00::,2402:af00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:b100::,2402:b100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:b200::,2402:b200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:b300::,2402:b300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:b400::,2402:b400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:b500::,2402:b500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:b600::,2402:b600:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2402:b700::,2402:b700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:b800::,2402:b801:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:b900::,2402:b900:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2402:ba00::,2402:ba00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2402:bb00::,2402:bb00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:bc00::,2402:bc07:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:bd00::,2402:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:be00::,2402:be00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:bf00::,2402:bf00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2402:c000::,2402:c000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:c100::,2402:c100:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2402:c200::,2402:c200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c300::,2402:c300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:c400::,2402:c400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c500::,2402:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:c600::,2402:c600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c700::,2402:c700:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:c800::,2402:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:c900::,2402:c900:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2402:ca00::,2402:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:cb00::,2402:cb00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2402:cc00::,2402:cc00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:cd00::,2402:cd00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:ce00::,2402:ce01:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:cf00::,2402:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:d000::,2402:d000:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2402:d100::,2402:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:d200::,2402:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:d300::,2402:d300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:d400::,2402:d400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:d500::,2402:d500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:d600::,2402:d600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:d700::,2402:d700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:d800::,2402:d800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:d900::,2402:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:da00::,2402:da00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:db00::,2402:db00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:dc00::,2402:dc00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:de00::,2402:de00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:df00::,2402:df00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:e000::,2402:e000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2402:e100::,2402:e100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:e200::,2402:e200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:e300::,2402:e300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:e400::,2402:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:e500::,2402:e500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:e600::,2402:e600:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2402:e800::,2402:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:e900::,2402:e900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ea00::,2402:ea00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:eb00::,2402:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ec00::,2402:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ed00::,2402:ed00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2402:ee00::,2402:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:ef00::,2402:ef3f:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:f000::,2402:f000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2402:f100::,2402:f100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:f200::,2402:f200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2402:f300::,2402:f300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:f400::,2402:f400:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2402:f500::,2402:f500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2402:f600::,2402:f600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:f700::,2402:f700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:f800::,2402:f800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2402:f900::,2402:f900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2402:fa00::,2402:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2402:fb00::,2402:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2402:fc00::,2402:fc00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2402:fd00::,2402:fd00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2402:fe00::,2402:fe00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2402:ff00::,2402:ff00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403::,2403:1:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:100::,2403:100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:200::,2403:200:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2403:300::,2403:300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:400::,2403:400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:500::,2403:500:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2403:600::,2403:600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:700::,2403:700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:800::,2403:801:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:900::,2403:900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:a00::,2403:a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:b00::,2403:b00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:c00::,2403:c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:d00::,2403:d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:e00::,2403:e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:f00::,2403:f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:1000::,2403:1000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:1100::,2403:1100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1300::,2403:1300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:1400::,2403:1400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1500::,2403:1500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:1600::,2403:1600:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2403:1700::,2403:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1800::,2403:1800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:1900::,2403:1900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:1a00::,2403:1a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:1b00::,2403:1b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:1c00::,2403:1c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:1d00::,2403:1d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:1e00::,2403:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AS
+2403:1f00::,2403:1f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:2000::,2403:2000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:2100::,2403:2100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:2200::,2403:2200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:2300::,2403:2300:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:2400::,2403:2400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:2500::,2403:2500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:2600::,2403:2600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:2700::,2403:2700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:2800::,2403:2801:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:2900::,2403:2900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:2a00::,2403:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:2c00::,2403:2c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:2d00::,2403:2d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:2e00::,2403:2e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:2f00::,2403:2f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:3100::,2403:3100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:3200::,2403:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:3300::,2403:3300:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2403:3400::,2403:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3500::,2403:3500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3600::,2403:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3700::,2403:3700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:3800::,2403:3800:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2403:3900::,2403:3900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:3a00::,2403:3a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:3b00::,2403:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3c00::,2403:3c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:3d00::,2403:3d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:3e00::,2403:3e00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:3f00::,2403:3f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:4000::,2403:4000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:4100::,2403:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:4200::,2403:4200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:4300::,2403:4300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:4400::,2403:4400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:4500::,2403:4500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:4600::,2403:4600:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2403:4700::,2403:4700:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:4800::,2403:4800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:4900::,2403:4900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:4a00::,2403:4a00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:4b00::,2403:4b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:4c00::,2403:4c00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:4d00::,2403:4d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:4e00::,2403:4e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:4f00::,2403:4f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:5000::,2403:5000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:5100::,2403:5100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:5200::,2403:5200:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:5300::,2403:5300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:5400::,2403:5400:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:5500::,2403:5500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:5600::,2403:5600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:5700::,2403:5700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:5800::,2403:5800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:5900::,2403:5900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:5a00::,2403:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:5b00::,2403:5b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:5c00::,2403:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:5e00::,2403:5e00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2403:5f00::,2403:5f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:6000::,2403:6000:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2403:6100::,2403:6100:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:6200::,2403:6200:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:6300::,2403:6300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:6400::,2403:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:6500::,2403:6500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2403:6600::,2403:6600:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2403:6700::,2403:6700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:6800::,2403:6800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:6900::,2403:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:6a00::,2403:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:6b00::,2403:6b00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:6c00::,2403:6c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:6d00::,2403:6d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:6e00::,2403:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7000::,2403:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:7100::,2403:7100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:7200::,2403:7200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:7300::,2403:7300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7400::,2403:7400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7500::,2403:7500:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2403:7600::,2403:7600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:7700::,2403:7700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:7800::,2403:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7900::,2403:7900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7a00::,2403:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7b00::,2403:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:7c00::,2403:7c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:7d00::,2403:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7e00::,2403:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:7f00::,2403:7f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:8000::,2403:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:8100::,2403:8100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:8200::,2403:8200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:8300::,2403:8300:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2403:8400::,2403:8400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:8500::,2403:8500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:8600::,2403:8600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:8700::,2403:8700:ffff:ffff:ffff:ffff:ffff:ffff,BT
+2403:8800::,2403:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:8900::,2403:8900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8a00::,2403:8a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:8b00::,2403:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8c00::,2403:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8d00::,2403:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:8e00::,2403:8e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:8f00::,2403:8f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9000::,2403:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:9100::,2403:9100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:9200::,2403:9200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9300::,2403:9300:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:9400::,2403:9400:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9500::,2403:9500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:9600::,2403:9600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9700::,2403:9700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:9800::,2403:9800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:9900::,2403:9a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9b00::,2403:9b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:9c00::,2403:9c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:9d00::,2403:9d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:9e00::,2403:9e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:9f00::,2403:9f00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:a000::,2403:a000:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2403:a100::,2403:a100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:a200::,2403:a200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:a300::,2403:a300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:a400::,2403:a400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:a500::,2403:a500:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2403:a600::,2403:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:a700::,2403:a700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:a800::,2403:a800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:a900::,2403:a900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:aa00::,2403:aa00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:ab00::,2403:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:ac00::,2403:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:ad00::,2403:ad00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:ae00::,2403:ae00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:af00::,2403:af00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:b000::,2403:b000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:b100::,2403:b100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:b200::,2403:b200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:b300::,2403:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:b400::,2403:b400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:b500::,2403:b500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:b600::,2403:b600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:b700::,2403:b700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:b800::,2403:b800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:b900::,2403:b900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:ba00::,2403:ba00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:bb00::,2403:bb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:bc00::,2403:bc00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2403:bd00::,2403:bd00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:be00::,2403:be00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:bf00::,2403:bf00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:c000::,2403:c000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2403:c100::,2403:c100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:c200::,2403:c200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:c300::,2403:c300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:c400::,2403:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:c500::,2403:c500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:c600::,2403:c600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:c800::,2403:c800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:c900::,2403:c900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:ca00::,2403:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:cb00::,2403:cb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:cc00::,2403:cc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:cd00::,2403:cd00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2403:ce00::,2403:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:cf00::,2403:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d000::,2403:d000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:d100::,2403:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d200::,2403:d200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:d300::,2403:d300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:d400::,2403:d400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:d500::,2403:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d600::,2403:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:d700::,2403:d700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2403:d800::,2403:d800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:d900::,2403:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:da00::,2403:da00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:db00::,2403:db00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:dc00::,2403:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:dd00::,2403:dd00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:de00::,2403:de00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:df00::,2403:df00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:e000::,2403:e000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:e100::,2403:e100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:e200::,2403:e200:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2403:e300::,2403:e300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:e400::,2403:e400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:e500::,2403:e500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:e600::,2403:e600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2403:e700::,2403:e700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:e800::,2403:e800:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:e900::,2403:e900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2403:ea00::,2403:ea00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:eb00::,2403:eb00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:ec00::,2403:ec00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:ed00::,2403:ed00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:ee00::,2403:ee00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2403:f000::,2403:f000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:f100::,2403:f100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:f200::,2403:f200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2403:f300::,2403:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:f400::,2403:f400:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2403:f500::,2403:f500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:f600::,2403:f600:ffff:ffff:ffff:ffff:ffff:ffff,NR
+2403:f700::,2403:f700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2403:f800::,2403:f800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:f900::,2403:f900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:fa00::,2403:fa00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2403:fb00::,2403:fb00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2403:fc00::,2403:fc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:fd00::,2403:fd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2403:fe00::,2403:fe00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2403:ff00::,2403:ff00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404::,2404:3f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:80::,2404:8f:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:a0::,2404:a0:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:a8::,2404:a8:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:b0::,2404:b1:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:b8::,2404:b8:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:c0::,2404:c0:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:c8::,2404:c8:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:d0::,2404:d0:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:d8::,2404:d8:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:e0::,2404:ef:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:100::,2404:100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:130::,2404:130:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:138::,2404:139:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:140::,2404:140:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:150::,2404:150:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:158::,2404:158:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:160::,2404:160:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:168::,2404:168:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:170::,2404:170:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:178::,2404:178:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:180::,2404:18f:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:1a0::,2404:1a3:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:1a8::,2404:1a8:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1b0::,2404:1b0:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:1b8::,2404:1b8:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:200::,2404:200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:300::,2404:300:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:400::,2404:400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:500::,2404:500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:600::,2404:600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:700::,2404:700:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:800::,2404:800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:a00::,2404:a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:b00::,2404:b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:c00::,2404:c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:d00::,2404:d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:e00::,2404:e00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:f00::,2404:f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:1000::,2404:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1100::,2404:1100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:1200::,2404:1200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:1300::,2404:1300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1400::,2404:1400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:1500::,2404:1500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:1600::,2404:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1700::,2404:1700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1800::,2404:1800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1900::,2404:1900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1a00::,2404:1a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:1b00::,2404:1b00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:1c00::,2404:1c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1d00::,2404:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:1e00::,2404:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:1f00::,2404:1f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:2000::,2404:2000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:2100::,2404:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:2200::,2404:2200:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:2300::,2404:2300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:2400::,2404:2400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2500::,2404:2500:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:2600::,2404:2600:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:2700::,2404:2700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2404:2800::,2404:2800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2900::,2404:2900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2a00::,2404:2a00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:2b00::,2404:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:2c00::,2404:2c00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2404:2d00::,2404:2d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:2e00::,2404:2e00:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2404:2f00::,2404:2f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3100::,2404:3100:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:3200::,2404:3200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:3300::,2404:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3500::,2404:3500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:3600::,2404:3601:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3700::,2404:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3800::,2404:3800:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:3900::,2404:3900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:3a00::,2404:3a00:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2404:3b00::,2404:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:3c00::,2404:3c00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:3d00::,2404:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:3e00::,2404:3e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:3f00::,2404:3f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:4100::,2404:4100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:4200::,2404:4200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:4300::,2404:4300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:4400::,2404:440f:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:4600::,2404:4600:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2404:4700::,2404:4700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:4800::,2404:4800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:4900::,2404:4900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:4a00::,2404:4a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:4c00::,2404:4c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:4d00::,2404:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:4e00::,2404:4e00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:4f00::,2404:4f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5000::,2404:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5100::,2404:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:5200::,2404:5200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:5300::,2404:5300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5400::,2404:5400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5500::,2404:5500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5600::,2404:5600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:5700::,2404:5700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:5800::,2404:5800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:5900::,2404:5900:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:5a00::,2404:5a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:5b00::,2404:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:5c00::,2404:5c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5d00::,2404:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:5e00::,2404:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:5f00::,2404:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:6000::,2404:6000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6100::,2404:6100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6200::,2404:6200:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:6300::,2404:6300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:6400::,2404:6400:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2404:6500::,2404:6500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6600::,2404:6600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:6700::,2404:6700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:6800::,2404:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:6900::,2404:6900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:6a00::,2404:6a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:6b00::,2404:6b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:6c00::,2404:6c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:6d00::,2404:6d00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:6e00::,2404:6e00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:6f00::,2404:6f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:7000::,2404:7000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:7100::,2404:7100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:7200::,2404:7200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:7300::,2404:7300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:7400::,2404:7400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:7500::,2404:7500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:7600::,2404:7600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:7700::,2404:7700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:7800::,2404:7800:ffff:ffff:ffff:ffff:ffff:ffff,PW
+2404:7900::,2404:7900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:7a00::,2404:7a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:7b00::,2404:7b00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:7c00::,2404:7c00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2404:7d00::,2404:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:7e00::,2404:7e00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:7f00::,2404:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:8000::,2404:8000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:8100::,2404:8100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:8200::,2404:8200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:8300::,2404:8300:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:8500::,2404:8500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:8600::,2404:8600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:8700::,2404:8700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:8800::,2404:8800:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:8900::,2404:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:8a00::,2404:8a00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2404:8b00::,2404:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:8c00::,2404:8c00:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2404:8d00::,2404:8d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:8e00::,2404:8e01:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:8f00::,2404:8f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9000::,2404:9000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:9100::,2404:9100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:9200::,2404:9200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:9400::,2404:9400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9500::,2404:9500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:9600::,2404:9601:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9700::,2404:9700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9800::,2404:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:9900::,2404:9900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:9a00::,2404:9a00:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2404:9b00::,2404:9b00:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2404:9c00::,2404:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:9d00::,2404:9d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:9e00::,2404:9e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:9f00::,2404:9f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:a000::,2404:a000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:a100::,2404:a100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:a200::,2404:a200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:a300::,2404:a300:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2404:a500::,2404:a500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:a600::,2404:a600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:a700::,2404:a700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:a800::,2404:a800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:aa00::,2404:aa00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:ab00::,2404:ab00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:ac00::,2404:ac00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:ad00::,2404:ad00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:ae00::,2404:ae00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:af00::,2404:af00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:b000::,2404:b000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b100::,2404:b100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:b200::,2404:b200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:b300::,2404:b300:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:b400::,2404:b400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b500::,2404:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b600::,2404:b600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:b700::,2404:b700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:b800::,2404:b800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:b900::,2404:b900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:ba00::,2404:ba00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:bb00::,2404:bb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:bc00::,2404:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:bd00::,2404:bd00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:be00::,2404:be00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2404:bf00::,2404:bf00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:c000::,2404:c000:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:c100::,2404:c100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:c200::,2404:c200:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2404:c300::,2404:c300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:c400::,2404:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:c500::,2404:c500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:c600::,2404:c600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:c700::,2404:c700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:c800::,2404:c807:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:c900::,2404:c900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:ca00::,2404:ca00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:cb00::,2404:cb00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:cc00::,2404:cc00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2404:cd00::,2404:cd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:ce00::,2404:ce00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:cf00::,2404:cf00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:d000::,2404:d000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:d100::,2404:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d200::,2404:d200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d300::,2404:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d400::,2404:d400:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:d500::,2404:d500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d600::,2404:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d700::,2404:d700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:d800::,2404:d800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:d900::,2404:d900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2404:da00::,2404:da00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:db00::,2404:db00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2404:dc00::,2404:dc00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2404:dd00::,2404:dd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:de00::,2404:de00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:df00::,2404:df00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2404:e000::,2404:e000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:e100::,2404:e101:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e200::,2404:e200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2404:e300::,2404:e300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e400::,2404:e400:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2404:e500::,2404:e500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e600::,2404:e600:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:e700::,2404:e700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:e800::,2404:e8ff:ffff:ffff:ffff:ffff:ffff:ffff,SH
+2404:e900::,2404:e900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:ea00::,2404:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:eb00::,2404:eb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:ec00::,2404:ec00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:ed00::,2404:ed00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:ee00::,2404:ee00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:ef00::,2404:ef00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f000::,2404:f000:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2404:f100::,2404:f100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2404:f200::,2404:f200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:f300::,2404:f300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f400::,2404:f400:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2404:f500::,2404:f500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f600::,2404:f600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f700::,2404:f700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:f800::,2404:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2404:f801::,2404:f801:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2404:f900::,2404:f900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:fa00::,2404:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:fb00::,2404:fb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:fc00::,2404:fc00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2404:fd00::,2404:fd00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2404:fe00::,2404:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2404:ff00::,2404:ff00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405::,2405::ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:100::,2405:100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:200::,2405:207:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:400::,2405:400:ffff:ffff:ffff:ffff:ffff:ffff,MH
+2405:500::,2405:500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:600::,2405:600:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:700::,2405:700:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:800::,2405:800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:900::,2405:900:ffff:ffff:ffff:ffff:ffff:ffff,LA
+2405:a00::,2405:a00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:b00::,2405:b00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:c00::,2405:c00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2405:d00::,2405:d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:e00::,2405:e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:f00::,2405:f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:1000::,2405:1000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:1200::,2405:1200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:1300::,2405:1300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:1400::,2405:1400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:1500::,2405:1500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:1600::,2405:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:1700::,2405:1700:ffff:ffff:ffff:ffff:ffff:ffff,BN
+2405:1800::,2405:1800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:1a00::,2405:1a00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:1b00::,2405:1b00:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2405:1c00::,2405:1c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:1d00::,2405:1d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:1e00::,2405:1e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:1f00::,2405:1f00:ffff:ffff:ffff:ffff:ffff:ffff,TL
+2405:2000::,2405:2001:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2200::,2405:2200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:2300::,2405:2300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:2400::,2405:2400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:2500::,2405:2500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:2600::,2405:2600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:2700::,2405:2700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:2900::,2405:2900:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:2a00::,2405:2a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:2b00::,2405:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2c00::,2405:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2d00::,2405:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2e00::,2405:2e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:2f00::,2405:2f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:3000::,2405:3001:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:3100::,2405:3100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:3200::,2405:3200:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:3300::,2405:3300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:3400::,2405:3400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:3500::,2405:3500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:3600::,2405:3600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:3700::,2405:3700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:3800::,2405:3800:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:3900::,2405:3900:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:3a00::,2405:3a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:3b00::,2405:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:3c00::,2405:3c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:3d00::,2405:3d00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:3e00::,2405:3e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:3f00::,2405:3f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4000::,2405:4000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:4100::,2405:4100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:4200::,2405:4200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:4300::,2405:4300:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:4400::,2405:4400:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2405:4500::,2405:4500:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:4600::,2405:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4700::,2405:4700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:4800::,2405:4800:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2405:4900::,2405:4900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:4a00::,2405:4a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4b00::,2405:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:4c00::,2405:4c00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:4d00::,2405:4d00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:4e00::,2405:4e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:4f00::,2405:4f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:5000::,2405:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:5100::,2405:5100:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:5200::,2405:5200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:5300::,2405:5300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:5400::,2405:5400:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2405:5500::,2405:5500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:5600::,2405:5600:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:5700::,2405:5700:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:5800::,2405:5800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:5900::,2405:5900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:5a00::,2405:5a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:5b00::,2405:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:5c00::,2405:5c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:5d00::,2405:5d00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:5e00::,2405:5e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:5f00::,2405:5f00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:6000::,2405:6000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:6100::,2405:6100:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:6200::,2405:6200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:6400::,2405:6400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:6500::,2405:6500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6600::,2405:6600:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2405:6700::,2405:6700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6800::,2405:6800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:6900::,2405:6900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:6a00::,2405:6a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6b00::,2405:6b00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2405:6c00::,2405:6c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:6d00::,2405:6d00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:6e00::,2405:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:6f00::,2405:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:7000::,2405:7000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:7100::,2405:7100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:7200::,2405:7200:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:7300::,2405:7300:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:7400::,2405:7400:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2405:7500::,2405:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:7600::,2405:7600:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:7700::,2405:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:7800::,2405:7800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:7900::,2405:7900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:7a00::,2405:7a00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:7b00::,2405:7b00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:7c00::,2405:7c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2405:7d00::,2405:7d00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:7e00::,2405:7e00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:7f00::,2405:7f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8000::,2405:8000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:8100::,2405:8100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:8200::,2405:8200:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:8300::,2405:8300:ffff:ffff:ffff:ffff:ffff:ffff,SB
+2405:8400::,2405:8400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:8500::,2405:8500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:8600::,2405:8600:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:8700::,2405:8700:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:8800::,2405:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8900::,2405:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8a00::,2405:8a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:8b00::,2405:8b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:8c00::,2405:8c00:ffff:ffff:ffff:ffff:ffff:ffff,WS
+2405:8d00::,2405:8d00:ffff:ffff:ffff:ffff:ffff:ffff,GU
+2405:8e00::,2405:8e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:8f00::,2405:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:9000::,2405:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:9100::,2405:9100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:9200::,2405:9200:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:9300::,2405:9300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9400::,2405:9400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:9500::,2405:9500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:9600::,2405:9600:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:9700::,2405:9700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9800::,2405:9800:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:9900::,2405:9900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9a00::,2405:9a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:9b00::,2405:9b00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9c00::,2405:9c00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:9d00::,2405:9d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:9e00::,2405:9e00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:9f00::,2405:9f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:a000::,2405:a000:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2405:a100::,2405:a100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:a200::,2405:a200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:a300::,2405:a300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:a400::,2405:a400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:a500::,2405:a500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:a600::,2405:a600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:a700::,2405:a700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:a900::,2405:a900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:aa00::,2405:aa00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:ab00::,2405:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:ac00::,2405:ac00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:ad00::,2405:ad00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:ae00::,2405:ae00:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2405:af00::,2405:af00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:b000::,2405:b000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:b100::,2405:b100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:b200::,2405:b200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:b300::,2405:b300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:b400::,2405:b400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:b500::,2405:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:b600::,2405:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:b800::,2405:b800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:b900::,2405:b900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2405:ba00::,2405:ba00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:bb00::,2405:bb00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:bc00::,2405:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:bd00::,2405:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:be00::,2405:be00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:bf00::,2405:bf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:c000::,2405:c000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2405:c100::,2405:c100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:c200::,2405:c200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:c300::,2405:c300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:c400::,2405:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:c500::,2405:c500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:c600::,2405:c600:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2405:c700::,2405:c700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:c800::,2405:c800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:c900::,2405:c900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:ca00::,2405:ca00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:cb00::,2405:cb00:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2405:cc00::,2405:cc00:ffff:ffff:ffff:ffff:ffff:ffff,PF
+2405:cd00::,2405:cd00:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2405:ce00::,2405:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:cf00::,2405:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d000::,2405:d000:ffff:ffff:ffff:ffff:ffff:ffff,BT
+2405:d100::,2405:d100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d200::,2405:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:d300::,2405:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d400::,2405:d400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:d500::,2405:d500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:d600::,2405:d600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:d700::,2405:d700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:d800::,2405:d800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:d900::,2405:d900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:da00::,2405:da00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:db00::,2405:db00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:dc00::,2405:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:e000::,2405:e000:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:e100::,2405:e100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:e200::,2405:e200:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:e300::,2405:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:e400::,2405:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:e500::,2405:e500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:e600::,2405:e600:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2405:e700::,2405:e700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:e800::,2405:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:e900::,2405:e900:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:ea00::,2405:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:eb00::,2405:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:ec00::,2405:ec00:ffff:ffff:ffff:ffff:ffff:ffff,BT
+2405:ed00::,2405:ed00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:ee00::,2405:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2405:ef00::,2405:ef00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2405:f000::,2405:f000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:f100::,2405:f100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:f200::,2405:f200:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2405:f300::,2405:f300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:f400::,2405:f400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:f500::,2405:f500:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:f600::,2405:f600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:f700::,2405:f700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2405:f800::,2405:f800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2405:f900::,2405:f900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2405:fa00::,2405:fa00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2405:fb00::,2405:fb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:fc00::,2405:fc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2405:fe00::,2405:fe00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2405:ff00::,2405:ff00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406::,2406::ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:100::,2406:100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:200::,2406:200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:300::,2406:300:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2406:400::,2406:400:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2406:500::,2406:500:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:600::,2406:600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:700::,2406:700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:800::,2406:800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:900::,2406:900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a00::,2406:a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:b00::,2406:b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:c00::,2406:c00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2406:d00::,2406:d00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:e00::,2406:e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:f00::,2406:f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:1000::,2406:1000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:1100::,2406:1100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:1200::,2406:1200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1300::,2406:1300:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:1400::,2406:1400:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:1500::,2406:1500:ffff:ffff:ffff:ffff:ffff:ffff,TO
+2406:1600::,2406:1600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:1700::,2406:1700:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1900::,2406:1900:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:1a00::,2406:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1b00::,2406:1b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:1c00::,2406:1c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:1d00::,2406:1d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1e00::,2406:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:1f00::,2406:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:2000::,2406:2000:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2406:2100::,2406:2100:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:2200::,2406:2200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:2300::,2406:2300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:2400::,2406:2400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:2500::,2406:2500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:2600::,2406:2600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:2700::,2406:2700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:2800::,2406:2800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:2900::,2406:2900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:2a00::,2406:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:2b00::,2406:2b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:2c00::,2406:2c00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:2d00::,2406:2d00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:2e00::,2406:2e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:2f00::,2406:2f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:3000::,2406:3003:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:3100::,2406:3100:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2406:3200::,2406:3200:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:3300::,2406:3300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:3400::,2406:3400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3500::,2406:3500:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2406:3600::,2406:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3700::,2406:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:3800::,2406:3800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3900::,2406:3900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3a00::,2406:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3b00::,2406:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3c00::,2406:3c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:3d00::,2406:3d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:3e00::,2406:3e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:3f00::,2406:3f00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:4000::,2406:4000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:4100::,2406:4100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4200::,2406:4200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4300::,2406:4300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:4400::,2406:4400:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:4500::,2406:4500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:4600::,2406:4600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4700::,2406:4700:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:4800::,2406:4800:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:4900::,2406:4900:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:4a00::,2406:4a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4b00::,2406:4b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:4c00::,2406:4c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:4d00::,2406:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:4e00::,2406:4e00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:4f00::,2406:4f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:5000::,2406:5000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5100::,2406:5100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5200::,2406:5200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:5300::,2406:5300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:5400::,2406:5400:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:5500::,2406:5500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:5600::,2406:5600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:5700::,2406:5700:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2406:5800::,2406:5800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5900::,2406:5900:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:5a00::,2406:5a00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:5b00::,2406:5b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:5c00::,2406:5c00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:5d00::,2406:5d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5e00::,2406:5e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:5f00::,2406:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6000::,2406:6000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:6100::,2406:6100:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:6200::,2406:6200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:6300::,2406:6300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:6400::,2406:6400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6500::,2406:6500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:6600::,2406:6600:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:6700::,2406:6700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6800::,2406:6800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:6900::,2406:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6a00::,2406:6a00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:6b00::,2406:6b00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:6c00::,2406:6c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6d00::,2406:6d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6e00::,2406:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:6f00::,2406:6f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:7000::,2406:7000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:7100::,2406:7100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:7200::,2406:7200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:7300::,2406:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7400::,2406:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:7500::,2406:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7600::,2406:7600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7800::,2406:7801:ffff:ffff:ffff:ffff:ffff:ffff,BN
+2406:7900::,2406:7900:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2406:7a00::,2406:7a00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:7c00::,2406:7c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:7d00::,2406:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:7e00::,2406:7e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:7f00::,2406:7f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:8000::,2406:8000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:8100::,2406:8100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:8200::,2406:8200:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:8400::,2406:8400:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:8500::,2406:8500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:8600::,2406:8600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:8700::,2406:8700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8800::,2406:8800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:8900::,2406:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8a00::,2406:8a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8b00::,2406:8b00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2406:8c00::,2406:8c00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:8d00::,2406:8d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:8e00::,2406:8e00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:8f00::,2406:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:9000::,2406:9000:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2406:9100::,2406:9100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:9200::,2406:9200:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:9300::,2406:9300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:9400::,2406:9400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:9500::,2406:9500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:9600::,2406:9600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:9700::,2406:9700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:9900::,2406:9900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:9a00::,2406:9a01:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:9b00::,2406:9b00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:9c00::,2406:9c00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:9d00::,2406:9d00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:9e00::,2406:9e00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:9f00::,2406:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a000::,2406:a000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a100::,2406:a100:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2406:a200::,2406:a200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a300::,2406:a300:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:a400::,2406:a400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:a500::,2406:a500:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:a600::,2406:a600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a700::,2406:a700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a800::,2406:a800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:a900::,2406:a900:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:aa00::,2406:aa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:ab00::,2406:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:ac00::,2406:ac00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:ad00::,2406:ad00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:ae00::,2406:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:af00::,2406:af00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:b000::,2406:b000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:b100::,2406:b100:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2406:b200::,2406:b200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:b300::,2406:b300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:b400::,2406:b400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:b500::,2406:b500:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:b600::,2406:b600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:b700::,2406:b700:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2406:b800::,2406:b800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:b900::,2406:b900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:ba00::,2406:ba00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:bb00::,2406:bb07:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:bc00::,2406:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:bd00::,2406:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:be00::,2406:be00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:bf00::,2406:bf00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c000::,2406:c000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c100::,2406:c100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:c200::,2406:c200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c300::,2406:c300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:c400::,2406:c400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c500::,2406:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c600::,2406:c600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c700::,2406:c700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:c800::,2406:c800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:c900::,2406:c900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:ca00::,2406:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:cb00::,2406:cb00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:cc00::,2406:cc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:cd00::,2406:cd00:ffff:ffff:ffff:ffff:ffff:ffff,KI
+2406:ce00::,2406:ce07:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:cf00::,2406:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:d000::,2406:d000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:d100::,2406:d100:ffff:ffff:ffff:ffff:ffff:ffff,AF
+2406:d200::,2406:d200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:d300::,2406:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:d400::,2406:d400:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2406:d500::,2406:d501:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:d600::,2406:d600:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:d700::,2406:d700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2406:d800::,2406:d800:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:db00::,2406:db00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:dc00::,2406:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:dd00::,2406:dd00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:de00::,2406:de00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:df00::,2406:df00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:e000::,2406:e007:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:e100::,2406:e100:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2406:e200::,2406:e200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:e300::,2406:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:e400::,2406:e400:ffff:ffff:ffff:ffff:ffff:ffff,MV
+2406:e500::,2406:e500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:e600::,2406:e600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:e700::,2406:e700:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:e800::,2406:e800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:e900::,2406:e900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:ea00::,2406:ea00:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2406:eb00::,2406:eb00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2406:ec00::,2406:ec00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:ed00::,2406:ed00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:ee00::,2406:ee00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2406:ef00::,2406:ef00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:f000::,2406:f000:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:f100::,2406:f100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2406:f200::,2406:f200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:f300::,2406:f300:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2406:f400::,2406:f400:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:f500::,2406:f500:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2406:f600::,2406:f600:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:f700::,2406:f700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:f800::,2406:f800:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2406:f900::,2406:f900:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:fa00::,2406:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2406:fb00::,2406:fb00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2406:fc00::,2406:fc00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2406:fd00::,2406:fd00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2406:fe00::,2406:fe00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2406:ff00::,2406:ff00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407::,2407::ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:100::,2407:100:ffff:ffff:ffff:ffff:ffff:ffff,VN
+2407:200::,2407:200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:300::,2407:300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:400::,2407:400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:500::,2407:500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:600::,2407:600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:700::,2407:700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:800::,2407:800:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2407:900::,2407:900:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:a00::,2407:a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b00::,2407:b00:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c00::,2407:c00:ffff:ffff:ffff:ffff:ffff:ffff,LK
+2407:d00::,2407:d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:e00::,2407:e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f00::,2407:f00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:1000::,2407:1000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:1100::,2407:1100:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:1200::,2407:1200:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:1300::,2407:1300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:1400::,2407:1400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:1500::,2407:1500:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:1600::,2407:1600:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:1700::,2407:1700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:1800::,2407:1800:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2407:1900::,2407:1900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:1b00::,2407:1b00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:1c00::,2407:1c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:1d00::,2407:1d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:1e00::,2407:1e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:1f00::,2407:1f00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:2000::,2407:2000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:2100::,2407:2100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:2200::,2407:2200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2300::,2407:2300:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2407:2400::,2407:2400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:2500::,2407:2500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2600::,2407:2600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2700::,2407:2700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2800::,2407:2800:ffff:ffff:ffff:ffff:ffff:ffff,WS
+2407:2900::,2407:2900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:2a00::,2407:2a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:2b00::,2407:2b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:2c00::,2407:2c00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:2d00::,2407:2d00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:2e00::,2407:2e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:2f00::,2407:2f00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:3000::,2407:3000:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:3100::,2407:3100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:3300::,2407:3300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:3400::,2407:3400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:3500::,2407:3500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:3600::,2407:3600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:3700::,2407:3700:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:3800::,2407:3800:ffff:ffff:ffff:ffff:ffff:ffff,SB
+2407:3900::,2407:3900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:3a00::,2407:3a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:3b00::,2407:3b00:ffff:ffff:ffff:ffff:ffff:ffff,PG
+2407:3c00::,2407:3c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:3d00::,2407:3d00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:3e00::,2407:3e00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:3f00::,2407:3f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:4000::,2407:4000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:4100::,2407:4100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:4200::,2407:4200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:4300::,2407:4300:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:4400::,2407:4400:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:4500::,2407:4500:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:4600::,2407:4600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:4700::,2407:4700:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4800::,2407:4800:ffff:ffff:ffff:ffff:ffff:ffff,FM
+2407:4900::,2407:4900:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4a00::,2407:4a00:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2407:4b00::,2407:4b00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4c00::,2407:4c00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:4d00::,2407:4d00:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:4e00::,2407:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:4f00::,2407:4f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:5000::,2407:5000:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:5100::,2407:5100:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:5200::,2407:5200:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:5300::,2407:5300:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:5400::,2407:5400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5500::,2407:5500:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:5600::,2407:5600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5700::,2407:5700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5800::,2407:5800:ffff:ffff:ffff:ffff:ffff:ffff,CK
+2407:5900::,2407:5900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:5a00::,2407:5a00:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2407:5b00::,2407:5b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:5c00::,2407:5c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:5d00::,2407:5d00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:5e00::,2407:5e00:ffff:ffff:ffff:ffff:ffff:ffff,KH
+2407:5f00::,2407:5f00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:6000::,2407:6000:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:6100::,2407:6100:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2407:6200::,2407:6200:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:6300::,2407:6300:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:6400::,2407:6400:ffff:ffff:ffff:ffff:ffff:ffff,MN
+2407:6500::,2407:6500:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:6600::,2407:6600:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:6700::,2407:6700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:6800::,2407:6800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6900::,2407:6900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6a00::,2407:6a00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6b00::,2407:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6c00::,2407:6c00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:6d00::,2407:6d00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:6e00::,2407:6e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:6f00::,2407:6f00:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:7000::,2407:7000:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:7100::,2407:7100:ffff:ffff:ffff:ffff:ffff:ffff,TW
+2407:7200::,2407:7200:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:7300::,2407:7300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:7400::,2407:7400:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:7500::,2407:7500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:7600::,2407:7600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:7700::,2407:7700:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:7800::,2407:7800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:7900::,2407:7900:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:7a00::,2407:7a00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:7b00::,2407:7b00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:7c00::,2407:7c00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:7d00::,2407:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:7e00::,2407:7e00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:7f00::,2407:7f00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:8000::,2407:8000:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:8100::,2407:8100:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:8200::,2407:8200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:8300::,2407:8300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:8400::,2407:8400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8500::,2407:8500:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:8600::,2407:8600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8700::,2407:8700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:8800::,2407:8800:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8900::,2407:8900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8a00::,2407:8a00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:8b00::,2407:8b00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:8c00::,2407:8c00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:8e00::,2407:8e00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:8f00::,2407:8f00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:9000::,2407:9000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:9100::,2407:9100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:9300::,2407:9300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:9400::,2407:9400:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:9500::,2407:9500:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:9700::,2407:9700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:9800::,2407:9800:ffff:ffff:ffff:ffff:ffff:ffff,PH
+2407:9900::,2407:9900:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:9a00::,2407:9a00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:9b00::,2407:9b00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:9c00::,2407:9c00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:9d00::,2407:9d00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:9e00::,2407:9e00:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:9f00::,2407:9f00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:a000::,2407:a000:ffff:ffff:ffff:ffff:ffff:ffff,FJ
+2407:a100::,2407:a100:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:a200::,2407:a200:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:a300::,2407:a300:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:a500::,2407:a500:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:a600::,2407:a600:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:a700::,2407:a700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:a800::,2407:a800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:a900::,2407:a900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:aa00::,2407:aa00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ab00::,2407:ab00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ac00::,2407:ac00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:ad00::,2407:ad00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:ae00::,2407:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:af00::,2407:af00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b000::,2407:b001:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:b100::,2407:b100:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:b200::,2407:b200:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:b300::,2407:b300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b400::,2407:b400:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b500::,2407:b500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b600::,2407:b600:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:b700::,2407:b700:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:b800::,2407:b800:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:b900::,2407:b900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:ba00::,2407:ba00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:bb00::,2407:bb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:bc00::,2407:bc00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:bd00::,2407:bd00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:be00::,2407:be00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:bf00::,2407:bf00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:c000::,2407:c000:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c100::,2407:c100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:c200::,2407:c200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:c300::,2407:c300:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:c400::,2407:c400:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:c500::,2407:c500:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:c600::,2407:c600:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:c700::,2407:c700:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:c800::,2407:c800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:c900::,2407:c900:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:ca00::,2407:ca00:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:cb00::,2407:cb00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:cc00::,2407:cc00:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:cd00::,2407:cd00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:ce00::,2407:ce00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:cf00::,2407:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:d000::,2407:d000:ffff:ffff:ffff:ffff:ffff:ffff,PK
+2407:d100::,2407:d100:ffff:ffff:ffff:ffff:ffff:ffff,KR
+2407:d200::,2407:d200:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:d300::,2407:d300:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:d400::,2407:d400:ffff:ffff:ffff:ffff:ffff:ffff,NP
+2407:d500::,2407:d500:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:d600::,2407:d600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:d700::,2407:d700:ffff:ffff:ffff:ffff:ffff:ffff,BD
+2407:d800::,2407:d800:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:d900::,2407:d900:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:da00::,2407:da00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:db00::,2407:db00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:dc00::,2407:dc00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:dd00::,2407:dd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:de00::,2407:de00:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:df00::,2407:df00:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:e000::,2407:e000:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:e100::,2407:e100:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:e200::,2407:e200:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:e300::,2407:e300:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:e400::,2407:e400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:e500::,2407:e501:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:e600::,2407:e600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:e700::,2407:e700:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:e800::,2407:e800:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2407:e900::,2407:e900:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:ea00::,2407:ea00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:eb00::,2407:eb00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:ec00::,2407:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ed00::,2407:ed00:ffff:ffff:ffff:ffff:ffff:ffff,TH
+2407:ee00::,2407:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ef00::,2407:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SG
+2407:f000::,2407:f000:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f100::,2407:f100:ffff:ffff:ffff:ffff:ffff:ffff,NZ
+2407:f200::,2407:f200:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:f300::,2407:f300:ffff:ffff:ffff:ffff:ffff:ffff,MM
+2407:f400::,2407:f400:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:f500::,2407:f500:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:f600::,2407:f600:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2407:f700::,2407:f700:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2407:f800::,2407:f800:ffff:ffff:ffff:ffff:ffff:ffff,MY
+2407:f900::,2407:f900:ffff:ffff:ffff:ffff:ffff:ffff,ID
+2407:fa00::,2407:fa00:ffff:ffff:ffff:ffff:ffff:ffff,HK
+2407:fd00::,2407:fd00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:fe00::,2407:fe00:ffff:ffff:ffff:ffff:ffff:ffff,AU
+2407:ff00::,2407:ff00:ffff:ffff:ffff:ffff:ffff:ffff,IN
+2408::,2408:3ff:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2408:8000::,2408:8fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+2409:10::,2409:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2409:250::,2409:25f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+2409:8000::,2409:8fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240a::,240a:7f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240a:8000::,240a:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240b::,240b:3f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240b:240::,240b:27f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240b:8000::,240b:87ff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240c::,240c:f:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240d::,240d:1f:ffff:ffff:ffff:ffff:ffff:ffff,JP
+240e::,240e:fff:ffff:ffff:ffff:ffff:ffff:ffff,CN
+240f::,240f:ff:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2600::,2600:7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:100::,2600:10f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:200::,2600:20f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:300::,2600:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:800::,2600:81f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:900::,2600:90f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:a00::,2600:a01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:b00::,2600:b0f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:c00::,2600:c14:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:d00::,2600:d0f:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2600:f00::,2600:fff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1000::,2600:1007:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2600:1008::,2600:1009:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2600:100a::,2600:100b:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:100c::,2600:100d:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2600:100e::,2600:1017:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1100::,2600:110f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1200::,2600:130f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1400::,2600:141f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1500::,2600:150f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1600::,2600:16ff:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2600:1800::,2600:180f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:1c00::,2600:1c0f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2000::,2600:200f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2400::,2600:2407:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2800::,2600:2803:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:2c00::,2600:2c03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3000::,2600:3007:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3400::,2600:340f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3800::,2600:380f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:3c00::,2600:3c03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4000::,2600:40ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4400::,2600:4407:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4800::,2600:480f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:4c00::,2600:4c01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5000::,2600:500f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5400::,2600:541f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5800::,2600:5801:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:5c00::,2600:5c01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6000::,2600:6001:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6400::,2600:640f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6800::,2600:68ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:6c00::,2600:6cff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:7000::,2600:70ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:7400::,2600:740f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:8000::,2600:80ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2600:e000::,2600:e00f:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2601::,2601:ff:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2602::,2602:10f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:200::,2602:200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2602:210::,2602:210:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2602:220::,2602:220:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2602:230::,2602:230:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:240::,2602:24f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:300::,2602:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffc0::,2602:ffc0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffd0::,2602:ffd0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffe0::,2602:ffe0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffeb::,2602:ffeb:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffec::,2602:ffec:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ffed::,2602:ffed:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffee::,2602:ffee:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:ffef::,2602:ffef:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff0::,2602:fff0:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff1::,2602:fff1:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff2::,2602:fff2:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff3::,2602:fff3:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff4::,2602:fff4:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff5::,2602:fff5:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff6::,2602:fff6:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff7::,2602:fff7:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff8::,2602:fff8:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fff9::,2602:fff9:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffa::,2602:fffa:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffb::,2602:fffb:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffc::,2602:fffc:fff:ffff:ffff:ffff:ffff:ffff,US
+2602:fffd::,2602:fffd:fff:ffff:ffff:ffff:ffff:ffff,CA
+2602:ffff::,2602:ffff:fff:ffff:ffff:ffff:ffff:ffff,US
+2604::,2604::ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:10::,2604:10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:100::,2604:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:180::,2604:180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:200::,2604:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:280::,2604:280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:300::,2604:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:380::,2604:380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:400::,2604:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:480::,2604:480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:500::,2604:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:580::,2604:580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:600::,2604:600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:680::,2604:680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:700::,2604:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:780::,2604:780:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:800::,2604:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:880::,2604:880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:900::,2604:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:980::,2604:980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a00::,2604:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a80::,2604:a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b00::,2604:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b80::,2604:b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c00::,2604:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c80::,2604:c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d00::,2604:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d80::,2604:d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e00::,2604:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e80::,2604:e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f00::,2604:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f80::,2604:f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1000::,2604:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1080::,2604:1080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1100::,2604:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1180::,2604:1180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1200::,2604:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1280::,2604:1280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1300::,2604:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1380::,2604:1380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1400::,2604:1400:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2604:1480::,2604:1480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1500::,2604:1500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1580::,2604:1580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1600::,2604:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1680::,2604:1680:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1700::,2604:1700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1780::,2604:1780:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2604:1800::,2604:1800:ffff:ffff:ffff:ffff:ffff:ffff,GP
+2604:1880::,2604:1880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1900::,2604:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1980::,2604:1980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1a00::,2604:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1a80::,2604:1a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1b00::,2604:1b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1b80::,2604:1b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1c00::,2604:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1c80::,2604:1c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1d00::,2604:1d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1d80::,2604:1d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1e00::,2604:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1e80::,2604:1e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:1f00::,2604:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:1f80::,2604:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:2000::,2604:20ff:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2604:2100::,2604:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2180::,2604:2180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2200::,2604:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2280::,2604:2280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2300::,2604:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2380::,2604:2380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2400::,2604:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2480::,2604:2480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2500::,2604:2500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2580::,2604:2580:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:2600::,2604:2600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2680::,2604:2680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2700::,2604:2700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2780::,2604:2780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2800::,2604:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2880::,2604:2880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2900::,2604:2900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2980::,2604:2980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2a00::,2604:2a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2a80::,2604:2a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2b00::,2604:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2b80::,2604:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:2c00::,2604:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2c80::,2604:2c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2d00::,2604:2d00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:2d80::,2604:2d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2e00::,2604:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2e80::,2604:2e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2f00::,2604:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:2f80::,2604:2f80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:3000::,2604:3000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3080::,2604:3080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3100::,2604:3100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3180::,2604:3180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3200::,2604:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3280::,2604:3280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3300::,2604:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3380::,2604:3380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3400::,2604:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3480::,2604:3480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3500::,2604:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3580::,2604:3580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3600::,2604:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3680::,2604:3680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3700::,2604:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3780::,2604:3780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3800::,2604:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3880::,2604:3880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3900::,2604:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3980::,2604:3980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3a00::,2604:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3a80::,2604:3a80:ffff:ffff:ffff:ffff:ffff:ffff,VC
+2604:3b00::,2604:3b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:3b80::,2604:3b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3c00::,2604:3c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3c80::,2604:3c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3d00::,2604:3d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:3d80::,2604:3d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3e00::,2604:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3e80::,2604:3e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3f00::,2604:3f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:3f80::,2604:3f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4000::,2604:4000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4080::,2604:4080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4100::,2604:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4180::,2604:4180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4200::,2604:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4280::,2604:4280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4300::,2604:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4380::,2604:4380:ffff:ffff:ffff:ffff:ffff:ffff,GD
+2604:4400::,2604:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4480::,2604:4480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4500::,2604:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4580::,2604:4580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4600::,2604:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4680::,2604:4680:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4700::,2604:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4780::,2604:4780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4800::,2604:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4880::,2604:4880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4900::,2604:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4980::,2604:4980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4a00::,2604:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4a80::,2604:4a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4b00::,2604:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4b80::,2604:4b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4c00::,2604:4c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4c80::,2604:4c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4d00::,2604:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4d80::,2604:4d80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4e00::,2604:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:4e80::,2604:4e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:4f00::,2604:4f00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:4f80::,2604:4f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5000::,2604:5000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5080::,2604:5080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5100::,2604:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5180::,2604:5180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5200::,2604:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5280::,2604:5280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5300::,2604:5300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5380::,2604:5380:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5400::,2604:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5480::,2604:5480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5500::,2604:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5580::,2604:5580:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5600::,2604:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5680::,2604:5680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5700::,2604:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5780::,2604:5780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5800::,2604:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5880::,2604:5880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:5900::,2604:5900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5980::,2604:5980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5a00::,2604:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5a80::,2604:5a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5b00::,2604:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5b80::,2604:5b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5c00::,2604:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5c80::,2604:5c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5d00::,2604:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5d80::,2604:5d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5e00::,2604:5e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5e80::,2604:5e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5f00::,2604:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:5f80::,2604:5f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6000::,2604:60ff:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2604:6100::,2604:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6180::,2604:6180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6200::,2604:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6280::,2604:6280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6300::,2604:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6380::,2604:6380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6400::,2604:6400:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6480::,2604:6480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6500::,2604:6500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6580::,2604:6580:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6600::,2604:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6680::,2604:6680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6700::,2604:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6780::,2604:6780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6800::,2604:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6880::,2604:6880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6900::,2604:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6980::,2604:6980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6a00::,2604:6a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6a80::,2604:6a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6b00::,2604:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6b80::,2604:6b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6c00::,2604:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6c80::,2604:6c80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:6d00::,2604:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6d80::,2604:6d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6e00::,2604:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6e80::,2604:6e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6f00::,2604:6f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:6f80::,2604:6f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7000::,2604:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7080::,2604:7080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7100::,2604:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7180::,2604:7180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7200::,2604:7200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7280::,2604:7280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7300::,2604:7300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7380::,2604:7380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7400::,2604:7400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7480::,2604:7480:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:7500::,2604:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7580::,2604:7580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7600::,2604:7600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7680::,2604:7680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7700::,2604:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7780::,2604:7780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7800::,2604:7800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7880::,2604:7880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7900::,2604:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7980::,2604:7980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:7a00::,2604:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7a80::,2604:7a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7b00::,2604:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7b80::,2604:7b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7c00::,2604:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7c80::,2604:7c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7d00::,2604:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7d80::,2604:7d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7e00::,2604:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7e80::,2604:7e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:7f00::,2604:7f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:7f80::,2604:7f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8000::,2604:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8080::,2604:8080:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8100::,2604:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8180::,2604:8180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8200::,2604:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8280::,2604:8280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8300::,2604:8300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8380::,2604:8380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8400::,2604:8400:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8480::,2604:8480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8500::,2604:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8580::,2604:8580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8600::,2604:8600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8680::,2604:8680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8700::,2604:8700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8780::,2604:8780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8800::,2604:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8880::,2604:8880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8900::,2604:8900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8980::,2604:8980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:8a00::,2604:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8a80::,2604:8a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8b00::,2604:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8b80::,2604:8b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8c00::,2604:8c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8c80::,2604:8c80:ffff:ffff:ffff:ffff:ffff:ffff,DM
+2604:8d00::,2604:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8d80::,2604:8d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8e00::,2604:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8e80::,2604:8e80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8f00::,2604:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:8f80::,2604:8f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9000::,2604:9000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9080::,2604:9080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9100::,2604:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9180::,2604:9180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9200::,2604:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9280::,2604:9280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9300::,2604:9300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9380::,2604:9380:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:9480::,2604:9480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9500::,2604:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9580::,2604:9580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9600::,2604:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9680::,2604:9680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9700::,2604:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9780::,2604:9780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9800::,2604:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9880::,2604:9880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:9900::,2604:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9980::,2604:9980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9a00::,2604:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9a80::,2604:9a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9b00::,2604:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9b80::,2604:9b80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9c00::,2604:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9c80::,2604:9c80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9d00::,2604:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9d80::,2604:9d80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9e00::,2604:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9e80::,2604:9e80:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:9f00::,2604:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:9f80::,2604:9f80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a000::,2604:a000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a080::,2604:a080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a100::,2604:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a180::,2604:a180:ffff:ffff:ffff:ffff:ffff:ffff,BB
+2604:a200::,2604:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a280::,2604:a280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:a300::,2604:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a380::,2604:a380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a400::,2604:a400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a480::,2604:a480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a500::,2604:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a580::,2604:a580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a600::,2604:a600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a680::,2604:a680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a700::,2604:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a780::,2604:a780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a800::,2604:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a880::,2604:a880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a900::,2604:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:a980::,2604:a980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:aa00::,2604:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:aa80::,2604:aa80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ab00::,2604:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ab80::,2604:ab80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ac00::,2604:ac00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ac80::,2604:ac80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ad00::,2604:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ad80::,2604:ad80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ae00::,2604:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ae80::,2604:ae80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:af00::,2604:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:af80::,2604:af80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b000::,2604:b000:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2604:b080::,2604:b080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b100::,2604:b100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b180::,2604:b180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b200::,2604:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b280::,2604:b280:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:b300::,2604:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b380::,2604:b380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b400::,2604:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b480::,2604:b480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b500::,2604:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b580::,2604:b580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b600::,2604:b600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b680::,2604:b680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b700::,2604:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b780::,2604:b780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b800::,2604:b800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b880::,2604:b880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b900::,2604:b900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:b980::,2604:b980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:ba00::,2604:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ba80::,2604:ba80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bb00::,2604:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bb80::,2604:bb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bc00::,2604:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bc80::,2604:bc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bd00::,2604:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bd80::,2604:bd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:be00::,2604:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:be80::,2604:be80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bf00::,2604:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:bf80::,2604:bf80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c000::,2604:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c080::,2604:c080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c100::,2604:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c180::,2604:c180:ffff:ffff:ffff:ffff:ffff:ffff,VI
+2604:c200::,2604:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c280::,2604:c280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c300::,2604:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c380::,2604:c380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c400::,2604:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c480::,2604:c480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c500::,2604:c500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c580::,2604:c580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c600::,2604:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c680::,2604:c680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c700::,2604:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c780::,2604:c780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c800::,2604:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c880::,2604:c880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c900::,2604:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:c980::,2604:c980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ca00::,2604:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ca80::,2604:ca80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cb00::,2604:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cb80::,2604:cb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cc00::,2604:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cc80::,2604:cc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cd00::,2604:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cd80::,2604:cd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ce00::,2604:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ce80::,2604:ce80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:cf00::,2604:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:cf80::,2604:cf80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d000::,2604:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d080::,2604:d080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d100::,2604:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d180::,2604:d180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d200::,2604:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d280::,2604:d280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d300::,2604:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d380::,2604:d380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d400::,2604:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d480::,2604:d480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d500::,2604:d500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d580::,2604:d580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d600::,2604:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d680::,2604:d680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d700::,2604:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d780::,2604:d780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d800::,2604:d801:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d880::,2604:d880:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:d900::,2604:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:d980::,2604:d980:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:da00::,2604:da00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:da80::,2604:da80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:db00::,2604:db00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:db80::,2604:db80:ffff:ffff:ffff:ffff:ffff:ffff,BB
+2604:dc00::,2604:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:dc80::,2604:dc80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:dd00::,2604:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:dd80::,2604:dd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:de00::,2604:de00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:de80::,2604:de80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:df00::,2604:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:df80::,2604:df80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e000::,2604:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e080::,2604:e080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e100::,2604:e100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:e180::,2604:e180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e200::,2604:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e280::,2604:e280:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e300::,2604:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e380::,2604:e380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e400::,2604:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e480::,2604:e480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e500::,2604:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e580::,2604:e580:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e600::,2604:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e680::,2604:e680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e700::,2604:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e780::,2604:e780:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e800::,2604:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e880::,2604:e880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e900::,2604:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:e980::,2604:e980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ea00::,2604:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ea80::,2604:ea80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:eb00::,2604:eb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:eb80::,2604:eb80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ec00::,2604:ec00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:ed00::,2604:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ee00::,2604:ee00:fff:ffff:ffff:ffff:ffff:ffff,US
+2604:ef00::,2604:ef00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f000::,2604:f000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f100::,2604:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f200::,2604:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f300::,2604:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f400::,2604:f400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f500::,2604:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f600::,2604:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f700::,2604:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:f800::,2604:f800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2604:f900::,2604:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fa00::,2604:fa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fb00::,2604:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fc00::,2604:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fd00::,2604:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:fe00::,2604:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2604:ff00::,2604:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605::,2605::ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:100::,2605:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:200::,2605:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:300::,2605:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:400::,2605:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:500::,2605:500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:600::,2605:600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:700::,2605:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:800::,2605:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:900::,2605:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a00::,2605:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b00::,2605:b00:fff:ffff:ffff:ffff:ffff:ffff,US
+2605:c00::,2605:c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d00::,2605:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e00::,2605:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f00::,2605:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1000::,2605:1000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1100::,2605:1100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1200::,2605:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1300::,2605:1300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1400::,2605:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1500::,2605:1500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1600::,2605:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1700::,2605:1700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1800::,2605:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1900::,2605:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1a00::,2605:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1b00::,2605:1b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:1c00::,2605:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1d00::,2605:1d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1e00::,2605:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:1f00::,2605:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2000::,2605:2000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2100::,2605:2100:fff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2200::,2605:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2300::,2605:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2400::,2605:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2500::,2605:2500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2600::,2605:2600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2700::,2605:2700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2800::,2605:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2900::,2605:2900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2a00::,2605:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2b00::,2605:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2c00::,2605:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2d00::,2605:2d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:2e00::,2605:2e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:2f00::,2605:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3000::,2605:3000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3100::,2605:3100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3200::,2605:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3300::,2605:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3400::,2605:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3500::,2605:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3600::,2605:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3700::,2605:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3800::,2605:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3900::,2605:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3a00::,2605:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3b00::,2605:3b00:fff:ffff:ffff:ffff:ffff:ffff,US
+2605:3c00::,2605:3c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3d00::,2605:3d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3e00::,2605:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:3f00::,2605:3f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:4000::,2605:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4100::,2605:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4200::,2605:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4300::,2605:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4400::,2605:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4500::,2605:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4600::,2605:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4700::,2605:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4800::,2605:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4900::,2605:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4a00::,2605:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4b00::,2605:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4c00::,2605:4c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4d00::,2605:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4e00::,2605:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:4f00::,2605:4f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:5000::,2605:5000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5100::,2605:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5200::,2605:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5300::,2605:5300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5400::,2605:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5500::,2605:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5600::,2605:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5700::,2605:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5800::,2605:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5900::,2605:5900:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2605:5a00::,2605:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5b00::,2605:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5c00::,2605:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5d00::,2605:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5e00::,2605:5e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:5f00::,2605:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6000::,2605:60ff:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2605:6100::,2605:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6200::,2605:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6300::,2605:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6400::,2605:6400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6500::,2605:6500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6600::,2605:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6700::,2605:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6800::,2605:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6900::,2605:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6a00::,2605:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:6b00::,2605:6b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:6c00::,2605:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6d00::,2605:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6e00::,2605:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:6f00::,2605:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7000::,2605:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7100::,2605:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7200::,2605:7200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7300::,2605:7300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7400::,2605:7400:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7500::,2605:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7600::,2605:7600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7700::,2605:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7800::,2605:7801:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7900::,2605:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7a00::,2605:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7b00::,2605:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7c00::,2605:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:7d00::,2605:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7e00::,2605:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:7f00::,2605:7f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8000::,2605:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8100::,2605:8100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:8200::,2605:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8300::,2605:8300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8400::,2605:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8500::,2605:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8600::,2605:8600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8700::,2605:8700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8800::,2605:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8900::,2605:8900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8a00::,2605:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8b00::,2605:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8c00::,2605:8c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8d00::,2605:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8e00::,2605:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:8f00::,2605:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9000::,2605:9000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:9100::,2605:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9200::,2605:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9300::,2605:9300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:9400::,2605:9400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9500::,2605:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9600::,2605:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9700::,2605:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9800::,2605:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9900::,2605:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9a00::,2605:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9b00::,2605:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9c00::,2605:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9d00::,2605:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9e00::,2605:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:9f00::,2605:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a000::,2605:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2605:a100::,2605:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a200::,2605:a200:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2605:a300::,2605:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a400::,2605:a407:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a500::,2605:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a600::,2605:a6ff:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2605:a700::,2605:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:a800::,2605:a800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:a900::,2605:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:aa00::,2605:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ab00::,2605:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ac00::,2605:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ad00::,2605:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ae00::,2605:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:af00::,2605:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b000::,2605:b000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b100::,2605:b100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b200::,2605:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b300::,2605:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b400::,2605:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b500::,2605:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b600::,2605:b600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:b700::,2605:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:b800::,2605:b800:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2605:b900::,2605:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:ba00::,2605:ba00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2605:bb00::,2605:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bc00::,2605:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bd00::,2605:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:be00::,2605:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:bf00::,2605:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c000::,2605:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c100::,2605:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c200::,2605:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c300::,2605:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c400::,2605:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c500::,2605:c500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:c600::,2605:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c700::,2605:c700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:c800::,2605:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:c900::,2605:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ca00::,2605:ca00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cb00::,2605:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cc00::,2605:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cd00::,2605:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ce00::,2605:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:cf00::,2605:cf00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d000::,2605:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d100::,2605:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d200::,2605:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d300::,2605:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d400::,2605:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d500::,2605:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:d600::,2605:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d700::,2605:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d800::,2605:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:d900::,2605:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:da00::,2605:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:db00::,2605:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:dc00::,2605:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:dd00::,2605:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:de00::,2605:de00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:df00::,2605:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e000::,2605:e0ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2605:e100::,2605:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e200::,2605:e200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:e300::,2605:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e400::,2605:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e500::,2605:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e600::,2605:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e700::,2605:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e800::,2605:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:e900::,2605:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ea00::,2605:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:eb00::,2605:eb01:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ec00::,2605:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ed00::,2605:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ee00::,2605:ee00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ef00::,2605:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f000::,2605:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f100::,2605:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f200::,2605:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f300::,2605:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f500::,2605:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f600::,2605:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f700::,2605:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f800::,2605:f800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:f900::,2605:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fa00::,2605:fa00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:fb00::,2605:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fc00::,2605:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:fd00::,2605:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2605:fe00::,2605:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2605:ff00::,2605:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606::,2606::ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:100::,2606:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:200::,2606:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:300::,2606:300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:400::,2606:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:500::,2606:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:600::,2606:600:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2606:700::,2606:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:800::,2606:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:900::,2606:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a00::,2606:a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b00::,2606:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c00::,2606:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d00::,2606:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e00::,2606:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f00::,2606:f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1000::,2606:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1100::,2606:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1200::,2606:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1300::,2606:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1400::,2606:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1500::,2606:1500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1600::,2606:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1700::,2606:1700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1800::,2606:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1900::,2606:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1a00::,2606:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1b00::,2606:1b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1c00::,2606:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1d00::,2606:1d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1e00::,2606:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:1f00::,2606:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2000::,2606:2000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2100::,2606:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2200::,2606:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2300::,2606:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2400::,2606:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2500::,2606:2500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2600::,2606:2600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2700::,2606:2700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:2800::,2606:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2900::,2606:2900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2a00::,2606:2a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2b00::,2606:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2c00::,2606:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2d00::,2606:2d00:fff:ffff:ffff:ffff:ffff:ffff,US
+2606:2e00::,2606:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:2f00::,2606:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3000::,2606:3000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:3100::,2606:3100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:3200::,2606:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3300::,2606:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3400::,2606:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3500::,2606:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3600::,2606:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3700::,2606:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3800::,2606:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3900::,2606:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3a00::,2606:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3b00::,2606:3b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3c00::,2606:3c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:3d00::,2606:3d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3e00::,2606:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:3f00::,2606:3f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4000::,2606:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4100::,2606:4100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4200::,2606:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4300::,2606:4300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4400::,2606:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4500::,2606:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4600::,2606:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4700::,2606:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4800::,2606:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4900::,2606:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4a00::,2606:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4b00::,2606:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4c00::,2606:4c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4d00::,2606:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4e00::,2606:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:4f00::,2606:4f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5000::,2606:5000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5100::,2606:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5200::,2606:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5300::,2606:5300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:5400::,2606:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5500::,2606:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5600::,2606:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5700::,2606:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5800::,2606:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5900::,2606:5900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5a00::,2606:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5b00::,2606:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5c00::,2606:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5d00::,2606:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:5e00::,2606:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:5f00::,2606:5f00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2606:6000::,2606:60ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2606:6100::,2606:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6200::,2606:6200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6300::,2606:6300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6400::,2606:6400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6500::,2606:6500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6600::,2606:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6700::,2606:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6800::,2606:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6900::,2606:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6a00::,2606:6a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6b00::,2606:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6c00::,2606:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6d00::,2606:6d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:6e00::,2606:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:6f00::,2606:6f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7000::,2606:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7100::,2606:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7200::,2606:7200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7300::,2606:7300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7400::,2606:7400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7500::,2606:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7600::,2606:7600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7700::,2606:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7800::,2606:7800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7900::,2606:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7a00::,2606:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:7b00::,2606:7b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7c00::,2606:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7d00::,2606:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7e00::,2606:7e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:7f00::,2606:7f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8000::,2606:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8100::,2606:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8200::,2606:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8300::,2606:8300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:8400::,2606:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8500::,2606:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8600::,2606:8600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8700::,2606:8700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8800::,2606:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8900::,2606:8900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:8a00::,2606:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8b00::,2606:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8c00::,2606:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:8d00::,2606:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8e00::,2606:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:8f00::,2606:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9000::,2606:9000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9100::,2606:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9200::,2606:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9300::,2606:9300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9400::,2606:9400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9500::,2606:9500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9600::,2606:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9700::,2606:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9800::,2606:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9900::,2606:9900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9a00::,2606:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9b00::,2606:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9c00::,2606:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9d00::,2606:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:9e00::,2606:9e00:ffff:ffff:ffff:ffff:ffff:ffff,BM
+2606:9f00::,2606:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a000::,2606:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2606:a100::,2606:a100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a200::,2606:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a300::,2606:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a400::,2606:a400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a500::,2606:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a600::,2606:a600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a700::,2606:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a800::,2606:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:a900::,2606:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:aa00::,2606:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ab00::,2606:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ac00::,2606:ac00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ad00::,2606:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ae00::,2606:ae00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:af00::,2606:af00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:b000::,2606:b000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b100::,2606:b100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b200::,2606:b200:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2606:b300::,2606:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b400::,2606:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b500::,2606:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b600::,2606:b600:fff:ffff:ffff:ffff:ffff:ffff,US
+2606:b700::,2606:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:b800::,2606:b800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:b900::,2606:b900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ba00::,2606:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bb00::,2606:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bc00::,2606:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bd00::,2606:bd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:be00::,2606:be00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:bf00::,2606:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c000::,2606:c000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c100::,2606:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c200::,2606:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c300::,2606:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c400::,2606:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c500::,2606:c500:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2606:c600::,2606:c600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:c700::,2606:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c800::,2606:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:c900::,2606:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ca00::,2606:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:cb00::,2606:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:cc00::,2606:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:cd00::,2606:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ce00::,2606:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:cf00::,2606:cf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d000::,2606:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d100::,2606:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d200::,2606:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d300::,2606:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d400::,2606:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d500::,2606:d500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d600::,2606:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d700::,2606:d700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d800::,2606:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:d900::,2606:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:da00::,2606:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:db00::,2606:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:dc00::,2606:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:dd00::,2606:dd00:fff:ffff:ffff:ffff:ffff:ffff,US
+2606:de00::,2606:de00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:df00::,2606:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e000::,2606:e000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:e100::,2606:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e200::,2606:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e300::,2606:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e400::,2606:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e500::,2606:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e600::,2606:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e700::,2606:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e800::,2606:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:e900::,2606:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ea00::,2606:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:eb00::,2606:eb00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:ec00::,2606:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ed00::,2606:ed00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ee00::,2606:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:ef00::,2606:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f000::,2606:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f100::,2606:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f200::,2606:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f300::,2606:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f400::,2606:f40f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f500::,2606:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f600::,2606:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f700::,2606:f700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:f800::,2606:f800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:f900::,2606:f900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:fa00::,2606:fa00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2606:fb00::,2606:fb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:fc00::,2606:fc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:fd00::,2606:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:fe00::,2606:fe00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2606:ff00::,2606:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607::,2607::ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:100::,2607:100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:200::,2607:200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:300::,2607:300:ffff:ffff:ffff:ffff:ffff:ffff,BS
+2607:400::,2607:400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:500::,2607:500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:600::,2607:600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:700::,2607:700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:800::,2607:800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:900::,2607:900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a00::,2607:a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:b00::,2607:b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c00::,2607:c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d00::,2607:d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e00::,2607:e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f00::,2607:f00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:1000::,2607:1000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1100::,2607:1100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1200::,2607:1200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1300::,2607:1300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1400::,2607:1400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1500::,2607:1500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1600::,2607:1600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1700::,2607:1700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1800::,2607:1800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1900::,2607:1900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1a00::,2607:1a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1b00::,2607:1b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1c00::,2607:1c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1d00::,2607:1d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1e00::,2607:1e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:1f00::,2607:1f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2000::,2607:2000:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:2100::,2607:2100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2200::,2607:2200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2300::,2607:2300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2400::,2607:2400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2500::,2607:2500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2600::,2607:2600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2700::,2607:2700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2800::,2607:2800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2900::,2607:2900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2a00::,2607:2a00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2b00::,2607:2b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2c00::,2607:2c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2d00::,2607:2d00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:2e00::,2607:2e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:2f00::,2607:2f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3000::,2607:3000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3100::,2607:3100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3200::,2607:3200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3300::,2607:3300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3400::,2607:3400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3500::,2607:3500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3600::,2607:3600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3700::,2607:3700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3800::,2607:3800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3900::,2607:3900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3a00::,2607:3a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3b00::,2607:3b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3c00::,2607:3c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3d00::,2607:3d0f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3e00::,2607:3e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:3f00::,2607:3f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4000::,2607:4000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4100::,2607:4100:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:4200::,2607:4200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4300::,2607:4300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:4400::,2607:4400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4500::,2607:4500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4600::,2607:4600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4700::,2607:4700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4800::,2607:4800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4900::,2607:4900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4a00::,2607:4a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4b00::,2607:4b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4c00::,2607:4c00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:4d00::,2607:4d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4e00::,2607:4e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:4f00::,2607:4f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5000::,2607:5006:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5100::,2607:5100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5200::,2607:5200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5300::,2607:5300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:5400::,2607:5400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5500::,2607:5500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5600::,2607:5600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5700::,2607:5700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5800::,2607:5800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5900::,2607:5900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:5a00::,2607:5a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5b00::,2607:5b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5c00::,2607:5c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5d00::,2607:5d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:5e00::,2607:5e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:5f00::,2607:5f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6000::,2607:6000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6100::,2607:6100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6200::,2607:6200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6300::,2607:6300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6400::,2607:6400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6500::,2607:6500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:6600::,2607:6600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6700::,2607:6700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6800::,2607:6800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6900::,2607:6900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6a00::,2607:6a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6b00::,2607:6b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6c00::,2607:6c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6d00::,2607:6d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6e00::,2607:6e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:6f00::,2607:6f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7000::,2607:7000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7100::,2607:7100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7200::,2607:7200:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7300::,2607:7300:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7400::,2607:7400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7500::,2607:7500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7600::,2607:7600:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7700::,2607:7700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7800::,2607:7800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7900::,2607:7900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7a00::,2607:7a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7b00::,2607:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7c00::,2607:7c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7d00::,2607:7d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:7e00::,2607:7e00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:7f00::,2607:7f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8000::,2607:8000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8100::,2607:8100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8200::,2607:8200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8300::,2607:8300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8400::,2607:8400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8500::,2607:8500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8600::,2607:8600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8800::,2607:8800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8900::,2607:8900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8a00::,2607:8a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8b00::,2607:8b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8c00::,2607:8c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8d00::,2607:8d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8e00::,2607:8e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:8f00::,2607:8f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9000::,2607:9000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9100::,2607:9100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9200::,2607:9200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9300::,2607:9300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9400::,2607:9400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9500::,2607:9500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:9600::,2607:9600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9700::,2607:9700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9800::,2607:9800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9900::,2607:9900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:9a00::,2607:9a00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9b00::,2607:9b00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9c00::,2607:9c00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9d00::,2607:9d00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9e00::,2607:9e00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:9f00::,2607:9f00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a000::,2607:a000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:a100::,2607:a10f:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a200::,2607:a200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a300::,2607:a300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a400::,2607:a400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a500::,2607:a500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a600::,2607:a600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a700::,2607:a700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a800::,2607:a800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:a900::,2607:a900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:aa00::,2607:aa00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ab00::,2607:ab00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ac00::,2607:ac00:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:ad00::,2607:ad00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ae00::,2607:ae00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:af00::,2607:af00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b000::,2607:b000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b100::,2607:b100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b200::,2607:b200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b300::,2607:b300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b400::,2607:b400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b500::,2607:b500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b600::,2607:b600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b700::,2607:b700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b800::,2607:b800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:b900::,2607:b900:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ba00::,2607:ba00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:bb00::,2607:bb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:bc00::,2607:bc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:bd00::,2607:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:be00::,2607:be00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:bf00::,2607:bf00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c000::,2607:c000:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:c100::,2607:c100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c200::,2607:c200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c300::,2607:c300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c400::,2607:c400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c500::,2607:c500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c600::,2607:c600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c700::,2607:c700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c800::,2607:c800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:c900::,2607:c900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ca00::,2607:ca00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:cb00::,2607:cb00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cc00::,2607:cc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cd00::,2607:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ce00::,2607:ce00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:cf00::,2607:cf03:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d000::,2607:d000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d100::,2607:d100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d200::,2607:d200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d300::,2607:d300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d400::,2607:d400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d500::,2607:d500:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:d600::,2607:d600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d700::,2607:d700:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:d800::,2607:d800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:d900::,2607:d900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:da00::,2607:da00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:db00::,2607:db00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:dc00::,2607:dc00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:dd00::,2607:dd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:de00::,2607:de00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:df00::,2607:df00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e000::,2607:e000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e100::,2607:e100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e200::,2607:e200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e300::,2607:e300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e400::,2607:e400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e500::,2607:e500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e600::,2607:e600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e700::,2607:e700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e800::,2607:e800:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:e900::,2607:e900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ea00::,2607:ea00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:eb00::,2607:eb00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ec00::,2607:ec00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ed00::,2607:ed00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ee00::,2607:ee00:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ef00::,2607:ef00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f000::,2607:f000:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f008::,2607:f008:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f010::,2607:f010:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f018::,2607:f018:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f020::,2607:f020:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f028::,2607:f028:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f030::,2607:f030:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f038::,2607:f038:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f040::,2607:f040:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f048::,2607:f048:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f050::,2607:f050:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f058::,2607:f058:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f060::,2607:f060:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f068::,2607:f068:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f070::,2607:f070:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f078::,2607:f078:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f080::,2607:f080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f088::,2607:f088:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f090::,2607:f090:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f098::,2607:f098:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0a0::,2607:f0a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0a8::,2607:f0a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0b0::,2607:f0b0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f0c0::,2607:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0c8::,2607:f0c8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f0d0::,2607:f0d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0d8::,2607:f0e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0e8::,2607:f0e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f0f8::,2607:f0f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f100::,2607:f100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f108::,2607:f108:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f110::,2607:f110:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f118::,2607:f118:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f128::,2607:f128:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f130::,2607:f130:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f138::,2607:f138:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f140::,2607:f140:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f148::,2607:f148:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f150::,2607:f150:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f158::,2607:f158:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f160::,2607:f160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f168::,2607:f168:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f170::,2607:f170:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f178::,2607:f178:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f180::,2607:f181:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f188::,2607:f188:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f190::,2607:f190:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f198::,2607:f198:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1a0::,2607:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1a8::,2607:f1a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1b0::,2607:f1b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1b8::,2607:f1b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1c0::,2607:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1c8::,2607:f1c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1d0::,2607:f1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1d8::,2607:f1d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1e0::,2607:f1e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1e8::,2607:f1e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f1f0::,2607:f1f0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f1f8::,2607:f1f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f200::,2607:f200:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f208::,2607:f208:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f210::,2607:f212:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f218::,2607:f218:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f220::,2607:f220:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f228::,2607:f228:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f230::,2607:f230:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f238::,2607:f238:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f240::,2607:f240:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f248::,2607:f248:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f250::,2607:f250:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f258::,2607:f258:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f260::,2607:f260:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f270::,2607:f270:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f278::,2607:f278:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f280::,2607:f281:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f288::,2607:f288:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f290::,2607:f290:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f298::,2607:f298:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2a8::,2607:f2a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2b0::,2607:f2b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2c0::,2607:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f2c8::,2607:f2c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2d0::,2607:f2d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2d8::,2607:f2d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2e0::,2607:f2e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2e8::,2607:f2e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2f0::,2607:f2f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f2f8::,2607:f2f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f300::,2607:f300:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f308::,2607:f308:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f310::,2607:f310:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f318::,2607:f318:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f330::,2607:f330:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f338::,2607:f338:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f340::,2607:f340:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f348::,2607:f348:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f350::,2607:f350:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f358::,2607:f358:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f360::,2607:f360:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f368::,2607:f368:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f370::,2607:f370:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f378::,2607:f378:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f380::,2607:f380:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f388::,2607:f388:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f390::,2607:f390:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f398::,2607:f398:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3a0::,2607:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3b0::,2607:f3b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3b8::,2607:f3b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3c0::,2607:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3c8::,2607:f3c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3d0::,2607:f3d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3d8::,2607:f3d8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f3e0::,2607:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f3e8::,2607:f3e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3f0::,2607:f3f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f3f8::,2607:f3f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f400::,2607:f400:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f408::,2607:f408:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f410::,2607:f410:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f418::,2607:f418:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f420::,2607:f420:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f428::,2607:f428:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f430::,2607:f430:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f438::,2607:f438:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f440::,2607:f440:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f450::,2607:f450:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f458::,2607:f458:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f460::,2607:f460:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f468::,2607:f468:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f470::,2607:f470:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f478::,2607:f478:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f480::,2607:f480:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f488::,2607:f488:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f490::,2607:f490:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f498::,2607:f498:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4a0::,2607:f4a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4a8::,2607:f4a8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f4b0::,2607:f4b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4b8::,2607:f4b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4c0::,2607:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4c8::,2607:f4c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4d0::,2607:f4d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4d8::,2607:f4d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4e0::,2607:f4e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4e8::,2607:f4e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4f0::,2607:f4f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f4f8::,2607:f4f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f500::,2607:f500:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f508::,2607:f508:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f510::,2607:f510:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f518::,2607:f518:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f520::,2607:f520:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f528::,2607:f528:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f530::,2607:f530:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f538::,2607:f538:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f540::,2607:f540:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f548::,2607:f548:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f550::,2607:f550:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f558::,2607:f558:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f560::,2607:f560:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f568::,2607:f568:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f570::,2607:f570:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f578::,2607:f578:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f588::,2607:f588:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f590::,2607:f590:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f598::,2607:f598:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5a0::,2607:f5a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5a8::,2607:f5a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5b0::,2607:f5b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5c0::,2607:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5c8::,2607:f5c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5d0::,2607:f5d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5d8::,2607:f5d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5e0::,2607:f5e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5e8::,2607:f5e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5f0::,2607:f5f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f5f8::,2607:f5f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f600::,2607:f600:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f608::,2607:f608:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f610::,2607:f610:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f618::,2607:f618:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f620::,2607:f620:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f628::,2607:f628:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f630::,2607:f630:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f638::,2607:f638:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f640::,2607:f640:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f648::,2607:f648:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f650::,2607:f650:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f658::,2607:f658:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f660::,2607:f660:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f668::,2607:f668:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f670::,2607:f670:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f678::,2607:f678:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f680::,2607:f680:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f688::,2607:f688:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f690::,2607:f690:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f698::,2607:f699:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f6a0::,2607:f6a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6a8::,2607:f6a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6b0::,2607:f6b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6b8::,2607:f6b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6c0::,2607:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f6c8::,2607:f6c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6d0::,2607:f6d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6d8::,2607:f6d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6e0::,2607:f6e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6e8::,2607:f6e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6f0::,2607:f6f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f6f8::,2607:f6f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f700::,2607:f700:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f708::,2607:f708:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f710::,2607:f710:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f718::,2607:f718:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f720::,2607:f720:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f728::,2607:f728:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f738::,2607:f738:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f740::,2607:f740:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f748::,2607:f748:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f750::,2607:f750:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f758::,2607:f758:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f760::,2607:f760:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f768::,2607:f768:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f770::,2607:f770:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f778::,2607:f778:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f788::,2607:f788:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f790::,2607:f790:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f798::,2607:f798:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f7a0::,2607:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7a8::,2607:f7a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7b0::,2607:f7b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7b8::,2607:f7b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7c0::,2607:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7c8::,2607:f7c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7d0::,2607:f7d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7d8::,2607:f7d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7e0::,2607:f7e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7e8::,2607:f7e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7f0::,2607:f7f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f7f8::,2607:f7f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f800::,2607:f800:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f808::,2607:f808:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f810::,2607:f810:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f818::,2607:f818:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f820::,2607:f820:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f828::,2607:f828:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f830::,2607:f830:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f838::,2607:f838:ffff:ffff:ffff:ffff:ffff:ffff,VI
+2607:f848::,2607:f848:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f850::,2607:f850:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f858::,2607:f858:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f860::,2607:f860:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f868::,2607:f868:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f870::,2607:f870:ffff:ffff:ffff:ffff:ffff:ffff,PR
+2607:f878::,2607:f878:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f880::,2607:f880:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f888::,2607:f888:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f890::,2607:f890:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f898::,2607:f898:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8a0::,2607:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8a8::,2607:f8a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8b0::,2607:f8b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8b8::,2607:f8b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8c0::,2607:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8c8::,2607:f8c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8d0::,2607:f8d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8d8::,2607:f8d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8e0::,2607:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8e8::,2607:f8e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f8f0::,2607:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f8f8::,2607:f8f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f900::,2607:f900:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f908::,2607:f908:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f910::,2607:f910:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f920::,2607:f920:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f928::,2607:f928:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f930::,2607:f930:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f938::,2607:f938:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f940::,2607:f940:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f948::,2607:f948:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f950::,2607:f950:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f958::,2607:f958:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f960::,2607:f960:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f968::,2607:f968:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f978::,2607:f978:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f980::,2607:f980:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f990::,2607:f990:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:f998::,2607:f998:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9a0::,2607:f9a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9a8::,2607:f9a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9b0::,2607:f9b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9b8::,2607:f9b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9c0::,2607:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9c8::,2607:f9c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9d0::,2607:f9d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9d8::,2607:f9d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9e0::,2607:f9e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9f0::,2607:f9f1:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:f9f8::,2607:f9f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fa00::,2607:faff:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2607:fb00::,2607:fbff:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2607:fc00::,2607:fcff:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2607:fd00::,2607:fd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd08::,2607:fd08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd10::,2607:fd10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd18::,2607:fd18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd28::,2607:fd28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd30::,2607:fd30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd38::,2607:fd38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd40::,2607:fd40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd48::,2607:fd48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd50::,2607:fd50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd60::,2607:fd60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd68::,2607:fd68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd70::,2607:fd70:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd78::,2607:fd78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fd80::,2607:fd80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd88::,2607:fd88:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd90::,2607:fd90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fd98::,2607:fd98:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fda0::,2607:fda0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fda8::,2607:fda8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdb0::,2607:fdb0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdb8::,2607:fdb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdc0::,2607:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdc8::,2607:fdc8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdd0::,2607:fdd0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdd8::,2607:fdd8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fde0::,2607:fde0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fde8::,2607:fde8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdf0::,2607:fdf0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fdf8::,2607:fdf8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe00::,2607:fe00:ffff:ffff:ffff:ffff:ffff:ffff,JM
+2607:fe08::,2607:fe08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe10::,2607:fe10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe18::,2607:fe18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe20::,2607:fe20:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe28::,2607:fe28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe30::,2607:fe30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe38::,2607:fe38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe40::,2607:fe40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe48::,2607:fe48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe50::,2607:fe50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe58::,2607:fe58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe60::,2607:fe60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe68::,2607:fe68:ffff:ffff:ffff:ffff:ffff:ffff,BS
+2607:fe70::,2607:fe70:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe78::,2607:fe78:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe80::,2607:fe80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe88::,2607:fe88:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fe90::,2607:fe90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fe98::,2607:fe98:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fea0::,2607:fea0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fea8::,2607:fea8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:feb0::,2607:feb0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:feb8::,2607:feb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fec0::,2607:fec0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fec8::,2607:fec8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:fed0::,2607:fed0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fed8::,2607:fed8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fee0::,2607:fee0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fee8::,2607:fee8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fef8::,2607:fef8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff00::,2607:ff00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff08::,2607:ff08:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff10::,2607:ff10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff18::,2607:ff18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff28::,2607:ff28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff30::,2607:ff30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff38::,2607:ff38:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff40::,2607:ff40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff48::,2607:ff48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff50::,2607:ff50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff58::,2607:ff58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff60::,2607:ff60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff68::,2607:ff68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff70::,2607:ff70:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff78::,2607:ff78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ff80::,2607:ff80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ff90::,2607:ff90:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffa0::,2607:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffa8::,2607:ffa8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffb0::,2607:ffb0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ffb8::,2607:ffb8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffc0::,2607:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ffc8::,2607:ffc8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffd0::,2607:ffd0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffd8::,2607:ffd8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:ffe0::,2607:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2607:ffe8::,2607:ffe8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fff0::,2607:fff0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2607:fff8::,2607:fff8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2608::,2608:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2608:4000::,2608:43ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2608:8000::,2608:83ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2608:c000::,2608:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609::,2609:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:4000::,2609:43ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:8000::,2609:83ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:a000::,2609:a3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:c000::,2609:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2609:e000::,2609:e3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c::,260c:3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:2000::,260c:23ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:4000::,260c:43ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:6000::,260c:63ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:8000::,260c:83ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:a000::,260c:a3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:c000::,260c:c3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:d000::,260c:d3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:e000::,260c:e3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260c:f000::,260c:f3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260f:d000::,260f:d3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+260f:f000::,260f:f3ff:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610::,2610::ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:8::,2610:8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:10::,2610:10:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:18::,2610:18:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:20::,2610:20:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:28::,2610:28:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:30::,2610:30:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:38::,2610:38:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:40::,2610:40:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:48::,2610:48:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:50::,2610:50:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:58::,2610:58:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:60::,2610:60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:68::,2610:68:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:78::,2610:78:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:80::,2610:88:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:98::,2610:98:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:a0::,2610:a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:b0::,2610:b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:b8::,2610:b8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:c0::,2610:c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:c8::,2610:c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:d0::,2610:d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:d8::,2610:d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:e0::,2610:e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:e8::,2610:e8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:f0::,2610:f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:f8::,2610:f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:100::,2610:100:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:108::,2610:108:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:110::,2610:110:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:120::,2610:120:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:128::,2610:128:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:130::,2610:130:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:140::,2610:140:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:148::,2610:148:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:150::,2610:150:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:158::,2610:158:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:160::,2610:160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:168::,2610:168:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:170::,2610:170:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:178::,2610:178:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:180::,2610:180:ffff:ffff:ffff:ffff:ffff:ffff,BS
+2610:188::,2610:188:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:190::,2610:190:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:198::,2610:198:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1a0::,2610:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1a8::,2610:1a8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1b0::,2610:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1c0::,2610:1c2:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1c8::,2610:1c8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1d0::,2610:1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1d8::,2610:1d8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1e0::,2610:1e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1e8::,2610:1e8:ffff:ffff:ffff:ffff:ffff:ffff,CA
+2610:1f0::,2610:1f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2610:1f8::,2610:1f8:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620::,2620::ffff:ffff:ffff:ffff:ffff,US
+2620:0:10::,2620::10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:20::,2620::20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:30::,2620::37:ffff:ffff:ffff:ffff:ffff,US
+2620:0:40::,2620::40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:60::,2620::60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:70::,2620::70:ffff:ffff:ffff:ffff:ffff,US
+2620:0:80::,2620::80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:90::,2620::90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:a0::,2620::a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b0::,2620::b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c0::,2620::c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:f0::,2620::f0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:100::,2620::100:ffff:ffff:ffff:ffff:ffff,US
+2620:0:110::,2620::110:ffff:ffff:ffff:ffff:ffff,US
+2620:0:120::,2620::120:ffff:ffff:ffff:ffff:ffff,US
+2620:0:140::,2620::140:ffff:ffff:ffff:ffff:ffff,US
+2620:0:150::,2620::150:ffff:ffff:ffff:ffff:ffff,US
+2620:0:160::,2620::160:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:170::,2620::170:ffff:ffff:ffff:ffff:ffff,US
+2620:0:180::,2620::180:ffff:ffff:ffff:ffff:ffff,US
+2620:0:190::,2620::190:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a0::,2620::1a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1b0::,2620::1b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1c0::,2620::1c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1d0::,2620::1d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1f0::,2620::1f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:200::,2620::200:ffff:ffff:ffff:ffff:ffff,US
+2620:0:210::,2620::210:ffff:ffff:ffff:ffff:ffff,US
+2620:0:220::,2620::220:ffff:ffff:ffff:ffff:ffff,US
+2620:0:230::,2620::230:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:240::,2620::240:ffff:ffff:ffff:ffff:ffff,US
+2620:0:250::,2620::250:ffff:ffff:ffff:ffff:ffff,US
+2620:0:260::,2620::260:ffff:ffff:ffff:ffff:ffff,US
+2620:0:270::,2620::270:ffff:ffff:ffff:ffff:ffff,US
+2620:0:280::,2620::280:ffff:ffff:ffff:ffff:ffff,US
+2620:0:290::,2620::290:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b0::,2620::2b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2c0::,2620::2c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2d0::,2620::2d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2f0::,2620::2f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:300::,2620::300:ffff:ffff:ffff:ffff:ffff,US
+2620:0:320::,2620::320:ffff:ffff:ffff:ffff:ffff,US
+2620:0:350::,2620::353:ffff:ffff:ffff:ffff:ffff,US
+2620:0:360::,2620::361:ffff:ffff:ffff:ffff:ffff,US
+2620:0:380::,2620::380:ffff:ffff:ffff:ffff:ffff,US
+2620:0:390::,2620::390:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3a0::,2620::3a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3b0::,2620::3b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3c0::,2620::3c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3d0::,2620::3d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3e0::,2620::3e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3f0::,2620::3f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:400::,2620::57f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:600::,2620::600:ffff:ffff:ffff:ffff:ffff,US
+2620:0:610::,2620::610:ffff:ffff:ffff:ffff:ffff,US
+2620:0:630::,2620::630:ffff:ffff:ffff:ffff:ffff,US
+2620:0:640::,2620::640:ffff:ffff:ffff:ffff:ffff,US
+2620:0:650::,2620::650:ffff:ffff:ffff:ffff:ffff,US
+2620:0:660::,2620::660:ffff:ffff:ffff:ffff:ffff,US
+2620:0:670::,2620::671:ffff:ffff:ffff:ffff:ffff,US
+2620:0:680::,2620::680:ffff:ffff:ffff:ffff:ffff,US
+2620:0:690::,2620::691:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6a0::,2620::6a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6b0::,2620::6b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6c0::,2620::6c7:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6d0::,2620::6d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6e0::,2620::6e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:6f0::,2620::6f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:700::,2620::77f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:800::,2620::802:ffff:ffff:ffff:ffff:ffff,US
+2620:0:810::,2620::810:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:820::,2620::820:ffff:ffff:ffff:ffff:ffff,US
+2620:0:840::,2620::840:ffff:ffff:ffff:ffff:ffff,US
+2620:0:850::,2620::850:ffff:ffff:ffff:ffff:ffff,US
+2620:0:860::,2620::863:ffff:ffff:ffff:ffff:ffff,US
+2620:0:870::,2620::877:ffff:ffff:ffff:ffff:ffff,US
+2620:0:880::,2620::880:ffff:ffff:ffff:ffff:ffff,US
+2620:0:890::,2620::890:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8a0::,2620::8a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8d0::,2620::8d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8e0::,2620::8e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:8f0::,2620::8f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:900::,2620::900:ffff:ffff:ffff:ffff:ffff,US
+2620:0:910::,2620::910:ffff:ffff:ffff:ffff:ffff,US
+2620:0:920::,2620::920:ffff:ffff:ffff:ffff:ffff,US
+2620:0:930::,2620::930:ffff:ffff:ffff:ffff:ffff,US
+2620:0:940::,2620::940:ffff:ffff:ffff:ffff:ffff,US
+2620:0:950::,2620::950:ffff:ffff:ffff:ffff:ffff,US
+2620:0:960::,2620::960:ffff:ffff:ffff:ffff:ffff,US
+2620:0:970::,2620::970:ffff:ffff:ffff:ffff:ffff,US
+2620:0:980::,2620::980:ffff:ffff:ffff:ffff:ffff,US
+2620:0:990::,2620::990:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9a0::,2620::9a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9b0::,2620::9b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9c0::,2620::9c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9e0::,2620::9e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:9f0::,2620::9f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:a00::,2620::a1f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b00::,2620::b00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b10::,2620::b13:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b20::,2620::b20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b30::,2620::b30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b40::,2620::b40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b50::,2620::b50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b60::,2620::b61:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b80::,2620::b80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:b90::,2620::b90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ba0::,2620::ba0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:bb0::,2620::bb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:bd0::,2620::bd0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:be0::,2620::be0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:bf0::,2620::bf0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c10::,2620::c20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c30::,2620::c30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c40::,2620::c40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c60::,2620::c60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c70::,2620::c70:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c80::,2620::c80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:c90::,2620::ca0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cb0::,2620::cb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cc0::,2620::ccf:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ce0::,2620::ce0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:cf0::,2620::cf0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d00::,2620::d00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d20::,2620::d20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d30::,2620::d30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d50::,2620::d50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d60::,2620::d63:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d70::,2620::d77:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d80::,2620::d80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:d90::,2620::d90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:dc0::,2620::dc0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:dd0::,2620::dd0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:de0::,2620::de0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:df0::,2620::df0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e00::,2620::e00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e10::,2620::e10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e20::,2620::e23:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e30::,2620::e30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e50::,2620::e50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e60::,2620::e60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e80::,2620::e80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:e90::,2620::e90:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ea0::,2620::eb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ed0::,2620::ed0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ee0::,2620::ee0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:ef0::,2620::ef0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:f00::,2620::f7f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1000::,2620::10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1400::,2620::143f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1500::,2620::157f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1600::,2620::167f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1700::,2620::170f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1800::,2620::181f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a00::,2620::1a00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a10::,2620::1a10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a20::,2620::1a20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a30::,2620::1a30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a40::,2620::1a40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a50::,2620::1a50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a60::,2620::1a60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a70::,2620::1a70:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1a80::,2620::1a80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1aa0::,2620::1aa0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ab0::,2620::1ab0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ac0::,2620::1ac0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ad0::,2620::1ad7:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1ae0::,2620::1ae0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1af0::,2620::1af0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:1b00::,2620::1b07:ffff:ffff:ffff:ffff:ffff,US
+2620:0:1c00::,2620::1cff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2000::,2620::203f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2100::,2620::213f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2210::,2620::2210:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2220::,2620::2220:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:2240::,2620::2240:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2250::,2620::2250:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2260::,2620::2260:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2270::,2620::2270:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2280::,2620::2280:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2290::,2620::2290:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22a0::,2620::22a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22b0::,2620::22b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22c0::,2620::22c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22d0::,2620::22d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:22e0::,2620::22e0:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:22f0::,2620::22f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2300::,2620::230f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2400::,2620::24ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2800::,2620::2800:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2810::,2620::2810:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2820::,2620::2820:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2830::,2620::2830:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2840::,2620::2840:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2850::,2620::2850:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2860::,2620::2860:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2870::,2620::2870:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2880::,2620::2880:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28a0::,2620::28a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28b0::,2620::28b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28c0::,2620::28c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28d0::,2620::28d0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:28f0::,2620::28f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2900::,2620::290f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2a00::,2620::2a1f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b00::,2620::2b00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b10::,2620::2b10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b20::,2620::2b20:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b30::,2620::2b40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b50::,2620::2b50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b60::,2620::2b60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2b70::,2620::2b8f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2bc0::,2620::2bc3:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2be0::,2620::2be0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2bf0::,2620::2bf0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2d00::,2620::2d7f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e00::,2620::2e00:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e10::,2620::2e10:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e30::,2620::2e30:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e40::,2620::2e40:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e50::,2620::2e50:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e60::,2620::2e60:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2e70::,2620::2e80:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2ea0::,2620::2ea0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2eb0::,2620::2eb0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2ed0::,2620::2ed0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2ee0::,2620::2ee0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:2f00::,2620::2f7f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:3000::,2620::31ff:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5000::,2620::5000:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5010::,2620::5010:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5030::,2620::5030:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5040::,2620::5040:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5050::,2620::5050:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5060::,2620::5060:ffff:ffff:ffff:ffff:ffff,CA
+2620:0:5070::,2620::5070:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5080::,2620::5080:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5090::,2620::5090:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50a0::,2620::50a0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50b0::,2620::50b0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50c0::,2620::50c0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50d0::,2620::50d1:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50e0::,2620::50e0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:50f0::,2620::50f0:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5100::,2620::510f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5200::,2620::5200:ffff:ffff:ffff:ffff:ffff,US
+2620:0:5300::,2620::530f:ffff:ffff:ffff:ffff:ffff,US
+2620:0:aa00::,2620::aa00:ffff:ffff:ffff:ffff:ffff,US
+2620:1::,2620:1::ffff:ffff:ffff:ffff:ffff,US
+2620:1:4000::,2620:1:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1:8000::,2620:1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1:c000::,2620:1:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:2::,2620:2::ffff:ffff:ffff:ffff:ffff,US
+2620:2:4000::,2620:2:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:2:8000::,2620:2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2:c000::,2620:2:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:3::,2620:3::ffff:ffff:ffff:ffff:ffff,US
+2620:3:4000::,2620:3:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3:8000::,2620:3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3:c000::,2620:3:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:4::,2620:4::ffff:ffff:ffff:ffff:ffff,US
+2620:4:4000::,2620:4:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:4:8000::,2620:4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4:c000::,2620:4:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:5::,2620:5::ffff:ffff:ffff:ffff:ffff,US
+2620:5:4000::,2620:5:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:5:8000::,2620:5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5:c000::,2620:5:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:6::,2620:6::ffff:ffff:ffff:ffff:ffff,CA
+2620:6:4000::,2620:6:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:6:8000::,2620:6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6:c000::,2620:6:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:7::,2620:7::ffff:ffff:ffff:ffff:ffff,US
+2620:7:4000::,2620:7:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:7:8000::,2620:7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7:c000::,2620:7:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:8::,2620:8:7f:ffff:ffff:ffff:ffff:ffff,CA
+2620:8:8200::,2620:8:8200:ffff:ffff:ffff:ffff:ffff,US
+2620:9::,2620:9::ffff:ffff:ffff:ffff:ffff,US
+2620:9:4000::,2620:9:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:9:8000::,2620:9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9:c000::,2620:9:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:a::,2620:a::ffff:ffff:ffff:ffff:ffff,CA
+2620:a:4000::,2620:a:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:a:8000::,2620:a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a:c000::,2620:a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:b::,2620:b::ffff:ffff:ffff:ffff:ffff,US
+2620:b:4000::,2620:b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:b:8000::,2620:b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b:c000::,2620:b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:c::,2620:c:3:ffff:ffff:ffff:ffff:ffff,US
+2620:c:4000::,2620:c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:c:8000::,2620:c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c:c000::,2620:c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:d::,2620:d::ffff:ffff:ffff:ffff:ffff,US
+2620:d:4000::,2620:d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:8000::,2620:d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d:c000::,2620:d:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:e::,2620:e::ffff:ffff:ffff:ffff:ffff,US
+2620:e:4000::,2620:e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:8000::,2620:e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e:c000::,2620:e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:f::,2620:f:3:ffff:ffff:ffff:ffff:ffff,US
+2620:f:4000::,2620:f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:f:8000::,2620:f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f:c000::,2620:f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:10::,2620:10::ffff:ffff:ffff:ffff:ffff,US
+2620:10:4000::,2620:10:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:10:8000::,2620:10:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:10:c000::,2620:10:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:11::,2620:11::ffff:ffff:ffff:ffff:ffff,US
+2620:11:4000::,2620:11:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:11:8000::,2620:11:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:11:c000::,2620:11:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:12::,2620:12::ffff:ffff:ffff:ffff:ffff,US
+2620:12:4000::,2620:12:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:12:8000::,2620:12:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:12:c000::,2620:12:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:13::,2620:13::ffff:ffff:ffff:ffff:ffff,CA
+2620:13:4000::,2620:13:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:13:8000::,2620:13:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:13:c000::,2620:13:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:14::,2620:14::ffff:ffff:ffff:ffff:ffff,US
+2620:14:4000::,2620:14:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:14:8000::,2620:14:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:14:c000::,2620:14:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:15::,2620:15::ffff:ffff:ffff:ffff:ffff,US
+2620:15:4000::,2620:15:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:15:8000::,2620:15:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:15:c000::,2620:15:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:16::,2620:16::ffff:ffff:ffff:ffff:ffff,CA
+2620:16:4000::,2620:16:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:16:8000::,2620:16:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:16:c000::,2620:16:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:17::,2620:17::ffff:ffff:ffff:ffff:ffff,US
+2620:17:4000::,2620:17:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:17:8000::,2620:17:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:17:c000::,2620:17:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:18::,2620:18::ffff:ffff:ffff:ffff:ffff,US
+2620:18:4000::,2620:18:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:18:8000::,2620:18:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:18:c000::,2620:18:c000:ffff:ffff:ffff:ffff:ffff,KN
+2620:19::,2620:19::ffff:ffff:ffff:ffff:ffff,US
+2620:19:4000::,2620:19:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:19:8000::,2620:19:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:19:c000::,2620:19:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1a::,2620:1a::ffff:ffff:ffff:ffff:ffff,US
+2620:1a:4000::,2620:1a:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1a:8000::,2620:1a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1a:c000::,2620:1a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1b::,2620:1b::ffff:ffff:ffff:ffff:ffff,US
+2620:1b:4000::,2620:1b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1b:8000::,2620:1b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1b:c000::,2620:1b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1c::,2620:1c::ffff:ffff:ffff:ffff:ffff,US
+2620:1c:4000::,2620:1c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1c:8000::,2620:1c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1c:c000::,2620:1c:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1d::,2620:1d::ffff:ffff:ffff:ffff:ffff,US
+2620:1d:4000::,2620:1d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1d:8000::,2620:1d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1d:c000::,2620:1d:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:1e::,2620:1e::ffff:ffff:ffff:ffff:ffff,US
+2620:1e:4000::,2620:1e:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:1e:8000::,2620:1e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1e:c000::,2620:1e:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:1f::,2620:1f::ffff:ffff:ffff:ffff:ffff,US
+2620:1f:4000::,2620:1f:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:1f:8000::,2620:1f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:1f:c000::,2620:1f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:20::,2620:20::ffff:ffff:ffff:ffff:ffff,US
+2620:20:4000::,2620:20:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:20:8000::,2620:20:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:20:c000::,2620:20:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:21::,2620:21::ffff:ffff:ffff:ffff:ffff,US
+2620:21:4000::,2620:21:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:21:8000::,2620:21:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:21:c000::,2620:21:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:22::,2620:22::ffff:ffff:ffff:ffff:ffff,US
+2620:22:4000::,2620:22:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:22:8000::,2620:22:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:22:c000::,2620:22:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:23::,2620:23::ffff:ffff:ffff:ffff:ffff,US
+2620:23:4000::,2620:23:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:23:8000::,2620:23:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:23:c000::,2620:23:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:24::,2620:24:1f:ffff:ffff:ffff:ffff:ffff,US
+2620:24:8080::,2620:24:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:25::,2620:25::ffff:ffff:ffff:ffff:ffff,US
+2620:25:4000::,2620:25:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:25:8000::,2620:25:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:25:c000::,2620:25:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:26::,2620:26::ffff:ffff:ffff:ffff:ffff,US
+2620:26:4000::,2620:26:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:26:8000::,2620:26:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:26:c000::,2620:26:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:27::,2620:27:f:ffff:ffff:ffff:ffff:ffff,US
+2620:27:8080::,2620:27:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:28::,2620:28::ffff:ffff:ffff:ffff:ffff,US
+2620:28:4000::,2620:28:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:28:8000::,2620:28:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:28:c000::,2620:28:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:29::,2620:29::ffff:ffff:ffff:ffff:ffff,US
+2620:29:4000::,2620:29:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:29:8000::,2620:29:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:29:c000::,2620:29:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:2a::,2620:2a::ffff:ffff:ffff:ffff:ffff,US
+2620:2a:4000::,2620:2a:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:2a:8000::,2620:2a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2a:c000::,2620:2a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:2b::,2620:2b::ffff:ffff:ffff:ffff:ffff,US
+2620:2b:4000::,2620:2b:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:2b:8000::,2620:2b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2b:c000::,2620:2b:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:2c::,2620:2c:f:ffff:ffff:ffff:ffff:ffff,US
+2620:2c:8080::,2620:2c:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:2d::,2620:2d::ffff:ffff:ffff:ffff:ffff,US
+2620:2d:4000::,2620:2d:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:2d:8000::,2620:2d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2d:c000::,2620:2d:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:2e::,2620:2e:3f:ffff:ffff:ffff:ffff:ffff,US
+2620:2e:8080::,2620:2e:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:2f::,2620:2f::ffff:ffff:ffff:ffff:ffff,CA
+2620:2f:4000::,2620:2f:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:2f:8000::,2620:2f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:2f:c000::,2620:2f:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:30::,2620:30::ffff:ffff:ffff:ffff:ffff,US
+2620:30:4000::,2620:30:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:30:8000::,2620:30:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:30:c000::,2620:30:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:31::,2620:31::ffff:ffff:ffff:ffff:ffff,US
+2620:31:4000::,2620:31:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:31:8000::,2620:31:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:31:c000::,2620:31:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:32::,2620:32::ffff:ffff:ffff:ffff:ffff,US
+2620:32:4000::,2620:32:4000:ffff:ffff:ffff:ffff:ffff,CA
+2620:32:8000::,2620:32:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:32:c000::,2620:32:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:33::,2620:33::ffff:ffff:ffff:ffff:ffff,US
+2620:33:4000::,2620:33:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:33:8000::,2620:33:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:33:c000::,2620:33:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:34::,2620:34::ffff:ffff:ffff:ffff:ffff,US
+2620:34:4000::,2620:34:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:34:8000::,2620:34:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:34:c000::,2620:34:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:35::,2620:35::ffff:ffff:ffff:ffff:ffff,US
+2620:35:4000::,2620:35:400f:ffff:ffff:ffff:ffff:ffff,CA
+2620:35:8000::,2620:35:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:35:c000::,2620:35:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:36::,2620:36::ffff:ffff:ffff:ffff:ffff,US
+2620:36:4000::,2620:36:400f:ffff:ffff:ffff:ffff:ffff,CA
+2620:36:8000::,2620:36:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:36:c000::,2620:36:c000:ffff:ffff:ffff:ffff:ffff,CA
+2620:37::,2620:37::ffff:ffff:ffff:ffff:ffff,US
+2620:37:4000::,2620:37:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:37:8000::,2620:37:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:37:c000::,2620:37:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:38::,2620:38::ffff:ffff:ffff:ffff:ffff,US
+2620:38:4000::,2620:38:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:38:8000::,2620:38:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:38:c000::,2620:38:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:39::,2620:39::ffff:ffff:ffff:ffff:ffff,US
+2620:39:4000::,2620:39:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:39:8000::,2620:39:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:39:c000::,2620:39:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:3a::,2620:3a::ffff:ffff:ffff:ffff:ffff,US
+2620:3a:4000::,2620:3a:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:3a:8000::,2620:3a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3a:c000::,2620:3a:c000:ffff:ffff:ffff:ffff:ffff,US
+2620:3b::,2620:3b::ffff:ffff:ffff:ffff:ffff,US
+2620:3b:4000::,2620:3b:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3b:8000::,2620:3b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3b:c000::,2620:3b:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:3c::,2620:3c:3f:ffff:ffff:ffff:ffff:ffff,US
+2620:3c:8080::,2620:3c:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:3d::,2620:3d::ffff:ffff:ffff:ffff:ffff,US
+2620:3d:4000::,2620:3d:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:3d:8000::,2620:3d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3e::,2620:3e::ffff:ffff:ffff:ffff:ffff,US
+2620:3e:8000::,2620:3e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:3f::,2620:3f::ffff:ffff:ffff:ffff:ffff,US
+2620:3f:8000::,2620:3f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:40::,2620:40::ffff:ffff:ffff:ffff:ffff,US
+2620:40:8000::,2620:40:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:41::,2620:41::ffff:ffff:ffff:ffff:ffff,US
+2620:41:8000::,2620:41:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:42::,2620:42::ffff:ffff:ffff:ffff:ffff,US
+2620:42:8000::,2620:42:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:43::,2620:43::ffff:ffff:ffff:ffff:ffff,US
+2620:43:8000::,2620:43:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:44::,2620:44:1:ffff:ffff:ffff:ffff:ffff,US
+2620:44:8000::,2620:44:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:45::,2620:45::ffff:ffff:ffff:ffff:ffff,CA
+2620:45:8000::,2620:45:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:46::,2620:46::ffff:ffff:ffff:ffff:ffff,US
+2620:46:8000::,2620:46:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:47::,2620:47::ffff:ffff:ffff:ffff:ffff,US
+2620:47:8000::,2620:47:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:48::,2620:48::ffff:ffff:ffff:ffff:ffff,US
+2620:48:8000::,2620:48:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:49::,2620:49:f:ffff:ffff:ffff:ffff:ffff,CA
+2620:49:8080::,2620:49:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:4a::,2620:4a::ffff:ffff:ffff:ffff:ffff,US
+2620:4a:8000::,2620:4a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4b::,2620:4b::ffff:ffff:ffff:ffff:ffff,US
+2620:4b:8000::,2620:4b:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:4c::,2620:4c:1:ffff:ffff:ffff:ffff:ffff,US
+2620:4c:8000::,2620:4c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4d::,2620:4d::ffff:ffff:ffff:ffff:ffff,US
+2620:4d:8000::,2620:4d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4e::,2620:4e::ffff:ffff:ffff:ffff:ffff,US
+2620:4e:8000::,2620:4e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:4f::,2620:4f::ffff:ffff:ffff:ffff:ffff,US
+2620:4f:8000::,2620:4f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:50::,2620:50:f:ffff:ffff:ffff:ffff:ffff,US
+2620:50:8080::,2620:50:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:51::,2620:51::ffff:ffff:ffff:ffff:ffff,US
+2620:51:8000::,2620:51:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:52::,2620:52:3:ffff:ffff:ffff:ffff:ffff,US
+2620:52:8000::,2620:52:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:53::,2620:53::ffff:ffff:ffff:ffff:ffff,US
+2620:53:8000::,2620:53:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:54::,2620:54::ffff:ffff:ffff:ffff:ffff,US
+2620:54:8000::,2620:54:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:55::,2620:55::ffff:ffff:ffff:ffff:ffff,US
+2620:55:8000::,2620:55:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:56::,2620:56::ffff:ffff:ffff:ffff:ffff,US
+2620:56:8000::,2620:56:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:57::,2620:57::ffff:ffff:ffff:ffff:ffff,US
+2620:57:8000::,2620:57:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:58::,2620:58:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:58:8800::,2620:58:8800:ffff:ffff:ffff:ffff:ffff,US
+2620:59::,2620:59::ffff:ffff:ffff:ffff:ffff,US
+2620:59:8000::,2620:59:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5a::,2620:5a::ffff:ffff:ffff:ffff:ffff,US
+2620:5a:8000::,2620:5a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5b::,2620:5b::ffff:ffff:ffff:ffff:ffff,US
+2620:5b:8000::,2620:5b:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:5c::,2620:5c::ffff:ffff:ffff:ffff:ffff,US
+2620:5c:8000::,2620:5c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5d::,2620:5d::ffff:ffff:ffff:ffff:ffff,US
+2620:5d:8000::,2620:5d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5e::,2620:5e::ffff:ffff:ffff:ffff:ffff,US
+2620:5e:8000::,2620:5e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:5f::,2620:5f::ffff:ffff:ffff:ffff:ffff,US
+2620:5f:8000::,2620:5f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:60::,2620:60::ffff:ffff:ffff:ffff:ffff,US
+2620:60:8000::,2620:60:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:61::,2620:61::ffff:ffff:ffff:ffff:ffff,CA
+2620:61:8000::,2620:61:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:62::,2620:62::ffff:ffff:ffff:ffff:ffff,US
+2620:62:8000::,2620:62:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:63::,2620:63::ffff:ffff:ffff:ffff:ffff,US
+2620:63:8000::,2620:63:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:64::,2620:64::ffff:ffff:ffff:ffff:ffff,US
+2620:64:8000::,2620:64:8000:ffff:ffff:ffff:ffff:ffff,TW
+2620:65::,2620:65::ffff:ffff:ffff:ffff:ffff,US
+2620:65:8000::,2620:65:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:66::,2620:66::ffff:ffff:ffff:ffff:ffff,CA
+2620:66:8000::,2620:66:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:67::,2620:67::ffff:ffff:ffff:ffff:ffff,US
+2620:67:8000::,2620:67:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:68::,2620:68::ffff:ffff:ffff:ffff:ffff,US
+2620:68:8000::,2620:68:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:69::,2620:69::ffff:ffff:ffff:ffff:ffff,US
+2620:69:8000::,2620:69:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6a::,2620:6a::ffff:ffff:ffff:ffff:ffff,US
+2620:6a:8000::,2620:6a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6b::,2620:6b::ffff:ffff:ffff:ffff:ffff,US
+2620:6b:8000::,2620:6b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6c::,2620:6c:3f:ffff:ffff:ffff:ffff:ffff,US
+2620:6c:8080::,2620:6c:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:6d:40::,2620:6d:40:ffff:ffff:ffff:ffff:ffff,US
+2620:6d:8000::,2620:6d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6e::,2620:6e::ffff:ffff:ffff:ffff:ffff,US
+2620:6e:8000::,2620:6e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:6f::,2620:6f::ffff:ffff:ffff:ffff:ffff,US
+2620:6f:8000::,2620:6f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:70::,2620:70::ffff:ffff:ffff:ffff:ffff,US
+2620:70:8000::,2620:70:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:71::,2620:71::ffff:ffff:ffff:ffff:ffff,US
+2620:71:8000::,2620:71:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:72::,2620:72::ffff:ffff:ffff:ffff:ffff,US
+2620:72:8000::,2620:72:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:73::,2620:73::ffff:ffff:ffff:ffff:ffff,US
+2620:73:8000::,2620:73:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:74::,2620:74:1f:ffff:ffff:ffff:ffff:ffff,US
+2620:74:8080::,2620:74:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:75::,2620:75::ffff:ffff:ffff:ffff:ffff,US
+2620:75:8000::,2620:75:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:76::,2620:76::ffff:ffff:ffff:ffff:ffff,US
+2620:76:8000::,2620:76:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:77::,2620:77::ffff:ffff:ffff:ffff:ffff,US
+2620:77:8000::,2620:77:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:78::,2620:78::ffff:ffff:ffff:ffff:ffff,US
+2620:78:8000::,2620:78:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:79::,2620:79::ffff:ffff:ffff:ffff:ffff,US
+2620:79:8000::,2620:79:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7a::,2620:7a::ffff:ffff:ffff:ffff:ffff,US
+2620:7a:8000::,2620:7a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7b::,2620:7b::ffff:ffff:ffff:ffff:ffff,US
+2620:7b:8000::,2620:7b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7b:e000::,2620:7b:e000:ffff:ffff:ffff:ffff:ffff,US
+2620:7c:4000::,2620:7c:4000:ffff:ffff:ffff:ffff:ffff,US
+2620:7c:a000::,2620:7c:a000:ffff:ffff:ffff:ffff:ffff,US
+2620:7d::,2620:7d::ffff:ffff:ffff:ffff:ffff,US
+2620:7d:8000::,2620:7d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:7e::,2620:7e:f:ffff:ffff:ffff:ffff:ffff,US
+2620:7e:60c0::,2620:7e:60c0:ffff:ffff:ffff:ffff:ffff,US
+2620:7e:c080::,2620:7e:c080:ffff:ffff:ffff:ffff:ffff,US
+2620:7f:2040::,2620:7f:2040:ffff:ffff:ffff:ffff:ffff,US
+2620:7f:8000::,2620:7f:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:80::,2620:80::ffff:ffff:ffff:ffff:ffff,US
+2620:80:8000::,2620:80:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:81::,2620:81::ffff:ffff:ffff:ffff:ffff,US
+2620:81:8000::,2620:81:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:82::,2620:82::ffff:ffff:ffff:ffff:ffff,US
+2620:82:8000::,2620:82:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:83::,2620:83::ffff:ffff:ffff:ffff:ffff,US
+2620:83:8000::,2620:83:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:84::,2620:84:1:ffff:ffff:ffff:ffff:ffff,US
+2620:84:8000::,2620:84:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:85::,2620:85::ffff:ffff:ffff:ffff:ffff,US
+2620:85:8000::,2620:85:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:86::,2620:86::ffff:ffff:ffff:ffff:ffff,US
+2620:86:8000::,2620:86:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:87::,2620:87::ffff:ffff:ffff:ffff:ffff,US
+2620:87:8000::,2620:87:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:88::,2620:88::ffff:ffff:ffff:ffff:ffff,US
+2620:88:8000::,2620:88:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:89::,2620:89::ffff:ffff:ffff:ffff:ffff,US
+2620:89:8000::,2620:89:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8a::,2620:8a::ffff:ffff:ffff:ffff:ffff,US
+2620:8a:8000::,2620:8a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8b::,2620:8b::ffff:ffff:ffff:ffff:ffff,US
+2620:8b:8000::,2620:8b:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:8c::,2620:8c::ffff:ffff:ffff:ffff:ffff,US
+2620:8c:8000::,2620:8c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8d::,2620:8d::ffff:ffff:ffff:ffff:ffff,US
+2620:8d:8000::,2620:8d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8e::,2620:8e::ffff:ffff:ffff:ffff:ffff,US
+2620:8e:8000::,2620:8e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:8f::,2620:8f::ffff:ffff:ffff:ffff:ffff,US
+2620:8f:8000::,2620:8f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:90::,2620:90::ffff:ffff:ffff:ffff:ffff,CA
+2620:90:8000::,2620:90:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:91::,2620:91::ffff:ffff:ffff:ffff:ffff,US
+2620:91:8000::,2620:91:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:92::,2620:92:f:ffff:ffff:ffff:ffff:ffff,US
+2620:92:8000::,2620:92:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:93::,2620:93::ffff:ffff:ffff:ffff:ffff,US
+2620:93:8000::,2620:93:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:94::,2620:94::ffff:ffff:ffff:ffff:ffff,US
+2620:94:8000::,2620:94:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:95::,2620:95::ffff:ffff:ffff:ffff:ffff,US
+2620:95:8000::,2620:95:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:96::,2620:96::ffff:ffff:ffff:ffff:ffff,US
+2620:96:8000::,2620:96:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:97::,2620:97::ffff:ffff:ffff:ffff:ffff,US
+2620:97:8000::,2620:97:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:98::,2620:98::ffff:ffff:ffff:ffff:ffff,US
+2620:98:8000::,2620:98:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:99::,2620:99::ffff:ffff:ffff:ffff:ffff,US
+2620:99:8000::,2620:99:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9a::,2620:9a::ffff:ffff:ffff:ffff:ffff,CA
+2620:9a:8000::,2620:9a:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9b::,2620:9b::ffff:ffff:ffff:ffff:ffff,US
+2620:9b:8000::,2620:9b:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9c::,2620:9c::ffff:ffff:ffff:ffff:ffff,US
+2620:9c:8000::,2620:9c:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9d::,2620:9d::ffff:ffff:ffff:ffff:ffff,US
+2620:9d:8000::,2620:9d:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9e::,2620:9e::ffff:ffff:ffff:ffff:ffff,US
+2620:9e:8000::,2620:9e:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:9f::,2620:9f:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:9f:8000::,2620:9f:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a0::,2620:a0::ffff:ffff:ffff:ffff:ffff,US
+2620:a0:8000::,2620:a0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a1::,2620:a1::ffff:ffff:ffff:ffff:ffff,US
+2620:a1:8000::,2620:a1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a2::,2620:a2::ffff:ffff:ffff:ffff:ffff,US
+2620:a2:8000::,2620:a2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a3::,2620:a3::ffff:ffff:ffff:ffff:ffff,US
+2620:a3:8000::,2620:a3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a4::,2620:a4:f:ffff:ffff:ffff:ffff:ffff,US
+2620:a4:8080::,2620:a4:8080:ffff:ffff:ffff:ffff:ffff,US
+2620:a5::,2620:a5::ffff:ffff:ffff:ffff:ffff,US
+2620:a5:8000::,2620:a5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a6::,2620:a6::ffff:ffff:ffff:ffff:ffff,US
+2620:a6:8000::,2620:a6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a7::,2620:a7::ffff:ffff:ffff:ffff:ffff,US
+2620:a7:8000::,2620:a7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a8::,2620:a8::ffff:ffff:ffff:ffff:ffff,US
+2620:a8:8000::,2620:a8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:a9::,2620:a9::ffff:ffff:ffff:ffff:ffff,US
+2620:a9:8000::,2620:a9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:aa::,2620:aa::ffff:ffff:ffff:ffff:ffff,US
+2620:aa:8000::,2620:aa:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ab::,2620:ab::ffff:ffff:ffff:ffff:ffff,US
+2620:ab:8000::,2620:ab:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ac::,2620:ac::ffff:ffff:ffff:ffff:ffff,US
+2620:ac:8000::,2620:ac:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ad::,2620:ad::ffff:ffff:ffff:ffff:ffff,US
+2620:ad:8000::,2620:ad:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ae::,2620:ae::ffff:ffff:ffff:ffff:ffff,CA
+2620:ae:8000::,2620:ae:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:af::,2620:af::ffff:ffff:ffff:ffff:ffff,US
+2620:af:8000::,2620:af:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b0::,2620:b0::ffff:ffff:ffff:ffff:ffff,CA
+2620:b0:8000::,2620:b0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b1::,2620:b1::ffff:ffff:ffff:ffff:ffff,US
+2620:b1:8000::,2620:b1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b2::,2620:b2::ffff:ffff:ffff:ffff:ffff,US
+2620:b2:8000::,2620:b2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b3::,2620:b3::ffff:ffff:ffff:ffff:ffff,US
+2620:b3:8000::,2620:b3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b4::,2620:b4::ffff:ffff:ffff:ffff:ffff,US
+2620:b4:8000::,2620:b4:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:b5::,2620:b5::ffff:ffff:ffff:ffff:ffff,US
+2620:b5:8000::,2620:b5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b6::,2620:b6::ffff:ffff:ffff:ffff:ffff,US
+2620:b6:8000::,2620:b6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b7::,2620:b7::ffff:ffff:ffff:ffff:ffff,US
+2620:b7:8000::,2620:b7:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:b8::,2620:b8::ffff:ffff:ffff:ffff:ffff,US
+2620:b8:8000::,2620:b8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:b9::,2620:b9::ffff:ffff:ffff:ffff:ffff,US
+2620:b9:8000::,2620:b9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ba::,2620:ba::ffff:ffff:ffff:ffff:ffff,US
+2620:ba:8000::,2620:ba:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bb::,2620:bb::ffff:ffff:ffff:ffff:ffff,US
+2620:bb:8000::,2620:bb:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bc::,2620:bc::ffff:ffff:ffff:ffff:ffff,US
+2620:bc:8000::,2620:bc:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bd::,2620:bd::ffff:ffff:ffff:ffff:ffff,CA
+2620:bd:8000::,2620:bd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:be::,2620:be::ffff:ffff:ffff:ffff:ffff,US
+2620:be:8000::,2620:be:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:bf::,2620:bf::ffff:ffff:ffff:ffff:ffff,US
+2620:bf:8000::,2620:bf:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c0::,2620:c0::ffff:ffff:ffff:ffff:ffff,US
+2620:c0:8000::,2620:c0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c1::,2620:c1::ffff:ffff:ffff:ffff:ffff,US
+2620:c1:8000::,2620:c1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c2::,2620:c2::ffff:ffff:ffff:ffff:ffff,CA
+2620:c2:8000::,2620:c2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c3::,2620:c3::ffff:ffff:ffff:ffff:ffff,US
+2620:c3:8000::,2620:c3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c4::,2620:c4::ffff:ffff:ffff:ffff:ffff,US
+2620:c4:8000::,2620:c4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c5::,2620:c5::ffff:ffff:ffff:ffff:ffff,US
+2620:c5:8000::,2620:c5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c6::,2620:c6::ffff:ffff:ffff:ffff:ffff,US
+2620:c6:8000::,2620:c6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c7::,2620:c7::ffff:ffff:ffff:ffff:ffff,US
+2620:c7:8000::,2620:c7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c8::,2620:c8::ffff:ffff:ffff:ffff:ffff,US
+2620:c8:8000::,2620:c8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:c9::,2620:c9::ffff:ffff:ffff:ffff:ffff,US
+2620:c9:8000::,2620:c9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ca::,2620:ca::ffff:ffff:ffff:ffff:ffff,US
+2620:ca:8000::,2620:ca:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:cb::,2620:cb::ffff:ffff:ffff:ffff:ffff,US
+2620:cb:8000::,2620:cb:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:cc::,2620:cc::ffff:ffff:ffff:ffff:ffff,US
+2620:cc:8000::,2620:cc:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:cd::,2620:cd::ffff:ffff:ffff:ffff:ffff,US
+2620:cd:8000::,2620:cd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ce::,2620:ce::ffff:ffff:ffff:ffff:ffff,US
+2620:ce:8000::,2620:ce:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:cf::,2620:cf::ffff:ffff:ffff:ffff:ffff,US
+2620:cf:8000::,2620:cf:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d0::,2620:d0::ffff:ffff:ffff:ffff:ffff,US
+2620:d0:8000::,2620:d0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d1::,2620:d1::ffff:ffff:ffff:ffff:ffff,US
+2620:d1:8000::,2620:d1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d2::,2620:d2::ffff:ffff:ffff:ffff:ffff,US
+2620:d2:8000::,2620:d2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d3::,2620:d3::ffff:ffff:ffff:ffff:ffff,US
+2620:d3:8000::,2620:d3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d4::,2620:d4::ffff:ffff:ffff:ffff:ffff,US
+2620:d4:8000::,2620:d4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d5::,2620:d5::ffff:ffff:ffff:ffff:ffff,US
+2620:d5:8000::,2620:d5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d6::,2620:d6::ffff:ffff:ffff:ffff:ffff,US
+2620:d6:8000::,2620:d6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d7::,2620:d7::ffff:ffff:ffff:ffff:ffff,US
+2620:d7:8000::,2620:d7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d8::,2620:d8::ffff:ffff:ffff:ffff:ffff,US
+2620:d8:8000::,2620:d8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:d9::,2620:d9::ffff:ffff:ffff:ffff:ffff,US
+2620:d9:8000::,2620:d9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:da::,2620:da::ffff:ffff:ffff:ffff:ffff,US
+2620:da:8000::,2620:da:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:db::,2620:db::ffff:ffff:ffff:ffff:ffff,US
+2620:db:8000::,2620:db:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:dc::,2620:dc::ffff:ffff:ffff:ffff:ffff,US
+2620:dc:8::,2620:dc:8:ffff:ffff:ffff:ffff:ffff,US
+2620:dc:8000::,2620:dc:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:dd::,2620:dd::ffff:ffff:ffff:ffff:ffff,CA
+2620:dd:8000::,2620:dd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:de::,2620:de::ffff:ffff:ffff:ffff:ffff,US
+2620:de:8000::,2620:de:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:df::,2620:df::ffff:ffff:ffff:ffff:ffff,US
+2620:df:8000::,2620:df:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e0::,2620:e0::ffff:ffff:ffff:ffff:ffff,US
+2620:e0:8000::,2620:e0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e1::,2620:e1::ffff:ffff:ffff:ffff:ffff,US
+2620:e1:8000::,2620:e1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e2::,2620:e2::ffff:ffff:ffff:ffff:ffff,US
+2620:e2:8000::,2620:e2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e3::,2620:e3::ffff:ffff:ffff:ffff:ffff,US
+2620:e3:8000::,2620:e3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e4::,2620:e4::ffff:ffff:ffff:ffff:ffff,US
+2620:e4:8000::,2620:e4:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e5::,2620:e5::ffff:ffff:ffff:ffff:ffff,US
+2620:e5:8000::,2620:e5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e6::,2620:e6::ffff:ffff:ffff:ffff:ffff,US
+2620:e6:8000::,2620:e6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e7::,2620:e7::ffff:ffff:ffff:ffff:ffff,US
+2620:e7:8000::,2620:e7:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:e8::,2620:e8::ffff:ffff:ffff:ffff:ffff,US
+2620:e8:8000::,2620:e8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:e9::,2620:e9::ffff:ffff:ffff:ffff:ffff,US
+2620:e9:8000::,2620:e9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ea::,2620:ea:f:ffff:ffff:ffff:ffff:ffff,US
+2620:ea:8000::,2620:ea:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:eb::,2620:eb::ffff:ffff:ffff:ffff:ffff,US
+2620:eb:8000::,2620:eb:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ec::,2620:ec::ffff:ffff:ffff:ffff:ffff,US
+2620:ec:8000::,2620:ec:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ed::,2620:ed::ffff:ffff:ffff:ffff:ffff,US
+2620:ed:8000::,2620:ed:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ee::,2620:ee::ffff:ffff:ffff:ffff:ffff,US
+2620:ee:8000::,2620:ee:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ef::,2620:ef::ffff:ffff:ffff:ffff:ffff,US
+2620:ef:8000::,2620:ef:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f0::,2620:f0::ffff:ffff:ffff:ffff:ffff,US
+2620:f0:8000::,2620:f0:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f1::,2620:f1::ffff:ffff:ffff:ffff:ffff,US
+2620:f1:8000::,2620:f1:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f2::,2620:f2::ffff:ffff:ffff:ffff:ffff,CA
+2620:f2:8000::,2620:f2:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f3::,2620:f3::ffff:ffff:ffff:ffff:ffff,US
+2620:f3:8000::,2620:f3:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f4::,2620:f4::ffff:ffff:ffff:ffff:ffff,US
+2620:f4:8000::,2620:f4:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:f5::,2620:f5::ffff:ffff:ffff:ffff:ffff,US
+2620:f5:8000::,2620:f5:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f6::,2620:f6::ffff:ffff:ffff:ffff:ffff,CA
+2620:f6:8000::,2620:f6:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f7::,2620:f7::ffff:ffff:ffff:ffff:ffff,US
+2620:f7:8000::,2620:f7:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f8::,2620:f8::ffff:ffff:ffff:ffff:ffff,US
+2620:f8:8000::,2620:f8:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:f9::,2620:f9:f:ffff:ffff:ffff:ffff:ffff,US
+2620:f9:8000::,2620:f9:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fa::,2620:fa::ffff:ffff:ffff:ffff:ffff,US
+2620:fa:8000::,2620:fa:8000:ffff:ffff:ffff:ffff:ffff,CA
+2620:fb::,2620:fb::ffff:ffff:ffff:ffff:ffff,US
+2620:fb:8000::,2620:fb:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fc::,2620:fc::ffff:ffff:ffff:ffff:ffff,CA
+2620:fc:8000::,2620:fc:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fd::,2620:fd::ffff:ffff:ffff:ffff:ffff,CA
+2620:fd:8000::,2620:fd:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:fe::,2620:fe:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:fe:8000::,2620:fe:8000:ffff:ffff:ffff:ffff:ffff,US
+2620:ff::,2620:ff::ffff:ffff:ffff:ffff:ffff,US
+2620:100::,2620:100:f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:1000::,2620:100:1001:ffff:ffff:ffff:ffff:ffff,US
+2620:100:3000::,2620:100:3007:ffff:ffff:ffff:ffff:ffff,US
+2620:100:4000::,2620:100:403f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:5000::,2620:100:5007:ffff:ffff:ffff:ffff:ffff,US
+2620:100:6000::,2620:100:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:7000::,2620:100:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:8000::,2620:100:8003:ffff:ffff:ffff:ffff:ffff,US
+2620:100:9000::,2620:100:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:a000::,2620:100:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:c000::,2620:100:c03f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:d000::,2620:100:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:e000::,2620:100:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:100:f000::,2620:100:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:101::,2620:101:3:ffff:ffff:ffff:ffff:ffff,US
+2620:101:1000::,2620:101:103f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:2000::,2620:101:201f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:3000::,2620:101:303f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:4000::,2620:101:403f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:5000::,2620:101:503f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:6000::,2620:101:6001:ffff:ffff:ffff:ffff:ffff,US
+2620:101:7000::,2620:101:7001:ffff:ffff:ffff:ffff:ffff,US
+2620:101:8000::,2620:101:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:101:9000::,2620:101:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:a000::,2620:101:a001:ffff:ffff:ffff:ffff:ffff,US
+2620:101:b000::,2620:101:b07f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:c000::,2620:101:c00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:101:d000::,2620:101:d007:ffff:ffff:ffff:ffff:ffff,US
+2620:101:e000::,2620:101:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:101:f000::,2620:101:f001:ffff:ffff:ffff:ffff:ffff,CA
+2620:102::,2620:102:f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:2000::,2620:102:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:3000::,2620:102:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:4000::,2620:102:403f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:5000::,2620:102:501f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:6000::,2620:102:6003:ffff:ffff:ffff:ffff:ffff,US
+2620:102:7000::,2620:102:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:8000::,2620:102:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:9000::,2620:102:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:102:a000::,2620:102:a01f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:b000::,2620:102:b001:ffff:ffff:ffff:ffff:ffff,US
+2620:102:c000::,2620:102:c007:ffff:ffff:ffff:ffff:ffff,US
+2620:102:d000::,2620:102:d07f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:e000::,2620:102:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:102:f000::,2620:102:f003:ffff:ffff:ffff:ffff:ffff,US
+2620:103::,2620:103:7:ffff:ffff:ffff:ffff:ffff,US
+2620:103:1000::,2620:103:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:2000::,2620:103:200f:ffff:ffff:ffff:ffff:ffff,CA
+2620:103:3000::,2620:103:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:4000::,2620:103:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:5000::,2620:103:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:6000::,2620:103:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:7000::,2620:103:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:8000::,2620:103:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:9000::,2620:103:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:a000::,2620:103:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:b000::,2620:103:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:c000::,2620:103:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:d000::,2620:103:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:103:e000::,2620:103:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:103:f000::,2620:103:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:104::,2620:104:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:1000::,2620:104:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:2000::,2620:104:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:3000::,2620:104:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:4000::,2620:104:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:5000::,2620:104:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:6000::,2620:104:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:7000::,2620:104:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:8000::,2620:104:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:9000::,2620:104:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:a000::,2620:104:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:b000::,2620:104:b01f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:c000::,2620:104:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:104:d000::,2620:104:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:e000::,2620:104:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:104:f000::,2620:104:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:105::,2620:105:f:ffff:ffff:ffff:ffff:ffff,CA
+2620:105:1000::,2620:105:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:2000::,2620:105:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:3000::,2620:105:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:4000::,2620:105:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:5000::,2620:105:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:6000::,2620:105:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:7000::,2620:105:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:8000::,2620:105:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:9000::,2620:105:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:a000::,2620:105:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:b000::,2620:105:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:c000::,2620:105:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:105:d000::,2620:105:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:e000::,2620:105:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:105:f000::,2620:105:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106::,2620:106:f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:1000::,2620:106:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:2000::,2620:106:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:3000::,2620:106:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:4000::,2620:106:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:5000::,2620:106:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:6000::,2620:106:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:7000::,2620:106:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:8000::,2620:106:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:9000::,2620:106:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:a000::,2620:106:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:b000::,2620:106:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:c000::,2620:106:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:d000::,2620:106:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:106:e000::,2620:106:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:106:f000::,2620:106:f00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:107::,2620:107:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:1000::,2620:107:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:2000::,2620:107:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:3000::,2620:107:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:4000::,2620:107:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:5000::,2620:107:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:6000::,2620:107:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:7000::,2620:107:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:8000::,2620:107:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:9000::,2620:107:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:a000::,2620:107:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:c000::,2620:107:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:d000::,2620:107:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:107:e000::,2620:107:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:107:f000::,2620:107:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108::,2620:108:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:1000::,2620:108:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:2000::,2620:108:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:3000::,2620:108:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:4000::,2620:108:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:5000::,2620:108:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:6000::,2620:108:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:7000::,2620:108:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:8000::,2620:108:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:9000::,2620:108:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:a000::,2620:108:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:b000::,2620:108:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:c000::,2620:108:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:108:d000::,2620:108:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:e000::,2620:108:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:108:f000::,2620:108:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109::,2620:109:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:1000::,2620:109:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:2000::,2620:109:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:3000::,2620:109:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:4000::,2620:109:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:5000::,2620:109:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:6000::,2620:109:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:7000::,2620:109:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:8000::,2620:109:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:9000::,2620:109:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:a000::,2620:109:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:b000::,2620:109:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:c000::,2620:109:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:d000::,2620:109:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:109:e000::,2620:109:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:109:f000::,2620:109:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a::,2620:10a:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:1000::,2620:10a:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:2000::,2620:10a:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:3000::,2620:10a:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:4000::,2620:10a:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:5000::,2620:10a:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:6000::,2620:10a:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:7000::,2620:10a:700f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10a:8000::,2620:10a:800f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10a:9000::,2620:10a:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:a000::,2620:10a:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:b000::,2620:10a:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:c000::,2620:10a:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:d000::,2620:10a:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:e000::,2620:10a:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10a:f000::,2620:10a:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b::,2620:10b:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:1000::,2620:10b:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:2000::,2620:10b:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:3000::,2620:10b:30ff:ffff:ffff:ffff:ffff:ffff,CA
+2620:10b:4000::,2620:10b:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:5000::,2620:10b:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:6000::,2620:10b:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:7000::,2620:10b:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:8000::,2620:10b:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:9000::,2620:10b:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:a000::,2620:10b:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:b000::,2620:10b:b00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10b:c000::,2620:10b:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:d000::,2620:10b:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:e000::,2620:10b:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10b:f000::,2620:10b:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c::,2620:10c:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:1000::,2620:10c:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:2000::,2620:10c:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:3000::,2620:10c:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:4000::,2620:10c:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:5000::,2620:10c:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:6000::,2620:10c:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:7000::,2620:10c:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:8000::,2620:10c:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:9000::,2620:10c:90ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:a000::,2620:10c:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:b000::,2620:10c:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:c000::,2620:10c:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:d000::,2620:10c:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:e000::,2620:10c:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10c:f000::,2620:10c:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d::,2620:10d:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:1000::,2620:10d:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:2000::,2620:10d:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:3000::,2620:10d:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:4000::,2620:10d:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:5000::,2620:10d:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:6000::,2620:10d:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:7000::,2620:10d:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:8000::,2620:10d:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:9000::,2620:10d:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:a000::,2620:10d:a0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:b000::,2620:10d:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:c000::,2620:10d:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10d:d000::,2620:10d:d00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10d:e000::,2620:10d:e00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:10d:f000::,2620:10d:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e::,2620:10e:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:1000::,2620:10e:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:2000::,2620:10e:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:3000::,2620:10e:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:4000::,2620:10e:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:5000::,2620:10e:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:6000::,2620:10e:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:7000::,2620:10e:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:8000::,2620:10e:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:9000::,2620:10e:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:a000::,2620:10e:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:b000::,2620:10e:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:c000::,2620:10e:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:d000::,2620:10e:d00f:ffff:ffff:ffff:ffff:ffff,BL
+2620:10e:e000::,2620:10e:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10e:f000::,2620:10e:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f::,2620:10f:f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:1000::,2620:10f:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:2000::,2620:10f:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:3000::,2620:10f:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:4000::,2620:10f:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:5000::,2620:10f:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:6000::,2620:10f:60ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:7000::,2620:10f:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:8000::,2620:10f:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:9000::,2620:10f:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:a000::,2620:10f:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:b000::,2620:10f:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:c000::,2620:10f:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:d000::,2620:10f:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:e000::,2620:10f:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:10f:f000::,2620:10f:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110::,2620:110:f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:1000::,2620:110:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:2000::,2620:110:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:110:3000::,2620:110:30ff:ffff:ffff:ffff:ffff:ffff,US
+2620:110:4000::,2620:110:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:5000::,2620:110:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:6000::,2620:110:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:7000::,2620:110:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:8000::,2620:110:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:110:9000::,2620:110:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:a000::,2620:110:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:b000::,2620:110:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:c000::,2620:110:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:d000::,2620:110:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:e000::,2620:110:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:110:f000::,2620:110:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111::,2620:111:ff:ffff:ffff:ffff:ffff:ffff,US
+2620:111:1000::,2620:111:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:2000::,2620:111:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:3000::,2620:111:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:4000::,2620:111:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:5000::,2620:111:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:6000::,2620:111:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:7000::,2620:111:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:8000::,2620:111:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:9000::,2620:111:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:a000::,2620:111:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:b000::,2620:111:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:c000::,2620:111:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:111:d000::,2620:111:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:111:e000::,2620:111:e00f:ffff:ffff:ffff:ffff:ffff,CA
+2620:111:f000::,2620:111:f0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112::,2620:112:f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:1000::,2620:112:107f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:2000::,2620:112:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:3000::,2620:112:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:4000::,2620:112:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:5000::,2620:112:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:6000::,2620:112:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:7000::,2620:112:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:8000::,2620:112:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112:9000::,2620:112:900f:ffff:ffff:ffff:ffff:ffff,CA
+2620:112:a000::,2620:112:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:b000::,2620:112:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112:c000::,2620:112:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:112:d000::,2620:112:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:e000::,2620:112:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:112:f000::,2620:112:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113::,2620:113:f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:1000::,2620:113:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:2000::,2620:113:200f:ffff:ffff:ffff:ffff:ffff,CA
+2620:113:3000::,2620:113:300f:ffff:ffff:ffff:ffff:ffff,CA
+2620:113:4000::,2620:113:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:5000::,2620:113:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:6000::,2620:113:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:7000::,2620:113:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:8000::,2620:113:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:113:9000::,2620:113:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:a000::,2620:113:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:b000::,2620:113:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:c000::,2620:113:c0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:113:d000::,2620:113:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:e000::,2620:113:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:113:f000::,2620:113:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114::,2620:114:f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:1000::,2620:114:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:2000::,2620:114:20ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:3000::,2620:114:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:4000::,2620:114:400f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:5000::,2620:114:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:6000::,2620:114:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:7000::,2620:114:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:8000::,2620:114:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:9000::,2620:114:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:a000::,2620:114:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:b000::,2620:114:b0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:c000::,2620:114:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:d000::,2620:114:d00f:ffff:ffff:ffff:ffff:ffff,US
+2620:114:e000::,2620:114:e0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:114:f000::,2620:114:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115::,2620:115:f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:1000::,2620:115:100f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:2000::,2620:115:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:3000::,2620:115:300f:ffff:ffff:ffff:ffff:ffff,KY
+2620:115:4000::,2620:115:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:115:5000::,2620:115:500f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:6000::,2620:115:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:7000::,2620:115:70ff:ffff:ffff:ffff:ffff:ffff,US
+2620:115:8000::,2620:115:800f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:9000::,2620:115:900f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:a000::,2620:115:a00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:b000::,2620:115:b00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:c000::,2620:115:c00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:d000::,2620:115:d0ff:ffff:ffff:ffff:ffff:ffff,US
+2620:115:e000::,2620:115:e00f:ffff:ffff:ffff:ffff:ffff,US
+2620:115:f000::,2620:115:f00f:ffff:ffff:ffff:ffff:ffff,US
+2620:116::,2620:116:f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:1000::,2620:116:10ff:ffff:ffff:ffff:ffff:ffff,US
+2620:116:2000::,2620:116:200f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:3000::,2620:116:300f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:4000::,2620:116:40ff:ffff:ffff:ffff:ffff:ffff,US
+2620:116:5000::,2620:116:50ff:ffff:ffff:ffff:ffff:ffff,US
+2620:116:6000::,2620:116:600f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:7000::,2620:116:700f:ffff:ffff:ffff:ffff:ffff,US
+2620:116:8000::,2620:116:80ff:ffff:ffff:ffff:ffff:ffff,US
+2620:140::,2620:140:3ff:ffff:ffff:ffff:ffff:ffff,US
+2620:141::,2620:141:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:143::,2620:143:7ff:ffff:ffff:ffff:ffff:ffff,US
+2620:144::,2620:145:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:146::,2620:146:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:147::,2620:147:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:148::,2620:148:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:149::,2620:149:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14a::,2620:14a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14b::,2620:14b:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14c::,2620:14c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14d::,2620:14d:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14e::,2620:14e:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:14f::,2620:14f:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:150::,2620:150:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:151::,2620:151:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:152::,2620:152:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:153::,2620:153:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:154::,2620:154:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:155::,2620:155:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:156::,2620:156:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:157::,2620:157:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:158::,2620:158:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:159::,2620:159:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15a::,2620:15a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15b::,2620:15b:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15c::,2620:15c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15d::,2620:15e:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:15f::,2620:15f:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:160::,2620:160:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:162::,2620:162:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:163::,2620:163:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:164::,2620:164:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:165::,2620:165:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:166::,2620:166:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:167::,2620:167:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:168::,2620:169:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:16a::,2620:16a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:16b::,2620:16c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:16d::,2620:16f:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:170::,2620:170:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:171::,2620:171:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:172::,2620:172:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:173::,2620:173:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:174::,2620:174:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:175::,2620:175:fff:ffff:ffff:ffff:ffff:ffff,CA
+2620:176::,2620:177:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:178::,2620:178:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:179::,2620:179:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:17a::,2620:17a:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:17b::,2620:17b:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:17c::,2620:17c:fff:ffff:ffff:ffff:ffff:ffff,US
+2620:180::,2620:180:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:190::,2620:190:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1a0::,2620:1a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1b0::,2620:1b0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1c0::,2620:1c0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1d0::,2620:1d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1e0::,2620:1e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2620:1f0::,2620:1f0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2800:8::,2800:8:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:10::,2800:10:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2800:18::,2800:18:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:20::,2800:30:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:38::,2800:38:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:40::,2800:40:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:48::,2800:48:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:68::,2800:68:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:70::,2800:70:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:78::,2800:78:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:80::,2800:80:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:88::,2800:88:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:90::,2800:90:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2800:98::,2800:98:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2800:a0::,2800:af:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:e0::,2800:ef:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:f0::,2800:f0:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:100::,2800:100:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:110::,2800:110:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:120::,2800:120:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:130::,2800:130:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:140::,2800:140:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:150::,2800:150:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:160::,2800:160:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:170::,2800:170:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:180::,2800:180:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:190::,2800:190:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:1a0::,2800:1a0:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2800:1b0::,2800:1b0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:1c0::,2800:1c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:1d0::,2800:1d0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:1e0::,2800:1e0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:1f0::,2800:1f0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:200::,2800:200:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:220::,2800:220:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:230::,2800:230:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2800:240::,2800:240:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:250::,2800:250:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:260::,2800:26f:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:270::,2800:270:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:280::,2800:280:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2800:290::,2800:290:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:2a0::,2800:2a0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:2b0::,2800:2b0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:2d0::,2800:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:2e0::,2800:2e0:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:2f0::,2800:2f0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:300::,2800:300:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:310::,2800:310:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:320::,2800:320:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:330::,2800:330:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:340::,2800:340:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:350::,2800:350:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:360::,2800:360:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2800:370::,2800:370:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:380::,2800:381:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:390::,2800:390:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:3a0::,2800:3a0:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2800:3b0::,2800:3b0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:3c0::,2800:3c0:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2800:3d0::,2800:3d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:3e0::,2800:3e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:3f0::,2800:3f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:400::,2800:400:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:410::,2800:410:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2800:420::,2800:423:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:430::,2800:430:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:440::,2800:440:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:450::,2800:450:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:460::,2800:460:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:470::,2800:470:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2800:480::,2800:480:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:490::,2800:490:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:4b0::,2800:4b0:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:4c0::,2800:4c0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:4d0::,2800:4d0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:4e0::,2800:4e0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:4f0::,2800:4f0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:500::,2800:500:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:510::,2800:510:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:520::,2800:520:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2800:530::,2800:530:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:540::,2800:540:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:550::,2800:550:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:560::,2800:560:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:570::,2800:570:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2800:580::,2800:580:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:590::,2800:590:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:5a0::,2800:5a0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:5b0::,2800:5b0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:5c0::,2800:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:5d0::,2800:5d0:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:5e0::,2800:5e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:5f0::,2800:5f0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:600::,2800:600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:610::,2800:610:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:620::,2800:620:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:630::,2800:630:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:640::,2800:640:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:650::,2800:650:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:660::,2800:660:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:670::,2800:670:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:680::,2800:680:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:690::,2800:690:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:6a0::,2800:6a0:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2800:6b0::,2800:6b0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:6c0::,2800:6c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:6d0::,2800:6d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:6e0::,2800:6e0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:6f0::,2800:6f0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:700::,2800:700:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:800::,2800:800:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:810::,2800:810:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:820::,2800:820:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:830::,2800:831:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:840::,2800:840:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2800:850::,2800:850:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:860::,2800:860:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:870::,2800:870:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:880::,2800:883:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2800:890::,2800:890:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2800:8a0::,2800:8a0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:8b0::,2800:8b0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:8c0::,2800:8c0:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2800:8d0::,2800:8d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:8e0::,2800:8e0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:8f0::,2800:8f0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:900::,2800:900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:910::,2800:910:ffff:ffff:ffff:ffff:ffff:ffff,CU
+2800:920::,2800:920:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:930::,2800:930:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:940::,2800:940:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:950::,2800:950:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:960::,2800:960:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2800:970::,2800:970:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:980::,2800:980:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:990::,2800:990:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:9a0::,2800:9a7:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:9b0::,2800:9b0:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:9c0::,2800:9c0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:9d0::,2800:9d0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:9e0::,2800:9e0:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:9f0::,2800:9f0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:a00::,2800:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a10::,2800:a10:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a20::,2800:a20:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2800:a30::,2800:a30:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a40::,2800:a40:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a50::,2800:a50:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a60::,2800:a60:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:a70::,2800:a70:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:a80::,2800:a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a90::,2800:a90:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:aa0::,2800:aa0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:ab0::,2800:ab0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:ac0::,2800:ac0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:ad0::,2800:ad0:ffff:ffff:ffff:ffff:ffff:ffff,AW
+2800:ae0::,2800:ae0:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:af0::,2800:af0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:b00::,2800:b00:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2800:b10::,2800:b10:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2800:b20::,2800:b23:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2800:b30::,2800:b31:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:b40::,2800:b40:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:b60::,2800:b60:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:b70::,2800:b70:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2800:b80::,2800:b80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:b90::,2800:b90:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:ba0::,2800:ba0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:bb0::,2800:bbf:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:bc0::,2800:bc0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2800:bd0::,2800:bd0:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:be0::,2800:be0:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2800:bf0::,2800:bf0:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:c00::,2800:c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c10::,2800:c10:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:c20::,2800:c20:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2800:c30::,2800:c30:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c40::,2800:c40:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2800:c50::,2800:c50:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c70::,2800:c70:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2800:c80::,2800:c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:c90::,2800:c90:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2800:ca0::,2800:ca0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:cb0::,2800:cb0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:cc0::,2800:cc0:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2800:cd0::,2800:cd0:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2800:ce0::,2800:ce0:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2800:cf0::,2800:cf0:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d00::,2800:d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d10::,2800:d10:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d20::,2800:d20:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2800:1000::,2800:10ff:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:2000::,2800:2fff:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:a000::,2800:a000:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a008::,2800:a008:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a010::,2800:a010:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a018::,2800:a018:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a020::,2800:a020:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a028::,2800:a028:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a030::,2800:a030:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:a038::,2800:a038:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2800:b000::,2800:b000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2800:d300::,2800:d307:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2801::,2801::ffff:ffff:ffff:ffff:ffff,UY
+2801:0:10::,2801::10:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:20::,2801::20:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:30::,2801::30:ffff:ffff:ffff:ffff:ffff,HN
+2801:0:40::,2801::40:ffff:ffff:ffff:ffff:ffff,TT
+2801:0:50::,2801::50:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:60::,2801::63:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:70::,2801::70:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:80::,2801::80:ffff:ffff:ffff:ffff:ffff,DO
+2801:0:90::,2801::90:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:a0::,2801::a0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:b0::,2801::b7:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:c0::,2801::df:ffff:ffff:ffff:ffff:ffff,CR
+2801:0:100::,2801::100:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:110::,2801::110:ffff:ffff:ffff:ffff:ffff,GT
+2801:0:120::,2801::120:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:130::,2801::130:ffff:ffff:ffff:ffff:ffff,PY
+2801:0:140::,2801::140:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:150::,2801::150:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:160::,2801::160:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:170::,2801::170:ffff:ffff:ffff:ffff:ffff,BO
+2801:0:180::,2801::180:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:190::,2801::190:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:1a0::,2801::1a0:ffff:ffff:ffff:ffff:ffff,HN
+2801:0:1b0::,2801::1b0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:1c0::,2801::1c7:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:1d0::,2801::1d7:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:1e0::,2801::1e0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:1f0::,2801::1f0:ffff:ffff:ffff:ffff:ffff,PY
+2801:0:200::,2801::200:ffff:ffff:ffff:ffff:ffff,VE
+2801:0:210::,2801::210:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:220::,2801::22f:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:240::,2801::240:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:250::,2801::250:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:260::,2801::260:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:270::,2801::270:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:280::,2801::280:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:290::,2801::290:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:2a0::,2801::2a0:ffff:ffff:ffff:ffff:ffff,CR
+2801:0:2b0::,2801::2b0:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:2c0::,2801::2c0:ffff:ffff:ffff:ffff:ffff,HN
+2801:0:2d0::,2801::2d0:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:2e0::,2801::2e0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:2f0::,2801::2f0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:300::,2801::300:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:310::,2801::310:ffff:ffff:ffff:ffff:ffff,CW
+2801:0:320::,2801::320:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:330::,2801::330:ffff:ffff:ffff:ffff:ffff,HT
+2801:0:340::,2801::340:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:350::,2801::350:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:360::,2801::360:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:370::,2801::370:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:380::,2801::380:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:390::,2801::390:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3b0::,2801::3b0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3c0::,2801::3c0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3d0::,2801::3d0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:3e0::,2801::3e0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:3f0::,2801::3f0:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:400::,2801::400:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:410::,2801::410:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:420::,2801::420:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:440::,2801::440:ffff:ffff:ffff:ffff:ffff,AR
+2801:0:480::,2801::480:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:490::,2801::490:ffff:ffff:ffff:ffff:ffff,PA
+2801:0:4a0::,2801::4a0:ffff:ffff:ffff:ffff:ffff,CR
+2801:0:4c0::,2801::4c0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:4d0::,2801::4d0:ffff:ffff:ffff:ffff:ffff,EC
+2801:0:4e0::,2801::4e0:ffff:ffff:ffff:ffff:ffff,CL
+2801:0:4f0::,2801::4f0:ffff:ffff:ffff:ffff:ffff,CO
+2801:0:2000::,2801::2fff:ffff:ffff:ffff:ffff:ffff,UY
+2801:1::,2801:1:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2801:2::,2801:2:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2801:10::,2801:10:7:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:2000::,2801:10:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:4000::,2801:10:4000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:8000::,2801:10:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:10:c000::,2801:10:c000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11::,2801:11::ffff:ffff:ffff:ffff:ffff,AR
+2801:11:2000::,2801:11:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:11:4000::,2801:11:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11:8000::,2801:11:8000:ffff:ffff:ffff:ffff:ffff,CO
+2801:11:c000::,2801:11:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:12::,2801:12::ffff:ffff:ffff:ffff:ffff,PY
+2801:12:2000::,2801:12:2000:ffff:ffff:ffff:ffff:ffff,HN
+2801:12:4000::,2801:12:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:12:8000::,2801:12:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:12:c000::,2801:12:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:13::,2801:13::ffff:ffff:ffff:ffff:ffff,VE
+2801:13:4000::,2801:13:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:13:8000::,2801:13:8000:ffff:ffff:ffff:ffff:ffff,SV
+2801:13:c000::,2801:13:c000:ffff:ffff:ffff:ffff:ffff,TT
+2801:14::,2801:14::ffff:ffff:ffff:ffff:ffff,CO
+2801:14:2000::,2801:14:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:14:4000::,2801:14:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:14:c000::,2801:14:c000:ffff:ffff:ffff:ffff:ffff,BO
+2801:15::,2801:15::ffff:ffff:ffff:ffff:ffff,EC
+2801:15:4000::,2801:15:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:15:8000::,2801:15:8000:ffff:ffff:ffff:ffff:ffff,CR
+2801:15:c000::,2801:15:c000:ffff:ffff:ffff:ffff:ffff,GT
+2801:16::,2801:16::ffff:ffff:ffff:ffff:ffff,CW
+2801:16:2000::,2801:16:2000:ffff:ffff:ffff:ffff:ffff,HN
+2801:16:4000::,2801:16:4000:ffff:ffff:ffff:ffff:ffff,AR
+2801:16:8000::,2801:16:8000:ffff:ffff:ffff:ffff:ffff,CO
+2801:16:c000::,2801:16:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:17::,2801:17::ffff:ffff:ffff:ffff:ffff,CL
+2801:17:4000::,2801:17:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:17:8000::,2801:17:8000:ffff:ffff:ffff:ffff:ffff,CR
+2801:17:c000::,2801:17:c000:ffff:ffff:ffff:ffff:ffff,PA
+2801:18::,2801:18::ffff:ffff:ffff:ffff:ffff,CR
+2801:18:2000::,2801:18:2000:ffff:ffff:ffff:ffff:ffff,CO
+2801:18:4000::,2801:18:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:18:8000::,2801:18:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:18:c000::,2801:18:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:19::,2801:19::ffff:ffff:ffff:ffff:ffff,AR
+2801:19:2000::,2801:19:2000:ffff:ffff:ffff:ffff:ffff,CL
+2801:19:4000::,2801:19:4000:ffff:ffff:ffff:ffff:ffff,PY
+2801:19:8000::,2801:19:8000:ffff:ffff:ffff:ffff:ffff,EC
+2801:19:c000::,2801:19:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1a::,2801:1a::ffff:ffff:ffff:ffff:ffff,CO
+2801:1a:2000::,2801:1a:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1a:4000::,2801:1a:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1a:8000::,2801:1a:8000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1a:c000::,2801:1a:c000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1b::,2801:1b::ffff:ffff:ffff:ffff:ffff,CR
+2801:1b:4000::,2801:1b:4000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1b:8000::,2801:1b:8000:ffff:ffff:ffff:ffff:ffff,CL
+2801:1b:c000::,2801:1b:c000:ffff:ffff:ffff:ffff:ffff,PA
+2801:1c::,2801:1c::ffff:ffff:ffff:ffff:ffff,PY
+2801:1c:2000::,2801:1c:2000:ffff:ffff:ffff:ffff:ffff,PE
+2801:1c:4000::,2801:1c:4000:ffff:ffff:ffff:ffff:ffff,CO
+2801:1c:8000::,2801:1c:8000:ffff:ffff:ffff:ffff:ffff,EC
+2801:1c:c000::,2801:1c:c000:ffff:ffff:ffff:ffff:ffff,HN
+2801:1d::,2801:1d::ffff:ffff:ffff:ffff:ffff,PY
+2801:1d:4000::,2801:1d:4000:ffff:ffff:ffff:ffff:ffff,TT
+2801:1d:8000::,2801:1d:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1d:c000::,2801:1d:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e::,2801:1e::ffff:ffff:ffff:ffff:ffff,EC
+2801:1e:2000::,2801:1e:2000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e:4000::,2801:1e:4007:ffff:ffff:ffff:ffff:ffff,AR
+2801:1e:8000::,2801:1e:8000:ffff:ffff:ffff:ffff:ffff,CR
+2801:1e:c000::,2801:1e:c000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1f::,2801:1f::ffff:ffff:ffff:ffff:ffff,AR
+2801:1f:4000::,2801:1f:4000:ffff:ffff:ffff:ffff:ffff,CR
+2801:1f:8000::,2801:1f:8000:ffff:ffff:ffff:ffff:ffff,AR
+2801:1f:c000::,2801:1f:c000:ffff:ffff:ffff:ffff:ffff,CR
+2801:80::,2801:80::ffff:ffff:ffff:ffff:ffff,BR
+2801:80:10::,2801:80:10:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:20::,2801:80:30:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:40::,2801:80:40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:50::,2801:80:50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:60::,2801:80:60:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:70::,2801:80:70:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:80::,2801:80:80:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:90::,2801:80:90:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a0::,2801:80:a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:b0::,2801:80:b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:c0::,2801:80:c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:d0::,2801:80:d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:e0::,2801:80:e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:f0::,2801:80:f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:100::,2801:80:100:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:110::,2801:80:110:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:120::,2801:80:120:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:130::,2801:80:130:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:140::,2801:80:140:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:150::,2801:80:150:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:160::,2801:80:160:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:170::,2801:80:170:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:180::,2801:80:180:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:190::,2801:80:190:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1a0::,2801:80:1a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1b0::,2801:80:1b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1c0::,2801:80:1c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1d0::,2801:80:1d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1e0::,2801:80:1e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:1f0::,2801:80:1f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:200::,2801:80:200:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:210::,2801:80:210:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:220::,2801:80:220:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:230::,2801:80:230:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:240::,2801:80:240:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:250::,2801:80:250:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:260::,2801:80:260:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:270::,2801:80:270:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:280::,2801:80:280:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:290::,2801:80:290:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2a0::,2801:80:2a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2b0::,2801:80:2b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2c0::,2801:80:2c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2d0::,2801:80:2d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2e0::,2801:80:2e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:2f0::,2801:80:2f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:300::,2801:80:300:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:320::,2801:80:320:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:330::,2801:80:330:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:340::,2801:80:340:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:350::,2801:80:350:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:360::,2801:80:360:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:370::,2801:80:370:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:380::,2801:80:380:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:390::,2801:80:390:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3a0::,2801:80:3a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3b0::,2801:80:3b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3c0::,2801:80:3c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3d0::,2801:80:3d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3e0::,2801:80:3e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:3f0::,2801:80:3f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:400::,2801:80:400:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:410::,2801:80:410:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:420::,2801:80:420:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:430::,2801:80:430:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:440::,2801:80:440:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:450::,2801:80:450:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:460::,2801:80:460:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:470::,2801:80:470:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:480::,2801:80:480:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:490::,2801:80:490:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4a0::,2801:80:4a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4b0::,2801:80:4b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4c0::,2801:80:4c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4d0::,2801:80:4d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4e0::,2801:80:4e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:4f0::,2801:80:4f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:500::,2801:80:500:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:510::,2801:80:510:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:520::,2801:80:520:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:530::,2801:80:530:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:540::,2801:80:540:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:550::,2801:80:550:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:560::,2801:80:560:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:570::,2801:80:570:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:580::,2801:80:580:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:590::,2801:80:590:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5a0::,2801:80:5a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5b0::,2801:80:5b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5c0::,2801:80:5c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5d0::,2801:80:5d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5e0::,2801:80:5e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:5f0::,2801:80:5f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:600::,2801:80:600:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:610::,2801:80:610:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:620::,2801:80:620:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:630::,2801:80:630:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:640::,2801:80:640:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:650::,2801:80:650:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:660::,2801:80:660:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:670::,2801:80:670:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:680::,2801:80:680:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:690::,2801:80:690:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6a0::,2801:80:6a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6b0::,2801:80:6b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6c0::,2801:80:6c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6d0::,2801:80:6d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:6e0::,2801:80:6ef:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:700::,2801:80:700:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:710::,2801:80:710:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:720::,2801:80:720:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:730::,2801:80:730:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:740::,2801:80:740:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:750::,2801:80:750:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:760::,2801:80:760:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:770::,2801:80:770:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:780::,2801:80:780:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:790::,2801:80:790:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7a0::,2801:80:7a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7b0::,2801:80:7b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7c0::,2801:80:7c3:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7d0::,2801:80:7d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7e0::,2801:80:7e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:7f0::,2801:80:7f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:800::,2801:80:800:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:810::,2801:80:810:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:820::,2801:80:820:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:830::,2801:80:830:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:840::,2801:80:840:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:850::,2801:80:850:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:860::,2801:80:860:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:870::,2801:80:870:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:880::,2801:80:880:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:890::,2801:80:890:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8a0::,2801:80:8a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8b0::,2801:80:8b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8c0::,2801:80:8c1:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8d0::,2801:80:8d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8e0::,2801:80:8e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:8f0::,2801:80:8f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:900::,2801:80:900:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:910::,2801:80:910:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:920::,2801:80:920:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:930::,2801:80:930:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:940::,2801:80:940:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:950::,2801:80:950:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:960::,2801:80:960:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:970::,2801:80:970:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:980::,2801:80:980:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:990::,2801:80:990:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9a0::,2801:80:9a0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9b0::,2801:80:9b0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9c0::,2801:80:9c0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9d0::,2801:80:9d0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9e0::,2801:80:9e0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:9f0::,2801:80:9f0:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a00::,2801:80:a00:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a10::,2801:80:a10:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a20::,2801:80:a20:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a30::,2801:80:a30:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a40::,2801:80:a40:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a50::,2801:80:a50:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a60::,2801:80:a61:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a70::,2801:80:a70:ffff:ffff:ffff:ffff:ffff,BR
+2801:80:a80::,2801:80:a8f:ffff:ffff:ffff:ffff:ffff,BR
+2801:82::,2801:82:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:84::,2801:84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:86::,2801:86:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:88::,2801:88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:8a::,2801:8a:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:8c::,2801:8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:8e::,2801:8e:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:90::,2801:90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:92::,2801:92:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:94::,2801:94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:96::,2801:96:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:98::,2801:98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:9a::,2801:9a:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:9c::,2801:9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:9e::,2801:9e:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a0::,2801:a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a2::,2801:a2:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a4::,2801:a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a6::,2801:a6:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:a8::,2801:a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:aa::,2801:aa:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:ac::,2801:ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:ae::,2801:ae:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b0::,2801:b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b2::,2801:b2:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b4::,2801:b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b6::,2801:b6:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:b8::,2801:b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:ba::,2801:ba:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:bc::,2801:bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:be::,2801:be:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2801:c0::,2801:c0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4::,2801:c4::ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:10::,2801:c4:10:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:20::,2801:c4:20:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:30::,2801:c4:30:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:40::,2801:c4:40:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:50::,2801:c4:50:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:60::,2801:c4:60:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:80::,2801:c4:80:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:90::,2801:c4:90:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:a0::,2801:c4:a0:ffff:ffff:ffff:ffff:ffff,MX
+2801:c4:b0::,2801:c4:b3:ffff:ffff:ffff:ffff:ffff,MX
+2801:d0::,2801:d0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2801:f0::,2801:f0::ffff:ffff:ffff:ffff:ffff,MX
+2801:f0:16::,2801:f0:16:ffff:ffff:ffff:ffff:ffff,MX
+2801:f0:20::,2801:f0:20:ffff:ffff:ffff:ffff:ffff,MX
+2801:f0:28::,2801:f0:28:ffff:ffff:ffff:ffff:ffff,MX
+2801:100::,2801:100:ff:ffff:ffff:ffff:ffff:ffff,AR
+2801:110::,2801:110:1fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:120::,2801:120:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:130::,2801:130:fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:140::,2801:140:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2801:150::,2801:150:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2801:160::,2801:160:ff:ffff:ffff:ffff:ffff:ffff,CO
+2801:180::,2801:180:f:ffff:ffff:ffff:ffff:ffff,PA
+2801:190::,2801:190:fff:ffff:ffff:ffff:ffff:ffff,CO
+2801:1a0::,2801:1a0:3f:ffff:ffff:ffff:ffff:ffff,CO
+2801:1c0::,2801:1c0:1ff:ffff:ffff:ffff:ffff:ffff,AR
+2801:1d0::,2801:1d0:f:ffff:ffff:ffff:ffff:ffff,CO
+2801:1e0::,2801:1e0:7f:ffff:ffff:ffff:ffff:ffff,AR
+2802::,2802:3:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803::,2803::ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:80::,2803:80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:100::,2803:100:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:180::,2803:180:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:200::,2803:200:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:280::,2803:280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:300::,2803:300:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:400::,2803:400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:480::,2803:480:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:500::,2803:500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:600::,2803:600:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:680::,2803:680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:700::,2803:700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:800::,2803:800:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:880::,2803:880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:900::,2803:900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a00::,2803:a00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a80::,2803:a80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:b00::,2803:b00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:c00::,2803:c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c80::,2803:c80:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:d00::,2803:d00:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:e00::,2803:e00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:e80::,2803:e80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:f00::,2803:f00:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:1000::,2803:1000:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:1080::,2803:1080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1100::,2803:1100:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:1180::,2803:1180:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:1200::,2803:1200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:1280::,2803:1280:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:1300::,2803:1300:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:1400::,2803:1400:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:1480::,2803:1480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1500::,2803:1500:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2803:1600::,2803:1600:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2803:1680::,2803:1680:ffff:ffff:ffff:ffff:ffff:ffff,GF
+2803:1700::,2803:1700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1800::,2803:1800:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:1880::,2803:1880:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:1900::,2803:1900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1a00::,2803:1a00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:1a80::,2803:1a80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:1b00::,2803:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1c00::,2803:1c00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:1c80::,2803:1c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1d00::,2803:1d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1e00::,2803:1e00:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:1e80::,2803:1e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:1f00::,2803:1f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2000::,2803:2000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2080::,2803:2080:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:2100::,2803:2100:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2180::,2803:2180:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:2200::,2803:2200:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:2280::,2803:2280:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:2300::,2803:2300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2400::,2803:2400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2480::,2803:2480:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2500::,2803:2500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:2600::,2803:2600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2680::,2803:2680:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:2700::,2803:2700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2800::,2803:2800:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:2880::,2803:2880:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:2900::,2803:2900:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:2a00::,2803:2a00:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:2a80::,2803:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:2b00::,2803:2b00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:2c00::,2803:2c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2c80::,2803:2c80:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:2d00::,2803:2d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2e00::,2803:2e00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:2e80::,2803:2e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:2f00::,2803:2f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3000::,2803:3000:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:3080::,2803:3080:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:3100::,2803:3100:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:3200::,2803:3200:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:3280::,2803:3280:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:3300::,2803:3300:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:3400::,2803:3400:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:3480::,2803:3480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3500::,2803:3500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3600::,2803:3600:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:3680::,2803:3680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3700::,2803:3700:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:3800::,2803:3800:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:3880::,2803:3880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3900::,2803:3900:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:3a00::,2803:3a00:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:3a80::,2803:3a80:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:3b00::,2803:3b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3c00::,2803:3c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:3c80::,2803:3c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:3d00::,2803:3d00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:3e00::,2803:3e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:3e80::,2803:3e80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:3f00::,2803:3f00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:4000::,2803:4000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4080::,2803:4080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4100::,2803:4100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4180::,2803:4180:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:4200::,2803:4200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:4280::,2803:4280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4300::,2803:4300:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:4400::,2803:4400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4480::,2803:4480:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:4500::,2803:4500:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:4600::,2803:4600:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:4680::,2803:4680:ffff:ffff:ffff:ffff:ffff:ffff,TT
+2803:4700::,2803:4700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4800::,2803:4800:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:4880::,2803:4880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4900::,2803:4900:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2803:4a00::,2803:4a00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:4a80::,2803:4a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4b00::,2803:4b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4c00::,2803:4c00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:4c80::,2803:4c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:4d00::,2803:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:4e00::,2803:4e00:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:4e80::,2803:4e80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:4f00::,2803:4f00:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:5000::,2803:5000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5080::,2803:5080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5100::,2803:5100:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:5200::,2803:5200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:5280::,2803:5280:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:5300::,2803:5300:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:5400::,2803:5400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5480::,2803:5480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5500::,2803:5500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5600::,2803:5600:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:5680::,2803:5680:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:5700::,2803:5700:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5880::,2803:5880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5900::,2803:5900:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:5a00::,2803:5a00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5a80::,2803:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:5b00::,2803:5b00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:5c00::,2803:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5c80::,2803:5c80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:5d00::,2803:5d00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:5e00::,2803:5e00:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:5e80::,2803:5e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:5f00::,2803:5f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6000::,2803:6000:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:6080::,2803:6080:ffff:ffff:ffff:ffff:ffff:ffff,US
+2803:6100::,2803:6100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6180::,2803:6180:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:6200::,2803:6200:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:6280::,2803:6280:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:6300::,2803:6300:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:6400::,2803:6400:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:6480::,2803:6480:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:6500::,2803:6500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:6600::,2803:6600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6680::,2803:6680:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:6700::,2803:6700:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:6800::,2803:6800:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6880::,2803:6880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6900::,2803:6900:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:6a00::,2803:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:6a80::,2803:6a80:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:6b00::,2803:6b00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6c00::,2803:6c00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:6c80::,2803:6c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6d00::,2803:6d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:6e00::,2803:6e00:ffff:ffff:ffff:ffff:ffff:ffff,SR
+2803:6e80::,2803:6e80:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:6f00::,2803:6f00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7000::,2803:7000:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:7080::,2803:7080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7100::,2803:7100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7200::,2803:7200:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:7280::,2803:7280:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:7300::,2803:7300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7400::,2803:7400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7480::,2803:7480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7500::,2803:7500:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7600::,2803:7600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7680::,2803:7680:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:7700::,2803:7700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7800::,2803:7800:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:7880::,2803:7880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7900::,2803:7900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:7a00::,2803:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:7a80::,2803:7a80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:7b00::,2803:7b00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:7c00::,2803:7c00:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:7c80::,2803:7c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:7d00::,2803:7d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7e00::,2803:7e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7e80::,2803:7e80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:7f00::,2803:7f00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:8000::,2803:8000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8080::,2803:8080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8100::,2803:8100:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:8180::,2803:8180:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:8200::,2803:8200:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:8280::,2803:8280:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:8300::,2803:8300:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:8400::,2803:8400:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:8480::,2803:8480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8500::,2803:8500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8600::,2803:8600:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2803:8680::,2803:8680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8700::,2803:8700:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:8800::,2803:8800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:8880::,2803:8880:ffff:ffff:ffff:ffff:ffff:ffff,NI
+2803:8900::,2803:8900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8a00::,2803:8a00:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:8a80::,2803:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8b00::,2803:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:8c00::,2803:8c00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:8c80::,2803:8c80:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:8d00::,2803:8d00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:8e00::,2803:8e00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:8e80::,2803:8e80:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:8f00::,2803:8f00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:9000::,2803:9000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9080::,2803:9080:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:9100::,2803:9100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9180::,2803:9180:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:9200::,2803:9200:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:9280::,2803:9280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9300::,2803:9300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9400::,2803:9400:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:9480::,2803:9480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9500::,2803:9500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9600::,2803:9600:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:9680::,2803:9680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9700::,2803:9700:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:9800::,2803:9800:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9880::,2803:9880:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:9900::,2803:9900:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:9a00::,2803:9a00:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:9a80::,2803:9a80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:9b00::,2803:9b00:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:9c00::,2803:9c00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9c80::,2803:9c80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9d00::,2803:9d00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:9e00::,2803:9e00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:9e80::,2803:9e80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:9f00::,2803:9f00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a000::,2803:a000:ffff:ffff:ffff:ffff:ffff:ffff,BQ
+2803:a080::,2803:a080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a100::,2803:a100:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:a180::,2803:a180:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:a200::,2803:a200:ffff:ffff:ffff:ffff:ffff:ffff,SR
+2803:a280::,2803:a280:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:a300::,2803:a300:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:a400::,2803:a400:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:a480::,2803:a480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a500::,2803:a500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a600::,2803:a600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a680::,2803:a680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a700::,2803:a700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:a800::,2803:a800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:a880::,2803:a880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:a900::,2803:a900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:aa00::,2803:aa00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:aa80::,2803:aa80:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:ab00::,2803:ab00:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:ac00::,2803:ac00:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:ac80::,2803:ac80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:ad00::,2803:ad00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ae00::,2803:ae00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ae80::,2803:ae80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:af00::,2803:af00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b000::,2803:b000:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:b080::,2803:b080:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:b100::,2803:b100:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:b200::,2803:b200:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:b280::,2803:b280:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:b300::,2803:b300:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:b400::,2803:b400:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:b480::,2803:b480:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:b500::,2803:b500:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:b600::,2803:b600:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b680::,2803:b680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b700::,2803:b700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:b800::,2803:b800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:b880::,2803:b880:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:b900::,2803:b900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ba00::,2803:ba00:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:ba80::,2803:ba80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bb00::,2803:bb00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bc00::,2803:bc00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:bc80::,2803:bc80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:bd00::,2803:bd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:be00::,2803:be00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:be80::,2803:be80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:bf00::,2803:bf00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c000::,2803:c000:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:c080::,2803:c080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c100::,2803:c100:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:c180::,2803:c180:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:c200::,2803:c200:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:c280::,2803:c280:ffff:ffff:ffff:ffff:ffff:ffff,EC
+2803:c300::,2803:c300:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:c400::,2803:c400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c480::,2803:c480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c500::,2803:c500:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:c600::,2803:c600:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:c680::,2803:c680:ffff:ffff:ffff:ffff:ffff:ffff,HT
+2803:c700::,2803:c700:ffff:ffff:ffff:ffff:ffff:ffff,GF
+2803:c800::,2803:c800:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:c880::,2803:c880:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:c900::,2803:c900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ca00::,2803:ca00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ca80::,2803:ca80:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:cb00::,2803:cb00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:cc00::,2803:cc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:cc80::,2803:cc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:cd00::,2803:cd00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ce00::,2803:ce00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:ce80::,2803:ce80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:cf00::,2803:cf00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d000::,2803:d000:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:d080::,2803:d080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d100::,2803:d100:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:d200::,2803:d200:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:d280::,2803:d280:ffff:ffff:ffff:ffff:ffff:ffff,PY
+2803:d300::,2803:d300:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:d400::,2803:d400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d480::,2803:d480:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:d500::,2803:d500:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:d600::,2803:d600:ffff:ffff:ffff:ffff:ffff:ffff,UY
+2803:d680::,2803:d680:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:d700::,2803:d700:ffff:ffff:ffff:ffff:ffff:ffff,VE
+2803:d800::,2803:d800:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:d880::,2803:d880:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:d900::,2803:d900:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:da00::,2803:da00:ffff:ffff:ffff:ffff:ffff:ffff,GY
+2803:da80::,2803:da80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:db00::,2803:db00:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:dc00::,2803:dc00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:dc80::,2803:dc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:dd00::,2803:dd00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:de00::,2803:de00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:de80::,2803:de80:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:df00::,2803:df00:ffff:ffff:ffff:ffff:ffff:ffff,SV
+2803:e000::,2803:e000:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:e080::,2803:e080:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e100::,2803:e100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e180::,2803:e180:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:e200::,2803:e200:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e280::,2803:e280:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e300::,2803:e300:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:e400::,2803:e400:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e480::,2803:e480:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:e500::,2803:e500:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:e600::,2803:e600:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:e680::,2803:e680:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:e700::,2803:e700:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:e800::,2803:e800:ffff:ffff:ffff:ffff:ffff:ffff,CL
+2803:e880::,2803:e880:ffff:ffff:ffff:ffff:ffff:ffff,GT
+2803:e900::,2803:e900:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ea00::,2803:ea00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ea80::,2803:ea80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:eb00::,2803:eb00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ec00::,2803:ec00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ec80::,2803:ec80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ed00::,2803:ed00:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:ee00::,2803:ee00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ee80::,2803:ee80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:ef00::,2803:ef00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:f000::,2803:f000:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f080::,2803:f080:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:f100::,2803:f100:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f200::,2803:f200:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f280::,2803:f280:ffff:ffff:ffff:ffff:ffff:ffff,DO
+2803:f300::,2803:f300:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f400::,2803:f400:ffff:ffff:ffff:ffff:ffff:ffff,HN
+2803:f480::,2803:f480:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:f500::,2803:f500:ffff:ffff:ffff:ffff:ffff:ffff,CW
+2803:f600::,2803:f600:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:f680::,2803:f680:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f700::,2803:f700:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:f800::,2803:f800:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:f880::,2803:f880:ffff:ffff:ffff:ffff:ffff:ffff,CR
+2803:f900::,2803:f900:ffff:ffff:ffff:ffff:ffff:ffff,BZ
+2803:fa00::,2803:fa00:ffff:ffff:ffff:ffff:ffff:ffff,BO
+2803:fa80::,2803:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:fb00::,2803:fb00:ffff:ffff:ffff:ffff:ffff:ffff,PA
+2803:fc80::,2803:fc80:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2803:fd00::,2803:fd00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:fe00::,2803:fe00:ffff:ffff:ffff:ffff:ffff:ffff,CO
+2803:fe80::,2803:fe80:ffff:ffff:ffff:ffff:ffff:ffff,PE
+2803:ff00::,2803:ff00:ffff:ffff:ffff:ffff:ffff:ffff,AR
+2804::,2804::ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4::,2804:4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8::,2804:c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10::,2804:10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14::,2804:14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:18::,2804:18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c::,2804:1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20::,2804:20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:24::,2804:24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:28::,2804:28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c::,2804:2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:30::,2804:30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:34::,2804:34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:38::,2804:38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c::,2804:3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:40::,2804:40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:44::,2804:44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:48::,2804:48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c::,2804:4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:50::,2804:50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:54::,2804:54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:58::,2804:58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c::,2804:5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:60::,2804:60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:64::,2804:64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:68::,2804:68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c::,2804:6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:70::,2804:70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:74::,2804:74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:78::,2804:78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c::,2804:7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:80::,2804:80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:84::,2804:84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:88::,2804:88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c::,2804:8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:90::,2804:90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:94::,2804:94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:98::,2804:98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c::,2804:9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a0::,2804:a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a4::,2804:a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a8::,2804:a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac::,2804:ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b0::,2804:b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b4::,2804:b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b8::,2804:b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c0::,2804:c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c4::,2804:c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c8::,2804:c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc::,2804:cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d0::,2804:d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d4::,2804:d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d8::,2804:d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc::,2804:dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e0::,2804:e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e4::,2804:e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e8::,2804:e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec::,2804:ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f0::,2804:f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f4::,2804:f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f8::,2804:f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc::,2804:fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:100::,2804:100:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:104::,2804:104:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:108::,2804:108:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c::,2804:10c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:110::,2804:110:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:114::,2804:114:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:118::,2804:118:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c::,2804:11c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:120::,2804:120:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:124::,2804:124:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:128::,2804:128:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c::,2804:12c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:130::,2804:130:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:134::,2804:134:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:138::,2804:138:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c::,2804:13c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:140::,2804:140:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:144::,2804:144:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:148::,2804:148:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c::,2804:14d:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:150::,2804:154:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:158::,2804:158:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c::,2804:15c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:160::,2804:160:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:164::,2804:164:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:168::,2804:168:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c::,2804:16c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:170::,2804:170:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:174::,2804:174:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:178::,2804:178:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c::,2804:17c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:180::,2804:180:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:184::,2804:184:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:188::,2804:188:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:18c::,2804:18c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:190::,2804:190:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:194::,2804:194:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:198::,2804:198:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:19c::,2804:19c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1a0::,2804:1a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1a4::,2804:1a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1a8::,2804:1a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ac::,2804:1ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b0::,2804:1b1:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1b8::,2804:1b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1bc::,2804:1bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c0::,2804:1c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c4::,2804:1c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1c8::,2804:1c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1cc::,2804:1cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d0::,2804:1d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d4::,2804:1d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1d8::,2804:1d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1dc::,2804:1dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e0::,2804:1e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e4::,2804:1e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1e8::,2804:1e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1ec::,2804:1ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f0::,2804:1f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f4::,2804:1f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f8::,2804:1f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1fc::,2804:1fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:200::,2804:200:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:204::,2804:204:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:208::,2804:208:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:20c::,2804:20c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:210::,2804:210:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:214::,2804:214:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:218::,2804:218:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:220::,2804:220:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:224::,2804:224:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:228::,2804:228:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:22c::,2804:22c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:230::,2804:230:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:234::,2804:234:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:238::,2804:238:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:23c::,2804:23c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:240::,2804:240:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:244::,2804:244:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:248::,2804:248:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:24c::,2804:24c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:250::,2804:250:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:254::,2804:254:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:258::,2804:258:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:25c::,2804:25c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:260::,2804:260:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:268::,2804:268:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:26c::,2804:26c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:270::,2804:270:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:274::,2804:274:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:27c::,2804:27c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:280::,2804:280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:284::,2804:284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:288::,2804:288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:28c::,2804:28c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:290::,2804:290:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:294::,2804:294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:298::,2804:298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:29c::,2804:29c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2a0::,2804:2a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2a4::,2804:2a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2a8::,2804:2a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ac::,2804:2ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2b0::,2804:2b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2b4::,2804:2b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2b8::,2804:2b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2bc::,2804:2bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c0::,2804:2c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c4::,2804:2c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2c8::,2804:2c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2cc::,2804:2cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d0::,2804:2d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d4::,2804:2d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2d8::,2804:2d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2dc::,2804:2dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2e0::,2804:2e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2e4::,2804:2e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2e8::,2804:2e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2ec::,2804:2ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2f0::,2804:2f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2f4::,2804:2f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2f8::,2804:2f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:2fc::,2804:2fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:300::,2804:303:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:308::,2804:308:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:30c::,2804:30c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:310::,2804:310:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:314::,2804:314:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:318::,2804:318:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:31c::,2804:31c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:320::,2804:320:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:324::,2804:324:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:328::,2804:328:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:32c::,2804:32c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:330::,2804:330:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:334::,2804:334:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:338::,2804:338:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:33c::,2804:33c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:340::,2804:340:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:344::,2804:344:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:348::,2804:348:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:350::,2804:350:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:354::,2804:354:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:358::,2804:358:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:35c::,2804:35c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:360::,2804:360:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:364::,2804:364:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:368::,2804:368:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:36c::,2804:36c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:370::,2804:370:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:374::,2804:374:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:378::,2804:378:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:37c::,2804:37c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:380::,2804:380:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:384::,2804:384:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:388::,2804:38b:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:390::,2804:390:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:394::,2804:394:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:398::,2804:398:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:39c::,2804:39c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3a0::,2804:3a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3a4::,2804:3a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3a8::,2804:3a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3ac::,2804:3ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3b0::,2804:3b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3b4::,2804:3b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3b8::,2804:3b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3bc::,2804:3bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c0::,2804:3c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c4::,2804:3c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3c8::,2804:3c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3cc::,2804:3cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3d0::,2804:3d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3d4::,2804:3d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3d8::,2804:3d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3dc::,2804:3dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3e0::,2804:3e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3e4::,2804:3e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3e8::,2804:3e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3ec::,2804:3ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3f0::,2804:3f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3f4::,2804:3f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3f8::,2804:3f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:3fc::,2804:3fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:400::,2804:400:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:404::,2804:404:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:40c::,2804:40c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:410::,2804:410:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:414::,2804:414:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:418::,2804:418:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:41c::,2804:41c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:420::,2804:420:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:424::,2804:424:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:428::,2804:428:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:430::,2804:431:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:438::,2804:438:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:43c::,2804:43c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:440::,2804:440:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:444::,2804:444:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:448::,2804:448:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:44c::,2804:44c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:450::,2804:450:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:454::,2804:454:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:458::,2804:458:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:45c::,2804:45c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:460::,2804:460:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:464::,2804:464:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:468::,2804:468:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:46c::,2804:46c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:470::,2804:470:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:474::,2804:474:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:478::,2804:478:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:47c::,2804:47c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:480::,2804:480:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:484::,2804:484:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:488::,2804:488:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:48c::,2804:48c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:490::,2804:490:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:494::,2804:494:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:498::,2804:498:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:49c::,2804:49c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4a0::,2804:4a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4a4::,2804:4a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4a8::,2804:4a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4ac::,2804:4ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4b0::,2804:4b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4b4::,2804:4b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4b8::,2804:4b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4bc::,2804:4bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c0::,2804:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c4::,2804:4c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4c8::,2804:4c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4cc::,2804:4cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4d0::,2804:4d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4d4::,2804:4d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4d8::,2804:4d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4dc::,2804:4dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4e0::,2804:4e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4e4::,2804:4e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4e8::,2804:4e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4ec::,2804:4ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4f0::,2804:4f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4f4::,2804:4f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4f8::,2804:4f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:4fc::,2804:4fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:500::,2804:500:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:504::,2804:504:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:508::,2804:508:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:50c::,2804:50c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:510::,2804:510:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:514::,2804:514:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:518::,2804:518:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:51c::,2804:51c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:520::,2804:520:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:528::,2804:528:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:52c::,2804:52c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:530::,2804:530:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:534::,2804:534:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:538::,2804:538:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:53c::,2804:53c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:540::,2804:540:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:544::,2804:544:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:548::,2804:548:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:54c::,2804:54c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:550::,2804:550:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:554::,2804:554:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:558::,2804:558:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:55c::,2804:55c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:560::,2804:560:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:564::,2804:564:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:568::,2804:568:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:56c::,2804:56c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:570::,2804:570:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:574::,2804:574:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:578::,2804:578:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:57c::,2804:57c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:580::,2804:580:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:584::,2804:584:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:588::,2804:588:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:58c::,2804:58c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:590::,2804:590:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:594::,2804:594:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:598::,2804:598:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:59c::,2804:59c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5a0::,2804:5a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5a4::,2804:5a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5a8::,2804:5a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5ac::,2804:5ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5b0::,2804:5b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5b4::,2804:5b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5b8::,2804:5b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5bc::,2804:5bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c0::,2804:5c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c4::,2804:5c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5c8::,2804:5c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5cc::,2804:5cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5d0::,2804:5d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5d4::,2804:5d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5d8::,2804:5d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5dc::,2804:5dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5e0::,2804:5e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5e4::,2804:5e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5e8::,2804:5e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5ec::,2804:5ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5f0::,2804:5f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5f4::,2804:5f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5f8::,2804:5f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:5fc::,2804:5fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:600::,2804:600:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:604::,2804:604:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:608::,2804:608:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:60c::,2804:60c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:610::,2804:610:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:614::,2804:614:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:618::,2804:618:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:61c::,2804:61c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:620::,2804:620:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:624::,2804:624:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:628::,2804:628:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:62c::,2804:62c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:630::,2804:630:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:634::,2804:634:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:638::,2804:638:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:63c::,2804:63c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:640::,2804:640:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:644::,2804:644:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:648::,2804:648:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:64c::,2804:64c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:650::,2804:650:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:654::,2804:654:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:658::,2804:658:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:65c::,2804:65c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:660::,2804:660:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:664::,2804:664:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:668::,2804:668:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:66c::,2804:66c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:670::,2804:670:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:674::,2804:674:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:678::,2804:678:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:67c::,2804:67c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:680::,2804:680:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:684::,2804:684:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:688::,2804:688:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:68c::,2804:68c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:690::,2804:690:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:694::,2804:694:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:698::,2804:698:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:69c::,2804:69c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6a0::,2804:6a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6a4::,2804:6a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6a8::,2804:6a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6ac::,2804:6ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6b0::,2804:6b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6b4::,2804:6b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6b8::,2804:6b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6bc::,2804:6bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c0::,2804:6c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c4::,2804:6c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6c8::,2804:6c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6cc::,2804:6cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6d0::,2804:6d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6d4::,2804:6d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6d8::,2804:6d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6dc::,2804:6dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6e0::,2804:6e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6e4::,2804:6e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6e8::,2804:6e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6ec::,2804:6ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6f0::,2804:6f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6f4::,2804:6f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6f8::,2804:6f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:6fc::,2804:6fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:700::,2804:700:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:704::,2804:704:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:708::,2804:708:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:70c::,2804:70c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:710::,2804:710:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:714::,2804:714:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:718::,2804:718:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:71c::,2804:71c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:720::,2804:720:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:724::,2804:724:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:728::,2804:728:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:72c::,2804:72c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:730::,2804:730:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:734::,2804:734:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:738::,2804:738:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:73c::,2804:73c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:740::,2804:740:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:744::,2804:744:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:748::,2804:748:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:74c::,2804:74c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:750::,2804:750:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:754::,2804:754:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:758::,2804:758:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:75c::,2804:75c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:760::,2804:760:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:764::,2804:764:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:768::,2804:768:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:76c::,2804:76c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:770::,2804:770:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:774::,2804:774:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:778::,2804:778:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:77c::,2804:77c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:780::,2804:780:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:784::,2804:784:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:788::,2804:788:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:78c::,2804:78c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:790::,2804:790:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:794::,2804:794:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:798::,2804:798:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:79c::,2804:79c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7a0::,2804:7a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7a4::,2804:7a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7a8::,2804:7a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7ac::,2804:7ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7b0::,2804:7b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7b4::,2804:7b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7b8::,2804:7b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7bc::,2804:7bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c0::,2804:7c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c4::,2804:7c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7c8::,2804:7c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7cc::,2804:7cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7d0::,2804:7d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7d4::,2804:7d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7dc::,2804:7dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7e0::,2804:7e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7e4::,2804:7e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7e8::,2804:7e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7ec::,2804:7ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:7f0::,2804:7f7:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:800::,2804:800:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:804::,2804:804:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:808::,2804:808:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:80c::,2804:80c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:810::,2804:810:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:814::,2804:814:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:818::,2804:818:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:81c::,2804:81c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:820::,2804:820:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:824::,2804:824:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:828::,2804:828:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:82c::,2804:82c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:830::,2804:830:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:834::,2804:834:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:838::,2804:838:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:83c::,2804:83c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:840::,2804:840:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:844::,2804:844:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:848::,2804:848:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:84c::,2804:84c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:850::,2804:850:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:854::,2804:854:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:858::,2804:858:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:85c::,2804:85c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:860::,2804:860:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:864::,2804:864:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:868::,2804:868:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:86c::,2804:86c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:870::,2804:870:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:874::,2804:874:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:878::,2804:878:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:87c::,2804:87c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:880::,2804:880:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:884::,2804:884:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:888::,2804:888:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:88c::,2804:88c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:890::,2804:890:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:894::,2804:894:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:898::,2804:898:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:89c::,2804:89c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8a0::,2804:8a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8a4::,2804:8a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8a8::,2804:8a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8ac::,2804:8ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8b0::,2804:8b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8b4::,2804:8b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8bc::,2804:8bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c0::,2804:8c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c4::,2804:8c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8c8::,2804:8c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8cc::,2804:8cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8d0::,2804:8d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8d4::,2804:8d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8d8::,2804:8d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8dc::,2804:8dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8e0::,2804:8e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8e4::,2804:8e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8e8::,2804:8e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8ec::,2804:8ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8f0::,2804:8f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8f4::,2804:8f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8f8::,2804:8f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:8fc::,2804:8fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:904::,2804:904:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:908::,2804:908:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:90c::,2804:90c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:910::,2804:910:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:914::,2804:914:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:918::,2804:918:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:91c::,2804:91c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:920::,2804:920:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:924::,2804:924:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:928::,2804:928:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:92c::,2804:92c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:930::,2804:930:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:934::,2804:934:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:938::,2804:938:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:93c::,2804:93c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:940::,2804:940:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:944::,2804:944:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:948::,2804:948:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:94c::,2804:94c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:950::,2804:950:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:954::,2804:954:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:958::,2804:958:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:95c::,2804:95c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:960::,2804:960:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:964::,2804:964:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:968::,2804:968:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:96c::,2804:96c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:970::,2804:970:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:974::,2804:974:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:978::,2804:978:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:97c::,2804:97c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:980::,2804:980:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:984::,2804:984:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:988::,2804:988:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:98c::,2804:98c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:990::,2804:990:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:994::,2804:994:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:998::,2804:998:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:99c::,2804:99c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9a0::,2804:9a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9a4::,2804:9a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9a8::,2804:9a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9ac::,2804:9ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9b0::,2804:9b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9b4::,2804:9b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9b8::,2804:9b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9bc::,2804:9bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c0::,2804:9c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c4::,2804:9c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9c8::,2804:9c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9cc::,2804:9cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9d0::,2804:9d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9d4::,2804:9d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9d8::,2804:9d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9dc::,2804:9dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9e0::,2804:9e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9e4::,2804:9e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9e8::,2804:9e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9ec::,2804:9ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9f0::,2804:9f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9f4::,2804:9f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9f8::,2804:9f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:9fc::,2804:9fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a00::,2804:a00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a04::,2804:a04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a08::,2804:a08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a0c::,2804:a0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a10::,2804:a10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a14::,2804:a14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a18::,2804:a18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a1c::,2804:a1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a20::,2804:a20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a24::,2804:a24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a28::,2804:a28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a2c::,2804:a2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a30::,2804:a30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a34::,2804:a34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a38::,2804:a38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a3c::,2804:a3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a40::,2804:a40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a44::,2804:a44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a48::,2804:a48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a4c::,2804:a4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a50::,2804:a50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a54::,2804:a54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a58::,2804:a58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a5c::,2804:a5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a60::,2804:a60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a64::,2804:a64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a68::,2804:a68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a6c::,2804:a6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a70::,2804:a70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a74::,2804:a74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a78::,2804:a78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a7c::,2804:a7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a80::,2804:a80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a84::,2804:a84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a88::,2804:a88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a8c::,2804:a8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a90::,2804:a90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a94::,2804:a94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a98::,2804:a98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:a9c::,2804:a9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aa0::,2804:aa0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aa4::,2804:aa4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aa8::,2804:aa8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aac::,2804:aac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ab0::,2804:ab0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ab4::,2804:ab4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ab8::,2804:ab8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:abc::,2804:abc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac0::,2804:ac0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac4::,2804:ac4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ac8::,2804:ac8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:acc::,2804:acc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ad0::,2804:ad0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ad4::,2804:ad4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ad8::,2804:ad8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:adc::,2804:adc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ae0::,2804:ae0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ae4::,2804:ae4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ae8::,2804:ae8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:aec::,2804:aec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:af0::,2804:af0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:af4::,2804:af4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:af8::,2804:af8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:afc::,2804:afc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b00::,2804:b00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b04::,2804:b04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b08::,2804:b08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b0c::,2804:b0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b10::,2804:b10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b14::,2804:b14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b18::,2804:b18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b1c::,2804:b1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b20::,2804:b20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b24::,2804:b24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b28::,2804:b28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b2c::,2804:b2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b30::,2804:b30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b34::,2804:b34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b38::,2804:b38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b3c::,2804:b3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b40::,2804:b40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b44::,2804:b44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b48::,2804:b48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b4c::,2804:b4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b50::,2804:b50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b54::,2804:b54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b58::,2804:b58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b5c::,2804:b5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b60::,2804:b60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b64::,2804:b64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b68::,2804:b68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b6c::,2804:b6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b70::,2804:b70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b74::,2804:b74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b78::,2804:b78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b7c::,2804:b7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b80::,2804:b80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b84::,2804:b84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b88::,2804:b88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b8c::,2804:b8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b90::,2804:b90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b94::,2804:b94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b98::,2804:b98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:b9c::,2804:b9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ba0::,2804:ba0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ba4::,2804:ba5:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ba8::,2804:ba8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bac::,2804:bac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bb0::,2804:bb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bb4::,2804:bb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bb8::,2804:bb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bbc::,2804:bbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bc0::,2804:bc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bc4::,2804:bc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bc8::,2804:bc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bcc::,2804:bcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bd0::,2804:bd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bd4::,2804:bd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bd8::,2804:bd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bdc::,2804:bdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:be0::,2804:be0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:be4::,2804:be4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:be8::,2804:be8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bec::,2804:bec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bf0::,2804:bf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bf4::,2804:bf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bf8::,2804:bf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:bfc::,2804:bfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c00::,2804:c00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c04::,2804:c04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c08::,2804:c08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c0c::,2804:c0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c10::,2804:c10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c14::,2804:c14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c18::,2804:c18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c1c::,2804:c1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c20::,2804:c20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c24::,2804:c24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c28::,2804:c28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c2c::,2804:c2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c30::,2804:c30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c34::,2804:c34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c38::,2804:c38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c3c::,2804:c3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c40::,2804:c40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c44::,2804:c44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c48::,2804:c48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c4c::,2804:c4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c50::,2804:c50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c54::,2804:c54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c58::,2804:c58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c5c::,2804:c5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c60::,2804:c60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c64::,2804:c64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c68::,2804:c68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c6c::,2804:c6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c70::,2804:c70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c74::,2804:c74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c78::,2804:c78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c7c::,2804:c7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c80::,2804:c80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c84::,2804:c84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c88::,2804:c88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c8c::,2804:c8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c90::,2804:c90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c94::,2804:c94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c98::,2804:c98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:c9c::,2804:c9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ca0::,2804:ca0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ca4::,2804:ca4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ca8::,2804:ca8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cac::,2804:cac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cb0::,2804:cb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cb4::,2804:cb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cb8::,2804:cb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cbc::,2804:cbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc0::,2804:cc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc4::,2804:cc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cc8::,2804:cc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ccc::,2804:ccc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cd0::,2804:cd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cd4::,2804:cd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cd8::,2804:cd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cdc::,2804:cdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ce0::,2804:ce0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ce4::,2804:ce4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ce8::,2804:ce8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cec::,2804:cec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cf0::,2804:cf0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cf4::,2804:cf4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cf8::,2804:cf8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:cfc::,2804:cfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d00::,2804:d00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d04::,2804:d04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d08::,2804:d08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d0c::,2804:d0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d10::,2804:d10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d14::,2804:d14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d18::,2804:d18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d1c::,2804:d1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d20::,2804:d20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d24::,2804:d24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d28::,2804:d28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d2c::,2804:d2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d30::,2804:d30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d34::,2804:d34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d38::,2804:d38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d3c::,2804:d3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d40::,2804:d60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d64::,2804:d64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d68::,2804:d68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d6c::,2804:d6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d70::,2804:d70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d74::,2804:d74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d78::,2804:d78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d7c::,2804:d7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d80::,2804:d80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d84::,2804:d84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d88::,2804:d88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d8c::,2804:d8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d90::,2804:d90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d94::,2804:d94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d98::,2804:d98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:d9c::,2804:d9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:da0::,2804:da0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:da4::,2804:da4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:da8::,2804:da8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dac::,2804:dac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:db0::,2804:db0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:db4::,2804:db4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:db8::,2804:db8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dbc::,2804:dbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc0::,2804:dc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc4::,2804:dc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dc8::,2804:dc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dcc::,2804:dcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dd0::,2804:dd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dd4::,2804:dd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dd8::,2804:dd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ddc::,2804:ddc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:de0::,2804:de0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:de4::,2804:de4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:de8::,2804:de8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dec::,2804:dec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:df0::,2804:df0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:df4::,2804:df4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:df8::,2804:df8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:dfc::,2804:dfc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e00::,2804:e00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e04::,2804:e04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e08::,2804:e08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e0c::,2804:e0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e10::,2804:e10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e14::,2804:e14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e18::,2804:e18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e1c::,2804:e1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e20::,2804:e20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e24::,2804:e24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e28::,2804:e28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e2c::,2804:e2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e30::,2804:e30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e34::,2804:e34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e38::,2804:e38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e3c::,2804:e3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e40::,2804:e40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e44::,2804:e44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e48::,2804:e48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e4c::,2804:e4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e50::,2804:e50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e54::,2804:e54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e58::,2804:e58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e5c::,2804:e5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e60::,2804:e60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e64::,2804:e64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e68::,2804:e68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e6c::,2804:e6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e70::,2804:e70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e74::,2804:e74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e78::,2804:e78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e7c::,2804:e7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e80::,2804:e80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e84::,2804:e84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e88::,2804:e88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e8c::,2804:e8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e90::,2804:e90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e94::,2804:e94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e98::,2804:e98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:e9c::,2804:e9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ea0::,2804:ea0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ea4::,2804:ea4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ea8::,2804:ea8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eac::,2804:eac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eb0::,2804:eb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eb4::,2804:eb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eb8::,2804:eb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ebc::,2804:ebc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec0::,2804:ec0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec4::,2804:ec4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ec8::,2804:ec8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ecc::,2804:ecc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ed0::,2804:ed0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ed4::,2804:ed4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ed8::,2804:ed8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:edc::,2804:edc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ee0::,2804:ee0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ee4::,2804:ee4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ee8::,2804:ee8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:eec::,2804:eec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ef0::,2804:ef0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ef4::,2804:ef4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ef8::,2804:ef8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:efc::,2804:efc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f00::,2804:f00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f04::,2804:f04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f08::,2804:f08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f0c::,2804:f0c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f10::,2804:f10:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f14::,2804:f14:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f18::,2804:f18:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f1c::,2804:f1c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f20::,2804:f20:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f24::,2804:f24:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f28::,2804:f28:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f2c::,2804:f2c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f30::,2804:f30:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f34::,2804:f34:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f38::,2804:f38:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f3c::,2804:f3c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f40::,2804:f40:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f44::,2804:f44:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f48::,2804:f48:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f4c::,2804:f4c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f50::,2804:f50:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f54::,2804:f54:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f58::,2804:f58:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f5c::,2804:f5c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f60::,2804:f60:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f64::,2804:f64:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f68::,2804:f68:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f6c::,2804:f6c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f70::,2804:f70:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f74::,2804:f74:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f78::,2804:f78:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f7c::,2804:f7c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f80::,2804:f80:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f84::,2804:f84:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f88::,2804:f88:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f8c::,2804:f8c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f90::,2804:f90:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f94::,2804:f94:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f98::,2804:f98:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:f9c::,2804:f9c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fa0::,2804:fa0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fa4::,2804:fa4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fa8::,2804:fa8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fac::,2804:fac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fb0::,2804:fb0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fb4::,2804:fb4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fb8::,2804:fb8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fbc::,2804:fbc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc0::,2804:fc0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc4::,2804:fc4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fc8::,2804:fc8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fcc::,2804:fcc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fd0::,2804:fd0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fd4::,2804:fd4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fd8::,2804:fd8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fdc::,2804:fdc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fe0::,2804:fe0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fe4::,2804:fe4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fe8::,2804:fe8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:fec::,2804:fec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ff0::,2804:ff0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ff4::,2804:ff4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ff8::,2804:ff8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:ffc::,2804:ffc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1000::,2804:1000:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1004::,2804:1004:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1008::,2804:1008:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:100c::,2804:100c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1010::,2804:1010:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1014::,2804:1014:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1018::,2804:1018:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:101c::,2804:101c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1020::,2804:1020:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1024::,2804:1024:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1028::,2804:1028:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:102c::,2804:102c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1030::,2804:1030:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1034::,2804:1034:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1038::,2804:1038:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:103c::,2804:103c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1040::,2804:1040:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1044::,2804:1044:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1048::,2804:1048:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:104c::,2804:104c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1050::,2804:1050:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1054::,2804:1054:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1058::,2804:1058:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:105c::,2804:105c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1060::,2804:1060:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1064::,2804:1064:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1068::,2804:1068:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:106c::,2804:106c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1070::,2804:1070:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1074::,2804:1074:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1078::,2804:1078:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:107c::,2804:107c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1080::,2804:1080:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1084::,2804:1084:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1088::,2804:1088:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:108c::,2804:108c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1090::,2804:1090:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1094::,2804:1094:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1098::,2804:1098:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:109c::,2804:109c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10a0::,2804:10a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10a4::,2804:10a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10a8::,2804:10a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10ac::,2804:10ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10b0::,2804:10b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10b4::,2804:10b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10b8::,2804:10b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10bc::,2804:10bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c0::,2804:10c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c4::,2804:10c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10c8::,2804:10c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10cc::,2804:10cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10d0::,2804:10d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10d4::,2804:10d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10d8::,2804:10d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10dc::,2804:10dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10e0::,2804:10e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10e4::,2804:10e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10e8::,2804:10e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10ec::,2804:10ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10f0::,2804:10f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10f4::,2804:10f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10f8::,2804:10f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:10fc::,2804:10fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1100::,2804:1100:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1104::,2804:1104:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1108::,2804:1108:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:110c::,2804:110c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1110::,2804:1110:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1114::,2804:1114:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1118::,2804:1118:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:111c::,2804:111c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1120::,2804:1120:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1124::,2804:1124:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1128::,2804:1128:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:112c::,2804:112c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1130::,2804:1130:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1134::,2804:1134:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1138::,2804:1138:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:113c::,2804:113c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1140::,2804:1140:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1144::,2804:1144:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1148::,2804:1148:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:114c::,2804:114c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1150::,2804:1150:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1154::,2804:1154:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1158::,2804:1158:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:115c::,2804:115c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1160::,2804:1160:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1164::,2804:1164:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1168::,2804:1168:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:116c::,2804:116c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1170::,2804:1170:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1174::,2804:1174:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1178::,2804:1178:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:117c::,2804:117c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1180::,2804:1180:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1184::,2804:1184:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1188::,2804:1188:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:118c::,2804:118c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1190::,2804:1190:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1194::,2804:1194:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1198::,2804:1198:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:119c::,2804:119c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11a0::,2804:11a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11a4::,2804:11a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11a8::,2804:11a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11ac::,2804:11ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11b0::,2804:11b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11b4::,2804:11b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11b8::,2804:11b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11bc::,2804:11bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c0::,2804:11c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c4::,2804:11c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11c8::,2804:11c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11cc::,2804:11cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11d0::,2804:11d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11d4::,2804:11d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11d8::,2804:11d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11dc::,2804:11dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11e0::,2804:11e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11e4::,2804:11e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11e8::,2804:11e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11ec::,2804:11ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11f0::,2804:11f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11f4::,2804:11f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11f8::,2804:11f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:11fc::,2804:11fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1200::,2804:1200:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1204::,2804:1204:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1208::,2804:1208:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:120c::,2804:120c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1210::,2804:1210:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1214::,2804:1214:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1218::,2804:1218:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:121c::,2804:121c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1220::,2804:1220:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1224::,2804:1224:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1228::,2804:1228:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:122c::,2804:122c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1230::,2804:1230:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1234::,2804:1234:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1238::,2804:1238:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:123c::,2804:123c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1240::,2804:1240:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1244::,2804:1244:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1248::,2804:1248:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:124c::,2804:124c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1250::,2804:1250:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1254::,2804:1254:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1258::,2804:1258:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:125c::,2804:125c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1260::,2804:1260:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1264::,2804:1264:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1268::,2804:1268:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:126c::,2804:126c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1270::,2804:1270:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1274::,2804:1274:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1278::,2804:1278:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:127c::,2804:127c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1280::,2804:1280:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1284::,2804:1284:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1288::,2804:1288:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:128c::,2804:128c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1290::,2804:1290:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1294::,2804:1294:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1298::,2804:1298:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:129c::,2804:129c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12a0::,2804:12a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12a4::,2804:12a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12a8::,2804:12a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12ac::,2804:12ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12b0::,2804:12b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12b4::,2804:12b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12b8::,2804:12b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12bc::,2804:12bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c0::,2804:12c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c4::,2804:12c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12c8::,2804:12c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12cc::,2804:12cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12d0::,2804:12d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12d4::,2804:12d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12d8::,2804:12d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12dc::,2804:12dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12e0::,2804:12e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12e4::,2804:12e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12e8::,2804:12e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12ec::,2804:12ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12f0::,2804:12f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12f4::,2804:12f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12f8::,2804:12f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:12fc::,2804:12fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1300::,2804:1300:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1304::,2804:1304:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1308::,2804:1308:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:130c::,2804:130c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1310::,2804:1310:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1314::,2804:1314:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1318::,2804:1318:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:131c::,2804:131c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1320::,2804:1320:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1324::,2804:1324:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1328::,2804:1328:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:132c::,2804:132c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1330::,2804:1330:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1334::,2804:1334:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1338::,2804:1338:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:133c::,2804:133c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1340::,2804:1340:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1344::,2804:1344:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1348::,2804:1348:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:134c::,2804:134c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1350::,2804:1350:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1354::,2804:1354:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1358::,2804:1358:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:135c::,2804:135c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1360::,2804:1360:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1364::,2804:1364:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1368::,2804:1368:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:136c::,2804:136c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1370::,2804:1370:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1374::,2804:1374:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1378::,2804:1378:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:137c::,2804:137c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1380::,2804:1380:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1384::,2804:1384:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1388::,2804:138b:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1390::,2804:1390:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1394::,2804:1394:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1398::,2804:1398:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:139c::,2804:139c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13a0::,2804:13a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13a4::,2804:13a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13a8::,2804:13a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13ac::,2804:13ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13b0::,2804:13b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13b4::,2804:13b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13b8::,2804:13b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13bc::,2804:13bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c0::,2804:13c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c4::,2804:13c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13c8::,2804:13c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13cc::,2804:13cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13d0::,2804:13d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13d4::,2804:13d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13d8::,2804:13d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13dc::,2804:13dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13e0::,2804:13e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13e4::,2804:13e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13e8::,2804:13e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13ec::,2804:13ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13f0::,2804:13f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13f4::,2804:13f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13f8::,2804:13f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:13fc::,2804:13fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1400::,2804:1400:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1404::,2804:1404:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1408::,2804:1408:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:140c::,2804:140c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1410::,2804:1410:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1414::,2804:1414:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1418::,2804:1418:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:141c::,2804:141c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1420::,2804:1420:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1424::,2804:1424:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1428::,2804:1428:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:142c::,2804:142c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1430::,2804:1430:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1434::,2804:1434:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1438::,2804:1438:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:143c::,2804:143c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1440::,2804:1440:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1444::,2804:1444:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1448::,2804:1448:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:144c::,2804:144c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1450::,2804:1450:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1454::,2804:1454:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1458::,2804:1458:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:145c::,2804:145c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1460::,2804:1460:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1464::,2804:1464:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1468::,2804:1468:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:146c::,2804:146c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1470::,2804:1470:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1474::,2804:1474:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1478::,2804:1478:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:147c::,2804:147c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1480::,2804:1480:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1484::,2804:1484:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1488::,2804:1488:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:148c::,2804:148c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1490::,2804:1490:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1494::,2804:1494:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1498::,2804:1498:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:149c::,2804:149c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14a0::,2804:14a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14a4::,2804:14a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14a8::,2804:14a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14ac::,2804:14ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14b0::,2804:14b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14b4::,2804:14b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14b8::,2804:14b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14bc::,2804:14bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c0::,2804:14c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c4::,2804:14c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14c8::,2804:14c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14cc::,2804:14cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14d0::,2804:14d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14d4::,2804:14d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14d8::,2804:14d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14dc::,2804:14dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14e0::,2804:14e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14e4::,2804:14e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14e8::,2804:14e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14ec::,2804:14ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14f0::,2804:14f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14f4::,2804:14f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14f8::,2804:14f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:14fc::,2804:14fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1500::,2804:1500:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1504::,2804:1504:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1508::,2804:1508:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:150c::,2804:150c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1510::,2804:1510:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1514::,2804:1514:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1518::,2804:1518:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:151c::,2804:151c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1520::,2804:1520:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1524::,2804:1524:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1528::,2804:1528:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:152c::,2804:152c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1530::,2804:1530:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1534::,2804:1534:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1538::,2804:1538:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:153c::,2804:153c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1540::,2804:1540:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1544::,2804:1544:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1548::,2804:1548:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:154c::,2804:154c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1550::,2804:1550:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1554::,2804:1554:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1558::,2804:1558:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:155c::,2804:155c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1560::,2804:1560:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1564::,2804:1564:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1568::,2804:1568:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:156c::,2804:156c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1570::,2804:1570:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1574::,2804:1574:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1578::,2804:1578:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:157c::,2804:157c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1580::,2804:1580:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1584::,2804:1584:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1588::,2804:1588:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:158c::,2804:158c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1590::,2804:1590:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1594::,2804:1594:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1598::,2804:1598:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:159c::,2804:159c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15a0::,2804:15a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15a4::,2804:15a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15a8::,2804:15a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15ac::,2804:15ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15b0::,2804:15b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15b4::,2804:15b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15b8::,2804:15b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15bc::,2804:15bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c0::,2804:15c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c4::,2804:15c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15c8::,2804:15c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15cc::,2804:15cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15d0::,2804:15d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15d4::,2804:15d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15d8::,2804:15d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15dc::,2804:15dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15e0::,2804:15e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15e4::,2804:15e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15e8::,2804:15e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15ec::,2804:15ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15f0::,2804:15f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15f4::,2804:15f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15f8::,2804:15f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:15fc::,2804:15fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1600::,2804:1600:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1604::,2804:1604:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1608::,2804:1608:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:160c::,2804:160c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1610::,2804:1610:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1614::,2804:1614:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1618::,2804:1618:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:161c::,2804:161c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1620::,2804:1620:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1624::,2804:1624:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1628::,2804:1628:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:162c::,2804:162c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1630::,2804:1630:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1634::,2804:1634:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1638::,2804:1638:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:163c::,2804:163c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1640::,2804:1640:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1644::,2804:1644:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1648::,2804:1648:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:164c::,2804:164c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1650::,2804:1650:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1654::,2804:1654:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1658::,2804:1658:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:165c::,2804:165c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1660::,2804:1660:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1664::,2804:1664:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1668::,2804:1668:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:166c::,2804:166c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1670::,2804:1670:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1674::,2804:1674:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1678::,2804:1678:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:167c::,2804:167c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1680::,2804:1680:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1684::,2804:1684:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1688::,2804:1688:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:168c::,2804:168c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1690::,2804:1690:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1694::,2804:1694:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1698::,2804:1698:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:169c::,2804:169c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16a0::,2804:16a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16a4::,2804:16a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16a8::,2804:16a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16ac::,2804:16ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16b0::,2804:16b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16b4::,2804:16b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16b8::,2804:16b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16bc::,2804:16bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c0::,2804:16c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c4::,2804:16c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16c8::,2804:16c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16cc::,2804:16cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16d0::,2804:16d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16d4::,2804:16d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16d8::,2804:16d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16dc::,2804:16dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16e0::,2804:16e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16e4::,2804:16e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16e8::,2804:16e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16ec::,2804:16ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16f0::,2804:16f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16f4::,2804:16f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16f8::,2804:16f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:16fc::,2804:16fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1700::,2804:1700:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1704::,2804:1704:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1708::,2804:1708:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:170c::,2804:170c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1710::,2804:1710:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1714::,2804:1714:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1718::,2804:1718:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:171c::,2804:171c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1720::,2804:1720:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1724::,2804:1724:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1728::,2804:1728:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:172c::,2804:172c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1730::,2804:1730:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1734::,2804:1734:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1738::,2804:1738:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:173c::,2804:173c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1740::,2804:1740:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1744::,2804:1744:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1748::,2804:1748:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:174c::,2804:174c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1750::,2804:1750:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1754::,2804:1754:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1758::,2804:1758:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:175c::,2804:175c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1760::,2804:1760:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1764::,2804:1764:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1768::,2804:1768:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:176c::,2804:176c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1770::,2804:1770:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1774::,2804:1774:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1778::,2804:1778:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:177c::,2804:177c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1780::,2804:1780:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1784::,2804:1784:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1788::,2804:1788:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:178c::,2804:178c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1790::,2804:1790:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1794::,2804:1794:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1798::,2804:1798:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:179c::,2804:179c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17a0::,2804:17a0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17a4::,2804:17a4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17a8::,2804:17a8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17ac::,2804:17ac:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17b0::,2804:17b0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17b4::,2804:17b4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17b8::,2804:17b8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17bc::,2804:17bc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c0::,2804:17c0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c4::,2804:17c4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17c8::,2804:17c8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17cc::,2804:17cc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17d0::,2804:17d0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17d4::,2804:17d4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17d8::,2804:17d8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17dc::,2804:17dc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17e0::,2804:17e0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17e4::,2804:17e4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17e8::,2804:17e8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17ec::,2804:17ec:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17f0::,2804:17f0:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17f4::,2804:17f4:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17f8::,2804:17f8:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:17fc::,2804:17fc:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1800::,2804:1800:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1804::,2804:1804:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1808::,2804:1808:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:180c::,2804:180c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1810::,2804:1810:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1814::,2804:1814:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1818::,2804:1818:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:181c::,2804:181c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1820::,2804:1820:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1824::,2804:1824:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1828::,2804:1828:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:182c::,2804:182c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1830::,2804:1830:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1834::,2804:1834:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1838::,2804:1838:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:183c::,2804:183c:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1840::,2804:1840:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1844::,2804:1844:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f00::,2804:1f00:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f02::,2804:1f02:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f04::,2804:1f04:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f06::,2804:1f06:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2804:1f08::,2804:1f08:ffff:ffff:ffff:ffff:ffff:ffff,BR
+2806::,2806:f:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:200::,2806:200:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:210::,2806:214:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:220::,2806:220:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:230::,2806:230:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:238::,2806:238::ffff:ffff:ffff:ffff:ffff,MX
+2806:238:10::,2806:238:10:ffff:ffff:ffff:ffff:ffff,MX
+2806:239::,2806:239:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:240::,2806:240:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:250::,2806:250:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:260::,2806:260:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:270::,2806:270:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:280::,2806:280:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:290::,2806:290:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2a0::,2806:2a0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2b0::,2806:2b0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2c0::,2806:2c0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2d0::,2806:2d0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2e0::,2806:2e0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:2f0::,2806:2f0:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:300::,2806:300:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:310::,2806:310:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:320::,2806:320:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:330::,2806:330:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:340::,2806:340:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:350::,2806:350:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:360::,2806:360:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:370::,2806:370:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2806:1000::,2806:10ff:ffff:ffff:ffff:ffff:ffff:ffff,MX
+2a00::,2a00:3ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:800::,2a00:87f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c00::,2a00:c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c08::,2a00:c08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c10::,2a00:c10:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c18::,2a00:c18:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c20::,2a00:c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c28::,2a00:c28:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c30::,2a00:c37:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:c38::,2a00:c38:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c40::,2a00:c40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:c50::,2a00:c50:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c58::,2a00:c58:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c60::,2a00:c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c68::,2a00:c68:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:c70::,2a00:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c78::,2a00:c78:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c80::,2a00:c80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:c88::,2a00:c88:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:c90::,2a00:c90:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:c98::,2a00:c98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ca0::,2a00:ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ca8::,2a00:ca8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:cb0::,2a00:cb0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cb8::,2a00:cb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:cc0::,2a00:cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cc8::,2a00:cc8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:cd0::,2a00:cd0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cd8::,2a00:cd8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ce0::,2a00:ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ce8::,2a00:ce8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:cf8::,2a00:cf8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:d00::,2a00:d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d08::,2a00:d08:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d10::,2a00:d10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d18::,2a00:d18:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d20::,2a00:d20:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:d28::,2a00:d28:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d30::,2a00:d30:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:d40::,2a00:d40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d50::,2a00:d50:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d58::,2a00:d58:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d60::,2a00:d60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d68::,2a00:d68:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d70::,2a00:d70:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d78::,2a00:d78:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d80::,2a00:d80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d88::,2a00:d88:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:d90::,2a00:d90:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:d98::,2a00:d98:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:da8::,2a00:da9:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:db0::,2a00:db0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:db8::,2a00:db8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dc0::,2a00:dc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:dc8::,2a00:dc8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dd0::,2a00:dd0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dd8::,2a00:dd8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:de8::,2a00:de8:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:df0::,2a00:df0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:df8::,2a00:df8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e00::,2a00:e00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e08::,2a00:e0f:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e10::,2a00:e10:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e18::,2a00:e18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e20::,2a00:e20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e28::,2a00:e28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e30::,2a00:e30:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e38::,2a00:e38:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e40::,2a00:e40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:e48::,2a00:e48:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e50::,2a00:e58:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e60::,2a00:e60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e68::,2a00:e68:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e70::,2a00:e70:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e78::,2a00:e7b:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e80::,2a00:e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e88::,2a00:e88:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e90::,2a00:e90:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:e98::,2a00:e98:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:ea0::,2a00:ea0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:ea8::,2a00:eaf:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:eb0::,2a00:eb0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:eb8::,2a00:eb8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ec0::,2a00:ec0:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a00:ec8::,2a00:ec8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ed0::,2a00:ed0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed8::,2a00:ed8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:ee0::,2a00:ee7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:ee8::,2a00:ee8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ef0::,2a00:ef0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:ef8::,2a00:ef8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:f00::,2a00:f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f08::,2a00:f08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f10::,2a00:f10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f18::,2a00:f18:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f20::,2a00:f20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f28::,2a00:f2f:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:f30::,2a00:f30:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f38::,2a00:f38:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:f40::,2a00:f47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f48::,2a00:f4f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f50::,2a00:f50:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:f58::,2a00:f58:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f60::,2a00:f60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f68::,2a00:f68:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f70::,2a00:f70:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f78::,2a00:f78:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:f80::,2a00:f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f88::,2a00:f88:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f90::,2a00:f90:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:f98::,2a00:f98:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:fa0::,2a00:fa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:fa8::,2a00:fa8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fb8::,2a00:fb8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fc0::,2a00:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:fc8::,2a00:fc8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:fd0::,2a00:fd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fd8::,2a00:fd8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fe0::,2a00:fe0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fe8::,2a00:fe8:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:ff0::,2a00:ff0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:ff8::,2a00:fff:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1000::,2a00:1000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1008::,2a00:1008:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1010::,2a00:1010:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1018::,2a00:1018:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1020::,2a00:1020:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1028::,2a00:1028:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1030::,2a00:1030:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1038::,2a00:1038:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:1040::,2a00:1040:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1048::,2a00:1048:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1050::,2a00:1050:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1058::,2a00:1058:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1060::,2a00:1060:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a00:1068::,2a00:1068:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1070::,2a00:1070:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1078::,2a00:1078:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1080::,2a00:1080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1088::,2a00:1088:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1098::,2a00:1098:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:10a0::,2a00:10a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:10a8::,2a00:10a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:10b0::,2a00:10b7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:10b8::,2a00:10b8:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:10c0::,2a00:10c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:10c8::,2a00:10c8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:10d0::,2a00:10d0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:10d8::,2a00:10d8:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:10e0::,2a00:10e0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:10e8::,2a00:10f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:10f8::,2a00:10f8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:1100::,2a00:1107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1108::,2a00:1108:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:1110::,2a00:1117:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1118::,2a00:1118:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1120::,2a00:1120:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1128::,2a00:1128:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:1130::,2a00:1130:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1138::,2a00:1138:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1140::,2a00:1140:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1148::,2a00:1148:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1150::,2a00:1150:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a00:1158::,2a00:1158:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1160::,2a00:1160:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1168::,2a00:1168:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1170::,2a00:1170:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1178::,2a00:1178:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1180::,2a00:1180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1188::,2a00:1188:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1190::,2a00:1190:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1198::,2a00:1198:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:11a8::,2a00:11a8:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a00:11b0::,2a00:11b0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:11b8::,2a00:11b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:11c0::,2a00:11c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:11c8::,2a00:11c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:11d0::,2a00:11d0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:11d8::,2a00:11d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:11e0::,2a00:11e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:11e8::,2a00:11e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:11f0::,2a00:11f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:11f8::,2a00:11f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1200::,2a00:1200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1208::,2a00:1208:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1210::,2a00:1210:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1218::,2a00:1218:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:1220::,2a00:1220:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1228::,2a00:1228:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1230::,2a00:1237:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1238::,2a00:1238:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1240::,2a00:1240:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1248::,2a00:1248:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1258::,2a00:1258:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1260::,2a00:1260:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1268::,2a00:1268:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1270::,2a00:1270:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:1278::,2a00:1278:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1280::,2a00:1280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1288::,2a00:1288:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1290::,2a00:1290:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1298::,2a00:1298:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:12a0::,2a00:12a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:12a8::,2a00:12a8:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:12b0::,2a00:12b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:12b8::,2a00:12b8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:12c0::,2a00:12c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12c8::,2a00:12c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:12d0::,2a00:12d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12d8::,2a00:12d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12e0::,2a00:12e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:12e8::,2a00:12e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:12f0::,2a00:12f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:12f8::,2a00:12f8:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:1300::,2a00:1300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1308::,2a00:1308:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1318::,2a00:1318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1320::,2a00:1320:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1328::,2a00:1328:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1338::,2a00:1338:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1340::,2a00:1340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1348::,2a00:1348:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1350::,2a00:1350:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1358::,2a00:135b:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:1360::,2a00:1360:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1368::,2a00:1368:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1370::,2a00:1370:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1378::,2a00:1378:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1380::,2a00:1380:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1388::,2a00:1388:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1390::,2a00:1390:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1398::,2a00:1398:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:13a0::,2a00:13a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:13a8::,2a00:13a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:13b0::,2a00:13b0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:13b8::,2a00:13b8:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:13c0::,2a00:13c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:13c8::,2a00:13c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:13d0::,2a00:13d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:13d8::,2a00:13df:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:13e0::,2a00:13e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:13e8::,2a00:13e8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:13f0::,2a00:13f0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:13f8::,2a00:13f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1400::,2a00:1400:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1408::,2a00:1408:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1410::,2a00:1410:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1418::,2a00:1418:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1420::,2a00:1420:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1428::,2a00:1428:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:1430::,2a00:1430:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1440::,2a00:1440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1448::,2a00:1448:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1450::,2a00:1457:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1458::,2a00:1458:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1460::,2a00:1460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1468::,2a00:1468:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1470::,2a00:1470:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1478::,2a00:1478:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1480::,2a00:1480:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:1488::,2a00:1488:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1490::,2a00:1490:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1498::,2a00:1498:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:14a0::,2a00:14a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:14a8::,2a00:14a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:14b0::,2a00:14b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:14b8::,2a00:14b8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:14c0::,2a00:14c0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:14c8::,2a00:14c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:14d0::,2a00:14d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:14d8::,2a00:14d8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:14e0::,2a00:14e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:14e8::,2a00:14ef:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:14f0::,2a00:14f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:14f8::,2a00:14f8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1500::,2a00:1500:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:1508::,2a00:1508:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1510::,2a00:1510:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1518::,2a00:1518:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1520::,2a00:1520:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1528::,2a00:1528:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1530::,2a00:1531:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1538::,2a00:1538:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1540::,2a00:1540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1548::,2a00:1548:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1550::,2a00:1550:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1558::,2a00:1558:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1560::,2a00:1560:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1568::,2a00:1568:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1570::,2a00:1570:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1578::,2a00:1578:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1580::,2a00:1580:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1588::,2a00:1588:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1590::,2a00:1590:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1598::,2a00:159f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:15a0::,2a00:15a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:15a8::,2a00:15a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:15b0::,2a00:15b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:15b8::,2a00:15b8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:15c0::,2a00:15c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:15c8::,2a00:15c8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:15d0::,2a00:15d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:15e0::,2a00:15e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:15e8::,2a00:15e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:15f0::,2a00:15f0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:15f8::,2a00:15f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1600::,2a00:1607:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1610::,2a00:1610:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1618::,2a00:1618:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1620::,2a00:1620:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1628::,2a00:1628:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1630::,2a00:1637:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1638::,2a00:1638:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1640::,2a00:1640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1648::,2a00:1648:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1650::,2a00:1650:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:1660::,2a00:1660:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1668::,2a00:1668:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1670::,2a00:1670:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1678::,2a00:1678:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1680::,2a00:1680:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1688::,2a00:1688:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1690::,2a00:1690:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1698::,2a00:1698:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:16a0::,2a00:16a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:16a8::,2a00:16a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:16b0::,2a00:16b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:16c8::,2a00:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:16d0::,2a00:16d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:16d8::,2a00:16d8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:16e0::,2a00:16e0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:16e8::,2a00:16e8:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:16f0::,2a00:16f0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:16f8::,2a00:16f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1700::,2a00:1700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1708::,2a00:1708:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1710::,2a00:1710:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1718::,2a00:1718:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1720::,2a00:1720:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1728::,2a00:1728:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:1730::,2a00:1730:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1748::,2a00:1748:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1750::,2a00:1750:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1758::,2a00:1758:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1760::,2a00:1760:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a00:1768::,2a00:1768:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1778::,2a00:1778:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1780::,2a00:1780:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:1788::,2a00:1788:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1790::,2a00:1790:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1798::,2a00:1798:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:17a0::,2a00:17a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:17a8::,2a00:17a8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:17b0::,2a00:17b0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:17b8::,2a00:17b8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:17c0::,2a00:17c0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:17c8::,2a00:17c8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:17d0::,2a00:17d0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:17d8::,2a00:17d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:17e0::,2a00:17e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:17e8::,2a00:17e8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:17f0::,2a00:17f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:17f8::,2a00:17f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1800::,2a00:1800:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1808::,2a00:1808:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1818::,2a00:1818:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1828::,2a00:1828:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1830::,2a00:1830:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1838::,2a00:1838:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1840::,2a00:1840:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:1848::,2a00:1848:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1850::,2a00:1850:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a00:1858::,2a00:1858:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:1860::,2a00:1860:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1868::,2a00:1868:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1878::,2a00:1878:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1880::,2a00:1880:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1888::,2a00:1888:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1890::,2a00:1890:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1898::,2a00:1898:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:18a0::,2a00:18a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:18a8::,2a00:18a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:18b0::,2a00:18b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:18b8::,2a00:18b8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:18c0::,2a00:18c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:18c8::,2a00:18c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:18d0::,2a00:18d0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:18d8::,2a00:18d8:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:18e0::,2a00:18e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:18e8::,2a00:18e8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:18f0::,2a00:18f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:18f8::,2a00:18f8:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1900::,2a00:1900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1908::,2a00:1908:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1910::,2a00:1910:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1918::,2a00:191f:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1920::,2a00:1920:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1928::,2a00:1928:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1930::,2a00:1930:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1938::,2a00:1938:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1940::,2a00:1940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1948::,2a00:1948:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1950::,2a00:1950:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1958::,2a00:1958:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1960::,2a00:1960:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1968::,2a00:1968:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1970::,2a00:1970:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1978::,2a00:1978:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1980::,2a00:1980:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1988::,2a00:1988:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1990::,2a00:1990:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1998::,2a00:1998:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:19a0::,2a00:19a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:19a8::,2a00:19a8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:19b0::,2a00:19b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19b8::,2a00:19b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:19c0::,2a00:19c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:19c8::,2a00:19c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19d0::,2a00:19d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19d8::,2a00:19d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:19e0::,2a00:19e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:19e8::,2a00:19e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:19f0::,2a00:19f0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:19f8::,2a00:19f8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1a00::,2a00:1a00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1a08::,2a00:1a08:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:1a10::,2a00:1a10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a18::,2a00:1a18:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1a20::,2a00:1a20:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1a28::,2a00:1a28:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1a30::,2a00:1a30:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a38::,2a00:1a38:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1a40::,2a00:1a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1a48::,2a00:1a48:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a50::,2a00:1a50:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1a58::,2a00:1a58:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1a60::,2a00:1a60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1a68::,2a00:1a68:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1a70::,2a00:1a70:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1a78::,2a00:1a78:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1a80::,2a00:1a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a88::,2a00:1a88:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1a90::,2a00:1a90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1a98::,2a00:1a98:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:1aa0::,2a00:1aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1aa8::,2a00:1aa8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1ab0::,2a00:1ab0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1ab8::,2a00:1ab8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1ac0::,2a00:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1ac8::,2a00:1ac8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1ad0::,2a00:1ad0:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:1ad8::,2a00:1ad8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1ae0::,2a00:1ae0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1ae8::,2a00:1ae8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1af0::,2a00:1af7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1af8::,2a00:1af8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b00::,2a00:1b00:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:1b08::,2a00:1b08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b10::,2a00:1b10:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1b18::,2a00:1b18:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1b20::,2a00:1b20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1b28::,2a00:1b28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1b30::,2a00:1b30:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b38::,2a00:1b38:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1b40::,2a00:1b40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1b48::,2a00:1b48:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b50::,2a00:1b50:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1b58::,2a00:1b58:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1b60::,2a00:1b60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1b68::,2a00:1b68:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b70::,2a00:1b70:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1b78::,2a00:1b78:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1b80::,2a00:1b80:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:1b88::,2a00:1b88:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1b90::,2a00:1b90:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1b98::,2a00:1b98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1ba0::,2a00:1ba0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1ba8::,2a00:1ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1bb0::,2a00:1bb0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1bb8::,2a00:1bb8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:1bc0::,2a00:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1bc8::,2a00:1bc8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1bd0::,2a00:1bd0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1bd8::,2a00:1bd8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1be0::,2a00:1be0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1be8::,2a00:1be8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1bf0::,2a00:1bf0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1bf8::,2a00:1bf8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1c00::,2a00:1c00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1c08::,2a00:1c08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1c10::,2a00:1c10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1c18::,2a00:1c1f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1c20::,2a00:1c20:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1c28::,2a00:1c28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c30::,2a00:1c30:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1c38::,2a00:1c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1c40::,2a00:1c40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1c48::,2a00:1c48:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c50::,2a00:1c50:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1c58::,2a00:1c58:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1c60::,2a00:1c60:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:1c68::,2a00:1c68:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1c70::,2a00:1c70:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c78::,2a00:1c78:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c80::,2a00:1c80:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1c88::,2a00:1c88:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1c90::,2a00:1c90:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1c98::,2a00:1c98:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1ca0::,2a00:1ca0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1ca8::,2a00:1ca8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1cb0::,2a00:1cb0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1cb8::,2a00:1cb8:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:1cc0::,2a00:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a00:1cc8::,2a00:1cc8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1cd0::,2a00:1cd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1cd8::,2a00:1cd8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1ce0::,2a00:1ce0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1ce8::,2a00:1ce8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1cf0::,2a00:1cf0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1cf8::,2a00:1cf8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:1d00::,2a00:1d00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1d08::,2a00:1d08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1d10::,2a00:1d10:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:1d18::,2a00:1d18:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1d20::,2a00:1d27:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1d28::,2a00:1d28:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1d30::,2a00:1d30:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1d38::,2a00:1d38:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1d40::,2a00:1d40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1d48::,2a00:1d48:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1d50::,2a00:1d50:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1d58::,2a00:1d58:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1d60::,2a00:1d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1d68::,2a00:1d68:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1d70::,2a00:1d70:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:1d78::,2a00:1d78:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1d80::,2a00:1d80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1d88::,2a00:1d88:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1d90::,2a00:1d90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1da0::,2a00:1da0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1da8::,2a00:1da8:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:1db0::,2a00:1db0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1db8::,2a00:1db8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1dc0::,2a00:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:1dc8::,2a00:1dc8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1dd0::,2a00:1dd0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1dd8::,2a00:1ddf:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:1de0::,2a00:1de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1de8::,2a00:1de8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1df0::,2a00:1df0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1df8::,2a00:1df8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1e00::,2a00:1e00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e08::,2a00:1e08:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1e10::,2a00:1e10:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e18::,2a00:1e18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1e20::,2a00:1e20:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1e28::,2a00:1e28:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1e30::,2a00:1e30:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1e38::,2a00:1e38:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1e40::,2a00:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:1e48::,2a00:1e48:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e50::,2a00:1e50:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1e58::,2a00:1e58:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1e60::,2a00:1e60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1e68::,2a00:1e68:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e70::,2a00:1e70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1e78::,2a00:1e78:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1e80::,2a00:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1e88::,2a00:1e88:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1e90::,2a00:1e90:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1e98::,2a00:1e98:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:1ea0::,2a00:1ea0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1ea8::,2a00:1ea8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1eb0::,2a00:1eb0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:1eb8::,2a00:1eb8:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:1ec0::,2a00:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:1ec8::,2a00:1ecf:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1ed0::,2a00:1ed0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:1ed8::,2a00:1edf:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:1ee0::,2a00:1ee0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1ee8::,2a00:1ee8:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:1ef0::,2a00:1ef0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:1ef8::,2a00:1ef8:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1f00::,2a00:1f00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1f08::,2a00:1f08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f10::,2a00:1f10:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1f18::,2a00:1f18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:1f20::,2a00:1f20:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:1f28::,2a00:1f28:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:1f30::,2a00:1f30:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1f38::,2a00:1f38:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f40::,2a00:1f40:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:1f48::,2a00:1f48:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:1f50::,2a00:1f50:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:1f58::,2a00:1f58:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1f60::,2a00:1f60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1f68::,2a00:1f68:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:1f70::,2a00:1f70:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1f78::,2a00:1f78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1f80::,2a00:1f80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:1f88::,2a00:1f88:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:1f90::,2a00:1f90:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:1f98::,2a00:1f98:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:1fa0::,2a00:1fa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1fa8::,2a00:1fa8:ffff:ffff:ffff:ffff:ffff:ffff,GL
+2a00:1fb0::,2a00:1fb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1fb8::,2a00:1fb8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:1fc0::,2a00:1fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:1fd0::,2a00:1fd0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:1fd8::,2a00:1fd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1fe0::,2a00:1fe0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:1fe8::,2a00:1fe8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:1ff0::,2a00:1ff0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:1ff8::,2a00:1ff8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:2000::,2a00:23ff:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4000::,2a00:4000:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:4040::,2a00:4040:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4060::,2a00:4060:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4080::,2a00:4087:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:40a0::,2a00:40a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:40c0::,2a00:40c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:40e0::,2a00:40e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4100::,2a00:4100:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4120::,2a00:4120:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:4160::,2a00:4160:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4180::,2a00:4180:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:41a0::,2a00:41a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:41c0::,2a00:41c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:41e0::,2a00:41e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4200::,2a00:4200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4220::,2a00:4220:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4240::,2a00:4240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4260::,2a00:4260:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:4280::,2a00:4280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:42a0::,2a00:42a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:42c0::,2a00:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:42e0::,2a00:42e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:4300::,2a00:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4320::,2a00:4320:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4340::,2a00:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4360::,2a00:4360:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:4380::,2a00:4380:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:43a0::,2a00:43a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:43c0::,2a00:43c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:43e0::,2a00:43e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4400::,2a00:4400:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:4420::,2a00:4420:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4440::,2a00:4440:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:4460::,2a00:4460:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:4480::,2a00:4480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:44a0::,2a00:44a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:44c0::,2a00:44c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:44e0::,2a00:44e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4500::,2a00:4500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4520::,2a00:4520:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a00:4540::,2a00:4540:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4560::,2a00:4560:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4580::,2a00:4580:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:45a0::,2a00:45a0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:45c0::,2a00:45c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:45e0::,2a00:45e0:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a00:4600::,2a00:4600:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:4620::,2a00:4620:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:4640::,2a00:4640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4660::,2a00:4660:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4680::,2a00:4680:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:46a0::,2a00:46a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:46c0::,2a00:46c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:46e0::,2a00:46e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4700::,2a00:4700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4720::,2a00:4720:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4740::,2a00:4740:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:4760::,2a00:4760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4780::,2a00:4780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:47a0::,2a00:47a0:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:47c0::,2a00:47c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:47e0::,2a00:47e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4800::,2a00:4807:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:4840::,2a00:4840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4860::,2a00:4860:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4880::,2a00:4880:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:48a0::,2a00:48a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:48c0::,2a00:48c0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:48e0::,2a00:48e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:4900::,2a00:4900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4920::,2a00:4920:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4940::,2a00:4940:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:4960::,2a00:4960:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4980::,2a00:4987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:49c0::,2a00:49c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:49e0::,2a00:49e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4a00::,2a00:4a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4a20::,2a00:4a20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4a40::,2a00:4a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:4a60::,2a00:4a60:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:4a80::,2a00:4a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4aa0::,2a00:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4ac0::,2a00:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4ae0::,2a00:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4b00::,2a00:4b00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4b40::,2a00:4b40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:4b60::,2a00:4b60:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:4b80::,2a00:4b80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4ba0::,2a00:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4bc0::,2a00:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:4be0::,2a00:4be0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:4c00::,2a00:4c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4c20::,2a00:4c20:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:4c40::,2a00:4c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4c60::,2a00:4c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4c80::,2a00:4c87:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:4ca0::,2a00:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4cc0::,2a00:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:4ce0::,2a00:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4d00::,2a00:4d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:4d20::,2a00:4d20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4d40::,2a00:4d40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4d60::,2a00:4d60:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:4d80::,2a00:4d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4da0::,2a00:4da0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:4dc0::,2a00:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:4de0::,2a00:4de0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4e00::,2a00:4e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4e20::,2a00:4e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:4e40::,2a00:4e40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:4e60::,2a00:4e60:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:4e80::,2a00:4e80:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:4ea0::,2a00:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:4ec0::,2a00:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:4f00::,2a00:4f00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:4f20::,2a00:4f20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:4f40::,2a00:4f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4f60::,2a00:4f60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:4f80::,2a00:4f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:4fa0::,2a00:4fa7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:4fc0::,2a00:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:4fe0::,2a00:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:5000::,2a00:5000:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:5040::,2a00:5040:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:5060::,2a00:5060:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5080::,2a00:5080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:50a0::,2a00:50a0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:50c0::,2a00:50c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:50e0::,2a00:50e7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:5100::,2a00:5100:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5120::,2a00:5120:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5140::,2a00:5140:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5160::,2a00:5160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5180::,2a00:5180:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:51c0::,2a00:51c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:51e0::,2a00:51e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:5200::,2a00:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5220::,2a00:5220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5240::,2a00:5240:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:5260::,2a00:5260:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5280::,2a00:5280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:52a0::,2a00:52a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:52c0::,2a00:52c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:52e0::,2a00:52e0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:5300::,2a00:5300:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5320::,2a00:5320:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:5340::,2a00:5340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5360::,2a00:5360:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:5380::,2a00:5380:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:53a0::,2a00:53a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:53c0::,2a00:53c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:53e0::,2a00:53e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5400::,2a00:5400:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:5420::,2a00:5420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5440::,2a00:5440:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a00:5460::,2a00:5460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5480::,2a00:5480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:54a0::,2a00:54a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:54c0::,2a00:54c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:54e0::,2a00:54e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5500::,2a00:5500:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:5520::,2a00:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5540::,2a00:5540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5560::,2a00:5560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5580::,2a00:5580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:55a0::,2a00:55a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:55c0::,2a00:55c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:55e0::,2a00:55e0:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a00:5600::,2a00:5600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5620::,2a00:5620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5640::,2a00:5647:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5680::,2a00:5680:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:56a0::,2a00:56a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:56c0::,2a00:56c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:56e0::,2a00:56e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5700::,2a00:5700:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:5720::,2a00:5720:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5740::,2a00:5740:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:5760::,2a00:5760:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5780::,2a00:5780:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:57a0::,2a00:57a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:57c0::,2a00:57c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:57e0::,2a00:57e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5800::,2a00:5800:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5820::,2a00:5820:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5840::,2a00:5840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5860::,2a00:5860:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5880::,2a00:5887:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:58e0::,2a00:58e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5900::,2a00:5900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5920::,2a00:5920:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:5940::,2a00:5940:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:5960::,2a00:5960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5980::,2a00:5980:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:59a0::,2a00:59a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:59c0::,2a00:59c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:59e0::,2a00:59e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5a00::,2a00:5a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5a20::,2a00:5a20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:5a40::,2a00:5a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5a60::,2a00:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5a80::,2a00:5a80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5aa0::,2a00:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:5ac0::,2a00:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:5ae0::,2a00:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:5b00::,2a00:5b07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5b20::,2a00:5b20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5b40::,2a00:5b40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5b60::,2a00:5b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5b80::,2a00:5b87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:5ba0::,2a00:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5bc0::,2a00:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5be0::,2a00:5be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5c00::,2a00:5c00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:5c20::,2a00:5c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:5c40::,2a00:5c47:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:5c60::,2a00:5c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5c80::,2a00:5c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5ca0::,2a00:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:5cc0::,2a00:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5ce0::,2a00:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5d00::,2a00:5d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:5d20::,2a00:5d20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:5d40::,2a00:5d40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:5d60::,2a00:5d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5d80::,2a00:5d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5da0::,2a00:5da0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:5dc0::,2a00:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:5de0::,2a00:5de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5e00::,2a00:5e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5e20::,2a00:5e20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5e40::,2a00:5e40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:5e60::,2a00:5e60:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:5e80::,2a00:5e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:5ea0::,2a00:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:5ec0::,2a00:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:5ee0::,2a00:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:5f00::,2a00:5f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:5f20::,2a00:5f20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:5f40::,2a00:5f47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5fa0::,2a00:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:5fc0::,2a00:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:5fe0::,2a00:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6000::,2a00:6000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6020::,2a00:6020:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6040::,2a00:6040:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6060::,2a00:6060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6080::,2a00:6080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:60a0::,2a00:60a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:60e0::,2a00:60e0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:6100::,2a00:6100:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6120::,2a00:6120:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:6140::,2a00:6140:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6160::,2a00:6160:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6180::,2a00:6180:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:61a0::,2a00:61a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:61c0::,2a00:61c7:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:61e0::,2a00:61e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6200::,2a00:6200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6220::,2a00:6220:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:6240::,2a00:6240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6260::,2a00:6260:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:6280::,2a00:6280:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:62a0::,2a00:62a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:62c0::,2a00:62c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:62e0::,2a00:62e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6300::,2a00:6300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6320::,2a00:6320:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6340::,2a00:6340:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:6360::,2a00:6360:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6380::,2a00:6380:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:63a0::,2a00:63a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:63c0::,2a00:63c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:63e0::,2a00:63e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6400::,2a00:6400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6420::,2a00:6420:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6440::,2a00:6440:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a00:6460::,2a00:6460:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6480::,2a00:6480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:64a0::,2a00:64a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:64c0::,2a00:64c0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:64e0::,2a00:64e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:6500::,2a00:6500:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:6520::,2a00:6520:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6540::,2a00:6540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6560::,2a00:6560:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6580::,2a00:6580:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:65a0::,2a00:65a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:65c0::,2a00:65c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:65e0::,2a00:65e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6600::,2a00:6600:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a00:6620::,2a00:6620:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:6640::,2a00:6640:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6660::,2a00:6660:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:6680::,2a00:6680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:66a0::,2a00:66a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:66e0::,2a00:66e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6720::,2a00:6720:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6740::,2a00:6740:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:6760::,2a00:6760:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6780::,2a00:6780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:67a0::,2a00:67a7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:67c0::,2a00:67c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:67e0::,2a00:67e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6800::,2a00:6800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6820::,2a00:6820:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6840::,2a00:6840:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:6860::,2a00:6867:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:68a0::,2a00:68a0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:68c0::,2a00:68c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:68e0::,2a00:68e0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:6900::,2a00:6900:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6920::,2a00:6920:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:6940::,2a00:6940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6960::,2a00:6960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:6980::,2a00:6980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:69a0::,2a00:69a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:69c0::,2a00:69c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:69e0::,2a00:69e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6a00::,2a00:6a00:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:6a20::,2a00:6a20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:6a40::,2a00:6a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6a60::,2a00:6a60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6a80::,2a00:6a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6ac0::,2a00:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6ae0::,2a00:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:6b00::,2a00:6b00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6b20::,2a00:6b20:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:6b40::,2a00:6b40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6b60::,2a00:6b60:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:6b80::,2a00:6b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:6bc0::,2a00:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:6be0::,2a00:6be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6c00::,2a00:6c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6c20::,2a00:6c20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6c40::,2a00:6c40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:6c60::,2a00:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6c80::,2a00:6c80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6ca0::,2a00:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:6ce0::,2a00:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6d20::,2a00:6d20:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:6d40::,2a00:6d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6d60::,2a00:6d60:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:6d80::,2a00:6d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:6da0::,2a00:6da0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:6dc0::,2a00:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:6de0::,2a00:6de0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6e00::,2a00:6e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6e20::,2a00:6e20:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:6e40::,2a00:6e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:6e60::,2a00:6e60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6e80::,2a00:6e80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:6ea0::,2a00:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6ec0::,2a00:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:6f00::,2a00:6f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:6f20::,2a00:6f20:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:6f40::,2a00:6f40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:6f60::,2a00:6f60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6f80::,2a00:6f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:6fa0::,2a00:6fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:6fc0::,2a00:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:6fe0::,2a00:6fe0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7000::,2a00:7000:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:7020::,2a00:7020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7040::,2a00:7040:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:7060::,2a00:7060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7080::,2a00:7080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:70a0::,2a00:70a0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:70c0::,2a00:70c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:70e0::,2a00:70e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7100::,2a00:7100:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7120::,2a00:7120:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7140::,2a00:7147:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7160::,2a00:7160:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:7180::,2a00:7180:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:71a0::,2a00:71a0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:71c0::,2a00:71c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:71e0::,2a00:71e0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:7200::,2a00:7200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7220::,2a00:7220:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:7240::,2a00:7243:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7260::,2a00:7260:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7280::,2a00:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:72a0::,2a00:72a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:72e0::,2a00:72e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7300::,2a00:7300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:7320::,2a00:7327:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7340::,2a00:7340:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:7360::,2a00:7360:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:7380::,2a00:7380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:73a0::,2a00:73a0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:73c0::,2a00:73c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:73e0::,2a00:73e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7400::,2a00:7400:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:7420::,2a00:7420:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7440::,2a00:7447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7460::,2a00:7460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7480::,2a00:7480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:74a0::,2a00:74a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:74c0::,2a00:74c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:74e0::,2a00:74e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7500::,2a00:7500:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7520::,2a00:7520:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:7540::,2a00:7540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7560::,2a00:7560:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:7580::,2a00:7580:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:75a0::,2a00:75a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:75c0::,2a00:75c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:75e0::,2a00:75e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7600::,2a00:7600:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:7620::,2a00:7620:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:7640::,2a00:7640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7660::,2a00:7660:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:7680::,2a00:7680:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:76a0::,2a00:76a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:76c0::,2a00:76c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:76e0::,2a00:76e0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:7700::,2a00:7700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7720::,2a00:7720:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7740::,2a00:7740:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7760::,2a00:7767:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7780::,2a00:7780:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:77a0::,2a00:77a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:77c0::,2a00:77c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:77e0::,2a00:77e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7800::,2a00:7800:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:7820::,2a00:7820:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7840::,2a00:7840:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:7860::,2a00:7860:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7880::,2a00:7880:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:78a0::,2a00:78a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:78c0::,2a00:78c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:78e0::,2a00:78e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7900::,2a00:7900:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7920::,2a00:7920:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7940::,2a00:7940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7960::,2a00:7960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7980::,2a00:7980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:79a0::,2a00:79a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:79c0::,2a00:79c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:79e0::,2a00:79e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:7a00::,2a00:7a00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:7a20::,2a00:7a20:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:7a40::,2a00:7a40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7a60::,2a00:7a60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7a80::,2a00:7a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:7ac0::,2a00:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7ae0::,2a00:7ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7b00::,2a00:7b07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7b40::,2a00:7b40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:7b60::,2a00:7b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7b80::,2a00:7b80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7ba0::,2a00:7ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7be0::,2a00:7be0:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a00:7c00::,2a00:7c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7c20::,2a00:7c20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7c40::,2a00:7c40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7c60::,2a00:7c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7c80::,2a00:7c80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7ca0::,2a00:7ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:7cc0::,2a00:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7ce0::,2a00:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7d00::,2a00:7d00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7d20::,2a00:7d20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:7d40::,2a00:7d40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:7d60::,2a00:7d60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7d80::,2a00:7d80:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:7da0::,2a00:7da0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:7dc0::,2a00:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7de0::,2a00:7de0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:7e00::,2a00:7e00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:7e20::,2a00:7e20:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:7e40::,2a00:7e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7e60::,2a00:7e60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7e80::,2a00:7e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:7ea0::,2a00:7ea0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:7ec0::,2a00:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7f00::,2a00:7f00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:7f20::,2a00:7f20:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:7f40::,2a00:7f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:7f60::,2a00:7f60:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:7f80::,2a00:7f87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:7fc0::,2a00:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:7fe0::,2a00:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8020::,2a00:8020:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8040::,2a00:8040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8060::,2a00:8060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8080::,2a00:8080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:80a0::,2a00:80a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:80c0::,2a00:80c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:80e0::,2a00:80e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8100::,2a00:8100:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:8120::,2a00:8120:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8140::,2a00:8140:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8160::,2a00:8160:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:8180::,2a00:8180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:81a0::,2a00:81a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:81c0::,2a00:81c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:81e0::,2a00:81e0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:8200::,2a00:8200:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:8220::,2a00:8220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:8240::,2a00:8240:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8260::,2a00:8260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8280::,2a00:8280:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:82a0::,2a00:82a0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:82c0::,2a00:82c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:82e0::,2a00:82e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8300::,2a00:8300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8320::,2a00:8320:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:8340::,2a00:8340:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:8360::,2a00:8360:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:8380::,2a00:8380:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:83a0::,2a00:83a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:83e0::,2a00:83e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8400::,2a00:8400:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:8420::,2a00:8420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8440::,2a00:8440:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8460::,2a00:8460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8480::,2a00:8480:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:84a0::,2a00:84a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:84c0::,2a00:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:84e0::,2a00:84e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8500::,2a00:8500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8520::,2a00:8520:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:8540::,2a00:8540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8560::,2a00:8560:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:8580::,2a00:8580:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:85a0::,2a00:85a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:85c0::,2a00:85c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:85e0::,2a00:85e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8600::,2a00:8600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8640::,2a00:8647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8660::,2a00:8660:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8680::,2a00:8680:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:86a0::,2a00:86a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:86c0::,2a00:86c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:86e0::,2a00:86e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8700::,2a00:8700:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:8720::,2a00:8720:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:8740::,2a00:8740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8760::,2a00:8760:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8780::,2a00:8780:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:87a0::,2a00:87a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:87c0::,2a00:87c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:87e0::,2a00:87e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8800::,2a00:8800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8820::,2a00:8820:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:8840::,2a00:8840:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a00:8880::,2a00:8880:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:88a0::,2a00:88a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:88c0::,2a00:88c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:88e0::,2a00:88e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8900::,2a00:8900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8920::,2a00:8920:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8940::,2a00:8940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8960::,2a00:8960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8980::,2a00:8980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:89a0::,2a00:89a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:89c0::,2a00:89c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:89e0::,2a00:89e0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:8a00::,2a00:8a00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:8a20::,2a00:8a20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8a40::,2a00:8a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8a80::,2a00:8a87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8aa0::,2a00:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8ac0::,2a00:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:8ae0::,2a00:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8b00::,2a00:8b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8b20::,2a00:8b20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8b60::,2a00:8b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8b80::,2a00:8b80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:8ba0::,2a00:8ba0:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:8bc0::,2a00:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8be0::,2a00:8be0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8c00::,2a00:8c00:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:8c20::,2a00:8c20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8c40::,2a00:8c40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8c60::,2a00:8c60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8c80::,2a00:8c80:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:8ca0::,2a00:8ca0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:8cc0::,2a00:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8ce0::,2a00:8ce0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:8d00::,2a00:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:8d40::,2a00:8d40:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:8d60::,2a00:8d60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:8d80::,2a00:8d80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:8dc0::,2a00:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:8de0::,2a00:8de0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a00:8e00::,2a00:8e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8e20::,2a00:8e20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8e40::,2a00:8e40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8e60::,2a00:8e60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8ea0::,2a00:8ea0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:8ec0::,2a00:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:8ee0::,2a00:8ee7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:8f00::,2a00:8f00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:8f20::,2a00:8f20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8f40::,2a00:8f40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8f60::,2a00:8f60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:8fa0::,2a00:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8fc0::,2a00:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:8fe0::,2a00:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9000::,2a00:9000:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:9020::,2a00:9020:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:9040::,2a00:9040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9060::,2a00:9060:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9080::,2a00:9080:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:90a0::,2a00:90a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:90c0::,2a00:90c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9100::,2a00:9100:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:9120::,2a00:9120:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a00:9140::,2a00:9140:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:9160::,2a00:9160:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9180::,2a00:9180:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:91a0::,2a00:91a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:91c0::,2a00:91c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:91e0::,2a00:91e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:9200::,2a00:9200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9220::,2a00:9220:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9240::,2a00:9240:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:9260::,2a00:9260:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:9280::,2a00:9280:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:92a0::,2a00:92a7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:92c0::,2a00:92c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:92e0::,2a00:92e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9300::,2a00:93ff:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2a00:9400::,2a00:9400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9420::,2a00:9420:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:9440::,2a00:9440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9460::,2a00:9467:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9480::,2a00:9480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:94a0::,2a00:94a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:94c0::,2a00:94c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:94e0::,2a00:94e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9500::,2a00:9500:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:9520::,2a00:9520:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9540::,2a00:9540:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:9560::,2a00:9560:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:9580::,2a00:9580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:95a0::,2a00:95a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:95c0::,2a00:95c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:95e0::,2a00:95e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9600::,2a00:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9620::,2a00:9620:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:9640::,2a00:9640:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9680::,2a00:9680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:96a0::,2a00:96a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:96c0::,2a00:96c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:96e0::,2a00:96e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9700::,2a00:9700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9720::,2a00:9720:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9740::,2a00:9740:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9760::,2a00:9760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:9780::,2a00:9780:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:97a0::,2a00:97a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:97c0::,2a00:97c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:97e0::,2a00:97e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:9800::,2a00:9800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9820::,2a00:9820:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9840::,2a00:9840:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9860::,2a00:9860:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:9880::,2a00:9880:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:98a0::,2a00:98a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:98c0::,2a00:98c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:98e0::,2a00:98e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:9900::,2a00:9900:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:9920::,2a00:9920:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:9980::,2a00:9980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:99a0::,2a00:99a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:99c0::,2a00:99c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:99e0::,2a00:99e7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9a00::,2a00:9a00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9a20::,2a00:9a20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9a40::,2a00:9a40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9a60::,2a00:9a60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9a80::,2a00:9a80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9aa0::,2a00:9aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9ac0::,2a00:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:9ae0::,2a00:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9b00::,2a00:9b00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:9b40::,2a00:9b40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:9b60::,2a00:9b60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9b80::,2a00:9b80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:9ba0::,2a00:9ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9bc0::,2a00:9bc0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:9be0::,2a00:9be0:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:9c00::,2a00:9c00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:9c20::,2a00:9c20:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:9c40::,2a00:9c40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9c80::,2a00:9c80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:9ca0::,2a00:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9cc0::,2a00:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9ce0::,2a00:9ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9d00::,2a00:9d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9d20::,2a00:9d20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:9d40::,2a00:9d40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9d60::,2a00:9d60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9d80::,2a00:9d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9dc0::,2a00:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9de0::,2a00:9de0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9e00::,2a00:9e07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9e20::,2a00:9e20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9e40::,2a00:9e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:9e60::,2a00:9e60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:9e80::,2a00:9e80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:9ea0::,2a00:9ea0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9ec0::,2a00:9ec0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:9ee0::,2a00:9ee0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:9f00::,2a00:9f00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:9f20::,2a00:9f20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:9f40::,2a00:9f40:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:9f60::,2a00:9f60:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:9f80::,2a00:9f80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:9fa0::,2a00:9fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:9fc0::,2a00:9fc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:9fe0::,2a00:9fe7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a000::,2a00:a000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a020::,2a00:a020:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a040::,2a00:a040:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:a060::,2a00:a060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a080::,2a00:a080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a0a0::,2a00:a0a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a0c0::,2a00:a0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a0e0::,2a00:a0e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a100::,2a00:a100:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:a120::,2a00:a120:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a140::,2a00:a140:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:a160::,2a00:a160:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:a180::,2a00:a180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a1a0::,2a00:a1a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:a1c0::,2a00:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:a1e0::,2a00:a1e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a200::,2a00:a200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a220::,2a00:a220:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a240::,2a00:a240:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:a260::,2a00:a260:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:a280::,2a00:a280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a2a0::,2a00:a2a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a2c0::,2a00:a2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a2e0::,2a00:a2e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a300::,2a00:a300:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a320::,2a00:a320:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a340::,2a00:a340:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a360::,2a00:a360:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:a380::,2a00:a380:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:a3a0::,2a00:a3a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a3c0::,2a00:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a3e0::,2a00:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a400::,2a00:a400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a420::,2a00:a420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a440::,2a00:a440:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:a460::,2a00:a460:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:a480::,2a00:a480:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a4a0::,2a00:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a4c0::,2a00:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a4e0::,2a00:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a500::,2a00:a500:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a520::,2a00:a520:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a540::,2a00:a540:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:a560::,2a00:a560:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:a580::,2a00:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a5a0::,2a00:a5a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:a5c0::,2a00:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a5e0::,2a00:a5e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a600::,2a00:a600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a620::,2a00:a620:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a640::,2a00:a640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a660::,2a00:a660:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a680::,2a00:a680:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a6a0::,2a00:a6a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:a6c0::,2a00:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a6e0::,2a00:a6e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a700::,2a00:a700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a720::,2a00:a720:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a740::,2a00:a740:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:a760::,2a00:a760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:a780::,2a00:a780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a7a0::,2a00:a7a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a7c0::,2a00:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a7e0::,2a00:a7e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:a800::,2a00:a800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:a820::,2a00:a820:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a840::,2a00:a840:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:a860::,2a00:a860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a880::,2a00:a880:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:a8a0::,2a00:a8a0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:a8e0::,2a00:a8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a900::,2a00:a900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:a920::,2a00:a920:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:a960::,2a00:a960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:a980::,2a00:a987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:a9a0::,2a00:a9a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:a9c0::,2a00:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:a9e0::,2a00:a9e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:aa00::,2a00:aa00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:aa40::,2a00:aa40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:aa60::,2a00:aa60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:aa80::,2a00:aa80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:aaa0::,2a00:aaa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:aac0::,2a00:aac0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:aae0::,2a00:aae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ab00::,2a00:ab00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ab20::,2a00:ab20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ab40::,2a00:ab40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a00:ab60::,2a00:ab60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ab80::,2a00:ab80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:aba0::,2a00:aba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:abe0::,2a00:abe0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:ac00::,2a00:ac00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:ac20::,2a00:ac20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:ac40::,2a00:ac40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ac60::,2a00:ac60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ac80::,2a00:ac80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:aca0::,2a00:aca0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:acc0::,2a00:acc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ace0::,2a00:ace0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:ad00::,2a00:ad00:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:ad20::,2a00:ad20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ad40::,2a00:ad40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ad60::,2a00:ad60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ad80::,2a00:ad87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:adc0::,2a00:adc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:ade0::,2a00:ade0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:ae00::,2a00:ae00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:ae20::,2a00:ae20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:ae40::,2a00:ae40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ae60::,2a00:ae60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ae80::,2a00:ae80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:aea0::,2a00:aea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:aec0::,2a00:aec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:aee0::,2a00:aee0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:af00::,2a00:af00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:af20::,2a00:af20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:af40::,2a00:af40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:af60::,2a00:af60:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:af80::,2a00:af80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:afa0::,2a00:afa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:afc0::,2a00:afc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:afe0::,2a00:afe0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b000::,2a00:b000:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:b020::,2a00:b020:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a00:b040::,2a00:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b060::,2a00:b060:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:b080::,2a00:b080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b0a0::,2a00:b0a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:b0c0::,2a00:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:b0e0::,2a00:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b100::,2a00:b100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b120::,2a00:b120:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b140::,2a00:b140:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:b160::,2a00:b160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b180::,2a00:b180:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b1a0::,2a00:b1a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b1c0::,2a00:b1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b1e0::,2a00:b1e0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:b200::,2a00:b200:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b220::,2a00:b220:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:b260::,2a00:b260:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b280::,2a00:b280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b2a0::,2a00:b2a0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:b2e0::,2a00:b2e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:b300::,2a00:b300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b320::,2a00:b320:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b340::,2a00:b340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b360::,2a00:b360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b380::,2a00:b380:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b3a0::,2a00:b3a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b3c0::,2a00:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:b3e0::,2a00:b3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b400::,2a00:b407:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b420::,2a00:b420:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:b440::,2a00:b440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b460::,2a00:b460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:b480::,2a00:b480:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:b4a0::,2a00:b4a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b4c0::,2a00:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b500::,2a00:b500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b520::,2a00:b520:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b540::,2a00:b540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b560::,2a00:b560:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b580::,2a00:b580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b5a0::,2a00:b5a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b5c0::,2a00:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b5e0::,2a00:b5e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b600::,2a00:b607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b640::,2a00:b640:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:b660::,2a00:b660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:b680::,2a00:b680:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:b6a0::,2a00:b6a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b6c0::,2a00:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b6e0::,2a00:b6e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b700::,2a00:b700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b720::,2a00:b720:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:b740::,2a00:b740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:b760::,2a00:b760:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b780::,2a00:b780:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:b7a0::,2a00:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:b7c0::,2a00:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:b7e0::,2a00:b7e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:b800::,2a00:b800:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a00:b820::,2a00:b820:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:b840::,2a00:b840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b860::,2a00:b860:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:b880::,2a00:b880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:b8a0::,2a00:b8a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:b8c0::,2a00:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:b8e0::,2a00:b8e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:b900::,2a00:b900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b920::,2a00:b920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:b960::,2a00:b960:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:b980::,2a00:b981:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:b9a0::,2a00:b9a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:b9c0::,2a00:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:b9e0::,2a00:b9e0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:ba00::,2a00:ba00:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:ba20::,2a00:ba20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ba40::,2a00:ba40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ba60::,2a00:ba60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ba80::,2a00:ba80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:baa0::,2a00:baa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:bac0::,2a00:bac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:bae0::,2a00:bae0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:bb00::,2a00:bb00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bb20::,2a00:bb20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:bb40::,2a00:bb40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:bb60::,2a00:bb60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:bb80::,2a00:bb80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:bba0::,2a00:bba0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bbc0::,2a00:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bbe0::,2a00:bbe0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:bc00::,2a00:bc00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:bc20::,2a00:bc20:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:bc40::,2a00:bc40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bc60::,2a00:bc60:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:bc80::,2a00:bc80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bca0::,2a00:bca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bcc0::,2a00:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bce0::,2a00:bce0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:bd00::,2a00:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bd20::,2a00:bd20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:bd40::,2a00:bd40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:bd60::,2a00:bd60:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:bd80::,2a00:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bda0::,2a00:bda0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:bdc0::,2a00:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:bde0::,2a00:bde0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:be00::,2a00:be00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:be20::,2a00:be20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:be40::,2a00:be40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:be60::,2a00:be60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:be80::,2a00:be80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bea0::,2a00:bea0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:bec0::,2a00:bec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bf00::,2a00:bf00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:bf20::,2a00:bf20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:bf40::,2a00:bf40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:bf60::,2a00:bf60:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:bf80::,2a00:bf80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bfa0::,2a00:bfa0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:bfc0::,2a00:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c000::,2a00:c000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c040::,2a00:c040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c060::,2a00:c060:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c080::,2a00:c080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c0a0::,2a00:c0a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:c0c0::,2a00:c0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c0e0::,2a00:c0e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:c100::,2a00:c100:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:c120::,2a00:c120:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c140::,2a00:c140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c160::,2a00:c160:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a00:c180::,2a00:c180:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c1a0::,2a00:c1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c1c0::,2a00:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c1e0::,2a00:c1e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c200::,2a00:c200:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:c220::,2a00:c220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c240::,2a00:c240:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a00:c260::,2a00:c260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c280::,2a00:c280:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:c2a0::,2a00:c2a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c2c0::,2a00:c2c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c300::,2a00:c300:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c320::,2a00:c320:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c340::,2a00:c340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c360::,2a00:c360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c380::,2a00:c380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c3a0::,2a00:c3a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:c3c0::,2a00:c3c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:c3e0::,2a00:c3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c400::,2a00:c400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c420::,2a00:c420:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c440::,2a00:c447:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:c460::,2a00:c460:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c4a0::,2a00:c4a0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:c4c0::,2a00:c4c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c4e0::,2a00:c4e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c500::,2a00:c500:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:c520::,2a00:c520:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c540::,2a00:c540:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:c560::,2a00:c560:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:c580::,2a00:c580:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:c5a0::,2a00:c5a0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:c5c0::,2a00:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c5e0::,2a00:c5e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c600::,2a00:c600:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c620::,2a00:c620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c640::,2a00:c640:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c660::,2a00:c660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c680::,2a00:c680:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c6a0::,2a00:c6a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c6c0::,2a00:c6c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c6e0::,2a00:c6e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c700::,2a00:c700:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:c720::,2a00:c720:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:c740::,2a00:c740:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:c760::,2a00:c760:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:c780::,2a00:c780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:c7a0::,2a00:c7a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c7c0::,2a00:c7c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:c7e0::,2a00:c7e0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:c800::,2a00:c800:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:c820::,2a00:c820:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a00:c840::,2a00:c840:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:c860::,2a00:c860:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:c880::,2a00:c880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:c8a0::,2a00:c8a7:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a00:c8c0::,2a00:c8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c8e0::,2a00:c8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c900::,2a00:c900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c920::,2a00:c920:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:c940::,2a00:c940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:c960::,2a00:c960:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a00:c980::,2a00:c980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:c9a0::,2a00:c9a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:c9c0::,2a00:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:c9e0::,2a00:c9e0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:ca00::,2a00:ca00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ca20::,2a00:ca20:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:ca40::,2a00:ca40:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:ca60::,2a00:ca67:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:ca80::,2a00:ca80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:caa0::,2a00:caa0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a00:cac0::,2a00:cac0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:cae0::,2a00:cae0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:cb00::,2a00:cb00:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:cb20::,2a00:cb20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:cb40::,2a00:cb40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:cb60::,2a00:cb60:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:cb80::,2a00:cb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cba0::,2a00:cba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cbc0::,2a00:cbc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cbe0::,2a00:cbe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:cc00::,2a00:cc00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cc20::,2a00:cc20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:cc40::,2a00:cc40:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a00:cc60::,2a00:cc60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:cc80::,2a00:cc80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cca0::,2a00:cca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ccc0::,2a00:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cce0::,2a00:cce0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:cd00::,2a00:cd00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cd20::,2a00:cd20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:cd40::,2a00:cd40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:cd60::,2a00:cd60:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:cd80::,2a00:cd80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:cda0::,2a00:cda0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cdc0::,2a00:cdc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cde0::,2a00:cde0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ce00::,2a00:ce00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:ce20::,2a00:ce27:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:ce40::,2a00:ce40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ce60::,2a00:ce60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:ce80::,2a00:ce80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cea0::,2a00:cea0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:cec0::,2a00:cec0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:cee0::,2a00:cee7:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:cf00::,2a00:cf00:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:cf20::,2a00:cf20:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:cf40::,2a00:cf40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:cf60::,2a00:cf60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cf80::,2a00:cf80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:cfa0::,2a00:cfa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:cfc0::,2a00:cfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:cfe0::,2a00:cfe0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d000::,2a00:d000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d020::,2a00:d020:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d040::,2a00:d040:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:d060::,2a00:d060:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:d080::,2a00:d080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d0a0::,2a00:d0a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:d0c0::,2a00:d0c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d0e0::,2a00:d0e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d100::,2a00:d100:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d120::,2a00:d120:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d140::,2a00:d140:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a00:d160::,2a00:d160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d180::,2a00:d180:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:d1a0::,2a00:d1a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d1c0::,2a00:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d1e0::,2a00:d1e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d200::,2a00:d200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d240::,2a00:d240:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:d260::,2a00:d267:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d280::,2a00:d280:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:d2a0::,2a00:d2a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d2c0::,2a00:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:d2e0::,2a00:d2e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d300::,2a00:d300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d320::,2a00:d327:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d340::,2a00:d340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d360::,2a00:d367:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d380::,2a00:d380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d3a0::,2a00:d3a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d3e0::,2a00:d3e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d400::,2a00:d400:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d420::,2a00:d427:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d440::,2a00:d447:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:d480::,2a00:d480:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:d4a0::,2a00:d4a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d4c0::,2a00:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:d4e0::,2a00:d4e7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d500::,2a00:d500:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:d520::,2a00:d527:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d540::,2a00:d540:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d560::,2a00:d567:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:d580::,2a00:d580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d5a0::,2a00:d5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d5c0::,2a00:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:d5e0::,2a00:d5e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d600::,2a00:d600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d620::,2a00:d620:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:d640::,2a00:d640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d660::,2a00:d660:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:d680::,2a00:d680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d6a0::,2a00:d6a0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:d6c0::,2a00:d6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d6e0::,2a00:d6e0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a00:d700::,2a00:d700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d720::,2a00:d727:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d740::,2a00:d747:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:d780::,2a00:d780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:d7a0::,2a00:d7a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d7c0::,2a00:d7c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:d7e0::,2a00:d7e0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:d800::,2a00:d800:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a00:d820::,2a00:d820:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:d840::,2a00:d840:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:d860::,2a00:d860:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:d880::,2a00:d880:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d8a0::,2a00:d8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d8c0::,2a00:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:d8e0::,2a00:d8e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:d900::,2a00:d900:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:d920::,2a00:d920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:d940::,2a00:d940:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:d960::,2a00:d967:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:d980::,2a00:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:d9a0::,2a00:d9a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:d9c0::,2a00:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:da00::,2a00:da00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:da20::,2a00:da20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:da40::,2a00:da40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:da60::,2a00:da60:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a00:da80::,2a00:da80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:daa0::,2a00:daa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:dac0::,2a00:dac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dae0::,2a00:dae0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:db00::,2a00:db00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:db20::,2a00:db20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:db40::,2a00:db40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:db60::,2a00:db60:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:db80::,2a00:db80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:dba0::,2a00:dba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:dbc0::,2a00:dbc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:dbe0::,2a00:dbe0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:dc00::,2a00:dc00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:dc20::,2a00:dc20:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a00:dc40::,2a00:dc40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dc60::,2a00:dc60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:dc80::,2a00:dc80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:dca0::,2a00:dca7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:dcc0::,2a00:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:dd00::,2a00:dd00:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:dd20::,2a00:dd20:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:dd40::,2a00:dd40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:dd60::,2a00:dd60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:dda0::,2a00:dda0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a00:ddc0::,2a00:ddc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dde0::,2a00:dde0:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a00:de00::,2a00:de00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:de20::,2a00:de20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:de40::,2a00:de40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:de60::,2a00:de60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:de80::,2a00:de80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dea0::,2a00:dea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:dec0::,2a00:dec0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:dee0::,2a00:dee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:df00::,2a00:df00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:df20::,2a00:df20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:df40::,2a00:df40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:df60::,2a00:df60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:df80::,2a00:df80:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:dfa0::,2a00:dfa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:dfc0::,2a00:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:dfe0::,2a00:dfe7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e000::,2a00:e000:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a00:e020::,2a00:e020:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e040::,2a00:e040:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e060::,2a00:e060:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e080::,2a00:e080:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e0a0::,2a00:e0a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a00:e0c0::,2a00:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e100::,2a00:e100:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e120::,2a00:e120:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e140::,2a00:e140:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e160::,2a00:e160:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e180::,2a00:e180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e1a0::,2a00:e1a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e1c0::,2a00:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e1e0::,2a00:e1e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e200::,2a00:e200:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:e220::,2a00:e220:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e240::,2a00:e240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e260::,2a00:e260:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e280::,2a00:e280:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e2a0::,2a00:e2a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e2c0::,2a00:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e2e0::,2a00:e2e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:e300::,2a00:e300:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:e320::,2a00:e320:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e340::,2a00:e340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e360::,2a00:e360:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:e380::,2a00:e380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:e3a0::,2a00:e3a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:e3e0::,2a00:e3e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e400::,2a00:e407:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e440::,2a00:e440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e460::,2a00:e460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e480::,2a00:e480:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e4a0::,2a00:e4a0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e4c0::,2a00:e4c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e500::,2a00:e500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e520::,2a00:e520:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e540::,2a00:e540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e560::,2a00:e560:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e580::,2a00:e580:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:e5a0::,2a00:e5a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:e5c0::,2a00:e5c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:e5e0::,2a00:e5e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e600::,2a00:e600:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:e620::,2a00:e620:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e640::,2a00:e640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e660::,2a00:e660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:e680::,2a00:e680:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e6a0::,2a00:e6a0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a00:e6c0::,2a00:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e6e0::,2a00:e6e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:e700::,2a00:e700:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e720::,2a00:e720:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:e740::,2a00:e740:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e760::,2a00:e760:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:e780::,2a00:e780:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:e7a0::,2a00:e7a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e7c0::,2a00:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:e7e0::,2a00:e7e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:e800::,2a00:e807:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:e840::,2a00:e840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e860::,2a00:e860:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a00:e880::,2a00:e880:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:e8c0::,2a00:e8c0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a00:e8e0::,2a00:e8e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:e900::,2a00:e900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:e920::,2a00:e920:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e940::,2a00:e940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:e960::,2a00:e960:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:e980::,2a00:e980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e9a0::,2a00:e9a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:e9c0::,2a00:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:e9e0::,2a00:e9e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ea00::,2a00:ea00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:ea20::,2a00:ea20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ea40::,2a00:ea40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ea60::,2a00:ea60:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:ea80::,2a00:ea80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:eaa0::,2a00:eaa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:eac0::,2a00:eac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:eae0::,2a00:eae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:eb00::,2a00:eb00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:eb20::,2a00:eb20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:eb40::,2a00:eb40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:eb60::,2a00:eb60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:eb80::,2a00:eb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ebc0::,2a00:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:ebe0::,2a00:ebe0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ec00::,2a00:ec00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:ec20::,2a00:ec23:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ec40::,2a00:ec47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ec80::,2a00:ec80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:eca0::,2a00:eca0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:ecc0::,2a00:ecc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ece0::,2a00:ece0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a00:ed00::,2a00:ed00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed20::,2a00:ed20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed40::,2a00:ed40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ed60::,2a00:ed60:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:ed80::,2a00:ed80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:eda0::,2a00:eda0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:ede0::,2a00:ede0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:ee00::,2a00:ee00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ee20::,2a00:ee20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ee40::,2a00:ee40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:ee60::,2a00:ee60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:eea0::,2a00:eea0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:eec0::,2a00:eec0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:eee0::,2a00:eee0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:ef00::,2a00:ef00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ef20::,2a00:ef20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ef40::,2a00:ef40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:ef60::,2a00:ef67:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:ef80::,2a00:ef80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:efa0::,2a00:efa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:efc0::,2a00:efc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:efe0::,2a00:efe0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:f000::,2a00:f000:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a00:f020::,2a00:f020:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:f040::,2a00:f040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f060::,2a00:f060:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f080::,2a00:f080:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:f0a0::,2a00:f0a7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:f0c0::,2a00:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f0e0::,2a00:f0e0:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a00:f100::,2a00:f100:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:f120::,2a00:f120:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:f140::,2a00:f140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f160::,2a00:f160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f180::,2a00:f180:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f1a0::,2a00:f1a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:f1c0::,2a00:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f1e0::,2a00:f1e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f200::,2a00:f200:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f220::,2a00:f220:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:f260::,2a00:f260:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a00:f280::,2a00:f280:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f2a0::,2a00:f2a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f2c0::,2a00:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f2e0::,2a00:f2e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a00:f300::,2a00:f300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f320::,2a00:f320:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f340::,2a00:f340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:f360::,2a00:f360:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f380::,2a00:f380:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:f3a0::,2a00:f3a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f3c0::,2a00:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f3e0::,2a00:f3e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f400::,2a00:f4ff:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2a00:f500::,2a00:f507:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a00:f520::,2a00:f520:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f540::,2a00:f540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f560::,2a00:f560:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:f580::,2a00:f580:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a00:f5a0::,2a00:f5a0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a00:f5c0::,2a00:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:f5e0::,2a00:f5e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:f600::,2a00:f600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f620::,2a00:f620:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a00:f640::,2a00:f640:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:f660::,2a00:f660:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f680::,2a00:f680:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:f6a0::,2a00:f6a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f6c0::,2a00:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f6e0::,2a00:f6e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f700::,2a00:f707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f720::,2a00:f720:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a00:f760::,2a00:f760:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:f780::,2a00:f780:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:f7a0::,2a00:f7a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a00:f7c0::,2a00:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a00:f800::,2a00:f800:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:f820::,2a00:f827:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f860::,2a00:f860:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:f880::,2a00:f880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f8a0::,2a00:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f8c0::,2a00:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a00:f8e0::,2a00:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:f900::,2a00:f900:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a00:f920::,2a00:f920:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f940::,2a00:f940:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f960::,2a00:f960:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a00:f980::,2a00:f980:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a00:f9a0::,2a00:f9a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:f9c0::,2a00:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:f9e0::,2a00:f9e0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a00:fa00::,2a00:fa00:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a00:fa20::,2a00:fa20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:fa40::,2a00:fa40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fa60::,2a00:fa60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:fa80::,2a00:fa80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:faa0::,2a00:faa0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a00:fac0::,2a00:fac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fae0::,2a00:fae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:fb00::,2a00:fb00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:fb20::,2a00:fb20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:fb40::,2a00:fb40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a00:fb60::,2a00:fb60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a00:fb80::,2a00:fb80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fba0::,2a00:fba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fbc0::,2a00:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:fbe0::,2a00:fbe0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:fc00::,2a00:fc00:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:fc20::,2a00:fc20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:fc40::,2a00:fc40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a00:fc60::,2a00:fc60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:fc80::,2a00:fc80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:fca0::,2a00:fca0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a00:fcc0::,2a00:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fce0::,2a00:fce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fd00::,2a00:fd00:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a00:fd20::,2a00:fd20:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a00:fd40::,2a00:fd40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:fd60::,2a00:fd60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fd80::,2a00:fd80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:fda0::,2a00:fda0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fdc0::,2a00:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:fde0::,2a00:fde0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:fe00::,2a00:fe00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fe20::,2a00:fe20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a00:fe40::,2a00:fe40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a00:fe60::,2a00:fe60:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a00:fe80::,2a00:fe80:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a00:fea0::,2a00:fea0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a00:fec0::,2a00:fec0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a00:fee0::,2a00:fee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ff00::,2a00:ff00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a00:ff20::,2a00:ff20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a00:ff40::,2a00:ff40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a00:ff60::,2a00:ff60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a00:ff80::,2a00:ff80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a00:ffa0::,2a00:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a00:ffc0::,2a00:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a00:ffe0::,2a00:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01::,2a01::ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8::,2a01:8:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:10::,2a01:10:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:18::,2a01:18:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:20::,2a01:20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:28::,2a01:28:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:30::,2a01:30:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:38::,2a01:38:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:40::,2a01:40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:48::,2a01:48:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:50::,2a01:50:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:58::,2a01:58:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:68::,2a01:68:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:70::,2a01:70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:78::,2a01:78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:80::,2a01:80:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:88::,2a01:88:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:90::,2a01:90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:98::,2a01:98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a0::,2a01:a0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:a8::,2a01:a8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b0::,2a01:b1:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:b8::,2a01:b8:ffff:ffff:ffff:ffff:ffff:ffff,VA
+2a01:c0::,2a01:c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:c8::,2a01:c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:d0::,2a01:d0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:d8::,2a01:d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:e0::,2a01:e0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:e8::,2a01:e8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:f0::,2a01:f0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:f8::,2a01:f8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:100::,2a01:100:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:108::,2a01:108:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:120::,2a01:120:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:130::,2a01:130:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:138::,2a01:138:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:140::,2a01:140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:148::,2a01:148:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:150::,2a01:150:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:158::,2a01:158:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:160::,2a01:160:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:168::,2a01:168:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:170::,2a01:170:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:178::,2a01:178:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:180::,2a01:180:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:188::,2a01:188:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:190::,2a01:197:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:198::,2a01:198:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:1a0::,2a01:1a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:1a8::,2a01:1a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:1b0::,2a01:1b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:1b8::,2a01:1b8:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:1c0::,2a01:1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:1c8::,2a01:1c8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:1d0::,2a01:1d0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a01:1d8::,2a01:1d8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:1e0::,2a01:1e0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:1e8::,2a01:1e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:1f0::,2a01:1f0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:1f8::,2a01:1f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:200::,2a01:200:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:208::,2a01:208:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:210::,2a01:210:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:220::,2a01:220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:228::,2a01:228:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:230::,2a01:230:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:238::,2a01:238:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:240::,2a01:240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:248::,2a01:248:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:250::,2a01:250:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:258::,2a01:258:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:260::,2a01:260:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:268::,2a01:268:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:270::,2a01:270:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:278::,2a01:27f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:280::,2a01:287:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:288::,2a01:288:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:290::,2a01:290:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:298::,2a01:29f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:2a0::,2a01:2a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:2a8::,2a01:2af:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:2b0::,2a01:2b7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:2b8::,2a01:2b8:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a01:2c0::,2a01:2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:2c8::,2a01:2c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:2d0::,2a01:2d0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:2d8::,2a01:2d8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:2e0::,2a01:2ef:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:308::,2a01:308:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:310::,2a01:310:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:320::,2a01:320:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a01:328::,2a01:328:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:330::,2a01:330:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:338::,2a01:338:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:340::,2a01:340:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:348::,2a01:348:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:350::,2a01:350:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:358::,2a01:358:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:360::,2a01:360:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:368::,2a01:36f:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:378::,2a01:378:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:380::,2a01:380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:388::,2a01:38f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:390::,2a01:390:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:398::,2a01:398:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:3a0::,2a01:3a7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:3a8::,2a01:3a8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:3b8::,2a01:3b8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:3c8::,2a01:3c8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:3d8::,2a01:3d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:3e8::,2a01:3e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:3f0::,2a01:3f0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:3f8::,2a01:3f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:400::,2a01:400:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:408::,2a01:408:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:410::,2a01:410:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:418::,2a01:418:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:420::,2a01:420:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:428::,2a01:428:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:430::,2a01:430:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:438::,2a01:438:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:440::,2a01:447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:448::,2a01:448:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:450::,2a01:450:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:458::,2a01:458:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:460::,2a01:460:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:468::,2a01:468:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:470::,2a01:477:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:478::,2a01:47f:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a01:480::,2a01:480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:488::,2a01:488:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:490::,2a01:490:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:498::,2a01:498:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:4a0::,2a01:4a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4b0::,2a01:4b0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:4c0::,2a01:4c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:4c8::,2a01:4cf:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4d0::,2a01:4d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4d8::,2a01:4d8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:4e0::,2a01:4e7:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a01:4e8::,2a01:4e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4f0::,2a01:4f0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4f8::,2a01:4ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:500::,2a01:500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:508::,2a01:508:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:510::,2a01:510:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:518::,2a01:518:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:520::,2a01:520:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:528::,2a01:528:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:530::,2a01:530:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:538::,2a01:538:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:540::,2a01:540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:548::,2a01:548:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:550::,2a01:550:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:558::,2a01:558:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:560::,2a01:567:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:568::,2a01:570:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:578::,2a01:578:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:580::,2a01:580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:590::,2a01:590:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:598::,2a01:59f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5a0::,2a01:5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5a8::,2a01:5a8:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:5b0::,2a01:5b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5b8::,2a01:5bf:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a01:5c0::,2a01:5c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5c8::,2a01:5c8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5d0::,2a01:5d0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:5d8::,2a01:5df:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:5e0::,2a01:5e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:5f0::,2a01:5f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:5f8::,2a01:5f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:600::,2a01:600:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:608::,2a01:608:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a01:610::,2a01:610:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:618::,2a01:618:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:620::,2a01:620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:628::,2a01:628:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:630::,2a01:630:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:640::,2a01:647:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:648::,2a01:648:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:650::,2a01:650:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:658::,2a01:658:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:660::,2a01:667:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:668::,2a01:668:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:670::,2a01:670:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:678::,2a01:67f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:680::,2a01:680:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:688::,2a01:688:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:690::,2a01:690:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:698::,2a01:698:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6a0::,2a01:6a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6a8::,2a01:6a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6b0::,2a01:6b0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:6b8::,2a01:6b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6c0::,2a01:6c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6c8::,2a01:6c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6d0::,2a01:6d0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6d8::,2a01:6d8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6e0::,2a01:6e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6e8::,2a01:6e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6f0::,2a01:6f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6f8::,2a01:6f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:700::,2a01:700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:710::,2a01:710:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:718::,2a01:718:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:720::,2a01:720:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:728::,2a01:72f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:730::,2a01:730:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:738::,2a01:738:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:740::,2a01:740:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:748::,2a01:748:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:750::,2a01:750:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:758::,2a01:758:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:760::,2a01:760:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:768::,2a01:768:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:770::,2a01:770:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:778::,2a01:778:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:780::,2a01:780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:788::,2a01:788:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:790::,2a01:790:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:798::,2a01:79f:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:7a0::,2a01:7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7a8::,2a01:7a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7b0::,2a01:7b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7b8::,2a01:7b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7c0::,2a01:7c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7c8::,2a01:7c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7d0::,2a01:7d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7d8::,2a01:7d8:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a01:7e0::,2a01:7e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7e8::,2a01:7e8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7f0::,2a01:7f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7f8::,2a01:7f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:800::,2a01:8ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:c00::,2a01:c3f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:e00::,2a01:eff:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2a01:1000::,2a01:17ff:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:2000::,2a01:2fff:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4000::,2a01:4000:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:4020::,2a01:4020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4040::,2a01:4040:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:4060::,2a01:4060:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4080::,2a01:4080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:40a0::,2a01:40a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:40c0::,2a01:40c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:40e0::,2a01:40e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4120::,2a01:4120:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:4160::,2a01:4160:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:41a0::,2a01:41a0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:41c0::,2a01:41c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:41e0::,2a01:41e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4200::,2a01:4207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4240::,2a01:4240:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:4260::,2a01:4260:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4280::,2a01:4280:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:42a0::,2a01:42a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:42c0::,2a01:42c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:42e0::,2a01:42e0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:4300::,2a01:4300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4320::,2a01:4320:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4340::,2a01:4340:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:4360::,2a01:4360:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4380::,2a01:4380:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:43a0::,2a01:43a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:43c0::,2a01:43c0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:43e0::,2a01:43e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4400::,2a01:4400:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:4420::,2a01:4420:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4440::,2a01:4440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4460::,2a01:4460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4480::,2a01:4480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:44a0::,2a01:44a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:44c0::,2a01:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:44e0::,2a01:44e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:4500::,2a01:4500:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:4520::,2a01:4520:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4540::,2a01:4547:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4580::,2a01:4587:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:45c0::,2a01:45c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:45e0::,2a01:45e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4600::,2a01:4600:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:4620::,2a01:4620:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4640::,2a01:4640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4660::,2a01:4660:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:4680::,2a01:4680:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:46a0::,2a01:46a0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:46c0::,2a01:46c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:46e0::,2a01:46e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4720::,2a01:4720:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4740::,2a01:4740:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:4760::,2a01:4760:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4780::,2a01:4780:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:47a0::,2a01:47a0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:47c0::,2a01:47c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:47e0::,2a01:47e0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:4800::,2a01:4800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4820::,2a01:4820:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:4840::,2a01:4840:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4860::,2a01:4860:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:4880::,2a01:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:48a0::,2a01:48a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:48c0::,2a01:48c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:48e0::,2a01:48e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:4900::,2a01:4900:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:4920::,2a01:4920:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4940::,2a01:4940:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4960::,2a01:4960:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4980::,2a01:4980:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:49a0::,2a01:49a0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:49c0::,2a01:49c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:49e0::,2a01:49e0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:4a00::,2a01:4a00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:4a20::,2a01:4a20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4a40::,2a01:4a40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:4a60::,2a01:4a60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:4a80::,2a01:4a80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:4aa0::,2a01:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4ac0::,2a01:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:4ae0::,2a01:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4b00::,2a01:4b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4b20::,2a01:4b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4b40::,2a01:4b40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:4b60::,2a01:4b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4b80::,2a01:4b80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:4ba0::,2a01:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:4bc0::,2a01:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4be0::,2a01:4be0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:4c00::,2a01:4c00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4c20::,2a01:4c20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:4c40::,2a01:4c40:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4c60::,2a01:4c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4c80::,2a01:4c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4ca0::,2a01:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4cc0::,2a01:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4d00::,2a01:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4d20::,2a01:4d20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:4d40::,2a01:4d40:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:4d60::,2a01:4d60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4d80::,2a01:4d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4da0::,2a01:4da0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4dc0::,2a01:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4de0::,2a01:4de0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4e00::,2a01:4e00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4e20::,2a01:4e20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:4e40::,2a01:4e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4e60::,2a01:4e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:4e80::,2a01:4e80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4ea0::,2a01:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4ec0::,2a01:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:4ee0::,2a01:4ee0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4f00::,2a01:4f00:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:4f20::,2a01:4f20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:4f40::,2a01:4f40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:4f60::,2a01:4f60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:4f80::,2a01:4f80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4fa0::,2a01:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:4fc0::,2a01:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:4fe0::,2a01:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5000::,2a01:5000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5020::,2a01:5020:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5040::,2a01:5047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5080::,2a01:5080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:50a0::,2a01:50a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:50c0::,2a01:50c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:50e0::,2a01:50e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5100::,2a01:5100:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:5120::,2a01:5120:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:5140::,2a01:5140:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5160::,2a01:5160:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a01:5180::,2a01:5180:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:51a0::,2a01:51a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:51c0::,2a01:51c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:5200::,2a01:5200:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:5220::,2a01:5220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5240::,2a01:5240:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5260::,2a01:5260:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5280::,2a01:5280:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:52a0::,2a01:52a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:52c0::,2a01:52c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:52e0::,2a01:52e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5300::,2a01:5300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5320::,2a01:5320:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5340::,2a01:5340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5360::,2a01:5360:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5380::,2a01:5380:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:53a0::,2a01:53a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:53c0::,2a01:53c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:53e0::,2a01:53e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5400::,2a01:5400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5420::,2a01:5420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5440::,2a01:5440:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:5460::,2a01:5460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5480::,2a01:5480:ffff:ffff:ffff:ffff:ffff:ffff,GG
+2a01:54a0::,2a01:54a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:54c0::,2a01:54c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:54e0::,2a01:54e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5500::,2a01:5507:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:5540::,2a01:5540:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5560::,2a01:5560:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5580::,2a01:5580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:55a0::,2a01:55a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:55c0::,2a01:55c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:55e0::,2a01:55e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5600::,2a01:5600:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5620::,2a01:5620:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5640::,2a01:5640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5660::,2a01:5660:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:5680::,2a01:5680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:56a0::,2a01:56a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:56c0::,2a01:56c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:56e0::,2a01:56e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5700::,2a01:5700:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:5720::,2a01:5720:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5740::,2a01:5740:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:5760::,2a01:5760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5780::,2a01:5780:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:57a0::,2a01:57a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:57c0::,2a01:57c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:57e0::,2a01:57e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:5800::,2a01:5800:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5820::,2a01:5820:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5840::,2a01:5840:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:5860::,2a01:5860:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:58a0::,2a01:58a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:58e0::,2a01:58e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5900::,2a01:5900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:5920::,2a01:5920:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5940::,2a01:5940:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5960::,2a01:5960:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5980::,2a01:5980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:59a0::,2a01:59a7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:59c0::,2a01:59c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:59e0::,2a01:59e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5a00::,2a01:5a00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5a20::,2a01:5a20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5a40::,2a01:5a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5a60::,2a01:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5a80::,2a01:5a80:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:5aa0::,2a01:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5ac0::,2a01:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5ae0::,2a01:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5b00::,2a01:5b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5b20::,2a01:5b20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:5b40::,2a01:5b40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:5b60::,2a01:5b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5b80::,2a01:5b80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5ba0::,2a01:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5bc0::,2a01:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:5be0::,2a01:5be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5c00::,2a01:5c00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:5c20::,2a01:5c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5c40::,2a01:5c40:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5c60::,2a01:5c60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5c80::,2a01:5c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5ca0::,2a01:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:5cc0::,2a01:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:5ce0::,2a01:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5d00::,2a01:5d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5d20::,2a01:5d20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5d40::,2a01:5d40:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5d60::,2a01:5d67:ffff:ffff:ffff:ffff:ffff:ffff,TJ
+2a01:5d80::,2a01:5d80:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:5da0::,2a01:5da0:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a01:5dc0::,2a01:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:5de0::,2a01:5de0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5e00::,2a01:5e00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5e20::,2a01:5e20:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:5e40::,2a01:5e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:5e60::,2a01:5e60:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:5e80::,2a01:5e80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:5ea0::,2a01:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5ec0::,2a01:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:5ee0::,2a01:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:5f00::,2a01:5f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5f20::,2a01:5f20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5f40::,2a01:5f40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5f60::,2a01:5f60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5f80::,2a01:5f80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:5fa0::,2a01:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:5fc0::,2a01:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:5fe0::,2a01:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6000::,2a01:6000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6020::,2a01:6020:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6040::,2a01:6040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6060::,2a01:6060:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:6080::,2a01:6080:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:60a0::,2a01:60a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:60c0::,2a01:60c0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:60e0::,2a01:60e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6100::,2a01:6100:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6120::,2a01:6120:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6140::,2a01:6140:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:6160::,2a01:6160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6180::,2a01:6180:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:61a0::,2a01:61a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:61c0::,2a01:61c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:61e0::,2a01:61e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6200::,2a01:6200:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:6220::,2a01:6220:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6240::,2a01:6240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6260::,2a01:6260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6280::,2a01:6280:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:62a0::,2a01:62a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:62c0::,2a01:62c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:6300::,2a01:6300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6320::,2a01:6320:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a01:6340::,2a01:6347:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6360::,2a01:6360:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6380::,2a01:6380:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:63a0::,2a01:63a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:63c0::,2a01:63c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:63e0::,2a01:63e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6400::,2a01:6400:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6420::,2a01:6420:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6440::,2a01:6440:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:6460::,2a01:6460:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6480::,2a01:6480:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:64a0::,2a01:64a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:64c0::,2a01:64c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:64e0::,2a01:64e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6500::,2a01:6500:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:6520::,2a01:6520:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6540::,2a01:6540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6560::,2a01:6560:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:6580::,2a01:6580:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:65a0::,2a01:65a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:65c0::,2a01:65c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:65e0::,2a01:65e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6600::,2a01:6600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6620::,2a01:6620:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:6640::,2a01:6647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6680::,2a01:6680:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:66a0::,2a01:66a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:66c0::,2a01:66c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:66e0::,2a01:66e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6700::,2a01:6700:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:6720::,2a01:6720:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:6740::,2a01:6740:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6760::,2a01:6760:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6780::,2a01:6780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:67a0::,2a01:67a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:67c0::,2a01:67c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:67e0::,2a01:67e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6800::,2a01:6800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6820::,2a01:6820:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6840::,2a01:6840:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6860::,2a01:6860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6880::,2a01:6880:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:68a0::,2a01:68a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:68c0::,2a01:68c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:68e0::,2a01:68e0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:6900::,2a01:6900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6920::,2a01:6920:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6940::,2a01:6940:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6960::,2a01:6960:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6980::,2a01:6980:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:69a0::,2a01:69a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:69c0::,2a01:69c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:69e0::,2a01:69e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6a00::,2a01:6a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6a40::,2a01:6a40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:6a60::,2a01:6a60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6a80::,2a01:6a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6aa0::,2a01:6aa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6ac0::,2a01:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6ae0::,2a01:6ae7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6b00::,2a01:6b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6b20::,2a01:6b20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6b40::,2a01:6b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:6b60::,2a01:6b60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6b80::,2a01:6b80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:6ba0::,2a01:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6bc0::,2a01:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6be0::,2a01:6be0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:6c00::,2a01:6c00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6c20::,2a01:6c20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6c40::,2a01:6c40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:6c60::,2a01:6c60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6c80::,2a01:6c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6ca0::,2a01:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6cc0::,2a01:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6ce0::,2a01:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:6d00::,2a01:6d00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:6d20::,2a01:6d20:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:6d40::,2a01:6d40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6d60::,2a01:6d60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:6d80::,2a01:6d80:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:6da0::,2a01:6da0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:6dc0::,2a01:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a01:6de0::,2a01:6de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6e00::,2a01:6e00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:6e20::,2a01:6e20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:6e40::,2a01:6e40:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a01:6e60::,2a01:6e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6e80::,2a01:6e80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:6ea0::,2a01:6ea0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6ec0::,2a01:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6ee0::,2a01:6ee0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:6f00::,2a01:6f07:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:6f20::,2a01:6f20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:6f40::,2a01:6f40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:6f60::,2a01:6f60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:6f80::,2a01:6f80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:6fa0::,2a01:6fa0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:6fc0::,2a01:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:6fe0::,2a01:6fe0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7000::,2a01:7000:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7020::,2a01:7020:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:7040::,2a01:7040:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:7060::,2a01:7060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7080::,2a01:7080:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:70a0::,2a01:70a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:70c0::,2a01:70c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:70e0::,2a01:70e0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:7100::,2a01:7100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7120::,2a01:7120:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7140::,2a01:7140:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7160::,2a01:7160:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:7180::,2a01:7180:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:71a0::,2a01:71a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:71c0::,2a01:71c1:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:71e0::,2a01:71e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:7200::,2a01:7200:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7220::,2a01:7220:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:7240::,2a01:7240:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:7260::,2a01:7260:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a01:7280::,2a01:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:72a0::,2a01:72a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:72e0::,2a01:72e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7300::,2a01:7300:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:7320::,2a01:7320:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:7340::,2a01:7340:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7360::,2a01:7360:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a01:7380::,2a01:7380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:73a0::,2a01:73a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:73c0::,2a01:73c0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:73e0::,2a01:73e0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:7400::,2a01:7400:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:7420::,2a01:7420:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7440::,2a01:7440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7460::,2a01:7460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7480::,2a01:7480:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:74a0::,2a01:74a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:74c0::,2a01:74c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:74e0::,2a01:74e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7500::,2a01:7500:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:7520::,2a01:7520:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7540::,2a01:7540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7560::,2a01:7560:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:7580::,2a01:7580:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:75a0::,2a01:75a0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:75c0::,2a01:75c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7600::,2a01:7600:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:7620::,2a01:7620:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7640::,2a01:7640:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:7660::,2a01:7660:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7680::,2a01:7680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:76a0::,2a01:76a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:76c0::,2a01:76c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:76e0::,2a01:76e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:7700::,2a01:7700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7720::,2a01:7720:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7740::,2a01:7740:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7760::,2a01:7760:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7780::,2a01:7780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:77a0::,2a01:77a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:77c0::,2a01:77c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:77e0::,2a01:77e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7800::,2a01:7800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7820::,2a01:7820:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7840::,2a01:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7860::,2a01:7860:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7880::,2a01:7880:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:78a0::,2a01:78a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:78c0::,2a01:78c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:78e0::,2a01:78e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7900::,2a01:7900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7920::,2a01:7920:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7940::,2a01:7940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7960::,2a01:7960:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7980::,2a01:7980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:79a0::,2a01:79a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:79c0::,2a01:79c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a01:79e0::,2a01:79e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:7a00::,2a01:7a00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7a20::,2a01:7a20:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:7a40::,2a01:7a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7a60::,2a01:7a60:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a01:7a80::,2a01:7a87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7ac0::,2a01:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7ae0::,2a01:7ae0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7b00::,2a01:7b00:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a01:7b20::,2a01:7b20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7b40::,2a01:7b40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7b60::,2a01:7b60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7b80::,2a01:7b80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7ba0::,2a01:7ba0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:7bc0::,2a01:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:7be0::,2a01:7be0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7c00::,2a01:7c00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:7c20::,2a01:7c20:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:7c40::,2a01:7c40:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a01:7c60::,2a01:7c60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7c80::,2a01:7c80:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:7ca0::,2a01:7ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7cc0::,2a01:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:7ce0::,2a01:7ce0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:7d00::,2a01:7d00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:7d20::,2a01:7d20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7d40::,2a01:7d40:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:7d60::,2a01:7d60:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:7d80::,2a01:7d80:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:7da0::,2a01:7da0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:7de0::,2a01:7de0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7e00::,2a01:7e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7e20::,2a01:7e27:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:7e40::,2a01:7e40:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a01:7e60::,2a01:7e60:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:7e80::,2a01:7e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7ea0::,2a01:7ea0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:7ec0::,2a01:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:7ee0::,2a01:7ee0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:7f00::,2a01:7f00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:7f20::,2a01:7f20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:7f40::,2a01:7f40:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:7f60::,2a01:7f60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7f80::,2a01:7f80:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:7fa0::,2a01:7fa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7fc0::,2a01:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:7fe0::,2a01:7fe0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8000::,2a01:8000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8020::,2a01:8020:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:8040::,2a01:8040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8060::,2a01:8060:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:8080::,2a01:8080:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a01:80a0::,2a01:80a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:80c0::,2a01:80c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:80e0::,2a01:80e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:8100::,2a01:8100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8120::,2a01:8120:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:8140::,2a01:8140:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:8160::,2a01:8160:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8180::,2a01:8180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:81a0::,2a01:81a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:81c0::,2a01:81c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:81e0::,2a01:81e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8200::,2a01:8200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8220::,2a01:8220:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:8240::,2a01:8240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8260::,2a01:8260:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8280::,2a01:8280:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:82a0::,2a01:82a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:82c0::,2a01:82c0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a01:82e0::,2a01:82e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8300::,2a01:8300:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:8320::,2a01:8320:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8340::,2a01:8340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8360::,2a01:8360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8380::,2a01:8380:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:83a0::,2a01:83a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:83c0::,2a01:83c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:83e0::,2a01:83e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8400::,2a01:8400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8420::,2a01:8420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8440::,2a01:8440:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8460::,2a01:8460:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:8480::,2a01:8480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:84a0::,2a01:84a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:84c0::,2a01:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:84e0::,2a01:84e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8500::,2a01:8500:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8520::,2a01:8520:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:8540::,2a01:8540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8560::,2a01:8560:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8580::,2a01:8580:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:85a0::,2a01:85a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:85e0::,2a01:85e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8600::,2a01:8600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8620::,2a01:8620:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:8640::,2a01:8640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8660::,2a01:8660:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8680::,2a01:8680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:86a0::,2a01:86a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:86c0::,2a01:86c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:86e0::,2a01:86e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8700::,2a01:8700:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:8720::,2a01:8720:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:8740::,2a01:8740:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:8760::,2a01:8760:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8780::,2a01:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:87c0::,2a01:87c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:87e0::,2a01:87e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8800::,2a01:8800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8820::,2a01:8820:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8840::,2a01:8840:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:8860::,2a01:8860:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8880::,2a01:8880:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:88a0::,2a01:88a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:88c0::,2a01:88c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:88e0::,2a01:88e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:8900::,2a01:8900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8920::,2a01:8920:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8940::,2a01:8940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8960::,2a01:8960:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8980::,2a01:8980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:89a0::,2a01:89a0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:89c0::,2a01:89c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:89e0::,2a01:89e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8a00::,2a01:8a00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:8a20::,2a01:8a20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8a40::,2a01:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8a60::,2a01:8a60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8a80::,2a01:8a80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:8aa0::,2a01:8aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8ac0::,2a01:8ac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8ae0::,2a01:8ae0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8b00::,2a01:8b00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8b20::,2a01:8b20:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:8b40::,2a01:8b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8b60::,2a01:8b60:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:8b80::,2a01:8b80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:8ba0::,2a01:8ba7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8bc0::,2a01:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:8be0::,2a01:8be0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8c00::,2a01:8c00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8c20::,2a01:8c20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8c40::,2a01:8c40:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a01:8c60::,2a01:8c60:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:8c80::,2a01:8c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:8ca0::,2a01:8ca0:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a01:8cc0::,2a01:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:8ce0::,2a01:8ce0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:8d00::,2a01:8d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8d20::,2a01:8d20:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8d40::,2a01:8d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:8d80::,2a01:8d80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:8da0::,2a01:8da0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:8dc0::,2a01:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:8de0::,2a01:8de0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:8e00::,2a01:8e00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:8e20::,2a01:8e20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8e40::,2a01:8e40:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a01:8e60::,2a01:8e60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:8e80::,2a01:8e87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:8ec0::,2a01:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:8ee0::,2a01:8ee0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:8f00::,2a01:8f00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8f20::,2a01:8f20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8f40::,2a01:8f40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:8f60::,2a01:8f60:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:8f80::,2a01:8f80:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:8fa0::,2a01:8fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:8fc0::,2a01:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:8fe0::,2a01:8fe0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9000::,2a01:9000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9020::,2a01:9020:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9040::,2a01:9040:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:9060::,2a01:9060:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:9080::,2a01:9080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:90a0::,2a01:90a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:90c0::,2a01:90c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:90e0::,2a01:90e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:9100::,2a01:9100:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9120::,2a01:9120:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9140::,2a01:9140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9160::,2a01:9160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9180::,2a01:9180:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:91a0::,2a01:91a0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:91c0::,2a01:91c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:91e0::,2a01:91e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9220::,2a01:9220:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9240::,2a01:9240:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a01:9260::,2a01:9260:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:9280::,2a01:9280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:92a0::,2a01:92a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:92c0::,2a01:92c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:92e0::,2a01:92e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a01:9300::,2a01:9300:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9320::,2a01:9320:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:9340::,2a01:9340:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9360::,2a01:9360:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9380::,2a01:9380:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:93a0::,2a01:93a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:93c0::,2a01:93c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:93e0::,2a01:93e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9400::,2a01:9400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9420::,2a01:9420:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:9440::,2a01:9440:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9460::,2a01:9460:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:9480::,2a01:9480:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:94a0::,2a01:94a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:94c0::,2a01:94c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:94e0::,2a01:94e0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:9500::,2a01:9500:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9520::,2a01:9520:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9540::,2a01:9540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9560::,2a01:9560:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:9580::,2a01:9580:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:95a0::,2a01:95a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:95c0::,2a01:95c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:95e0::,2a01:95e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9600::,2a01:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9620::,2a01:9620:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:9640::,2a01:9640:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:9660::,2a01:9660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9680::,2a01:9680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:96a0::,2a01:96a0:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a01:96c0::,2a01:96c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:96e0::,2a01:96e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9700::,2a01:9700:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a01:9720::,2a01:9720:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9740::,2a01:9740:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9760::,2a01:9760:ffff:ffff:ffff:ffff:ffff:ffff,KY
+2a01:9780::,2a01:9780:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:97a0::,2a01:97a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:97c0::,2a01:97c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:97e0::,2a01:97e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9800::,2a01:9800:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:9820::,2a01:9820:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9840::,2a01:9840:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9860::,2a01:9860:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9880::,2a01:9880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:98a0::,2a01:98a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:98c0::,2a01:98c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:98e0::,2a01:98e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9900::,2a01:9900:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:9920::,2a01:9920:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9940::,2a01:9940:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9960::,2a01:9960:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9980::,2a01:9980:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:99a0::,2a01:99a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:99e0::,2a01:99e0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:9a00::,2a01:9a00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9a20::,2a01:9a20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:9a40::,2a01:9a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9a60::,2a01:9a60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9a80::,2a01:9a80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9aa0::,2a01:9aa0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9ac0::,2a01:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9ae0::,2a01:9ae0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9b00::,2a01:9b00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:9b20::,2a01:9b20:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a01:9b40::,2a01:9b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9b60::,2a01:9b60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9b80::,2a01:9b80:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:9ba0::,2a01:9ba0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9bc0::,2a01:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:9be0::,2a01:9be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9c00::,2a01:9c00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9c20::,2a01:9c20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:9c40::,2a01:9c41:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9c60::,2a01:9c60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:9c80::,2a01:9c80:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:9ca0::,2a01:9ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9cc0::,2a01:9cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9ce0::,2a01:9ce0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:9d00::,2a01:9d00:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a01:9d20::,2a01:9d20:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:9d40::,2a01:9d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9d60::,2a01:9d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:9d80::,2a01:9d80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9da0::,2a01:9da0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:9dc0::,2a01:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:9de0::,2a01:9de0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:9e00::,2a01:9e07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9e20::,2a01:9e20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9e40::,2a01:9e40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:9e60::,2a01:9e60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9e80::,2a01:9e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:9ea0::,2a01:9ea0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:9ec0::,2a01:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9f00::,2a01:9f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9f20::,2a01:9f20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:9f40::,2a01:9f40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:9f60::,2a01:9f60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:9f80::,2a01:9f80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:9fa0::,2a01:9fa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:9fc0::,2a01:9fc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:9fe0::,2a01:9fe0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a000::,2a01:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a020::,2a01:a020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a040::,2a01:a040:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a060::,2a01:a060:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a080::,2a01:a080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a0a0::,2a01:a0a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a0c0::,2a01:a0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a0e0::,2a01:a0e0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:a100::,2a01:a100:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:a120::,2a01:a120:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:a160::,2a01:a160:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:a180::,2a01:a180:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a01:a1a0::,2a01:a1a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a1c0::,2a01:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a01:a1e0::,2a01:a1e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a200::,2a01:a200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a220::,2a01:a220:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a240::,2a01:a240:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:a260::,2a01:a260:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a280::,2a01:a280:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a2a0::,2a01:a2a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a2c0::,2a01:a2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a2e0::,2a01:a2e0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:a300::,2a01:a300:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:a320::,2a01:a320:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a01:a340::,2a01:a340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a360::,2a01:a360:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a380::,2a01:a380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a3a0::,2a01:a3a0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:a3c0::,2a01:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a3e0::,2a01:a3e0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a01:a400::,2a01:a400:ffff:ffff:ffff:ffff:ffff:ffff,JE
+2a01:a420::,2a01:a420:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:a440::,2a01:a440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a460::,2a01:a460:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a480::,2a01:a480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a4a0::,2a01:a4a0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a01:a4c0::,2a01:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a4e0::,2a01:a4e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a500::,2a01:a500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a520::,2a01:a520:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:a540::,2a01:a540:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:a560::,2a01:a560:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a580::,2a01:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a5a0::,2a01:a5a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a5c0::,2a01:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a5e0::,2a01:a5e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a600::,2a01:a600:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a620::,2a01:a620:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a640::,2a01:a640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a660::,2a01:a660:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:a680::,2a01:a680:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a6a0::,2a01:a6a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:a6c0::,2a01:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a6e0::,2a01:a6e0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a01:a700::,2a01:a707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a740::,2a01:a740:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a760::,2a01:a760:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a01:a780::,2a01:a780:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a7a0::,2a01:a7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a7c0::,2a01:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:a7e0::,2a01:a7e0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:a800::,2a01:a800:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:a820::,2a01:a820:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:a840::,2a01:a840:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:a860::,2a01:a860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:a880::,2a01:a880:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a01:a8a0::,2a01:a8a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a8c0::,2a01:a8c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a8e0::,2a01:a8e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:a900::,2a01:a900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a920::,2a01:a920:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a940::,2a01:a940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:a960::,2a01:a960:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a01:a980::,2a01:a980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:a9a0::,2a01:a9a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:a9c0::,2a01:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:a9e0::,2a01:a9e0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:aa00::,2a01:aa00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a01:aa20::,2a01:aa20:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a01:aa40::,2a01:aa40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:aa60::,2a01:aa60:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:aa80::,2a01:aa80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:aaa0::,2a01:aaa0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:aac0::,2a01:aac0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:aae0::,2a01:aae0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:ab00::,2a01:ab00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:ab20::,2a01:ab20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:ab40::,2a01:ab40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:aba0::,2a01:aba0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:abc0::,2a01:abc0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a01:abe0::,2a01:abe0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:ac00::,2a01:ac00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:ac20::,2a01:ac20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:ac40::,2a01:ac40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:ac60::,2a01:ac60:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:ac80::,2a01:ac80:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:aca0::,2a01:aca0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:acc0::,2a01:acc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:ace0::,2a01:ace0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:ad00::,2a01:ad00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:ad20::,2a01:ad20:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:ad40::,2a01:ad40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:ad60::,2a01:ad60:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:ad80::,2a01:ad80:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:ada0::,2a01:ada0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:adc0::,2a01:adc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:ade0::,2a01:ade0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:ae00::,2a01:ae00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:ae20::,2a01:ae20:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:ae40::,2a01:ae40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:ae60::,2a01:ae60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:ae80::,2a01:ae80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:aea0::,2a01:aea0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:aec0::,2a01:aec0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:aee0::,2a01:aee0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:af00::,2a01:af00:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:af20::,2a01:af20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:af40::,2a01:af40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:af60::,2a01:af60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:af80::,2a01:af80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a01:afa0::,2a01:afa0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a01:afc0::,2a01:afc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:afe0::,2a01:afe0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:b000::,2a01:b000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b020::,2a01:b020:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a01:b040::,2a01:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b060::,2a01:b060:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b080::,2a01:b080:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b0a0::,2a01:b0a0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:b0c0::,2a01:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a01:b0e0::,2a01:b0e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:b100::,2a01:b100:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b120::,2a01:b120:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b140::,2a01:b140:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b160::,2a01:b160:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b180::,2a01:b180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b1a0::,2a01:b1a0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b1c0::,2a01:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b200::,2a01:b200:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a01:b220::,2a01:b220:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b240::,2a01:b240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b260::,2a01:b260:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b280::,2a01:b280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b2a0::,2a01:b2a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b2c0::,2a01:b2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b2e0::,2a01:b2e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b300::,2a01:b307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b340::,2a01:b340:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b360::,2a01:b360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b380::,2a01:b380:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:b3a0::,2a01:b3a0:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a01:b3c0::,2a01:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b3e0::,2a01:b3e0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b400::,2a01:b400:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b420::,2a01:b420:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b440::,2a01:b440:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:b460::,2a01:b460:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:b480::,2a01:b480:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:b4a0::,2a01:b4a0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a01:b4c0::,2a01:b4c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:b4e0::,2a01:b4e0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a01:b500::,2a01:b500:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a01:b520::,2a01:b520:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:b540::,2a01:b547:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b580::,2a01:b580:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b5a0::,2a01:b5a0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:b5c0::,2a01:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b5e0::,2a01:b5e0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:b600::,2a01:b600:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b620::,2a01:b620:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a01:b640::,2a01:b640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b660::,2a01:b660:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b680::,2a01:b680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b6a0::,2a01:b6a0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a01:b6c0::,2a01:b6c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b700::,2a01:b700:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b720::,2a01:b720:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b740::,2a01:b740:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:b760::,2a01:b760:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b780::,2a01:b780:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a01:b7a0::,2a01:b7a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:b7c0::,2a01:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:b7e0::,2a01:b7e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:b800::,2a01:b800:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a01:b820::,2a01:b820:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b840::,2a01:b840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b860::,2a01:b860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b880::,2a01:b880:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a01:b8a0::,2a01:b8a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b8c0::,2a01:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:b8e0::,2a01:b8e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:b900::,2a01:b900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:b920::,2a01:b920:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b940::,2a01:b940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b960::,2a01:b960:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:b980::,2a01:b980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:b9a0::,2a01:b9a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:b9c0::,2a01:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a01:b9e0::,2a01:b9e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:ba00::,2a01:ba00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a01:ba20::,2a01:ba20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:ba40::,2a01:ba40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:ba60::,2a01:ba60:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a01:ba80::,2a01:ba80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:baa0::,2a01:baa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:bac0::,2a01:bac0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:bae0::,2a01:bae0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:bb20::,2a01:bb20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:bb40::,2a01:bb40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:bb60::,2a01:bb60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a01:bb80::,2a01:bb80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a01:bba0::,2a01:bba0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a01:bbc0::,2a01:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a01:bbe0::,2a01:bbe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bc00::,2a01:bc07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:bc40::,2a01:bc40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bc60::,2a01:bc60:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:bca0::,2a01:bca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:bcc0::,2a01:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bce0::,2a01:bce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bd00::,2a01:bd00:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:bd20::,2a01:bd20:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a01:bd40::,2a01:bd40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:bd60::,2a01:bd60:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a01:bd80::,2a01:bd80:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a01:bda0::,2a01:bda0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a01:bdc0::,2a01:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a01:bde0::,2a01:bde0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:be00::,2a01:be00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a01:be40::,2a01:be40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:be60::,2a01:be60:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a01:be80::,2a01:be80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a01:bea0::,2a01:bea0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a01:bec0::,2a01:bec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bee0::,2a01:bee0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bf20::,2a01:bf20:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a01:bf40::,2a01:bf40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a01:bf60::,2a01:bf60:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a01:bf80::,2a01:bf80:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a01:bfa0::,2a01:bfa0:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a01:bfc0::,2a01:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a01:bfe0::,2a01:bfe0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a01:c000::,2a01:dfff:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02::,2a02::ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:10::,2a02:17:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:18::,2a02:18:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:20::,2a02:20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:28::,2a02:28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:30::,2a02:30:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:38::,2a02:38:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:40::,2a02:40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:48::,2a02:48:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:50::,2a02:50:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:58::,2a02:58:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:60::,2a02:67:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:68::,2a02:68:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:70::,2a02:70:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:78::,2a02:78:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:80::,2a02:80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:88::,2a02:88:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:90::,2a02:97:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:98::,2a02:98:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:a0::,2a02:a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:a8::,2a02:a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b0::,2a02:b0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b8::,2a02:b8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:c0::,2a02:c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:c8::,2a02:c8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:d0::,2a02:d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d8::,2a02:d8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:e0::,2a02:e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:e8::,2a02:e8:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:f0::,2a02:f0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f8::,2a02:f8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:100::,2a02:100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:108::,2a02:10f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:110::,2a02:110:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:118::,2a02:118:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:120::,2a02:120:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:128::,2a02:128:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:130::,2a02:130:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:138::,2a02:138:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:140::,2a02:140:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:148::,2a02:14f:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:150::,2a02:150:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:158::,2a02:158:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:160::,2a02:160:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:168::,2a02:16b:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:170::,2a02:170:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:178::,2a02:178:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:180::,2a02:180:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:188::,2a02:18f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:190::,2a02:190:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:198::,2a02:198:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:1a0::,2a02:1a7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1a8::,2a02:1a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1b8::,2a02:1b8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:1c0::,2a02:1c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:1c8::,2a02:1c8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1d0::,2a02:1d0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1d8::,2a02:1d8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1e0::,2a02:1e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1e8::,2a02:1e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1f0::,2a02:1f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1f8::,2a02:1f8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:200::,2a02:200:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:208::,2a02:208:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:210::,2a02:210:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:218::,2a02:218:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:220::,2a02:220:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:228::,2a02:22f:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:230::,2a02:230:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:238::,2a02:238:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:240::,2a02:240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:248::,2a02:248:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:250::,2a02:250:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:258::,2a02:258:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:260::,2a02:260:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:268::,2a02:268:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:270::,2a02:270:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:278::,2a02:278:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:280::,2a02:280:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:288::,2a02:290:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:298::,2a02:298:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2a0::,2a02:2a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2a8::,2a02:2a8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2b0::,2a02:2b0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b8::,2a02:2b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2c0::,2a02:2c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2c8::,2a02:2c8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2d0::,2a02:2d0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2d8::,2a02:2d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2e0::,2a02:2e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2e8::,2a02:2e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2f0::,2a02:2f7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2f8::,2a02:2f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:300::,2a02:300:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:308::,2a02:308:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:310::,2a02:310:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:318::,2a02:318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:320::,2a02:320:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:328::,2a02:328:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:330::,2a02:330:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:338::,2a02:338:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:340::,2a02:340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:348::,2a02:348:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:350::,2a02:350:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:358::,2a02:358:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:360::,2a02:360:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:368::,2a02:368:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:370::,2a02:370:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:380::,2a02:381:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a02:388::,2a02:388:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:390::,2a02:390:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:398::,2a02:398:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:3a0::,2a02:3a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:3a8::,2a02:3a8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:3b0::,2a02:3b0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:3b8::,2a02:3b8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:3c0::,2a02:3c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:3c8::,2a02:3c8:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:3d0::,2a02:3d0:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a02:3d8::,2a02:3d8:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:3e0::,2a02:3e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:3e8::,2a02:3e8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:3f0::,2a02:3f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:3f8::,2a02:3f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:400::,2a02:400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:408::,2a02:408:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:410::,2a02:410:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:418::,2a02:41f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:420::,2a02:420:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:428::,2a02:428:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:430::,2a02:430:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:438::,2a02:438:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:440::,2a02:440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:448::,2a02:448:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:450::,2a02:450:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:458::,2a02:458:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:460::,2a02:460:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:468::,2a02:468:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:470::,2a02:470:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:478::,2a02:478:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:480::,2a02:480:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:488::,2a02:488:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:490::,2a02:490:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:498::,2a02:498:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4a0::,2a02:4a0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4a8::,2a02:4a8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4b0::,2a02:4b0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4b8::,2a02:4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4c8::,2a02:4c8:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4d0::,2a02:4d0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4d8::,2a02:4d8:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:4e0::,2a02:4e0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:4e8::,2a02:4e8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f0::,2a02:4f0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4f8::,2a02:4f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:500::,2a02:500:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:508::,2a02:508:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:518::,2a02:518:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:520::,2a02:520:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:530::,2a02:530:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:538::,2a02:538:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:540::,2a02:540:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:548::,2a02:548:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:550::,2a02:550:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:558::,2a02:558:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:560::,2a02:560:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:568::,2a02:568:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:570::,2a02:570:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:578::,2a02:578:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:580::,2a02:587:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:588::,2a02:588:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:590::,2a02:590:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:598::,2a02:598:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5a0::,2a02:5a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5b0::,2a02:5b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5b8::,2a02:5b8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5c0::,2a02:5c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:5c8::,2a02:5c8:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:5d0::,2a02:5d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5d8::,2a02:5d8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:5e0::,2a02:5e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:5f0::,2a02:5f0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:5f8::,2a02:5f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:600::,2a02:600:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:608::,2a02:608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:610::,2a02:610:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:618::,2a02:618:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:620::,2a02:620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:628::,2a02:628:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:630::,2a02:630:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:638::,2a02:638:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a02:640::,2a02:640:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:648::,2a02:648:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:650::,2a02:650:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:658::,2a02:658:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:660::,2a02:660:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:668::,2a02:668:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:670::,2a02:670:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:678::,2a02:678:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:680::,2a02:680:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:688::,2a02:688:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:690::,2a02:690:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:698::,2a02:698:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6a0::,2a02:6a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6a8::,2a02:6a8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6b0::,2a02:6b0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6b8::,2a02:6b8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6c0::,2a02:6c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:6c8::,2a02:6c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:6d0::,2a02:6d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6d8::,2a02:6d8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:6e0::,2a02:6e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:6e8::,2a02:6e8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6f0::,2a02:6f0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6f8::,2a02:6f8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:700::,2a02:700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:708::,2a02:708:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:710::,2a02:710:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:718::,2a02:718:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:720::,2a02:720:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:728::,2a02:728:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:730::,2a02:730:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:738::,2a02:738:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:740::,2a02:740:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:748::,2a02:748:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:750::,2a02:750:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:758::,2a02:758:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:760::,2a02:760:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:768::,2a02:768:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:770::,2a02:770:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:778::,2a02:778:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:780::,2a02:787:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:788::,2a02:788:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:790::,2a02:790:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:798::,2a02:798:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:7a0::,2a02:7a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7a8::,2a02:7a8:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:7b0::,2a02:7b0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:7b8::,2a02:7b8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7c0::,2a02:7c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7c8::,2a02:7c8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:7d0::,2a02:7d0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:7d8::,2a02:7d8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:7e0::,2a02:7e0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:7e8::,2a02:7e8:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:7f0::,2a02:7f0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:7f8::,2a02:7f8:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:800::,2a02:807:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:808::,2a02:808:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:810::,2a02:810:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:818::,2a02:81f:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:820::,2a02:820:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a02:828::,2a02:828:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:830::,2a02:830:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:838::,2a02:838:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:840::,2a02:840:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:848::,2a02:848:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:850::,2a02:850:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:858::,2a02:858:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:860::,2a02:860:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:868::,2a02:868:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:870::,2a02:870:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:878::,2a02:878:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:880::,2a02:880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:888::,2a02:888:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:890::,2a02:890:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:898::,2a02:898:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:8a0::,2a02:8a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8a8::,2a02:8a8:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:8b0::,2a02:8b0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:8b8::,2a02:8b8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8c0::,2a02:8c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8c8::,2a02:8c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8d0::,2a02:8d1:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8d8::,2a02:8d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:8e0::,2a02:8e0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:8e8::,2a02:8e8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:8f0::,2a02:8f0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:8f8::,2a02:8f8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:900::,2a02:9ff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2a02:a00::,2a02:a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:a08::,2a02:a08:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a10::,2a02:a10:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a18::,2a02:a18:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:a20::,2a02:a20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:a28::,2a02:a28:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:a30::,2a02:a30:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a02:a38::,2a02:a38:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:a40::,2a02:a40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:a48::,2a02:a48:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:a50::,2a02:a50:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:a58::,2a02:a58:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:a60::,2a02:a60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:a68::,2a02:a68:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:a70::,2a02:a70:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a78::,2a02:a78:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:a80::,2a02:a80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:a88::,2a02:a88:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:a90::,2a02:a90:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:a98::,2a02:a98:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a02:aa0::,2a02:aa0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:aa8::,2a02:aa9:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:ab0::,2a02:ab0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ab8::,2a02:ab8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:ac0::,2a02:ac0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ac8::,2a02:ac8:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:ad0::,2a02:ad7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad8::,2a02:ad8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ae0::,2a02:ae0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ae8::,2a02:aef:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:af0::,2a02:af0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:af8::,2a02:af8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b00::,2a02:b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b08::,2a02:b08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b10::,2a02:b10:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b18::,2a02:b18:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:b20::,2a02:b20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:b28::,2a02:b28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b30::,2a02:b30:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b38::,2a02:b38:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:b48::,2a02:b48:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:b50::,2a02:b50:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b58::,2a02:b58:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:b60::,2a02:b60:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:b70::,2a02:b70:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:b78::,2a02:b78:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b80::,2a02:b87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b88::,2a02:b88:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:b90::,2a02:b90:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:b98::,2a02:b98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ba0::,2a02:ba0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:ba8::,2a02:ba8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:bb0::,2a02:bb0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:bb8::,2a02:bb8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:bc0::,2a02:bc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:bc8::,2a02:bc8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:bd0::,2a02:bd0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:bd8::,2a02:bd8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:be0::,2a02:be0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:be8::,2a02:be8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:bf0::,2a02:bf0:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:bf8::,2a02:bf8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c00::,2a02:c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c08::,2a02:c08:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:c10::,2a02:c10:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:c18::,2a02:c18:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c20::,2a02:c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c28::,2a02:c2f:ffff:ffff:ffff:ffff:ffff:ffff,JE
+2a02:c30::,2a02:c30:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c38::,2a02:c38:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c40::,2a02:c47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:c48::,2a02:c48:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c50::,2a02:c50:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c58::,2a02:c58:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:c60::,2a02:c60:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c68::,2a02:c68:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c70::,2a02:c70:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c78::,2a02:c7f:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c80::,2a02:c80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:c88::,2a02:c88:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c90::,2a02:c90:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c98::,2a02:c98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ca0::,2a02:ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ca8::,2a02:ca8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:cb0::,2a02:cb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:cc0::,2a02:cc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:cc8::,2a02:cc9:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:cd0::,2a02:cd0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cd8::,2a02:cd8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ce0::,2a02:ce0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:ce8::,2a02:ce8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:cf0::,2a02:cf0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:d00::,2a02:d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:d08::,2a02:d08:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:d10::,2a02:d10:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:d18::,2a02:d18:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:d20::,2a02:d20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d28::,2a02:d28:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:d30::,2a02:d30:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d38::,2a02:d3f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d40::,2a02:d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d48::,2a02:d48:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d50::,2a02:d50:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d58::,2a02:d5f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d60::,2a02:d60:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:d68::,2a02:d6f:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:d70::,2a02:d70:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:d78::,2a02:d78:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d80::,2a02:d80:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:d88::,2a02:d88:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:d90::,2a02:d90:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:d98::,2a02:d98:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:da8::,2a02:da8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:db0::,2a02:db0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:db8::,2a02:db8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:dc0::,2a02:dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:dc8::,2a02:dc8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:dd0::,2a02:dd0:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a02:dd8::,2a02:ddf:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:de0::,2a02:de0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:de8::,2a02:de8:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:df0::,2a02:df0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:df8::,2a02:df8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e00::,2a02:e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e08::,2a02:e08:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e10::,2a02:e10:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e20::,2a02:e27:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:e28::,2a02:e28:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e30::,2a02:e30:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e38::,2a02:e38:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e40::,2a02:e40:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:e48::,2a02:e48:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:e50::,2a02:e50:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:e58::,2a02:e5f:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e60::,2a02:e60:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:e68::,2a02:e68:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e70::,2a02:e70:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:e80::,2a02:e80:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:e88::,2a02:e88:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e90::,2a02:e90:ffff:ffff:ffff:ffff:ffff:ffff,FO
+2a02:e98::,2a02:e98:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:ea0::,2a02:ea7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ea8::,2a02:ea8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:eb0::,2a02:eb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:eb8::,2a02:eb8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ec0::,2a02:ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:ec8::,2a02:ec8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ed0::,2a02:ed0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:ed8::,2a02:ed8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ee0::,2a02:ee0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:ef0::,2a02:ef0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:ef8::,2a02:ef8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f00::,2a02:f00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:f08::,2a02:f08:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f10::,2a02:f10:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a02:f18::,2a02:f18:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f20::,2a02:f20:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f28::,2a02:f28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f30::,2a02:f30:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f38::,2a02:f38:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f40::,2a02:f40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f48::,2a02:f48:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:f50::,2a02:f50:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:f58::,2a02:f58:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f60::,2a02:f60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:f68::,2a02:f6f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f70::,2a02:f70:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f78::,2a02:f7f:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f80::,2a02:f80:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:f88::,2a02:f88:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:f90::,2a02:f90:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f98::,2a02:f98:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fa0::,2a02:fa0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:fa8::,2a02:fa8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:fb0::,2a02:fb0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fb8::,2a02:fb8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fc0::,2a02:fc0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:fc8::,2a02:fc8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:fd0::,2a02:fd0:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a02:fd8::,2a02:fd8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fe0::,2a02:fe7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:fe8::,2a02:fe8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ff0::,2a02:ff0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:ff8::,2a02:ff8:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:1000::,2a02:103f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1200::,2a02:12ff:ffff:ffff:ffff:ffff:ffff:ffff,CI
+2a02:1300::,2a02:1300:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:1308::,2a02:1308:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1310::,2a02:1310:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1318::,2a02:1318:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1320::,2a02:1320:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1328::,2a02:1328:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1330::,2a02:1330:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1338::,2a02:1338:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:1340::,2a02:1340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1348::,2a02:1348:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1350::,2a02:1350:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1358::,2a02:1358:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1360::,2a02:1360:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1368::,2a02:1368:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:1370::,2a02:1370:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:1378::,2a02:1378:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1380::,2a02:1380:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1388::,2a02:138f:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:1390::,2a02:1390:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1398::,2a02:1398:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:13a0::,2a02:13a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:13a8::,2a02:13a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:13b0::,2a02:13b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:13b8::,2a02:13b8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:13c0::,2a02:13c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:13c8::,2a02:13c8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:13d0::,2a02:13d0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:13d8::,2a02:13d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:13e0::,2a02:13e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:13e8::,2a02:13e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:13f0::,2a02:13f0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:13f8::,2a02:13f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1400::,2a02:143f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1600::,2a02:1600:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:1608::,2a02:1608:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1610::,2a02:1610:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1618::,2a02:1618:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a02:1620::,2a02:1620:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1628::,2a02:1628:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1630::,2a02:1630:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:1638::,2a02:1638:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:1640::,2a02:1640:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:1648::,2a02:1648:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1650::,2a02:1650:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:1658::,2a02:1658:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1660::,2a02:1660:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:1668::,2a02:1668:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1670::,2a02:1670:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1678::,2a02:1678:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:1680::,2a02:1680:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1688::,2a02:1688:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:1698::,2a02:1698:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:16a0::,2a02:16a0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:16a8::,2a02:16a8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:16b0::,2a02:16b0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:16b8::,2a02:16b8:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:16c0::,2a02:16c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:16c8::,2a02:16c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:16d0::,2a02:16d0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:16d8::,2a02:16d8:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:16e0::,2a02:16e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:16e8::,2a02:16e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:16f0::,2a02:16f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:16f8::,2a02:16f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1700::,2a02:1700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1710::,2a02:1710:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1718::,2a02:1718:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a02:1720::,2a02:1720:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1730::,2a02:1730:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:1738::,2a02:1738:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1740::,2a02:1740:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1748::,2a02:1748:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:1750::,2a02:1750:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:1758::,2a02:1758:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:1760::,2a02:1760:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:1768::,2a02:1768:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:1770::,2a02:1770:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1778::,2a02:1778:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:1780::,2a02:1780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:1788::,2a02:1788:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:1790::,2a02:1790:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:1798::,2a02:179f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:17a0::,2a02:17a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:17a8::,2a02:17a8:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:17b0::,2a02:17b0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:17b8::,2a02:17b8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:17c0::,2a02:17c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:17c8::,2a02:17c8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:17d0::,2a02:17d0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:17d8::,2a02:17d8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:17e0::,2a02:17e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:17e8::,2a02:17e8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:17f0::,2a02:17f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:17f8::,2a02:17f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:1800::,2a02:18ff:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2a02:2000::,2a02:20ff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2a02:2100::,2a02:2100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2108::,2a02:2108:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2110::,2a02:2110:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2118::,2a02:211f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2120::,2a02:2123:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2140::,2a02:2140:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2148::,2a02:214f:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:2150::,2a02:2150:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2158::,2a02:2158:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2160::,2a02:2160:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2168::,2a02:216f:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2170::,2a02:2170:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2178::,2a02:2178:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2180::,2a02:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2188::,2a02:2188:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2190::,2a02:2190:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2198::,2a02:2198:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:21a0::,2a02:21a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:21a8::,2a02:21a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:21b0::,2a02:21b0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:21b8::,2a02:21b8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:21c0::,2a02:21c0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:21c8::,2a02:21c8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:21d0::,2a02:21d0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:21d8::,2a02:21d8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:21e0::,2a02:21e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:21e8::,2a02:21e8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:21f0::,2a02:21f0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:21f8::,2a02:21f8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2200::,2a02:2200:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2208::,2a02:2208:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:2210::,2a02:2210:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2218::,2a02:2218:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2220::,2a02:2220:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2228::,2a02:2228:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2230::,2a02:2230:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:2240::,2a02:2240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2248::,2a02:2248:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:2250::,2a02:2250:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2258::,2a02:2258:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2260::,2a02:2260:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2268::,2a02:2268:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2270::,2a02:2270:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2278::,2a02:2278:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2280::,2a02:2280:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2288::,2a02:2288:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2290::,2a02:2290:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:2298::,2a02:2298:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:22a0::,2a02:22a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:22a8::,2a02:22a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:22b0::,2a02:22b0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:22b8::,2a02:22b8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:22c0::,2a02:22c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:22c8::,2a02:22c8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:22d0::,2a02:22d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:22d8::,2a02:22d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:22e0::,2a02:22e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:22e8::,2a02:22e8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:22f0::,2a02:22f0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2300::,2a02:2300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2308::,2a02:2308:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2310::,2a02:2310:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2318::,2a02:2318:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2320::,2a02:2320:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2328::,2a02:2328:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2330::,2a02:2330:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:2338::,2a02:233f:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2340::,2a02:2340:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2348::,2a02:2348:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2350::,2a02:2350:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2358::,2a02:2358:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2360::,2a02:2360:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2368::,2a02:2368:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2378::,2a02:2378:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2380::,2a02:2380:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2388::,2a02:2388:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2390::,2a02:2390:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a02:2398::,2a02:2398:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:23a0::,2a02:23a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:23a8::,2a02:23a8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:23b0::,2a02:23b0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:23b8::,2a02:23b8:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:23c0::,2a02:23c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:23c8::,2a02:23c8:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:23d0::,2a02:23d0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:23d8::,2a02:23d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:23e0::,2a02:23e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:23e8::,2a02:23e8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:23f0::,2a02:23f0:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a02:23f8::,2a02:23f8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2400::,2a02:2400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2408::,2a02:2408:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2410::,2a02:2410:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2420::,2a02:2420:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2428::,2a02:2428:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2430::,2a02:2430:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2438::,2a02:2438:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2440::,2a02:2440:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2448::,2a02:2448:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2450::,2a02:2457:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2458::,2a02:2458:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2460::,2a02:2460:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:2468::,2a02:2468:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2470::,2a02:2477:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2478::,2a02:2478:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2480::,2a02:2480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2488::,2a02:2488:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2490::,2a02:2490:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2498::,2a02:2498:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24a0::,2a02:24a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:24a8::,2a02:24a8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:24b0::,2a02:24b0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:24b8::,2a02:24bf:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:24c0::,2a02:24c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:24c8::,2a02:24c8:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:24d0::,2a02:24d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24d8::,2a02:24d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:24e0::,2a02:24e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:24e8::,2a02:24e8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:24f0::,2a02:24f0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:24f8::,2a02:24f8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2500::,2a02:2500:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2508::,2a02:2508:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2510::,2a02:2510:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2518::,2a02:2518:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2520::,2a02:2520:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2528::,2a02:252f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2530::,2a02:2530:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2538::,2a02:2538:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2540::,2a02:2540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2548::,2a02:2548:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2550::,2a02:2550:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2558::,2a02:2558:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:2560::,2a02:2560:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2568::,2a02:2568:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2578::,2a02:2578:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:2580::,2a02:2587:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2588::,2a02:2588:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2590::,2a02:2590:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:2598::,2a02:2598:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:25a0::,2a02:25a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:25a8::,2a02:25af:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:25b0::,2a02:25b0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:25b8::,2a02:25b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:25c0::,2a02:25c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:25c8::,2a02:25c8:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:25d0::,2a02:25d0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:25d8::,2a02:25d8:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:25e0::,2a02:25e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:25e8::,2a02:25e8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:25f0::,2a02:25f0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:25f8::,2a02:25f8:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:2600::,2a02:2600:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2608::,2a02:2608:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:2610::,2a02:2610:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2618::,2a02:2618:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2620::,2a02:2620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2628::,2a02:2628:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:2630::,2a02:2630:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:2638::,2a02:2638:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2640::,2a02:2647:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2648::,2a02:2648:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2650::,2a02:2650:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2658::,2a02:2658:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2660::,2a02:2660:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:2668::,2a02:2668:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2670::,2a02:2670:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2678::,2a02:2678:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2680::,2a02:2680:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2688::,2a02:2688:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2690::,2a02:2690:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2698::,2a02:2698:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26a0::,2a02:26a7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:26a8::,2a02:26a8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26b0::,2a02:26b0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:26b8::,2a02:26b8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:26c0::,2a02:26c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:26c8::,2a02:26c8:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:26d0::,2a02:26d0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a02:26d8::,2a02:26d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26e0::,2a02:26e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:26e8::,2a02:26e8:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:26f8::,2a02:26ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2700::,2a02:2700:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:2708::,2a02:2708:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2710::,2a02:2710:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2718::,2a02:271f:ffff:ffff:ffff:ffff:ffff:ffff,YE
+2a02:2720::,2a02:2720:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2728::,2a02:2728:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2730::,2a02:2730:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2738::,2a02:2738:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2740::,2a02:2740:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2748::,2a02:2748:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2750::,2a02:2750:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2760::,2a02:2760:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2768::,2a02:2768:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2770::,2a02:2770:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2778::,2a02:2778:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2780::,2a02:2780:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2788::,2a02:2788:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2790::,2a02:2790:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2798::,2a02:2798:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:27a0::,2a02:27a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:27a8::,2a02:27af:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:27b0::,2a02:27b0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:27b8::,2a02:27b8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:27c0::,2a02:27c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:27c8::,2a02:27c8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:27d0::,2a02:27d0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:27d8::,2a02:27d8:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:27e0::,2a02:27e0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:27e8::,2a02:27e8:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:27f0::,2a02:27f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:27f8::,2a02:27f8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2800::,2a02:2800:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2808::,2a02:2808:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2810::,2a02:2810:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2818::,2a02:2818:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2820::,2a02:2820:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2828::,2a02:2828:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2830::,2a02:2830:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2838::,2a02:2838:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2840::,2a02:2840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2848::,2a02:2848:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2850::,2a02:2850:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2858::,2a02:2858:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2860::,2a02:2860:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2868::,2a02:2868:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:2870::,2a02:2870:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2878::,2a02:2878:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2880::,2a02:2880:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:2888::,2a02:2888:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2890::,2a02:2890:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2898::,2a02:2898:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:28a0::,2a02:28a0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:28a8::,2a02:28a8:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:28b0::,2a02:28b7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:28b8::,2a02:28bf:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:28c0::,2a02:28c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:28c8::,2a02:28c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:28d0::,2a02:28d0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:28d8::,2a02:28d8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:28e0::,2a02:28e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:28e8::,2a02:28e8:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:28f0::,2a02:28f0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:28f8::,2a02:28f8:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2900::,2a02:2900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2908::,2a02:2908:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a02:2910::,2a02:2910:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2918::,2a02:2918:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2920::,2a02:2920:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2928::,2a02:2928:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2930::,2a02:2930:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2938::,2a02:2938:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2940::,2a02:2940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2948::,2a02:2948:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2950::,2a02:2950:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:2958::,2a02:2958:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2960::,2a02:2960:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:2968::,2a02:2968:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2970::,2a02:2970:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2978::,2a02:2978:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2980::,2a02:2980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2988::,2a02:2988:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2990::,2a02:2990:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2998::,2a02:2998:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29a0::,2a02:29a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:29a8::,2a02:29b0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:29b8::,2a02:29b8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:29c0::,2a02:29c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:29c8::,2a02:29c8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29d0::,2a02:29d0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29d8::,2a02:29d8:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:29e0::,2a02:29e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:29e8::,2a02:29ef:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:29f0::,2a02:29f0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:29f8::,2a02:29f8:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:2a00::,2a02:2a00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2a08::,2a02:2a08:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2a10::,2a02:2a10:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2a18::,2a02:2a18:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2a20::,2a02:2a20:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2a28::,2a02:2a28:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2a30::,2a02:2a37:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2a38::,2a02:2a38:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2a40::,2a02:2a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2a48::,2a02:2a48:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2a50::,2a02:2a50:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:2a58::,2a02:2a58:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2a60::,2a02:2a60:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a02:2a68::,2a02:2a68:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2a70::,2a02:2a70:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:2a78::,2a02:2a78:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2a80::,2a02:2a80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2a88::,2a02:2a88:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2a90::,2a02:2a90:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2a98::,2a02:2a98:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:2aa0::,2a02:2aa0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2aa8::,2a02:2aa8:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2ab0::,2a02:2ab0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2ab8::,2a02:2ab8:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2ac0::,2a02:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2ac8::,2a02:2ac8:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2ad0::,2a02:2ad0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2ad8::,2a02:2ad8:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:2ae0::,2a02:2ae0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2ae8::,2a02:2ae8:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2af0::,2a02:2af0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:2af8::,2a02:2af8:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2b00::,2a02:2b00:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2b08::,2a02:2b08:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b10::,2a02:2b10:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:2b18::,2a02:2b18:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2b20::,2a02:2b20:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:2b28::,2a02:2b28:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:2b30::,2a02:2b30:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:2b38::,2a02:2b38:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b40::,2a02:2b47:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:2b48::,2a02:2b48:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2b50::,2a02:2b50:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2b58::,2a02:2b58:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:2b80::,2a02:2b80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2b88::,2a02:2b88:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:2b90::,2a02:2b97:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2b98::,2a02:2b98:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:2ba0::,2a02:2ba0:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:2ba8::,2a02:2ba8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2bb0::,2a02:2bb0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:2bb8::,2a02:2bb8:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2bc0::,2a02:2bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2be0::,2a02:2be0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2c00::,2a02:2c07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:2c40::,2a02:2c40:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2c60::,2a02:2c60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2c80::,2a02:2c80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2ca0::,2a02:2ca0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2cc0::,2a02:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2ce0::,2a02:2ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:2d00::,2a02:2d00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:2d20::,2a02:2d20:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:2d40::,2a02:2d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2d60::,2a02:2d60:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2d80::,2a02:2d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2da0::,2a02:2da0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:2dc0::,2a02:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2de0::,2a02:2de0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:2e00::,2a02:2e1f:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2f00::,2a02:2f0f:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:2f80::,2a02:2f80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:2fa0::,2a02:2fa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:2fc0::,2a02:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:2fe0::,2a02:2fe0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:3000::,2a02:31ff:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4000::,2a02:4000:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4020::,2a02:4020:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:4040::,2a02:4040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4060::,2a02:4060:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:4080::,2a02:4080:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:40a0::,2a02:40a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:40c0::,2a02:40c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:40e0::,2a02:40e0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4100::,2a02:4100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4120::,2a02:4120:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4140::,2a02:4140:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:4160::,2a02:4160:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:4180::,2a02:4180:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:41a0::,2a02:41a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:41c0::,2a02:41c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:41e0::,2a02:41e0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:4200::,2a02:4200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4220::,2a02:4220:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:4240::,2a02:4240:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4260::,2a02:4260:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:4280::,2a02:4280:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a02:42a0::,2a02:42a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:42c0::,2a02:42c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:42e0::,2a02:42e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4300::,2a02:4300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:4320::,2a02:4320:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4340::,2a02:4340:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4360::,2a02:4360:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:43a0::,2a02:43a0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:43c0::,2a02:43c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:43e0::,2a02:43e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4420::,2a02:4420:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:4440::,2a02:4440:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a02:4460::,2a02:4460:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:4480::,2a02:4480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:44a0::,2a02:44a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:44c0::,2a02:44c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:44e0::,2a02:44e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4500::,2a02:4500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4520::,2a02:4520:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a02:4540::,2a02:4540:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:4560::,2a02:4560:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:45a0::,2a02:45a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:45c0::,2a02:45c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:45e0::,2a02:45e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4600::,2a02:4600:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4620::,2a02:4620:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:4640::,2a02:4640:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4660::,2a02:4660:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4680::,2a02:4680:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:46a0::,2a02:46a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:46c0::,2a02:46c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:46e0::,2a02:46e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4700::,2a02:4700:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:4720::,2a02:4720:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4740::,2a02:4740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4760::,2a02:4760:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4780::,2a02:4780:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:47a0::,2a02:47a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:47c0::,2a02:47c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:47e0::,2a02:47e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4800::,2a02:4800:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:4820::,2a02:4820:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:4840::,2a02:4840:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:4860::,2a02:4860:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4880::,2a02:4880:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:48a0::,2a02:48a0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:48e0::,2a02:48e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4900::,2a02:4907:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:4940::,2a02:4940:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:4960::,2a02:4960:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:4980::,2a02:4980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:49a0::,2a02:49a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:49c0::,2a02:49c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:49e0::,2a02:49e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4a00::,2a02:4a00:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:4a20::,2a02:4a20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4a40::,2a02:4a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:4a60::,2a02:4a60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4aa0::,2a02:4aa0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4ac0::,2a02:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:4ae0::,2a02:4ae0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4b00::,2a02:4b07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:4b40::,2a02:4b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4b60::,2a02:4b60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:4b80::,2a02:4b80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4ba0::,2a02:4ba0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4bc0::,2a02:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:4be0::,2a02:4be0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:4c00::,2a02:4c00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4c20::,2a02:4c20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4c40::,2a02:4c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4c80::,2a02:4c80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:4ca0::,2a02:4ca0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4cc0::,2a02:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4ce0::,2a02:4ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4d00::,2a02:4d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4d20::,2a02:4d20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4d40::,2a02:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:4d60::,2a02:4d60:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:4d80::,2a02:4d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4da0::,2a02:4da0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:4dc0::,2a02:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:4de0::,2a02:4de0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:4e20::,2a02:4e20:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4e40::,2a02:4e40:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:4e60::,2a02:4e60:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:4ea0::,2a02:4ea0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:4ec0::,2a02:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4ee0::,2a02:4ee0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:4f00::,2a02:4f00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:4f20::,2a02:4f20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f40::,2a02:4f40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:4f60::,2a02:4f60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:4f80::,2a02:4f80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:4fa0::,2a02:4fa0:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:4fc0::,2a02:4fc0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:4fe0::,2a02:4fe0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:5000::,2a02:5000:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5020::,2a02:5020:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5040::,2a02:5040:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:5060::,2a02:5060:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5080::,2a02:5080:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:50a0::,2a02:50a0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:50c0::,2a02:50c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a02:50e0::,2a02:50e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5100::,2a02:5100:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5120::,2a02:5120:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:5140::,2a02:5140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5160::,2a02:5160:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5180::,2a02:5180:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:51a0::,2a02:51a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:51c0::,2a02:51c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:51e0::,2a02:51e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5200::,2a02:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5220::,2a02:5220:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:5260::,2a02:5260:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5280::,2a02:5280:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:52a0::,2a02:52a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:52e0::,2a02:52e0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5300::,2a02:5300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5320::,2a02:5320:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a02:5340::,2a02:5340:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:5360::,2a02:5360:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5380::,2a02:5380:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:53a0::,2a02:53a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:53c0::,2a02:53c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:53e0::,2a02:53e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5400::,2a02:5400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5420::,2a02:5420:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5440::,2a02:5440:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:5460::,2a02:5460:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5480::,2a02:5480:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:54a0::,2a02:54a0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:54c0::,2a02:54c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:54e0::,2a02:54e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5500::,2a02:5500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5520::,2a02:5520:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5540::,2a02:5540:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5560::,2a02:5560:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:5580::,2a02:5580:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:55a0::,2a02:55a0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:55c0::,2a02:55c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:55e0::,2a02:55e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5600::,2a02:5600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5620::,2a02:5620:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5640::,2a02:5640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5660::,2a02:5660:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5680::,2a02:5680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:56a0::,2a02:56a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:56c0::,2a02:56c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:56e0::,2a02:56e0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5720::,2a02:5720:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:5740::,2a02:5740:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:5760::,2a02:5760:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5780::,2a02:5780:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:57a0::,2a02:57a0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:57c0::,2a02:57c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:57e0::,2a02:57e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:5800::,2a02:5800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5820::,2a02:5820:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5840::,2a02:5840:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5860::,2a02:5860:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5880::,2a02:5880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:58a0::,2a02:58a0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:58c0::,2a02:58c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:58e0::,2a02:58e0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5900::,2a02:5900:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:5920::,2a02:5920:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:5940::,2a02:5940:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:5960::,2a02:5960:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:5980::,2a02:5980:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:59a0::,2a02:59a0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:59c0::,2a02:59c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:59e0::,2a02:59e0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:5a20::,2a02:5a20:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5a40::,2a02:5a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5a60::,2a02:5a60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5a80::,2a02:5a87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5aa0::,2a02:5aa0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5ac0::,2a02:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5ae0::,2a02:5ae0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5b00::,2a02:5b00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5b20::,2a02:5b20:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:5b40::,2a02:5b40:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:5b60::,2a02:5b60:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:5b80::,2a02:5b80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:5ba0::,2a02:5ba0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5bc0::,2a02:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5be0::,2a02:5be0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5c20::,2a02:5c20:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:5c40::,2a02:5c40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5c60::,2a02:5c60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5ca0::,2a02:5ca0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5cc0::,2a02:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5ce0::,2a02:5ce0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5d00::,2a02:5d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5d20::,2a02:5d20:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:5d40::,2a02:5d40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5d60::,2a02:5d60:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5d80::,2a02:5d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5da0::,2a02:5da0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:5dc0::,2a02:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5de0::,2a02:5de0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:5e00::,2a02:5e00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:5e40::,2a02:5e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:5e60::,2a02:5e60:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:5e80::,2a02:5e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:5ea0::,2a02:5ea0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5ec0::,2a02:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:5ee0::,2a02:5ee0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a02:5f00::,2a02:5f00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5f20::,2a02:5f20:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:5f40::,2a02:5f40:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:5f60::,2a02:5f60:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:5f80::,2a02:5f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:5fa0::,2a02:5fa0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:5fc0::,2a02:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:5fe0::,2a02:5fe0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:6000::,2a02:6000:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6020::,2a02:6020:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a02:6040::,2a02:6040:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:6060::,2a02:6060:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:60a0::,2a02:60a0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:60c0::,2a02:60c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:60e0::,2a02:60e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6100::,2a02:6100:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6120::,2a02:6120:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6140::,2a02:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6160::,2a02:6160:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6180::,2a02:6180:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:61a0::,2a02:61a0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:61c0::,2a02:61c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:61e0::,2a02:61e0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:6200::,2a02:6207:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6240::,2a02:6240:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6260::,2a02:6260:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6280::,2a02:6280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:62a0::,2a02:62a0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:62c0::,2a02:62c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:62e0::,2a02:62e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6300::,2a02:6300:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:6320::,2a02:6320:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a02:6340::,2a02:6340:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:6360::,2a02:6360:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:6380::,2a02:6380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:63a0::,2a02:63a0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:63c0::,2a02:63c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:63e0::,2a02:63e0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6400::,2a02:6400:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6420::,2a02:6420:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:6440::,2a02:6440:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:6460::,2a02:6460:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:6480::,2a02:6480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:64a0::,2a02:64a0:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:64c0::,2a02:64c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:64e0::,2a02:64e0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6500::,2a02:6500:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6520::,2a02:6520:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:6540::,2a02:6540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6560::,2a02:6560:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6580::,2a02:6580:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:65a0::,2a02:65a0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:65c0::,2a02:65c0:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:65e0::,2a02:65e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6600::,2a02:6600:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:6620::,2a02:6620:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6640::,2a02:6640:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6660::,2a02:6660:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6680::,2a02:6680:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:66a0::,2a02:66a0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:66c0::,2a02:66c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:66e0::,2a02:66e0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6700::,2a02:6700:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:6720::,2a02:6720:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:6740::,2a02:6740:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:6760::,2a02:6760:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6780::,2a02:6780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:67a0::,2a02:67a0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a02:67c0::,2a02:67c0:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a02:67e0::,2a02:67e0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:6800::,2a02:6800:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:6820::,2a02:6820:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6840::,2a02:6840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6860::,2a02:6860:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:6880::,2a02:6880:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:68a0::,2a02:68a0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:68c0::,2a02:68c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:68e0::,2a02:68e0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6900::,2a02:6900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:6920::,2a02:6920:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6940::,2a02:6940:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:6960::,2a02:6960:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6980::,2a02:6980:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:69a0::,2a02:69a0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:69c0::,2a02:69c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:69e0::,2a02:69e0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6a00::,2a02:6a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6a20::,2a02:6a20:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6a40::,2a02:6a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6a60::,2a02:6a60:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:6a80::,2a02:6a80:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:6aa0::,2a02:6aa0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6ac0::,2a02:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6ae0::,2a02:6ae0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6b00::,2a02:6b00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6b20::,2a02:6b20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:6b40::,2a02:6b40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:6b60::,2a02:6b60:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6b80::,2a02:6b80:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a02:6ba0::,2a02:6ba0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6bc0::,2a02:6bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6be0::,2a02:6be0:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:6c00::,2a02:6c00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6c20::,2a02:6c20:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:6c40::,2a02:6c40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6c60::,2a02:6c60:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:6c80::,2a02:6c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6ca0::,2a02:6ca0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:6cc0::,2a02:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6ce0::,2a02:6ce0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:6d00::,2a02:6d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6d40::,2a02:6d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:6d80::,2a02:6d80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:6dc0::,2a02:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:6e00::,2a02:6e00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:6e80::,2a02:6e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:6ec0::,2a02:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:6f00::,2a02:6f00:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:6f40::,2a02:6f40:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:6f80::,2a02:6f80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:6fc0::,2a02:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7000::,2a02:7007:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a02:7040::,2a02:7040:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:7080::,2a02:7080:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:70c0::,2a02:70c0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a02:7100::,2a02:7100:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:7140::,2a02:7140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7180::,2a02:7180:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:71c0::,2a02:71c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7200::,2a02:7200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7240::,2a02:7240:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:7280::,2a02:7280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:72c0::,2a02:72c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7300::,2a02:7300:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a02:7340::,2a02:7340:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7380::,2a02:7380:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:73c0::,2a02:73c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7440::,2a02:7440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7480::,2a02:7480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:74c0::,2a02:74c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7500::,2a02:7500:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:7540::,2a02:7540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:7580::,2a02:7580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:75c0::,2a02:75c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:7600::,2a02:7600:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:7640::,2a02:7640:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:7680::,2a02:7680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:76c0::,2a02:76c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7700::,2a02:7700:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7740::,2a02:7740:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:7780::,2a02:7780:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a02:77c0::,2a02:77c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7800::,2a02:7800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7840::,2a02:7840:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:7880::,2a02:7880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:78c0::,2a02:78c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7900::,2a02:7900:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:7940::,2a02:7940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7980::,2a02:7980:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a02:79c0::,2a02:79c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:7a00::,2a02:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:7a80::,2a02:7a80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7ac0::,2a02:7ac0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:7b00::,2a02:7b00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7b40::,2a02:7b40:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:7b80::,2a02:7b80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7bc0::,2a02:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7c00::,2a02:7c00:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:7c40::,2a02:7c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:7c80::,2a02:7c80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:7d00::,2a02:7d00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:7d40::,2a02:7d40:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:7d80::,2a02:7d80:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:7dc0::,2a02:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:7e00::,2a02:7e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:7e40::,2a02:7e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7e80::,2a02:7e80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:7ec0::,2a02:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:7f00::,2a02:7f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7f40::,2a02:7f40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:7f80::,2a02:7f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:7fc0::,2a02:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:8000::,2a02:81ff:ffff:ffff:ffff:ffff:ffff:ffff,DJ
+2a02:8200::,2a02:821f:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:8300::,2a02:830f:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:8380::,2a02:838f:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:8400::,2a02:84ff:ffff:ffff:ffff:ffff:ffff:ffff,SX
+2a02:8800::,2a02:88ff:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:9000::,2a02:91ff:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:a000::,2a02:a0ff:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2a02:a200::,2a02:a21f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a300::,2a02:a31f:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:a400::,2a02:a47f:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:a800::,2a02:a83f:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:aa00::,2a02:aa1f:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ab00::,2a02:ab07:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a02:ab40::,2a02:ab47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ab80::,2a02:ab8f:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:ac00::,2a02:ac07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ac40::,2a02:ac47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ac80::,2a02:ac87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:acc0::,2a02:acc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad40::,2a02:ad47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ad80::,2a02:ad87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:adc0::,2a02:adc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ae00::,2a02:ae07:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a02:ae40::,2a02:ae47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:ae80::,2a02:ae87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:aec0::,2a02:aec7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:af00::,2a02:af07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:af40::,2a02:af47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:af80::,2a02:af87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:afc0::,2a02:afc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:b000::,2a02:b1ff:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c000::,2a02:c007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c080::,2a02:c087:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:c0c0::,2a02:c0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c100::,2a02:c107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c140::,2a02:c147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c180::,2a02:c187:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c1c0::,2a02:c1c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c200::,2a02:c207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c280::,2a02:c287:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:c2c0::,2a02:c2c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c300::,2a02:c307:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c340::,2a02:c347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:c380::,2a02:c381:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c390::,2a02:c397:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:c3a0::,2a02:c3a3:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:c3c0::,2a02:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:c400::,2a02:c407:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:c440::,2a02:c447:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:c480::,2a02:c487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c4c0::,2a02:c4c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c500::,2a02:c507:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:c540::,2a02:c547:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:c580::,2a02:c587:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:c5c0::,2a02:c5c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:c600::,2a02:c607:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:c640::,2a02:c647:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:c680::,2a02:c681:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c6a0::,2a02:c6a3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c6c0::,2a02:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c700::,2a02:c707:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c740::,2a02:c747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:c780::,2a02:c787:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a02:c7c0::,2a02:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:c800::,2a02:c807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c840::,2a02:c847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:c880::,2a02:c887:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:c8c0::,2a02:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a02:c900::,2a02:c907:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:c940::,2a02:c947:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:c980::,2a02:c987:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:c9c0::,2a02:c9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ca00::,2a02:ca07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ca40::,2a02:ca47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ca80::,2a02:ca87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:cac0::,2a02:cac7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:cb00::,2a02:cb07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:cb40::,2a02:cb47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cb80::,2a02:cb87:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:cbc0::,2a02:cbc3:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a02:cbe0::,2a02:cbe1:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:cbf0::,2a02:cbf1:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cc00::,2a02:cc07:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:cc40::,2a02:cc47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:cc80::,2a02:cc87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ccc0::,2a02:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:cd00::,2a02:cd07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:cd40::,2a02:cd47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:cd80::,2a02:cd87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:cdc0::,2a02:cdc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ce00::,2a02:ce07:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a02:ce40::,2a02:ce47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ce80::,2a02:ce87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:cec0::,2a02:cec3:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:cee0::,2a02:cee3:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:cf00::,2a02:cf07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:cf80::,2a02:cf87:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:cfc0::,2a02:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d000::,2a02:d007:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d040::,2a02:d047:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:d080::,2a02:d087:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:d0c0::,2a02:d0c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d100::,2a02:d107:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:d140::,2a02:d147:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:d180::,2a02:d187:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d1c0::,2a02:d1c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:d200::,2a02:d207:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:d240::,2a02:d247:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:d280::,2a02:d287:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:d2c0::,2a02:d2c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d300::,2a02:d307:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:d340::,2a02:d347:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d380::,2a02:d387:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d3c0::,2a02:d3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:d400::,2a02:d407:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:d440::,2a02:d447:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:d480::,2a02:d487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d4c0::,2a02:d4c3:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a02:d4e0::,2a02:d4e3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d500::,2a02:d507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:d540::,2a02:d547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:d580::,2a02:d587:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d5c0::,2a02:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:d600::,2a02:d607:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d640::,2a02:d647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d680::,2a02:d683:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:d6a0::,2a02:d6a3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d6c0::,2a02:d6c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a02:d700::,2a02:d707:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:d740::,2a02:d747:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:d780::,2a02:d787:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:d7c0::,2a02:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:d800::,2a02:d807:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:d840::,2a02:d847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d880::,2a02:d887:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:d8c0::,2a02:d8c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:d900::,2a02:d907:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:d940::,2a02:d947:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a02:d980::,2a02:d987:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:d9c0::,2a02:d9c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:da00::,2a02:da07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:da40::,2a02:da47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:da80::,2a02:da87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:dac0::,2a02:dac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:db00::,2a02:db07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:db40::,2a02:db47:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:db80::,2a02:db87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dbc0::,2a02:dbc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dc00::,2a02:dc07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dc40::,2a02:dc47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:dc80::,2a02:dc87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dcc0::,2a02:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:dd00::,2a02:dd07:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a02:dd40::,2a02:dd47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:dd80::,2a02:dd87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ddc0::,2a02:ddc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:de00::,2a02:de07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:de40::,2a02:de47:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:de80::,2a02:de87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:dec0::,2a02:dec7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:df00::,2a02:df07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:df40::,2a02:df47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:df80::,2a02:df87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:dfc0::,2a02:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:e000::,2a02:e007:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e040::,2a02:e047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e080::,2a02:e087:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a02:e0c0::,2a02:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:e100::,2a02:e107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e140::,2a02:e147:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e180::,2a02:e187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:e1c0::,2a02:e1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e200::,2a02:e203:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:e220::,2a02:e223:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:e240::,2a02:e247:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e280::,2a02:e287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e2c0::,2a02:e2c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:e300::,2a02:e307:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a02:e340::,2a02:e347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:e380::,2a02:e387:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:e3c0::,2a02:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e400::,2a02:e407:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:e440::,2a02:e447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e480::,2a02:e487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e4c0::,2a02:e4c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:e500::,2a02:e507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e540::,2a02:e547:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a02:e580::,2a02:e587:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:e5c0::,2a02:e5c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e600::,2a02:e603:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e620::,2a02:e623:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e640::,2a02:e647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:e680::,2a02:e687:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:e700::,2a02:e707:ffff:ffff:ffff:ffff:ffff:ffff,LY
+2a02:e740::,2a02:e747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e780::,2a02:e787:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:e7c0::,2a02:e7c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:e800::,2a02:e807:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:e840::,2a02:e847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e880::,2a02:e887:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:e900::,2a02:e907:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a02:e940::,2a02:e947:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a02:e980::,2a02:e987:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a02:e9c0::,2a02:e9c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ea00::,2a02:ea07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a02:ea40::,2a02:ea47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ea80::,2a02:ea87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:eac0::,2a02:eac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:eb00::,2a02:eb07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:eb40::,2a02:eb47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:eb80::,2a02:eb87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ebc0::,2a02:ebc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:ec00::,2a02:ec07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:ec40::,2a02:ec47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ec80::,2a02:ec87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:ecc0::,2a02:ecc7:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a02:ed00::,2a02:ed07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:ed40::,2a02:ed47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:ed80::,2a02:ed87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:edc0::,2a02:edc7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:ee00::,2a02:ee07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:ee40::,2a02:ee47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ee80::,2a02:ee87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:eec0::,2a02:eec7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:ef00::,2a02:ef07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ef40::,2a02:ef47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:ef80::,2a02:ef87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:efc0::,2a02:efc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f000::,2a02:f007:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a02:f040::,2a02:f047:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a02:f080::,2a02:f083:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:f0a0::,2a02:f0a3:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f0c0::,2a02:f0c7:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a02:f100::,2a02:f107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f140::,2a02:f147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f180::,2a02:f187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:f1c0::,2a02:f1c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a02:f200::,2a02:f207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f240::,2a02:f247:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:f280::,2a02:f287:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a02:f2c0::,2a02:f2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f300::,2a02:f307:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f340::,2a02:f347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f380::,2a02:f387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f3c0::,2a02:f3c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f400::,2a02:f407:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a02:f440::,2a02:f447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f480::,2a02:f487:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:f4c0::,2a02:f4c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a02:f500::,2a02:f507:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f540::,2a02:f543:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f560::,2a02:f563:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f580::,2a02:f587:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a02:f5c0::,2a02:f5c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f600::,2a02:f607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f640::,2a02:f647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f680::,2a02:f687:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f6c0::,2a02:f6c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f700::,2a02:f707:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a02:f740::,2a02:f747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f780::,2a02:f787:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:f7c0::,2a02:f7c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f800::,2a02:f807:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a02:f840::,2a02:f847:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:f880::,2a02:f887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:f8c0::,2a02:f8c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:f900::,2a02:f907:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a02:f940::,2a02:f947:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a02:f980::,2a02:f987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:f9c0::,2a02:f9c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fa00::,2a02:fa07:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a02:fa40::,2a02:fa47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a02:fa80::,2a02:fa87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fac0::,2a02:fac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:fb00::,2a02:fb07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fb40::,2a02:fb47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fb80::,2a02:fb87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:fbc0::,2a02:fbc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a02:fc00::,2a02:fc07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a02:fc40::,2a02:fc47:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:fc80::,2a02:fc87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a02:fcc0::,2a02:fcc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fd00::,2a02:fd07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:fd40::,2a02:fd47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:fd80::,2a02:fd87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a02:fdc0::,2a02:fdc7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a02:fe00::,2a02:fe07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a02:fe40::,2a02:fe47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:fec0::,2a02:fec7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a02:ff00::,2a02:ff07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a02:ff40::,2a02:ff47:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a02:ff80::,2a02:ff87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a02:ffc0::,2a02:ffc7:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a03:40::,2a03:40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:80::,2a03:80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:c0::,2a03:c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:100::,2a03:100:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:140::,2a03:140:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:180::,2a03:180:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:1c0::,2a03:1c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:200::,2a03:200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:240::,2a03:247:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:280::,2a03:280:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a03:2c0::,2a03:2c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:300::,2a03:300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:340::,2a03:340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:380::,2a03:380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:3c0::,2a03:3c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:400::,2a03:400:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:440::,2a03:440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:480::,2a03:480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4c0::,2a03:4c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:500::,2a03:500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:540::,2a03:540:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a03:580::,2a03:580:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5c0::,2a03:5c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:600::,2a03:600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:640::,2a03:640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:680::,2a03:680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:6c0::,2a03:6c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:700::,2a03:700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:740::,2a03:740:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:780::,2a03:780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7c0::,2a03:7c0:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:800::,2a03:800:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:840::,2a03:840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:880::,2a03:880:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:8c0::,2a03:8c0:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:900::,2a03:900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:940::,2a03:940:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:980::,2a03:980:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:9c0::,2a03:9c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a00::,2a03:a00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:a40::,2a03:a40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:a80::,2a03:a80:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a03:ac0::,2a03:ac0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:b00::,2a03:b00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b40::,2a03:b40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:b80::,2a03:b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:bc0::,2a03:bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c00::,2a03:c00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:c40::,2a03:c40:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:c80::,2a03:c80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:cc0::,2a03:cc0:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:d00::,2a03:d00:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:d40::,2a03:d40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d80::,2a03:d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:dc0::,2a03:dc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:e00::,2a03:e00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:e40::,2a03:e40:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:e80::,2a03:e80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ec0::,2a03:ec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f00::,2a03:f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:f40::,2a03:f40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:f80::,2a03:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:fc0::,2a03:fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1000::,2a03:1000:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:1040::,2a03:1040:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1080::,2a03:1080:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:10c0::,2a03:10c3:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1100::,2a03:1100:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:1140::,2a03:1140:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:1180::,2a03:1180:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:11c0::,2a03:11c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1200::,2a03:1200:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:1240::,2a03:1240:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:1280::,2a03:1280:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:12c0::,2a03:12c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:1300::,2a03:1300:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:1340::,2a03:1340:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1380::,2a03:1380:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:13c0::,2a03:13c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1400::,2a03:1400:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:1440::,2a03:1440:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1480::,2a03:1480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:14c0::,2a03:14c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1500::,2a03:1500:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:1540::,2a03:1540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1580::,2a03:1580:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:15c0::,2a03:15c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1600::,2a03:1600:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1640::,2a03:1640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1680::,2a03:1680:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:16c0::,2a03:16c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1700::,2a03:1707:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:1740::,2a03:1740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1780::,2a03:1780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:17c0::,2a03:17c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1800::,2a03:1800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1840::,2a03:1840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:1880::,2a03:1880:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:18c0::,2a03:18c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1900::,2a03:1900:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:1940::,2a03:1940:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1980::,2a03:1980:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:1a00::,2a03:1a00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1a40::,2a03:1a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1a80::,2a03:1a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:1ac0::,2a03:1ac0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1b00::,2a03:1b00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:1b40::,2a03:1b40:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:1b80::,2a03:1b80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1bc0::,2a03:1bc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1c00::,2a03:1c00:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a03:1c40::,2a03:1c40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:1c80::,2a03:1c80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:1cc0::,2a03:1cc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:1d00::,2a03:1d00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1d40::,2a03:1d40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:1d80::,2a03:1d80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:1dc0::,2a03:1dc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:1e00::,2a03:1e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1e40::,2a03:1e40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:1e80::,2a03:1e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:1ec0::,2a03:1ec0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:1f00::,2a03:1f00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:1f40::,2a03:1f40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:1f80::,2a03:1f80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2000::,2a03:2000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2040::,2a03:2040:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2080::,2a03:2080:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:20c0::,2a03:20c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2100::,2a03:2100:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:2140::,2a03:2140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2180::,2a03:2180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:21c0::,2a03:21c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2200::,2a03:2200:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:2240::,2a03:2240:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:2280::,2a03:2280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:22c0::,2a03:22c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:2300::,2a03:2300:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:2340::,2a03:2340:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2380::,2a03:2380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:23c0::,2a03:23c0:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:2400::,2a03:2400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2440::,2a03:2440:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2480::,2a03:2480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:24c0::,2a03:24c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:2500::,2a03:2500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2540::,2a03:2540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2580::,2a03:2580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:25c0::,2a03:25c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:2600::,2a03:2600:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:2640::,2a03:2640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2680::,2a03:2680:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:26c0::,2a03:26c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:2700::,2a03:2700:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2740::,2a03:2740:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:2780::,2a03:2780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:27c0::,2a03:27c0:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:2800::,2a03:2800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2840::,2a03:2840:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a03:2880::,2a03:2880:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:28c0::,2a03:28c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:2900::,2a03:2900:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2940::,2a03:2940:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:2980::,2a03:2980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:29c0::,2a03:29c0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:2a00::,2a03:2a00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2a40::,2a03:2a40:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:2a80::,2a03:2a80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2ac0::,2a03:2ac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2b00::,2a03:2b00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:2b40::,2a03:2b40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2b80::,2a03:2b80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:2bc0::,2a03:2bc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2c00::,2a03:2c00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:2c40::,2a03:2c40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2c80::,2a03:2c80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2cc0::,2a03:2cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2d00::,2a03:2d00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2d80::,2a03:2d80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:2dc0::,2a03:2dc0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:2e00::,2a03:2e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:2e40::,2a03:2e40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:2ec0::,2a03:2ec0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:2f00::,2a03:2f00:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:2f40::,2a03:2f40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:2f80::,2a03:2f80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:2fc0::,2a03:2fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3000::,2a03:3000:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:3040::,2a03:3040:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:30c0::,2a03:30c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3100::,2a03:3100:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3140::,2a03:3140:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:3180::,2a03:3180:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:31c0::,2a03:31c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:3200::,2a03:3200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3240::,2a03:3240:ffff:ffff:ffff:ffff:ffff:ffff,UZ
+2a03:3280::,2a03:3280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:32c0::,2a03:32c0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:3300::,2a03:3300:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3340::,2a03:3340:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:3380::,2a03:3380:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:33c0::,2a03:33c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3400::,2a03:3400:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3440::,2a03:3440:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:3480::,2a03:3480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:34c0::,2a03:34c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3500::,2a03:3500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3540::,2a03:3540:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3580::,2a03:3580:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:35c0::,2a03:35c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3600::,2a03:3600:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:3640::,2a03:3640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3680::,2a03:3680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:36c0::,2a03:36c0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:3700::,2a03:3700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:37c0::,2a03:37c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3800::,2a03:3800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:3840::,2a03:3840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3880::,2a03:3880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:38c0::,2a03:38c0:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:3900::,2a03:3900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3940::,2a03:3940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3980::,2a03:3980:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:39c0::,2a03:39c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:3a00::,2a03:3a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3a40::,2a03:3a40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3a80::,2a03:3a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3ac0::,2a03:3ac0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3b00::,2a03:3b00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3b40::,2a03:3b40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:3b80::,2a03:3b80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:3bc0::,2a03:3bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:3c00::,2a03:3c00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3c40::,2a03:3c40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:3c80::,2a03:3c80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3cc0::,2a03:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3d00::,2a03:3d00:ffff:ffff:ffff:ffff:ffff:ffff,AM
+2a03:3d40::,2a03:3d40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3d80::,2a03:3d80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:3dc0::,2a03:3dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3e00::,2a03:3e00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3e40::,2a03:3e40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3e80::,2a03:3e80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:3ec0::,2a03:3ec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:3f00::,2a03:3f00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:3f40::,2a03:3f40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:3f80::,2a03:3f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:3fc0::,2a03:3fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4000::,2a03:4000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4040::,2a03:4040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4080::,2a03:4080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:40c0::,2a03:40c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4100::,2a03:4107:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:4140::,2a03:4140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4180::,2a03:4180:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:41c0::,2a03:41c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4200::,2a03:4200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4240::,2a03:4240:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4280::,2a03:4280:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:42c0::,2a03:42c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4300::,2a03:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4340::,2a03:4340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4380::,2a03:4380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:43c0::,2a03:43c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:4400::,2a03:4400:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4440::,2a03:4440:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4480::,2a03:4480:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:44c0::,2a03:44c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:4500::,2a03:4500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4540::,2a03:4540:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4580::,2a03:4580:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:45c0::,2a03:45c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:4600::,2a03:4600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4640::,2a03:4640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4680::,2a03:4680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:46c0::,2a03:46c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:4700::,2a03:4700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4740::,2a03:4740:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4780::,2a03:4780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:47c0::,2a03:47c7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:4800::,2a03:4800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4840::,2a03:4847:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:4880::,2a03:4880:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:48c0::,2a03:48c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:4900::,2a03:4900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4940::,2a03:4940:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:4980::,2a03:4980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:49c0::,2a03:49c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:4a00::,2a03:4a00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4a40::,2a03:4a40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:4a80::,2a03:4a80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4ac0::,2a03:4ac0:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:4b00::,2a03:4b00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:4b40::,2a03:4b40:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:4b80::,2a03:4b80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:4bc0::,2a03:4bc0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:4c00::,2a03:4c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:4c40::,2a03:4c40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:4c80::,2a03:4c80:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a03:4cc0::,2a03:4cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4d00::,2a03:4d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4d40::,2a03:4d40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4d80::,2a03:4d80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:4dc0::,2a03:4dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4e00::,2a03:4e00:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:4e40::,2a03:4e40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:4e80::,2a03:4e80:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:4ec0::,2a03:4ec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:4f00::,2a03:4f00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:4f40::,2a03:4f40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:4f80::,2a03:4f80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5000::,2a03:5000:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:5040::,2a03:5040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5080::,2a03:5080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:50c0::,2a03:50c0:ffff:ffff:ffff:ffff:ffff:ffff,GI
+2a03:5100::,2a03:5100:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5140::,2a03:5140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5180::,2a03:5180:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:51c0::,2a03:51c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:5200::,2a03:5200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5240::,2a03:5240:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5280::,2a03:5280:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:52c0::,2a03:52c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5300::,2a03:5307:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5380::,2a03:5380:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:53c0::,2a03:53c0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:5400::,2a03:5400:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:5440::,2a03:5440:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:5480::,2a03:5480:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a03:54c0::,2a03:54c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5500::,2a03:5501:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5540::,2a03:5540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:5580::,2a03:5587:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:55c0::,2a03:55c0:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:5600::,2a03:5600:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5640::,2a03:5640:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:5680::,2a03:5680:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:56c0::,2a03:56c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5700::,2a03:5700:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5740::,2a03:5740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5780::,2a03:5780:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:57c0::,2a03:57c0:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:5800::,2a03:5800:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5840::,2a03:5840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5880::,2a03:5880:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:58c0::,2a03:58c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5900::,2a03:5907:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:5940::,2a03:5940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:5980::,2a03:5980:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:59c0::,2a03:59c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5a00::,2a03:5a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5a80::,2a03:5a80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5ac0::,2a03:5ac0:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:5b00::,2a03:5b00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:5b40::,2a03:5b40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5b80::,2a03:5b80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5bc0::,2a03:5bc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:5c00::,2a03:5c00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:5c40::,2a03:5c40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5c80::,2a03:5c80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5cc0::,2a03:5cc0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:5d00::,2a03:5d07:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:5d40::,2a03:5d40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:5d80::,2a03:5d80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:5dc0::,2a03:5dc0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:5e40::,2a03:5e40:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:5e80::,2a03:5e80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:5ec0::,2a03:5ec0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:5f00::,2a03:5f00:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:5f80::,2a03:5f80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:5fc0::,2a03:5fc0:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:6000::,2a03:6000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6040::,2a03:6040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6080::,2a03:6087:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:60c0::,2a03:60c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6100::,2a03:6100:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:6140::,2a03:6140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6180::,2a03:6180:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:61c0::,2a03:61c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6200::,2a03:6200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6240::,2a03:6240:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:62c0::,2a03:62c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:6300::,2a03:6300:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6340::,2a03:6340:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:6380::,2a03:6380:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:63c0::,2a03:63c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:6400::,2a03:6400:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6440::,2a03:6440:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6480::,2a03:6480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:64c0::,2a03:64c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6500::,2a03:6500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6540::,2a03:6540:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:6580::,2a03:6580:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:65c0::,2a03:65c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6600::,2a03:6600:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:6640::,2a03:6640:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:6680::,2a03:6680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:66c0::,2a03:66c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6700::,2a03:6707:ffff:ffff:ffff:ffff:ffff:ffff,KW
+2a03:6740::,2a03:6740:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:6780::,2a03:6780:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:67c0::,2a03:67c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6800::,2a03:6800:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:6840::,2a03:6840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6880::,2a03:6880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:68c0::,2a03:68c0:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:6900::,2a03:6900:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a03:6940::,2a03:6940:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:6980::,2a03:6980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:69c0::,2a03:69c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6a00::,2a03:6a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:6a40::,2a03:6a40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6a80::,2a03:6a80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6ac0::,2a03:6ac0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:6b00::,2a03:6b00:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:6b40::,2a03:6b40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6b80::,2a03:6b80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:6bc0::,2a03:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6c00::,2a03:6c00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6c40::,2a03:6c40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:6c80::,2a03:6c80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6cc0::,2a03:6cc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:6d00::,2a03:6d00:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:6d40::,2a03:6d40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6d80::,2a03:6d80:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:6dc0::,2a03:6dc0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:6e00::,2a03:6e00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:6e40::,2a03:6e40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6e80::,2a03:6e80:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:6ec0::,2a03:6ec0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:6f00::,2a03:6f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:6f40::,2a03:6f40:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:6f80::,2a03:6f87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:6fc0::,2a03:6fc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7000::,2a03:7000:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7040::,2a03:7040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7080::,2a03:7080:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:70c0::,2a03:70c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7100::,2a03:7100:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:7140::,2a03:7140:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:7180::,2a03:7180:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:71c0::,2a03:71c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7200::,2a03:7200:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7240::,2a03:7240:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7280::,2a03:7280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:72c0::,2a03:72c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7300::,2a03:7300:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7340::,2a03:7340:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7380::,2a03:7380:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:73c0::,2a03:73c0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:7400::,2a03:7400:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:7440::,2a03:7440:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7480::,2a03:7480:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:74c0::,2a03:74c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7500::,2a03:7500:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7540::,2a03:7540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7580::,2a03:7580:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:75c0::,2a03:75c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:7640::,2a03:7640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7680::,2a03:7680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:76c0::,2a03:76c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7700::,2a03:7700:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7740::,2a03:7740:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:7780::,2a03:7780:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:77c0::,2a03:77c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:7800::,2a03:7800:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7840::,2a03:7840:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7880::,2a03:7880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7900::,2a03:7900:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7940::,2a03:7940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:79c0::,2a03:79c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7a00::,2a03:7a00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:7a40::,2a03:7a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7a80::,2a03:7a80:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:7b00::,2a03:7b00:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:7b40::,2a03:7b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:7b80::,2a03:7b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7bc0::,2a03:7bc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7c00::,2a03:7c00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:7c40::,2a03:7c40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7c80::,2a03:7c80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7cc0::,2a03:7cc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7d00::,2a03:7d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:7d40::,2a03:7d40:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:7dc0::,2a03:7dc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7e00::,2a03:7e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7e40::,2a03:7e40:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:7e80::,2a03:7e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7ec0::,2a03:7ec0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:7f00::,2a03:7f00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:7f40::,2a03:7f40:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:7f80::,2a03:7f80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:7fc0::,2a03:7fc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:8000::,2a03:8000:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:8040::,2a03:8040:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8080::,2a03:8080:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:80c0::,2a03:80c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8100::,2a03:8100:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8140::,2a03:8140:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8180::,2a03:8180:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:81c0::,2a03:81c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8200::,2a03:8200:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8240::,2a03:8240:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8280::,2a03:8280:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:82c0::,2a03:82c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8300::,2a03:8300:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8340::,2a03:8340:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8380::,2a03:8380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:83c0::,2a03:83c0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:8400::,2a03:8400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8440::,2a03:8440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8480::,2a03:8480:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:84c0::,2a03:84c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8500::,2a03:8500:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:8540::,2a03:8540:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:8580::,2a03:8580:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:85c0::,2a03:85c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8600::,2a03:8600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:8640::,2a03:8640:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8680::,2a03:8680:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:86c0::,2a03:86c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8700::,2a03:8700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8740::,2a03:8740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8780::,2a03:8780:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:87c0::,2a03:87c0:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:8800::,2a03:8800:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:8840::,2a03:8840:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8880::,2a03:8880:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:88c0::,2a03:88c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8900::,2a03:8900:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:8940::,2a03:8940:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8980::,2a03:8980:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:89c0::,2a03:89c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8a00::,2a03:8a00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8a40::,2a03:8a40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8a80::,2a03:8a80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:8b00::,2a03:8b00:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a03:8b40::,2a03:8b40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8b80::,2a03:8b80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:8bc0::,2a03:8bc0:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:8c00::,2a03:8c00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8c40::,2a03:8c40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:8c80::,2a03:8c87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:8cc0::,2a03:8cc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8d00::,2a03:8d00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:8d40::,2a03:8d40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:8dc0::,2a03:8dc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8e00::,2a03:8e00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:8e40::,2a03:8e40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8e80::,2a03:8e80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:8ec0::,2a03:8ec0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8f00::,2a03:8f07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:8f40::,2a03:8f40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:8f80::,2a03:8f80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:8fc0::,2a03:8fc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9000::,2a03:9000:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9040::,2a03:9040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9080::,2a03:9080:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:90c0::,2a03:90c0:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:9100::,2a03:9100:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:9140::,2a03:9140:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9180::,2a03:9180:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:91c0::,2a03:91c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:9240::,2a03:9240:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:9280::,2a03:9280:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:92c0::,2a03:92c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9300::,2a03:9300:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9340::,2a03:9340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9380::,2a03:9380:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:93c0::,2a03:93c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9400::,2a03:9400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9440::,2a03:9440:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:9480::,2a03:9480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:94c0::,2a03:94c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9500::,2a03:9500:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9540::,2a03:9540:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:9580::,2a03:9580:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:95c0::,2a03:95c0:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:9600::,2a03:9600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9640::,2a03:9640:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a03:9680::,2a03:9680:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:96c0::,2a03:96c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9700::,2a03:9700:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:9740::,2a03:9740:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9780::,2a03:9780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:97c0::,2a03:97c1:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:9800::,2a03:9807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9840::,2a03:9840:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:9880::,2a03:9880:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:98c0::,2a03:98c7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:9900::,2a03:9900:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:9940::,2a03:9940:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:9980::,2a03:9980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:99c0::,2a03:99c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9a00::,2a03:9a00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:9a40::,2a03:9a40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9a80::,2a03:9a80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:9ac0::,2a03:9ac0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:9b00::,2a03:9b00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:9b40::,2a03:9b40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9b80::,2a03:9b80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:9bc0::,2a03:9bc0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:9c00::,2a03:9c00:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:9c40::,2a03:9c40:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:9c80::,2a03:9c80:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a03:9cc0::,2a03:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:9d00::,2a03:9d00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9d40::,2a03:9d40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:9d80::,2a03:9d80:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:9dc0::,2a03:9dc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9e00::,2a03:9e00:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a03:9e40::,2a03:9e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:9e80::,2a03:9e80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9ec0::,2a03:9ec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9f00::,2a03:9f00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:9f40::,2a03:9f40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:9f80::,2a03:9f80:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:a000::,2a03:a000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a040::,2a03:a040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a080::,2a03:a080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:a0c0::,2a03:a0c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a100::,2a03:a100:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:a140::,2a03:a140:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a180::,2a03:a180:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a1c0::,2a03:a1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a200::,2a03:a200:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:a240::,2a03:a240:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a280::,2a03:a280:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a2c0::,2a03:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a300::,2a03:a300:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a03:a340::,2a03:a340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a380::,2a03:a380:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a3c0::,2a03:a3c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a400::,2a03:a400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a440::,2a03:a440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a480::,2a03:a480:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:a4c0::,2a03:a4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a500::,2a03:a500:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a540::,2a03:a540:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:a580::,2a03:a580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a5c0::,2a03:a5c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:a600::,2a03:a600:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:a640::,2a03:a640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a680::,2a03:a680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a6c0::,2a03:a6c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:a740::,2a03:a740:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a780::,2a03:a780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:a7c0::,2a03:a7c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:a800::,2a03:a800:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:a840::,2a03:a840:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:a8c0::,2a03:a8c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:a900::,2a03:a900:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:a940::,2a03:a940:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:a980::,2a03:a980:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:a9c0::,2a03:a9c0:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:aa00::,2a03:aa00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:aa40::,2a03:aa40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:aa80::,2a03:aa80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:aac0::,2a03:aac0:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:ab00::,2a03:ab00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:ab40::,2a03:ab40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:ab80::,2a03:ab80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:abc0::,2a03:abc7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a03:ac00::,2a03:ac00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ac40::,2a03:ac40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:ac80::,2a03:ac80:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:acc0::,2a03:acc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ad00::,2a03:ad00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:ad40::,2a03:ad40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ad80::,2a03:ad80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:adc0::,2a03:adc0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:ae00::,2a03:ae00:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:ae40::,2a03:ae40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:ae80::,2a03:ae80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:aec0::,2a03:aec0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:af00::,2a03:af00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:af40::,2a03:af40:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a03:af80::,2a03:af80:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:afc0::,2a03:afc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:b000::,2a03:b000:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:b040::,2a03:b040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b080::,2a03:b080:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:b0c0::,2a03:b0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:b100::,2a03:b100:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:b140::,2a03:b140:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:b180::,2a03:b180:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a03:b1c0::,2a03:b1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:b200::,2a03:b207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b240::,2a03:b240:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:b280::,2a03:b280:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b300::,2a03:b300:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b340::,2a03:b340:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:b380::,2a03:b380:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b3c0::,2a03:b3c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:b400::,2a03:b400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b440::,2a03:b440:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b480::,2a03:b480:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b4c0::,2a03:b4c0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b500::,2a03:b500:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a03:b540::,2a03:b540:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:b580::,2a03:b580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b5c0::,2a03:b5c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b600::,2a03:b600:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b640::,2a03:b640:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a03:b680::,2a03:b680:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:b6c0::,2a03:b6c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b700::,2a03:b700:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b740::,2a03:b740:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:b780::,2a03:b780:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:b7c0::,2a03:b7c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b800::,2a03:b800:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b840::,2a03:b840:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:b880::,2a03:b887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:b8c0::,2a03:b8c0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:b900::,2a03:b900:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:b940::,2a03:b940:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:b980::,2a03:b980:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:b9c0::,2a03:b9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ba00::,2a03:ba07:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:ba40::,2a03:ba40:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a03:ba80::,2a03:ba80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bac0::,2a03:bac0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bb00::,2a03:bb00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:bb40::,2a03:bb40:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a03:bb80::,2a03:bb80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bbc0::,2a03:bbc0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:bc00::,2a03:bc00:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:bc40::,2a03:bc40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:bc80::,2a03:bc80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:bcc0::,2a03:bcc0:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:bd00::,2a03:bd00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bd40::,2a03:bd47:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:bd80::,2a03:bd80:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:bdc0::,2a03:bdc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:be00::,2a03:be00:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:be40::,2a03:be40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:be80::,2a03:be80:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:bec0::,2a03:bec0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:bf00::,2a03:bf00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:bf40::,2a03:bf40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:bf80::,2a03:bf80:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:bfc0::,2a03:bfc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c000::,2a03:c007:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:c040::,2a03:c040:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:c080::,2a03:c080:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:c0c0::,2a03:c0c0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:c100::,2a03:c100:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:c140::,2a03:c140:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a03:c180::,2a03:c180:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:c1c0::,2a03:c1c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:c200::,2a03:c200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:c240::,2a03:c240:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a03:c280::,2a03:c280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c2c0::,2a03:c2c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c300::,2a03:c300:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:c340::,2a03:c340:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a03:c380::,2a03:c380:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:c3c0::,2a03:c3c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c400::,2a03:c400:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:c440::,2a03:c440:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c480::,2a03:c480:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:c4c0::,2a03:c4c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c500::,2a03:c500:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c540::,2a03:c540:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:c580::,2a03:c580:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:c5c0::,2a03:c5c0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:c600::,2a03:c600:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:c640::,2a03:c640:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c680::,2a03:c680:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:c6c0::,2a03:c6c0:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:c700::,2a03:c700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c740::,2a03:c740:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a03:c780::,2a03:c780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:c7c0::,2a03:c7c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:c800::,2a03:c800:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:c840::,2a03:c840:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:c880::,2a03:c880:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:c8c0::,2a03:c8c0:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:c900::,2a03:c900:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:c940::,2a03:c940:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:c980::,2a03:c980:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:c9c0::,2a03:c9c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:ca00::,2a03:ca00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ca40::,2a03:ca40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:ca80::,2a03:ca87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:cac0::,2a03:cac0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:cb00::,2a03:cb00:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a03:cb40::,2a03:cb40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cb80::,2a03:cb80:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:cbc0::,2a03:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:cc00::,2a03:cc00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:cc40::,2a03:cc40:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:cc80::,2a03:cc80:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:ccc0::,2a03:ccc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cd00::,2a03:cd00:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a03:cd40::,2a03:cd40:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:cd80::,2a03:cd80:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:cdc0::,2a03:cdc0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:ce00::,2a03:ce00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ce40::,2a03:ce47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:ce80::,2a03:ce80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cf00::,2a03:cf00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:cf40::,2a03:cf40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cf80::,2a03:cf80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:cfc0::,2a03:cfc0:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:d000::,2a03:d000:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d040::,2a03:d040:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d080::,2a03:d080:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d0c0::,2a03:d0c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d100::,2a03:d100:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d140::,2a03:d140:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:d180::,2a03:d180:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:d1c0::,2a03:d1c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d200::,2a03:d200:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d280::,2a03:d280:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d2c0::,2a03:d2c0:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d300::,2a03:d300:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:d340::,2a03:d340:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d380::,2a03:d380:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:d3c0::,2a03:d3c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d400::,2a03:d400:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d440::,2a03:d440:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:d480::,2a03:d480:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d4c0::,2a03:d4c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d500::,2a03:d500:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:d540::,2a03:d540:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d580::,2a03:d587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d5c0::,2a03:d5c0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:d600::,2a03:d600:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d640::,2a03:d640:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:d680::,2a03:d680:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:d6c0::,2a03:d6c0:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:d700::,2a03:d700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d740::,2a03:d740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:d780::,2a03:d780:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d7c0::,2a03:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d800::,2a03:d800:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:d840::,2a03:d840:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:d880::,2a03:d880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:d8c0::,2a03:d8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:d900::,2a03:d900:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:d940::,2a03:d940:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:d980::,2a03:d980:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:d9c0::,2a03:d9c0:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:da00::,2a03:da00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:da40::,2a03:da40:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:da80::,2a03:da80:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:dac0::,2a03:dac0:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a03:db00::,2a03:db00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:db40::,2a03:db47:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:db80::,2a03:db80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:dbc0::,2a03:dbc0:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:dc00::,2a03:dc00:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:dc40::,2a03:dc40:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a03:dc80::,2a03:dc80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:dcc0::,2a03:dcc0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:dd00::,2a03:dd00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:dd40::,2a03:dd40:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:dd80::,2a03:dd87:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:ddc0::,2a03:ddc0:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:de00::,2a03:de00:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:de40::,2a03:de40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:de80::,2a03:de80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:dec0::,2a03:dec0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:df00::,2a03:df00:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:df40::,2a03:df40:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a03:df80::,2a03:df80:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:dfc0::,2a03:dfc0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:e000::,2a03:e000:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:e040::,2a03:e040:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e080::,2a03:e080:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e0c0::,2a03:e0c0:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:e100::,2a03:e100:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:e140::,2a03:e140:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e180::,2a03:e180:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:e1c0::,2a03:e1c0:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:e200::,2a03:e200:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:e240::,2a03:e240:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:e280::,2a03:e280:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:e2c0::,2a03:e2c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e340::,2a03:e340:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e380::,2a03:e380:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a03:e3c0::,2a03:e3c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e400::,2a03:e400:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e440::,2a03:e440:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e480::,2a03:e480:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e4c0::,2a03:e4c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e500::,2a03:e500:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:e540::,2a03:e540:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e580::,2a03:e587:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:e600::,2a03:e600:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:e640::,2a03:e640:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:e680::,2a03:e680:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e6c0::,2a03:e6c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e700::,2a03:e700:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:e740::,2a03:e740:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:e780::,2a03:e780:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e7c0::,2a03:e7c0:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a03:e800::,2a03:e800:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:e880::,2a03:e880:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:e8c0::,2a03:e8c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:e900::,2a03:e900:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:e940::,2a03:e940:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a03:e980::,2a03:e980:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a03:e9c0::,2a03:e9c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:ea00::,2a03:ea00:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a03:ea40::,2a03:ea40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:ea80::,2a03:ea80:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:eac0::,2a03:eac0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:eb00::,2a03:eb00:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a03:eb40::,2a03:eb40:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:eb80::,2a03:eb80:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a03:ebc0::,2a03:ebc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ec00::,2a03:ec00:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a03:ec40::,2a03:ec40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ec80::,2a03:ec80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ecc0::,2a03:ecc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ed00::,2a03:ed00:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:ed40::,2a03:ed40:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:ed80::,2a03:ed80:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:edc0::,2a03:edc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ee00::,2a03:ee00:ffff:ffff:ffff:ffff:ffff:ffff,FO
+2a03:ee40::,2a03:ee40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ee80::,2a03:ee80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:eec0::,2a03:eec0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:ef00::,2a03:ef00:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:ef40::,2a03:ef40:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a03:ef80::,2a03:ef80:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a03:efc0::,2a03:efc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f000::,2a03:f000:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:f040::,2a03:f040:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a03:f080::,2a03:f080:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:f0c0::,2a03:f0c0:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:f100::,2a03:f100:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:f140::,2a03:f140:ffff:ffff:ffff:ffff:ffff:ffff,NC
+2a03:f180::,2a03:f180:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:f1c0::,2a03:f1c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f200::,2a03:f200:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:f280::,2a03:f280:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:f2c0::,2a03:f2c0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f300::,2a03:f300:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a03:f340::,2a03:f340:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a03:f380::,2a03:f380:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:f3c0::,2a03:f3c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f400::,2a03:f400:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a03:f440::,2a03:f440:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:f480::,2a03:f480:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a03:f4c0::,2a03:f4c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:f500::,2a03:f500:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f540::,2a03:f540:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f580::,2a03:f580:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:f5c0::,2a03:f5c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f600::,2a03:f600:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a03:f640::,2a03:f640:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:f680::,2a03:f680:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a03:f6c0::,2a03:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a03:f700::,2a03:f700:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f740::,2a03:f740:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a03:f780::,2a03:f780:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a03:f7c0::,2a03:f7c0:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:f800::,2a03:f800:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a03:f840::,2a03:f840:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:f880::,2a03:f880:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:f8c0::,2a03:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a03:f900::,2a03:f907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:f940::,2a03:f940:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a03:f980::,2a03:f980:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a03:f9c0::,2a03:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:fa00::,2a03:fa00:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:fa40::,2a03:fa40:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a03:fa80::,2a03:fa80:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a03:fac0::,2a03:fac0:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a03:fb00::,2a03:fb00:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:fb40::,2a03:fb40:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:fb80::,2a03:fb80:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a03:fbc0::,2a03:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:fc00::,2a03:fc07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a03:fc40::,2a03:fc40:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a03:fc80::,2a03:fc80:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:fcc0::,2a03:fcc0:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:fd40::,2a03:fd40:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a03:fdc0::,2a03:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,GL
+2a03:fe00::,2a03:fe00:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a03:fe40::,2a03:fe40:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a03:fe80::,2a03:fe80:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a03:ff40::,2a03:ff40:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a03:ffc0::,2a03:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a04::,2a04:7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:40::,2a04:47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:80::,2a04:87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:c0::,2a04:c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:100::,2a04:107:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:140::,2a04:147:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:180::,2a04:187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1c0::,2a04:1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:200::,2a04:207:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:240::,2a04:247:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:280::,2a04:287:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2c0::,2a04:2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:300::,2a04:307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:340::,2a04:347:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:380::,2a04:387:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3c0::,2a04:3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:400::,2a04:407:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:440::,2a04:447:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:480::,2a04:487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4c0::,2a04:4c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:500::,2a04:507:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:540::,2a04:547:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:580::,2a04:587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5c0::,2a04:5c3:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5e0::,2a04:5e3:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:600::,2a04:607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:640::,2a04:647:ffff:ffff:ffff:ffff:ffff:ffff,VA
+2a04:680::,2a04:687:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:6c0::,2a04:6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:700::,2a04:707:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:740::,2a04:747:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:780::,2a04:787:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:7c0::,2a04:7c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:800::,2a04:807:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:840::,2a04:847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:880::,2a04:887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8c0::,2a04:8c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:900::,2a04:907:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a04:940::,2a04:947:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a04:980::,2a04:987:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:9c0::,2a04:9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a00::,2a04:a07:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a04:a40::,2a04:a47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a80::,2a04:a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:ac0::,2a04:ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:b00::,2a04:b07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:b40::,2a04:b47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b80::,2a04:b87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:bc0::,2a04:bc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:c00::,2a04:c07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c40::,2a04:c47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c80::,2a04:c87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:cc0::,2a04:cc7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:d00::,2a04:d07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d40::,2a04:d47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d80::,2a04:d87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dc0::,2a04:dc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e00::,2a04:e07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e40::,2a04:e47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:e80::,2a04:e87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:ec0::,2a04:ec7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:f00::,2a04:f07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:f40::,2a04:f47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:f80::,2a04:f87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:fc0::,2a04:fc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:1000::,2a04:1007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1040::,2a04:1047:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:1080::,2a04:1087:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:10c0::,2a04:10c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:1100::,2a04:1103:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:1120::,2a04:1123:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1140::,2a04:1143:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1160::,2a04:1161:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:1170::,2a04:1171:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1180::,2a04:1187:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:11c0::,2a04:11c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1200::,2a04:1207:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:1240::,2a04:1247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:1280::,2a04:1287:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:12c0::,2a04:12c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:1300::,2a04:1307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1340::,2a04:1347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1380::,2a04:1387:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:13c0::,2a04:13c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1400::,2a04:1407:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1440::,2a04:1447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1480::,2a04:1487:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:14c0::,2a04:14c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:1500::,2a04:1507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1540::,2a04:1547:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:1580::,2a04:1587:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:15c0::,2a04:15c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1600::,2a04:1607:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1640::,2a04:1647:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1680::,2a04:1687:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:16c0::,2a04:16c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1700::,2a04:1707:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1740::,2a04:1747:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1780::,2a04:1787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:17c0::,2a04:17c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:1800::,2a04:1807:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1840::,2a04:1847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1880::,2a04:1887:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:18c0::,2a04:18c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1900::,2a04:1907:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:1940::,2a04:1947:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1980::,2a04:1987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:19c0::,2a04:19c7:ffff:ffff:ffff:ffff:ffff:ffff,PS
+2a04:1a00::,2a04:1a07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:1a40::,2a04:1a47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1a80::,2a04:1a87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1ac0::,2a04:1ac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:1b00::,2a04:1b07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1b40::,2a04:1b47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:1b80::,2a04:1b87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:1bc0::,2a04:1bc7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:1c00::,2a04:1c07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1c40::,2a04:1c47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1c80::,2a04:1c87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:1cc0::,2a04:1cc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1d00::,2a04:1d07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1d40::,2a04:1d47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:1d80::,2a04:1d87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:1dc0::,2a04:1dc7:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:1e00::,2a04:1e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1e40::,2a04:1e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:1e80::,2a04:1e87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:1ec0::,2a04:1ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:1f00::,2a04:1f03:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:1f20::,2a04:1f23:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:1f40::,2a04:1f47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:1f80::,2a04:1f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:1fc0::,2a04:1fc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2000::,2a04:2007:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2040::,2a04:2047:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:2080::,2a04:2087:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:20c0::,2a04:20c7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:2100::,2a04:2107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2140::,2a04:2147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2180::,2a04:2187:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a04:21c0::,2a04:21c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2200::,2a04:2207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2240::,2a04:2247:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a04:2280::,2a04:2287:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:22c0::,2a04:22c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:2300::,2a04:2307:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:2340::,2a04:2347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2380::,2a04:2387:ffff:ffff:ffff:ffff:ffff:ffff,HU
+2a04:2400::,2a04:241f:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:2500::,2a04:2507:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2540::,2a04:2547:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:2580::,2a04:2587:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:25c0::,2a04:25c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:2600::,2a04:2607:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:2640::,2a04:2647:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:2680::,2a04:2687:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:26c0::,2a04:26c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2700::,2a04:2707:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:2740::,2a04:2747:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:2780::,2a04:2787:ffff:ffff:ffff:ffff:ffff:ffff,TJ
+2a04:27c0::,2a04:27c7:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:2800::,2a04:2807:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:2840::,2a04:2847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2880::,2a04:2883:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:28a0::,2a04:28a0:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:28b0::,2a04:28b1:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:28c0::,2a04:28c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:2900::,2a04:2907:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2940::,2a04:2947:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2980::,2a04:2987:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:29c0::,2a04:29c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2a00::,2a04:2a07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2a40::,2a04:2a47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2a80::,2a04:2a87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2ac0::,2a04:2ac7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2b00::,2a04:2b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2b40::,2a04:2b47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:2b80::,2a04:2b87:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:2bc0::,2a04:2bc7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:2c00::,2a04:2c07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:2c80::,2a04:2c87:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:2cc0::,2a04:2cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:2d00::,2a04:2d07:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a04:2d40::,2a04:2d47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:2d80::,2a04:2d87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:2dc0::,2a04:2dc7:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:2e00::,2a04:2e07:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:2e40::,2a04:2e47:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:2e80::,2a04:2e87:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a04:2ec0::,2a04:2ec7:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a04:2f00::,2a04:2f07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:2f40::,2a04:2f47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:2f80::,2a04:2f87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:2fc0::,2a04:2fc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3000::,2a04:3007:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:3040::,2a04:3047:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a04:3080::,2a04:3087:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:30c0::,2a04:30c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3100::,2a04:3107:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:3140::,2a04:3147:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3180::,2a04:3187:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:31c0::,2a04:31c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3200::,2a04:3207:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3240::,2a04:3247:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3280::,2a04:3287:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:32c0::,2a04:32c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3300::,2a04:3307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3340::,2a04:3347:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:3380::,2a04:3387:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:33c0::,2a04:33c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3400::,2a04:3407:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:3440::,2a04:3447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3480::,2a04:3487:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:34c0::,2a04:34c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3500::,2a04:3507:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:3540::,2a04:3547:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:3580::,2a04:3587:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:35c0::,2a04:35c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:3600::,2a04:3607:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3640::,2a04:3647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3680::,2a04:3687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:36c0::,2a04:36c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3700::,2a04:3707:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:3740::,2a04:3747:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3780::,2a04:3787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3800::,2a04:3807:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3840::,2a04:3847:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:3880::,2a04:3883:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:38a0::,2a04:38a3:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:38c0::,2a04:38c7:ffff:ffff:ffff:ffff:ffff:ffff,JE
+2a04:3900::,2a04:3907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3940::,2a04:3947:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:3980::,2a04:3987:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:39c0::,2a04:39c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:3a00::,2a04:3a07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3a40::,2a04:3a40:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3a50::,2a04:3a51:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:3a60::,2a04:3a63:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3a80::,2a04:3a87:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a04:3ac0::,2a04:3ac7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:3b00::,2a04:3b07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3b40::,2a04:3b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:3b80::,2a04:3b87:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:3bc0::,2a04:3bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:3c00::,2a04:3c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:3c40::,2a04:3c47:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:3c80::,2a04:3c87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3cc0::,2a04:3cc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:3d00::,2a04:3d07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:3d40::,2a04:3d47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3d80::,2a04:3d87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:3dc0::,2a04:3dc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:3e00::,2a04:3e07:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a04:3e40::,2a04:3e47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:3e80::,2a04:3e87:ffff:ffff:ffff:ffff:ffff:ffff,BA
+2a04:3ec0::,2a04:3ec7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:3f00::,2a04:3f07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:3f40::,2a04:3f47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:3f80::,2a04:3f87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:3fc0::,2a04:3fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4000::,2a04:4007:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4040::,2a04:4047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4080::,2a04:4087:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:40c0::,2a04:40c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:4100::,2a04:4107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4140::,2a04:4147:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4180::,2a04:4187:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:41c0::,2a04:41c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:4200::,2a04:4207:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4240::,2a04:4247:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:4280::,2a04:4287:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:42c0::,2a04:42c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:4300::,2a04:4307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4340::,2a04:4347:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4380::,2a04:4387:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:43c0::,2a04:43c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:4400::,2a04:4407:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4440::,2a04:4447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4480::,2a04:4487:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:44c0::,2a04:44c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4500::,2a04:4507:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:4540::,2a04:4547:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4580::,2a04:4587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:45c0::,2a04:45c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4600::,2a04:4607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4640::,2a04:4647:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:4680::,2a04:4687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:46c0::,2a04:46c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:4700::,2a04:4703:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:4720::,2a04:4723:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:4740::,2a04:4747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4780::,2a04:4787:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a04:47c0::,2a04:47c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4800::,2a04:4807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4840::,2a04:4847:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4880::,2a04:4887:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:48c0::,2a04:48c7:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:4900::,2a04:4907:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4940::,2a04:4947:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4980::,2a04:4987:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:49c0::,2a04:49c7:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:4a00::,2a04:4a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4a40::,2a04:4a47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4a80::,2a04:4a87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:4b00::,2a04:4b07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4b40::,2a04:4b47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:4b80::,2a04:4b87:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:4bc0::,2a04:4bc7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:4c00::,2a04:4c07:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:4c40::,2a04:4c47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:4c80::,2a04:4c87:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:4cc0::,2a04:4cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4d00::,2a04:4d07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:4d40::,2a04:4d47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:4d80::,2a04:4d87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:4dc0::,2a04:4dc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4e00::,2a04:4e07:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a04:4e80::,2a04:4e87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:4ec0::,2a04:4ec7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:4f00::,2a04:4f07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:4f40::,2a04:4f47:ffff:ffff:ffff:ffff:ffff:ffff,KZ
+2a04:4f80::,2a04:4f87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:4fc0::,2a04:4fc3:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:4fe0::,2a04:4fe3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5200::,2a04:5207:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5240::,2a04:5247:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5280::,2a04:5287:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:52c0::,2a04:52c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5300::,2a04:5307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5340::,2a04:5347:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5380::,2a04:5387:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:53c0::,2a04:53c7:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:5400::,2a04:5407:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:5440::,2a04:5447:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:5480::,2a04:5487:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:54c0::,2a04:54c7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:5500::,2a04:5507:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5540::,2a04:5547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:5580::,2a04:5587:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:55c0::,2a04:55c7:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:5600::,2a04:5607:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a04:5640::,2a04:5647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5680::,2a04:5687:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:56c0::,2a04:56c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5700::,2a04:5707:ffff:ffff:ffff:ffff:ffff:ffff,LI
+2a04:5740::,2a04:5747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5780::,2a04:5787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:57c0::,2a04:57c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:5800::,2a04:5807:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:5880::,2a04:5887:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:58c0::,2a04:58c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:5900::,2a04:5907:ffff:ffff:ffff:ffff:ffff:ffff,AL
+2a04:5940::,2a04:5947:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:5980::,2a04:5987:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:59c0::,2a04:59c7:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:5a00::,2a04:5a07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5a40::,2a04:5a47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5a80::,2a04:5a87:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:5ac0::,2a04:5ac7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5b00::,2a04:5b07:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:5b40::,2a04:5b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5b80::,2a04:5b87:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:5bc0::,2a04:5bc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5c00::,2a04:5c07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:5c40::,2a04:5c47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5c80::,2a04:5c87:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:5cc0::,2a04:5cc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5d00::,2a04:5d07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:5d40::,2a04:5d47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:5d80::,2a04:5d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5dc0::,2a04:5dc7:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:5e00::,2a04:5e07:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:5e40::,2a04:5e47:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:5e80::,2a04:5e87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:5ec0::,2a04:5ec7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:5f00::,2a04:5f07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:5f40::,2a04:5f47:ffff:ffff:ffff:ffff:ffff:ffff,LV
+2a04:5f80::,2a04:5f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6000::,2a04:6007:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:6040::,2a04:6047:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6080::,2a04:6087:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:60c0::,2a04:60c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6100::,2a04:6107:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6180::,2a04:6187:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:6200::,2a04:6207:ffff:ffff:ffff:ffff:ffff:ffff,JO
+2a04:6240::,2a04:6247:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6280::,2a04:6287:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:62c0::,2a04:62c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:6300::,2a04:6307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6340::,2a04:6347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6380::,2a04:6387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:63c0::,2a04:63c7:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:6400::,2a04:6407:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:6440::,2a04:6447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6480::,2a04:6487:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:64c0::,2a04:64c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6500::,2a04:6507:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a04:6540::,2a04:6547:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6580::,2a04:6587:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:65c0::,2a04:65c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6600::,2a04:6607:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6640::,2a04:6647:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6650::,2a04:6651:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:6680::,2a04:6687:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:66c0::,2a04:66c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6700::,2a04:6707:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a04:6740::,2a04:6747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:6780::,2a04:6787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:67c0::,2a04:67c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:6800::,2a04:6807:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:6840::,2a04:6847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6880::,2a04:6887:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:68c0::,2a04:68c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:6900::,2a04:6907:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:6940::,2a04:6947:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:6980::,2a04:6987:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:69c0::,2a04:69c7:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a04:6a00::,2a04:6a07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:6a40::,2a04:6a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:6a80::,2a04:6a87:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6ac0::,2a04:6ac7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:6b00::,2a04:6b07:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:6b40::,2a04:6b47:ffff:ffff:ffff:ffff:ffff:ffff,GG
+2a04:6b80::,2a04:6b87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6bc0::,2a04:6bc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6c00::,2a04:6c07:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:6c40::,2a04:6c47:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:6c80::,2a04:6c87:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:6cc0::,2a04:6cc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6d00::,2a04:6d07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:6d40::,2a04:6d47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:6d80::,2a04:6d87:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:6dc0::,2a04:6dc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6e00::,2a04:6e07:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:6e40::,2a04:6e47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6e80::,2a04:6e87:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:6ec0::,2a04:6ec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:6f00::,2a04:6f07:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:6f40::,2a04:6f47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:6f80::,2a04:6f83:ffff:ffff:ffff:ffff:ffff:ffff,QA
+2a04:6fa0::,2a04:6fa1:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:6fb0::,2a04:6fb1:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:6fc0::,2a04:6fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7000::,2a04:7007:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:7040::,2a04:7047:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7080::,2a04:7087:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:70c0::,2a04:70c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7100::,2a04:7107:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:7140::,2a04:7147:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7180::,2a04:7187:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:71c0::,2a04:71c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7200::,2a04:7207:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7240::,2a04:7247:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:7280::,2a04:7287:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:72c0::,2a04:72c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7300::,2a04:7307:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7340::,2a04:7347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7380::,2a04:7387:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:73c0::,2a04:73c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7400::,2a04:7407:ffff:ffff:ffff:ffff:ffff:ffff,ME
+2a04:7440::,2a04:7447:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7480::,2a04:7487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:74c0::,2a04:74c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7500::,2a04:7507:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:7540::,2a04:7547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:7580::,2a04:7587:ffff:ffff:ffff:ffff:ffff:ffff,MD
+2a04:75c0::,2a04:75c7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:7600::,2a04:7607:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:7640::,2a04:7647:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:7680::,2a04:7687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:76c0::,2a04:76c7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a04:7700::,2a04:7707:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:7740::,2a04:7747:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:7780::,2a04:7787:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:77c0::,2a04:77c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:7800::,2a04:7807:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:7840::,2a04:7847:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:7880::,2a04:7887:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:78c0::,2a04:78c3:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:78e0::,2a04:78e3:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:7900::,2a04:7907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:7940::,2a04:7947:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7980::,2a04:7987:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:79c0::,2a04:79c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7a00::,2a04:7a07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7a40::,2a04:7a47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:7a80::,2a04:7a87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7ac0::,2a04:7ac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7b40::,2a04:7b47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7b80::,2a04:7b87:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:7bc0::,2a04:7bc7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:7c00::,2a04:7c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7c40::,2a04:7c47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7c80::,2a04:7c87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:7cc0::,2a04:7cc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7d00::,2a04:7d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:7d40::,2a04:7d47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:7d80::,2a04:7d87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:7dc0::,2a04:7dc7:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:7e00::,2a04:7e07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:7e40::,2a04:7e47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:7e80::,2a04:7e87:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:7ec0::,2a04:7ec7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:7f00::,2a04:7f07:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:7f40::,2a04:7f47:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:7f80::,2a04:7f87:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:7fc0::,2a04:7fc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8000::,2a04:8007:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:8040::,2a04:8047:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8080::,2a04:8087:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:80c0::,2a04:80c7:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:8100::,2a04:8107:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8140::,2a04:8147:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8180::,2a04:8181:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a04:8190::,2a04:8191:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:81a0::,2a04:81a3:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:81c0::,2a04:81c7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a04:8200::,2a04:8207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:8240::,2a04:8247:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8280::,2a04:8287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:82c0::,2a04:82c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:8300::,2a04:8307:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a04:8340::,2a04:8347:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:8380::,2a04:8387:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:83c0::,2a04:83c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:8400::,2a04:8407:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8440::,2a04:8447:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:8480::,2a04:8487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:84c0::,2a04:84c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8500::,2a04:8507:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8540::,2a04:8547:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:8580::,2a04:8587:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:85c0::,2a04:85c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:8600::,2a04:8607:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:8640::,2a04:8647:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:8680::,2a04:8687:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:86c0::,2a04:86c7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:8700::,2a04:8707:ffff:ffff:ffff:ffff:ffff:ffff,MT
+2a04:8740::,2a04:8747:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8780::,2a04:8787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:87c0::,2a04:87c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:8800::,2a04:8807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8840::,2a04:8847:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:8880::,2a04:8887:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:88c0::,2a04:88c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8900::,2a04:8907:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8940::,2a04:8947:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:8980::,2a04:8987:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:89c0::,2a04:89c7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8a00::,2a04:8a07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8a40::,2a04:8a47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8a80::,2a04:8a87:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:8ac0::,2a04:8ac7:ffff:ffff:ffff:ffff:ffff:ffff,BH
+2a04:8b00::,2a04:8b07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8b40::,2a04:8b47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8b80::,2a04:8b87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8bc0::,2a04:8bc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:8c00::,2a04:8c07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8c40::,2a04:8c47:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8c80::,2a04:8c87:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:8cc0::,2a04:8cc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:8d00::,2a04:8d07:ffff:ffff:ffff:ffff:ffff:ffff,MK
+2a04:8d40::,2a04:8d47:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:8d80::,2a04:8d87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:8dc0::,2a04:8dc7:ffff:ffff:ffff:ffff:ffff:ffff,LU
+2a04:8e00::,2a04:8e07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:8e40::,2a04:8e47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8e80::,2a04:8e81:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8e90::,2a04:8e91:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:8ea0::,2a04:8ea3:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8f00::,2a04:8f07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:8f40::,2a04:8f47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:8f80::,2a04:8f87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:8fc0::,2a04:8fc7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9000::,2a04:9007:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9040::,2a04:9047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9080::,2a04:9087:ffff:ffff:ffff:ffff:ffff:ffff,SY
+2a04:90c0::,2a04:90c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:9100::,2a04:9107:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:9140::,2a04:9147:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:9180::,2a04:9187:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:91c0::,2a04:91c7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:9240::,2a04:9247:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9280::,2a04:9287:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:92c0::,2a04:92c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9300::,2a04:9307:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:9340::,2a04:9347:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9380::,2a04:9387:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:93c0::,2a04:93c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:9400::,2a04:9407:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:9440::,2a04:9447:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:9480::,2a04:9487:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:94e0::,2a04:94e3:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9500::,2a04:9507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9540::,2a04:9547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:9580::,2a04:9587:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:95c0::,2a04:95c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9600::,2a04:9607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9640::,2a04:9647:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:9680::,2a04:9687:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:96c0::,2a04:96c7:ffff:ffff:ffff:ffff:ffff:ffff,CY
+2a04:9700::,2a04:9707:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9740::,2a04:9747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:9780::,2a04:9787:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:97c0::,2a04:97c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:9800::,2a04:9807:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9840::,2a04:9847:ffff:ffff:ffff:ffff:ffff:ffff,IS
+2a04:9880::,2a04:9887:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:98c0::,2a04:98c7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9900::,2a04:9907:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9940::,2a04:9947:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:9980::,2a04:9987:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:99c0::,2a04:99c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:9a00::,2a04:9a07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9a40::,2a04:9a47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:9a80::,2a04:9a87:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9ac0::,2a04:9ac7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:9b00::,2a04:9b07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9b40::,2a04:9b47:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a04:9b80::,2a04:9b87:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:9bc0::,2a04:9bc7:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:9c00::,2a04:9c07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9c40::,2a04:9c47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:9c80::,2a04:9c87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9cc0::,2a04:9cc7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:9d00::,2a04:9d07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9d40::,2a04:9d47:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:9d80::,2a04:9d87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:9dc0::,2a04:9dc7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:9e00::,2a04:9e07:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:9e40::,2a04:9e47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:9e80::,2a04:9e87:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:9ec0::,2a04:9ec7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:9f00::,2a04:9f07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:9f40::,2a04:9f47:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:9f80::,2a04:9f87:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:a000::,2a04:a007:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a040::,2a04:a047:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:a080::,2a04:a087:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a0c0::,2a04:a0c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a100::,2a04:a107:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:a140::,2a04:a147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a180::,2a04:a187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a1c0::,2a04:a1c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:a200::,2a04:a207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:a240::,2a04:a247:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:a280::,2a04:a287:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:a2c0::,2a04:a2c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:a300::,2a04:a307:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:a340::,2a04:a347:ffff:ffff:ffff:ffff:ffff:ffff,SM
+2a04:a380::,2a04:a387:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:a3c0::,2a04:a3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a400::,2a04:a407:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a440::,2a04:a440:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a450::,2a04:a451:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:a460::,2a04:a461:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:a470::,2a04:a471:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a480::,2a04:a487:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:a4c0::,2a04:a4c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:a500::,2a04:a507:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a540::,2a04:a547:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a580::,2a04:a587:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:a5c0::,2a04:a5c7:ffff:ffff:ffff:ffff:ffff:ffff,GR
+2a04:a600::,2a04:a607:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:a640::,2a04:a647:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:a680::,2a04:a687:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:a6c0::,2a04:a6c7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:a700::,2a04:a707:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a740::,2a04:a747:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:a780::,2a04:a787:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a7c0::,2a04:a7c7:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a04:a800::,2a04:a807:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a840::,2a04:a847:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:a880::,2a04:a887:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:a8c0::,2a04:a8c7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a04:a900::,2a04:a907:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:a940::,2a04:a947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:a980::,2a04:a987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:a9c0::,2a04:a9c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:aa00::,2a04:aa07:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:aa40::,2a04:aa47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:aa80::,2a04:aa87:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:aac0::,2a04:aac7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:ab00::,2a04:ab07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:ab40::,2a04:ab47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:ab80::,2a04:ab87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:abc0::,2a04:abc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:ac00::,2a04:ac07:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:ac40::,2a04:ac47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:ac80::,2a04:ac87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:acc0::,2a04:acc7:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:ad00::,2a04:ad07:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:ad40::,2a04:ad47:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:ad80::,2a04:ad87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:adc0::,2a04:adc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:ae00::,2a04:ae3f:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:b000::,2a04:b007:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b040::,2a04:b047:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b080::,2a04:b087:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:b0c0::,2a04:b0c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b100::,2a04:b107:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:b140::,2a04:b147:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:b180::,2a04:b187:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:b1c0::,2a04:b1c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:b200::,2a04:b207:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:b240::,2a04:b247:ffff:ffff:ffff:ffff:ffff:ffff,IM
+2a04:b280::,2a04:b287:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:b2c0::,2a04:b2c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b300::,2a04:b307:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:b340::,2a04:b347:ffff:ffff:ffff:ffff:ffff:ffff,KG
+2a04:b380::,2a04:b387:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:b3c0::,2a04:b3c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b400::,2a04:b407:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:b440::,2a04:b447:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b480::,2a04:b487:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:b4c0::,2a04:b4c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b500::,2a04:b507:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:b540::,2a04:b547:ffff:ffff:ffff:ffff:ffff:ffff,SK
+2a04:b580::,2a04:b587:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:b5c0::,2a04:b5c7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:b600::,2a04:b607:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:b640::,2a04:b647:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:b680::,2a04:b687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b6c0::,2a04:b6c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b700::,2a04:b707:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b740::,2a04:b747:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b780::,2a04:b787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b7c0::,2a04:b7c7:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:b800::,2a04:b807:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:b840::,2a04:b847:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:b880::,2a04:b887:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:b8c0::,2a04:b8c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:b900::,2a04:b907:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:b940::,2a04:b947:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:b980::,2a04:b987:ffff:ffff:ffff:ffff:ffff:ffff,HR
+2a04:b9c0::,2a04:b9c7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:ba00::,2a04:ba07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:ba40::,2a04:ba47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:ba80::,2a04:ba87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:bac0::,2a04:bac7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:bb00::,2a04:bb07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:bb40::,2a04:bb47:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:bb80::,2a04:bb87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:bbc0::,2a04:bbc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:bc00::,2a04:bc07:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:bc40::,2a04:bc47:ffff:ffff:ffff:ffff:ffff:ffff,UA
+2a04:bc80::,2a04:bc87:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:bcc0::,2a04:bcc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:bd00::,2a04:bd07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:bd40::,2a04:bd47:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:bd80::,2a04:bd87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:bdc0::,2a04:bdc7:ffff:ffff:ffff:ffff:ffff:ffff,BE
+2a04:be00::,2a04:be03:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:be20::,2a04:be23:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:be40::,2a04:be47:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:be80::,2a04:be87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:bec0::,2a04:bec7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:bf00::,2a04:bf07:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:bf40::,2a04:bf47:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:bf80::,2a04:bf87:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:bfc0::,2a04:bfc7:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c000::,2a04:c007:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c040::,2a04:c047:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c080::,2a04:c087:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:c0c0::,2a04:c0c7:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:c100::,2a04:c107:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c140::,2a04:c147:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:c180::,2a04:c187:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:c1c0::,2a04:c1c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c200::,2a04:c207:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a04:c240::,2a04:c247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c280::,2a04:c287:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:c2c0::,2a04:c2c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:c300::,2a04:c307:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:c340::,2a04:c347:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c380::,2a04:c387:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:c3c0::,2a04:c3c7:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:c400::,2a04:c407:ffff:ffff:ffff:ffff:ffff:ffff,OM
+2a04:c440::,2a04:c447:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:c480::,2a04:c487:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c4c0::,2a04:c4c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c500::,2a04:c507:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c540::,2a04:c547:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c580::,2a04:c587:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c5c0::,2a04:c5c7:ffff:ffff:ffff:ffff:ffff:ffff,US
+2a04:c600::,2a04:c607:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c640::,2a04:c647:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:c680::,2a04:c687:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c6c0::,2a04:c6c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c740::,2a04:c747:ffff:ffff:ffff:ffff:ffff:ffff,CZ
+2a04:c780::,2a04:c787:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c800::,2a04:c807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:c840::,2a04:c847:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:c880::,2a04:c887:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c8c0::,2a04:c8c7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:c900::,2a04:c907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:c940::,2a04:c947:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:c980::,2a04:c987:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:c9c0::,2a04:c9c7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:ca00::,2a04:ca07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:ca40::,2a04:ca47:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:ca80::,2a04:ca87:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cac0::,2a04:cac7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:cb00::,2a04:cb07:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:cb40::,2a04:cb47:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:cb80::,2a04:cb87:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:cbc0::,2a04:cbc7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:cc00::,2a04:cc07:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cc40::,2a04:cc47:ffff:ffff:ffff:ffff:ffff:ffff,BY
+2a04:cc80::,2a04:cc87:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:ccc0::,2a04:ccc7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:cd00::,2a04:cd07:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:cd40::,2a04:cd47:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:cd80::,2a04:cd87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:cdc0::,2a04:cdc7:ffff:ffff:ffff:ffff:ffff:ffff,PL
+2a04:ce00::,2a04:ce07:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a04:ce40::,2a04:ce47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:ce80::,2a04:ce87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:cec0::,2a04:cec7:ffff:ffff:ffff:ffff:ffff:ffff,FR
+2a04:cf00::,2a04:cf07:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:cf40::,2a04:cf47:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:cf80::,2a04:cf87:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:cfc0::,2a04:cfc7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:d000::,2a04:d007:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d040::,2a04:d047:ffff:ffff:ffff:ffff:ffff:ffff,GE
+2a04:d080::,2a04:d087:ffff:ffff:ffff:ffff:ffff:ffff,RS
+2a04:d0c0::,2a04:d0c7:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d100::,2a04:d107:ffff:ffff:ffff:ffff:ffff:ffff,IQ
+2a04:d140::,2a04:d147:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d180::,2a04:d187:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d1c0::,2a04:d1c7:ffff:ffff:ffff:ffff:ffff:ffff,LB
+2a04:d200::,2a04:d207:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d240::,2a04:d247:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d280::,2a04:d287:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d2c0::,2a04:d2c7:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:d300::,2a04:d307:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d340::,2a04:d347:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:d380::,2a04:d387:ffff:ffff:ffff:ffff:ffff:ffff,AZ
+2a04:d3c0::,2a04:d3c7:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d400::,2a04:d407:ffff:ffff:ffff:ffff:ffff:ffff,EE
+2a04:d440::,2a04:d447:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d480::,2a04:d487:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d4c0::,2a04:d4c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d500::,2a04:d507:ffff:ffff:ffff:ffff:ffff:ffff,FI
+2a04:d540::,2a04:d547:ffff:ffff:ffff:ffff:ffff:ffff,AT
+2a04:d580::,2a04:d587:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:d5c0::,2a04:d5c7:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:d600::,2a04:d607:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d640::,2a04:d647:ffff:ffff:ffff:ffff:ffff:ffff,IE
+2a04:d680::,2a04:d687:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:d6c0::,2a04:d6c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:d700::,2a04:d707:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:d740::,2a04:d747:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:d780::,2a04:d787:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d7c0::,2a04:d7c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d800::,2a04:d807:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d840::,2a04:d847:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d880::,2a04:d887:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d8c0::,2a04:d8c7:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:d900::,2a04:d907:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:d940::,2a04:d947:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:d980::,2a04:d987:ffff:ffff:ffff:ffff:ffff:ffff,IL
+2a04:d9c0::,2a04:d9c7:ffff:ffff:ffff:ffff:ffff:ffff,RO
+2a04:da00::,2a04:da07:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:da40::,2a04:da47:ffff:ffff:ffff:ffff:ffff:ffff,IR
+2a04:da80::,2a04:da87:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:dac0::,2a04:dac7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:db00::,2a04:db07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:db40::,2a04:db47:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:db80::,2a04:db87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dbc0::,2a04:dbc3:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dc00::,2a04:dc07:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:dc40::,2a04:dc47:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:dc80::,2a04:dc87:ffff:ffff:ffff:ffff:ffff:ffff,NO
+2a04:dcc0::,2a04:dcc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:dd00::,2a04:dd07:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:dd40::,2a04:dd47:ffff:ffff:ffff:ffff:ffff:ffff,SI
+2a04:dd80::,2a04:dd87:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:ddc0::,2a04:ddc7:ffff:ffff:ffff:ffff:ffff:ffff,SE
+2a04:de00::,2a04:de07:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:de40::,2a04:de47:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:de80::,2a04:de87:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:dec0::,2a04:dec7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:df00::,2a04:df07:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:df40::,2a04:df47:ffff:ffff:ffff:ffff:ffff:ffff,LT
+2a04:df80::,2a04:df87:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:dfc0::,2a04:dfc7:ffff:ffff:ffff:ffff:ffff:ffff,DE
+2a04:e040::,2a04:e047:ffff:ffff:ffff:ffff:ffff:ffff,PT
+2a04:e080::,2a04:e087:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e0c0::,2a04:e0c7:ffff:ffff:ffff:ffff:ffff:ffff,SA
+2a04:e100::,2a04:e107:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e140::,2a04:e147:ffff:ffff:ffff:ffff:ffff:ffff,GB
+2a04:e180::,2a04:e187:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:e1c0::,2a04:e1c7:ffff:ffff:ffff:ffff:ffff:ffff,NL
+2a04:e200::,2a04:e207:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:e240::,2a04:e247:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2a04:e280::,2a04:e287:ffff:ffff:ffff:ffff:ffff:ffff,TR
+2a04:e2c0::,2a04:e2c7:ffff:ffff:ffff:ffff:ffff:ffff,ES
+2a04:e300::,2a04:e307:ffff:ffff:ffff:ffff:ffff:ffff,CH
+2a04:e340::,2a04:e347:ffff:ffff:ffff:ffff:ffff:ffff,AE
+2a04:e380::,2a04:e387:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e3c0::,2a04:e3c7:ffff:ffff:ffff:ffff:ffff:ffff,DK
+2a04:e400::,2a04:e407:ffff:ffff:ffff:ffff:ffff:ffff,BG
+2a04:e440::,2a04:e447:ffff:ffff:ffff:ffff:ffff:ffff,RU
+2a04:e480::,2a04:e487:ffff:ffff:ffff:ffff:ffff:ffff,IT
+2c0e::,2c0e:fff:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0e:2000::,2c0e:200f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f600::,2c0f:f600:ffff:ffff:ffff:ffff:ffff:ffff,GN
+2c0f:f608::,2c0f:f608:ffff:ffff:ffff:ffff:ffff:ffff,RE
+2c0f:f610::,2c0f:f610:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f618::,2c0f:f618:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f620::,2c0f:f620:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f628::,2c0f:f628:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:f630::,2c0f:f630:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:f638::,2c0f:f638:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f640::,2c0f:f640:ffff:ffff:ffff:ffff:ffff:ffff,GA
+2c0f:f648::,2c0f:f648:ffff:ffff:ffff:ffff:ffff:ffff,TD
+2c0f:f650::,2c0f:f650:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f658::,2c0f:f658:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f660::,2c0f:f660:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f668::,2c0f:f668:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f670::,2c0f:f670:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:f678::,2c0f:f678:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:f680::,2c0f:f680:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:f688::,2c0f:f688:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f690::,2c0f:f690:ffff:ffff:ffff:ffff:ffff:ffff,SS
+2c0f:f698::,2c0f:f698:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:f6a0::,2c0f:f6a0:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f6a8::,2c0f:f6a8:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:f6b0::,2c0f:f6b0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f6b8::,2c0f:f6b8:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:f6c0::,2c0f:f6c0:ffff:ffff:ffff:ffff:ffff:ffff,CG
+2c0f:f6c8::,2c0f:f6c8:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:f6d0::,2c0f:f6d0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f6d8::,2c0f:f6d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6e0::,2c0f:f6e0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6e8::,2c0f:f6e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6f0::,2c0f:f6f0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f6f8::,2c0f:f6f8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f700::,2c0f:f700:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f708::,2c0f:f708:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f800::,2c0f:f80f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f810::,2c0f:f810:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f818::,2c0f:f818:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:f820::,2c0f:f820:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f828::,2c0f:f828:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f830::,2c0f:f830:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:f838::,2c0f:f838:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f840::,2c0f:f840:ffff:ffff:ffff:ffff:ffff:ffff,GQ
+2c0f:f848::,2c0f:f848:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f850::,2c0f:f850:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f858::,2c0f:f858:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2c0f:f860::,2c0f:f860:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:f870::,2c0f:f870:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f878::,2c0f:f878:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:f880::,2c0f:f880:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f888::,2c0f:f888:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:f890::,2c0f:f890:ffff:ffff:ffff:ffff:ffff:ffff,GM
+2c0f:f898::,2c0f:f898:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f8a0::,2c0f:f8a0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:f8a8::,2c0f:f8a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f8b0::,2c0f:f8b0:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2c0f:f8b8::,2c0f:f8b8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f8c0::,2c0f:f8c0:ffff:ffff:ffff:ffff:ffff:ffff,GQ
+2c0f:f8c8::,2c0f:f8c8:ffff:ffff:ffff:ffff:ffff:ffff,NE
+2c0f:f8d0::,2c0f:f8d0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f8d8::,2c0f:f8d8:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:f8e0::,2c0f:f8e0:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f8e8::,2c0f:f8e8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:f8f0::,2c0f:f8f0:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:f8f8::,2c0f:f8f8:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:f900::,2c0f:f900:ffff:ffff:ffff:ffff:ffff:ffff,ML
+2c0f:f908::,2c0f:f908:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:f918::,2c0f:f918:ffff:ffff:ffff:ffff:ffff:ffff,RE
+2c0f:f920::,2c0f:f920:ffff:ffff:ffff:ffff:ffff:ffff,CG
+2c0f:f928::,2c0f:f928:ffff:ffff:ffff:ffff:ffff:ffff,GW
+2c0f:f930::,2c0f:f930:ffff:ffff:ffff:ffff:ffff:ffff,LR
+2c0f:f938::,2c0f:f938:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:f940::,2c0f:f940:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2c0f:f948::,2c0f:f948:ffff:ffff:ffff:ffff:ffff:ffff,GA
+2c0f:f950::,2c0f:f950:ffff:ffff:ffff:ffff:ffff:ffff,SS
+2c0f:f958::,2c0f:f958:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f960::,2c0f:f960:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f968::,2c0f:f968:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2c0f:f970::,2c0f:f970:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f978::,2c0f:f978:ffff:ffff:ffff:ffff:ffff:ffff,CD
+2c0f:f980::,2c0f:f980:ffff:ffff:ffff:ffff:ffff:ffff,NA
+2c0f:f988::,2c0f:f988:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f990::,2c0f:f990:ffff:ffff:ffff:ffff:ffff:ffff,GN
+2c0f:f998::,2c0f:f998:ffff:ffff:ffff:ffff:ffff:ffff,MR
+2c0f:f9a0::,2c0f:f9a0:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:f9a8::,2c0f:f9a8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9b0::,2c0f:f9b0:ffff:ffff:ffff:ffff:ffff:ffff,GA
+2c0f:f9b8::,2c0f:f9b8:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:f9c0::,2c0f:f9c0:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:f9c8::,2c0f:f9c8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9d0::,2c0f:f9d0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:f9d8::,2c0f:f9d8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9e0::,2c0f:f9e0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:f9e8::,2c0f:f9e8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:f9f0::,2c0f:f9f0:ffff:ffff:ffff:ffff:ffff:ffff,MG
+2c0f:f9f8::,2c0f:f9f8:ffff:ffff:ffff:ffff:ffff:ffff,BJ
+2c0f:fa00::,2c0f:fa00:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fa08::,2c0f:fa08:ffff:ffff:ffff:ffff:ffff:ffff,CD
+2c0f:fa10::,2c0f:fa10:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fa18::,2c0f:fa18:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2c0f:fa20::,2c0f:fa20:ffff:ffff:ffff:ffff:ffff:ffff,SS
+2c0f:fa28::,2c0f:fa28:ffff:ffff:ffff:ffff:ffff:ffff,MG
+2c0f:fa38::,2c0f:fa38:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa40::,2c0f:fa40:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa48::,2c0f:fa48:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa58::,2c0f:fa58:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa60::,2c0f:fa60:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa68::,2c0f:fa68:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fa70::,2c0f:fa70:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa78::,2c0f:fa78:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa80::,2c0f:fa80:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fa88::,2c0f:fa88:ffff:ffff:ffff:ffff:ffff:ffff,ST
+2c0f:fa90::,2c0f:fa90:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fa98::,2c0f:fa98:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:faa0::,2c0f:faa7:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:fab0::,2c0f:fabf:ffff:ffff:ffff:ffff:ffff:ffff,TN
+2c0f:fac0::,2c0f:fac0:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fac8::,2c0f:fac8:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:fad0::,2c0f:fad0:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:fad8::,2c0f:fad8:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fae0::,2c0f:fae0:ffff:ffff:ffff:ffff:ffff:ffff,CM
+2c0f:fae8::,2c0f:fae8:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:faf0::,2c0f:faf0:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:faf8::,2c0f:faf8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb00::,2c0f:fb00:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fb08::,2c0f:fb08:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb10::,2c0f:fb10:ffff:ffff:ffff:ffff:ffff:ffff,LY
+2c0f:fb18::,2c0f:fb18:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb20::,2c0f:fb20:ffff:ffff:ffff:ffff:ffff:ffff,MA
+2c0f:fb28::,2c0f:fb28:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb30::,2c0f:fb30:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb38::,2c0f:fb38:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:fb40::,2c0f:fb40:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb48::,2c0f:fb48:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2c0f:fb50::,2c0f:fb50:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fb58::,2c0f:fb58:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fb60::,2c0f:fb60:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fb68::,2c0f:fb68:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:fb70::,2c0f:fb70:ffff:ffff:ffff:ffff:ffff:ffff,AO
+2c0f:fb78::,2c0f:fb78:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fb80::,2c0f:fb80:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fb88::,2c0f:fb88:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fb90::,2c0f:fb90:ffff:ffff:ffff:ffff:ffff:ffff,MZ
+2c0f:fb98::,2c0f:fb98:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fba0::,2c0f:fba0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fba8::,2c0f:fba8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fbb0::,2c0f:fbb0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fbb8::,2c0f:fbb8:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fbc0::,2c0f:fbc0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fbc8::,2c0f:fbc8:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fbd0::,2c0f:fbd0:ffff:ffff:ffff:ffff:ffff:ffff,GN
+2c0f:fbd8::,2c0f:fbd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fbe0::,2c0f:fc1f:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fc40::,2c0f:fc40:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0f:fc48::,2c0f:fc48:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fc50::,2c0f:fc50:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:fc58::,2c0f:fc58:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fc60::,2c0f:fc61:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fc68::,2c0f:fc68:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fc70::,2c0f:fc70:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fc78::,2c0f:fc78:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:fc80::,2c0f:fc80:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fc88::,2c0f:fc89:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0f:fc90::,2c0f:fc90:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fc98::,2c0f:fc98:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fca0::,2c0f:fca0:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fca8::,2c0f:fca8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fcb0::,2c0f:fcb0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fcb8::,2c0f:fcb8:ffff:ffff:ffff:ffff:ffff:ffff,GM
+2c0f:fcc8::,2c0f:fcc8:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fcd0::,2c0f:fcd0:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fcd8::,2c0f:fcd8:ffff:ffff:ffff:ffff:ffff:ffff,SO
+2c0f:fce0::,2c0f:fce0:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fce8::,2c0f:fce8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fcf0::,2c0f:fcf0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fcf8::,2c0f:fcf8:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fd00::,2c0f:fd00:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:fd08::,2c0f:fd08:ffff:ffff:ffff:ffff:ffff:ffff,GM
+2c0f:fd10::,2c0f:fd10:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fd18::,2c0f:fd18:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:fd20::,2c0f:fd20:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fd28::,2c0f:fd28:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fd30::,2c0f:fd30:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fd38::,2c0f:fd38:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fd40::,2c0f:fd40:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fd48::,2c0f:fd48:ffff:ffff:ffff:ffff:ffff:ffff,ZW
+2c0f:fd50::,2c0f:fd50:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fd58::,2c0f:fd58:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fd60::,2c0f:fd60:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fd68::,2c0f:fd68:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fd70::,2c0f:fd70:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fd78::,2c0f:fd78:ffff:ffff:ffff:ffff:ffff:ffff,BI
+2c0f:fd80::,2c0f:fd80:ffff:ffff:ffff:ffff:ffff:ffff,BF
+2c0f:fd88::,2c0f:fd88:ffff:ffff:ffff:ffff:ffff:ffff,GH
+2c0f:fd90::,2c0f:fd90:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fd98::,2c0f:fd98:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fda0::,2c0f:fda0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fda8::,2c0f:fda8:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fdb0::,2c0f:fdb0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fdb8::,2c0f:fdb8:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fdc0::,2c0f:fdc0:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fdc8::,2c0f:fdc8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fdd0::,2c0f:fdd0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fdd8::,2c0f:fdd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fde0::,2c0f:fde0:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fde8::,2c0f:fde8:ffff:ffff:ffff:ffff:ffff:ffff,MW
+2c0f:fdf0::,2c0f:fdf0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fdf8::,2c0f:fdf8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe08::,2c0f:fe08:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fe10::,2c0f:fe10:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fe18::,2c0f:fe18:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe20::,2c0f:fe20:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe28::,2c0f:fe28:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe30::,2c0f:fe30:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:fe38::,2c0f:fe38:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fe40::,2c0f:fe40:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:fe48::,2c0f:fe48:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe50::,2c0f:fe50:ffff:ffff:ffff:ffff:ffff:ffff,DZ
+2c0f:fe58::,2c0f:fe58:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:fe60::,2c0f:fe60:ffff:ffff:ffff:ffff:ffff:ffff,RW
+2c0f:fe68::,2c0f:fe68:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:fe70::,2c0f:fe70:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fe78::,2c0f:fe78:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe80::,2c0f:fe80:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fe88::,2c0f:fe88:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:fe90::,2c0f:fe90:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fe98::,2c0f:fe98:ffff:ffff:ffff:ffff:ffff:ffff,TZ
+2c0f:fea0::,2c0f:fea0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fea8::,2c0f:fea8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:feb0::,2c0f:feb1:ffff:ffff:ffff:ffff:ffff:ffff,MU
+2c0f:feb8::,2c0f:feb8:ffff:ffff:ffff:ffff:ffff:ffff,ZM
+2c0f:fec0::,2c0f:fec0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:fec8::,2c0f:fec8:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:fed8::,2c0f:fed8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:fee0::,2c0f:fee0:ffff:ffff:ffff:ffff:ffff:ffff,EG
+2c0f:fef0::,2c0f:fef0:ffff:ffff:ffff:ffff:ffff:ffff,SC
+2c0f:fef8::,2c0f:fef8:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:ff00::,2c0f:ff00:ffff:ffff:ffff:ffff:ffff:ffff,BW
+2c0f:ff08::,2c0f:ff08:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ff10::,2c0f:ff10:ffff:ffff:ffff:ffff:ffff:ffff,CD
+2c0f:ff18::,2c0f:ff18:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:ff20::,2c0f:ff20:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:ff28::,2c0f:ff28:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:ff30::,2c0f:ff30:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ff40::,2c0f:ff80:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ff88::,2c0f:ff88:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:ff90::,2c0f:ff90:ffff:ffff:ffff:ffff:ffff:ffff,KE
+2c0f:ff98::,2c0f:ff98:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:ffa0::,2c0f:ffa0:ffff:ffff:ffff:ffff:ffff:ffff,UG
+2c0f:ffa8::,2c0f:ffa8:ffff:ffff:ffff:ffff:ffff:ffff,LS
+2c0f:ffb0::,2c0f:ffb0:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:ffb8::,2c0f:ffb8:ffff:ffff:ffff:ffff:ffff:ffff,SD
+2c0f:ffc0::,2c0f:ffc0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffc8::,2c0f:ffc8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffd0::,2c0f:ffd0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffd8::,2c0f:ffd8:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffe0::,2c0f:ffe0:ffff:ffff:ffff:ffff:ffff:ffff,ZA
+2c0f:ffe8::,2c0f:ffe8:ffff:ffff:ffff:ffff:ffff:ffff,NG
+2c0f:fff0::,2c0f:fff0:ffff:ffff:ffff:ffff:ffff:ffff,NG
diff --git a/src/config/include.am b/src/config/include.am
new file mode 100644
index 000000000..35961b829
--- /dev/null
+++ b/src/config/include.am
@@ -0,0 +1,16 @@
+confdir = $(sysconfdir)/tor
+
+tordatadir = $(datadir)/tor
+
+EXTRA_DIST+= src/config/geoip src/config/geoip6
+# fallback-consensus
+
+conf_DATA = src/config/torrc.sample
+
+tordata_DATA = src/config/geoip src/config/geoip6
+# fallback_consensus
+
+# If we don't have it, fake it.
+src_config_fallback-consensus:
+ touch src/config/fallback-consensus
+
diff --git a/src/config/mmdb-convert.py b/src/config/mmdb-convert.py
new file mode 100644
index 000000000..cbe9acdc5
--- /dev/null
+++ b/src/config/mmdb-convert.py
@@ -0,0 +1,466 @@
+#!/usr/bin/python3
+
+# This software has been dedicated to the public domain under the CC0
+# public domain dedication.
+#
+# To the extent possible under law, the person who associated CC0
+# with mmdb-convert.py has waived all copyright and related or
+# neighboring rights to mmdb-convert.py.
+#
+# You should have received a copy of the CC0 legalcode along with this
+# work in doc/cc0.txt. If not, see
+# <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+# Nick Mathewson is responsible for this kludge, but takes no
+# responsibility for it.
+
+"""This kludge is meant to
+ parse mmdb files in sufficient detail to dump out the old format
+ that Tor expects. It's also meant to be pure-python.
+
+ When given a simplicity/speed tradeoff, it opts for simplicity.
+
+ You will not understand the code without undestanding the MaxMind-DB
+ file format. It is specified at:
+ https://github.com/maxmind/MaxMind-DB/blob/master/MaxMind-DB-spec.md.
+
+ This isn't so much tested. When it breaks, you get to keep both
+ pieces.
+"""
+
+import struct
+import bisect
+import socket
+import binascii
+import sys
+import time
+
+METADATA_MARKER = b'\xab\xcd\xefMaxMind.com'
+
+# Here's some python2/python3 junk. Better solutions wanted.
+try:
+ ord(b"1"[0])
+except TypeError:
+ def byte_to_int(b):
+ "convert a single element of a bytestring to an integer."
+ return b
+else:
+ byte_to_int = ord
+
+# Here's some more python2/python3 junk. Better solutions wanted.
+try:
+ str(b"a", "utf8")
+except TypeError:
+ bytesToStr = str
+else:
+ def bytesToStr(b):
+ "convert a bytestring in utf8 to a string."
+ return str(b, 'utf8')
+
+def to_int(s):
+ "Parse a big-endian integer from bytestring s."
+ result = 0
+ for c in s:
+ result *= 256
+ result += byte_to_int(c)
+ return result
+
+def to_int24(s):
+ "Parse a pair of big-endian 24-bit integers from bytestring s."
+ a, b, c = struct.unpack("!HHH", s)
+ return ((a <<8)+(b>>8)), (((b&0xff)<<16)+c)
+
+def to_int32(s):
+ "Parse a pair of big-endian 32-bit integers from bytestring s."
+ a, b = struct.unpack("!LL", s)
+ return a, b
+
+def to_int28(s):
+ "Parse a pair of big-endian 28-bit integers from bytestring s."
+ a, b = unpack("!LL", s + b'\x00')
+ return (((a & 0xf0) << 20) + (a >> 8)), ((a & 0x0f) << 24) + (b >> 8)
+
+class Tree(object):
+ "Holds a node in the tree"
+ def __init__(self, left, right):
+ self.left = left
+ self.right = right
+
+def resolve_tree(tree, data):
+ """Fill in the left_item and right_item fields for all values in the tree
+ so that they point to another Tree, or to a Datum, or to None."""
+ d = Datum(None, None, None, None)
+ def resolve_item(item):
+ "Helper: resolve a single index."
+ if item < len(tree):
+ return tree[item]
+ elif item == len(tree):
+ return None
+ else:
+ d.pos = (item - len(tree) - 16)
+ p = bisect.bisect_left(data, d)
+ assert data[p].pos == d.pos
+ return data[p]
+
+ for t in tree:
+ t.left_item = resolve_item(t.left)
+ t.right_item = resolve_item(t.right)
+
+def parse_search_tree(s, record_size):
+ """Given a bytestring and a record size in bits, parse the tree.
+ Return a list of nodes."""
+ record_bytes = (record_size*2) // 8
+ nodes = []
+ p = 0
+ try:
+ to_leftright = { 24: to_int24,
+ 28: to_int28,
+ 32: to_int32 }[ record_size ]
+ except KeyError:
+ raise NotImplementedError("Unsupported record size in bits: %d" %
+ record_size)
+ while p < len(s):
+ left, right = to_leftright(s[p:p+record_bytes])
+ p += record_bytes
+
+ nodes.append( Tree(left, right ) )
+
+ return nodes
+
+class Datum(object):
+ """Holds a single entry from the Data section"""
+ def __init__(self, pos, kind, ln, data):
+ self.pos = pos # Position of this record within data section
+ self.kind = kind # Type of this record. one of TP_*
+ self.ln = ln # Length field, which might be overloaded.
+ self.data = data # Raw bytes data.
+ self.children = None # Used for arrays and maps.
+
+ def __repr__(self):
+ return "Datum(%r,%r,%r,%r)" % (self.pos, self.kind, self.ln, self.data)
+
+ # Comparison functions used for bsearch
+ def __lt__(self, other):
+ return self.pos < other.pos
+
+ def __gt__(self, other):
+ return self.pos > other.pos
+
+ def __eq__(self, other):
+ return self.pos == other.pos
+
+ def build_maps(self):
+ """If this is a map or array, fill in its 'map' field if it's a map,
+ and the 'map' field of all its children."""
+
+ if not hasattr(self, 'nChildren'):
+ return
+
+ if self.kind == TP_ARRAY:
+ del self.nChildren
+ for c in self.children:
+ c.build_maps()
+
+ elif self.kind == TP_MAP:
+ del self.nChildren
+ self.map = {}
+ for i in range(0, len(self.children), 2):
+ k = self.children[i].deref()
+ v = self.children[i+1].deref()
+ v.build_maps()
+ if k.kind != TP_UTF8:
+ raise ValueError("Bad dictionary key type %d"% k.kind)
+ self.map[bytesToStr(k.data)] = v
+
+ def int_val(self):
+ """If this is an integer type, return its value"""
+ assert self.kind in (TP_UINT16, TP_UINT32, TP_UINT64,
+ TP_UINT128, TP_SINT32)
+ i = to_int(self.data)
+ if self.kind == TP_SINT32:
+ if i & 0x80000000:
+ i = i - 0x100000000
+ return i
+
+ def deref(self):
+ """If this value is a pointer, return its pointed-to-value. Chase
+ through multiple layers of pointers if need be. If this isn't
+ a pointer, return it."""
+ n = 0
+ s = self
+ while s.kind == TP_PTR:
+ s = s.ptr
+ n += 1
+ assert n < 100
+ return s
+
+def resolve_pointers(data):
+ """Fill in the ptr field of every pointer in data."""
+ search = Datum(None, None, None, None)
+ for d in data:
+ if d.kind == TP_PTR:
+ search.pos = d.ln
+ p = bisect.bisect_left(data, search)
+ assert data[p].pos == d.ln
+ d.ptr = data[p]
+
+TP_PTR = 1
+TP_UTF8 = 2
+TP_DBL = 3
+TP_BYTES = 4
+TP_UINT16 = 5
+TP_UINT32 = 6
+TP_MAP = 7
+TP_SINT32 = 8
+TP_UINT64 = 9
+TP_UINT128 = 10
+TP_ARRAY = 11
+TP_DCACHE = 12
+TP_END = 13
+TP_BOOL = 14
+TP_FLOAT = 15
+
+def get_type_and_len(s):
+ """Data parsing helper: decode the type value and much-overloaded 'length'
+ field for the value starting at s. Return a 3-tuple of type, length,
+ and number of bytes used to encode type-plus-length."""
+ c = byte_to_int(s[0])
+ tp = c >> 5
+ skip = 1
+ if tp == 0:
+ tp = byte_to_int(s[1])+7
+ skip = 2
+ ln = c & 31
+
+ # I'm sure I don't know what they were thinking here...
+ if tp == TP_PTR:
+ len_len = (ln >> 3) + 1
+ if len_len < 4:
+ ln &= 7
+ ln <<= len_len * 8
+ else:
+ ln = 0
+ ln += to_int(s[skip:skip+len_len])
+ ln += (0, 0, 2048, 526336, 0)[len_len]
+ skip += len_len
+ elif ln >= 29:
+ len_len = ln - 28
+ ln = to_int(s[skip:skip+len_len])
+ ln += (0, 29, 285, 65821)[len_len]
+ skip += len_len
+
+ return tp, ln, skip
+
+# Set of types for which 'length' doesn't mean length.
+IGNORE_LEN_TYPES = set([
+ TP_MAP, # Length is number of key-value pairs that follow.
+ TP_ARRAY, # Length is number of members that follow.
+ TP_PTR, # Length is index to pointed-to data element.
+ TP_BOOL, # Length is 0 or 1.
+ TP_DCACHE, # Length isnumber of members that follow
+])
+
+def parse_data_section(s):
+ """Given a data section encoded in a bytestring, return a list of
+ Datum items."""
+
+ # Stack of possibly nested containers. We use the 'nChildren' member of
+ # the last one to tell how many moreitems nest directly inside.
+ stack = []
+
+ # List of all items, including nested ones.
+ data = []
+
+ # Byte index within the data section.
+ pos = 0
+
+ while s:
+ tp, ln, skip = get_type_and_len(s)
+ if tp in IGNORE_LEN_TYPES:
+ real_len = 0
+ else:
+ real_len = ln
+
+ d = Datum(pos, tp, ln, s[skip:skip+real_len])
+ data.append(d)
+ pos += skip+real_len
+ s = s[skip+real_len:]
+
+ if stack:
+ stack[-1].children.append(d)
+ stack[-1].nChildren -= 1
+ if stack[-1].nChildren == 0:
+ del stack[-1]
+
+ if d.kind == TP_ARRAY:
+ d.nChildren = d.ln
+ d.children = []
+ stack.append(d)
+ elif d.kind == TP_MAP:
+ d.nChildren = d.ln * 2
+ d.children = []
+ stack.append(d)
+
+ return data
+
+def parse_mm_file(s):
+ """Parse a MaxMind-DB file."""
+ try:
+ metadata_ptr = s.rindex(METADATA_MARKER)
+ except ValueError:
+ raise ValueError("No metadata!")
+
+ metadata = parse_data_section(s[metadata_ptr+len(METADATA_MARKER):])
+
+ if metadata[0].kind != TP_MAP:
+ raise ValueError("Bad map")
+
+ metadata[0].build_maps()
+ mm = metadata[0].map
+
+ tree_size = (((mm['record_size'].int_val() * 2) // 8 ) *
+ mm['node_count'].int_val())
+
+ if s[tree_size:tree_size+16] != b'\x00'*16:
+ raise ValueError("Missing section separator!")
+
+ tree = parse_search_tree(s[:tree_size], mm['record_size'].int_val())
+
+ data = parse_data_section(s[tree_size+16:metadata_ptr])
+
+ resolve_pointers(data)
+ resolve_tree(tree, data)
+
+ for d in data:
+ d.build_maps()
+
+ return metadata, tree, data
+
+def format_datum(datum):
+ """Given a Datum at a leaf of the tree, return the string that we should
+ write as its value.
+
+ We first try country->iso_code which is the two-character ISO 3166-1
+ country code of the country where MaxMind believes the end user is
+ located. If there's no such key, we try registered_country->iso_code
+ which is the country in which the ISP has registered the IP address.
+ Without falling back to registered_country, we'd leave out all ranges
+ that MaxMind thinks belong to anonymous proxies, because those ranges
+ don't contain country but only registered_country. In short: let's
+ fill all A1 entries with what ARIN et. al think.
+ """
+ try:
+ return bytesToStr(datum.map['country'].map['iso_code'].data)
+ except KeyError:
+ pass
+ try:
+ return bytesToStr(datum.map['registered_country'].map['iso_code'].data)
+ except KeyError:
+ pass
+ return None
+
+IPV4_PREFIX = "0"*96
+
+def dump_item_ipv4(entries, prefix, val):
+ """Dump the information for an IPv4 address to entries, where 'prefix'
+ is a string holding a binary prefix for the address, and 'val' is the
+ value to dump. If the prefix is not an IPv4 address (it does not start
+ with 96 bits of 0), then print nothing.
+ """
+ if not prefix.startswith(IPV4_PREFIX):
+ return
+ prefix = prefix[96:]
+ v = int(prefix, 2)
+ shift = 32 - len(prefix)
+ lo = v << shift
+ hi = ((v+1) << shift) - 1
+ entries.append((lo, hi, val))
+
+def fmt_item_ipv4(entry):
+ """Format an IPv4 range with lo and hi addresses in decimal form."""
+ return "%d,%d,%s\n"%(entry[0], entry[1], entry[2])
+
+def fmt_ipv6_addr(v):
+ """Given a 128-bit integer representing an ipv6 address, return a
+ string for that ipv6 address."""
+ return socket.inet_ntop(socket.AF_INET6, binascii.unhexlify("%032x"%v))
+
+def fmt_item_ipv6(entry):
+ """Format an IPv6 range with lo and hi addresses in hex form."""
+ return "%s,%s,%s\n"%(fmt_ipv6_addr(entry[0]),
+ fmt_ipv6_addr(entry[1]),
+ entry[2])
+
+IPV4_MAPPED_IPV6_PREFIX = "0"*80 + "1"*16
+IPV6_6TO4_PREFIX = "0010000000000010"
+TEREDO_IPV6_PREFIX = "0010000000000001" + "0"*16
+
+def dump_item_ipv6(entries, prefix, val):
+ """Dump the information for an IPv6 address prefix to entries, where
+ 'prefix' is a string holding a binary prefix for the address,
+ and 'val' is the value to dump. If the prefix is an IPv4 address
+ (starts with 96 bits of 0), is an IPv4-mapped IPv6 address
+ (::ffff:0:0/96), or is in the 6to4 mapping subnet (2002::/16), then
+ print nothing.
+ """
+ if prefix.startswith(IPV4_PREFIX) or \
+ prefix.startswith(IPV4_MAPPED_IPV6_PREFIX) or \
+ prefix.startswith(IPV6_6TO4_PREFIX) or \
+ prefix.startswith(TEREDO_IPV6_PREFIX):
+ return
+ v = int(prefix, 2)
+ shift = 128 - len(prefix)
+ lo = v << shift
+ hi = ((v+1) << shift) - 1
+ entries.append((lo, hi, val))
+
+def dump_tree(entries, node, dump_item, prefix=""):
+ """Walk the tree rooted at 'node', and call dump_item on the
+ format_datum output of every leaf of the tree."""
+
+ if isinstance(node, Tree):
+ dump_tree(entries, node.left_item, dump_item, prefix+"0")
+ dump_tree(entries, node.right_item, dump_item, prefix+"1")
+ elif isinstance(node, Datum):
+ assert node.kind == TP_MAP
+ code = format_datum(node)
+ if code:
+ dump_item(entries, prefix, code)
+ else:
+ assert node == None
+
+GEOIP_FILE_HEADER = """\
+# Last updated based on %s Maxmind GeoLite2 Country
+# wget https://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz
+# gunzip GeoLite2-Country.mmdb.gz
+# python mmdb-convert.py GeoLite2-Country.mmdb
+"""
+
+def write_geoip_file(filename, metadata, the_tree, dump_item, fmt_item):
+ """Write the entries in the_tree to filename."""
+ entries = []
+ dump_tree(entries, the_tree[0], dump_item)
+ fobj = open(filename, 'w')
+
+ build_epoch = metadata[0].map['build_epoch'].int_val()
+ fobj.write(GEOIP_FILE_HEADER %
+ time.strftime('%B %-d %Y', time.gmtime(build_epoch)))
+
+ unwritten = None
+ for entry in entries:
+ if not unwritten:
+ unwritten = entry
+ elif unwritten[1] + 1 == entry[0] and unwritten[2] == entry[2]:
+ unwritten = (unwritten[0], entry[1], unwritten[2])
+ else:
+ fobj.write(fmt_item(unwritten))
+ unwritten = entry
+ if unwritten:
+ fobj.write(fmt_item(unwritten))
+ fobj.close()
+
+content = open(sys.argv[1], 'rb').read()
+metadata, the_tree, _ = parse_mm_file(content)
+
+write_geoip_file('geoip', metadata, the_tree, dump_item_ipv4, fmt_item_ipv4)
+write_geoip_file('geoip6', metadata, the_tree, dump_item_ipv6, fmt_item_ipv6)
diff --git a/src/config/torrc.sample.in b/src/config/torrc.sample.in
index a1a08aa8f..d842fbcaf 100644
--- a/src/config/torrc.sample.in
+++ b/src/config/torrc.sample.in
@@ -1,5 +1,5 @@
## Configuration file for a typical Tor user
-## Last updated 22 April 2012 for Tor 0.2.3.14-alpha.
+## Last updated 9 October 2013 for Tor 0.2.5.2-alpha.
## (may or may not work for much older or much newer versions of Tor.)
##
## Lines that begin with "## " try to explain what's going on. Lines
@@ -16,7 +16,7 @@
## configure one below. Set "SocksPort 0" if you plan to run Tor only
## as a relay, and not make any local application connections yourself.
#SocksPort 9050 # Default: Bind to localhost:9050 for local connections.
-#SocksPort 192.168.0.1:9100 # Bind to this adddress:port too.
+#SocksPort 192.168.0.1:9100 # Bind to this address:port too.
## Entry policies to allow/deny SOCKS requests based on IP address.
## First entry that matches wins. If no SocksPolicy is set, we accept
@@ -120,9 +120,12 @@
## is per month)
#AccountingStart month 3 15:00
-## Contact info to be published in the directory, so we can contact you
-## if your relay is misconfigured or something else goes wrong. Google
-## indexes this, so spammers might also collect it.
+## Administrative contact information for this relay or bridge. This line
+## can be used to contact you if your relay or bridge is misconfigured or
+## something else goes wrong. Note that we archive and publish all
+## descriptors containing these lines and that Google indexes them, so
+## spammers might also collect them. You may want to obscure the fact that
+## it's an email address and/or generate a new address for this purpose.
#ContactInfo Random Person <nobody AT example dot com>
## You might also include your PGP or GPG fingerprint if you have one:
#ContactInfo 0xFFFFFFFF Random Person <nobody AT example dot com>
diff --git a/src/common/OpenBSD_malloc_Linux.c b/src/ext/OpenBSD_malloc_Linux.c
index da8272981..da8272981 100644
--- a/src/common/OpenBSD_malloc_Linux.c
+++ b/src/ext/OpenBSD_malloc_Linux.c
diff --git a/src/ext/README b/src/ext/README
new file mode 100644
index 000000000..5d5a6e151
--- /dev/null
+++ b/src/ext/README
@@ -0,0 +1,51 @@
+
+OpenBSD_malloc_Linux.c:
+
+ The OpenBSD malloc implementation, ported to Linux. Used only when
+ --enable-openbsd-malloc is passed to the configure script.
+
+strlcat.c
+strlcpy.c
+
+ Implementations of strlcat and strlcpy, the more sane replacements
+ for strcat and strcpy. These are nonstandard, and some libc
+ implementations refuse to add them for religious reasons.
+
+eventdns.[ch]
+
+ A fork of Libevent's DNS implementation, used by Tor when Libevent
+ 2.0 or later is not available. Once Libevent 2.0 is required, we
+ should throw this away; it has diverged from evdns.[ch], and is
+ no longer easily mergeable.
+
+ht.h
+
+ An implementation of a hash table in the style of Niels Provos's
+ tree.h. Shared with Libevent.
+
+tinytest.[ch]
+tinytest_demos.c
+tinytest_macros.h
+
+ A unit testing framework. https://github.com/nmathewson/tinytest
+
+tor_queue.h
+
+ A copy of sys/queue.h from OpenBSD. We keep our own copy rather
+ than using sys/queue.h, since some platforms don't have a
+ sys/queue.h, and the ones that do have diverged in incompatible
+ ways. (CIRCLEQ or no CIRCLEQ? SIMPLQ or STAILQ?) We also rename
+ the identifiers with a TOR_ prefix to avoid conflicts with
+ the system headers.
+
+curve25519_donna/*.c
+
+ A copy of Adam Langley's curve25519-donna mostly-portable
+ implementations of curve25519.
+
+csiphash.c
+siphash.h
+
+ Marek Majkowski's implementation of siphash 2-4, a secure keyed
+ hash algorithm to avoid collision-based DoS attacks against hash
+ tables.
diff --git a/src/ext/csiphash.c b/src/ext/csiphash.c
new file mode 100644
index 000000000..c24788603
--- /dev/null
+++ b/src/ext/csiphash.c
@@ -0,0 +1,166 @@
+/* <MIT License>
+ Copyright (c) 2013 Marek Majkowski <marek@popcount.org>
+
+ Permission is hereby granted, free of charge, to any person obtaining a copy
+ of this software and associated documentation files (the "Software"), to deal
+ in the Software without restriction, including without limitation the rights
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ copies of the Software, and to permit persons to whom the Software is
+ furnished to do so, subject to the following conditions:
+
+ The above copyright notice and this permission notice shall be included in
+ all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ THE SOFTWARE.
+ </MIT License>
+
+ Original location:
+ https://github.com/majek/csiphash/
+
+ Solution inspired by code from:
+ Samuel Neves (supercop/crypto_auth/siphash24/little)
+ djb (supercop/crypto_auth/siphash24/little2)
+ Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c)
+*/
+
+#include "torint.h"
+#include "siphash.h"
+/* for tor_assert */
+#include "util.h"
+/* for memcpy */
+#include <string.h>
+
+#if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
+ __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
+# define _le64toh(x) ((uint64_t)(x))
+#elif defined(_WIN32)
+/* Windows is always little endian, unless you're on xbox360
+ http://msdn.microsoft.com/en-us/library/b0084kay(v=vs.80).aspx */
+# define _le64toh(x) ((uint64_t)(x))
+#elif defined(__APPLE__)
+# include <libkern/OSByteOrder.h>
+# define _le64toh(x) OSSwapLittleToHostInt64(x)
+#elif defined(sun) || defined(__sun)
+# include <sys/byteorder.h>
+# define _le64toh(x) LE_64(x)
+
+#else
+
+/* See: http://sourceforge.net/p/predef/wiki/Endianness/ */
+# if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__)
+# include <sys/endian.h>
+# else
+# include <endian.h>
+# endif
+# if defined(__BYTE_ORDER) && defined(__LITTLE_ENDIAN) && \
+ __BYTE_ORDER == __LITTLE_ENDIAN
+# define _le64toh(x) ((uint64_t)(x))
+# else
+# if defined(__OpenBSD__)
+# define _le64toh(x) letoh64(x)
+# else
+# define _le64toh(x) le64toh(x)
+# endif
+# endif
+
+#endif
+
+#define ROTATE(x, b) (uint64_t)( ((x) << (b)) | ( (x) >> (64 - (b))) )
+
+#define HALF_ROUND(a,b,c,d,s,t) \
+ a += b; c += d; \
+ b = ROTATE(b, s) ^ a; \
+ d = ROTATE(d, t) ^ c; \
+ a = ROTATE(a, 32);
+
+#define DOUBLE_ROUND(v0,v1,v2,v3) \
+ HALF_ROUND(v0,v1,v2,v3,13,16); \
+ HALF_ROUND(v2,v1,v0,v3,17,21); \
+ HALF_ROUND(v0,v1,v2,v3,13,16); \
+ HALF_ROUND(v2,v1,v0,v3,17,21);
+
+#if 0
+/* This does not seem to save very much runtime in the fast case, and it's
+ * potentially a big loss in the slow case where we're misaligned and we cross
+ * a cache line. */
+#if (defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
+ defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_AMD64) || defined(_M_X64) || defined(__INTEL__))
+# define UNALIGNED_OK 1
+#endif
+#endif
+
+uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *key) {
+ uint64_t k0 = key->k0;
+ uint64_t k1 = key->k1;
+ uint64_t b = (uint64_t)src_sz << 56;
+ const uint64_t *in = (uint64_t*)src;
+
+ uint64_t t;
+ uint8_t *pt, *m;
+
+ uint64_t v0 = k0 ^ 0x736f6d6570736575ULL;
+ uint64_t v1 = k1 ^ 0x646f72616e646f6dULL;
+ uint64_t v2 = k0 ^ 0x6c7967656e657261ULL;
+ uint64_t v3 = k1 ^ 0x7465646279746573ULL;
+
+ while (src_sz >= 8) {
+#ifdef UNALIGNED_OK
+ uint64_t mi = _le64toh(*in);
+#else
+ uint64_t mi;
+ memcpy(&mi, in, 8);
+ mi = _le64toh(mi);
+#endif
+ in += 1; src_sz -= 8;
+ v3 ^= mi;
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ v0 ^= mi;
+ }
+
+ t = 0; pt = (uint8_t*)&t; m = (uint8_t*)in;
+ switch (src_sz) {
+ case 7: pt[6] = m[6];
+ case 6: pt[5] = m[5];
+ case 5: pt[4] = m[4];
+#ifdef UNALIGNED_OK
+ case 4: *((uint32_t*)&pt[0]) = *((uint32_t*)&m[0]); break;
+#else
+ case 4: pt[3] = m[3];
+#endif
+ case 3: pt[2] = m[2];
+ case 2: pt[1] = m[1];
+ case 1: pt[0] = m[0];
+ }
+ b |= _le64toh(t);
+
+ v3 ^= b;
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ v0 ^= b; v2 ^= 0xff;
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ DOUBLE_ROUND(v0,v1,v2,v3);
+ return (v0 ^ v1) ^ (v2 ^ v3);
+}
+
+
+static int the_siphash_key_is_set = 0;
+static struct sipkey the_siphash_key;
+
+uint64_t siphash24g(const void *src, unsigned long src_sz) {
+ tor_assert(the_siphash_key_is_set);
+ return siphash24(src, src_sz, &the_siphash_key);
+}
+
+void siphash_set_global_key(const struct sipkey *key)
+{
+ tor_assert(! the_siphash_key_is_set);
+ the_siphash_key.k0 = key->k0;
+ the_siphash_key.k1 = key->k1;
+ the_siphash_key_is_set = 1;
+}
diff --git a/src/ext/curve25519_donna/README b/src/ext/curve25519_donna/README
new file mode 100644
index 000000000..9f77bd7d9
--- /dev/null
+++ b/src/ext/curve25519_donna/README
@@ -0,0 +1,44 @@
+See http://code.google.com/p/curve25519-donna/ for details.
+
+BUILDING:
+
+If you run `make`, two .a archives will be built, similar to djb's curve25519
+code. Alternatively, read on:
+
+The C implementation is contained within curve25519-donna.c. It has no external
+dependancies and is BSD licenced. You can copy/include/link it directly in with
+your program. Recommended C flags: -O2
+
+The x86-64 bit implementation is contained within curve25519-donna-x86-64.c and
+curve25519-donna-x86-64.s. Build like this:
+
+% cpp curve25519-donna-x86-64.s > curve25519-donna-x86-64.s.pp
+% as -o curve25519-donna-x86-64.s.o curve25519-donna-x86-64.s.pp
+% gcc -O2 -c curve25519-donna-x86-64.c
+
+Then the two .o files can be linked in
+
+USAGE:
+
+The usage is exactly the same as djb's code (as described at
+http://cr.yp.to/ecdh.html) expect that the function is called curve25519_donna.
+
+In short,
+
+To generate a private key, generate 32 random bytes and:
+
+ mysecret[0] &= 248;
+ mysecret[31] &= 127;
+ mysecret[31] |= 64;
+
+To generate the public key, just do
+
+ static const uint8_t basepoint[32] = {9};
+ curve25519_donna(mypublic, mysecret, basepoint);
+
+To generate an agreed key do:
+ uint8_t shared_key[32];
+ curve25519_donna(shared_key, mysecret, theirpublic);
+
+And hash the shared_key with a cryptographic hash function before using.
+
diff --git a/src/ext/curve25519_donna/curve25519-donna-c64.c b/src/ext/curve25519_donna/curve25519-donna-c64.c
new file mode 100644
index 000000000..b68ff3695
--- /dev/null
+++ b/src/ext/curve25519_donna/curve25519-donna-c64.c
@@ -0,0 +1,451 @@
+/* Copyright 2008, Google Inc.
+ * All rights reserved.
+ *
+ * Code released into the public domain.
+ *
+ * curve25519-donna: Curve25519 elliptic curve, public key function
+ *
+ * http://code.google.com/p/curve25519-donna/
+ *
+ * Adam Langley <agl@imperialviolet.org>
+ *
+ * Derived from public domain C code by Daniel J. Bernstein <djb@cr.yp.to>
+ *
+ * More information about curve25519 can be found here
+ * http://cr.yp.to/ecdh.html
+ *
+ * djb's sample implementation of curve25519 is written in a special assembly
+ * language called qhasm and uses the floating point registers.
+ *
+ * This is, almost, a clean room reimplementation from the curve25519 paper. It
+ * uses many of the tricks described therein. Only the crecip function is taken
+ * from the sample implementation.
+ */
+
+#include "orconfig.h"
+
+#include <string.h>
+#include "torint.h"
+
+typedef uint8_t u8;
+typedef uint64_t limb;
+typedef limb felem[5];
+// This is a special gcc mode for 128-bit integers. It's implemented on 64-bit
+// platforms only as far as I know.
+typedef unsigned uint128_t __attribute__((mode(TI)));
+
+#undef force_inline
+#define force_inline __attribute__((always_inline))
+
+/* Sum two numbers: output += in */
+static inline void force_inline
+fsum(limb *output, const limb *in) {
+ output[0] += in[0];
+ output[1] += in[1];
+ output[2] += in[2];
+ output[3] += in[3];
+ output[4] += in[4];
+}
+
+/* Find the difference of two numbers: output = in - output
+ * (note the order of the arguments!)
+ *
+ * Assumes that out[i] < 2**52
+ * On return, out[i] < 2**55
+ */
+static inline void force_inline
+fdifference_backwards(felem out, const felem in) {
+ /* 152 is 19 << 3 */
+ static const limb two54m152 = (((limb)1) << 54) - 152;
+ static const limb two54m8 = (((limb)1) << 54) - 8;
+
+ out[0] = in[0] + two54m152 - out[0];
+ out[1] = in[1] + two54m8 - out[1];
+ out[2] = in[2] + two54m8 - out[2];
+ out[3] = in[3] + two54m8 - out[3];
+ out[4] = in[4] + two54m8 - out[4];
+}
+
+/* Multiply a number by a scalar: output = in * scalar */
+static inline void force_inline
+fscalar_product(felem output, const felem in, const limb scalar) {
+ uint128_t a;
+
+ a = ((uint128_t) in[0]) * scalar;
+ output[0] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[1]) * scalar + ((limb) (a >> 51));
+ output[1] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[2]) * scalar + ((limb) (a >> 51));
+ output[2] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[3]) * scalar + ((limb) (a >> 51));
+ output[3] = ((limb)a) & 0x7ffffffffffff;
+
+ a = ((uint128_t) in[4]) * scalar + ((limb) (a >> 51));
+ output[4] = ((limb)a) & 0x7ffffffffffff;
+
+ output[0] += (a >> 51) * 19;
+}
+
+/* Multiply two numbers: output = in2 * in
+ *
+ * output must be distinct to both inputs. The inputs are reduced coefficient
+ * form, the output is not.
+ *
+ * Assumes that in[i] < 2**55 and likewise for in2.
+ * On return, output[i] < 2**52
+ */
+static inline void force_inline
+fmul(felem output, const felem in2, const felem in) {
+ uint128_t t[5];
+ limb r0,r1,r2,r3,r4,s0,s1,s2,s3,s4,c;
+
+ r0 = in[0];
+ r1 = in[1];
+ r2 = in[2];
+ r3 = in[3];
+ r4 = in[4];
+
+ s0 = in2[0];
+ s1 = in2[1];
+ s2 = in2[2];
+ s3 = in2[3];
+ s4 = in2[4];
+
+ t[0] = ((uint128_t) r0) * s0;
+ t[1] = ((uint128_t) r0) * s1 + ((uint128_t) r1) * s0;
+ t[2] = ((uint128_t) r0) * s2 + ((uint128_t) r2) * s0 + ((uint128_t) r1) * s1;
+ t[3] = ((uint128_t) r0) * s3 + ((uint128_t) r3) * s0 + ((uint128_t) r1) * s2 + ((uint128_t) r2) * s1;
+ t[4] = ((uint128_t) r0) * s4 + ((uint128_t) r4) * s0 + ((uint128_t) r3) * s1 + ((uint128_t) r1) * s3 + ((uint128_t) r2) * s2;
+
+ r4 *= 19;
+ r1 *= 19;
+ r2 *= 19;
+ r3 *= 19;
+
+ t[0] += ((uint128_t) r4) * s1 + ((uint128_t) r1) * s4 + ((uint128_t) r2) * s3 + ((uint128_t) r3) * s2;
+ t[1] += ((uint128_t) r4) * s2 + ((uint128_t) r2) * s4 + ((uint128_t) r3) * s3;
+ t[2] += ((uint128_t) r4) * s3 + ((uint128_t) r3) * s4;
+ t[3] += ((uint128_t) r4) * s4;
+
+ r0 = (limb)t[0] & 0x7ffffffffffff; c = (limb)(t[0] >> 51);
+ t[1] += c; r1 = (limb)t[1] & 0x7ffffffffffff; c = (limb)(t[1] >> 51);
+ t[2] += c; r2 = (limb)t[2] & 0x7ffffffffffff; c = (limb)(t[2] >> 51);
+ t[3] += c; r3 = (limb)t[3] & 0x7ffffffffffff; c = (limb)(t[3] >> 51);
+ t[4] += c; r4 = (limb)t[4] & 0x7ffffffffffff; c = (limb)(t[4] >> 51);
+ r0 += c * 19; c = r0 >> 51; r0 = r0 & 0x7ffffffffffff;
+ r1 += c; c = r1 >> 51; r1 = r1 & 0x7ffffffffffff;
+ r2 += c;
+
+ output[0] = r0;
+ output[1] = r1;
+ output[2] = r2;
+ output[3] = r3;
+ output[4] = r4;
+}
+
+static inline void force_inline
+fsquare_times(felem output, const felem in, limb count) {
+ uint128_t t[5];
+ limb r0,r1,r2,r3,r4,c;
+ limb d0,d1,d2,d4,d419;
+
+ r0 = in[0];
+ r1 = in[1];
+ r2 = in[2];
+ r3 = in[3];
+ r4 = in[4];
+
+ do {
+ d0 = r0 * 2;
+ d1 = r1 * 2;
+ d2 = r2 * 2 * 19;
+ d419 = r4 * 19;
+ d4 = d419 * 2;
+
+ t[0] = ((uint128_t) r0) * r0 + ((uint128_t) d4) * r1 + (((uint128_t) d2) * (r3 ));
+ t[1] = ((uint128_t) d0) * r1 + ((uint128_t) d4) * r2 + (((uint128_t) r3) * (r3 * 19));
+ t[2] = ((uint128_t) d0) * r2 + ((uint128_t) r1) * r1 + (((uint128_t) d4) * (r3 ));
+ t[3] = ((uint128_t) d0) * r3 + ((uint128_t) d1) * r2 + (((uint128_t) r4) * (d419 ));
+ t[4] = ((uint128_t) d0) * r4 + ((uint128_t) d1) * r3 + (((uint128_t) r2) * (r2 ));
+
+ r0 = (limb)t[0] & 0x7ffffffffffff; c = (limb)(t[0] >> 51);
+ t[1] += c; r1 = (limb)t[1] & 0x7ffffffffffff; c = (limb)(t[1] >> 51);
+ t[2] += c; r2 = (limb)t[2] & 0x7ffffffffffff; c = (limb)(t[2] >> 51);
+ t[3] += c; r3 = (limb)t[3] & 0x7ffffffffffff; c = (limb)(t[3] >> 51);
+ t[4] += c; r4 = (limb)t[4] & 0x7ffffffffffff; c = (limb)(t[4] >> 51);
+ r0 += c * 19; c = r0 >> 51; r0 = r0 & 0x7ffffffffffff;
+ r1 += c; c = r1 >> 51; r1 = r1 & 0x7ffffffffffff;
+ r2 += c;
+ } while(--count);
+
+ output[0] = r0;
+ output[1] = r1;
+ output[2] = r2;
+ output[3] = r3;
+ output[4] = r4;
+}
+
+/* Load a little-endian 64-bit number */
+static limb
+load_limb(const u8 *in) {
+ return
+ ((limb)in[0]) |
+ (((limb)in[1]) << 8) |
+ (((limb)in[2]) << 16) |
+ (((limb)in[3]) << 24) |
+ (((limb)in[4]) << 32) |
+ (((limb)in[5]) << 40) |
+ (((limb)in[6]) << 48) |
+ (((limb)in[7]) << 56);
+}
+
+static void
+store_limb(u8 *out, limb in) {
+ out[0] = in & 0xff;
+ out[1] = (in >> 8) & 0xff;
+ out[2] = (in >> 16) & 0xff;
+ out[3] = (in >> 24) & 0xff;
+ out[4] = (in >> 32) & 0xff;
+ out[5] = (in >> 40) & 0xff;
+ out[6] = (in >> 48) & 0xff;
+ out[7] = (in >> 56) & 0xff;
+}
+
+/* Take a little-endian, 32-byte number and expand it into polynomial form */
+static void
+fexpand(limb *output, const u8 *in) {
+ output[0] = load_limb(in) & 0x7ffffffffffff;
+ output[1] = (load_limb(in+6) >> 3) & 0x7ffffffffffff;
+ output[2] = (load_limb(in+12) >> 6) & 0x7ffffffffffff;
+ output[3] = (load_limb(in+19) >> 1) & 0x7ffffffffffff;
+ output[4] = (load_limb(in+24) >> 12) & 0x7ffffffffffff;
+}
+
+/* Take a fully reduced polynomial form number and contract it into a
+ * little-endian, 32-byte array
+ */
+static void
+fcontract(u8 *output, const felem input) {
+ uint128_t t[5];
+
+ t[0] = input[0];
+ t[1] = input[1];
+ t[2] = input[2];
+ t[3] = input[3];
+ t[4] = input[4];
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
+
+ /* now t is between 0 and 2^255-1, properly carried. */
+ /* case 1: between 0 and 2^255-20. case 2: between 2^255-19 and 2^255-1. */
+
+ t[0] += 19;
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
+
+ /* now between 19 and 2^255-1 in both cases, and offset by 19. */
+
+ t[0] += 0x8000000000000 - 19;
+ t[1] += 0x8000000000000 - 1;
+ t[2] += 0x8000000000000 - 1;
+ t[3] += 0x8000000000000 - 1;
+ t[4] += 0x8000000000000 - 1;
+
+ /* now between 2^255 and 2^256-20, and offset by 2^255. */
+
+ t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
+ t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
+ t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
+ t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
+ t[4] &= 0x7ffffffffffff;
+
+ store_limb(output, t[0] | (t[1] << 51));
+ store_limb(output+8, (t[1] >> 13) | (t[2] << 38));
+ store_limb(output+16, (t[2] >> 26) | (t[3] << 25));
+ store_limb(output+24, (t[3] >> 39) | (t[4] << 12));
+}
+
+/* Input: Q, Q', Q-Q'
+ * Output: 2Q, Q+Q'
+ *
+ * x2 z3: long form
+ * x3 z3: long form
+ * x z: short form, destroyed
+ * xprime zprime: short form, destroyed
+ * qmqp: short form, preserved
+ */
+static void
+fmonty(limb *x2, limb *z2, /* output 2Q */
+ limb *x3, limb *z3, /* output Q + Q' */
+ limb *x, limb *z, /* input Q */
+ limb *xprime, limb *zprime, /* input Q' */
+ const limb *qmqp /* input Q - Q' */) {
+ limb origx[5], origxprime[5], zzz[5], xx[5], zz[5], xxprime[5],
+ zzprime[5], zzzprime[5];
+
+ memcpy(origx, x, 5 * sizeof(limb));
+ fsum(x, z);
+ fdifference_backwards(z, origx); // does x - z
+
+ memcpy(origxprime, xprime, sizeof(limb) * 5);
+ fsum(xprime, zprime);
+ fdifference_backwards(zprime, origxprime);
+ fmul(xxprime, xprime, z);
+ fmul(zzprime, x, zprime);
+ memcpy(origxprime, xxprime, sizeof(limb) * 5);
+ fsum(xxprime, zzprime);
+ fdifference_backwards(zzprime, origxprime);
+ fsquare_times(x3, xxprime, 1);
+ fsquare_times(zzzprime, zzprime, 1);
+ fmul(z3, zzzprime, qmqp);
+
+ fsquare_times(xx, x, 1);
+ fsquare_times(zz, z, 1);
+ fmul(x2, xx, zz);
+ fdifference_backwards(zz, xx); // does zz = xx - zz
+ fscalar_product(zzz, zz, 121665);
+ fsum(zzz, xx);
+ fmul(z2, zz, zzz);
+}
+
+// -----------------------------------------------------------------------------
+// Maybe swap the contents of two limb arrays (@a and @b), each @len elements
+// long. Perform the swap iff @swap is non-zero.
+//
+// This function performs the swap without leaking any side-channel
+// information.
+// -----------------------------------------------------------------------------
+static void
+swap_conditional(limb a[5], limb b[5], limb iswap) {
+ unsigned i;
+ const limb swap = -iswap;
+
+ for (i = 0; i < 5; ++i) {
+ const limb x = swap & (a[i] ^ b[i]);
+ a[i] ^= x;
+ b[i] ^= x;
+ }
+}
+
+/* Calculates nQ where Q is the x-coordinate of a point on the curve
+ *
+ * resultx/resultz: the x coordinate of the resulting curve point (short form)
+ * n: a little endian, 32-byte number
+ * q: a point of the curve (short form)
+ */
+static void
+cmult(limb *resultx, limb *resultz, const u8 *n, const limb *q) {
+ limb a[5] = {0}, b[5] = {1}, c[5] = {1}, d[5] = {0};
+ limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t;
+ limb e[5] = {0}, f[5] = {1}, g[5] = {0}, h[5] = {1};
+ limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h;
+
+ unsigned i, j;
+
+ memcpy(nqpqx, q, sizeof(limb) * 5);
+
+ for (i = 0; i < 32; ++i) {
+ u8 byte = n[31 - i];
+ for (j = 0; j < 8; ++j) {
+ const limb bit = byte >> 7;
+
+ swap_conditional(nqx, nqpqx, bit);
+ swap_conditional(nqz, nqpqz, bit);
+ fmonty(nqx2, nqz2,
+ nqpqx2, nqpqz2,
+ nqx, nqz,
+ nqpqx, nqpqz,
+ q);
+ swap_conditional(nqx2, nqpqx2, bit);
+ swap_conditional(nqz2, nqpqz2, bit);
+
+ t = nqx;
+ nqx = nqx2;
+ nqx2 = t;
+ t = nqz;
+ nqz = nqz2;
+ nqz2 = t;
+ t = nqpqx;
+ nqpqx = nqpqx2;
+ nqpqx2 = t;
+ t = nqpqz;
+ nqpqz = nqpqz2;
+ nqpqz2 = t;
+
+ byte <<= 1;
+ }
+ }
+
+ memcpy(resultx, nqx, sizeof(limb) * 5);
+ memcpy(resultz, nqz, sizeof(limb) * 5);
+}
+
+
+// -----------------------------------------------------------------------------
+// Shamelessly copied from djb's code, tightened a little
+// -----------------------------------------------------------------------------
+static void
+crecip(felem out, const felem z) {
+ felem a,t0,b,c;
+
+ /* 2 */ fsquare_times(a, z, 1); // a = 2
+ /* 8 */ fsquare_times(t0, a, 2);
+ /* 9 */ fmul(b, t0, z); // b = 9
+ /* 11 */ fmul(a, b, a); // a = 11
+ /* 22 */ fsquare_times(t0, a, 1);
+ /* 2^5 - 2^0 = 31 */ fmul(b, t0, b);
+ /* 2^10 - 2^5 */ fsquare_times(t0, b, 5);
+ /* 2^10 - 2^0 */ fmul(b, t0, b);
+ /* 2^20 - 2^10 */ fsquare_times(t0, b, 10);
+ /* 2^20 - 2^0 */ fmul(c, t0, b);
+ /* 2^40 - 2^20 */ fsquare_times(t0, c, 20);
+ /* 2^40 - 2^0 */ fmul(t0, t0, c);
+ /* 2^50 - 2^10 */ fsquare_times(t0, t0, 10);
+ /* 2^50 - 2^0 */ fmul(b, t0, b);
+ /* 2^100 - 2^50 */ fsquare_times(t0, b, 50);
+ /* 2^100 - 2^0 */ fmul(c, t0, b);
+ /* 2^200 - 2^100 */ fsquare_times(t0, c, 100);
+ /* 2^200 - 2^0 */ fmul(t0, t0, c);
+ /* 2^250 - 2^50 */ fsquare_times(t0, t0, 50);
+ /* 2^250 - 2^0 */ fmul(t0, t0, b);
+ /* 2^255 - 2^5 */ fsquare_times(t0, t0, 5);
+ /* 2^255 - 21 */ fmul(out, t0, a);
+}
+
+int curve25519_donna(u8 *, const u8 *, const u8 *);
+
+int
+curve25519_donna(u8 *mypublic, const u8 *secret, const u8 *basepoint) {
+ limb bp[5], x[5], z[5], zmone[5];
+ uint8_t e[32];
+ int i;
+
+ for (i = 0;i < 32;++i) e[i] = secret[i];
+ e[0] &= 248;
+ e[31] &= 127;
+ e[31] |= 64;
+
+ fexpand(bp, basepoint);
+ cmult(x, z, e, bp);
+ crecip(zmone, z);
+ fmul(z, x, zmone);
+ fcontract(mypublic, z);
+ return 0;
+}
diff --git a/src/ext/curve25519_donna/curve25519-donna.c b/src/ext/curve25519_donna/curve25519-donna.c
new file mode 100644
index 000000000..5c6821ccd
--- /dev/null
+++ b/src/ext/curve25519_donna/curve25519-donna.c
@@ -0,0 +1,732 @@
+/* Copyright 2008, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * curve25519-donna: Curve25519 elliptic curve, public key function
+ *
+ * http://code.google.com/p/curve25519-donna/
+ *
+ * Adam Langley <agl@imperialviolet.org>
+ *
+ * Derived from public domain C code by Daniel J. Bernstein <djb@cr.yp.to>
+ *
+ * More information about curve25519 can be found here
+ * http://cr.yp.to/ecdh.html
+ *
+ * djb's sample implementation of curve25519 is written in a special assembly
+ * language called qhasm and uses the floating point registers.
+ *
+ * This is, almost, a clean room reimplementation from the curve25519 paper. It
+ * uses many of the tricks described therein. Only the crecip function is taken
+ * from the sample implementation.
+ */
+
+#include "orconfig.h"
+
+#include <string.h>
+#include "torint.h"
+
+typedef uint8_t u8;
+typedef int32_t s32;
+typedef int64_t limb;
+
+/* Field element representation:
+ *
+ * Field elements are written as an array of signed, 64-bit limbs, least
+ * significant first. The value of the field element is:
+ * x[0] + 2^26·x[1] + x^51·x[2] + 2^102·x[3] + ...
+ *
+ * i.e. the limbs are 26, 25, 26, 25, ... bits wide.
+ */
+
+/* Sum two numbers: output += in */
+static void fsum(limb *output, const limb *in) {
+ unsigned i;
+ for (i = 0; i < 10; i += 2) {
+ output[0+i] = (output[0+i] + in[0+i]);
+ output[1+i] = (output[1+i] + in[1+i]);
+ }
+}
+
+/* Find the difference of two numbers: output = in - output
+ * (note the order of the arguments!)
+ */
+static void fdifference(limb *output, const limb *in) {
+ unsigned i;
+ for (i = 0; i < 10; ++i) {
+ output[i] = (in[i] - output[i]);
+ }
+}
+
+/* Multiply a number by a scalar: output = in * scalar */
+static void fscalar_product(limb *output, const limb *in, const limb scalar) {
+ unsigned i;
+ for (i = 0; i < 10; ++i) {
+ output[i] = in[i] * scalar;
+ }
+}
+
+/* Multiply two numbers: output = in2 * in
+ *
+ * output must be distinct to both inputs. The inputs are reduced coefficient
+ * form, the output is not.
+ */
+static void fproduct(limb *output, const limb *in2, const limb *in) {
+ output[0] = ((limb) ((s32) in2[0])) * ((s32) in[0]);
+ output[1] = ((limb) ((s32) in2[0])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[0]);
+ output[2] = 2 * ((limb) ((s32) in2[1])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[0]);
+ output[3] = ((limb) ((s32) in2[1])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[0]);
+ output[4] = ((limb) ((s32) in2[2])) * ((s32) in[2]) +
+ 2 * (((limb) ((s32) in2[1])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[0])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[0]);
+ output[5] = ((limb) ((s32) in2[2])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[0]);
+ output[6] = 2 * (((limb) ((s32) in2[3])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[2])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[0]);
+ output[7] = ((limb) ((s32) in2[3])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[0]);
+ output[8] = ((limb) ((s32) in2[4])) * ((s32) in[4]) +
+ 2 * (((limb) ((s32) in2[3])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[2])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[0]);
+ output[9] = ((limb) ((s32) in2[4])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[2]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[1]) +
+ ((limb) ((s32) in2[0])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[0]);
+ output[10] = 2 * (((limb) ((s32) in2[5])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[1])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[1])) +
+ ((limb) ((s32) in2[4])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[2]);
+ output[11] = ((limb) ((s32) in2[5])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[4]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[3]) +
+ ((limb) ((s32) in2[2])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[2]);
+ output[12] = ((limb) ((s32) in2[6])) * ((s32) in[6]) +
+ 2 * (((limb) ((s32) in2[5])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[3])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[3])) +
+ ((limb) ((s32) in2[4])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[4]);
+ output[13] = ((limb) ((s32) in2[6])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[7])) * ((s32) in[6]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[5]) +
+ ((limb) ((s32) in2[4])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[4]);
+ output[14] = 2 * (((limb) ((s32) in2[7])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[5])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[5])) +
+ ((limb) ((s32) in2[6])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[6]);
+ output[15] = ((limb) ((s32) in2[7])) * ((s32) in[8]) +
+ ((limb) ((s32) in2[8])) * ((s32) in[7]) +
+ ((limb) ((s32) in2[6])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[6]);
+ output[16] = ((limb) ((s32) in2[8])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in2[7])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[7]));
+ output[17] = ((limb) ((s32) in2[8])) * ((s32) in[9]) +
+ ((limb) ((s32) in2[9])) * ((s32) in[8]);
+ output[18] = 2 * ((limb) ((s32) in2[9])) * ((s32) in[9]);
+}
+
+/* Reduce a long form to a short form by taking the input mod 2^255 - 19. */
+static void freduce_degree(limb *output) {
+ /* Each of these shifts and adds ends up multiplying the value by 19. */
+ output[8] += output[18] << 4;
+ output[8] += output[18] << 1;
+ output[8] += output[18];
+ output[7] += output[17] << 4;
+ output[7] += output[17] << 1;
+ output[7] += output[17];
+ output[6] += output[16] << 4;
+ output[6] += output[16] << 1;
+ output[6] += output[16];
+ output[5] += output[15] << 4;
+ output[5] += output[15] << 1;
+ output[5] += output[15];
+ output[4] += output[14] << 4;
+ output[4] += output[14] << 1;
+ output[4] += output[14];
+ output[3] += output[13] << 4;
+ output[3] += output[13] << 1;
+ output[3] += output[13];
+ output[2] += output[12] << 4;
+ output[2] += output[12] << 1;
+ output[2] += output[12];
+ output[1] += output[11] << 4;
+ output[1] += output[11] << 1;
+ output[1] += output[11];
+ output[0] += output[10] << 4;
+ output[0] += output[10] << 1;
+ output[0] += output[10];
+}
+
+#if (-1 & 3) != 3
+#error "This code only works on a two's complement system"
+#endif
+
+/* return v / 2^26, using only shifts and adds. */
+static inline limb
+div_by_2_26(const limb v)
+{
+ /* High word of v; no shift needed*/
+ const uint32_t highword = (uint32_t) (((uint64_t) v) >> 32);
+ /* Set to all 1s if v was negative; else set to 0s. */
+ const int32_t sign = ((int32_t) highword) >> 31;
+ /* Set to 0x3ffffff if v was negative; else set to 0. */
+ const int32_t roundoff = ((uint32_t) sign) >> 6;
+ /* Should return v / (1<<26) */
+ return (v + roundoff) >> 26;
+}
+
+/* return v / (2^25), using only shifts and adds. */
+static inline limb
+div_by_2_25(const limb v)
+{
+ /* High word of v; no shift needed*/
+ const uint32_t highword = (uint32_t) (((uint64_t) v) >> 32);
+ /* Set to all 1s if v was negative; else set to 0s. */
+ const int32_t sign = ((int32_t) highword) >> 31;
+ /* Set to 0x1ffffff if v was negative; else set to 0. */
+ const int32_t roundoff = ((uint32_t) sign) >> 7;
+ /* Should return v / (1<<25) */
+ return (v + roundoff) >> 25;
+}
+
+static inline s32
+div_s32_by_2_25(const s32 v)
+{
+ const s32 roundoff = ((uint32_t)(v >> 31)) >> 7;
+ return (v + roundoff) >> 25;
+}
+
+/* Reduce all coefficients of the short form input so that |x| < 2^26.
+ *
+ * On entry: |output[i]| < 2^62
+ */
+static void freduce_coefficients(limb *output) {
+ unsigned i;
+
+ output[10] = 0;
+
+ for (i = 0; i < 10; i += 2) {
+ limb over = div_by_2_26(output[i]);
+ output[i] -= over << 26;
+ output[i+1] += over;
+
+ over = div_by_2_25(output[i+1]);
+ output[i+1] -= over << 25;
+ output[i+2] += over;
+ }
+ /* Now |output[10]| < 2 ^ 38 and all other coefficients are reduced. */
+ output[0] += output[10] << 4;
+ output[0] += output[10] << 1;
+ output[0] += output[10];
+
+ output[10] = 0;
+
+ /* Now output[1..9] are reduced, and |output[0]| < 2^26 + 19 * 2^38
+ * So |over| will be no more than 77825 */
+ {
+ limb over = div_by_2_26(output[0]);
+ output[0] -= over << 26;
+ output[1] += over;
+ }
+
+ /* Now output[0,2..9] are reduced, and |output[1]| < 2^25 + 77825
+ * So |over| will be no more than 1. */
+ {
+ /* output[1] fits in 32 bits, so we can use div_s32_by_2_25 here. */
+ s32 over32 = div_s32_by_2_25((s32) output[1]);
+ output[1] -= over32 << 25;
+ output[2] += over32;
+ }
+
+ /* Finally, output[0,1,3..9] are reduced, and output[2] is "nearly reduced":
+ * we have |output[2]| <= 2^26. This is good enough for all of our math,
+ * but it will require an extra freduce_coefficients before fcontract. */
+}
+
+/* A helpful wrapper around fproduct: output = in * in2.
+ *
+ * output must be distinct to both inputs. The output is reduced degree and
+ * reduced coefficient.
+ */
+static void
+fmul(limb *output, const limb *in, const limb *in2) {
+ limb t[19];
+ fproduct(t, in, in2);
+ freduce_degree(t);
+ freduce_coefficients(t);
+ memcpy(output, t, sizeof(limb) * 10);
+}
+
+static void fsquare_inner(limb *output, const limb *in) {
+ output[0] = ((limb) ((s32) in[0])) * ((s32) in[0]);
+ output[1] = 2 * ((limb) ((s32) in[0])) * ((s32) in[1]);
+ output[2] = 2 * (((limb) ((s32) in[1])) * ((s32) in[1]) +
+ ((limb) ((s32) in[0])) * ((s32) in[2]));
+ output[3] = 2 * (((limb) ((s32) in[1])) * ((s32) in[2]) +
+ ((limb) ((s32) in[0])) * ((s32) in[3]));
+ output[4] = ((limb) ((s32) in[2])) * ((s32) in[2]) +
+ 4 * ((limb) ((s32) in[1])) * ((s32) in[3]) +
+ 2 * ((limb) ((s32) in[0])) * ((s32) in[4]);
+ output[5] = 2 * (((limb) ((s32) in[2])) * ((s32) in[3]) +
+ ((limb) ((s32) in[1])) * ((s32) in[4]) +
+ ((limb) ((s32) in[0])) * ((s32) in[5]));
+ output[6] = 2 * (((limb) ((s32) in[3])) * ((s32) in[3]) +
+ ((limb) ((s32) in[2])) * ((s32) in[4]) +
+ ((limb) ((s32) in[0])) * ((s32) in[6]) +
+ 2 * ((limb) ((s32) in[1])) * ((s32) in[5]));
+ output[7] = 2 * (((limb) ((s32) in[3])) * ((s32) in[4]) +
+ ((limb) ((s32) in[2])) * ((s32) in[5]) +
+ ((limb) ((s32) in[1])) * ((s32) in[6]) +
+ ((limb) ((s32) in[0])) * ((s32) in[7]));
+ output[8] = ((limb) ((s32) in[4])) * ((s32) in[4]) +
+ 2 * (((limb) ((s32) in[2])) * ((s32) in[6]) +
+ ((limb) ((s32) in[0])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in[1])) * ((s32) in[7]) +
+ ((limb) ((s32) in[3])) * ((s32) in[5])));
+ output[9] = 2 * (((limb) ((s32) in[4])) * ((s32) in[5]) +
+ ((limb) ((s32) in[3])) * ((s32) in[6]) +
+ ((limb) ((s32) in[2])) * ((s32) in[7]) +
+ ((limb) ((s32) in[1])) * ((s32) in[8]) +
+ ((limb) ((s32) in[0])) * ((s32) in[9]));
+ output[10] = 2 * (((limb) ((s32) in[5])) * ((s32) in[5]) +
+ ((limb) ((s32) in[4])) * ((s32) in[6]) +
+ ((limb) ((s32) in[2])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in[3])) * ((s32) in[7]) +
+ ((limb) ((s32) in[1])) * ((s32) in[9])));
+ output[11] = 2 * (((limb) ((s32) in[5])) * ((s32) in[6]) +
+ ((limb) ((s32) in[4])) * ((s32) in[7]) +
+ ((limb) ((s32) in[3])) * ((s32) in[8]) +
+ ((limb) ((s32) in[2])) * ((s32) in[9]));
+ output[12] = ((limb) ((s32) in[6])) * ((s32) in[6]) +
+ 2 * (((limb) ((s32) in[4])) * ((s32) in[8]) +
+ 2 * (((limb) ((s32) in[5])) * ((s32) in[7]) +
+ ((limb) ((s32) in[3])) * ((s32) in[9])));
+ output[13] = 2 * (((limb) ((s32) in[6])) * ((s32) in[7]) +
+ ((limb) ((s32) in[5])) * ((s32) in[8]) +
+ ((limb) ((s32) in[4])) * ((s32) in[9]));
+ output[14] = 2 * (((limb) ((s32) in[7])) * ((s32) in[7]) +
+ ((limb) ((s32) in[6])) * ((s32) in[8]) +
+ 2 * ((limb) ((s32) in[5])) * ((s32) in[9]));
+ output[15] = 2 * (((limb) ((s32) in[7])) * ((s32) in[8]) +
+ ((limb) ((s32) in[6])) * ((s32) in[9]));
+ output[16] = ((limb) ((s32) in[8])) * ((s32) in[8]) +
+ 4 * ((limb) ((s32) in[7])) * ((s32) in[9]);
+ output[17] = 2 * ((limb) ((s32) in[8])) * ((s32) in[9]);
+ output[18] = 2 * ((limb) ((s32) in[9])) * ((s32) in[9]);
+}
+
+static void
+fsquare(limb *output, const limb *in) {
+ limb t[19];
+ fsquare_inner(t, in);
+ freduce_degree(t);
+ freduce_coefficients(t);
+ memcpy(output, t, sizeof(limb) * 10);
+}
+
+/* Take a little-endian, 32-byte number and expand it into polynomial form */
+static void
+fexpand(limb *output, const u8 *input) {
+#define F(n,start,shift,mask) \
+ output[n] = ((((limb) input[start + 0]) | \
+ ((limb) input[start + 1]) << 8 | \
+ ((limb) input[start + 2]) << 16 | \
+ ((limb) input[start + 3]) << 24) >> shift) & mask;
+ F(0, 0, 0, 0x3ffffff);
+ F(1, 3, 2, 0x1ffffff);
+ F(2, 6, 3, 0x3ffffff);
+ F(3, 9, 5, 0x1ffffff);
+ F(4, 12, 6, 0x3ffffff);
+ F(5, 16, 0, 0x1ffffff);
+ F(6, 19, 1, 0x3ffffff);
+ F(7, 22, 3, 0x1ffffff);
+ F(8, 25, 4, 0x3ffffff);
+ F(9, 28, 6, 0x1ffffff);
+#undef F
+}
+
+#if (-32 >> 1) != -16
+#error "This code only works when >> does sign-extension on negative numbers"
+#endif
+
+/* Take a fully reduced polynomial form number and contract it into a
+ * little-endian, 32-byte array
+ */
+static void
+fcontract(u8 *output, limb *input) {
+ int i;
+ int j;
+
+ for (j = 0; j < 2; ++j) {
+ for (i = 0; i < 9; ++i) {
+ if ((i & 1) == 1) {
+ /* This calculation is a time-invariant way to make input[i] positive
+ by borrowing from the next-larger limb.
+ */
+ const s32 mask = (s32)(input[i]) >> 31;
+ const s32 carry = -(((s32)(input[i]) & mask) >> 25);
+ input[i] = (s32)(input[i]) + (carry << 25);
+ input[i+1] = (s32)(input[i+1]) - carry;
+ } else {
+ const s32 mask = (s32)(input[i]) >> 31;
+ const s32 carry = -(((s32)(input[i]) & mask) >> 26);
+ input[i] = (s32)(input[i]) + (carry << 26);
+ input[i+1] = (s32)(input[i+1]) - carry;
+ }
+ }
+ {
+ const s32 mask = (s32)(input[9]) >> 31;
+ const s32 carry = -(((s32)(input[9]) & mask) >> 25);
+ input[9] = (s32)(input[9]) + (carry << 25);
+ input[0] = (s32)(input[0]) - (carry * 19);
+ }
+ }
+
+ /* The first borrow-propagation pass above ended with every limb
+ except (possibly) input[0] non-negative.
+
+ Since each input limb except input[0] is decreased by at most 1
+ by a borrow-propagation pass, the second borrow-propagation pass
+ could only have wrapped around to decrease input[0] again if the
+ first pass left input[0] negative *and* input[1] through input[9]
+ were all zero. In that case, input[1] is now 2^25 - 1, and this
+ last borrow-propagation step will leave input[1] non-negative.
+ */
+ {
+ const s32 mask = (s32)(input[0]) >> 31;
+ const s32 carry = -(((s32)(input[0]) & mask) >> 26);
+ input[0] = (s32)(input[0]) + (carry << 26);
+ input[1] = (s32)(input[1]) - carry;
+ }
+
+ /* Both passes through the above loop, plus the last 0-to-1 step, are
+ necessary: if input[9] is -1 and input[0] through input[8] are 0,
+ negative values will remain in the array until the end.
+ */
+
+ input[1] <<= 2;
+ input[2] <<= 3;
+ input[3] <<= 5;
+ input[4] <<= 6;
+ input[6] <<= 1;
+ input[7] <<= 3;
+ input[8] <<= 4;
+ input[9] <<= 6;
+#define F(i, s) \
+ output[s+0] |= input[i] & 0xff; \
+ output[s+1] = (input[i] >> 8) & 0xff; \
+ output[s+2] = (input[i] >> 16) & 0xff; \
+ output[s+3] = (input[i] >> 24) & 0xff;
+ output[0] = 0;
+ output[16] = 0;
+ F(0,0);
+ F(1,3);
+ F(2,6);
+ F(3,9);
+ F(4,12);
+ F(5,16);
+ F(6,19);
+ F(7,22);
+ F(8,25);
+ F(9,28);
+#undef F
+}
+
+/* Input: Q, Q', Q-Q'
+ * Output: 2Q, Q+Q'
+ *
+ * x2 z3: long form
+ * x3 z3: long form
+ * x z: short form, destroyed
+ * xprime zprime: short form, destroyed
+ * qmqp: short form, preserved
+ */
+static void fmonty(limb *x2, limb *z2, /* output 2Q */
+ limb *x3, limb *z3, /* output Q + Q' */
+ limb *x, limb *z, /* input Q */
+ limb *xprime, limb *zprime, /* input Q' */
+ const limb *qmqp /* input Q - Q' */) {
+ limb origx[10], origxprime[10], zzz[19], xx[19], zz[19], xxprime[19],
+ zzprime[19], zzzprime[19], xxxprime[19];
+
+ memcpy(origx, x, 10 * sizeof(limb));
+ fsum(x, z);
+ fdifference(z, origx); // does x - z
+
+ memcpy(origxprime, xprime, sizeof(limb) * 10);
+ fsum(xprime, zprime);
+ fdifference(zprime, origxprime);
+ fproduct(xxprime, xprime, z);
+ fproduct(zzprime, x, zprime);
+ freduce_degree(xxprime);
+ freduce_coefficients(xxprime);
+ freduce_degree(zzprime);
+ freduce_coefficients(zzprime);
+ memcpy(origxprime, xxprime, sizeof(limb) * 10);
+ fsum(xxprime, zzprime);
+ fdifference(zzprime, origxprime);
+ fsquare(xxxprime, xxprime);
+ fsquare(zzzprime, zzprime);
+ fproduct(zzprime, zzzprime, qmqp);
+ freduce_degree(zzprime);
+ freduce_coefficients(zzprime);
+ memcpy(x3, xxxprime, sizeof(limb) * 10);
+ memcpy(z3, zzprime, sizeof(limb) * 10);
+
+ fsquare(xx, x);
+ fsquare(zz, z);
+ fproduct(x2, xx, zz);
+ freduce_degree(x2);
+ freduce_coefficients(x2);
+ fdifference(zz, xx); // does zz = xx - zz
+ memset(zzz + 10, 0, sizeof(limb) * 9);
+ fscalar_product(zzz, zz, 121665);
+ /* No need to call freduce_degree here:
+ fscalar_product doesn't increase the degree of its input. */
+ freduce_coefficients(zzz);
+ fsum(zzz, xx);
+ fproduct(z2, zz, zzz);
+ freduce_degree(z2);
+ freduce_coefficients(z2);
+}
+
+/* Conditionally swap two reduced-form limb arrays if 'iswap' is 1, but leave
+ * them unchanged if 'iswap' is 0. Runs in data-invariant time to avoid
+ * side-channel attacks.
+ *
+ * NOTE that this function requires that 'iswap' be 1 or 0; other values give
+ * wrong results. Also, the two limb arrays must be in reduced-coefficient,
+ * reduced-degree form: the values in a[10..19] or b[10..19] aren't swapped,
+ * and all all values in a[0..9],b[0..9] must have magnitude less than
+ * INT32_MAX.
+ */
+static void
+swap_conditional(limb a[19], limb b[19], limb iswap) {
+ unsigned i;
+ const s32 swap = (s32) -iswap;
+
+ for (i = 0; i < 10; ++i) {
+ const s32 x = swap & ( ((s32)a[i]) ^ ((s32)b[i]) );
+ a[i] = ((s32)a[i]) ^ x;
+ b[i] = ((s32)b[i]) ^ x;
+ }
+}
+
+/* Calculates nQ where Q is the x-coordinate of a point on the curve
+ *
+ * resultx/resultz: the x coordinate of the resulting curve point (short form)
+ * n: a little endian, 32-byte number
+ * q: a point of the curve (short form)
+ */
+static void
+cmult(limb *resultx, limb *resultz, const u8 *n, const limb *q) {
+ limb a[19] = {0}, b[19] = {1}, c[19] = {1}, d[19] = {0};
+ limb *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t;
+ limb e[19] = {0}, f[19] = {1}, g[19] = {0}, h[19] = {1};
+ limb *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h;
+
+ unsigned i, j;
+
+ memcpy(nqpqx, q, sizeof(limb) * 10);
+
+ for (i = 0; i < 32; ++i) {
+ u8 byte = n[31 - i];
+ for (j = 0; j < 8; ++j) {
+ const limb bit = byte >> 7;
+
+ swap_conditional(nqx, nqpqx, bit);
+ swap_conditional(nqz, nqpqz, bit);
+ fmonty(nqx2, nqz2,
+ nqpqx2, nqpqz2,
+ nqx, nqz,
+ nqpqx, nqpqz,
+ q);
+ swap_conditional(nqx2, nqpqx2, bit);
+ swap_conditional(nqz2, nqpqz2, bit);
+
+ t = nqx;
+ nqx = nqx2;
+ nqx2 = t;
+ t = nqz;
+ nqz = nqz2;
+ nqz2 = t;
+ t = nqpqx;
+ nqpqx = nqpqx2;
+ nqpqx2 = t;
+ t = nqpqz;
+ nqpqz = nqpqz2;
+ nqpqz2 = t;
+
+ byte <<= 1;
+ }
+ }
+
+ memcpy(resultx, nqx, sizeof(limb) * 10);
+ memcpy(resultz, nqz, sizeof(limb) * 10);
+}
+
+// -----------------------------------------------------------------------------
+// Shamelessly copied from djb's code
+// -----------------------------------------------------------------------------
+static void
+crecip(limb *out, const limb *z) {
+ limb z2[10];
+ limb z9[10];
+ limb z11[10];
+ limb z2_5_0[10];
+ limb z2_10_0[10];
+ limb z2_20_0[10];
+ limb z2_50_0[10];
+ limb z2_100_0[10];
+ limb t0[10];
+ limb t1[10];
+ int i;
+
+ /* 2 */ fsquare(z2,z);
+ /* 4 */ fsquare(t1,z2);
+ /* 8 */ fsquare(t0,t1);
+ /* 9 */ fmul(z9,t0,z);
+ /* 11 */ fmul(z11,z9,z2);
+ /* 22 */ fsquare(t0,z11);
+ /* 2^5 - 2^0 = 31 */ fmul(z2_5_0,t0,z9);
+
+ /* 2^6 - 2^1 */ fsquare(t0,z2_5_0);
+ /* 2^7 - 2^2 */ fsquare(t1,t0);
+ /* 2^8 - 2^3 */ fsquare(t0,t1);
+ /* 2^9 - 2^4 */ fsquare(t1,t0);
+ /* 2^10 - 2^5 */ fsquare(t0,t1);
+ /* 2^10 - 2^0 */ fmul(z2_10_0,t0,z2_5_0);
+
+ /* 2^11 - 2^1 */ fsquare(t0,z2_10_0);
+ /* 2^12 - 2^2 */ fsquare(t1,t0);
+ /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^20 - 2^0 */ fmul(z2_20_0,t1,z2_10_0);
+
+ /* 2^21 - 2^1 */ fsquare(t0,z2_20_0);
+ /* 2^22 - 2^2 */ fsquare(t1,t0);
+ /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^40 - 2^0 */ fmul(t0,t1,z2_20_0);
+
+ /* 2^41 - 2^1 */ fsquare(t1,t0);
+ /* 2^42 - 2^2 */ fsquare(t0,t1);
+ /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t1,t0); fsquare(t0,t1); }
+ /* 2^50 - 2^0 */ fmul(z2_50_0,t0,z2_10_0);
+
+ /* 2^51 - 2^1 */ fsquare(t0,z2_50_0);
+ /* 2^52 - 2^2 */ fsquare(t1,t0);
+ /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^100 - 2^0 */ fmul(z2_100_0,t1,z2_50_0);
+
+ /* 2^101 - 2^1 */ fsquare(t1,z2_100_0);
+ /* 2^102 - 2^2 */ fsquare(t0,t1);
+ /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fsquare(t1,t0); fsquare(t0,t1); }
+ /* 2^200 - 2^0 */ fmul(t1,t0,z2_100_0);
+
+ /* 2^201 - 2^1 */ fsquare(t0,t1);
+ /* 2^202 - 2^2 */ fsquare(t1,t0);
+ /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
+ /* 2^250 - 2^0 */ fmul(t0,t1,z2_50_0);
+
+ /* 2^251 - 2^1 */ fsquare(t1,t0);
+ /* 2^252 - 2^2 */ fsquare(t0,t1);
+ /* 2^253 - 2^3 */ fsquare(t1,t0);
+ /* 2^254 - 2^4 */ fsquare(t0,t1);
+ /* 2^255 - 2^5 */ fsquare(t1,t0);
+ /* 2^255 - 21 */ fmul(out,t1,z11);
+}
+
+int curve25519_donna(u8 *, const u8 *, const u8 *);
+
+int
+curve25519_donna(u8 *mypublic, const u8 *secret, const u8 *basepoint) {
+ limb bp[10], x[10], z[11], zmone[10];
+ uint8_t e[32];
+ int i;
+
+ for (i = 0; i < 32; ++i) e[i] = secret[i];
+ e[0] &= 248;
+ e[31] &= 127;
+ e[31] |= 64;
+
+ fexpand(bp, basepoint);
+ cmult(x, z, e, bp);
+ crecip(zmone, z);
+ fmul(z, x, zmone);
+ freduce_coefficients(z);
+ fcontract(mypublic, z);
+ return 0;
+}
diff --git a/src/or/eventdns.c b/src/ext/eventdns.c
index 768693aba..2b2988f1e 100644
--- a/src/or/eventdns.c
+++ b/src/ext/eventdns.c
@@ -130,7 +130,7 @@ typedef int socklen_t;
#define mm_realloc(x,y) tor_realloc((x),(y))
#define mm_free(x) tor_free(x)
#define mm_strdup(x) tor_strdup(x)
-#define _mm_free(x) _tor_free(x)
+#define _mm_free(x) tor_free_(x)
#undef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
@@ -368,7 +368,11 @@ error_is_eagain(int err)
#define CLOSE_SOCKET(x) closesocket(x)
#else
#define last_error(sock) (errno)
+#if EAGAIN != EWOULDBLOCK
+#define error_is_eagain(err) ((err) == EAGAIN || (err) == EWOULDBLOCK)
+#else
#define error_is_eagain(err) ((err) == EAGAIN)
+#endif
#define CLOSE_SOCKET(x) close(x)
#endif
@@ -423,9 +427,9 @@ evdns_set_log_fn(evdns_debug_log_fn_type fn)
#define EVDNS_LOG_CHECK
#endif
-static void _evdns_log(int warn, const char *fmt, ...) EVDNS_LOG_CHECK;
+static void evdns_log(int warn, const char *fmt, ...) EVDNS_LOG_CHECK;
static void
-_evdns_log(int warn, const char *fmt, ...)
+evdns_log(int warn, const char *fmt, ...)
{
va_list args;
static char buf[512];
@@ -442,8 +446,6 @@ _evdns_log(int warn, const char *fmt, ...)
va_end(args);
}
-#define log _evdns_log
-
static int
sockaddr_eq(const struct sockaddr *sa1, const struct sockaddr *sa2,
int include_port)
@@ -530,7 +532,7 @@ nameserver_probe_failed(struct nameserver *const ns) {
ns->failed_times++;
if (add_timeout_event(ns, (struct timeval *) timeout) < 0) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Error from libevent when adding timer event for %s",
debug_ntop((struct sockaddr *)&ns->address));
/* ???? Do more? */
@@ -546,19 +548,19 @@ nameserver_failed(struct nameserver *const ns, const char *msg) {
/* then don't do anything */
if (!ns->state) return;
- log(EVDNS_LOG_WARN, "Nameserver %s has failed: %s",
+ evdns_log(EVDNS_LOG_WARN, "Nameserver %s has failed: %s",
debug_ntop((struct sockaddr *)&ns->address), msg);
global_good_nameservers--;
assert(global_good_nameservers >= 0);
if (global_good_nameservers == 0) {
- log(EVDNS_LOG_WARN, "All nameservers have failed");
+ evdns_log(EVDNS_LOG_WARN, "All nameservers have failed");
}
ns->state = 0;
ns->failed_times = 1;
if (add_timeout_event(ns, (struct timeval *) &global_nameserver_timeouts[0]) < 0) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Error from libevent when adding timer event for %s",
debug_ntop((struct sockaddr *)&ns->address));
/* ???? Do more? */
@@ -589,7 +591,7 @@ nameserver_failed(struct nameserver *const ns, const char *msg) {
static void
nameserver_up(struct nameserver *const ns) {
if (ns->state) return;
- log(EVDNS_LOG_WARN, "Nameserver %s is back up",
+ evdns_log(EVDNS_LOG_WARN, "Nameserver %s is back up",
debug_ntop((struct sockaddr *)&ns->address));
del_timeout_event(ns);
ns->state = 1;
@@ -620,7 +622,7 @@ request_finished(struct evdns_request *const req, struct evdns_request **head) {
}
}
- log(EVDNS_LOG_DEBUG, "Removing timeout for request %lx",
+ evdns_log(EVDNS_LOG_DEBUG, "Removing timeout for request %lx",
(unsigned long) req);
del_timeout_event(req);
@@ -772,7 +774,7 @@ reply_handle(struct evdns_request *const req, u16 flags, u32 ttl, struct reply *
* confusing." Treat this as a timeout, not a failure.
*/
/*XXXX refactor the parts of */
- log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; "
+ evdns_log(EVDNS_LOG_DEBUG, "Got a SERVERFAILED from nameserver %s; "
"will allow the request to time out.",
debug_ntop((struct sockaddr *)&req->ns->address));
break;
@@ -840,10 +842,11 @@ name_parse(u8 *packet, int length, int *idx, char *name_out, size_t name_out_len
}
if (label_len > 63) return -1;
if (cp != name_out) {
- if (cp + 1 >= end) return -1;
+ if (cp >= name_out + name_out_len - 1) return -1;
*cp++ = '.';
}
- if (cp + label_len >= end) return -1;
+ if (label_len > name_out_len ||
+ cp >= name_out + name_out_len - label_len) return -1;
memcpy(cp, packet + j, label_len);
cp += label_len;
j += label_len;
@@ -1264,7 +1267,7 @@ nameserver_read(struct nameserver *ns) {
}
/* XXX Match port too? */
if (!sockaddr_eq(sa, (struct sockaddr*)&ns->address, 0)) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Address mismatch on received DNS packet. Address was %s",
debug_ntop(sa));
return;
@@ -1290,7 +1293,7 @@ server_port_read(struct evdns_server_port *s) {
if (r < 0) {
int err = last_error(s->socket);
if (error_is_eagain(err)) return;
- log(EVDNS_LOG_WARN, "Error %s (%d) while reading request.",
+ evdns_log(EVDNS_LOG_WARN, "Error %s (%d) while reading request.",
tor_socket_strerror(err), err);
return;
}
@@ -1310,7 +1313,7 @@ server_port_flush(struct evdns_server_port *port)
int err = last_error(port->socket);
if (error_is_eagain(err))
return;
- log(EVDNS_LOG_WARN, "Error %s (%d) while writing response to port; dropping", tor_socket_strerror(err), err);
+ evdns_log(EVDNS_LOG_WARN, "Error %s (%d) while writing response to port; dropping", tor_socket_strerror(err), err);
}
if (server_request_free(req)) {
/* we released the last reference to req->port. */
@@ -1327,7 +1330,7 @@ server_port_flush(struct evdns_server_port *port)
event_set(&port->event, port->socket, EV_READ | EV_PERSIST,
server_port_ready_callback, port);
if (event_add(&port->event, NULL) < 0) {
- log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server.");
+ evdns_log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server.");
/* ???? Do more? */
}
}
@@ -1345,7 +1348,7 @@ nameserver_write_waiting(struct nameserver *ns, char waiting) {
event_set(&ns->event, ns->socket, EV_READ | (waiting ? EV_WRITE : 0) | EV_PERSIST,
nameserver_ready_callback, ns);
if (event_add(&ns->event, NULL) < 0) {
- log(EVDNS_LOG_WARN, "Error from libevent when adding event for %s",
+ evdns_log(EVDNS_LOG_WARN, "Error from libevent when adding event for %s",
debug_ntop((struct sockaddr *)&ns->address));
/* ???? Do more? */
}
@@ -1855,7 +1858,7 @@ evdns_server_request_respond(struct evdns_server_request *_req, int err)
event_set(&port->event, port->socket, (port->closing?0:EV_READ) | EV_WRITE | EV_PERSIST, server_port_ready_callback, port);
if (event_add(&port->event, NULL) < 0) {
- log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server");
+ evdns_log(EVDNS_LOG_WARN, "Error from libevent when adding event for DNS server");
}
}
@@ -1991,7 +1994,7 @@ evdns_request_timeout_callback(int fd, short events, void *arg) {
(void) fd;
(void) events;
- log(EVDNS_LOG_DEBUG, "Request %lx timed out", (unsigned long) arg);
+ evdns_log(EVDNS_LOG_DEBUG, "Request %lx timed out", (unsigned long) arg);
req->ns->timedout++;
if (req->ns->timedout > global_max_nameserver_timeout) {
@@ -2070,11 +2073,11 @@ evdns_request_transmit(struct evdns_request *req) {
* and make us retransmit the request anyway. */
default:
/* transmitted; we need to check for timeout. */
- log(EVDNS_LOG_DEBUG,
+ evdns_log(EVDNS_LOG_DEBUG,
"Setting timeout for request %lx", (unsigned long) req);
if (add_timeout_event(req, &global_timeout) < 0) {
- log(EVDNS_LOG_WARN,
+ evdns_log(EVDNS_LOG_WARN,
"Error from libevent when adding timer for request %lx",
(unsigned long) req);
/* ???? Do more? */
@@ -2122,7 +2125,7 @@ nameserver_send_probe(struct nameserver *const ns) {
addr = mm_malloc(sizeof(struct sockaddr_storage));
memcpy(addr, &ns->address, sizeof(struct sockaddr_storage));
- log(EVDNS_LOG_DEBUG, "Sending probe to %s", debug_ntop((struct sockaddr *)&ns->address));
+ evdns_log(EVDNS_LOG_DEBUG, "Sending probe to %s", debug_ntop((struct sockaddr *)&ns->address));
req = request_new(TYPE_A, "www.google.com", DNS_QUERY_NO_SEARCH, nameserver_probe_callback, addr);
if (!req) {
@@ -2278,14 +2281,14 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
if (server) {
do {
if (sockaddr_eq(address, (struct sockaddr *)&server->address, 1)) {
- log(EVDNS_LOG_DEBUG, "Duplicate nameserver.");
+ evdns_log(EVDNS_LOG_DEBUG, "Duplicate nameserver.");
return 3;
}
server = server->next;
} while (server != started_at);
}
if (addrlen > (int)sizeof(ns->address)) {
- log(EVDNS_LOG_DEBUG, "Addrlen %d too long.", (int)addrlen);
+ evdns_log(EVDNS_LOG_DEBUG, "Addrlen %d too long.", (int)addrlen);
return 2;
}
@@ -2296,6 +2299,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
@@ -2304,21 +2311,27 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
ioctlsocket(ns->socket, FIONBIO, &nonblocking);
}
#else
- fcntl(ns->socket, F_SETFL, O_NONBLOCK);
+ if (fcntl(ns->socket, F_SETFL, O_NONBLOCK) == -1) {
+ evdns_log(EVDNS_LOG_WARN, "Error %s (%d) while settings file status flags.",
+ tor_socket_strerror(errno), errno);
+ err = 2;
+ goto out2;
+ }
#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,
global_bind_addrlen) < 0) {
- log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address.");
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't bind to outgoing address.");
err = 2;
goto out2;
}
}
if (connect(ns->socket, address, addrlen) != 0) {
- log(EVDNS_LOG_DEBUG, "Couldn't open socket to nameserver.");
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't open socket to nameserver.");
err = 2;
goto out2;
}
@@ -2327,12 +2340,12 @@ _evdns_nameserver_add_impl(const struct sockaddr *address,
ns->state = 1;
event_set(&ns->event, ns->socket, EV_READ | EV_PERSIST, nameserver_ready_callback, ns);
if (event_add(&ns->event, NULL) < 0) {
- log(EVDNS_LOG_DEBUG, "Couldn't add event for nameserver.");
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't add event for nameserver.");
err = 2;
goto out2;
}
- log(EVDNS_LOG_DEBUG, "Added nameserver %s", debug_ntop(address));
+ evdns_log(EVDNS_LOG_DEBUG, "Added nameserver %s", debug_ntop(address));
/* insert this nameserver into the list of them */
if (!server_head) {
@@ -2356,7 +2369,7 @@ out2:
out1:
CLEAR(ns);
mm_free(ns);
- log(EVDNS_LOG_WARN, "Unable to add nameserver %s: error %d", debug_ntop(address), err);
+ evdns_log(EVDNS_LOG_WARN, "Unable to add nameserver %s: error %d", debug_ntop(address), err);
return err;
}
@@ -2389,18 +2402,18 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
* ipv4
*/
- log(EVDNS_LOG_DEBUG, "Trying to add nameserver <%s>", ip_as_string);
+ evdns_log(EVDNS_LOG_DEBUG, "Trying to add nameserver <%s>", ip_as_string);
cp = strchr(ip_as_string, ':');
if (*ip_as_string == '[') {
size_t len;
if (!(cp = strchr(ip_as_string, ']'))) {
- log(EVDNS_LOG_DEBUG, "Nameserver missing closing ]");
+ evdns_log(EVDNS_LOG_DEBUG, "Nameserver missing closing ]");
return 4;
}
len = cp-(ip_as_string + 1);
if (len > sizeof(buf)-1) {
- log(EVDNS_LOG_DEBUG, "[Nameserver] does not fit in buffer.");
+ evdns_log(EVDNS_LOG_DEBUG, "[Nameserver] does not fit in buffer.");
return 4;
}
memcpy(buf, ip_as_string+1, len);
@@ -2418,7 +2431,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
} else if (cp) {
is_ipv6 = 0;
if (cp - ip_as_string > (int)sizeof(buf)-1) {
- log(EVDNS_LOG_DEBUG, "Nameserver does not fit in buffer.");
+ evdns_log(EVDNS_LOG_DEBUG, "Nameserver does not fit in buffer.");
return 4;
}
memcpy(buf, ip_as_string, cp-ip_as_string);
@@ -2436,7 +2449,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
} else {
port = strtoint(port_part);
if (port <= 0 || port > 65535) {
- log(EVDNS_LOG_DEBUG, "Nameserver port <%s> out of range",
+ evdns_log(EVDNS_LOG_DEBUG, "Nameserver port <%s> out of range",
port_part);
return 4;
}
@@ -2453,7 +2466,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
sin6.sin6_family = AF_INET6;
sin6.sin6_port = htons(port);
if (1 != tor_inet_pton(AF_INET6, addr_part, &sin6.sin6_addr)) {
- log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
+ evdns_log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
return 4;
}
return _evdns_nameserver_add_impl((struct sockaddr*)&sin6,
@@ -2467,7 +2480,7 @@ evdns_nameserver_ip_add(const char *ip_as_string) {
sin.sin_family = AF_INET;
sin.sin_port = htons(port);
if (!inet_aton(addr_part, &sin.sin_addr)) {
- log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
+ evdns_log(EVDNS_LOG_DEBUG, "inet_pton(%s) failed", addr_part);
return 4;
}
return _evdns_nameserver_add_impl((struct sockaddr*)&sin,
@@ -2590,7 +2603,7 @@ request_submit(struct evdns_request *const req) {
/* exported function */
int evdns_resolve_ipv4(const char *name, int flags,
evdns_callback_type callback, void *ptr) {
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
if (flags & DNS_QUERY_NO_SEARCH) {
struct evdns_request *const req =
request_new(TYPE_A, name, flags, callback, ptr);
@@ -2606,7 +2619,7 @@ int evdns_resolve_ipv4(const char *name, int flags,
/* exported function */
int evdns_resolve_ipv6(const char *name, int flags,
evdns_callback_type callback, void *ptr) {
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s", name);
if (flags & DNS_QUERY_NO_SEARCH) {
struct evdns_request *const req =
request_new(TYPE_AAAA, name, flags, callback, ptr);
@@ -2630,7 +2643,7 @@ int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_ty
(int)(u8)((a>>8 )&0xff),
(int)(u8)((a>>16)&0xff),
(int)(u8)((a>>24)&0xff));
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
req = request_new(TYPE_PTR, buf, flags, callback, ptr);
if (!req) return 1;
request_submit(req);
@@ -2654,7 +2667,7 @@ int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callb
}
assert(cp + strlen("ip6.arpa") < buf+sizeof(buf));
memcpy(cp, "ip6.arpa", strlen("ip6.arpa")+1);
- log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
+ evdns_log(EVDNS_LOG_DEBUG, "Resolve requested for %s (reverse)", buf);
req = request_new(TYPE_PTR, buf, flags, callback, ptr);
if (!req) return 1;
request_submit(req);
@@ -2870,7 +2883,7 @@ search_try_next(struct evdns_request *const req) {
if (string_num_dots(req->search_origname) < req->search_state->ndots) {
/* yep, we need to try it raw */
struct evdns_request *const newreq = request_new(req->request_type, req->search_origname, req->search_flags, req->user_callback, req->user_pointer);
- log(EVDNS_LOG_DEBUG, "Search: trying raw query %s", req->search_origname);
+ evdns_log(EVDNS_LOG_DEBUG, "Search: trying raw query %s", req->search_origname);
if (newreq) {
request_submit(newreq);
return 0;
@@ -2881,7 +2894,7 @@ search_try_next(struct evdns_request *const req) {
new_name = search_make_new(req->search_state, req->search_index, req->search_origname);
if (!new_name) return 1;
- log(EVDNS_LOG_DEBUG, "Search: now trying %s (%d)", new_name, req->search_index);
+ evdns_log(EVDNS_LOG_DEBUG, "Search: now trying %s (%d)", new_name, req->search_index);
newreq = request_new(req->request_type, new_name, req->search_flags, req->user_callback, req->user_pointer);
mm_free(new_name);
if (!newreq) return 1;
@@ -2951,7 +2964,7 @@ evdns_set_option(const char *option, const char *val, int flags)
const int ndots = strtoint(val);
if (ndots == -1) return -1;
if (!(flags & DNS_OPTION_SEARCH)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting ndots to %d", ndots);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting ndots to %d", ndots);
if (!global_search_state) global_search_state = search_state_new();
if (!global_search_state) return -1;
global_search_state->ndots = ndots;
@@ -2959,20 +2972,20 @@ evdns_set_option(const char *option, const char *val, int flags)
const int timeout = strtoint(val);
if (timeout == -1) return -1;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting timeout to %d", timeout);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting timeout to %d", timeout);
global_timeout.tv_sec = timeout;
} else if (!strncmp(option, "max-timeouts:", 12)) {
const int maxtimeout = strtoint_clipped(val, 1, 255);
if (maxtimeout == -1) return -1;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting maximum allowed timeouts to %d",
+ evdns_log(EVDNS_LOG_DEBUG, "Setting maximum allowed timeouts to %d",
maxtimeout);
global_max_nameserver_timeout = maxtimeout;
} else if (!strncmp(option, "max-inflight:", 13)) {
const int maxinflight = strtoint_clipped(val, 1, 65000);
if (maxinflight == -1) return -1;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting maximum inflight requests to %d",
+ evdns_log(EVDNS_LOG_DEBUG, "Setting maximum inflight requests to %d",
maxinflight);
global_max_requests_inflight = maxinflight;
} else if (!strncmp(option, "attempts:", 9)) {
@@ -2980,12 +2993,12 @@ evdns_set_option(const char *option, const char *val, int flags)
if (retries == -1) return -1;
if (retries > 255) retries = 255;
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting retries to %d", retries);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting retries to %d", retries);
global_max_retransmits = retries;
} else if (!strncmp(option, "randomize-case:", 15)) {
int randcase = strtoint(val);
if (!(flags & DNS_OPTION_MISC)) return 0;
- log(EVDNS_LOG_DEBUG, "Setting randomize_case to %d", randcase);
+ evdns_log(EVDNS_LOG_DEBUG, "Setting randomize_case to %d", randcase);
global_randomize_case = randcase;
}
return 0;
@@ -3002,7 +3015,8 @@ resolv_conf_parse_line(char *const start, int flags) {
if (!strcmp(first_token, "nameserver") && (flags & DNS_OPTION_NAMESERVERS)) {
const char *const nameserver = NEXT_TOKEN;
- evdns_nameserver_ip_add(nameserver);
+ if (nameserver)
+ evdns_nameserver_ip_add(nameserver);
} else if (!strcmp(first_token, "domain") && (flags & DNS_OPTION_SEARCH)) {
const char *const domain = NEXT_TOKEN;
if (domain) {
@@ -3043,7 +3057,7 @@ evdns_resolv_conf_parse(int flags, const char *const filename) {
char *start;
int err = 0;
- log(EVDNS_LOG_DEBUG, "Parsing resolv.conf file %s", filename);
+ evdns_log(EVDNS_LOG_DEBUG, "Parsing resolv.conf file %s", filename);
fd = tor_open_cloexec(filename, O_RDONLY, 0);
if (fd < 0) {
@@ -3142,13 +3156,13 @@ load_nameservers_with_getnetworkparams(void)
GetNetworkParams_fn_t fn;
if (!(handle = load_windows_system_library(TEXT("iphlpapi.dll")))) {
- log(EVDNS_LOG_WARN, "Could not open iphlpapi.dll");
+ evdns_log(EVDNS_LOG_WARN, "Could not open iphlpapi.dll");
/* right now status = 0, doesn't that mean "good" - mikec */
status = -1;
goto done;
}
if (!(fn = (GetNetworkParams_fn_t) GetProcAddress(handle, TEXT("GetNetworkParams")))) {
- log(EVDNS_LOG_WARN, "Could not get address of function.");
+ evdns_log(EVDNS_LOG_WARN, "Could not get address of function.");
/* same as above */
status = -1;
goto done;
@@ -3169,7 +3183,7 @@ load_nameservers_with_getnetworkparams(void)
fixed = buf;
r = fn(fixed, &size);
if (r != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG, "fn() failed.");
+ evdns_log(EVDNS_LOG_DEBUG, "fn() failed.");
status = -1;
goto done;
}
@@ -3181,12 +3195,12 @@ load_nameservers_with_getnetworkparams(void)
while (ns) {
r = evdns_nameserver_ip_add_line(ns->IpAddress.String);
if (r) {
- log(EVDNS_LOG_DEBUG,"Could not add nameserver %s to list, "
+ evdns_log(EVDNS_LOG_DEBUG,"Could not add nameserver %s to list, "
"error: %d; status: %d",
(ns->IpAddress.String),(int)GetLastError(), r);
status = r;
} else {
- log(EVDNS_LOG_DEBUG,"Successfully added %s as nameserver",ns->IpAddress.String);
+ evdns_log(EVDNS_LOG_DEBUG,"Successfully added %s as nameserver",ns->IpAddress.String);
added_any++;
}
@@ -3194,7 +3208,7 @@ load_nameservers_with_getnetworkparams(void)
}
if (!added_any) {
- log(EVDNS_LOG_DEBUG, "No nameservers added.");
+ evdns_log(EVDNS_LOG_DEBUG, "No nameservers added.");
if (status == 0)
status = -1;
} else {
@@ -3250,10 +3264,10 @@ load_nameservers_from_registry(void)
#define TRY(k, name) \
if (!found && config_nameserver_from_reg_key(k,TEXT(name)) == 0) { \
- log(EVDNS_LOG_DEBUG,"Found nameservers in %s/%s",#k,name); \
+ evdns_log(EVDNS_LOG_DEBUG,"Found nameservers in %s/%s",#k,name); \
found = 1; \
} else if (!found) { \
- log(EVDNS_LOG_DEBUG,"Didn't find nameservers in %s/%s", \
+ evdns_log(EVDNS_LOG_DEBUG,"Didn't find nameservers in %s/%s", \
#k,#name); \
}
@@ -3262,14 +3276,14 @@ load_nameservers_from_registry(void)
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
KEY_READ, &nt_key) != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG,"Couldn't open nt key, %d",(int)GetLastError());
+ evdns_log(EVDNS_LOG_DEBUG,"Couldn't open nt key, %d",(int)GetLastError());
return -1;
}
r = RegOpenKeyEx(nt_key, TEXT("Interfaces"), 0,
KEY_QUERY_VALUE|KEY_ENUMERATE_SUB_KEYS,
&interfaces_key);
if (r != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG,"Couldn't open interfaces key, %d",(int)GetLastError());
+ evdns_log(EVDNS_LOG_DEBUG,"Couldn't open interfaces key, %d",(int)GetLastError());
return -1;
}
TRY(nt_key, "NameServer");
@@ -3282,7 +3296,7 @@ load_nameservers_from_registry(void)
HKEY win_key = 0;
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, WIN_NS_9X_KEY, 0,
KEY_READ, &win_key) != ERROR_SUCCESS) {
- log(EVDNS_LOG_DEBUG, "Couldn't open registry key, %d", (int)GetLastError());
+ evdns_log(EVDNS_LOG_DEBUG, "Couldn't open registry key, %d", (int)GetLastError());
return -1;
}
TRY(win_key, "NameServer");
@@ -3290,7 +3304,7 @@ load_nameservers_from_registry(void)
}
if (found == 0) {
- log(EVDNS_LOG_WARN,"Didn't find any nameservers.");
+ evdns_log(EVDNS_LOG_WARN,"Didn't find any nameservers.");
}
return found ? 0 : -1;
@@ -3466,8 +3480,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/eventdns.h b/src/ext/eventdns.h
index 1c130b2a1..ad8c100dd 100644
--- a/src/or/eventdns.h
+++ b/src/ext/eventdns.h
@@ -209,8 +209,8 @@
* with the next probe.
*/
-#ifndef _TOR_EVENTDNS_H
-#define _TOR_EVENTDNS_H
+#ifndef TOR_EVENTDNS_H
+#define TOR_EVENTDNS_H
/* Error codes 0-5 are as described in RFC 1035. */
#define DNS_ERR_NONE 0
diff --git a/src/common/ht.h b/src/ext/ht.h
index 25156c416..871f5bbd2 100644
--- a/src/common/ht.h
+++ b/src/ext/ht.h
@@ -1,12 +1,12 @@
/* Copyright (c) 2002, Christopher Clark.
* Copyright (c) 2005-2006, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See license at end. */
/* Based on ideas by Christopher Clark and interfaces from Niels Provos. */
-#ifndef _TOR_HT_H
-#define _TOR_HT_H
+#ifndef HT_H_INCLUDED_
+#define HT_H_INCLUDED_
#define HT_HEAD(name, type) \
struct name { \
@@ -58,6 +58,7 @@
#define HT_NEXT_RMV(name, head, elm) name##_HT_NEXT_RMV((head), (elm))
#define HT_CLEAR(name, head) name##_HT_CLEAR(head)
#define HT_INIT(name, head) name##_HT_INIT(head)
+#define HT_REP_IS_BAD_(name, head) name##_HT_REP_IS_BAD_(head)
/* Helper: */
static INLINE unsigned
ht_improve_hash(unsigned h)
@@ -86,6 +87,7 @@ ht_string_hash(const char *s)
}
#endif
+#if 0
/** Basic string hash function, from Python's str.__hash__() */
static INLINE unsigned
ht_string_hash(const char *s)
@@ -100,6 +102,7 @@ ht_string_hash(const char *s)
h ^= (unsigned)(cp-(const unsigned char*)s);
return h;
}
+#endif
#ifndef HT_NO_CACHE_HASH_VALUES
#define HT_SET_HASH_(elm, field, hashfn) \
@@ -168,7 +171,7 @@ ht_string_hash(const char *s)
} \
/* Insert the element 'elm' into the table 'head'. Do not call this \
* function if the table might already contain a matching element. */ \
- static INLINE void \
+ ATTR_UNUSED static INLINE void \
name##_HT_INSERT(struct name *head, struct type *elm) \
{ \
struct type **p; \
@@ -183,7 +186,7 @@ ht_string_hash(const char *s)
/* Insert the element 'elm' into the table 'head'. If there already \
* a matching element in the table, replace that element and return \
* it. */ \
- static INLINE struct type * \
+ ATTR_UNUSED static INLINE struct type * \
name##_HT_REPLACE(struct name *head, struct type *elm) \
{ \
struct type **p, *r; \
@@ -204,7 +207,7 @@ ht_string_hash(const char *s)
} \
/* Remove any element matching 'elm' from the table 'head'. If such \
* an element is found, return it; otherwise return NULL. */ \
- static INLINE struct type * \
+ ATTR_UNUSED static INLINE struct type * \
name##_HT_REMOVE(struct name *head, struct type *elm) \
{ \
struct type **p, *r; \
@@ -222,11 +225,11 @@ ht_string_hash(const char *s)
* using 'data' as its second argument. If the function returns \
* nonzero, remove the most recently examined element before invoking \
* the function again. */ \
- static INLINE void \
+ ATTR_UNUSED static INLINE void \
name##_HT_FOREACH_FN(struct name *head, \
int (*fn)(struct type *, void *), \
void *data) \
- { \
+{ \
unsigned idx; \
struct type **p, **nextp, *next; \
if (!head->hth_table) \
@@ -248,7 +251,7 @@ ht_string_hash(const char *s)
/* Return a pointer to the first element in the table 'head', under \
* an arbitrary order. This order is stable under remove operations, \
* but not under others. If the table is empty, return NULL. */ \
- static INLINE struct type ** \
+ ATTR_UNUSED static INLINE struct type ** \
name##_HT_START(struct name *head) \
{ \
unsigned b = 0; \
@@ -264,7 +267,7 @@ ht_string_hash(const char *s)
* NULL. If 'elm' is to be removed from the table, you must call \
* this function for the next value before you remove it. \
*/ \
- static INLINE struct type ** \
+ ATTR_UNUSED static INLINE struct type ** \
name##_HT_NEXT(struct name *head, struct type **elm) \
{ \
if ((*elm)->field.hte_next) { \
@@ -280,7 +283,7 @@ ht_string_hash(const char *s)
return NULL; \
} \
} \
- static INLINE struct type ** \
+ ATTR_UNUSED static INLINE struct type ** \
name##_HT_NEXT_RMV(struct name *head, struct type **elm) \
{ \
unsigned h = HT_ELT_HASH_(*elm, field, hashfn); \
@@ -301,14 +304,16 @@ ht_string_hash(const char *s)
#define HT_GENERATE(name, type, field, hashfn, eqfn, load, mallocfn, \
reallocfn, freefn) \
+ /* Primes that aren't too far from powers of two. We stop at */ \
+ /* P=402653189 because P*sizeof(void*) is less than SSIZE_MAX */ \
+ /* even on a 32-bit platform. */ \
static unsigned name##_PRIMES[] = { \
53, 97, 193, 389, \
769, 1543, 3079, 6151, \
12289, 24593, 49157, 98317, \
196613, 393241, 786433, 1572869, \
3145739, 6291469, 12582917, 25165843, \
- 50331653, 100663319, 201326611, 402653189, \
- 805306457, 1610612741 \
+ 50331653, 100663319, 201326611, 402653189 \
}; \
static unsigned name##_N_PRIMES = \
(unsigned)(sizeof(name##_PRIMES)/sizeof(name##_PRIMES[0])); \
diff --git a/src/ext/include.am b/src/ext/include.am
new file mode 100644
index 000000000..26e194e88
--- /dev/null
+++ b/src/ext/include.am
@@ -0,0 +1,18 @@
+
+AM_CPPFLAGS += -I$(srcdir)/src/ext -Isrc/ext
+
+EXTRA_DIST += src/ext/README
+
+EXTHEADERS = \
+ src/ext/ht.h \
+ src/ext/eventdns.h \
+ src/ext/tinytest.h \
+ src/ext/strlcat.c \
+ src/ext/strlcpy.c \
+ src/ext/tinytest_macros.h \
+ src/ext/tor_queue.h \
+ src/ext/siphash.h
+
+noinst_HEADERS+= $(EXTHEADERS)
+
+
diff --git a/src/ext/siphash.h b/src/ext/siphash.h
new file mode 100644
index 000000000..d9b34b898
--- /dev/null
+++ b/src/ext/siphash.h
@@ -0,0 +1,13 @@
+#ifndef SIPHASH_H
+#define SIPHASH_H
+
+struct sipkey {
+ uint64_t k0;
+ uint64_t k1;
+};
+uint64_t siphash24(const void *src, unsigned long src_sz, const struct sipkey *key);
+
+void siphash_set_global_key(const struct sipkey *key);
+uint64_t siphash24g(const void *src, unsigned long src_sz);
+
+#endif
diff --git a/src/common/strlcat.c b/src/ext/strlcat.c
index 316733bcc..316733bcc 100644
--- a/src/common/strlcat.c
+++ b/src/ext/strlcat.c
diff --git a/src/common/strlcpy.c b/src/ext/strlcpy.c
index 9fc47903a..9fc47903a 100644
--- a/src/common/strlcpy.c
+++ b/src/ext/strlcpy.c
diff --git a/src/test/tinytest.c b/src/ext/tinytest.c
index 4d9afacce..cc054ad34 100644
--- a/src/test/tinytest.c
+++ b/src/ext/tinytest.c
@@ -31,6 +31,8 @@
#include <string.h>
#include <assert.h>
+#ifndef NO_FORKING
+
#ifdef _WIN32
#include <windows.h>
#else
@@ -39,6 +41,17 @@
#include <unistd.h>
#endif
+#if defined(__APPLE__) && defined(__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__)
+#if (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060 && \
+ __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070)
+/* Workaround for a stupid bug in OSX 10.6 */
+#define FORK_BREAKS_GCOV
+#include <vproc.h>
+#endif
+#endif
+
+#endif /* !NO_FORKING */
+
#ifndef __GNUC__
#define __attribute__(x)
#endif
@@ -58,6 +71,8 @@ static int opt_nofork = 0; /**< Suppress calls to fork() for debugging. */
static int opt_verbosity = 1; /**< -==quiet,0==terse,1==normal,2==verbose */
const char *verbosity_flag = "";
+const struct testlist_alias_t *cfg_aliases=NULL;
+
enum outcome { SKIP=2, OK=1, FAIL=0 };
static enum outcome cur_test_outcome = 0;
const char *cur_test_prefix = NULL; /**< prefix of the current test group */
@@ -71,6 +86,7 @@ static char commandname[MAX_PATH+1];
static void usage(struct testgroup_t *groups, int list_groups)
__attribute__((noreturn));
+static int process_test_option(struct testgroup_t *groups, const char *test);
static enum outcome
testcase_run_bare_(const struct testcase_t *testcase)
@@ -99,6 +115,8 @@ testcase_run_bare_(const struct testcase_t *testcase)
#define MAGIC_EXITCODE 42
+#ifndef NO_FORKING
+
static enum outcome
testcase_run_forked_(const struct testgroup_t *group,
const struct testcase_t *testcase)
@@ -160,6 +178,9 @@ testcase_run_forked_(const struct testgroup_t *group,
if (opt_verbosity>0)
printf("[forking] ");
pid = fork();
+#ifdef FORK_BREAKS_GCOV
+ vproc_transaction_begin(0);
+#endif
if (!pid) {
/* child. */
int test_r, write_r;
@@ -196,16 +217,19 @@ testcase_run_forked_(const struct testgroup_t *group,
#endif
}
+#endif /* !NO_FORKING */
+
int
testcase_run_one(const struct testgroup_t *group,
const struct testcase_t *testcase)
{
enum outcome outcome;
- if (testcase->flags & TT_SKIP) {
+ if (testcase->flags & (TT_SKIP|TT_OFF_BY_DEFAULT)) {
if (opt_verbosity>0)
- printf("%s%s: SKIPPED\n",
- group->prefix, testcase->name);
+ printf("%s%s: %s\n",
+ group->prefix, testcase->name,
+ (testcase->flags & TT_SKIP) ? "SKIPPED" : "DISABLED");
++n_skipped;
return SKIP;
}
@@ -218,9 +242,13 @@ testcase_run_one(const struct testgroup_t *group,
cur_test_name = testcase->name;
}
+#ifndef NO_FORKING
if ((testcase->flags & TT_FORK) && !(opt_forked||opt_nofork)) {
outcome = testcase_run_forked_(group, testcase);
} else {
+#else
+ {
+#endif
outcome = testcase_run_bare_(testcase);
}
@@ -247,7 +275,7 @@ testcase_run_one(const struct testgroup_t *group,
}
int
-tinytest_set_flag_(struct testgroup_t *groups, const char *arg, unsigned long flag)
+tinytest_set_flag_(struct testgroup_t *groups, const char *arg, int set, unsigned long flag)
{
int i, j;
size_t length = LONGEST_TEST_NAME;
@@ -257,12 +285,23 @@ tinytest_set_flag_(struct testgroup_t *groups, const char *arg, unsigned long fl
length = strstr(arg,"..")-arg;
for (i=0; groups[i].prefix; ++i) {
for (j=0; groups[i].cases[j].name; ++j) {
+ struct testcase_t *testcase = &groups[i].cases[j];
snprintf(fullname, sizeof(fullname), "%s%s",
- groups[i].prefix, groups[i].cases[j].name);
- if (!flag) /* Hack! */
- printf(" %s\n", fullname);
+ groups[i].prefix, testcase->name);
+ if (!flag) { /* Hack! */
+ printf(" %s", fullname);
+ if (testcase->flags & TT_OFF_BY_DEFAULT)
+ puts(" (Off by default)");
+ else if (testcase->flags & TT_SKIP)
+ puts(" (DISABLED)");
+ else
+ puts("");
+ }
if (!strncmp(fullname, arg, length)) {
- groups[i].cases[j].flags |= flag;
+ if (set)
+ testcase->flags |= flag;
+ else
+ testcase->flags &= ~flag;
++found;
}
}
@@ -275,15 +314,69 @@ usage(struct testgroup_t *groups, int list_groups)
{
puts("Options are: [--verbose|--quiet|--terse] [--no-fork]");
puts(" Specify tests by name, or using a prefix ending with '..'");
- puts(" To skip a test, list give its name prefixed with a colon.");
+ puts(" To skip a test, prefix its name with a colon.");
+ puts(" To enable a disabled test, prefix its name with a plus.");
puts(" Use --list-tests for a list of tests.");
if (list_groups) {
puts("Known tests are:");
- tinytest_set_flag_(groups, "..", 0);
+ tinytest_set_flag_(groups, "..", 1, 0);
}
exit(0);
}
+static int
+process_test_alias(struct testgroup_t *groups, const char *test)
+{
+ int i, j, n, r;
+ for (i=0; cfg_aliases && cfg_aliases[i].name; ++i) {
+ if (!strcmp(cfg_aliases[i].name, test)) {
+ n = 0;
+ for (j = 0; cfg_aliases[i].tests[j]; ++j) {
+ r = process_test_option(groups, cfg_aliases[i].tests[j]);
+ if (r<0)
+ return -1;
+ n += r;
+ }
+ return n;
+ }
+ }
+ printf("No such test alias as @%s!",test);
+ return -1;
+}
+
+static int
+process_test_option(struct testgroup_t *groups, const char *test)
+{
+ int flag = TT_ENABLED_;
+ int n = 0;
+ if (test[0] == '@') {
+ return process_test_alias(groups, test + 1);
+ } else if (test[0] == ':') {
+ ++test;
+ flag = TT_SKIP;
+ } else if (test[0] == '+') {
+ ++test;
+ ++n;
+ if (!tinytest_set_flag_(groups, test, 0, TT_OFF_BY_DEFAULT)) {
+ printf("No such test as %s!\n", test);
+ return -1;
+ }
+ } else {
+ ++n;
+ }
+ if (!tinytest_set_flag_(groups, test, 1, flag)) {
+ printf("No such test as %s!\n", test);
+ return -1;
+ }
+ return n;
+}
+
+void
+tinytest_set_aliases(const struct testlist_alias_t *aliases)
+{
+ cfg_aliases = aliases;
+}
+
int
tinytest_main(int c, const char **v, struct testgroup_t *groups)
{
@@ -321,24 +414,18 @@ tinytest_main(int c, const char **v, struct testgroup_t *groups)
return -1;
}
} else {
- const char *test = v[i];
- int flag = TT_ENABLED_;
- if (test[0] == ':') {
- ++test;
- flag = TT_SKIP;
- } else {
- ++n;
- }
- if (!tinytest_set_flag_(groups, test, flag)) {
- printf("No such test as %s!\n", v[i]);
+ int r = process_test_option(groups, v[i]);
+ if (r<0)
return -1;
- }
+ n += r;
}
}
if (!n)
- tinytest_set_flag_(groups, "..", TT_ENABLED_);
+ tinytest_set_flag_(groups, "..", 1, TT_ENABLED_);
+#ifdef _IONBF
setvbuf(stdout, NULL, _IONBF, 0);
+#endif
++in_tinytest_main;
for (i=0; groups[i].prefix; ++i)
@@ -385,3 +472,29 @@ tinytest_set_test_skipped_(void)
cur_test_outcome = SKIP;
}
+char *
+tinytest_format_hex_(const void *val_, unsigned long len)
+{
+ const unsigned char *val = val_;
+ char *result, *cp;
+ size_t i;
+ int ellipses = 0;
+
+ if (!val)
+ return strdup("null");
+ if (len > 1024) {
+ ellipses = 3;
+ len = 1024;
+ }
+ if (!(result = malloc(len*2+4)))
+ return strdup("<allocation failure>");
+ cp = result;
+ for (i=0;i<len;++i) {
+ *cp++ = "0123456789ABCDEF"[val[i] >> 4];
+ *cp++ = "0123456789ABCDEF"[val[i] & 0x0f];
+ }
+ while (ellipses--)
+ *cp++ = '.';
+ *cp = 0;
+ return result;
+}
diff --git a/src/test/tinytest.h b/src/ext/tinytest.h
index bcac9f079..ed07b26bc 100644
--- a/src/test/tinytest.h
+++ b/src/ext/tinytest.h
@@ -32,8 +32,10 @@
#define TT_SKIP (1<<1)
/** Internal runtime flag for a test we've decided to run. */
#define TT_ENABLED_ (1<<2)
+/** Flag for a test that's off by default. */
+#define TT_OFF_BY_DEFAULT (1<<3)
/** If you add your own flags, make them start at this point. */
-#define TT_FIRST_USER_FLAG (1<<3)
+#define TT_FIRST_USER_FLAG (1<<4)
typedef void (*testcase_fn)(void *);
@@ -64,6 +66,12 @@ struct testgroup_t {
};
#define END_OF_GROUPS { NULL, NULL}
+struct testlist_alias_t {
+ const char *name;
+ const char **tests;
+};
+#define END_OF_ALIASES { NULL, NULL }
+
/** Implementation: called from a test to indicate failure, before logging. */
void tinytest_set_test_failed_(void);
/** Implementation: called from a test to indicate that we're skipping. */
@@ -72,14 +80,19 @@ void tinytest_set_test_skipped_(void);
int tinytest_get_verbosity_(void);
/** Implementation: Set a flag on tests matching a name; returns number
* of tests that matched. */
-int tinytest_set_flag_(struct testgroup_t *, const char *, unsigned long);
+int tinytest_set_flag_(struct testgroup_t *, const char *, int set, unsigned long);
+/** Implementation: Put a chunk of memory into hex. */
+char *tinytest_format_hex_(const void *, unsigned long);
/** Set all tests in 'groups' matching the name 'named' to be skipped. */
#define tinytest_skip(groups, named) \
- tinytest_set_flag_(groups, named, TT_SKIP)
+ tinytest_set_flag_(groups, named, 1, TT_SKIP)
/** Run a single testcase in a single group. */
int testcase_run_one(const struct testgroup_t *,const struct testcase_t *);
+
+void tinytest_set_aliases(const struct testlist_alias_t *aliases);
+
/** Run a set of testcases from an END_OF_GROUPS-terminated array of groups,
as selected from the command line. */
int tinytest_main(int argc, const char **argv, struct testgroup_t *groups);
diff --git a/src/test/tinytest_demo.c b/src/ext/tinytest_demo.c
index be95ce4c1..634e112cb 100644
--- a/src/test/tinytest_demo.c
+++ b/src/ext/tinytest_demo.c
@@ -35,6 +35,13 @@
#include <stdlib.h>
#include <string.h>
#include <errno.h>
+#include <time.h>
+
+#ifdef _WIN32
+#include <windows.h>
+#else
+#include <unistd.h>
+#endif
/* ============================================================ */
@@ -148,6 +155,10 @@ test_memcpy(void *ptr)
memcpy(db->buffer2, db->buffer1, sizeof(db->buffer1));
tt_str_op(db->buffer1, ==, db->buffer2);
+ /* tt_mem_op() does a memcmp, as opposed to the strcmp in tt_str_op() */
+ db->buffer2[100] = 3; /* Make the buffers unequal */
+ tt_mem_op(db->buffer1, <, db->buffer2, sizeof(db->buffer1));
+
/* Now we've allocated memory that's referenced by a local variable.
The end block of the function will clean it up. */
mem = strdup("Hello world.");
@@ -162,6 +173,27 @@ test_memcpy(void *ptr)
free(mem);
}
+void
+test_timeout(void *ptr)
+{
+ time_t t1, t2;
+ (void)ptr;
+ t1 = time(NULL);
+#ifdef _WIN32
+ Sleep(5000);
+#else
+ sleep(5);
+#endif
+ t2 = time(NULL);
+
+ tt_int_op(t2-t1, >=, 4);
+
+ tt_int_op(t2-t1, <=, 6);
+
+ end:
+ ;
+}
+
/* ============================================================ */
/* Now we need to make sure that our tests get invoked. First, you take
@@ -178,6 +210,10 @@ struct testcase_t demo_tests[] = {
its environment. */
{ "memcpy", test_memcpy, TT_FORK, &data_buffer_setup },
+ /* This flag is off-by-default, since it takes a while to run. You
+ * can enable it manually by passing +demo/timeout at the command line.*/
+ { "timeout", test_timeout, TT_OFF_BY_DEFAULT },
+
/* The array has to end with END_OF_TESTCASES. */
END_OF_TESTCASES
};
@@ -192,6 +228,18 @@ struct testgroup_t groups[] = {
END_OF_GROUPS
};
+/* We can also define test aliases. These can be used for types of tests that
+ * cut across groups. */
+const char *alltests[] = { "+..", NULL };
+const char *slowtests[] = { "+demo/timeout", NULL };
+struct testlist_alias_t aliases[] = {
+
+ { "ALL", alltests },
+ { "SLOW", slowtests },
+
+ END_OF_ALIASES
+};
+
int
main(int c, const char **v)
@@ -211,5 +259,6 @@ main(int c, const char **v)
"tinytest-demo" and "tinytest-demo .." mean the same thing.
*/
+ tinytest_set_aliases(aliases);
return tinytest_main(c, v, groups);
}
diff --git a/src/test/tinytest_macros.h b/src/ext/tinytest_macros.h
index 9ff69b1d5..c3728d1fd 100644
--- a/src/test/tinytest_macros.h
+++ b/src/ext/tinytest_macros.h
@@ -113,8 +113,8 @@
#define tt_assert_test_fmt_type(a,b,str_test,type,test,printf_type,printf_fmt, \
setup_block,cleanup_block,die_on_fail) \
TT_STMT_BEGIN \
- type val1_ = (type)(a); \
- type val2_ = (type)(b); \
+ type val1_ = (a); \
+ type val2_ = (b); \
int tt_status_ = (test); \
if (!tt_status_ || tinytest_get_verbosity_()>1) { \
printf_type print_; \
@@ -144,6 +144,10 @@
tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
{print_=value_;},{},die_on_fail)
+#define tt_assert_test_type_opt(a,b,str_test,type,test,fmt,die_on_fail) \
+ tt_assert_test_fmt_type(a,b,str_test,type,test,type,fmt, \
+ {print_=value_?value_:"<NULL>";},{},die_on_fail)
+
/* Helper: assert that a op b, when cast to type. Format the values with
* printf format fmt on failure. */
#define tt_assert_op_type(a,op,b,type,fmt) \
@@ -159,12 +163,23 @@
(val1_ op val2_),"%lu",TT_EXIT_TEST_FUNCTION)
#define tt_ptr_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
+ tt_assert_test_type(a,b,#a" "#op" "#b,const void*, \
(val1_ op val2_),"%p",TT_EXIT_TEST_FUNCTION)
#define tt_str_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,const char *, \
- (strcmp(val1_,val2_) op 0),"<%s>",TT_EXIT_TEST_FUNCTION)
+ tt_assert_test_type_opt(a,b,#a" "#op" "#b,const char *, \
+ (val1_ && val2_ && strcmp(val1_,val2_) op 0),"<%s>", \
+ TT_EXIT_TEST_FUNCTION)
+
+#define tt_mem_op(expr1, op, expr2, len) \
+ tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2, \
+ const void *, \
+ (val1_ && val2_ && memcmp(val1_, val2_, len) op 0), \
+ char *, "%s", \
+ { print_ = tinytest_format_hex_(value_, (len)); }, \
+ { if (print_) free(print_); }, \
+ TT_EXIT_TEST_FUNCTION \
+ );
#define tt_want_int_op(a,op,b) \
tt_assert_test_type(a,b,#a" "#op" "#b,long,(val1_ op val2_),"%ld",(void)0)
@@ -174,7 +189,7 @@
(val1_ op val2_),"%lu",(void)0)
#define tt_want_ptr_op(a,op,b) \
- tt_assert_test_type(a,b,#a" "#op" "#b,void*, \
+ tt_assert_test_type(a,b,#a" "#op" "#b,const void*, \
(val1_ op val2_),"%p",(void)0)
#define tt_want_str_op(a,op,b) \
diff --git a/src/ext/tor_queue.h b/src/ext/tor_queue.h
new file mode 100644
index 000000000..f05e48c18
--- /dev/null
+++ b/src/ext/tor_queue.h
@@ -0,0 +1,568 @@
+/* $OpenBSD: queue.h,v 1.36 2012/04/11 13:29:14 naddy Exp $ */
+/* $NetBSD: queue.h,v 1.11 1996/05/16 05:17:14 mycroft Exp $ */
+
+/*
+ * Copyright (c) 1991, 1993
+ * The Regents of the University of California. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * @(#)queue.h 8.5 (Berkeley) 8/20/94
+ */
+
+#ifndef TOR_QUEUE_H_
+#define TOR_QUEUE_H_
+
+/*
+ * This file defines five types of data structures: singly-linked lists,
+ * lists, simple queues, tail queues, and circular queues.
+ *
+ *
+ * A singly-linked list is headed by a single forward pointer. The elements
+ * are singly linked for minimum space and pointer manipulation overhead at
+ * the expense of O(n) removal for arbitrary elements. New elements can be
+ * added to the list after an existing element or at the head of the list.
+ * Elements being removed from the head of the list should use the explicit
+ * macro for this purpose for optimum efficiency. A singly-linked list may
+ * only be traversed in the forward direction. Singly-linked lists are ideal
+ * for applications with large datasets and few or no removals or for
+ * implementing a LIFO queue.
+ *
+ * A list is headed by a single forward pointer (or an array of forward
+ * pointers for a hash table header). The elements are doubly linked
+ * so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before
+ * or after an existing element or at the head of the list. A list
+ * may only be traversed in the forward direction.
+ *
+ * A simple queue is headed by a pair of pointers, one the head of the
+ * list and the other to the tail of the list. The elements are singly
+ * linked to save space, so elements can only be removed from the
+ * head of the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the
+ * list. A simple queue may only be traversed in the forward direction.
+ *
+ * A tail queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or
+ * after an existing element, at the head of the list, or at the end of
+ * the list. A tail queue may be traversed in either direction.
+ *
+ * A circle queue is headed by a pair of pointers, one to the head of the
+ * list and the other to the tail of the list. The elements are doubly
+ * linked so that an arbitrary element can be removed without a need to
+ * traverse the list. New elements can be added to the list before or after
+ * an existing element, at the head of the list, or at the end of the list.
+ * A circle queue may be traversed in either direction, but has a more
+ * complex end of list detection.
+ *
+ * For details on the use of these macros, see the queue(3) manual page.
+ */
+
+#if defined(QUEUE_MACRO_DEBUG) || (defined(_KERNEL) && defined(DIAGNOSTIC))
+#define TOR_Q_INVALIDATE_(a) (a) = ((void *)-1)
+#else
+#define TOR_Q_INVALIDATE_(a)
+#endif
+
+/*
+ * Singly-linked List definitions.
+ */
+#define TOR_SLIST_HEAD(name, type) \
+struct name { \
+ struct type *slh_first; /* first element */ \
+}
+
+#define TOR_SLIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define TOR_SLIST_ENTRY(type) \
+struct { \
+ struct type *sle_next; /* next element */ \
+}
+
+/*
+ * Singly-linked List access methods.
+ */
+#define TOR_SLIST_FIRST(head) ((head)->slh_first)
+#define TOR_SLIST_END(head) NULL
+#define TOR_SLIST_EMPTY(head) (SLIST_FIRST(head) == TOR_SLIST_END(head))
+#define TOR_SLIST_NEXT(elm, field) ((elm)->field.sle_next)
+
+#define TOR_SLIST_FOREACH(var, head, field) \
+ for((var) = TOR_SLIST_FIRST(head); \
+ (var) != TOR_SLIST_END(head); \
+ (var) = TOR_SLIST_NEXT(var, field))
+
+#define TOR_SLIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_SLIST_FIRST(head); \
+ (var) && ((tvar) = TOR_SLIST_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Singly-linked List functions.
+ */
+#define TOR_SLIST_INIT(head) { \
+ TOR_SLIST_FIRST(head) = TOR_SLIST_END(head); \
+}
+
+#define TOR_SLIST_INSERT_AFTER(slistelm, elm, field) do { \
+ (elm)->field.sle_next = (slistelm)->field.sle_next; \
+ (slistelm)->field.sle_next = (elm); \
+} while (0)
+
+#define TOR_SLIST_INSERT_HEAD(head, elm, field) do { \
+ (elm)->field.sle_next = (head)->slh_first; \
+ (head)->slh_first = (elm); \
+} while (0)
+
+#define TOR_SLIST_REMOVE_AFTER(elm, field) do { \
+ (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \
+} while (0)
+
+#define TOR_SLIST_REMOVE_HEAD(head, field) do { \
+ (head)->slh_first = (head)->slh_first->field.sle_next; \
+} while (0)
+
+#define TOR_SLIST_REMOVE(head, elm, type, field) do { \
+ if ((head)->slh_first == (elm)) { \
+ TOR_SLIST_REMOVE_HEAD((head), field); \
+ } else { \
+ struct type *curelm = (head)->slh_first; \
+ \
+ while (curelm->field.sle_next != (elm)) \
+ curelm = curelm->field.sle_next; \
+ curelm->field.sle_next = \
+ curelm->field.sle_next->field.sle_next; \
+ TOR_Q_INVALIDATE_((elm)->field.sle_next); \
+ } \
+} while (0)
+
+/*
+ * List definitions.
+ */
+#define TOR_LIST_HEAD(name, type) \
+struct name { \
+ struct type *lh_first; /* first element */ \
+}
+
+#define TOR_LIST_HEAD_INITIALIZER(head) \
+ { NULL }
+
+#define TOR_LIST_ENTRY(type) \
+struct { \
+ struct type *le_next; /* next element */ \
+ struct type **le_prev; /* address of previous next element */ \
+}
+
+/*
+ * List access methods
+ */
+#define TOR_LIST_FIRST(head) ((head)->lh_first)
+#define TOR_LIST_END(head) NULL
+#define TOR_LIST_EMPTY(head) (TOR_LIST_FIRST(head) == TOR_LIST_END(head))
+#define TOR_LIST_NEXT(elm, field) ((elm)->field.le_next)
+
+#define TOR_LIST_FOREACH(var, head, field) \
+ for((var) = TOR_LIST_FIRST(head); \
+ (var)!= TOR_LIST_END(head); \
+ (var) = TOR_LIST_NEXT(var, field))
+
+#define TOR_LIST_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_LIST_FIRST(head); \
+ (var) && ((tvar) = TOR_LIST_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * List functions.
+ */
+#define TOR_LIST_INIT(head) do { \
+ TOR_LIST_FIRST(head) = TOR_LIST_END(head); \
+} while (0)
+
+#define TOR_LIST_INSERT_AFTER(listelm, elm, field) do { \
+ if (((elm)->field.le_next = (listelm)->field.le_next) != NULL) \
+ (listelm)->field.le_next->field.le_prev = \
+ &(elm)->field.le_next; \
+ (listelm)->field.le_next = (elm); \
+ (elm)->field.le_prev = &(listelm)->field.le_next; \
+} while (0)
+
+#define TOR_LIST_INSERT_BEFORE(listelm, elm, field) do { \
+ (elm)->field.le_prev = (listelm)->field.le_prev; \
+ (elm)->field.le_next = (listelm); \
+ *(listelm)->field.le_prev = (elm); \
+ (listelm)->field.le_prev = &(elm)->field.le_next; \
+} while (0)
+
+#define TOR_LIST_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.le_next = (head)->lh_first) != NULL) \
+ (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
+ (head)->lh_first = (elm); \
+ (elm)->field.le_prev = &(head)->lh_first; \
+} while (0)
+
+#define TOR_LIST_REMOVE(elm, field) do { \
+ if ((elm)->field.le_next != NULL) \
+ (elm)->field.le_next->field.le_prev = \
+ (elm)->field.le_prev; \
+ *(elm)->field.le_prev = (elm)->field.le_next; \
+ TOR_Q_INVALIDATE_((elm)->field.le_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.le_next); \
+} while (0)
+
+#define TOR_LIST_REPLACE(elm, elm2, field) do { \
+ if (((elm2)->field.le_next = (elm)->field.le_next) != NULL) \
+ (elm2)->field.le_next->field.le_prev = \
+ &(elm2)->field.le_next; \
+ (elm2)->field.le_prev = (elm)->field.le_prev; \
+ *(elm2)->field.le_prev = (elm2); \
+ TOR_Q_INVALIDATE_((elm)->field.le_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.le_next); \
+} while (0)
+
+/*
+ * Simple queue definitions.
+ */
+#define TOR_SIMPLEQ_HEAD(name, type) \
+struct name { \
+ struct type *sqh_first; /* first element */ \
+ struct type **sqh_last; /* addr of last next element */ \
+}
+
+#define TOR_SIMPLEQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).sqh_first }
+
+#define TOR_SIMPLEQ_ENTRY(type) \
+struct { \
+ struct type *sqe_next; /* next element */ \
+}
+
+/*
+ * Simple queue access methods.
+ */
+#define TOR_SIMPLEQ_FIRST(head) ((head)->sqh_first)
+#define TOR_SIMPLEQ_END(head) NULL
+#define TOR_SIMPLEQ_EMPTY(head) (TOR_SIMPLEQ_FIRST(head) == TOR_SIMPLEQ_END(head))
+#define TOR_SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
+
+#define TOR_SIMPLEQ_FOREACH(var, head, field) \
+ for((var) = TOR_SIMPLEQ_FIRST(head); \
+ (var) != TOR_SIMPLEQ_END(head); \
+ (var) = TOR_SIMPLEQ_NEXT(var, field))
+
+#define TOR_SIMPLEQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_SIMPLEQ_FIRST(head); \
+ (var) && ((tvar) = TOR_SIMPLEQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Simple queue functions.
+ */
+#define TOR_SIMPLEQ_INIT(head) do { \
+ (head)->sqh_first = NULL; \
+ (head)->sqh_last = &(head)->sqh_first; \
+} while (0)
+
+#define TOR_SIMPLEQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+ (head)->sqh_first = (elm); \
+} while (0)
+
+#define TOR_SIMPLEQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.sqe_next = NULL; \
+ *(head)->sqh_last = (elm); \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+} while (0)
+
+#define TOR_SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+ (listelm)->field.sqe_next = (elm); \
+} while (0)
+
+#define TOR_SIMPLEQ_REMOVE_HEAD(head, field) do { \
+ if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
+ (head)->sqh_last = &(head)->sqh_first; \
+} while (0)
+
+#define TOR_SIMPLEQ_REMOVE_AFTER(head, elm, field) do { \
+ if (((elm)->field.sqe_next = (elm)->field.sqe_next->field.sqe_next) \
+ == NULL) \
+ (head)->sqh_last = &(elm)->field.sqe_next; \
+} while (0)
+
+/*
+ * Tail queue definitions.
+ */
+#define TOR_TAILQ_HEAD(name, type) \
+struct name { \
+ struct type *tqh_first; /* first element */ \
+ struct type **tqh_last; /* addr of last next element */ \
+}
+
+#define TOR_TAILQ_HEAD_INITIALIZER(head) \
+ { NULL, &(head).tqh_first }
+
+#define TOR_TAILQ_ENTRY(type) \
+struct { \
+ struct type *tqe_next; /* next element */ \
+ struct type **tqe_prev; /* address of previous next element */ \
+}
+
+/*
+ * tail queue access methods
+ */
+#define TOR_TAILQ_FIRST(head) ((head)->tqh_first)
+#define TOR_TAILQ_END(head) NULL
+#define TOR_TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+#define TOR_TAILQ_LAST(head, headname) \
+ (*(((struct headname *)((head)->tqh_last))->tqh_last))
+/* XXX */
+#define TOR_TAILQ_PREV(elm, headname, field) \
+ (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+#define TOR_TAILQ_EMPTY(head) \
+ (TOR_TAILQ_FIRST(head) == TOR_TAILQ_END(head))
+
+#define TOR_TAILQ_FOREACH(var, head, field) \
+ for((var) = TOR_TAILQ_FIRST(head); \
+ (var) != TOR_TAILQ_END(head); \
+ (var) = TOR_TAILQ_NEXT(var, field))
+
+#define TOR_TAILQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_TAILQ_FIRST(head); \
+ (var) != TOR_TAILQ_END(head) && \
+ ((tvar) = TOR_TAILQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+
+#define TOR_TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+ for((var) = TOR_TAILQ_LAST(head, headname); \
+ (var) != TOR_TAILQ_END(head); \
+ (var) = TOR_TAILQ_PREV(var, headname, field))
+
+#define TOR_TAILQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
+ for ((var) = TOR_TAILQ_LAST(head, headname); \
+ (var) != TOR_TAILQ_END(head) && \
+ ((tvar) = TOR_TAILQ_PREV(var, headname, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Tail queue functions.
+ */
+#define TOR_TAILQ_INIT(head) do { \
+ (head)->tqh_first = NULL; \
+ (head)->tqh_last = &(head)->tqh_first; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_HEAD(head, elm, field) do { \
+ if (((elm)->field.tqe_next = (head)->tqh_first) != NULL) \
+ (head)->tqh_first->field.tqe_prev = \
+ &(elm)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+ (head)->tqh_first = (elm); \
+ (elm)->field.tqe_prev = &(head)->tqh_first; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.tqe_next = NULL; \
+ (elm)->field.tqe_prev = (head)->tqh_last; \
+ *(head)->tqh_last = (elm); \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
+ (elm)->field.tqe_next->field.tqe_prev = \
+ &(elm)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm)->field.tqe_next; \
+ (listelm)->field.tqe_next = (elm); \
+ (elm)->field.tqe_prev = &(listelm)->field.tqe_next; \
+} while (0)
+
+#define TOR_TAILQ_INSERT_BEFORE(listelm, elm, field) do { \
+ (elm)->field.tqe_prev = (listelm)->field.tqe_prev; \
+ (elm)->field.tqe_next = (listelm); \
+ *(listelm)->field.tqe_prev = (elm); \
+ (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
+} while (0)
+
+#define TOR_TAILQ_REMOVE(head, elm, field) do { \
+ if (((elm)->field.tqe_next) != NULL) \
+ (elm)->field.tqe_next->field.tqe_prev = \
+ (elm)->field.tqe_prev; \
+ else \
+ (head)->tqh_last = (elm)->field.tqe_prev; \
+ *(elm)->field.tqe_prev = (elm)->field.tqe_next; \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_next); \
+} while (0)
+
+#define TOR_TAILQ_REPLACE(head, elm, elm2, field) do { \
+ if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL) \
+ (elm2)->field.tqe_next->field.tqe_prev = \
+ &(elm2)->field.tqe_next; \
+ else \
+ (head)->tqh_last = &(elm2)->field.tqe_next; \
+ (elm2)->field.tqe_prev = (elm)->field.tqe_prev; \
+ *(elm2)->field.tqe_prev = (elm2); \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.tqe_next); \
+} while (0)
+
+/*
+ * Circular queue definitions.
+ */
+#define TOR_CIRCLEQ_HEAD(name, type) \
+struct name { \
+ struct type *cqh_first; /* first element */ \
+ struct type *cqh_last; /* last element */ \
+}
+
+#define TOR_CIRCLEQ_HEAD_INITIALIZER(head) \
+ { TOR_CIRCLEQ_END(&head), TOR_CIRCLEQ_END(&head) }
+
+#define TOR_CIRCLEQ_ENTRY(type) \
+struct { \
+ struct type *cqe_next; /* next element */ \
+ struct type *cqe_prev; /* previous element */ \
+}
+
+/*
+ * Circular queue access methods
+ */
+#define TOR_CIRCLEQ_FIRST(head) ((head)->cqh_first)
+#define TOR_CIRCLEQ_LAST(head) ((head)->cqh_last)
+#define TOR_CIRCLEQ_END(head) ((void *)(head))
+#define TOR_CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)
+#define TOR_CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)
+#define TOR_CIRCLEQ_EMPTY(head) \
+ (TOR_CIRCLEQ_FIRST(head) == TOR_CIRCLEQ_END(head))
+
+#define TOR_CIRCLEQ_FOREACH(var, head, field) \
+ for((var) = TOR_CIRCLEQ_FIRST(head); \
+ (var) != TOR_CIRCLEQ_END(head); \
+ (var) = TOR_CIRCLEQ_NEXT(var, field))
+
+#define TOR_CIRCLEQ_FOREACH_SAFE(var, head, field, tvar) \
+ for ((var) = TOR_CIRCLEQ_FIRST(head); \
+ (var) != TOR_CIRCLEQ_END(head) && \
+ ((tvar) = TOR_CIRCLEQ_NEXT(var, field), 1); \
+ (var) = (tvar))
+
+#define TOR_CIRCLEQ_FOREACH_REVERSE(var, head, field) \
+ for((var) = TOR_CIRCLEQ_LAST(head); \
+ (var) != TOR_CIRCLEQ_END(head); \
+ (var) = TOR_CIRCLEQ_PREV(var, field))
+
+#define TOR_CIRCLEQ_FOREACH_REVERSE_SAFE(var, head, headname, field, tvar) \
+ for ((var) = TOR_CIRCLEQ_LAST(head, headname); \
+ (var) != TOR_CIRCLEQ_END(head) && \
+ ((tvar) = TOR_CIRCLEQ_PREV(var, headname, field), 1); \
+ (var) = (tvar))
+
+/*
+ * Circular queue functions.
+ */
+#define TOR_CIRCLEQ_INIT(head) do { \
+ (head)->cqh_first = TOR_CIRCLEQ_END(head); \
+ (head)->cqh_last = TOR_CIRCLEQ_END(head); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do { \
+ (elm)->field.cqe_next = (listelm)->field.cqe_next; \
+ (elm)->field.cqe_prev = (listelm); \
+ if ((listelm)->field.cqe_next == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_last = (elm); \
+ else \
+ (listelm)->field.cqe_next->field.cqe_prev = (elm); \
+ (listelm)->field.cqe_next = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do { \
+ (elm)->field.cqe_next = (listelm); \
+ (elm)->field.cqe_prev = (listelm)->field.cqe_prev; \
+ if ((listelm)->field.cqe_prev == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_first = (elm); \
+ else \
+ (listelm)->field.cqe_prev->field.cqe_next = (elm); \
+ (listelm)->field.cqe_prev = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_HEAD(head, elm, field) do { \
+ (elm)->field.cqe_next = (head)->cqh_first; \
+ (elm)->field.cqe_prev = TOR_CIRCLEQ_END(head); \
+ if ((head)->cqh_last == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_last = (elm); \
+ else \
+ (head)->cqh_first->field.cqe_prev = (elm); \
+ (head)->cqh_first = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_INSERT_TAIL(head, elm, field) do { \
+ (elm)->field.cqe_next = TOR_CIRCLEQ_END(head); \
+ (elm)->field.cqe_prev = (head)->cqh_last; \
+ if ((head)->cqh_first == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_first = (elm); \
+ else \
+ (head)->cqh_last->field.cqe_next = (elm); \
+ (head)->cqh_last = (elm); \
+} while (0)
+
+#define TOR_CIRCLEQ_REMOVE(head, elm, field) do { \
+ if ((elm)->field.cqe_next == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_last = (elm)->field.cqe_prev; \
+ else \
+ (elm)->field.cqe_next->field.cqe_prev = \
+ (elm)->field.cqe_prev; \
+ if ((elm)->field.cqe_prev == TOR_CIRCLEQ_END(head)) \
+ (head)->cqh_first = (elm)->field.cqe_next; \
+ else \
+ (elm)->field.cqe_prev->field.cqe_next = \
+ (elm)->field.cqe_next; \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_next); \
+} while (0)
+
+#define TOR_CIRCLEQ_REPLACE(head, elm, elm2, field) do { \
+ if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == \
+ TOR_CIRCLEQ_END(head)) \
+ (head).cqh_last = (elm2); \
+ else \
+ (elm2)->field.cqe_next->field.cqe_prev = (elm2); \
+ if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == \
+ TOR_CIRCLEQ_END(head)) \
+ (head).cqh_first = (elm2); \
+ else \
+ (elm2)->field.cqe_prev->field.cqe_next = (elm2); \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_prev); \
+ TOR_Q_INVALIDATE_((elm)->field.cqe_next); \
+} while (0)
+
+#endif /* !_SYS_QUEUE_H_ */
diff --git a/src/ext/tor_queue.txt b/src/ext/tor_queue.txt
new file mode 100644
index 000000000..f284e7192
--- /dev/null
+++ b/src/ext/tor_queue.txt
@@ -0,0 +1,883 @@
+Below follows the manpage for tor_queue.h, as included with OpenBSD's
+sys/queue.h. License follows at the end of the file.
+
+======================================================================
+QUEUE(3) OpenBSD Programmer's Manual QUEUE(3)
+
+NAME
+ SLIST_ENTRY, SLIST_HEAD, SLIST_HEAD_INITIALIZER, SLIST_FIRST, SLIST_NEXT,
+ SLIST_END, SLIST_EMPTY, SLIST_FOREACH, SLIST_FOREACH_SAFE, SLIST_INIT,
+ SLIST_INSERT_AFTER, SLIST_INSERT_HEAD, SLIST_REMOVE_AFTER,
+ SLIST_REMOVE_HEAD, SLIST_REMOVE, LIST_ENTRY, LIST_HEAD,
+ LIST_HEAD_INITIALIZER, LIST_FIRST, LIST_NEXT, LIST_END, LIST_EMPTY,
+ LIST_FOREACH, LIST_FOREACH_SAFE, LIST_INIT, LIST_INSERT_AFTER,
+ LIST_INSERT_BEFORE, LIST_INSERT_HEAD, LIST_REMOVE, LIST_REPLACE,
+ SIMPLEQ_ENTRY, SIMPLEQ_HEAD, SIMPLEQ_HEAD_INITIALIZER, SIMPLEQ_FIRST,
+ SIMPLEQ_NEXT, SIMPLEQ_END, SIMPLEQ_EMPTY, SIMPLEQ_FOREACH,
+ SIMPLEQ_FOREACH_SAFE, SIMPLEQ_INIT, SIMPLEQ_INSERT_AFTER,
+ SIMPLEQ_INSERT_HEAD, SIMPLEQ_INSERT_TAIL, SIMPLEQ_REMOVE_AFTER,
+ SIMPLEQ_REMOVE_HEAD, TAILQ_ENTRY, TAILQ_HEAD, TAILQ_HEAD_INITIALIZER,
+ TAILQ_FIRST, TAILQ_NEXT, TAILQ_END, TAILQ_LAST, TAILQ_PREV, TAILQ_EMPTY,
+ TAILQ_FOREACH, TAILQ_FOREACH_SAFE, TAILQ_FOREACH_REVERSE,
+ TAILQ_FOREACH_REVERSE_SAFE, TAILQ_INIT, TAILQ_INSERT_AFTER,
+ TAILQ_INSERT_BEFORE, TAILQ_INSERT_HEAD, TAILQ_INSERT_TAIL, TAILQ_REMOVE,
+ TAILQ_REPLACE, CIRCLEQ_ENTRY, CIRCLEQ_HEAD, CIRCLEQ_HEAD_INITIALIZER,
+ CIRCLEQ_FIRST, CIRCLEQ_LAST, CIRCLEQ_END, CIRCLEQ_NEXT, CIRCLEQ_PREV,
+ CIRCLEQ_EMPTY, CIRCLEQ_FOREACH, CIRCLEQ_FOREACH_SAFE,
+ CIRCLEQ_FOREACH_REVERSE_SAFE, CIRCLEQ_INIT, CIRCLEQ_INSERT_AFTER,
+ CIRCLEQ_INSERT_BEFORE, CIRCLEQ_INSERT_HEAD, CIRCLEQ_INSERT_TAIL,
+ CIRCLEQ_REMOVE, CIRCLEQ_REPLACE - implementations of singly-linked lists,
+ doubly-linked lists, simple queues, tail queues, and circular queues
+
+SYNOPSIS
+ #include <sys/queue.h>
+
+ SLIST_ENTRY(TYPE);
+
+ SLIST_HEAD(HEADNAME, TYPE);
+
+ SLIST_HEAD_INITIALIZER(SLIST_HEAD head);
+
+ struct TYPE *
+ SLIST_FIRST(SLIST_HEAD *head);
+
+ struct TYPE *
+ SLIST_NEXT(struct TYPE *listelm, SLIST_ENTRY NAME);
+
+ struct TYPE *
+ SLIST_END(SLIST_HEAD *head);
+
+ int
+ SLIST_EMPTY(SLIST_HEAD *head);
+
+ SLIST_FOREACH(VARNAME, SLIST_HEAD *head, SLIST_ENTRY NAME);
+
+ SLIST_FOREACH_SAFE(VARNAME, SLIST_HEAD *head, SLIST_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ SLIST_INIT(SLIST_HEAD *head);
+
+ void
+ SLIST_INSERT_AFTER(struct TYPE *listelm, struct TYPE *elm, SLIST_ENTRY
+ NAME);
+
+ void
+ SLIST_INSERT_HEAD(SLIST_HEAD *head, struct TYPE *elm, SLIST_ENTRY NAME);
+
+ void
+ SLIST_REMOVE_AFTER(struct TYPE *elm, SLIST_ENTRY NAME);
+
+ void
+ SLIST_REMOVE_HEAD(SLIST_HEAD *head, SLIST_ENTRY NAME);
+
+ void
+ SLIST_REMOVE(SLIST_HEAD *head, struct TYPE *elm, TYPE, SLIST_ENTRY NAME);
+
+ LIST_ENTRY(TYPE);
+
+ LIST_HEAD(HEADNAME, TYPE);
+
+ LIST_HEAD_INITIALIZER(LIST_HEAD head);
+
+ struct TYPE *
+ LIST_FIRST(LIST_HEAD *head);
+
+ struct TYPE *
+ LIST_NEXT(struct TYPE *listelm, LIST_ENTRY NAME);
+
+ struct TYPE *
+ LIST_END(LIST_HEAD *head);
+
+ int
+ LIST_EMPTY(LIST_HEAD *head);
+
+ LIST_FOREACH(VARNAME, LIST_HEAD *head, LIST_ENTRY NAME);
+
+ LIST_FOREACH_SAFE(VARNAME, LIST_HEAD *head, LIST_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ LIST_INIT(LIST_HEAD *head);
+
+ void
+ LIST_INSERT_AFTER(struct TYPE *listelm, struct TYPE *elm, LIST_ENTRY
+ NAME);
+
+ void
+ LIST_INSERT_BEFORE(struct TYPE *listelm, struct TYPE *elm, LIST_ENTRY
+ NAME);
+
+ void
+ LIST_INSERT_HEAD(LIST_HEAD *head, struct TYPE *elm, LIST_ENTRY NAME);
+
+ void
+ LIST_REMOVE(struct TYPE *elm, LIST_ENTRY NAME);
+
+ void
+ LIST_REPLACE(struct TYPE *elm, struct TYPE *elm2, LIST_ENTRY NAME);
+
+ SIMPLEQ_ENTRY(TYPE);
+
+ SIMPLEQ_HEAD(HEADNAME, TYPE);
+
+ SIMPLEQ_HEAD_INITIALIZER(SIMPLEQ_HEAD head);
+
+ struct TYPE *
+ SIMPLEQ_FIRST(SIMPLEQ_HEAD *head);
+
+ struct TYPE *
+ SIMPLEQ_NEXT(struct TYPE *listelm, SIMPLEQ_ENTRY NAME);
+
+ struct TYPE *
+ SIMPLEQ_END(SIMPLEQ_HEAD *head);
+
+ int
+ SIMPLEQ_EMPTY(SIMPLEQ_HEAD *head);
+
+ SIMPLEQ_FOREACH(VARNAME, SIMPLEQ_HEAD *head, SIMPLEQ_ENTRY NAME);
+
+ SIMPLEQ_FOREACH_SAFE(VARNAME, SIMPLEQ_HEAD *head, SIMPLEQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ SIMPLEQ_INIT(SIMPLEQ_HEAD *head);
+
+ void
+ SIMPLEQ_INSERT_AFTER(SIMPLEQ_HEAD *head, struct TYPE *listelm, struct
+ TYPE *elm, SIMPLEQ_ENTRY NAME);
+
+ void
+ SIMPLEQ_INSERT_HEAD(SIMPLEQ_HEAD *head, struct TYPE *elm, SIMPLEQ_ENTRY
+ NAME);
+
+ void
+ SIMPLEQ_INSERT_TAIL(SIMPLEQ_HEAD *head, struct TYPE *elm, SIMPLEQ_ENTRY
+ NAME);
+
+ void
+ SIMPLEQ_REMOVE_AFTER(SIMPLEQ_HEAD *head, struct TYPE *elm, SIMPLEQ_ENTRY
+ NAME);
+
+ void
+ SIMPLEQ_REMOVE_HEAD(SIMPLEQ_HEAD *head, SIMPLEQ_ENTRY NAME);
+
+ TAILQ_ENTRY(TYPE);
+
+ TAILQ_HEAD(HEADNAME, TYPE);
+
+ TAILQ_HEAD_INITIALIZER(TAILQ_HEAD head);
+
+ struct TYPE *
+ TAILQ_FIRST(TAILQ_HEAD *head);
+
+ struct TYPE *
+ TAILQ_NEXT(struct TYPE *listelm, TAILQ_ENTRY NAME);
+
+ struct TYPE *
+ TAILQ_END(TAILQ_HEAD *head);
+
+ struct TYPE *
+ TAILQ_LAST(TAILQ_HEAD *head, HEADNAME NAME);
+
+ struct TYPE *
+ TAILQ_PREV(struct TYPE *listelm, HEADNAME NAME, TAILQ_ENTRY NAME);
+
+ int
+ TAILQ_EMPTY(TAILQ_HEAD *head);
+
+ TAILQ_FOREACH(VARNAME, TAILQ_HEAD *head, TAILQ_ENTRY NAME);
+
+ TAILQ_FOREACH_SAFE(VARNAME, TAILQ_HEAD *head, TAILQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ TAILQ_FOREACH_REVERSE(VARNAME, TAILQ_HEAD *head, HEADNAME, TAILQ_ENTRY
+ NAME);
+
+ TAILQ_FOREACH_REVERSE_SAFE(VARNAME, TAILQ_HEAD
+ *head, HEADNAME, TAILQ_ENTRY NAME, TEMP_VARNAME);
+
+ void
+ TAILQ_INIT(TAILQ_HEAD *head);
+
+ void
+ TAILQ_INSERT_AFTER(TAILQ_HEAD *head, struct TYPE *listelm, struct TYPE
+ *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_INSERT_BEFORE(struct TYPE *listelm, struct TYPE *elm, TAILQ_ENTRY
+ NAME);
+
+ void
+ TAILQ_INSERT_HEAD(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_INSERT_TAIL(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_REMOVE(TAILQ_HEAD *head, struct TYPE *elm, TAILQ_ENTRY NAME);
+
+ void
+ TAILQ_REPLACE(TAILQ_HEAD *head, struct TYPE *elm, struct TYPE
+ *elm2, TAILQ_ENTRY NAME);
+
+ CIRCLEQ_ENTRY(TYPE);
+
+ CIRCLEQ_HEAD(HEADNAME, TYPE);
+
+ CIRCLEQ_HEAD_INITIALIZER(CIRCLEQ_HEAD head);
+
+ struct TYPE *
+ CIRCLEQ_FIRST(CIRCLEQ_HEAD *head);
+
+ struct TYPE *
+ CIRCLEQ_LAST(CIRCLEQ_HEAD *head);
+
+ struct TYPE *
+ CIRCLEQ_END(CIRCLEQ_HEAD *head);
+
+ struct TYPE *
+ CIRCLEQ_NEXT(struct TYPE *listelm, CIRCLEQ_ENTRY NAME);
+
+ struct TYPE *
+ CIRCLEQ_PREV(struct TYPE *listelm, CIRCLEQ_ENTRY NAME);
+
+ int
+ CIRCLEQ_EMPTY(CIRCLEQ_HEAD *head);
+
+ CIRCLEQ_FOREACH(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY NAME);
+
+ CIRCLEQ_FOREACH_SAFE(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ CIRCLEQ_FOREACH_REVERSE(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY NAME);
+
+ CIRCLEQ_FOREACH_REVERSE_SAFE(VARNAME, CIRCLEQ_HEAD *head, CIRCLEQ_ENTRY
+ NAME, TEMP_VARNAME);
+
+ void
+ CIRCLEQ_INIT(CIRCLEQ_HEAD *head);
+
+ void
+ CIRCLEQ_INSERT_AFTER(CIRCLEQ_HEAD *head, struct TYPE *listelm, struct
+ TYPE *elm, CIRCLEQ_ENTRY NAME);
+
+ void
+ CIRCLEQ_INSERT_BEFORE(CIRCLEQ_HEAD *head, struct TYPE *listelm, struct
+ TYPE *elm, CIRCLEQ_ENTRY NAME);
+
+ void
+ CIRCLEQ_INSERT_HEAD(CIRCLEQ_HEAD *head, struct TYPE *elm, CIRCLEQ_ENTRY
+ NAME);
+
+ void
+ CIRCLEQ_INSERT_TAIL(CIRCLEQ_HEAD *head, struct TYPE *elm, CIRCLEQ_ENTRY
+ NAME);
+
+ void
+ CIRCLEQ_REMOVE(CIRCLEQ_HEAD *head, struct TYPE *elm, CIRCLEQ_ENTRY NAME);
+
+ void
+ CIRCLEQ_REPLACE(CIRCLEQ_HEAD *head, struct TYPE *elm, struct TYPE
+ *elm2, CIRCLEQ_ENTRY NAME);
+
+DESCRIPTION
+ These macros define and operate on five types of data structures: singly-
+ linked lists, simple queues, lists, tail queues, and circular queues.
+ All five structures support the following functionality:
+
+ 1. Insertion of a new entry at the head of the list.
+ 2. Insertion of a new entry after any element in the list.
+ 3. Removal of an entry from the head of the list.
+ 4. Forward traversal through the list.
+
+ Singly-linked lists are the simplest of the five data structures and
+ support only the above functionality. Singly-linked lists are ideal for
+ applications with large datasets and few or no removals, or for
+ implementing a LIFO queue.
+
+ Simple queues add the following functionality:
+
+ 1. Entries can be added at the end of a list.
+
+ However:
+
+ 1. All list insertions must specify the head of the list.
+ 2. Each head entry requires two pointers rather than one.
+ 3. Code size is about 15% greater and operations run about 20%
+ slower than singly-linked lists.
+
+ Simple queues are ideal for applications with large datasets and few or
+ no removals, or for implementing a FIFO queue.
+
+ All doubly linked types of data structures (lists, tail queues, and
+ circle queues) additionally allow:
+
+ 1. Insertion of a new entry before any element in the list.
+ 2. Removal of any entry in the list.
+
+ However:
+
+ 1. Each element requires two pointers rather than one.
+ 2. Code size and execution time of operations (except for
+ removal) is about twice that of the singly-linked data-
+ structures.
+
+ Lists are the simplest of the doubly linked data structures and support
+ only the above functionality over singly-linked lists.
+
+ Tail queues add the following functionality:
+
+ 1. Entries can be added at the end of a list.
+ 2. They may be traversed backwards, at a cost.
+
+ However:
+
+ 1. All list insertions and removals must specify the head of the
+ list.
+ 2. Each head entry requires two pointers rather than one.
+ 3. Code size is about 15% greater and operations run about 20%
+ slower than singly-linked lists.
+
+ Circular queues add the following functionality:
+
+ 1. Entries can be added at the end of a list.
+ 2. They may be traversed backwards, from tail to head.
+
+ However:
+
+ 1. All list insertions and removals must specify the head of the
+ list.
+ 2. Each head entry requires two pointers rather than one.
+ 3. The termination condition for traversal is more complex.
+ 4. Code size is about 40% greater and operations run about 45%
+ slower than lists.
+
+ In the macro definitions, TYPE is the name tag of a user defined
+ structure that must contain a field of type SLIST_ENTRY, LIST_ENTRY,
+ SIMPLEQ_ENTRY, TAILQ_ENTRY, or CIRCLEQ_ENTRY, named NAME. The argument
+ HEADNAME is the name tag of a user defined structure that must be
+ declared using the macros SLIST_HEAD(), LIST_HEAD(), SIMPLEQ_HEAD(),
+ TAILQ_HEAD(), or CIRCLEQ_HEAD(). See the examples below for further
+ explanation of how these macros are used.
+
+SINGLY-LINKED LISTS
+ A singly-linked list is headed by a structure defined by the SLIST_HEAD()
+ macro. This structure contains a single pointer to the first element on
+ the list. The elements are singly linked for minimum space and pointer
+ manipulation overhead at the expense of O(n) removal for arbitrary
+ elements. New elements can be added to the list after an existing
+ element or at the head of the list. A SLIST_HEAD structure is declared
+ as follows:
+
+ SLIST_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the list. A pointer
+ to the head of the list can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The HEADNAME facility is often not used, leading to the following bizarre
+ code:
+
+ SLIST_HEAD(, TYPE) head, *headp;
+
+ The SLIST_ENTRY() macro declares a structure that connects the elements
+ in the list.
+
+ The SLIST_INIT() macro initializes the list referenced by head.
+
+ The list can also be initialized statically by using the
+ SLIST_HEAD_INITIALIZER() macro like this:
+
+ SLIST_HEAD(HEADNAME, TYPE) head = SLIST_HEAD_INITIALIZER(head);
+
+ The SLIST_INSERT_HEAD() macro inserts the new element elm at the head of
+ the list.
+
+ The SLIST_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The SLIST_REMOVE_HEAD() macro removes the first element of the list
+ pointed by head.
+
+ The SLIST_REMOVE_AFTER() macro removes the list element immediately
+ following elm.
+
+ The SLIST_REMOVE() macro removes the element elm of the list pointed by
+ head.
+
+ The SLIST_FIRST() and SLIST_NEXT() macros can be used to traverse the
+ list:
+
+ for (np = SLIST_FIRST(&head); np != NULL; np = SLIST_NEXT(np, NAME))
+
+ Or, for simplicity, one can use the SLIST_FOREACH() macro:
+
+ SLIST_FOREACH(np, head, NAME)
+
+ The macro SLIST_FOREACH_SAFE() traverses the list referenced by head in a
+ forward direction, assigning each element in turn to var. However,
+ unlike SLIST_FOREACH() it is permitted to remove var as well as free it
+ from within the loop safely without interfering with the traversal.
+
+ The SLIST_EMPTY() macro should be used to check whether a simple list is
+ empty.
+
+SINGLY-LINKED LIST EXAMPLE
+ SLIST_HEAD(listhead, entry) head;
+ struct entry {
+ ...
+ SLIST_ENTRY(entry) entries; /* Simple list. */
+ ...
+ } *n1, *n2, *np;
+
+ SLIST_INIT(&head); /* Initialize simple list. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ SLIST_INSERT_HEAD(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ SLIST_INSERT_AFTER(n1, n2, entries);
+
+ SLIST_FOREACH(np, &head, entries) /* Forward traversal. */
+ np-> ...
+
+ while (!SLIST_EMPTY(&head)) { /* Delete. */
+ n1 = SLIST_FIRST(&head);
+ SLIST_REMOVE_HEAD(&head, entries);
+ free(n1);
+ }
+
+
+LISTS
+ A list is headed by a structure defined by the LIST_HEAD() macro. This
+ structure contains a single pointer to the first element on the list.
+ The elements are doubly linked so that an arbitrary element can be
+ removed without traversing the list. New elements can be added to the
+ list after an existing element, before an existing element, or at the
+ head of the list. A LIST_HEAD structure is declared as follows:
+
+ LIST_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the list. A pointer
+ to the head of the list can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The HEADNAME facility is often not used, leading to the following bizarre
+ code:
+
+ LIST_HEAD(, TYPE) head, *headp;
+
+ The LIST_ENTRY() macro declares a structure that connects the elements in
+ the list.
+
+ The LIST_INIT() macro initializes the list referenced by head.
+
+ The list can also be initialized statically by using the
+ LIST_HEAD_INITIALIZER() macro like this:
+
+ LIST_HEAD(HEADNAME, TYPE) head = LIST_HEAD_INITIALIZER(head);
+
+ The LIST_INSERT_HEAD() macro inserts the new element elm at the head of
+ the list.
+
+ The LIST_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The LIST_INSERT_BEFORE() macro inserts the new element elm before the
+ element listelm.
+
+ The LIST_REMOVE() macro removes the element elm from the list.
+
+ The LIST_REPLACE() macro replaces the list element elm with the new
+ element elm2.
+
+ The LIST_FIRST() and LIST_NEXT() macros can be used to traverse the list:
+
+ for (np = LIST_FIRST(&head); np != NULL; np = LIST_NEXT(np, NAME))
+
+ Or, for simplicity, one can use the LIST_FOREACH() macro:
+
+ LIST_FOREACH(np, head, NAME)
+
+ The macro LIST_FOREACH_SAFE() traverses the list referenced by head in a
+ forward direction, assigning each element in turn to var. However,
+ unlike LIST_FOREACH() it is permitted to remove var as well as free it
+ from within the loop safely without interfering with the traversal.
+
+ The LIST_EMPTY() macro should be used to check whether a list is empty.
+
+LIST EXAMPLE
+ LIST_HEAD(listhead, entry) head;
+ struct entry {
+ ...
+ LIST_ENTRY(entry) entries; /* List. */
+ ...
+ } *n1, *n2, *np;
+
+ LIST_INIT(&head); /* Initialize list. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ LIST_INSERT_HEAD(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ LIST_INSERT_AFTER(n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert before. */
+ LIST_INSERT_BEFORE(n1, n2, entries);
+ /* Forward traversal. */
+ LIST_FOREACH(np, &head, entries)
+ np-> ...
+
+ while (!LIST_EMPTY(&head)) /* Delete. */
+ n1 = LIST_FIRST(&head);
+ LIST_REMOVE(n1, entries);
+ free(n1);
+ }
+
+SIMPLE QUEUES
+ A simple queue is headed by a structure defined by the SIMPLEQ_HEAD()
+ macro. This structure contains a pair of pointers, one to the first
+ element in the simple queue and the other to the last element in the
+ simple queue. The elements are singly linked. New elements can be added
+ to the queue after an existing element, at the head of the queue or at
+ the tail of the queue. A SIMPLEQ_HEAD structure is declared as follows:
+
+ SIMPLEQ_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the queue. A pointer
+ to the head of the queue can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The SIMPLEQ_ENTRY() macro declares a structure that connects the elements
+ in the queue.
+
+ The SIMPLEQ_INIT() macro initializes the queue referenced by head.
+
+ The queue can also be initialized statically by using the
+ SIMPLEQ_HEAD_INITIALIZER() macro like this:
+
+ SIMPLEQ_HEAD(HEADNAME, TYPE) head = SIMPLEQ_HEAD_INITIALIZER(head);
+
+ The SIMPLEQ_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The SIMPLEQ_INSERT_HEAD() macro inserts the new element elm at the head
+ of the queue.
+
+ The SIMPLEQ_INSERT_TAIL() macro inserts the new element elm at the end of
+ the queue.
+
+ The SIMPLEQ_REMOVE_AFTER() macro removes the queue element immediately
+ following elm.
+
+ The SIMPLEQ_REMOVE_HEAD() macro removes the first element from the queue.
+
+ The SIMPLEQ_FIRST() and SIMPLEQ_NEXT() macros can be used to traverse the
+ queue. The SIMPLEQ_FOREACH() is used for queue traversal:
+
+ SIMPLEQ_FOREACH(np, head, NAME)
+
+ The macro SIMPLEQ_FOREACH_SAFE() traverses the queue referenced by head
+ in a forward direction, assigning each element in turn to var. However,
+ unlike SIMPLEQ_FOREACH() it is permitted to remove var as well as free it
+ from within the loop safely without interfering with the traversal.
+
+ The SIMPLEQ_EMPTY() macro should be used to check whether a list is
+ empty.
+
+SIMPLE QUEUE EXAMPLE
+ SIMPLEQ_HEAD(listhead, entry) head = SIMPLEQ_HEAD_INITIALIZER(head);
+ struct entry {
+ ...
+ SIMPLEQ_ENTRY(entry) entries; /* Simple queue. */
+ ...
+ } *n1, *n2, *np;
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ SIMPLEQ_INSERT_HEAD(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ SIMPLEQ_INSERT_AFTER(&head, n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+ SIMPLEQ_INSERT_TAIL(&head, n2, entries);
+ /* Forward traversal. */
+ SIMPLEQ_FOREACH(np, &head, entries)
+ np-> ...
+ /* Delete. */
+ while (!SIMPLEQ_EMPTY(&head)) {
+ n1 = SIMPLEQ_FIRST(&head);
+ SIMPLEQ_REMOVE_HEAD(&head, entries);
+ free(n1);
+ }
+
+TAIL QUEUES
+ A tail queue is headed by a structure defined by the TAILQ_HEAD() macro.
+ This structure contains a pair of pointers, one to the first element in
+ the tail queue and the other to the last element in the tail queue. The
+ elements are doubly linked so that an arbitrary element can be removed
+ without traversing the tail queue. New elements can be added to the
+ queue after an existing element, before an existing element, at the head
+ of the queue, or at the end of the queue. A TAILQ_HEAD structure is
+ declared as follows:
+
+ TAILQ_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the tail queue. A
+ pointer to the head of the tail queue can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The TAILQ_ENTRY() macro declares a structure that connects the elements
+ in the tail queue.
+
+ The TAILQ_INIT() macro initializes the tail queue referenced by head.
+
+ The tail queue can also be initialized statically by using the
+ TAILQ_HEAD_INITIALIZER() macro.
+
+ The TAILQ_INSERT_HEAD() macro inserts the new element elm at the head of
+ the tail queue.
+
+ The TAILQ_INSERT_TAIL() macro inserts the new element elm at the end of
+ the tail queue.
+
+ The TAILQ_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The TAILQ_INSERT_BEFORE() macro inserts the new element elm before the
+ element listelm.
+
+ The TAILQ_REMOVE() macro removes the element elm from the tail queue.
+
+ The TAILQ_REPLACE() macro replaces the list element elm with the new
+ element elm2.
+
+ TAILQ_FOREACH() and TAILQ_FOREACH_REVERSE() are used for traversing a
+ tail queue. TAILQ_FOREACH() starts at the first element and proceeds
+ towards the last. TAILQ_FOREACH_REVERSE() starts at the last element and
+ proceeds towards the first.
+
+ TAILQ_FOREACH(np, &head, NAME)
+ TAILQ_FOREACH_REVERSE(np, &head, HEADNAME, NAME)
+
+ The macros TAILQ_FOREACH_SAFE() and TAILQ_FOREACH_REVERSE_SAFE() traverse
+ the list referenced by head in a forward or reverse direction
+ respectively, assigning each element in turn to var. However, unlike
+ their unsafe counterparts, they permit both the removal of var as well as
+ freeing it from within the loop safely without interfering with the
+ traversal.
+
+ The TAILQ_FIRST(), TAILQ_NEXT(), TAILQ_LAST() and TAILQ_PREV() macros can
+ be used to manually traverse a tail queue or an arbitrary part of one.
+
+ The TAILQ_EMPTY() macro should be used to check whether a tail queue is
+ empty.
+
+TAIL QUEUE EXAMPLE
+ TAILQ_HEAD(tailhead, entry) head;
+ struct entry {
+ ...
+ TAILQ_ENTRY(entry) entries; /* Tail queue. */
+ ...
+ } *n1, *n2, *np;
+
+ TAILQ_INIT(&head); /* Initialize queue. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ TAILQ_INSERT_HEAD(&head, n1, entries);
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+ TAILQ_INSERT_TAIL(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ TAILQ_INSERT_AFTER(&head, n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert before. */
+ TAILQ_INSERT_BEFORE(n1, n2, entries);
+ /* Forward traversal. */
+ TAILQ_FOREACH(np, &head, entries)
+ np-> ...
+ /* Manual forward traversal. */
+ for (np = n2; np != NULL; np = TAILQ_NEXT(np, entries))
+ np-> ...
+ /* Delete. */
+ while ((np = TAILQ_FIRST(&head))) {
+ TAILQ_REMOVE(&head, np, entries);
+ free(np);
+ }
+
+
+CIRCULAR QUEUES
+ A circular queue is headed by a structure defined by the CIRCLEQ_HEAD()
+ macro. This structure contains a pair of pointers, one to the first
+ element in the circular queue and the other to the last element in the
+ circular queue. The elements are doubly linked so that an arbitrary
+ element can be removed without traversing the queue. New elements can be
+ added to the queue after an existing element, before an existing element,
+ at the head of the queue, or at the end of the queue. A CIRCLEQ_HEAD
+ structure is declared as follows:
+
+ CIRCLEQ_HEAD(HEADNAME, TYPE) head;
+
+ where HEADNAME is the name of the structure to be defined, and struct
+ TYPE is the type of the elements to be linked into the circular queue. A
+ pointer to the head of the circular queue can later be declared as:
+
+ struct HEADNAME *headp;
+
+ (The names head and headp are user selectable.)
+
+ The CIRCLEQ_ENTRY() macro declares a structure that connects the elements
+ in the circular queue.
+
+ The CIRCLEQ_INIT() macro initializes the circular queue referenced by
+ head.
+
+ The circular queue can also be initialized statically by using the
+ CIRCLEQ_HEAD_INITIALIZER() macro.
+
+ The CIRCLEQ_INSERT_HEAD() macro inserts the new element elm at the head
+ of the circular queue.
+
+ The CIRCLEQ_INSERT_TAIL() macro inserts the new element elm at the end of
+ the circular queue.
+
+ The CIRCLEQ_INSERT_AFTER() macro inserts the new element elm after the
+ element listelm.
+
+ The CIRCLEQ_INSERT_BEFORE() macro inserts the new element elm before the
+ element listelm.
+
+ The CIRCLEQ_REMOVE() macro removes the element elm from the circular
+ queue.
+
+ The CIRCLEQ_REPLACE() macro replaces the list element elm with the new
+ element elm2.
+
+ The CIRCLEQ_FIRST(), CIRCLEQ_LAST(), CIRCLEQ_END(), CIRCLEQ_NEXT() and
+ CIRCLEQ_PREV() macros can be used to traverse a circular queue. The
+ CIRCLEQ_FOREACH() is used for circular queue forward traversal:
+
+ CIRCLEQ_FOREACH(np, head, NAME)
+
+ The CIRCLEQ_FOREACH_REVERSE() macro acts like CIRCLEQ_FOREACH() but
+ traverses the circular queue backwards.
+
+ The macros CIRCLEQ_FOREACH_SAFE() and CIRCLEQ_FOREACH_REVERSE_SAFE()
+ traverse the list referenced by head in a forward or reverse direction
+ respectively, assigning each element in turn to var. However, unlike
+ their unsafe counterparts, they permit both the removal of var as well as
+ freeing it from within the loop safely without interfering with the
+ traversal.
+
+ The CIRCLEQ_EMPTY() macro should be used to check whether a circular
+ queue is empty.
+
+CIRCULAR QUEUE EXAMPLE
+ CIRCLEQ_HEAD(circleq, entry) head;
+ struct entry {
+ ...
+ CIRCLEQ_ENTRY(entry) entries; /* Circular queue. */
+ ...
+ } *n1, *n2, *np;
+
+ CIRCLEQ_INIT(&head); /* Initialize circular queue. */
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the head. */
+ CIRCLEQ_INSERT_HEAD(&head, n1, entries);
+
+ n1 = malloc(sizeof(struct entry)); /* Insert at the tail. */
+ CIRCLEQ_INSERT_TAIL(&head, n1, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert after. */
+ CIRCLEQ_INSERT_AFTER(&head, n1, n2, entries);
+
+ n2 = malloc(sizeof(struct entry)); /* Insert before. */
+ CIRCLEQ_INSERT_BEFORE(&head, n1, n2, entries);
+ /* Forward traversal. */
+ CIRCLEQ_FOREACH(np, &head, entries)
+ np-> ...
+ /* Reverse traversal. */
+ CIRCLEQ_FOREACH_REVERSE(np, &head, entries)
+ np-> ...
+ /* Delete. */
+ while (!CIRCLEQ_EMPTY(&head)) {
+ n1 = CIRCLEQ_FIRST(&head);
+ CIRCLEQ_REMOVE(&head, n1, entries);
+ free(n1);
+ }
+
+NOTES
+ It is an error to assume the next and previous fields are preserved after
+ an element has been removed from a list or queue. Using any macro
+ (except the various forms of insertion) on an element removed from a list
+ or queue is incorrect. An example of erroneous usage is removing the
+ same element twice.
+
+ The SLIST_END(), LIST_END(), SIMPLEQ_END() and TAILQ_END() macros are
+ provided for symmetry with CIRCLEQ_END(). They expand to NULL and don't
+ serve any useful purpose.
+
+ Trying to free a list in the following way is a common error:
+
+ LIST_FOREACH(var, head, entry)
+ free(var);
+ free(head);
+
+ Since var is free'd, the FOREACH macros refer to a pointer that may have
+ been reallocated already. A similar situation occurs when the current
+ element is deleted from the list. In cases like these the data
+ structure's FOREACH_SAFE macros should be used instead.
+
+HISTORY
+ The queue functions first appeared in 4.4BSD.
+
+OpenBSD 5.0 April 11, 2012 OpenBSD 5.0
+======================================================================
+.\" $OpenBSD: queue.3,v 1.56 2012/04/11 13:29:14 naddy Exp $
+.\" $NetBSD: queue.3,v 1.4 1995/07/03 00:25:36 mycroft Exp $
+.\"
+.\" Copyright (c) 1993 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\" 3. Neither the name of the University nor the names of its contributors
+.\" may be used to endorse or promote products derived from this software
+.\" without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+
diff --git a/src/include.am b/src/include.am
new file mode 100644
index 000000000..d0693e25b
--- /dev/null
+++ b/src/include.am
@@ -0,0 +1,7 @@
+include src/ext/include.am
+include src/common/include.am
+include src/or/include.am
+include src/test/include.am
+include src/tools/include.am
+include src/win32/include.am
+include src/config/include.am
diff --git a/src/or/Makefile.am b/src/or/Makefile.am
deleted file mode 100644
index 3cc789a1b..000000000
--- a/src/or/Makefile.am
+++ /dev/null
@@ -1,158 +0,0 @@
-bin_PROGRAMS = tor
-noinst_LIBRARIES = libtor.a
-
-if BUILD_NT_SERVICES
-tor_platform_source=ntmain.c
-else
-tor_platform_source=
-endif
-
-EXTRA_DIST=ntmain.c or_sha1.i Makefile.nmake
-
-if USE_EXTERNAL_EVDNS
-evdns_source=
-else
-evdns_source=eventdns.c
-endif
-
-libtor_a_SOURCES = \
- buffers.c \
- circuitbuild.c \
- circuitlist.c \
- circuituse.c \
- command.c \
- config.c \
- connection.c \
- connection_edge.c \
- connection_or.c \
- control.c \
- cpuworker.c \
- directory.c \
- dirserv.c \
- dirvote.c \
- dns.c \
- dnsserv.c \
- geoip.c \
- hibernate.c \
- main.c \
- microdesc.c \
- networkstatus.c \
- nodelist.c \
- onion.c \
- transports.c \
- policies.c \
- reasons.c \
- relay.c \
- rendclient.c \
- rendcommon.c \
- rendmid.c \
- rendservice.c \
- rephist.c \
- router.c \
- routerlist.c \
- routerparse.c \
- status.c \
- $(evdns_source) \
- $(tor_platform_source) \
- config_codedigest.c
-
-#libtor_a_LIBADD = ../common/libor.a ../common/libor-crypto.a \
-# ../common/libor-event.a
-
-
-tor_SOURCES = tor_main.c
-
-AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
- -DLOCALSTATEDIR="\"$(localstatedir)\"" \
- -DBINDIR="\"$(bindir)\""
-
-# -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.
-
-
-tor_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
-tor_LDADD = ./libtor.a ../common/libor.a ../common/libor-crypto.a \
- ../common/libor-event.a \
- @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ @TOR_OPENSSL_LIBS@ \
- @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-noinst_HEADERS = \
- buffers.h \
- circuitbuild.h \
- circuitlist.h \
- circuituse.h \
- command.h \
- config.h \
- connection.h \
- connection_edge.h \
- connection_or.h \
- control.h \
- cpuworker.h \
- directory.h \
- dirserv.h \
- dirvote.h \
- dns.h \
- dnsserv.h \
- eventdns.h \
- eventdns_tor.h \
- geoip.h \
- hibernate.h \
- main.h \
- microdesc.h \
- networkstatus.h \
- nodelist.h \
- ntmain.h \
- onion.h \
- or.h \
- transports.h \
- policies.h \
- reasons.h \
- relay.h \
- rendclient.h \
- rendcommon.h \
- rendmid.h \
- rendservice.h \
- rephist.h \
- router.h \
- routerlist.h \
- routerparse.h \
- status.h \
- micro-revision.i
-
-config_codedigest.o: or_sha1.i
-
-tor_main.o: micro-revision.i
-
-micro-revision.i: FORCE
- @rm -f micro-revision.tmp; \
- if test -d "$(top_srcdir)/.git" && \
- test -x "`which git 2>&1;true`"; then \
- HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
- echo \"$$HASH\" > micro-revision.tmp; \
- fi; \
- if test ! -f micro-revision.tmp ; then \
- if test ! -f micro-revision.i ; then \
- echo '""' > micro-revision.i; \
- fi; \
- elif test ! -f micro-revision.i || \
- test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \
- mv micro-revision.tmp micro-revision.i; \
- fi; true
-
-or_sha1.i: $(tor_SOURCES) $(libtor_a_SOURCES)
- if test "@SHA1SUM@" != none; then \
- (cd "$(srcdir)" && "@SHA1SUM@" $(tor_SOURCES) $(libtor_a_SOURCES)) | \
- "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > or_sha1.i; \
- elif test "@OPENSSL@" != none; then \
- (cd "$(srcdir)" && "@OPENSSL@" sha1 $(tor_SOURCES) $(libtor_a_SOURCES)) | \
- "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > or_sha1.i; \
- else \
- rm or_sha1.i; \
- touch or_sha1.i; \
- fi
-
-CLEANFILES = micro-revision.i
-
-#Dummy target to ensure that micro-revision.i _always_ gets built.
-FORCE:
diff --git a/src/or/Makefile.nmake b/src/or/Makefile.nmake
index 3181e79c2..3b627b1d0 100644
--- a/src/or/Makefile.nmake
+++ b/src/or/Makefile.nmake
@@ -1,28 +1,75 @@
all: tor.exe
-CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common \
+ /I ..\ext
-LIBS = ..\..\..\build-alpha\lib\libevent.a \
- ..\..\..\build-alpha\lib\libcrypto.a \
- ..\..\..\build-alpha\lib\libssl.a \
- ..\..\..\build-alpha\lib\libz.a \
- ws2_32.lib advapi32.lib shell32.lib
+LIBS = ..\..\..\build-alpha\lib\libevent.lib \
+ ..\..\..\build-alpha\lib\libcrypto.lib \
+ ..\..\..\build-alpha\lib\libssl.lib \
+ ..\..\..\build-alpha\lib\libz.lib \
+ ws2_32.lib advapi32.lib shell32.lib \
+ crypt32.lib gdi32.lib user32.lib
-LIBTOR_OBJECTS = buffers.obj circuitbuild.obj circuitlist.obj circuituse.obj \
- command.obj config.obj connection.obj connection_edge.obj \
- connection_or.obj control.obj cpuworker.obj directory.obj \
- dirserv.obj dirvote.obj dns.obj dnsserv.obj geoip.obj \
- hibernate.obj main.obj microdesc.obj networkstatus.obj \
- nodelist.obj onion.obj policies.obj reasons.obj relay.obj \
- rendclient.obj rendcommon.obj rendmid.obj rendservice.obj \
- rephist.obj router.obj routerlist.obj routerparse.obj status.obj \
- config_codedigest.obj ntmain.obj
+LIBTOR_OBJECTS = \
+ addressmap.obj \
+ buffers.obj \
+ channel.obj \
+ channeltls.obj \
+ circuitbuild.obj \
+ circuitlist.obj \
+ circuitmux.obj \
+ circuitmux_ewma.obj \
+ circuitstats.obj \
+ circuituse.obj \
+ command.obj \
+ config.obj \
+ config_codedigest.obj \
+ confparse.obj \
+ connection.obj \
+ connection_edge.obj \
+ connection_or.obj \
+ control.obj \
+ cpuworker.obj \
+ directory.obj \
+ dirserv.obj \
+ dirvote.obj \
+ dns.obj \
+ dnsserv.obj \
+ fp_pair.obj \
+ entrynodes.obj \
+ geoip.obj \
+ hibernate.obj \
+ main.obj \
+ microdesc.obj \
+ networkstatus.obj \
+ nodelist.obj \
+ ntmain.obj \
+ onion.obj \
+ onion_fast.obj \
+ onion_ntor.obj \
+ onion_tap.obj \
+ policies.obj \
+ reasons.obj \
+ relay.obj \
+ rendclient.obj \
+ rendcommon.obj \
+ rendmid.obj \
+ rendservice.obj \
+ rephist.obj \
+ replaycache.obj \
+ router.obj \
+ routerlist.obj \
+ routerparse.obj \
+ routerset.obj \
+ statefile.obj \
+ status.obj \
+ transports.obj
libtor.lib: $(LIBTOR_OBJECTS)
- lib $(LIBTOR_OBJECTS) /out:libtor.lib
+ lib $(LIBTOR_OBJECTS) /out:$@
tor.exe: libtor.lib tor_main.obj
- $(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj
+ $(CC) $(CFLAGS) $(LIBS) libtor.lib ..\common\*.lib tor_main.obj /Fe$@
clean:
del $(LIBTOR_OBJECTS) *.lib tor.exe
diff --git a/src/or/addressmap.c b/src/or/addressmap.c
new file mode 100644
index 000000000..998770a3d
--- /dev/null
+++ b/src/or/addressmap.c
@@ -0,0 +1,1078 @@
+/* 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 */
+
+#define ADDRESSMAP_PRIVATE
+
+#include "or.h"
+#include "addressmap.h"
+#include "circuituse.h"
+#include "config.h"
+#include "connection_edge.h"
+#include "control.h"
+#include "dns.h"
+#include "routerset.h"
+#include "nodelist.h"
+
+/** A client-side struct to remember requests to rewrite addresses
+ * to new addresses. These structs are stored in the hash table
+ * "addressmap" below.
+ *
+ * There are 5 ways to set an address mapping:
+ * - A MapAddress command from the controller [permanent]
+ * - An AddressMap directive in the torrc [permanent]
+ * - When a TrackHostExits torrc directive is triggered [temporary]
+ * - When a DNS resolve succeeds [temporary]
+ * - When a DNS resolve fails [temporary]
+ *
+ * When an addressmap request is made but one is already registered,
+ * the new one is replaced only if the currently registered one has
+ * no "new_address" (that is, it's in the process of DNS resolve),
+ * or if the new one is permanent (expires==0 or 1).
+ *
+ * (We overload the 'expires' field, using "0" for mappings set via
+ * the configuration file, "1" for mappings set from the control
+ * interface, and other values for DNS and TrackHostExit mappings that can
+ * expire.)
+ *
+ * A mapping may be 'wildcarded'. If "src_wildcard" is true, then
+ * any address that ends with a . followed by the key for this entry will
+ * get remapped by it. If "dst_wildcard" is also true, then only the
+ * matching suffix of such addresses will get replaced by new_address.
+ */
+typedef struct {
+ char *new_address;
+ time_t expires;
+ addressmap_entry_source_bitfield_t source:3;
+ unsigned src_wildcard:1;
+ unsigned dst_wildcard:1;
+ short num_resolve_failures;
+} addressmap_entry_t;
+
+/** Entry for mapping addresses to which virtual address we mapped them to. */
+typedef struct {
+ char *ipv4_address;
+ char *ipv6_address;
+ char *hostname_address;
+} virtaddress_entry_t;
+
+/** A hash table to store client-side address rewrite instructions. */
+static strmap_t *addressmap=NULL;
+
+/**
+ * Table mapping addresses to which virtual address, if any, we
+ * assigned them to.
+ *
+ * We maintain the following invariant: if [A,B] is in
+ * virtaddress_reversemap, then B must be a virtual address, and [A,B]
+ * must be in addressmap. We do not require that the converse hold:
+ * if it fails, then we could end up mapping two virtual addresses to
+ * the same address, which is no disaster.
+ **/
+static strmap_t *virtaddress_reversemap=NULL;
+
+/** Initialize addressmap. */
+void
+addressmap_init(void)
+{
+ addressmap = strmap_new();
+ virtaddress_reversemap = strmap_new();
+}
+
+/** Free the memory associated with the addressmap entry <b>_ent</b>. */
+static void
+addressmap_ent_free(void *_ent)
+{
+ addressmap_entry_t *ent;
+ if (!_ent)
+ return;
+
+ ent = _ent;
+ tor_free(ent->new_address);
+ tor_free(ent);
+}
+
+/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
+static void
+addressmap_virtaddress_ent_free(void *_ent)
+{
+ virtaddress_entry_t *ent;
+ if (!_ent)
+ return;
+
+ ent = _ent;
+ tor_free(ent->ipv4_address);
+ tor_free(ent->hostname_address);
+ tor_free(ent);
+}
+
+/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
+static void
+addressmap_virtaddress_remove(const char *address, addressmap_entry_t *ent)
+{
+ if (ent && ent->new_address &&
+ address_is_in_virtual_range(ent->new_address)) {
+ virtaddress_entry_t *ve =
+ strmap_get(virtaddress_reversemap, ent->new_address);
+ /*log_fn(LOG_NOTICE,"remove reverse mapping for %s",ent->new_address);*/
+ if (ve) {
+ if (!strcmp(address, ve->ipv4_address))
+ tor_free(ve->ipv4_address);
+ if (!strcmp(address, ve->hostname_address))
+ tor_free(ve->hostname_address);
+ if (!ve->ipv4_address && !ve->hostname_address) {
+ tor_free(ve);
+ strmap_remove(virtaddress_reversemap, ent->new_address);
+ }
+ }
+ }
+}
+
+/** Remove <b>ent</b> (which must be mapped to by <b>address</b>) from the
+ * client address maps. */
+static void
+addressmap_ent_remove(const char *address, addressmap_entry_t *ent)
+{
+ addressmap_virtaddress_remove(address, ent);
+ addressmap_ent_free(ent);
+}
+
+/** Unregister all TrackHostExits mappings from any address to
+ * *.exitname.exit. */
+void
+clear_trackexithost_mappings(const char *exitname)
+{
+ char *suffix = NULL;
+ if (!addressmap || !exitname)
+ return;
+ tor_asprintf(&suffix, ".%s.exit", exitname);
+ tor_strlower(suffix);
+
+ STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
+ if (ent->source == ADDRMAPSRC_TRACKEXIT &&
+ !strcmpend(ent->new_address, suffix)) {
+ addressmap_ent_remove(address, ent);
+ MAP_DEL_CURRENT(address);
+ }
+ } STRMAP_FOREACH_END;
+
+ tor_free(suffix);
+}
+
+/** Remove all TRACKEXIT mappings from the addressmap for which the target
+ * host is unknown or no longer allowed, or for which the source address
+ * is no longer in trackexithosts. */
+void
+addressmap_clear_excluded_trackexithosts(const or_options_t *options)
+{
+ const routerset_t *allow_nodes = options->ExitNodes;
+ const routerset_t *exclude_nodes = options->ExcludeExitNodesUnion_;
+
+ if (!addressmap)
+ return;
+ if (routerset_is_empty(allow_nodes))
+ allow_nodes = NULL;
+ if (allow_nodes == NULL && routerset_is_empty(exclude_nodes))
+ return;
+
+ STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
+ size_t len;
+ const char *target = ent->new_address, *dot;
+ char *nodename;
+ const node_t *node;
+
+ if (!target) {
+ /* DNS resolving in progress */
+ continue;
+ } else if (strcmpend(target, ".exit")) {
+ /* Not a .exit mapping */
+ continue;
+ } else if (ent->source != ADDRMAPSRC_TRACKEXIT) {
+ /* Not a trackexit mapping. */
+ continue;
+ }
+ len = strlen(target);
+ if (len < 6)
+ continue; /* malformed. */
+ dot = target + len - 6; /* dot now points to just before .exit */
+ while (dot > target && *dot != '.')
+ dot--;
+ if (*dot == '.') dot++;
+ nodename = tor_strndup(dot, len-5-(dot-target));;
+ node = node_get_by_nickname(nodename, 0);
+ tor_free(nodename);
+ if (!node ||
+ (allow_nodes && !routerset_contains_node(allow_nodes, node)) ||
+ routerset_contains_node(exclude_nodes, node) ||
+ !hostname_in_track_host_exits(options, address)) {
+ /* We don't know this one, or we want to be rid of it. */
+ addressmap_ent_remove(address, ent);
+ MAP_DEL_CURRENT(address);
+ }
+ } STRMAP_FOREACH_END;
+}
+
+/** Return true iff <b>address</b> is one that we are configured to
+ * automap on resolve according to <b>options</b>. */
+int
+addressmap_address_should_automap(const char *address,
+ const or_options_t *options)
+{
+ const smartlist_t *suffix_list = options->AutomapHostsSuffixes;
+
+ if (!suffix_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(suffix_list, const char *, suffix) {
+ if (!strcasecmpend(address, suffix))
+ return 1;
+ } SMARTLIST_FOREACH_END(suffix);
+ return 0;
+}
+
+/** Remove all AUTOMAP mappings from the addressmap for which the
+ * source address no longer matches AutomapHostsSuffixes, which is
+ * no longer allowed by AutomapHostsOnResolve, or for which the
+ * target address is no longer in the virtual network. */
+void
+addressmap_clear_invalid_automaps(const or_options_t *options)
+{
+ int clear_all = !options->AutomapHostsOnResolve;
+ const smartlist_t *suffixes = options->AutomapHostsSuffixes;
+
+ if (!addressmap)
+ return;
+
+ if (!suffixes)
+ clear_all = 1; /* This should be impossible, but let's be sure. */
+
+ STRMAP_FOREACH_MODIFY(addressmap, src_address, addressmap_entry_t *, ent) {
+ int remove = clear_all;
+ if (ent->source != ADDRMAPSRC_AUTOMAP)
+ continue; /* not an automap mapping. */
+
+ if (!remove) {
+ remove = ! addressmap_address_should_automap(src_address, options);
+ }
+
+ if (!remove && ! address_is_in_virtual_range(ent->new_address))
+ remove = 1;
+
+ if (remove) {
+ addressmap_ent_remove(src_address, ent);
+ MAP_DEL_CURRENT(src_address);
+ }
+ } STRMAP_FOREACH_END;
+}
+
+/** Remove all entries from the addressmap that were set via the
+ * configuration file or the command line. */
+void
+addressmap_clear_configured(void)
+{
+ addressmap_get_mappings(NULL, 0, 0, 0);
+}
+
+/** Remove all entries from the addressmap that are set to expire, ever. */
+void
+addressmap_clear_transient(void)
+{
+ addressmap_get_mappings(NULL, 2, TIME_MAX, 0);
+}
+
+/** Clean out entries from the addressmap cache that were
+ * added long enough ago that they are no longer valid.
+ */
+void
+addressmap_clean(time_t now)
+{
+ addressmap_get_mappings(NULL, 2, now, 0);
+}
+
+/** Free all the elements in the addressmap, and free the addressmap
+ * itself. */
+void
+addressmap_free_all(void)
+{
+ strmap_free(addressmap, addressmap_ent_free);
+ addressmap = NULL;
+
+ strmap_free(virtaddress_reversemap, addressmap_virtaddress_ent_free);
+ virtaddress_reversemap = NULL;
+}
+
+/** Try to find a match for AddressMap expressions that use
+ * wildcard notation such as '*.c.d *.e.f' (so 'a.c.d' will map to 'a.e.f') or
+ * '*.c.d a.b.c' (so 'a.c.d' will map to a.b.c).
+ * Return the matching entry in AddressMap or NULL if no match is found.
+ * For expressions such as '*.c.d *.e.f', truncate <b>address</b> 'a.c.d'
+ * to 'a' before we return the matching AddressMap entry.
+ *
+ * This function does not handle the case where a pattern of the form "*.c.d"
+ * matches the address c.d -- that's done by the main addressmap_rewrite
+ * function.
+ */
+static addressmap_entry_t *
+addressmap_match_superdomains(char *address)
+{
+ addressmap_entry_t *val;
+ char *cp;
+
+ cp = address;
+ while ((cp = strchr(cp, '.'))) {
+ /* cp now points to a suffix of address that begins with a . */
+ val = strmap_get_lc(addressmap, cp+1);
+ if (val && val->src_wildcard) {
+ if (val->dst_wildcard)
+ *cp = '\0';
+ return val;
+ }
+ ++cp;
+ }
+ return NULL;
+}
+
+/** Look at address, and rewrite it until it doesn't want any
+ * more rewrites; but don't get into an infinite loop.
+ * Don't write more than maxlen chars into address. Return true if the
+ * address changed; false otherwise. Set *<b>expires_out</b> to the
+ * expiry time of the result, or to <b>time_max</b> if the result does
+ * not expire.
+ *
+ * If <b>exit_source_out</b> is non-null, we set it as follows. If we the
+ * address starts out as a non-exit address, and we remap it to an .exit
+ * address at any point, then set *<b>exit_source_out</b> to the
+ * address_entry_source_t of the first such rule. Set *<b>exit_source_out</b>
+ * to ADDRMAPSRC_NONE if there is no such rewrite, or if the original address
+ * was a .exit.
+ */
+int
+addressmap_rewrite(char *address, size_t maxlen,
+ unsigned flags,
+ time_t *expires_out,
+ addressmap_entry_source_t *exit_source_out)
+{
+ addressmap_entry_t *ent;
+ int rewrites;
+ time_t expires = TIME_MAX;
+ addressmap_entry_source_t exit_source = ADDRMAPSRC_NONE;
+ char *addr_orig = tor_strdup(address);
+ char *log_addr_orig = NULL;
+
+ for (rewrites = 0; rewrites < 16; rewrites++) {
+ int exact_match = 0;
+ log_addr_orig = tor_strdup(escaped_safe_str_client(address));
+
+ ent = strmap_get(addressmap, address);
+
+ if (!ent || !ent->new_address) {
+ ent = addressmap_match_superdomains(address);
+ } else {
+ if (ent->src_wildcard && !ent->dst_wildcard &&
+ !strcasecmp(address, ent->new_address)) {
+ /* This is a rule like *.example.com example.com, and we just got
+ * "example.com" */
+ goto done;
+ }
+
+ exact_match = 1;
+ }
+
+ if (!ent || !ent->new_address) {
+ goto done;
+ }
+
+ if (ent && ent->source == ADDRMAPSRC_DNS) {
+ sa_family_t f;
+ tor_addr_t tmp;
+ f = tor_addr_parse(&tmp, ent->new_address);
+ if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
+ goto done;
+ else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ goto done;
+ }
+
+ if (ent->dst_wildcard && !exact_match) {
+ strlcat(address, ".", maxlen);
+ strlcat(address, ent->new_address, maxlen);
+ } else {
+ strlcpy(address, ent->new_address, maxlen);
+ }
+
+ if (!strcmpend(address, ".exit") &&
+ strcmpend(addr_orig, ".exit") &&
+ exit_source == ADDRMAPSRC_NONE) {
+ exit_source = ent->source;
+ }
+
+ log_info(LD_APP, "Addressmap: rewriting %s to %s",
+ log_addr_orig, escaped_safe_str_client(address));
+ if (ent->expires > 1 && ent->expires < expires)
+ expires = ent->expires;
+
+ tor_free(log_addr_orig);
+ }
+ log_warn(LD_CONFIG,
+ "Loop detected: we've rewritten %s 16 times! Using it as-is.",
+ escaped_safe_str_client(address));
+ /* it's fine to rewrite a rewrite, but don't loop forever */
+
+ done:
+ tor_free(addr_orig);
+ tor_free(log_addr_orig);
+ if (exit_source_out)
+ *exit_source_out = exit_source;
+ if (expires_out)
+ *expires_out = TIME_MAX;
+ return (rewrites > 0);
+}
+
+/** If we have a cached reverse DNS entry for the address stored in the
+ * <b>maxlen</b>-byte buffer <b>address</b> (typically, a dotted quad) then
+ * rewrite to the cached value and return 1. Otherwise return 0. Set
+ * *<b>expires_out</b> to the expiry time of the result, or to <b>time_max</b>
+ * if the result does not expire. */
+int
+addressmap_rewrite_reverse(char *address, size_t maxlen, unsigned flags,
+ time_t *expires_out)
+{
+ char *s, *cp;
+ addressmap_entry_t *ent;
+ int r = 0;
+ {
+ sa_family_t f;
+ tor_addr_t tmp;
+ f = tor_addr_parse(&tmp, address);
+ if (f == AF_INET && !(flags & AMR_FLAG_USE_IPV4_DNS))
+ return 0;
+ else if (f == AF_INET6 && !(flags & AMR_FLAG_USE_IPV6_DNS))
+ return 0;
+ }
+
+ tor_asprintf(&s, "REVERSE[%s]", address);
+ ent = strmap_get(addressmap, s);
+ if (ent) {
+ cp = tor_strdup(escaped_safe_str_client(ent->new_address));
+ log_info(LD_APP, "Rewrote reverse lookup %s -> %s",
+ escaped_safe_str_client(s), cp);
+ tor_free(cp);
+ strlcpy(address, ent->new_address, maxlen);
+ r = 1;
+ }
+
+ if (expires_out)
+ *expires_out = (ent && ent->expires > 1) ? ent->expires : TIME_MAX;
+
+ tor_free(s);
+ return r;
+}
+
+/** Return 1 if <b>address</b> is already registered, else return 0. If address
+ * is already registered, and <b>update_expires</b> is non-zero, then update
+ * the expiry time on the mapping with update_expires if it is a
+ * mapping created by TrackHostExits. */
+int
+addressmap_have_mapping(const char *address, int update_expiry)
+{
+ addressmap_entry_t *ent;
+ if (!(ent=strmap_get_lc(addressmap, address)))
+ return 0;
+ if (update_expiry && ent->source==ADDRMAPSRC_TRACKEXIT)
+ ent->expires=time(NULL) + update_expiry;
+ return 1;
+}
+
+/** Register a request to map <b>address</b> to <b>new_address</b>,
+ * which will expire on <b>expires</b> (or 0 if never expires from
+ * config file, 1 if never expires from controller, 2 if never expires
+ * (virtual address mapping) from the controller.)
+ *
+ * <b>new_address</b> should be a newly dup'ed string, which we'll use or
+ * free as appropriate. We will leave address alone.
+ *
+ * If <b>wildcard_addr</b> is true, then the mapping will match any address
+ * equal to <b>address</b>, or any address ending with a period followed by
+ * <b>address</b>. If <b>wildcard_addr</b> and <b>wildcard_new_addr</b> are
+ * both true, the mapping will rewrite addresses that end with
+ * ".<b>address</b>" into ones that end with ".<b>new_address</b>."
+ *
+ * If <b>new_address</b> is NULL, or <b>new_address</b> is equal to
+ * <b>address</b> and <b>wildcard_addr</b> is equal to
+ * <b>wildcard_new_addr</b>, remove any mappings that exist from
+ * <b>address</b>.
+ *
+ *
+ * It is an error to set <b>wildcard_new_addr</b> if <b>wildcard_addr</b> is
+ * not set. */
+void
+addressmap_register(const char *address, char *new_address, time_t expires,
+ addressmap_entry_source_t source,
+ const int wildcard_addr,
+ const int wildcard_new_addr)
+{
+ addressmap_entry_t *ent;
+
+ if (wildcard_new_addr)
+ tor_assert(wildcard_addr);
+
+ ent = strmap_get(addressmap, address);
+ if (!new_address || (!strcasecmp(address,new_address) &&
+ wildcard_addr == wildcard_new_addr)) {
+ /* Remove the mapping, if any. */
+ tor_free(new_address);
+ if (ent) {
+ addressmap_ent_remove(address,ent);
+ strmap_remove(addressmap, address);
+ }
+ return;
+ }
+ if (!ent) { /* make a new one and register it */
+ ent = tor_malloc_zero(sizeof(addressmap_entry_t));
+ strmap_set(addressmap, address, ent);
+ } else if (ent->new_address) { /* we need to clean up the old mapping. */
+ if (expires > 1) {
+ log_info(LD_APP,"Temporary addressmap ('%s' to '%s') not performed, "
+ "since it's already mapped to '%s'",
+ safe_str_client(address),
+ safe_str_client(new_address),
+ safe_str_client(ent->new_address));
+ tor_free(new_address);
+ return;
+ }
+ if (address_is_in_virtual_range(ent->new_address) &&
+ expires != 2) {
+ /* XXX This isn't the perfect test; we want to avoid removing
+ * mappings set from the control interface _as virtual mapping */
+ addressmap_virtaddress_remove(address, ent);
+ }
+ tor_free(ent->new_address);
+ } /* else { we have an in-progress resolve with no mapping. } */
+
+ ent->new_address = new_address;
+ ent->expires = expires==2 ? 1 : expires;
+ ent->num_resolve_failures = 0;
+ ent->source = source;
+ ent->src_wildcard = wildcard_addr ? 1 : 0;
+ ent->dst_wildcard = wildcard_new_addr ? 1 : 0;
+
+ log_info(LD_CONFIG, "Addressmap: (re)mapped '%s' to '%s'",
+ safe_str_client(address),
+ safe_str_client(ent->new_address));
+ control_event_address_mapped(address, ent->new_address, expires, NULL, 1);
+}
+
+/** An attempt to resolve <b>address</b> failed at some OR.
+ * Increment the number of resolve failures we have on record
+ * for it, and then return that number.
+ */
+int
+client_dns_incr_failures(const char *address)
+{
+ addressmap_entry_t *ent = strmap_get(addressmap, address);
+ if (!ent) {
+ ent = tor_malloc_zero(sizeof(addressmap_entry_t));
+ ent->expires = time(NULL) + MAX_DNS_ENTRY_AGE;
+ strmap_set(addressmap,address,ent);
+ }
+ if (ent->num_resolve_failures < SHORT_MAX)
+ ++ent->num_resolve_failures; /* don't overflow */
+ log_info(LD_APP, "Address %s now has %d resolve failures.",
+ safe_str_client(address),
+ ent->num_resolve_failures);
+ return ent->num_resolve_failures;
+}
+
+/** If <b>address</b> is in the client DNS addressmap, reset
+ * the number of resolve failures we have on record for it.
+ * This is used when we fail a stream because it won't resolve:
+ * otherwise future attempts on that address will only try once.
+ */
+void
+client_dns_clear_failures(const char *address)
+{
+ addressmap_entry_t *ent = strmap_get(addressmap, address);
+ if (ent)
+ ent->num_resolve_failures = 0;
+}
+
+/** Record the fact that <b>address</b> resolved to <b>name</b>.
+ * We can now use this in subsequent streams via addressmap_rewrite()
+ * so we can more correctly choose an exit that will allow <b>address</b>.
+ *
+ * If <b>exitname</b> is defined, then append the addresses with
+ * ".exitname.exit" before registering the mapping.
+ *
+ * If <b>ttl</b> is nonnegative, the mapping will be valid for
+ * <b>ttl</b>seconds; otherwise, we use the default.
+ */
+static void
+client_dns_set_addressmap_impl(entry_connection_t *for_conn,
+ const char *address, const char *name,
+ const char *exitname,
+ int ttl)
+{
+ char *extendedaddress=NULL, *extendedval=NULL;
+ (void)for_conn;
+
+ tor_assert(address);
+ tor_assert(name);
+
+ if (ttl<0)
+ ttl = DEFAULT_DNS_TTL;
+ else
+ ttl = dns_clip_ttl(ttl);
+
+ if (exitname) {
+ /* XXXX fails to ever get attempts to get an exit address of
+ * google.com.digest[=~]nickname.exit; we need a syntax for this that
+ * won't make strict RFC952-compliant applications (like us) barf. */
+ tor_asprintf(&extendedaddress,
+ "%s.%s.exit", address, exitname);
+ tor_asprintf(&extendedval,
+ "%s.%s.exit", name, exitname);
+ } else {
+ tor_asprintf(&extendedaddress,
+ "%s", address);
+ tor_asprintf(&extendedval,
+ "%s", name);
+ }
+ addressmap_register(extendedaddress, extendedval,
+ time(NULL) + ttl, ADDRMAPSRC_DNS, 0, 0);
+ tor_free(extendedaddress);
+}
+
+/** Record the fact that <b>address</b> resolved to <b>val</b>.
+ * We can now use this in subsequent streams via addressmap_rewrite()
+ * so we can more correctly choose an exit that will allow <b>address</b>.
+ *
+ * If <b>exitname</b> is defined, then append the addresses with
+ * ".exitname.exit" before registering the mapping.
+ *
+ * If <b>ttl</b> is nonnegative, the mapping will be valid for
+ * <b>ttl</b>seconds; otherwise, we use the default.
+ */
+void
+client_dns_set_addressmap(entry_connection_t *for_conn,
+ const char *address,
+ const tor_addr_t *val,
+ const char *exitname,
+ int ttl)
+{
+ tor_addr_t addr_tmp;
+ char valbuf[TOR_ADDR_BUF_LEN];
+
+ tor_assert(address);
+ tor_assert(val);
+
+ if (tor_addr_parse(&addr_tmp, address) >= 0)
+ return; /* If address was an IP address already, don't add a mapping. */
+
+ if (tor_addr_family(val) == AF_INET) {
+ if (! for_conn->cache_ipv4_answers)
+ return;
+ } else if (tor_addr_family(val) == AF_INET6) {
+ if (! for_conn->cache_ipv6_answers)
+ return;
+ }
+
+ if (! tor_addr_to_str(valbuf, val, sizeof(valbuf), 1))
+ return;
+
+ client_dns_set_addressmap_impl(for_conn, address, valbuf, exitname, ttl);
+}
+
+/** Add a cache entry noting that <b>address</b> (ordinarily a dotted quad)
+ * resolved via a RESOLVE_PTR request to the hostname <b>v</b>.
+ *
+ * If <b>exitname</b> is defined, then append the addresses with
+ * ".exitname.exit" before registering the mapping.
+ *
+ * If <b>ttl</b> is nonnegative, the mapping will be valid for
+ * <b>ttl</b>seconds; otherwise, we use the default.
+ */
+void
+client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
+ const char *address, const char *v,
+ const char *exitname,
+ int ttl)
+{
+ char *s = NULL;
+ {
+ tor_addr_t tmp_addr;
+ sa_family_t f = tor_addr_parse(&tmp_addr, address);
+ if ((f == AF_INET && ! for_conn->cache_ipv4_answers) ||
+ (f == AF_INET6 && ! for_conn->cache_ipv6_answers))
+ return;
+ }
+ tor_asprintf(&s, "REVERSE[%s]", address);
+ client_dns_set_addressmap_impl(for_conn, s, v, exitname, ttl);
+ tor_free(s);
+}
+
+/* By default, we hand out 127.192.0.1 through 127.254.254.254.
+ * These addresses should map to localhost, so even if the
+ * application accidentally tried to connect to them directly (not
+ * via Tor), it wouldn't get too far astray.
+ *
+ * These options are configured by parse_virtual_addr_network().
+ */
+
+static virtual_addr_conf_t virtaddr_conf_ipv4;
+static virtual_addr_conf_t virtaddr_conf_ipv6;
+
+/** Read a netmask of the form 127.192.0.0/10 from "val", and check whether
+ * it's a valid set of virtual addresses to hand out in response to MAPADDRESS
+ * requests. Return 0 on success; set *msg (if provided) to a newly allocated
+ * string and return -1 on failure. If validate_only is false, sets the
+ * actual virtual address range to the parsed value. */
+int
+parse_virtual_addr_network(const char *val, sa_family_t family,
+ int validate_only,
+ char **msg)
+{
+ const int ipv6 = (family == AF_INET6);
+ tor_addr_t addr;
+ maskbits_t bits;
+ const int max_bits = ipv6 ? 40 : 16;
+ virtual_addr_conf_t *conf = ipv6 ? &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+
+ if (tor_addr_parse_mask_ports(val, 0, &addr, &bits, NULL, NULL) < 0) {
+ if (msg)
+ tor_asprintf(msg, "Error parsing VirtualAddressNetwork%s %s",
+ ipv6?"IPv6":"", val);
+ return -1;
+ }
+ if (tor_addr_family(&addr) != family) {
+ if (msg)
+ tor_asprintf(msg, "Incorrect address type for VirtualAddressNetwork%s",
+ ipv6?"IPv6":"");
+ return -1;
+ }
+#if 0
+ if (port_min != 1 || port_max != 65535) {
+ if (msg)
+ tor_asprintf(msg, "Can't specify ports on VirtualAddressNetwork%s",
+ ipv6?"IPv6":"");
+ return -1;
+ }
+#endif
+
+ if (bits > max_bits) {
+ if (msg)
+ tor_asprintf(msg, "VirtualAddressNetwork%s expects a /%d "
+ "network or larger",ipv6?"IPv6":"", max_bits);
+ return -1;
+ }
+
+ if (validate_only)
+ return 0;
+
+ tor_addr_copy(&conf->addr, &addr);
+ conf->bits = bits;
+
+ return 0;
+}
+
+/**
+ * Return true iff <b>addr</b> is likely to have been returned by
+ * client_dns_get_unused_address.
+ **/
+int
+address_is_in_virtual_range(const char *address)
+{
+ tor_addr_t addr;
+ tor_assert(address);
+ if (!strcasecmpend(address, ".virtual")) {
+ return 1;
+ } else if (tor_addr_parse(&addr, address) >= 0) {
+ const virtual_addr_conf_t *conf = (tor_addr_family(&addr) == AF_INET6) ?
+ &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+ if (tor_addr_compare_masked(&addr, &conf->addr, conf->bits, CMP_EXACT)==0)
+ return 1;
+ }
+ return 0;
+}
+
+/** Return a random address conforming to the virtual address configuration
+ * in <b>conf</b>.
+ */
+STATIC void
+get_random_virtual_addr(const virtual_addr_conf_t *conf, tor_addr_t *addr_out)
+{
+ uint8_t tmp[4];
+ const uint8_t *addr_bytes;
+ uint8_t bytes[16];
+ const int ipv6 = tor_addr_family(&conf->addr) == AF_INET6;
+ const int total_bytes = ipv6 ? 16 : 4;
+
+ tor_assert(conf->bits <= total_bytes * 8);
+
+ /* Set addr_bytes to the bytes of the virtual network, in host order */
+ if (ipv6) {
+ addr_bytes = tor_addr_to_in6_addr8(&conf->addr);
+ } else {
+ set_uint32(tmp, tor_addr_to_ipv4n(&conf->addr));
+ addr_bytes = tmp;
+ }
+
+ /* Get an appropriate number of random bytes. */
+ crypto_rand((char*)bytes, total_bytes);
+
+ /* Now replace the first "conf->bits" bits of 'bytes' with addr_bytes*/
+ if (conf->bits >= 8)
+ memcpy(bytes, addr_bytes, conf->bits / 8);
+ if (conf->bits & 7) {
+ uint8_t mask = 0xff >> (conf->bits & 7);
+ bytes[conf->bits/8] &= mask;
+ bytes[conf->bits/8] |= addr_bytes[conf->bits/8] & ~mask;
+ }
+
+ if (ipv6)
+ tor_addr_from_ipv6_bytes(addr_out, (char*) bytes);
+ else
+ tor_addr_from_ipv4n(addr_out, get_uint32(bytes));
+
+ tor_assert(tor_addr_compare_masked(addr_out, &conf->addr,
+ conf->bits, CMP_EXACT)==0);
+}
+
+/** Return a newly allocated string holding an address of <b>type</b>
+ * (one of RESOLVED_TYPE_{IPV4|HOSTNAME}) that has not yet been mapped,
+ * and that is very unlikely to be the address of any real host.
+ *
+ * May return NULL if we have run out of virtual addresses.
+ */
+static char *
+addressmap_get_virtual_address(int type)
+{
+ char buf[64];
+ tor_assert(addressmap);
+
+ if (type == RESOLVED_TYPE_HOSTNAME) {
+ char rand[10];
+ do {
+ crypto_rand(rand, sizeof(rand));
+ base32_encode(buf,sizeof(buf),rand,sizeof(rand));
+ strlcat(buf, ".virtual", sizeof(buf));
+ } while (strmap_get(addressmap, buf));
+ return tor_strdup(buf);
+ } else if (type == RESOLVED_TYPE_IPV4 || type == RESOLVED_TYPE_IPV6) {
+ const int ipv6 = (type == RESOLVED_TYPE_IPV6);
+ const virtual_addr_conf_t *conf = ipv6 ?
+ &virtaddr_conf_ipv6 : &virtaddr_conf_ipv4;
+
+ /* Don't try more than 1000 times. This gives us P < 1e-9 for
+ * failing to get a good address so long as the address space is
+ * less than ~97.95% full. That's always going to be true under
+ * sensible circumstances for an IPv6 /10, and it's going to be
+ * true for an IPv4 /10 as long as we've handed out less than
+ * 4.08 million addresses. */
+ uint32_t attempts = 1000;
+
+ tor_addr_t addr;
+
+ while (attempts--) {
+ get_random_virtual_addr(conf, &addr);
+
+ if (!ipv6) {
+ /* Don't hand out any .0 or .255 address. */
+ const uint32_t a = tor_addr_to_ipv4h(&addr);
+ if ((a & 0xff) == 0 || (a & 0xff) == 0xff)
+ continue;
+ }
+
+ tor_addr_to_str(buf, &addr, sizeof(buf), 1);
+ if (!strmap_get(addressmap, buf)) {
+ /* XXXX This code is to make sure I didn't add an undecorated version
+ * by mistake. I hope it's needless. */
+ char tmp[TOR_ADDR_BUF_LEN];
+ tor_addr_to_str(buf, &addr, sizeof(tmp), 0);
+ if (strmap_get(addressmap, tmp)) {
+ log_warn(LD_BUG, "%s wasn't in the addressmap, but %s was.",
+ buf, tmp);
+ continue;
+ }
+
+ return tor_strdup(buf);
+ }
+ }
+ log_warn(LD_CONFIG, "Ran out of virtual addresses!");
+ return NULL;
+ } else {
+ log_warn(LD_BUG, "Called with unsupported address type (%d)", type);
+ return NULL;
+ }
+}
+
+/** A controller has requested that we map some address of type
+ * <b>type</b> to the address <b>new_address</b>. Choose an address
+ * that is unlikely to be used, and map it, and return it in a newly
+ * allocated string. If another address of the same type is already
+ * mapped to <b>new_address</b>, try to return a copy of that address.
+ *
+ * The string in <b>new_address</b> may be freed or inserted into a map
+ * as appropriate. May return NULL if are out of virtual addresses.
+ **/
+const char *
+addressmap_register_virtual_address(int type, char *new_address)
+{
+ char **addrp;
+ virtaddress_entry_t *vent;
+ int vent_needs_to_be_added = 0;
+
+ tor_assert(new_address);
+ tor_assert(addressmap);
+ tor_assert(virtaddress_reversemap);
+
+ vent = strmap_get(virtaddress_reversemap, new_address);
+ if (!vent) {
+ vent = tor_malloc_zero(sizeof(virtaddress_entry_t));
+ vent_needs_to_be_added = 1;
+ }
+
+ if (type == RESOLVED_TYPE_IPV4)
+ addrp = &vent->ipv4_address;
+ else if (type == RESOLVED_TYPE_IPV6)
+ addrp = &vent->ipv6_address;
+ else
+ addrp = &vent->hostname_address;
+
+ if (*addrp) {
+ addressmap_entry_t *ent = strmap_get(addressmap, *addrp);
+ if (ent && ent->new_address &&
+ !strcasecmp(new_address, ent->new_address)) {
+ tor_free(new_address);
+ tor_assert(!vent_needs_to_be_added);
+ return tor_strdup(*addrp);
+ } else {
+ log_warn(LD_BUG,
+ "Internal confusion: I thought that '%s' was mapped to by "
+ "'%s', but '%s' really maps to '%s'. This is a harmless bug.",
+ safe_str_client(new_address),
+ safe_str_client(*addrp),
+ safe_str_client(*addrp),
+ ent?safe_str_client(ent->new_address):"(nothing)");
+ }
+ }
+
+ tor_free(*addrp);
+ *addrp = addressmap_get_virtual_address(type);
+ if (!*addrp) {
+ tor_free(vent);
+ tor_free(new_address);
+ return NULL;
+ }
+ log_info(LD_APP, "Registering map from %s to %s", *addrp, new_address);
+ if (vent_needs_to_be_added)
+ strmap_set(virtaddress_reversemap, new_address, vent);
+ addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_AUTOMAP, 0, 0);
+
+#if 0
+ {
+ /* Try to catch possible bugs */
+ addressmap_entry_t *ent;
+ ent = strmap_get(addressmap, *addrp);
+ tor_assert(ent);
+ tor_assert(!strcasecmp(ent->new_address,new_address));
+ vent = strmap_get(virtaddress_reversemap, new_address);
+ tor_assert(vent);
+ tor_assert(!strcasecmp(*addrp,
+ (type == RESOLVED_TYPE_IPV4) ?
+ vent->ipv4_address : vent->hostname_address));
+ log_info(LD_APP, "Map from %s to %s okay.",
+ safe_str_client(*addrp),
+ safe_str_client(new_address));
+ }
+#endif
+
+ return *addrp;
+}
+
+/** Return 1 if <b>address</b> has funny characters in it like colons. Return
+ * 0 if it's fine, or if we're configured to allow it anyway. <b>client</b>
+ * should be true if we're using this address as a client; false if we're
+ * using it as a server.
+ */
+int
+address_is_invalid_destination(const char *address, int client)
+{
+ if (client) {
+ if (get_options()->AllowNonRFC953Hostnames)
+ return 0;
+ } else {
+ if (get_options()->ServerDNSAllowNonRFC953Hostnames)
+ return 0;
+ }
+
+ /* It might be an IPv6 address! */
+ {
+ tor_addr_t a;
+ if (tor_addr_parse(&a, address) >= 0)
+ return 0;
+ }
+
+ while (*address) {
+ if (TOR_ISALNUM(*address) ||
+ *address == '-' ||
+ *address == '.' ||
+ *address == '_') /* Underscore is not allowed, but Windows does it
+ * sometimes, just to thumb its nose at the IETF. */
+ ++address;
+ else
+ return 1;
+ }
+ return 0;
+}
+
+/** Iterate over all address mappings which have expiry times between
+ * min_expires and max_expires, inclusive. If sl is provided, add an
+ * "old-addr new-addr expiry" string to sl for each mapping, omitting
+ * the expiry time if want_expiry is false. If sl is NULL, remove the
+ * mappings.
+ */
+void
+addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
+ time_t max_expires, int want_expiry)
+{
+ strmap_iter_t *iter;
+ const char *key;
+ void *val_;
+ addressmap_entry_t *val;
+
+ if (!addressmap)
+ addressmap_init();
+
+ for (iter = strmap_iter_init(addressmap); !strmap_iter_done(iter); ) {
+ strmap_iter_get(iter, &key, &val_);
+ val = val_;
+ if (val->expires >= min_expires && val->expires <= max_expires) {
+ if (!sl) {
+ iter = strmap_iter_next_rmv(addressmap,iter);
+ addressmap_ent_remove(key, val);
+ continue;
+ } else if (val->new_address) {
+ const char *src_wc = val->src_wildcard ? "*." : "";
+ const char *dst_wc = val->dst_wildcard ? "*." : "";
+ if (want_expiry) {
+ if (val->expires < 3 || val->expires == TIME_MAX)
+ smartlist_add_asprintf(sl, "%s%s %s%s NEVER",
+ src_wc, key, dst_wc, val->new_address);
+ else {
+ char time[ISO_TIME_LEN+1];
+ format_iso_time(time, val->expires);
+ smartlist_add_asprintf(sl, "%s%s %s%s \"%s\"",
+ src_wc, key, dst_wc, val->new_address,
+ time);
+ }
+ } else {
+ smartlist_add_asprintf(sl, "%s%s %s%s",
+ src_wc, key, dst_wc, val->new_address);
+ }
+ }
+ }
+ iter = strmap_iter_next(addressmap,iter);
+ }
+}
+
diff --git a/src/or/addressmap.h b/src/or/addressmap.h
new file mode 100644
index 000000000..417832b31
--- /dev/null
+++ b/src/or/addressmap.h
@@ -0,0 +1,62 @@
+/* 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 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);
+void addressmap_clean(time_t now);
+void addressmap_clear_configured(void);
+void addressmap_clear_transient(void);
+void addressmap_free_all(void);
+#define AMR_FLAG_USE_IPV4_DNS (1u<<0)
+#define AMR_FLAG_USE_IPV6_DNS (1u<<1)
+int addressmap_rewrite(char *address, size_t maxlen, unsigned flags,
+ time_t *expires_out,
+ addressmap_entry_source_t *exit_source_out);
+int addressmap_rewrite_reverse(char *address, size_t maxlen, unsigned flags,
+ time_t *expires_out);
+int addressmap_have_mapping(const char *address, int update_timeout);
+
+void addressmap_register(const char *address, char *new_address,
+ time_t expires, addressmap_entry_source_t source,
+ const int address_wildcard,
+ const int new_address_wildcard);
+int parse_virtual_addr_network(const char *val,
+ sa_family_t family, int validate_only,
+ char **msg);
+int client_dns_incr_failures(const char *address);
+void client_dns_clear_failures(const char *address);
+void client_dns_set_addressmap(entry_connection_t *for_conn,
+ const char *address, const tor_addr_t *val,
+ const char *exitname, int ttl);
+const char *addressmap_register_virtual_address(int type, char *new_address);
+void addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
+ time_t max_expires, int want_expiry);
+int address_is_in_virtual_range(const char *addr);
+void clear_trackexithost_mappings(const char *exitname);
+void client_dns_set_reverse_addressmap(entry_connection_t *for_conn,
+ const char *address, const char *v,
+ const char *exitname, int ttl);
+int addressmap_address_should_automap(const char *address,
+ const or_options_t *options);
+
+#ifdef ADDRESSMAP_PRIVATE
+typedef struct virtual_addr_conf_t {
+ tor_addr_t addr;
+ maskbits_t bits;
+} virtual_addr_conf_t;
+
+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 ad5ab83e4..033f86288 100644
--- a/src/or/buffers.c
+++ b/src/or/buffers.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,12 +12,14 @@
**/
#define BUFFERS_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
#include "config.h"
#include "connection_edge.h"
#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
@@ -62,16 +64,6 @@ static int parse_socks_client(const uint8_t *data, size_t datalen,
/* Chunk manipulation functions */
-/** A single chunk on a buffer or in a freelist. */
-typedef struct chunk_t {
- struct chunk_t *next; /**< The next chunk on the buffer or freelist. */
- size_t datalen; /**< The number of bytes stored in this chunk */
- size_t memlen; /**< The number of usable bytes of storage in <b>mem</b>. */
- char *data; /**< A pointer to the first byte of data stored in <b>mem</b>. */
- char mem[FLEXIBLE_ARRAY_MEMBER]; /**< The actual memory used for storage in
- * this chunk. */
-} chunk_t;
-
#define CHUNK_HEADER_LEN STRUCT_OFFSET(chunk_t, mem[0])
/** Return the number of bytes needed to allocate a chunk to hold
@@ -108,6 +100,9 @@ chunk_repack(chunk_t *chunk)
chunk->data = &chunk->mem[0];
}
+/** Keep track of total size of allocated chunks for consistency asserts */
+static size_t total_bytes_allocated_in_chunks = 0;
+
#if defined(ENABLE_BUF_FREELISTS) || defined(RUNNING_DOXYGEN)
/** A freelist of chunks. */
typedef struct chunk_freelist_t {
@@ -147,7 +142,8 @@ static INLINE chunk_freelist_t *
get_freelist(size_t alloc)
{
int i;
- for (i=0; freelists[i].alloc_size <= alloc; ++i) {
+ for (i=0; (freelists[i].alloc_size <= alloc &&
+ freelists[i].alloc_size); ++i ) {
if (freelists[i].alloc_size == alloc) {
return &freelists[i];
}
@@ -171,6 +167,11 @@ chunk_free_unchecked(chunk_t *chunk)
} else {
if (freelist)
++freelist->n_free;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(alloc == chunk->DBG_alloc);
+#endif
+ tor_assert(total_bytes_allocated_in_chunks >= alloc);
+ total_bytes_allocated_in_chunks -= alloc;
tor_free(chunk);
}
}
@@ -192,13 +193,15 @@ chunk_new_with_alloc_size(size_t alloc)
freelist->lowest_length = freelist->cur_length;
++freelist->n_hit;
} else {
- /* XXXX take advantage of tor_malloc_roundup, once we know how that
- * affects freelists. */
if (freelist)
++freelist->n_alloc;
else
++n_freelist_miss;
ch = tor_malloc(alloc);
+#ifdef DEBUG_CHUNK_ALLOC
+ ch->DBG_alloc = alloc;
+#endif
+ total_bytes_allocated_in_chunks += alloc;
}
ch->next = NULL;
ch->datalen = 0;
@@ -210,16 +213,28 @@ chunk_new_with_alloc_size(size_t alloc)
static void
chunk_free_unchecked(chunk_t *chunk)
{
+ if (!chunk)
+ return;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(CHUNK_ALLOC_SIZE(chunk->memlen) == chunk->DBG_alloc);
+#endif
+ tor_assert(total_bytes_allocated_in_chunks >=
+ CHUNK_ALLOC_SIZE(chunk->memlen));
+ total_bytes_allocated_in_chunks -= CHUNK_ALLOC_SIZE(chunk->memlen);
tor_free(chunk);
}
static INLINE chunk_t *
chunk_new_with_alloc_size(size_t alloc)
{
chunk_t *ch;
- ch = tor_malloc_roundup(&alloc);
+ ch = tor_malloc(alloc);
ch->next = NULL;
ch->datalen = 0;
+#ifdef DEBUG_CHUNK_ALLOC
+ ch->DBG_alloc = alloc;
+#endif
ch->memlen = CHUNK_SIZE_WITH_ALLOC(alloc);
+ total_bytes_allocated_in_chunks += alloc;
ch->data = &ch->mem[0];
return ch;
}
@@ -231,11 +246,18 @@ static INLINE chunk_t *
chunk_grow(chunk_t *chunk, size_t sz)
{
off_t offset;
+ size_t memlen_orig = chunk->memlen;
tor_assert(sz > chunk->memlen);
offset = chunk->data - chunk->mem;
chunk = tor_realloc(chunk, CHUNK_ALLOC_SIZE(sz));
chunk->memlen = sz;
chunk->data = chunk->mem + offset;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(chunk->DBG_alloc == CHUNK_ALLOC_SIZE(memlen_orig));
+ chunk->DBG_alloc = CHUNK_ALLOC_SIZE(sz);
+#endif
+ total_bytes_allocated_in_chunks +=
+ CHUNK_ALLOC_SIZE(sz) - CHUNK_ALLOC_SIZE(memlen_orig);
return chunk;
}
@@ -260,12 +282,14 @@ preferred_chunk_size(size_t target)
}
/** Remove from the freelists most chunks that have not been used since the
- * last call to buf_shrink_freelists(). */
-void
+ * last call to buf_shrink_freelists(). Return the amount of memory
+ * freed. */
+size_t
buf_shrink_freelists(int free_all)
{
#ifdef ENABLE_BUF_FREELISTS
int i;
+ size_t total_freed = 0;
disable_control_logging();
for (i = 0; freelists[i].alloc_size; ++i) {
int slack = freelists[i].slack;
@@ -281,7 +305,7 @@ buf_shrink_freelists(int free_all)
chunk_t **chp = &freelists[i].head;
chunk_t *chunk;
while (n_to_skip) {
- if (! (*chp)->next) {
+ if (!(*chp) || ! (*chp)->next) {
log_warn(LD_BUG, "I wanted to skip %d chunks in the freelist for "
"%d-byte chunks, but only found %d. (Length %d)",
orig_n_to_skip, (int)freelists[i].alloc_size,
@@ -297,6 +321,13 @@ buf_shrink_freelists(int free_all)
*chp = NULL;
while (chunk) {
chunk_t *next = chunk->next;
+#ifdef DEBUG_CHUNK_ALLOC
+ tor_assert(chunk->DBG_alloc == CHUNK_ALLOC_SIZE(chunk->memlen));
+#endif
+ tor_assert(total_bytes_allocated_in_chunks >=
+ CHUNK_ALLOC_SIZE(chunk->memlen));
+ total_bytes_allocated_in_chunks -= CHUNK_ALLOC_SIZE(chunk->memlen);
+ total_freed += CHUNK_ALLOC_SIZE(chunk->memlen);
tor_free(chunk);
chunk = next;
--n_to_free;
@@ -314,18 +345,21 @@ buf_shrink_freelists(int free_all)
}
// tor_assert(!n_to_free);
freelists[i].cur_length = new_length;
+ tor_assert(orig_n_to_skip == new_length);
log_info(LD_MM, "Cleaned freelist for %d-byte chunks: original "
- "length %d, kept %d, dropped %d.",
+ "length %d, kept %d, dropped %d. New length is %d",
(int)freelists[i].alloc_size, orig_length,
- orig_n_to_skip, orig_n_to_free);
+ orig_n_to_skip, orig_n_to_free, new_length);
}
freelists[i].lowest_length = freelists[i].cur_length;
assert_freelist_ok(&freelists[i]);
}
done:
enable_control_logging();
+ return total_freed;
#else
(void) free_all;
+ return 0;
#endif
}
@@ -336,11 +370,11 @@ buf_dump_freelist_sizes(int severity)
{
#ifdef ENABLE_BUF_FREELISTS
int i;
- log(severity, LD_MM, "====== Buffer freelists:");
+ tor_log(severity, LD_MM, "====== Buffer freelists:");
for (i = 0; freelists[i].alloc_size; ++i) {
uint64_t total = ((uint64_t)freelists[i].cur_length) *
freelists[i].alloc_size;
- log(severity, LD_MM,
+ tor_log(severity, LD_MM,
U64_FORMAT" bytes in %d %d-byte chunks ["U64_FORMAT
" misses; "U64_FORMAT" frees; "U64_FORMAT" hits]",
U64_PRINTF_ARG(total),
@@ -349,35 +383,23 @@ buf_dump_freelist_sizes(int severity)
U64_PRINTF_ARG(freelists[i].n_free),
U64_PRINTF_ARG(freelists[i].n_hit));
}
- log(severity, LD_MM, U64_FORMAT" allocations in non-freelist sizes",
+ tor_log(severity, LD_MM, U64_FORMAT" allocations in non-freelist sizes",
U64_PRINTF_ARG(n_freelist_miss));
#else
(void)severity;
#endif
}
-/** Magic value for buf_t.magic, to catch pointer errors. */
-#define BUFFER_MAGIC 0xB0FFF312u
-/** A resizeable buffer, optimized for reading and writing. */
-struct buf_t {
- uint32_t magic; /**< Magic cookie for debugging: Must be set to
- * BUFFER_MAGIC. */
- size_t datalen; /**< How many bytes is this buffer holding right now? */
- size_t default_chunk_size; /**< Don't allocate any chunks smaller than
- * this for this buffer. */
- chunk_t *head; /**< First chunk in the list, or NULL for none. */
- chunk_t *tail; /**< Last chunk in the list, or NULL for none. */
-};
-
/** Collapse data from the first N chunks from <b>buf</b> into buf->head,
* growing it as necessary, until buf->head has the first <b>bytes</b> bytes
* of data from the buffer, or until buf->head has all the data in <b>buf</b>.
*
* If <b>nulterminate</b> is true, ensure that there is a 0 byte in
* buf->head->mem right after all the data. */
-static void
+STATIC void
buf_pullup(buf_t *buf, size_t bytes, int nulterminate)
{
+ /* XXXX nothing uses nulterminate; remove it. */
chunk_t *dest, *src;
size_t capacity;
if (!buf->head)
@@ -449,6 +471,20 @@ buf_pullup(buf_t *buf, size_t bytes, int nulterminate)
check();
}
+#ifdef TOR_UNIT_TESTS
+void
+buf_get_first_chunk_data(const buf_t *buf, const char **cp, size_t *sz)
+{
+ if (!buf || !buf->head) {
+ *cp = NULL;
+ *sz = 0;
+ } else {
+ *cp = buf->head->data;
+ *sz = buf->head->datalen;
+ }
+}
+#endif
+
/** Resize buf so it won't hold extra memory that we haven't been
* using lately.
*/
@@ -503,6 +539,12 @@ buf_new(void)
return buf;
}
+size_t
+buf_get_default_chunk_size(const buf_t *buf)
+{
+ return buf->default_chunk_size;
+}
+
/** Remove all data from <b>buf</b>. */
void
buf_clear(buf_t *buf)
@@ -530,7 +572,7 @@ buf_allocation(const buf_t *buf)
size_t total = 0;
const chunk_t *chunk;
for (chunk = buf->head; chunk; chunk = chunk->next) {
- total += chunk->memlen;
+ total += CHUNK_ALLOC_SIZE(chunk->memlen);
}
return total;
}
@@ -563,6 +605,10 @@ static chunk_t *
chunk_copy(const chunk_t *in_chunk)
{
chunk_t *newch = tor_memdup(in_chunk, CHUNK_ALLOC_SIZE(in_chunk->memlen));
+ total_bytes_allocated_in_chunks += CHUNK_ALLOC_SIZE(in_chunk->memlen);
+#ifdef DEBUG_CHUNK_ALLOC
+ newch->DBG_alloc = CHUNK_ALLOC_SIZE(in_chunk->memlen);
+#endif
newch->next = NULL;
if (in_chunk->data) {
off_t offset = in_chunk->data - in_chunk->mem;
@@ -598,6 +644,7 @@ static chunk_t *
buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
{
chunk_t *chunk;
+ struct timeval now;
if (CHUNK_ALLOC_SIZE(capacity) < buf->default_chunk_size) {
chunk = chunk_new_with_alloc_size(buf->default_chunk_size);
} else if (capped && CHUNK_ALLOC_SIZE(capacity) > MAX_CHUNK_ALLOC) {
@@ -605,6 +652,10 @@ buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
} else {
chunk = chunk_new_with_alloc_size(preferred_chunk_size(capacity));
}
+
+ tor_gettimeofday_cached_monotonic(&now);
+ chunk->inserted_time = (uint32_t)tv_to_msec(&now);
+
if (buf->tail) {
tor_assert(buf->head);
buf->tail->next = chunk;
@@ -617,6 +668,26 @@ buf_add_chunk_with_capacity(buf_t *buf, size_t capacity, int capped)
return chunk;
}
+/** Return the age of the oldest chunk in the buffer <b>buf</b>, in
+ * milliseconds. Requires the current time, in truncated milliseconds since
+ * the epoch, as its input <b>now</b>.
+ */
+uint32_t
+buf_get_oldest_chunk_timestamp(const buf_t *buf, uint32_t now)
+{
+ if (buf->head) {
+ return now - buf->head->inserted_time;
+ } else {
+ return 0;
+ }
+}
+
+size_t
+buf_get_total_allocation(void)
+{
+ return total_bytes_allocated_in_chunks;
+}
+
/** Read up to <b>at_most</b> bytes from the socket <b>fd</b> into
* <b>chunk</b> (which must be on <b>buf</b>). If we get an EOF, set
* *<b>reached_eof</b> to 1. Return -1 on error, 0 on eof or blocking,
@@ -1046,28 +1117,34 @@ cell_command_is_var_length(uint8_t command, int linkproto)
int
fetch_var_cell_from_buf(buf_t *buf, var_cell_t **out, int linkproto)
{
- char hdr[VAR_CELL_HEADER_SIZE];
+ char hdr[VAR_CELL_MAX_HEADER_SIZE];
var_cell_t *result;
uint8_t command;
uint16_t length;
+ const int wide_circ_ids = linkproto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS;
+ const int circ_id_len = get_circ_id_size(wide_circ_ids);
+ const unsigned header_len = get_var_cell_header_size(wide_circ_ids);
check();
*out = NULL;
- if (buf->datalen < VAR_CELL_HEADER_SIZE)
+ if (buf->datalen < header_len)
return 0;
- peek_from_buf(hdr, sizeof(hdr), buf);
+ peek_from_buf(hdr, header_len, buf);
- command = get_uint8(hdr+2);
+ command = get_uint8(hdr + circ_id_len);
if (!(cell_command_is_var_length(command, linkproto)))
return 0;
- length = ntohs(get_uint16(hdr+3));
- if (buf->datalen < (size_t)(VAR_CELL_HEADER_SIZE+length))
+ length = ntohs(get_uint16(hdr + circ_id_len + 1));
+ if (buf->datalen < (size_t)(header_len+length))
return 1;
result = var_cell_new(length);
result->command = command;
- result->circ_id = ntohs(get_uint16(hdr));
+ if (wide_circ_ids)
+ result->circ_id = ntohl(get_uint32(hdr));
+ else
+ result->circ_id = ntohs(get_uint16(hdr));
- buf_remove_from_front(buf, VAR_CELL_HEADER_SIZE);
+ buf_remove_from_front(buf, header_len);
peek_from_buf((char*) result->payload, length, buf);
buf_remove_from_front(buf, length);
check();
@@ -1126,30 +1203,36 @@ fetch_var_cell_from_evbuffer(struct evbuffer *buf, var_cell_t **out,
uint16_t cell_length;
var_cell_t *cell;
int result = 0;
+ const int wide_circ_ids = linkproto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS;
+ const int circ_id_len = get_circ_id_size(wide_circ_ids);
+ const unsigned header_len = get_var_cell_header_size(wide_circ_ids);
*out = NULL;
buf_len = evbuffer_get_length(buf);
- if (buf_len < VAR_CELL_HEADER_SIZE)
+ if (buf_len < header_len)
return 0;
- n = inspect_evbuffer(buf, &hdr, VAR_CELL_HEADER_SIZE, &free_hdr, NULL);
- tor_assert(n >= VAR_CELL_HEADER_SIZE);
+ n = inspect_evbuffer(buf, &hdr, header_len, &free_hdr, NULL);
+ tor_assert(n >= header_len);
- command = get_uint8(hdr+2);
+ command = get_uint8(hdr + circ_id_len);
if (!(cell_command_is_var_length(command, linkproto))) {
goto done;
}
- cell_length = ntohs(get_uint16(hdr+3));
- if (buf_len < (size_t)(VAR_CELL_HEADER_SIZE+cell_length)) {
+ cell_length = ntohs(get_uint16(hdr + circ_id_len + 1));
+ if (buf_len < (size_t)(header_len+cell_length)) {
result = 1; /* Not all here yet. */
goto done;
}
cell = var_cell_new(cell_length);
cell->command = command;
- cell->circ_id = ntohs(get_uint16(hdr));
- evbuffer_drain(buf, VAR_CELL_HEADER_SIZE);
+ if (wide_circ_ids)
+ cell->circ_id = ntohl(get_uint32(hdr));
+ else
+ cell->circ_id = ntohs(get_uint16(hdr));
+ evbuffer_drain(buf, header_len);
evbuffer_remove(buf, cell->payload, cell_length);
*out = cell;
result = 1;
@@ -1282,7 +1365,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;
@@ -1506,22 +1589,19 @@ log_unsafe_socks_warning(int socks_protocol, const char *address,
static ratelim_t socks_ratelim = RATELIM_INIT(SOCKS_WARN_INTERVAL);
const or_options_t *options = get_options();
- char *m = NULL;
if (! options->WarnUnsafeSocks)
return;
- if (safe_socks || (m = rate_limit_log(&socks_ratelim, approx_time()))) {
- log_warn(LD_APP,
+ if (safe_socks) {
+ log_fn_ratelim(&socks_ratelim, LOG_WARN, LD_APP,
"Your application (using socks%d to port %d) is giving "
"Tor only an IP address. Applications that do DNS resolves "
"themselves may leak information. Consider using Socks4A "
"(e.g. via privoxy or socat) instead. For more information, "
"please see https://wiki.torproject.org/TheOnionRouter/"
- "TorFAQ#SOCKSAndDNS.%s%s",
+ "TorFAQ#SOCKSAndDNS.%s",
socks_protocol,
(int)port,
- safe_socks ? " Rejecting." : "",
- m ? m : "");
- tor_free(m);
+ safe_socks ? " Rejecting." : "");
}
control_event_client_status(LOG_WARN,
"DANGEROUS_SOCKS PROTOCOL=SOCKS%d ADDRESS=%s:%d",
@@ -1693,6 +1773,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
@@ -1742,7 +1880,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return 0;
}
req->replylen = 2; /* 2 bytes of response */
- req->reply[0] = 5;
+ req->reply[0] = 1; /* authversion == 1 */
req->reply[1] = 0; /* authentication successful */
log_debug(LD_APP,
"socks5: Accepted username/password without checking.");
@@ -1773,6 +1911,7 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
if (req->socks_version != 5) { /* we need to negotiate a method */
unsigned char nummethods = (unsigned char)*(data+1);
+ int have_user_pass, have_no_auth;
int r=0;
tor_assert(!req->socks_version);
if (datalen < 2u+nummethods) {
@@ -1783,19 +1922,21 @@ parse_socks(const char *data, size_t datalen, socks_request_t *req,
return -1;
req->replylen = 2; /* 2 bytes of response */
req->reply[0] = 5; /* socks5 reply */
- if (memchr(data+2, SOCKS_NO_AUTH, nummethods)) {
- req->reply[1] = SOCKS_NO_AUTH; /* tell client to use "none" auth
- method */
- req->socks_version = 5; /* remember we've already negotiated auth */
- log_debug(LD_APP,"socks5: accepted method 0 (no authentication)");
- r=0;
- } else if (memchr(data+2, SOCKS_USER_PASS, nummethods)) {
+ have_user_pass = (memchr(data+2, SOCKS_USER_PASS, nummethods) !=NULL);
+ have_no_auth = (memchr(data+2, SOCKS_NO_AUTH, nummethods) !=NULL);
+ if (have_user_pass && !(have_no_auth && req->socks_prefer_no_auth)) {
req->auth_type = SOCKS_USER_PASS;
req->reply[1] = SOCKS_USER_PASS; /* tell client to use "user/pass"
auth method */
req->socks_version = 5; /* remember we've already negotiated auth */
log_debug(LD_APP,"socks5: accepted method 2 (username/password)");
r=0;
+ } else if (have_no_auth) {
+ req->reply[1] = SOCKS_NO_AUTH; /* tell client to use "none" auth
+ method */
+ req->socks_version = 5; /* remember we've already negotiated auth */
+ log_debug(LD_APP,"socks5: accepted method 0 (no authentication)");
+ r=0;
} else {
log_warn(LD_APP,
"socks5: offered methods don't include 'no auth' or "
@@ -2336,6 +2477,7 @@ write_to_buf_zlib(buf_t *buf, tor_zlib_state_t *state,
char *next;
size_t old_avail, avail;
int over = 0;
+
do {
int need_new_chunk = 0;
if (!buf->tail || ! CHUNK_REMAINING_CAPACITY(buf->tail)) {
diff --git a/src/or/buffers.h b/src/or/buffers.h
index a5886adc7..c90e14750 100644
--- a/src/or/buffers.h
+++ b/src/or/buffers.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,22 +9,28 @@
* \brief Header file for buffers.c.
**/
-#ifndef _TOR_BUFFERS_H
-#define _TOR_BUFFERS_H
+#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);
+size_t buf_get_default_chunk_size(const buf_t *buf);
void buf_free(buf_t *buf);
void buf_clear(buf_t *buf);
buf_t *buf_copy(const buf_t *buf);
void buf_shrink(buf_t *buf);
-void buf_shrink_freelists(int free_all);
+size_t buf_shrink_freelists(int free_all);
void buf_dump_freelist_sizes(int severity);
size_t buf_datalen(const buf_t *buf);
size_t buf_allocation(const buf_t *buf);
size_t buf_slack(const buf_t *buf);
+uint32_t buf_get_oldest_chunk_timestamp(const buf_t *buf, uint32_t now);
+size_t buf_get_total_allocation(void);
+
int read_to_buf(tor_socket_t s, size_t at_most, buf_t *buf, int *reached_eof,
int *socket_error);
int read_to_buf_tls(tor_tls_t *tls, size_t at_most, buf_t *buf);
@@ -51,6 +57,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 +74,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 +85,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 +94,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 +103,38 @@ 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);
+STATIC void buf_pullup(buf_t *buf, size_t bytes, int nulterminate);
+void buf_get_first_chunk_data(const buf_t *buf, const char **cp, size_t *sz);
+
+#define DEBUG_CHUNK_ALLOC
+/** A single chunk on a buffer or in a freelist. */
+typedef struct chunk_t {
+ struct chunk_t *next; /**< The next chunk on the buffer or freelist. */
+ size_t datalen; /**< The number of bytes stored in this chunk */
+ size_t memlen; /**< The number of usable bytes of storage in <b>mem</b>. */
+#ifdef DEBUG_CHUNK_ALLOC
+ size_t DBG_alloc;
+#endif
+ char *data; /**< A pointer to the first byte of data stored in <b>mem</b>. */
+ uint32_t inserted_time; /**< Timestamp in truncated ms since epoch
+ * when this chunk was inserted. */
+ char mem[FLEXIBLE_ARRAY_MEMBER]; /**< The actual memory used for storage in
+ * this chunk. */
+} chunk_t;
+
+/** Magic value for buf_t.magic, to catch pointer errors. */
+#define BUFFER_MAGIC 0xB0FFF312u
+/** A resizeable buffer, optimized for reading and writing. */
+struct buf_t {
+ uint32_t magic; /**< Magic cookie for debugging: Must be set to
+ * BUFFER_MAGIC. */
+ size_t datalen; /**< How many bytes is this buffer holding right now? */
+ size_t default_chunk_size; /**< Don't allocate any chunks smaller than
+ * this for this buffer. */
+ chunk_t *head; /**< First chunk in the list, or NULL for none. */
+ chunk_t *tail; /**< Last chunk in the list, or NULL for none. */
+};
#endif
#endif
diff --git a/src/or/channel.c b/src/or/channel.c
new file mode 100644
index 000000000..63af2f91c
--- /dev/null
+++ b/src/or/channel.c
@@ -0,0 +1,4186 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channel.c
+ * \brief OR-to-OR channel abstraction layer
+ **/
+
+/*
+ * Define this so channel.h gives us things only channel_t subclasses
+ * should touch.
+ */
+
+#define TOR_CHANNEL_INTERNAL_
+
+#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "circuitstats.h"
+#include "connection_or.h" /* For var_cell_free() */
+#include "circuitmux.h"
+#include "entrynodes.h"
+#include "geoip.h"
+#include "nodelist.h"
+#include "relay.h"
+#include "rephist.h"
+#include "router.h"
+#include "routerlist.h"
+
+/* Cell queue structure */
+
+typedef struct cell_queue_entry_s cell_queue_entry_t;
+struct cell_queue_entry_s {
+ TOR_SIMPLEQ_ENTRY(cell_queue_entry_s) next;
+ enum {
+ CELL_QUEUE_FIXED,
+ CELL_QUEUE_VAR,
+ CELL_QUEUE_PACKED
+ } type;
+ union {
+ struct {
+ cell_t *cell;
+ } fixed;
+ struct {
+ var_cell_t *var_cell;
+ } var;
+ struct {
+ packed_cell_t *packed_cell;
+ } packed;
+ } u;
+};
+
+/* Global lists of channels */
+
+/* All channel_t instances */
+static smartlist_t *all_channels = NULL;
+
+/* All channel_t instances not in ERROR or CLOSED states */
+static smartlist_t *active_channels = NULL;
+
+/* All channel_t instances in ERROR or CLOSED states */
+static smartlist_t *finished_channels = NULL;
+
+/* All channel_listener_t instances */
+static smartlist_t *all_listeners = NULL;
+
+/* All channel_listener_t instances in LISTENING state */
+static smartlist_t *active_listeners = NULL;
+
+/* All channel_listener_t instances in LISTENING state */
+static smartlist_t *finished_listeners = NULL;
+
+/* Counter for ID numbers */
+static uint64_t n_channels_allocated = 0;
+
+/* Digest->channel map
+ *
+ * Similar to the one used in connection_or.c, this maps from the identity
+ * digest of a remote endpoint to a channel_t to that endpoint. Channels
+ * should be placed here when registered and removed when they close or error.
+ * If more than one channel exists, follow the next_with_same_id pointer
+ * as a linked list.
+ */
+HT_HEAD(channel_idmap, channel_idmap_entry_s) channel_identity_map =
+ HT_INITIALIZER();
+
+typedef struct channel_idmap_entry_s {
+ HT_ENTRY(channel_idmap_entry_s) node;
+ uint8_t digest[DIGEST_LEN];
+ TOR_LIST_HEAD(channel_list_s, channel_s) channel_list;
+} channel_idmap_entry_t;
+
+static INLINE unsigned
+channel_idmap_hash(const channel_idmap_entry_t *ent)
+{
+ return (unsigned) siphash24g(ent->digest, DIGEST_LEN);
+}
+
+static INLINE int
+channel_idmap_eq(const channel_idmap_entry_t *a,
+ const channel_idmap_entry_t *b)
+{
+ return tor_memeq(a->digest, b->digest, DIGEST_LEN);
+}
+
+HT_PROTOTYPE(channel_idmap, channel_idmap_entry_s, node, channel_idmap_hash,
+ channel_idmap_eq);
+HT_GENERATE(channel_idmap, channel_idmap_entry_s, node, channel_idmap_hash,
+ channel_idmap_eq, 0.5, tor_malloc, tor_realloc, tor_free_);
+
+static cell_queue_entry_t * cell_queue_entry_dup(cell_queue_entry_t *q);
+static void cell_queue_entry_free(cell_queue_entry_t *q, int handed_off);
+static int cell_queue_entry_is_padding(cell_queue_entry_t *q);
+static cell_queue_entry_t *
+cell_queue_entry_new_fixed(cell_t *cell);
+static cell_queue_entry_t *
+cell_queue_entry_new_var(var_cell_t *var_cell);
+static int is_destroy_cell(channel_t *chan,
+ const cell_queue_entry_t *q, circid_t *circid_out);
+
+/* Functions to maintain the digest map */
+static void channel_add_to_digest_map(channel_t *chan);
+static void channel_remove_from_digest_map(channel_t *chan);
+
+/*
+ * Flush cells from just the outgoing queue without trying to get them
+ * from circuits; used internall by channel_flush_some_cells().
+ */
+static ssize_t
+channel_flush_some_cells_from_outgoing_queue(channel_t *chan,
+ ssize_t num_cells);
+static void channel_force_free(channel_t *chan);
+static void
+channel_free_list(smartlist_t *channels, int mark_for_close);
+static void
+channel_listener_free_list(smartlist_t *channels, int mark_for_close);
+static void channel_listener_force_free(channel_listener_t *chan_l);
+static void
+channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q);
+
+/***********************************
+ * Channel state utility functions *
+ **********************************/
+
+/**
+ * Indicate whether a given channel state is valid
+ */
+
+int
+channel_state_is_valid(channel_state_t state)
+{
+ int is_valid;
+
+ switch (state) {
+ case CHANNEL_STATE_CLOSED:
+ case CHANNEL_STATE_CLOSING:
+ case CHANNEL_STATE_ERROR:
+ case CHANNEL_STATE_MAINT:
+ case CHANNEL_STATE_OPENING:
+ case CHANNEL_STATE_OPEN:
+ is_valid = 1;
+ break;
+ case CHANNEL_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Indicate whether a given channel listener state is valid
+ */
+
+int
+channel_listener_state_is_valid(channel_listener_state_t state)
+{
+ int is_valid;
+
+ switch (state) {
+ case CHANNEL_LISTENER_STATE_CLOSED:
+ case CHANNEL_LISTENER_STATE_LISTENING:
+ case CHANNEL_LISTENER_STATE_CLOSING:
+ case CHANNEL_LISTENER_STATE_ERROR:
+ is_valid = 1;
+ break;
+ case CHANNEL_LISTENER_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Indicate whether a channel state transition is valid
+ *
+ * This function takes two channel states and indicates whether a
+ * transition between them is permitted (see the state definitions and
+ * transition table in or.h at the channel_state_t typedef).
+ */
+
+int
+channel_state_can_transition(channel_state_t from, channel_state_t to)
+{
+ int is_valid;
+
+ switch (from) {
+ case CHANNEL_STATE_CLOSED:
+ is_valid = (to == CHANNEL_STATE_OPENING);
+ break;
+ case CHANNEL_STATE_CLOSING:
+ is_valid = (to == CHANNEL_STATE_CLOSED ||
+ to == CHANNEL_STATE_ERROR);
+ break;
+ case CHANNEL_STATE_ERROR:
+ is_valid = 0;
+ break;
+ case CHANNEL_STATE_MAINT:
+ is_valid = (to == CHANNEL_STATE_CLOSING ||
+ to == CHANNEL_STATE_ERROR ||
+ to == CHANNEL_STATE_OPEN);
+ break;
+ case CHANNEL_STATE_OPENING:
+ is_valid = (to == CHANNEL_STATE_CLOSING ||
+ to == CHANNEL_STATE_ERROR ||
+ to == CHANNEL_STATE_OPEN);
+ break;
+ case CHANNEL_STATE_OPEN:
+ is_valid = (to == CHANNEL_STATE_CLOSING ||
+ to == CHANNEL_STATE_ERROR ||
+ to == CHANNEL_STATE_MAINT);
+ break;
+ case CHANNEL_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Indicate whether a channel listener state transition is valid
+ *
+ * This function takes two channel listener states and indicates whether a
+ * transition between them is permitted (see the state definitions and
+ * transition table in or.h at the channel_listener_state_t typedef).
+ */
+
+int
+channel_listener_state_can_transition(channel_listener_state_t from,
+ channel_listener_state_t to)
+{
+ int is_valid;
+
+ switch (from) {
+ case CHANNEL_LISTENER_STATE_CLOSED:
+ is_valid = (to == CHANNEL_LISTENER_STATE_LISTENING);
+ break;
+ case CHANNEL_LISTENER_STATE_CLOSING:
+ is_valid = (to == CHANNEL_LISTENER_STATE_CLOSED ||
+ to == CHANNEL_LISTENER_STATE_ERROR);
+ break;
+ case CHANNEL_LISTENER_STATE_ERROR:
+ is_valid = 0;
+ break;
+ case CHANNEL_LISTENER_STATE_LISTENING:
+ is_valid = (to == CHANNEL_LISTENER_STATE_CLOSING ||
+ to == CHANNEL_LISTENER_STATE_ERROR);
+ break;
+ case CHANNEL_LISTENER_STATE_LAST:
+ default:
+ is_valid = 0;
+ }
+
+ return is_valid;
+}
+
+/**
+ * Return a human-readable description for a channel state
+ */
+
+const char *
+channel_state_to_string(channel_state_t state)
+{
+ const char *descr;
+
+ switch (state) {
+ case CHANNEL_STATE_CLOSED:
+ descr = "closed";
+ break;
+ case CHANNEL_STATE_CLOSING:
+ descr = "closing";
+ break;
+ case CHANNEL_STATE_ERROR:
+ descr = "channel error";
+ break;
+ case CHANNEL_STATE_MAINT:
+ descr = "temporarily suspended for maintenance";
+ break;
+ case CHANNEL_STATE_OPENING:
+ descr = "opening";
+ break;
+ case CHANNEL_STATE_OPEN:
+ descr = "open";
+ break;
+ case CHANNEL_STATE_LAST:
+ default:
+ descr = "unknown or invalid channel state";
+ }
+
+ return descr;
+}
+
+/**
+ * Return a human-readable description for a channel listenier state
+ */
+
+const char *
+channel_listener_state_to_string(channel_listener_state_t state)
+{
+ const char *descr;
+
+ switch (state) {
+ case CHANNEL_LISTENER_STATE_CLOSED:
+ descr = "closed";
+ break;
+ case CHANNEL_LISTENER_STATE_CLOSING:
+ descr = "closing";
+ break;
+ case CHANNEL_LISTENER_STATE_ERROR:
+ descr = "channel listener error";
+ break;
+ case CHANNEL_LISTENER_STATE_LISTENING:
+ descr = "listening";
+ break;
+ case CHANNEL_LISTENER_STATE_LAST:
+ default:
+ descr = "unknown or invalid channel listener state";
+ }
+
+ return descr;
+}
+
+/***************************************
+ * Channel registration/unregistration *
+ ***************************************/
+
+/**
+ * Register a channel
+ *
+ * This function registers a newly created channel in the global lists/maps
+ * of active channels.
+ */
+
+void
+channel_register(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* No-op if already registered */
+ if (chan->registered) return;
+
+ log_debug(LD_CHANNEL,
+ "Registering channel %p (ID " U64_FORMAT ") "
+ "in state %s (%d) with digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state,
+ hex_str(chan->identity_digest, DIGEST_LEN));
+
+ /* Make sure we have all_channels, then add it */
+ if (!all_channels) all_channels = smartlist_new();
+ smartlist_add(all_channels, chan);
+
+ /* Is it finished? */
+ if (chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) {
+ /* Put it in the finished list, creating it if necessary */
+ if (!finished_channels) finished_channels = smartlist_new();
+ smartlist_add(finished_channels, chan);
+ } else {
+ /* Put it in the active list, creating it if necessary */
+ if (!active_channels) active_channels = smartlist_new();
+ smartlist_add(active_channels, chan);
+
+ if (chan->state != CHANNEL_STATE_CLOSING) {
+ /* It should have a digest set */
+ if (!tor_digest_is_zero(chan->identity_digest)) {
+ /* Yeah, we're good, add it to the map */
+ channel_add_to_digest_map(chan);
+ } else {
+ log_info(LD_CHANNEL,
+ "Channel %p (global ID " U64_FORMAT ") "
+ "in state %s (%d) registered with no identity digest",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state);
+ }
+ }
+ }
+
+ /* Mark it as registered */
+ chan->registered = 1;
+}
+
+/**
+ * Unregister a channel
+ *
+ * This function removes a channel from the global lists and maps and is used
+ * when freeing a closed/errored channel.
+ */
+
+void
+channel_unregister(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* No-op if not registered */
+ if (!(chan->registered)) return;
+
+ /* Is it finished? */
+ if (chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) {
+ /* Get it out of the finished list */
+ if (finished_channels) smartlist_remove(finished_channels, chan);
+ } else {
+ /* Get it out of the active list */
+ if (active_channels) smartlist_remove(active_channels, chan);
+ }
+
+ /* Get it out of all_channels */
+ if (all_channels) smartlist_remove(all_channels, chan);
+
+ /* Mark it as unregistered */
+ chan->registered = 0;
+
+ /* Should it be in the digest map? */
+ if (!tor_digest_is_zero(chan->identity_digest) &&
+ !(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ /* Remove it */
+ channel_remove_from_digest_map(chan);
+ }
+}
+
+/**
+ * Register a channel listener
+ *
+ * This function registers a newly created channel listner in the global
+ * lists/maps of active channel listeners.
+ */
+
+void
+channel_listener_register(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /* No-op if already registered */
+ if (chan_l->registered) return;
+
+ log_debug(LD_CHANNEL,
+ "Registering channel listener %p (ID " U64_FORMAT ") "
+ "in state %s (%d)",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier),
+ channel_listener_state_to_string(chan_l->state),
+ chan_l->state);
+
+ /* Make sure we have all_channels, then add it */
+ if (!all_listeners) all_listeners = smartlist_new();
+ smartlist_add(all_listeners, chan_l);
+
+ /* Is it finished? */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) {
+ /* Put it in the finished list, creating it if necessary */
+ if (!finished_listeners) finished_listeners = smartlist_new();
+ smartlist_add(finished_listeners, chan_l);
+ } else {
+ /* Put it in the active list, creating it if necessary */
+ if (!active_listeners) active_listeners = smartlist_new();
+ smartlist_add(active_listeners, chan_l);
+ }
+
+ /* Mark it as registered */
+ chan_l->registered = 1;
+}
+
+/**
+ * Unregister a channel listener
+ *
+ * This function removes a channel listener from the global lists and maps
+ * and is used when freeing a closed/errored channel listener.
+ */
+
+void
+channel_listener_unregister(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /* No-op if not registered */
+ if (!(chan_l->registered)) return;
+
+ /* Is it finished? */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) {
+ /* Get it out of the finished list */
+ if (finished_listeners) smartlist_remove(finished_listeners, chan_l);
+ } else {
+ /* Get it out of the active list */
+ if (active_listeners) smartlist_remove(active_listeners, chan_l);
+ }
+
+ /* Get it out of all_channels */
+ if (all_listeners) smartlist_remove(all_listeners, chan_l);
+
+ /* Mark it as unregistered */
+ chan_l->registered = 0;
+}
+
+/*********************************
+ * Channel digest map maintenance
+ *********************************/
+
+/**
+ * Add a channel to the digest map
+ *
+ * This function adds a channel to the digest map and inserts it into the
+ * correct linked list if channels with that remote endpoint identity digest
+ * already exist.
+ */
+
+static void
+channel_add_to_digest_map(channel_t *chan)
+{
+ channel_idmap_entry_t *ent, search;
+
+ tor_assert(chan);
+
+ /* Assert that the state makes sense */
+ tor_assert(!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR));
+
+ /* Assert that there is a digest */
+ tor_assert(!tor_digest_is_zero(chan->identity_digest));
+
+ memcpy(search.digest, chan->identity_digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+ if (! ent) {
+ ent = tor_malloc(sizeof(channel_idmap_entry_t));
+ memcpy(ent->digest, chan->identity_digest, DIGEST_LEN);
+ TOR_LIST_INIT(&ent->channel_list);
+ HT_INSERT(channel_idmap, &channel_identity_map, ent);
+ }
+ TOR_LIST_INSERT_HEAD(&ent->channel_list, chan, next_with_same_id);
+
+ log_debug(LD_CHANNEL,
+ "Added channel %p (global ID " U64_FORMAT ") "
+ "to identity map in state %s (%d) with digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state,
+ hex_str(chan->identity_digest, DIGEST_LEN));
+}
+
+/**
+ * Remove a channel from the digest map
+ *
+ * This function removes a channel from the digest map and the linked list of
+ * channels for that digest if more than one exists.
+ */
+
+static void
+channel_remove_from_digest_map(channel_t *chan)
+{
+ channel_idmap_entry_t *ent, search;
+
+ tor_assert(chan);
+
+ /* Assert that there is a digest */
+ tor_assert(!tor_digest_is_zero(chan->identity_digest));
+
+#if 0
+ /* Make sure we have a map */
+ if (!channel_identity_map) {
+ /*
+ * No identity map, so we can't find it by definition. This
+ * case is similar to digestmap_get() failing below.
+ */
+ log_warn(LD_BUG,
+ "Trying to remove channel %p (global ID " U64_FORMAT ") "
+ "with digest %s from identity map, but didn't have any identity "
+ "map",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ /* Clear out its next/prev pointers */
+ if (chan->next_with_same_id) {
+ chan->next_with_same_id->prev_with_same_id = chan->prev_with_same_id;
+ }
+ if (chan->prev_with_same_id) {
+ chan->prev_with_same_id->next_with_same_id = chan->next_with_same_id;
+ }
+ chan->next_with_same_id = NULL;
+ chan->prev_with_same_id = NULL;
+
+ return;
+ }
+#endif
+
+ /* Pull it out of its list, wherever that list is */
+ TOR_LIST_REMOVE(chan, next_with_same_id);
+
+ memcpy(search.digest, chan->identity_digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+
+ /* Look for it in the map */
+ if (ent) {
+ /* Okay, it's here */
+
+ if (TOR_LIST_EMPTY(&ent->channel_list)) {
+ HT_REMOVE(channel_idmap, &channel_identity_map, ent);
+ tor_free(ent);
+ }
+
+ log_debug(LD_CHANNEL,
+ "Removed channel %p (global ID " U64_FORMAT ") from "
+ "identity map in state %s (%d) with digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state), chan->state,
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ } else {
+ /* Shouldn't happen */
+ log_warn(LD_BUG,
+ "Trying to remove channel %p (global ID " U64_FORMAT ") with "
+ "digest %s from identity map, but couldn't find any with "
+ "that digest",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ }
+}
+
+/****************************
+ * Channel lookup functions *
+ ***************************/
+
+/**
+ * Find channel by global ID
+ *
+ * This function searches for a channel by the global_identifier assigned
+ * at initialization time. This identifier is unique for the lifetime of the
+ * Tor process.
+ */
+
+channel_t *
+channel_find_by_global_id(uint64_t global_identifier)
+{
+ channel_t *rv = NULL;
+
+ if (all_channels && smartlist_len(all_channels) > 0) {
+ SMARTLIST_FOREACH_BEGIN(all_channels, channel_t *, curr) {
+ if (curr->global_identifier == global_identifier) {
+ rv = curr;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(curr);
+ }
+
+ return rv;
+}
+
+/**
+ * Find channel by digest of the remote endpoint
+ *
+ * This function looks up a channel by the digest of its remote endpoint in
+ * the channel digest map. It's possible that more than one channel to a
+ * given endpoint exists. Use channel_next_with_digest() to walk the list.
+ */
+
+channel_t *
+channel_find_by_remote_digest(const char *identity_digest)
+{
+ channel_t *rv = NULL;
+ channel_idmap_entry_t *ent, search;
+
+ tor_assert(identity_digest);
+
+ memcpy(search.digest, identity_digest, DIGEST_LEN);
+ ent = HT_FIND(channel_idmap, &channel_identity_map, &search);
+ if (ent) {
+ rv = TOR_LIST_FIRST(&ent->channel_list);
+ }
+
+ return rv;
+}
+
+/**
+ * Get next channel with digest
+ *
+ * This function takes a channel and finds the next channel in the list
+ * with the same digest.
+ */
+
+channel_t *
+channel_next_with_digest(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return TOR_LIST_NEXT(chan, next_with_same_id);
+}
+
+/**
+ * Initialize a channel
+ *
+ * This function should be called by subclasses to set up some per-channel
+ * variables. I.e., this is the superclass constructor. Before this, the
+ * channel should be allocated with tor_malloc_zero().
+ */
+
+void
+channel_init(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* Assign an ID and bump the counter */
+ chan->global_identifier = n_channels_allocated++;
+
+ /* Init timestamp */
+ chan->timestamp_last_added_nonpadding = time(NULL);
+
+ /* Warn about exhausted circuit IDs no more than hourly. */
+ chan->last_warned_circ_ids_exhausted.rate = 3600;
+
+ /* Initialize queues. */
+ TOR_SIMPLEQ_INIT(&chan->incoming_queue);
+ TOR_SIMPLEQ_INIT(&chan->outgoing_queue);
+
+ /* Initialize list entries. */
+ memset(&chan->next_with_same_id, 0, sizeof(chan->next_with_same_id));
+
+ /* Timestamp it */
+ channel_timestamp_created(chan);
+
+ /* It hasn't been open yet. */
+ chan->has_been_open = 0;
+}
+
+/**
+ * Initialize a channel listener
+ *
+ * This function should be called by subclasses to set up some per-channel
+ * variables. I.e., this is the superclass constructor. Before this, the
+ * channel listener should be allocated with tor_malloc_zero().
+ */
+
+void
+channel_init_listener(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /* Assign an ID and bump the counter */
+ chan_l->global_identifier = n_channels_allocated++;
+
+ /* Timestamp it */
+ channel_listener_timestamp_created(chan_l);
+}
+
+/**
+ * Free a channel; nothing outside of channel.c and subclasses should call
+ * this - it frees channels after they have closed and been unregistered.
+ */
+
+void
+channel_free(channel_t *chan)
+{
+ if (!chan) return;
+
+ /* It must be closed or errored */
+ tor_assert(chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+ /* It must be deregistered */
+ tor_assert(!(chan->registered));
+
+ log_debug(LD_CHANNEL,
+ "Freeing channel " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+
+ /*
+ * Get rid of cmux policy before we do anything, so cmux policies don't
+ * see channels in weird half-freed states.
+ */
+ if (chan->cmux) {
+ circuitmux_set_policy(chan->cmux, NULL);
+ }
+
+ /* Call a free method if there is one */
+ if (chan->free) chan->free(chan);
+
+ channel_clear_remote_end(chan);
+
+ /* Get rid of cmux */
+ if (chan->cmux) {
+ circuitmux_detach_all_circuits(chan->cmux, NULL);
+ circuitmux_mark_destroyed_circids_usable(chan->cmux, chan);
+ circuitmux_free(chan->cmux);
+ chan->cmux = NULL;
+ }
+
+ /* We're in CLOSED or ERROR, so the cell queue is already empty */
+
+ tor_free(chan);
+}
+
+/**
+ * Free a channel listener; nothing outside of channel.c and subclasses
+ * should call this - it frees channel listeners after they have closed and
+ * been unregistered.
+ */
+
+void
+channel_listener_free(channel_listener_t *chan_l)
+{
+ if (!chan_l) return;
+
+ log_debug(LD_CHANNEL,
+ "Freeing channel_listener_t " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ chan_l);
+
+ /* It must be closed or errored */
+ tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR);
+ /* It must be deregistered */
+ tor_assert(!(chan_l->registered));
+
+ /* Call a free method if there is one */
+ if (chan_l->free) chan_l->free(chan_l);
+
+ /*
+ * We're in CLOSED or ERROR, so the incoming channel queue is already
+ * empty.
+ */
+
+ tor_free(chan_l);
+}
+
+/**
+ * Free a channel and skip the state/registration asserts; this internal-
+ * use-only function should be called only from channel_free_all() when
+ * shutting down the Tor process.
+ */
+
+static void
+channel_force_free(channel_t *chan)
+{
+ cell_queue_entry_t *cell, *cell_tmp;
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Force-freeing channel " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+
+ /*
+ * Get rid of cmux policy before we do anything, so cmux policies don't
+ * see channels in weird half-freed states.
+ */
+ if (chan->cmux) {
+ circuitmux_set_policy(chan->cmux, NULL);
+ }
+
+ /* Call a free method if there is one */
+ if (chan->free) chan->free(chan);
+
+ channel_clear_remote_end(chan);
+
+ /* Get rid of cmux */
+ if (chan->cmux) {
+ circuitmux_free(chan->cmux);
+ chan->cmux = NULL;
+ }
+
+ /* We might still have a cell queue; kill it */
+ TOR_SIMPLEQ_FOREACH_SAFE(cell, &chan->incoming_queue, next, cell_tmp) {
+ cell_queue_entry_free(cell, 0);
+ }
+ TOR_SIMPLEQ_INIT(&chan->incoming_queue);
+
+ /* Outgoing cell queue is similar, but we can have to free packed cells */
+ TOR_SIMPLEQ_FOREACH_SAFE(cell, &chan->outgoing_queue, next, cell_tmp) {
+ cell_queue_entry_free(cell, 0);
+ }
+ TOR_SIMPLEQ_INIT(&chan->outgoing_queue);
+
+ tor_free(chan);
+}
+
+/**
+ * Free a channel listener and skip the state/reigstration asserts; this
+ * internal-use-only function should be called only from channel_free_all()
+ * when shutting down the Tor process.
+ */
+
+static void
+channel_listener_force_free(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ log_debug(LD_CHANNEL,
+ "Force-freeing channel_listener_t " U64_FORMAT " at %p",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ chan_l);
+
+ /* Call a free method if there is one */
+ if (chan_l->free) chan_l->free(chan_l);
+
+ /*
+ * The incoming list just gets emptied and freed; we request close on
+ * any channels we find there, but since we got called while shutting
+ * down they will get deregistered and freed elsewhere anyway.
+ */
+ if (chan_l->incoming_list) {
+ SMARTLIST_FOREACH_BEGIN(chan_l->incoming_list,
+ channel_t *, qchan) {
+ channel_mark_for_close(qchan);
+ } SMARTLIST_FOREACH_END(qchan);
+
+ smartlist_free(chan_l->incoming_list);
+ chan_l->incoming_list = NULL;
+ }
+
+ tor_free(chan_l);
+}
+
+/**
+ * Return the current registered listener for a channel listener
+ *
+ * This function returns a function pointer to the current registered
+ * handler for new incoming channels on a channel listener.
+ */
+
+channel_listener_fn_ptr
+channel_listener_get_listener_fn(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ if (chan_l->state == CHANNEL_LISTENER_STATE_LISTENING)
+ return chan_l->listener;
+
+ return NULL;
+}
+
+/**
+ * Set the listener for a channel listener
+ *
+ * This function sets the handler for new incoming channels on a channel
+ * listener.
+ */
+
+void
+channel_listener_set_listener_fn(channel_listener_t *chan_l,
+ channel_listener_fn_ptr listener)
+{
+ tor_assert(chan_l);
+ tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_LISTENING);
+
+ log_debug(LD_CHANNEL,
+ "Setting listener callback for channel listener %p "
+ "(global ID " U64_FORMAT ") to %p",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier),
+ listener);
+
+ chan_l->listener = listener;
+ if (chan_l->listener) channel_listener_process_incoming(chan_l);
+}
+
+/**
+ * Return the fixed-length cell handler for a channel
+ *
+ * This function gets the handler for incoming fixed-length cells installed
+ * on a channel.
+ */
+
+channel_cell_handler_fn_ptr
+channel_get_cell_handler(channel_t *chan)
+{
+ tor_assert(chan);
+
+ if (chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT)
+ return chan->cell_handler;
+
+ return NULL;
+}
+
+/**
+ * Return the variable-length cell handler for a channel
+ *
+ * This function gets the handler for incoming variable-length cells
+ * installed on a channel.
+ */
+
+channel_var_cell_handler_fn_ptr
+channel_get_var_cell_handler(channel_t *chan)
+{
+ tor_assert(chan);
+
+ if (chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT)
+ return chan->var_cell_handler;
+
+ return NULL;
+}
+
+/**
+ * Set both cell handlers for a channel
+ *
+ * This function sets both the fixed-length and variable length cell handlers
+ * for a channel and processes any incoming cells that had been blocked in the
+ * queue because none were available.
+ */
+
+void
+channel_set_cell_handlers(channel_t *chan,
+ channel_cell_handler_fn_ptr cell_handler,
+ channel_var_cell_handler_fn_ptr
+ var_cell_handler)
+{
+ int try_again = 0;
+
+ tor_assert(chan);
+ tor_assert(chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT);
+
+ log_debug(LD_CHANNEL,
+ "Setting cell_handler callback for channel %p to %p",
+ chan, cell_handler);
+ log_debug(LD_CHANNEL,
+ "Setting var_cell_handler callback for channel %p to %p",
+ chan, var_cell_handler);
+
+ /* Should we try the queue? */
+ if (cell_handler &&
+ cell_handler != chan->cell_handler) try_again = 1;
+ if (var_cell_handler &&
+ var_cell_handler != chan->var_cell_handler) try_again = 1;
+
+ /* Change them */
+ chan->cell_handler = cell_handler;
+ chan->var_cell_handler = var_cell_handler;
+
+ /* Re-run the queue if we have one and there's any reason to */
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue) &&
+ try_again &&
+ (chan->cell_handler ||
+ chan->var_cell_handler)) channel_process_cells(chan);
+}
+
+/*
+ * On closing channels
+ *
+ * There are three functions that close channels, for use in
+ * different circumstances:
+ *
+ * - Use channel_mark_for_close() for most cases
+ * - Use channel_close_from_lower_layer() if you are connection_or.c
+ * and the other end closes the underlying connection.
+ * - Use channel_close_for_error() if you are connection_or.c and
+ * some sort of error has occurred.
+ */
+
+/**
+ * Mark a channel for closure
+ *
+ * This function tries to close a channel_t; it will go into the CLOSING
+ * state, and eventually the lower layer should put it into the CLOSED or
+ * ERROR state. Then, channel_run_cleanup() will eventually free it.
+ */
+
+void
+channel_mark_for_close(channel_t *chan)
+{
+ tor_assert(chan != NULL);
+ tor_assert(chan->close != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel %p (global ID " U64_FORMAT ") "
+ "by request",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ /* Note closing by request from above */
+ chan->reason_for_closing = CHANNEL_CLOSE_REQUESTED;
+
+ /* Change state to CLOSING */
+ channel_change_state(chan, CHANNEL_STATE_CLOSING);
+
+ /* Tell the lower layer */
+ chan->close(chan);
+
+ /*
+ * It's up to the lower layer to change state to CLOSED or ERROR when we're
+ * ready; we'll try to free channels that are in the finished list from
+ * channel_run_cleanup(). The lower layer should do this by calling
+ * channel_closed().
+ */
+}
+
+/**
+ * Mark a channel listener for closure
+ *
+ * This function tries to close a channel_listener_t; it will go into the
+ * CLOSING state, and eventually the lower layer should put it into the CLOSED
+ * or ERROR state. Then, channel_run_cleanup() will eventually free it.
+ */
+
+void
+channel_listener_mark_for_close(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l != NULL);
+ tor_assert(chan_l->close != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel listener %p (global ID " U64_FORMAT ") "
+ "by request",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+
+ /* Note closing by request from above */
+ chan_l->reason_for_closing = CHANNEL_LISTENER_CLOSE_REQUESTED;
+
+ /* Change state to CLOSING */
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+
+ /* Tell the lower layer */
+ chan_l->close(chan_l);
+
+ /*
+ * It's up to the lower layer to change state to CLOSED or ERROR when we're
+ * ready; we'll try to free channels that are in the finished list from
+ * channel_run_cleanup(). The lower layer should do this by calling
+ * channel_listener_closed().
+ */
+}
+
+/**
+ * Close a channel from the lower layer
+ *
+ * Notify the channel code that the channel is being closed due to a non-error
+ * condition in the lower layer. This does not call the close() method, since
+ * the lower layer already knows.
+ */
+
+void
+channel_close_from_lower_layer(channel_t *chan)
+{
+ tor_assert(chan != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel %p (global ID " U64_FORMAT ") "
+ "due to lower-layer event",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ /* Note closing by event from below */
+ chan->reason_for_closing = CHANNEL_CLOSE_FROM_BELOW;
+
+ /* Change state to CLOSING */
+ channel_change_state(chan, CHANNEL_STATE_CLOSING);
+}
+
+/**
+ * Close a channel listener from the lower layer
+ *
+ * Notify the channel code that the channel listener is being closed due to a
+ * non-error condition in the lower layer. This does not call the close()
+ * method, since the lower layer already knows.
+ */
+
+void
+channel_listener_close_from_lower_layer(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel listener %p (global ID " U64_FORMAT ") "
+ "due to lower-layer event",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+
+ /* Note closing by event from below */
+ chan_l->reason_for_closing = CHANNEL_LISTENER_CLOSE_FROM_BELOW;
+
+ /* Change state to CLOSING */
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+}
+
+/**
+ * Notify that the channel is being closed due to an error condition
+ *
+ * This function is called by the lower layer implementing the transport
+ * when a channel must be closed due to an error condition. This does not
+ * call the channel's close method, since the lower layer already knows.
+ */
+
+void
+channel_close_for_error(channel_t *chan)
+{
+ tor_assert(chan != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel %p due to lower-layer error",
+ chan);
+
+ /* Note closing by event from below */
+ chan->reason_for_closing = CHANNEL_CLOSE_FOR_ERROR;
+
+ /* Change state to CLOSING */
+ channel_change_state(chan, CHANNEL_STATE_CLOSING);
+}
+
+/**
+ * Notify that the channel listener is being closed due to an error condition
+ *
+ * This function is called by the lower layer implementing the transport
+ * when a channel listener must be closed due to an error condition. This
+ * does not call the channel listener's close method, since the lower layer
+ * already knows.
+ */
+
+void
+channel_listener_close_for_error(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l != NULL);
+
+ /* If it's already in CLOSING, CLOSED or ERROR, this is a no-op */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ log_debug(LD_CHANNEL,
+ "Closing channel listener %p (global ID " U64_FORMAT ") "
+ "due to lower-layer error",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+
+ /* Note closing by event from below */
+ chan_l->reason_for_closing = CHANNEL_LISTENER_CLOSE_FOR_ERROR;
+
+ /* Change state to CLOSING */
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+}
+
+/**
+ * Notify that the lower layer is finished closing the channel
+ *
+ * This function should be called by the lower layer when a channel
+ * is finished closing and it should be regarded as inactive and
+ * freed by the channel code.
+ */
+
+void
+channel_closed(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+
+ /* No-op if already inactive */
+ if (chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) return;
+
+ /* Inform any pending (not attached) circs that they should
+ * give up. */
+ if (! chan->has_been_open)
+ circuit_n_chan_done(chan, 0);
+
+ /* Now close all the attached circuits on it. */
+ circuit_unlink_all_from_channel(chan, END_CIRC_REASON_CHANNEL_CLOSED);
+
+ if (chan->reason_for_closing != CHANNEL_CLOSE_FOR_ERROR) {
+ channel_change_state(chan, CHANNEL_STATE_CLOSED);
+ } else {
+ channel_change_state(chan, CHANNEL_STATE_ERROR);
+ }
+}
+
+/**
+ * Notify that the lower layer is finished closing the channel listener
+ *
+ * This function should be called by the lower layer when a channel listener
+ * is finished closing and it should be regarded as inactive and
+ * freed by the channel code.
+ */
+
+void
+channel_listener_closed(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+ tor_assert(chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR);
+
+ /* No-op if already inactive */
+ if (chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR) return;
+
+ if (chan_l->reason_for_closing != CHANNEL_LISTENER_CLOSE_FOR_ERROR) {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSED);
+ } else {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_ERROR);
+ }
+}
+
+/**
+ * Clear the identity_digest of a channel
+ *
+ * This function clears the identity digest of the remote endpoint for a
+ * channel; this is intended for use by the lower layer.
+ */
+
+void
+channel_clear_identity_digest(channel_t *chan)
+{
+ int state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Clearing remote endpoint digest on channel %p with "
+ "global ID " U64_FORMAT,
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+
+ if (!state_not_in_map && chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest))
+ /* if it's registered get it out of the digest map */
+ channel_remove_from_digest_map(chan);
+
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+}
+
+/**
+ * Set the identity_digest of a channel
+ *
+ * This function sets the identity digest of the remote endpoint for a
+ * channel; this is intended for use by the lower layer.
+ */
+
+void
+channel_set_identity_digest(channel_t *chan,
+ const char *identity_digest)
+{
+ int was_in_digest_map, should_be_in_digest_map, state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Setting remote endpoint digest on channel %p with "
+ "global ID " U64_FORMAT " to digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ identity_digest ?
+ hex_str(identity_digest, DIGEST_LEN) : "(null)");
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+ was_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest);
+ should_be_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ (identity_digest &&
+ !tor_digest_is_zero(identity_digest));
+
+ if (was_in_digest_map)
+ /* We should always remove it; we'll add it back if we're writing
+ * in a new digest.
+ */
+ channel_remove_from_digest_map(chan);
+
+ if (identity_digest) {
+ memcpy(chan->identity_digest,
+ identity_digest,
+ sizeof(chan->identity_digest));
+ } else {
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+ }
+
+ /* Put it in the digest map if we should */
+ if (should_be_in_digest_map)
+ channel_add_to_digest_map(chan);
+}
+
+/**
+ * Clear the remote end metadata (identity_digest/nickname) of a channel
+ *
+ * This function clears all the remote end info from a channel; this is
+ * intended for use by the lower layer.
+ */
+
+void
+channel_clear_remote_end(channel_t *chan)
+{
+ int state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Clearing remote endpoint identity on channel %p with "
+ "global ID " U64_FORMAT,
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+
+ if (!state_not_in_map && chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest))
+ /* if it's registered get it out of the digest map */
+ channel_remove_from_digest_map(chan);
+
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+ tor_free(chan->nickname);
+}
+
+/**
+ * Set the remote end metadata (identity_digest/nickname) of a channel
+ *
+ * This function sets new remote end info on a channel; this is intended
+ * for use by the lower layer.
+ */
+
+void
+channel_set_remote_end(channel_t *chan,
+ const char *identity_digest,
+ const char *nickname)
+{
+ int was_in_digest_map, should_be_in_digest_map, state_not_in_map;
+
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Setting remote endpoint identity on channel %p with "
+ "global ID " U64_FORMAT " to nickname %s, digest %s",
+ chan, U64_PRINTF_ARG(chan->global_identifier),
+ nickname ? nickname : "(null)",
+ identity_digest ?
+ hex_str(identity_digest, DIGEST_LEN) : "(null)");
+
+ state_not_in_map =
+ (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR);
+ was_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ !tor_digest_is_zero(chan->identity_digest);
+ should_be_in_digest_map =
+ !state_not_in_map &&
+ chan->registered &&
+ (identity_digest &&
+ !tor_digest_is_zero(identity_digest));
+
+ if (was_in_digest_map)
+ /* We should always remove it; we'll add it back if we're writing
+ * in a new digest.
+ */
+ channel_remove_from_digest_map(chan);
+
+ if (identity_digest) {
+ memcpy(chan->identity_digest,
+ identity_digest,
+ sizeof(chan->identity_digest));
+
+ } else {
+ memset(chan->identity_digest, 0,
+ sizeof(chan->identity_digest));
+ }
+
+ tor_free(chan->nickname);
+ if (nickname)
+ chan->nickname = tor_strdup(nickname);
+
+ /* Put it in the digest map if we should */
+ if (should_be_in_digest_map)
+ channel_add_to_digest_map(chan);
+}
+
+/**
+ * Duplicate a cell queue entry; this is a shallow copy intended for use
+ * in channel_write_cell_queue_entry().
+ */
+
+static cell_queue_entry_t *
+cell_queue_entry_dup(cell_queue_entry_t *q)
+{
+ cell_queue_entry_t *rv = NULL;
+
+ tor_assert(q);
+
+ rv = tor_malloc(sizeof(*rv));
+ memcpy(rv, q, sizeof(*rv));
+
+ return rv;
+}
+
+/**
+ * Free a cell_queue_entry_t; the handed_off parameter indicates whether
+ * the contents were passed to the lower layer (it is responsible for
+ * them) or not (we should free).
+ */
+
+static void
+cell_queue_entry_free(cell_queue_entry_t *q, int handed_off)
+{
+ if (!q) return;
+
+ if (!handed_off) {
+ /*
+ * If we handed it off, the recipient becomes responsible (or
+ * with packed cells the channel_t subclass calls packed_cell
+ * free after writing out its contents; see, e.g.,
+ * channel_tls_write_packed_cell_method(). Otherwise, we have
+ * to take care of it here if possible.
+ */
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ if (q->u.fixed.cell) {
+ /*
+ * There doesn't seem to be a cell_free() function anywhere in the
+ * pre-channel code; just use tor_free()
+ */
+ tor_free(q->u.fixed.cell);
+ }
+ break;
+ case CELL_QUEUE_PACKED:
+ if (q->u.packed.packed_cell) {
+ packed_cell_free(q->u.packed.packed_cell);
+ }
+ break;
+ case CELL_QUEUE_VAR:
+ if (q->u.var.var_cell) {
+ /*
+ * This one's in connection_or.c; it'd be nice to figure out the
+ * whole flow of cells from one end to the other and factor the
+ * cell memory management functions like this out of the specific
+ * TLS lower layer.
+ */
+ var_cell_free(q->u.var.var_cell);
+ }
+ break;
+ default:
+ /*
+ * Nothing we can do if we don't know the type; this will
+ * have been warned about elsewhere.
+ */
+ break;
+ }
+ }
+ tor_free(q);
+}
+
+/**
+ * Check whether a cell queue entry is padding; this is a helper function
+ * for channel_write_cell_queue_entry()
+ */
+
+static int
+cell_queue_entry_is_padding(cell_queue_entry_t *q)
+{
+ tor_assert(q);
+
+ if (q->type == CELL_QUEUE_FIXED) {
+ if (q->u.fixed.cell) {
+ if (q->u.fixed.cell->command == CELL_PADDING ||
+ q->u.fixed.cell->command == CELL_VPADDING) {
+ return 1;
+ }
+ }
+ } else if (q->type == CELL_QUEUE_VAR) {
+ if (q->u.var.var_cell) {
+ if (q->u.var.var_cell->command == CELL_PADDING ||
+ q->u.var.var_cell->command == CELL_VPADDING) {
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Allocate a new cell queue entry for a fixed-size cell
+ */
+
+static cell_queue_entry_t *
+cell_queue_entry_new_fixed(cell_t *cell)
+{
+ cell_queue_entry_t *q = NULL;
+
+ tor_assert(cell);
+
+ q = tor_malloc(sizeof(*q));
+ q->type = CELL_QUEUE_FIXED;
+ q->u.fixed.cell = cell;
+
+ return q;
+}
+
+/**
+ * Allocate a new cell queue entry for a variable-size cell
+ */
+
+static cell_queue_entry_t *
+cell_queue_entry_new_var(var_cell_t *var_cell)
+{
+ cell_queue_entry_t *q = NULL;
+
+ tor_assert(var_cell);
+
+ q = tor_malloc(sizeof(*q));
+ q->type = CELL_QUEUE_VAR;
+ q->u.var.var_cell = var_cell;
+
+ return q;
+}
+
+/**
+ * Write to a channel based on a cell_queue_entry_t
+ *
+ * Given a cell_queue_entry_t filled out by the caller, try to send the cell
+ * and queue it if we can't.
+ */
+
+static void
+channel_write_cell_queue_entry(channel_t *chan, cell_queue_entry_t *q)
+{
+ int result = 0, sent = 0;
+ cell_queue_entry_t *tmp = NULL;
+
+ tor_assert(chan);
+ tor_assert(q);
+
+ /* Assert that the state makes sense for a cell write */
+ tor_assert(chan->state == CHANNEL_STATE_OPENING ||
+ chan->state == CHANNEL_STATE_OPEN ||
+ chan->state == CHANNEL_STATE_MAINT);
+
+ /* Increment the timestamp unless it's padding */
+ if (!cell_queue_entry_is_padding(q)) {
+ chan->timestamp_last_added_nonpadding = approx_time();
+ }
+
+ {
+ circid_t circ_id;
+ if (is_destroy_cell(chan, q, &circ_id)) {
+ channel_note_destroy_not_pending(chan, circ_id);
+ }
+ }
+
+ /* Can we send it right out? If so, try */
+ if (TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue) &&
+ chan->state == CHANNEL_STATE_OPEN) {
+ /* Pick the right write function for this cell type and save the result */
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ tor_assert(chan->write_cell);
+ tor_assert(q->u.fixed.cell);
+ result = chan->write_cell(chan, q->u.fixed.cell);
+ break;
+ case CELL_QUEUE_PACKED:
+ tor_assert(chan->write_packed_cell);
+ tor_assert(q->u.packed.packed_cell);
+ result = chan->write_packed_cell(chan, q->u.packed.packed_cell);
+ break;
+ case CELL_QUEUE_VAR:
+ tor_assert(chan->write_var_cell);
+ tor_assert(q->u.var.var_cell);
+ result = chan->write_var_cell(chan, q->u.var.var_cell);
+ break;
+ default:
+ tor_assert(1);
+ }
+
+ /* Check if we got it out */
+ if (result > 0) {
+ sent = 1;
+ /* Timestamp for transmission */
+ channel_timestamp_xmit(chan);
+ /* If we're here the queue is empty, so it's drained too */
+ channel_timestamp_drained(chan);
+ /* Update the counter */
+ ++(chan->n_cells_xmitted);
+ }
+ }
+
+ if (!sent) {
+ /* Not sent, queue it */
+ /*
+ * We have to copy the queue entry passed in, since the caller probably
+ * used the stack.
+ */
+ tmp = cell_queue_entry_dup(q);
+ TOR_SIMPLEQ_INSERT_TAIL(&chan->outgoing_queue, tmp, next);
+ /* Try to process the queue? */
+ if (chan->state == CHANNEL_STATE_OPEN) channel_flush_cells(chan);
+ }
+}
+
+/**
+ * Write a cell to a channel
+ *
+ * Write a fixed-length cell to a channel using the write_cell() method.
+ * This is equivalent to the pre-channels connection_or_write_cell_to_buf();
+ * it is called by the transport-independent code to deliver a cell to a
+ * channel for transmission.
+ */
+
+void
+channel_write_cell(channel_t *chan, cell_t *cell)
+{
+ cell_queue_entry_t q;
+
+ tor_assert(chan);
+ tor_assert(cell);
+
+ if (chan->state == CHANNEL_STATE_CLOSING) {
+ log_debug(LD_CHANNEL, "Discarding cell_t %p on closing channel %p with "
+ "global ID "U64_FORMAT, cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ tor_free(cell);
+ return;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Writing cell_t %p to channel %p with global ID "
+ U64_FORMAT,
+ cell, chan, U64_PRINTF_ARG(chan->global_identifier));
+
+ q.type = CELL_QUEUE_FIXED;
+ q.u.fixed.cell = cell;
+ channel_write_cell_queue_entry(chan, &q);
+}
+
+/**
+ * Write a packed cell to a channel
+ *
+ * Write a packed cell to a channel using the write_cell() method. This is
+ * called by the transport-independent code to deliver a packed cell to a
+ * channel for transmission.
+ */
+
+void
+channel_write_packed_cell(channel_t *chan, packed_cell_t *packed_cell)
+{
+ cell_queue_entry_t q;
+
+ tor_assert(chan);
+ tor_assert(packed_cell);
+
+ if (chan->state == CHANNEL_STATE_CLOSING) {
+ log_debug(LD_CHANNEL, "Discarding packed_cell_t %p on closing channel %p "
+ "with global ID "U64_FORMAT, packed_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ packed_cell_free(packed_cell);
+ return;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Writing packed_cell_t %p to channel %p with global ID "
+ U64_FORMAT,
+ packed_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+
+ q.type = CELL_QUEUE_PACKED;
+ q.u.packed.packed_cell = packed_cell;
+ channel_write_cell_queue_entry(chan, &q);
+}
+
+/**
+ * Write a variable-length cell to a channel
+ *
+ * Write a variable-length cell to a channel using the write_cell() method.
+ * This is equivalent to the pre-channels
+ * connection_or_write_var_cell_to_buf(); it's called by the transport-
+ * independent code to deliver a var_cell to a channel for transmission.
+ */
+
+void
+channel_write_var_cell(channel_t *chan, var_cell_t *var_cell)
+{
+ cell_queue_entry_t q;
+
+ tor_assert(chan);
+ tor_assert(var_cell);
+
+ if (chan->state == CHANNEL_STATE_CLOSING) {
+ log_debug(LD_CHANNEL, "Discarding var_cell_t %p on closing channel %p "
+ "with global ID "U64_FORMAT, var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ var_cell_free(var_cell);
+ return;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Writing var_cell_t %p to channel %p with global ID "
+ U64_FORMAT,
+ var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+
+ q.type = CELL_QUEUE_VAR;
+ q.u.var.var_cell = var_cell;
+ channel_write_cell_queue_entry(chan, &q);
+}
+
+/**
+ * Change channel state
+ *
+ * This internal and subclass use only function is used to change channel
+ * state, performing all transition validity checks and whatever actions
+ * are appropriate to the state transition in question.
+ */
+
+void
+channel_change_state(channel_t *chan, channel_state_t to_state)
+{
+ channel_state_t from_state;
+ unsigned char was_active, is_active;
+ unsigned char was_in_id_map, is_in_id_map;
+
+ tor_assert(chan);
+ from_state = chan->state;
+
+ tor_assert(channel_state_is_valid(from_state));
+ tor_assert(channel_state_is_valid(to_state));
+ tor_assert(channel_state_can_transition(chan->state, to_state));
+
+ /* Check for no-op transitions */
+ if (from_state == to_state) {
+ log_debug(LD_CHANNEL,
+ "Got no-op transition from \"%s\" to itself on channel %p"
+ "(global ID " U64_FORMAT ")",
+ channel_state_to_string(to_state),
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ return;
+ }
+
+ /* If we're going to a closing or closed state, we must have a reason set */
+ if (to_state == CHANNEL_STATE_CLOSING ||
+ to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR) {
+ tor_assert(chan->reason_for_closing != CHANNEL_NOT_CLOSING);
+ }
+
+ /*
+ * We need to maintain the queues here for some transitions:
+ * when we enter CHANNEL_STATE_OPEN (especially from CHANNEL_STATE_MAINT)
+ * we may have a backlog of cells to transmit, so drain the queues in
+ * that case, and when going to CHANNEL_STATE_CLOSED the subclass
+ * should have made sure to finish sending things (or gone to
+ * CHANNEL_STATE_ERROR if not possible), so we assert for that here.
+ */
+
+ log_debug(LD_CHANNEL,
+ "Changing state of channel %p (global ID " U64_FORMAT
+ ") from \"%s\" to \"%s\"",
+ chan,
+ U64_PRINTF_ARG(chan->global_identifier),
+ channel_state_to_string(chan->state),
+ channel_state_to_string(to_state));
+
+ chan->state = to_state;
+
+ /* Need to add to the right lists if the channel is registered */
+ if (chan->registered) {
+ was_active = !(from_state == CHANNEL_STATE_CLOSED ||
+ from_state == CHANNEL_STATE_ERROR);
+ is_active = !(to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR);
+
+ /* Need to take off active list and put on finished list? */
+ if (was_active && !is_active) {
+ if (active_channels) smartlist_remove(active_channels, chan);
+ if (!finished_channels) finished_channels = smartlist_new();
+ smartlist_add(finished_channels, chan);
+ }
+ /* Need to put on active list? */
+ else if (!was_active && is_active) {
+ if (finished_channels) smartlist_remove(finished_channels, chan);
+ if (!active_channels) active_channels = smartlist_new();
+ smartlist_add(active_channels, chan);
+ }
+
+ if (!tor_digest_is_zero(chan->identity_digest)) {
+ /* Now we need to handle the identity map */
+ was_in_id_map = !(from_state == CHANNEL_STATE_CLOSING ||
+ from_state == CHANNEL_STATE_CLOSED ||
+ from_state == CHANNEL_STATE_ERROR);
+ is_in_id_map = !(to_state == CHANNEL_STATE_CLOSING ||
+ to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR);
+
+ if (!was_in_id_map && is_in_id_map) channel_add_to_digest_map(chan);
+ else if (was_in_id_map && !is_in_id_map)
+ channel_remove_from_digest_map(chan);
+ }
+ }
+
+ /* Tell circuits if we opened and stuff */
+ if (to_state == CHANNEL_STATE_OPEN) {
+ channel_do_open_actions(chan);
+ chan->has_been_open = 1;
+
+ /* Check for queued cells to process */
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ channel_process_cells(chan);
+ if (! TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue))
+ channel_flush_cells(chan);
+ } else if (to_state == CHANNEL_STATE_CLOSED ||
+ to_state == CHANNEL_STATE_ERROR) {
+ /* Assert that all queues are empty */
+ tor_assert(TOR_SIMPLEQ_EMPTY(&chan->incoming_queue));
+ tor_assert(TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue));
+ }
+}
+
+/**
+ * Change channel listener state
+ *
+ * This internal and subclass use only function is used to change channel
+ * listener state, performing all transition validity checks and whatever
+ * actions are appropriate to the state transition in question.
+ */
+
+void
+channel_listener_change_state(channel_listener_t *chan_l,
+ channel_listener_state_t to_state)
+{
+ channel_listener_state_t from_state;
+ unsigned char was_active, is_active;
+
+ tor_assert(chan_l);
+ from_state = chan_l->state;
+
+ tor_assert(channel_listener_state_is_valid(from_state));
+ tor_assert(channel_listener_state_is_valid(to_state));
+ tor_assert(channel_listener_state_can_transition(chan_l->state, to_state));
+
+ /* Check for no-op transitions */
+ if (from_state == to_state) {
+ log_debug(LD_CHANNEL,
+ "Got no-op transition from \"%s\" to itself on channel "
+ "listener %p (global ID " U64_FORMAT ")",
+ channel_listener_state_to_string(to_state),
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier));
+ return;
+ }
+
+ /* If we're going to a closing or closed state, we must have a reason set */
+ if (to_state == CHANNEL_LISTENER_STATE_CLOSING ||
+ to_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ to_state == CHANNEL_LISTENER_STATE_ERROR) {
+ tor_assert(chan_l->reason_for_closing != CHANNEL_LISTENER_NOT_CLOSING);
+ }
+
+ /*
+ * We need to maintain the queues here for some transitions:
+ * when we enter CHANNEL_STATE_OPEN (especially from CHANNEL_STATE_MAINT)
+ * we may have a backlog of cells to transmit, so drain the queues in
+ * that case, and when going to CHANNEL_STATE_CLOSED the subclass
+ * should have made sure to finish sending things (or gone to
+ * CHANNEL_STATE_ERROR if not possible), so we assert for that here.
+ */
+
+ log_debug(LD_CHANNEL,
+ "Changing state of channel listener %p (global ID " U64_FORMAT
+ "from \"%s\" to \"%s\"",
+ chan_l, U64_PRINTF_ARG(chan_l->global_identifier),
+ channel_listener_state_to_string(chan_l->state),
+ channel_listener_state_to_string(to_state));
+
+ chan_l->state = to_state;
+
+ /* Need to add to the right lists if the channel listener is registered */
+ if (chan_l->registered) {
+ was_active = !(from_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ from_state == CHANNEL_LISTENER_STATE_ERROR);
+ is_active = !(to_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ to_state == CHANNEL_LISTENER_STATE_ERROR);
+
+ /* Need to take off active list and put on finished list? */
+ if (was_active && !is_active) {
+ if (active_listeners) smartlist_remove(active_listeners, chan_l);
+ if (!finished_listeners) finished_listeners = smartlist_new();
+ smartlist_add(finished_listeners, chan_l);
+ }
+ /* Need to put on active list? */
+ else if (!was_active && is_active) {
+ if (finished_listeners) smartlist_remove(finished_listeners, chan_l);
+ if (!active_listeners) active_listeners = smartlist_new();
+ smartlist_add(active_listeners, chan_l);
+ }
+ }
+
+ if (to_state == CHANNEL_LISTENER_STATE_CLOSED ||
+ to_state == CHANNEL_LISTENER_STATE_ERROR) {
+ /* Assert that the queue is empty */
+ tor_assert(!(chan_l->incoming_list) ||
+ smartlist_len(chan_l->incoming_list) == 0);
+ }
+}
+
+/**
+ * Try to flush cells to the lower layer
+ *
+ * this is called by the lower layer to indicate that it wants more cells;
+ * it will try to write up to num_cells cells from the channel's cell queue or
+ * from circuits active on that channel, or as many as it has available if
+ * num_cells == -1.
+ */
+
+#define MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED 256
+
+ssize_t
+channel_flush_some_cells(channel_t *chan, ssize_t num_cells)
+{
+ unsigned int unlimited = 0;
+ ssize_t flushed = 0;
+ int num_cells_from_circs, clamped_num_cells;
+
+ tor_assert(chan);
+
+ if (num_cells < 0) unlimited = 1;
+ if (!unlimited && num_cells <= flushed) goto done;
+
+ /* If we aren't in CHANNEL_STATE_OPEN, nothing goes through */
+ if (chan->state == CHANNEL_STATE_OPEN) {
+ /* Try to flush as much as we can that's already queued */
+ flushed += channel_flush_some_cells_from_outgoing_queue(chan,
+ (unlimited ? -1 : num_cells - flushed));
+ if (!unlimited && num_cells <= flushed) goto done;
+
+ if (circuitmux_num_cells(chan->cmux) > 0) {
+ /* Calculate number of cells, including clamp */
+ if (unlimited) {
+ clamped_num_cells = MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED;
+ } else {
+ if (num_cells - flushed >
+ MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED) {
+ clamped_num_cells = MAX_CELLS_TO_GET_FROM_CIRCUITS_FOR_UNLIMITED;
+ } else {
+ clamped_num_cells = (int)(num_cells - flushed);
+ }
+ }
+ /* Try to get more cells from any active circuits */
+ num_cells_from_circs = channel_flush_from_first_active_circuit(
+ chan, clamped_num_cells);
+
+ /* If it claims we got some, process the queue again */
+ if (num_cells_from_circs > 0) {
+ flushed += channel_flush_some_cells_from_outgoing_queue(chan,
+ (unlimited ? -1 : num_cells - flushed));
+ }
+ }
+ }
+
+ done:
+ return flushed;
+}
+
+/**
+ * Flush cells from just the channel's outgoing cell queue
+ *
+ * This gets called from channel_flush_some_cells() above to flush cells
+ * just from the queue without trying for active_circuits.
+ */
+
+static ssize_t
+channel_flush_some_cells_from_outgoing_queue(channel_t *chan,
+ ssize_t num_cells)
+{
+ unsigned int unlimited = 0;
+ ssize_t flushed = 0;
+ cell_queue_entry_t *q = NULL;
+
+ tor_assert(chan);
+ tor_assert(chan->write_cell);
+ tor_assert(chan->write_packed_cell);
+ tor_assert(chan->write_var_cell);
+
+ if (num_cells < 0) unlimited = 1;
+ if (!unlimited && num_cells <= flushed) return 0;
+
+ /* If we aren't in CHANNEL_STATE_OPEN, nothing goes through */
+ if (chan->state == CHANNEL_STATE_OPEN) {
+ while ((unlimited || num_cells > flushed) &&
+ NULL != (q = TOR_SIMPLEQ_FIRST(&chan->outgoing_queue))) {
+
+ if (1) {
+ /*
+ * Okay, we have a good queue entry, try to give it to the lower
+ * layer.
+ */
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ if (q->u.fixed.cell) {
+ if (chan->write_cell(chan,
+ q->u.fixed.cell)) {
+ ++flushed;
+ channel_timestamp_xmit(chan);
+ ++(chan->n_cells_xmitted);
+ cell_queue_entry_free(q, 1);
+ q = NULL;
+ }
+ /* Else couldn't write it; leave it on the queue */
+ } else {
+ /* This shouldn't happen */
+ log_info(LD_CHANNEL,
+ "Saw broken cell queue entry of type CELL_QUEUE_FIXED "
+ "with no cell on channel %p "
+ "(global ID " U64_FORMAT ").",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ /* Throw it away */
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+ break;
+ case CELL_QUEUE_PACKED:
+ if (q->u.packed.packed_cell) {
+ if (chan->write_packed_cell(chan,
+ q->u.packed.packed_cell)) {
+ ++flushed;
+ channel_timestamp_xmit(chan);
+ ++(chan->n_cells_xmitted);
+ cell_queue_entry_free(q, 1);
+ q = NULL;
+ }
+ /* Else couldn't write it; leave it on the queue */
+ } else {
+ /* This shouldn't happen */
+ log_info(LD_CHANNEL,
+ "Saw broken cell queue entry of type CELL_QUEUE_PACKED "
+ "with no cell on channel %p "
+ "(global ID " U64_FORMAT ").",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ /* Throw it away */
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+ break;
+ case CELL_QUEUE_VAR:
+ if (q->u.var.var_cell) {
+ if (chan->write_var_cell(chan,
+ q->u.var.var_cell)) {
+ ++flushed;
+ channel_timestamp_xmit(chan);
+ ++(chan->n_cells_xmitted);
+ cell_queue_entry_free(q, 1);
+ q = NULL;
+ }
+ /* Else couldn't write it; leave it on the queue */
+ } else {
+ /* This shouldn't happen */
+ log_info(LD_CHANNEL,
+ "Saw broken cell queue entry of type CELL_QUEUE_VAR "
+ "with no cell on channel %p "
+ "(global ID " U64_FORMAT ").",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ /* Throw it away */
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+ break;
+ default:
+ /* Unknown type, log and free it */
+ log_info(LD_CHANNEL,
+ "Saw an unknown cell queue entry type %d on channel %p "
+ "(global ID " U64_FORMAT "; ignoring it."
+ " Someone should fix this.",
+ q->type, chan, U64_PRINTF_ARG(chan->global_identifier));
+ cell_queue_entry_free(q, 0);
+ q = NULL;
+ }
+
+ /* if q got NULLed out, we used it and should remove the queue entry */
+ if (!q) TOR_SIMPLEQ_REMOVE_HEAD(&chan->outgoing_queue, next);
+ /* No cell removed from list, so we can't go on any further */
+ else break;
+ }
+ }
+ }
+
+ /* Did we drain the queue? */
+ if (TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)) {
+ channel_timestamp_drained(chan);
+ }
+
+ return flushed;
+}
+
+/**
+ * Flush as many cells as we possibly can from the queue
+ *
+ * This tries to flush as many cells from the queue as the lower layer
+ * will take. It just calls channel_flush_some_cells_from_outgoing_queue()
+ * in unlimited mode.
+ */
+
+void
+channel_flush_cells(channel_t *chan)
+{
+ channel_flush_some_cells_from_outgoing_queue(chan, -1);
+}
+
+/**
+ * Check if any cells are available
+ *
+ * This gets used from the lower layer to check if any more cells are
+ * available.
+ */
+
+int
+channel_more_to_flush(channel_t *chan)
+{
+ tor_assert(chan);
+
+ /* Check if we have any queued */
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ return 1;
+
+ /* Check if any circuits would like to queue some */
+ if (circuitmux_num_cells(chan->cmux) > 0) return 1;
+
+ /* Else no */
+ return 0;
+}
+
+/**
+ * Notify the channel we're done flushing the output in the lower layer
+ *
+ * Connection.c will call this when we've flushed the output; there's some
+ * dirreq-related maintenance to do.
+ */
+
+void
+channel_notify_flushed(channel_t *chan)
+{
+ tor_assert(chan);
+
+ if (chan->dirreq_id != 0)
+ geoip_change_dirreq_state(chan->dirreq_id,
+ DIRREQ_TUNNELED,
+ DIRREQ_CHANNEL_BUFFER_FLUSHED);
+}
+
+/**
+ * Process the queue of incoming channels on a listener
+ *
+ * Use a listener's registered callback to process as many entries in the
+ * queue of incoming channels as possible.
+ */
+
+void
+channel_listener_process_incoming(channel_listener_t *listener)
+{
+ tor_assert(listener);
+
+ /*
+ * CHANNEL_LISTENER_STATE_CLOSING permitted because we drain the queue
+ * while closing a listener.
+ */
+ tor_assert(listener->state == CHANNEL_LISTENER_STATE_LISTENING ||
+ listener->state == CHANNEL_LISTENER_STATE_CLOSING);
+ tor_assert(listener->listener);
+
+ log_debug(LD_CHANNEL,
+ "Processing queue of incoming connections for channel "
+ "listener %p (global ID " U64_FORMAT ")",
+ listener, U64_PRINTF_ARG(listener->global_identifier));
+
+ if (!(listener->incoming_list)) return;
+
+ SMARTLIST_FOREACH_BEGIN(listener->incoming_list,
+ channel_t *, chan) {
+ tor_assert(chan);
+
+ log_debug(LD_CHANNEL,
+ "Handling incoming channel %p (" U64_FORMAT ") "
+ "for listener %p (" U64_FORMAT ")",
+ chan,
+ U64_PRINTF_ARG(chan->global_identifier),
+ listener,
+ U64_PRINTF_ARG(listener->global_identifier));
+ /* Make sure this is set correctly */
+ channel_mark_incoming(chan);
+ listener->listener(listener, chan);
+ } SMARTLIST_FOREACH_END(chan);
+
+ smartlist_free(listener->incoming_list);
+ listener->incoming_list = NULL;
+}
+
+/**
+ * Take actions required when a channel becomes open
+ *
+ * Handle actions we should do when we know a channel is open; a lot of
+ * this comes from the old connection_or_set_state_open() of connection_or.c.
+ *
+ * Because of this mechanism, future channel_t subclasses should take care
+ * not to change a channel to from CHANNEL_STATE_OPENING to CHANNEL_STATE_OPEN
+ * until there is positive confirmation that the network is operational.
+ * In particular, anything UDP-based should not make this transition until a
+ * packet is received from the other side.
+ */
+
+void
+channel_do_open_actions(channel_t *chan)
+{
+ tor_addr_t remote_addr;
+ int started_here, not_using = 0;
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ started_here = channel_is_outgoing(chan);
+
+ if (started_here) {
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
+ rep_hist_note_connect_succeeded(chan->identity_digest, now);
+ if (entry_guard_register_connect_status(
+ chan->identity_digest, 1, 0, now) < 0) {
+ /* Close any circuits pending on this channel. We leave it in state
+ * 'open' though, because it didn't actually *fail* -- we just
+ * chose not to use it. */
+ log_debug(LD_OR,
+ "New entry guard was reachable, but closing this "
+ "connection so we can retry the earlier entry guards.");
+ circuit_n_chan_done(chan, 0);
+ not_using = 1;
+ }
+ router_set_status(chan->identity_digest, 1);
+ } else {
+ /* 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)) {
+ 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 */
+ }
+ }
+
+ if (!not_using) circuit_n_chan_done(chan, 1);
+}
+
+/**
+ * Queue an incoming channel on a listener
+ *
+ * Internal and subclass use only function to queue an incoming channel from
+ * a listener. A subclass of channel_listener_t should call this when a new
+ * incoming channel is created.
+ */
+
+void
+channel_listener_queue_incoming(channel_listener_t *listener,
+ channel_t *incoming)
+{
+ int need_to_queue = 0;
+
+ tor_assert(listener);
+ tor_assert(listener->state == CHANNEL_LISTENER_STATE_LISTENING);
+ tor_assert(incoming);
+
+ log_debug(LD_CHANNEL,
+ "Queueing incoming channel %p (global ID " U64_FORMAT ") on "
+ "channel listener %p (global ID " U64_FORMAT ")",
+ incoming, U64_PRINTF_ARG(incoming->global_identifier),
+ listener, U64_PRINTF_ARG(listener->global_identifier));
+
+ /* Do we need to queue it, or can we just call the listener right away? */
+ if (!(listener->listener)) need_to_queue = 1;
+ if (listener->incoming_list &&
+ (smartlist_len(listener->incoming_list) > 0))
+ need_to_queue = 1;
+
+ /* If we need to queue and have no queue, create one */
+ if (need_to_queue && !(listener->incoming_list)) {
+ listener->incoming_list = smartlist_new();
+ }
+
+ /* Bump the counter and timestamp it */
+ channel_listener_timestamp_active(listener);
+ channel_listener_timestamp_accepted(listener);
+ ++(listener->n_accepted);
+
+ /* If we don't need to queue, process it right away */
+ if (!need_to_queue) {
+ tor_assert(listener->listener);
+ listener->listener(listener, incoming);
+ }
+ /*
+ * Otherwise, we need to queue; queue and then process the queue if
+ * we can.
+ */
+ else {
+ tor_assert(listener->incoming_list);
+ smartlist_add(listener->incoming_list, incoming);
+ if (listener->listener) channel_listener_process_incoming(listener);
+ }
+}
+
+/**
+ * Process queued incoming cells
+ *
+ * Process as many queued cells as we can from the incoming
+ * cell queue.
+ */
+
+void
+channel_process_cells(channel_t *chan)
+{
+ cell_queue_entry_t *q;
+ tor_assert(chan);
+ tor_assert(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_MAINT ||
+ chan->state == CHANNEL_STATE_OPEN);
+
+ log_debug(LD_CHANNEL,
+ "Processing as many incoming cells as we can for channel %p",
+ chan);
+
+ /* Nothing we can do if we have no registered cell handlers */
+ if (!(chan->cell_handler ||
+ chan->var_cell_handler)) return;
+ /* Nothing we can do if we have no cells */
+ if (TOR_SIMPLEQ_EMPTY(&chan->incoming_queue)) return;
+
+ /*
+ * Process cells until we're done or find one we have no current handler
+ * for.
+ */
+ while (NULL != (q = TOR_SIMPLEQ_FIRST(&chan->incoming_queue))) {
+ tor_assert(q);
+ tor_assert(q->type == CELL_QUEUE_FIXED ||
+ q->type == CELL_QUEUE_VAR);
+
+ if (q->type == CELL_QUEUE_FIXED &&
+ chan->cell_handler) {
+ /* Handle a fixed-length cell */
+ TOR_SIMPLEQ_REMOVE_HEAD(&chan->incoming_queue, next);
+ tor_assert(q->u.fixed.cell);
+ log_debug(LD_CHANNEL,
+ "Processing incoming cell_t %p for channel %p (global ID "
+ U64_FORMAT ")",
+ q->u.fixed.cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->cell_handler(chan, q->u.fixed.cell);
+ tor_free(q);
+ } else if (q->type == CELL_QUEUE_VAR &&
+ chan->var_cell_handler) {
+ /* Handle a variable-length cell */
+ TOR_SIMPLEQ_REMOVE_HEAD(&chan->incoming_queue, next);
+ tor_assert(q->u.var.var_cell);
+ log_debug(LD_CHANNEL,
+ "Processing incoming var_cell_t %p for channel %p (global ID "
+ U64_FORMAT ")",
+ q->u.var.var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->var_cell_handler(chan, q->u.var.var_cell);
+ tor_free(q);
+ } else {
+ /* Can't handle this one */
+ break;
+ }
+ }
+}
+
+/**
+ * Queue incoming cell
+ *
+ * This should be called by a channel_t subclass to queue an incoming fixed-
+ * length cell for processing, and process it if possible.
+ */
+
+void
+channel_queue_cell(channel_t *chan, cell_t *cell)
+{
+ int need_to_queue = 0;
+ cell_queue_entry_t *q;
+
+ tor_assert(chan);
+ tor_assert(cell);
+ tor_assert(chan->state == CHANNEL_STATE_OPEN);
+
+ /* Do we need to queue it, or can we just call the handler right away? */
+ if (!(chan->cell_handler)) need_to_queue = 1;
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ need_to_queue = 1;
+
+ /* Timestamp for receiving */
+ channel_timestamp_recv(chan);
+
+ /* Update the counter */
+ ++(chan->n_cells_recved);
+
+ /* If we don't need to queue we can just call cell_handler */
+ if (!need_to_queue) {
+ tor_assert(chan->cell_handler);
+ log_debug(LD_CHANNEL,
+ "Directly handling incoming cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->cell_handler(chan, cell);
+ } else {
+ /* Otherwise queue it and then process the queue if possible. */
+ q = cell_queue_entry_new_fixed(cell);
+ log_debug(LD_CHANNEL,
+ "Queueing incoming cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ TOR_SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next);
+ if (chan->cell_handler ||
+ chan->var_cell_handler) {
+ channel_process_cells(chan);
+ }
+ }
+}
+
+/**
+ * Queue incoming variable-length cell
+ *
+ * This should be called by a channel_t subclass to queue an incoming
+ * variable-length cell for processing, and process it if possible.
+ */
+
+void
+channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell)
+{
+ int need_to_queue = 0;
+ cell_queue_entry_t *q;
+
+ tor_assert(chan);
+ tor_assert(var_cell);
+ tor_assert(chan->state == CHANNEL_STATE_OPEN);
+
+ /* Do we need to queue it, or can we just call the handler right away? */
+ if (!(chan->var_cell_handler)) need_to_queue = 1;
+ if (! TOR_SIMPLEQ_EMPTY(&chan->incoming_queue))
+ need_to_queue = 1;
+
+ /* Timestamp for receiving */
+ channel_timestamp_recv(chan);
+
+ /* Update the counter */
+ ++(chan->n_cells_recved);
+
+ /* If we don't need to queue we can just call cell_handler */
+ if (!need_to_queue) {
+ tor_assert(chan->var_cell_handler);
+ log_debug(LD_CHANNEL,
+ "Directly handling incoming var_cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ chan->var_cell_handler(chan, var_cell);
+ } else {
+ /* Otherwise queue it and then process the queue if possible. */
+ q = cell_queue_entry_new_var(var_cell);
+ log_debug(LD_CHANNEL,
+ "Queueing incoming var_cell_t %p for channel %p "
+ "(global ID " U64_FORMAT ")",
+ var_cell, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ TOR_SIMPLEQ_INSERT_TAIL(&chan->incoming_queue, q, next);
+ if (chan->cell_handler ||
+ chan->var_cell_handler) {
+ channel_process_cells(chan);
+ }
+ }
+}
+
+/** If <b>packed_cell</b> on <b>chan</b> is a destroy cell, then set
+ * *<b>circid_out</b> to its circuit ID, and return true. Otherwise, return
+ * false. */
+/* XXXX Move this function. */
+int
+packed_cell_is_destroy(channel_t *chan,
+ const packed_cell_t *packed_cell,
+ circid_t *circid_out)
+{
+ if (chan->wide_circ_ids) {
+ if (packed_cell->body[4] == CELL_DESTROY) {
+ *circid_out = ntohl(get_uint32(packed_cell->body));
+ return 1;
+ }
+ } else {
+ if (packed_cell->body[2] == CELL_DESTROY) {
+ *circid_out = ntohs(get_uint16(packed_cell->body));
+ return 1;
+ }
+ }
+ return 0;
+}
+
+/** DOCDOC */
+static int
+is_destroy_cell(channel_t *chan,
+ const cell_queue_entry_t *q, circid_t *circid_out)
+{
+ *circid_out = 0;
+ switch (q->type) {
+ case CELL_QUEUE_FIXED:
+ if (q->u.fixed.cell->command == CELL_DESTROY) {
+ *circid_out = q->u.fixed.cell->circ_id;
+ return 1;
+ }
+ break;
+ case CELL_QUEUE_VAR:
+ if (q->u.var.var_cell->command == CELL_DESTROY) {
+ *circid_out = q->u.var.var_cell->circ_id;
+ return 1;
+ }
+ break;
+ case CELL_QUEUE_PACKED:
+ return packed_cell_is_destroy(chan, q->u.packed.packed_cell, circid_out);
+ }
+ return 0;
+}
+
+/**
+ * Send destroy cell on a channel
+ *
+ * Write a destroy cell with circ ID <b>circ_id</b> and reason <b>reason</b>
+ * onto channel <b>chan</b>. Don't perform range-checking on reason:
+ * we may want to propagate reasons from other cells.
+ */
+
+int
+channel_send_destroy(circid_t circ_id, channel_t *chan, int reason)
+{
+ tor_assert(chan);
+
+ /* Check to make sure we can send on this channel first */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR) &&
+ chan->cmux) {
+ channel_note_destroy_pending(chan, circ_id);
+ circuitmux_append_destroy_cell(chan, chan->cmux, circ_id, reason);
+ log_debug(LD_OR,
+ "Sending destroy (circID %u) on channel %p "
+ "(global ID " U64_FORMAT ")",
+ (unsigned)circ_id, chan,
+ U64_PRINTF_ARG(chan->global_identifier));
+ } else {
+ log_warn(LD_BUG,
+ "Someone called channel_send_destroy() for circID %u "
+ "on a channel " U64_FORMAT " at %p in state %s (%d)",
+ (unsigned)circ_id, U64_PRINTF_ARG(chan->global_identifier),
+ chan, channel_state_to_string(chan->state),
+ chan->state);
+ }
+
+ return 0;
+}
+
+/**
+ * Dump channel statistics to the log
+ *
+ * This is called from dumpstats() in main.c and spams the log with
+ * statistics on channels.
+ */
+
+void
+channel_dumpstats(int severity)
+{
+ if (all_channels && smartlist_len(all_channels) > 0) {
+ tor_log(severity, LD_GENERAL,
+ "Dumping statistics about %d channels:",
+ smartlist_len(all_channels));
+ tor_log(severity, LD_GENERAL,
+ "%d are active, and %d are done and waiting for cleanup",
+ (active_channels != NULL) ?
+ smartlist_len(active_channels) : 0,
+ (finished_channels != NULL) ?
+ smartlist_len(finished_channels) : 0);
+
+ SMARTLIST_FOREACH(all_channels, channel_t *, chan,
+ channel_dump_statistics(chan, severity));
+
+ tor_log(severity, LD_GENERAL,
+ "Done spamming about channels now");
+ } else {
+ tor_log(severity, LD_GENERAL,
+ "No channels to dump");
+ }
+}
+
+/**
+ * Dump channel listener statistics to the log
+ *
+ * This is called from dumpstats() in main.c and spams the log with
+ * statistics on channel listeners.
+ */
+
+void
+channel_listener_dumpstats(int severity)
+{
+ if (all_listeners && smartlist_len(all_listeners) > 0) {
+ tor_log(severity, LD_GENERAL,
+ "Dumping statistics about %d channel listeners:",
+ smartlist_len(all_listeners));
+ tor_log(severity, LD_GENERAL,
+ "%d are active and %d are done and waiting for cleanup",
+ (active_listeners != NULL) ?
+ smartlist_len(active_listeners) : 0,
+ (finished_listeners != NULL) ?
+ smartlist_len(finished_listeners) : 0);
+
+ SMARTLIST_FOREACH(all_listeners, channel_listener_t *, chan_l,
+ channel_listener_dump_statistics(chan_l, severity));
+
+ tor_log(severity, LD_GENERAL,
+ "Done spamming about channel listeners now");
+ } else {
+ tor_log(severity, LD_GENERAL,
+ "No channel listeners to dump");
+ }
+}
+
+/**
+ * Set the cmux policy on all active channels
+ */
+
+void
+channel_set_cmux_policy_everywhere(circuitmux_policy_t *pol)
+{
+ if (!active_channels) return;
+
+ SMARTLIST_FOREACH_BEGIN(active_channels, channel_t *, curr) {
+ if (curr->cmux) {
+ circuitmux_set_policy(curr->cmux, pol);
+ }
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Clean up channels
+ *
+ * This gets called periodically from run_scheduled_events() in main.c;
+ * it cleans up after closed channels.
+ */
+
+void
+channel_run_cleanup(void)
+{
+ channel_t *tmp = NULL;
+
+ /* Check if we need to do anything */
+ if (!finished_channels || smartlist_len(finished_channels) == 0) return;
+
+ /* Iterate through finished_channels and get rid of them */
+ SMARTLIST_FOREACH_BEGIN(finished_channels, channel_t *, curr) {
+ tmp = curr;
+ /* Remove it from the list */
+ SMARTLIST_DEL_CURRENT(finished_channels, curr);
+ /* Also unregister it */
+ channel_unregister(tmp);
+ /* ... and free it */
+ channel_free(tmp);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Clean up channel listeners
+ *
+ * This gets called periodically from run_scheduled_events() in main.c;
+ * it cleans up after closed channel listeners.
+ */
+
+void
+channel_listener_run_cleanup(void)
+{
+ channel_listener_t *tmp = NULL;
+
+ /* Check if we need to do anything */
+ if (!finished_listeners || smartlist_len(finished_listeners) == 0) return;
+
+ /* Iterate through finished_channels and get rid of them */
+ SMARTLIST_FOREACH_BEGIN(finished_listeners, channel_listener_t *, curr) {
+ tmp = curr;
+ /* Remove it from the list */
+ SMARTLIST_DEL_CURRENT(finished_listeners, curr);
+ /* Also unregister it */
+ channel_listener_unregister(tmp);
+ /* ... and free it */
+ channel_listener_free(tmp);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Free a list of channels for channel_free_all()
+ */
+
+static void
+channel_free_list(smartlist_t *channels, int mark_for_close)
+{
+ if (!channels) return;
+
+ SMARTLIST_FOREACH_BEGIN(channels, channel_t *, curr) {
+ /* Deregister and free it */
+ tor_assert(curr);
+ log_debug(LD_CHANNEL,
+ "Cleaning up channel %p (global ID " U64_FORMAT ") "
+ "in state %s (%d)",
+ curr, U64_PRINTF_ARG(curr->global_identifier),
+ channel_state_to_string(curr->state), curr->state);
+ /* Detach circuits early so they can find the channel */
+ if (curr->cmux) {
+ circuitmux_detach_all_circuits(curr->cmux, NULL);
+ }
+ channel_unregister(curr);
+ if (mark_for_close) {
+ if (!(curr->state == CHANNEL_STATE_CLOSING ||
+ curr->state == CHANNEL_STATE_CLOSED ||
+ curr->state == CHANNEL_STATE_ERROR)) {
+ channel_mark_for_close(curr);
+ }
+ channel_force_free(curr);
+ } else channel_free(curr);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Free a list of channel listeners for channel_free_all()
+ */
+
+static void
+channel_listener_free_list(smartlist_t *listeners, int mark_for_close)
+{
+ if (!listeners) return;
+
+ SMARTLIST_FOREACH_BEGIN(listeners, channel_listener_t *, curr) {
+ /* Deregister and free it */
+ tor_assert(curr);
+ log_debug(LD_CHANNEL,
+ "Cleaning up channel listener %p (global ID " U64_FORMAT ") "
+ "in state %s (%d)",
+ curr, U64_PRINTF_ARG(curr->global_identifier),
+ channel_listener_state_to_string(curr->state), curr->state);
+ channel_listener_unregister(curr);
+ if (mark_for_close) {
+ if (!(curr->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ curr->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ curr->state == CHANNEL_LISTENER_STATE_ERROR)) {
+ channel_listener_mark_for_close(curr);
+ }
+ channel_listener_force_free(curr);
+ } else channel_listener_free(curr);
+ } SMARTLIST_FOREACH_END(curr);
+}
+
+/**
+ * Close all channels and free everything
+ *
+ * This gets called from tor_free_all() in main.c to clean up on exit.
+ * It will close all registered channels and free associated storage,
+ * then free the all_channels, active_channels, listening_channels and
+ * finished_channels lists and also channel_identity_map.
+ */
+
+void
+channel_free_all(void)
+{
+ log_debug(LD_CHANNEL,
+ "Shutting down channels...");
+
+ /* First, let's go for finished channels */
+ if (finished_channels) {
+ channel_free_list(finished_channels, 0);
+ smartlist_free(finished_channels);
+ finished_channels = NULL;
+ }
+
+ /* Now the finished listeners */
+ if (finished_listeners) {
+ channel_listener_free_list(finished_listeners, 0);
+ smartlist_free(finished_listeners);
+ finished_listeners = NULL;
+ }
+
+ /* Now all active channels */
+ if (active_channels) {
+ channel_free_list(active_channels, 1);
+ smartlist_free(active_channels);
+ active_channels = NULL;
+ }
+
+ /* Now all active listeners */
+ if (active_listeners) {
+ channel_listener_free_list(active_listeners, 1);
+ smartlist_free(active_listeners);
+ active_listeners = NULL;
+ }
+
+ /* Now all channels, in case any are left over */
+ if (all_channels) {
+ channel_free_list(all_channels, 1);
+ smartlist_free(all_channels);
+ all_channels = NULL;
+ }
+
+ /* Now all listeners, in case any are left over */
+ if (all_listeners) {
+ channel_listener_free_list(all_listeners, 1);
+ smartlist_free(all_listeners);
+ all_listeners = NULL;
+ }
+
+ /* Now free channel_identity_map */
+ log_debug(LD_CHANNEL,
+ "Freeing channel_identity_map");
+ /* Geez, anything still left over just won't die ... let it leak then */
+ HT_CLEAR(channel_idmap, &channel_identity_map);
+
+ log_debug(LD_CHANNEL,
+ "Done cleaning up after channels");
+}
+
+/**
+ * Connect to a given addr/port/digest
+ *
+ * This sets up a new outgoing channel; in the future if multiple
+ * channel_t subclasses are available, this is where the selection policy
+ * should go. It may also be desirable to fold port into tor_addr_t
+ * or make a new type including a tor_addr_t and port, so we have a
+ * single abstract object encapsulating all the protocol details of
+ * how to contact an OR.
+ */
+
+channel_t *
+channel_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest)
+{
+ return channel_tls_connect(addr, port, id_digest);
+}
+
+/**
+ * Decide which of two channels to prefer for extending a circuit
+ *
+ * This function is called while extending a circuit and returns true iff
+ * a is 'better' than b. The most important criterion here is that a
+ * canonical channel is always better than a non-canonical one, but the
+ * number of circuits and the age are used as tie-breakers.
+ *
+ * This is based on the former connection_or_is_better() of connection_or.c
+ */
+
+int
+channel_is_better(time_t now, channel_t *a, channel_t *b,
+ int forgive_new_connections)
+{
+ int a_grace, b_grace;
+ int a_is_canonical, b_is_canonical;
+ int a_has_circs, b_has_circs;
+
+ /*
+ * Do not definitively deprecate a new channel with no circuits on it
+ * until this much time has passed.
+ */
+#define NEW_CHAN_GRACE_PERIOD (15*60)
+
+ tor_assert(a);
+ tor_assert(b);
+
+ /* Check if one is canonical and the other isn't first */
+ a_is_canonical = channel_is_canonical(a);
+ b_is_canonical = channel_is_canonical(b);
+
+ if (a_is_canonical && !b_is_canonical) return 1;
+ if (!a_is_canonical && b_is_canonical) return 0;
+
+ /*
+ * Okay, if we're here they tied on canonicity. Next we check if
+ * they have any circuits, and if one does and the other doesn't,
+ * we prefer the one that does, unless we are forgiving and the
+ * one that has no circuits is in its grace period.
+ */
+
+ a_has_circs = (channel_num_circuits(a) > 0);
+ b_has_circs = (channel_num_circuits(b) > 0);
+ a_grace = (forgive_new_connections &&
+ (now < channel_when_created(a) + NEW_CHAN_GRACE_PERIOD));
+ b_grace = (forgive_new_connections &&
+ (now < channel_when_created(b) + NEW_CHAN_GRACE_PERIOD));
+
+ if (a_has_circs && !b_has_circs && !b_grace) return 1;
+ if (!a_has_circs && b_has_circs && !a_grace) return 0;
+
+ /* They tied on circuits too; just prefer whichever is newer */
+
+ if (channel_when_created(a) > channel_when_created(b)) return 1;
+ else return 0;
+}
+
+/**
+ * Get a channel to extend a circuit
+ *
+ * Pick a suitable channel to extend a circuit to given the desired digest
+ * the address we believe is correct for that digest; this tries to see
+ * if we already have one for the requested endpoint, but if there is no good
+ * channel, set *msg_out to a message describing the channel's state
+ * and our next action, and set *launch_out to a boolean indicated whether
+ * the caller should try to launch a new channel with channel_connect().
+ */
+
+channel_t *
+channel_get_for_extend(const char *digest,
+ const tor_addr_t *target_addr,
+ const char **msg_out,
+ int *launch_out)
+{
+ channel_t *chan, *best = NULL;
+ int n_inprogress_goodaddr = 0, n_old = 0;
+ int n_noncanonical = 0, n_possible = 0;
+ time_t now = approx_time();
+
+ tor_assert(msg_out);
+ tor_assert(launch_out);
+
+ chan = channel_find_by_remote_digest(digest);
+
+ /* Walk the list, unrefing the old one and refing the new at each
+ * iteration.
+ */
+ for (; chan; chan = channel_next_with_digest(chan)) {
+ tor_assert(tor_memeq(chan->identity_digest,
+ digest, DIGEST_LEN));
+
+ if (chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)
+ continue;
+
+ /* Never return a channel on which the other end appears to be
+ * a client. */
+ if (channel_is_client(chan)) {
+ continue;
+ }
+
+ /* Never return a non-open connection. */
+ 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))
+ ++n_inprogress_goodaddr;
+ continue;
+ }
+
+ /* Never return a connection that shouldn't be used for circs. */
+ if (channel_is_bad_for_new_circs(chan)) {
+ ++n_old;
+ continue;
+ }
+
+ /* Never return a non-canonical connection using a recent link protocol
+ * if the address is not what we wanted.
+ *
+ * The channel_is_canonical_is_reliable() function asks the lower layer
+ * if we should trust channel_is_canonical(). The below is from the
+ * comments of the old circuit_or_get_for_extend() and applies when
+ * the lower-layer transport is channel_tls_t.
+ *
+ * (For old link protocols, we can't rely on is_canonical getting
+ * set properly if we're talking to the right address, since we might
+ * have an out-of-date descriptor, and we will get no NETINFO cell to
+ * tell us about the right address.)
+ */
+ if (!channel_is_canonical(chan) &&
+ channel_is_canonical_is_reliable(chan) &&
+ !channel_matches_target_addr_for_extend(chan, target_addr)) {
+ ++n_noncanonical;
+ continue;
+ }
+
+ ++n_possible;
+
+ if (!best) {
+ best = chan; /* If we have no 'best' so far, this one is good enough. */
+ continue;
+ }
+
+ if (channel_is_better(now, chan, best, 0))
+ best = chan;
+ }
+
+ if (best) {
+ *msg_out = "Connection is fine; using it.";
+ *launch_out = 0;
+ return best;
+ } else if (n_inprogress_goodaddr) {
+ *msg_out = "Connection in progress; waiting.";
+ *launch_out = 0;
+ return NULL;
+ } else if (n_old || n_noncanonical) {
+ *msg_out = "Connections all too old, or too non-canonical. "
+ " Launching a new one.";
+ *launch_out = 1;
+ return NULL;
+ } else {
+ *msg_out = "Not connected. Connecting.";
+ *launch_out = 1;
+ return NULL;
+ }
+}
+
+/**
+ * Describe the transport subclass for a channel
+ *
+ * Invoke a method to get a string description of the lower-layer
+ * transport for this channel.
+ */
+
+const char *
+channel_describe_transport(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->describe_transport);
+
+ return chan->describe_transport(chan);
+}
+
+/**
+ * Describe the transport subclass for a channel listener
+ *
+ * Invoke a method to get a string description of the lower-layer
+ * transport for this channel listener.
+ */
+
+const char *
+channel_listener_describe_transport(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+ tor_assert(chan_l->describe_transport);
+
+ return chan_l->describe_transport(chan_l);
+}
+
+/**
+ * Return the number of entries in <b>queue</b>
+ */
+static int
+chan_cell_queue_len(const chan_cell_queue_t *queue)
+{
+ int r = 0;
+ cell_queue_entry_t *cell;
+ TOR_SIMPLEQ_FOREACH(cell, queue, next)
+ ++r;
+ return r;
+}
+
+/**
+ * Dump channel statistics
+ *
+ * Dump statistics for one channel to the log
+ */
+
+void
+channel_dump_statistics(channel_t *chan, int severity)
+{
+ double avg, interval, age;
+ time_t now = time(NULL);
+ tor_addr_t remote_addr;
+ int have_remote_addr;
+ char *remote_addr_str;
+
+ tor_assert(chan);
+
+ age = (double)(now - chan->timestamp_created);
+
+ tor_log(severity, LD_GENERAL,
+ "Channel " U64_FORMAT " (at %p) with transport %s is in state "
+ "%s (%d)",
+ U64_PRINTF_ARG(chan->global_identifier), chan,
+ channel_describe_transport(chan),
+ channel_state_to_string(chan->state), chan->state);
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " was created at " U64_FORMAT
+ " (" U64_FORMAT " seconds ago) "
+ "and last active at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_created),
+ U64_PRINTF_ARG(now - chan->timestamp_created),
+ U64_PRINTF_ARG(chan->timestamp_active),
+ U64_PRINTF_ARG(now - chan->timestamp_active));
+
+ /* Handle digest and nickname */
+ if (!tor_digest_is_zero(chan->identity_digest)) {
+ if (chan->nickname) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " says it is connected "
+ "to an OR with digest %s and nickname %s",
+ U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN),
+ chan->nickname);
+ } else {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " says it is connected "
+ "to an OR with digest %s and no known nickname",
+ U64_PRINTF_ARG(chan->global_identifier),
+ hex_str(chan->identity_digest, DIGEST_LEN));
+ }
+ } else {
+ if (chan->nickname) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " does not know the digest"
+ " of the OR it is connected to, but reports its nickname is %s",
+ U64_PRINTF_ARG(chan->global_identifier),
+ chan->nickname);
+ } else {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " does not know the digest"
+ " or the nickname of the OR it is connected to",
+ U64_PRINTF_ARG(chan->global_identifier));
+ }
+ }
+
+ /* Handle remote address and descriptions */
+ have_remote_addr = channel_get_addr_if_possible(chan, &remote_addr);
+ if (have_remote_addr) {
+ char *actual = tor_strdup(channel_get_actual_remote_descr(chan));
+ remote_addr_str = tor_dup_addr(&remote_addr);
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " says its remote address"
+ " is %s, and gives a canonical description of \"%s\" and an "
+ "actual description of \"%s\"",
+ U64_PRINTF_ARG(chan->global_identifier),
+ remote_addr_str,
+ channel_get_canonical_remote_descr(chan),
+ actual);
+ tor_free(remote_addr_str);
+ tor_free(actual);
+ } else {
+ char *actual = tor_strdup(channel_get_actual_remote_descr(chan));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " does not know its remote "
+ "address, but gives a canonical description of \"%s\" and an "
+ "actual description of \"%s\"",
+ U64_PRINTF_ARG(chan->global_identifier),
+ channel_get_canonical_remote_descr(chan),
+ actual);
+ tor_free(actual);
+ }
+
+ /* Handle marks */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has these marks: %s %s %s "
+ "%s %s %s",
+ U64_PRINTF_ARG(chan->global_identifier),
+ channel_is_bad_for_new_circs(chan) ?
+ "bad_for_new_circs" : "!bad_for_new_circs",
+ channel_is_canonical(chan) ?
+ "canonical" : "!canonical",
+ channel_is_canonical_is_reliable(chan) ?
+ "is_canonical_is_reliable" :
+ "!is_canonical_is_reliable",
+ channel_is_client(chan) ?
+ "client" : "!client",
+ channel_is_local(chan) ?
+ "local" : "!local",
+ channel_is_incoming(chan) ?
+ "incoming" : "outgoing");
+
+ /* Describe queues */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has %d queued incoming cells"
+ " and %d queued outgoing cells",
+ U64_PRINTF_ARG(chan->global_identifier),
+ chan_cell_queue_len(&chan->incoming_queue),
+ chan_cell_queue_len(&chan->outgoing_queue));
+
+ /* Describe circuits */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has %d active circuits out of"
+ " %d in total",
+ U64_PRINTF_ARG(chan->global_identifier),
+ (chan->cmux != NULL) ?
+ circuitmux_num_active_circuits(chan->cmux) : 0,
+ (chan->cmux != NULL) ?
+ circuitmux_num_circuits(chan->cmux) : 0);
+
+ /* Describe timestamps */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " was last used by a "
+ "client at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_client),
+ U64_PRINTF_ARG(now - chan->timestamp_client));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " was last drained at "
+ U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_drained),
+ U64_PRINTF_ARG(now - chan->timestamp_drained));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " last received a cell "
+ "at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_recv),
+ U64_PRINTF_ARG(now - chan->timestamp_recv));
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " last trasmitted a cell "
+ "at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->timestamp_xmit),
+ U64_PRINTF_ARG(now - chan->timestamp_xmit));
+
+ /* Describe counters and rates */
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has received "
+ U64_FORMAT " cells and transmitted " U64_FORMAT,
+ U64_PRINTF_ARG(chan->global_identifier),
+ U64_PRINTF_ARG(chan->n_cells_recved),
+ U64_PRINTF_ARG(chan->n_cells_xmitted));
+ if (now > chan->timestamp_created &&
+ chan->timestamp_created > 0) {
+ if (chan->n_cells_recved > 0) {
+ avg = (double)(chan->n_cells_recved) / age;
+ if (avg >= 1.0) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "cells received per second",
+ U64_PRINTF_ARG(chan->global_identifier), avg);
+ } else if (avg >= 0.0) {
+ interval = 1.0 / avg;
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "seconds between received cells",
+ U64_PRINTF_ARG(chan->global_identifier), interval);
+ }
+ }
+ if (chan->n_cells_xmitted > 0) {
+ avg = (double)(chan->n_cells_xmitted) / age;
+ if (avg >= 1.0) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "cells transmitted per second",
+ U64_PRINTF_ARG(chan->global_identifier), avg);
+ } else if (avg >= 0.0) {
+ interval = 1.0 / avg;
+ tor_log(severity, LD_GENERAL,
+ " * Channel " U64_FORMAT " has averaged %f "
+ "seconds between transmitted cells",
+ U64_PRINTF_ARG(chan->global_identifier), interval);
+ }
+ }
+ }
+
+ /* Dump anything the lower layer has to say */
+ channel_dump_transport_statistics(chan, severity);
+}
+
+/**
+ * Dump channel listener statistics
+ *
+ * Dump statistics for one channel listener to the log
+ */
+
+void
+channel_listener_dump_statistics(channel_listener_t *chan_l, int severity)
+{
+ double avg, interval, age;
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ age = (double)(now - chan_l->timestamp_created);
+
+ tor_log(severity, LD_GENERAL,
+ "Channel listener " U64_FORMAT " (at %p) with transport %s is in "
+ "state %s (%d)",
+ U64_PRINTF_ARG(chan_l->global_identifier), chan_l,
+ channel_listener_describe_transport(chan_l),
+ channel_listener_state_to_string(chan_l->state), chan_l->state);
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " was created at " U64_FORMAT
+ " (" U64_FORMAT " seconds ago) "
+ "and last active at " U64_FORMAT " (" U64_FORMAT " seconds ago)",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ U64_PRINTF_ARG(chan_l->timestamp_created),
+ U64_PRINTF_ARG(now - chan_l->timestamp_created),
+ U64_PRINTF_ARG(chan_l->timestamp_active),
+ U64_PRINTF_ARG(now - chan_l->timestamp_active));
+
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " last accepted an incoming "
+ "channel at " U64_FORMAT " (" U64_FORMAT " seconds ago) "
+ "and has accepted " U64_FORMAT " channels in total",
+ U64_PRINTF_ARG(chan_l->global_identifier),
+ U64_PRINTF_ARG(chan_l->timestamp_accepted),
+ U64_PRINTF_ARG(now - chan_l->timestamp_accepted),
+ U64_PRINTF_ARG(chan_l->n_accepted));
+
+ /*
+ * If it's sensible to do so, get the rate of incoming channels on this
+ * listener
+ */
+ if (now > chan_l->timestamp_created &&
+ chan_l->timestamp_created > 0 &&
+ chan_l->n_accepted > 0) {
+ avg = (double)(chan_l->n_accepted) / age;
+ if (avg >= 1.0) {
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " has averaged %f incoming "
+ "channels per second",
+ U64_PRINTF_ARG(chan_l->global_identifier), avg);
+ } else if (avg >= 0.0) {
+ interval = 1.0 / avg;
+ tor_log(severity, LD_GENERAL,
+ " * Channel listener " U64_FORMAT " has averaged %f seconds "
+ "between incoming channels",
+ U64_PRINTF_ARG(chan_l->global_identifier), interval);
+ }
+ }
+
+ /* Dump anything the lower layer has to say */
+ channel_listener_dump_transport_statistics(chan_l, severity);
+}
+
+/**
+ * Invoke transport-specific stats dump for channel
+ *
+ * If there is a lower-layer statistics dump method, invoke it
+ */
+
+void
+channel_dump_transport_statistics(channel_t *chan, int severity)
+{
+ tor_assert(chan);
+
+ if (chan->dumpstats) chan->dumpstats(chan, severity);
+}
+
+/**
+ * Invoke transport-specific stats dump for channel listener
+ *
+ * If there is a lower-layer statistics dump method, invoke it
+ */
+
+void
+channel_listener_dump_transport_statistics(channel_listener_t *chan_l,
+ int severity)
+{
+ tor_assert(chan_l);
+
+ if (chan_l->dumpstats) chan_l->dumpstats(chan_l, severity);
+}
+
+/**
+ * Return text description of the remote endpoint
+ *
+ * This function return a test provided by the lower layer of the remote
+ * endpoint for this channel; it should specify the actual address connected
+ * to/from.
+ *
+ * Subsequent calls to channel_get_{actual,canonical}_remote_{address,descr}
+ * may invalidate the return value from this function.
+ */
+const char *
+channel_get_actual_remote_descr(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->get_remote_descr);
+
+ /* Param 1 indicates the actual description */
+ return chan->get_remote_descr(chan, GRD_FLAG_ORIGINAL);
+}
+
+/**
+ * Return the text address of the remote endpoint.
+ *
+ * Subsequent calls to channel_get_{actual,canonical}_remote_{address,descr}
+ * may invalidate the return value from this function.
+ */
+const char *
+channel_get_actual_remote_address(channel_t *chan)
+{
+ /* Param 1 indicates the actual description */
+ return chan->get_remote_descr(chan, GRD_FLAG_ORIGINAL|GRD_FLAG_ADDR_ONLY);
+}
+
+/**
+ * Return text description of the remote endpoint canonical address
+ *
+ * This function return a test provided by the lower layer of the remote
+ * endpoint for this channel; it should use the known canonical address for
+ * this OR's identity digest if possible.
+ *
+ * Subsequent calls to channel_get_{actual,canonical}_remote_{address,descr}
+ * may invalidate the return value from this function.
+ */
+const char *
+channel_get_canonical_remote_descr(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->get_remote_descr);
+
+ /* Param 0 indicates the canonicalized description */
+ return chan->get_remote_descr(chan, 0);
+}
+
+/**
+ * Get remote address if possible.
+ *
+ * Write the remote address out to a tor_addr_t if the underlying transport
+ * supports this operation, and return 1. Return 0 if the underlying transport
+ * doesn't let us do this.
+ */
+int
+channel_get_addr_if_possible(channel_t *chan, tor_addr_t *addr_out)
+{
+ tor_assert(chan);
+ tor_assert(addr_out);
+
+ if (chan->get_remote_addr)
+ return chan->get_remote_addr(chan, addr_out);
+ /* Else no support, method not implemented */
+ else return 0;
+}
+
+/**
+ * Check if there are outgoing queue writes on this channel
+ *
+ * Indicate if either we have queued cells, or if not, whether the underlying
+ * lower-layer transport thinks it has an output queue.
+ */
+
+int
+channel_has_queued_writes(channel_t *chan)
+{
+ int has_writes = 0;
+
+ tor_assert(chan);
+ tor_assert(chan->has_queued_writes);
+
+ if (! TOR_SIMPLEQ_EMPTY(&chan->outgoing_queue)) {
+ has_writes = 1;
+ } else {
+ /* Check with the lower layer */
+ has_writes = chan->has_queued_writes(chan);
+ }
+
+ return has_writes;
+}
+
+/**
+ * Check the is_bad_for_new_circs flag
+ *
+ * This function returns the is_bad_for_new_circs flag of the specified
+ * channel.
+ */
+
+int
+channel_is_bad_for_new_circs(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_bad_for_new_circs;
+}
+
+/**
+ * Mark a channel as bad for new circuits
+ *
+ * Set the is_bad_for_new_circs_flag on chan.
+ */
+
+void
+channel_mark_bad_for_new_circs(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_bad_for_new_circs = 1;
+}
+
+/**
+ * Get the client flag
+ *
+ * This returns the client flag of a channel, which will be set if
+ * command_process_create_cell() in command.c thinks this is a connection
+ * from a client.
+ */
+
+int
+channel_is_client(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_client;
+}
+
+/**
+ * Set the client flag
+ *
+ * Mark a channel as being from a client
+ */
+
+void
+channel_mark_client(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_client = 1;
+}
+
+/**
+ * Get the canonical flag for a channel
+ *
+ * This returns the is_canonical for a channel; this flag is determined by
+ * the lower layer and can't be set in a transport-independent way.
+ */
+
+int
+channel_is_canonical(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->is_canonical);
+
+ return chan->is_canonical(chan, 0);
+}
+
+/**
+ * Test if the canonical flag is reliable
+ *
+ * This function asks if the lower layer thinks it's safe to trust the
+ * result of channel_is_canonical()
+ */
+
+int
+channel_is_canonical_is_reliable(channel_t *chan)
+{
+ tor_assert(chan);
+ tor_assert(chan->is_canonical);
+
+ return chan->is_canonical(chan, 1);
+}
+
+/**
+ * Test incoming flag
+ *
+ * This function gets the incoming flag; this is set when a listener spawns
+ * a channel. If this returns true the channel was remotely initiated.
+ */
+
+int
+channel_is_incoming(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_incoming;
+}
+
+/**
+ * Set the incoming flag
+ *
+ * This function is called when a channel arrives on a listening channel
+ * to mark it as incoming.
+ */
+
+void
+channel_mark_incoming(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_incoming = 1;
+}
+
+/**
+ * Test local flag
+ *
+ * This function gets the local flag; the lower layer should set this when
+ * setting up the channel if is_local_addr() is true for all of the
+ * destinations it will communicate with on behalf of this channel. It's
+ * used to decide whether to declare the network reachable when seeing incoming
+ * traffic on the channel.
+ */
+
+int
+channel_is_local(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->is_local;
+}
+
+/**
+ * Set the local flag
+ *
+ * This internal-only function should be called by the lower layer if the
+ * channel is to a local address. See channel_is_local() above or the
+ * description of the is_local bit in channel.h
+ */
+
+void
+channel_mark_local(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_local = 1;
+}
+
+/**
+ * Test outgoing flag
+ *
+ * This function gets the outgoing flag; this is the inverse of the incoming
+ * bit set when a listener spawns a channel. If this returns true the channel
+ * was locally initiated.
+ */
+
+int
+channel_is_outgoing(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return !(chan->is_incoming);
+}
+
+/**
+ * Mark a channel as outgoing
+ *
+ * This function clears the incoming flag and thus marks a channel as
+ * outgoing.
+ */
+
+void
+channel_mark_outgoing(channel_t *chan)
+{
+ tor_assert(chan);
+
+ chan->is_incoming = 0;
+}
+
+/*********************
+ * Timestamp updates *
+ ********************/
+
+/**
+ * Update the created timestamp for a channel
+ *
+ * This updates the channel's created timestamp and should only be called
+ * from channel_init().
+ */
+
+void
+channel_timestamp_created(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_created = now;
+}
+
+/**
+ * Update the created timestamp for a channel listener
+ *
+ * This updates the channel listener's created timestamp and should only be
+ * called from channel_init_listener().
+ */
+
+void
+channel_listener_timestamp_created(channel_listener_t *chan_l)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ chan_l->timestamp_created = now;
+}
+
+/**
+ * Update the last active timestamp for a channel
+ *
+ * This function updates the channel's last active timestamp; it should be
+ * called by the lower layer whenever there is activity on the channel which
+ * does not lead to a cell being transmitted or received; the active timestamp
+ * is also updated from channel_timestamp_recv() and channel_timestamp_xmit(),
+ * but it should be updated for things like the v3 handshake and stuff that
+ * produce activity only visible to the lower layer.
+ */
+
+void
+channel_timestamp_active(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+}
+
+/**
+ * Update the last active timestamp for a channel listener
+ */
+
+void
+channel_listener_timestamp_active(channel_listener_t *chan_l)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ chan_l->timestamp_active = now;
+}
+
+/**
+ * Update the last accepted timestamp.
+ *
+ * This function updates the channel listener's last accepted timestamp; it
+ * should be called whenever a new incoming channel is accepted on a
+ * listener.
+ */
+
+void
+channel_listener_timestamp_accepted(channel_listener_t *chan_l)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan_l);
+
+ chan_l->timestamp_active = now;
+ chan_l->timestamp_accepted = now;
+}
+
+/**
+ * Update client timestamp
+ *
+ * This function is called by relay.c to timestamp a channel that appears to
+ * be used as a client.
+ */
+
+void
+channel_timestamp_client(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_client = now;
+}
+
+/**
+ * Update the last drained timestamp
+ *
+ * This is called whenever we transmit a cell which leaves the outgoing cell
+ * queue completely empty. It also updates the xmit time and the active time.
+ */
+
+void
+channel_timestamp_drained(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+ chan->timestamp_drained = now;
+ chan->timestamp_xmit = now;
+}
+
+/**
+ * Update the recv timestamp
+ *
+ * This is called whenever we get an incoming cell from the lower layer.
+ * This also updates the active timestamp.
+ */
+
+void
+channel_timestamp_recv(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+ chan->timestamp_recv = now;
+}
+
+/**
+ * Update the xmit timestamp
+ * This is called whenever we pass an outgoing cell to the lower layer. This
+ * also updates the active timestamp.
+ */
+
+void
+channel_timestamp_xmit(channel_t *chan)
+{
+ time_t now = time(NULL);
+
+ tor_assert(chan);
+
+ chan->timestamp_active = now;
+ chan->timestamp_xmit = now;
+}
+
+/***************************************************************
+ * Timestamp queries - see above for definitions of timestamps *
+ **************************************************************/
+
+/**
+ * Query created timestamp for a channel
+ */
+
+time_t
+channel_when_created(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_created;
+}
+
+/**
+ * Query created timestamp for a channel listener
+ */
+
+time_t
+channel_listener_when_created(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->timestamp_created;
+}
+
+/**
+ * Query last active timestamp for a channel
+ */
+
+time_t
+channel_when_last_active(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_active;
+}
+
+/**
+ * Query last active timestamp for a channel listener
+ */
+
+time_t
+channel_listener_when_last_active(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->timestamp_active;
+}
+
+/**
+ * Query last accepted timestamp for a channel listener
+ */
+
+time_t
+channel_listener_when_last_accepted(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->timestamp_accepted;
+}
+
+/**
+ * Query client timestamp
+ */
+
+time_t
+channel_when_last_client(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_client;
+}
+
+/**
+ * Query drained timestamp
+ */
+
+time_t
+channel_when_last_drained(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_drained;
+}
+
+/**
+ * Query recv timestamp
+ */
+
+time_t
+channel_when_last_recv(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_recv;
+}
+
+/**
+ * Query xmit timestamp
+ */
+
+time_t
+channel_when_last_xmit(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->timestamp_xmit;
+}
+
+/**
+ * Query accepted counter
+ */
+
+uint64_t
+channel_listener_count_accepted(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return chan_l->n_accepted;
+}
+
+/**
+ * Query received cell counter
+ */
+
+uint64_t
+channel_count_recved(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->n_cells_recved;
+}
+
+/**
+ * Query transmitted cell counter
+ */
+
+uint64_t
+channel_count_xmitted(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->n_cells_xmitted;
+}
+
+/**
+ * Check if a channel matches an extend_info_t
+ *
+ * This function calls the lower layer and asks if this channel matches a
+ * given extend_info_t.
+ */
+
+int
+channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info)
+{
+ tor_assert(chan);
+ tor_assert(chan->matches_extend_info);
+ tor_assert(extend_info);
+
+ return chan->matches_extend_info(chan, extend_info);
+}
+
+/**
+ * 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.
+ */
+
+int
+channel_matches_target_addr_for_extend(channel_t *chan,
+ const tor_addr_t *target)
+{
+ tor_assert(chan);
+ tor_assert(chan->matches_target);
+ tor_assert(target);
+
+ return chan->matches_target(chan, target);
+}
+
+/**
+ * Return the total number of circuits used by a channel
+ *
+ * @param chan Channel to query
+ * @return Number of circuits using this as n_chan or p_chan
+ */
+
+unsigned int
+channel_num_circuits(channel_t *chan)
+{
+ tor_assert(chan);
+
+ return chan->num_n_circuits +
+ chan->num_p_circuits;
+}
+
+/**
+ * Set up circuit ID generation
+ *
+ * This is called when setting up a channel and replaces the old
+ * connection_or_set_circid_type()
+ */
+void
+channel_set_circid_type(channel_t *chan,
+ crypto_pk_t *identity_rcvd,
+ int consider_identity)
+{
+ int started_here;
+ crypto_pk_t *our_identity;
+
+ tor_assert(chan);
+
+ started_here = channel_is_outgoing(chan);
+
+ if (! consider_identity) {
+ if (started_here)
+ chan->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ else
+ chan->circ_id_type = CIRC_ID_TYPE_LOWER;
+ return;
+ }
+
+ our_identity = started_here ?
+ get_tlsclient_identity_key() : get_server_identity_key();
+
+ if (identity_rcvd) {
+ if (crypto_pk_cmp_keys(our_identity, identity_rcvd) < 0) {
+ chan->circ_id_type = CIRC_ID_TYPE_LOWER;
+ } else {
+ chan->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ }
+ } else {
+ chan->circ_id_type = CIRC_ID_TYPE_NEITHER;
+ }
+}
+
diff --git a/src/or/channel.h b/src/or/channel.h
new file mode 100644
index 000000000..bd9a02f32
--- /dev/null
+++ b/src/or/channel.h
@@ -0,0 +1,488 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channel.h
+ * \brief Header file for channel.c
+ **/
+
+#ifndef TOR_CHANNEL_H
+#define TOR_CHANNEL_H
+
+#include "or.h"
+#include "circuitmux.h"
+
+/* Channel handler function pointer typedefs */
+typedef void (*channel_listener_fn_ptr)(channel_listener_t *, channel_t *);
+typedef void (*channel_cell_handler_fn_ptr)(channel_t *, cell_t *);
+typedef void (*channel_var_cell_handler_fn_ptr)(channel_t *, var_cell_t *);
+
+struct cell_queue_entry_s;
+TOR_SIMPLEQ_HEAD(chan_cell_queue, cell_queue_entry_s) incoming_queue;
+typedef struct chan_cell_queue chan_cell_queue_t;
+
+/**
+ * Channel struct; see the channel_t typedef in or.h. A channel is an
+ * abstract interface for the OR-to-OR connection, similar to connection_or_t,
+ * but without the strong coupling to the underlying TLS implementation. They
+ * are constructed by calling a protocol-specific function to open a channel
+ * to a particular node, and once constructed support the abstract operations
+ * defined below.
+ */
+
+struct channel_s {
+ /** Magic number for type-checking cast macros */
+ uint32_t magic;
+
+ /** Current channel state */
+ channel_state_t state;
+
+ /** Globally unique ID number for a channel over the lifetime of a Tor
+ * process.
+ */
+ uint64_t global_identifier;
+
+ /** Should we expect to see this channel in the channel lists? */
+ unsigned char registered:1;
+
+ /** has this channel ever been open? */
+ unsigned int has_been_open:1;
+
+ /** Why did we close?
+ */
+ enum {
+ CHANNEL_NOT_CLOSING = 0,
+ CHANNEL_CLOSE_REQUESTED,
+ CHANNEL_CLOSE_FROM_BELOW,
+ CHANNEL_CLOSE_FOR_ERROR
+ } reason_for_closing;
+
+ /** Timestamps for both cell channels and listeners */
+ time_t timestamp_created; /* Channel created */
+ time_t timestamp_active; /* Any activity */
+
+ /* Methods implemented by the lower layer */
+
+ /** Free a channel */
+ void (*free)(channel_t *);
+ /** Close an open channel */
+ void (*close)(channel_t *);
+ /** Describe the transport subclass for this channel */
+ const char * (*describe_transport)(channel_t *);
+ /** Optional method to dump transport-specific statistics on the channel */
+ void (*dumpstats)(channel_t *, int);
+
+ /** Registered handlers for incoming cells */
+ channel_cell_handler_fn_ptr cell_handler;
+ channel_var_cell_handler_fn_ptr var_cell_handler;
+
+ /* Methods implemented by the lower layer */
+
+ /**
+ * Ask the underlying transport what the remote endpoint address is, in
+ * a tor_addr_t. This is optional and subclasses may leave this NULL.
+ * If they implement it, they should write the address out to the
+ * provided tor_addr_t *, and return 1 if successful or 0 if no address
+ * 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
+ /**
+ * Get a text description of the remote endpoint; canonicalized if the flag
+ * GRD_FLAG_ORIGINAL is not set, or the one we originally connected
+ * to/received from if it is. If GRD_FLAG_ADDR_ONLY is set, we return only
+ * the original address.
+ */
+ const char * (*get_remote_descr)(channel_t *, int);
+ /** Check if the lower layer has queued writes */
+ int (*has_queued_writes)(channel_t *);
+ /**
+ * If the second param is zero, ask the lower layer if this is
+ * 'canonical', for a transport-specific definition of canonical; if
+ * it is 1, ask if the answer to the preceding query is safe to rely
+ * on.
+ */
+ int (*is_canonical)(channel_t *, int);
+ /** Check if this channel matches a specified extend_info_t */
+ int (*matches_extend_info)(channel_t *, extend_info_t *);
+ /** Check if this channel matches a target address when extending */
+ int (*matches_target)(channel_t *, const tor_addr_t *);
+ /** Write a cell to an open channel */
+ int (*write_cell)(channel_t *, cell_t *);
+ /** Write a packed cell to an open channel */
+ int (*write_packed_cell)(channel_t *, packed_cell_t *);
+ /** Write a variable-length cell to an open channel */
+ int (*write_var_cell)(channel_t *, var_cell_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];
+ /** Nickname of the OR on the other side, or NULL if none. */
+ char *nickname;
+
+ /**
+ * Linked list of channels with the same identity digest, for the
+ * digest->channel map
+ */
+ TOR_LIST_ENTRY(channel_s) next_with_same_id;
+
+ /** List of incoming cells to handle */
+ chan_cell_queue_t incoming_queue;
+
+ /** List of queued outgoing cells */
+ chan_cell_queue_t outgoing_queue;
+
+ /** Circuit mux for circuits sending on this channel */
+ circuitmux_t *cmux;
+
+ /** Circuit ID generation stuff for use by circuitbuild.c */
+
+ /**
+ * When we send CREATE cells along this connection, which half of the
+ * space should we use?
+ */
+ circ_id_type_bitfield_t circ_id_type:2;
+ /** DOCDOC*/
+ unsigned wide_circ_ids:1;
+
+ /** For how many circuits are we n_chan? What about p_chan? */
+ unsigned int num_n_circuits, num_p_circuits;
+
+ /**
+ * True iff this channel shouldn't get any new circs attached to it,
+ * because the connection is too old, or because there's a better one.
+ * More generally, this flag is used to note an unhealthy connection;
+ * for example, if a bad connection fails we shouldn't assume that the
+ * router itself has a problem.
+ */
+ unsigned int is_bad_for_new_circs:1;
+
+ /** True iff we have decided that the other end of this connection
+ * is a client. Channels with this flag set should never be used
+ * to satisfy an EXTEND request. */
+ unsigned int is_client:1;
+
+ /** Set if the channel was initiated remotely (came from a listener) */
+ unsigned int is_incoming:1;
+
+ /** Set by lower layer if this is local; i.e., everything it communicates
+ * with for this channel returns true for is_local_addr(). This is used
+ * to decide whether to declare reachability when we receive something on
+ * this channel in circuitbuild.c
+ */
+ unsigned int is_local:1;
+
+ /** Have we logged a warning about circID exhaustion on this channel?
+ * If so, when? */
+ ratelim_t last_warned_circ_ids_exhausted;
+
+ /** Channel timestamps for cell channels */
+ time_t timestamp_client; /* Client used this, according to relay.c */
+ time_t timestamp_drained; /* Output queue empty */
+ time_t timestamp_recv; /* Cell received from lower layer */
+ time_t timestamp_xmit; /* Cell sent to lower layer */
+
+ /* Timestamp for relay.c */
+ time_t timestamp_last_added_nonpadding;
+
+ /** Unique ID for measuring direct network status requests;vtunneled ones
+ * come over a circuit_t, which has a dirreq_id field as well, but is a
+ * distinct namespace. */
+ uint64_t dirreq_id;
+
+ /** Channel counters for cell channels */
+ uint64_t n_cells_recved;
+ uint64_t n_cells_xmitted;
+};
+
+struct channel_listener_s {
+ /* Current channel listener state */
+ channel_listener_state_t state;
+
+ /* Globally unique ID number for a channel over the lifetime of a Tor
+ * process.
+ */
+ uint64_t global_identifier;
+
+ /** Should we expect to see this channel in the channel lists? */
+ unsigned char registered:1;
+
+ /** Why did we close?
+ */
+ enum {
+ CHANNEL_LISTENER_NOT_CLOSING = 0,
+ CHANNEL_LISTENER_CLOSE_REQUESTED,
+ CHANNEL_LISTENER_CLOSE_FROM_BELOW,
+ CHANNEL_LISTENER_CLOSE_FOR_ERROR
+ } reason_for_closing;
+
+ /** Timestamps for both cell channels and listeners */
+ time_t timestamp_created; /* Channel created */
+ time_t timestamp_active; /* Any activity */
+
+ /* Methods implemented by the lower layer */
+
+ /** Free a channel */
+ void (*free)(channel_listener_t *);
+ /** Close an open channel */
+ void (*close)(channel_listener_t *);
+ /** Describe the transport subclass for this channel */
+ const char * (*describe_transport)(channel_listener_t *);
+ /** Optional method to dump transport-specific statistics on the channel */
+ void (*dumpstats)(channel_listener_t *, int);
+
+ /** Registered listen handler to call on incoming connection */
+ channel_listener_fn_ptr listener;
+
+ /** List of pending incoming connections */
+ smartlist_t *incoming_list;
+
+ /** Timestamps for listeners */
+ time_t timestamp_accepted;
+
+ /** Counters for listeners */
+ uint64_t n_accepted;
+};
+
+/* Channel state manipulations */
+
+int channel_state_is_valid(channel_state_t state);
+int channel_listener_state_is_valid(channel_listener_state_t state);
+
+int channel_state_can_transition(channel_state_t from, channel_state_t to);
+int channel_listener_state_can_transition(channel_listener_state_t from,
+ channel_listener_state_t to);
+
+const char * channel_state_to_string(channel_state_t state);
+const char *
+channel_listener_state_to_string(channel_listener_state_t state);
+
+/* Abstract channel operations */
+
+void channel_mark_for_close(channel_t *chan);
+void channel_write_cell(channel_t *chan, cell_t *cell);
+void channel_write_packed_cell(channel_t *chan, packed_cell_t *cell);
+void channel_write_var_cell(channel_t *chan, var_cell_t *cell);
+
+void channel_listener_mark_for_close(channel_listener_t *chan_l);
+
+/* Channel callback registrations */
+
+/* Listener callback */
+channel_listener_fn_ptr
+channel_listener_get_listener_fn(channel_listener_t *chan);
+
+void channel_listener_set_listener_fn(channel_listener_t *chan,
+ channel_listener_fn_ptr listener);
+
+/* Incoming cell callbacks */
+channel_cell_handler_fn_ptr channel_get_cell_handler(channel_t *chan);
+
+channel_var_cell_handler_fn_ptr
+channel_get_var_cell_handler(channel_t *chan);
+
+void channel_set_cell_handlers(channel_t *chan,
+ channel_cell_handler_fn_ptr cell_handler,
+ channel_var_cell_handler_fn_ptr
+ var_cell_handler);
+
+/* Clean up closed channels and channel listeners periodically; these are
+ * called from run_scheduled_events() in main.c.
+ */
+void channel_run_cleanup(void);
+void channel_listener_run_cleanup(void);
+
+/* Close all channels and deallocate everything */
+void channel_free_all(void);
+
+/* Dump some statistics in the log */
+void channel_dumpstats(int severity);
+void channel_listener_dumpstats(int severity);
+
+/* Set the cmux policy on all active channels */
+void channel_set_cmux_policy_everywhere(circuitmux_policy_t *pol);
+
+#ifdef TOR_CHANNEL_INTERNAL_
+
+/* Channel operations for subclasses and internal use only */
+
+/* Initialize a newly allocated channel - do this first in subclass
+ * constructors.
+ */
+
+void channel_init(channel_t *chan);
+void channel_init_listener(channel_listener_t *chan);
+
+/* Channel registration/unregistration */
+void channel_register(channel_t *chan);
+void channel_unregister(channel_t *chan);
+
+/* Channel listener registration/unregistration */
+void channel_listener_register(channel_listener_t *chan_l);
+void channel_listener_unregister(channel_listener_t *chan_l);
+
+/* Close from below */
+void channel_close_from_lower_layer(channel_t *chan);
+void channel_close_for_error(channel_t *chan);
+void channel_closed(channel_t *chan);
+
+void channel_listener_close_from_lower_layer(channel_listener_t *chan_l);
+void channel_listener_close_for_error(channel_listener_t *chan_l);
+void channel_listener_closed(channel_listener_t *chan_l);
+
+/* Free a channel */
+void channel_free(channel_t *chan);
+void channel_listener_free(channel_listener_t *chan_l);
+
+/* State/metadata setters */
+
+void channel_change_state(channel_t *chan, channel_state_t to_state);
+void channel_clear_identity_digest(channel_t *chan);
+void channel_clear_remote_end(channel_t *chan);
+void channel_mark_local(channel_t *chan);
+void channel_mark_incoming(channel_t *chan);
+void channel_mark_outgoing(channel_t *chan);
+void channel_set_identity_digest(channel_t *chan,
+ const char *identity_digest);
+void channel_set_remote_end(channel_t *chan,
+ const char *identity_digest,
+ const char *nickname);
+
+void channel_listener_change_state(channel_listener_t *chan_l,
+ channel_listener_state_t to_state);
+
+/* Timestamp updates */
+void channel_timestamp_created(channel_t *chan);
+void channel_timestamp_active(channel_t *chan);
+void channel_timestamp_drained(channel_t *chan);
+void channel_timestamp_recv(channel_t *chan);
+void channel_timestamp_xmit(channel_t *chan);
+
+void channel_listener_timestamp_created(channel_listener_t *chan_l);
+void channel_listener_timestamp_active(channel_listener_t *chan_l);
+void channel_listener_timestamp_accepted(channel_listener_t *chan_l);
+
+/* Incoming channel handling */
+void channel_listener_process_incoming(channel_listener_t *listener);
+void channel_listener_queue_incoming(channel_listener_t *listener,
+ channel_t *incoming);
+
+/* Incoming cell handling */
+void channel_process_cells(channel_t *chan);
+void channel_queue_cell(channel_t *chan, cell_t *cell);
+void channel_queue_var_cell(channel_t *chan, var_cell_t *var_cell);
+
+/* Outgoing cell handling */
+void channel_flush_cells(channel_t *chan);
+
+/* Request from lower layer for more cells if available */
+ssize_t channel_flush_some_cells(channel_t *chan, ssize_t num_cells);
+
+/* Query if data available on this channel */
+int channel_more_to_flush(channel_t *chan);
+
+/* Notify flushed outgoing for dirreq handling */
+void channel_notify_flushed(channel_t *chan);
+
+/* Handle stuff we need to do on open like notifying circuits */
+void channel_do_open_actions(channel_t *chan);
+
+#endif
+
+/* Helper functions to perform operations on channels */
+
+int channel_send_destroy(circid_t circ_id, channel_t *chan,
+ int reason);
+
+/*
+ * Outside abstract interfaces that should eventually get turned into
+ * something transport/address format independent.
+ */
+
+channel_t * channel_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest);
+
+channel_t * channel_get_for_extend(const char *digest,
+ const tor_addr_t *target_addr,
+ const char **msg_out,
+ int *launch_out);
+
+/* Ask which of two channels is better for circuit-extension purposes */
+int channel_is_better(time_t now,
+ channel_t *a, channel_t *b,
+ int forgive_new_connections);
+
+/** Channel lookups
+ */
+
+channel_t * channel_find_by_global_id(uint64_t global_identifier);
+channel_t * channel_find_by_remote_digest(const char *identity_digest);
+
+/** For things returned by channel_find_by_remote_digest(), walk the list.
+ */
+channel_t * channel_next_with_digest(channel_t *chan);
+
+/*
+ * Metadata queries/updates
+ */
+
+const char * channel_describe_transport(channel_t *chan);
+void channel_dump_statistics(channel_t *chan, int severity);
+void channel_dump_transport_statistics(channel_t *chan, int severity);
+const char * channel_get_actual_remote_descr(channel_t *chan);
+const char * channel_get_actual_remote_address(channel_t *chan);
+int channel_get_addr_if_possible(channel_t *chan, tor_addr_t *addr_out);
+const char * channel_get_canonical_remote_descr(channel_t *chan);
+int channel_has_queued_writes(channel_t *chan);
+int channel_is_bad_for_new_circs(channel_t *chan);
+void channel_mark_bad_for_new_circs(channel_t *chan);
+int channel_is_canonical(channel_t *chan);
+int channel_is_canonical_is_reliable(channel_t *chan);
+int channel_is_client(channel_t *chan);
+int channel_is_local(channel_t *chan);
+int channel_is_incoming(channel_t *chan);
+int channel_is_outgoing(channel_t *chan);
+void channel_mark_client(channel_t *chan);
+int channel_matches_extend_info(channel_t *chan, extend_info_t *extend_info);
+int channel_matches_target_addr_for_extend(channel_t *chan,
+ const tor_addr_t *target);
+unsigned int channel_num_circuits(channel_t *chan);
+void channel_set_circid_type(channel_t *chan, crypto_pk_t *identity_rcvd,
+ int consider_identity);
+void channel_timestamp_client(channel_t *chan);
+
+const char * channel_listener_describe_transport(channel_listener_t *chan_l);
+void channel_listener_dump_statistics(channel_listener_t *chan_l,
+ int severity);
+void channel_listener_dump_transport_statistics(channel_listener_t *chan_l,
+ int severity);
+
+/* Timestamp queries */
+time_t channel_when_created(channel_t *chan);
+time_t channel_when_last_active(channel_t *chan);
+time_t channel_when_last_client(channel_t *chan);
+time_t channel_when_last_drained(channel_t *chan);
+time_t channel_when_last_recv(channel_t *chan);
+time_t channel_when_last_xmit(channel_t *chan);
+
+time_t channel_listener_when_created(channel_listener_t *chan_l);
+time_t channel_listener_when_last_active(channel_listener_t *chan_l);
+time_t channel_listener_when_last_accepted(channel_listener_t *chan_l);
+
+/* Counter queries */
+uint64_t channel_count_recved(channel_t *chan);
+uint64_t channel_count_xmitted(channel_t *chan);
+
+uint64_t channel_listener_count_accepted(channel_listener_t *chan_l);
+
+int packed_cell_is_destroy(channel_t *chan,
+ const packed_cell_t *packed_cell,
+ circid_t *circid_out);
+
+#endif
+
diff --git a/src/or/channeltls.c b/src/or/channeltls.c
new file mode 100644
index 000000000..539ead193
--- /dev/null
+++ b/src/or/channeltls.c
@@ -0,0 +1,2081 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channeltls.c
+ * \brief channel_t concrete subclass using or_connection_t
+ **/
+
+/*
+ * Define this so channel.h gives us things only channel_t subclasses
+ * should touch.
+ */
+
+#define TOR_CHANNEL_INTERNAL_
+
+#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
+#include "config.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "control.h"
+#include "relay.h"
+#include "router.h"
+#include "routerlist.h"
+
+/** How many CELL_PADDING cells have we received, ever? */
+uint64_t stats_n_padding_cells_processed = 0;
+/** How many CELL_VERSIONS cells have we received, ever? */
+uint64_t stats_n_versions_cells_processed = 0;
+/** How many CELL_NETINFO cells have we received, ever? */
+uint64_t stats_n_netinfo_cells_processed = 0;
+/** How many CELL_VPADDING cells have we received, ever? */
+uint64_t stats_n_vpadding_cells_processed = 0;
+/** How many CELL_CERTS cells have we received, ever? */
+uint64_t stats_n_certs_cells_processed = 0;
+/** How many CELL_AUTH_CHALLENGE cells have we received, ever? */
+uint64_t stats_n_auth_challenge_cells_processed = 0;
+/** How many CELL_AUTHENTICATE cells have we received, ever? */
+uint64_t stats_n_authenticate_cells_processed = 0;
+/** How many CELL_AUTHORIZE cells have we received, ever? */
+uint64_t stats_n_authorize_cells_processed = 0;
+
+/** Active listener, if any */
+channel_listener_t *channel_tls_listener = NULL;
+
+/* Utility function declarations */
+static void channel_tls_common_init(channel_tls_t *tlschan);
+
+/* channel_tls_t method declarations */
+
+static void channel_tls_close_method(channel_t *chan);
+static const char * channel_tls_describe_transport_method(channel_t *chan);
+static void channel_tls_free_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);
+static int channel_tls_is_canonical_method(channel_t *chan, int req);
+static int
+channel_tls_matches_extend_info_method(channel_t *chan,
+ extend_info_t *extend_info);
+static int channel_tls_matches_target_method(channel_t *chan,
+ const tor_addr_t *target);
+static int channel_tls_write_cell_method(channel_t *chan,
+ cell_t *cell);
+static int channel_tls_write_packed_cell_method(channel_t *chan,
+ packed_cell_t *packed_cell);
+static int channel_tls_write_var_cell_method(channel_t *chan,
+ var_cell_t *var_cell);
+
+/* channel_listener_tls_t method declarations */
+
+static void channel_tls_listener_close_method(channel_listener_t *chan_l);
+static const char *
+channel_tls_listener_describe_transport_method(channel_listener_t *chan_l);
+
+/** Handle incoming cells for the handshake stuff here rather than
+ * passing them on up. */
+
+static void channel_tls_process_versions_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_netinfo_cell(cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_certs_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_auth_challenge_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static void channel_tls_process_authenticate_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+static int command_allowed_before_handshake(uint8_t command);
+static int enter_v3_handshake_with_cell(var_cell_t *cell,
+ channel_tls_t *tlschan);
+
+/**
+ * Do parts of channel_tls_t initialization common to channel_tls_connect()
+ * and channel_tls_handle_incoming().
+ */
+
+static void
+channel_tls_common_init(channel_tls_t *tlschan)
+{
+ channel_t *chan;
+
+ tor_assert(tlschan);
+
+ chan = &(tlschan->base_);
+ channel_init(chan);
+ chan->magic = TLS_CHAN_MAGIC;
+ chan->state = CHANNEL_STATE_OPENING;
+ chan->close = channel_tls_close_method;
+ chan->describe_transport = channel_tls_describe_transport_method;
+ chan->free = channel_tls_free_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;
+ chan->matches_target = channel_tls_matches_target_method;
+ chan->write_cell = channel_tls_write_cell_method;
+ chan->write_packed_cell = channel_tls_write_packed_cell_method;
+ chan->write_var_cell = channel_tls_write_var_cell_method;
+
+ chan->cmux = circuitmux_alloc();
+ if (cell_ewma_enabled()) {
+ circuitmux_set_policy(chan->cmux, &ewma_policy);
+ }
+}
+
+/**
+ * Start a new TLS channel
+ *
+ * Launch a new OR connection to <b>addr</b>:<b>port</b> and expect to
+ * handshake with an OR with identity digest <b>id_digest</b>, and wrap
+ * it in a channel_tls_t.
+ */
+
+channel_t *
+channel_tls_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest)
+{
+ channel_tls_t *tlschan = tor_malloc_zero(sizeof(*tlschan));
+ channel_t *chan = &(tlschan->base_);
+
+ channel_tls_common_init(tlschan);
+
+ log_debug(LD_CHANNEL,
+ "In channel_tls_connect() for channel %p "
+ "(global id " U64_FORMAT ")",
+ tlschan,
+ U64_PRINTF_ARG(chan->global_identifier));
+
+ if (is_local_addr(addr)) channel_mark_local(chan);
+ channel_mark_outgoing(chan);
+
+ /* Set up or_connection stuff */
+ tlschan->conn = connection_or_connect(addr, port, id_digest, tlschan);
+ /* connection_or_connect() will fill in tlschan->conn */
+ if (!(tlschan->conn)) {
+ chan->reason_for_closing = CHANNEL_CLOSE_FOR_ERROR;
+ channel_change_state(chan, CHANNEL_STATE_ERROR);
+ goto err;
+ }
+
+ log_debug(LD_CHANNEL,
+ "Got orconn %p for channel with global id " U64_FORMAT,
+ tlschan->conn, U64_PRINTF_ARG(chan->global_identifier));
+
+ goto done;
+
+ err:
+ circuitmux_free(chan->cmux);
+ tor_free(tlschan);
+ chan = NULL;
+
+ done:
+ /* If we got one, we should register it */
+ if (chan) channel_register(chan);
+
+ return chan;
+}
+
+/**
+ * Return the current channel_tls_t listener
+ *
+ * Returns the current channel listener for incoming TLS connections, or
+ * NULL if none has been established
+ */
+
+channel_listener_t *
+channel_tls_get_listener(void)
+{
+ return channel_tls_listener;
+}
+
+/**
+ * Start a channel_tls_t listener if necessary
+ *
+ * Return the current channel_tls_t listener, or start one if we haven't yet,
+ * and return that.
+ */
+
+channel_listener_t *
+channel_tls_start_listener(void)
+{
+ channel_listener_t *listener;
+
+ if (!channel_tls_listener) {
+ listener = tor_malloc_zero(sizeof(*listener));
+ channel_init_listener(listener);
+ listener->state = CHANNEL_LISTENER_STATE_LISTENING;
+ listener->close = channel_tls_listener_close_method;
+ listener->describe_transport =
+ channel_tls_listener_describe_transport_method;
+
+ channel_tls_listener = listener;
+
+ log_debug(LD_CHANNEL,
+ "Starting TLS channel listener %p with global id " U64_FORMAT,
+ listener, U64_PRINTF_ARG(listener->global_identifier));
+
+ channel_listener_register(listener);
+ } else listener = channel_tls_listener;
+
+ return listener;
+}
+
+/**
+ * Free everything on shutdown
+ *
+ * Not much to do here, since channel_free_all() takes care of a lot, but let's
+ * get rid of the listener.
+ */
+
+void
+channel_tls_free_all(void)
+{
+ channel_listener_t *old_listener = NULL;
+
+ log_debug(LD_CHANNEL,
+ "Shutting down TLS channels...");
+
+ if (channel_tls_listener) {
+ /*
+ * When we close it, channel_tls_listener will get nulled out, so save
+ * a pointer so we can free it.
+ */
+ old_listener = channel_tls_listener;
+ log_debug(LD_CHANNEL,
+ "Closing channel_tls_listener with ID " U64_FORMAT
+ " at %p.",
+ U64_PRINTF_ARG(old_listener->global_identifier),
+ old_listener);
+ channel_listener_unregister(old_listener);
+ channel_listener_mark_for_close(old_listener);
+ channel_listener_free(old_listener);
+ tor_assert(channel_tls_listener == NULL);
+ }
+
+ log_debug(LD_CHANNEL,
+ "Done shutting down TLS channels");
+}
+
+/**
+ * Create a new channel around an incoming or_connection_t
+ */
+
+channel_t *
+channel_tls_handle_incoming(or_connection_t *orconn)
+{
+ channel_tls_t *tlschan = tor_malloc_zero(sizeof(*tlschan));
+ channel_t *chan = &(tlschan->base_);
+
+ tor_assert(orconn);
+ tor_assert(!(orconn->chan));
+
+ channel_tls_common_init(tlschan);
+
+ /* Link the channel and orconn to each other */
+ tlschan->conn = orconn;
+ orconn->chan = tlschan;
+
+ if (is_local_addr(&(TO_CONN(orconn)->addr))) channel_mark_local(chan);
+ channel_mark_incoming(chan);
+
+ /* Register it */
+ channel_register(chan);
+
+ return chan;
+}
+
+/*********
+ * Casts *
+ ********/
+
+/**
+ * Cast a channel_tls_t to a channel_t.
+ */
+
+channel_t *
+channel_tls_to_base(channel_tls_t *tlschan)
+{
+ if (!tlschan) return NULL;
+
+ return &(tlschan->base_);
+}
+
+/**
+ * Cast a channel_t to a channel_tls_t, with appropriate type-checking
+ * asserts.
+ */
+
+channel_tls_t *
+channel_tls_from_base(channel_t *chan)
+{
+ if (!chan) return NULL;
+
+ tor_assert(chan->magic == TLS_CHAN_MAGIC);
+
+ return (channel_tls_t *)(chan);
+}
+
+/********************************************
+ * Method implementations for channel_tls_t *
+ *******************************************/
+
+/**
+ * Close a channel_tls_t
+ *
+ * This implements the close method for channel_tls_t
+ */
+
+static void
+channel_tls_close_method(channel_t *chan)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) connection_or_close_normally(tlschan->conn, 1);
+ else {
+ /* Weird - we'll have to change the state ourselves, I guess */
+ log_info(LD_CHANNEL,
+ "Tried to close channel_tls_t %p with NULL conn",
+ tlschan);
+ channel_change_state(chan, CHANNEL_STATE_ERROR);
+ }
+}
+
+/**
+ * Describe the transport for a channel_tls_t
+ *
+ * This returns the string "TLS channel on connection <id>" to the upper
+ * layer.
+ */
+
+static const char *
+channel_tls_describe_transport_method(channel_t *chan)
+{
+ static char *buf = NULL;
+ uint64_t id;
+ channel_tls_t *tlschan;
+ const char *rv = NULL;
+
+ tor_assert(chan);
+
+ tlschan = BASE_CHAN_TO_TLS(chan);
+
+ if (tlschan->conn) {
+ id = TO_CONN(tlschan->conn)->global_identifier;
+
+ if (buf) tor_free(buf);
+ tor_asprintf(&buf,
+ "TLS channel (connection " U64_FORMAT ")",
+ U64_PRINTF_ARG(id));
+
+ rv = buf;
+ } else {
+ rv = "TLS channel (no connection)";
+ }
+
+ return rv;
+}
+
+/**
+ * Free a channel_tls_t
+ *
+ * This is called by the generic channel layer when freeing a channel_tls_t;
+ * this happens either on a channel which has already reached
+ * CHANNEL_STATE_CLOSED or CHANNEL_STATE_ERROR from channel_run_cleanup() or
+ * on shutdown from channel_free_all(). In the latter case we might still
+ * have an orconn active (which connection_free_all() will get to later),
+ * so we should null out its channel pointer now.
+ */
+
+static void
+channel_tls_free_method(channel_t *chan)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) {
+ tlschan->conn->chan = NULL;
+ tlschan->conn = NULL;
+ }
+}
+
+/**
+ * Get the remote address of a channel_tls_t
+ *
+ * This implements the get_remote_addr method for channel_tls_t; copy the
+ * remote endpoint of the channel to addr_out and return 1 (always
+ * succeeds for this transport).
+ */
+
+static int
+channel_tls_get_remote_addr_method(channel_t *chan, tor_addr_t *addr_out)
+{
+ int rv = 0;
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(addr_out);
+
+ if (tlschan->conn) {
+ tor_addr_copy(addr_out, &(TO_CONN(tlschan->conn)->addr));
+ rv = 1;
+ } else tor_addr_make_unspec(addr_out);
+
+ return rv;
+}
+
+/**
+ * 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
+ * a text description of the remote endpoint of the channel suitable for use
+ * in log messages. The req parameter is 0 for the canonical address or 1 for
+ * the actual address seen.
+ */
+
+static const char *
+channel_tls_get_remote_descr_method(channel_t *chan, int flags)
+{
+#define MAX_DESCR_LEN 32
+
+ static char buf[MAX_DESCR_LEN + 1];
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ connection_t *conn;
+ const char *answer = NULL;
+ char *addr_str;
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) {
+ conn = TO_CONN(tlschan->conn);
+ switch (flags) {
+ case 0:
+ /* Canonical address with port*/
+ tor_snprintf(buf, MAX_DESCR_LEN + 1,
+ "%s:%u", conn->address, conn->port);
+ answer = buf;
+ break;
+ case GRD_FLAG_ORIGINAL:
+ /* Actual address with port */
+ addr_str = tor_dup_addr(&(tlschan->conn->real_addr));
+ tor_snprintf(buf, MAX_DESCR_LEN + 1,
+ "%s:%u", addr_str, conn->port);
+ tor_free(addr_str);
+ answer = buf;
+ break;
+ case GRD_FLAG_ADDR_ONLY:
+ /* Canonical address, no port */
+ strlcpy(buf, conn->address, sizeof(buf));
+ answer = buf;
+ break;
+ case GRD_FLAG_ORIGINAL|GRD_FLAG_ADDR_ONLY:
+ /* Actual address, no port */
+ addr_str = tor_dup_addr(&(tlschan->conn->real_addr));
+ strlcpy(buf, addr_str, sizeof(buf));
+ tor_free(addr_str);
+ answer = buf;
+ break;
+ default:
+ /* Something's broken in channel.c */
+ tor_assert(1);
+ }
+ } else {
+ strlcpy(buf, "(No connection)", sizeof(buf));
+ answer = buf;
+ }
+
+ return answer;
+}
+
+/**
+ * Tell the upper layer if we have queued writes
+ *
+ * This implements the has_queued_writes method for channel_tls t_; it returns
+ * 1 iff we have queued writes on the outbuf of the underlying or_connection_t.
+ */
+
+static int
+channel_tls_has_queued_writes_method(channel_t *chan)
+{
+ size_t outbuf_len;
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ if (!(tlschan->conn)) {
+ log_info(LD_CHANNEL,
+ "something called has_queued_writes on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ outbuf_len = (tlschan->conn != NULL) ?
+ connection_get_outbuf_len(TO_CONN(tlschan->conn)) :
+ 0;
+
+ return (outbuf_len > 0);
+}
+
+/**
+ * Tell the upper layer if we're canonical
+ *
+ * This implements the is_canonical method for channel_tls_t; if req is zero,
+ * it returns whether this is a canonical channel, and if it is one it returns
+ * whether that can be relied upon.
+ */
+
+static int
+channel_tls_is_canonical_method(channel_t *chan, int req)
+{
+ int answer = 0;
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+
+ if (tlschan->conn) {
+ switch (req) {
+ case 0:
+ answer = tlschan->conn->is_canonical;
+ break;
+ case 1:
+ /*
+ * Is the is_canonical bit reliable? In protocols version 2 and up
+ * we get the canonical address from a NETINFO cell, but in older
+ * versions it might be based on an obsolete descriptor.
+ */
+ answer = (tlschan->conn->link_proto >= 2);
+ break;
+ default:
+ /* This shouldn't happen; channel.c is broken if it does */
+ tor_assert(1);
+ }
+ }
+ /* else return 0 for tlschan->conn == NULL */
+
+ return answer;
+}
+
+/**
+ * Check if we match an extend_info_t
+ *
+ * This implements the matches_extend_info method for channel_tls_t; the upper
+ * layer wants to know if this channel matches an extend_info_t.
+ */
+
+static int
+channel_tls_matches_extend_info_method(channel_t *chan,
+ extend_info_t *extend_info)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(extend_info);
+
+ /* Never match if we have no conn */
+ if (!(tlschan->conn)) {
+ log_info(LD_CHANNEL,
+ "something called matches_extend_info on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ return 0;
+ }
+
+ return (tor_addr_eq(&(extend_info->addr),
+ &(TO_CONN(tlschan->conn)->addr)) &&
+ (extend_info->port == TO_CONN(tlschan->conn)->port));
+}
+
+/**
+ * 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
+ * a circuit.
+ */
+
+static int
+channel_tls_matches_target_method(channel_t *chan,
+ const tor_addr_t *target)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+
+ tor_assert(tlschan);
+ tor_assert(target);
+
+ /* Never match if we have no conn */
+ if (!(tlschan->conn)) {
+ log_info(LD_CHANNEL,
+ "something called matches_target on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ return 0;
+ }
+
+ return tor_addr_eq(&(tlschan->conn->real_addr), target);
+}
+
+/**
+ * Write a cell to a channel_tls_t
+ *
+ * This implements the write_cell method for channel_tls_t; given a
+ * channel_tls_t and a cell_t, transmit the cell_t.
+ */
+
+static int
+channel_tls_write_cell_method(channel_t *chan, cell_t *cell)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ int written = 0;
+
+ tor_assert(tlschan);
+ tor_assert(cell);
+
+ if (tlschan->conn) {
+ connection_or_write_cell_to_buf(cell, tlschan->conn);
+ ++written;
+ } else {
+ log_info(LD_CHANNEL,
+ "something called write_cell on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ return written;
+}
+
+/**
+ * Write a packed cell to a channel_tls_t
+ *
+ * This implements the write_packed_cell method for channel_tls_t; given a
+ * channel_tls_t and a packed_cell_t, transmit the packed_cell_t.
+ */
+
+static int
+channel_tls_write_packed_cell_method(channel_t *chan,
+ packed_cell_t *packed_cell)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ size_t cell_network_size = get_cell_network_size(chan->wide_circ_ids);
+ int written = 0;
+
+ tor_assert(tlschan);
+ tor_assert(packed_cell);
+
+ if (tlschan->conn) {
+ connection_write_to_buf(packed_cell->body, cell_network_size,
+ TO_CONN(tlschan->conn));
+
+ /* This is where the cell is finished; used to be done from relay.c */
+ packed_cell_free(packed_cell);
+ ++written;
+ } else {
+ log_info(LD_CHANNEL,
+ "something called write_packed_cell on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ return written;
+}
+
+/**
+ * Write a variable-length cell to a channel_tls_t
+ *
+ * This implements the write_var_cell method for channel_tls_t; given a
+ * channel_tls_t and a var_cell_t, transmit the var_cell_t.
+ */
+
+static int
+channel_tls_write_var_cell_method(channel_t *chan, var_cell_t *var_cell)
+{
+ channel_tls_t *tlschan = BASE_CHAN_TO_TLS(chan);
+ int written = 0;
+
+ tor_assert(tlschan);
+ tor_assert(var_cell);
+
+ if (tlschan->conn) {
+ connection_or_write_var_cell_to_buf(var_cell, tlschan->conn);
+ ++written;
+ } else {
+ log_info(LD_CHANNEL,
+ "something called write_var_cell on a tlschan "
+ "(%p with ID " U64_FORMAT " but no conn",
+ chan, U64_PRINTF_ARG(chan->global_identifier));
+ }
+
+ return written;
+}
+
+/*************************************************
+ * Method implementations for channel_listener_t *
+ ************************************************/
+
+/**
+ * Close a channel_listener_t
+ *
+ * This implements the close method for channel_listener_t
+ */
+
+static void
+channel_tls_listener_close_method(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ /*
+ * Listeners we just go ahead and change state through to CLOSED, but
+ * make sure to check if they're channel_tls_listener to NULL it out.
+ */
+ if (chan_l == channel_tls_listener)
+ channel_tls_listener = NULL;
+
+ if (!(chan_l->state == CHANNEL_LISTENER_STATE_CLOSING ||
+ chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR)) {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSING);
+ }
+
+ if (chan_l->incoming_list) {
+ SMARTLIST_FOREACH_BEGIN(chan_l->incoming_list,
+ channel_t *, ichan) {
+ channel_mark_for_close(ichan);
+ } SMARTLIST_FOREACH_END(ichan);
+
+ smartlist_free(chan_l->incoming_list);
+ chan_l->incoming_list = NULL;
+ }
+
+ if (!(chan_l->state == CHANNEL_LISTENER_STATE_CLOSED ||
+ chan_l->state == CHANNEL_LISTENER_STATE_ERROR)) {
+ channel_listener_change_state(chan_l, CHANNEL_LISTENER_STATE_CLOSED);
+ }
+}
+
+/**
+ * Describe the transport for a channel_listener_t
+ *
+ * This returns the string "TLS channel (listening)" to the upper
+ * layer.
+ */
+
+static const char *
+channel_tls_listener_describe_transport_method(channel_listener_t *chan_l)
+{
+ tor_assert(chan_l);
+
+ return "TLS channel (listening)";
+}
+
+/*******************************************************
+ * Functions for handling events on an or_connection_t *
+ ******************************************************/
+
+/**
+ * Handle an orconn state change
+ *
+ * This function will be called by connection_or.c when the or_connection_t
+ * associated with this channel_tls_t changes state.
+ */
+
+void
+channel_tls_handle_state_change_on_orconn(channel_tls_t *chan,
+ or_connection_t *conn,
+ uint8_t old_state,
+ uint8_t state)
+{
+ channel_t *base_chan;
+
+ tor_assert(chan);
+ tor_assert(conn);
+ tor_assert(conn->chan == chan);
+ tor_assert(chan->conn == conn);
+ /* -Werror appeasement */
+ tor_assert(old_state == old_state);
+
+ base_chan = TLS_CHAN_TO_BASE(chan);
+
+ /* Make sure the base connection state makes sense - shouldn't be error,
+ * closed or listening. */
+
+ tor_assert(base_chan->state == CHANNEL_STATE_OPENING ||
+ base_chan->state == CHANNEL_STATE_OPEN ||
+ base_chan->state == CHANNEL_STATE_MAINT ||
+ base_chan->state == CHANNEL_STATE_CLOSING);
+
+ /* Did we just go to state open? */
+ if (state == OR_CONN_STATE_OPEN) {
+ /*
+ * We can go to CHANNEL_STATE_OPEN from CHANNEL_STATE_OPENING or
+ * CHANNEL_STATE_MAINT on this.
+ */
+ channel_change_state(base_chan, CHANNEL_STATE_OPEN);
+ } else {
+ /*
+ * Not open, so from CHANNEL_STATE_OPEN we go to CHANNEL_STATE_MAINT,
+ * otherwise no change.
+ */
+ if (base_chan->state == CHANNEL_STATE_OPEN) {
+ channel_change_state(base_chan, CHANNEL_STATE_MAINT);
+ }
+ }
+}
+
+/**
+ * Flush cells from a channel_tls_t
+ *
+ * Try to flush up to about num_cells cells, and return how many we flushed.
+ */
+
+ssize_t
+channel_tls_flush_some_cells(channel_tls_t *chan, ssize_t num_cells)
+{
+ ssize_t flushed = 0;
+
+ tor_assert(chan);
+
+ if (flushed >= num_cells) goto done;
+
+ /*
+ * If channel_tls_t ever buffers anything below the channel_t layer, flush
+ * that first here.
+ */
+
+ flushed += channel_flush_some_cells(TLS_CHAN_TO_BASE(chan),
+ num_cells - flushed);
+
+ /*
+ * If channel_tls_t ever buffers anything below the channel_t layer, check
+ * how much we actually got and push it on down here.
+ */
+
+ done:
+ return flushed;
+}
+
+/**
+ * Check if a channel_tls_t has anything to flush
+ *
+ * Return true if there is any more to flush on this channel (cells in queue
+ * or active circuits).
+ */
+
+int
+channel_tls_more_to_flush(channel_tls_t *chan)
+{
+ tor_assert(chan);
+
+ /*
+ * If channel_tls_t ever buffers anything below channel_t, the
+ * check for that should go here first.
+ */
+
+ return channel_more_to_flush(TLS_CHAN_TO_BASE(chan));
+}
+
+#ifdef KEEP_TIMING_STATS
+
+/**
+ * Timing states wrapper
+ *
+ * This is a wrapper function around the actual function that processes the
+ * <b>cell</b> that just arrived on <b>chan</b>. Increment <b>*time</b>
+ * by the number of microseconds used by the call to <b>*func(cell, chan)</b>.
+ */
+
+static void
+channel_tls_time_process_cell(cell_t *cell, channel_tls_t *chan, int *time,
+ void (*func)(cell_t *, channel_tls_t *))
+{
+ struct timeval start, end;
+ long time_passed;
+
+ tor_gettimeofday(&start);
+
+ (*func)(cell, chan);
+
+ tor_gettimeofday(&end);
+ time_passed = tv_udiff(&start, &end) ;
+
+ if (time_passed > 10000) { /* more than 10ms */
+ log_debug(LD_OR,"That call just took %ld ms.",time_passed/1000);
+ }
+
+ if (time_passed < 0) {
+ log_info(LD_GENERAL,"That call took us back in time!");
+ time_passed = 0;
+ }
+
+ *time += time_passed;
+}
+#endif
+
+/**
+ * Handle an incoming cell on a channel_tls_t
+ *
+ * This is called from connection_or.c to handle an arriving cell; it checks
+ * for cell types specific to the handshake for this transport protocol and
+ * handles them, and queues all other cells to the channel_t layer, which
+ * eventually will hand them off to command.c.
+ */
+
+void
+channel_tls_handle_cell(cell_t *cell, or_connection_t *conn)
+{
+ channel_tls_t *chan;
+ int handshaking;
+
+#ifdef KEEP_TIMING_STATS
+#define PROCESS_CELL(tp, cl, cn) STMT_BEGIN { \
+ ++num ## tp; \
+ channel_tls_time_process_cell(cl, cn, & tp ## time , \
+ channel_tls_process_ ## tp ## _cell); \
+ } STMT_END
+#else
+#define PROCESS_CELL(tp, cl, cn) channel_tls_process_ ## tp ## _cell(cl, cn)
+#endif
+
+ tor_assert(cell);
+ tor_assert(conn);
+
+ chan = conn->chan;
+
+ if (!chan) {
+ log_warn(LD_CHANNEL,
+ "Got a cell_t on an OR connection with no channel");
+ return;
+ }
+
+ handshaking = (TO_CONN(conn)->state != OR_CONN_STATE_OPEN);
+
+ if (conn->base_.marked_for_close)
+ return;
+
+ /* Reject all but VERSIONS and NETINFO when handshaking. */
+ /* (VERSIONS should actually be impossible; it's variable-length.) */
+ if (handshaking && cell->command != CELL_VERSIONS &&
+ cell->command != CELL_NETINFO) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received unexpected cell command %d in chan state %s / "
+ "conn state %s; closing the connection.",
+ (int)cell->command,
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state));
+ connection_or_close_for_error(conn, 0);
+ return;
+ }
+
+ if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_cell(conn, conn->handshake_state, cell, 1);
+
+ switch (cell->command) {
+ case CELL_PADDING:
+ ++stats_n_padding_cells_processed;
+ /* do nothing */
+ break;
+ case CELL_VERSIONS:
+ tor_fragile_assert();
+ break;
+ case CELL_NETINFO:
+ ++stats_n_netinfo_cells_processed;
+ PROCESS_CELL(netinfo, cell, chan);
+ break;
+ case CELL_CREATE:
+ case CELL_CREATE_FAST:
+ case CELL_CREATED:
+ case CELL_CREATED_FAST:
+ case CELL_RELAY:
+ case CELL_RELAY_EARLY:
+ case CELL_DESTROY:
+ case CELL_CREATE2:
+ case CELL_CREATED2:
+ /*
+ * These are all transport independent and we pass them up through the
+ * channel_t mechanism. They are ultimately handled in command.c.
+ */
+ channel_queue_cell(TLS_CHAN_TO_BASE(chan), cell);
+ break;
+ default:
+ log_fn(LOG_INFO, LD_PROTOCOL,
+ "Cell of unknown type (%d) received in channeltls.c. "
+ "Dropping.",
+ cell->command);
+ break;
+ }
+}
+
+/**
+ * Handle an incoming variable-length cell on a channel_tls_t
+ *
+ * Process a <b>var_cell</b> that was just received on <b>conn</b>. Keep
+ * internal statistics about how many of each cell we've processed so far
+ * this second, and the total number of microseconds it took to
+ * process each type of cell. All the var_cell commands are handshake-
+ * related and live below the channel_t layer, so no variable-length
+ * cells ever get delivered in the current implementation, but I've left
+ * the mechanism in place for future use.
+ */
+
+void
+channel_tls_handle_var_cell(var_cell_t *var_cell, or_connection_t *conn)
+{
+ channel_tls_t *chan;
+
+#ifdef KEEP_TIMING_STATS
+ /* how many of each cell have we seen so far this second? needs better
+ * name. */
+ static int num_versions = 0, num_certs = 0;
+ static time_t current_second = 0; /* from previous calls to time */
+ time_t now = time(NULL);
+
+ if (current_second == 0) current_second = now;
+ if (now > current_second) { /* the second has rolled over */
+ /* print stats */
+ log_info(LD_OR,
+ "At end of second: %d versions (%d ms), %d certs (%d ms)",
+ num_versions, versions_time / ((now - current_second) * 1000),
+ num_certs, certs_time / ((now - current_second) * 1000));
+
+ num_versions = num_certs = 0;
+ versions_time = certs_time = 0;
+
+ /* remember which second it is, for next time */
+ current_second = now;
+ }
+#endif
+
+ tor_assert(var_cell);
+ tor_assert(conn);
+
+ chan = conn->chan;
+
+ if (!chan) {
+ log_warn(LD_CHANNEL,
+ "Got a var_cell_t on an OR connection with no channel");
+ return;
+ }
+
+ if (TO_CONN(conn)->marked_for_close)
+ return;
+
+ switch (TO_CONN(conn)->state) {
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ if (var_cell->command != CELL_VERSIONS) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a cell with command %d in unexpected "
+ "orconn state \"%s\" [%d], channel state \"%s\" [%d]; "
+ "closing the connection.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ TO_CONN(conn)->state,
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state));
+ /*
+ * The code in connection_or.c will tell channel_t to close for
+ * error; it will go to CHANNEL_STATE_CLOSING, and then to
+ * CHANNEL_STATE_ERROR when conn is closed.
+ */
+ connection_or_close_for_error(conn, 0);
+ return;
+ }
+ break;
+ case OR_CONN_STATE_TLS_HANDSHAKING:
+ /* If we're using bufferevents, it's entirely possible for us to
+ * notice "hey, data arrived!" before we notice "hey, the handshake
+ * finished!" And we need to be accepting both at once to handle both
+ * the v2 and v3 handshakes. */
+
+ /* fall through */
+ case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+ if (!(command_allowed_before_handshake(var_cell->command))) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a cell with command %d in unexpected "
+ "orconn state \"%s\" [%d], channel state \"%s\" [%d]; "
+ "closing the connection.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ (int)(TO_CONN(conn)->state),
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state));
+ /* see above comment about CHANNEL_STATE_ERROR */
+ connection_or_close_for_error(conn, 0);
+ return;
+ } else {
+ if (enter_v3_handshake_with_cell(var_cell, chan) < 0)
+ return;
+ }
+ break;
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ if (var_cell->command != CELL_AUTHENTICATE)
+ or_handshake_state_record_var_cell(conn, conn->handshake_state,
+ var_cell, 1);
+ break; /* Everything is allowed */
+ case OR_CONN_STATE_OPEN:
+ if (conn->link_proto < 3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received a variable-length cell with command %d in orconn "
+ "state %s [%d], channel state %s [%d] with link protocol %d; "
+ "ignoring it.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ (int)(TO_CONN(conn)->state),
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(conn->link_proto));
+ return;
+ }
+ break;
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received var-length cell with command %d in unexpected "
+ "orconn state \"%s\" [%d], channel state \"%s\" [%d]; "
+ "ignoring it.",
+ (int)(var_cell->command),
+ conn_state_to_string(CONN_TYPE_OR, TO_CONN(conn)->state),
+ (int)(TO_CONN(conn)->state),
+ channel_state_to_string(TLS_CHAN_TO_BASE(chan)->state),
+ (int)(TLS_CHAN_TO_BASE(chan)->state));
+ return;
+ }
+
+ /* Now handle the cell */
+
+ switch (var_cell->command) {
+ case CELL_VERSIONS:
+ ++stats_n_versions_cells_processed;
+ PROCESS_CELL(versions, var_cell, chan);
+ break;
+ case CELL_VPADDING:
+ ++stats_n_vpadding_cells_processed;
+ /* Do nothing */
+ break;
+ case CELL_CERTS:
+ ++stats_n_certs_cells_processed;
+ PROCESS_CELL(certs, var_cell, chan);
+ break;
+ case CELL_AUTH_CHALLENGE:
+ ++stats_n_auth_challenge_cells_processed;
+ PROCESS_CELL(auth_challenge, var_cell, chan);
+ break;
+ case CELL_AUTHENTICATE:
+ ++stats_n_authenticate_cells_processed;
+ PROCESS_CELL(authenticate, var_cell, chan);
+ break;
+ case CELL_AUTHORIZE:
+ ++stats_n_authorize_cells_processed;
+ /* Ignored so far. */
+ break;
+ default:
+ log_fn(LOG_INFO, LD_PROTOCOL,
+ "Variable-length cell of unknown type (%d) received.",
+ (int)(var_cell->command));
+ break;
+ }
+}
+
+/**
+ * Check if this cell type is allowed before the handshake is finished
+ *
+ * Return true if <b>command</b> is a cell command that's allowed to start a
+ * V3 handshake.
+ */
+
+static int
+command_allowed_before_handshake(uint8_t command)
+{
+ switch (command) {
+ case CELL_VERSIONS:
+ case CELL_VPADDING:
+ case CELL_AUTHORIZE:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/**
+ * Start a V3 handshake on an incoming connection
+ *
+ * Called when we as a server receive an appropriate cell while waiting
+ * either for a cell or a TLS handshake. Set the connection's state to
+ * "handshaking_v3', initializes the or_handshake_state field as needed,
+ * and add the cell to the hash of incoming cells.)
+ */
+
+static int
+enter_v3_handshake_with_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ int started_here = 0;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+ started_here = connection_or_nonopen_was_started_here(chan->conn);
+
+ tor_assert(TO_CONN(chan->conn)->state == OR_CONN_STATE_TLS_HANDSHAKING ||
+ TO_CONN(chan->conn)->state ==
+ OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
+
+ if (started_here) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a cell while TLS-handshaking, not in "
+ "OR_HANDSHAKING_V3, on a connection we originated.");
+ }
+ connection_or_block_renegotiation(chan->conn);
+ chan->conn->base_.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+ if (connection_init_or_handshake_state(chan->conn, started_here) < 0) {
+ connection_or_close_for_error(chan->conn, 0);
+ return -1;
+ }
+ or_handshake_state_record_var_cell(chan->conn,
+ chan->conn->handshake_state, cell, 1);
+ return 0;
+}
+
+/**
+ * Process a 'versions' cell.
+ *
+ * This function is called to handle an incoming VERSIONS cell; the current
+ * link protocol version must be 0 to indicate that no version has yet been
+ * negotiated. We compare the versions in the cell to the list of versions
+ * we support, pick the highest version we have in common, and continue the
+ * negotiation from there.
+ */
+
+static void
+channel_tls_process_versions_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ int highest_supported_version = 0;
+ int started_here = 0;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+ if ((cell->payload_len % 2) == 1) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a VERSION cell with odd payload length %d; "
+ "closing connection.",cell->payload_len);
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+
+ started_here = connection_or_nonopen_was_started_here(chan->conn);
+
+ if (chan->conn->link_proto != 0 ||
+ (chan->conn->handshake_state &&
+ chan->conn->handshake_state->received_versions)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a VERSIONS cell on a connection with its version "
+ "already set to %d; dropping",
+ (int)(chan->conn->link_proto));
+ return;
+ }
+ switch (chan->conn->base_.state)
+ {
+ case OR_CONN_STATE_OR_HANDSHAKING_V2:
+ case OR_CONN_STATE_OR_HANDSHAKING_V3:
+ break;
+ case OR_CONN_STATE_TLS_HANDSHAKING:
+ case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
+ default:
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "VERSIONS cell while in unexpected state");
+ return;
+ }
+
+ tor_assert(chan->conn->handshake_state);
+
+ {
+ int i;
+ const uint8_t *cp = cell->payload;
+ for (i = 0; i < cell->payload_len / 2; ++i, cp += 2) {
+ uint16_t v = ntohs(get_uint16(cp));
+ if (is_or_protocol_version_known(v) && v > highest_supported_version)
+ highest_supported_version = v;
+ }
+ }
+ if (!highest_supported_version) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Couldn't find a version in common between my version list and the "
+ "list in the VERSIONS cell; closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ } else if (highest_supported_version == 1) {
+ /* Negotiating version 1 makes no sense, since version 1 has no VERSIONS
+ * cells. */
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Used version negotiation protocol to negotiate a v1 connection. "
+ "That's crazily non-compliant. Closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ } else if (highest_supported_version < 3 &&
+ chan->conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Negotiated link protocol 2 or lower after doing a v3 TLS "
+ "handshake. Closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ } else if (highest_supported_version != 2 &&
+ chan->conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V2) {
+ /* XXXX This should eventually be a log_protocol_warn */
+ log_fn(LOG_WARN, LD_OR,
+ "Negotiated link with non-2 protocol after doing a v2 TLS "
+ "handshake with %s. Closing connection.",
+ fmt_addr(&chan->conn->base_.addr));
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+
+ chan->conn->link_proto = highest_supported_version;
+ chan->conn->handshake_state->received_versions = 1;
+
+ if (chan->conn->link_proto == 2) {
+ log_info(LD_OR,
+ "Negotiated version %d with %s:%d; sending NETINFO.",
+ highest_supported_version,
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port);
+
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ } else {
+ const int send_versions = !started_here;
+ /* If we want to authenticate, send a CERTS cell */
+ const int send_certs = !started_here || public_server_mode(get_options());
+ /* If we're a host that got a connection, ask for authentication. */
+ const int send_chall = !started_here;
+ /* If our certs cell will authenticate us, we can send a netinfo cell
+ * right now. */
+ const int send_netinfo = !started_here;
+ const int send_any =
+ send_versions || send_certs || send_chall || send_netinfo;
+ tor_assert(chan->conn->link_proto >= 3);
+
+ log_info(LD_OR,
+ "Negotiated version %d with %s:%d; %s%s%s%s%s",
+ highest_supported_version,
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port,
+ send_any ? "Sending cells:" : "Waiting for CERTS cell",
+ send_versions ? " VERSIONS" : "",
+ send_certs ? " CERTS" : "",
+ send_chall ? " AUTH_CHALLENGE" : "",
+ send_netinfo ? " NETINFO" : "");
+
+#ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
+ if (1) {
+ connection_or_close_normally(chan->conn, 1);
+ return;
+ }
+#endif
+
+ if (send_versions) {
+ if (connection_or_send_versions(chan->conn, 1) < 0) {
+ log_warn(LD_OR, "Couldn't send versions cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+
+ /* We set this after sending the verions cell. */
+ /*XXXXX symbolic const.*/
+ chan->base_.wide_circ_ids =
+ chan->conn->link_proto >= MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS;
+ chan->conn->wide_circ_ids = chan->base_.wide_circ_ids;
+
+ if (send_certs) {
+ if (connection_or_send_certs_cell(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send certs cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+ if (send_chall) {
+ if (connection_or_send_auth_challenge_cell(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send auth_challenge cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+ if (send_netinfo) {
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+ }
+}
+
+/**
+ * Process a 'netinfo' cell
+ *
+ * This function is called to handle an incoming NETINFO cell; read and act
+ * on its contents, and set the connection state to "open".
+ */
+
+static void
+channel_tls_process_netinfo_cell(cell_t *cell, channel_tls_t *chan)
+{
+ time_t timestamp;
+ uint8_t my_addr_type;
+ uint8_t my_addr_len;
+ const uint8_t *my_addr_ptr;
+ const uint8_t *cp, *end;
+ uint8_t n_other_addrs;
+ time_t now = time(NULL);
+
+ long apparent_skew = 0;
+ tor_addr_t my_apparent_addr = TOR_ADDR_NULL;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+ if (chan->conn->link_proto < 2) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a NETINFO cell on %s connection; dropping.",
+ chan->conn->link_proto == 0 ? "non-versioned" : "a v1");
+ return;
+ }
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V2 &&
+ chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Received a NETINFO cell on non-handshaking connection; dropping.");
+ return;
+ }
+ tor_assert(chan->conn->handshake_state &&
+ chan->conn->handshake_state->received_versions);
+
+ if (chan->conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
+ tor_assert(chan->conn->link_proto >= 3);
+ if (chan->conn->handshake_state->started_here) {
+ if (!(chan->conn->handshake_state->authenticated)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Got a NETINFO cell from server, "
+ "but no authentication. Closing the connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ } else {
+ /* we're the server. If the client never authenticated, we have
+ some housekeeping to do.*/
+ if (!(chan->conn->handshake_state->authenticated)) {
+ tor_assert(tor_digest_is_zero(
+ (const char*)(chan->conn->handshake_state->
+ authenticated_peer_id)));
+ channel_set_circid_type(TLS_CHAN_TO_BASE(chan), NULL,
+ chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
+
+ connection_or_init_conn_from_address(chan->conn,
+ &(chan->conn->base_.addr),
+ chan->conn->base_.port,
+ (const char*)(chan->conn->handshake_state->
+ authenticated_peer_id),
+ 0);
+ }
+ }
+ }
+
+ /* Decode the cell. */
+ timestamp = ntohl(get_uint32(cell->payload));
+ if (labs(now - chan->conn->handshake_state->sent_versions_at) < 180) {
+ apparent_skew = now - timestamp;
+ }
+
+ my_addr_type = (uint8_t) cell->payload[4];
+ my_addr_len = (uint8_t) cell->payload[5];
+ my_addr_ptr = (uint8_t*) cell->payload + 6;
+ end = cell->payload + CELL_PAYLOAD_SIZE;
+ cp = cell->payload + 6 + my_addr_len;
+
+ /* We used to check:
+ * if (my_addr_len >= CELL_PAYLOAD_SIZE - 6) {
+ *
+ * This is actually never going to happen, since my_addr_len is at most 255,
+ * and CELL_PAYLOAD_LEN - 6 is 503. So we know that cp is < end. */
+
+ if (my_addr_type == RESOLVED_TYPE_IPV4 && my_addr_len == 4) {
+ tor_addr_from_ipv4n(&my_apparent_addr, get_uint32(my_addr_ptr));
+ } else if (my_addr_type == RESOLVED_TYPE_IPV6 && my_addr_len == 16) {
+ tor_addr_from_ipv6_bytes(&my_apparent_addr, (const char *) my_addr_ptr);
+ }
+
+ n_other_addrs = (uint8_t) *cp++;
+ while (n_other_addrs && cp < end-2) {
+ /* Consider all the other addresses; if any matches, this connection is
+ * "canonical." */
+ tor_addr_t addr;
+ const uint8_t *next =
+ decode_address_from_payload(&addr, cp, (int)(end-cp));
+ if (next == NULL) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Bad address in netinfo cell; closing connection.");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ if (tor_addr_eq(&addr, &(chan->conn->real_addr))) {
+ chan->conn->is_canonical = 1;
+ break;
+ }
+ cp = next;
+ --n_other_addrs;
+ }
+
+ /* Act on apparent skew. */
+ /** Warn when we get a netinfo skew with at least this value. */
+#define NETINFO_NOTICE_SKEW 3600
+ if (labs(apparent_skew) > NETINFO_NOTICE_SKEW &&
+ router_get_by_id_digest(chan->conn->identity_digest)) {
+ char dbuf[64];
+ int severity;
+ /*XXXX be smarter about when everybody says we are skewed. */
+ if (router_digest_is_trusted_dir(chan->conn->identity_digest))
+ severity = LOG_WARN;
+ else
+ severity = LOG_INFO;
+ format_time_interval(dbuf, sizeof(dbuf), apparent_skew);
+ log_fn(severity, LD_GENERAL,
+ "Received NETINFO cell with skewed time from "
+ "server at %s:%d. It seems that our clock is %s by %s, or "
+ "that theirs is %s. Tor requires an accurate clock to work: "
+ "please check your time and date settings.",
+ chan->conn->base_.address,
+ (int)(chan->conn->base_.port),
+ apparent_skew > 0 ? "ahead" : "behind",
+ dbuf,
+ apparent_skew > 0 ? "behind" : "ahead");
+ if (severity == LOG_WARN) /* only tell the controller if an authority */
+ control_event_general_status(LOG_WARN,
+ "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d",
+ apparent_skew,
+ chan->conn->base_.address,
+ chan->conn->base_.port);
+ }
+
+ /* XXX maybe act on my_apparent_addr, if the source is sufficiently
+ * trustworthy. */
+
+ if (! chan->conn->handshake_state->sent_netinfo) {
+ /* If we were prepared to authenticate, but we never got an AUTH_CHALLENGE
+ * cell, then we would not previously have sent a NETINFO cell. Do so
+ * now. */
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ }
+
+ if (connection_or_set_state_open(chan->conn) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Got good NETINFO cell from %s:%d; but "
+ "was unable to make the OR connection become open.",
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port);
+ connection_or_close_for_error(chan->conn, 0);
+ } else {
+ log_info(LD_OR,
+ "Got good NETINFO cell from %s:%d; OR connection is now "
+ "open, using protocol version %d. Its ID digest is %s. "
+ "Our address is apparently %s.",
+ safe_str_client(chan->conn->base_.address),
+ chan->conn->base_.port,
+ (int)(chan->conn->link_proto),
+ hex_str(TLS_CHAN_TO_BASE(chan)->identity_digest,
+ DIGEST_LEN),
+ tor_addr_is_null(&my_apparent_addr) ?
+ "<none>" : fmt_and_decorate_addr(&my_apparent_addr));
+ }
+ assert_connection_ok(TO_CONN(chan->conn),time(NULL));
+}
+
+/**
+ * Process a CERTS cell from a channel.
+ *
+ * This function is called to process an incoming CERTS cell on a
+ * channel_tls_t:
+ *
+ * If the other side should not have sent us a CERTS cell, or the cell is
+ * malformed, or it is supposed to authenticate the TLS key but it doesn't,
+ * then mark the connection.
+ *
+ * If the cell has a good cert chain and we're doing a v3 handshake, then
+ * store the certificates in or_handshake_state. If this is the client side
+ * of the connection, we then authenticate the server or mark the connection.
+ * If it's the server side, wait for an AUTHENTICATE cell.
+ */
+
+static void
+channel_tls_process_certs_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ tor_cert_t *link_cert = NULL;
+ tor_cert_t *id_cert = NULL;
+ tor_cert_t *auth_cert = NULL;
+ uint8_t *ptr;
+ int n_certs, i;
+ int send_netinfo = 0;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad CERTS cell from %s:%d: %s", \
+ safe_str(chan->conn->base_.address), \
+ chan->conn->base_.port, (s)); \
+ connection_or_close_for_error(chan->conn, 0); \
+ goto err; \
+ } while (0)
+
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not doing a v3 handshake!");
+ if (chan->conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (chan->conn->handshake_state->received_certs_cell)
+ ERR("We already got one");
+ if (chan->conn->handshake_state->authenticated) {
+ /* Should be unreachable, but let's make sure. */
+ ERR("We're already authenticated!");
+ }
+ if (cell->payload_len < 1)
+ ERR("It had no body");
+ if (cell->circ_id)
+ ERR("It had a nonzero circuit ID");
+
+ n_certs = cell->payload[0];
+ ptr = cell->payload + 1;
+ for (i = 0; i < n_certs; ++i) {
+ uint8_t cert_type;
+ uint16_t cert_len;
+ if (cell->payload_len < 3)
+ goto truncated;
+ if (ptr > cell->payload + cell->payload_len - 3) {
+ goto truncated;
+ }
+ cert_type = *ptr;
+ cert_len = ntohs(get_uint16(ptr+1));
+ if (cell->payload_len < 3 + cert_len)
+ goto truncated;
+ if (ptr > cell->payload + cell->payload_len - cert_len - 3) {
+ goto truncated;
+ }
+ if (cert_type == OR_CERT_TYPE_TLS_LINK ||
+ cert_type == OR_CERT_TYPE_ID_1024 ||
+ cert_type == OR_CERT_TYPE_AUTH_1024) {
+ tor_cert_t *cert = tor_cert_decode(ptr + 3, cert_len);
+ if (!cert) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Received undecodable certificate in CERTS cell from %s:%d",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ } else {
+ if (cert_type == OR_CERT_TYPE_TLS_LINK) {
+ if (link_cert) {
+ tor_cert_free(cert);
+ ERR("Too many TLS_LINK certificates");
+ }
+ link_cert = cert;
+ } else if (cert_type == OR_CERT_TYPE_ID_1024) {
+ if (id_cert) {
+ tor_cert_free(cert);
+ ERR("Too many ID_1024 certificates");
+ }
+ id_cert = cert;
+ } else if (cert_type == OR_CERT_TYPE_AUTH_1024) {
+ if (auth_cert) {
+ tor_cert_free(cert);
+ ERR("Too many AUTH_1024 certificates");
+ }
+ auth_cert = cert;
+ } else {
+ tor_cert_free(cert);
+ }
+ }
+ }
+ ptr += 3 + cert_len;
+ continue;
+
+ truncated:
+ ERR("It ends in the middle of a certificate");
+ }
+
+ if (chan->conn->handshake_state->started_here) {
+ int severity;
+ if (! (id_cert && link_cert))
+ ERR("The certs we wanted were missing");
+ /* Okay. We should be able to check the certificates now. */
+ if (! tor_tls_cert_matches_key(chan->conn->tls, link_cert)) {
+ ERR("The link certificate didn't match the TLS public key");
+ }
+ /* Note that this warns more loudly about time and validity if we were
+ * _trying_ to connect to an authority, not necessarily if we _did_ connect
+ * to one. */
+ if (router_digest_is_trusted_dir(
+ TLS_CHAN_TO_BASE(chan)->identity_digest))
+ severity = LOG_WARN;
+ else
+ severity = LOG_PROTOCOL_WARN;
+
+ if (! tor_tls_cert_is_valid(severity, link_cert, id_cert, 0))
+ ERR("The link certificate was not valid");
+ if (! tor_tls_cert_is_valid(severity, id_cert, id_cert, 1))
+ ERR("The ID certificate was not valid");
+
+ chan->conn->handshake_state->authenticated = 1;
+ {
+ const digests_t *id_digests = tor_cert_get_id_digests(id_cert);
+ crypto_pk_t *identity_rcvd;
+ if (!id_digests)
+ ERR("Couldn't compute digests for key in ID cert");
+
+ identity_rcvd = tor_tls_cert_get_key(id_cert);
+ if (!identity_rcvd)
+ ERR("Internal error: Couldn't get RSA key from ID cert.");
+ memcpy(chan->conn->handshake_state->authenticated_peer_id,
+ id_digests->d[DIGEST_SHA1], DIGEST_LEN);
+ channel_set_circid_type(TLS_CHAN_TO_BASE(chan), identity_rcvd,
+ chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
+ crypto_pk_free(identity_rcvd);
+ }
+
+ if (connection_or_client_learned_peer_id(chan->conn,
+ chan->conn->handshake_state->authenticated_peer_id) < 0)
+ ERR("Problem setting or checking peer id");
+
+ log_info(LD_OR,
+ "Got some good certificates from %s:%d: Authenticated it.",
+ safe_str(chan->conn->base_.address), chan->conn->base_.port);
+
+ chan->conn->handshake_state->id_cert = id_cert;
+ id_cert = NULL;
+
+ if (!public_server_mode(get_options())) {
+ /* If we initiated the connection and we are not a public server, we
+ * aren't planning to authenticate at all. At this point we know who we
+ * are talking to, so we can just send a netinfo now. */
+ send_netinfo = 1;
+ }
+ } else {
+ if (! (id_cert && auth_cert))
+ ERR("The certs we wanted were missing");
+
+ /* Remember these certificates so we can check an AUTHENTICATE cell */
+ if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, auth_cert, id_cert, 1))
+ ERR("The authentication certificate was not valid");
+ if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, id_cert, id_cert, 1))
+ ERR("The ID certificate was not valid");
+
+ log_info(LD_OR,
+ "Got some good certificates from %s:%d: "
+ "Waiting for AUTHENTICATE.",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ /* XXXX check more stuff? */
+
+ chan->conn->handshake_state->id_cert = id_cert;
+ chan->conn->handshake_state->auth_cert = auth_cert;
+ id_cert = auth_cert = NULL;
+ }
+
+ chan->conn->handshake_state->received_certs_cell = 1;
+
+ if (send_netinfo) {
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_or_close_for_error(chan->conn, 0);
+ goto err;
+ }
+ }
+
+ err:
+ tor_cert_free(id_cert);
+ tor_cert_free(link_cert);
+ tor_cert_free(auth_cert);
+#undef ERR
+}
+
+/**
+ * Process an AUTH_CHALLENGE cell from a channel_tls_t
+ *
+ * This function is called to handle an incoming AUTH_CHALLENGE cell on a
+ * channel_tls_t; if we weren't supposed to get one (for example, because we're
+ * not the originator of the channel), or it's ill-formed, or we aren't doing
+ * a v3 handshake, mark the channel. If the cell is well-formed but we don't
+ * want to authenticate, just drop it. If the cell is well-formed *and* we
+ * want to authenticate, send an AUTHENTICATE cell and then a NETINFO cell.
+ */
+
+static void
+channel_tls_process_auth_challenge_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ int n_types, i, use_type = -1;
+ uint8_t *cp;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad AUTH_CHALLENGE cell from %s:%d: %s", \
+ safe_str(chan->conn->base_.address), \
+ chan->conn->base_.port, (s)); \
+ connection_or_close_for_error(chan->conn, 0); \
+ return; \
+ } while (0)
+
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not currently doing a v3 handshake");
+ if (chan->conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (!(chan->conn->handshake_state->started_here))
+ ERR("We didn't originate this connection");
+ if (chan->conn->handshake_state->received_auth_challenge)
+ ERR("We already received one");
+ if (!(chan->conn->handshake_state->received_certs_cell))
+ ERR("We haven't gotten a CERTS cell yet");
+ if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2)
+ ERR("It was too short");
+ if (cell->circ_id)
+ ERR("It had a nonzero circuit ID");
+
+ n_types = ntohs(get_uint16(cell->payload + OR_AUTH_CHALLENGE_LEN));
+ if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2 + 2*n_types)
+ ERR("It looks truncated");
+
+ /* Now see if there is an authentication type we can use */
+ cp = cell->payload+OR_AUTH_CHALLENGE_LEN + 2;
+ for (i = 0; i < n_types; ++i, cp += 2) {
+ uint16_t authtype = ntohs(get_uint16(cp));
+ if (authtype == AUTHTYPE_RSA_SHA256_TLSSECRET)
+ use_type = authtype;
+ }
+
+ chan->conn->handshake_state->received_auth_challenge = 1;
+
+ if (! public_server_mode(get_options())) {
+ /* If we're not a public server then we don't want to authenticate on a
+ connection we originated, and we already sent a NETINFO cell when we
+ got the CERTS cell. We have nothing more to do. */
+ return;
+ }
+
+ if (use_type >= 0) {
+ log_info(LD_OR,
+ "Got an AUTH_CHALLENGE cell from %s:%d: Sending "
+ "authentication",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+
+ if (connection_or_send_authenticate_cell(chan->conn, use_type) < 0) {
+ log_warn(LD_OR,
+ "Couldn't send authenticate cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+ } else {
+ log_info(LD_OR,
+ "Got an AUTH_CHALLENGE cell from %s:%d, but we don't "
+ "know any of its authentication types. Not authenticating.",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ }
+
+ if (connection_or_send_netinfo(chan->conn) < 0) {
+ log_warn(LD_OR, "Couldn't send netinfo cell");
+ connection_or_close_for_error(chan->conn, 0);
+ return;
+ }
+
+#undef ERR
+}
+
+/**
+ * Process an AUTHENTICATE cell from a channel_tls_t
+ *
+ * If it's ill-formed or we weren't supposed to get one or we're not doing a
+ * v3 handshake, then mark the connection. If it does not authenticate the
+ * other side of the connection successfully (because it isn't signed right,
+ * we didn't get a CERTS cell, etc) mark the connection. Otherwise, accept
+ * the identity of the router on the other side of the connection.
+ */
+
+static void
+channel_tls_process_authenticate_cell(var_cell_t *cell, channel_tls_t *chan)
+{
+ uint8_t expected[V3_AUTH_FIXED_PART_LEN];
+ const uint8_t *auth;
+ int authlen;
+
+ tor_assert(cell);
+ tor_assert(chan);
+ tor_assert(chan->conn);
+
+#define ERR(s) \
+ do { \
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
+ "Received a bad AUTHENTICATE cell from %s:%d: %s", \
+ safe_str(chan->conn->base_.address), \
+ chan->conn->base_.port, (s)); \
+ connection_or_close_for_error(chan->conn, 0); \
+ return; \
+ } while (0)
+
+ if (chan->conn->base_.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
+ ERR("We're not doing a v3 handshake");
+ if (chan->conn->link_proto < 3)
+ ERR("We're not using link protocol >= 3");
+ if (chan->conn->handshake_state->started_here)
+ ERR("We originated this connection");
+ if (chan->conn->handshake_state->received_authenticate)
+ ERR("We already got one!");
+ if (chan->conn->handshake_state->authenticated) {
+ /* Should be impossible given other checks */
+ ERR("The peer is already authenticated");
+ }
+ if (!(chan->conn->handshake_state->received_certs_cell))
+ ERR("We never got a certs cell");
+ if (chan->conn->handshake_state->auth_cert == NULL)
+ ERR("We never got an authentication certificate");
+ if (chan->conn->handshake_state->id_cert == NULL)
+ ERR("We never got an identity certificate");
+ if (cell->payload_len < 4)
+ ERR("Cell was way too short");
+
+ auth = cell->payload;
+ {
+ uint16_t type = ntohs(get_uint16(auth));
+ uint16_t len = ntohs(get_uint16(auth+2));
+ if (4 + len > cell->payload_len)
+ ERR("Authenticator was truncated");
+
+ if (type != AUTHTYPE_RSA_SHA256_TLSSECRET)
+ ERR("Authenticator type was not recognized");
+
+ auth += 4;
+ authlen = len;
+ }
+
+ if (authlen < V3_AUTH_BODY_LEN + 1)
+ ERR("Authenticator was too short");
+
+ if (connection_or_compute_authenticate_cell_body(
+ chan->conn, expected, sizeof(expected), NULL, 1) < 0)
+ ERR("Couldn't compute expected AUTHENTICATE cell body");
+
+ if (tor_memneq(expected, auth, sizeof(expected)))
+ ERR("Some field in the AUTHENTICATE cell body was not as expected");
+
+ {
+ crypto_pk_t *pk = tor_tls_cert_get_key(
+ chan->conn->handshake_state->auth_cert);
+ char d[DIGEST256_LEN];
+ char *signed_data;
+ size_t keysize;
+ int signed_len;
+
+ if (!pk)
+ ERR("Internal error: couldn't get RSA key from AUTH cert.");
+ crypto_digest256(d, (char*)auth, V3_AUTH_BODY_LEN, DIGEST_SHA256);
+
+ keysize = crypto_pk_keysize(pk);
+ signed_data = tor_malloc(keysize);
+ signed_len = crypto_pk_public_checksig(pk, signed_data, keysize,
+ (char*)auth + V3_AUTH_BODY_LEN,
+ authlen - V3_AUTH_BODY_LEN);
+ crypto_pk_free(pk);
+ if (signed_len < 0) {
+ tor_free(signed_data);
+ ERR("Signature wasn't valid");
+ }
+ if (signed_len < DIGEST256_LEN) {
+ tor_free(signed_data);
+ ERR("Not enough data was signed");
+ }
+ /* Note that we deliberately allow *more* than DIGEST256_LEN bytes here,
+ * in case they're later used to hold a SHA3 digest or something. */
+ if (tor_memneq(signed_data, d, DIGEST256_LEN)) {
+ tor_free(signed_data);
+ ERR("Signature did not match data to be signed.");
+ }
+ tor_free(signed_data);
+ }
+
+ /* Okay, we are authenticated. */
+ chan->conn->handshake_state->received_authenticate = 1;
+ chan->conn->handshake_state->authenticated = 1;
+ chan->conn->handshake_state->digest_received_data = 0;
+ {
+ crypto_pk_t *identity_rcvd =
+ tor_tls_cert_get_key(chan->conn->handshake_state->id_cert);
+ const digests_t *id_digests =
+ tor_cert_get_id_digests(chan->conn->handshake_state->id_cert);
+
+ /* This must exist; we checked key type when reading the cert. */
+ tor_assert(id_digests);
+
+ memcpy(chan->conn->handshake_state->authenticated_peer_id,
+ id_digests->d[DIGEST_SHA1], DIGEST_LEN);
+
+ channel_set_circid_type(TLS_CHAN_TO_BASE(chan), identity_rcvd,
+ chan->conn->link_proto < MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS);
+ crypto_pk_free(identity_rcvd);
+
+ connection_or_init_conn_from_address(chan->conn,
+ &(chan->conn->base_.addr),
+ chan->conn->base_.port,
+ (const char*)(chan->conn->handshake_state->
+ authenticated_peer_id),
+ 0);
+
+ log_info(LD_OR,
+ "Got an AUTHENTICATE cell from %s:%d: Looks good.",
+ safe_str(chan->conn->base_.address),
+ chan->conn->base_.port);
+ }
+
+#undef ERR
+}
+
diff --git a/src/or/channeltls.h b/src/or/channeltls.h
new file mode 100644
index 000000000..b4a7e2bea
--- /dev/null
+++ b/src/or/channeltls.h
@@ -0,0 +1,57 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file channeltls.h
+ * \brief Header file for channeltls.c
+ **/
+
+#ifndef TOR_CHANNELTLS_H
+#define TOR_CHANNELTLS_H
+
+#include "or.h"
+#include "channel.h"
+
+#define BASE_CHAN_TO_TLS(c) (channel_tls_from_base((c)))
+#define TLS_CHAN_TO_BASE(c) (channel_tls_to_base((c)))
+
+#define TLS_CHAN_MAGIC 0x8a192427U
+
+#ifdef TOR_CHANNEL_INTERNAL_
+
+struct channel_tls_s {
+ /* Base channel_t struct */
+ channel_t base_;
+ /* or_connection_t pointer */
+ or_connection_t *conn;
+};
+
+#endif /* TOR_CHANNEL_INTERNAL_ */
+
+channel_t * channel_tls_connect(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest);
+channel_listener_t * channel_tls_get_listener(void);
+channel_listener_t * channel_tls_start_listener(void);
+channel_t * channel_tls_handle_incoming(or_connection_t *orconn);
+
+/* Casts */
+
+channel_t * channel_tls_to_base(channel_tls_t *tlschan);
+channel_tls_t * channel_tls_from_base(channel_t *chan);
+
+/* Things for connection_or.c to call back into */
+ssize_t channel_tls_flush_some_cells(channel_tls_t *chan, ssize_t num_cells);
+int channel_tls_more_to_flush(channel_tls_t *chan);
+void channel_tls_handle_cell(cell_t *cell, or_connection_t *conn);
+void channel_tls_handle_state_change_on_orconn(channel_tls_t *chan,
+ or_connection_t *conn,
+ uint8_t old_state,
+ uint8_t state);
+void channel_tls_handle_var_cell(var_cell_t *var_cell,
+ or_connection_t *conn);
+
+/* Cleanup at shutdown */
+void channel_tls_free_all(void);
+
+#endif
+
diff --git a/src/or/circpathbias.c b/src/or/circpathbias.c
new file mode 100644
index 000000000..51a75cf50
--- /dev/null
+++ b/src/or/circpathbias.c
@@ -0,0 +1,1538 @@
+/* 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 */
+
+#include "or.h"
+#include "channel.h"
+#include "circpathbias.h"
+#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "circuituse.h"
+#include "circuitstats.h"
+#include "connection_edge.h"
+#include "config.h"
+#include "entrynodes.h"
+#include "networkstatus.h"
+#include "relay.h"
+
+static void pathbias_count_successful_close(origin_circuit_t *circ);
+static void pathbias_count_collapse(origin_circuit_t *circ);
+static void pathbias_count_use_failed(origin_circuit_t *circ);
+static void pathbias_measure_use_rate(entry_guard_t *guard);
+static void pathbias_measure_close_rate(entry_guard_t *guard);
+static void pathbias_scale_use_rates(entry_guard_t *guard);
+static void pathbias_scale_close_rates(entry_guard_t *guard);
+static int entry_guard_inc_circ_attempt_count(entry_guard_t *guard);
+
+/** Increment the number of times we successfully extended a circuit to
+ * <b>guard</b>, first checking if the failure rate is high enough that
+ * we should eliminate the guard. Return -1 if the guard looks no good;
+ * return 0 if the guard looks fine.
+ */
+static int
+entry_guard_inc_circ_attempt_count(entry_guard_t *guard)
+{
+ entry_guards_changed();
+
+ pathbias_measure_close_rate(guard);
+
+ if (guard->path_bias_disabled)
+ return -1;
+
+ pathbias_scale_close_rates(guard);
+ guard->circ_attempts++;
+
+ log_info(LD_CIRC, "Got success count %f/%f for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ return 0;
+}
+
+/** The minimum number of circuit attempts before we start
+ * thinking about warning about path bias and dropping guards */
+static int
+pathbias_get_min_circs(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_MIN_CIRC 150
+ if (options->PathBiasCircThreshold >= 5)
+ return options->PathBiasCircThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_mincircs",
+ DFLT_PATH_BIAS_MIN_CIRC,
+ 5, INT32_MAX);
+}
+
+/** The circuit success rate below which we issue a notice */
+static double
+pathbias_get_notice_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_NOTICE_PCT 70
+ if (options->PathBiasNoticeRate >= 0.0)
+ return options->PathBiasNoticeRate;
+ else
+ return networkstatus_get_param(NULL, "pb_noticepct",
+ DFLT_PATH_BIAS_NOTICE_PCT, 0, 100)/100.0;
+}
+
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+/** The circuit success rate below which we issue a warn */
+static double
+pathbias_get_warn_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_WARN_PCT 50
+ if (options->PathBiasWarnRate >= 0.0)
+ return options->PathBiasWarnRate;
+ else
+ return networkstatus_get_param(NULL, "pb_warnpct",
+ DFLT_PATH_BIAS_WARN_PCT, 0, 100)/100.0;
+}
+
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+/**
+ * The extreme rate is the rate at which we would drop the guard,
+ * if pb_dropguard is also set. Otherwise we just warn.
+ */
+double
+pathbias_get_extreme_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_EXTREME_PCT 30
+ if (options->PathBiasExtremeRate >= 0.0)
+ return options->PathBiasExtremeRate;
+ else
+ return networkstatus_get_param(NULL, "pb_extremepct",
+ DFLT_PATH_BIAS_EXTREME_PCT, 0, 100)/100.0;
+}
+
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+/**
+ * If 1, we actually disable use of guards that fall below
+ * the extreme_pct.
+ */
+int
+pathbias_get_dropguards(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_DROP_GUARDS 0
+ if (options->PathBiasDropGuards >= 0)
+ return options->PathBiasDropGuards;
+ else
+ return networkstatus_get_param(NULL, "pb_dropguards",
+ DFLT_PATH_BIAS_DROP_GUARDS, 0, 1);
+}
+
+/**
+ * This is the number of circuits at which we scale our
+ * counts by mult_factor/scale_factor. Note, this count is
+ * not exact, as we only perform the scaling in the event
+ * of no integer truncation.
+ */
+static int
+pathbias_get_scale_threshold(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_SCALE_THRESHOLD 300
+ if (options->PathBiasScaleThreshold >= 10)
+ return options->PathBiasScaleThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_scalecircs",
+ DFLT_PATH_BIAS_SCALE_THRESHOLD, 10,
+ INT32_MAX);
+}
+
+/**
+ * Compute the path bias scaling ratio from the consensus
+ * parameters pb_multfactor/pb_scalefactor.
+ *
+ * Returns a value in (0, 1.0] which we multiply our pathbias
+ * counts with to scale them down.
+ */
+static double
+pathbias_get_scale_ratio(const or_options_t *options)
+{
+ /*
+ * The scale factor is the denominator for our scaling
+ * of circuit counts for our path bias window.
+ *
+ * Note that our use of doubles for the path bias state
+ * file means that powers of 2 work best here.
+ */
+ int denominator = networkstatus_get_param(NULL, "pb_scalefactor",
+ 2, 2, INT32_MAX);
+ (void) options;
+ /**
+ * The mult factor is the numerator for our scaling
+ * of circuit counts for our path bias window. It
+ * allows us to scale by fractions.
+ */
+ return networkstatus_get_param(NULL, "pb_multfactor",
+ 1, 1, denominator)/((double)denominator);
+}
+
+/** The minimum number of circuit usage attempts before we start
+ * thinking about warning about path use bias and dropping guards */
+static int
+pathbias_get_min_use(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_MIN_USE 20
+ if (options->PathBiasUseThreshold >= 3)
+ return options->PathBiasUseThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_minuse",
+ DFLT_PATH_BIAS_MIN_USE,
+ 3, INT32_MAX);
+}
+
+/** The circuit use success rate below which we issue a notice */
+static double
+pathbias_get_notice_use_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_NOTICE_USE_PCT 80
+ if (options->PathBiasNoticeUseRate >= 0.0)
+ return options->PathBiasNoticeUseRate;
+ else
+ return networkstatus_get_param(NULL, "pb_noticeusepct",
+ DFLT_PATH_BIAS_NOTICE_USE_PCT,
+ 0, 100)/100.0;
+}
+
+/**
+ * The extreme use rate is the rate at which we would drop the guard,
+ * if pb_dropguard is also set. Otherwise we just warn.
+ */
+double
+pathbias_get_extreme_use_rate(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_EXTREME_USE_PCT 60
+ if (options->PathBiasExtremeUseRate >= 0.0)
+ return options->PathBiasExtremeUseRate;
+ else
+ return networkstatus_get_param(NULL, "pb_extremeusepct",
+ DFLT_PATH_BIAS_EXTREME_USE_PCT,
+ 0, 100)/100.0;
+}
+
+/**
+ * This is the number of circuits at which we scale our
+ * use counts by mult_factor/scale_factor. Note, this count is
+ * not exact, as we only perform the scaling in the event
+ * of no integer truncation.
+ */
+static int
+pathbias_get_scale_use_threshold(const or_options_t *options)
+{
+#define DFLT_PATH_BIAS_SCALE_USE_THRESHOLD 100
+ if (options->PathBiasScaleUseThreshold >= 10)
+ return options->PathBiasScaleUseThreshold;
+ else
+ return networkstatus_get_param(NULL, "pb_scaleuse",
+ DFLT_PATH_BIAS_SCALE_USE_THRESHOLD,
+ 10, INT32_MAX);
+}
+
+/**
+ * Convert a Guard's path state to string.
+ */
+const char *
+pathbias_state_to_string(path_state_t state)
+{
+ switch (state) {
+ case PATH_STATE_NEW_CIRC:
+ return "new";
+ case PATH_STATE_BUILD_ATTEMPTED:
+ return "build attempted";
+ case PATH_STATE_BUILD_SUCCEEDED:
+ return "build succeeded";
+ case PATH_STATE_USE_ATTEMPTED:
+ return "use attempted";
+ case PATH_STATE_USE_SUCCEEDED:
+ return "use succeeded";
+ case PATH_STATE_USE_FAILED:
+ return "use failed";
+ case PATH_STATE_ALREADY_COUNTED:
+ return "already counted";
+ }
+
+ return "unknown";
+}
+
+/**
+ * This function decides if a circuit has progressed far enough to count
+ * as a circuit "attempt". As long as end-to-end tagging is possible,
+ * we assume the adversary will use it over hop-to-hop failure. Therefore,
+ * we only need to account bias for the last hop. This should make us
+ * much more resilient to ambient circuit failure, and also make that
+ * failure easier to measure (we only need to measure Exit failure rates).
+ */
+static int
+pathbias_is_new_circ_attempt(origin_circuit_t *circ)
+{
+#define N2N_TAGGING_IS_POSSIBLE
+#ifdef N2N_TAGGING_IS_POSSIBLE
+ /* cpath is a circular list. We want circs with more than one hop,
+ * and the second hop must be waiting for keys still (it's just
+ * about to get them). */
+ return circ->cpath &&
+ circ->cpath->next != circ->cpath &&
+ circ->cpath->next->state == CPATH_STATE_AWAITING_KEYS;
+#else
+ /* If tagging attacks are no longer possible, we probably want to
+ * count bias from the first hop. However, one could argue that
+ * timing-based tagging is still more useful than per-hop failure.
+ * In which case, we'd never want to use this.
+ */
+ return circ->cpath &&
+ circ->cpath->state == CPATH_STATE_AWAITING_KEYS;
+#endif
+}
+
+/**
+ * Decide if the path bias code should count a circuit.
+ *
+ * @returns 1 if we should count it, 0 otherwise.
+ */
+static int
+pathbias_should_count(origin_circuit_t *circ)
+{
+#define PATHBIAS_COUNT_INTERVAL (600)
+ static ratelim_t count_limit =
+ RATELIM_INIT(PATHBIAS_COUNT_INTERVAL);
+ char *rate_msg = NULL;
+
+ /* We can't do path bias accounting without entry guards.
+ * Testing and controller circuits also have no guards.
+ *
+ * We also don't count server-side rends, because their
+ * endpoint could be chosen maliciously.
+ * Similarly, we can't count client-side intro attempts,
+ * because clients can be manipulated into connecting to
+ * malicious intro points. */
+ if (get_options()->UseEntryGuards == 0 ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_TESTING ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_CONTROLLER ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND ||
+ circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED ||
+ (circ->base_.purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
+ circ->base_.purpose <= CIRCUIT_PURPOSE_C_INTRODUCE_ACKED)) {
+
+ /* Check to see if the shouldcount result has changed due to a
+ * unexpected purpose change that would affect our results.
+ *
+ * The reason we check the path state too here is because for the
+ * cannibalized versions of these purposes, we count them as successful
+ * before their purpose change.
+ */
+ if (circ->pathbias_shouldcount == PATHBIAS_SHOULDCOUNT_COUNTED
+ && circ->path_state != PATH_STATE_ALREADY_COUNTED) {
+ log_info(LD_BUG,
+ "Circuit %d is now being ignored despite being counted "
+ "in the past. Purpose is %s, path state is %s",
+ circ->global_identifier,
+ circuit_purpose_to_string(circ->base_.purpose),
+ pathbias_state_to_string(circ->path_state));
+ }
+ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED;
+ return 0;
+ }
+
+ /* Completely ignore one hop circuits */
+ if (circ->build_state->onehop_tunnel ||
+ circ->build_state->desired_path_len == 1) {
+ /* Check for inconsistency */
+ if (circ->build_state->desired_path_len != 1 ||
+ !circ->build_state->onehop_tunnel) {
+ if ((rate_msg = rate_limit_log(&count_limit, approx_time()))) {
+ log_info(LD_BUG,
+ "One-hop circuit has length %d. Path state is %s. "
+ "Circuit is a %s currently %s.%s",
+ circ->build_state->desired_path_len,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ tor_fragile_assert();
+ }
+
+ /* Check to see if the shouldcount result has changed due to a
+ * unexpected change that would affect our results */
+ if (circ->pathbias_shouldcount == PATHBIAS_SHOULDCOUNT_COUNTED) {
+ log_info(LD_BUG,
+ "One-hop circuit %d is now being ignored despite being counted "
+ "in the past. Purpose is %s, path state is %s",
+ circ->global_identifier,
+ circuit_purpose_to_string(circ->base_.purpose),
+ pathbias_state_to_string(circ->path_state));
+ }
+ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_IGNORED;
+ return 0;
+ }
+
+ /* Check to see if the shouldcount result has changed due to a
+ * unexpected purpose change that would affect our results */
+ if (circ->pathbias_shouldcount == PATHBIAS_SHOULDCOUNT_IGNORED) {
+ log_info(LD_BUG,
+ "Circuit %d is now being counted despite being ignored "
+ "in the past. Purpose is %s, path state is %s",
+ circ->global_identifier,
+ circuit_purpose_to_string(circ->base_.purpose),
+ pathbias_state_to_string(circ->path_state));
+ }
+ circ->pathbias_shouldcount = PATHBIAS_SHOULDCOUNT_COUNTED;
+
+ return 1;
+}
+
+/**
+ * Check our circuit state to see if this is a successful circuit attempt.
+ * If so, record it in the current guard's path bias circ_attempt count.
+ *
+ * Also check for several potential error cases for bug #6475.
+ */
+int
+pathbias_count_build_attempt(origin_circuit_t *circ)
+{
+#define CIRC_ATTEMPT_NOTICE_INTERVAL (600)
+ static ratelim_t circ_attempt_notice_limit =
+ RATELIM_INIT(CIRC_ATTEMPT_NOTICE_INTERVAL);
+ char *rate_msg = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return 0;
+ }
+
+ if (pathbias_is_new_circ_attempt(circ)) {
+ /* Help track down the real cause of bug #6475: */
+ if (circ->has_opened && circ->path_state != PATH_STATE_BUILD_ATTEMPTED) {
+ if ((rate_msg = rate_limit_log(&circ_attempt_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Opened circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+
+ /* Don't re-count cannibalized circs.. */
+ if (!circ->has_opened) {
+ entry_guard_t *guard = NULL;
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ } else if (circ->base_.n_chan) {
+ guard =
+ entry_guard_get_by_id_digest(circ->base_.n_chan->identity_digest);
+ }
+
+ if (guard) {
+ if (circ->path_state == PATH_STATE_NEW_CIRC) {
+ circ->path_state = PATH_STATE_BUILD_ATTEMPTED;
+
+ if (entry_guard_inc_circ_attempt_count(guard) < 0) {
+ /* Bogus guard; we already warned. */
+ return -END_CIRC_REASON_TORPROTOCOL;
+ }
+ } else {
+ if ((rate_msg = rate_limit_log(&circ_attempt_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Unopened circuit has strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ } else {
+ if ((rate_msg = rate_limit_log(&circ_attempt_notice_limit,
+ approx_time()))) {
+ log_info(LD_CIRC,
+ "Unopened circuit has no known guard. "
+ "Circuit is a %s currently %s.%s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ }
+ }
+
+ return 0;
+}
+
+/**
+ * Check our circuit state to see if this is a successful circuit
+ * completion. If so, record it in the current guard's path bias
+ * success count.
+ *
+ * Also check for several potential error cases for bug #6475.
+ */
+void
+pathbias_count_build_success(origin_circuit_t *circ)
+{
+#define SUCCESS_NOTICE_INTERVAL (600)
+ static ratelim_t success_notice_limit =
+ RATELIM_INIT(SUCCESS_NOTICE_INTERVAL);
+ char *rate_msg = NULL;
+ entry_guard_t *guard = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ /* Don't count cannibalized/reused circs for path bias
+ * "build" success, since they get counted under "use" success. */
+ if (!circ->has_opened) {
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ if (circ->path_state == PATH_STATE_BUILD_ATTEMPTED) {
+ circ->path_state = PATH_STATE_BUILD_SUCCEEDED;
+ guard->circ_successes++;
+ entry_guards_changed();
+
+ log_info(LD_CIRC, "Got success count %f/%f for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ } else {
+ if ((rate_msg = rate_limit_log(&success_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Succeeded circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+
+ if (guard->circ_attempts < guard->circ_successes) {
+ log_notice(LD_BUG, "Unexpectedly high successes counts (%f/%f) "
+ "for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ }
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ if ((rate_msg = rate_limit_log(&success_notice_limit,
+ approx_time()))) {
+ log_info(LD_CIRC,
+ "Completed circuit has no known guard. "
+ "Circuit is a %s currently %s.%s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ } else {
+ if (circ->path_state < PATH_STATE_BUILD_SUCCEEDED) {
+ if ((rate_msg = rate_limit_log(&success_notice_limit,
+ approx_time()))) {
+ log_info(LD_BUG,
+ "Opened circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.%s",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state),
+ rate_msg);
+ tor_free(rate_msg);
+ }
+ }
+ }
+}
+
+/**
+ * Record an attempt to use a circuit. Changes the circuit's
+ * path state and update its guard's usage counter.
+ *
+ * Used for path bias usage accounting.
+ */
+void
+pathbias_count_use_attempt(origin_circuit_t *circ)
+{
+ entry_guard_t *guard;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->path_state < PATH_STATE_BUILD_SUCCEEDED) {
+ log_notice(LD_BUG,
+ "Used circuit is in strange path state %s. "
+ "Circuit is a %s currently %s.",
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ } else if (circ->path_state < PATH_STATE_USE_ATTEMPTED) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ if (guard) {
+ pathbias_measure_use_rate(guard);
+ pathbias_scale_use_rates(guard);
+ guard->use_attempts++;
+ entry_guards_changed();
+
+ log_debug(LD_CIRC,
+ "Marked circuit %d (%f/%f) as used for guard %s ($%s).",
+ circ->global_identifier,
+ guard->use_successes, guard->use_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ }
+
+ circ->path_state = PATH_STATE_USE_ATTEMPTED;
+ } else {
+ /* Harmless but educational log message */
+ log_info(LD_CIRC,
+ "Used circuit %d is already in path state %s. "
+ "Circuit is a %s currently %s.",
+ circ->global_identifier,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+
+ return;
+}
+
+/**
+ * Check the circuit's path state is appropriate and mark it as
+ * successfully used. Used for path bias usage accounting.
+ *
+ * We don't actually increment the guard's counters until
+ * pathbias_check_close(), because the circuit can still transition
+ * back to PATH_STATE_USE_ATTEMPTED if a stream fails later (this
+ * is done so we can probe the circuit for liveness at close).
+ */
+void
+pathbias_mark_use_success(origin_circuit_t *circ)
+{
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->path_state < PATH_STATE_USE_ATTEMPTED) {
+ log_notice(LD_BUG,
+ "Used circuit %d is in strange path state %s. "
+ "Circuit is a %s currently %s.",
+ circ->global_identifier,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+
+ pathbias_count_use_attempt(circ);
+ }
+
+ /* We don't do any accounting at the guard until actual circuit close */
+ circ->path_state = PATH_STATE_USE_SUCCEEDED;
+
+ return;
+}
+
+/**
+ * If a stream ever detatches from a circuit in a retriable way,
+ * we need to mark this circuit as still needing either another
+ * successful stream, or in need of a probe.
+ *
+ * An adversary could let the first stream request succeed (ie the
+ * resolve), but then tag and timeout the remainder (via cell
+ * dropping), forcing them on new circuits.
+ *
+ * Rolling back the state will cause us to probe such circuits, which
+ * should lead to probe failures in the event of such tagging due to
+ * either unrecognized cells coming in while we wait for the probe,
+ * or the cipher state getting out of sync in the case of dropped cells.
+ */
+void
+pathbias_mark_use_rollback(origin_circuit_t *circ)
+{
+ if (circ->path_state == PATH_STATE_USE_SUCCEEDED) {
+ log_info(LD_CIRC,
+ "Rolling back pathbias use state to 'attempted' for detached "
+ "circuit %d", circ->global_identifier);
+ circ->path_state = PATH_STATE_USE_ATTEMPTED;
+ }
+}
+
+/**
+ * Actually count a circuit success towards a guard's usage counters
+ * if the path state is appropriate.
+ */
+static void
+pathbias_count_use_success(origin_circuit_t *circ)
+{
+ entry_guard_t *guard;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->path_state != PATH_STATE_USE_SUCCEEDED) {
+ log_notice(LD_BUG,
+ "Successfully used circuit %d is in strange path state %s. "
+ "Circuit is a %s currently %s.",
+ circ->global_identifier,
+ pathbias_state_to_string(circ->path_state),
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ } else {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ if (guard) {
+ guard->use_successes++;
+ entry_guards_changed();
+
+ if (guard->use_attempts < guard->use_successes) {
+ log_notice(LD_BUG, "Unexpectedly high use successes counts (%f/%f) "
+ "for guard %s=%s",
+ guard->use_successes, guard->use_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+ }
+
+ log_debug(LD_CIRC,
+ "Marked circuit %d (%f/%f) as used successfully for guard "
+ "%s ($%s).",
+ circ->global_identifier, guard->use_successes,
+ guard->use_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ }
+ }
+
+ return;
+}
+
+/**
+ * Send a probe down a circuit that the client attempted to use,
+ * but for which the stream timed out/failed. The probe is a
+ * RELAY_BEGIN cell with a 0.a.b.c destination address, which
+ * the exit will reject and reply back, echoing that address.
+ *
+ * The reason for such probes is because it is possible to bias
+ * a user's paths simply by causing timeouts, and these timeouts
+ * are not possible to differentiate from unresponsive servers.
+ *
+ * The probe is sent at the end of the circuit lifetime for two
+ * reasons: to prevent cryptographic taggers from being able to
+ * drop cells to cause timeouts, and to prevent easy recognition
+ * of probes before any real client traffic happens.
+ *
+ * Returns -1 if we couldn't probe, 0 otherwise.
+ */
+static int
+pathbias_send_usable_probe(circuit_t *circ)
+{
+ /* Based on connection_ap_handshake_send_begin() */
+ char payload[CELL_PAYLOAD_SIZE];
+ int payload_len;
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+ crypt_path_t *cpath_layer = NULL;
+ char *probe_nonce = NULL;
+
+ tor_assert(ocirc);
+
+ cpath_layer = ocirc->cpath->prev;
+
+ if (cpath_layer->state != CPATH_STATE_OPEN) {
+ /* This can happen for cannibalized circuits. Their
+ * last hop isn't yet open */
+ log_info(LD_CIRC,
+ "Got pathbias probe request for unopened circuit %d. "
+ "Opened %d, len %d", ocirc->global_identifier,
+ ocirc->has_opened, ocirc->build_state->desired_path_len);
+ return -1;
+ }
+
+ /* We already went down this road. */
+ if (circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING &&
+ ocirc->pathbias_probe_id) {
+ log_info(LD_CIRC,
+ "Got pathbias probe request for circuit %d with "
+ "outstanding probe", ocirc->global_identifier);
+ return -1;
+ }
+
+ /* Can't probe if the channel isn't open */
+ if (circ->n_chan == NULL ||
+ (circ->n_chan->state != CHANNEL_STATE_OPEN
+ && circ->n_chan->state != CHANNEL_STATE_MAINT)) {
+ log_info(LD_CIRC,
+ "Skipping pathbias probe for circuit %d: Channel is not open.",
+ ocirc->global_identifier);
+ return -1;
+ }
+
+ circuit_change_purpose(circ, CIRCUIT_PURPOSE_PATH_BIAS_TESTING);
+
+ /* Update timestamp for when circuit_expire_building() should kill us */
+ tor_gettimeofday(&circ->timestamp_began);
+
+ /* Generate a random address for the nonce */
+ crypto_rand((char*)&ocirc->pathbias_probe_nonce,
+ sizeof(ocirc->pathbias_probe_nonce));
+ ocirc->pathbias_probe_nonce &= 0x00ffffff;
+ probe_nonce = tor_dup_ip(ocirc->pathbias_probe_nonce);
+
+ tor_snprintf(payload,RELAY_PAYLOAD_SIZE, "%s:25", probe_nonce);
+ payload_len = (int)strlen(payload)+1;
+
+ // XXX: need this? Can we assume ipv4 will always be supported?
+ // If not, how do we tell?
+ //if (payload_len <= RELAY_PAYLOAD_SIZE - 4 && edge_conn->begincell_flags) {
+ // set_uint32(payload + payload_len, htonl(edge_conn->begincell_flags));
+ // payload_len += 4;
+ //}
+
+ /* Generate+Store stream id, make sure it's non-zero */
+ ocirc->pathbias_probe_id = get_unique_stream_id_by_circ(ocirc);
+
+ if (ocirc->pathbias_probe_id==0) {
+ log_warn(LD_CIRC,
+ "Ran out of stream IDs on circuit %u during "
+ "pathbias probe attempt.", ocirc->global_identifier);
+ tor_free(probe_nonce);
+ return -1;
+ }
+
+ log_info(LD_CIRC,
+ "Sending pathbias testing cell to %s:25 on stream %d for circ %d.",
+ probe_nonce, ocirc->pathbias_probe_id, ocirc->global_identifier);
+ tor_free(probe_nonce);
+
+ /* Send a test relay cell */
+ if (relay_send_command_from_edge(ocirc->pathbias_probe_id, circ,
+ RELAY_COMMAND_BEGIN, payload,
+ payload_len, cpath_layer) < 0) {
+ log_notice(LD_CIRC,
+ "Failed to send pathbias probe cell on circuit %d.",
+ ocirc->global_identifier);
+ return -1;
+ }
+
+ /* Mark it freshly dirty so it doesn't get expired in the meantime */
+ circ->timestamp_dirty = time(NULL);
+
+ return 0;
+}
+
+/**
+ * Check the response to a pathbias probe, to ensure the
+ * cell is recognized and the nonce and other probe
+ * characteristics are as expected.
+ *
+ * If the response is valid, return 0. Otherwise return < 0.
+ */
+int
+pathbias_check_probe_response(circuit_t *circ, const cell_t *cell)
+{
+ /* Based on connection_edge_process_relay_cell() */
+ relay_header_t rh;
+ int reason;
+ uint32_t ipv4_host;
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+
+ tor_assert(cell);
+ tor_assert(ocirc);
+ tor_assert(circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING);
+
+ relay_header_unpack(&rh, cell->payload);
+
+ reason = rh.length > 0 ?
+ get_uint8(cell->payload+RELAY_HEADER_SIZE) : END_STREAM_REASON_MISC;
+
+ if (rh.command == RELAY_COMMAND_END &&
+ reason == END_STREAM_REASON_EXITPOLICY &&
+ ocirc->pathbias_probe_id == rh.stream_id) {
+
+ /* Check length+extract host: It is in network order after the reason code.
+ * See connection_edge_end(). */
+ if (rh.length < 9) { /* reason+ipv4+dns_ttl */
+ log_notice(LD_PROTOCOL,
+ "Short path bias probe response length field (%d).", rh.length);
+ return - END_CIRC_REASON_TORPROTOCOL;
+ }
+
+ ipv4_host = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
+
+ /* Check nonce */
+ if (ipv4_host == ocirc->pathbias_probe_nonce) {
+ pathbias_mark_use_success(ocirc);
+ circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
+ log_info(LD_CIRC,
+ "Got valid path bias probe back for circ %d, stream %d.",
+ ocirc->global_identifier, ocirc->pathbias_probe_id);
+ return 0;
+ } else {
+ log_notice(LD_CIRC,
+ "Got strange probe value 0x%x vs 0x%x back for circ %d, "
+ "stream %d.", ipv4_host, ocirc->pathbias_probe_nonce,
+ ocirc->global_identifier, ocirc->pathbias_probe_id);
+ return -1;
+ }
+ }
+ log_info(LD_CIRC,
+ "Got another cell back back on pathbias probe circuit %d: "
+ "Command: %d, Reason: %d, Stream-id: %d",
+ ocirc->global_identifier, rh.command, reason, rh.stream_id);
+ return -1;
+}
+
+/**
+ * Check if a circuit was used and/or closed successfully.
+ *
+ * If we attempted to use the circuit to carry a stream but failed
+ * for whatever reason, or if the circuit mysteriously died before
+ * we could attach any streams, record these two cases.
+ *
+ * If we *have* successfully used the circuit, or it appears to
+ * have been closed by us locally, count it as a success.
+ *
+ * Returns 0 if we're done making decisions with the circ,
+ * or -1 if we want to probe it first.
+ */
+int
+pathbias_check_close(origin_circuit_t *ocirc, int reason)
+{
+ circuit_t *circ = &ocirc->base_;
+
+ if (!pathbias_should_count(ocirc)) {
+ return 0;
+ }
+
+ switch (ocirc->path_state) {
+ /* If the circuit was closed after building, but before use, we need
+ * to ensure we were the ones who tried to close it (and not a remote
+ * actor). */
+ case PATH_STATE_BUILD_SUCCEEDED:
+ if (reason & END_CIRC_REASON_FLAG_REMOTE) {
+ /* Remote circ close reasons on an unused circuit all could be bias */
+ log_info(LD_CIRC,
+ "Circuit %d remote-closed without successful use for reason %d. "
+ "Circuit purpose %d currently %d,%s. Len %d.",
+ ocirc->global_identifier,
+ reason, circ->purpose, ocirc->has_opened,
+ circuit_state_to_string(circ->state),
+ ocirc->build_state->desired_path_len);
+ pathbias_count_collapse(ocirc);
+ } else if ((reason & ~END_CIRC_REASON_FLAG_REMOTE)
+ == END_CIRC_REASON_CHANNEL_CLOSED &&
+ circ->n_chan &&
+ circ->n_chan->reason_for_closing
+ != CHANNEL_CLOSE_REQUESTED) {
+ /* If we didn't close the channel ourselves, it could be bias */
+ /* XXX: Only count bias if the network is live?
+ * What about clock jumps/suspends? */
+ log_info(LD_CIRC,
+ "Circuit %d's channel closed without successful use for reason "
+ "%d, channel reason %d. Circuit purpose %d currently %d,%s. Len "
+ "%d.", ocirc->global_identifier,
+ reason, circ->n_chan->reason_for_closing,
+ circ->purpose, ocirc->has_opened,
+ circuit_state_to_string(circ->state),
+ ocirc->build_state->desired_path_len);
+ pathbias_count_collapse(ocirc);
+ } else {
+ pathbias_count_successful_close(ocirc);
+ }
+ break;
+
+ /* If we tried to use a circuit but failed, we should probe it to ensure
+ * it has not been tampered with. */
+ case PATH_STATE_USE_ATTEMPTED:
+ /* XXX: Only probe and/or count failure if the network is live?
+ * What about clock jumps/suspends? */
+ if (pathbias_send_usable_probe(circ) == 0)
+ return -1;
+ else
+ pathbias_count_use_failed(ocirc);
+
+ /* Any circuit where there were attempted streams but no successful
+ * streams could be bias */
+ log_info(LD_CIRC,
+ "Circuit %d closed without successful use for reason %d. "
+ "Circuit purpose %d currently %d,%s. Len %d.",
+ ocirc->global_identifier,
+ reason, circ->purpose, ocirc->has_opened,
+ circuit_state_to_string(circ->state),
+ ocirc->build_state->desired_path_len);
+ break;
+
+ case PATH_STATE_USE_SUCCEEDED:
+ pathbias_count_successful_close(ocirc);
+ pathbias_count_use_success(ocirc);
+ break;
+
+ case PATH_STATE_USE_FAILED:
+ pathbias_count_use_failed(ocirc);
+ break;
+
+ case PATH_STATE_NEW_CIRC:
+ case PATH_STATE_BUILD_ATTEMPTED:
+ case PATH_STATE_ALREADY_COUNTED:
+ default:
+ // Other states are uninteresting. No stats to count.
+ break;
+ }
+
+ ocirc->path_state = PATH_STATE_ALREADY_COUNTED;
+
+ return 0;
+}
+
+/**
+ * Count a successfully closed circuit.
+ */
+static void
+pathbias_count_successful_close(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ /* In the long run: circuit_success ~= successful_circuit_close +
+ * circ_failure + stream_failure */
+ guard->successful_circuits_closed++;
+ entry_guards_changed();
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ log_info(LD_CIRC,
+ "Successfully closed circuit has no known guard. "
+ "Circuit is a %s currently %s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+}
+
+/**
+ * Count a circuit that fails after it is built, but before it can
+ * carry any traffic.
+ *
+ * This is needed because there are ways to destroy a
+ * circuit after it has successfully completed. Right now, this is
+ * used for purely informational/debugging purposes.
+ */
+static void
+pathbias_count_collapse(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ guard->collapsed_circuits++;
+ entry_guards_changed();
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ log_info(LD_CIRC,
+ "Destroyed circuit has no known guard. "
+ "Circuit is a %s currently %s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+}
+
+/**
+ * Count a known failed circuit (because we could not probe it).
+ *
+ * This counter is informational.
+ */
+static void
+pathbias_count_use_failed(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ guard->unusable_circuits++;
+ entry_guards_changed();
+ } else if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ /* In rare cases, CIRCUIT_PURPOSE_TESTING can get converted to
+ * CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT and have no guards here.
+ * No need to log that case. */
+ /* XXX note cut-and-paste code in this function compared to nearby
+ * functions. Would be nice to refactor. -RD */
+ log_info(LD_CIRC,
+ "Stream-failing circuit has no known guard. "
+ "Circuit is a %s currently %s",
+ circuit_purpose_to_string(circ->base_.purpose),
+ circuit_state_to_string(circ->base_.state));
+ }
+}
+
+/**
+ * Count timeouts for path bias log messages.
+ *
+ * These counts are purely informational.
+ */
+void
+pathbias_count_timeout(origin_circuit_t *circ)
+{
+ entry_guard_t *guard = NULL;
+
+ if (!pathbias_should_count(circ)) {
+ return;
+ }
+
+ /* For hidden service circs, they can actually be used
+ * successfully and then time out later (because
+ * the other side declines to use them). */
+ if (circ->path_state == PATH_STATE_USE_SUCCEEDED) {
+ return;
+ }
+
+ if (circ->cpath && circ->cpath->extend_info) {
+ guard = entry_guard_get_by_id_digest(
+ circ->cpath->extend_info->identity_digest);
+ }
+
+ if (guard) {
+ guard->timeouts++;
+ entry_guards_changed();
+ }
+}
+
+/**
+ * Helper function to count all of the currently opened circuits
+ * for a guard that are in a given path state range. The state
+ * range is inclusive on both ends.
+ */
+static int
+pathbias_count_circs_in_states(entry_guard_t *guard,
+ path_state_t from,
+ path_state_t to)
+{
+ circuit_t *circ;
+ int open_circuits = 0;
+
+ /* Count currently open circuits. Give them the benefit of the doubt. */
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ origin_circuit_t *ocirc = NULL;
+ if (!CIRCUIT_IS_ORIGIN(circ) || /* didn't originate here */
+ circ->marked_for_close) /* already counted */
+ continue;
+
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+
+ if (!ocirc->cpath || !ocirc->cpath->extend_info)
+ continue;
+
+ if (ocirc->path_state >= from &&
+ ocirc->path_state <= to &&
+ pathbias_should_count(ocirc) &&
+ fast_memeq(guard->identity,
+ ocirc->cpath->extend_info->identity_digest,
+ DIGEST_LEN)) {
+ log_debug(LD_CIRC, "Found opened circuit %d in path_state %s",
+ ocirc->global_identifier,
+ pathbias_state_to_string(ocirc->path_state));
+ open_circuits++;
+ }
+ }
+
+ return open_circuits;
+}
+
+/**
+ * Return the number of circuits counted as successfully closed for
+ * this guard.
+ *
+ * Also add in the currently open circuits to give them the benefit
+ * of the doubt.
+ */
+double
+pathbias_get_close_success_count(entry_guard_t *guard)
+{
+ return guard->successful_circuits_closed +
+ pathbias_count_circs_in_states(guard,
+ PATH_STATE_BUILD_SUCCEEDED,
+ PATH_STATE_USE_SUCCEEDED);
+}
+
+/**
+ * Return the number of circuits counted as successfully used
+ * this guard.
+ *
+ * Also add in the currently open circuits that we are attempting
+ * to use to give them the benefit of the doubt.
+ */
+double
+pathbias_get_use_success_count(entry_guard_t *guard)
+{
+ return guard->use_successes +
+ pathbias_count_circs_in_states(guard,
+ PATH_STATE_USE_ATTEMPTED,
+ PATH_STATE_USE_SUCCEEDED);
+}
+
+/**
+ * Check the path bias use rate against our consensus parameter limits.
+ *
+ * Emits a log message if the use success rates are too low.
+ *
+ * If pathbias_get_dropguards() is set, we also disable the use of
+ * very failure prone guards.
+ */
+static void
+pathbias_measure_use_rate(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ if (guard->use_attempts > pathbias_get_min_use(options)) {
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_use_success_count(guard)/guard->use_attempts
+ < pathbias_get_extreme_use_rate(options)) {
+ /* Dropping is currently disabled by default. */
+ if (pathbias_get_dropguards(options)) {
+ if (!guard->path_bias_disabled) {
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing to carry an extremely large "
+ "amount of stream on its circuits. "
+ "To avoid potential route manipulation attacks, Tor has "
+ "disabled use of this guard. "
+ "Use counts are %ld/%ld. Success counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ guard->path_bias_disabled = 1;
+ guard->bad_since = approx_time();
+ entry_guards_changed();
+ return;
+ }
+ } else if (!guard->path_bias_use_extreme) {
+ guard->path_bias_use_extreme = 1;
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing to carry an extremely large "
+ "amount of streams on its circuits. "
+ "This could indicate a route manipulation attack, network "
+ "overload, bad local network connectivity, or a bug. "
+ "Use counts are %ld/%ld. Success counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ } else if (pathbias_get_use_success_count(guard)/guard->use_attempts
+ < pathbias_get_notice_use_rate(options)) {
+ if (!guard->path_bias_use_noticed) {
+ guard->path_bias_use_noticed = 1;
+ log_notice(LD_CIRC,
+ "Your Guard %s ($%s) is failing to carry more streams on its "
+ "circuits than usual. "
+ "Most likely this means the Tor network is overloaded "
+ "or your network connection is poor. "
+ "Use counts are %ld/%ld. Success counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ }
+ }
+}
+
+/**
+ * Check the path bias circuit close status rates against our consensus
+ * parameter limits.
+ *
+ * Emits a log message if the use success rates are too low.
+ *
+ * If pathbias_get_dropguards() is set, we also disable the use of
+ * very failure prone guards.
+ *
+ * XXX: This function shares similar log messages and checks to
+ * pathbias_measure_use_rate(). It may be possible to combine them
+ * eventually, especially if we can ever remove the need for 3
+ * levels of closure warns (if the overall circuit failure rate
+ * goes down with ntor). One way to do so would be to multiply
+ * the build rate with the use rate to get an idea of the total
+ * fraction of the total network paths the user is able to use.
+ * See ticket #8159.
+ */
+static void
+pathbias_measure_close_rate(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ if (guard->circ_attempts > pathbias_get_min_circs(options)) {
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_close_success_count(guard)/guard->circ_attempts
+ < pathbias_get_extreme_rate(options)) {
+ /* Dropping is currently disabled by default. */
+ if (pathbias_get_dropguards(options)) {
+ if (!guard->path_bias_disabled) {
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing an extremely large "
+ "amount of circuits. "
+ "To avoid potential route manipulation attacks, Tor has "
+ "disabled use of this guard. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ guard->path_bias_disabled = 1;
+ guard->bad_since = approx_time();
+ entry_guards_changed();
+ return;
+ }
+ } else if (!guard->path_bias_extreme) {
+ guard->path_bias_extreme = 1;
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing an extremely large "
+ "amount of circuits. "
+ "This could indicate a route manipulation attack, "
+ "extreme network overload, or a bug. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ } else if (pathbias_get_close_success_count(guard)/guard->circ_attempts
+ < pathbias_get_warn_rate(options)) {
+ if (!guard->path_bias_warned) {
+ guard->path_bias_warned = 1;
+ log_warn(LD_CIRC,
+ "Your Guard %s ($%s) is failing a very large "
+ "amount of circuits. "
+ "Most likely this means the Tor network is "
+ "overloaded, but it could also mean an attack against "
+ "you or potentially the guard itself. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ } else if (pathbias_get_close_success_count(guard)/guard->circ_attempts
+ < pathbias_get_notice_rate(options)) {
+ if (!guard->path_bias_noticed) {
+ guard->path_bias_noticed = 1;
+ log_notice(LD_CIRC,
+ "Your Guard %s ($%s) is failing more circuits than "
+ "usual. "
+ "Most likely this means the Tor network is overloaded. "
+ "Success counts are %ld/%ld. Use counts are %ld/%ld. "
+ "%ld circuits completed, %ld were unusable, %ld collapsed, "
+ "and %ld timed out. "
+ "For reference, your timeout cutoff is %ld seconds.",
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN),
+ tor_lround(pathbias_get_close_success_count(guard)),
+ tor_lround(guard->circ_attempts),
+ tor_lround(pathbias_get_use_success_count(guard)),
+ tor_lround(guard->use_attempts),
+ tor_lround(guard->circ_successes),
+ tor_lround(guard->unusable_circuits),
+ tor_lround(guard->collapsed_circuits),
+ tor_lround(guard->timeouts),
+ tor_lround(get_circuit_build_close_time_ms()/1000));
+ }
+ }
+ }
+}
+
+/**
+ * This function scales the path bias use rates if we have
+ * more data than the scaling threshold. This allows us to
+ * be more sensitive to recent measurements.
+ *
+ * XXX: The attempt count transfer stuff here might be done
+ * better by keeping separate pending counters that get
+ * transfered at circuit close. See ticket #8160.
+ */
+static void
+pathbias_scale_close_rates(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ /* If we get a ton of circuits, just scale everything down */
+ if (guard->circ_attempts > pathbias_get_scale_threshold(options)) {
+ double scale_ratio = pathbias_get_scale_ratio(options);
+ int opened_attempts = pathbias_count_circs_in_states(guard,
+ PATH_STATE_BUILD_ATTEMPTED, PATH_STATE_BUILD_ATTEMPTED);
+ int opened_built = pathbias_count_circs_in_states(guard,
+ PATH_STATE_BUILD_SUCCEEDED,
+ PATH_STATE_USE_FAILED);
+ /* Verify that the counts are sane before and after scaling */
+ int counts_are_sane = (guard->circ_attempts >= guard->circ_successes);
+
+ guard->circ_attempts -= (opened_attempts+opened_built);
+ guard->circ_successes -= opened_built;
+
+ guard->circ_attempts *= scale_ratio;
+ guard->circ_successes *= scale_ratio;
+ guard->timeouts *= scale_ratio;
+ guard->successful_circuits_closed *= scale_ratio;
+ guard->collapsed_circuits *= scale_ratio;
+ guard->unusable_circuits *= scale_ratio;
+
+ guard->circ_attempts += (opened_attempts+opened_built);
+ guard->circ_successes += opened_built;
+
+ entry_guards_changed();
+
+ log_info(LD_CIRC,
+ "Scaled pathbias counts to (%f,%f)/%f (%d/%d open) for guard "
+ "%s ($%s)",
+ guard->circ_successes, guard->successful_circuits_closed,
+ guard->circ_attempts, opened_built, opened_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+
+ /* Have the counts just become invalid by this scaling attempt? */
+ if (counts_are_sane && guard->circ_attempts < guard->circ_successes) {
+ log_notice(LD_BUG,
+ "Scaling has mangled pathbias counts to %f/%f (%d/%d open) "
+ "for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts, opened_built,
+ opened_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ }
+ }
+}
+
+/**
+ * This function scales the path bias circuit close rates if we have
+ * more data than the scaling threshold. This allows us to be more
+ * sensitive to recent measurements.
+ *
+ * XXX: The attempt count transfer stuff here might be done
+ * better by keeping separate pending counters that get
+ * transfered at circuit close. See ticket #8160.
+ */
+void
+pathbias_scale_use_rates(entry_guard_t *guard)
+{
+ const or_options_t *options = get_options();
+
+ /* If we get a ton of circuits, just scale everything down */
+ if (guard->use_attempts > pathbias_get_scale_use_threshold(options)) {
+ double scale_ratio = pathbias_get_scale_ratio(options);
+ int opened_attempts = pathbias_count_circs_in_states(guard,
+ PATH_STATE_USE_ATTEMPTED, PATH_STATE_USE_SUCCEEDED);
+ /* Verify that the counts are sane before and after scaling */
+ int counts_are_sane = (guard->use_attempts >= guard->use_successes);
+
+ guard->use_attempts -= opened_attempts;
+
+ guard->use_attempts *= scale_ratio;
+ guard->use_successes *= scale_ratio;
+
+ guard->use_attempts += opened_attempts;
+
+ log_info(LD_CIRC,
+ "Scaled pathbias use counts to %f/%f (%d open) for guard %s ($%s)",
+ guard->use_successes, guard->use_attempts, opened_attempts,
+ guard->nickname, hex_str(guard->identity, DIGEST_LEN));
+
+ /* Have the counts just become invalid by this scaling attempt? */
+ if (counts_are_sane && guard->use_attempts < guard->use_successes) {
+ log_notice(LD_BUG,
+ "Scaling has mangled pathbias usage counts to %f/%f "
+ "(%d open) for guard %s ($%s)",
+ guard->circ_successes, guard->circ_attempts,
+ opened_attempts, guard->nickname,
+ hex_str(guard->identity, DIGEST_LEN));
+ }
+
+ entry_guards_changed();
+ }
+}
+
diff --git a/src/or/circpathbias.h b/src/or/circpathbias.h
new file mode 100644
index 000000000..c95d801a4
--- /dev/null
+++ b/src/or/circpathbias.h
@@ -0,0 +1,29 @@
+/* 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 circuitbuild.h
+ * \brief Header file for circuitbuild.c.
+ **/
+
+#ifndef TOR_CIRCPATHBIAS_H
+#define TOR_CIRCPATHBIAS_H
+
+double pathbias_get_extreme_rate(const or_options_t *options);
+double pathbias_get_extreme_use_rate(const or_options_t *options);
+int pathbias_get_dropguards(const or_options_t *options);
+void pathbias_count_timeout(origin_circuit_t *circ);
+void pathbias_count_build_success(origin_circuit_t *circ);
+int pathbias_count_build_attempt(origin_circuit_t *circ);
+int pathbias_check_close(origin_circuit_t *circ, int reason);
+int pathbias_check_probe_response(circuit_t *circ, const cell_t *cell);
+void pathbias_count_use_attempt(origin_circuit_t *circ);
+void pathbias_mark_use_success(origin_circuit_t *circ);
+void pathbias_mark_use_rollback(origin_circuit_t *circ);
+const char *pathbias_state_to_string(path_state_t state);
+
+#endif
+
diff --git a/src/or/circuitbuild.c b/src/or/circuitbuild.c
index f8521c5cf..9d06759de 100644
--- a/src/or/circuitbuild.c
+++ b/src/or/circuitbuild.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,22 +9,31 @@
* \brief The actual details of building circuits.
**/
-#define CIRCUIT_PRIVATE
+#define CIRCUITBUILD_PRIVATE
#include "or.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "circuituse.h"
+#include "command.h"
#include "config.h"
+#include "confparse.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
#include "control.h"
#include "directory.h"
+#include "entrynodes.h"
#include "main.h"
+#include "microdesc.h"
#include "networkstatus.h"
#include "nodelist.h"
#include "onion.h"
+#include "onion_tap.h"
+#include "onion_fast.h"
#include "policies.h"
#include "transports.h"
#include "relay.h"
@@ -32,1684 +41,120 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
#include "crypto.h"
-#undef log
-#include <math.h>
#ifndef MIN
#define MIN(a,b) ((a)<(b)?(a):(b))
#endif
-#define CBT_BIN_TO_MS(bin) ((bin)*CBT_BIN_WIDTH + (CBT_BIN_WIDTH/2))
-
-/********* START VARIABLES **********/
-/** Global list of circuit build times */
-// XXXX: Add this as a member for entry_guard_t instead of global?
-// Then we could do per-guard statistics, as guards are likely to
-// vary in their own latency. The downside of this is that guards
-// can change frequently, so we'd be building a lot more circuits
-// most likely.
-/* XXXX024 Make this static; add accessor functions. */
-circuit_build_times_t circ_times;
-
-/** A global list of all circuits at this hop. */
-extern circuit_t *global_circuitlist;
-
-/** An entry_guard_t represents our information about a chosen long-term
- * first hop, known as a "helper" node in the literature. We can't just
- * use a node_t, since we want to remember these even when we
- * don't have any directory info. */
-typedef struct {
- char nickname[MAX_NICKNAME_LEN+1];
- char identity[DIGEST_LEN];
- time_t chosen_on_date; /**< Approximately when was this guard added?
- * "0" if we don't know. */
- char *chosen_by_version; /**< What tor version added this guard? NULL
- * if we don't know. */
- unsigned int made_contact : 1; /**< 0 if we have never connected to this
- * router, 1 if we have. */
- unsigned int can_retry : 1; /**< Should we retry connecting to this entry,
- * in spite of having it marked as unreachable?*/
- unsigned int path_bias_notice : 1; /**< Did we alert the user about path bias
- * for this node already? */
- unsigned int path_bias_disabled : 1; /**< Have we disabled this node because
- * of path bias issues? */
- time_t bad_since; /**< 0 if this guard is currently usable, or the time at
- * which it was observed to become (according to the
- * directory or the user configuration) unusable. */
- time_t unreachable_since; /**< 0 if we can connect to this guard, or the
- * time at which we first noticed we couldn't
- * connect to it. */
- time_t last_attempted; /**< 0 if we can connect to this guard, or the time
- * at which we last failed to connect to it. */
-
- unsigned first_hops; /**< Number of first hops this guard has completed */
- unsigned circuit_successes; /**< Number of successfully built circuits using
- * this guard as first hop. */
-} entry_guard_t;
-
-/** Information about a configured bridge. Currently this just matches the
- * ones in the torrc file, but one day we may be able to learn about new
- * bridges on our own, and remember them in the state file. */
-typedef struct {
- /** Address of the bridge. */
- tor_addr_t addr;
- /** TLS port for the bridge. */
- uint16_t port;
- /** Boolean: We are re-parsing our bridge list, and we are going to remove
- * this one if we don't find it in the list of configured bridges. */
- unsigned marked_for_removal : 1;
- /** Expected identity digest, or all zero bytes if we don't know what the
- * digest should be. */
- char identity[DIGEST_LEN];
-
- /** Name of pluggable transport protocol taken from its config line. */
- char *transport_name;
-
- /** When should we next try to fetch a descriptor for this bridge? */
- download_status_t fetch_status;
-} bridge_info_t;
-
-/** A list of our chosen entry guards. */
-static smartlist_t *entry_guards = NULL;
-/** A value of 1 means that the entry_guards list has changed
- * and those changes need to be flushed to disk. */
-static int entry_guards_dirty = 0;
-
-/** 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;
-
-/********* END VARIABLES ************/
-
+static channel_t * channel_connect_for_circuit(const tor_addr_t *addr,
+ uint16_t port,
+ const char *id_digest);
static int circuit_deliver_create_cell(circuit_t *circ,
- uint8_t cell_type, const char *payload);
+ const create_cell_t *create_cell,
+ int relayed);
static int onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit);
static crypt_path_t *onion_next_hop_in_cpath(crypt_path_t *cpath);
static int onion_extend_cpath(origin_circuit_t *circ);
static int count_acceptable_nodes(smartlist_t *routers);
static int onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice);
-
-static void entry_guards_changed(void);
-static entry_guard_t *entry_guard_get_by_id_digest(const char *digest);
-
-static void bridge_free(bridge_info_t *bridge);
-
-static int entry_guard_inc_first_hop_count(entry_guard_t *guard);
-static void pathbias_count_success(origin_circuit_t *circ);
-
-/**
- * This function decides if CBT learning should be disabled. It returns
- * true if one or more of the following four conditions are met:
- *
- * 1. If the cbtdisabled consensus parameter is set.
- * 2. If the torrc option LearnCircuitBuildTimeout is false.
- * 3. If we are a directory authority
- * 4. If we fail to write circuit build time history to our state file.
- */
-static int
-circuit_build_times_disabled(void)
-{
- if (unit_tests) {
- return 0;
- } else {
- int consensus_disabled = networkstatus_get_param(NULL, "cbtdisabled",
- 0, 0, 1);
- int config_disabled = !get_options()->LearnCircuitBuildTimeout;
- int dirauth_disabled = get_options()->AuthoritativeDir;
- int state_disabled = did_last_state_file_write_fail() ? 1 : 0;
-
- if (consensus_disabled || config_disabled || dirauth_disabled ||
- state_disabled) {
- log_debug(LD_CIRC,
- "CircuitBuildTime learning is disabled. "
- "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
- consensus_disabled, config_disabled, dirauth_disabled,
- state_disabled);
- return 1;
- } else {
- log_debug(LD_CIRC,
- "CircuitBuildTime learning is not disabled. "
- "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
- consensus_disabled, config_disabled, dirauth_disabled,
- state_disabled);
- return 0;
- }
- }
-}
-
-/**
- * Retrieve and bounds-check the cbtmaxtimeouts consensus paramter.
- *
- * Effect: When this many timeouts happen in the last 'cbtrecentcount'
- * circuit attempts, the client should discard all of its history and
- * begin learning a fresh timeout value.
- */
-static int32_t
-circuit_build_times_max_timeouts(void)
-{
- int32_t cbt_maxtimeouts;
-
- cbt_maxtimeouts = networkstatus_get_param(NULL, "cbtmaxtimeouts",
- CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT,
- CBT_MIN_MAX_RECENT_TIMEOUT_COUNT,
- CBT_MAX_MAX_RECENT_TIMEOUT_COUNT);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_max_timeouts() called, cbtmaxtimeouts is"
- " %d",
- cbt_maxtimeouts);
- }
-
- return cbt_maxtimeouts;
-}
-
-/**
- * Retrieve and bounds-check the cbtnummodes consensus paramter.
- *
- * Effect: This value governs how many modes to use in the weighted
- * average calculation of Pareto parameter Xm. A value of 3 introduces
- * some bias (2-5% of CDF) under ideal conditions, but allows for better
- * performance in the event that a client chooses guard nodes of radically
- * different performance characteristics.
- */
-static int32_t
-circuit_build_times_default_num_xm_modes(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtnummodes",
- CBT_DEFAULT_NUM_XM_MODES,
- CBT_MIN_NUM_XM_MODES,
- CBT_MAX_NUM_XM_MODES);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_default_num_xm_modes() called, cbtnummodes"
- " is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * Retrieve and bounds-check the cbtmincircs consensus paramter.
- *
- * Effect: This is the minimum number of circuits to build before
- * computing a timeout.
- */
-static int32_t
-circuit_build_times_min_circs_to_observe(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtmincircs",
- CBT_DEFAULT_MIN_CIRCUITS_TO_OBSERVE,
- CBT_MIN_MIN_CIRCUITS_TO_OBSERVE,
- CBT_MAX_MIN_CIRCUITS_TO_OBSERVE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_min_circs_to_observe() called, cbtmincircs"
- " is %d",
- num);
- }
-
- return num;
-}
-
-/** Return true iff <b>cbt</b> has recorded enough build times that we
- * want to start acting on the timeout it implies. */
-int
-circuit_build_times_enough_to_compute(circuit_build_times_t *cbt)
-{
- return cbt->total_build_times >= circuit_build_times_min_circs_to_observe();
-}
-
-/**
- * Retrieve and bounds-check the cbtquantile consensus paramter.
- *
- * Effect: This is the position on the quantile curve to use to set the
- * timeout value. It is a percent (10-99).
- */
-double
-circuit_build_times_quantile_cutoff(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtquantile",
- CBT_DEFAULT_QUANTILE_CUTOFF,
- CBT_MIN_QUANTILE_CUTOFF,
- CBT_MAX_QUANTILE_CUTOFF);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_quantile_cutoff() called, cbtquantile"
- " is %d",
- num);
- }
-
- return num/100.0;
-}
-
-/* DOCDOC circuit_build_times_get_bw_scale */
-int
-circuit_build_times_get_bw_scale(networkstatus_t *ns)
-{
- return networkstatus_get_param(ns, "bwweightscale",
- BW_WEIGHT_SCALE,
- BW_MIN_WEIGHT_SCALE,
- BW_MAX_WEIGHT_SCALE);
-}
-
-/**
- * Retrieve and bounds-check the cbtclosequantile consensus paramter.
- *
- * Effect: This is the position on the quantile curve to use to set the
- * timeout value to use to actually close circuits. It is a percent
- * (0-99).
- */
-static double
-circuit_build_times_close_quantile(void)
-{
- int32_t param;
- /* Cast is safe - circuit_build_times_quantile_cutoff() is capped */
- int32_t min = (int)tor_lround(100*circuit_build_times_quantile_cutoff());
- param = networkstatus_get_param(NULL, "cbtclosequantile",
- CBT_DEFAULT_CLOSE_QUANTILE,
- CBT_MIN_CLOSE_QUANTILE,
- CBT_MAX_CLOSE_QUANTILE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_close_quantile() called, cbtclosequantile"
- " is %d", param);
- }
-
- if (param < min) {
- log_warn(LD_DIR, "Consensus parameter cbtclosequantile is "
- "too small, raising to %d", min);
- param = min;
- }
- return param / 100.0;
-}
-
-/**
- * Retrieve and bounds-check the cbttestfreq consensus paramter.
- *
- * Effect: Describes how often in seconds to build a test circuit to
- * gather timeout values. Only applies if less than 'cbtmincircs'
- * have been recorded.
- */
-static int32_t
-circuit_build_times_test_frequency(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbttestfreq",
- CBT_DEFAULT_TEST_FREQUENCY,
- CBT_MIN_TEST_FREQUENCY,
- CBT_MAX_TEST_FREQUENCY);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_test_frequency() called, cbttestfreq is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * Retrieve and bounds-check the cbtmintimeout consensus parameter.
- *
- * Effect: This is the minimum allowed timeout value in milliseconds.
- * The minimum is to prevent rounding to 0 (we only check once
- * per second).
- */
-static int32_t
-circuit_build_times_min_timeout(void)
-{
- int32_t num = networkstatus_get_param(NULL, "cbtmintimeout",
- CBT_DEFAULT_TIMEOUT_MIN_VALUE,
- CBT_MIN_TIMEOUT_MIN_VALUE,
- CBT_MAX_TIMEOUT_MIN_VALUE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_min_timeout() called, cbtmintimeout is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * Retrieve and bounds-check the cbtinitialtimeout consensus paramter.
- *
- * Effect: This is the timeout value to use before computing a timeout,
- * in milliseconds.
- */
-int32_t
-circuit_build_times_initial_timeout(void)
-{
- int32_t min = circuit_build_times_min_timeout();
- int32_t param = networkstatus_get_param(NULL, "cbtinitialtimeout",
- CBT_DEFAULT_TIMEOUT_INITIAL_VALUE,
- CBT_MIN_TIMEOUT_INITIAL_VALUE,
- CBT_MAX_TIMEOUT_INITIAL_VALUE);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_initial_timeout() called, "
- "cbtinitialtimeout is %d",
- param);
- }
-
- if (param < min) {
- log_warn(LD_DIR, "Consensus parameter cbtinitialtimeout is too small, "
- "raising to %d", min);
- param = min;
- }
- return param;
-}
-
-/**
- * Retrieve and bounds-check the cbtrecentcount consensus paramter.
- *
- * Effect: This is the number of circuit build times to keep track of
- * for deciding if we hit cbtmaxtimeouts and need to reset our state
- * and learn a new timeout.
- */
-static int32_t
-circuit_build_times_recent_circuit_count(networkstatus_t *ns)
-{
- int32_t num;
- num = networkstatus_get_param(ns, "cbtrecentcount",
- CBT_DEFAULT_RECENT_CIRCUITS,
- CBT_MIN_RECENT_CIRCUITS,
- CBT_MAX_RECENT_CIRCUITS);
-
- if (!(get_options()->LearnCircuitBuildTimeout)) {
- log_debug(LD_BUG,
- "circuit_build_times_recent_circuit_count() called, "
- "cbtrecentcount is %d",
- num);
- }
-
- return num;
-}
-
-/**
- * This function is called when we get a consensus update.
- *
- * It checks to see if we have changed any consensus parameters
- * that require reallocation or discard of previous stats.
- */
-void
-circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
- networkstatus_t *ns)
-{
- int32_t num;
-
- /*
- * First check if we're doing adaptive timeouts at all; nothing to
- * update if we aren't.
- */
-
- if (!circuit_build_times_disabled()) {
- num = circuit_build_times_recent_circuit_count(ns);
-
- if (num > 0) {
- if (num != cbt->liveness.num_recent_circs) {
- int8_t *recent_circs;
- log_notice(LD_CIRC, "The Tor Directory Consensus has changed how many "
- "circuits we must track to detect network failures from %d "
- "to %d.", cbt->liveness.num_recent_circs, num);
-
- tor_assert(cbt->liveness.timeouts_after_firsthop ||
- cbt->liveness.num_recent_circs == 0);
-
- /*
- * Technically this is a circular array that we are reallocating
- * and memcopying. However, since it only consists of either 1s
- * or 0s, and is only used in a statistical test to determine when
- * we should discard our history after a sufficient number of 1's
- * have been reached, it is fine if order is not preserved or
- * elements are lost.
- *
- * cbtrecentcount should only be changing in cases of severe network
- * distress anyway, so memory correctness here is paramount over
- * doing acrobatics to preserve the array.
- */
- recent_circs = tor_malloc_zero(sizeof(int8_t)*num);
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop,
- sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs));
- }
-
- // Adjust the index if it needs it.
- if (num < cbt->liveness.num_recent_circs) {
- cbt->liveness.after_firsthop_idx = MIN(num-1,
- cbt->liveness.after_firsthop_idx);
- }
-
- tor_free(cbt->liveness.timeouts_after_firsthop);
- cbt->liveness.timeouts_after_firsthop = recent_circs;
- cbt->liveness.num_recent_circs = num;
- }
- /* else no change, nothing to do */
- } else { /* num == 0 */
- /*
- * Weird. This probably shouldn't happen, so log a warning, but try
- * to do something sensible anyway.
- */
-
- log_warn(LD_CIRC,
- "The cbtrecentcircs consensus parameter came back zero! "
- "This disables adaptive timeouts since we can't keep track of "
- "any recent circuits.");
-
- circuit_build_times_free_timeouts(cbt);
- }
- } else {
- /*
- * Adaptive timeouts are disabled; this might be because of the
- * LearnCircuitBuildTimes config parameter, and hence permanent, or
- * the cbtdisabled consensus parameter, so it may be a new condition.
- * Treat it like getting num == 0 above and free the circuit history
- * if we have any.
- */
-
- circuit_build_times_free_timeouts(cbt);
- }
-}
-
-/** Make a note that we're running unit tests (rather than running Tor
- * itself), so we avoid clobbering our state file. */
-void
-circuitbuild_running_unit_tests(void)
-{
- unit_tests = 1;
-}
-
-/**
- * Return the initial default or configured timeout in milliseconds
- */
-static double
-circuit_build_times_get_initial_timeout(void)
-{
- double timeout;
-
- /*
- * Check if we have LearnCircuitBuildTimeout, and if we don't,
- * always use CircuitBuildTimeout, no questions asked.
- */
- if (get_options()->LearnCircuitBuildTimeout) {
- if (!unit_tests && get_options()->CircuitBuildTimeout) {
- timeout = get_options()->CircuitBuildTimeout*1000;
- if (timeout < circuit_build_times_min_timeout()) {
- log_warn(LD_CIRC, "Config CircuitBuildTimeout too low. Setting to %ds",
- circuit_build_times_min_timeout()/1000);
- timeout = circuit_build_times_min_timeout();
- }
- } else {
- timeout = circuit_build_times_initial_timeout();
- }
- } else {
- timeout = get_options()->CircuitBuildTimeout*1000;
- }
-
- return timeout;
-}
-
-/**
- * Reset the build time state.
- *
- * Leave estimated parameters, timeout and network liveness intact
- * for future use.
- */
-void
-circuit_build_times_reset(circuit_build_times_t *cbt)
-{
- memset(cbt->circuit_build_times, 0, sizeof(cbt->circuit_build_times));
- cbt->total_build_times = 0;
- cbt->build_times_idx = 0;
- cbt->have_computed_timeout = 0;
-}
-
-/**
- * Initialize the buildtimes structure for first use.
- *
- * Sets the initial timeout values based on either the config setting,
- * the consensus param, or the default (CBT_DEFAULT_TIMEOUT_INITIAL_VALUE).
- */
-void
-circuit_build_times_init(circuit_build_times_t *cbt)
-{
- memset(cbt, 0, sizeof(*cbt));
- /*
- * Check if we really are using adaptive timeouts, and don't keep
- * track of this stuff if not.
- */
- if (!circuit_build_times_disabled()) {
- cbt->liveness.num_recent_circs =
- circuit_build_times_recent_circuit_count(NULL);
- cbt->liveness.timeouts_after_firsthop =
- tor_malloc_zero(sizeof(int8_t)*cbt->liveness.num_recent_circs);
- } else {
- cbt->liveness.num_recent_circs = 0;
- cbt->liveness.timeouts_after_firsthop = NULL;
- }
- cbt->close_ms = cbt->timeout_ms = circuit_build_times_get_initial_timeout();
- control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
-}
-
-/**
- * Free the saved timeouts, if the cbtdisabled consensus parameter got turned
- * on or something.
- */
-
-void
-circuit_build_times_free_timeouts(circuit_build_times_t *cbt)
-{
- if (!cbt) return;
-
- if (cbt->liveness.timeouts_after_firsthop) {
- tor_free(cbt->liveness.timeouts_after_firsthop);
- }
-
- cbt->liveness.num_recent_circs = 0;
-}
-
-#if 0
-/**
- * Rewind our build time history by n positions.
- */
-static void
-circuit_build_times_rewind_history(circuit_build_times_t *cbt, int n)
-{
- int i = 0;
-
- cbt->build_times_idx -= n;
- cbt->build_times_idx %= CBT_NCIRCUITS_TO_OBSERVE;
-
- for (i = 0; i < n; i++) {
- cbt->circuit_build_times[(i+cbt->build_times_idx)
- %CBT_NCIRCUITS_TO_OBSERVE]=0;
- }
-
- if (cbt->total_build_times > n) {
- cbt->total_build_times -= n;
- } else {
- cbt->total_build_times = 0;
- }
-
- log_info(LD_CIRC,
- "Rewound history by %d places. Current index: %d. "
- "Total: %d", n, cbt->build_times_idx, cbt->total_build_times);
-}
+#ifdef CURVE25519_ENABLED
+static int circuits_can_use_ntor(void);
#endif
-/**
- * Add a new build time value <b>time</b> to the set of build times. Time
- * units are milliseconds.
- *
- * circuit_build_times <b>cbt</b> is a circular array, so loop around when
- * array is full.
+/** This function tries to get a channel to the specified endpoint,
+ * and then calls command_setup_channel() to give it the right
+ * callbacks.
*/
-int
-circuit_build_times_add_time(circuit_build_times_t *cbt, build_time_t time)
+static channel_t *
+channel_connect_for_circuit(const tor_addr_t *addr, uint16_t port,
+ const char *id_digest)
{
- if (time <= 0 || time > CBT_BUILD_TIME_MAX) {
- log_warn(LD_BUG, "Circuit build time is too large (%u)."
- "This is probably a bug.", time);
- tor_fragile_assert();
- return -1;
- }
+ channel_t *chan;
- log_debug(LD_CIRC, "Adding circuit build time %u", time);
+ chan = channel_connect(addr, port, id_digest);
+ if (chan) command_setup_channel(chan);
- cbt->circuit_build_times[cbt->build_times_idx] = time;
- cbt->build_times_idx = (cbt->build_times_idx + 1) % CBT_NCIRCUITS_TO_OBSERVE;
- if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
- cbt->total_build_times++;
-
- if ((cbt->total_build_times % CBT_SAVE_STATE_EVERY) == 0) {
- /* Save state every n circuit builds */
- if (!unit_tests && !get_options()->AvoidDiskWrites)
- or_state_mark_dirty(get_or_state(), 0);
- }
-
- return 0;
-}
-
-/**
- * Return maximum circuit build time
- */
-static build_time_t
-circuit_build_times_max(circuit_build_times_t *cbt)
-{
- int i = 0;
- build_time_t max_build_time = 0;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] > max_build_time
- && cbt->circuit_build_times[i] != CBT_BUILD_ABANDONED)
- max_build_time = cbt->circuit_build_times[i];
- }
- return max_build_time;
+ return chan;
}
-#if 0
-/** Return minimum circuit build time */
-build_time_t
-circuit_build_times_min(circuit_build_times_t *cbt)
-{
- int i = 0;
- build_time_t min_build_time = CBT_BUILD_TIME_MAX;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] && /* 0 <-> uninitialized */
- cbt->circuit_build_times[i] < min_build_time)
- min_build_time = cbt->circuit_build_times[i];
- }
- if (min_build_time == CBT_BUILD_TIME_MAX) {
- log_warn(LD_CIRC, "No build times less than CBT_BUILD_TIME_MAX!");
- }
- return min_build_time;
-}
-#endif
-
-/**
- * Calculate and return a histogram for the set of build times.
- *
- * Returns an allocated array of histrogram bins representing
- * the frequency of index*CBT_BIN_WIDTH millisecond
- * build times. Also outputs the number of bins in nbins.
- *
- * The return value must be freed by the caller.
- */
-static uint32_t *
-circuit_build_times_create_histogram(circuit_build_times_t *cbt,
- build_time_t *nbins)
-{
- uint32_t *histogram;
- build_time_t max_build_time = circuit_build_times_max(cbt);
- int i, c;
-
- *nbins = 1 + (max_build_time / CBT_BIN_WIDTH);
- histogram = tor_malloc_zero(*nbins * sizeof(build_time_t));
-
- // calculate histogram
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] == 0
- || cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
- continue; /* 0 <-> uninitialized */
-
- c = (cbt->circuit_build_times[i] / CBT_BIN_WIDTH);
- histogram[c]++;
- }
-
- return histogram;
-}
-
-/**
- * Return the Pareto start-of-curve parameter Xm.
- *
- * Because we are not a true Pareto curve, we compute this as the
- * weighted average of the N most frequent build time bins. N is either
- * 1 if we don't have enough circuit build time data collected, or
- * determined by the consensus parameter cbtnummodes (default 3).
- */
-static build_time_t
-circuit_build_times_get_xm(circuit_build_times_t *cbt)
-{
- build_time_t i, nbins;
- build_time_t *nth_max_bin;
- int32_t bin_counts=0;
- build_time_t ret = 0;
- uint32_t *histogram = circuit_build_times_create_histogram(cbt, &nbins);
- int n=0;
- int num_modes = circuit_build_times_default_num_xm_modes();
-
- tor_assert(nbins > 0);
- tor_assert(num_modes > 0);
-
- // Only use one mode if < 1000 buildtimes. Not enough data
- // for multiple.
- if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
- num_modes = 1;
-
- nth_max_bin = (build_time_t*)tor_malloc_zero(num_modes*sizeof(build_time_t));
-
- /* Determine the N most common build times */
- for (i = 0; i < nbins; i++) {
- if (histogram[i] >= histogram[nth_max_bin[0]]) {
- nth_max_bin[0] = i;
- }
-
- for (n = 1; n < num_modes; n++) {
- if (histogram[i] >= histogram[nth_max_bin[n]] &&
- (!histogram[nth_max_bin[n-1]]
- || histogram[i] < histogram[nth_max_bin[n-1]])) {
- nth_max_bin[n] = i;
- }
- }
- }
-
- for (n = 0; n < num_modes; n++) {
- bin_counts += histogram[nth_max_bin[n]];
- ret += CBT_BIN_TO_MS(nth_max_bin[n])*histogram[nth_max_bin[n]];
- log_info(LD_CIRC, "Xm mode #%d: %u %u", n, CBT_BIN_TO_MS(nth_max_bin[n]),
- histogram[nth_max_bin[n]]);
- }
-
- /* The following assert is safe, because we don't get called when we
- * haven't observed at least CBT_MIN_MIN_CIRCUITS_TO_OBSERVE circuits. */
- tor_assert(bin_counts > 0);
-
- ret /= bin_counts;
- tor_free(histogram);
- tor_free(nth_max_bin);
-
- return ret;
-}
-
-/**
- * Output a histogram of current circuit build times to
- * the or_state_t state structure.
- */
-void
-circuit_build_times_update_state(circuit_build_times_t *cbt,
- or_state_t *state)
-{
- uint32_t *histogram;
- build_time_t i = 0;
- build_time_t nbins = 0;
- config_line_t **next, *line;
-
- histogram = circuit_build_times_create_histogram(cbt, &nbins);
- // write to state
- config_free_lines(state->BuildtimeHistogram);
- next = &state->BuildtimeHistogram;
- *next = NULL;
-
- state->TotalBuildTimes = cbt->total_build_times;
- state->CircuitBuildAbandonedCount = 0;
-
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
- state->CircuitBuildAbandonedCount++;
- }
-
- for (i = 0; i < nbins; i++) {
- // compress the histogram by skipping the blanks
- if (histogram[i] == 0) continue;
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("CircuitBuildTimeBin");
- tor_asprintf(&line->value, "%d %d",
- CBT_BIN_TO_MS(i), histogram[i]);
- next = &(line->next);
- }
-
- if (!unit_tests) {
- if (!get_options()->AvoidDiskWrites)
- or_state_mark_dirty(get_or_state(), 0);
- }
-
- tor_free(histogram);
-}
-
-/**
- * Shuffle the build times array.
- *
- * Adapted from http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
- */
-static void
-circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt,
- build_time_t *raw_times,
- uint32_t num_times)
-{
- uint32_t n = num_times;
- if (num_times > CBT_NCIRCUITS_TO_OBSERVE) {
- log_notice(LD_CIRC, "The number of circuit times that this Tor version "
- "uses to calculate build times is less than the number stored "
- "in your state file. Decreasing the circuit time history from "
- "%lu to %d.", (unsigned long)num_times,
- CBT_NCIRCUITS_TO_OBSERVE);
- }
-
- if (n > INT_MAX-1) {
- log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build "
- "observations in your state file. That's far too many; probably "
- "there's a bug here.", (unsigned long)n);
- n = INT_MAX-1;
- }
-
- /* This code can only be run on a compact array */
- while (n-- > 1) {
- int k = crypto_rand_int(n + 1); /* 0 <= k <= n. */
- build_time_t tmp = raw_times[k];
- raw_times[k] = raw_times[n];
- raw_times[n] = tmp;
- }
-
- /* Since the times are now shuffled, take a random CBT_NCIRCUITS_TO_OBSERVE
- * subset (ie the first CBT_NCIRCUITS_TO_OBSERVE values) */
- for (n = 0; n < MIN(num_times, CBT_NCIRCUITS_TO_OBSERVE); n++) {
- circuit_build_times_add_time(cbt, raw_times[n]);
- }
-}
-
-/**
- * Filter old synthetic timeouts that were created before the
- * new right-censored Pareto calculation was deployed.
- *
- * Once all clients before 0.2.1.13-alpha are gone, this code
- * will be unused.
- */
-static int
-circuit_build_times_filter_timeouts(circuit_build_times_t *cbt)
-{
- int num_filtered=0, i=0;
- double timeout_rate = 0;
- build_time_t max_timeout = 0;
-
- timeout_rate = circuit_build_times_timeout_rate(cbt);
- max_timeout = (build_time_t)cbt->close_ms;
-
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] > max_timeout) {
- build_time_t replaced = cbt->circuit_build_times[i];
- num_filtered++;
- cbt->circuit_build_times[i] = CBT_BUILD_ABANDONED;
-
- log_debug(LD_CIRC, "Replaced timeout %d with %d", replaced,
- cbt->circuit_build_times[i]);
- }
- }
-
- log_info(LD_CIRC,
- "We had %d timeouts out of %d build times, "
- "and filtered %d above the max of %u",
- (int)(cbt->total_build_times*timeout_rate),
- cbt->total_build_times, num_filtered, max_timeout);
-
- return num_filtered;
-}
-
-/**
- * Load histogram from <b>state</b>, shuffling the resulting array
- * after we do so. Use this result to estimate parameters and
- * calculate the timeout.
- *
- * Return -1 on error.
- */
-int
-circuit_build_times_parse_state(circuit_build_times_t *cbt,
- or_state_t *state)
-{
- int tot_values = 0;
- uint32_t loaded_cnt = 0, N = 0;
- config_line_t *line;
- unsigned int i;
- build_time_t *loaded_times;
- int err = 0;
- circuit_build_times_init(cbt);
-
- if (circuit_build_times_disabled()) {
- return 0;
- }
-
- /* build_time_t 0 means uninitialized */
- loaded_times = tor_malloc_zero(sizeof(build_time_t)*state->TotalBuildTimes);
-
- for (line = state->BuildtimeHistogram; line; line = line->next) {
- smartlist_t *args = smartlist_new();
- smartlist_split_string(args, line->value, " ",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- if (smartlist_len(args) < 2) {
- log_warn(LD_GENERAL, "Unable to parse circuit build times: "
- "Too few arguments to CircuitBuildTime");
- err = 1;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- } else {
- const char *ms_str = smartlist_get(args,0);
- const char *count_str = smartlist_get(args,1);
- uint32_t count, k;
- build_time_t ms;
- int ok;
- ms = (build_time_t)tor_parse_ulong(ms_str, 0, 0,
- CBT_BUILD_TIME_MAX, &ok, NULL);
- if (!ok) {
- log_warn(LD_GENERAL, "Unable to parse circuit build times: "
- "Unparsable bin number");
- err = 1;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- }
- count = (uint32_t)tor_parse_ulong(count_str, 0, 0,
- UINT32_MAX, &ok, NULL);
- if (!ok) {
- log_warn(LD_GENERAL, "Unable to parse circuit build times: "
- "Unparsable bin count");
- err = 1;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- }
-
- if (loaded_cnt+count+state->CircuitBuildAbandonedCount
- > state->TotalBuildTimes) {
- log_warn(LD_CIRC,
- "Too many build times in state file. "
- "Stopping short before %d",
- loaded_cnt+count);
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- break;
- }
-
- for (k = 0; k < count; k++) {
- loaded_times[loaded_cnt++] = ms;
- }
- N++;
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- }
- }
-
- log_info(LD_CIRC,
- "Adding %d timeouts.", state->CircuitBuildAbandonedCount);
- for (i=0; i < state->CircuitBuildAbandonedCount; i++) {
- loaded_times[loaded_cnt++] = CBT_BUILD_ABANDONED;
- }
-
- if (loaded_cnt != state->TotalBuildTimes) {
- log_warn(LD_CIRC,
- "Corrupt state file? Build times count mismatch. "
- "Read %d times, but file says %d", loaded_cnt,
- state->TotalBuildTimes);
- err = 1;
- circuit_build_times_reset(cbt);
- goto done;
- }
-
- circuit_build_times_shuffle_and_store_array(cbt, loaded_times, loaded_cnt);
-
- /* Verify that we didn't overwrite any indexes */
- for (i=0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (!cbt->circuit_build_times[i])
- break;
- tot_values++;
- }
- log_info(LD_CIRC,
- "Loaded %d/%d values from %d lines in circuit time histogram",
- tot_values, cbt->total_build_times, N);
-
- if (cbt->total_build_times != tot_values
- || cbt->total_build_times > CBT_NCIRCUITS_TO_OBSERVE) {
- log_warn(LD_CIRC,
- "Corrupt state file? Shuffled build times mismatch. "
- "Read %d times, but file says %d", tot_values,
- state->TotalBuildTimes);
- err = 1;
- circuit_build_times_reset(cbt);
- goto done;
- }
-
- circuit_build_times_set_timeout(cbt);
-
- if (!state->CircuitBuildAbandonedCount && cbt->total_build_times) {
- circuit_build_times_filter_timeouts(cbt);
- }
-
- done:
- tor_free(loaded_times);
- return err ? -1 : 0;
-}
-
-/**
- * Estimates the Xm and Alpha parameters using
- * http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation
- *
- * The notable difference is that we use mode instead of min to estimate Xm.
- * This is because our distribution is frechet-like. We claim this is
- * an acceptable approximation because we are only concerned with the
- * accuracy of the CDF of the tail.
- */
-int
-circuit_build_times_update_alpha(circuit_build_times_t *cbt)
-{
- build_time_t *x=cbt->circuit_build_times;
- double a = 0;
- int n=0,i=0,abandoned_count=0;
- build_time_t max_time=0;
-
- /* http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation */
- /* We sort of cheat here and make our samples slightly more pareto-like
- * and less frechet-like. */
- cbt->Xm = circuit_build_times_get_xm(cbt);
-
- tor_assert(cbt->Xm > 0);
-
- for (i=0; i< CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (!x[i]) {
- continue;
- }
-
- if (x[i] < cbt->Xm) {
- a += tor_mathlog(cbt->Xm);
- } else if (x[i] == CBT_BUILD_ABANDONED) {
- abandoned_count++;
- } else {
- a += tor_mathlog(x[i]);
- if (x[i] > max_time)
- max_time = x[i];
- }
- n++;
- }
-
- /*
- * We are erring and asserting here because this can only happen
- * in codepaths other than startup. The startup state parsing code
- * performs this same check, and resets state if it hits it. If we
- * hit it at runtime, something serious has gone wrong.
- */
- if (n!=cbt->total_build_times) {
- log_err(LD_CIRC, "Discrepancy in build times count: %d vs %d", n,
- cbt->total_build_times);
- }
- tor_assert(n==cbt->total_build_times);
-
- if (max_time <= 0) {
- /* This can happen if Xm is actually the *maximum* value in the set.
- * It can also happen if we've abandoned every single circuit somehow.
- * In either case, tell the caller not to compute a new build timeout. */
- log_warn(LD_BUG,
- "Could not determine largest build time (%d). "
- "Xm is %dms and we've abandoned %d out of %d circuits.", max_time,
- cbt->Xm, abandoned_count, n);
- return 0;
- }
-
- a += abandoned_count*tor_mathlog(max_time);
-
- a -= n*tor_mathlog(cbt->Xm);
- // Estimator comes from Eq #4 in:
- // "Bayesian estimation based on trimmed samples from Pareto populations"
- // by Arturo J. Fernández. We are right-censored only.
- a = (n-abandoned_count)/a;
-
- cbt->alpha = a;
-
- return 1;
-}
-
-/**
- * This is the Pareto Quantile Function. It calculates the point x
- * in the distribution such that F(x) = quantile (ie quantile*100%
- * of the mass of the density function is below x on the curve).
- *
- * We use it to calculate the timeout and also to generate synthetic
- * values of time for circuits that timeout before completion.
- *
- * See http://en.wikipedia.org/wiki/Quantile_function,
- * http://en.wikipedia.org/wiki/Inverse_transform_sampling and
- * http://en.wikipedia.org/wiki/Pareto_distribution#Generating_a_
- * random_sample_from_Pareto_distribution
- * That's right. I'll cite wikipedia all day long.
- *
- * Return value is in milliseconds.
- */
-double
-circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
- double quantile)
-{
- double ret;
- tor_assert(quantile >= 0);
- tor_assert(1.0-quantile > 0);
- tor_assert(cbt->Xm > 0);
-
- ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
- if (ret > INT32_MAX) {
- ret = INT32_MAX;
- }
- tor_assert(ret > 0);
- return ret;
-}
-
-/** Pareto CDF */
-double
-circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
-{
- double ret;
- tor_assert(cbt->Xm > 0);
- ret = 1.0-pow(cbt->Xm/x,cbt->alpha);
- tor_assert(0 <= ret && ret <= 1.0);
- return ret;
-}
-
-/**
- * Generate a synthetic time using our distribution parameters.
- *
- * The return value will be within the [q_lo, q_hi) quantile points
- * on the CDF.
- */
-build_time_t
-circuit_build_times_generate_sample(circuit_build_times_t *cbt,
- double q_lo, double q_hi)
-{
- double randval = crypto_rand_double();
- build_time_t ret;
- double u;
-
- /* Generate between [q_lo, q_hi) */
- /*XXXX This is what nextafter is supposed to be for; we should use it on the
- * platforms that support it. */
- q_hi -= 1.0/(INT32_MAX);
-
- tor_assert(q_lo >= 0);
- tor_assert(q_hi < 1);
- tor_assert(q_lo < q_hi);
-
- u = q_lo + (q_hi-q_lo)*randval;
-
- tor_assert(0 <= u && u < 1.0);
- /* circuit_build_times_calculate_timeout returns <= INT32_MAX */
- ret = (build_time_t)
- tor_lround(circuit_build_times_calculate_timeout(cbt, u));
- tor_assert(ret > 0);
- return ret;
-}
-
-/**
- * Estimate an initial alpha parameter by solving the quantile
- * function with a quantile point and a specific timeout value.
- */
-void
-circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
- double quantile, double timeout_ms)
-{
- // Q(u) = Xm/((1-u)^(1/a))
- // Q(0.8) = Xm/((1-0.8))^(1/a)) = CircBuildTimeout
- // CircBuildTimeout = Xm/((1-0.8))^(1/a))
- // CircBuildTimeout = Xm*((1-0.8))^(-1/a))
- // ln(CircBuildTimeout) = ln(Xm)+ln(((1-0.8)))*(-1/a)
- // -ln(1-0.8)/(ln(CircBuildTimeout)-ln(Xm))=a
- tor_assert(quantile >= 0);
- tor_assert(cbt->Xm > 0);
- cbt->alpha = tor_mathlog(1.0-quantile)/
- (tor_mathlog(cbt->Xm)-tor_mathlog(timeout_ms));
- tor_assert(cbt->alpha > 0);
-}
-
-/**
- * Returns true if we need circuits to be built
- */
-int
-circuit_build_times_needs_circuits(circuit_build_times_t *cbt)
-{
- /* Return true if < MIN_CIRCUITS_TO_OBSERVE */
- return !circuit_build_times_enough_to_compute(cbt);
-}
-
-/**
- * Returns true if we should build a timeout test circuit
- * right now.
- */
-int
-circuit_build_times_needs_circuits_now(circuit_build_times_t *cbt)
-{
- return circuit_build_times_needs_circuits(cbt) &&
- approx_time()-cbt->last_circ_at > circuit_build_times_test_frequency();
-}
-
-/**
- * Called to indicate that the network showed some signs of liveness,
- * i.e. we received a cell.
- *
- * This is used by circuit_build_times_network_check_live() to decide
- * if we should record the circuit build timeout or not.
- *
- * This function is called every time we receive a cell. Avoid
- * syscalls, events, and other high-intensity work.
- */
-void
-circuit_build_times_network_is_live(circuit_build_times_t *cbt)
-{
- time_t now = approx_time();
- if (cbt->liveness.nonlive_timeouts > 0) {
- log_notice(LD_CIRC,
- "Tor now sees network activity. Restoring circuit build "
- "timeout recording. Network was down for %d seconds "
- "during %d circuit attempts.",
- (int)(now - cbt->liveness.network_last_live),
- cbt->liveness.nonlive_timeouts);
- }
- cbt->liveness.network_last_live = now;
- cbt->liveness.nonlive_timeouts = 0;
-}
-
-/**
- * Called to indicate that we completed a circuit. Because this circuit
- * succeeded, it doesn't count as a timeout-after-the-first-hop.
- *
- * This is used by circuit_build_times_network_check_changed() to determine
- * if we had too many recent timeouts and need to reset our learned timeout
- * to something higher.
- */
-void
-circuit_build_times_network_circ_success(circuit_build_times_t *cbt)
-{
- /* Check for NULLness because we might not be using adaptive timeouts */
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
- = 0;
- cbt->liveness.after_firsthop_idx++;
- cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
- }
-}
-
-/**
- * A circuit just timed out. If it failed after the first hop, record it
- * in our history for later deciding if the network speed has changed.
- *
- * This is used by circuit_build_times_network_check_changed() to determine
- * if we had too many recent timeouts and need to reset our learned timeout
- * to something higher.
- */
-static void
-circuit_build_times_network_timeout(circuit_build_times_t *cbt,
- int did_onehop)
-{
- /* Check for NULLness because we might not be using adaptive timeouts */
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- if (did_onehop) {
- cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
- = 1;
- cbt->liveness.after_firsthop_idx++;
- cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
- }
- }
-}
-
-/**
- * A circuit was just forcibly closed. If there has been no recent network
- * activity at all, but this circuit was launched back when we thought the
- * network was live, increment the number of "nonlive" circuit timeouts.
- *
- * This is used by circuit_build_times_network_check_live() to decide
- * if we should record the circuit build timeout or not.
- */
-static void
-circuit_build_times_network_close(circuit_build_times_t *cbt,
- int did_onehop, time_t start_time)
-{
- time_t now = time(NULL);
- /*
- * Check if this is a timeout that was for a circuit that spent its
- * entire existence during a time where we have had no network activity.
- */
- if (cbt->liveness.network_last_live < start_time) {
- if (did_onehop) {
- char last_live_buf[ISO_TIME_LEN+1];
- char start_time_buf[ISO_TIME_LEN+1];
- char now_buf[ISO_TIME_LEN+1];
- format_local_iso_time(last_live_buf, cbt->liveness.network_last_live);
- format_local_iso_time(start_time_buf, start_time);
- format_local_iso_time(now_buf, now);
- log_warn(LD_BUG,
- "Circuit somehow completed a hop while the network was "
- "not live. Network was last live at %s, but circuit launched "
- "at %s. It's now %s.", last_live_buf, start_time_buf,
- now_buf);
- }
- cbt->liveness.nonlive_timeouts++;
- if (cbt->liveness.nonlive_timeouts == 1) {
- log_notice(LD_CIRC,
- "Tor has not observed any network activity for the past %d "
- "seconds. Disabling circuit build timeout recording.",
- (int)(now - cbt->liveness.network_last_live));
- } else {
- log_info(LD_CIRC,
- "Got non-live timeout. Current count is: %d",
- cbt->liveness.nonlive_timeouts);
- }
- }
-}
-
-/**
- * When the network is not live, we do not record circuit build times.
- *
- * The network is considered not live if there has been at least one
- * circuit build that began and ended (had its close_ms measurement
- * period expire) since we last received a cell.
- *
- * Also has the side effect of rewinding the circuit time history
- * in the case of recent liveness changes.
- */
-int
-circuit_build_times_network_check_live(circuit_build_times_t *cbt)
-{
- if (cbt->liveness.nonlive_timeouts > 0) {
- return 0;
- }
-
- return 1;
-}
-
-/**
- * Returns true if we have seen more than MAX_RECENT_TIMEOUT_COUNT of
- * the past RECENT_CIRCUITS time out after the first hop. Used to detect
- * if the network connection has changed significantly, and if so,
- * resets our circuit build timeout to the default.
- *
- * Also resets the entire timeout history in this case and causes us
- * to restart the process of building test circuits and estimating a
- * new timeout.
- */
-int
-circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
-{
- int total_build_times = cbt->total_build_times;
- int timeout_count=0;
- int i;
-
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- /* how many of our recent circuits made it to the first hop but then
- * timed out? */
- for (i = 0; i < cbt->liveness.num_recent_circs; i++) {
- timeout_count += cbt->liveness.timeouts_after_firsthop[i];
- }
- }
-
- /* If 80% of our recent circuits are timing out after the first hop,
- * we need to re-estimate a new initial alpha and timeout. */
- if (timeout_count < circuit_build_times_max_timeouts()) {
- return 0;
- }
-
- circuit_build_times_reset(cbt);
- if (cbt->liveness.timeouts_after_firsthop &&
- cbt->liveness.num_recent_circs > 0) {
- memset(cbt->liveness.timeouts_after_firsthop, 0,
- sizeof(*cbt->liveness.timeouts_after_firsthop)*
- cbt->liveness.num_recent_circs);
- }
- cbt->liveness.after_firsthop_idx = 0;
-
- /* Check to see if this has happened before. If so, double the timeout
- * to give people on abysmally bad network connections a shot at access */
- if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) {
- if (cbt->timeout_ms > INT32_MAX/2 || cbt->close_ms > INT32_MAX/2) {
- log_warn(LD_CIRC, "Insanely large circuit build timeout value. "
- "(timeout = %fmsec, close = %fmsec)",
- cbt->timeout_ms, cbt->close_ms);
- } else {
- cbt->timeout_ms *= 2;
- cbt->close_ms *= 2;
- }
- } else {
- cbt->close_ms = cbt->timeout_ms
- = circuit_build_times_get_initial_timeout();
- }
-
- control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
-
- log_notice(LD_CIRC,
- "Your network connection speed appears to have changed. Resetting "
- "timeout to %lds after %d timeouts and %d buildtimes.",
- tor_lround(cbt->timeout_ms/1000), timeout_count,
- total_build_times);
-
- return 1;
-}
-
-/**
- * Count the number of timeouts in a set of cbt data.
- */
-double
-circuit_build_times_timeout_rate(const circuit_build_times_t *cbt)
-{
- int i=0,timeouts=0;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] >= cbt->timeout_ms) {
- timeouts++;
- }
- }
-
- if (!cbt->total_build_times)
- return 0;
-
- return ((double)timeouts)/cbt->total_build_times;
-}
-
-/**
- * Count the number of closed circuits in a set of cbt data.
- */
-double
-circuit_build_times_close_rate(const circuit_build_times_t *cbt)
-{
- int i=0,closed=0;
- for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
- if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) {
- closed++;
- }
- }
-
- if (!cbt->total_build_times)
- return 0;
-
- return ((double)closed)/cbt->total_build_times;
-}
-
-/**
- * Store a timeout as a synthetic value.
- *
- * Returns true if the store was successful and we should possibly
- * update our timeout estimate.
- */
-int
-circuit_build_times_count_close(circuit_build_times_t *cbt,
- int did_onehop,
- time_t start_time)
-{
- if (circuit_build_times_disabled()) {
- cbt->close_ms = cbt->timeout_ms
- = circuit_build_times_get_initial_timeout();
- return 0;
- }
-
- /* Record this force-close to help determine if the network is dead */
- circuit_build_times_network_close(cbt, did_onehop, start_time);
-
- /* Only count timeouts if network is live.. */
- if (!circuit_build_times_network_check_live(cbt)) {
- return 0;
- }
-
- circuit_build_times_add_time(cbt, CBT_BUILD_ABANDONED);
- return 1;
-}
-
-/**
- * Update timeout counts to determine if we need to expire
- * our build time history due to excessive timeouts.
- *
- * We do not record any actual time values at this stage;
- * we are only interested in recording the fact that a timeout
- * happened. We record the time values via
- * circuit_build_times_count_close() and circuit_build_times_add_time().
- */
-void
-circuit_build_times_count_timeout(circuit_build_times_t *cbt,
- int did_onehop)
-{
- if (circuit_build_times_disabled()) {
- cbt->close_ms = cbt->timeout_ms
- = circuit_build_times_get_initial_timeout();
- return;
- }
-
- /* Register the fact that a timeout just occurred. */
- circuit_build_times_network_timeout(cbt, did_onehop);
-
- /* If there are a ton of timeouts, we should reset
- * the circuit build timeout. */
- circuit_build_times_network_check_changed(cbt);
-}
-
-/**
- * Estimate a new timeout based on history and set our timeout
- * variable accordingly.
- */
-static int
-circuit_build_times_set_timeout_worker(circuit_build_times_t *cbt)
-{
- build_time_t max_time;
- if (!circuit_build_times_enough_to_compute(cbt))
- return 0;
-
- if (!circuit_build_times_update_alpha(cbt))
- return 0;
-
- cbt->timeout_ms = circuit_build_times_calculate_timeout(cbt,
- circuit_build_times_quantile_cutoff());
-
- cbt->close_ms = circuit_build_times_calculate_timeout(cbt,
- circuit_build_times_close_quantile());
-
- max_time = circuit_build_times_max(cbt);
-
- /* Sometimes really fast guard nodes give us such a steep curve
- * that this ends up being not that much greater than timeout_ms.
- * Make it be at least 1 min to handle this case. */
- cbt->close_ms = MAX(cbt->close_ms, circuit_build_times_initial_timeout());
-
- if (cbt->timeout_ms > max_time) {
- log_info(LD_CIRC,
- "Circuit build timeout of %dms is beyond the maximum build "
- "time we have ever observed. Capping it to %dms.",
- (int)cbt->timeout_ms, max_time);
- cbt->timeout_ms = max_time;
- }
-
- if (max_time < INT32_MAX/2 && cbt->close_ms > 2*max_time) {
- log_info(LD_CIRC,
- "Circuit build measurement period of %dms is more than twice "
- "the maximum build time we have ever observed. Capping it to "
- "%dms.", (int)cbt->close_ms, 2*max_time);
- cbt->close_ms = 2*max_time;
- }
-
- cbt->have_computed_timeout = 1;
- return 1;
-}
-
-/**
- * Exposed function to compute a new timeout. Dispatches events and
- * also filters out extremely high timeout values.
- */
-void
-circuit_build_times_set_timeout(circuit_build_times_t *cbt)
-{
- long prev_timeout = tor_lround(cbt->timeout_ms/1000);
- double timeout_rate;
-
- /*
- * Just return if we aren't using adaptive timeouts
- */
- if (circuit_build_times_disabled())
- return;
-
- if (!circuit_build_times_set_timeout_worker(cbt))
- return;
-
- if (cbt->timeout_ms < circuit_build_times_min_timeout()) {
- log_info(LD_CIRC, "Set buildtimeout to low value %fms. Setting to %dms",
- cbt->timeout_ms, circuit_build_times_min_timeout());
- cbt->timeout_ms = circuit_build_times_min_timeout();
- if (cbt->close_ms < cbt->timeout_ms) {
- /* This shouldn't happen because of MAX() in timeout_worker above,
- * but doing it just in case */
- cbt->close_ms = circuit_build_times_initial_timeout();
- }
- }
-
- control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_COMPUTED);
-
- timeout_rate = circuit_build_times_timeout_rate(cbt);
-
- if (prev_timeout > tor_lround(cbt->timeout_ms/1000)) {
- log_info(LD_CIRC,
- "Based on %d circuit times, it looks like we don't need to "
- "wait so long for circuits to finish. We will now assume a "
- "circuit is too slow to use after waiting %ld seconds.",
- cbt->total_build_times,
- tor_lround(cbt->timeout_ms/1000));
- log_info(LD_CIRC,
- "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
- cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
- timeout_rate);
- } else if (prev_timeout < tor_lround(cbt->timeout_ms/1000)) {
- log_info(LD_CIRC,
- "Based on %d circuit times, it looks like we need to wait "
- "longer for circuits to finish. We will now assume a "
- "circuit is too slow to use after waiting %ld seconds.",
- cbt->total_build_times,
- tor_lround(cbt->timeout_ms/1000));
- log_info(LD_CIRC,
- "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
- cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
- timeout_rate);
- } else {
- log_info(LD_CIRC,
- "Set circuit build timeout to %lds (%fms, %fms, Xm: %d, a: %f,"
- " r: %f) based on %d circuit times",
- tor_lround(cbt->timeout_ms/1000),
- cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, timeout_rate,
- cbt->total_build_times);
- }
-}
-
-/** Iterate over values of circ_id, starting from conn-\>next_circ_id,
- * and with the high bit specified by conn-\>circ_id_type, until we get
- * a circ_id that is not in use by any other circuit on that conn.
+/** Search for a value for circ_id that we can use on <b>chan</b> for an
+ * outbound circuit, until we get a circ_id that is not in use by any other
+ * circuit on that conn.
*
* Return it, or 0 if can't get a unique circ_id.
*/
-static circid_t
-get_unique_circ_id_by_conn(or_connection_t *conn)
-{
+STATIC circid_t
+get_unique_circ_id_by_chan(channel_t *chan)
+{
+/* This number is chosen somewhat arbitrarily; see comment below for more
+ * info. When the space is 80% full, it gives a one-in-a-million failure
+ * chance; when the space is 90% full, it gives a one-in-850 chance; and when
+ * the space is 95% full, it gives a one-in-26 failure chance. That seems
+ * okay, though you could make a case IMO for anything between N=32 and
+ * N=256. */
+#define MAX_CIRCID_ATTEMPTS 64
+ int in_use;
+ unsigned n_with_circ = 0, n_pending_destroy = 0;
circid_t test_circ_id;
circid_t attempts=0;
- circid_t high_bit;
+ circid_t high_bit, max_range, mask;
+
+ tor_assert(chan);
- tor_assert(conn);
- if (conn->circ_id_type == CIRC_ID_TYPE_NEITHER) {
- log_warn(LD_BUG, "Trying to pick a circuit ID for a connection from "
+ if (chan->circ_id_type == CIRC_ID_TYPE_NEITHER) {
+ log_warn(LD_BUG,
+ "Trying to pick a circuit ID for a connection from "
"a client with no identity.");
return 0;
}
- high_bit = (conn->circ_id_type == CIRC_ID_TYPE_HIGHER) ? 1<<15 : 0;
+ max_range = (chan->wide_circ_ids) ? (1u<<31) : (1u<<15);
+ mask = max_range - 1;
+ high_bit = (chan->circ_id_type == CIRC_ID_TYPE_HIGHER) ? max_range : 0;
do {
- /* Sequentially iterate over test_circ_id=1...1<<15-1 until we find a
- * circID such that (high_bit|test_circ_id) is not already used. */
- test_circ_id = conn->next_circ_id++;
- if (test_circ_id == 0 || test_circ_id >= 1<<15) {
- test_circ_id = 1;
- conn->next_circ_id = 2;
- }
- if (++attempts > 1<<15) {
- /* Make sure we don't loop forever if all circ_id's are used. This
- * matters because it's an external DoS opportunity.
+ if (++attempts > MAX_CIRCID_ATTEMPTS) {
+ /* Make sure we don't loop forever because all circuit IDs are used.
+ *
+ * Once, we would try until we had tried every possible circuit ID. But
+ * that's quite expensive. Instead, we try MAX_CIRCID_ATTEMPTS random
+ * circuit IDs, and then give up.
+ *
+ * This potentially causes us to give up early if our circuit ID space
+ * is nearly full. If we have N circuit IDs in use, then we will reject
+ * a new circuit with probability (N / max_range) ^ MAX_CIRCID_ATTEMPTS.
+ * This means that in practice, a few percent of our circuit ID capacity
+ * will go unused.
+ *
+ * The alternative here, though, is to do a linear search over the
+ * whole circuit ID space every time we extend a circuit, which is
+ * not so great either.
*/
- log_warn(LD_CIRC,"No unused circ IDs. Failing.");
+ log_fn_ratelim(&chan->last_warned_circ_ids_exhausted, LOG_WARN,
+ LD_CIRC,"No unused circIDs found on channel %s wide "
+ "circID support, with %u inbound and %u outbound circuits. "
+ "Found %u circuit IDs in use by circuits, and %u with "
+ "pending destroy cells."
+ "Failing a circuit.",
+ chan->wide_circ_ids ? "with" : "without",
+ chan->num_p_circuits, chan->num_n_circuits,
+ n_with_circ, n_pending_destroy);
return 0;
}
+
+ do {
+ crypto_rand((char*) &test_circ_id, sizeof(test_circ_id));
+ test_circ_id &= mask;
+ } while (test_circ_id == 0);
+
test_circ_id |= high_bit;
- } while (circuit_id_in_use_on_orconn(test_circ_id, conn));
+
+ in_use = circuit_id_in_use_on_channel(test_circ_id, chan);
+ if (in_use == 1)
+ ++n_with_circ;
+ else if (in_use == 2)
+ ++n_pending_destroy;
+ } while (in_use);
return test_circ_id;
}
@@ -1736,8 +181,8 @@ circuit_list_path_impl(origin_circuit_t *circ, int verbose, int verbose_names)
circ->build_state->is_internal ? "internal" : "exit",
circ->build_state->need_uptime ? " (high-uptime)" : "",
circ->build_state->desired_path_len,
- circ->_base.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ",
- circ->_base.state == CIRCUIT_STATE_OPEN ? "" :
+ circ->base_.state == CIRCUIT_STATE_OPEN ? "" : ", last hop ",
+ circ->base_.state == CIRCUIT_STATE_OPEN ? "" :
(nickname?nickname:"*unnamed*"));
}
@@ -1865,21 +310,74 @@ circuit_rep_hist_note_result(origin_circuit_t *circ)
} while (hop!=circ->cpath);
}
+#ifdef CURVE25519_ENABLED
+/** Return 1 iff at least one node in circ's cpath supports ntor. */
+static int
+circuit_cpath_supports_ntor(const origin_circuit_t *circ)
+{
+ crypt_path_t *head, *cpath;
+
+ cpath = head = circ->cpath;
+ do {
+ if (cpath->extend_info &&
+ !tor_mem_is_zero(
+ (const char*)cpath->extend_info->curve25519_onion_key.public_key,
+ CURVE25519_PUBKEY_LEN))
+ return 1;
+
+ cpath = cpath->next;
+ } while (cpath != head);
+
+ return 0;
+}
+#else
+#define circuit_cpath_supports_ntor(circ) 0
+#endif
+
/** Pick all the entries in our cpath. Stop and return 0 when we're
* happy, or return -1 if an error occurs. */
static int
onion_populate_cpath(origin_circuit_t *circ)
{
- int r;
- again:
- r = onion_extend_cpath(circ);
- if (r < 0) {
- log_info(LD_CIRC,"Generating cpath hop failed.");
- return -1;
+ int n_tries = 0;
+#ifdef CURVE25519_ENABLED
+ const int using_ntor = circuits_can_use_ntor();
+#else
+ const int using_ntor = 0;
+#endif
+
+#define MAX_POPULATE_ATTEMPTS 32
+
+ while (1) {
+ int r = onion_extend_cpath(circ);
+ if (r < 0) {
+ log_info(LD_CIRC,"Generating cpath hop failed.");
+ return -1;
+ }
+ if (r == 1) {
+ /* This circuit doesn't need/shouldn't be forced to have an ntor hop */
+ if (circ->build_state->desired_path_len <= 1 || ! using_ntor)
+ return 0;
+
+ /* This circuit has an ntor hop. great! */
+ if (circuit_cpath_supports_ntor(circ))
+ return 0;
+
+ /* No node in the circuit supports ntor. Have we already tried too many
+ * times? */
+ if (++n_tries >= MAX_POPULATE_ATTEMPTS)
+ break;
+
+ /* Clear the path and retry */
+ circuit_clear_cpath(circ);
+ }
}
- if (r == 0)
- goto again;
- return 0; /* if r == 1 */
+ log_warn(LD_CIRC, "I tried for %d times, but I couldn't build a %d-hop "
+ "circuit with at least one node that supports ntor.",
+ MAX_POPULATE_ATTEMPTS,
+ circ->build_state->desired_path_len);
+
+ return -1;
}
/** Create and return a new origin circuit. Initialize its purpose and
@@ -1888,9 +386,9 @@ onion_populate_cpath(origin_circuit_t *circ)
origin_circuit_t *
origin_circuit_init(uint8_t purpose, int flags)
{
- /* sets circ->p_circ_id and circ->p_conn */
+ /* sets circ->p_circ_id and circ->p_chan */
origin_circuit_t *circ = origin_circuit_new();
- circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OR_WAIT);
+ circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_CHAN_WAIT);
circ->build_state = tor_malloc_zero(sizeof(cpath_build_state_t));
circ->build_state->onehop_tunnel =
((flags & CIRCLAUNCH_ONEHOP_TUNNEL) ? 1 : 0);
@@ -1900,7 +398,7 @@ origin_circuit_init(uint8_t purpose, int flags)
((flags & CIRCLAUNCH_NEED_CAPACITY) ? 1 : 0);
circ->build_state->is_internal =
((flags & CIRCLAUNCH_IS_INTERNAL) ? 1 : 0);
- circ->_base.purpose = purpose;
+ circ->base_.purpose = purpose;
return circ;
}
@@ -1942,7 +440,7 @@ int
circuit_handle_first_hop(origin_circuit_t *circ)
{
crypt_path_t *firsthop;
- or_connection_t *n_conn;
+ channel_t *n_chan;
int err_reason = 0;
const char *msg = NULL;
int should_launch = 0;
@@ -1952,29 +450,30 @@ circuit_handle_first_hop(origin_circuit_t *circ)
tor_assert(firsthop->extend_info);
/* now see if we're already connected to the first OR in 'route' */
- log_debug(LD_CIRC,"Looking for firsthop '%s:%u'",
- fmt_addr(&firsthop->extend_info->addr),
- firsthop->extend_info->port);
+ log_debug(LD_CIRC,"Looking for firsthop '%s'",
+ fmt_addrport(&firsthop->extend_info->addr,
+ firsthop->extend_info->port));
- n_conn = connection_or_get_for_extend(firsthop->extend_info->identity_digest,
- &firsthop->extend_info->addr,
- &msg,
- &should_launch);
+ n_chan = channel_get_for_extend(firsthop->extend_info->identity_digest,
+ &firsthop->extend_info->addr,
+ &msg,
+ &should_launch);
- if (!n_conn) {
+ if (!n_chan) {
/* not currently connected in a useful way. */
log_info(LD_CIRC, "Next router is %s: %s",
safe_str_client(extend_info_describe(firsthop->extend_info)),
msg?msg:"???");
- circ->_base.n_hop = extend_info_dup(firsthop->extend_info);
+ circ->base_.n_hop = extend_info_dup(firsthop->extend_info);
if (should_launch) {
if (circ->build_state->onehop_tunnel)
control_event_bootstrap(BOOTSTRAP_STATUS_CONN_DIR, 0);
- n_conn = connection_or_connect(&firsthop->extend_info->addr,
- firsthop->extend_info->port,
- firsthop->extend_info->identity_digest);
- if (!n_conn) { /* connect failed, forget the whole thing */
+ n_chan = channel_connect_for_circuit(
+ &firsthop->extend_info->addr,
+ firsthop->extend_info->port,
+ firsthop->extend_info->identity_digest);
+ if (!n_chan) { /* connect failed, forget the whole thing */
log_info(LD_CIRC,"connect to firsthop failed. Closing.");
return -END_CIRC_REASON_CONNECTFAILED;
}
@@ -1982,13 +481,13 @@ circuit_handle_first_hop(origin_circuit_t *circ)
log_debug(LD_CIRC,"connecting in progress (or finished). Good.");
/* return success. The onion/circuit/etc will be taken care of
- * automatically (may already have been) whenever n_conn reaches
+ * automatically (may already have been) whenever n_chan reaches
* OR_CONN_STATE_OPEN.
*/
return 0;
} else { /* it's already open. use it. */
- tor_assert(!circ->_base.n_hop);
- circ->_base.n_conn = n_conn;
+ tor_assert(!circ->base_.n_hop);
+ circ->base_.n_chan = n_chan;
log_debug(LD_CIRC,"Conn open. Delivering first onion skin.");
if ((err_reason = circuit_send_next_onion_skin(circ)) < 0) {
log_info(LD_CIRC,"circuit_send_next_onion_skin failed.");
@@ -2004,48 +503,49 @@ circuit_handle_first_hop(origin_circuit_t *circ)
* Status is 1 if connect succeeded, or 0 if connect failed.
*/
void
-circuit_n_conn_done(or_connection_t *or_conn, int status)
+circuit_n_chan_done(channel_t *chan, int status)
{
smartlist_t *pending_circs;
int err_reason = 0;
- log_debug(LD_CIRC,"or_conn to %s/%s, status=%d",
- or_conn->nickname ? or_conn->nickname : "NULL",
- or_conn->_base.address, status);
+ tor_assert(chan);
+
+ log_debug(LD_CIRC,"chan to %s/%s, status=%d",
+ chan->nickname ? chan->nickname : "NULL",
+ channel_get_canonical_remote_descr(chan), status);
pending_circs = smartlist_new();
- circuit_get_all_pending_on_or_conn(pending_circs, or_conn);
+ circuit_get_all_pending_on_channel(pending_circs, chan);
SMARTLIST_FOREACH_BEGIN(pending_circs, circuit_t *, circ)
{
/* These checks are redundant wrt get_all_pending_on_or_conn, but I'm
* leaving them in in case it's possible for the status of a circuit to
* change as we're going down the list. */
- if (circ->marked_for_close || circ->n_conn || !circ->n_hop ||
- circ->state != CIRCUIT_STATE_OR_WAIT)
+ if (circ->marked_for_close || circ->n_chan || !circ->n_hop ||
+ circ->state != CIRCUIT_STATE_CHAN_WAIT)
continue;
if (tor_digest_is_zero(circ->n_hop->identity_digest)) {
/* Look at addr/port. This is an unkeyed connection. */
- if (!tor_addr_eq(&circ->n_hop->addr, &or_conn->_base.addr) ||
- circ->n_hop->port != or_conn->_base.port)
+ if (!channel_matches_extend_info(chan, circ->n_hop))
continue;
} else {
/* We expected a key. See if it's the right one. */
- if (tor_memneq(or_conn->identity_digest,
+ if (tor_memneq(chan->identity_digest,
circ->n_hop->identity_digest, DIGEST_LEN))
continue;
}
- if (!status) { /* or_conn failed; close circ */
- log_info(LD_CIRC,"or_conn failed. Closing circ.");
- circuit_mark_for_close(circ, END_CIRC_REASON_OR_CONN_CLOSED);
+ if (!status) { /* chan failed; close circ */
+ log_info(LD_CIRC,"Channel failed; closing circ.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_CHANNEL_CLOSED);
continue;
}
log_debug(LD_CIRC, "Found circ, sending create cell.");
/* circuit_deliver_create_cell will set n_circ_id and add us to
- * orconn_circuid_circuit_map, so we don't need to call
- * set_circid_orconn here. */
- circ->n_conn = or_conn;
+ * chan_circuid_circuit_map, so we don't need to call
+ * set_circid_chan here. */
+ circ->n_chan = chan;
extend_info_free(circ->n_hop);
circ->n_hop = NULL;
@@ -2060,14 +560,13 @@ circuit_n_conn_done(or_connection_t *or_conn, int status)
* died? */
}
} else {
- /* pull the create cell out of circ->onionskin, and send it */
- tor_assert(circ->n_conn_onionskin);
- if (circuit_deliver_create_cell(circ,CELL_CREATE,
- circ->n_conn_onionskin)<0) {
+ /* pull the create cell out of circ->n_chan_create_cell, and send it */
+ tor_assert(circ->n_chan_create_cell);
+ if (circuit_deliver_create_cell(circ, circ->n_chan_create_cell, 1)<0) {
circuit_mark_for_close(circ, END_CIRC_REASON_RESOURCELIMIT);
continue;
}
- tor_free(circ->n_conn_onionskin);
+ tor_free(circ->n_chan_create_cell);
circuit_set_state(circ, CIRCUIT_STATE_OPEN);
}
}
@@ -2076,44 +575,65 @@ circuit_n_conn_done(or_connection_t *or_conn, int status)
smartlist_free(pending_circs);
}
-/** Find a new circid that isn't currently in use on the circ->n_conn
+/** Find a new circid that isn't currently in use on the circ->n_chan
* for the outgoing
- * circuit <b>circ</b>, and deliver a cell of type <b>cell_type</b>
- * (either CELL_CREATE or CELL_CREATE_FAST) with payload <b>payload</b>
- * to this circuit.
- * Return -1 if we failed to find a suitable circid, else return 0.
+ * circuit <b>circ</b>, and deliver the cell <b>create_cell</b> to this
+ * circuit. If <b>relayed</b> is true, this is a create cell somebody
+ * gave us via an EXTEND cell, so we shouldn't worry if we don't understand
+ * it. Return -1 if we failed to find a suitable circid, else return 0.
*/
static int
-circuit_deliver_create_cell(circuit_t *circ, uint8_t cell_type,
- const char *payload)
+circuit_deliver_create_cell(circuit_t *circ, const create_cell_t *create_cell,
+ int relayed)
{
cell_t cell;
circid_t id;
+ int r;
tor_assert(circ);
- tor_assert(circ->n_conn);
- tor_assert(payload);
- tor_assert(cell_type == CELL_CREATE || cell_type == CELL_CREATE_FAST);
+ tor_assert(circ->n_chan);
+ tor_assert(create_cell);
+ tor_assert(create_cell->cell_type == CELL_CREATE ||
+ create_cell->cell_type == CELL_CREATE_FAST ||
+ create_cell->cell_type == CELL_CREATE2);
- id = get_unique_circ_id_by_conn(circ->n_conn);
+ id = get_unique_circ_id_by_chan(circ->n_chan);
if (!id) {
- log_warn(LD_CIRC,"failed to get unique circID.");
+ static ratelim_t circid_warning_limit = RATELIM_INIT(9600);
+ log_fn_ratelim(&circid_warning_limit, LOG_WARN, LD_CIRC,
+ "failed to get unique circID.");
return -1;
}
- log_debug(LD_CIRC,"Chosen circID %u.", id);
- circuit_set_n_circid_orconn(circ, id, circ->n_conn);
+ log_debug(LD_CIRC,"Chosen circID %u.", (unsigned)id);
+ circuit_set_n_circid_chan(circ, id, circ->n_chan);
memset(&cell, 0, sizeof(cell_t));
- cell.command = cell_type;
+ r = relayed ? create_cell_format_relayed(&cell, create_cell)
+ : create_cell_format(&cell, create_cell);
+ if (r < 0) {
+ log_warn(LD_CIRC,"Couldn't format create cell");
+ return -1;
+ }
cell.circ_id = circ->n_circ_id;
- memcpy(cell.payload, payload, ONIONSKIN_CHALLENGE_LEN);
- append_cell_to_circuit_queue(circ, circ->n_conn, &cell,
+ append_cell_to_circuit_queue(circ, circ->n_chan, &cell,
CELL_DIRECTION_OUT, 0);
if (CIRCUIT_IS_ORIGIN(circ)) {
+ /* Update began timestamp for circuits starting their first hop */
+ if (TO_ORIGIN_CIRCUIT(circ)->cpath->state == CPATH_STATE_CLOSED) {
+ if (circ->n_chan->state != CHANNEL_STATE_OPEN) {
+ log_warn(LD_CIRC,
+ "Got first hop for a circuit without an opened channel. "
+ "State: %s.", channel_state_to_string(circ->n_chan->state));
+ tor_fragile_assert();
+ }
+
+ tor_gettimeofday(&circ->timestamp_began);
+ }
+
/* mark it so it gets better rate limiting treatment. */
- circ->n_conn->client_used = time(NULL);
+ channel_timestamp_client(circ->n_chan);
}
return 0;
@@ -2126,27 +646,30 @@ int
inform_testing_reachability(void)
{
char dirbuf[128];
+ char *address;
const routerinfo_t *me = router_get_my_routerinfo();
if (!me)
return 0;
+ address = tor_dup_ip(me->addr);
control_event_server_status(LOG_NOTICE,
"CHECKING_REACHABILITY ORADDRESS=%s:%d",
- me->address, me->or_port);
+ address, me->or_port);
if (me->dir_port) {
tor_snprintf(dirbuf, sizeof(dirbuf), " and DirPort %s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
control_event_server_status(LOG_NOTICE,
"CHECKING_REACHABILITY DIRADDRESS=%s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
}
log_notice(LD_OR, "Now checking whether ORPort %s:%d%s %s reachable... "
"(this may take up to %d minutes -- look for log "
"messages indicating success)",
- me->address, me->or_port,
+ address, me->or_port,
me->dir_port ? dirbuf : "",
me->dir_port ? "are" : "is",
TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT/60);
+ tor_free(address);
return 1;
}
@@ -2161,16 +684,18 @@ should_use_create_fast_for_circuit(origin_circuit_t *circ)
if (!circ->cpath->extend_info->onion_key)
return 1; /* our hand is forced: only a create_fast will work. */
- if (!options->FastFirstHopPK)
- return 0; /* we prefer to avoid create_fast */
if (public_server_mode(options)) {
/* We're a server, and we know an onion key. We can choose.
* Prefer to blend our circuit into the other circuits we are
* creating on behalf of others. */
return 0;
}
+ if (options->FastFirstHopPK == -1) {
+ /* option is "auto", so look at the consensus. */
+ return networkstatus_get_param(NULL, "usecreatefast", 1, 0, 1);
+ }
- return 1;
+ return options->FastFirstHopPK;
}
/** Return true if <b>circ</b> is the type of circuit we want to count
@@ -2185,6 +710,73 @@ circuit_timeout_want_to_count_circ(origin_circuit_t *circ)
&& circ->build_state->desired_path_len == DEFAULT_ROUTE_LEN;
}
+#ifdef CURVE25519_ENABLED
+/** Return true if the ntor handshake is enabled in the configuration, or if
+ * it's been set to "auto" in the configuration and it's enabled in the
+ * consensus. */
+static int
+circuits_can_use_ntor(void)
+{
+ const or_options_t *options = get_options();
+ if (options->UseNTorHandshake != -1)
+ return options->UseNTorHandshake;
+ return networkstatus_get_param(NULL, "UseNTorHandshake", 0, 0, 1);
+}
+#endif
+
+/** Decide whether to use a TAP or ntor handshake for connecting to <b>ei</b>
+ * directly, and set *<b>cell_type_out</b> and *<b>handshake_type_out</b>
+ * accordingly. */
+static void
+circuit_pick_create_handshake(uint8_t *cell_type_out,
+ uint16_t *handshake_type_out,
+ const extend_info_t *ei)
+{
+#ifdef CURVE25519_ENABLED
+ if (!tor_mem_is_zero((const char*)ei->curve25519_onion_key.public_key,
+ CURVE25519_PUBKEY_LEN) &&
+ circuits_can_use_ntor()) {
+ *cell_type_out = CELL_CREATE2;
+ *handshake_type_out = ONION_HANDSHAKE_TYPE_NTOR;
+ return;
+ }
+#else
+ (void) ei;
+#endif
+
+ *cell_type_out = CELL_CREATE;
+ *handshake_type_out = ONION_HANDSHAKE_TYPE_TAP;
+}
+
+/** Decide whether to use a TAP or ntor handshake for connecting to <b>ei</b>
+ * directly, and set *<b>handshake_type_out</b> accordingly. Decide whether,
+ * in extending through <b>node</b> to do so, we should use an EXTEND2 or an
+ * EXTEND cell to do so, and set *<b>cell_type_out</b> and
+ * *<b>create_cell_type_out</b> accordingly. */
+static void
+circuit_pick_extend_handshake(uint8_t *cell_type_out,
+ uint8_t *create_cell_type_out,
+ uint16_t *handshake_type_out,
+ const node_t *node_prev,
+ const extend_info_t *ei)
+{
+ uint8_t t;
+ circuit_pick_create_handshake(&t, handshake_type_out, ei);
+ /* XXXX024 The check for whether the node has a curve25519 key is a bad
+ * proxy for whether it can do extend2 cells; once a version that
+ * handles extend2 cells is out, remove it. */
+ if (node_prev &&
+ *handshake_type_out != ONION_HANDSHAKE_TYPE_TAP &&
+ (node_has_curve25519_onion_key(node_prev) ||
+ (node_prev->rs && node_prev->rs->version_supports_extend2_cells))) {
+ *cell_type_out = RELAY_COMMAND_EXTEND2;
+ *create_cell_type_out = CELL_CREATE2;
+ } else {
+ *cell_type_out = RELAY_COMMAND_EXTEND;
+ *create_cell_type_out = CELL_CREATE;
+ }
+}
+
/** This is the backbone function for building circuits.
*
* If circ's first hop is closed, then we need to build a create
@@ -2200,49 +792,50 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
{
crypt_path_t *hop;
const node_t *node;
- char payload[2+4+DIGEST_LEN+ONIONSKIN_CHALLENGE_LEN];
- char *onionskin;
- size_t payload_len;
tor_assert(circ);
if (circ->cpath->state == CPATH_STATE_CLOSED) {
+ /* This is the first hop. */
+ create_cell_t cc;
int fast;
- uint8_t cell_type;
+ int len;
log_debug(LD_CIRC,"First skin; sending create cell.");
+ memset(&cc, 0, sizeof(cc));
if (circ->build_state->onehop_tunnel)
control_event_bootstrap(BOOTSTRAP_STATUS_ONEHOP_CREATE, 0);
else
control_event_bootstrap(BOOTSTRAP_STATUS_CIRCUIT_CREATE, 0);
- node = node_get_by_id(circ->_base.n_conn->identity_digest);
+ node = node_get_by_id(circ->base_.n_chan->identity_digest);
fast = should_use_create_fast_for_circuit(circ);
if (!fast) {
/* We are an OR and we know the right onion key: we should
- * send an old slow create cell.
+ * send a create cell.
*/
- cell_type = CELL_CREATE;
- if (onion_skin_create(circ->cpath->extend_info->onion_key,
- &(circ->cpath->dh_handshake_state),
- payload) < 0) {
- log_warn(LD_CIRC,"onion_skin_create (first hop) failed.");
- return - END_CIRC_REASON_INTERNAL;
- }
+ circuit_pick_create_handshake(&cc.cell_type, &cc.handshake_type,
+ circ->cpath->extend_info);
note_request("cell: create", 1);
} else {
/* We are not an OR, and we're building the first hop of a circuit to a
* new OR: we can be speedy and use CREATE_FAST to save an RSA operation
* and a DH operation. */
- cell_type = CELL_CREATE_FAST;
- memset(payload, 0, sizeof(payload));
- crypto_rand((char*) circ->cpath->fast_handshake_state,
- sizeof(circ->cpath->fast_handshake_state));
- memcpy(payload, circ->cpath->fast_handshake_state,
- sizeof(circ->cpath->fast_handshake_state));
+ cc.cell_type = CELL_CREATE_FAST;
+ cc.handshake_type = ONION_HANDSHAKE_TYPE_FAST;
note_request("cell: create fast", 1);
}
- if (circuit_deliver_create_cell(TO_CIRCUIT(circ), cell_type, payload) < 0)
+ len = onion_skin_create(cc.handshake_type,
+ circ->cpath->extend_info,
+ &circ->cpath->handshake_state,
+ cc.onionskin);
+ if (len < 0) {
+ log_warn(LD_CIRC,"onion_skin_create (first hop) failed.");
+ return - END_CIRC_REASON_INTERNAL;
+ }
+ cc.handshake_len = len;
+
+ if (circuit_deliver_create_cell(TO_CIRCUIT(circ), &cc, 0) < 0)
return - END_CIRC_REASON_RESOURCELIMIT;
circ->cpath->state = CPATH_STATE_AWAITING_KEYS;
@@ -2251,10 +844,13 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
fast ? "CREATE_FAST" : "CREATE",
node ? node_describe(node) : "<unnamed>");
} else {
+ extend_cell_t ec;
+ int len;
tor_assert(circ->cpath->state == CPATH_STATE_OPEN);
- tor_assert(circ->_base.state == CIRCUIT_STATE_BUILDING);
+ tor_assert(circ->base_.state == CIRCUIT_STATE_BUILDING);
log_debug(LD_CIRC,"starting to send subsequent skin.");
hop = onion_next_hop_in_cpath(circ->cpath);
+ memset(&ec, 0, sizeof(ec));
if (!hop) {
/* done building the circuit. whew. */
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OPEN);
@@ -2262,27 +858,31 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
struct timeval end;
long timediff;
tor_gettimeofday(&end);
- timediff = tv_mdiff(&circ->_base.timestamp_created, &end);
+ timediff = tv_mdiff(&circ->base_.timestamp_began, &end);
/*
* If the circuit build time is much greater than we would have cut
* it off at, we probably had a suspend event along this codepath,
* and we should discard the value.
*/
- if (timediff < 0 || timediff > 2*circ_times.close_ms+1000) {
+ if (timediff < 0 ||
+ timediff > 2*get_circuit_build_close_time_ms()+1000) {
log_notice(LD_CIRC, "Strange value for circuit build time: %ldmsec. "
"Assuming clock jump. Purpose %d (%s)", timediff,
- circ->_base.purpose,
- circuit_purpose_to_string(circ->_base.purpose));
+ circ->base_.purpose,
+ circuit_purpose_to_string(circ->base_.purpose));
} else if (!circuit_build_times_disabled()) {
/* Only count circuit times if the network is live */
- if (circuit_build_times_network_check_live(&circ_times)) {
- circuit_build_times_add_time(&circ_times, (build_time_t)timediff);
- circuit_build_times_set_timeout(&circ_times);
+ if (circuit_build_times_network_check_live(
+ get_circuit_build_times())) {
+ circuit_build_times_add_time(get_circuit_build_times_mutable(),
+ (build_time_t)timediff);
+ circuit_build_times_set_timeout(get_circuit_build_times_mutable());
}
- if (circ->_base.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
- circuit_build_times_network_circ_success(&circ_times);
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
+ circuit_build_times_network_circ_success(
+ get_circuit_build_times_mutable());
}
}
}
@@ -2293,6 +893,10 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_STATUS, 0);
}
+ pathbias_count_build_success(circ);
+ circuit_rep_hist_note_result(circ);
+ circuit_has_opened(circ); /* do other actions as necessary */
+
if (!can_complete_circuit && !circ->build_state->onehop_tunnel) {
const or_options_t *options = get_options();
can_complete_circuit=1;
@@ -2309,13 +913,10 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
}
}
- pathbias_count_success(circ);
- circuit_rep_hist_note_result(circ);
- circuit_has_opened(circ); /* do other actions as necessary */
-
/* We're done with measurement circuits here. Just close them */
- if (circ->_base.purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
+ if (circ->base_.purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
+ }
return 0;
}
@@ -2324,29 +925,50 @@ circuit_send_next_onion_skin(origin_circuit_t *circ)
return - END_CIRC_REASON_INTERNAL;
}
- set_uint32(payload, tor_addr_to_ipv4n(&hop->extend_info->addr));
- set_uint16(payload+4, htons(hop->extend_info->port));
-
- onionskin = payload+2+4;
- memcpy(payload+2+4+ONIONSKIN_CHALLENGE_LEN,
- hop->extend_info->identity_digest, DIGEST_LEN);
- payload_len = 2+4+ONIONSKIN_CHALLENGE_LEN+DIGEST_LEN;
-
- if (onion_skin_create(hop->extend_info->onion_key,
- &(hop->dh_handshake_state), onionskin) < 0) {
+ {
+ const node_t *prev_node;
+ prev_node = node_get_by_id(hop->prev->extend_info->identity_digest);
+ circuit_pick_extend_handshake(&ec.cell_type,
+ &ec.create_cell.cell_type,
+ &ec.create_cell.handshake_type,
+ prev_node,
+ hop->extend_info);
+ }
+
+ tor_addr_copy(&ec.orport_ipv4.addr, &hop->extend_info->addr);
+ ec.orport_ipv4.port = hop->extend_info->port;
+ tor_addr_make_unspec(&ec.orport_ipv6.addr);
+ memcpy(ec.node_id, hop->extend_info->identity_digest, DIGEST_LEN);
+
+ len = onion_skin_create(ec.create_cell.handshake_type,
+ hop->extend_info,
+ &hop->handshake_state,
+ ec.create_cell.onionskin);
+ if (len < 0) {
log_warn(LD_CIRC,"onion_skin_create failed.");
return - END_CIRC_REASON_INTERNAL;
}
+ ec.create_cell.handshake_len = len;
log_info(LD_CIRC,"Sending extend relay cell.");
note_request("cell: extend", 1);
- /* send it to hop->prev, because it will transfer
- * it to a create cell and then send to hop */
- if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
- RELAY_COMMAND_EXTEND,
- payload, payload_len, hop->prev) < 0)
- return 0; /* circuit is closed */
+ {
+ uint8_t command = 0;
+ uint16_t payload_len=0;
+ uint8_t payload[RELAY_PAYLOAD_SIZE];
+ if (extend_cell_format(&command, &payload_len, payload, &ec)<0) {
+ log_warn(LD_CIRC,"Couldn't format extend cell");
+ return -END_CIRC_REASON_INTERNAL;
+ }
+ /* send it to hop->prev, because it will transfer
+ * it to a create cell and then send to hop */
+ if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
+ command,
+ (char*)payload, payload_len,
+ hop->prev) < 0)
+ return 0; /* circuit is closed */
+ }
hop->state = CPATH_STATE_AWAITING_KEYS;
}
return 0;
@@ -2369,7 +991,7 @@ circuit_note_clock_jumped(int seconds_elapsed)
control_event_client_status(severity, "CIRCUIT_NOT_ESTABLISHED REASON=%s",
"CLOCK_JUMPED");
circuit_mark_all_unused_circs();
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
}
/** Take the 'extend' <b>cell</b>, pull out addr/port plus the onion
@@ -2383,19 +1005,15 @@ circuit_note_clock_jumped(int seconds_elapsed)
int
circuit_extend(cell_t *cell, circuit_t *circ)
{
- or_connection_t *n_conn;
+ channel_t *n_chan;
relay_header_t rh;
- char *onionskin;
- char *id_digest=NULL;
- uint32_t n_addr32;
- uint16_t n_port;
- tor_addr_t n_addr;
+ extend_cell_t ec;
const char *msg = NULL;
int should_launch = 0;
- if (circ->n_conn) {
+ if (circ->n_chan) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "n_conn already set. Bug/attack. Closing.");
+ "n_chan already set. Bug/attack. Closing.");
return -1;
}
if (circ->n_hop) {
@@ -2412,27 +1030,21 @@ circuit_extend(cell_t *cell, circuit_t *circ)
relay_header_unpack(&rh, cell->payload);
- if (rh.length < 4+2+ONIONSKIN_CHALLENGE_LEN+DIGEST_LEN) {
+ if (extend_cell_parse(&ec, rh.command,
+ cell->payload+RELAY_HEADER_SIZE,
+ rh.length) < 0) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Wrong length %d on extend cell. Closing circuit.",
- rh.length);
+ "Can't parse extend cell. Closing circuit.");
return -1;
}
- n_addr32 = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE));
- n_port = ntohs(get_uint16(cell->payload+RELAY_HEADER_SIZE+4));
- onionskin = (char*) cell->payload+RELAY_HEADER_SIZE+4+2;
- id_digest = (char*) cell->payload+RELAY_HEADER_SIZE+4+2+
- ONIONSKIN_CHALLENGE_LEN;
- tor_addr_from_ipv4h(&n_addr, n_addr32);
-
- if (!n_port || !n_addr32) {
+ if (!ec.orport_ipv4.port || tor_addr_is_null(&ec.orport_ipv4.addr)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend to zero destination port or addr.");
return -1;
}
- if (tor_addr_is_internal(&n_addr, 0) &&
+ if (tor_addr_is_internal(&ec.orport_ipv4.addr, 0) &&
!get_options()->ExtendAllowPrivateAddresses) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend to a private address");
@@ -2445,7 +1057,7 @@ circuit_extend(cell_t *cell, circuit_t *circ)
* fingerprints -- a) because it opens the user up to a mitm attack,
* and b) because it lets an attacker force the relay to hold open a
* new TLS connection for each extend request. */
- if (tor_digest_is_zero(id_digest)) {
+ if (tor_digest_is_zero((const char*)ec.node_id)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend without specifying an id_digest.");
return -1;
@@ -2454,55 +1066,64 @@ circuit_extend(cell_t *cell, circuit_t *circ)
/* Next, check if we're being asked to connect to the hop that the
* extend cell came from. There isn't any reason for that, and it can
* assist circular-path attacks. */
- if (tor_memeq(id_digest, TO_OR_CIRCUIT(circ)->p_conn->identity_digest,
- DIGEST_LEN)) {
+ if (tor_memeq(ec.node_id,
+ TO_OR_CIRCUIT(circ)->p_chan->identity_digest,
+ DIGEST_LEN)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Client asked me to extend back to the previous hop.");
return -1;
}
- n_conn = connection_or_get_for_extend(id_digest,
- &n_addr,
- &msg,
- &should_launch);
+ n_chan = channel_get_for_extend((const char*)ec.node_id,
+ &ec.orport_ipv4.addr,
+ &msg,
+ &should_launch);
- if (!n_conn) {
- log_debug(LD_CIRC|LD_OR,"Next router (%s:%d): %s",
- fmt_addr(&n_addr), (int)n_port, msg?msg:"????");
+ if (!n_chan) {
+ log_debug(LD_CIRC|LD_OR,"Next router (%s): %s",
+ fmt_addrport(&ec.orport_ipv4.addr,ec.orport_ipv4.port),
+ msg?msg:"????");
- circ->n_hop = extend_info_alloc(NULL /*nickname*/,
- id_digest,
- NULL /*onion_key*/,
- &n_addr, n_port);
+ circ->n_hop = extend_info_new(NULL /*nickname*/,
+ (const char*)ec.node_id,
+ NULL /*onion_key*/,
+ NULL /*curve25519_key*/,
+ &ec.orport_ipv4.addr,
+ ec.orport_ipv4.port);
- circ->n_conn_onionskin = tor_malloc(ONIONSKIN_CHALLENGE_LEN);
- memcpy(circ->n_conn_onionskin, onionskin, ONIONSKIN_CHALLENGE_LEN);
- circuit_set_state(circ, CIRCUIT_STATE_OR_WAIT);
+ circ->n_chan_create_cell = tor_memdup(&ec.create_cell,
+ sizeof(ec.create_cell));
+
+ circuit_set_state(circ, CIRCUIT_STATE_CHAN_WAIT);
if (should_launch) {
/* we should try to open a connection */
- n_conn = connection_or_connect(&n_addr, n_port, id_digest);
- if (!n_conn) {
- log_info(LD_CIRC,"Launching n_conn failed. Closing circuit.");
+ n_chan = channel_connect_for_circuit(&ec.orport_ipv4.addr,
+ ec.orport_ipv4.port,
+ (const char*)ec.node_id);
+ if (!n_chan) {
+ log_info(LD_CIRC,"Launching n_chan failed. Closing circuit.");
circuit_mark_for_close(circ, END_CIRC_REASON_CONNECTFAILED);
return 0;
}
log_debug(LD_CIRC,"connecting in progress (or finished). Good.");
}
/* return success. The onion/circuit/etc will be taken care of
- * automatically (may already have been) whenever n_conn reaches
+ * automatically (may already have been) whenever n_chan reaches
* OR_CONN_STATE_OPEN.
*/
return 0;
}
tor_assert(!circ->n_hop); /* Connection is already established. */
- circ->n_conn = n_conn;
- log_debug(LD_CIRC,"n_conn is %s:%u",
- n_conn->_base.address,n_conn->_base.port);
+ circ->n_chan = n_chan;
+ log_debug(LD_CIRC,
+ "n_chan is %s",
+ channel_get_canonical_remote_descr(n_chan));
- if (circuit_deliver_create_cell(circ, CELL_CREATE, onionskin) < 0)
+ if (circuit_deliver_create_cell(circ, &ec.create_cell, 1) < 0)
return -1;
+
return 0;
}
@@ -2556,350 +1177,9 @@ circuit_init_cpath_crypto(crypt_path_t *cpath, const char *key_data,
return 0;
}
-/** The minimum number of first hop completions before we start
- * thinking about warning about path bias and dropping guards */
-static int
-pathbias_get_min_circs(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_MIN_CIRC 20
- if (options->PathBiasCircThreshold >= 5)
- return options->PathBiasCircThreshold;
- else
- return networkstatus_get_param(NULL, "pb_mincircs",
- DFLT_PATH_BIAS_MIN_CIRC,
- 5, INT32_MAX);
-}
-
-static double
-pathbias_get_notice_rate(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_NOTICE_PCT 40
- if (options->PathBiasNoticeRate >= 0.0)
- return options->PathBiasNoticeRate;
- else
- return networkstatus_get_param(NULL, "pb_noticepct",
- DFLT_PATH_BIAS_NOTICE_PCT, 0, 100)/100.0;
-}
-
-static double
-pathbias_get_disable_rate(const or_options_t *options)
-{
-// XXX: This needs tuning based on use + experimentation before we set it
-#define DFLT_PATH_BIAS_DISABLE_PCT 0
- if (options->PathBiasDisableRate >= 0.0)
- return options->PathBiasDisableRate;
- else
- return networkstatus_get_param(NULL, "pb_disablepct",
- DFLT_PATH_BIAS_DISABLE_PCT, 0, 100)/100.0;
-}
-
-static int
-pathbias_get_scale_threshold(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_SCALE_THRESHOLD 200
- if (options->PathBiasScaleThreshold >= 2)
- return options->PathBiasScaleThreshold;
- else
- return networkstatus_get_param(NULL, "pb_scalecircs",
- DFLT_PATH_BIAS_SCALE_THRESHOLD, 10,
- INT32_MAX);
-}
-
-static int
-pathbias_get_scale_factor(const or_options_t *options)
-{
-#define DFLT_PATH_BIAS_SCALE_FACTOR 4
- if (options->PathBiasScaleFactor >= 1)
- return options->PathBiasScaleFactor;
- else
- return networkstatus_get_param(NULL, "pb_scalefactor",
- DFLT_PATH_BIAS_SCALE_THRESHOLD, 1, INT32_MAX);
-}
-
-static const char *
-pathbias_state_to_string(path_state_t state)
-{
- switch (state) {
- case PATH_STATE_NEW_CIRC:
- return "new";
- case PATH_STATE_DID_FIRST_HOP:
- return "first hop";
- case PATH_STATE_SUCCEEDED:
- return "succeeded";
- }
-
- return "unknown";
-}
-
-/**
- * Check our circuit state to see if this is a successful first hop.
- * If so, record it in the current guard's path bias first_hop count.
- *
- * Also check for several potential error cases for bug #6475.
- */
-static int
-pathbias_count_first_hop(origin_circuit_t *circ)
-{
-#define FIRST_HOP_NOTICE_INTERVAL (600)
- static ratelim_t first_hop_notice_limit =
- RATELIM_INIT(FIRST_HOP_NOTICE_INTERVAL);
- char *rate_msg = NULL;
-
- /* Completely ignore one hop circuits */
- if (circ->build_state->onehop_tunnel ||
- circ->build_state->desired_path_len == 1) {
- /* Check for inconsistency */
- if (circ->build_state->desired_path_len != 1 ||
- !circ->build_state->onehop_tunnel) {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "One-hop circuit has length %d. Path state is %s. "
- "Circuit is a %s currently %s.%s",
- circ->build_state->desired_path_len,
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- tor_fragile_assert();
- }
- return 0;
- }
-
- if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) {
- /* Help track down the real cause of bug #6475: */
- if (circ->has_opened && circ->path_state != PATH_STATE_DID_FIRST_HOP) {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Opened circuit is in strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
-
- /* Don't count cannibalized circs for path bias */
- if (!circ->has_opened) {
- entry_guard_t *guard;
-
- guard = entry_guard_get_by_id_digest(
- circ->_base.n_conn->identity_digest);
- if (guard) {
- if (circ->path_state == PATH_STATE_NEW_CIRC) {
- circ->path_state = PATH_STATE_DID_FIRST_HOP;
-
- if (entry_guard_inc_first_hop_count(guard) < 0) {
- /* Bogus guard; we already warned. */
- return -END_CIRC_REASON_TORPROTOCOL;
- }
- } else {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Unopened circuit has strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- } else {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Unopened circuit has no known guard. "
- "Circuit is a %s currently %s.%s",
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- }
- } else {
- /* Help track down the real cause of bug #6475: */
- if (circ->path_state == PATH_STATE_NEW_CIRC) {
- if ((rate_msg = rate_limit_log(&first_hop_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "A %s circuit is in cpath state %d (opened: %d). "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circ->cpath->state, circ->has_opened,
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- }
-
- return 0;
-}
-
-/**
- * Check our circuit state to see if this is a successful circuit
- * completion. If so, record it in the current guard's path bias
- * success count.
- *
- * Also check for several potential error cases for bug #6475.
- */
-static void
-pathbias_count_success(origin_circuit_t *circ)
-{
-#define SUCCESS_NOTICE_INTERVAL (600)
- static ratelim_t success_notice_limit =
- RATELIM_INIT(SUCCESS_NOTICE_INTERVAL);
- char *rate_msg = NULL;
-
- /* Ignore one hop circuits */
- if (circ->build_state->onehop_tunnel ||
- circ->build_state->desired_path_len == 1) {
- /* Check for consistency */
- if (circ->build_state->desired_path_len != 1 ||
- !circ->build_state->onehop_tunnel) {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "One-hop circuit has length %d. Path state is %s. "
- "Circuit is a %s currently %s.%s",
- circ->build_state->desired_path_len,
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- tor_fragile_assert();
- }
- return;
- }
-
- /* Don't count cannibalized/reused circs for path bias */
- if (!circ->has_opened) {
- entry_guard_t *guard =
- entry_guard_get_by_id_digest(circ->_base.n_conn->identity_digest);
-
- if (guard) {
- if (circ->path_state == PATH_STATE_DID_FIRST_HOP) {
- circ->path_state = PATH_STATE_SUCCEEDED;
- guard->circuit_successes++;
-
- log_info(LD_PROTOCOL, "Got success count %u/%u for guard %s=%s",
- guard->circuit_successes, guard->first_hops,
- guard->nickname, hex_str(guard->identity, DIGEST_LEN));
- } else {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Succeeded circuit is in strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
-
- if (guard->first_hops < guard->circuit_successes) {
- log_info(LD_BUG, "Unexpectedly high circuit_successes (%u/%u) "
- "for guard %s=%s",
- guard->circuit_successes, guard->first_hops,
- guard->nickname, hex_str(guard->identity, DIGEST_LEN));
- }
- } else {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Completed circuit has no known guard. "
- "Circuit is a %s currently %s.%s",
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- } else {
- if (circ->path_state != PATH_STATE_SUCCEEDED) {
- if ((rate_msg = rate_limit_log(&success_notice_limit,
- approx_time()))) {
- log_info(LD_BUG,
- "Opened circuit is in strange path state %s. "
- "Circuit is a %s currently %s.%s",
- pathbias_state_to_string(circ->path_state),
- circuit_purpose_to_string(circ->_base.purpose),
- circuit_state_to_string(circ->_base.state),
- rate_msg);
- tor_free(rate_msg);
- }
- }
- }
-}
-
-/** Increment the number of times we successfully extended a circuit to
- * 'guard', first checking if the failure rate is high enough that we should
- * eliminate the guard. Return -1 if the guard looks no good; return 0 if the
- * guard looks fine. */
-static int
-entry_guard_inc_first_hop_count(entry_guard_t *guard)
-{
- const or_options_t *options = get_options();
-
- entry_guards_changed();
-
- if (guard->first_hops > (unsigned)pathbias_get_min_circs(options)) {
- /* Note: We rely on the < comparison here to allow us to set a 0
- * rate and disable the feature entirely. If refactoring, don't
- * change to <= */
- if (guard->circuit_successes/((double)guard->first_hops)
- < pathbias_get_disable_rate(options)) {
-
- log_info(LD_PROTOCOL,
- "Extremely low circuit success rate %u/%u for guard %s=%s. "
- "This might indicate an attack, or a bug.",
- guard->circuit_successes, guard->first_hops, guard->nickname,
- hex_str(guard->identity, DIGEST_LEN));
-
- guard->path_bias_disabled = 1;
- guard->bad_since = approx_time();
- return -1;
- } else if (guard->circuit_successes/((double)guard->first_hops)
- < pathbias_get_notice_rate(options)
- && !guard->path_bias_notice) {
- guard->path_bias_notice = 1;
- log_info(LD_PROTOCOL,
- "Low circuit success rate %u/%u for guard %s=%s.",
- guard->circuit_successes, guard->first_hops, guard->nickname,
- hex_str(guard->identity, DIGEST_LEN));
- }
- }
-
- /* If we get a ton of circuits, just scale everything down */
- if (guard->first_hops > (unsigned)pathbias_get_scale_threshold(options)) {
- const int scale_factor = pathbias_get_scale_factor(options);
- guard->first_hops /= scale_factor;
- guard->circuit_successes /= scale_factor;
- }
- guard->first_hops++;
- log_info(LD_PROTOCOL, "Got success count %u/%u for guard %s=%s",
- guard->circuit_successes, guard->first_hops, guard->nickname,
- hex_str(guard->identity, DIGEST_LEN));
- return 0;
-}
-
-/** A created or extended cell came back to us on the circuit, and it included
- * <b>reply</b> as its body. (If <b>reply_type</b> is CELL_CREATED, the body
- * contains (the second DH key, plus KH). If <b>reply_type</b> is
- * CELL_CREATED_FAST, the body contains a secret y and a hash H(x|y).)
+/** A "created" cell <b>reply</b> came back to us on circuit <b>circ</b>.
+ * (The body of <b>reply</b> varies depending on what sort of handshake
+ * this is.)
*
* Calculate the appropriate keys and digests, make sure KH is
* correct, and initialize this hop of the cpath.
@@ -2907,14 +1187,14 @@ entry_guard_inc_first_hop_count(entry_guard_t *guard)
* Return - reason if we want to mark circ for close, else return 0.
*/
int
-circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
- const uint8_t *reply)
+circuit_finish_handshake(origin_circuit_t *circ,
+ const created_cell_t *reply)
{
char keys[CPATH_KEY_MATERIAL_LEN];
crypt_path_t *hop;
int rv;
- if ((rv = pathbias_count_first_hop(circ)) < 0)
+ if ((rv = pathbias_count_build_attempt(circ)) < 0)
return rv;
if (circ->cpath->state == CPATH_STATE_AWAITING_KEYS) {
@@ -2928,39 +1208,25 @@ circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
}
tor_assert(hop->state == CPATH_STATE_AWAITING_KEYS);
- if (reply_type == CELL_CREATED && hop->dh_handshake_state) {
- if (onion_skin_client_handshake(hop->dh_handshake_state, (char*)reply,keys,
- DIGEST_LEN*2+CIPHER_KEY_LEN*2) < 0) {
+ {
+ if (onion_skin_client_handshake(hop->handshake_state.tag,
+ &hop->handshake_state,
+ reply->reply, reply->handshake_len,
+ (uint8_t*)keys, sizeof(keys),
+ (uint8_t*)hop->rend_circ_nonce) < 0) {
log_warn(LD_CIRC,"onion_skin_client_handshake failed.");
return -END_CIRC_REASON_TORPROTOCOL;
}
- /* Remember hash of g^xy */
- memcpy(hop->handshake_digest, reply+DH_KEY_LEN, DIGEST_LEN);
- } else if (reply_type == CELL_CREATED_FAST && !hop->dh_handshake_state) {
- if (fast_client_handshake(hop->fast_handshake_state, reply,
- (uint8_t*)keys,
- DIGEST_LEN*2+CIPHER_KEY_LEN*2) < 0) {
- log_warn(LD_CIRC,"fast_client_handshake failed.");
- return -END_CIRC_REASON_TORPROTOCOL;
- }
- memcpy(hop->handshake_digest, reply+DIGEST_LEN, DIGEST_LEN);
- } else {
- log_warn(LD_PROTOCOL,"CREATED cell type did not match CREATE cell type.");
- return -END_CIRC_REASON_TORPROTOCOL;
}
- crypto_dh_free(hop->dh_handshake_state); /* don't need it anymore */
- hop->dh_handshake_state = NULL;
-
- memset(hop->fast_handshake_state, 0, sizeof(hop->fast_handshake_state));
+ onion_handshake_state_release(&hop->handshake_state);
if (circuit_init_cpath_crypto(hop, keys, 0)<0) {
return -END_CIRC_REASON_TORPROTOCOL;
}
hop->state = CPATH_STATE_OPEN;
- log_info(LD_CIRC,"Finished building %scircuit hop:",
- (reply_type == CELL_CREATED_FAST) ? "fast " : "");
+ log_info(LD_CIRC,"Finished building circuit hop:");
circuit_log_path(LOG_INFO,LD_CIRC,circ);
control_event_circuit_status(circ, CIRC_EVENT_EXTENDED, 0);
@@ -2969,12 +1235,12 @@ circuit_finish_handshake(origin_circuit_t *circ, uint8_t reply_type,
/** We received a relay truncated cell on circ.
*
- * Since we don't ask for truncates currently, getting a truncated
+ * Since we don't send truncates currently, getting a truncated
* means that a connection broke or an extend failed. For now,
- * just give up: for circ to close, and return 0.
+ * just give up: force circ to close, and return 0.
*/
int
-circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer)
+circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer, int reason)
{
// crypt_path_t *victim;
// connection_t *stream;
@@ -2982,12 +1248,12 @@ circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer)
tor_assert(circ);
tor_assert(layer);
- /* XXX Since we don't ask for truncates currently, getting a truncated
+ /* XXX Since we don't send truncates currently, getting a truncated
* means that a connection broke or an extend failed. For now,
* just give up.
*/
circuit_mark_for_close(TO_CIRCUIT(circ),
- END_CIRC_REASON_FLAG_REMOTE|END_CIRC_REASON_OR_CONN_CLOSED);
+ END_CIRC_REASON_FLAG_REMOTE|reason);
return 0;
#if 0
@@ -3020,24 +1286,26 @@ circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer)
* cell back.
*/
int
-onionskin_answer(or_circuit_t *circ, uint8_t cell_type, const char *payload,
- const char *keys)
+onionskin_answer(or_circuit_t *circ,
+ const created_cell_t *created_cell,
+ const char *keys,
+ const uint8_t *rend_circ_nonce)
{
cell_t cell;
crypt_path_t *tmp_cpath;
+ if (created_cell_format(&cell, created_cell) < 0) {
+ log_warn(LD_BUG,"couldn't format created cell (type=%d, len=%d)",
+ (int)created_cell->cell_type, (int)created_cell->handshake_len);
+ return -1;
+ }
+ cell.circ_id = circ->p_circ_id;
+
tmp_cpath = tor_malloc_zero(sizeof(crypt_path_t));
tmp_cpath->magic = CRYPT_PATH_MAGIC;
- memset(&cell, 0, sizeof(cell_t));
- cell.command = cell_type;
- cell.circ_id = circ->p_circ_id;
-
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_OPEN);
- memcpy(cell.payload, payload,
- cell_type == CELL_CREATED ? ONIONSKIN_REPLY_LEN : DIGEST_LEN*2);
-
log_debug(LD_CIRC,"init digest forward 0x%.8x, backward 0x%.8x.",
(unsigned int)get_uint32(keys),
(unsigned int)get_uint32(keys+20));
@@ -3053,20 +1321,17 @@ onionskin_answer(or_circuit_t *circ, uint8_t cell_type, const char *payload,
tmp_cpath->magic = 0;
tor_free(tmp_cpath);
- if (cell_type == CELL_CREATED)
- memcpy(circ->handshake_digest, cell.payload+DH_KEY_LEN, DIGEST_LEN);
- else
- memcpy(circ->handshake_digest, cell.payload+DIGEST_LEN, DIGEST_LEN);
+ memcpy(circ->rend_circ_nonce, rend_circ_nonce, DIGEST_LEN);
- circ->is_first_hop = (cell_type == CELL_CREATED_FAST);
+ circ->is_first_hop = (created_cell->cell_type == CELL_CREATED_FAST);
append_cell_to_circuit_queue(TO_CIRCUIT(circ),
- circ->p_conn, &cell, CELL_DIRECTION_IN, 0);
+ circ->p_chan, &cell, CELL_DIRECTION_IN, 0);
log_debug(LD_CIRC,"Finished sending '%s' cell.",
circ->is_first_hop ? "created_fast" : "created");
- if (!is_local_addr(&circ->p_conn->_base.addr) &&
- !connection_or_nonopen_was_started_here(circ->p_conn)) {
+ if (!channel_is_local(circ->p_chan) &&
+ !channel_is_outgoing(circ->p_chan)) {
/* record that we could process create cells from a non-local conn
* that we didn't initiate; presumably this means that create cells
* can reach us too. */
@@ -3076,15 +1341,14 @@ onionskin_answer(or_circuit_t *circ, uint8_t cell_type, const char *payload,
return 0;
}
-/** Choose a length for a circuit of purpose <b>purpose</b>.
- * Default length is 3 + the number of endpoints that would give something
- * away. If the routerlist <b>routers</b> doesn't have enough routers
- * to handle the desired path length, return as large a path length as
- * is feasible, except if it's less than 2, in which case return -1.
+/** Choose a length for a circuit of purpose <b>purpose</b>: three + the
+ * number of endpoints that would give something away about our destination.
+ *
+ * If the routerlist <b>nodes</b> doesn't have enough routers
+ * to handle the desired path length, return -1.
*/
static int
-new_route_len(uint8_t purpose, extend_info_t *exit,
- smartlist_t *nodes)
+new_route_len(uint8_t purpose, extend_info_t *exit, smartlist_t *nodes)
{
int num_acceptable_routers;
int routelen;
@@ -3102,19 +1366,13 @@ new_route_len(uint8_t purpose, extend_info_t *exit,
log_debug(LD_CIRC,"Chosen route length %d (%d/%d routers suitable).",
routelen, num_acceptable_routers, smartlist_len(nodes));
- if (num_acceptable_routers < 2) {
+ if (num_acceptable_routers < routelen) {
log_info(LD_CIRC,
- "Not enough acceptable routers (%d). Discarding this circuit.",
- num_acceptable_routers);
+ "Not enough acceptable routers (%d/%d). Discarding this circuit.",
+ num_acceptable_routers, routelen);
return -1;
}
- if (num_acceptable_routers < routelen) {
- log_info(LD_CIRC,"Not enough routers: cutting routelen from %d to %d.",
- routelen, num_acceptable_routers);
- routelen = num_acceptable_routers;
- }
-
return routelen;
}
@@ -3149,7 +1407,7 @@ circuit_all_predicted_ports_handled(time_t now, int *need_uptime,
enough = (smartlist_len(sl) == 0);
for (i = 0; i < smartlist_len(sl); ++i) {
port = smartlist_get(sl, i);
- if (smartlist_string_num_isin(LongLivedServices, *port))
+ if (smartlist_contains_int_as_string(LongLivedServices, *port))
*need_uptime = 1;
tor_free(port);
}
@@ -3268,7 +1526,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
n_supported[i] = -1;
continue;
}
- if (routerset_contains_node(options->_ExcludeExitNodesUnion, node)) {
+ if (routerset_contains_node(options->ExcludeExitNodesUnion_, node)) {
n_supported[i] = -1;
continue; /* user asked us not to use it, no matter what */
}
@@ -3285,7 +1543,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
* we'll retry later in this function with need_update and
* need_capacity set to 0. */
}
- if (!(node->is_valid || options->_AllowInvalid & ALLOW_INVALID_EXIT)) {
+ if (!(node->is_valid || options->AllowInvalid_ & ALLOW_INVALID_EXIT)) {
/* if it's invalid and we don't want it */
n_supported[i] = -1;
// log_fn(LOG_DEBUG,"Skipping node %s (index %d) -- invalid router.",
@@ -3371,7 +1629,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
}
log_notice(LD_CIRC, "All routers are down or won't exit%s -- "
"choosing a doomed exit at random.",
- options->_ExcludeExitNodesUnion ? " or are Excluded" : "");
+ options->ExcludeExitNodesUnion_ ? " or are Excluded" : "");
}
supporting = smartlist_new();
needed_ports = circuit_get_unhandled_ports(time(NULL));
@@ -3410,7 +1668,7 @@ choose_good_exit_server_general(int need_uptime, int need_capacity)
log_warn(LD_CIRC,
"No specified %sexit routers seem to be running: "
"can't choose an exit.",
- options->_ExcludeExitNodesUnion ? "non-excluded " : "");
+ options->ExcludeExitNodesUnion_ ? "non-excluded " : "");
}
return NULL;
}
@@ -3438,14 +1696,14 @@ choose_good_exit_server(uint8_t purpose,
switch (purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
- if (options->_AllowInvalid & ALLOW_INVALID_MIDDLE)
+ if (options->AllowInvalid_ & ALLOW_INVALID_MIDDLE)
flags |= CRN_ALLOW_INVALID;
if (is_internal) /* pick it like a middle hop */
return router_choose_random_node(NULL, options->ExcludeNodes, flags);
else
return choose_good_exit_server_general(need_uptime,need_capacity);
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
- if (options->_AllowInvalid & ALLOW_INVALID_RENDEZVOUS)
+ if (options->AllowInvalid_ & ALLOW_INVALID_RENDEZVOUS)
flags |= CRN_ALLOW_INVALID;
return router_choose_random_node(NULL, options->ExcludeNodes, flags);
}
@@ -3462,7 +1720,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
const or_options_t *options = get_options();
routerset_t *rs = options->ExcludeNodes;
const char *description;
- uint8_t purpose = circ->_base.purpose;
+ uint8_t purpose = circ->base_.purpose;
if (circ->build_state->onehop_tunnel)
return;
@@ -3482,7 +1740,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
if (circ->build_state->is_internal)
return;
description = "requested exit node";
- rs = options->_ExcludeExitNodesUnion;
+ rs = options->ExcludeExitNodesUnion_;
break;
case CIRCUIT_PURPOSE_C_INTRODUCING:
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
@@ -3499,7 +1757,7 @@ warn_if_last_router_excluded(origin_circuit_t *circ, const extend_info_t *exit)
description = "chosen rendezvous point";
break;
case CIRCUIT_PURPOSE_CONTROLLER:
- rs = options->_ExcludeExitNodesUnion;
+ rs = options->ExcludeExitNodesUnion_;
description = "controller-selected circuit target";
break;
}
@@ -3541,7 +1799,7 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit)
log_debug(LD_CIRC, "Launching a one-hop circuit for dir tunnel.");
state->desired_path_len = 1;
} else {
- int r = new_route_len(circ->_base.purpose, exit, nodelist_get_list());
+ int r = new_route_len(circ->base_.purpose, exit, nodelist_get_list());
if (r < 1) /* must be at least 1 */
return -1;
state->desired_path_len = r;
@@ -3554,7 +1812,7 @@ onion_pick_cpath_exit(origin_circuit_t *circ, extend_info_t *exit)
exit = extend_info_dup(exit);
} else { /* we have to decide one */
const node_t *node =
- choose_good_exit_server(circ->_base.purpose, state->need_uptime,
+ choose_good_exit_server(circ->base_.purpose, state->need_uptime,
state->need_capacity, state->is_internal);
if (!node) {
log_warn(LD_CIRC,"failed to choose an exit server");
@@ -3597,6 +1855,9 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit)
{
int err_reason = 0;
warn_if_last_router_excluded(circ, exit);
+
+ tor_gettimeofday(&circ->base_.timestamp_began);
+
circuit_append_new_exit(circ, exit);
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING);
if ((err_reason = circuit_send_next_onion_skin(circ))<0) {
@@ -3605,6 +1866,9 @@ circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *exit)
circuit_mark_for_close(TO_CIRCUIT(circ), -err_reason);
return -1;
}
+
+ // XXX: Should cannibalized circuits be dirty or not? Not easy to say..
+
return 0;
}
@@ -3675,8 +1939,8 @@ choose_good_middle_server(uint8_t purpose,
smartlist_t *excluded;
const or_options_t *options = get_options();
router_crn_flags_t flags = CRN_NEED_DESC;
- tor_assert(_CIRCUIT_PURPOSE_MIN <= purpose &&
- purpose <= _CIRCUIT_PURPOSE_MAX);
+ tor_assert(CIRCUIT_PURPOSE_MIN_ <= purpose &&
+ purpose <= CIRCUIT_PURPOSE_MAX_);
log_debug(LD_CIRC, "Contemplating intermediate hop: random choice.");
excluded = smartlist_new();
@@ -3693,7 +1957,7 @@ choose_good_middle_server(uint8_t purpose,
flags |= CRN_NEED_UPTIME;
if (state->need_capacity)
flags |= CRN_NEED_CAPACITY;
- if (options->_AllowInvalid & ALLOW_INVALID_MIDDLE)
+ if (options->AllowInvalid_ & ALLOW_INVALID_MIDDLE)
flags |= CRN_ALLOW_INVALID;
choice = router_choose_random_node(excluded, options->ExcludeNodes, flags);
smartlist_free(excluded);
@@ -3708,7 +1972,8 @@ choose_good_middle_server(uint8_t purpose,
* If <b>state</b> is NULL, we're choosing a router to serve as an entry
* guard, not for any particular circuit.
*/
-static const node_t *
+/* XXXX024 I'd like to have this be static again, but entrynodes.c needs it. */
+const node_t *
choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
{
const node_t *choice;
@@ -3740,8 +2005,9 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
});
}
/* and exclude current entry guards and their families, if applicable */
- if (options->UseEntryGuards && entry_guards) {
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
+ /*XXXX025 use the using_as_guard flag to accomplish this.*/
+ if (options->UseEntryGuards) {
+ SMARTLIST_FOREACH(get_entry_guards(), const entry_guard_t *, entry,
{
if ((node = node_get_by_id(entry->identity))) {
nodelist_add_node_and_family(excluded, node);
@@ -3755,7 +2021,7 @@ choose_good_entry_server(uint8_t purpose, cpath_build_state_t *state)
if (state->need_capacity)
flags |= CRN_NEED_CAPACITY;
}
- if (options->_AllowInvalid & ALLOW_INVALID_ENTRY)
+ if (options->AllowInvalid_ & ALLOW_INVALID_ENTRY)
flags |= CRN_ALLOW_INVALID;
choice = router_choose_random_node(excluded, options->ExcludeNodes, flags);
@@ -3779,11 +2045,14 @@ onion_next_hop_in_cpath(crypt_path_t *cpath)
/** Choose a suitable next hop in the cpath <b>head_ptr</b>,
* based on <b>state</b>. Append the hop info to head_ptr.
+ *
+ * Return 1 if the path is complete, 0 if we successfully added a hop,
+ * and -1 on error.
*/
static int
onion_extend_cpath(origin_circuit_t *circ)
{
- uint8_t purpose = circ->_base.purpose;
+ uint8_t purpose = circ->base_.purpose;
cpath_build_state_t *state = circ->build_state;
int cur_len = circuit_get_cpath_len(circ);
extend_info_t *info = NULL;
@@ -3802,12 +2071,10 @@ onion_extend_cpath(origin_circuit_t *circ)
} else if (cur_len == 0) { /* picking first node */
const node_t *r = choose_good_entry_server(purpose, state);
if (r) {
- /* If we're extending to a bridge, use the preferred address
- rather than the primary, for potentially extending to an IPv6
- bridge. */
- int use_pref_addr = (r->ri != NULL &&
- r->ri->purpose == ROUTER_PURPOSE_BRIDGE);
- info = extend_info_from_node(r, use_pref_addr);
+ /* If we're a client, use the preferred address rather than the
+ primary address, for potentially connecting to an IPv6 OR
+ port. */
+ info = extend_info_from_node(r, server_mode(get_options()) == 0);
tor_assert(info);
}
} else {
@@ -3858,9 +2125,10 @@ onion_append_hop(crypt_path_t **head_ptr, extend_info_t *choice)
/** Allocate a new extend_info object based on the various arguments. */
extend_info_t *
-extend_info_alloc(const char *nickname, const char *digest,
- crypto_pk_t *onion_key,
- const tor_addr_t *addr, uint16_t port)
+extend_info_new(const char *nickname, const char *digest,
+ crypto_pk_t *onion_key,
+ const curve25519_public_key_t *curve25519_key,
+ const tor_addr_t *addr, uint16_t port)
{
extend_info_t *info = tor_malloc_zero(sizeof(extend_info_t));
memcpy(info->identity_digest, digest, DIGEST_LEN);
@@ -3868,52 +2136,59 @@ extend_info_alloc(const char *nickname, const char *digest,
strlcpy(info->nickname, nickname, sizeof(info->nickname));
if (onion_key)
info->onion_key = crypto_pk_dup_key(onion_key);
+#ifdef CURVE25519_ENABLED
+ if (curve25519_key)
+ memcpy(&info->curve25519_onion_key, curve25519_key,
+ sizeof(curve25519_public_key_t));
+#else
+ (void)curve25519_key;
+#endif
tor_addr_copy(&info->addr, addr);
info->port = port;
return info;
}
-/** Allocate and return a new extend_info_t that can be used to build
- * a circuit to or through the router <b>r</b>. Use the primary
- * address of the router unless <b>for_direct_connect</b> is true, in
- * which case the preferred address is used instead. */
+/** Allocate and return a new extend_info that can be used to build a
+ * circuit to or through the node <b>node</b>. Use the primary address
+ * of the node (i.e. its IPv4 address) unless
+ * <b>for_direct_connect</b> is true, in which case the preferred
+ * address is used instead. May return NULL if there is not enough
+ * info about <b>node</b> to extend to it--for example, if there is no
+ * routerinfo_t or microdesc_t.
+ **/
extend_info_t *
-extend_info_from_router(const routerinfo_t *r, int for_direct_connect)
+extend_info_from_node(const node_t *node, int for_direct_connect)
{
tor_addr_port_t ap;
- tor_assert(r);
+
+ if (node->ri == NULL && (node->rs == NULL || node->md == NULL))
+ return NULL;
if (for_direct_connect)
- router_get_pref_orport(r, &ap);
+ node_get_pref_orport(node, &ap);
else
- router_get_prim_orport(r, &ap);
- return extend_info_alloc(r->nickname, r->cache_info.identity_digest,
- r->onion_pkey, &ap.addr, ap.port);
-}
+ node_get_prim_orport(node, &ap);
-/** Allocate and return a new extend_info that can be used to build a
- * circuit to or through the node <b>node</b>. Use the primary address
- * of the node unless <b>for_direct_connect</b> is true, in which case
- * the preferred address is used instead. May return NULL if there is
- * not enough info about <b>node</b> to extend to it--for example, if
- * there is no routerinfo_t or microdesc_t.
- **/
-extend_info_t *
-extend_info_from_node(const node_t *node, int for_direct_connect)
-{
- if (node->ri) {
- return extend_info_from_router(node->ri, for_direct_connect);
- } else if (node->rs && node->md) {
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, node->rs->addr);
- return extend_info_alloc(node->rs->nickname,
+ log_debug(LD_CIRC, "using %s for %s",
+ fmt_addrport(&ap.addr, ap.port),
+ node->ri ? node->ri->nickname : node->rs->nickname);
+
+ if (node->ri)
+ return extend_info_new(node->ri->nickname,
+ node->identity,
+ node->ri->onion_pkey,
+ node->ri->onion_curve25519_pkey,
+ &ap.addr,
+ ap.port);
+ else if (node->rs && node->md)
+ return extend_info_new(node->rs->nickname,
node->identity,
node->md->onion_pkey,
- &addr,
- node->rs->or_port);
- } else {
+ node->md->onion_curve25519_pkey,
+ &ap.addr,
+ ap.port);
+ else
return NULL;
- }
}
/** Release storage held by an extend_info_t struct. */
@@ -3966,2067 +2241,3 @@ build_state_get_exit_nickname(cpath_build_state_t *state)
return state->chosen_exit->nickname;
}
-/** Check whether the entry guard <b>e</b> is usable, given the directory
- * authorities' opinion about the router (stored in <b>ri</b>) and the user's
- * configuration (in <b>options</b>). Set <b>e</b>-&gt;bad_since
- * accordingly. Return true iff the entry guard's status changes.
- *
- * If it's not usable, set *<b>reason</b> to a static string explaining why.
- */
-static int
-entry_guard_set_status(entry_guard_t *e, const node_t *node,
- time_t now, const or_options_t *options,
- const char **reason)
-{
- char buf[HEX_DIGEST_LEN+1];
- int changed = 0;
-
- *reason = NULL;
-
- /* Do we want to mark this guard as bad? */
- if (!node)
- *reason = "unlisted";
- else if (!node->is_running)
- *reason = "down";
- else if (options->UseBridges && (!node->ri ||
- node->ri->purpose != ROUTER_PURPOSE_BRIDGE))
- *reason = "not a bridge";
- else if (options->UseBridges && !node_is_a_configured_bridge(node))
- *reason = "not a configured bridge";
- else if (!options->UseBridges && !node->is_possible_guard &&
- !routerset_contains_node(options->EntryNodes,node))
- *reason = "not recommended as a guard";
- else if (routerset_contains_node(options->ExcludeNodes, node))
- *reason = "excluded";
- else if (e->path_bias_disabled)
- *reason = "path-biased";
-
- if (*reason && ! e->bad_since) {
- /* Router is newly bad. */
- base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
- log_info(LD_CIRC, "Entry guard %s (%s) is %s: marking as unusable.",
- e->nickname, buf, *reason);
-
- e->bad_since = now;
- control_event_guard(e->nickname, e->identity, "BAD");
- changed = 1;
- } else if (!*reason && e->bad_since) {
- /* There's nothing wrong with the router any more. */
- base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
- log_info(LD_CIRC, "Entry guard %s (%s) is no longer unusable: "
- "marking as ok.", e->nickname, buf);
-
- e->bad_since = 0;
- control_event_guard(e->nickname, e->identity, "GOOD");
- changed = 1;
- }
- return changed;
-}
-
-/** Return true iff enough time has passed since we last tried to connect
- * to the unreachable guard <b>e</b> that we're willing to try again. */
-static int
-entry_is_time_to_retry(entry_guard_t *e, time_t now)
-{
- long diff;
- if (e->last_attempted < e->unreachable_since)
- return 1;
- diff = now - e->unreachable_since;
- if (diff < 6*60*60)
- return now > (e->last_attempted + 60*60);
- else if (diff < 3*24*60*60)
- return now > (e->last_attempted + 4*60*60);
- else if (diff < 7*24*60*60)
- return now > (e->last_attempted + 18*60*60);
- else
- return now > (e->last_attempted + 36*60*60);
-}
-
-/** Return the node corresponding to <b>e</b>, if <b>e</b> is
- * working well enough that we are willing to use it as an entry
- * right now. (Else return NULL.) In particular, it must be
- * - Listed as either up or never yet contacted;
- * - Present in the routerlist;
- * - Listed as 'stable' or 'fast' by the current dirserver consensus,
- * if demanded by <b>need_uptime</b> or <b>need_capacity</b>
- * (unless it's a configured EntryNode);
- * - Allowed by our current ReachableORAddresses config option; and
- * - Currently thought to be reachable by us (unless <b>assume_reachable</b>
- * is true).
- *
- * If the answer is no, set *<b>msg</b> to an explanation of why.
- */
-static INLINE const node_t *
-entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity,
- int assume_reachable, const char **msg)
-{
- const node_t *node;
- const or_options_t *options = get_options();
- tor_assert(msg);
-
- if (e->path_bias_disabled) {
- *msg = "path-biased";
- return NULL;
- }
- if (e->bad_since) {
- *msg = "bad";
- return NULL;
- }
- /* no good if it's unreachable, unless assume_unreachable or can_retry. */
- if (!assume_reachable && !e->can_retry &&
- e->unreachable_since && !entry_is_time_to_retry(e, time(NULL))) {
- *msg = "unreachable";
- return NULL;
- }
- node = node_get_by_id(e->identity);
- if (!node || !node_has_descriptor(node)) {
- *msg = "no descriptor";
- return NULL;
- }
- if (get_options()->UseBridges) {
- if (node_get_purpose(node) != ROUTER_PURPOSE_BRIDGE) {
- *msg = "not a bridge";
- return NULL;
- }
- if (!node_is_a_configured_bridge(node)) {
- *msg = "not a configured bridge";
- return NULL;
- }
- } else { /* !get_options()->UseBridges */
- if (node_get_purpose(node) != ROUTER_PURPOSE_GENERAL) {
- *msg = "not general-purpose";
- return NULL;
- }
- }
- if (routerset_contains_node(options->EntryNodes, node)) {
- /* they asked for it, they get it */
- need_uptime = need_capacity = 0;
- }
- if (node_is_unreliable(node, need_uptime, need_capacity, 0)) {
- *msg = "not fast/stable";
- return NULL;
- }
- if (!fascist_firewall_allows_node(node)) {
- *msg = "unreachable by config";
- return NULL;
- }
- return node;
-}
-
-/** Return the number of entry guards that we think are usable. */
-static int
-num_live_entry_guards(void)
-{
- int n = 0;
- const char *msg;
- if (! entry_guards)
- return 0;
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
- {
- if (entry_is_live(entry, 0, 1, 0, &msg))
- ++n;
- });
- return n;
-}
-
-/** If <b>digest</b> matches the identity of any node in the
- * entry_guards list, return that node. Else return NULL. */
-static entry_guard_t *
-entry_guard_get_by_id_digest(const char *digest)
-{
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
- if (tor_memeq(digest, entry->identity, DIGEST_LEN))
- return entry;
- );
- return NULL;
-}
-
-/** Dump a description of our list of entry guards to the log at level
- * <b>severity</b>. */
-static void
-log_entry_guards(int severity)
-{
- smartlist_t *elements = smartlist_new();
- char *s;
-
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e)
- {
- const char *msg = NULL;
- if (entry_is_live(e, 0, 1, 0, &msg))
- smartlist_add_asprintf(elements, "%s [%s] (up %s)",
- e->nickname,
- hex_str(e->identity, DIGEST_LEN),
- e->made_contact ? "made-contact" : "never-contacted");
- else
- smartlist_add_asprintf(elements, "%s [%s] (%s, %s)",
- e->nickname,
- hex_str(e->identity, DIGEST_LEN),
- msg,
- e->made_contact ? "made-contact" : "never-contacted");
- }
- SMARTLIST_FOREACH_END(e);
-
- s = smartlist_join_strings(elements, ",", 0, NULL);
- SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp));
- smartlist_free(elements);
- log_fn(severity,LD_CIRC,"%s",s);
- tor_free(s);
-}
-
-/** Called when one or more guards that we would previously have used for some
- * purpose are no longer in use because a higher-priority guard has become
- * usable again. */
-static void
-control_event_guard_deferred(void)
-{
- /* XXXX We don't actually have a good way to figure out _how many_ entries
- * are live for some purpose. We need an entry_is_even_slightly_live()
- * function for this to work right. NumEntryGuards isn't reliable: if we
- * need guards with weird properties, we can have more than that number
- * live.
- **/
-#if 0
- int n = 0;
- const char *msg;
- const or_options_t *options = get_options();
- if (!entry_guards)
- return;
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
- {
- if (entry_is_live(entry, 0, 1, 0, &msg)) {
- if (n++ == options->NumEntryGuards) {
- control_event_guard(entry->nickname, entry->identity, "DEFERRED");
- return;
- }
- }
- });
-#endif
-}
-
-/** Add a new (preferably stable and fast) router to our
- * entry_guards list. Return a pointer to the router if we succeed,
- * or NULL if we can't find any more suitable entries.
- *
- * If <b>chosen</b> is defined, use that one, and if it's not
- * already in our entry_guards list, put it at the *beginning*.
- * Else, put the one we pick at the end of the list. */
-static const node_t *
-add_an_entry_guard(const node_t *chosen, int reset_status, int prepend)
-{
- const node_t *node;
- entry_guard_t *entry;
-
- if (chosen) {
- node = chosen;
- entry = entry_guard_get_by_id_digest(node->identity);
- if (entry) {
- if (reset_status) {
- entry->bad_since = 0;
- entry->can_retry = 1;
- }
- return NULL;
- }
- } else {
- node = choose_good_entry_server(CIRCUIT_PURPOSE_C_GENERAL, NULL);
- if (!node)
- return NULL;
- }
- entry = tor_malloc_zero(sizeof(entry_guard_t));
- log_info(LD_CIRC, "Chose %s as new entry guard.",
- node_describe(node));
- strlcpy(entry->nickname, node_get_nickname(node), sizeof(entry->nickname));
- memcpy(entry->identity, node->identity, DIGEST_LEN);
- /* Choose expiry time smudged over the past month. The goal here
- * is to a) spread out when Tor clients rotate their guards, so they
- * don't all select them on the same day, and b) avoid leaving a
- * precise timestamp in the state file about when we first picked
- * this guard. For details, see the Jan 2010 or-dev thread. */
- entry->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
- entry->chosen_by_version = tor_strdup(VERSION);
- if (prepend)
- smartlist_insert(entry_guards, 0, entry);
- else
- smartlist_add(entry_guards, entry);
- control_event_guard(entry->nickname, entry->identity, "NEW");
- control_event_guard_deferred();
- log_entry_guards(LOG_INFO);
- return node;
-}
-
-/** 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 changed = 0;
-
- tor_assert(entry_guards);
-
- while (num_live_entry_guards() < options->NumEntryGuards) {
- if (!add_an_entry_guard(NULL, 0, 0))
- break;
- changed = 1;
- }
- if (changed)
- entry_guards_changed();
-}
-
-/** How long (in seconds) do we allow an entry guard to be nonfunctional,
- * unlisted, excluded, or otherwise nonusable before we give up on it? */
-#define ENTRY_GUARD_REMOVE_AFTER (30*24*60*60)
-
-/** Release all storage held by <b>e</b>. */
-static void
-entry_guard_free(entry_guard_t *e)
-{
- if (!e)
- return;
- tor_free(e->chosen_by_version);
- tor_free(e);
-}
-
-/** Remove any entry guard which was selected by an unknown version of Tor,
- * or which was selected by a version of Tor that's known to select
- * entry guards badly, or which was selected more 2 months ago. */
-/* XXXX The "obsolete guards" and "chosen long ago guards" things should
- * probably be different functions. */
-static int
-remove_obsolete_entry_guards(time_t now)
-{
- int changed = 0, i;
-
- for (i = 0; i < smartlist_len(entry_guards); ++i) {
- entry_guard_t *entry = smartlist_get(entry_guards, i);
- const char *ver = entry->chosen_by_version;
- const char *msg = NULL;
- tor_version_t v;
- int version_is_bad = 0, date_is_bad = 0;
- if (!ver) {
- msg = "does not say what version of Tor it was selected by";
- version_is_bad = 1;
- } else if (tor_version_parse(ver, &v)) {
- msg = "does not seem to be from any recognized version of Tor";
- version_is_bad = 1;
- } else {
- char *tor_ver = NULL;
- tor_asprintf(&tor_ver, "Tor %s", ver);
- if ((tor_version_as_new_as(tor_ver, "0.1.0.10-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.1.2.16-dev")) ||
- (tor_version_as_new_as(tor_ver, "0.2.0.0-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.0.6-alpha")) ||
- /* above are bug 440; below are bug 1217 */
- (tor_version_as_new_as(tor_ver, "0.2.1.3-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.1.23")) ||
- (tor_version_as_new_as(tor_ver, "0.2.2.0-alpha") &&
- !tor_version_as_new_as(tor_ver, "0.2.2.7-alpha"))) {
- msg = "was selected without regard for guard bandwidth";
- version_is_bad = 1;
- }
- tor_free(tor_ver);
- }
- if (!version_is_bad && entry->chosen_on_date + 3600*24*60 < now) {
- /* It's been 2 months since the date listed in our state file. */
- msg = "was selected several months ago";
- date_is_bad = 1;
- }
-
- if (version_is_bad || date_is_bad) { /* we need to drop it */
- char dbuf[HEX_DIGEST_LEN+1];
- tor_assert(msg);
- base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
- log_fn(version_is_bad ? LOG_NOTICE : LOG_INFO, LD_CIRC,
- "Entry guard '%s' (%s) %s. (Version=%s.) Replacing it.",
- entry->nickname, dbuf, msg, ver?escaped(ver):"none");
- control_event_guard(entry->nickname, entry->identity, "DROPPED");
- entry_guard_free(entry);
- smartlist_del_keeporder(entry_guards, i--);
- log_entry_guards(LOG_INFO);
- changed = 1;
- }
- }
-
- return changed ? 1 : 0;
-}
-
-/** Remove all entry guards that have been down or unlisted for so
- * long that we don't think they'll come up again. Return 1 if we
- * removed any, or 0 if we did nothing. */
-static int
-remove_dead_entry_guards(time_t now)
-{
- char dbuf[HEX_DIGEST_LEN+1];
- char tbuf[ISO_TIME_LEN+1];
- int i;
- int changed = 0;
-
- for (i = 0; i < smartlist_len(entry_guards); ) {
- entry_guard_t *entry = smartlist_get(entry_guards, i);
- if (entry->bad_since &&
- ! entry->path_bias_disabled &&
- entry->bad_since + ENTRY_GUARD_REMOVE_AFTER < now) {
-
- base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
- format_local_iso_time(tbuf, entry->bad_since);
- log_info(LD_CIRC, "Entry guard '%s' (%s) has been down or unlisted "
- "since %s local time; removing.",
- entry->nickname, dbuf, tbuf);
- control_event_guard(entry->nickname, entry->identity, "DROPPED");
- entry_guard_free(entry);
- smartlist_del_keeporder(entry_guards, i);
- log_entry_guards(LOG_INFO);
- changed = 1;
- } else
- ++i;
- }
- return changed ? 1 : 0;
-}
-
-/** A new directory or router-status has arrived; update the down/listed
- * status of the entry guards.
- *
- * An entry is 'down' if the directory lists it as nonrunning.
- * An entry is 'unlisted' if the directory doesn't include it.
- *
- * Don't call this on startup; only on a fresh download. Otherwise we'll
- * think that things are unlisted.
- */
-void
-entry_guards_compute_status(const or_options_t *options, time_t now)
-{
- int changed = 0;
- digestmap_t *reasons;
-
- if (! entry_guards)
- return;
-
- if (options->EntryNodes) /* reshuffle the entry guard list if needed */
- entry_nodes_should_be_added();
-
- reasons = digestmap_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry)
- {
- const node_t *r = node_get_by_id(entry->identity);
- const char *reason = NULL;
- if (entry_guard_set_status(entry, r, now, options, &reason))
- changed = 1;
-
- if (entry->bad_since)
- tor_assert(reason);
- if (reason)
- digestmap_set(reasons, entry->identity, (char*)reason);
- }
- SMARTLIST_FOREACH_END(entry);
-
- if (remove_dead_entry_guards(now))
- changed = 1;
- if (remove_obsolete_entry_guards(now))
- changed = 1;
-
- if (changed) {
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
- const char *reason = digestmap_get(reasons, entry->identity);
- const char *live_msg = "";
- const node_t *r = entry_is_live(entry, 0, 1, 0, &live_msg);
- log_info(LD_CIRC, "Summary: Entry %s [%s] is %s, %s%s%s, and %s%s.",
- entry->nickname,
- hex_str(entry->identity, DIGEST_LEN),
- entry->unreachable_since ? "unreachable" : "reachable",
- entry->bad_since ? "unusable" : "usable",
- reason ? ", ": "",
- reason ? reason : "",
- r ? "live" : "not live / ",
- r ? "" : live_msg);
- } SMARTLIST_FOREACH_END(entry);
- log_info(LD_CIRC, " (%d/%d entry guards are usable/new)",
- num_live_entry_guards(), smartlist_len(entry_guards));
- log_entry_guards(LOG_INFO);
- entry_guards_changed();
- }
-
- digestmap_free(reasons, NULL);
-}
-
-/** Called when a connection to an OR with the identity digest <b>digest</b>
- * is established (<b>succeeded</b>==1) or has failed (<b>succeeded</b>==0).
- * If the OR is an entry, change that entry's up/down status.
- * Return 0 normally, or -1 if we want to tear down the new connection.
- *
- * If <b>mark_relay_status</b>, also call router_set_status() on this
- * relay.
- *
- * XXX024 change succeeded and mark_relay_status into 'int flags'.
- */
-int
-entry_guard_register_connect_status(const char *digest, int succeeded,
- int mark_relay_status, time_t now)
-{
- int changed = 0;
- int refuse_conn = 0;
- int first_contact = 0;
- entry_guard_t *entry = NULL;
- int idx = -1;
- char buf[HEX_DIGEST_LEN+1];
-
- if (! entry_guards)
- return 0;
-
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- tor_assert(e);
- if (tor_memeq(e->identity, digest, DIGEST_LEN)) {
- entry = e;
- idx = e_sl_idx;
- break;
- }
- } SMARTLIST_FOREACH_END(e);
-
- if (!entry)
- return 0;
-
- base16_encode(buf, sizeof(buf), entry->identity, DIGEST_LEN);
-
- if (succeeded) {
- if (entry->unreachable_since) {
- log_info(LD_CIRC, "Entry guard '%s' (%s) is now reachable again. Good.",
- entry->nickname, buf);
- entry->can_retry = 0;
- entry->unreachable_since = 0;
- entry->last_attempted = now;
- control_event_guard(entry->nickname, entry->identity, "UP");
- changed = 1;
- }
- if (!entry->made_contact) {
- entry->made_contact = 1;
- first_contact = changed = 1;
- }
- } else { /* ! succeeded */
- if (!entry->made_contact) {
- /* We've never connected to this one. */
- log_info(LD_CIRC,
- "Connection to never-contacted entry guard '%s' (%s) failed. "
- "Removing from the list. %d/%d entry guards usable/new.",
- entry->nickname, buf,
- num_live_entry_guards()-1, smartlist_len(entry_guards)-1);
- control_event_guard(entry->nickname, entry->identity, "DROPPED");
- entry_guard_free(entry);
- smartlist_del_keeporder(entry_guards, idx);
- log_entry_guards(LOG_INFO);
- changed = 1;
- } else if (!entry->unreachable_since) {
- log_info(LD_CIRC, "Unable to connect to entry guard '%s' (%s). "
- "Marking as unreachable.", entry->nickname, buf);
- entry->unreachable_since = entry->last_attempted = now;
- control_event_guard(entry->nickname, entry->identity, "DOWN");
- changed = 1;
- entry->can_retry = 0; /* We gave it an early chance; no good. */
- } else {
- char tbuf[ISO_TIME_LEN+1];
- format_iso_time(tbuf, entry->unreachable_since);
- log_debug(LD_CIRC, "Failed to connect to unreachable entry guard "
- "'%s' (%s). It has been unreachable since %s.",
- entry->nickname, buf, tbuf);
- entry->last_attempted = now;
- entry->can_retry = 0; /* We gave it an early chance; no good. */
- }
- }
-
- /* if the caller asked us to, also update the is_running flags for this
- * relay */
- if (mark_relay_status)
- router_set_status(digest, succeeded);
-
- if (first_contact) {
- /* We've just added a new long-term entry guard. Perhaps the network just
- * came back? We should give our earlier entries another try too,
- * and close this connection so we don't use it before we've given
- * the others a shot. */
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- if (e == entry)
- break;
- if (e->made_contact) {
- const char *msg;
- const node_t *r = entry_is_live(e, 0, 1, 1, &msg);
- if (r && e->unreachable_since) {
- refuse_conn = 1;
- e->can_retry = 1;
- }
- }
- } SMARTLIST_FOREACH_END(e);
- if (refuse_conn) {
- log_info(LD_CIRC,
- "Connected to new entry guard '%s' (%s). Marking earlier "
- "entry guards up. %d/%d entry guards usable/new.",
- entry->nickname, buf,
- num_live_entry_guards(), smartlist_len(entry_guards));
- log_entry_guards(LOG_INFO);
- changed = 1;
- }
- }
-
- if (changed)
- entry_guards_changed();
- return refuse_conn ? -1 : 0;
-}
-
-/** When we try to choose an entry guard, should we parse and add
- * config's EntryNodes first? */
-static int should_add_entry_nodes = 0;
-
-/** Called when the value of EntryNodes changes in our configuration. */
-void
-entry_nodes_should_be_added(void)
-{
- log_info(LD_CIRC, "EntryNodes config option set. Putting configured "
- "relays at the front of the entry guard list.");
- should_add_entry_nodes = 1;
-}
-
-/** Adjust the entry guards list so that it only contains entries from
- * EntryNodes, adding new entries from EntryNodes to the list as needed. */
-static void
-entry_guards_set_from_config(const or_options_t *options)
-{
- smartlist_t *entry_nodes, *worse_entry_nodes, *entry_fps;
- smartlist_t *old_entry_guards_on_list, *old_entry_guards_not_on_list;
- tor_assert(entry_guards);
-
- should_add_entry_nodes = 0;
-
- if (!options->EntryNodes) {
- /* It's possible that a controller set EntryNodes, thus making
- * should_add_entry_nodes set, then cleared it again, all before the
- * call to choose_random_entry() that triggered us. If so, just return.
- */
- return;
- }
-
- {
- char *string = routerset_to_string(options->EntryNodes);
- log_info(LD_CIRC,"Adding configured EntryNodes '%s'.", string);
- tor_free(string);
- }
-
- entry_nodes = smartlist_new();
- worse_entry_nodes = smartlist_new();
- entry_fps = smartlist_new();
- old_entry_guards_on_list = smartlist_new();
- old_entry_guards_not_on_list = smartlist_new();
-
- /* Split entry guards into those on the list and those not. */
-
- routerset_get_all_nodes(entry_nodes, options->EntryNodes,
- options->ExcludeNodes, 0);
- SMARTLIST_FOREACH(entry_nodes, const node_t *,node,
- smartlist_add(entry_fps, (void*)node->identity));
-
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, {
- if (smartlist_digest_isin(entry_fps, e->identity))
- smartlist_add(old_entry_guards_on_list, e);
- else
- smartlist_add(old_entry_guards_not_on_list, e);
- });
-
- /* Remove all currently configured guard nodes, excluded nodes, unreachable
- * nodes, or non-Guard nodes from entry_nodes. */
- SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
- if (entry_guard_get_by_id_digest(node->identity)) {
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- continue;
- } else if (routerset_contains_node(options->ExcludeNodes, node)) {
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- continue;
- } else if (!fascist_firewall_allows_node(node)) {
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- continue;
- } else if (! node->is_possible_guard) {
- smartlist_add(worse_entry_nodes, (node_t*)node);
- SMARTLIST_DEL_CURRENT(entry_nodes, node);
- }
- } SMARTLIST_FOREACH_END(node);
-
- /* Now build the new entry_guards list. */
- smartlist_clear(entry_guards);
- /* First, the previously configured guards that are in EntryNodes. */
- smartlist_add_all(entry_guards, old_entry_guards_on_list);
- /* Next, scramble the rest of EntryNodes, putting the guards first. */
- smartlist_shuffle(entry_nodes);
- smartlist_shuffle(worse_entry_nodes);
- smartlist_add_all(entry_nodes, worse_entry_nodes);
-
- /* Next, the rest of EntryNodes */
- SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
- add_an_entry_guard(node, 0, 0);
- if (smartlist_len(entry_guards) > options->NumEntryGuards * 10)
- break;
- } SMARTLIST_FOREACH_END(node);
- log_notice(LD_GENERAL, "%d entries in guards", smartlist_len(entry_guards));
- /* Finally, free the remaining previously configured guards that are not in
- * EntryNodes. */
- SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e,
- entry_guard_free(e));
-
- smartlist_free(entry_nodes);
- smartlist_free(worse_entry_nodes);
- smartlist_free(entry_fps);
- smartlist_free(old_entry_guards_on_list);
- smartlist_free(old_entry_guards_not_on_list);
- entry_guards_changed();
-}
-
-/** Return 0 if we're fine adding arbitrary routers out of the
- * directory to our entry guard list, or return 1 if we have a
- * list already and we must stick to it.
- */
-int
-entry_list_is_constrained(const or_options_t *options)
-{
- if (options->EntryNodes)
- return 1;
- if (options->UseBridges)
- return 1;
- return 0;
-}
-
-/** Pick a live (up and listed) entry guard from entry_guards. If
- * <b>state</b> is non-NULL, this is for a specific circuit --
- * make sure not to pick this circuit's exit or any node in the
- * exit's family. If <b>state</b> is NULL, we're looking for a random
- * guard (likely a bridge). */
-const node_t *
-choose_random_entry(cpath_build_state_t *state)
-{
- const or_options_t *options = get_options();
- smartlist_t *live_entry_guards = smartlist_new();
- smartlist_t *exit_family = smartlist_new();
- const node_t *chosen_exit =
- state?build_state_get_exit_node(state) : NULL;
- const node_t *node = NULL;
- int need_uptime = state ? state->need_uptime : 0;
- int need_capacity = state ? state->need_capacity : 0;
- int preferred_min, consider_exit_family = 0;
-
- if (chosen_exit) {
- nodelist_add_node_and_family(exit_family, chosen_exit);
- consider_exit_family = 1;
- }
-
- if (!entry_guards)
- entry_guards = smartlist_new();
-
- if (should_add_entry_nodes)
- entry_guards_set_from_config(options);
-
- if (!entry_list_is_constrained(options) &&
- smartlist_len(entry_guards) < options->NumEntryGuards)
- pick_entry_guards(options);
-
- retry:
- smartlist_clear(live_entry_guards);
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
- const char *msg;
- node = entry_is_live(entry, need_uptime, need_capacity, 0, &msg);
- if (!node)
- continue; /* down, no point */
- if (node == chosen_exit)
- continue; /* don't pick the same node for entry and exit */
- if (consider_exit_family && smartlist_isin(exit_family, node))
- continue; /* avoid relays that are family members of our exit */
-#if 0 /* since EntryNodes is always strict now, this clause is moot */
- if (options->EntryNodes &&
- !routerset_contains_node(options->EntryNodes, node)) {
- /* We've come to the end of our preferred entry nodes. */
- if (smartlist_len(live_entry_guards))
- goto choose_and_finish; /* only choose from the ones we like */
- if (options->StrictNodes) {
- /* in theory this case should never happen, since
- * entry_guards_set_from_config() drops unwanted relays */
- tor_fragile_assert();
- } else {
- log_info(LD_CIRC,
- "No relays from EntryNodes available. Using others.");
- }
- }
-#endif
- smartlist_add(live_entry_guards, (void*)node);
- if (!entry->made_contact) {
- /* Always start with the first not-yet-contacted entry
- * guard. Otherwise we might add several new ones, pick
- * the second new one, and now we've expanded our entry
- * guard list without needing to. */
- goto choose_and_finish;
- }
- if (smartlist_len(live_entry_guards) >= options->NumEntryGuards)
- goto choose_and_finish; /* we have enough */
- } SMARTLIST_FOREACH_END(entry);
-
- if (entry_list_is_constrained(options)) {
- /* If we prefer the entry nodes we've got, and we have at least
- * one choice, that's great. Use it. */
- preferred_min = 1;
- } else {
- /* Try to have at least 2 choices available. This way we don't
- * get stuck with a single live-but-crummy entry and just keep
- * using him.
- * (We might get 2 live-but-crummy entry guards, but so be it.) */
- preferred_min = 2;
- }
-
- if (smartlist_len(live_entry_guards) < preferred_min) {
- if (!entry_list_is_constrained(options)) {
- /* still no? try adding a new entry then */
- /* XXX if guard doesn't imply fast and stable, then we need
- * to tell add_an_entry_guard below what we want, or it might
- * be a long time til we get it. -RD */
- node = add_an_entry_guard(NULL, 0, 0);
- if (node) {
- entry_guards_changed();
- /* XXX we start over here in case the new node we added shares
- * a family with our exit node. There's a chance that we'll just
- * load up on entry guards here, if the network we're using is
- * one big family. Perhaps we should teach add_an_entry_guard()
- * to understand nodes-to-avoid-if-possible? -RD */
- goto retry;
- }
- }
- if (!node && need_uptime) {
- need_uptime = 0; /* try without that requirement */
- goto retry;
- }
- if (!node && need_capacity) {
- /* still no? last attempt, try without requiring capacity */
- need_capacity = 0;
- goto retry;
- }
-#if 0
- /* Removing this retry logic: if we only allow one exit, and it is in the
- same family as all our entries, then we are just plain not going to win
- here. */
- if (!node && entry_list_is_constrained(options) && consider_exit_family) {
- /* still no? if we're using bridges or have strictentrynodes
- * set, and our chosen exit is in the same family as all our
- * bridges/entry guards, then be flexible about families. */
- consider_exit_family = 0;
- goto retry;
- }
-#endif
- /* live_entry_guards may be empty below. Oh well, we tried. */
- }
-
- choose_and_finish:
- if (entry_list_is_constrained(options)) {
- /* We need to weight by bandwidth, because our bridges or entryguards
- * were not already selected proportional to their bandwidth. */
- node = node_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD);
- } else {
- /* We choose uniformly at random here, because choose_good_entry_server()
- * already weights its choices by bandwidth, so we don't want to
- * *double*-weight our guard selection. */
- node = smartlist_choose(live_entry_guards);
- }
- smartlist_free(live_entry_guards);
- smartlist_free(exit_family);
- return node;
-}
-
-/** Parse <b>state</b> and learn about the entry guards it describes.
- * If <b>set</b> is true, and there are no errors, replace the global
- * entry_list with what we find.
- * On success, return 0. On failure, alloc into *<b>msg</b> a string
- * describing the error, and return -1.
- */
-int
-entry_guards_parse_state(or_state_t *state, int set, char **msg)
-{
- entry_guard_t *node = NULL;
- smartlist_t *new_entry_guards = smartlist_new();
- config_line_t *line;
- time_t now = time(NULL);
- const char *state_version = state->TorVersion;
- digestmap_t *added_by = digestmap_new();
-
- *msg = NULL;
- for (line = state->EntryGuards; line; line = line->next) {
- if (!strcasecmp(line->key, "EntryGuard")) {
- smartlist_t *args = smartlist_new();
- node = tor_malloc_zero(sizeof(entry_guard_t));
- /* all entry guards on disk have been contacted */
- node->made_contact = 1;
- smartlist_add(new_entry_guards, node);
- smartlist_split_string(args, line->value, " ",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- if (smartlist_len(args)<2) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Too few arguments to EntryGuard");
- } else if (!is_legal_nickname(smartlist_get(args,0))) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Bad nickname for EntryGuard");
- } else {
- strlcpy(node->nickname, smartlist_get(args,0), MAX_NICKNAME_LEN+1);
- if (base16_decode(node->identity, DIGEST_LEN, smartlist_get(args,1),
- strlen(smartlist_get(args,1)))<0) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Bad hex digest for EntryGuard");
- }
- }
- SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
- smartlist_free(args);
- if (*msg)
- break;
- } else if (!strcasecmp(line->key, "EntryGuardDownSince") ||
- !strcasecmp(line->key, "EntryGuardUnlistedSince")) {
- time_t when;
- time_t last_try = 0;
- if (!node) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "EntryGuardDownSince/UnlistedSince without EntryGuard");
- break;
- }
- if (parse_iso_time(line->value, &when)<0) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "Bad time in EntryGuardDownSince/UnlistedSince");
- break;
- }
- if (when > now) {
- /* It's a bad idea to believe info in the future: you can wind
- * up with timeouts that aren't allowed to happen for years. */
- continue;
- }
- if (strlen(line->value) >= ISO_TIME_LEN+ISO_TIME_LEN+1) {
- /* ignore failure */
- (void) parse_iso_time(line->value+ISO_TIME_LEN+1, &last_try);
- }
- if (!strcasecmp(line->key, "EntryGuardDownSince")) {
- node->unreachable_since = when;
- node->last_attempted = last_try;
- } else {
- node->bad_since = when;
- }
- } else if (!strcasecmp(line->key, "EntryGuardAddedBy")) {
- char d[DIGEST_LEN];
- /* format is digest version date */
- if (strlen(line->value) < HEX_DIGEST_LEN+1+1+1+ISO_TIME_LEN) {
- log_warn(LD_BUG, "EntryGuardAddedBy line is not long enough.");
- continue;
- }
- if (base16_decode(d, sizeof(d), line->value, HEX_DIGEST_LEN)<0 ||
- line->value[HEX_DIGEST_LEN] != ' ') {
- log_warn(LD_BUG, "EntryGuardAddedBy line %s does not begin with "
- "hex digest", escaped(line->value));
- continue;
- }
- digestmap_set(added_by, d, tor_strdup(line->value+HEX_DIGEST_LEN+1));
- } else if (!strcasecmp(line->key, "EntryGuardPathBias")) {
- const or_options_t *options = get_options();
- unsigned hop_cnt, success_cnt;
-
- if (!node) {
- *msg = tor_strdup("Unable to parse entry nodes: "
- "EntryGuardPathBias without EntryGuard");
- break;
- }
-
- if (tor_sscanf(line->value, "%u %u", &success_cnt, &hop_cnt) != 2) {
- log_warn(LD_GENERAL, "Unable to parse guard path bias info: "
- "Misformated EntryGuardPathBias %s", escaped(line->value));
- continue;
- }
-
- node->first_hops = hop_cnt;
- node->circuit_successes = success_cnt;
- log_info(LD_GENERAL, "Read %u/%u path bias for node %s",
- node->circuit_successes, node->first_hops, node->nickname);
- /* Note: We rely on the < comparison here to allow us to set a 0
- * rate and disable the feature entirely. If refactoring, don't
- * change to <= */
- if (node->circuit_successes/((double)node->first_hops)
- < pathbias_get_disable_rate(options)) {
- node->path_bias_disabled = 1;
- log_info(LD_GENERAL,
- "Path bias is too high (%u/%u); disabling node %s",
- node->circuit_successes, node->first_hops, node->nickname);
- }
-
- } else {
- log_warn(LD_BUG, "Unexpected key %s", line->key);
- }
- }
-
- SMARTLIST_FOREACH_BEGIN(new_entry_guards, entry_guard_t *, e) {
- char *sp;
- char *val = digestmap_get(added_by, e->identity);
- if (val && (sp = strchr(val, ' '))) {
- time_t when;
- *sp++ = '\0';
- if (parse_iso_time(sp, &when)<0) {
- log_warn(LD_BUG, "Can't read time %s in EntryGuardAddedBy", sp);
- } else {
- e->chosen_by_version = tor_strdup(val);
- e->chosen_on_date = when;
- }
- } else {
- if (state_version) {
- e->chosen_by_version = tor_strdup(state_version);
- e->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
- }
- }
- if (e->path_bias_disabled && !e->bad_since)
- e->bad_since = time(NULL);
- }
- SMARTLIST_FOREACH_END(e);
-
- if (*msg || !set) {
- SMARTLIST_FOREACH(new_entry_guards, entry_guard_t *, e,
- entry_guard_free(e));
- smartlist_free(new_entry_guards);
- } else { /* !err && set */
- if (entry_guards) {
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
- entry_guard_free(e));
- smartlist_free(entry_guards);
- }
- entry_guards = new_entry_guards;
- entry_guards_dirty = 0;
- /* XXX024 hand new_entry_guards to this func, and move it up a
- * few lines, so we don't have to re-dirty it */
- if (remove_obsolete_entry_guards(now))
- entry_guards_dirty = 1;
- }
- digestmap_free(added_by, _tor_free);
- return *msg ? -1 : 0;
-}
-
-/** Our list of entry guards has changed, or some element of one
- * of our entry guards has changed. Write the changes to disk within
- * the next few minutes.
- */
-static void
-entry_guards_changed(void)
-{
- time_t when;
- entry_guards_dirty = 1;
-
- /* or_state_save() will call entry_guards_update_state(). */
- when = get_options()->AvoidDiskWrites ? time(NULL) + 3600 : time(NULL)+600;
- or_state_mark_dirty(get_or_state(), when);
-}
-
-/** If the entry guard info has not changed, do nothing and return.
- * Otherwise, free the EntryGuards piece of <b>state</b> and create
- * a new one out of the global entry_guards list, and then mark
- * <b>state</b> dirty so it will get saved to disk.
- */
-void
-entry_guards_update_state(or_state_t *state)
-{
- config_line_t **next, *line;
- if (! entry_guards_dirty)
- return;
-
- config_free_lines(state->EntryGuards);
- next = &state->EntryGuards;
- *next = NULL;
- if (!entry_guards)
- entry_guards = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- char dbuf[HEX_DIGEST_LEN+1];
- if (!e->made_contact)
- continue; /* don't write this one to disk */
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuard");
- base16_encode(dbuf, sizeof(dbuf), e->identity, DIGEST_LEN);
- tor_asprintf(&line->value, "%s %s", e->nickname, dbuf);
- next = &(line->next);
- if (e->unreachable_since) {
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardDownSince");
- line->value = tor_malloc(ISO_TIME_LEN+1+ISO_TIME_LEN+1);
- format_iso_time(line->value, e->unreachable_since);
- if (e->last_attempted) {
- line->value[ISO_TIME_LEN] = ' ';
- format_iso_time(line->value+ISO_TIME_LEN+1, e->last_attempted);
- }
- next = &(line->next);
- }
- if (e->bad_since) {
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardUnlistedSince");
- line->value = tor_malloc(ISO_TIME_LEN+1);
- format_iso_time(line->value, e->bad_since);
- next = &(line->next);
- }
- if (e->chosen_on_date && e->chosen_by_version &&
- !strchr(e->chosen_by_version, ' ')) {
- char d[HEX_DIGEST_LEN+1];
- char t[ISO_TIME_LEN+1];
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardAddedBy");
- base16_encode(d, sizeof(d), e->identity, DIGEST_LEN);
- format_iso_time(t, e->chosen_on_date);
- tor_asprintf(&line->value, "%s %s %s",
- d, e->chosen_by_version, t);
- next = &(line->next);
- }
- if (e->first_hops) {
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("EntryGuardPathBias");
- tor_asprintf(&line->value, "%u %u",
- e->circuit_successes, e->first_hops);
- next = &(line->next);
- }
-
- } SMARTLIST_FOREACH_END(e);
- if (!get_options()->AvoidDiskWrites)
- or_state_mark_dirty(get_or_state(), 0);
- entry_guards_dirty = 0;
-}
-
-/** If <b>question</b> is the string "entry-guards", then dump
- * to *<b>answer</b> a newly allocated string describing all of
- * the nodes in the global entry_guards list. See control-spec.txt
- * for details.
- * For backward compatibility, we also handle the string "helper-nodes".
- * */
-int
-getinfo_helper_entry_guards(control_connection_t *conn,
- const char *question, char **answer,
- const char **errmsg)
-{
- (void) conn;
- (void) errmsg;
-
- if (!strcmp(question,"entry-guards") ||
- !strcmp(question,"helper-nodes")) {
- smartlist_t *sl = smartlist_new();
- char tbuf[ISO_TIME_LEN+1];
- char nbuf[MAX_VERBOSE_NICKNAME_LEN+1];
- if (!entry_guards)
- entry_guards = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- const char *status = NULL;
- time_t when = 0;
- const node_t *node;
-
- if (!e->made_contact) {
- status = "never-connected";
- } else if (e->bad_since) {
- when = e->bad_since;
- status = "unusable";
- } else {
- status = "up";
- }
-
- node = node_get_by_id(e->identity);
- if (node) {
- node_get_verbose_nickname(node, nbuf);
- } else {
- nbuf[0] = '$';
- base16_encode(nbuf+1, sizeof(nbuf)-1, e->identity, DIGEST_LEN);
- /* e->nickname field is not very reliable if we don't know about
- * this router any longer; don't include it. */
- }
-
- if (when) {
- format_iso_time(tbuf, when);
- smartlist_add_asprintf(sl, "%s %s %s\n", nbuf, status, tbuf);
- } else {
- smartlist_add_asprintf(sl, "%s %s\n", nbuf, status);
- }
- } SMARTLIST_FOREACH_END(e);
- *answer = smartlist_join_strings(sl, "", 0, NULL);
- SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
- smartlist_free(sl);
- }
- return 0;
-}
-
-/** A list of configured bridges. Whenever we actually get a descriptor
- * for one, we add it as an entry guard. Note that the order of bridges
- * in this list does not necessarily correspond to the order of bridges
- * in the torrc. */
-static smartlist_t *bridge_list = NULL;
-
-/** Mark every entry of the bridge list to be removed on our next call to
- * sweep_bridge_list unless it has first been un-marked. */
-void
-mark_bridge_list(void)
-{
- if (!bridge_list)
- bridge_list = smartlist_new();
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b,
- b->marked_for_removal = 1);
-}
-
-/** Remove every entry of the bridge list that was marked with
- * mark_bridge_list if it has not subsequently been un-marked. */
-void
-sweep_bridge_list(void)
-{
- if (!bridge_list)
- bridge_list = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
- if (b->marked_for_removal) {
- SMARTLIST_DEL_CURRENT(bridge_list, b);
- bridge_free(b);
- }
- } SMARTLIST_FOREACH_END(b);
-}
-
-/** Initialize the bridge list to empty, creating it if needed. */
-static void
-clear_bridge_list(void)
-{
- if (!bridge_list)
- bridge_list = smartlist_new();
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, bridge_free(b));
- smartlist_clear(bridge_list);
-}
-
-/** Free the bridge <b>bridge</b>. */
-static void
-bridge_free(bridge_info_t *bridge)
-{
- if (!bridge)
- return;
-
- tor_free(bridge->transport_name);
- tor_free(bridge);
-}
-
-/** A list of pluggable transports found in torrc. */
-static smartlist_t *transport_list = NULL;
-
-/** Mark every entry of the transport list to be removed on our next call to
- * sweep_transport_list unless it has first been un-marked. */
-void
-mark_transport_list(void)
-{
- if (!transport_list)
- transport_list = smartlist_new();
- SMARTLIST_FOREACH(transport_list, transport_t *, t,
- t->marked_for_removal = 1);
-}
-
-/** Remove every entry of the transport list that was marked with
- * mark_transport_list if it has not subsequently been un-marked. */
-void
-sweep_transport_list(void)
-{
- if (!transport_list)
- transport_list = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, t) {
- if (t->marked_for_removal) {
- SMARTLIST_DEL_CURRENT(transport_list, t);
- transport_free(t);
- }
- } SMARTLIST_FOREACH_END(t);
-}
-
-/** Initialize the pluggable transports list to empty, creating it if
- * needed. */
-void
-clear_transport_list(void)
-{
- if (!transport_list)
- transport_list = smartlist_new();
- SMARTLIST_FOREACH(transport_list, transport_t *, t, transport_free(t));
- smartlist_clear(transport_list);
-}
-
-/** Free the pluggable transport struct <b>transport</b>. */
-void
-transport_free(transport_t *transport)
-{
- if (!transport)
- return;
-
- tor_free(transport->name);
- tor_free(transport);
-}
-
-/** Returns the transport in our transport list that has the name <b>name</b>.
- * Else returns NULL. */
-transport_t *
-transport_get_by_name(const char *name)
-{
- tor_assert(name);
-
- if (!transport_list)
- return NULL;
-
- SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, transport) {
- if (!strcmp(transport->name, name))
- return transport;
- } SMARTLIST_FOREACH_END(transport);
-
- return NULL;
-}
-
-/** Returns a transport_t struct for a transport proxy supporting the
- protocol <b>name</b> listening at <b>addr</b>:<b>port</b> using
- SOCKS version <b>socks_ver</b>. */
-transport_t *
-transport_new(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver)
-{
- transport_t *t = tor_malloc_zero(sizeof(transport_t));
-
- tor_addr_copy(&t->addr, addr);
- t->port = port;
- t->name = tor_strdup(name);
- t->socks_version = socks_ver;
-
- return t;
-}
-
-/** Resolve any conflicts that the insertion of transport <b>t</b>
- * might cause.
- * Return 0 if <b>t</b> is OK and should be registered, 1 if there is
- * a transport identical to <b>t</b> already registered and -1 if
- * <b>t</b> cannot be added due to conflicts. */
-static int
-transport_resolve_conflicts(transport_t *t)
-{
- /* This is how we resolve transport conflicts:
-
- If there is already a transport with the same name and addrport,
- we either have duplicate torrc lines OR we are here post-HUP and
- this transport was here pre-HUP as well. In any case, mark the
- old transport so that it doesn't get removed and ignore the new
- one. Our caller has to free the new transport so we return '1' to
- signify this.
-
- If there is already a transport with the same name but different
- addrport:
- * if it's marked for removal, it means that it either has a lower
- priority than 't' in torrc (otherwise the mark would have been
- cleared by the paragraph above), or it doesn't exist at all in
- the post-HUP torrc. We destroy the old transport and register 't'.
- * if it's *not* marked for removal, it means that it was newly
- added in the post-HUP torrc or that it's of higher priority, in
- this case we ignore 't'. */
- transport_t *t_tmp = transport_get_by_name(t->name);
- if (t_tmp) { /* same name */
- if (tor_addr_eq(&t->addr, &t_tmp->addr) && (t->port == t_tmp->port)) {
- /* same name *and* addrport */
- t_tmp->marked_for_removal = 0;
- return 1;
- } else { /* same name but different addrport */
- char *new_transport_addr = tor_strdup(fmt_addr(&t->addr));
- if (t_tmp->marked_for_removal) { /* marked for removal */
- log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s:%u' "
- "but there was already a transport marked for deletion at "
- "'%s:%u'. We deleted the old transport and registered the "
- "new one.", t->name, new_transport_addr, t->port,
- fmt_addr(&t_tmp->addr), t_tmp->port);
- smartlist_remove(transport_list, t_tmp);
- transport_free(t_tmp);
- tor_free(new_transport_addr);
- } else { /* *not* marked for removal */
- log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s:%u' "
- "but the same transport already exists at '%s:%u'. "
- "Skipping.", t->name, new_transport_addr, t->port,
- fmt_addr(&t_tmp->addr), t_tmp->port);
- tor_free(new_transport_addr);
- return -1;
- }
- }
- }
-
- return 0;
-}
-
-/** Add transport <b>t</b> to the internal list of pluggable
- * transports.
- * Returns 0 if the transport was added correctly, 1 if the same
- * transport was already registered (in this case the caller must
- * free the transport) and -1 if there was an error. */
-int
-transport_add(transport_t *t)
-{
- int r;
- tor_assert(t);
-
- r = transport_resolve_conflicts(t);
-
- switch (r) {
- case 0: /* should register transport */
- if (!transport_list)
- transport_list = smartlist_new();
- smartlist_add(transport_list, t);
- return 0;
- default: /* let our caller know the return code */
- return r;
- }
-}
-
-/** Remember a new pluggable transport proxy at <b>addr</b>:<b>port</b>.
- * <b>name</b> is set to the name of the protocol this proxy uses.
- * <b>socks_ver</b> is set to the SOCKS version of the proxy. */
-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);
-
- int r = transport_add(t);
-
- switch (r) {
- case -1:
- default:
- log_notice(LD_GENERAL, "Could not add transport %s at %s:%u. Skipping.",
- t->name, fmt_addr(&t->addr), t->port);
- transport_free(t);
- return -1;
- case 1:
- log_info(LD_GENERAL, "Succesfully registered transport %s at %s:%u.",
- t->name, fmt_addr(&t->addr), t->port);
- transport_free(t); /* falling */
- return 0;
- case 0:
- log_info(LD_GENERAL, "Succesfully registered transport %s at %s:%u.",
- t->name, fmt_addr(&t->addr), t->port);
- return 0;
- }
-}
-
-/** Return a bridge pointer if <b>ri</b> is one of our known bridges
- * (either by comparing keys if possible, else by comparing addr/port).
- * Else return NULL. */
-static bridge_info_t *
-get_configured_bridge_by_addr_port_digest(const tor_addr_t *addr,
- uint16_t port,
- const char *digest)
-{
- if (!bridge_list)
- return NULL;
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
- {
- if (tor_digest_is_zero(bridge->identity) &&
- !tor_addr_compare(&bridge->addr, addr, CMP_EXACT) &&
- bridge->port == port)
- return bridge;
- if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN))
- return bridge;
- }
- SMARTLIST_FOREACH_END(bridge);
- return NULL;
-}
-
-/** Wrapper around get_configured_bridge_by_addr_port_digest() to look
- * it up via router descriptor <b>ri</b>. */
-static bridge_info_t *
-get_configured_bridge_by_routerinfo(const routerinfo_t *ri)
-{
- tor_addr_port_t ap;
-
- router_get_pref_orport(ri, &ap);
- return get_configured_bridge_by_addr_port_digest(&ap.addr, ap.port,
- ri->cache_info.identity_digest);
-}
-
-/** Return 1 if <b>ri</b> is one of our known bridges, else 0. */
-int
-routerinfo_is_a_configured_bridge(const routerinfo_t *ri)
-{
- return get_configured_bridge_by_routerinfo(ri) ? 1 : 0;
-}
-
-/** Return 1 if <b>node</b> is one of our configured bridges, else 0. */
-int
-node_is_a_configured_bridge(const node_t *node)
-{
- int retval = 0; /* Negative. */
- smartlist_t *orports = NULL;
-
- if (!node)
- goto out;
-
- orports = node_get_all_orports(node);
- if (orports == NULL)
- goto out;
-
- SMARTLIST_FOREACH_BEGIN(orports, tor_addr_port_t *, orport) {
- if (get_configured_bridge_by_addr_port_digest(&orport->addr, orport->port,
- node->identity) != NULL) {
- retval = 1;
- goto out;
- }
- } SMARTLIST_FOREACH_END(orport);
-
- out:
- if (orports != NULL) {
- SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
- smartlist_free(orports);
- orports = NULL;
- }
- return retval;
-}
-
-/** We made a connection to a router at <b>addr</b>:<b>port</b>
- * without knowing its digest. Its digest turned out to be <b>digest</b>.
- * If it was a bridge, and we still don't know its digest, record it.
- */
-void
-learned_router_identity(const tor_addr_t *addr, uint16_t port,
- const char *digest)
-{
- bridge_info_t *bridge =
- get_configured_bridge_by_addr_port_digest(addr, port, digest);
- if (bridge && tor_digest_is_zero(bridge->identity)) {
- memcpy(bridge->identity, digest, DIGEST_LEN);
- log_notice(LD_DIR, "Learned fingerprint %s for bridge %s:%d",
- hex_str(digest, DIGEST_LEN), fmt_addr(addr), port);
- }
-}
-
-/** Return true if <b>bridge</b> has the same identity digest as
- * <b>digest</b>. If <b>digest</b> is NULL, it matches
- * bridges with unspecified identity digests. */
-static int
-bridge_has_digest(const bridge_info_t *bridge, const char *digest)
-{
- if (digest)
- return tor_memeq(digest, bridge->identity, DIGEST_LEN);
- else
- return tor_digest_is_zero(bridge->identity);
-}
-
-/** We are about to add a new bridge at <b>addr</b>:<b>port</b>, with optional
- * <b>digest</b> and <b>transport_name</b>. Mark for removal any previously
- * existing bridge with the same address and port, and warn the user as
- * appropriate.
- */
-static void
-bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
- const char *digest, const char *transport_name)
-{
- /* Iterate the already-registered bridge list:
-
- If you find a bridge with the same adress and port, mark it for
- removal. It doesn't make sense to have two active bridges with
- the same IP:PORT. If the bridge in question has a different
- digest or transport than <b>digest</b>/<b>transport_name</b>,
- it's probably a misconfiguration and we should warn the user.
- */
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) {
- if (bridge->marked_for_removal)
- continue;
-
- if (tor_addr_eq(&bridge->addr, addr) && (bridge->port == port)) {
-
- bridge->marked_for_removal = 1;
-
- if (!bridge_has_digest(bridge, digest) ||
- strcmp_opt(bridge->transport_name, transport_name)) {
- /* warn the user */
- char *bridge_description_new, *bridge_description_old;
- tor_asprintf(&bridge_description_new, "%s:%u:%s:%s",
- fmt_addr(addr), port,
- digest ? hex_str(digest, DIGEST_LEN) : "",
- transport_name ? transport_name : "");
- tor_asprintf(&bridge_description_old, "%s:%u:%s:%s",
- fmt_addr(&bridge->addr), bridge->port,
- tor_digest_is_zero(bridge->identity) ?
- "" : hex_str(bridge->identity,DIGEST_LEN),
- bridge->transport_name ? bridge->transport_name : "");
-
- log_warn(LD_GENERAL,"Tried to add bridge '%s', but we found a conflict"
- " with the already registered bridge '%s'. We will discard"
- " the old bridge and keep '%s'. If this is not what you"
- " wanted, please change your configuration file accordingly.",
- bridge_description_new, bridge_description_old,
- bridge_description_new);
-
- tor_free(bridge_description_new);
- tor_free(bridge_description_old);
- }
- }
- } SMARTLIST_FOREACH_END(bridge);
-}
-
-/** Remember a new bridge at <b>addr</b>:<b>port</b>. If <b>digest</b>
- * is set, it tells us the identity key too. If we already had the
- * bridge in our list, unmark it, and don't actually add anything new.
- * If <b>transport_name</b> is non-NULL - the bridge is associated with a
- * pluggable transport - we assign the transport to the bridge. */
-void
-bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *digest, const char *transport_name)
-{
- bridge_info_t *b;
-
- bridge_resolve_conflicts(addr, port, digest, transport_name);
-
- b = tor_malloc_zero(sizeof(bridge_info_t));
- tor_addr_copy(&b->addr, addr);
- b->port = port;
- if (digest)
- memcpy(b->identity, digest, DIGEST_LEN);
- if (transport_name)
- b->transport_name = tor_strdup(transport_name);
- b->fetch_status.schedule = DL_SCHED_BRIDGE;
- if (!bridge_list)
- bridge_list = smartlist_new();
-
- smartlist_add(bridge_list, b);
-}
-
-/** Return true iff <b>routerset</b> contains the bridge <b>bridge</b>. */
-static int
-routerset_contains_bridge(const routerset_t *routerset,
- const bridge_info_t *bridge)
-{
- int result;
- extend_info_t *extinfo;
- tor_assert(bridge);
- if (!routerset)
- return 0;
-
- extinfo = extend_info_alloc(
- NULL, bridge->identity, NULL, &bridge->addr, bridge->port);
- result = routerset_contains_extendinfo(routerset, extinfo);
- extend_info_free(extinfo);
- return result;
-}
-
-/** If <b>digest</b> is one of our known bridges, return it. */
-static bridge_info_t *
-find_bridge_by_digest(const char *digest)
-{
- SMARTLIST_FOREACH(bridge_list, bridge_info_t *, bridge,
- {
- if (tor_memeq(bridge->identity, digest, DIGEST_LEN))
- return bridge;
- });
- return NULL;
-}
-
-/* DOCDOC find_transport_name_by_bridge_addrport */
-const char *
-find_transport_name_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
-{
- if (!bridge_list)
- return NULL;
-
- SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
- if (tor_addr_eq(&bridge->addr, addr) &&
- (bridge->port == port))
- return bridge->transport_name;
- } SMARTLIST_FOREACH_END(bridge);
-
- return NULL;
-}
-
-/** If <b>addr</b> and <b>port</b> match the address and port of a
- * bridge of ours that uses pluggable transports, place its transport
- * in <b>transport</b>.
- *
- * Return 0 on success (found a transport, or found a bridge with no
- * transport, or found no bridge); return -1 if we should be using a
- * transport, but the transport could not be found.
- */
-int
-find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
- const transport_t **transport)
-{
- *transport = NULL;
- if (!bridge_list)
- return 0;
-
- SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
- if (tor_addr_eq(&bridge->addr, addr) &&
- (bridge->port == port)) { /* bridge matched */
- if (bridge->transport_name) { /* it also uses pluggable transports */
- *transport = transport_get_by_name(bridge->transport_name);
- if (*transport == NULL) { /* it uses pluggable transports, but
- the transport could not be found! */
- return -1;
- }
- return 0;
- } else { /* bridge matched, but it doesn't use transports. */
- break;
- }
- }
- } SMARTLIST_FOREACH_END(bridge);
-
- *transport = NULL;
- return 0;
-}
-
-/** We need to ask <b>bridge</b> for its server descriptor. */
-static void
-launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
-{
- char *address;
- const or_options_t *options = get_options();
-
- if (connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &bridge->addr, bridge->port,
- DIR_PURPOSE_FETCH_SERVERDESC))
- return; /* it's already on the way */
-
- if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
- download_status_mark_impossible(&bridge->fetch_status);
- log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
- safe_str_client(fmt_addr(&bridge->addr)));
- return;
- }
-
- address = tor_dup_addr(&bridge->addr);
-
- directory_initiate_command(address, &bridge->addr,
- bridge->port, 0,
- 0, /* does not matter */
- 1, bridge->identity,
- DIR_PURPOSE_FETCH_SERVERDESC,
- ROUTER_PURPOSE_BRIDGE,
- 0, "authority.z", NULL, 0, 0);
- tor_free(address);
-}
-
-/** Fetching the bridge descriptor from the bridge authority returned a
- * "not found". Fall back to trying a direct fetch. */
-void
-retry_bridge_descriptor_fetch_directly(const char *digest)
-{
- bridge_info_t *bridge = find_bridge_by_digest(digest);
- if (!bridge)
- return; /* not found? oh well. */
-
- launch_direct_bridge_descriptor_fetch(bridge);
-}
-
-/** For each bridge in our list for which we don't currently have a
- * descriptor, fetch a new copy of its descriptor -- either directly
- * from the bridge or via a bridge authority. */
-void
-fetch_bridge_descriptors(const or_options_t *options, time_t now)
-{
- int num_bridge_auths = get_n_authorities(BRIDGE_DIRINFO);
- int ask_bridge_directly;
- int can_use_bridge_authority;
-
- if (!bridge_list)
- return;
-
- /* If we still have unconfigured managed proxies, don't go and
- connect to a bridge. */
- if (pt_proxies_configuration_pending())
- return;
-
- SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
- {
- if (!download_status_is_ready(&bridge->fetch_status, now,
- IMPOSSIBLE_TO_DOWNLOAD))
- continue; /* don't bother, no need to retry yet */
- if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
- download_status_mark_impossible(&bridge->fetch_status);
- log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
- safe_str_client(fmt_addr(&bridge->addr)));
- continue;
- }
-
- /* schedule another fetch as if this one will fail, in case it does */
- download_status_failed(&bridge->fetch_status, 0);
-
- can_use_bridge_authority = !tor_digest_is_zero(bridge->identity) &&
- num_bridge_auths;
- ask_bridge_directly = !can_use_bridge_authority ||
- !options->UpdateBridgesFromAuthority;
- log_debug(LD_DIR, "ask_bridge_directly=%d (%d, %d, %d)",
- ask_bridge_directly, tor_digest_is_zero(bridge->identity),
- !options->UpdateBridgesFromAuthority, !num_bridge_auths);
-
- if (ask_bridge_directly &&
- !fascist_firewall_allows_address_or(&bridge->addr, bridge->port)) {
- log_notice(LD_DIR, "Bridge at '%s:%d' isn't reachable by our "
- "firewall policy. %s.", fmt_addr(&bridge->addr),
- bridge->port,
- can_use_bridge_authority ?
- "Asking bridge authority instead" : "Skipping");
- if (can_use_bridge_authority)
- ask_bridge_directly = 0;
- else
- continue;
- }
-
- if (ask_bridge_directly) {
- /* we need to ask the bridge itself for its descriptor. */
- launch_direct_bridge_descriptor_fetch(bridge);
- } else {
- /* We have a digest and we want to ask an authority. We could
- * combine all the requests into one, but that may give more
- * hints to the bridge authority than we want to give. */
- char resource[10 + HEX_DIGEST_LEN];
- memcpy(resource, "fp/", 3);
- base16_encode(resource+3, HEX_DIGEST_LEN+1,
- bridge->identity, DIGEST_LEN);
- memcpy(resource+3+HEX_DIGEST_LEN, ".z", 3);
- log_info(LD_DIR, "Fetching bridge info '%s' from bridge authority.",
- resource);
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_SERVERDESC,
- ROUTER_PURPOSE_BRIDGE, resource, 0);
- }
- }
- SMARTLIST_FOREACH_END(bridge);
-}
-
-/** If our <b>bridge</b> is configured to be a different address than
- * the bridge gives in <b>node</b>, rewrite the routerinfo
- * we received to use the address we meant to use. Now we handle
- * multihomed bridges better.
- */
-static void
-rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
-{
- /* XXXX move this function. */
- /* XXXX overridden addresses should really live in the node_t, so that the
- * routerinfo_t and the microdesc_t can be immutable. But we can only
- * do that safely if we know that no function that connects to an OR
- * does so through an address from any source other than node_get_addr().
- */
- tor_addr_t addr;
-
- if (node->ri) {
- routerinfo_t *ri = node->ri;
- tor_addr_from_ipv4h(&addr, ri->addr);
-
- if ((!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
- bridge->port == ri->or_port) ||
- (!tor_addr_compare(&bridge->addr, &ri->ipv6_addr, CMP_EXACT) &&
- bridge->port == ri->ipv6_orport)) {
- /* they match, so no need to do anything */
- } else {
- if (tor_addr_family(&bridge->addr) == AF_INET) {
- ri->addr = tor_addr_to_ipv4h(&bridge->addr);
- tor_free(ri->address);
- ri->address = tor_dup_ip(ri->addr);
- ri->or_port = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerinfo for '%s' to match configured "
- "address %s:%d.",
- ri->nickname, ri->address, ri->or_port);
- } else if (tor_addr_family(&bridge->addr) == AF_INET6) {
- tor_addr_copy(&ri->ipv6_addr, &bridge->addr);
- ri->ipv6_orport = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerinfo for '%s' to match configured "
- "address %s:%d.",
- ri->nickname, fmt_addr(&ri->ipv6_addr), ri->ipv6_orport);
- } else {
- log_err(LD_BUG, "Address family not supported: %d.",
- tor_addr_family(&bridge->addr));
- return;
- }
- }
-
- /* Indicate that we prefer connecting to this bridge over the
- protocol that the bridge address indicates. Last bridge
- descriptor handled wins. */
- ri->ipv6_preferred = tor_addr_family(&bridge->addr) == AF_INET6;
-
- /* XXXipv6 we lack support for falling back to another address for
- the same relay, warn the user */
- if (!tor_addr_is_null(&ri->ipv6_addr)) {
- tor_addr_port_t ap;
- router_get_pref_orport(ri, &ap);
- log_notice(LD_CONFIG,
- "Bridge '%s' has both an IPv4 and an IPv6 address. "
- "Will prefer using its %s address (%s:%d).",
- ri->nickname,
- ri->ipv6_preferred ? "IPv6" : "IPv4",
- fmt_addr(&ap.addr), ap.port);
- }
- }
- if (node->rs) {
- routerstatus_t *rs = node->rs;
- tor_addr_from_ipv4h(&addr, rs->addr);
-
- if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
- bridge->port == rs->or_port) {
- /* they match, so no need to do anything */
- } else {
- rs->addr = tor_addr_to_ipv4h(&bridge->addr);
- rs->or_port = bridge->port;
- log_info(LD_DIR,
- "Adjusted bridge routerstatus for '%s' to match "
- "configured address %s:%d.",
- rs->nickname, fmt_addr(&bridge->addr), rs->or_port);
- }
- }
-}
-
-/** We just learned a descriptor for a bridge. See if that
- * digest is in our entry guard list, and add it if not. */
-void
-learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
-{
- tor_assert(ri);
- tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE);
- if (get_options()->UseBridges) {
- int first = !any_bridge_descriptors_known();
- bridge_info_t *bridge = get_configured_bridge_by_routerinfo(ri);
- time_t now = time(NULL);
- router_set_status(ri->cache_info.identity_digest, 1);
-
- if (bridge) { /* if we actually want to use this one */
- node_t *node;
- /* it's here; schedule its re-fetch for a long time from now. */
- if (!from_cache)
- download_status_reset(&bridge->fetch_status);
-
- node = node_get_mutable_by_id(ri->cache_info.identity_digest);
- tor_assert(node);
- rewrite_node_address_for_bridge(bridge, node);
- add_an_entry_guard(node, 1, 1);
-
- log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname,
- from_cache ? "cached" : "fresh", router_describe(ri));
- /* set entry->made_contact so if it goes down we don't drop it from
- * our entry node list */
- entry_guard_register_connect_status(ri->cache_info.identity_digest,
- 1, 0, now);
- if (first)
- routerlist_retry_directory_downloads(now);
- }
- }
-}
-
-/** Return 1 if any of our entry guards have descriptors that
- * are marked with purpose 'bridge' and are running. Else return 0.
- *
- * We use this function to decide if we're ready to start building
- * circuits through our bridges, or if we need to wait until the
- * directory "server/authority" requests finish. */
-int
-any_bridge_descriptors_known(void)
-{
- tor_assert(get_options()->UseBridges);
- return choose_random_entry(NULL)!=NULL ? 1 : 0;
-}
-
-/** Return 1 if there are any directory conns fetching bridge descriptors
- * that aren't marked for close. We use this to guess if we should tell
- * the controller that we have a problem. */
-int
-any_pending_bridge_descriptor_fetches(void)
-{
- smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
- if (conn->type == CONN_TYPE_DIR &&
- conn->purpose == DIR_PURPOSE_FETCH_SERVERDESC &&
- TO_DIR_CONN(conn)->router_purpose == ROUTER_PURPOSE_BRIDGE &&
- !conn->marked_for_close &&
- conn->linked &&
- conn->linked_conn && !conn->linked_conn->marked_for_close) {
- log_debug(LD_DIR, "found one: %s", conn->address);
- return 1;
- }
- } SMARTLIST_FOREACH_END(conn);
- return 0;
-}
-
-/** Return 1 if we have at least one descriptor for an entry guard
- * (bridge or member of EntryNodes) and all descriptors we know are
- * down. Else return 0. If <b>act</b> is 1, then mark the down guards
- * up; else just observe and report. */
-static int
-entries_retry_helper(const or_options_t *options, int act)
-{
- const node_t *node;
- int any_known = 0;
- int any_running = 0;
- int need_bridges = options->UseBridges != 0;
- if (!entry_guards)
- entry_guards = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- node = node_get_by_id(e->identity);
- if (node && node_has_descriptor(node) &&
- node_is_bridge(node) == need_bridges) {
- any_known = 1;
- if (node->is_running)
- any_running = 1; /* some entry is both known and running */
- else if (act) {
- /* Mark all current connections to this OR as unhealthy, since
- * otherwise there could be one that started 30 seconds
- * ago, and in 30 seconds it will time out, causing us to mark
- * the node down and undermine the retry attempt. We mark even
- * the established conns, since if the network just came back
- * we'll want to attach circuits to fresh conns. */
- connection_or_set_bad_connections(node->identity, 1);
-
- /* mark this entry node for retry */
- router_set_status(node->identity, 1);
- e->can_retry = 1;
- e->bad_since = 0;
- }
- }
- } SMARTLIST_FOREACH_END(e);
- log_debug(LD_DIR, "%d: any_known %d, any_running %d",
- act, any_known, any_running);
- return any_known && !any_running;
-}
-
-/** Do we know any descriptors for our bridges / entrynodes, and are
- * all the ones we have descriptors for down? */
-int
-entries_known_but_down(const or_options_t *options)
-{
- tor_assert(entry_list_is_constrained(options));
- return entries_retry_helper(options, 0);
-}
-
-/** Mark all down known bridges / entrynodes up. */
-void
-entries_retry_all(const or_options_t *options)
-{
- tor_assert(entry_list_is_constrained(options));
- entries_retry_helper(options, 1);
-}
-
-/** Return true if we've ever had a bridge running a Tor version that can't
- * provide microdescriptors to us. In that case fall back to asking for
- * full descriptors. Eventually all bridges will support microdescriptors
- * and we can take this check out; see bug 4013. */
-int
-any_bridges_dont_support_microdescriptors(void)
-{
- const node_t *node;
- static int ever_answered_yes = 0;
- if (!get_options()->UseBridges || !entry_guards)
- return 0;
- if (ever_answered_yes)
- return 1; /* if we ever answer 'yes', always answer 'yes' */
- SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
- node = node_get_by_id(e->identity);
- if (node && node->ri &&
- node_is_bridge(node) && node_is_a_configured_bridge(node) &&
- !tor_version_supports_microdescriptors(node->ri->platform)) {
- /* This is one of our current bridges, and we know enough about
- * it to know that it won't be able to answer our microdescriptor
- * questions. */
- ever_answered_yes = 1;
- return 1;
- }
- } SMARTLIST_FOREACH_END(e);
- return 0;
-}
-
-/** Release all storage held by the list of entry guards and related
- * memory structs. */
-void
-entry_guards_free_all(void)
-{
- if (entry_guards) {
- SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
- entry_guard_free(e));
- smartlist_free(entry_guards);
- entry_guards = NULL;
- }
- clear_bridge_list();
- clear_transport_list();
- smartlist_free(bridge_list);
- smartlist_free(transport_list);
- bridge_list = NULL;
- transport_list = NULL;
-}
-
diff --git a/src/or/circuitbuild.h b/src/or/circuitbuild.h
index 984d04a99..71caea94e 100644
--- a/src/or/circuitbuild.h
+++ b/src/or/circuitbuild.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,23 +9,8 @@
* \brief Header file for circuitbuild.c.
**/
-#ifndef _TOR_CIRCUITBUILD_H
-#define _TOR_CIRCUITBUILD_H
-
-/** Represents a pluggable transport proxy used by a bridge. */
-typedef struct {
- /** SOCKS version: One of PROXY_SOCKS4, PROXY_SOCKS5. */
- int socks_version;
- /** Name of pluggable transport protocol */
- char *name;
- /** Address of proxy */
- tor_addr_t addr;
- /** Port of proxy */
- uint16_t port;
- /** 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;
-} transport_t;
+#ifndef TOR_CIRCUITBUILD_H
+#define TOR_CIRCUITBUILD_H
char *circuit_list_path(origin_circuit_t *circ, int verbose);
char *circuit_list_path_for_controller(origin_circuit_t *circ);
@@ -37,7 +22,7 @@ origin_circuit_t *circuit_establish_circuit(uint8_t purpose,
extend_info_t *exit,
int flags);
int circuit_handle_first_hop(origin_circuit_t *circ);
-void circuit_n_conn_done(or_connection_t *or_conn, int status);
+void circuit_n_chan_done(channel_t *chan, int status);
int inform_testing_reachability(void);
int circuit_timeout_want_to_count_circ(origin_circuit_t *circ);
int circuit_send_next_onion_skin(origin_circuit_t *circ);
@@ -45,127 +30,37 @@ void circuit_note_clock_jumped(int seconds_elapsed);
int circuit_extend(cell_t *cell, circuit_t *circ);
int circuit_init_cpath_crypto(crypt_path_t *cpath, const char *key_data,
int reverse);
-int circuit_finish_handshake(origin_circuit_t *circ, uint8_t cell_type,
- const uint8_t *reply);
-int circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer);
-int onionskin_answer(or_circuit_t *circ, uint8_t cell_type,
- const char *payload, const char *keys);
+struct created_cell_t;
+int circuit_finish_handshake(origin_circuit_t *circ,
+ const struct created_cell_t *created_cell);
+int circuit_truncated(origin_circuit_t *circ, crypt_path_t *layer,
+ int reason);
+int onionskin_answer(or_circuit_t *circ,
+ const struct created_cell_t *created_cell,
+ const char *keys,
+ const uint8_t *rend_circ_nonce);
int circuit_all_predicted_ports_handled(time_t now, int *need_uptime,
int *need_capacity);
int circuit_append_new_exit(origin_circuit_t *circ, extend_info_t *info);
int circuit_extend_to_new_exit(origin_circuit_t *circ, extend_info_t *info);
void onion_append_to_cpath(crypt_path_t **head_ptr, crypt_path_t *new_hop);
-extend_info_t *extend_info_alloc(const char *nickname, const char *digest,
- crypto_pk_t *onion_key,
- const tor_addr_t *addr, uint16_t port);
-extend_info_t *extend_info_from_router(const routerinfo_t *r,
- int for_direct_connect);
-extend_info_t *extend_info_from_node(const node_t *node,
- int for_direct_connect);
+extend_info_t *extend_info_new(const char *nickname, const char *digest,
+ crypto_pk_t *onion_key,
+ const curve25519_public_key_t *curve25519_key,
+ const tor_addr_t *addr, uint16_t port);
+extend_info_t *extend_info_from_node(const node_t *r, int for_direct_connect);
extend_info_t *extend_info_dup(extend_info_t *info);
void extend_info_free(extend_info_t *info);
const node_t *build_state_get_exit_node(cpath_build_state_t *state);
const char *build_state_get_exit_nickname(cpath_build_state_t *state);
-void entry_guards_compute_status(const or_options_t *options, time_t now);
-int entry_guard_register_connect_status(const char *digest, int succeeded,
- int mark_relay_status, time_t now);
-void entry_nodes_should_be_added(void);
-int entry_list_is_constrained(const or_options_t *options);
-const node_t *choose_random_entry(cpath_build_state_t *state);
-int entry_guards_parse_state(or_state_t *state, int set, char **msg);
-void entry_guards_update_state(or_state_t *state);
-int getinfo_helper_entry_guards(control_connection_t *conn,
- const char *question, char **answer,
- const char **errmsg);
-
-void mark_bridge_list(void);
-void sweep_bridge_list(void);
-void mark_transport_list(void);
-void sweep_transport_list(void);
-
-int routerinfo_is_a_configured_bridge(const routerinfo_t *ri);
-int node_is_a_configured_bridge(const node_t *node);
-void learned_router_identity(const tor_addr_t *addr, uint16_t port,
- const char *digest);
-void bridge_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *digest,
- const char *transport_name);
-void retry_bridge_descriptor_fetch_directly(const char *digest);
-void fetch_bridge_descriptors(const or_options_t *options, time_t now);
-void learned_bridge_descriptor(routerinfo_t *ri, int from_cache);
-int any_bridge_descriptors_known(void);
-int any_pending_bridge_descriptor_fetches(void);
-int entries_known_but_down(const or_options_t *options);
-void entries_retry_all(const or_options_t *options);
-
-int any_bridges_dont_support_microdescriptors(void);
-
-void entry_guards_free_all(void);
-
-extern circuit_build_times_t circ_times;
-int circuit_build_times_enough_to_compute(circuit_build_times_t *cbt);
-void circuit_build_times_update_state(circuit_build_times_t *cbt,
- or_state_t *state);
-int circuit_build_times_parse_state(circuit_build_times_t *cbt,
- or_state_t *state);
-void circuit_build_times_count_timeout(circuit_build_times_t *cbt,
- int did_onehop);
-int circuit_build_times_count_close(circuit_build_times_t *cbt,
- int did_onehop, time_t start_time);
-void circuit_build_times_set_timeout(circuit_build_times_t *cbt);
-int circuit_build_times_add_time(circuit_build_times_t *cbt,
- build_time_t time);
-int circuit_build_times_needs_circuits(circuit_build_times_t *cbt);
-
-int circuit_build_times_needs_circuits_now(circuit_build_times_t *cbt);
-void circuit_build_times_init(circuit_build_times_t *cbt);
-void circuit_build_times_free_timeouts(circuit_build_times_t *cbt);
-void circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
- networkstatus_t *ns);
-double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt);
-double circuit_build_times_close_rate(const circuit_build_times_t *cbt);
+const node_t *choose_good_entry_server(uint8_t purpose,
+ cpath_build_state_t *state);
-#ifdef CIRCUIT_PRIVATE
-double circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
- double quantile);
-build_time_t circuit_build_times_generate_sample(circuit_build_times_t *cbt,
- double q_lo, double q_hi);
-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);
+#ifdef CIRCUITBUILD_PRIVATE
+STATIC circid_t get_unique_circ_id_by_chan(channel_t *chan);
#endif
-/* Network liveness functions */
-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);
-
-void clear_transport_list(void);
-int transport_add_from_config(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver);
-int transport_add(transport_t *t);
-void transport_free(transport_t *transport);
-transport_t *transport_new(const tor_addr_t *addr, uint16_t port,
- const char *name, int socks_ver);
-
-/* DOCDOC find_transport_name_by_bridge_addrport */
-const char *find_transport_name_by_bridge_addrport(const tor_addr_t *addr,
- uint16_t port);
-
-int find_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
- const transport_t **transport);
-transport_t *transport_get_by_name(const char *name);
-
#endif
diff --git a/src/or/circuitlist.c b/src/or/circuitlist.c
index 93ba69dcf..6238e08e1 100644
--- a/src/or/circuitlist.c
+++ b/src/or/circuitlist.c
@@ -1,18 +1,21 @@
/* Copyright 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file circuitlist.c
* \brief Manage the global circuit list.
**/
-
+#define CIRCUITLIST_PRIVATE
#include "or.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
+#include "circuitstats.h"
#include "connection.h"
#include "config.h"
#include "connection_edge.h"
@@ -21,176 +24,339 @@
#include "networkstatus.h"
#include "nodelist.h"
#include "onion.h"
+#include "onion_fast.h"
+#include "policies.h"
#include "relay.h"
#include "rendclient.h"
#include "rendcommon.h"
#include "rephist.h"
#include "routerlist.h"
+#include "routerset.h"
+
#include "ht.h"
/********* START VARIABLES **********/
/** A global list of all circuits at this hop. */
-circuit_t *global_circuitlist=NULL;
+struct global_circuitlist_s global_circuitlist =
+ TOR_LIST_HEAD_INITIALIZER(global_circuitlist);
-/** A list of all the circuits in CIRCUIT_STATE_OR_WAIT. */
-static smartlist_t *circuits_pending_or_conns=NULL;
+/** 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);
+//static void circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ,
+// const uint8_t *token);
+static void circuit_clear_rend_token(or_circuit_t *circ);
/********* END VARIABLES ************/
-/** A map from OR connection and circuit ID to circuit. (Lookup performance is
+/** A map from channel and circuit ID to circuit. (Lookup performance is
* very important here, since we need to do it every time a cell arrives.) */
-typedef struct orconn_circid_circuit_map_t {
- HT_ENTRY(orconn_circid_circuit_map_t) node;
- or_connection_t *or_conn;
+typedef struct chan_circid_circuit_map_t {
+ HT_ENTRY(chan_circid_circuit_map_t) node;
+ channel_t *chan;
circid_t circ_id;
circuit_t *circuit;
-} orconn_circid_circuit_map_t;
+} chan_circid_circuit_map_t;
-/** Helper for hash tables: compare the OR connection and circuit ID for a and
+/** Helper for hash tables: compare the channel and circuit ID for a and
* b, and return less than, equal to, or greater than zero appropriately.
*/
static INLINE int
-_orconn_circid_entries_eq(orconn_circid_circuit_map_t *a,
- orconn_circid_circuit_map_t *b)
+chan_circid_entries_eq_(chan_circid_circuit_map_t *a,
+ chan_circid_circuit_map_t *b)
{
- return a->or_conn == b->or_conn && a->circ_id == b->circ_id;
+ return a->chan == b->chan && a->circ_id == b->circ_id;
}
/** Helper: return a hash based on circuit ID and the pointer value of
- * or_conn in <b>a</b>. */
+ * chan in <b>a</b>. */
static INLINE unsigned int
-_orconn_circid_entry_hash(orconn_circid_circuit_map_t *a)
+chan_circid_entry_hash_(chan_circid_circuit_map_t *a)
{
- return (((unsigned)a->circ_id)<<8) ^ (unsigned)(uintptr_t)(a->or_conn);
+ /* Try to squeze the siphash input into 8 bytes to save any extra siphash
+ * rounds. This hash function is in the critical path. */
+ uintptr_t chan = (uintptr_t) (void*) a->chan;
+ uint32_t array[2];
+ array[0] = a->circ_id;
+ /* The low bits of the channel pointer are uninteresting, since the channel
+ * is a pretty big structure. */
+ array[1] = (uint32_t) (chan >> 6);
+ return (unsigned) siphash24g(array, sizeof(array));
}
-/** Map from [orconn,circid] to circuit. */
-static HT_HEAD(orconn_circid_map, orconn_circid_circuit_map_t)
- orconn_circid_circuit_map = HT_INITIALIZER();
-HT_PROTOTYPE(orconn_circid_map, orconn_circid_circuit_map_t, node,
- _orconn_circid_entry_hash, _orconn_circid_entries_eq)
-HT_GENERATE(orconn_circid_map, orconn_circid_circuit_map_t, node,
- _orconn_circid_entry_hash, _orconn_circid_entries_eq, 0.6,
+/** Map from [chan,circid] to circuit. */
+static HT_HEAD(chan_circid_map, chan_circid_circuit_map_t)
+ chan_circid_map = HT_INITIALIZER();
+HT_PROTOTYPE(chan_circid_map, chan_circid_circuit_map_t, node,
+ chan_circid_entry_hash_, chan_circid_entries_eq_)
+HT_GENERATE(chan_circid_map, chan_circid_circuit_map_t, node,
+ chan_circid_entry_hash_, chan_circid_entries_eq_, 0.6,
malloc, realloc, free)
-/** The most recently returned entry from circuit_get_by_circid_orconn;
+/** The most recently returned entry from circuit_get_by_circid_chan;
* used to improve performance when many cells arrive in a row from the
* same circuit.
*/
-orconn_circid_circuit_map_t *_last_circid_orconn_ent = NULL;
+chan_circid_circuit_map_t *_last_circid_chan_ent = NULL;
-/** Implementation helper for circuit_set_{p,n}_circid_orconn: A circuit ID
- * and/or or_connection for circ has just changed from <b>old_conn, old_id</b>
- * to <b>conn, id</b>. Adjust the conn,circid map as appropriate, removing
+/** Implementation helper for circuit_set_{p,n}_circid_channel: A circuit ID
+ * and/or channel for circ has just changed from <b>old_chan, old_id</b>
+ * to <b>chan, id</b>. Adjust the chan,circid map as appropriate, removing
* the old entry (if any) and adding a new one. */
static void
-circuit_set_circid_orconn_helper(circuit_t *circ, int direction,
- circid_t id,
- or_connection_t *conn)
+circuit_set_circid_chan_helper(circuit_t *circ, int direction,
+ circid_t id,
+ channel_t *chan)
{
- orconn_circid_circuit_map_t search;
- orconn_circid_circuit_map_t *found;
- or_connection_t *old_conn, **conn_ptr;
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *found;
+ channel_t *old_chan, **chan_ptr;
circid_t old_id, *circid_ptr;
- int was_active, make_active;
+ int make_active, attached = 0;
if (direction == CELL_DIRECTION_OUT) {
- conn_ptr = &circ->n_conn;
+ chan_ptr = &circ->n_chan;
circid_ptr = &circ->n_circ_id;
- was_active = circ->next_active_on_n_conn != NULL;
- make_active = circ->n_conn_cells.n > 0;
+ make_active = circ->n_chan_cells.n > 0;
} else {
or_circuit_t *c = TO_OR_CIRCUIT(circ);
- conn_ptr = &c->p_conn;
+ chan_ptr = &c->p_chan;
circid_ptr = &c->p_circ_id;
- was_active = c->next_active_on_p_conn != NULL;
- make_active = c->p_conn_cells.n > 0;
+ make_active = c->p_chan_cells.n > 0;
}
- old_conn = *conn_ptr;
+ old_chan = *chan_ptr;
old_id = *circid_ptr;
- if (id == old_id && conn == old_conn)
+ if (id == old_id && chan == old_chan)
return;
- if (_last_circid_orconn_ent &&
- ((old_id == _last_circid_orconn_ent->circ_id &&
- old_conn == _last_circid_orconn_ent->or_conn) ||
- (id == _last_circid_orconn_ent->circ_id &&
- conn == _last_circid_orconn_ent->or_conn))) {
- _last_circid_orconn_ent = NULL;
+ if (_last_circid_chan_ent &&
+ ((old_id == _last_circid_chan_ent->circ_id &&
+ old_chan == _last_circid_chan_ent->chan) ||
+ (id == _last_circid_chan_ent->circ_id &&
+ chan == _last_circid_chan_ent->chan))) {
+ _last_circid_chan_ent = NULL;
}
- if (old_conn) { /* we may need to remove it from the conn-circid map */
- tor_assert(old_conn->_base.magic == OR_CONNECTION_MAGIC);
+ if (old_chan) {
+ /*
+ * If we're changing channels or ID and had an old channel and a non
+ * zero old ID and weren't marked for close (i.e., we should have been
+ * attached), detach the circuit. ID changes require this because
+ * circuitmux hashes on (channel_id, circuit_id).
+ */
+ if (old_id != 0 && (old_chan != chan || old_id != id) &&
+ !(circ->marked_for_close)) {
+ tor_assert(old_chan->cmux);
+ circuitmux_detach_circuit(old_chan->cmux, circ);
+ }
+
+ /* we may need to remove it from the conn-circid map */
search.circ_id = old_id;
- search.or_conn = old_conn;
- found = HT_REMOVE(orconn_circid_map, &orconn_circid_circuit_map, &search);
+ search.chan = old_chan;
+ found = HT_REMOVE(chan_circid_map, &chan_circid_map, &search);
if (found) {
tor_free(found);
- --old_conn->n_circuits;
+ if (direction == CELL_DIRECTION_OUT) {
+ /* One fewer circuits use old_chan as n_chan */
+ --(old_chan->num_n_circuits);
+ } else {
+ /* One fewer circuits use old_chan as p_chan */
+ --(old_chan->num_p_circuits);
+ }
}
- if (was_active && old_conn != conn)
- make_circuit_inactive_on_conn(circ,old_conn);
}
/* Change the values only after we have possibly made the circuit inactive
- * on the previous conn. */
- *conn_ptr = conn;
+ * on the previous chan. */
+ *chan_ptr = chan;
*circid_ptr = id;
- if (conn == NULL)
+ if (chan == NULL)
return;
/* now add the new one to the conn-circid map */
search.circ_id = id;
- search.or_conn = conn;
- found = HT_FIND(orconn_circid_map, &orconn_circid_circuit_map, &search);
+ search.chan = chan;
+ found = HT_FIND(chan_circid_map, &chan_circid_map, &search);
if (found) {
found->circuit = circ;
} else {
- found = tor_malloc_zero(sizeof(orconn_circid_circuit_map_t));
+ found = tor_malloc_zero(sizeof(chan_circid_circuit_map_t));
found->circ_id = id;
- found->or_conn = conn;
+ found->chan = chan;
found->circuit = circ;
- HT_INSERT(orconn_circid_map, &orconn_circid_circuit_map, found);
+ HT_INSERT(chan_circid_map, &chan_circid_map, found);
+ }
+
+ /*
+ * Attach to the circuitmux if we're changing channels or IDs and
+ * have a new channel and ID to use and the circuit is not marked for
+ * close.
+ */
+ if (chan && id != 0 && (old_chan != chan || old_id != id) &&
+ !(circ->marked_for_close)) {
+ tor_assert(chan->cmux);
+ circuitmux_attach_circuit(chan->cmux, circ, direction);
+ attached = 1;
+ }
+
+ /*
+ * This is a no-op if we have no cells, but if we do it marks us active to
+ * the circuitmux
+ */
+ if (make_active && attached)
+ update_circuit_on_cmux(circ, direction);
+
+ /* Adjust circuit counts on new channel */
+ if (direction == CELL_DIRECTION_OUT) {
+ ++chan->num_n_circuits;
+ } else {
+ ++chan->num_p_circuits;
+ }
+}
+
+/** Mark that circuit id <b>id</b> shouldn't be used on channel <b>chan</b>,
+ * even if there is no circuit on the channel. We use this to keep the
+ * circuit id from getting re-used while we have queued but not yet sent
+ * a destroy cell. */
+void
+channel_mark_circid_unusable(channel_t *chan, circid_t id)
+{
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *ent;
+
+ /* See if there's an entry there. That wouldn't be good. */
+ memset(&search, 0, sizeof(search));
+ search.chan = chan;
+ search.circ_id = id;
+ ent = HT_FIND(chan_circid_map, &chan_circid_map, &search);
+
+ if (ent && ent->circuit) {
+ /* we have a problem. */
+ log_warn(LD_BUG, "Tried to mark %u unusable on %p, but there was already "
+ "a circuit there.", (unsigned)id, chan);
+ } else if (ent) {
+ /* It's already marked. */
+ } else {
+ ent = tor_malloc_zero(sizeof(chan_circid_circuit_map_t));
+ ent->chan = chan;
+ ent->circ_id = id;
+ /* leave circuit at NULL */
+ HT_INSERT(chan_circid_map, &chan_circid_map, ent);
+ }
+}
+
+/** Mark that a circuit id <b>id</b> can be used again on <b>chan</b>.
+ * We use this to re-enable the circuit ID after we've sent a destroy cell.
+ */
+void
+channel_mark_circid_usable(channel_t *chan, circid_t id)
+{
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *ent;
+
+ /* See if there's an entry there. That wouldn't be good. */
+ memset(&search, 0, sizeof(search));
+ search.chan = chan;
+ search.circ_id = id;
+ ent = HT_REMOVE(chan_circid_map, &chan_circid_map, &search);
+ if (ent && ent->circuit) {
+ log_warn(LD_BUG, "Tried to mark %u usable on %p, but there was already "
+ "a circuit there.", (unsigned)id, chan);
+ return;
+ }
+ if (_last_circid_chan_ent == ent)
+ _last_circid_chan_ent = NULL;
+ tor_free(ent);
+}
+
+/** Called to indicate that a DESTROY is pending on <b>chan</b> with
+ * circuit ID <b>id</b>, but hasn't been sent yet. */
+void
+channel_note_destroy_pending(channel_t *chan, circid_t id)
+{
+ circuit_t *circ = circuit_get_by_circid_channel_even_if_marked(id,chan);
+ if (circ) {
+ if (circ->n_chan == chan && circ->n_circ_id == id) {
+ circ->n_delete_pending = 1;
+ } else {
+ or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
+ if (orcirc->p_chan == chan && orcirc->p_circ_id == id) {
+ circ->p_delete_pending = 1;
+ }
+ }
+ return;
}
- if (make_active && old_conn != conn)
- make_circuit_active_on_conn(circ,conn);
+ channel_mark_circid_unusable(chan, id);
+}
- ++conn->n_circuits;
+/** Called to indicate that a DESTROY is no longer pending on <b>chan</b> with
+ * circuit ID <b>id</b> -- typically, because it has been sent. */
+void
+channel_note_destroy_not_pending(channel_t *chan, circid_t id)
+{
+ circuit_t *circ = circuit_get_by_circid_channel_even_if_marked(id,chan);
+ if (circ) {
+ if (circ->n_chan == chan && circ->n_circ_id == id) {
+ circ->n_delete_pending = 0;
+ } else {
+ or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
+ if (orcirc->p_chan == chan && orcirc->p_circ_id == id) {
+ circ->p_delete_pending = 0;
+ }
+ }
+ /* XXXX this shouldn't happen; log a bug here. */
+ return;
+ }
+ channel_mark_circid_usable(chan, id);
}
/** Set the p_conn field of a circuit <b>circ</b>, along
* with the corresponding circuit ID, and add the circuit as appropriate
- * to the (orconn,id)-\>circuit map. */
+ * to the (chan,id)-\>circuit map. */
void
-circuit_set_p_circid_orconn(or_circuit_t *circ, circid_t id,
- or_connection_t *conn)
+circuit_set_p_circid_chan(or_circuit_t *or_circ, circid_t id,
+ channel_t *chan)
{
- circuit_set_circid_orconn_helper(TO_CIRCUIT(circ), CELL_DIRECTION_IN,
- id, conn);
+ circuit_t *circ = TO_CIRCUIT(or_circ);
+ channel_t *old_chan = or_circ->p_chan;
+ circid_t old_id = or_circ->p_circ_id;
+
+ circuit_set_circid_chan_helper(circ, CELL_DIRECTION_IN, id, chan);
- if (conn)
- tor_assert(bool_eq(circ->p_conn_cells.n, circ->next_active_on_p_conn));
+ if (chan)
+ tor_assert(bool_eq(or_circ->p_chan_cells.n,
+ or_circ->next_active_on_p_chan));
+
+ if (circ->p_delete_pending && old_chan) {
+ channel_mark_circid_unusable(old_chan, old_id);
+ circ->p_delete_pending = 0;
+ }
}
/** Set the n_conn field of a circuit <b>circ</b>, along
* with the corresponding circuit ID, and add the circuit as appropriate
- * to the (orconn,id)-\>circuit map. */
+ * to the (chan,id)-\>circuit map. */
void
-circuit_set_n_circid_orconn(circuit_t *circ, circid_t id,
- or_connection_t *conn)
+circuit_set_n_circid_chan(circuit_t *circ, circid_t id,
+ channel_t *chan)
{
- circuit_set_circid_orconn_helper(circ, CELL_DIRECTION_OUT, id, conn);
+ channel_t *old_chan = circ->n_chan;
+ circid_t old_id = circ->n_circ_id;
+
+ circuit_set_circid_chan_helper(circ, CELL_DIRECTION_OUT, id, chan);
+
+ if (chan)
+ tor_assert(bool_eq(circ->n_chan_cells.n, circ->next_active_on_n_chan));
- if (conn)
- tor_assert(bool_eq(circ->n_conn_cells.n, circ->next_active_on_n_conn));
+ if (circ->n_delete_pending && old_chan) {
+ channel_mark_circid_unusable(old_chan, old_id);
+ circ->n_delete_pending = 0;
+ }
}
/** Change the state of <b>circ</b> to <b>state</b>, adding it to or removing
@@ -201,81 +367,68 @@ circuit_set_state(circuit_t *circ, uint8_t state)
tor_assert(circ);
if (state == circ->state)
return;
- if (!circuits_pending_or_conns)
- circuits_pending_or_conns = smartlist_new();
- if (circ->state == CIRCUIT_STATE_OR_WAIT) {
+ if (!circuits_pending_chans)
+ circuits_pending_chans = smartlist_new();
+ if (circ->state == CIRCUIT_STATE_CHAN_WAIT) {
/* remove from waiting-circuit list. */
- smartlist_remove(circuits_pending_or_conns, circ);
+ smartlist_remove(circuits_pending_chans, circ);
}
- if (state == CIRCUIT_STATE_OR_WAIT) {
+ if (state == CIRCUIT_STATE_CHAN_WAIT) {
/* add to waiting-circuit list. */
- smartlist_add(circuits_pending_or_conns, circ);
+ smartlist_add(circuits_pending_chans, circ);
}
if (state == CIRCUIT_STATE_OPEN)
- tor_assert(!circ->n_conn_onionskin);
+ tor_assert(!circ->n_chan_create_cell);
circ->state = state;
}
-/** Add <b>circ</b> to the global list of circuits. This is called only from
- * within circuit_new.
- */
-static void
-circuit_add(circuit_t *circ)
-{
- if (!global_circuitlist) { /* first one */
- global_circuitlist = circ;
- circ->next = NULL;
- } else {
- circ->next = global_circuitlist;
- global_circuitlist = circ;
- }
-}
-
-/** Append to <b>out</b> all circuits in state OR_WAIT waiting for
+/** Append to <b>out</b> all circuits in state CHAN_WAIT waiting for
* the given connection. */
void
-circuit_get_all_pending_on_or_conn(smartlist_t *out, or_connection_t *or_conn)
+circuit_get_all_pending_on_channel(smartlist_t *out, channel_t *chan)
{
tor_assert(out);
- tor_assert(or_conn);
+ tor_assert(chan);
- if (!circuits_pending_or_conns)
+ if (!circuits_pending_chans)
return;
- SMARTLIST_FOREACH_BEGIN(circuits_pending_or_conns, circuit_t *, circ) {
+ SMARTLIST_FOREACH_BEGIN(circuits_pending_chans, circuit_t *, circ) {
if (circ->marked_for_close)
continue;
if (!circ->n_hop)
continue;
- tor_assert(circ->state == CIRCUIT_STATE_OR_WAIT);
+ tor_assert(circ->state == CIRCUIT_STATE_CHAN_WAIT);
if (tor_digest_is_zero(circ->n_hop->identity_digest)) {
/* Look at addr/port. This is an unkeyed connection. */
- if (!tor_addr_eq(&circ->n_hop->addr, &or_conn->_base.addr) ||
- circ->n_hop->port != or_conn->_base.port)
+ if (!channel_matches_extend_info(chan, circ->n_hop))
continue;
} else {
/* We expected a key. See if it's the right one. */
- if (tor_memneq(or_conn->identity_digest,
- circ->n_hop->identity_digest, DIGEST_LEN))
+ if (tor_memneq(chan->identity_digest,
+ circ->n_hop->identity_digest, DIGEST_LEN))
continue;
}
smartlist_add(out, circ);
} SMARTLIST_FOREACH_END(circ);
}
-/** Return the number of circuits in state OR_WAIT, waiting for the given
- * connection. */
+/** Return the number of circuits in state CHAN_WAIT, waiting for the given
+ * channel. */
int
-circuit_count_pending_on_or_conn(or_connection_t *or_conn)
+circuit_count_pending_on_channel(channel_t *chan)
{
int cnt;
smartlist_t *sl = smartlist_new();
- circuit_get_all_pending_on_or_conn(sl, or_conn);
+
+ tor_assert(chan);
+
+ circuit_get_all_pending_on_channel(sl, chan);
cnt = smartlist_len(sl);
smartlist_free(sl);
log_debug(LD_CIRC,"or_conn to %s at %s, %d pending circs",
- or_conn->nickname ? or_conn->nickname : "NULL",
- or_conn->_base.address,
+ chan->nickname ? chan->nickname : "NULL",
+ channel_get_canonical_remote_descr(chan),
cnt);
return cnt;
}
@@ -286,33 +439,17 @@ circuit_count_pending_on_or_conn(or_connection_t *or_conn)
void
circuit_close_all_marked(void)
{
- circuit_t *tmp,*m;
-
- while (global_circuitlist && global_circuitlist->marked_for_close) {
- tmp = global_circuitlist->next;
- circuit_free(global_circuitlist);
- global_circuitlist = tmp;
- }
-
- tmp = global_circuitlist;
- while (tmp && tmp->next) {
- if (tmp->next->marked_for_close) {
- m = tmp->next->next;
- circuit_free(tmp->next);
- tmp->next = m;
- /* Need to check new tmp->next; don't advance tmp. */
- } else {
- /* Advance tmp. */
- tmp = tmp->next;
- }
- }
+ circuit_t *circ, *tmp;
+ TOR_LIST_FOREACH_SAFE(circ, &global_circuitlist, head, tmp)
+ if (circ->marked_for_close)
+ circuit_free(circ);
}
/** Return the head of the global linked list of circuits. */
-circuit_t *
-_circuit_get_global_list(void)
+MOCK_IMPL(struct global_circuitlist_s *,
+circuit_get_global_list,(void))
{
- return global_circuitlist;
+ return &global_circuitlist;
}
/** Function to make circ-\>state human-readable */
@@ -323,7 +460,7 @@ circuit_state_to_string(int state)
switch (state) {
case CIRCUIT_STATE_BUILDING: return "doing handshakes";
case CIRCUIT_STATE_ONIONSKIN_PENDING: return "processing the onion";
- case CIRCUIT_STATE_OR_WAIT: return "connecting to server";
+ case CIRCUIT_STATE_CHAN_WAIT: return "connecting to server";
case CIRCUIT_STATE_OPEN: return "open";
default:
log_warn(LD_BUG, "Unknown circuit state %d", state);
@@ -372,6 +509,8 @@ circuit_purpose_to_controller_string(uint8_t purpose)
return "MEASURE_TIMEOUT";
case CIRCUIT_PURPOSE_CONTROLLER:
return "CONTROLLER";
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
+ return "PATH_BIAS_TESTING";
default:
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
@@ -399,6 +538,7 @@ circuit_purpose_to_controller_hs_state_string(uint8_t purpose)
case CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT:
case CIRCUIT_PURPOSE_TESTING:
case CIRCUIT_PURPOSE_CONTROLLER:
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
return NULL;
case CIRCUIT_PURPOSE_INTRO_POINT:
@@ -486,6 +626,9 @@ circuit_purpose_to_string(uint8_t purpose)
case CIRCUIT_PURPOSE_CONTROLLER:
return "Circuit made by controller";
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
+ return "Path-bias testing circuit";
+
default:
tor_snprintf(buf, sizeof(buf), "UNKNOWN_%d", (int)purpose);
return buf;
@@ -514,16 +657,16 @@ init_circuit_base(circuit_t *circ)
{
tor_gettimeofday(&circ->timestamp_created);
+ // Gets reset when we send CREATE_FAST.
+ // circuit_expire_building() expects these to be equal
+ // until the orconn is built.
+ circ->timestamp_began = circ->timestamp_created;
+
circ->package_window = circuit_initial_package_window();
circ->deliver_window = CIRCWINDOW_START;
+ cell_queue_init(&circ->n_chan_cells);
- /* Initialize the cell_ewma_t structure */
- circ->n_cell_ewma.last_adjusted_tick = cell_ewma_get_tick();
- circ->n_cell_ewma.cell_count = 0.0;
- circ->n_cell_ewma.heap_index = -1;
- circ->n_cell_ewma.is_for_p_conn = 0;
-
- circuit_add(circ);
+ TOR_LIST_INSERT_HEAD(&global_circuitlist, circ, head);
}
/** Allocate space for a new circuit, initializing with <b>p_circ_id</b>
@@ -538,7 +681,7 @@ origin_circuit_new(void)
static uint32_t n_circuits_allocated = 1;
circ = tor_malloc_zero(sizeof(origin_circuit_t));
- circ->_base.magic = ORIGIN_CIRCUIT_MAGIC;
+ circ->base_.magic = ORIGIN_CIRCUIT_MAGIC;
circ->next_stream_id = crypto_rand_int(1<<16);
circ->global_identifier = n_circuits_allocated++;
@@ -547,7 +690,7 @@ origin_circuit_new(void)
init_circuit_base(TO_CIRCUIT(circ));
- circ_times.last_circ_at = approx_time();
+ circuit_build_times_update_last_circ(get_circuit_build_times_mutable());
return circ;
}
@@ -555,37 +698,28 @@ origin_circuit_new(void)
/** Allocate a new or_circuit_t, connected to <b>p_conn</b> as
* <b>p_circ_id</b>. If <b>p_conn</b> is NULL, the circuit is unattached. */
or_circuit_t *
-or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn)
+or_circuit_new(circid_t p_circ_id, channel_t *p_chan)
{
/* CircIDs */
or_circuit_t *circ;
circ = tor_malloc_zero(sizeof(or_circuit_t));
- circ->_base.magic = OR_CIRCUIT_MAGIC;
+ circ->base_.magic = OR_CIRCUIT_MAGIC;
- if (p_conn)
- circuit_set_p_circid_orconn(circ, p_circ_id, p_conn);
+ if (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));
- /* Initialize the cell_ewma_t structure */
-
- /* Initialize the cell counts to 0 */
- circ->p_cell_ewma.cell_count = 0.0;
- circ->p_cell_ewma.last_adjusted_tick = cell_ewma_get_tick();
- circ->p_cell_ewma.is_for_p_conn = 1;
-
- /* It's not in any heap yet. */
- circ->p_cell_ewma.heap_index = -1;
-
return circ;
}
/** Deallocate space associated with circ.
*/
-static void
+STATIC void
circuit_free(circuit_t *circ)
{
void *mem;
@@ -605,7 +739,7 @@ circuit_free(circuit_t *circ)
}
tor_free(ocirc->build_state);
- circuit_free_cpath(ocirc->cpath);
+ circuit_clear_cpath(ocirc);
crypto_pk_free(ocirc->intro_key);
rend_data_free(ocirc->rend_data);
@@ -619,6 +753,7 @@ circuit_free(circuit_t *circ)
memwipe(ocirc->socks_password, 0x06, ocirc->socks_password_len);
tor_free(ocirc->socks_password);
}
+ addr_policy_list_free(ocirc->prepend_policy);
} else {
or_circuit_t *ocirc = TO_OR_CIRCUIT(circ);
/* Remember cell statistics for this circuit before deallocating. */
@@ -633,44 +768,51 @@ circuit_free(circuit_t *circ)
crypto_cipher_free(ocirc->n_crypto);
crypto_digest_free(ocirc->n_digest);
+ circuit_clear_rend_token(ocirc);
+
if (ocirc->rend_splice) {
or_circuit_t *other = ocirc->rend_splice;
- tor_assert(other->_base.magic == OR_CIRCUIT_MAGIC);
+ tor_assert(other->base_.magic == OR_CIRCUIT_MAGIC);
other->rend_splice = NULL;
}
/* remove from map. */
- circuit_set_p_circid_orconn(ocirc, 0, NULL);
+ circuit_set_p_circid_chan(ocirc, 0, NULL);
/* Clear cell queue _after_ removing it from the map. Otherwise our
* "active" checks will be violated. */
- cell_queue_clear(&ocirc->p_conn_cells);
+ cell_queue_clear(&ocirc->p_chan_cells);
}
extend_info_free(circ->n_hop);
- tor_free(circ->n_conn_onionskin);
+ tor_free(circ->n_chan_create_cell);
+
+ TOR_LIST_REMOVE(circ, head);
/* Remove from map. */
- circuit_set_n_circid_orconn(circ, 0, NULL);
+ circuit_set_n_circid_chan(circ, 0, NULL);
/* Clear cell queue _after_ removing it from the map. Otherwise our
* "active" checks will be violated. */
- cell_queue_clear(&circ->n_conn_cells);
+ cell_queue_clear(&circ->n_chan_cells);
memwipe(mem, 0xAA, memlen); /* poison memory */
tor_free(mem);
}
-/** Deallocate space associated with the linked list <b>cpath</b>. */
-static void
-circuit_free_cpath(crypt_path_t *cpath)
+/** Deallocate the linked list circ-><b>cpath</b>, and remove the cpath from
+ * <b>circ</b>. */
+void
+circuit_clear_cpath(origin_circuit_t *circ)
{
- crypt_path_t *victim, *head=cpath;
+ crypt_path_t *victim, *head, *cpath;
+
+ head = cpath = circ->cpath;
if (!cpath)
return;
- /* it's a doubly linked list, so we have to notice when we've
+ /* it's a circular list, so we have to notice when we've
* gone through it once. */
while (cpath->next && cpath->next != head) {
victim = cpath;
@@ -679,17 +821,19 @@ circuit_free_cpath(crypt_path_t *cpath)
}
circuit_free_cpath_node(cpath);
+
+ circ->cpath = NULL;
}
/** Release all storage held by circuits. */
void
circuit_free_all(void)
{
- circuit_t *next;
- while (global_circuitlist) {
- next = global_circuitlist->next;
- if (! CIRCUIT_IS_ORIGIN(global_circuitlist)) {
- or_circuit_t *or_circ = TO_OR_CIRCUIT(global_circuitlist);
+ circuit_t *tmp, *tmp2;
+
+ TOR_LIST_FOREACH_SAFE(tmp, &global_circuitlist, head, tmp2) {
+ if (! CIRCUIT_IS_ORIGIN(tmp)) {
+ or_circuit_t *or_circ = TO_OR_CIRCUIT(tmp);
while (or_circ->resolving_streams) {
edge_connection_t *next_conn;
next_conn = or_circ->resolving_streams->next_stream;
@@ -697,14 +841,25 @@ circuit_free_all(void)
or_circ->resolving_streams = next_conn;
}
}
- circuit_free(global_circuitlist);
- global_circuitlist = next;
+ circuit_free(tmp);
}
- smartlist_free(circuits_pending_or_conns);
- circuits_pending_or_conns = NULL;
+ smartlist_free(circuits_pending_chans);
+ circuits_pending_chans = NULL;
- HT_CLEAR(orconn_circid_map, &orconn_circid_circuit_map);
+ {
+ chan_circid_circuit_map_t **elt, **next, *c;
+ for (elt = HT_START(chan_circid_map, &chan_circid_map);
+ elt;
+ elt = next) {
+ c = *elt;
+ next = HT_NEXT_RMV(chan_circid_map, &chan_circid_map, elt);
+
+ tor_assert(c->circuit == NULL);
+ tor_free(c);
+ }
+ }
+ HT_CLEAR(chan_circid_map, &chan_circid_map);
}
/** Deallocate space associated with the cpath node <b>victim</b>. */
@@ -718,7 +873,8 @@ circuit_free_cpath_node(crypt_path_t *victim)
crypto_cipher_free(victim->b_crypto);
crypto_digest_free(victim->f_digest);
crypto_digest_free(victim->b_digest);
- crypto_dh_free(victim->dh_handshake_state);
+ onion_handshake_state_release(&victim->handshake_state);
+ crypto_dh_free(victim->rend_dh_handshake_state);
extend_info_free(victim->extend_info);
memwipe(victim, 0xBB, sizeof(crypt_path_t)); /* poison memory */
@@ -741,14 +897,18 @@ cpath_ref_decref(crypt_path_reference_t *cpath_ref)
* of information about circuit <b>circ</b>.
*/
static void
-circuit_dump_details(int severity, circuit_t *circ, int conn_array_index,
- const char *type, int this_circid, int other_circid)
-{
- log(severity, LD_CIRC, "Conn %d has %s circuit: circID %d (other side %d), "
- "state %d (%s), born %ld:",
- conn_array_index, type, this_circid, other_circid, circ->state,
- circuit_state_to_string(circ->state),
- (long)circ->timestamp_created.tv_sec);
+circuit_dump_conn_details(int severity,
+ circuit_t *circ,
+ int conn_array_index,
+ const char *type,
+ circid_t this_circid,
+ circid_t other_circid)
+{
+ tor_log(severity, LD_CIRC, "Conn %d has %s circuit: circID %u "
+ "(other side %u), state %d (%s), born %ld:",
+ conn_array_index, type, (unsigned)this_circid, (unsigned)other_circid,
+ circ->state, circuit_state_to_string(circ->state),
+ (long)circ->timestamp_began.tv_sec);
if (CIRCUIT_IS_ORIGIN(circ)) { /* circ starts at this node */
circuit_log_path(severity, LD_CIRC, TO_ORIGIN_CIRCUIT(circ));
}
@@ -763,51 +923,36 @@ circuit_dump_by_conn(connection_t *conn, int severity)
circuit_t *circ;
edge_connection_t *tmpconn;
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
circid_t n_circ_id = circ->n_circ_id, p_circ_id = 0;
- if (circ->marked_for_close)
+
+ if (circ->marked_for_close) {
continue;
+ }
- if (! CIRCUIT_IS_ORIGIN(circ))
+ if (!CIRCUIT_IS_ORIGIN(circ)) {
p_circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
- if (! CIRCUIT_IS_ORIGIN(circ) && TO_OR_CIRCUIT(circ)->p_conn &&
- TO_CONN(TO_OR_CIRCUIT(circ)->p_conn) == conn)
- circuit_dump_details(severity, circ, conn->conn_array_index, "App-ward",
- p_circ_id, n_circ_id);
if (CIRCUIT_IS_ORIGIN(circ)) {
for (tmpconn=TO_ORIGIN_CIRCUIT(circ)->p_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (TO_CONN(tmpconn) == conn) {
- circuit_dump_details(severity, circ, conn->conn_array_index,
- "App-ward", p_circ_id, n_circ_id);
+ circuit_dump_conn_details(severity, circ, conn->conn_array_index,
+ "App-ward", p_circ_id, n_circ_id);
}
}
}
- if (circ->n_conn && TO_CONN(circ->n_conn) == conn)
- circuit_dump_details(severity, circ, conn->conn_array_index, "Exit-ward",
- n_circ_id, p_circ_id);
+
if (! CIRCUIT_IS_ORIGIN(circ)) {
for (tmpconn=TO_OR_CIRCUIT(circ)->n_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (TO_CONN(tmpconn) == conn) {
- circuit_dump_details(severity, circ, conn->conn_array_index,
- "Exit-ward", n_circ_id, p_circ_id);
+ circuit_dump_conn_details(severity, circ, conn->conn_array_index,
+ "Exit-ward", n_circ_id, p_circ_id);
}
}
}
- if (!circ->n_conn && circ->n_hop &&
- tor_addr_eq(&circ->n_hop->addr, &conn->addr) &&
- circ->n_hop->port == conn->port &&
- conn->type == CONN_TYPE_OR &&
- tor_memeq(TO_OR_CONN(conn)->identity_digest,
- circ->n_hop->identity_digest, DIGEST_LEN)) {
- circuit_dump_details(severity, circ, conn->conn_array_index,
- (circ->state == CIRCUIT_STATE_OPEN &&
- !CIRCUIT_IS_ORIGIN(circ)) ?
- "Endpoint" : "Pending",
- n_circ_id, p_circ_id);
- }
}
}
@@ -817,7 +962,7 @@ origin_circuit_t *
circuit_get_by_global_id(uint32_t id)
{
circuit_t *circ;
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
TO_ORIGIN_CIRCUIT(circ)->global_identifier == id) {
if (circ->marked_for_close)
@@ -831,45 +976,67 @@ circuit_get_by_global_id(uint32_t id)
/** Return a circ such that:
* - circ-\>n_circ_id or circ-\>p_circ_id is equal to <b>circ_id</b>, and
- * - circ is attached to <b>conn</b>, either as p_conn or n_conn.
+ * - circ is attached to <b>chan</b>, either as p_chan or n_chan.
* Return NULL if no such circuit exists.
+ *
+ * If <b>found_entry_out</b> is provided, set it to true if we have a
+ * placeholder entry for circid/chan, and leave it unset otherwise.
*/
static INLINE circuit_t *
-circuit_get_by_circid_orconn_impl(circid_t circ_id, or_connection_t *conn)
+circuit_get_by_circid_channel_impl(circid_t circ_id, channel_t *chan,
+ int *found_entry_out)
{
- orconn_circid_circuit_map_t search;
- orconn_circid_circuit_map_t *found;
+ chan_circid_circuit_map_t search;
+ chan_circid_circuit_map_t *found;
- if (_last_circid_orconn_ent &&
- circ_id == _last_circid_orconn_ent->circ_id &&
- conn == _last_circid_orconn_ent->or_conn) {
- found = _last_circid_orconn_ent;
+ if (_last_circid_chan_ent &&
+ circ_id == _last_circid_chan_ent->circ_id &&
+ chan == _last_circid_chan_ent->chan) {
+ found = _last_circid_chan_ent;
} else {
search.circ_id = circ_id;
- search.or_conn = conn;
- found = HT_FIND(orconn_circid_map, &orconn_circid_circuit_map, &search);
- _last_circid_orconn_ent = found;
+ search.chan = chan;
+ found = HT_FIND(chan_circid_map, &chan_circid_map, &search);
+ _last_circid_chan_ent = found;
}
- if (found && found->circuit)
+ if (found && found->circuit) {
+ log_debug(LD_CIRC,
+ "circuit_get_by_circid_channel_impl() returning circuit %p for"
+ " circ_id %u, channel ID " U64_FORMAT " (%p)",
+ found->circuit, (unsigned)circ_id,
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+ if (found_entry_out)
+ *found_entry_out = 1;
return found->circuit;
+ }
+
+ log_debug(LD_CIRC,
+ "circuit_get_by_circid_channel_impl() found %s for"
+ " circ_id %u, channel ID " U64_FORMAT " (%p)",
+ found ? "placeholder" : "nothing",
+ (unsigned)circ_id,
+ U64_PRINTF_ARG(chan->global_identifier), chan);
+
+ if (found_entry_out)
+ *found_entry_out = found ? 1 : 0;
return NULL;
/* The rest of this checks for bugs. Disabled by default. */
/* We comment it out because coverity complains otherwise.
{
circuit_t *circ;
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (! CIRCUIT_IS_ORIGIN(circ)) {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
- if (or_circ->p_conn == conn && or_circ->p_circ_id == circ_id) {
+ if (or_circ->p_chan == chan && or_circ->p_circ_id == circ_id) {
log_warn(LD_BUG,
- "circuit matches p_conn, but not in hash table (Bug!)");
+ "circuit matches p_chan, but not in hash table (Bug!)");
return circ;
}
}
- if (circ->n_conn == conn && circ->n_circ_id == circ_id) {
+ if (circ->n_chan == chan && circ->n_circ_id == circ_id) {
log_warn(LD_BUG,
- "circuit matches n_conn, but not in hash table (Bug!)");
+ "circuit matches n_chan, but not in hash table (Bug!)");
return circ;
}
}
@@ -879,26 +1046,48 @@ circuit_get_by_circid_orconn_impl(circid_t circ_id, or_connection_t *conn)
/** Return a circ such that:
* - circ-\>n_circ_id or circ-\>p_circ_id is equal to <b>circ_id</b>, and
- * - circ is attached to <b>conn</b>, either as p_conn or n_conn.
+ * - circ is attached to <b>chan</b>, either as p_chan or n_chan.
* - circ is not marked for close.
* Return NULL if no such circuit exists.
*/
circuit_t *
-circuit_get_by_circid_orconn(circid_t circ_id, or_connection_t *conn)
+circuit_get_by_circid_channel(circid_t circ_id, channel_t *chan)
{
- circuit_t *circ = circuit_get_by_circid_orconn_impl(circ_id, conn);
+ circuit_t *circ = circuit_get_by_circid_channel_impl(circ_id, chan, NULL);
if (!circ || circ->marked_for_close)
return NULL;
else
return circ;
}
+/** Return a circ such that:
+ * - circ-\>n_circ_id or circ-\>p_circ_id is equal to <b>circ_id</b>, and
+ * - circ is attached to <b>chan</b>, either as p_chan or n_chan.
+ * Return NULL if no such circuit exists.
+ */
+circuit_t *
+circuit_get_by_circid_channel_even_if_marked(circid_t circ_id,
+ channel_t *chan)
+{
+ return circuit_get_by_circid_channel_impl(circ_id, chan, NULL);
+}
+
/** Return true iff the circuit ID <b>circ_id</b> is currently used by a
- * circuit, marked or not, on <b>conn</b>. */
+ * circuit, marked or not, on <b>chan</b>, or if the circ ID is reserved until
+ * a queued destroy cell can be sent.
+ *
+ * (Return 1 if the circuit is present, marked or not; Return 2
+ * if the circuit ID is pending a destroy.)
+ **/
int
-circuit_id_in_use_on_orconn(circid_t circ_id, or_connection_t *conn)
+circuit_id_in_use_on_channel(circid_t circ_id, channel_t *chan)
{
- return circuit_get_by_circid_orconn_impl(circ_id, conn) != NULL;
+ int found = 0;
+ if (circuit_get_by_circid_channel_impl(circ_id, chan, &found) != NULL)
+ return 1;
+ if (found)
+ return 2;
+ return 0;
}
/** Return the circuit that a given edge connection is using. */
@@ -915,33 +1104,91 @@ circuit_get_by_edge_conn(edge_connection_t *conn)
return circ;
}
-/** For each circuit that has <b>conn</b> as n_conn or p_conn, unlink the
- * circuit from the orconn,circid map, and mark it for close if it hasn't
+/** For each circuit that has <b>chan</b> as n_chan or p_chan, unlink the
+ * circuit from the chan,circid map, and mark it for close if it hasn't
* been marked already.
*/
void
-circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason)
+circuit_unlink_all_from_channel(channel_t *chan, int reason)
{
- circuit_t *circ;
+ smartlist_t *detached = smartlist_new();
+
+/* #define DEBUG_CIRCUIT_UNLINK_ALL */
+
+ channel_unlink_all_circuits(chan, detached);
- connection_or_unlink_all_active_circs(conn);
+#ifdef DEBUG_CIRCUIT_UNLINK_ALL
+ {
+ circuit_t *circ;
+ smartlist_t *detached_2 = smartlist_new();
+ int mismatch = 0, badlen = 0;
+
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
+ if (circ->n_chan == chan ||
+ (!CIRCUIT_IS_ORIGIN(circ) &&
+ TO_OR_CIRCUIT(circ)->p_chan == chan)) {
+ smartlist_add(detached_2, circ);
+ }
+ }
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ if (smartlist_len(detached) != smartlist_len(detached_2)) {
+ log_warn(LD_BUG, "List of detached circuits had the wrong length! "
+ "(got %d, should have gotten %d)",
+ (int)smartlist_len(detached),
+ (int)smartlist_len(detached_2));
+ badlen = 1;
+ }
+ smartlist_sort_pointers(detached);
+ smartlist_sort_pointers(detached_2);
+
+ SMARTLIST_FOREACH(detached, circuit_t *, c,
+ if (c != smartlist_get(detached_2, c_sl_idx))
+ mismatch = 1;
+ );
+
+ if (mismatch)
+ log_warn(LD_BUG, "Mismatch in list of detached circuits.");
+
+ if (badlen || mismatch) {
+ smartlist_free(detached);
+ detached = detached_2;
+ } else {
+ log_notice(LD_CIRC, "List of %d circuits was as expected.",
+ (int)smartlist_len(detached));
+ smartlist_free(detached_2);
+ }
+ }
+#endif
+
+ SMARTLIST_FOREACH_BEGIN(detached, circuit_t *, circ) {
int mark = 0;
- if (circ->n_conn == conn) {
- circuit_set_n_circid_orconn(circ, 0, NULL);
- mark = 1;
+ if (circ->n_chan == chan) {
+
+ circuit_set_n_circid_chan(circ, 0, NULL);
+ mark = 1;
+
+ /* If we didn't request this closure, pass the remote
+ * bit to mark_for_close. */
+ if (chan->reason_for_closing != CHANNEL_CLOSE_REQUESTED)
+ reason |= END_CIRC_REASON_FLAG_REMOTE;
}
if (! CIRCUIT_IS_ORIGIN(circ)) {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
- if (or_circ->p_conn == conn) {
- circuit_set_p_circid_orconn(or_circ, 0, NULL);
+ if (or_circ->p_chan == chan) {
+ circuit_set_p_circid_chan(or_circ, 0, NULL);
mark = 1;
}
}
- if (mark && !circ->marked_for_close)
+ if (!mark) {
+ log_warn(LD_BUG, "Circuit on detached list which I had no reason "
+ "to mark");
+ continue;
+ }
+ if (!circ->marked_for_close)
circuit_mark_for_close(circ, reason);
- }
+ } SMARTLIST_FOREACH_END(circ);
+
+ smartlist_free(detached);
}
/** Return a circ such that
@@ -957,8 +1204,7 @@ origin_circuit_t *
circuit_get_ready_rend_circ_by_rend_data(const rend_data_t *rend_data)
{
circuit_t *circ;
-
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (!circ->marked_for_close &&
circ->purpose == CIRCUIT_PURPOSE_C_REND_READY) {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
@@ -986,11 +1232,11 @@ circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
circuit_t *circ;
tor_assert(CIRCUIT_PURPOSE_IS_ORIGIN(purpose));
if (start == NULL)
- circ = global_circuitlist;
+ circ = TOR_LIST_FIRST(&global_circuitlist);
else
- circ = TO_CIRCUIT(start)->next;
+ circ = TOR_LIST_NEXT(TO_CIRCUIT(start), head);
- for ( ; circ; circ = circ->next) {
+ for ( ; circ; circ = TOR_LIST_NEXT(circ, head)) {
if (circ->marked_for_close)
continue;
if (circ->purpose != purpose)
@@ -1005,43 +1251,175 @@ circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
return NULL;
}
-/** Return the first OR circuit in the global list whose purpose is
- * <b>purpose</b>, and whose rend_token is the <b>len</b>-byte
- * <b>token</b>. */
+/** Map from rendezvous cookie to or_circuit_t */
+static digestmap_t *rend_cookie_map = NULL;
+
+/** Map from introduction point digest to or_circuit_t */
+static digestmap_t *intro_digest_map = NULL;
+
+/** Return the OR circuit whose purpose is <b>purpose</b>, and whose
+ * rend_token is the REND_TOKEN_LEN-byte <b>token</b>. If <b>is_rend_circ</b>,
+ * look for rendezvous point circuits; otherwise look for introduction point
+ * circuits. */
static or_circuit_t *
-circuit_get_by_rend_token_and_purpose(uint8_t purpose, const char *token,
- size_t len)
+circuit_get_by_rend_token_and_purpose(uint8_t purpose, int is_rend_circ,
+ const char *token)
{
- circuit_t *circ;
- for (circ = global_circuitlist; circ; circ = circ->next) {
- if (! circ->marked_for_close &&
- circ->purpose == purpose &&
- tor_memeq(TO_OR_CIRCUIT(circ)->rend_token, token, len))
- return TO_OR_CIRCUIT(circ);
+ or_circuit_t *circ;
+ digestmap_t *map = is_rend_circ ? rend_cookie_map : intro_digest_map;
+
+ if (!map)
+ return NULL;
+
+ circ = digestmap_get(map, token);
+ if (!circ ||
+ circ->base_.purpose != purpose ||
+ circ->base_.marked_for_close)
+ return NULL;
+
+ if (!circ->rendinfo) {
+ char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
+ log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned a "
+ "circuit with no rendinfo set.",
+ safe_str(t), is_rend_circ);
+ tor_free(t);
+ return NULL;
}
- return NULL;
+
+ if (! bool_eq(circ->rendinfo->is_rend_circ, is_rend_circ) ||
+ tor_memneq(circ->rendinfo->rend_token, token, REND_TOKEN_LEN)) {
+ char *t = tor_strdup(hex_str(token, REND_TOKEN_LEN));
+ log_warn(LD_BUG, "Wanted a circuit with %s:%d, but lookup returned %s:%d",
+ safe_str(t), is_rend_circ,
+ safe_str(hex_str(circ->rendinfo->rend_token, REND_TOKEN_LEN)),
+ (int)circ->rendinfo->is_rend_circ);
+ tor_free(t);
+ return NULL;
+ }
+
+ return circ;
+}
+
+/** Clear the rendezvous cookie or introduction point key digest that's
+ * configured on <b>circ</b>, if any, and remove it from any such maps. */
+static void
+circuit_clear_rend_token(or_circuit_t *circ)
+{
+ or_circuit_t *found_circ;
+ digestmap_t *map;
+
+ if (!circ || !circ->rendinfo)
+ return;
+
+ map = circ->rendinfo->is_rend_circ ? rend_cookie_map : intro_digest_map;
+
+ if (!map) {
+ log_warn(LD_BUG, "Tried to clear rend token on circuit, but found no map");
+ return;
+ }
+
+ found_circ = digestmap_get(map, circ->rendinfo->rend_token);
+ if (found_circ == circ) {
+ /* Great, this is the right one. */
+ digestmap_remove(map, circ->rendinfo->rend_token);
+ } else if (found_circ) {
+ log_warn(LD_BUG, "Tried to clear rend token on circuit, but "
+ "it was already replaced in the map.");
+ } else {
+ log_warn(LD_BUG, "Tried to clear rend token on circuit, but "
+ "it not in the map at all.");
+ }
+
+ tor_free(circ->rendinfo); /* Sets it to NULL too */
+}
+
+/** Set the rendezvous cookie (if is_rend_circ), or the introduction point
+ * digest (if ! is_rend_circ) of <b>circ</b> to the REND_TOKEN_LEN-byte value
+ * in <b>token</b>, and add it to the appropriate map. If it previously had a
+ * token, clear it. If another circuit previously had the same
+ * cookie/intro-digest, mark that circuit and remove it from the map. */
+static void
+circuit_set_rend_token(or_circuit_t *circ, int is_rend_circ,
+ const uint8_t *token)
+{
+ digestmap_t **map_p, *map;
+ or_circuit_t *found_circ;
+
+ /* Find the right map, creating it as needed */
+ map_p = is_rend_circ ? &rend_cookie_map : &intro_digest_map;
+
+ if (!*map_p)
+ *map_p = digestmap_new();
+
+ map = *map_p;
+
+ /* If this circuit already has a token, we need to remove that. */
+ if (circ->rendinfo)
+ circuit_clear_rend_token(circ);
+
+ if (token == NULL) {
+ /* We were only trying to remove this token, not set a new one. */
+ return;
+ }
+
+ found_circ = digestmap_get(map, (const char *)token);
+ if (found_circ) {
+ tor_assert(found_circ != circ);
+ circuit_clear_rend_token(found_circ);
+ if (! found_circ->base_.marked_for_close) {
+ circuit_mark_for_close(TO_CIRCUIT(found_circ), END_CIRC_REASON_FINISHED);
+ if (is_rend_circ) {
+ log_fn(LOG_PROTOCOL_WARN, LD_REND,
+ "Duplicate rendezvous cookie (%s...) used on two circuits",
+ hex_str((const char*)token, 4)); /* only log first 4 chars */
+ }
+ }
+ }
+
+ /* Now set up the rendinfo */
+ circ->rendinfo = tor_malloc(sizeof(*circ->rendinfo));
+ memcpy(circ->rendinfo->rend_token, token, REND_TOKEN_LEN);
+ circ->rendinfo->is_rend_circ = is_rend_circ ? 1 : 0;
+
+ digestmap_set(map, (const char *)token, circ);
}
/** Return the circuit waiting for a rendezvous with the provided cookie.
* Return NULL if no such circuit is found.
*/
or_circuit_t *
-circuit_get_rendezvous(const char *cookie)
+circuit_get_rendezvous(const uint8_t *cookie)
{
return circuit_get_by_rend_token_and_purpose(
CIRCUIT_PURPOSE_REND_POINT_WAITING,
- cookie, REND_COOKIE_LEN);
+ 1, (const char*)cookie);
}
/** Return the circuit waiting for intro cells of the given digest.
* Return NULL if no such circuit is found.
*/
or_circuit_t *
-circuit_get_intro_point(const char *digest)
+circuit_get_intro_point(const uint8_t *digest)
{
return circuit_get_by_rend_token_and_purpose(
- CIRCUIT_PURPOSE_INTRO_POINT, digest,
- DIGEST_LEN);
+ CIRCUIT_PURPOSE_INTRO_POINT, 0,
+ (const char *)digest);
+}
+
+/** Set the rendezvous cookie of <b>circ</b> to <b>cookie</b>. If another
+ * circuit previously had that cookie, mark it. */
+void
+circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie)
+{
+ circuit_set_rend_token(circ, 1, cookie);
+}
+
+/** Set the intro point key digest of <b>circ</b> to <b>cookie</b>. If another
+ * circuit previously had that intro point digest, mark it. */
+void
+circuit_set_intro_point_digest(or_circuit_t *circ, const uint8_t *digest)
+{
+ circuit_set_rend_token(circ, 0, digest);
}
/** Return a circuit that is open, is CIRCUIT_PURPOSE_C_GENERAL,
@@ -1059,7 +1437,7 @@ origin_circuit_t *
circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
int flags)
{
- circuit_t *_circ;
+ circuit_t *circ_;
origin_circuit_t *best=NULL;
int need_uptime = (flags & CIRCLAUNCH_NEED_UPTIME) != 0;
int need_capacity = (flags & CIRCLAUNCH_NEED_CAPACITY) != 0;
@@ -1075,16 +1453,17 @@ circuit_find_to_cannibalize(uint8_t purpose, extend_info_t *info,
"capacity %d, internal %d",
purpose, need_uptime, need_capacity, internal);
- for (_circ=global_circuitlist; _circ; _circ = _circ->next) {
- if (CIRCUIT_IS_ORIGIN(_circ) &&
- _circ->state == CIRCUIT_STATE_OPEN &&
- !_circ->marked_for_close &&
- _circ->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
- !_circ->timestamp_dirty) {
- origin_circuit_t *circ = TO_ORIGIN_CIRCUIT(_circ);
+ TOR_LIST_FOREACH(circ_, &global_circuitlist, head) {
+ if (CIRCUIT_IS_ORIGIN(circ_) &&
+ circ_->state == CIRCUIT_STATE_OPEN &&
+ !circ_->marked_for_close &&
+ circ_->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
+ !circ_->timestamp_dirty) {
+ origin_circuit_t *circ = TO_ORIGIN_CIRCUIT(circ_);
if ((!need_uptime || circ->build_state->need_uptime) &&
(!need_capacity || circ->build_state->need_capacity) &&
(internal == circ->build_state->is_internal) &&
+ !circ->unusable_for_new_conns &&
circ->remaining_relay_early_cells &&
circ->build_state->desired_path_len == DEFAULT_ROUTE_LEN &&
!circ->build_state->onehop_tunnel &&
@@ -1164,8 +1543,7 @@ void
circuit_mark_all_unused_circs(void)
{
circuit_t *circ;
-
- for (circ=global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
!circ->timestamp_dirty)
@@ -1180,20 +1558,16 @@ circuit_mark_all_unused_circs(void)
* This is useful for letting the user change pseudonyms, so new
* streams will not be linkable to old streams.
*/
-/* XXX024 this is a bad name for what this function does */
void
-circuit_expire_all_dirty_circs(void)
+circuit_mark_all_dirty_circs_as_unusable(void)
{
circuit_t *circ;
- const or_options_t *options = get_options();
-
- for (circ=global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
- circ->timestamp_dirty)
- /* XXXX024 This is a screwed-up way to say "This is too dirty
- * for new circuits. */
- circ->timestamp_dirty -= options->MaxCircuitDirtiness;
+ circ->timestamp_dirty) {
+ mark_circuit_unusable_for_new_conns(TO_ORIGIN_CIRCUIT(circ));
+ }
}
}
@@ -1214,9 +1588,9 @@ circuit_expire_all_dirty_circs(void)
* - If circ->rend_splice is set (we are the midpoint of a joined
* rendezvous stream), then mark the other circuit to close as well.
*/
-void
-_circuit_mark_for_close(circuit_t *circ, int reason, int line,
- const char *file)
+MOCK_IMPL(void,
+circuit_mark_for_close_, (circuit_t *circ, int reason, int line,
+ const char *file))
{
int orig_reason = reason; /* Passed to the controller */
assert_circuit_ok(circ);
@@ -1224,7 +1598,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
tor_assert(file);
if (circ->marked_for_close) {
- log(LOG_WARN,LD_BUG,
+ log_warn(LD_BUG,
"Duplicate call to circuit_mark_for_close at %s:%d"
" (first at %s:%d)", file, line,
circ->marked_for_close_file, circ->marked_for_close);
@@ -1238,7 +1612,13 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
}
reason = END_CIRC_REASON_NONE;
}
+
if (CIRCUIT_IS_ORIGIN(circ)) {
+ if (pathbias_check_close(TO_ORIGIN_CIRCUIT(circ), reason) == -1) {
+ /* Don't close it yet, we need to test it first */
+ return;
+ }
+
/* We don't send reasons when closing circuits at the origin. */
reason = END_CIRC_REASON_NONE;
}
@@ -1246,7 +1626,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
if (reason & END_CIRC_REASON_FLAG_REMOTE)
reason &= ~END_CIRC_REASON_FLAG_REMOTE;
- if (reason < _END_CIRC_REASON_MIN || reason > _END_CIRC_REASON_MAX) {
+ if (reason < END_CIRC_REASON_MIN_ || reason > END_CIRC_REASON_MAX_) {
if (!(orig_reason & END_CIRC_REASON_FLAG_REMOTE))
log_warn(LD_BUG, "Reason %d out of range at %s:%d", reason, file, line);
reason = END_CIRC_REASON_NONE;
@@ -1266,9 +1646,9 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
circuit_rep_hist_note_result(ocirc);
}
}
- if (circ->state == CIRCUIT_STATE_OR_WAIT) {
- if (circuits_pending_or_conns)
- smartlist_remove(circuits_pending_or_conns, circ);
+ if (circ->state == CIRCUIT_STATE_CHAN_WAIT) {
+ if (circuits_pending_chans)
+ smartlist_remove(circuits_pending_chans, circ);
}
if (CIRCUIT_IS_ORIGIN(circ)) {
control_event_circuit_status(TO_ORIGIN_CIRCUIT(circ),
@@ -1305,9 +1685,16 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
INTRO_POINT_FAILURE_UNREACHABLE);
}
}
- if (circ->n_conn) {
- circuit_clear_cell_queue(circ, circ->n_conn);
- connection_or_send_destroy(circ->n_circ_id, circ->n_conn, reason);
+ if (circ->n_chan) {
+ circuit_clear_cell_queue(circ, circ->n_chan);
+ /* Only send destroy if the channel isn't closing anyway */
+ if (!(circ->n_chan->state == CHANNEL_STATE_CLOSING ||
+ circ->n_chan->state == CHANNEL_STATE_CLOSED ||
+ circ->n_chan->state == CHANNEL_STATE_ERROR)) {
+ channel_send_destroy(circ->n_circ_id, circ->n_chan, reason);
+ }
+ circuitmux_detach_circuit(circ->n_chan->cmux, circ);
+ circuit_set_n_circid_chan(circ, 0, NULL);
}
if (! CIRCUIT_IS_ORIGIN(circ)) {
@@ -1320,7 +1707,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
while (or_circ->resolving_streams) {
conn = or_circ->resolving_streams;
or_circ->resolving_streams = conn->next_stream;
- if (!conn->_base.marked_for_close) {
+ if (!conn->base_.marked_for_close) {
/* The client will see a DESTROY, and infer that the connections
* are closing because the circuit is getting torn down. No need
* to send an end cell. */
@@ -1332,9 +1719,16 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
conn->on_circuit = NULL;
}
- if (or_circ->p_conn) {
- circuit_clear_cell_queue(circ, or_circ->p_conn);
- connection_or_send_destroy(or_circ->p_circ_id, or_circ->p_conn, reason);
+ if (or_circ->p_chan) {
+ circuit_clear_cell_queue(circ, or_circ->p_chan);
+ /* Only send destroy if the channel isn't closing anyway */
+ if (!(or_circ->p_chan->state == CHANNEL_STATE_CLOSING ||
+ or_circ->p_chan->state == CHANNEL_STATE_CLOSED ||
+ or_circ->p_chan->state == CHANNEL_STATE_ERROR)) {
+ channel_send_destroy(or_circ->p_circ_id, or_circ->p_chan, reason);
+ }
+ circuitmux_detach_circuit(or_circ->p_chan->cmux, circ);
+ circuit_set_p_circid_chan(or_circ, 0, NULL);
}
} else {
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
@@ -1350,7 +1744,7 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
if (!CIRCUIT_IS_ORIGIN(circ)) {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
if (or_circ->rend_splice) {
- if (!or_circ->rend_splice->_base.marked_for_close) {
+ if (!or_circ->rend_splice->base_.marked_for_close) {
/* do this after marking this circuit, to avoid infinite recursion. */
circuit_mark_for_close(TO_CIRCUIT(or_circ->rend_splice), reason);
}
@@ -1359,6 +1753,251 @@ _circuit_mark_for_close(circuit_t *circ, int reason, int line,
}
}
+/** Given a marked circuit <b>circ</b>, aggressively free its cell queues to
+ * recover memory. */
+static void
+marked_circuit_free_cells(circuit_t *circ)
+{
+ if (!circ->marked_for_close) {
+ log_warn(LD_BUG, "Called on non-marked circuit");
+ return;
+ }
+ cell_queue_clear(&circ->n_chan_cells);
+ if (! CIRCUIT_IS_ORIGIN(circ))
+ cell_queue_clear(& TO_OR_CIRCUIT(circ)->p_chan_cells);
+}
+
+/** Aggressively free buffer contents on all the buffers of all streams in the
+ * list starting at <b>stream</b>. Return the number of bytes recovered. */
+static size_t
+marked_circuit_streams_free_bytes(edge_connection_t *stream)
+{
+ size_t result = 0;
+ for ( ; stream; stream = stream->next_stream) {
+ connection_t *conn = TO_CONN(stream);
+ if (conn->inbuf) {
+ result += buf_allocation(conn->inbuf);
+ buf_clear(conn->inbuf);
+ }
+ if (conn->outbuf) {
+ result += buf_allocation(conn->outbuf);
+ buf_clear(conn->outbuf);
+ }
+ }
+ return result;
+}
+
+/** Aggressively free buffer contents on all the buffers of all streams on
+ * circuit <b>c</b>. Return the number of bytes recovered. */
+static size_t
+marked_circuit_free_stream_bytes(circuit_t *c)
+{
+ if (CIRCUIT_IS_ORIGIN(c)) {
+ return marked_circuit_streams_free_bytes(TO_ORIGIN_CIRCUIT(c)->p_streams);
+ } else {
+ return marked_circuit_streams_free_bytes(TO_OR_CIRCUIT(c)->n_streams);
+ }
+}
+
+/** Return the number of cells used by the circuit <b>c</b>'s cell queues. */
+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)) {
+ circuit_t *cc = (circuit_t *) c;
+ n += TO_OR_CIRCUIT(cc)->p_chan_cells.n;
+ }
+ return n;
+}
+
+/**
+ * Return the age of the oldest cell queued on <b>c</b>, in milliseconds.
+ * Return 0 if there are no cells queued on c. Requires that <b>now</b> be
+ * the current time in milliseconds since the epoch, truncated.
+ *
+ * This function will return incorrect results if the oldest cell queued on
+ * the circuit is older than 2**32 msec (about 49 days) old.
+ */
+STATIC uint32_t
+circuit_max_queued_cell_age(const circuit_t *c, uint32_t now)
+{
+ uint32_t age = 0;
+ packed_cell_t *cell;
+
+ if (NULL != (cell = TOR_SIMPLEQ_FIRST(&c->n_chan_cells.head)))
+ age = now - cell->inserted_time;
+
+ if (! CIRCUIT_IS_ORIGIN(c)) {
+ const or_circuit_t *orcirc = CONST_TO_OR_CIRCUIT(c);
+ if (NULL != (cell = TOR_SIMPLEQ_FIRST(&orcirc->p_chan_cells.head))) {
+ uint32_t age2 = now - cell->inserted_time;
+ if (age2 > age)
+ return age2;
+ }
+ }
+ return age;
+}
+
+/** Return the age in milliseconds of the oldest buffer chunk on any stream in
+ * the linked list <b>stream</b>, where age is taken in milliseconds before
+ * the time <b>now</b> (in truncated milliseconds since the epoch). */
+static uint32_t
+circuit_get_streams_max_data_age(const edge_connection_t *stream, uint32_t now)
+{
+ uint32_t age = 0, age2;
+ for (; stream; stream = stream->next_stream) {
+ const connection_t *conn = TO_CONN(stream);
+ if (conn->outbuf) {
+ age2 = buf_get_oldest_chunk_timestamp(conn->outbuf, now);
+ if (age2 > age)
+ age = age2;
+ }
+ if (conn->inbuf) {
+ age2 = buf_get_oldest_chunk_timestamp(conn->inbuf, now);
+ if (age2 > age)
+ age = age2;
+ }
+ }
+
+ return age;
+}
+
+/** Return the age in milliseconds of the oldest buffer chunk on any stream
+ * attached to the circuit <b>c</b>, where age is taken in milliseconds before
+ * the time <b>now</b> (in truncated milliseconds since the epoch). */
+STATIC uint32_t
+circuit_max_queued_data_age(const circuit_t *c, uint32_t now)
+{
+ if (CIRCUIT_IS_ORIGIN(c)) {
+ return circuit_get_streams_max_data_age(
+ CONST_TO_ORIGIN_CIRCUIT(c)->p_streams, now);
+ } else {
+ return circuit_get_streams_max_data_age(
+ CONST_TO_OR_CIRCUIT(c)->n_streams, now);
+ }
+}
+
+/** Return the age of the oldest cell or stream buffer chunk on the circuit
+ * <b>c</b>, where age is taken in milliseconds before the time <b>now</b> (in
+ * truncated milliseconds since the epoch). */
+STATIC uint32_t
+circuit_max_queued_item_age(const circuit_t *c, uint32_t now)
+{
+ uint32_t cell_age = circuit_max_queued_cell_age(c, now);
+ uint32_t data_age = circuit_max_queued_data_age(c, now);
+ if (cell_age > data_age)
+ return cell_age;
+ else
+ return data_age;
+}
+
+/** Helper to sort a list of circuit_t by age of oldest item, in descending
+ * order. */
+static int
+circuits_compare_by_oldest_queued_item_(const void **a_, const void **b_)
+{
+ const circuit_t *a = *a_;
+ const circuit_t *b = *b_;
+ uint32_t age_a = a->age_tmp;
+ uint32_t age_b = b->age_tmp;
+
+ if (age_a < age_b)
+ return 1;
+ else if (age_a == age_b)
+ return 0;
+ else
+ return -1;
+}
+
+#define FRACTION_OF_DATA_TO_RETAIN_ON_OOM 0.90
+
+/** We're out of memory for cells, having allocated <b>current_allocation</b>
+ * bytes' worth. Kill the 'worst' circuits until we're under
+ * FRACTION_OF_DATA_TO_RETAIN_ON_OOM of our maximum usage. */
+void
+circuits_handle_oom(size_t current_allocation)
+{
+ /* Let's hope there's enough slack space for this allocation here... */
+ smartlist_t *circlist = smartlist_new();
+ circuit_t *circ;
+ size_t mem_to_recover;
+ size_t mem_recovered=0;
+ int n_circuits_killed=0;
+ struct timeval now;
+ uint32_t now_ms;
+ log_notice(LD_GENERAL, "We're low on memory. Killing circuits with "
+ "over-long queues. (This behavior is controlled by "
+ "MaxMemInQueues.)");
+
+ {
+ const size_t recovered = buf_shrink_freelists(1);
+ if (recovered >= current_allocation) {
+ log_warn(LD_BUG, "We somehow recovered more memory from freelists "
+ "than we thought we had allocated");
+ current_allocation = 0;
+ } else {
+ current_allocation -= recovered;
+ }
+ }
+
+ {
+ size_t mem_target = (size_t)(get_options()->MaxMemInQueues *
+ FRACTION_OF_DATA_TO_RETAIN_ON_OOM);
+ if (current_allocation <= mem_target)
+ return;
+ mem_to_recover = current_allocation - mem_target;
+ }
+
+ tor_gettimeofday_cached_monotonic(&now);
+ now_ms = (uint32_t)tv_to_msec(&now);
+
+ /* This algorithm itself assumes that you've got enough memory slack
+ * to actually run it. */
+ TOR_LIST_FOREACH(circ, &global_circuitlist, head) {
+ circ->age_tmp = circuit_max_queued_item_age(circ, now_ms);
+ smartlist_add(circlist, circ);
+ }
+
+ /* This is O(n log n); there are faster algorithms we could use instead.
+ * Let's hope this doesn't happen enough to be in the critical path. */
+ smartlist_sort(circlist, circuits_compare_by_oldest_queued_item_);
+
+ /* Okay, now the worst circuits are at the front of the list. Let's mark
+ * them, and reclaim their storage aggressively. */
+ SMARTLIST_FOREACH_BEGIN(circlist, circuit_t *, circ) {
+ size_t n = n_cells_in_circ_queues(circ);
+ size_t freed;
+ if (! circ->marked_for_close) {
+ circuit_mark_for_close(circ, END_CIRC_REASON_RESOURCELIMIT);
+ }
+ marked_circuit_free_cells(circ);
+ freed = marked_circuit_free_stream_bytes(circ);
+
+ ++n_circuits_killed;
+
+ mem_recovered += n * packed_cell_mem_cost();
+ mem_recovered += freed;
+
+ if (mem_recovered >= mem_to_recover)
+ break;
+ } SMARTLIST_FOREACH_END(circ);
+
+#ifdef ENABLE_MEMPOOLS
+ clean_cell_pool(); /* In case this helps. */
+#endif /* ENABLE_MEMPOOLS */
+ buf_shrink_freelists(1); /* This is necessary to actually release buffer
+ chunks. */
+
+ log_notice(LD_GENERAL, "Removed "U64_FORMAT" bytes by killing %d circuits; "
+ "%d circuits remain alive.",
+ U64_PRINTF_ARG(mem_recovered),
+ n_circuits_killed,
+ smartlist_len(circlist) - n_circuits_killed);
+
+ smartlist_free(circlist);
+}
+
/** Verify that cpath layer <b>cp</b> has all of its invariants
* correct. Trigger an assert if anything is invalid.
*/
@@ -1376,7 +2015,8 @@ assert_cpath_layer_ok(const crypt_path_t *cp)
tor_assert(cp->b_crypto);
/* fall through */
case CPATH_STATE_CLOSED:
- tor_assert(!cp->dh_handshake_state);
+ /*XXXX Assert that there's no handshake_state either. */
+ tor_assert(!cp->rend_dh_handshake_state);
break;
case CPATH_STATE_AWAITING_KEYS:
/* tor_assert(cp->dh_handshake_state); */
@@ -1424,46 +2064,42 @@ assert_circuit_ok(const circuit_t *c)
tor_assert(c);
tor_assert(c->magic == ORIGIN_CIRCUIT_MAGIC || c->magic == OR_CIRCUIT_MAGIC);
- tor_assert(c->purpose >= _CIRCUIT_PURPOSE_MIN &&
- c->purpose <= _CIRCUIT_PURPOSE_MAX);
+ tor_assert(c->purpose >= CIRCUIT_PURPOSE_MIN_ &&
+ c->purpose <= CIRCUIT_PURPOSE_MAX_);
- {
- /* Having a separate variable for this pleases GCC 4.2 in ways I hope I
- * never understand. -NM. */
- circuit_t *nonconst_circ = (circuit_t*) c;
- if (CIRCUIT_IS_ORIGIN(c))
- origin_circ = TO_ORIGIN_CIRCUIT(nonconst_circ);
- else
- or_circ = TO_OR_CIRCUIT(nonconst_circ);
- }
+ if (CIRCUIT_IS_ORIGIN(c))
+ origin_circ = CONST_TO_ORIGIN_CIRCUIT(c);
+ else
+ or_circ = CONST_TO_OR_CIRCUIT(c);
- if (c->n_conn) {
+ if (c->n_chan) {
tor_assert(!c->n_hop);
if (c->n_circ_id) {
/* We use the _impl variant here to make sure we don't fail on marked
* circuits, which would not be returned by the regular function. */
- circuit_t *c2 = circuit_get_by_circid_orconn_impl(c->n_circ_id,
- c->n_conn);
+ circuit_t *c2 = circuit_get_by_circid_channel_impl(c->n_circ_id,
+ c->n_chan, NULL);
tor_assert(c == c2);
}
}
- if (or_circ && or_circ->p_conn) {
+ if (or_circ && or_circ->p_chan) {
if (or_circ->p_circ_id) {
/* ibid */
- circuit_t *c2 = circuit_get_by_circid_orconn_impl(or_circ->p_circ_id,
- or_circ->p_conn);
+ circuit_t *c2 =
+ circuit_get_by_circid_channel_impl(or_circ->p_circ_id,
+ or_circ->p_chan, NULL);
tor_assert(c == c2);
}
}
if (or_circ)
for (conn = or_circ->n_streams; conn; conn = conn->next_stream)
- tor_assert(conn->_base.type == CONN_TYPE_EXIT);
+ tor_assert(conn->base_.type == CONN_TYPE_EXIT);
tor_assert(c->deliver_window >= 0);
tor_assert(c->package_window >= 0);
if (c->state == CIRCUIT_STATE_OPEN) {
- tor_assert(!c->n_conn_onionskin);
+ tor_assert(!c->n_chan_create_cell);
if (or_circ) {
tor_assert(or_circ->n_crypto);
tor_assert(or_circ->p_crypto);
@@ -1471,12 +2107,12 @@ assert_circuit_ok(const circuit_t *c)
tor_assert(or_circ->p_digest);
}
}
- if (c->state == CIRCUIT_STATE_OR_WAIT && !c->marked_for_close) {
- tor_assert(circuits_pending_or_conns &&
- smartlist_isin(circuits_pending_or_conns, c));
+ if (c->state == CIRCUIT_STATE_CHAN_WAIT && !c->marked_for_close) {
+ tor_assert(circuits_pending_chans &&
+ smartlist_contains(circuits_pending_chans, c));
} else {
- tor_assert(!circuits_pending_or_conns ||
- !smartlist_isin(circuits_pending_or_conns, c));
+ tor_assert(!circuits_pending_chans ||
+ !smartlist_contains(circuits_pending_chans, c));
}
if (origin_circ && origin_circ->cpath) {
assert_cpath_ok(origin_circ->cpath);
diff --git a/src/or/circuitlist.h b/src/or/circuitlist.h
index 6e7735476..916afba21 100644
--- a/src/or/circuitlist.h
+++ b/src/or/circuitlist.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,54 +9,78 @@
* \brief Header file for circuitlist.c.
**/
-#ifndef _TOR_CIRCUITLIST_H
-#define _TOR_CIRCUITLIST_H
+#ifndef TOR_CIRCUITLIST_H
+#define TOR_CIRCUITLIST_H
-circuit_t * _circuit_get_global_list(void);
+#include "testsupport.h"
+
+TOR_LIST_HEAD(global_circuitlist_s, circuit_t);
+
+MOCK_DECL(struct global_circuitlist_s*, circuit_get_global_list, (void));
const char *circuit_state_to_string(int state);
const char *circuit_purpose_to_controller_string(uint8_t purpose);
const char *circuit_purpose_to_controller_hs_state_string(uint8_t purpose);
const char *circuit_purpose_to_string(uint8_t purpose);
void circuit_dump_by_conn(connection_t *conn, int severity);
-void circuit_set_p_circid_orconn(or_circuit_t *circ, circid_t id,
- or_connection_t *conn);
-void circuit_set_n_circid_orconn(circuit_t *circ, circid_t id,
- or_connection_t *conn);
+void circuit_set_p_circid_chan(or_circuit_t *circ, circid_t id,
+ channel_t *chan);
+void circuit_set_n_circid_chan(circuit_t *circ, circid_t id,
+ channel_t *chan);
+void channel_mark_circid_unusable(channel_t *chan, circid_t id);
+void channel_mark_circid_usable(channel_t *chan, circid_t id);
void circuit_set_state(circuit_t *circ, uint8_t state);
void circuit_close_all_marked(void);
int32_t circuit_initial_package_window(void);
origin_circuit_t *origin_circuit_new(void);
-or_circuit_t *or_circuit_new(circid_t p_circ_id, or_connection_t *p_conn);
-circuit_t *circuit_get_by_circid_orconn(circid_t circ_id,
- or_connection_t *conn);
-int circuit_id_in_use_on_orconn(circid_t circ_id, or_connection_t *conn);
+or_circuit_t *or_circuit_new(circid_t p_circ_id, channel_t *p_chan);
+circuit_t *circuit_get_by_circid_channel(circid_t circ_id,
+ channel_t *chan);
+circuit_t *
+circuit_get_by_circid_channel_even_if_marked(circid_t circ_id,
+ channel_t *chan);
+int circuit_id_in_use_on_channel(circid_t circ_id, channel_t *chan);
circuit_t *circuit_get_by_edge_conn(edge_connection_t *conn);
-void circuit_unlink_all_from_or_conn(or_connection_t *conn, int reason);
+void circuit_unlink_all_from_channel(channel_t *chan, int reason);
origin_circuit_t *circuit_get_by_global_id(uint32_t id);
origin_circuit_t *circuit_get_ready_rend_circ_by_rend_data(
const rend_data_t *rend_data);
origin_circuit_t *circuit_get_next_by_pk_and_purpose(origin_circuit_t *start,
const char *digest, uint8_t purpose);
-or_circuit_t *circuit_get_rendezvous(const char *cookie);
-or_circuit_t *circuit_get_intro_point(const char *digest);
+or_circuit_t *circuit_get_rendezvous(const uint8_t *cookie);
+or_circuit_t *circuit_get_intro_point(const uint8_t *digest);
+void circuit_set_rendezvous_cookie(or_circuit_t *circ, const uint8_t *cookie);
+void circuit_set_intro_point_digest(or_circuit_t *circ, const uint8_t *digest);
origin_circuit_t *circuit_find_to_cannibalize(uint8_t purpose,
extend_info_t *info, int flags);
void circuit_mark_all_unused_circs(void);
-void circuit_expire_all_dirty_circs(void);
-void _circuit_mark_for_close(circuit_t *circ, int reason,
- int line, const char *file);
+void circuit_mark_all_dirty_circs_as_unusable(void);
+MOCK_DECL(void, circuit_mark_for_close_, (circuit_t *circ, int reason,
+ int line, const char *file));
int circuit_get_cpath_len(origin_circuit_t *circ);
+void circuit_clear_cpath(origin_circuit_t *circ);
crypt_path_t *circuit_get_cpath_hop(origin_circuit_t *circ, int hopnum);
-void circuit_get_all_pending_on_or_conn(smartlist_t *out,
- or_connection_t *or_conn);
-int circuit_count_pending_on_or_conn(or_connection_t *or_conn);
+void circuit_get_all_pending_on_channel(smartlist_t *out,
+ channel_t *chan);
+int circuit_count_pending_on_channel(channel_t *chan);
#define circuit_mark_for_close(c, reason) \
- _circuit_mark_for_close((c), (reason), __LINE__, _SHORT_FILE_)
+ circuit_mark_for_close_((c), (reason), __LINE__, SHORT_FILE__)
void assert_cpath_layer_ok(const crypt_path_t *cp);
void assert_circuit_ok(const circuit_t *c);
void circuit_free_all(void);
+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);
+STATIC uint32_t circuit_max_queued_data_age(const circuit_t *c, uint32_t now);
+STATIC uint32_t circuit_max_queued_cell_age(const circuit_t *c, uint32_t now);
+STATIC uint32_t circuit_max_queued_item_age(const circuit_t *c, uint32_t now);
+#endif
#endif
diff --git a/src/or/circuitmux.c b/src/or/circuitmux.c
new file mode 100644
index 000000000..52ebfef08
--- /dev/null
+++ b/src/or/circuitmux.c
@@ -0,0 +1,1911 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux.c
+ * \brief Circuit mux/cell selection abstraction
+ **/
+
+#include "or.h"
+#include "channel.h"
+#include "circuitlist.h"
+#include "circuitmux.h"
+#include "relay.h"
+
+/*
+ * Private typedefs for circuitmux.c
+ */
+
+/*
+ * Map of muxinfos for circuitmux_t to use; struct is defined below (name
+ * of struct must match HT_HEAD line).
+ */
+typedef struct chanid_circid_muxinfo_map chanid_circid_muxinfo_map_t;
+
+/*
+ * Hash table entry (yeah, calling it chanid_circid_muxinfo_s seems to
+ * break the hash table code).
+ */
+typedef struct chanid_circid_muxinfo_t chanid_circid_muxinfo_t;
+
+/*
+ * Anything the mux wants to store per-circuit in the map; right now just
+ * a count of queued cells.
+ */
+
+typedef struct circuit_muxinfo_s circuit_muxinfo_t;
+
+/*
+ * Structures for circuitmux.c
+ */
+
+/*
+ * A circuitmux is a collection of circuits; it tracks which subset
+ * of the attached circuits are 'active' (i.e., have cells available
+ * to transmit) and how many cells on each. It expoes three distinct
+ * interfaces to other components:
+ *
+ * To channels, which each have a circuitmux_t, the supported operations
+ * are:
+ *
+ * circuitmux_get_first_active_circuit():
+ *
+ * Pick one of the circuitmux's active circuits to send cells from.
+ *
+ * circuitmux_notify_xmit_cells():
+ *
+ * Notify the circuitmux that cells have been sent on a circuit.
+ *
+ * To circuits, the exposed operations are:
+ *
+ * circuitmux_attach_circuit():
+ *
+ * Attach a circuit to the circuitmux; this will allocate any policy-
+ * specific data wanted for this circuit and add it to the active
+ * circuits list if it has queued cells.
+ *
+ * circuitmux_detach_circuit():
+ *
+ * Detach a circuit from the circuitmux, freeing associated structures.
+ *
+ * circuitmux_clear_num_cells():
+ *
+ * Clear the circuitmux's cell counter for this circuit.
+ *
+ * circuitmux_set_num_cells():
+ *
+ * Set the circuitmux's cell counter for this circuit.
+ *
+ * See circuitmux.h for the circuitmux_policy_t data structure, which contains
+ * a table of function pointers implementing a circuit selection policy, and
+ * circuitmux_ewma.c for an example of a circuitmux policy. Circuitmux
+ * policies can be manipulated with:
+ *
+ * circuitmux_get_policy():
+ *
+ * Return the current policy for a circuitmux_t, if any.
+ *
+ * circuitmux_clear_policy():
+ *
+ * Remove a policy installed on a circuitmux_t, freeing all associated
+ * data. The circuitmux will revert to the built-in round-robin behavior.
+ *
+ * circuitmux_set_policy():
+ *
+ * Install a policy on a circuitmux_t; the appropriate callbacks will be
+ * made to attach all existing circuits to the new policy.
+ *
+ */
+
+struct circuitmux_s {
+ /* Keep count of attached, active circuits */
+ unsigned int n_circuits, n_active_circuits;
+
+ /* Total number of queued cells on all circuits */
+ unsigned int n_cells;
+
+ /*
+ * Map from (channel ID, circuit ID) pairs to circuit_muxinfo_t
+ */
+ chanid_circid_muxinfo_map_t *chanid_circid_map;
+
+ /*
+ * Double-linked ring of circuits with queued cells waiting for room to
+ * free up on this connection's outbuf. Every time we pull cells from
+ * a circuit, we advance this pointer to the next circuit in the ring.
+ */
+ struct circuit_t *active_circuits_head, *active_circuits_tail;
+
+ /** List of queued destroy cells */
+ cell_queue_t destroy_cell_queue;
+ /** Boolean: True iff the last cell to circuitmux_get_first_active_circuit
+ * returned the destroy queue. Used to force alternation between
+ * destroy/non-destroy cells.
+ *
+ * XXXX There is no reason to think that alternating is a particularly good
+ * approach -- it's just designed to prevent destroys from starving other
+ * cells completely.
+ */
+ unsigned int last_cell_was_destroy : 1;
+ /** Destroy counter: increment this when a destroy gets queued, decrement
+ * when we unqueue it, so we can test to make sure they don't starve.
+ */
+ int64_t destroy_ctr;
+
+ /*
+ * Circuitmux policy; if this is non-NULL, it can override the built-
+ * in round-robin active circuits behavior. This is how EWMA works in
+ * the new circuitmux_t world.
+ */
+ const circuitmux_policy_t *policy;
+
+ /* Policy-specific data */
+ circuitmux_policy_data_t *policy_data;
+};
+
+/*
+ * This struct holds whatever we want to store per attached circuit on a
+ * circuitmux_t; right now, just the count of queued cells and the direction.
+ */
+
+struct circuit_muxinfo_s {
+ /* Count of cells on this circuit at last update */
+ unsigned int cell_count;
+ /* Direction of flow */
+ cell_direction_t direction;
+ /* Policy-specific data */
+ circuitmux_policy_circ_data_t *policy_data;
+ /* Mark bit for consistency checker */
+ unsigned int mark:1;
+};
+
+/*
+ * A map from channel ID and circuit ID to a circuit_muxinfo_t for that
+ * circuit.
+ */
+
+struct chanid_circid_muxinfo_t {
+ HT_ENTRY(chanid_circid_muxinfo_t) node;
+ uint64_t chan_id;
+ circid_t circ_id;
+ circuit_muxinfo_t muxinfo;
+};
+
+/*
+ * Internal-use #defines
+ */
+
+#ifdef CMUX_PARANOIA
+#define circuitmux_assert_okay_paranoid(cmux) \
+ circuitmux_assert_okay(cmux)
+#else
+#define circuitmux_assert_okay_paranoid(cmux)
+#endif
+
+/*
+ * Static function declarations
+ */
+
+static INLINE int
+chanid_circid_entries_eq(chanid_circid_muxinfo_t *a,
+ chanid_circid_muxinfo_t *b);
+static INLINE unsigned int
+chanid_circid_entry_hash(chanid_circid_muxinfo_t *a);
+static chanid_circid_muxinfo_t *
+circuitmux_find_map_entry(circuitmux_t *cmux, circuit_t *circ);
+static void
+circuitmux_make_circuit_active(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction);
+static void
+circuitmux_make_circuit_inactive(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction);
+static INLINE void
+circuitmux_move_active_circ_to_tail(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction);
+static INLINE circuit_t **
+circuitmux_next_active_circ_p(circuitmux_t *cmux, circuit_t *circ);
+static INLINE circuit_t **
+circuitmux_prev_active_circ_p(circuitmux_t *cmux, circuit_t *circ);
+static void circuitmux_assert_okay_pass_one(circuitmux_t *cmux);
+static void circuitmux_assert_okay_pass_two(circuitmux_t *cmux);
+static void circuitmux_assert_okay_pass_three(circuitmux_t *cmux);
+
+/* Static global variables */
+
+/** Count the destroy balance to debug destroy queue logic */
+static int64_t global_destroy_ctr = 0;
+
+/* Function definitions */
+
+/**
+ * Linked list helpers
+ */
+
+/**
+ * Move an active circuit to the tail of the cmux's active circuits list;
+ * used by circuitmux_notify_xmit_cells().
+ */
+
+static INLINE void
+circuitmux_move_active_circ_to_tail(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction)
+{
+ circuit_t **next_p = NULL, **prev_p = NULL;
+ circuit_t **next_prev = NULL, **prev_next = NULL;
+ circuit_t **tail_next = NULL;
+ or_circuit_t *or_circ = NULL;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /* Figure out our next_p and prev_p for this cmux/direction */
+ if (direction) {
+ if (direction == CELL_DIRECTION_OUT) {
+ tor_assert(circ->n_mux == cmux);
+ next_p = &(circ->next_active_on_n_chan);
+ prev_p = &(circ->prev_active_on_n_chan);
+ } else {
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(or_circ->p_mux == cmux);
+ next_p = &(or_circ->next_active_on_p_chan);
+ prev_p = &(or_circ->prev_active_on_p_chan);
+ }
+ } else {
+ if (circ->n_mux == cmux) {
+ next_p = &(circ->next_active_on_n_chan);
+ prev_p = &(circ->prev_active_on_n_chan);
+ direction = CELL_DIRECTION_OUT;
+ } else {
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(or_circ->p_mux == cmux);
+ next_p = &(or_circ->next_active_on_p_chan);
+ prev_p = &(or_circ->prev_active_on_p_chan);
+ direction = CELL_DIRECTION_IN;
+ }
+ }
+ tor_assert(next_p);
+ tor_assert(prev_p);
+
+ /* Check if this really is an active circuit */
+ if ((*next_p == NULL && *prev_p == NULL) &&
+ !(circ == cmux->active_circuits_head ||
+ circ == cmux->active_circuits_tail)) {
+ /* Not active, no-op */
+ return;
+ }
+
+ /* Check if this is already the tail */
+ if (circ == cmux->active_circuits_tail) return;
+
+ /* Okay, we have to move it; figure out next_prev and prev_next */
+ if (*next_p) next_prev = circuitmux_prev_active_circ_p(cmux, *next_p);
+ if (*prev_p) prev_next = circuitmux_next_active_circ_p(cmux, *prev_p);
+ /* Adjust the previous node's next pointer, if any */
+ if (prev_next) *prev_next = *next_p;
+ /* Otherwise, we were the head */
+ else cmux->active_circuits_head = *next_p;
+ /* Adjust the next node's previous pointer, if any */
+ if (next_prev) *next_prev = *prev_p;
+ /* We're out of the list; now re-attach at the tail */
+ /* Adjust our next and prev pointers */
+ *next_p = NULL;
+ *prev_p = cmux->active_circuits_tail;
+ /* Set the next pointer of the tail, or the head if none */
+ if (cmux->active_circuits_tail) {
+ tail_next = circuitmux_next_active_circ_p(cmux,
+ cmux->active_circuits_tail);
+ *tail_next = circ;
+ } else {
+ cmux->active_circuits_head = circ;
+ }
+ /* Set the tail to this circuit */
+ cmux->active_circuits_tail = circ;
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+static INLINE circuit_t **
+circuitmux_next_active_circ_p(circuitmux_t *cmux, circuit_t *circ)
+{
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ if (circ->n_mux == cmux) return &(circ->next_active_on_n_chan);
+ else {
+ tor_assert(TO_OR_CIRCUIT(circ)->p_mux == cmux);
+ return &(TO_OR_CIRCUIT(circ)->next_active_on_p_chan);
+ }
+}
+
+static INLINE circuit_t **
+circuitmux_prev_active_circ_p(circuitmux_t *cmux, circuit_t *circ)
+{
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ if (circ->n_mux == cmux) return &(circ->prev_active_on_n_chan);
+ else {
+ tor_assert(TO_OR_CIRCUIT(circ)->p_mux == cmux);
+ return &(TO_OR_CIRCUIT(circ)->prev_active_on_p_chan);
+ }
+}
+
+/**
+ * Helper for chanid_circid_cell_count_map_t hash table: compare the channel
+ * ID and circuit ID for a and b, and return less than, equal to, or greater
+ * than zero appropriately.
+ */
+
+static INLINE int
+chanid_circid_entries_eq(chanid_circid_muxinfo_t *a,
+ chanid_circid_muxinfo_t *b)
+{
+ return a->chan_id == b->chan_id && a->circ_id == b->circ_id;
+}
+
+/**
+ * Helper: return a hash based on circuit ID and channel ID in a.
+ */
+
+static INLINE unsigned int
+chanid_circid_entry_hash(chanid_circid_muxinfo_t *a)
+{
+ return (((unsigned int)(a->circ_id) << 8) ^
+ ((unsigned int)((a->chan_id >> 32) & 0xffffffff)) ^
+ ((unsigned int)(a->chan_id & 0xffffffff)));
+}
+
+/* Declare the struct chanid_circid_muxinfo_map type */
+HT_HEAD(chanid_circid_muxinfo_map, chanid_circid_muxinfo_t);
+
+/* Emit a bunch of hash table stuff */
+HT_PROTOTYPE(chanid_circid_muxinfo_map, chanid_circid_muxinfo_t, node,
+ chanid_circid_entry_hash, chanid_circid_entries_eq);
+HT_GENERATE(chanid_circid_muxinfo_map, chanid_circid_muxinfo_t, node,
+ chanid_circid_entry_hash, chanid_circid_entries_eq, 0.6,
+ malloc, realloc, free);
+
+/*
+ * Circuitmux alloc/free functions
+ */
+
+/**
+ * Allocate a new circuitmux_t
+ */
+
+circuitmux_t *
+circuitmux_alloc(void)
+{
+ circuitmux_t *rv = NULL;
+
+ 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;
+}
+
+/**
+ * Detach all circuits from a circuitmux (use before circuitmux_free())
+ *
+ * If <b>detached_out</b> is non-NULL, add every detached circuit_t to
+ * detached_out.
+ */
+
+void
+circuitmux_detach_all_circuits(circuitmux_t *cmux, smartlist_t *detached_out)
+{
+ chanid_circid_muxinfo_t **i = NULL, *to_remove;
+ channel_t *chan = NULL;
+ circuit_t *circ = NULL;
+
+ tor_assert(cmux);
+ /*
+ * Don't circuitmux_assert_okay_paranoid() here; this gets called when
+ * channels are being freed and have already been unregistered, so
+ * the channel ID lookups it does will fail.
+ */
+
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ while (i) {
+ to_remove = *i;
+
+ if (! to_remove) {
+ log_warn(LD_BUG, "Somehow, an HT iterator gave us a NULL pointer.");
+ break;
+ } else {
+ /* Find a channel and circuit */
+ chan = channel_find_by_global_id(to_remove->chan_id);
+ if (chan) {
+ circ =
+ circuit_get_by_circid_channel_even_if_marked(to_remove->circ_id,
+ chan);
+ if (circ) {
+ /* Clear the circuit's mux for this direction */
+ if (to_remove->muxinfo.direction == CELL_DIRECTION_OUT) {
+ /*
+ * Update active_circuits et al.; this does policy notifies, so
+ * comes before freeing policy data
+ */
+
+ if (to_remove->muxinfo.cell_count > 0) {
+ circuitmux_make_circuit_inactive(cmux, circ, CELL_DIRECTION_OUT);
+ }
+
+ /* Clear n_mux */
+ circ->n_mux = NULL;
+
+ if (detached_out)
+ smartlist_add(detached_out, circ);
+ } else if (circ->magic == OR_CIRCUIT_MAGIC) {
+ /*
+ * Update active_circuits et al.; this does policy notifies, so
+ * comes before freeing policy data
+ */
+
+ if (to_remove->muxinfo.cell_count > 0) {
+ circuitmux_make_circuit_inactive(cmux, circ, CELL_DIRECTION_IN);
+ }
+
+ /*
+ * It has a sensible p_chan and direction == CELL_DIRECTION_IN,
+ * so clear p_mux.
+ */
+ TO_OR_CIRCUIT(circ)->p_mux = NULL;
+
+ if (detached_out)
+ smartlist_add(detached_out, circ);
+ } else {
+ /* Complain and move on */
+ log_warn(LD_CIRC,
+ "Circuit %u/channel " U64_FORMAT " had direction == "
+ "CELL_DIRECTION_IN, but isn't an or_circuit_t",
+ (unsigned)to_remove->circ_id,
+ U64_PRINTF_ARG(to_remove->chan_id));
+ }
+
+ /* Free policy-specific data if we have it */
+ if (to_remove->muxinfo.policy_data) {
+ /*
+ * If we have policy data, assert that we have the means to
+ * free it
+ */
+ tor_assert(cmux->policy);
+ tor_assert(cmux->policy->free_circ_data);
+ /* Call free_circ_data() */
+ cmux->policy->free_circ_data(cmux,
+ cmux->policy_data,
+ circ,
+ to_remove->muxinfo.policy_data);
+ to_remove->muxinfo.policy_data = NULL;
+ }
+ } else {
+ /* Complain and move on */
+ log_warn(LD_CIRC,
+ "Couldn't find circuit %u (for channel " U64_FORMAT ")",
+ (unsigned)to_remove->circ_id,
+ U64_PRINTF_ARG(to_remove->chan_id));
+ }
+ } else {
+ /* Complain and move on */
+ log_warn(LD_CIRC,
+ "Couldn't find channel " U64_FORMAT " (for circuit id %u)",
+ U64_PRINTF_ARG(to_remove->chan_id),
+ (unsigned)to_remove->circ_id);
+ }
+
+ /* Assert that we don't have un-freed policy data for this circuit */
+ tor_assert(to_remove->muxinfo.policy_data == NULL);
+ }
+
+ i = HT_NEXT_RMV(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+
+ /* Free it */
+ tor_free(to_remove);
+ }
+
+ cmux->n_circuits = 0;
+ cmux->n_active_circuits = 0;
+ cmux->n_cells = 0;
+}
+
+/** Reclaim all circuit IDs currently marked as unusable on <b>chan</b> because
+ * of pending destroy cells in <b>cmux</b>.
+ *
+ * This function must be called AFTER circuits are unlinked from the (channel,
+ * circuid-id) map with circuit_unlink_all_from_channel(), but before calling
+ * circuitmux_free().
+ */
+void
+circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux, channel_t *chan)
+{
+ packed_cell_t *cell;
+ int n_bad = 0;
+ 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);
+ } else {
+ ++n_bad;
+ }
+ }
+ if (n_bad)
+ log_warn(LD_BUG, "%d cell(s) on destroy queue did not look like a "
+ "DESTROY cell.", n_bad);
+}
+
+/**
+ * Free a circuitmux_t; the circuits must be detached first with
+ * circuitmux_detach_all_circuits().
+ */
+
+void
+circuitmux_free(circuitmux_t *cmux)
+{
+ if (!cmux) return;
+
+ tor_assert(cmux->n_circuits == 0);
+ tor_assert(cmux->n_active_circuits == 0);
+
+ /*
+ * Free policy-specific data if we have any; we don't
+ * need to do circuitmux_set_policy(cmux, NULL) to cover
+ * the circuits because they would have been handled in
+ * circuitmux_detach_all_circuits() before this was
+ * called.
+ */
+ if (cmux->policy && cmux->policy->free_cmux_data) {
+ if (cmux->policy_data) {
+ cmux->policy->free_cmux_data(cmux, cmux->policy_data);
+ cmux->policy_data = NULL;
+ }
+ } else tor_assert(cmux->policy_data == NULL);
+
+ if (cmux->chanid_circid_map) {
+ HT_CLEAR(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ tor_free(cmux->chanid_circid_map);
+ }
+
+ /*
+ * We're throwing away some destroys; log the counter and
+ * adjust the global counter by the queue size.
+ */
+ if (cmux->destroy_cell_queue.n > 0) {
+ cmux->destroy_ctr -= cmux->destroy_cell_queue.n;
+ global_destroy_ctr -= cmux->destroy_cell_queue.n;
+ log_debug(LD_CIRC,
+ "Freeing cmux at %p with %u queued destroys; the last cmux "
+ "destroy balance was "I64_FORMAT", global is "I64_FORMAT,
+ cmux, cmux->destroy_cell_queue.n,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+ } else {
+ log_debug(LD_CIRC,
+ "Freeing cmux at %p with no queued destroys, the cmux destroy "
+ "balance was "I64_FORMAT", global is "I64_FORMAT,
+ cmux,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+ }
+
+ cell_queue_clear(&cmux->destroy_cell_queue);
+
+ tor_free(cmux);
+}
+
+/*
+ * Circuitmux policy control functions
+ */
+
+/**
+ * Remove any policy installed on cmux; all policy data will be freed and
+ * cmux behavior will revert to the built-in round-robin active_circuits
+ * mechanism.
+ */
+
+void
+circuitmux_clear_policy(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ /* Internally, this is just setting policy to NULL */
+ if (cmux->policy) {
+ circuitmux_set_policy(cmux, NULL);
+ }
+}
+
+/**
+ * Return the policy currently installed on a circuitmux_t
+ */
+
+const circuitmux_policy_t *
+circuitmux_get_policy(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->policy;
+}
+
+/**
+ * Set policy; allocate for new policy, detach all circuits from old policy
+ * if any, attach them to new policy, and free old policy data.
+ */
+
+void
+circuitmux_set_policy(circuitmux_t *cmux,
+ const circuitmux_policy_t *pol)
+{
+ const circuitmux_policy_t *old_pol = NULL, *new_pol = NULL;
+ circuitmux_policy_data_t *old_pol_data = NULL, *new_pol_data = NULL;
+ chanid_circid_muxinfo_t **i = NULL;
+ channel_t *chan = NULL;
+ uint64_t last_chan_id_searched = 0;
+ circuit_t *circ = NULL;
+
+ tor_assert(cmux);
+
+ /* Set up variables */
+ old_pol = cmux->policy;
+ old_pol_data = cmux->policy_data;
+ new_pol = pol;
+
+ /* Check if this is the trivial case */
+ if (old_pol == new_pol) return;
+
+ /* Allocate data for new policy, if any */
+ if (new_pol && new_pol->alloc_cmux_data) {
+ /*
+ * If alloc_cmux_data is not null, then we expect to get some policy
+ * data. Assert that we also have free_cmux_data so we can free it
+ * when the time comes, and allocate it.
+ */
+ tor_assert(new_pol->free_cmux_data);
+ new_pol_data = new_pol->alloc_cmux_data(cmux);
+ tor_assert(new_pol_data);
+ }
+
+ /* Install new policy and new policy data on cmux */
+ cmux->policy = new_pol;
+ cmux->policy_data = new_pol_data;
+
+ /* Iterate over all circuits, attaching/detaching each one */
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ while (i) {
+ /* Assert that this entry isn't NULL */
+ tor_assert(*i);
+
+ /*
+ * Get the channel; since normal case is all circuits on the mux share a
+ * channel, we cache last_chan_id_searched
+ */
+ if (!chan || last_chan_id_searched != (*i)->chan_id) {
+ chan = channel_find_by_global_id((*i)->chan_id);
+ last_chan_id_searched = (*i)->chan_id;
+ }
+ tor_assert(chan);
+
+ /* Get the circuit */
+ circ = circuit_get_by_circid_channel_even_if_marked((*i)->circ_id, chan);
+ tor_assert(circ);
+
+ /* Need to tell old policy it becomes inactive (i.e., it is active) ? */
+ if (old_pol && old_pol->notify_circ_inactive &&
+ (*i)->muxinfo.cell_count > 0) {
+ old_pol->notify_circ_inactive(cmux, old_pol_data, circ,
+ (*i)->muxinfo.policy_data);
+ }
+
+ /* Need to free old policy data? */
+ if ((*i)->muxinfo.policy_data) {
+ /* Assert that we have the means to free it if we have policy data */
+ tor_assert(old_pol);
+ tor_assert(old_pol->free_circ_data);
+ /* Free it */
+ old_pol->free_circ_data(cmux, old_pol_data, circ,
+ (*i)->muxinfo.policy_data);
+ (*i)->muxinfo.policy_data = NULL;
+ }
+
+ /* Need to allocate new policy data? */
+ if (new_pol && new_pol->alloc_circ_data) {
+ /*
+ * If alloc_circ_data is not null, we expect to get some per-circuit
+ * policy data. Assert that we also have free_circ_data so we can
+ * free it when the time comes, and allocate it.
+ */
+ tor_assert(new_pol->free_circ_data);
+ (*i)->muxinfo.policy_data =
+ new_pol->alloc_circ_data(cmux, new_pol_data, circ,
+ (*i)->muxinfo.direction,
+ (*i)->muxinfo.cell_count);
+ }
+
+ /* Need to make active on new policy? */
+ if (new_pol && new_pol->notify_circ_active &&
+ (*i)->muxinfo.cell_count > 0) {
+ new_pol->notify_circ_active(cmux, new_pol_data, circ,
+ (*i)->muxinfo.policy_data);
+ }
+
+ /* Advance to next circuit map entry */
+ i = HT_NEXT(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+ }
+
+ /* Free data for old policy, if any */
+ if (old_pol_data) {
+ /*
+ * If we had old policy data, we should have an old policy and a free
+ * function for it.
+ */
+ tor_assert(old_pol);
+ tor_assert(old_pol->free_cmux_data);
+ old_pol->free_cmux_data(cmux, old_pol_data);
+ old_pol_data = NULL;
+ }
+}
+
+/*
+ * Circuitmux/circuit attachment status inquiry functions
+ */
+
+/**
+ * Query the direction of an attached circuit
+ */
+
+cell_direction_t
+circuitmux_attached_circuit_direction(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+
+ /* Try to find a map entry */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+
+ /*
+ * This function should only be called on attached circuits; assert that
+ * we had a map entry.
+ */
+ tor_assert(hashent);
+
+ /* Return the direction from the map entry */
+ return hashent->muxinfo.direction;
+}
+
+/**
+ * Find an entry in the cmux's map for this circuit or return NULL if there
+ * is none.
+ */
+
+static chanid_circid_muxinfo_t *
+circuitmux_find_map_entry(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+
+ /* Sanity-check parameters */
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+ tor_assert(circ);
+
+ /* Check if we have n_chan */
+ if (circ->n_chan) {
+ /* Okay, let's see if it's attached for n_chan/n_circ_id */
+ search.chan_id = circ->n_chan->global_identifier;
+ search.circ_id = circ->n_circ_id;
+
+ /* Query */
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+ }
+
+ /* Found something? */
+ if (hashent) {
+ /*
+ * Assert that the direction makes sense for a hashent we found by
+ * n_chan/n_circ_id before we return it.
+ */
+ tor_assert(hashent->muxinfo.direction == CELL_DIRECTION_OUT);
+ } else {
+ /* Not there, have we got a p_chan/p_circ_id to try? */
+ if (circ->magic == OR_CIRCUIT_MAGIC) {
+ search.circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ /* Check for p_chan */
+ if (TO_OR_CIRCUIT(circ)->p_chan) {
+ search.chan_id = TO_OR_CIRCUIT(circ)->p_chan->global_identifier;
+ /* Okay, search for that */
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+ /* Find anything? */
+ if (hashent) {
+ /* Assert that the direction makes sense before we return it */
+ tor_assert(hashent->muxinfo.direction == CELL_DIRECTION_IN);
+ }
+ }
+ }
+ }
+
+ /* Okay, hashent is it if it was there */
+ return hashent;
+}
+
+/**
+ * Query whether a circuit is attached to a circuitmux
+ */
+
+int
+circuitmux_is_circuit_attached(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+
+ /* Look if it's in the circuit map */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+
+ return (hashent != NULL);
+}
+
+/**
+ * Query whether a circuit is active on a circuitmux
+ */
+
+int
+circuitmux_is_circuit_active(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+ int is_active = 0;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ /* Look if it's in the circuit map */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ if (hashent) {
+ /* Check the number of cells on this circuit */
+ is_active = (hashent->muxinfo.cell_count > 0);
+ }
+ /* else not attached, so not active */
+
+ return is_active;
+}
+
+/**
+ * Query number of available cells for a circuit on a circuitmux
+ */
+
+unsigned int
+circuitmux_num_cells_for_circuit(circuitmux_t *cmux, circuit_t *circ)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+ unsigned int n_cells = 0;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ /* Look if it's in the circuit map */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ if (hashent) {
+ /* Just get the cell count for this circuit */
+ n_cells = hashent->muxinfo.cell_count;
+ }
+ /* else not attached, so 0 cells */
+
+ return n_cells;
+}
+
+/**
+ * Query total number of available cells on a circuitmux
+ */
+
+unsigned int
+circuitmux_num_cells(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->n_cells + cmux->destroy_cell_queue.n;
+}
+
+/**
+ * Query total number of circuits active on a circuitmux
+ */
+
+unsigned int
+circuitmux_num_active_circuits(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->n_active_circuits;
+}
+
+/**
+ * Query total number of circuits attached to a circuitmux
+ */
+
+unsigned int
+circuitmux_num_circuits(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ return cmux->n_circuits;
+}
+
+/*
+ * Functions for circuit code to call to update circuit status
+ */
+
+/**
+ * Attach a circuit to a circuitmux, for the specified 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;
+ circid_t circ_id;
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+ unsigned int cell_count;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_IN ||
+ direction == CELL_DIRECTION_OUT);
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /*
+ * Figure out which channel we're using, and get the circuit's current
+ * cell count and circuit ID; assert that the circuit is not already
+ * attached to another mux.
+ */
+ if (direction == CELL_DIRECTION_OUT) {
+ /* It's n_chan */
+ chan = circ->n_chan;
+ cell_count = circ->n_chan_cells.n;
+ circ_id = circ->n_circ_id;
+ } else {
+ /* We want p_chan */
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
+ cell_count = TO_OR_CIRCUIT(circ)->p_chan_cells.n;
+ circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
+ /* Assert that we did get a channel */
+ tor_assert(chan);
+ /* Assert that the circuit ID is sensible */
+ tor_assert(circ_id != 0);
+
+ /* Get the channel ID */
+ channel_id = chan->global_identifier;
+
+ /* See if we already have this one */
+ search.chan_id = channel_id;
+ search.circ_id = circ_id;
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+
+ if (hashent) {
+ /*
+ * This circuit was already attached to this cmux; make sure the
+ * directions match and update the cell count and active circuit count.
+ */
+ log_info(LD_CIRC,
+ "Circuit %u on channel " U64_FORMAT " was already attached to "
+ "cmux %p (trying to attach to %p)",
+ (unsigned)circ_id, U64_PRINTF_ARG(channel_id),
+ ((direction == CELL_DIRECTION_OUT) ?
+ circ->n_mux : TO_OR_CIRCUIT(circ)->p_mux),
+ cmux);
+
+ /*
+ * The mux pointer on this circuit and the direction in result should
+ * match; otherwise assert.
+ */
+ if (direction == CELL_DIRECTION_OUT) tor_assert(circ->n_mux == cmux);
+ else tor_assert(TO_OR_CIRCUIT(circ)->p_mux == cmux);
+ tor_assert(hashent->muxinfo.direction == direction);
+
+ /*
+ * Looks okay; just update the cell count and active circuits if we must
+ */
+ if (hashent->muxinfo.cell_count > 0 && cell_count == 0) {
+ --(cmux->n_active_circuits);
+ circuitmux_make_circuit_inactive(cmux, circ, direction);
+ } else if (hashent->muxinfo.cell_count == 0 && cell_count > 0) {
+ ++(cmux->n_active_circuits);
+ circuitmux_make_circuit_active(cmux, circ, direction);
+ }
+ cmux->n_cells -= hashent->muxinfo.cell_count;
+ cmux->n_cells += cell_count;
+ hashent->muxinfo.cell_count = cell_count;
+ } else {
+ /*
+ * New circuit; add an entry and update the circuit/active circuit
+ * counts.
+ */
+ log_debug(LD_CIRC,
+ "Attaching circuit %u on channel " U64_FORMAT " to cmux %p",
+ (unsigned)circ_id, U64_PRINTF_ARG(channel_id), cmux);
+
+ /*
+ * Assert that the circuit doesn't already have a mux for this
+ * direction.
+ */
+ if (direction == CELL_DIRECTION_OUT) tor_assert(circ->n_mux == NULL);
+ else tor_assert(TO_OR_CIRCUIT(circ)->p_mux == NULL);
+
+ /* Insert it in the map */
+ hashent = tor_malloc_zero(sizeof(*hashent));
+ hashent->chan_id = channel_id;
+ hashent->circ_id = circ_id;
+ hashent->muxinfo.cell_count = cell_count;
+ hashent->muxinfo.direction = direction;
+ /* Allocate policy specific circuit data if we need it */
+ if (cmux->policy && cmux->policy->alloc_circ_data) {
+ /* Assert that we have the means to free policy-specific data */
+ tor_assert(cmux->policy->free_circ_data);
+ /* Allocate it */
+ hashent->muxinfo.policy_data =
+ cmux->policy->alloc_circ_data(cmux,
+ cmux->policy_data,
+ circ,
+ direction,
+ cell_count);
+ /* If we wanted policy data, it's an error not to get any */
+ tor_assert(hashent->muxinfo.policy_data);
+ }
+ HT_INSERT(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ hashent);
+
+ /* Set the circuit's mux for this direction */
+ if (direction == CELL_DIRECTION_OUT) circ->n_mux = cmux;
+ else TO_OR_CIRCUIT(circ)->p_mux = cmux;
+
+ /* Make sure the next/prev pointers are NULL */
+ if (direction == CELL_DIRECTION_OUT) {
+ circ->next_active_on_n_chan = NULL;
+ circ->prev_active_on_n_chan = NULL;
+ } else {
+ TO_OR_CIRCUIT(circ)->next_active_on_p_chan = NULL;
+ TO_OR_CIRCUIT(circ)->prev_active_on_p_chan = NULL;
+ }
+
+ /* Update counters */
+ ++(cmux->n_circuits);
+ if (cell_count > 0) {
+ ++(cmux->n_active_circuits);
+ circuitmux_make_circuit_active(cmux, circ, direction);
+ }
+ cmux->n_cells += cell_count;
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Detach a circuit from a circuitmux and update all counters as needed;
+ * no-op if not attached.
+ */
+
+MOCK_IMPL(void,
+circuitmux_detach_circuit,(circuitmux_t *cmux, circuit_t *circ))
+{
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+ /*
+ * Use this to keep track of whether we found it for n_chan or
+ * p_chan for consistency checking.
+ */
+ cell_direction_t last_searched_direction;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+ tor_assert(circ);
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /* See if we have it for n_chan/n_circ_id */
+ if (circ->n_chan) {
+ search.chan_id = circ->n_chan->global_identifier;
+ search.circ_id = circ->n_circ_id;
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+ last_searched_direction = CELL_DIRECTION_OUT;
+ }
+
+ /* Got one? If not, see if it's an or_circuit_t and try p_chan/p_circ_id */
+ if (!hashent) {
+ if (circ->magic == OR_CIRCUIT_MAGIC) {
+ search.circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ if (TO_OR_CIRCUIT(circ)->p_chan) {
+ search.chan_id = TO_OR_CIRCUIT(circ)->p_chan->global_identifier;
+ hashent = HT_FIND(chanid_circid_muxinfo_map,
+ cmux->chanid_circid_map,
+ &search);
+ last_searched_direction = CELL_DIRECTION_IN;
+ }
+ }
+ }
+
+ /*
+ * If hashent isn't NULL, we have a circuit to detach; don't remove it from
+ * the map until later of circuitmux_make_circuit_inactive() breaks.
+ */
+ if (hashent) {
+ /* Update counters */
+ --(cmux->n_circuits);
+ if (hashent->muxinfo.cell_count > 0) {
+ --(cmux->n_active_circuits);
+ /* This does policy notifies, so comes before freeing policy data */
+ circuitmux_make_circuit_inactive(cmux, circ, last_searched_direction);
+ }
+ cmux->n_cells -= hashent->muxinfo.cell_count;
+
+ /* Free policy-specific data if we have it */
+ if (hashent->muxinfo.policy_data) {
+ /* If we have policy data, assert that we have the means to free it */
+ tor_assert(cmux->policy);
+ tor_assert(cmux->policy->free_circ_data);
+ /* Call free_circ_data() */
+ cmux->policy->free_circ_data(cmux,
+ cmux->policy_data,
+ circ,
+ hashent->muxinfo.policy_data);
+ hashent->muxinfo.policy_data = NULL;
+ }
+
+ /* Consistency check: the direction must match the direction searched */
+ tor_assert(last_searched_direction == hashent->muxinfo.direction);
+ /* Clear the circuit's mux for this direction */
+ if (last_searched_direction == CELL_DIRECTION_OUT) circ->n_mux = NULL;
+ else TO_OR_CIRCUIT(circ)->p_mux = NULL;
+
+ /* Now remove it from the map */
+ HT_REMOVE(chanid_circid_muxinfo_map, cmux->chanid_circid_map, hashent);
+
+ /* Free the hash entry */
+ tor_free(hashent);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Make a circuit active; update active list and policy-specific info, but
+ * we don't mess with the counters or hash table here.
+ */
+
+static void
+circuitmux_make_circuit_active(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction)
+{
+ circuit_t **next_active = NULL, **prev_active = NULL, **next_prev = NULL;
+ circuitmux_t *circuit_cmux = NULL;
+ chanid_circid_muxinfo_t *hashent = NULL;
+ channel_t *chan = NULL;
+ circid_t circ_id;
+ int already_active;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_OUT ||
+ direction == CELL_DIRECTION_IN);
+ /*
+ * Don't circuitmux_assert_okay_paranoid(cmux) here because the cell count
+ * already got changed and we have to update the list for it to be consistent
+ * again.
+ */
+
+ /* Get the right set of active list links for this direction */
+ if (direction == CELL_DIRECTION_OUT) {
+ next_active = &(circ->next_active_on_n_chan);
+ prev_active = &(circ->prev_active_on_n_chan);
+ circuit_cmux = circ->n_mux;
+ chan = circ->n_chan;
+ circ_id = circ->n_circ_id;
+ } else {
+ next_active = &(TO_OR_CIRCUIT(circ)->next_active_on_p_chan);
+ prev_active = &(TO_OR_CIRCUIT(circ)->prev_active_on_p_chan);
+ circuit_cmux = TO_OR_CIRCUIT(circ)->p_mux;
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
+ circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
+
+ /* Assert that it is attached to this mux and a channel */
+ tor_assert(cmux == circuit_cmux);
+ tor_assert(chan != NULL);
+
+ /*
+ * Check if the circuit really was inactive; if it's active, at least one
+ * of the next_active and prev_active pointers will not be NULL, or this
+ * circuit will be either the head or tail of the list for this cmux.
+ */
+ already_active = (*prev_active != NULL || *next_active != NULL ||
+ cmux->active_circuits_head == circ ||
+ cmux->active_circuits_tail == circ);
+
+ /* If we're already active, log a warning and finish */
+ if (already_active) {
+ log_warn(LD_CIRC,
+ "Circuit %u on channel " U64_FORMAT " was already active",
+ (unsigned)circ_id, U64_PRINTF_ARG(chan->global_identifier));
+ return;
+ }
+
+ /*
+ * This is going at the head of the list; if the old head is not NULL,
+ * then its prev pointer should point to this.
+ */
+ *next_active = cmux->active_circuits_head; /* Next is old head */
+ *prev_active = NULL; /* Prev is NULL (this will be the head) */
+ if (cmux->active_circuits_head) {
+ /* The list had an old head; update its prev pointer */
+ next_prev =
+ circuitmux_prev_active_circ_p(cmux, cmux->active_circuits_head);
+ tor_assert(next_prev);
+ *next_prev = circ;
+ } else {
+ /* The list was empty; this becomes the tail as well */
+ cmux->active_circuits_tail = circ;
+ }
+ /* This becomes the new head of the list */
+ cmux->active_circuits_head = circ;
+
+ /* Policy-specific notification */
+ if (cmux->policy &&
+ cmux->policy->notify_circ_active) {
+ /* Okay, we need to check the circuit for policy data now */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* We should have found something */
+ tor_assert(hashent);
+ /* Notify */
+ cmux->policy->notify_circ_active(cmux, cmux->policy_data,
+ circ, hashent->muxinfo.policy_data);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Make a circuit inactive; update active list and policy-specific info, but
+ * we don't mess with the counters or hash table here.
+ */
+
+static void
+circuitmux_make_circuit_inactive(circuitmux_t *cmux, circuit_t *circ,
+ cell_direction_t direction)
+{
+ circuit_t **next_active = NULL, **prev_active = NULL;
+ circuit_t **next_prev = NULL, **prev_next = NULL;
+ circuitmux_t *circuit_cmux = NULL;
+ chanid_circid_muxinfo_t *hashent = NULL;
+ channel_t *chan = NULL;
+ circid_t circ_id;
+ int already_inactive;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_OUT ||
+ direction == CELL_DIRECTION_IN);
+ /*
+ * Don't circuitmux_assert_okay_paranoid(cmux) here because the cell count
+ * already got changed and we have to update the list for it to be consistent
+ * again.
+ */
+
+ /* Get the right set of active list links for this direction */
+ if (direction == CELL_DIRECTION_OUT) {
+ next_active = &(circ->next_active_on_n_chan);
+ prev_active = &(circ->prev_active_on_n_chan);
+ circuit_cmux = circ->n_mux;
+ chan = circ->n_chan;
+ circ_id = circ->n_circ_id;
+ } else {
+ next_active = &(TO_OR_CIRCUIT(circ)->next_active_on_p_chan);
+ prev_active = &(TO_OR_CIRCUIT(circ)->prev_active_on_p_chan);
+ circuit_cmux = TO_OR_CIRCUIT(circ)->p_mux;
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
+ circ_id = TO_OR_CIRCUIT(circ)->p_circ_id;
+ }
+
+ /* Assert that it is attached to this mux and a channel */
+ tor_assert(cmux == circuit_cmux);
+ tor_assert(chan != NULL);
+
+ /*
+ * Check if the circuit really was active; if it's inactive, the
+ * next_active and prev_active pointers will be NULL and this circuit
+ * will not be the head or tail of the list for this cmux.
+ */
+ already_inactive = (*prev_active == NULL && *next_active == NULL &&
+ cmux->active_circuits_head != circ &&
+ cmux->active_circuits_tail != circ);
+
+ /* If we're already inactive, log a warning and finish */
+ if (already_inactive) {
+ log_warn(LD_CIRC,
+ "Circuit %d on channel " U64_FORMAT " was already inactive",
+ (unsigned)circ_id, U64_PRINTF_ARG(chan->global_identifier));
+ return;
+ }
+
+ /* Remove from the list; first get next_prev and prev_next */
+ if (*next_active) {
+ /*
+ * If there's a next circuit, its previous circuit becomes this
+ * circuit's previous circuit.
+ */
+ next_prev = circuitmux_prev_active_circ_p(cmux, *next_active);
+ } else {
+ /* Else, the tail becomes this circuit's previous circuit */
+ next_prev = &(cmux->active_circuits_tail);
+ }
+
+ /* Got next_prev, now prev_next */
+ if (*prev_active) {
+ /*
+ * If there's a previous circuit, its next circuit becomes this circuit's
+ * next circuit.
+ */
+ prev_next = circuitmux_next_active_circ_p(cmux, *prev_active);
+ } else {
+ /* Else, the head becomes this circuit's next circuit */
+ prev_next = &(cmux->active_circuits_head);
+ }
+
+ /* Assert that we got sensible values for the next/prev pointers */
+ tor_assert(next_prev != NULL);
+ tor_assert(prev_next != NULL);
+
+ /* Update the next/prev pointers - this removes circ from the list */
+ *next_prev = *prev_active;
+ *prev_next = *next_active;
+
+ /* Now null out prev_active/next_active */
+ *prev_active = NULL;
+ *next_active = NULL;
+
+ /* Policy-specific notification */
+ if (cmux->policy &&
+ cmux->policy->notify_circ_inactive) {
+ /* Okay, we need to check the circuit for policy data now */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* We should have found something */
+ tor_assert(hashent);
+ /* Notify */
+ cmux->policy->notify_circ_inactive(cmux, cmux->policy_data,
+ circ, hashent->muxinfo.policy_data);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Clear the cell counter for a circuit on a circuitmux
+ */
+
+void
+circuitmux_clear_num_cells(circuitmux_t *cmux, circuit_t *circ)
+{
+ /* This is the same as setting the cell count to zero */
+ circuitmux_set_num_cells(cmux, circ, 0);
+}
+
+/**
+ * Set the cell counter for a circuit on a circuitmux
+ */
+
+void
+circuitmux_set_num_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+
+ circuitmux_assert_okay_paranoid(cmux);
+
+ /* Search for this circuit's entry */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* Assert that we found one */
+ tor_assert(hashent);
+
+ /* Update cmux cell counter */
+ cmux->n_cells -= hashent->muxinfo.cell_count;
+ cmux->n_cells += n_cells;
+
+ /* Do we need to notify a cmux policy? */
+ if (cmux->policy && cmux->policy->notify_set_n_cells) {
+ /* Call notify_set_n_cells */
+ cmux->policy->notify_set_n_cells(cmux,
+ cmux->policy_data,
+ circ,
+ hashent->muxinfo.policy_data,
+ n_cells);
+ }
+
+ /*
+ * Update cmux active circuit counter: is the old cell count > 0 and the
+ * new cell count == 0 ?
+ */
+ if (hashent->muxinfo.cell_count > 0 && n_cells == 0) {
+ --(cmux->n_active_circuits);
+ hashent->muxinfo.cell_count = n_cells;
+ circuitmux_make_circuit_inactive(cmux, circ, hashent->muxinfo.direction);
+ /* Is the old cell count == 0 and the new cell count > 0 ? */
+ } else if (hashent->muxinfo.cell_count == 0 && n_cells > 0) {
+ ++(cmux->n_active_circuits);
+ hashent->muxinfo.cell_count = n_cells;
+ circuitmux_make_circuit_active(cmux, circ, hashent->muxinfo.direction);
+ } else {
+ /*
+ * Update the entry cell count like this so we can put a
+ * circuitmux_assert_okay_paranoid inside make_circuit_(in)active() too.
+ */
+ hashent->muxinfo.cell_count = n_cells;
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/*
+ * Functions for channel code to call to get a circuit to transmit from or
+ * notify that cells have been transmitted.
+ */
+
+/**
+ * Pick a circuit to send from, using the active circuits list or a
+ * circuitmux policy if one is available. This is called from channel.c.
+ *
+ * If we would rather send a destroy cell, return NULL and set
+ * *<b>destroy_queue_out</b> to the destroy queue.
+ *
+ * If we have nothing to send, set *<b>destroy_queue_out</b> to NULL and
+ * return NULL.
+ */
+
+circuit_t *
+circuitmux_get_first_active_circuit(circuitmux_t *cmux,
+ cell_queue_t **destroy_queue_out)
+{
+ circuit_t *circ = NULL;
+
+ tor_assert(cmux);
+ tor_assert(destroy_queue_out);
+
+ *destroy_queue_out = NULL;
+
+ if (cmux->destroy_cell_queue.n &&
+ (!cmux->last_cell_was_destroy || cmux->n_active_circuits == 0)) {
+ /* We have destroy cells to send, and either we just sent a relay cell,
+ * or we have no relay cells to send. */
+
+ /* XXXX We should let the cmux policy have some say in this eventually. */
+ /* XXXX Alternating is not a terribly brilliant approach here. */
+ *destroy_queue_out = &cmux->destroy_cell_queue;
+
+ cmux->last_cell_was_destroy = 1;
+ } else if (cmux->n_active_circuits > 0) {
+ /* We also must have a cell available for this to be the case */
+ tor_assert(cmux->n_cells > 0);
+ /* Do we have a policy-provided circuit selector? */
+ if (cmux->policy && cmux->policy->pick_active_circuit) {
+ circ = cmux->policy->pick_active_circuit(cmux, cmux->policy_data);
+ }
+ /* Fall back on the head of the active circuits list */
+ if (!circ) {
+ tor_assert(cmux->active_circuits_head);
+ circ = cmux->active_circuits_head;
+ }
+ cmux->last_cell_was_destroy = 0;
+ } else {
+ tor_assert(cmux->n_cells == 0);
+ tor_assert(cmux->destroy_cell_queue.n == 0);
+ }
+
+ return circ;
+}
+
+/**
+ * Notify the circuitmux that cells have been sent on a circuit; this
+ * is called from channel.c.
+ */
+
+void
+circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells)
+{
+ chanid_circid_muxinfo_t *hashent = NULL;
+ int becomes_inactive = 0;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ circuitmux_assert_okay_paranoid(cmux);
+
+ if (n_cells == 0) return;
+
+ /*
+ * To handle this, we have to:
+ *
+ * 1.) Adjust the circuit's cell counter in the cmux hash table
+ * 2.) Move the circuit to the tail of the active_circuits linked list
+ * for this cmux, or make the circuit inactive if the cell count
+ * went to zero.
+ * 3.) Call cmux->policy->notify_xmit_cells(), if any
+ */
+
+ /* Find the hash entry */
+ hashent = circuitmux_find_map_entry(cmux, circ);
+ /* Assert that we found one */
+ tor_assert(hashent);
+
+ /* Adjust the cell counter and assert that we had that many cells to send */
+ tor_assert(n_cells <= hashent->muxinfo.cell_count);
+ hashent->muxinfo.cell_count -= n_cells;
+ /* Do we need to make the circuit inactive? */
+ if (hashent->muxinfo.cell_count == 0) becomes_inactive = 1;
+ /* Adjust the mux cell counter */
+ cmux->n_cells -= n_cells;
+
+ /* If we aren't making it inactive later, move it to the tail of the list */
+ if (!becomes_inactive) {
+ circuitmux_move_active_circ_to_tail(cmux, circ,
+ hashent->muxinfo.direction);
+ }
+
+ /*
+ * We call notify_xmit_cells() before making the circuit inactive if needed,
+ * so the policy can always count on this coming in on an active circuit.
+ */
+ if (cmux->policy && cmux->policy->notify_xmit_cells) {
+ cmux->policy->notify_xmit_cells(cmux, cmux->policy_data, circ,
+ hashent->muxinfo.policy_data,
+ n_cells);
+ }
+
+ /*
+ * Now make the circuit inactive if needed; this will call the policy's
+ * notify_circ_inactive() if present.
+ */
+ if (becomes_inactive) {
+ --(cmux->n_active_circuits);
+ circuitmux_make_circuit_inactive(cmux, circ, hashent->muxinfo.direction);
+ }
+
+ circuitmux_assert_okay_paranoid(cmux);
+}
+
+/**
+ * Notify the circuitmux that a destroy was sent, so we can update
+ * the counter.
+ */
+
+void
+circuitmux_notify_xmit_destroy(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ --(cmux->destroy_ctr);
+ --(global_destroy_ctr);
+ log_debug(LD_CIRC,
+ "Cmux at %p sent a destroy, cmux counter is now "I64_FORMAT", "
+ "global counter is now "I64_FORMAT,
+ cmux,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+}
+
+/*
+ * Circuitmux consistency checking assertions
+ */
+
+/**
+ * Check that circuitmux data structures are consistent and fail with an
+ * assert if not.
+ */
+
+void
+circuitmux_assert_okay(circuitmux_t *cmux)
+{
+ tor_assert(cmux);
+
+ /*
+ * Pass 1: iterate the hash table; for each entry:
+ * a) Check that the circuit has this cmux for n_mux or p_mux
+ * b) If the cell_count is > 0, set the mark bit; otherwise clear it
+ * c) Also check activeness (cell_count > 0 should be active)
+ * d) Count the number of circuits, active circuits and queued cells
+ * and at the end check that they match the counters in the cmux.
+ *
+ * Pass 2: iterate the active circuits list; for each entry,
+ * make sure the circuit is attached to this mux and appears
+ * in the hash table. Make sure the mark bit is 1, and clear
+ * it in the hash table entry. Consistency-check the linked
+ * list pointers.
+ *
+ * Pass 3: iterate the hash table again; assert if any active circuits
+ * (mark bit set to 1) are discovered that weren't cleared in pass 2
+ * (don't appear in the linked list).
+ */
+
+ circuitmux_assert_okay_pass_one(cmux);
+ circuitmux_assert_okay_pass_two(cmux);
+ circuitmux_assert_okay_pass_three(cmux);
+}
+
+/**
+ * Do the first pass of circuitmux_assert_okay(); see the comment in that
+ * function.
+ */
+
+static void
+circuitmux_assert_okay_pass_one(circuitmux_t *cmux)
+{
+ chanid_circid_muxinfo_t **i = NULL;
+ uint64_t chan_id;
+ channel_t *chan;
+ circid_t circ_id;
+ circuit_t *circ;
+ or_circuit_t *or_circ;
+ unsigned int circ_is_active;
+ circuit_t **next_p, **prev_p;
+ unsigned int n_circuits, n_active_circuits, n_cells;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+
+ /* Reset the counters */
+ n_circuits = n_active_circuits = n_cells = 0;
+ /* Start iterating the hash table */
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+ while (i) {
+ /* Assert that the hash table entry isn't null */
+ tor_assert(*i);
+
+ /* Get the channel and circuit id */
+ chan_id = (*i)->chan_id;
+ circ_id = (*i)->circ_id;
+
+ /* Find the channel and circuit, assert that they exist */
+ chan = channel_find_by_global_id(chan_id);
+ tor_assert(chan);
+ circ = circuit_get_by_circid_channel_even_if_marked(circ_id, chan);
+ tor_assert(circ);
+ /* Clear the circ_is_active bit to start */
+ circ_is_active = 0;
+
+ /* Assert that we know which direction this is going */
+ tor_assert((*i)->muxinfo.direction == CELL_DIRECTION_OUT ||
+ (*i)->muxinfo.direction == CELL_DIRECTION_IN);
+
+ if ((*i)->muxinfo.direction == CELL_DIRECTION_OUT) {
+ /* We should be n_mux on this circuit */
+ tor_assert(cmux == circ->n_mux);
+ tor_assert(chan == circ->n_chan);
+ /* Get next and prev for next test */
+ next_p = &(circ->next_active_on_n_chan);
+ prev_p = &(circ->prev_active_on_n_chan);
+ } else {
+ /* This should be an or_circuit_t and we should be p_mux */
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(cmux == or_circ->p_mux);
+ tor_assert(chan == or_circ->p_chan);
+ /* Get next and prev for next test */
+ next_p = &(or_circ->next_active_on_p_chan);
+ prev_p = &(or_circ->prev_active_on_p_chan);
+ }
+
+ /*
+ * Should this circuit be active? I.e., does the mux know about > 0
+ * cells on it?
+ */
+ circ_is_active = ((*i)->muxinfo.cell_count > 0);
+
+ /* It should be in the linked list iff it's active */
+ if (circ_is_active) {
+ /* Either we have a next link or we are the tail */
+ tor_assert(*next_p || (circ == cmux->active_circuits_tail));
+ /* Either we have a prev link or we are the head */
+ tor_assert(*prev_p || (circ == cmux->active_circuits_head));
+ /* Increment the active circuits counter */
+ ++n_active_circuits;
+ } else {
+ /* Shouldn't be in list, so no next or prev link */
+ tor_assert(!(*next_p));
+ tor_assert(!(*prev_p));
+ /* And can't be head or tail */
+ tor_assert(circ != cmux->active_circuits_head);
+ tor_assert(circ != cmux->active_circuits_tail);
+ }
+
+ /* Increment the circuits counter */
+ ++n_circuits;
+ /* Adjust the cell counter */
+ n_cells += (*i)->muxinfo.cell_count;
+
+ /* Set the mark bit to circ_is_active */
+ (*i)->muxinfo.mark = circ_is_active;
+
+ /* Advance to the next entry */
+ i = HT_NEXT(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+ }
+
+ /* Now check the counters */
+ tor_assert(n_cells == cmux->n_cells);
+ tor_assert(n_circuits == cmux->n_circuits);
+ tor_assert(n_active_circuits == cmux->n_active_circuits);
+}
+
+/**
+ * Do the second pass of circuitmux_assert_okay(); see the comment in that
+ * function.
+ */
+
+static void
+circuitmux_assert_okay_pass_two(circuitmux_t *cmux)
+{
+ circuit_t *curr_circ, *prev_circ = NULL, *next_circ;
+ or_circuit_t *curr_or_circ;
+ uint64_t curr_chan_id;
+ circid_t curr_circ_id;
+ circuit_t **next_p, **prev_p;
+ channel_t *chan;
+ unsigned int n_active_circuits = 0;
+ cell_direction_t direction;
+ chanid_circid_muxinfo_t search, *hashent = NULL;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+
+ /*
+ * Walk the linked list of active circuits in cmux; keep track of the
+ * previous circuit seen for consistency checking purposes. Count them
+ * to make sure the number in the linked list matches
+ * cmux->n_active_circuits.
+ */
+ curr_circ = cmux->active_circuits_head;
+ while (curr_circ) {
+ /* Reset some things */
+ chan = NULL;
+ curr_or_circ = NULL;
+ next_circ = NULL;
+ next_p = prev_p = NULL;
+ direction = 0;
+
+ /* Figure out if this is n_mux or p_mux */
+ if (cmux == curr_circ->n_mux) {
+ /* Get next_p and prev_p */
+ next_p = &(curr_circ->next_active_on_n_chan);
+ prev_p = &(curr_circ->prev_active_on_n_chan);
+ /* Get the channel */
+ chan = curr_circ->n_chan;
+ /* Get the circuit id */
+ curr_circ_id = curr_circ->n_circ_id;
+ /* Remember the direction */
+ direction = CELL_DIRECTION_OUT;
+ } else {
+ /* We must be p_mux and this must be an or_circuit_t */
+ curr_or_circ = TO_OR_CIRCUIT(curr_circ);
+ tor_assert(cmux == curr_or_circ->p_mux);
+ /* Get next_p and prev_p */
+ next_p = &(curr_or_circ->next_active_on_p_chan);
+ prev_p = &(curr_or_circ->prev_active_on_p_chan);
+ /* Get the channel */
+ chan = curr_or_circ->p_chan;
+ /* Get the circuit id */
+ curr_circ_id = curr_or_circ->p_circ_id;
+ /* Remember the direction */
+ direction = CELL_DIRECTION_IN;
+ }
+
+ /* Assert that we got a channel and get the channel ID */
+ tor_assert(chan);
+ curr_chan_id = chan->global_identifier;
+
+ /* Assert that prev_p points to last circuit we saw */
+ tor_assert(*prev_p == prev_circ);
+ /* If that's NULL, assert that we are the head */
+ if (!(*prev_p)) tor_assert(curr_circ == cmux->active_circuits_head);
+
+ /* Get the next circuit */
+ next_circ = *next_p;
+ /* If it's NULL, assert that we are the tail */
+ if (!(*next_p)) tor_assert(curr_circ == cmux->active_circuits_tail);
+
+ /* Now find the hash table entry for this circuit */
+ search.chan_id = curr_chan_id;
+ search.circ_id = curr_circ_id;
+ hashent = HT_FIND(chanid_circid_muxinfo_map, cmux->chanid_circid_map,
+ &search);
+
+ /* Assert that we have one */
+ tor_assert(hashent);
+
+ /* Assert that the direction matches */
+ tor_assert(direction == hashent->muxinfo.direction);
+
+ /* Assert that the hash entry got marked in pass one */
+ tor_assert(hashent->muxinfo.mark);
+
+ /* Clear the mark */
+ hashent->muxinfo.mark = 0;
+
+ /* Increment the counter */
+ ++n_active_circuits;
+
+ /* Advance to the next active circuit and update prev_circ */
+ prev_circ = curr_circ;
+ curr_circ = next_circ;
+ }
+
+ /* Assert that the counter matches the cmux */
+ tor_assert(n_active_circuits == cmux->n_active_circuits);
+}
+
+/**
+ * Do the third pass of circuitmux_assert_okay(); see the comment in that
+ * function.
+ */
+
+static void
+circuitmux_assert_okay_pass_three(circuitmux_t *cmux)
+{
+ chanid_circid_muxinfo_t **i = NULL;
+
+ tor_assert(cmux);
+ tor_assert(cmux->chanid_circid_map);
+
+ /* Start iterating the hash table */
+ i = HT_START(chanid_circid_muxinfo_map, cmux->chanid_circid_map);
+
+ /* Advance through each entry */
+ while (i) {
+ /* Assert that it isn't null */
+ tor_assert(*i);
+
+ /*
+ * Assert that this entry is not marked - i.e., that either we didn't
+ * think it should be active in pass one or we saw it in the active
+ * circuits linked list.
+ */
+ tor_assert(!((*i)->muxinfo.mark));
+
+ /* Advance to the next entry */
+ i = HT_NEXT(chanid_circid_muxinfo_map, cmux->chanid_circid_map, i);
+ }
+}
+
+/*DOCDOC */
+void
+circuitmux_append_destroy_cell(channel_t *chan,
+ circuitmux_t *cmux,
+ circid_t circ_id,
+ uint8_t reason)
+{
+ cell_t cell;
+ memset(&cell, 0, sizeof(cell_t));
+ cell.circ_id = circ_id;
+ cell.command = CELL_DESTROY;
+ cell.payload[0] = (uint8_t) reason;
+
+ cell_queue_append_packed_copy(NULL, &cmux->destroy_cell_queue, 0, &cell,
+ chan->wide_circ_ids, 0);
+
+ /* Destroy entering the queue, update counters */
+ ++(cmux->destroy_ctr);
+ ++global_destroy_ctr;
+ log_debug(LD_CIRC,
+ "Cmux at %p queued a destroy for circ %u, cmux counter is now "
+ I64_FORMAT", global counter is now "I64_FORMAT,
+ cmux, circ_id,
+ I64_PRINTF_ARG(cmux->destroy_ctr),
+ I64_PRINTF_ARG(global_destroy_ctr));
+
+ /* XXXX Duplicate code from append_cell_to_circuit_queue */
+ if (!channel_has_queued_writes(chan)) {
+ /* There is no data at all waiting to be sent on the outbuf. Add a
+ * cell, so that we can notice when it gets flushed, flushed_some can
+ * get called, and we can start putting more data onto the buffer then.
+ */
+ log_debug(LD_GENERAL, "Primed a buffer.");
+ channel_flush_from_first_active_circuit(chan, 1);
+ }
+}
+
diff --git a/src/or/circuitmux.h b/src/or/circuitmux.h
new file mode 100644
index 000000000..c4c0649c6
--- /dev/null
+++ b/src/or/circuitmux.h
@@ -0,0 +1,148 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux.h
+ * \brief Header file for circuitmux.c
+ **/
+
+#ifndef TOR_CIRCUITMUX_H
+#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;
+typedef struct circuitmux_policy_circ_data_s circuitmux_policy_circ_data_t;
+
+struct circuitmux_policy_s {
+ /* Allocate cmux-wide policy-specific data */
+ circuitmux_policy_data_t * (*alloc_cmux_data)(circuitmux_t *cmux);
+ /* Free cmux-wide policy-specific data */
+ void (*free_cmux_data)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+ /* Allocate circuit policy-specific data for a newly attached circuit */
+ circuitmux_policy_circ_data_t *
+ (*alloc_circ_data)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ cell_direction_t direction,
+ unsigned int cell_count);
+ /* Free circuit policy-specific data */
+ void (*free_circ_data)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+ /* Notify that a circuit has become active/inactive */
+ void (*notify_circ_active)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+ void (*notify_circ_inactive)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+ /* Notify of arriving/transmitted cells on a circuit */
+ void (*notify_set_n_cells)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells);
+ void (*notify_xmit_cells)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells);
+ /* Choose a circuit */
+ circuit_t * (*pick_active_circuit)(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+};
+
+/*
+ * Circuitmux policy implementations can subclass this to store circuitmux-
+ * wide data; it just has the magic number in the base struct.
+ */
+
+struct circuitmux_policy_data_s {
+ uint32_t magic;
+};
+
+/*
+ * Circuitmux policy implementations can subclass this to store circuit-
+ * specific data; it just has the magic number in the base struct.
+ */
+
+struct circuitmux_policy_circ_data_s {
+ uint32_t magic;
+};
+
+/*
+ * Upcast #defines for the above types
+ */
+
+/**
+ * Convert a circuitmux_policy_data_t subtype to a circuitmux_policy_data_t.
+ */
+
+#define TO_CMUX_POL_DATA(x) (&((x)->base_))
+
+/**
+ * Convert a circuitmux_policy_circ_data_t subtype to a
+ * circuitmux_policy_circ_data_t.
+ */
+
+#define TO_CMUX_POL_CIRC_DATA(x) (&((x)->base_))
+
+/* Consistency check */
+void circuitmux_assert_okay(circuitmux_t *cmux);
+
+/* Create/destroy */
+circuitmux_t * circuitmux_alloc(void);
+void circuitmux_detach_all_circuits(circuitmux_t *cmux,
+ smartlist_t *detached_out);
+void circuitmux_free(circuitmux_t *cmux);
+
+/* Policy control */
+void circuitmux_clear_policy(circuitmux_t *cmux);
+const circuitmux_policy_t * circuitmux_get_policy(circuitmux_t *cmux);
+void circuitmux_set_policy(circuitmux_t *cmux,
+ const circuitmux_policy_t *pol);
+
+/* Status inquiries */
+cell_direction_t circuitmux_attached_circuit_direction(
+ circuitmux_t *cmux,
+ circuit_t *circ);
+int circuitmux_is_circuit_attached(circuitmux_t *cmux, circuit_t *circ);
+int circuitmux_is_circuit_active(circuitmux_t *cmux, circuit_t *circ);
+unsigned int circuitmux_num_cells_for_circuit(circuitmux_t *cmux,
+ circuit_t *circ);
+unsigned int circuitmux_num_cells(circuitmux_t *cmux);
+unsigned int circuitmux_num_circuits(circuitmux_t *cmux);
+unsigned int circuitmux_num_active_circuits(circuitmux_t *cmux);
+
+/* Channel interface */
+circuit_t * circuitmux_get_first_active_circuit(circuitmux_t *cmux,
+ cell_queue_t **destroy_queue_out);
+void circuitmux_notify_xmit_cells(circuitmux_t *cmux, circuit_t *circ,
+ unsigned int n_cells);
+void circuitmux_notify_xmit_destroy(circuitmux_t *cmux);
+
+/* Circuit interface */
+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);
+
+void circuitmux_append_destroy_cell(channel_t *chan,
+ circuitmux_t *cmux, circid_t circ_id,
+ uint8_t reason);
+void circuitmux_mark_destroyed_circids_usable(circuitmux_t *cmux,
+ channel_t *chan);
+
+#endif /* TOR_CIRCUITMUX_H */
+
diff --git a/src/or/circuitmux_ewma.c b/src/or/circuitmux_ewma.c
new file mode 100644
index 000000000..3f37d7b9a
--- /dev/null
+++ b/src/or/circuitmux_ewma.c
@@ -0,0 +1,684 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux_ewma.c
+ * \brief EWMA circuit selection as a circuitmux_t policy
+ **/
+
+#define TOR_CIRCUITMUX_EWMA_C_
+
+#include <math.h>
+
+#include "or.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
+#include "networkstatus.h"
+
+/*** EWMA parameter #defines ***/
+
+/** How long does a tick last (seconds)? */
+#define EWMA_TICK_LEN 10
+
+/** The default per-tick scale factor, if it hasn't been overridden by a
+ * consensus or a configuration setting. zero means "disabled". */
+#define EWMA_DEFAULT_HALFLIFE 0.0
+
+/*** Some useful constant #defines ***/
+
+/*DOCDOC*/
+#define EPSILON 0.00001
+/*DOCDOC*/
+#define LOG_ONEHALF -0.69314718055994529
+
+/*** EWMA structures ***/
+
+typedef struct cell_ewma_s cell_ewma_t;
+typedef struct ewma_policy_data_s ewma_policy_data_t;
+typedef struct ewma_policy_circ_data_s ewma_policy_circ_data_t;
+
+/**
+ * The cell_ewma_t structure keeps track of how many cells a circuit has
+ * transferred recently. It keeps an EWMA (exponentially weighted moving
+ * average) of the number of cells flushed from the circuit queue onto a
+ * connection in channel_flush_from_first_active_circuit().
+ */
+
+struct cell_ewma_s {
+ /** The last 'tick' at which we recalibrated cell_count.
+ *
+ * A cell sent at exactly the start of this tick has weight 1.0. Cells sent
+ * since the start of this tick have weight greater than 1.0; ones sent
+ * earlier have less weight. */
+ unsigned int last_adjusted_tick;
+ /** The EWMA of the cell count. */
+ double cell_count;
+ /** True iff this is the cell count for a circuit's previous
+ * channel. */
+ unsigned int is_for_p_chan : 1;
+ /** The position of the circuit within the OR connection's priority
+ * queue. */
+ int heap_index;
+};
+
+struct ewma_policy_data_s {
+ circuitmux_policy_data_t base_;
+
+ /**
+ * Priority queue of cell_ewma_t for circuits with queued cells waiting
+ * for room to free up on the channel that owns this circuitmux. Kept
+ * in heap order according to EWMA. This was formerly in channel_t, and
+ * in or_connection_t before that.
+ */
+ smartlist_t *active_circuit_pqueue;
+
+ /**
+ * The tick on which the cell_ewma_ts in active_circuit_pqueue last had
+ * their ewma values rescaled. This was formerly in channel_t, and in
+ * or_connection_t before that.
+ */
+ unsigned int active_circuit_pqueue_last_recalibrated;
+};
+
+struct ewma_policy_circ_data_s {
+ circuitmux_policy_circ_data_t base_;
+
+ /**
+ * The EWMA count for the number of cells flushed from this circuit
+ * onto this circuitmux. Used to determine which circuit to flush
+ * from next. This was formerly in circuit_t and or_circuit_t.
+ */
+ cell_ewma_t cell_ewma;
+
+ /**
+ * Pointer back to the circuit_t this is for; since we're separating
+ * out circuit selection policy like this, we can't attach cell_ewma_t
+ * to the circuit_t any more, so we can't use SUBTYPE_P directly to a
+ * circuit_t like before; instead get it here.
+ */
+ circuit_t *circ;
+};
+
+#define EWMA_POL_DATA_MAGIC 0x2fd8b16aU
+#define EWMA_POL_CIRC_DATA_MAGIC 0x761e7747U
+
+/*** Downcasts for the above types ***/
+
+static ewma_policy_data_t *
+TO_EWMA_POL_DATA(circuitmux_policy_data_t *);
+
+static ewma_policy_circ_data_t *
+TO_EWMA_POL_CIRC_DATA(circuitmux_policy_circ_data_t *);
+
+/**
+ * Downcast a circuitmux_policy_data_t to an ewma_policy_data_t and assert
+ * if the cast is impossible.
+ */
+
+static INLINE ewma_policy_data_t *
+TO_EWMA_POL_DATA(circuitmux_policy_data_t *pol)
+{
+ if (!pol) return NULL;
+ else {
+ tor_assert(pol->magic == EWMA_POL_DATA_MAGIC);
+ return DOWNCAST(ewma_policy_data_t, pol);
+ }
+}
+
+/**
+ * Downcast a circuitmux_policy_circ_data_t to an ewma_policy_circ_data_t
+ * and assert if the cast is impossible.
+ */
+
+static INLINE ewma_policy_circ_data_t *
+TO_EWMA_POL_CIRC_DATA(circuitmux_policy_circ_data_t *pol)
+{
+ if (!pol) return NULL;
+ else {
+ tor_assert(pol->magic == EWMA_POL_CIRC_DATA_MAGIC);
+ return DOWNCAST(ewma_policy_circ_data_t, pol);
+ }
+}
+
+/*** Static declarations for circuitmux_ewma.c ***/
+
+static void add_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma);
+static int compare_cell_ewma_counts(const void *p1, const void *p2);
+static unsigned cell_ewma_tick_from_timeval(const struct timeval *now,
+ double *remainder_out);
+static circuit_t * cell_ewma_to_circuit(cell_ewma_t *ewma);
+static INLINE double get_scale_factor(unsigned from_tick, unsigned to_tick);
+static cell_ewma_t * pop_first_cell_ewma(ewma_policy_data_t *pol);
+static void remove_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma);
+static void scale_single_cell_ewma(cell_ewma_t *ewma, unsigned cur_tick);
+static void scale_active_circuits(ewma_policy_data_t *pol,
+ unsigned cur_tick);
+
+/*** Circuitmux policy methods ***/
+
+static circuitmux_policy_data_t * ewma_alloc_cmux_data(circuitmux_t *cmux);
+static void ewma_free_cmux_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+static circuitmux_policy_circ_data_t *
+ewma_alloc_circ_data(circuitmux_t *cmux, circuitmux_policy_data_t *pol_data,
+ circuit_t *circ, cell_direction_t direction,
+ unsigned int cell_count);
+static void
+ewma_free_circ_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+static void
+ewma_notify_circ_active(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+static void
+ewma_notify_circ_inactive(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data);
+static void
+ewma_notify_xmit_cells(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells);
+static circuit_t *
+ewma_pick_active_circuit(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data);
+
+/*** EWMA global variables ***/
+
+/** The per-tick scale factor to be used when computing cell-count EWMA
+ * values. (A cell sent N ticks before the start of the current tick
+ * has value ewma_scale_factor ** N.)
+ */
+static double ewma_scale_factor = 0.1;
+/* DOCDOC ewma_enabled */
+static int ewma_enabled = 0;
+
+/*** EWMA circuitmux_policy_t method table ***/
+
+circuitmux_policy_t ewma_policy = {
+ /*.alloc_cmux_data =*/ ewma_alloc_cmux_data,
+ /*.free_cmux_data =*/ ewma_free_cmux_data,
+ /*.alloc_circ_data =*/ ewma_alloc_circ_data,
+ /*.free_circ_data =*/ ewma_free_circ_data,
+ /*.notify_circ_active =*/ ewma_notify_circ_active,
+ /*.notify_circ_inactive =*/ ewma_notify_circ_inactive,
+ /*.notify_set_n_cells =*/ NULL, /* EWMA doesn't need this */
+ /*.notify_xmit_cells =*/ ewma_notify_xmit_cells,
+ /*.pick_active_circuit =*/ ewma_pick_active_circuit
+};
+
+/*** EWMA method implementations using the below EWMA helper functions ***/
+
+/**
+ * Allocate an ewma_policy_data_t and upcast it to a circuitmux_policy_data_t;
+ * this is called when setting the policy on a circuitmux_t to ewma_policy.
+ */
+
+static circuitmux_policy_data_t *
+ewma_alloc_cmux_data(circuitmux_t *cmux)
+{
+ ewma_policy_data_t *pol = NULL;
+
+ tor_assert(cmux);
+
+ pol = tor_malloc_zero(sizeof(*pol));
+ pol->base_.magic = EWMA_POL_DATA_MAGIC;
+ pol->active_circuit_pqueue = smartlist_new();
+ pol->active_circuit_pqueue_last_recalibrated = cell_ewma_get_tick();
+
+ return TO_CMUX_POL_DATA(pol);
+}
+
+/**
+ * Free an ewma_policy_data_t allocated with ewma_alloc_cmux_data()
+ */
+
+static void
+ewma_free_cmux_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data)
+{
+ ewma_policy_data_t *pol = NULL;
+
+ tor_assert(cmux);
+ if (!pol_data) return;
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+
+ smartlist_free(pol->active_circuit_pqueue);
+ tor_free(pol);
+}
+
+/**
+ * Allocate an ewma_policy_circ_data_t and upcast it to a
+ * circuitmux_policy_data_t; this is called when attaching a circuit to a
+ * circuitmux_t with ewma_policy.
+ */
+
+static circuitmux_policy_circ_data_t *
+ewma_alloc_circ_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ cell_direction_t direction,
+ unsigned int cell_count)
+{
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(direction == CELL_DIRECTION_OUT ||
+ direction == CELL_DIRECTION_IN);
+ /* Shut the compiler up */
+ tor_assert(cell_count == cell_count);
+
+ cdata = tor_malloc_zero(sizeof(*cdata));
+ cdata->base_.magic = EWMA_POL_CIRC_DATA_MAGIC;
+ cdata->circ = circ;
+
+ /*
+ * Initialize the cell_ewma_t structure (formerly in
+ * init_circuit_base())
+ */
+ cdata->cell_ewma.last_adjusted_tick = cell_ewma_get_tick();
+ cdata->cell_ewma.cell_count = 0.0;
+ cdata->cell_ewma.heap_index = -1;
+ if (direction == CELL_DIRECTION_IN) {
+ cdata->cell_ewma.is_for_p_chan = 1;
+ } else {
+ cdata->cell_ewma.is_for_p_chan = 0;
+ }
+
+ return TO_CMUX_POL_CIRC_DATA(cdata);
+}
+
+/**
+ * Free an ewma_policy_circ_data_t allocated with ewma_alloc_circ_data()
+ */
+
+static void
+ewma_free_circ_data(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data)
+
+{
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(circ);
+ tor_assert(pol_data);
+
+ if (!pol_circ_data) return;
+
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ tor_free(cdata);
+}
+
+/**
+ * Handle circuit activation; this inserts the circuit's cell_ewma into
+ * the active_circuits_pqueue.
+ */
+
+static void
+ewma_notify_circ_active(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data)
+{
+ ewma_policy_data_t *pol = NULL;
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(pol_circ_data);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ add_cell_ewma(pol, &(cdata->cell_ewma));
+}
+
+/**
+ * Handle circuit deactivation; this removes the circuit's cell_ewma from
+ * the active_circuits_pqueue.
+ */
+
+static void
+ewma_notify_circ_inactive(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data)
+{
+ ewma_policy_data_t *pol = NULL;
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(pol_circ_data);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ remove_cell_ewma(pol, &(cdata->cell_ewma));
+}
+
+/**
+ * Update cell_ewma for this circuit after we've sent some cells, and
+ * remove/reinsert it in the queue. This used to be done (brokenly,
+ * see bug 6816) in channel_flush_from_first_active_circuit().
+ */
+
+static void
+ewma_notify_xmit_cells(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data,
+ circuit_t *circ,
+ circuitmux_policy_circ_data_t *pol_circ_data,
+ unsigned int n_cells)
+{
+ ewma_policy_data_t *pol = NULL;
+ ewma_policy_circ_data_t *cdata = NULL;
+ unsigned int tick;
+ double fractional_tick, ewma_increment;
+ /* The current (hi-res) time */
+ struct timeval now_hires;
+ cell_ewma_t *cell_ewma, *tmp;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+ tor_assert(circ);
+ tor_assert(pol_circ_data);
+ tor_assert(n_cells > 0);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+ cdata = TO_EWMA_POL_CIRC_DATA(pol_circ_data);
+
+ /* Rescale the EWMAs if needed */
+ tor_gettimeofday_cached(&now_hires);
+ tick = cell_ewma_tick_from_timeval(&now_hires, &fractional_tick);
+
+ if (tick != pol->active_circuit_pqueue_last_recalibrated) {
+ scale_active_circuits(pol, tick);
+ }
+
+ /* How much do we adjust the cell count in cell_ewma by? */
+ ewma_increment =
+ ((double)(n_cells)) * pow(ewma_scale_factor, -fractional_tick);
+
+ /* Do the adjustment */
+ cell_ewma = &(cdata->cell_ewma);
+ cell_ewma->cell_count += ewma_increment;
+
+ /*
+ * Since we just sent on this circuit, it should be at the head of
+ * the queue. Pop the head, assert that it matches, then re-add.
+ */
+ tmp = pop_first_cell_ewma(pol);
+ tor_assert(tmp == cell_ewma);
+ add_cell_ewma(pol, cell_ewma);
+}
+
+/**
+ * Pick the preferred circuit to send from; this will be the one with
+ * the lowest EWMA value in the priority queue. This used to be done
+ * in channel_flush_from_first_active_circuit().
+ */
+
+static circuit_t *
+ewma_pick_active_circuit(circuitmux_t *cmux,
+ circuitmux_policy_data_t *pol_data)
+{
+ ewma_policy_data_t *pol = NULL;
+ circuit_t *circ = NULL;
+ cell_ewma_t *cell_ewma = NULL;
+
+ tor_assert(cmux);
+ tor_assert(pol_data);
+
+ pol = TO_EWMA_POL_DATA(pol_data);
+
+ if (smartlist_len(pol->active_circuit_pqueue) > 0) {
+ /* Get the head of the queue */
+ cell_ewma = smartlist_get(pol->active_circuit_pqueue, 0);
+ circ = cell_ewma_to_circuit(cell_ewma);
+ }
+
+ return circ;
+}
+
+/** Helper for sorting cell_ewma_t values in their priority queue. */
+static int
+compare_cell_ewma_counts(const void *p1, const void *p2)
+{
+ const cell_ewma_t *e1 = p1, *e2 = p2;
+
+ if (e1->cell_count < e2->cell_count)
+ return -1;
+ else if (e1->cell_count > e2->cell_count)
+ return 1;
+ else
+ return 0;
+}
+
+/** Given a cell_ewma_t, return a pointer to the circuit containing it. */
+static circuit_t *
+cell_ewma_to_circuit(cell_ewma_t *ewma)
+{
+ ewma_policy_circ_data_t *cdata = NULL;
+
+ tor_assert(ewma);
+ cdata = SUBTYPE_P(ewma, ewma_policy_circ_data_t, cell_ewma);
+ tor_assert(cdata);
+
+ return cdata->circ;
+}
+
+/* ==== Functions for scaling cell_ewma_t ====
+
+ When choosing which cells to relay first, we favor circuits that have been
+ quiet recently. This gives better latency on connections that aren't
+ pushing lots of data, and makes the network feel more interactive.
+
+ Conceptually, we take an exponentially weighted mean average of the number
+ of cells a circuit has sent, and allow active circuits (those with cells to
+ relay) to send cells in reverse order of their exponentially-weighted mean
+ average (EWMA) cell count. [That is, a cell sent N seconds ago 'counts'
+ F^N times as much as a cell sent now, for 0<F<1.0, and we favor the
+ circuit that has sent the fewest cells]
+
+ If 'double' had infinite precision, we could do this simply by counting a
+ cell sent at startup as having weight 1.0, and a cell sent N seconds later
+ as having weight F^-N. This way, we would never need to re-scale
+ any already-sent cells.
+
+ To prevent double from overflowing, we could count a cell sent now as
+ having weight 1.0 and a cell sent N seconds ago as having weight F^N.
+ This, however, would mean we'd need to re-scale *ALL* old circuits every
+ time we wanted to send a cell.
+
+ So as a compromise, we divide time into 'ticks' (currently, 10-second
+ increments) and say that a cell sent at the start of a current tick is
+ worth 1.0, a cell sent N seconds before the start of the current tick is
+ worth F^N, and a cell sent N seconds after the start of the current tick is
+ worth F^-N. This way we don't overflow, and we don't need to constantly
+ rescale.
+ */
+
+/** Given a timeval <b>now</b>, compute the cell_ewma tick in which it occurs
+ * and the fraction of the tick that has elapsed between the start of the tick
+ * and <b>now</b>. Return the former and store the latter in
+ * *<b>remainder_out</b>.
+ *
+ * These tick values are not meant to be shared between Tor instances, or used
+ * for other purposes. */
+
+static unsigned
+cell_ewma_tick_from_timeval(const struct timeval *now,
+ double *remainder_out)
+{
+ unsigned res = (unsigned) (now->tv_sec / EWMA_TICK_LEN);
+ /* rem */
+ double rem = (now->tv_sec % EWMA_TICK_LEN) +
+ ((double)(now->tv_usec)) / 1.0e6;
+ *remainder_out = rem / EWMA_TICK_LEN;
+ return res;
+}
+
+/** Tell the caller whether ewma_enabled is set */
+int
+cell_ewma_enabled(void)
+{
+ return ewma_enabled;
+}
+
+/** Compute and return the current cell_ewma tick. */
+unsigned int
+cell_ewma_get_tick(void)
+{
+ return ((unsigned)approx_time() / EWMA_TICK_LEN);
+}
+
+/** Adjust the global cell scale factor based on <b>options</b> */
+void
+cell_ewma_set_scale_factor(const or_options_t *options,
+ const networkstatus_t *consensus)
+{
+ int32_t halflife_ms;
+ double halflife;
+ const char *source;
+ if (options && options->CircuitPriorityHalflife >= -EPSILON) {
+ halflife = options->CircuitPriorityHalflife;
+ source = "CircuitPriorityHalflife in configuration";
+ } else if (consensus && (halflife_ms = networkstatus_get_param(
+ consensus, "CircuitPriorityHalflifeMsec",
+ -1, -1, INT32_MAX)) >= 0) {
+ halflife = ((double)halflife_ms)/1000.0;
+ source = "CircuitPriorityHalflifeMsec in consensus";
+ } else {
+ halflife = EWMA_DEFAULT_HALFLIFE;
+ source = "Default value";
+ }
+
+ if (halflife <= EPSILON) {
+ /* The cell EWMA algorithm is disabled. */
+ ewma_scale_factor = 0.1;
+ ewma_enabled = 0;
+ log_info(LD_OR,
+ "Disabled cell_ewma algorithm because of value in %s",
+ source);
+ } else {
+ /* convert halflife into halflife-per-tick. */
+ halflife /= EWMA_TICK_LEN;
+ /* compute per-tick scale factor. */
+ ewma_scale_factor = exp( LOG_ONEHALF / halflife );
+ ewma_enabled = 1;
+ log_info(LD_OR,
+ "Enabled cell_ewma algorithm because of value in %s; "
+ "scale factor is %f per %d seconds",
+ source, ewma_scale_factor, EWMA_TICK_LEN);
+ }
+}
+
+/** Return the multiplier necessary to convert the value of a cell sent in
+ * 'from_tick' to one sent in 'to_tick'. */
+static INLINE double
+get_scale_factor(unsigned from_tick, unsigned to_tick)
+{
+ /* This math can wrap around, but that's okay: unsigned overflow is
+ well-defined */
+ int diff = (int)(to_tick - from_tick);
+ return pow(ewma_scale_factor, diff);
+}
+
+/** Adjust the cell count of <b>ewma</b> so that it is scaled with respect to
+ * <b>cur_tick</b> */
+static void
+scale_single_cell_ewma(cell_ewma_t *ewma, unsigned cur_tick)
+{
+ double factor = get_scale_factor(ewma->last_adjusted_tick, cur_tick);
+ ewma->cell_count *= factor;
+ ewma->last_adjusted_tick = cur_tick;
+}
+
+/** Adjust the cell count of every active circuit on <b>chan</b> so
+ * that they are scaled with respect to <b>cur_tick</b> */
+static void
+scale_active_circuits(ewma_policy_data_t *pol, unsigned cur_tick)
+{
+ double factor;
+
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+
+ factor =
+ get_scale_factor(
+ pol->active_circuit_pqueue_last_recalibrated,
+ cur_tick);
+ /** Ordinarily it isn't okay to change the value of an element in a heap,
+ * but it's okay here, since we are preserving the order. */
+ SMARTLIST_FOREACH_BEGIN(
+ pol->active_circuit_pqueue,
+ cell_ewma_t *, e) {
+ tor_assert(e->last_adjusted_tick ==
+ pol->active_circuit_pqueue_last_recalibrated);
+ e->cell_count *= factor;
+ e->last_adjusted_tick = cur_tick;
+ } SMARTLIST_FOREACH_END(e);
+ pol->active_circuit_pqueue_last_recalibrated = cur_tick;
+}
+
+/** Rescale <b>ewma</b> to the same scale as <b>pol</b>, and add it to
+ * <b>pol</b>'s priority queue of active circuits */
+static void
+add_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma)
+{
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+ tor_assert(ewma);
+ tor_assert(ewma->heap_index == -1);
+
+ scale_single_cell_ewma(
+ ewma,
+ pol->active_circuit_pqueue_last_recalibrated);
+
+ smartlist_pqueue_add(pol->active_circuit_pqueue,
+ compare_cell_ewma_counts,
+ STRUCT_OFFSET(cell_ewma_t, heap_index),
+ ewma);
+}
+
+/** Remove <b>ewma</b> from <b>pol</b>'s priority queue of active circuits */
+static void
+remove_cell_ewma(ewma_policy_data_t *pol, cell_ewma_t *ewma)
+{
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+ tor_assert(ewma);
+ tor_assert(ewma->heap_index != -1);
+
+ smartlist_pqueue_remove(pol->active_circuit_pqueue,
+ compare_cell_ewma_counts,
+ STRUCT_OFFSET(cell_ewma_t, heap_index),
+ ewma);
+}
+
+/** Remove and return the first cell_ewma_t from pol's priority queue of
+ * active circuits. Requires that the priority queue is nonempty. */
+static cell_ewma_t *
+pop_first_cell_ewma(ewma_policy_data_t *pol)
+{
+ tor_assert(pol);
+ tor_assert(pol->active_circuit_pqueue);
+
+ return smartlist_pqueue_pop(pol->active_circuit_pqueue,
+ compare_cell_ewma_counts,
+ STRUCT_OFFSET(cell_ewma_t, heap_index));
+}
+
diff --git a/src/or/circuitmux_ewma.h b/src/or/circuitmux_ewma.h
new file mode 100644
index 000000000..a512745c7
--- /dev/null
+++ b/src/or/circuitmux_ewma.h
@@ -0,0 +1,29 @@
+/* * Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file circuitmux_ewma.h
+ * \brief Header file for circuitmux_ewma.c
+ **/
+
+#ifndef TOR_CIRCUITMUX_EWMA_H
+#define TOR_CIRCUITMUX_EWMA_H
+
+#include "or.h"
+#include "circuitmux.h"
+
+/* Everything but circuitmux_ewma.c should see this extern */
+#ifndef TOR_CIRCUITMUX_EWMA_C_
+
+extern circuitmux_policy_t ewma_policy;
+
+#endif /* !(TOR_CIRCUITMUX_EWMA_C_) */
+
+/* Externally visible EWMA functions */
+int cell_ewma_enabled(void);
+unsigned int cell_ewma_get_tick(void);
+void cell_ewma_set_scale_factor(const or_options_t *options,
+ const networkstatus_t *consensus);
+
+#endif /* TOR_CIRCUITMUX_EWMA_H */
+
diff --git a/src/or/circuitstats.c b/src/or/circuitstats.c
new file mode 100644
index 000000000..e362b1b49
--- /dev/null
+++ b/src/or/circuitstats.c
@@ -0,0 +1,1658 @@
+/* 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 */
+
+#define CIRCUITSTATS_PRIVATE
+
+#include "or.h"
+#include "circuitbuild.h"
+#include "circuitstats.h"
+#include "config.h"
+#include "confparse.h"
+#include "control.h"
+#include "main.h"
+#include "networkstatus.h"
+#include "statefile.h"
+
+#undef log
+#include <math.h>
+
+static void cbt_control_event_buildtimeout_set(
+ const circuit_build_times_t *cbt,
+ buildtimeout_set_event_t type);
+
+#define CBT_BIN_TO_MS(bin) ((bin)*CBT_BIN_WIDTH + (CBT_BIN_WIDTH/2))
+
+/** Global list of circuit build times */
+// XXXX: Add this as a member for entry_guard_t instead of global?
+// Then we could do per-guard statistics, as guards are likely to
+// vary in their own latency. The downside of this is that guards
+// can change frequently, so we'd be building a lot more circuits
+// most likely.
+static 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
+
+/** Return a pointer to the data structure describing our current circuit
+ * build time history and computations. */
+const circuit_build_times_t *
+get_circuit_build_times(void)
+{
+ return &circ_times;
+}
+
+/** As get_circuit_build_times, but return a mutable pointer. */
+circuit_build_times_t *
+get_circuit_build_times_mutable(void)
+{
+ return &circ_times;
+}
+
+/** Return the time to wait before actually closing an under-construction, in
+ * milliseconds. */
+double
+get_circuit_build_close_time_ms(void)
+{
+ return circ_times.close_ms;
+}
+
+/** Return the time to wait before giving up on an under-construction circuit,
+ * in milliseconds. */
+double
+get_circuit_build_timeout_ms(void)
+{
+ return circ_times.timeout_ms;
+}
+
+/**
+ * This function decides if CBT learning should be disabled. It returns
+ * true if one or more of the following four conditions are met:
+ *
+ * 1. If the cbtdisabled consensus parameter is set.
+ * 2. If the torrc option LearnCircuitBuildTimeout is false.
+ * 3. If we are a directory authority
+ * 4. If we fail to write circuit build time history to our state file.
+ */
+int
+circuit_build_times_disabled(void)
+{
+ if (unit_tests) {
+ return 0;
+ } else {
+ int consensus_disabled = networkstatus_get_param(NULL, "cbtdisabled",
+ 0, 0, 1);
+ int config_disabled = !get_options()->LearnCircuitBuildTimeout;
+ int dirauth_disabled = get_options()->AuthoritativeDir;
+ int state_disabled = did_last_state_file_write_fail() ? 1 : 0;
+
+ if (consensus_disabled || config_disabled || dirauth_disabled ||
+ state_disabled) {
+#if 0
+ log_debug(LD_CIRC,
+ "CircuitBuildTime learning is disabled. "
+ "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
+ consensus_disabled, config_disabled, dirauth_disabled,
+ state_disabled);
+#endif
+ return 1;
+ } else {
+#if 0
+ log_debug(LD_CIRC,
+ "CircuitBuildTime learning is not disabled. "
+ "Consensus=%d, Config=%d, AuthDir=%d, StateFile=%d",
+ consensus_disabled, config_disabled, dirauth_disabled,
+ state_disabled);
+#endif
+ return 0;
+ }
+ }
+}
+
+/**
+ * Retrieve and bounds-check the cbtmaxtimeouts consensus paramter.
+ *
+ * Effect: When this many timeouts happen in the last 'cbtrecentcount'
+ * circuit attempts, the client should discard all of its history and
+ * begin learning a fresh timeout value.
+ */
+static int32_t
+circuit_build_times_max_timeouts(void)
+{
+ int32_t cbt_maxtimeouts;
+
+ cbt_maxtimeouts = networkstatus_get_param(NULL, "cbtmaxtimeouts",
+ CBT_DEFAULT_MAX_RECENT_TIMEOUT_COUNT,
+ CBT_MIN_MAX_RECENT_TIMEOUT_COUNT,
+ CBT_MAX_MAX_RECENT_TIMEOUT_COUNT);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_max_timeouts() called, cbtmaxtimeouts is"
+ " %d",
+ cbt_maxtimeouts);
+ }
+
+ return cbt_maxtimeouts;
+}
+
+/**
+ * Retrieve and bounds-check the cbtnummodes consensus paramter.
+ *
+ * Effect: This value governs how many modes to use in the weighted
+ * average calculation of Pareto parameter Xm. A value of 3 introduces
+ * some bias (2-5% of CDF) under ideal conditions, but allows for better
+ * performance in the event that a client chooses guard nodes of radically
+ * different performance characteristics.
+ */
+static int32_t
+circuit_build_times_default_num_xm_modes(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtnummodes",
+ CBT_DEFAULT_NUM_XM_MODES,
+ CBT_MIN_NUM_XM_MODES,
+ CBT_MAX_NUM_XM_MODES);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_default_num_xm_modes() called, cbtnummodes"
+ " is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * Retrieve and bounds-check the cbtmincircs consensus paramter.
+ *
+ * Effect: This is the minimum number of circuits to build before
+ * computing a timeout.
+ */
+static int32_t
+circuit_build_times_min_circs_to_observe(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtmincircs",
+ CBT_DEFAULT_MIN_CIRCUITS_TO_OBSERVE,
+ CBT_MIN_MIN_CIRCUITS_TO_OBSERVE,
+ CBT_MAX_MIN_CIRCUITS_TO_OBSERVE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_min_circs_to_observe() called, cbtmincircs"
+ " is %d",
+ num);
+ }
+
+ return num;
+}
+
+/** Return true iff <b>cbt</b> has recorded enough build times that we
+ * want to start acting on the timeout it implies. */
+int
+circuit_build_times_enough_to_compute(const circuit_build_times_t *cbt)
+{
+ return cbt->total_build_times >= circuit_build_times_min_circs_to_observe();
+}
+
+/**
+ * Retrieve and bounds-check the cbtquantile consensus paramter.
+ *
+ * Effect: This is the position on the quantile curve to use to set the
+ * timeout value. It is a percent (10-99).
+ */
+double
+circuit_build_times_quantile_cutoff(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtquantile",
+ CBT_DEFAULT_QUANTILE_CUTOFF,
+ CBT_MIN_QUANTILE_CUTOFF,
+ CBT_MAX_QUANTILE_CUTOFF);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_quantile_cutoff() called, cbtquantile"
+ " is %d",
+ num);
+ }
+
+ return num/100.0;
+}
+
+/**
+ * Retrieve and bounds-check the cbtclosequantile consensus paramter.
+ *
+ * Effect: This is the position on the quantile curve to use to set the
+ * timeout value to use to actually close circuits. It is a percent
+ * (0-99).
+ */
+static double
+circuit_build_times_close_quantile(void)
+{
+ int32_t param;
+ /* Cast is safe - circuit_build_times_quantile_cutoff() is capped */
+ int32_t min = (int)tor_lround(100*circuit_build_times_quantile_cutoff());
+ param = networkstatus_get_param(NULL, "cbtclosequantile",
+ CBT_DEFAULT_CLOSE_QUANTILE,
+ CBT_MIN_CLOSE_QUANTILE,
+ CBT_MAX_CLOSE_QUANTILE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_close_quantile() called, cbtclosequantile"
+ " is %d", param);
+ }
+
+ if (param < min) {
+ log_warn(LD_DIR, "Consensus parameter cbtclosequantile is "
+ "too small, raising to %d", min);
+ param = min;
+ }
+ return param / 100.0;
+}
+
+/**
+ * Retrieve and bounds-check the cbttestfreq consensus paramter.
+ *
+ * Effect: Describes how often in seconds to build a test circuit to
+ * gather timeout values. Only applies if less than 'cbtmincircs'
+ * have been recorded.
+ */
+static int32_t
+circuit_build_times_test_frequency(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbttestfreq",
+ CBT_DEFAULT_TEST_FREQUENCY,
+ CBT_MIN_TEST_FREQUENCY,
+ CBT_MAX_TEST_FREQUENCY);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_test_frequency() called, cbttestfreq is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * Retrieve and bounds-check the cbtmintimeout consensus parameter.
+ *
+ * Effect: This is the minimum allowed timeout value in milliseconds.
+ * The minimum is to prevent rounding to 0 (we only check once
+ * per second).
+ */
+static int32_t
+circuit_build_times_min_timeout(void)
+{
+ int32_t num = networkstatus_get_param(NULL, "cbtmintimeout",
+ CBT_DEFAULT_TIMEOUT_MIN_VALUE,
+ CBT_MIN_TIMEOUT_MIN_VALUE,
+ CBT_MAX_TIMEOUT_MIN_VALUE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_min_timeout() called, cbtmintimeout is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * Retrieve and bounds-check the cbtinitialtimeout consensus paramter.
+ *
+ * Effect: This is the timeout value to use before computing a timeout,
+ * in milliseconds.
+ */
+int32_t
+circuit_build_times_initial_timeout(void)
+{
+ int32_t min = circuit_build_times_min_timeout();
+ int32_t param = networkstatus_get_param(NULL, "cbtinitialtimeout",
+ CBT_DEFAULT_TIMEOUT_INITIAL_VALUE,
+ CBT_MIN_TIMEOUT_INITIAL_VALUE,
+ CBT_MAX_TIMEOUT_INITIAL_VALUE);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_initial_timeout() called, "
+ "cbtinitialtimeout is %d",
+ param);
+ }
+
+ if (param < min) {
+ log_warn(LD_DIR, "Consensus parameter cbtinitialtimeout is too small, "
+ "raising to %d", min);
+ param = min;
+ }
+ return param;
+}
+
+/**
+ * Retrieve and bounds-check the cbtrecentcount consensus paramter.
+ *
+ * Effect: This is the number of circuit build times to keep track of
+ * for deciding if we hit cbtmaxtimeouts and need to reset our state
+ * and learn a new timeout.
+ */
+static int32_t
+circuit_build_times_recent_circuit_count(networkstatus_t *ns)
+{
+ int32_t num;
+ num = networkstatus_get_param(ns, "cbtrecentcount",
+ CBT_DEFAULT_RECENT_CIRCUITS,
+ CBT_MIN_RECENT_CIRCUITS,
+ CBT_MAX_RECENT_CIRCUITS);
+
+ if (!(get_options()->LearnCircuitBuildTimeout)) {
+ log_debug(LD_BUG,
+ "circuit_build_times_recent_circuit_count() called, "
+ "cbtrecentcount is %d",
+ num);
+ }
+
+ return num;
+}
+
+/**
+ * This function is called when we get a consensus update.
+ *
+ * It checks to see if we have changed any consensus parameters
+ * that require reallocation or discard of previous stats.
+ */
+void
+circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
+ networkstatus_t *ns)
+{
+ int32_t num;
+
+ /*
+ * First check if we're doing adaptive timeouts at all; nothing to
+ * update if we aren't.
+ */
+
+ if (!circuit_build_times_disabled()) {
+ num = circuit_build_times_recent_circuit_count(ns);
+
+ if (num > 0) {
+ if (num != cbt->liveness.num_recent_circs) {
+ int8_t *recent_circs;
+ log_notice(LD_CIRC, "The Tor Directory Consensus has changed how many "
+ "circuits we must track to detect network failures from %d "
+ "to %d.", cbt->liveness.num_recent_circs, num);
+
+ tor_assert(cbt->liveness.timeouts_after_firsthop ||
+ cbt->liveness.num_recent_circs == 0);
+
+ /*
+ * Technically this is a circular array that we are reallocating
+ * and memcopying. However, since it only consists of either 1s
+ * or 0s, and is only used in a statistical test to determine when
+ * we should discard our history after a sufficient number of 1's
+ * have been reached, it is fine if order is not preserved or
+ * elements are lost.
+ *
+ * cbtrecentcount should only be changing in cases of severe network
+ * distress anyway, so memory correctness here is paramount over
+ * doing acrobatics to preserve the array.
+ */
+ recent_circs = tor_malloc_zero(sizeof(int8_t)*num);
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ memcpy(recent_circs, cbt->liveness.timeouts_after_firsthop,
+ sizeof(int8_t)*MIN(num, cbt->liveness.num_recent_circs));
+ }
+
+ // Adjust the index if it needs it.
+ if (num < cbt->liveness.num_recent_circs) {
+ cbt->liveness.after_firsthop_idx = MIN(num-1,
+ cbt->liveness.after_firsthop_idx);
+ }
+
+ tor_free(cbt->liveness.timeouts_after_firsthop);
+ cbt->liveness.timeouts_after_firsthop = recent_circs;
+ cbt->liveness.num_recent_circs = num;
+ }
+ /* else no change, nothing to do */
+ } else { /* num == 0 */
+ /*
+ * Weird. This probably shouldn't happen, so log a warning, but try
+ * to do something sensible anyway.
+ */
+
+ log_warn(LD_CIRC,
+ "The cbtrecentcircs consensus parameter came back zero! "
+ "This disables adaptive timeouts since we can't keep track of "
+ "any recent circuits.");
+
+ circuit_build_times_free_timeouts(cbt);
+ }
+ } else {
+ /*
+ * Adaptive timeouts are disabled; this might be because of the
+ * LearnCircuitBuildTimes config parameter, and hence permanent, or
+ * the cbtdisabled consensus parameter, so it may be a new condition.
+ * Treat it like getting num == 0 above and free the circuit history
+ * if we have any.
+ */
+
+ circuit_build_times_free_timeouts(cbt);
+ }
+}
+
+/**
+ * Return the initial default or configured timeout in milliseconds
+ */
+static double
+circuit_build_times_get_initial_timeout(void)
+{
+ double timeout;
+
+ /*
+ * Check if we have LearnCircuitBuildTimeout, and if we don't,
+ * always use CircuitBuildTimeout, no questions asked.
+ */
+ if (!unit_tests && get_options()->CircuitBuildTimeout) {
+ timeout = get_options()->CircuitBuildTimeout*1000;
+ if (get_options()->LearnCircuitBuildTimeout &&
+ timeout < circuit_build_times_min_timeout()) {
+ log_warn(LD_CIRC, "Config CircuitBuildTimeout too low. Setting to %ds",
+ circuit_build_times_min_timeout()/1000);
+ timeout = circuit_build_times_min_timeout();
+ }
+ } else {
+ timeout = circuit_build_times_initial_timeout();
+ }
+
+ return timeout;
+}
+
+/**
+ * Reset the build time state.
+ *
+ * Leave estimated parameters, timeout and network liveness intact
+ * for future use.
+ */
+STATIC void
+circuit_build_times_reset(circuit_build_times_t *cbt)
+{
+ memset(cbt->circuit_build_times, 0, sizeof(cbt->circuit_build_times));
+ cbt->total_build_times = 0;
+ cbt->build_times_idx = 0;
+ cbt->have_computed_timeout = 0;
+}
+
+/**
+ * Initialize the buildtimes structure for first use.
+ *
+ * Sets the initial timeout values based on either the config setting,
+ * the consensus param, or the default (CBT_DEFAULT_TIMEOUT_INITIAL_VALUE).
+ */
+void
+circuit_build_times_init(circuit_build_times_t *cbt)
+{
+ memset(cbt, 0, sizeof(*cbt));
+ /*
+ * Check if we really are using adaptive timeouts, and don't keep
+ * track of this stuff if not.
+ */
+ if (!circuit_build_times_disabled()) {
+ cbt->liveness.num_recent_circs =
+ circuit_build_times_recent_circuit_count(NULL);
+ cbt->liveness.timeouts_after_firsthop =
+ tor_malloc_zero(sizeof(int8_t)*cbt->liveness.num_recent_circs);
+ } else {
+ cbt->liveness.num_recent_circs = 0;
+ cbt->liveness.timeouts_after_firsthop = NULL;
+ }
+ cbt->close_ms = cbt->timeout_ms = circuit_build_times_get_initial_timeout();
+ cbt_control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
+}
+
+/**
+ * Free the saved timeouts, if the cbtdisabled consensus parameter got turned
+ * on or something.
+ */
+
+void
+circuit_build_times_free_timeouts(circuit_build_times_t *cbt)
+{
+ if (!cbt) return;
+
+ if (cbt->liveness.timeouts_after_firsthop) {
+ tor_free(cbt->liveness.timeouts_after_firsthop);
+ }
+
+ cbt->liveness.num_recent_circs = 0;
+}
+
+#if 0
+/**
+ * Rewind our build time history by n positions.
+ */
+static void
+circuit_build_times_rewind_history(circuit_build_times_t *cbt, int n)
+{
+ int i = 0;
+
+ cbt->build_times_idx -= n;
+ cbt->build_times_idx %= CBT_NCIRCUITS_TO_OBSERVE;
+
+ for (i = 0; i < n; i++) {
+ cbt->circuit_build_times[(i+cbt->build_times_idx)
+ %CBT_NCIRCUITS_TO_OBSERVE]=0;
+ }
+
+ if (cbt->total_build_times > n) {
+ cbt->total_build_times -= n;
+ } else {
+ cbt->total_build_times = 0;
+ }
+
+ log_info(LD_CIRC,
+ "Rewound history by %d places. Current index: %d. "
+ "Total: %d", n, cbt->build_times_idx, cbt->total_build_times);
+}
+#endif
+
+/**
+ * Add a new build time value <b>time</b> to the set of build times. Time
+ * units are milliseconds.
+ *
+ * circuit_build_times <b>cbt</b> is a circular array, so loop around when
+ * array is full.
+ */
+int
+circuit_build_times_add_time(circuit_build_times_t *cbt, build_time_t time)
+{
+ if (time <= 0 || time > CBT_BUILD_TIME_MAX) {
+ log_warn(LD_BUG, "Circuit build time is too large (%u)."
+ "This is probably a bug.", time);
+ tor_fragile_assert();
+ return -1;
+ }
+
+ log_debug(LD_CIRC, "Adding circuit build time %u", time);
+
+ cbt->circuit_build_times[cbt->build_times_idx] = time;
+ cbt->build_times_idx = (cbt->build_times_idx + 1) % CBT_NCIRCUITS_TO_OBSERVE;
+ if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
+ cbt->total_build_times++;
+
+ if ((cbt->total_build_times % CBT_SAVE_STATE_EVERY) == 0) {
+ /* Save state every n circuit builds */
+ if (!unit_tests && !get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(get_or_state(), 0);
+ }
+
+ return 0;
+}
+
+/**
+ * Return maximum circuit build time
+ */
+static build_time_t
+circuit_build_times_max(const circuit_build_times_t *cbt)
+{
+ int i = 0;
+ build_time_t max_build_time = 0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] > max_build_time
+ && cbt->circuit_build_times[i] != CBT_BUILD_ABANDONED)
+ max_build_time = cbt->circuit_build_times[i];
+ }
+ return max_build_time;
+}
+
+#if 0
+/** Return minimum circuit build time */
+build_time_t
+circuit_build_times_min(circuit_build_times_t *cbt)
+{
+ int i = 0;
+ build_time_t min_build_time = CBT_BUILD_TIME_MAX;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] && /* 0 <-> uninitialized */
+ cbt->circuit_build_times[i] < min_build_time)
+ min_build_time = cbt->circuit_build_times[i];
+ }
+ if (min_build_time == CBT_BUILD_TIME_MAX) {
+ log_warn(LD_CIRC, "No build times less than CBT_BUILD_TIME_MAX!");
+ }
+ return min_build_time;
+}
+#endif
+
+/**
+ * Calculate and return a histogram for the set of build times.
+ *
+ * Returns an allocated array of histrogram bins representing
+ * the frequency of index*CBT_BIN_WIDTH millisecond
+ * build times. Also outputs the number of bins in nbins.
+ *
+ * The return value must be freed by the caller.
+ */
+static uint32_t *
+circuit_build_times_create_histogram(const circuit_build_times_t *cbt,
+ build_time_t *nbins)
+{
+ uint32_t *histogram;
+ build_time_t max_build_time = circuit_build_times_max(cbt);
+ int i, c;
+
+ *nbins = 1 + (max_build_time / CBT_BIN_WIDTH);
+ histogram = tor_malloc_zero(*nbins * sizeof(build_time_t));
+
+ // calculate histogram
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == 0
+ || cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
+ continue; /* 0 <-> uninitialized */
+
+ c = (cbt->circuit_build_times[i] / CBT_BIN_WIDTH);
+ histogram[c]++;
+ }
+
+ return histogram;
+}
+
+/**
+ * Return the Pareto start-of-curve parameter Xm.
+ *
+ * Because we are not a true Pareto curve, we compute this as the
+ * weighted average of the N most frequent build time bins. N is either
+ * 1 if we don't have enough circuit build time data collected, or
+ * determined by the consensus parameter cbtnummodes (default 3).
+ */
+static build_time_t
+circuit_build_times_get_xm(circuit_build_times_t *cbt)
+{
+ build_time_t i, nbins;
+ build_time_t *nth_max_bin;
+ int32_t bin_counts=0;
+ build_time_t ret = 0;
+ uint32_t *histogram = circuit_build_times_create_histogram(cbt, &nbins);
+ int n=0;
+ int num_modes = circuit_build_times_default_num_xm_modes();
+
+ tor_assert(nbins > 0);
+ tor_assert(num_modes > 0);
+
+ // Only use one mode if < 1000 buildtimes. Not enough data
+ // for multiple.
+ if (cbt->total_build_times < CBT_NCIRCUITS_TO_OBSERVE)
+ num_modes = 1;
+
+ nth_max_bin = (build_time_t*)tor_malloc_zero(num_modes*sizeof(build_time_t));
+
+ /* Determine the N most common build times */
+ for (i = 0; i < nbins; i++) {
+ if (histogram[i] >= histogram[nth_max_bin[0]]) {
+ nth_max_bin[0] = i;
+ }
+
+ for (n = 1; n < num_modes; n++) {
+ if (histogram[i] >= histogram[nth_max_bin[n]] &&
+ (!histogram[nth_max_bin[n-1]]
+ || histogram[i] < histogram[nth_max_bin[n-1]])) {
+ nth_max_bin[n] = i;
+ }
+ }
+ }
+
+ for (n = 0; n < num_modes; n++) {
+ bin_counts += histogram[nth_max_bin[n]];
+ ret += CBT_BIN_TO_MS(nth_max_bin[n])*histogram[nth_max_bin[n]];
+ log_info(LD_CIRC, "Xm mode #%d: %u %u", n, CBT_BIN_TO_MS(nth_max_bin[n]),
+ histogram[nth_max_bin[n]]);
+ }
+
+ /* The following assert is safe, because we don't get called when we
+ * haven't observed at least CBT_MIN_MIN_CIRCUITS_TO_OBSERVE circuits. */
+ tor_assert(bin_counts > 0);
+
+ ret /= bin_counts;
+ tor_free(histogram);
+ tor_free(nth_max_bin);
+
+ return ret;
+}
+
+/**
+ * Output a histogram of current circuit build times to
+ * the or_state_t state structure.
+ */
+void
+circuit_build_times_update_state(const circuit_build_times_t *cbt,
+ or_state_t *state)
+{
+ uint32_t *histogram;
+ build_time_t i = 0;
+ build_time_t nbins = 0;
+ config_line_t **next, *line;
+
+ histogram = circuit_build_times_create_histogram(cbt, &nbins);
+ // write to state
+ config_free_lines(state->BuildtimeHistogram);
+ next = &state->BuildtimeHistogram;
+ *next = NULL;
+
+ state->TotalBuildTimes = cbt->total_build_times;
+ state->CircuitBuildAbandonedCount = 0;
+
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED)
+ state->CircuitBuildAbandonedCount++;
+ }
+
+ for (i = 0; i < nbins; i++) {
+ // compress the histogram by skipping the blanks
+ if (histogram[i] == 0) continue;
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("CircuitBuildTimeBin");
+ tor_asprintf(&line->value, "%d %d",
+ CBT_BIN_TO_MS(i), histogram[i]);
+ next = &(line->next);
+ }
+
+ if (!unit_tests) {
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(get_or_state(), 0);
+ }
+
+ tor_free(histogram);
+}
+
+/**
+ * Shuffle the build times array.
+ *
+ * Adapted from http://en.wikipedia.org/wiki/Fisher-Yates_shuffle
+ */
+static void
+circuit_build_times_shuffle_and_store_array(circuit_build_times_t *cbt,
+ build_time_t *raw_times,
+ uint32_t num_times)
+{
+ uint32_t n = num_times;
+ if (num_times > CBT_NCIRCUITS_TO_OBSERVE) {
+ log_notice(LD_CIRC, "The number of circuit times that this Tor version "
+ "uses to calculate build times is less than the number stored "
+ "in your state file. Decreasing the circuit time history from "
+ "%lu to %d.", (unsigned long)num_times,
+ CBT_NCIRCUITS_TO_OBSERVE);
+ }
+
+ if (n > INT_MAX-1) {
+ log_warn(LD_CIRC, "For some insane reasons, you had %lu circuit build "
+ "observations in your state file. That's far too many; probably "
+ "there's a bug here.", (unsigned long)n);
+ n = INT_MAX-1;
+ }
+
+ /* This code can only be run on a compact array */
+ while (n-- > 1) {
+ int k = crypto_rand_int(n + 1); /* 0 <= k <= n. */
+ build_time_t tmp = raw_times[k];
+ raw_times[k] = raw_times[n];
+ raw_times[n] = tmp;
+ }
+
+ /* Since the times are now shuffled, take a random CBT_NCIRCUITS_TO_OBSERVE
+ * subset (ie the first CBT_NCIRCUITS_TO_OBSERVE values) */
+ for (n = 0; n < MIN(num_times, CBT_NCIRCUITS_TO_OBSERVE); n++) {
+ circuit_build_times_add_time(cbt, raw_times[n]);
+ }
+}
+
+/**
+ * Filter old synthetic timeouts that were created before the
+ * new right-censored Pareto calculation was deployed.
+ *
+ * Once all clients before 0.2.1.13-alpha are gone, this code
+ * will be unused.
+ */
+static int
+circuit_build_times_filter_timeouts(circuit_build_times_t *cbt)
+{
+ int num_filtered=0, i=0;
+ double timeout_rate = 0;
+ build_time_t max_timeout = 0;
+
+ timeout_rate = circuit_build_times_timeout_rate(cbt);
+ max_timeout = (build_time_t)cbt->close_ms;
+
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] > max_timeout) {
+ build_time_t replaced = cbt->circuit_build_times[i];
+ num_filtered++;
+ cbt->circuit_build_times[i] = CBT_BUILD_ABANDONED;
+
+ log_debug(LD_CIRC, "Replaced timeout %d with %d", replaced,
+ cbt->circuit_build_times[i]);
+ }
+ }
+
+ log_info(LD_CIRC,
+ "We had %d timeouts out of %d build times, "
+ "and filtered %d above the max of %u",
+ (int)(cbt->total_build_times*timeout_rate),
+ cbt->total_build_times, num_filtered, max_timeout);
+
+ return num_filtered;
+}
+
+/**
+ * Load histogram from <b>state</b>, shuffling the resulting array
+ * after we do so. Use this result to estimate parameters and
+ * calculate the timeout.
+ *
+ * Return -1 on error.
+ */
+int
+circuit_build_times_parse_state(circuit_build_times_t *cbt,
+ or_state_t *state)
+{
+ int tot_values = 0;
+ uint32_t loaded_cnt = 0, N = 0;
+ config_line_t *line;
+ unsigned int i;
+ build_time_t *loaded_times;
+ int err = 0;
+ circuit_build_times_init(cbt);
+
+ if (circuit_build_times_disabled()) {
+ return 0;
+ }
+
+ /* build_time_t 0 means uninitialized */
+ loaded_times = tor_malloc_zero(sizeof(build_time_t)*state->TotalBuildTimes);
+
+ for (line = state->BuildtimeHistogram; line; line = line->next) {
+ smartlist_t *args = smartlist_new();
+ smartlist_split_string(args, line->value, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(args) < 2) {
+ log_warn(LD_GENERAL, "Unable to parse circuit build times: "
+ "Too few arguments to CircuitBuildTime");
+ err = 1;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ } else {
+ const char *ms_str = smartlist_get(args,0);
+ const char *count_str = smartlist_get(args,1);
+ uint32_t count, k;
+ build_time_t ms;
+ int ok;
+ ms = (build_time_t)tor_parse_ulong(ms_str, 0, 0,
+ CBT_BUILD_TIME_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_GENERAL, "Unable to parse circuit build times: "
+ "Unparsable bin number");
+ err = 1;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ }
+ count = (uint32_t)tor_parse_ulong(count_str, 0, 0,
+ UINT32_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_GENERAL, "Unable to parse circuit build times: "
+ "Unparsable bin count");
+ err = 1;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ }
+
+ if (loaded_cnt+count+state->CircuitBuildAbandonedCount
+ > state->TotalBuildTimes) {
+ log_warn(LD_CIRC,
+ "Too many build times in state file. "
+ "Stopping short before %d",
+ loaded_cnt+count);
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ break;
+ }
+
+ for (k = 0; k < count; k++) {
+ loaded_times[loaded_cnt++] = ms;
+ }
+ N++;
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ }
+ }
+
+ log_info(LD_CIRC,
+ "Adding %d timeouts.", state->CircuitBuildAbandonedCount);
+ for (i=0; i < state->CircuitBuildAbandonedCount; i++) {
+ loaded_times[loaded_cnt++] = CBT_BUILD_ABANDONED;
+ }
+
+ if (loaded_cnt != state->TotalBuildTimes) {
+ log_warn(LD_CIRC,
+ "Corrupt state file? Build times count mismatch. "
+ "Read %d times, but file says %d", loaded_cnt,
+ state->TotalBuildTimes);
+ err = 1;
+ circuit_build_times_reset(cbt);
+ goto done;
+ }
+
+ circuit_build_times_shuffle_and_store_array(cbt, loaded_times, loaded_cnt);
+
+ /* Verify that we didn't overwrite any indexes */
+ for (i=0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (!cbt->circuit_build_times[i])
+ break;
+ tot_values++;
+ }
+ log_info(LD_CIRC,
+ "Loaded %d/%d values from %d lines in circuit time histogram",
+ tot_values, cbt->total_build_times, N);
+
+ if (cbt->total_build_times != tot_values
+ || cbt->total_build_times > CBT_NCIRCUITS_TO_OBSERVE) {
+ log_warn(LD_CIRC,
+ "Corrupt state file? Shuffled build times mismatch. "
+ "Read %d times, but file says %d", tot_values,
+ state->TotalBuildTimes);
+ err = 1;
+ circuit_build_times_reset(cbt);
+ goto done;
+ }
+
+ circuit_build_times_set_timeout(cbt);
+
+ if (!state->CircuitBuildAbandonedCount && cbt->total_build_times) {
+ circuit_build_times_filter_timeouts(cbt);
+ }
+
+ done:
+ tor_free(loaded_times);
+ return err ? -1 : 0;
+}
+
+/**
+ * Estimates the Xm and Alpha parameters using
+ * http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation
+ *
+ * The notable difference is that we use mode instead of min to estimate Xm.
+ * This is because our distribution is frechet-like. We claim this is
+ * an acceptable approximation because we are only concerned with the
+ * accuracy of the CDF of the tail.
+ */
+STATIC int
+circuit_build_times_update_alpha(circuit_build_times_t *cbt)
+{
+ build_time_t *x=cbt->circuit_build_times;
+ double a = 0;
+ int n=0,i=0,abandoned_count=0;
+ build_time_t max_time=0;
+
+ /* http://en.wikipedia.org/wiki/Pareto_distribution#Parameter_estimation */
+ /* We sort of cheat here and make our samples slightly more pareto-like
+ * and less frechet-like. */
+ cbt->Xm = circuit_build_times_get_xm(cbt);
+
+ tor_assert(cbt->Xm > 0);
+
+ for (i=0; i< CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (!x[i]) {
+ continue;
+ }
+
+ if (x[i] < cbt->Xm) {
+ a += tor_mathlog(cbt->Xm);
+ } else if (x[i] == CBT_BUILD_ABANDONED) {
+ abandoned_count++;
+ } else {
+ a += tor_mathlog(x[i]);
+ if (x[i] > max_time)
+ max_time = x[i];
+ }
+ n++;
+ }
+
+ /*
+ * We are erring and asserting here because this can only happen
+ * in codepaths other than startup. The startup state parsing code
+ * performs this same check, and resets state if it hits it. If we
+ * hit it at runtime, something serious has gone wrong.
+ */
+ if (n!=cbt->total_build_times) {
+ log_err(LD_CIRC, "Discrepancy in build times count: %d vs %d", n,
+ cbt->total_build_times);
+ }
+ tor_assert(n==cbt->total_build_times);
+
+ if (max_time <= 0) {
+ /* This can happen if Xm is actually the *maximum* value in the set.
+ * It can also happen if we've abandoned every single circuit somehow.
+ * In either case, tell the caller not to compute a new build timeout. */
+ log_warn(LD_BUG,
+ "Could not determine largest build time (%d). "
+ "Xm is %dms and we've abandoned %d out of %d circuits.", max_time,
+ cbt->Xm, abandoned_count, n);
+ return 0;
+ }
+
+ a += abandoned_count*tor_mathlog(max_time);
+
+ a -= n*tor_mathlog(cbt->Xm);
+ // Estimator comes from Eq #4 in:
+ // "Bayesian estimation based on trimmed samples from Pareto populations"
+ // by Arturo J. Fernández. We are right-censored only.
+ a = (n-abandoned_count)/a;
+
+ cbt->alpha = a;
+
+ return 1;
+}
+
+/**
+ * This is the Pareto Quantile Function. It calculates the point x
+ * in the distribution such that F(x) = quantile (ie quantile*100%
+ * of the mass of the density function is below x on the curve).
+ *
+ * We use it to calculate the timeout and also to generate synthetic
+ * values of time for circuits that timeout before completion.
+ *
+ * See http://en.wikipedia.org/wiki/Quantile_function,
+ * http://en.wikipedia.org/wiki/Inverse_transform_sampling and
+ * http://en.wikipedia.org/wiki/Pareto_distribution#Generating_a_
+ * random_sample_from_Pareto_distribution
+ * That's right. I'll cite wikipedia all day long.
+ *
+ * Return value is in milliseconds.
+ */
+STATIC double
+circuit_build_times_calculate_timeout(circuit_build_times_t *cbt,
+ double quantile)
+{
+ double ret;
+ tor_assert(quantile >= 0);
+ tor_assert(1.0-quantile > 0);
+ tor_assert(cbt->Xm > 0);
+
+ ret = cbt->Xm/pow(1.0-quantile,1.0/cbt->alpha);
+ if (ret > INT32_MAX) {
+ ret = INT32_MAX;
+ }
+ tor_assert(ret > 0);
+ return ret;
+}
+
+#ifdef TOR_UNIT_TESTS
+/** Pareto CDF */
+double
+circuit_build_times_cdf(circuit_build_times_t *cbt, double x)
+{
+ double ret;
+ tor_assert(cbt->Xm > 0);
+ ret = 1.0-pow(cbt->Xm/x,cbt->alpha);
+ tor_assert(0 <= ret && ret <= 1.0);
+ return ret;
+}
+#endif
+
+#ifdef TOR_UNIT_TESTS
+/**
+ * Generate a synthetic time using our distribution parameters.
+ *
+ * The return value will be within the [q_lo, q_hi) quantile points
+ * on the CDF.
+ */
+build_time_t
+circuit_build_times_generate_sample(circuit_build_times_t *cbt,
+ double q_lo, double q_hi)
+{
+ double randval = crypto_rand_double();
+ build_time_t ret;
+ double u;
+
+ /* Generate between [q_lo, q_hi) */
+ /*XXXX This is what nextafter is supposed to be for; we should use it on the
+ * platforms that support it. */
+ q_hi -= 1.0/(INT32_MAX);
+
+ tor_assert(q_lo >= 0);
+ tor_assert(q_hi < 1);
+ tor_assert(q_lo < q_hi);
+
+ u = q_lo + (q_hi-q_lo)*randval;
+
+ tor_assert(0 <= u && u < 1.0);
+ /* circuit_build_times_calculate_timeout returns <= INT32_MAX */
+ ret = (build_time_t)
+ tor_lround(circuit_build_times_calculate_timeout(cbt, u));
+ 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.
+ */
+void
+circuit_build_times_initial_alpha(circuit_build_times_t *cbt,
+ double quantile, double timeout_ms)
+{
+ // Q(u) = Xm/((1-u)^(1/a))
+ // Q(0.8) = Xm/((1-0.8))^(1/a)) = CircBuildTimeout
+ // CircBuildTimeout = Xm/((1-0.8))^(1/a))
+ // CircBuildTimeout = Xm*((1-0.8))^(-1/a))
+ // ln(CircBuildTimeout) = ln(Xm)+ln(((1-0.8)))*(-1/a)
+ // -ln(1-0.8)/(ln(CircBuildTimeout)-ln(Xm))=a
+ tor_assert(quantile >= 0);
+ tor_assert(cbt->Xm > 0);
+ cbt->alpha = tor_mathlog(1.0-quantile)/
+ (tor_mathlog(cbt->Xm)-tor_mathlog(timeout_ms));
+ tor_assert(cbt->alpha > 0);
+}
+#endif
+
+/**
+ * Returns true if we need circuits to be built
+ */
+int
+circuit_build_times_needs_circuits(const circuit_build_times_t *cbt)
+{
+ /* Return true if < MIN_CIRCUITS_TO_OBSERVE */
+ return !circuit_build_times_enough_to_compute(cbt);
+}
+
+/**
+ * Returns true if we should build a timeout test circuit
+ * right now.
+ */
+int
+circuit_build_times_needs_circuits_now(const circuit_build_times_t *cbt)
+{
+ return circuit_build_times_needs_circuits(cbt) &&
+ approx_time()-cbt->last_circ_at > circuit_build_times_test_frequency();
+}
+
+/**
+ * How long should we be unreachable before we think we need to check if
+ * our published IP address has changed.
+ */
+#define CIRCUIT_TIMEOUT_BEFORE_RECHECK_IP (60*3)
+
+/**
+ * Called to indicate that the network showed some signs of liveness,
+ * i.e. we received a cell.
+ *
+ * This is used by circuit_build_times_network_check_live() to decide
+ * if we should record the circuit build timeout or not.
+ *
+ * This function is called every time we receive a cell. Avoid
+ * syscalls, events, and other high-intensity work.
+ */
+void
+circuit_build_times_network_is_live(circuit_build_times_t *cbt)
+{
+ time_t now = approx_time();
+ if (cbt->liveness.nonlive_timeouts > 0) {
+ time_t time_since_live = now - cbt->liveness.network_last_live;
+ log_notice(LD_CIRC,
+ "Tor now sees network activity. Restoring circuit build "
+ "timeout recording. Network was down for %d seconds "
+ "during %d circuit attempts.",
+ (int)time_since_live,
+ cbt->liveness.nonlive_timeouts);
+ if (time_since_live > CIRCUIT_TIMEOUT_BEFORE_RECHECK_IP)
+ reschedule_descriptor_update_check();
+ }
+ cbt->liveness.network_last_live = now;
+ cbt->liveness.nonlive_timeouts = 0;
+}
+
+/**
+ * Called to indicate that we completed a circuit. Because this circuit
+ * succeeded, it doesn't count as a timeout-after-the-first-hop.
+ *
+ * This is used by circuit_build_times_network_check_changed() to determine
+ * if we had too many recent timeouts and need to reset our learned timeout
+ * to something higher.
+ */
+void
+circuit_build_times_network_circ_success(circuit_build_times_t *cbt)
+{
+ /* Check for NULLness because we might not be using adaptive timeouts */
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
+ = 0;
+ cbt->liveness.after_firsthop_idx++;
+ cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
+ }
+}
+
+/**
+ * A circuit just timed out. If it failed after the first hop, record it
+ * in our history for later deciding if the network speed has changed.
+ *
+ * This is used by circuit_build_times_network_check_changed() to determine
+ * if we had too many recent timeouts and need to reset our learned timeout
+ * to something higher.
+ */
+static void
+circuit_build_times_network_timeout(circuit_build_times_t *cbt,
+ int did_onehop)
+{
+ /* Check for NULLness because we might not be using adaptive timeouts */
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ if (did_onehop) {
+ cbt->liveness.timeouts_after_firsthop[cbt->liveness.after_firsthop_idx]
+ = 1;
+ cbt->liveness.after_firsthop_idx++;
+ cbt->liveness.after_firsthop_idx %= cbt->liveness.num_recent_circs;
+ }
+ }
+}
+
+/**
+ * A circuit was just forcibly closed. If there has been no recent network
+ * activity at all, but this circuit was launched back when we thought the
+ * network was live, increment the number of "nonlive" circuit timeouts.
+ *
+ * This is used by circuit_build_times_network_check_live() to decide
+ * if we should record the circuit build timeout or not.
+ */
+static void
+circuit_build_times_network_close(circuit_build_times_t *cbt,
+ int did_onehop, time_t start_time)
+{
+ time_t now = time(NULL);
+ /*
+ * Check if this is a timeout that was for a circuit that spent its
+ * entire existence during a time where we have had no network activity.
+ */
+ if (cbt->liveness.network_last_live < start_time) {
+ if (did_onehop) {
+ char last_live_buf[ISO_TIME_LEN+1];
+ char start_time_buf[ISO_TIME_LEN+1];
+ char now_buf[ISO_TIME_LEN+1];
+ format_local_iso_time(last_live_buf, cbt->liveness.network_last_live);
+ format_local_iso_time(start_time_buf, start_time);
+ format_local_iso_time(now_buf, now);
+ log_notice(LD_CIRC,
+ "A circuit somehow completed a hop while the network was "
+ "not live. The network was last live at %s, but the circuit "
+ "launched at %s. It's now %s. This could mean your clock "
+ "changed.", last_live_buf, start_time_buf, now_buf);
+ }
+ cbt->liveness.nonlive_timeouts++;
+ if (cbt->liveness.nonlive_timeouts == 1) {
+ log_notice(LD_CIRC,
+ "Tor has not observed any network activity for the past %d "
+ "seconds. Disabling circuit build timeout recording.",
+ (int)(now - cbt->liveness.network_last_live));
+ } else {
+ log_info(LD_CIRC,
+ "Got non-live timeout. Current count is: %d",
+ cbt->liveness.nonlive_timeouts);
+ }
+ }
+}
+
+/**
+ * When the network is not live, we do not record circuit build times.
+ *
+ * The network is considered not live if there has been at least one
+ * circuit build that began and ended (had its close_ms measurement
+ * period expire) since we last received a cell.
+ *
+ * Also has the side effect of rewinding the circuit time history
+ * in the case of recent liveness changes.
+ */
+int
+circuit_build_times_network_check_live(const circuit_build_times_t *cbt)
+{
+ if (cbt->liveness.nonlive_timeouts > 0) {
+ return 0;
+ }
+
+ return 1;
+}
+
+/**
+ * Returns true if we have seen more than MAX_RECENT_TIMEOUT_COUNT of
+ * the past RECENT_CIRCUITS time out after the first hop. Used to detect
+ * if the network connection has changed significantly, and if so,
+ * resets our circuit build timeout to the default.
+ *
+ * Also resets the entire timeout history in this case and causes us
+ * to restart the process of building test circuits and estimating a
+ * new timeout.
+ */
+STATIC int
+circuit_build_times_network_check_changed(circuit_build_times_t *cbt)
+{
+ int total_build_times = cbt->total_build_times;
+ int timeout_count=0;
+ int i;
+
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ /* how many of our recent circuits made it to the first hop but then
+ * timed out? */
+ for (i = 0; i < cbt->liveness.num_recent_circs; i++) {
+ timeout_count += cbt->liveness.timeouts_after_firsthop[i];
+ }
+ }
+
+ /* If 80% of our recent circuits are timing out after the first hop,
+ * we need to re-estimate a new initial alpha and timeout. */
+ if (timeout_count < circuit_build_times_max_timeouts()) {
+ return 0;
+ }
+
+ circuit_build_times_reset(cbt);
+ if (cbt->liveness.timeouts_after_firsthop &&
+ cbt->liveness.num_recent_circs > 0) {
+ memset(cbt->liveness.timeouts_after_firsthop, 0,
+ sizeof(*cbt->liveness.timeouts_after_firsthop)*
+ cbt->liveness.num_recent_circs);
+ }
+ cbt->liveness.after_firsthop_idx = 0;
+
+ /* Check to see if this has happened before. If so, double the timeout
+ * to give people on abysmally bad network connections a shot at access */
+ if (cbt->timeout_ms >= circuit_build_times_get_initial_timeout()) {
+ if (cbt->timeout_ms > INT32_MAX/2 || cbt->close_ms > INT32_MAX/2) {
+ log_warn(LD_CIRC, "Insanely large circuit build timeout value. "
+ "(timeout = %fmsec, close = %fmsec)",
+ cbt->timeout_ms, cbt->close_ms);
+ } else {
+ cbt->timeout_ms *= 2;
+ cbt->close_ms *= 2;
+ }
+ } else {
+ cbt->close_ms = cbt->timeout_ms
+ = circuit_build_times_get_initial_timeout();
+ }
+
+ cbt_control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_RESET);
+
+ log_notice(LD_CIRC,
+ "Your network connection speed appears to have changed. Resetting "
+ "timeout to %lds after %d timeouts and %d buildtimes.",
+ tor_lround(cbt->timeout_ms/1000), timeout_count,
+ total_build_times);
+
+ return 1;
+}
+
+/**
+ * Count the number of timeouts in a set of cbt data.
+ */
+double
+circuit_build_times_timeout_rate(const circuit_build_times_t *cbt)
+{
+ int i=0,timeouts=0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] >= cbt->timeout_ms) {
+ timeouts++;
+ }
+ }
+
+ if (!cbt->total_build_times)
+ return 0;
+
+ return ((double)timeouts)/cbt->total_build_times;
+}
+
+/**
+ * Count the number of closed circuits in a set of cbt data.
+ */
+double
+circuit_build_times_close_rate(const circuit_build_times_t *cbt)
+{
+ int i=0,closed=0;
+ for (i = 0; i < CBT_NCIRCUITS_TO_OBSERVE; i++) {
+ if (cbt->circuit_build_times[i] == CBT_BUILD_ABANDONED) {
+ closed++;
+ }
+ }
+
+ if (!cbt->total_build_times)
+ return 0;
+
+ return ((double)closed)/cbt->total_build_times;
+}
+
+/**
+ * Store a timeout as a synthetic value.
+ *
+ * Returns true if the store was successful and we should possibly
+ * update our timeout estimate.
+ */
+int
+circuit_build_times_count_close(circuit_build_times_t *cbt,
+ int did_onehop,
+ time_t start_time)
+{
+ if (circuit_build_times_disabled()) {
+ cbt->close_ms = cbt->timeout_ms
+ = circuit_build_times_get_initial_timeout();
+ return 0;
+ }
+
+ /* Record this force-close to help determine if the network is dead */
+ circuit_build_times_network_close(cbt, did_onehop, start_time);
+
+ /* Only count timeouts if network is live.. */
+ if (!circuit_build_times_network_check_live(cbt)) {
+ return 0;
+ }
+
+ circuit_build_times_add_time(cbt, CBT_BUILD_ABANDONED);
+ return 1;
+}
+
+/**
+ * Update timeout counts to determine if we need to expire
+ * our build time history due to excessive timeouts.
+ *
+ * We do not record any actual time values at this stage;
+ * we are only interested in recording the fact that a timeout
+ * happened. We record the time values via
+ * circuit_build_times_count_close() and circuit_build_times_add_time().
+ */
+void
+circuit_build_times_count_timeout(circuit_build_times_t *cbt,
+ int did_onehop)
+{
+ if (circuit_build_times_disabled()) {
+ cbt->close_ms = cbt->timeout_ms
+ = circuit_build_times_get_initial_timeout();
+ return;
+ }
+
+ /* Register the fact that a timeout just occurred. */
+ circuit_build_times_network_timeout(cbt, did_onehop);
+
+ /* If there are a ton of timeouts, we should reset
+ * the circuit build timeout. */
+ circuit_build_times_network_check_changed(cbt);
+}
+
+/**
+ * Estimate a new timeout based on history and set our timeout
+ * variable accordingly.
+ */
+static int
+circuit_build_times_set_timeout_worker(circuit_build_times_t *cbt)
+{
+ build_time_t max_time;
+ if (!circuit_build_times_enough_to_compute(cbt))
+ return 0;
+
+ if (!circuit_build_times_update_alpha(cbt))
+ return 0;
+
+ cbt->timeout_ms = circuit_build_times_calculate_timeout(cbt,
+ circuit_build_times_quantile_cutoff());
+
+ cbt->close_ms = circuit_build_times_calculate_timeout(cbt,
+ circuit_build_times_close_quantile());
+
+ max_time = circuit_build_times_max(cbt);
+
+ if (cbt->timeout_ms > max_time) {
+ log_info(LD_CIRC,
+ "Circuit build timeout of %dms is beyond the maximum build "
+ "time we have ever observed. Capping it to %dms.",
+ (int)cbt->timeout_ms, max_time);
+ cbt->timeout_ms = max_time;
+ }
+
+ if (max_time < INT32_MAX/2 && cbt->close_ms > 2*max_time) {
+ log_info(LD_CIRC,
+ "Circuit build measurement period of %dms is more than twice "
+ "the maximum build time we have ever observed. Capping it to "
+ "%dms.", (int)cbt->close_ms, 2*max_time);
+ cbt->close_ms = 2*max_time;
+ }
+
+ /* Sometimes really fast guard nodes give us such a steep curve
+ * that this ends up being not that much greater than timeout_ms.
+ * Make it be at least 1 min to handle this case. */
+ cbt->close_ms = MAX(cbt->close_ms, circuit_build_times_initial_timeout());
+
+ cbt->have_computed_timeout = 1;
+ return 1;
+}
+
+/**
+ * Exposed function to compute a new timeout. Dispatches events and
+ * also filters out extremely high timeout values.
+ */
+void
+circuit_build_times_set_timeout(circuit_build_times_t *cbt)
+{
+ long prev_timeout = tor_lround(cbt->timeout_ms/1000);
+ double timeout_rate;
+
+ /*
+ * Just return if we aren't using adaptive timeouts
+ */
+ if (circuit_build_times_disabled())
+ return;
+
+ if (!circuit_build_times_set_timeout_worker(cbt))
+ return;
+
+ if (cbt->timeout_ms < circuit_build_times_min_timeout()) {
+ log_info(LD_CIRC, "Set buildtimeout to low value %fms. Setting to %dms",
+ cbt->timeout_ms, circuit_build_times_min_timeout());
+ cbt->timeout_ms = circuit_build_times_min_timeout();
+ if (cbt->close_ms < cbt->timeout_ms) {
+ /* This shouldn't happen because of MAX() in timeout_worker above,
+ * but doing it just in case */
+ cbt->close_ms = circuit_build_times_initial_timeout();
+ }
+ }
+
+ cbt_control_event_buildtimeout_set(cbt, BUILDTIMEOUT_SET_EVENT_COMPUTED);
+
+ timeout_rate = circuit_build_times_timeout_rate(cbt);
+
+ if (prev_timeout > tor_lround(cbt->timeout_ms/1000)) {
+ log_info(LD_CIRC,
+ "Based on %d circuit times, it looks like we don't need to "
+ "wait so long for circuits to finish. We will now assume a "
+ "circuit is too slow to use after waiting %ld seconds.",
+ cbt->total_build_times,
+ tor_lround(cbt->timeout_ms/1000));
+ log_info(LD_CIRC,
+ "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
+ cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
+ timeout_rate);
+ } else if (prev_timeout < tor_lround(cbt->timeout_ms/1000)) {
+ log_info(LD_CIRC,
+ "Based on %d circuit times, it looks like we need to wait "
+ "longer for circuits to finish. We will now assume a "
+ "circuit is too slow to use after waiting %ld seconds.",
+ cbt->total_build_times,
+ tor_lround(cbt->timeout_ms/1000));
+ log_info(LD_CIRC,
+ "Circuit timeout data: %fms, %fms, Xm: %d, a: %f, r: %f",
+ cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha,
+ timeout_rate);
+ } else {
+ log_info(LD_CIRC,
+ "Set circuit build timeout to %lds (%fms, %fms, Xm: %d, a: %f,"
+ " r: %f) based on %d circuit times",
+ tor_lround(cbt->timeout_ms/1000),
+ cbt->timeout_ms, cbt->close_ms, cbt->Xm, cbt->alpha, timeout_rate,
+ 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
+circuitbuild_running_unit_tests(void)
+{
+ unit_tests = 1;
+}
+#endif
+
+void
+circuit_build_times_update_last_circ(circuit_build_times_t *cbt)
+{
+ cbt->last_circ_at = approx_time();
+}
+
+static void
+cbt_control_event_buildtimeout_set(const circuit_build_times_t *cbt,
+ buildtimeout_set_event_t type)
+{
+ char *args = NULL;
+ double qnt;
+
+ switch (type) {
+ case BUILDTIMEOUT_SET_EVENT_RESET:
+ case BUILDTIMEOUT_SET_EVENT_SUSPENDED:
+ case BUILDTIMEOUT_SET_EVENT_DISCARD:
+ qnt = 1.0;
+ break;
+ case BUILDTIMEOUT_SET_EVENT_COMPUTED:
+ case BUILDTIMEOUT_SET_EVENT_RESUME:
+ default:
+ qnt = circuit_build_times_quantile_cutoff();
+ break;
+ }
+
+ tor_asprintf(&args, "TOTAL_TIMES=%lu "
+ "TIMEOUT_MS=%lu XM=%lu ALPHA=%f CUTOFF_QUANTILE=%f "
+ "TIMEOUT_RATE=%f CLOSE_MS=%lu CLOSE_RATE=%f",
+ (unsigned long)cbt->total_build_times,
+ (unsigned long)cbt->timeout_ms,
+ (unsigned long)cbt->Xm, cbt->alpha, qnt,
+ circuit_build_times_timeout_rate(cbt),
+ (unsigned long)cbt->close_ms,
+ circuit_build_times_close_rate(cbt));
+
+ control_event_buildtimeout_set(type, args);
+
+ tor_free(args);
+}
+
diff --git a/src/or/circuitstats.h b/src/or/circuitstats.h
new file mode 100644
index 000000000..3343310b8
--- /dev/null
+++ b/src/or/circuitstats.h
@@ -0,0 +1,98 @@
+/* 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 circuitstats.h
+ * \brief Header file for circuitstats.c
+ **/
+
+#ifndef TOR_CIRCUITSTATS_H
+#define TOR_CIRCUITSTATS_H
+
+const circuit_build_times_t *get_circuit_build_times(void);
+circuit_build_times_t *get_circuit_build_times_mutable(void);
+double get_circuit_build_close_time_ms(void);
+double get_circuit_build_timeout_ms(void);
+
+int circuit_build_times_disabled(void);
+int circuit_build_times_enough_to_compute(const circuit_build_times_t *cbt);
+void circuit_build_times_update_state(const circuit_build_times_t *cbt,
+ or_state_t *state);
+int circuit_build_times_parse_state(circuit_build_times_t *cbt,
+ or_state_t *state);
+void circuit_build_times_count_timeout(circuit_build_times_t *cbt,
+ int did_onehop);
+int circuit_build_times_count_close(circuit_build_times_t *cbt,
+ int did_onehop, time_t start_time);
+void circuit_build_times_set_timeout(circuit_build_times_t *cbt);
+int circuit_build_times_add_time(circuit_build_times_t *cbt,
+ build_time_t time);
+int circuit_build_times_needs_circuits(const circuit_build_times_t *cbt);
+
+int circuit_build_times_needs_circuits_now(const circuit_build_times_t *cbt);
+void circuit_build_times_init(circuit_build_times_t *cbt);
+void circuit_build_times_free_timeouts(circuit_build_times_t *cbt);
+void circuit_build_times_new_consensus_params(circuit_build_times_t *cbt,
+ networkstatus_t *ns);
+double circuit_build_times_timeout_rate(const circuit_build_times_t *cbt);
+double circuit_build_times_close_rate(const circuit_build_times_t *cbt);
+
+void circuit_build_times_update_last_circ(circuit_build_times_t *cbt);
+
+#ifdef CIRCUITSTATS_PRIVATE
+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);
+void circuitbuild_running_unit_tests(void);
+#endif
+
+/* Network liveness functions */
+void circuit_build_times_network_is_live(circuit_build_times_t *cbt);
+int circuit_build_times_network_check_live(const circuit_build_times_t *cbt);
+void circuit_build_times_network_circ_success(circuit_build_times_t *cbt);
+
+#ifdef CIRCUITSTATS_PRIVATE
+/** Structure for circuit build times history */
+struct circuit_build_times_s {
+ /** The circular array of recorded build times in milliseconds */
+ build_time_t circuit_build_times[CBT_NCIRCUITS_TO_OBSERVE];
+ /** Current index in the circuit_build_times circular array */
+ int build_times_idx;
+ /** Total number of build times accumulated. Max CBT_NCIRCUITS_TO_OBSERVE */
+ int total_build_times;
+ /** Information about the state of our local network connection */
+ network_liveness_t liveness;
+ /** Last time we built a circuit. Used to decide to build new test circs */
+ time_t last_circ_at;
+ /** "Minimum" value of our pareto distribution (actually mode) */
+ build_time_t Xm;
+ /** alpha exponent for pareto dist. */
+ double alpha;
+ /** Have we computed a timeout? */
+ int have_computed_timeout;
+ /** The exact value for that timeout in milliseconds. Stored as a double
+ * to maintain precision from calculations to and from quantile value. */
+ double timeout_ms;
+ /** How long we wait before actually closing the circuit. */
+ double close_ms;
+};
+#endif
+
+#endif
+
diff --git a/src/or/circuituse.c b/src/or/circuituse.c
index 20f124eb4..023bd4cac 100644
--- a/src/or/circuituse.c
+++ b/src/or/circuituse.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,13 +10,18 @@
**/
#include "or.h"
+#include "addressmap.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "circuituse.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
#include "control.h"
+#include "entrynodes.h"
#include "nodelist.h"
#include "networkstatus.h"
#include "policies.h"
@@ -27,12 +32,6 @@
#include "router.h"
#include "routerlist.h"
-/********* START VARIABLES **********/
-
-extern circuit_t *global_circuitlist; /* from circuitlist.c */
-
-/********* END VARIABLES ************/
-
static void circuit_expire_old_circuits_clientside(void);
static void circuit_increment_failure_count(void);
@@ -53,7 +52,7 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
tor_assert(conn);
tor_assert(conn->socks_request);
- if (must_be_open && (circ->state != CIRCUIT_STATE_OPEN || !circ->n_conn))
+ if (must_be_open && (circ->state != CIRCUIT_STATE_OPEN || !circ->n_chan))
return 0; /* ignore non-open circs */
if (circ->marked_for_close)
return 0;
@@ -81,10 +80,14 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
}
if (purpose == CIRCUIT_PURPOSE_C_GENERAL ||
- purpose == CIRCUIT_PURPOSE_C_REND_JOINED)
+ purpose == CIRCUIT_PURPOSE_C_REND_JOINED) {
if (circ->timestamp_dirty &&
circ->timestamp_dirty+get_options()->MaxCircuitDirtiness <= now)
return 0;
+ }
+
+ if (origin_circ->unusable_for_new_conns)
+ return 0;
/* decide if this circ is suitable for this conn */
@@ -101,6 +104,8 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
return 0;
if (purpose == CIRCUIT_PURPOSE_C_GENERAL) {
+ tor_addr_t addr;
+ const int family = tor_addr_parse(&addr, conn->socks_request->address);
if (!exitnode && !build_state->onehop_tunnel) {
log_debug(LD_CIRC,"Not considering circuit with unknown router.");
return 0; /* this circuit is screwed and doesn't know it yet,
@@ -121,9 +126,7 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
return 0; /* this is a circuit to somewhere else */
if (tor_digest_is_zero(digest)) {
/* we don't know the digest; have to compare addr:port */
- tor_addr_t addr;
- int r = tor_addr_parse(&addr, conn->socks_request->address);
- if (r < 0 ||
+ if (family < 0 ||
!tor_addr_eq(&build_state->chosen_exit->addr, &addr) ||
build_state->chosen_exit->port != conn->socks_request->port)
return 0;
@@ -135,6 +138,13 @@ circuit_is_acceptable(const origin_circuit_t *origin_circ,
return 0;
}
}
+ if (origin_circ->prepend_policy && family != -1) {
+ int r = compare_tor_addr_to_addr_policy(&addr,
+ conn->socks_request->port,
+ origin_circ->prepend_policy);
+ if (r == ADDR_POLICY_REJECTED)
+ return 0;
+ }
if (exitnode && !connection_ap_can_use_exit(conn, exitnode)) {
/* can't exit from this router */
return 0;
@@ -172,6 +182,13 @@ circuit_is_better(const origin_circuit_t *oa, const origin_circuit_t *ob,
const uint8_t purpose = ENTRY_TO_CONN(conn)->purpose;
int a_bits, b_bits;
+ /* If one of the circuits was allowed to live due to relaxing its timeout,
+ * it is definitely worse (it's probably a much slower path). */
+ if (oa->relaxed_timeout && !ob->relaxed_timeout)
+ return 0; /* ob is better. It's not relaxed. */
+ if (!oa->relaxed_timeout && ob->relaxed_timeout)
+ return 1; /* oa is better. It's not relaxed. */
+
switch (purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
/* if it's used but less dirty it's best;
@@ -183,7 +200,7 @@ circuit_is_better(const origin_circuit_t *oa, const origin_circuit_t *ob,
return 1;
} else {
if (a->timestamp_dirty ||
- timercmp(&a->timestamp_created, &b->timestamp_created, >))
+ timercmp(&a->timestamp_began, &b->timestamp_began, >))
return 1;
if (ob->build_state->is_internal)
/* XXX023 what the heck is this internal thing doing here. I
@@ -264,22 +281,24 @@ circuit_get_best(const entry_connection_t *conn,
tor_gettimeofday(&now);
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
origin_circuit_t *origin_circ;
if (!CIRCUIT_IS_ORIGIN(circ))
continue;
origin_circ = TO_ORIGIN_CIRCUIT(circ);
- if (!circuit_is_acceptable(origin_circ,conn,must_be_open,purpose,
- need_uptime,need_internal,now.tv_sec))
- continue;
+ /* Log an info message if we're going to launch a new intro circ in
+ * parallel */
if (purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT &&
- !must_be_open && circ->state != CIRCUIT_STATE_OPEN &&
- tv_mdiff(&now, &circ->timestamp_created) > circ_times.timeout_ms) {
- intro_going_on_but_too_old = 1;
- continue;
+ !must_be_open && origin_circ->hs_circ_has_timed_out) {
+ intro_going_on_but_too_old = 1;
+ continue;
}
+ if (!circuit_is_acceptable(origin_circ,conn,must_be_open,purpose,
+ need_uptime,need_internal, (time_t)now.tv_sec))
+ continue;
+
/* now this is an acceptable circ to hand back. but that doesn't
* mean it's the *best* circ to hand back. try to decide.
*/
@@ -303,7 +322,7 @@ count_pending_general_client_circuits(void)
int count = 0;
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (circ->marked_for_close ||
circ->state == CIRCUIT_STATE_OPEN ||
circ->purpose != CIRCUIT_PURPOSE_C_GENERAL ||
@@ -351,18 +370,40 @@ circuit_conforms_to_options(const origin_circuit_t *circ,
void
circuit_expire_building(void)
{
- circuit_t *victim, *next_circ = global_circuitlist;
+ circuit_t *victim, *next_circ;
/* circ_times.timeout_ms and circ_times.close_ms are from
* circuit_build_times_get_initial_timeout() if we haven't computed
* custom timeouts yet */
struct timeval general_cutoff, begindir_cutoff, fourhop_cutoff,
- cannibalize_cutoff, close_cutoff, extremely_old_cutoff,
- hs_extremely_old_cutoff;
+ close_cutoff, extremely_old_cutoff, hs_extremely_old_cutoff,
+ cannibalized_cutoff, c_intro_cutoff, s_intro_cutoff, stream_cutoff;
const or_options_t *options = get_options();
struct timeval now;
cpath_build_state_t *build_state;
+ int any_opened_circs = 0;
tor_gettimeofday(&now);
+
+ /* Check to see if we have any opened circuits. If we don't,
+ * we want to be more lenient with timeouts, in case the
+ * user has relocated and/or changed network connections.
+ * See bug #3443. */
+ TOR_LIST_FOREACH(next_circ, circuit_get_global_list(), head) {
+ if (!CIRCUIT_IS_ORIGIN(next_circ) || /* didn't originate here */
+ next_circ->marked_for_close) { /* don't mess with marked circs */
+ continue;
+ }
+
+ if (TO_ORIGIN_CIRCUIT(next_circ)->has_opened &&
+ next_circ->state == CIRCUIT_STATE_OPEN &&
+ TO_ORIGIN_CIRCUIT(next_circ)->build_state &&
+ TO_ORIGIN_CIRCUIT(next_circ)->build_state->desired_path_len
+ == DEFAULT_ROUTE_LEN) {
+ any_opened_circs = 1;
+ break;
+ }
+ }
+
#define SET_CUTOFF(target, msec) do { \
long ms = tor_lround(msec); \
struct timeval diff; \
@@ -371,44 +412,167 @@ circuit_expire_building(void)
timersub(&now, &diff, &target); \
} while (0)
- SET_CUTOFF(general_cutoff, circ_times.timeout_ms);
- SET_CUTOFF(begindir_cutoff, circ_times.timeout_ms);
- SET_CUTOFF(fourhop_cutoff, circ_times.timeout_ms * (4/3.0));
- SET_CUTOFF(cannibalize_cutoff, circ_times.timeout_ms / 2.0);
- SET_CUTOFF(close_cutoff, circ_times.close_ms);
- SET_CUTOFF(extremely_old_cutoff, circ_times.close_ms*2 + 1000);
+ /**
+ * Because circuit build timeout is calculated only based on 3 hop
+ * general purpose circuit construction, we need to scale the timeout
+ * to make it properly apply to longer circuits, and circuits of
+ * certain usage types. The following diagram illustrates how we
+ * derive the scaling below. In short, we calculate the number
+ * of times our telescoping-based circuit construction causes cells
+ * to traverse each link for the circuit purpose types in question,
+ * and then assume each link is equivalent.
+ *
+ * OP --a--> A --b--> B --c--> C
+ * OP --a--> A --b--> B --c--> C --d--> D
+ *
+ * Let h = a = b = c = d
+ *
+ * Three hops (general_cutoff)
+ * RTTs = 3a + 2b + c
+ * RTTs = 6h
+ * Cannibalized:
+ * RTTs = a+b+c+d
+ * RTTs = 4h
+ * Four hops:
+ * RTTs = 4a + 3b + 2c + d
+ * RTTs = 10h
+ * Client INTRODUCE1+ACK: // XXX: correct?
+ * RTTs = 5a + 4b + 3c + 2d
+ * RTTs = 14h
+ * Server intro:
+ * RTTs = 4a + 3b + 2c
+ * RTTs = 9h
+ */
+ SET_CUTOFF(general_cutoff, get_circuit_build_timeout_ms());
+ SET_CUTOFF(begindir_cutoff, get_circuit_build_timeout_ms());
+
+ /* > 3hop circs seem to have a 1.0 second delay on their cannibalized
+ * 4th hop. */
+ SET_CUTOFF(fourhop_cutoff, get_circuit_build_timeout_ms() * (10/6.0) + 1000);
+
+ /* CIRCUIT_PURPOSE_C_ESTABLISH_REND behaves more like a RELAY cell.
+ * Use the stream cutoff (more or less). */
+ SET_CUTOFF(stream_cutoff, MAX(options->CircuitStreamTimeout,15)*1000 + 1000);
+
+ /* Be lenient with cannibalized circs. They already survived the official
+ * CBT, and they're usually not performance-critical. */
+ SET_CUTOFF(cannibalized_cutoff,
+ MAX(get_circuit_build_close_time_ms()*(4/6.0),
+ options->CircuitStreamTimeout * 1000) + 1000);
+
+ /* Intro circs have an extra round trip (and are also 4 hops long) */
+ SET_CUTOFF(c_intro_cutoff, get_circuit_build_timeout_ms() * (14/6.0) + 1000);
+
+ /* Server intro circs have an extra round trip */
+ SET_CUTOFF(s_intro_cutoff, get_circuit_build_timeout_ms() * (9/6.0) + 1000);
+
+ SET_CUTOFF(close_cutoff, get_circuit_build_close_time_ms());
+ SET_CUTOFF(extremely_old_cutoff, get_circuit_build_close_time_ms()*2 + 1000);
SET_CUTOFF(hs_extremely_old_cutoff,
- MAX(circ_times.close_ms*2 + 1000,
+ MAX(get_circuit_build_close_time_ms()*2 + 1000,
options->SocksTimeout * 1000));
- while (next_circ) {
+ TOR_LIST_FOREACH(next_circ, circuit_get_global_list(), head) {
struct timeval cutoff;
victim = next_circ;
- next_circ = next_circ->next;
if (!CIRCUIT_IS_ORIGIN(victim) || /* didn't originate here */
- victim->marked_for_close) /* don't mess with marked circs */
+ victim->marked_for_close) /* don't mess with marked circs */
+ continue;
+
+ /* If we haven't yet started the first hop, it means we don't have
+ * any orconns available, and thus have not started counting time yet
+ * for this circuit. See circuit_deliver_create_cell() and uses of
+ * timestamp_began.
+ *
+ * Continue to wait in this case. The ORConn should timeout
+ * independently and kill us then.
+ */
+ if (TO_ORIGIN_CIRCUIT(victim)->cpath->state == CPATH_STATE_CLOSED) {
continue;
+ }
build_state = TO_ORIGIN_CIRCUIT(victim)->build_state;
if (build_state && build_state->onehop_tunnel)
cutoff = begindir_cutoff;
- else if (build_state && build_state->desired_path_len == 4
- && !TO_ORIGIN_CIRCUIT(victim)->has_opened)
- cutoff = fourhop_cutoff;
- else if (TO_ORIGIN_CIRCUIT(victim)->has_opened)
- cutoff = cannibalize_cutoff;
else if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
cutoff = close_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCING ||
+ victim->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT)
+ cutoff = c_intro_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO)
+ cutoff = s_intro_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND)
+ cutoff = stream_cutoff;
+ else if (victim->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING)
+ cutoff = close_cutoff;
+ else if (TO_ORIGIN_CIRCUIT(victim)->has_opened &&
+ victim->state != CIRCUIT_STATE_OPEN)
+ cutoff = cannibalized_cutoff;
+ else if (build_state && build_state->desired_path_len >= 4)
+ cutoff = fourhop_cutoff;
else
cutoff = general_cutoff;
if (TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out)
cutoff = hs_extremely_old_cutoff;
- if (timercmp(&victim->timestamp_created, &cutoff, >))
+ if (timercmp(&victim->timestamp_began, &cutoff, >))
continue; /* it's still young, leave it alone */
+ /* We need to double-check the opened state here because
+ * we don't want to consider opened 1-hop dircon circuits for
+ * deciding when to relax the timeout, but we *do* want to relax
+ * those circuits too if nothing else is opened *and* they still
+ * aren't either. */
+ if (!any_opened_circs && victim->state != CIRCUIT_STATE_OPEN) {
+ /* It's still young enough that we wouldn't close it, right? */
+ if (timercmp(&victim->timestamp_began, &close_cutoff, >)) {
+ if (!TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout) {
+ int first_hop_succeeded = TO_ORIGIN_CIRCUIT(victim)->cpath->state
+ == CPATH_STATE_OPEN;
+ log_info(LD_CIRC,
+ "No circuits are opened. Relaxing timeout for circuit %d "
+ "(a %s %d-hop circuit in state %s with channel state %s). "
+ "%d guards are live.",
+ TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ circuit_purpose_to_string(victim->purpose),
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1,
+ circuit_state_to_string(victim->state),
+ channel_state_to_string(victim->n_chan->state),
+ num_live_entry_guards(0));
+
+ /* We count the timeout here for CBT, because technically this
+ * was a timeout, and the timeout value needs to reset if we
+ * see enough of them. Note this means we also need to avoid
+ * double-counting below, too. */
+ circuit_build_times_count_timeout(get_circuit_build_times_mutable(),
+ first_hop_succeeded);
+ TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout = 1;
+ }
+ continue;
+ } else {
+ static ratelim_t relax_timeout_limit = RATELIM_INIT(3600);
+ const double build_close_ms = get_circuit_build_close_time_ms();
+ log_fn_ratelim(&relax_timeout_limit, LOG_NOTICE, LD_CIRC,
+ "No circuits are opened. Relaxed timeout for circuit %d "
+ "(a %s %d-hop circuit in state %s with channel state %s) to "
+ "%ldms. However, it appears the circuit has timed out "
+ "anyway. %d guards are live.",
+ TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ circuit_purpose_to_string(victim->purpose),
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1,
+ circuit_state_to_string(victim->state),
+ channel_state_to_string(victim->n_chan->state),
+ (long)build_close_ms,
+ num_live_entry_guards(0));
+ }
+ }
+
#if 0
/* some debug logs, to help track bugs */
if (victim->purpose >= CIRCUIT_PURPOSE_C_INTRODUCING &&
@@ -436,8 +600,6 @@ circuit_expire_building(void)
default: /* most open circuits can be left alone. */
continue; /* yes, continue inside a switch refers to the nearest
* enclosing loop. C is smart. */
- case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
- case CIRCUIT_PURPOSE_C_INTRODUCING:
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
break; /* too old, need to die */
case CIRCUIT_PURPOSE_C_REND_READY:
@@ -449,6 +611,19 @@ circuit_expire_building(void)
victim->timestamp_dirty > cutoff.tv_sec)
continue;
break;
+ case CIRCUIT_PURPOSE_PATH_BIAS_TESTING:
+ /* Open path bias testing circuits are given a long
+ * time to complete the test, but not forever */
+ TO_ORIGIN_CIRCUIT(victim)->path_state = PATH_STATE_USE_FAILED;
+ break;
+ case CIRCUIT_PURPOSE_C_INTRODUCING:
+ /* We keep old introducing circuits around for
+ * a while in parallel, and they can end up "opened".
+ * We decide below if we're going to mark them timed
+ * out and eventually close them.
+ */
+ break;
+ case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
/* rend and intro circs become dirty each time they
@@ -474,7 +649,7 @@ circuit_expire_building(void)
}
if (circuit_timeout_want_to_count_circ(TO_ORIGIN_CIRCUIT(victim)) &&
- circuit_build_times_enough_to_compute(&circ_times)) {
+ circuit_build_times_enough_to_compute(get_circuit_build_times())) {
/* Circuits are allowed to last longer for measurement.
* Switch their purpose and wait. */
if (victim->purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT) {
@@ -485,9 +660,13 @@ circuit_expire_building(void)
/* Record this failure to check for too many timeouts
* in a row. This function does not record a time value yet
* (we do that later); it only counts the fact that we did
- * have a timeout. */
- circuit_build_times_count_timeout(&circ_times,
- first_hop_succeeded);
+ * have a timeout. We also want to avoid double-counting
+ * already "relaxed" circuits, which are counted above. */
+ if (!TO_ORIGIN_CIRCUIT(victim)->relaxed_timeout) {
+ circuit_build_times_count_timeout(
+ get_circuit_build_times_mutable(),
+ first_hop_succeeded);
+ }
continue;
}
@@ -496,17 +675,18 @@ circuit_expire_building(void)
* it off at, we probably had a suspend event along this codepath,
* and we should discard the value.
*/
- if (timercmp(&victim->timestamp_created, &extremely_old_cutoff, <)) {
+ if (timercmp(&victim->timestamp_began, &extremely_old_cutoff, <)) {
log_notice(LD_CIRC,
"Extremely large value for circuit build timeout: %lds. "
"Assuming clock jump. Purpose %d (%s)",
- (long)(now.tv_sec - victim->timestamp_created.tv_sec),
+ (long)(now.tv_sec - victim->timestamp_began.tv_sec),
victim->purpose,
circuit_purpose_to_string(victim->purpose));
- } else if (circuit_build_times_count_close(&circ_times,
- first_hop_succeeded,
- victim->timestamp_created.tv_sec)) {
- circuit_build_times_set_timeout(&circ_times);
+ } else if (circuit_build_times_count_close(
+ get_circuit_build_times_mutable(),
+ first_hop_succeeded,
+ (time_t)victim->timestamp_created.tv_sec)) {
+ circuit_build_times_set_timeout(get_circuit_build_times_mutable());
}
}
}
@@ -531,15 +711,19 @@ circuit_expire_building(void)
* and we have tried to send an INTRODUCE1 cell specifying it.
* Thus, if the pending_final_cpath field *is* NULL, then we
* want to not spare it. */
- if (TO_ORIGIN_CIRCUIT(victim)->build_state->pending_final_cpath ==
+ if (TO_ORIGIN_CIRCUIT(victim)->build_state &&
+ TO_ORIGIN_CIRCUIT(victim)->build_state->pending_final_cpath ==
NULL)
break;
+ /* fallthrough! */
+ case CIRCUIT_PURPOSE_C_INTRODUCING:
+ /* connection_ap_handshake_attach_circuit() will relaunch for us */
case CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT:
case CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED:
/* If we have reached this line, we want to spare the circ for now. */
- log_info(LD_CIRC,"Marking circ %d (state %d:%s, purpose %d) "
+ log_info(LD_CIRC,"Marking circ %u (state %d:%s, purpose %d) "
"as timed-out HS circ",
- victim->n_circ_id,
+ (unsigned)victim->n_circ_id,
victim->state, circuit_state_to_string(victim->state),
victim->purpose);
TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out = 1;
@@ -555,9 +739,9 @@ circuit_expire_building(void)
if (!(options->CloseHSServiceRendCircuitsImmediatelyOnTimeout) &&
!(TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out) &&
victim->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) {
- log_info(LD_CIRC,"Marking circ %d (state %d:%s, purpose %d) "
+ log_info(LD_CIRC,"Marking circ %u (state %d:%s, purpose %d) "
"as timed-out HS circ; relaunching rendezvous attempt.",
- victim->n_circ_id,
+ (unsigned)victim->n_circ_id,
victim->state, circuit_state_to_string(victim->state),
victim->purpose);
TO_ORIGIN_CIRCUIT(victim)->hs_circ_has_timed_out = 1;
@@ -565,25 +749,156 @@ circuit_expire_building(void)
continue;
}
- if (victim->n_conn)
- log_info(LD_CIRC,"Abandoning circ %s:%d:%d (state %d:%s, purpose %d)",
- victim->n_conn->_base.address, victim->n_conn->_base.port,
- victim->n_circ_id,
+ if (victim->n_chan)
+ log_info(LD_CIRC,
+ "Abandoning circ %u %s:%u (state %d,%d:%s, purpose %d, "
+ "len %d)", TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ channel_get_canonical_remote_descr(victim->n_chan),
+ (unsigned)victim->n_circ_id,
+ TO_ORIGIN_CIRCUIT(victim)->has_opened,
victim->state, circuit_state_to_string(victim->state),
- victim->purpose);
+ victim->purpose,
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1);
else
- log_info(LD_CIRC,"Abandoning circ %d (state %d:%s, purpose %d)",
- victim->n_circ_id, victim->state,
- circuit_state_to_string(victim->state), victim->purpose);
+ log_info(LD_CIRC,
+ "Abandoning circ %u %u (state %d,%d:%s, purpose %d, len %d)",
+ TO_ORIGIN_CIRCUIT(victim)->global_identifier,
+ (unsigned)victim->n_circ_id,
+ TO_ORIGIN_CIRCUIT(victim)->has_opened,
+ victim->state,
+ circuit_state_to_string(victim->state), victim->purpose,
+ TO_ORIGIN_CIRCUIT(victim)->build_state ?
+ TO_ORIGIN_CIRCUIT(victim)->build_state->desired_path_len :
+ -1);
circuit_log_path(LOG_INFO,LD_CIRC,TO_ORIGIN_CIRCUIT(victim));
if (victim->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT)
circuit_mark_for_close(victim, END_CIRC_REASON_MEASUREMENT_EXPIRED);
else
circuit_mark_for_close(victim, END_CIRC_REASON_TIMEOUT);
+
+ pathbias_count_timeout(TO_ORIGIN_CIRCUIT(victim));
}
}
+/**
+ * As a diagnostic for bug 8387, log information about how many one-hop
+ * circuits we have around that have been there for at least <b>age</b>
+ * seconds. Log a few of them.
+ */
+void
+circuit_log_ancient_one_hop_circuits(int age)
+{
+#define MAX_ANCIENT_ONEHOP_CIRCUITS_TO_LOG 10
+ time_t now = time(NULL);
+ time_t cutoff = now - age;
+ int n_found = 0;
+ smartlist_t *log_these = smartlist_new();
+ const circuit_t *circ;
+
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ const origin_circuit_t *ocirc;
+ if (! CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ if (circ->timestamp_created.tv_sec >= cutoff)
+ continue;
+ ocirc = CONST_TO_ORIGIN_CIRCUIT(circ);
+
+ if (ocirc->build_state && ocirc->build_state->onehop_tunnel) {
+ ++n_found;
+
+ if (smartlist_len(log_these) < MAX_ANCIENT_ONEHOP_CIRCUITS_TO_LOG)
+ smartlist_add(log_these, (origin_circuit_t*) ocirc);
+ }
+ }
+
+ if (n_found == 0)
+ goto done;
+
+ log_notice(LD_HEARTBEAT,
+ "Diagnostic for issue 8387: Found %d one-hop circuits more "
+ "than %d seconds old! Logging %d...",
+ n_found, age, smartlist_len(log_these));
+
+ SMARTLIST_FOREACH_BEGIN(log_these, const origin_circuit_t *, ocirc) {
+ char created[ISO_TIME_LEN+1];
+ int stream_num;
+ const edge_connection_t *conn;
+ char *dirty = NULL;
+ circ = TO_CIRCUIT(ocirc);
+
+ format_local_iso_time(created,
+ (time_t)circ->timestamp_created.tv_sec);
+
+
+ if (circ->timestamp_dirty) {
+ char dirty_since[ISO_TIME_LEN+1];
+ format_local_iso_time(dirty_since, circ->timestamp_dirty);
+
+ tor_asprintf(&dirty, "Dirty since %s (%ld seconds vs %ld-second cutoff)",
+ dirty_since, (long)(now - circ->timestamp_dirty),
+ (long) get_options()->MaxCircuitDirtiness);
+ } else {
+ dirty = tor_strdup("Not marked dirty");
+ }
+
+ log_notice(LD_HEARTBEAT, " #%d created at %s. %s, %s. %s for close. "
+ "%s for new conns. %s.",
+ ocirc_sl_idx,
+ created,
+ circuit_state_to_string(circ->state),
+ circuit_purpose_to_string(circ->purpose),
+ circ->marked_for_close ? "Marked" : "Not marked",
+ ocirc->unusable_for_new_conns ? "Not usable" : "usable",
+ dirty);
+ tor_free(dirty);
+
+ stream_num = 0;
+ for (conn = ocirc->p_streams; conn; conn = conn->next_stream) {
+ const connection_t *c = TO_CONN(conn);
+ char stream_created[ISO_TIME_LEN+1];
+ if (++stream_num >= 5)
+ break;
+
+ format_local_iso_time(stream_created, c->timestamp_created);
+
+ log_notice(LD_HEARTBEAT, " Stream#%d created at %s. "
+ "%s conn in state %s. "
+ "%s for close (%s:%d). Hold-open is %sset. "
+ "Has %ssent RELAY_END. %s on circuit.",
+ stream_num,
+ stream_created,
+ conn_type_to_string(c->type),
+ conn_state_to_string(c->type, c->state),
+ c->marked_for_close ? "Marked" : "Not marked",
+ c->marked_for_close_file ? c->marked_for_close_file : "--",
+ c->marked_for_close,
+ c->hold_open_until_flushed ? "" : "not ",
+ conn->edge_has_sent_end ? "" : "not ",
+ conn->edge_blocked_on_circ ? "Blocked" : "Not blocked");
+ if (! c->linked_conn)
+ continue;
+
+ c = c->linked_conn;
+
+ log_notice(LD_HEARTBEAT, " Linked to %s connection in state %s "
+ "(Purpose %d). %s for close (%s:%d). Hold-open is %sset. ",
+ conn_type_to_string(c->type),
+ conn_state_to_string(c->type, c->state),
+ c->purpose,
+ c->marked_for_close ? "Marked" : "Not marked",
+ c->marked_for_close_file ? c->marked_for_close_file : "--",
+ c->marked_for_close,
+ c->hold_open_until_flushed ? "" : "not ");
+ }
+ } SMARTLIST_FOREACH_END(ocirc);
+
+ done:
+ smartlist_free(log_these);
+}
+
/** Remove any elements in <b>needed_ports</b> that are handled by an
* open or in-progress circuit.
*/
@@ -620,18 +935,22 @@ circuit_stream_is_being_handled(entry_connection_t *conn,
const node_t *exitnode;
int num=0;
time_t now = time(NULL);
- int need_uptime = smartlist_string_num_isin(get_options()->LongLivedPorts,
+ int need_uptime = smartlist_contains_int_as_string(
+ get_options()->LongLivedPorts,
conn ? conn->socks_request->port : port);
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (CIRCUIT_IS_ORIGIN(circ) &&
!circ->marked_for_close &&
circ->purpose == CIRCUIT_PURPOSE_C_GENERAL &&
(!circ->timestamp_dirty ||
circ->timestamp_dirty + get_options()->MaxCircuitDirtiness > now)) {
- cpath_build_state_t *build_state = TO_ORIGIN_CIRCUIT(circ)->build_state;
+ origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
+ cpath_build_state_t *build_state = origin_circ->build_state;
if (build_state->is_internal || build_state->onehop_tunnel)
continue;
+ if (origin_circ->unusable_for_new_conns)
+ continue;
exitnode = build_state_get_exit_node(build_state);
if (exitnode && (!need_uptime || build_state->need_uptime)) {
@@ -671,8 +990,9 @@ circuit_predict_and_launch_new(void)
int flags = 0;
/* First, count how many of each type of circuit we have already. */
- for (circ=global_circuitlist;circ;circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
cpath_build_state_t *build_state;
+ origin_circuit_t *origin_circ;
if (!CIRCUIT_IS_ORIGIN(circ))
continue;
if (circ->marked_for_close)
@@ -681,7 +1001,10 @@ circuit_predict_and_launch_new(void)
continue; /* only count clean circs */
if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL)
continue; /* only pay attention to general-purpose circs */
- build_state = TO_ORIGIN_CIRCUIT(circ)->build_state;
+ origin_circ = TO_ORIGIN_CIRCUIT(circ);
+ if (origin_circ->unusable_for_new_conns)
+ continue;
+ build_state = origin_circ->build_state;
if (build_state->onehop_tunnel)
continue;
num++;
@@ -746,8 +1069,8 @@ circuit_predict_and_launch_new(void)
* want, don't do another -- we want to leave a few slots open so
* we can still build circuits preemptively as needed. */
if (num < MAX_UNUSED_OPEN_CIRCUITS-2 &&
- get_options()->LearnCircuitBuildTimeout &&
- circuit_build_times_needs_circuits_now(&circ_times)) {
+ ! circuit_build_times_disabled() &&
+ circuit_build_times_needs_circuits_now(get_circuit_build_times())) {
flags = CIRCLAUNCH_NEED_CAPACITY;
log_info(LD_CIRC,
"Have %d clean circs need another buildtime test circ.", num);
@@ -787,7 +1110,7 @@ circuit_build_needed_circs(time_t now)
circ = circuit_get_youngest_clean_open(CIRCUIT_PURPOSE_C_GENERAL);
if (get_options()->RunTesting &&
circ &&
- circ->timestamp_created.tv_sec + TESTING_CIRCUIT_INTERVAL < now) {
+ circ->timestamp_began.tv_sec + TESTING_CIRCUIT_INTERVAL < now) {
log_fn(LOG_INFO,"Creating a new testing circuit.");
circuit_launch(CIRCUIT_PURPOSE_C_GENERAL, 0);
}
@@ -808,7 +1131,7 @@ circuit_detach_stream(circuit_t *circ, edge_connection_t *conn)
tor_assert(circ);
tor_assert(conn);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (conn->base_.type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
entry_conn->may_use_optimistic_data = 0;
}
@@ -882,8 +1205,8 @@ circuit_expire_old_circuits_clientside(void)
tor_gettimeofday(&now);
cutoff = now;
- if (get_options()->LearnCircuitBuildTimeout &&
- circuit_build_times_needs_circuits(&circ_times)) {
+ if (! circuit_build_times_disabled() &&
+ circuit_build_times_needs_circuits(get_circuit_build_times())) {
/* Circuits should be shorter lived if we need more of them
* for learning a good build timeout */
cutoff.tv_sec -= IDLE_TIMEOUT_WHILE_LEARNING;
@@ -891,7 +1214,7 @@ circuit_expire_old_circuits_clientside(void)
cutoff.tv_sec -= get_options()->CircuitIdleTimeout;
}
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (circ->marked_for_close || !CIRCUIT_IS_ORIGIN(circ))
continue;
/* If the circuit has been dirty for too long, and there are no streams
@@ -901,13 +1224,17 @@ circuit_expire_old_circuits_clientside(void)
circ->timestamp_dirty + get_options()->MaxCircuitDirtiness <
now.tv_sec &&
!TO_ORIGIN_CIRCUIT(circ)->p_streams /* nothing attached */ ) {
- log_debug(LD_CIRC, "Closing n_circ_id %d (dirty %ld sec ago, "
+ log_debug(LD_CIRC, "Closing n_circ_id %u (dirty %ld sec ago, "
"purpose %d)",
- circ->n_circ_id, (long)(now.tv_sec - circ->timestamp_dirty),
+ (unsigned)circ->n_circ_id,
+ (long)(now.tv_sec - circ->timestamp_dirty),
circ->purpose);
- circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
+ /* Don't do this magic for testing circuits. Their death is governed
+ * by circuit_expire_building */
+ if (circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING)
+ circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
} else if (!circ->timestamp_dirty && circ->state == CIRCUIT_STATE_OPEN) {
- if (timercmp(&circ->timestamp_created, &cutoff, <)) {
+ if (timercmp(&circ->timestamp_began, &cutoff, <)) {
if (circ->purpose == CIRCUIT_PURPOSE_C_GENERAL ||
circ->purpose == CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT ||
circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -917,7 +1244,7 @@ circuit_expire_old_circuits_clientside(void)
circ->purpose == CIRCUIT_PURPOSE_S_CONNECT_REND) {
log_debug(LD_CIRC,
"Closing circuit that has been unused for %ld msec.",
- tv_mdiff(&circ->timestamp_created, &now));
+ tv_mdiff(&circ->timestamp_began, &now));
circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
} else if (!TO_ORIGIN_CIRCUIT(circ)->is_ancient) {
/* Server-side rend joined circuits can end up really old, because
@@ -931,7 +1258,7 @@ circuit_expire_old_circuits_clientside(void)
"Ancient non-dirty circuit %d is still around after "
"%ld milliseconds. Purpose: %d (%s)",
TO_ORIGIN_CIRCUIT(circ)->global_identifier,
- tv_mdiff(&circ->timestamp_created, &now),
+ tv_mdiff(&circ->timestamp_began, &now),
circ->purpose,
circuit_purpose_to_string(circ->purpose));
TO_ORIGIN_CIRCUIT(circ)->is_ancient = 1;
@@ -970,20 +1297,20 @@ circuit_expire_old_circuits_serverside(time_t now)
or_circuit_t *or_circ;
time_t cutoff = now - IDLE_ONE_HOP_CIRC_TIMEOUT;
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (circ->marked_for_close || CIRCUIT_IS_ORIGIN(circ))
continue;
or_circ = TO_OR_CIRCUIT(circ);
/* If the circuit has been idle for too long, and there are no streams
* on it, and it ends here, and it used a create_fast, mark it for close.
*/
- if (or_circ->is_first_hop && !circ->n_conn &&
+ if (or_circ->is_first_hop && !circ->n_chan &&
!or_circ->n_streams && !or_circ->resolving_streams &&
- or_circ->p_conn &&
- or_circ->p_conn->timestamp_last_added_nonpadding <= cutoff) {
- log_info(LD_CIRC, "Closing circ_id %d (empty %d secs ago)",
- or_circ->p_circ_id,
- (int)(now - or_circ->p_conn->timestamp_last_added_nonpadding));
+ or_circ->p_chan &&
+ channel_when_last_xmit(or_circ->p_chan) <= cutoff) {
+ log_info(LD_CIRC, "Closing circ_id %u (empty %d secs ago)",
+ (unsigned)or_circ->p_circ_id,
+ (int)(now - channel_when_last_xmit(or_circ->p_chan)));
circuit_mark_for_close(circ, END_CIRC_REASON_FINISHED);
}
}
@@ -1017,7 +1344,7 @@ circuit_enough_testing_circs(void)
if (have_performed_bandwidth_test)
return 1;
- for (circ = global_circuitlist; circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (!circ->marked_for_close && CIRCUIT_IS_ORIGIN(circ) &&
circ->purpose == CIRCUIT_PURPOSE_TESTING &&
circ->state == CIRCUIT_STATE_OPEN)
@@ -1125,7 +1452,7 @@ static int
circuit_try_clearing_isolation_state(origin_circuit_t *circ)
{
if (/* The circuit may have become non-open if it was cannibalized.*/
- circ->_base.state == CIRCUIT_STATE_OPEN &&
+ circ->base_.state == CIRCUIT_STATE_OPEN &&
/* If !isolation_values_set, there is nothing to clear. */
circ->isolation_values_set &&
/* It's not legal to clear a circuit's isolation info if it's ever had
@@ -1163,6 +1490,7 @@ circuit_try_attaching_streams(origin_circuit_t *circ)
void
circuit_build_failed(origin_circuit_t *circ)
{
+ channel_t *n_chan = NULL;
/* we should examine circ and see if it failed because of
* the last hop or an earlier hop. then use this info below.
*/
@@ -1175,15 +1503,17 @@ circuit_build_failed(origin_circuit_t *circ)
failed_at_last_hop = 1;
}
if (circ->cpath &&
- circ->cpath->state != CPATH_STATE_OPEN) {
- /* We failed at the first hop. If there's an OR connection
- * to blame, blame it. Also, avoid this relay for a while, and
- * fail any one-hop directory fetches destined for it. */
- const char *n_conn_id = circ->cpath->extend_info->identity_digest;
+ circ->cpath->state != CPATH_STATE_OPEN &&
+ ! circ->base_.received_destroy) {
+ /* We failed at the first hop for some reason other than a DESTROY cell.
+ * If there's an OR connection to blame, blame it. Also, avoid this relay
+ * for a while, and fail any one-hop directory fetches destined for it. */
+ const char *n_chan_id = circ->cpath->extend_info->identity_digest;
int already_marked = 0;
- if (circ->_base.n_conn) {
- or_connection_t *n_conn = circ->_base.n_conn;
- if (n_conn->is_bad_for_new_circs) {
+ if (circ->base_.n_chan) {
+ n_chan = circ->base_.n_chan;
+
+ if (n_chan->is_bad_for_new_circs) {
/* We only want to blame this router when a fresh healthy
* connection fails. So don't mark this router as newly failed,
* since maybe this was just an old circuit attempt that's
@@ -1195,22 +1525,22 @@ circuit_build_failed(origin_circuit_t *circ)
}
log_info(LD_OR,
"Our circuit failed to get a response from the first hop "
- "(%s:%d). I'm going to try to rotate to a better connection.",
- n_conn->_base.address, n_conn->_base.port);
- n_conn->is_bad_for_new_circs = 1;
+ "(%s). I'm going to try to rotate to a better connection.",
+ channel_get_canonical_remote_descr(n_chan));
+ n_chan->is_bad_for_new_circs = 1;
} else {
log_info(LD_OR,
"Our circuit died before the first hop with no connection");
}
- if (n_conn_id && !already_marked) {
- entry_guard_register_connect_status(n_conn_id, 0, 1, time(NULL));
+ if (n_chan_id && !already_marked) {
+ entry_guard_register_connect_status(n_chan_id, 0, 1, time(NULL));
/* if there are any one-hop streams waiting on this circuit, fail
* them now so they can retry elsewhere. */
- connection_ap_fail_onehop(n_conn_id, circ->build_state);
+ connection_ap_fail_onehop(n_chan_id, circ->build_state);
}
}
- switch (circ->_base.purpose) {
+ switch (circ->base_.purpose) {
case CIRCUIT_PURPOSE_C_GENERAL:
/* If we never built the circuit, note it as a failure. */
circuit_increment_failure_count();
@@ -1225,7 +1555,7 @@ circuit_build_failed(origin_circuit_t *circ)
break;
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
/* at Bob, waiting for introductions */
- if (circ->_base.state != CIRCUIT_STATE_OPEN) {
+ if (circ->base_.state != CIRCUIT_STATE_OPEN) {
circuit_increment_failure_count();
}
/* no need to care here, because bob will rebuild intro
@@ -1309,21 +1639,46 @@ circuit_launch_by_extend_info(uint8_t purpose,
* internal circs rather than exit circs? -RD */
circ = circuit_find_to_cannibalize(purpose, extend_info, flags);
if (circ) {
- uint8_t old_purpose = circ->_base.purpose;
- struct timeval old_timestamp_created;
+ uint8_t old_purpose = circ->base_.purpose;
+ struct timeval old_timestamp_began = circ->base_.timestamp_began;
log_info(LD_CIRC,"Cannibalizing circ '%s' for purpose %d (%s)",
build_state_get_exit_nickname(circ->build_state), purpose,
circuit_purpose_to_string(purpose));
+ if ((purpose == CIRCUIT_PURPOSE_S_CONNECT_REND ||
+ purpose == CIRCUIT_PURPOSE_C_INTRODUCING) &&
+ circ->path_state == PATH_STATE_BUILD_SUCCEEDED) {
+ /* Path bias: Cannibalized rends pre-emptively count as a
+ * successfully built but unused closed circuit. We don't
+ * wait until the extend (or the close) because the rend
+ * point could be malicious.
+ *
+ * Same deal goes for client side introductions. Clients
+ * can be manipulated to connect repeatedly to them
+ * (especially web clients).
+ *
+ * If we decide to probe the initial portion of these circs,
+ * (up to the adversary's final hop), we need to remove this,
+ * or somehow mark the circuit with a special path state.
+ */
+
+ /* This must be called before the purpose change */
+ pathbias_check_close(circ, END_CIRC_REASON_FINISHED);
+ }
+
circuit_change_purpose(TO_CIRCUIT(circ), purpose);
- /* reset the birth date of this circ, else expire_building
+ /* Reset the start date of this circ, else expire_building
* will see it and think it's been trying to build since it
- * began. */
- tor_gettimeofday(&circ->_base.timestamp_created);
+ * began.
+ *
+ * Technically, the code should reset this when the
+ * create cell is finally sent, but we're close enough
+ * here. */
+ tor_gettimeofday(&circ->base_.timestamp_began);
control_event_circuit_cannibalized(circ, old_purpose,
- &old_timestamp_created);
+ &old_timestamp_began);
switch (purpose) {
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
@@ -1412,7 +1767,7 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
want_onehop = conn->want_onehop;
need_uptime = !conn->want_onehop && !conn->use_begindir &&
- smartlist_string_num_isin(options->LongLivedPorts,
+ smartlist_contains_int_as_string(options->LongLivedPorts,
conn->socks_request->port);
if (desired_circuit_purpose != CIRCUIT_PURPOSE_C_GENERAL)
@@ -1513,8 +1868,8 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
if ((m = rate_limit_log(&delay_limit, approx_time()))) {
log_notice(LD_APP, "We'd like to launch a circuit to handle a "
"connection, but we already have %d general-purpose client "
- "circuits pending. Waiting until some finish.",
- n_pending);
+ "circuits pending. Waiting until some finish.%s",
+ n_pending, m);
tor_free(m);
}
return 0;
@@ -1570,9 +1925,9 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
escaped_safe_str_client(conn->socks_request->address));
return -1;
}
- extend_info = extend_info_alloc(conn->chosen_exit_name+1,
- digest, NULL, &addr,
- conn->socks_request->port);
+ extend_info = extend_info_new(conn->chosen_exit_name+1,
+ digest, NULL, NULL, &addr,
+ conn->socks_request->port);
} else {
/* We will need an onion key for the router, and we
* don't have one. Refuse or relax requirements. */
@@ -1634,8 +1989,8 @@ circuit_get_open_circ_or_launch(entry_connection_t *conn,
if (circ) {
/* write the service_id into circ */
circ->rend_data = rend_data_dup(ENTRY_TO_EDGE_CONN(conn)->rend_data);
- if (circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND &&
- circ->_base.state == CIRCUIT_STATE_OPEN)
+ if (circ->base_.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND &&
+ circ->base_.state == CIRCUIT_STATE_OPEN)
rend_client_rendcirc_has_opened(circ);
}
}
@@ -1697,8 +2052,8 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
const node_t *exitnode;
/* add it into the linked list of streams on this circuit */
- log_debug(LD_APP|LD_CIRC, "attaching new conn to circ. n_circ_id %d.",
- circ->_base.n_circ_id);
+ log_debug(LD_APP|LD_CIRC, "attaching new conn to circ. n_circ_id %u.",
+ (unsigned)circ->base_.n_circ_id);
/* reset it, so we can measure circ timeouts */
ENTRY_TO_CONN(apconn)->timestamp_lastread = time(NULL);
ENTRY_TO_EDGE_CONN(apconn)->next_stream = circ->p_streams;
@@ -1734,7 +2089,7 @@ link_apconn_to_circ(entry_connection_t *apconn, origin_circuit_t *circ,
exitnode->rs) {
/* Okay; we know what exit node this is. */
if (optimistic_data_enabled() &&
- circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
+ circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL &&
exitnode->rs->version_supports_optimistic_data)
apconn->may_use_optimistic_data = 1;
else
@@ -1820,12 +2175,14 @@ connection_ap_handshake_attach_chosen_circuit(entry_connection_t *conn,
base_conn->state == AP_CONN_STATE_CONTROLLER_WAIT);
tor_assert(conn->socks_request);
tor_assert(circ);
- tor_assert(circ->_base.state == CIRCUIT_STATE_OPEN);
+ tor_assert(circ->base_.state == CIRCUIT_STATE_OPEN);
base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
- if (!circ->_base.timestamp_dirty)
- circ->_base.timestamp_dirty = time(NULL);
+ if (!circ->base_.timestamp_dirty)
+ circ->base_.timestamp_dirty = time(NULL);
+
+ pathbias_count_use_attempt(circ);
link_apconn_to_circ(conn, circ, cpath);
tor_assert(conn->socks_request);
@@ -1920,8 +2277,8 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
return retval;
log_debug(LD_APP|LD_CIRC,
- "Attaching apconn to circ %d (stream %d sec old).",
- circ->_base.n_circ_id, conn_age);
+ "Attaching apconn to circ %u (stream %d sec old).",
+ (unsigned)circ->base_.n_circ_id, conn_age);
/* print the circ's path, so people can figure out which circs are
* sucking. */
circuit_log_path(LOG_INFO,LD_APP|LD_CIRC,circ);
@@ -1946,25 +2303,30 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
log_info(LD_REND,
"rend joined circ %d already here. attaching. "
"(stream %d sec old)",
- rendcirc->_base.n_circ_id, conn_age);
+ (unsigned)rendcirc->base_.n_circ_id, conn_age);
/* Mark rendezvous circuits as 'newly dirty' every time you use
* them, since the process of rebuilding a rendezvous circ is so
* expensive. There is a tradeoff between linkability and
* feasibility, at this point.
*/
- rendcirc->_base.timestamp_dirty = time(NULL);
+ rendcirc->base_.timestamp_dirty = time(NULL);
+
+ /* We've also attempted to use them. If they fail, we need to
+ * probe them for path bias */
+ pathbias_count_use_attempt(rendcirc);
+
link_apconn_to_circ(conn, rendcirc, NULL);
if (connection_ap_handshake_send_begin(conn) < 0)
return 0; /* already marked, let them fade away */
return 1;
}
- if (rendcirc && (rendcirc->_base.purpose ==
+ if (rendcirc && (rendcirc->base_.purpose ==
CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED)) {
log_info(LD_REND,
- "pending-join circ %d already here, with intro ack. "
+ "pending-join circ %u already here, with intro ack. "
"Stalling. (stream %d sec old)",
- rendcirc->_base.n_circ_id, conn_age);
+ (unsigned)rendcirc->base_.n_circ_id, conn_age);
return 0;
}
@@ -1975,51 +2337,40 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
if (retval > 0) {
/* one has already sent the intro. keep waiting. */
- circuit_t *c = NULL;
tor_assert(introcirc);
- log_info(LD_REND, "Intro circ %d present and awaiting ack (rend %d). "
+ log_info(LD_REND, "Intro circ %u present and awaiting ack (rend %u). "
"Stalling. (stream %d sec old)",
- introcirc->_base.n_circ_id,
- rendcirc ? rendcirc->_base.n_circ_id : 0,
+ (unsigned)introcirc->base_.n_circ_id,
+ rendcirc ? (unsigned)rendcirc->base_.n_circ_id : 0,
conn_age);
- /* abort parallel intro circs, if any */
- for (c = global_circuitlist; c; c = c->next) {
- if (c->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
- !c->marked_for_close && CIRCUIT_IS_ORIGIN(c)) {
- origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(c);
- if (oc->rend_data &&
- !rend_cmp_service_ids(
- ENTRY_TO_EDGE_CONN(conn)->rend_data->onion_address,
- oc->rend_data->onion_address)) {
- log_info(LD_REND|LD_CIRC, "Closing introduction circuit that we "
- "built in parallel.");
- circuit_mark_for_close(c, END_CIRC_REASON_TIMEOUT);
- }
- }
- }
return 0;
}
/* now rendcirc and introcirc are each either undefined or not finished */
if (rendcirc && introcirc &&
- rendcirc->_base.purpose == CIRCUIT_PURPOSE_C_REND_READY) {
+ rendcirc->base_.purpose == CIRCUIT_PURPOSE_C_REND_READY) {
log_info(LD_REND,
- "ready rend circ %d already here (no intro-ack yet on "
- "intro %d). (stream %d sec old)",
- rendcirc->_base.n_circ_id,
- introcirc->_base.n_circ_id, conn_age);
-
- tor_assert(introcirc->_base.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
- if (introcirc->_base.state == CIRCUIT_STATE_OPEN) {
- log_info(LD_REND,"found open intro circ %d (rend %d); sending "
+ "ready rend circ %u already here (no intro-ack yet on "
+ "intro %u). (stream %d sec old)",
+ (unsigned)rendcirc->base_.n_circ_id,
+ (unsigned)introcirc->base_.n_circ_id, conn_age);
+
+ tor_assert(introcirc->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
+ if (introcirc->base_.state == CIRCUIT_STATE_OPEN) {
+ log_info(LD_REND,"found open intro circ %u (rend %u); sending "
"introduction. (stream %d sec old)",
- introcirc->_base.n_circ_id, rendcirc->_base.n_circ_id,
+ (unsigned)introcirc->base_.n_circ_id,
+ (unsigned)rendcirc->base_.n_circ_id,
conn_age);
switch (rend_client_send_introduction(introcirc, rendcirc)) {
case 0: /* success */
- rendcirc->_base.timestamp_dirty = time(NULL);
- introcirc->_base.timestamp_dirty = time(NULL);
+ rendcirc->base_.timestamp_dirty = time(NULL);
+ introcirc->base_.timestamp_dirty = time(NULL);
+
+ pathbias_count_use_attempt(introcirc);
+ pathbias_count_use_attempt(rendcirc);
+
assert_circuit_ok(TO_CIRCUIT(rendcirc));
assert_circuit_ok(TO_CIRCUIT(introcirc));
return 0;
@@ -2034,10 +2385,10 @@ connection_ap_handshake_attach_circuit(entry_connection_t *conn)
}
}
- log_info(LD_REND, "Intro (%d) and rend (%d) circs are not both ready. "
+ log_info(LD_REND, "Intro (%u) and rend (%u) circs are not both ready. "
"Stalling conn. (%d sec old)",
- introcirc ? introcirc->_base.n_circ_id : 0,
- rendcirc ? rendcirc->_base.n_circ_id : 0, conn_age);
+ introcirc ? (unsigned)introcirc->base_.n_circ_id : 0,
+ rendcirc ? (unsigned)rendcirc->base_.n_circ_id : 0, conn_age);
return 0;
}
}
@@ -2078,3 +2429,23 @@ circuit_change_purpose(circuit_t *circ, uint8_t new_purpose)
}
}
+/** Mark <b>circ</b> so that no more connections can be attached to it. */
+void
+mark_circuit_unusable_for_new_conns(origin_circuit_t *circ)
+{
+ const or_options_t *options = get_options();
+ tor_assert(circ);
+
+ /* XXXX025 This is a kludge; we're only keeping it around in case there's
+ * something that doesn't check unusable_for_new_conns, and to avoid
+ * deeper refactoring of our expiration logic. */
+ if (! circ->base_.timestamp_dirty)
+ circ->base_.timestamp_dirty = approx_time();
+ if (options->MaxCircuitDirtiness >= circ->base_.timestamp_dirty)
+ circ->base_.timestamp_dirty = 1; /* prevent underflow */
+ else
+ circ->base_.timestamp_dirty -= options->MaxCircuitDirtiness;
+
+ circ->unusable_for_new_conns = 1;
+}
+
diff --git a/src/or/circuituse.h b/src/or/circuituse.h
index be2bd7ec5..f228a6758 100644
--- a/src/or/circuituse.h
+++ b/src/or/circuituse.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,13 +9,14 @@
* \brief Header file for circuituse.c.
**/
-#ifndef _TOR_CIRCUITUSE_H
-#define _TOR_CIRCUITUSE_H
+#ifndef TOR_CIRCUITUSE_H
+#define TOR_CIRCUITUSE_H
void circuit_expire_building(void);
void circuit_remove_handled_ports(smartlist_t *needed_ports);
int circuit_stream_is_being_handled(entry_connection_t *conn, uint16_t port,
int min);
+void circuit_log_ancient_one_hop_circuits(int age);
#if 0
int circuit_conforms_to_options(const origin_circuit_t *circ,
const or_options_t *options);
@@ -55,6 +56,7 @@ void circuit_change_purpose(circuit_t *circ, uint8_t new_purpose);
int hostname_in_track_host_exits(const or_options_t *options,
const char *address);
+void mark_circuit_unusable_for_new_conns(origin_circuit_t *circ);
#endif
diff --git a/src/or/command.c b/src/or/command.c
index 8321e261e..105bdc637 100644
--- a/src/or/command.c
+++ b/src/or/command.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,10 +12,12 @@
/* In-points to command.c:
*
* - command_process_cell(), called from
- * connection_or_process_cells_from_inbuf() in connection_or.c
+ * incoming cell handlers of channel_t instances;
+ * callbacks registered in command_setup_channel(),
+ * called when channels are created in circuitbuild.c
*/
-
#include "or.h"
+#include "channel.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "command.h"
@@ -27,12 +29,11 @@
#include "hibernate.h"
#include "nodelist.h"
#include "onion.h"
+#include "rephist.h"
#include "relay.h"
#include "router.h"
#include "routerlist.h"
-/** How many CELL_PADDING cells have we received, ever? */
-uint64_t stats_n_padding_cells_processed = 0;
/** How many CELL_CREATE cells have we received, ever? */
uint64_t stats_n_create_cells_processed = 0;
/** How many CELL_CREATED cells have we received, ever? */
@@ -41,38 +42,43 @@ uint64_t stats_n_created_cells_processed = 0;
uint64_t stats_n_relay_cells_processed = 0;
/** How many CELL_DESTROY cells have we received, ever? */
uint64_t stats_n_destroy_cells_processed = 0;
-/** How many CELL_VERSIONS cells have we received, ever? */
-uint64_t stats_n_versions_cells_processed = 0;
-/** How many CELL_NETINFO cells have we received, ever? */
-uint64_t stats_n_netinfo_cells_processed = 0;
-/** How many CELL_VPADDING cells have we received, ever? */
-uint64_t stats_n_vpadding_cells_processed = 0;
-/** How many CELL_CERTS cells have we received, ever? */
-uint64_t stats_n_certs_cells_processed = 0;
-/** How many CELL_AUTH_CHALLENGE cells have we received, ever? */
-uint64_t stats_n_auth_challenge_cells_processed = 0;
-/** How many CELL_AUTHENTICATE cells have we received, ever? */
-uint64_t stats_n_authenticate_cells_processed = 0;
-/** How many CELL_AUTHORIZE cells have we received, ever? */
-uint64_t stats_n_authorize_cells_processed = 0;
+/* Handle an incoming channel */
+static void command_handle_incoming_channel(channel_listener_t *listener,
+ channel_t *chan);
/* These are the main functions for processing cells */
-static void command_process_create_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_created_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_relay_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_destroy_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_versions_cell(var_cell_t *cell,
- or_connection_t *conn);
-static void command_process_netinfo_cell(cell_t *cell, or_connection_t *conn);
-static void command_process_certs_cell(var_cell_t *cell,
- or_connection_t *conn);
-static void command_process_auth_challenge_cell(var_cell_t *cell,
- or_connection_t *conn);
-static void command_process_authenticate_cell(var_cell_t *cell,
- or_connection_t *conn);
-static int enter_v3_handshake_with_cell(var_cell_t *cell,
- or_connection_t *conn);
+static void command_process_create_cell(cell_t *cell, channel_t *chan);
+static void command_process_created_cell(cell_t *cell, channel_t *chan);
+static void command_process_relay_cell(cell_t *cell, channel_t *chan);
+static void command_process_destroy_cell(cell_t *cell, channel_t *chan);
+
+/** Convert the cell <b>command</b> into a lower-case, human-readable
+ * string. */
+const char *
+cell_command_to_string(uint8_t command)
+{
+ switch (command) {
+ case CELL_PADDING: return "padding";
+ case CELL_CREATE: return "create";
+ case CELL_CREATED: return "created";
+ case CELL_RELAY: return "relay";
+ case CELL_DESTROY: return "destroy";
+ case CELL_CREATE_FAST: return "create_fast";
+ case CELL_CREATED_FAST: return "created_fast";
+ case CELL_VERSIONS: return "versions";
+ case CELL_NETINFO: return "netinfo";
+ case CELL_RELAY_EARLY: return "relay_early";
+ case CELL_CREATE2: return "create2";
+ case CELL_CREATED2: return "created2";
+ case CELL_VPADDING: return "vpadding";
+ case CELL_CERTS: return "certs";
+ case CELL_AUTH_CHALLENGE: return "auth_challenge";
+ case CELL_AUTHENTICATE: return "authenticate";
+ case CELL_AUTHORIZE: return "authorize";
+ default: return "unrecognized";
+ }
+}
#ifdef KEEP_TIMING_STATS
/** This is a wrapper function around the actual function that processes the
@@ -80,15 +86,15 @@ static int enter_v3_handshake_with_cell(var_cell_t *cell,
* by the number of microseconds used by the call to <b>*func(cell, conn)</b>.
*/
static void
-command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time,
- void (*func)(cell_t *, or_connection_t *))
+command_time_process_cell(cell_t *cell, channel_t *chan, int *time,
+ void (*func)(cell_t *, channel_t *))
{
struct timeval start, end;
long time_passed;
tor_gettimeofday(&start);
- (*func)(cell, conn);
+ (*func)(cell, chan);
tor_gettimeofday(&end);
time_passed = tv_udiff(&start, &end) ;
@@ -104,15 +110,14 @@ command_time_process_cell(cell_t *cell, or_connection_t *conn, int *time,
}
#endif
-/** Process a <b>cell</b> that was just received on <b>conn</b>. Keep internal
+/** Process a <b>cell</b> that was just received on <b>chan</b>. Keep internal
* statistics about how many of each cell we've processed so far
* this second, and the total number of microseconds it took to
* process each type of cell.
*/
void
-command_process_cell(cell_t *cell, or_connection_t *conn)
+command_process_cell(channel_t *chan, cell_t *cell)
{
- int handshaking = (conn->_base.state != OR_CONN_STATE_OPEN);
#ifdef KEEP_TIMING_STATS
/* how many of each cell have we seen so far this second? needs better
* name. */
@@ -152,263 +157,130 @@ command_process_cell(cell_t *cell, or_connection_t *conn)
#define PROCESS_CELL(tp, cl, cn) command_process_ ## tp ## _cell(cl, cn)
#endif
- if (conn->_base.marked_for_close)
- return;
-
- /* Reject all but VERSIONS and NETINFO when handshaking. */
- /* (VERSIONS should actually be impossible; it's variable-length.) */
- if (handshaking && cell->command != CELL_VERSIONS &&
- cell->command != CELL_NETINFO) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received unexpected cell command %d in state %s; closing the "
- "connection.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
- or_handshake_state_record_cell(conn->handshake_state, cell, 1);
-
switch (cell->command) {
- case CELL_PADDING:
- ++stats_n_padding_cells_processed;
- /* do nothing */
- break;
case CELL_CREATE:
case CELL_CREATE_FAST:
+ case CELL_CREATE2:
++stats_n_create_cells_processed;
- PROCESS_CELL(create, cell, conn);
+ PROCESS_CELL(create, cell, chan);
break;
case CELL_CREATED:
case CELL_CREATED_FAST:
+ case CELL_CREATED2:
++stats_n_created_cells_processed;
- PROCESS_CELL(created, cell, conn);
+ PROCESS_CELL(created, cell, chan);
break;
case CELL_RELAY:
case CELL_RELAY_EARLY:
++stats_n_relay_cells_processed;
- PROCESS_CELL(relay, cell, conn);
+ PROCESS_CELL(relay, cell, chan);
break;
case CELL_DESTROY:
++stats_n_destroy_cells_processed;
- PROCESS_CELL(destroy, cell, conn);
- break;
- case CELL_VERSIONS:
- tor_fragile_assert();
- break;
- case CELL_NETINFO:
- ++stats_n_netinfo_cells_processed;
- PROCESS_CELL(netinfo, cell, conn);
+ PROCESS_CELL(destroy, cell, chan);
break;
default:
log_fn(LOG_INFO, LD_PROTOCOL,
- "Cell of unknown type (%d) received. Dropping.", cell->command);
+ "Cell of unknown or unexpected type (%d) received. "
+ "Dropping.",
+ cell->command);
break;
}
}
-/** Return true if <b>command</b> is a cell command that's allowed to start a
- * V3 handshake. */
-static int
-command_allowed_before_handshake(uint8_t command)
-{
- switch (command) {
- case CELL_VERSIONS:
- case CELL_VPADDING:
- case CELL_AUTHORIZE:
- return 1;
- default:
- return 0;
- }
-}
-
-/** Process a <b>cell</b> that was just received on <b>conn</b>. Keep internal
- * statistics about how many of each cell we've processed so far
- * this second, and the total number of microseconds it took to
- * process each type of cell.
+/** Process an incoming var_cell from a channel; in the current protocol all
+ * the var_cells are handshake-related and handled below the channel layer,
+ * so this just logs a warning and drops the cell.
*/
+
void
-command_process_var_cell(var_cell_t *cell, or_connection_t *conn)
+command_process_var_cell(channel_t *chan, var_cell_t *var_cell)
{
-#ifdef KEEP_TIMING_STATS
- /* how many of each cell have we seen so far this second? needs better
- * name. */
- static int num_versions=0, num_certs=0;
-
- time_t now = time(NULL);
-
- if (now > current_second) { /* the second has rolled over */
- /* print stats */
- log_info(LD_OR,
- "At end of second: %d versions (%d ms), %d certs (%d ms)",
- num_versions, versions_time/1000,
- num_certs, certs_time/1000);
-
- num_versions = num_certs = 0;
- versions_time = certs_time = 0;
-
- /* remember which second it is, for next time */
- current_second = now;
- }
-#endif
-
- if (conn->_base.marked_for_close)
- return;
+ tor_assert(chan);
+ tor_assert(var_cell);
- switch (conn->_base.state)
- {
- case OR_CONN_STATE_OR_HANDSHAKING_V2:
- if (cell->command != CELL_VERSIONS) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a cell with command %d in state %s; "
- "closing the connection.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- break;
- case OR_CONN_STATE_TLS_HANDSHAKING:
- /* If we're using bufferevents, it's entirely possible for us to
- * notice "hey, data arrived!" before we notice "hey, the handshake
- * finished!" And we need to be accepting both at once to handle both
- * the v2 and v3 handshakes. */
-
- /* fall through */
- case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
- if (! command_allowed_before_handshake(cell->command)) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a cell with command %d in state %s; "
- "closing the connection.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else {
- if (enter_v3_handshake_with_cell(cell, conn)<0)
- return;
- }
- break;
- case OR_CONN_STATE_OR_HANDSHAKING_V3:
- if (cell->command != CELL_AUTHENTICATE)
- or_handshake_state_record_var_cell(conn->handshake_state, cell, 1);
- break; /* Everything is allowed */
- case OR_CONN_STATE_OPEN:
- if (conn->link_proto < 3) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a variable-length cell with command %d in state %s "
- "with link protocol %d; ignoring it.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state),
- (int)conn->link_proto);
- return;
- }
- break;
- default:
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received var-length cell with command %d in unexpected state "
- "%s [%d]; ignoring it.",
- (int)cell->command,
- conn_state_to_string(CONN_TYPE_OR,conn->_base.state),
- (int)conn->_base.state);
- return;
- }
-
- switch (cell->command) {
- case CELL_VERSIONS:
- ++stats_n_versions_cells_processed;
- PROCESS_CELL(versions, cell, conn);
- break;
- case CELL_VPADDING:
- ++stats_n_vpadding_cells_processed;
- /* Do nothing */
- break;
- case CELL_CERTS:
- ++stats_n_certs_cells_processed;
- PROCESS_CELL(certs, cell, conn);
- break;
- case CELL_AUTH_CHALLENGE:
- ++stats_n_auth_challenge_cells_processed;
- PROCESS_CELL(auth_challenge, cell, conn);
- break;
- case CELL_AUTHENTICATE:
- ++stats_n_authenticate_cells_processed;
- PROCESS_CELL(authenticate, cell, conn);
- break;
- case CELL_AUTHORIZE:
- ++stats_n_authorize_cells_processed;
- /* Ignored so far. */
- break;
- default:
- log_fn(LOG_INFO, LD_PROTOCOL,
- "Variable-length cell of unknown type (%d) received.",
- cell->command);
- break;
- }
+ log_info(LD_PROTOCOL,
+ "Received unexpected var_cell above the channel layer of type %d"
+ "; dropping it.",
+ var_cell->command);
}
-/** Process a 'create' <b>cell</b> that just arrived from <b>conn</b>. Make a
+/** Process a 'create' <b>cell</b> that just arrived from <b>chan</b>. Make a
* new circuit with the p_circ_id specified in cell. Put the circuit in state
* onionskin_pending, and pass the onionskin to the cpuworker. Circ will get
* picked up again when the cpuworker finishes decrypting it.
*/
static void
-command_process_create_cell(cell_t *cell, or_connection_t *conn)
+command_process_create_cell(cell_t *cell, channel_t *chan)
{
or_circuit_t *circ;
const or_options_t *options = get_options();
int id_is_high;
+ create_cell_t *create_cell;
+
+ tor_assert(cell);
+ tor_assert(chan);
+
+ log_debug(LD_OR,
+ "Got a CREATE cell for circ_id %u on channel " U64_FORMAT
+ " (%p)",
+ (unsigned)cell->circ_id,
+ U64_PRINTF_ARG(chan->global_identifier), chan);
if (we_are_hibernating()) {
log_info(LD_OR,
"Received create cell but we're shutting down. Sending back "
"destroy.");
- connection_or_send_destroy(cell->circ_id, conn,
+ channel_send_destroy(cell->circ_id, chan,
END_CIRC_REASON_HIBERNATING);
return;
}
if (!server_mode(options) ||
- (!public_server_mode(options) && conn->is_outgoing)) {
+ (!public_server_mode(options) && channel_is_outgoing(chan))) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received create cell (type %d) from %s:%d, but we're connected "
+ "Received create cell (type %d) from %s, but we're connected "
"to it as a client. "
"Sending back a destroy.",
- (int)cell->command, conn->_base.address, conn->_base.port);
- connection_or_send_destroy(cell->circ_id, conn,
- END_CIRC_REASON_TORPROTOCOL);
+ (int)cell->command, channel_get_canonical_remote_descr(chan));
+ channel_send_destroy(cell->circ_id, chan,
+ END_CIRC_REASON_TORPROTOCOL);
return;
}
if (cell->circ_id == 0) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received a create cell (type %d) from %s:%d with zero circID; "
- " ignoring.", (int)cell->command, conn->_base.address,
- conn->_base.port);
+ "Received a create cell (type %d) from %s with zero circID; "
+ " ignoring.", (int)cell->command,
+ channel_get_actual_remote_descr(chan));
return;
}
/* If the high bit of the circuit ID is not as expected, close the
* circ. */
- id_is_high = cell->circ_id & (1<<15);
- if ((id_is_high && conn->circ_id_type == CIRC_ID_TYPE_HIGHER) ||
- (!id_is_high && conn->circ_id_type == CIRC_ID_TYPE_LOWER)) {
+ if (chan->wide_circ_ids)
+ id_is_high = cell->circ_id & (1u<<31);
+ else
+ id_is_high = cell->circ_id & (1u<<15);
+ if ((id_is_high &&
+ chan->circ_id_type == CIRC_ID_TYPE_HIGHER) ||
+ (!id_is_high &&
+ chan->circ_id_type == CIRC_ID_TYPE_LOWER)) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received create cell with unexpected circ_id %d. Closing.",
- cell->circ_id);
- connection_or_send_destroy(cell->circ_id, conn,
- END_CIRC_REASON_TORPROTOCOL);
+ "Received create cell with unexpected circ_id %u. Closing.",
+ (unsigned)cell->circ_id);
+ channel_send_destroy(cell->circ_id, chan,
+ END_CIRC_REASON_TORPROTOCOL);
return;
}
- if (circuit_id_in_use_on_orconn(cell->circ_id, conn)) {
- const node_t *node = node_get_by_id(conn->identity_digest);
+ if (circuit_id_in_use_on_channel(cell->circ_id, chan)) {
+ const node_t *node = node_get_by_id(chan->identity_digest);
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received CREATE cell (circID %d) for known circ. "
+ "Received CREATE cell (circID %u) for known circ. "
"Dropping (age %d).",
- cell->circ_id, (int)(time(NULL) - conn->_base.timestamp_created));
+ (unsigned)cell->circ_id,
+ (int)(time(NULL) - channel_when_created(chan)));
if (node) {
char *p = esc_for_log(node_get_platform(node));
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
@@ -419,23 +291,24 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
return;
}
- circ = or_circuit_new(cell->circ_id, conn);
- circ->_base.purpose = CIRCUIT_PURPOSE_OR;
+ circ = or_circuit_new(cell->circ_id, chan);
+ circ->base_.purpose = CIRCUIT_PURPOSE_OR;
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_ONIONSKIN_PENDING);
- if (cell->command == CELL_CREATE) {
- char *onionskin = tor_malloc(ONIONSKIN_CHALLENGE_LEN);
- memcpy(onionskin, cell->payload, ONIONSKIN_CHALLENGE_LEN);
+ create_cell = tor_malloc_zero(sizeof(create_cell_t));
+ if (create_cell_parse(create_cell, cell) < 0) {
+ tor_free(create_cell);
+ log_fn(LOG_PROTOCOL_WARN, LD_OR,
+ "Bogus/unrecognized create cell; closing.");
+ circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
+ return;
+ }
+ if (create_cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST) {
/* hand it off to the cpuworkers, and then return. */
- if (assign_onionskin_to_cpuworker(NULL, circ, onionskin) < 0) {
-#define WARN_HANDOFF_FAILURE_INTERVAL (6*60*60)
- static ratelim_t handoff_warning =
- RATELIM_INIT(WARN_HANDOFF_FAILURE_INTERVAL);
- char *m;
- if ((m = rate_limit_log(&handoff_warning, approx_time()))) {
- log_warn(LD_GENERAL,"Failed to hand off onionskin. Closing.%s",m);
- tor_free(m);
- }
+ if (connection_or_digest_is_known_relay(chan->identity_digest))
+ rep_hist_note_circuit_handshake_requested(create_cell->handshake_type);
+ if (assign_onionskin_to_cpuworker(NULL, circ, create_cell) < 0) {
+ log_debug(LD_GENERAL,"Failed to hand off onionskin. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT);
return;
}
@@ -443,30 +316,44 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
} else {
/* This is a CREATE_FAST cell; we can handle it immediately without using
* a CPU worker. */
- char keys[CPATH_KEY_MATERIAL_LEN];
- char reply[DIGEST_LEN*2];
-
- tor_assert(cell->command == CELL_CREATE_FAST);
+ uint8_t keys[CPATH_KEY_MATERIAL_LEN];
+ uint8_t rend_circ_nonce[DIGEST_LEN];
+ int len;
+ created_cell_t created_cell;
/* Make sure we never try to use the OR connection on which we
* received this cell to satisfy an EXTEND request, */
- conn->is_connection_with_client = 1;
-
- if (fast_server_handshake(cell->payload, (uint8_t*)reply,
- (uint8_t*)keys, sizeof(keys))<0) {
+ channel_mark_client(chan);
+
+ memset(&created_cell, 0, sizeof(created_cell));
+ len = onion_skin_server_handshake(ONION_HANDSHAKE_TYPE_FAST,
+ create_cell->onionskin,
+ create_cell->handshake_len,
+ NULL,
+ created_cell.reply,
+ keys, CPATH_KEY_MATERIAL_LEN,
+ rend_circ_nonce);
+ tor_free(create_cell);
+ if (len < 0) {
log_warn(LD_OR,"Failed to generate key material. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
+ tor_free(create_cell);
return;
}
- if (onionskin_answer(circ, CELL_CREATED_FAST, reply, keys)<0) {
+ created_cell.cell_type = CELL_CREATED_FAST;
+ created_cell.handshake_len = len;
+
+ if (onionskin_answer(circ, &created_cell,
+ (const char *)keys, rend_circ_nonce)<0) {
log_warn(LD_OR,"Failed to reply to CREATE_FAST cell. Closing.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
return;
}
+ memwipe(keys, 0, sizeof(keys));
}
}
-/** Process a 'created' <b>cell</b> that just arrived from <b>conn</b>.
+/** Process a 'created' <b>cell</b> that just arrived from <b>chan</b>.
* Find the circuit
* that it's intended for. If we're not the origin of the circuit, package
* the 'created' cell in an 'extended' relay cell and pass it back. If we
@@ -475,32 +362,39 @@ command_process_create_cell(cell_t *cell, or_connection_t *conn)
* extend to the next hop in the circuit if necessary.
*/
static void
-command_process_created_cell(cell_t *cell, or_connection_t *conn)
+command_process_created_cell(cell_t *cell, channel_t *chan)
{
circuit_t *circ;
+ extended_cell_t extended_cell;
- circ = circuit_get_by_circid_orconn(cell->circ_id, conn);
+ circ = circuit_get_by_circid_channel(cell->circ_id, chan);
if (!circ) {
log_info(LD_OR,
- "(circID %d) unknown circ (probably got a destroy earlier). "
- "Dropping.", cell->circ_id);
+ "(circID %u) unknown circ (probably got a destroy earlier). "
+ "Dropping.", (unsigned)cell->circ_id);
return;
}
- if (circ->n_circ_id != cell->circ_id) {
+ if (circ->n_circ_id != cell->circ_id || circ->n_chan != chan) {
log_fn(LOG_PROTOCOL_WARN,LD_PROTOCOL,
"got created cell from Tor client? Closing.");
circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
return;
}
+ if (created_cell_parse(&extended_cell.created_cell, cell) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR, "Unparseable created cell.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
+ return;
+ }
+
if (CIRCUIT_IS_ORIGIN(circ)) { /* we're the OP. Handshake this. */
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
int err_reason = 0;
log_debug(LD_OR,"at OP. Finishing handshake.");
- if ((err_reason = circuit_finish_handshake(origin_circ, cell->command,
- cell->payload)) < 0) {
+ if ((err_reason = circuit_finish_handshake(origin_circ,
+ &extended_cell.created_cell)) < 0) {
log_warn(LD_OR,"circuit_finish_handshake failed.");
circuit_mark_for_close(circ, -err_reason);
return;
@@ -513,11 +407,24 @@ command_process_created_cell(cell_t *cell, or_connection_t *conn)
return;
}
} else { /* pack it into an extended relay cell, and send it. */
+ uint8_t command=0;
+ uint16_t len=0;
+ uint8_t payload[RELAY_PAYLOAD_SIZE];
log_debug(LD_OR,
"Converting created cell to extended relay cell, sending.");
- relay_send_command_from_edge(0, circ, RELAY_COMMAND_EXTENDED,
- (char*)cell->payload, ONIONSKIN_REPLY_LEN,
- NULL);
+ memset(payload, 0, sizeof(payload));
+ if (extended_cell.created_cell.cell_type == CELL_CREATED2)
+ extended_cell.cell_type = RELAY_COMMAND_EXTENDED2;
+ else
+ extended_cell.cell_type = RELAY_COMMAND_EXTENDED;
+ if (extended_cell_format(&command, &len, payload, &extended_cell) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_OR, "Can't format extended cell.");
+ circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
+ return;
+ }
+
+ relay_send_command_from_edge(0, circ, command,
+ (const char*)payload, len, NULL);
}
}
@@ -526,17 +433,18 @@ command_process_created_cell(cell_t *cell, or_connection_t *conn)
* circuit_receive_relay_cell() for actual processing.
*/
static void
-command_process_relay_cell(cell_t *cell, or_connection_t *conn)
+command_process_relay_cell(cell_t *cell, channel_t *chan)
{
circuit_t *circ;
int reason, direction;
- circ = circuit_get_by_circid_orconn(cell->circ_id, conn);
+ circ = circuit_get_by_circid_channel(cell->circ_id, chan);
if (!circ) {
log_debug(LD_OR,
- "unknown circuit %d on connection from %s:%d. Dropping.",
- cell->circ_id, conn->_base.address, conn->_base.port);
+ "unknown circuit %u on connection from %s. Dropping.",
+ (unsigned)cell->circ_id,
+ channel_get_canonical_remote_descr(chan));
return;
}
@@ -549,10 +457,11 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
if (CIRCUIT_IS_ORIGIN(circ)) {
/* if we're a relay and treating connections with recent local
* traffic better, then this is one of them. */
- conn->client_used = time(NULL);
+ channel_timestamp_client(chan);
}
if (!CIRCUIT_IS_ORIGIN(circ) &&
+ chan == TO_OR_CIRCUIT(circ)->p_chan &&
cell->circ_id == TO_OR_CIRCUIT(circ)->p_circ_id)
direction = CELL_DIRECTION_OUT;
else
@@ -570,10 +479,10 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
if (or_circ->remaining_relay_early_cells == 0) {
log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received too many RELAY_EARLY cells on circ %d from %s:%d."
+ "Received too many RELAY_EARLY cells on circ %u from %s."
" Closing circuit.",
- cell->circ_id, safe_str(conn->_base.address),
- conn->_base.port);
+ (unsigned)cell->circ_id,
+ safe_str(channel_get_canonical_remote_descr(chan)));
circuit_mark_for_close(circ, END_CIRC_REASON_TORPROTOCOL);
return;
}
@@ -590,7 +499,7 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
}
/** Process a 'destroy' <b>cell</b> that just arrived from
- * <b>conn</b>. Find the circ that it refers to (if any).
+ * <b>chan</b>. Find the circ that it refers to (if any).
*
* If the circ is in state
* onionskin_pending, then call onion_pending_remove() to remove it
@@ -603,28 +512,31 @@ command_process_relay_cell(cell_t *cell, or_connection_t *conn)
* and passes the destroy cell onward if necessary).
*/
static void
-command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
+command_process_destroy_cell(cell_t *cell, channel_t *chan)
{
circuit_t *circ;
int reason;
- circ = circuit_get_by_circid_orconn(cell->circ_id, conn);
+ circ = circuit_get_by_circid_channel(cell->circ_id, chan);
if (!circ) {
- log_info(LD_OR,"unknown circuit %d on connection from %s:%d. Dropping.",
- cell->circ_id, conn->_base.address, conn->_base.port);
+ log_info(LD_OR,"unknown circuit %u on connection from %s. Dropping.",
+ (unsigned)cell->circ_id,
+ channel_get_canonical_remote_descr(chan));
return;
}
- log_debug(LD_OR,"Received for circID %d.",cell->circ_id);
+ log_debug(LD_OR,"Received for circID %u.",(unsigned)cell->circ_id);
reason = (uint8_t)cell->payload[0];
+ circ->received_destroy = 1;
if (!CIRCUIT_IS_ORIGIN(circ) &&
+ chan == TO_OR_CIRCUIT(circ)->p_chan &&
cell->circ_id == TO_OR_CIRCUIT(circ)->p_circ_id) {
/* the destroy came from behind */
- circuit_set_p_circid_orconn(TO_OR_CIRCUIT(circ), 0, NULL);
+ circuit_set_p_circid_chan(TO_OR_CIRCUIT(circ), 0, NULL);
circuit_mark_for_close(circ, reason|END_CIRC_REASON_FLAG_REMOTE);
} else { /* the destroy came from ahead */
- circuit_set_n_circid_orconn(circ, 0, NULL);
+ circuit_set_n_circid_chan(circ, 0, NULL);
if (CIRCUIT_IS_ORIGIN(circ)) {
circuit_mark_for_close(circ, reason|END_CIRC_REASON_FLAG_REMOTE);
} else {
@@ -637,730 +549,43 @@ command_process_destroy_cell(cell_t *cell, or_connection_t *conn)
}
}
-/** Called when we as a server receive an appropriate cell while waiting
- * either for a cell or a TLS handshake. Set the connection's state to
- * "handshaking_v3', initializes the or_handshake_state field as needed,
- * and add the cell to the hash of incoming cells.)
- *
- * Return 0 on success; return -1 and mark the connection on failure.
+/** Callback to handle a new channel; call command_setup_channel() to give
+ * it the right cell handlers.
*/
-static int
-enter_v3_handshake_with_cell(var_cell_t *cell, or_connection_t *conn)
-{
- const int started_here = connection_or_nonopen_was_started_here(conn);
-
- tor_assert(conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING ||
- conn->_base.state == OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
-
- if (started_here) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a cell while TLS-handshaking, not in "
- "OR_HANDSHAKING_V3, on a connection we originated.");
- }
- connection_or_block_renegotiation(conn);
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
- if (connection_init_or_handshake_state(conn, started_here) < 0) {
- connection_mark_for_close(TO_CONN(conn));
- return -1;
- }
- or_handshake_state_record_var_cell(conn->handshake_state, cell, 1);
- return 0;
-}
-/** Process a 'versions' cell. The current link protocol version must be 0
- * to indicate that no version has yet been negotiated. We compare the
- * versions in the cell to the list of versions we support, pick the
- * highest version we have in common, and continue the negotiation from
- * there.
- */
static void
-command_process_versions_cell(var_cell_t *cell, or_connection_t *conn)
+command_handle_incoming_channel(channel_listener_t *listener, channel_t *chan)
{
- int highest_supported_version = 0;
- const uint8_t *cp, *end;
- const int started_here = connection_or_nonopen_was_started_here(conn);
- if (conn->link_proto != 0 ||
- (conn->handshake_state && conn->handshake_state->received_versions)) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a VERSIONS cell on a connection with its version "
- "already set to %d; dropping", (int) conn->link_proto);
- return;
- }
- switch (conn->_base.state)
- {
- case OR_CONN_STATE_OR_HANDSHAKING_V2:
- case OR_CONN_STATE_OR_HANDSHAKING_V3:
- break;
- case OR_CONN_STATE_TLS_HANDSHAKING:
- case OR_CONN_STATE_TLS_SERVER_RENEGOTIATING:
- default:
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "VERSIONS cell while in unexpected state");
- return;
- }
+ tor_assert(listener);
+ tor_assert(chan);
- tor_assert(conn->handshake_state);
- end = cell->payload + cell->payload_len;
- for (cp = cell->payload; cp+1 < end; ++cp) {
- uint16_t v = ntohs(get_uint16(cp));
- if (is_or_protocol_version_known(v) && v > highest_supported_version)
- highest_supported_version = v;
- }
- if (!highest_supported_version) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Couldn't find a version in common between my version list and the "
- "list in the VERSIONS cell; closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (highest_supported_version == 1) {
- /* Negotiating version 1 makes no sense, since version 1 has no VERSIONS
- * cells. */
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Used version negotiation protocol to negotiate a v1 connection. "
- "That's crazily non-compliant. Closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (highest_supported_version < 3 &&
- conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Negotiated link protocol 2 or lower after doing a v3 TLS "
- "handshake. Closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (highest_supported_version != 2 &&
- conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V2) {
- /* XXXX This should eventually be a log_protocol_warn */
- log_fn(LOG_WARN, LD_OR,
- "Negotiated link with non-2 protocol after doing a v2 TLS "
- "handshake with %s. Closing connection.",
- fmt_addr(&conn->_base.addr));
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-
- conn->link_proto = highest_supported_version;
- conn->handshake_state->received_versions = 1;
-
- if (conn->link_proto == 2) {
- log_info(LD_OR, "Negotiated version %d with %s:%d; sending NETINFO.",
- highest_supported_version,
- safe_str_client(conn->_base.address),
- conn->_base.port);
-
- if (connection_or_send_netinfo(conn) < 0) {
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- } else {
- const int send_versions = !started_here;
- /* If we want to authenticate, send a CERTS cell */
- const int send_certs = !started_here || public_server_mode(get_options());
- /* If we're a relay that got a connection, ask for authentication. */
- const int send_chall = !started_here && public_server_mode(get_options());
- /* If our certs cell will authenticate us, we can send a netinfo cell
- * right now. */
- const int send_netinfo = !started_here;
- const int send_any =
- send_versions || send_certs || send_chall || send_netinfo;
- tor_assert(conn->link_proto >= 3);
-
- log_info(LD_OR, "Negotiated version %d with %s:%d; %s%s%s%s%s",
- highest_supported_version,
- safe_str_client(conn->_base.address),
- conn->_base.port,
- send_any ? "Sending cells:" : "Waiting for CERTS cell",
- send_versions ? " VERSIONS" : "",
- send_certs ? " CERTS" : "",
- send_chall ? " AUTH_CHALLENGE" : "",
- send_netinfo ? " NETINFO" : "");
-
-#ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
- if (1) {
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-#endif
-
- if (send_versions) {
- if (connection_or_send_versions(conn, 1) < 0) {
- log_warn(LD_OR, "Couldn't send versions cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- if (send_certs) {
- if (connection_or_send_certs_cell(conn) < 0) {
- log_warn(LD_OR, "Couldn't send certs cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- if (send_chall) {
- if (connection_or_send_auth_challenge_cell(conn) < 0) {
- log_warn(LD_OR, "Couldn't send auth_challenge cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- if (send_netinfo) {
- if (connection_or_send_netinfo(conn) < 0) {
- log_warn(LD_OR, "Couldn't send netinfo cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- }
- }
-}
-
-/** Process a 'netinfo' cell: read and act on its contents, and set the
- * connection state to "open". */
-static void
-command_process_netinfo_cell(cell_t *cell, or_connection_t *conn)
-{
- time_t timestamp;
- uint8_t my_addr_type;
- uint8_t my_addr_len;
- const uint8_t *my_addr_ptr;
- const uint8_t *cp, *end;
- uint8_t n_other_addrs;
- time_t now = time(NULL);
-
- long apparent_skew = 0;
- uint32_t my_apparent_addr = 0;
-
- if (conn->link_proto < 2) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a NETINFO cell on %s connection; dropping.",
- conn->link_proto == 0 ? "non-versioned" : "a v1");
- return;
- }
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V2 &&
- conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Received a NETINFO cell on non-handshaking connection; dropping.");
- return;
- }
- tor_assert(conn->handshake_state &&
- conn->handshake_state->received_versions);
-
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3) {
- tor_assert(conn->link_proto >= 3);
- if (conn->handshake_state->started_here) {
- if (!conn->handshake_state->authenticated) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got a NETINFO cell from server, "
- "but no authentication. Closing the connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- } else {
- /* we're the server. If the client never authenticated, we have
- some housekeeping to do.*/
- if (!conn->handshake_state->authenticated) {
- tor_assert(tor_digest_is_zero(
- (const char*)conn->handshake_state->authenticated_peer_id));
- connection_or_set_circid_type(conn, NULL);
-
- connection_or_init_conn_from_address(conn,
- &conn->_base.addr,
- conn->_base.port,
- (const char*)conn->handshake_state->authenticated_peer_id,
- 0);
- }
- }
- }
-
- /* Decode the cell. */
- timestamp = ntohl(get_uint32(cell->payload));
- if (labs(now - conn->handshake_state->sent_versions_at) < 180) {
- apparent_skew = now - timestamp;
- }
-
- my_addr_type = (uint8_t) cell->payload[4];
- my_addr_len = (uint8_t) cell->payload[5];
- my_addr_ptr = (uint8_t*) cell->payload + 6;
- end = cell->payload + CELL_PAYLOAD_SIZE;
- cp = cell->payload + 6 + my_addr_len;
- if (cp >= end) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Addresses too long in netinfo cell; closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- } else if (my_addr_type == RESOLVED_TYPE_IPV4 && my_addr_len == 4) {
- my_apparent_addr = ntohl(get_uint32(my_addr_ptr));
- }
-
- n_other_addrs = (uint8_t) *cp++;
- while (n_other_addrs && cp < end-2) {
- /* Consider all the other addresses; if any matches, this connection is
- * "canonical." */
- tor_addr_t addr;
- const uint8_t *next =
- decode_address_from_payload(&addr, cp, (int)(end-cp));
- if (next == NULL) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR,
- "Bad address in netinfo cell; closing connection.");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- if (tor_addr_eq(&addr, &conn->real_addr)) {
- conn->is_canonical = 1;
- break;
- }
- cp = next;
- --n_other_addrs;
- }
-
- /* Act on apparent skew. */
- /** Warn when we get a netinfo skew with at least this value. */
-#define NETINFO_NOTICE_SKEW 3600
- if (labs(apparent_skew) > NETINFO_NOTICE_SKEW &&
- router_get_by_id_digest(conn->identity_digest)) {
- char dbuf[64];
- int severity;
- /*XXXX be smarter about when everybody says we are skewed. */
- if (router_digest_is_trusted_dir(conn->identity_digest))
- severity = LOG_WARN;
- else
- severity = LOG_INFO;
- format_time_interval(dbuf, sizeof(dbuf), apparent_skew);
- log_fn(severity, LD_GENERAL, "Received NETINFO cell with skewed time from "
- "server at %s:%d. It seems that our clock is %s by %s, or "
- "that theirs is %s. Tor requires an accurate clock to work: "
- "please check your time and date settings.",
- conn->_base.address, (int)conn->_base.port,
- apparent_skew>0 ? "ahead" : "behind", dbuf,
- apparent_skew>0 ? "behind" : "ahead");
- if (severity == LOG_WARN) /* only tell the controller if an authority */
- control_event_general_status(LOG_WARN,
- "CLOCK_SKEW SKEW=%ld SOURCE=OR:%s:%d",
- apparent_skew,
- conn->_base.address, conn->_base.port);
- }
-
- /* XXX maybe act on my_apparent_addr, if the source is sufficiently
- * trustworthy. */
- (void)my_apparent_addr;
-
- if (connection_or_set_state_open(conn)<0) {
- log_fn(LOG_PROTOCOL_WARN, LD_OR, "Got good NETINFO cell from %s:%d; but "
- "was unable to make the OR connection become open.",
- safe_str_client(conn->_base.address),
- conn->_base.port);
- connection_mark_for_close(TO_CONN(conn));
- } else {
- log_info(LD_OR, "Got good NETINFO cell from %s:%d; OR connection is now "
- "open, using protocol version %d. Its ID digest is %s",
- safe_str_client(conn->_base.address),
- conn->_base.port, (int)conn->link_proto,
- hex_str(conn->identity_digest, DIGEST_LEN));
- }
- assert_connection_ok(TO_CONN(conn),time(NULL));
+ command_setup_channel(chan);
}
-/** Process a CERTS cell from an OR connection.
- *
- * If the other side should not have sent us a CERTS cell, or the cell is
- * malformed, or it is supposed to authenticate the TLS key but it doesn't,
- * then mark the connection.
- *
- * If the cell has a good cert chain and we're doing a v3 handshake, then
- * store the certificates in or_handshake_state. If this is the client side
- * of the connection, we then authenticate the server or mark the connection.
- * If it's the server side, wait for an AUTHENTICATE cell.
+/** Given a channel, install the right handlers to process incoming
+ * cells on it.
*/
-static void
-command_process_certs_cell(var_cell_t *cell, or_connection_t *conn)
-{
-#define ERR(s) \
- do { \
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
- "Received a bad CERTS cell from %s:%d: %s", \
- safe_str(conn->_base.address), conn->_base.port, (s)); \
- connection_mark_for_close(TO_CONN(conn)); \
- goto err; \
- } while (0)
-
- tor_cert_t *link_cert = NULL;
- tor_cert_t *id_cert = NULL;
- tor_cert_t *auth_cert = NULL;
-
- uint8_t *ptr;
- int n_certs, i;
- int send_netinfo = 0;
-
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
- ERR("We're not doing a v3 handshake!");
- if (conn->link_proto < 3)
- ERR("We're not using link protocol >= 3");
- if (conn->handshake_state->received_certs_cell)
- ERR("We already got one");
- if (conn->handshake_state->authenticated) {
- /* Should be unreachable, but let's make sure. */
- ERR("We're already authenticated!");
- }
- if (cell->payload_len < 1)
- ERR("It had no body");
- if (cell->circ_id)
- ERR("It had a nonzero circuit ID");
-
- n_certs = cell->payload[0];
- ptr = cell->payload + 1;
- for (i = 0; i < n_certs; ++i) {
- uint8_t cert_type;
- uint16_t cert_len;
- if (ptr + 3 > cell->payload + cell->payload_len) {
- goto truncated;
- }
- cert_type = *ptr;
- cert_len = ntohs(get_uint16(ptr+1));
- if (ptr + 3 + cert_len > cell->payload + cell->payload_len) {
- goto truncated;
- }
- if (cert_type == OR_CERT_TYPE_TLS_LINK ||
- cert_type == OR_CERT_TYPE_ID_1024 ||
- cert_type == OR_CERT_TYPE_AUTH_1024) {
- tor_cert_t *cert = tor_cert_decode(ptr + 3, cert_len);
- if (!cert) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Received undecodable certificate in CERTS cell from %s:%d",
- safe_str(conn->_base.address), conn->_base.port);
- } else {
- if (cert_type == OR_CERT_TYPE_TLS_LINK) {
- if (link_cert) {
- tor_cert_free(cert);
- ERR("Too many TLS_LINK certificates");
- }
- link_cert = cert;
- } else if (cert_type == OR_CERT_TYPE_ID_1024) {
- if (id_cert) {
- tor_cert_free(cert);
- ERR("Too many ID_1024 certificates");
- }
- id_cert = cert;
- } else if (cert_type == OR_CERT_TYPE_AUTH_1024) {
- if (auth_cert) {
- tor_cert_free(cert);
- ERR("Too many AUTH_1024 certificates");
- }
- auth_cert = cert;
- } else {
- tor_cert_free(cert);
- }
- }
- }
- ptr += 3 + cert_len;
- continue;
-
- truncated:
- ERR("It ends in the middle of a certificate");
- }
-
- if (conn->handshake_state->started_here) {
- int severity;
- if (! (id_cert && link_cert))
- ERR("The certs we wanted were missing");
- /* Okay. We should be able to check the certificates now. */
- if (! tor_tls_cert_matches_key(conn->tls, link_cert)) {
- ERR("The link certificate didn't match the TLS public key");
- }
- /* Note that this warns more loudly about time and validity if we were
- * _trying_ to connect to an authority, not necessarily if we _did_ connect
- * to one. */
- if (router_digest_is_trusted_dir(conn->identity_digest))
- severity = LOG_WARN;
- else
- severity = LOG_PROTOCOL_WARN;
-
- if (! tor_tls_cert_is_valid(severity, link_cert, id_cert, 0))
- ERR("The link certificate was not valid");
- if (! tor_tls_cert_is_valid(severity, id_cert, id_cert, 1))
- ERR("The ID certificate was not valid");
-
- conn->handshake_state->authenticated = 1;
- {
- const digests_t *id_digests = tor_cert_get_id_digests(id_cert);
- crypto_pk_t *identity_rcvd;
- if (!id_digests)
- ERR("Couldn't compute digests for key in ID cert");
-
- identity_rcvd = tor_tls_cert_get_key(id_cert);
- if (!identity_rcvd)
- ERR("Internal error: Couldn't get RSA key from ID cert.");
- memcpy(conn->handshake_state->authenticated_peer_id,
- id_digests->d[DIGEST_SHA1], DIGEST_LEN);
- connection_or_set_circid_type(conn, identity_rcvd);
- crypto_pk_free(identity_rcvd);
- }
- if (connection_or_client_learned_peer_id(conn,
- conn->handshake_state->authenticated_peer_id) < 0)
- ERR("Problem setting or checking peer id");
-
- log_info(LD_OR, "Got some good certificates from %s:%d: Authenticated it.",
- safe_str(conn->_base.address), conn->_base.port);
-
- conn->handshake_state->id_cert = id_cert;
- id_cert = NULL;
-
- if (!public_server_mode(get_options())) {
- /* If we initiated the connection and we are not a public server, we
- * aren't planning to authenticate at all. At this point we know who we
- * are talking to, so we can just send a netinfo now. */
- send_netinfo = 1;
- }
- } else {
- if (! (id_cert && auth_cert))
- ERR("The certs we wanted were missing");
-
- /* Remember these certificates so we can check an AUTHENTICATE cell */
- if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, auth_cert, id_cert, 1))
- ERR("The authentication certificate was not valid");
- if (! tor_tls_cert_is_valid(LOG_PROTOCOL_WARN, id_cert, id_cert, 1))
- ERR("The ID certificate was not valid");
-
- log_info(LD_OR, "Got some good certificates from %s:%d: "
- "Waiting for AUTHENTICATE.",
- safe_str(conn->_base.address), conn->_base.port);
- /* XXXX check more stuff? */
-
- conn->handshake_state->id_cert = id_cert;
- conn->handshake_state->auth_cert = auth_cert;
- id_cert = auth_cert = NULL;
- }
-
- conn->handshake_state->received_certs_cell = 1;
-
- if (send_netinfo) {
- if (connection_or_send_netinfo(conn) < 0) {
- log_warn(LD_OR, "Couldn't send netinfo cell");
- connection_mark_for_close(TO_CONN(conn));
- goto err;
- }
- }
-
- err:
- tor_cert_free(id_cert);
- tor_cert_free(link_cert);
- tor_cert_free(auth_cert);
-#undef ERR
-}
-
-/** Process an AUTH_CHALLENGE cell from an OR connection.
- *
- * If we weren't supposed to get one (for example, because we're not the
- * originator of the connection), or it's ill-formed, or we aren't doing a v3
- * handshake, mark the connection. If the cell is well-formed but we don't
- * want to authenticate, just drop it. If the cell is well-formed *and* we
- * want to authenticate, send an AUTHENTICATE cell and then a NETINFO cell. */
-static void
-command_process_auth_challenge_cell(var_cell_t *cell, or_connection_t *conn)
+void
+command_setup_channel(channel_t *chan)
{
- int n_types, i, use_type = -1;
- uint8_t *cp;
-
-#define ERR(s) \
- do { \
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
- "Received a bad AUTH_CHALLENGE cell from %s:%d: %s", \
- safe_str(conn->_base.address), conn->_base.port, (s)); \
- connection_mark_for_close(TO_CONN(conn)); \
- return; \
- } while (0)
-
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
- ERR("We're not currently doing a v3 handshake");
- if (conn->link_proto < 3)
- ERR("We're not using link protocol >= 3");
- if (! conn->handshake_state->started_here)
- ERR("We didn't originate this connection");
- if (conn->handshake_state->received_auth_challenge)
- ERR("We already received one");
- if (! conn->handshake_state->received_certs_cell)
- ERR("We haven't gotten a CERTS cell yet");
- if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2)
- ERR("It was too short");
- if (cell->circ_id)
- ERR("It had a nonzero circuit ID");
-
- n_types = ntohs(get_uint16(cell->payload + OR_AUTH_CHALLENGE_LEN));
- if (cell->payload_len < OR_AUTH_CHALLENGE_LEN + 2 + 2*n_types)
- ERR("It looks truncated");
-
- /* Now see if there is an authentication type we can use */
- cp=cell->payload+OR_AUTH_CHALLENGE_LEN+2;
- for (i=0; i < n_types; ++i, cp += 2) {
- uint16_t authtype = ntohs(get_uint16(cp));
- if (authtype == AUTHTYPE_RSA_SHA256_TLSSECRET)
- use_type = authtype;
- }
-
- conn->handshake_state->received_auth_challenge = 1;
+ tor_assert(chan);
- if (! public_server_mode(get_options())) {
- /* If we're not a public server then we don't want to authenticate on a
- connection we originated, and we already sent a NETINFO cell when we
- got the CERTS cell. We have nothing more to do. */
- return;
- }
-
- if (use_type >= 0) {
- log_info(LD_OR, "Got an AUTH_CHALLENGE cell from %s:%d: Sending "
- "authentication",
- safe_str(conn->_base.address), conn->_base.port);
-
- if (connection_or_send_authenticate_cell(conn, use_type) < 0) {
- log_warn(LD_OR, "Couldn't send authenticate cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
- } else {
- log_info(LD_OR, "Got an AUTH_CHALLENGE cell from %s:%d, but we don't "
- "know any of its authentication types. Not authenticating.",
- safe_str(conn->_base.address), conn->_base.port);
- }
-
- if (connection_or_send_netinfo(conn) < 0) {
- log_warn(LD_OR, "Couldn't send netinfo cell");
- connection_mark_for_close(TO_CONN(conn));
- return;
- }
-
-#undef ERR
+ channel_set_cell_handlers(chan,
+ command_process_cell,
+ command_process_var_cell);
}
-/** Process an AUTHENTICATE cell from an OR connection.
- *
- * If it's ill-formed or we weren't supposed to get one or we're not doing a
- * v3 handshake, then mark the connection. If it does not authenticate the
- * other side of the connection successfully (because it isn't signed right,
- * we didn't get a CERTS cell, etc) mark the connection. Otherwise, accept
- * the identity of the router on the other side of the connection.
+/** Given a listener, install the right handler to process incoming
+ * channels on it.
*/
-static void
-command_process_authenticate_cell(var_cell_t *cell, or_connection_t *conn)
-{
- uint8_t expected[V3_AUTH_FIXED_PART_LEN];
- const uint8_t *auth;
- int authlen;
-
-#define ERR(s) \
- do { \
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL, \
- "Received a bad AUTHENTICATE cell from %s:%d: %s", \
- safe_str(conn->_base.address), conn->_base.port, (s)); \
- connection_mark_for_close(TO_CONN(conn)); \
- return; \
- } while (0)
-
- if (conn->_base.state != OR_CONN_STATE_OR_HANDSHAKING_V3)
- ERR("We're not doing a v3 handshake");
- if (conn->link_proto < 3)
- ERR("We're not using link protocol >= 3");
- if (conn->handshake_state->started_here)
- ERR("We originated this connection");
- if (conn->handshake_state->received_authenticate)
- ERR("We already got one!");
- if (conn->handshake_state->authenticated) {
- /* Should be impossible given other checks */
- ERR("The peer is already authenticated");
- }
- if (! conn->handshake_state->received_certs_cell)
- ERR("We never got a certs cell");
- if (conn->handshake_state->auth_cert == NULL)
- ERR("We never got an authentication certificate");
- if (conn->handshake_state->id_cert == NULL)
- ERR("We never got an identity certificate");
- if (cell->payload_len < 4)
- ERR("Cell was way too short");
-
- auth = cell->payload;
- {
- uint16_t type = ntohs(get_uint16(auth));
- uint16_t len = ntohs(get_uint16(auth+2));
- if (4 + len > cell->payload_len)
- ERR("Authenticator was truncated");
-
- if (type != AUTHTYPE_RSA_SHA256_TLSSECRET)
- ERR("Authenticator type was not recognized");
-
- auth += 4;
- authlen = len;
- }
-
- if (authlen < V3_AUTH_BODY_LEN + 1)
- ERR("Authenticator was too short");
-
- if (connection_or_compute_authenticate_cell_body(
- conn, expected, sizeof(expected), NULL, 1) < 0)
- ERR("Couldn't compute expected AUTHENTICATE cell body");
- if (tor_memneq(expected, auth, sizeof(expected)))
- ERR("Some field in the AUTHENTICATE cell body was not as expected");
-
- {
- crypto_pk_t *pk = tor_tls_cert_get_key(
- conn->handshake_state->auth_cert);
- char d[DIGEST256_LEN];
- char *signed_data;
- size_t keysize;
- int signed_len;
-
- if (!pk)
- ERR("Internal error: couldn't get RSA key from AUTH cert.");
- crypto_digest256(d, (char*)auth, V3_AUTH_BODY_LEN, DIGEST_SHA256);
-
- keysize = crypto_pk_keysize(pk);
- signed_data = tor_malloc(keysize);
- signed_len = crypto_pk_public_checksig(pk, signed_data, keysize,
- (char*)auth + V3_AUTH_BODY_LEN,
- authlen - V3_AUTH_BODY_LEN);
- crypto_pk_free(pk);
- if (signed_len < 0) {
- tor_free(signed_data);
- ERR("Signature wasn't valid");
- }
- if (signed_len < DIGEST256_LEN) {
- tor_free(signed_data);
- ERR("Not enough data was signed");
- }
- /* Note that we deliberately allow *more* than DIGEST256_LEN bytes here,
- * in case they're later used to hold a SHA3 digest or something. */
- if (tor_memneq(signed_data, d, DIGEST256_LEN)) {
- tor_free(signed_data);
- ERR("Signature did not match data to be signed.");
- }
- tor_free(signed_data);
- }
-
- /* Okay, we are authenticated. */
- conn->handshake_state->received_authenticate = 1;
- conn->handshake_state->authenticated = 1;
- conn->handshake_state->digest_received_data = 0;
- {
- crypto_pk_t *identity_rcvd =
- tor_tls_cert_get_key(conn->handshake_state->id_cert);
- const digests_t *id_digests =
- tor_cert_get_id_digests(conn->handshake_state->id_cert);
-
- /* This must exist; we checked key type when reading the cert. */
- tor_assert(id_digests);
-
- memcpy(conn->handshake_state->authenticated_peer_id,
- id_digests->d[DIGEST_SHA1], DIGEST_LEN);
-
- connection_or_set_circid_type(conn, identity_rcvd);
- crypto_pk_free(identity_rcvd);
-
- connection_or_init_conn_from_address(conn,
- &conn->_base.addr,
- conn->_base.port,
- (const char*)conn->handshake_state->authenticated_peer_id,
- 0);
-
- log_info(LD_OR, "Got an AUTHENTICATE cell from %s:%d: Looks good.",
- safe_str(conn->_base.address), conn->_base.port);
- }
+void
+command_setup_listener(channel_listener_t *listener)
+{
+ tor_assert(listener);
+ tor_assert(listener->state == CHANNEL_LISTENER_STATE_LISTENING);
-#undef ERR
+ channel_listener_set_listener_fn(listener, command_handle_incoming_channel);
}
diff --git a/src/or/command.h b/src/or/command.h
index 078ccc9f5..adea6adea 100644
--- a/src/or/command.h
+++ b/src/or/command.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,11 +9,17 @@
* \brief Header file for command.c.
**/
-#ifndef _TOR_COMMAND_H
-#define _TOR_COMMAND_H
+#ifndef TOR_COMMAND_H
+#define TOR_COMMAND_H
-void command_process_cell(cell_t *cell, or_connection_t *conn);
-void command_process_var_cell(var_cell_t *cell, or_connection_t *conn);
+#include "channel.h"
+
+void command_process_cell(channel_t *chan, cell_t *cell);
+void command_process_var_cell(channel_t *chan, var_cell_t *cell);
+void command_setup_channel(channel_t *chan);
+void command_setup_listener(channel_listener_t *chan_l);
+
+const char *cell_command_to_string(uint8_t command);
extern uint64_t stats_n_padding_cells_processed;
extern uint64_t stats_n_create_cells_processed;
diff --git a/src/or/config.c b/src/or/config.c
index 90a5dfbda..10df83975 100644
--- a/src/or/config.c
+++ b/src/or/config.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,32 +10,43 @@
**/
#define CONFIG_PRIVATE
-
#include "or.h"
+#include "addressmap.h"
+#include "channel.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
#include "control.h"
+#include "confparse.h"
#include "cpuworker.h"
#include "dirserv.h"
#include "dirvote.h"
#include "dns.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
#include "networkstatus.h"
+#include "nodelist.h"
#include "policies.h"
#include "relay.h"
#include "rendclient.h"
#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"
+#include "torgzip.h"
#ifdef _WIN32
#include <shlobj.h>
#endif
@@ -45,51 +56,9 @@
/* From main.c */
extern int quiet_level;
-/** Enumeration of types which option values can take */
-typedef enum config_type_t {
- CONFIG_TYPE_STRING = 0, /**< An arbitrary string. */
- CONFIG_TYPE_FILENAME, /**< A filename: some prefixes get expanded. */
- CONFIG_TYPE_UINT, /**< A non-negative integer less than MAX_INT */
- CONFIG_TYPE_INT, /**< Any integer. */
- CONFIG_TYPE_PORT, /**< A port from 1...65535, 0 for "not set", or
- * "auto". */
- CONFIG_TYPE_INTERVAL, /**< A number of seconds, with optional units*/
- CONFIG_TYPE_MSEC_INTERVAL,/**< A number of milliseconds, with optional
- * units */
- CONFIG_TYPE_MEMUNIT, /**< A number of bytes, with optional units*/
- CONFIG_TYPE_DOUBLE, /**< A floating-point value */
- CONFIG_TYPE_BOOL, /**< A boolean value, expressed as 0 or 1. */
- CONFIG_TYPE_AUTOBOOL, /**< A boolean+auto value, expressed 0 for false,
- * 1 for true, and -1 for auto */
- CONFIG_TYPE_ISOTIME, /**< An ISO-formatted time relative to GMT. */
- CONFIG_TYPE_CSV, /**< A list of strings, separated by commas and
- * optional whitespace. */
- CONFIG_TYPE_LINELIST, /**< Uninterpreted config lines */
- CONFIG_TYPE_LINELIST_S, /**< Uninterpreted, context-sensitive config lines,
- * mixed with other keywords. */
- CONFIG_TYPE_LINELIST_V, /**< Catch-all "virtual" option to summarize
- * context-sensitive config lines when fetching.
- */
- CONFIG_TYPE_ROUTERSET, /**< A list of router names, addrs, and fps,
- * parsed into a routerset_t. */
- CONFIG_TYPE_OBSOLETE, /**< Obsolete (ignored) option. */
-} config_type_t;
-
-/** An abbreviation for a configuration option allowed on the command line. */
-typedef struct config_abbrev_t {
- const char *abbreviated;
- const char *full;
- int commandline_only;
- int warn;
-} config_abbrev_t;
-
-/* Handy macro for declaring "In the config file or on the command line,
- * you can abbreviate <b>tok</b>s as <b>tok</b>". */
-#define PLURAL(tok) { #tok, #tok "s", 0, 0 }
-
/** A list of abbreviations and aliases to map command-line options, obsolete
* option names, or alternative option names, to their current values. */
-static config_abbrev_t _option_abbrevs[] = {
+static config_abbrev_t option_abbrevs_[] = {
PLURAL(AuthDirBadDirCC),
PLURAL(AuthDirBadExitCC),
PLURAL(AuthDirInvalidCC),
@@ -114,7 +83,9 @@ static config_abbrev_t _option_abbrevs[] = {
{ "BandwidthRateBytes", "BandwidthRate", 0, 0},
{ "BandwidthBurstBytes", "BandwidthBurst", 0, 0},
{ "DirFetchPostPeriod", "StatusFetchPeriod", 0, 0},
+ { "DirServer", "DirAuthority", 0, 0}, /* XXXX024 later, make this warn? */
{ "MaxConn", "ConnLimit", 0, 1},
+ { "MaxMemInCellQueues", "MaxMemInQueues", 0, 0},
{ "ORBindAddress", "ORListenAddress", 0, 0},
{ "DirBindAddress", "DirListenAddress", 0, 0},
{ "SocksBindAddress", "SocksListenAddress", 0, 0},
@@ -130,31 +101,11 @@ static config_abbrev_t _option_abbrevs[] = {
{ "HashedControlPassword", "__HashedControlSessionPassword", 1, 0},
{ "StrictEntryNodes", "StrictNodes", 0, 1},
{ "StrictExitNodes", "StrictNodes", 0, 1},
+ { "VirtualAddrNetwork", "VirtualAddrNetworkIPv4", 0, 0},
+ { "_UseFilteringSSLBufferevents", "UseFilteringSSLBufferevents", 0, 1},
{ NULL, NULL, 0, 0},
};
-/** A list of state-file "abbreviations," for compatibility. */
-static config_abbrev_t _state_abbrevs[] = {
- { "AccountingBytesReadInterval", "AccountingBytesReadInInterval", 0, 0 },
- { "HelperNode", "EntryGuard", 0, 0 },
- { "HelperNodeDownSince", "EntryGuardDownSince", 0, 0 },
- { "HelperNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
- { "EntryNode", "EntryGuard", 0, 0 },
- { "EntryNodeDownSince", "EntryGuardDownSince", 0, 0 },
- { "EntryNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
- { NULL, NULL, 0, 0},
-};
-#undef PLURAL
-
-/** A variable allowed in the configuration file or on the command line. */
-typedef struct config_var_t {
- const char *name; /**< The full keyword (case insensitive). */
- config_type_t type; /**< How to interpret the type and turn it into a
- * value. */
- off_t var_offset; /**< Offset of the corresponding member of or_options_t. */
- const char *initvalue; /**< String (or null) describing initial value. */
-} config_var_t;
-
/** An entry for config_vars: "The option <b>name</b> has type
* CONFIG_TYPE_<b>conftype</b>, and corresponds to
* or_options_t.<b>member</b>"
@@ -175,7 +126,7 @@ typedef struct config_var_t {
* abbreviations, order is significant, since the first matching option will
* be chosen first.
*/
-static config_var_t _option_vars[] = {
+static config_var_t option_vars_[] = {
OBSOLETE("AccountingMaxKB"),
V(AccountingMax, MEMUNIT, "0 bytes"),
V(AccountingStart, STRING, NULL),
@@ -187,7 +138,7 @@ static config_var_t _option_vars[] = {
V(AllowSingleHopExits, BOOL, "0"),
V(AlternateBridgeAuthority, LINELIST, NULL),
V(AlternateDirAuthority, LINELIST, NULL),
- V(AlternateHSAuthority, LINELIST, NULL),
+ OBSOLETE("AlternateHSAuthority"),
V(AssumeReachable, BOOL, "0"),
V(AuthDirBadDir, LINELIST, NULL),
V(AuthDirBadDirCCs, CSV, ""),
@@ -204,12 +155,13 @@ static config_var_t _option_vars[] = {
V(AuthDirListBadExits, BOOL, "0"),
V(AuthDirMaxServersPerAddr, UINT, "2"),
V(AuthDirMaxServersPerAuthAddr,UINT, "5"),
+ V(AuthDirHasIPv6Connectivity, BOOL, "0"),
VAR("AuthoritativeDirectory", BOOL, AuthoritativeDir, "0"),
V(AutomapHostsOnResolve, BOOL, "0"),
V(AutomapHostsSuffixes, CSV, ".onion,.exit"),
V(AvoidDiskWrites, BOOL, "0"),
- V(BandwidthBurst, MEMUNIT, "10 MB"),
- V(BandwidthRate, MEMUNIT, "5 MB"),
+ V(BandwidthBurst, MEMUNIT, "1 GB"),
+ V(BandwidthRate, MEMUNIT, "1 GB"),
V(BridgeAuthoritativeDir, BOOL, "0"),
VAR("Bridge", LINELIST, Bridges, NULL),
V(BridgePassword, STRING, NULL),
@@ -223,8 +175,10 @@ static config_var_t _option_vars[] = {
V(CircuitPriorityHalflife, DOUBLE, "-100.0"), /*negative:'Use default'*/
V(ClientDNSRejectInternalAddresses, BOOL,"1"),
V(ClientOnly, BOOL, "0"),
+ V(ClientPreferIPv6ORPort, BOOL, "0"),
V(ClientRejectInternalAddresses, BOOL, "1"),
V(ClientTransportPlugin, LINELIST, NULL),
+ V(ClientUseIPv6, BOOL, "0"),
V(ConsensusParams, STRING, NULL),
V(ConnLimit, UINT, "1000"),
V(ConnDirectionStatistics, BOOL, "0"),
@@ -257,14 +211,19 @@ static config_var_t _option_vars[] = {
OBSOLETE("DirRecordUsageRetainIPs"),
OBSOLETE("DirRecordUsageSaveInterval"),
V(DirReqStatistics, BOOL, "1"),
- VAR("DirServer", LINELIST, DirServers, NULL),
+ VAR("DirAuthority", LINELIST, DirAuthorities, NULL),
+ V(DirAuthorityFallbackRate, DOUBLE, "1.0"),
V(DisableAllSwap, BOOL, "0"),
V(DisableDebuggerAttachment, BOOL, "1"),
V(DisableIOCP, BOOL, "1"),
+ OBSOLETE("DisableV2DirectoryInfo_"),
V(DynamicDHGroups, BOOL, "0"),
VPORT(DNSPort, LINELIST, NULL),
V(DNSListenAddress, LINELIST, NULL),
V(DownloadExtraInfo, BOOL, "0"),
+ V(TestingEnableConnBwEvent, BOOL, "0"),
+ V(TestingEnableCellStatsEvent, BOOL, "0"),
+ V(TestingEnableTbEmptyEvent, BOOL, "0"),
V(EnforceDistinctSubnets, BOOL, "1"),
V(EntryNodes, ROUTERSET, NULL),
V(EntryStatistics, BOOL, "0"),
@@ -277,31 +236,34 @@ static config_var_t _option_vars[] = {
V(ExitPolicyRejectPrivate, BOOL, "1"),
V(ExitPortStatistics, BOOL, "0"),
V(ExtendAllowPrivateAddresses, BOOL, "0"),
+ VPORT(ExtORPort, LINELIST, NULL),
+ V(ExtORPortCookieAuthFile, STRING, NULL),
V(ExtraInfoStatistics, BOOL, "1"),
+ V(FallbackDir, LINELIST, NULL),
-#if defined (WINCE)
- V(FallbackNetworkstatusFile, FILENAME, "fallback-consensus"),
-#else
- V(FallbackNetworkstatusFile, FILENAME,
- SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "fallback-consensus"),
-#endif
+ OBSOLETE("FallbackNetworkstatusFile"),
V(FascistFirewall, BOOL, "0"),
V(FirewallPorts, CSV, ""),
- V(FastFirstHopPK, BOOL, "1"),
+ V(FastFirstHopPK, AUTOBOOL, "auto"),
V(FetchDirInfoEarly, BOOL, "0"),
V(FetchDirInfoExtraEarly, BOOL, "0"),
V(FetchServerDescriptors, BOOL, "1"),
V(FetchHidServDescriptors, BOOL, "1"),
V(FetchUselessDescriptors, BOOL, "0"),
- V(FetchV2Networkstatus, BOOL, "0"),
+ OBSOLETE("FetchV2Networkstatus"),
+ V(GeoIPExcludeUnknown, AUTOBOOL, "auto"),
#ifdef _WIN32
V(GeoIPFile, FILENAME, "<default>"),
+ V(GeoIPv6File, FILENAME, "<default>"),
#else
V(GeoIPFile, FILENAME,
SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip"),
+ V(GeoIPv6File, FILENAME,
+ SHARE_DATADIR PATH_SEPARATOR "tor" PATH_SEPARATOR "geoip6"),
#endif
OBSOLETE("GiveGuardFlagTo_CVE_2011_2768_VulnerableRelays"),
OBSOLETE("Group"),
+ V(GuardLifetime, INTERVAL, "0 minutes"),
V(HardwareAccel, BOOL, "0"),
V(HeartbeatPeriod, INTERVAL, "6 hours"),
V(AccelName, STRING, NULL),
@@ -316,7 +278,7 @@ static config_var_t _option_vars[] = {
VAR("HiddenServiceVersion",LINELIST_S, RendConfigLines, NULL),
VAR("HiddenServiceAuthorizeClient",LINELIST_S,RendConfigLines, NULL),
V(HidServAuth, LINELIST, NULL),
- V(HSAuthoritativeDir, BOOL, "0"),
+ OBSOLETE("HSAuthoritativeDir"),
OBSOLETE("HSAuthorityRecordStats"),
V(CloseHSClientCircuitsImmediatelyOnTimeout, BOOL, "0"),
V(CloseHSServiceRendCircuitsImmediatelyOnTimeout, BOOL, "0"),
@@ -324,7 +286,10 @@ static config_var_t _option_vars[] = {
V(HTTPProxyAuthenticator, STRING, NULL),
V(HTTPSProxy, STRING, NULL),
V(HTTPSProxyAuthenticator, STRING, NULL),
+ 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),
@@ -343,7 +308,10 @@ static config_var_t _option_vars[] = {
V(MaxAdvertisedBandwidth, MEMUNIT, "1 GB"),
V(MaxCircuitDirtiness, INTERVAL, "10 minutes"),
V(MaxClientCircuitsPending, UINT, "32"),
- V(MaxOnionsPending, UINT, "100"),
+ VAR("MaxMemInQueues", MEMUNIT, MaxMemInQueues_raw, "0"),
+ OBSOLETE("MaxOnionsPending"),
+ V(MaxOnionQueueDelay, MSEC_INTERVAL, "1750 msec"),
+ V(MinMeasuredBWsForAuthToIgnoreAdvertised, INT, "500"),
OBSOLETE("MonthlyAccountingStart"),
V(MyFamily, STRING, NULL),
V(NewCircuitPeriod, INTERVAL, "30 seconds"),
@@ -351,30 +319,45 @@ static config_var_t _option_vars[] = {
V(NATDListenAddress, LINELIST, NULL),
VPORT(NATDPort, LINELIST, NULL),
V(Nickname, STRING, NULL),
+ V(PredictedPortsRelevanceTime, INTERVAL, "1 hour"),
V(WarnUnsafeSocks, BOOL, "1"),
OBSOLETE("NoPublish"),
VAR("NodeFamily", LINELIST, NodeFamilies, NULL),
V(NumCPUs, UINT, "0"),
+ V(NumDirectoryGuards, UINT, "0"),
V(NumEntryGuards, UINT, "3"),
V(ORListenAddress, LINELIST, NULL),
VPORT(ORPort, LINELIST, NULL),
- V(OutboundBindAddress, STRING, NULL),
+ V(OutboundBindAddress, LINELIST, NULL),
+ OBSOLETE("PathBiasDisableRate"),
V(PathBiasCircThreshold, INT, "-1"),
V(PathBiasNoticeRate, DOUBLE, "-1"),
- V(PathBiasDisableRate, DOUBLE, "-1"),
+ V(PathBiasWarnRate, DOUBLE, "-1"),
+ V(PathBiasExtremeRate, DOUBLE, "-1"),
V(PathBiasScaleThreshold, INT, "-1"),
- V(PathBiasScaleFactor, INT, "-1"),
+ OBSOLETE("PathBiasScaleFactor"),
+ OBSOLETE("PathBiasMultFactor"),
+ V(PathBiasDropGuards, AUTOBOOL, "0"),
+ OBSOLETE("PathBiasUseCloseCounts"),
+
+ V(PathBiasUseThreshold, INT, "-1"),
+ V(PathBiasNoticeUseRate, DOUBLE, "-1"),
+ V(PathBiasExtremeUseRate, DOUBLE, "-1"),
+ V(PathBiasScaleUseThreshold, INT, "-1"),
+ V(PathsNeededToBuildCircuits, DOUBLE, "-1"),
OBSOLETE("PathlenCoinWeight"),
V(PerConnBWBurst, MEMUNIT, "0"),
V(PerConnBWRate, MEMUNIT, "0"),
V(PidFile, STRING, NULL),
V(TestingTorNetwork, BOOL, "0"),
+ V(TestingMinExitFlagThreshold, MEMUNIT, "0"),
+ V(TestingMinFastFlagThreshold, MEMUNIT, "0"),
V(OptimisticData, AUTOBOOL, "auto"),
V(PortForwarding, BOOL, "0"),
V(PortForwardingHelper, FILENAME, "tor-fw-helper"),
- V(PreferTunneledDirConns, BOOL, "1"),
+ OBSOLETE("PreferTunneledDirConns"),
V(ProtocolWarnings, BOOL, "0"),
V(PublishServerDescriptor, CSV, "1"),
V(PublishHidServDescriptors, BOOL, "1"),
@@ -397,6 +380,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"),
@@ -412,31 +396,38 @@ static config_var_t _option_vars[] = {
V(SocksPolicy, LINELIST, NULL),
VPORT(SocksPort, LINELIST, NULL),
V(SocksTimeout, INTERVAL, "2 minutes"),
+ V(SSLKeyLifetime, INTERVAL, "0"),
OBSOLETE("StatusFetchPeriod"),
V(StrictNodes, BOOL, "0"),
+ V(Support022HiddenServices, AUTOBOOL, "auto"),
OBSOLETE("SysLog"),
V(TestSocks, BOOL, "0"),
OBSOLETE("TestVia"),
V(TokenBucketRefillInterval, MSEC_INTERVAL, "100 msec"),
V(Tor2webMode, BOOL, "0"),
+ V(TLSECGroup, STRING, NULL),
V(TrackHostExits, CSV, NULL),
V(TrackHostExitsExpire, INTERVAL, "30 minutes"),
OBSOLETE("TrafficShaping"),
V(TransListenAddress, LINELIST, NULL),
VPORT(TransPort, LINELIST, NULL),
- V(TunnelDirConns, BOOL, "1"),
+ V(TransProxyType, STRING, "default"),
+ OBSOLETE("TunnelDirConns"),
V(UpdateBridgesFromAuthority, BOOL, "0"),
V(UseBridges, BOOL, "0"),
V(UseEntryGuards, BOOL, "1"),
+ V(UseEntryGuardsAsDirGuards, BOOL, "1"),
V(UseMicrodescriptors, AUTOBOOL, "auto"),
+ V(UseNTorHandshake, AUTOBOOL, "1"),
V(User, STRING, NULL),
V(UserspaceIOCPBuffers, BOOL, "0"),
- VAR("V1AuthoritativeDirectory",BOOL, V1AuthoritativeDir, "0"),
- VAR("V2AuthoritativeDirectory",BOOL, V2AuthoritativeDir, "0"),
+ OBSOLETE("V1AuthoritativeDirectory"),
+ OBSOLETE("V2AuthoritativeDirectory"),
VAR("V3AuthoritativeDirectory",BOOL, V3AuthoritativeDir, "0"),
V(TestingV3AuthInitialVotingInterval, INTERVAL, "30 minutes"),
V(TestingV3AuthInitialVoteDelay, INTERVAL, "5 minutes"),
V(TestingV3AuthInitialDistDelay, INTERVAL, "5 minutes"),
+ V(TestingV3AuthVotingStartOffset, INTERVAL, "0"),
V(V3AuthVotingInterval, INTERVAL, "1 hour"),
V(V3AuthVoteDelay, INTERVAL, "5 minutes"),
V(V3AuthDistDelay, INTERVAL, "5 minutes"),
@@ -444,9 +435,10 @@ static config_var_t _option_vars[] = {
V(V3AuthUseLegacyKey, BOOL, "0"),
V(V3BandwidthsFile, FILENAME, NULL),
VAR("VersioningAuthoritativeDirectory",BOOL,VersioningAuthoritativeDir, "0"),
- V(VirtualAddrNetwork, STRING, "127.192.0.0/10"),
+ V(VirtualAddrNetworkIPv4, STRING, "127.192.0.0/10"),
+ V(VirtualAddrNetworkIPv6, STRING, "[FE80::]/10"),
V(WarnPlaintextPorts, CSV, "23,109,110,143"),
- V(_UseFilteringSSLBufferevents, BOOL, "0"),
+ V(UseFilteringSSLBufferevents, BOOL, "0"),
VAR("__ReloadTorrcOnSIGHUP", BOOL, ReloadTorrcOnSIGHUP, "1"),
VAR("__AllDirActionsPrivate", BOOL, AllDirActionsPrivate, "0"),
VAR("__DisablePredictedCircuits",BOOL,DisablePredictedCircuits, "0"),
@@ -456,7 +448,25 @@ static config_var_t _option_vars[] = {
VAR("__OwningControllerProcess",STRING,OwningControllerProcess, NULL),
V(MinUptimeHidServDirectoryV2, INTERVAL, "25 hours"),
V(VoteOnHidServDirectoriesV2, BOOL, "1"),
- V(_UsingTestNetworkDefaults, BOOL, "0"),
+ V(TestingServerDownloadSchedule, CSV_INTERVAL, "0, 0, 0, 60, 60, 120, "
+ "300, 900, 2147483647"),
+ V(TestingClientDownloadSchedule, CSV_INTERVAL, "0, 0, 60, 300, 600, "
+ "2147483647"),
+ V(TestingServerConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 60, "
+ "300, 600, 1800, 1800, 1800, 1800, "
+ "1800, 3600, 7200"),
+ V(TestingClientConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 60, "
+ "300, 600, 1800, 3600, 3600, 3600, "
+ "10800, 21600, 43200"),
+ V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "3600, 900, 900, 3600"),
+ V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "10 minutes"),
+ V(TestingDirConnectionMaxStall, INTERVAL, "5 minutes"),
+ V(TestingConsensusMaxDownloadTries, UINT, "8"),
+ V(TestingDescriptorMaxDownloadTries, UINT, "8"),
+ V(TestingMicrodescMaxDownloadTries, UINT, "8"),
+ V(TestingCertMaxDownloadTries, UINT, "8"),
+ V(TestingDirAuthVoteGuard, ROUTERSET, NULL),
+ VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "0"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
};
@@ -481,133 +491,40 @@ static const config_var_t testing_tor_network_defaults[] = {
V(TestingV3AuthInitialVotingInterval, INTERVAL, "5 minutes"),
V(TestingV3AuthInitialVoteDelay, INTERVAL, "20 seconds"),
V(TestingV3AuthInitialDistDelay, INTERVAL, "20 seconds"),
+ V(TestingV3AuthVotingStartOffset, INTERVAL, "0"),
V(TestingAuthDirTimeToLearnReachability, INTERVAL, "0 minutes"),
V(TestingEstimatedDescriptorPropagationTime, INTERVAL, "0 minutes"),
V(MinUptimeHidServDirectoryV2, INTERVAL, "0 minutes"),
- V(_UsingTestNetworkDefaults, BOOL, "1"),
+ V(TestingServerDownloadSchedule, CSV_INTERVAL, "0, 0, 0, 5, 10, 15, "
+ "20, 30, 60"),
+ V(TestingClientDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, 15, 20, "
+ "30, 60"),
+ V(TestingServerConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, "
+ "15, 20, 30, 60"),
+ V(TestingClientConsensusDownloadSchedule, CSV_INTERVAL, "0, 0, 5, 10, "
+ "15, 20, 30, 60"),
+ V(TestingBridgeDownloadSchedule, CSV_INTERVAL, "60, 30, 30, 60"),
+ V(TestingClientMaxIntervalWithoutRequest, INTERVAL, "5 seconds"),
+ V(TestingDirConnectionMaxStall, INTERVAL, "30 seconds"),
+ V(TestingConsensusMaxDownloadTries, UINT, "80"),
+ V(TestingDescriptorMaxDownloadTries, UINT, "80"),
+ V(TestingMicrodescMaxDownloadTries, UINT, "80"),
+ V(TestingCertMaxDownloadTries, UINT, "80"),
+ V(TestingEnableConnBwEvent, BOOL, "1"),
+ V(TestingEnableCellStatsEvent, BOOL, "1"),
+ V(TestingEnableTbEmptyEvent, BOOL, "1"),
+ VAR("___UsingTestNetworkDefaults", BOOL, UsingTestNetworkDefaults_, "1"),
{ NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
};
-#undef VAR
-
-#define VAR(name,conftype,member,initvalue) \
- { name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_state_t, member), \
- initvalue }
-
-/** Array of "state" variables saved to the ~/.tor/state file. */
-static config_var_t _state_vars[] = {
- /* Remember to document these in state-contents.txt ! */
-
- V(AccountingBytesReadInInterval, MEMUNIT, NULL),
- V(AccountingBytesWrittenInInterval, MEMUNIT, NULL),
- V(AccountingExpectedUsage, MEMUNIT, NULL),
- V(AccountingIntervalStart, ISOTIME, NULL),
- V(AccountingSecondsActive, INTERVAL, NULL),
- V(AccountingSecondsToReachSoftLimit,INTERVAL, NULL),
- V(AccountingSoftLimitHitAt, ISOTIME, NULL),
- V(AccountingBytesAtSoftLimit, MEMUNIT, NULL),
-
- VAR("EntryGuard", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardUnlistedSince", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardAddedBy", LINELIST_S, EntryGuards, NULL),
- VAR("EntryGuardPathBias", LINELIST_S, EntryGuards, NULL),
- V(EntryGuards, LINELIST_V, NULL),
-
- VAR("TransportProxy", LINELIST_S, TransportProxies, NULL),
- V(TransportProxies, LINELIST_V, NULL),
-
- V(BWHistoryReadEnds, ISOTIME, NULL),
- V(BWHistoryReadInterval, UINT, "900"),
- V(BWHistoryReadValues, CSV, ""),
- V(BWHistoryReadMaxima, CSV, ""),
- V(BWHistoryWriteEnds, ISOTIME, NULL),
- V(BWHistoryWriteInterval, UINT, "900"),
- V(BWHistoryWriteValues, CSV, ""),
- V(BWHistoryWriteMaxima, CSV, ""),
- V(BWHistoryDirReadEnds, ISOTIME, NULL),
- V(BWHistoryDirReadInterval, UINT, "900"),
- V(BWHistoryDirReadValues, CSV, ""),
- V(BWHistoryDirReadMaxima, CSV, ""),
- V(BWHistoryDirWriteEnds, ISOTIME, NULL),
- V(BWHistoryDirWriteInterval, UINT, "900"),
- V(BWHistoryDirWriteValues, CSV, ""),
- V(BWHistoryDirWriteMaxima, CSV, ""),
-
- V(TorVersion, STRING, NULL),
-
- V(LastRotatedOnionKey, ISOTIME, NULL),
- V(LastWritten, ISOTIME, NULL),
-
- V(TotalBuildTimes, UINT, NULL),
- V(CircuitBuildAbandonedCount, UINT, "0"),
- VAR("CircuitBuildTimeBin", LINELIST_S, BuildtimeHistogram, NULL),
- VAR("BuildtimeHistogram", LINELIST_V, BuildtimeHistogram, NULL),
- { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
-};
#undef VAR
#undef V
#undef OBSOLETE
-/** Represents an English description of a configuration variable; used when
- * generating configuration file comments. */
-typedef struct config_var_description_t {
- const char *name;
- const char *description;
-} config_var_description_t;
-
-/** Type of a callback to validate whether a given configuration is
- * well-formed and consistent. See options_trial_assign() for documentation
- * of arguments. */
-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 {
- 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. */
- off_t magic_offset; /**< Offset of the magic value within the struct. */
- config_abbrev_t *abbrevs; /**< List of abbreviations that we expand when
- * parsing this format. */
- config_var_t *vars; /**< List of variables we recognize, their default
- * values, and where we stick them in the structure. */
- validate_fn_t validate_fn; /**< Function to validate config. */
- /** If present, extra is a LINELIST variable for unrecognized
- * lines. Otherwise, unrecognized lines are an error. */
- config_var_t *extra;
-} config_format_t;
-
-/** Macro: assert that <b>cfg</b> has the right magic field for format
- * <b>fmt</b>. */
-#define CHECK(fmt, cfg) STMT_BEGIN \
- tor_assert(fmt && cfg); \
- tor_assert((fmt)->magic == \
- *(uint32_t*)STRUCT_VAR_P(cfg,fmt->magic_offset)); \
- STMT_END
-
#ifdef _WIN32
static char *get_windows_conf_root(void);
#endif
-static void config_line_append(config_line_t **lst,
- const char *key, const char *val);
-static void option_clear(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var);
-static void option_reset(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var, int use_defaults);
-static void config_free(const config_format_t *fmt, void *options);
-static int config_lines_eq(config_line_t *a, config_line_t *b);
-static int config_count_key(const config_line_t *a, const char *key);
-static int option_is_same(const config_format_t *fmt,
- const or_options_t *o1, const or_options_t *o2,
- const char *name);
-static or_options_t *options_dup(const config_format_t *fmt,
- const or_options_t *old);
-static int options_validate(or_options_t *old_options,
- or_options_t *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,
@@ -617,15 +534,20 @@ static int options_transition_affects_workers(
const or_options_t *old_options, const or_options_t *new_options);
static int options_transition_affects_descriptor(
const or_options_t *old_options, const or_options_t *new_options);
-static int check_nickname_list(const char *lst, const char *name, char **msg);
+static int check_nickname_list(char **lst, const char *name, char **msg);
-static int parse_bridge_line(const char *line, int validate_only);
-static int parse_client_transport_line(const char *line, int validate_only);
+static int parse_client_transport_line(const or_options_t *options,
+ const char *line, int validate_only);
-static int parse_server_transport_line(const char *line, int validate_only);
-static int parse_dir_server_line(const char *line,
+static int parse_server_transport_line(const or_options_t *options,
+ const char *line, int validate_only);
+static char *get_bindaddr_from_transport_listen_line(const char *line,
+ const char *transport);
+static int parse_dir_authority_line(const char *line,
dirinfo_type_t required_type,
int validate_only);
+static int parse_dir_fallback_line(const char *line,
+ int validate_only);
static void port_cfg_free(port_cfg_t *port);
static int parse_ports(or_options_t *options, int validate_only,
char **msg_out, int *n_ports_out);
@@ -635,55 +557,34 @@ static int check_server_ports(const smartlist_t *ports,
static int validate_data_directory(or_options_t *options);
static int write_configuration_file(const char *fname,
const or_options_t *options);
-static config_line_t *get_assigned_option(const config_format_t *fmt,
- const void *options, const char *key,
- int escape_val);
-static void config_init(const config_format_t *fmt, void *options);
-static int or_state_validate(or_state_t *old_options, or_state_t *options,
- int from_setconf, char **msg);
-static int or_state_load(void);
static int options_init_logs(or_options_t *options, int validate_only);
-static uint64_t config_parse_memunit(const char *s, int *ok);
-static int config_parse_msec_interval(const char *s, int *ok);
-static int config_parse_interval(const char *s, int *ok);
static void init_libevent(const or_options_t *options);
static int opt_streq(const char *s1, const char *s2);
+static int parse_outbound_addresses(or_options_t *options, int validate_only,
+ char **msg);
+static void config_maybe_load_geoip_files_(const or_options_t *options,
+ const or_options_t *old_options);
+static int options_validate_cb(void *old_options, void *options,
+ void *default_options,
+ int from_setconf, char **msg);
+static uint64_t compute_real_max_mem_in_queues(const uint64_t val,
+ int log_guess);
/** Magic value for or_options_t. */
#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),
- _option_abbrevs,
- _option_vars,
- (validate_fn_t)options_validate,
+ STRUCT_OFFSET(or_options_t, magic_),
+ option_abbrevs_,
+ option_vars_,
+ options_validate_cb,
NULL
};
-/** Magic value for or_state_t. */
-#define OR_STATE_MAGIC 0x57A73f57
-
-/** "Extra" variable in the state that receives lines we can't parse. This
- * lets us preserve options from versions of Tor newer than us. */
-static config_var_t state_extra_var = {
- "__extra", CONFIG_TYPE_LINELIST, STRUCT_OFFSET(or_state_t, ExtraLines), NULL
-};
-
-/** Configuration format for or_state_t. */
-static const config_format_t state_format = {
- sizeof(or_state_t),
- OR_STATE_MAGIC,
- STRUCT_OFFSET(or_state_t, _magic),
- _state_abbrevs,
- _state_vars,
- (validate_fn_t)or_state_validate,
- &state_extra_var,
-};
-
/*
* Functions to read and write the global options pointer.
*/
@@ -697,10 +598,12 @@ static or_options_t *global_default_options = NULL;
static char *torrc_fname = NULL;
/** Name of the most recently read torrc-defaults file.*/
static char *torrc_defaults_fname;
-/** Persistent serialized state. */
-static or_state_t *global_state = NULL;
-/** Configuration Options set by command line. */
+/** Configuration options set by command line. */
static config_line_t *global_cmdline_options = NULL;
+/** Non-configuration options set by the command line */
+static config_line_t *global_cmdline_only_options = NULL;
+/** Boolean: Have we parsed the command line? */
+static int have_parsed_cmdline = 0;
/** Contents of most recently read DirPortFrontPage file. */
static char *global_dirfrontpagecontents = NULL;
/** List of port_cfg_t for all configured ports. */
@@ -713,16 +616,6 @@ get_dirportfrontpage(void)
return global_dirfrontpagecontents;
}
-/** Allocate an empty configuration object of a given format type. */
-static void *
-config_alloc(const config_format_t *fmt)
-{
- void *opts = tor_malloc_zero(fmt->size);
- *(uint32_t*)STRUCT_VAR_P(opts, fmt->magic_offset) = fmt->magic;
- CHECK(fmt, opts);
- return opts;
-}
-
/** Return the currently configured options. */
or_options_t *
get_options_mutable(void)
@@ -732,8 +625,8 @@ get_options_mutable(void)
}
/** Returns the currently configured options */
-const or_options_t *
-get_options(void)
+MOCK_IMPL(const or_options_t *,
+get_options,(void))
{
return get_options_mutable();
}
@@ -773,21 +666,26 @@ set_options(or_options_t *new_val, char **msg)
var->type == CONFIG_TYPE_OBSOLETE) {
continue;
}
- if (!option_is_same(&options_format, new_val, old_options, var_name)) {
- line = get_assigned_option(&options_format, new_val, var_name, 1);
+ if (!config_is_same(&options_format, new_val, old_options, var_name)) {
+ line = config_get_assigned_option(&options_format, new_val,
+ var_name, 1);
if (line) {
- for (; line; line = line->next) {
+ config_line_t *next;
+ for (; line; line = next) {
+ next = line->next;
smartlist_add(elements, line->key);
smartlist_add(elements, line->value);
+ tor_free(line);
}
} else {
- smartlist_add(elements, (char*)options_format.vars[i].name);
+ smartlist_add(elements, tor_strdup(options_format.vars[i].name));
smartlist_add(elements, NULL);
}
}
}
control_event_conf_changed(elements);
+ SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
smartlist_free(elements);
}
@@ -837,19 +735,20 @@ get_short_version(void)
/** Release additional memory allocated in options
*/
-static void
+STATIC void
or_options_free(or_options_t *options)
{
if (!options)
return;
- routerset_free(options->_ExcludeExitNodesUnion);
+ routerset_free(options->ExcludeExitNodesUnion_);
if (options->NodeFamilySets) {
SMARTLIST_FOREACH(options->NodeFamilySets, routerset_t *,
rs, routerset_free(rs));
smartlist_free(options->NodeFamilySets);
}
- tor_free(options->_BridgePassword_AuthDigest);
+ tor_free(options->BridgePassword_AuthDigest_);
+ tor_free(options->command_arg);
config_free(&options_format, options);
}
@@ -863,15 +762,15 @@ config_free_all(void)
or_options_free(global_default_options);
global_default_options = NULL;
- config_free(&state_format, global_state);
- global_state = NULL;
-
config_free_lines(global_cmdline_options);
global_cmdline_options = NULL;
+ config_free_lines(global_cmdline_only_options);
+ global_cmdline_only_options = NULL;
+
if (configured_ports) {
SMARTLIST_FOREACH(configured_ports,
- port_cfg_t *, p, tor_free(p));
+ port_cfg_t *, p, port_cfg_free(p));
smartlist_free(configured_ports);
configured_ports = NULL;
}
@@ -880,6 +779,9 @@ config_free_all(void)
tor_free(torrc_defaults_fname);
tor_free(the_tor_version);
tor_free(global_dirfrontpagecontents);
+
+ tor_free(the_short_tor_version);
+ tor_free(the_tor_version);
}
/** Make <b>address</b> -- a piece of information related to our operation as
@@ -892,7 +794,7 @@ const char *
safe_str_client(const char *address)
{
tor_assert(address);
- if (get_options()->_SafeLogging == SAFELOG_SCRUB_ALL)
+ if (get_options()->SafeLogging_ == SAFELOG_SCRUB_ALL)
return "[scrubbed]";
else
return address;
@@ -909,7 +811,7 @@ const char *
safe_str(const char *address)
{
tor_assert(address);
- if (get_options()->_SafeLogging != SAFELOG_SCRUB_NONE)
+ if (get_options()->SafeLogging_ != SAFELOG_SCRUB_NONE)
return "[scrubbed]";
else
return address;
@@ -921,7 +823,7 @@ safe_str(const char *address)
const char *
escaped_safe_str_client(const char *address)
{
- if (get_options()->_SafeLogging == SAFELOG_SCRUB_ALL)
+ if (get_options()->SafeLogging_ == SAFELOG_SCRUB_ALL)
return "[scrubbed]";
else
return escaped(address);
@@ -933,7 +835,7 @@ escaped_safe_str_client(const char *address)
const char *
escaped_safe_str(const char *address)
{
- if (get_options()->_SafeLogging != SAFELOG_SCRUB_NONE)
+ if (get_options()->SafeLogging_ != SAFELOG_SCRUB_NONE)
return "[scrubbed]";
else
return escaped(address);
@@ -945,39 +847,56 @@ static void
add_default_trusted_dir_authorities(dirinfo_type_t type)
{
int i;
- const char *dirservers[] = {
- "moria1 orport=9101 no-v2 "
+ const char *authorities[] = {
+ "moria1 orport=9101 "
"v3ident=D586D18309DED4CD6D57C18FDB97EFA96D330566 "
"128.31.0.39:9131 9695 DFC3 5FFE B861 329B 9F1A B04C 4639 7020 CE31",
- "tor26 v1 orport=443 v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
+ "tor26 orport=443 v3ident=14C131DFC5C6F93646BE72FA1401C02A8DF2E8B4 "
"86.59.21.38:80 847B 1F85 0344 D787 6491 A548 92F9 0493 4E4E B85D",
"dizum orport=443 v3ident=E8A9C45EDE6D711294FADF8E7951F4DE6CA56B58 "
"194.109.206.212:80 7EA6 EAD6 FD83 083C 538F 4403 8BBF A077 587D D755",
- "Tonga orport=443 bridge no-v2 82.94.251.203:80 "
+ "Tonga orport=443 bridge 82.94.251.203:80 "
"4A0C CD2D DC79 9508 3D73 F5D6 6710 0C8A 5831 F16D",
- "turtles orport=9090 no-v2 "
+ "turtles orport=9090 "
"v3ident=27B6B5996C426270A5C95488AA5BCEB6BCC86956 "
"76.73.17.194:9030 F397 038A DC51 3361 35E7 B80B D99C A384 4360 292B",
- "gabelmoo orport=443 no-v2 "
+ "gabelmoo orport=443 "
"v3ident=ED03BB616EB2F60BEC80151114BB25CEF515B226 "
"212.112.245.170:80 F204 4413 DAC2 E02E 3D6B CF47 35A1 9BCA 1DE9 7281",
- "dannenberg orport=443 no-v2 "
+ "dannenberg orport=443 "
"v3ident=585769C78764D58426B8B52B6651A5A71137189A "
"193.23.244.244:80 7BE6 83E6 5D48 1413 21C5 ED92 F075 C553 64AC 7123",
- "urras orport=80 no-v2 v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
+ "urras orport=80 v3ident=80550987E1D626E3EBA5E5E75A458DE0626D088C "
"208.83.223.34:443 0AD3 FA88 4D18 F89E EA2D 89C0 1937 9E0E 7FD9 4417",
- "maatuska orport=80 no-v2 "
+ "maatuska orport=80 "
"v3ident=49015F787433103580E3B66A1707A00E60F2D15B "
"171.25.193.9:443 BD6A 8292 55CB 08E6 6FBE 7D37 4836 3586 E46B 3810",
- "Faravahar orport=443 no-v2 "
+ "Faravahar orport=443 "
"v3ident=EFCBE720AB3A82B99F9E953CD5BF50F7EEFC7B97 "
"154.35.32.5:80 CF6D 0AAF B385 BE71 B8E1 11FC 5CFF 4B47 9237 33BC",
NULL
};
- for (i=0; dirservers[i]; i++) {
- if (parse_dir_server_line(dirservers[i], type, 0)<0) {
- log_err(LD_BUG, "Couldn't parse internal dirserver line %s",
- dirservers[i]);
+ for (i=0; authorities[i]; i++) {
+ if (parse_dir_authority_line(authorities[i], type, 0)<0) {
+ log_err(LD_BUG, "Couldn't parse internal DirAuthority line %s",
+ authorities[i]);
+ }
+ }
+}
+
+/** Add the default fallback directory servers into the fallback directory
+ * server list. */
+static void
+add_default_fallback_dir_servers(void)
+{
+ int i;
+ const char *fallback[] = {
+ NULL
+ };
+ for (i=0; fallback[i]; i++) {
+ if (parse_dir_fallback_line(fallback[i], 0)<0) {
+ log_err(LD_BUG, "Couldn't parse internal FallbackDir line %s",
+ fallback[i]);
}
}
}
@@ -987,28 +906,28 @@ add_default_trusted_dir_authorities(dirinfo_type_t type)
* user if we changed any dangerous ones.
*/
static int
-validate_dir_authorities(or_options_t *options, or_options_t *old_options)
+validate_dir_servers(or_options_t *options, or_options_t *old_options)
{
config_line_t *cl;
- if (options->DirServers &&
- (options->AlternateDirAuthority || options->AlternateBridgeAuthority ||
- options->AlternateHSAuthority)) {
+ if (options->DirAuthorities &&
+ (options->AlternateDirAuthority || options->AlternateBridgeAuthority)) {
log_warn(LD_CONFIG,
- "You cannot set both DirServers and Alternate*Authority.");
+ "You cannot set both DirAuthority and Alternate*Authority.");
return -1;
}
/* do we want to complain to the user about being partitionable? */
- if ((options->DirServers &&
+ if ((options->DirAuthorities &&
(!old_options ||
- !config_lines_eq(options->DirServers, old_options->DirServers))) ||
+ !config_lines_eq(options->DirAuthorities,
+ old_options->DirAuthorities))) ||
(options->AlternateDirAuthority &&
(!old_options ||
!config_lines_eq(options->AlternateDirAuthority,
old_options->AlternateDirAuthority)))) {
log_warn(LD_CONFIG,
- "You have used DirServer or AlternateDirAuthority to "
+ "You have used DirAuthority or AlternateDirAuthority to "
"specify alternate directory authorities in "
"your configuration. This is potentially dangerous: it can "
"make you look different from all other Tor users, and hurt "
@@ -1019,17 +938,17 @@ validate_dir_authorities(or_options_t *options, or_options_t *old_options)
/* Now go through the four ways you can configure an alternate
* set of directory authorities, and make sure none are broken. */
- for (cl = options->DirServers; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ for (cl = options->DirAuthorities; cl; cl = cl->next)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 1)<0)
return -1;
for (cl = options->AlternateBridgeAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 1)<0)
return -1;
for (cl = options->AlternateDirAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 1)<0)
return -1;
- for (cl = options->AlternateHSAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 1)<0)
+ for (cl = options->FallbackDir; cl; cl = cl->next)
+ if (parse_dir_fallback_line(cl->value, 1)<0)
return -1;
return 0;
}
@@ -1038,50 +957,49 @@ validate_dir_authorities(or_options_t *options, or_options_t *old_options)
* as appropriate.
*/
static int
-consider_adding_dir_authorities(const or_options_t *options,
- const or_options_t *old_options)
+consider_adding_dir_servers(const or_options_t *options,
+ const or_options_t *old_options)
{
config_line_t *cl;
int need_to_update =
- !smartlist_len(router_get_trusted_dir_servers()) || !old_options ||
- !config_lines_eq(options->DirServers, old_options->DirServers) ||
+ !smartlist_len(router_get_trusted_dir_servers()) ||
+ !smartlist_len(router_get_fallback_dir_servers()) || !old_options ||
+ !config_lines_eq(options->DirAuthorities, old_options->DirAuthorities) ||
+ !config_lines_eq(options->FallbackDir, old_options->FallbackDir) ||
!config_lines_eq(options->AlternateBridgeAuthority,
old_options->AlternateBridgeAuthority) ||
!config_lines_eq(options->AlternateDirAuthority,
- old_options->AlternateDirAuthority) ||
- !config_lines_eq(options->AlternateHSAuthority,
- old_options->AlternateHSAuthority);
+ old_options->AlternateDirAuthority);
if (!need_to_update)
return 0; /* all done */
/* Start from a clean slate. */
- clear_trusted_dir_servers();
+ clear_dir_servers();
- if (!options->DirServers) {
+ if (!options->DirAuthorities) {
/* then we may want some of the defaults */
dirinfo_type_t type = NO_DIRINFO;
if (!options->AlternateBridgeAuthority)
type |= BRIDGE_DIRINFO;
if (!options->AlternateDirAuthority)
- type |= V1_DIRINFO | V2_DIRINFO | V3_DIRINFO | EXTRAINFO_DIRINFO |
- MICRODESC_DIRINFO;
- if (!options->AlternateHSAuthority)
- type |= HIDSERV_DIRINFO;
+ type |= V3_DIRINFO | EXTRAINFO_DIRINFO | MICRODESC_DIRINFO;
add_default_trusted_dir_authorities(type);
}
+ if (!options->FallbackDir)
+ add_default_fallback_dir_servers();
- for (cl = options->DirServers; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ for (cl = options->DirAuthorities; cl; cl = cl->next)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
return -1;
for (cl = options->AlternateBridgeAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
return -1;
for (cl = options->AlternateDirAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ if (parse_dir_authority_line(cl->value, NO_DIRINFO, 0)<0)
return -1;
- for (cl = options->AlternateHSAuthority; cl; cl = cl->next)
- if (parse_dir_server_line(cl->value, NO_DIRINFO, 0)<0)
+ for (cl = options->FallbackDir; cl; cl = cl->next)
+ if (parse_dir_fallback_line(cl->value, 0)<0)
return -1;
return 0;
}
@@ -1103,6 +1021,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
@@ -1129,12 +1048,18 @@ options_act_reversible(const or_options_t *old_options, char **msg)
if (running_tor) {
int n_ports=0;
/* We need to set the connection limit before we can open the listeners. */
- if (set_max_file_descriptors((unsigned)options->ConnLimit,
- &options->_ConnLimit) < 0) {
- *msg = tor_strdup("Problem with ConnLimit value. See logs for details.");
- goto rollback;
+ if (! sandbox_is_active()) {
+ if (set_max_file_descriptors((unsigned)options->ConnLimit,
+ &options->ConnLimit_) < 0) {
+ *msg = tor_strdup("Problem with ConnLimit value. "
+ "See logs for details.");
+ goto rollback;
+ }
+ set_conn_limit = 1;
+ } else {
+ tor_assert(old_options);
+ options->ConnLimit_ = old_options->ConnLimit_;
}
- set_conn_limit = 1;
/* Set up libevent. (We need to do this before we can register the
* listeners as listeners.) */
@@ -1175,7 +1100,8 @@ options_act_reversible(const or_options_t *old_options, char **msg)
#if defined(HAVE_NET_IF_H) && defined(HAVE_NET_PFVAR_H)
/* Open /dev/pf before dropping privileges. */
- if (options->TransPort_set) {
+ if (options->TransPort_set &&
+ options->TransProxyType_parsed == TPT_DEFAULT) {
if (get_pf_socket() < 0) {
*msg = tor_strdup("Unable to open /dev/pf for transparent proxy.");
goto rollback;
@@ -1212,23 +1138,6 @@ options_act_reversible(const or_options_t *old_options, char **msg)
/* No need to roll back, since you can't change the value. */
}
- /* Write control ports to disk as appropriate */
- control_ports_write_to_file();
-
- if (directory_caches_v2_dir_info(options)) {
- char *fn = NULL;
- tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-status",
- options->DataDirectory);
- if (check_private_dir(fn, running_tor ? CPD_CREATE : CPD_CHECK,
- options->User) < 0) {
- tor_asprintf(msg,
- "Couldn't access/create private data directory \"%s\"", fn);
- tor_free(fn);
- goto done;
- }
- tor_free(fn);
- }
-
/* Bail out at this point if we're not going to be a client or server:
* we don't run Tor itself. */
if (!running_tor)
@@ -1236,7 +1145,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
mark_logs_temp(); /* Close current logs once new logs are open. */
logs_marked = 1;
- if (options_init_logs(options, 0)<0) { /* Configure the log(s) */
+ if (options_init_logs(options, 0)<0) { /* Configure the tor_log(s) */
*msg = tor_strdup("Failed to init Log options. See logs for details.");
goto rollback;
}
@@ -1250,13 +1159,44 @@ options_act_reversible(const or_options_t *old_options, char **msg)
add_callback_log(severity, control_event_logmsg);
control_adjust_event_log_severity();
tor_free(severity);
+ tor_log_update_sigsafe_err_fds();
+ }
+
+ {
+ const char *badness = NULL;
+ int bad_safelog = 0, bad_severity = 0, new_badness = 0;
+ if (options->SafeLogging_ != SAFELOG_SCRUB_ALL) {
+ bad_safelog = 1;
+ if (!old_options || old_options->SafeLogging_ != options->SafeLogging_)
+ new_badness = 1;
+ }
+ if (get_min_log_level() >= LOG_INFO) {
+ bad_severity = 1;
+ if (get_min_log_level() != old_min_log_level)
+ new_badness = 1;
+ }
+ if (bad_safelog && bad_severity)
+ badness = "you disabled SafeLogging, and "
+ "you're logging more than \"notice\"";
+ else if (bad_safelog)
+ badness = "you disabled SafeLogging";
+ else
+ badness = "you're logging more than \"notice\"";
+ if (new_badness)
+ log_warn(LD_GENERAL, "Your log may contain sensitive information - %s. "
+ "Don't log unless it serves an important reason. "
+ "Overwrite the log afterwards.", badness);
}
+
SMARTLIST_FOREACH(replaced_listeners, connection_t *, conn,
{
+ int marked = conn->marked_for_close;
log_notice(LD_NET, "Closing old %s on %s:%d",
conn_type_to_string(conn->type), conn->address, conn->port);
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ if (!marked) {
+ connection_mark_for_close(conn);
+ }
});
goto done;
@@ -1271,7 +1211,7 @@ options_act_reversible(const or_options_t *old_options, char **msg)
if (set_conn_limit && old_options)
set_max_file_descriptors((unsigned)old_options->ConnLimit,
- &options->_ConnLimit);
+ &options->ConnLimit_);
SMARTLIST_FOREACH(new_listeners, connection_t *, conn,
{
@@ -1353,6 +1293,9 @@ options_transition_requires_fresh_tls_context(const or_options_t *old_options,
return 1;
}
+ if (!opt_streq(old_options->TLSECGroup, new_options->TLSECGroup))
+ return 1;
+
return 0;
}
@@ -1371,9 +1314,10 @@ options_act(const or_options_t *old_options)
config_line_t *cl;
or_options_t *options = get_options_mutable();
int running_tor = options->command == CMD_RUN_TOR;
- char *msg;
+ char *msg=NULL;
const int transition_affects_workers =
old_options && options_transition_affects_workers(old_options, options);
+ int old_ewma_enabled;
/* disable ptrace and later, other basic debugging techniques */
{
@@ -1399,16 +1343,19 @@ options_act(const or_options_t *old_options)
}
}
+ /* Write control ports to disk as appropriate */
+ control_ports_write_to_file();
+
if (running_tor && !have_lockfile()) {
if (try_locking(options, 1) < 0)
return -1;
}
- if (consider_adding_dir_authorities(options, old_options) < 0)
+ if (consider_adding_dir_servers(options, old_options) < 0)
return -1;
#ifdef NON_ANONYMOUS_MODE_ENABLED
- log(LOG_WARN, LD_GENERAL, "This copy of Tor was compiled to run in a "
+ log_warn(LD_GENERAL, "This copy of Tor was compiled to run in a "
"non-anonymous mode. It will provide NO ANONYMITY.");
#endif
@@ -1429,14 +1376,29 @@ options_act(const or_options_t *old_options)
}
#endif
+ /* If we are a bridge with a pluggable transport proxy but no
+ Extended ORPort, inform the user that she is missing out. */
+ if (server_mode(options) && options->ServerTransportPlugin &&
+ !options->ExtORPort_lines) {
+ log_notice(LD_CONFIG, "We use pluggable transports but the Extended "
+ "ORPort is disabled. Tor and your pluggable transports proxy "
+ "communicate with each other via the Extended ORPort so it "
+ "is suggested you enable it: it will also allow your Bridge "
+ "to collect statistics about its clients that use pluggable "
+ "transports. Please enable it using the ExtORPort torrc option "
+ "(e.g. set 'ExtORPort auto').");
+ }
+
if (options->Bridges) {
mark_bridge_list();
for (cl = options->Bridges; cl; cl = cl->next) {
- if (parse_bridge_line(cl->value, 0)<0) {
+ bridge_line_t *bridge_line = parse_bridge_line(cl->value);
+ if (!bridge_line) {
log_warn(LD_BUG,
"Previously validated Bridge line could not be added!");
return -1;
}
+ bridge_add_from_config(bridge_line);
}
sweep_bridge_list();
}
@@ -1454,7 +1416,7 @@ options_act(const or_options_t *old_options)
}
/* Load state */
- if (! global_state && running_tor) {
+ if (! or_state_loaded() && running_tor) {
if (or_state_load())
return -1;
rep_hist_load_mtbf_data(time(NULL));
@@ -1464,7 +1426,7 @@ options_act(const or_options_t *old_options)
pt_prepare_proxy_list_for_config_read();
if (options->ClientTransportPlugin) {
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(cl->value, 0)<0) {
+ if (parse_client_transport_line(options, cl->value, 0)<0) {
log_warn(LD_BUG,
"Previously validated ClientTransportPlugin line "
"could not be added!");
@@ -1475,7 +1437,7 @@ options_act(const or_options_t *old_options)
if (options->ServerTransportPlugin && server_mode(options)) {
for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
- if (parse_server_transport_line(cl->value, 0)<0) {
+ if (parse_server_transport_line(options, cl->value, 0)<0) {
log_warn(LD_BUG,
"Previously validated ServerTransportPlugin line "
"could not be added!");
@@ -1486,6 +1448,12 @@ options_act(const or_options_t *old_options)
sweep_transport_list();
sweep_proxy_list();
+ /* Start the PT proxy configuration. By doing this configuration
+ here, we also figure out which proxies need to be restarted and
+ which not. */
+ if (pt_proxies_configuration_pending() && !net_is_disabled())
+ pt_configure_remaining_proxies();
+
/* Bail out at this point if we're not going to be a client or server:
* we want to not fork, and to log stuff to stderr. */
if (!running_tor)
@@ -1535,12 +1503,14 @@ options_act(const or_options_t *old_options)
/* Write our PID to the PID file. If we do not have write permissions we
* will log a warning */
- if (options->PidFile)
+ if (options->PidFile && !sandbox_is_active()) {
write_pidfile(options->PidFile);
+ }
/* Register addressmap directives */
config_register_addressmaps(options);
- parse_virtual_addr_network(options->VirtualAddrNetwork, 0, &msg);
+ parse_virtual_addr_network(options->VirtualAddrNetworkIPv4, AF_INET,0,NULL);
+ parse_virtual_addr_network(options->VirtualAddrNetworkIPv6, AF_INET6,0,NULL);
/* Update address policies. */
if (policies_parse_from_options(options) < 0) {
@@ -1549,15 +1519,21 @@ 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;
}
monitor_owning_controller_process(options->OwningControllerProcess);
/* reload keys as needed for rendezvous services. */
- if (rend_service_load_keys()<0) {
+ if (rend_service_load_all_keys()<0) {
log_warn(LD_GENERAL,"Error loading rendezvous service keys");
return -1;
}
@@ -1581,8 +1557,16 @@ options_act(const or_options_t *old_options)
connection_bucket_init();
#endif
+ old_ewma_enabled = cell_ewma_enabled();
/* Change the cell EWMA settings */
cell_ewma_set_scale_factor(options, networkstatus_get_latest_consensus());
+ /* If we just enabled ewma, set the cmux policy on all active channels */
+ if (cell_ewma_enabled() && !old_ewma_enabled) {
+ channel_set_cmux_policy_everywhere(&ewma_policy);
+ } else if (!cell_ewma_enabled() && old_ewma_enabled) {
+ /* Turn it off everywhere */
+ channel_set_cmux_policy_everywhere(NULL);
+ }
/* Update the BridgePassword's hashed version as needed. We store this as a
* digest so that we can do side-channel-proof comparisons on it.
@@ -1595,13 +1579,19 @@ options_act(const or_options_t *old_options)
"BridgePassword.");
return -1;
}
- options->_BridgePassword_AuthDigest = tor_malloc(DIGEST256_LEN);
- crypto_digest256(options->_BridgePassword_AuthDigest,
+ options->BridgePassword_AuthDigest_ = tor_malloc(DIGEST256_LEN);
+ crypto_digest256(options->BridgePassword_AuthDigest_,
http_authenticator, strlen(http_authenticator),
DIGEST_SHA256);
tor_free(http_authenticator);
}
+ if (parse_outbound_addresses(options, 0, &msg) < 0) {
+ log_warn(LD_BUG, "Failed parsing oubound bind addresses: %s", msg);
+ tor_free(msg);
+ return -1;
+ }
+
/* Check for transitions that need action. */
if (old_options) {
int revise_trackexithosts = 0;
@@ -1621,7 +1611,7 @@ options_act(const or_options_t *old_options)
"preferred or excluded node lists. "
"Abandoning previous circuits.");
circuit_mark_all_unused_circs();
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
revise_trackexithosts = 1;
}
@@ -1639,8 +1629,10 @@ options_act(const or_options_t *old_options)
if (!smartlist_strings_eq(old_options->AutomapHostsSuffixes,
options->AutomapHostsSuffixes))
revise_automap_entries = 1;
- else if (!opt_streq(old_options->VirtualAddrNetwork,
- options->VirtualAddrNetwork))
+ else if (!opt_streq(old_options->VirtualAddrNetworkIPv4,
+ options->VirtualAddrNetworkIPv4) ||
+ !opt_streq(old_options->VirtualAddrNetworkIPv6,
+ options->VirtualAddrNetworkIPv6))
revise_automap_entries = 1;
}
@@ -1695,23 +1687,18 @@ options_act(const or_options_t *old_options)
connection_or_update_token_buckets(get_connection_array(), options);
}
- /* Maybe load geoip file */
- if (options->GeoIPFile &&
- ((!old_options || !opt_streq(old_options->GeoIPFile, options->GeoIPFile))
- || !geoip_is_loaded())) {
- /* XXXX Don't use this "<default>" junk; make our filename options
- * understand prefixes somehow. -NM */
- /* XXXX024 Reload GeoIPFile on SIGHUP. -NM */
- char *actual_fname = tor_strdup(options->GeoIPFile);
-#ifdef _WIN32
- if (!strcmp(actual_fname, "<default>")) {
- const char *conf_root = get_windows_conf_root();
- tor_free(actual_fname);
- tor_asprintf(&actual_fname, "%s\\geoip", conf_root);
- }
-#endif
- geoip_load_file(actual_fname, options);
- tor_free(actual_fname);
+ config_maybe_load_geoip_files_(options, old_options);
+
+ if (geoip_is_loaded(AF_INET) && options->GeoIPExcludeUnknown) {
+ /* ExcludeUnknown is true or "auto" */
+ const int is_auto = options->GeoIPExcludeUnknown == -1;
+ int changed;
+
+ changed = routerset_add_unknown_ccs(&options->ExcludeNodes, is_auto);
+ changed += routerset_add_unknown_ccs(&options->ExcludeExitNodes, is_auto);
+
+ if (changed)
+ routerset_add_unknown_ccs(&options->ExcludeExitNodesUnion_, is_auto);
}
if (options->CellStatistics || options->DirReqStatistics ||
@@ -1721,10 +1708,14 @@ options_act(const or_options_t *old_options)
time_t now = time(NULL);
int print_notice = 0;
- /* If we aren't acting as a server, we can't collect stats anyway. */
+ /* Only collect directory-request statistics on relays and bridges. */
if (!server_mode(options)) {
- options->CellStatistics = 0;
options->DirReqStatistics = 0;
+ }
+
+ /* Only collect other relay-only statistics on relays. */
+ if (!public_server_mode(options)) {
+ options->CellStatistics = 0;
options->EntryStatistics = 0;
options->ExitPortStatistics = 0;
}
@@ -1736,7 +1727,7 @@ options_act(const or_options_t *old_options)
}
if ((!old_options || !old_options->DirReqStatistics) &&
options->DirReqStatistics) {
- if (geoip_is_loaded()) {
+ if (geoip_is_loaded(AF_INET)) {
geoip_dirreq_stats_init(now);
print_notice = 1;
} else {
@@ -1751,7 +1742,7 @@ options_act(const or_options_t *old_options)
}
if ((!old_options || !old_options->EntryStatistics) &&
options->EntryStatistics && !should_record_bridge_info(options)) {
- if (geoip_is_loaded()) {
+ if (geoip_is_loaded(AF_INET) || geoip_is_loaded(AF_INET6)) {
geoip_entry_stats_init(now);
print_notice = 1;
} else {
@@ -1847,76 +1838,66 @@ options_act(const or_options_t *old_options)
return 0;
}
-/*
- * Functions to parse config options
- */
+static const struct {
+ const char *name;
+ int takes_argument;
+} CMDLINE_ONLY_OPTIONS[] = {
+ { "-f", 1 },
+ { "--allow-missing-torrc", 0 },
+ { "--defaults-torrc", 1 },
+ { "--hash-password", 1 },
+ { "--dump-config", 1 },
+ { "--list-fingerprint", 0 },
+ { "--verify-config", 0 },
+ { "--ignore-missing-torrc", 0 },
+ { "--quiet", 0 },
+ { "--hush", 0 },
+ { "--version", 0 },
+ { "--library-versions", 0 },
+ { "-h", 0 },
+ { "--help", 0 },
+ { "--list-torrc-options", 0 },
+ { "--digests", 0 },
+ { "--nt-service", 0 },
+ { "-nt-service", 0 },
+ { NULL, 0 },
+};
-/** If <b>option</b> is an official abbreviation for a longer option,
- * return the longer option. Otherwise return <b>option</b>.
- * If <b>command_line</b> is set, apply all abbreviations. Otherwise, only
- * apply abbreviations that work for the config file and the command line.
- * If <b>warn_obsolete</b> is set, warn about deprecated names. */
-static const char *
-expand_abbrev(const config_format_t *fmt, const char *option, int command_line,
- int warn_obsolete)
+/** Helper: Read a list of configuration options from the command line. If
+ * successful, or if ignore_errors is set, put them in *<b>result</b>, put the
+ * commandline-only options in *<b>cmdline_result</b>, and return 0;
+ * otherwise, return -1 and leave *<b>result</b> and <b>cmdline_result</b>
+ * alone. */
+int
+config_parse_commandline(int argc, char **argv, int ignore_errors,
+ config_line_t **result,
+ config_line_t **cmdline_result)
{
- int i;
- if (! fmt->abbrevs)
- return option;
- for (i=0; fmt->abbrevs[i].abbreviated; ++i) {
- /* Abbreviations are case insensitive. */
- if (!strcasecmp(option,fmt->abbrevs[i].abbreviated) &&
- (command_line || !fmt->abbrevs[i].commandline_only)) {
- if (warn_obsolete && fmt->abbrevs[i].warn) {
- log_warn(LD_CONFIG,
- "The configuration option '%s' is deprecated; "
- "use '%s' instead.",
- fmt->abbrevs[i].abbreviated,
- fmt->abbrevs[i].full);
- }
- /* Keep going through the list in case we want to rewrite it more.
- * (We could imagine recursing here, but I don't want to get the
- * user into an infinite loop if we craft our list wrong.) */
- option = fmt->abbrevs[i].full;
- }
- }
- return option;
-}
+ config_line_t *param = NULL;
-/** Helper: Read a list of configuration options from the command line.
- * If successful, put them in *<b>result</b> and return 0, and return
- * -1 and leave *<b>result</b> alone. */
-static int
-config_get_commandlines(int argc, char **argv, config_line_t **result)
-{
config_line_t *front = NULL;
config_line_t **new = &front;
- char *s;
+
+ config_line_t *front_cmdline = NULL;
+ config_line_t **new_cmdline = &front_cmdline;
+
+ char *s, *arg;
int i = 1;
while (i < argc) {
unsigned command = CONFIG_LINE_NORMAL;
int want_arg = 1;
+ int is_cmdline = 0;
+ int j;
- if (!strcmp(argv[i],"-f") ||
- !strcmp(argv[i],"--defaults-torrc") ||
- !strcmp(argv[i],"--hash-password")) {
- i += 2; /* command-line option with argument. ignore them. */
- continue;
- } else if (!strcmp(argv[i],"--list-fingerprint") ||
- !strcmp(argv[i],"--verify-config") ||
- !strcmp(argv[i],"--ignore-missing-torrc") ||
- !strcmp(argv[i],"--quiet") ||
- !strcmp(argv[i],"--hush")) {
- i += 1; /* command-line option. ignore it. */
- continue;
- } else if (!strcmp(argv[i],"--nt-service") ||
- !strcmp(argv[i],"-nt-service")) {
- i += 1;
- continue;
+ for (j = 0; CMDLINE_ONLY_OPTIONS[j].name != NULL; ++j) {
+ if (!strcmp(argv[i], CMDLINE_ONLY_OPTIONS[j].name)) {
+ is_cmdline = 1;
+ want_arg = CMDLINE_ONLY_OPTIONS[j].takes_argument;
+ break;
+ }
}
- *new = tor_malloc_zero(sizeof(config_line_t));
s = argv[i];
/* Each keyword may be prefixed with one or two dashes. */
@@ -1936,464 +1917,42 @@ config_get_commandlines(int argc, char **argv, config_line_t **result)
}
if (want_arg && i == argc-1) {
- log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
- argv[i]);
- config_free_lines(front);
- return -1;
- }
-
- (*new)->key = tor_strdup(expand_abbrev(&options_format, s, 1, 1));
- (*new)->value = want_arg ? tor_strdup(argv[i+1]) : tor_strdup("");
- (*new)->command = command;
- (*new)->next = NULL;
- log(LOG_DEBUG, LD_CONFIG, "command line: parsed keyword '%s', value '%s'",
- (*new)->key, (*new)->value);
-
- new = &((*new)->next);
- i += want_arg ? 2 : 1;
- }
- *result = front;
- return 0;
-}
-
-/** Helper: allocate a new configuration option mapping 'key' to 'val',
- * append it to *<b>lst</b>. */
-static void
-config_line_append(config_line_t **lst,
- const char *key,
- const char *val)
-{
- config_line_t *newline;
-
- newline = tor_malloc_zero(sizeof(config_line_t));
- newline->key = tor_strdup(key);
- newline->value = tor_strdup(val);
- newline->next = NULL;
- while (*lst)
- lst = &((*lst)->next);
-
- (*lst) = newline;
-}
-
-/** Helper: parse the config string and strdup into key/value
- * strings. Set *result to the list, or NULL if parsing the string
- * failed. Return 0 on success, -1 on failure. Warn and ignore any
- * misformatted lines.
- *
- * If <b>extended</b> is set, then treat keys beginning with / and with + as
- * indicating "clear" and "append" respectively. */
-int
-config_get_lines(const char *string, config_line_t **result, int extended)
-{
- config_line_t *list = NULL, **next;
- char *k, *v;
-
- next = &list;
- do {
- k = v = NULL;
- string = parse_config_line_from_str(string, &k, &v);
- if (!string) {
- config_free_lines(list);
- tor_free(k);
- tor_free(v);
- return -1;
- }
- if (k && v) {
- unsigned command = CONFIG_LINE_NORMAL;
- if (extended) {
- if (k[0] == '+') {
- char *k_new = tor_strdup(k+1);
- tor_free(k);
- k = k_new;
- command = CONFIG_LINE_APPEND;
- } else if (k[0] == '/') {
- char *k_new = tor_strdup(k+1);
- tor_free(k);
- k = k_new;
- tor_free(v);
- v = tor_strdup("");
- command = CONFIG_LINE_CLEAR;
- }
+ if (ignore_errors) {
+ arg = strdup("");
+ } else {
+ log_warn(LD_CONFIG,"Command-line option '%s' with no value. Failing.",
+ argv[i]);
+ config_free_lines(front);
+ config_free_lines(front_cmdline);
+ return -1;
}
- /* This list can get long, so we keep a pointer to the end of it
- * rather than using config_line_append over and over and getting
- * n^2 performance. */
- *next = tor_malloc_zero(sizeof(config_line_t));
- (*next)->key = k;
- (*next)->value = v;
- (*next)->next = NULL;
- (*next)->command = command;
- next = &((*next)->next);
} else {
- tor_free(k);
- tor_free(v);
+ arg = want_arg ? tor_strdup(argv[i+1]) : strdup("");
}
- } while (*string);
- *result = list;
- return 0;
-}
+ param = tor_malloc_zero(sizeof(config_line_t));
+ param->key = is_cmdline ? tor_strdup(argv[i]) : tor_strdup(s);
+ param->value = arg;
+ param->command = command;
+ param->next = NULL;
+ log_debug(LD_CONFIG, "command line: parsed keyword '%s', value '%s'",
+ param->key, param->value);
-/**
- * Free all the configuration lines on the linked list <b>front</b>.
- */
-void
-config_free_lines(config_line_t *front)
-{
- config_line_t *tmp;
-
- while (front) {
- tmp = front;
- front = tmp->next;
-
- tor_free(tmp->key);
- tor_free(tmp->value);
- tor_free(tmp);
- }
-}
-
-/** As config_find_option, but return a non-const pointer. */
-static config_var_t *
-config_find_option_mutable(config_format_t *fmt, const char *key)
-{
- int i;
- size_t keylen = strlen(key);
- if (!keylen)
- return NULL; /* if they say "--" on the command line, it's not an option */
- /* First, check for an exact (case-insensitive) match */
- for (i=0; fmt->vars[i].name; ++i) {
- if (!strcasecmp(key, fmt->vars[i].name)) {
- return &fmt->vars[i];
- }
- }
- /* If none, check for an abbreviated match */
- for (i=0; fmt->vars[i].name; ++i) {
- if (!strncasecmp(key, fmt->vars[i].name, keylen)) {
- log_warn(LD_CONFIG, "The abbreviation '%s' is deprecated. "
- "Please use '%s' instead",
- key, fmt->vars[i].name);
- return &fmt->vars[i];
- }
- }
- /* Okay, unrecognized option */
- return NULL;
-}
-
-/** If <b>key</b> is a configuration option, return the corresponding const
- * config_var_t. Otherwise, if <b>key</b> is a non-standard abbreviation,
- * warn, and return the corresponding const config_var_t. Otherwise return
- * NULL.
- */
-static const config_var_t *
-config_find_option(const config_format_t *fmt, const char *key)
-{
- return config_find_option_mutable((config_format_t*)fmt, key);
-}
-
-/** Return the number of option entries in <b>fmt</b>. */
-static int
-config_count_options(const config_format_t *fmt)
-{
- int i;
- for (i=0; fmt->vars[i].name; ++i)
- ;
- return i;
-}
-
-/*
- * Functions to assign config options.
- */
-
-/** <b>c</b>-\>key is known to be a real key. Update <b>options</b>
- * with <b>c</b>-\>value and return 0, or return -1 if bad value.
- *
- * Called from config_assign_line() and option_reset().
- */
-static int
-config_assign_value(const config_format_t *fmt, or_options_t *options,
- config_line_t *c, char **msg)
-{
- int i, ok;
- const config_var_t *var;
- void *lvalue;
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, c->key);
- tor_assert(var);
-
- lvalue = STRUCT_VAR_P(options, var->var_offset);
-
- switch (var->type) {
-
- case CONFIG_TYPE_PORT:
- if (!strcasecmp(c->value, "auto")) {
- *(int *)lvalue = CFG_AUTO_PORT;
- break;
- }
- /* fall through */
- case CONFIG_TYPE_INT:
- case CONFIG_TYPE_UINT:
- i = (int)tor_parse_long(c->value, 10,
- var->type==CONFIG_TYPE_INT ? INT_MIN : 0,
- var->type==CONFIG_TYPE_PORT ? 65535 : INT_MAX,
- &ok, NULL);
- if (!ok) {
- tor_asprintf(msg,
- "Int keyword '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
-
- case CONFIG_TYPE_INTERVAL: {
- i = config_parse_interval(c->value, &ok);
- if (!ok) {
- tor_asprintf(msg,
- "Interval '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
- }
-
- case CONFIG_TYPE_MSEC_INTERVAL: {
- i = config_parse_msec_interval(c->value, &ok);
- if (!ok) {
- tor_asprintf(msg,
- "Msec interval '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
- }
-
- case CONFIG_TYPE_MEMUNIT: {
- uint64_t u64 = config_parse_memunit(c->value, &ok);
- if (!ok) {
- tor_asprintf(msg,
- "Value '%s %s' is malformed or out of bounds.",
- c->key, c->value);
- return -1;
- }
- *(uint64_t *)lvalue = u64;
- break;
- }
-
- case CONFIG_TYPE_BOOL:
- i = (int)tor_parse_long(c->value, 10, 0, 1, &ok, NULL);
- if (!ok) {
- tor_asprintf(msg,
- "Boolean '%s %s' expects 0 or 1.",
- c->key, c->value);
- return -1;
- }
- *(int *)lvalue = i;
- break;
-
- case CONFIG_TYPE_AUTOBOOL:
- if (!strcmp(c->value, "auto"))
- *(int *)lvalue = -1;
- else if (!strcmp(c->value, "0"))
- *(int *)lvalue = 0;
- else if (!strcmp(c->value, "1"))
- *(int *)lvalue = 1;
- else {
- tor_asprintf(msg, "Boolean '%s %s' expects 0, 1, or 'auto'.",
- c->key, c->value);
- return -1;
- }
- break;
-
- case CONFIG_TYPE_STRING:
- case CONFIG_TYPE_FILENAME:
- tor_free(*(char **)lvalue);
- *(char **)lvalue = tor_strdup(c->value);
- break;
-
- case CONFIG_TYPE_DOUBLE:
- *(double *)lvalue = atof(c->value);
- break;
-
- case CONFIG_TYPE_ISOTIME:
- if (parse_iso_time(c->value, (time_t *)lvalue)) {
- tor_asprintf(msg,
- "Invalid time '%s' for keyword '%s'", c->value, c->key);
- return -1;
- }
- break;
-
- case CONFIG_TYPE_ROUTERSET:
- if (*(routerset_t**)lvalue) {
- routerset_free(*(routerset_t**)lvalue);
- }
- *(routerset_t**)lvalue = routerset_new();
- if (routerset_parse(*(routerset_t**)lvalue, c->value, c->key)<0) {
- tor_asprintf(msg, "Invalid exit list '%s' for option '%s'",
- c->value, c->key);
- return -1;
- }
- break;
-
- case CONFIG_TYPE_CSV:
- if (*(smartlist_t**)lvalue) {
- SMARTLIST_FOREACH(*(smartlist_t**)lvalue, char *, cp, tor_free(cp));
- smartlist_clear(*(smartlist_t**)lvalue);
+ if (is_cmdline) {
+ *new_cmdline = param;
+ new_cmdline = &((*new_cmdline)->next);
} else {
- *(smartlist_t**)lvalue = smartlist_new();
+ *new = param;
+ new = &((*new)->next);
}
- smartlist_split_string(*(smartlist_t**)lvalue, c->value, ",",
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- break;
-
- case CONFIG_TYPE_LINELIST:
- case CONFIG_TYPE_LINELIST_S:
- {
- config_line_t *lastval = *(config_line_t**)lvalue;
- if (lastval && lastval->fragile) {
- if (c->command != CONFIG_LINE_APPEND) {
- config_free_lines(lastval);
- *(config_line_t**)lvalue = NULL;
- } else {
- lastval->fragile = 0;
- }
- }
-
- config_line_append((config_line_t**)lvalue, c->key, c->value);
- }
- break;
- case CONFIG_TYPE_OBSOLETE:
- log_warn(LD_CONFIG, "Skipping obsolete configuration option '%s'", c->key);
- break;
- case CONFIG_TYPE_LINELIST_V:
- tor_asprintf(msg,
- "You may not provide a value for virtual option '%s'", c->key);
- return -1;
- default:
- tor_assert(0);
- break;
- }
- return 0;
-}
-
-/** Mark every linelist in <b>options</b> "fragile", so that fresh assignments
- * to it will replace old ones. */
-static void
-config_mark_lists_fragile(const config_format_t *fmt, or_options_t *options)
-{
- int i;
- tor_assert(fmt);
- tor_assert(options);
-
- for (i = 0; fmt->vars[i].name; ++i) {
- const config_var_t *var = &fmt->vars[i];
- config_line_t *list;
- if (var->type != CONFIG_TYPE_LINELIST &&
- var->type != CONFIG_TYPE_LINELIST_V)
- continue;
-
- list = *(config_line_t **)STRUCT_VAR_P(options, var->var_offset);
- if (list)
- list->fragile = 1;
- }
-}
-
-/** If <b>c</b> is a syntactically valid configuration line, update
- * <b>options</b> with its value and return 0. Otherwise return -1 for bad
- * key, -2 for bad value.
- *
- * If <b>clear_first</b> is set, clear the value first. Then if
- * <b>use_defaults</b> is set, set the value to the default.
- *
- * Called from config_assign().
- */
-static int
-config_assign_line(const config_format_t *fmt, or_options_t *options,
- config_line_t *c, int use_defaults,
- int clear_first, bitarray_t *options_seen, char **msg)
-{
- const config_var_t *var;
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, c->key);
- if (!var) {
- if (fmt->extra) {
- void *lvalue = STRUCT_VAR_P(options, fmt->extra->var_offset);
- log_info(LD_CONFIG,
- "Found unrecognized option '%s'; saving it.", c->key);
- config_line_append((config_line_t**)lvalue, c->key, c->value);
- return 0;
- } else {
- tor_asprintf(msg,
- "Unknown option '%s'. Failing.", c->key);
- return -1;
- }
- }
-
- /* Put keyword into canonical case. */
- if (strcmp(var->name, c->key)) {
- tor_free(c->key);
- c->key = tor_strdup(var->name);
- }
-
- if (!strlen(c->value)) {
- /* reset or clear it, then return */
- if (!clear_first) {
- if ((var->type == CONFIG_TYPE_LINELIST ||
- var->type == CONFIG_TYPE_LINELIST_S) &&
- c->command != CONFIG_LINE_CLEAR) {
- /* We got an empty linelist from the torrc or command line.
- As a special case, call this an error. Warn and ignore. */
- log_warn(LD_CONFIG,
- "Linelist option '%s' has no value. Skipping.", c->key);
- } else { /* not already cleared */
- option_reset(fmt, options, var, use_defaults);
- }
- }
- return 0;
- } else if (c->command == CONFIG_LINE_CLEAR && !clear_first) {
- option_reset(fmt, options, var, use_defaults);
- }
-
- if (options_seen && (var->type != CONFIG_TYPE_LINELIST &&
- var->type != CONFIG_TYPE_LINELIST_S)) {
- /* We're tracking which options we've seen, and this option is not
- * supposed to occur more than once. */
- int var_index = (int)(var - fmt->vars);
- if (bitarray_is_set(options_seen, var_index)) {
- log_warn(LD_CONFIG, "Option '%s' used more than once; all but the last "
- "value will be ignored.", var->name);
- }
- bitarray_set(options_seen, var_index);
+ i += want_arg ? 2 : 1;
}
-
- if (config_assign_value(fmt, options, c, msg) < 0)
- return -2;
+ *cmdline_result = front_cmdline;
+ *result = front;
return 0;
}
-/** Restore the option named <b>key</b> in options to its default value.
- * Called from config_assign(). */
-static void
-config_reset_line(const config_format_t *fmt, or_options_t *options,
- const char *key, int use_defaults)
-{
- const config_var_t *var;
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, key);
- if (!var)
- return; /* give error on next pass. */
-
- option_reset(fmt, options, var, use_defaults);
-}
-
/** Return true iff key is a valid configuration option. */
int
option_is_recognized(const char *key)
@@ -2416,287 +1975,7 @@ option_get_canonical_name(const char *key)
config_line_t *
option_get_assignment(const or_options_t *options, const char *key)
{
- return get_assigned_option(&options_format, options, key, 1);
-}
-
-/** Return true iff value needs to be quoted and escaped to be used in
- * a configuration file. */
-static int
-config_value_needs_escape(const char *value)
-{
- if (*value == '\"')
- return 1;
- while (*value) {
- switch (*value)
- {
- case '\r':
- case '\n':
- case '#':
- /* Note: quotes and backspaces need special handling when we are using
- * quotes, not otherwise, so they don't trigger escaping on their
- * own. */
- return 1;
- default:
- if (!TOR_ISPRINT(*value))
- return 1;
- }
- ++value;
- }
- return 0;
-}
-
-/** Return a newly allocated deep copy of the lines in <b>inp</b>. */
-static config_line_t *
-config_lines_dup(const config_line_t *inp)
-{
- config_line_t *result = NULL;
- config_line_t **next_out = &result;
- while (inp) {
- *next_out = tor_malloc_zero(sizeof(config_line_t));
- (*next_out)->key = tor_strdup(inp->key);
- (*next_out)->value = tor_strdup(inp->value);
- inp = inp->next;
- next_out = &((*next_out)->next);
- }
- (*next_out) = NULL;
- return result;
-}
-
-/** Return newly allocated line or lines corresponding to <b>key</b> in the
- * configuration <b>options</b>. If <b>escape_val</b> is true and a
- * value needs to be quoted before it's put in a config file, quote and
- * escape that value. Return NULL if no such key exists. */
-static config_line_t *
-get_assigned_option(const config_format_t *fmt, const void *options,
- const char *key, int escape_val)
-{
- const config_var_t *var;
- const void *value;
- config_line_t *result;
- tor_assert(options && key);
-
- CHECK(fmt, options);
-
- var = config_find_option(fmt, key);
- if (!var) {
- log_warn(LD_CONFIG, "Unknown option '%s'. Failing.", key);
- return NULL;
- }
- value = STRUCT_VAR_P(options, var->var_offset);
-
- result = tor_malloc_zero(sizeof(config_line_t));
- result->key = tor_strdup(var->name);
- switch (var->type)
- {
- case CONFIG_TYPE_STRING:
- case CONFIG_TYPE_FILENAME:
- if (*(char**)value) {
- result->value = tor_strdup(*(char**)value);
- } else {
- tor_free(result->key);
- tor_free(result);
- return NULL;
- }
- break;
- case CONFIG_TYPE_ISOTIME:
- if (*(time_t*)value) {
- result->value = tor_malloc(ISO_TIME_LEN+1);
- format_iso_time(result->value, *(time_t*)value);
- } else {
- tor_free(result->key);
- tor_free(result);
- }
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_PORT:
- if (*(int*)value == CFG_AUTO_PORT) {
- result->value = tor_strdup("auto");
- escape_val = 0;
- break;
- }
- /* fall through */
- case CONFIG_TYPE_INTERVAL:
- case CONFIG_TYPE_MSEC_INTERVAL:
- case CONFIG_TYPE_UINT:
- case CONFIG_TYPE_INT:
- /* This means every or_options_t uint or bool element
- * needs to be an int. Not, say, a uint16_t or char. */
- tor_asprintf(&result->value, "%d", *(int*)value);
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_MEMUNIT:
- tor_asprintf(&result->value, U64_FORMAT,
- U64_PRINTF_ARG(*(uint64_t*)value));
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_DOUBLE:
- tor_asprintf(&result->value, "%f", *(double*)value);
- escape_val = 0; /* Can't need escape. */
- break;
-
- case CONFIG_TYPE_AUTOBOOL:
- if (*(int*)value == -1) {
- result->value = tor_strdup("auto");
- escape_val = 0;
- break;
- }
- /* fall through */
- case CONFIG_TYPE_BOOL:
- result->value = tor_strdup(*(int*)value ? "1" : "0");
- escape_val = 0; /* Can't need escape. */
- break;
- case CONFIG_TYPE_ROUTERSET:
- result->value = routerset_to_string(*(routerset_t**)value);
- break;
- case CONFIG_TYPE_CSV:
- if (*(smartlist_t**)value)
- result->value =
- smartlist_join_strings(*(smartlist_t**)value, ",", 0, NULL);
- else
- result->value = tor_strdup("");
- break;
- case CONFIG_TYPE_OBSOLETE:
- log_fn(LOG_PROTOCOL_WARN, LD_CONFIG,
- "You asked me for the value of an obsolete config option '%s'.",
- key);
- tor_free(result->key);
- tor_free(result);
- return NULL;
- case CONFIG_TYPE_LINELIST_S:
- log_warn(LD_CONFIG,
- "Can't return context-sensitive '%s' on its own", key);
- tor_free(result->key);
- tor_free(result);
- return NULL;
- case CONFIG_TYPE_LINELIST:
- case CONFIG_TYPE_LINELIST_V:
- tor_free(result->key);
- tor_free(result);
- result = config_lines_dup(*(const config_line_t**)value);
- break;
- default:
- tor_free(result->key);
- tor_free(result);
- log_warn(LD_BUG,"Unknown type %d for known key '%s'",
- var->type, key);
- return NULL;
- }
-
- if (escape_val) {
- config_line_t *line;
- for (line = result; line; line = line->next) {
- if (line->value && config_value_needs_escape(line->value)) {
- char *newval = esc_for_log(line->value);
- tor_free(line->value);
- line->value = newval;
- }
- }
- }
-
- return result;
-}
-
-/** Iterate through the linked list of requested options <b>list</b>.
- * For each item, convert as appropriate and assign to <b>options</b>.
- * If an item is unrecognized, set *msg and return -1 immediately,
- * else return 0 for success.
- *
- * If <b>clear_first</b>, interpret config options as replacing (not
- * extending) their previous values. If <b>clear_first</b> is set,
- * then <b>use_defaults</b> to decide if you set to defaults after
- * clearing, or make the value 0 or NULL.
- *
- * Here are the use cases:
- * 1. A non-empty AllowInvalid line in your torrc. Appends to current
- * if linelist, replaces current if csv.
- * 2. An empty AllowInvalid line in your torrc. Should clear it.
- * 3. "RESETCONF AllowInvalid" sets it to default.
- * 4. "SETCONF AllowInvalid" makes it NULL.
- * 5. "SETCONF AllowInvalid=foo" clears it and sets it to "foo".
- *
- * Use_defaults Clear_first
- * 0 0 "append"
- * 1 0 undefined, don't use
- * 0 1 "set to null first"
- * 1 1 "set to defaults first"
- * Return 0 on success, -1 on bad key, -2 on bad value.
- *
- * As an additional special case, if a LINELIST config option has
- * no value and clear_first is 0, then warn and ignore it.
- */
-
-/*
-There are three call cases for config_assign() currently.
-
-Case one: Torrc entry
-options_init_from_torrc() calls config_assign(0, 0)
- calls config_assign_line(0, 0).
- if value is empty, calls option_reset(0) and returns.
- calls config_assign_value(), appends.
-
-Case two: setconf
-options_trial_assign() calls config_assign(0, 1)
- calls config_reset_line(0)
- calls option_reset(0)
- calls option_clear().
- calls config_assign_line(0, 1).
- if value is empty, returns.
- calls config_assign_value(), appends.
-
-Case three: resetconf
-options_trial_assign() calls config_assign(1, 1)
- calls config_reset_line(1)
- calls option_reset(1)
- calls option_clear().
- calls config_assign_value(default)
- calls config_assign_line(1, 1).
- returns.
-*/
-static int
-config_assign(const config_format_t *fmt, void *options, config_line_t *list,
- int use_defaults, int clear_first, char **msg)
-{
- config_line_t *p;
- bitarray_t *options_seen;
- const int n_options = config_count_options(fmt);
-
- CHECK(fmt, options);
-
- /* pass 1: normalize keys */
- for (p = list; p; p = p->next) {
- const char *full = expand_abbrev(fmt, p->key, 0, 1);
- if (strcmp(full,p->key)) {
- tor_free(p->key);
- p->key = tor_strdup(full);
- }
- }
-
- /* pass 2: if we're reading from a resetting source, clear all
- * mentioned config options, and maybe set to their defaults. */
- if (clear_first) {
- for (p = list; p; p = p->next)
- config_reset_line(fmt, options, p->key, use_defaults);
- }
-
- options_seen = bitarray_init_zero(n_options);
- /* pass 3: assign. */
- while (list) {
- int r;
- if ((r=config_assign_line(fmt, options, list, use_defaults,
- clear_first, options_seen, msg))) {
- bitarray_free(options_seen);
- return r;
- }
- list = list->next;
- }
- bitarray_free(options_seen);
-
- /** Now we're done assigning a group of options to the configuration.
- * Subsequent group assignments should _replace_ linelists, not extend
- * them. */
- config_mark_lists_fragile(fmt, options);
-
- return 0;
+ return config_get_assigned_option(&options_format, options, key, 1);
}
/** Try assigning <b>list</b> to the global options. You do this by duping
@@ -2713,7 +1992,7 @@ options_trial_assign(config_line_t *list, int use_defaults,
int clear_first, char **msg)
{
int r;
- or_options_t *trial_options = options_dup(&options_format, get_options());
+ or_options_t *trial_options = config_dup(&options_format, get_options());
if ((r=config_assign(&options_format, trial_options,
list, use_defaults, clear_first, msg)) < 0) {
@@ -2721,7 +2000,8 @@ options_trial_assign(config_line_t *list, int use_defaults,
return r;
}
- if (options_validate(get_options_mutable(), trial_options, 1, msg) < 0) {
+ if (options_validate(get_options_mutable(), trial_options,
+ global_default_options, 1, msg) < 0) {
config_free(&options_format, trial_options);
return SETOPT_ERR_PARSE; /*XXX make this a separate return value. */
}
@@ -2740,90 +2020,6 @@ options_trial_assign(config_line_t *list, int use_defaults,
return SETOPT_OK;
}
-/** Reset config option <b>var</b> to 0, 0.0, NULL, or the equivalent.
- * Called from option_reset() and config_free(). */
-static void
-option_clear(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var)
-{
- void *lvalue = STRUCT_VAR_P(options, var->var_offset);
- (void)fmt; /* unused */
- switch (var->type) {
- case CONFIG_TYPE_STRING:
- case CONFIG_TYPE_FILENAME:
- tor_free(*(char**)lvalue);
- break;
- case CONFIG_TYPE_DOUBLE:
- *(double*)lvalue = 0.0;
- break;
- case CONFIG_TYPE_ISOTIME:
- *(time_t*)lvalue = 0;
- break;
- case CONFIG_TYPE_INTERVAL:
- case CONFIG_TYPE_MSEC_INTERVAL:
- case CONFIG_TYPE_UINT:
- case CONFIG_TYPE_INT:
- case CONFIG_TYPE_PORT:
- case CONFIG_TYPE_BOOL:
- *(int*)lvalue = 0;
- break;
- case CONFIG_TYPE_AUTOBOOL:
- *(int*)lvalue = -1;
- break;
- case CONFIG_TYPE_MEMUNIT:
- *(uint64_t*)lvalue = 0;
- break;
- case CONFIG_TYPE_ROUTERSET:
- if (*(routerset_t**)lvalue) {
- routerset_free(*(routerset_t**)lvalue);
- *(routerset_t**)lvalue = NULL;
- }
- break;
- case CONFIG_TYPE_CSV:
- if (*(smartlist_t**)lvalue) {
- SMARTLIST_FOREACH(*(smartlist_t **)lvalue, char *, cp, tor_free(cp));
- smartlist_free(*(smartlist_t **)lvalue);
- *(smartlist_t **)lvalue = NULL;
- }
- break;
- case CONFIG_TYPE_LINELIST:
- case CONFIG_TYPE_LINELIST_S:
- config_free_lines(*(config_line_t **)lvalue);
- *(config_line_t **)lvalue = NULL;
- break;
- case CONFIG_TYPE_LINELIST_V:
- /* handled by linelist_s. */
- break;
- case CONFIG_TYPE_OBSOLETE:
- break;
- }
-}
-
-/** Clear the option indexed by <b>var</b> in <b>options</b>. Then if
- * <b>use_defaults</b>, set it to its default value.
- * Called by config_init() and option_reset_line() and option_assign_line(). */
-static void
-option_reset(const config_format_t *fmt, or_options_t *options,
- const config_var_t *var, int use_defaults)
-{
- config_line_t *c;
- char *msg = NULL;
- CHECK(fmt, options);
- option_clear(fmt, options, var); /* clear it first */
- if (!use_defaults)
- return; /* all done */
- if (var->initvalue) {
- c = tor_malloc_zero(sizeof(config_line_t));
- c->key = tor_strdup(var->name);
- c->value = tor_strdup(var->initvalue);
- if (config_assign_value(fmt, options, c, &msg) < 0) {
- log_warn(LD_BUG, "Failed to assign default: %s", msg);
- tor_free(msg); /* if this happens it's a bug */
- }
- config_free_lines(c);
- }
-}
-
/** Print a usage message for tor. */
static void
print_usage(void)
@@ -2831,7 +2027,7 @@ print_usage(void)
printf(
"Copyright (c) 2001-2004, Roger Dingledine\n"
"Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson\n"
-"Copyright (c) 2007-2012, The Tor Project, Inc.\n\n"
+"Copyright (c) 2007-2013, The Tor Project, Inc.\n\n"
"tor -f <torrc> [args]\n"
"See man page for options, or https://www.torproject.org/ for "
"documentation.\n");
@@ -2843,8 +2039,8 @@ list_torrc_options(void)
{
int i;
smartlist_t *lines = smartlist_new();
- for (i = 0; _option_vars[i].name; ++i) {
- const config_var_t *var = &_option_vars[i];
+ for (i = 0; option_vars_[i].name; ++i) {
+ const config_var_t *var = &option_vars_[i];
if (var->type == CONFIG_TYPE_OBSOLETE ||
var->type == CONFIG_TYPE_LINELIST_V)
continue;
@@ -2855,21 +2051,41 @@ list_torrc_options(void)
/** Last value actually set by resolve_my_address. */
static uint32_t last_resolved_addr = 0;
+
+/** Accessor for last_resolved_addr from outside this file. */
+uint32_t
+get_last_resolved_addr(void)
+{
+ return last_resolved_addr;
+}
+
/**
- * Based on <b>options-\>Address</b>, guess our public IP address and put it
- * (in host order) into *<b>addr_out</b>. If <b>hostname_out</b> is provided,
- * set *<b>hostname_out</b> to a new string holding the hostname we used to
- * get the address. Return 0 if all is well, or -1 if we can't find a suitable
+ * Use <b>options-\>Address</b> to guess our public IP address.
+ *
+ * Return 0 if all is well, or -1 if we can't find a suitable
* public IP address.
+ *
+ * If we are returning 0:
+ * - Put our public IP address (in host order) into *<b>addr_out</b>.
+ * - If <b>method_out</b> is non-NULL, set *<b>method_out</b> to a static
+ * string describing how we arrived at our answer.
+ * - If <b>hostname_out</b> is non-NULL, and we resolved a hostname to
+ * get our address, set *<b>hostname_out</b> to a newly allocated string
+ * holding that hostname. (If we didn't get our address by resolving a
+ * hostname, set *<b>hostname_out</b> to NULL.)
+ *
* XXXX ipv6
*/
int
resolve_my_address(int warn_severity, const or_options_t *options,
- uint32_t *addr_out, char **hostname_out)
+ uint32_t *addr_out,
+ const char **method_out, char **hostname_out)
{
struct in_addr in;
uint32_t addr; /* host order */
char hostname[256];
+ const char *method_used;
+ const char *hostname_used;
int explicit_ip=1;
int explicit_hostname=1;
int from_interface=0;
@@ -2878,8 +2094,13 @@ resolve_my_address(int warn_severity, const or_options_t *options,
int notice_severity = warn_severity <= LOG_NOTICE ?
LOG_NOTICE : warn_severity;
+ tor_addr_t myaddr;
tor_assert(addr_out);
+ /*
+ * Step one: Fill in 'hostname' to be our best guess.
+ */
+
if (address && *address) {
strlcpy(hostname, address, sizeof(hostname));
} else { /* then we need to guess our address */
@@ -2890,10 +2111,14 @@ resolve_my_address(int warn_severity, const or_options_t *options,
log_fn(warn_severity, LD_NET,"Error obtaining local hostname");
return -1;
}
- log_debug(LD_CONFIG,"Guessed local host name as '%s'",hostname);
+ log_debug(LD_CONFIG, "Guessed local host name as '%s'", hostname);
}
- /* now we know hostname. resolve it and keep only the IP address */
+ /*
+ * Step two: Now that we know 'hostname', parse it or resolve it. If
+ * it doesn't parse or resolve, look at the interface address. Set 'addr'
+ * to be our (host-order) 32-bit answer.
+ */
if (tor_inet_aton(hostname, &in) == 0) {
/* then we have to resolve it */
@@ -2920,24 +2145,26 @@ resolve_my_address(int warn_severity, const or_options_t *options,
"local interface. Using that.", fmt_addr32(addr));
strlcpy(hostname, "<guessed from interfaces>", sizeof(hostname));
} else { /* resolved hostname into addr */
+ tor_addr_from_ipv4h(&myaddr, addr);
+
if (!explicit_hostname &&
- is_internal_IP(addr, 0)) {
- uint32_t interface_ip;
+ tor_addr_is_internal(&myaddr, 0)) {
+ tor_addr_t interface_ip;
log_fn(notice_severity, LD_CONFIG, "Guessed local hostname '%s' "
"resolves to a private IP address (%s). Trying something "
"else.", hostname, fmt_addr32(addr));
- if (get_interface_address(warn_severity, &interface_ip)) {
+ if (get_interface_address6(warn_severity, AF_INET, &interface_ip)<0) {
log_fn(warn_severity, LD_CONFIG,
"Could not get local interface IP address. Too bad.");
- } else if (is_internal_IP(interface_ip, 0)) {
+ } else if (tor_addr_is_internal(&interface_ip, 0)) {
log_fn(notice_severity, LD_CONFIG,
"Interface IP address '%s' is a private address too. "
- "Ignoring.", fmt_addr32(interface_ip));
+ "Ignoring.", fmt_addr(&interface_ip));
} else {
from_interface = 1;
- addr = interface_ip;
+ addr = tor_addr_to_ipv4h(&interface_ip);
log_fn(notice_severity, LD_CONFIG,
"Learned IP address '%s' for local interface."
" Using that.", fmt_addr32(addr));
@@ -2950,21 +2177,28 @@ resolve_my_address(int warn_severity, const or_options_t *options,
* illformed */
}
+ /*
+ * Step three: Check whether 'addr' is an internal IP address, and error
+ * out if it is and we don't want that.
+ */
+
+ tor_addr_from_ipv4h(&myaddr,addr);
+
addr_string = tor_dup_ip(addr);
- if (is_internal_IP(addr, 0)) {
+ if (tor_addr_is_internal(&myaddr, 0)) {
/* make sure we're ok with publishing an internal IP */
- if (!options->DirServers && !options->AlternateDirAuthority) {
- /* if they are using the default dirservers, disallow internal IPs
+ if (!options->DirAuthorities && !options->AlternateDirAuthority) {
+ /* if they are using the default authorities, disallow internal IPs
* always. */
log_fn(warn_severity, LD_CONFIG,
"Address '%s' resolves to private IP address '%s'. "
- "Tor servers that use the default DirServers must have public "
- "IP addresses.", hostname, addr_string);
+ "Tor servers that use the default DirAuthorities must have "
+ "public IP addresses.", hostname, addr_string);
tor_free(addr_string);
return -1;
}
if (!explicit_ip) {
- /* even if they've set their own dirservers, require an explicit IP if
+ /* even if they've set their own authorities, require an explicit IP if
* they're using an internal address. */
log_fn(warn_severity, LD_CONFIG, "Address '%s' resolves to private "
"IP address '%s'. Please set the Address config option to be "
@@ -2974,37 +2208,65 @@ resolve_my_address(int warn_severity, const or_options_t *options,
}
}
- log_debug(LD_CONFIG, "Resolved Address to '%s'.", fmt_addr32(addr));
+ /*
+ * Step four: We have a winner! 'addr' is our answer for sure, and
+ * 'addr_string' is its string form. Fill out the various fields to
+ * say how we decided it.
+ */
+
+ log_debug(LD_CONFIG, "Resolved Address to '%s'.", addr_string);
+
+ if (explicit_ip) {
+ method_used = "CONFIGURED";
+ hostname_used = NULL;
+ } else if (explicit_hostname) {
+ method_used = "RESOLVED";
+ hostname_used = hostname;
+ } else if (from_interface) {
+ method_used = "INTERFACE";
+ hostname_used = NULL;
+ } else {
+ method_used = "GETHOSTNAME";
+ hostname_used = hostname;
+ }
+
*addr_out = addr;
+ if (method_out)
+ *method_out = method_used;
+ if (hostname_out)
+ *hostname_out = hostname_used ? tor_strdup(hostname_used) : NULL;
+
+ /*
+ * Step five: Check if the answer has changed since last time (or if
+ * there was no last time), and if so call various functions to keep
+ * us up-to-date.
+ */
+
if (last_resolved_addr && last_resolved_addr != *addr_out) {
/* Leave this as a notice, regardless of the requested severity,
* at least until dynamic IP address support becomes bulletproof. */
log_notice(LD_NET,
- "Your IP address seems to have changed to %s. Updating.",
- addr_string);
+ "Your IP address seems to have changed to %s "
+ "(METHOD=%s%s%s). Updating.",
+ addr_string, method_used,
+ hostname_used ? " HOSTNAME=" : "",
+ hostname_used ? hostname_used : "");
ip_address_changed(0);
}
+
if (last_resolved_addr != *addr_out) {
- const char *method;
- const char *h = hostname;
- if (explicit_ip) {
- method = "CONFIGURED";
- h = NULL;
- } else if (explicit_hostname) {
- method = "RESOLVED";
- } else if (from_interface) {
- method = "INTERFACE";
- h = NULL;
- } else {
- method = "GETHOSTNAME";
- }
control_event_server_status(LOG_NOTICE,
- "EXTERNAL_ADDRESS ADDRESS=%s METHOD=%s %s%s",
- addr_string, method, h?"HOSTNAME=":"", h);
+ "EXTERNAL_ADDRESS ADDRESS=%s METHOD=%s%s%s",
+ addr_string, method_used,
+ hostname_used ? " HOSTNAME=" : "",
+ hostname_used ? hostname_used : "");
}
last_resolved_addr = *addr_out;
- if (hostname_out)
- *hostname_out = tor_strdup(hostname);
+
+ /*
+ * And finally, clean up and return success.
+ */
+
tor_free(addr_string);
return 0;
}
@@ -3029,7 +2291,7 @@ is_local_addr(const tor_addr_t *addr)
* resolve_my_address will never be called at all). In those cases,
* last_resolved_addr will be 0, and so checking to see whether ip is on
* the same /24 as last_resolved_addr will be the same as checking whether
- * it was on net 0, which is already done by is_internal_IP.
+ * it was on net 0, which is already done by tor_addr_is_internal.
*/
if ((last_resolved_addr & (uint32_t)0xffffff00ul)
== (ip & (uint32_t)0xffffff00ul))
@@ -3038,112 +2300,11 @@ is_local_addr(const tor_addr_t *addr)
return 0;
}
-/** Release storage held by <b>options</b>. */
-static void
-config_free(const config_format_t *fmt, void *options)
-{
- int i;
-
- if (!options)
- return;
-
- tor_assert(fmt);
-
- for (i=0; fmt->vars[i].name; ++i)
- option_clear(fmt, options, &(fmt->vars[i]));
- if (fmt->extra) {
- config_line_t **linep = STRUCT_VAR_P(options, fmt->extra->var_offset);
- config_free_lines(*linep);
- *linep = NULL;
- }
- tor_free(options);
-}
-
-/** Return true iff a and b contain identical keys and values in identical
- * order. */
-static int
-config_lines_eq(config_line_t *a, config_line_t *b)
-{
- while (a && b) {
- if (strcasecmp(a->key, b->key) || strcmp(a->value, b->value))
- return 0;
- a = a->next;
- b = b->next;
- }
- if (a || b)
- return 0;
- return 1;
-}
-
-/** Return the number of lines in <b>a</b> whose key is <b>key</b>. */
-static int
-config_count_key(const config_line_t *a, const char *key)
-{
- int n = 0;
- while (a) {
- if (!strcasecmp(a->key, key)) {
- ++n;
- }
- a = a->next;
- }
- return n;
-}
-
-/** Return true iff the option <b>name</b> has the same value in <b>o1</b>
- * and <b>o2</b>. Must not be called for LINELIST_S or OBSOLETE options.
- */
-static int
-option_is_same(const config_format_t *fmt,
- const or_options_t *o1, const or_options_t *o2,
- const char *name)
-{
- config_line_t *c1, *c2;
- int r = 1;
- CHECK(fmt, o1);
- CHECK(fmt, o2);
-
- c1 = get_assigned_option(fmt, o1, name, 0);
- c2 = get_assigned_option(fmt, o2, name, 0);
- r = config_lines_eq(c1, c2);
- config_free_lines(c1);
- config_free_lines(c2);
- return r;
-}
-
-/** Copy storage held by <b>old</b> into a new or_options_t and return it. */
-static or_options_t *
-options_dup(const config_format_t *fmt, const or_options_t *old)
-{
- or_options_t *newopts;
- int i;
- config_line_t *line;
-
- newopts = config_alloc(fmt);
- for (i=0; fmt->vars[i].name; ++i) {
- if (fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
- continue;
- if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE)
- continue;
- line = get_assigned_option(fmt, old, fmt->vars[i].name, 0);
- if (line) {
- char *msg = NULL;
- if (config_assign(fmt, newopts, line, 0, 0, &msg) < 0) {
- log_err(LD_BUG, "Config_get_assigned_option() generated "
- "something we couldn't config_assign(): %s", msg);
- tor_free(msg);
- tor_assert(0);
- }
- }
- config_free_lines(line);
- }
- return newopts;
-}
-
/** Return a new empty or_options_t. Used for testing. */
or_options_t *
options_new(void)
{
- return config_alloc(&options_format);
+ return config_new(&options_format);
}
/** Set <b>options</b> to hold reasonable defaults for most options.
@@ -3154,103 +2315,34 @@ options_init(or_options_t *options)
config_init(&options_format, options);
}
-/** Set all vars in the configuration object <b>options</b> to their default
- * values. */
-static void
-config_init(const config_format_t *fmt, void *options)
-{
- int i;
- const config_var_t *var;
- CHECK(fmt, options);
-
- for (i=0; fmt->vars[i].name; ++i) {
- var = &fmt->vars[i];
- if (!var->initvalue)
- continue; /* defaults to NULL or 0 */
- option_reset(fmt, options, var, 1);
- }
-}
-
-/** Allocate and return a new string holding the written-out values of the vars
- * in 'options'. If 'minimal', do not write out any default-valued vars.
- * Else, if comment_defaults, write default values as comments.
- */
-static char *
-config_dump(const config_format_t *fmt, const void *default_options,
- const void *options, int minimal,
- int comment_defaults)
-{
- smartlist_t *elements;
- const or_options_t *defaults = default_options;
- void *defaults_tmp = NULL;
- config_line_t *line, *assigned;
- char *result;
- int i;
- char *msg = NULL;
-
- if (defaults == NULL) {
- defaults = defaults_tmp = config_alloc(fmt);
- config_init(fmt, defaults_tmp);
- }
-
- /* XXX use a 1 here so we don't add a new log line while dumping */
- if (default_options == NULL) {
- if (fmt->validate_fn(NULL, defaults_tmp, 1, &msg) < 0) {
- log_err(LD_BUG, "Failed to validate default config.");
- tor_free(msg);
- tor_assert(0);
- }
- }
-
- elements = smartlist_new();
- for (i=0; fmt->vars[i].name; ++i) {
- int comment_option = 0;
- if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE ||
- fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
- continue;
- /* Don't save 'hidden' control variables. */
- if (!strcmpstart(fmt->vars[i].name, "__"))
- continue;
- if (minimal && option_is_same(fmt, options, defaults, fmt->vars[i].name))
- continue;
- else if (comment_defaults &&
- option_is_same(fmt, options, defaults, fmt->vars[i].name))
- comment_option = 1;
-
- line = assigned = get_assigned_option(fmt, options, fmt->vars[i].name, 1);
-
- for (; line; line = line->next) {
- smartlist_add_asprintf(elements, "%s%s %s\n",
- comment_option ? "# " : "",
- line->key, line->value);
- }
- config_free_lines(assigned);
- }
-
- if (fmt->extra) {
- line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset);
- for (; line; line = line->next) {
- smartlist_add_asprintf(elements, "%s %s\n", line->key, line->value);
- }
- }
-
- result = smartlist_join_strings(elements, "", 0, NULL);
- SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
- smartlist_free(elements);
- if (defaults_tmp)
- config_free(fmt, defaults_tmp);
- return result;
-}
-
/** Return a string containing a possible configuration file that would give
* the configuration in <b>options</b>. If <b>minimal</b> is true, do not
* include options that are the same as Tor's defaults.
*/
char *
-options_dump(const or_options_t *options, int minimal)
+options_dump(const or_options_t *options, int how_to_dump)
{
- return config_dump(&options_format, global_default_options,
- options, minimal, 0);
+ const or_options_t *use_defaults;
+ int minimal;
+ switch (how_to_dump) {
+ case OPTIONS_DUMP_MINIMAL:
+ use_defaults = global_default_options;
+ minimal = 1;
+ break;
+ case OPTIONS_DUMP_DEFAULTS:
+ use_defaults = NULL;
+ minimal = 1;
+ break;
+ case OPTIONS_DUMP_ALL:
+ use_defaults = NULL;
+ minimal = 0;
+ break;
+ default:
+ log_warn(LD_BUG, "Bogus value for how_to_dump==%d", how_to_dump);
+ return NULL;
+ }
+
+ return config_dump(&options_format, use_defaults, options, minimal, 0);
}
/** Return 0 if every element of sl is a string holding a decimal
@@ -3298,29 +2390,31 @@ ensure_bandwidth_cap(uint64_t *value, const char *desc, char **msg)
}
/** Parse an authority type from <b>options</b>-\>PublishServerDescriptor
- * and write it to <b>options</b>-\>_PublishServerDescriptor. Treat "1"
- * as "v2,v3" unless BridgeRelay is 1, in which case treat it as "bridge".
+ * and write it to <b>options</b>-\>PublishServerDescriptor_. Treat "1"
+ * as "v3" unless BridgeRelay is 1, in which case treat it as "bridge".
* Treat "0" as "".
* Return 0 on success or -1 if not a recognized authority type (in which
- * case the value of _PublishServerDescriptor is undefined). */
+ * case the value of PublishServerDescriptor_ is undefined). */
static int
compute_publishserverdescriptor(or_options_t *options)
{
smartlist_t *list = options->PublishServerDescriptor;
- dirinfo_type_t *auth = &options->_PublishServerDescriptor;
+ dirinfo_type_t *auth = &options->PublishServerDescriptor_;
*auth = NO_DIRINFO;
if (!list) /* empty list, answer is none */
return 0;
SMARTLIST_FOREACH_BEGIN(list, const char *, string) {
if (!strcasecmp(string, "v1"))
- *auth |= V1_DIRINFO;
+ log_warn(LD_CONFIG, "PublishServerDescriptor v1 has no effect, because "
+ "there are no v1 directory authorities anymore.");
else if (!strcmp(string, "1"))
if (options->BridgeRelay)
*auth |= BRIDGE_DIRINFO;
else
- *auth |= V2_DIRINFO | V3_DIRINFO;
+ *auth |= V3_DIRINFO;
else if (!strcasecmp(string, "v2"))
- *auth |= V2_DIRINFO;
+ log_warn(LD_CONFIG, "PublishServerDescriptor v2 has no effect, because "
+ "there are no v2 directory authorities anymore.");
else if (!strcasecmp(string, "v3"))
*auth |= V3_DIRINFO;
else if (!strcasecmp(string, "bridge"))
@@ -3341,6 +2435,11 @@ compute_publishserverdescriptor(or_options_t *options)
* services can overload the directory system. */
#define MIN_REND_POST_PERIOD (10*60)
+/** Higest allowable value for PredictedPortsRelevanceTime; if this is
+ * too high, our selection of exits will decrease for an extended
+ * period of time to an uncomfortable level .*/
+#define MAX_PREDICTED_CIRCS_RELEVANCE (60*60)
+
/** Highest allowable value for RendPostPeriod. */
#define MAX_DIR_PERIOD (MIN_ONION_KEY_LIFETIME/2)
@@ -3348,6 +2447,10 @@ compute_publishserverdescriptor(or_options_t *options)
* will generate too many circuits and potentially overload the network. */
#define MIN_MAX_CIRCUIT_DIRTINESS 10
+/** Highest allowable value for MaxCircuitDirtiness: prevents time_t
+ * overflows. */
+#define MAX_MAX_CIRCUIT_DIRTINESS (30*24*60*60)
+
/** Lowest allowable value for CircuitStreamTimeout; if this is too low, Tor
* will generate too many circuits and potentially overload the network. */
#define MIN_CIRCUIT_STREAM_TIMEOUT 10
@@ -3363,10 +2466,19 @@ compute_publishserverdescriptor(or_options_t *options)
* */
#define RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT (10)
-/** Return 0 if every setting in <b>options</b> is reasonable, and a
- * permissible transition from <b>old_options</b>. Else return -1.
- * Should have no side effects, except for normalizing the contents of
- * <b>options</b>.
+static int
+options_validate_cb(void *old_options, void *options, void *default_options,
+ int from_setconf, char **msg)
+{
+ return options_validate(old_options, options, default_options,
+ from_setconf, msg);
+}
+
+/** Return 0 if every setting in <b>options</b> is reasonable, is a
+ * permissible transition from <b>old_options</b>, and none of the
+ * testing-only settings differ from <b>default_options</b> unless in
+ * testing mode. Else return -1. Should have no side effects, except for
+ * normalizing the contents of <b>options</b>.
*
* On error, tor_strdup an error explanation into *<b>msg</b>.
*
@@ -3375,9 +2487,9 @@ 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,
- int from_setconf, char **msg)
+ or_options_t *default_options, int from_setconf, char **msg)
{
int i;
config_line_t *cl;
@@ -3385,7 +2497,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
int n_ports=0;
#define REJECT(arg) \
STMT_BEGIN *msg = tor_strdup(arg); return -1; STMT_END
-#define COMPLAIN(arg) STMT_BEGIN log(LOG_WARN, LD_CONFIG, arg); STMT_END
+#define COMPLAIN(arg) STMT_BEGIN log_warn(LD_CONFIG, arg); STMT_END
tor_assert(msg);
*msg = NULL;
@@ -3394,15 +2506,18 @@ options_validate(or_options_t *old_options, or_options_t *options,
(!strcmpstart(uname, "Windows 95") ||
!strcmpstart(uname, "Windows 98") ||
!strcmpstart(uname, "Windows Me"))) {
- log(LOG_WARN, LD_CONFIG, "Tor is running as a server, but you are "
+ log_warn(LD_CONFIG, "Tor is running as a server, but you are "
"running %s; this probably won't work. See "
- "https://wiki.torproject.org/TheOnionRouter/TorFAQ#ServerOS "
+ "https://www.torproject.org/docs/faq.html#BestOSForRelay "
"for details.", uname);
}
if (parse_ports(options, 1, msg, &n_ports) < 0)
return -1;
+ if (parse_outbound_addresses(options, 1, msg) < 0)
+ return -1;
+
if (validate_data_directory(options)<0)
REJECT("Invalid DataDirectory");
@@ -3420,7 +2535,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (server_mode(options) && !options->ContactInfo)
- log(LOG_NOTICE, LD_CONFIG, "Your ContactInfo config option is not set. "
+ log_notice(LD_CONFIG, "Your ContactInfo config option is not set. "
"Please consider setting it, so we can contact you if your server is "
"misconfigured or something else goes wrong.");
@@ -3432,13 +2547,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
config_line_append(&options->Logs, "Log", "warn stdout");
}
- if (options_init_logs(options, 1)<0) /* Validate the log(s) */
+ if (options_init_logs(options, 1)<0) /* Validate the tor_log(s) */
REJECT("Failed to validate Log options. See logs for details.");
if (authdir_mode(options)) {
/* confirm that our address isn't broken, so we can complain now */
uint32_t tmp;
- if (resolve_my_address(LOG_WARN, options, &tmp, NULL) < 0)
+ if (resolve_my_address(LOG_WARN, options, &tmp, NULL, NULL) < 0)
REJECT("Failed to resolve/guess local address. See logs for details.");
}
@@ -3450,15 +2565,48 @@ options_validate(or_options_t *old_options, or_options_t *options,
/* XXXX require that the only port not be DirPort? */
/* XXXX require that at least one port be listened-upon. */
if (n_ports == 0 && !options->RendConfigLines)
- log(LOG_WARN, LD_CONFIG,
+ log_warn(LD_CONFIG,
"SocksPort, TransPort, NATDPort, DNSPort, and ORPort are all "
"undefined, and there aren't any hidden services configured. "
"Tor will still run, but probably won't do anything.");
-#ifndef USE_TRANSPARENT
- /* XXXX024 I think we can remove this TransListenAddress */
- if (options->TransPort_set || options->TransListenAddress)
- REJECT("TransPort and TransListenAddress are disabled in this build.");
+ options->TransProxyType_parsed = TPT_DEFAULT;
+#ifdef USE_TRANSPARENT
+ if (options->TransProxyType) {
+ if (!strcasecmp(options->TransProxyType, "default")) {
+ options->TransProxyType_parsed = TPT_DEFAULT;
+ } else if (!strcasecmp(options->TransProxyType, "pf-divert")) {
+#ifndef __OpenBSD__
+ REJECT("pf-divert is a OpenBSD-specific feature.");
+#else
+ options->TransProxyType_parsed = TPT_PF_DIVERT;
+#endif
+ } else if (!strcasecmp(options->TransProxyType, "tproxy")) {
+#ifndef __linux__
+ REJECT("TPROXY is a Linux-specific feature.");
+#else
+ options->TransProxyType_parsed = TPT_TPROXY;
+#endif
+ } else if (!strcasecmp(options->TransProxyType, "ipfw")) {
+#ifndef __FreeBSD__
+ REJECT("ipfw is a FreeBSD-specific feature.");
+#else
+ options->TransProxyType_parsed = TPT_IPFW;
+#endif
+ } else {
+ REJECT("Unrecognized value for TransProxyType");
+ }
+
+ if (strcasecmp(options->TransProxyType, "default") &&
+ !options->TransPort_set) {
+ REJECT("Cannot use TransProxyType without any valid TransPort or "
+ "TransListenAddress.");
+ }
+ }
+#else
+ if (options->TransPort_set)
+ REJECT("TransPort and TransListenAddress are disabled "
+ "in this build.");
#endif
if (options->TokenBucketRefillInterval <= 0
@@ -3467,9 +2615,9 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->ExcludeExitNodes || options->ExcludeNodes) {
- options->_ExcludeExitNodesUnion = routerset_new();
- routerset_union(options->_ExcludeExitNodesUnion,options->ExcludeExitNodes);
- routerset_union(options->_ExcludeExitNodesUnion,options->ExcludeNodes);
+ options->ExcludeExitNodesUnion_ = routerset_new();
+ routerset_union(options->ExcludeExitNodesUnion_,options->ExcludeExitNodes);
+ routerset_union(options->ExcludeExitNodesUnion_,options->ExcludeNodes);
}
if (options->NodeFamilies) {
@@ -3484,6 +2632,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
}
+ if (options->TLSECGroup && (strcasecmp(options->TLSECGroup, "P256") &&
+ strcasecmp(options->TLSECGroup, "P224"))) {
+ COMPLAIN("Unrecognized TLSECGroup: Falling back to the default.");
+ tor_free(options->TLSECGroup);
+ }
+
if (options->ExcludeNodes && options->StrictNodes) {
COMPLAIN("You have asked to exclude certain relays from all positions "
"in your circuits. Expect hidden services and other Tor "
@@ -3493,8 +2647,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->AuthoritativeDir) {
if (!options->ContactInfo && !options->TestingTorNetwork)
REJECT("Authoritative directory servers must set ContactInfo");
- if (options->V1AuthoritativeDir && !options->RecommendedVersions)
- REJECT("V1 authoritative dir servers must set RecommendedVersions.");
if (!options->RecommendedClientVersions)
options->RecommendedClientVersions =
config_lines_dup(options->RecommendedVersions);
@@ -3516,11 +2668,10 @@ options_validate(or_options_t *old_options, or_options_t *options,
"extra-info documents. Setting DownloadExtraInfo.");
options->DownloadExtraInfo = 1;
}
- if (!(options->BridgeAuthoritativeDir || options->HSAuthoritativeDir ||
- options->V1AuthoritativeDir || options->V2AuthoritativeDir ||
+ if (!(options->BridgeAuthoritativeDir ||
options->V3AuthoritativeDir))
REJECT("AuthoritativeDir is set, but none of "
- "(Bridge/HS/V1/V2/V3)AuthoritativeDir is set.");
+ "(Bridge/V3)AuthoritativeDir is set.");
/* If we have a v3bandwidthsfile and it's broken, complain on startup */
if (options->V3BandwidthsFile && !old_options) {
dirserv_read_measured_bandwidths(options->V3BandwidthsFile, NULL);
@@ -3540,10 +2691,6 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("FetchDirInfoExtraEarly requires that you also set "
"FetchDirInfoEarly");
- if (options->HSAuthoritativeDir && proxy_mode(options))
- REJECT("Running as authoritative v0 HS directory, but also configured "
- "as a client.");
-
if (options->ConnLimit <= 0) {
tor_asprintf(msg,
"ConnLimit must be greater than 0, but was set to %d",
@@ -3551,6 +2698,18 @@ options_validate(or_options_t *old_options, or_options_t *options,
return -1;
}
+ if (options->PathsNeededToBuildCircuits >= 0.0) {
+ if (options->PathsNeededToBuildCircuits < 0.25) {
+ log_warn(LD_CONFIG, "PathsNeededToBuildCircuits is too low. Increasing "
+ "to 0.25");
+ options->PathsNeededToBuildCircuits = 0.25;
+ } else if (options->PathsNeededToBuildCircuits > 0.95) {
+ log_warn(LD_CONFIG, "PathsNeededToBuildCircuits is too high. Decreasing "
+ "to 0.95");
+ options->PathsNeededToBuildCircuits = 0.95;
+ }
+ }
+
if (options->MaxClientCircuitsPending <= 0 ||
options->MaxClientCircuitsPending > MAX_MAX_CLIENT_CIRCUITS_PENDING) {
tor_asprintf(msg,
@@ -3592,7 +2751,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
});
new_line->value = smartlist_join_strings(instead,",",0,NULL);
/* These have been deprecated since 0.1.1.5-alpha-cvs */
- log(LOG_NOTICE, LD_CONFIG,
+ log_notice(LD_CONFIG,
"Converting FascistFirewall and FirewallPorts "
"config options to new format: \"ReachableAddresses %s\"",
new_line->value);
@@ -3607,7 +2766,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
new_line->key = tor_strdup("ReachableDirAddresses");
new_line->value = tor_strdup("*:80");
options->ReachableDirAddresses = new_line;
- log(LOG_NOTICE, LD_CONFIG, "Converting FascistFirewall config option "
+ log_notice(LD_CONFIG, "Converting FascistFirewall config option "
"to new format: \"ReachableDirAddresses *:80\"");
}
if (!options->ReachableORAddresses) {
@@ -3615,7 +2774,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
new_line->key = tor_strdup("ReachableORAddresses");
new_line->value = tor_strdup("*:443");
options->ReachableORAddresses = new_line;
- log(LOG_NOTICE, LD_CONFIG, "Converting FascistFirewall config option "
+ log_notice(LD_CONFIG, "Converting FascistFirewall config option "
"to new format: \"ReachableORAddresses *:443\"");
}
}
@@ -3664,23 +2823,28 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->UseBridges && options->EntryNodes)
REJECT("You cannot set both UseBridges and EntryNodes.");
- if (options->EntryNodes && !options->UseEntryGuards)
- log_warn(LD_CONFIG, "EntryNodes is set, but UseEntryGuards is disabled. "
- "EntryNodes will be ignored.");
+ if (options->EntryNodes && !options->UseEntryGuards) {
+ REJECT("If EntryNodes is set, UseEntryGuards must be enabled.");
+ }
+
+ options->MaxMemInQueues =
+ compute_real_max_mem_in_queues(options->MaxMemInQueues_raw,
+ server_mode(options));
+
+ options->AllowInvalid_ = 0;
- options->_AllowInvalid = 0;
if (options->AllowInvalidNodes) {
SMARTLIST_FOREACH_BEGIN(options->AllowInvalidNodes, const char *, cp) {
if (!strcasecmp(cp, "entry"))
- options->_AllowInvalid |= ALLOW_INVALID_ENTRY;
+ options->AllowInvalid_ |= ALLOW_INVALID_ENTRY;
else if (!strcasecmp(cp, "exit"))
- options->_AllowInvalid |= ALLOW_INVALID_EXIT;
+ options->AllowInvalid_ |= ALLOW_INVALID_EXIT;
else if (!strcasecmp(cp, "middle"))
- options->_AllowInvalid |= ALLOW_INVALID_MIDDLE;
+ options->AllowInvalid_ |= ALLOW_INVALID_MIDDLE;
else if (!strcasecmp(cp, "introduction"))
- options->_AllowInvalid |= ALLOW_INVALID_INTRODUCTION;
+ options->AllowInvalid_ |= ALLOW_INVALID_INTRODUCTION;
else if (!strcasecmp(cp, "rendezvous"))
- options->_AllowInvalid |= ALLOW_INVALID_RENDEZVOUS;
+ options->AllowInvalid_ |= ALLOW_INVALID_RENDEZVOUS;
else {
tor_asprintf(msg,
"Unrecognized value '%s' in AllowInvalidNodes", cp);
@@ -3691,11 +2855,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (!options->SafeLogging ||
!strcasecmp(options->SafeLogging, "0")) {
- options->_SafeLogging = SAFELOG_SCRUB_NONE;
+ options->SafeLogging_ = SAFELOG_SCRUB_NONE;
} else if (!strcasecmp(options->SafeLogging, "relay")) {
- options->_SafeLogging = SAFELOG_SCRUB_RELAY;
+ options->SafeLogging_ = SAFELOG_SCRUB_RELAY;
} else if (!strcasecmp(options->SafeLogging, "1")) {
- options->_SafeLogging = SAFELOG_SCRUB_ALL;
+ options->SafeLogging_ = SAFELOG_SCRUB_ALL;
} else {
tor_asprintf(msg,
"Unrecognized value '%s' in SafeLogging",
@@ -3709,9 +2873,8 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if ((options->BridgeRelay
- || options->_PublishServerDescriptor & BRIDGE_DIRINFO)
- && (options->_PublishServerDescriptor
- & (V1_DIRINFO|V2_DIRINFO|V3_DIRINFO))) {
+ || options->PublishServerDescriptor_ & BRIDGE_DIRINFO)
+ && (options->PublishServerDescriptor_ & V3_DIRINFO)) {
REJECT("Bridges are not supposed to publish router descriptors to the "
"directory authorities. Please correct your "
"PublishServerDescriptor line.");
@@ -3743,6 +2906,13 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->RendPostPeriod = MAX_DIR_PERIOD;
}
+ if (options->PredictedPortsRelevanceTime >
+ MAX_PREDICTED_CIRCS_RELEVANCE) {
+ log_warn(LD_CONFIG, "PredictedPortsRelevanceTime is too large; "
+ "clipping to %ds.", MAX_PREDICTED_CIRCS_RELEVANCE);
+ options->PredictedPortsRelevanceTime = MAX_PREDICTED_CIRCS_RELEVANCE;
+ }
+
if (options->Tor2webMode && options->LearnCircuitBuildTimeout) {
/* LearnCircuitBuildTimeout and Tor2webMode are incompatible in
* two ways:
@@ -3761,15 +2931,73 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->LearnCircuitBuildTimeout = 0;
}
- if (!(options->LearnCircuitBuildTimeout) &&
- options->CircuitBuildTimeout < RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT) {
+ if (options->Tor2webMode && options->UseEntryGuards) {
+ /* tor2web mode clients do not (and should not) use entry guards
+ * in any meaningful way. Further, tor2web mode causes the hidden
+ * service client code to do things which break the path bias
+ * detector, and it's far easier to turn off entry guards (and
+ * thus the path bias detector with it) than to figure out how to
+ * make a piece of code which cannot possibly help tor2web mode
+ * users compatible with tor2web mode.
+ */
+ log_notice(LD_CONFIG,
+ "Tor2WebMode is enabled; disabling UseEntryGuards.");
+ options->UseEntryGuards = 0;
+ }
+
+ if (!(options->UseEntryGuards) &&
+ (options->RendConfigLines != NULL)) {
log_warn(LD_CONFIG,
- "CircuitBuildTimeout is shorter (%d seconds) than recommended "
- "(%d seconds), and LearnCircuitBuildTimeout is disabled. "
+ "UseEntryGuards is disabled, but you have configured one or more "
+ "hidden services on this Tor instance. Your hidden services "
+ "will be very easy to locate using a well-known attack -- see "
+ "http://freehaven.net/anonbib/#hs-attack06 for details.");
+ }
+
+ if (!options->LearnCircuitBuildTimeout && options->CircuitBuildTimeout &&
+ options->CircuitBuildTimeout < RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT) {
+ log_warn(LD_CONFIG,
+ "CircuitBuildTimeout is shorter (%d seconds) than the recommended "
+ "minimum (%d seconds), and LearnCircuitBuildTimeout is disabled. "
"If tor isn't working, raise this value or enable "
"LearnCircuitBuildTimeout.",
options->CircuitBuildTimeout,
RECOMMENDED_MIN_CIRCUIT_BUILD_TIMEOUT );
+ } else if (!options->LearnCircuitBuildTimeout &&
+ !options->CircuitBuildTimeout) {
+ log_notice(LD_CONFIG, "You disabled LearnCircuitBuildTimeout, but didn't "
+ "a CircuitBuildTimeout. I'll pick a plausible default.");
+ }
+
+ if (options->PathBiasNoticeRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasNoticeRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasWarnRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasWarnRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasExtremeRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasExtremeRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasNoticeUseRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasNoticeUseRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
+ }
+ if (options->PathBiasExtremeUseRate > 1.0) {
+ tor_asprintf(msg,
+ "PathBiasExtremeUseRate is too high. "
+ "It must be between 0 and 1.0");
+ return -1;
}
if (options->MaxCircuitDirtiness < MIN_MAX_CIRCUIT_DIRTINESS) {
@@ -3778,6 +3006,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
options->MaxCircuitDirtiness = MIN_MAX_CIRCUIT_DIRTINESS;
}
+ if (options->MaxCircuitDirtiness > MAX_MAX_CIRCUIT_DIRTINESS) {
+ log_warn(LD_CONFIG, "MaxCircuitDirtiness option is too high; "
+ "setting to %d days.", MAX_MAX_CIRCUIT_DIRTINESS/86400);
+ options->MaxCircuitDirtiness = MAX_MAX_CIRCUIT_DIRTINESS;
+ }
+
if (options->CircuitStreamTimeout &&
options->CircuitStreamTimeout < MIN_CIRCUIT_STREAM_TIMEOUT) {
log_warn(LD_CONFIG, "CircuitStreamTimeout option is too short; "
@@ -3795,6 +3029,11 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (options->KeepalivePeriod < 1)
REJECT("KeepalivePeriod option must be positive.");
+ if (options->PortForwarding && options->Sandbox) {
+ REJECT("PortForwarding is not compatible with Sandbox; at most one can "
+ "be set");
+ }
+
if (ensure_bandwidth_cap(&options->BandwidthRate,
"BandwidthRate", msg) < 0)
return -1;
@@ -3954,14 +3193,14 @@ options_validate(or_options_t *old_options, or_options_t *options,
size_t len;
len = strlen(options->Socks5ProxyUsername);
- if (len < 1 || len > 255)
+ if (len < 1 || len > MAX_SOCKS5_AUTH_FIELD_SIZE)
REJECT("Socks5ProxyUsername must be between 1 and 255 characters.");
if (!options->Socks5ProxyPassword)
REJECT("Socks5ProxyPassword must be included with Socks5ProxyUsername.");
len = strlen(options->Socks5ProxyPassword);
- if (len < 1 || len > 255)
+ if (len < 1 || len > MAX_SOCKS5_AUTH_FIELD_SIZE)
REJECT("Socks5ProxyPassword must be between 1 and 255 characters.");
} else if (options->Socks5ProxyPassword)
REJECT("Socks5ProxyPassword must be included with Socks5ProxyUsername.");
@@ -4021,7 +3260,7 @@ options_validate(or_options_t *old_options, or_options_t *options,
"You should also make sure you aren't listing this bridge's "
"fingerprint in any other MyFamily.");
}
- if (check_nickname_list(options->MyFamily, "MyFamily", msg))
+ if (check_nickname_list(&options->MyFamily, "MyFamily", msg))
return -1;
for (cl = options->NodeFamilies; cl; cl = cl->next) {
routerset_t *rs = routerset_new();
@@ -4035,34 +3274,64 @@ options_validate(or_options_t *old_options, or_options_t *options,
if (validate_addr_policies(options, msg) < 0)
return -1;
- if (validate_dir_authorities(options, old_options) < 0)
- REJECT("Directory authority line did not parse. See logs for details.");
+ if (validate_dir_servers(options, old_options) < 0)
+ REJECT("Directory authority/fallback line did not parse. See logs "
+ "for details.");
if (options->UseBridges && !options->Bridges)
REJECT("If you set UseBridges, you must specify at least one bridge.");
- if (options->UseBridges && !options->TunnelDirConns)
- REJECT("If you set UseBridges, you must set TunnelDirConns.");
for (cl = options->Bridges; cl; cl = cl->next) {
- if (parse_bridge_line(cl->value, 1)<0)
- REJECT("Bridge line did not parse. See logs for details.");
+ bridge_line_t *bridge_line = parse_bridge_line(cl->value);
+ if (!bridge_line)
+ REJECT("Bridge line did not parse. See logs for details.");
+ bridge_line_free(bridge_line);
}
for (cl = options->ClientTransportPlugin; cl; cl = cl->next) {
- if (parse_client_transport_line(cl->value, 1)<0)
- REJECT("Transport line did not parse. See logs for details.");
+ if (parse_client_transport_line(options, cl->value, 1)<0)
+ REJECT("Invalid client transport line. See logs for details.");
}
for (cl = options->ServerTransportPlugin; cl; cl = cl->next) {
- if (parse_server_transport_line(cl->value, 1)<0)
- REJECT("Server transport line did not parse. See logs for details.");
+ if (parse_server_transport_line(options, cl->value, 1)<0)
+ REJECT("Invalid server transport line. See logs for details.");
}
if (options->ServerTransportPlugin && !server_mode(options)) {
log_notice(LD_GENERAL, "Tor is not configured as a relay but you specified"
" a ServerTransportPlugin line (%s). The ServerTransportPlugin "
"line will be ignored.",
- esc_for_log(options->ServerTransportPlugin->value));
+ escaped(options->ServerTransportPlugin->value));
+ }
+
+ for (cl = options->ServerTransportListenAddr; cl; cl = cl->next) {
+ /** If get_bindaddr_from_transport_listen_line() fails with
+ 'transport' being NULL, it means that something went wrong
+ while parsing the ServerTransportListenAddr line. */
+ char *bindaddr = get_bindaddr_from_transport_listen_line(cl->value, NULL);
+ if (!bindaddr)
+ REJECT("ServerTransportListenAddr did not parse. See logs for details.");
+ tor_free(bindaddr);
+ }
+
+ if (options->ServerTransportListenAddr && !options->ServerTransportPlugin) {
+ log_notice(LD_GENERAL, "You need at least a single managed-proxy to "
+ "specify a transport listen address. The "
+ "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) {
@@ -4116,17 +3385,12 @@ options_validate(or_options_t *old_options, or_options_t *options,
REJECT("Failed to configure client authorization for hidden services. "
"See logs for details.");
- if (parse_virtual_addr_network(options->VirtualAddrNetwork, 1, NULL)<0)
+ if (parse_virtual_addr_network(options->VirtualAddrNetworkIPv4,
+ AF_INET, 1, msg)<0)
+ return -1;
+ if (parse_virtual_addr_network(options->VirtualAddrNetworkIPv6,
+ AF_INET6, 1, msg)<0)
return -1;
-
- if (options->PreferTunneledDirConns && !options->TunnelDirConns)
- REJECT("Must set TunnelDirConns if PreferTunneledDirConns is set.");
-
- if ((options->Socks4Proxy || options->Socks5Proxy) &&
- !options->HTTPProxy && !options->PreferTunneledDirConns)
- REJECT("When Socks4Proxy or Socks5Proxy is configured, "
- "PreferTunneledDirConns and TunnelDirConns must both be "
- "set to 1, or HTTPProxy must be configured.");
if (options->AutomapHostsSuffixes) {
SMARTLIST_FOREACH(options->AutomapHostsSuffixes, char *, suf,
@@ -4138,50 +3402,61 @@ options_validate(or_options_t *old_options, or_options_t *options,
}
if (options->TestingTorNetwork &&
- !(options->DirServers ||
+ !(options->DirAuthorities ||
(options->AlternateDirAuthority &&
options->AlternateBridgeAuthority))) {
REJECT("TestingTorNetwork may only be configured in combination with "
- "a non-default set of DirServer or both of AlternateDirAuthority "
- "and AlternateBridgeAuthority configured.");
+ "a non-default set of DirAuthority or both of "
+ "AlternateDirAuthority and AlternateBridgeAuthority configured.");
}
- if (options->AllowSingleHopExits && !options->DirServers) {
+ if (options->AllowSingleHopExits && !options->DirAuthorities) {
COMPLAIN("You have set AllowSingleHopExits; now your relay will allow "
"others to make one-hop exits. However, since by default most "
"clients avoid relays that set this option, most clients will "
"ignore you.");
}
- /*XXXX checking for defaults manually like this is a bit fragile.*/
-
- /* Keep changes to hard-coded values synchronous to man page and default
- * values table. */
- if (options->TestingV3AuthInitialVotingInterval != 30*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingV3AuthInitialVotingInterval may only be changed in testing "
- "Tor networks!");
- } else if (options->TestingV3AuthInitialVotingInterval < MIN_VOTE_INTERVAL) {
+#define CHECK_DEFAULT(arg) \
+ STMT_BEGIN \
+ if (!options->TestingTorNetwork && \
+ !options->UsingTestNetworkDefaults_ && \
+ !config_is_same(&options_format,options, \
+ default_options,#arg)) { \
+ REJECT(#arg " may only be changed in testing Tor " \
+ "networks!"); \
+ } STMT_END
+ CHECK_DEFAULT(TestingV3AuthInitialVotingInterval);
+ CHECK_DEFAULT(TestingV3AuthInitialVoteDelay);
+ CHECK_DEFAULT(TestingV3AuthInitialDistDelay);
+ CHECK_DEFAULT(TestingV3AuthVotingStartOffset);
+ CHECK_DEFAULT(TestingAuthDirTimeToLearnReachability);
+ CHECK_DEFAULT(TestingEstimatedDescriptorPropagationTime);
+ CHECK_DEFAULT(TestingServerDownloadSchedule);
+ CHECK_DEFAULT(TestingClientDownloadSchedule);
+ CHECK_DEFAULT(TestingServerConsensusDownloadSchedule);
+ CHECK_DEFAULT(TestingClientConsensusDownloadSchedule);
+ CHECK_DEFAULT(TestingBridgeDownloadSchedule);
+ CHECK_DEFAULT(TestingClientMaxIntervalWithoutRequest);
+ CHECK_DEFAULT(TestingDirConnectionMaxStall);
+ CHECK_DEFAULT(TestingConsensusMaxDownloadTries);
+ CHECK_DEFAULT(TestingDescriptorMaxDownloadTries);
+ CHECK_DEFAULT(TestingMicrodescMaxDownloadTries);
+ CHECK_DEFAULT(TestingCertMaxDownloadTries);
+#undef CHECK_DEFAULT
+
+ if (options->TestingV3AuthInitialVotingInterval < MIN_VOTE_INTERVAL) {
REJECT("TestingV3AuthInitialVotingInterval is insanely low.");
} else if (((30*60) % options->TestingV3AuthInitialVotingInterval) != 0) {
REJECT("TestingV3AuthInitialVotingInterval does not divide evenly into "
"30 minutes.");
}
- if (options->TestingV3AuthInitialVoteDelay != 5*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
-
- REJECT("TestingV3AuthInitialVoteDelay may only be changed in testing "
- "Tor networks!");
- } else if (options->TestingV3AuthInitialVoteDelay < MIN_VOTE_SECONDS) {
+ if (options->TestingV3AuthInitialVoteDelay < MIN_VOTE_SECONDS) {
REJECT("TestingV3AuthInitialVoteDelay is way too low.");
}
- if (options->TestingV3AuthInitialDistDelay != 5*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingV3AuthInitialDistDelay may only be changed in testing "
- "Tor networks!");
- } else if (options->TestingV3AuthInitialDistDelay < MIN_DIST_SECONDS) {
+ if (options->TestingV3AuthInitialDistDelay < MIN_DIST_SECONDS) {
REJECT("TestingV3AuthInitialDistDelay is way too low.");
}
@@ -4192,26 +3467,79 @@ options_validate(or_options_t *old_options, or_options_t *options,
"must be less than half TestingV3AuthInitialVotingInterval");
}
- if (options->TestingAuthDirTimeToLearnReachability != 30*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingAuthDirTimeToLearnReachability may only be changed in "
- "testing Tor networks!");
- } else if (options->TestingAuthDirTimeToLearnReachability < 0) {
+ if (options->TestingV3AuthVotingStartOffset >
+ MIN(options->TestingV3AuthInitialVotingInterval,
+ options->V3AuthVotingInterval)) {
+ REJECT("TestingV3AuthVotingStartOffset is higher than the voting "
+ "interval.");
+ }
+
+ if (options->TestingAuthDirTimeToLearnReachability < 0) {
REJECT("TestingAuthDirTimeToLearnReachability must be non-negative.");
} else if (options->TestingAuthDirTimeToLearnReachability > 2*60*60) {
COMPLAIN("TestingAuthDirTimeToLearnReachability is insanely high.");
}
- if (options->TestingEstimatedDescriptorPropagationTime != 10*60 &&
- !options->TestingTorNetwork && !options->_UsingTestNetworkDefaults) {
- REJECT("TestingEstimatedDescriptorPropagationTime may only be changed in "
- "testing Tor networks!");
- } else if (options->TestingEstimatedDescriptorPropagationTime < 0) {
+ if (options->TestingEstimatedDescriptorPropagationTime < 0) {
REJECT("TestingEstimatedDescriptorPropagationTime must be non-negative.");
} else if (options->TestingEstimatedDescriptorPropagationTime > 60*60) {
COMPLAIN("TestingEstimatedDescriptorPropagationTime is insanely high.");
}
+ if (options->TestingClientMaxIntervalWithoutRequest < 1) {
+ REJECT("TestingClientMaxIntervalWithoutRequest is way too low.");
+ } else if (options->TestingClientMaxIntervalWithoutRequest > 3600) {
+ COMPLAIN("TestingClientMaxIntervalWithoutRequest is insanely high.");
+ }
+
+ if (options->TestingDirConnectionMaxStall < 5) {
+ REJECT("TestingDirConnectionMaxStall is way too low.");
+ } else if (options->TestingDirConnectionMaxStall > 3600) {
+ COMPLAIN("TestingDirConnectionMaxStall is insanely high.");
+ }
+
+ if (options->TestingConsensusMaxDownloadTries < 2) {
+ REJECT("TestingConsensusMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingConsensusMaxDownloadTries > 800) {
+ COMPLAIN("TestingConsensusMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingDescriptorMaxDownloadTries < 2) {
+ REJECT("TestingDescriptorMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingDescriptorMaxDownloadTries > 800) {
+ COMPLAIN("TestingDescriptorMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingMicrodescMaxDownloadTries < 2) {
+ REJECT("TestingMicrodescMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingMicrodescMaxDownloadTries > 800) {
+ COMPLAIN("TestingMicrodescMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingCertMaxDownloadTries < 2) {
+ REJECT("TestingCertMaxDownloadTries must be greater than 1.");
+ } else if (options->TestingCertMaxDownloadTries > 800) {
+ COMPLAIN("TestingCertMaxDownloadTries is insanely high.");
+ }
+
+ if (options->TestingEnableConnBwEvent &&
+ !options->TestingTorNetwork && !options->UsingTestNetworkDefaults_) {
+ REJECT("TestingEnableConnBwEvent may only be changed in testing "
+ "Tor networks!");
+ }
+
+ if (options->TestingEnableCellStatsEvent &&
+ !options->TestingTorNetwork && !options->UsingTestNetworkDefaults_) {
+ REJECT("TestingEnableCellStatsEvent may only be changed in testing "
+ "Tor networks!");
+ }
+
+ if (options->TestingEnableTbEmptyEvent &&
+ !options->TestingTorNetwork && !options->UsingTestNetworkDefaults_) {
+ REJECT("TestingEnableTbEmptyEvent may only be changed in testing "
+ "Tor networks!");
+ }
+
if (options->TestingTorNetwork) {
log_warn(LD_CONFIG, "TestingTorNetwork is set. This will make your node "
"almost unusable in the public Tor network, and is "
@@ -4245,6 +3573,68 @@ options_validate(or_options_t *old_options, or_options_t *options,
#undef COMPLAIN
}
+/* Given the value that the user has set for MaxMemInQueues, compute the
+ * actual maximum value. We clip this value if it's too low, and autodetect
+ * it if it's set to 0. */
+static uint64_t
+compute_real_max_mem_in_queues(const uint64_t val, int log_guess)
+{
+ uint64_t result;
+
+ if (val == 0) {
+#define ONE_GIGABYTE (U64_LITERAL(1) << 30)
+#define ONE_MEGABYTE (U64_LITERAL(1) << 20)
+#if SIZEOF_VOID_P >= 8
+#define MAX_DEFAULT_MAXMEM (8*ONE_GIGABYTE)
+#else
+#define MAX_DEFAULT_MAXMEM (2*ONE_GIGABYTE)
+#endif
+ /* The user didn't pick a memory limit. Choose a very large one
+ * that is still smaller than the system memory */
+ static int notice_sent = 0;
+ size_t ram = 0;
+ if (get_total_system_memory(&ram) < 0) {
+ /* We couldn't determine our total system memory! */
+#if SIZEOF_VOID_P >= 8
+ /* 64-bit system. Let's hope for 8 GB. */
+ result = 8 * ONE_GIGABYTE;
+#else
+ /* (presumably) 32-bit system. Let's hope for 1 GB. */
+ result = ONE_GIGABYTE;
+#endif
+ } else {
+ /* We detected it, so let's pick 3/4 of the total RAM as our limit. */
+ const uint64_t avail = (ram / 4) * 3;
+
+ /* Make sure it's in range from 0.25 GB to 8 GB. */
+ if (avail > MAX_DEFAULT_MAXMEM) {
+ /* If you want to use more than this much RAM, you need to configure
+ it yourself */
+ result = MAX_DEFAULT_MAXMEM;
+ } else if (avail < ONE_GIGABYTE / 4) {
+ result = ONE_GIGABYTE / 4;
+ } else {
+ result = avail;
+ }
+ }
+ if (log_guess && ! notice_sent) {
+ log_notice(LD_CONFIG, "%sMaxMemInQueues is set to "U64_FORMAT" MB. "
+ "You can override this by setting MaxMemInQueues by hand.",
+ ram ? "Based on detected system memory, " : "",
+ U64_PRINTF_ARG(result / ONE_MEGABYTE));
+ notice_sent = 1;
+ }
+ return result;
+ } else if (val < ONE_GIGABYTE / 4) {
+ log_warn(LD_CONFIG, "MaxMemInQueues must be at least 256 MB for now. "
+ "Ideally, have it as large as you can afford.");
+ return ONE_GIGABYTE / 4;
+ } else {
+ /* The value was fine all along */
+ return val;
+ }
+}
+
/** Helper: return true iff s1 and s2 are both NULL, or both non-NULL
* equal strings. */
static int
@@ -4273,6 +3663,12 @@ options_transition_allowed(const or_options_t *old,
return -1;
}
+ if (old->Sandbox != new_val->Sandbox) {
+ *msg = tor_strdup("While Tor is running, changing Sandbox "
+ "is not allowed.");
+ return -1;
+ }
+
if (strcmp(old->DataDirectory,new_val->DataDirectory)!=0) {
tor_asprintf(msg,
"While Tor is running, changing DataDirectory "
@@ -4325,6 +3721,38 @@ options_transition_allowed(const or_options_t *old,
return -1;
}
+ if (sandbox_is_active()) {
+#define SB_NOCHANGE_STR(opt) \
+ do { \
+ if (! opt_streq(old->opt, new_val->opt)) { \
+ *msg = tor_strdup("Can't change " #opt " while Sandbox is active"); \
+ return -1; \
+ } \
+ } while (0)
+
+ SB_NOCHANGE_STR(PidFile);
+ SB_NOCHANGE_STR(ServerDNSResolvConfFile);
+ SB_NOCHANGE_STR(DirPortFrontPage);
+ SB_NOCHANGE_STR(CookieAuthFile);
+ SB_NOCHANGE_STR(ExtORPortCookieAuthFile);
+
+#undef SB_NOCHANGE_STR
+
+ if (! config_lines_eq(old->Logs, new_val->Logs)) {
+ *msg = tor_strdup("Can't change Logs while Sandbox is active");
+ return -1;
+ }
+ if (old->ConnLimit != new_val->ConnLimit) {
+ *msg = tor_strdup("Can't change ConnLimit while Sandbox is active");
+ return -1;
+ }
+ if (server_mode(old) != server_mode(new_val)) {
+ *msg = tor_strdup("Can't start/stop being a server while "
+ "Sandbox is active");
+ return -1;
+ }
+ }
+
return 0;
}
@@ -4339,7 +3767,7 @@ options_transition_affects_workers(const or_options_t *old_options,
!config_lines_eq(old_options->ORPort_lines, new_options->ORPort_lines) ||
old_options->ServerDNSSearchDomains !=
new_options->ServerDNSSearchDomains ||
- old_options->_SafeLogging != new_options->_SafeLogging ||
+ old_options->SafeLogging_ != new_options->SafeLogging_ ||
old_options->ClientOnly != new_options->ClientOnly ||
public_server_mode(old_options) != public_server_mode(new_options) ||
!config_lines_eq(old_options->Logs, new_options->Logs) ||
@@ -4366,14 +3794,15 @@ options_transition_affects_descriptor(const or_options_t *old_options,
!config_lines_eq(old_options->ExitPolicy,new_options->ExitPolicy) ||
old_options->ExitPolicyRejectPrivate !=
new_options->ExitPolicyRejectPrivate ||
+ old_options->IPv6Exit != new_options->IPv6Exit ||
!config_lines_eq(old_options->ORPort_lines,
new_options->ORPort_lines) ||
!config_lines_eq(old_options->DirPort_lines,
new_options->DirPort_lines) ||
old_options->ClientOnly != new_options->ClientOnly ||
old_options->DisableNetwork != new_options->DisableNetwork ||
- old_options->_PublishServerDescriptor !=
- new_options->_PublishServerDescriptor ||
+ old_options->PublishServerDescriptor_ !=
+ new_options->PublishServerDescriptor_ ||
get_effective_bwrate(old_options) != get_effective_bwrate(new_options) ||
get_effective_bwburst(old_options) !=
get_effective_bwburst(new_options) ||
@@ -4469,31 +3898,63 @@ get_default_conf_file(int defaults_file)
}
/** Verify whether lst is a string containing valid-looking comma-separated
- * nicknames, or NULL. Return 0 on success. Warn and return -1 on failure.
+ * nicknames, or NULL. Will normalise <b>lst</b> to prefix '$' to any nickname
+ * or fingerprint that needs it. Return 0 on success.
+ * Warn and return -1 on failure.
*/
static int
-check_nickname_list(const char *lst, const char *name, char **msg)
+check_nickname_list(char **lst, const char *name, char **msg)
{
int r = 0;
smartlist_t *sl;
+ int changes = 0;
- if (!lst)
+ if (!*lst)
return 0;
sl = smartlist_new();
- smartlist_split_string(sl, lst, ",",
+ smartlist_split_string(sl, *lst, ",",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK|SPLIT_STRIP_SPACE, 0);
- SMARTLIST_FOREACH(sl, const char *, s,
+ SMARTLIST_FOREACH_BEGIN(sl, char *, s)
{
if (!is_legal_nickname_or_hexdigest(s)) {
+ // check if first char is dollar
+ if (s[0] != '$') {
+ // Try again but with a dollar symbol prepended
+ char *prepended;
+ tor_asprintf(&prepended, "$%s", s);
+
+ if (is_legal_nickname_or_hexdigest(prepended)) {
+ // The nickname is valid when it's prepended, swap the current
+ // version with a prepended one
+ tor_free(s);
+ SMARTLIST_REPLACE_CURRENT(sl, s, prepended);
+ changes = 1;
+ continue;
+ }
+
+ // Still not valid, free and fallback to error message
+ tor_free(prepended);
+ }
+
tor_asprintf(msg, "Invalid nickname '%s' in %s line", s, name);
r = -1;
break;
}
- });
+ }
+ SMARTLIST_FOREACH_END(s);
+
+ // Replace the caller's nickname list with a fixed one
+ if (changes && r == 0) {
+ char *newNicknames = smartlist_join_strings(sl, ", ", 0, NULL);
+ tor_free(*lst);
+ *lst = newNicknames;
+ }
+
SMARTLIST_FOREACH(sl, char *, s, tor_free(s));
smartlist_free(sl);
+
return r;
}
@@ -4509,26 +3970,26 @@ check_nickname_list(const char *lst, const char *name, char **msg)
* filename if it doesn't exist.
*/
static char *
-find_torrc_filename(int argc, char **argv,
+find_torrc_filename(config_line_t *cmd_arg,
int defaults_file,
int *using_default_fname, int *ignore_missing_torrc)
{
char *fname=NULL;
- int i;
+ config_line_t *p_index;
const char *fname_opt = defaults_file ? "--defaults-torrc" : "-f";
const char *ignore_opt = defaults_file ? NULL : "--ignore-missing-torrc";
if (defaults_file)
*ignore_missing_torrc = 1;
- for (i = 1; i < argc; ++i) {
- if (i < argc-1 && !strcmp(argv[i],fname_opt)) {
+ for (p_index = cmd_arg; p_index; p_index = p_index->next) {
+ if (!strcmp(p_index->key, fname_opt)) {
if (fname) {
- log(LOG_WARN, LD_CONFIG, "Duplicate %s options on command line.",
+ log_warn(LD_CONFIG, "Duplicate %s options on command line.",
fname_opt);
tor_free(fname);
}
- fname = expand_filename(argv[i+1]);
+ fname = expand_filename(p_index->value);
{
char *absfname;
@@ -4538,8 +3999,7 @@ find_torrc_filename(int argc, char **argv,
}
*using_default_fname = 0;
- ++i;
- } else if (ignore_opt && !strcmp(argv[i],ignore_opt)) {
+ } else if (ignore_opt && !strcmp(p_index->key,ignore_opt)) {
*ignore_missing_torrc = 1;
}
}
@@ -4576,7 +4036,7 @@ find_torrc_filename(int argc, char **argv,
* Return the contents of the file on success, and NULL on failure.
*/
static char *
-load_torrc_from_disk(int argc, char **argv, int defaults_file)
+load_torrc_from_disk(config_line_t *cmd_arg, int defaults_file)
{
char *fname=NULL;
char *cf = NULL;
@@ -4584,10 +4044,10 @@ load_torrc_from_disk(int argc, char **argv, int defaults_file)
int ignore_missing_torrc = 0;
char **fname_var = defaults_file ? &torrc_defaults_fname : &torrc_fname;
- fname = find_torrc_filename(argc, argv, defaults_file,
+ fname = find_torrc_filename(cmd_arg, defaults_file,
&using_default_torrc, &ignore_missing_torrc);
tor_assert(fname);
- log(LOG_DEBUG, LD_CONFIG, "Opening config file \"%s\"", fname);
+ log_debug(LD_CONFIG, "Opening config file \"%s\"", fname);
tor_free(*fname_var);
*fname_var = fname;
@@ -4597,18 +4057,18 @@ load_torrc_from_disk(int argc, char **argv, int defaults_file)
!(cf = read_file_to_str(fname,0,NULL))) {
if (using_default_torrc == 1 || ignore_missing_torrc) {
if (!defaults_file)
- log(LOG_NOTICE, LD_CONFIG, "Configuration file \"%s\" not present, "
+ log_notice(LD_CONFIG, "Configuration file \"%s\" not present, "
"using reasonable defaults.", fname);
tor_free(fname); /* sets fname to NULL */
*fname_var = NULL;
cf = tor_strdup("");
} else {
- log(LOG_WARN, LD_CONFIG,
+ log_warn(LD_CONFIG,
"Unable to open configuration file \"%s\".", fname);
goto err;
}
} else {
- log(LOG_NOTICE, LD_CONFIG, "Read configuration file \"%s\".", fname);
+ log_notice(LD_CONFIG, "Read configuration file \"%s\".", fname);
}
return cf;
@@ -4626,70 +4086,92 @@ int
options_init_from_torrc(int argc, char **argv)
{
char *cf=NULL, *cf_defaults=NULL;
- int i, command;
+ int command;
int retval = -1;
- static char **backup_argv;
- static int backup_argc;
char *command_arg = NULL;
char *errmsg=NULL;
+ config_line_t *p_index = NULL;
+ config_line_t *cmdline_only_options = NULL;
- if (argv) { /* first time we're called. save command line args */
- backup_argv = argv;
- backup_argc = argc;
- } else { /* we're reloading. need to clean up old options first. */
- argv = backup_argv;
- argc = backup_argc;
+ /* Go through command-line variables */
+ if (! have_parsed_cmdline) {
+ /* Or we could redo the list every time we pass this place.
+ * It does not really matter */
+ if (config_parse_commandline(argc, argv, 0, &global_cmdline_options,
+ &global_cmdline_only_options) < 0) {
+ goto err;
+ }
+ have_parsed_cmdline = 1;
}
- if (argc > 1 && (!strcmp(argv[1], "-h") || !strcmp(argv[1],"--help"))) {
+ cmdline_only_options = global_cmdline_only_options;
+
+ if (config_line_find(cmdline_only_options, "-h") ||
+ config_line_find(cmdline_only_options, "--help")) {
print_usage();
exit(0);
}
- if (argc > 1 && !strcmp(argv[1], "--list-torrc-options")) {
+ if (config_line_find(cmdline_only_options, "--list-torrc-options")) {
/* For documenting validating whether we've documented everything. */
list_torrc_options();
exit(0);
}
- if (argc > 1 && (!strcmp(argv[1],"--version"))) {
+ if (config_line_find(cmdline_only_options, "--version")) {
printf("Tor version %s.\n",get_version());
exit(0);
}
- if (argc > 1 && (!strcmp(argv[1],"--digests"))) {
+
+ if (config_line_find(cmdline_only_options, "--digests")) {
printf("Tor version %s.\n",get_version());
printf("%s", libor_get_digests());
printf("%s", tor_get_digests());
exit(0);
}
- /* Go through command-line variables */
- if (!global_cmdline_options) {
- /* Or we could redo the list every time we pass this place.
- * It does not really matter */
- if (config_get_commandlines(argc, argv, &global_cmdline_options) < 0) {
- goto err;
- }
+ if (config_line_find(cmdline_only_options, "--library-versions")) {
+ printf("Tor version %s. \n", get_version());
+ printf("Library versions\tCompiled\t\tRuntime\n");
+ printf("Libevent\t\t%-15s\t\t%s\n",
+ tor_libevent_get_header_version_str(),
+ tor_libevent_get_version_str());
+ printf("OpenSSL \t\t%-15s\t\t%s\n",
+ crypto_openssl_get_header_version_str(),
+ crypto_openssl_get_version_str());
+ printf("Zlib \t\t%-15s\t\t%s\n",
+ tor_zlib_get_header_version_str(),
+ tor_zlib_get_version_str());
+ //TODO: Hex versions?
+ exit(0);
}
command = CMD_RUN_TOR;
- for (i = 1; i < argc; ++i) {
- if (!strcmp(argv[i],"--list-fingerprint")) {
+ for (p_index = cmdline_only_options; p_index; p_index = p_index->next) {
+ if (!strcmp(p_index->key,"--list-fingerprint")) {
command = CMD_LIST_FINGERPRINT;
- } else if (!strcmp(argv[i],"--hash-password")) {
+ } else if (!strcmp(p_index->key, "--hash-password")) {
command = CMD_HASH_PASSWORD;
- command_arg = tor_strdup( (i < argc-1) ? argv[i+1] : "");
- ++i;
- } else if (!strcmp(argv[i],"--verify-config")) {
+ command_arg = p_index->value;
+ } else if (!strcmp(p_index->key, "--dump-config")) {
+ command = CMD_DUMP_CONFIG;
+ command_arg = p_index->value;
+ } else if (!strcmp(p_index->key, "--verify-config")) {
command = CMD_VERIFY_CONFIG;
}
}
if (command == CMD_HASH_PASSWORD) {
+ cf_defaults = tor_strdup("");
cf = tor_strdup("");
} else {
- cf_defaults = load_torrc_from_disk(argc, argv, 1);
- cf = load_torrc_from_disk(argc, argv, 0);
- if (!cf)
- goto err;
+ cf_defaults = load_torrc_from_disk(cmdline_only_options, 1);
+ cf = load_torrc_from_disk(cmdline_only_options, 0);
+ if (!cf) {
+ if (config_line_find(cmdline_only_options, "--allow-missing-torrc")) {
+ cf = tor_strdup("");
+ } else {
+ goto err;
+ }
+ }
}
retval = options_init_from_string(cf_defaults, cf, command, command_arg,
@@ -4700,7 +4182,7 @@ options_init_from_torrc(int argc, char **argv)
tor_free(cf);
tor_free(cf_defaults);
if (errmsg) {
- log(LOG_WARN,LD_CONFIG,"%s", errmsg);
+ log_warn(LD_CONFIG,"%s", errmsg);
tor_free(errmsg);
}
return retval < 0 ? -1 : 0;
@@ -4730,10 +4212,10 @@ options_init_from_string(const char *cf_defaults, const char *cf,
this is the first time we run*/
newoptions = tor_malloc_zero(sizeof(or_options_t));
- newoptions->_magic = OR_OPTIONS_MAGIC;
+ newoptions->magic_ = OR_OPTIONS_MAGIC;
options_init(newoptions);
newoptions->command = command;
- newoptions->command_arg = command_arg;
+ newoptions->command_arg = command_arg ? tor_strdup(command_arg) : NULL;
for (i = 0; i < 2; ++i) {
const char *body = i==0 ? cf_defaults : cf;
@@ -4752,7 +4234,11 @@ options_init_from_string(const char *cf_defaults, const char *cf,
goto err;
}
if (i==0)
- newdefaultoptions = options_dup(&options_format, newoptions);
+ newdefaultoptions = config_dup(&options_format, newoptions);
+ }
+
+ if (newdefaultoptions == NULL) {
+ newdefaultoptions = config_dup(&options_format, global_default_options);
}
/* Go through command-line variables too */
@@ -4790,10 +4276,10 @@ options_init_from_string(const char *cf_defaults, const char *cf,
config_free(&options_format, newdefaultoptions);
newdefaultoptions = NULL;
newoptions = tor_malloc_zero(sizeof(or_options_t));
- newoptions->_magic = OR_OPTIONS_MAGIC;
+ newoptions->magic_ = OR_OPTIONS_MAGIC;
options_init(newoptions);
newoptions->command = command;
- newoptions->command_arg = command_arg;
+ newoptions->command_arg = command_arg ? tor_strdup(command_arg) : NULL;
/* Assign all options a second time. */
for (i = 0; i < 2; ++i) {
@@ -4813,7 +4299,7 @@ options_init_from_string(const char *cf_defaults, const char *cf,
goto err;
}
if (i==0)
- newdefaultoptions = options_dup(&options_format, newoptions);
+ newdefaultoptions = config_dup(&options_format, newoptions);
}
/* Assign command-line variables a second time too */
retval = config_assign(&options_format, newoptions,
@@ -4825,7 +4311,8 @@ options_init_from_string(const char *cf_defaults, const char *cf,
}
/* Validate newoptions */
- if (options_validate(oldoptions, newoptions, 0, msg) < 0) {
+ if (options_validate(oldoptions, newoptions, newdefaultoptions,
+ 0, msg) < 0) {
err = SETOPT_ERR_PARSE; /*XXX make this a separate return value.*/
goto err;
}
@@ -5082,21 +4569,72 @@ options_init_logs(or_options_t *options, int validate_only)
return ok?0:-1;
}
+/** Given a smartlist of SOCKS arguments to be passed to a transport
+ * proxy in <b>args</b>, validate them and return -1 if they are
+ * corrupted. Return 0 if they seem OK. */
+static int
+validate_transport_socks_arguments(const smartlist_t *args)
+{
+ char *socks_string = NULL;
+ size_t socks_string_len;
+
+ tor_assert(args);
+ tor_assert(smartlist_len(args) > 0);
+
+ SMARTLIST_FOREACH_BEGIN(args, const char *, s) {
+ if (!string_is_key_value(LOG_WARN, s)) { /* items should be k=v items */
+ log_warn(LD_CONFIG, "'%s' is not a k=v item.", s);
+ return -1;
+ }
+ } SMARTLIST_FOREACH_END(s);
+
+ socks_string = pt_stringify_socks_args(args);
+ if (!socks_string)
+ return -1;
+
+ socks_string_len = strlen(socks_string);
+ tor_free(socks_string);
+
+ if (socks_string_len > MAX_SOCKS5_AUTH_SIZE_TOTAL) {
+ log_warn(LD_CONFIG, "SOCKS arguments can't be more than %u bytes (%lu).",
+ MAX_SOCKS5_AUTH_SIZE_TOTAL,
+ (unsigned long) socks_string_len);
+ return -1;
+ }
+
+ return 0;
+}
+
+/** Deallocate a bridge_line_t structure. */
+/* private */ void
+bridge_line_free(bridge_line_t *bridge_line)
+{
+ if (!bridge_line)
+ return;
+
+ if (bridge_line->socks_args) {
+ SMARTLIST_FOREACH(bridge_line->socks_args, char*, s, tor_free(s));
+ smartlist_free(bridge_line->socks_args);
+ }
+ tor_free(bridge_line->transport_name);
+ tor_free(bridge_line);
+}
+
/** Read the contents of a Bridge line from <b>line</b>. Return 0
* if the line is well-formed, and -1 if it isn't. If
* <b>validate_only</b> is 0, and the line is well-formed, then add
- * the bridge described in the line to our internal bridge list. */
-static int
-parse_bridge_line(const char *line, int validate_only)
+ * the bridge described in the line to our internal bridge list.
+ *
+ * Bridge line format:
+ * Bridge [transport] IP:PORT [id-fingerprint] [k=v] [k=v] ...
+ */
+/* private */ bridge_line_t *
+parse_bridge_line(const char *line)
{
smartlist_t *items = NULL;
- int r;
char *addrport=NULL, *fingerprint=NULL;
- char *transport_name=NULL;
- char *field1=NULL;
- tor_addr_t addr;
- uint16_t port = 0;
- char digest[DIGEST_LEN];
+ char *field=NULL;
+ bridge_line_t *bridge_line = tor_malloc_zero(sizeof(bridge_line_t));
items = smartlist_new();
smartlist_split_string(items, line, NULL,
@@ -5106,80 +4644,109 @@ parse_bridge_line(const char *line, int validate_only)
goto err;
}
- /* field1 is either a transport name or addrport */
- field1 = smartlist_get(items, 0);
+ /* first field is either a transport name or addrport */
+ field = smartlist_get(items, 0);
smartlist_del_keeporder(items, 0);
- if (!(strstr(field1, ".") || strstr(field1, ":"))) {
- /* new-style bridge line */
- transport_name = field1;
+ if (string_is_C_identifier(field)) {
+ /* It's a transport name. */
+ bridge_line->transport_name = field;
if (smartlist_len(items) < 1) {
log_warn(LD_CONFIG, "Too few items to Bridge line.");
goto err;
}
- addrport = smartlist_get(items, 0);
+ addrport = smartlist_get(items, 0); /* Next field is addrport then. */
smartlist_del_keeporder(items, 0);
} else {
- addrport = field1;
+ addrport = field;
}
- if (tor_addr_port_lookup(addrport, &addr, &port)<0) {
+ if (tor_addr_port_parse(LOG_INFO, addrport,
+ &bridge_line->addr, &bridge_line->port, 443)<0) {
log_warn(LD_CONFIG, "Error parsing Bridge address '%s'", addrport);
goto err;
}
- if (!port) {
- log_info(LD_CONFIG,
- "Bridge address '%s' has no port; using default port 443.",
- addrport);
- port = 443;
- }
+ /* If transports are enabled, next field could be a fingerprint or a
+ socks argument. If transports are disabled, next field must be
+ a fingerprint. */
if (smartlist_len(items)) {
- fingerprint = smartlist_join_strings(items, "", 0, NULL);
+ if (bridge_line->transport_name) { /* transports enabled: */
+ field = smartlist_get(items, 0);
+ smartlist_del_keeporder(items, 0);
+
+ /* If it's a key=value pair, then it's a SOCKS argument for the
+ transport proxy... */
+ if (string_is_key_value(LOG_DEBUG, field)) {
+ bridge_line->socks_args = smartlist_new();
+ smartlist_add(bridge_line->socks_args, field);
+ } else { /* ...otherwise, it's the bridge fingerprint. */
+ fingerprint = field;
+ }
+
+ } else { /* transports disabled: */
+ fingerprint = smartlist_join_strings(items, "", 0, NULL);
+ }
+ }
+
+ /* Handle fingerprint, if it was provided. */
+ if (fingerprint) {
if (strlen(fingerprint) != HEX_DIGEST_LEN) {
log_warn(LD_CONFIG, "Key digest for Bridge is wrong length.");
goto err;
}
- if (base16_decode(digest, DIGEST_LEN, fingerprint, HEX_DIGEST_LEN)<0) {
+ if (base16_decode(bridge_line->digest, DIGEST_LEN,
+ fingerprint, HEX_DIGEST_LEN)<0) {
log_warn(LD_CONFIG, "Unable to decode Bridge key digest.");
goto err;
}
}
- if (!validate_only) {
- log_debug(LD_DIR, "Bridge at %s:%d (transport: %s) (%s)",
- fmt_addr(&addr), (int)port,
- transport_name ? transport_name : "no transport",
- fingerprint ? fingerprint : "no key listed");
- bridge_add_from_config(&addr, port,
- fingerprint ? digest : NULL, transport_name);
+ /* If we are using transports, any remaining items in the smartlist
+ should be k=v values. */
+ if (bridge_line->transport_name && smartlist_len(items)) {
+ if (!bridge_line->socks_args)
+ bridge_line->socks_args = smartlist_new();
+
+ /* append remaining items of 'items' to 'socks_args' */
+ smartlist_add_all(bridge_line->socks_args, items);
+ smartlist_clear(items);
+
+ tor_assert(smartlist_len(bridge_line->socks_args) > 0);
+ }
+
+ if (bridge_line->socks_args) {
+ if (validate_transport_socks_arguments(bridge_line->socks_args) < 0)
+ goto err;
}
- r = 0;
goto done;
err:
- r = -1;
+ bridge_line_free(bridge_line);
+ bridge_line = NULL;
done:
SMARTLIST_FOREACH(items, char*, s, tor_free(s));
smartlist_free(items);
tor_free(addrport);
- tor_free(transport_name);
tor_free(fingerprint);
- return r;
+
+ return bridge_line;
}
/** Read the contents of a ClientTransportPlugin line from
* <b>line</b>. Return 0 if the line is well-formed, and -1 if it
* isn't.
*
- * If <b>validate_only</b> is 0, and the line is well-formed:
+ * If <b>validate_only</b> is 0, the line is well-formed, and the
+ * transport is needed by some bridge:
* - If it's an external proxy line, add the transport described in the line to
* our internal transport list.
* - If it's a managed proxy line, launch the managed proxy. */
static int
-parse_client_transport_line(const char *line, int validate_only)
+parse_client_transport_line(const or_options_t *options,
+ const char *line, int validate_only)
{
smartlist_t *items = NULL;
int r;
@@ -5196,7 +4763,8 @@ parse_client_transport_line(const char *line, int validate_only)
int is_managed=0;
char **proxy_argv=NULL;
char **tmp=NULL;
- int proxy_argc,i;
+ int proxy_argc, i;
+ int is_useless_proxy=1;
int line_length;
@@ -5218,11 +4786,16 @@ parse_client_transport_line(const char *line, int validate_only)
smartlist_split_string(transport_list, transports, ",",
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport_name) {
+ /* validate transport names */
if (!string_is_C_identifier(transport_name)) {
log_warn(LD_CONFIG, "Transport name is not a C identifier (%s).",
transport_name);
goto err;
}
+
+ /* see if we actually need the transports provided by this proxy */
+ if (!validate_only && transport_is_needed(transport_name))
+ is_useless_proxy = 0;
} SMARTLIST_FOREACH_END(transport_name);
/* field2 is either a SOCKS version or "exec" */
@@ -5240,10 +4813,22 @@ parse_client_transport_line(const char *line, int validate_only)
goto err;
}
+ if (is_managed && options->Sandbox) {
+ log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode."
+ "(ClientTransportPlugin line was %s)", escaped(line));
+ goto err;
+ }
+
if (is_managed) { /* managed */
- if (!validate_only) { /* if we are not just validating, use the
- rest of the line as the argv of the proxy
- to be launched */
+ if (!validate_only && is_useless_proxy) {
+ log_notice(LD_GENERAL, "Pluggable transport proxy (%s) does not provide "
+ "any needed transports and will not be launched.", line);
+ }
+
+ /* If we are not just validating, use the rest of the line as the
+ argv of the proxy to be launched. Also, make sure that we are
+ only launching proxies that contribute useful transports. */
+ if (!validate_only && !is_useless_proxy) {
proxy_argc = line_length-2;
tor_assert(proxy_argc > 0);
proxy_argv = tor_malloc_zero(sizeof(char*)*(proxy_argc+1));
@@ -5281,8 +4866,8 @@ parse_client_transport_line(const char *line, int validate_only)
transport_add_from_config(&addr, port, smartlist_get(transport_list, 0),
socks_ver);
- log_info(LD_DIR, "Transport '%s' found at %s:%d",
- transports, fmt_addr(&addr), (int)port);
+ log_info(LD_DIR, "Transport '%s' found at %s",
+ transports, fmt_addrport(&addr, port));
}
}
@@ -5303,13 +4888,165 @@ parse_client_transport_line(const char *line, int validate_only)
return r;
}
+/** Given a ServerTransportListenAddr <b>line</b>, return its
+ * <address:port> string. 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 string is allocated on the heap and it's the
+ * responsibility of the caller to free it. */
+static char *
+get_bindaddr_from_transport_listen_line(const char *line,const char *transport)
+{
+ smartlist_t *items = NULL;
+ const char *parsed_transport = NULL;
+ char *addrport = NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+
+ items = smartlist_new();
+ 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 ServerTransportListenAddr line.");
+ goto err;
+ }
+
+ parsed_transport = smartlist_get(items, 0);
+ addrport = tor_strdup(smartlist_get(items, 1));
+
+ /* If 'transport' is given, check if it matches the one on the line */
+ if (transport && strcmp(transport, parsed_transport))
+ goto err;
+
+ /* Validate addrport */
+ if (tor_addr_port_parse(LOG_WARN, addrport, &addr, &port, -1)<0) {
+ log_warn(LD_CONFIG, "Error parsing ServerTransportListenAddr "
+ "address '%s'", addrport);
+ goto err;
+ }
+
+ goto done;
+
+ err:
+ tor_free(addrport);
+ addrport = NULL;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+
+ 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
+ * so, otherwise NULL. */
+char *
+get_transport_bindaddr_from_config(const char *transport)
+{
+ config_line_t *cl;
+ const or_options_t *options = get_options();
+
+ for (cl = options->ServerTransportListenAddr; cl; cl = cl->next) {
+ char *bindaddr =
+ get_bindaddr_from_transport_listen_line(cl->value, transport);
+ if (bindaddr)
+ return bindaddr;
+ }
+
+ 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.
* If <b>validate_only</b> is 0, the line is well-formed, and it's a
* managed proxy line, launch the managed proxy. */
static int
-parse_server_transport_line(const char *line, int validate_only)
+parse_server_transport_line(const or_options_t *options,
+ const char *line, int validate_only)
{
smartlist_t *items = NULL;
int r;
@@ -5364,6 +5101,12 @@ parse_server_transport_line(const char *line, int validate_only)
goto err;
}
+ if (is_managed && options->Sandbox) {
+ log_warn(LD_CONFIG, "Managed proxies are not compatible with Sandbox mode."
+ "(ServerTransportPlugin line was %s)", escaped(line));
+ goto err;
+ }
+
if (is_managed) { /* managed */
if (!validate_only) {
proxy_argc = line_length-2;
@@ -5401,8 +5144,8 @@ parse_server_transport_line(const char *line, int validate_only)
}
if (!validate_only) {
- log_info(LD_DIR, "Server transport '%s' at %s:%d.",
- transports, fmt_addr(&addr), (int)port);
+ log_info(LD_DIR, "Server transport '%s' at %s.",
+ transports, fmt_addrport(&addr, port));
}
}
@@ -5423,15 +5166,15 @@ parse_server_transport_line(const char *line, int validate_only)
return r;
}
-/** Read the contents of a DirServer line from <b>line</b>. If
+/** Read the contents of a DirAuthority line from <b>line</b>. If
* <b>validate_only</b> is 0, and the line is well-formed, and it
* shares any bits with <b>required_type</b> or <b>required_type</b>
* is 0, then add the dirserver described in the line (minus whatever
* bits it's missing) as a valid authority. Return 0 on success,
* or -1 if the line isn't well-formed or if we can't add it. */
static int
-parse_dir_server_line(const char *line, dirinfo_type_t required_type,
- int validate_only)
+parse_dir_authority_line(const char *line, dirinfo_type_t required_type,
+ int validate_only)
{
smartlist_t *items = NULL;
int r;
@@ -5439,14 +5182,14 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
uint16_t dir_port = 0, or_port = 0;
char digest[DIGEST_LEN];
char v3_digest[DIGEST_LEN];
- dirinfo_type_t type = V2_DIRINFO;
- int is_not_hidserv_authority = 0, is_not_v2_authority = 0;
+ dirinfo_type_t type = 0;
+ double weight = 1.0;
items = smartlist_new();
smartlist_split_string(items, line, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
if (smartlist_len(items) < 1) {
- log_warn(LD_CONFIG, "No arguments on DirServer line.");
+ log_warn(LD_CONFIG, "No arguments on DirAuthority line.");
goto err;
}
@@ -5459,63 +5202,66 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
char *flag = smartlist_get(items, 0);
if (TOR_ISDIGIT(flag[0]))
break;
- if (!strcasecmp(flag, "v1")) {
- type |= (V1_DIRINFO | HIDSERV_DIRINFO);
- } else if (!strcasecmp(flag, "hs")) {
- type |= HIDSERV_DIRINFO;
- } else if (!strcasecmp(flag, "no-hs")) {
- is_not_hidserv_authority = 1;
+ if (!strcasecmp(flag, "hs") ||
+ !strcasecmp(flag, "no-hs")) {
+ log_warn(LD_CONFIG, "The DirAuthority options 'hs' and 'no-hs' are "
+ "obsolete; you don't need them any more.");
} else if (!strcasecmp(flag, "bridge")) {
type |= BRIDGE_DIRINFO;
} else if (!strcasecmp(flag, "no-v2")) {
- is_not_v2_authority = 1;
+ /* obsolete, but may still be contained in DirAuthority lines generated
+ by various tools */;
} else if (!strcasecmpstart(flag, "orport=")) {
int ok;
char *portstring = flag + strlen("orport=");
or_port = (uint16_t) tor_parse_long(portstring, 10, 1, 65535, &ok, NULL);
if (!ok)
- log_warn(LD_CONFIG, "Invalid orport '%s' on DirServer line.",
+ log_warn(LD_CONFIG, "Invalid orport '%s' on DirAuthority line.",
portstring);
+ } else if (!strcmpstart(flag, "weight=")) {
+ int ok;
+ const char *wstring = flag + strlen("weight=");
+ weight = tor_parse_double(wstring, 0, UINT64_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG, "Invalid weight '%s' on DirAuthority line.",flag);
+ weight=1.0;
+ }
} else if (!strcasecmpstart(flag, "v3ident=")) {
char *idstr = flag + strlen("v3ident=");
if (strlen(idstr) != HEX_DIGEST_LEN ||
base16_decode(v3_digest, DIGEST_LEN, idstr, HEX_DIGEST_LEN)<0) {
- log_warn(LD_CONFIG, "Bad v3 identity digest '%s' on DirServer line",
+ log_warn(LD_CONFIG, "Bad v3 identity digest '%s' on DirAuthority line",
flag);
} else {
type |= V3_DIRINFO|EXTRAINFO_DIRINFO|MICRODESC_DIRINFO;
}
} else {
- log_warn(LD_CONFIG, "Unrecognized flag '%s' on DirServer line",
+ log_warn(LD_CONFIG, "Unrecognized flag '%s' on DirAuthority line",
flag);
}
tor_free(flag);
smartlist_del_keeporder(items, 0);
}
- if (is_not_hidserv_authority)
- type &= ~HIDSERV_DIRINFO;
- if (is_not_v2_authority)
- type &= ~V2_DIRINFO;
if (smartlist_len(items) < 2) {
- log_warn(LD_CONFIG, "Too few arguments to DirServer line.");
+ log_warn(LD_CONFIG, "Too few arguments to DirAuthority line.");
goto err;
}
addrport = smartlist_get(items, 0);
smartlist_del_keeporder(items, 0);
if (addr_port_lookup(LOG_WARN, addrport, &address, NULL, &dir_port)<0) {
- log_warn(LD_CONFIG, "Error parsing DirServer address '%s'", addrport);
+ log_warn(LD_CONFIG, "Error parsing DirAuthority address '%s'", addrport);
goto err;
}
if (!dir_port) {
- log_warn(LD_CONFIG, "Missing port in DirServer address '%s'",addrport);
+ log_warn(LD_CONFIG, "Missing port in DirAuthority address '%s'",addrport);
goto err;
}
fingerprint = smartlist_join_strings(items, "", 0, NULL);
if (strlen(fingerprint) != HEX_DIGEST_LEN) {
- log_warn(LD_CONFIG, "Key digest for DirServer is wrong length %d.",
- (int)strlen(fingerprint));
+ log_warn(LD_CONFIG, "Key digest '%s' for DirAuthority is wrong length %d.",
+ fingerprint, (int)strlen(fingerprint));
goto err;
}
if (!strcmp(fingerprint, "E623F7625FBE0C87820F11EC5F6D5377ED816294")) {
@@ -5527,19 +5273,21 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
goto err;
}
if (base16_decode(digest, DIGEST_LEN, fingerprint, HEX_DIGEST_LEN)<0) {
- log_warn(LD_CONFIG, "Unable to decode DirServer key digest.");
+ log_warn(LD_CONFIG, "Unable to decode DirAuthority key digest.");
goto err;
}
if (!validate_only && (!required_type || required_type & type)) {
+ dir_server_t *ds;
if (required_type)
type &= required_type; /* pare down what we think of them as an
* authority for. */
log_debug(LD_DIR, "Trusted %d dirserver at %s:%d (%s)", (int)type,
address, (int)dir_port, (char*)smartlist_get(items,0));
- if (!add_trusted_dir_server(nickname, address, dir_port, or_port,
- digest, v3_digest, type))
+ if (!(ds = trusted_dir_server_new(nickname, address, dir_port, or_port,
+ digest, v3_digest, type, weight)))
goto err;
+ dir_server_add(ds);
}
r = 0;
@@ -5558,6 +5306,110 @@ parse_dir_server_line(const char *line, dirinfo_type_t required_type,
return r;
}
+/** Read the contents of a FallbackDir line from <b>line</b>. If
+ * <b>validate_only</b> is 0, and the line is well-formed, then add the
+ * dirserver described in the line as a fallback directory. Return 0 on
+ * success, or -1 if the line isn't well-formed or if we can't add it. */
+static int
+parse_dir_fallback_line(const char *line,
+ int validate_only)
+{
+ int r = -1;
+ smartlist_t *items = smartlist_new(), *positional = smartlist_new();
+ int orport = -1;
+ uint16_t dirport;
+ tor_addr_t addr;
+ int ok;
+ char id[DIGEST_LEN];
+ char *address=NULL;
+ double weight=1.0;
+
+ memset(id, 0, sizeof(id));
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ SMARTLIST_FOREACH_BEGIN(items, const char *, cp) {
+ const char *eq = strchr(cp, '=');
+ ok = 1;
+ if (! eq) {
+ smartlist_add(positional, (char*)cp);
+ continue;
+ }
+ if (!strcmpstart(cp, "orport=")) {
+ orport = (int)tor_parse_long(cp+strlen("orport="), 10,
+ 1, 65535, &ok, NULL);
+ } else if (!strcmpstart(cp, "id=")) {
+ ok = !base16_decode(id, DIGEST_LEN,
+ cp+strlen("id="), strlen(cp)-strlen("id="));
+ } else if (!strcmpstart(cp, "weight=")) {
+ int ok;
+ const char *wstring = cp + strlen("weight=");
+ weight = tor_parse_double(wstring, 0, UINT64_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_CONFIG, "Invalid weight '%s' on FallbackDir line.", cp);
+ weight=1.0;
+ }
+ }
+
+ if (!ok) {
+ log_warn(LD_CONFIG, "Bad FallbackDir option %s", escaped(cp));
+ goto end;
+ }
+ } SMARTLIST_FOREACH_END(cp);
+
+ if (smartlist_len(positional) != 1) {
+ log_warn(LD_CONFIG, "Couldn't parse FallbackDir line %s", escaped(line));
+ goto end;
+ }
+
+ if (tor_digest_is_zero(id)) {
+ log_warn(LD_CONFIG, "Missing identity on FallbackDir line");
+ goto end;
+ }
+
+ if (orport <= 0) {
+ log_warn(LD_CONFIG, "Missing orport on FallbackDir line");
+ goto end;
+ }
+
+ if (tor_addr_port_split(LOG_INFO, smartlist_get(positional, 0),
+ &address, &dirport) < 0 ||
+ tor_addr_parse(&addr, address)<0) {
+ log_warn(LD_CONFIG, "Couldn't parse address:port %s on FallbackDir line",
+ (const char*)smartlist_get(positional, 0));
+ goto end;
+ }
+
+ if (!validate_only) {
+ dir_server_t *ds;
+ ds = fallback_dir_server_new(&addr, dirport, orport, id, weight);
+ if (!ds) {
+ log_warn(LD_CONFIG, "Couldn't create FallbackDir %s", escaped(line));
+ goto end;
+ }
+ dir_server_add(ds);
+ }
+
+ r = 0;
+
+ end:
+ SMARTLIST_FOREACH(items, char *, cp, tor_free(cp));
+ smartlist_free(items);
+ smartlist_free(positional);
+ tor_free(address);
+ return r;
+}
+
+/** Allocate and return a new port_cfg_t with reasonable defaults. */
+static port_cfg_t *
+port_cfg_new(void)
+{
+ port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ cfg->ipv4_traffic = 1;
+ cfg->cache_ipv4_answers = 1;
+ cfg->prefer_ipv6_virtaddr = 1;
+ return cfg;
+}
+
/** Free all storage held in <b>port</b> */
static void
port_cfg_free(port_cfg_t *port)
@@ -5565,24 +5417,50 @@ port_cfg_free(port_cfg_t *port)
tor_free(port);
}
-/** Warn for every port in <b>ports</b> that is on a publicly routable
- * address. */
+/** Warn for every port in <b>ports</b> of type <b>listener_type</b> that is
+ * on a publicly routable address. */
static void
-warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname)
+warn_nonlocal_client_ports(const smartlist_t *ports, const char *portname,
+ int listener_type)
{
SMARTLIST_FOREACH_BEGIN(ports, const port_cfg_t *, port) {
+ if (port->type != listener_type)
+ continue;
if (port->is_unix_addr) {
/* Unix sockets aren't accessible over a network. */
} else if (!tor_addr_is_internal(&port->addr, 1)) {
- log_warn(LD_CONFIG, "You specified a public address for %sPort. "
+ log_warn(LD_CONFIG, "You specified a public address '%s' for %sPort. "
"Other people on the Internet might find your computer and "
"use it as an open proxy. Please don't allow this unless you "
- "have a good reason.", portname);
+ "have a good reason.",
+ fmt_addrport(&port->addr, port->port), portname);
} else if (!tor_addr_is_loopback(&port->addr)) {
- log_notice(LD_CONFIG, "You configured a non-loopback address for "
- "%sPort. This allows everybody on your local network to use "
- "your machine as a proxy. Make sure this is what you wanted.",
- portname);
+ log_notice(LD_CONFIG, "You configured a non-loopback address '%s' "
+ "for %sPort. This allows everybody on your local network to "
+ "use your machine as a proxy. Make sure this is what you "
+ "wanted.",
+ fmt_addrport(&port->addr, port->port), 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);
}
@@ -5634,6 +5512,7 @@ warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid)
#define CL_PORT_ALLOW_EXTRA_LISTENADDR (1u<<2)
#define CL_PORT_SERVER_OPTIONS (1u<<3)
#define CL_PORT_FORBID_NONLOCAL (1u<<4)
+#define CL_PORT_TAKES_HOSTNAMES (1u<<5)
/**
* Parse port configuration for a single port type.
@@ -5666,6 +5545,9 @@ warn_nonlocal_controller_ports(smartlist_t *ports, unsigned forbid)
* isolation options in the FooPort entries; instead allow the
* server-port option set.
*
+ * If CL_PORT_TAKES_HOSTNAMES is set in <b>flags</b>, allow the options
+ * {No,}IPv{4,6}Traffic.
+ *
* On success, if <b>out</b> is given, add a new port_cfg_t entry to
* <b>out</b> for every port that the client should listen on. Return 0
* on success, -1 on failure.
@@ -5683,12 +5565,14 @@ 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;
const unsigned forbid_nonlocal = flags & CL_PORT_FORBID_NONLOCAL;
const unsigned allow_spurious_listenaddr =
flags & CL_PORT_ALLOW_EXTRA_LISTENADDR;
+ const unsigned takes_hostnames = flags & CL_PORT_TAKES_HOSTNAMES;
int got_zero_port=0, got_nonzero_port=0;
/* FooListenAddress is deprecated; let's make it work like it used to work,
@@ -5725,12 +5609,14 @@ parse_port_config(smartlist_t *out,
if (use_server_options && out) {
/* Add a no_listen port. */
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
cfg->type = listener_type;
cfg->port = mainport;
tor_addr_make_unspec(&cfg->addr); /* Server ports default to 0.0.0.0 */
cfg->no_listen = 1;
- cfg->ipv4_only = 1;
+ cfg->bind_ipv4_only = 1;
+ cfg->ipv4_traffic = 1;
+ cfg->prefer_ipv6_virtaddr = 1;
smartlist_add(out, cfg);
}
@@ -5743,7 +5629,7 @@ parse_port_config(smartlist_t *out,
return -1;
}
if (out) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
cfg->type = listener_type;
cfg->port = port ? port : mainport;
tor_addr_copy(&cfg->addr, &addr);
@@ -5757,8 +5643,10 @@ 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);
+ warn_nonlocal_client_ports(out, portname, listener_type);
}
return 0;
} /* end if (listenaddrs) */
@@ -5767,7 +5655,7 @@ parse_port_config(smartlist_t *out,
* one. */
if (! ports) {
if (defaultport && out) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
cfg->type = listener_type;
cfg->port = defaultport;
tor_addr_parse(&cfg->addr, defaultaddr);
@@ -5787,12 +5675,17 @@ parse_port_config(smartlist_t *out,
int port;
int sessiongroup = SESSION_GROUP_UNSET;
unsigned isolation = ISO_DEFAULT;
+ int prefer_no_auth = 0;
char *addrport;
uint16_t ptmp=0;
int ok;
int no_listen = 0, no_advertise = 0, all_addrs = 0,
- ipv4_only = 0, ipv6_only = 0;
+ bind_ipv4_only = 0, bind_ipv6_only = 0,
+ ipv4_traffic = 1, ipv6_traffic = 0, prefer_ipv6 = 0,
+ cache_ipv4 = 1, use_cached_ipv4 = 0,
+ cache_ipv6 = 0, use_cached_ipv6 = 0,
+ prefer_ipv6_automap = 1;
smartlist_split_string(elts, ports->value, NULL,
SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
@@ -5857,9 +5750,9 @@ parse_port_config(smartlist_t *out,
all_addrs = 1;
#endif
} else if (!strcasecmp(elt, "IPv4Only")) {
- ipv4_only = 1;
+ bind_ipv4_only = 1;
} else if (!strcasecmp(elt, "IPv6Only")) {
- ipv6_only = 1;
+ bind_ipv6_only = 1;
} else {
log_warn(LD_CONFIG, "Unrecognized %sPort option '%s'",
portname, escaped(elt));
@@ -5872,18 +5765,18 @@ parse_port_config(smartlist_t *out,
portname, escaped(ports->value));
goto err;
}
- if (ipv4_only && ipv6_only) {
+ if (bind_ipv4_only && bind_ipv6_only) {
log_warn(LD_CONFIG, "Tried to set both IPv4Only and IPv6Only "
"on %sPort line '%s'",
portname, escaped(ports->value));
goto err;
}
- if (ipv4_only && tor_addr_family(&addr) == AF_INET6) {
+ if (bind_ipv4_only && tor_addr_family(&addr) == AF_INET6) {
log_warn(LD_CONFIG, "Could not interpret %sPort address as IPv6",
portname);
goto err;
}
- if (ipv6_only && tor_addr_family(&addr) == AF_INET) {
+ if (bind_ipv6_only && tor_addr_family(&addr) == AF_INET) {
log_warn(LD_CONFIG, "Could not interpret %sPort address as IPv4",
portname);
goto err;
@@ -5916,6 +5809,45 @@ parse_port_config(smartlist_t *out,
no = 1;
elt += 2;
}
+
+ if (takes_hostnames) {
+ if (!strcasecmp(elt, "IPv4Traffic")) {
+ ipv4_traffic = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "IPv6Traffic")) {
+ ipv6_traffic = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "PreferIPv6")) {
+ prefer_ipv6 = ! no;
+ continue;
+ }
+ }
+ if (!strcasecmp(elt, "CacheIPv4DNS")) {
+ cache_ipv4 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "CacheIPv6DNS")) {
+ cache_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "CacheDNS")) {
+ cache_ipv4 = cache_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "UseIPv4Cache")) {
+ use_cached_ipv4 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "UseIPv6Cache")) {
+ use_cached_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "UseDNSCache")) {
+ use_cached_ipv4 = use_cached_ipv6 = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "PreferIPv6Automap")) {
+ prefer_ipv6_automap = ! no;
+ continue;
+ } else if (!strcasecmp(elt, "PreferSOCKSNoAuth")) {
+ prefer_no_auth = ! no;
+ continue;
+ }
+
if (!strcasecmpend(elt, "s"))
elt[strlen(elt)-1] = '\0'; /* kill plurals. */
@@ -5947,8 +5879,14 @@ parse_port_config(smartlist_t *out,
else
got_zero_port = 1;
+ if (ipv4_traffic == 0 && ipv6_traffic == 0) {
+ log_warn(LD_CONFIG, "You have a %sPort entry with both IPv4 and "
+ "IPv6 disabled; that won't work.", portname);
+ goto err;
+ }
+
if (out && port) {
- port_cfg_t *cfg = tor_malloc_zero(sizeof(port_cfg_t));
+ port_cfg_t *cfg = port_cfg_new();
tor_addr_copy(&cfg->addr, &addr);
cfg->port = port;
cfg->type = listener_type;
@@ -5957,8 +5895,19 @@ parse_port_config(smartlist_t *out,
cfg->no_advertise = no_advertise;
cfg->no_listen = no_listen;
cfg->all_addrs = all_addrs;
- cfg->ipv4_only = ipv4_only;
- cfg->ipv6_only = ipv6_only;
+ cfg->bind_ipv4_only = bind_ipv4_only;
+ cfg->bind_ipv6_only = bind_ipv6_only;
+ cfg->ipv4_traffic = ipv4_traffic;
+ cfg->ipv6_traffic = ipv6_traffic;
+ cfg->prefer_ipv6 = prefer_ipv6;
+ cfg->cache_ipv4_answers = cache_ipv4;
+ cfg->cache_ipv6_answers = cache_ipv6;
+ cfg->use_cached_ipv4_answers = use_cached_ipv4;
+ cfg->use_cached_ipv6_answers = use_cached_ipv6;
+ cfg->prefer_ipv6_virtaddr = prefer_ipv6_automap;
+ cfg->socks_prefer_no_auth = prefer_no_auth;
+ if (! (isolation & ISO_SOCKSAUTH))
+ cfg->socks_prefer_no_auth = 1;
smartlist_add(out, cfg);
}
@@ -5969,8 +5918,10 @@ 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);
+ warn_nonlocal_client_ports(out, portname, listener_type);
}
if (got_zero_port && got_nonzero_port) {
@@ -6051,7 +6002,8 @@ parse_ports(or_options_t *options, int validate_only,
options->SocksPort_lines, options->SocksListenAddress,
"Socks", CONN_TYPE_AP_LISTENER,
"127.0.0.1", 9050,
- CL_PORT_WARN_NONLOCAL|CL_PORT_ALLOW_EXTRA_LISTENADDR) < 0) {
+ CL_PORT_WARN_NONLOCAL|CL_PORT_ALLOW_EXTRA_LISTENADDR|
+ CL_PORT_TAKES_HOSTNAMES) < 0) {
*msg = tor_strdup("Invalid SocksPort/SocksListenAddress configuration");
goto err;
}
@@ -6059,7 +6011,7 @@ parse_ports(or_options_t *options, int validate_only,
options->DNSPort_lines, options->DNSListenAddress,
"DNS", CONN_TYPE_AP_DNS_LISTENER,
"127.0.0.1", 0,
- CL_PORT_WARN_NONLOCAL) < 0) {
+ CL_PORT_WARN_NONLOCAL|CL_PORT_TAKES_HOSTNAMES) < 0) {
*msg = tor_strdup("Invalid DNSPort/DNSListenAddress configuration");
goto err;
}
@@ -6114,6 +6066,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,
@@ -6148,6 +6108,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) {
@@ -6191,7 +6153,8 @@ check_server_ports(const smartlist_t *ports,
if (! port->no_advertise) {
++n_orport_advertised;
if (tor_addr_family(&port->addr) == AF_INET ||
- (tor_addr_family(&port->addr) == AF_UNSPEC && !port->ipv6_only))
+ (tor_addr_family(&port->addr) == AF_UNSPEC &&
+ !port->bind_ipv6_only))
++n_orport_advertised_ipv4;
}
if (! port->no_listen)
@@ -6200,7 +6163,7 @@ check_server_ports(const smartlist_t *ports,
continue;
}
#ifndef _WIN32
- if (!port->no_advertise && port->port < 1024)
+ if (!port->no_listen && port->port < 1024)
++n_low_port;
#endif
} SMARTLIST_FOREACH_END(port);
@@ -6210,6 +6173,13 @@ check_server_ports(const smartlist_t *ports,
"listening on one.");
r = -1;
}
+ if (n_orport_listeners && !n_orport_advertised) {
+ log_warn(LD_CONFIG, "We are listening on an ORPort, but not advertising "
+ "any ORPorts. This will keep us from building a %s "
+ "descriptor, and make us impossible to use.",
+ options->BridgeRelay ? "bridge" : "router");
+ r = -1;
+ }
if (n_dirport_advertised && !n_dirport_listeners) {
log_warn(LD_CONFIG, "We are advertising a DirPort, but not actually "
"listening on one.");
@@ -6227,7 +6197,7 @@ check_server_ports(const smartlist_t *ports,
}
if (n_low_port && options->AccountingMax) {
- log(LOG_WARN, LD_CONFIG,
+ log_warn(LD_CONFIG,
"You have set AccountingMax to use hibernation. You have also "
"chosen a low DirPort or OrPort. This combination can make Tor stop "
"working when it tries to re-attach the port after a period of "
@@ -6291,7 +6261,8 @@ get_first_listener_addrport_string(int listener_type)
to iterate all listener connections and find out in which
port it ended up listening: */
if (cfg->port == CFG_AUTO_PORT) {
- port = router_get_active_listener_port_by_type(listener_type);
+ port = router_get_active_listener_port_by_type_af(listener_type,
+ tor_addr_family(&cfg->addr));
if (!port)
return NULL;
} else {
@@ -6321,8 +6292,8 @@ get_first_advertised_port_by_type_af(int listener_type, int address_family)
(tor_addr_family(&cfg->addr) == address_family ||
tor_addr_family(&cfg->addr) == AF_UNSPEC)) {
if (tor_addr_family(&cfg->addr) != AF_UNSPEC ||
- (address_family == AF_INET && !cfg->ipv6_only) ||
- (address_family == AF_INET6 && !cfg->ipv4_only)) {
+ (address_family == AF_INET && !cfg->bind_ipv6_only) ||
+ (address_family == AF_INET6 && !cfg->bind_ipv4_only)) {
return cfg->port;
}
}
@@ -6426,7 +6397,7 @@ write_configuration_file(const char *fname, const or_options_t *options)
return -1;
}
- if (!(new_conf = options_dump(options, 1))) {
+ if (!(new_conf = options_dump(options, OPTIONS_DUMP_MINIMAL))) {
log_warn(LD_BUG, "Couldn't get configuration string");
goto err;
}
@@ -6445,7 +6416,7 @@ write_configuration_file(const char *fname, const or_options_t *options)
++i;
}
log_notice(LD_CONFIG, "Renaming old configuration file to \"%s\"", fn_tmp);
- if (rename(fname, fn_tmp) < 0) {
+ if (tor_rename(fname, fn_tmp) < 0) {//XXXX sandbox doesn't allow
log_warn(LD_FS,
"Couldn't rename configuration file \"%s\" to \"%s\": %s",
fname, fn_tmp, strerror(errno));
@@ -6483,180 +6454,6 @@ options_save_current(void)
return write_configuration_file(get_torrc_fname(0), get_options());
}
-/** Mapping from a unit name to a multiplier for converting that unit into a
- * base unit. Used by config_parse_unit. */
-struct unit_table_t {
- const char *unit; /**< The name of the unit */
- uint64_t multiplier; /**< How many of the base unit appear in this unit */
-};
-
-/** Table to map the names of memory units to the number of bytes they
- * contain. */
-static struct unit_table_t memory_units[] = {
- { "", 1 },
- { "b", 1<< 0 },
- { "byte", 1<< 0 },
- { "bytes", 1<< 0 },
- { "kb", 1<<10 },
- { "kbyte", 1<<10 },
- { "kbytes", 1<<10 },
- { "kilobyte", 1<<10 },
- { "kilobytes", 1<<10 },
- { "m", 1<<20 },
- { "mb", 1<<20 },
- { "mbyte", 1<<20 },
- { "mbytes", 1<<20 },
- { "megabyte", 1<<20 },
- { "megabytes", 1<<20 },
- { "gb", 1<<30 },
- { "gbyte", 1<<30 },
- { "gbytes", 1<<30 },
- { "gigabyte", 1<<30 },
- { "gigabytes", 1<<30 },
- { "tb", U64_LITERAL(1)<<40 },
- { "terabyte", U64_LITERAL(1)<<40 },
- { "terabytes", U64_LITERAL(1)<<40 },
- { NULL, 0 },
-};
-
-/** Table to map the names of time units to the number of seconds they
- * contain. */
-static struct unit_table_t time_units[] = {
- { "", 1 },
- { "second", 1 },
- { "seconds", 1 },
- { "minute", 60 },
- { "minutes", 60 },
- { "hour", 60*60 },
- { "hours", 60*60 },
- { "day", 24*60*60 },
- { "days", 24*60*60 },
- { "week", 7*24*60*60 },
- { "weeks", 7*24*60*60 },
- { NULL, 0 },
-};
-
-/** Table to map the names of time units to the number of milliseconds
- * they contain. */
-static struct unit_table_t time_msec_units[] = {
- { "", 1 },
- { "msec", 1 },
- { "millisecond", 1 },
- { "milliseconds", 1 },
- { "second", 1000 },
- { "seconds", 1000 },
- { "minute", 60*1000 },
- { "minutes", 60*1000 },
- { "hour", 60*60*1000 },
- { "hours", 60*60*1000 },
- { "day", 24*60*60*1000 },
- { "days", 24*60*60*1000 },
- { "week", 7*24*60*60*1000 },
- { "weeks", 7*24*60*60*1000 },
- { NULL, 0 },
-};
-
-/** Parse a string <b>val</b> containing a number, zero or more
- * spaces, and an optional unit string. If the unit appears in the
- * table <b>u</b>, then multiply the number by the unit multiplier.
- * On success, set *<b>ok</b> to 1 and return this product.
- * Otherwise, set *<b>ok</b> to 0.
- */
-static uint64_t
-config_parse_units(const char *val, struct unit_table_t *u, int *ok)
-{
- uint64_t v = 0;
- double d = 0;
- int use_float = 0;
- char *cp;
-
- tor_assert(ok);
-
- v = tor_parse_uint64(val, 10, 0, UINT64_MAX, ok, &cp);
- if (!*ok || (cp && *cp == '.')) {
- d = tor_parse_double(val, 0, UINT64_MAX, ok, &cp);
- if (!*ok)
- goto done;
- use_float = 1;
- }
-
- if (!cp) {
- *ok = 1;
- v = use_float ? DBL_TO_U64(d) : v;
- goto done;
- }
-
- cp = (char*) eat_whitespace(cp);
-
- for ( ;u->unit;++u) {
- if (!strcasecmp(u->unit, cp)) {
- if (use_float)
- v = u->multiplier * d;
- else
- v *= u->multiplier;
- *ok = 1;
- goto done;
- }
- }
- log_warn(LD_CONFIG, "Unknown unit '%s'.", cp);
- *ok = 0;
- done:
-
- if (*ok)
- return v;
- else
- return 0;
-}
-
-/** Parse a string in the format "number unit", where unit is a unit of
- * information (byte, KB, M, etc). On success, set *<b>ok</b> to true
- * and return the number of bytes specified. Otherwise, set
- * *<b>ok</b> to false and return 0. */
-static uint64_t
-config_parse_memunit(const char *s, int *ok)
-{
- uint64_t u = config_parse_units(s, memory_units, ok);
- return u;
-}
-
-/** Parse a string in the format "number unit", where unit is a unit of
- * time in milliseconds. On success, set *<b>ok</b> to true and return
- * the number of milliseconds in the provided interval. Otherwise, set
- * *<b>ok</b> to 0 and return -1. */
-static int
-config_parse_msec_interval(const char *s, int *ok)
-{
- uint64_t r;
- r = config_parse_units(s, time_msec_units, ok);
- if (!ok)
- return -1;
- if (r > INT_MAX) {
- log_warn(LD_CONFIG, "Msec interval '%s' is too long", s);
- *ok = 0;
- return -1;
- }
- return (int)r;
-}
-
-/** Parse a string in the format "number unit", where unit is a unit of time.
- * On success, set *<b>ok</b> to true and return the number of seconds in
- * the provided interval. Otherwise, set *<b>ok</b> to 0 and return -1.
- */
-static int
-config_parse_interval(const char *s, int *ok)
-{
- uint64_t r;
- r = config_parse_units(s, time_units, ok);
- if (!ok)
- return -1;
- if (r > INT_MAX) {
- log_warn(LD_CONFIG, "Interval '%s' is too long", s);
- *ok = 0;
- return -1;
- }
- return (int)r;
-}
-
/** Return the number of cpus configured in <b>options</b>. If we are
* told to auto-detect the number of cpus, return the auto-detected number. */
int
@@ -6710,14 +6507,6 @@ init_libevent(const or_options_t *options)
}
}
-/** Return the persistent state struct for this Tor. */
-or_state_t *
-get_or_state(void)
-{
- tor_assert(global_state);
- return global_state;
-}
-
/** Return a newly allocated string holding a filename relative to the data
* directory. If <b>sub1</b> is present, it is the first path component after
* the data directory. If <b>sub2</b> is also present, it is the second path
@@ -6768,489 +6557,100 @@ options_get_datadir_fname2_suffix(const or_options_t *options,
return fname;
}
-/** Return true if <b>line</b> is a valid state TransportProxy line.
- * Return false otherwise. */
-static int
-state_transport_line_is_valid(const char *line)
-{
- smartlist_t *items = NULL;
- char *addrport=NULL;
- tor_addr_t addr;
- uint16_t port = 0;
- int r;
-
- items = smartlist_new();
- smartlist_split_string(items, line, NULL,
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
-
- if (smartlist_len(items) != 2) {
- log_warn(LD_CONFIG, "state: Not enough arguments in TransportProxy line.");
- goto err;
- }
-
- addrport = smartlist_get(items, 1);
- if (tor_addr_port_lookup(addrport, &addr, &port) < 0) {
- log_warn(LD_CONFIG, "state: Could not parse addrport.");
- goto err;
- }
-
- if (!port) {
- log_warn(LD_CONFIG, "state: Transport line did not contain port.");
- goto err;
- }
-
- r = 1;
- goto done;
-
- err:
- r = 0;
-
- done:
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- return r;
-}
-
-/** Return 0 if all TransportProxy lines in <b>state</b> are well
- * formed. Otherwise, return -1. */
-static int
-validate_transports_in_state(or_state_t *state)
+/** Check wether the data directory has a private subdirectory
+ * <b>subdir</b>. If not, try to create it. Return 0 on success,
+ * -1 otherwise. */
+int
+check_or_create_data_subdir(const char *subdir)
{
- int broken = 0;
- config_line_t *line;
+ char *statsdir = get_datadir_fname(subdir);
+ int return_val = 0;
- for (line = state->TransportProxies ; line ; line = line->next) {
- tor_assert(!strcmp(line->key, "TransportProxy"));
- if (!state_transport_line_is_valid(line->value))
- broken = 1;
+ if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
+ log_warn(LD_HIST, "Unable to create %s/ directory!", subdir);
+ return_val = -1;
}
-
- if (broken)
- log_warn(LD_CONFIG, "state: State file seems to be broken.");
-
- return 0;
-}
-
-/** Return 0 if every setting in <b>state</b> is reasonable, and a
- * permissible transition from <b>old_state</b>. Else warn and return -1.
- * Should have no side effects, except for normalizing the contents of
- * <b>state</b>.
- */
-/* XXX from_setconf is here because of bug 238 */
-static int
-or_state_validate(or_state_t *old_state, or_state_t *state,
- int from_setconf, char **msg)
-{
- /* We don't use these; only options do. Still, we need to match that
- * signature. */
- (void) from_setconf;
- (void) old_state;
-
- if (entry_guards_parse_state(state, 0, msg)<0)
- return -1;
-
- if (validate_transports_in_state(state)<0)
- return -1;
-
- return 0;
+ tor_free(statsdir);
+ return return_val;
}
-/** Replace the current persistent state with <b>new_state</b> */
-static int
-or_state_set(or_state_t *new_state)
+/** Create a file named <b>fname</b> with contents <b>str</b> in the
+ * subdirectory <b>subdir</b> of the data directory. <b>descr</b>
+ * should be a short description of the file's content and will be
+ * used for the warning message, if it's present and the write process
+ * fails. Return 0 on success, -1 otherwise.*/
+int
+write_to_data_subdir(const char* subdir, const char* fname,
+ const char* str, const char* descr)
{
- char *err = NULL;
- int ret = 0;
- tor_assert(new_state);
- config_free(&state_format, global_state);
- global_state = new_state;
- if (entry_guards_parse_state(global_state, 1, &err)<0) {
- log_warn(LD_GENERAL,"%s",err);
- tor_free(err);
- ret = -1;
- }
- if (rep_hist_load_state(global_state, &err)<0) {
- log_warn(LD_GENERAL,"Unparseable bandwidth history state: %s",err);
- tor_free(err);
- ret = -1;
- }
- if (circuit_build_times_parse_state(&circ_times, global_state) < 0) {
- ret = -1;
- }
- return ret;
-}
+ char *filename = get_datadir_fname2(subdir, fname);
+ int return_val = 0;
-/**
- * Save a broken state file to a backup location.
- */
-static void
-or_state_save_broken(char *fname)
-{
- int i;
- file_status_t status;
- char *fname2 = NULL;
- for (i = 0; i < 100; ++i) {
- tor_asprintf(&fname2, "%s.%d", fname, i);
- status = file_status(fname2);
- if (status == FN_NOENT)
- break;
- tor_free(fname2);
+ if (write_str_to_file(filename, str, 0) < 0) {
+ log_warn(LD_HIST, "Unable to write %s to disk!", descr ? descr : fname);
+ return_val = -1;
}
- if (i == 100) {
- log_warn(LD_BUG, "Unable to parse state in \"%s\"; too many saved bad "
- "state files to move aside. Discarding the old state file.",
- fname);
- unlink(fname);
- } else {
- log_warn(LD_BUG, "Unable to parse state in \"%s\". Moving it aside "
- "to \"%s\". This could be a bug in Tor; please tell "
- "the developers.", fname, fname2);
- if (rename(fname, fname2) < 0) {
- log_warn(LD_BUG, "Weirdly, I couldn't even move the state aside. The "
- "OS gave an error of %s", strerror(errno));
- }
- }
- tor_free(fname2);
+ tor_free(filename);
+ return return_val;
}
-/** Reload the persistent state from disk, generating a new state as needed.
- * Return 0 on success, less than 0 on failure.
- */
-static int
-or_state_load(void)
+/** Given a file name check to see whether the file exists but has not been
+ * modified for a very long time. If so, remove it. */
+void
+remove_file_if_very_old(const char *fname, time_t now)
{
- or_state_t *new_state = NULL;
- char *contents = NULL, *fname;
- char *errmsg = NULL;
- int r = -1, badstate = 0;
+#define VERY_OLD_FILE_AGE (28*24*60*60)
+ struct stat st;
- fname = get_datadir_fname("state");
- switch (file_status(fname)) {
- case FN_FILE:
- if (!(contents = read_file_to_str(fname, 0, NULL))) {
- log_warn(LD_FS, "Unable to read state file \"%s\"", fname);
- goto done;
- }
- break;
- case FN_NOENT:
- break;
- case FN_ERROR:
- case FN_DIR:
- default:
- log_warn(LD_GENERAL,"State file \"%s\" is not a file? Failing.", fname);
- goto done;
- }
- new_state = tor_malloc_zero(sizeof(or_state_t));
- new_state->_magic = OR_STATE_MAGIC;
- config_init(&state_format, new_state);
- if (contents) {
- config_line_t *lines=NULL;
- int assign_retval;
- if (config_get_lines(contents, &lines, 0)<0)
- goto done;
- assign_retval = config_assign(&state_format, new_state,
- lines, 0, 0, &errmsg);
- config_free_lines(lines);
- if (assign_retval<0)
- badstate = 1;
- if (errmsg) {
- log_warn(LD_GENERAL, "%s", errmsg);
- tor_free(errmsg);
+ log_debug(LD_FS, "stat()ing %s", fname);
+ if (stat(sandbox_intern_string(fname), &st)==0 &&
+ st.st_mtime < now-VERY_OLD_FILE_AGE) {
+ char buf[ISO_TIME_LEN+1];
+ format_local_iso_time(buf, st.st_mtime);
+ log_notice(LD_GENERAL, "Obsolete file %s hasn't been modified since %s. "
+ "Removing it.", fname, buf);
+ if (unlink(fname) != 0) {
+ log_warn(LD_FS, "Failed to unlink %s: %s",
+ fname, strerror(errno));
}
}
-
- if (!badstate && or_state_validate(NULL, new_state, 1, &errmsg) < 0)
- badstate = 1;
-
- if (errmsg) {
- log_warn(LD_GENERAL, "%s", errmsg);
- tor_free(errmsg);
- }
-
- if (badstate && !contents) {
- log_warn(LD_BUG, "Uh oh. We couldn't even validate our own default state."
- " This is a bug in Tor.");
- goto done;
- } else if (badstate && contents) {
- or_state_save_broken(fname);
-
- tor_free(contents);
- config_free(&state_format, new_state);
-
- new_state = tor_malloc_zero(sizeof(or_state_t));
- new_state->_magic = OR_STATE_MAGIC;
- config_init(&state_format, new_state);
- } else if (contents) {
- log_info(LD_GENERAL, "Loaded state from \"%s\"", fname);
- } else {
- log_info(LD_GENERAL, "Initialized state");
- }
- if (or_state_set(new_state) == -1) {
- or_state_save_broken(fname);
- }
- new_state = NULL;
- if (!contents) {
- global_state->next_write = 0;
- or_state_save(time(NULL));
- }
- r = 0;
-
- done:
- tor_free(fname);
- tor_free(contents);
- if (new_state)
- config_free(&state_format, new_state);
-
- return r;
}
-/** Did the last time we tried to write the state file fail? If so, we
- * should consider disabling such features as preemptive circuit generation
- * to compute circuit-build-time. */
-static int last_state_file_write_failed = 0;
-
-/** Return whether the state file failed to write last time we tried. */
-int
-did_last_state_file_write_fail(void)
-{
- return last_state_file_write_failed;
-}
-
-/** If writing the state to disk fails, try again after this many seconds. */
-#define STATE_WRITE_RETRY_INTERVAL 3600
-
-/** If we're a relay, how often should we checkpoint our state file even
- * if nothing else dirties it? This will checkpoint ongoing stats like
- * bandwidth used, per-country user stats, etc. */
-#define STATE_RELAY_CHECKPOINT_INTERVAL (12*60*60)
-
-/** Write the persistent state to disk. Return 0 for success, <0 on failure. */
-int
-or_state_save(time_t now)
+/** Return a smartlist of ports that must be forwarded by
+ * tor-fw-helper. The smartlist contains the ports in a string format
+ * that is understandable by tor-fw-helper. */
+smartlist_t *
+get_list_of_ports_to_forward(void)
{
- char *state, *contents;
- char tbuf[ISO_TIME_LEN+1];
- char *fname;
-
- tor_assert(global_state);
-
- if (global_state->next_write > now)
- return 0;
-
- /* Call everything else that might dirty the state even more, in order
- * to avoid redundant writes. */
- entry_guards_update_state(global_state);
- rep_hist_update_state(global_state);
- circuit_build_times_update_state(&circ_times, global_state);
- if (accounting_is_enabled(get_options()))
- accounting_run_housekeeping(now);
-
- global_state->LastWritten = now;
-
- tor_free(global_state->TorVersion);
- tor_asprintf(&global_state->TorVersion, "Tor %s", get_version());
-
- state = config_dump(&state_format, NULL, global_state, 1, 0);
- format_local_iso_time(tbuf, now);
- tor_asprintf(&contents,
- "# Tor state file last generated on %s local time\n"
- "# Other times below are in GMT\n"
- "# You *do not* need to edit this file.\n\n%s",
- tbuf, state);
- tor_free(state);
- fname = get_datadir_fname("state");
- if (write_str_to_file(fname, contents, 0)<0) {
- log_warn(LD_FS, "Unable to write state to file \"%s\"; "
- "will try again later", fname);
- last_state_file_write_failed = 1;
- tor_free(fname);
- tor_free(contents);
- /* Try again after STATE_WRITE_RETRY_INTERVAL (or sooner, if the state
- * changes sooner). */
- global_state->next_write = now + STATE_WRITE_RETRY_INTERVAL;
- return -1;
- }
-
- last_state_file_write_failed = 0;
- log_info(LD_GENERAL, "Saved state to \"%s\"", fname);
- tor_free(fname);
- tor_free(contents);
-
- if (server_mode(get_options()))
- global_state->next_write = now + STATE_RELAY_CHECKPOINT_INTERVAL;
- else
- global_state->next_write = TIME_MAX;
+ smartlist_t *ports_to_forward = smartlist_new();
+ int port = 0;
- return 0;
-}
-
-/** 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 *
-get_transport_in_state_by_name(const char *transport)
-{
- or_state_t *or_state = get_or_state();
- config_line_t *line;
- config_line_t *ret = NULL;
- smartlist_t *items = NULL;
+ /** XXX TODO tor-fw-helper does not support forwarding ports to
+ other hosts than the local one. If the user is binding to a
+ different IP address, tor-fw-helper won't work. */
+ port = router_get_advertised_or_port(get_options()); /* Get ORPort */
+ if (port)
+ smartlist_add_asprintf(ports_to_forward, "%d:%d", port, port);
- for (line = or_state->TransportProxies ; line ; line = line->next) {
- tor_assert(!strcmp(line->key, "TransportProxy"));
+ port = router_get_advertised_dir_port(get_options(), 0); /* Get DirPort */
+ if (port)
+ smartlist_add_asprintf(ports_to_forward, "%d:%d", port, port);
- items = smartlist_new();
- smartlist_split_string(items, line->value, NULL,
- SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
- if (smartlist_len(items) != 2) /* broken state */
- goto done;
-
- if (!strcmp(smartlist_get(items, 0), transport)) {
- ret = line;
- goto done;
+ /* Get ports of transport proxies */
+ {
+ smartlist_t *transport_ports = get_transport_proxy_ports();
+ if (transport_ports) {
+ smartlist_add_all(ports_to_forward, transport_ports);
+ smartlist_free(transport_ports);
}
-
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- items = NULL;
}
- done:
- if (items) {
- SMARTLIST_FOREACH(items, char*, s, tor_free(s));
- smartlist_free(items);
- }
- return ret;
-}
-
-/** Return string containing the address:port part of the
- * TransportProxy <b>line</b> for transport <b>transport</b>.
- * If the line is corrupted, return NULL. */
-static const char *
-get_transport_bindaddr(const char *line, const char *transport)
-{
- char *line_tmp = NULL;
-
- if (strlen(line) < strlen(transport) + 2) {
- goto broken_state;
- } else {
- /* line should start with the name of the transport and a space.
- (for example, "obfs2 127.0.0.1:47245") */
- tor_asprintf(&line_tmp, "%s ", transport);
- if (strcmpstart(line, line_tmp))
- goto broken_state;
-
- tor_free(line_tmp);
- return (line+strlen(transport)+1);
+ if (!smartlist_len(ports_to_forward)) {
+ smartlist_free(ports_to_forward);
+ ports_to_forward = NULL;
}
- broken_state:
- tor_free(line_tmp);
- return NULL;
-}
-
-/** Return a string containing the address:port that a proxy transport
- * should bind on. The string is stored on the heap and must be freed
- * by the caller of this function. */
-char *
-get_stored_bindaddr_for_server_transport(const char *transport)
-{
- char *default_addrport = NULL;
- const char *stored_bindaddr = NULL;
-
- config_line_t *line = get_transport_in_state_by_name(transport);
- if (!line) /* Found no references in state for this transport. */
- goto no_bindaddr_found;
-
- stored_bindaddr = get_transport_bindaddr(line->value, transport);
- if (stored_bindaddr) /* found stored bindaddr in state file. */
- return tor_strdup(stored_bindaddr);
-
- no_bindaddr_found:
- /** If we didn't find references for this pluggable transport in the
- state file, we should instruct the pluggable transport proxy to
- listen on INADDR_ANY on a random ephemeral port. */
- tor_asprintf(&default_addrport, "%s:%s", fmt_addr32(INADDR_ANY), "0");
- return default_addrport;
-}
-
-/** Save <b>transport</b> listening on <b>addr</b>:<b>port</b> to
- state */
-void
-save_transport_to_state(const char *transport,
- const tor_addr_t *addr, uint16_t port)
-{
- or_state_t *state = get_or_state();
-
- char *transport_addrport=NULL;
-
- /** find where to write on the state */
- config_line_t **next, *line;
-
- /* see if this transport is already stored in state */
- config_line_t *transport_line =
- get_transport_in_state_by_name(transport);
-
- if (transport_line) { /* if transport already exists in state... */
- const char *prev_bindaddr = /* get its addrport... */
- get_transport_bindaddr(transport_line->value, transport);
- tor_asprintf(&transport_addrport, "%s:%d", fmt_addr(addr), (int)port);
-
- /* if transport in state has the same address as this one, life is good */
- if (!strcmp(prev_bindaddr, transport_addrport)) {
- log_info(LD_CONFIG, "Transport seems to have spawned on its usual "
- "address:port.");
- goto done;
- } else { /* if addrport in state is different than the one we got */
- log_info(LD_CONFIG, "Transport seems to have spawned on different "
- "address:port. Let's update the state file with the new "
- "address:port");
- tor_free(transport_line->value); /* free the old line */
- tor_asprintf(&transport_line->value, "%s %s:%d", transport,
- fmt_addr(addr),
- (int) port); /* replace old addrport line with new line */
- }
- } else { /* never seen this one before; save it in state for next time */
- log_info(LD_CONFIG, "It's the first time we see this transport. "
- "Let's save its address:port");
- next = &state->TransportProxies;
- /* find the last TransportProxy line in the state and point 'next'
- right after it */
- line = state->TransportProxies;
- while (line) {
- next = &(line->next);
- line = line->next;
- }
-
- /* allocate space for the new line and fill it in */
- *next = line = tor_malloc_zero(sizeof(config_line_t));
- line->key = tor_strdup("TransportProxy");
- tor_asprintf(&line->value, "%s %s:%d", transport,
- fmt_addr(addr), (int) port);
-
- next = &(line->next);
- }
-
- if (!get_options()->AvoidDiskWrites)
- or_state_mark_dirty(state, 0);
-
- done:
- tor_free(transport_addrport);
-}
-
-/** Given a file name check to see whether the file exists but has not been
- * modified for a very long time. If so, remove it. */
-void
-remove_file_if_very_old(const char *fname, time_t now)
-{
-#define VERY_OLD_FILE_AGE (28*24*60*60)
- struct stat st;
-
- if (stat(fname, &st)==0 && st.st_mtime < now-VERY_OLD_FILE_AGE) {
- char buf[ISO_TIME_LEN+1];
- format_local_iso_time(buf, st.st_mtime);
- log_notice(LD_GENERAL, "Obsolete file %s hasn't been modified since %s. "
- "Removing it.", fname, buf);
- unlink(fname);
- }
+ return ports_to_forward;
}
/** Helper to implement GETINFO functions about configuration variables (not
@@ -7267,9 +6667,12 @@ getinfo_helper_config(control_connection_t *conn,
if (!strcmp(question, "config/names")) {
smartlist_t *sl = smartlist_new();
int i;
- for (i = 0; _option_vars[i].name; ++i) {
- const config_var_t *var = &_option_vars[i];
+ for (i = 0; option_vars_[i].name; ++i) {
+ const config_var_t *var = &option_vars_[i];
const char *type;
+ /* don't tell controller about triple-underscore options */
+ if (!strncmp(option_vars_[i].name, "___", 3))
+ continue;
switch (var->type) {
case CONFIG_TYPE_STRING: type = "String"; break;
case CONFIG_TYPE_FILENAME: type = "Filename"; break;
@@ -7285,6 +6688,7 @@ getinfo_helper_config(control_connection_t *conn,
case CONFIG_TYPE_ISOTIME: type = "Time"; break;
case CONFIG_TYPE_ROUTERSET: type = "RouterList"; break;
case CONFIG_TYPE_CSV: type = "CommaList"; break;
+ case CONFIG_TYPE_CSV_INTERVAL: type = "TimeIntervalCommaList"; break;
case CONFIG_TYPE_LINELIST: type = "LineList"; break;
case CONFIG_TYPE_LINELIST_S: type = "Dependant"; break;
case CONFIG_TYPE_LINELIST_V: type = "Virtual"; break;
@@ -7299,7 +6703,175 @@ getinfo_helper_config(control_connection_t *conn,
*answer = smartlist_join_strings(sl, "", 0, NULL);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
+ } else if (!strcmp(question, "config/defaults")) {
+ smartlist_t *sl = smartlist_new();
+ int i;
+ for (i = 0; option_vars_[i].name; ++i) {
+ const config_var_t *var = &option_vars_[i];
+ if (var->initvalue != NULL) {
+ char *val = esc_for_log(var->initvalue);
+ smartlist_add_asprintf(sl, "%s %s\n",var->name,val);
+ tor_free(val);
+ }
+ }
+ *answer = smartlist_join_strings(sl, "", 0, NULL);
+ SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
+ smartlist_free(sl);
}
return 0;
}
+/** Parse outbound bind address option lines. If <b>validate_only</b>
+ * is not 0 update OutboundBindAddressIPv4_ and
+ * OutboundBindAddressIPv6_ in <b>options</b>. On failure, set
+ * <b>msg</b> (if provided) to a newly allocated string containing a
+ * description of the problem and return -1. */
+static int
+parse_outbound_addresses(or_options_t *options, int validate_only, char **msg)
+{
+ const config_line_t *lines = options->OutboundBindAddress;
+ int found_v4 = 0, found_v6 = 0;
+
+ if (!validate_only) {
+ memset(&options->OutboundBindAddressIPv4_, 0,
+ sizeof(options->OutboundBindAddressIPv4_));
+ memset(&options->OutboundBindAddressIPv6_, 0,
+ sizeof(options->OutboundBindAddressIPv6_));
+ }
+ while (lines) {
+ tor_addr_t addr, *dst_addr = NULL;
+ int af = tor_addr_parse(&addr, lines->value);
+ switch (af) {
+ case AF_INET:
+ if (found_v4) {
+ if (msg)
+ tor_asprintf(msg, "Multiple IPv4 outbound bind addresses "
+ "configured: %s", lines->value);
+ return -1;
+ }
+ found_v4 = 1;
+ dst_addr = &options->OutboundBindAddressIPv4_;
+ break;
+ case AF_INET6:
+ if (found_v6) {
+ if (msg)
+ tor_asprintf(msg, "Multiple IPv6 outbound bind addresses "
+ "configured: %s", lines->value);
+ return -1;
+ }
+ found_v6 = 1;
+ dst_addr = &options->OutboundBindAddressIPv6_;
+ break;
+ default:
+ if (msg)
+ tor_asprintf(msg, "Outbound bind address '%s' didn't parse.",
+ lines->value);
+ return -1;
+ }
+ if (!validate_only)
+ tor_addr_copy(dst_addr, &addr);
+ lines = lines->next;
+ }
+ return 0;
+}
+
+/** Load one of the geoip files, <a>family</a> determining which
+ * one. <a>default_fname</a> is used if on Windows and
+ * <a>fname</a> equals "<default>". */
+static void
+config_load_geoip_file_(sa_family_t family,
+ const char *fname,
+ const char *default_fname)
+{
+#ifdef _WIN32
+ char *free_fname = NULL; /* Used to hold any temporary-allocated value */
+ /* XXXX Don't use this "<default>" junk; make our filename options
+ * understand prefixes somehow. -NM */
+ if (!strcmp(fname, "<default>")) {
+ const char *conf_root = get_windows_conf_root();
+ tor_asprintf(&free_fname, "%s\\%s", conf_root, default_fname);
+ fname = free_fname;
+ }
+ geoip_load_file(family, fname);
+ tor_free(free_fname);
+#else
+ (void)default_fname;
+ geoip_load_file(family, fname);
+#endif
+}
+
+/** Load geoip files for IPv4 and IPv6 if <a>options</a> and
+ * <a>old_options</a> indicate we should. */
+static void
+config_maybe_load_geoip_files_(const or_options_t *options,
+ const or_options_t *old_options)
+{
+ /* XXXX024 Reload GeoIPFile on SIGHUP. -NM */
+
+ if (options->GeoIPFile &&
+ ((!old_options || !opt_streq(old_options->GeoIPFile,
+ options->GeoIPFile))
+ || !geoip_is_loaded(AF_INET)))
+ config_load_geoip_file_(AF_INET, options->GeoIPFile, "geoip");
+ if (options->GeoIPv6File &&
+ ((!old_options || !opt_streq(old_options->GeoIPv6File,
+ options->GeoIPv6File))
+ || !geoip_is_loaded(AF_INET6)))
+ 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 dd76edcf1..bf386134b 100644
--- a/src/or/config.h
+++ b/src/or/config.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,11 +9,13 @@
* \brief Header file for config.c.
**/
-#ifndef _TOR_CONFIG_H
-#define _TOR_CONFIG_H
+#ifndef TOR_CONFIG_H
+#define TOR_CONFIG_H
+
+#include "testsupport.h"
const char *get_dirportfrontpage(void);
-const or_options_t *get_options(void);
+MOCK_DECL(const or_options_t *,get_options,(void));
or_options_t *get_options_mutable(void);
int set_options(or_options_t *new_val, char **msg);
void config_free_all(void);
@@ -23,16 +25,20 @@ const char *escaped_safe_str_client(const char *address);
const char *escaped_safe_str(const char *address);
const char *get_version(void);
const char *get_short_version(void);
-
-int config_get_lines(const char *string, config_line_t **result, int extended);
-void config_free_lines(config_line_t *front);
setopt_err_t options_trial_assign(config_line_t *list, int use_defaults,
int clear_first, char **msg);
+
+uint32_t get_last_resolved_addr(void);
int resolve_my_address(int warn_severity, const or_options_t *options,
- uint32_t *addr, char **hostname_out);
+ uint32_t *addr_out,
+ const char **method_out, char **hostname_out);
int is_local_addr(const tor_addr_t *addr);
void options_init(or_options_t *options);
-char *options_dump(const or_options_t *options, int minimal);
+
+#define OPTIONS_DUMP_MINIMAL 1
+#define OPTIONS_DUMP_DEFAULTS 2
+#define OPTIONS_DUMP_ALL 3
+char *options_dump(const or_options_t *options, int how_to_dump);
int options_init_from_torrc(int argc, char **argv);
setopt_err_t options_init_from_string(const char *cf_defaults, const char *cf,
int command, const char *command_arg, char **msg);
@@ -59,11 +65,11 @@ char *options_get_datadir_fname2_suffix(const or_options_t *options,
#define get_datadir_fname_suffix(sub1, suffix) \
get_datadir_fname2_suffix((sub1), NULL, (suffix))
-int get_num_cpus(const or_options_t *options);
+int check_or_create_data_subdir(const char *subdir);
+int write_to_data_subdir(const char* subdir, const char* fname,
+ const char* str, const char* descr);
-or_state_t *get_or_state(void);
-int did_last_state_file_write_fail(void);
-int or_state_save(time_t now);
+int get_num_cpus(const or_options_t *options);
const smartlist_t *get_configured_ports(void);
int get_first_advertised_port_by_type_af(int listener_type,
@@ -78,9 +84,7 @@ char *get_first_listener_addrport_string(int listener_type);
int options_need_geoip_info(const or_options_t *options,
const char **reason_out);
-void save_transport_to_state(const char *transport_name,
- const tor_addr_t *addr, uint16_t port);
-char *get_stored_bindaddr_for_server_transport(const char *transport);
+smartlist_t *get_list_of_ports_to_forward(void);
int getinfo_helper_config(control_connection_t *conn,
const char *question, char **answer,
@@ -90,10 +94,17 @@ const char *tor_get_digests(void);
uint32_t get_effective_bwrate(const or_options_t *options);
uint32_t get_effective_bwburst(const or_options_t *options);
-#ifdef CONFIG_PRIVATE
-/* Used only by config.c and test.c */
+char *get_transport_bindaddr_from_config(const char *transport);
+
+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
+
+int config_parse_commandline(int argc, char **argv, int ignore_errors,
+ config_line_t **result,
+ config_line_t **cmdline_result);
void config_register_addressmaps(const or_options_t *options);
/* XXXX024 move to connection_edge.h */
@@ -102,5 +113,34 @@ int addressmap_register_auto(const char *from, const char *to,
addressmap_entry_source_t addrmap_source,
const char **msg);
+/** Represents the information stored in a torrc Bridge line. */
+typedef struct bridge_line_t {
+ tor_addr_t addr; /* The IP address of the bridge. */
+ uint16_t port; /* The TCP port of the bridge. */
+ 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
+ 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
new file mode 100644
index 000000000..c5400a651
--- /dev/null
+++ b/src/or/confparse.c
@@ -0,0 +1,1316 @@
+/* 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 */
+
+#include "or.h"
+#include "confparse.h"
+#include "routerset.h"
+
+static uint64_t config_parse_memunit(const char *s, int *ok);
+static int config_parse_msec_interval(const char *s, int *ok);
+static int config_parse_interval(const char *s, int *ok);
+static void config_reset(const config_format_t *fmt, void *options,
+ const config_var_t *var, int use_defaults);
+
+/** Allocate an empty configuration object of a given format type. */
+void *
+config_new(const config_format_t *fmt)
+{
+ void *opts = tor_malloc_zero(fmt->size);
+ *(uint32_t*)STRUCT_VAR_P(opts, fmt->magic_offset) = fmt->magic;
+ CONFIG_CHECK(fmt, opts);
+ return opts;
+}
+
+/*
+ * Functions to parse config options
+ */
+
+/** If <b>option</b> is an official abbreviation for a longer option,
+ * return the longer option. Otherwise return <b>option</b>.
+ * If <b>command_line</b> is set, apply all abbreviations. Otherwise, only
+ * apply abbreviations that work for the config file and the command line.
+ * If <b>warn_obsolete</b> is set, warn about deprecated names. */
+const char *
+config_expand_abbrev(const config_format_t *fmt, const char *option,
+ int command_line, int warn_obsolete)
+{
+ int i;
+ if (! fmt->abbrevs)
+ return option;
+ for (i=0; fmt->abbrevs[i].abbreviated; ++i) {
+ /* Abbreviations are case insensitive. */
+ if (!strcasecmp(option,fmt->abbrevs[i].abbreviated) &&
+ (command_line || !fmt->abbrevs[i].commandline_only)) {
+ if (warn_obsolete && fmt->abbrevs[i].warn) {
+ log_warn(LD_CONFIG,
+ "The configuration option '%s' is deprecated; "
+ "use '%s' instead.",
+ fmt->abbrevs[i].abbreviated,
+ fmt->abbrevs[i].full);
+ }
+ /* Keep going through the list in case we want to rewrite it more.
+ * (We could imagine recursing here, but I don't want to get the
+ * user into an infinite loop if we craft our list wrong.) */
+ option = fmt->abbrevs[i].full;
+ }
+ }
+ return option;
+}
+
+/** Helper: allocate a new configuration option mapping 'key' to 'val',
+ * append it to *<b>lst</b>. */
+void
+config_line_append(config_line_t **lst,
+ const char *key,
+ const char *val)
+{
+ config_line_t *newline;
+
+ newline = tor_malloc_zero(sizeof(config_line_t));
+ newline->key = tor_strdup(key);
+ newline->value = tor_strdup(val);
+ newline->next = NULL;
+ while (*lst)
+ lst = &((*lst)->next);
+
+ (*lst) = newline;
+}
+
+/** Return the line in <b>lines</b> whose key is exactly <b>key</b>, or NULL
+ * if no such key exists. For handling commandline-only options only; other
+ * options should be looked up in the appropriate data structure. */
+const config_line_t *
+config_line_find(const config_line_t *lines,
+ const char *key)
+{
+ const config_line_t *cl;
+ for (cl = lines; cl; cl = cl->next) {
+ if (!strcmp(cl->key, key))
+ return cl;
+ }
+ return NULL;
+}
+
+/** Helper: parse the config string and strdup into key/value
+ * strings. Set *result to the list, or NULL if parsing the string
+ * failed. Return 0 on success, -1 on failure. Warn and ignore any
+ * misformatted lines.
+ *
+ * If <b>extended</b> is set, then treat keys beginning with / and with + as
+ * indicating "clear" and "append" respectively. */
+int
+config_get_lines(const char *string, config_line_t **result, int extended)
+{
+ config_line_t *list = NULL, **next;
+ char *k, *v;
+ const char *parse_err;
+
+ next = &list;
+ do {
+ k = v = NULL;
+ string = parse_config_line_from_str_verbose(string, &k, &v, &parse_err);
+ if (!string) {
+ log_warn(LD_CONFIG, "Error while parsing configuration: %s",
+ parse_err?parse_err:"<unknown>");
+ config_free_lines(list);
+ tor_free(k);
+ tor_free(v);
+ return -1;
+ }
+ if (k && v) {
+ unsigned command = CONFIG_LINE_NORMAL;
+ if (extended) {
+ if (k[0] == '+') {
+ char *k_new = tor_strdup(k+1);
+ tor_free(k);
+ k = k_new;
+ command = CONFIG_LINE_APPEND;
+ } else if (k[0] == '/') {
+ char *k_new = tor_strdup(k+1);
+ tor_free(k);
+ k = k_new;
+ tor_free(v);
+ v = tor_strdup("");
+ command = CONFIG_LINE_CLEAR;
+ }
+ }
+ /* This list can get long, so we keep a pointer to the end of it
+ * rather than using config_line_append over and over and getting
+ * n^2 performance. */
+ *next = tor_malloc_zero(sizeof(config_line_t));
+ (*next)->key = k;
+ (*next)->value = v;
+ (*next)->next = NULL;
+ (*next)->command = command;
+ next = &((*next)->next);
+ } else {
+ tor_free(k);
+ tor_free(v);
+ }
+ } while (*string);
+
+ *result = list;
+ return 0;
+}
+
+/**
+ * Free all the configuration lines on the linked list <b>front</b>.
+ */
+void
+config_free_lines(config_line_t *front)
+{
+ config_line_t *tmp;
+
+ while (front) {
+ tmp = front;
+ front = tmp->next;
+
+ tor_free(tmp->key);
+ tor_free(tmp->value);
+ tor_free(tmp);
+ }
+}
+
+/** As config_find_option, but return a non-const pointer. */
+config_var_t *
+config_find_option_mutable(config_format_t *fmt, const char *key)
+{
+ int i;
+ size_t keylen = strlen(key);
+ if (!keylen)
+ return NULL; /* if they say "--" on the command line, it's not an option */
+ /* First, check for an exact (case-insensitive) match */
+ for (i=0; fmt->vars[i].name; ++i) {
+ if (!strcasecmp(key, fmt->vars[i].name)) {
+ return &fmt->vars[i];
+ }
+ }
+ /* If none, check for an abbreviated match */
+ for (i=0; fmt->vars[i].name; ++i) {
+ if (!strncasecmp(key, fmt->vars[i].name, keylen)) {
+ log_warn(LD_CONFIG, "The abbreviation '%s' is deprecated. "
+ "Please use '%s' instead",
+ key, fmt->vars[i].name);
+ return &fmt->vars[i];
+ }
+ }
+ /* Okay, unrecognized option */
+ return NULL;
+}
+
+/** If <b>key</b> is a configuration option, return the corresponding const
+ * config_var_t. Otherwise, if <b>key</b> is a non-standard abbreviation,
+ * warn, and return the corresponding const config_var_t. Otherwise return
+ * NULL.
+ */
+const config_var_t *
+config_find_option(const config_format_t *fmt, const char *key)
+{
+ return config_find_option_mutable((config_format_t*)fmt, key);
+}
+
+/** Return the number of option entries in <b>fmt</b>. */
+static int
+config_count_options(const config_format_t *fmt)
+{
+ int i;
+ for (i=0; fmt->vars[i].name; ++i)
+ ;
+ return i;
+}
+
+/*
+ * Functions to assign config options.
+ */
+
+/** <b>c</b>-\>key is known to be a real key. Update <b>options</b>
+ * with <b>c</b>-\>value and return 0, or return -1 if bad value.
+ *
+ * Called from config_assign_line() and option_reset().
+ */
+static int
+config_assign_value(const config_format_t *fmt, void *options,
+ config_line_t *c, char **msg)
+{
+ int i, ok;
+ const config_var_t *var;
+ void *lvalue;
+ int *csv_int;
+ smartlist_t *csv_str;
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, c->key);
+ tor_assert(var);
+
+ lvalue = STRUCT_VAR_P(options, var->var_offset);
+
+ switch (var->type) {
+
+ case CONFIG_TYPE_PORT:
+ if (!strcasecmp(c->value, "auto")) {
+ *(int *)lvalue = CFG_AUTO_PORT;
+ break;
+ }
+ /* fall through */
+ case CONFIG_TYPE_INT:
+ case CONFIG_TYPE_UINT:
+ i = (int)tor_parse_long(c->value, 10,
+ var->type==CONFIG_TYPE_INT ? INT_MIN : 0,
+ var->type==CONFIG_TYPE_PORT ? 65535 : INT_MAX,
+ &ok, NULL);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Int keyword '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+
+ case CONFIG_TYPE_INTERVAL: {
+ i = config_parse_interval(c->value, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Interval '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+ }
+
+ case CONFIG_TYPE_MSEC_INTERVAL: {
+ i = config_parse_msec_interval(c->value, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Msec interval '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+ }
+
+ case CONFIG_TYPE_MEMUNIT: {
+ uint64_t u64 = config_parse_memunit(c->value, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Value '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ return -1;
+ }
+ *(uint64_t *)lvalue = u64;
+ break;
+ }
+
+ case CONFIG_TYPE_BOOL:
+ i = (int)tor_parse_long(c->value, 10, 0, 1, &ok, NULL);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Boolean '%s %s' expects 0 or 1.",
+ c->key, c->value);
+ return -1;
+ }
+ *(int *)lvalue = i;
+ break;
+
+ case CONFIG_TYPE_AUTOBOOL:
+ if (!strcmp(c->value, "auto"))
+ *(int *)lvalue = -1;
+ else if (!strcmp(c->value, "0"))
+ *(int *)lvalue = 0;
+ else if (!strcmp(c->value, "1"))
+ *(int *)lvalue = 1;
+ else {
+ tor_asprintf(msg, "Boolean '%s %s' expects 0, 1, or 'auto'.",
+ c->key, c->value);
+ return -1;
+ }
+ break;
+
+ case CONFIG_TYPE_STRING:
+ case CONFIG_TYPE_FILENAME:
+ tor_free(*(char **)lvalue);
+ *(char **)lvalue = tor_strdup(c->value);
+ break;
+
+ case CONFIG_TYPE_DOUBLE:
+ *(double *)lvalue = atof(c->value);
+ break;
+
+ case CONFIG_TYPE_ISOTIME:
+ if (parse_iso_time(c->value, (time_t *)lvalue)) {
+ tor_asprintf(msg,
+ "Invalid time '%s' for keyword '%s'", c->value, c->key);
+ return -1;
+ }
+ break;
+
+ case CONFIG_TYPE_ROUTERSET:
+ if (*(routerset_t**)lvalue) {
+ routerset_free(*(routerset_t**)lvalue);
+ }
+ *(routerset_t**)lvalue = routerset_new();
+ if (routerset_parse(*(routerset_t**)lvalue, c->value, c->key)<0) {
+ tor_asprintf(msg, "Invalid exit list '%s' for option '%s'",
+ c->value, c->key);
+ return -1;
+ }
+ break;
+
+ case CONFIG_TYPE_CSV:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t**)lvalue, char *, cp, tor_free(cp));
+ smartlist_clear(*(smartlist_t**)lvalue);
+ } else {
+ *(smartlist_t**)lvalue = smartlist_new();
+ }
+
+ smartlist_split_string(*(smartlist_t**)lvalue, c->value, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ break;
+
+ case CONFIG_TYPE_CSV_INTERVAL:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t**)lvalue, int *, cp, tor_free(cp));
+ smartlist_clear(*(smartlist_t**)lvalue);
+ } else {
+ *(smartlist_t**)lvalue = smartlist_new();
+ }
+ csv_str = smartlist_new();
+ smartlist_split_string(csv_str, c->value, ",",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(csv_str, char *, str)
+ {
+ i = config_parse_interval(str, &ok);
+ if (!ok) {
+ tor_asprintf(msg,
+ "Interval in '%s %s' is malformed or out of bounds.",
+ c->key, c->value);
+ SMARTLIST_FOREACH(csv_str, char *, cp, tor_free(cp));
+ smartlist_free(csv_str);
+ return -1;
+ }
+ csv_int = tor_malloc_zero(sizeof(int));
+ *csv_int = i;
+ smartlist_add(*(smartlist_t**)lvalue, csv_int);
+ }
+ SMARTLIST_FOREACH_END(str);
+ SMARTLIST_FOREACH(csv_str, char *, cp, tor_free(cp));
+ smartlist_free(csv_str);
+ break;
+
+ case CONFIG_TYPE_LINELIST:
+ case CONFIG_TYPE_LINELIST_S:
+ {
+ config_line_t *lastval = *(config_line_t**)lvalue;
+ if (lastval && lastval->fragile) {
+ if (c->command != CONFIG_LINE_APPEND) {
+ config_free_lines(lastval);
+ *(config_line_t**)lvalue = NULL;
+ } else {
+ lastval->fragile = 0;
+ }
+ }
+
+ config_line_append((config_line_t**)lvalue, c->key, c->value);
+ }
+ break;
+ case CONFIG_TYPE_OBSOLETE:
+ log_warn(LD_CONFIG, "Skipping obsolete configuration option '%s'", c->key);
+ break;
+ case CONFIG_TYPE_LINELIST_V:
+ tor_asprintf(msg,
+ "You may not provide a value for virtual option '%s'", c->key);
+ return -1;
+ default:
+ tor_assert(0);
+ break;
+ }
+ return 0;
+}
+
+/** Mark every linelist in <b>options</b> "fragile", so that fresh assignments
+ * to it will replace old ones. */
+static void
+config_mark_lists_fragile(const config_format_t *fmt, void *options)
+{
+ int i;
+ tor_assert(fmt);
+ tor_assert(options);
+
+ for (i = 0; fmt->vars[i].name; ++i) {
+ const config_var_t *var = &fmt->vars[i];
+ config_line_t *list;
+ if (var->type != CONFIG_TYPE_LINELIST &&
+ var->type != CONFIG_TYPE_LINELIST_V)
+ continue;
+
+ list = *(config_line_t **)STRUCT_VAR_P(options, var->var_offset);
+ if (list)
+ list->fragile = 1;
+ }
+}
+
+/** If <b>c</b> is a syntactically valid configuration line, update
+ * <b>options</b> with its value and return 0. Otherwise return -1 for bad
+ * key, -2 for bad value.
+ *
+ * If <b>clear_first</b> is set, clear the value first. Then if
+ * <b>use_defaults</b> is set, set the value to the default.
+ *
+ * Called from config_assign().
+ */
+static int
+config_assign_line(const config_format_t *fmt, void *options,
+ config_line_t *c, int use_defaults,
+ int clear_first, bitarray_t *options_seen, char **msg)
+{
+ const config_var_t *var;
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, c->key);
+ if (!var) {
+ if (fmt->extra) {
+ void *lvalue = STRUCT_VAR_P(options, fmt->extra->var_offset);
+ log_info(LD_CONFIG,
+ "Found unrecognized option '%s'; saving it.", c->key);
+ config_line_append((config_line_t**)lvalue, c->key, c->value);
+ return 0;
+ } else {
+ tor_asprintf(msg,
+ "Unknown option '%s'. Failing.", c->key);
+ return -1;
+ }
+ }
+
+ /* Put keyword into canonical case. */
+ if (strcmp(var->name, c->key)) {
+ tor_free(c->key);
+ c->key = tor_strdup(var->name);
+ }
+
+ if (!strlen(c->value)) {
+ /* reset or clear it, then return */
+ if (!clear_first) {
+ if ((var->type == CONFIG_TYPE_LINELIST ||
+ var->type == CONFIG_TYPE_LINELIST_S) &&
+ c->command != CONFIG_LINE_CLEAR) {
+ /* We got an empty linelist from the torrc or command line.
+ As a special case, call this an error. Warn and ignore. */
+ log_warn(LD_CONFIG,
+ "Linelist option '%s' has no value. Skipping.", c->key);
+ } else { /* not already cleared */
+ config_reset(fmt, options, var, use_defaults);
+ }
+ }
+ return 0;
+ } else if (c->command == CONFIG_LINE_CLEAR && !clear_first) {
+ config_reset(fmt, options, var, use_defaults);
+ }
+
+ if (options_seen && (var->type != CONFIG_TYPE_LINELIST &&
+ var->type != CONFIG_TYPE_LINELIST_S)) {
+ /* We're tracking which options we've seen, and this option is not
+ * supposed to occur more than once. */
+ int var_index = (int)(var - fmt->vars);
+ if (bitarray_is_set(options_seen, var_index)) {
+ log_warn(LD_CONFIG, "Option '%s' used more than once; all but the last "
+ "value will be ignored.", var->name);
+ }
+ bitarray_set(options_seen, var_index);
+ }
+
+ if (config_assign_value(fmt, options, c, msg) < 0)
+ return -2;
+ return 0;
+}
+
+/** Restore the option named <b>key</b> in options to its default value.
+ * Called from config_assign(). */
+static void
+config_reset_line(const config_format_t *fmt, void *options,
+ const char *key, int use_defaults)
+{
+ const config_var_t *var;
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, key);
+ if (!var)
+ return; /* give error on next pass. */
+
+ config_reset(fmt, options, var, use_defaults);
+}
+
+/** Return true iff value needs to be quoted and escaped to be used in
+ * a configuration file. */
+static int
+config_value_needs_escape(const char *value)
+{
+ if (*value == '\"')
+ return 1;
+ while (*value) {
+ switch (*value)
+ {
+ case '\r':
+ case '\n':
+ case '#':
+ /* Note: quotes and backspaces need special handling when we are using
+ * quotes, not otherwise, so they don't trigger escaping on their
+ * own. */
+ return 1;
+ default:
+ if (!TOR_ISPRINT(*value))
+ return 1;
+ }
+ ++value;
+ }
+ return 0;
+}
+
+/** Return a newly allocated deep copy of the lines in <b>inp</b>. */
+config_line_t *
+config_lines_dup(const config_line_t *inp)
+{
+ config_line_t *result = NULL;
+ config_line_t **next_out = &result;
+ while (inp) {
+ *next_out = tor_malloc_zero(sizeof(config_line_t));
+ (*next_out)->key = tor_strdup(inp->key);
+ (*next_out)->value = tor_strdup(inp->value);
+ inp = inp->next;
+ next_out = &((*next_out)->next);
+ }
+ (*next_out) = NULL;
+ return result;
+}
+
+/** Return newly allocated line or lines corresponding to <b>key</b> in the
+ * configuration <b>options</b>. If <b>escape_val</b> is true and a
+ * value needs to be quoted before it's put in a config file, quote and
+ * escape that value. Return NULL if no such key exists. */
+config_line_t *
+config_get_assigned_option(const config_format_t *fmt, const void *options,
+ const char *key, int escape_val)
+{
+ const config_var_t *var;
+ const void *value;
+ config_line_t *result;
+ smartlist_t *csv_str;
+ tor_assert(options && key);
+
+ CONFIG_CHECK(fmt, options);
+
+ var = config_find_option(fmt, key);
+ if (!var) {
+ log_warn(LD_CONFIG, "Unknown option '%s'. Failing.", key);
+ return NULL;
+ }
+ value = STRUCT_VAR_P(options, var->var_offset);
+
+ result = tor_malloc_zero(sizeof(config_line_t));
+ result->key = tor_strdup(var->name);
+ switch (var->type)
+ {
+ case CONFIG_TYPE_STRING:
+ case CONFIG_TYPE_FILENAME:
+ if (*(char**)value) {
+ result->value = tor_strdup(*(char**)value);
+ } else {
+ tor_free(result->key);
+ tor_free(result);
+ return NULL;
+ }
+ break;
+ case CONFIG_TYPE_ISOTIME:
+ if (*(time_t*)value) {
+ result->value = tor_malloc(ISO_TIME_LEN+1);
+ format_iso_time(result->value, *(time_t*)value);
+ } else {
+ tor_free(result->key);
+ tor_free(result);
+ }
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_PORT:
+ if (*(int*)value == CFG_AUTO_PORT) {
+ result->value = tor_strdup("auto");
+ escape_val = 0;
+ break;
+ }
+ /* fall through */
+ case CONFIG_TYPE_INTERVAL:
+ case CONFIG_TYPE_MSEC_INTERVAL:
+ case CONFIG_TYPE_UINT:
+ case CONFIG_TYPE_INT:
+ /* This means every or_options_t uint or bool element
+ * needs to be an int. Not, say, a uint16_t or char. */
+ tor_asprintf(&result->value, "%d", *(int*)value);
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_MEMUNIT:
+ tor_asprintf(&result->value, U64_FORMAT,
+ U64_PRINTF_ARG(*(uint64_t*)value));
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_DOUBLE:
+ tor_asprintf(&result->value, "%f", *(double*)value);
+ escape_val = 0; /* Can't need escape. */
+ break;
+
+ case CONFIG_TYPE_AUTOBOOL:
+ if (*(int*)value == -1) {
+ result->value = tor_strdup("auto");
+ escape_val = 0;
+ break;
+ }
+ /* fall through */
+ case CONFIG_TYPE_BOOL:
+ result->value = tor_strdup(*(int*)value ? "1" : "0");
+ escape_val = 0; /* Can't need escape. */
+ break;
+ case CONFIG_TYPE_ROUTERSET:
+ result->value = routerset_to_string(*(routerset_t**)value);
+ break;
+ case CONFIG_TYPE_CSV:
+ if (*(smartlist_t**)value)
+ result->value =
+ smartlist_join_strings(*(smartlist_t**)value, ",", 0, NULL);
+ else
+ result->value = tor_strdup("");
+ break;
+ case CONFIG_TYPE_CSV_INTERVAL:
+ if (*(smartlist_t**)value) {
+ csv_str = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(*(smartlist_t**)value, int *, i)
+ {
+ smartlist_add_asprintf(csv_str, "%d", *i);
+ }
+ SMARTLIST_FOREACH_END(i);
+ result->value = smartlist_join_strings(csv_str, ",", 0, NULL);
+ SMARTLIST_FOREACH(csv_str, char *, cp, tor_free(cp));
+ smartlist_free(csv_str);
+ } else
+ result->value = tor_strdup("");
+ break;
+ case CONFIG_TYPE_OBSOLETE:
+ log_fn(LOG_INFO, LD_CONFIG,
+ "You asked me for the value of an obsolete config option '%s'.",
+ key);
+ tor_free(result->key);
+ tor_free(result);
+ return NULL;
+ case CONFIG_TYPE_LINELIST_S:
+ log_warn(LD_CONFIG,
+ "Can't return context-sensitive '%s' on its own", key);
+ tor_free(result->key);
+ tor_free(result);
+ return NULL;
+ case CONFIG_TYPE_LINELIST:
+ case CONFIG_TYPE_LINELIST_V:
+ tor_free(result->key);
+ tor_free(result);
+ result = config_lines_dup(*(const config_line_t**)value);
+ break;
+ default:
+ tor_free(result->key);
+ tor_free(result);
+ log_warn(LD_BUG,"Unknown type %d for known key '%s'",
+ var->type, key);
+ return NULL;
+ }
+
+ if (escape_val) {
+ config_line_t *line;
+ for (line = result; line; line = line->next) {
+ if (line->value && config_value_needs_escape(line->value)) {
+ char *newval = esc_for_log(line->value);
+ tor_free(line->value);
+ line->value = newval;
+ }
+ }
+ }
+
+ return result;
+}
+/** Iterate through the linked list of requested options <b>list</b>.
+ * For each item, convert as appropriate and assign to <b>options</b>.
+ * If an item is unrecognized, set *msg and return -1 immediately,
+ * else return 0 for success.
+ *
+ * If <b>clear_first</b>, interpret config options as replacing (not
+ * extending) their previous values. If <b>clear_first</b> is set,
+ * then <b>use_defaults</b> to decide if you set to defaults after
+ * clearing, or make the value 0 or NULL.
+ *
+ * Here are the use cases:
+ * 1. A non-empty AllowInvalid line in your torrc. Appends to current
+ * if linelist, replaces current if csv.
+ * 2. An empty AllowInvalid line in your torrc. Should clear it.
+ * 3. "RESETCONF AllowInvalid" sets it to default.
+ * 4. "SETCONF AllowInvalid" makes it NULL.
+ * 5. "SETCONF AllowInvalid=foo" clears it and sets it to "foo".
+ *
+ * Use_defaults Clear_first
+ * 0 0 "append"
+ * 1 0 undefined, don't use
+ * 0 1 "set to null first"
+ * 1 1 "set to defaults first"
+ * Return 0 on success, -1 on bad key, -2 on bad value.
+ *
+ * As an additional special case, if a LINELIST config option has
+ * no value and clear_first is 0, then warn and ignore it.
+ */
+
+/*
+There are three call cases for config_assign() currently.
+
+Case one: Torrc entry
+options_init_from_torrc() calls config_assign(0, 0)
+ calls config_assign_line(0, 0).
+ if value is empty, calls config_reset(0) and returns.
+ calls config_assign_value(), appends.
+
+Case two: setconf
+options_trial_assign() calls config_assign(0, 1)
+ calls config_reset_line(0)
+ calls config_reset(0)
+ calls option_clear().
+ calls config_assign_line(0, 1).
+ if value is empty, returns.
+ calls config_assign_value(), appends.
+
+Case three: resetconf
+options_trial_assign() calls config_assign(1, 1)
+ calls config_reset_line(1)
+ calls config_reset(1)
+ calls option_clear().
+ calls config_assign_value(default)
+ calls config_assign_line(1, 1).
+ returns.
+*/
+int
+config_assign(const config_format_t *fmt, void *options, config_line_t *list,
+ int use_defaults, int clear_first, char **msg)
+{
+ config_line_t *p;
+ bitarray_t *options_seen;
+ const int n_options = config_count_options(fmt);
+
+ CONFIG_CHECK(fmt, options);
+
+ /* pass 1: normalize keys */
+ for (p = list; p; p = p->next) {
+ const char *full = config_expand_abbrev(fmt, p->key, 0, 1);
+ if (strcmp(full,p->key)) {
+ tor_free(p->key);
+ p->key = tor_strdup(full);
+ }
+ }
+
+ /* pass 2: if we're reading from a resetting source, clear all
+ * mentioned config options, and maybe set to their defaults. */
+ if (clear_first) {
+ for (p = list; p; p = p->next)
+ config_reset_line(fmt, options, p->key, use_defaults);
+ }
+
+ options_seen = bitarray_init_zero(n_options);
+ /* pass 3: assign. */
+ while (list) {
+ int r;
+ if ((r=config_assign_line(fmt, options, list, use_defaults,
+ clear_first, options_seen, msg))) {
+ bitarray_free(options_seen);
+ return r;
+ }
+ list = list->next;
+ }
+ bitarray_free(options_seen);
+
+ /** Now we're done assigning a group of options to the configuration.
+ * Subsequent group assignments should _replace_ linelists, not extend
+ * them. */
+ config_mark_lists_fragile(fmt, options);
+
+ return 0;
+}
+
+/** Reset config option <b>var</b> to 0, 0.0, NULL, or the equivalent.
+ * Called from config_reset() and config_free(). */
+static void
+config_clear(const config_format_t *fmt, void *options,
+ const config_var_t *var)
+{
+ void *lvalue = STRUCT_VAR_P(options, var->var_offset);
+ (void)fmt; /* unused */
+ switch (var->type) {
+ case CONFIG_TYPE_STRING:
+ case CONFIG_TYPE_FILENAME:
+ tor_free(*(char**)lvalue);
+ break;
+ case CONFIG_TYPE_DOUBLE:
+ *(double*)lvalue = 0.0;
+ break;
+ case CONFIG_TYPE_ISOTIME:
+ *(time_t*)lvalue = 0;
+ break;
+ case CONFIG_TYPE_INTERVAL:
+ case CONFIG_TYPE_MSEC_INTERVAL:
+ case CONFIG_TYPE_UINT:
+ case CONFIG_TYPE_INT:
+ case CONFIG_TYPE_PORT:
+ case CONFIG_TYPE_BOOL:
+ *(int*)lvalue = 0;
+ break;
+ case CONFIG_TYPE_AUTOBOOL:
+ *(int*)lvalue = -1;
+ break;
+ case CONFIG_TYPE_MEMUNIT:
+ *(uint64_t*)lvalue = 0;
+ break;
+ case CONFIG_TYPE_ROUTERSET:
+ if (*(routerset_t**)lvalue) {
+ routerset_free(*(routerset_t**)lvalue);
+ *(routerset_t**)lvalue = NULL;
+ }
+ break;
+ case CONFIG_TYPE_CSV:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t **)lvalue, char *, cp, tor_free(cp));
+ smartlist_free(*(smartlist_t **)lvalue);
+ *(smartlist_t **)lvalue = NULL;
+ }
+ break;
+ case CONFIG_TYPE_CSV_INTERVAL:
+ if (*(smartlist_t**)lvalue) {
+ SMARTLIST_FOREACH(*(smartlist_t **)lvalue, int *, cp, tor_free(cp));
+ smartlist_free(*(smartlist_t **)lvalue);
+ *(smartlist_t **)lvalue = NULL;
+ }
+ break;
+ case CONFIG_TYPE_LINELIST:
+ case CONFIG_TYPE_LINELIST_S:
+ config_free_lines(*(config_line_t **)lvalue);
+ *(config_line_t **)lvalue = NULL;
+ break;
+ case CONFIG_TYPE_LINELIST_V:
+ /* handled by linelist_s. */
+ break;
+ case CONFIG_TYPE_OBSOLETE:
+ break;
+ }
+}
+
+/** Clear the option indexed by <b>var</b> in <b>options</b>. Then if
+ * <b>use_defaults</b>, set it to its default value.
+ * Called by config_init() and option_reset_line() and option_assign_line(). */
+static void
+config_reset(const config_format_t *fmt, void *options,
+ const config_var_t *var, int use_defaults)
+{
+ config_line_t *c;
+ char *msg = NULL;
+ CONFIG_CHECK(fmt, options);
+ config_clear(fmt, options, var); /* clear it first */
+ if (!use_defaults)
+ return; /* all done */
+ if (var->initvalue) {
+ c = tor_malloc_zero(sizeof(config_line_t));
+ c->key = tor_strdup(var->name);
+ c->value = tor_strdup(var->initvalue);
+ if (config_assign_value(fmt, options, c, &msg) < 0) {
+ log_warn(LD_BUG, "Failed to assign default: %s", msg);
+ tor_free(msg); /* if this happens it's a bug */
+ }
+ config_free_lines(c);
+ }
+}
+
+/** Release storage held by <b>options</b>. */
+void
+config_free(const config_format_t *fmt, void *options)
+{
+ int i;
+
+ if (!options)
+ return;
+
+ tor_assert(fmt);
+
+ for (i=0; fmt->vars[i].name; ++i)
+ config_clear(fmt, options, &(fmt->vars[i]));
+ if (fmt->extra) {
+ config_line_t **linep = STRUCT_VAR_P(options, fmt->extra->var_offset);
+ config_free_lines(*linep);
+ *linep = NULL;
+ }
+ tor_free(options);
+}
+
+/** Return true iff a and b contain identical keys and values in identical
+ * order. */
+int
+config_lines_eq(config_line_t *a, config_line_t *b)
+{
+ while (a && b) {
+ if (strcasecmp(a->key, b->key) || strcmp(a->value, b->value))
+ return 0;
+ a = a->next;
+ b = b->next;
+ }
+ if (a || b)
+ return 0;
+ return 1;
+}
+
+/** Return the number of lines in <b>a</b> whose key is <b>key</b>. */
+int
+config_count_key(const config_line_t *a, const char *key)
+{
+ int n = 0;
+ while (a) {
+ if (!strcasecmp(a->key, key)) {
+ ++n;
+ }
+ a = a->next;
+ }
+ return n;
+}
+
+/** Return true iff the option <b>name</b> has the same value in <b>o1</b>
+ * and <b>o2</b>. Must not be called for LINELIST_S or OBSOLETE options.
+ */
+int
+config_is_same(const config_format_t *fmt,
+ const void *o1, const void *o2,
+ const char *name)
+{
+ config_line_t *c1, *c2;
+ int r = 1;
+ CONFIG_CHECK(fmt, o1);
+ CONFIG_CHECK(fmt, o2);
+
+ c1 = config_get_assigned_option(fmt, o1, name, 0);
+ c2 = config_get_assigned_option(fmt, o2, name, 0);
+ r = config_lines_eq(c1, c2);
+ config_free_lines(c1);
+ config_free_lines(c2);
+ return r;
+}
+
+/** Copy storage held by <b>old</b> into a new or_options_t and return it. */
+void *
+config_dup(const config_format_t *fmt, const void *old)
+{
+ void *newopts;
+ int i;
+ config_line_t *line;
+
+ newopts = config_new(fmt);
+ for (i=0; fmt->vars[i].name; ++i) {
+ if (fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
+ continue;
+ if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE)
+ continue;
+ line = config_get_assigned_option(fmt, old, fmt->vars[i].name, 0);
+ if (line) {
+ char *msg = NULL;
+ if (config_assign(fmt, newopts, line, 0, 0, &msg) < 0) {
+ log_err(LD_BUG, "config_get_assigned_option() generated "
+ "something we couldn't config_assign(): %s", msg);
+ tor_free(msg);
+ tor_assert(0);
+ }
+ }
+ config_free_lines(line);
+ }
+ return newopts;
+}
+/** Set all vars in the configuration object <b>options</b> to their default
+ * values. */
+void
+config_init(const config_format_t *fmt, void *options)
+{
+ int i;
+ const config_var_t *var;
+ CONFIG_CHECK(fmt, options);
+
+ for (i=0; fmt->vars[i].name; ++i) {
+ var = &fmt->vars[i];
+ if (!var->initvalue)
+ continue; /* defaults to NULL or 0 */
+ config_reset(fmt, options, var, 1);
+ }
+}
+
+/** Allocate and return a new string holding the written-out values of the vars
+ * in 'options'. If 'minimal', do not write out any default-valued vars.
+ * Else, if comment_defaults, write default values as comments.
+ */
+char *
+config_dump(const config_format_t *fmt, const void *default_options,
+ const void *options, int minimal,
+ int comment_defaults)
+{
+ smartlist_t *elements;
+ const void *defaults = default_options;
+ void *defaults_tmp = NULL;
+ config_line_t *line, *assigned;
+ char *result;
+ int i;
+ char *msg = NULL;
+
+ if (defaults == NULL) {
+ defaults = defaults_tmp = config_new(fmt);
+ config_init(fmt, defaults_tmp);
+ }
+
+ /* XXX use a 1 here so we don't add a new log line while dumping */
+ if (default_options == NULL) {
+ if (fmt->validate_fn(NULL, defaults_tmp, defaults_tmp, 1, &msg) < 0) {
+ log_err(LD_BUG, "Failed to validate default config: %s", msg);
+ tor_free(msg);
+ tor_assert(0);
+ }
+ }
+
+ elements = smartlist_new();
+ for (i=0; fmt->vars[i].name; ++i) {
+ int comment_option = 0;
+ if (fmt->vars[i].type == CONFIG_TYPE_OBSOLETE ||
+ fmt->vars[i].type == CONFIG_TYPE_LINELIST_S)
+ continue;
+ /* Don't save 'hidden' control variables. */
+ if (!strcmpstart(fmt->vars[i].name, "__"))
+ continue;
+ if (minimal && config_is_same(fmt, options, defaults, fmt->vars[i].name))
+ continue;
+ else if (comment_defaults &&
+ config_is_same(fmt, options, defaults, fmt->vars[i].name))
+ comment_option = 1;
+
+ line = assigned =
+ config_get_assigned_option(fmt, options, fmt->vars[i].name, 1);
+
+ for (; line; line = line->next) {
+ smartlist_add_asprintf(elements, "%s%s %s\n",
+ comment_option ? "# " : "",
+ line->key, line->value);
+ }
+ config_free_lines(assigned);
+ }
+
+ if (fmt->extra) {
+ line = *(config_line_t**)STRUCT_VAR_P(options, fmt->extra->var_offset);
+ for (; line; line = line->next) {
+ smartlist_add_asprintf(elements, "%s %s\n", line->key, line->value);
+ }
+ }
+
+ result = smartlist_join_strings(elements, "", 0, NULL);
+ SMARTLIST_FOREACH(elements, char *, cp, tor_free(cp));
+ smartlist_free(elements);
+ if (defaults_tmp)
+ config_free(fmt, defaults_tmp);
+ return result;
+}
+
+/** Mapping from a unit name to a multiplier for converting that unit into a
+ * base unit. Used by config_parse_unit. */
+struct unit_table_t {
+ const char *unit; /**< The name of the unit */
+ uint64_t multiplier; /**< How many of the base unit appear in this unit */
+};
+
+/** Table to map the names of memory units to the number of bytes they
+ * contain. */
+static struct unit_table_t memory_units[] = {
+ { "", 1 },
+ { "b", 1<< 0 },
+ { "byte", 1<< 0 },
+ { "bytes", 1<< 0 },
+ { "kb", 1<<10 },
+ { "kbyte", 1<<10 },
+ { "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 },
+};
+
+/** Table to map the names of time units to the number of seconds they
+ * contain. */
+static struct unit_table_t time_units[] = {
+ { "", 1 },
+ { "second", 1 },
+ { "seconds", 1 },
+ { "minute", 60 },
+ { "minutes", 60 },
+ { "hour", 60*60 },
+ { "hours", 60*60 },
+ { "day", 24*60*60 },
+ { "days", 24*60*60 },
+ { "week", 7*24*60*60 },
+ { "weeks", 7*24*60*60 },
+ { "month", 2629728, }, /* about 30.437 days */
+ { "months", 2629728, },
+ { NULL, 0 },
+};
+
+/** Table to map the names of time units to the number of milliseconds
+ * they contain. */
+static struct unit_table_t time_msec_units[] = {
+ { "", 1 },
+ { "msec", 1 },
+ { "millisecond", 1 },
+ { "milliseconds", 1 },
+ { "second", 1000 },
+ { "seconds", 1000 },
+ { "minute", 60*1000 },
+ { "minutes", 60*1000 },
+ { "hour", 60*60*1000 },
+ { "hours", 60*60*1000 },
+ { "day", 24*60*60*1000 },
+ { "days", 24*60*60*1000 },
+ { "week", 7*24*60*60*1000 },
+ { "weeks", 7*24*60*60*1000 },
+ { NULL, 0 },
+};
+
+/** Parse a string <b>val</b> containing a number, zero or more
+ * spaces, and an optional unit string. If the unit appears in the
+ * table <b>u</b>, then multiply the number by the unit multiplier.
+ * On success, set *<b>ok</b> to 1 and return this product.
+ * Otherwise, set *<b>ok</b> to 0.
+ */
+static uint64_t
+config_parse_units(const char *val, struct unit_table_t *u, int *ok)
+{
+ uint64_t v = 0;
+ double d = 0;
+ int use_float = 0;
+ char *cp;
+
+ tor_assert(ok);
+
+ v = tor_parse_uint64(val, 10, 0, UINT64_MAX, ok, &cp);
+ if (!*ok || (cp && *cp == '.')) {
+ d = tor_parse_double(val, 0, UINT64_MAX, ok, &cp);
+ if (!*ok)
+ goto done;
+ use_float = 1;
+ }
+
+ if (!cp) {
+ *ok = 1;
+ v = use_float ? DBL_TO_U64(d) : v;
+ goto done;
+ }
+
+ cp = (char*) eat_whitespace(cp);
+
+ for ( ;u->unit;++u) {
+ if (!strcasecmp(u->unit, cp)) {
+ if (use_float)
+ v = u->multiplier * d;
+ else
+ v *= u->multiplier;
+ *ok = 1;
+ goto done;
+ }
+ }
+ log_warn(LD_CONFIG, "Unknown unit '%s'.", cp);
+ *ok = 0;
+ done:
+
+ if (*ok)
+ return v;
+ else
+ return 0;
+}
+
+/** Parse a string in the format "number unit", where unit is a unit of
+ * information (byte, KB, M, etc). On success, set *<b>ok</b> to true
+ * and return the number of bytes specified. Otherwise, set
+ * *<b>ok</b> to false and return 0. */
+static uint64_t
+config_parse_memunit(const char *s, int *ok)
+{
+ uint64_t u = config_parse_units(s, memory_units, ok);
+ return u;
+}
+
+/** Parse a string in the format "number unit", where unit is a unit of
+ * time in milliseconds. On success, set *<b>ok</b> to true and return
+ * the number of milliseconds in the provided interval. Otherwise, set
+ * *<b>ok</b> to 0 and return -1. */
+static int
+config_parse_msec_interval(const char *s, int *ok)
+{
+ uint64_t r;
+ r = config_parse_units(s, time_msec_units, ok);
+ if (!ok)
+ return -1;
+ if (r > INT_MAX) {
+ log_warn(LD_CONFIG, "Msec interval '%s' is too long", s);
+ *ok = 0;
+ return -1;
+ }
+ return (int)r;
+}
+
+/** Parse a string in the format "number unit", where unit is a unit of time.
+ * On success, set *<b>ok</b> to true and return the number of seconds in
+ * the provided interval. Otherwise, set *<b>ok</b> to 0 and return -1.
+ */
+static int
+config_parse_interval(const char *s, int *ok)
+{
+ uint64_t r;
+ r = config_parse_units(s, time_units, ok);
+ if (!ok)
+ return -1;
+ if (r > INT_MAX) {
+ log_warn(LD_CONFIG, "Interval '%s' is too long", s);
+ *ok = 0;
+ return -1;
+ }
+ return (int)r;
+}
+
diff --git a/src/or/confparse.h b/src/or/confparse.h
new file mode 100644
index 000000000..2cd6c49a2
--- /dev/null
+++ b/src/or/confparse.h
@@ -0,0 +1,137 @@
+/* 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 TOR_CONFPARSE_H
+#define TOR_CONFPARSE_H
+
+/** Enumeration of types which option values can take */
+typedef enum config_type_t {
+ CONFIG_TYPE_STRING = 0, /**< An arbitrary string. */
+ CONFIG_TYPE_FILENAME, /**< A filename: some prefixes get expanded. */
+ CONFIG_TYPE_UINT, /**< A non-negative integer less than MAX_INT */
+ CONFIG_TYPE_INT, /**< Any integer. */
+ CONFIG_TYPE_PORT, /**< A port from 1...65535, 0 for "not set", or
+ * "auto". */
+ CONFIG_TYPE_INTERVAL, /**< A number of seconds, with optional units*/
+ CONFIG_TYPE_MSEC_INTERVAL,/**< A number of milliseconds, with optional
+ * units */
+ CONFIG_TYPE_MEMUNIT, /**< A number of bytes, with optional units*/
+ CONFIG_TYPE_DOUBLE, /**< A floating-point value */
+ CONFIG_TYPE_BOOL, /**< A boolean value, expressed as 0 or 1. */
+ CONFIG_TYPE_AUTOBOOL, /**< A boolean+auto value, expressed 0 for false,
+ * 1 for true, and -1 for auto */
+ CONFIG_TYPE_ISOTIME, /**< An ISO-formatted time relative to UTC. */
+ CONFIG_TYPE_CSV, /**< A list of strings, separated by commas and
+ * optional whitespace. */
+ CONFIG_TYPE_CSV_INTERVAL, /**< A list of strings, separated by commas and
+ * optional whitespace, representing intervals in
+ * seconds, with optional units */
+ CONFIG_TYPE_LINELIST, /**< Uninterpreted config lines */
+ CONFIG_TYPE_LINELIST_S, /**< Uninterpreted, context-sensitive config lines,
+ * mixed with other keywords. */
+ CONFIG_TYPE_LINELIST_V, /**< Catch-all "virtual" option to summarize
+ * context-sensitive config lines when fetching.
+ */
+ CONFIG_TYPE_ROUTERSET, /**< A list of router names, addrs, and fps,
+ * parsed into a routerset_t. */
+ CONFIG_TYPE_OBSOLETE, /**< Obsolete (ignored) option. */
+} config_type_t;
+
+/** An abbreviation for a configuration option allowed on the command line. */
+typedef struct config_abbrev_t {
+ const char *abbreviated;
+ const char *full;
+ int commandline_only;
+ int warn;
+} config_abbrev_t;
+
+/* Handy macro for declaring "In the config file or on the command line,
+ * you can abbreviate <b>tok</b>s as <b>tok</b>". */
+#define PLURAL(tok) { #tok, #tok "s", 0, 0 }
+
+/** A variable allowed in the configuration file or on the command line. */
+typedef struct config_var_t {
+ const char *name; /**< The full keyword (case insensitive). */
+ config_type_t type; /**< How to interpret the type and turn it into a
+ * value. */
+ off_t var_offset; /**< Offset of the corresponding member of or_options_t. */
+ const char *initvalue; /**< String (or null) describing initial value. */
+} config_var_t;
+
+/** Represents an English description of a configuration variable; used when
+ * generating configuration file comments. */
+typedef struct config_var_description_t {
+ const char *name;
+ const char *description;
+} config_var_description_t;
+
+/** Type of a callback to validate whether a given configuration is
+ * well-formed and consistent. See options_trial_assign() for documentation
+ * of arguments. */
+typedef int (*validate_fn_t)(void*,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 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. */
+ off_t magic_offset; /**< Offset of the magic value within the struct. */
+ config_abbrev_t *abbrevs; /**< List of abbreviations that we expand when
+ * parsing this format. */
+ config_var_t *vars; /**< List of variables we recognize, their default
+ * values, and where we stick them in the structure. */
+ validate_fn_t validate_fn; /**< Function to validate config. */
+ /** If present, extra is a LINELIST variable for unrecognized
+ * lines. Otherwise, unrecognized lines are an error. */
+ config_var_t *extra;
+} config_format_t;
+
+/** Macro: assert that <b>cfg</b> has the right magic field for format
+ * <b>fmt</b>. */
+#define CONFIG_CHECK(fmt, cfg) STMT_BEGIN \
+ tor_assert(fmt && cfg); \
+ tor_assert((fmt)->magic == \
+ *(uint32_t*)STRUCT_VAR_P(cfg,fmt->magic_offset)); \
+ STMT_END
+
+void *config_new(const config_format_t *fmt);
+void config_line_append(config_line_t **lst,
+ const char *key, const char *val);
+config_line_t *config_lines_dup(const config_line_t *inp);
+const config_line_t *config_line_find(const config_line_t *lines,
+ const char *key);
+void config_free(const config_format_t *fmt, void *options);
+int config_lines_eq(config_line_t *a, config_line_t *b);
+int config_count_key(const config_line_t *a, const char *key);
+config_line_t *config_get_assigned_option(const config_format_t *fmt,
+ const void *options, const char *key,
+ int escape_val);
+int config_is_same(const config_format_t *fmt,
+ const void *o1, const void *o2,
+ const char *name);
+void config_init(const config_format_t *fmt, void *options);
+void *config_dup(const config_format_t *fmt, const void *old);
+char *config_dump(const config_format_t *fmt, const void *default_options,
+ const void *options, int minimal,
+ int comment_defaults);
+int config_assign(const config_format_t *fmt, void *options,
+ config_line_t *list,
+ int use_defaults, int clear_first, char **msg);
+config_var_t *config_find_option_mutable(config_format_t *fmt,
+ const char *key);
+const config_var_t *config_find_option(const config_format_t *fmt,
+ const char *key);
+
+int config_get_lines(const char *string, config_line_t **result, int extended);
+void config_free_lines(config_line_t *front);
+const char *config_expand_abbrev(const config_format_t *fmt,
+ const char *option,
+ int command_line, int warn_obsolete);
+
+#endif
+
diff --git a/src/or/connection.c b/src/or/connection.c
index eac9c4f32..cef9172ff 100644
--- a/src/or/connection.c
+++ b/src/or/connection.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,8 +10,17 @@
* on connections.
**/
+#define CONNECTION_PRIVATE
#include "or.h"
#include "buffers.h"
+/*
+ * Define this so we get channel internal functions, since we're implementing
+ * part of a subclass (channel_tls_t).
+ */
+#define TOR_CHANNEL_INTERNAL_
+#define CONNECTION_PRIVATE
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
@@ -25,6 +34,8 @@
#include "dirserv.h"
#include "dns.h"
#include "dnsserv.h"
+#include "entrynodes.h"
+#include "ext_orport.h"
#include "geoip.h"
#include "main.h"
#include "policies.h"
@@ -34,7 +45,9 @@
#include "rendcommon.h"
#include "rephist.h"
#include "router.h"
+#include "transports.h"
#include "routerparse.h"
+#include "transports.h"
#ifdef USE_BUFFEREVENTS
#include <event2/event.h>
@@ -88,6 +101,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: \
@@ -119,6 +133,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);
@@ -155,6 +171,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";
@@ -219,6 +247,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:
@@ -238,25 +267,35 @@ dir_connection_new(int socket_family)
}
/** Allocate and return a new or_connection_t, initialized as by
- * connection_init(). */
+ * connection_init().
+ *
+ * Set timestamp_last_added_nonpadding to now.
+ *
+ * Initialize active_circuit_pqueue.
+ *
+ * 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);
- or_conn->next_circ_id = crypto_rand_int(1<<15);
- or_conn->active_circuit_pqueue = smartlist_new();
- or_conn->active_circuit_pqueue_last_recalibrated = cell_ewma_get_tick();
+ if (type == CONN_TYPE_EXT_OR)
+ connection_or_set_ext_or_identifier(or_conn);
return or_conn;
}
/** Allocate and return a new entry_connection_t, initialized as by
- * connection_init(). */
+ * connection_init().
+ *
+ * Allocate space to store the socks_request.
+ */
entry_connection_t *
entry_connection_new(int type, int socket_family)
{
@@ -264,6 +303,13 @@ entry_connection_new(int type, int socket_family)
tor_assert(type == CONN_TYPE_AP);
connection_init(time(NULL), ENTRY_TO_CONN(entry_conn), type, socket_family);
entry_conn->socks_request = socks_request_new();
+ /* If this is coming from a listener, we'll set it up based on the listener
+ * in a little while. Otherwise, we're doing this as a linked connection
+ * of some kind, and we should set it up here based on the socket family */
+ if (socket_family == AF_INET)
+ entry_conn->ipv4_traffic_ok = 1;
+ else if (socket_family == AF_INET6)
+ entry_conn->ipv6_traffic_ok = 1;
return entry_conn;
}
@@ -287,7 +333,6 @@ control_connection_new(int socket_family)
tor_malloc_zero(sizeof(control_connection_t));
connection_init(time(NULL),
TO_CONN(control_conn), CONN_TYPE_CONTROL, socket_family);
- log_notice(LD_CONTROL, "New control connection opened.");
return control_conn;
}
@@ -310,7 +355,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));
@@ -338,14 +384,11 @@ connection_new(int type, int socket_family)
/** Initializes conn. (you must call connection_add() to link it into the main
* array).
*
+ * Set conn-\>magic to the correct value.
+ *
* Set conn-\>type to <b>type</b>. Set conn-\>s and conn-\>conn_array_index to
* -1 to signify they are not yet assigned.
*
- * If conn is not a listener type, allocate buffers for it. If it's
- * an AP type, allocate space to store the socks_request.
- *
- * Assign a pseudorandom next_circ_id between 0 and 2**15.
- *
* Initialize conn's timestamps to now.
*/
static void
@@ -355,6 +398,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:
@@ -413,8 +457,8 @@ 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
-_connection_free(connection_t *conn)
+STATIC void
+connection_free_(connection_t *conn)
{
void *mem;
size_t memlen;
@@ -423,6 +467,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);
@@ -492,8 +537,23 @@ _connection_free(connection_t *conn)
or_conn->tls = NULL;
or_handshake_state_free(or_conn->handshake_state);
or_conn->handshake_state = NULL;
- smartlist_free(or_conn->active_circuit_pqueue);
tor_free(or_conn->nickname);
+ if (or_conn->chan) {
+ /* Owww, this shouldn't happen, but... */
+ log_info(LD_CHANNEL,
+ "Freeing orconn at %p, saw channel %p with ID "
+ U64_FORMAT " left un-NULLed",
+ or_conn, TLS_CHAN_TO_BASE(or_conn->chan),
+ U64_PRINTF_ARG(
+ TLS_CHAN_TO_BASE(or_conn->chan)->global_identifier));
+ if (!(TLS_CHAN_TO_BASE(or_conn->chan)->state == CHANNEL_STATE_CLOSED ||
+ TLS_CHAN_TO_BASE(or_conn->chan)->state == CHANNEL_STATE_ERROR)) {
+ channel_close_for_error(TLS_CHAN_TO_BASE(or_conn->chan));
+ }
+
+ or_conn->chan->conn = NULL;
+ or_conn->chan = NULL;
+ }
}
if (conn->type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = TO_ENTRY_CONN(conn);
@@ -554,6 +614,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);
@@ -592,7 +659,7 @@ connection_free(connection_t *conn)
connection_control_closed(TO_CONTROL_CONN(conn));
}
connection_unregister_events(conn);
- _connection_free(conn);
+ connection_free_(conn);
}
/**
@@ -617,6 +684,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:
@@ -668,7 +736,42 @@ connection_close_immediate(connection_t *conn)
/** Mark <b>conn</b> to be closed next time we loop through
* conn_close_if_marked() in main.c. */
void
-_connection_mark_for_close(connection_t *conn, int line, const char *file)
+connection_mark_for_close_(connection_t *conn, int line, const char *file)
+{
+ assert_connection_ok(conn,0);
+ tor_assert(line);
+ tor_assert(line < 1<<16); /* marked_for_close can only fit a uint16_t. */
+ tor_assert(file);
+
+ if (conn->type == CONN_TYPE_OR) {
+ /*
+ * An or_connection should have been closed through one of the channel-
+ * aware functions in connection_or.c. We'll assume this is an error
+ * close and do that, and log a bug warning.
+ */
+ log_warn(LD_CHANNEL | LD_BUG,
+ "Something tried to close an or_connection_t without going "
+ "through channels at %s:%d",
+ file, line);
+ connection_or_close_for_error(TO_OR_CONN(conn), 0);
+ } else {
+ /* Pass it down to the real function */
+ connection_mark_for_close_internal_(conn, line, file);
+ }
+}
+
+/** Mark <b>conn</b> to be closed next time we loop through
+ * conn_close_if_marked() in main.c; the _internal version bypasses the
+ * CONN_TYPE_OR checks; this should be called when you either are sure that
+ * if this is an or_connection_t the controlling channel has been notified
+ * (e.g. with connection_or_notify_error()), or you actually are the
+ * connection_or_close_for_error() or connection_or_close_normally function.
+ * For all other cases, use connection_mark_and_flush() instead, which
+ * checks for or_connection_t properly, instead. See below.
+ */
+void
+connection_mark_for_close_internal_(connection_t *conn,
+ int line, const char *file)
{
assert_connection_ok(conn,0);
tor_assert(line);
@@ -676,13 +779,24 @@ _connection_mark_for_close(connection_t *conn, int line, const char *file)
tor_assert(file);
if (conn->marked_for_close) {
- log(LOG_WARN,LD_BUG,"Duplicate call to connection_mark_for_close at %s:%d"
+ log_warn(LD_BUG,"Duplicate call to connection_mark_for_close at %s:%d"
" (first at %s:%d)", file, line, conn->marked_for_close_file,
conn->marked_for_close);
tor_fragile_assert();
return;
}
+ if (conn->type == CONN_TYPE_OR) {
+ /*
+ * Bad news if this happens without telling the controlling channel; do
+ * this so we can find things that call this wrongly when the asserts hit.
+ */
+ log_debug(LD_CHANNEL,
+ "Calling connection_mark_for_close_internal_() on an OR conn "
+ "at %s:%d",
+ file, line);
+ }
+
conn->marked_for_close = line;
conn->marked_for_close_file = file;
add_connection_to_closeable_list(conn);
@@ -810,8 +924,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;
@@ -839,12 +956,14 @@ check_location_for_unix_socket(const or_options_t *options, const char *path)
#endif
/** Tell the TCP stack that it shouldn't wait for a long time after
- * <b>sock</b> has closed before reusing its port. */
-static void
+ * <b>sock</b> has closed before reusing its port. Return 0 on success,
+ * -1 on failure. */
+static int
make_socket_reuseable(tor_socket_t sock)
{
#ifdef _WIN32
(void) sock;
+ return 0;
#else
int one=1;
@@ -852,11 +971,35 @@ make_socket_reuseable(tor_socket_t sock)
* right after somebody else has let it go. But REUSEADDR on win32
* means you can bind to the port _even when somebody else
* already has it bound_. So, don't do that on Win32. */
- setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
- (socklen_t)sizeof(one));
+ if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void*) &one,
+ (socklen_t)sizeof(one)) == -1) {
+ return -1;
+ }
+ return 0;
#endif
}
+/** Max backlog to pass to listen. We start at */
+static int listen_limit = INT_MAX;
+
+/* Listen on <b>fd</b> with appropriate backlog. Return as for listen. */
+static int
+tor_listen(tor_socket_t fd)
+{
+ int r;
+
+ if ((r = listen(fd, listen_limit)) < 0) {
+ if (listen_limit == SOMAXCONN)
+ return r;
+ if ((r = listen(fd, SOMAXCONN)) == 0) {
+ listen_limit = SOMAXCONN;
+ log_warn(LD_NET, "Setting listen backlog to INT_MAX connections "
+ "didn't work, but SOMAXCONN did. Lowering backlog limit.");
+ }
+ }
+ return r;
+}
+
/** Bind a new non-blocking socket listening to the socket described
* by <b>listensockaddr</b>.
*
@@ -865,23 +1008,23 @@ make_socket_reuseable(tor_socket_t sock)
*/
static connection_t *
connection_listener_new(const struct sockaddr *listensockaddr,
- socklen_t socklen,
- int type, const char *address,
- const port_cfg_t *port_cfg)
+ socklen_t socklen,
+ int type, const char *address,
+ const port_cfg_t *port_cfg)
{
listener_connection_t *lis_conn;
- connection_t *conn;
- tor_socket_t s; /* the socket we're going to make */
+ connection_t *conn = NULL;
+ tor_socket_t s = TOR_INVALID_SOCKET; /* the socket we're going to make */
or_options_t const *options = get_options();
#if defined(HAVE_PWD_H) && defined(HAVE_SYS_UN_H)
- struct passwd *pw = NULL;
+ const struct passwd *pw = NULL;
#endif
uint16_t usePort = 0, gotPort = 0;
int start_reading = 0;
static int global_next_session_group = SESSION_GROUP_FIRST_AUTO;
tor_addr_t addr;
- if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
+ if (get_n_open_sockets() >= get_options()->ConnLimit_-1) {
warn_too_many_conns();
return NULL;
}
@@ -894,10 +1037,10 @@ connection_listener_new(const struct sockaddr *listensockaddr,
tor_addr_from_sockaddr(&addr, listensockaddr, &usePort);
- log_notice(LD_NET, "Opening %s on %s:%d",
- conn_type_to_string(type), fmt_addr(&addr), usePort);
+ 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)) {
@@ -906,7 +1049,27 @@ connection_listener_new(const struct sockaddr *listensockaddr,
goto err;
}
- make_socket_reuseable(s);
+ if (make_socket_reuseable(s) < 0) {
+ log_warn(LD_NET, "Error setting SO_REUSEADDR flag on %s: %s",
+ conn_type_to_string(type),
+ tor_socket_strerror(errno));
+ }
+
+#if defined USE_TRANSPARENT && defined(IP_TRANSPARENT)
+ if (options->TransProxyType_parsed == TPT_TPROXY &&
+ type == CONN_TYPE_AP_TRANS_LISTENER) {
+ int one = 1;
+ if (setsockopt(s, SOL_IP, IP_TRANSPARENT, &one, sizeof(one)) < 0) {
+ const char *extra = "";
+ int e = tor_socket_errno(s);
+ if (e == EPERM)
+ extra = "TransTPROXY requires root privileges or similar"
+ " capabilities.";
+ log_warn(LD_NET, "Error setting IP_TRANSPARENT flag: %s.%s",
+ tor_socket_strerror(e), extra);
+ }
+ }
+#endif
#ifdef IPV6_V6ONLY
if (listensockaddr->sa_family == AF_INET6) {
@@ -919,7 +1082,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
/* We need to set IPV6_V6ONLY so that this socket can't get used for
* IPv4 connections. */
if (setsockopt(s,IPPROTO_IPV6, IPV6_V6ONLY,
- (void*)&one, sizeof(one))<0) {
+ (void*)&one, sizeof(one)) < 0) {
int e = tor_socket_errno(s);
log_warn(LD_NET, "Error setting IPV6_V6ONLY flag: %s",
tor_socket_strerror(e));
@@ -935,15 +1098,13 @@ connection_listener_new(const struct sockaddr *listensockaddr,
helpfulhint = ". Is Tor already running?";
log_warn(LD_NET, "Could not bind to %s:%u: %s%s", address, usePort,
tor_socket_strerror(e), helpfulhint);
- tor_close_socket(s);
goto err;
}
if (is_tcp) {
- if (listen(s,SOMAXCONN) < 0) {
+ if (tor_listen(s) < 0) {
log_warn(LD_NET, "Could not listen on %s:%u: %s", address, usePort,
tor_socket_strerror(tor_socket_errno(s)));
- tor_close_socket(s);
goto err;
}
}
@@ -983,7 +1144,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;
@@ -996,10 +1157,11 @@ connection_listener_new(const struct sockaddr *listensockaddr,
}
#ifdef HAVE_PWD_H
if (options->User) {
- pw = getpwnam(options->User);
+ pw = tor_getpwnam(options->User);
if (pw == NULL) {
log_warn(LD_NET,"Unable to chown() %s socket: user %s not found.",
address, options->User);
+ goto err;
} else if (chown(address, pw->pw_uid, pw->pw_gid) < 0) {
log_warn(LD_NET,"Unable to chown() %s socket: %s.",
address, strerror(errno));
@@ -1012,32 +1174,29 @@ connection_listener_new(const struct sockaddr *listensockaddr,
* platforms. */
if (chmod(address, 0660) < 0) {
log_warn(LD_FS,"Unable to make %s group-writable.", address);
- tor_close_socket(s);
goto err;
}
}
- if (listen(s,SOMAXCONN) < 0) {
+ if (listen(s, SOMAXCONN) < 0) {
log_warn(LD_NET, "Could not listen on %s: %s", address,
tor_socket_strerror(tor_socket_errno(s)));
- tor_close_socket(s);
goto err;
}
#else
(void)options;
#endif /* HAVE_SYS_UN_H */
} else {
- log_err(LD_BUG,"Got unexpected address family %d.",
- listensockaddr->sa_family);
- tor_assert(0);
+ log_err(LD_BUG, "Got unexpected address family %d.",
+ listensockaddr->sa_family);
+ tor_assert(0);
}
- set_socket_nonblocking(s);
-
lis_conn = listener_connection_new(type, listensockaddr->sa_family);
conn = TO_CONN(lis_conn);
conn->socket_family = listensockaddr->sa_family;
conn->s = s;
+ s = TOR_INVALID_SOCKET; /* Prevent double-close */
conn->address = tor_strdup(address);
conn->port = gotPort;
tor_addr_copy(&conn->addr, &addr);
@@ -1056,10 +1215,23 @@ connection_listener_new(const struct sockaddr *listensockaddr,
lis_conn->session_group = global_next_session_group--;
}
}
+ if (type == CONN_TYPE_AP_LISTENER) {
+ lis_conn->socks_ipv4_traffic = port_cfg->ipv4_traffic;
+ lis_conn->socks_ipv6_traffic = port_cfg->ipv6_traffic;
+ lis_conn->socks_prefer_ipv6 = port_cfg->prefer_ipv6;
+ } else {
+ lis_conn->socks_ipv4_traffic = 1;
+ lis_conn->socks_ipv6_traffic = 1;
+ }
+ lis_conn->cache_ipv4_answers = port_cfg->cache_ipv4_answers;
+ lis_conn->cache_ipv6_answers = port_cfg->cache_ipv6_answers;
+ lis_conn->use_cached_ipv4_answers = port_cfg->use_cached_ipv4_answers;
+ lis_conn->use_cached_ipv6_answers = port_cfg->use_cached_ipv6_answers;
+ lis_conn->prefer_ipv6_virtaddr = port_cfg->prefer_ipv6_virtaddr;
+ lis_conn->socks_prefer_no_auth = port_cfg->socks_prefer_no_auth;
if (connection_add(conn) < 0) { /* no space, forget it */
log_warn(LD_NET,"connection_add for listener failed. Giving up.");
- connection_free(conn);
goto err;
}
@@ -1078,6 +1250,11 @@ connection_listener_new(const struct sockaddr *listensockaddr,
return conn;
err:
+ if (SOCKET_OK(s))
+ tor_close_socket(s);
+ if (conn)
+ connection_free(conn);
+
return NULL;
}
@@ -1089,7 +1266,7 @@ connection_listener_new(const struct sockaddr *listensockaddr,
* nmap does). We want to detect that, and not go on with the connection.
*/
static int
-check_sockaddr(struct sockaddr *sa, int len, int level)
+check_sockaddr(const struct sockaddr *sa, int len, int level)
{
int ok = 1;
@@ -1162,7 +1339,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)) {
@@ -1181,8 +1358,18 @@ connection_handle_listener_read(connection_t *conn, int new_type)
"Connection accepted on socket %d (child of fd %d).",
(int)news,(int)conn->s);
- make_socket_reuseable(news);
- set_socket_nonblocking(news);
+ if (make_socket_reuseable(news) < 0) {
+ if (tor_socket_errno(news) == EINVAL) {
+ /* This can happen on OSX if we get a badly timed shutdown. */
+ log_debug(LD_NET, "make_socket_reuseable returned EINVAL");
+ } else {
+ log_warn(LD_NET, "Error setting SO_REUSEADDR flag on %s: %s",
+ conn_type_to_string(new_type),
+ tor_socket_strerror(errno));
+ }
+ tor_close_socket(news);
+ return 0;
+ }
if (options->ConstrainedSockets)
set_constrained_socket_buffers(news, (int)options->ConstrainedSockSize);
@@ -1202,11 +1389,6 @@ connection_handle_listener_read(connection_t *conn, int new_type)
return 0;
}
- if (check_sockaddr_family_match(remote->sa_family, conn) < 0) {
- tor_close_socket(news);
- return 0;
- }
-
tor_addr_from_sockaddr(&addr, remote, &port);
/* process entrance policies here, before we even create the connection */
@@ -1215,7 +1397,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
if (socks_policy_permits_address(&addr) == 0) {
log_notice(LD_APP,
"Denying socks connection from untrusted address %s.",
- fmt_addr(&addr));
+ fmt_and_decorate_addr(&addr));
tor_close_socket(news);
return 0;
}
@@ -1224,7 +1406,7 @@ connection_handle_listener_read(connection_t *conn, int new_type)
/* check dirpolicy to see if we should accept it */
if (dir_policy_permits_address(&addr) == 0) {
log_notice(LD_DIRSERV,"Denying dir connection from address %s.",
- fmt_addr(&addr));
+ fmt_and_decorate_addr(&addr));
tor_close_socket(news);
return 0;
}
@@ -1238,10 +1420,21 @@ connection_handle_listener_read(connection_t *conn, int new_type)
newconn->port = port;
newconn->address = tor_dup_addr(&addr);
+ if (new_type == CONN_TYPE_AP) {
+ TO_ENTRY_CONN(newconn)->socks_request->socks_prefer_no_auth =
+ TO_LISTENER_CONN(conn)->socks_prefer_no_auth;
+ }
+ if (new_type == CONN_TYPE_CONTROL) {
+ log_notice(LD_CONTROL, "New control connection opened from %s.",
+ fmt_and_decorate_addr(&addr));
+ }
+
} else if (conn->socket_family == AF_UNIX) {
/* For now only control ports can be Unix domain sockets
* and listeners at the same time */
tor_assert(conn->type == CONN_TYPE_CONTROL_LISTENER);
+ tor_assert(new_type == CONN_TYPE_CONTROL);
+ log_notice(LD_CONTROL, "New control connection opened.");
newconn = connection_new(new_type, conn->socket_family);
newconn->s = news;
@@ -1276,17 +1469,39 @@ static int
connection_init_accepted_conn(connection_t *conn,
const listener_connection_t *listener)
{
+ int rv;
+
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);
- return connection_tls_start_handshake(TO_OR_CONN(conn), 1);
+ rv = connection_tls_start_handshake(TO_OR_CONN(conn), 1);
+ if (rv < 0) {
+ connection_or_close_for_error(TO_OR_CONN(conn), 0);
+ }
+ return rv;
+ break;
case CONN_TYPE_AP:
TO_ENTRY_CONN(conn)->isolation_flags = listener->isolation_flags;
TO_ENTRY_CONN(conn)->session_group = listener->session_group;
TO_ENTRY_CONN(conn)->nym_epoch = get_signewnym_epoch();
- TO_ENTRY_CONN(conn)->socks_request->listener_type = listener->_base.type;
+ TO_ENTRY_CONN(conn)->socks_request->listener_type = listener->base_.type;
+ TO_ENTRY_CONN(conn)->ipv4_traffic_ok = listener->socks_ipv4_traffic;
+ TO_ENTRY_CONN(conn)->ipv6_traffic_ok = listener->socks_ipv6_traffic;
+ TO_ENTRY_CONN(conn)->prefer_ipv6_traffic = listener->socks_prefer_ipv6;
+ TO_ENTRY_CONN(conn)->cache_ipv4_answers = listener->cache_ipv4_answers;
+ TO_ENTRY_CONN(conn)->cache_ipv6_answers = listener->cache_ipv6_answers;
+ TO_ENTRY_CONN(conn)->use_cached_ipv4_answers =
+ listener->use_cached_ipv4_answers;
+ TO_ENTRY_CONN(conn)->use_cached_ipv6_answers =
+ listener->use_cached_ipv6_answers;
+ TO_ENTRY_CONN(conn)->prefer_ipv6_virtaddr =
+ listener->prefer_ipv6_virtaddr;
+
switch (TO_CONN(listener)->type) {
case CONN_TYPE_AP_LISTENER:
conn->state = AP_CONN_STATE_SOCKS_WAIT;
@@ -1333,7 +1548,7 @@ connection_connect(connection_t *conn, const char *address,
const or_options_t *options = get_options();
int protocol_family;
- if (get_n_open_sockets() >= get_options()->_ConnLimit-1) {
+ if (get_n_open_sockets() >= get_options()->ConnLimit_-1) {
warn_too_many_conns();
*socket_error = SOCK_ERRNO(ENOBUFS);
return -1;
@@ -1348,21 +1563,14 @@ connection_connect(connection_t *conn, const char *address,
/* We should never even try to connect anyplace if DisableNetwork is set.
* Warn if we do, and refuse to make the connection. */
static ratelim_t disablenet_violated = RATELIM_INIT(30*60);
- char *m;
-#ifdef _WIN32
- *socket_error = WSAENETUNREACH;
-#else
- *socket_error = ENETUNREACH;
-#endif
- if ((m = rate_limit_log(&disablenet_violated, approx_time()))) {
- log_warn(LD_BUG, "Tried to open a socket with DisableNetwork set.%s", m);
- tor_free(m);
- }
+ *socket_error = SOCK_ERRNO(ENETUNREACH);
+ log_fn_ratelim(&disablenet_violated, LOG_WARN, LD_BUG,
+ "Tried to open a socket with DisableNetwork set.");
tor_fragile_assert();
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",
@@ -1370,31 +1578,43 @@ connection_connect(connection_t *conn, const char *address,
return -1;
}
- make_socket_reuseable(s);
-
- if (options->OutboundBindAddress && !tor_addr_is_loopback(addr)) {
- struct sockaddr_in ext_addr;
-
- memset(&ext_addr, 0, sizeof(ext_addr));
- ext_addr.sin_family = AF_INET;
- ext_addr.sin_port = 0;
- if (!tor_inet_aton(options->OutboundBindAddress, &ext_addr.sin_addr)) {
- log_warn(LD_CONFIG,"Outbound bind address '%s' didn't parse. Ignoring.",
- options->OutboundBindAddress);
- } else {
- if (bind(s, (struct sockaddr*)&ext_addr,
- (socklen_t)sizeof(ext_addr)) < 0) {
- *socket_error = tor_socket_errno(s);
- log_warn(LD_NET,"Error binding network socket: %s",
- tor_socket_strerror(*socket_error));
- tor_close_socket(s);
- return -1;
+ if (make_socket_reuseable(s) < 0) {
+ log_warn(LD_NET, "Error setting SO_REUSEADDR flag on new connection: %s",
+ tor_socket_strerror(errno));
+ }
+
+ if (!tor_addr_is_loopback(addr)) {
+ const tor_addr_t *ext_addr = NULL;
+ if (protocol_family == AF_INET &&
+ !tor_addr_is_null(&options->OutboundBindAddressIPv4_))
+ ext_addr = &options->OutboundBindAddressIPv4_;
+ else if (protocol_family == AF_INET6 &&
+ !tor_addr_is_null(&options->OutboundBindAddressIPv6_))
+ ext_addr = &options->OutboundBindAddressIPv6_;
+ if (ext_addr) {
+ struct sockaddr_storage ext_addr_sa;
+ socklen_t ext_addr_len = 0;
+ memset(&ext_addr_sa, 0, sizeof(ext_addr_sa));
+ ext_addr_len = tor_addr_to_sockaddr(ext_addr, 0,
+ (struct sockaddr *) &ext_addr_sa,
+ sizeof(ext_addr_sa));
+ if (ext_addr_len == 0) {
+ log_warn(LD_NET,
+ "Error converting OutboundBindAddress %s into sockaddr. "
+ "Ignoring.", fmt_and_decorate_addr(ext_addr));
+ } else {
+ if (bind(s, (struct sockaddr *) &ext_addr_sa, ext_addr_len) < 0) {
+ *socket_error = tor_socket_errno(s);
+ log_warn(LD_NET,"Error binding network socket to %s: %s",
+ fmt_and_decorate_addr(ext_addr),
+ tor_socket_strerror(*socket_error));
+ tor_close_socket(s);
+ return -1;
+ }
}
}
}
- set_socket_nonblocking(s);
-
if (options->ConstrainedSockets)
set_constrained_socket_buffers(s, (int)options->ConstrainedSockSize);
@@ -1424,7 +1644,7 @@ connection_connect(connection_t *conn, const char *address,
/* it succeeded. we're connected. */
log_fn(inprogress?LOG_DEBUG:LOG_INFO, LD_NET,
- "Connection to %s:%u %s (sock %d).",
+ "Connection to %s:%u %s (sock "TOR_SOCKET_T_FORMAT").",
escaped_safe_str_client(address),
port, inprogress?"in progress":"established", s);
conn->s = s;
@@ -1460,6 +1680,32 @@ connection_proxy_state_to_string(int state)
return states[state];
}
+/** Returns the global proxy type used by tor. Use this function for
+ * logging or high-level purposes, don't use it to fill the
+ * <b>proxy_type</b> field of or_connection_t; use the actual proxy
+ * protocol instead.*/
+static int
+get_proxy_type(void)
+{
+ const or_options_t *options = get_options();
+
+ if (options->HTTPSProxy)
+ return PROXY_CONNECT;
+ else if (options->Socks4Proxy)
+ return PROXY_SOCKS4;
+ else if (options->Socks5Proxy)
+ return PROXY_SOCKS5;
+ else if (options->ClientTransportPlugin)
+ return PROXY_PLUGGABLE;
+ else
+ return PROXY_NONE;
+}
+
+/* One byte for the version, one for the command, two for the
+ port, and four for the addr... and, one more for the
+ username NUL: */
+#define SOCKS4_STANDARD_BUFFER_SIZE (1 + 1 + 2 + 4 + 1)
+
/** Write a proxy request of <b>type</b> (socks4, socks5, https) to conn
* for conn->addr:conn->port, authenticating with the auth details given
* in the configuration (if available). SOCKS 5 and HTTP CONNECT proxies
@@ -1495,17 +1741,17 @@ connection_proxy_connect(connection_t *conn, int type)
}
if (base64_authenticator) {
- const char *addr = fmt_addr(&conn->addr);
- tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.1\r\n"
- "Host: %s:%d\r\n"
+ const char *addrport = fmt_addrport(&conn->addr, conn->port);
+ tor_snprintf(buf, sizeof(buf), "CONNECT %s HTTP/1.1\r\n"
+ "Host: %s\r\n"
"Proxy-Authorization: Basic %s\r\n\r\n",
- addr, conn->port,
- addr, conn->port,
+ addrport,
+ addrport,
base64_authenticator);
tor_free(base64_authenticator);
} else {
- tor_snprintf(buf, sizeof(buf), "CONNECT %s:%d HTTP/1.0\r\n\r\n",
- fmt_addr(&conn->addr), conn->port);
+ tor_snprintf(buf, sizeof(buf), "CONNECT %s HTTP/1.0\r\n\r\n",
+ fmt_addrport(&conn->addr, conn->port));
}
connection_write_to_buf(buf, strlen(buf), conn);
@@ -1514,17 +1760,45 @@ connection_proxy_connect(connection_t *conn, int type)
}
case PROXY_SOCKS4: {
- unsigned char buf[9];
+ unsigned char *buf;
uint16_t portn;
uint32_t ip4addr;
+ size_t buf_size = 0;
+ char *socks_args_string = NULL;
- /* Send a SOCKS4 connect request with empty user id */
+ /* Send a SOCKS4 connect request */
if (tor_addr_family(&conn->addr) != AF_INET) {
log_warn(LD_NET, "SOCKS4 client is incompatible with IPv6");
return -1;
}
+ { /* If we are here because we are trying to connect to a
+ pluggable transport proxy, check if we have any SOCKS
+ arguments to transmit. If we do, compress all arguments to
+ a single string in 'socks_args_string': */
+
+ if (get_proxy_type() == PROXY_PLUGGABLE) {
+ socks_args_string =
+ pt_get_socks_args_for_proxy_addrport(&conn->addr, conn->port);
+ if (socks_args_string)
+ log_debug(LD_NET, "Sending out '%s' as our SOCKS argument string.",
+ socks_args_string);
+ }
+ }
+
+ { /* Figure out the buffer size we need for the SOCKS message: */
+
+ buf_size = SOCKS4_STANDARD_BUFFER_SIZE;
+
+ /* If we have a SOCKS argument string, consider its size when
+ calculating the buffer size: */
+ if (socks_args_string)
+ buf_size += strlen(socks_args_string);
+ }
+
+ buf = tor_malloc_zero(buf_size);
+
ip4addr = tor_addr_to_ipv4n(&conn->addr);
portn = htons(conn->port);
@@ -1532,9 +1806,23 @@ connection_proxy_connect(connection_t *conn, int type)
buf[1] = SOCKS_COMMAND_CONNECT; /* command */
memcpy(buf + 2, &portn, 2); /* port */
memcpy(buf + 4, &ip4addr, 4); /* addr */
- buf[8] = 0; /* userid (empty) */
- connection_write_to_buf((char *)buf, sizeof(buf), conn);
+ /* Next packet field is the userid. If we have pluggable
+ transport SOCKS arguments, we have to embed them
+ there. Otherwise, we use an empty userid. */
+ if (socks_args_string) { /* place the SOCKS args string: */
+ tor_assert(strlen(socks_args_string) > 0);
+ tor_assert(buf_size >=
+ SOCKS4_STANDARD_BUFFER_SIZE + strlen(socks_args_string));
+ strlcpy((char *)buf + 8, socks_args_string, buf_size - 8);
+ tor_free(socks_args_string);
+ } else {
+ buf[8] = 0; /* no userid */
+ }
+
+ connection_write_to_buf((char *)buf, buf_size, conn);
+ tor_free(buf);
+
conn->proxy_state = PROXY_SOCKS4_WANT_CONNECT_OK;
break;
}
@@ -1546,8 +1834,13 @@ connection_proxy_connect(connection_t *conn, int type)
buf[0] = 5; /* version */
+ /* We have to use SOCKS5 authentication, if we have a
+ Socks5ProxyUsername or if we want to pass arguments to our
+ pluggable transport proxy: */
+ if ((options->Socks5ProxyUsername) ||
+ (get_proxy_type() == PROXY_PLUGGABLE &&
+ (get_socks_args_by_bridge_addrport(&conn->addr, conn->port)))) {
/* number of auth methods */
- if (options->Socks5ProxyUsername) {
buf[1] = 2;
buf[2] = 0x00; /* no authentication */
buf[3] = 0x02; /* rfc1929 Username/Passwd auth */
@@ -1607,6 +1900,7 @@ connection_read_https_proxy_response(connection_t *conn)
tor_free(headers);
return -1;
}
+ tor_free(headers);
if (!reason) reason = tor_strdup("[no reason given]");
if (status_code == 200) {
@@ -1740,15 +2034,49 @@ connection_read_proxy_handshake(connection_t *conn)
unsigned char buf[1024];
size_t reqsize, usize, psize;
const char *user, *pass;
+ char *socks_args_string = NULL;
+
+ if (get_proxy_type() == PROXY_PLUGGABLE) {
+ socks_args_string =
+ pt_get_socks_args_for_proxy_addrport(&conn->addr, conn->port);
+ if (!socks_args_string) {
+ log_warn(LD_NET, "Could not create SOCKS args string.");
+ ret = -1;
+ break;
+ }
+
+ log_debug(LD_NET, "SOCKS5 arguments: %s", socks_args_string);
+ tor_assert(strlen(socks_args_string) > 0);
+ tor_assert(strlen(socks_args_string) <= MAX_SOCKS5_AUTH_SIZE_TOTAL);
+
+ if (strlen(socks_args_string) > MAX_SOCKS5_AUTH_FIELD_SIZE) {
+ user = socks_args_string;
+ usize = MAX_SOCKS5_AUTH_FIELD_SIZE;
+ pass = socks_args_string + MAX_SOCKS5_AUTH_FIELD_SIZE;
+ psize = strlen(socks_args_string) - MAX_SOCKS5_AUTH_FIELD_SIZE;
+ } else {
+ user = socks_args_string;
+ usize = strlen(socks_args_string);
+ pass = "\0";
+ psize = 1;
+ }
+ } else if (get_options()->Socks5ProxyUsername) {
+ user = get_options()->Socks5ProxyUsername;
+ pass = get_options()->Socks5ProxyPassword;
+ tor_assert(user && pass);
+ usize = strlen(user);
+ psize = strlen(pass);
+ } else {
+ log_err(LD_BUG, "We entered %s for no reason!", __func__);
+ tor_fragile_assert();
+ ret = -1;
+ break;
+ }
- user = get_options()->Socks5ProxyUsername;
- pass = get_options()->Socks5ProxyPassword;
- tor_assert(user && pass);
-
- /* XXX len of user and pass must be <= 255 !!! */
- usize = strlen(user);
- psize = strlen(pass);
- tor_assert(usize <= 255 && psize <= 255);
+ /* Username and password lengths should have been checked
+ above and during torrc parsing. */
+ tor_assert(usize <= MAX_SOCKS5_AUTH_FIELD_SIZE &&
+ psize <= MAX_SOCKS5_AUTH_FIELD_SIZE);
reqsize = 3 + usize + psize;
buf[0] = 1; /* negotiation version */
@@ -1757,6 +2085,9 @@ connection_read_proxy_handshake(connection_t *conn)
buf[2 + usize] = psize;
memcpy(buf + 3 + usize, pass, psize);
+ if (socks_args_string)
+ tor_free(socks_args_string);
+
connection_write_to_buf((char *)buf, reqsize, conn);
conn->proxy_state = PROXY_SOCKS5_WANT_AUTH_RFC1929_OK;
@@ -1914,7 +2245,7 @@ retry_listener_ports(smartlist_t *old_conns,
if (listensockaddr) {
conn = connection_listener_new(listensockaddr, listensocklen,
- port->type, address, port);
+ port->type, address, port);
tor_free(listensockaddr);
tor_free(address);
} else {
@@ -1952,6 +2283,8 @@ retry_all_listeners(smartlist_t *replaced_conns,
const or_options_t *options = get_options();
int retval = 0;
const uint16_t old_or_port = router_get_advertised_or_port(options);
+ const uint16_t old_or_port_ipv6 =
+ router_get_advertised_or_port_by_af(options,AF_INET6);
const uint16_t old_dir_port = router_get_advertised_dir_port(options, 0);
SMARTLIST_FOREACH_BEGIN(get_connection_array(), connection_t *, conn) {
@@ -1980,8 +2313,9 @@ retry_all_listeners(smartlist_t *replaced_conns,
smartlist_free(listeners);
- /* XXXprop186 should take all advertised ports into account */
if (old_or_port != router_get_advertised_or_port(options) ||
+ old_or_port_ipv6 != router_get_advertised_or_port_by_af(options,
+ AF_INET6) ||
old_dir_port != router_get_advertised_dir_port(options, 0)) {
/* Our chosen ORPort or DirPort is not what it used to be: the
* descriptor we had (if any) should be regenerated. (We won't
@@ -2023,6 +2357,20 @@ connection_mark_all_noncontrol_connections(void)
connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING);
break;
+ case CONN_TYPE_OR:
+ {
+ or_connection_t *orconn = TO_OR_CONN(conn);
+ if (orconn->chan) {
+ connection_or_close_normally(orconn, 0);
+ } else {
+ /*
+ * There should have been one, but mark for close and hope
+ * for the best..
+ */
+ connection_mark_for_close(conn);
+ }
+ }
+ break;
default:
connection_mark_for_close(conn);
break;
@@ -2033,9 +2381,9 @@ connection_mark_all_noncontrol_connections(void)
/** Return 1 if we should apply rate limiting to <b>conn</b>, and 0
* otherwise.
* Right now this just checks if it's an internal IP address or an
- * internal connection. We also check if the connection uses pluggable
- * transports, since we should then limit it even if it comes from an
- * internal IP address. */
+ * internal connection. We also should, but don't, check if the connection
+ * uses pluggable transports, since we should then limit it even if it
+ * comes from an internal IP address. */
static int
connection_is_rate_limited(connection_t *conn)
{
@@ -2075,7 +2423,8 @@ static int
connection_counts_as_relayed_traffic(connection_t *conn, time_t now)
{
if (conn->type == CONN_TYPE_OR &&
- TO_OR_CONN(conn)->client_used + CLIENT_IDLE_TIME_FOR_PRIORITY < now)
+ connection_or_client_used(TO_OR_CONN(conn)) +
+ CLIENT_IDLE_TIME_FOR_PRIORITY < now)
return 1;
if (conn->type == CONN_TYPE_DIR && DIR_CONN_IS_SERVER(conn))
return 1;
@@ -2120,8 +2469,7 @@ connection_bucket_round_robin(int base, int priority,
static ssize_t
connection_bucket_read_limit(connection_t *conn, time_t now)
{
- int base = connection_speaks_cells(conn) ?
- CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE;
+ int base = RELAY_PAYLOAD_SIZE;
int priority = conn->type != CONN_TYPE_DIR;
int conn_bucket = -1;
int global_bucket = global_read_bucket;
@@ -2130,6 +2478,7 @@ connection_bucket_read_limit(connection_t *conn, time_t now)
or_connection_t *or_conn = TO_OR_CONN(conn);
if (conn->state == OR_CONN_STATE_OPEN)
conn_bucket = or_conn->read_bucket;
+ base = get_cell_network_size(or_conn->wide_circ_ids);
}
if (!connection_is_rate_limited(conn)) {
@@ -2149,8 +2498,7 @@ connection_bucket_read_limit(connection_t *conn, time_t now)
ssize_t
connection_bucket_write_limit(connection_t *conn, time_t now)
{
- int base = connection_speaks_cells(conn) ?
- CELL_NETWORK_SIZE : RELAY_PAYLOAD_SIZE;
+ int base = RELAY_PAYLOAD_SIZE;
int priority = conn->type != CONN_TYPE_DIR;
int conn_bucket = (int)conn->outbuf_flushlen;
int global_bucket = global_write_bucket;
@@ -2168,6 +2516,7 @@ connection_bucket_write_limit(connection_t *conn, time_t now)
if (or_conn->write_bucket < conn_bucket)
conn_bucket = or_conn->write_bucket >= 0 ?
or_conn->write_bucket : 0;
+ base = get_cell_network_size(or_conn->wide_circ_ids);
}
if (connection_counts_as_relayed_traffic(conn, now) &&
@@ -2196,9 +2545,8 @@ connection_bucket_write_limit(connection_t *conn, time_t now)
* shouldn't send <b>attempt</b> bytes of low-priority directory stuff
* out to <b>conn</b>. Else return 0.
- * Priority is 1 for v1 requests (directories and running-routers),
- * and 2 for v2 requests (statuses and descriptors). But see FFFF in
- * directory_handle_command_get() for why we don't use priority 2 yet.
+ * Priority was 1 for v1 requests (directories and running-routers),
+ * and 2 for v2 requests and later (statuses and descriptors).
*
* There are a lot of parameters we could use here:
* - global_relayed_write_bucket. Low is bad.
@@ -2305,6 +2653,35 @@ record_num_bytes_transferred(connection_t *conn,
#endif
#ifndef USE_BUFFEREVENTS
+/** Last time at which the global or relay buckets were emptied in msec
+ * since midnight. */
+static uint32_t global_relayed_read_emptied = 0,
+ global_relayed_write_emptied = 0,
+ global_read_emptied = 0,
+ global_write_emptied = 0;
+
+/** Helper: convert given <b>tvnow</b> time value to milliseconds since
+ * midnight. */
+static uint32_t
+msec_since_midnight(const struct timeval *tvnow)
+{
+ return (uint32_t)(((tvnow->tv_sec % 86400L) * 1000L) +
+ ((uint32_t)tvnow->tv_usec / (uint32_t)1000L));
+}
+
+/** Check if a bucket which had <b>tokens_before</b> tokens and which got
+ * <b>tokens_removed</b> tokens removed at timestamp <b>tvnow</b> has run
+ * out of tokens, and if so, note the milliseconds since midnight in
+ * <b>timestamp_var</b> for the next TB_EMPTY event. */
+void
+connection_buckets_note_empty_ts(uint32_t *timestamp_var,
+ int tokens_before, size_t tokens_removed,
+ const struct timeval *tvnow)
+{
+ if (tokens_before > 0 && (uint32_t)tokens_before <= tokens_removed)
+ *timestamp_var = msec_since_midnight(tvnow);
+}
+
/** We just read <b>num_read</b> and wrote <b>num_written</b> bytes
* onto <b>conn</b>. Decrement buckets appropriately. */
static void
@@ -2327,6 +2704,30 @@ connection_buckets_decrement(connection_t *conn, time_t now,
if (!connection_is_rate_limited(conn))
return; /* local IPs are free */
+ /* If one or more of our token buckets ran dry just now, note the
+ * timestamp for TB_EMPTY events. */
+ if (get_options()->TestingEnableTbEmptyEvent) {
+ struct timeval tvnow;
+ tor_gettimeofday_cached(&tvnow);
+ if (connection_counts_as_relayed_traffic(conn, now)) {
+ connection_buckets_note_empty_ts(&global_relayed_read_emptied,
+ global_relayed_read_bucket, num_read, &tvnow);
+ connection_buckets_note_empty_ts(&global_relayed_write_emptied,
+ global_relayed_write_bucket, num_written, &tvnow);
+ }
+ connection_buckets_note_empty_ts(&global_read_emptied,
+ global_read_bucket, num_read, &tvnow);
+ connection_buckets_note_empty_ts(&global_write_emptied,
+ global_write_bucket, num_written, &tvnow);
+ if (connection_speaks_cells(conn) && conn->state == OR_CONN_STATE_OPEN) {
+ or_connection_t *or_conn = TO_OR_CONN(conn);
+ connection_buckets_note_empty_ts(&or_conn->read_emptied_time,
+ or_conn->read_bucket, num_read, &tvnow);
+ connection_buckets_note_empty_ts(&or_conn->write_emptied_time,
+ or_conn->write_bucket, num_written, &tvnow);
+ }
+ }
+
if (connection_counts_as_relayed_traffic(conn, now)) {
global_relayed_read_bucket -= (int)num_read;
global_relayed_write_bucket -= (int)num_written;
@@ -2346,6 +2747,9 @@ connection_consider_empty_read_buckets(connection_t *conn)
{
const char *reason;
+ if (!connection_is_rate_limited(conn))
+ return; /* Always okay. */
+
if (global_read_bucket <= 0) {
reason = "global read bucket exhausted. Pausing.";
} else if (connection_counts_as_relayed_traffic(conn, approx_time()) &&
@@ -2370,6 +2774,9 @@ connection_consider_empty_write_buckets(connection_t *conn)
{
const char *reason;
+ if (!connection_is_rate_limited(conn))
+ return; /* Always okay. */
+
if (global_write_bucket <= 0) {
reason = "global write bucket exhausted. Pausing.";
} else if (connection_counts_as_relayed_traffic(conn, approx_time()) &&
@@ -2429,10 +2836,32 @@ connection_bucket_refill_helper(int *bucket, int rate, int burst,
*bucket = burst;
}
}
- log(LOG_DEBUG, LD_NET,"%s now %d.", name, *bucket);
+ log_debug(LD_NET,"%s now %d.", name, *bucket);
}
}
+/** Helper: return the time in milliseconds since <b>last_empty_time</b>
+ * when a bucket ran empty that previously had <b>tokens_before</b> tokens
+ * now has <b>tokens_after</b> tokens after refilling at timestamp
+ * <b>tvnow</b>, capped at <b>milliseconds_elapsed</b> milliseconds since
+ * last refilling that bucket. Return 0 if the bucket has not been empty
+ * since the last refill or has not been refilled. */
+uint32_t
+bucket_millis_empty(int tokens_before, uint32_t last_empty_time,
+ int tokens_after, int milliseconds_elapsed,
+ const struct timeval *tvnow)
+{
+ uint32_t result = 0, refilled;
+ if (tokens_before <= 0 && tokens_after > tokens_before) {
+ refilled = msec_since_midnight(tvnow);
+ result = (uint32_t)((refilled + 86400L * 1000L - last_empty_time) %
+ (86400L * 1000L));
+ if (result > (uint32_t)milliseconds_elapsed)
+ result = (uint32_t)milliseconds_elapsed;
+ }
+ return result;
+}
+
/** Time has passed; increment buckets appropriately. */
void
connection_bucket_refill(int milliseconds_elapsed, time_t now)
@@ -2441,6 +2870,12 @@ connection_bucket_refill(int milliseconds_elapsed, time_t now)
smartlist_t *conns = get_connection_array();
int bandwidthrate, bandwidthburst, relayrate, relayburst;
+ int prev_global_read = global_read_bucket;
+ int prev_global_write = global_write_bucket;
+ int prev_relay_read = global_relayed_read_bucket;
+ int prev_relay_write = global_relayed_write_bucket;
+ struct timeval tvnow; /*< Only used if TB_EMPTY events are enabled. */
+
bandwidthrate = (int)options->BandwidthRate;
bandwidthburst = (int)options->BandwidthBurst;
@@ -2475,12 +2910,42 @@ connection_bucket_refill(int milliseconds_elapsed, time_t now)
milliseconds_elapsed,
"global_relayed_write_bucket");
+ /* If buckets were empty before and have now been refilled, tell any
+ * interested controllers. */
+ if (get_options()->TestingEnableTbEmptyEvent) {
+ uint32_t global_read_empty_time, global_write_empty_time,
+ relay_read_empty_time, relay_write_empty_time;
+ tor_gettimeofday_cached(&tvnow);
+ global_read_empty_time = bucket_millis_empty(prev_global_read,
+ global_read_emptied, global_read_bucket,
+ milliseconds_elapsed, &tvnow);
+ global_write_empty_time = bucket_millis_empty(prev_global_write,
+ global_write_emptied, global_write_bucket,
+ milliseconds_elapsed, &tvnow);
+ control_event_tb_empty("GLOBAL", global_read_empty_time,
+ global_write_empty_time, milliseconds_elapsed);
+ relay_read_empty_time = bucket_millis_empty(prev_relay_read,
+ global_relayed_read_emptied,
+ global_relayed_read_bucket,
+ milliseconds_elapsed, &tvnow);
+ relay_write_empty_time = bucket_millis_empty(prev_relay_write,
+ global_relayed_write_emptied,
+ global_relayed_write_bucket,
+ milliseconds_elapsed, &tvnow);
+ control_event_tb_empty("RELAY", relay_read_empty_time,
+ relay_write_empty_time, milliseconds_elapsed);
+ }
+
/* refill the per-connection buckets */
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
if (connection_speaks_cells(conn)) {
or_connection_t *or_conn = TO_OR_CONN(conn);
int orbandwidthrate = or_conn->bandwidthrate;
int orbandwidthburst = or_conn->bandwidthburst;
+
+ int prev_conn_read = or_conn->read_bucket;
+ int prev_conn_write = or_conn->write_bucket;
+
if (connection_bucket_should_increase(or_conn->read_bucket, or_conn)) {
connection_bucket_refill_helper(&or_conn->read_bucket,
orbandwidthrate,
@@ -2495,6 +2960,27 @@ connection_bucket_refill(int milliseconds_elapsed, time_t now)
milliseconds_elapsed,
"or_conn->write_bucket");
}
+
+ /* If buckets were empty before and have now been refilled, tell any
+ * interested controllers. */
+ if (get_options()->TestingEnableTbEmptyEvent) {
+ char *bucket;
+ uint32_t conn_read_empty_time, conn_write_empty_time;
+ tor_asprintf(&bucket, "ORCONN ID="U64_FORMAT,
+ U64_PRINTF_ARG(or_conn->base_.global_identifier));
+ conn_read_empty_time = bucket_millis_empty(prev_conn_read,
+ or_conn->read_emptied_time,
+ or_conn->read_bucket,
+ milliseconds_elapsed, &tvnow);
+ conn_write_empty_time = bucket_millis_empty(prev_conn_write,
+ or_conn->write_emptied_time,
+ or_conn->write_bucket,
+ milliseconds_elapsed, &tvnow);
+ control_event_tb_empty(bucket, conn_read_empty_time,
+ conn_write_empty_time,
+ milliseconds_elapsed);
+ tor_free(bucket);
+ }
}
if (conn->read_blocked_on_bw == 1 /* marked to turn reading back on now */
@@ -2534,7 +3020,7 @@ connection_bucket_should_increase(int bucket, or_connection_t *conn)
{
tor_assert(conn);
- if (conn->_base.state != OR_CONN_STATE_OPEN)
+ if (conn->base_.state != OR_CONN_STATE_OPEN)
return 0; /* only open connections play the rate limiting game */
if (bucket >= conn->bandwidthburst)
return 0;
@@ -2651,6 +3137,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:
@@ -2672,11 +3160,14 @@ connection_handle_read_impl(connection_t *conn)
before = buf_datalen(conn->inbuf);
if (connection_read_to_buf(conn, &max_to_read, &socket_error) < 0) {
/* There's a read error; kill the connection.*/
- if (conn->type == CONN_TYPE_OR &&
- conn->state == OR_CONN_STATE_CONNECTING) {
- connection_or_connect_failed(TO_OR_CONN(conn),
- errno_to_orconn_end_reason(socket_error),
- tor_socket_strerror(socket_error));
+ if (conn->type == CONN_TYPE_OR) {
+ connection_or_notify_error(TO_OR_CONN(conn),
+ socket_error != 0 ?
+ errno_to_orconn_end_reason(socket_error) :
+ END_OR_CONN_REASON_CONNRESET,
+ socket_error != 0 ?
+ tor_socket_strerror(socket_error) :
+ "(unknown, errno was 0)");
}
if (CONN_IS_EDGE(conn)) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
@@ -2687,7 +3178,11 @@ connection_handle_read_impl(connection_t *conn)
}
}
connection_close_immediate(conn); /* Don't flush; connection is dead. */
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
}
n_read += buf_datalen(conn->inbuf) - before;
@@ -2825,7 +3320,20 @@ connection_read_to_buf(connection_t *conn, ssize_t *max_to_read,
case TOR_TLS_WANTWRITE:
connection_start_writing(conn);
return 0;
- case TOR_TLS_WANTREAD: /* we're already reading */
+ case TOR_TLS_WANTREAD:
+ if (conn->in_connection_handle_write) {
+ /* We've been invoked from connection_handle_write, because we're
+ * waiting for a TLS renegotiation, the renegotiation started, and
+ * SSL_read returned WANTWRITE. But now SSL_read is saying WANTREAD
+ * again. Stop waiting for write events now, or else we'll
+ * busy-loop until data arrives for us to read. */
+ connection_stop_writing(conn);
+ if (!connection_is_reading(conn))
+ connection_start_reading(conn);
+ }
+ /* we're already reading, one hopes */
+ result = 0;
+ break;
case TOR_TLS_DONE: /* no data read, so nothing to process */
result = 0;
break; /* so we call bucket_decrement below */
@@ -2883,14 +3391,37 @@ connection_read_to_buf(connection_t *conn, ssize_t *max_to_read,
/* change *max_to_read */
*max_to_read = at_most - n_read;
- /* Update edge_conn->n_read */
+ /* Update edge_conn->n_read and ocirc->n_read_circ_bw */
if (conn->type == CONN_TYPE_AP) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
+ circuit_t *circ = circuit_get_by_edge_conn(edge_conn);
+ origin_circuit_t *ocirc;
+
/* Check for overflow: */
if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_read > n_read))
edge_conn->n_read += (int)n_read;
else
edge_conn->n_read = UINT32_MAX;
+
+ if (circ && CIRCUIT_IS_ORIGIN(circ)) {
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ if (PREDICT_LIKELY(UINT32_MAX - ocirc->n_read_circ_bw > n_read))
+ ocirc->n_read_circ_bw += (int)n_read;
+ else
+ ocirc->n_read_circ_bw = UINT32_MAX;
+ }
+ }
+
+ /* If CONN_BW events are enabled, update conn->n_read_conn_bw for
+ * OR/DIR/EXIT connections, checking for overflow. */
+ if (get_options()->TestingEnableConnBwEvent &&
+ (conn->type == CONN_TYPE_OR ||
+ conn->type == CONN_TYPE_DIR ||
+ conn->type == CONN_TYPE_EXIT)) {
+ if (PREDICT_LIKELY(UINT32_MAX - conn->n_read_conn_bw > n_read))
+ conn->n_read_conn_bw += (int)n_read;
+ else
+ conn->n_read_conn_bw = UINT32_MAX;
}
}
@@ -3143,8 +3674,8 @@ connection_outbuf_too_full(connection_t *conn)
/** Try to flush more bytes onto <b>conn</b>-\>s.
*
- * This function gets called either from conn_write() in main.c
- * when poll() has declared that conn wants to write, or below
+ * This function gets called either from conn_write_callback() in main.c
+ * when libevent tells us that conn wants to write, or below
* from connection_write_to_buf() when an entire TLS record is ready.
*
* Update <b>conn</b>-\>timestamp_lastwritten to now, and call flush_buf
@@ -3168,6 +3699,7 @@ connection_handle_write_impl(connection_t *conn, int force)
ssize_t max_to_write;
time_t now = approx_time();
size_t n_read = 0, n_written = 0;
+ int dont_stop_writing = 0;
tor_assert(!connection_is_listener(conn));
@@ -3198,12 +3730,16 @@ connection_handle_write_impl(connection_t *conn, int force)
if (CONN_IS_EDGE(conn))
connection_edge_end_errno(TO_EDGE_CONN(conn));
if (conn->type == CONN_TYPE_OR)
- connection_or_connect_failed(TO_OR_CONN(conn),
- errno_to_orconn_end_reason(e),
- tor_socket_strerror(e));
+ connection_or_notify_error(TO_OR_CONN(conn),
+ errno_to_orconn_end_reason(e),
+ tor_socket_strerror(e));
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
} else {
return 0; /* no change, see if next time is better */
@@ -3220,13 +3756,22 @@ connection_handle_write_impl(connection_t *conn, int force)
if (connection_speaks_cells(conn) &&
conn->state > OR_CONN_STATE_PROXY_HANDSHAKING) {
or_connection_t *or_conn = TO_OR_CONN(conn);
+ size_t initial_size;
if (conn->state == OR_CONN_STATE_TLS_HANDSHAKING ||
conn->state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) {
connection_stop_writing(conn);
if (connection_tls_continue_handshake(or_conn) < 0) {
/* Don't flush; connection is dead. */
+ connection_or_notify_error(or_conn,
+ END_OR_CONN_REASON_MISC,
+ "TLS error in connection_tls_"
+ "continue_handshake()");
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
}
return 0;
@@ -3235,29 +3780,39 @@ connection_handle_write_impl(connection_t *conn, int force)
}
/* else open, or closing */
+ initial_size = buf_datalen(conn->outbuf);
result = flush_buf_tls(or_conn->tls, conn->outbuf,
max_to_write, &conn->outbuf_flushlen);
- /* If we just flushed the last bytes, check if this tunneled dir
- * request is done. */
+ /* If we just flushed the last bytes, tell the channel on the
+ * or_conn to check if it needs to geoip_change_dirreq_state() */
/* XXXX move this to flushed_some or finished_flushing -NM */
- if (buf_datalen(conn->outbuf) == 0 && conn->dirreq_id)
- geoip_change_dirreq_state(conn->dirreq_id, DIRREQ_TUNNELED,
- DIRREQ_OR_CONN_BUFFER_FLUSHED);
+ if (buf_datalen(conn->outbuf) == 0 && or_conn->chan)
+ channel_notify_flushed(TLS_CHAN_TO_BASE(or_conn->chan));
switch (result) {
CASE_TOR_TLS_ERROR_ANY:
case TOR_TLS_CLOSE:
- log_info(LD_NET,result!=TOR_TLS_CLOSE?
+ log_info(LD_NET, result != TOR_TLS_CLOSE ?
"tls error. breaking.":"TLS connection closed on flush");
/* Don't flush; connection is dead. */
+ connection_or_notify_error(or_conn,
+ END_OR_CONN_REASON_MISC,
+ result != TOR_TLS_CLOSE ?
+ "TLS error in during flush" :
+ "TLS closed during flush");
connection_close_immediate(conn);
- connection_mark_for_close(conn);
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
return -1;
case TOR_TLS_WANTWRITE:
log_debug(LD_NET,"wanted write.");
/* we're already writing */
- return 0;
+ dont_stop_writing = 1;
+ break;
case TOR_TLS_WANTREAD:
/* Make sure to avoid a loop if the receive buckets are empty. */
log_debug(LD_NET,"wanted read.");
@@ -3279,6 +3834,12 @@ connection_handle_write_impl(connection_t *conn, int force)
tor_tls_get_n_raw_bytes(or_conn->tls, &n_read, &n_written);
log_debug(LD_GENERAL, "After TLS write of %d: %ld read, %ld written",
result, (long)n_read, (long)n_written);
+ /* So we notice bytes were written even on error */
+ /* XXXX024 This cast is safe since we can never write INT_MAX bytes in a
+ * single set of TLS operations. But it looks kinda ugly. If we refactor
+ * the *_buf_tls functions, we should make them return ssize_t or size_t
+ * or something. */
+ result = (int)(initial_size-buf_datalen(conn->outbuf));
} else {
CONN_LOG_PROTECT(conn,
result = flush_buf(conn->s, conn->outbuf,
@@ -3286,6 +3847,10 @@ connection_handle_write_impl(connection_t *conn, int force)
if (result < 0) {
if (CONN_IS_EDGE(conn))
connection_edge_end_errno(TO_EDGE_CONN(conn));
+ if (conn->type == CONN_TYPE_AP) {
+ /* writing failed; we couldn't send a SOCKS reply if we wanted to */
+ TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
+ }
connection_close_immediate(conn); /* Don't flush; connection is dead. */
connection_mark_for_close(conn);
@@ -3296,12 +3861,34 @@ connection_handle_write_impl(connection_t *conn, int force)
if (n_written && conn->type == CONN_TYPE_AP) {
edge_connection_t *edge_conn = TO_EDGE_CONN(conn);
+ circuit_t *circ = circuit_get_by_edge_conn(edge_conn);
+ origin_circuit_t *ocirc;
/* Check for overflow: */
if (PREDICT_LIKELY(UINT32_MAX - edge_conn->n_written > n_written))
edge_conn->n_written += (int)n_written;
else
edge_conn->n_written = UINT32_MAX;
+
+ if (circ && CIRCUIT_IS_ORIGIN(circ)) {
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ if (PREDICT_LIKELY(UINT32_MAX - ocirc->n_written_circ_bw > n_written))
+ ocirc->n_written_circ_bw += (int)n_written;
+ else
+ ocirc->n_written_circ_bw = UINT32_MAX;
+ }
+ }
+
+ /* If CONN_BW events are enabled, update conn->n_written_conn_bw for
+ * OR/DIR/EXIT connections, checking for overflow. */
+ if (n_written && get_options()->TestingEnableConnBwEvent &&
+ (conn->type == CONN_TYPE_OR ||
+ conn->type == CONN_TYPE_DIR ||
+ conn->type == CONN_TYPE_EXIT)) {
+ if (PREDICT_LIKELY(UINT32_MAX - conn->n_written_conn_bw > n_written))
+ conn->n_written_conn_bw += (int)n_written;
+ else
+ conn->n_written_conn_bw = UINT32_MAX;
}
connection_buckets_decrement(conn, approx_time(), n_read, n_written);
@@ -3309,11 +3896,24 @@ connection_handle_write_impl(connection_t *conn, int force)
if (result > 0) {
/* If we wrote any bytes from our buffer, then call the appropriate
* functions. */
- if (connection_flushed_some(conn) < 0)
- connection_mark_for_close(conn);
+ if (connection_flushed_some(conn) < 0) {
+ if (connection_speaks_cells(conn)) {
+ connection_or_notify_error(TO_OR_CONN(conn),
+ END_OR_CONN_REASON_MISC,
+ "Got error back from "
+ "connection_flushed_some()");
+ }
+
+ /*
+ * This can bypass normal channel checking since we did
+ * connection_or_notify_error() above.
+ */
+ connection_mark_for_close_internal(conn);
+ }
}
- if (!connection_wants_to_flush(conn)) { /* it's done flushing */
+ if (!connection_wants_to_flush(conn) &&
+ !dont_stop_writing) { /* it's done flushing */
if (connection_finished_flushing(conn) < 0) {
/* already marked */
return -1;
@@ -3337,7 +3937,9 @@ connection_handle_write(connection_t *conn, int force)
{
int res;
tor_gettimeofday_cache_clear();
+ conn->in_connection_handle_write = 1;
res = connection_handle_write_impl(conn, force);
+ conn->in_connection_handle_write = 0;
return res;
}
@@ -3360,13 +3962,6 @@ connection_flush(connection_t *conn)
return connection_handle_write(conn, 1);
}
-/** OpenSSL TLS record size is 16383; this is close. The goal here is to
- * push data out as soon as we know there's enough for a TLS record, so
- * during periods of high load we won't read entire megabytes from
- * input before pushing any data out. It also has the feature of not
- * growing huge outbufs unless something is slow. */
-#define MIN_TLS_FLUSHLEN 15872
-
/** Append <b>len</b> bytes of <b>string</b> onto <b>conn</b>'s
* outbuf, and ask it to start writing.
*
@@ -3375,14 +3970,13 @@ connection_flush(connection_t *conn)
* negative, this is the last data to be compressed, and the connection's zlib
* state should be flushed.
*
- * If it's an OR conn and an entire TLS record is ready, then try to
- * flush the record now. Similarly, if it's a local control connection
- * and a 64k chunk is ready, try to flush it all, so we don't end up with
- * many megabytes of controller info queued at once.
+ * If it's a local control connection and a 64k chunk is ready, try to flush
+ * 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;
@@ -3427,6 +4021,12 @@ _connection_write_to_buf_impl(const char *string, size_t len,
"write_to_buf failed. Closing circuit (fd %d).", (int)conn->s);
circuit_mark_for_close(circuit_get_by_edge_conn(TO_EDGE_CONN(conn)),
END_CIRC_REASON_INTERNAL);
+ } else if (conn->type == CONN_TYPE_OR) {
+ or_connection_t *orconn = TO_OR_CONN(conn);
+ log_warn(LD_NET,
+ "write_to_buf failed on an orconn; notifying of error "
+ "(fd %d)", (int)(conn->s));
+ connection_or_close_for_error(orconn, 0);
} else {
log_warn(LD_NET,
"write_to_buf failed. Closing connection (fd %d).",
@@ -3446,7 +4046,6 @@ _connection_write_to_buf_impl(const char *string, size_t len,
if (zlib) {
conn->outbuf_flushlen += buf_datalen(conn->outbuf) - old_datalen;
} else {
- ssize_t extra = 0;
conn->outbuf_flushlen += len;
/* Should we try flushing the outbuf now? */
@@ -3456,14 +4055,7 @@ _connection_write_to_buf_impl(const char *string, size_t len,
return;
}
- if (conn->type == CONN_TYPE_OR &&
- conn->outbuf_flushlen-len < MIN_TLS_FLUSHLEN &&
- conn->outbuf_flushlen >= MIN_TLS_FLUSHLEN) {
- /* We just pushed outbuf_flushlen to MIN_TLS_FLUSHLEN or above;
- * we can send out a full TLS frame now if we like. */
- extra = conn->outbuf_flushlen - MIN_TLS_FLUSHLEN;
- conn->outbuf_flushlen = MIN_TLS_FLUSHLEN;
- } else if (conn->type == CONN_TYPE_CONTROL &&
+ if (conn->type == CONN_TYPE_CONTROL &&
!connection_is_rate_limited(conn) &&
conn->outbuf_flushlen-len < 1<<16 &&
conn->outbuf_flushlen >= 1<<16) {
@@ -3483,10 +4075,6 @@ _connection_write_to_buf_impl(const char *string, size_t len,
}
return;
}
- if (extra) {
- conn->outbuf_flushlen += extra;
- connection_start_writing(conn);
- }
}
}
@@ -3613,20 +4201,29 @@ connection_dir_get_by_purpose_and_resource(int purpose,
return NULL;
}
-/** Return an open, non-marked connection of a given type and purpose, or NULL
- * if no such connection exists. */
-connection_t *
-connection_get_by_type_purpose(int type, int purpose)
+/** Return 1 if there are any active OR connections apart from
+ * <b>this_conn</b>.
+ *
+ * We use this to guess if we should tell the controller that we
+ * didn't manage to connect to any of our bridges. */
+int
+any_other_active_or_conns(const or_connection_t *this_conn)
{
smartlist_t *conns = get_connection_array();
- SMARTLIST_FOREACH(conns, connection_t *, conn,
- {
- if (conn->type == type &&
- !conn->marked_for_close &&
- (purpose == conn->purpose))
- return conn;
- });
- return NULL;
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
+ if (conn == TO_CONN(this_conn)) { /* don't consider this conn */
+ continue;
+ }
+
+ if (conn->type == CONN_TYPE_OR &&
+ !conn->marked_for_close) {
+ log_debug(LD_DIR, "%s: Found an OR connection: %s",
+ __func__, conn->address);
+ return 1;
+ }
+ } SMARTLIST_FOREACH_END(conn);
+
+ return 0;
}
/** Return 1 if <b>conn</b> is a listener conn, else return 0. */
@@ -3634,6 +4231,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 ||
@@ -3656,6 +4254,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 &&
@@ -3777,7 +4376,7 @@ client_check_address_changed(tor_socket_t sock)
} else {
/* The interface changed. We're a client, so we need to regenerate our
* keys. First, reset the state. */
- log(LOG_NOTICE, LD_NET, "Our IP address has changed. Rotating keys...");
+ log_notice(LD_NET, "Our IP address has changed. Rotating keys...");
tor_addr_copy(*last_interface_ip_ptr, &iface_addr);
SMARTLIST_FOREACH(outgoing_addrs, tor_addr_t*, a_ptr, tor_free(a_ptr));
smartlist_clear(outgoing_addrs);
@@ -3825,6 +4424,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),
@@ -3861,8 +4462,9 @@ connection_flushed_some(connection_t *conn)
return r;
}
-/** We just finished flushing bytes from conn-\>outbuf, and there
- * are no more bytes remaining.
+/** We just finished flushing bytes to the appropriately low network layer,
+ * and there are no more bytes remaining in conn-\>outbuf, conn-\>bev, or
+ * conn-\>tls to be flushed.
*
* This function just passes conn to the connection-specific
* connection_*_finished_flushing() function.
@@ -3884,6 +4486,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));
@@ -3939,6 +4543,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:
@@ -3960,9 +4565,9 @@ connection_reached_eof(connection_t *conn)
void
connection_dump_buffer_mem_stats(int severity)
{
- uint64_t used_by_type[_CONN_TYPE_MAX+1];
- uint64_t alloc_by_type[_CONN_TYPE_MAX+1];
- int n_conns_by_type[_CONN_TYPE_MAX+1];
+ uint64_t used_by_type[CONN_TYPE_MAX_+1];
+ uint64_t alloc_by_type[CONN_TYPE_MAX_+1];
+ int n_conns_by_type[CONN_TYPE_MAX_+1];
uint64_t total_alloc = 0;
uint64_t total_used = 0;
int i;
@@ -3984,19 +4589,19 @@ connection_dump_buffer_mem_stats(int severity)
alloc_by_type[tp] += buf_allocation(c->outbuf);
}
} SMARTLIST_FOREACH_END(c);
- for (i=0; i <= _CONN_TYPE_MAX; ++i) {
+ for (i=0; i <= CONN_TYPE_MAX_; ++i) {
total_used += used_by_type[i];
total_alloc += alloc_by_type[i];
}
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"In buffers for %d connections: "U64_FORMAT" used/"U64_FORMAT" allocated",
smartlist_len(conns),
U64_PRINTF_ARG(total_used), U64_PRINTF_ARG(total_alloc));
- for (i=_CONN_TYPE_MIN; i <= _CONN_TYPE_MAX; ++i) {
+ for (i=CONN_TYPE_MIN_; i <= CONN_TYPE_MAX_; ++i) {
if (!n_conns_by_type[i])
continue;
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
" For %d %s connections: "U64_FORMAT" used/"U64_FORMAT" allocated",
n_conns_by_type[i], conn_type_to_string(i),
U64_PRINTF_ARG(used_by_type[i]), U64_PRINTF_ARG(alloc_by_type[i]));
@@ -4011,8 +4616,8 @@ assert_connection_ok(connection_t *conn, time_t now)
{
(void) now; /* XXXX unused. */
tor_assert(conn);
- tor_assert(conn->type >= _CONN_TYPE_MIN);
- tor_assert(conn->type <= _CONN_TYPE_MAX);
+ tor_assert(conn->type >= CONN_TYPE_MIN_);
+ tor_assert(conn->type <= CONN_TYPE_MAX_);
#ifdef USE_BUFFEREVENTS
if (conn->bufev) {
@@ -4025,6 +4630,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:
@@ -4127,34 +4733,37 @@ assert_connection_ok(connection_t *conn, time_t now)
tor_assert(conn->state == LISTENER_STATE_READY);
break;
case CONN_TYPE_OR:
- tor_assert(conn->state >= _OR_CONN_STATE_MIN);
- tor_assert(conn->state <= _OR_CONN_STATE_MAX);
- tor_assert(TO_OR_CONN(conn)->n_circuits >= 0);
+ 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);
- tor_assert(conn->purpose >= _EXIT_PURPOSE_MIN);
- tor_assert(conn->purpose <= _EXIT_PURPOSE_MAX);
+ tor_assert(conn->state >= EXIT_CONN_STATE_MIN_);
+ tor_assert(conn->state <= EXIT_CONN_STATE_MAX_);
+ tor_assert(conn->purpose >= EXIT_PURPOSE_MIN_);
+ tor_assert(conn->purpose <= EXIT_PURPOSE_MAX_);
break;
case CONN_TYPE_AP:
- tor_assert(conn->state >= _AP_CONN_STATE_MIN);
- tor_assert(conn->state <= _AP_CONN_STATE_MAX);
+ tor_assert(conn->state >= AP_CONN_STATE_MIN_);
+ tor_assert(conn->state <= AP_CONN_STATE_MAX_);
tor_assert(TO_ENTRY_CONN(conn)->socks_request);
break;
case CONN_TYPE_DIR:
- tor_assert(conn->state >= _DIR_CONN_STATE_MIN);
- tor_assert(conn->state <= _DIR_CONN_STATE_MAX);
- tor_assert(conn->purpose >= _DIR_PURPOSE_MIN);
- tor_assert(conn->purpose <= _DIR_PURPOSE_MAX);
+ tor_assert(conn->state >= DIR_CONN_STATE_MIN_);
+ tor_assert(conn->state <= DIR_CONN_STATE_MAX_);
+ tor_assert(conn->purpose >= DIR_PURPOSE_MIN_);
+ tor_assert(conn->purpose <= DIR_PURPOSE_MAX_);
break;
case CONN_TYPE_CPUWORKER:
- tor_assert(conn->state >= _CPUWORKER_STATE_MIN);
- tor_assert(conn->state <= _CPUWORKER_STATE_MAX);
+ tor_assert(conn->state >= CPUWORKER_STATE_MIN_);
+ tor_assert(conn->state <= CPUWORKER_STATE_MAX_);
break;
case CONN_TYPE_CONTROL:
- tor_assert(conn->state >= _CONTROL_CONN_STATE_MIN);
- tor_assert(conn->state <= _CONTROL_CONN_STATE_MAX);
+ tor_assert(conn->state >= CONTROL_CONN_STATE_MIN_);
+ tor_assert(conn->state <= CONTROL_CONN_STATE_MAX_);
break;
default:
tor_assert(0);
@@ -4192,7 +4801,7 @@ get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
options->Bridges) {
const transport_t *transport = NULL;
int r;
- r = find_transport_by_bridge_addrport(&conn->addr, conn->port, &transport);
+ r = get_transport_by_bridge_addrport(&conn->addr, conn->port, &transport);
if (r<0)
return -1;
if (transport) { /* transport found */
@@ -4203,28 +4812,12 @@ get_proxy_addrport(tor_addr_t *addr, uint16_t *port, int *proxy_type,
}
}
+ tor_addr_make_unspec(addr);
+ *port = 0;
*proxy_type = PROXY_NONE;
return 0;
}
-/** Returns the global proxy type used by tor. */
-static int
-get_proxy_type(void)
-{
- const or_options_t *options = get_options();
-
- if (options->HTTPSProxy)
- return PROXY_CONNECT;
- else if (options->Socks4Proxy)
- return PROXY_SOCKS4;
- else if (options->Socks5Proxy)
- return PROXY_SOCKS5;
- else if (options->ClientTransportPlugin)
- return PROXY_PLUGGABLE;
- else
- return PROXY_NONE;
-}
-
/** Log a failed connection to a proxy server.
* <b>conn</b> is the connection we use the proxy server for. */
void
@@ -4238,10 +4831,10 @@ log_failed_proxy_connection(connection_t *conn)
return; /* if we have no proxy set up, leave this function. */
log_warn(LD_NET,
- "The connection to the %s proxy server at %s:%u just failed. "
+ "The connection to the %s proxy server at %s just failed. "
"Make sure that the proxy server is up and running.",
- proxy_type_to_string(get_proxy_type()), fmt_addr(&proxy_addr),
- proxy_port);
+ proxy_type_to_string(get_proxy_type()),
+ fmt_addrport(&proxy_addr, proxy_port));
}
/** Return string representation of <b>proxy_type</b>. */
@@ -4259,7 +4852,7 @@ proxy_type_to_string(int proxy_type)
return NULL; /*Unreached*/
}
-/** Call _connection_free() on every connection in our array, and release all
+/** Call connection_free_() on every connection in our array, and release all
* storage held by connection.c. This is used by cpuworkers and dnsworkers
* when they fork, so they don't keep resources held open (especially
* sockets).
@@ -4281,11 +4874,12 @@ 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);
- SMARTLIST_FOREACH(conns, connection_t *, conn, _connection_free(conn));
+ SMARTLIST_FOREACH(conns, connection_t *, conn, connection_free_(conn));
if (outgoing_addrs) {
SMARTLIST_FOREACH(outgoing_addrs, tor_addr_t *, addr, tor_free(addr));
@@ -4293,6 +4887,9 @@ connection_free_all(void)
outgoing_addrs = NULL;
}
+ tor_free(last_interface_ipv4);
+ tor_free(last_interface_ipv6);
+
#ifdef USE_BUFFEREVENTS
if (global_rate_limit)
bufferevent_rate_limit_group_free(global_rate_limit);
diff --git a/src/or/connection.h b/src/or/connection.h
index 785625e44..13dcbcd91 100644
--- a/src/or/connection.h
+++ b/src/or/connection.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for connection.c.
**/
-#ifndef _TOR_CONNECTION_H
-#define _TOR_CONNECTION_H
+#ifndef TOR_CONNECTION_H
+#define TOR_CONNECTION_H
/* XXXX For buf_datalen in inline function */
#include "buffers.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);
@@ -31,25 +31,57 @@ void connection_free(connection_t *conn);
void connection_free_all(void);
void connection_about_to_close_connection(connection_t *conn);
void connection_close_immediate(connection_t *conn);
-void _connection_mark_for_close(connection_t *conn,int line, const char *file);
+void connection_mark_for_close_(connection_t *conn,
+ int line, const char *file);
+void connection_mark_for_close_internal_(connection_t *conn,
+ int line, const char *file);
#define connection_mark_for_close(c) \
- _connection_mark_for_close((c), __LINE__, _SHORT_FILE_)
+ connection_mark_for_close_((c), __LINE__, SHORT_FILE__)
+#define connection_mark_for_close_internal(c) \
+ connection_mark_for_close_internal_((c), __LINE__, SHORT_FILE__)
/**
* Mark 'c' for close, but try to hold it open until all the data is written.
+ * Use the _internal versions of connection_mark_for_close; this should be
+ * called when you either are sure that if this is an or_connection_t the
+ * controlling channel has been notified (e.g. with
+ * connection_or_notify_error()), or you actually are the
+ * connection_or_close_for_error() or connection_or_close_normally function.
+ * For all other cases, use connection_mark_and_flush() instead, which
+ * checks for or_connection_t properly, instead. See below.
*/
-#define _connection_mark_and_flush(c,line,file) \
- do { \
- connection_t *tmp_conn_ = (c); \
- _connection_mark_for_close(tmp_conn_, (line), (file)); \
- tmp_conn_->hold_open_until_flushed = 1; \
- IF_HAS_BUFFEREVENT(tmp_conn_, \
- connection_start_writing(tmp_conn_)); \
+#define connection_mark_and_flush_internal_(c,line,file) \
+ do { \
+ connection_t *tmp_conn_ = (c); \
+ connection_mark_for_close_internal_(tmp_conn_, (line), (file)); \
+ tmp_conn_->hold_open_until_flushed = 1; \
+ IF_HAS_BUFFEREVENT(tmp_conn_, \
+ connection_start_writing(tmp_conn_)); \
+ } while (0)
+
+#define connection_mark_and_flush_internal(c) \
+ connection_mark_and_flush_internal_((c), __LINE__, SHORT_FILE__)
+
+/**
+ * Mark 'c' for close, but try to hold it open until all the data is written.
+ */
+#define connection_mark_and_flush_(c,line,file) \
+ do { \
+ connection_t *tmp_conn_ = (c); \
+ if (tmp_conn_->type == CONN_TYPE_OR) { \
+ log_warn(LD_CHANNEL | LD_BUG, \
+ "Something tried to close (and flush) an or_connection_t" \
+ " without going through channels at %s:%d", \
+ file, line); \
+ connection_or_close_for_error(TO_OR_CONN(tmp_conn_), 1); \
+ } else { \
+ connection_mark_and_flush_internal_(c, line, file); \
+ } \
} while (0)
#define connection_mark_and_flush(c) \
- _connection_mark_and_flush((c), __LINE__, _SHORT_FILE_)
+ connection_mark_and_flush_((c), __LINE__, SHORT_FILE__)
void connection_expire_held_open(void);
@@ -57,6 +89,14 @@ int connection_connect(connection_t *conn, const char *address,
const tor_addr_t *addr,
uint16_t port, int *socket_error);
+/** Maximum size of information that we can fit into SOCKS5 username
+ or password fields. */
+#define MAX_SOCKS5_AUTH_FIELD_SIZE 255
+
+/** Total maximum size of information that we can fit into SOCKS5
+ username and password fields. */
+#define MAX_SOCKS5_AUTH_SIZE_TOTAL 2*MAX_SOCKS5_AUTH_FIELD_SIZE
+
int connection_proxy_connect(connection_t *conn, int type);
int connection_read_proxy_handshake(connection_t *conn);
void log_failed_proxy_connection(connection_t *conn);
@@ -90,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);
@@ -101,13 +141,13 @@ static void connection_write_to_buf_zlib(const char *string, size_t len,
static INLINE void
connection_write_to_buf(const char *string, size_t len, connection_t *conn)
{
- _connection_write_to_buf_impl(string, len, conn, 0);
+ connection_write_to_buf_impl_(string, len, conn, 0);
}
static INLINE void
connection_write_to_buf_zlib(const char *string, size_t len,
dir_connection_t *conn, int done)
{
- _connection_write_to_buf_impl(string, len, TO_CONN(conn), done ? -1 : 1);
+ connection_write_to_buf_impl_(string, len, TO_CONN(conn), done ? -1 : 1);
}
/* DOCDOC connection_get_inbuf_len */
@@ -138,7 +178,6 @@ connection_get_outbuf_len(connection_t *conn)
connection_t *connection_get_by_global_id(uint64_t id);
connection_t *connection_get_by_type(int type);
-connection_t *connection_get_by_type_purpose(int type, int purpose);
connection_t *connection_get_by_type_addr_port_purpose(int type,
const tor_addr_t *addr,
uint16_t port, int purpose);
@@ -148,6 +187,8 @@ connection_t *connection_get_by_type_state_rendquery(int type, int state,
dir_connection_t *connection_dir_get_by_purpose_and_resource(
int state, const char *resource);
+int any_other_active_or_conns(const or_connection_t *this_conn);
+
#define connection_speaks_cells(conn) ((conn)->type == CONN_TYPE_OR)
int connection_is_listener(connection_t *conn);
int connection_state_is_open(connection_t *conn);
@@ -174,5 +215,18 @@ 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);
+
+/* Used only by connection.c and test*.c */
+uint32_t bucket_millis_empty(int tokens_before, uint32_t last_empty_time,
+ int tokens_after, int milliseconds_elapsed,
+ const struct timeval *tvnow);
+void connection_buckets_note_empty_ts(uint32_t *timestamp_var,
+ int tokens_before,
+ size_t tokens_removed,
+ const struct timeval *tvnow);
+#endif
+
#endif
diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c
index 9563ca622..49f9ba497 100644
--- a/src/or/connection_edge.c
+++ b/src/or/connection_edge.c
@@ -1,16 +1,20 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file connection_edge.c
* \brief Handle edge streams.
**/
+#define CONNECTION_EDGE_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitlist.h"
#include "circuituse.h"
#include "config.h"
@@ -33,6 +37,8 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
+#include "routerset.h"
+#include "circuitbuild.h"
#ifdef HAVE_LINUX_TYPES_H
#include <linux/types.h>
@@ -54,18 +60,16 @@
static int connection_ap_handshake_process_socks(entry_connection_t *conn);
static int connection_ap_process_natd(entry_connection_t *conn);
static int connection_exit_connect_dir(edge_connection_t *exitconn);
-static int address_is_in_virtual_range(const char *addr);
static int consider_plaintext_ports(entry_connection_t *conn, uint16_t port);
-static void clear_trackexithost_mappings(const char *exitname);
static int connection_ap_supports_optimistic_data(const entry_connection_t *);
/** An AP stream has failed/finished. If it hasn't already sent back
* a socks reply, send one now (based on endreason). Also set
* has_sent_end to 1, and mark the conn.
*/
-void
-_connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
- int line, const char *file)
+MOCK_IMPL(void,
+connection_mark_unattached_ap_,(entry_connection_t *conn, int endreason,
+ int line, const char *file))
{
connection_t *base_conn = ENTRY_TO_CONN(conn);
edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
@@ -87,7 +91,7 @@ _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
if (base_conn->marked_for_close) {
/* This call will warn as appropriate. */
- _connection_mark_for_close(base_conn, line, file);
+ connection_mark_for_close_(base_conn, line, file);
return;
}
@@ -107,7 +111,7 @@ _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
conn->socks_request->has_finished = 1;
}
- _connection_mark_and_flush(base_conn, line, file);
+ connection_mark_and_flush_(base_conn, line, file);
ENTRY_TO_EDGE_CONN(conn)->end_reason = endreason;
}
@@ -122,12 +126,13 @@ connection_edge_reached_eof(edge_connection_t *conn)
/* it still has stuff to process. don't let it die yet. */
return 0;
}
- log_info(LD_EDGE,"conn (fd %d) reached eof. Closing.", conn->_base.s);
- if (!conn->_base.marked_for_close) {
+ log_info(LD_EDGE,"conn (fd "TOR_SOCKET_T_FORMAT") reached eof. Closing.",
+ conn->base_.s);
+ if (!conn->base_.marked_for_close) {
/* only mark it if not already marked. it's possible to
* get the 'end' right around when the client hangs up on us. */
connection_edge_end(conn, END_STREAM_REASON_DONE);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (conn->base_.type == CONN_TYPE_AP) {
/* eof, so don't send a socks reply back */
if (EDGE_TO_ENTRY_CONN(conn)->socks_request)
EDGE_TO_ENTRY_CONN(conn)->socks_request->has_finished = 1;
@@ -152,7 +157,7 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
{
tor_assert(conn);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case AP_CONN_STATE_SOCKS_WAIT:
if (connection_ap_handshake_process_socks(EDGE_TO_ENTRY_CONN(conn)) <0) {
/* already marked */
@@ -178,7 +183,7 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
log_info(LD_EDGE,
"data from edge while in '%s' state. Sending it anyway. "
"package_partial=%d, buflen=%ld",
- conn_state_to_string(conn->_base.type, conn->_base.state),
+ conn_state_to_string(conn->base_.type, conn->base_.state),
package_partial,
(long)connection_get_inbuf_len(TO_CONN(conn)));
if (connection_edge_package_raw_inbuf(conn, package_partial, NULL)<0) {
@@ -197,10 +202,10 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
case AP_CONN_STATE_CONTROLLER_WAIT:
log_info(LD_EDGE,
"data from edge while in '%s' state. Leaving it on buffer.",
- conn_state_to_string(conn->_base.type, conn->_base.state));
+ conn_state_to_string(conn->base_.type, conn->base_.state));
return 0;
}
- log_warn(LD_BUG,"Got unexpected state %d. Closing.",conn->_base.state);
+ log_warn(LD_BUG,"Got unexpected state %d. Closing.",conn->base_.state);
tor_fragile_assert();
connection_edge_end(conn, END_STREAM_REASON_INTERNAL);
connection_mark_for_close(TO_CONN(conn));
@@ -213,10 +218,10 @@ connection_edge_process_inbuf(edge_connection_t *conn, int package_partial)
int
connection_edge_destroy(circid_t circ_id, edge_connection_t *conn)
{
- if (!conn->_base.marked_for_close) {
- log_info(LD_EDGE,
- "CircID %d: At an edge. Marking connection for close.", circ_id);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (!conn->base_.marked_for_close) {
+ log_info(LD_EDGE, "CircID %u: At an edge. Marking connection for close.",
+ (unsigned) circ_id);
+ if (conn->base_.type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_DESTROY);
control_event_stream_bandwidth(conn);
@@ -280,10 +285,10 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
return -1;
}
- if (conn->_base.marked_for_close) {
+ if (conn->base_.marked_for_close) {
log_warn(LD_BUG,
"called on conn that's already marked for close at %s:%d.",
- conn->_base.marked_for_close_file, conn->_base.marked_for_close);
+ conn->base_.marked_for_close_file, conn->base_.marked_for_close);
return 0;
}
@@ -299,11 +304,11 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
if (reason == END_STREAM_REASON_EXITPOLICY &&
!connection_edge_is_rendezvous_stream(conn)) {
int addrlen;
- if (tor_addr_family(&conn->_base.addr) == AF_INET) {
- set_uint32(payload+1, tor_addr_to_ipv4n(&conn->_base.addr));
+ if (tor_addr_family(&conn->base_.addr) == AF_INET) {
+ set_uint32(payload+1, tor_addr_to_ipv4n(&conn->base_.addr));
addrlen = 4;
} else {
- memcpy(payload+1, tor_addr_to_in6_addr8(&conn->_base.addr), 16);
+ memcpy(payload+1, tor_addr_to_in6_addr8(&conn->base_.addr), 16);
addrlen = 16;
}
set_uint32(payload+1+addrlen, htonl(dns_clip_ttl(conn->address_ttl)));
@@ -311,12 +316,14 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
}
if (circ && !circ->marked_for_close) {
- log_debug(LD_EDGE,"Sending end on conn (fd %d).",conn->_base.s);
+ log_debug(LD_EDGE,"Sending end on conn (fd "TOR_SOCKET_T_FORMAT").",
+ conn->base_.s);
connection_edge_send_command(conn, RELAY_COMMAND_END,
payload, payload_len);
} else {
- log_debug(LD_EDGE,"No circ to send end on conn (fd %d).",
- conn->_base.s);
+ log_debug(LD_EDGE,"No circ to send end on conn "
+ "(fd "TOR_SOCKET_T_FORMAT").",
+ conn->base_.s);
}
conn->edge_has_sent_end = 1;
@@ -333,7 +340,7 @@ connection_edge_end_errno(edge_connection_t *conn)
{
uint8_t reason;
tor_assert(conn);
- reason = errno_to_stream_end_reason(tor_socket_errno(conn->_base.s));
+ reason = errno_to_stream_end_reason(tor_socket_errno(conn->base_.s));
return connection_edge_end(conn, reason);
}
@@ -345,7 +352,7 @@ connection_edge_end_errno(edge_connection_t *conn)
int
connection_edge_flushed_some(edge_connection_t *conn)
{
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case AP_CONN_STATE_OPEN:
case EXIT_CONN_STATE_OPEN:
connection_edge_consider_sending_sendme(conn);
@@ -369,7 +376,7 @@ connection_edge_finished_flushing(edge_connection_t *conn)
{
tor_assert(conn);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case AP_CONN_STATE_OPEN:
case EXIT_CONN_STATE_OPEN:
connection_edge_consider_sending_sendme(conn);
@@ -383,13 +390,55 @@ connection_edge_finished_flushing(edge_connection_t *conn)
case AP_CONN_STATE_RESOLVE_WAIT:
return 0;
default:
- log_warn(LD_BUG, "Called in unexpected state %d.",conn->_base.state);
+ log_warn(LD_BUG, "Called in unexpected state %d.",conn->base_.state);
tor_fragile_assert();
return -1;
}
return 0;
}
+/** Longest size for the relay payload of a RELAY_CONNECTED cell that we're
+ * able to generate. */
+/* 4 zero bytes; 1 type byte; 16 byte IPv6 address; 4 byte TTL. */
+#define MAX_CONNECTED_CELL_PAYLOAD_LEN 25
+
+/** Set the buffer at <b>payload_out</b> -- which must have at least
+ * MAX_CONNECTED_CELL_PAYLOAD_LEN bytes available -- to the body of a
+ * RELAY_CONNECTED cell indicating that we have connected to <b>addr</b>, and
+ * 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. */
+STATIC int
+connected_cell_format_payload(uint8_t *payload_out,
+ const tor_addr_t *addr,
+ uint32_t ttl)
+{
+ const sa_family_t family = tor_addr_family(addr);
+ int connected_payload_len;
+
+ /* should be needless */
+ memset(payload_out, 0, MAX_CONNECTED_CELL_PAYLOAD_LEN);
+
+ if (family == AF_INET) {
+ set_uint32(payload_out, tor_addr_to_ipv4n(addr));
+ connected_payload_len = 4;
+ } else if (family == AF_INET6) {
+ set_uint32(payload_out, 0);
+ set_uint8(payload_out + 4, 6);
+ memcpy(payload_out + 5, tor_addr_to_in6_addr8(addr), 16);
+ connected_payload_len = 21;
+ } else {
+ return -1;
+ }
+
+ set_uint32(payload_out + connected_payload_len, htonl(dns_clip_ttl(ttl)));
+ connected_payload_len += 4;
+
+ tor_assert(connected_payload_len <= MAX_CONNECTED_CELL_PAYLOAD_LEN);
+
+ return connected_payload_len;
+}
+
/** Connected handler for exit connections: start writing pending
* data, deliver 'CONNECTED' relay cells as appropriate, and check
* any pending data that may have been received. */
@@ -399,13 +448,13 @@ connection_edge_finished_connecting(edge_connection_t *edge_conn)
connection_t *conn;
tor_assert(edge_conn);
- tor_assert(edge_conn->_base.type == CONN_TYPE_EXIT);
+ tor_assert(edge_conn->base_.type == CONN_TYPE_EXIT);
conn = TO_CONN(edge_conn);
tor_assert(conn->state == EXIT_CONN_STATE_CONNECTING);
log_info(LD_EXIT,"Exit connection to %s:%u (%s) established.",
escaped_safe_str(conn->address), conn->port,
- safe_str(fmt_addr(&conn->addr)));
+ safe_str(fmt_and_decorate_addr(&conn->addr)));
rep_hist_note_exit_stream_opened(conn->port);
@@ -421,22 +470,16 @@ connection_edge_finished_connecting(edge_connection_t *edge_conn)
RELAY_COMMAND_CONNECTED, NULL, 0) < 0)
return 0; /* circuit is closed, don't continue */
} else {
- char connected_payload[20];
- int connected_payload_len;
- if (tor_addr_family(&conn->addr) == AF_INET) {
- set_uint32(connected_payload, tor_addr_to_ipv4n(&conn->addr));
- set_uint32(connected_payload+4,
- htonl(dns_clip_ttl(edge_conn->address_ttl)));
- connected_payload_len = 8;
- } else {
- memcpy(connected_payload, tor_addr_to_in6_addr8(&conn->addr), 16);
- set_uint32(connected_payload+16,
- htonl(dns_clip_ttl(edge_conn->address_ttl)));
- connected_payload_len = 20;
- }
+ uint8_t connected_payload[MAX_CONNECTED_CELL_PAYLOAD_LEN];
+ int connected_payload_len =
+ connected_cell_format_payload(connected_payload, &conn->addr,
+ edge_conn->address_ttl);
+ if (connected_payload_len < 0)
+ return -1;
+
if (connection_edge_send_command(edge_conn,
- RELAY_COMMAND_CONNECTED,
- connected_payload, connected_payload_len) < 0)
+ RELAY_COMMAND_CONNECTED,
+ (char*)connected_payload, connected_payload_len) < 0)
return 0; /* circuit is closed, don't continue */
}
tor_assert(edge_conn->package_window > 0);
@@ -600,12 +643,27 @@ connection_ap_expire_beginning(void)
" '%s.onion'.",
seconds_idle,
safe_str_client(entry_conn->socks_request->address));
+ /* Roll back path bias use state so that we probe the circuit
+ * if nothing else succeeds on it */
+ pathbias_mark_use_rollback(TO_ORIGIN_CIRCUIT(circ));
+
connection_edge_end(conn, END_STREAM_REASON_TIMEOUT);
connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TIMEOUT);
}
continue;
}
- tor_assert(circ->purpose == CIRCUIT_PURPOSE_C_GENERAL);
+ if (circ->purpose != CIRCUIT_PURPOSE_C_GENERAL &&
+ circ->purpose != CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT &&
+ circ->purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
+ log_warn(LD_BUG, "circuit->purpose == CIRCUIT_PURPOSE_C_GENERAL failed. "
+ "The purpose on the circuit was %s; it was in state %s, "
+ "path_state %s.",
+ circuit_purpose_to_string(circ->purpose),
+ circuit_state_to_string(circ->state),
+ CIRCUIT_IS_ORIGIN(circ) ?
+ pathbias_state_to_string(TO_ORIGIN_CIRCUIT(circ)->path_state) :
+ "none");
+ }
log_fn(cutoff < 15 ? LOG_INFO : severity, LD_APP,
"We tried for %d seconds to connect to '%s' using exit %s."
" Retrying on a new circuit.",
@@ -619,14 +677,12 @@ connection_ap_expire_beginning(void)
/* un-mark it as ending, since we're going to reuse it */
conn->edge_has_sent_end = 0;
conn->end_reason = 0;
- /* kludge to make us not try this circuit again, yet to allow
- * current streams on it to survive if they can: make it
- * unattractive to use for new streams */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->timestamp_dirty);
- circ->timestamp_dirty -= options->MaxCircuitDirtiness;
+ /* make us not try this circuit again, but allow
+ * current streams on it to survive if they can */
+ mark_circuit_unusable_for_new_conns(TO_ORIGIN_CIRCUIT(circ));
+
/* give our stream another 'cutoff' seconds to try */
- conn->_base.timestamp_lastread += cutoff;
+ conn->base_.timestamp_lastread += cutoff;
if (entry_conn->num_socks_retries < 250) /* avoid overflow */
entry_conn->num_socks_retries++;
/* move it back into 'pending' state, and try to attach. */
@@ -752,7 +808,7 @@ circuit_discard_optional_exit_enclaves(extend_info_t *info)
/** The AP connection <b>conn</b> has just failed while attaching or
* sending a BEGIN or resolving on <b>circ</b>, but another circuit
* might work. Detach the circuit, and either reattach it, launch a
- * new circuit, tell the controller, or give up as a appropriate.
+ * new circuit, tell the controller, or give up as appropriate.
*
* Returns -1 on err, 1 on success, 0 on not-yet-sure.
*/
@@ -764,6 +820,10 @@ connection_ap_detach_retriable(entry_connection_t *conn,
control_event_stream_status(conn, STREAM_EVENT_FAILED_RETRIABLE, reason);
ENTRY_TO_CONN(conn)->timestamp_lastread = time(NULL);
+ /* Roll back path bias use state so that we probe the circuit
+ * if nothing else succeeds on it */
+ pathbias_mark_use_rollback(circ);
+
if (conn->pending_optimistic_data) {
generic_buffer_set_to_copy(&conn->sending_optimistic_data,
conn->pending_optimistic_data);
@@ -782,957 +842,16 @@ connection_ap_detach_retriable(entry_connection_t *conn,
}
}
-/** A client-side struct to remember requests to rewrite addresses
- * to new addresses. These structs are stored in the hash table
- * "addressmap" below.
- *
- * There are 5 ways to set an address mapping:
- * - A MapAddress command from the controller [permanent]
- * - An AddressMap directive in the torrc [permanent]
- * - When a TrackHostExits torrc directive is triggered [temporary]
- * - When a DNS resolve succeeds [temporary]
- * - When a DNS resolve fails [temporary]
- *
- * When an addressmap request is made but one is already registered,
- * the new one is replaced only if the currently registered one has
- * no "new_address" (that is, it's in the process of DNS resolve),
- * or if the new one is permanent (expires==0 or 1).
- *
- * (We overload the 'expires' field, using "0" for mappings set via
- * the configuration file, "1" for mappings set from the control
- * interface, and other values for DNS and TrackHostExit mappings that can
- * expire.)
- *
- * A mapping may be 'wildcarded'. If "src_wildcard" is true, then
- * any address that ends with a . followed by the key for this entry will
- * get remapped by it. If "dst_wildcard" is also true, then only the
- * matching suffix of such addresses will get replaced by new_address.
- */
-typedef struct {
- char *new_address;
- time_t expires;
- addressmap_entry_source_t source:3;
- unsigned src_wildcard:1;
- unsigned dst_wildcard:1;
- short num_resolve_failures;
-} addressmap_entry_t;
-
-/** Entry for mapping addresses to which virtual address we mapped them to. */
-typedef struct {
- char *ipv4_address;
- char *hostname_address;
-} virtaddress_entry_t;
-
-/** A hash table to store client-side address rewrite instructions. */
-static strmap_t *addressmap=NULL;
-/**
- * Table mapping addresses to which virtual address, if any, we
- * assigned them to.
- *
- * We maintain the following invariant: if [A,B] is in
- * virtaddress_reversemap, then B must be a virtual address, and [A,B]
- * must be in addressmap. We do not require that the converse hold:
- * if it fails, then we could end up mapping two virtual addresses to
- * the same address, which is no disaster.
- **/
-static strmap_t *virtaddress_reversemap=NULL;
-
-/** Initialize addressmap. */
-void
-addressmap_init(void)
-{
- addressmap = strmap_new();
- virtaddress_reversemap = strmap_new();
-}
-
-/** Free the memory associated with the addressmap entry <b>_ent</b>. */
-static void
-addressmap_ent_free(void *_ent)
-{
- addressmap_entry_t *ent;
- if (!_ent)
- return;
-
- ent = _ent;
- tor_free(ent->new_address);
- tor_free(ent);
-}
-
-/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
-static void
-addressmap_virtaddress_ent_free(void *_ent)
-{
- virtaddress_entry_t *ent;
- if (!_ent)
- return;
-
- ent = _ent;
- tor_free(ent->ipv4_address);
- tor_free(ent->hostname_address);
- tor_free(ent);
-}
-
-/** Free storage held by a virtaddress_entry_t* entry in <b>ent</b>. */
-static void
-addressmap_virtaddress_remove(const char *address, addressmap_entry_t *ent)
-{
- if (ent && ent->new_address &&
- address_is_in_virtual_range(ent->new_address)) {
- virtaddress_entry_t *ve =
- strmap_get(virtaddress_reversemap, ent->new_address);
- /*log_fn(LOG_NOTICE,"remove reverse mapping for %s",ent->new_address);*/
- if (ve) {
- if (!strcmp(address, ve->ipv4_address))
- tor_free(ve->ipv4_address);
- if (!strcmp(address, ve->hostname_address))
- tor_free(ve->hostname_address);
- if (!ve->ipv4_address && !ve->hostname_address) {
- tor_free(ve);
- strmap_remove(virtaddress_reversemap, ent->new_address);
- }
- }
- }
-}
-
-/** Remove <b>ent</b> (which must be mapped to by <b>address</b>) from the
- * client address maps. */
-static void
-addressmap_ent_remove(const char *address, addressmap_entry_t *ent)
-{
- addressmap_virtaddress_remove(address, ent);
- addressmap_ent_free(ent);
-}
-
-/** Unregister all TrackHostExits mappings from any address to
- * *.exitname.exit. */
-static void
-clear_trackexithost_mappings(const char *exitname)
-{
- char *suffix = NULL;
- if (!addressmap || !exitname)
- return;
- tor_asprintf(&suffix, ".%s.exit", exitname);
- tor_strlower(suffix);
-
- STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
- if (ent->source == ADDRMAPSRC_TRACKEXIT &&
- !strcmpend(ent->new_address, suffix)) {
- addressmap_ent_remove(address, ent);
- MAP_DEL_CURRENT(address);
- }
- } STRMAP_FOREACH_END;
-
- tor_free(suffix);
-}
-
-/** Remove all TRACKEXIT mappings from the addressmap for which the target
- * host is unknown or no longer allowed, or for which the source address
- * is no longer in trackexithosts. */
-void
-addressmap_clear_excluded_trackexithosts(const or_options_t *options)
-{
- const routerset_t *allow_nodes = options->ExitNodes;
- const routerset_t *exclude_nodes = options->_ExcludeExitNodesUnion;
-
- if (!addressmap)
- return;
- if (routerset_is_empty(allow_nodes))
- allow_nodes = NULL;
- if (allow_nodes == NULL && routerset_is_empty(exclude_nodes))
- return;
-
- STRMAP_FOREACH_MODIFY(addressmap, address, addressmap_entry_t *, ent) {
- size_t len;
- const char *target = ent->new_address, *dot;
- char *nodename;
- const node_t *node;
-
- if (!target) {
- /* DNS resolving in progress */
- continue;
- } else if (strcmpend(target, ".exit")) {
- /* Not a .exit mapping */
- continue;
- } else if (ent->source != ADDRMAPSRC_TRACKEXIT) {
- /* Not a trackexit mapping. */
- continue;
- }
- len = strlen(target);
- if (len < 6)
- continue; /* malformed. */
- dot = target + len - 6; /* dot now points to just before .exit */
- while (dot > target && *dot != '.')
- dot--;
- if (*dot == '.') dot++;
- nodename = tor_strndup(dot, len-5-(dot-target));;
- node = node_get_by_nickname(nodename, 0);
- tor_free(nodename);
- if (!node ||
- (allow_nodes && !routerset_contains_node(allow_nodes, node)) ||
- routerset_contains_node(exclude_nodes, node) ||
- !hostname_in_track_host_exits(options, address)) {
- /* We don't know this one, or we want to be rid of it. */
- addressmap_ent_remove(address, ent);
- MAP_DEL_CURRENT(address);
- }
- } STRMAP_FOREACH_END;
-}
-
-/** Remove all AUTOMAP mappings from the addressmap for which the
- * source address no longer matches AutomapHostsSuffixes, which is
- * no longer allowed by AutomapHostsOnResolve, or for which the
- * target address is no longer in the virtual network. */
-void
-addressmap_clear_invalid_automaps(const or_options_t *options)
-{
- int clear_all = !options->AutomapHostsOnResolve;
- const smartlist_t *suffixes = options->AutomapHostsSuffixes;
-
- if (!addressmap)
- return;
-
- if (!suffixes)
- clear_all = 1; /* This should be impossible, but let's be sure. */
-
- STRMAP_FOREACH_MODIFY(addressmap, src_address, addressmap_entry_t *, ent) {
- int remove = clear_all;
- if (ent->source != ADDRMAPSRC_AUTOMAP)
- continue; /* not an automap mapping. */
-
- if (!remove) {
- int suffix_found = 0;
- SMARTLIST_FOREACH(suffixes, const char *, suffix, {
- if (!strcasecmpend(src_address, suffix)) {
- suffix_found = 1;
- break;
- }
- });
- if (!suffix_found)
- remove = 1;
- }
-
- if (!remove && ! address_is_in_virtual_range(ent->new_address))
- remove = 1;
-
- if (remove) {
- addressmap_ent_remove(src_address, ent);
- MAP_DEL_CURRENT(src_address);
- }
- } STRMAP_FOREACH_END;
-}
-
-/** Remove all entries from the addressmap that were set via the
- * configuration file or the command line. */
-void
-addressmap_clear_configured(void)
-{
- addressmap_get_mappings(NULL, 0, 0, 0);
-}
-
-/** Remove all entries from the addressmap that are set to expire, ever. */
-void
-addressmap_clear_transient(void)
-{
- addressmap_get_mappings(NULL, 2, TIME_MAX, 0);
-}
-
-/** Clean out entries from the addressmap cache that were
- * added long enough ago that they are no longer valid.
- */
-void
-addressmap_clean(time_t now)
-{
- addressmap_get_mappings(NULL, 2, now, 0);
-}
-
-/** Free all the elements in the addressmap, and free the addressmap
- * itself. */
-void
-addressmap_free_all(void)
-{
- strmap_free(addressmap, addressmap_ent_free);
- addressmap = NULL;
-
- strmap_free(virtaddress_reversemap, addressmap_virtaddress_ent_free);
- virtaddress_reversemap = NULL;
-}
-
-/** Try to find a match for AddressMap expressions that use
- * wildcard notation such as '*.c.d *.e.f' (so 'a.c.d' will map to 'a.e.f') or
- * '*.c.d a.b.c' (so 'a.c.d' will map to a.b.c).
- * Return the matching entry in AddressMap or NULL if no match is found.
- * For expressions such as '*.c.d *.e.f', truncate <b>address</b> 'a.c.d'
- * to 'a' before we return the matching AddressMap entry.
- *
- * This function does not handle the case where a pattern of the form "*.c.d"
- * matches the address c.d -- that's done by the main addressmap_rewrite
- * function.
- */
-static addressmap_entry_t *
-addressmap_match_superdomains(char *address)
-{
- addressmap_entry_t *val;
- char *cp;
-
- cp = address;
- while ((cp = strchr(cp, '.'))) {
- /* cp now points to a suffix of address that begins with a . */
- val = strmap_get_lc(addressmap, cp+1);
- if (val && val->src_wildcard) {
- if (val->dst_wildcard)
- *cp = '\0';
- return val;
- }
- ++cp;
- }
- return NULL;
-}
-
-/** Look at address, and rewrite it until it doesn't want any
- * more rewrites; but don't get into an infinite loop.
- * Don't write more than maxlen chars into address. Return true if the
- * address changed; false otherwise. Set *<b>expires_out</b> to the
- * expiry time of the result, or to <b>time_max</b> if the result does
- * not expire.
- *
- * If <b>exit_source_out</b> is non-null, we set it as follows. If we the
- * address starts out as a non-exit address, and we remap it to an .exit
- * address at any point, then set *<b>exit_source_out</b> to the
- * address_entry_source_t of the first such rule. Set *<b>exit_source_out</b>
- * to ADDRMAPSRC_NONE if there is no such rewrite, or if the original address
- * was a .exit.
- */
-int
-addressmap_rewrite(char *address, size_t maxlen, time_t *expires_out,
- addressmap_entry_source_t *exit_source_out)
-{
- addressmap_entry_t *ent;
- int rewrites;
- time_t expires = TIME_MAX;
- addressmap_entry_source_t exit_source = ADDRMAPSRC_NONE;
- char *addr_orig = tor_strdup(address);
- char *log_addr_orig = NULL;
-
- for (rewrites = 0; rewrites < 16; rewrites++) {
- int exact_match = 0;
- log_addr_orig = tor_strdup(escaped_safe_str_client(address));
-
- ent = strmap_get(addressmap, address);
-
- if (!ent || !ent->new_address) {
- ent = addressmap_match_superdomains(address);
- } else {
- if (ent->src_wildcard && !ent->dst_wildcard &&
- !strcasecmp(address, ent->new_address)) {
- /* This is a rule like *.example.com example.com, and we just got
- * "example.com" */
- goto done;
- }
-
- exact_match = 1;
- }
-
- if (!ent || !ent->new_address) {
- goto done;
- }
-
- if (ent->dst_wildcard && !exact_match) {
- strlcat(address, ".", maxlen);
- strlcat(address, ent->new_address, maxlen);
- } else {
- strlcpy(address, ent->new_address, maxlen);
- }
-
- if (!strcmpend(address, ".exit") &&
- strcmpend(addr_orig, ".exit") &&
- exit_source == ADDRMAPSRC_NONE) {
- exit_source = ent->source;
- }
-
- log_info(LD_APP, "Addressmap: rewriting %s to %s",
- log_addr_orig, escaped_safe_str_client(address));
- if (ent->expires > 1 && ent->expires < expires)
- expires = ent->expires;
-
- tor_free(log_addr_orig);
- }
- log_warn(LD_CONFIG,
- "Loop detected: we've rewritten %s 16 times! Using it as-is.",
- escaped_safe_str_client(address));
- /* it's fine to rewrite a rewrite, but don't loop forever */
-
- done:
- tor_free(addr_orig);
- tor_free(log_addr_orig);
- if (exit_source_out)
- *exit_source_out = exit_source;
- if (expires_out)
- *expires_out = TIME_MAX;
- return (rewrites > 0);
-}
-
-/** If we have a cached reverse DNS entry for the address stored in the
- * <b>maxlen</b>-byte buffer <b>address</b> (typically, a dotted quad) then
- * rewrite to the cached value and return 1. Otherwise return 0. Set
- * *<b>expires_out</b> to the expiry time of the result, or to <b>time_max</b>
- * if the result does not expire. */
-static int
-addressmap_rewrite_reverse(char *address, size_t maxlen, time_t *expires_out)
-{
- char *s, *cp;
- addressmap_entry_t *ent;
- int r = 0;
- tor_asprintf(&s, "REVERSE[%s]", address);
- ent = strmap_get(addressmap, s);
- if (ent) {
- cp = tor_strdup(escaped_safe_str_client(ent->new_address));
- log_info(LD_APP, "Rewrote reverse lookup %s -> %s",
- escaped_safe_str_client(s), cp);
- tor_free(cp);
- strlcpy(address, ent->new_address, maxlen);
- r = 1;
- }
-
- if (expires_out)
- *expires_out = (ent && ent->expires > 1) ? ent->expires : TIME_MAX;
-
- tor_free(s);
- return r;
-}
-
-/** Return 1 if <b>address</b> is already registered, else return 0. If address
- * is already registered, and <b>update_expires</b> is non-zero, then update
- * the expiry time on the mapping with update_expires if it is a
- * mapping created by TrackHostExits. */
-int
-addressmap_have_mapping(const char *address, int update_expiry)
-{
- addressmap_entry_t *ent;
- if (!(ent=strmap_get_lc(addressmap, address)))
- return 0;
- if (update_expiry && ent->source==ADDRMAPSRC_TRACKEXIT)
- ent->expires=time(NULL) + update_expiry;
- return 1;
-}
-
-/** Register a request to map <b>address</b> to <b>new_address</b>,
- * which will expire on <b>expires</b> (or 0 if never expires from
- * config file, 1 if never expires from controller, 2 if never expires
- * (virtual address mapping) from the controller.)
- *
- * <b>new_address</b> should be a newly dup'ed string, which we'll use or
- * free as appropriate. We will leave address alone.
- *
- * If <b>wildcard_addr</b> is true, then the mapping will match any address
- * equal to <b>address</b>, or any address ending with a period followed by
- * <b>address</b>. If <b>wildcard_addr</b> and <b>wildcard_new_addr</b> are
- * both true, the mapping will rewrite addresses that end with
- * ".<b>address</b>" into ones that end with ".<b>new_address</b>."
- *
- * If <b>new_address</b> is NULL, or <b>new_address</b> is equal to
- * <b>address</b> and <b>wildcard_addr</b> is equal to
- * <b>wildcard_new_addr</b>, remove any mappings that exist from
- * <b>address</b>.
- *
- *
- * It is an error to set <b>wildcard_new_addr</b> if <b>wildcard_addr</b> is
- * not set. */
-void
-addressmap_register(const char *address, char *new_address, time_t expires,
- addressmap_entry_source_t source,
- const int wildcard_addr,
- const int wildcard_new_addr)
-{
- addressmap_entry_t *ent;
-
- if (wildcard_new_addr)
- tor_assert(wildcard_addr);
-
- ent = strmap_get(addressmap, address);
- if (!new_address || (!strcasecmp(address,new_address) &&
- wildcard_addr == wildcard_new_addr)) {
- /* Remove the mapping, if any. */
- tor_free(new_address);
- if (ent) {
- addressmap_ent_remove(address,ent);
- strmap_remove(addressmap, address);
- }
- return;
- }
- if (!ent) { /* make a new one and register it */
- ent = tor_malloc_zero(sizeof(addressmap_entry_t));
- strmap_set(addressmap, address, ent);
- } else if (ent->new_address) { /* we need to clean up the old mapping. */
- if (expires > 1) {
- log_info(LD_APP,"Temporary addressmap ('%s' to '%s') not performed, "
- "since it's already mapped to '%s'",
- safe_str_client(address),
- safe_str_client(new_address),
- safe_str_client(ent->new_address));
- tor_free(new_address);
- return;
- }
- if (address_is_in_virtual_range(ent->new_address) &&
- expires != 2) {
- /* XXX This isn't the perfect test; we want to avoid removing
- * mappings set from the control interface _as virtual mapping */
- addressmap_virtaddress_remove(address, ent);
- }
- tor_free(ent->new_address);
- } /* else { we have an in-progress resolve with no mapping. } */
-
- ent->new_address = new_address;
- ent->expires = expires==2 ? 1 : expires;
- ent->num_resolve_failures = 0;
- ent->source = source;
- ent->src_wildcard = wildcard_addr ? 1 : 0;
- ent->dst_wildcard = wildcard_new_addr ? 1 : 0;
-
- log_info(LD_CONFIG, "Addressmap: (re)mapped '%s' to '%s'",
- safe_str_client(address),
- safe_str_client(ent->new_address));
- control_event_address_mapped(address, ent->new_address, expires, NULL);
-}
-
-/** An attempt to resolve <b>address</b> failed at some OR.
- * Increment the number of resolve failures we have on record
- * for it, and then return that number.
- */
-int
-client_dns_incr_failures(const char *address)
-{
- addressmap_entry_t *ent = strmap_get(addressmap, address);
- if (!ent) {
- ent = tor_malloc_zero(sizeof(addressmap_entry_t));
- ent->expires = time(NULL) + MAX_DNS_ENTRY_AGE;
- strmap_set(addressmap,address,ent);
- }
- if (ent->num_resolve_failures < SHORT_MAX)
- ++ent->num_resolve_failures; /* don't overflow */
- log_info(LD_APP, "Address %s now has %d resolve failures.",
- safe_str_client(address),
- ent->num_resolve_failures);
- return ent->num_resolve_failures;
-}
-
-/** If <b>address</b> is in the client DNS addressmap, reset
- * the number of resolve failures we have on record for it.
- * This is used when we fail a stream because it won't resolve:
- * otherwise future attempts on that address will only try once.
- */
-void
-client_dns_clear_failures(const char *address)
-{
- addressmap_entry_t *ent = strmap_get(addressmap, address);
- if (ent)
- ent->num_resolve_failures = 0;
-}
-
-/** Record the fact that <b>address</b> resolved to <b>name</b>.
- * We can now use this in subsequent streams via addressmap_rewrite()
- * so we can more correctly choose an exit that will allow <b>address</b>.
- *
- * If <b>exitname</b> is defined, then append the addresses with
- * ".exitname.exit" before registering the mapping.
- *
- * If <b>ttl</b> is nonnegative, the mapping will be valid for
- * <b>ttl</b>seconds; otherwise, we use the default.
- */
-static void
-client_dns_set_addressmap_impl(const char *address, const char *name,
- const char *exitname,
- int ttl)
-{
- /* <address>.<hex or nickname>.exit\0 or just <address>\0 */
- char extendedaddress[MAX_SOCKS_ADDR_LEN+MAX_VERBOSE_NICKNAME_LEN+10];
- /* 123.123.123.123.<hex or nickname>.exit\0 or just 123.123.123.123\0 */
- char extendedval[INET_NTOA_BUF_LEN+MAX_VERBOSE_NICKNAME_LEN+10];
-
- tor_assert(address);
- tor_assert(name);
-
- if (ttl<0)
- ttl = DEFAULT_DNS_TTL;
- else
- ttl = dns_clip_ttl(ttl);
-
- if (exitname) {
- /* XXXX fails to ever get attempts to get an exit address of
- * google.com.digest[=~]nickname.exit; we need a syntax for this that
- * won't make strict RFC952-compliant applications (like us) barf. */
- tor_snprintf(extendedaddress, sizeof(extendedaddress),
- "%s.%s.exit", address, exitname);
- tor_snprintf(extendedval, sizeof(extendedval),
- "%s.%s.exit", name, exitname);
- } else {
- tor_snprintf(extendedaddress, sizeof(extendedaddress),
- "%s", address);
- tor_snprintf(extendedval, sizeof(extendedval),
- "%s", name);
- }
- addressmap_register(extendedaddress, tor_strdup(extendedval),
- time(NULL) + ttl, ADDRMAPSRC_DNS, 0, 0);
-}
-
-/** Record the fact that <b>address</b> resolved to <b>val</b>.
- * We can now use this in subsequent streams via addressmap_rewrite()
- * so we can more correctly choose an exit that will allow <b>address</b>.
- *
- * If <b>exitname</b> is defined, then append the addresses with
- * ".exitname.exit" before registering the mapping.
- *
- * If <b>ttl</b> is nonnegative, the mapping will be valid for
- * <b>ttl</b>seconds; otherwise, we use the default.
- */
-void
-client_dns_set_addressmap(const char *address, uint32_t val,
- const char *exitname,
- int ttl)
-{
- struct in_addr in;
- char valbuf[INET_NTOA_BUF_LEN];
-
- tor_assert(address);
-
- if (tor_inet_aton(address, &in))
- return; /* If address was an IP address already, don't add a mapping. */
- in.s_addr = htonl(val);
- tor_inet_ntoa(&in,valbuf,sizeof(valbuf));
-
- client_dns_set_addressmap_impl(address, valbuf, exitname, ttl);
-}
-
-/** Add a cache entry noting that <b>address</b> (ordinarily a dotted quad)
- * resolved via a RESOLVE_PTR request to the hostname <b>v</b>.
- *
- * If <b>exitname</b> is defined, then append the addresses with
- * ".exitname.exit" before registering the mapping.
- *
- * If <b>ttl</b> is nonnegative, the mapping will be valid for
- * <b>ttl</b>seconds; otherwise, we use the default.
- */
-static void
-client_dns_set_reverse_addressmap(const char *address, const char *v,
- const char *exitname,
- int ttl)
-{
- char *s = NULL;
- tor_asprintf(&s, "REVERSE[%s]", address);
- client_dns_set_addressmap_impl(s, v, exitname, ttl);
- tor_free(s);
-}
-
-/* By default, we hand out 127.192.0.1 through 127.254.254.254.
- * These addresses should map to localhost, so even if the
- * application accidentally tried to connect to them directly (not
- * via Tor), it wouldn't get too far astray.
- *
- * These options are configured by parse_virtual_addr_network().
- */
-/** Which network should we use for virtual IPv4 addresses? Only the first
- * bits of this value are fixed. */
-static uint32_t virtual_addr_network = 0x7fc00000u;
-/** How many bits of <b>virtual_addr_network</b> are fixed? */
-static maskbits_t virtual_addr_netmask_bits = 10;
-/** What's the next virtual address we will hand out? */
-static uint32_t next_virtual_addr = 0x7fc00000u;
-
-/** Read a netmask of the form 127.192.0.0/10 from "val", and check whether
- * it's a valid set of virtual addresses to hand out in response to MAPADDRESS
- * requests. Return 0 on success; set *msg (if provided) to a newly allocated
- * string and return -1 on failure. If validate_only is false, sets the
- * actual virtual address range to the parsed value. */
-int
-parse_virtual_addr_network(const char *val, int validate_only,
- char **msg)
-{
- uint32_t addr;
- uint16_t port_min, port_max;
- maskbits_t bits;
-
- if (parse_addr_and_port_range(val, &addr, &bits, &port_min, &port_max)) {
- if (msg) *msg = tor_strdup("Error parsing VirtualAddressNetwork");
- return -1;
- }
-
- if (port_min != 1 || port_max != 65535) {
- if (msg) *msg = tor_strdup("Can't specify ports on VirtualAddressNetwork");
- return -1;
- }
-
- if (bits > 16) {
- if (msg) *msg = tor_strdup("VirtualAddressNetwork expects a /16 "
- "network or larger");
- return -1;
- }
-
- if (validate_only)
- return 0;
-
- virtual_addr_network = (uint32_t)( addr & (0xfffffffful << (32-bits)) );
- virtual_addr_netmask_bits = bits;
-
- if (addr_mask_cmp_bits(next_virtual_addr, addr, bits))
- next_virtual_addr = addr;
-
- return 0;
-}
-
-/**
- * Return true iff <b>addr</b> is likely to have been returned by
- * client_dns_get_unused_address.
- **/
-static int
-address_is_in_virtual_range(const char *address)
-{
- struct in_addr in;
- tor_assert(address);
- if (!strcasecmpend(address, ".virtual")) {
- return 1;
- } else if (tor_inet_aton(address, &in)) {
- uint32_t addr = ntohl(in.s_addr);
- if (!addr_mask_cmp_bits(addr, virtual_addr_network,
- virtual_addr_netmask_bits))
- return 1;
- }
- return 0;
-}
-
-/** Increment the value of next_virtual_addr; reset it to the start of the
- * virtual address range if it wraps around.
- */
-static INLINE void
-increment_virtual_addr(void)
-{
- ++next_virtual_addr;
- if (addr_mask_cmp_bits(next_virtual_addr, virtual_addr_network,
- virtual_addr_netmask_bits))
- next_virtual_addr = virtual_addr_network;
-}
-
-/** Return a newly allocated string holding an address of <b>type</b>
- * (one of RESOLVED_TYPE_{IPV4|HOSTNAME}) that has not yet been mapped,
- * and that is very unlikely to be the address of any real host.
- *
- * May return NULL if we have run out of virtual addresses.
- */
-static char *
-addressmap_get_virtual_address(int type)
-{
- char buf[64];
- tor_assert(addressmap);
-
- if (type == RESOLVED_TYPE_HOSTNAME) {
- char rand[10];
- do {
- crypto_rand(rand, sizeof(rand));
- base32_encode(buf,sizeof(buf),rand,sizeof(rand));
- strlcat(buf, ".virtual", sizeof(buf));
- } while (strmap_get(addressmap, buf));
- return tor_strdup(buf);
- } else if (type == RESOLVED_TYPE_IPV4) {
- // This is an imperfect estimate of how many addresses are available, but
- // that's ok.
- struct in_addr in;
- uint32_t available = 1u << (32-virtual_addr_netmask_bits);
- while (available) {
- /* Don't hand out any .0 or .255 address. */
- while ((next_virtual_addr & 0xff) == 0 ||
- (next_virtual_addr & 0xff) == 0xff) {
- increment_virtual_addr();
- if (! --available) {
- log_warn(LD_CONFIG, "Ran out of virtual addresses!");
- return NULL;
- }
- }
- in.s_addr = htonl(next_virtual_addr);
- tor_inet_ntoa(&in, buf, sizeof(buf));
- if (!strmap_get(addressmap, buf)) {
- increment_virtual_addr();
- break;
- }
-
- increment_virtual_addr();
- --available;
- // log_info(LD_CONFIG, "%d addrs available", (int)available);
- if (! available) {
- log_warn(LD_CONFIG, "Ran out of virtual addresses!");
- return NULL;
- }
- }
- return tor_strdup(buf);
- } else {
- log_warn(LD_BUG, "Called with unsupported address type (%d)", type);
- return NULL;
- }
-}
-
-/** A controller has requested that we map some address of type
- * <b>type</b> to the address <b>new_address</b>. Choose an address
- * that is unlikely to be used, and map it, and return it in a newly
- * allocated string. If another address of the same type is already
- * mapped to <b>new_address</b>, try to return a copy of that address.
- *
- * The string in <b>new_address</b> may be freed or inserted into a map
- * as appropriate. May return NULL if are out of virtual addresses.
- **/
-const char *
-addressmap_register_virtual_address(int type, char *new_address)
-{
- char **addrp;
- virtaddress_entry_t *vent;
- int vent_needs_to_be_added = 0;
-
- tor_assert(new_address);
- tor_assert(addressmap);
- tor_assert(virtaddress_reversemap);
-
- vent = strmap_get(virtaddress_reversemap, new_address);
- if (!vent) {
- vent = tor_malloc_zero(sizeof(virtaddress_entry_t));
- vent_needs_to_be_added = 1;
- }
-
- addrp = (type == RESOLVED_TYPE_IPV4) ?
- &vent->ipv4_address : &vent->hostname_address;
- if (*addrp) {
- addressmap_entry_t *ent = strmap_get(addressmap, *addrp);
- if (ent && ent->new_address &&
- !strcasecmp(new_address, ent->new_address)) {
- tor_free(new_address);
- tor_assert(!vent_needs_to_be_added);
- return tor_strdup(*addrp);
- } else
- log_warn(LD_BUG,
- "Internal confusion: I thought that '%s' was mapped to by "
- "'%s', but '%s' really maps to '%s'. This is a harmless bug.",
- safe_str_client(new_address),
- safe_str_client(*addrp),
- safe_str_client(*addrp),
- ent?safe_str_client(ent->new_address):"(nothing)");
- }
-
- tor_free(*addrp);
- *addrp = addressmap_get_virtual_address(type);
- if (!*addrp) {
- tor_free(vent);
- tor_free(new_address);
- return NULL;
- }
- log_info(LD_APP, "Registering map from %s to %s", *addrp, new_address);
- if (vent_needs_to_be_added)
- strmap_set(virtaddress_reversemap, new_address, vent);
- addressmap_register(*addrp, new_address, 2, ADDRMAPSRC_AUTOMAP, 0, 0);
-
-#if 0
- {
- /* Try to catch possible bugs */
- addressmap_entry_t *ent;
- ent = strmap_get(addressmap, *addrp);
- tor_assert(ent);
- tor_assert(!strcasecmp(ent->new_address,new_address));
- vent = strmap_get(virtaddress_reversemap, new_address);
- tor_assert(vent);
- tor_assert(!strcasecmp(*addrp,
- (type == RESOLVED_TYPE_IPV4) ?
- vent->ipv4_address : vent->hostname_address));
- log_info(LD_APP, "Map from %s to %s okay.",
- safe_str_client(*addrp),
- safe_str_client(new_address));
- }
-#endif
-
- return *addrp;
-}
-
-/** Return 1 if <b>address</b> has funny characters in it like colons. Return
- * 0 if it's fine, or if we're configured to allow it anyway. <b>client</b>
- * should be true if we're using this address as a client; false if we're
- * using it as a server.
- */
-int
-address_is_invalid_destination(const char *address, int client)
-{
- if (client) {
- if (get_options()->AllowNonRFC953Hostnames)
- return 0;
- } else {
- if (get_options()->ServerDNSAllowNonRFC953Hostnames)
- return 0;
- }
-
- while (*address) {
- if (TOR_ISALNUM(*address) ||
- *address == '-' ||
- *address == '.' ||
- *address == '_') /* Underscore is not allowed, but Windows does it
- * sometimes, just to thumb its nose at the IETF. */
- ++address;
- else
- return 1;
- }
- return 0;
-}
-
-/** Iterate over all address mappings which have expiry times between
- * min_expires and max_expires, inclusive. If sl is provided, add an
- * "old-addr new-addr expiry" string to sl for each mapping, omitting
- * the expiry time if want_expiry is false. If sl is NULL, remove the
- * mappings.
- */
-void
-addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
- time_t max_expires, int want_expiry)
-{
- strmap_iter_t *iter;
- const char *key;
- void *_val;
- addressmap_entry_t *val;
-
- if (!addressmap)
- addressmap_init();
-
- for (iter = strmap_iter_init(addressmap); !strmap_iter_done(iter); ) {
- strmap_iter_get(iter, &key, &_val);
- val = _val;
- if (val->expires >= min_expires && val->expires <= max_expires) {
- if (!sl) {
- iter = strmap_iter_next_rmv(addressmap,iter);
- addressmap_ent_remove(key, val);
- continue;
- } else if (val->new_address) {
- const char *src_wc = val->src_wildcard ? "*." : "";
- const char *dst_wc = val->dst_wildcard ? "*." : "";
- if (want_expiry) {
- if (val->expires < 3 || val->expires == TIME_MAX)
- smartlist_add_asprintf(sl, "%s%s %s%s NEVER",
- src_wc, key, dst_wc, val->new_address);
- else {
- char time[ISO_TIME_LEN+1];
- format_iso_time(time, val->expires);
- smartlist_add_asprintf(sl, "%s%s %s%s \"%s\"",
- src_wc, key, dst_wc, val->new_address,
- time);
- }
- } else {
- smartlist_add_asprintf(sl, "%s%s %s%s",
- src_wc, key, dst_wc, val->new_address);
- }
- }
- }
- iter = strmap_iter_next(addressmap,iter);
- }
-}
-
/** Check if <b>conn</b> is using a dangerous port. Then warn and/or
* reject depending on our config options. */
static int
consider_plaintext_ports(entry_connection_t *conn, uint16_t port)
{
const or_options_t *options = get_options();
- int reject = smartlist_string_num_isin(options->RejectPlaintextPorts, port);
+ int reject = smartlist_contains_int_as_string(
+ options->RejectPlaintextPorts, port);
- if (smartlist_string_num_isin(options->WarnPlaintextPorts, port)) {
+ if (smartlist_contains_int_as_string(options->WarnPlaintextPorts, port)) {
log_warn(LD_APP, "Application request to port %d: this port is "
"commonly used for unencrypted protocols. Please make sure "
"you don't send anything you would mind the rest of the "
@@ -1798,7 +917,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
socks_request_t *socks = conn->socks_request;
hostname_type_t addresstype;
const or_options_t *options = get_options();
- struct in_addr addr_tmp;
+ tor_addr_t addr_tmp;
/* We set this to true if this is an address we should automatically
* remap to a local address in VirtualAddrNetwork */
int automap = 0;
@@ -1828,17 +947,20 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
conn->original_dest_address = tor_strdup(conn->socks_request->address);
if (socks->command == SOCKS_COMMAND_RESOLVE &&
- !tor_inet_aton(socks->address, &addr_tmp) &&
- options->AutomapHostsOnResolve && options->AutomapHostsSuffixes) {
- SMARTLIST_FOREACH(options->AutomapHostsSuffixes, const char *, cp,
- if (!strcasecmpend(socks->address, cp)) {
- automap = 1;
- break;
- });
+ tor_addr_parse(&addr_tmp, socks->address)<0 &&
+ options->AutomapHostsOnResolve) {
+ automap = addressmap_address_should_automap(socks->address, options);
if (automap) {
const char *new_addr;
+ int addr_type = RESOLVED_TYPE_IPV4;
+ if (conn->socks_request->socks_version != 4) {
+ if (!conn->ipv4_traffic_ok ||
+ (conn->ipv6_traffic_ok && conn->prefer_ipv6_traffic) ||
+ conn->prefer_ipv6_virtaddr)
+ addr_type = RESOLVED_TYPE_IPV6;
+ }
new_addr = addressmap_register_virtual_address(
- RESOLVED_TYPE_IPV4, tor_strdup(socks->address));
+ addr_type, tor_strdup(socks->address));
if (! new_addr) {
log_warn(LD_APP, "Unable to automap address %s",
escaped_safe_str(socks->address));
@@ -1853,8 +975,14 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
if (socks->command == SOCKS_COMMAND_RESOLVE_PTR) {
+ unsigned rewrite_flags = 0;
+ if (conn->use_cached_ipv4_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
+ if (conn->use_cached_ipv6_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
+
if (addressmap_rewrite_reverse(socks->address, sizeof(socks->address),
- &map_expires)) {
+ rewrite_flags, &map_expires)) {
char *result = tor_strdup(socks->address);
/* remember _what_ is supposed to have been resolved. */
tor_snprintf(socks->address, sizeof(socks->address), "REVERSE[%s]",
@@ -1885,8 +1013,13 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
} else if (!automap) {
/* For address map controls, remap the address. */
+ unsigned rewrite_flags = 0;
+ if (conn->use_cached_ipv4_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV4_DNS;
+ if (conn->use_cached_ipv6_answers)
+ rewrite_flags |= AMR_FLAG_USE_IPV6_DNS;
if (addressmap_rewrite(socks->address, sizeof(socks->address),
- &map_expires, &exit_source)) {
+ rewrite_flags, &map_expires, &exit_source)) {
control_event_stream_status(conn, STREAM_EVENT_REMAP,
REMAP_STREAM_SOURCE_CACHE);
}
@@ -1923,7 +1056,7 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
/* If StrictNodes is not set, then .exit overrides ExcludeNodes. */
routerset_t *excludeset = options->StrictNodes ?
- options->_ExcludeExitNodesUnion : options->ExcludeExitNodes;
+ options->ExcludeExitNodesUnion_ : options->ExcludeExitNodes;
const node_t *node;
if (exit_source == ADDRMAPSRC_AUTOMAP && !options->AllowDotExit) {
@@ -2024,17 +1157,13 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
if (socks->command == SOCKS_COMMAND_RESOLVE) {
- uint32_t answer;
- struct in_addr in;
+ tor_addr_t answer;
/* Reply to resolves immediately if we can. */
- if (tor_inet_aton(socks->address, &in)) { /* see if it's an IP already */
- /* leave it in network order */
- answer = in.s_addr;
+ if (tor_addr_parse(&answer, socks->address) >= 0) {/* is it an IP? */
/* remember _what_ is supposed to have been resolved. */
strlcpy(socks->address, orig_address, sizeof(socks->address));
- connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4,
- (uint8_t*)&answer,
- -1,map_expires);
+ connection_ap_handshake_socks_resolved_addr(conn, &answer, -1,
+ map_expires);
connection_mark_unattached_ap(conn,
END_STREAM_REASON_DONE |
END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
@@ -2087,6 +1216,37 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
}
}
+ {
+ tor_addr_t addr;
+ /* XXX Duplicate call to tor_addr_parse. */
+ if (tor_addr_parse(&addr, socks->address) >= 0) {
+ sa_family_t family = tor_addr_family(&addr);
+ if ((family == AF_INET && ! conn->ipv4_traffic_ok) ||
+ (family == AF_INET6 && ! conn->ipv4_traffic_ok)) {
+ log_warn(LD_NET, "Rejecting SOCKS request for an IP address "
+ "family that this listener does not support.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
+ return -1;
+ } else if (family == AF_INET6 && socks->socks_version == 4) {
+ log_warn(LD_NET, "Rejecting SOCKS4 request for an IPv6 address.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
+ return -1;
+ } else if (socks->socks_version == 4 && !conn->ipv4_traffic_ok) {
+ log_warn(LD_NET, "Rejecting SOCKS4 request on a listener with "
+ "no IPv4 traffic supported.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_ENTRYPOLICY);
+ return -1;
+ } else if (family == AF_INET6) {
+ conn->ipv4_traffic_ok = 0;
+ } else if (family == AF_INET) {
+ conn->ipv6_traffic_ok = 0;
+ }
+ }
+ }
+
+ if (socks->socks_version == 4)
+ conn->ipv6_traffic_ok = 0;
+
if (!conn->use_begindir && !conn->chosen_exit_name && !circ) {
/* see if we can find a suitable enclave exit */
const node_t *r =
@@ -2231,35 +1391,48 @@ get_pf_socket(void)
}
#endif
-/** Fetch the original destination address and port from a
- * system-specific interface and put them into a
- * socks_request_t as if they came from a socks request.
- *
- * Return -1 if an error prevents fetching the destination,
- * else return 0.
- */
+#if defined(TRANS_NETFILTER) || defined(TRANS_PF)
+/** Try fill in the address of <b>req</b> from the socket configured
+ * with <b>conn</b>. */
static int
-connection_ap_get_original_destination(entry_connection_t *conn,
- socks_request_t *req)
+destination_from_socket(entry_connection_t *conn, socks_request_t *req)
{
-#ifdef TRANS_NETFILTER
- /* Linux 2.4+ */
struct sockaddr_storage orig_dst;
socklen_t orig_dst_len = sizeof(orig_dst);
tor_addr_t addr;
+#ifdef TRANS_NETFILTER
if (getsockopt(ENTRY_TO_CONN(conn)->s, SOL_IP, SO_ORIGINAL_DST,
(struct sockaddr*)&orig_dst, &orig_dst_len) < 0) {
int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
log_warn(LD_NET, "getsockopt() failed: %s", tor_socket_strerror(e));
return -1;
}
+#elif defined(TRANS_PF)
+ if (getsockname(ENTRY_TO_CONN(conn)->s, (struct sockaddr*)&orig_dst,
+ &orig_dst_len) < 0) {
+ int e = tor_socket_errno(ENTRY_TO_CONN(conn)->s);
+ log_warn(LD_NET, "getsockname() failed: %s", tor_socket_strerror(e));
+ return -1;
+ }
+#else
+ (void)conn;
+ (void)req;
+ log_warn(LD_BUG, "Unable to determine destination from socket.");
+ return -1;
+#endif
tor_addr_from_sockaddr(&addr, (struct sockaddr*)&orig_dst, &req->port);
- tor_addr_to_str(req->address, &addr, sizeof(req->address), 0);
+ tor_addr_to_str(req->address, &addr, sizeof(req->address), 1);
return 0;
-#elif defined(TRANS_PF)
+}
+#endif
+
+#ifdef TRANS_PF
+static int
+destination_from_pf(entry_connection_t *conn, socks_request_t *req)
+{
struct sockaddr_storage proxy_addr;
socklen_t proxy_addr_len = sizeof(proxy_addr);
struct sockaddr *proxy_sa = (struct sockaddr*) &proxy_addr;
@@ -2275,6 +1448,21 @@ connection_ap_get_original_destination(entry_connection_t *conn,
return -1;
}
+#ifdef __FreeBSD__
+ if (get_options()->TransProxyType_parsed == TPT_IPFW) {
+ /* ipfw(8) is used and in this case getsockname returned the original
+ destination */
+ if (tor_addr_from_sockaddr(&addr, proxy_sa, &req->port) < 0) {
+ tor_fragile_assert();
+ return -1;
+ }
+
+ tor_addr_to_str(req->address, &addr, sizeof(req->address), 0);
+
+ return 0;
+ }
+#endif
+
memset(&pnl, 0, sizeof(pnl));
pnl.proto = IPPROTO_TCP;
pnl.direction = PF_OUT;
@@ -2317,10 +1505,40 @@ connection_ap_get_original_destination(entry_connection_t *conn,
return -1;
}
- tor_addr_to_str(req->address, &addr, sizeof(req->address), 0);
+ tor_addr_to_str(req->address, &addr, sizeof(req->address), 1);
req->port = ntohs(pnl.rdport);
return 0;
+}
+#endif
+
+/** Fetch the original destination address and port from a
+ * system-specific interface and put them into a
+ * socks_request_t as if they came from a socks request.
+ *
+ * Return -1 if an error prevents fetching the destination,
+ * else return 0.
+ */
+static int
+connection_ap_get_original_destination(entry_connection_t *conn,
+ socks_request_t *req)
+{
+#ifdef TRANS_NETFILTER
+ return destination_from_socket(conn, req);
+#elif defined(TRANS_PF)
+ const or_options_t *options = get_options();
+
+ if (options->TransProxyType_parsed == TPT_PF_DIVERT)
+ return destination_from_socket(conn, req);
+
+ if (options->TransProxyType_parsed == TPT_DEFAULT)
+ return destination_from_pf(conn, req);
+
+ (void)conn;
+ (void)req;
+ log_warn(LD_BUG, "Proxy destination determination mechanism %s unknown.",
+ options->TransProxyType);
+ return -1;
#else
(void)conn;
(void)req;
@@ -2517,7 +1735,7 @@ connection_ap_process_natd(entry_connection_t *conn)
/** Iterate over the two bytes of stream_id until we get one that is not
* already in use; return it. Return 0 if can't get a unique stream_id.
*/
-static streamid_t
+streamid_t
get_unique_stream_id_by_circ(origin_circuit_t *circ)
{
edge_connection_t *tmpconn;
@@ -2555,6 +1773,66 @@ connection_ap_supports_optimistic_data(const entry_connection_t *conn)
return conn->may_use_optimistic_data;
}
+/** Return a bitmask of BEGIN_FLAG_* flags that we should transmit in the
+ * RELAY_BEGIN cell for <b>ap_conn</b>. */
+static uint32_t
+connection_ap_get_begincell_flags(entry_connection_t *ap_conn)
+{
+ edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(ap_conn);
+ const node_t *exitnode = NULL;
+ const crypt_path_t *cpath_layer = edge_conn->cpath_layer;
+ uint32_t flags = 0;
+
+ /* No flags for begindir */
+ if (ap_conn->use_begindir)
+ return 0;
+
+ /* No flags for hidden services. */
+ if (edge_conn->on_circuit->purpose != CIRCUIT_PURPOSE_C_GENERAL)
+ return 0;
+
+ /* If only IPv4 is supported, no flags */
+ if (ap_conn->ipv4_traffic_ok && !ap_conn->ipv6_traffic_ok)
+ return 0;
+
+ if (! cpath_layer ||
+ ! cpath_layer->extend_info)
+ return 0;
+
+ if (!ap_conn->ipv4_traffic_ok)
+ flags |= BEGIN_FLAG_IPV4_NOT_OK;
+
+ exitnode = node_get_by_id(cpath_layer->extend_info->identity_digest);
+
+ if (ap_conn->ipv6_traffic_ok && exitnode) {
+ tor_addr_t a;
+ tor_addr_make_null(&a, AF_INET6);
+ if (compare_tor_addr_to_node_policy(&a, ap_conn->socks_request->port,
+ exitnode)
+ != ADDR_POLICY_REJECTED) {
+ /* Only say "IPv6 OK" if the exit node supports IPv6. Otherwise there's
+ * no point. */
+ flags |= BEGIN_FLAG_IPV6_OK;
+ }
+ }
+
+ if (flags == BEGIN_FLAG_IPV6_OK) {
+ /* When IPv4 and IPv6 are both allowed, consider whether to say we
+ * prefer IPv6. Otherwise there's no point in declaring a preference */
+ if (ap_conn->prefer_ipv6_traffic)
+ flags |= BEGIN_FLAG_IPV6_PREFERRED;
+ }
+
+ if (flags == BEGIN_FLAG_IPV4_NOT_OK) {
+ log_warn(LD_EDGE, "I'm about to ask a node for a connection that I "
+ "am telling it to fulfil with neither IPv4 nor IPv6. That's "
+ "not going to work. Did you perhaps ask for an IPv6 address "
+ "on an IPv4Only port, or vice versa?");
+ }
+
+ return flags;
+}
+
/** Write a relay begin cell, using destaddr and destport from ap_conn's
* socks_request field, and send it down circ.
*
@@ -2584,17 +1862,22 @@ connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL);
/* Mark this circuit "unusable for new streams". */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->_base.timestamp_dirty);
- circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness;
+ mark_circuit_unusable_for_new_conns(circ);
return -1;
}
+ /* Set up begin cell flags. */
+ edge_conn->begincell_flags = connection_ap_get_begincell_flags(ap_conn);
+
tor_snprintf(payload,RELAY_PAYLOAD_SIZE, "%s:%d",
- (circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL) ?
+ (circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL) ?
ap_conn->socks_request->address : "",
ap_conn->socks_request->port);
payload_len = (int)strlen(payload)+1;
+ if (payload_len <= RELAY_PAYLOAD_SIZE - 4 && edge_conn->begincell_flags) {
+ set_uint32(payload + payload_len, htonl(edge_conn->begincell_flags));
+ payload_len += 4;
+ }
log_info(LD_APP,
"Sending relay cell %d to begin stream %d.",
@@ -2617,8 +1900,9 @@ connection_ap_handshake_send_begin(entry_connection_t *ap_conn)
edge_conn->package_window = STREAMWINDOW_START;
edge_conn->deliver_window = STREAMWINDOW_START;
base_conn->state = AP_CONN_STATE_CONNECT_WAIT;
- log_info(LD_APP,"Address/port sent, ap socket %d, n_circ_id %d",
- base_conn->s, circ->_base.n_circ_id);
+ log_info(LD_APP,"Address/port sent, ap socket "TOR_SOCKET_T_FORMAT
+ ", n_circ_id %u",
+ base_conn->s, (unsigned)circ->base_.n_circ_id);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_CONNECT, 0);
/* If there's queued-up data, send it now */
@@ -2657,7 +1941,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
tor_assert(base_conn->type == CONN_TYPE_AP);
tor_assert(base_conn->state == AP_CONN_STATE_CIRCUIT_WAIT);
tor_assert(ap_conn->socks_request);
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_GENERAL);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_GENERAL);
command = ap_conn->socks_request->command;
tor_assert(SOCKS_COMMAND_IS_RESOLVE(command));
@@ -2669,9 +1953,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
connection_mark_unattached_ap(ap_conn, END_STREAM_REASON_INTERNAL);
/* Mark this circuit "unusable for new streams". */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->_base.timestamp_dirty);
- circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness;
+ mark_circuit_unusable_for_new_conns(circ);
return -1;
}
@@ -2686,7 +1968,7 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
/* We're doing a reverse lookup. The input could be an IP address, or
* could be an .in-addr.arpa or .ip6.arpa address */
- r = tor_addr_parse_PTR_name(&addr, a, AF_INET, 1);
+ r = tor_addr_parse_PTR_name(&addr, a, AF_UNSPEC, 1);
if (r <= 0) {
log_warn(LD_APP, "Rejecting ill-formed reverse lookup of %s",
safe_str_client(a));
@@ -2715,12 +1997,14 @@ connection_ap_handshake_send_resolve(entry_connection_t *ap_conn)
string_addr, payload_len) < 0)
return -1; /* circuit is closed, don't continue */
- tor_free(base_conn->address); /* Maybe already set by dnsserv. */
- base_conn->address = tor_strdup("(Tor_internal)");
+ if (!base_conn->address) {
+ /* This might be unnecessary. XXXX */
+ base_conn->address = tor_dup_addr(&base_conn->addr);
+ }
base_conn->state = AP_CONN_STATE_RESOLVE_WAIT;
- log_info(LD_APP,"Address sent for resolve, ap socket %d, n_circ_id %d",
- base_conn->s, circ->_base.n_circ_id);
- control_event_stream_status(ap_conn, STREAM_EVENT_NEW, 0);
+ log_info(LD_APP,"Address sent for resolve, ap socket "TOR_SOCKET_T_FORMAT
+ ", n_circ_id %u",
+ base_conn->s, (unsigned)circ->base_.n_circ_id);
control_event_stream_status(ap_conn, STREAM_EVENT_SENT_RESOLVE, 0);
return 0;
}
@@ -2812,25 +2096,49 @@ tell_controller_about_resolved_result(entry_connection_t *conn,
int ttl,
time_t expires)
{
-
- if (ttl >= 0 && (answer_type == RESOLVED_TYPE_IPV4 ||
- answer_type == RESOLVED_TYPE_HOSTNAME)) {
- return; /* we already told the controller. */
- } else if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
+ expires = time(NULL) + ttl;
+ if (answer_type == RESOLVED_TYPE_IPV4 && answer_len >= 4) {
char *cp = tor_dup_ip(ntohl(get_uint32(answer)));
control_event_address_mapped(conn->socks_request->address,
- cp, expires, NULL);
+ cp, expires, NULL, 0);
tor_free(cp);
} else if (answer_type == RESOLVED_TYPE_HOSTNAME && answer_len < 256) {
char *cp = tor_strndup(answer, answer_len);
control_event_address_mapped(conn->socks_request->address,
- cp, expires, NULL);
+ cp, expires, NULL, 0);
tor_free(cp);
} else {
control_event_address_mapped(conn->socks_request->address,
- "<error>",
- time(NULL)+ttl,
- "error=yes");
+ "<error>", time(NULL)+ttl,
+ "error=yes", 0);
+ }
+}
+
+/**
+ * As connection_ap_handshake_socks_resolved, but take a tor_addr_t to send
+ * as the answer.
+ */
+void
+connection_ap_handshake_socks_resolved_addr(entry_connection_t *conn,
+ const tor_addr_t *answer,
+ int ttl,
+ time_t expires)
+{
+ if (tor_addr_family(answer) == AF_INET) {
+ uint32_t a = tor_addr_to_ipv4n(answer); /* network order */
+ connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV4,4,
+ (uint8_t*)&a,
+ ttl, expires);
+ } else if (tor_addr_family(answer) == AF_INET6) {
+ const uint8_t *a = tor_addr_to_in6_addr8(answer);
+ connection_ap_handshake_socks_resolved(conn,RESOLVED_TYPE_IPV6,16,
+ a,
+ ttl, expires);
+ } else {
+ log_warn(LD_BUG, "Got called with address of unexpected family %d",
+ tor_addr_family(answer));
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_ERROR,0,NULL,-1,-1);
}
}
@@ -2843,26 +2151,38 @@ tell_controller_about_resolved_result(entry_connection_t *conn,
**/
/* XXXX the use of the ttl and expires fields is nutty. Let's make this
* interface and those that use it less ugly. */
-void
-connection_ap_handshake_socks_resolved(entry_connection_t *conn,
+MOCK_IMPL(void,
+connection_ap_handshake_socks_resolved,(entry_connection_t *conn,
int answer_type,
size_t answer_len,
const uint8_t *answer,
int ttl,
- time_t expires)
+ time_t expires))
{
char buf[384];
size_t replylen;
if (ttl >= 0) {
if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
- uint32_t a = ntohl(get_uint32(answer));
- if (a)
- client_dns_set_addressmap(conn->socks_request->address, a,
+ tor_addr_t a;
+ tor_addr_from_ipv4n(&a, get_uint32(answer));
+ if (! tor_addr_is_null(&a)) {
+ client_dns_set_addressmap(conn,
+ conn->socks_request->address, &a,
+ conn->chosen_exit_name, ttl);
+ }
+ } else if (answer_type == RESOLVED_TYPE_IPV6 && answer_len == 16) {
+ tor_addr_t a;
+ tor_addr_from_ipv6_bytes(&a, (char*)answer);
+ if (! tor_addr_is_null(&a)) {
+ client_dns_set_addressmap(conn,
+ conn->socks_request->address, &a,
conn->chosen_exit_name, ttl);
+ }
} else if (answer_type == RESOLVED_TYPE_HOSTNAME && answer_len < 256) {
char *cp = tor_strndup((char*)answer, answer_len);
- client_dns_set_reverse_addressmap(conn->socks_request->address,
+ client_dns_set_reverse_addressmap(conn,
+ conn->socks_request->address,
cp,
conn->chosen_exit_name, ttl);
tor_free(cp);
@@ -2876,8 +2196,9 @@ connection_ap_handshake_socks_resolved(entry_connection_t *conn,
conn->socks_request->has_finished = 1;
return;
} else {
- /* This must be a request from the controller. We already sent
- * a mapaddress if there's a ttl. */
+ /* This must be a request from the controller. Since answers to those
+ * requests are not cached, they do not generate an ADDRMAP event on
+ * their own. */
tell_controller_about_resolved_result(conn, answer_type, answer_len,
(char*)answer, ttl, expires);
conn->socks_request->has_finished = 1;
@@ -2958,9 +2279,44 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
tor_assert(conn->socks_request); /* make sure it's an AP stream */
- control_event_stream_status(conn,
- status==SOCKS5_SUCCEEDED ? STREAM_EVENT_SUCCEEDED : STREAM_EVENT_FAILED,
- endreason);
+ if (!SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command)) {
+ control_event_stream_status(conn, status==SOCKS5_SUCCEEDED ?
+ STREAM_EVENT_SUCCEEDED : STREAM_EVENT_FAILED,
+ endreason);
+ }
+
+ /* Flag this stream's circuit as having completed a stream successfully
+ * (for path bias) */
+ if (status == SOCKS5_SUCCEEDED ||
+ endreason == END_STREAM_REASON_RESOLVEFAILED ||
+ endreason == END_STREAM_REASON_CONNECTREFUSED ||
+ endreason == END_STREAM_REASON_CONNRESET ||
+ endreason == END_STREAM_REASON_NOROUTE ||
+ endreason == END_STREAM_REASON_RESOURCELIMIT) {
+ if (!conn->edge_.on_circuit ||
+ !CIRCUIT_IS_ORIGIN(conn->edge_.on_circuit)) {
+ if (endreason != END_STREAM_REASON_RESOLVEFAILED) {
+ log_info(LD_BUG,
+ "No origin circuit for successful SOCKS stream "U64_FORMAT
+ ". Reason: %d",
+ U64_PRINTF_ARG(ENTRY_TO_CONN(conn)->global_identifier),
+ endreason);
+ }
+ /*
+ * Else DNS remaps and failed hidden service lookups can send us
+ * here with END_STREAM_REASON_RESOLVEFAILED; ignore it
+ *
+ * Perhaps we could make the test more precise; we can tell hidden
+ * services by conn->edge_.renddata != NULL; anything analogous for
+ * the DNS remap case?
+ */
+ } else {
+ // XXX: Hrmm. It looks like optimistic data can't go through this
+ // codepath, but someone should probably test it and make sure.
+ // We don't want to mark optimistically opened streams as successful.
+ pathbias_mark_use_success(TO_ORIGIN_CIRCUIT(conn->edge_.on_circuit));
+ }
+ }
if (conn->socks_request->has_finished) {
log_warn(LD_BUG, "(Harmless.) duplicate calls to "
@@ -2978,13 +2334,24 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
/* leave version, destport, destip zero */
connection_write_to_buf(buf, SOCKS4_NETWORK_LEN, ENTRY_TO_CONN(conn));
} else if (conn->socks_request->socks_version == 5) {
- buf[0] = 5; /* version 5 */
- buf[1] = (char)status;
- buf[2] = 0;
- buf[3] = 1; /* ipv4 addr */
- memset(buf+4,0,6); /* Set external addr/port to 0.
- The spec doesn't seem to say what to do here. -RD */
- connection_write_to_buf(buf,10,ENTRY_TO_CONN(conn));
+ size_t buf_len;
+ memset(buf,0,sizeof(buf));
+ if (tor_addr_family(&conn->edge_.base_.addr) == AF_INET) {
+ buf[0] = 5; /* version 5 */
+ buf[1] = (char)status;
+ buf[2] = 0;
+ buf[3] = 1; /* ipv4 addr */
+ /* 4 bytes for the header, 2 bytes for the port, 4 for the address. */
+ buf_len = 10;
+ } else { /* AF_INET6. */
+ buf[0] = 5; /* version 5 */
+ buf[1] = (char)status;
+ buf[2] = 0;
+ buf[3] = 4; /* ipv6 addr */
+ /* 4 bytes for the header, 2 bytes for the port, 16 for the address. */
+ buf_len = 22;
+ }
+ connection_write_to_buf(buf,buf_len,ENTRY_TO_CONN(conn));
}
/* If socks_version isn't 4 or 5, don't send anything.
* This can happen in the case of AP bridges. */
@@ -2992,6 +2359,70 @@ connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
return;
}
+/** Read a RELAY_BEGIN or RELAY_BEGINDIR cell from <b>cell</b>, decode it, and
+ * place the result in <b>bcell</b>. On success return 0; on failure return
+ * <0 and set *<b>end_reason_out</b> to the end reason we should send back to
+ * the client.
+ *
+ * Return -1 in the case where want to send a RELAY_END cell, and < -1 when
+ * we don't.
+ **/
+STATIC int
+begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
+ uint8_t *end_reason_out)
+{
+ relay_header_t rh;
+ const uint8_t *body, *nul;
+
+ memset(bcell, 0, sizeof(*bcell));
+ *end_reason_out = END_STREAM_REASON_MISC;
+
+ relay_header_unpack(&rh, cell->payload);
+ if (rh.length > RELAY_PAYLOAD_SIZE) {
+ return -2; /*XXXX why not TORPROTOCOL? */
+ }
+
+ bcell->stream_id = rh.stream_id;
+
+ if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
+ bcell->is_begindir = 1;
+ return 0;
+ } else if (rh.command != RELAY_COMMAND_BEGIN) {
+ log_warn(LD_BUG, "Got an unexpected command %d", (int)rh.command);
+ *end_reason_out = END_STREAM_REASON_INTERNAL;
+ return -1;
+ }
+
+ body = cell->payload + RELAY_HEADER_SIZE;
+ nul = memchr(body, 0, rh.length);
+ if (! nul) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Relay begin cell has no \\0. Closing.");
+ *end_reason_out = END_STREAM_REASON_TORPROTOCOL;
+ return -1;
+ }
+
+ if (tor_addr_port_split(LOG_PROTOCOL_WARN,
+ (char*)(body),
+ &bcell->address,&bcell->port)<0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Unable to parse addr:port in relay begin cell. Closing.");
+ *end_reason_out = END_STREAM_REASON_TORPROTOCOL;
+ return -1;
+ }
+ if (bcell->port == 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Missing port in relay begin cell. Closing.");
+ tor_free(bcell->address);
+ *end_reason_out = END_STREAM_REASON_TORPROTOCOL;
+ return -1;
+ }
+ if (body + rh.length >= nul + 4)
+ bcell->flags = ntohl(get_uint32(nul+1));
+
+ return 0;
+}
+
/** A relay 'begin' or 'begin_dir' cell has arrived, and either we are
* an exit hop for the circuit, or we are the origin and it is a
* rendezvous begin.
@@ -3015,10 +2446,13 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
{
edge_connection_t *n_stream;
relay_header_t rh;
- char *address=NULL;
- uint16_t port;
+ char *address = NULL;
+ uint16_t port = 0;
or_circuit_t *or_circ = NULL;
const or_options_t *options = get_options();
+ begin_cell_t bcell;
+ int r;
+ uint8_t end_reason=0;
assert_circuit_ok(circ);
if (!CIRCUIT_IS_ORIGIN(circ))
@@ -3042,52 +2476,43 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
return 0;
}
- if (rh.command == RELAY_COMMAND_BEGIN) {
- if (!memchr(cell->payload+RELAY_HEADER_SIZE, 0, rh.length)) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Relay begin cell has no \\0. Closing.");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- END_STREAM_REASON_TORPROTOCOL, NULL);
- return 0;
- }
- if (tor_addr_port_split(LOG_PROTOCOL_WARN,
- (char*)(cell->payload+RELAY_HEADER_SIZE),
- &address,&port)<0) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Unable to parse addr:port in relay begin cell. Closing.");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- END_STREAM_REASON_TORPROTOCOL, NULL);
- return 0;
- }
- if (port==0) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Missing port in relay begin cell. Closing.");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- END_STREAM_REASON_TORPROTOCOL, NULL);
- tor_free(address);
- return 0;
- }
- if (or_circ && or_circ->p_conn && !options->AllowSingleHopExits &&
- (or_circ->is_first_hop ||
- (!connection_or_digest_is_known_relay(
- or_circ->p_conn->identity_digest) &&
+ r = begin_cell_parse(cell, &bcell, &end_reason);
+ if (r < -1) {
+ return -1;
+ } else if (r == -1) {
+ tor_free(bcell.address);
+ relay_send_end_cell_from_edge(rh.stream_id, circ, end_reason, NULL);
+ return 0;
+ }
+
+ if (! bcell.is_begindir) {
+ /* Steal reference */
+ address = bcell.address;
+ port = bcell.port;
+
+ if (or_circ && or_circ->p_chan) {
+ if (!options->AllowSingleHopExits &&
+ (or_circ->is_first_hop ||
+ (!connection_or_digest_is_known_relay(
+ or_circ->p_chan->identity_digest) &&
should_refuse_unknown_exits(options)))) {
- /* Don't let clients use us as a single-hop proxy, unless the user
- * has explicitly allowed that in the config. It attracts attackers
- * and users who'd be better off with, well, single-hop proxies.
- */
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Attempt by %s to open a stream %s. Closing.",
- safe_str(or_circ->p_conn->_base.address),
- or_circ->is_first_hop ? "on first hop of circuit" :
- "from unknown relay");
- relay_send_end_cell_from_edge(rh.stream_id, circ,
- or_circ->is_first_hop ?
- END_STREAM_REASON_TORPROTOCOL :
- END_STREAM_REASON_MISC,
- NULL);
- tor_free(address);
- return 0;
+ /* Don't let clients use us as a single-hop proxy, unless the user
+ * has explicitly allowed that in the config. It attracts attackers
+ * and users who'd be better off with, well, single-hop proxies.
+ */
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Attempt by %s to open a stream %s. Closing.",
+ safe_str(channel_get_canonical_remote_descr(or_circ->p_chan)),
+ or_circ->is_first_hop ? "on first hop of circuit" :
+ "from unknown relay");
+ relay_send_end_cell_from_edge(rh.stream_id, circ,
+ or_circ->is_first_hop ?
+ END_STREAM_REASON_TORPROTOCOL :
+ END_STREAM_REASON_MISC,
+ NULL);
+ tor_free(address);
+ return 0;
+ }
}
} else if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
if (!directory_permits_begindir_requests(options) ||
@@ -3098,10 +2523,10 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
}
/* Make sure to get the 'real' address of the previous hop: the
* caller might want to know whether his IP address has changed, and
- * we might already have corrected _base.addr[ess] for the relay's
+ * we might already have corrected base_.addr[ess] for the relay's
* canonical IP address. */
- if (or_circ && or_circ->p_conn)
- address = tor_dup_addr(&or_circ->p_conn->real_addr);
+ if (or_circ && or_circ->p_chan)
+ address = tor_strdup(channel_get_actual_remote_address(or_circ->p_chan));
else
address = tor_strdup("127.0.0.1");
port = 1; /* XXXX This value is never actually used anywhere, and there
@@ -3114,17 +2539,31 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
return 0;
}
+ if (! options->IPv6Exit) {
+ /* I don't care if you prefer IPv6; I can't give you any. */
+ bcell.flags &= ~BEGIN_FLAG_IPV6_PREFERRED;
+ /* If you don't want IPv4, I can't help. */
+ if (bcell.flags & BEGIN_FLAG_IPV4_NOT_OK) {
+ tor_free(address);
+ relay_send_end_cell_from_edge(rh.stream_id, circ,
+ END_STREAM_REASON_EXITPOLICY, NULL);
+ return 0;
+ }
+ }
+
log_debug(LD_EXIT,"Creating new exit connection.");
+ /* The 'AF_INET' here is temporary; we might need to change it later in
+ * connection_exit_connect(). */
n_stream = edge_connection_new(CONN_TYPE_EXIT, AF_INET);
/* Remember the tunneled request ID in the new edge connection, so that
* we can measure download times. */
- TO_CONN(n_stream)->dirreq_id = circ->dirreq_id;
-
- n_stream->_base.purpose = EXIT_PURPOSE_CONNECT;
+ n_stream->dirreq_id = circ->dirreq_id;
+ n_stream->base_.purpose = EXIT_PURPOSE_CONNECT;
+ n_stream->begincell_flags = bcell.flags;
n_stream->stream_id = rh.stream_id;
- n_stream->_base.port = port;
+ n_stream->base_.port = port;
/* leave n_stream->s at -1, because it's not yet valid */
n_stream->package_window = STREAMWINDOW_START;
n_stream->deliver_window = STREAMWINDOW_START;
@@ -3132,14 +2571,14 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
if (circ->purpose == CIRCUIT_PURPOSE_S_REND_JOINED) {
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
log_info(LD_REND,"begin is for rendezvous. configuring stream.");
- n_stream->_base.address = tor_strdup("(rendezvous)");
- n_stream->_base.state = EXIT_CONN_STATE_CONNECTING;
+ n_stream->base_.address = tor_strdup("(rendezvous)");
+ n_stream->base_.state = EXIT_CONN_STATE_CONNECTING;
n_stream->rend_data = rend_data_dup(origin_circ->rend_data);
tor_assert(connection_edge_is_rendezvous_stream(n_stream));
assert_circuit_ok(circ);
if (rend_service_set_connection_addr_port(n_stream, origin_circ) < 0) {
log_info(LD_REND,"Didn't find rendezvous service (port %d)",
- n_stream->_base.port);
+ n_stream->base_.port);
relay_send_end_cell_from_edge(rh.stream_id, circ,
END_STREAM_REASON_EXITPOLICY,
origin_circ->cpath->prev);
@@ -3158,12 +2597,16 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
assert_circuit_ok(circ);
connection_exit_connect(n_stream);
+
+ /* For path bias: This circuit was used successfully */
+ pathbias_mark_use_success(origin_circ);
+
tor_free(address);
return 0;
}
tor_strlower(address);
- n_stream->_base.address = address;
- n_stream->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ n_stream->base_.address = address;
+ n_stream->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
/* default to failed, change in dns_resolve if it turns out not to fail */
if (we_are_hibernating()) {
@@ -3176,9 +2619,12 @@ connection_exit_begin_conn(cell_t *cell, circuit_t *circ)
n_stream->on_circuit = circ;
if (rh.command == RELAY_COMMAND_BEGIN_DIR) {
+ tor_addr_t tmp_addr;
tor_assert(or_circ);
- if (or_circ->p_conn && !tor_addr_is_null(&or_circ->p_conn->real_addr))
- tor_addr_copy(&n_stream->_base.addr, &or_circ->p_conn->real_addr);
+ if (or_circ->p_chan &&
+ channel_get_addr_if_possible(or_circ->p_chan, &tmp_addr)) {
+ tor_addr_copy(&n_stream->base_.addr, &tmp_addr);
+ }
return connection_exit_connect_dir(n_stream);
}
@@ -3228,12 +2674,12 @@ connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ)
*/
dummy_conn = edge_connection_new(CONN_TYPE_EXIT, AF_INET);
dummy_conn->stream_id = rh.stream_id;
- dummy_conn->_base.address = tor_strndup(
+ dummy_conn->base_.address = tor_strndup(
(char*)cell->payload+RELAY_HEADER_SIZE,
rh.length);
- dummy_conn->_base.port = 0;
- dummy_conn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
- dummy_conn->_base.purpose = EXIT_PURPOSE_RESOLVE;
+ dummy_conn->base_.port = 0;
+ dummy_conn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ dummy_conn->base_.purpose = EXIT_PURPOSE_RESOLVE;
dummy_conn->on_circuit = TO_CIRCUIT(circ);
@@ -3243,7 +2689,7 @@ connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ)
/* Connection freed; don't touch it. */
return 0;
case 1: /* The result was cached; a resolved cell was sent. */
- if (!dummy_conn->_base.marked_for_close)
+ if (!dummy_conn->base_.marked_for_close)
connection_free(TO_CONN(dummy_conn));
return 0;
case 0: /* resolve added to pending list */
@@ -3268,8 +2714,11 @@ connection_exit_connect(edge_connection_t *edge_conn)
connection_t *conn = TO_CONN(edge_conn);
int socket_error = 0;
- if (!connection_edge_is_rendezvous_stream(edge_conn) &&
- router_compare_to_my_exit_policy(edge_conn)) {
+ if ( (!connection_edge_is_rendezvous_stream(edge_conn) &&
+ router_compare_to_my_exit_policy(&edge_conn->base_.addr,
+ edge_conn->base_.port)) ||
+ (tor_addr_family(&conn->addr) == AF_INET6 &&
+ ! get_options()->IPv6Exit)) {
log_info(LD_EXIT,"%s:%d failed exit policy. Closing.",
escaped_safe_str_client(conn->address), conn->port);
connection_edge_end(edge_conn, END_STREAM_REASON_EXITPOLICY);
@@ -3281,6 +2730,9 @@ connection_exit_connect(edge_connection_t *edge_conn)
addr = &conn->addr;
port = conn->port;
+ if (tor_addr_family(addr) == AF_INET6)
+ conn->socket_family = AF_INET6;
+
log_debug(LD_EXIT,"about to try connecting");
switch (connection_connect(conn, conn->address, addr, port, &socket_error)) {
case -1: {
@@ -3302,12 +2754,13 @@ connection_exit_connect(edge_connection_t *edge_conn)
conn->state = EXIT_CONN_STATE_OPEN;
if (connection_get_outbuf_len(conn)) {
- /* in case there are any queued data cells */
- log_warn(LD_BUG,"newly connected conn had data waiting!");
-// connection_start_writing(conn);
+ /* in case there are any queued data cells, from e.g. optimistic data */
+ IF_HAS_NO_BUFFEREVENT(conn)
+ connection_watch_events(conn, READ_EVENT|WRITE_EVENT);
+ } else {
+ IF_HAS_NO_BUFFEREVENT(conn)
+ connection_watch_events(conn, READ_EVENT);
}
- IF_HAS_NO_BUFFEREVENT(conn)
- connection_watch_events(conn, READ_EVENT);
/* also, deliver a 'connected' cell back through the circuit. */
if (connection_edge_is_rendezvous_stream(edge_conn)) {
@@ -3317,21 +2770,21 @@ connection_exit_connect(edge_connection_t *edge_conn)
RELAY_COMMAND_CONNECTED,
NULL, 0);
} else { /* normal stream */
- char connected_payload[20];
- int connected_payload_len;
- if (tor_addr_family(&conn->addr) == AF_INET) {
- set_uint32(connected_payload, tor_addr_to_ipv4n(&conn->addr));
- connected_payload_len = 4;
- } else {
- memcpy(connected_payload, tor_addr_to_in6_addr8(&conn->addr), 16);
- connected_payload_len = 16;
+ uint8_t connected_payload[MAX_CONNECTED_CELL_PAYLOAD_LEN];
+ int connected_payload_len =
+ connected_cell_format_payload(connected_payload, &conn->addr,
+ edge_conn->address_ttl);
+ if (connected_payload_len < 0) {
+ connection_edge_end(edge_conn, END_STREAM_REASON_INTERNAL);
+ circuit_detach_stream(circuit_get_by_edge_conn(edge_conn), edge_conn);
+ connection_free(conn);
+ return;
}
- set_uint32(connected_payload+connected_payload_len,
- htonl(dns_clip_ttl(edge_conn->address_ttl)));
- connected_payload_len += 4;
+
connection_edge_send_command(edge_conn,
RELAY_COMMAND_CONNECTED,
- connected_payload, connected_payload_len);
+ (char*)connected_payload,
+ connected_payload_len);
}
}
@@ -3350,20 +2803,20 @@ connection_exit_connect_dir(edge_connection_t *exitconn)
log_info(LD_EXIT, "Opening local connection for anonymized directory exit");
- exitconn->_base.state = EXIT_CONN_STATE_OPEN;
+ exitconn->base_.state = EXIT_CONN_STATE_OPEN;
- dirconn = dir_connection_new(tor_addr_family(&exitconn->_base.addr));
+ dirconn = dir_connection_new(tor_addr_family(&exitconn->base_.addr));
- tor_addr_copy(&dirconn->_base.addr, &exitconn->_base.addr);
- dirconn->_base.port = 0;
- dirconn->_base.address = tor_strdup(exitconn->_base.address);
- dirconn->_base.type = CONN_TYPE_DIR;
- dirconn->_base.purpose = DIR_PURPOSE_SERVER;
- dirconn->_base.state = DIR_CONN_STATE_SERVER_COMMAND_WAIT;
+ tor_addr_copy(&dirconn->base_.addr, &exitconn->base_.addr);
+ dirconn->base_.port = 0;
+ dirconn->base_.address = tor_strdup(exitconn->base_.address);
+ dirconn->base_.type = CONN_TYPE_DIR;
+ dirconn->base_.purpose = DIR_PURPOSE_SERVER;
+ dirconn->base_.state = DIR_CONN_STATE_SERVER_COMMAND_WAIT;
/* Note that the new dir conn belongs to the same tunneled request as
* the edge conn, so that we can measure download times. */
- TO_CONN(dirconn)->dirreq_id = TO_CONN(exitconn)->dirreq_id;
+ dirconn->dirreq_id = exitconn->dirreq_id;
connection_link_connections(TO_CONN(dirconn), TO_CONN(exitconn));
@@ -3446,11 +2899,15 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
}
if (conn->socks_request->command == SOCKS_COMMAND_CONNECT) {
- struct in_addr in;
tor_addr_t addr, *addrp = NULL;
addr_policy_result_t r;
- if (tor_inet_aton(conn->socks_request->address, &in)) {
- tor_addr_from_in(&addr, &in);
+ if (0 == tor_addr_parse(&addr, conn->socks_request->address)) {
+ addrp = &addr;
+ } else if (!conn->ipv4_traffic_ok && conn->ipv6_traffic_ok) {
+ tor_addr_make_null(&addr, AF_INET6);
+ addrp = &addr;
+ } else if (conn->ipv4_traffic_ok && !conn->ipv6_traffic_ok) {
+ tor_addr_make_null(&addr, AF_INET);
addrp = &addr;
}
r = compare_tor_addr_to_node_policy(addrp, conn->socks_request->port,exit);
@@ -3465,7 +2922,7 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
if (!conn->chosen_exit_name && node_exit_policy_rejects_all(exit))
return 0;
}
- if (routerset_contains_node(options->_ExcludeExitNodesUnion, exit)) {
+ if (routerset_contains_node(options->ExcludeExitNodesUnion_, exit)) {
/* Not a suitable exit. Refuse it. */
return 0;
}
@@ -3476,6 +2933,9 @@ connection_ap_can_use_exit(const entry_connection_t *conn, const node_t *exit)
/** If address is of the form "y.onion" with a well-formed handle y:
* Put a NUL after y, lower-case it, and return ONION_HOSTNAME.
*
+ * If address is of the form "x.y.onion" with a well-formed handle x:
+ * Drop "x.", put a NUL after y, lower-case it, and return ONION_HOSTNAME.
+ *
* If address is of the form "y.onion" with a badly-formed handle y:
* Return BAD_HOSTNAME and log a message.
*
@@ -3489,6 +2949,7 @@ hostname_type_t
parse_extended_hostname(char *address)
{
char *s;
+ char *q;
char query[REND_SERVICE_ID_LEN_BASE32+1];
s = strrchr(address,'.');
@@ -3503,9 +2964,18 @@ parse_extended_hostname(char *address)
/* so it is .onion */
*s = 0; /* NUL-terminate it */
- if (strlcpy(query, address, REND_SERVICE_ID_LEN_BASE32+1) >=
+ /* locate a 'sub-domain' component, in order to remove it */
+ q = strrchr(address, '.');
+ if (q == address) {
+ goto failed; /* reject sub-domain, as DNS does */
+ }
+ q = (NULL == q) ? address : q + 1;
+ if (strlcpy(query, q, REND_SERVICE_ID_LEN_BASE32+1) >=
REND_SERVICE_ID_LEN_BASE32+1)
goto failed;
+ if (q != address) {
+ memmove(address, q, strlen(q) + 1 /* also get \0 */);
+ }
if (rend_valid_service_id(query)) {
return ONION_HOSTNAME; /* success */
}
diff --git a/src/or/connection_edge.h b/src/or/connection_edge.h
index c320d6ba4..3c0e30a97 100644
--- a/src/or/connection_edge.h
+++ b/src/or/connection_edge.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,14 +9,17 @@
* \brief Header file for connection_edge.c.
**/
-#ifndef _TOR_CONNECTION_EDGE_H
-#define _TOR_CONNECTION_EDGE_H
+#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_)
+ connection_mark_unattached_ap_((conn), (endreason), __LINE__, SHORT_FILE__)
-void _connection_mark_unattached_ap(entry_connection_t *conn, int endreason,
- int line, const char *file);
+MOCK_DECL(void,connection_mark_unattached_ap_,
+ (entry_connection_t *conn, int endreason,
+ int line, const char *file));
int connection_edge_reached_eof(edge_connection_t *conn);
int connection_edge_process_inbuf(edge_connection_t *conn,
int package_partial);
@@ -42,12 +45,17 @@ entry_connection_t *connection_ap_make_link(connection_t *partner,
void connection_ap_handshake_socks_reply(entry_connection_t *conn, char *reply,
size_t replylen,
int endreason);
-void connection_ap_handshake_socks_resolved(entry_connection_t *conn,
- int answer_type,
- size_t answer_len,
- const uint8_t *answer,
- int ttl,
- time_t expires);
+MOCK_DECL(void,connection_ap_handshake_socks_resolved,
+ (entry_connection_t *conn,
+ int answer_type,
+ size_t answer_len,
+ const uint8_t *answer,
+ int ttl,
+ time_t expires));
+void connection_ap_handshake_socks_resolved_addr(entry_connection_t *conn,
+ const tor_addr_t *answer,
+ int ttl,
+ time_t expires);
int connection_exit_begin_conn(cell_t *cell, circuit_t *circ);
int connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ);
@@ -67,30 +75,6 @@ int connection_ap_process_transparent(entry_connection_t *conn);
int address_is_invalid_destination(const char *address, int client);
-void addressmap_init(void);
-void addressmap_clear_excluded_trackexithosts(const or_options_t *options);
-void addressmap_clear_invalid_automaps(const or_options_t *options);
-void addressmap_clean(time_t now);
-void addressmap_clear_configured(void);
-void addressmap_clear_transient(void);
-void addressmap_free_all(void);
-int addressmap_rewrite(char *address, size_t maxlen, time_t *expires_out,
- addressmap_entry_source_t *exit_source_out);
-int addressmap_have_mapping(const char *address, int update_timeout);
-
-void addressmap_register(const char *address, char *new_address,
- time_t expires, addressmap_entry_source_t source,
- const int address_wildcard,
- const int new_address_wildcard);
-int parse_virtual_addr_network(const char *val, int validate_only,
- char **msg);
-int client_dns_incr_failures(const char *address);
-void client_dns_clear_failures(const char *address);
-void client_dns_set_addressmap(const char *address, uint32_t val,
- const char *exitname, int ttl);
-const char *addressmap_register_virtual_address(int type, char *new_address);
-void addressmap_get_mappings(smartlist_t *sl, time_t min_expires,
- time_t max_expires, int want_expiry);
int connection_ap_rewrite_and_attach_if_allowed(entry_connection_t *conn,
origin_circuit_t *circ,
crypt_path_t *cpath);
@@ -114,6 +98,52 @@ int connection_edge_update_circuit_isolation(const entry_connection_t *conn,
origin_circuit_t *circ,
int dry_run);
void circuit_clear_isolation(origin_circuit_t *circ);
+streamid_t get_unique_stream_id_by_circ(origin_circuit_t *circ);
+
+/** @name Begin-cell flags
+ *
+ * These flags are used in RELAY_BEGIN cells to change the default behavior
+ * of the cell.
+ *
+ * @{
+ **/
+/** When this flag is set, the client is willing to get connected to IPv6
+ * addresses */
+#define BEGIN_FLAG_IPV6_OK (1u<<0)
+/** When this flag is set, the client DOES NOT support connecting to IPv4
+ * addresses. (The sense of this flag is inverted from IPV6_OK, so that the
+ * old default behavior of Tor is equivalent to having all flags set to 0.)
+ **/
+#define BEGIN_FLAG_IPV4_NOT_OK (1u<<1)
+/** When this flag is set, if we find both an IPv4 and an IPv6 address,
+ * we use the IPv6 address. Otherwise we use the IPv4 address. */
+#define BEGIN_FLAG_IPV6_PREFERRED (1u<<2)
+/**@}*/
+
+#ifdef CONNECTION_EDGE_PRIVATE
+
+/** A parsed BEGIN or BEGIN_DIR cell */
+typedef struct begin_cell_t {
+ /** The address the client has asked us to connect to, or NULL if this is
+ * a BEGIN_DIR cell*/
+ char *address;
+ /** The flags specified in the BEGIN cell's body. One or more of
+ * BEGIN_FLAG_*. */
+ uint32_t flags;
+ /** The client's requested port. */
+ uint16_t port;
+ /** The client's requested Stream ID */
+ uint16_t stream_id;
+ /** True iff this is a BEGIN_DIR cell. */
+ unsigned is_begindir : 1;
+} begin_cell_t;
+
+STATIC int begin_cell_parse(const cell_t *cell, begin_cell_t *bcell,
+ uint8_t *end_reason_out);
+STATIC int connected_cell_format_payload(uint8_t *payload_out,
+ const tor_addr_t *addr,
+ uint32_t ttl);
+#endif
#endif
diff --git a/src/or/connection_or.c b/src/or/connection_or.c
index 5eecee074..6572a918e 100644
--- a/src/or/connection_or.c
+++ b/src/or/connection_or.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,17 +9,25 @@
* \brief Functions to handle OR connections, TLS handshaking, and
* cells on the network.
**/
-
#include "or.h"
#include "buffers.h"
+/*
+ * Define this so we get channel internal functions, since we're implementing
+ * part of a subclass (channel_tls_t).
+ */
+#define TOR_CHANNEL_INTERNAL_
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "command.h"
#include "config.h"
#include "connection.h"
#include "connection_or.h"
#include "control.h"
#include "dirserv.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "main.h"
#include "networkstatus.h"
@@ -29,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
@@ -43,6 +51,17 @@ static int connection_or_check_valid_tls_handshake(or_connection_t *conn,
static void connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn);
+static unsigned int
+connection_or_is_bad_for_new_circs(or_connection_t *or_conn);
+static void connection_or_mark_bad_for_new_circs(or_connection_t *or_conn);
+
+/*
+ * Call this when changing connection state, so notifications to the owning
+ * channel can be handled.
+ */
+
+static void connection_or_change_state(or_connection_t *conn, uint8_t state);
+
#ifdef USE_BUFFEREVENTS
static void connection_or_handle_event_cb(struct bufferevent *bufev,
short event, void *arg);
@@ -56,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
@@ -127,8 +150,11 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
return;
/* If the identity was set previously, remove the old mapping. */
- if (! tor_digest_is_zero(conn->identity_digest))
+ if (! tor_digest_is_zero(conn->identity_digest)) {
connection_or_remove_from_identity_map(conn);
+ if (conn->chan)
+ channel_clear_identity_digest(TLS_CHAN_TO_BASE(conn->chan));
+ }
memcpy(conn->identity_digest, digest, DIGEST_LEN);
@@ -139,6 +165,10 @@ connection_or_set_identity_digest(or_connection_t *conn, const char *digest)
tmp = digestmap_set(orconn_identity_map, digest, conn);
conn->next_with_same_id = tmp;
+ /* Deal with channels */
+ if (conn->chan)
+ channel_set_identity_digest(TLS_CHAN_TO_BASE(conn->chan), digest);
+
#if 1
/* Testing code to check for bugs in representation. */
for (; tmp; tmp = tmp->next_with_same_id) {
@@ -148,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
@@ -202,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));
@@ -268,13 +363,13 @@ connection_or_report_broken_states(int severity, int domain)
smartlist_sort(items, broken_state_count_compare);
- log(severity, domain, "%d connections have failed%s", total,
+ tor_log(severity, domain, "%d connections have failed%s", total,
smartlist_len(items) > MAX_REASONS_TO_REPORT ? ". Top reasons:" : ":");
SMARTLIST_FOREACH_BEGIN(items, const broken_state_count_t *, c) {
if (c_sl_idx > MAX_REASONS_TO_REPORT)
break;
- log(severity, domain,
+ tor_log(severity, domain,
" %d connections died in state %s", (int)c->count, c->state);
} SMARTLIST_FOREACH_END(c);
@@ -282,6 +377,39 @@ connection_or_report_broken_states(int severity, int domain)
smartlist_free(items);
}
+/** Call this to change or_connection_t states, so the owning channel_tls_t can
+ * be notified.
+ */
+
+static void
+connection_or_change_state(or_connection_t *conn, uint8_t state)
+{
+ uint8_t old_state;
+
+ tor_assert(conn);
+
+ old_state = conn->base_.state;
+ conn->base_.state = state;
+
+ if (conn->chan)
+ channel_tls_handle_state_change_on_orconn(conn->chan, conn,
+ old_state, state);
+}
+
+/** Return the number of circuits using an or_connection_t; this used to
+ * be an or_connection_t field, but it got moved to channel_t and we
+ * shouldn't maintain two copies. */
+
+int
+connection_or_get_num_circuits(or_connection_t *conn)
+{
+ tor_assert(conn);
+
+ if (conn->chan) {
+ return channel_num_circuits(TLS_CHAN_TO_BASE(conn->chan));
+ } else return 0;
+}
+
/**************************************************************/
/** Pack the cell_t host-order structure <b>src</b> into network-order
@@ -292,33 +420,56 @@ connection_or_report_broken_states(int severity, int domain)
* should set it or clear it as appropriate.
*/
void
-cell_pack(packed_cell_t *dst, const cell_t *src)
+cell_pack(packed_cell_t *dst, const cell_t *src, int wide_circ_ids)
{
char *dest = dst->body;
- set_uint16(dest, htons(src->circ_id));
- *(uint8_t*)(dest+2) = src->command;
- memcpy(dest+3, src->payload, CELL_PAYLOAD_SIZE);
+ if (wide_circ_ids) {
+ set_uint32(dest, htonl(src->circ_id));
+ dest += 4;
+ } else {
+ set_uint16(dest, htons(src->circ_id));
+ dest += 2;
+ memset(dest+CELL_MAX_NETWORK_SIZE-2, 0, 2); /*make sure it's clear */
+ }
+ set_uint8(dest, src->command);
+ memcpy(dest+1, src->payload, CELL_PAYLOAD_SIZE);
}
/** Unpack the network-order buffer <b>src</b> into a host-order
* cell_t structure <b>dest</b>.
*/
static void
-cell_unpack(cell_t *dest, const char *src)
+cell_unpack(cell_t *dest, const char *src, int wide_circ_ids)
{
- dest->circ_id = ntohs(get_uint16(src));
- dest->command = *(uint8_t*)(src+2);
- memcpy(dest->payload, src+3, CELL_PAYLOAD_SIZE);
+ if (wide_circ_ids) {
+ dest->circ_id = ntohl(get_uint32(src));
+ src += 4;
+ } else {
+ dest->circ_id = ntohs(get_uint16(src));
+ src += 2;
+ }
+ dest->command = get_uint8(src);
+ memcpy(dest->payload, src+1, CELL_PAYLOAD_SIZE);
}
-/** Write the header of <b>cell</b> into the first VAR_CELL_HEADER_SIZE
- * bytes of <b>hdr_out</b>. */
-void
-var_cell_pack_header(const var_cell_t *cell, char *hdr_out)
+/** Write the header of <b>cell</b> into the first VAR_CELL_MAX_HEADER_SIZE
+ * bytes of <b>hdr_out</b>. Returns number of bytes used. */
+int
+var_cell_pack_header(const var_cell_t *cell, char *hdr_out, int wide_circ_ids)
{
- set_uint16(hdr_out, htons(cell->circ_id));
- set_uint8(hdr_out+2, cell->command);
- set_uint16(hdr_out+3, htons(cell->payload_len));
+ int r;
+ if (wide_circ_ids) {
+ set_uint32(hdr_out, htonl(cell->circ_id));
+ hdr_out += 4;
+ r = VAR_CELL_MAX_HEADER_SIZE;
+ } else {
+ set_uint16(hdr_out, htons(cell->circ_id));
+ hdr_out += 2;
+ r = VAR_CELL_MAX_HEADER_SIZE - 2;
+ }
+ set_uint8(hdr_out, cell->command);
+ set_uint16(hdr_out+1, htons(cell->payload_len));
+ return r;
}
/** Allocate and return a new var_cell_t with <b>payload_len</b> bytes of
@@ -327,7 +478,7 @@ var_cell_t *
var_cell_new(uint16_t payload_len)
{
size_t size = STRUCT_OFFSET(var_cell_t, payload) + payload_len;
- var_cell_t *cell = tor_malloc(size);
+ var_cell_t *cell = tor_malloc_zero(size);
cell->payload_len = payload_len;
cell->command = 0;
cell->circ_id = 0;
@@ -345,8 +496,11 @@ var_cell_free(var_cell_t *cell)
int
connection_or_reached_eof(or_connection_t *conn)
{
+ tor_assert(conn);
+
log_info(LD_OR,"OR connection reached EOF. Closing.");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_normally(conn, 1);
+
return 0;
}
@@ -366,7 +520,7 @@ connection_or_process_inbuf(or_connection_t *conn)
int ret = 0;
tor_assert(conn);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case OR_CONN_STATE_PROXY_HANDSHAKING:
ret = connection_read_proxy_handshake(TO_CONN(conn));
@@ -375,9 +529,12 @@ connection_or_process_inbuf(or_connection_t *conn)
tor_assert(TO_CONN(conn)->proxy_state == PROXY_CONNECTED);
if (connection_tls_start_handshake(conn, 0) < 0)
ret = -1;
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
}
if (ret < 0) {
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
return ret;
@@ -385,7 +542,7 @@ connection_or_process_inbuf(or_connection_t *conn)
#ifdef USE_BUFFEREVENTS
if (tor_tls_server_got_renegotiate(conn->tls))
connection_or_tls_renegotiated_cb(conn->tls, conn);
- if (conn->_base.marked_for_close)
+ if (conn->base_.marked_for_close)
return 0;
/* fall through. */
#endif
@@ -403,14 +560,14 @@ connection_or_process_inbuf(or_connection_t *conn)
*
* XXX024 Remove this check once we verify that the above paragraph is
* 100% true. */
- if (buf_datalen(conn->_base.inbuf) > MAX_OR_INBUF_WHEN_NONOPEN) {
+ if (buf_datalen(conn->base_.inbuf) > MAX_OR_INBUF_WHEN_NONOPEN) {
log_fn(LOG_PROTOCOL_WARN, LD_NET, "Accumulated too much data (%d bytes) "
"on nonopen OR connection %s %s:%u in state %s; closing.",
- (int)buf_datalen(conn->_base.inbuf),
+ (int)buf_datalen(conn->base_.inbuf),
connection_or_nonopen_was_started_here(conn) ? "to" : "from",
- conn->_base.address, conn->_base.port,
- conn_state_to_string(conn->_base.type, conn->_base.state));
- connection_mark_for_close(TO_CONN(conn));
+ conn->base_.address, conn->base_.port,
+ conn_state_to_string(conn->base_.type, conn->base_.state));
+ connection_or_close_for_error(conn, 0);
ret = -1;
}
@@ -430,18 +587,32 @@ connection_or_process_inbuf(or_connection_t *conn)
int
connection_or_flushed_some(or_connection_t *conn)
{
- size_t datalen = connection_get_outbuf_len(TO_CONN(conn));
+ size_t datalen, temp;
+ ssize_t n, flushed;
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
+
/* If we're under the low water mark, add cells until we're just over the
* high water mark. */
+ datalen = connection_get_outbuf_len(TO_CONN(conn));
if (datalen < OR_CONN_LOWWATER) {
- ssize_t n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, CELL_NETWORK_SIZE);
- time_t now = approx_time();
- while (conn->active_circuits && n > 0) {
- int flushed;
- flushed = connection_or_flush_from_first_active_circuit(conn, 1, now);
- n -= flushed;
+ while ((conn->chan) && channel_tls_more_to_flush(conn->chan)) {
+ /* Compute how many more cells we want at most */
+ n = CEIL_DIV(OR_CONN_HIGHWATER - datalen, cell_network_size);
+ /* Bail out if we don't want any more */
+ if (n <= 0) break;
+ /* We're still here; try to flush some more cells */
+ flushed = channel_tls_flush_some_cells(conn->chan, n);
+ /* Bail out if it says it didn't flush anything */
+ if (flushed <= 0) break;
+ /* How much in the outbuf now? */
+ temp = connection_get_outbuf_len(TO_CONN(conn));
+ /* Bail out if we didn't actually increase the outbuf size */
+ if (temp <= datalen) break;
+ /* Update datalen for the next iteration */
+ datalen = temp;
}
}
+
return 0;
}
@@ -459,14 +630,14 @@ connection_or_finished_flushing(or_connection_t *conn)
tor_assert(conn);
assert_connection_ok(TO_CONN(conn),0);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case OR_CONN_STATE_PROXY_HANDSHAKING:
case OR_CONN_STATE_OPEN:
case OR_CONN_STATE_OR_HANDSHAKING_V2:
case OR_CONN_STATE_OR_HANDSHAKING_V3:
break;
default:
- log_err(LD_BUG,"Called in unexpected state %d.", conn->_base.state);
+ log_err(LD_BUG,"Called in unexpected state %d.", conn->base_.state);
tor_fragile_assert();
return -1;
}
@@ -480,6 +651,7 @@ connection_or_finished_connecting(or_connection_t *or_conn)
{
const int proxy_type = or_conn->proxy_type;
connection_t *conn;
+
tor_assert(or_conn);
conn = TO_CONN(or_conn);
tor_assert(conn->state == OR_CONN_STATE_CONNECTING);
@@ -491,18 +663,18 @@ connection_or_finished_connecting(or_connection_t *or_conn)
if (proxy_type != PROXY_NONE) {
/* start proxy handshake */
if (connection_proxy_connect(conn, proxy_type) < 0) {
- connection_mark_for_close(conn);
+ connection_or_close_for_error(or_conn, 0);
return -1;
}
connection_start_reading(conn);
- conn->state = OR_CONN_STATE_PROXY_HANDSHAKING;
+ connection_or_change_state(or_conn, OR_CONN_STATE_PROXY_HANDSHAKING);
return 0;
}
if (connection_tls_start_handshake(or_conn, 0) < 0) {
/* TLS handshaking error of some kind. */
- connection_mark_for_close(conn);
+ connection_or_close_for_error(or_conn, 0);
return -1;
}
return 0;
@@ -516,11 +688,19 @@ connection_or_about_to_close(or_connection_t *or_conn)
time_t now = time(NULL);
connection_t *conn = TO_CONN(or_conn);
+ /* Tell the controlling channel we're closed */
+ if (or_conn->chan) {
+ channel_closed(TLS_CHAN_TO_BASE(or_conn->chan));
+ /*
+ * NULL this out because the channel might hang around a little
+ * longer before channel_run_cleanup() gets it.
+ */
+ or_conn->chan->conn = NULL;
+ or_conn->chan = NULL;
+ }
+
/* Remember why we're closing this connection. */
if (conn->state != OR_CONN_STATE_OPEN) {
- /* Inform any pending (not attached) circs that they should
- * give up. */
- circuit_n_conn_done(TO_OR_CONN(conn), 0);
/* now mark things down as needed */
if (connection_or_nonopen_was_started_here(or_conn)) {
const or_options_t *options = get_options();
@@ -534,7 +714,8 @@ connection_or_about_to_close(or_connection_t *or_conn)
reason);
if (!authdir_mode_tests_reachability(options))
control_event_bootstrap_problem(
- orconn_end_reason_to_control_string(reason), reason);
+ orconn_end_reason_to_control_string(reason),
+ reason, or_conn);
}
}
} else if (conn->hold_open_until_flushed) {
@@ -548,9 +729,6 @@ connection_or_about_to_close(or_connection_t *or_conn)
control_event_or_conn_status(or_conn, OR_CONN_EVENT_CLOSED,
tls_error_to_orconn_end_reason(or_conn->tls_error));
}
- /* Now close all the attached circuits on it. */
- circuit_unlink_all_from_or_conn(TO_OR_CONN(conn),
- END_CIRC_REASON_OR_CONN_CLOSED);
}
/** Return 1 if identity digest <b>id_digest</b> is known to be a
@@ -613,8 +791,8 @@ connection_or_update_token_buckets_helper(or_connection_t *conn, int reset,
cfg = ev_token_bucket_cfg_new(rate_per_tick, burst, rate_per_tick,
burst, tick);
old_cfg = conn->bucket_cfg;
- if (conn->_base.bufev)
- tor_set_bufferevent_rate_limit(conn->_base.bufev, cfg);
+ if (conn->base_.bufev)
+ tor_set_bufferevent_rate_limit(conn->base_.bufev, cfg);
if (old_cfg)
ev_token_bucket_cfg_free(old_cfg);
conn->bucket_cfg = cfg;
@@ -663,15 +841,15 @@ connection_or_init_conn_from_address(or_connection_t *conn,
connection_or_set_identity_digest(conn, id_digest);
connection_or_update_token_buckets_helper(conn, 1, get_options());
- conn->_base.port = port;
- tor_addr_copy(&conn->_base.addr, addr);
+ conn->base_.port = port;
+ tor_addr_copy(&conn->base_.addr, addr);
tor_addr_copy(&conn->real_addr, addr);
if (r) {
tor_addr_port_t node_ap;
node_get_pref_orport(r, &node_ap);
/* XXXX proposal 186 is making this more complex. For now, a conn
is canonical when it uses the _preferred_ address. */
- if (tor_addr_eq(&conn->_base.addr, &node_ap.addr))
+ if (tor_addr_eq(&conn->base_.addr, &node_ap.addr))
conn->is_canonical = 1;
if (!started_here) {
/* Override the addr/port, so our log messages will make sense.
@@ -684,12 +862,12 @@ connection_or_init_conn_from_address(or_connection_t *conn,
* right IP address and port 56244, that wouldn't be as helpful. now we
* log the "right" port too, so we know if it's moria1 or moria2.
*/
- tor_addr_copy(&conn->_base.addr, &node_ap.addr);
- conn->_base.port = node_ap.port;
+ tor_addr_copy(&conn->base_.addr, &node_ap.addr);
+ conn->base_.port = node_ap.port;
}
conn->nickname = tor_strdup(node_get_nickname(r));
- tor_free(conn->_base.address);
- conn->_base.address = tor_dup_addr(&node_ap.addr);
+ tor_free(conn->base_.address);
+ conn->base_.address = tor_dup_addr(&node_ap.addr);
} else {
const char *n;
/* If we're an authoritative directory server, we may know a
@@ -703,157 +881,31 @@ connection_or_init_conn_from_address(or_connection_t *conn,
base16_encode(conn->nickname+1, HEX_DIGEST_LEN+1,
conn->identity_digest, DIGEST_LEN);
}
- tor_free(conn->_base.address);
- conn->_base.address = tor_dup_addr(addr);
+ tor_free(conn->base_.address);
+ conn->base_.address = tor_dup_addr(addr);
}
}
-/** Return true iff <b>a</b> is "better" than <b>b</b> for new circuits.
- *
- * A more canonical connection is always better than a less canonical
- * connection. That aside, a connection is better if it has circuits and the
- * other does not, or if it was created more recently.
- *
- * Requires that both input connections are open; not is_bad_for_new_circs,
- * and not impossibly non-canonical.
- *
- * If <b>forgive_new_connections</b> is true, then we do not call
- * <b>a</b>better than <b>b</b> simply because b has no circuits,
- * unless b is also relatively old.
- */
-static int
-connection_or_is_better(time_t now,
- const or_connection_t *a,
- const or_connection_t *b,
- int forgive_new_connections)
-{
- int newer;
-/** Do not definitively deprecate a new connection with no circuits on it
- * until this much time has passed. */
-#define NEW_CONN_GRACE_PERIOD (15*60)
-
- if (b->is_canonical && !a->is_canonical)
- return 0; /* A canonical connection is better than a non-canonical
- * one, no matter how new it is or which has circuits. */
-
- newer = b->_base.timestamp_created < a->_base.timestamp_created;
-
- if (
- /* We prefer canonical connections regardless of newness. */
- (!b->is_canonical && a->is_canonical) ||
- /* If both have circuits we prefer the newer: */
- (b->n_circuits && a->n_circuits && newer) ||
- /* If neither has circuits we prefer the newer: */
- (!b->n_circuits && !a->n_circuits && newer))
- return 1;
+/** These just pass all the is_bad_for_new_circs manipulation on to
+ * channel_t */
- /* If one has no circuits and the other does... */
- if (!b->n_circuits && a->n_circuits) {
- /* Then it's bad, unless it's in its grace period and we're forgiving. */
- if (forgive_new_connections &&
- now < b->_base.timestamp_created + NEW_CONN_GRACE_PERIOD)
- return 0;
- else
- return 1;
- }
+static unsigned int
+connection_or_is_bad_for_new_circs(or_connection_t *or_conn)
+{
+ tor_assert(or_conn);
- return 0;
+ if (or_conn->chan)
+ return channel_is_bad_for_new_circs(TLS_CHAN_TO_BASE(or_conn->chan));
+ else return 0;
}
-/** Return the OR connection we should use to extend a circuit to the router
- * whose identity is <b>digest</b>, and whose address we believe (or have been
- * told in an extend cell) is <b>target_addr</b>. If there is no good
- * connection, set *<b>msg_out</b> to a message describing the connection's
- * state and our next action, and set <b>launch_out</b> to a boolean for
- * whether we should launch a new connection or not.
- */
-or_connection_t *
-connection_or_get_for_extend(const char *digest,
- const tor_addr_t *target_addr,
- const char **msg_out,
- int *launch_out)
+static void
+connection_or_mark_bad_for_new_circs(or_connection_t *or_conn)
{
- or_connection_t *conn, *best=NULL;
- int n_inprogress_goodaddr = 0, n_old = 0, n_noncanonical = 0, n_possible = 0;
- time_t now = approx_time();
-
- tor_assert(msg_out);
- tor_assert(launch_out);
-
- if (!orconn_identity_map) {
- *msg_out = "Router not connected (nothing is). Connecting.";
- *launch_out = 1;
- return NULL;
- }
-
- conn = digestmap_get(orconn_identity_map, digest);
-
- for (; conn; conn = conn->next_with_same_id) {
- tor_assert(conn->_base.magic == OR_CONNECTION_MAGIC);
- tor_assert(conn->_base.type == CONN_TYPE_OR);
- tor_assert(tor_memeq(conn->identity_digest, digest, DIGEST_LEN));
- if (conn->_base.marked_for_close)
- continue;
- /* Never return a connection on which the other end appears to be
- * a client. */
- if (conn->is_connection_with_client) {
- continue;
- }
- /* Never return a non-open connection. */
- if (conn->_base.state != OR_CONN_STATE_OPEN) {
- /* If the address matches, don't launch a new connection for this
- * circuit. */
- if (!tor_addr_compare(&conn->real_addr, target_addr, CMP_EXACT))
- ++n_inprogress_goodaddr;
- continue;
- }
- /* Never return a connection that shouldn't be used for circs. */
- if (conn->is_bad_for_new_circs) {
- ++n_old;
- continue;
- }
- /* Never return a non-canonical connection using a recent link protocol
- * if the address is not what we wanted.
- *
- * (For old link protocols, we can't rely on is_canonical getting
- * set properly if we're talking to the right address, since we might
- * have an out-of-date descriptor, and we will get no NETINFO cell to
- * tell us about the right address.) */
- if (!conn->is_canonical && conn->link_proto >= 2 &&
- tor_addr_compare(&conn->real_addr, target_addr, CMP_EXACT)) {
- ++n_noncanonical;
- continue;
- }
-
- ++n_possible;
-
- if (!best) {
- best = conn; /* If we have no 'best' so far, this one is good enough. */
- continue;
- }
-
- if (connection_or_is_better(now, conn, best, 0))
- best = conn;
- }
+ tor_assert(or_conn);
- if (best) {
- *msg_out = "Connection is fine; using it.";
- *launch_out = 0;
- return best;
- } else if (n_inprogress_goodaddr) {
- *msg_out = "Connection in progress; waiting.";
- *launch_out = 0;
- return NULL;
- } else if (n_old || n_noncanonical) {
- *msg_out = "Connections all too old, or too non-canonical. "
- " Launching a new one.";
- *launch_out = 1;
- return NULL;
- } else {
- *msg_out = "Not connected. Connecting.";
- *launch_out = 1;
- return NULL;
- }
+ if (or_conn->chan)
+ channel_mark_bad_for_new_circs(TLS_CHAN_TO_BASE(or_conn->chan));
}
/** How old do we let a connection to an OR get before deciding it's
@@ -874,8 +926,8 @@ connection_or_get_for_extend(const char *digest,
* - all open non-canonical connections for which a 'better' non-canonical
* connection exists to the same router at the same address.
*
- * See connection_or_is_better() for our idea of what makes one OR connection
- * better than another.
+ * See channel_is_better() in channel.c for our idea of what makes one OR
+ * connection better than another.
*/
static void
connection_or_group_set_badness(or_connection_t *head, int force)
@@ -887,23 +939,23 @@ connection_or_group_set_badness(or_connection_t *head, int force)
/* Pass 1: expire everything that's old, and see what the status of
* everything else is. */
for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
- if (or_conn->_base.marked_for_close ||
- or_conn->is_bad_for_new_circs)
+ if (or_conn->base_.marked_for_close ||
+ connection_or_is_bad_for_new_circs(or_conn))
continue;
if (force ||
- or_conn->_base.timestamp_created + TIME_BEFORE_OR_CONN_IS_TOO_OLD
+ or_conn->base_.timestamp_created + TIME_BEFORE_OR_CONN_IS_TOO_OLD
< now) {
log_info(LD_OR,
"Marking OR conn to %s:%d as too old for new circuits "
- "(fd %d, %d secs old).",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old).",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
}
- if (or_conn->is_bad_for_new_circs) {
+ if (connection_or_is_bad_for_new_circs(or_conn)) {
++n_old;
- } else if (or_conn->_base.state != OR_CONN_STATE_OPEN) {
+ } else if (or_conn->base_.state != OR_CONN_STATE_OPEN) {
++n_inprogress;
} else if (or_conn->is_canonical) {
++n_canonical;
@@ -915,10 +967,10 @@ connection_or_group_set_badness(or_connection_t *head, int force)
/* Pass 2: We know how about how good the best connection is.
* expire everything that's worse, and find the very best if we can. */
for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
- if (or_conn->_base.marked_for_close ||
- or_conn->is_bad_for_new_circs)
+ if (or_conn->base_.marked_for_close ||
+ connection_or_is_bad_for_new_circs(or_conn))
continue; /* This one doesn't need to be marked bad. */
- if (or_conn->_base.state != OR_CONN_STATE_OPEN)
+ if (or_conn->base_.state != OR_CONN_STATE_OPEN)
continue; /* Don't mark anything bad until we have seen what happens
* when the connection finishes. */
if (n_canonical && !or_conn->is_canonical) {
@@ -926,16 +978,21 @@ connection_or_group_set_badness(or_connection_t *head, int force)
* and this one is open but not canonical. Mark it bad. */
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "
- "(fd %d, %d secs old). It is not canonical, and we have "
- "another connection to that OR that is.",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old). It is not "
+ "canonical, and we have another connection to that OR that is.",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
continue;
}
- if (!best || connection_or_is_better(now, or_conn, best, 0))
+ if (!best ||
+ channel_is_better(now,
+ TLS_CHAN_TO_BASE(or_conn->chan),
+ TLS_CHAN_TO_BASE(best->chan),
+ 0)) {
best = or_conn;
+ }
}
if (!best)
@@ -956,32 +1013,37 @@ connection_or_group_set_badness(or_connection_t *head, int force)
* "mostly harmless", so a fix can wait until somebody is bored.
*/
for (or_conn = head; or_conn; or_conn = or_conn->next_with_same_id) {
- if (or_conn->_base.marked_for_close ||
- or_conn->is_bad_for_new_circs ||
- or_conn->_base.state != OR_CONN_STATE_OPEN)
+ if (or_conn->base_.marked_for_close ||
+ connection_or_is_bad_for_new_circs(or_conn) ||
+ or_conn->base_.state != OR_CONN_STATE_OPEN)
continue;
- if (or_conn != best && connection_or_is_better(now, best, or_conn, 1)) {
+ if (or_conn != best &&
+ channel_is_better(now,
+ TLS_CHAN_TO_BASE(best->chan),
+ TLS_CHAN_TO_BASE(or_conn->chan), 1)) {
/* This isn't the best conn, _and_ the best conn is better than it,
even when we're being forgiving. */
if (best->is_canonical) {
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "
- "(fd %d, %d secs old). We have a better canonical one "
- "(fd %d; %d secs old).",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created),
- best->_base.s, (int)(now - best->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old). "
+ "We have a better canonical one "
+ "(fd "TOR_SOCKET_T_FORMAT"; %d secs old).",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created),
+ best->base_.s, (int)(now - best->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
} else if (!tor_addr_compare(&or_conn->real_addr,
&best->real_addr, CMP_EXACT)) {
log_info(LD_OR,
"Marking OR conn to %s:%d as unsuitable for new circuits: "
- "(fd %d, %d secs old). We have a better one with the "
- "same address (fd %d; %d secs old).",
- or_conn->_base.address, or_conn->_base.port, or_conn->_base.s,
- (int)(now - or_conn->_base.timestamp_created),
- best->_base.s, (int)(now - best->_base.timestamp_created));
- or_conn->is_bad_for_new_circs = 1;
+ "(fd "TOR_SOCKET_T_FORMAT", %d secs old). We have a better "
+ "one with the "
+ "same address (fd "TOR_SOCKET_T_FORMAT"; %d secs old).",
+ or_conn->base_.address, or_conn->base_.port, or_conn->base_.s,
+ (int)(now - or_conn->base_.timestamp_created),
+ best->base_.s, (int)(now - best->base_.timestamp_created));
+ connection_or_mark_bad_for_new_circs(or_conn);
}
}
}
@@ -1016,11 +1078,44 @@ connection_or_connect_failed(or_connection_t *conn,
{
control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED, reason);
if (!authdir_mode_tests_reachability(get_options()))
- control_event_bootstrap_problem(msg, reason);
+ control_event_bootstrap_problem(msg, reason, conn);
+}
+
+/** <b>conn</b> got an error in connection_handle_read_impl() or
+ * connection_handle_write_impl() and is going to die soon.
+ *
+ * <b>reason</b> specifies the or_conn_end_reason for the failure;
+ * <b>msg</b> specifies the strerror-style error message.
+ */
+void
+connection_or_notify_error(or_connection_t *conn,
+ int reason, const char *msg)
+{
+ channel_t *chan;
+
+ tor_assert(conn);
+
+ /* If we're connecting, call connect_failed() too */
+ if (TO_CONN(conn)->state == OR_CONN_STATE_CONNECTING)
+ connection_or_connect_failed(conn, reason, msg);
+
+ /* Tell the controlling channel if we have one */
+ if (conn->chan) {
+ chan = TLS_CHAN_TO_BASE(conn->chan);
+ /* Don't transition if we're already in closing, closed or error */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ channel_close_for_error(chan);
+ }
+ }
+
+ /* No need to mark for error because connection.c is about to do that */
}
/** Launch a new OR connection to <b>addr</b>:<b>port</b> and expect to
- * handshake with an OR with identity digest <b>id_digest</b>.
+ * handshake with an OR with identity digest <b>id_digest</b>. Optionally,
+ * pass in a pointer to a channel using this connection.
*
* If <b>id_digest</b> is me, do nothing. If we're already connected to it,
* return that connection. If the connect() is in progress, set the
@@ -1035,7 +1130,8 @@ connection_or_connect_failed(or_connection_t *conn,
*/
or_connection_t *
connection_or_connect(const tor_addr_t *_addr, uint16_t port,
- const char *id_digest)
+ const char *id_digest,
+ channel_tls_t *chan)
{
or_connection_t *conn;
const or_options_t *options = get_options();
@@ -1056,11 +1152,19 @@ 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 */
+ /*
+ * Set up conn so it's got all the data we need to remember for channels
+ *
+ * This stuff needs to happen before connection_or_init_conn_from_address()
+ * so connection_or_set_identity_digest() and such know where to look to
+ * keep the channel up to date.
+ */
+ conn->chan = chan;
+ chan->conn = conn;
connection_or_init_conn_from_address(conn, &addr, port, id_digest, 1);
- conn->_base.state = OR_CONN_STATE_CONNECTING;
+ connection_or_change_state(conn, OR_CONN_STATE_CONNECTING);
control_event_or_conn_status(conn, OR_CONN_EVENT_LAUNCHED, 0);
conn->is_outgoing = 1;
@@ -1072,7 +1176,7 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
if (proxy_type != PROXY_NONE) {
tor_addr_copy(&addr, &proxy_addr);
port = proxy_port;
- conn->_base.proxy_state = PROXY_INFANT;
+ conn->base_.proxy_state = PROXY_INFANT;
}
} else {
/* get_proxy_addrport() might fail if we have a Bridge line that
@@ -1084,29 +1188,35 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
TO_CONN(conn)->port);
if (transport_name) {
- log_warn(LD_GENERAL, "We were supposed to connect to bridge '%s:%u' "
+ log_warn(LD_GENERAL, "We were supposed to connect to bridge '%s' "
"using pluggable transport '%s', but we can't find a pluggable "
"transport proxy supporting '%s'. This can happen if you "
"haven't provided a ClientTransportPlugin line, or if "
"your pluggable transport proxy stopped running.",
- fmt_addr(&TO_CONN(conn)->addr), TO_CONN(conn)->port,
+ fmt_addrport(&TO_CONN(conn)->addr, TO_CONN(conn)->port),
transport_name, transport_name);
+
+ control_event_bootstrap_problem(
+ "Can't connect to bridge",
+ END_OR_CONN_REASON_PT_MISSING,
+ conn);
+
} else {
- log_warn(LD_GENERAL, "Tried to connect to '%s:%u' through a proxy, but "
+ log_warn(LD_GENERAL, "Tried to connect to '%s' through a proxy, but "
"the proxy address could not be found.",
- fmt_addr(&TO_CONN(conn)->addr), TO_CONN(conn)->port);
+ fmt_addrport(&TO_CONN(conn)->addr, TO_CONN(conn)->port));
}
connection_free(TO_CONN(conn));
return NULL;
}
- switch (connection_connect(TO_CONN(conn), conn->_base.address,
+ switch (connection_connect(TO_CONN(conn), conn->base_.address,
&addr, port, &socket_error)) {
case -1:
/* If the connection failed immediately, and we're using
* a proxy, our proxy is down. Don't blame the Tor server. */
- if (conn->_base.proxy_state == PROXY_INFANT)
+ if (conn->base_.proxy_state == PROXY_INFANT)
entry_guard_register_connect_status(conn->identity_digest,
0, 1, time(NULL));
connection_or_connect_failed(conn,
@@ -1129,6 +1239,62 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
return conn;
}
+/** Mark orconn for close and transition the associated channel, if any, to
+ * the closing state.
+ *
+ * It's safe to call this and connection_or_close_for_error() any time, and
+ * channel layer will treat it as a connection closing for reasons outside
+ * its control, like the remote end closing it. It can also be a local
+ * reason that's specific to connection_t/or_connection_t rather than
+ * the channel mechanism, such as expiration of old connections in
+ * run_connection_housekeeping(). If you want to close a channel_t
+ * from somewhere that logically works in terms of generic channels
+ * rather than connections, use channel_mark_for_close(); see also
+ * the comment on that function in channel.c.
+ */
+
+void
+connection_or_close_normally(or_connection_t *orconn, int flush)
+{
+ channel_t *chan = NULL;
+
+ tor_assert(orconn);
+ if (flush) connection_mark_and_flush_internal(TO_CONN(orconn));
+ else connection_mark_for_close_internal(TO_CONN(orconn));
+ if (orconn->chan) {
+ chan = TLS_CHAN_TO_BASE(orconn->chan);
+ /* Don't transition if we're already in closing, closed or error */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ channel_close_from_lower_layer(chan);
+ }
+ }
+}
+
+/** Mark orconn for close and transition the associated channel, if any, to
+ * the error state.
+ */
+
+void
+connection_or_close_for_error(or_connection_t *orconn, int flush)
+{
+ channel_t *chan = NULL;
+
+ tor_assert(orconn);
+ if (flush) connection_mark_and_flush_internal(TO_CONN(orconn));
+ else connection_mark_for_close_internal(TO_CONN(orconn));
+ if (orconn->chan) {
+ chan = TLS_CHAN_TO_BASE(orconn->chan);
+ /* Don't transition if we're already in closing, closed or error */
+ if (!(chan->state == CHANNEL_STATE_CLOSING ||
+ chan->state == CHANNEL_STATE_CLOSED ||
+ chan->state == CHANNEL_STATE_ERROR)) {
+ channel_close_for_error(chan);
+ }
+ }
+}
+
/** Begin the tls handshake with <b>conn</b>. <b>receiving</b> is 0 if
* we initiated the connection, else it's 1.
*
@@ -1137,32 +1303,49 @@ connection_or_connect(const tor_addr_t *_addr, uint16_t port,
*
* 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))
{
- conn->_base.state = OR_CONN_STATE_TLS_HANDSHAKING;
+ channel_listener_t *chan_listener;
+ channel_t *chan;
+
+ /* Incoming connections will need a new channel passed to the
+ * channel_tls_listener */
+ if (receiving) {
+ /* It shouldn't already be set */
+ tor_assert(!(conn->chan));
+ chan_listener = channel_tls_get_listener();
+ if (!chan_listener) {
+ chan_listener = channel_tls_start_listener();
+ command_setup_listener(chan_listener);
+ }
+ chan = channel_tls_handle_incoming(conn);
+ channel_listener_queue_incoming(chan_listener, chan);
+ }
+
+ connection_or_change_state(conn, OR_CONN_STATE_TLS_HANDSHAKING);
tor_assert(!conn->tls);
- conn->tls = tor_tls_new(conn->_base.s, receiving);
+ conn->tls = tor_tls_new(conn->base_.s, receiving);
if (!conn->tls) {
log_warn(LD_BUG,"tor_tls_new failed. Closing.");
return -1;
}
tor_tls_set_logged_address(conn->tls, // XXX client and relay?
- escaped_safe_str(conn->_base.address));
+ escaped_safe_str(conn->base_.address));
#ifdef USE_BUFFEREVENTS
if (connection_type_uses_bufferevent(TO_CONN(conn))) {
- const int filtering = get_options()->_UseFilteringSSLBufferevents;
+ const int filtering = get_options()->UseFilteringSSLBufferevents;
struct bufferevent *b =
- tor_tls_init_bufferevent(conn->tls, conn->_base.bufev, conn->_base.s,
+ tor_tls_init_bufferevent(conn->tls, conn->base_.bufev, conn->base_.s,
receiving, filtering);
if (!b) {
log_warn(LD_BUG,"tor_tls_init_bufferevent failed. Closing.");
return -1;
}
- conn->_base.bufev = b;
+ conn->base_.bufev = b;
if (conn->bucket_cfg)
- tor_set_bufferevent_rate_limit(conn->_base.bufev, conn->bucket_cfg);
+ tor_set_bufferevent_rate_limit(conn->base_.bufev, conn->bucket_cfg);
connection_enable_rate_limiting(TO_CONN(conn));
connection_configure_bufferevent_callbacks(TO_CONN(conn));
@@ -1174,7 +1357,8 @@ connection_tls_start_handshake(or_connection_t *conn, int receiving)
}
#endif
connection_start_reading(TO_CONN(conn));
- log_debug(LD_HANDSHAKE,"starting TLS handshake on fd %d", conn->_base.s);
+ log_debug(LD_HANDSHAKE,"starting TLS handshake on fd "TOR_SOCKET_T_FORMAT,
+ conn->base_.s);
note_crypto_pk_op(receiving ? TLS_HANDSHAKE_S : TLS_HANDSHAKE_C);
IF_HAS_BUFFEREVENT(TO_CONN(conn), {
@@ -1211,7 +1395,7 @@ connection_or_tls_renegotiated_cb(tor_tls_t *tls, void *_conn)
if (connection_tls_finish_handshake(conn) < 0) {
/* XXXX_TLS double-check that it's ok to do this from inside read. */
/* XXXX_TLS double-check that this verifies certificates. */
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
}
@@ -1226,12 +1410,12 @@ connection_tls_continue_handshake(or_connection_t *conn)
int result;
check_no_tls_errors();
again:
- if (conn->_base.state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING) {
// log_notice(LD_OR, "Renegotiate with %p", conn->tls);
result = tor_tls_renegotiate(conn->tls);
// log_notice(LD_OR, "Result: %d", result);
} else {
- tor_assert(conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING);
+ tor_assert(conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING);
// log_notice(LD_OR, "Continue handshake with %p", conn->tls);
result = tor_tls_handshake(conn->tls);
// log_notice(LD_OR, "Result: %d", result);
@@ -1244,19 +1428,21 @@ connection_tls_continue_handshake(or_connection_t *conn)
case TOR_TLS_DONE:
if (! tor_tls_used_v1_handshake(conn->tls)) {
if (!tor_tls_is_server(conn->tls)) {
- if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING) {
if (tor_tls_received_v3_certificate(conn->tls)) {
log_info(LD_OR, "Client got a v3 cert! Moving on to v3 "
- "handshake.");
+ "handshake with ciphersuite %s",
+ tor_tls_get_ciphersuite_name(conn->tls));
return connection_or_launch_v3_or_handshake(conn);
} else {
log_debug(LD_OR, "Done with initial SSL handshake (client-side)."
" Requesting renegotiation.");
- conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING);
goto again;
}
}
- // log_notice(LD_OR,"Done. state was %d.", conn->_base.state);
+ // log_notice(LD_OR,"Done. state was %d.", conn->base_.state);
} else {
/* v2/v3 handshake, but not a client. */
log_debug(LD_OR, "Done with initial SSL handshake (server-side). "
@@ -1264,7 +1450,8 @@ connection_tls_continue_handshake(or_connection_t *conn)
tor_tls_set_renegotiate_callback(conn->tls,
connection_or_tls_renegotiated_cb,
conn);
- conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
connection_stop_writing(TO_CONN(conn));
connection_start_reading(TO_CONN(conn));
return 0;
@@ -1294,28 +1481,29 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
/* XXXX cut-and-paste code; should become a function. */
if (event & BEV_EVENT_CONNECTED) {
- if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING) {
if (tor_tls_finish_handshake(conn->tls) < 0) {
log_warn(LD_OR, "Problem finishing handshake");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
return;
}
}
if (! tor_tls_used_v1_handshake(conn->tls)) {
if (!tor_tls_is_server(conn->tls)) {
- if (conn->_base.state == OR_CONN_STATE_TLS_HANDSHAKING) {
+ if (conn->base_.state == OR_CONN_STATE_TLS_HANDSHAKING) {
if (tor_tls_received_v3_certificate(conn->tls)) {
log_info(LD_OR, "Client got a v3 cert!");
if (connection_or_launch_v3_or_handshake(conn) < 0)
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
return;
} else {
- conn->_base.state = OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_CLIENT_RENEGOTIATING);
tor_tls_unblock_renegotiation(conn->tls);
- if (bufferevent_ssl_renegotiate(conn->_base.bufev)<0) {
+ if (bufferevent_ssl_renegotiate(conn->base_.bufev)<0) {
log_warn(LD_OR, "Start_renegotiating went badly.");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
tor_tls_unblock_renegotiation(conn->tls);
return; /* ???? */
@@ -1330,7 +1518,8 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
tor_tls_set_renegotiate_callback(conn->tls,
connection_or_tls_renegotiated_cb,
conn);
- conn->_base.state = OR_CONN_STATE_TLS_SERVER_RENEGOTIATING;
+ connection_or_change_state(conn,
+ OR_CONN_STATE_TLS_SERVER_RENEGOTIATING);
} else if (handshakes == 2) {
/* v2 handshake, as a server. Two handshakes happened already,
* so we treat renegotiation as done.
@@ -1339,18 +1528,18 @@ connection_or_handle_event_cb(struct bufferevent *bufev, short event,
} else if (handshakes > 2) {
log_warn(LD_OR, "More than two handshakes done on connection. "
"Closing.");
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
} else {
log_warn(LD_BUG, "We were unexpectedly told that a connection "
"got %d handshakes. Closing.", handshakes);
- connection_mark_for_close(TO_CONN(conn));
+ connection_or_close_for_error(conn, 0);
}
return;
}
}
connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT);
if (connection_tls_finish_handshake(conn) < 0)
- connection_mark_for_close(TO_CONN(conn)); /* ???? */
+ connection_or_close_for_error(conn, 0); /* ???? */
return;
}
@@ -1372,7 +1561,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)
@@ -1380,29 +1570,6 @@ connection_or_nonopen_was_started_here(or_connection_t *conn)
return !tor_tls_is_server(conn->tls);
}
-/** Set the circid_type field of <b>conn</b> (which determines which part of
- * the circuit ID space we're willing to use) based on comparing our ID to
- * <b>identity_rcvd</b> */
-void
-connection_or_set_circid_type(or_connection_t *conn,
- crypto_pk_t *identity_rcvd)
-{
- const int started_here = connection_or_nonopen_was_started_here(conn);
- crypto_pk_t *our_identity =
- started_here ? get_tlsclient_identity_key() :
- get_server_identity_key();
-
- if (identity_rcvd) {
- if (crypto_pk_cmp_keys(our_identity, identity_rcvd)<0) {
- conn->circ_id_type = CIRC_ID_TYPE_LOWER;
- } else {
- conn->circ_id_type = CIRC_ID_TYPE_HIGHER;
- }
- } else {
- conn->circ_id_type = CIRC_ID_TYPE_NEITHER;
- }
-}
-
/** <b>Conn</b> just completed its handshake. Return 0 if all is well, and
* return -1 if he is lying, broken, or otherwise something is wrong.
*
@@ -1437,8 +1604,8 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
const or_options_t *options = get_options();
int severity = server_mode(options) ? LOG_PROTOCOL_WARN : LOG_WARN;
const char *safe_address =
- started_here ? conn->_base.address :
- safe_str_client(conn->_base.address);
+ started_here ? conn->base_.address :
+ safe_str_client(conn->base_.address);
const char *conn_type = started_here ? "outgoing" : "incoming";
int has_cert = 0;
@@ -1447,7 +1614,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
if (started_here && !has_cert) {
log_info(LD_HANDSHAKE,"Tried connecting to router at %s:%d, but it didn't "
"send a cert! Closing.",
- safe_address, conn->_base.port);
+ safe_address, conn->base_.port);
return -1;
} else if (!has_cert) {
log_debug(LD_HANDSHAKE,"Got incoming connection with no certificate. "
@@ -1461,7 +1628,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
if (started_here && v<0) {
log_fn(severity,LD_HANDSHAKE,"Tried connecting to router at %s:%d: It"
" has a cert but it's invalid. Closing.",
- safe_address, conn->_base.port);
+ safe_address, conn->base_.port);
return -1;
} else if (v<0) {
log_info(LD_HANDSHAKE,"Incoming connection gave us an invalid cert "
@@ -1469,7 +1636,7 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
} else {
log_debug(LD_HANDSHAKE,
"The certificate seems to be valid on %s connection "
- "with %s:%d", conn_type, safe_address, conn->_base.port);
+ "with %s:%d", conn_type, safe_address, conn->base_.port);
}
check_no_tls_errors();
}
@@ -1480,7 +1647,9 @@ connection_or_check_valid_tls_handshake(or_connection_t *conn,
memset(digest_rcvd_out, 0, DIGEST_LEN);
}
- connection_or_set_circid_type(conn, identity_rcvd);
+ tor_assert(conn->chan);
+ channel_set_circid_type(TLS_CHAN_TO_BASE(conn->chan), identity_rcvd, 1);
+
crypto_pk_free(identity_rcvd);
if (started_here)
@@ -1521,10 +1690,10 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
conn->identity_digest, DIGEST_LEN);
log_info(LD_HANDSHAKE, "Connected to router %s at %s:%d without knowing "
"its key. Hoping for the best.",
- conn->nickname, conn->_base.address, conn->_base.port);
+ conn->nickname, conn->base_.address, conn->base_.port);
/* if it's a bridge and we didn't know its identity fingerprint, now
* we do -- remember it for future attempts. */
- learned_router_identity(&conn->_base.addr, conn->_base.port,
+ learned_router_identity(&conn->base_.addr, conn->base_.port,
(const char*)peer_id);
}
@@ -1538,7 +1707,7 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
log_fn(severity, LD_HANDSHAKE,
"Tried connecting to router at %s:%d, but identity key was not "
"as expected: wanted %s but got %s.",
- conn->_base.address, conn->_base.port, expected, seen);
+ conn->base_.address, conn->base_.port, expected, seen);
entry_guard_register_connect_status(conn->identity_digest, 0, 1,
time(NULL));
control_event_or_conn_status(conn, OR_CONN_EVENT_FAILED,
@@ -1546,17 +1715,31 @@ connection_or_client_learned_peer_id(or_connection_t *conn,
if (!authdir_mode_tests_reachability(options))
control_event_bootstrap_problem(
"Unexpected identity in router certificate",
- END_OR_CONN_REASON_OR_IDENTITY);
+ END_OR_CONN_REASON_OR_IDENTITY,
+ conn);
return -1;
}
if (authdir_mode_tests_reachability(options)) {
- dirserv_orconn_tls_done(conn->_base.address, conn->_base.port,
+ dirserv_orconn_tls_done(&conn->base_.addr, conn->base_.port,
(const char*)peer_id);
}
return 0;
}
+/** Return when a client used this, for connection.c, since client_used
+ * is now one of the timestamps of channel_t */
+
+time_t
+connection_or_client_used(or_connection_t *conn)
+{
+ tor_assert(conn);
+
+ if (conn->chan) {
+ return channel_when_last_client(TLS_CHAN_TO_BASE(conn->chan));
+ } else return 0;
+}
+
/** The v1/v2 TLS handshake is finished.
*
* Make sure we are happy with the person we just handshaked with.
@@ -1576,34 +1759,34 @@ connection_tls_finish_handshake(or_connection_t *conn)
char digest_rcvd[DIGEST_LEN];
int started_here = connection_or_nonopen_was_started_here(conn);
- log_debug(LD_HANDSHAKE,"%s tls handshake on %p with %s done. verifying.",
+ log_debug(LD_HANDSHAKE,"%s tls handshake on %p with %s done, using "
+ "ciphersuite %s. verifying.",
started_here?"outgoing":"incoming",
conn,
- safe_str_client(conn->_base.address));
-
- directory_set_dirty();
+ safe_str_client(conn->base_.address),
+ tor_tls_get_ciphersuite_name(conn->tls));
if (connection_or_check_valid_tls_handshake(conn, started_here,
digest_rcvd) < 0)
return -1;
- circuit_build_times_network_is_live(&circ_times);
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
if (tor_tls_used_v1_handshake(conn->tls)) {
conn->link_proto = 1;
if (!started_here) {
- connection_or_init_conn_from_address(conn, &conn->_base.addr,
- conn->_base.port, digest_rcvd, 0);
+ connection_or_init_conn_from_address(conn, &conn->base_.addr,
+ conn->base_.port, digest_rcvd, 0);
}
tor_tls_block_renegotiation(conn->tls);
return connection_or_set_state_open(conn);
} else {
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V2;
+ connection_or_change_state(conn, OR_CONN_STATE_OR_HANDSHAKING_V2);
if (connection_init_or_handshake_state(conn, started_here) < 0)
return -1;
if (!started_here) {
- connection_or_init_conn_from_address(conn, &conn->_base.addr,
- conn->_base.port, digest_rcvd, 0);
+ connection_or_init_conn_from_address(conn, &conn->base_.addr,
+ conn->base_.port, digest_rcvd, 0);
}
return connection_or_send_versions(conn, 0);
}
@@ -1621,9 +1804,9 @@ connection_or_launch_v3_or_handshake(or_connection_t *conn)
tor_assert(connection_or_nonopen_was_started_here(conn));
tor_assert(tor_tls_received_v3_certificate(conn->tls));
- circuit_build_times_network_is_live(&circ_times);
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
- conn->_base.state = OR_CONN_STATE_OR_HANDSHAKING_V3;
+ connection_or_change_state(conn, OR_CONN_STATE_OR_HANDSHAKING_V3);
if (connection_init_or_handshake_state(conn, 1) < 0)
return -1;
@@ -1671,10 +1854,12 @@ or_handshake_state_free(or_handshake_state_t *state)
* authenticate cell.)
*/
void
-or_handshake_state_record_cell(or_handshake_state_t *state,
+or_handshake_state_record_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const cell_t *cell,
int incoming)
{
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
crypto_digest_t *d, **dptr;
packed_cell_t packed;
if (incoming) {
@@ -1696,8 +1881,8 @@ or_handshake_state_record_cell(or_handshake_state_t *state,
d = *dptr;
/* Re-packing like this is a little inefficient, but we don't have to do
this very often at all. */
- cell_pack(&packed, cell);
- crypto_digest_add_bytes(d, packed.body, sizeof(packed.body));
+ cell_pack(&packed, cell, conn->wide_circ_ids);
+ crypto_digest_add_bytes(d, packed.body, cell_network_size);
memwipe(&packed, 0, sizeof(packed));
}
@@ -1710,12 +1895,14 @@ or_handshake_state_record_cell(or_handshake_state_t *state,
* authenticate cell.)
*/
void
-or_handshake_state_record_var_cell(or_handshake_state_t *state,
+or_handshake_state_record_var_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const var_cell_t *cell,
int incoming)
{
crypto_digest_t *d, **dptr;
- char buf[VAR_CELL_HEADER_SIZE];
+ int n;
+ char buf[VAR_CELL_MAX_HEADER_SIZE];
if (incoming) {
if (!state->digest_received_data)
return;
@@ -1729,8 +1916,8 @@ or_handshake_state_record_var_cell(or_handshake_state_t *state,
d = *dptr;
- var_cell_pack_header(cell, buf);
- crypto_digest_add_bytes(d, buf, sizeof(buf));
+ n = var_cell_pack_header(cell, buf, conn->wide_circ_ids);
+ crypto_digest_add_bytes(d, buf, n);
crypto_digest_add_bytes(d, (const char *)cell->payload, cell->payload_len);
memwipe(buf, 0, sizeof(buf));
@@ -1742,35 +1929,9 @@ or_handshake_state_record_var_cell(or_handshake_state_t *state,
int
connection_or_set_state_open(or_connection_t *conn)
{
- int started_here = connection_or_nonopen_was_started_here(conn);
- time_t now = time(NULL);
- conn->_base.state = OR_CONN_STATE_OPEN;
+ connection_or_change_state(conn, OR_CONN_STATE_OPEN);
control_event_or_conn_status(conn, OR_CONN_EVENT_CONNECTED, 0);
- if (started_here) {
- circuit_build_times_network_is_live(&circ_times);
- rep_hist_note_connect_succeeded(conn->identity_digest, now);
- if (entry_guard_register_connect_status(conn->identity_digest,
- 1, 0, now) < 0) {
- /* Close any circuits pending on this conn. We leave it in state
- * 'open' though, because it didn't actually *fail* -- we just
- * chose not to use it. (Otherwise
- * connection_about_to_close_connection() will call a big pile of
- * functions to indicate we shouldn't try it again.) */
- log_debug(LD_OR, "New entry guard was reachable, but closing this "
- "connection so we can retry the earlier entry guards.");
- circuit_n_conn_done(conn, 0);
- return -1;
- }
- router_set_status(conn->identity_digest, 1);
- } else {
- /* only report it to the geoip module if it's not a known router */
- if (!router_get_by_id_digest(conn->identity_digest)) {
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &TO_CONN(conn)->addr,
- now);
- }
- }
-
or_handshake_state_free(conn->handshake_state);
conn->handshake_state = NULL;
IF_HAS_BUFFEREVENT(TO_CONN(conn), {
@@ -1779,8 +1940,6 @@ connection_or_set_state_open(or_connection_t *conn)
connection_start_reading(TO_CONN(conn));
}
- circuit_n_conn_done(conn, 1); /* send the pending creates, if any. */
-
return 0;
}
@@ -1792,16 +1951,21 @@ void
connection_or_write_cell_to_buf(const cell_t *cell, or_connection_t *conn)
{
packed_cell_t networkcell;
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
tor_assert(cell);
tor_assert(conn);
- cell_pack(&networkcell, cell);
+ cell_pack(&networkcell, cell, conn->wide_circ_ids);
- connection_write_to_buf(networkcell.body, CELL_NETWORK_SIZE, TO_CONN(conn));
+ connection_write_to_buf(networkcell.body, cell_network_size, TO_CONN(conn));
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
- or_handshake_state_record_cell(conn->handshake_state, cell, 0);
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
+
+ if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_cell(conn, conn->handshake_state, cell, 0);
if (cell->command != CELL_PADDING)
conn->timestamp_last_added_nonpadding = approx_time();
@@ -1815,17 +1979,22 @@ void
connection_or_write_var_cell_to_buf(const var_cell_t *cell,
or_connection_t *conn)
{
- char hdr[VAR_CELL_HEADER_SIZE];
+ int n;
+ char hdr[VAR_CELL_MAX_HEADER_SIZE];
tor_assert(cell);
tor_assert(conn);
- var_cell_pack_header(cell, hdr);
- connection_write_to_buf(hdr, sizeof(hdr), TO_CONN(conn));
+ n = var_cell_pack_header(cell, hdr, conn->wide_circ_ids);
+ connection_write_to_buf(hdr, n, TO_CONN(conn));
connection_write_to_buf((char*)cell->payload,
cell->payload_len, TO_CONN(conn));
- if (conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
- or_handshake_state_record_var_cell(conn->handshake_state, cell, 0);
+ if (conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3)
+ or_handshake_state_record_var_cell(conn, conn->handshake_state, cell, 0);
if (cell->command != CELL_PADDING)
conn->timestamp_last_added_nonpadding = approx_time();
+
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
}
/** See whether there's a variable-length cell waiting on <b>or_conn</b>'s
@@ -1856,59 +2025,48 @@ connection_or_process_cells_from_inbuf(or_connection_t *conn)
while (1) {
log_debug(LD_OR,
- "%d: starting, inbuf_datalen %d (%d pending in tls object).",
- conn->_base.s,(int)connection_get_inbuf_len(TO_CONN(conn)),
+ TOR_SOCKET_T_FORMAT": starting, inbuf_datalen %d "
+ "(%d pending in tls object).",
+ conn->base_.s,(int)connection_get_inbuf_len(TO_CONN(conn)),
tor_tls_get_pending_bytes(conn->tls));
if (connection_fetch_var_cell_from_buf(conn, &var_cell)) {
if (!var_cell)
return 0; /* not yet. */
- circuit_build_times_network_is_live(&circ_times);
- command_process_var_cell(var_cell, conn);
+
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
+
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
+ channel_tls_handle_var_cell(var_cell, conn);
var_cell_free(var_cell);
} else {
- char buf[CELL_NETWORK_SIZE];
+ const int wide_circ_ids = conn->wide_circ_ids;
+ size_t cell_network_size = get_cell_network_size(conn->wide_circ_ids);
+ char buf[CELL_MAX_NETWORK_SIZE];
cell_t cell;
if (connection_get_inbuf_len(TO_CONN(conn))
- < CELL_NETWORK_SIZE) /* whole response available? */
+ < cell_network_size) /* whole response available? */
return 0; /* not yet */
- circuit_build_times_network_is_live(&circ_times);
- connection_fetch_from_buf(buf, CELL_NETWORK_SIZE, TO_CONN(conn));
+ /* Touch the channel's active timestamp if there is one */
+ if (conn->chan)
+ channel_timestamp_active(TLS_CHAN_TO_BASE(conn->chan));
+
+ circuit_build_times_network_is_live(get_circuit_build_times_mutable());
+ connection_fetch_from_buf(buf, cell_network_size, TO_CONN(conn));
/* retrieve cell info from buf (create the host-order struct from the
* network-order string) */
- cell_unpack(&cell, buf);
+ cell_unpack(&cell, buf, wide_circ_ids);
- command_process_cell(&cell, conn);
+ channel_tls_handle_cell(&cell, conn);
}
}
}
-/** Write a destroy cell with circ ID <b>circ_id</b> and reason <b>reason</b>
- * onto OR connection <b>conn</b>. Don't perform range-checking on reason:
- * we may want to propagate reasons from other cells.
- *
- * Return 0.
- */
-int
-connection_or_send_destroy(circid_t circ_id, or_connection_t *conn, int reason)
-{
- cell_t cell;
-
- tor_assert(conn);
-
- memset(&cell, 0, sizeof(cell_t));
- cell.circ_id = circ_id;
- cell.command = CELL_DESTROY;
- cell.payload[0] = (uint8_t) reason;
- log_debug(LD_OR,"Sending destroy (circID %d).", circ_id);
-
- connection_or_write_cell_to_buf(&cell, conn);
- return 0;
-}
-
/** Array of recognized link protocol versions. */
-static const uint16_t or_protocol_versions[] = { 1, 2, 3 };
+static const uint16_t or_protocol_versions[] = { 1, 2, 3, 4 };
/** Number of versions in <b>or_protocol_versions</b>. */
static const int n_or_protocol_versions =
(int)( sizeof(or_protocol_versions)/sizeof(uint16_t) );
@@ -1975,19 +2133,26 @@ connection_or_send_netinfo(or_connection_t *conn)
tor_assert(conn->handshake_state);
+ if (conn->handshake_state->sent_netinfo) {
+ log_warn(LD_BUG, "Attempted to send an extra netinfo cell on a connection "
+ "where we already sent one.");
+ return 0;
+ }
+
memset(&cell, 0, sizeof(cell_t));
cell.command = CELL_NETINFO;
- /* Timestamp. */
- set_uint32(cell.payload, htonl((uint32_t)now));
+ /* Timestamp, if we're a relay. */
+ if (public_server_mode(get_options()) || ! conn->is_outgoing)
+ set_uint32(cell.payload, htonl((uint32_t)now));
/* Their address. */
out = cell.payload + 4;
/* We use &conn->real_addr below, unless it hasn't yet been set. If it
- * hasn't yet been set, we know that _base.addr hasn't been tampered with
+ * hasn't yet been set, we know that base_.addr hasn't been tampered with
* yet either. */
len = append_address_to_payload(out, !tor_addr_is_null(&conn->real_addr)
- ? &conn->real_addr : &conn->_base.addr);
+ ? &conn->real_addr : &conn->base_.addr);
if (len<0)
return -1;
out += len;
@@ -1998,17 +2163,25 @@ connection_or_send_netinfo(or_connection_t *conn)
if ((public_server_mode(get_options()) || !conn->is_outgoing) &&
(me = router_get_my_routerinfo())) {
tor_addr_t my_addr;
- *out++ = 1; /* only one address is supported. */
+ *out++ = 1 + !tor_addr_is_null(&me->ipv6_addr);
tor_addr_from_ipv4h(&my_addr, me->addr);
len = append_address_to_payload(out, &my_addr);
if (len < 0)
return -1;
+ out += len;
+
+ if (!tor_addr_is_null(&me->ipv6_addr)) {
+ len = append_address_to_payload(out, &me->ipv6_addr);
+ if (len < 0)
+ return -1;
+ }
} else {
*out = 0;
}
conn->handshake_state->digest_sent_data = 0;
+ conn->handshake_state->sent_netinfo = 1;
connection_or_write_cell_to_buf(&cell, conn);
return 0;
@@ -2027,7 +2200,7 @@ connection_or_send_certs_cell(or_connection_t *conn)
ssize_t pos;
int server_mode;
- tor_assert(conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
+ tor_assert(conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
if (! conn->handshake_state)
return -1;
@@ -2074,7 +2247,7 @@ connection_or_send_auth_challenge_cell(or_connection_t *conn)
var_cell_t *cell;
uint8_t *cp;
uint8_t challenge[OR_AUTH_CHALLENGE_LEN];
- tor_assert(conn->_base.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
+ tor_assert(conn->base_.state == OR_CONN_STATE_OR_HANDSHAKING_V3);
if (! conn->handshake_state)
return -1;
@@ -2137,7 +2310,7 @@ connection_or_compute_authenticate_cell_body(or_connection_t *conn,
const tor_cert_t *id_cert=NULL, *link_cert=NULL;
const digests_t *my_digests, *their_digests;
const uint8_t *my_id, *their_id, *client_id, *server_id;
- if (tor_tls_get_my_certs(0, &link_cert, &id_cert))
+ if (tor_tls_get_my_certs(server, &link_cert, &id_cert))
return -1;
my_digests = tor_cert_get_id_digests(id_cert);
their_digests = tor_cert_get_id_digests(conn->handshake_state->id_cert);
@@ -2205,19 +2378,11 @@ connection_or_compute_authenticate_cell_body(or_connection_t *conn,
if (server)
return V3_AUTH_FIXED_PART_LEN; // ptr-out
- /* Time: 8 octets. */
- {
- uint64_t now = time(NULL);
- if ((time_t)now < 0)
- return -1;
- set_uint32(ptr, htonl((uint32_t)(now>>32)));
- set_uint32(ptr+4, htonl((uint32_t)now));
- ptr += 8;
- }
-
- /* Nonce: 16 octets. */
- crypto_rand((char*)ptr, 16);
- ptr += 16;
+ /* 8 octets were reserved for the current time, but we're trying to get out
+ * of the habit of sending time around willynilly. Fortunately, nothing
+ * checks it. That's followed by 16 bytes of nonce. */
+ crypto_rand((char*)ptr, 24);
+ ptr += 24;
tor_assert(ptr - out == V3_AUTH_BODY_LEN);
diff --git a/src/or/connection_or.h b/src/or/connection_or.h
index b78c44492..8d9302893 100644
--- a/src/or/connection_or.h
+++ b/src/or/connection_or.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for connection_or.c.
**/
-#ifndef _TOR_CONNECTION_OR_H
-#define _TOR_CONNECTION_OR_H
+#ifndef TOR_CONNECTION_OR_H
+#define TOR_CONNECTION_OR_H
void connection_or_remove_from_identity_map(or_connection_t *conn);
void connection_or_clear_identity_map(void);
@@ -34,12 +34,19 @@ void connection_or_update_token_buckets(smartlist_t *conns,
void connection_or_connect_failed(or_connection_t *conn,
int reason, const char *msg);
+void connection_or_notify_error(or_connection_t *conn,
+ int reason, const char *msg);
or_connection_t *connection_or_connect(const tor_addr_t *addr, uint16_t port,
- const char *id_digest);
+ const char *id_digest,
+ channel_tls_t *chan);
+
+void connection_or_close_normally(or_connection_t *orconn, int flush);
+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,
@@ -51,13 +58,15 @@ void connection_or_init_conn_from_address(or_connection_t *conn,
int started_here);
int connection_or_client_learned_peer_id(or_connection_t *conn,
const uint8_t *peer_id);
-void connection_or_set_circid_type(or_connection_t *conn,
- crypto_pk_t *identity_rcvd);
+time_t connection_or_client_used(or_connection_t *conn);
+int connection_or_get_num_circuits(or_connection_t *conn);
void or_handshake_state_free(or_handshake_state_t *state);
-void or_handshake_state_record_cell(or_handshake_state_t *state,
+void or_handshake_state_record_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const cell_t *cell,
int incoming);
-void or_handshake_state_record_var_cell(or_handshake_state_t *state,
+void or_handshake_state_record_var_cell(or_connection_t *conn,
+ or_handshake_state_t *state,
const var_cell_t *cell,
int incoming);
@@ -66,8 +75,6 @@ void connection_or_write_cell_to_buf(const cell_t *cell,
or_connection_t *conn);
void connection_or_write_var_cell_to_buf(const var_cell_t *cell,
or_connection_t *conn);
-int connection_or_send_destroy(circid_t circ_id, or_connection_t *conn,
- int reason);
int connection_or_send_versions(or_connection_t *conn, int v3_plus);
int connection_or_send_netinfo(or_connection_t *conn);
int connection_or_send_certs_cell(or_connection_t *conn);
@@ -80,10 +87,14 @@ int connection_or_send_authenticate_cell(or_connection_t *conn, int type);
int is_or_protocol_version_known(uint16_t version);
-void cell_pack(packed_cell_t *dest, const cell_t *src);
-void var_cell_pack_header(const var_cell_t *cell, char *hdr_out);
+void cell_pack(packed_cell_t *dest, const cell_t *src, int wide_circ_ids);
+int var_cell_pack_header(const var_cell_t *cell, char *hdr_out,
+ int wide_circ_ids);
var_cell_t *var_cell_new(uint16_t payload_len);
void var_cell_free(var_cell_t *cell);
+/** DOCDOC */
+#define MIN_LINK_PROTO_FOR_WIDE_CIRC_IDS 4
+
#endif
diff --git a/src/or/control.c b/src/or/control.c
index 913d18a7f..21504e685 100644..100755
--- a/src/or/control.c
+++ b/src/or/control.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,11 +11,17 @@
#define CONTROL_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuitstats.h"
#include "circuituse.h"
+#include "command.h"
#include "config.h"
+#include "confparse.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
@@ -23,6 +29,7 @@
#include "directory.h"
#include "dirserv.h"
#include "dnsserv.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
@@ -46,46 +53,13 @@
* finished authentication and is accepting commands. */
#define STATE_IS_OPEN(s) ((s) == CONTROL_CONN_STATE_OPEN)
-/* Recognized asynchronous event types. It's okay to expand this list
- * because it is used both as a list of v0 event types, and as indices
- * into the bitfield to determine which controllers want which events.
- */
-#define _EVENT_MIN 0x0001
-#define EVENT_CIRCUIT_STATUS 0x0001
-#define EVENT_STREAM_STATUS 0x0002
-#define EVENT_OR_CONN_STATUS 0x0003
-#define EVENT_BANDWIDTH_USED 0x0004
-#define EVENT_CIRCUIT_STATUS_MINOR 0x0005
-#define EVENT_NEW_DESC 0x0006
-#define EVENT_DEBUG_MSG 0x0007
-#define EVENT_INFO_MSG 0x0008
-#define EVENT_NOTICE_MSG 0x0009
-#define EVENT_WARN_MSG 0x000A
-#define EVENT_ERR_MSG 0x000B
-#define EVENT_ADDRMAP 0x000C
-// #define EVENT_AUTHDIR_NEWDESCS 0x000D
-#define EVENT_DESCCHANGED 0x000E
-// #define EVENT_NS 0x000F
-#define EVENT_STATUS_CLIENT 0x0010
-#define EVENT_STATUS_SERVER 0x0011
-#define EVENT_STATUS_GENERAL 0x0012
-#define EVENT_GUARD 0x0013
-#define EVENT_STREAM_BANDWIDTH_USED 0x0014
-#define EVENT_CLIENTS_SEEN 0x0015
-#define EVENT_NEWCONSENSUS 0x0016
-#define EVENT_BUILDTIMEOUT_SET 0x0017
-#define EVENT_SIGNAL 0x0018
-#define EVENT_CONF_CHANGED 0x0019
-#define _EVENT_MAX 0x0019
-/* If _EVENT_MAX ever hits 0x0020, we need to make the mask wider. */
-
/** Bitfield: The bit 1&lt;&lt;e is set if <b>any</b> open control
* connection is interested in events of type <b>e</b>. We use this
* so that we can decide to skip generating event messages that nobody
* has interest in without having to walk over the global connection
* list to find out.
**/
-typedef uint32_t event_mask_t;
+typedef uint64_t event_mask_t;
/** An event mask of all the events that any controller is interested in
* receiving. */
@@ -97,7 +71,7 @@ static int disable_log_messages = 0;
/** Macro: true if any control connection is interested in events of type
* <b>e</b>. */
#define EVENT_IS_INTERESTING(e) \
- (global_event_mask & (1<<(e)))
+ (!! (global_event_mask & (((uint64_t)1)<<(e))))
/** If we're using cookie-type authentication, how long should our cookies be?
*/
@@ -109,7 +83,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"
@@ -124,15 +98,6 @@ static char authentication_cookie[AUTHENTICATION_COOKIE_LEN];
* of this so we can respond to getinfo status/bootstrap-phase queries. */
static char last_sent_bootstrap_message[BOOTSTRAP_MSG_LEN];
-/** Flag for event_format_t. Indicates that we should use the one standard
- format.
- */
-#define ALL_FORMATS 1
-
-/** Bit field of flags to select how to format a controller event. Recognized
- * flag is ALL_FORMATS. */
-typedef int event_format_t;
-
static void connection_printf_to_buf(control_connection_t *conn,
const char *format, ...)
CHECK_PRINTF(2,3);
@@ -195,7 +160,6 @@ static int write_stream_target_to_buf(entry_connection_t *conn, char *buf,
size_t len);
static void orconn_target_get_name(char *buf, size_t len,
or_connection_t *conn);
-static char *get_cookie_file(void);
/** Given a control event code for a message event, return the corresponding
* log severity. */
@@ -226,6 +190,20 @@ log_severity_to_event(int severity)
}
}
+/** Helper: clear bandwidth counters of all origin circuits. */
+static void
+clear_circ_bw_fields(void)
+{
+ circuit_t *circ;
+ origin_circuit_t *ocirc;
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ if (!CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ ocirc->n_written_circ_bw = ocirc->n_read_circ_bw = 0;
+ }
+}
+
/** Set <b>global_event_mask*</b> to the bitwise OR of each live control
* connection's event_mask field. */
void
@@ -251,8 +229,8 @@ control_update_global_event_mask(void)
* we want to hear...*/
control_adjust_event_log_severity();
- /* ...then, if we've started logging stream bw, clear the appropriate
- * fields. */
+ /* ...then, if we've started logging stream or circ bw, clear the
+ * appropriate fields. */
if (! (old_mask & EVENT_STREAM_BANDWIDTH_USED) &&
(new_mask & EVENT_STREAM_BANDWIDTH_USED)) {
SMARTLIST_FOREACH(conns, connection_t *, conn,
@@ -263,6 +241,10 @@ control_update_global_event_mask(void)
}
});
}
+ if (! (old_mask & EVENT_CIRC_BANDWIDTH_USED) &&
+ (new_mask & EVENT_CIRC_BANDWIDTH_USED)) {
+ clear_circ_bw_fields();
+ }
}
/** Adjust the log severities that result in control_event_logmsg being called
@@ -328,7 +310,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;
@@ -376,7 +358,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;
@@ -586,13 +568,13 @@ send_control_done(control_connection_t *conn)
*
* The EXTENDED_FORMAT and NONEXTENDED_FORMAT flags behave similarly with
* respect to the EXTENDED_EVENTS feature. */
-static void
-send_control_event_string(uint16_t event, event_format_t which,
- const char *msg)
+MOCK_IMPL(STATIC void,
+send_control_event_string,(uint16_t event, event_format_t which,
+ const char *msg))
{
smartlist_t *conns = get_connection_array();
(void)which;
- tor_assert(event >= _EVENT_MIN && event <= _EVENT_MAX);
+ tor_assert(event >= EVENT_MIN_ && event <= EVENT_MAX_);
SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
if (conn->type == CONN_TYPE_CONTROL &&
@@ -952,6 +934,12 @@ static const struct control_event_t control_event_table[] = {
{ EVENT_BUILDTIMEOUT_SET, "BUILDTIMEOUT_SET" },
{ EVENT_SIGNAL, "SIGNAL" },
{ EVENT_CONF_CHANGED, "CONF_CHANGED"},
+ { EVENT_CONN_BW, "CONN_BW" },
+ { EVENT_CELL_STATS, "CELL_STATS" },
+ { EVENT_TB_EMPTY, "TB_EMPTY" },
+ { EVENT_CIRC_BANDWIDTH_USED, "CIRC_BW" },
+ { EVENT_TRANSPORT_LAUNCHED, "TRANSPORT_LAUNCHED" },
+ { EVENT_HS_DESC, "HS_DESC" },
{ 0, NULL },
};
@@ -1215,9 +1203,10 @@ handle_control_authenticate(control_connection_t *conn, uint32_t len,
connection_mark_for_close(TO_CONN(conn));
return 0;
ok:
- log_info(LD_CONTROL, "Authenticated control connection (%d)", conn->_base.s);
+ log_info(LD_CONTROL, "Authenticated control connection ("TOR_SOCKET_T_FORMAT
+ ")", conn->base_.s);
send_control_done(conn);
- conn->_base.state = CONTROL_CONN_STATE_OPEN;
+ conn->base_.state = CONTROL_CONN_STATE_OPEN;
tor_free(password);
if (sl) { /* clean up */
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
@@ -1243,6 +1232,27 @@ handle_control_saveconf(control_connection_t *conn, uint32_t len,
return 0;
}
+struct signal_t {
+ int sig;
+ const char *signal_name;
+};
+
+static const struct signal_t signal_table[] = {
+ { SIGHUP, "RELOAD" },
+ { SIGHUP, "HUP" },
+ { SIGINT, "SHUTDOWN" },
+ { SIGUSR1, "DUMP" },
+ { SIGUSR1, "USR1" },
+ { SIGUSR2, "DEBUG" },
+ { SIGUSR2, "USR2" },
+ { SIGTERM, "HALT" },
+ { SIGTERM, "TERM" },
+ { SIGTERM, "INT" },
+ { SIGNEWNYM, "NEWNYM" },
+ { SIGCLEARDNSCACHE, "CLEARDNSCACHE"},
+ { 0, NULL },
+};
+
/** Called when we get a SIGNAL command. React to the provided signal, and
* report success or failure. (If the signal results in a shutdown, success
* may not be reported.) */
@@ -1250,7 +1260,8 @@ static int
handle_control_signal(control_connection_t *conn, uint32_t len,
const char *body)
{
- int sig;
+ int sig = -1;
+ int i;
int n = 0;
char *s;
@@ -1259,27 +1270,19 @@ handle_control_signal(control_connection_t *conn, uint32_t len,
while (body[n] && ! TOR_ISSPACE(body[n]))
++n;
s = tor_strndup(body, n);
- if (!strcasecmp(s, "RELOAD") || !strcasecmp(s, "HUP"))
- sig = SIGHUP;
- else if (!strcasecmp(s, "SHUTDOWN") || !strcasecmp(s, "INT"))
- sig = SIGINT;
- else if (!strcasecmp(s, "DUMP") || !strcasecmp(s, "USR1"))
- sig = SIGUSR1;
- else if (!strcasecmp(s, "DEBUG") || !strcasecmp(s, "USR2"))
- sig = SIGUSR2;
- else if (!strcasecmp(s, "HALT") || !strcasecmp(s, "TERM"))
- sig = SIGTERM;
- else if (!strcasecmp(s, "NEWNYM"))
- sig = SIGNEWNYM;
- else if (!strcasecmp(s, "CLEARDNSCACHE"))
- sig = SIGCLEARDNSCACHE;
- else {
+
+ for (i = 0; signal_table[i].signal_name != NULL; ++i) {
+ if (!strcasecmp(s, signal_table[i].signal_name)) {
+ sig = signal_table[i].sig;
+ break;
+ }
+ }
+
+ if (sig < 0)
connection_printf_to_buf(conn, "552 Unrecognized signal code \"%s\"\r\n",
s);
- sig = -1;
- }
tor_free(s);
- if (sig<0)
+ if (sig < 0)
return 0;
send_control_done(conn);
@@ -1306,7 +1309,7 @@ handle_control_takeownership(control_connection_t *conn, uint32_t len,
log_info(LD_CONTROL, "Control connection %d has taken ownership of this "
"Tor instance.",
- (int)(conn->_base.s));
+ (int)(conn->base_.s));
send_control_done(conn);
return 0;
@@ -1352,10 +1355,13 @@ handle_control_mapaddress(control_connection_t *conn, uint32_t len,
"512-syntax error: invalid address '%s'", to);
log_warn(LD_CONTROL,
"Skipping invalid argument '%s' in MapAddress msg", to);
- } else if (!strcmp(from, ".") || !strcmp(from, "0.0.0.0")) {
+ } else if (!strcmp(from, ".") || !strcmp(from, "0.0.0.0") ||
+ !strcmp(from, "::")) {
+ const char type =
+ !strcmp(from,".") ? RESOLVED_TYPE_HOSTNAME :
+ (!strcmp(from, "0.0.0.0") ? RESOLVED_TYPE_IPV4 : RESOLVED_TYPE_IPV6);
const char *address = addressmap_register_virtual_address(
- !strcmp(from,".") ? RESOLVED_TYPE_HOSTNAME : RESOLVED_TYPE_IPV4,
- tor_strdup(to));
+ type, tor_strdup(to));
if (!address) {
smartlist_add_asprintf(reply,
"451-resource exhausted: skipping '%s'", line);
@@ -1423,7 +1429,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
} else if (!strcmp(question, "config-defaults-file")) {
*answer = tor_strdup(get_torrc_fname(1));
} else if (!strcmp(question, "config-text")) {
- *answer = options_dump(get_options(), 1);
+ *answer = options_dump(get_options(), OPTIONS_DUMP_MINIMAL);
} else if (!strcmp(question, "info/names")) {
*answer = list_getinfo_options();
} else if (!strcmp(question, "dormant")) {
@@ -1440,6 +1446,16 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
*answer = smartlist_join_strings(event_names, " ", 0, NULL);
smartlist_free(event_names);
+ } else if (!strcmp(question, "signal/names")) {
+ smartlist_t *signal_names = smartlist_new();
+ int j;
+ for (j = 0; signal_table[j].signal_name != NULL; ++j) {
+ smartlist_add(signal_names, (char*)signal_table[j].signal_name);
+ }
+
+ *answer = smartlist_join_strings(signal_names, " ", 0, NULL);
+
+ smartlist_free(signal_names);
} else if (!strcmp(question, "features/names")) {
*answer = tor_strdup("VERBOSE_NAMES EXTENDED_EVENTS");
} else if (!strcmp(question, "address")) {
@@ -1475,7 +1491,7 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
*answer = tor_strdup("");
#else
int myUid = geteuid();
- struct passwd *myPwEntry = getpwuid(myUid);
+ const struct passwd *myPwEntry = tor_getpwuid(myUid);
if (myPwEntry) {
*answer = tor_strdup(myPwEntry->pw_name);
@@ -1487,6 +1503,9 @@ getinfo_helper_misc(control_connection_t *conn, const char *question,
int max_fds=-1;
set_max_file_descriptors(0, &max_fds);
tor_asprintf(answer, "%d", max_fds);
+ } else if (!strcmp(question, "limits/max-mem-in-queues")) {
+ tor_asprintf(answer, U64_FORMAT,
+ U64_PRINTF_ARG(get_options()->MaxMemInQueues));
} else if (!strcmp(question, "dir-usage")) {
*answer = directory_dump_request_log();
} else if (!strcmp(question, "fingerprint")) {
@@ -1533,12 +1552,13 @@ munge_extrainfo_into_routerinfo(const char *ri_body,
outp += router_sig-ri_body;
for (i=0; i < 2; ++i) {
- const char *kwd = i?"\nwrite-history ":"\nread-history ";
+ const char *kwd = i ? "\nwrite-history " : "\nread-history ";
const char *cp, *eol;
if (!(cp = tor_memstr(ei_body, ei_len, kwd)))
continue;
++cp;
- eol = memchr(cp, '\n', ei_len - (cp-ei_body));
+ if (!(eol = memchr(cp, '\n', ei_len - (cp-ei_body))))
+ continue;
memcpy(outp, cp, eol-cp+1);
outp += eol-cp+1;
}
@@ -1614,10 +1634,13 @@ getinfo_helper_dir(control_connection_t *control_conn,
const char *question, char **answer,
const char **errmsg)
{
- const routerinfo_t *ri;
+ const node_t *node;
+ const routerinfo_t *ri = NULL;
(void) control_conn;
if (!strcmpstart(question, "desc/id/")) {
- ri = router_get_by_hexdigest(question+strlen("desc/id/"));
+ node = node_get_by_hex_id(question+strlen("desc/id/"));
+ if (node)
+ ri = node->ri;
if (ri) {
const char *body = signed_descriptor_get_body(&ri->cache_info);
if (body)
@@ -1626,7 +1649,9 @@ getinfo_helper_dir(control_connection_t *control_conn,
} else if (!strcmpstart(question, "desc/name/")) {
/* XXX023 Setting 'warn_if_unnamed' here is a bit silly -- the
* warning goes to the user, not to the controller. */
- ri = router_get_by_nickname(question+strlen("desc/name/"),1);
+ node = node_get_by_nickname(question+strlen("desc/name/"), 1);
+ if (node)
+ ri = node->ri;
if (ri) {
const char *body = signed_descriptor_get_body(&ri->cache_info);
if (body)
@@ -1672,8 +1697,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
const node_t *node = node_get_by_hex_id(question+strlen("md/id/"));
const microdesc_t *md = NULL;
if (node) md = node->md;
- if (md) {
- tor_assert(md->body);
+ if (md && md->body) {
*answer = tor_strndup(md->body, md->bodylen);
}
} else if (!strcmpstart(question, "md/name/")) {
@@ -1683,13 +1707,13 @@ getinfo_helper_dir(control_connection_t *control_conn,
/* XXXX duplicated code */
const microdesc_t *md = NULL;
if (node) md = node->md;
- if (md) {
- tor_assert(md->body);
+ if (md && md->body) {
*answer = tor_strndup(md->body, md->bodylen);
}
} else if (!strcmpstart(question, "desc-annotations/id/")) {
- ri = router_get_by_hexdigest(question+
- strlen("desc-annotations/id/"));
+ node = node_get_by_hex_id(question+strlen("desc-annotations/id/"));
+ if (node)
+ ri = node->ri;
if (ri) {
const char *annotations =
signed_descriptor_get_annotations(&ri->cache_info);
@@ -1726,39 +1750,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
tor_free(url);
smartlist_free(descs);
} else if (!strcmpstart(question, "dir/status/")) {
- if (directory_permits_controller_requests(get_options())) {
- size_t len=0;
- char *cp;
- smartlist_t *status_list = smartlist_new();
- dirserv_get_networkstatus_v2(status_list,
- question+strlen("dir/status/"));
- SMARTLIST_FOREACH(status_list, cached_dir_t *, d, len += d->dir_len);
- cp = *answer = tor_malloc(len+1);
- SMARTLIST_FOREACH(status_list, cached_dir_t *, d, {
- memcpy(cp, d->dir, d->dir_len);
- cp += d->dir_len;
- });
- *cp = '\0';
- smartlist_free(status_list);
- } else {
- smartlist_t *fp_list = smartlist_new();
- smartlist_t *status_list = smartlist_new();
- dirserv_get_networkstatus_v2_fingerprints(
- fp_list, question+strlen("dir/status/"));
- SMARTLIST_FOREACH(fp_list, const char *, fp, {
- char *s;
- char *fname = networkstatus_get_cache_filename(fp);
- s = read_file_to_str(fname, 0, NULL);
- if (s)
- smartlist_add(status_list, s);
- tor_free(fname);
- });
- SMARTLIST_FOREACH(fp_list, char *, fp, tor_free(fp));
- smartlist_free(fp_list);
- *answer = smartlist_join_strings(status_list, "", 0, NULL);
- SMARTLIST_FOREACH(status_list, char *, s, tor_free(s));
- smartlist_free(status_list);
- }
+ *answer = tor_strdup("");
} else if (!strcmp(question, "dir/status-vote/current/consensus")) { /* v3 */
if (directory_caches_dir_info(get_options())) {
const cached_dir_t *consensus = dirserv_get_consensus("ns");
@@ -1847,11 +1839,11 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
}
smartlist_add_asprintf(descparts, "PURPOSE=%s",
- circuit_purpose_to_controller_string(circ->_base.purpose));
+ circuit_purpose_to_controller_string(circ->base_.purpose));
{
const char *hs_state =
- circuit_purpose_to_controller_hs_state_string(circ->_base.purpose);
+ circuit_purpose_to_controller_hs_state_string(circ->base_.purpose);
if (hs_state != NULL) {
smartlist_add_asprintf(descparts, "HS_STATE=%s", hs_state);
@@ -1865,7 +1857,7 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
{
char tbuf[ISO_TIME_USEC_LEN+1];
- format_iso_time_nospace_usec(tbuf, &circ->_base.timestamp_created);
+ format_iso_time_nospace_usec(tbuf, &circ->base_.timestamp_created);
smartlist_add_asprintf(descparts, "TIME_CREATED=%s", tbuf);
}
@@ -1889,7 +1881,7 @@ getinfo_helper_events(control_connection_t *control_conn,
if (!strcmp(question, "circuit-status")) {
circuit_t *circ_;
smartlist_t *status = smartlist_new();
- for (circ_ = _circuit_get_global_list(); circ_; circ_ = circ_->next) {
+ TOR_LIST_FOREACH(circ_, circuit_get_global_list(), head) {
origin_circuit_t *circ;
char *circdesc;
const char *state;
@@ -1897,7 +1889,7 @@ getinfo_helper_events(control_connection_t *control_conn,
continue;
circ = TO_ORIGIN_CIRCUIT(circ_);
- if (circ->_base.state == CIRCUIT_STATE_OPEN)
+ if (circ->base_.state == CIRCUIT_STATE_OPEN)
state = "BUILT";
else if (circ->cpath)
state = "EXTENDED";
@@ -1974,7 +1966,7 @@ getinfo_helper_events(control_connection_t *control_conn,
if (base_conn->type != CONN_TYPE_OR || base_conn->marked_for_close)
continue;
conn = TO_OR_CONN(base_conn);
- if (conn->_base.state == OR_CONN_STATE_OPEN)
+ if (conn->base_.state == OR_CONN_STATE_OPEN)
state = "CONNECTED";
else if (conn->nickname)
state = "LAUNCHED";
@@ -2130,10 +2122,14 @@ static const getinfo_item_t getinfo_items[] = {
PREFIX("config/", config, "Current configuration values."),
DOC("config/names",
"List of configuration options, types, and documentation."),
+ DOC("config/defaults",
+ "List of default values for configuration options. "
+ "See also config/names"),
ITEM("info/names", misc,
"List of GETINFO options, types, and documentation."),
ITEM("events/names", misc,
"Events that the controller can ask for with SETEVENTS."),
+ ITEM("signal/names", misc, "Signal names recognized by the SIGNAL command"),
ITEM("features/names", misc, "What arguments can USEFEATURE take?"),
PREFIX("desc/id/", dir, "Router descriptors by ID."),
PREFIX("desc/name/", dir, "Router descriptors by nickname."),
@@ -2190,6 +2186,7 @@ static const getinfo_item_t getinfo_items[] = {
ITEM("process/user", misc,
"Username under which the tor process is running."),
ITEM("process/descriptor-limit", misc, "File descriptor limit."),
+ ITEM("limits/max-mem-in-queues", misc, "Actual limit on memory in queues"),
ITEM("dir-usage", misc, "Breakdown of bytes transferred over DirPort."),
PREFIX("desc-annotations/id/", dir, "Router annotations by hexdigest."),
PREFIX("dir/server/", dir,"Router descriptors as retrieved from a DirPort."),
@@ -2199,6 +2196,9 @@ static const getinfo_item_t getinfo_items[] = {
"v3 Networkstatus consensus as retrieved from a DirPort."),
ITEM("exit-policy/default", policies,
"The default value appended to the configured exit policy."),
+ ITEM("exit-policy/full", policies, "The entire exit policy of onion router"),
+ ITEM("exit-policy/ipv4", policies, "IPv4 parts of exit policy"),
+ ITEM("exit-policy/ipv6", policies, "IPv6 parts of exit policy"),
PREFIX("ip-to-country/", geoip, "Perform a GEOIP lookup"),
{ NULL, NULL, NULL, 0 }
};
@@ -2497,7 +2497,7 @@ handle_control_extendcircuit(control_connection_t *conn, uint32_t len,
goto done;
}
} else {
- if (circ->_base.state == CIRCUIT_STATE_OPEN) {
+ if (circ->base_.state == CIRCUIT_STATE_OPEN) {
int err_reason = 0;
circuit_set_state(TO_CIRCUIT(circ), CIRCUIT_STATE_BUILDING);
if ((err_reason = circuit_send_next_onion_skin(circ)) < 0) {
@@ -2630,7 +2630,7 @@ handle_control_attachstream(control_connection_t *conn, uint32_t len,
TO_CONN(edge_conn)->state = AP_CONN_STATE_CONTROLLER_WAIT;
}
- if (circ && (circ->_base.state != CIRCUIT_STATE_OPEN)) {
+ if (circ && (circ->base_.state != CIRCUIT_STATE_OPEN)) {
connection_write_str_to_buf(
"551 Can't attach stream to non-open origin circuit\r\n",
conn);
@@ -2895,7 +2895,7 @@ handle_control_resolve(control_connection_t *conn, uint32_t len,
failed = smartlist_new();
SMARTLIST_FOREACH(args, const char *, arg, {
if (!is_keyval_pair(arg)) {
- if (dnsserv_launch_request(arg, is_reverse)<0)
+ if (dnsserv_launch_request(arg, is_reverse, conn)<0)
smartlist_add(failed, (char*)arg);
}
});
@@ -2903,7 +2903,7 @@ handle_control_resolve(control_connection_t *conn, uint32_t len,
send_control_done(conn);
SMARTLIST_FOREACH(failed, const char *, arg, {
control_event_address_mapped(arg, arg, time(NULL),
- "Unable to launch resolve request");
+ "internal", 0);
});
SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
@@ -2943,7 +2943,7 @@ handle_control_protocolinfo(control_connection_t *conn, uint32_t len,
} else {
const or_options_t *options = get_options();
int cookies = options->CookieAuthentication;
- char *cfile = get_cookie_file();
+ char *cfile = get_controller_cookie_file_name();
char *abs_cfile;
char *esc_cfile;
char *methods;
@@ -3099,6 +3099,8 @@ handle_control_authchallenge(control_connection_t *conn, uint32_t len,
"SERVERNONCE=%s\r\n",
server_hash_encoded,
server_nonce_encoded);
+
+ tor_free(client_nonce);
return 0;
}
@@ -3137,6 +3139,30 @@ handle_control_usefeature(control_connection_t *conn,
return 0;
}
+/** Implementation for the DROPGUARDS command. */
+static int
+handle_control_dropguards(control_connection_t *conn,
+ uint32_t len,
+ const char *body)
+{
+ smartlist_t *args;
+ (void) len; /* body is nul-terminated; it's safe to ignore the length */
+ args = smartlist_new();
+ smartlist_split_string(args, body, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+
+ if (smartlist_len(args)) {
+ connection_printf_to_buf(conn, "512 Too many arguments to DROPGUARDS\r\n");
+ } else {
+ remove_all_entry_guards();
+ send_control_done(conn);
+ }
+
+ SMARTLIST_FOREACH(args, char *, cp, tor_free(cp));
+ smartlist_free(args);
+ return 0;
+}
+
/** Called when <b>conn</b> has no more bytes left on its outbuf. */
int
connection_control_finished_flushing(control_connection_t *conn)
@@ -3156,27 +3182,22 @@ connection_control_reached_eof(control_connection_t *conn)
return 0;
}
+static void lost_owning_controller(const char *owner_type,
+ const char *loss_manner)
+ ATTR_NORETURN;
+
/** Shut down this Tor instance in the same way that SIGINT would, but
* with a log message appropriate for the loss of an owning controller. */
static void
lost_owning_controller(const char *owner_type, const char *loss_manner)
{
- int shutdown_slowly = server_mode(get_options());
-
- log_notice(LD_CONTROL, "Owning controller %s has %s -- %s.",
- owner_type, loss_manner,
- shutdown_slowly ? "shutting down" : "exiting now");
+ log_notice(LD_CONTROL, "Owning controller %s has %s -- exiting now.",
+ owner_type, loss_manner);
/* XXXX Perhaps this chunk of code should be a separate function,
* called here and by process_signal(SIGINT). */
-
- if (!shutdown_slowly) {
- tor_cleanup();
- exit(0);
- }
- /* XXXX This will close all listening sockets except control-port
- * listeners. Perhaps we should close those too. */
- hibernate_begin_shutdown();
+ tor_cleanup();
+ exit(0);
}
/** Called when <b>conn</b> is being freed. */
@@ -3198,7 +3219,7 @@ connection_control_closed(control_connection_t *conn)
static int
is_valid_initial_command(control_connection_t *conn, const char *cmd)
{
- if (conn->_base.state == CONTROL_CONN_STATE_OPEN)
+ if (conn->base_.state == CONTROL_CONN_STATE_OPEN)
return 1;
if (!strcasecmp(cmd, "PROTOCOLINFO"))
return (!conn->have_sent_protocolinfo &&
@@ -3243,8 +3264,8 @@ connection_control_process_inbuf(control_connection_t *conn)
char *args;
tor_assert(conn);
- tor_assert(conn->_base.state == CONTROL_CONN_STATE_OPEN ||
- conn->_base.state == CONTROL_CONN_STATE_NEEDAUTH);
+ tor_assert(conn->base_.state == CONTROL_CONN_STATE_OPEN ||
+ conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH);
if (!conn->incoming_cmd) {
conn->incoming_cmd = tor_malloc(1024);
@@ -3252,7 +3273,7 @@ connection_control_process_inbuf(control_connection_t *conn)
conn->incoming_cmd_cur_len = 0;
}
- if (conn->_base.state == CONTROL_CONN_STATE_NEEDAUTH &&
+ if (conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH &&
peek_connection_has_control0_command(TO_CONN(conn))) {
/* Detect v0 commands and send a "no more v0" message. */
size_t body_len;
@@ -3351,7 +3372,7 @@ connection_control_process_inbuf(control_connection_t *conn)
return 0;
}
- if (conn->_base.state == CONTROL_CONN_STATE_NEEDAUTH &&
+ if (conn->base_.state == CONTROL_CONN_STATE_NEEDAUTH &&
!is_valid_initial_command(conn, conn->incoming_cmd)) {
connection_write_str_to_buf("514 Authentication required.\r\n", conn);
connection_mark_for_close(TO_CONN(conn));
@@ -3436,6 +3457,9 @@ connection_control_process_inbuf(control_connection_t *conn)
} else if (!strcasecmp(conn->incoming_cmd, "AUTHCHALLENGE")) {
if (handle_control_authchallenge(conn, cmd_data_len, args))
return -1;
+ } else if (!strcasecmp(conn->incoming_cmd, "DROPGUARDS")) {
+ if (handle_control_dropguards(conn, cmd_data_len, args))
+ return -1;
} else {
connection_printf_to_buf(conn, "510 Unrecognized command \"%s\"\r\n",
conn->incoming_cmd);
@@ -3538,9 +3562,9 @@ control_event_circuit_status_minor(origin_circuit_t *circ,
/* event_tail can currently be up to 130 chars long */
const char *hs_state_str =
circuit_purpose_to_controller_hs_state_string(purpose);
- const struct timeval *old_timestamp_created = tv;
+ const struct timeval *old_timestamp_began = tv;
char tbuf[ISO_TIME_USEC_LEN+1];
- format_iso_time_nospace_usec(tbuf, old_timestamp_created);
+ format_iso_time_nospace_usec(tbuf, old_timestamp_began);
tor_snprintf(event_tail, sizeof(event_tail),
" OLD_PURPOSE=%s%s%s OLD_TIME_CREATED=%s",
@@ -3696,9 +3720,22 @@ control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp,
}
}
- if (tp == STREAM_EVENT_NEW) {
- tor_snprintf(addrport_buf,sizeof(addrport_buf), " SOURCE_ADDR=%s:%d",
- ENTRY_TO_CONN(conn)->address, ENTRY_TO_CONN(conn)->port);
+ if (tp == STREAM_EVENT_NEW || tp == STREAM_EVENT_NEW_RESOLVE) {
+ /*
+ * When the control conn is an AF_UNIX socket and we have no address,
+ * it gets set to "(Tor_internal)"; see dnsserv_launch_request() in
+ * dnsserv.c.
+ */
+ if (strcmp(ENTRY_TO_CONN(conn)->address, "(Tor_internal)") != 0) {
+ tor_snprintf(addrport_buf,sizeof(addrport_buf), " SOURCE_ADDR=%s:%d",
+ ENTRY_TO_CONN(conn)->address, ENTRY_TO_CONN(conn)->port);
+ } else {
+ /*
+ * else leave it blank so control on AF_UNIX doesn't need to make
+ * something up.
+ */
+ addrport_buf[0] = '\0';
+ }
} else {
addrport_buf[0] = '\0';
}
@@ -3706,11 +3743,7 @@ control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp,
if (tp == STREAM_EVENT_NEW_RESOLVE) {
purpose = " PURPOSE=DNS_REQUEST";
} else if (tp == STREAM_EVENT_NEW) {
- if (ENTRY_TO_EDGE_CONN(conn)->is_dns_request ||
- (conn->socks_request &&
- SOCKS_COMMAND_IS_RESOLVE(conn->socks_request->command)))
- purpose = " PURPOSE=DNS_REQUEST";
- else if (conn->use_begindir) {
+ if (conn->use_begindir) {
connection_t *linked = ENTRY_TO_CONN(conn)->linked_conn;
int linked_dir_purpose = -1;
if (linked && linked->type == CONN_TYPE_DIR)
@@ -3755,7 +3788,7 @@ orconn_target_get_name(char *name, size_t len, or_connection_t *conn)
DIGEST_LEN);
} else {
tor_snprintf(name, len, "%s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
}
@@ -3787,20 +3820,24 @@ control_event_or_conn_status(or_connection_t *conn, or_conn_status_event_t tp,
log_warn(LD_BUG, "Unrecognized status code %d", (int)tp);
return 0;
}
- ncircs = circuit_count_pending_on_or_conn(conn);
- ncircs += conn->n_circuits;
+ if (conn->chan) {
+ ncircs = circuit_count_pending_on_channel(TLS_CHAN_TO_BASE(conn->chan));
+ } else {
+ ncircs = 0;
+ }
+ ncircs += connection_or_get_num_circuits(conn);
if (ncircs && (tp == OR_CONN_EVENT_FAILED || tp == OR_CONN_EVENT_CLOSED)) {
- tor_snprintf(ncircs_buf, sizeof(ncircs_buf), "%sNCIRCS=%d",
- reason ? " " : "", ncircs);
+ tor_snprintf(ncircs_buf, sizeof(ncircs_buf), " NCIRCS=%d", ncircs);
}
orconn_target_get_name(name, sizeof(name), conn);
send_control_event(EVENT_OR_CONN_STATUS, ALL_FORMATS,
- "650 ORCONN %s %s %s%s%s\r\n",
+ "650 ORCONN %s %s%s%s%s ID="U64_FORMAT"\r\n",
name, status,
- reason ? "REASON=" : "",
+ reason ? " REASON=" : "",
orconn_end_reason_to_control_string(reason),
- ncircs_buf);
+ ncircs_buf,
+ U64_PRINTF_ARG(conn->base_.global_identifier));
return 0;
}
@@ -3811,16 +3848,24 @@ control_event_or_conn_status(or_connection_t *conn, or_conn_status_event_t tp,
int
control_event_stream_bandwidth(edge_connection_t *edge_conn)
{
+ circuit_t *circ;
+ origin_circuit_t *ocirc;
if (EVENT_IS_INTERESTING(EVENT_STREAM_BANDWIDTH_USED)) {
if (!edge_conn->n_read && !edge_conn->n_written)
return 0;
send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS,
"650 STREAM_BW "U64_FORMAT" %lu %lu\r\n",
- U64_PRINTF_ARG(edge_conn->_base.global_identifier),
+ U64_PRINTF_ARG(edge_conn->base_.global_identifier),
(unsigned long)edge_conn->n_read,
(unsigned long)edge_conn->n_written);
+ circ = circuit_get_by_edge_conn(edge_conn);
+ if (circ && CIRCUIT_IS_ORIGIN(circ)) {
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ ocirc->n_read_circ_bw += edge_conn->n_read;
+ ocirc->n_written_circ_bw += edge_conn->n_written;
+ }
edge_conn->n_written = edge_conn->n_read = 0;
}
@@ -3846,7 +3891,7 @@ control_event_stream_bandwidth_used(void)
send_control_event(EVENT_STREAM_BANDWIDTH_USED, ALL_FORMATS,
"650 STREAM_BW "U64_FORMAT" %lu %lu\r\n",
- U64_PRINTF_ARG(edge_conn->_base.global_identifier),
+ U64_PRINTF_ARG(edge_conn->base_.global_identifier),
(unsigned long)edge_conn->n_read,
(unsigned long)edge_conn->n_written);
@@ -3858,6 +3903,235 @@ control_event_stream_bandwidth_used(void)
return 0;
}
+/** A second or more has elapsed: tell any interested control connections
+ * how much bandwidth origin circuits have used. */
+int
+control_event_circ_bandwidth_used(void)
+{
+ circuit_t *circ;
+ origin_circuit_t *ocirc;
+ if (!EVENT_IS_INTERESTING(EVENT_CIRC_BANDWIDTH_USED))
+ return 0;
+
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ if (!CIRCUIT_IS_ORIGIN(circ))
+ continue;
+ ocirc = TO_ORIGIN_CIRCUIT(circ);
+ if (!ocirc->n_read_circ_bw && !ocirc->n_written_circ_bw)
+ continue;
+ send_control_event(EVENT_CIRC_BANDWIDTH_USED, ALL_FORMATS,
+ "650 CIRC_BW ID=%d READ=%lu WRITTEN=%lu\r\n",
+ ocirc->global_identifier,
+ (unsigned long)ocirc->n_read_circ_bw,
+ (unsigned long)ocirc->n_written_circ_bw);
+ ocirc->n_written_circ_bw = ocirc->n_read_circ_bw = 0;
+ }
+
+ return 0;
+}
+
+/** Print out CONN_BW event for a single OR/DIR/EXIT <b>conn</b> and reset
+ * bandwidth counters. */
+int
+control_event_conn_bandwidth(connection_t *conn)
+{
+ const char *conn_type_str;
+ if (!get_options()->TestingEnableConnBwEvent ||
+ !EVENT_IS_INTERESTING(EVENT_CONN_BW))
+ return 0;
+ if (!conn->n_read_conn_bw && !conn->n_written_conn_bw)
+ return 0;
+ switch (conn->type) {
+ case CONN_TYPE_OR:
+ conn_type_str = "OR";
+ break;
+ case CONN_TYPE_DIR:
+ conn_type_str = "DIR";
+ break;
+ case CONN_TYPE_EXIT:
+ conn_type_str = "EXIT";
+ break;
+ default:
+ return 0;
+ }
+ send_control_event(EVENT_CONN_BW, ALL_FORMATS,
+ "650 CONN_BW ID="U64_FORMAT" TYPE=%s "
+ "READ=%lu WRITTEN=%lu\r\n",
+ U64_PRINTF_ARG(conn->global_identifier),
+ conn_type_str,
+ (unsigned long)conn->n_read_conn_bw,
+ (unsigned long)conn->n_written_conn_bw);
+ conn->n_written_conn_bw = conn->n_read_conn_bw = 0;
+ return 0;
+}
+
+/** A second or more has elapsed: tell any interested control
+ * connections how much bandwidth connections have used. */
+int
+control_event_conn_bandwidth_used(void)
+{
+ if (get_options()->TestingEnableConnBwEvent &&
+ EVENT_IS_INTERESTING(EVENT_CONN_BW)) {
+ SMARTLIST_FOREACH(get_connection_array(), connection_t *, conn,
+ control_event_conn_bandwidth(conn));
+ }
+ return 0;
+}
+
+/** Helper: iterate over cell statistics of <b>circ</b> and sum up added
+ * cells, removed cells, and waiting times by cell command and direction.
+ * Store results in <b>cell_stats</b>. Free cell statistics of the
+ * circuit afterwards. */
+void
+sum_up_cell_stats_by_command(circuit_t *circ, cell_stats_t *cell_stats)
+{
+ memset(cell_stats, 0, sizeof(cell_stats_t));
+ SMARTLIST_FOREACH_BEGIN(circ->testing_cell_stats,
+ testing_cell_stats_entry_t *, ent) {
+ tor_assert(ent->command <= CELL_COMMAND_MAX_);
+ if (!ent->removed && !ent->exitward) {
+ cell_stats->added_cells_appward[ent->command] += 1;
+ } else if (!ent->removed && ent->exitward) {
+ cell_stats->added_cells_exitward[ent->command] += 1;
+ } else if (!ent->exitward) {
+ cell_stats->removed_cells_appward[ent->command] += 1;
+ cell_stats->total_time_appward[ent->command] += ent->waiting_time * 10;
+ } else {
+ cell_stats->removed_cells_exitward[ent->command] += 1;
+ cell_stats->total_time_exitward[ent->command] += ent->waiting_time * 10;
+ }
+ tor_free(ent);
+ } SMARTLIST_FOREACH_END(ent);
+ smartlist_free(circ->testing_cell_stats);
+ circ->testing_cell_stats = NULL;
+}
+
+/** Helper: append a cell statistics string to <code>event_parts</code>,
+ * prefixed with <code>key</code>=. Statistics consist of comma-separated
+ * key:value pairs with lower-case command strings as keys and cell
+ * numbers or total waiting times as values. A key:value pair is included
+ * if the entry in <code>include_if_non_zero</code> is not zero, but with
+ * the (possibly zero) entry from <code>number_to_include</code>. Both
+ * arrays are expected to have a length of CELL_COMMAND_MAX_ + 1. If no
+ * entry in <code>include_if_non_zero</code> is positive, no string will
+ * be added to <code>event_parts</code>. */
+void
+append_cell_stats_by_command(smartlist_t *event_parts, const char *key,
+ const uint64_t *include_if_non_zero,
+ const uint64_t *number_to_include)
+{
+ smartlist_t *key_value_strings = smartlist_new();
+ int i;
+ for (i = 0; i <= CELL_COMMAND_MAX_; i++) {
+ if (include_if_non_zero[i] > 0) {
+ smartlist_add_asprintf(key_value_strings, "%s:"U64_FORMAT,
+ cell_command_to_string(i),
+ U64_PRINTF_ARG(number_to_include[i]));
+ }
+ }
+ if (smartlist_len(key_value_strings) > 0) {
+ char *joined = smartlist_join_strings(key_value_strings, ",", 0, NULL);
+ smartlist_add_asprintf(event_parts, "%s=%s", key, joined);
+ SMARTLIST_FOREACH(key_value_strings, char *, cp, tor_free(cp));
+ tor_free(joined);
+ }
+ smartlist_free(key_value_strings);
+}
+
+/** Helper: format <b>cell_stats</b> for <b>circ</b> for inclusion in a
+ * CELL_STATS event and write result string to <b>event_string</b>. */
+void
+format_cell_stats(char **event_string, circuit_t *circ,
+ cell_stats_t *cell_stats)
+{
+ smartlist_t *event_parts = smartlist_new();
+ if (CIRCUIT_IS_ORIGIN(circ)) {
+ origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
+ smartlist_add_asprintf(event_parts, "ID=%lu",
+ (unsigned long)ocirc->global_identifier);
+ } else if (TO_OR_CIRCUIT(circ)->p_chan) {
+ or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
+ smartlist_add_asprintf(event_parts, "InboundQueue=%lu",
+ (unsigned long)or_circ->p_circ_id);
+ smartlist_add_asprintf(event_parts, "InboundConn="U64_FORMAT,
+ U64_PRINTF_ARG(or_circ->p_chan->global_identifier));
+ append_cell_stats_by_command(event_parts, "InboundAdded",
+ cell_stats->added_cells_appward,
+ cell_stats->added_cells_appward);
+ append_cell_stats_by_command(event_parts, "InboundRemoved",
+ cell_stats->removed_cells_appward,
+ cell_stats->removed_cells_appward);
+ append_cell_stats_by_command(event_parts, "InboundTime",
+ cell_stats->removed_cells_appward,
+ cell_stats->total_time_appward);
+ }
+ if (circ->n_chan) {
+ smartlist_add_asprintf(event_parts, "OutboundQueue=%lu",
+ (unsigned long)circ->n_circ_id);
+ smartlist_add_asprintf(event_parts, "OutboundConn="U64_FORMAT,
+ U64_PRINTF_ARG(circ->n_chan->global_identifier));
+ append_cell_stats_by_command(event_parts, "OutboundAdded",
+ cell_stats->added_cells_exitward,
+ cell_stats->added_cells_exitward);
+ append_cell_stats_by_command(event_parts, "OutboundRemoved",
+ cell_stats->removed_cells_exitward,
+ cell_stats->removed_cells_exitward);
+ append_cell_stats_by_command(event_parts, "OutboundTime",
+ cell_stats->removed_cells_exitward,
+ cell_stats->total_time_exitward);
+ }
+ *event_string = smartlist_join_strings(event_parts, " ", 0, NULL);
+ SMARTLIST_FOREACH(event_parts, char *, cp, tor_free(cp));
+ smartlist_free(event_parts);
+}
+
+/** A second or more has elapsed: tell any interested control connection
+ * how many cells have been processed for a given circuit. */
+int
+control_event_circuit_cell_stats(void)
+{
+ circuit_t *circ;
+ cell_stats_t *cell_stats;
+ char *event_string;
+ if (!get_options()->TestingEnableCellStatsEvent ||
+ !EVENT_IS_INTERESTING(EVENT_CELL_STATS))
+ return 0;
+ cell_stats = tor_malloc(sizeof(cell_stats_t));;
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
+ if (!circ->testing_cell_stats)
+ continue;
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ format_cell_stats(&event_string, circ, cell_stats);
+ send_control_event(EVENT_CELL_STATS, ALL_FORMATS,
+ "650 CELL_STATS %s\r\n", event_string);
+ tor_free(event_string);
+ }
+ tor_free(cell_stats);
+ return 0;
+}
+
+/** Tokens in <b>bucket</b> have been refilled: the read bucket was empty
+ * for <b>read_empty_time</b> millis, the write bucket was empty for
+ * <b>write_empty_time</b> millis, and buckets were last refilled
+ * <b>milliseconds_elapsed</b> millis ago. Only emit TB_EMPTY event if
+ * either read or write bucket have been empty before. */
+int
+control_event_tb_empty(const char *bucket, uint32_t read_empty_time,
+ uint32_t write_empty_time,
+ int milliseconds_elapsed)
+{
+ if (get_options()->TestingEnableTbEmptyEvent &&
+ EVENT_IS_INTERESTING(EVENT_TB_EMPTY) &&
+ (read_empty_time > 0 || write_empty_time > 0)) {
+ send_control_event(EVENT_TB_EMPTY, ALL_FORMATS,
+ "650 TB_EMPTY %s READ=%d WRITTEN=%d "
+ "LAST=%d\r\n",
+ bucket, read_empty_time, write_empty_time,
+ milliseconds_elapsed);
+ }
+ return 0;
+}
+
/** A second or more has elapsed: tell any interested control
* connections how much bandwidth we used. */
int
@@ -3978,15 +4252,17 @@ control_event_descriptors_changed(smartlist_t *routers)
*/
int
control_event_address_mapped(const char *from, const char *to, time_t expires,
- const char *error)
+ const char *error, const int cached)
{
if (!EVENT_IS_INTERESTING(EVENT_ADDRMAP))
return 0;
if (expires < 3 || expires == TIME_MAX)
send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
- "650 ADDRMAP %s %s NEVER %s\r\n", from, to,
- error?error:"");
+ "650 ADDRMAP %s %s NEVER %s%s"
+ "CACHED=\"%s\"\r\n",
+ from, to, error?error:"", error?" ":"",
+ cached?"YES":"NO");
else {
char buf[ISO_TIME_LEN+1];
char buf2[ISO_TIME_LEN+1];
@@ -3994,10 +4270,10 @@ control_event_address_mapped(const char *from, const char *to, time_t expires,
format_iso_time(buf2,expires);
send_control_event(EVENT_ADDRMAP, ALL_FORMATS,
"650 ADDRMAP %s %s \"%s\""
- " %s%sEXPIRES=\"%s\"\r\n",
+ " %s%sEXPIRES=\"%s\" CACHED=\"%s\"\r\n",
from, to, buf,
error?error:"", error?" ":"",
- buf2);
+ buf2, cached?"YES":"NO");
}
return 0;
@@ -4103,32 +4379,26 @@ control_event_newconsensus(const networkstatus_t *consensus)
/** Called when we compute a new circuitbuildtimeout */
int
-control_event_buildtimeout_set(const circuit_build_times_t *cbt,
- buildtimeout_set_event_t type)
+control_event_buildtimeout_set(buildtimeout_set_event_t type,
+ const char *args)
{
const char *type_string = NULL;
- double qnt;
if (!control_event_is_interesting(EVENT_BUILDTIMEOUT_SET))
return 0;
- qnt = circuit_build_times_quantile_cutoff();
-
switch (type) {
case BUILDTIMEOUT_SET_EVENT_COMPUTED:
type_string = "COMPUTED";
break;
case BUILDTIMEOUT_SET_EVENT_RESET:
type_string = "RESET";
- qnt = 1.0;
break;
case BUILDTIMEOUT_SET_EVENT_SUSPENDED:
type_string = "SUSPENDED";
- qnt = 1.0;
break;
case BUILDTIMEOUT_SET_EVENT_DISCARD:
type_string = "DISCARD";
- qnt = 1.0;
break;
case BUILDTIMEOUT_SET_EVENT_RESUME:
type_string = "RESUME";
@@ -4139,15 +4409,8 @@ control_event_buildtimeout_set(const circuit_build_times_t *cbt,
}
send_control_event(EVENT_BUILDTIMEOUT_SET, ALL_FORMATS,
- "650 BUILDTIMEOUT_SET %s TOTAL_TIMES=%lu "
- "TIMEOUT_MS=%lu XM=%lu ALPHA=%f CUTOFF_QUANTILE=%f "
- "TIMEOUT_RATE=%f CLOSE_MS=%lu CLOSE_RATE=%f\r\n",
- type_string, (unsigned long)cbt->total_build_times,
- (unsigned long)cbt->timeout_ms,
- (unsigned long)cbt->Xm, cbt->alpha, qnt,
- circuit_build_times_timeout_rate(cbt),
- (unsigned long)cbt->close_ms,
- circuit_build_times_close_rate(cbt));
+ "650 BUILDTIMEOUT_SET %s %s\r\n",
+ type_string, args);
return 0;
}
@@ -4345,7 +4608,7 @@ control_event_guard(const char *nickname, const char *digest,
* a smartlist_t containing (key, value, ...) pairs in sequence.
* <b>value</b> can be NULL. */
int
-control_event_conf_changed(smartlist_t *elements)
+control_event_conf_changed(const smartlist_t *elements)
{
int i;
char *result;
@@ -4375,8 +4638,8 @@ control_event_conf_changed(smartlist_t *elements)
/** Helper: Return a newly allocated string containing a path to the
* file where we store our authentication cookie. */
-static char *
-get_cookie_file(void)
+char *
+get_controller_cookie_file_name(void)
{
const or_options_t *options = get_options();
if (options->CookieAuthFile && strlen(options->CookieAuthFile)) {
@@ -4386,44 +4649,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
-
+ fname = get_controller_cookie_file_name();
+ 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
@@ -4434,6 +4680,8 @@ static char *owning_controller_process_spec = NULL;
* if this Tor instance is not currently owned by a process. */
static tor_process_monitor_t *owning_controller_process_monitor = NULL;
+static void owning_controller_procmon_cb(void *unused) ATTR_NORETURN;
+
/** Process-termination monitor callback for Tor's owning controller
* process. */
static void
@@ -4577,16 +4825,28 @@ bootstrap_status_to_string(bootstrap_status_t s, const char **tag,
* Tor initializes. */
static int bootstrap_percent = BOOTSTRAP_STATUS_UNDEF;
+/** As bootstrap_percent, but holds the bootstrapping level at which we last
+ * logged a NOTICE-level message. We use this, plus BOOTSTRAP_PCT_INCREMENT,
+ * to avoid flooding the log with a new message every time we get a few more
+ * microdescriptors */
+static int notice_bootstrap_percent = 0;
+
/** How many problems have we had getting to the next bootstrapping phase?
* These include failure to establish a connection to a Tor relay,
* failures to finish the TLS handshake, failures to validate the
* consensus document, etc. */
static int bootstrap_problems = 0;
-/* We only tell the controller once we've hit a threshold of problems
+/** We only tell the controller once we've hit a threshold of problems
* for the current phase. */
#define BOOTSTRAP_PROBLEM_THRESHOLD 10
+/** When our bootstrapping progress level changes, but our bootstrapping
+ * status has not advanced, we only log at NOTICE when we have made at least
+ * this much progress.
+ */
+#define BOOTSTRAP_PCT_INCREMENT 5
+
/** Called when Tor has made progress at bootstrapping its directory
* information and initial circuits.
*
@@ -4606,7 +4866,7 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
* can't distinguish what the connection is going to be for. */
if (status == BOOTSTRAP_STATUS_HANDSHAKE) {
if (bootstrap_percent < BOOTSTRAP_STATUS_CONN_OR) {
- status = BOOTSTRAP_STATUS_HANDSHAKE_DIR;
+ status = BOOTSTRAP_STATUS_HANDSHAKE_DIR;
} else {
status = BOOTSTRAP_STATUS_HANDSHAKE_OR;
}
@@ -4614,9 +4874,19 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
if (status > bootstrap_percent ||
(progress && progress > bootstrap_percent)) {
+ int loglevel = LOG_NOTICE;
bootstrap_status_to_string(status, &tag, &summary);
- log(status ? LOG_NOTICE : LOG_INFO, LD_CONTROL,
- "Bootstrapped %d%%: %s.", progress ? progress : status, summary);
+
+ if (status <= bootstrap_percent &&
+ (progress < notice_bootstrap_percent + BOOTSTRAP_PCT_INCREMENT)) {
+ /* We log the message at info if the status hasn't advanced, and if less
+ * than BOOTSTRAP_PCT_INCREMENT progress has been made.
+ */
+ loglevel = LOG_INFO;
+ }
+
+ tor_log(loglevel, LD_CONTROL,
+ "Bootstrapped %d%%: %s", progress ? progress : status, summary);
tor_snprintf(buf, sizeof(buf),
"BOOTSTRAP PROGRESS=%d TAG=%s SUMMARY=\"%s\"",
progress ? progress : status, tag, summary);
@@ -4632,15 +4902,22 @@ control_event_bootstrap(bootstrap_status_t status, int progress)
bootstrap_percent = progress;
bootstrap_problems = 0; /* Progress! Reset our problem counter. */
}
+ if (loglevel == LOG_NOTICE &&
+ bootstrap_percent > notice_bootstrap_percent) {
+ /* Remember that we gave a notice at this level. */
+ notice_bootstrap_percent = bootstrap_percent;
+ }
}
}
/** Called when Tor has failed to make bootstrapping progress in a way
* that indicates a problem. <b>warn</b> gives a hint as to why, and
- * <b>reason</b> provides an "or_conn_end_reason" tag.
+ * <b>reason</b> provides an "or_conn_end_reason" tag. <b>or_conn</b>
+ * is the connection that caused this problem.
*/
-void
-control_event_bootstrap_problem(const char *warn, int reason)
+MOCK_IMPL(void,
+ control_event_bootstrap_problem, (const char *warn, int reason,
+ or_connection_t *or_conn))
{
int status = bootstrap_percent;
const char *tag, *summary;
@@ -4651,6 +4928,11 @@ control_event_bootstrap_problem(const char *warn, int reason)
/* bootstrap_percent must not be in "undefined" state here. */
tor_assert(status >= 0);
+ if (or_conn->have_noted_bootstrap_problem)
+ return;
+
+ or_conn->have_noted_bootstrap_problem = 1;
+
if (bootstrap_percent == 100)
return; /* already bootstrapped; nothing to be done here. */
@@ -4662,11 +4944,15 @@ control_event_bootstrap_problem(const char *warn, int reason)
if (reason == END_OR_CONN_REASON_NO_ROUTE)
recommendation = "warn";
- if (get_options()->UseBridges &&
- !any_bridge_descriptors_known() &&
- !any_pending_bridge_descriptor_fetches())
+ /* If we are using bridges and all our OR connections are now
+ closed, it means that we totally failed to connect to our
+ bridges. Throw a warning. */
+ if (get_options()->UseBridges && !any_other_active_or_conns(or_conn))
recommendation = "warn";
+ if (we_are_hibernating())
+ recommendation = "ignore";
+
while (status>=0 && bootstrap_status_to_string(status, &tag, &summary) < 0)
status--; /* find a recognized status string based on current progress */
status = bootstrap_percent; /* set status back to the actual number */
@@ -4704,3 +4990,159 @@ control_event_clients_seen(const char *controller_str)
"650 CLIENTS_SEEN %s\r\n", controller_str);
}
+/** A new pluggable transport called <b>transport_name</b> was
+ * launched on <b>addr</b>:<b>port</b>. <b>mode</b> is either
+ * "server" or "client" depending on the mode of the pluggable
+ * transport.
+ * "650" SP "TRANSPORT_LAUNCHED" SP Mode SP Name SP Address SP Port
+ */
+void
+control_event_transport_launched(const char *mode, const char *transport_name,
+ tor_addr_t *addr, uint16_t port)
+{
+ send_control_event(EVENT_TRANSPORT_LAUNCHED, ALL_FORMATS,
+ "650 TRANSPORT_LAUNCHED %s %s %s %u\r\n",
+ mode, transport_name, fmt_addr(addr), port);
+}
+
+/** Convert rendezvous auth type to string for HS_DESC control events
+ */
+const char *
+rend_auth_type_to_string(rend_auth_type_t auth_type)
+{
+ const char *str;
+
+ switch (auth_type) {
+ case REND_NO_AUTH:
+ str = "NO_AUTH";
+ break;
+ case REND_BASIC_AUTH:
+ str = "BASIC_AUTH";
+ break;
+ case REND_STEALTH_AUTH:
+ str = "STEALTH_AUTH";
+ break;
+ default:
+ str = "UNKNOWN";
+ }
+
+ return str;
+}
+
+/** Return a longname the node whose identity is <b>id_digest</b>. If
+ * node_get_by_id() returns NULL, base 16 encoding of <b>id_digest</b> is
+ * returned instead.
+ *
+ * This function is not thread-safe. Each call to this function invalidates
+ * previous values returned by this function.
+ */
+MOCK_IMPL(const char *,
+node_describe_longname_by_id,(const char *id_digest))
+{
+ static char longname[MAX_VERBOSE_NICKNAME_LEN+1];
+ node_get_verbose_nickname_by_id(id_digest, longname);
+ return longname;
+}
+
+/** send HS_DESC requested event.
+ *
+ * <b>rend_query</b> is used to fetch requested onion address and auth type.
+ * <b>hs_dir</b> is the description of contacting hs directory.
+ * <b>desc_id_base32</b> is the ID of requested hs descriptor.
+ */
+void
+control_event_hs_descriptor_requested(const rend_data_t *rend_query,
+ const char *id_digest,
+ const char *desc_id_base32)
+{
+ if (!id_digest || !rend_query || !desc_id_base32) {
+ log_warn(LD_BUG, "Called with rend_query==%p, "
+ "id_digest==%p, desc_id_base32==%p",
+ rend_query, id_digest, desc_id_base32);
+ return;
+ }
+
+ send_control_event(EVENT_HS_DESC, ALL_FORMATS,
+ "650 HS_DESC REQUESTED %s %s %s %s\r\n",
+ rend_query->onion_address,
+ rend_auth_type_to_string(rend_query->auth_type),
+ node_describe_longname_by_id(id_digest),
+ desc_id_base32);
+}
+
+/** send HS_DESC event after got response from hs directory.
+ *
+ * NOTE: this is an internal function used by following functions:
+ * control_event_hs_descriptor_received
+ * control_event_hs_descriptor_failed
+ *
+ * So do not call this function directly.
+ */
+void
+control_event_hs_descriptor_receive_end(const char *action,
+ const rend_data_t *rend_query,
+ const char *id_digest)
+{
+ if (!action || !rend_query || !id_digest) {
+ log_warn(LD_BUG, "Called with action==%p, rend_query==%p, "
+ "id_digest==%p", action, rend_query, id_digest);
+ return;
+ }
+
+ send_control_event(EVENT_HS_DESC, ALL_FORMATS,
+ "650 HS_DESC %s %s %s %s\r\n",
+ action,
+ rend_query->onion_address,
+ rend_auth_type_to_string(rend_query->auth_type),
+ node_describe_longname_by_id(id_digest));
+}
+
+/** send HS_DESC RECEIVED event
+ *
+ * called when a we successfully received a hidden service descriptor.
+ */
+void
+control_event_hs_descriptor_received(const rend_data_t *rend_query,
+ const char *id_digest)
+{
+ if (!rend_query || !id_digest) {
+ log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p",
+ rend_query, id_digest);
+ return;
+ }
+ control_event_hs_descriptor_receive_end("RECEIVED", rend_query, id_digest);
+}
+
+/** send HS_DESC FAILED event
+ *
+ * called when request for hidden service descriptor returned failure.
+ */
+void
+control_event_hs_descriptor_failed(const rend_data_t *rend_query,
+ const char *id_digest)
+{
+ if (!rend_query || !id_digest) {
+ log_warn(LD_BUG, "Called with rend_query==%p, id_digest==%p",
+ rend_query, id_digest);
+ return;
+ }
+ control_event_hs_descriptor_receive_end("FAILED", rend_query, id_digest);
+}
+
+/** 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);
+}
+
+#ifdef TOR_UNIT_TESTS
+/* For testing: change the value of global_event_mask */
+void
+control_testing_set_global_event_mask(uint64_t mask)
+{
+ global_event_mask = mask;
+}
+#endif
+
diff --git a/src/or/control.h b/src/or/control.h
index f301ce91b..68a6c244d 100644
--- a/src/or/control.h
+++ b/src/or/control.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for control.c.
**/
-#ifndef _TOR_CONTROL_H
-#define _TOR_CONTROL_H
+#ifndef TOR_CONTROL_H
+#define TOR_CONTROL_H
void control_update_global_event_mask(void);
void control_adjust_event_log_severity(void);
@@ -50,10 +50,18 @@ int control_event_or_conn_status(or_connection_t *conn,
int control_event_bandwidth_used(uint32_t n_read, uint32_t n_written);
int control_event_stream_bandwidth(edge_connection_t *edge_conn);
int control_event_stream_bandwidth_used(void);
+int control_event_circ_bandwidth_used(void);
+int control_event_conn_bandwidth(connection_t *conn);
+int control_event_conn_bandwidth_used(void);
+int control_event_circuit_cell_stats(void);
+int control_event_tb_empty(const char *bucket, uint32_t read_empty_time,
+ uint32_t write_empty_time,
+ int milliseconds_elapsed);
void control_event_logmsg(int severity, uint32_t domain, const char *msg);
int control_event_descriptors_changed(smartlist_t *routers);
int control_event_address_mapped(const char *from, const char *to,
- time_t expires, const char *error);
+ time_t expires, const char *error,
+ const int cached);
int control_event_or_authdir_new_descriptor(const char *action,
const char *desc,
size_t desclen,
@@ -71,12 +79,13 @@ int control_event_server_status(int severity, const char *format, ...)
CHECK_PRINTF(2,3);
int control_event_guard(const char *nickname, const char *digest,
const char *status);
-int control_event_conf_changed(smartlist_t *elements);
-int control_event_buildtimeout_set(const circuit_build_times_t *cbt,
- buildtimeout_set_event_t type);
+int control_event_conf_changed(const smartlist_t *elements);
+int control_event_buildtimeout_set(buildtimeout_set_event_t type,
+ const char *args);
int control_event_signal(uintptr_t signal);
-int init_cookie_authentication(int enabled);
+int init_control_cookie_authentication(int enabled);
+char *get_controller_cookie_file_name(void);
smartlist_t *decode_hashed_passwords(config_line_t *passwords);
void disable_control_logging(void);
void enable_control_logging(void);
@@ -84,14 +93,114 @@ 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,
+ or_connection_t *or_conn));
void control_event_clients_seen(const char *controller_str);
+void control_event_transport_launched(const char *mode,
+ const char *transport_name,
+ tor_addr_t *addr, uint16_t port);
+const char *rend_auth_type_to_string(rend_auth_type_t auth_type);
+MOCK_DECL(const char *, node_describe_longname_by_id,(const char *id_digest));
+void control_event_hs_descriptor_requested(const rend_data_t *rend_query,
+ const char *desc_id_base32,
+ const char *hs_dir);
+void control_event_hs_descriptor_receive_end(const char *action,
+ const rend_data_t *rend_query,
+ const char *hs_dir);
+void control_event_hs_descriptor_received(const rend_data_t *rend_query,
+ const char *hs_dir);
+void control_event_hs_descriptor_failed(const rend_data_t *rend_query,
+ const char *hs_dir);
+
+void control_free_all(void);
#ifdef CONTROL_PRIVATE
+/* Recognized asynchronous event types. It's okay to expand this list
+ * because it is used both as a list of v0 event types, and as indices
+ * into the bitfield to determine which controllers want which events.
+ */
+#define EVENT_MIN_ 0x0001
+#define EVENT_CIRCUIT_STATUS 0x0001
+#define EVENT_STREAM_STATUS 0x0002
+#define EVENT_OR_CONN_STATUS 0x0003
+#define EVENT_BANDWIDTH_USED 0x0004
+#define EVENT_CIRCUIT_STATUS_MINOR 0x0005
+#define EVENT_NEW_DESC 0x0006
+#define EVENT_DEBUG_MSG 0x0007
+#define EVENT_INFO_MSG 0x0008
+#define EVENT_NOTICE_MSG 0x0009
+#define EVENT_WARN_MSG 0x000A
+#define EVENT_ERR_MSG 0x000B
+#define EVENT_ADDRMAP 0x000C
+/* Exposed above */
+// #define EVENT_AUTHDIR_NEWDESCS 0x000D
+#define EVENT_DESCCHANGED 0x000E
+/* Exposed above */
+// #define EVENT_NS 0x000F
+#define EVENT_STATUS_CLIENT 0x0010
+#define EVENT_STATUS_SERVER 0x0011
+#define EVENT_STATUS_GENERAL 0x0012
+#define EVENT_GUARD 0x0013
+#define EVENT_STREAM_BANDWIDTH_USED 0x0014
+#define EVENT_CLIENTS_SEEN 0x0015
+#define EVENT_NEWCONSENSUS 0x0016
+#define EVENT_BUILDTIMEOUT_SET 0x0017
+#define EVENT_SIGNAL 0x0018
+#define EVENT_CONF_CHANGED 0x0019
+#define EVENT_CONN_BW 0x001A
+#define EVENT_CELL_STATS 0x001B
+#define EVENT_TB_EMPTY 0x001C
+#define EVENT_CIRC_BANDWIDTH_USED 0x001D
+#define EVENT_TRANSPORT_LAUNCHED 0x0020
+#define EVENT_HS_DESC 0x0021
+#define EVENT_MAX_ 0x0021
+/* If EVENT_MAX_ ever hits 0x0040, we need to make the mask into a
+ * different structure. */
+
/* 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);
+/** Flag for event_format_t. Indicates that we should use the one standard
+ format. (Other formats previous existed, and are now deprecated)
+ */
+#define ALL_FORMATS 1
+/** Bit field of flags to select how to format a controller event. Recognized
+ * flag is ALL_FORMATS. */
+typedef int event_format_t;
+
+#ifdef TOR_UNIT_TESTS
+MOCK_DECL(STATIC void,
+send_control_event_string,(uint16_t event, event_format_t which,
+ const char *msg));
+
+void control_testing_set_global_event_mask(uint64_t mask);
+#endif
+
+/** Helper structure: temporarily stores cell statistics for a circuit. */
+typedef struct cell_stats_t {
+ /** Number of cells added in app-ward direction by command. */
+ uint64_t added_cells_appward[CELL_COMMAND_MAX_ + 1];
+ /** Number of cells added in exit-ward direction by command. */
+ uint64_t added_cells_exitward[CELL_COMMAND_MAX_ + 1];
+ /** Number of cells removed in app-ward direction by command. */
+ uint64_t removed_cells_appward[CELL_COMMAND_MAX_ + 1];
+ /** Number of cells removed in exit-ward direction by command. */
+ uint64_t removed_cells_exitward[CELL_COMMAND_MAX_ + 1];
+ /** Total waiting time of cells in app-ward direction by command. */
+ uint64_t total_time_appward[CELL_COMMAND_MAX_ + 1];
+ /** Total waiting time of cells in exit-ward direction by command. */
+ uint64_t total_time_exitward[CELL_COMMAND_MAX_ + 1];
+} cell_stats_t;
+void sum_up_cell_stats_by_command(circuit_t *circ,
+ cell_stats_t *cell_stats);
+void append_cell_stats_by_command(smartlist_t *event_parts,
+ const char *key,
+ const uint64_t *include_if_non_zero,
+ const uint64_t *number_to_include);
+void format_cell_stats(char **event_string, circuit_t *circ,
+ cell_stats_t *cell_stats);
#endif
#endif
diff --git a/src/or/cpuworker.c b/src/or/cpuworker.c
index 0255227e7..61b2c29b3 100644
--- a/src/or/cpuworker.c
+++ b/src/or/cpuworker.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,16 +11,19 @@
*
* Right now, we only use this for processing onionskins.
**/
-
#include "or.h"
#include "buffers.h"
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "config.h"
#include "connection.h"
+#include "connection_or.h"
#include "cpuworker.h"
#include "main.h"
#include "onion.h"
+#include "rephist.h"
#include "router.h"
/** The maximum number of cpuworker processes we will keep around. */
@@ -29,10 +32,7 @@
#define MIN_CPUWORKERS 1
/** The tag specifies which circuit this onionskin was from. */
-#define TAG_LEN 10
-/** How many bytes are sent from the cpuworker back to tor? */
-#define LEN_ONION_RESPONSE \
- (1+TAG_LEN+ONIONSKIN_REPLY_LEN+CPATH_KEY_MATERIAL_LEN)
+#define TAG_LEN 12
/** How many cpuworkers we have running right now. */
static int num_cpuworkers=0;
@@ -68,22 +68,80 @@ connection_cpu_finished_flushing(connection_t *conn)
/** Pack global_id and circ_id; set *tag to the result. (See note on
* cpuworker_main for wire format.) */
static void
-tag_pack(char *tag, uint64_t conn_id, circid_t circ_id)
+tag_pack(uint8_t *tag, uint64_t chan_id, circid_t circ_id)
{
/*XXXX RETHINK THIS WHOLE MESS !!!! !NM NM NM NM*/
- set_uint64(tag, conn_id);
- set_uint16(tag+8, circ_id);
+ /*XXXX DOUBLEPLUSTHIS!!!! AS AS AS AS*/
+ set_uint64(tag, chan_id);
+ set_uint32(tag+8, circ_id);
}
/** Unpack <b>tag</b> into addr, port, and circ_id.
*/
static void
-tag_unpack(const char *tag, uint64_t *conn_id, circid_t *circ_id)
+tag_unpack(const uint8_t *tag, uint64_t *chan_id, circid_t *circ_id)
{
- *conn_id = get_uint64(tag);
- *circ_id = get_uint16(tag+8);
+ *chan_id = get_uint64(tag);
+ *circ_id = get_uint32(tag+8);
}
+/** Magic numbers to make sure our cpuworker_requests don't grow any
+ * mis-framing bugs. */
+#define CPUWORKER_REQUEST_MAGIC 0xda4afeed
+#define CPUWORKER_REPLY_MAGIC 0x5eedf00d
+
+/** A request sent to a cpuworker. */
+typedef struct cpuworker_request_t {
+ /** Magic number; must be CPUWORKER_REQUEST_MAGIC. */
+ uint32_t magic;
+ /** Opaque tag to identify the job */
+ uint8_t tag[TAG_LEN];
+ /** Task code. Must be one of CPUWORKER_TASK_* */
+ uint8_t task;
+
+ /** Flag: Are we timing this request? */
+ unsigned timed : 1;
+ /** If we're timing this request, when was it sent to the cpuworker? */
+ struct timeval started_at;
+
+ /** A create cell for the cpuworker to process. */
+ create_cell_t create_cell;
+
+ /* Turn the above into a tagged union if needed. */
+} cpuworker_request_t;
+
+/** A reply sent by a cpuworker. */
+typedef struct cpuworker_reply_t {
+ /** Magic number; must be CPUWORKER_REPLY_MAGIC. */
+ uint32_t magic;
+ /** Opaque tag to identify the job; matches the request's tag.*/
+ uint8_t tag[TAG_LEN];
+ /** True iff we got a successful request. */
+ uint8_t success;
+
+ /** Are we timing this request? */
+ unsigned int timed : 1;
+ /** What handshake type was the request? (Used for timing) */
+ uint16_t handshake_type;
+ /** When did we send the request to the cpuworker? */
+ struct timeval started_at;
+ /** Once the cpuworker received the request, how many microseconds did it
+ * take? (This shouldn't overflow; 4 billion micoseconds is over an hour,
+ * and we'll never have an onion handshake that takes so long.) */
+ uint32_t n_usec;
+
+ /** Output of processing a create cell
+ *
+ * @{
+ */
+ /** The created cell to send back. */
+ created_cell_t created_cell;
+ /** The keys to use on this circuit. */
+ uint8_t keys[CPATH_KEY_MATERIAL_LEN];
+ /** Input to use for authenticating introduce1 cells. */
+ uint8_t rend_auth_material[DIGEST_LEN];
+} cpuworker_reply_t;
+
/** Called when the onion key has changed and we need to spawn new
* cpuworkers. Close all currently idle cpuworkers, and mark the last
* rotation time as now.
@@ -122,6 +180,112 @@ connection_cpu_reached_eof(connection_t *conn)
return 0;
}
+/** Indexed by handshake type: how many onionskins have we processed and
+ * counted of that type? */
+static uint64_t onionskins_n_processed[MAX_ONION_HANDSHAKE_TYPE+1];
+/** Indexed by handshake type, corresponding to the onionskins counted in
+ * onionskins_n_processed: how many microseconds have we spent in cpuworkers
+ * processing that kind of onionskin? */
+static uint64_t onionskins_usec_internal[MAX_ONION_HANDSHAKE_TYPE+1];
+/** Indexed by handshake type, corresponding to onionskins counted in
+ * onionskins_n_processed: how many microseconds have we spent waiting for
+ * cpuworkers to give us answers for that kind of onionskin?
+ */
+static uint64_t onionskins_usec_roundtrip[MAX_ONION_HANDSHAKE_TYPE+1];
+
+/** If any onionskin takes longer than this, we clip them to this
+ * time. (microseconds) */
+#define MAX_BELIEVABLE_ONIONSKIN_DELAY (2*1000*1000)
+
+static tor_weak_rng_t request_sample_rng = TOR_WEAK_RNG_INIT;
+
+/** Return true iff we'd like to measure a handshake of type
+ * <b>onionskin_type</b>. Call only from the main thread. */
+static int
+should_time_request(uint16_t onionskin_type)
+{
+ /* If we've never heard of this type, we shouldn't even be here. */
+ if (onionskin_type > MAX_ONION_HANDSHAKE_TYPE)
+ return 0;
+ /* Measure the first N handshakes of each type, to ensure we have a
+ * sample */
+ if (onionskins_n_processed[onionskin_type] < 4096)
+ return 1;
+ /** Otherwise, measure with P=1/128. We avoid doing this for every
+ * handshake, since the measurement itself can take a little time. */
+ return tor_weak_random_one_in_n(&request_sample_rng, 128);
+}
+
+/** Return an estimate of how many microseconds we will need for a single
+ * cpuworker to to process <b>n_requests</b> onionskins of type
+ * <b>onionskin_type</b>. */
+uint64_t
+estimated_usec_for_onionskins(uint32_t n_requests, uint16_t onionskin_type)
+{
+ if (onionskin_type > MAX_ONION_HANDSHAKE_TYPE) /* should be impossible */
+ return 1000 * (uint64_t)n_requests;
+ if (PREDICT_UNLIKELY(onionskins_n_processed[onionskin_type] < 100)) {
+ /* Until we have 100 data points, just asssume everything takes 1 msec. */
+ return 1000 * (uint64_t)n_requests;
+ } else {
+ /* This can't overflow: we'll never have more than 500000 onionskins
+ * measured in onionskin_usec_internal, and they won't take anything near
+ * 1 sec each, and we won't have anything like 1 million queued
+ * onionskins. But that's 5e5 * 1e6 * 1e6, which is still less than
+ * UINT64_MAX. */
+ return (onionskins_usec_internal[onionskin_type] * n_requests) /
+ onionskins_n_processed[onionskin_type];
+ }
+}
+
+/** Compute the absolute and relative overhead of using the cpuworker
+ * framework for onionskins of type <b>onionskin_type</b>.*/
+static int
+get_overhead_for_onionskins(uint32_t *usec_out, double *frac_out,
+ uint16_t onionskin_type)
+{
+ uint64_t overhead;
+
+ *usec_out = 0;
+ *frac_out = 0.0;
+
+ if (onionskin_type > MAX_ONION_HANDSHAKE_TYPE) /* should be impossible */
+ return -1;
+ if (onionskins_n_processed[onionskin_type] == 0 ||
+ onionskins_usec_internal[onionskin_type] == 0 ||
+ onionskins_usec_roundtrip[onionskin_type] == 0)
+ return -1;
+
+ overhead = onionskins_usec_roundtrip[onionskin_type] -
+ onionskins_usec_internal[onionskin_type];
+
+ *usec_out = (uint32_t)(overhead / onionskins_n_processed[onionskin_type]);
+ *frac_out = U64_TO_DBL(overhead) / onionskins_usec_internal[onionskin_type];
+
+ return 0;
+}
+
+/** If we've measured overhead for onionskins of type <b>onionskin_type</b>,
+ * log it. */
+void
+cpuworker_log_onionskin_overhead(int severity, int onionskin_type,
+ const char *onionskin_type_name)
+{
+ uint32_t overhead;
+ double relative_overhead;
+ int r;
+
+ r = get_overhead_for_onionskins(&overhead, &relative_overhead,
+ onionskin_type);
+ if (!overhead || r<0)
+ return;
+
+ log_fn(severity, LD_OR,
+ "%s onionskins have averaged %u usec overhead (%.2f%%) in "
+ "cpuworker code ",
+ onionskin_type_name, (unsigned)overhead, relative_overhead*100);
+}
+
/** Called when we get data from a cpuworker. If the answer is not complete,
* wait for a complete answer. If the answer is complete,
* process it as appropriate.
@@ -129,12 +293,9 @@ connection_cpu_reached_eof(connection_t *conn)
int
connection_cpu_process_inbuf(connection_t *conn)
{
- char success;
- char buf[LEN_ONION_RESPONSE];
- uint64_t conn_id;
+ uint64_t chan_id;
circid_t circ_id;
- connection_t *tmp_conn;
- or_connection_t *p_conn = NULL;
+ channel_t *p_chan = NULL;
circuit_t *circ;
tor_assert(conn);
@@ -144,25 +305,51 @@ connection_cpu_process_inbuf(connection_t *conn)
return 0;
if (conn->state == CPUWORKER_STATE_BUSY_ONION) {
- if (connection_get_inbuf_len(conn) < LEN_ONION_RESPONSE)
+ cpuworker_reply_t rpl;
+ if (connection_get_inbuf_len(conn) < sizeof(cpuworker_reply_t))
return 0; /* not yet */
- tor_assert(connection_get_inbuf_len(conn) == LEN_ONION_RESPONSE);
-
- connection_fetch_from_buf(&success,1,conn);
- connection_fetch_from_buf(buf,LEN_ONION_RESPONSE-1,conn);
-
+ tor_assert(connection_get_inbuf_len(conn) == sizeof(cpuworker_reply_t));
+
+ connection_fetch_from_buf((void*)&rpl,sizeof(cpuworker_reply_t),conn);
+
+ tor_assert(rpl.magic == CPUWORKER_REPLY_MAGIC);
+
+ if (rpl.timed && rpl.success &&
+ rpl.handshake_type <= MAX_ONION_HANDSHAKE_TYPE) {
+ /* Time how long this request took. The handshake_type check should be
+ needless, but let's leave it in to be safe. */
+ struct timeval tv_end, tv_diff;
+ int64_t usec_roundtrip;
+ tor_gettimeofday(&tv_end);
+ timersub(&tv_end, &rpl.started_at, &tv_diff);
+ usec_roundtrip = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
+ if (usec_roundtrip >= 0 &&
+ usec_roundtrip < MAX_BELIEVABLE_ONIONSKIN_DELAY) {
+ ++onionskins_n_processed[rpl.handshake_type];
+ onionskins_usec_internal[rpl.handshake_type] += rpl.n_usec;
+ onionskins_usec_roundtrip[rpl.handshake_type] += usec_roundtrip;
+ if (onionskins_n_processed[rpl.handshake_type] >= 500000) {
+ /* Scale down every 500000 handshakes. On a busy server, that's
+ * less impressive than it sounds. */
+ onionskins_n_processed[rpl.handshake_type] /= 2;
+ onionskins_usec_internal[rpl.handshake_type] /= 2;
+ onionskins_usec_roundtrip[rpl.handshake_type] /= 2;
+ }
+ }
+ }
/* parse out the circ it was talking about */
- tag_unpack(buf, &conn_id, &circ_id);
+ tag_unpack(rpl.tag, &chan_id, &circ_id);
circ = NULL;
- tmp_conn = connection_get_by_global_id(conn_id);
- if (tmp_conn && !tmp_conn->marked_for_close &&
- tmp_conn->type == CONN_TYPE_OR)
- p_conn = TO_OR_CONN(tmp_conn);
+ log_debug(LD_OR,
+ "Unpacking cpuworker reply, chan_id is " U64_FORMAT
+ ", circ_id is %u",
+ U64_PRINTF_ARG(chan_id), (unsigned)circ_id);
+ p_chan = channel_find_by_global_id(chan_id);
- if (p_conn)
- circ = circuit_get_by_circid_orconn(circ_id, p_conn);
+ if (p_chan)
+ circ = circuit_get_by_circid_channel(circ_id, p_chan);
- if (success == 0) {
+ if (rpl.success == 0) {
log_debug(LD_OR,
"decoding onionskin failed. "
"(Old key or bad software.) Closing.");
@@ -180,8 +367,10 @@ connection_cpu_process_inbuf(connection_t *conn)
goto done_processing;
}
tor_assert(! CIRCUIT_IS_ORIGIN(circ));
- if (onionskin_answer(TO_OR_CIRCUIT(circ), CELL_CREATED, buf+TAG_LEN,
- buf+TAG_LEN+ONIONSKIN_REPLY_LEN) < 0) {
+ if (onionskin_answer(TO_OR_CIRCUIT(circ),
+ &rpl.created_cell,
+ (const char*)rpl.keys,
+ rpl.rend_auth_material) < 0) {
log_warn(LD_OR,"onionskin_answer failed. Closing.");
circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
goto done_processing;
@@ -208,32 +397,21 @@ connection_cpu_process_inbuf(connection_t *conn)
* Read and writes from fdarray[1]. Reads requests, writes answers.
*
* Request format:
- * Task type [1 byte, always CPUWORKER_TASK_ONION]
- * Opaque tag TAG_LEN
- * Onionskin challenge ONIONSKIN_CHALLENGE_LEN
+ * cpuworker_request_t.
* Response format:
- * Success/failure [1 byte, boolean.]
- * Opaque tag TAG_LEN
- * Onionskin challenge ONIONSKIN_REPLY_LEN
- * Negotiated keys KEY_LEN*2+DIGEST_LEN*2
- *
- * (Note: this _should_ be by addr/port, since we're concerned with specific
- * connections, not with routers (where we'd use identity).)
+ * cpuworker_reply_t
*/
static void
cpuworker_main(void *data)
{
- char question[ONIONSKIN_CHALLENGE_LEN];
- uint8_t question_type;
+ /* For talking to the parent thread/process */
tor_socket_t *fdarray = data;
tor_socket_t fd;
/* variables for onion processing */
- char keys[CPATH_KEY_MATERIAL_LEN];
- char reply_to_proxy[ONIONSKIN_REPLY_LEN];
- char buf[LEN_ONION_RESPONSE];
- char tag[TAG_LEN];
- crypto_pk_t *onion_key = NULL, *last_onion_key = NULL;
+ server_onion_keys_t onion_keys;
+ cpuworker_request_t req;
+ cpuworker_reply_t rpl;
fd = fdarray[1]; /* this side is ours */
#ifndef TOR_IS_MULTITHREADED
@@ -244,68 +422,85 @@ cpuworker_main(void *data)
#endif
tor_free(data);
- dup_onion_keys(&onion_key, &last_onion_key);
+ setup_server_onion_keys(&onion_keys);
for (;;) {
- ssize_t r;
-
- if ((r = recv(fd, (void *)&question_type, 1, 0)) != 1) {
-// log_fn(LOG_ERR,"read type failed. Exiting.");
- if (r == 0) {
- log_info(LD_OR,
- "CPU worker exiting because Tor process closed connection "
- "(either rotated keys or died).");
- } else {
- log_info(LD_OR,
- "CPU worker exiting because of error on connection to Tor "
- "process.");
- log_info(LD_OR,"(Error on %d was %s)",
- fd, tor_socket_strerror(tor_socket_errno(fd)));
- }
- goto end;
- }
- tor_assert(question_type == CPUWORKER_TASK_ONION);
-
- if (read_all(fd, tag, TAG_LEN, 1) != TAG_LEN) {
- log_err(LD_BUG,"read tag failed. Exiting.");
+ if (read_all(fd, (void *)&req, sizeof(req), 1) != sizeof(req)) {
+ log_info(LD_OR, "read request failed. Exiting.");
goto end;
}
-
- if (read_all(fd, question, ONIONSKIN_CHALLENGE_LEN, 1) !=
- ONIONSKIN_CHALLENGE_LEN) {
- log_err(LD_BUG,"read question failed. Exiting.");
- goto end;
- }
-
- if (question_type == CPUWORKER_TASK_ONION) {
- if (onion_skin_server_handshake(question, onion_key, last_onion_key,
- reply_to_proxy, keys, CPATH_KEY_MATERIAL_LEN) < 0) {
+ tor_assert(req.magic == CPUWORKER_REQUEST_MAGIC);
+
+ memset(&rpl, 0, sizeof(rpl));
+
+ if (req.task == CPUWORKER_TASK_ONION) {
+ const create_cell_t *cc = &req.create_cell;
+ created_cell_t *cell_out = &rpl.created_cell;
+ struct timeval tv_start = {0,0}, tv_end;
+ int n;
+ rpl.timed = req.timed;
+ rpl.started_at = req.started_at;
+ rpl.handshake_type = cc->handshake_type;
+ if (req.timed)
+ tor_gettimeofday(&tv_start);
+ n = onion_skin_server_handshake(cc->handshake_type,
+ cc->onionskin, cc->handshake_len,
+ &onion_keys,
+ cell_out->reply,
+ rpl.keys, CPATH_KEY_MATERIAL_LEN,
+ rpl.rend_auth_material);
+ if (n < 0) {
/* failure */
log_debug(LD_OR,"onion_skin_server_handshake failed.");
- *buf = 0; /* indicate failure in first byte */
- memcpy(buf+1,tag,TAG_LEN);
- /* send all zeros as answer */
- memset(buf+1+TAG_LEN, 0, LEN_ONION_RESPONSE-(1+TAG_LEN));
+ memset(&rpl, 0, sizeof(rpl));
+ memcpy(rpl.tag, req.tag, TAG_LEN);
+ rpl.success = 0;
} else {
/* success */
log_debug(LD_OR,"onion_skin_server_handshake succeeded.");
- buf[0] = 1; /* 1 means success */
- memcpy(buf+1,tag,TAG_LEN);
- memcpy(buf+1+TAG_LEN,reply_to_proxy,ONIONSKIN_REPLY_LEN);
- memcpy(buf+1+TAG_LEN+ONIONSKIN_REPLY_LEN,keys,CPATH_KEY_MATERIAL_LEN);
+ memcpy(rpl.tag, req.tag, TAG_LEN);
+ cell_out->handshake_len = n;
+ switch (cc->cell_type) {
+ case CELL_CREATE:
+ cell_out->cell_type = CELL_CREATED; break;
+ case CELL_CREATE2:
+ cell_out->cell_type = CELL_CREATED2; break;
+ case CELL_CREATE_FAST:
+ cell_out->cell_type = CELL_CREATED_FAST; break;
+ default:
+ tor_assert(0);
+ goto end;
+ }
+ rpl.success = 1;
}
- if (write_all(fd, buf, LEN_ONION_RESPONSE, 1) != LEN_ONION_RESPONSE) {
+ rpl.magic = CPUWORKER_REPLY_MAGIC;
+ if (req.timed) {
+ struct timeval tv_diff;
+ int64_t usec;
+ tor_gettimeofday(&tv_end);
+ timersub(&tv_end, &tv_start, &tv_diff);
+ usec = ((int64_t)tv_diff.tv_sec)*1000000 + tv_diff.tv_usec;
+ if (usec < 0 || usec > MAX_BELIEVABLE_ONIONSKIN_DELAY)
+ rpl.n_usec = MAX_BELIEVABLE_ONIONSKIN_DELAY;
+ else
+ rpl.n_usec = (uint32_t) usec;
+ }
+ if (write_all(fd, (void*)&rpl, sizeof(rpl), 1) != sizeof(rpl)) {
log_err(LD_BUG,"writing response buf failed. Exiting.");
goto end;
}
log_debug(LD_OR,"finished writing response.");
+ } else if (req.task == CPUWORKER_TASK_SHUTDOWN) {
+ log_info(LD_OR,"Clean shutdown: exiting");
+ goto end;
}
+ memwipe(&req, 0, sizeof(req));
+ memwipe(&rpl, 0, sizeof(req));
}
end:
- if (onion_key)
- crypto_pk_free(onion_key);
- if (last_onion_key)
- crypto_pk_free(last_onion_key);
+ memwipe(&req, 0, sizeof(req));
+ memwipe(&rpl, 0, sizeof(req));
+ release_server_onion_keys(&onion_keys);
tor_close_socket(fd);
crypto_thread_cleanup();
spawn_exit();
@@ -333,7 +528,12 @@ spawn_cpuworker(void)
tor_assert(SOCKET_OK(fdarray[1]));
fd = fdarray[0];
- spawn_func(cpuworker_main, (void*)fdarray);
+ if (spawn_func(cpuworker_main, (void*)fdarray) < 0) {
+ tor_close_socket(fdarray[0]);
+ tor_close_socket(fdarray[1]);
+ tor_free(fdarray);
+ return -1;
+ }
log_debug(LD_OR,"just spawned a cpu worker.");
#ifndef TOR_IS_MULTITHREADED
tor_close_socket(fdarray[1]); /* don't need the worker's side of the pipe */
@@ -342,13 +542,16 @@ spawn_cpuworker(void)
conn = connection_new(CONN_TYPE_CPUWORKER, AF_UNIX);
- set_socket_nonblocking(fd);
-
/* set up conn so it's got all the data we need to remember */
conn->s = fd;
conn->address = tor_strdup("localhost");
tor_addr_make_unspec(&conn->addr);
+ if (set_socket_nonblocking(fd) == -1) {
+ connection_free(conn); /* this closes fd */
+ return -1;
+ }
+
if (connection_add(conn) < 0) { /* no space, forget it */
log_warn(LD_NET,"connection_add for cpuworker failed. Giving up.");
connection_free(conn); /* this closes fd */
@@ -368,6 +571,7 @@ static void
spawn_enough_cpuworkers(void)
{
int num_cpuworkers_needed = get_num_cpus(get_options());
+ int reseed = 0;
if (num_cpuworkers_needed < MIN_CPUWORKERS)
num_cpuworkers_needed = MIN_CPUWORKERS;
@@ -380,7 +584,11 @@ spawn_enough_cpuworkers(void)
return;
}
num_cpuworkers++;
+ reseed++;
}
+
+ if (reseed)
+ crypto_seed_weak_rng(&request_sample_rng);
}
/** Take a pending task from the queue and assign it to 'cpuworker'. */
@@ -388,7 +596,7 @@ static void
process_pending_task(connection_t *cpuworker)
{
or_circuit_t *circ;
- char *onionskin = NULL;
+ create_cell_t *onionskin = NULL;
tor_assert(cpuworker);
@@ -441,12 +649,13 @@ cull_wedged_cpuworkers(void)
*/
int
assign_onionskin_to_cpuworker(connection_t *cpuworker,
- or_circuit_t *circ, char *onionskin)
+ or_circuit_t *circ,
+ create_cell_t *onionskin)
{
- char qbuf[1];
- char tag[TAG_LEN];
+ cpuworker_request_t req;
time_t now = approx_time();
static time_t last_culled_cpuworkers = 0;
+ int should_time;
/* Checking for wedged cpuworkers requires a linear search over all
* connections, so let's do it only once a minute.
@@ -475,26 +684,39 @@ assign_onionskin_to_cpuworker(connection_t *cpuworker,
tor_assert(cpuworker);
- if (!circ->p_conn) {
- log_info(LD_OR,"circ->p_conn gone. Failing circ.");
+ if (!circ->p_chan) {
+ log_info(LD_OR,"circ->p_chan gone. Failing circ.");
tor_free(onionskin);
return -1;
}
- tag_pack(tag, circ->p_conn->_base.global_identifier,
+
+ if (connection_or_digest_is_known_relay(circ->p_chan->identity_digest))
+ rep_hist_note_circuit_handshake_assigned(onionskin->handshake_type);
+
+ should_time = should_time_request(onionskin->handshake_type);
+ memset(&req, 0, sizeof(req));
+ req.magic = CPUWORKER_REQUEST_MAGIC;
+ tag_pack(req.tag, circ->p_chan->global_identifier,
circ->p_circ_id);
+ req.timed = should_time;
cpuworker->state = CPUWORKER_STATE_BUSY_ONION;
/* touch the lastwritten timestamp, since that's how we check to
* see how long it's been since we asked the question, and sometimes
* we check before the first call to connection_handle_write(). */
- cpuworker->timestamp_lastwritten = time(NULL);
+ cpuworker->timestamp_lastwritten = now;
num_cpuworkers_busy++;
- qbuf[0] = CPUWORKER_TASK_ONION;
- connection_write_to_buf(qbuf, 1, cpuworker);
- connection_write_to_buf(tag, sizeof(tag), cpuworker);
- connection_write_to_buf(onionskin, ONIONSKIN_CHALLENGE_LEN, cpuworker);
+ req.task = CPUWORKER_TASK_ONION;
+ memcpy(&req.create_cell, onionskin, sizeof(create_cell_t));
+
tor_free(onionskin);
+
+ if (should_time)
+ tor_gettimeofday(&req.started_at);
+
+ connection_write_to_buf((void*)&req, sizeof(req), cpuworker);
+ memwipe(&req, 0, sizeof(req));
}
return 0;
}
diff --git a/src/or/cpuworker.h b/src/or/cpuworker.h
index 91172caa5..317cef43b 100644
--- a/src/or/cpuworker.h
+++ b/src/or/cpuworker.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,17 +9,23 @@
* \brief Header file for cpuworker.c.
**/
-#ifndef _TOR_CPUWORKER_H
-#define _TOR_CPUWORKER_H
+#ifndef TOR_CPUWORKER_H
+#define TOR_CPUWORKER_H
void cpu_init(void);
void cpuworkers_rotate(void);
int connection_cpu_finished_flushing(connection_t *conn);
int connection_cpu_reached_eof(connection_t *conn);
int connection_cpu_process_inbuf(connection_t *conn);
+struct create_cell_t;
int assign_onionskin_to_cpuworker(connection_t *cpuworker,
or_circuit_t *circ,
- char *onionskin);
+ struct create_cell_t *onionskin);
+
+uint64_t estimated_usec_for_onionskins(uint32_t n_requests,
+ uint16_t onionskin_type);
+void cpuworker_log_onionskin_overhead(int severity, int onionskin_type,
+ const char *onionskin_type_name);
#endif
diff --git a/src/or/directory.c b/src/or/directory.c
index f235bf3b4..22ba056ee 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -13,6 +13,7 @@
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "main.h"
#include "microdesc.h"
@@ -25,6 +26,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
#if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
#ifndef OPENBSD
@@ -58,7 +60,6 @@
static void directory_send_command(dir_connection_t *conn,
int purpose, int direct, const char *resource,
const char *payload, size_t payload_len,
- int supports_conditional_consensus,
time_t if_modified_since);
static int directory_handle_command(dir_connection_t *conn);
static int body_is_plausible(const char *body, size_t body_len, int purpose);
@@ -66,15 +67,11 @@ static int purpose_needs_anonymity(uint8_t dir_purpose,
uint8_t router_purpose);
static char *http_get_header(const char *headers, const char *which);
static void http_set_address_origin(const char *headers, connection_t *conn);
-static void connection_dir_download_v2_networkstatus_failed(
- dir_connection_t *conn, int status_code);
static void connection_dir_download_routerdesc_failed(dir_connection_t *conn);
static void connection_dir_bridge_routerdesc_failed(dir_connection_t *conn);
static void connection_dir_download_cert_failed(
dir_connection_t *conn, int status_code);
static void connection_dir_retry_bridges(smartlist_t *descs);
-static void dir_networkstatus_download_failed(smartlist_t *failed,
- int status_code);
static void dir_routerdesc_download_failed(smartlist_t *failed,
int status_code,
int router_purpose,
@@ -85,16 +82,13 @@ static void dir_microdesc_download_failed(smartlist_t *failed,
static void note_client_request(int purpose, int compressed, size_t bytes);
static int client_likes_consensus(networkstatus_t *v, const char *want_url);
-static void directory_initiate_command_rend(const char *address,
- const tor_addr_t *addr,
+static void directory_initiate_command_rend(const tor_addr_t *addr,
uint16_t or_port,
uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir,
const char *digest,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -136,7 +130,6 @@ purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose)
if (dir_purpose == DIR_PURPOSE_UPLOAD_DIR ||
dir_purpose == DIR_PURPOSE_UPLOAD_VOTE ||
dir_purpose == DIR_PURPOSE_UPLOAD_SIGNATURES ||
- dir_purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS ||
dir_purpose == DIR_PURPOSE_FETCH_STATUS_VOTE ||
dir_purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES ||
dir_purpose == DIR_PURPOSE_FETCH_CONSENSUS ||
@@ -155,16 +148,10 @@ authdir_type_to_string(dirinfo_type_t auth)
{
char *result;
smartlist_t *lst = smartlist_new();
- if (auth & V1_DIRINFO)
- smartlist_add(lst, (void*)"V1");
- if (auth & V2_DIRINFO)
- smartlist_add(lst, (void*)"V2");
if (auth & V3_DIRINFO)
smartlist_add(lst, (void*)"V3");
if (auth & BRIDGE_DIRINFO)
smartlist_add(lst, (void*)"Bridge");
- if (auth & HIDSERV_DIRINFO)
- smartlist_add(lst, (void*)"Hidden service");
if (smartlist_len(lst)) {
result = smartlist_join_strings(lst, ", ", 0, NULL);
} else {
@@ -180,18 +167,12 @@ dir_conn_purpose_to_string(int purpose)
{
switch (purpose)
{
- case DIR_PURPOSE_FETCH_RENDDESC:
- return "hidden-service descriptor fetch";
case DIR_PURPOSE_UPLOAD_DIR:
return "server descriptor upload";
- case DIR_PURPOSE_UPLOAD_RENDDESC:
- return "hidden-service descriptor upload";
case DIR_PURPOSE_UPLOAD_VOTE:
return "server vote upload";
case DIR_PURPOSE_UPLOAD_SIGNATURES:
return "consensus signature upload";
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS:
- return "network-status fetch";
case DIR_PURPOSE_FETCH_SERVERDESC:
return "server descriptor fetch";
case DIR_PURPOSE_FETCH_EXTRAINFO:
@@ -227,16 +208,9 @@ router_supports_extrainfo(const char *identity_digest, int is_authority)
if (node && node->ri) {
if (node->ri->caches_extra_info)
return 1;
- if (is_authority && node->ri->platform &&
- tor_version_as_new_as(node->ri->platform,
- "Tor 0.2.0.0-alpha-dev (r10070)"))
- return 1;
}
if (is_authority) {
- const routerstatus_t *rs =
- router_get_consensus_status_by_id(identity_digest);
- if (rs && rs->version_supports_extrainfo_upload)
- return 1;
+ return 1;
}
return 0;
}
@@ -252,10 +226,10 @@ router_supports_extrainfo(const char *identity_digest, int is_authority)
int
directories_have_accepted_server_descriptor(void)
{
- smartlist_t *servers = router_get_trusted_dir_servers();
+ const smartlist_t *servers = router_get_trusted_dir_servers();
const or_options_t *options = get_options();
- SMARTLIST_FOREACH(servers, trusted_dir_server_t *, d, {
- if ((d->type & options->_PublishServerDescriptor) &&
+ SMARTLIST_FOREACH(servers, dir_server_t *, d, {
+ if ((d->type & options->PublishServerDescriptor_) &&
d->has_accepted_serverdesc) {
return 1;
}
@@ -266,13 +240,13 @@ directories_have_accepted_server_descriptor(void)
/** Start a connection to every suitable directory authority, using
* connection purpose <b>dir_purpose</b> and uploading <b>payload</b>
* (of length <b>payload_len</b>). The dir_purpose should be one of
- * 'DIR_PURPOSE_UPLOAD_DIR' or 'DIR_PURPOSE_UPLOAD_RENDDESC'.
+ * 'DIR_PURPOSE_UPLOAD_{DIR|VOTE|SIGNATURES}'.
*
* <b>router_purpose</b> describes the type of descriptor we're
* publishing, if we're publishing a descriptor -- e.g. general or bridge.
*
- * <b>type</b> specifies what sort of dir authorities (V1, V2,
- * HIDSERV, BRIDGE) we should upload to.
+ * <b>type</b> specifies what sort of dir authorities (V3,
+ * BRIDGE, etc) we should upload to.
*
* If <b>extrainfo_len</b> is nonzero, the first <b>payload_len</b> bytes of
* <b>payload</b> hold a router descriptor, and the next <b>extrainfo_len</b>
@@ -287,8 +261,8 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
size_t payload_len, size_t extrainfo_len)
{
const or_options_t *options = get_options();
- int post_via_tor;
- smartlist_t *dirservers = router_get_trusted_dir_servers();
+ dir_indirection_t indirection;
+ const smartlist_t *dirservers = router_get_trusted_dir_servers();
int found = 0;
const int exclude_self = (dir_purpose == DIR_PURPOSE_UPLOAD_VOTE ||
dir_purpose == DIR_PURPOSE_UPLOAD_SIGNATURES);
@@ -296,7 +270,7 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
/* This tries dirservers which we believe to be down, but ultimately, that's
* harmless, and we may as well err on the side of getting things uploaded.
*/
- SMARTLIST_FOREACH_BEGIN(dirservers, trusted_dir_server_t *, ds) {
+ SMARTLIST_FOREACH_BEGIN(dirservers, dir_server_t *, ds) {
routerstatus_t *rs = &(ds->fake_status);
size_t upload_len = payload_len;
tor_addr_t ds_addr;
@@ -304,8 +278,12 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
if ((type & ds->type) == 0)
continue;
- if (exclude_self && router_digest_is_me(ds->digest))
+ if (exclude_self && router_digest_is_me(ds->digest)) {
+ /* we don't upload to ourselves, but at least there's now at least
+ * one authority of this type that has what we wanted to upload. */
+ found = 1;
continue;
+ }
if (options->StrictNodes &&
routerset_contains_routerstatus(options->ExcludeNodes, rs, -1)) {
@@ -327,11 +305,19 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
(int) extrainfo_len);
}
tor_addr_from_ipv4h(&ds_addr, ds->addr);
- post_via_tor = purpose_needs_anonymity(dir_purpose, router_purpose) ||
- !fascist_firewall_allows_address_dir(&ds_addr, ds->dir_port);
+ if (purpose_needs_anonymity(dir_purpose, router_purpose)) {
+ indirection = DIRIND_ANONYMOUS;
+ } else if (!fascist_firewall_allows_address_dir(&ds_addr,ds->dir_port)) {
+ if (fascist_firewall_allows_address_or(&ds_addr,ds->or_port))
+ indirection = DIRIND_ONEHOP;
+ else
+ indirection = DIRIND_ANONYMOUS;
+ } else {
+ indirection = DIRIND_DIRECT_CONN;
+ }
directory_initiate_command_routerstatus(rs, dir_purpose,
router_purpose,
- post_via_tor,
+ indirection,
NULL, payload, upload_len, 0);
} SMARTLIST_FOREACH_END(ds);
if (!found) {
@@ -342,6 +328,57 @@ directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
}
}
+/** Return true iff, according to the values in <b>options</b>, we should be
+ * using directory guards for direct downloads of directory information. */
+static int
+should_use_directory_guards(const or_options_t *options)
+{
+ /* Public (non-bridge) servers never use directory guards. */
+ if (public_server_mode(options))
+ return 0;
+ /* If guards are disabled, or directory guards are disabled, we can't
+ * use directory guards.
+ */
+ if (!options->UseEntryGuards || !options->UseEntryGuardsAsDirGuards)
+ return 0;
+ /* If we're configured to fetch directory info aggressively or of a
+ * nonstandard type, don't use directory guards. */
+ if (options->DownloadExtraInfo || options->FetchDirInfoEarly ||
+ options->FetchDirInfoExtraEarly || options->FetchUselessDescriptors)
+ return 0;
+ return 1;
+}
+
+/** Pick an unconsetrained directory server from among our guards, the latest
+ * networkstatus, or the fallback dirservers, for use in downloading
+ * information of type <b>type</b>, and return its routerstatus. */
+static const routerstatus_t *
+directory_pick_generic_dirserver(dirinfo_type_t type, int pds_flags,
+ uint8_t dir_purpose)
+{
+ const routerstatus_t *rs = NULL;
+ const or_options_t *options = get_options();
+
+ if (options->UseBridges)
+ log_warn(LD_BUG, "Called when we have UseBridges set.");
+
+ if (should_use_directory_guards(options)) {
+ const node_t *node = choose_random_dirguard(type);
+ if (node)
+ rs = node->rs;
+ } else {
+ /* anybody with a non-zero dirport will do */
+ rs = router_pick_directory_server(type, pds_flags);
+ }
+ if (!rs) {
+ log_info(LD_DIR, "No router found for %s; falling back to "
+ "dirserver list.", dir_conn_purpose_to_string(dir_purpose));
+ rs = router_pick_fallback_dirserver(type, pds_flags);
+ }
+
+ return rs;
+}
+
/** Start a connection to a random running directory server, using
* connection purpose <b>dir_purpose</b>, intending to fetch descriptors
* of purpose <b>router_purpose</b>, and requesting <b>resource</b>.
@@ -368,18 +405,10 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
(router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO :
V3_DIRINFO);
break;
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS:
- type = V2_DIRINFO;
- prefer_authority = 1; /* Only v2 authorities have these anyway. */
- require_authority = 1; /* Don't fallback to asking a non-authority */
- break;
case DIR_PURPOSE_FETCH_SERVERDESC:
type = (router_purpose == ROUTER_PURPOSE_BRIDGE ? BRIDGE_DIRINFO :
V3_DIRINFO);
break;
- case DIR_PURPOSE_FETCH_RENDDESC:
- type = HIDSERV_DIRINFO;
- break;
case DIR_PURPOSE_FETCH_STATUS_VOTE:
case DIR_PURPOSE_FETCH_DETACHED_SIGNATURES:
case DIR_PURPOSE_FETCH_CERTIFICATE:
@@ -419,33 +448,32 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
}
}
- if (!options->FetchServerDescriptors && type != HIDSERV_DIRINFO)
+ if (!options->FetchServerDescriptors)
return;
if (!get_via_tor) {
if (options->UseBridges && type != BRIDGE_DIRINFO) {
/* We want to ask a running bridge for which we have a descriptor.
*
- * Be careful here: we should only ask questions that we know our
- * bridges can answer. So far we're solving that by backing off to
- * the behavior supported by our oldest bridge; see for example
- * any_bridges_dont_support_microdescriptors().
+ * When we ask choose_random_entry() for a bridge, we specify what
+ * sort of dir fetch we'll be doing, so it won't return a bridge
+ * that can't answer our question.
*/
/* XXX024 Not all bridges handle conditional consensus downloading,
* so, for now, never assume the server supports that. -PP */
- const node_t *node = choose_random_entry(NULL);
+ const node_t *node = choose_random_dirguard(type);
if (node && node->ri) {
/* every bridge has a routerinfo. */
tor_addr_t addr;
routerinfo_t *ri = node->ri;
node_get_addr(node, &addr);
- directory_initiate_command(ri->address, &addr,
- ri->or_port, 0,
- 0, /* don't use conditional consensus url */
- 1, ri->cache_info.identity_digest,
+ directory_initiate_command(&addr,
+ ri->or_port, 0/*no dirport*/,
+ ri->cache_info.identity_digest,
dir_purpose,
router_purpose,
- 0, resource, NULL, 0, if_modified_since);
+ DIRIND_ONEHOP,
+ resource, NULL, 0, if_modified_since);
} else
log_notice(LD_DIR, "Ignoring directory request, since no bridge "
"nodes are available yet.");
@@ -479,24 +507,19 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
}
}
if (!rs && type != BRIDGE_DIRINFO) {
- /* anybody with a non-zero dirport will do */
- rs = router_pick_directory_server(type, pds_flags);
+ /* */
+ rs = directory_pick_generic_dirserver(type, pds_flags,
+ dir_purpose);
if (!rs) {
- log_info(LD_DIR, "No router found for %s; falling back to "
- "dirserver list.", dir_conn_purpose_to_string(dir_purpose));
- rs = router_pick_trusteddirserver(type, pds_flags);
- if (!rs)
- get_via_tor = 1; /* last resort: try routing it via Tor */
+ /*XXXX024 I'm pretty sure this can never do any good, since
+ * rs isn't set. */
+ get_via_tor = 1; /* last resort: try routing it via Tor */
}
}
}
} else { /* get_via_tor */
/* Never use fascistfirewall; we're going via Tor. */
- if (dir_purpose == DIR_PURPOSE_FETCH_RENDDESC) {
- /* only ask hidserv authorities, any of them will do */
- pds_flags |= PDS_IGNORE_FASCISTFIREWALL|PDS_ALLOW_SELF;
- rs = router_pick_trusteddirserver(HIDSERV_DIRINFO, pds_flags);
- } else {
+ if (1) {
/* anybody with a non-zero dirport will do. Disregard firewalls. */
pds_flags |= PDS_IGNORE_FASCISTFIREWALL;
rs = router_pick_directory_server(type, pds_flags);
@@ -506,13 +529,15 @@ directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
}
}
- if (rs)
+ if (rs) {
+ const dir_indirection_t indirection =
+ get_via_tor ? DIRIND_ANONYMOUS : DIRIND_ONEHOP;
directory_initiate_command_routerstatus(rs, dir_purpose,
router_purpose,
- get_via_tor,
+ indirection,
resource, NULL, 0,
if_modified_since);
- else {
+ } else {
log_notice(LD_DIR,
"While fetching directory info, "
"no running dirservers known. Will try again later. "
@@ -536,7 +561,7 @@ directory_get_from_all_authorities(uint8_t dir_purpose,
dir_purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES);
SMARTLIST_FOREACH_BEGIN(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds) {
+ dir_server_t *, ds) {
routerstatus_t *rs;
if (router_digest_is_me(ds->digest))
continue;
@@ -544,17 +569,25 @@ directory_get_from_all_authorities(uint8_t dir_purpose,
continue;
rs = &ds->fake_status;
directory_initiate_command_routerstatus(rs, dir_purpose, router_purpose,
- 0, resource, NULL, 0, 0);
+ DIRIND_ONEHOP, resource, NULL,
+ 0, 0);
} SMARTLIST_FOREACH_END(ds);
}
+/** Return true iff <b>ind</b> requires a multihop circuit. */
+static int
+dirind_is_anon(dir_indirection_t ind)
+{
+ return ind == DIRIND_ANON_DIRPORT || ind == DIRIND_ANONYMOUS;
+}
+
/** Same as directory_initiate_command_routerstatus(), but accepts
* rendezvous data to fetch a hidden service descriptor. */
void
directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -563,10 +596,8 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
{
const or_options_t *options = get_options();
const node_t *node;
- char address_buf[INET_NTOA_BUF_LEN+1];
- struct in_addr in;
- const char *address;
tor_addr_t addr;
+ const int anonymized_connection = dirind_is_anon(indirection);
node = node_get_by_id(status->identity_digest);
if (!node && anonymized_connection) {
@@ -574,13 +605,6 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
"don't have its router descriptor.",
routerstatus_describe(status));
return;
- } else if (node) {
- node_get_address_string(node, address_buf, sizeof(address_buf));
- address = address_buf;
- } else {
- in.s_addr = htonl(status->addr);
- tor_inet_ntoa(&in, address_buf, sizeof(address_buf));
- address = address_buf;
}
tor_addr_from_ipv4h(&addr, status->addr);
@@ -594,13 +618,11 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
return;
}
- directory_initiate_command_rend(address, &addr,
+ directory_initiate_command_rend(&addr,
status->or_port, status->dir_port,
- status->version_supports_conditional_consensus,
- status->version_supports_begindir,
status->identity_digest,
dir_purpose, router_purpose,
- anonymized_connection, resource,
+ indirection, resource,
payload, payload_len, if_modified_since,
rend_query);
}
@@ -609,7 +631,7 @@ directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
* upload or download a server or rendezvous
* descriptor. <b>dir_purpose</b> determines what
* kind of directory connection we're launching, and must be one of
- * DIR_PURPOSE_{FETCH|UPLOAD}_{DIR|RENDDESC|RENDDESC_V2}. <b>router_purpose</b>
+ * DIR_PURPOSE_{FETCH|UPLOAD}_{DIR|RENDDESC_V2}. <b>router_purpose</b>
* specifies the descriptor purposes we have in mind (currently only
* used for FETCH_DIR).
*
@@ -623,7 +645,7 @@ void
directory_initiate_command_routerstatus(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -631,7 +653,7 @@ directory_initiate_command_routerstatus(const routerstatus_t *status,
{
directory_initiate_command_routerstatus_rend(status, dir_purpose,
router_purpose,
- anonymized_connection, resource,
+ indirection, resource,
payload, payload_len,
if_modified_since, NULL);
}
@@ -647,8 +669,8 @@ directory_conn_is_self_reachability_test(dir_connection_t *conn)
const routerinfo_t *me = router_get_my_routerinfo();
if (me &&
router_digest_is_me(conn->identity_digest) &&
- tor_addr_eq_ipv4h(&conn->_base.addr, me->addr) && /*XXXX prop 118*/
- me->dir_port == conn->_base.port)
+ tor_addr_eq_ipv4h(&conn->base_.addr, me->addr) && /*XXXX prop 118*/
+ me->dir_port == conn->base_.port)
return 1;
}
return 0;
@@ -666,76 +688,35 @@ connection_dir_request_failed(dir_connection_t *conn)
}
if (!entry_list_is_constrained(get_options()))
router_set_status(conn->identity_digest, 0); /* don't try him again */
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS) {
- log_info(LD_DIR, "Giving up on directory server at '%s'; retrying",
- conn->_base.address);
- connection_dir_download_v2_networkstatus_failed(conn, -1);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
log_info(LD_DIR, "Giving up on serverdesc/extrainfo fetch from "
"directory server at '%s'; retrying",
- conn->_base.address);
+ conn->base_.address);
if (conn->router_purpose == ROUTER_PURPOSE_BRIDGE)
connection_dir_bridge_routerdesc_failed(conn);
connection_dir_download_routerdesc_failed(conn);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
if (conn->requested_resource)
networkstatus_consensus_download_failed(0, conn->requested_resource);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
log_info(LD_DIR, "Giving up on certificate fetch from directory server "
"at '%s'; retrying",
- conn->_base.address);
+ conn->base_.address);
connection_dir_download_cert_failed(conn, 0);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
log_info(LD_DIR, "Giving up downloading detached signatures from '%s'",
- conn->_base.address);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
+ conn->base_.address);
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
log_info(LD_DIR, "Giving up downloading votes from '%s'",
- conn->_base.address);
- } else if (conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
+ conn->base_.address);
+ } else if (conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
log_info(LD_DIR, "Giving up on downloading microdescriptors from "
- " directory server at '%s'; will retry", conn->_base.address);
+ "directory server at '%s'; will retry", conn->base_.address);
connection_dir_download_routerdesc_failed(conn);
}
}
-/** Called when an attempt to download one or more network status
- * documents on connection <b>conn</b> failed. Decide whether to
- * retry the fetch now, later, or never.
- */
-static void
-connection_dir_download_v2_networkstatus_failed(dir_connection_t *conn,
- int status_code)
-{
- if (!conn->requested_resource) {
- /* We never reached directory_send_command, which means that we never
- * opened a network connection. Either we're out of sockets, or the
- * network is down. Either way, retrying would be pointless. */
- return;
- }
- if (!strcmpstart(conn->requested_resource, "all")) {
- /* We're a non-authoritative directory cache; try again. Ignore status
- * code, since we don't want to keep trying forever in a tight loop
- * if all the authorities are shutting us out. */
- smartlist_t *trusted_dirs = router_get_trusted_dir_servers();
- SMARTLIST_FOREACH(trusted_dirs, trusted_dir_server_t *, ds,
- download_status_failed(&ds->v2_ns_dl_status, 0));
- directory_get_from_dirserver(conn->_base.purpose, conn->router_purpose,
- "all.z", 0 /* don't retry_if_no_servers */);
- } else if (!strcmpstart(conn->requested_resource, "fp/")) {
- /* We were trying to download by fingerprint; mark them all as having
- * failed, and possibly retry them later.*/
- smartlist_t *failed = smartlist_new();
- dir_split_resource_into_fingerprints(conn->requested_resource+3,
- failed, NULL, 0);
- if (smartlist_len(failed)) {
- dir_networkstatus_download_failed(failed, status_code);
- SMARTLIST_FOREACH(failed, char *, cp, tor_free(cp));
- }
- smartlist_free(failed);
- }
-}
-
/** Helper: Attempt to fetch directly the descriptors of each bridge
* listed in <b>failed</b>.
*/
@@ -765,9 +746,9 @@ connection_dir_download_routerdesc_failed(dir_connection_t *conn)
/* No need to relaunch descriptor downloads here: we already do it
* every 10 or 60 seconds (FOO_DESCRIPTOR_RETRY_INTERVAL) in main.c. */
- tor_assert(conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC);
+ tor_assert(conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC);
(void) conn;
}
@@ -791,7 +772,7 @@ connection_dir_bridge_routerdesc_failed(dir_connection_t *conn)
+ strlen("fp/"),
which, NULL, 0);
- tor_assert(conn->_base.purpose != DIR_PURPOSE_FETCH_EXTRAINFO);
+ tor_assert(conn->base_.purpose != DIR_PURPOSE_FETCH_EXTRAINFO);
if (smartlist_len(which)) {
connection_dir_retry_bridges(which);
SMARTLIST_FOREACH(which, char *, cp, tor_free(cp));
@@ -803,19 +784,43 @@ connection_dir_bridge_routerdesc_failed(dir_connection_t *conn)
static void
connection_dir_download_cert_failed(dir_connection_t *conn, int status)
{
+ const char *fp_pfx = "fp/";
+ const char *fpsk_pfx = "fp-sk/";
smartlist_t *failed;
- tor_assert(conn->_base.purpose == DIR_PURPOSE_FETCH_CERTIFICATE);
+ tor_assert(conn->base_.purpose == DIR_PURPOSE_FETCH_CERTIFICATE);
if (!conn->requested_resource)
return;
failed = smartlist_new();
- dir_split_resource_into_fingerprints(conn->requested_resource+3,
- failed, NULL, DSR_HEX);
- SMARTLIST_FOREACH(failed, char *, cp,
- {
- authority_cert_dl_failed(cp, status);
- tor_free(cp);
- });
+ /*
+ * We have two cases download by fingerprint (resource starts
+ * with "fp/") or download by fingerprint/signing key pair
+ * (resource starts with "fp-sk/").
+ */
+ if (!strcmpstart(conn->requested_resource, fp_pfx)) {
+ /* Download by fingerprint case */
+ dir_split_resource_into_fingerprints(conn->requested_resource +
+ strlen(fp_pfx),
+ failed, NULL, DSR_HEX);
+ SMARTLIST_FOREACH_BEGIN(failed, char *, cp) {
+ /* Null signing key digest indicates download by fp only */
+ authority_cert_dl_failed(cp, NULL, status);
+ tor_free(cp);
+ } SMARTLIST_FOREACH_END(cp);
+ } else if (!strcmpstart(conn->requested_resource, fpsk_pfx)) {
+ /* Download by (fp,sk) pairs */
+ dir_split_resource_into_fingerprint_pairs(conn->requested_resource +
+ strlen(fpsk_pfx), failed);
+ SMARTLIST_FOREACH_BEGIN(failed, fp_pair_t *, cp) {
+ authority_cert_dl_failed(cp->first, cp->second, status);
+ tor_free(cp);
+ } SMARTLIST_FOREACH_END(cp);
+ } else {
+ log_warn(LD_DIR,
+ "Don't know what to do with failure for cert fetch %s",
+ conn->requested_resource);
+ }
+
smartlist_free(failed);
update_certificate_downloads(time(NULL));
@@ -833,17 +838,17 @@ static int
directory_command_should_use_begindir(const or_options_t *options,
const tor_addr_t *addr,
int or_port, uint8_t router_purpose,
- int anonymized_connection)
+ dir_indirection_t indirection)
{
+ (void) router_purpose;
if (!or_port)
return 0; /* We don't know an ORPort -- no chance. */
- if (!anonymized_connection)
+ if (indirection == DIRIND_DIRECT_CONN || indirection == DIRIND_ANON_DIRPORT)
+ return 0;
+ if (indirection == DIRIND_ONEHOP)
if (!fascist_firewall_allows_address_or(addr, or_port) ||
directory_fetches_from_authorities(options))
return 0; /* We're firewalled or are acting like a relay -- also no. */
- if (!options->TunnelDirConns &&
- router_purpose != ROUTER_PURPOSE_BRIDGE)
- return 0; /* We prefer to avoid using begindir conns. Fine. */
return 1;
}
@@ -853,19 +858,17 @@ directory_command_should_use_begindir(const or_options_t *options,
* <b>supports_begindir</b>, and whose identity key digest is
* <b>digest</b>. */
void
-directory_initiate_command(const char *address, const tor_addr_t *_addr,
+directory_initiate_command(const tor_addr_t *_addr,
uint16_t or_port, uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir, const char *digest,
+ const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
- int anonymized_connection, const char *resource,
+ dir_indirection_t indirection, const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since)
{
- directory_initiate_command_rend(address, _addr, or_port, dir_port,
- supports_conditional_consensus,
- supports_begindir, digest, dir_purpose,
- router_purpose, anonymized_connection,
+ directory_initiate_command_rend(_addr, or_port, dir_port,
+ digest, dir_purpose,
+ router_purpose, indirection,
resource, payload, payload_len,
if_modified_since, NULL);
}
@@ -877,9 +880,7 @@ directory_initiate_command(const char *address, const tor_addr_t *_addr,
static int
is_sensitive_dir_purpose(uint8_t dir_purpose)
{
- return ((dir_purpose == DIR_PURPOSE_FETCH_RENDDESC) ||
- (dir_purpose == DIR_PURPOSE_HAS_FETCHED_RENDDESC) ||
- (dir_purpose == DIR_PURPOSE_UPLOAD_RENDDESC) ||
+ return ((dir_purpose == DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2) ||
(dir_purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) ||
(dir_purpose == DIR_PURPOSE_FETCH_RENDDESC_V2));
}
@@ -887,12 +888,11 @@ is_sensitive_dir_purpose(uint8_t dir_purpose)
/** Same as directory_initiate_command(), but accepts rendezvous data to
* fetch a hidden service descriptor. */
static void
-directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
+directory_initiate_command_rend(const tor_addr_t *_addr,
uint16_t or_port, uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir, const char *digest,
+ const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since,
@@ -901,12 +901,11 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
dir_connection_t *conn;
const or_options_t *options = get_options();
int socket_error = 0;
- int use_begindir = supports_begindir &&
- directory_command_should_use_begindir(options, _addr,
- or_port, router_purpose, anonymized_connection);
+ int use_begindir = directory_command_should_use_begindir(options, _addr,
+ or_port, router_purpose, indirection);
+ const int anonymized_connection = dirind_is_anon(indirection);
tor_addr_t addr;
- tor_assert(address);
tor_assert(_addr);
tor_assert(or_port || dir_port);
tor_assert(digest);
@@ -937,18 +936,19 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
conn = dir_connection_new(tor_addr_family(&addr));
/* set up conn so it's got all the data we need to remember */
- tor_addr_copy(&conn->_base.addr, &addr);
- conn->_base.port = use_begindir ? or_port : dir_port;
- conn->_base.address = tor_strdup(address);
+ tor_addr_copy(&conn->base_.addr, &addr);
+ conn->base_.port = use_begindir ? or_port : dir_port;
+ conn->base_.address = tor_dup_addr(&addr);
memcpy(conn->identity_digest, digest, DIGEST_LEN);
- conn->_base.purpose = dir_purpose;
+ conn->base_.purpose = dir_purpose;
conn->router_purpose = router_purpose;
/* give it an initial state */
- conn->_base.state = DIR_CONN_STATE_CONNECTING;
+ conn->base_.state = DIR_CONN_STATE_CONNECTING;
/* decide whether we can learn our IP address from this conn */
+ /* XXXX This is a bad name for this field now. */
conn->dirconn_direct = !anonymized_connection;
/* copy rendezvous data, if any */
@@ -963,7 +963,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
dir_port = options->HTTPProxyPort;
}
- switch (connection_connect(TO_CONN(conn), conn->_base.address, &addr,
+ switch (connection_connect(TO_CONN(conn), conn->base_.address, &addr,
dir_port, &socket_error)) {
case -1:
connection_dir_request_failed(conn); /* retry if we want */
@@ -973,13 +973,12 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
return;
case 1:
/* start flushing conn */
- conn->_base.state = DIR_CONN_STATE_CLIENT_SENDING;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING;
/* fall through */
case 0:
/* queue the command on the outbuf */
directory_send_command(conn, dir_purpose, 1, resource,
payload, payload_len,
- supports_conditional_consensus,
if_modified_since);
connection_watch_events(TO_CONN(conn), READ_EVENT | WRITE_EVENT);
/* writable indicates finish, readable indicates broken link,
@@ -997,7 +996,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
if (anonymized_connection && use_begindir)
rep_hist_note_used_internal(time(NULL), 0, 1);
else if (anonymized_connection && !use_begindir)
- rep_hist_note_used_port(time(NULL), conn->_base.port);
+ rep_hist_note_used_port(time(NULL), conn->base_.port);
/* make an AP connection
* populate it and add it at the right state
@@ -1005,7 +1004,7 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
*/
linked_conn =
connection_ap_make_link(TO_CONN(conn),
- conn->_base.address, conn->_base.port,
+ conn->base_.address, conn->base_.port,
digest,
SESSION_GROUP_DIRCONN, iso_flags,
use_begindir, conn->dirconn_direct);
@@ -1020,11 +1019,10 @@ directory_initiate_command_rend(const char *address, const tor_addr_t *_addr,
connection_mark_for_close(TO_CONN(conn));
return;
}
- conn->_base.state = DIR_CONN_STATE_CLIENT_SENDING;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING;
/* queue the command on the outbuf */
directory_send_command(conn, dir_purpose, 0, resource,
payload, payload_len,
- supports_conditional_consensus,
if_modified_since);
connection_watch_events(TO_CONN(conn), READ_EVENT|WRITE_EVENT);
@@ -1054,7 +1052,7 @@ connection_dir_is_encrypted(dir_connection_t *conn)
* sort strings alphabetically
*/
static int
-_compare_strs(const void **a, const void **b)
+compare_strs_(const void **a, const void **b)
{
const char *s1 = *a, *s2 = *b;
return strcmp(s1, s2);
@@ -1074,8 +1072,7 @@ _compare_strs(const void **a, const void **b)
* If 'resource' is provided, it is the name of a consensus flavor to request.
*/
static char *
-directory_get_consensus_url(int supports_conditional_consensus,
- const char *resource)
+directory_get_consensus_url(const char *resource)
{
char *url = NULL;
const char *hyphen, *flavor;
@@ -1087,12 +1084,12 @@ directory_get_consensus_url(int supports_conditional_consensus,
hyphen = "-";
}
- if (supports_conditional_consensus) {
+ {
char *authority_id_list;
smartlist_t *authority_digests = smartlist_new();
SMARTLIST_FOREACH_BEGIN(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds) {
+ dir_server_t *, ds) {
char *hex;
if (!(ds->type & V3_DIRINFO))
continue;
@@ -1102,7 +1099,7 @@ directory_get_consensus_url(int supports_conditional_consensus,
ds->v3_identity_digest, CONDITIONAL_CONSENSUS_FPR_LEN);
smartlist_add(authority_digests, hex);
} SMARTLIST_FOREACH_END(ds);
- smartlist_sort(authority_digests, _compare_strs);
+ smartlist_sort(authority_digests, compare_strs_);
authority_id_list = smartlist_join_strings(authority_digests,
"+", 0, NULL);
@@ -1112,9 +1109,6 @@ directory_get_consensus_url(int supports_conditional_consensus,
SMARTLIST_FOREACH(authority_digests, char *, cp, tor_free(cp));
smartlist_free(authority_digests);
tor_free(authority_id_list);
- } else {
- tor_asprintf(&url, "/tor/status-vote/current/consensus%s%s.z",
- hyphen, flavor);
}
return url;
}
@@ -1126,7 +1120,6 @@ static void
directory_send_command(dir_connection_t *conn,
int purpose, int direct, const char *resource,
const char *payload, size_t payload_len,
- int supports_conditional_consensus,
time_t if_modified_since)
{
char proxystring[256];
@@ -1137,18 +1130,18 @@ directory_send_command(dir_connection_t *conn,
const char *httpcommand = NULL;
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
tor_free(conn->requested_resource);
if (resource)
conn->requested_resource = tor_strdup(resource);
/* come up with a string for which Host: we want */
- if (conn->_base.port == 80) {
- strlcpy(hoststring, conn->_base.address, sizeof(hoststring));
+ if (conn->base_.port == 80) {
+ strlcpy(hoststring, conn->base_.address, sizeof(hoststring));
} else {
tor_snprintf(hoststring, sizeof(hoststring),"%s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
/* Format if-modified-since */
@@ -1180,17 +1173,11 @@ directory_send_command(dir_connection_t *conn,
}
switch (purpose) {
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS:
- tor_assert(resource);
- httpcommand = "GET";
- tor_asprintf(&url, "/tor/status/%s", resource);
- break;
case DIR_PURPOSE_FETCH_CONSENSUS:
/* resource is optional. If present, it's a flavor name */
tor_assert(!payload);
httpcommand = "GET";
- url = directory_get_consensus_url(supports_conditional_consensus,
- resource);
+ url = directory_get_consensus_url(resource);
log_info(LD_DIR, "Downloading consensus from %s using %s",
hoststring, url);
break;
@@ -1257,12 +1244,6 @@ directory_send_command(dir_connection_t *conn,
httpcommand = "GET";
tor_asprintf(&url, "/tor/rendezvous2/%s", resource);
break;
- case DIR_PURPOSE_UPLOAD_RENDDESC:
- tor_assert(!resource);
- tor_assert(payload);
- httpcommand = "POST";
- url = tor_strdup("/tor/rendezvous/publish");
- break;
case DIR_PURPOSE_UPLOAD_RENDDESC_V2:
tor_assert(!resource);
tor_assert(payload);
@@ -1318,7 +1299,7 @@ directory_send_command(dir_connection_t *conn,
* so it does. Return 0.
* Otherwise, return -1.
*/
-static int
+STATIC int
parse_http_url(const char *headers, char **url)
{
char *s, *start, *tmp;
@@ -1347,6 +1328,19 @@ parse_http_url(const char *headers, char **url)
}
}
+ /* Check if the header is well formed (next sequence
+ * should be HTTP/1.X\r\n). Assumes we're supporting 1.0? */
+ {
+ unsigned minor_ver;
+ char ch;
+ char *e = (char *)eat_whitespace_no_nl(s);
+ if (2 != tor_sscanf(e, "HTTP/1.%u%c", &minor_ver, &ch)) {
+ return -1;
+ }
+ if (ch != '\r')
+ return -1;
+ }
+
if (s-start < 5 || strcmpstart(start,"/tor/")) { /* need to rewrite it */
*url = tor_malloc(s - start + 5);
strlcpy(*url,"/tor", s-start+5);
@@ -1393,13 +1387,14 @@ http_set_address_origin(const char *headers, connection_t *conn)
if (!fwd)
fwd = http_get_header(headers, "X-Forwarded-For: ");
if (fwd) {
- struct in_addr in;
- if (!tor_inet_aton(fwd, &in) || is_internal_IP(ntohl(in.s_addr), 0)) {
- log_debug(LD_DIR, "Ignoring unrecognized or internal IP %s",
- escaped(fwd));
+ tor_addr_t toraddr;
+ if (tor_addr_parse(&toraddr,fwd) == -1 ||
+ tor_addr_is_internal(&toraddr,0)) {
+ log_debug(LD_DIR, "Ignoring local/internal IP %s", escaped(fwd));
tor_free(fwd);
return;
}
+
tor_free(conn->address);
conn->address = tor_strdup(fwd);
tor_free(fwd);
@@ -1496,8 +1491,8 @@ parse_http_response(const char *headers, int *code, time_t *date,
}
/** Return true iff <b>body</b> doesn't start with a plausible router or
- * running-list or directory opening. This is a sign of possible compression.
- **/
+ * network-status or microdescriptor opening. This is a sign of possible
+ * compression. */
static int
body_is_plausible(const char *body, size_t len, int purpose)
{
@@ -1509,20 +1504,16 @@ body_is_plausible(const char *body, size_t len, int purpose)
if (purpose == DIR_PURPOSE_FETCH_MICRODESC) {
return (!strcmpstart(body,"onion-key"));
}
- if (purpose != DIR_PURPOSE_FETCH_RENDDESC) {
+ if (1) {
if (!strcmpstart(body,"router") ||
- !strcmpstart(body,"signed-directory") ||
- !strcmpstart(body,"network-status") ||
- !strcmpstart(body,"running-routers"))
- return 1;
+ !strcmpstart(body,"network-status"))
+ return 1;
for (i=0;i<32;++i) {
if (!TOR_ISPRINT(body[i]) && !TOR_ISSPACE(body[i]))
return 0;
}
- return 1;
- } else {
- return 1;
}
+ return 1;
}
/** Called when we've just fetched a bunch of router descriptors in
@@ -1557,8 +1548,9 @@ load_downloaded_routers(const char *body, smartlist_t *which,
added = router_load_routers_from_string(body, NULL, SAVED_NOWHERE, which,
descriptor_digests, buf);
- control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
- count_loading_descriptors_progress());
+ if (general)
+ control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
+ count_loading_descriptors_progress());
return added;
}
@@ -1577,18 +1569,19 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
char *body;
char *headers;
char *reason = NULL;
- size_t body_len=0, orig_len=0;
+ size_t body_len = 0, orig_len = 0;
int status_code;
- time_t date_header=0;
+ time_t date_header = 0;
long delta;
compress_method_t compression;
int plausible;
- int skewed=0;
- int allow_partial = (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC);
- int was_compressed=0;
+ int skewed = 0;
+ int allow_partial = (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC);
+ int was_compressed = 0;
time_t now = time(NULL);
+ int src_code;
switch (connection_fetch_from_buf_http(TO_CONN(conn),
&headers, MAX_HEADERS_SIZE,
@@ -1597,7 +1590,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
case -1: /* overflow */
log_warn(LD_PROTOCOL,
"'fetch' response too large (server '%s:%d'). Closing.",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
return -1;
case 0:
log_info(LD_HTTP,
@@ -1610,7 +1603,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (parse_http_response(headers, &status_code, &date_header,
&compression, &reason) < 0) {
log_warn(LD_HTTP,"Unparseable headers (server '%s:%d'). Closing.",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
tor_free(body); tor_free(headers);
return -1;
}
@@ -1619,9 +1612,9 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_debug(LD_DIR,
"Received response from directory server '%s:%d': %d %s "
"(purpose: %d)",
- conn->_base.address, conn->_base.port, status_code,
+ conn->base_.address, conn->base_.port, status_code,
escaped(reason),
- conn->_base.purpose);
+ conn->base_.purpose);
/* now check if it's got any hints for us about our IP address. */
if (conn->dirconn_direct) {
@@ -1638,7 +1631,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
* and the date header. (We used to check now-date_header, but that's
* inaccurate if we spend a lot of time downloading.)
*/
- delta = conn->_base.timestamp_lastwritten - date_header;
+ delta = conn->base_.timestamp_lastwritten - date_header;
if (labs(delta)>ALLOW_DIRECTORY_TIME_SKEW) {
char dbuf[64];
int trusted = router_digest_is_trusted_dir(conn->identity_digest);
@@ -1649,14 +1642,14 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
"It seems that our clock is %s by %s, or that theirs is %s. "
"Tor requires an accurate clock to work: please check your time, "
"timezone, and date settings.",
- conn->_base.address, conn->_base.port,
+ conn->base_.address, conn->base_.port,
delta>0 ? "ahead" : "behind", dbuf,
delta>0 ? "behind" : "ahead");
skewed = 1; /* don't check the recommended-versions line */
if (trusted)
control_event_general_status(LOG_WARN,
"CLOCK_SKEW SKEW=%ld SOURCE=DIRSERV:%s:%d",
- delta, conn->_base.address, conn->_base.port);
+ delta, conn->base_.address, conn->base_.port);
} else {
log_debug(LD_HTTP, "Time on received directory is within tolerance; "
"we are %ld seconds skewed. (That's okay.)", delta);
@@ -1666,22 +1659,22 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (status_code == 503) {
routerstatus_t *rs;
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
const char *id_digest = conn->identity_digest;
log_info(LD_DIR,"Received http status code %d (%s) from server "
"'%s:%d'. I'll try again soon.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
if ((rs = router_get_mutable_consensus_status_by_id(id_digest)))
rs->last_dir_503_at = now;
- if ((ds = router_get_trusteddirserver_by_digest(id_digest)))
+ if ((ds = router_get_fallback_dirserver_by_digest(id_digest)))
ds->fake_status.last_dir_503_at = now;
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
- plausible = body_is_plausible(body, body_len, conn->_base.purpose);
+ plausible = body_is_plausible(body, body_len, conn->base_.purpose);
if (compression != NO_METHOD || !plausible) {
char *new_body = NULL;
size_t new_len = 0;
@@ -1708,7 +1701,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_HTTP, "HTTP body from server '%s:%d' was labeled %s, "
"but it seems to be %s.%s",
- conn->_base.address, conn->_base.port, description1,
+ conn->base_.address, conn->base_.port, description1,
description2,
(compression>0 && guessed>0)?" Trying both.":"");
}
@@ -1728,7 +1721,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (!plausible && !new_body) {
log_fn(LOG_PROTOCOL_WARN, LD_HTTP,
"Unable to decompress HTTP body (server '%s:%d').",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
@@ -1740,98 +1733,27 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_V2_NETWORKSTATUS) {
- smartlist_t *which = NULL;
- v2_networkstatus_source_t source;
- char *cp;
- log_info(LD_DIR,"Received networkstatus objects (size %d) from server "
- "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port);
- if (status_code != 200) {
- static ratelim_t warning_limit = RATELIM_INIT(3600);
- char *m;
- if ((m = rate_limit_log(&warning_limit, now))) {
- log_warn(LD_DIR,
- "Received http status code %d (%s) from server "
- "'%s:%d' while fetching \"/tor/status/%s\". "
- "I'll try again soon.%s",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource, m);
- tor_free(m);
- }
- tor_free(body); tor_free(headers); tor_free(reason);
- connection_dir_download_v2_networkstatus_failed(conn, status_code);
- return -1;
- }
- if (conn->requested_resource &&
- !strcmpstart(conn->requested_resource,"fp/")) {
- source = NS_FROM_DIR_BY_FP;
- which = smartlist_new();
- dir_split_resource_into_fingerprints(conn->requested_resource+3,
- which, NULL, 0);
- } else if (conn->requested_resource &&
- !strcmpstart(conn->requested_resource, "all")) {
- source = NS_FROM_DIR_ALL;
- which = smartlist_new();
- SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
- {
- char *hex = tor_malloc(HEX_DIGEST_LEN+1);
- base16_encode(hex, HEX_DIGEST_LEN+1, ds->digest, DIGEST_LEN);
- smartlist_add(which, hex);
- });
- } else {
- /* XXXX Can we even end up here? -- weasel*/
- source = NS_FROM_DIR_BY_FP;
- log_warn(LD_BUG, "We received a networkstatus but we didn't ask "
- "for it by fp, nor did we ask for all.");
- }
- cp = body;
- while (*cp) {
- char *next = strstr(cp, "\nnetwork-status-version");
- if (next)
- next[1] = '\0';
- /* learn from it, and then remove it from 'which' */
- if (router_set_networkstatus_v2(cp, now, source, which)<0)
- break;
- if (next) {
- next[1] = 'n';
- cp = next+1;
- } else
- break;
- }
- /* launches router downloads as needed */
- routers_update_all_from_networkstatus(now, 2);
- directory_info_has_arrived(now, 0);
- if (which) {
- if (smartlist_len(which)) {
- dir_networkstatus_download_failed(which, status_code);
- }
- SMARTLIST_FOREACH(which, char *, s, tor_free(s));
- smartlist_free(which);
- }
- }
-
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_CONSENSUS) {
int r;
const char *flavname = conn->requested_resource;
if (status_code != 200) {
int severity = (status_code == 304) ? LOG_INFO : LOG_WARN;
- log(severity, LD_DIR,
+ tor_log(severity, LD_DIR,
"Received http status code %d (%s) from server "
"'%s:%d' while fetching consensus directory.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
networkstatus_consensus_download_failed(status_code, flavname);
return -1;
}
log_info(LD_DIR,"Received consensus directory (size %d) from server "
- "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port);
+ "'%s:%d'", (int)body_len, conn->base_.address, conn->base_.port);
if ((r=networkstatus_set_current_consensus(body, flavname, 0))<0) {
log_fn(r<-1?LOG_WARN:LOG_INFO, LD_DIR,
"Unable to load %s consensus directory downloaded from "
"server '%s:%d'. I'll try again soon.",
- flavname, conn->_base.address, conn->_base.port);
+ flavname, conn->base_.address, conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
networkstatus_consensus_download_failed(0, flavname);
return -1;
@@ -1844,40 +1766,60 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Successfully loaded consensus.");
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_CERTIFICATE) {
if (status_code != 200) {
log_warn(LD_DIR,
"Received http status code %d (%s) from server "
"'%s:%d' while fetching \"/tor/keys/%s\".",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port, conn->requested_resource);
connection_dir_download_cert_failed(conn, status_code);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
log_info(LD_DIR,"Received authority certificates (size %d) from server "
- "'%s:%d'", (int)body_len, conn->_base.address, conn->_base.port);
- if (trusted_dirs_load_certs_from_string(body, 0, 1)<0) {
- log_warn(LD_DIR, "Unable to parse fetched certificates");
- /* if we fetched more than one and only some failed, the successful
- * ones got flushed to disk so it's safe to call this on them */
- connection_dir_download_cert_failed(conn, status_code);
+ "'%s:%d'", (int)body_len, conn->base_.address, conn->base_.port);
+
+ /*
+ * Tell trusted_dirs_load_certs_from_string() whether it was by fp
+ * or fp-sk pair.
+ */
+ src_code = -1;
+ if (!strcmpstart(conn->requested_resource, "fp/")) {
+ src_code = TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST;
+ } else if (!strcmpstart(conn->requested_resource, "fp-sk/")) {
+ src_code = TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST;
+ }
+
+ if (src_code != -1) {
+ if (trusted_dirs_load_certs_from_string(body, src_code, 1)<0) {
+ log_warn(LD_DIR, "Unable to parse fetched certificates");
+ /* if we fetched more than one and only some failed, the successful
+ * ones got flushed to disk so it's safe to call this on them */
+ connection_dir_download_cert_failed(conn, status_code);
+ } else {
+ directory_info_has_arrived(now, 0);
+ log_info(LD_DIR, "Successfully loaded certificates from fetch.");
+ }
} else {
- directory_info_has_arrived(now, 0);
- log_info(LD_DIR, "Successfully loaded certificates from fetch.");
+ log_warn(LD_DIR,
+ "Couldn't figure out what to do with fetched certificates for "
+ "unknown resource %s",
+ conn->requested_resource);
+ connection_dir_download_cert_failed(conn, status_code);
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_STATUS_VOTE) {
const char *msg;
int st;
log_info(LD_DIR,"Got votes (size %d) from server %s:%d",
- (int)body_len, conn->_base.address, conn->_base.port);
+ (int)body_len, conn->base_.address, conn->base_.port);
if (status_code != 200) {
log_warn(LD_DIR,
"Received http status code %d (%s) from server "
"'%s:%d' while fetching \"/tor/status-vote/next/%s.z\".",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port, conn->requested_resource);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
@@ -1888,35 +1830,35 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Added vote(s) successfully [msg: %s]", msg);
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_DETACHED_SIGNATURES) {
const char *msg = NULL;
log_info(LD_DIR,"Got detached signatures (size %d) from server %s:%d",
- (int)body_len, conn->_base.address, conn->_base.port);
+ (int)body_len, conn->base_.address, conn->base_.port);
if (status_code != 200) {
log_warn(LD_DIR,
"Received http status code %d (%s) from server '%s:%d' while fetching "
"\"/tor/status-vote/next/consensus-signatures.z\".",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
tor_free(body); tor_free(headers); tor_free(reason);
return -1;
}
- if (dirvote_add_signatures(body, conn->_base.address, &msg)<0) {
+ if (dirvote_add_signatures(body, conn->base_.address, &msg)<0) {
log_warn(LD_DIR, "Problem adding detached signatures from %s:%d: %s",
- conn->_base.address, conn->_base.port, msg?msg:"???");
+ conn->base_.address, conn->base_.port, msg?msg:"???");
}
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
- conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
- int was_ei = conn->_base.purpose == DIR_PURPOSE_FETCH_EXTRAINFO;
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_SERVERDESC ||
+ conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO) {
+ int was_ei = conn->base_.purpose == DIR_PURPOSE_FETCH_EXTRAINFO;
smartlist_t *which = NULL;
int n_asked_for = 0;
int descriptor_digests = conn->requested_resource &&
!strcmpstart(conn->requested_resource,"d/");
log_info(LD_DIR,"Received %s (size %d) from server '%s:%d'",
was_ei ? "extra server info" : "server info",
- (int)body_len, conn->_base.address, conn->_base.port);
+ (int)body_len, conn->base_.address, conn->base_.port);
if (conn->requested_resource &&
(!strcmpstart(conn->requested_resource,"d/") ||
!strcmpstart(conn->requested_resource,"fp/"))) {
@@ -1934,8 +1876,8 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_fn(dir_okay ? LOG_INFO : LOG_WARN, LD_DIR,
"Received http status code %d (%s) from server '%s:%d' "
"while fetching \"/tor/server/%s\". I'll try again soon.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port, conn->requested_resource);
if (!which) {
connection_dir_download_routerdesc_failed(conn);
} else {
@@ -1969,7 +1911,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
// descriptor_digests, conn->router_purpose);
if (load_downloaded_routers(body, which, descriptor_digests,
conn->router_purpose,
- conn->_base.address))
+ conn->base_.address))
directory_info_has_arrived(now, 0);
}
}
@@ -1977,7 +1919,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Received %d/%d %s requested from %s:%d",
n_asked_for-smartlist_len(which), n_asked_for,
was_ei ? "extra-info documents" : "router descriptors",
- conn->_base.address, (int)conn->_base.port);
+ conn->base_.address, (int)conn->base_.port);
if (smartlist_len(which)) {
dir_routerdesc_download_failed(which, status_code,
conn->router_purpose,
@@ -1989,12 +1931,12 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
if (directory_conn_is_self_reachability_test(conn))
router_dirport_found_reachable();
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_MICRODESC) {
smartlist_t *which = NULL;
log_info(LD_DIR,"Received answer to microdescriptor request (status %d, "
"size %d) from server '%s:%d'",
- status_code, (int)body_len, conn->_base.address,
- conn->_base.port);
+ status_code, (int)body_len, conn->base_.address,
+ conn->base_.port);
tor_assert(conn->requested_resource &&
!strcmpstart(conn->requested_resource, "d/"));
which = smartlist_new();
@@ -2005,8 +1947,8 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
log_info(LD_DIR, "Received status code %d (%s) from server "
"'%s:%d' while fetching \"/tor/micro/%s\". I'll try again "
"soon.",
- status_code, escaped(reason), conn->_base.address,
- (int)conn->_base.port, conn->requested_resource);
+ status_code, escaped(reason), conn->base_.address,
+ (int)conn->base_.port, conn->requested_resource);
dir_microdesc_download_failed(which, status_code);
SMARTLIST_FOREACH(which, char *, cp, tor_free(cp));
smartlist_free(which);
@@ -2021,16 +1963,18 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
/* Mark remaining ones as failed. */
dir_microdesc_download_failed(which, status_code);
}
+ control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
+ count_loading_descriptors_progress());
SMARTLIST_FOREACH(which, char *, cp, tor_free(cp));
smartlist_free(which);
smartlist_free(mds);
}
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_DIR) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_DIR) {
switch (status_code) {
case 200: {
- trusted_dir_server_t *ds =
+ dir_server_t *ds =
router_get_trusteddirserver_by_digest(conn->identity_digest);
char *rejected_hdr = http_get_header(headers,
"X-Descriptor-Not-New: ");
@@ -2053,7 +1997,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
"descriptor: finished.");
control_event_server_status(
LOG_NOTICE, "ACCEPTED_SERVER_DESCRIPTOR DIRAUTH=%s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
ds->has_accepted_serverdesc = 1;
if (directories_have_accepted_server_descriptor())
@@ -2063,112 +2007,75 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
case 400:
log_warn(LD_GENERAL,"http status 400 (%s) response from "
"dirserver '%s:%d'. Please correct.",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
control_event_server_status(LOG_WARN,
"BAD_SERVER_DESCRIPTOR DIRAUTH=%s:%d REASON=\"%s\"",
- conn->_base.address, conn->_base.port, escaped(reason));
+ conn->base_.address, conn->base_.port, escaped(reason));
break;
default:
log_warn(LD_GENERAL,
"http status %d (%s) reason unexpected while uploading "
"descriptor to server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
/* return 0 in all cases, since we don't want to mark any
* dirservers down just because they don't like us. */
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_VOTE) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_VOTE) {
switch (status_code) {
case 200: {
log_notice(LD_DIR,"Uploaded a vote to dirserver %s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
break;
case 400:
log_warn(LD_DIR,"http status 400 (%s) response after uploading "
"vote to dirserver '%s:%d'. Please correct.",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
break;
default:
log_warn(LD_GENERAL,
"http status %d (%s) reason unexpected while uploading "
"vote to server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
/* return 0 in all cases, since we don't want to mark any
* dirservers down just because they don't like us. */
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_SIGNATURES) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_SIGNATURES) {
switch (status_code) {
case 200: {
log_notice(LD_DIR,"Uploaded signature(s) to dirserver %s:%d",
- conn->_base.address, conn->_base.port);
+ conn->base_.address, conn->base_.port);
}
break;
case 400:
log_warn(LD_DIR,"http status 400 (%s) response after uploading "
"signatures to dirserver '%s:%d'. Please correct.",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
break;
default:
log_warn(LD_GENERAL,
"http status %d (%s) reason unexpected while uploading "
"signatures to server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
/* return 0 in all cases, since we don't want to mark any
* dirservers down just because they don't like us. */
}
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_RENDDESC) {
- tor_assert(conn->rend_data);
- log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d "
- "(%s))",
- (int)body_len, status_code, escaped(reason));
- switch (status_code) {
- case 200:
- if (rend_cache_store(body, body_len, 0,
- conn->rend_data->onion_address) < -1) {
- log_warn(LD_REND,"Failed to parse rendezvous descriptor.");
- /* Any pending rendezvous attempts will notice when
- * connection_about_to_close_connection()
- * cleans this dir conn up. */
- /* We could retry. But since v0 descriptors are going out of
- * style, it isn't worth the hassle. We'll do better in v2. */
- } else {
- /* Success, or at least there's a v2 descriptor already
- * present. Notify pending connections about this. */
- conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
- rend_client_desc_trynow(conn->rend_data->onion_address);
- }
- break;
- case 404:
- /* Not there. Pending connections will be notified when
- * connection_about_to_close_connection() cleans this conn up. */
- break;
- case 400:
- log_warn(LD_REND,
- "http status 400 (%s). Dirserver didn't like our "
- "rendezvous query?", escaped(reason));
- break;
- default:
- log_warn(LD_REND,"http status %d (%s) response unexpected while "
- "fetching hidden service descriptor (server '%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
- break;
- }
- }
-
- if (conn->_base.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
+ if (conn->base_.purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
+ #define SEND_HS_DESC_FAILED_EVENT() ( \
+ control_event_hs_descriptor_failed(conn->rend_data, \
+ conn->identity_digest) )
tor_assert(conn->rend_data);
log_info(LD_REND,"Received rendezvous descriptor (size %d, status %d "
"(%s))",
@@ -2176,24 +2083,22 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
switch (status_code) {
case 200:
switch (rend_cache_store_v2_desc_as_client(body, conn->rend_data)) {
- case -2:
+ case RCS_BADDESC:
+ case RCS_NOTDIR: /* Impossible */
log_warn(LD_REND,"Fetching v2 rendezvous descriptor failed. "
"Retrying at another directory.");
/* We'll retry when connection_about_to_close_connection()
* cleans this dir conn up. */
+ SEND_HS_DESC_FAILED_EVENT();
break;
- case -1:
- /* We already have a v0 descriptor here. Ignoring this one
- * and _not_ performing another request. */
- log_info(LD_REND, "Successfully fetched v2 rendezvous "
- "descriptor, but we already have a v0 descriptor.");
- conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
- break;
+ case RCS_OKAY:
default:
/* success. notify pending connections about this. */
log_info(LD_REND, "Successfully fetched v2 rendezvous "
"descriptor.");
- conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
+ control_event_hs_descriptor_received(conn->rend_data,
+ conn->identity_digest);
+ conn->base_.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2;
rend_client_desc_trynow(conn->rend_data->onion_address);
break;
}
@@ -2203,26 +2108,28 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
* connection_about_to_close_connection() cleans this conn up. */
log_info(LD_REND,"Fetching v2 rendezvous descriptor failed: "
"Retrying at another directory.");
+ SEND_HS_DESC_FAILED_EVENT();
break;
case 400:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
"http status 400 (%s). Dirserver didn't like our "
"v2 rendezvous query? Retrying at another directory.",
escaped(reason));
+ SEND_HS_DESC_FAILED_EVENT();
break;
default:
log_warn(LD_REND, "Fetching v2 rendezvous descriptor failed: "
"http status %d (%s) response unexpected while "
"fetching v2 hidden service descriptor (server '%s:%d'). "
"Retrying at another directory.",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
+ SEND_HS_DESC_FAILED_EVENT();
break;
}
}
- if (conn->_base.purpose == DIR_PURPOSE_UPLOAD_RENDDESC ||
- conn->_base.purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) {
+ if (conn->base_.purpose == DIR_PURPOSE_UPLOAD_RENDDESC_V2) {
log_info(LD_REND,"Uploaded rendezvous descriptor (status %d "
"(%s))",
status_code, escaped(reason));
@@ -2235,17 +2142,17 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
case 400:
log_warn(LD_REND,"http status 400 (%s) response from dirserver "
"'%s:%d'. Malformed rendezvous descriptor?",
- escaped(reason), conn->_base.address, conn->_base.port);
+ escaped(reason), conn->base_.address, conn->base_.port);
break;
default:
log_warn(LD_REND,"http status %d (%s) response unexpected (server "
"'%s:%d').",
- status_code, escaped(reason), conn->_base.address,
- conn->_base.port);
+ status_code, escaped(reason), conn->base_.address,
+ conn->base_.port);
break;
}
}
- note_client_request(conn->_base.purpose, was_compressed, orig_len);
+ note_client_request(conn->base_.purpose, was_compressed, orig_len);
tor_free(body); tor_free(headers); tor_free(reason);
return 0;
}
@@ -2255,9 +2162,9 @@ int
connection_dir_reached_eof(dir_connection_t *conn)
{
int retval;
- if (conn->_base.state != DIR_CONN_STATE_CLIENT_READING) {
+ if (conn->base_.state != DIR_CONN_STATE_CLIENT_READING) {
log_info(LD_HTTP,"conn reached eof, not reading. [state=%d] Closing.",
- conn->_base.state);
+ conn->base_.state);
connection_close_immediate(TO_CONN(conn)); /* error: give up on flushing */
connection_mark_for_close(TO_CONN(conn));
return -1;
@@ -2265,7 +2172,7 @@ connection_dir_reached_eof(dir_connection_t *conn)
retval = connection_dir_client_reached_eof(conn);
if (retval == 0) /* success */
- conn->_base.state = DIR_CONN_STATE_CLIENT_FINISHED;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_FINISHED;
connection_mark_for_close(TO_CONN(conn));
return retval;
}
@@ -2283,7 +2190,7 @@ int
connection_dir_process_inbuf(dir_connection_t *conn)
{
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
/* Directory clients write, then read data until they receive EOF;
* directory servers read data until they get an HTTP command, then
@@ -2292,7 +2199,7 @@ connection_dir_process_inbuf(dir_connection_t *conn)
*/
/* If we're on the dirserver side, look for a command. */
- if (conn->_base.state == DIR_CONN_STATE_SERVER_COMMAND_WAIT) {
+ if (conn->base_.state == DIR_CONN_STATE_SERVER_COMMAND_WAIT) {
if (directory_handle_command(conn) < 0) {
connection_mark_for_close(TO_CONN(conn));
return -1;
@@ -2307,7 +2214,7 @@ connection_dir_process_inbuf(dir_connection_t *conn)
return -1;
}
- if (!conn->_base.inbuf_reached_eof)
+ if (!conn->base_.inbuf_reached_eof)
log_debug(LD_HTTP,"Got data, not eof. Leaving on inbuf.");
return 0;
}
@@ -2326,7 +2233,7 @@ connection_dir_about_to_close(dir_connection_t *dir_conn)
}
/* If we were trying to fetch a v2 rend desc and did not succeed,
* retry as needed. (If a fetch is successful, the connection state
- * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
+ * is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 to mark that
* refetching is unnecessary.) */
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 &&
dir_conn->rend_data &&
@@ -2380,12 +2287,12 @@ write_http_response_header_impl(dir_connection_t *conn, ssize_t length,
tor_snprintf(cp, sizeof(tmp)-(cp-tmp), "Content-Type: %s\r\n", type);
cp += strlen(cp);
}
- if (!is_local_addr(&conn->_base.addr)) {
+ if (!is_local_addr(&conn->base_.addr)) {
/* Don't report the source address for a nearby/private connection.
* Otherwise we tend to mis-report in cases where incoming ports are
* being forwarded to a Tor server running behind the firewall. */
tor_snprintf(cp, sizeof(tmp)-(cp-tmp),
- X_ADDRESS_HEADER "%s\r\n", conn->_base.address);
+ X_ADDRESS_HEADER "%s\r\n", conn->base_.address);
cp += strlen(cp);
}
if (encoding) {
@@ -2400,7 +2307,7 @@ write_http_response_header_impl(dir_connection_t *conn, ssize_t length,
}
if (cache_lifetime > 0) {
char expbuf[RFC1123_TIME_LEN+1];
- format_rfc1123_time(expbuf, now + cache_lifetime);
+ format_rfc1123_time(expbuf, (time_t)(now + cache_lifetime));
/* We could say 'Cache-control: max-age=%d' here if we start doing
* http/1.1 */
tor_snprintf(cp, sizeof(tmp)-(cp-tmp),
@@ -2457,7 +2364,6 @@ note_client_request(int purpose, int compressed, size_t bytes)
char *key;
const char *kind = NULL;
switch (purpose) {
- case DIR_PURPOSE_FETCH_V2_NETWORKSTATUS: kind = "dl/status"; break;
case DIR_PURPOSE_FETCH_CONSENSUS: kind = "dl/consensus"; break;
case DIR_PURPOSE_FETCH_CERTIFICATE: kind = "dl/cert"; break;
case DIR_PURPOSE_FETCH_STATUS_VOTE: kind = "dl/vote"; break;
@@ -2468,9 +2374,7 @@ note_client_request(int purpose, int compressed, size_t bytes)
case DIR_PURPOSE_UPLOAD_DIR: kind = "dl/ul-dir"; break;
case DIR_PURPOSE_UPLOAD_VOTE: kind = "dl/ul-vote"; break;
case DIR_PURPOSE_UPLOAD_SIGNATURES: kind = "dl/ul-sig"; break;
- case DIR_PURPOSE_FETCH_RENDDESC: kind = "dl/rend"; break;
case DIR_PURPOSE_FETCH_RENDDESC_V2: kind = "dl/rend2"; break;
- case DIR_PURPOSE_UPLOAD_RENDDESC: kind = "dl/ul-rend"; break;
case DIR_PURPOSE_UPLOAD_RENDDESC_V2: kind = "dl/ul-rend2"; break;
}
if (kind) {
@@ -2637,7 +2541,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
log_debug(LD_DIRSERV,"Received GET command.");
- conn->_base.state = DIR_CONN_STATE_SERVER_WRITING;
+ conn->base_.state = DIR_CONN_STATE_SERVER_WRITING;
if (parse_http_url(headers, &url) < 0) {
write_http_status_line(conn, 400, "Bad request");
@@ -2682,98 +2586,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
/* if no disclaimer file, fall through and continue */
}
- if (!strcmp(url,"/tor/") || !strcmp(url,"/tor/dir")) { /* v1 dir fetch */
- cached_dir_t *d = dirserv_get_directory();
-
- if (!d) {
- log_info(LD_DIRSERV,"Client asked for the mirrored directory, but we "
- "don't have a good one yet. Sending 503 Dir not available.");
- write_http_status_line(conn, 503, "Directory unavailable");
- goto done;
- }
- if (d->published < if_modified_since) {
- write_http_status_line(conn, 304, "Not modified");
- goto done;
- }
-
- dlen = compressed ? d->dir_z_len : d->dir_len;
-
- if (global_write_bucket_low(TO_CONN(conn), dlen, 1)) {
- log_debug(LD_DIRSERV,
- "Client asked for the mirrored directory, but we've been "
- "writing too many bytes lately. Sending 503 Dir busy.");
- write_http_status_line(conn, 503, "Directory busy, try again later");
- goto done;
- }
-
- note_request(url, dlen);
-
- log_debug(LD_DIRSERV,"Dumping %sdirectory to client.",
- compressed?"compressed ":"");
- write_http_response_header(conn, dlen, compressed,
- FULL_DIR_CACHE_LIFETIME);
- conn->cached_dir = d;
- conn->cached_dir_offset = 0;
- if (!compressed)
- conn->zlib_state = tor_zlib_new(0, ZLIB_METHOD);
- ++d->refcnt;
-
- /* Prime the connection with some data. */
- conn->dir_spool_src = DIR_SPOOL_CACHED_DIR;
- connection_dirserv_flushed_some(conn);
- goto done;
- }
-
- if (!strcmp(url,"/tor/running-routers")) { /* running-routers fetch */
- cached_dir_t *d = dirserv_get_runningrouters();
- if (!d) {
- write_http_status_line(conn, 503, "Directory unavailable");
- goto done;
- }
- if (d->published < if_modified_since) {
- write_http_status_line(conn, 304, "Not modified");
- goto done;
- }
- dlen = compressed ? d->dir_z_len : d->dir_len;
-
- if (global_write_bucket_low(TO_CONN(conn), dlen, 1)) {
- log_info(LD_DIRSERV,
- "Client asked for running-routers, but we've been "
- "writing too many bytes lately. Sending 503 Dir busy.");
- write_http_status_line(conn, 503, "Directory busy, try again later");
- goto done;
- }
- note_request(url, dlen);
- write_http_response_header(conn, dlen, compressed,
- RUNNINGROUTERS_CACHE_LIFETIME);
- connection_write_to_buf(compressed ? d->dir_z : d->dir, dlen,
- TO_CONN(conn));
- goto done;
- }
-
- if (!strcmpstart(url,"/tor/status/")
- || !strcmpstart(url, "/tor/status-vote/current/consensus")) {
- /* v2 or v3 network status fetch. */
+ if (!strcmpstart(url, "/tor/status-vote/current/consensus")) {
+ /* v3 network status fetch. */
smartlist_t *dir_fps = smartlist_new();
- int is_v3 = !strcmpstart(url, "/tor/status-vote");
- geoip_client_action_t act =
- is_v3 ? GEOIP_CLIENT_NETWORKSTATUS : GEOIP_CLIENT_NETWORKSTATUS_V2;
const char *request_type = NULL;
- const char *key = url + strlen("/tor/status/");
long lifetime = NETWORKSTATUS_CACHE_LIFETIME;
- if (!is_v3) {
- dirserv_get_networkstatus_v2_fingerprints(dir_fps, key);
- if (!strcmpstart(key, "fp/"))
- request_type = compressed?"/tor/status/fp.z":"/tor/status/fp";
- else if (!strcmpstart(key, "authority"))
- request_type = compressed?"/tor/status/authority.z":
- "/tor/status/authority";
- else if (!strcmpstart(key, "all"))
- request_type = compressed?"/tor/status/all.z":"/tor/status/all";
- else
- request_type = "/tor/status/?";
- } else {
+ if (1) {
networkstatus_t *v;
time_t now = time(NULL);
const char *want_fps = NULL;
@@ -2807,7 +2626,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
write_http_status_line(conn, 404, "Consensus not signed by sufficient "
"number of requested authorities");
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_NOT_ENOUGH_SIGS);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_ENOUGH_SIGS);
tor_free(flavor);
goto done;
}
@@ -2826,7 +2645,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
if (!smartlist_len(dir_fps)) { /* we failed to create/cache cp */
write_http_status_line(conn, 503, "Network status object unavailable");
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_UNAVAILABLE);
+ geoip_note_ns_response(GEOIP_REJECT_UNAVAILABLE);
goto done;
}
@@ -2834,13 +2653,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
write_http_status_line(conn, 404, "Not found");
SMARTLIST_FOREACH(dir_fps, char *, cp, tor_free(cp));
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_NOT_FOUND);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_FOUND);
goto done;
} else if (!smartlist_len(dir_fps)) {
write_http_status_line(conn, 304, "Not modified");
SMARTLIST_FOREACH(dir_fps, char *, cp, tor_free(cp));
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_NOT_MODIFIED);
+ geoip_note_ns_response(GEOIP_REJECT_NOT_MODIFIED);
goto done;
}
@@ -2852,24 +2671,26 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
write_http_status_line(conn, 503, "Directory busy, try again later");
SMARTLIST_FOREACH(dir_fps, char *, fp, tor_free(fp));
smartlist_free(dir_fps);
- geoip_note_ns_response(act, GEOIP_REJECT_BUSY);
+
+ geoip_note_ns_response(GEOIP_REJECT_BUSY);
goto done;
}
- {
+ if (1) {
struct in_addr in;
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(act, &addr, time(NULL));
- geoip_note_ns_response(act, GEOIP_SUCCESS);
+ 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. */
- if (TO_CONN(conn)->dirreq_id)
- geoip_start_dirreq(TO_CONN(conn)->dirreq_id, dlen, act,
- DIRREQ_TUNNELED);
+ if (conn->dirreq_id)
+ geoip_start_dirreq(conn->dirreq_id, dlen, DIRREQ_TUNNELED);
else
- geoip_start_dirreq(TO_CONN(conn)->global_identifier, dlen, act,
+ geoip_start_dirreq(TO_CONN(conn)->global_identifier, dlen,
DIRREQ_DIRECT);
}
}
@@ -3204,34 +3025,8 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
goto done;
}
- if (options->HSAuthoritativeDir && !strcmpstart(url,"/tor/rendezvous/")) {
- /* rendezvous descriptor fetch */
- const char *descp;
- size_t desc_len;
- const char *query = url+strlen("/tor/rendezvous/");
-
- log_info(LD_REND, "Handling rendezvous descriptor get");
- switch (rend_cache_lookup_desc(query, 0, &descp, &desc_len)) {
- case 1: /* valid */
- write_http_response_header_impl(conn, desc_len,
- "application/octet-stream",
- NULL, NULL, 0);
- note_request("/tor/rendezvous?/", desc_len);
- /* need to send descp separately, because it may include NULs */
- connection_write_to_buf(descp, desc_len, TO_CONN(conn));
- break;
- case 0: /* well-formed but not present */
- write_http_status_line(conn, 404, "Not found");
- break;
- case -1: /* not well-formed */
- write_http_status_line(conn, 400, "Bad request");
- break;
- }
- goto done;
- }
-
if (options->BridgeAuthoritativeDir &&
- options->_BridgePassword_AuthDigest &&
+ options->BridgePassword_AuthDigest_ &&
connection_dir_is_encrypted(conn) &&
!strcmp(url,"/tor/networkstatus-bridges")) {
char *status;
@@ -3244,7 +3039,7 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
/* now make sure the password is there and right */
if (!header ||
tor_memneq(digest,
- options->_BridgePassword_AuthDigest, DIGEST256_LEN)) {
+ options->BridgePassword_AuthDigest_, DIGEST256_LEN)) {
write_http_status_line(conn, 404, "Not found");
tor_free(header);
goto done;
@@ -3278,29 +3073,13 @@ directory_handle_command_get(dir_connection_t *conn, const char *headers,
goto done;
}
- if (!strcmp(url,"/tor/dbg-stability.txt")) {
- const char *stability;
- size_t len;
- if (options->BridgeAuthoritativeDir ||
- ! authdir_mode_tests_reachability(options) ||
- ! (stability = rep_hist_get_router_stability_doc(time(NULL)))) {
- write_http_status_line(conn, 404, "Not found.");
- goto done;
- }
-
- len = strlen(stability);
- write_http_response_header(conn, len, 0, 0);
- connection_write_to_buf(stability, len, TO_CONN(conn));
- goto done;
- }
-
#if defined(EXPORTMALLINFO) && defined(HAVE_MALLOC_H) && defined(HAVE_MALLINFO)
#define ADD_MALLINFO_LINE(x) do { \
smartlist_add_asprintf(lines, "%s %d\n", #x, mi.x); \
}while(0);
if (!strcmp(url,"/tor/mallinfo.txt") &&
- (tor_addr_eq_ipv4h(&conn->_base.addr, 0x7f000001ul))) {
+ (tor_addr_eq_ipv4h(&conn->base_.addr, 0x7f000001ul))) {
char *result;
size_t len;
struct mallinfo mi;
@@ -3355,7 +3134,7 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
log_debug(LD_DIRSERV,"Received POST command.");
- conn->_base.state = DIR_CONN_STATE_SERVER_WRITING;
+ conn->base_.state = DIR_CONN_STATE_SERVER_WRITING;
if (parse_http_url(headers, &url) < 0) {
write_http_status_line(conn, 400, "Bad request");
@@ -3368,19 +3147,20 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
connection_dir_is_encrypted(conn) &&
!strcmpstart(url,"/tor/rendezvous2/publish")) {
switch (rend_cache_store_v2_desc_as_dir(body)) {
- case -2:
+ case RCS_NOTDIR:
log_info(LD_REND, "Rejected v2 rend descriptor (length %d) from %s "
"since we're not currently a hidden service directory.",
- (int)body_len, conn->_base.address);
+ (int)body_len, conn->base_.address);
write_http_status_line(conn, 503, "Currently not acting as v2 "
"hidden service directory");
break;
- case -1:
+ case RCS_BADDESC:
log_warn(LD_REND, "Rejected v2 rend descriptor (length %d) from %s.",
- (int)body_len, conn->_base.address);
+ (int)body_len, conn->base_.address);
write_http_status_line(conn, 400,
"Invalid v2 service descriptor rejected");
break;
+ case RCS_OKAY:
default:
write_http_status_line(conn, 200, "Service descriptor (v2) stored");
log_info(LD_REND, "Handled v2 rendezvous descriptor post: accepted");
@@ -3402,17 +3182,15 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
uint8_t purpose = authdir_mode_bridge(options) ?
ROUTER_PURPOSE_BRIDGE : ROUTER_PURPOSE_GENERAL;
was_router_added_t r = dirserv_add_multiple_descriptors(body, purpose,
- conn->_base.address, &msg);
+ conn->base_.address, &msg);
tor_assert(msg);
- if (WRA_WAS_ADDED(r))
- dirserv_get_directory(); /* rebuild and write to disk */
if (r == ROUTER_ADDED_NOTIFY_GENERATOR) {
/* Accepted with a message. */
log_info(LD_DIRSERV,
"Problematic router descriptor or extra-info from %s "
"(\"%s\").",
- conn->_base.address, msg);
+ conn->base_.address, msg);
write_http_status_line(conn, 400, msg);
} else if (r == ROUTER_ADDED_SUCCESSFULLY) {
write_http_status_line(conn, 200, msg);
@@ -3423,28 +3201,12 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
log_info(LD_DIRSERV,
"Rejected router descriptor or extra-info from %s "
"(\"%s\").",
- conn->_base.address, msg);
+ conn->base_.address, msg);
write_http_status_line(conn, 400, msg);
}
goto done;
}
- if (options->HSAuthoritativeDir &&
- !strcmpstart(url,"/tor/rendezvous/publish")) {
- /* rendezvous descriptor post */
- log_info(LD_REND, "Handling rendezvous descriptor post.");
- if (rend_cache_store(body, body_len, 1, NULL) < 0) {
- log_fn(LOG_PROTOCOL_WARN, LD_DIRSERV,
- "Rejected rend descriptor (length %d) from %s.",
- (int)body_len, conn->_base.address);
- write_http_status_line(conn, 400,
- "Invalid v0 service descriptor rejected");
- } else {
- write_http_status_line(conn, 200, "Service descriptor (v0) stored");
- }
- goto done;
- }
-
if (authdir_mode_v3(options) &&
!strcmp(url,"/tor/post/vote")) { /* v3 networkstatus vote */
const char *msg = "OK";
@@ -3454,7 +3216,7 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
} else {
tor_assert(msg);
log_warn(LD_DIRSERV, "Rejected vote from %s (\"%s\").",
- conn->_base.address, msg);
+ conn->base_.address, msg);
write_http_status_line(conn, status, msg);
}
goto done;
@@ -3463,11 +3225,11 @@ directory_handle_command_post(dir_connection_t *conn, const char *headers,
if (authdir_mode_v3(options) &&
!strcmp(url,"/tor/post/consensus-signature")) { /* sigs on consensus. */
const char *msg = NULL;
- if (dirvote_add_signatures(body, conn->_base.address, &msg)>=0) {
+ if (dirvote_add_signatures(body, conn->base_.address, &msg)>=0) {
write_http_status_line(conn, 200, msg?msg:"Signatures stored");
} else {
log_warn(LD_DIR, "Unable to store signatures posted by %s: %s",
- conn->_base.address, msg?msg:"???");
+ conn->base_.address, msg?msg:"???");
write_http_status_line(conn, 400, msg?msg:"Unable to store signatures");
}
goto done;
@@ -3494,7 +3256,7 @@ directory_handle_command(dir_connection_t *conn)
int r;
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
switch (connection_fetch_from_buf_http(TO_CONN(conn),
&headers, MAX_HEADERS_SIZE,
@@ -3502,7 +3264,7 @@ directory_handle_command(dir_connection_t *conn)
case -1: /* overflow */
log_warn(LD_DIRSERV,
"Request too large from address '%s' to DirPort. Closing.",
- safe_str(conn->_base.address));
+ safe_str(conn->base_.address));
return -1;
case 0:
log_debug(LD_DIRSERV,"command not all here yet.");
@@ -3536,23 +3298,23 @@ int
connection_dir_finished_flushing(dir_connection_t *conn)
{
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
/* Note that we have finished writing the directory response. For direct
* connections this means we're done, for tunneled connections its only
* an intermediate step. */
- if (TO_CONN(conn)->dirreq_id)
- geoip_change_dirreq_state(TO_CONN(conn)->dirreq_id, DIRREQ_TUNNELED,
+ if (conn->dirreq_id)
+ geoip_change_dirreq_state(conn->dirreq_id, DIRREQ_TUNNELED,
DIRREQ_FLUSHING_DIR_CONN_FINISHED);
else
geoip_change_dirreq_state(TO_CONN(conn)->global_identifier,
DIRREQ_DIRECT,
DIRREQ_FLUSHING_DIR_CONN_FINISHED);
- switch (conn->_base.state) {
+ switch (conn->base_.state) {
case DIR_CONN_STATE_CONNECTING:
case DIR_CONN_STATE_CLIENT_SENDING:
log_debug(LD_DIR,"client finished sending command.");
- conn->_base.state = DIR_CONN_STATE_CLIENT_READING;
+ conn->base_.state = DIR_CONN_STATE_CLIENT_READING;
return 0;
case DIR_CONN_STATE_SERVER_WRITING:
if (conn->dir_spool_src != DIR_SPOOL_NONE) {
@@ -3573,7 +3335,7 @@ connection_dir_finished_flushing(dir_connection_t *conn)
return 0;
default:
log_warn(LD_BUG,"called in unexpected state %d.",
- conn->_base.state);
+ conn->base_.state);
tor_fragile_assert();
return -1;
}
@@ -3586,90 +3348,37 @@ int
connection_dir_finished_connecting(dir_connection_t *conn)
{
tor_assert(conn);
- tor_assert(conn->_base.type == CONN_TYPE_DIR);
- tor_assert(conn->_base.state == DIR_CONN_STATE_CONNECTING);
+ tor_assert(conn->base_.type == CONN_TYPE_DIR);
+ tor_assert(conn->base_.state == DIR_CONN_STATE_CONNECTING);
log_debug(LD_HTTP,"Dir connection to router %s:%u established.",
- conn->_base.address,conn->_base.port);
+ conn->base_.address,conn->base_.port);
- conn->_base.state = DIR_CONN_STATE_CLIENT_SENDING; /* start flushing conn */
+ conn->base_.state = DIR_CONN_STATE_CLIENT_SENDING; /* start flushing conn */
return 0;
}
-/** Called when one or more networkstatus fetches have failed (with uppercase
- * fingerprints listed in <b>failed</b>). Mark those fingerprints as having
- * failed once, unless they failed with status code 503. */
-static void
-dir_networkstatus_download_failed(smartlist_t *failed, int status_code)
-{
- if (status_code == 503)
- return;
- SMARTLIST_FOREACH_BEGIN(failed, const char *, fp) {
- char digest[DIGEST_LEN];
- trusted_dir_server_t *dir;
- if (base16_decode(digest, DIGEST_LEN, fp, strlen(fp))<0) {
- log_warn(LD_BUG, "Called with bad fingerprint in list: %s",
- escaped(fp));
- continue;
- }
- dir = router_get_trusteddirserver_by_digest(digest);
-
- if (dir)
- download_status_failed(&dir->v2_ns_dl_status, status_code);
- } SMARTLIST_FOREACH_END(fp);
-}
-
-/** Schedule for when servers should download things in general. */
-static const int server_dl_schedule[] = {
- 0, 0, 0, 60, 60, 60*2, 60*5, 60*15, INT_MAX
-};
-/** Schedule for when clients should download things in general. */
-static const int client_dl_schedule[] = {
- 0, 0, 60, 60*5, 60*10, INT_MAX
-};
-/** Schedule for when servers should download consensuses. */
-static const int server_consensus_dl_schedule[] = {
- 0, 0, 60, 60*5, 60*10, 60*30, 60*30, 60*30, 60*30, 60*30, 60*60, 60*60*2
-};
-/** Schedule for when clients should download consensuses. */
-static const int client_consensus_dl_schedule[] = {
- 0, 0, 60, 60*5, 60*10, 60*30, 60*60, 60*60, 60*60, 60*60*3, 60*60*6, 60*60*12
-};
-/** Schedule for when clients should download bridge descriptors. */
-static const int bridge_dl_schedule[] = {
- 60*60, 15*60, 15*60, 60*60
-};
-
-/** Decide which download schedule we want to use, and then return a
- * pointer to it along with a pointer to its length. Helper function for
- * download_status_increment_failure() and download_status_reset(). */
-static void
-find_dl_schedule_and_len(download_status_t *dls, int server,
- const int **schedule, size_t *schedule_len)
+/** Decide which download schedule we want to use based on descriptor type
+ * in <b>dls</b> and whether we are acting as directory <b>server</b>, and
+ * then return a list of int pointers defining download delays in seconds.
+ * Helper function for download_status_increment_failure() and
+ * download_status_reset(). */
+static const smartlist_t *
+find_dl_schedule_and_len(download_status_t *dls, int server)
{
switch (dls->schedule) {
case DL_SCHED_GENERIC:
- if (server) {
- *schedule = server_dl_schedule;
- *schedule_len = sizeof(server_dl_schedule)/sizeof(int);
- } else {
- *schedule = client_dl_schedule;
- *schedule_len = sizeof(client_dl_schedule)/sizeof(int);
- }
- break;
+ if (server)
+ return get_options()->TestingServerDownloadSchedule;
+ else
+ return get_options()->TestingClientDownloadSchedule;
case DL_SCHED_CONSENSUS:
- if (server) {
- *schedule = server_consensus_dl_schedule;
- *schedule_len = sizeof(server_consensus_dl_schedule)/sizeof(int);
- } else {
- *schedule = client_consensus_dl_schedule;
- *schedule_len = sizeof(client_consensus_dl_schedule)/sizeof(int);
- }
- break;
+ if (server)
+ return get_options()->TestingServerConsensusDownloadSchedule;
+ else
+ return get_options()->TestingClientConsensusDownloadSchedule;
case DL_SCHED_BRIDGE:
- *schedule = bridge_dl_schedule;
- *schedule_len = sizeof(bridge_dl_schedule)/sizeof(int);
- break;
+ return get_options()->TestingBridgeDownloadSchedule;
default:
tor_assert(0);
}
@@ -3683,8 +3392,7 @@ time_t
download_status_increment_failure(download_status_t *dls, int status_code,
const char *item, int server, time_t now)
{
- const int *schedule;
- size_t schedule_len;
+ const smartlist_t *schedule;
int increment;
tor_assert(dls);
if (status_code != 503 || server) {
@@ -3692,14 +3400,14 @@ download_status_increment_failure(download_status_t *dls, int status_code,
++dls->n_download_failures;
}
- find_dl_schedule_and_len(dls, server, &schedule, &schedule_len);
+ schedule = find_dl_schedule_and_len(dls, server);
- if (dls->n_download_failures < schedule_len)
- increment = schedule[dls->n_download_failures];
+ if (dls->n_download_failures < smartlist_len(schedule))
+ increment = *(int *)smartlist_get(schedule, dls->n_download_failures);
else if (dls->n_download_failures == IMPOSSIBLE_TO_DOWNLOAD)
increment = INT_MAX;
else
- increment = schedule[schedule_len-1];
+ increment = *(int *)smartlist_get(schedule, smartlist_len(schedule) - 1);
if (increment < INT_MAX)
dls->next_attempt_at = now+increment;
@@ -3732,14 +3440,11 @@ download_status_increment_failure(download_status_t *dls, int status_code,
void
download_status_reset(download_status_t *dls)
{
- const int *schedule;
- size_t schedule_len;
-
- find_dl_schedule_and_len(dls, get_options()->DirPort_set,
- &schedule, &schedule_len);
+ const smartlist_t *schedule = find_dl_schedule_and_len(
+ dls, get_options()->DirPort_set);
dls->n_download_failures = 0;
- dls->next_attempt_at = time(NULL) + schedule[0];
+ dls->next_attempt_at = time(NULL) + *(int *)smartlist_get(schedule, 0);
}
/** Return the number of failures on <b>dls</b> since the last success (if
@@ -3784,7 +3489,8 @@ dir_routerdesc_download_failed(smartlist_t *failed, int status_code,
} else {
dls = router_get_dl_status_by_descriptor_digest(digest);
}
- if (!dls || dls->n_download_failures >= MAX_ROUTERDESC_DOWNLOAD_FAILURES)
+ if (!dls || dls->n_download_failures >=
+ get_options()->TestingDescriptorMaxDownloadTries)
continue;
download_status_increment_failure(dls, status_code, cp, server, now);
} SMARTLIST_FOREACH_END(cp);
@@ -3815,7 +3521,8 @@ dir_microdesc_download_failed(smartlist_t *failed,
if (!rs)
continue;
dls = &rs->dl_status;
- if (dls->n_download_failures >= MAX_MICRODESC_DOWNLOAD_FAILURES)
+ if (dls->n_download_failures >=
+ get_options()->TestingMicrodescMaxDownloadTries)
continue;
{
char buf[BASE64_DIGEST256_LEN+1];
@@ -3829,7 +3536,7 @@ dir_microdesc_download_failed(smartlist_t *failed,
/** Helper. Compare two fp_pair_t objects, and return negative, 0, or
* positive as appropriate. */
static int
-_compare_pairs(const void **a, const void **b)
+compare_pairs_(const void **a, const void **b)
{
const fp_pair_t *fp1 = *a, *fp2 = *b;
int r;
@@ -3880,8 +3587,8 @@ dir_split_resource_into_fingerprint_pairs(const char *res,
smartlist_free(pairs_tmp);
/* Uniq-and-sort */
- smartlist_sort(pairs_result, _compare_pairs);
- smartlist_uniq(pairs_result, _compare_pairs, _tor_free);
+ smartlist_sort(pairs_result, compare_pairs_);
+ smartlist_uniq(pairs_result, compare_pairs_, tor_free_);
smartlist_add_all(pairs_out, pairs_result);
smartlist_free(pairs_result);
diff --git a/src/or/directory.h b/src/or/directory.h
index 1ca1c5a6e..bc200797d 100644
--- a/src/or/directory.h
+++ b/src/or/directory.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for directory.c.
**/
-#ifndef _TOR_DIRECTORY_H
-#define _TOR_DIRECTORY_H
+#ifndef TOR_DIRECTORY_H
+#define TOR_DIRECTORY_H
int directories_have_accepted_server_descriptor(void);
void directory_post_to_dirservers(uint8_t dir_purpose, uint8_t router_purpose,
@@ -22,10 +22,24 @@ void directory_get_from_dirserver(uint8_t dir_purpose, uint8_t router_purpose,
void directory_get_from_all_authorities(uint8_t dir_purpose,
uint8_t router_purpose,
const char *resource);
+
+/** Enumeration of ways to connect to a directory server */
+typedef enum {
+ /** Default: connect over a one-hop Tor circuit but fall back to direct
+ * connection */
+ DIRIND_ONEHOP=0,
+ /** Connect over a multi-hop anonymizing Tor circuit */
+ DIRIND_ANONYMOUS=1,
+ /** Connect to the DirPort directly */
+ DIRIND_DIRECT_CONN,
+ /** Connect over a multi-hop anonymizing Tor circuit to our dirport */
+ DIRIND_ANON_DIRPORT,
+} dir_indirection_t;
+
void directory_initiate_command_routerstatus(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -33,7 +47,7 @@ void directory_initiate_command_routerstatus(const routerstatus_t *status,
void directory_initiate_command_routerstatus_rend(const routerstatus_t *status,
uint8_t dir_purpose,
uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload,
size_t payload_len,
@@ -49,12 +63,11 @@ int connection_dir_process_inbuf(dir_connection_t *conn);
int connection_dir_finished_flushing(dir_connection_t *conn);
int connection_dir_finished_connecting(dir_connection_t *conn);
void connection_dir_about_to_close(dir_connection_t *dir_conn);
-void directory_initiate_command(const char *address, const tor_addr_t *addr,
+void directory_initiate_command(const tor_addr_t *addr,
uint16_t or_port, uint16_t dir_port,
- int supports_conditional_consensus,
- int supports_begindir, const char *digest,
+ const char *digest,
uint8_t dir_purpose, uint8_t router_purpose,
- int anonymized_connection,
+ dir_indirection_t indirection,
const char *resource,
const char *payload, size_t payload_len,
time_t if_modified_since);
@@ -105,5 +118,10 @@ download_status_mark_impossible(download_status_t *dl)
int download_status_get_n_failures(const download_status_t *dls);
+#ifdef TOR_UNIT_TESTS
+/* Used only by directory.c and test_dir.c */
+STATIC int parse_http_url(const char *headers, char **url);
+#endif
+
#endif
diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index f1c9c6232..aedd09252 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -1,12 +1,16 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define DIRSERV_PRIVATE
#include "or.h"
#include "buffers.h"
#include "config.h"
+#include "confparse.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "command.h"
#include "connection.h"
#include "connection_or.h"
#include "control.h"
@@ -22,6 +26,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
/**
* \file dirserv.c
@@ -37,40 +42,24 @@
* directory authorities. */
#define MAX_UNTRUSTED_NETWORKSTATUSES 16
-/** If a v1 directory is older than this, discard it. */
-#define MAX_V1_DIRECTORY_AGE (30*24*60*60)
-/** If a v1 running-routers is older than this, discard it. */
-#define MAX_V1_RR_AGE (7*24*60*60)
-
extern time_t time_of_process_start; /* from main.c */
extern long stats_n_seconds_working; /* from main.c */
-/** Do we need to regenerate the v1 directory when someone asks for it? */
-static time_t the_directory_is_dirty = 1;
-/** Do we need to regenerate the v1 runningrouters document when somebody
- * asks for it? */
-static time_t runningrouters_is_dirty = 1;
-/** Do we need to regenerate our v2 networkstatus document when somebody asks
- * for it? */
-static time_t the_v2_networkstatus_is_dirty = 1;
-
-/** Most recently generated encoded signed v1 directory. (v1 auth dirservers
- * only.) */
-static cached_dir_t *the_directory = NULL;
-
-/** For authoritative directories: the current (v1) network status. */
-static cached_dir_t the_runningrouters;
+/** Total number of routers with measured bandwidth; this is set by
+ * dirserv_count_measured_bws() before the loop in
+ * dirserv_generate_networkstatus_vote_obj() and checked by
+ * dirserv_get_credible_bandwidth() and
+ * dirserv_compute_performance_thresholds() */
+static int routers_with_measured_bw = 0;
static void directory_remove_invalid(void);
-static cached_dir_t *dirserv_regenerate_directory(void);
static char *format_versions_list(config_line_t *ln);
struct authdir_config_t;
static int add_fingerprint_to_dir(const char *nickname, const char *fp,
struct authdir_config_t *list);
static uint32_t
dirserv_get_status_impl(const char *fp, const char *nickname,
- const char *address,
uint32_t addr, uint16_t or_port,
const char *platform, const char *contact,
const char **msg, int should_log);
@@ -79,10 +68,10 @@ static const signed_descriptor_t *get_signed_descriptor_by_fp(
const char *fp,
int extrainfo,
time_t publish_cutoff);
-static int dirserv_add_extrainfo(extrainfo_t *ei, const char **msg);
-
-/************** Measured Bandwidth parsing code ******/
-#define MAX_MEASUREMENT_AGE (3*24*60*60) /* 3 days */
+static was_router_added_t dirserv_add_extrainfo(extrainfo_t *ei,
+ const char **msg);
+static uint32_t dirserv_get_bandwidth_for_router_kb(const routerinfo_t *ri);
+static uint32_t dirserv_get_credible_bandwidth_kb(const routerinfo_t *ri);
/************** Fingerprint handling code ************/
@@ -318,7 +307,6 @@ dirserv_router_get_status(const routerinfo_t *router, const char **msg)
}
return dirserv_get_status_impl(d, router->nickname,
- router->address,
router->addr, router->or_port,
router->platform, router->contact_info,
msg, 1);
@@ -332,7 +320,6 @@ dirserv_would_reject_router(const routerstatus_t *rs)
uint32_t res;
res = dirserv_get_status_impl(rs->identity_digest, rs->nickname,
- "", /* address is only used in logs */
rs->addr, rs->or_port,
NULL, NULL,
NULL, 0);
@@ -371,7 +358,6 @@ dirserv_get_name_status(const char *id_digest, const char *nickname)
*/
static uint32_t
dirserv_get_status_impl(const char *id_digest, const char *nickname,
- const char *address,
uint32_t addr, uint16_t or_port,
const char *platform, const char *contact,
const char **msg, int should_log)
@@ -388,21 +374,24 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
strmap_size(fingerprint_list->fp_by_name),
digestmap_size(fingerprint_list->status_by_digest));
- /* Versions before Tor 0.2.1.30 have known security issues that
- * make them unsuitable for the current network. */
- if (platform && !tor_version_as_new_as(platform,"0.2.1.30")) {
+ /* Versions before Tor 0.2.3.16-alpha are too old to support, and are
+ * missing some important security fixes too. Disable them. */
+ if (platform && !tor_version_as_new_as(platform,"0.2.3.16-alpha")) {
if (msg)
- *msg = "Tor version is insecure. Please upgrade!";
+ *msg = "Tor version is insecure or unsupported. Please upgrade!";
return FP_REJECT;
- } else if (platform && tor_version_as_new_as(platform,"0.2.2.1-alpha")) {
- /* Versions from 0.2.2.1-alpha...0.2.2.20-alpha have known security
+ }
+#if 0
+ else if (platform && tor_version_as_new_as(platform,"0.2.3.0-alpha")) {
+ /* Versions from 0.2.3-alpha...0.2.3.9-alpha have known security
* issues that make them unusable for the current network */
- if (!tor_version_as_new_as(platform, "0.2.2.21-alpha")) {
+ if (!tor_version_as_new_as(platform, "0.2.3.10-alpha")) {
if (msg)
- *msg = "Tor version is insecure. Please upgrade!";
+ *msg = "Tor version is insecure or unsupported. Please upgrade!";
return FP_REJECT;
}
}
+#endif
result = dirserv_get_name_status(id_digest, nickname);
if (result & FP_NAMED) {
@@ -443,14 +432,14 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
if (should_log)
log_info(LD_DIRSERV,
"Marking '%s' as bad directory because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
result |= FP_BADDIR;
}
if (authdir_policy_badexit_address(addr, or_port)) {
if (should_log)
log_info(LD_DIRSERV, "Marking '%s' as bad exit because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
result |= FP_BADEXIT;
}
@@ -458,7 +447,7 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
if (!authdir_policy_permits_address(addr, or_port)) {
if (should_log)
log_info(LD_DIRSERV, "Rejecting '%s' because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
if (msg)
*msg = "Authdir is rejecting routers in this range.";
return FP_REJECT;
@@ -466,7 +455,7 @@ dirserv_get_status_impl(const char *id_digest, const char *nickname,
if (!authdir_policy_valid_address(addr, or_port)) {
if (should_log)
log_info(LD_DIRSERV, "Not marking '%s' valid because of address '%s'",
- nickname, address);
+ nickname, fmt_addr32(addr));
result |= FP_INVALID;
}
if (reject_unlisted) {
@@ -501,8 +490,8 @@ dirserv_free_fingerprint_list(void)
if (!fingerprint_list)
return;
- strmap_free(fingerprint_list->fp_by_name, _tor_free);
- digestmap_free(fingerprint_list->status_by_digest, _tor_free);
+ strmap_free(fingerprint_list->fp_by_name, tor_free_);
+ digestmap_free(fingerprint_list->status_by_digest, tor_free_);
tor_free(fingerprint_list);
}
@@ -515,19 +504,15 @@ dirserv_free_fingerprint_list(void)
static int
dirserv_router_has_valid_address(routerinfo_t *ri)
{
- struct in_addr iaddr;
+ tor_addr_t addr;
if (get_options()->DirAllowPrivateAddresses)
return 0; /* whatever it is, we're fine with it */
- if (!tor_inet_aton(ri->address, &iaddr)) {
- log_info(LD_DIRSERV,"Router %s published non-IP address '%s'. Refusing.",
- router_describe(ri),
- ri->address);
- return -1;
- }
- if (is_internal_IP(ntohl(iaddr.s_addr), 0)) {
+ tor_addr_from_ipv4h(&addr, ri->addr);
+
+ if (tor_addr_is_internal(&addr, 0)) {
log_info(LD_DIRSERV,
- "Router %s published internal IP address '%s'. Refusing.",
- router_describe(ri), ri->address);
+ "Router %s published internal IP address. Refusing.",
+ router_describe(ri));
return -1; /* it's a private IP, we should reject it */
}
return 0;
@@ -579,12 +564,10 @@ authdir_wants_to_reject_router(routerinfo_t *ri, const char **msg,
}
if (dirserv_router_has_valid_address(ri) < 0) {
log_fn(severity, LD_DIRSERV,
- "Router %s has invalid address '%s'. "
- "Not adding (%s).",
+ "Router %s has invalid address. Not adding (%s).",
router_describe(ri),
- ri->address,
esc_router_info(ri));
- *msg = "Rejected: Address is not an IP, or IP is a private address.";
+ *msg = "Rejected: Address is a private address.";
return -1;
}
@@ -717,7 +700,7 @@ dirserv_add_descriptor(routerinfo_t *ri, const char **msg, const char *source)
"MAX_DESCRIPTOR_UPLOAD_SIZE (%d) constant is too low.",
ri->nickname, source, (int)ri->cache_info.signed_descriptor_len,
MAX_DESCRIPTOR_UPLOAD_SIZE);
- *msg = "Router descriptor was too large";
+ *msg = "Router descriptor was too large.";
control_event_or_authdir_new_descriptor("REJECTED",
ri->cache_info.signed_descriptor_body,
ri->cache_info.signed_descriptor_len, *msg);
@@ -828,7 +811,6 @@ dirserv_add_extrainfo(extrainfo_t *ei, const char **msg)
static void
directory_remove_invalid(void)
{
- int changed = 0;
routerlist_t *rl = router_get_routerlist();
smartlist_t *nodes = smartlist_new();
smartlist_add_all(nodes, nodelist_get_list());
@@ -846,7 +828,6 @@ directory_remove_invalid(void)
log_info(LD_DIRSERV, "Router %s is now rejected: %s",
description, msg?msg:"");
routerlist_remove(rl, ent, 0, time(NULL));
- changed = 1;
continue;
}
#if 0
@@ -855,72 +836,35 @@ directory_remove_invalid(void)
"Router %s is now %snamed.", description,
(r&FP_NAMED)?"":"un");
ent->is_named = (r&FP_NAMED)?1:0;
- changed = 1;
}
if (bool_neq((r & FP_UNNAMED), ent->auth_says_is_unnamed)) {
log_info(LD_DIRSERV,
"Router '%s' is now %snamed. (FP_UNNAMED)", description,
(r&FP_NAMED)?"":"un");
ent->is_named = (r&FP_NUNAMED)?0:1;
- changed = 1;
}
#endif
if (bool_neq((r & FP_INVALID), !node->is_valid)) {
log_info(LD_DIRSERV, "Router '%s' is now %svalid.", description,
(r&FP_INVALID) ? "in" : "");
node->is_valid = (r&FP_INVALID)?0:1;
- changed = 1;
}
if (bool_neq((r & FP_BADDIR), node->is_bad_directory)) {
log_info(LD_DIRSERV, "Router '%s' is now a %s directory", description,
(r & FP_BADDIR) ? "bad" : "good");
node->is_bad_directory = (r&FP_BADDIR) ? 1: 0;
- changed = 1;
}
if (bool_neq((r & FP_BADEXIT), node->is_bad_exit)) {
log_info(LD_DIRSERV, "Router '%s' is now a %s exit", description,
(r & FP_BADEXIT) ? "bad" : "good");
node->is_bad_exit = (r&FP_BADEXIT) ? 1: 0;
- changed = 1;
}
} SMARTLIST_FOREACH_END(node);
- if (changed)
- directory_set_dirty();
routerlist_assert_ok(rl);
smartlist_free(nodes);
}
-/** Mark the directory as <b>dirty</b> -- when we're next asked for a
- * directory, we will rebuild it instead of reusing the most recently
- * generated one.
- */
-void
-directory_set_dirty(void)
-{
- time_t now = time(NULL);
- int set_v1_dirty=0;
-
- /* Regenerate stubs only every 8 hours.
- * XXXX It would be nice to generate less often, but these are just
- * stubs: it doesn't matter. */
-#define STUB_REGENERATE_INTERVAL (8*60*60)
- if (!the_directory || !the_runningrouters.dir)
- set_v1_dirty = 1;
- else if (the_directory->published < now - STUB_REGENERATE_INTERVAL ||
- the_runningrouters.published < now - STUB_REGENERATE_INTERVAL)
- set_v1_dirty = 1;
-
- if (set_v1_dirty) {
- if (!the_directory_is_dirty)
- the_directory_is_dirty = now;
- if (!runningrouters_is_dirty)
- runningrouters_is_dirty = now;
- }
- if (!the_v2_networkstatus_is_dirty)
- the_v2_networkstatus_is_dirty = now;
-}
-
/**
* Allocate and return a description of the status of the server <b>desc</b>,
* for use in a v1-style router-status line. The server is listed
@@ -980,6 +924,7 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
unreachable.
*/
int answer;
+ const or_options_t *options = get_options();
node_t *node = node_get_mutable_by_id(router->cache_info.identity_digest);
tor_assert(node);
@@ -988,17 +933,27 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
answer = ! we_are_hibernating();
} else if (router->is_hibernating &&
(router->cache_info.published_on +
- HIBERNATION_PUBLICATION_SKEW) > router->last_reachable) {
+ HIBERNATION_PUBLICATION_SKEW) > node->last_reachable) {
/* A hibernating router is down unless we (somehow) had contact with it
* since it declared itself to be hibernating. */
answer = 0;
- } else if (get_options()->AssumeReachable) {
+ } else if (options->AssumeReachable) {
/* If AssumeReachable, everybody is up unless they say they are down! */
answer = 1;
} else {
- /* Otherwise, a router counts as up if we found it reachable in the last
- REACHABLE_TIMEOUT seconds. */
- answer = (now < router->last_reachable + REACHABLE_TIMEOUT);
+ /* Otherwise, a router counts as up if we found all announced OR
+ ports reachable in the last REACHABLE_TIMEOUT seconds.
+
+ XXX prop186 For now there's always one IPv4 and at most one
+ IPv6 OR port.
+
+ If we're not on IPv6, don't consider reachability of potential
+ IPv6 OR port since that'd kill all dual stack relays until a
+ majority of the dir auths have IPv6 connectivity. */
+ answer = (now < node->last_reachable + REACHABLE_TIMEOUT &&
+ (options->AuthDirHasIPv6Connectivity != 1 ||
+ tor_addr_is_null(&router->ipv6_addr) ||
+ now < node->last_reachable6 + REACHABLE_TIMEOUT));
}
if (!answer && running_long_enough_to_decide_unreachable()) {
@@ -1008,11 +963,13 @@ dirserv_set_router_is_running(routerinfo_t *router, time_t now)
REACHABILITY_TEST_CYCLE_PERIOD seconds, then the router has probably
been down since at least that time after we last successfully reached
it.
+
+ XXX ipv6
*/
time_t when = now;
- if (router->last_reachable &&
- router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD < now)
- when = router->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD;
+ if (node->last_reachable &&
+ node->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD < now)
+ when = node->last_reachable + REACHABILITY_TEST_CYCLE_PERIOD;
rep_hist_note_router_unreachable(router->cache_info.identity_digest, when);
}
@@ -1117,6 +1074,8 @@ int
dirserv_dump_directory_to_string(char **dir_out,
crypto_pk_t *private_key)
{
+ /* XXXX 024 Get rid of this function if we can confirm that nobody's
+ * fetching these any longer */
char *cp;
char *identity_pkey; /* Identity key, DER64-encoded. */
char *recommended_versions;
@@ -1245,14 +1204,6 @@ directory_fetches_dir_info_later(const or_options_t *options)
return options->UseBridges != 0;
}
-/** Return 1 if we want to cache v2 dir info (each status file).
- */
-int
-directory_caches_v2_dir_info(const or_options_t *options)
-{
- return options->DirPort_set;
-}
-
/** Return true iff we want to fetch and keep certificates for authorities
* that we don't acknowledge as aurthorities ourself.
*/
@@ -1287,15 +1238,6 @@ directory_permits_begindir_requests(const or_options_t *options)
return options->BridgeRelay != 0 || options->DirPort_set;
}
-/** Return 1 if we want to allow controllers to ask us directory
- * requests via the controller interface, which doesn't require
- * having any separate port open. */
-int
-directory_permits_controller_requests(const or_options_t *options)
-{
- return options->DirPort_set;
-}
-
/** Return 1 if we have no need to fetch new descriptors. This generally
* happens when we're not a dir cache and we haven't built any circuits
* lately.
@@ -1311,55 +1253,10 @@ directory_too_idle_to_fetch_descriptors(const or_options_t *options,
/********************************************************************/
-/* Used only by non-v1-auth dirservers: The v1 directory and
- * runningrouters we'll serve when requested. */
-
-/** The v1 directory we'll serve (as a cache or as an authority) if
- * requested. */
-static cached_dir_t *cached_directory = NULL;
-/** The v1 runningrouters document we'll serve (as a cache or as an authority)
- * if requested. */
-static cached_dir_t cached_runningrouters;
-
-/** Used for other dirservers' v2 network statuses. Map from hexdigest to
- * cached_dir_t. */
-static digestmap_t *cached_v2_networkstatus = NULL;
-
/** Map from flavor name to the cached_dir_t for the v3 consensuses that we're
* currently serving. */
static strmap_t *cached_consensuses = NULL;
-/** Possibly replace the contents of <b>d</b> with the value of
- * <b>directory</b> published on <b>when</b>, unless <b>when</b> is older than
- * the last value, or too far in the future.
- *
- * Does not copy <b>directory</b>; frees it if it isn't used.
- */
-static void
-set_cached_dir(cached_dir_t *d, char *directory, time_t when)
-{
- time_t now = time(NULL);
- if (when<=d->published) {
- log_info(LD_DIRSERV, "Ignoring old directory; not caching.");
- tor_free(directory);
- } else if (when>=now+ROUTER_MAX_AGE_TO_PUBLISH) {
- log_info(LD_DIRSERV, "Ignoring future directory; not caching.");
- tor_free(directory);
- } else {
- /* if (when>d->published && when<now+ROUTER_MAX_AGE) */
- log_debug(LD_DIRSERV, "Caching directory.");
- tor_free(d->dir);
- d->dir = directory;
- d->dir_len = strlen(directory);
- tor_free(d->dir_z);
- if (tor_gzip_compress(&(d->dir_z), &(d->dir_z_len), d->dir, d->dir_len,
- ZLIB_METHOD)) {
- log_warn(LD_BUG,"Error compressing cached directory");
- }
- d->published = when;
- }
-}
-
/** Decrement the reference count on <b>d</b>, and free it if it no longer has
* any references. */
void
@@ -1399,7 +1296,7 @@ clear_cached_dir(cached_dir_t *d)
/** Free all storage held by the cached_dir_t in <b>d</b>. */
static void
-_free_cached_dir(void *_d)
+free_cached_dir_(void *_d)
{
cached_dir_t *d;
if (!_d)
@@ -1409,96 +1306,6 @@ _free_cached_dir(void *_d)
cached_dir_decref(d);
}
-/** If we have no cached v1 directory, or it is older than <b>published</b>,
- * then replace it with <b>directory</b>, published at <b>published</b>.
- *
- * If <b>published</b> is too old, do nothing.
- *
- * If <b>is_running_routers</b>, this is really a v1 running_routers
- * document rather than a v1 directory.
- */
-void
-dirserv_set_cached_directory(const char *directory, time_t published,
- int is_running_routers)
-{
- time_t now = time(NULL);
-
- if (is_running_routers) {
- if (published >= now - MAX_V1_RR_AGE)
- set_cached_dir(&cached_runningrouters, tor_strdup(directory), published);
- } else {
- if (published >= now - MAX_V1_DIRECTORY_AGE) {
- cached_dir_decref(cached_directory);
- cached_directory = new_cached_dir(tor_strdup(directory), published);
- }
- }
-}
-
-/** If <b>networkstatus</b> is non-NULL, we've just received a v2
- * network-status for an authoritative directory with identity digest
- * <b>identity</b> published at <b>published</b> -- store it so we can
- * serve it to others.
- *
- * If <b>networkstatus</b> is NULL, remove the entry with the given
- * identity fingerprint from the v2 cache.
- */
-void
-dirserv_set_cached_networkstatus_v2(const char *networkstatus,
- const char *identity,
- time_t published)
-{
- cached_dir_t *d, *old_d;
- smartlist_t *trusted_dirs;
- if (!cached_v2_networkstatus)
- cached_v2_networkstatus = digestmap_new();
-
- old_d = digestmap_get(cached_v2_networkstatus, identity);
- if (!old_d && !networkstatus)
- return;
-
- if (networkstatus) {
- if (!old_d || published > old_d->published) {
- d = new_cached_dir(tor_strdup(networkstatus), published);
- digestmap_set(cached_v2_networkstatus, identity, d);
- if (old_d)
- cached_dir_decref(old_d);
- }
- } else {
- if (old_d) {
- digestmap_remove(cached_v2_networkstatus, identity);
- cached_dir_decref(old_d);
- }
- }
-
- /* Now purge old entries. */
- trusted_dirs = router_get_trusted_dir_servers();
- if (digestmap_size(cached_v2_networkstatus) >
- smartlist_len(trusted_dirs) + MAX_UNTRUSTED_NETWORKSTATUSES) {
- /* We need to remove the oldest untrusted networkstatus. */
- const char *oldest = NULL;
- time_t oldest_published = TIME_MAX;
- digestmap_iter_t *iter;
-
- for (iter = digestmap_iter_init(cached_v2_networkstatus);
- !digestmap_iter_done(iter);
- iter = digestmap_iter_next(cached_v2_networkstatus, iter)) {
- const char *ident;
- void *val;
- digestmap_iter_get(iter, &ident, &val);
- d = val;
- if (d->published < oldest_published &&
- !router_digest_is_trusted_dir(ident)) {
- oldest = ident;
- oldest_published = d->published;
- }
- }
- tor_assert(oldest);
- d = digestmap_remove(cached_v2_networkstatus, oldest);
- if (d)
- cached_dir_decref(d);
- }
-}
-
/** Replace the v3 consensus networkstatus of type <b>flavor_name</b> that
* we're serving with <b>networkstatus</b>, published at <b>published</b>. No
* validation is performed. */
@@ -1521,184 +1328,6 @@ dirserv_set_cached_consensus_networkstatus(const char *networkstatus,
cached_dir_decref(old_networkstatus);
}
-/** Remove any v2 networkstatus from the directory cache that was published
- * before <b>cutoff</b>. */
-void
-dirserv_clear_old_networkstatuses(time_t cutoff)
-{
- if (!cached_v2_networkstatus)
- return;
-
- DIGESTMAP_FOREACH_MODIFY(cached_v2_networkstatus, id, cached_dir_t *, dir) {
- if (dir->published < cutoff) {
- char *fname;
- fname = networkstatus_get_cache_filename(id);
- if (file_status(fname) == FN_FILE) {
- log_info(LD_DIR, "Removing too-old untrusted networkstatus in %s",
- fname);
- unlink(fname);
- }
- tor_free(fname);
- cached_dir_decref(dir);
- MAP_DEL_CURRENT(id);
- }
- } DIGESTMAP_FOREACH_END
-}
-
-/** Remove any v1 info from the directory cache that was published
- * too long ago. */
-void
-dirserv_clear_old_v1_info(time_t now)
-{
- if (cached_directory &&
- cached_directory->published < (now - MAX_V1_DIRECTORY_AGE)) {
- cached_dir_decref(cached_directory);
- cached_directory = NULL;
- }
- if (cached_runningrouters.published < (now - MAX_V1_RR_AGE)) {
- clear_cached_dir(&cached_runningrouters);
- }
-}
-
-/** Helper: If we're an authority for the right directory version (v1 or v2)
- * (based on <b>auth_type</b>), try to regenerate
- * auth_src as appropriate and return it, falling back to cache_src on
- * failure. If we're a cache, simply return cache_src.
- */
-static cached_dir_t *
-dirserv_pick_cached_dir_obj(cached_dir_t *cache_src,
- cached_dir_t *auth_src,
- time_t dirty, cached_dir_t *(*regenerate)(void),
- const char *name,
- dirinfo_type_t auth_type)
-{
- const or_options_t *options = get_options();
- int authority = (auth_type == V1_DIRINFO && authdir_mode_v1(options)) ||
- (auth_type == V2_DIRINFO && authdir_mode_v2(options));
-
- if (!authority || authdir_mode_bridge(options)) {
- return cache_src;
- } else {
- /* We're authoritative. */
- if (regenerate != NULL) {
- if (dirty && dirty + DIR_REGEN_SLACK_TIME < time(NULL)) {
- if (!(auth_src = regenerate())) {
- log_err(LD_BUG, "Couldn't generate %s?", name);
- exit(1);
- }
- } else {
- log_info(LD_DIRSERV, "The %s is still clean; reusing.", name);
- }
- }
- return auth_src ? auth_src : cache_src;
- }
-}
-
-/** Return the most recently generated encoded signed v1 directory,
- * generating a new one as necessary. If not a v1 authoritative directory
- * may return NULL if no directory is yet cached. */
-cached_dir_t *
-dirserv_get_directory(void)
-{
- return dirserv_pick_cached_dir_obj(cached_directory, the_directory,
- the_directory_is_dirty,
- dirserv_regenerate_directory,
- "v1 server directory", V1_DIRINFO);
-}
-
-/** Only called by v1 auth dirservers.
- * Generate a fresh v1 directory; set the_directory and return a pointer
- * to the new value.
- */
-static cached_dir_t *
-dirserv_regenerate_directory(void)
-{
- char *new_directory=NULL;
-
- if (dirserv_dump_directory_to_string(&new_directory,
- get_server_identity_key())) {
- log_warn(LD_BUG, "Error creating directory.");
- tor_free(new_directory);
- return NULL;
- }
- cached_dir_decref(the_directory);
- the_directory = new_cached_dir(new_directory, time(NULL));
- log_info(LD_DIRSERV,"New directory (size %d) has been built.",
- (int)the_directory->dir_len);
- log_debug(LD_DIRSERV,"New directory (size %d):\n%s",
- (int)the_directory->dir_len, the_directory->dir);
-
- the_directory_is_dirty = 0;
-
- /* Save the directory to disk so we re-load it quickly on startup.
- */
- dirserv_set_cached_directory(the_directory->dir, time(NULL), 0);
-
- return the_directory;
-}
-
-/** Only called by v1 auth dirservers.
- * Replace the current running-routers list with a newly generated one. */
-static cached_dir_t *
-generate_runningrouters(void)
-{
- char *s=NULL;
- char digest[DIGEST_LEN];
- char published[ISO_TIME_LEN+1];
- size_t len;
- crypto_pk_t *private_key = get_server_identity_key();
- char *identity_pkey; /* Identity key, DER64-encoded. */
- size_t identity_pkey_len;
-
- if (crypto_pk_write_public_key_to_string(private_key,&identity_pkey,
- &identity_pkey_len)<0) {
- log_warn(LD_BUG,"write identity_pkey to string failed!");
- goto err;
- }
- format_iso_time(published, time(NULL));
-
- len = 2048;
- s = tor_malloc_zero(len);
- tor_snprintf(s, len,
- "network-status\n"
- "published %s\n"
- "router-status %s\n"
- "dir-signing-key\n%s"
- "directory-signature %s\n",
- published, "", identity_pkey,
- get_options()->Nickname);
- tor_free(identity_pkey);
- if (router_get_runningrouters_hash(s,digest)) {
- log_warn(LD_BUG,"couldn't compute digest");
- goto err;
- }
- note_crypto_pk_op(SIGN_DIR);
- if (router_append_dirobj_signature(s, len, digest, DIGEST_LEN,
- private_key)<0)
- goto err;
-
- set_cached_dir(&the_runningrouters, s, time(NULL));
- runningrouters_is_dirty = 0;
-
- return &the_runningrouters;
- err:
- tor_free(s);
- return NULL;
-}
-
-/** Set *<b>rr</b> to the most recently generated encoded signed
- * running-routers list, generating a new one as necessary. Return the
- * size of the directory on success, and 0 on failure. */
-cached_dir_t *
-dirserv_get_runningrouters(void)
-{
- return dirserv_pick_cached_dir_obj(
- &cached_runningrouters, &the_runningrouters,
- runningrouters_is_dirty,
- generate_runningrouters,
- "v1 network status list", V1_DIRINFO);
-}
-
/** Return the latest downloaded consensus networkstatus in encoded, signed,
* optionally compressed format, suitable for sending to clients. */
cached_dir_t *
@@ -1709,19 +1338,6 @@ dirserv_get_consensus(const char *flavor_name)
return strmap_get(cached_consensuses, flavor_name);
}
-/** For authoritative directories: the current (v2) network status. */
-static cached_dir_t *the_v2_networkstatus = NULL;
-
-/** Return true iff our opinion of the routers has been stale for long
- * enough that we should generate a new v2 network status doc. */
-static int
-should_generate_v2_networkstatus(void)
-{
- return authdir_mode_v2(get_options()) &&
- the_v2_networkstatus_is_dirty &&
- the_v2_networkstatus_is_dirty + DIR_REGEN_SLACK_TIME < time(NULL);
-}
-
/** If a router's uptime is at least this value, then it is always
* considered stable, regardless of the rest of the network. This
* way we resist attacks where an attacker doubles the size of the
@@ -1758,17 +1374,13 @@ static double guard_wfu = 0.0;
* many seconds. */
static long guard_tk = 0;
/** Any router with a bandwidth at least this high is "Fast" */
-static uint32_t fast_bandwidth = 0;
+static uint32_t fast_bandwidth_kb = 0;
/** If exits can be guards, then all guards must have a bandwidth this
* high. */
-static uint32_t guard_bandwidth_including_exits = 0;
+static uint32_t guard_bandwidth_including_exits_kb = 0;
/** If exits can't be guards, then all guards must have a bandwidth this
* high. */
-static uint32_t guard_bandwidth_excluding_exits = 0;
-/** Total bandwidth of all the routers we're considering. */
-static uint64_t total_bandwidth = 0;
-/** Total bandwidth of all the exit routers we're considering. */
-static uint64_t total_exit_bandwidth = 0;
+static uint32_t guard_bandwidth_excluding_exits_kb = 0;
/** Helper: estimate the uptime of a router given its stated uptime and the
* amount of time since it last stated its stated uptime. */
@@ -1812,8 +1424,8 @@ dirserv_thinks_router_is_unreliable(time_t now,
}
}
if (need_capacity) {
- uint32_t bw = router_get_advertised_bandwidth(router);
- if (bw < fast_bandwidth)
+ uint32_t bw_kb = dirserv_get_credible_bandwidth_kb(router);
+ if (bw_kb < fast_bandwidth_kb)
return 1;
}
return 0;
@@ -1859,34 +1471,67 @@ dirserv_thinks_router_is_hs_dir(const routerinfo_t *router,
node->is_running);
}
+/** Don't consider routers with less bandwidth than this when computing
+ * thresholds. */
+#define ABSOLUTE_MIN_BW_VALUE_TO_CONSIDER_KB 4
+
+/** Helper for dirserv_compute_performance_thresholds(): Decide whether to
+ * include a router in our calculations, and return true iff we should; the
+ * require_mbw parameter is passed in by
+ * dirserv_compute_performance_thresholds() and controls whether we ever
+ * count routers with only advertised bandwidths */
+static int
+router_counts_toward_thresholds(const node_t *node, time_t now,
+ const digestmap_t *omit_as_sybil,
+ int require_mbw)
+{
+ /* Have measured bw? */
+ int have_mbw =
+ dirserv_has_measured_bw(node->identity);
+ uint64_t min_bw_kb = ABSOLUTE_MIN_BW_VALUE_TO_CONSIDER_KB;
+ const or_options_t *options = get_options();
+
+ if (options->TestingTorNetwork) {
+ min_bw_kb = (int64_t)options->TestingMinExitFlagThreshold / 1000;
+ }
+
+ return node->ri && router_is_active(node->ri, node, now) &&
+ !digestmap_get(omit_as_sybil, node->identity) &&
+ (dirserv_get_credible_bandwidth_kb(node->ri) >= min_bw_kb) &&
+ (have_mbw || !require_mbw);
+}
+
/** Look through the routerlist, the Mean Time Between Failure history, and
* the Weighted Fractional Uptime history, and use them to set thresholds for
* the Stable, Fast, and Guard flags. Update the fields stable_uptime,
* stable_mtbf, enough_mtbf_info, guard_wfu, guard_tk, fast_bandwidth,
- * guard_bandwidh_including_exits, guard_bandwidth_excluding_exits,
- * total_bandwidth, and total_exit_bandwidth.
+ * guard_bandwidth_including_exits, and guard_bandwidth_excluding_exits.
*
* Also, set the is_exit flag of each router appropriately. */
static void
-dirserv_compute_performance_thresholds(routerlist_t *rl)
+dirserv_compute_performance_thresholds(routerlist_t *rl,
+ digestmap_t *omit_as_sybil)
{
int n_active, n_active_nonexit, n_familiar;
- uint32_t *uptimes, *bandwidths, *bandwidths_excluding_exits;
+ uint32_t *uptimes, *bandwidths_kb, *bandwidths_excluding_exits_kb;
long *tks;
double *mtbfs, *wfus;
time_t now = time(NULL);
const or_options_t *options = get_options();
+ /* Require mbw? */
+ int require_mbw =
+ (routers_with_measured_bw >
+ options->MinMeasuredBWsForAuthToIgnoreAdvertised) ? 1 : 0;
+
/* initialize these all here, in case there are no routers */
stable_uptime = 0;
stable_mtbf = 0;
- fast_bandwidth = 0;
- guard_bandwidth_including_exits = 0;
- guard_bandwidth_excluding_exits = 0;
+ fast_bandwidth_kb = 0;
+ guard_bandwidth_including_exits_kb = 0;
+ guard_bandwidth_excluding_exits_kb = 0;
guard_tk = 0;
guard_wfu = 0;
- total_bandwidth = 0;
- total_exit_bandwidth = 0;
/* Initialize arrays that will hold values for each router. We'll
* sort them and use that to compute thresholds. */
@@ -1894,9 +1539,9 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
/* Uptime for every active router. */
uptimes = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
/* Bandwidth for every active router. */
- bandwidths = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
+ bandwidths_kb = tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
/* Bandwidth for every active non-exit router. */
- bandwidths_excluding_exits =
+ bandwidths_excluding_exits_kb =
tor_malloc(sizeof(uint32_t)*smartlist_len(rl->routers));
/* Weighted mean time between failure for each active router. */
mtbfs = tor_malloc(sizeof(double)*smartlist_len(rl->routers));
@@ -1909,21 +1554,23 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
/* Now, fill in the arrays. */
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), node_t *, node) {
- routerinfo_t *ri = node->ri;
- if (ri && router_is_active(ri, node, now)) {
- const char *id = ri->cache_info.identity_digest;
- uint32_t bw;
+ if (options->BridgeAuthoritativeDir &&
+ node->ri &&
+ node->ri->purpose != ROUTER_PURPOSE_BRIDGE)
+ continue;
+ if (router_counts_toward_thresholds(node, now, omit_as_sybil,
+ require_mbw)) {
+ routerinfo_t *ri = node->ri;
+ const char *id = node->identity;
+ uint32_t bw_kb;
node->is_exit = (!router_exit_policy_rejects_all(ri) &&
exit_policy_is_general_exit(ri->exit_policy));
uptimes[n_active] = (uint32_t)real_uptime(ri, now);
mtbfs[n_active] = rep_hist_get_stability(id, now);
tks [n_active] = rep_hist_get_weighted_time_known(id, now);
- bandwidths[n_active] = bw = router_get_advertised_bandwidth(ri);
- total_bandwidth += bw;
- if (node->is_exit && !node->is_bad_exit) {
- total_exit_bandwidth += bw;
- } else {
- bandwidths_excluding_exits[n_active_nonexit] = bw;
+ bandwidths_kb[n_active] = bw_kb = dirserv_get_credible_bandwidth_kb(ri);
+ if (!node->is_exit || node->is_bad_exit) {
+ bandwidths_excluding_exits_kb[n_active_nonexit] = bw_kb;
++n_active_nonexit;
}
++n_active;
@@ -1937,11 +1584,11 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
/* The median mtbf is stable, if we have enough mtbf info */
stable_mtbf = median_double(mtbfs, n_active);
/* The 12.5th percentile bandwidth is fast. */
- fast_bandwidth = find_nth_uint32(bandwidths, n_active, n_active/8);
+ fast_bandwidth_kb = find_nth_uint32(bandwidths_kb, n_active, n_active/8);
/* (Now bandwidths is sorted.) */
- if (fast_bandwidth < ROUTER_REQUIRED_MIN_BANDWIDTH/2)
- fast_bandwidth = bandwidths[n_active/4];
- guard_bandwidth_including_exits = bandwidths[(n_active-1)/2];
+ if (fast_bandwidth_kb < ROUTER_REQUIRED_MIN_BANDWIDTH/(2 * 1000))
+ fast_bandwidth_kb = bandwidths_kb[n_active/4];
+ guard_bandwidth_including_exits_kb = bandwidths_kb[(n_active-1)/2];
guard_tk = find_nth_long(tks, n_active, n_active/8);
}
@@ -1950,29 +1597,39 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
{
/* We can vote on a parameter for the minimum and maximum. */
- int32_t min_fast, max_fast;
+#define ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG 4
+ int32_t min_fast_kb, max_fast_kb, min_fast, max_fast;
min_fast = networkstatus_get_param(NULL, "FastFlagMinThreshold",
- 0, 0, INT32_MAX);
+ ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG,
+ ABSOLUTE_MIN_VALUE_FOR_FAST_FLAG,
+ INT32_MAX);
+ if (options->TestingTorNetwork) {
+ min_fast = (int32_t)options->TestingMinFastFlagThreshold;
+ }
max_fast = networkstatus_get_param(NULL, "FastFlagMaxThreshold",
INT32_MAX, min_fast, INT32_MAX);
- if (fast_bandwidth < (uint32_t)min_fast)
- fast_bandwidth = min_fast;
- if (fast_bandwidth > (uint32_t)max_fast)
- fast_bandwidth = max_fast;
+ min_fast_kb = min_fast / 1000;
+ max_fast_kb = max_fast / 1000;
+
+ if (fast_bandwidth_kb < (uint32_t)min_fast_kb)
+ fast_bandwidth_kb = min_fast_kb;
+ if (fast_bandwidth_kb > (uint32_t)max_fast_kb)
+ fast_bandwidth_kb = max_fast_kb;
}
/* Protect sufficiently fast nodes from being pushed out of the set
* of Fast nodes. */
if (options->AuthDirFastGuarantee &&
- fast_bandwidth > options->AuthDirFastGuarantee)
- fast_bandwidth = (uint32_t)options->AuthDirFastGuarantee;
+ fast_bandwidth_kb > options->AuthDirFastGuarantee/1000)
+ fast_bandwidth_kb = (uint32_t)options->AuthDirFastGuarantee/1000;
/* Now that we have a time-known that 7/8 routers are known longer than,
* fill wfus with the wfu of every such "familiar" router. */
n_familiar = 0;
SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), node_t *, node) {
- routerinfo_t *ri = node->ri;
- if (ri && router_is_active(ri, node, now)) {
+ if (router_counts_toward_thresholds(node, now,
+ omit_as_sybil, require_mbw)) {
+ routerinfo_t *ri = node->ri;
const char *id = ri->cache_info.identity_digest;
long tk = rep_hist_get_weighted_time_known(id, now);
if (tk < guard_tk)
@@ -1988,32 +1645,274 @@ dirserv_compute_performance_thresholds(routerlist_t *rl)
enough_mtbf_info = rep_hist_have_measured_enough_stability();
if (n_active_nonexit) {
- guard_bandwidth_excluding_exits =
- median_uint32(bandwidths_excluding_exits, n_active_nonexit);
+ guard_bandwidth_excluding_exits_kb =
+ median_uint32(bandwidths_excluding_exits_kb, n_active_nonexit);
}
- log(LOG_INFO, LD_DIRSERV,
+ log_info(LD_DIRSERV,
"Cutoffs: For Stable, %lu sec uptime, %lu sec MTBF. "
- "For Fast: %lu bytes/sec. "
+ "For Fast: %lu kilobytes/sec. "
"For Guard: WFU %.03f%%, time-known %lu sec, "
- "and bandwidth %lu or %lu bytes/sec. We%s have enough stability data.",
+ "and bandwidth %lu or %lu kilobytes/sec. "
+ "We%s have enough stability data.",
(unsigned long)stable_uptime,
(unsigned long)stable_mtbf,
- (unsigned long)fast_bandwidth,
+ (unsigned long)fast_bandwidth_kb,
guard_wfu*100,
(unsigned long)guard_tk,
- (unsigned long)guard_bandwidth_including_exits,
- (unsigned long)guard_bandwidth_excluding_exits,
+ (unsigned long)guard_bandwidth_including_exits_kb,
+ (unsigned long)guard_bandwidth_excluding_exits_kb,
enough_mtbf_info ? "" : " don't ");
tor_free(uptimes);
tor_free(mtbfs);
- tor_free(bandwidths);
- tor_free(bandwidths_excluding_exits);
+ tor_free(bandwidths_kb);
+ tor_free(bandwidths_excluding_exits_kb);
tor_free(tks);
tor_free(wfus);
}
+/* Use dirserv_compute_performance_thresholds() to compute the thresholds
+ * for the status flags, specifically for bridges.
+ *
+ * This is only called by a Bridge Authority from
+ * networkstatus_getinfo_by_purpose().
+ */
+void
+dirserv_compute_bridge_flag_thresholds(routerlist_t *rl)
+{
+
+ digestmap_t *omit_as_sybil = digestmap_new();
+ dirserv_compute_performance_thresholds(rl, omit_as_sybil);
+ digestmap_free(omit_as_sybil, NULL);
+}
+
+/** Measured bandwidth cache entry */
+typedef struct mbw_cache_entry_s {
+ long mbw_kb;
+ time_t as_of;
+} mbw_cache_entry_t;
+
+/** Measured bandwidth cache - keys are identity_digests, values are
+ * mbw_cache_entry_t *. */
+static digestmap_t *mbw_cache = NULL;
+
+/** Store a measured bandwidth cache entry when reading the measured
+ * bandwidths file. */
+STATIC void
+dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
+ time_t as_of)
+{
+ mbw_cache_entry_t *e = NULL;
+
+ tor_assert(parsed_line);
+
+ /* Allocate a cache if we need */
+ if (!mbw_cache) mbw_cache = digestmap_new();
+
+ /* Check if we have an existing entry */
+ e = digestmap_get(mbw_cache, parsed_line->node_id);
+ /* If we do, we can re-use it */
+ if (e) {
+ /* Check that we really are newer, and update */
+ if (as_of > e->as_of) {
+ e->mbw_kb = parsed_line->bw_kb;
+ e->as_of = as_of;
+ }
+ } else {
+ /* We'll have to insert a new entry */
+ e = tor_malloc(sizeof(*e));
+ e->mbw_kb = parsed_line->bw_kb;
+ e->as_of = as_of;
+ digestmap_set(mbw_cache, parsed_line->node_id, e);
+ }
+}
+
+/** Clear and free the measured bandwidth cache */
+STATIC void
+dirserv_clear_measured_bw_cache(void)
+{
+ if (mbw_cache) {
+ /* Free the map and all entries */
+ digestmap_free(mbw_cache, tor_free_);
+ mbw_cache = NULL;
+ }
+}
+
+/** Scan the measured bandwidth cache and remove expired entries */
+STATIC void
+dirserv_expire_measured_bw_cache(time_t now)
+{
+
+ if (mbw_cache) {
+ /* Iterate through the cache and check each entry */
+ DIGESTMAP_FOREACH_MODIFY(mbw_cache, k, mbw_cache_entry_t *, e) {
+ if (now > e->as_of + MAX_MEASUREMENT_AGE) {
+ tor_free(e);
+ MAP_DEL_CURRENT(k);
+ }
+ } DIGESTMAP_FOREACH_END;
+
+ /* Check if we cleared the whole thing and free if so */
+ if (digestmap_size(mbw_cache) == 0) {
+ digestmap_free(mbw_cache, tor_free_);
+ mbw_cache = 0;
+ }
+ }
+}
+
+/** Get the current size of the measured bandwidth cache */
+STATIC int
+dirserv_get_measured_bw_cache_size(void)
+{
+ if (mbw_cache) return digestmap_size(mbw_cache);
+ else return 0;
+}
+
+/** 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. */
+STATIC int
+dirserv_query_measured_bw_cache_kb(const char *node_id, long *bw_kb_out,
+ time_t *as_of_out)
+{
+ mbw_cache_entry_t *v = NULL;
+ int rv = 0;
+
+ if (mbw_cache && node_id) {
+ v = digestmap_get(mbw_cache, node_id);
+ if (v) {
+ /* Found something */
+ rv = 1;
+ if (bw_kb_out) *bw_kb_out = v->mbw_kb;
+ if (as_of_out) *as_of_out = v->as_of;
+ }
+ }
+
+ return rv;
+}
+
+/** Predicate wrapper for dirserv_query_measured_bw_cache() */
+STATIC int
+dirserv_has_measured_bw(const char *node_id)
+{
+ return dirserv_query_measured_bw_cache_kb(node_id, NULL, NULL);
+}
+
+/** Get the best estimate of a router's bandwidth for dirauth purposes,
+ * preferring measured to advertised values if available. */
+
+static uint32_t
+dirserv_get_bandwidth_for_router_kb(const routerinfo_t *ri)
+{
+ uint32_t bw_kb = 0;
+ /*
+ * Yeah, measured bandwidths in measured_bw_line_t are (implicitly
+ * signed) longs and the ones router_get_advertised_bandwidth() returns
+ * are uint32_t.
+ */
+ long mbw_kb = 0;
+
+ if (ri) {
+ /*
+ * * First try to see if we have a measured bandwidth; don't bother with
+ * as_of_out here, on the theory that a stale measured bandwidth is still
+ * better to trust than an advertised one.
+ */
+ if (dirserv_query_measured_bw_cache_kb(ri->cache_info.identity_digest,
+ &mbw_kb, NULL)) {
+ /* Got one! */
+ bw_kb = (uint32_t)mbw_kb;
+ } else {
+ /* If not, fall back to advertised */
+ bw_kb = router_get_advertised_bandwidth(ri) / 1000;
+ }
+ }
+
+ return bw_kb;
+}
+
+/** Look through the routerlist, and using the measured bandwidth cache count
+ * how many measured bandwidths we know. This is used to decide whether we
+ * ever trust advertised bandwidths for purposes of assigning flags. */
+static void
+dirserv_count_measured_bws(routerlist_t *rl)
+{
+ /* Initialize this first */
+ routers_with_measured_bw = 0;
+
+ tor_assert(rl);
+ tor_assert(rl->routers);
+
+ /* Iterate over the routerlist and count measured bandwidths */
+ SMARTLIST_FOREACH_BEGIN(rl->routers, routerinfo_t *, ri) {
+ /* Check if we know a measured bandwidth for this one */
+ if (dirserv_has_measured_bw(ri->cache_info.identity_digest)) {
+ ++routers_with_measured_bw;
+ }
+ } SMARTLIST_FOREACH_END(ri);
+}
+
+/** Return the bandwidth we believe for assigning flags; prefer measured
+ * over advertised, and if we have above a threshold quantity of measured
+ * bandwidths, we don't want to ever give flags to unmeasured routers, so
+ * return 0. */
+static uint32_t
+dirserv_get_credible_bandwidth_kb(const routerinfo_t *ri)
+{
+ int threshold;
+ uint32_t bw_kb = 0;
+ long mbw_kb;
+
+ tor_assert(ri);
+ /* Check if we have a measured bandwidth, and check the threshold if not */
+ if (!(dirserv_query_measured_bw_cache_kb(ri->cache_info.identity_digest,
+ &mbw_kb, NULL))) {
+ threshold = get_options()->MinMeasuredBWsForAuthToIgnoreAdvertised;
+ if (routers_with_measured_bw > threshold) {
+ /* Return zero for unmeasured bandwidth if we are above threshold */
+ bw_kb = 0;
+ } else {
+ /* Return an advertised bandwidth otherwise */
+ bw_kb = router_get_advertised_bandwidth_capped(ri) / 1000;
+ }
+ } else {
+ /* We have the measured bandwidth in mbw */
+ bw_kb = (uint32_t)mbw_kb;
+ }
+
+ return bw_kb;
+}
+
+/** Give a statement of our current performance thresholds for inclusion
+ * in a vote document. */
+char *
+dirserv_get_flag_thresholds_line(void)
+{
+ char *result=NULL;
+ const int measured_threshold =
+ get_options()->MinMeasuredBWsForAuthToIgnoreAdvertised;
+ const int enough_measured_bw = routers_with_measured_bw > measured_threshold;
+
+ tor_asprintf(&result,
+ "stable-uptime=%lu stable-mtbf=%lu "
+ "fast-speed=%lu "
+ "guard-wfu=%.03f%% guard-tk=%lu "
+ "guard-bw-inc-exits=%lu guard-bw-exc-exits=%lu "
+ "enough-mtbf=%d ignoring-advertised-bws=%d",
+ (unsigned long)stable_uptime,
+ (unsigned long)stable_mtbf,
+ (unsigned long)fast_bandwidth_kb*1000,
+ guard_wfu*100,
+ (unsigned long)guard_tk,
+ (unsigned long)guard_bandwidth_including_exits_kb*1000,
+ (unsigned long)guard_bandwidth_excluding_exits_kb*1000,
+ enough_mtbf_info ? 1 : 0,
+ enough_measured_bw ? 1 : 0);
+
+ return result;
+}
+
/** Given a platform string as in a routerinfo_t (possibly null), return a
* newly allocated version string for a networkstatus document, or NULL if the
* platform doesn't give a Tor version. */
@@ -2034,38 +1933,39 @@ version_from_platform(const char *platform)
return NULL;
}
-/** Helper: write the router-status information in <b>rs</b> into <b>buf</b>,
- * which has at least <b>buf_len</b> free characters. Do NUL-termination.
- * Use the same format as in network-status documents. If <b>version</b> is
- * non-NULL, add a "v" line for the platform. Return 0 on success, -1 on
- * failure.
+/** Helper: write the router-status information in <b>rs</b> into a newly
+ * allocated character buffer. Use the same format as in network-status
+ * documents. If <b>version</b> is non-NULL, add a "v" line for the platform.
+ * Return 0 on success, -1 on failure.
*
- * The format argument has three possible values:
+ * The format argument has one of the following values:
* NS_V2 - Output an entry suitable for a V2 NS opinion document
* NS_V3_CONSENSUS - Output the first portion of a V3 NS consensus entry
* NS_V3_CONSENSUS_MICRODESC - Output the first portion of a V3 microdesc
* consensus entry.
- * NS_V3_VOTE - Output a complete V3 NS vote
+ * NS_V3_VOTE - Output a complete V3 NS vote. If <b>vrs</b> is present,
+ * it contains additional information for the vote.
* NS_CONTROL_PORT - Output a NS document for the control port
*/
-int
-routerstatus_format_entry(char *buf, size_t buf_len,
- const routerstatus_t *rs, const char *version,
- routerstatus_format_type_t format)
+char *
+routerstatus_format_entry(const routerstatus_t *rs, const char *version,
+ routerstatus_format_type_t format,
+ const vote_routerstatus_t *vrs)
{
- int r;
- char *cp;
char *summary;
+ char *result = NULL;
char published[ISO_TIME_LEN+1];
char identity64[BASE64_DIGEST_LEN+1];
char digest64[BASE64_DIGEST_LEN+1];
+ smartlist_t *chunks = NULL;
format_iso_time(published, rs->published_on);
digest_to_base64(identity64, rs->identity_digest);
digest_to_base64(digest64, rs->descriptor_digest);
- r = tor_snprintf(buf, buf_len,
+ chunks = smartlist_new();
+ smartlist_add_asprintf(chunks,
"r %s %s %s%s%s %s %d %d\n",
rs->nickname,
identity64,
@@ -2075,21 +1975,26 @@ routerstatus_format_entry(char *buf, size_t buf_len,
fmt_addr32(rs->addr),
(int)rs->or_port,
(int)rs->dir_port);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- return -1;
- }
/* TODO: Maybe we want to pass in what we need to build the rest of
* this here, instead of in the caller. Then we could use the
* networkstatus_type_t values, with an additional control port value
* added -MP */
- if (format == NS_V3_CONSENSUS || format == NS_V3_CONSENSUS_MICRODESC)
- return 0;
- cp = buf + strlen(buf);
- /* NOTE: Whenever this list expands, be sure to increase MAX_FLAG_LINE_LEN*/
- r = tor_snprintf(cp, buf_len - (cp-buf),
+ /* V3 microdesc consensuses don't have "a" lines. */
+ if (format == NS_V3_CONSENSUS_MICRODESC)
+ goto done;
+
+ /* Possible "a" line. At most one for now. */
+ if (!tor_addr_is_null(&rs->ipv6_addr)) {
+ smartlist_add_asprintf(chunks, "a %s\n",
+ fmt_addrport(&rs->ipv6_addr, rs->ipv6_orport));
+ }
+
+ if (format == NS_V3_CONSENSUS)
+ goto done;
+
+ smartlist_add_asprintf(chunks,
"s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
/* These must stay in alphabetical order. */
rs->is_authority?" Authority":"",
@@ -2103,27 +2008,18 @@ routerstatus_format_entry(char *buf, size_t buf_len,
rs->is_flagged_running?" Running":"",
rs->is_stable?" Stable":"",
rs->is_unnamed?" Unnamed":"",
- rs->is_v2_dir?" V2Dir":"",
+ (rs->dir_port!=0)?" V2Dir":"",
rs->is_valid?" Valid":"");
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- return -1;
- }
- cp += strlen(cp);
/* length of "opt v \n" */
#define V_LINE_OVERHEAD 7
if (version && strlen(version) < MAX_V_LINE_LEN - V_LINE_OVERHEAD) {
- if (tor_snprintf(cp, buf_len - (cp-buf), "opt v %s\n", version)<0) {
- log_warn(LD_BUG, "Unable to print router version.");
- return -1;
- }
- cp += strlen(cp);
+ smartlist_add_asprintf(chunks, "v %s\n", version);
}
if (format != NS_V2) {
const routerinfo_t* desc = router_get_by_id_digest(rs->identity_digest);
- uint32_t bw;
+ uint32_t bw_kb;
if (format != NS_CONTROL_PORT) {
/* Blow up more or less nicely if we didn't get anything or not the
@@ -2138,12 +2034,13 @@ routerstatus_format_entry(char *buf, size_t buf_len,
log_warn(LD_BUG, "Cannot get any descriptor for %s "
"(wanted descriptor %s).",
id, dd);
- return -1;
- };
+ goto err;
+ }
- /* This assert can fire for the control port, because
+ /* This assert could fire for the control port, because
* it can request NS documents before all descriptors
- * have been fetched. */
+ * have been fetched. Therefore, we only do this test when
+ * format != NS_CONTROL_PORT. */
if (tor_memneq(desc->cache_info.signed_descriptor_digest,
rs->descriptor_digest,
DIGEST_LEN)) {
@@ -2163,48 +2060,41 @@ routerstatus_format_entry(char *buf, size_t buf_len,
tor_assert(tor_memeq(desc->cache_info.signed_descriptor_digest,
rs->descriptor_digest,
DIGEST_LEN));
- };
+ }
}
if (format == NS_CONTROL_PORT && rs->has_bandwidth) {
- bw = rs->bandwidth;
+ bw_kb = rs->bandwidth_kb;
} else {
tor_assert(desc);
- bw = router_get_advertised_bandwidth_capped(desc) / 1000;
+ bw_kb = router_get_advertised_bandwidth_capped(desc) / 1000;
}
- r = tor_snprintf(cp, buf_len - (cp-buf),
- "w Bandwidth=%d\n", bw);
+ smartlist_add_asprintf(chunks,
+ "w Bandwidth=%d", bw_kb);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- return -1;
- }
- cp += strlen(cp);
- if (format == NS_V3_VOTE && rs->has_measured_bw) {
- *--cp = '\0'; /* Kill "\n" */
- r = tor_snprintf(cp, buf_len - (cp-buf),
- " Measured=%d\n", rs->measured_bw);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer for weight line.");
- return -1;
- }
- cp += strlen(cp);
+ if (format == NS_V3_VOTE && vrs && vrs->has_measured_bw) {
+ smartlist_add_asprintf(chunks,
+ " Measured=%d", vrs->measured_bw_kb);
}
+ smartlist_add(chunks, tor_strdup("\n"));
if (desc) {
- summary = policy_summarize(desc->exit_policy);
- r = tor_snprintf(cp, buf_len - (cp-buf), "p %s\n", summary);
- if (r<0) {
- log_warn(LD_BUG, "Not enough space in buffer.");
- tor_free(summary);
- return -1;
- }
- cp += strlen(cp);
+ summary = policy_summarize(desc->exit_policy, AF_INET);
+ smartlist_add_asprintf(chunks, "p %s\n", summary);
tor_free(summary);
}
}
- return 0;
+ done:
+ result = smartlist_join_strings(chunks, "", 0, NULL);
+
+ err:
+ if (chunks) {
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ }
+
+ return result;
}
/** Helper for sorting: compares two routerinfos first by address, and then by
@@ -2213,11 +2103,11 @@ routerstatus_format_entry(char *buf, size_t buf_len,
* and a router with more bandwidth is more useful than one with less.)
**/
static int
-_compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
+compare_routerinfo_by_ip_and_bw_(const void **a, const void **b)
{
routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b;
int first_is_auth, second_is_auth;
- uint32_t bw_first, bw_second;
+ uint32_t bw_kb_first, bw_kb_second;
const node_t *node_first, *node_second;
int first_is_running, second_is_running;
@@ -2228,7 +2118,7 @@ _compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
else if (first->addr > second->addr)
return 1;
- /* Potentially, this next bit could cause k n lg n memcmp calls. But in
+ /* Potentially, this next bit could cause k n lg n memeq calls. But in
* reality, we will almost never get here, since addresses will usually be
* different. */
@@ -2252,12 +2142,12 @@ _compare_routerinfo_by_ip_and_bw(const void **a, const void **b)
else if (!first_is_running && second_is_running)
return 1;
- bw_first = router_get_advertised_bandwidth(first);
- bw_second = router_get_advertised_bandwidth(second);
+ bw_kb_first = dirserv_get_bandwidth_for_router_kb(first);
+ bw_kb_second = dirserv_get_bandwidth_for_router_kb(second);
- if (bw_first > bw_second)
+ if (bw_kb_first > bw_kb_second)
return -1;
- else if (bw_first < bw_second)
+ else if (bw_kb_first < bw_kb_second)
return 1;
/* They're equal! Compare by identity digest, so there's a
@@ -2288,7 +2178,7 @@ get_possible_sybil_list(const smartlist_t *routers)
max_with_same_addr_on_authority = INT_MAX;
smartlist_add_all(routers_by_ip, routers);
- smartlist_sort(routers_by_ip, _compare_routerinfo_by_ip_and_bw);
+ smartlist_sort(routers_by_ip, compare_routerinfo_by_ip_and_bw_);
omit_as_sybil = digestmap_new();
last_addr = 0;
@@ -2393,9 +2283,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
int listbaddirs, int vote_on_hsdirs)
{
const or_options_t *options = get_options();
- int unstable_version =
- !tor_version_as_new_as(ri->platform,"0.1.1.16-rc-cvs");
- uint32_t routerbw = router_get_advertised_bandwidth(ri);
+ uint32_t routerbw_kb = dirserv_get_credible_bandwidth_kb(ri);
memset(rs, 0, sizeof(routerstatus_t));
@@ -2406,8 +2294,7 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
rs->is_exit = node->is_exit;
rs->is_stable = node->is_stable =
router_is_active(ri, node, now) &&
- !dirserv_thinks_router_is_unreliable(now, ri, 1, 0) &&
- !unstable_version;
+ !dirserv_thinks_router_is_unreliable(now, ri, 1, 0);
rs->is_fast = node->is_fast =
router_is_active(ri, node, now) &&
!dirserv_thinks_router_is_unreliable(now, ri, 0, 1);
@@ -2423,9 +2310,9 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
if (node->is_fast &&
((options->AuthDirGuardBWGuarantee &&
- routerbw >= options->AuthDirGuardBWGuarantee) ||
- routerbw >= MIN(guard_bandwidth_including_exits,
- guard_bandwidth_excluding_exits)) &&
+ routerbw_kb >= options->AuthDirGuardBWGuarantee/1000) ||
+ routerbw_kb >= MIN(guard_bandwidth_including_exits_kb,
+ guard_bandwidth_excluding_exits_kb)) &&
is_router_version_good_for_possible_guard(ri->platform)) {
long tk = rep_hist_get_weighted_time_known(
node->identity, now);
@@ -2435,12 +2322,16 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
} else {
rs->is_possible_guard = 0;
}
+ if (options->TestingTorNetwork &&
+ routerset_contains_routerstatus(options->TestingDirAuthVoteGuard,
+ rs, 0)) {
+ rs->is_possible_guard = 1;
+ }
rs->is_bad_directory = listbaddirs && node->is_bad_directory;
rs->is_bad_exit = listbadexits && node->is_bad_exit;
node->is_hs_dir = dirserv_thinks_router_is_hs_dir(ri, node, now);
rs->is_hs_dir = vote_on_hsdirs && node->is_hs_dir;
- rs->is_v2_dir = ri->dir_port != 0;
if (!strcasecmp(ri->nickname, UNNAMED_ROUTER_NICKNAME))
rs->is_named = rs->is_unnamed = 0;
@@ -2453,6 +2344,14 @@ set_routerstatus_from_routerinfo(routerstatus_t *rs,
strlcpy(rs->nickname, ri->nickname, sizeof(rs->nickname));
rs->or_port = ri->or_port;
rs->dir_port = ri->dir_port;
+ if (options->AuthDirHasIPv6Connectivity == 1 &&
+ !tor_addr_is_null(&ri->ipv6_addr) &&
+ node->last_reachable6 >= now - REACHABLE_TIMEOUT) {
+ /* We're configured as having IPv6 connectivity. There's an IPv6
+ OR port and it's reachable so copy it to the routerstatus. */
+ tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
+ rs->ipv6_orport = ri->ipv6_orport;
+ }
}
/** Routerstatus <b>rs</b> is part of a group of routers that are on
@@ -2463,7 +2362,7 @@ static void
clear_status_flags_on_sybil(routerstatus_t *rs)
{
rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
- rs->is_flagged_running = rs->is_named = rs->is_valid = rs->is_v2_dir =
+ rs->is_flagged_running = rs->is_named = rs->is_valid =
rs->is_hs_dir = rs->is_possible_guard = rs->is_bad_exit =
rs->is_bad_directory = 0;
/* FFFF we might want some mechanism to check later on if we
@@ -2476,7 +2375,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);
@@ -2512,7 +2411,7 @@ measured_bw_line_parse(measured_bw_line_t *out, const char *orig_line)
}
cp+=strlen("bw=");
- out->bw = tor_parse_long(cp, 0, 0, LONG_MAX, &parse_ok, &endptr);
+ out->bw_kb = tor_parse_long(cp, 0, 0, LONG_MAX, &parse_ok, &endptr);
if (!parse_ok || (*endptr && !TOR_ISSPACE(*endptr))) {
log_warn(LD_DIRSERV, "Invalid bandwidth in bandwidth file line: %s",
escaped(orig_line));
@@ -2557,20 +2456,20 @@ 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)
{
- routerstatus_t *rs = NULL;
+ vote_routerstatus_t *rs = NULL;
if (!routerstatuses)
return 0;
rs = smartlist_bsearch(routerstatuses, parsed_line->node_id,
- compare_digest_to_routerstatus_entry);
+ compare_digest_to_vote_routerstatus_entry);
if (rs) {
rs->has_measured_bw = 1;
- rs->measured_bw = (uint32_t)parsed_line->bw;
+ rs->measured_bw_kb = (uint32_t)parsed_line->bw_kb;
} else {
log_info(LD_DIRSERV, "Node ID %s not found in routerstatus list",
parsed_line->node_hex);
@@ -2581,7 +2480,7 @@ measured_bw_line_apply(measured_bw_line_t *parsed_line,
/**
* Read the measured bandwidth file and apply it to the list of
- * routerstatuses. Returns -1 on error, 0 otherwise.
+ * vote_routerstatus_t. Returns -1 on error, 0 otherwise.
*/
int
dirserv_read_measured_bandwidths(const char *from_file,
@@ -2590,8 +2489,9 @@ dirserv_read_measured_bandwidths(const char *from_file,
char line[256];
FILE *fp = tor_fopen_cloexec(from_file, "r");
int applied_lines = 0;
- time_t file_time;
+ time_t file_time, now;
int ok;
+
if (fp == NULL) {
log_warn(LD_CONFIG, "Can't open bandwidth file at configured location: %s",
from_file);
@@ -2607,7 +2507,7 @@ dirserv_read_measured_bandwidths(const char *from_file,
}
line[strlen(line)-1] = '\0';
- file_time = tor_parse_ulong(line, 10, 0, ULONG_MAX, &ok, NULL);
+ file_time = (time_t)tor_parse_ulong(line, 10, 0, ULONG_MAX, &ok, NULL);
if (!ok) {
log_warn(LD_DIRSERV, "Non-integer time in bandwidth file: %s",
escaped(line));
@@ -2615,7 +2515,8 @@ dirserv_read_measured_bandwidths(const char *from_file,
return -1;
}
- if ((time(NULL) - file_time) > MAX_MEASUREMENT_AGE) {
+ now = time(NULL);
+ if ((now - file_time) > MAX_MEASUREMENT_AGE) {
log_warn(LD_DIRSERV, "Bandwidth measurement file stale. Age: %u",
(unsigned)(time(NULL) - file_time));
fclose(fp);
@@ -2623,18 +2524,23 @@ dirserv_read_measured_bandwidths(const char *from_file,
}
if (routerstatuses)
- smartlist_sort(routerstatuses, compare_routerstatus_entries);
+ smartlist_sort(routerstatuses, compare_vote_routerstatus_entries);
while (!feof(fp)) {
measured_bw_line_t parsed_line;
if (fgets(line, sizeof(line), fp) && strlen(line)) {
if (measured_bw_line_parse(&parsed_line, line) != -1) {
+ /* Also cache the line for dirserv_get_bandwidth_for_router() */
+ dirserv_cache_measured_bw(&parsed_line, file_time);
if (measured_bw_line_apply(&parsed_line, routerstatuses) > 0)
applied_lines++;
}
}
}
+ /* Now would be a nice time to clean the cache, too */
+ dirserv_expire_measured_bw_cache(now);
+
fclose(fp);
log_info(LD_DIRSERV,
"Bandwidth measurement file successfully read. "
@@ -2672,14 +2578,6 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
tor_assert(private_key);
tor_assert(cert);
- if (resolve_my_address(LOG_WARN, options, &addr, &hostname)<0) {
- log_warn(LD_NET, "Couldn't resolve my hostname");
- return NULL;
- }
- if (!strchr(hostname, '.')) {
- tor_free(hostname);
- hostname = tor_dup_ip(addr);
- }
if (crypto_pk_get_digest(private_key, signing_key_digest)<0) {
log_err(LD_BUG, "Error computing signing key digest");
return NULL;
@@ -2688,6 +2586,14 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
log_err(LD_BUG, "Error computing identity key digest");
return NULL;
}
+ if (resolve_my_address(LOG_WARN, options, &addr, NULL, &hostname)<0) {
+ log_warn(LD_NET, "Couldn't resolve my hostname");
+ return NULL;
+ }
+ if (!hostname || !strchr(hostname, '.')) {
+ tor_free(hostname);
+ hostname = tor_dup_ip(addr);
+ }
if (options->VersioningAuthoritativeDir) {
client_versions = format_versions_list(options->RecommendedClientVersions);
@@ -2698,19 +2604,44 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
if (!contact)
contact = "(none)";
+ /*
+ * Do this so dirserv_compute_performance_thresholds() and
+ * set_routerstatus_from_routerinfo() see up-to-date bandwidth info.
+ */
+ if (options->V3BandwidthsFile) {
+ dirserv_read_measured_bandwidths(options->V3BandwidthsFile, NULL);
+ } else {
+ /*
+ * No bandwidths file; clear the measured bandwidth cache in case we had
+ * one last time around.
+ */
+ if (dirserv_get_measured_bw_cache_size() > 0) {
+ dirserv_clear_measured_bw_cache();
+ }
+ }
+
/* precompute this part, since we need it to decide what "stable"
* means. */
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, {
dirserv_set_router_is_running(ri, now);
});
- dirserv_compute_performance_thresholds(rl);
-
routers = smartlist_new();
smartlist_add_all(routers, rl->routers);
routers_sort_by_identity(routers);
omit_as_sybil = get_possible_sybil_list(routers);
+ DIGESTMAP_FOREACH(omit_as_sybil, sybil_id, void *, ignore) {
+ (void) ignore;
+ rep_hist_make_router_pessimal(sybil_id, now);
+ } DIGESTMAP_FOREACH_END;
+
+ /* Count how many have measured bandwidths so we know how to assign flags;
+ * this must come before dirserv_compute_performance_thresholds() */
+ dirserv_count_measured_bws(rl);
+
+ dirserv_compute_performance_thresholds(rl, omit_as_sybil);
+
routerstatuses = smartlist_new();
microdescriptors = smartlist_new();
@@ -2718,7 +2649,6 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
if (ri->cache_info.published_on >= cutoff) {
routerstatus_t *rs;
vote_routerstatus_t *vrs;
- microdesc_t *md;
node_t *node = node_get_mutable_by_id(ri->cache_info.identity_digest);
if (!node)
continue;
@@ -2736,18 +2666,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
rs->is_flagged_running = 0;
vrs->version = version_from_platform(ri->platform);
- md = dirvote_create_microdescriptor(ri);
- if (md) {
- char buf[128];
- vote_microdesc_hash_t *h;
- dirvote_format_microdesc_vote_line(buf, sizeof(buf), md);
- h = tor_malloc(sizeof(vote_microdesc_hash_t));
- h->microdesc_hash_line = tor_strdup(buf);
- h->next = NULL;
- vrs->microdesc = h;
- md->last_listed = now;
- smartlist_add(microdescriptors, md);
- }
+ vrs->microdesc = dirvote_format_all_microdesc_vote_lines(ri, now,
+ microdescriptors);
smartlist_add(routerstatuses, vrs);
}
@@ -2764,9 +2684,18 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
smartlist_free(routers);
digestmap_free(omit_as_sybil, NULL);
+ /* This pass through applies the measured bw lines to the routerstatuses */
if (options->V3BandwidthsFile) {
dirserv_read_measured_bandwidths(options->V3BandwidthsFile,
routerstatuses);
+ } else {
+ /*
+ * No bandwidths file; clear the measured bandwidth cache in case we had
+ * one last time around.
+ */
+ if (dirserv_get_measured_bw_cache_size() > 0) {
+ dirserv_clear_measured_bw_cache();
+ }
}
v3_out = tor_malloc_zero(sizeof(networkstatus_t));
@@ -2785,7 +2714,8 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
else
last_consensus_interval = options->TestingV3AuthInitialVotingInterval;
v3_out->valid_after =
- dirvote_get_start_of_next_interval(now, (int)last_consensus_interval);
+ dirvote_get_start_of_next_interval(now, (int)last_consensus_interval,
+ options->TestingV3AuthVotingStartOffset);
format_iso_time(tbuf, v3_out->valid_after);
log_notice(LD_DIR,"Choosing valid-after time in vote as %s: "
"consensus_set=%d, last_interval=%d",
@@ -2856,272 +2786,6 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
return v3_out;
}
-/** For v2 authoritative directories only: Replace the contents of
- * <b>the_v2_networkstatus</b> with a newly generated network status
- * object. */
-static cached_dir_t *
-generate_v2_networkstatus_opinion(void)
-{
- cached_dir_t *r = NULL;
- size_t len, identity_pkey_len;
- char *status = NULL, *client_versions = NULL, *server_versions = NULL,
- *identity_pkey = NULL, *hostname = NULL;
- char *outp, *endp;
- const or_options_t *options = get_options();
- char fingerprint[FINGERPRINT_LEN+1];
- char published[ISO_TIME_LEN+1];
- char digest[DIGEST_LEN];
- uint32_t addr;
- crypto_pk_t *private_key;
- routerlist_t *rl = router_get_routerlist();
- time_t now = time(NULL);
- time_t cutoff = now - ROUTER_MAX_AGE_TO_PUBLISH;
- int naming = options->NamingAuthoritativeDir;
- int versioning = options->VersioningAuthoritativeDir;
- int listbaddirs = options->AuthDirListBadDirs;
- int listbadexits = options->AuthDirListBadExits;
- int vote_on_hsdirs = options->VoteOnHidServDirectoriesV2;
- const char *contact;
- char *version_lines = NULL;
- smartlist_t *routers = NULL;
- digestmap_t *omit_as_sybil = NULL;
-
- private_key = get_server_identity_key();
-
- if (resolve_my_address(LOG_WARN, options, &addr, &hostname)<0) {
- log_warn(LD_NET, "Couldn't resolve my hostname");
- goto done;
- }
-
- format_iso_time(published, now);
-
- client_versions = format_versions_list(options->RecommendedClientVersions);
- server_versions = format_versions_list(options->RecommendedServerVersions);
-
- if (crypto_pk_write_public_key_to_string(private_key, &identity_pkey,
- &identity_pkey_len)<0) {
- log_warn(LD_BUG,"Writing public key to string failed.");
- goto done;
- }
-
- if (crypto_pk_get_fingerprint(private_key, fingerprint, 0)<0) {
- log_err(LD_BUG, "Error computing fingerprint");
- goto done;
- }
-
- contact = options->ContactInfo;
- if (!contact)
- contact = "(none)";
-
- if (versioning) {
- tor_asprintf(&version_lines,
- "client-versions %s\nserver-versions %s\n",
- client_versions, server_versions);
- } else {
- version_lines = tor_strdup("");
- }
-
- len = 4096+strlen(client_versions)+strlen(server_versions);
- len += identity_pkey_len*2;
- len += (RS_ENTRY_LEN)*smartlist_len(rl->routers);
-
- status = tor_malloc(len);
- tor_snprintf(status, len,
- "network-status-version 2\n"
- "dir-source %s %s %d\n"
- "fingerprint %s\n"
- "contact %s\n"
- "published %s\n"
- "dir-options%s%s%s%s\n"
- "%s" /* client version line, server version line. */
- "dir-signing-key\n%s",
- hostname, fmt_addr32(addr),
- (int)router_get_advertised_dir_port(options, 0),
- fingerprint,
- contact,
- published,
- naming ? " Names" : "",
- listbaddirs ? " BadDirectories" : "",
- listbadexits ? " BadExits" : "",
- versioning ? " Versions" : "",
- version_lines,
- identity_pkey);
- outp = status + strlen(status);
- endp = status + len;
-
- /* precompute this part, since we need it to decide what "stable"
- * means. */
- SMARTLIST_FOREACH(rl->routers, routerinfo_t *, ri, {
- dirserv_set_router_is_running(ri, now);
- });
-
- dirserv_compute_performance_thresholds(rl);
-
- routers = smartlist_new();
- smartlist_add_all(routers, rl->routers);
- routers_sort_by_identity(routers);
-
- omit_as_sybil = get_possible_sybil_list(routers);
-
- SMARTLIST_FOREACH_BEGIN(routers, routerinfo_t *, ri) {
- if (ri->cache_info.published_on >= cutoff) {
- routerstatus_t rs;
- char *version = version_from_platform(ri->platform);
- node_t *node = node_get_mutable_by_id(ri->cache_info.identity_digest);
- if (!node) {
- tor_free(version);
- continue;
- }
- set_routerstatus_from_routerinfo(&rs, node, ri, now,
- naming, listbadexits, listbaddirs,
- vote_on_hsdirs);
-
- if (digestmap_get(omit_as_sybil, ri->cache_info.identity_digest))
- clear_status_flags_on_sybil(&rs);
-
- if (routerstatus_format_entry(outp, endp-outp, &rs, version, NS_V2)) {
- log_warn(LD_BUG, "Unable to print router status.");
- tor_free(version);
- goto done;
- }
- tor_free(version);
- outp += strlen(outp);
- }
- } SMARTLIST_FOREACH_END(ri);
-
- if (tor_snprintf(outp, endp-outp, "directory-signature %s\n",
- options->Nickname)<0) {
- log_warn(LD_BUG, "Unable to write signature line.");
- goto done;
- }
- if (router_get_networkstatus_v2_hash(status, digest)<0) {
- log_warn(LD_BUG, "Unable to hash network status");
- goto done;
- }
- outp += strlen(outp);
-
- note_crypto_pk_op(SIGN_DIR);
- if (router_append_dirobj_signature(outp,endp-outp,digest,DIGEST_LEN,
- private_key)<0) {
- log_warn(LD_BUG, "Unable to sign router status.");
- goto done;
- }
-
- {
- networkstatus_v2_t *ns;
- if (!(ns = networkstatus_v2_parse_from_string(status))) {
- log_err(LD_BUG,"Generated a networkstatus we couldn't parse.");
- goto done;
- }
- networkstatus_v2_free(ns);
- }
-
- {
- cached_dir_t **ns_ptr = &the_v2_networkstatus;
- if (*ns_ptr)
- cached_dir_decref(*ns_ptr);
- *ns_ptr = new_cached_dir(status, now);
- status = NULL; /* So it doesn't get double-freed. */
- the_v2_networkstatus_is_dirty = 0;
- router_set_networkstatus_v2((*ns_ptr)->dir, now, NS_GENERATED, NULL);
- r = *ns_ptr;
- }
-
- done:
- tor_free(client_versions);
- tor_free(server_versions);
- tor_free(version_lines);
- tor_free(status);
- tor_free(hostname);
- tor_free(identity_pkey);
- smartlist_free(routers);
- digestmap_free(omit_as_sybil, NULL);
- return r;
-}
-
-/** Given the portion of a networkstatus request URL after "tor/status/" in
- * <b>key</b>, append to <b>result</b> the digests of the identity keys of the
- * networkstatus objects that the client has requested. */
-void
-dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result,
- const char *key)
-{
- tor_assert(result);
-
- if (!cached_v2_networkstatus)
- cached_v2_networkstatus = digestmap_new();
-
- if (should_generate_v2_networkstatus())
- generate_v2_networkstatus_opinion();
-
- if (!strcmp(key,"authority")) {
- if (authdir_mode_v2(get_options())) {
- const routerinfo_t *me = router_get_my_routerinfo();
- if (me)
- smartlist_add(result,
- tor_memdup(me->cache_info.identity_digest, DIGEST_LEN));
- }
- } else if (!strcmp(key, "all")) {
- if (digestmap_size(cached_v2_networkstatus)) {
- digestmap_iter_t *iter;
- iter = digestmap_iter_init(cached_v2_networkstatus);
- while (!digestmap_iter_done(iter)) {
- const char *ident;
- void *val;
- digestmap_iter_get(iter, &ident, &val);
- smartlist_add(result, tor_memdup(ident, DIGEST_LEN));
- iter = digestmap_iter_next(cached_v2_networkstatus, iter);
- }
- } else {
- SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
- if (ds->type & V2_DIRINFO)
- smartlist_add(result, tor_memdup(ds->digest, DIGEST_LEN)));
- }
- smartlist_sort_digests(result);
- if (smartlist_len(result) == 0)
- log_info(LD_DIRSERV,
- "Client requested 'all' network status objects; we have none.");
- } else if (!strcmpstart(key, "fp/")) {
- dir_split_resource_into_fingerprints(key+3, result, NULL,
- DSR_HEX|DSR_SORT_UNIQ);
- }
-}
-
-/** Look for a network status object as specified by <b>key</b>, which should
- * be either "authority" (to find a network status generated by us), a hex
- * identity digest (to find a network status generated by given directory), or
- * "all" (to return all the v2 network status objects we have).
- */
-void
-dirserv_get_networkstatus_v2(smartlist_t *result,
- const char *key)
-{
- cached_dir_t *cached;
- smartlist_t *fingerprints = smartlist_new();
- tor_assert(result);
-
- if (!cached_v2_networkstatus)
- cached_v2_networkstatus = digestmap_new();
-
- dirserv_get_networkstatus_v2_fingerprints(fingerprints, key);
- SMARTLIST_FOREACH_BEGIN(fingerprints, const char *, fp) {
- if (router_digest_is_me(fp) && should_generate_v2_networkstatus())
- generate_v2_networkstatus_opinion();
- cached = digestmap_get(cached_v2_networkstatus, fp);
- if (cached) {
- smartlist_add(result, cached);
- } else {
- char hexbuf[HEX_DIGEST_LEN+1];
- base16_encode(hexbuf, sizeof(hexbuf), fp, DIGEST_LEN);
- log_info(LD_DIRSERV, "Don't know about any network status with "
- "fingerprint '%s'", hexbuf);
- }
- } SMARTLIST_FOREACH_END(fp);
- SMARTLIST_FOREACH(fingerprints, char *, cp, tor_free(cp));
- smartlist_free(fingerprints);
-}
-
/** As dirserv_get_routerdescs(), but instead of getting signed_descriptor_t
* pointers, adds copies of digests to fps_out, and doesn't use the
* /tor/server/ prefix. For a /d/ request, adds descriptor digests; for other
@@ -3273,36 +2937,42 @@ dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
* Inform the reachability checker that we could get to this guy.
*/
void
-dirserv_orconn_tls_done(const char *address,
+dirserv_orconn_tls_done(const tor_addr_t *addr,
uint16_t or_port,
const char *digest_rcvd)
{
- routerinfo_t *ri;
+ node_t *node = NULL;
+ tor_addr_port_t orport;
+ routerinfo_t *ri = NULL;
time_t now = time(NULL);
- tor_assert(address);
+ tor_assert(addr);
tor_assert(digest_rcvd);
- ri = router_get_mutable_by_digest(digest_rcvd);
-
- if (ri == NULL)
+ node = node_get_mutable_by_id(digest_rcvd);
+ if (node == NULL || node->ri == NULL)
return;
+ ri = node->ri;
- if (!strcasecmp(address, ri->address) && or_port == ri->or_port) {
+ tor_addr_copy(&orport.addr, addr);
+ orport.port = or_port;
+ if (router_has_orport(ri, &orport)) {
/* Found the right router. */
if (!authdir_mode_bridge(get_options()) ||
ri->purpose == ROUTER_PURPOSE_BRIDGE) {
+ char addrstr[TOR_ADDR_BUF_LEN];
/* This is a bridge or we're not a bridge authorititative --
mark it as reachable. */
- tor_addr_t addr, *addrp=NULL;
log_info(LD_DIRSERV, "Found router %s to be reachable at %s:%d. Yay.",
router_describe(ri),
- address, ri->or_port);
- if (tor_addr_parse(&addr, ri->address) != -1)
- addrp = &addr;
- else
- log_warn(LD_BUG, "Couldn't parse IP address \"%s\"", ri->address);
- rep_hist_note_router_reachable(digest_rcvd, addrp, or_port, now);
- ri->last_reachable = now;
+ tor_addr_to_str(addrstr, addr, sizeof(addrstr), 1),
+ ri->or_port);
+ if (tor_addr_family(addr) == AF_INET) {
+ rep_hist_note_router_reachable(digest_rcvd, addr, or_port, now);
+ node->last_reachable = now;
+ } else if (tor_addr_family(addr) == AF_INET6) {
+ /* No rephist for IPv6. */
+ node->last_reachable6 = now;
+ }
}
}
}
@@ -3325,7 +2995,7 @@ dirserv_should_launch_reachability_test(const routerinfo_t *ri,
/* It just came out of hibernation; launch a reachability test */
return 1;
}
- if (! routers_have_same_or_addr(ri, ri_old)) {
+ if (! routers_have_same_or_addrs(ri, ri_old)) {
/* Address or port changed; launch a reachability test */
return 1;
}
@@ -3338,15 +3008,35 @@ dirserv_should_launch_reachability_test(const routerinfo_t *ri,
void
dirserv_single_reachability_test(time_t now, routerinfo_t *router)
{
+ channel_t *chan = NULL;
+ node_t *node = NULL;
tor_addr_t router_addr;
+ (void) now;
+
+ tor_assert(router);
+ node = node_get_mutable_by_id(router->cache_info.identity_digest);
+ tor_assert(node);
+
+ /* IPv4. */
log_debug(LD_OR,"Testing reachability of %s at %s:%u.",
- router->nickname, router->address, router->or_port);
- /* Remember when we started trying to determine reachability */
- if (!router->testing_since)
- router->testing_since = now;
+ router->nickname, fmt_addr32(router->addr), router->or_port);
tor_addr_from_ipv4h(&router_addr, router->addr);
- connection_or_connect(&router_addr, router->or_port,
- router->cache_info.identity_digest);
+ chan = channel_tls_connect(&router_addr, router->or_port,
+ router->cache_info.identity_digest);
+ if (chan) command_setup_channel(chan);
+
+ /* Possible IPv6. */
+ if (get_options()->AuthDirHasIPv6Connectivity == 1 &&
+ !tor_addr_is_null(&router->ipv6_addr)) {
+ char addrstr[TOR_ADDR_BUF_LEN];
+ log_debug(LD_OR, "Testing reachability of %s at %s:%u.",
+ router->nickname,
+ tor_addr_to_str(addrstr, &router->ipv6_addr, sizeof(addrstr), 1),
+ router->ipv6_orport);
+ chan = channel_tls_connect(&router->ipv6_addr, router->ipv6_orport,
+ router->cache_info.identity_digest);
+ if (chan) command_setup_channel(chan);
+ }
}
/** Auth dir server only: load balance such that we only
@@ -3395,15 +3085,12 @@ static cached_dir_t *
lookup_cached_dir_by_fp(const char *fp)
{
cached_dir_t *d = NULL;
- if (tor_digest_is_zero(fp) && cached_consensuses)
+ if (tor_digest_is_zero(fp) && cached_consensuses) {
d = strmap_get(cached_consensuses, "ns");
- else if (memchr(fp, '\0', DIGEST_LEN) && cached_consensuses &&
+ } else if (memchr(fp, '\0', DIGEST_LEN) && cached_consensuses &&
(d = strmap_get(cached_consensuses, fp))) {
/* this here interface is a nasty hack XXXX024 */;
- } else if (router_digest_is_me(fp) && the_v2_networkstatus)
- d = the_v2_networkstatus;
- else if (cached_v2_networkstatus)
- d = digestmap_get(cached_v2_networkstatus, fp);
+ }
return d;
}
@@ -3609,8 +3296,6 @@ connection_dirserv_add_servers_to_outbuf(dir_connection_t *conn)
}
body = signed_descriptor_get_body(sd);
if (conn->zlib_state) {
- /* XXXX024 This 'last' business should actually happen on the last
- * routerinfo, not on the last fingerprint. */
int last = ! smartlist_len(conn->fingerprint_stack);
connection_write_to_buf_zlib(body, sd->signed_descriptor_len, conn,
last);
@@ -3627,6 +3312,11 @@ connection_dirserv_add_servers_to_outbuf(dir_connection_t *conn)
if (!smartlist_len(conn->fingerprint_stack)) {
/* We just wrote the last one; finish up. */
+ if (conn->zlib_state) {
+ connection_write_to_buf_zlib("", 0, conn, 1);
+ tor_zlib_free(conn->zlib_state);
+ conn->zlib_state = NULL;
+ }
conn->dir_spool_src = DIR_SPOOL_NONE;
smartlist_free(conn->fingerprint_stack);
conn->fingerprint_stack = NULL;
@@ -3649,11 +3339,9 @@ connection_dirserv_add_microdescs_to_outbuf(dir_connection_t *conn)
char *fp256 = smartlist_pop_last(conn->fingerprint_stack);
microdesc_t *md = microdesc_cache_lookup_by_digest256(cache, fp256);
tor_free(fp256);
- if (!md)
+ if (!md || !md->body)
continue;
if (conn->zlib_state) {
- /* XXXX024 This 'last' business should actually happen on the last
- * routerinfo, not on the last fingerprint. */
int last = !smartlist_len(conn->fingerprint_stack);
connection_write_to_buf_zlib(md->body, md->bodylen, conn, last);
if (last) {
@@ -3665,6 +3353,11 @@ connection_dirserv_add_microdescs_to_outbuf(dir_connection_t *conn)
}
}
if (!smartlist_len(conn->fingerprint_stack)) {
+ if (conn->zlib_state) {
+ connection_write_to_buf_zlib("", 0, conn, 1);
+ tor_zlib_free(conn->zlib_state);
+ conn->zlib_state = NULL;
+ }
conn->dir_spool_src = DIR_SPOOL_NONE;
smartlist_free(conn->fingerprint_stack);
conn->fingerprint_stack = NULL;
@@ -3767,7 +3460,7 @@ connection_dirserv_add_networkstatus_bytes_to_outbuf(dir_connection_t *conn)
int
connection_dirserv_flushed_some(dir_connection_t *conn)
{
- tor_assert(conn->_base.state == DIR_CONN_STATE_SERVER_WRITING);
+ tor_assert(conn->base_.state == DIR_CONN_STATE_SERVER_WRITING);
if (connection_get_outbuf_len(TO_CONN(conn)) >= DIRSERV_BUFFER_MIN)
return 0;
@@ -3796,15 +3489,9 @@ dirserv_free_all(void)
{
dirserv_free_fingerprint_list();
- cached_dir_decref(the_directory);
- clear_cached_dir(&the_runningrouters);
- cached_dir_decref(the_v2_networkstatus);
- cached_dir_decref(cached_directory);
- clear_cached_dir(&cached_runningrouters);
-
- digestmap_free(cached_v2_networkstatus, _free_cached_dir);
- cached_v2_networkstatus = NULL;
- strmap_free(cached_consensuses, _free_cached_dir);
+ strmap_free(cached_consensuses, free_cached_dir_);
cached_consensuses = NULL;
+
+ dirserv_clear_measured_bw_cache();
}
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index 22269b200..858e6e3a0 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,10 @@
* \brief Header file for dirserv.c.
**/
-#ifndef _TOR_DIRSERV_H
-#define _TOR_DIRSERV_H
+#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
@@ -29,28 +31,6 @@
/** Maximum allowable length of a version line in a networkstatus. */
#define MAX_V_LINE_LEN 128
-/** Length of "r Authority BadDirectory BadExit Exit Fast Guard HSDir Named
- * Running Stable Unnamed V2Dir Valid\n". */
-#define MAX_FLAG_LINE_LEN 96
-/** Length of "w" line for weighting. Currently at most
- * "w Bandwidth=<uint32t> Measured=<uint32t>\n" */
-#define MAX_WEIGHT_LINE_LEN (12+10+10+10+1)
-/** Maximum length of an exit policy summary line. */
-#define MAX_POLICY_LINE_LEN (3+MAX_EXITPOLICY_SUMMARY_LEN)
-/** Amount of space to allocate for each entry: r, s, and v lines. */
-#define RS_ENTRY_LEN \
- ( /* first line */ \
- MAX_NICKNAME_LEN+BASE64_DIGEST_LEN*2+ISO_TIME_LEN+INET_NTOA_BUF_LEN+ \
- 5*2 /* ports */ + 10 /* punctuation */ + \
- /* second line */ \
- MAX_FLAG_LINE_LEN + \
- /* weight line */ \
- MAX_WEIGHT_LINE_LEN + \
- /* p line. */ \
- MAX_POLICY_LINE_LEN + \
- /* v line. */ \
- MAX_V_LINE_LEN \
- )
int connection_dirserv_flushed_some(dir_connection_t *conn);
@@ -70,44 +50,31 @@ int list_server_status_v1(smartlist_t *routers, char **router_status_out,
int for_controller);
int dirserv_dump_directory_to_string(char **dir_out,
crypto_pk_t *private_key);
+char *dirserv_get_flag_thresholds_line(void);
+void dirserv_compute_bridge_flag_thresholds(routerlist_t *rl);
int directory_fetches_from_authorities(const or_options_t *options);
int directory_fetches_dir_info_early(const or_options_t *options);
int directory_fetches_dir_info_later(const or_options_t *options);
-int directory_caches_v2_dir_info(const or_options_t *options);
-#define directory_caches_v1_dir_info(o) directory_caches_v2_dir_info(o)
int directory_caches_unknown_auth_certs(const or_options_t *options);
int directory_caches_dir_info(const or_options_t *options);
int directory_permits_begindir_requests(const or_options_t *options);
-int directory_permits_controller_requests(const or_options_t *options);
int directory_too_idle_to_fetch_descriptors(const or_options_t *options,
time_t now);
-void directory_set_dirty(void);
-cached_dir_t *dirserv_get_directory(void);
-cached_dir_t *dirserv_get_runningrouters(void);
cached_dir_t *dirserv_get_consensus(const char *flavor_name);
-void dirserv_set_cached_directory(const char *directory, time_t when,
- int is_running_routers);
-void dirserv_set_cached_networkstatus_v2(const char *directory,
- const char *identity,
- time_t published);
void dirserv_set_cached_consensus_networkstatus(const char *consensus,
const char *flavor_name,
const digests_t *digests,
time_t published);
void dirserv_clear_old_networkstatuses(time_t cutoff);
-void dirserv_clear_old_v1_info(time_t now);
-void dirserv_get_networkstatus_v2(smartlist_t *result, const char *key);
-void dirserv_get_networkstatus_v2_fingerprints(smartlist_t *result,
- const char *key);
int dirserv_get_routerdesc_fingerprints(smartlist_t *fps_out, const char *key,
const char **msg,
int for_unencrypted_conn,
int is_extrainfo);
int dirserv_get_routerdescs(smartlist_t *descs_out, const char *key,
const char **msg);
-void dirserv_orconn_tls_done(const char *address,
+void dirserv_orconn_tls_done(const tor_addr_t *addr,
uint16_t or_port,
const char *digest_rcvd);
int dirserv_should_launch_reachability_test(const routerinfo_t *ri,
@@ -130,18 +97,33 @@ size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs,
int compressed);
size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed);
-int routerstatus_format_entry(char *buf, size_t buf_len,
+char *routerstatus_format_entry(
const routerstatus_t *rs, const char *platform,
- routerstatus_format_type_t format);
+ routerstatus_format_type_t format,
+ const vote_routerstatus_t *vrs);
void dirserv_free_all(void);
void cached_dir_decref(cached_dir_t *d);
cached_dir_t *new_cached_dir(char *s, time_t published);
#ifdef DIRSERV_PRIVATE
-int measured_bw_line_parse(measured_bw_line_t *out, const char *line);
-int measured_bw_line_apply(measured_bw_line_t *parsed_line,
+/* Put the MAX_MEASUREMENT_AGE #define here so unit tests can see it */
+#define MAX_MEASUREMENT_AGE (3*24*60*60) /* 3 days */
+
+STATIC int measured_bw_line_parse(measured_bw_line_t *out, const char *line);
+
+STATIC int measured_bw_line_apply(measured_bw_line_t *parsed_line,
smartlist_t *routerstatuses);
+
+STATIC void dirserv_cache_measured_bw(const measured_bw_line_t *parsed_line,
+ time_t as_of);
+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);
#endif
int dirserv_read_measured_bandwidths(const char *from_file,
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 144859ae0..c7be343ca 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define DIRVOTE_PRIVATE
@@ -53,54 +53,25 @@ static int dirvote_compute_consensuses(void);
static int dirvote_publish_consensus(void);
static char *make_consensus_method_list(int low, int high, const char *sep);
-/** The highest consensus method that we currently support. */
-#define MAX_SUPPORTED_CONSENSUS_METHOD 13
-
-/** Lowest consensus method that contains a 'directory-footer' marker */
-#define MIN_METHOD_FOR_FOOTER 9
-
-/** Lowest consensus method that contains bandwidth weights */
-#define MIN_METHOD_FOR_BW_WEIGHTS 9
-
-/** Lowest consensus method that contains consensus params */
-#define MIN_METHOD_FOR_PARAMS 7
-
-/** Lowest consensus method that generates microdescriptors */
-#define MIN_METHOD_FOR_MICRODESC 8
-
-/** Lowest consensus method that ensures a majority of authorities voted
- * for a param. */
-#define MIN_METHOD_FOR_MAJORITY_PARAMS 12
-
-/** Lowest consensus method where microdesc consensuses omit any entry
- * with no microdesc. */
-#define MIN_METHOD_FOR_MANDATORY_MICRODESC 13
-
/* =====
* Voting
* =====*/
-/* Overestimated. */
-#define MICRODESC_LINE_LEN 80
-
/** 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)
{
- size_t len;
- char *status = NULL;
+ smartlist_t *chunks;
const char *client_versions = NULL, *server_versions = NULL;
- char *outp, *endp;
char fingerprint[FINGERPRINT_LEN+1];
char digest[DIGEST_LEN];
uint32_t addr;
- routerlist_t *rl = router_get_routerlist();
- char *version_lines = NULL;
- int r;
+ char *client_versions_line = NULL, *server_versions_line = NULL;
networkstatus_voter_info_t *voter;
+ char *status = NULL;
tor_assert(private_signing_key);
tor_assert(v3_ns->type == NS_TYPE_VOTE || v3_ns->type == NS_TYPE_OPINION);
@@ -114,49 +85,28 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
client_versions = v3_ns->client_versions;
server_versions = v3_ns->server_versions;
- if (client_versions || server_versions) {
- size_t v_len = 64;
- char *cp;
- if (client_versions)
- v_len += strlen(client_versions);
- if (server_versions)
- v_len += strlen(server_versions);
- version_lines = tor_malloc(v_len);
- cp = version_lines;
- if (client_versions) {
- r = tor_snprintf(cp, v_len-(cp-version_lines),
- "client-versions %s\n", client_versions);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for client-versions line");
- tor_assert(0);
- }
- cp += strlen(cp);
- }
- if (server_versions) {
- r = tor_snprintf(cp, v_len-(cp-version_lines),
- "server-versions %s\n", server_versions);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for server-versions line");
- tor_assert(0);
- }
- }
+ if (client_versions) {
+ tor_asprintf(&client_versions_line, "client-versions %s\n",
+ client_versions);
} else {
- version_lines = tor_strdup("");
+ client_versions_line = tor_strdup("");
+ }
+ if (server_versions) {
+ tor_asprintf(&server_versions_line, "server-versions %s\n",
+ server_versions);
+ } else {
+ server_versions_line = tor_strdup("");
}
- len = 8192;
- len += strlen(version_lines);
- len += (RS_ENTRY_LEN+MICRODESC_LINE_LEN)*smartlist_len(rl->routers);
- len += strlen("\ndirectory-footer\n");
- len += v3_ns->cert->cache_info.signed_descriptor_len;
-
- status = tor_malloc(len);
+ chunks = smartlist_new();
{
char published[ISO_TIME_LEN+1];
char va[ISO_TIME_LEN+1];
char fu[ISO_TIME_LEN+1];
char vu[ISO_TIME_LEN+1];
char *flags = smartlist_join_strings(v3_ns->known_flags, " ", 0, NULL);
+ /* XXXX Abstraction violation: should be pulling a field out of v3_ns.*/
+ char *flag_thresholds = dirserv_get_flag_thresholds_line();
char *params;
authority_cert_t *cert = v3_ns->cert;
char *methods =
@@ -172,7 +122,7 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
params = tor_strdup("");
tor_assert(cert);
- r = tor_snprintf(status, len,
+ smartlist_add_asprintf(chunks,
"network-status-version 3\n"
"vote-status %s\n"
"consensus-methods %s\n"
@@ -181,8 +131,9 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
"fresh-until %s\n"
"valid-until %s\n"
"voting-delay %d %d\n"
- "%s" /* versions */
+ "%s%s" /* versions */
"known-flags %s\n"
+ "flag-thresholds %s\n"
"params %s\n"
"dir-source %s %s %s %s %d %d\n"
"contact %s\n",
@@ -190,99 +141,76 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
methods,
published, va, fu, vu,
v3_ns->vote_seconds, v3_ns->dist_seconds,
- version_lines,
+ client_versions_line,
+ server_versions_line,
flags,
+ flag_thresholds,
params,
voter->nickname, fingerprint, voter->address,
fmt_addr32(addr), voter->dir_port, voter->or_port,
voter->contact);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for network status line");
- tor_assert(0);
- }
-
tor_free(params);
tor_free(flags);
+ tor_free(flag_thresholds);
tor_free(methods);
- outp = status + strlen(status);
- endp = status + len;
if (!tor_digest_is_zero(voter->legacy_id_digest)) {
char fpbuf[HEX_DIGEST_LEN+1];
base16_encode(fpbuf, sizeof(fpbuf), voter->legacy_id_digest, DIGEST_LEN);
- r = tor_snprintf(outp, endp-outp, "legacy-dir-key %s\n", fpbuf);
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for legacy-dir-key line");
- tor_assert(0);
- }
- outp += strlen(outp);
+ smartlist_add_asprintf(chunks, "legacy-dir-key %s\n", fpbuf);
}
- tor_assert(outp + cert->cache_info.signed_descriptor_len < endp);
- memcpy(outp, cert->cache_info.signed_descriptor_body,
- cert->cache_info.signed_descriptor_len);
-
- outp += cert->cache_info.signed_descriptor_len;
+ smartlist_add(chunks, tor_strndup(cert->cache_info.signed_descriptor_body,
+ cert->cache_info.signed_descriptor_len));
}
SMARTLIST_FOREACH_BEGIN(v3_ns->routerstatus_list, vote_routerstatus_t *,
vrs) {
+ char *rsf;
vote_microdesc_hash_t *h;
- if (routerstatus_format_entry(outp, endp-outp, &vrs->status,
- vrs->version, NS_V3_VOTE) < 0) {
- log_warn(LD_BUG, "Unable to print router status.");
- goto err;
- }
- outp += strlen(outp);
+ rsf = routerstatus_format_entry(&vrs->status,
+ vrs->version, NS_V3_VOTE, vrs);
+ if (rsf)
+ smartlist_add(chunks, rsf);
for (h = vrs->microdesc; h; h = h->next) {
- size_t mlen = strlen(h->microdesc_hash_line);
- if (outp+mlen >= endp) {
- log_warn(LD_BUG, "Can't fit microdesc line in vote.");
- }
- memcpy(outp, h->microdesc_hash_line, mlen+1);
- outp += strlen(outp);
+ smartlist_add(chunks, tor_strdup(h->microdesc_hash_line));
}
} SMARTLIST_FOREACH_END(vrs);
- r = tor_snprintf(outp, endp-outp, "directory-footer\n");
- if (r < 0) {
- log_err(LD_BUG, "Insufficient memory for directory-footer line");
- tor_assert(0);
- }
- outp += strlen(outp);
+ smartlist_add(chunks, tor_strdup("directory-footer\n"));
+
+ /* The digest includes everything up through the space after
+ * directory-signature. (Yuck.) */
+ crypto_digest_smartlist(digest, DIGEST_LEN, chunks,
+ "directory-signature ", DIGEST_SHA1);
{
char signing_key_fingerprint[FINGERPRINT_LEN+1];
- if (tor_snprintf(outp, endp-outp, "directory-signature ")<0) {
- log_warn(LD_BUG, "Unable to start signature line.");
- goto err;
- }
- outp += strlen(outp);
-
if (crypto_pk_get_fingerprint(private_signing_key,
signing_key_fingerprint, 0)<0) {
log_warn(LD_BUG, "Unable to get fingerprint for signing key");
goto err;
}
- if (tor_snprintf(outp, endp-outp, "%s %s\n", fingerprint,
- signing_key_fingerprint)<0) {
- log_warn(LD_BUG, "Unable to end signature line.");
- goto err;
- }
- outp += strlen(outp);
+
+ smartlist_add_asprintf(chunks, "directory-signature %s %s\n", fingerprint,
+ signing_key_fingerprint);
}
- if (router_get_networkstatus_v3_hash(status, digest, DIGEST_SHA1)<0)
- goto err;
note_crypto_pk_op(SIGN_DIR);
- if (router_append_dirobj_signature(outp,endp-outp,digest, DIGEST_LEN,
- private_signing_key)<0) {
- log_warn(LD_BUG, "Unable to sign networkstatus vote.");
- goto err;
+ {
+ char *sig = router_get_dirobj_signature(digest, DIGEST_LEN,
+ private_signing_key);
+ if (!sig) {
+ log_warn(LD_BUG, "Unable to sign networkstatus vote.");
+ goto err;
+ }
+ smartlist_add(chunks, sig);
}
+ status = smartlist_join_strings(chunks, "", 0, NULL);
+
{
networkstatus_t *v;
if (!(v = networkstatus_parse_vote_from_string(status, NULL,
@@ -300,7 +228,12 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
err:
tor_free(status);
done:
- tor_free(version_lines);
+ tor_free(client_versions_line);
+ tor_free(server_versions_line);
+ if (chunks) {
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ }
return status;
}
@@ -346,7 +279,7 @@ typedef struct dir_src_ent_t {
/** Helper for sorting networkstatus_t votes (not consensuses) by the
* hash of their voters' identity digests. */
static int
-_compare_votes_by_authority_id(const void **_a, const void **_b)
+compare_votes_by_authority_id_(const void **_a, const void **_b)
{
const networkstatus_t *a = *_a, *b = *_b;
return fast_memcmp(get_voter(a)->identity_digest,
@@ -357,7 +290,7 @@ _compare_votes_by_authority_id(const void **_a, const void **_b)
* their identity digests, and return -1, 0, or 1 depending on their
* ordering */
static int
-_compare_dir_src_ents_by_authority_id(const void **_a, const void **_b)
+compare_dir_src_ents_by_authority_id_(const void **_a, const void **_b)
{
const dir_src_ent_t *a = *_a, *b = *_b;
const networkstatus_voter_info_t *a_v = get_voter(a->v),
@@ -424,12 +357,27 @@ compare_vote_rs(const vote_routerstatus_t *a, const vote_routerstatus_t *b)
/** Helper for sorting routerlists based on compare_vote_rs. */
static int
-_compare_vote_rs(const void **_a, const void **_b)
+compare_vote_rs_(const void **_a, const void **_b)
{
const vote_routerstatus_t *a = *_a, *b = *_b;
return compare_vote_rs(a,b);
}
+/** Helper for sorting OR ports. */
+static int
+compare_orports_(const void **_a, const void **_b)
+{
+ const tor_addr_port_t *a = *_a, *b = *_b;
+ int r;
+
+ if ((r = tor_addr_compare(&a->addr, &b->addr, CMP_EXACT)))
+ return r;
+ if ((r = (((int) b->port) - ((int) a->port))))
+ return r;
+
+ return 0;
+}
+
/** Given a list of vote_routerstatus_t, all for the same router identity,
* return whichever is most frequent, breaking ties in favor of more
* recently published vote_routerstatus_t and in case of ties there,
@@ -437,17 +385,18 @@ _compare_vote_rs(const void **_a, const void **_b)
*/
static vote_routerstatus_t *
compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
- char *microdesc_digest256_out)
+ char *microdesc_digest256_out,
+ tor_addr_port_t *best_alt_orport_out)
{
vote_routerstatus_t *most = NULL, *cur = NULL;
int most_n = 0, cur_n = 0;
time_t most_published = 0;
- /* _compare_vote_rs() sorts the items by identity digest (all the same),
+ /* compare_vote_rs_() sorts the items by identity digest (all the same),
* then by SD digest. That way, if we have a tie that the published_on
* date cannot tie, we use the descriptor with the smaller digest.
*/
- smartlist_sort(votes, _compare_vote_rs);
+ smartlist_sort(votes, compare_vote_rs_);
SMARTLIST_FOREACH_BEGIN(votes, vote_routerstatus_t *, rs) {
if (cur && !compare_vote_rs(cur, rs)) {
++cur_n;
@@ -473,6 +422,38 @@ compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
tor_assert(most);
+ /* If we're producing "a" lines, vote on potential alternative (sets
+ * of) OR port(s) in the winning routerstatuses.
+ *
+ * XXX prop186 There's at most one alternative OR port (_the_ IPv6
+ * port) for now. */
+ if (consensus_method >= MIN_METHOD_FOR_A_LINES && best_alt_orport_out) {
+ smartlist_t *alt_orports = smartlist_new();
+ const tor_addr_port_t *most_alt_orport = NULL;
+
+ SMARTLIST_FOREACH_BEGIN(votes, vote_routerstatus_t *, rs) {
+ if (compare_vote_rs(most, rs) == 0 &&
+ !tor_addr_is_null(&rs->status.ipv6_addr)
+ && rs->status.ipv6_orport) {
+ smartlist_add(alt_orports, tor_addr_port_new(&rs->status.ipv6_addr,
+ rs->status.ipv6_orport));
+ }
+ } SMARTLIST_FOREACH_END(rs);
+
+ smartlist_sort(alt_orports, compare_orports_);
+ most_alt_orport = smartlist_get_most_frequent(alt_orports,
+ compare_orports_);
+ if (most_alt_orport) {
+ memcpy(best_alt_orport_out, most_alt_orport, sizeof(tor_addr_port_t));
+ log_debug(LD_DIR, "\"a\" line winner for %s is %s",
+ most->status.nickname,
+ fmt_addrport(&most_alt_orport->addr, most_alt_orport->port));
+ }
+
+ SMARTLIST_FOREACH(alt_orports, tor_addr_port_t *, ap, tor_free(ap));
+ smartlist_free(alt_orports);
+ }
+
if (consensus_method >= MIN_METHOD_FOR_MICRODESC &&
microdesc_digest256_out) {
smartlist_t *digests = smartlist_new();
@@ -496,29 +477,11 @@ compute_routerstatus_consensus(smartlist_t *votes, int consensus_method,
return most;
}
-/** Given a list of strings in <b>lst</b>, set the <b>len_out</b>-byte digest
- * at <b>digest_out</b> to the hash of the concatenation of those strings,
- * computed with the algorithm <b>alg</b>. */
-static void
-hash_list_members(char *digest_out, size_t len_out,
- smartlist_t *lst, digest_algorithm_t alg)
-{
- crypto_digest_t *d;
- if (alg == DIGEST_SHA1)
- d = crypto_digest_new();
- else
- d = crypto_digest256_new(alg);
- SMARTLIST_FOREACH(lst, const char *, cp,
- crypto_digest_add_bytes(d, cp, strlen(cp)));
- crypto_digest_get_digest(d, digest_out, len_out);
- crypto_digest_free(d);
-}
-
/** Sorting helper: compare two strings based on their values as base-ten
* positive integers. (Non-integers are treated as prior to all integers, and
* compared lexically.) */
static int
-_cmp_int_strings(const void **_a, const void **_b)
+cmp_int_strings_(const void **_a, const void **_b)
{
const char *a = *_a, *b = *_b;
int ai = (int)tor_parse_long(a, 10, 1, INT_MAX, NULL, NULL);
@@ -549,13 +512,13 @@ compute_consensus_method(smartlist_t *votes)
{
tor_assert(vote->supported_methods);
smartlist_add_all(tmp, vote->supported_methods);
- smartlist_sort(tmp, _cmp_int_strings);
- smartlist_uniq(tmp, _cmp_int_strings, NULL);
+ smartlist_sort(tmp, cmp_int_strings_);
+ smartlist_uniq(tmp, cmp_int_strings_, NULL);
smartlist_add_all(all_methods, tmp);
smartlist_clear(tmp);
});
- smartlist_sort(all_methods, _cmp_int_strings);
+ smartlist_sort(all_methods, cmp_int_strings_);
get_frequent_members(acceptable_methods, all_methods, min);
n_ok = smartlist_len(acceptable_methods);
if (n_ok) {
@@ -624,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;
@@ -1358,6 +1321,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
char *client_versions = NULL, *server_versions = NULL;
smartlist_t *flags;
const char *flavor_name;
+ uint32_t max_unmeasured_bw_kb = DEFAULT_MAX_UNMEASURED_BW_KB;
int64_t G=0, M=0, E=0, D=0, T=0; /* For bandwidth weights */
const routerstatus_format_type_t rs_format =
flavor == FLAV_NS ? NS_V3_CONSENSUS : NS_V3_CONSENSUS_MICRODESC;
@@ -1504,7 +1468,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
/* Sort the votes. */
- smartlist_sort(votes, _compare_votes_by_authority_id);
+ smartlist_sort(votes, compare_votes_by_authority_id_);
/* Add the authority sections. */
{
smartlist_t *dir_sources = smartlist_new();
@@ -1523,7 +1487,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_add(dir_sources, e_legacy);
}
} SMARTLIST_FOREACH_END(v);
- smartlist_sort(dir_sources, _compare_dir_src_ents_by_authority_id);
+ smartlist_sort(dir_sources, compare_dir_src_ents_by_authority_id_);
SMARTLIST_FOREACH_BEGIN(dir_sources, const dir_src_ent_t *, e) {
char fingerprint[HEX_DIGEST_LEN+1];
@@ -1556,6 +1520,30 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_free(dir_sources);
}
+ if (consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW) {
+ char *max_unmeasured_param = NULL;
+ /* XXXX Extract this code into a common function */
+ if (params) {
+ if (strcmpstart(params, "maxunmeasuredbw=") == 0)
+ max_unmeasured_param = params;
+ else
+ max_unmeasured_param = strstr(params, " maxunmeasuredbw=");
+ }
+ if (max_unmeasured_param) {
+ int ok = 0;
+ char *eq = strchr(max_unmeasured_param, '=');
+ if (eq) {
+ max_unmeasured_bw_kb = (uint32_t)
+ tor_parse_ulong(eq+1, 10, 1, UINT32_MAX, &ok, NULL);
+ if (!ok) {
+ log_warn(LD_DIR, "Bad element '%s' in max unmeasured bw param",
+ escaped(max_unmeasured_param));
+ max_unmeasured_bw_kb = DEFAULT_MAX_UNMEASURED_BW_KB;
+ }
+ }
+ }
+ }
+
/* Add the actual router entries. */
{
int *index; /* index[j] is the current index into votes[j]. */
@@ -1567,9 +1555,10 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_t *chosen_flags = smartlist_new();
smartlist_t *versions = smartlist_new();
smartlist_t *exitsummaries = smartlist_new();
- uint32_t *bandwidths = tor_malloc(sizeof(uint32_t) * smartlist_len(votes));
- uint32_t *measured_bws = tor_malloc(sizeof(uint32_t) *
- smartlist_len(votes));
+ uint32_t *bandwidths_kb = tor_malloc(sizeof(uint32_t) *
+ smartlist_len(votes));
+ uint32_t *measured_bws_kb = tor_malloc(sizeof(uint32_t) *
+ smartlist_len(votes));
int num_bandwidths;
int num_mbws;
@@ -1582,6 +1571,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
int *named_flag; /* Index of the flag "Named" for votes[j] */
int *unnamed_flag; /* Index of the flag "Unnamed" for votes[j] */
int chosen_named_idx;
+ int n_authorities_measuring_bandwidth;
strmap_t *name_to_id_map = strmap_new();
char conflict[DIGEST_LEN];
@@ -1600,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);
@@ -1670,6 +1669,14 @@ networkstatus_compute_consensus(smartlist_t *votes,
} SMARTLIST_FOREACH_END(v);
}
+ /* We need to know how many votes measure bandwidth. */
+ n_authorities_measuring_bandwidth = 0;
+ SMARTLIST_FOREACH(votes, networkstatus_t *, v,
+ if (v->has_measured_bws) {
+ ++n_authorities_measuring_bandwidth;
+ }
+ );
+
/* Now go through all the votes */
flag_counts = tor_malloc(sizeof(int) * smartlist_len(flags));
while (1) {
@@ -1685,6 +1692,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
int n_listing = 0;
int i;
char microdesc_digest[DIGEST256_LEN];
+ tor_addr_port_t alt_orport = {TOR_ADDR_NULL, 0};
/* Of the next-to-be-considered digest in each voter, which is first? */
SMARTLIST_FOREACH(votes, networkstatus_t *, v, {
@@ -1728,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);
@@ -1738,11 +1747,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
/* count bandwidths */
- if (rs->status.has_measured_bw)
- measured_bws[num_mbws++] = rs->status.measured_bw;
+ if (rs->has_measured_bw)
+ measured_bws_kb[num_mbws++] = rs->measured_bw_kb;
if (rs->status.has_bandwidth)
- bandwidths[num_bandwidths++] = rs->status.bandwidth;
+ bandwidths_kb[num_bandwidths++] = rs->status.bandwidth_kb;
} SMARTLIST_FOREACH_END(v);
/* We don't include this router at all unless more than half of
@@ -1754,7 +1763,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
* routerinfo and its contents are. */
memset(microdesc_digest, 0, sizeof(microdesc_digest));
rs = compute_routerstatus_consensus(matching_descs, consensus_method,
- microdesc_digest);
+ microdesc_digest, &alt_orport);
/* Copy bits of that into rs_out. */
memset(&rs_out, 0, sizeof(rs_out));
tor_assert(fast_memeq(lowest_id, rs->status.identity_digest,DIGEST_LEN));
@@ -1765,6 +1774,10 @@ networkstatus_compute_consensus(smartlist_t *votes,
rs_out.published_on = rs->status.published_on;
rs_out.dir_port = rs->status.dir_port;
rs_out.or_port = rs->status.or_port;
+ if (consensus_method >= MIN_METHOD_FOR_A_LINES) {
+ tor_addr_copy(&rs_out.ipv6_addr, &alt_orport.addr);
+ rs_out.ipv6_orport = alt_orport.port;
+ }
rs_out.has_bandwidth = 0;
rs_out.has_exitsummary = 0;
@@ -1828,28 +1841,37 @@ networkstatus_compute_consensus(smartlist_t *votes,
/* Pick a bandwidth */
if (consensus_method >= 6 && num_mbws > 2) {
rs_out.has_bandwidth = 1;
- rs_out.bandwidth = median_uint32(measured_bws, num_mbws);
+ rs_out.bw_is_unmeasured = 0;
+ rs_out.bandwidth_kb = median_uint32(measured_bws_kb, num_mbws);
} else if (consensus_method >= 5 && num_bandwidths > 0) {
rs_out.has_bandwidth = 1;
- rs_out.bandwidth = median_uint32(bandwidths, num_bandwidths);
+ rs_out.bw_is_unmeasured = 1;
+ rs_out.bandwidth_kb = median_uint32(bandwidths_kb, num_bandwidths);
+ if (consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW &&
+ n_authorities_measuring_bandwidth > 2) {
+ /* Cap non-measured bandwidths. */
+ if (rs_out.bandwidth_kb > max_unmeasured_bw_kb) {
+ rs_out.bandwidth_kb = max_unmeasured_bw_kb;
+ }
+ }
}
/* Fix bug 2203: Do not count BadExit nodes as Exits for bw weights */
- if (consensus_method >= 11) {
+ if (consensus_method >= MIN_METHOD_TO_CUT_BADEXIT_WEIGHT) {
is_exit = is_exit && !is_bad_exit;
}
if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS) {
if (rs_out.has_bandwidth) {
- T += rs_out.bandwidth;
+ T += rs_out.bandwidth_kb;
if (is_exit && is_guard)
- D += rs_out.bandwidth;
+ D += rs_out.bandwidth_kb;
else if (is_exit)
- E += rs_out.bandwidth;
+ E += rs_out.bandwidth_kb;
else if (is_guard)
- G += rs_out.bandwidth;
+ G += rs_out.bandwidth_kb;
else
- M += rs_out.bandwidth;
+ M += rs_out.bandwidth_kb;
} else {
log_warn(LD_BUG, "Missing consensus bandwidth for router %s",
rs_out.nickname);
@@ -1862,7 +1884,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
* listed that descriptor will have the same summary. If not then
* something is fishy and we'll use the most common one (breaking
* ties in favor of lexicographically larger one (only because it
- * lets me reuse more existing code.
+ * lets me reuse more existing code)).
*
* The other case that can happen is that no authority that voted
* for that descriptor has an exit policy summary. That's
@@ -1948,12 +1970,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
}
{
- char buf[4096];
+ char *buf;
/* Okay!! Now we can write the descriptor... */
/* First line goes into "buf". */
- routerstatus_format_entry(buf, sizeof(buf), &rs_out, NULL,
- rs_format);
- smartlist_add(chunks, tor_strdup(buf));
+ buf = routerstatus_format_entry(&rs_out, NULL, rs_format, NULL);
+ if (buf)
+ smartlist_add(chunks, buf);
}
/* Now an m line, if applicable. */
if (flavor == FLAV_MICRODESC &&
@@ -1973,7 +1995,11 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_add(chunks, tor_strdup("\n"));
/* Now the weight line. */
if (rs_out.has_bandwidth) {
- smartlist_add_asprintf(chunks, "w Bandwidth=%d\n", rs_out.bandwidth);
+ int unmeasured = rs_out.bw_is_unmeasured &&
+ consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW;
+ smartlist_add_asprintf(chunks, "w Bandwidth=%d%s\n",
+ rs_out.bandwidth_kb,
+ unmeasured?" Unmeasured=1":"");
}
/* Now the exitpolicy summary line. */
@@ -1999,8 +2025,8 @@ networkstatus_compute_consensus(smartlist_t *votes,
smartlist_free(chosen_flags);
smartlist_free(versions);
smartlist_free(exitsummaries);
- tor_free(bandwidths);
- tor_free(measured_bws);
+ tor_free(bandwidths_kb);
+ tor_free(measured_bws_kb);
}
if (consensus_method >= MIN_METHOD_FOR_FOOTER) {
@@ -2016,6 +2042,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
// Parse params, extract BW_WEIGHT_SCALE if present
// DO NOT use consensus_param_bw_weight_scale() in this code!
// The consensus is not formed yet!
+ /* XXXX Extract this code into a common function */
if (params) {
if (strcmpstart(params, "bwweightscale=") == 0)
bw_weight_param = params;
@@ -2060,12 +2087,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
size_t digest_len =
flavor == FLAV_NS ? DIGEST_LEN : DIGEST256_LEN;
const char *algname = crypto_digest_algorithm_get_name(digest_alg);
- char sigbuf[4096];
+ char *signature;
smartlist_add(chunks, tor_strdup("directory-signature "));
/* Compute the hash of the chunks. */
- hash_list_members(digest, digest_len, chunks, digest_alg);
+ crypto_digest_smartlist(digest, digest_len, chunks, "", digest_alg);
/* Get the fingerprints */
crypto_pk_get_fingerprint(identity_key, fingerprint, 0);
@@ -2081,14 +2108,12 @@ networkstatus_compute_consensus(smartlist_t *votes,
signing_key_fingerprint);
}
/* And the signature. */
- sigbuf[0] = '\0';
- if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf),
- digest, digest_len,
- signing_key)) {
+ if (!(signature = router_get_dirobj_signature(digest, digest_len,
+ signing_key))) {
log_warn(LD_BUG, "Couldn't sign consensus networkstatus.");
- return NULL; /* This leaks, but it should never happen. */
+ goto done;
}
- smartlist_add(chunks, tor_strdup(sigbuf));
+ smartlist_add(chunks, signature);
if (legacy_id_key_digest && legacy_signing_key && consensus_method >= 3) {
smartlist_add(chunks, tor_strdup("directory-signature "));
@@ -2104,26 +2129,18 @@ networkstatus_compute_consensus(smartlist_t *votes,
algname, fingerprint,
signing_key_fingerprint);
}
- sigbuf[0] = '\0';
- if (router_append_dirobj_signature(sigbuf, sizeof(sigbuf),
- digest, digest_len,
- legacy_signing_key)) {
+
+ if (!(signature = router_get_dirobj_signature(digest, digest_len,
+ legacy_signing_key))) {
log_warn(LD_BUG, "Couldn't sign consensus networkstatus.");
- return NULL; /* This leaks, but it should never happen. */
+ goto done;
}
- smartlist_add(chunks, tor_strdup(sigbuf));
+ smartlist_add(chunks, signature);
}
}
result = smartlist_join_strings(chunks, "", 0, NULL);
- tor_free(client_versions);
- tor_free(server_versions);
- SMARTLIST_FOREACH(flags, char *, cp, tor_free(cp));
- smartlist_free(flags);
- SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
- smartlist_free(chunks);
-
{
networkstatus_t *c;
if (!(c = networkstatus_parse_vote_from_string(result, NULL,
@@ -2131,15 +2148,24 @@ networkstatus_compute_consensus(smartlist_t *votes,
log_err(LD_BUG, "Generated a networkstatus consensus we couldn't "
"parse.");
tor_free(result);
- return NULL;
+ goto done;
}
// Verify balancing parameters
if (consensus_method >= MIN_METHOD_FOR_BW_WEIGHTS && added_weights) {
- networkstatus_verify_bw_weights(c);
+ networkstatus_verify_bw_weights(c, consensus_method);
}
networkstatus_vote_free(c);
}
+ done:
+
+ tor_free(client_versions);
+ tor_free(server_versions);
+ SMARTLIST_FOREACH(flags, char *, cp, tor_free(cp));
+ smartlist_free(flags);
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+
return result;
}
@@ -2193,7 +2219,7 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
{
digests_t *digests = strmap_get(sigs->digests, flavor);
int n_matches = 0;
- digest_algorithm_t alg;
+ int alg;
if (!digests) {
*msg_out = "No digests for given consensus flavor";
return -1;
@@ -2258,7 +2284,7 @@ networkstatus_add_detached_signatures(networkstatus_t *target,
if (sig->good_signature || !old_sig || old_sig->bad_signature) {
log_info(LD_DIR, "Adding signature from %s with %s", voter_identity,
algorithm);
- log(severity, LD_DIR, "Added a signature for %s from %s.",
+ tor_log(severity, LD_DIR, "Added a signature for %s from %s.",
target_voter->nickname, source);
++r;
if (old_sig) {
@@ -2457,7 +2483,7 @@ ns_detached_signatures_free(ns_detached_signatures_t *s)
smartlist_free(sigs);
} STRMAP_FOREACH_END;
strmap_free(s->signatures, NULL);
- strmap_free(s->digests, _tor_free);
+ strmap_free(s->digests, tor_free_);
}
tor_free(s);
@@ -2507,12 +2533,13 @@ dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out)
timing_out->dist_delay = options->V3AuthDistDelay;
}
-/** Return the start of the next interval of size <b>interval</b> (in seconds)
- * after <b>now</b>. Midnight always starts a fresh interval, and if the last
- * interval of a day would be truncated to less than half its size, it is
- * rolled into the previous interval. */
+/** Return the start of the next interval of size <b>interval</b> (in
+ * seconds) after <b>now</b>, plus <b>offset</b>. Midnight always
+ * starts a fresh interval, and if the last interval of a day would be
+ * truncated to less than half its size, it is rolled into the
+ * previous interval. */
time_t
-dirvote_get_start_of_next_interval(time_t now, int interval)
+dirvote_get_start_of_next_interval(time_t now, int interval, int offset)
{
struct tm tm;
time_t midnight_today=0;
@@ -2540,6 +2567,10 @@ dirvote_get_start_of_next_interval(time_t now, int interval)
if (next + interval/2 > midnight_tomorrow)
next = midnight_tomorrow;
+ next += offset;
+ if (next - interval > now)
+ next -= interval;
+
return next;
}
@@ -2603,8 +2634,10 @@ dirvote_recalculate_timing(const or_options_t *options, time_t now)
vote_delay = dist_delay = interval / 4;
start = voting_schedule.interval_starts =
- dirvote_get_start_of_next_interval(now,interval);
- end = dirvote_get_start_of_next_interval(start+1, interval);
+ dirvote_get_start_of_next_interval(now,interval,
+ options->TestingV3AuthVotingStartOffset);
+ end = dirvote_get_start_of_next_interval(start+1, interval,
+ options->TestingV3AuthVotingStartOffset);
tor_assert(end > start);
@@ -2757,7 +2790,7 @@ dirvote_fetch_missing_votes(void)
char *resource;
SMARTLIST_FOREACH_BEGIN(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds) {
+ dir_server_t *, ds) {
if (!(ds->type & V3_DIRINFO))
continue;
if (!dirvote_get_vote(ds->v3_identity_digest,
@@ -2875,7 +2908,7 @@ list_v3_auth_ids(void)
smartlist_t *known_v3_keys = smartlist_new();
char *keys;
SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
+ dir_server_t *, ds,
if ((ds->type & V3_DIRINFO) &&
!tor_digest_is_zero(ds->v3_identity_digest))
smartlist_add(known_v3_keys,
@@ -2896,7 +2929,7 @@ dirvote_add_vote(const char *vote_body, const char **msg_out, int *status_out)
{
networkstatus_t *vote;
networkstatus_voter_info_t *vi;
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
pending_vote_t *pending_vote = NULL;
const char *end_of_vote = NULL;
int any_failed = 0;
@@ -2947,7 +2980,7 @@ dirvote_add_vote(const char *vote_body, const char **msg_out, int *status_out)
/* Hey, it's a new cert! */
trusted_dirs_load_certs_from_string(
vote->cert->cache_info.signed_descriptor_body,
- 0 /* from_store */, 1 /*flush*/);
+ TRUSTED_DIRS_CERTS_SRC_FROM_VOTE, 1 /*flush*/);
if (!authority_cert_get_by_digests(vote->cert->cache_info.identity_digest,
vote->cert->signing_key_digest)) {
log_warn(LD_BUG, "We added a cert, but still couldn't find it.");
@@ -3080,7 +3113,7 @@ dirvote_compute_consensuses(void)
}
tor_assert(pending_vote_list);
SMARTLIST_FOREACH(pending_vote_list, pending_vote_t *, v, {
- if (smartlist_string_isin(v->vote->known_flags, "Running"))
+ if (smartlist_contains_string(v->vote->known_flags, "Running"))
n_vote_running++;
});
if (!n_vote_running) {
@@ -3110,7 +3143,7 @@ dirvote_compute_consensuses(void)
});
votefile = get_datadir_fname("v3-status-votes");
- write_chunks_to_file(votefile, votestrings, 0);
+ write_chunks_to_file(votefile, votestrings, 0, 0);
tor_free(votefile);
SMARTLIST_FOREACH(votestrings, sized_chunk_t *, c, tor_free(c));
smartlist_free(votestrings);
@@ -3441,7 +3474,7 @@ dirvote_free_all(void)
const char *
dirvote_get_pending_consensus(consensus_flavor_t flav)
{
- tor_assert(((int)flav) >= 0 && flav < N_CONSENSUS_FLAVORS);
+ tor_assert(((int)flav) >= 0 && (int)flav < N_CONSENSUS_FLAVORS);
return pending_consensuses[flav].body;
}
@@ -3504,15 +3537,11 @@ dirvote_get_vote(const char *fp, int flags)
return NULL;
}
-/** Construct and return a new microdescriptor from a routerinfo <b>ri</b>.
- *
- * XXX Right now, there is only one way to generate microdescriptors from
- * router descriptors. This may change in future consensus methods. If so,
- * we'll need an internal way to remember which method we used, and ask for a
- * particular method.
+/** Construct and return a new microdescriptor from a routerinfo <b>ri</b>
+ * according to <b>consensus_method</b>.
**/
microdesc_t *
-dirvote_create_microdescriptor(const routerinfo_t *ri)
+dirvote_create_microdescriptor(const routerinfo_t *ri, int consensus_method)
{
microdesc_t *result = NULL;
char *key = NULL, *summary = NULL, *family = NULL;
@@ -3522,23 +3551,55 @@ dirvote_create_microdescriptor(const routerinfo_t *ri)
if (crypto_pk_write_public_key_to_string(ri->onion_pkey, &key, &keylen)<0)
goto done;
- summary = policy_summarize(ri->exit_policy);
+ summary = policy_summarize(ri->exit_policy, AF_INET);
if (ri->declared_family)
family = smartlist_join_strings(ri->declared_family, " ", 0, NULL);
smartlist_add_asprintf(chunks, "onion-key\n%s", key);
+ if (consensus_method >= MIN_METHOD_FOR_NTOR_KEY &&
+ ri->onion_curve25519_pkey) {
+ char kbuf[128];
+ base64_encode(kbuf, sizeof(kbuf),
+ (const char*)ri->onion_curve25519_pkey->public_key,
+ CURVE25519_PUBKEY_LEN);
+ smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
+ }
+
+ if (consensus_method >= MIN_METHOD_FOR_A_LINES &&
+ !tor_addr_is_null(&ri->ipv6_addr) && ri->ipv6_orport)
+ smartlist_add_asprintf(chunks, "a %s\n",
+ fmt_addrport(&ri->ipv6_addr, ri->ipv6_orport));
+
if (family)
smartlist_add_asprintf(chunks, "family %s\n", family);
if (summary && strcmp(summary, "reject 1-65535"))
smartlist_add_asprintf(chunks, "p %s\n", summary);
+ if (consensus_method >= MIN_METHOD_FOR_P6_LINES &&
+ ri->ipv6_exit_policy) {
+ /* XXXX024 This doesn't match proposal 208, which says these should
+ * be taken unchanged from the routerinfo. That's bogosity, IMO:
+ * the proposal should have said to do this instead.*/
+ char *p6 = write_short_policy(ri->ipv6_exit_policy);
+ if (p6 && strcmp(p6, "reject 1-65535"))
+ smartlist_add_asprintf(chunks, "p6 %s\n", p6);
+ tor_free(p6);
+ }
+
+ if (consensus_method >= MIN_METHOD_FOR_ID_HASH_IN_MD) {
+ char idbuf[BASE64_DIGEST_LEN+1];
+ digest_to_base64(idbuf, ri->cache_info.identity_digest);
+ smartlist_add_asprintf(chunks, "id rsa1024 %s\n", idbuf);
+ }
+
output = smartlist_join_strings(chunks, "", 0, NULL);
{
smartlist_t *lst = microdescs_parse_from_string(output,
- output+strlen(output), 0, 1);
+ output+strlen(output), 0,
+ SAVED_NOWHERE);
if (smartlist_len(lst) != 1) {
log_warn(LD_DIR, "We generated a microdescriptor we couldn't parse.");
SMARTLIST_FOREACH(lst, microdesc_t *, md, microdesc_free(md));
@@ -3561,33 +3622,118 @@ dirvote_create_microdescriptor(const routerinfo_t *ri)
return result;
}
-/** Cached space-separated string to hold */
-static char *microdesc_consensus_methods = NULL;
-
/** Format the appropriate vote line to describe the microdescriptor <b>md</b>
* in a consensus vote document. Write it into the <b>out_len</b>-byte buffer
* in <b>out</b>. Return -1 on failure and the number of characters written
* on success. */
ssize_t
-dirvote_format_microdesc_vote_line(char *out, size_t out_len,
- const microdesc_t *md)
+dirvote_format_microdesc_vote_line(char *out_buf, size_t out_buf_len,
+ const microdesc_t *md,
+ int consensus_method_low,
+ int consensus_method_high)
{
+ ssize_t ret = -1;
char d64[BASE64_DIGEST256_LEN+1];
- if (!microdesc_consensus_methods) {
- microdesc_consensus_methods =
- make_consensus_method_list(MIN_METHOD_FOR_MICRODESC,
- MAX_SUPPORTED_CONSENSUS_METHOD,
- ",");
- tor_assert(microdesc_consensus_methods);
- }
+ char *microdesc_consensus_methods =
+ make_consensus_method_list(consensus_method_low,
+ consensus_method_high,
+ ",");
+ tor_assert(microdesc_consensus_methods);
+
if (digest256_to_base64(d64, md->digest)<0)
- return -1;
+ goto out;
- if (tor_snprintf(out, out_len, "m %s sha256=%s\n",
+ if (tor_snprintf(out_buf, out_buf_len, "m %s sha256=%s\n",
microdesc_consensus_methods, d64)<0)
- return -1;
+ goto out;
+
+ ret = strlen(out_buf);
- return strlen(out);
+ out:
+ tor_free(microdesc_consensus_methods);
+ return ret;
+}
+
+/** Array of start and end of consensus methods used for supported
+ microdescriptor formats. */
+static const struct consensus_method_range_t {
+ int low;
+ int high;
+} microdesc_consensus_methods[] = {
+ {MIN_METHOD_FOR_MICRODESC, MIN_METHOD_FOR_A_LINES - 1},
+ {MIN_METHOD_FOR_A_LINES, MIN_METHOD_FOR_P6_LINES - 1},
+ {MIN_METHOD_FOR_P6_LINES, MIN_METHOD_FOR_NTOR_KEY - 1},
+ {MIN_METHOD_FOR_NTOR_KEY, MIN_METHOD_FOR_ID_HASH_IN_MD - 1},
+ {MIN_METHOD_FOR_ID_HASH_IN_MD, MAX_SUPPORTED_CONSENSUS_METHOD},
+ {-1, -1}
+};
+
+/** Helper type used when generating the microdescriptor lines in a directory
+ * vote. */
+typedef struct microdesc_vote_line_t {
+ int low;
+ int high;
+ microdesc_t *md;
+ struct microdesc_vote_line_t *next;
+} microdesc_vote_line_t;
+
+/** Generate and return a linked list of all the lines that should appear to
+ * describe a router's microdescriptor versions in a directory vote.
+ * Add the generated microdescriptors to <b>microdescriptors_out</b>. */
+vote_microdesc_hash_t *
+dirvote_format_all_microdesc_vote_lines(const routerinfo_t *ri, time_t now,
+ smartlist_t *microdescriptors_out)
+{
+ const struct consensus_method_range_t *cmr;
+ microdesc_vote_line_t *entries = NULL, *ep;
+ vote_microdesc_hash_t *result = NULL;
+
+ /* Generate the microdescriptors. */
+ for (cmr = microdesc_consensus_methods;
+ cmr->low != -1 && cmr->high != -1;
+ cmr++) {
+ microdesc_t *md = dirvote_create_microdescriptor(ri, cmr->low);
+ if (md) {
+ microdesc_vote_line_t *e =
+ tor_malloc_zero(sizeof(microdesc_vote_line_t));
+ e->md = md;
+ e->low = cmr->low;
+ e->high = cmr->high;
+ e->next = entries;
+ entries = e;
+ }
+ }
+
+ /* Compress adjacent identical ones */
+ for (ep = entries; ep; ep = ep->next) {
+ while (ep->next &&
+ fast_memeq(ep->md->digest, ep->next->md->digest, DIGEST256_LEN) &&
+ ep->low == ep->next->high + 1) {
+ microdesc_vote_line_t *next = ep->next;
+ ep->low = next->low;
+ microdesc_free(next->md);
+ ep->next = next->next;
+ tor_free(next);
+ }
+ }
+
+ /* Format them into vote_microdesc_hash_t, and add to microdescriptors_out.*/
+ while ((ep = entries)) {
+ char buf[128];
+ vote_microdesc_hash_t *h;
+ dirvote_format_microdesc_vote_line(buf, sizeof(buf), ep->md,
+ ep->low, ep->high);
+ h = tor_malloc_zero(sizeof(vote_microdesc_hash_t));
+ h->microdesc_hash_line = tor_strdup(buf);
+ h->next = result;
+ result = h;
+ ep->md->last_listed = now;
+ smartlist_add(microdescriptors_out, ep->md);
+ entries = ep->next;
+ tor_free(ep);
+ }
+
+ return result;
}
/** If <b>vrs</b> has a hash made for the consensus method <b>method</b> with
diff --git a/src/or/dirvote.h b/src/or/dirvote.h
index e6f970061..4c57e4366 100644
--- a/src/or/dirvote.h
+++ b/src/or/dirvote.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,16 +9,66 @@
* \brief Header file for dirvote.c.
**/
-#ifndef _TOR_DIRVOTE_H
-#define _TOR_DIRVOTE_H
+#ifndef TOR_DIRVOTE_H
+#define TOR_DIRVOTE_H
+
+#include "testsupport.h"
/** Lowest allowable value for VoteSeconds. */
-#define MIN_VOTE_SECONDS 20
+#define MIN_VOTE_SECONDS 2
/** Lowest allowable value for DistSeconds. */
-#define MIN_DIST_SECONDS 20
+#define MIN_DIST_SECONDS 2
/** Smallest allowable voting interval. */
#define MIN_VOTE_INTERVAL 300
+/** The highest consensus method that we currently support. */
+#define MAX_SUPPORTED_CONSENSUS_METHOD 18
+
+/** Lowest consensus method that contains a 'directory-footer' marker */
+#define MIN_METHOD_FOR_FOOTER 9
+
+/** Lowest consensus method that contains bandwidth weights */
+#define MIN_METHOD_FOR_BW_WEIGHTS 9
+
+/** Lowest consensus method that contains consensus params */
+#define MIN_METHOD_FOR_PARAMS 7
+
+/** Lowest consensus method that generates microdescriptors */
+#define MIN_METHOD_FOR_MICRODESC 8
+
+/** Lowest consensus method that doesn't count bad exits as exits for weight */
+#define MIN_METHOD_TO_CUT_BADEXIT_WEIGHT 11
+
+/** Lowest consensus method that ensures a majority of authorities voted
+ * for a param. */
+#define MIN_METHOD_FOR_MAJORITY_PARAMS 12
+
+/** Lowest consensus method where microdesc consensuses omit any entry
+ * with no microdesc. */
+#define MIN_METHOD_FOR_MANDATORY_MICRODESC 13
+
+/** Lowest consensus method that contains "a" lines. */
+#define MIN_METHOD_FOR_A_LINES 14
+
+/** Lowest consensus method where microdescs may include a "p6" line. */
+#define MIN_METHOD_FOR_P6_LINES 15
+
+/** Lowest consensus method where microdescs may include an onion-key-ntor
+ * line */
+#define MIN_METHOD_FOR_NTOR_KEY 16
+
+/** Lowest consensus method that ensures that authorities output an
+ * Unmeasured=1 flag for unmeasured bandwidths */
+#define MIN_METHOD_TO_CLIP_UNMEASURED_BW 17
+
+/** Lowest consensus method where authorities may include an "id" line in
+ * microdescriptors. */
+#define MIN_METHOD_FOR_ID_HASH_IN_MD 18
+
+/** Default bandwidth to clip unmeasured bandwidths to using method >=
+ * MIN_METHOD_TO_CLIP_UNMEASURED_BW */
+#define DEFAULT_MAX_UNMEASURED_BW_KB 20
+
void dirvote_free_all(void);
/* vote manipulation */
@@ -42,7 +92,9 @@ authority_cert_t *authority_cert_dup(authority_cert_t *cert);
/* vote scheduling */
void dirvote_get_preferred_voting_intervals(vote_timing_t *timing_out);
-time_t dirvote_get_start_of_next_interval(time_t now, int interval);
+time_t dirvote_get_start_of_next_interval(time_t now,
+ int interval,
+ int offset);
void dirvote_recalculate_timing(const or_options_t *options, time_t now);
void dirvote_act(const or_options_t *options, time_t now);
@@ -70,9 +122,16 @@ networkstatus_t *
dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
authority_cert_t *cert);
-microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri);
+microdesc_t *dirvote_create_microdescriptor(const routerinfo_t *ri,
+ int consensus_method);
ssize_t dirvote_format_microdesc_vote_line(char *out, size_t out_len,
- const microdesc_t *md);
+ const microdesc_t *md,
+ int consensus_method_low,
+ int consensus_method_high);
+vote_microdesc_hash_t *dirvote_format_all_microdesc_vote_lines(
+ const routerinfo_t *ri,
+ time_t now,
+ smartlist_t *microdescriptors_out);
int vote_routerstatus_find_microdesc_hash(char *digest256_out,
const vote_routerstatus_t *vrs,
@@ -83,9 +142,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 78893bfbe..a9c431865 100644
--- a/src/or/dns.c
+++ b/src/or/dns.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -24,6 +24,7 @@
#include "relay.h"
#include "router.h"
#include "ht.h"
+#include "../common/sandbox.h"
#ifdef HAVE_EVENT2_DNS_H
#include <event2/event.h>
#include <event2/dns.h>
@@ -61,6 +62,9 @@ struct evdns_request;
#define evdns_base_resolve_ipv4(base, addr, options, cb, ptr) \
((evdns_resolve_ipv4((addr), (options), (cb), (ptr))!=0) \
? NULL : ((void*)1))
+#define evdns_base_resolve_ipv6(base, addr, options, cb, ptr) \
+ ((evdns_resolve_ipv6((addr), (options), (cb), (ptr))!=0) \
+ ? NULL : ((void*)1))
#define evdns_base_resolve_reverse(base, addr, options, cb, ptr) \
((evdns_resolve_reverse((addr), (options), (cb), (ptr))!=0) \
? NULL : ((void*)1))
@@ -84,12 +88,6 @@ struct evdns_request;
* that the resolver is wedged? */
#define RESOLVE_MAX_TIMEOUT 300
-/** Possible outcomes from hostname lookup: permanent failure,
- * transient (retryable) failure, and success. */
-#define DNS_RESOLVE_FAILED_TRANSIENT 1
-#define DNS_RESOLVE_FAILED_PERMANENT 2
-#define DNS_RESOLVE_SUCCEEDED 3
-
/** Our evdns_base; this structure handles all our name lookups. */
static struct evdns_base *the_evdns_base = NULL;
@@ -117,7 +115,7 @@ typedef struct pending_connection_t {
/* Possible states for a cached resolve_t */
/** We are waiting for the resolver system to tell us an answer here.
* When we get one, or when we time out, the state of this cached_resolve_t
- * will become "DONE" and we'll possibly add a CACHED_VALID or a CACHED_FAILED
+ * will become "DONE" and we'll possibly add a CACHED
* entry. This cached_resolve_t will be in the hash table so that we will
* know not to launch more requests for this addr, but rather to add more
* connections to the pending list for the addr. */
@@ -128,10 +126,18 @@ typedef struct pending_connection_t {
#define CACHE_STATE_DONE 1
/** We are caching an answer for this address. This should have no pending
* connections, and should appear in the hash table. */
-#define CACHE_STATE_CACHED_VALID 2
-/** We are caching a failure for this address. This should have no pending
- * connections, and should appear in the hash table */
-#define CACHE_STATE_CACHED_FAILED 3
+#define CACHE_STATE_CACHED 2
+
+/** @name status values for a single DNS request.
+ *
+ * @{ */
+/** The DNS request is in progress. */
+#define RES_STATUS_INFLIGHT 1
+/** The DNS request finished and gave an answer */
+#define RES_STATUS_DONE_OK 2
+/** The DNS request finished and gave an error */
+#define RES_STATUS_DONE_ERR 3
+/**@}*/
/** A DNS request: possibly completed, possibly pending; cached_resolve
* structs are stored at the OR side in a hash table, and as a linked
@@ -139,19 +145,39 @@ typedef struct pending_connection_t {
*/
typedef struct cached_resolve_t {
HT_ENTRY(cached_resolve_t) node;
- uint32_t magic;
+ uint32_t magic; /**< Must be CACHED_RESOLVE_MAGIC */
char address[MAX_ADDRESSLEN]; /**< The hostname to be resolved. */
+
+ union {
+ uint32_t addr_ipv4; /**< IPv4 addr for <b>address</b>, if successful.
+ * (In host order.) */
+ int err_ipv4; /**< One of DNS_ERR_*, if IPv4 lookup failed. */
+ } result_ipv4; /**< Outcome of IPv4 lookup */
+ union {
+ struct in6_addr addr_ipv6; /**< IPv6 addr for <b>address</b>, if
+ * successful */
+ int err_ipv6; /**< One of DNS_ERR_*, if IPv6 lookup failed. */
+ } result_ipv6; /**< Outcome of IPv6 lookup, if any */
union {
- struct {
- struct in6_addr addr6; /**< IPv6 addr for <b>address</b>. */
- uint32_t addr; /**< IPv4 addr for <b>address</b>. */
- } a;
- char *hostname; /**< Hostname for <b>address</b> (if a reverse lookup) */
- } result;
- uint8_t state; /**< Is this cached entry pending/done/valid/failed? */
- uint8_t is_reverse; /**< Is this a reverse (addr-to-hostname) lookup? */
+ char *hostname; /** A hostname, if PTR lookup happened successfully*/
+ int err_hostname; /** One of DNS_ERR_*, if PTR lookup failed. */
+ } result_ptr;
+ /** @name Status fields
+ *
+ * These take one of the RES_STATUS_* values, depending on the state
+ * of the corresponding lookup.
+ *
+ * @{ */
+ unsigned int res_status_ipv4 : 2;
+ unsigned int res_status_ipv6 : 2;
+ unsigned int res_status_hostname : 2;
+ /**@}*/
+ uint8_t state; /**< Is this cached entry pending/done/informative? */
+
time_t expire; /**< Remove items from cache after this time. */
- uint32_t ttl; /**< What TTL did the nameserver tell us? */
+ uint32_t ttl_ipv4; /**< What TTL did the nameserver tell us? */
+ uint32_t ttl_ipv6; /**< What TTL did the nameserver tell us? */
+ uint32_t ttl_hostname; /**< What TTL did the nameserver tell us? */
/** Connections that want to know when we get an answer for this resolve. */
pending_connection_t *pending_connections;
/** Position of this element in the heap*/
@@ -159,20 +185,31 @@ typedef struct cached_resolve_t {
} cached_resolve_t;
static void purge_expired_resolves(time_t now);
-static void dns_found_answer(const char *address, uint8_t is_reverse,
- uint32_t addr, const char *hostname, char outcome,
+static void dns_found_answer(const char *address, uint8_t query_type,
+ int dns_answer,
+ const tor_addr_t *addr,
+ const char *hostname,
uint32_t ttl);
-static void send_resolved_cell(edge_connection_t *conn, uint8_t answer_type);
-static int launch_resolve(edge_connection_t *exitconn);
+static void send_resolved_cell(edge_connection_t *conn, uint8_t answer_type,
+ const cached_resolve_t *resolve);
+static int launch_resolve(cached_resolve_t *resolve);
static void add_wildcarded_test_address(const char *address);
static int configure_nameservers(int force);
static int answer_is_wildcarded(const char *ip);
static int dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
or_circuit_t *oncirc, char **resolved_to_hostname,
- int *made_connection_pending_out);
+ int *made_connection_pending_out,
+ cached_resolve_t **resolve_out);
+static int set_exitconn_info_from_resolve(edge_connection_t *exitconn,
+ const cached_resolve_t *resolve,
+ char **hostname_out);
+static int evdns_err_is_transient(int err);
+static void inform_pending_connections(cached_resolve_t *resolve);
+static void make_pending_resolve_cached(cached_resolve_t *cached);
+
#ifdef DEBUG_DNS_CACHE
-static void _assert_cache_ok(void);
-#define assert_cache_ok() _assert_cache_ok()
+static void assert_cache_ok_(void);
+#define assert_cache_ok() assert_cache_ok_()
#else
#define assert_cache_ok() STMT_NIL
#endif
@@ -181,6 +218,13 @@ static void assert_resolve_ok(cached_resolve_t *resolve);
/** Hash table of cached_resolve objects. */
static HT_HEAD(cache_map, cached_resolve_t) cache_root;
+/** Global: how many IPv6 requests have we made in all? */
+static uint64_t n_ipv6_requests_made = 0;
+/** Global: how many IPv6 requests have timed out? */
+static uint64_t n_ipv6_timeouts = 0;
+/** Global: Do we think that IPv6 DNS is broken? */
+static int dns_is_broken_for_ipv6 = 0;
+
/** Function to compare hashed resolves on their addresses; used to
* implement hash tables. */
static INLINE int
@@ -195,7 +239,7 @@ cached_resolves_eq(cached_resolve_t *a, cached_resolve_t *b)
static INLINE unsigned int
cached_resolve_hash(cached_resolve_t *a)
{
- return ht_string_hash(a->address);
+ return (unsigned) siphash24g((const uint8_t*)a->address, strlen(a->address));
}
HT_PROTOTYPE(cache_map, cached_resolve_t, node, cached_resolve_hash,
@@ -219,7 +263,7 @@ evdns_log_cb(int warn, const char *msg)
int severity = warn ? LOG_WARN : LOG_INFO;
if (!strcmpstart(msg, "Resolve requested for") &&
get_options()->SafeLogging) {
- log(LOG_INFO, LD_EXIT, "eventdns: Resolve requested.");
+ log_info(LD_EXIT, "eventdns: Resolve requested.");
return;
} else if (!strcmpstart(msg, "Search: ")) {
return;
@@ -248,13 +292,13 @@ evdns_log_cb(int warn, const char *msg)
control_event_server_status(LOG_WARN, "NAMESERVER_ALL_DOWN");
all_down = 1;
}
- log(severity, LD_EXIT, "eventdns: %s", msg);
+ tor_log(severity, LD_EXIT, "eventdns: %s", msg);
}
/** Helper: passed to eventdns.c as a callback so it can generate random
* numbers for transaction IDs and 0x20-hack coding. */
static void
-_dns_randfn(char *b, size_t n)
+dns_randfn_(char *b, size_t n)
{
crypto_rand(b,n);
}
@@ -264,7 +308,7 @@ int
dns_init(void)
{
init_cache_map();
- evdns_set_random_bytes_fn(_dns_randfn);
+ evdns_set_random_bytes_fn(dns_randfn_);
if (server_mode(get_options())) {
int r = configure_nameservers(1);
return r;
@@ -336,7 +380,7 @@ dns_get_expiry_ttl(uint32_t ttl)
/** Helper: free storage held by an entry in the DNS cache. */
static void
-_free_cached_resolve(cached_resolve_t *r)
+free_cached_resolve_(cached_resolve_t *r)
{
if (!r)
return;
@@ -345,8 +389,8 @@ _free_cached_resolve(cached_resolve_t *r)
r->pending_connections = victim->next;
tor_free(victim);
}
- if (r->is_reverse)
- tor_free(r->result.hostname);
+ if (r->res_status_hostname == RES_STATUS_DONE_OK)
+ tor_free(r->result_ptr.hostname);
r->magic = 0xFF00FF00;
tor_free(r);
}
@@ -355,7 +399,7 @@ _free_cached_resolve(cached_resolve_t *r)
* less-than-zero, zero, or greater-than-zero as appropriate. Used for
* the priority queue implementation. */
static int
-_compare_cached_resolves_by_expiry(const void *_a, const void *_b)
+compare_cached_resolves_by_expiry_(const void *_a, const void *_b)
{
const cached_resolve_t *a = _a, *b = _b;
if (a->expire < b->expire)
@@ -370,6 +414,65 @@ _compare_cached_resolves_by_expiry(const void *_a, const void *_b)
* will expire. */
static smartlist_t *cached_resolve_pqueue = NULL;
+static void
+cached_resolve_add_answer(cached_resolve_t *resolve,
+ int query_type,
+ int dns_result,
+ const tor_addr_t *answer_addr,
+ const char *answer_hostname,
+ uint32_t ttl)
+{
+ if (query_type == DNS_PTR) {
+ if (resolve->res_status_hostname != RES_STATUS_INFLIGHT)
+ return;
+
+ if (dns_result == DNS_ERR_NONE && answer_hostname) {
+ resolve->result_ptr.hostname = tor_strdup(answer_hostname);
+ resolve->res_status_hostname = RES_STATUS_DONE_OK;
+ } else {
+ resolve->result_ptr.err_hostname = dns_result;
+ resolve->res_status_hostname = RES_STATUS_DONE_ERR;
+ }
+ resolve->ttl_hostname = ttl;
+ } else if (query_type == DNS_IPv4_A) {
+ if (resolve->res_status_ipv4 != RES_STATUS_INFLIGHT)
+ return;
+
+ 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 {
+ resolve->result_ipv4.err_ipv4 = dns_result;
+ resolve->res_status_ipv4 = RES_STATUS_DONE_ERR;
+ }
+
+ } else if (query_type == DNS_IPv6_AAAA) {
+ if (resolve->res_status_ipv6 != RES_STATUS_INFLIGHT)
+ return;
+
+ 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));
+ resolve->res_status_ipv6 = RES_STATUS_DONE_OK;
+ } else {
+ resolve->result_ipv6.err_ipv6 = dns_result;
+ resolve->res_status_ipv6 = RES_STATUS_DONE_ERR;
+ }
+ }
+}
+
+/** Return true iff there are no in-flight requests for <b>resolve</b>. */
+static int
+cached_resolve_have_all_answers(const cached_resolve_t *resolve)
+{
+ return (resolve->res_status_ipv4 != RES_STATUS_INFLIGHT &&
+ resolve->res_status_ipv6 != RES_STATUS_INFLIGHT &&
+ resolve->res_status_hostname != RES_STATUS_INFLIGHT);
+}
+
/** Set an expiry time for a cached_resolve_t, and add it to the expiry
* priority queue */
static void
@@ -380,7 +483,7 @@ set_expiry(cached_resolve_t *resolve, time_t expires)
cached_resolve_pqueue = smartlist_new();
resolve->expire = expires;
smartlist_pqueue_add(cached_resolve_pqueue,
- _compare_cached_resolves_by_expiry,
+ compare_cached_resolves_by_expiry_,
STRUCT_OFFSET(cached_resolve_t, minheap_idx),
resolve);
}
@@ -395,13 +498,13 @@ dns_free_all(void)
SMARTLIST_FOREACH(cached_resolve_pqueue, cached_resolve_t *, res,
{
if (res->state == CACHE_STATE_DONE)
- _free_cached_resolve(res);
+ free_cached_resolve_(res);
});
}
for (ptr = HT_START(cache_map, &cache_root); ptr != NULL; ptr = next) {
item = *ptr;
next = HT_NEXT_RMV(cache_map, &cache_root, ptr);
- _free_cached_resolve(item);
+ free_cached_resolve_(item);
}
HT_CLEAR(cache_map, &cache_root);
smartlist_free(cached_resolve_pqueue);
@@ -427,7 +530,7 @@ purge_expired_resolves(time_t now)
if (resolve->expire > now)
break;
smartlist_pqueue_pop(cached_resolve_pqueue,
- _compare_cached_resolves_by_expiry,
+ compare_cached_resolves_by_expiry_,
STRUCT_OFFSET(cached_resolve_t, minheap_idx));
if (resolve->state == CACHE_STATE_PENDING) {
@@ -435,8 +538,7 @@ purge_expired_resolves(time_t now)
"Expiring a dns resolve %s that's still pending. Forgot to "
"cull it? DNS resolve didn't tell us about the timeout?",
escaped_safe_str(resolve->address));
- } else if (resolve->state == CACHE_STATE_CACHED_VALID ||
- resolve->state == CACHE_STATE_CACHED_FAILED) {
+ } else if (resolve->state == CACHE_STATE_CACHED) {
log_debug(LD_EXIT,
"Forgetting old cached resolve (address %s, expires %lu)",
escaped_safe_str(resolve->address),
@@ -454,9 +556,9 @@ purge_expired_resolves(time_t now)
pend = resolve->pending_connections;
resolve->pending_connections = pend->next;
/* Connections should only be pending if they have no socket. */
- tor_assert(!SOCKET_OK(pend->conn->_base.s));
+ tor_assert(!SOCKET_OK(pend->conn->base_.s));
pendconn = pend->conn;
- if (!pendconn->_base.marked_for_close) {
+ if (!pendconn->base_.marked_for_close) {
connection_edge_end(pendconn, END_STREAM_REASON_TIMEOUT);
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
connection_free(TO_CONN(pendconn));
@@ -465,8 +567,7 @@ purge_expired_resolves(time_t now)
}
}
- if (resolve->state == CACHE_STATE_CACHED_VALID ||
- resolve->state == CACHE_STATE_CACHED_FAILED ||
+ if (resolve->state == CACHE_STATE_CACHED ||
resolve->state == CACHE_STATE_PENDING) {
removed = HT_REMOVE(cache_map, &cache_root, resolve);
if (removed != resolve) {
@@ -481,8 +582,8 @@ purge_expired_resolves(time_t now)
cached_resolve_t *tmp = HT_FIND(cache_map, &cache_root, resolve);
tor_assert(tmp != resolve);
}
- if (resolve->is_reverse)
- tor_free(resolve->result.hostname);
+ if (resolve->res_status_hostname == RES_STATUS_DONE_OK)
+ tor_free(resolve->result_ptr.hostname);
resolve->magic = 0xF0BBF0BB;
tor_free(resolve);
}
@@ -490,19 +591,24 @@ purge_expired_resolves(time_t now)
assert_cache_ok();
}
+/* argument for send_resolved_cell only, meaning "let the answer type be ipv4
+ * or ipv6 depending on the connection's address". */
+#define RESOLVED_TYPE_AUTO 0xff
+
/** Send a response to the RESOLVE request of a connection.
* <b>answer_type</b> must be one of
- * RESOLVED_TYPE_(IPV4|ERROR|ERROR_TRANSIENT).
+ * RESOLVED_TYPE_(AUTO|ERROR|ERROR_TRANSIENT|).
*
* If <b>circ</b> is provided, and we have a cached answer, send the
* answer back along circ; otherwise, send the answer back along
* <b>conn</b>'s attached circuit.
*/
static void
-send_resolved_cell(edge_connection_t *conn, uint8_t answer_type)
+send_resolved_cell(edge_connection_t *conn, uint8_t answer_type,
+ const cached_resolve_t *resolved)
{
- char buf[RELAY_PAYLOAD_SIZE];
- size_t buflen;
+ char buf[RELAY_PAYLOAD_SIZE], *cp = buf;
+ size_t buflen = 0;
uint32_t ttl;
buf[0] = answer_type;
@@ -510,19 +616,36 @@ send_resolved_cell(edge_connection_t *conn, uint8_t answer_type)
switch (answer_type)
{
- case RESOLVED_TYPE_IPV4:
- buf[1] = 4;
- set_uint32(buf+2, tor_addr_to_ipv4n(&conn->_base.addr));
- set_uint32(buf+6, htonl(ttl));
- buflen = 10;
- break;
- /*XXXX IP6 need ipv6 implementation */
+ case RESOLVED_TYPE_AUTO:
+ if (resolved && resolved->res_status_ipv4 == RES_STATUS_DONE_OK) {
+ cp[0] = RESOLVED_TYPE_IPV4;
+ cp[1] = 4;
+ set_uint32(cp+2, htonl(resolved->result_ipv4.addr_ipv4));
+ set_uint32(cp+6, htonl(ttl));
+ cp += 10;
+ }
+ if (resolved && resolved->res_status_ipv6 == RES_STATUS_DONE_OK) {
+ const uint8_t *bytes = resolved->result_ipv6.addr_ipv6.s6_addr;
+ cp[0] = RESOLVED_TYPE_IPV6;
+ cp[1] = 16;
+ memcpy(cp+2, bytes, 16);
+ set_uint32(cp+18, htonl(ttl));
+ cp += 22;
+ }
+ if (cp != buf) {
+ buflen = cp - buf;
+ break;
+ } else {
+ answer_type = RESOLVED_TYPE_ERROR;
+ /* fall through. */
+ }
case RESOLVED_TYPE_ERROR_TRANSIENT:
case RESOLVED_TYPE_ERROR:
{
const char *errmsg = "Error resolving hostname";
size_t msglen = strlen(errmsg);
+ buf[0] = answer_type;
buf[1] = msglen;
strlcpy(buf+2, errmsg, sizeof(buf)-2);
set_uint32(buf+2+msglen, htonl(ttl));
@@ -600,10 +723,11 @@ dns_resolve(edge_connection_t *exitconn)
int is_resolve, r;
int made_connection_pending = 0;
char *hostname = NULL;
- is_resolve = exitconn->_base.purpose == EXIT_PURPOSE_RESOLVE;
+ cached_resolve_t *resolve = NULL;
+ is_resolve = exitconn->base_.purpose == EXIT_PURPOSE_RESOLVE;
r = dns_resolve_impl(exitconn, is_resolve, oncirc, &hostname,
- &made_connection_pending);
+ &made_connection_pending, &resolve);
switch (r) {
case 1:
@@ -614,7 +738,7 @@ dns_resolve(edge_connection_t *exitconn)
if (hostname)
send_resolved_hostname_cell(exitconn, hostname);
else
- send_resolved_cell(exitconn, RESOLVED_TYPE_IPV4);
+ send_resolved_cell(exitconn, RESOLVED_TYPE_AUTO, resolve);
exitconn->on_circuit = NULL;
} else {
/* Add to the n_streams list; the calling function will send back a
@@ -626,7 +750,7 @@ dns_resolve(edge_connection_t *exitconn)
case 0:
/* The request is pending: add the connection into the linked list of
* resolving_streams on this circuit. */
- exitconn->_base.state = EXIT_CONN_STATE_RESOLVING;
+ exitconn->base_.state = EXIT_CONN_STATE_RESOLVING;
exitconn->next_stream = oncirc->resolving_streams;
oncirc->resolving_streams = exitconn;
break;
@@ -636,14 +760,15 @@ dns_resolve(edge_connection_t *exitconn)
* and stop everybody waiting for the same connection. */
if (is_resolve) {
send_resolved_cell(exitconn,
- (r == -1) ? RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT);
+ (r == -1) ? RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT,
+ NULL);
}
exitconn->on_circuit = NULL;
- dns_cancel_pending_resolve(exitconn->_base.address);
+ dns_cancel_pending_resolve(exitconn->base_.address);
- if (!made_connection_pending && !exitconn->_base.marked_for_close) {
+ if (!made_connection_pending && !exitconn->base_.marked_for_close) {
/* If we made the connection pending, then we freed it already in
* dns_cancel_pending_resolve(). If we marked it for close, it'll
* get freed from the main loop. Otherwise, can free it now. */
@@ -670,48 +795,50 @@ dns_resolve(edge_connection_t *exitconn)
* Set *<b>made_connection_pending_out</b> to true if we have placed
* <b>exitconn</b> on the list of pending connections for some resolve; set it
* to false otherwise.
+ *
+ * Set *<b>resolve_out</b> to a cached resolve, if we found one.
*/
static int
dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
or_circuit_t *oncirc, char **hostname_out,
- int *made_connection_pending_out)
+ int *made_connection_pending_out,
+ cached_resolve_t **resolve_out)
{
cached_resolve_t *resolve;
cached_resolve_t search;
pending_connection_t *pending_connection;
- const routerinfo_t *me;
+ int is_reverse = 0;
tor_addr_t addr;
time_t now = time(NULL);
- uint8_t is_reverse = 0;
int r;
assert_connection_ok(TO_CONN(exitconn), 0);
- tor_assert(!SOCKET_OK(exitconn->_base.s));
+ tor_assert(!SOCKET_OK(exitconn->base_.s));
assert_cache_ok();
tor_assert(oncirc);
*made_connection_pending_out = 0;
- /* first check if exitconn->_base.address is an IP. If so, we already
+ /* first check if exitconn->base_.address is an IP. If so, we already
* know the answer. */
- if (tor_addr_parse(&addr, exitconn->_base.address) >= 0) {
- if (tor_addr_family(&addr) == AF_INET) {
- tor_addr_copy(&exitconn->_base.addr, &addr);
+ if (tor_addr_parse(&addr, exitconn->base_.address) >= 0) {
+ if (tor_addr_family(&addr) == AF_INET ||
+ tor_addr_family(&addr) == AF_INET6) {
+ tor_addr_copy(&exitconn->base_.addr, &addr);
exitconn->address_ttl = DEFAULT_DNS_TTL;
return 1;
} else {
- /* XXXX IPv6 */
+ /* XXXX unspec? Bogus? */
return -1;
}
}
/* If we're a non-exit, don't even do DNS lookups. */
- if (!(me = router_get_my_routerinfo()) ||
- policy_is_reject_star(me->exit_policy)) {
+ if (router_my_exit_policy_is_reject_star())
return -1;
- }
- if (address_is_invalid_destination(exitconn->_base.address, 0)) {
- log(LOG_PROTOCOL_WARN, LD_EXIT,
+
+ if (address_is_invalid_destination(exitconn->base_.address, 0)) {
+ tor_log(LOG_PROTOCOL_WARN, LD_EXIT,
"Rejecting invalid destination address %s",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
return -1;
}
@@ -719,14 +846,14 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
* resolves in the hash table. */
purge_expired_resolves(now);
- /* lower-case exitconn->_base.address, so it's in canonical form */
- tor_strlower(exitconn->_base.address);
+ /* lower-case exitconn->base_.address, so it's in canonical form */
+ tor_strlower(exitconn->base_.address);
/* Check whether this is a reverse lookup. If it's malformed, or it's a
* .in-addr.arpa address but this isn't a resolve request, kill the
* connection.
*/
- if ((r = tor_addr_parse_PTR_name(&addr, exitconn->_base.address,
+ if ((r = tor_addr_parse_PTR_name(&addr, exitconn->base_.address,
AF_UNSPEC, 0)) != 0) {
if (r == 1) {
is_reverse = 1;
@@ -737,21 +864,22 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
if (!is_reverse || !is_resolve) {
if (!is_reverse)
log_info(LD_EXIT, "Bad .in-addr.arpa address \"%s\"; sending error.",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
else if (!is_resolve)
log_info(LD_EXIT,
"Attempt to connect to a .in-addr.arpa address \"%s\"; "
"sending error.",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
return -1;
}
//log_notice(LD_EXIT, "Looks like an address %s",
- //exitconn->_base.address);
+ //exitconn->base_.address);
}
+ exitconn->is_reverse_dns_lookup = is_reverse;
/* now check the hash table to see if 'address' is already there. */
- strlcpy(search.address, exitconn->_base.address, sizeof(search.address));
+ strlcpy(search.address, exitconn->base_.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (resolve && resolve->expire > now) { /* already there */
switch (resolve->state) {
@@ -763,27 +891,19 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
pending_connection->next = resolve->pending_connections;
resolve->pending_connections = pending_connection;
*made_connection_pending_out = 1;
- log_debug(LD_EXIT,"Connection (fd %d) waiting for pending DNS "
- "resolve of %s", exitconn->_base.s,
- escaped_safe_str(exitconn->_base.address));
+ log_debug(LD_EXIT,"Connection (fd "TOR_SOCKET_T_FORMAT") waiting "
+ "for pending DNS resolve of %s", exitconn->base_.s,
+ escaped_safe_str(exitconn->base_.address));
return 0;
- case CACHE_STATE_CACHED_VALID:
- log_debug(LD_EXIT,"Connection (fd %d) found cached answer for %s",
- exitconn->_base.s,
+ case CACHE_STATE_CACHED:
+ log_debug(LD_EXIT,"Connection (fd "TOR_SOCKET_T_FORMAT") found "
+ "cached answer for %s",
+ exitconn->base_.s,
escaped_safe_str(resolve->address));
- exitconn->address_ttl = resolve->ttl;
- if (resolve->is_reverse) {
- tor_assert(is_resolve);
- *hostname_out = tor_strdup(resolve->result.hostname);
- } else {
- tor_addr_from_ipv4h(&exitconn->_base.addr, resolve->result.a.addr);
- }
- return 1;
- case CACHE_STATE_CACHED_FAILED:
- log_debug(LD_EXIT,"Connection (fd %d) found cached error for %s",
- exitconn->_base.s,
- escaped_safe_str(exitconn->_base.address));
- return -1;
+
+ *resolve_out = resolve;
+
+ return set_exitconn_info_from_resolve(exitconn, resolve, hostname_out);
case CACHE_STATE_DONE:
log_err(LD_BUG, "Found a 'DONE' dns resolve still in the cache.");
tor_fragile_assert();
@@ -796,8 +916,7 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
resolve->magic = CACHED_RESOLVE_MAGIC;
resolve->state = CACHE_STATE_PENDING;
resolve->minheap_idx = -1;
- resolve->is_reverse = is_reverse;
- strlcpy(resolve->address, exitconn->_base.address, sizeof(resolve->address));
+ strlcpy(resolve->address, exitconn->base_.address, sizeof(resolve->address));
/* add this connection to the pending list */
pending_connection = tor_malloc_zero(sizeof(pending_connection_t));
@@ -810,10 +929,115 @@ dns_resolve_impl(edge_connection_t *exitconn, int is_resolve,
set_expiry(resolve, now + RESOLVE_MAX_TIMEOUT);
log_debug(LD_EXIT,"Launching %s.",
- escaped_safe_str(exitconn->_base.address));
+ escaped_safe_str(exitconn->base_.address));
assert_cache_ok();
- return launch_resolve(exitconn);
+ return launch_resolve(resolve);
+}
+
+/** Given an exit connection <b>exitconn</b>, and a cached_resolve_t
+ * <b>resolve</b> whose DNS lookups have all succeeded or failed, update the
+ * appropriate fields (address_ttl and addr) of <b>exitconn</b>.
+ *
+ * If this is a reverse lookup, set *<b>hostname_out</b> to a newly allocated
+ * copy of the name resulting hostname.
+ *
+ * Return -2 on a transient error, -1 on a permenent error, and 1 on
+ * a successful lookup.
+ */
+static int
+set_exitconn_info_from_resolve(edge_connection_t *exitconn,
+ const cached_resolve_t *resolve,
+ char **hostname_out)
+{
+ int ipv4_ok, ipv6_ok, answer_with_ipv4, r;
+ uint32_t begincell_flags;
+ const int is_resolve = exitconn->base_.purpose == EXIT_PURPOSE_RESOLVE;
+ tor_assert(exitconn);
+ tor_assert(resolve);
+
+ if (exitconn->is_reverse_dns_lookup) {
+ exitconn->address_ttl = resolve->ttl_hostname;
+ if (resolve->res_status_hostname == RES_STATUS_DONE_OK) {
+ *hostname_out = tor_strdup(resolve->result_ptr.hostname);
+ return 1;
+ } else {
+ return -1;
+ }
+ }
+
+ /* If we're here then the connection wants one or either of ipv4, ipv6, and
+ * we can give it one or both. */
+ if (is_resolve) {
+ begincell_flags = BEGIN_FLAG_IPV6_OK;
+ } else {
+ begincell_flags = exitconn->begincell_flags;
+ }
+
+ ipv4_ok = (resolve->res_status_ipv4 == RES_STATUS_DONE_OK) &&
+ ! (begincell_flags & BEGIN_FLAG_IPV4_NOT_OK);
+ ipv6_ok = (resolve->res_status_ipv6 == RES_STATUS_DONE_OK) &&
+ (begincell_flags & BEGIN_FLAG_IPV6_OK) &&
+ get_options()->IPv6Exit;
+
+ /* Now decide which one to actually give. */
+ if (ipv4_ok && ipv6_ok && is_resolve) {
+ answer_with_ipv4 = 1;
+ } else if (ipv4_ok && ipv6_ok) {
+ /* If we have both, see if our exit policy has an opinion. */
+ const uint16_t port = exitconn->base_.port;
+ int ipv4_allowed, ipv6_allowed;
+ tor_addr_t a4, a6;
+ tor_addr_from_ipv4h(&a4, resolve->result_ipv4.addr_ipv4);
+ tor_addr_from_in6(&a6, &resolve->result_ipv6.addr_ipv6);
+ ipv4_allowed = !router_compare_to_my_exit_policy(&a4, port);
+ ipv6_allowed = !router_compare_to_my_exit_policy(&a6, port);
+ if (ipv4_allowed && !ipv6_allowed) {
+ answer_with_ipv4 = 1;
+ } else if (ipv6_allowed && !ipv4_allowed) {
+ answer_with_ipv4 = 0;
+ } else {
+ /* Our exit policy would permit both. Answer with whichever the user
+ * prefers */
+ answer_with_ipv4 = !(begincell_flags &
+ BEGIN_FLAG_IPV6_PREFERRED);
+ }
+ } else {
+ /* Otherwise if one is okay, send it back. */
+ if (ipv4_ok) {
+ answer_with_ipv4 = 1;
+ } else if (ipv6_ok) {
+ answer_with_ipv4 = 0;
+ } else {
+ /* Neither one was okay. Choose based on user preference. */
+ answer_with_ipv4 = !(begincell_flags &
+ BEGIN_FLAG_IPV6_PREFERRED);
+ }
+ }
+
+ /* Finally, we write the answer back. */
+ r = 1;
+ if (answer_with_ipv4) {
+ if (resolve->res_status_ipv4 == RES_STATUS_DONE_OK) {
+ tor_addr_from_ipv4h(&exitconn->base_.addr,
+ resolve->result_ipv4.addr_ipv4);
+ } else {
+ r = evdns_err_is_transient(resolve->result_ipv4.err_ipv4) ? -2 : -1;
+ }
+
+ exitconn->address_ttl = resolve->ttl_ipv4;
+ } else {
+ if (resolve->res_status_ipv6 == RES_STATUS_DONE_OK) {
+ tor_addr_from_in6(&exitconn->base_.addr,
+ &resolve->result_ipv6.addr_ipv6);
+ } else {
+ r = evdns_err_is_transient(resolve->result_ipv6.err_ipv6) ? -2 : -1;
+ }
+
+ exitconn->address_ttl = resolve->ttl_ipv6;
+ }
+
+ return r;
}
/** Log an error and abort if conn is waiting for a DNS resolve.
@@ -826,7 +1050,7 @@ assert_connection_edge_not_dns_pending(edge_connection_t *conn)
#if 1
cached_resolve_t *resolve;
- strlcpy(search.address, conn->_base.address, sizeof(search.address));
+ strlcpy(search.address, conn->base_.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve)
return;
@@ -856,7 +1080,7 @@ assert_all_pending_dns_resolves_ok(void)
pend;
pend = pend->next) {
assert_connection_ok(TO_CONN(pend->conn), 0);
- tor_assert(!SOCKET_OK(pend->conn->_base.s));
+ tor_assert(!SOCKET_OK(pend->conn->base_.s));
tor_assert(!connection_in_array(TO_CONN(pend->conn)));
}
}
@@ -871,15 +1095,15 @@ connection_dns_remove(edge_connection_t *conn)
cached_resolve_t search;
cached_resolve_t *resolve;
- tor_assert(conn->_base.type == CONN_TYPE_EXIT);
- tor_assert(conn->_base.state == EXIT_CONN_STATE_RESOLVING);
+ tor_assert(conn->base_.type == CONN_TYPE_EXIT);
+ tor_assert(conn->base_.state == EXIT_CONN_STATE_RESOLVING);
- strlcpy(search.address, conn->_base.address, sizeof(search.address));
+ strlcpy(search.address, conn->base_.address, sizeof(search.address));
resolve = HT_FIND(cache_map, &cache_root, &search);
if (!resolve) {
log_notice(LD_BUG, "Address %s is not pending. Dropping.",
- escaped_safe_str(conn->_base.address));
+ escaped_safe_str(conn->base_.address));
return;
}
@@ -891,10 +1115,10 @@ connection_dns_remove(edge_connection_t *conn)
if (pend->conn == conn) {
resolve->pending_connections = pend->next;
tor_free(pend);
- log_debug(LD_EXIT, "First connection (fd %d) no longer waiting "
- "for resolve of %s",
- conn->_base.s,
- escaped_safe_str(conn->_base.address));
+ log_debug(LD_EXIT, "First connection (fd "TOR_SOCKET_T_FORMAT") no "
+ "longer waiting for resolve of %s",
+ conn->base_.s,
+ escaped_safe_str(conn->base_.address));
return;
} else {
for ( ; pend->next; pend = pend->next) {
@@ -903,8 +1127,9 @@ connection_dns_remove(edge_connection_t *conn)
pend->next = victim->next;
tor_free(victim);
log_debug(LD_EXIT,
- "Connection (fd %d) no longer waiting for resolve of %s",
- conn->_base.s, escaped_safe_str(conn->_base.address));
+ "Connection (fd "TOR_SOCKET_T_FORMAT") no longer waiting "
+ "for resolve of %s",
+ conn->base_.s, escaped_safe_str(conn->base_.address));
return; /* more are pending */
}
}
@@ -959,17 +1184,17 @@ dns_cancel_pending_resolve(const char *address)
escaped_safe_str(address));
while (resolve->pending_connections) {
pend = resolve->pending_connections;
- pend->conn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ pend->conn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
pendconn = pend->conn;
assert_connection_ok(TO_CONN(pendconn), 0);
- tor_assert(!SOCKET_OK(pendconn->_base.s));
- if (!pendconn->_base.marked_for_close) {
+ tor_assert(!SOCKET_OK(pendconn->base_.s));
+ if (!pendconn->base_.marked_for_close) {
connection_edge_end(pendconn, END_STREAM_REASON_RESOLVEFAILED);
}
circ = circuit_get_by_edge_conn(pendconn);
if (circ)
circuit_detach_stream(circ, pendconn);
- if (!pendconn->_base.marked_for_close)
+ if (!pendconn->base_.marked_for_close)
connection_free(TO_CONN(pendconn));
resolve->pending_connections = pend->next;
tor_free(pend);
@@ -987,47 +1212,6 @@ dns_cancel_pending_resolve(const char *address)
resolve->state = CACHE_STATE_DONE;
}
-/** Helper: adds an entry to the DNS cache mapping <b>address</b> to the ipv4
- * address <b>addr</b> (if is_reverse is 0) or the hostname <b>hostname</b> (if
- * is_reverse is 1). <b>ttl</b> is a cache ttl; <b>outcome</b> is one of
- * DNS_RESOLVE_{FAILED_TRANSIENT|FAILED_PERMANENT|SUCCEEDED}.
- **/
-static void
-add_answer_to_cache(const char *address, uint8_t is_reverse, uint32_t addr,
- const char *hostname, char outcome, uint32_t ttl)
-{
- cached_resolve_t *resolve;
- if (outcome == DNS_RESOLVE_FAILED_TRANSIENT)
- return;
-
- //log_notice(LD_EXIT, "Adding to cache: %s -> %s (%lx, %s), %d",
- // address, is_reverse?"(reverse)":"", (unsigned long)addr,
- // hostname?hostname:"NULL",(int)outcome);
-
- resolve = tor_malloc_zero(sizeof(cached_resolve_t));
- resolve->magic = CACHED_RESOLVE_MAGIC;
- resolve->state = (outcome == DNS_RESOLVE_SUCCEEDED) ?
- CACHE_STATE_CACHED_VALID : CACHE_STATE_CACHED_FAILED;
- strlcpy(resolve->address, address, sizeof(resolve->address));
- resolve->is_reverse = is_reverse;
- if (is_reverse) {
- if (outcome == DNS_RESOLVE_SUCCEEDED) {
- tor_assert(hostname);
- resolve->result.hostname = tor_strdup(hostname);
- } else {
- tor_assert(! hostname);
- resolve->result.hostname = NULL;
- }
- } else {
- tor_assert(!hostname);
- resolve->result.a.addr = addr;
- }
- resolve->ttl = ttl;
- assert_resolve_ok(resolve);
- HT_INSERT(cache_map, &cache_root, resolve);
- set_expiry(resolve, time(NULL) + dns_get_expiry_ttl(ttl));
-}
-
/** Return true iff <b>address</b> is one of the addresses we use to verify
* that well-known sites aren't being hijacked by our DNS servers. */
static INLINE int
@@ -1035,25 +1219,26 @@ is_test_address(const char *address)
{
const or_options_t *options = get_options();
return options->ServerDNSTestAddresses &&
- smartlist_string_isin_case(options->ServerDNSTestAddresses, address);
+ smartlist_contains_string_case(options->ServerDNSTestAddresses, address);
}
-/** Called on the OR side when a DNS worker or the eventdns library tells us
- * the outcome of a DNS resolve: tell all pending connections about the result
- * of the lookup, and cache the value. (<b>address</b> is a NUL-terminated
- * string containing the address to look up; <b>addr</b> is an IPv4 address in
- * host order; <b>outcome</b> is one of
- * DNS_RESOLVE_{FAILED_TRANSIENT|FAILED_PERMANENT|SUCCEEDED}.
+/** Called on the OR side when the eventdns library tells us the outcome of a
+ * single DNS resolve: remember the answer, and tell all pending connections
+ * about the result of the lookup if the lookup is now done. (<b>address</b>
+ * is a NUL-terminated string containing the address to look up;
+ * <b>query_type</b> is one of DNS_{IPv4_A,IPv6_AAAA,PTR}; <b>dns_answer</b>
+ * is DNS_OK or one of DNS_ERR_*, <b>addr</b> is an IPv4 or IPv6 address if we
+ * got one; <b>hostname</b> is a hostname fora PTR request if we got one, and
+ * <b>ttl</b> is the time-to-live of this answer, in seconds.)
*/
static void
-dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
- const char *hostname, char outcome, uint32_t ttl)
+dns_found_answer(const char *address, uint8_t query_type,
+ int dns_answer,
+ const tor_addr_t *addr,
+ const char *hostname, uint32_t ttl)
{
- pending_connection_t *pend;
cached_resolve_t search;
- cached_resolve_t *resolve, *removed;
- edge_connection_t *pendconn;
- circuit_t *circ;
+ cached_resolve_t *resolve;
assert_cache_ok();
@@ -1063,9 +1248,8 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
if (!resolve) {
int is_test_addr = is_test_address(address);
if (!is_test_addr)
- log_info(LD_EXIT,"Resolved unasked address %s; caching anyway.",
+ log_info(LD_EXIT,"Resolved unasked address %s; ignoring.",
escaped_safe_str(address));
- add_answer_to_cache(address, is_reverse, addr, hostname, outcome, ttl);
return;
}
assert_resolve_ok(resolve);
@@ -1081,46 +1265,66 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
tor_assert(resolve->pending_connections == NULL);
return;
}
- /* Removed this assertion: in fact, we'll sometimes get a double answer
- * to the same question. This can happen when we ask one worker to resolve
- * X.Y.Z., then we cancel the request, and then we ask another worker to
- * resolve X.Y.Z. */
- /* tor_assert(resolve->state == CACHE_STATE_PENDING); */
+
+ cached_resolve_add_answer(resolve, query_type, dns_answer,
+ addr, hostname, ttl);
+
+ if (cached_resolve_have_all_answers(resolve)) {
+ inform_pending_connections(resolve);
+
+ make_pending_resolve_cached(resolve);
+ }
+}
+
+/** Given a pending cached_resolve_t that we just finished resolving,
+ * inform every connection that was waiting for the outcome of that
+ * resolution. */
+static void
+inform_pending_connections(cached_resolve_t *resolve)
+{
+ pending_connection_t *pend;
+ edge_connection_t *pendconn;
+ int r;
while (resolve->pending_connections) {
+ char *hostname = NULL;
pend = resolve->pending_connections;
pendconn = pend->conn; /* don't pass complex things to the
connection_mark_for_close macro */
assert_connection_ok(TO_CONN(pendconn),time(NULL));
- if (pendconn->_base.marked_for_close) {
+
+ if (pendconn->base_.marked_for_close) {
/* prevent double-remove. */
- pendconn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
resolve->pending_connections = pend->next;
tor_free(pend);
continue;
}
- tor_addr_from_ipv4h(&pendconn->_base.addr, addr);
- pendconn->address_ttl = ttl;
- if (outcome != DNS_RESOLVE_SUCCEEDED) {
+ r = set_exitconn_info_from_resolve(pendconn,
+ resolve,
+ &hostname);
+
+ if (r < 0) {
/* prevent double-remove. */
- pendconn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
- if (pendconn->_base.purpose == EXIT_PURPOSE_CONNECT) {
+ pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ if (pendconn->base_.purpose == EXIT_PURPOSE_CONNECT) {
connection_edge_end(pendconn, END_STREAM_REASON_RESOLVEFAILED);
/* This detach must happen after we send the end cell. */
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
} else {
- send_resolved_cell(pendconn, outcome == DNS_RESOLVE_FAILED_PERMANENT ?
- RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT);
+ send_resolved_cell(pendconn, r == -1 ?
+ RESOLVED_TYPE_ERROR : RESOLVED_TYPE_ERROR_TRANSIENT,
+ NULL);
/* This detach must happen after we send the resolved cell. */
circuit_detach_stream(circuit_get_by_edge_conn(pendconn), pendconn);
}
connection_free(TO_CONN(pendconn));
} else {
- if (pendconn->_base.purpose == EXIT_PURPOSE_CONNECT) {
- tor_assert(!is_reverse);
+ circuit_t *circ;
+ if (pendconn->base_.purpose == EXIT_PURPOSE_CONNECT) {
/* prevent double-remove. */
- pend->conn->_base.state = EXIT_CONN_STATE_CONNECTING;
+ pend->conn->base_.state = EXIT_CONN_STATE_CONNECTING;
circ = circuit_get_by_edge_conn(pend->conn);
tor_assert(circ);
@@ -1136,11 +1340,11 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
} else {
/* prevent double-remove. This isn't really an accurate state,
* but it does the right thing. */
- pendconn->_base.state = EXIT_CONN_STATE_RESOLVEFAILED;
- if (is_reverse)
+ pendconn->base_.state = EXIT_CONN_STATE_RESOLVEFAILED;
+ if (pendconn->is_reverse_dns_lookup)
send_resolved_hostname_cell(pendconn, hostname);
else
- send_resolved_cell(pendconn, RESOLVED_TYPE_IPV4);
+ send_resolved_cell(pendconn, RESOLVED_TYPE_AUTO, resolve);
circ = circuit_get_by_edge_conn(pendconn);
tor_assert(circ);
circuit_detach_stream(circ, pendconn);
@@ -1149,10 +1353,23 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
}
resolve->pending_connections = pend->next;
tor_free(pend);
+ tor_free(hostname);
}
+}
+
+/** Remove a pending cached_resolve_t from the hashtable, and add a
+ * corresponding cached cached_resolve_t.
+ *
+ * This function is only necessary because of the perversity of our
+ * cache timeout code; see inline comment for ideas on eliminating it.
+ **/
+static void
+make_pending_resolve_cached(cached_resolve_t *resolve)
+{
+ cached_resolve_t *removed;
resolve->state = CACHE_STATE_DONE;
- removed = HT_REMOVE(cache_map, &cache_root, &search);
+ removed = HT_REMOVE(cache_map, &cache_root, resolve);
if (removed != resolve) {
log_err(LD_BUG, "The pending resolve we found wasn't removable from"
" the cache. Tried to purge %s (%p); instead got %s (%p).",
@@ -1161,8 +1378,42 @@ dns_found_answer(const char *address, uint8_t is_reverse, uint32_t addr,
}
assert_resolve_ok(resolve);
assert_cache_ok();
+ /* The resolve will eventually just hit the time-out in the expiry queue and
+ * expire. See fd0bafb0dedc7e2 for a brief explanation of how this got that
+ * way. XXXXX we could do better!*/
+
+ {
+ cached_resolve_t *new_resolve = tor_memdup(resolve,
+ sizeof(cached_resolve_t));
+ uint32_t ttl = UINT32_MAX;
+ new_resolve->expire = 0; /* So that set_expiry won't croak. */
+ if (resolve->res_status_hostname == RES_STATUS_DONE_OK)
+ new_resolve->result_ptr.hostname =
+ tor_strdup(resolve->result_ptr.hostname);
+
+ new_resolve->state = CACHE_STATE_CACHED;
+
+ assert_resolve_ok(new_resolve);
+ HT_INSERT(cache_map, &cache_root, new_resolve);
+
+ if ((resolve->res_status_ipv4 == RES_STATUS_DONE_OK ||
+ resolve->res_status_ipv4 == RES_STATUS_DONE_ERR) &&
+ resolve->ttl_ipv4 < ttl)
+ ttl = resolve->ttl_ipv4;
+
+ if ((resolve->res_status_ipv6 == RES_STATUS_DONE_OK ||
+ resolve->res_status_ipv6 == RES_STATUS_DONE_ERR) &&
+ resolve->ttl_ipv6 < ttl)
+ ttl = resolve->ttl_ipv6;
+
+ if ((resolve->res_status_hostname == RES_STATUS_DONE_OK ||
+ resolve->res_status_hostname == RES_STATUS_DONE_ERR) &&
+ resolve->ttl_hostname < ttl)
+ ttl = resolve->ttl_hostname;
+
+ set_expiry(new_resolve, time(NULL) + dns_get_expiry_ttl(ttl));
+ }
- add_answer_to_cache(address, is_reverse, addr, hostname, outcome, ttl);
assert_cache_ok();
}
@@ -1194,13 +1445,14 @@ configure_nameservers(int force)
const or_options_t *options;
const char *conf_fname;
struct stat st;
- int r;
+ int r, flags;
options = get_options();
conf_fname = options->ServerDNSResolvConfFile;
#ifndef _WIN32
if (!conf_fname)
conf_fname = "/etc/resolv.conf";
#endif
+ flags = DNS_OPTIONS_ALL;
if (!the_evdns_base) {
if (!(the_evdns_base = evdns_base_new(tor_libevent_get_base(), 0))) {
@@ -1210,31 +1462,26 @@ configure_nameservers(int force)
}
#ifdef HAVE_EVDNS_SET_DEFAULT_OUTGOING_BIND_ADDRESS
- if (options->OutboundBindAddress) {
- tor_addr_t addr;
- if (tor_addr_parse(&addr, options->OutboundBindAddress) < 0) {
- log_warn(LD_CONFIG,"Outbound bind address '%s' didn't parse. Ignoring.",
- options->OutboundBindAddress);
+ if (! tor_addr_is_null(&options->OutboundBindAddressIPv4_)) {
+ int socklen;
+ struct sockaddr_storage ss;
+ socklen = tor_addr_to_sockaddr(&options->OutboundBindAddressIPv4_, 0,
+ (struct sockaddr *)&ss, sizeof(ss));
+ if (socklen <= 0) {
+ log_warn(LD_BUG, "Couldn't convert outbound bind address to sockaddr."
+ " Ignoring.");
} else {
- int socklen;
- struct sockaddr_storage ss;
- socklen = tor_addr_to_sockaddr(&addr, 0,
- (struct sockaddr *)&ss, sizeof(ss));
- if (socklen <= 0) {
- log_warn(LD_BUG, "Couldn't convert outbound bind address to sockaddr."
- " Ignoring.");
- } else {
- evdns_base_set_default_outgoing_bind_address(the_evdns_base,
- (struct sockaddr *)&ss,
- socklen);
- }
+ evdns_base_set_default_outgoing_bind_address(the_evdns_base,
+ (struct sockaddr *)&ss,
+ socklen);
}
}
#endif
evdns_set_log_fn(evdns_log_cb);
if (conf_fname) {
- if (stat(conf_fname, &st)) {
+ log_debug(LD_FS, "stat()ing %s", conf_fname);
+ if (stat(sandbox_intern_string(conf_fname), &st)) {
log_warn(LD_EXIT, "Unable to stat resolver configuration in '%s': %s",
conf_fname, strerror(errno));
goto err;
@@ -1248,9 +1495,17 @@ configure_nameservers(int force)
evdns_base_search_clear(the_evdns_base);
evdns_base_clear_nameservers_and_suspend(the_evdns_base);
}
+#if defined(DNS_OPTION_HOSTSFILE) && defined(USE_LIBSECCOMP)
+ if (flags & DNS_OPTION_HOSTSFILE) {
+ flags ^= DNS_OPTION_HOSTSFILE;
+ log_debug(LD_FS, "Loading /etc/hosts");
+ evdns_base_load_hosts(the_evdns_base,
+ sandbox_intern_string("/etc/hosts"));
+ }
+#endif
log_info(LD_EXIT, "Parsing resolver configuration in '%s'", conf_fname);
- if ((r = evdns_base_resolv_conf_parse(the_evdns_base,
- DNS_OPTIONS_ALL, conf_fname))) {
+ if ((r = evdns_base_resolv_conf_parse(the_evdns_base, flags,
+ sandbox_intern_string(conf_fname)))) {
log_warn(LD_EXIT, "Unable to parse '%s', or no nameservers in '%s' (%d)",
conf_fname, conf_fname, r);
goto err;
@@ -1331,23 +1586,62 @@ static void
evdns_callback(int result, char type, int count, int ttl, void *addresses,
void *arg)
{
- char *string_address = arg;
- uint8_t is_reverse = 0;
- int status = DNS_RESOLVE_FAILED_PERMANENT;
- uint32_t addr = 0;
+ char *arg_ = arg;
+ uint8_t orig_query_type = arg_[0];
+ char *string_address = arg_ + 1;
+ tor_addr_t addr;
const char *hostname = NULL;
int was_wildcarded = 0;
+ tor_addr_make_unspec(&addr);
+
+ /* Keep track of whether IPv6 is working */
+ if (type == DNS_IPv6_AAAA) {
+ if (result == DNS_ERR_TIMEOUT) {
+ ++n_ipv6_timeouts;
+ }
+
+ if (n_ipv6_timeouts > 10 &&
+ n_ipv6_timeouts > n_ipv6_requests_made / 2) {
+ if (! dns_is_broken_for_ipv6) {
+ log_notice(LD_EXIT, "More than half of our IPv6 requests seem to "
+ "have timed out. I'm going to assume I can't get AAAA "
+ "responses.");
+ dns_is_broken_for_ipv6 = 1;
+ }
+ }
+ }
+
if (result == DNS_ERR_NONE) {
if (type == DNS_IPv4_A && count) {
char answer_buf[INET_NTOA_BUF_LEN+1];
- struct in_addr in;
char *escaped_address;
uint32_t *addrs = addresses;
- in.s_addr = addrs[0];
- addr = ntohl(addrs[0]);
- status = DNS_RESOLVE_SUCCEEDED;
- tor_inet_ntoa(&in, answer_buf, sizeof(answer_buf));
+ tor_addr_from_ipv4n(&addr, addrs[0]);
+
+ tor_addr_to_str(answer_buf, &addr, sizeof(answer_buf), 0);
+ escaped_address = esc_for_log(string_address);
+
+ if (answer_is_wildcarded(answer_buf)) {
+ log_debug(LD_EXIT, "eventdns said that %s resolves to ISP-hijacked "
+ "address %s; treating as a failure.",
+ safe_str(escaped_address),
+ escaped_safe_str(answer_buf));
+ was_wildcarded = 1;
+ tor_addr_make_unspec(&addr);
+ result = DNS_ERR_NOTEXIST;
+ } else {
+ log_debug(LD_EXIT, "eventdns said that %s resolves to %s",
+ safe_str(escaped_address),
+ escaped_safe_str(answer_buf));
+ }
+ tor_free(escaped_address);
+ } else if (type == DNS_IPv6_AAAA && count) {
+ char answer_buf[TOR_ADDR_BUF_LEN];
+ char *escaped_address;
+ struct in6_addr *addrs = addresses;
+ tor_addr_from_in6(&addr, &addrs[0]);
+ tor_inet_ntop(AF_INET6, &addrs[0], answer_buf, sizeof(answer_buf));
escaped_address = esc_for_log(string_address);
if (answer_is_wildcarded(answer_buf)) {
@@ -1356,8 +1650,8 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
safe_str(escaped_address),
escaped_safe_str(answer_buf));
was_wildcarded = 1;
- addr = 0;
- status = DNS_RESOLVE_FAILED_PERMANENT;
+ tor_addr_make_unspec(&addr);
+ result = DNS_ERR_NOTEXIST;
} else {
log_debug(LD_EXIT, "eventdns said that %s resolves to %s",
safe_str(escaped_address),
@@ -1366,9 +1660,7 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
tor_free(escaped_address);
} else if (type == DNS_PTR && count) {
char *escaped_address;
- is_reverse = 1;
hostname = ((char**)addresses)[0];
- status = DNS_RESOLVE_SUCCEEDED;
escaped_address = esc_for_log(string_address);
log_debug(LD_EXIT, "eventdns said that %s resolves to %s",
safe_str(escaped_address),
@@ -1381,9 +1673,6 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
log_warn(LD_BUG, "eventdns returned no addresses or error for %s!",
escaped_safe_str(string_address));
}
- } else {
- if (evdns_err_is_transient(result))
- status = DNS_RESOLVE_FAILED_TRANSIENT;
}
if (was_wildcarded) {
if (is_test_address(string_address)) {
@@ -1392,23 +1681,78 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
add_wildcarded_test_address(string_address);
}
}
+
+ if (orig_query_type && type && orig_query_type != type) {
+ log_warn(LD_BUG, "Weird; orig_query_type == %d but type == %d",
+ (int)orig_query_type, (int)type);
+ }
if (result != DNS_ERR_SHUTDOWN)
- dns_found_answer(string_address, is_reverse, addr, hostname, status, ttl);
- tor_free(string_address);
+ dns_found_answer(string_address, orig_query_type,
+ result, &addr, hostname, ttl);
+
+ tor_free(arg_);
+}
+
+/** Start a single DNS resolve for <b>address</b> (if <b>query_type</b> is
+ * DNS_IPv4_A or DNS_IPv6_AAAA) <b>ptr_address</b> (if <b>query_type</b> is
+ * DNS_PTR). Return 0 if we launched the request, -1 otherwise. */
+static int
+launch_one_resolve(const char *address, uint8_t query_type,
+ const tor_addr_t *ptr_address)
+{
+ const int options = get_options()->ServerDNSSearchDomains ? 0
+ : DNS_QUERY_NO_SEARCH;
+ const size_t addr_len = strlen(address);
+ struct evdns_request *req = 0;
+ char *addr = tor_malloc(addr_len + 2);
+ addr[0] = (char) query_type;
+ memcpy(addr+1, address, addr_len + 1);
+
+ switch (query_type) {
+ case DNS_IPv4_A:
+ req = evdns_base_resolve_ipv4(the_evdns_base,
+ address, options, evdns_callback, addr);
+ break;
+ case DNS_IPv6_AAAA:
+ req = evdns_base_resolve_ipv6(the_evdns_base,
+ address, options, evdns_callback, addr);
+ ++n_ipv6_requests_made;
+ break;
+ case DNS_PTR:
+ if (tor_addr_family(ptr_address) == AF_INET)
+ req = evdns_base_resolve_reverse(the_evdns_base,
+ tor_addr_to_in(ptr_address),
+ DNS_QUERY_NO_SEARCH,
+ evdns_callback, addr);
+ else if (tor_addr_family(ptr_address) == AF_INET6)
+ req = evdns_base_resolve_reverse_ipv6(the_evdns_base,
+ tor_addr_to_in6(ptr_address),
+ DNS_QUERY_NO_SEARCH,
+ evdns_callback, addr);
+ else
+ log_warn(LD_BUG, "Called with PTR query and unexpected address family");
+ break;
+ default:
+ log_warn(LD_BUG, "Called with unexpectd query type %d", (int)query_type);
+ break;
+ }
+
+ if (req) {
+ return 0;
+ } else {
+ tor_free(addr);
+ return -1;
+ }
}
/** For eventdns: start resolving as necessary to find the target for
* <b>exitconn</b>. Returns -1 on error, -2 on transient error,
* 0 on "resolve launched." */
static int
-launch_resolve(edge_connection_t *exitconn)
+launch_resolve(cached_resolve_t *resolve)
{
- char *addr;
- struct evdns_request *req = NULL;
tor_addr_t a;
int r;
- int options = get_options()->ServerDNSSearchDomains ? 0
- : DNS_QUERY_NO_SEARCH;
if (get_options()->DisableNetwork)
return -1;
@@ -1422,40 +1766,45 @@ launch_resolve(edge_connection_t *exitconn)
}
}
- addr = tor_strdup(exitconn->_base.address);
-
r = tor_addr_parse_PTR_name(
- &a, exitconn->_base.address, AF_UNSPEC, 0);
+ &a, resolve->address, AF_UNSPEC, 0);
tor_assert(the_evdns_base);
if (r == 0) {
log_info(LD_EXIT, "Launching eventdns request for %s",
- escaped_safe_str(exitconn->_base.address));
- req = evdns_base_resolve_ipv4(the_evdns_base,
- exitconn->_base.address, options,
- evdns_callback, addr);
+ escaped_safe_str(resolve->address));
+ resolve->res_status_ipv4 = RES_STATUS_INFLIGHT;
+ if (get_options()->IPv6Exit)
+ resolve->res_status_ipv6 = RES_STATUS_INFLIGHT;
+
+ if (launch_one_resolve(resolve->address, DNS_IPv4_A, NULL) < 0) {
+ resolve->res_status_ipv4 = 0;
+ r = -1;
+ }
+
+ if (r==0 && get_options()->IPv6Exit) {
+ /* We ask for an IPv6 address for *everything*. */
+ if (launch_one_resolve(resolve->address, DNS_IPv6_AAAA, NULL) < 0) {
+ resolve->res_status_ipv6 = 0;
+ r = -1;
+ }
+ }
} else if (r == 1) {
+ r = 0;
log_info(LD_EXIT, "Launching eventdns reverse request for %s",
- escaped_safe_str(exitconn->_base.address));
- if (tor_addr_family(&a) == AF_INET)
- req = evdns_base_resolve_reverse(the_evdns_base,
- tor_addr_to_in(&a), DNS_QUERY_NO_SEARCH,
- evdns_callback, addr);
- else
- req = evdns_base_resolve_reverse_ipv6(the_evdns_base,
- tor_addr_to_in6(&a), DNS_QUERY_NO_SEARCH,
- evdns_callback, addr);
+ escaped_safe_str(resolve->address));
+ resolve->res_status_hostname = RES_STATUS_INFLIGHT;
+ if (launch_one_resolve(resolve->address, DNS_PTR, &a) < 0) {
+ resolve->res_status_hostname = 0;
+ r = -1;
+ }
} else if (r == -1) {
log_warn(LD_BUG, "Somehow a malformed in-addr.arpa address reached here.");
}
- r = 0;
- if (!req) {
+ if (r < 0) {
log_fn(LOG_PROTOCOL_WARN, LD_EXIT, "eventdns rejected address %s.",
- escaped_safe_str(addr));
- r = -1;
- tor_free(addr); /* There is no evdns request in progress; stop
- * addr from getting leaked. */
+ escaped_safe_str(resolve->address));
}
return r;
}
@@ -1488,8 +1837,8 @@ static int dns_wildcarded_test_address_notice_given = 0;
/** True iff all addresses seem to be getting wildcarded. */
static int dns_is_completely_invalid = 0;
-/** Called when we see <b>id</b> (a dotted quad) in response to a request for
- * a hopefully bogus address. */
+/** Called when we see <b>id</b> (a dotted quad or IPv6 address) in response
+ * to a request for a hopefully bogus address. */
static void
wildcard_increment_answer(const char *id)
{
@@ -1506,8 +1855,8 @@ wildcard_increment_answer(const char *id)
if (*ip > 5 && n_wildcard_requests > 10) {
if (!dns_wildcard_list) dns_wildcard_list = smartlist_new();
- if (!smartlist_string_isin(dns_wildcard_list, id)) {
- log(dns_wildcard_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
+ if (!smartlist_contains_string(dns_wildcard_list, id)) {
+ tor_log(dns_wildcard_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
"Your DNS provider has given \"%s\" as an answer for %d different "
"invalid addresses. Apparently they are hijacking DNS failures. "
"I'll try to correct for this by treating future occurrences of "
@@ -1529,7 +1878,8 @@ add_wildcarded_test_address(const char *address)
if (!dns_wildcarded_test_address_list)
dns_wildcarded_test_address_list = smartlist_new();
- if (smartlist_string_isin_case(dns_wildcarded_test_address_list, address))
+ if (smartlist_contains_string_case(dns_wildcarded_test_address_list,
+ address))
return;
n_test_addrs = get_options()->ServerDNSTestAddresses ?
@@ -1538,7 +1888,7 @@ add_wildcarded_test_address(const char *address)
smartlist_add(dns_wildcarded_test_address_list, tor_strdup(address));
n = smartlist_len(dns_wildcarded_test_address_list);
if (n > n_test_addrs/2) {
- log(dns_wildcarded_test_address_notice_given ? LOG_INFO : LOG_NOTICE,
+ tor_log(dns_wildcarded_test_address_notice_given ? LOG_INFO : LOG_NOTICE,
LD_EXIT, "Your DNS provider tried to redirect \"%s\" to a junk "
"address. It has done this with %d test addresses so far. I'm "
"going to stop being an exit node for now, since our DNS seems so "
@@ -1561,18 +1911,28 @@ evdns_wildcard_check_callback(int result, char type, int count, int ttl,
{
(void)ttl;
++n_wildcard_requests;
- if (result == DNS_ERR_NONE && type == DNS_IPv4_A && count) {
- uint32_t *addrs = addresses;
- int i;
+ if (result == DNS_ERR_NONE && count) {
char *string_address = arg;
- for (i = 0; i < count; ++i) {
- char answer_buf[INET_NTOA_BUF_LEN+1];
- struct in_addr in;
- in.s_addr = addrs[i];
- tor_inet_ntoa(&in, answer_buf, sizeof(answer_buf));
- wildcard_increment_answer(answer_buf);
+ int i;
+ if (type == DNS_IPv4_A) {
+ const uint32_t *addrs = addresses;
+ for (i = 0; i < count; ++i) {
+ char answer_buf[INET_NTOA_BUF_LEN+1];
+ struct in_addr in;
+ in.s_addr = addrs[i];
+ tor_inet_ntoa(&in, answer_buf, sizeof(answer_buf));
+ wildcard_increment_answer(answer_buf);
+ }
+ } else if (type == DNS_IPv6_AAAA) {
+ const struct in6_addr *addrs = addresses;
+ for (i = 0; i < count; ++i) {
+ char answer_buf[TOR_ADDR_BUF_LEN+1];
+ tor_inet_ntop(AF_INET6, &addrs[i], answer_buf, sizeof(answer_buf));
+ wildcard_increment_answer(answer_buf);
+ }
}
- log(dns_wildcard_one_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
+
+ tor_log(dns_wildcard_one_notice_given ? LOG_INFO : LOG_NOTICE, LD_EXIT,
"Your DNS provider gave an answer for \"%s\", which "
"is not supposed to exist. Apparently they are hijacking "
"DNS failures. Trying to correct for this. We've noticed %d "
@@ -1588,7 +1948,8 @@ evdns_wildcard_check_callback(int result, char type, int count, int ttl,
* <b>min_len</b> and <b>max_len</b> random (plausible) characters followed by
* <b>suffix</b> */
static void
-launch_wildcard_check(int min_len, int max_len, const char *suffix)
+launch_wildcard_check(int min_len, int max_len, int is_ipv6,
+ const char *suffix)
{
char *addr;
struct evdns_request *req;
@@ -1598,7 +1959,15 @@ launch_wildcard_check(int min_len, int max_len, const char *suffix)
"domains with request for bogus hostname \"%s\"", addr);
tor_assert(the_evdns_base);
- req = evdns_base_resolve_ipv4(
+ if (is_ipv6)
+ req = evdns_base_resolve_ipv6(
+ the_evdns_base,
+ /* This "addr" tells us which address to resolve */
+ addr,
+ DNS_QUERY_NO_SEARCH, evdns_wildcard_check_callback,
+ /* This "addr" is an argument to the callback*/ addr);
+ else
+ req = evdns_base_resolve_ipv4(
the_evdns_base,
/* This "addr" tells us which address to resolve */
addr,
@@ -1613,10 +1982,9 @@ launch_wildcard_check(int min_len, int max_len, const char *suffix)
/** Launch attempts to resolve a bunch of known-good addresses (configured in
* ServerDNSTestAddresses). [Callback for a libevent timer] */
static void
-launch_test_addresses(int fd, short event, void *args)
+launch_test_addresses(evutil_socket_t fd, short event, void *args)
{
const or_options_t *options = get_options();
- struct evdns_request *req;
(void)fd;
(void)event;
(void)args;
@@ -1629,21 +1997,22 @@ launch_test_addresses(int fd, short event, void *args)
/* This situation is worse than the failure-hijacking situation. When this
* happens, we're no good for DNS requests at all, and we shouldn't really
* be an exit server.*/
- if (!options->ServerDNSTestAddresses)
- return;
- tor_assert(the_evdns_base);
- SMARTLIST_FOREACH_BEGIN(options->ServerDNSTestAddresses,
- const char *, address) {
- char *a = tor_strdup(address);
- req = evdns_base_resolve_ipv4(the_evdns_base,
- address, DNS_QUERY_NO_SEARCH, evdns_callback, a);
+ if (options->ServerDNSTestAddresses) {
- if (!req) {
- log_info(LD_EXIT, "eventdns rejected test address %s",
- escaped_safe_str(address));
- tor_free(a);
- }
- } SMARTLIST_FOREACH_END(address);
+ tor_assert(the_evdns_base);
+ SMARTLIST_FOREACH_BEGIN(options->ServerDNSTestAddresses,
+ const char *, address) {
+ if (launch_one_resolve(address, DNS_IPv4_A, NULL) < 0) {
+ log_info(LD_EXIT, "eventdns rejected test address %s",
+ escaped_safe_str(address));
+ }
+
+ if (launch_one_resolve(address, DNS_IPv6_AAAA, NULL) < 0) {
+ log_info(LD_EXIT, "eventdns rejected test address %s",
+ escaped_safe_str(address));
+ }
+ } SMARTLIST_FOREACH_END(address);
+ }
}
#define N_WILDCARD_CHECKS 2
@@ -1655,27 +2024,29 @@ launch_test_addresses(int fd, short event, void *args)
static void
dns_launch_wildcard_checks(void)
{
- int i;
+ int i, ipv6;
log_info(LD_EXIT, "Launching checks to see whether our nameservers like "
"to hijack DNS failures.");
- for (i = 0; i < N_WILDCARD_CHECKS; ++i) {
- /* RFC2606 reserves these. Sadly, some DNS hijackers, in a silly attempt
- * to 'comply' with rfc2606, refrain from giving A records for these.
- * This is the standards-compliance equivalent of making sure that your
- * crackhouse's elevator inspection certificate is up to date.
- */
- launch_wildcard_check(2, 16, ".invalid");
- launch_wildcard_check(2, 16, ".test");
-
- /* These will break specs if there are ever any number of
- * 8+-character top-level domains. */
- launch_wildcard_check(8, 16, "");
-
- /* Try some random .com/org/net domains. This will work fine so long as
- * not too many resolve to the same place. */
- launch_wildcard_check(8, 16, ".com");
- launch_wildcard_check(8, 16, ".org");
- launch_wildcard_check(8, 16, ".net");
+ for (ipv6 = 0; ipv6 <= 1; ++ipv6) {
+ for (i = 0; i < N_WILDCARD_CHECKS; ++i) {
+ /* RFC2606 reserves these. Sadly, some DNS hijackers, in a silly
+ * attempt to 'comply' with rfc2606, refrain from giving A records for
+ * these. This is the standards-compliance equivalent of making sure
+ * that your crackhouse's elevator inspection certificate is up to date.
+ */
+ launch_wildcard_check(2, 16, ipv6, ".invalid");
+ launch_wildcard_check(2, 16, ipv6, ".test");
+
+ /* These will break specs if there are ever any number of
+ * 8+-character top-level domains. */
+ launch_wildcard_check(8, 16, ipv6, "");
+
+ /* Try some random .com/org/net domains. This will work fine so long as
+ * not too many resolve to the same place. */
+ launch_wildcard_check(8, 16, ipv6, ".com");
+ launch_wildcard_check(8, 16, ipv6, ".org");
+ launch_wildcard_check(8, 16, ipv6, ".net");
+ }
}
}
@@ -1709,15 +2080,24 @@ dns_seems_to_be_broken(void)
return dns_is_completely_invalid;
}
+/** Return true iff we think that IPv6 hostname lookup is broken */
+int
+dns_seems_to_be_broken_for_ipv6(void)
+{
+ return dns_is_broken_for_ipv6;
+}
+
/** Forget what we've previously learned about our DNS servers' correctness. */
void
dns_reset_correctness_checks(void)
{
- strmap_free(dns_wildcard_response_count, _tor_free);
+ strmap_free(dns_wildcard_response_count, tor_free_);
dns_wildcard_response_count = NULL;
n_wildcard_requests = 0;
+ n_ipv6_requests_made = n_ipv6_timeouts = 0;
+
if (dns_wildcard_list) {
SMARTLIST_FOREACH(dns_wildcard_list, char *, cp, tor_free(cp));
smartlist_clear(dns_wildcard_list);
@@ -1728,7 +2108,8 @@ dns_reset_correctness_checks(void)
smartlist_clear(dns_wildcarded_test_address_list);
}
dns_wildcard_one_notice_given = dns_wildcard_notice_given =
- dns_wildcarded_test_address_notice_given = dns_is_completely_invalid = 0;
+ dns_wildcarded_test_address_notice_given = dns_is_completely_invalid =
+ dns_is_broken_for_ipv6 = 0;
}
/** Return true iff we have noticed that the dotted-quad <b>ip</b> has been
@@ -1736,7 +2117,7 @@ dns_reset_correctness_checks(void)
static int
answer_is_wildcarded(const char *ip)
{
- return dns_wildcard_list && smartlist_string_isin(dns_wildcard_list, ip);
+ return dns_wildcard_list && smartlist_contains_string(dns_wildcard_list, ip);
}
/** Exit with an assertion if <b>resolve</b> is corrupt. */
@@ -1752,11 +2133,14 @@ assert_resolve_ok(cached_resolve_t *resolve)
}
if (resolve->state == CACHE_STATE_PENDING ||
resolve->state == CACHE_STATE_DONE) {
+#if 0
tor_assert(!resolve->ttl);
if (resolve->is_reverse)
- tor_assert(!resolve->result.hostname);
+ tor_assert(!resolve->hostname);
else
- tor_assert(!resolve->result.a.addr);
+ tor_assert(!resolve->result_ipv4.addr_ipv4);
+#endif
+ /*XXXXX ADD MORE */
}
}
@@ -1779,18 +2163,18 @@ dump_dns_mem_usage(int severity)
/* Print out the count and estimated size of our &cache_root. It undercounts
hostnames in cached reverse resolves.
*/
- log(severity, LD_MM, "Our DNS cache has %d entries.", hash_count);
- log(severity, LD_MM, "Our DNS cache size is approximately %u bytes.",
+ tor_log(severity, LD_MM, "Our DNS cache has %d entries.", hash_count);
+ tor_log(severity, LD_MM, "Our DNS cache size is approximately %u bytes.",
(unsigned)hash_mem);
}
#ifdef DEBUG_DNS_CACHE
/** Exit with an assertion if the DNS cache is corrupt. */
static void
-_assert_cache_ok(void)
+assert_cache_ok_(void)
{
cached_resolve_t **resolve;
- int bad_rep = _cache_map_HT_REP_IS_BAD(&cache_root);
+ int bad_rep = HT_REP_IS_BAD_(cache_map, &cache_root);
if (bad_rep) {
log_err(LD_BUG, "Bad rep type %d on dns cache hash table", bad_rep);
tor_assert(!bad_rep);
@@ -1804,7 +2188,7 @@ _assert_cache_ok(void)
return;
smartlist_pqueue_assert_ok(cached_resolve_pqueue,
- _compare_cached_resolves_by_expiry,
+ compare_cached_resolves_by_expiry_,
STRUCT_OFFSET(cached_resolve_t, minheap_idx));
SMARTLIST_FOREACH(cached_resolve_pqueue, cached_resolve_t *, res,
diff --git a/src/or/dns.h b/src/or/dns.h
index 8c8b476ac..022cd4ac6 100644
--- a/src/or/dns.h
+++ b/src/or/dns.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for dns.c.
**/
-#ifndef _TOR_DNS_H
-#define _TOR_DNS_H
+#ifndef TOR_DNS_H
+#define TOR_DNS_H
int dns_init(void);
int has_dns_init_failed(void);
@@ -24,6 +24,7 @@ void dns_cancel_pending_resolve(const char *question);
int dns_resolve(edge_connection_t *exitconn);
void dns_launch_correctness_checks(void);
int dns_seems_to_be_broken(void);
+int dns_seems_to_be_broken_for_ipv6(void);
void dns_reset_correctness_checks(void);
void dump_dns_mem_usage(int severity);
diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c
index 69adcef9e..ecd45be77 100644
--- a/src/or/dnsserv.c
+++ b/src/or/dnsserv.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -35,7 +35,7 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
entry_connection_t *entry_conn;
edge_connection_t *conn;
int i = 0;
- struct evdns_server_question *q = NULL;
+ struct evdns_server_question *q = NULL, *supported_q = NULL;
struct sockaddr_storage addr;
struct sockaddr *sa;
int addrlen;
@@ -87,30 +87,37 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
for (i = 0; i < req->nquestions; ++i) {
if (req->questions[i]->dns_question_class != EVDNS_CLASS_INET)
continue;
+ if (! q)
+ q = req->questions[i];
switch (req->questions[i]->type) {
case EVDNS_TYPE_A:
+ case EVDNS_TYPE_AAAA:
case EVDNS_TYPE_PTR:
- q = req->questions[i];
+ /* We always pick the first one of these questions, if there is
+ one. */
+ if (! supported_q)
+ supported_q = q;
+ break;
default:
break;
}
}
+ if (supported_q)
+ q = supported_q;
if (!q) {
log_info(LD_APP, "None of the questions we got were ones we're willing "
"to support. Sending NOTIMPL.");
evdns_server_request_respond(req, DNS_ERR_NOTIMPL);
return;
}
- if (q->type != EVDNS_TYPE_A) {
- tor_assert(q->type == EVDNS_TYPE_PTR);
- }
/* Make sure the name isn't too long: This should be impossible, I think. */
if (err == DNS_ERR_NONE && strlen(q->name) > MAX_SOCKS_ADDR_LEN-1)
err = DNS_ERR_FORMAT;
- if (err != DNS_ERR_NONE) {
- /* We got an error? Then send back an answer immediately; we're done. */
+ if (err != DNS_ERR_NONE || !supported_q) {
+ /* We got an error? There's no question we're willing to answer? Then
+ * send back an answer immediately; we're done. */
evdns_server_request_respond(req, err);
return;
}
@@ -125,15 +132,28 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
TO_CONN(conn)->port = port;
TO_CONN(conn)->address = tor_dup_addr(&tor_addr);
- if (q->type == EVDNS_TYPE_A)
+ if (q->type == EVDNS_TYPE_A || q->type == EVDNS_TYPE_AAAA ||
+ q->type == EVDNS_QTYPE_ALL) {
entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE;
- else
+ } else {
+ tor_assert(q->type == EVDNS_TYPE_PTR);
entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ }
+
+ if (q->type == EVDNS_TYPE_A || q->type == EVDNS_QTYPE_ALL) {
+ entry_conn->ipv4_traffic_ok = 1;
+ entry_conn->ipv6_traffic_ok = 0;
+ entry_conn->prefer_ipv6_traffic = 0;
+ } else if (q->type == EVDNS_TYPE_AAAA) {
+ entry_conn->ipv4_traffic_ok = 0;
+ entry_conn->ipv6_traffic_ok = 1;
+ entry_conn->prefer_ipv6_traffic = 1;
+ }
strlcpy(entry_conn->socks_request->address, q->name,
sizeof(entry_conn->socks_request->address));
- entry_conn->socks_request->listener_type = listener->_base.type;
+ entry_conn->socks_request->listener_type = listener->base_.type;
entry_conn->dns_server_request = req;
entry_conn->isolation_flags = listener->isolation_flags;
entry_conn->session_group = listener->session_group;
@@ -146,7 +166,7 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
return;
}
- control_event_stream_status(entry_conn, STREAM_EVENT_NEW, 0);
+ control_event_stream_status(entry_conn, STREAM_EVENT_NEW_RESOLVE, 0);
/* Now, unless a controller asked us to leave streams unattached,
* throw the connection over to get rewritten (which will
@@ -169,7 +189,8 @@ evdns_server_callback(struct evdns_server_request *req, void *data_)
* response; -1 if we couldn't launch the request.
*/
int
-dnsserv_launch_request(const char *name, int reverse)
+dnsserv_launch_request(const char *name, int reverse,
+ control_connection_t *control_conn)
{
entry_connection_t *entry_conn;
edge_connection_t *conn;
@@ -178,7 +199,26 @@ dnsserv_launch_request(const char *name, int reverse)
/* Make a new dummy AP connection, and attach the request to it. */
entry_conn = entry_connection_new(CONN_TYPE_AP, AF_INET);
conn = ENTRY_TO_EDGE_CONN(entry_conn);
- conn->_base.state = AP_CONN_STATE_RESOLVE_WAIT;
+ conn->base_.state = AP_CONN_STATE_RESOLVE_WAIT;
+
+ tor_addr_copy(&TO_CONN(conn)->addr, &control_conn->base_.addr);
+#ifdef AF_UNIX
+ /*
+ * The control connection can be AF_UNIX and if so tor_dup_addr will
+ * unhelpfully say "<unknown address type>"; say "(Tor_internal)"
+ * instead.
+ */
+ if (control_conn->base_.socket_family == AF_UNIX) {
+ TO_CONN(conn)->port = 0;
+ TO_CONN(conn)->address = tor_strdup("(Tor_internal)");
+ } else {
+ TO_CONN(conn)->port = control_conn->base_.port;
+ TO_CONN(conn)->address = tor_dup_addr(&control_conn->base_.addr);
+ }
+#else
+ TO_CONN(conn)->port = control_conn->base_.port;
+ TO_CONN(conn)->address = tor_dup_addr(&control_conn->base_.addr);
+#endif
if (reverse)
entry_conn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
@@ -202,6 +242,8 @@ dnsserv_launch_request(const char *name, int reverse)
return -1;
}
+ control_event_stream_status(entry_conn, STREAM_EVENT_NEW_RESOLVE, 0);
+
/* Now, unless a controller asked us to leave streams unattached,
* throw the connection over to get rewritten (which will
* answer it immediately if it's in the cache, or completely bogus, or
@@ -289,8 +331,9 @@ dnsserv_resolved(entry_connection_t *conn,
* or more of the questions in the request); then, call
* evdns_server_request_respond. */
if (answer_type == RESOLVED_TYPE_IPV6) {
- log_info(LD_APP, "Got an IPv6 answer; that's not implemented.");
- err = DNS_ERR_NOTIMPL;
+ evdns_server_request_add_aaaa_reply(req,
+ name,
+ 1, answer, ttl);
} else if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4 &&
conn->socks_request->command == SOCKS_COMMAND_RESOLVE) {
evdns_server_request_add_a_reply(req,
diff --git a/src/or/dnsserv.h b/src/or/dnsserv.h
index 3aaa038d2..687a77e59 100644
--- a/src/or/dnsserv.h
+++ b/src/or/dnsserv.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for dnsserv.c.
**/
-#ifndef _TOR_DNSSERV_H
-#define _TOR_DNSSERV_H
+#ifndef TOR_DNSSERV_H
+#define TOR_DNSSERV_H
void dnsserv_configure_listener(connection_t *conn);
void dnsserv_close_listener(connection_t *conn);
@@ -20,7 +20,8 @@ void dnsserv_resolved(entry_connection_t *conn,
const char *answer,
int ttl);
void dnsserv_reject_request(entry_connection_t *conn);
-int dnsserv_launch_request(const char *name, int is_reverse);
+int dnsserv_launch_request(const char *name, int is_reverse,
+ control_connection_t *control_conn);
#endif
diff --git a/src/or/entrynodes.c b/src/or/entrynodes.c
new file mode 100644
index 000000000..957217ac6
--- /dev/null
+++ b/src/or/entrynodes.c
@@ -0,0 +1,2327 @@
+/* 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 entrynodes.c
+ * \brief Code to manage our fixed first nodes for various functions.
+ *
+ * Entry nodes can be guards (for general use) or bridges (for censorship
+ * circumvention).
+ **/
+
+#include "or.h"
+#include "circpathbias.h"
+#include "circuitbuild.h"
+#include "circuitstats.h"
+#include "config.h"
+#include "confparse.h"
+#include "connection.h"
+#include "connection_or.h"
+#include "control.h"
+#include "directory.h"
+#include "entrynodes.h"
+#include "main.h"
+#include "microdesc.h"
+#include "networkstatus.h"
+#include "nodelist.h"
+#include "policies.h"
+#include "router.h"
+#include "routerlist.h"
+#include "routerparse.h"
+#include "routerset.h"
+#include "transports.h"
+#include "statefile.h"
+
+/** Information about a configured bridge. Currently this just matches the
+ * ones in the torrc file, but one day we may be able to learn about new
+ * bridges on our own, and remember them in the state file. */
+typedef struct {
+ /** Address of the bridge. */
+ tor_addr_t addr;
+ /** TLS port for the bridge. */
+ uint16_t port;
+ /** Boolean: We are re-parsing our bridge list, and we are going to remove
+ * this one if we don't find it in the list of configured bridges. */
+ unsigned marked_for_removal : 1;
+ /** Expected identity digest, or all zero bytes if we don't know what the
+ * digest should be. */
+ char identity[DIGEST_LEN];
+
+ /** Name of pluggable transport protocol taken from its config line. */
+ char *transport_name;
+
+ /** When should we next try to fetch a descriptor for this bridge? */
+ download_status_t fetch_status;
+
+ /** A smartlist of k=v values to be passed to the SOCKS proxy, if
+ transports are used for this bridge. */
+ smartlist_t *socks_args;
+} bridge_info_t;
+
+/** A list of our chosen entry guards. */
+static smartlist_t *entry_guards = NULL;
+/** A value of 1 means that the entry_guards list has changed
+ * and those changes need to be flushed to disk. */
+static int entry_guards_dirty = 0;
+
+static void bridge_free(bridge_info_t *bridge);
+static const node_t *choose_random_entry_impl(cpath_build_state_t *state,
+ int for_directory,
+ dirinfo_type_t dirtype,
+ int *n_options_out);
+static int num_bridges_usable(void);
+
+/** Return the list of entry guards, creating it if necessary. */
+const smartlist_t *
+get_entry_guards(void)
+{
+ if (! entry_guards)
+ entry_guards = smartlist_new();
+ return entry_guards;
+}
+
+/** Check whether the entry guard <b>e</b> is usable, given the directory
+ * authorities' opinion about the router (stored in <b>ri</b>) and the user's
+ * configuration (in <b>options</b>). Set <b>e</b>-&gt;bad_since
+ * accordingly. Return true iff the entry guard's status changes.
+ *
+ * If it's not usable, set *<b>reason</b> to a static string explaining why.
+ */
+static int
+entry_guard_set_status(entry_guard_t *e, const node_t *node,
+ time_t now, const or_options_t *options,
+ const char **reason)
+{
+ char buf[HEX_DIGEST_LEN+1];
+ int changed = 0;
+
+ *reason = NULL;
+
+ /* Do we want to mark this guard as bad? */
+ if (!node)
+ *reason = "unlisted";
+ else if (!node->is_running)
+ *reason = "down";
+ else if (options->UseBridges && (!node->ri ||
+ node->ri->purpose != ROUTER_PURPOSE_BRIDGE))
+ *reason = "not a bridge";
+ else if (options->UseBridges && !node_is_a_configured_bridge(node))
+ *reason = "not a configured bridge";
+ else if (!options->UseBridges && !node->is_possible_guard &&
+ !routerset_contains_node(options->EntryNodes,node))
+ *reason = "not recommended as a guard";
+ else if (routerset_contains_node(options->ExcludeNodes, node))
+ *reason = "excluded";
+ else if (e->path_bias_disabled)
+ *reason = "path-biased";
+
+ if (*reason && ! e->bad_since) {
+ /* Router is newly bad. */
+ base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
+ log_info(LD_CIRC, "Entry guard %s (%s) is %s: marking as unusable.",
+ e->nickname, buf, *reason);
+
+ e->bad_since = now;
+ control_event_guard(e->nickname, e->identity, "BAD");
+ changed = 1;
+ } else if (!*reason && e->bad_since) {
+ /* There's nothing wrong with the router any more. */
+ base16_encode(buf, sizeof(buf), e->identity, DIGEST_LEN);
+ log_info(LD_CIRC, "Entry guard %s (%s) is no longer unusable: "
+ "marking as ok.", e->nickname, buf);
+
+ e->bad_since = 0;
+ control_event_guard(e->nickname, e->identity, "GOOD");
+ changed = 1;
+ }
+
+ if (node) {
+ int is_dir = node_is_dir(node) && node->rs &&
+ node->rs->version_supports_microdesc_cache;
+ if (options->UseBridges && node_is_a_configured_bridge(node))
+ is_dir = 1;
+ if (e->is_dir_cache != is_dir) {
+ e->is_dir_cache = is_dir;
+ changed = 1;
+ }
+ }
+
+ return changed;
+}
+
+/** Return true iff enough time has passed since we last tried to connect
+ * to the unreachable guard <b>e</b> that we're willing to try again. */
+static int
+entry_is_time_to_retry(entry_guard_t *e, time_t now)
+{
+ long diff;
+ if (e->last_attempted < e->unreachable_since)
+ return 1;
+ diff = now - e->unreachable_since;
+ if (diff < 6*60*60)
+ return now > (e->last_attempted + 60*60);
+ else if (diff < 3*24*60*60)
+ return now > (e->last_attempted + 4*60*60);
+ else if (diff < 7*24*60*60)
+ return now > (e->last_attempted + 18*60*60);
+ else
+ return now > (e->last_attempted + 36*60*60);
+}
+
+/** Return the node corresponding to <b>e</b>, if <b>e</b> is
+ * working well enough that we are willing to use it as an entry
+ * right now. (Else return NULL.) In particular, it must be
+ * - Listed as either up or never yet contacted;
+ * - Present in the routerlist;
+ * - Listed as 'stable' or 'fast' by the current dirserver consensus,
+ * if demanded by <b>need_uptime</b> or <b>need_capacity</b>
+ * (unless it's a configured EntryNode);
+ * - Allowed by our current ReachableORAddresses config option; and
+ * - Currently thought to be reachable by us (unless <b>assume_reachable</b>
+ * is true).
+ *
+ * If the answer is no, set *<b>msg</b> to an explanation of why.
+ *
+ * If need_descriptor is true, only return the node if we currently have
+ * a descriptor (routerinfo or microdesc) for it.
+ */
+static INLINE const node_t *
+entry_is_live(entry_guard_t *e, int need_uptime, int need_capacity,
+ int assume_reachable, int need_descriptor, const char **msg)
+{
+ const node_t *node;
+ const or_options_t *options = get_options();
+ tor_assert(msg);
+
+ if (e->path_bias_disabled) {
+ *msg = "path-biased";
+ return NULL;
+ }
+ if (e->bad_since) {
+ *msg = "bad";
+ return NULL;
+ }
+ /* no good if it's unreachable, unless assume_unreachable or can_retry. */
+ if (!assume_reachable && !e->can_retry &&
+ e->unreachable_since && !entry_is_time_to_retry(e, time(NULL))) {
+ *msg = "unreachable";
+ return NULL;
+ }
+ node = node_get_by_id(e->identity);
+ if (!node) {
+ *msg = "no node info";
+ return NULL;
+ }
+ if (need_descriptor && !node_has_descriptor(node)) {
+ *msg = "no descriptor";
+ return NULL;
+ }
+ if (get_options()->UseBridges) {
+ if (node_get_purpose(node) != ROUTER_PURPOSE_BRIDGE) {
+ *msg = "not a bridge";
+ return NULL;
+ }
+ if (!node_is_a_configured_bridge(node)) {
+ *msg = "not a configured bridge";
+ return NULL;
+ }
+ } else { /* !get_options()->UseBridges */
+ if (node_get_purpose(node) != ROUTER_PURPOSE_GENERAL) {
+ *msg = "not general-purpose";
+ return NULL;
+ }
+ }
+ if (routerset_contains_node(options->EntryNodes, node)) {
+ /* they asked for it, they get it */
+ need_uptime = need_capacity = 0;
+ }
+ if (node_is_unreliable(node, need_uptime, need_capacity, 0)) {
+ *msg = "not fast/stable";
+ return NULL;
+ }
+ if (!fascist_firewall_allows_node(node)) {
+ *msg = "unreachable by config";
+ return NULL;
+ }
+ return node;
+}
+
+/** Return the number of entry guards that we think are usable. */
+int
+num_live_entry_guards(int for_directory)
+{
+ int n = 0;
+ const char *msg;
+ if (! entry_guards)
+ return 0;
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ if (for_directory && !entry->is_dir_cache)
+ continue;
+ if (entry_is_live(entry, 0, 1, 0, !for_directory, &msg))
+ ++n;
+ } SMARTLIST_FOREACH_END(entry);
+ return n;
+}
+
+/** If <b>digest</b> matches the identity of any node in the
+ * entry_guards list, return that node. Else return NULL. */
+entry_guard_t *
+entry_guard_get_by_id_digest(const char *digest)
+{
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
+ if (tor_memeq(digest, entry->identity, DIGEST_LEN))
+ return entry;
+ );
+ return NULL;
+}
+
+/** Dump a description of our list of entry guards to the log at level
+ * <b>severity</b>. */
+static void
+log_entry_guards(int severity)
+{
+ smartlist_t *elements = smartlist_new();
+ char *s;
+
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e)
+ {
+ const char *msg = NULL;
+ if (entry_is_live(e, 0, 1, 0, 0, &msg))
+ smartlist_add_asprintf(elements, "%s [%s] (up %s)",
+ e->nickname,
+ hex_str(e->identity, DIGEST_LEN),
+ e->made_contact ? "made-contact" : "never-contacted");
+ else
+ smartlist_add_asprintf(elements, "%s [%s] (%s, %s)",
+ e->nickname,
+ hex_str(e->identity, DIGEST_LEN),
+ msg,
+ e->made_contact ? "made-contact" : "never-contacted");
+ }
+ SMARTLIST_FOREACH_END(e);
+
+ s = smartlist_join_strings(elements, ",", 0, NULL);
+ SMARTLIST_FOREACH(elements, char*, cp, tor_free(cp));
+ smartlist_free(elements);
+ log_fn(severity,LD_CIRC,"%s",s);
+ tor_free(s);
+}
+
+/** Called when one or more guards that we would previously have used for some
+ * purpose are no longer in use because a higher-priority guard has become
+ * usable again. */
+static void
+control_event_guard_deferred(void)
+{
+ /* XXXX We don't actually have a good way to figure out _how many_ entries
+ * are live for some purpose. We need an entry_is_even_slightly_live()
+ * function for this to work right. NumEntryGuards isn't reliable: if we
+ * need guards with weird properties, we can have more than that number
+ * live.
+ **/
+#if 0
+ int n = 0;
+ const char *msg;
+ const or_options_t *options = get_options();
+ if (!entry_guards)
+ return;
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, entry,
+ {
+ if (entry_is_live(entry, 0, 1, 0, &msg)) {
+ if (n++ == options->NumEntryGuards) {
+ control_event_guard(entry->nickname, entry->identity, "DEFERRED");
+ return;
+ }
+ }
+ });
+#endif
+}
+
+/** Largest amount that we'll backdate chosen_on_date */
+#define CHOSEN_ON_DATE_SLOP (30*86400)
+
+/** Add a new (preferably stable and fast) router to our
+ * entry_guards list. Return a pointer to the router if we succeed,
+ * or NULL if we can't find any more suitable entries.
+ *
+ * If <b>chosen</b> is defined, use that one, and if it's not
+ * already in our entry_guards list, put it at the *beginning*.
+ * Else, put the one we pick at the end of the list. */
+static const node_t *
+add_an_entry_guard(const node_t *chosen, int reset_status, int prepend,
+ int for_discovery, int for_directory)
+{
+ const node_t *node;
+ entry_guard_t *entry;
+
+ if (chosen) {
+ node = chosen;
+ entry = entry_guard_get_by_id_digest(node->identity);
+ if (entry) {
+ if (reset_status) {
+ entry->bad_since = 0;
+ entry->can_retry = 1;
+ }
+ entry->is_dir_cache = node->rs &&
+ node->rs->version_supports_microdesc_cache;
+ if (get_options()->UseBridges && node_is_a_configured_bridge(node))
+ entry->is_dir_cache = 1;
+ return NULL;
+ }
+ } else if (!for_directory) {
+ node = choose_good_entry_server(CIRCUIT_PURPOSE_C_GENERAL, NULL);
+ if (!node)
+ return NULL;
+ } else {
+ const routerstatus_t *rs;
+ rs = router_pick_directory_server(MICRODESC_DIRINFO|V3_DIRINFO,
+ PDS_FOR_GUARD);
+ if (!rs)
+ return NULL;
+ node = node_get_by_id(rs->identity_digest);
+ if (!node)
+ return NULL;
+ }
+ if (node->using_as_guard)
+ return NULL;
+ if (entry_guard_get_by_id_digest(node->identity) != NULL) {
+ log_info(LD_CIRC, "I was about to add a duplicate entry guard.");
+ /* This can happen if we choose a guard, then the node goes away, then
+ * comes back. */
+ ((node_t*) node)->using_as_guard = 1;
+ return NULL;
+ }
+ entry = tor_malloc_zero(sizeof(entry_guard_t));
+ log_info(LD_CIRC, "Chose %s as new entry guard.",
+ node_describe(node));
+ strlcpy(entry->nickname, node_get_nickname(node), sizeof(entry->nickname));
+ memcpy(entry->identity, node->identity, DIGEST_LEN);
+ entry->is_dir_cache = node_is_dir(node) && node->rs &&
+ node->rs->version_supports_microdesc_cache;
+ if (get_options()->UseBridges && node_is_a_configured_bridge(node))
+ entry->is_dir_cache = 1;
+
+ /* Choose expiry time smudged over the past month. The goal here
+ * is to a) spread out when Tor clients rotate their guards, so they
+ * don't all select them on the same day, and b) avoid leaving a
+ * precise timestamp in the state file about when we first picked
+ * this guard. For details, see the Jan 2010 or-dev thread. */
+ entry->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
+ entry->chosen_by_version = tor_strdup(VERSION);
+
+ /* Are we picking this guard because all of our current guards are
+ * down so we need another one (for_discovery is 1), or because we
+ * decided we need more variety in our guard list (for_discovery is 0)?
+ *
+ * Currently we hack this behavior into place by setting "made_contact"
+ * for guards of the latter variety, so we'll be willing to use any of
+ * them right off the bat.
+ */
+ if (!for_discovery)
+ entry->made_contact = 1;
+
+ ((node_t*)node)->using_as_guard = 1;
+ if (prepend)
+ smartlist_insert(entry_guards, 0, entry);
+ else
+ smartlist_add(entry_guards, entry);
+ control_event_guard(entry->nickname, entry->identity, "NEW");
+ control_event_guard_deferred();
+ log_entry_guards(LOG_INFO);
+ 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 = decide_num_guards(options, for_directory);
+
+ tor_assert(entry_guards);
+
+ while (num_live_entry_guards(for_directory) < num_needed) {
+ if (!add_an_entry_guard(NULL, 0, 0, 0, for_directory))
+ break;
+ changed = 1;
+ }
+ if (changed)
+ entry_guards_changed();
+}
+
+/** How long (in seconds) do we allow an entry guard to be nonfunctional,
+ * unlisted, excluded, or otherwise nonusable before we give up on it? */
+#define ENTRY_GUARD_REMOVE_AFTER (30*24*60*60)
+
+/** Release all storage held by <b>e</b>. */
+static void
+entry_guard_free(entry_guard_t *e)
+{
+ if (!e)
+ return;
+ tor_free(e->chosen_by_version);
+ tor_free(e);
+}
+
+/**
+ * Return the minimum lifetime of working entry guard, in seconds,
+ * as given in the consensus networkstatus. (Plus CHOSEN_ON_DATE_SLOP,
+ * so that we can do the chosen_on_date randomization while achieving the
+ * desired minimum lifetime.)
+ */
+static int32_t
+guards_get_lifetime(void)
+{
+ const or_options_t *options = get_options();
+#define DFLT_GUARD_LIFETIME (86400 * 60) /* Two months. */
+#define MIN_GUARD_LIFETIME (86400 * 30) /* One months. */
+#define MAX_GUARD_LIFETIME (86400 * 1826) /* Five years. */
+
+ if (options->GuardLifetime >= 1) {
+ return CLAMP(MIN_GUARD_LIFETIME,
+ options->GuardLifetime,
+ MAX_GUARD_LIFETIME) + CHOSEN_ON_DATE_SLOP;
+ }
+
+ return networkstatus_get_param(NULL, "GuardLifetime",
+ DFLT_GUARD_LIFETIME,
+ MIN_GUARD_LIFETIME,
+ MAX_GUARD_LIFETIME) + CHOSEN_ON_DATE_SLOP;
+}
+
+/** Remove any entry guard which was selected by an unknown version of Tor,
+ * or which was selected by a version of Tor that's known to select
+ * entry guards badly, or which was selected more 2 months ago. */
+/* XXXX The "obsolete guards" and "chosen long ago guards" things should
+ * probably be different functions. */
+static int
+remove_obsolete_entry_guards(time_t now)
+{
+ int changed = 0, i;
+ int32_t guard_lifetime = guards_get_lifetime();
+
+ for (i = 0; i < smartlist_len(entry_guards); ++i) {
+ entry_guard_t *entry = smartlist_get(entry_guards, i);
+ const char *ver = entry->chosen_by_version;
+ const char *msg = NULL;
+ tor_version_t v;
+ int version_is_bad = 0, date_is_bad = 0;
+ if (!ver) {
+ msg = "does not say what version of Tor it was selected by";
+ version_is_bad = 1;
+ } else if (tor_version_parse(ver, &v)) {
+ msg = "does not seem to be from any recognized version of Tor";
+ version_is_bad = 1;
+ } else {
+ char *tor_ver = NULL;
+ tor_asprintf(&tor_ver, "Tor %s", ver);
+ if ((tor_version_as_new_as(tor_ver, "0.1.0.10-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.1.2.16-dev")) ||
+ (tor_version_as_new_as(tor_ver, "0.2.0.0-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.2.0.6-alpha")) ||
+ /* above are bug 440; below are bug 1217 */
+ (tor_version_as_new_as(tor_ver, "0.2.1.3-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.2.1.23")) ||
+ (tor_version_as_new_as(tor_ver, "0.2.2.0-alpha") &&
+ !tor_version_as_new_as(tor_ver, "0.2.2.7-alpha"))) {
+ msg = "was selected without regard for guard bandwidth";
+ version_is_bad = 1;
+ }
+ tor_free(tor_ver);
+ }
+ if (!version_is_bad && entry->chosen_on_date + guard_lifetime < now) {
+ /* It's been too long since the date listed in our state file. */
+ msg = "was selected several months ago";
+ date_is_bad = 1;
+ }
+
+ if (version_is_bad || date_is_bad) { /* we need to drop it */
+ char dbuf[HEX_DIGEST_LEN+1];
+ tor_assert(msg);
+ base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
+ log_fn(version_is_bad ? LOG_NOTICE : LOG_INFO, LD_CIRC,
+ "Entry guard '%s' (%s) %s. (Version=%s.) Replacing it.",
+ entry->nickname, dbuf, msg, ver?escaped(ver):"none");
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del_keeporder(entry_guards, i--);
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ }
+ }
+
+ return changed ? 1 : 0;
+}
+
+/** Remove all entry guards that have been down or unlisted for so
+ * long that we don't think they'll come up again. Return 1 if we
+ * removed any, or 0 if we did nothing. */
+static int
+remove_dead_entry_guards(time_t now)
+{
+ char dbuf[HEX_DIGEST_LEN+1];
+ char tbuf[ISO_TIME_LEN+1];
+ int i;
+ int changed = 0;
+
+ for (i = 0; i < smartlist_len(entry_guards); ) {
+ entry_guard_t *entry = smartlist_get(entry_guards, i);
+ if (entry->bad_since &&
+ ! entry->path_bias_disabled &&
+ entry->bad_since + ENTRY_GUARD_REMOVE_AFTER < now) {
+
+ base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
+ format_local_iso_time(tbuf, entry->bad_since);
+ log_info(LD_CIRC, "Entry guard '%s' (%s) has been down or unlisted "
+ "since %s local time; removing.",
+ entry->nickname, dbuf, tbuf);
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del_keeporder(entry_guards, i);
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ } else
+ ++i;
+ }
+ return changed ? 1 : 0;
+}
+
+/** Remove all currently listed entry guards. So new ones will be chosen. */
+void
+remove_all_entry_guards(void)
+{
+ char dbuf[HEX_DIGEST_LEN+1];
+
+ while (smartlist_len(entry_guards)) {
+ entry_guard_t *entry = smartlist_get(entry_guards, 0);
+ base16_encode(dbuf, sizeof(dbuf), entry->identity, DIGEST_LEN);
+ log_info(LD_CIRC, "Entry guard '%s' (%s) has been dropped.",
+ entry->nickname, dbuf);
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del(entry_guards, 0);
+ }
+ log_entry_guards(LOG_INFO);
+ entry_guards_changed();
+}
+
+/** A new directory or router-status has arrived; update the down/listed
+ * status of the entry guards.
+ *
+ * An entry is 'down' if the directory lists it as nonrunning.
+ * An entry is 'unlisted' if the directory doesn't include it.
+ *
+ * Don't call this on startup; only on a fresh download. Otherwise we'll
+ * think that things are unlisted.
+ */
+void
+entry_guards_compute_status(const or_options_t *options, time_t now)
+{
+ int changed = 0;
+ digestmap_t *reasons;
+
+ if (! entry_guards)
+ return;
+
+ if (options->EntryNodes) /* reshuffle the entry guard list if needed */
+ entry_nodes_should_be_added();
+
+ reasons = digestmap_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry)
+ {
+ const node_t *r = node_get_by_id(entry->identity);
+ const char *reason = NULL;
+ if (entry_guard_set_status(entry, r, now, options, &reason))
+ changed = 1;
+
+ if (entry->bad_since)
+ tor_assert(reason);
+ if (reason)
+ digestmap_set(reasons, entry->identity, (char*)reason);
+ }
+ SMARTLIST_FOREACH_END(entry);
+
+ if (remove_dead_entry_guards(now))
+ changed = 1;
+ if (remove_obsolete_entry_guards(now))
+ changed = 1;
+
+ if (changed) {
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ const char *reason = digestmap_get(reasons, entry->identity);
+ const char *live_msg = "";
+ const node_t *r = entry_is_live(entry, 0, 1, 0, 0, &live_msg);
+ log_info(LD_CIRC, "Summary: Entry %s [%s] is %s, %s%s%s, and %s%s.",
+ entry->nickname,
+ hex_str(entry->identity, DIGEST_LEN),
+ entry->unreachable_since ? "unreachable" : "reachable",
+ entry->bad_since ? "unusable" : "usable",
+ reason ? ", ": "",
+ reason ? reason : "",
+ r ? "live" : "not live / ",
+ r ? "" : live_msg);
+ } SMARTLIST_FOREACH_END(entry);
+ log_info(LD_CIRC, " (%d/%d entry guards are usable/new)",
+ num_live_entry_guards(0), smartlist_len(entry_guards));
+ log_entry_guards(LOG_INFO);
+ entry_guards_changed();
+ }
+
+ digestmap_free(reasons, NULL);
+}
+
+/** Called when a connection to an OR with the identity digest <b>digest</b>
+ * is established (<b>succeeded</b>==1) or has failed (<b>succeeded</b>==0).
+ * If the OR is an entry, change that entry's up/down status.
+ * Return 0 normally, or -1 if we want to tear down the new connection.
+ *
+ * If <b>mark_relay_status</b>, also call router_set_status() on this
+ * relay.
+ *
+ * XXX024 change succeeded and mark_relay_status into 'int flags'.
+ */
+int
+entry_guard_register_connect_status(const char *digest, int succeeded,
+ int mark_relay_status, time_t now)
+{
+ int changed = 0;
+ int refuse_conn = 0;
+ int first_contact = 0;
+ entry_guard_t *entry = NULL;
+ int idx = -1;
+ char buf[HEX_DIGEST_LEN+1];
+
+ if (! entry_guards)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ tor_assert(e);
+ if (tor_memeq(e->identity, digest, DIGEST_LEN)) {
+ entry = e;
+ idx = e_sl_idx;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(e);
+
+ if (!entry)
+ return 0;
+
+ base16_encode(buf, sizeof(buf), entry->identity, DIGEST_LEN);
+
+ if (succeeded) {
+ if (entry->unreachable_since) {
+ log_info(LD_CIRC, "Entry guard '%s' (%s) is now reachable again. Good.",
+ entry->nickname, buf);
+ entry->can_retry = 0;
+ entry->unreachable_since = 0;
+ entry->last_attempted = now;
+ control_event_guard(entry->nickname, entry->identity, "UP");
+ changed = 1;
+ }
+ if (!entry->made_contact) {
+ entry->made_contact = 1;
+ first_contact = changed = 1;
+ }
+ } else { /* ! succeeded */
+ if (!entry->made_contact) {
+ /* We've never connected to this one. */
+ log_info(LD_CIRC,
+ "Connection to never-contacted entry guard '%s' (%s) failed. "
+ "Removing from the list. %d/%d entry guards usable/new.",
+ entry->nickname, buf,
+ num_live_entry_guards(0)-1, smartlist_len(entry_guards)-1);
+ control_event_guard(entry->nickname, entry->identity, "DROPPED");
+ entry_guard_free(entry);
+ smartlist_del_keeporder(entry_guards, idx);
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ } else if (!entry->unreachable_since) {
+ log_info(LD_CIRC, "Unable to connect to entry guard '%s' (%s). "
+ "Marking as unreachable.", entry->nickname, buf);
+ entry->unreachable_since = entry->last_attempted = now;
+ control_event_guard(entry->nickname, entry->identity, "DOWN");
+ changed = 1;
+ entry->can_retry = 0; /* We gave it an early chance; no good. */
+ } else {
+ char tbuf[ISO_TIME_LEN+1];
+ format_iso_time(tbuf, entry->unreachable_since);
+ log_debug(LD_CIRC, "Failed to connect to unreachable entry guard "
+ "'%s' (%s). It has been unreachable since %s.",
+ entry->nickname, buf, tbuf);
+ entry->last_attempted = now;
+ entry->can_retry = 0; /* We gave it an early chance; no good. */
+ }
+ }
+
+ /* if the caller asked us to, also update the is_running flags for this
+ * relay */
+ if (mark_relay_status)
+ router_set_status(digest, succeeded);
+
+ if (first_contact) {
+ /* We've just added a new long-term entry guard. Perhaps the network just
+ * came back? We should give our earlier entries another try too,
+ * and close this connection so we don't use it before we've given
+ * the others a shot. */
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ if (e == entry)
+ break;
+ if (e->made_contact) {
+ const char *msg;
+ const node_t *r = entry_is_live(e, 0, 1, 1, 0, &msg);
+ if (r && e->unreachable_since) {
+ refuse_conn = 1;
+ e->can_retry = 1;
+ }
+ }
+ } SMARTLIST_FOREACH_END(e);
+ if (refuse_conn) {
+ log_info(LD_CIRC,
+ "Connected to new entry guard '%s' (%s). Marking earlier "
+ "entry guards up. %d/%d entry guards usable/new.",
+ entry->nickname, buf,
+ num_live_entry_guards(0), smartlist_len(entry_guards));
+ log_entry_guards(LOG_INFO);
+ changed = 1;
+ }
+ }
+
+ if (changed)
+ entry_guards_changed();
+ return refuse_conn ? -1 : 0;
+}
+
+/** When we try to choose an entry guard, should we parse and add
+ * config's EntryNodes first? */
+static int should_add_entry_nodes = 0;
+
+/** Called when the value of EntryNodes changes in our configuration. */
+void
+entry_nodes_should_be_added(void)
+{
+ log_info(LD_CIRC, "EntryNodes config option set. Putting configured "
+ "relays at the front of the entry guard list.");
+ should_add_entry_nodes = 1;
+}
+
+/** Update the using_as_guard fields of all the nodes. We do this after we
+ * remove entry guards from the list: This is the only function that clears
+ * the using_as_guard field. */
+static void
+update_node_guard_status(void)
+{
+ smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, node_t *, node, node->using_as_guard = 0);
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ node_t *node = node_get_mutable_by_id(entry->identity);
+ if (node)
+ node->using_as_guard = 1;
+ } SMARTLIST_FOREACH_END(entry);
+}
+
+/** Adjust the entry guards list so that it only contains entries from
+ * EntryNodes, adding new entries from EntryNodes to the list as needed. */
+static void
+entry_guards_set_from_config(const or_options_t *options)
+{
+ smartlist_t *entry_nodes, *worse_entry_nodes, *entry_fps;
+ smartlist_t *old_entry_guards_on_list, *old_entry_guards_not_on_list;
+ tor_assert(entry_guards);
+
+ should_add_entry_nodes = 0;
+
+ if (!options->EntryNodes) {
+ /* It's possible that a controller set EntryNodes, thus making
+ * should_add_entry_nodes set, then cleared it again, all before the
+ * call to choose_random_entry() that triggered us. If so, just return.
+ */
+ return;
+ }
+
+ {
+ char *string = routerset_to_string(options->EntryNodes);
+ log_info(LD_CIRC,"Adding configured EntryNodes '%s'.", string);
+ tor_free(string);
+ }
+
+ entry_nodes = smartlist_new();
+ worse_entry_nodes = smartlist_new();
+ entry_fps = smartlist_new();
+ old_entry_guards_on_list = smartlist_new();
+ old_entry_guards_not_on_list = smartlist_new();
+
+ /* Split entry guards into those on the list and those not. */
+
+ routerset_get_all_nodes(entry_nodes, options->EntryNodes,
+ options->ExcludeNodes, 0);
+ SMARTLIST_FOREACH(entry_nodes, const node_t *,node,
+ smartlist_add(entry_fps, (void*)node->identity));
+
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e, {
+ if (smartlist_contains_digest(entry_fps, e->identity))
+ smartlist_add(old_entry_guards_on_list, e);
+ else
+ smartlist_add(old_entry_guards_not_on_list, e);
+ });
+
+ /* Remove all currently configured guard nodes, excluded nodes, unreachable
+ * nodes, or non-Guard nodes from entry_nodes. */
+ SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
+ if (entry_guard_get_by_id_digest(node->identity)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (routerset_contains_node(options->ExcludeNodes, node)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (!fascist_firewall_allows_node(node)) {
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ continue;
+ } else if (! node->is_possible_guard) {
+ smartlist_add(worse_entry_nodes, (node_t*)node);
+ SMARTLIST_DEL_CURRENT(entry_nodes, node);
+ }
+ } SMARTLIST_FOREACH_END(node);
+
+ /* Now build the new entry_guards list. */
+ smartlist_clear(entry_guards);
+ /* First, the previously configured guards that are in EntryNodes. */
+ smartlist_add_all(entry_guards, old_entry_guards_on_list);
+ /* Next, scramble the rest of EntryNodes, putting the guards first. */
+ smartlist_shuffle(entry_nodes);
+ smartlist_shuffle(worse_entry_nodes);
+ smartlist_add_all(entry_nodes, worse_entry_nodes);
+
+ /* Next, the rest of EntryNodes */
+ SMARTLIST_FOREACH_BEGIN(entry_nodes, const node_t *, node) {
+ add_an_entry_guard(node, 0, 0, 1, 0);
+ if (smartlist_len(entry_guards) > options->NumEntryGuards * 10)
+ break;
+ } SMARTLIST_FOREACH_END(node);
+ log_notice(LD_GENERAL, "%d entries in guards", smartlist_len(entry_guards));
+ /* Finally, free the remaining previously configured guards that are not in
+ * EntryNodes. */
+ SMARTLIST_FOREACH(old_entry_guards_not_on_list, entry_guard_t *, e,
+ entry_guard_free(e));
+
+ update_node_guard_status();
+
+ smartlist_free(entry_nodes);
+ smartlist_free(worse_entry_nodes);
+ smartlist_free(entry_fps);
+ smartlist_free(old_entry_guards_on_list);
+ smartlist_free(old_entry_guards_not_on_list);
+ entry_guards_changed();
+}
+
+/** Return 0 if we're fine adding arbitrary routers out of the
+ * directory to our entry guard list, or return 1 if we have a
+ * list already and we must stick to it.
+ */
+int
+entry_list_is_constrained(const or_options_t *options)
+{
+ if (options->EntryNodes)
+ return 1;
+ if (options->UseBridges)
+ return 1;
+ return 0;
+}
+
+/** Return true iff this node can answer directory questions about
+ * microdescriptors. */
+static int
+node_understands_microdescriptors(const node_t *node)
+{
+ tor_assert(node);
+ if (node->rs && node->rs->version_supports_microdesc_cache)
+ return 1;
+ if (node->ri && tor_version_supports_microdescriptors(node->ri->platform))
+ return 1;
+ return 0;
+}
+
+/** Return true iff <b>node</b> is able to answer directory questions
+ * of type <b>dirinfo</b>. */
+static int
+node_can_handle_dirinfo(const node_t *node, dirinfo_type_t dirinfo)
+{
+ /* Checking dirinfo for any type other than microdescriptors isn't required
+ yet, since we only choose directory guards that can support microdescs,
+ routerinfos, and networkstatuses, AND we don't use directory guards if
+ we're configured to do direct downloads of anything else. The only case
+ where we might have a guard that doesn't know about a type of directory
+ information is when we're retrieving directory information from a
+ bridge. */
+
+ if ((dirinfo & MICRODESC_DIRINFO) &&
+ !node_understands_microdescriptors(node))
+ return 0;
+ return 1;
+}
+
+/** Pick a live (up and listed) entry guard from entry_guards. If
+ * <b>state</b> is non-NULL, this is for a specific circuit --
+ * make sure not to pick this circuit's exit or any node in the
+ * exit's family. If <b>state</b> is NULL, we're looking for a random
+ * guard (likely a bridge). If <b>dirinfo</b> is not NO_DIRINFO, then
+ * only select from nodes that know how to answer directory questions
+ * of that type. */
+const node_t *
+choose_random_entry(cpath_build_state_t *state)
+{
+ return choose_random_entry_impl(state, 0, 0, NULL);
+}
+
+/** Pick a live (up and listed) directory guard from entry_guards for
+ * downloading information of type <b>type</b>. */
+const node_t *
+choose_random_dirguard(dirinfo_type_t type)
+{
+ return choose_random_entry_impl(NULL, 1, type, NULL);
+}
+
+/** Helper for choose_random{entry,dirguard}. */
+static const node_t *
+choose_random_entry_impl(cpath_build_state_t *state, int for_directory,
+ dirinfo_type_t dirinfo_type, int *n_options_out)
+{
+ const or_options_t *options = get_options();
+ smartlist_t *live_entry_guards = smartlist_new();
+ smartlist_t *exit_family = smartlist_new();
+ const node_t *chosen_exit =
+ state?build_state_get_exit_node(state) : NULL;
+ const node_t *node = NULL;
+ int need_uptime = state ? state->need_uptime : 0;
+ int need_capacity = state ? state->need_capacity : 0;
+ int preferred_min, consider_exit_family = 0;
+ int need_descriptor = !for_directory;
+ const int num_needed = decide_num_guards(options, for_directory);
+
+ if (n_options_out)
+ *n_options_out = 0;
+
+ if (chosen_exit) {
+ nodelist_add_node_and_family(exit_family, chosen_exit);
+ consider_exit_family = 1;
+ }
+
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+
+ if (should_add_entry_nodes)
+ entry_guards_set_from_config(options);
+
+ if (!entry_list_is_constrained(options) &&
+ smartlist_len(entry_guards) < num_needed)
+ pick_entry_guards(options, for_directory);
+
+ retry:
+ smartlist_clear(live_entry_guards);
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, entry) {
+ const char *msg;
+ node = entry_is_live(entry, need_uptime, need_capacity, 0,
+ need_descriptor, &msg);
+ if (!node)
+ continue; /* down, no point */
+ if (for_directory) {
+ if (!entry->is_dir_cache)
+ continue; /* We need a directory and didn't get one. */
+ }
+ if (node == chosen_exit)
+ continue; /* don't pick the same node for entry and exit */
+ if (consider_exit_family && smartlist_contains(exit_family, node))
+ continue; /* avoid relays that are family members of our exit */
+ if (dirinfo_type != NO_DIRINFO &&
+ !node_can_handle_dirinfo(node, dirinfo_type))
+ continue; /* this node won't be able to answer our dir questions */
+#if 0 /* since EntryNodes is always strict now, this clause is moot */
+ if (options->EntryNodes &&
+ !routerset_contains_node(options->EntryNodes, node)) {
+ /* We've come to the end of our preferred entry nodes. */
+ if (smartlist_len(live_entry_guards))
+ goto choose_and_finish; /* only choose from the ones we like */
+ if (options->StrictNodes) {
+ /* in theory this case should never happen, since
+ * entry_guards_set_from_config() drops unwanted relays */
+ tor_fragile_assert();
+ } else {
+ log_info(LD_CIRC,
+ "No relays from EntryNodes available. Using others.");
+ }
+ }
+#endif
+ smartlist_add(live_entry_guards, (void*)node);
+ if (!entry->made_contact) {
+ /* Always start with the first not-yet-contacted entry
+ * guard. Otherwise we might add several new ones, pick
+ * the second new one, and now we've expanded our entry
+ * guard list without needing to. */
+ goto choose_and_finish;
+ }
+ if (smartlist_len(live_entry_guards) >= num_needed)
+ goto choose_and_finish; /* we have enough */
+ } SMARTLIST_FOREACH_END(entry);
+
+ if (entry_list_is_constrained(options)) {
+ /* If we prefer the entry nodes we've got, and we have at least
+ * one choice, that's great. Use it. */
+ preferred_min = 1;
+ } else {
+ /* Try to have at least 2 choices available. This way we don't
+ * get stuck with a single live-but-crummy entry and just keep
+ * using him.
+ * (We might get 2 live-but-crummy entry guards, but so be it.) */
+ preferred_min = 2;
+ }
+
+ if (smartlist_len(live_entry_guards) < preferred_min) {
+ if (!entry_list_is_constrained(options)) {
+ /* still no? try adding a new entry then */
+ /* XXX if guard doesn't imply fast and stable, then we need
+ * to tell add_an_entry_guard below what we want, or it might
+ * be a long time til we get it. -RD */
+ node = add_an_entry_guard(NULL, 0, 0, 1, for_directory);
+ if (node) {
+ entry_guards_changed();
+ /* XXX we start over here in case the new node we added shares
+ * a family with our exit node. There's a chance that we'll just
+ * load up on entry guards here, if the network we're using is
+ * one big family. Perhaps we should teach add_an_entry_guard()
+ * to understand nodes-to-avoid-if-possible? -RD */
+ goto retry;
+ }
+ }
+ if (!node && need_uptime) {
+ need_uptime = 0; /* try without that requirement */
+ goto retry;
+ }
+ if (!node && need_capacity) {
+ /* still no? last attempt, try without requiring capacity */
+ need_capacity = 0;
+ goto retry;
+ }
+#if 0
+ /* Removing this retry logic: if we only allow one exit, and it is in the
+ same family as all our entries, then we are just plain not going to win
+ here. */
+ if (!node && entry_list_is_constrained(options) && consider_exit_family) {
+ /* still no? if we're using bridges or have strictentrynodes
+ * set, and our chosen exit is in the same family as all our
+ * bridges/entry guards, then be flexible about families. */
+ consider_exit_family = 0;
+ goto retry;
+ }
+#endif
+ /* live_entry_guards may be empty below. Oh well, we tried. */
+ }
+
+ choose_and_finish:
+ if (entry_list_is_constrained(options)) {
+ /* We need to weight by bandwidth, because our bridges or entryguards
+ * were not already selected proportional to their bandwidth. */
+ node = node_sl_choose_by_bandwidth(live_entry_guards, WEIGHT_FOR_GUARD);
+ } else {
+ /* We choose uniformly at random here, because choose_good_entry_server()
+ * already weights its choices by bandwidth, so we don't want to
+ * *double*-weight our guard selection. */
+ node = smartlist_choose(live_entry_guards);
+ }
+ if (n_options_out)
+ *n_options_out = smartlist_len(live_entry_guards);
+ smartlist_free(live_entry_guards);
+ smartlist_free(exit_family);
+ return node;
+}
+
+/** Parse <b>state</b> and learn about the entry guards it describes.
+ * If <b>set</b> is true, and there are no errors, replace the global
+ * entry_list with what we find.
+ * On success, return 0. On failure, alloc into *<b>msg</b> a string
+ * describing the error, and return -1.
+ */
+int
+entry_guards_parse_state(or_state_t *state, int set, char **msg)
+{
+ entry_guard_t *node = NULL;
+ smartlist_t *new_entry_guards = smartlist_new();
+ config_line_t *line;
+ time_t now = time(NULL);
+ const char *state_version = state->TorVersion;
+ digestmap_t *added_by = digestmap_new();
+
+ *msg = NULL;
+ for (line = state->EntryGuards; line; line = line->next) {
+ if (!strcasecmp(line->key, "EntryGuard")) {
+ smartlist_t *args = smartlist_new();
+ node = tor_malloc_zero(sizeof(entry_guard_t));
+ /* all entry guards on disk have been contacted */
+ node->made_contact = 1;
+ smartlist_add(new_entry_guards, node);
+ smartlist_split_string(args, line->value, " ",
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, 0);
+ if (smartlist_len(args)<2) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Too few arguments to EntryGuard");
+ } else if (!is_legal_nickname(smartlist_get(args,0))) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Bad nickname for EntryGuard");
+ } else {
+ strlcpy(node->nickname, smartlist_get(args,0), MAX_NICKNAME_LEN+1);
+ if (base16_decode(node->identity, DIGEST_LEN, smartlist_get(args,1),
+ strlen(smartlist_get(args,1)))<0) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Bad hex digest for EntryGuard");
+ }
+ }
+ if (smartlist_len(args) >= 3) {
+ const char *is_cache = smartlist_get(args, 2);
+ if (!strcasecmp(is_cache, "DirCache")) {
+ node->is_dir_cache = 1;
+ } else if (!strcasecmp(is_cache, "NoDirCache")) {
+ node->is_dir_cache = 0;
+ } else {
+ log_warn(LD_CONFIG, "Bogus third argument to EntryGuard line: %s",
+ escaped(is_cache));
+ }
+ }
+ SMARTLIST_FOREACH(args, char*, cp, tor_free(cp));
+ smartlist_free(args);
+ if (*msg)
+ break;
+ } else if (!strcasecmp(line->key, "EntryGuardDownSince") ||
+ !strcasecmp(line->key, "EntryGuardUnlistedSince")) {
+ time_t when;
+ time_t last_try = 0;
+ if (!node) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "EntryGuardDownSince/UnlistedSince without EntryGuard");
+ break;
+ }
+ if (parse_iso_time(line->value, &when)<0) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "Bad time in EntryGuardDownSince/UnlistedSince");
+ break;
+ }
+ if (when > now) {
+ /* It's a bad idea to believe info in the future: you can wind
+ * up with timeouts that aren't allowed to happen for years. */
+ continue;
+ }
+ if (strlen(line->value) >= ISO_TIME_LEN+ISO_TIME_LEN+1) {
+ /* ignore failure */
+ (void) parse_iso_time(line->value+ISO_TIME_LEN+1, &last_try);
+ }
+ if (!strcasecmp(line->key, "EntryGuardDownSince")) {
+ node->unreachable_since = when;
+ node->last_attempted = last_try;
+ } else {
+ node->bad_since = when;
+ }
+ } else if (!strcasecmp(line->key, "EntryGuardAddedBy")) {
+ char d[DIGEST_LEN];
+ /* format is digest version date */
+ if (strlen(line->value) < HEX_DIGEST_LEN+1+1+1+ISO_TIME_LEN) {
+ log_warn(LD_BUG, "EntryGuardAddedBy line is not long enough.");
+ continue;
+ }
+ if (base16_decode(d, sizeof(d), line->value, HEX_DIGEST_LEN)<0 ||
+ line->value[HEX_DIGEST_LEN] != ' ') {
+ log_warn(LD_BUG, "EntryGuardAddedBy line %s does not begin with "
+ "hex digest", escaped(line->value));
+ continue;
+ }
+ digestmap_set(added_by, d, tor_strdup(line->value+HEX_DIGEST_LEN+1));
+ } else if (!strcasecmp(line->key, "EntryGuardPathUseBias")) {
+ const or_options_t *options = get_options();
+ double use_cnt, success_cnt;
+
+ if (!node) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "EntryGuardPathUseBias without EntryGuard");
+ break;
+ }
+
+ if (tor_sscanf(line->value, "%lf %lf",
+ &use_cnt, &success_cnt) != 2) {
+ log_info(LD_GENERAL, "Malformed path use bias line for node %s",
+ node->nickname);
+ continue;
+ }
+
+ if (use_cnt < success_cnt) {
+ int severity = LOG_INFO;
+ /* If this state file was written by a Tor that would have
+ * already fixed it, then the overcounting bug is still there.. */
+ if (tor_version_as_new_as(state_version, "0.2.4.13-alpha")) {
+ severity = LOG_NOTICE;
+ }
+ log_fn(severity, LD_BUG,
+ "State file contains unexpectedly high usage success "
+ "counts %lf/%lf for Guard %s ($%s)",
+ success_cnt, use_cnt,
+ node->nickname, hex_str(node->identity, DIGEST_LEN));
+ success_cnt = use_cnt;
+ }
+
+ node->use_attempts = use_cnt;
+ node->use_successes = success_cnt;
+
+ log_info(LD_GENERAL, "Read %f/%f path use bias for node %s",
+ node->use_successes, node->use_attempts, node->nickname);
+
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_use_success_count(node)/node->use_attempts
+ < pathbias_get_extreme_use_rate(options) &&
+ pathbias_get_dropguards(options)) {
+ node->path_bias_disabled = 1;
+ log_info(LD_GENERAL,
+ "Path use bias is too high (%f/%f); disabling node %s",
+ node->circ_successes, node->circ_attempts, node->nickname);
+ }
+ } else if (!strcasecmp(line->key, "EntryGuardPathBias")) {
+ const or_options_t *options = get_options();
+ double hop_cnt, success_cnt, timeouts, collapsed, successful_closed,
+ unusable;
+
+ if (!node) {
+ *msg = tor_strdup("Unable to parse entry nodes: "
+ "EntryGuardPathBias without EntryGuard");
+ break;
+ }
+
+ /* First try 3 params, then 2. */
+ /* In the long run: circuit_success ~= successful_circuit_close +
+ * collapsed_circuits +
+ * unusable_circuits */
+ if (tor_sscanf(line->value, "%lf %lf %lf %lf %lf %lf",
+ &hop_cnt, &success_cnt, &successful_closed,
+ &collapsed, &unusable, &timeouts) != 6) {
+ int old_success, old_hops;
+ if (tor_sscanf(line->value, "%u %u", &old_success, &old_hops) != 2) {
+ continue;
+ }
+ log_info(LD_GENERAL, "Reading old-style EntryGuardPathBias %s",
+ escaped(line->value));
+
+ success_cnt = old_success;
+ successful_closed = old_success;
+ hop_cnt = old_hops;
+ timeouts = 0;
+ collapsed = 0;
+ unusable = 0;
+ }
+
+ if (hop_cnt < success_cnt) {
+ int severity = LOG_INFO;
+ /* If this state file was written by a Tor that would have
+ * already fixed it, then the overcounting bug is still there.. */
+ if (tor_version_as_new_as(state_version, "0.2.4.13-alpha")) {
+ severity = LOG_NOTICE;
+ }
+ log_fn(severity, LD_BUG,
+ "State file contains unexpectedly high success counts "
+ "%lf/%lf for Guard %s ($%s)",
+ success_cnt, hop_cnt,
+ node->nickname, hex_str(node->identity, DIGEST_LEN));
+ success_cnt = hop_cnt;
+ }
+
+ node->circ_attempts = hop_cnt;
+ node->circ_successes = success_cnt;
+
+ node->successful_circuits_closed = successful_closed;
+ node->timeouts = timeouts;
+ node->collapsed_circuits = collapsed;
+ node->unusable_circuits = unusable;
+
+ log_info(LD_GENERAL, "Read %f/%f path bias for node %s",
+ node->circ_successes, node->circ_attempts, node->nickname);
+ /* Note: We rely on the < comparison here to allow us to set a 0
+ * rate and disable the feature entirely. If refactoring, don't
+ * change to <= */
+ if (pathbias_get_close_success_count(node)/node->circ_attempts
+ < pathbias_get_extreme_rate(options) &&
+ pathbias_get_dropguards(options)) {
+ node->path_bias_disabled = 1;
+ log_info(LD_GENERAL,
+ "Path bias is too high (%f/%f); disabling node %s",
+ node->circ_successes, node->circ_attempts, node->nickname);
+ }
+
+ } else {
+ log_warn(LD_BUG, "Unexpected key %s", line->key);
+ }
+ }
+
+ SMARTLIST_FOREACH_BEGIN(new_entry_guards, entry_guard_t *, e) {
+ char *sp;
+ char *val = digestmap_get(added_by, e->identity);
+ if (val && (sp = strchr(val, ' '))) {
+ time_t when;
+ *sp++ = '\0';
+ if (parse_iso_time(sp, &when)<0) {
+ log_warn(LD_BUG, "Can't read time %s in EntryGuardAddedBy", sp);
+ } else {
+ e->chosen_by_version = tor_strdup(val);
+ e->chosen_on_date = when;
+ }
+ } else {
+ if (state_version) {
+ e->chosen_by_version = tor_strdup(state_version);
+ e->chosen_on_date = time(NULL) - crypto_rand_int(3600*24*30);
+ }
+ }
+ if (e->path_bias_disabled && !e->bad_since)
+ e->bad_since = time(NULL);
+ }
+ SMARTLIST_FOREACH_END(e);
+
+ if (*msg || !set) {
+ SMARTLIST_FOREACH(new_entry_guards, entry_guard_t *, e,
+ entry_guard_free(e));
+ smartlist_free(new_entry_guards);
+ } else { /* !err && set */
+ if (entry_guards) {
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
+ entry_guard_free(e));
+ smartlist_free(entry_guards);
+ }
+ entry_guards = new_entry_guards;
+ entry_guards_dirty = 0;
+ /* XXX024 hand new_entry_guards to this func, and move it up a
+ * few lines, so we don't have to re-dirty it */
+ if (remove_obsolete_entry_guards(now))
+ entry_guards_dirty = 1;
+
+ update_node_guard_status();
+ }
+ digestmap_free(added_by, tor_free_);
+ return *msg ? -1 : 0;
+}
+
+/** Our list of entry guards has changed, or some element of one
+ * of our entry guards has changed. Write the changes to disk within
+ * the next few minutes.
+ */
+void
+entry_guards_changed(void)
+{
+ time_t when;
+ entry_guards_dirty = 1;
+
+ /* or_state_save() will call entry_guards_update_state(). */
+ when = get_options()->AvoidDiskWrites ? time(NULL) + 3600 : time(NULL)+600;
+ or_state_mark_dirty(get_or_state(), when);
+}
+
+/** If the entry guard info has not changed, do nothing and return.
+ * Otherwise, free the EntryGuards piece of <b>state</b> and create
+ * a new one out of the global entry_guards list, and then mark
+ * <b>state</b> dirty so it will get saved to disk.
+ */
+void
+entry_guards_update_state(or_state_t *state)
+{
+ config_line_t **next, *line;
+ if (! entry_guards_dirty)
+ return;
+
+ config_free_lines(state->EntryGuards);
+ next = &state->EntryGuards;
+ *next = NULL;
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ char dbuf[HEX_DIGEST_LEN+1];
+ if (!e->made_contact)
+ continue; /* don't write this one to disk */
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuard");
+ base16_encode(dbuf, sizeof(dbuf), e->identity, DIGEST_LEN);
+ tor_asprintf(&line->value, "%s %s %sDirCache", e->nickname, dbuf,
+ e->is_dir_cache ? "" : "No");
+ next = &(line->next);
+ if (e->unreachable_since) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardDownSince");
+ line->value = tor_malloc(ISO_TIME_LEN+1+ISO_TIME_LEN+1);
+ format_iso_time(line->value, e->unreachable_since);
+ if (e->last_attempted) {
+ line->value[ISO_TIME_LEN] = ' ';
+ format_iso_time(line->value+ISO_TIME_LEN+1, e->last_attempted);
+ }
+ next = &(line->next);
+ }
+ if (e->bad_since) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardUnlistedSince");
+ line->value = tor_malloc(ISO_TIME_LEN+1);
+ format_iso_time(line->value, e->bad_since);
+ next = &(line->next);
+ }
+ if (e->chosen_on_date && e->chosen_by_version &&
+ !strchr(e->chosen_by_version, ' ')) {
+ char d[HEX_DIGEST_LEN+1];
+ char t[ISO_TIME_LEN+1];
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardAddedBy");
+ base16_encode(d, sizeof(d), e->identity, DIGEST_LEN);
+ format_iso_time(t, e->chosen_on_date);
+ tor_asprintf(&line->value, "%s %s %s",
+ d, e->chosen_by_version, t);
+ next = &(line->next);
+ }
+ if (e->circ_attempts > 0) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardPathBias");
+ /* In the long run: circuit_success ~= successful_circuit_close +
+ * collapsed_circuits +
+ * unusable_circuits */
+ tor_asprintf(&line->value, "%f %f %f %f %f %f",
+ e->circ_attempts, e->circ_successes,
+ pathbias_get_close_success_count(e),
+ e->collapsed_circuits,
+ e->unusable_circuits, e->timeouts);
+ next = &(line->next);
+ }
+ if (e->use_attempts > 0) {
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("EntryGuardPathUseBias");
+
+ tor_asprintf(&line->value, "%f %f",
+ e->use_attempts,
+ pathbias_get_use_success_count(e));
+ next = &(line->next);
+ }
+
+ } SMARTLIST_FOREACH_END(e);
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(get_or_state(), 0);
+ entry_guards_dirty = 0;
+}
+
+/** If <b>question</b> is the string "entry-guards", then dump
+ * to *<b>answer</b> a newly allocated string describing all of
+ * the nodes in the global entry_guards list. See control-spec.txt
+ * for details.
+ * For backward compatibility, we also handle the string "helper-nodes".
+ * */
+int
+getinfo_helper_entry_guards(control_connection_t *conn,
+ const char *question, char **answer,
+ const char **errmsg)
+{
+ (void) conn;
+ (void) errmsg;
+
+ if (!strcmp(question,"entry-guards") ||
+ !strcmp(question,"helper-nodes")) {
+ smartlist_t *sl = smartlist_new();
+ char tbuf[ISO_TIME_LEN+1];
+ char nbuf[MAX_VERBOSE_NICKNAME_LEN+1];
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ const char *status = NULL;
+ time_t when = 0;
+ const node_t *node;
+
+ if (!e->made_contact) {
+ status = "never-connected";
+ } else if (e->bad_since) {
+ when = e->bad_since;
+ status = "unusable";
+ } else {
+ status = "up";
+ }
+
+ node = node_get_by_id(e->identity);
+ if (node) {
+ node_get_verbose_nickname(node, nbuf);
+ } else {
+ nbuf[0] = '$';
+ base16_encode(nbuf+1, sizeof(nbuf)-1, e->identity, DIGEST_LEN);
+ /* e->nickname field is not very reliable if we don't know about
+ * this router any longer; don't include it. */
+ }
+
+ if (when) {
+ format_iso_time(tbuf, when);
+ smartlist_add_asprintf(sl, "%s %s %s\n", nbuf, status, tbuf);
+ } else {
+ smartlist_add_asprintf(sl, "%s %s\n", nbuf, status);
+ }
+ } SMARTLIST_FOREACH_END(e);
+ *answer = smartlist_join_strings(sl, "", 0, NULL);
+ SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
+ smartlist_free(sl);
+ }
+ return 0;
+}
+
+/** A list of configured bridges. Whenever we actually get a descriptor
+ * for one, we add it as an entry guard. Note that the order of bridges
+ * in this list does not necessarily correspond to the order of bridges
+ * in the torrc. */
+static smartlist_t *bridge_list = NULL;
+
+/** Mark every entry of the bridge list to be removed on our next call to
+ * sweep_bridge_list unless it has first been un-marked. */
+void
+mark_bridge_list(void)
+{
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b,
+ b->marked_for_removal = 1);
+}
+
+/** Remove every entry of the bridge list that was marked with
+ * mark_bridge_list if it has not subsequently been un-marked. */
+void
+sweep_bridge_list(void)
+{
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, b) {
+ if (b->marked_for_removal) {
+ SMARTLIST_DEL_CURRENT(bridge_list, b);
+ bridge_free(b);
+ }
+ } SMARTLIST_FOREACH_END(b);
+}
+
+/** Initialize the bridge list to empty, creating it if needed. */
+static void
+clear_bridge_list(void)
+{
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, b, bridge_free(b));
+ smartlist_clear(bridge_list);
+}
+
+/** Free the bridge <b>bridge</b>. */
+static void
+bridge_free(bridge_info_t *bridge)
+{
+ if (!bridge)
+ return;
+
+ tor_free(bridge->transport_name);
+ if (bridge->socks_args) {
+ SMARTLIST_FOREACH(bridge->socks_args, char*, s, tor_free(s));
+ smartlist_free(bridge->socks_args);
+ }
+
+ tor_free(bridge);
+}
+
+/** If we have a bridge configured whose digest matches <b>digest</b>, or a
+ * bridge with no known digest whose address matches any of the
+ * tor_addr_port_t's in <b>orports</b>, return that bridge. Else return
+ * NULL. */
+static bridge_info_t *
+get_configured_bridge_by_orports_digest(const char *digest,
+ const smartlist_t *orports)
+{
+ if (!bridge_list)
+ return NULL;
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
+ {
+ if (tor_digest_is_zero(bridge->identity)) {
+ SMARTLIST_FOREACH_BEGIN(orports, tor_addr_port_t *, ap)
+ {
+ if (tor_addr_compare(&bridge->addr, &ap->addr, CMP_EXACT) == 0 &&
+ bridge->port == ap->port)
+ return bridge;
+ }
+ SMARTLIST_FOREACH_END(ap);
+ }
+ if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN))
+ return bridge;
+ }
+ SMARTLIST_FOREACH_END(bridge);
+ return NULL;
+}
+
+/** If we have a bridge configured whose digest matches <b>digest</b>, or a
+ * bridge with no known digest whose address matches <b>addr</b>:<b>/port</b>,
+ * return that bridge. Else return NULL. If <b>digest</b> is NULL, check for
+ * address/port matches only. */
+static bridge_info_t *
+get_configured_bridge_by_addr_port_digest(const tor_addr_t *addr,
+ uint16_t port,
+ const char *digest)
+{
+ if (!bridge_list)
+ return NULL;
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
+ {
+ if ((tor_digest_is_zero(bridge->identity) || digest == NULL) &&
+ !tor_addr_compare(&bridge->addr, addr, CMP_EXACT) &&
+ bridge->port == port)
+ return bridge;
+ if (digest && tor_memeq(bridge->identity, digest, DIGEST_LEN))
+ return bridge;
+ }
+ SMARTLIST_FOREACH_END(bridge);
+ return NULL;
+}
+
+/** Wrapper around get_configured_bridge_by_addr_port_digest() to look
+ * it up via router descriptor <b>ri</b>. */
+static bridge_info_t *
+get_configured_bridge_by_routerinfo(const routerinfo_t *ri)
+{
+ bridge_info_t *bi = NULL;
+ smartlist_t *orports = router_get_all_orports(ri);
+ bi = get_configured_bridge_by_orports_digest(ri->cache_info.identity_digest,
+ orports);
+ SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
+ smartlist_free(orports);
+ return bi;
+}
+
+/** Return 1 if <b>ri</b> is one of our known bridges, else 0. */
+int
+routerinfo_is_a_configured_bridge(const routerinfo_t *ri)
+{
+ return get_configured_bridge_by_routerinfo(ri) ? 1 : 0;
+}
+
+/** Return 1 if <b>node</b> is one of our configured bridges, else 0. */
+int
+node_is_a_configured_bridge(const node_t *node)
+{
+ int retval = 0;
+ smartlist_t *orports = node_get_all_orports(node);
+ retval = get_configured_bridge_by_orports_digest(node->identity,
+ orports) != NULL;
+ SMARTLIST_FOREACH(orports, tor_addr_port_t *, p, tor_free(p));
+ smartlist_free(orports);
+ return retval;
+}
+
+/** We made a connection to a router at <b>addr</b>:<b>port</b>
+ * without knowing its digest. Its digest turned out to be <b>digest</b>.
+ * If it was a bridge, and we still don't know its digest, record it.
+ */
+void
+learned_router_identity(const tor_addr_t *addr, uint16_t port,
+ const char *digest)
+{
+ bridge_info_t *bridge =
+ get_configured_bridge_by_addr_port_digest(addr, port, digest);
+ if (bridge && tor_digest_is_zero(bridge->identity)) {
+ char *transport_info = NULL;
+ const char *transport_name =
+ find_transport_name_by_bridge_addrport(addr, port);
+ if (transport_name)
+ tor_asprintf(&transport_info, " (with transport '%s')", transport_name);
+
+ memcpy(bridge->identity, digest, DIGEST_LEN);
+ log_notice(LD_DIR, "Learned fingerprint %s for bridge %s%s.",
+ hex_str(digest, DIGEST_LEN), fmt_addrport(addr, port),
+ transport_info ? transport_info : "");
+ tor_free(transport_info);
+ }
+}
+
+/** Return true if <b>bridge</b> has the same identity digest as
+ * <b>digest</b>. If <b>digest</b> is NULL, it matches
+ * bridges with unspecified identity digests. */
+static int
+bridge_has_digest(const bridge_info_t *bridge, const char *digest)
+{
+ if (digest)
+ return tor_memeq(digest, bridge->identity, DIGEST_LEN);
+ else
+ return tor_digest_is_zero(bridge->identity);
+}
+
+/** We are about to add a new bridge at <b>addr</b>:<b>port</b>, with optional
+ * <b>digest</b> and <b>transport_name</b>. Mark for removal any previously
+ * existing bridge with the same address and port, and warn the user as
+ * appropriate.
+ */
+static void
+bridge_resolve_conflicts(const tor_addr_t *addr, uint16_t port,
+ const char *digest, const char *transport_name)
+{
+ /* Iterate the already-registered bridge list:
+
+ If you find a bridge with the same adress and port, mark it for
+ removal. It doesn't make sense to have two active bridges with
+ the same IP:PORT. If the bridge in question has a different
+ digest or transport than <b>digest</b>/<b>transport_name</b>,
+ it's probably a misconfiguration and we should warn the user.
+ */
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge) {
+ if (bridge->marked_for_removal)
+ continue;
+
+ if (tor_addr_eq(&bridge->addr, addr) && (bridge->port == port)) {
+
+ bridge->marked_for_removal = 1;
+
+ if (!bridge_has_digest(bridge, digest) ||
+ strcmp_opt(bridge->transport_name, transport_name)) {
+ /* warn the user */
+ char *bridge_description_new, *bridge_description_old;
+ tor_asprintf(&bridge_description_new, "%s:%s:%s",
+ fmt_addrport(addr, port),
+ digest ? hex_str(digest, DIGEST_LEN) : "",
+ transport_name ? transport_name : "");
+ tor_asprintf(&bridge_description_old, "%s:%s:%s",
+ fmt_addrport(&bridge->addr, bridge->port),
+ tor_digest_is_zero(bridge->identity) ?
+ "" : hex_str(bridge->identity,DIGEST_LEN),
+ bridge->transport_name ? bridge->transport_name : "");
+
+ log_warn(LD_GENERAL,"Tried to add bridge '%s', but we found a conflict"
+ " with the already registered bridge '%s'. We will discard"
+ " the old bridge and keep '%s'. If this is not what you"
+ " wanted, please change your configuration file accordingly.",
+ bridge_description_new, bridge_description_old,
+ bridge_description_new);
+
+ tor_free(bridge_description_new);
+ tor_free(bridge_description_old);
+ }
+ }
+ } SMARTLIST_FOREACH_END(bridge);
+}
+
+/** Return True if we have a bridge that uses a transport with name
+ * <b>transport_name</b>. */
+int
+transport_is_needed(const char *transport_name)
+{
+ if (!bridge_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (bridge->transport_name &&
+ !strcmp(bridge->transport_name, transport_name))
+ return 1;
+ } SMARTLIST_FOREACH_END(bridge);
+
+ return 0;
+}
+
+/** Register the bridge information in <b>bridge_line</b> to the
+ * bridge subsystem. Steals reference of <b>bridge_line</b>. */
+void
+bridge_add_from_config(bridge_line_t *bridge_line)
+{
+ bridge_info_t *b;
+
+ { /* Log the bridge we are about to register: */
+ log_debug(LD_GENERAL, "Registering bridge at %s (transport: %s) (%s)",
+ fmt_addrport(&bridge_line->addr, bridge_line->port),
+ bridge_line->transport_name ?
+ bridge_line->transport_name : "no transport",
+ tor_digest_is_zero(bridge_line->digest) ?
+ "no key listed" : hex_str(bridge_line->digest, DIGEST_LEN));
+
+ if (bridge_line->socks_args) { /* print socks arguments */
+ int i = 0;
+
+ tor_assert(smartlist_len(bridge_line->socks_args) > 0);
+
+ log_debug(LD_GENERAL, "Bridge uses %d SOCKS arguments:",
+ smartlist_len(bridge_line->socks_args));
+ SMARTLIST_FOREACH(bridge_line->socks_args, const char *, arg,
+ log_debug(LD_CONFIG, "%d: %s", ++i, arg));
+ }
+ }
+
+ bridge_resolve_conflicts(&bridge_line->addr,
+ bridge_line->port,
+ bridge_line->digest,
+ bridge_line->transport_name);
+
+ b = tor_malloc_zero(sizeof(bridge_info_t));
+ tor_addr_copy(&b->addr, &bridge_line->addr);
+ b->port = bridge_line->port;
+ memcpy(b->identity, bridge_line->digest, DIGEST_LEN);
+ if (bridge_line->transport_name)
+ b->transport_name = bridge_line->transport_name;
+ b->fetch_status.schedule = DL_SCHED_BRIDGE;
+ b->socks_args = bridge_line->socks_args;
+ if (!bridge_list)
+ bridge_list = smartlist_new();
+
+ tor_free(bridge_line); /* Deallocate bridge_line now. */
+
+ smartlist_add(bridge_list, b);
+}
+
+/** Return true iff <b>routerset</b> contains the bridge <b>bridge</b>. */
+static int
+routerset_contains_bridge(const routerset_t *routerset,
+ const bridge_info_t *bridge)
+{
+ int result;
+ extend_info_t *extinfo;
+ tor_assert(bridge);
+ if (!routerset)
+ return 0;
+
+ extinfo = extend_info_new(
+ NULL, bridge->identity, NULL, NULL, &bridge->addr, bridge->port);
+ result = routerset_contains_extendinfo(routerset, extinfo);
+ extend_info_free(extinfo);
+ return result;
+}
+
+/** If <b>digest</b> is one of our known bridges, return it. */
+static bridge_info_t *
+find_bridge_by_digest(const char *digest)
+{
+ SMARTLIST_FOREACH(bridge_list, bridge_info_t *, bridge,
+ {
+ if (tor_memeq(bridge->identity, digest, DIGEST_LEN))
+ return bridge;
+ });
+ return NULL;
+}
+
+/** Given the <b>addr</b> and <b>port</b> of a bridge, if that bridge
+ * supports a pluggable transport, return its name. Otherwise, return
+ * NULL. */
+const char *
+find_transport_name_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ if (!bridge_list)
+ return NULL;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (tor_addr_eq(&bridge->addr, addr) &&
+ (bridge->port == port))
+ return bridge->transport_name;
+ } SMARTLIST_FOREACH_END(bridge);
+
+ return NULL;
+}
+
+/** If <b>addr</b> and <b>port</b> match the address and port of a
+ * bridge of ours that uses pluggable transports, place its transport
+ * in <b>transport</b>.
+ *
+ * Return 0 on success (found a transport, or found a bridge with no
+ * transport, or found no bridge); return -1 if we should be using a
+ * transport, but the transport could not be found.
+ */
+int
+get_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
+ const transport_t **transport)
+{
+ *transport = NULL;
+ if (!bridge_list)
+ return 0;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, const bridge_info_t *, bridge) {
+ if (tor_addr_eq(&bridge->addr, addr) &&
+ (bridge->port == port)) { /* bridge matched */
+ if (bridge->transport_name) { /* it also uses pluggable transports */
+ *transport = transport_get_by_name(bridge->transport_name);
+ if (*transport == NULL) { /* it uses pluggable transports, but
+ the transport could not be found! */
+ return -1;
+ }
+ return 0;
+ } else { /* bridge matched, but it doesn't use transports. */
+ break;
+ }
+ }
+ } SMARTLIST_FOREACH_END(bridge);
+
+ *transport = NULL;
+ return 0;
+}
+
+/** Return a smartlist containing all the SOCKS arguments that we
+ * should pass to the SOCKS proxy. */
+const smartlist_t *
+get_socks_args_by_bridge_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ bridge_info_t *bridge = get_configured_bridge_by_addr_port_digest(addr,
+ port,
+ NULL);
+ return bridge ? bridge->socks_args : NULL;
+}
+
+/** We need to ask <b>bridge</b> for its server descriptor. */
+static void
+launch_direct_bridge_descriptor_fetch(bridge_info_t *bridge)
+{
+ const or_options_t *options = get_options();
+
+ if (connection_get_by_type_addr_port_purpose(
+ CONN_TYPE_DIR, &bridge->addr, bridge->port,
+ DIR_PURPOSE_FETCH_SERVERDESC))
+ return; /* it's already on the way */
+
+ if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
+ download_status_mark_impossible(&bridge->fetch_status);
+ log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
+ safe_str_client(fmt_and_decorate_addr(&bridge->addr)));
+ return;
+ }
+
+ directory_initiate_command(&bridge->addr,
+ bridge->port, 0/*no dirport*/,
+ bridge->identity,
+ DIR_PURPOSE_FETCH_SERVERDESC,
+ ROUTER_PURPOSE_BRIDGE,
+ DIRIND_ONEHOP, "authority.z", NULL, 0, 0);
+}
+
+/** Fetching the bridge descriptor from the bridge authority returned a
+ * "not found". Fall back to trying a direct fetch. */
+void
+retry_bridge_descriptor_fetch_directly(const char *digest)
+{
+ bridge_info_t *bridge = find_bridge_by_digest(digest);
+ if (!bridge)
+ return; /* not found? oh well. */
+
+ launch_direct_bridge_descriptor_fetch(bridge);
+}
+
+/** For each bridge in our list for which we don't currently have a
+ * descriptor, fetch a new copy of its descriptor -- either directly
+ * from the bridge or via a bridge authority. */
+void
+fetch_bridge_descriptors(const or_options_t *options, time_t now)
+{
+ int num_bridge_auths = get_n_authorities(BRIDGE_DIRINFO);
+ int ask_bridge_directly;
+ int can_use_bridge_authority;
+
+ if (!bridge_list)
+ return;
+
+ /* If we still have unconfigured managed proxies, don't go and
+ connect to a bridge. */
+ if (pt_proxies_configuration_pending())
+ return;
+
+ SMARTLIST_FOREACH_BEGIN(bridge_list, bridge_info_t *, bridge)
+ {
+ if (!download_status_is_ready(&bridge->fetch_status, now,
+ IMPOSSIBLE_TO_DOWNLOAD))
+ continue; /* don't bother, no need to retry yet */
+ if (routerset_contains_bridge(options->ExcludeNodes, bridge)) {
+ download_status_mark_impossible(&bridge->fetch_status);
+ log_warn(LD_APP, "Not using bridge at %s: it is in ExcludeNodes.",
+ safe_str_client(fmt_and_decorate_addr(&bridge->addr)));
+ continue;
+ }
+
+ /* schedule another fetch as if this one will fail, in case it does */
+ download_status_failed(&bridge->fetch_status, 0);
+
+ can_use_bridge_authority = !tor_digest_is_zero(bridge->identity) &&
+ num_bridge_auths;
+ ask_bridge_directly = !can_use_bridge_authority ||
+ !options->UpdateBridgesFromAuthority;
+ log_debug(LD_DIR, "ask_bridge_directly=%d (%d, %d, %d)",
+ ask_bridge_directly, tor_digest_is_zero(bridge->identity),
+ !options->UpdateBridgesFromAuthority, !num_bridge_auths);
+
+ if (ask_bridge_directly &&
+ !fascist_firewall_allows_address_or(&bridge->addr, bridge->port)) {
+ log_notice(LD_DIR, "Bridge at '%s' isn't reachable by our "
+ "firewall policy. %s.",
+ fmt_addrport(&bridge->addr, bridge->port),
+ can_use_bridge_authority ?
+ "Asking bridge authority instead" : "Skipping");
+ if (can_use_bridge_authority)
+ ask_bridge_directly = 0;
+ else
+ continue;
+ }
+
+ if (ask_bridge_directly) {
+ /* we need to ask the bridge itself for its descriptor. */
+ launch_direct_bridge_descriptor_fetch(bridge);
+ } else {
+ /* We have a digest and we want to ask an authority. We could
+ * combine all the requests into one, but that may give more
+ * hints to the bridge authority than we want to give. */
+ char resource[10 + HEX_DIGEST_LEN];
+ memcpy(resource, "fp/", 3);
+ base16_encode(resource+3, HEX_DIGEST_LEN+1,
+ bridge->identity, DIGEST_LEN);
+ memcpy(resource+3+HEX_DIGEST_LEN, ".z", 3);
+ log_info(LD_DIR, "Fetching bridge info '%s' from bridge authority.",
+ resource);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_SERVERDESC,
+ ROUTER_PURPOSE_BRIDGE, resource, 0);
+ }
+ }
+ SMARTLIST_FOREACH_END(bridge);
+}
+
+/** If our <b>bridge</b> is configured to be a different address than
+ * the bridge gives in <b>node</b>, rewrite the routerinfo
+ * we received to use the address we meant to use. Now we handle
+ * multihomed bridges better.
+ */
+static void
+rewrite_node_address_for_bridge(const bridge_info_t *bridge, node_t *node)
+{
+ /* XXXX move this function. */
+ /* XXXX overridden addresses should really live in the node_t, so that the
+ * routerinfo_t and the microdesc_t can be immutable. But we can only
+ * do that safely if we know that no function that connects to an OR
+ * does so through an address from any source other than node_get_addr().
+ */
+ tor_addr_t addr;
+
+ if (node->ri) {
+ routerinfo_t *ri = node->ri;
+ tor_addr_from_ipv4h(&addr, ri->addr);
+
+ if ((!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
+ bridge->port == ri->or_port) ||
+ (!tor_addr_compare(&bridge->addr, &ri->ipv6_addr, CMP_EXACT) &&
+ bridge->port == ri->ipv6_orport)) {
+ /* they match, so no need to do anything */
+ } else {
+ if (tor_addr_family(&bridge->addr) == AF_INET) {
+ ri->addr = tor_addr_to_ipv4h(&bridge->addr);
+ ri->or_port = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerinfo for '%s' to match configured "
+ "address %s:%d.",
+ ri->nickname, fmt_addr32(ri->addr), ri->or_port);
+ } else if (tor_addr_family(&bridge->addr) == AF_INET6) {
+ tor_addr_copy(&ri->ipv6_addr, &bridge->addr);
+ ri->ipv6_orport = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerinfo for '%s' to match configured "
+ "address %s.",
+ ri->nickname, fmt_addrport(&ri->ipv6_addr, ri->ipv6_orport));
+ } else {
+ log_err(LD_BUG, "Address family not supported: %d.",
+ tor_addr_family(&bridge->addr));
+ return;
+ }
+ }
+
+ /* Mark which address to use based on which bridge_t we got. */
+ node->ipv6_preferred = (tor_addr_family(&bridge->addr) == AF_INET6 &&
+ !tor_addr_is_null(&node->ri->ipv6_addr));
+
+ /* XXXipv6 we lack support for falling back to another address for
+ the same relay, warn the user */
+ if (!tor_addr_is_null(&ri->ipv6_addr)) {
+ tor_addr_port_t ap;
+ node_get_pref_orport(node, &ap);
+ log_notice(LD_CONFIG,
+ "Bridge '%s' has both an IPv4 and an IPv6 address. "
+ "Will prefer using its %s address (%s).",
+ ri->nickname,
+ tor_addr_family(&ap.addr) == AF_INET6 ? "IPv6" : "IPv4",
+ fmt_addrport(&ap.addr, ap.port));
+ }
+ }
+ if (node->rs) {
+ routerstatus_t *rs = node->rs;
+ tor_addr_from_ipv4h(&addr, rs->addr);
+
+ if (!tor_addr_compare(&bridge->addr, &addr, CMP_EXACT) &&
+ bridge->port == rs->or_port) {
+ /* they match, so no need to do anything */
+ } else {
+ rs->addr = tor_addr_to_ipv4h(&bridge->addr);
+ rs->or_port = bridge->port;
+ log_info(LD_DIR,
+ "Adjusted bridge routerstatus for '%s' to match "
+ "configured address %s.",
+ rs->nickname, fmt_addrport(&bridge->addr, rs->or_port));
+ }
+ }
+}
+
+/** We just learned a descriptor for a bridge. See if that
+ * digest is in our entry guard list, and add it if not. */
+void
+learned_bridge_descriptor(routerinfo_t *ri, int from_cache)
+{
+ tor_assert(ri);
+ tor_assert(ri->purpose == ROUTER_PURPOSE_BRIDGE);
+ if (get_options()->UseBridges) {
+ int first = num_bridges_usable() <= 1;
+ bridge_info_t *bridge = get_configured_bridge_by_routerinfo(ri);
+ time_t now = time(NULL);
+ router_set_status(ri->cache_info.identity_digest, 1);
+
+ if (bridge) { /* if we actually want to use this one */
+ node_t *node;
+ /* it's here; schedule its re-fetch for a long time from now. */
+ if (!from_cache)
+ download_status_reset(&bridge->fetch_status);
+
+ node = node_get_mutable_by_id(ri->cache_info.identity_digest);
+ tor_assert(node);
+ rewrite_node_address_for_bridge(bridge, node);
+ add_an_entry_guard(node, 1, 1, 0, 0);
+
+ log_notice(LD_DIR, "new bridge descriptor '%s' (%s): %s", ri->nickname,
+ from_cache ? "cached" : "fresh", router_describe(ri));
+ /* set entry->made_contact so if it goes down we don't drop it from
+ * our entry node list */
+ entry_guard_register_connect_status(ri->cache_info.identity_digest,
+ 1, 0, now);
+ if (first) {
+ routerlist_retry_directory_downloads(now);
+ }
+ }
+ }
+}
+
+/** Return the number of bridges that have descriptors that
+ * are marked with purpose 'bridge' and are running.
+ *
+ * We use this function to decide if we're ready to start building
+ * circuits through our bridges, or if we need to wait until the
+ * directory "server/authority" requests finish. */
+int
+any_bridge_descriptors_known(void)
+{
+ tor_assert(get_options()->UseBridges);
+ return choose_random_entry(NULL) != NULL;
+}
+
+/** Return the number of bridges that have descriptors that are marked with
+ * purpose 'bridge' and are running.
+ */
+static int
+num_bridges_usable(void)
+{
+ int n_options = 0;
+ tor_assert(get_options()->UseBridges);
+ (void) choose_random_entry_impl(NULL, 0, 0, &n_options);
+ return n_options;
+}
+
+/** Return 1 if we have at least one descriptor for an entry guard
+ * (bridge or member of EntryNodes) and all descriptors we know are
+ * down. Else return 0. If <b>act</b> is 1, then mark the down guards
+ * up; else just observe and report. */
+static int
+entries_retry_helper(const or_options_t *options, int act)
+{
+ const node_t *node;
+ int any_known = 0;
+ int any_running = 0;
+ int need_bridges = options->UseBridges != 0;
+ if (!entry_guards)
+ entry_guards = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ node = node_get_by_id(e->identity);
+ if (node && node_has_descriptor(node) &&
+ node_is_bridge(node) == need_bridges) {
+ any_known = 1;
+ if (node->is_running)
+ any_running = 1; /* some entry is both known and running */
+ else if (act) {
+ /* Mark all current connections to this OR as unhealthy, since
+ * otherwise there could be one that started 30 seconds
+ * ago, and in 30 seconds it will time out, causing us to mark
+ * the node down and undermine the retry attempt. We mark even
+ * the established conns, since if the network just came back
+ * we'll want to attach circuits to fresh conns. */
+ connection_or_set_bad_connections(node->identity, 1);
+
+ /* mark this entry node for retry */
+ router_set_status(node->identity, 1);
+ e->can_retry = 1;
+ e->bad_since = 0;
+ }
+ }
+ } SMARTLIST_FOREACH_END(e);
+ log_debug(LD_DIR, "%d: any_known %d, any_running %d",
+ act, any_known, any_running);
+ return any_known && !any_running;
+}
+
+/** Do we know any descriptors for our bridges / entrynodes, and are
+ * all the ones we have descriptors for down? */
+int
+entries_known_but_down(const or_options_t *options)
+{
+ tor_assert(entry_list_is_constrained(options));
+ return entries_retry_helper(options, 0);
+}
+
+/** Mark all down known bridges / entrynodes up. */
+void
+entries_retry_all(const or_options_t *options)
+{
+ tor_assert(entry_list_is_constrained(options));
+ entries_retry_helper(options, 1);
+}
+
+/** Return true if at least one of our bridges runs a Tor version that can
+ * provide microdescriptors to us. If not, we'll fall back to asking for
+ * full descriptors. */
+int
+any_bridge_supports_microdescriptors(void)
+{
+ const node_t *node;
+ if (!get_options()->UseBridges || !entry_guards)
+ return 0;
+ SMARTLIST_FOREACH_BEGIN(entry_guards, entry_guard_t *, e) {
+ node = node_get_by_id(e->identity);
+ if (node && node->is_running &&
+ node_is_bridge(node) && node_is_a_configured_bridge(node) &&
+ node_understands_microdescriptors(node)) {
+ /* This is one of our current bridges, and we know enough about
+ * it to know that it will be able to answer our microdescriptor
+ * questions. */
+ return 1;
+ }
+ } SMARTLIST_FOREACH_END(e);
+ return 0;
+}
+
+/** Release all storage held by the list of entry guards and related
+ * memory structs. */
+void
+entry_guards_free_all(void)
+{
+ if (entry_guards) {
+ SMARTLIST_FOREACH(entry_guards, entry_guard_t *, e,
+ entry_guard_free(e));
+ smartlist_free(entry_guards);
+ entry_guards = NULL;
+ }
+ clear_bridge_list();
+ smartlist_free(bridge_list);
+ bridge_list = NULL;
+ circuit_build_times_free_timeouts(get_circuit_build_times_mutable());
+}
+
diff --git a/src/or/entrynodes.h b/src/or/entrynodes.h
new file mode 100644
index 000000000..e229f3b79
--- /dev/null
+++ b/src/or/entrynodes.h
@@ -0,0 +1,132 @@
+/* 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 entrynodes.h
+ * \brief Header file for circuitbuild.c.
+ **/
+
+#ifndef TOR_ENTRYNODES_H
+#define TOR_ENTRYNODES_H
+
+#if 1
+/* XXXX NM I would prefer that all of this stuff be private to
+ * entrynodes.c. */
+
+/** An entry_guard_t represents our information about a chosen long-term
+ * first hop, known as a "helper" node in the literature. We can't just
+ * use a node_t, since we want to remember these even when we
+ * don't have any directory info. */
+typedef struct entry_guard_t {
+ char nickname[MAX_NICKNAME_LEN+1];
+ char identity[DIGEST_LEN];
+ time_t chosen_on_date; /**< Approximately when was this guard added?
+ * "0" if we don't know. */
+ char *chosen_by_version; /**< What tor version added this guard? NULL
+ * if we don't know. */
+ unsigned int made_contact : 1; /**< 0 if we have never connected to this
+ * router, 1 if we have. */
+ unsigned int can_retry : 1; /**< Should we retry connecting to this entry,
+ * in spite of having it marked as unreachable?*/
+ unsigned int path_bias_noticed : 1; /**< Did we alert the user about path
+ * bias for this node already? */
+ unsigned int path_bias_warned : 1; /**< Did we alert the user about path bias
+ * for this node already? */
+ unsigned int path_bias_extreme : 1; /**< Did we alert the user about path
+ * bias for this node already? */
+ unsigned int path_bias_disabled : 1; /**< Have we disabled this node because
+ * of path bias issues? */
+ unsigned int path_bias_use_noticed : 1; /**< Did we alert the user about path
+ * use bias for this node already? */
+ unsigned int path_bias_use_extreme : 1; /**< Did we alert the user about path
+ * use bias for this node already? */
+ unsigned int is_dir_cache : 1; /**< Is this node a directory cache? */
+ time_t bad_since; /**< 0 if this guard is currently usable, or the time at
+ * which it was observed to become (according to the
+ * directory or the user configuration) unusable. */
+ time_t unreachable_since; /**< 0 if we can connect to this guard, or the
+ * time at which we first noticed we couldn't
+ * connect to it. */
+ time_t last_attempted; /**< 0 if we can connect to this guard, or the time
+ * at which we last failed to connect to it. */
+
+ double circ_attempts; /**< Number of circuits this guard has "attempted" */
+ double circ_successes; /**< Number of successfully built circuits using
+ * this guard as first hop. */
+ double successful_circuits_closed; /**< Number of circuits that carried
+ * streams successfully. */
+ double collapsed_circuits; /**< Number of fully built circuits that were
+ * remotely closed before any streams were
+ * attempted. */
+ double unusable_circuits; /**< Number of circuits for which streams were
+ * attempted, but none succeeded. */
+ double timeouts; /**< Number of 'right-censored' circuit timeouts for this
+ * guard. */
+ double use_attempts; /**< Number of circuits we tried to use with streams */
+ double use_successes; /**< Number of successfully used circuits using
+ * this guard as first hop. */
+} entry_guard_t;
+
+entry_guard_t *entry_guard_get_by_id_digest(const char *digest);
+void entry_guards_changed(void);
+const smartlist_t *get_entry_guards(void);
+int num_live_entry_guards(int for_directory);
+
+#endif
+
+void remove_all_entry_guards(void);
+
+void entry_guards_compute_status(const or_options_t *options, time_t now);
+int entry_guard_register_connect_status(const char *digest, int succeeded,
+ int mark_relay_status, time_t now);
+void entry_nodes_should_be_added(void);
+int entry_list_is_constrained(const or_options_t *options);
+const node_t *choose_random_entry(cpath_build_state_t *state);
+const node_t *choose_random_dirguard(dirinfo_type_t t);
+int entry_guards_parse_state(or_state_t *state, int set, char **msg);
+void entry_guards_update_state(or_state_t *state);
+int getinfo_helper_entry_guards(control_connection_t *conn,
+ const char *question, char **answer,
+ const char **errmsg);
+
+void mark_bridge_list(void);
+void sweep_bridge_list(void);
+
+int routerinfo_is_a_configured_bridge(const routerinfo_t *ri);
+int node_is_a_configured_bridge(const node_t *node);
+void learned_router_identity(const tor_addr_t *addr, uint16_t port,
+ const char *digest);
+struct bridge_line_t;
+void bridge_add_from_config(struct bridge_line_t *bridge_line);
+void retry_bridge_descriptor_fetch_directly(const char *digest);
+void fetch_bridge_descriptors(const or_options_t *options, time_t now);
+void learned_bridge_descriptor(routerinfo_t *ri, int from_cache);
+int any_bridge_descriptors_known(void);
+int entries_known_but_down(const or_options_t *options);
+void entries_retry_all(const or_options_t *options);
+
+int any_bridge_supports_microdescriptors(void);
+const smartlist_t *get_socks_args_by_bridge_addrport(const tor_addr_t *addr,
+ uint16_t port);
+
+int any_bridges_dont_support_microdescriptors(void);
+
+void entry_guards_free_all(void);
+
+const char *find_transport_name_by_bridge_addrport(const tor_addr_t *addr,
+ uint16_t port);
+struct transport_t;
+int get_transport_by_bridge_addrport(const tor_addr_t *addr, uint16_t port,
+ const struct transport_t **transport);
+
+int transport_is_needed(const char *transport_name);
+int validate_pluggable_transports_config(void);
+
+double pathbias_get_close_success_count(entry_guard_t *guard);
+double pathbias_get_use_success_count(entry_guard_t *guard);
+
+#endif
+
diff --git a/src/or/eventdns_tor.h b/src/or/eventdns_tor.h
index 4c40b3524..69662281b 100644
--- a/src/or/eventdns_tor.h
+++ b/src/or/eventdns_tor.h
@@ -1,6 +1,9 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+#ifndef TOR_EVENTDNS_TOR_H
+#define TOR_EVENTDNS_TOR_H
+
#include "orconfig.h"
#define DNS_USE_OPENSSL_FOR_ID
#ifndef HAVE_UINT
@@ -18,3 +21,5 @@ typedef unsigned char u_char;
#include "util.h"
#include "compat.h"
+#endif
+
diff --git a/src/or/ext_orport.c b/src/or/ext_orport.c
new file mode 100644
index 000000000..0d28a9199
--- /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, EXT_OR_PORT_AUTH_NONCE_LEN);
+
+ 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/fp_pair.c b/src/or/fp_pair.c
new file mode 100644
index 000000000..55e4c89a4
--- /dev/null
+++ b/src/or/fp_pair.c
@@ -0,0 +1,299 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "fp_pair.h"
+
+/* Define fp_pair_map_t structures */
+
+struct fp_pair_map_entry_s {
+ HT_ENTRY(fp_pair_map_entry_s) node;
+ void *val;
+ fp_pair_t key;
+};
+
+struct fp_pair_map_s {
+ HT_HEAD(fp_pair_map_impl, fp_pair_map_entry_s) head;
+};
+
+/*
+ * Hash function and equality checker for fp_pair_map_t
+ */
+
+/** Compare fp_pair_entry_t objects by key value. */
+static INLINE int
+fp_pair_map_entries_eq(const fp_pair_map_entry_t *a,
+ const fp_pair_map_entry_t *b)
+{
+ return tor_memeq(&(a->key), &(b->key), sizeof(fp_pair_t));
+}
+
+/** Return a hash value for an fp_pair_entry_t. */
+static INLINE unsigned int
+fp_pair_map_entry_hash(const fp_pair_map_entry_t *a)
+{
+ tor_assert(sizeof(a->key) == DIGEST_LEN*2);
+ return (unsigned) siphash24g(&a->key, DIGEST_LEN*2);
+}
+
+/*
+ * Hash table functions for fp_pair_map_t
+ */
+
+HT_PROTOTYPE(fp_pair_map_impl, fp_pair_map_entry_s, node,
+ fp_pair_map_entry_hash, fp_pair_map_entries_eq)
+HT_GENERATE(fp_pair_map_impl, fp_pair_map_entry_s, node,
+ fp_pair_map_entry_hash, fp_pair_map_entries_eq,
+ 0.6, tor_malloc, tor_realloc, tor_free)
+
+/** Constructor to create a new empty map from fp_pair_t to void *
+ */
+
+fp_pair_map_t *
+fp_pair_map_new(void)
+{
+ fp_pair_map_t *result;
+
+ result = tor_malloc(sizeof(fp_pair_map_t));
+ HT_INIT(fp_pair_map_impl, &result->head);
+ return result;
+}
+
+/** Set the current value for key to val; returns the previous
+ * value for key if one was set, or NULL if one was not.
+ */
+
+void *
+fp_pair_map_set(fp_pair_map_t *map, const fp_pair_t *key, void *val)
+{
+ fp_pair_map_entry_t *resolve;
+ fp_pair_map_entry_t search;
+ void *oldval;
+
+ tor_assert(map);
+ tor_assert(key);
+ tor_assert(val);
+
+ memcpy(&(search.key), key, sizeof(*key));
+ resolve = HT_FIND(fp_pair_map_impl, &(map->head), &search);
+ if (resolve) {
+ oldval = resolve->val;
+ resolve->val = val;
+ } else {
+ resolve = tor_malloc_zero(sizeof(fp_pair_map_entry_t));
+ memcpy(&(resolve->key), key, sizeof(*key));
+ resolve->val = val;
+ HT_INSERT(fp_pair_map_impl, &(map->head), resolve);
+ oldval = NULL;
+ }
+
+ return oldval;
+}
+
+/** Set the current value for the key (first, second) to val; returns
+ * the previous value for key if one was set, or NULL if one was not.
+ */
+
+void *
+fp_pair_map_set_by_digests(fp_pair_map_t *map,
+ const char *first, const char *second,
+ void *val)
+{
+ fp_pair_t k;
+
+ tor_assert(first);
+ tor_assert(second);
+
+ memcpy(k.first, first, DIGEST_LEN);
+ memcpy(k.second, second, DIGEST_LEN);
+
+ return fp_pair_map_set(map, &k, val);
+}
+
+/** Return the current value associated with key, or NULL if no value is set.
+ */
+
+void *
+fp_pair_map_get(const fp_pair_map_t *map, const fp_pair_t *key)
+{
+ fp_pair_map_entry_t *resolve;
+ fp_pair_map_entry_t search;
+ void *val = NULL;
+
+ tor_assert(map);
+ tor_assert(key);
+
+ memcpy(&(search.key), key, sizeof(*key));
+ resolve = HT_FIND(fp_pair_map_impl, &(map->head), &search);
+ if (resolve) val = resolve->val;
+
+ return val;
+}
+
+/** Return the current value associated the key (first, second), or
+ * NULL if no value is set.
+ */
+
+void *
+fp_pair_map_get_by_digests(const fp_pair_map_t *map,
+ const char *first, const char *second)
+{
+ fp_pair_t k;
+
+ tor_assert(first);
+ tor_assert(second);
+
+ memcpy(k.first, first, DIGEST_LEN);
+ memcpy(k.second, second, DIGEST_LEN);
+
+ return fp_pair_map_get(map, &k);
+}
+
+/** Remove the value currently associated with key from the map.
+ * Return the value if one was set, or NULL if there was no entry for
+ * key. The caller must free any storage associated with the
+ * returned value.
+ */
+
+void *
+fp_pair_map_remove(fp_pair_map_t *map, const fp_pair_t *key)
+{
+ fp_pair_map_entry_t *resolve;
+ fp_pair_map_entry_t search;
+ void *val = NULL;
+
+ tor_assert(map);
+ tor_assert(key);
+
+ memcpy(&(search.key), key, sizeof(*key));
+ resolve = HT_REMOVE(fp_pair_map_impl, &(map->head), &search);
+ if (resolve) {
+ val = resolve->val;
+ tor_free(resolve);
+ }
+
+ return val;
+}
+
+/** Remove all entries from map, and deallocate storage for those entries.
+ * If free_val is provided, it is invoked on every value in map.
+ */
+
+void
+fp_pair_map_free(fp_pair_map_t *map, void (*free_val)(void*))
+{
+ fp_pair_map_entry_t **ent, **next, *this;
+
+ if (map) {
+ for (ent = HT_START(fp_pair_map_impl, &(map->head));
+ ent != NULL; ent = next) {
+ this = *ent;
+ next = HT_NEXT_RMV(fp_pair_map_impl, &(map->head), ent);
+ if (free_val) free_val(this->val);
+ tor_free(this);
+ }
+ tor_assert(HT_EMPTY(&(map->head)));
+ HT_CLEAR(fp_pair_map_impl, &(map->head));
+ tor_free(map);
+ }
+}
+
+/** Return true iff map has no entries.
+ */
+
+int
+fp_pair_map_isempty(const fp_pair_map_t *map)
+{
+ tor_assert(map);
+
+ return HT_EMPTY(&(map->head));
+}
+
+/** Return the number of items in map.
+ */
+
+int
+fp_pair_map_size(const fp_pair_map_t *map)
+{
+ tor_assert(map);
+
+ return HT_SIZE(&(map->head));
+}
+
+/** return an iterator pointing to the start of map.
+ */
+
+fp_pair_map_iter_t *
+fp_pair_map_iter_init(fp_pair_map_t *map)
+{
+ tor_assert(map);
+
+ return HT_START(fp_pair_map_impl, &(map->head));
+}
+
+/** Advance iter a single step to the next entry of map, and return
+ * its new value.
+ */
+
+fp_pair_map_iter_t *
+fp_pair_map_iter_next(fp_pair_map_t *map, fp_pair_map_iter_t *iter)
+{
+ tor_assert(map);
+ tor_assert(iter);
+
+ return HT_NEXT(fp_pair_map_impl, &(map->head), iter);
+}
+
+/** Advance iter a single step to the next entry of map, removing the current
+ * entry, and return its new value.
+ */
+
+fp_pair_map_iter_t *
+fp_pair_map_iter_next_rmv(fp_pair_map_t *map, fp_pair_map_iter_t *iter)
+{
+ fp_pair_map_entry_t *rmv;
+
+ tor_assert(map);
+ tor_assert(iter);
+ tor_assert(*iter);
+
+ rmv = *iter;
+ iter = HT_NEXT_RMV(fp_pair_map_impl, &(map->head), iter);
+ tor_free(rmv);
+
+ return iter;
+}
+
+/** Set *key_out and *val_out to the current entry pointed to by iter.
+ */
+
+void
+fp_pair_map_iter_get(fp_pair_map_iter_t *iter,
+ fp_pair_t *key_out, void **val_out)
+{
+ tor_assert(iter);
+ tor_assert(*iter);
+
+ if (key_out) memcpy(key_out, &((*iter)->key), sizeof(fp_pair_t));
+ if (val_out) *val_out = (*iter)->val;
+}
+
+/** Return true iff iter has advanced past the last entry of its map.
+ */
+
+int
+fp_pair_map_iter_done(fp_pair_map_iter_t *iter)
+{
+ return (iter == NULL);
+}
+
+/** Assert if anything has gone wrong with the internal
+ * representation of map.
+ */
+
+void
+fp_pair_map_assert_ok(const fp_pair_map_t *map)
+{
+ tor_assert(!fp_pair_map_impl_HT_REP_IS_BAD_(&(map->head)));
+}
+
diff --git a/src/or/fp_pair.h b/src/or/fp_pair.h
new file mode 100644
index 000000000..89f664a81
--- /dev/null
+++ b/src/or/fp_pair.h
@@ -0,0 +1,45 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file fp_pair.h
+ * \brief Header file for fp_pair.c.
+ **/
+
+#ifndef _TOR_FP_PAIR_H
+#define _TOR_FP_PAIR_H
+
+/*
+ * Declare fp_pair_map_t functions and structs
+ */
+
+typedef struct fp_pair_map_entry_s fp_pair_map_entry_t;
+typedef struct fp_pair_map_s fp_pair_map_t;
+typedef fp_pair_map_entry_t *fp_pair_map_iter_t;
+
+fp_pair_map_t * fp_pair_map_new(void);
+void * fp_pair_map_set(fp_pair_map_t *map, const fp_pair_t *key, void *val);
+void * fp_pair_map_set_by_digests(fp_pair_map_t *map,
+ const char *first, const char *second,
+ void *val);
+void * fp_pair_map_get(const fp_pair_map_t *map, const fp_pair_t *key);
+void * fp_pair_map_get_by_digests(const fp_pair_map_t *map,
+ const char *first, const char *second);
+void * fp_pair_map_remove(fp_pair_map_t *map, const fp_pair_t *key);
+void fp_pair_map_free(fp_pair_map_t *map, void (*free_val)(void*));
+int fp_pair_map_isempty(const fp_pair_map_t *map);
+int fp_pair_map_size(const fp_pair_map_t *map);
+fp_pair_map_iter_t * fp_pair_map_iter_init(fp_pair_map_t *map);
+fp_pair_map_iter_t * fp_pair_map_iter_next(fp_pair_map_t *map,
+ fp_pair_map_iter_t *iter);
+fp_pair_map_iter_t * fp_pair_map_iter_next_rmv(fp_pair_map_t *map,
+ fp_pair_map_iter_t *iter);
+void fp_pair_map_iter_get(fp_pair_map_iter_t *iter,
+ fp_pair_t *key_out, void **val_out);
+int fp_pair_map_iter_done(fp_pair_map_iter_t *iter);
+void fp_pair_map_assert_ok(const fp_pair_map_t *map);
+
+#undef DECLARE_MAP_FNS
+
+#endif
+
diff --git a/src/or/geoip.c b/src/or/geoip.c
index 6b7cc82b8..f722bac46 100644
--- a/src/or/geoip.c
+++ b/src/or/geoip.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -21,17 +21,23 @@
static void clear_geoip_db(void);
static void init_geoip_countries(void);
-/** An entry from the GeoIP file: maps an IP range to a country. */
-typedef struct geoip_entry_t {
+/** An entry from the GeoIP IPv4 file: maps an IPv4 range to a country. */
+typedef struct geoip_ipv4_entry_t {
uint32_t ip_low; /**< The lowest IP in the range, in host order */
uint32_t ip_high; /**< The highest IP in the range, in host order */
intptr_t country; /**< An index into geoip_countries */
-} geoip_entry_t;
+} geoip_ipv4_entry_t;
+
+/** An entry from the GeoIP IPv6 file: maps an IPv6 range to a country. */
+typedef struct geoip_ipv6_entry_t {
+ struct in6_addr ip_low; /**< The lowest IP in the range, in host order */
+ struct in6_addr ip_high; /**< The highest IP in the range, in host order */
+ intptr_t country; /**< An index into geoip_countries */
+} geoip_ipv6_entry_t;
/** A per-country record for GeoIP request history. */
typedef struct geoip_country_t {
char countrycode[3];
- uint32_t n_v2_ns_requests;
uint32_t n_v3_ns_requests;
} geoip_country_t;
@@ -41,45 +47,48 @@ static smartlist_t *geoip_countries = NULL;
* The index is encoded in the pointer, and 1 is added so that NULL can mean
* not found. */
static strmap_t *country_idxplus1_by_lc_code = NULL;
-/** A list of all known geoip_entry_t, sorted by ip_low. */
-static smartlist_t *geoip_entries = NULL;
+/** Lists of all known geoip_ipv4_entry_t and geoip_ipv6_entry_t, sorted
+ * by their respective ip_low. */
+static smartlist_t *geoip_ipv4_entries = NULL, *geoip_ipv6_entries = NULL;
-/** SHA1 digest of the GeoIP file to include in extra-info descriptors. */
+/** SHA1 digest of the GeoIP files to include in extra-info descriptors. */
static char geoip_digest[DIGEST_LEN];
+static char geoip6_digest[DIGEST_LEN];
-/** Return the index of the <b>country</b>'s entry in the GeoIP DB
- * if it is a valid 2-letter country code, otherwise return -1.
- */
+/** Return the index of the <b>country</b>'s entry in the GeoIP
+ * country list if it is a valid 2-letter country code, otherwise
+ * return -1. */
country_t
geoip_get_country(const char *country)
{
- void *_idxplus1;
+ void *idxplus1_;
intptr_t idx;
- _idxplus1 = strmap_get_lc(country_idxplus1_by_lc_code, country);
- if (!_idxplus1)
+ idxplus1_ = strmap_get_lc(country_idxplus1_by_lc_code, country);
+ if (!idxplus1_)
return -1;
- idx = ((uintptr_t)_idxplus1)-1;
+ idx = ((uintptr_t)idxplus1_)-1;
return (country_t)idx;
}
-/** Add an entry to the GeoIP table, mapping all IPs between <b>low</b> and
- * <b>high</b>, inclusive, to the 2-letter country code <b>country</b>.
- */
+/** Add an entry to a GeoIP table, mapping all IP addresses between <b>low</b>
+ * and <b>high</b>, inclusive, to the 2-letter country code <b>country</b>. */
static void
-geoip_add_entry(uint32_t low, uint32_t high, const char *country)
+geoip_add_entry(const tor_addr_t *low, const tor_addr_t *high,
+ const char *country)
{
intptr_t idx;
- geoip_entry_t *ent;
- void *_idxplus1;
+ void *idxplus1_;
- if (high < low)
+ if (tor_addr_family(low) != tor_addr_family(high))
+ return;
+ if (tor_addr_compare(high, low, CMP_EXACT) < 0)
return;
- _idxplus1 = strmap_get_lc(country_idxplus1_by_lc_code, country);
+ idxplus1_ = strmap_get_lc(country_idxplus1_by_lc_code, country);
- if (!_idxplus1) {
+ if (!idxplus1_) {
geoip_country_t *c = tor_malloc_zero(sizeof(geoip_country_t));
strlcpy(c->countrycode, country, sizeof(c->countrycode));
tor_strlower(c->countrycode);
@@ -87,54 +96,103 @@ geoip_add_entry(uint32_t low, uint32_t high, const char *country)
idx = smartlist_len(geoip_countries) - 1;
strmap_set_lc(country_idxplus1_by_lc_code, country, (void*)(idx+1));
} else {
- idx = ((uintptr_t)_idxplus1)-1;
+ idx = ((uintptr_t)idxplus1_)-1;
}
{
geoip_country_t *c = smartlist_get(geoip_countries, idx);
tor_assert(!strcasecmp(c->countrycode, country));
}
- ent = tor_malloc_zero(sizeof(geoip_entry_t));
- ent->ip_low = low;
- ent->ip_high = high;
- ent->country = idx;
- smartlist_add(geoip_entries, ent);
+
+ if (tor_addr_family(low) == AF_INET) {
+ geoip_ipv4_entry_t *ent = tor_malloc_zero(sizeof(geoip_ipv4_entry_t));
+ ent->ip_low = tor_addr_to_ipv4h(low);
+ ent->ip_high = tor_addr_to_ipv4h(high);
+ ent->country = idx;
+ smartlist_add(geoip_ipv4_entries, ent);
+ } else if (tor_addr_family(low) == AF_INET6) {
+ geoip_ipv6_entry_t *ent = tor_malloc_zero(sizeof(geoip_ipv6_entry_t));
+ ent->ip_low = *tor_addr_to_in6(low);
+ ent->ip_high = *tor_addr_to_in6(high);
+ ent->country = idx;
+ smartlist_add(geoip_ipv6_entries, ent);
+ }
}
-/** Add an entry to the GeoIP table, parsing it from <b>line</b>. The
- * format is as for geoip_load_file(). */
-/*private*/ int
-geoip_parse_entry(const char *line)
+/** 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(). */
+STATIC int
+geoip_parse_entry(const char *line, sa_family_t family)
{
- unsigned int low, high;
- char b[3];
+ tor_addr_t low_addr, high_addr;
+ char c[3];
+ char *country = NULL;
+
if (!geoip_countries)
init_geoip_countries();
- if (!geoip_entries)
- geoip_entries = smartlist_new();
+ if (family == AF_INET) {
+ if (!geoip_ipv4_entries)
+ geoip_ipv4_entries = smartlist_new();
+ } else if (family == AF_INET6) {
+ if (!geoip_ipv6_entries)
+ geoip_ipv6_entries = smartlist_new();
+ } else {
+ log_warn(LD_GENERAL, "Unsupported family: %d", family);
+ return -1;
+ }
while (TOR_ISSPACE(*line))
++line;
if (*line == '#')
return 0;
- if (tor_sscanf(line,"%u,%u,%2s", &low, &high, b) == 3) {
- geoip_add_entry(low, high, b);
- return 0;
- } else if (tor_sscanf(line,"\"%u\",\"%u\",\"%2s\",", &low, &high, b) == 3) {
- geoip_add_entry(low, high, b);
- return 0;
- } else {
- log_warn(LD_GENERAL, "Unable to parse line from GEOIP file: %s",
- escaped(line));
- return -1;
+
+ if (family == AF_INET) {
+ unsigned int low, high;
+ if (tor_sscanf(line,"%u,%u,%2s", &low, &high, c) == 3 ||
+ tor_sscanf(line,"\"%u\",\"%u\",\"%2s\",", &low, &high, c) == 3) {
+ tor_addr_from_ipv4h(&low_addr, low);
+ tor_addr_from_ipv4h(&high_addr, high);
+ } else
+ goto fail;
+ country = c;
+ } else { /* AF_INET6 */
+ char buf[512];
+ char *low_str, *high_str;
+ struct in6_addr low, high;
+ char *strtok_state;
+ strlcpy(buf, line, sizeof(buf));
+ low_str = tor_strtok_r(buf, ",", &strtok_state);
+ if (!low_str)
+ goto fail;
+ high_str = tor_strtok_r(NULL, ",", &strtok_state);
+ if (!high_str)
+ goto fail;
+ country = tor_strtok_r(NULL, "\n", &strtok_state);
+ if (!country)
+ goto fail;
+ if (strlen(country) != 2)
+ goto fail;
+ if (tor_inet_pton(AF_INET6, low_str, &low) <= 0)
+ goto fail;
+ tor_addr_from_in6(&low_addr, &low);
+ if (tor_inet_pton(AF_INET6, high_str, &high) <= 0)
+ goto fail;
+ tor_addr_from_in6(&high_addr, &high);
}
+ geoip_add_entry(&low_addr, &high_addr, country);
+ return 0;
+
+ fail:
+ log_warn(LD_GENERAL, "Unable to parse line from GEOIP %s file: %s",
+ family == AF_INET ? "IPv4" : "IPv6", escaped(line));
+ return -1;
}
/** Sorting helper: return -1, 1, or 0 based on comparison of two
- * geoip_entry_t */
+ * geoip_ipv4_entry_t */
static int
-_geoip_compare_entries(const void **_a, const void **_b)
+geoip_ipv4_compare_entries_(const void **_a, const void **_b)
{
- const geoip_entry_t *a = *_a, *b = *_b;
+ const geoip_ipv4_entry_t *a = *_a, *b = *_b;
if (a->ip_low < b->ip_low)
return -1;
else if (a->ip_low > b->ip_low)
@@ -144,13 +202,13 @@ _geoip_compare_entries(const void **_a, const void **_b)
}
/** bsearch helper: return -1, 1, or 0 based on comparison of an IP (a pointer
- * to a uint32_t in host order) to a geoip_entry_t */
+ * to a uint32_t in host order) to a geoip_ipv4_entry_t */
static int
-_geoip_compare_key_to_entry(const void *_key, const void **_member)
+geoip_ipv4_compare_key_to_entry_(const void *_key, const void **_member)
{
/* No alignment issue here, since _key really is a pointer to uint32_t */
const uint32_t addr = *(uint32_t *)_key;
- const geoip_entry_t *entry = *_member;
+ const geoip_ipv4_entry_t *entry = *_member;
if (addr < entry->ip_low)
return -1;
else if (addr > entry->ip_high)
@@ -159,6 +217,34 @@ _geoip_compare_key_to_entry(const void *_key, const void **_member)
return 0;
}
+/** Sorting helper: return -1, 1, or 0 based on comparison of two
+ * geoip_ipv6_entry_t */
+static int
+geoip_ipv6_compare_entries_(const void **_a, const void **_b)
+{
+ const geoip_ipv6_entry_t *a = *_a, *b = *_b;
+ return fast_memcmp(a->ip_low.s6_addr, b->ip_low.s6_addr,
+ sizeof(struct in6_addr));
+}
+
+/** bsearch helper: return -1, 1, or 0 based on comparison of an IPv6
+ * (a pointer to a in6_addr) to a geoip_ipv6_entry_t */
+static int
+geoip_ipv6_compare_key_to_entry_(const void *_key, const void **_member)
+{
+ const struct in6_addr *addr = (struct in6_addr *)_key;
+ const geoip_ipv6_entry_t *entry = *_member;
+
+ if (fast_memcmp(addr->s6_addr, entry->ip_low.s6_addr,
+ sizeof(struct in6_addr)) < 0)
+ return -1;
+ else if (fast_memcmp(addr->s6_addr, entry->ip_high.s6_addr,
+ sizeof(struct in6_addr)) > 0)
+ return 1;
+ else
+ return 0;
+}
+
/** Return 1 if we should collect geoip stats on bridge users, and
* include them in our extrainfo descriptor. Else return 0. */
int
@@ -185,27 +271,35 @@ init_geoip_countries(void)
strmap_set_lc(country_idxplus1_by_lc_code, "??", (void*)(1));
}
-/** Clear the GeoIP database and reload it from the file
- * <b>filename</b>. Return 0 on success, -1 on failure.
+/** Clear appropriate GeoIP database, based on <b>family</b>, and
+ * reload it from the file <b>filename</b>. Return 0 on success, -1 on
+ * failure.
*
- * Recognized line formats are:
+ * Recognized line formats for IPv4 are:
* INTIPLOW,INTIPHIGH,CC
* and
* "INTIPLOW","INTIPHIGH","CC","CC3","COUNTRY NAME"
* where INTIPLOW and INTIPHIGH are IPv4 addresses encoded as 4-byte unsigned
* integers, and CC is a country code.
*
+ * Recognized line format for IPv6 is:
+ * IPV6LOW,IPV6HIGH,CC
+ * where IPV6LOW and IPV6HIGH are IPv6 addresses and CC is a country code.
+ *
* It also recognizes, and skips over, blank lines and lines that start
* with '#' (comments).
*/
int
-geoip_load_file(const char *filename, const or_options_t *options)
+geoip_load_file(sa_family_t family, const char *filename)
{
FILE *f;
const char *msg = "";
+ const or_options_t *options = get_options();
int severity = options_need_geoip_info(options, &msg) ? LOG_WARN : LOG_INFO;
crypto_digest_t *geoip_digest_env = NULL;
- clear_geoip_db();
+
+ tor_assert(family == AF_INET || family == AF_INET6);
+
if (!(f = tor_fopen_cloexec(filename, "r"))) {
log_fn(severity, LD_GENERAL, "Failed to open GEOIP file %s. %s",
filename, msg);
@@ -213,33 +307,51 @@ geoip_load_file(const char *filename, const or_options_t *options)
}
if (!geoip_countries)
init_geoip_countries();
- if (geoip_entries) {
- SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, e, tor_free(e));
- smartlist_free(geoip_entries);
+
+ if (family == AF_INET) {
+ if (geoip_ipv4_entries) {
+ SMARTLIST_FOREACH(geoip_ipv4_entries, geoip_ipv4_entry_t *, e,
+ tor_free(e));
+ smartlist_free(geoip_ipv4_entries);
+ }
+ geoip_ipv4_entries = smartlist_new();
+ } else { /* AF_INET6 */
+ if (geoip_ipv6_entries) {
+ SMARTLIST_FOREACH(geoip_ipv6_entries, geoip_ipv6_entry_t *, e,
+ tor_free(e));
+ smartlist_free(geoip_ipv6_entries);
+ }
+ geoip_ipv6_entries = smartlist_new();
}
- geoip_entries = smartlist_new();
geoip_digest_env = crypto_digest_new();
- log_notice(LD_GENERAL, "Parsing GEOIP file %s.", filename);
+
+ log_notice(LD_GENERAL, "Parsing GEOIP %s file %s.",
+ (family == AF_INET) ? "IPv4" : "IPv6", filename);
while (!feof(f)) {
char buf[512];
if (fgets(buf, (int)sizeof(buf), f) == NULL)
break;
crypto_digest_add_bytes(geoip_digest_env, buf, strlen(buf));
/* FFFF track full country name. */
- geoip_parse_entry(buf);
+ geoip_parse_entry(buf, family);
}
/*XXXX abort and return -1 if no entries/illformed?*/
fclose(f);
- smartlist_sort(geoip_entries, _geoip_compare_entries);
-
- /* Okay, now we need to maybe change our mind about what is in which
- * country. */
- refresh_all_country_info();
-
- /* Remember file digest so that we can include it in our extra-info
- * descriptors. */
- crypto_digest_get_digest(geoip_digest_env, geoip_digest, DIGEST_LEN);
+ /* Sort list and remember file digests so that we can include it in
+ * our extra-info descriptors. */
+ if (family == AF_INET) {
+ smartlist_sort(geoip_ipv4_entries, geoip_ipv4_compare_entries_);
+ /* Okay, now we need to maybe change our mind about what is in
+ * which country. We do this for IPv4 only since that's what we
+ * store in node->country. */
+ refresh_all_country_info();
+ crypto_digest_get_digest(geoip_digest_env, geoip_digest, DIGEST_LEN);
+ } else {
+ /* AF_INET6 */
+ smartlist_sort(geoip_ipv6_entries, geoip_ipv6_compare_entries_);
+ crypto_digest_get_digest(geoip_digest_env, geoip6_digest, DIGEST_LEN);
+ }
crypto_digest_free(geoip_digest_env);
return 0;
@@ -251,13 +363,31 @@ geoip_load_file(const char *filename, const or_options_t *options)
* be less than geoip_get_n_countries(). To decode it, call
* geoip_get_country_name().
*/
-int
-geoip_get_country_by_ip(uint32_t ipaddr)
+STATIC int
+geoip_get_country_by_ipv4(uint32_t ipaddr)
+{
+ geoip_ipv4_entry_t *ent;
+ if (!geoip_ipv4_entries)
+ return -1;
+ ent = smartlist_bsearch(geoip_ipv4_entries, &ipaddr,
+ geoip_ipv4_compare_key_to_entry_);
+ return ent ? (int)ent->country : 0;
+}
+
+/** Given an IPv6 address, return a number representing the country to
+ * which that address belongs, -1 for "No geoip information available", or
+ * 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().
+ */
+STATIC int
+geoip_get_country_by_ipv6(const struct in6_addr *addr)
{
- geoip_entry_t *ent;
- if (!geoip_entries)
+ geoip_ipv6_entry_t *ent;
+
+ if (!geoip_ipv6_entries)
return -1;
- ent = smartlist_bsearch(geoip_entries, &ipaddr, _geoip_compare_key_to_entry);
+ ent = smartlist_bsearch(geoip_ipv6_entries, addr,
+ geoip_ipv6_compare_key_to_entry_);
return ent ? (int)ent->country : 0;
}
@@ -269,14 +399,16 @@ geoip_get_country_by_ip(uint32_t ipaddr)
int
geoip_get_country_by_addr(const tor_addr_t *addr)
{
- if (tor_addr_family(addr) != AF_INET) {
- /*XXXX IP6 support ipv6 geoip.*/
+ if (tor_addr_family(addr) == AF_INET) {
+ return geoip_get_country_by_ipv4(tor_addr_to_ipv4h(addr));
+ } else if (tor_addr_family(addr) == AF_INET6) {
+ return geoip_get_country_by_ipv6(tor_addr_to_in6(addr));
+ } else {
return -1;
}
- return geoip_get_country_by_ip(tor_addr_to_ipv4h(addr));
}
-/** Return the number of countries recognized by the GeoIP database. */
+/** Return the number of countries recognized by the GeoIP country list. */
int
geoip_get_n_countries(void)
{
@@ -299,18 +431,28 @@ geoip_get_country_name(country_t num)
/** Return true iff we have loaded a GeoIP database.*/
int
-geoip_is_loaded(void)
+geoip_is_loaded(sa_family_t family)
{
- return geoip_countries != NULL && geoip_entries != NULL;
+ tor_assert(family == AF_INET || family == AF_INET6);
+ if (geoip_countries == NULL)
+ return 0;
+ if (family == AF_INET)
+ return geoip_ipv4_entries != NULL;
+ else /* AF_INET6 */
+ return geoip_ipv6_entries != NULL;
}
/** Return the hex-encoded SHA1 digest of the loaded GeoIP file. The
* result does not need to be deallocated, but will be overwritten by the
* next call of hex_str(). */
const char *
-geoip_db_digest(void)
+geoip_db_digest(sa_family_t family)
{
- return hex_str(geoip_digest, DIGEST_LEN);
+ tor_assert(family == AF_INET || family == AF_INET6);
+ if (family == AF_INET)
+ return hex_str(geoip_digest, DIGEST_LEN);
+ else /* AF_INET6 */
+ return hex_str(geoip6_digest, DIGEST_LEN);
}
/** Entry in a map from IP address to the last time we've seen an incoming
@@ -319,6 +461,10 @@ geoip_db_digest(void)
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
@@ -340,12 +486,20 @@ 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 = (unsigned) tor_addr_hash(&a->addr);
+
+ if (a->transport_name)
+ h += (unsigned) siphash24g(a->transport_name, strlen(a->transport_name));
+
+ return 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;
}
@@ -355,6 +509,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)
@@ -365,100 +530,52 @@ 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);
}
}
}
-/** How often do we update our estimate which share of v2 and v3 directory
- * requests is sent to us? We could as well trigger updates of shares from
- * network status updates, but that means adding a lot of calls into code
- * that is independent from geoip stats (and keeping them up-to-date). We
- * are perfectly fine with an approximation of 15-minute granularity. */
-#define REQUEST_SHARE_INTERVAL (15 * 60)
-
-/** When did we last determine which share of v2 and v3 directory requests
- * is sent to us? */
-static time_t last_time_determined_shares = 0;
-
-/** Sum of products of v2 shares times the number of seconds for which we
- * consider these shares as valid. */
-static double v2_share_times_seconds;
-
-/** Sum of products of v3 shares times the number of seconds for which we
- * consider these shares as valid. */
-static double v3_share_times_seconds;
-
-/** Number of seconds we are determining v2 and v3 shares. */
-static int share_seconds;
-
-/** Try to determine which fraction of v2 and v3 directory requests aimed at
- * caches will be sent to us at time <b>now</b> and store that value in
- * order to take a mean value later on. */
-static void
-geoip_determine_shares(time_t now)
-{
- double v2_share = 0.0, v3_share = 0.0;
- if (router_get_my_share_of_directory_requests(&v2_share, &v3_share) < 0)
- return;
- if (last_time_determined_shares) {
- v2_share_times_seconds += v2_share *
- ((double) (now - last_time_determined_shares));
- v3_share_times_seconds += v3_share *
- ((double) (now - last_time_determined_shares));
- share_seconds += (int)(now - last_time_determined_shares);
- }
- last_time_determined_shares = now;
-}
-
-/** Calculate which fraction of v2 and v3 directory requests aimed at caches
- * have been sent to us since the last call of this function up to time
- * <b>now</b>. Set *<b>v2_share_out</b> and *<b>v3_share_out</b> to the
- * fractions of v2 and v3 protocol shares we expect to have seen. Reset
- * counters afterwards. Return 0 on success, -1 on failure (e.g. when zero
- * seconds have passed since the last call).*/
-static int
-geoip_get_mean_shares(time_t now, double *v2_share_out,
- double *v3_share_out)
-{
- geoip_determine_shares(now);
- if (!share_seconds)
- return -1;
- *v2_share_out = v2_share_times_seconds / ((double) share_seconds);
- *v3_share_out = v3_share_times_seconds / ((double) share_seconds);
- v2_share_times_seconds = v3_share_times_seconds = 0.0;
- share_seconds = 0;
- return 0;
-}
-
/** Note that we've seen a client connect from the IP <b>addr</b>
* at time <b>now</b>. Ignored by all but bridges and directories if
* 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 &&
(!(options->BridgeRelay && options->BridgeRecordUsageByCountry)))
return;
} else {
- if (options->BridgeRelay || options->BridgeAuthoritativeDir ||
- !options->DirReqStatistics)
+ /* Only gather directory-request statistics if configured, and
+ * forcibly disable them on bridge authorities. */
+ if (!options->DirReqStatistics || options->BridgeAuthoritativeDir)
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);
}
@@ -467,33 +584,25 @@ geoip_note_client_seen(geoip_client_action_t action,
else
ent->last_seen_in_minutes = 0;
- if (action == GEOIP_CLIENT_NETWORKSTATUS ||
- action == GEOIP_CLIENT_NETWORKSTATUS_V2) {
+ if (action == GEOIP_CLIENT_NETWORKSTATUS) {
int country_idx = geoip_get_country_by_addr(addr);
if (country_idx < 0)
country_idx = 0; /** unresolved requests are stored at index 0. */
if (country_idx >= 0 && country_idx < smartlist_len(geoip_countries)) {
geoip_country_t *country = smartlist_get(geoip_countries, country_idx);
- if (action == GEOIP_CLIENT_NETWORKSTATUS)
- ++country->n_v3_ns_requests;
- else
- ++country->n_v2_ns_requests;
+ ++country->n_v3_ns_requests;
}
-
- /* Periodically determine share of requests that we should see */
- if (last_time_determined_shares + REQUEST_SHARE_INTERVAL < now)
- geoip_determine_shares(now);
}
}
/** HT_FOREACH helper: remove a clientmap_entry_t from the hashtable if it's
* older than a certain time. */
static int
-_remove_old_client_helper(struct clientmap_entry_t *ent, void *_cutoff)
+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;
@@ -505,40 +614,28 @@ void
geoip_remove_old_clients(time_t cutoff)
{
clientmap_HT_FOREACH_FN(&client_history,
- _remove_old_client_helper,
+ remove_old_client_helper_,
&cutoff);
}
-/** How many responses are we giving to clients requesting v2 network
- * statuses? */
-static uint32_t ns_v2_responses[GEOIP_NS_RESPONSE_NUM];
-
/** How many responses are we giving to clients requesting v3 network
* statuses? */
static uint32_t ns_v3_responses[GEOIP_NS_RESPONSE_NUM];
-/** Note that we've rejected a client's request for a v2 or v3 network
- * status, encoded in <b>action</b> for reason <b>reason</b> at time
- * <b>now</b>. */
+/** Note that we've rejected a client's request for a v3 network status
+ * for reason <b>reason</b> at time <b>now</b>. */
void
-geoip_note_ns_response(geoip_client_action_t action,
- geoip_ns_response_t response)
+geoip_note_ns_response(geoip_ns_response_t response)
{
static int arrays_initialized = 0;
if (!get_options()->DirReqStatistics)
return;
if (!arrays_initialized) {
- memset(ns_v2_responses, 0, sizeof(ns_v2_responses));
memset(ns_v3_responses, 0, sizeof(ns_v3_responses));
arrays_initialized = 1;
}
- tor_assert(action == GEOIP_CLIENT_NETWORKSTATUS ||
- action == GEOIP_CLIENT_NETWORKSTATUS_V2);
tor_assert(response < GEOIP_NS_RESPONSE_NUM);
- if (action == GEOIP_CLIENT_NETWORKSTATUS)
- ns_v3_responses[response]++;
- else
- ns_v2_responses[response]++;
+ ns_v3_responses[response]++;
}
/** Do not mention any country from which fewer than this number of IPs have
@@ -559,10 +656,10 @@ typedef struct c_hist_t {
} c_hist_t;
/** Sorting helper: return -1, 1, or 0 based on comparison of two
- * geoip_entry_t. Sort in descending order of total, and then by country
+ * geoip_ipv4_entry_t. Sort in descending order of total, and then by country
* code. */
static int
-_c_hist_compare(const void **_a, const void **_b)
+c_hist_compare_(const void **_a, const void **_b)
{
const c_hist_t *a = *_a, *b = *_b;
if (a->total > b->total)
@@ -578,7 +675,7 @@ _c_hist_compare(const void **_a, const void **_b)
* failed, the others as still running. */
#define DIRREQ_TIMEOUT (10*60)
-/** Entry in a map from either conn->global_identifier for direct requests
+/** Entry in a map from either chan->global_identifier for direct requests
* or a unique circuit identifier for tunneled requests to request time,
* response size, and completion time of a network status request. Used to
* measure download times of requests to derive average client
@@ -586,14 +683,13 @@ _c_hist_compare(const void **_a, const void **_b)
typedef struct dirreq_map_entry_t {
HT_ENTRY(dirreq_map_entry_t) node;
/** Unique identifier for this network status request; this is either the
- * conn->global_identifier of the dir conn (direct request) or a new
+ * chan->global_identifier of the dir channel (direct request) or a new
* locally unique identifier of a circuit (tunneled request). This ID is
* only unique among other direct or tunneled requests, respectively. */
uint64_t dirreq_id;
unsigned int state:3; /**< State of this directory request. */
unsigned int type:1; /**< Is this a direct or a tunneled request? */
unsigned int completed:1; /**< Is this request complete? */
- unsigned int action:2; /**< Is this a v2 or v3 request? */
/** When did we receive the request and started sending the response? */
struct timeval request_time;
size_t response_size; /**< What is the size of the response in bytes? */
@@ -631,7 +727,7 @@ HT_GENERATE(dirreqmap, dirreq_map_entry_t, node, dirreq_map_ent_hash,
* <b>type</b> and <b>dirreq_id</b> as key parts. If there is
* already an entry for that key, print out a BUG warning and return. */
static void
-_dirreq_map_put(dirreq_map_entry_t *entry, dirreq_type_t type,
+dirreq_map_put_(dirreq_map_entry_t *entry, dirreq_type_t type,
uint64_t dirreq_id)
{
dirreq_map_entry_t *old_ent;
@@ -653,7 +749,7 @@ _dirreq_map_put(dirreq_map_entry_t *entry, dirreq_type_t type,
* using <b>type</b> and <b>dirreq_id</b> as key parts. If there
* is no such entry, return NULL. */
static dirreq_map_entry_t *
-_dirreq_map_get(dirreq_type_t type, uint64_t dirreq_id)
+dirreq_map_get_(dirreq_type_t type, uint64_t dirreq_id)
{
dirreq_map_entry_t lookup;
lookup.type = type;
@@ -662,12 +758,11 @@ _dirreq_map_get(dirreq_type_t type, uint64_t dirreq_id)
}
/** Note that an either direct or tunneled (see <b>type</b>) directory
- * request for a network status with unique ID <b>dirreq_id</b> of size
- * <b>response_size</b> and action <b>action</b> (either v2 or v3) has
- * started. */
+ * request for a v3 network status with unique ID <b>dirreq_id</b> of size
+ * <b>response_size</b> has started. */
void
geoip_start_dirreq(uint64_t dirreq_id, size_t response_size,
- geoip_client_action_t action, dirreq_type_t type)
+ dirreq_type_t type)
{
dirreq_map_entry_t *ent;
if (!get_options()->DirReqStatistics)
@@ -676,9 +771,8 @@ geoip_start_dirreq(uint64_t dirreq_id, size_t response_size,
ent->dirreq_id = dirreq_id;
tor_gettimeofday(&ent->request_time);
ent->response_size = response_size;
- ent->action = action;
ent->type = type;
- _dirreq_map_put(ent, type, dirreq_id);
+ dirreq_map_put_(ent, type, dirreq_id);
}
/** Change the state of the either direct or tunneled (see <b>type</b>)
@@ -694,7 +788,7 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
dirreq_map_entry_t *ent;
if (!get_options()->DirReqStatistics)
return;
- ent = _dirreq_map_get(type, dirreq_id);
+ ent = dirreq_map_get_(type, dirreq_id);
if (!ent)
return;
if (new_state == DIRREQ_IS_FOR_NETWORK_STATUS)
@@ -705,20 +799,119 @@ geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
if ((type == DIRREQ_DIRECT &&
new_state == DIRREQ_FLUSHING_DIR_CONN_FINISHED) ||
(type == DIRREQ_TUNNELED &&
- new_state == DIRREQ_OR_CONN_BUFFER_FLUSHED)) {
+ new_state == DIRREQ_CHANNEL_BUFFER_FLUSHED)) {
tor_gettimeofday(&ent->completion_time);
ent->completed = 1;
}
}
+/** 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
* times by deciles and quartiles. Return NULL if we have not observed
* requests for long enough. */
static char *
-geoip_get_dirreq_history(geoip_client_action_t action,
- dirreq_type_t type)
+geoip_get_dirreq_history(dirreq_type_t type)
{
char *result = NULL;
smartlist_t *dirreq_completed = NULL;
@@ -728,13 +921,10 @@ geoip_get_dirreq_history(geoip_client_action_t action,
struct timeval now;
tor_gettimeofday(&now);
- if (action != GEOIP_CLIENT_NETWORKSTATUS &&
- action != GEOIP_CLIENT_NETWORKSTATUS_V2)
- return NULL;
dirreq_completed = smartlist_new();
for (ptr = HT_START(dirreqmap, &dirreq_map); ptr; ptr = next) {
ent = *ptr;
- if (ent->action != action || ent->type != type) {
+ if (ent->type != type) {
next = HT_NEXT(dirreqmap, &dirreq_map, ptr);
continue;
} else {
@@ -813,27 +1003,35 @@ geoip_get_dirreq_history(geoip_client_action_t action,
return result;
}
-/** Return a newly allocated comma-separated string containing entries for
- * all the countries from which we've seen enough clients connect as a
- * bridge, directory server, or entry guard. The entry format is cc=num
- * where num is the number of IPs we've seen connecting from that country,
- * and cc is a lowercased country code. Returns NULL if we don't want
- * to export geoip data yet. */
-char *
-geoip_get_client_history(geoip_client_action_t action)
+/** Store a newly allocated comma-separated string in
+ * *<a>country_str</a> containing entries for all the countries from
+ * which we've seen enough clients connect as a bridge, directory
+ * server, or entry guard. The entry format is cc=num where num is the
+ * number of IPs we've seen connecting from that country, and cc is a
+ * lowercased country code. *<a>country_str</a> is set to NULL if
+ * we're not ready to export per country data yet.
+ *
+ * Store a newly allocated comma-separated string in <a>ipver_str</a>
+ * containing entries for clients connecting over IPv4 and IPv6. The
+ * format is family=num where num is the nubmer of IPs we've seen
+ * connecting over that protocol family, and family is 'v4' or 'v6'.
+ *
+ * Return 0 on success and -1 if we're missing geoip data. */
+int
+geoip_get_client_history(geoip_client_action_t action,
+ char **country_str, char **ipver_str)
{
- char *result = NULL;
unsigned granularity = IP_GRANULARITY;
- smartlist_t *chunks = NULL;
smartlist_t *entries = NULL;
int n_countries = geoip_get_n_countries();
int i;
clientmap_entry_t **ent;
unsigned *counts = NULL;
unsigned total = 0;
+ unsigned ipv4_count = 0, ipv6_count = 0;
- if (!geoip_is_loaded())
- return NULL;
+ if (!geoip_is_loaded(AF_INET) && !geoip_is_loaded(AF_INET6))
+ return -1;
counts = tor_malloc_zero(sizeof(unsigned)*n_countries);
HT_FOREACH(ent, clientmap, &client_history) {
@@ -846,10 +1044,34 @@ geoip_get_client_history(geoip_client_action_t action)
tor_assert(0 <= country && country < n_countries);
++counts[country];
++total;
+ switch (tor_addr_family(&(*ent)->addr)) {
+ case AF_INET:
+ ipv4_count++;
+ break;
+ case AF_INET6:
+ ipv6_count++;
+ break;
+ }
}
- /* Don't record anything if we haven't seen enough IPs. */
- if (total < MIN_IPS_TO_NOTE_ANYTHING)
- goto done;
+ if (ipver_str) {
+ smartlist_t *chunks = smartlist_new();
+ smartlist_add_asprintf(chunks, "v4=%u",
+ round_to_next_multiple_of(ipv4_count, granularity));
+ smartlist_add_asprintf(chunks, "v6=%u",
+ round_to_next_multiple_of(ipv6_count, granularity));
+ *ipver_str = smartlist_join_strings(chunks, ",", 0, NULL);
+ SMARTLIST_FOREACH(chunks, char *, c, tor_free(c));
+ smartlist_free(chunks);
+ }
+
+ /* Don't record per country data if we haven't seen enough IPs. */
+ if (total < MIN_IPS_TO_NOTE_ANYTHING) {
+ tor_free(counts);
+ if (country_str)
+ *country_str = NULL;
+ return 0;
+ }
+
/* Make a list of c_hist_t */
entries = smartlist_new();
for (i = 0; i < n_countries; ++i) {
@@ -868,40 +1090,35 @@ geoip_get_client_history(geoip_client_action_t action)
}
/* Sort entries. Note that we must do this _AFTER_ rounding, or else
* the sort order could leak info. */
- smartlist_sort(entries, _c_hist_compare);
-
- /* Build the result. */
- chunks = smartlist_new();
- SMARTLIST_FOREACH(entries, c_hist_t *, ch, {
- smartlist_add_asprintf(chunks, "%s=%u", ch->country, ch->total);
- });
- result = smartlist_join_strings(chunks, ",", 0, NULL);
- done:
- tor_free(counts);
- if (chunks) {
+ smartlist_sort(entries, c_hist_compare_);
+
+ if (country_str) {
+ smartlist_t *chunks = smartlist_new();
+ SMARTLIST_FOREACH(entries, c_hist_t *, ch, {
+ smartlist_add_asprintf(chunks, "%s=%u", ch->country, ch->total);
+ });
+ *country_str = smartlist_join_strings(chunks, ",", 0, NULL);
SMARTLIST_FOREACH(chunks, char *, c, tor_free(c));
smartlist_free(chunks);
}
- if (entries) {
- SMARTLIST_FOREACH(entries, c_hist_t *, c, tor_free(c));
- smartlist_free(entries);
- }
- return result;
+
+ SMARTLIST_FOREACH(entries, c_hist_t *, c, tor_free(c));
+ smartlist_free(entries);
+ tor_free(counts);
+
+ return 0;
}
/** Return a newly allocated string holding the per-country request history
- * for <b>action</b> in a format suitable for an extra-info document, or NULL
- * on failure. */
+ * for v3 network statuses in a format suitable for an extra-info document,
+ * or NULL on failure. */
char *
-geoip_get_request_history(geoip_client_action_t action)
+geoip_get_request_history(void)
{
smartlist_t *entries, *strings;
char *result;
unsigned granularity = IP_GRANULARITY;
- if (action != GEOIP_CLIENT_NETWORKSTATUS &&
- action != GEOIP_CLIENT_NETWORKSTATUS_V2)
- return NULL;
if (!geoip_countries)
return NULL;
@@ -909,8 +1126,7 @@ geoip_get_request_history(geoip_client_action_t action)
SMARTLIST_FOREACH_BEGIN(geoip_countries, geoip_country_t *, c) {
uint32_t tot = 0;
c_hist_t *ent;
- tot = (action == GEOIP_CLIENT_NETWORKSTATUS) ?
- c->n_v3_ns_requests : c->n_v2_ns_requests;
+ tot = c->n_v3_ns_requests;
if (!tot)
continue;
ent = tor_malloc_zero(sizeof(c_hist_t));
@@ -918,7 +1134,7 @@ geoip_get_request_history(geoip_client_action_t action)
ent->total = round_to_next_multiple_of(tot, granularity);
smartlist_add(entries, ent);
} SMARTLIST_FOREACH_END(c);
- smartlist_sort(entries, _c_hist_compare);
+ smartlist_sort(entries, c_hist_compare_);
strings = smartlist_new();
SMARTLIST_FOREACH(entries, c_hist_t *, ent, {
@@ -948,26 +1164,21 @@ void
geoip_reset_dirreq_stats(time_t now)
{
SMARTLIST_FOREACH(geoip_countries, geoip_country_t *, c, {
- c->n_v2_ns_requests = c->n_v3_ns_requests = 0;
+ c->n_v3_ns_requests = 0;
});
{
clientmap_entry_t **ent, **next, *this;
for (ent = HT_START(clientmap, &client_history); ent != NULL;
ent = next) {
- if ((*ent)->action == GEOIP_CLIENT_NETWORKSTATUS ||
- (*ent)->action == GEOIP_CLIENT_NETWORKSTATUS_V2) {
+ 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);
}
}
}
- v2_share_times_seconds = v3_share_times_seconds = 0.0;
- last_time_determined_shares = 0;
- share_seconds = 0;
- memset(ns_v2_responses, 0, sizeof(ns_v2_responses));
memset(ns_v3_responses, 0, sizeof(ns_v3_responses));
{
dirreq_map_entry_t **ent, **next, *this;
@@ -995,12 +1206,9 @@ char *
geoip_format_dirreq_stats(time_t now)
{
char t[ISO_TIME_LEN+1];
- double v2_share = 0.0, v3_share = 0.0;
int i;
- char *v3_ips_string, *v2_ips_string, *v3_reqs_string, *v2_reqs_string,
- *v2_share_string = NULL, *v3_share_string = NULL,
- *v3_direct_dl_string, *v2_direct_dl_string,
- *v3_tunneled_dl_string, *v2_tunneled_dl_string;
+ char *v3_ips_string, *v3_reqs_string, *v3_direct_dl_string,
+ *v3_tunneled_dl_string;
char *result;
if (!start_of_dirreq_stats_interval)
@@ -1009,89 +1217,45 @@ geoip_format_dirreq_stats(time_t now)
tor_assert(now >= start_of_dirreq_stats_interval);
format_iso_time(t, now);
- v2_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS_V2);
- v3_ips_string = geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS);
- v2_reqs_string = geoip_get_request_history(
- GEOIP_CLIENT_NETWORKSTATUS_V2);
- v3_reqs_string = geoip_get_request_history(GEOIP_CLIENT_NETWORKSTATUS);
+ geoip_get_client_history(GEOIP_CLIENT_NETWORKSTATUS, &v3_ips_string, NULL);
+ v3_reqs_string = geoip_get_request_history();
#define RESPONSE_GRANULARITY 8
for (i = 0; i < GEOIP_NS_RESPONSE_NUM; i++) {
- ns_v2_responses[i] = round_uint32_to_next_multiple_of(
- ns_v2_responses[i], RESPONSE_GRANULARITY);
ns_v3_responses[i] = round_uint32_to_next_multiple_of(
ns_v3_responses[i], RESPONSE_GRANULARITY);
}
#undef RESPONSE_GRANULARITY
- if (!geoip_get_mean_shares(now, &v2_share, &v3_share)) {
- tor_asprintf(&v2_share_string, "dirreq-v2-share %0.2f%%\n",
- v2_share*100);
- tor_asprintf(&v3_share_string, "dirreq-v3-share %0.2f%%\n",
- v3_share*100);
- }
-
- v2_direct_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS_V2, DIRREQ_DIRECT);
- v3_direct_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS, DIRREQ_DIRECT);
-
- v2_tunneled_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS_V2, DIRREQ_TUNNELED);
- v3_tunneled_dl_string = geoip_get_dirreq_history(
- GEOIP_CLIENT_NETWORKSTATUS, DIRREQ_TUNNELED);
+ v3_direct_dl_string = geoip_get_dirreq_history(DIRREQ_DIRECT);
+ v3_tunneled_dl_string = geoip_get_dirreq_history(DIRREQ_TUNNELED);
/* Put everything together into a single string. */
tor_asprintf(&result, "dirreq-stats-end %s (%d s)\n"
"dirreq-v3-ips %s\n"
- "dirreq-v2-ips %s\n"
"dirreq-v3-reqs %s\n"
- "dirreq-v2-reqs %s\n"
"dirreq-v3-resp ok=%u,not-enough-sigs=%u,unavailable=%u,"
"not-found=%u,not-modified=%u,busy=%u\n"
- "dirreq-v2-resp ok=%u,unavailable=%u,"
- "not-found=%u,not-modified=%u,busy=%u\n"
- "%s"
- "%s"
"dirreq-v3-direct-dl %s\n"
- "dirreq-v2-direct-dl %s\n"
- "dirreq-v3-tunneled-dl %s\n"
- "dirreq-v2-tunneled-dl %s\n",
+ "dirreq-v3-tunneled-dl %s\n",
t,
(unsigned) (now - start_of_dirreq_stats_interval),
v3_ips_string ? v3_ips_string : "",
- v2_ips_string ? v2_ips_string : "",
v3_reqs_string ? v3_reqs_string : "",
- v2_reqs_string ? v2_reqs_string : "",
ns_v3_responses[GEOIP_SUCCESS],
ns_v3_responses[GEOIP_REJECT_NOT_ENOUGH_SIGS],
ns_v3_responses[GEOIP_REJECT_UNAVAILABLE],
ns_v3_responses[GEOIP_REJECT_NOT_FOUND],
ns_v3_responses[GEOIP_REJECT_NOT_MODIFIED],
ns_v3_responses[GEOIP_REJECT_BUSY],
- ns_v2_responses[GEOIP_SUCCESS],
- ns_v2_responses[GEOIP_REJECT_UNAVAILABLE],
- ns_v2_responses[GEOIP_REJECT_NOT_FOUND],
- ns_v2_responses[GEOIP_REJECT_NOT_MODIFIED],
- ns_v2_responses[GEOIP_REJECT_BUSY],
- v2_share_string ? v2_share_string : "",
- v3_share_string ? v3_share_string : "",
v3_direct_dl_string ? v3_direct_dl_string : "",
- v2_direct_dl_string ? v2_direct_dl_string : "",
- v3_tunneled_dl_string ? v3_tunneled_dl_string : "",
- v2_tunneled_dl_string ? v2_tunneled_dl_string : "");
+ v3_tunneled_dl_string ? v3_tunneled_dl_string : "");
/* Free partial strings. */
tor_free(v3_ips_string);
- tor_free(v2_ips_string);
tor_free(v3_reqs_string);
- tor_free(v2_reqs_string);
- tor_free(v2_share_string);
- tor_free(v3_share_string);
tor_free(v3_direct_dl_string);
- tor_free(v2_direct_dl_string);
tor_free(v3_tunneled_dl_string);
- tor_free(v2_tunneled_dl_string);
return result;
}
@@ -1104,7 +1268,7 @@ geoip_format_dirreq_stats(time_t now)
time_t
geoip_dirreq_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_dirreq_stats_interval)
return 0; /* Not initialized. */
@@ -1118,21 +1282,13 @@ geoip_dirreq_stats_write(time_t now)
str = geoip_format_dirreq_stats(now);
/* Write dirreq-stats string to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "dirreq-stats", str, "dirreq statistics");
+ /* Reset measurement interval start. */
+ geoip_reset_dirreq_stats(now);
}
- filename = get_datadir_fname2("stats", "dirreq-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write dirreq statistics to disk!");
-
- /* Reset measurement interval start. */
- geoip_reset_dirreq_stats(now);
done:
- tor_free(statsdir);
- tor_free(filename);
tor_free(str);
return start_of_dirreq_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1169,6 +1325,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;
@@ -1203,6 +1361,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;
}
@@ -1216,7 +1383,8 @@ static char *bridge_stats_extrainfo = NULL;
char *
geoip_format_bridge_stats(time_t now)
{
- char *out = NULL, *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];
@@ -1226,14 +1394,21 @@ geoip_format_bridge_stats(time_t now)
return NULL; /* Not initialized. */
format_iso_time(written, now);
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ 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-ips %s\n"
+ "bridge-ip-versions %s\n"
+ "bridge-ip-transports %s\n",
written, duration,
- data ? data : "");
- tor_free(data);
+ country_data ? country_data : "",
+ ipver_data ? ipver_data : "",
+ transport_data ? transport_data : "");
+ tor_free(country_data);
+ tor_free(ipver_data);
+ tor_free(transport_data);
return out;
}
@@ -1244,17 +1419,20 @@ geoip_format_bridge_stats(time_t now)
static char *
format_bridge_stats_controller(time_t now)
{
- char *out = NULL, *data = NULL;
+ char *out = NULL, *country_data = NULL, *ipver_data = NULL;
char started[ISO_TIME_LEN+1];
(void) now;
format_iso_time(started, start_of_bridge_stats_interval);
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &country_data, &ipver_data);
tor_asprintf(&out,
- "TimeStarted=\"%s\" CountrySummary=%s",
- started, data ? data : "");
- tor_free(data);
+ "TimeStarted=\"%s\" CountrySummary=%s IPVersions=%s",
+ started,
+ country_data ? country_data : "",
+ ipver_data ? ipver_data : "");
+ tor_free(country_data);
+ tor_free(ipver_data);
return out;
}
@@ -1263,7 +1441,7 @@ format_bridge_stats_controller(time_t now)
time_t
geoip_bridge_stats_write(time_t now)
{
- char *filename = NULL, *val = NULL, *statsdir = NULL;
+ char *val = NULL;
/* Check if 24 hours have passed since starting measurements. */
if (now < start_of_bridge_stats_interval + WRITE_STATS_INTERVAL)
@@ -1283,24 +1461,20 @@ geoip_bridge_stats_write(time_t now)
start_of_bridge_stats_interval = now;
/* Write it to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0)
- goto done;
- filename = get_datadir_fname2("stats", "bridge-stats");
-
- write_str_to_file(filename, bridge_stats_extrainfo, 0);
-
- /* Tell the controller, "hey, there are clients!" */
- {
- char *controller_str = format_bridge_stats_controller(now);
- if (controller_str)
- control_event_clients_seen(controller_str);
- tor_free(controller_str);
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "bridge-stats",
+ bridge_stats_extrainfo, "bridge statistics");
+
+ /* Tell the controller, "hey, there are clients!" */
+ {
+ char *controller_str = format_bridge_stats_controller(now);
+ if (controller_str)
+ control_event_clients_seen(controller_str);
+ tor_free(controller_str);
+ }
}
- done:
- tor_free(filename);
- tor_free(statsdir);
+ done:
return start_of_bridge_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1316,8 +1490,11 @@ load_bridge_stats(time_t now)
fname = get_datadir_fname2("stats", "bridge-stats");
contents = read_file_to_str(fname, RFTS_IGNORE_MISSING, NULL);
- if (contents && validate_bridge_stats(contents, now))
+ if (contents && validate_bridge_stats(contents, now)) {
bridge_stats_extrainfo = contents;
+ } else {
+ tor_free(contents);
+ }
tor_free(fname);
}
@@ -1381,11 +1558,13 @@ geoip_format_entry_stats(time_t now)
tor_assert(now >= start_of_entry_stats_interval);
- data = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &data, NULL);
format_iso_time(t, now);
- tor_asprintf(&result, "entry-stats-end %s (%u s)\nentry-ips %s\n",
- t, (unsigned) (now - start_of_entry_stats_interval),
- data ? data : "");
+ tor_asprintf(&result,
+ "entry-stats-end %s (%u s)\n"
+ "entry-ips %s\n",
+ t, (unsigned) (now - start_of_entry_stats_interval),
+ data ? data : "");
tor_free(data);
return result;
}
@@ -1397,7 +1576,7 @@ geoip_format_entry_stats(time_t now)
time_t
geoip_entry_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_entry_stats_interval)
return 0; /* Not initialized. */
@@ -1411,21 +1590,14 @@ geoip_entry_stats_write(time_t now)
str = geoip_format_entry_stats(now);
/* Write entry-stats string to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
- }
- filename = get_datadir_fname2("stats", "entry-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write entry statistics to disk!");
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "entry-stats", str, "entry statistics");
- /* Reset measurement interval start. */
- geoip_reset_entry_stats(now);
+ /* Reset measurement interval start. */
+ geoip_reset_entry_stats(now);
+ }
done:
- tor_free(statsdir);
- tor_free(filename);
tor_free(str);
return start_of_entry_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -1437,25 +1609,30 @@ getinfo_helper_geoip(control_connection_t *control_conn,
const char **errmsg)
{
(void)control_conn;
- if (!geoip_is_loaded()) {
- *errmsg = "GeoIP data not loaded";
- return -1;
- }
if (!strcmpstart(question, "ip-to-country/")) {
int c;
- uint32_t ip;
- struct in_addr in;
+ sa_family_t family;
+ tor_addr_t addr;
question += strlen("ip-to-country/");
- if (tor_inet_aton(question, &in) != 0) {
- ip = ntohl(in.s_addr);
- c = geoip_get_country_by_ip(ip);
- *answer = tor_strdup(geoip_get_country_name(c));
+ family = tor_addr_parse(&addr, question);
+ if (family != AF_INET && family != AF_INET6) {
+ *errmsg = "Invalid address family";
+ return -1;
+ }
+ if (!geoip_is_loaded(family)) {
+ *errmsg = "GeoIP data not loaded";
+ return -1;
}
+ if (family == AF_INET)
+ c = geoip_get_country_by_ipv4(tor_addr_to_ipv4h(&addr));
+ else /* AF_INET6 */
+ c = geoip_get_country_by_ipv6(tor_addr_to_in6(&addr));
+ *answer = tor_strdup(geoip_get_country_name(c));
}
return 0;
}
-/** Release all storage held by the GeoIP database. */
+/** Release all storage held by the GeoIP databases and country list. */
static void
clear_geoip_db(void)
{
@@ -1465,13 +1642,20 @@ clear_geoip_db(void)
}
strmap_free(country_idxplus1_by_lc_code, NULL);
- if (geoip_entries) {
- SMARTLIST_FOREACH(geoip_entries, geoip_entry_t *, ent, tor_free(ent));
- smartlist_free(geoip_entries);
+ if (geoip_ipv4_entries) {
+ SMARTLIST_FOREACH(geoip_ipv4_entries, geoip_ipv4_entry_t *, ent,
+ tor_free(ent));
+ smartlist_free(geoip_ipv4_entries);
+ }
+ if (geoip_ipv6_entries) {
+ SMARTLIST_FOREACH(geoip_ipv6_entries, geoip_ipv6_entry_t *, ent,
+ tor_free(ent));
+ smartlist_free(geoip_ipv6_entries);
}
geoip_countries = NULL;
country_idxplus1_by_lc_code = NULL;
- geoip_entries = NULL;
+ geoip_ipv4_entries = NULL;
+ geoip_ipv6_entries = NULL;
}
/** Release all storage held in this file. */
@@ -1483,7 +1667,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);
}
@@ -1498,5 +1682,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 4aed4e07b..b9b53c300 100644
--- a/src/or/geoip.h
+++ b/src/or/geoip.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,37 +9,42 @@
* \brief Header file for geoip.c.
**/
-#ifndef _TOR_GEOIP_H
-#define _TOR_GEOIP_H
+#ifndef TOR_GEOIP_H
+#define TOR_GEOIP_H
+
+#include "testsupport.h"
#ifdef GEOIP_PRIVATE
-int geoip_parse_entry(const char *line);
+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(const char *filename, const or_options_t *options);
-int geoip_get_country_by_ip(uint32_t ipaddr);
+int geoip_load_file(sa_family_t family, const char *filename);
int geoip_get_country_by_addr(const tor_addr_t *addr);
int geoip_get_n_countries(void);
const char *geoip_get_country_name(country_t num);
-int geoip_is_loaded(void);
-const char *geoip_db_digest(void);
+int geoip_is_loaded(sa_family_t family);
+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_client_action_t action,
- geoip_ns_response_t response);
-char *geoip_get_client_history(geoip_client_action_t action);
-char *geoip_get_request_history(geoip_client_action_t action);
+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);
int getinfo_helper_geoip(control_connection_t *control_conn,
const char *question, char **answer,
const char **errmsg);
void geoip_free_all(void);
void geoip_start_dirreq(uint64_t dirreq_id, size_t response_size,
- geoip_client_action_t action, dirreq_type_t type);
+ dirreq_type_t type);
void geoip_change_dirreq_state(uint64_t dirreq_id, dirreq_type_t type,
dirreq_state_t new_state);
diff --git a/src/or/hibernate.c b/src/or/hibernate.c
index 3a9c1e422..c433ac1be 100644
--- a/src/or/hibernate.c
+++ b/src/or/hibernate.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -23,12 +23,15 @@ hibernating, phase 2:
#define HIBERNATE_PRIVATE
#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
#include "hibernate.h"
#include "main.h"
#include "router.h"
+#include "statefile.h"
extern long stats_n_seconds_working; /* published uptime */
@@ -236,8 +239,8 @@ accounting_parse_options(const or_options_t *options, int validate_only)
/** If we want to manage the accounting system and potentially
* hibernate, return 1, else return 0.
*/
-int
-accounting_is_enabled(const or_options_t *options)
+MOCK_IMPL(int,
+accounting_is_enabled,(const or_options_t *options))
{
if (options->AccountingMax)
return 1;
@@ -252,6 +255,13 @@ accounting_get_interval_length(void)
return (int)(interval_end_time - interval_start_time);
}
+/** Return the time at which the current accounting interval will end. */
+MOCK_IMPL(time_t,
+accounting_get_end_time,(void))
+{
+ return interval_end_time;
+}
+
/** Called from main.c to tell us that <b>seconds</b> seconds have
* passed, <b>n_read</b> bytes have been read, and <b>n_written</b>
* bytes have been written. */
@@ -503,10 +513,6 @@ accounting_run_housekeeping(time_t now)
}
}
-/** When we have no idea how fast we are, how long do we assume it will take
- * us to exhaust our bandwidth? */
-#define GUESS_TIME_TO_USE_BANDWIDTH (24*60*60)
-
/** Based on our interval and our estimated bandwidth, choose a
* deterministic (but random-ish) time to wake up. */
static void
@@ -642,7 +648,15 @@ read_bandwidth_usage(void)
{
char *fname = get_datadir_fname("bw_accounting");
- unlink(fname);
+ int res;
+
+ res = unlink(fname);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ fname, strerror(errno));
+ }
+
tor_free(fname);
}
@@ -809,8 +823,8 @@ hibernate_begin_shutdown(void)
}
/** Return true iff we are currently hibernating. */
-int
-we_are_hibernating(void)
+MOCK_IMPL(int,
+we_are_hibernating,(void))
{
return hibernate_state != HIBERNATE_STATE_LIVE;
}
@@ -845,7 +859,13 @@ hibernate_go_dormant(time_t now)
if (conn->type == CONN_TYPE_AP) /* send socks failure if needed */
connection_mark_unattached_ap(TO_ENTRY_CONN(conn),
END_STREAM_REASON_HIBERNATING);
- else
+ else if (conn->type == CONN_TYPE_OR) {
+ if (TO_OR_CONN(conn)->chan) {
+ channel_mark_for_close(TLS_CHAN_TO_BASE(TO_OR_CONN(conn)->chan));
+ } else {
+ connection_mark_for_close(conn);
+ }
+ } else
connection_mark_for_close(conn);
}
@@ -881,12 +901,12 @@ hibernate_end_time_elapsed(time_t now)
/* We weren't sleeping before; we should sleep now. */
log_notice(LD_ACCT,
"Accounting period ended. Commencing hibernation until "
- "%s GMT", buf);
+ "%s UTC", buf);
hibernate_go_dormant(now);
} else {
log_notice(LD_ACCT,
"Accounting period ended. This period, we will hibernate"
- " until %s GMT",buf);
+ " until %s UTC",buf);
}
}
}
@@ -1005,6 +1025,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.
@@ -1014,4 +1035,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 9aa026b7b..38ecb7512 100644
--- a/src/or/hibernate.h
+++ b/src/or/hibernate.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,18 +9,21 @@
* \brief Header file for hibernate.c.
**/
-#ifndef _TOR_HIBERNATE_H
-#define _TOR_HIBERNATE_H
+#ifndef TOR_HIBERNATE_H
+#define TOR_HIBERNATE_H
+
+#include "testsupport.h"
int accounting_parse_options(const or_options_t *options, int validate_only);
-int accounting_is_enabled(const or_options_t *options);
+MOCK_DECL(int, accounting_is_enabled, (const or_options_t *options));
int accounting_get_interval_length(void);
+MOCK_DECL(time_t, accounting_get_end_time, (void));
void configure_accounting(time_t now);
void accounting_run_housekeeping(time_t now);
void accounting_add_bytes(size_t n_read, size_t n_written, int seconds);
int accounting_record_bandwidth_usage(time_t now, or_state_t *state);
void hibernate_begin_shutdown(void);
-int we_are_hibernating(void);
+MOCK_DECL(int, we_are_hibernating, (void));
void consider_hibernation(time_t now);
int getinfo_helper_accounting(control_connection_t *conn,
const char *question, char **answer,
@@ -45,8 +48,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
new file mode 100644
index 000000000..47bdd0990
--- /dev/null
+++ b/src/or/include.am
@@ -0,0 +1,225 @@
+bin_PROGRAMS+= src/or/tor
+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
+else
+tor_platform_source=
+endif
+
+EXTRA_DIST+= src/or/ntmain.c src/or/or_sha1.i src/or/Makefile.nmake
+
+if USE_EXTERNAL_EVDNS
+evdns_source=
+else
+evdns_source=src/ext/eventdns.c
+endif
+
+if CURVE25519_ENABLED
+onion_ntor_source=src/or/onion_ntor.c
+else
+onion_ntor_source=
+endif
+
+LIBTOR_A_SOURCES = \
+ src/or/addressmap.c \
+ src/or/buffers.c \
+ src/or/channel.c \
+ src/or/channeltls.c \
+ src/or/circpathbias.c \
+ src/or/circuitbuild.c \
+ src/or/circuitlist.c \
+ src/or/circuitmux.c \
+ src/or/circuitmux_ewma.c \
+ src/or/circuitstats.c \
+ src/or/circuituse.c \
+ src/or/command.c \
+ src/or/config.c \
+ src/or/confparse.c \
+ src/or/connection.c \
+ src/or/connection_edge.c \
+ src/or/connection_or.c \
+ src/or/control.c \
+ src/or/cpuworker.c \
+ src/or/directory.c \
+ src/or/dirserv.c \
+ src/or/dirvote.c \
+ src/or/dns.c \
+ src/or/dnsserv.c \
+ 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 \
+ src/or/networkstatus.c \
+ src/or/nodelist.c \
+ src/or/onion.c \
+ src/or/onion_fast.c \
+ src/or/onion_tap.c \
+ src/or/transports.c \
+ src/or/policies.c \
+ src/or/reasons.c \
+ src/or/relay.c \
+ src/or/rendclient.c \
+ src/or/rendcommon.c \
+ src/or/rendmid.c \
+ src/or/rendservice.c \
+ src/or/rephist.c \
+ src/or/replaycache.c \
+ src/or/router.c \
+ src/or/routerlist.c \
+ src/or/routerparse.c \
+ src/or/routerset.c \
+ src/or/statefile.c \
+ src/or/status.c \
+ $(evdns_source) \
+ $(tor_platform_source) \
+ $(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
+
+
+src_or_tor_SOURCES = src/or/tor_main.c
+AM_CPPFLAGS += -I$(srcdir)/src/or -Isrc/or
+
+src/or/tor_main.o: micro-revision.i
+
+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.
+
+
+src_or_tor_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ @TOR_LDFLAGS_libevent@
+src_or_tor_LDADD = src/or/libtor.a src/common/libor.a \
+ src/common/libor-crypto.a $(LIBDONNA) \
+ src/common/libor-event.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 \
+ src/or/channel.h \
+ src/or/channeltls.h \
+ src/or/circpathbias.h \
+ src/or/circuitbuild.h \
+ src/or/circuitlist.h \
+ src/or/circuitmux.h \
+ src/or/circuitmux_ewma.h \
+ src/or/circuitstats.h \
+ src/or/circuituse.h \
+ src/or/command.h \
+ src/or/config.h \
+ src/or/confparse.h \
+ src/or/connection.h \
+ src/or/connection_edge.h \
+ src/or/connection_or.h \
+ src/or/control.h \
+ src/or/cpuworker.h \
+ src/or/directory.h \
+ src/or/dirserv.h \
+ src/or/dirvote.h \
+ 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 \
+ src/or/hibernate.h \
+ src/or/main.h \
+ src/or/microdesc.h \
+ src/or/networkstatus.h \
+ src/or/nodelist.h \
+ src/or/ntmain.h \
+ src/or/onion.h \
+ src/or/onion_fast.h \
+ src/or/onion_ntor.h \
+ src/or/onion_tap.h \
+ src/or/or.h \
+ src/or/transports.h \
+ src/or/policies.h \
+ src/or/reasons.h \
+ src/or/relay.h \
+ src/or/rendclient.h \
+ src/or/rendcommon.h \
+ src/or/rendmid.h \
+ src/or/rendservice.h \
+ src/or/rephist.h \
+ src/or/replaycache.h \
+ src/or/router.h \
+ src/or/routerlist.h \
+ src/or/routerset.h \
+ src/or/routerparse.h \
+ src/or/statefile.h \
+ src/or/status.h
+
+noinst_HEADERS+= $(ORHEADERS) micro-revision.i
+
+src/or/config_codedigest.o: src/or/or_sha1.i
+
+micro-revision.i: FORCE
+ @rm -f micro-revision.tmp; \
+ if test -d "$(top_srcdir)/.git" && \
+ test -x "`which git 2>&1;true`"; then \
+ HASH="`cd "$(top_srcdir)" && git rev-parse --short=16 HEAD`"; \
+ echo \"$$HASH\" > micro-revision.tmp; \
+ fi; \
+ if test ! -f micro-revision.tmp ; then \
+ if test ! -f micro-revision.i ; then \
+ echo '""' > micro-revision.i; \
+ fi; \
+ elif test ! -f micro-revision.i || \
+ test x"`cat micro-revision.tmp`" != x"`cat micro-revision.i`"; then \
+ mv micro-revision.tmp micro-revision.i; \
+ fi; true
+
+src/or/or_sha1.i: $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS)
+ $(AM_V_GEN)if test "@SHA1SUM@" != none; then \
+ (cd "$(srcdir)" && "@SHA1SUM@" $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS) ) | \
+ "@SED@" -n 's/^\(.*\)$$/"\1\\n"/p' > src/or/or_sha1.i; \
+ elif test "@OPENSSL@" != none; then \
+ (cd "$(srcdir)" && "@OPENSSL@" sha1 $(src_or_tor_SOURCES) $(src_or_libtor_a_SOURCES) $(ORHEADERS)) | \
+ "@SED@" -n 's/SHA1(\(.*\))= \(.*\)/"\2 \1\\n"/p' > src/or/or_sha1.i; \
+ else \
+ rm src/or/or_sha1.i; \
+ touch src/or/or_sha1.i; \
+ fi
+
+CLEANFILES+= micro-revision.i src/or/micro-revision.i
+
+FORCE:
diff --git a/src/or/main.c b/src/or/main.c
index 34bf3e50f..3c661cd12 100644
--- a/src/or/main.c
+++ b/src/or/main.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -12,12 +12,17 @@
#define MAIN_PRIVATE
#include "or.h"
+#include "addressmap.h"
+#include "backtrace.h"
#include "buffers.h"
+#include "channel.h"
+#include "channeltls.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
#include "command.h"
#include "config.h"
+#include "confparse.h"
#include "connection.h"
#include "connection_edge.h"
#include "connection_or.h"
@@ -28,6 +33,7 @@
#include "dirvote.h"
#include "dns.h"
#include "dnsserv.h"
+#include "entrynodes.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
@@ -46,12 +52,15 @@
#include "router.h"
#include "routerlist.h"
#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>
@@ -150,12 +159,6 @@ int can_complete_circuit=0;
/** How often do we 'forgive' undownloadable router descriptors and attempt
* to download them again? */
#define DESCRIPTOR_FAILURE_RESET_INTERVAL (60*60)
-/** How long do we let a directory connection stall before expiring it? */
-#define DIR_CONN_MAX_STALL (5*60)
-
-/** How long do we let OR connections handshake before we decide that
- * they are obsolete? */
-#define TLS_HANDSHAKE_TIMEOUT (60)
/** Decides our behavior when no logs are configured/before any
* logs have been configured. For 0, we log notice to stdout as normal.
@@ -350,6 +353,8 @@ connection_remove(connection_t *conn)
(int)conn->s, conn_type_to_string(conn->type),
smartlist_len(connection_array));
+ control_event_conn_bandwidth(conn);
+
tor_assert(conn->conn_array_index >= 0);
current_index = conn->conn_array_index;
connection_unregister_events(conn); /* This is redundant, but cheap. */
@@ -397,15 +402,40 @@ connection_unlink(connection_t *conn)
if (conn->type == CONN_TYPE_OR) {
if (!tor_digest_is_zero(TO_OR_CONN(conn)->identity_digest))
connection_or_remove_from_identity_map(TO_OR_CONN(conn));
+ /* connection_unlink() can only get called if the connection
+ * was already on the closeable list, and it got there by
+ * connection_mark_for_close(), which was called from
+ * connection_or_close_normally() or
+ * connection_or_close_for_error(), so the channel should
+ * already be in CHANNEL_STATE_CLOSING, and then the
+ * connection_about_to_close_connection() goes to
+ * connection_or_about_to_close(), which calls channel_closed()
+ * to notify the channel_t layer, and closed the channel, so
+ * nothing more to do here to deal with the channel associated
+ * with an orconn.
+ */
}
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)
{
- tor_assert(!smartlist_isin(closeable_connection_lst, conn));
+ tor_assert(!smartlist_contains(closeable_connection_lst, conn));
tor_assert(conn->marked_for_close);
assert_connection_ok(conn, time(NULL));
smartlist_add(closeable_connection_lst, conn);
@@ -415,14 +445,14 @@ add_connection_to_closeable_list(connection_t *conn)
int
connection_is_on_closeable_list(connection_t *conn)
{
- return smartlist_isin(closeable_connection_lst, conn);
+ return smartlist_contains(closeable_connection_lst, conn);
}
/** Return true iff conn is in the current poll array. */
int
connection_in_array(connection_t *conn)
{
- return smartlist_isin(connection_array, conn);
+ return smartlist_contains(connection_array, conn);
}
/** Set <b>*array</b> to an array of all connections, and <b>*n</b>
@@ -439,15 +469,15 @@ get_connection_array(void)
/** Provides the traffic read and written over the life of the process. */
-uint64_t
-get_bytes_read(void)
+MOCK_IMPL(uint64_t,
+get_bytes_read,(void))
{
return stats_n_bytes_read;
}
/* DOCDOC get_bytes_written */
-uint64_t
-get_bytes_written(void)
+MOCK_IMPL(uint64_t,
+get_bytes_written,(void))
{
return stats_n_bytes_written;
}
@@ -494,8 +524,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);
@@ -519,8 +549,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);
@@ -559,8 +589,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);
@@ -585,8 +615,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);
@@ -649,7 +679,7 @@ connection_start_reading_from_linked_conn(connection_t *conn)
tor_event_base_loopexit(tor_libevent_get_base(), &tv);
}
} else {
- tor_assert(smartlist_isin(active_linked_connection_lst, conn));
+ tor_assert(smartlist_contains(active_linked_connection_lst, conn));
}
}
@@ -669,12 +699,12 @@ connection_stop_reading_from_linked_conn(connection_t *conn)
* so let's leave it alone for now. */
smartlist_remove(active_linked_connection_lst, conn);
} else {
- tor_assert(!smartlist_isin(active_linked_connection_lst, conn));
+ tor_assert(!smartlist_contains(active_linked_connection_lst, conn));
}
}
/** Close all connections that have been scheduled to get closed. */
-static void
+STATIC void
close_closeable_connections(void)
{
int i;
@@ -796,7 +826,8 @@ conn_close_if_marked(int i)
}
#endif
- log_debug(LD_NET,"Cleaning up connection (fd %d).",conn->s);
+ log_debug(LD_NET,"Cleaning up connection (fd "TOR_SOCKET_T_FORMAT").",
+ conn->s);
/* If the connection we are about to close was trying to connect to
a proxy server and failed, the client won't be able to use that
@@ -888,16 +919,7 @@ conn_close_if_marked(int i)
return 0;
}
if (connection_wants_to_flush(conn)) {
- int severity;
- if (conn->type == CONN_TYPE_EXIT ||
- (conn->type == CONN_TYPE_OR && server_mode(get_options())) ||
- (conn->type == CONN_TYPE_DIR && conn->purpose == DIR_PURPOSE_SERVER))
- severity = LOG_INFO;
- else
- severity = LOG_NOTICE;
- /* XXXX Maybe allow this to happen a certain amount per hour; it usually
- * is meaningless. */
- log_fn(severity, LD_NET, "We stalled too much while trying to write %d "
+ log_fn(LOG_INFO, LD_NET, "We stalled too much while trying to write %d "
"bytes to address %s. If this happens a lot, either "
"something is wrong with your network connection, or "
"something is wrong with theirs. "
@@ -953,8 +975,9 @@ directory_info_has_arrived(time_t now, int from_cache)
const or_options_t *options = get_options();
if (!router_have_minimum_dir_info()) {
- int quiet = directory_too_idle_to_fetch_descriptors(options, now);
- log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
+ int quiet = from_cache ||
+ directory_too_idle_to_fetch_descriptors(options, now);
+ tor_log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
"I learned some more directory information, but not enough to "
"build a circuit: %s", get_dir_info_status_string());
update_all_descriptor_downloads(now);
@@ -1013,9 +1036,11 @@ run_connection_housekeeping(int i, time_t now)
* if a server or received if a client) for 5 min */
if (conn->type == CONN_TYPE_DIR &&
((DIR_CONN_IS_SERVER(conn) &&
- conn->timestamp_lastwritten + DIR_CONN_MAX_STALL < now) ||
+ conn->timestamp_lastwritten
+ + options->TestingDirConnectionMaxStall < now) ||
(!DIR_CONN_IS_SERVER(conn) &&
- conn->timestamp_lastread + DIR_CONN_MAX_STALL < now))) {
+ conn->timestamp_lastread
+ + options->TestingDirConnectionMaxStall < now))) {
log_info(LD_DIR,"Expiring wedged directory conn (fd %d, purpose %d)",
(int)conn->s, conn->purpose);
/* This check is temporary; it's to let us know whether we should consider
@@ -1044,7 +1069,8 @@ run_connection_housekeeping(int i, time_t now)
tor_assert(conn->outbuf);
#endif
- if (or_conn->is_bad_for_new_circs && !or_conn->n_circuits) {
+ if (channel_is_bad_for_new_circs(TLS_CHAN_TO_BASE(or_conn->chan)) &&
+ !connection_or_get_num_circuits(or_conn)) {
/* It's bad for new circuits, and has no unmarked circuits on it:
* mark it now. */
log_info(LD_OR,
@@ -1054,28 +1080,29 @@ run_connection_housekeeping(int i, time_t now)
connection_or_connect_failed(TO_OR_CONN(conn),
END_OR_CONN_REASON_TIMEOUT,
"Tor gave up on the connection");
- connection_mark_and_flush(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 1);
} else if (!connection_state_is_open(conn)) {
if (past_keepalive) {
/* We never managed to actually get this connection open and happy. */
log_info(LD_OR,"Expiring non-open OR connection to fd %d (%s:%d).",
(int)conn->s,conn->address, conn->port);
- connection_mark_for_close(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 0);
}
- } else if (we_are_hibernating() && !or_conn->n_circuits &&
+ } else if (we_are_hibernating() &&
+ !connection_or_get_num_circuits(or_conn) &&
!connection_get_outbuf_len(conn)) {
/* We're hibernating, there's no circuits, and nothing to flush.*/
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
"[Hibernating or exiting].",
(int)conn->s,conn->address, conn->port);
- connection_mark_and_flush(conn);
- } else if (!or_conn->n_circuits &&
+ connection_or_close_normally(TO_OR_CONN(conn), 1);
+ } else if (!connection_or_get_num_circuits(or_conn) &&
now >= or_conn->timestamp_last_added_nonpadding +
IDLE_OR_CONN_TIMEOUT) {
log_info(LD_OR,"Expiring non-used OR connection to fd %d (%s:%d) "
"[idle %d].", (int)conn->s,conn->address, conn->port,
(int)(now - or_conn->timestamp_last_added_nonpadding));
- connection_mark_for_close(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 0);
} else if (
now >= or_conn->timestamp_lastempty + options->KeepalivePeriod*10 &&
now >= conn->timestamp_lastwritten + options->KeepalivePeriod*10) {
@@ -1085,7 +1112,7 @@ run_connection_housekeeping(int i, time_t now)
(int)conn->s, conn->address, conn->port,
(int)connection_get_outbuf_len(conn),
(int)(now-conn->timestamp_lastwritten));
- connection_mark_for_close(conn);
+ connection_or_close_normally(TO_OR_CONN(conn), 0);
} else if (past_keepalive && !connection_get_outbuf_len(conn)) {
/* send a padding cell */
log_fn(LOG_DEBUG,LD_OR,"Sending keepalive to (%s:%d)",
@@ -1108,7 +1135,7 @@ signewnym_impl(time_t now)
return;
}
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
addressmap_clear_transient();
rend_client_purge_state();
time_of_last_signewnym = now;
@@ -1126,6 +1153,18 @@ get_signewnym_epoch(void)
return newnym_epoch;
}
+static time_t time_to_check_descriptor = 0;
+/**
+ * Update our schedule so that we'll check whether we need to update our
+ * descriptor immediately, rather than after up to CHECK_DESCRIPTOR_INTERVAL
+ * seconds.
+ */
+void
+reschedule_descriptor_update_check(void)
+{
+ time_to_check_descriptor = 0;
+}
+
/** Perform regular maintenance tasks. This function gets run once per
* second by second_elapsed_callback().
*/
@@ -1135,8 +1174,7 @@ run_scheduled_events(time_t now)
static time_t last_rotated_x509_certificate = 0;
static time_t time_to_check_v3_certificate = 0;
static time_t time_to_check_listeners = 0;
- static time_t time_to_check_descriptor = 0;
- static time_t time_to_check_ipaddress = 0;
+ static time_t time_to_download_networkstatus = 0;
static time_t time_to_shrink_memory = 0;
static time_t time_to_try_getting_descriptors = 0;
static time_t time_to_reset_descriptor_failures = 0;
@@ -1160,34 +1198,24 @@ run_scheduled_events(time_t now)
int i;
int have_dir_info;
- /** 0. See if we've been asked to shut down and our timeout has
+ /* 0. See if we've been asked to shut down and our timeout has
* expired; or if our bandwidth limits are exhausted and we
* should hibernate; or if it's time to wake up from hibernation.
*/
consider_hibernation(now);
-#if 0
- {
- static time_t nl_check_time = 0;
- if (nl_check_time <= now) {
- nodelist_assert_ok();
- nl_check_time = now + 30;
- }
- }
-#endif
-
/* 0b. If we've deferred a signewnym, make sure it gets handled
* eventually. */
if (signewnym_is_pending &&
time_of_last_signewnym + MAX_SIGNEWNYM_RATE <= now) {
- log(LOG_INFO, LD_CONTROL, "Honoring delayed NEWNYM request");
+ log_info(LD_CONTROL, "Honoring delayed NEWNYM request");
signewnym_impl(now);
}
/* 0c. If we've deferred log messages for the controller, handle them now */
flush_pending_log_callbacks();
- /** 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
+ /* 1a. Every MIN_ONION_KEY_LIFETIME seconds, rotate the onion keys,
* shut down and restart all cpuworkers, and update the directory if
* necessary.
*/
@@ -1203,7 +1231,8 @@ run_scheduled_events(time_t now)
router_upload_dir_desc_to_dirservers(0);
}
- if (!options->DisableNetwork && time_to_try_getting_descriptors < now) {
+ if (!should_delay_dir_fetches(options, NULL) &&
+ time_to_try_getting_descriptors < now) {
update_all_descriptor_downloads(now);
update_extrainfo_downloads(now);
if (router_have_minimum_dir_info())
@@ -1218,10 +1247,10 @@ run_scheduled_events(time_t now)
now + DESCRIPTOR_FAILURE_RESET_INTERVAL;
}
- if (options->UseBridges)
+ if (options->UseBridges && !options->DisableNetwork)
fetch_bridge_descriptors(options, now);
- /** 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
+ /* 1b. Every MAX_SSL_KEY_LIFETIME_INTERNAL seconds, we change our
* TLS context. */
if (!last_rotated_x509_certificate)
last_rotated_x509_certificate = now;
@@ -1247,7 +1276,7 @@ run_scheduled_events(time_t now)
time_to_add_entropy = now + ENTROPY_INTERVAL;
}
- /** 1c. If we have to change the accounting interval or record
+ /* 1c. If we have to change the accounting interval or record
* bandwidth used in this accounting interval, do so. */
if (accounting_is_enabled(options))
accounting_run_housekeeping(now);
@@ -1260,7 +1289,7 @@ run_scheduled_events(time_t now)
dirserv_test_reachability(now);
}
- /** 1d. Periodically, we discount older stability information so that new
+ /* 1d. Periodically, we discount older stability information so that new
* stability info counts more, and save the stability information to disk as
* appropriate. */
if (time_to_downrate_stability < now)
@@ -1379,14 +1408,13 @@ run_scheduled_events(time_t now)
dns_init();
}
- /** 2. Periodically, we consider force-uploading our descriptor
+ /* 2. Periodically, we consider force-uploading our descriptor
* (if we've passed our internal checks). */
-/** How often do we check whether part of our router info has changed in a way
- * that would require an upload? */
+/** How often do we check whether part of our router info has changed in a
+ * way that would require an upload? That includes checking whether our IP
+ * address has changed. */
#define CHECK_DESCRIPTOR_INTERVAL (60)
-/** How often do we (as a router) check whether our IP address has changed? */
-#define CHECK_IPADDRESS_INTERVAL (15*60)
/* 2b. Once per minute, regenerate and upload the descriptor if the old
* one is inaccurate. */
@@ -1394,10 +1422,7 @@ run_scheduled_events(time_t now)
static int dirport_reachability_count = 0;
time_to_check_descriptor = now + CHECK_DESCRIPTOR_INTERVAL;
check_descriptor_bandwidth_changed(now);
- if (time_to_check_ipaddress < now) {
- time_to_check_ipaddress = now + CHECK_IPADDRESS_INTERVAL;
- check_descriptor_ipaddress_changed(now);
- }
+ check_descriptor_ipaddress_changed(now);
mark_my_descriptor_dirty_if_too_old(now);
consider_publishable_server(0);
/* also, check religiously for reachability, if it's within the first
@@ -1426,22 +1451,29 @@ run_scheduled_events(time_t now)
/* If any networkstatus documents are no longer recent, we need to
* update all the descriptors' running status. */
- /* purge obsolete entries */
- networkstatus_v2_list_clean(now);
/* Remove dead routers. */
routerlist_remove_old_routers();
+ }
- /* Also, once per minute, check whether we want to download any
- * networkstatus documents.
- */
+ /* 2c. Every minute (or every second if TestingTorNetwork), check
+ * whether we want to download any networkstatus documents. */
+
+/* How often do we check whether we should download network status
+ * documents? */
+#define networkstatus_dl_check_interval(o) ((o)->TestingTorNetwork ? 1 : 60)
+
+ if (!should_delay_dir_fetches(options, NULL) &&
+ time_to_download_networkstatus < now) {
+ time_to_download_networkstatus =
+ now + networkstatus_dl_check_interval(options);
update_networkstatus_downloads(now);
}
- /** 2c. Let directory voting happen. */
+ /* 2c. Let directory voting happen. */
if (authdir_mode_v3(options))
dirvote_act(options, now);
- /** 3a. Every second, we examine pending circuits and prune the
+ /* 3a. Every second, we examine pending circuits and prune the
* ones which have been pending for more than a few seconds.
* We do this before step 4, so it can try building more if
* it's not comfortable with the number of available circuits.
@@ -1450,24 +1482,24 @@ run_scheduled_events(time_t now)
* it can't, currently), we should do this more often.) */
circuit_expire_building();
- /** 3b. Also look at pending streams and prune the ones that 'began'
+ /* 3b. Also look at pending streams and prune the ones that 'began'
* a long time ago but haven't gotten a 'connected' yet.
* Do this before step 4, so we can put them back into pending
* state to be picked up by the new circuit.
*/
connection_ap_expire_beginning();
- /** 3c. And expire connections that we've held open for too long.
+ /* 3c. And expire connections that we've held open for too long.
*/
connection_expire_held_open();
- /** 3d. And every 60 seconds, we relaunch listeners if any died. */
+ /* 3d. And every 60 seconds, we relaunch listeners if any died. */
if (!net_is_disabled() && time_to_check_listeners < now) {
retry_all_listeners(NULL, NULL, 0);
time_to_check_listeners = now+60;
}
- /** 4. Every second, we try a new circuit if there are no valid
+ /* 4. Every second, we try a new circuit if there are no valid
* circuits. Every NewCircuitPeriod seconds, we expire circuits
* that became dirty more than MaxCircuitDirtiness seconds ago,
* and we make a new circ if there are no clean circuits.
@@ -1480,7 +1512,7 @@ run_scheduled_events(time_t now)
if (now % 10 == 5)
circuit_expire_old_circuits_serverside(now);
- /** 5. We do housekeeping for each connection... */
+ /* 5. We do housekeeping for each connection... */
connection_or_set_bad_connections(NULL, 0);
for (i=0;i<smartlist_len(connection_array);i++) {
run_connection_housekeeping(i, now);
@@ -1492,7 +1524,9 @@ run_scheduled_events(time_t now)
if (conn->inbuf)
buf_shrink(conn->inbuf);
});
+#ifdef ENABLE_MEMPOOL
clean_cell_pool();
+#endif /* ENABLE_MEMPOOL */
buf_shrink_freelists(0);
/** How often do we check buffers and pools for empty space that can be
* deallocated? */
@@ -1500,29 +1534,35 @@ run_scheduled_events(time_t now)
time_to_shrink_memory = now + MEM_SHRINK_INTERVAL;
}
- /** 6. And remove any marked circuits... */
+ /* 6. And remove any marked circuits... */
circuit_close_all_marked();
- /** 7. And upload service descriptors if necessary. */
+ /* 7. And upload service descriptors if necessary. */
if (can_complete_circuit && !net_is_disabled()) {
rend_consider_services_upload(now);
rend_consider_descriptor_republication();
}
- /** 8. and blow away any connections that need to die. have to do this now,
+ /* 8. and blow away any connections that need to die. have to do this now,
* because if we marked a conn for close and left its socket -1, then
* we'll pass it to poll/select and bad things will happen.
*/
close_closeable_connections();
- /** 8b. And if anything in our state is ready to get flushed to disk, we
+ /* 8b. And if anything in our state is ready to get flushed to disk, we
* flush it. */
or_state_save(now);
- /** 9. and if we're a server, check whether our DNS is telling stories to
- * us. */
+ /* 8c. Do channel cleanup just like for connections */
+ channel_run_cleanup();
+ channel_listener_run_cleanup();
+
+ /* 9. and if we're an exit node, check whether our DNS is telling stories
+ * to us. */
if (!net_is_disabled() &&
- public_server_mode(options) && time_to_check_for_correct_dns < now) {
+ public_server_mode(options) &&
+ time_to_check_for_correct_dns < now &&
+ ! router_my_exit_policy_is_reject_star()) {
if (!time_to_check_for_correct_dns) {
time_to_check_for_correct_dns = now + 60 + crypto_rand_int(120);
} else {
@@ -1532,7 +1572,7 @@ run_scheduled_events(time_t now)
}
}
- /** 10. write bridge networkstatus file to disk */
+ /* 10. write bridge networkstatus file to disk */
if (options->BridgeAuthoritativeDir &&
time_to_write_bridge_status_file < now) {
networkstatus_dump_bridge_status_to_file(now);
@@ -1540,28 +1580,33 @@ run_scheduled_events(time_t now)
time_to_write_bridge_status_file = now+BRIDGE_STATUSFILE_INTERVAL;
}
- /** 11. check the port forwarding app */
+ /* 11. check the port forwarding app */
if (!net_is_disabled() &&
time_to_check_port_forwarding < now &&
options->PortForwarding &&
is_server) {
#define PORT_FORWARDING_CHECK_INTERVAL 5
- /* XXXXX this should take a list of ports, not just two! */
- tor_check_port_forwarding(options->PortForwardingHelper,
- get_primary_dir_port(),
- get_primary_or_port(),
- now);
+ smartlist_t *ports_to_forward = get_list_of_ports_to_forward();
+ if (ports_to_forward) {
+ tor_check_port_forwarding(options->PortForwardingHelper,
+ ports_to_forward,
+ now);
+
+ SMARTLIST_FOREACH(ports_to_forward, char *, cp, tor_free(cp));
+ smartlist_free(ports_to_forward);
+ }
time_to_check_port_forwarding = now+PORT_FORWARDING_CHECK_INTERVAL;
}
- /** 11b. check pending unconfigured managed proxies */
+ /* 11b. check pending unconfigured managed proxies */
if (!net_is_disabled() && pt_proxies_configuration_pending())
pt_configure_remaining_proxies();
- /** 12. write the heartbeat message */
+ /* 12. write the heartbeat message */
if (options->HeartbeatPeriod &&
time_to_next_heartbeat <= now) {
- log_heartbeat(now);
+ if (time_to_next_heartbeat) /* don't log the first heartbeat */
+ log_heartbeat(now);
time_to_next_heartbeat = now+options->HeartbeatPeriod;
}
}
@@ -1617,6 +1662,9 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
control_event_bandwidth_used((uint32_t)bytes_read,(uint32_t)bytes_written);
control_event_stream_bandwidth_used();
+ control_event_conn_bandwidth_used();
+ control_event_circ_bandwidth_used();
+ control_event_circuit_cell_stats();
if (server_mode(options) &&
!net_is_disabled() &&
@@ -1628,24 +1676,28 @@ second_elapsed_callback(periodic_timer_t *timer, void *arg)
/* every 20 minutes, check and complain if necessary */
const routerinfo_t *me = router_get_my_routerinfo();
if (me && !check_whether_orport_reachable()) {
+ char *address = tor_dup_ip(me->addr);
log_warn(LD_CONFIG,"Your server (%s:%d) has not managed to confirm that "
"its ORPort is reachable. Please check your firewalls, ports, "
"address, /etc/hosts file, etc.",
- me->address, me->or_port);
+ address, me->or_port);
control_event_server_status(LOG_WARN,
"REACHABILITY_FAILED ORADDRESS=%s:%d",
- me->address, me->or_port);
+ address, me->or_port);
+ tor_free(address);
}
if (me && !check_whether_dirport_reachable()) {
+ char *address = tor_dup_ip(me->addr);
log_warn(LD_CONFIG,
"Your server (%s:%d) has not managed to confirm that its "
"DirPort is reachable. Please check your firewalls, ports, "
"address, /etc/hosts file, etc.",
- me->address, me->dir_port);
+ address, me->dir_port);
control_event_server_status(LOG_WARN,
"REACHABILITY_FAILED DIRADDRESS=%s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
+ tor_free(address);
}
}
@@ -1707,7 +1759,7 @@ refill_callback(periodic_timer_t *timer, void *arg)
accounting_add_bytes(bytes_read, bytes_written, seconds_rolled_over);
if (milliseconds_elapsed > 0)
- connection_bucket_refill(milliseconds_elapsed, now.tv_sec);
+ connection_bucket_refill(milliseconds_elapsed, (time_t)now.tv_sec);
stats_prev_global_read_bucket = global_read_bucket;
stats_prev_global_write_bucket = global_write_bucket;
@@ -1823,7 +1875,7 @@ do_hup(void)
/* Rotate away from the old dirty circuits. This has to be done
* after we've read the new options, but before we start using
* circuits for directory fetches. */
- circuit_expire_all_dirty_circs();
+ circuit_mark_all_dirty_circs_as_unusable();
/* retry appropriate downloads */
router_reset_status_download_failures();
@@ -1844,7 +1896,7 @@ do_hup(void)
}
/** Tor main loop. */
-/* static */ int
+int
do_main_loop(void)
{
int loop_result;
@@ -1861,6 +1913,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
@@ -1872,8 +1931,10 @@ do_main_loop(void)
}
}
+#ifdef ENABLE_MEMPOOLS
/* Set up the packed_cell_t memory pool. */
init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
/* Set up our buckets */
connection_bucket_init();
@@ -1889,9 +1950,6 @@ do_main_loop(void)
log_warn(LD_DIR,
"Couldn't load all cached v3 certificates. Starting anyway.");
}
- if (router_reload_v2_networkstatus()) {
- return -1;
- }
if (router_reload_consensus_networkstatus()) {
return -1;
}
@@ -2053,7 +2111,7 @@ process_signal(uintptr_t sig)
time_t now = time(NULL);
if (time_of_last_signewnym + MAX_SIGNEWNYM_RATE > now) {
signewnym_is_pending = 1;
- log(LOG_NOTICE, LD_CONTROL,
+ log_notice(LD_CONTROL,
"Rate limiting NEWNYM request: delaying by %d second(s)",
(int)(MAX_SIGNEWNYM_RATE+time_of_last_signewnym-now));
} else {
@@ -2069,8 +2127,8 @@ process_signal(uintptr_t sig)
}
/** Returns Tor's uptime. */
-long
-get_uptime(void)
+MOCK_IMPL(long,
+get_uptime,(void))
{
return stats_n_seconds_working;
}
@@ -2085,7 +2143,7 @@ static void
dumpmemusage(int severity)
{
connection_dump_buffer_mem_stats(severity);
- log(severity, LD_GENERAL, "In rephist: "U64_FORMAT" used by %d Tors.",
+ tor_log(severity, LD_GENERAL, "In rephist: "U64_FORMAT" used by %d Tors.",
U64_PRINTF_ARG(rephist_total_alloc), rephist_total_num);
dump_routerlist_mem_usage(severity);
dump_cell_pool_usage(severity);
@@ -2103,27 +2161,27 @@ dumpstats(int severity)
time_t elapsed;
size_t rbuf_cap, wbuf_cap, rbuf_len, wbuf_len;
- log(severity, LD_GENERAL, "Dumping stats:");
+ tor_log(severity, LD_GENERAL, "Dumping stats:");
SMARTLIST_FOREACH_BEGIN(connection_array, connection_t *, conn) {
int i = conn_sl_idx;
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"Conn %d (socket %d) type %d (%s), state %d (%s), created %d secs ago",
i, (int)conn->s, conn->type, conn_type_to_string(conn->type),
conn->state, conn_state_to_string(conn->type, conn->state),
(int)(now - conn->timestamp_created));
if (!connection_is_listener(conn)) {
- log(severity,LD_GENERAL,
+ tor_log(severity,LD_GENERAL,
"Conn %d is to %s:%d.", i,
safe_str_client(conn->address),
conn->port);
- log(severity,LD_GENERAL,
+ tor_log(severity,LD_GENERAL,
"Conn %d: %d bytes waiting on inbuf (len %d, last read %d secs ago)",
i,
(int)connection_get_inbuf_len(conn),
(int)buf_allocation(conn->inbuf),
(int)(now - conn->timestamp_lastread));
- log(severity,LD_GENERAL,
+ tor_log(severity,LD_GENERAL,
"Conn %d: %d bytes waiting on outbuf "
"(len %d, last written %d secs ago)",i,
(int)connection_get_outbuf_len(conn),
@@ -2134,7 +2192,7 @@ dumpstats(int severity)
if (or_conn->tls) {
tor_tls_get_buffer_sizes(or_conn->tls, &rbuf_cap, &rbuf_len,
&wbuf_cap, &wbuf_len);
- log(severity, LD_GENERAL,
+ tor_log(severity, LD_GENERAL,
"Conn %d: %d/%d bytes used on OpenSSL read buffer; "
"%d/%d bytes used on write buffer.",
i, (int)rbuf_len, (int)rbuf_cap, (int)wbuf_len, (int)wbuf_cap);
@@ -2144,7 +2202,11 @@ dumpstats(int severity)
circuit_dump_by_conn(conn, severity); /* dump info about all the circuits
* using this conn */
} SMARTLIST_FOREACH_END(conn);
- log(severity, LD_NET,
+
+ channel_dumpstats(severity);
+ channel_listener_dumpstats(severity);
+
+ tor_log(severity, LD_NET,
"Cells processed: "U64_FORMAT" padding\n"
" "U64_FORMAT" create\n"
" "U64_FORMAT" created\n"
@@ -2160,33 +2222,36 @@ dumpstats(int severity)
U64_PRINTF_ARG(stats_n_relay_cells_delivered),
U64_PRINTF_ARG(stats_n_destroy_cells_processed));
if (stats_n_data_cells_packaged)
- log(severity,LD_NET,"Average packaged cell fullness: %2.3f%%",
+ tor_log(severity,LD_NET,"Average packaged cell fullness: %2.3f%%",
100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE)) );
if (stats_n_data_cells_received)
- log(severity,LD_NET,"Average delivered cell fullness: %2.3f%%",
+ tor_log(severity,LD_NET,"Average delivered cell fullness: %2.3f%%",
100*(U64_TO_DBL(stats_n_data_bytes_received) /
U64_TO_DBL(stats_n_data_cells_received*RELAY_PAYLOAD_SIZE)) );
+ cpuworker_log_onionskin_overhead(severity, ONION_HANDSHAKE_TYPE_TAP, "TAP");
+ cpuworker_log_onionskin_overhead(severity, ONION_HANDSHAKE_TYPE_NTOR,"ntor");
+
if (now - time_of_process_start >= 0)
elapsed = now - time_of_process_start;
else
elapsed = 0;
if (elapsed) {
- log(severity, LD_NET,
+ tor_log(severity, LD_NET,
"Average bandwidth: "U64_FORMAT"/%d = %d bytes/sec reading",
U64_PRINTF_ARG(stats_n_bytes_read),
(int)elapsed,
(int) (stats_n_bytes_read/elapsed));
- log(severity, LD_NET,
+ tor_log(severity, LD_NET,
"Average bandwidth: "U64_FORMAT"/%d = %d bytes/sec writing",
U64_PRINTF_ARG(stats_n_bytes_written),
(int)elapsed,
(int) (stats_n_bytes_written/elapsed));
}
- log(severity, LD_NET, "--------------- Dumping memory information:");
+ tor_log(severity, LD_NET, "--------------- Dumping memory information:");
dumpmemusage(severity);
rep_hist_dump_stats(now,severity);
@@ -2257,21 +2322,24 @@ 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;
+ char progname[256];
+ int 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);
+ tor_snprintf(progname, sizeof(progname), "Tor %s", get_version());
+ log_set_application_name(progname);
+
+ /* Set up the crypto nice and early */
+ if (crypto_early_init() < 0) {
+ log_err(LD_GENERAL, "Unable to initialize the crypto subsystem!");
+ return 1;
+ }
+
/* Initialize the history structures. */
rep_hist_init();
/* Initialize the service cache. */
@@ -2279,14 +2347,31 @@ tor_init(int argc, char *argv[])
addressmap_init(); /* Init the client dns cache. Do it always, since it's
* cheap. */
+ {
/* We search for the "quiet" option first, since it decides whether we
* will log anything at all to the command line. */
- for (i=1;i<argc;++i) {
- if (!strcmp(argv[i], "--hush"))
- quiet = 1;
- if (!strcmp(argv[i], "--quiet"))
- quiet = 2;
+ config_line_t *opts = NULL, *cmdline_opts = NULL;
+ const config_line_t *cl;
+ (void) config_parse_commandline(argc, argv, 1, &opts, &cmdline_opts);
+ for (cl = cmdline_opts; cl; cl = cl->next) {
+ if (!strcmp(cl->key, "--hush"))
+ quiet = 1;
+ if (!strcmp(cl->key, "--quiet") ||
+ !strcmp(cl->key, "--dump-config"))
+ quiet = 2;
+ /* --version, --digests, and --help imply --hush */
+ if (!strcmp(cl->key, "--version") || !strcmp(cl->key, "--digests") ||
+ !strcmp(cl->key, "--list-torrc-options") ||
+ !strcmp(cl->key, "--library-versions") ||
+ !strcmp(cl->key, "-h") || !strcmp(cl->key, "--help")) {
+ if (quiet < 1)
+ quiet = 1;
+ }
+ }
+ config_free_lines(opts);
+ config_free_lines(cmdline_opts);
}
+
/* give it somewhere to log to initially */
switch (quiet) {
case 2:
@@ -2302,12 +2387,18 @@ tor_init(int argc, char *argv[])
{
const char *version = get_version();
+ const char *bev_str =
#ifdef USE_BUFFEREVENTS
- log_notice(LD_GENERAL, "Tor v%s (with bufferevents) running on %s.",
- version, get_uname());
+ "(with bufferevents) ";
#else
- log_notice(LD_GENERAL, "Tor v%s running on %s.", version, get_uname());
+ "";
#endif
+ log_notice(LD_GENERAL, "Tor v%s %srunning on %s with Libevent %s, "
+ "OpenSSL %s and Zlib %s.", version, bev_str,
+ get_uname(),
+ tor_libevent_get_version_str(),
+ crypto_openssl_get_version_str(),
+ tor_zlib_get_version_str());
log_notice(LD_GENERAL, "Tor can't help you if you use it wrong! "
"Learn how to be safe at "
@@ -2319,7 +2410,7 @@ tor_init(int argc, char *argv[])
}
#ifdef NON_ANONYMOUS_MODE_ENABLED
- log(LOG_WARN, LD_GENERAL, "This copy of Tor was compiled to run in a "
+ log_warn(LD_GENERAL, "This copy of Tor was compiled to run in a "
"non-anonymous mode. It will provide NO ANONYMITY.");
#endif
@@ -2346,6 +2437,10 @@ tor_init(int argc, char *argv[])
log_err(LD_BUG, "Unable to initialize OpenSSL. Exiting.");
return -1;
}
+ stream_choice_seed_weak_rng();
+ if (tor_init_libevent_rng() < 0) {
+ log_warn(LD_NET, "Problem initializing libevent RNG.");
+ }
return 0;
}
@@ -2441,19 +2536,29 @@ tor_free_all(int postfork)
circuit_free_all();
entry_guards_free_all();
pt_free_all();
+ channel_tls_free_all();
+ channel_free_all();
connection_free_all();
buf_shrink_freelists(1);
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();
router_free_all();
policies_free_all();
}
+#ifdef ENABLE_MEMPOOLS
free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
if (!postfork) {
tor_tls_free_all();
+#ifndef _WIN32
+ tor_getpwnam(NULL);
+#endif
}
/* stuff in main.c */
@@ -2461,6 +2566,10 @@ tor_free_all(int postfork)
smartlist_free(closeable_connection_lst);
smartlist_free(active_linked_connection_lst);
periodic_timer_free(second_timer);
+#ifndef USE_BUFFEREVENTS
+ periodic_timer_free(refill_timer);
+#endif
+
if (!postfork) {
release_lockfile();
}
@@ -2481,10 +2590,19 @@ tor_cleanup(void)
time_t now = time(NULL);
/* Remove our pid file. We don't care if there was an error when we
* unlink, nothing we could do about it anyways. */
- if (options->PidFile)
- unlink(options->PidFile);
- if (options->ControlPortWriteToFile)
- unlink(options->ControlPortWriteToFile);
+ if (options->PidFile) {
+ if (unlink(options->PidFile) != 0) {
+ log_warn(LD_FS, "Couldn't unlink pid file %s: %s",
+ options->PidFile, strerror(errno));
+ }
+ }
+ if (options->ControlPortWriteToFile) {
+ if (unlink(options->ControlPortWriteToFile) != 0) {
+ log_warn(LD_FS, "Couldn't unlink control port file %s: %s",
+ options->ControlPortWriteToFile,
+ strerror(errno));
+ }
+ }
if (accounting_is_enabled(options))
accounting_record_bandwidth_usage(now, get_or_state());
or_state_mark_dirty(get_or_state(), 0); /* force an immediate save. */
@@ -2507,7 +2625,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];
@@ -2515,7 +2633,7 @@ do_list_fingerprint(void)
const char *nickname = get_options()->Nickname;
if (!server_mode(get_options())) {
log_err(LD_GENERAL,
- "Clients don't have long-term identity keys. Exiting.\n");
+ "Clients don't have long-term identity keys. Exiting.");
return -1;
}
tor_assert(nickname);
@@ -2537,7 +2655,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)
{
@@ -2553,6 +2671,34 @@ do_hash_password(void)
printf("16:%s\n",output);
}
+/** Entry point for configuration dumping: write the configuration to
+ * stdout. */
+static int
+do_dump_config(void)
+{
+ const or_options_t *options = get_options();
+ const char *arg = options->command_arg;
+ int how;
+ char *opts;
+ if (!strcmp(arg, "short")) {
+ how = OPTIONS_DUMP_MINIMAL;
+ } else if (!strcmp(arg, "non-builtin")) {
+ how = OPTIONS_DUMP_DEFAULTS;
+ } else if (!strcmp(arg, "full")) {
+ how = OPTIONS_DUMP_ALL;
+ } else {
+ printf("%s is not a recognized argument to --dump-config. "
+ "Please select 'short', 'non-builtin', or 'full'", arg);
+ return -1;
+ }
+
+ opts = options_dump(options, how);
+ printf("%s", opts);
+ tor_free(opts);
+
+ return 0;
+}
+
#if defined (WINCE)
int
find_flashcard_path(PWCHAR path, size_t size)
@@ -2578,6 +2724,226 @@ find_flashcard_path(PWCHAR path, size_t size)
}
#endif
+static void
+init_addrinfo(void)
+{
+ char hname[256];
+
+ // host name to sandbox
+ gethostname(hname, sizeof(hname));
+ sandbox_add_addrinfo(hname);
+}
+
+static sandbox_cfg_t*
+sandbox_init_filter(void)
+{
+ const or_options_t *options = get_options();
+ sandbox_cfg_t *cfg = sandbox_cfg_new();
+ int i;
+
+ sandbox_cfg_allow_openat_filename(&cfg,
+ get_datadir_fname("cached-status"));
+
+ sandbox_cfg_allow_open_filename_array(&cfg,
+ get_datadir_fname("cached-certs"),
+ get_datadir_fname("cached-certs.tmp"),
+ get_datadir_fname("cached-consensus"),
+ get_datadir_fname("cached-consensus.tmp"),
+ get_datadir_fname("unverified-consensus"),
+ get_datadir_fname("unverified-consensus.tmp"),
+ get_datadir_fname("unverified-microdesc-consensus"),
+ get_datadir_fname("unverified-microdesc-consensus.tmp"),
+ get_datadir_fname("cached-microdesc-consensus"),
+ get_datadir_fname("cached-microdesc-consensus.tmp"),
+ get_datadir_fname("cached-microdescs"),
+ get_datadir_fname("cached-microdescs.tmp"),
+ get_datadir_fname("cached-microdescs.new"),
+ get_datadir_fname("cached-microdescs.new.tmp"),
+ get_datadir_fname("cached-descriptors"),
+ get_datadir_fname("cached-descriptors.new"),
+ get_datadir_fname("cached-descriptors.tmp"),
+ get_datadir_fname("cached-descriptors.new.tmp"),
+ get_datadir_fname("cached-descriptors.tmp.tmp"),
+ get_datadir_fname("cached-extrainfo"),
+ get_datadir_fname("cached-extrainfo.new"),
+ get_datadir_fname("cached-extrainfo.tmp"),
+ get_datadir_fname("cached-extrainfo.new.tmp"),
+ get_datadir_fname("cached-extrainfo.tmp.tmp"),
+ get_datadir_fname("state.tmp"),
+ get_datadir_fname("unparseable-desc.tmp"),
+ get_datadir_fname("unparseable-desc"),
+ get_datadir_fname("v3-status-votes"),
+ get_datadir_fname("v3-status-votes.tmp"),
+ tor_strdup("/dev/srandom"),
+ tor_strdup("/dev/urandom"),
+ tor_strdup("/dev/random"),
+ tor_strdup("/etc/hosts"),
+ tor_strdup("/proc/meminfo"),
+ NULL, 0
+ );
+ if (options->ServerDNSResolvConfFile)
+ sandbox_cfg_allow_open_filename(&cfg,
+ tor_strdup(options->ServerDNSResolvConfFile));
+ else
+ sandbox_cfg_allow_open_filename(&cfg, tor_strdup("/etc/resolv.conf"));
+
+ for (i = 0; i < 2; ++i) {
+ if (get_torrc_fname(i)) {
+ sandbox_cfg_allow_open_filename(&cfg, tor_strdup(get_torrc_fname(i)));
+ }
+ }
+
+#define RENAME_SUFFIX(name, suffix) \
+ sandbox_cfg_allow_rename(&cfg, \
+ get_datadir_fname(name suffix), \
+ get_datadir_fname(name))
+
+#define RENAME_SUFFIX2(prefix, name, suffix) \
+ sandbox_cfg_allow_rename(&cfg, \
+ get_datadir_fname2(prefix, name suffix), \
+ get_datadir_fname2(prefix, name))
+
+ RENAME_SUFFIX("cached-certs", ".tmp");
+ RENAME_SUFFIX("cached-consensus", ".tmp");
+ RENAME_SUFFIX("unverified-consensus", ".tmp");
+ RENAME_SUFFIX("unverified-microdesc-consensus", ".tmp");
+ RENAME_SUFFIX("cached-microdesc-consensus", ".tmp");
+ RENAME_SUFFIX("cached-microdescs", ".tmp");
+ RENAME_SUFFIX("cached-microdescs", ".new");
+ RENAME_SUFFIX("cached-microdescs.new", ".tmp");
+ RENAME_SUFFIX("cached-descriptors", ".tmp");
+ RENAME_SUFFIX("cached-descriptors", ".new");
+ RENAME_SUFFIX("cached-descriptors.new", ".tmp");
+ RENAME_SUFFIX("cached-extrainfo", ".tmp");
+ RENAME_SUFFIX("cached-extrainfo", ".new");
+ RENAME_SUFFIX("cached-extrainfo.new", ".tmp");
+ RENAME_SUFFIX("state", ".tmp");
+ RENAME_SUFFIX("unparseable-desc", ".tmp");
+ RENAME_SUFFIX("v3-status-votes", ".tmp");
+
+ sandbox_cfg_allow_stat_filename_array(&cfg,
+ get_datadir_fname(NULL),
+ get_datadir_fname("lock"),
+ get_datadir_fname("state"),
+ get_datadir_fname("router-stability"),
+ get_datadir_fname("cached-extrainfo.new"),
+ NULL, 0
+ );
+
+ {
+ smartlist_t *files = smartlist_new();
+ tor_log_get_logfile_names(files);
+ SMARTLIST_FOREACH(files, char *, file_name, {
+ /* steals reference */
+ sandbox_cfg_allow_open_filename(&cfg, file_name);
+ });
+ smartlist_free(files);
+ }
+
+ {
+ smartlist_t *files = smartlist_new();
+ smartlist_t *dirs = smartlist_new();
+ rend_services_add_filenames_to_lists(files, dirs);
+ SMARTLIST_FOREACH(files, char *, file_name, {
+ char *tmp_name = NULL;
+ tor_asprintf(&tmp_name, "%s.tmp", file_name);
+ sandbox_cfg_allow_rename(&cfg,
+ tor_strdup(tmp_name), tor_strdup(file_name));
+ /* steals references */
+ sandbox_cfg_allow_open_filename_array(&cfg, file_name, tmp_name, NULL);
+ });
+ SMARTLIST_FOREACH(dirs, char *, dir, {
+ /* steals reference */
+ sandbox_cfg_allow_stat_filename(&cfg, dir);
+ });
+ smartlist_free(files);
+ smartlist_free(dirs);
+ }
+
+ {
+ char *fname;
+ if ((fname = get_controller_cookie_file_name())) {
+ sandbox_cfg_allow_open_filename(&cfg, fname);
+ }
+ if ((fname = get_ext_or_auth_cookie_file_name())) {
+ sandbox_cfg_allow_open_filename(&cfg, fname);
+ }
+ }
+
+ if (options->DirPortFrontPage) {
+ sandbox_cfg_allow_open_filename(&cfg,
+ tor_strdup(options->DirPortFrontPage));
+ }
+
+ // orport
+ if (server_mode(get_options())) {
+ sandbox_cfg_allow_open_filename_array(&cfg,
+ get_datadir_fname2("keys", "secret_id_key"),
+ get_datadir_fname2("keys", "secret_onion_key"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor.tmp"),
+ get_datadir_fname2("keys", "secret_id_key.old"),
+ get_datadir_fname2("keys", "secret_onion_key.old"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor.old"),
+ get_datadir_fname2("keys", "secret_onion_key.tmp"),
+ get_datadir_fname2("keys", "secret_id_key.tmp"),
+ get_datadir_fname2("stats", "bridge-stats"),
+ get_datadir_fname2("stats", "bridge-stats.tmp"),
+ get_datadir_fname2("stats", "dirreq-stats"),
+ get_datadir_fname2("stats", "dirreq-stats.tmp"),
+ get_datadir_fname2("stats", "entry-stats"),
+ get_datadir_fname2("stats", "entry-stats.tmp"),
+ get_datadir_fname2("stats", "exit-stats"),
+ get_datadir_fname2("stats", "exit-stats.tmp"),
+ get_datadir_fname2("stats", "buffer-stats"),
+ get_datadir_fname2("stats", "buffer-stats.tmp"),
+ get_datadir_fname2("stats", "conn-stats"),
+ get_datadir_fname2("stats", "conn-stats.tmp"),
+ get_datadir_fname("approved-routers"),
+ get_datadir_fname("fingerprint"),
+ get_datadir_fname("fingerprint.tmp"),
+ get_datadir_fname("hashed-fingerprint"),
+ get_datadir_fname("hashed-fingerprint.tmp"),
+ get_datadir_fname("router-stability"),
+ get_datadir_fname("router-stability.tmp"),
+ tor_strdup("/etc/resolv.conf"),
+ NULL, 0
+ );
+
+ RENAME_SUFFIX("fingerprint", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_onion_key_ntor", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_id_key", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_id_key.old", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_onion_key", ".tmp");
+ RENAME_SUFFIX2("keys", "secret_onion_key.old", ".tmp");
+ RENAME_SUFFIX2("stats", "bridge-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "dirreq-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "entry-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "exit-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "buffer-stats", ".tmp");
+ RENAME_SUFFIX2("stats", "conn-stats", ".tmp");
+ RENAME_SUFFIX("hashed-fingerprint", ".tmp");
+ RENAME_SUFFIX("router-stability", ".tmp");
+
+ sandbox_cfg_allow_rename(&cfg,
+ get_datadir_fname2("keys", "secret_onion_key"),
+ get_datadir_fname2("keys", "secret_onion_key.old"));
+ sandbox_cfg_allow_rename(&cfg,
+ get_datadir_fname2("keys", "secret_onion_key_ntor"),
+ get_datadir_fname2("keys", "secret_onion_key_ntor.old"));
+
+ sandbox_cfg_allow_stat_filename_array(&cfg,
+ get_datadir_fname("keys"),
+ get_datadir_fname2("stats", "dirreq-stats"),
+ NULL, 0
+ );
+ }
+
+ init_addrinfo();
+
+ return cfg;
+}
+
/** Main entry point for the Tor process. Called from main(). */
/* This function is distinct from main() only so we can link main.c into
* the unittest binary without conflicting with the unittests' main. */
@@ -2624,6 +2990,8 @@ tor_main(int argc, char *argv[])
}
#endif
+ configure_backtrace_handler(get_version());
+
update_approx_time(time(NULL));
tor_threads_init();
init_logging();
@@ -2631,7 +2999,7 @@ tor_main(int argc, char *argv[])
{
/* Instruct OpenSSL to use our internal wrappers for malloc,
realloc and free. */
- int r = CRYPTO_set_mem_ex_functions(_tor_malloc, _tor_realloc, _tor_free);
+ int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
tor_assert(r);
}
#endif
@@ -2644,6 +3012,22 @@ tor_main(int argc, char *argv[])
#endif
if (tor_init(argc, argv)<0)
return -1;
+
+ if (get_options()->Sandbox && get_options()->command == CMD_RUN_TOR) {
+ sandbox_cfg_t* cfg = sandbox_init_filter();
+
+ if (sandbox_init(cfg)) {
+ log_err(LD_BUG,"Failed to create syscall sandbox filter");
+ return -1;
+ }
+
+ // registering libevent rng
+#ifdef HAVE_EVUTIL_SECURE_RNG_SET_URANDOM_DEVICE_FILE
+ evutil_secure_rng_set_urandom_device_file(
+ (char*) sandbox_intern_string("/dev/urandom"));
+#endif
+ }
+
switch (get_options()->command) {
case CMD_RUN_TOR:
#ifdef NT_SERVICE
@@ -2662,6 +3046,9 @@ tor_main(int argc, char *argv[])
printf("Configuration was valid\n");
result = 0;
break;
+ case CMD_DUMP_CONFIG:
+ result = do_dump_config();
+ break;
case CMD_RUN_UNITTESTS: /* only set by test.c */
default:
log_warn(LD_BUG,"Illegal command number %d: internal error.",
diff --git a/src/or/main.h b/src/or/main.h
index f843b6f9f..a3bce3486 100644
--- a/src/or/main.h
+++ b/src/or/main.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for main.c.
**/
-#ifndef _TOR_MAIN_H
-#define _TOR_MAIN_H
+#ifndef TOR_MAIN_H
+#define TOR_MAIN_H
extern int can_complete_circuit;
@@ -24,8 +24,8 @@ void add_connection_to_closeable_list(connection_t *conn);
int connection_is_on_closeable_list(connection_t *conn);
smartlist_t *get_connection_array(void);
-uint64_t get_bytes_read(void);
-uint64_t get_bytes_written(void);
+MOCK_DECL(uint64_t,get_bytes_read,(void));
+MOCK_DECL(uint64_t,get_bytes_written,(void));
/** Bitmask for events that we can turn on and off with
* connection_watch_events. */
@@ -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);
@@ -50,8 +50,10 @@ void directory_info_has_arrived(time_t now, int from_cache);
void ip_address_changed(int at_interface);
void dns_servers_relaunch_checks(void);
+void reschedule_descriptor_update_check(void);
+
+MOCK_DECL(long,get_uptime,(void));
-long get_uptime(void);
unsigned get_signewnym_epoch(void);
void handle_signals(int is_parent);
@@ -66,11 +68,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/microdesc.c b/src/or/microdesc.c
index b4d22c1c6..fdb549a9a 100644
--- a/src/or/microdesc.c
+++ b/src/or/microdesc.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2012, The Tor Project, Inc. */
+/* Copyright (c) 2009-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
@@ -6,6 +6,7 @@
#include "config.h"
#include "directory.h"
#include "dirserv.h"
+#include "entrynodes.h"
#include "microdesc.h"
#include "networkstatus.h"
#include "nodelist.h"
@@ -42,27 +43,22 @@ struct microdesc_cache_t {
/** Helper: computes a hash of <b>md</b> to place it in a hash table. */
static INLINE unsigned int
-_microdesc_hash(microdesc_t *md)
+microdesc_hash_(microdesc_t *md)
{
- unsigned *d = (unsigned*)md->digest;
-#if SIZEOF_INT == 4
- return d[0] ^ d[1] ^ d[2] ^ d[3] ^ d[4] ^ d[5] ^ d[6] ^ d[7];
-#else
- return d[0] ^ d[1] ^ d[2] ^ d[3];
-#endif
+ return (unsigned) siphash24g(md->digest, sizeof(md->digest));
}
/** Helper: compares <b>a</b> and </b> for equality for hash-table purposes. */
static INLINE int
-_microdesc_eq(microdesc_t *a, microdesc_t *b)
+microdesc_eq_(microdesc_t *a, microdesc_t *b)
{
return tor_memeq(a->digest, b->digest, DIGEST256_LEN);
}
HT_PROTOTYPE(microdesc_map, microdesc_t, node,
- _microdesc_hash, _microdesc_eq);
+ microdesc_hash_, microdesc_eq_);
HT_GENERATE(microdesc_map, microdesc_t, node,
- _microdesc_hash, _microdesc_eq, 0.6,
+ microdesc_hash_, microdesc_eq_, 0.6,
malloc, realloc, free);
/** Write the body of <b>md</b> into <b>f</b>, with appropriate annotations.
@@ -70,20 +66,24 @@ HT_GENERATE(microdesc_map, microdesc_t, node,
* *<b>annotation_len_out</b> to the number of bytes written as
* annotations. */
static ssize_t
-dump_microdescriptor(FILE *f, microdesc_t *md, size_t *annotation_len_out)
+dump_microdescriptor(int fd, microdesc_t *md, size_t *annotation_len_out)
{
ssize_t r = 0;
- size_t written;
- /* XXXX drops unkown annotations. */
+ ssize_t written;
+ if (md->body == NULL) {
+ *annotation_len_out = 0;
+ return 0;
+ }
+ /* XXXX drops unknown annotations. */
if (md->last_listed) {
char buf[ISO_TIME_LEN+1];
char annotation[ISO_TIME_LEN+32];
format_iso_time(buf, md->last_listed);
tor_snprintf(annotation, sizeof(annotation), "@last-listed %s\n", buf);
- if (fputs(annotation, f) < 0) {
+ if (write_all(fd, annotation, strlen(annotation), 0) < 0) {
log_warn(LD_DIR,
"Couldn't write microdescriptor annotation: %s",
- strerror(ferror(f)));
+ strerror(errno));
return -1;
}
r += strlen(annotation);
@@ -92,13 +92,13 @@ dump_microdescriptor(FILE *f, microdesc_t *md, size_t *annotation_len_out)
*annotation_len_out = 0;
}
- md->off = (off_t) ftell(f);
- written = fwrite(md->body, 1, md->bodylen, f);
- if (written != md->bodylen) {
+ md->off = tor_fd_getpos(fd);
+ written = write_all(fd, md->body, md->bodylen, 0);
+ if (written != (ssize_t)md->bodylen) {
log_warn(LD_DIR,
- "Couldn't dump microdescriptor (wrote %lu out of %lu): %s",
- (unsigned long)written, (unsigned long)md->bodylen,
- strerror(ferror(f)));
+ "Couldn't dump microdescriptor (wrote %ld out of %lu): %s",
+ (long)written, (unsigned long)md->bodylen,
+ strerror(errno));
return -1;
}
r += md->bodylen;
@@ -131,10 +131,10 @@ get_microdesc_cache(void)
*/
/** Decode the microdescriptors from the string starting at <b>s</b> and
- * ending at <b>eos</b>, and store them in <b>cache</b>. If <b>no-save</b>,
+ * ending at <b>eos</b>, and store them in <b>cache</b>. If <b>no_save</b>,
* mark them as non-writable to disk. If <b>where</b> is SAVED_IN_CACHE,
* leave their bodies as pointers to the mmap'd cache. If where is
- * <b>SAVED_NOWHERE</b>, do not allow annotations. If listed_at is positive,
+ * <b>SAVED_NOWHERE</b>, do not allow annotations. If listed_at is not -1,
* set the last_listed field of every microdesc to listed_at. If
* requested_digests is non-null, then it contains a list of digests we mean
* to allow, so we should reject any non-requested microdesc with a different
@@ -149,17 +149,16 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
{
smartlist_t *descriptors, *added;
const int allow_annotations = (where != SAVED_NOWHERE);
- const int copy_body = (where != SAVED_IN_CACHE);
descriptors = microdescs_parse_from_string(s, eos,
allow_annotations,
- copy_body);
- if (listed_at > 0) {
+ where);
+ if (listed_at != (time_t)-1) {
SMARTLIST_FOREACH(descriptors, microdesc_t *, md,
md->last_listed = listed_at);
}
if (requested_digests256) {
- digestmap_t *requested; /* XXXX actuqlly we should just use a
+ digestmap_t *requested; /* XXXX actually we should just use a
digest256map */
requested = digestmap_new();
SMARTLIST_FOREACH(requested_digests256, const char *, cp,
@@ -168,7 +167,7 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
if (digestmap_get(requested, md->digest)) {
digestmap_set(requested, md->digest, (void*)2);
} else {
- log_fn(LOG_PROTOCOL_WARN, LD_DIR, "Received non-requested microcdesc");
+ log_fn(LOG_PROTOCOL_WARN, LD_DIR, "Received non-requested microdesc");
microdesc_free(md);
SMARTLIST_DEL_CURRENT(descriptors, md);
}
@@ -187,7 +186,7 @@ microdescs_add_to_cache(microdesc_cache_t *cache,
return added;
}
-/** As microdescs_add_to_cache, but takes a list of micrdescriptors instead of
+/** As microdescs_add_to_cache, but takes a list of microdescriptors instead of
* a string to decode. Frees any members of <b>descriptors</b> that it does
* not add. */
smartlist_t *
@@ -197,18 +196,17 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
{
smartlist_t *added;
open_file_t *open_file = NULL;
- FILE *f = NULL;
+ int fd = -1;
// int n_added = 0;
ssize_t size = 0;
if (where == SAVED_NOWHERE && !no_save) {
- f = start_writing_to_stdio_file(cache->journal_fname,
- OPEN_FLAGS_APPEND|O_BINARY,
- 0600, &open_file);
- if (!f) {
+ fd = start_writing_to_file(cache->journal_fname,
+ OPEN_FLAGS_APPEND|O_BINARY,
+ 0600, &open_file);
+ if (fd < 0) {
log_warn(LD_DIR, "Couldn't append to journal in %s: %s",
cache->journal_fname, strerror(errno));
- return NULL;
}
}
@@ -227,17 +225,17 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
}
/* Okay, it's a new one. */
- if (f) {
+ if (fd >= 0) {
size_t annotation_len;
- size = dump_microdescriptor(f, md, &annotation_len);
+ size = dump_microdescriptor(fd, md, &annotation_len);
if (size < 0) {
- /* we already warned in dump_microdescriptor; */
+ /* we already warned in dump_microdescriptor */
abort_writing_to_file(open_file);
- smartlist_clear(added);
- return added;
+ fd = -1;
+ } else {
+ md->saved_location = SAVED_IN_JOURNAL;
+ cache->journal_len += size;
}
- md->saved_location = SAVED_IN_JOURNAL;
- cache->journal_len += size;
} else {
md->saved_location = where;
}
@@ -251,8 +249,14 @@ microdescs_add_list_to_cache(microdesc_cache_t *cache,
cache->total_len_seen += md->bodylen;
} SMARTLIST_FOREACH_END(md);
- if (f)
- finish_writing_to_file(open_file); /*XXX Check me.*/
+ if (fd >= 0) {
+ if (finish_writing_to_file(open_file) < 0) {
+ log_warn(LD_DIR, "Error appending to microdescriptor file: %s",
+ strerror(errno));
+ smartlist_clear(added);
+ return added;
+ }
+ }
{
networkstatus_t *ns = networkstatus_get_latest_consensus();
@@ -271,6 +275,7 @@ void
microdesc_cache_clear(microdesc_cache_t *cache)
{
microdesc_t **entry, **next;
+
for (entry = HT_START(microdesc_map, &cache->map); entry; entry = next) {
microdesc_t *md = *entry;
next = HT_NEXT_RMV(microdesc_map, &cache->map, entry);
@@ -279,7 +284,13 @@ microdesc_cache_clear(microdesc_cache_t *cache)
}
HT_CLEAR(microdesc_map, &cache->map);
if (cache->cache_content) {
- tor_munmap_file(cache->cache_content);
+ int res = tor_munmap_file(cache->cache_content);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "tor_munmap_file() failed clearing microdesc cache; "
+ "we are probably about to leak memory.");
+ /* TODO something smarter? */
+ }
cache->cache_content = NULL;
}
cache->total_len_seen = 0;
@@ -323,8 +334,8 @@ microdesc_cache_reload(microdesc_cache_t *cache)
}
tor_free(journal_content);
}
- log_notice(LD_DIR, "Reloaded microdescriptor cache. Found %d descriptors.",
- total);
+ log_info(LD_DIR, "Reloaded microdescriptor cache. Found %d descriptors.",
+ total);
microdesc_cache_rebuild(cache, 0 /* don't force */);
@@ -359,7 +370,9 @@ microdesc_cache_clean(microdesc_cache_t *cache, time_t cutoff, int force)
cutoff = now - TOLERATE_MICRODESC_AGE;
for (mdp = HT_START(microdesc_map, &cache->map); mdp != NULL; ) {
- if ((*mdp)->last_listed < cutoff) {
+ const int is_old = (*mdp)->last_listed < cutoff;
+ const unsigned held_by_nodes = (*mdp)->held_by_nodes;
+ if (is_old && !held_by_nodes) {
++dropped;
victim = *mdp;
mdp = HT_NEXT_RMV(microdesc_map, &cache->map, mdp);
@@ -367,6 +380,57 @@ microdesc_cache_clean(microdesc_cache_t *cache, time_t cutoff, int force)
bytes_dropped += victim->bodylen;
microdesc_free(victim);
} else {
+ if (is_old) {
+ /* It's old, but it has held_by_nodes set. That's not okay. */
+ /* Let's try to diagnose and fix #7164 . */
+ smartlist_t *nodes = nodelist_find_nodes_with_microdesc(*mdp);
+ const networkstatus_t *ns = networkstatus_get_latest_consensus();
+ long networkstatus_age = -1;
+ const int ht_badness = HT_REP_IS_BAD_(microdesc_map, &cache->map);
+ if (ns) {
+ networkstatus_age = now - ns->valid_after;
+ }
+ log_warn(LD_BUG, "Microdescriptor seemed very old "
+ "(last listed %d hours ago vs %d hour cutoff), but is still "
+ "marked as being held by %d node(s). I found %d node(s) "
+ "holding it. Current networkstatus is %ld hours old. "
+ "Hashtable badness is %d.",
+ (int)((now - (*mdp)->last_listed) / 3600),
+ (int)((now - cutoff) / 3600),
+ held_by_nodes,
+ smartlist_len(nodes),
+ networkstatus_age / 3600,
+ ht_badness);
+
+ SMARTLIST_FOREACH_BEGIN(nodes, const node_t *, node) {
+ const char *rs_match = "No RS";
+ const char *rs_present = "";
+ if (node->rs) {
+ if (tor_memeq(node->rs->descriptor_digest,
+ (*mdp)->digest, DIGEST256_LEN)) {
+ rs_match = "Microdesc digest in RS matches";
+ } else {
+ rs_match = "Microdesc digest in RS does match";
+ }
+ if (ns) {
+ /* This should be impossible, but let's see! */
+ rs_present = " RS not present in networkstatus.";
+ SMARTLIST_FOREACH(ns->routerstatus_list, routerstatus_t *,rs, {
+ if (rs == node->rs) {
+ rs_present = " RS okay in networkstatus.";
+ }
+ });
+ }
+ }
+ log_warn(LD_BUG, " [%d]: ID=%s. md=%p, rs=%p, ri=%p. %s.%s",
+ node_sl_idx,
+ hex_str(node->identity, DIGEST_LEN),
+ node->md, node->rs, node->ri, rs_match, rs_present);
+ } SMARTLIST_FOREACH_END(node);
+ smartlist_free(nodes);
+ (*mdp)->last_listed = now;
+ }
+
++kept;
mdp = HT_NEXT(microdesc_map, &cache->map, mdp);
}
@@ -397,6 +461,26 @@ should_rebuild_md_cache(microdesc_cache_t *cache)
return 0;
}
+/**
+ * Mark <b>md</b> as having no body, and release any storage previously held
+ * by its body.
+ */
+static void
+microdesc_wipe_body(microdesc_t *md)
+{
+ if (!md)
+ return;
+
+ if (md->saved_location != SAVED_IN_CACHE)
+ tor_free(md->body);
+
+ md->off = 0;
+ md->saved_location = SAVED_NOWHERE;
+ md->body = NULL;
+ md->bodylen = 0;
+ md->no_save = 1;
+}
+
/** Regenerate the main cache file for <b>cache</b>, clear the journal file,
* and update every microdesc_t in the cache with pointers to its new
* location. If <b>force</b> is true, do this unconditionally. If
@@ -405,11 +489,11 @@ int
microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
{
open_file_t *open_file;
- FILE *f;
+ int fd = -1, res;
microdesc_t **mdp;
smartlist_t *wrote;
ssize_t size;
- off_t off = 0;
+ off_t off = 0, off_real;
int orig_size, new_size;
if (cache == NULL) {
@@ -429,10 +513,10 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
orig_size = (int)(cache->cache_content ? cache->cache_content->size : 0);
orig_size += (int)cache->journal_len;
- f = start_writing_to_stdio_file(cache->cache_fname,
- OPEN_FLAGS_REPLACE|O_BINARY,
- 0600, &open_file);
- if (!f)
+ fd = start_writing_to_file(cache->cache_fname,
+ OPEN_FLAGS_REPLACE|O_BINARY,
+ 0600, &open_file);
+ if (fd < 0)
return -1;
wrote = smartlist_new();
@@ -440,18 +524,29 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
HT_FOREACH(mdp, microdesc_map, &cache->map) {
microdesc_t *md = *mdp;
size_t annotation_len;
- if (md->no_save)
+ if (md->no_save || !md->body)
continue;
- size = dump_microdescriptor(f, md, &annotation_len);
+ size = dump_microdescriptor(fd, md, &annotation_len);
if (size < 0) {
- /* XXX handle errors from dump_microdescriptor() */
- /* log? return -1? die? coredump the universe? */
+ microdesc_wipe_body(md);
+
+ /* rewind, in case it was a partial write. */
+ tor_fd_setpos(fd, off);
continue;
}
tor_assert(((size_t)size) == annotation_len + md->bodylen);
md->off = off + annotation_len;
off += size;
+ off_real = tor_fd_getpos(fd);
+ if (off_real != off) {
+ log_warn(LD_BUG, "Discontinuity in position in microdescriptor cache."
+ "By my count, I'm at "I64_FORMAT
+ ", but I should be at "I64_FORMAT,
+ I64_PRINTF_ARG(off), I64_PRINTF_ARG(off_real));
+ if (off_real >= 0)
+ off = off_real;
+ }
if (md->saved_location != SAVED_IN_CACHE) {
tor_free(md->body);
md->saved_location = SAVED_IN_CACHE;
@@ -459,10 +554,30 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
smartlist_add(wrote, md);
}
- if (cache->cache_content)
- tor_munmap_file(cache->cache_content);
+ /* We must do this unmap _before_ we call finish_writing_to_file(), or
+ * windows will not actually replace the file. */
+ if (cache->cache_content) {
+ res = tor_munmap_file(cache->cache_content);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "Failed to unmap old microdescriptor cache while rebuilding");
+ }
+ cache->cache_content = NULL;
+ }
- finish_writing_to_file(open_file); /*XXX Check me.*/
+ if (finish_writing_to_file(open_file) < 0) {
+ log_warn(LD_DIR, "Error rebuilding microdescriptor cache: %s",
+ strerror(errno));
+ /* Okay. Let's prevent from making things worse elsewhere. */
+ cache->cache_content = NULL;
+ HT_FOREACH(mdp, microdesc_map, &cache->map) {
+ microdesc_t *md = *mdp;
+ if (md->saved_location == SAVED_IN_CACHE) {
+ microdesc_wipe_body(md);
+ }
+ }
+ return -1;
+ }
cache->cache_content = tor_mmap_file(cache->cache_fname);
@@ -478,7 +593,7 @@ microdesc_cache_rebuild(microdesc_cache_t *cache, int force)
if (PREDICT_UNLIKELY(
md->bodylen < 9 || fast_memneq(md->body, "onion-key", 9) != 0)) {
/* XXXX once bug 2022 is solved, we can kill this block and turn it
- * into just the tor_assert(!memcmp) */
+ * into just the tor_assert(fast_memeq) */
off_t avail = cache->cache_content->size - md->off;
char *bad_str;
tor_assert(avail >= 0);
@@ -531,7 +646,7 @@ microdesc_check_counts(void)
/** Deallocate a single microdescriptor. Note: the microdescriptor MUST have
* previously been removed from the cache if it had ever been inserted. */
void
-microdesc_free(microdesc_t *md)
+microdesc_free_(microdesc_t *md, const char *fname, int lineno)
{
if (!md)
return;
@@ -542,18 +657,20 @@ microdesc_free(microdesc_t *md)
microdesc_cache_t *cache = get_microdesc_cache();
microdesc_t *md2 = HT_FIND(microdesc_map, &cache->map, md);
if (md2 == md) {
- log_warn(LD_BUG, "microdesc_free() called, but md was still in "
- "microdesc_map");
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d, but md was still "
+ "in microdesc_map", fname, lineno);
HT_REMOVE(microdesc_map, &cache->map, md);
} else {
- log_warn(LD_BUG, "microdesc_free() called with held_in_map set, but "
- "microdesc was not in the map.");
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d with held_in_map "
+ "set, but microdesc was not in the map.", fname, lineno);
}
tor_fragile_assert();
}
if (md->held_by_nodes) {
+ microdesc_cache_t *cache = get_microdesc_cache();
int found=0;
const smartlist_t *nodes = nodelist_get_list();
+ const int ht_badness = HT_REP_IS_BAD_(microdesc_map, &cache->map);
SMARTLIST_FOREACH(nodes, node_t *, node, {
if (node->md == md) {
++found;
@@ -561,11 +678,14 @@ microdesc_free(microdesc_t *md)
}
});
if (found) {
- log_warn(LD_BUG, "microdesc_free() called, but md was still referenced "
- "%d node(s); held_by_nodes == %u", found, md->held_by_nodes);
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d, but md was still "
+ "referenced %d node(s); held_by_nodes == %u, ht_badness == %d",
+ fname, lineno, found, md->held_by_nodes, ht_badness);
} else {
- log_warn(LD_BUG, "microdesc_free() called with held_by_nodes set to %u, "
- "but md was not referenced by any nodes", md->held_by_nodes);
+ log_warn(LD_BUG, "microdesc_free() called from %s:%d with held_by_nodes "
+ "set to %u, but md was not referenced by any nodes. "
+ "ht_badness == %d",
+ fname, lineno, md->held_by_nodes, ht_badness);
}
tor_fragile_assert();
}
@@ -574,6 +694,7 @@ microdesc_free(microdesc_t *md)
if (md->onion_pkey)
crypto_pk_free(md->onion_pkey);
+ tor_free(md->onion_curve25519_pkey);
if (md->body && md->saved_location != SAVED_IN_CACHE)
tor_free(md->body);
@@ -582,6 +703,7 @@ microdesc_free(microdesc_t *md)
smartlist_free(md->family);
}
short_policy_free(md->exit_policy);
+ short_policy_free(md->ipv6_exit_policy);
tor_free(md);
}
@@ -639,7 +761,7 @@ microdesc_list_missing_digest256(networkstatus_t *ns, microdesc_cache_t *cache,
continue;
if (downloadable_only &&
!download_status_is_ready(&rs->dl_status, now,
- MAX_MICRODESC_DOWNLOAD_FAILURES))
+ get_options()->TestingMicrodescMaxDownloadTries))
continue;
if (skip && digestmap_get(skip, rs->descriptor_digest))
continue;
@@ -668,7 +790,7 @@ update_microdesc_downloads(time_t now)
smartlist_t *missing;
digestmap_t *pending;
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
if (directory_too_idle_to_fetch_descriptors(options, now))
return;
@@ -727,9 +849,9 @@ we_use_microdescriptors_for_circuits(const or_options_t *options)
int ret = options->UseMicrodescriptors;
if (ret == -1) {
/* UseMicrodescriptors is "auto"; we need to decide: */
- /* If we are configured to use bridges and one of our bridges doesn't
+ /* If we are configured to use bridges and none of our bridges
* know what a microdescriptor is, the answer is no. */
- if (options->UseBridges && any_bridges_dont_support_microdescriptors())
+ if (options->UseBridges && !any_bridge_supports_microdescriptors())
return 0;
/* Otherwise, we decide that we'll use microdescriptors iff we are
* not a server, and we're not autofetching everything. */
diff --git a/src/or/microdesc.h b/src/or/microdesc.h
index 5646fc7a8..7adb8c68a 100644
--- a/src/or/microdesc.h
+++ b/src/or/microdesc.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for microdesc.c.
**/
-#ifndef _TOR_MICRODESC_H
-#define _TOR_MICRODESC_H
+#ifndef TOR_MICRODESC_H
+#define TOR_MICRODESC_H
microdesc_cache_t *get_microdesc_cache(void);
@@ -39,7 +39,9 @@ smartlist_t *microdesc_list_missing_digest256(networkstatus_t *ns,
int downloadable_only,
digestmap_t *skip);
-void microdesc_free(microdesc_t *md);
+void microdesc_free_(microdesc_t *md, const char *fname, int line);
+#define microdesc_free(md) \
+ microdesc_free_((md), __FILE__, __LINE__)
void microdesc_free_all(void);
void update_microdesc_downloads(time_t now);
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 2553a74e5..890da0ad1 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,8 +10,12 @@
* client or cache.
*/
+#define NETWORKSTATUS_PRIVATE
#include "or.h"
-#include "circuitbuild.h"
+#include "channel.h"
+#include "circuitmux.h"
+#include "circuitmux_ewma.h"
+#include "circuitstats.h"
#include "config.h"
#include "connection.h"
#include "connection_or.h"
@@ -19,6 +23,7 @@
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "entrynodes.h"
#include "main.h"
#include "microdesc.h"
#include "networkstatus.h"
@@ -27,18 +32,7 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
-
-/* For tracking v2 networkstatus documents. Only caches do this now. */
-
-/** Map from descriptor digest of routers listed in the v2 networkstatus
- * documents to download_status_t* */
-static digestmap_t *v2_download_status_map = NULL;
-/** Global list of all of the current v2 network_status documents that we know
- * about. This list is kept sorted by published_on. */
-static smartlist_t *networkstatus_v2_list = NULL;
-/** True iff any member of networkstatus_v2_list has changed since the last
- * time we called download_status_map_update_from_v2_networkstatus() */
-static int networkstatus_v2_list_has_changed = 0;
+#include "transports.h"
/** Map from lowercase nickname to identity digest of named server, if any. */
static strmap_t *named_server_map = NULL;
@@ -84,11 +78,6 @@ typedef struct consensus_waiting_for_certs_t {
static consensus_waiting_for_certs_t
consensus_waiting_for_certs[N_CONSENSUS_FLAVORS];
-/** The last time we tried to download a networkstatus, or 0 for "never". We
- * use this to rate-limit download attempts for directory caches (including
- * mirrors). Clients don't use this now. */
-static time_t last_networkstatus_download_attempted = 0;
-
/** A time before which we shouldn't try to replace the current consensus:
* this will be at some point after the next consensus becomes valid, but
* before the current consensus becomes invalid. */
@@ -103,7 +92,6 @@ static int have_warned_about_old_version = 0;
* listed by the authorities. */
static int have_warned_about_new_version = 0;
-static void download_status_map_update_from_v2_networkstatus(void);
static void routerstatus_list_update_named_server_map(void);
/** Forget that we've warned about anything networkstatus-related, so we will
@@ -127,86 +115,9 @@ void
networkstatus_reset_download_failures(void)
{
int i;
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) {
- if (!router_get_by_descriptor_digest(rs->descriptor_digest))
- rs->need_to_mirror = 1;
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
for (i=0; i < N_CONSENSUS_FLAVORS; ++i)
download_status_reset(&consensus_dl_status[i]);
- if (v2_download_status_map) {
- digestmap_iter_t *iter;
- digestmap_t *map = v2_download_status_map;
- const char *key;
- void *val;
- download_status_t *dls;
- for (iter = digestmap_iter_init(map); !digestmap_iter_done(iter);
- iter = digestmap_iter_next(map, iter) ) {
- digestmap_iter_get(iter, &key, &val);
- dls = val;
- download_status_reset(dls);
- }
- }
-}
-
-/** Repopulate our list of network_status_t objects from the list cached on
- * disk. Return 0 on success, -1 on failure. */
-int
-router_reload_v2_networkstatus(void)
-{
- smartlist_t *entries;
- struct stat st;
- char *s;
- char *filename = get_datadir_fname("cached-status");
- int maybe_delete = !directory_caches_v2_dir_info(get_options());
- time_t now = time(NULL);
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
-
- entries = tor_listdir(filename);
- if (!entries) { /* dir doesn't exist */
- tor_free(filename);
- return 0;
- } else if (!smartlist_len(entries) && maybe_delete) {
- rmdir(filename);
- tor_free(filename);
- smartlist_free(entries);
- return 0;
- }
- tor_free(filename);
- SMARTLIST_FOREACH_BEGIN(entries, const char *, fn) {
- char buf[DIGEST_LEN];
- if (maybe_delete) {
- filename = get_datadir_fname2("cached-status", fn);
- remove_file_if_very_old(filename, now);
- tor_free(filename);
- continue;
- }
- if (strlen(fn) != HEX_DIGEST_LEN ||
- base16_decode(buf, sizeof(buf), fn, strlen(fn))) {
- log_info(LD_DIR,
- "Skipping cached-status file with unexpected name \"%s\"",fn);
- continue;
- }
- filename = get_datadir_fname2("cached-status", fn);
- s = read_file_to_str(filename, 0, &st);
- if (s) {
- if (router_set_networkstatus_v2(s, st.st_mtime, NS_FROM_CACHE,
- NULL)<0) {
- log_warn(LD_FS, "Couldn't load networkstatus from \"%s\"",filename);
- }
- tor_free(s);
- }
- tor_free(filename);
- } SMARTLIST_FOREACH_END(fn);
- SMARTLIST_FOREACH(entries, char *, fn, tor_free(fn));
- smartlist_free(entries);
- networkstatus_v2_list_clean(time(NULL));
- routers_update_all_from_networkstatus(time(NULL), 2);
- return 0;
}
/** Read every cached v3 consensus networkstatus from the disk. */
@@ -215,8 +126,6 @@ router_reload_consensus_networkstatus(void)
{
char *filename;
char *s;
- struct stat st;
- const or_options_t *options = get_options();
const unsigned int flags = NSSET_FROM_CACHE | NSSET_DONT_DOWNLOAD_CERTS;
int flav;
@@ -259,25 +168,6 @@ router_reload_consensus_networkstatus(void)
tor_free(filename);
}
- if (!current_consensus ||
- (stat(options->FallbackNetworkstatusFile, &st)==0 &&
- st.st_mtime > current_consensus->valid_after)) {
- s = read_file_to_str(options->FallbackNetworkstatusFile,
- RFTS_IGNORE_MISSING, NULL);
- if (s) {
- if (networkstatus_set_current_consensus(s, "ns",
- flags|NSSET_ACCEPT_OBSOLETE)) {
- log_info(LD_FS, "Couldn't load consensus networkstatus from \"%s\"",
- options->FallbackNetworkstatusFile);
- } else {
- log_notice(LD_FS,
- "Loaded fallback consensus networkstatus from \"%s\"",
- options->FallbackNetworkstatusFile);
- }
- tor_free(s);
- }
- }
-
if (!current_consensus) {
if (!named_server_map)
named_server_map = strmap_new();
@@ -294,7 +184,7 @@ router_reload_consensus_networkstatus(void)
}
/** Free all storage held by the vote_routerstatus object <b>rs</b>. */
-static void
+STATIC void
vote_routerstatus_free(vote_routerstatus_t *rs)
{
vote_microdesc_hash_t *h, *next;
@@ -320,26 +210,6 @@ routerstatus_free(routerstatus_t *rs)
tor_free(rs);
}
-/** Free all storage held by the networkstatus object <b>ns</b>. */
-void
-networkstatus_v2_free(networkstatus_v2_t *ns)
-{
- if (!ns)
- return;
- tor_free(ns->source_address);
- tor_free(ns->contact);
- if (ns->signing_key)
- crypto_pk_free(ns->signing_key);
- tor_free(ns->client_versions);
- tor_free(ns->server_versions);
- if (ns->entries) {
- SMARTLIST_FOREACH(ns->entries, routerstatus_t *, rs,
- routerstatus_free(rs));
- smartlist_free(ns->entries);
- }
- tor_free(ns);
-}
-
/** Free all storage held in <b>sig</b> */
void
document_signature_free(document_signature_t *sig)
@@ -453,6 +323,17 @@ networkstatus_check_document_signature(const networkstatus_t *consensus,
DIGEST_LEN))
return -1;
+ if (authority_cert_is_blacklisted(cert)) {
+ /* We implement blacklisting for authority signing keys by treating
+ * all their signatures as always bad. That way we don't get into
+ * crazy loops of dropping and re-fetching signatures. */
+ log_warn(LD_DIR, "Ignoring a consensus signature made with deprecated"
+ " signing key %s",
+ hex_str(cert->signing_key_digest, DIGEST_LEN));
+ sig->bad_signature = 1;
+ return 0;
+ }
+
signed_digest_len = crypto_pk_keysize(cert->signing_key);
signed_digest = tor_malloc(signed_digest_len);
if (crypto_pk_public_checksig(cert->signing_key,
@@ -561,7 +442,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
/* Now see whether we're missing any voters entirely. */
SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
- trusted_dir_server_t *, ds,
+ dir_server_t *, ds,
{
if ((ds->type & V3_DIRINFO) &&
!networkstatus_get_voter_by_id(consensus, ds->v3_identity_digest))
@@ -578,7 +459,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
if (warn >= 0) {
SMARTLIST_FOREACH(unrecognized, networkstatus_voter_info_t *, voter,
{
- log(severity, LD_DIR, "Consensus includes unrecognized authority "
+ tor_log(severity, LD_DIR, "Consensus includes unrecognized authority "
"'%s' at %s:%d (contact %s; identity %s)",
voter->nickname, voter->address, (int)voter->dir_port,
voter->contact?voter->contact:"n/a",
@@ -586,16 +467,16 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
});
SMARTLIST_FOREACH(need_certs_from, networkstatus_voter_info_t *, voter,
{
- log(severity, LD_DIR, "Looks like we need to download a new "
+ tor_log(severity, LD_DIR, "Looks like we need to download a new "
"certificate from authority '%s' at %s:%d (contact %s; "
"identity %s)",
voter->nickname, voter->address, (int)voter->dir_port,
voter->contact?voter->contact:"n/a",
hex_str(voter->identity_digest, DIGEST_LEN));
});
- SMARTLIST_FOREACH(missing_authorities, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(missing_authorities, dir_server_t *, ds,
{
- log(severity, LD_DIR, "Consensus does not include configured "
+ tor_log(severity, LD_DIR, "Consensus does not include configured "
"authority '%s' at %s:%d (identity %s)",
ds->nickname, ds->address, (int)ds->dir_port,
hex_str(ds->v3_identity_digest, DIGEST_LEN));
@@ -631,7 +512,7 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
"because we were missing the keys.", n_missing_key);
}
joined = smartlist_join_strings(sl, " ", 0, NULL);
- log(severity, LD_DIR, "%s", joined);
+ tor_log(severity, LD_DIR, "%s", joined);
tor_free(joined);
SMARTLIST_FOREACH(sl, char *, c, tor_free(c));
smartlist_free(sl);
@@ -654,296 +535,10 @@ networkstatus_check_consensus_signature(networkstatus_t *consensus,
return -2;
}
-/** Helper: return a newly allocated string containing the name of the filename
- * where we plan to cache the network status with the given identity digest. */
-char *
-networkstatus_get_cache_filename(const char *identity_digest)
-{
- char fp[HEX_DIGEST_LEN+1];
- base16_encode(fp, HEX_DIGEST_LEN+1, identity_digest, DIGEST_LEN);
- return get_datadir_fname2("cached-status", fp);
-}
-
-/** Helper for smartlist_sort: Compare two networkstatus objects by
- * publication date. */
-static int
-_compare_networkstatus_v2_published_on(const void **_a, const void **_b)
-{
- const networkstatus_v2_t *a = *_a, *b = *_b;
- if (a->published_on < b->published_on)
- return -1;
- else if (a->published_on > b->published_on)
- return 1;
- else
- return 0;
-}
-
-/** Add the parsed v2 networkstatus in <b>ns</b> (with original document in
- * <b>s</b>) to the disk cache (and the in-memory directory server cache) as
- * appropriate. */
-static int
-add_networkstatus_to_cache(const char *s,
- v2_networkstatus_source_t source,
- networkstatus_v2_t *ns)
-{
- if (source != NS_FROM_CACHE) {
- char *fn = networkstatus_get_cache_filename(ns->identity_digest);
- if (write_str_to_file(fn, s, 0)<0) {
- log_notice(LD_FS, "Couldn't write cached network status to \"%s\"", fn);
- }
- tor_free(fn);
- }
-
- if (directory_caches_v2_dir_info(get_options()))
- dirserv_set_cached_networkstatus_v2(s,
- ns->identity_digest,
- ns->published_on);
-
- return 0;
-}
-
/** How far in the future do we allow a network-status to get before removing
* it? (seconds) */
#define NETWORKSTATUS_ALLOW_SKEW (24*60*60)
-/** Given a string <b>s</b> containing a network status that we received at
- * <b>arrived_at</b> from <b>source</b>, try to parse it, see if we want to
- * store it, and put it into our cache as necessary.
- *
- * If <b>source</b> is NS_FROM_DIR or NS_FROM_CACHE, do not replace our
- * own networkstatus_t (if we're an authoritative directory server).
- *
- * If <b>source</b> is NS_FROM_CACHE, do not write our networkstatus_t to the
- * cache.
- *
- * If <b>requested_fingerprints</b> is provided, it must contain a list of
- * uppercased identity fingerprints. Do not update any networkstatus whose
- * fingerprint is not on the list; after updating a networkstatus, remove its
- * fingerprint from the list.
- *
- * Return 0 on success, -1 on failure.
- *
- * Callers should make sure that routers_update_all_from_networkstatus() is
- * invoked after this function succeeds.
- */
-int
-router_set_networkstatus_v2(const char *s, time_t arrived_at,
- v2_networkstatus_source_t source,
- smartlist_t *requested_fingerprints)
-{
- networkstatus_v2_t *ns;
- int i, found;
- time_t now;
- int skewed = 0;
- trusted_dir_server_t *trusted_dir = NULL;
- const char *source_desc = NULL;
- char fp[HEX_DIGEST_LEN+1];
- char published[ISO_TIME_LEN+1];
-
- if (!directory_caches_v2_dir_info(get_options()))
- return 0; /* Don't bother storing it. */
-
- ns = networkstatus_v2_parse_from_string(s);
- if (!ns) {
- log_warn(LD_DIR, "Couldn't parse network status.");
- return -1;
- }
- base16_encode(fp, HEX_DIGEST_LEN+1, ns->identity_digest, DIGEST_LEN);
- if (!(trusted_dir =
- router_get_trusteddirserver_by_digest(ns->identity_digest)) ||
- !(trusted_dir->type & V2_DIRINFO)) {
- log_info(LD_DIR, "Network status was signed, but not by an authoritative "
- "directory we recognize.");
- source_desc = fp;
- } else {
- source_desc = trusted_dir->description;
- }
- now = time(NULL);
- if (arrived_at > now)
- arrived_at = now;
-
- ns->received_on = arrived_at;
-
- format_iso_time(published, ns->published_on);
-
- if (ns->published_on > now + NETWORKSTATUS_ALLOW_SKEW) {
- char dbuf[64];
- long delta = now - ns->published_on;
- format_time_interval(dbuf, sizeof(dbuf), delta);
- log_warn(LD_GENERAL, "Network status from %s was published %s in the "
- "future (%s GMT). Check your time and date settings! "
- "Not caching.",
- source_desc, dbuf, published);
- control_event_general_status(LOG_WARN,
- "CLOCK_SKEW MIN_SKEW=%ld SOURCE=NETWORKSTATUS:%s:%d",
- delta, ns->source_address, ns->source_dirport);
- skewed = 1;
- }
-
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
-
- if ( (source == NS_FROM_DIR_BY_FP || source == NS_FROM_DIR_ALL) &&
- router_digest_is_me(ns->identity_digest)) {
- /* Don't replace our own networkstatus when we get it from somebody else.*/
- networkstatus_v2_free(ns);
- return 0;
- }
-
- if (requested_fingerprints) {
- if (smartlist_string_isin(requested_fingerprints, fp)) {
- smartlist_string_remove(requested_fingerprints, fp);
- } else {
- if (source != NS_FROM_DIR_ALL) {
- char *requested =
- smartlist_join_strings(requested_fingerprints," ",0,NULL);
- log_warn(LD_DIR,
- "We received a network status with a fingerprint (%s) that we "
- "never requested. (We asked for: %s.) Dropping.",
- fp, requested);
- tor_free(requested);
- return 0;
- }
- }
- }
-
- if (!trusted_dir) {
- if (!skewed) {
- /* We got a non-trusted networkstatus, and we're a directory cache.
- * This means that we asked an authority, and it told us about another
- * authority we didn't recognize. */
- log_info(LD_DIR,
- "We do not recognize authority (%s) but we are willing "
- "to cache it.", fp);
- add_networkstatus_to_cache(s, source, ns);
- networkstatus_v2_free(ns);
- }
- return 0;
- }
-
- found = 0;
- for (i=0; i < smartlist_len(networkstatus_v2_list); ++i) {
- networkstatus_v2_t *old_ns = smartlist_get(networkstatus_v2_list, i);
-
- if (tor_memeq(old_ns->identity_digest, ns->identity_digest, DIGEST_LEN)) {
- if (tor_memeq(old_ns->networkstatus_digest,
- ns->networkstatus_digest, DIGEST_LEN)) {
- /* Same one we had before. */
- networkstatus_v2_free(ns);
- tor_assert(trusted_dir);
- log_info(LD_DIR,
- "Not replacing network-status from %s (published %s); "
- "we already have it.",
- trusted_dir->description, published);
- if (old_ns->received_on < arrived_at) {
- if (source != NS_FROM_CACHE) {
- char *fn;
- fn = networkstatus_get_cache_filename(old_ns->identity_digest);
- /* We use mtime to tell when it arrived, so update that. */
- touch_file(fn);
- tor_free(fn);
- }
- old_ns->received_on = arrived_at;
- }
- download_status_failed(&trusted_dir->v2_ns_dl_status, 0);
- return 0;
- } else if (old_ns->published_on >= ns->published_on) {
- char old_published[ISO_TIME_LEN+1];
- format_iso_time(old_published, old_ns->published_on);
- tor_assert(trusted_dir);
- log_info(LD_DIR,
- "Not replacing network-status from %s (published %s);"
- " we have a newer one (published %s) for this authority.",
- trusted_dir->description, published,
- old_published);
- networkstatus_v2_free(ns);
- download_status_failed(&trusted_dir->v2_ns_dl_status, 0);
- return 0;
- } else {
- networkstatus_v2_free(old_ns);
- smartlist_set(networkstatus_v2_list, i, ns);
- found = 1;
- break;
- }
- }
- }
-
- if (source != NS_FROM_CACHE && trusted_dir) {
- download_status_reset(&trusted_dir->v2_ns_dl_status);
- }
-
- if (!found)
- smartlist_add(networkstatus_v2_list, ns);
-
-/** Retain any routerinfo mentioned in a V2 networkstatus for at least this
- * long. */
-#define V2_NETWORKSTATUS_ROUTER_LIFETIME (3*60*60)
-
- {
- time_t live_until = ns->published_on + V2_NETWORKSTATUS_ROUTER_LIFETIME;
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) {
- signed_descriptor_t *sd =
- router_get_by_descriptor_digest(rs->descriptor_digest);
- if (sd) {
- if (sd->last_listed_as_valid_until < live_until)
- sd->last_listed_as_valid_until = live_until;
- } else {
- rs->need_to_mirror = 1;
- }
- } SMARTLIST_FOREACH_END(rs);
- }
-
- log_info(LD_DIR, "Setting networkstatus %s %s (published %s)",
- source == NS_FROM_CACHE?"cached from":
- ((source == NS_FROM_DIR_BY_FP || source == NS_FROM_DIR_ALL) ?
- "downloaded from":"generated for"),
- trusted_dir->description, published);
- networkstatus_v2_list_has_changed = 1;
-
- smartlist_sort(networkstatus_v2_list,
- _compare_networkstatus_v2_published_on);
-
- if (!skewed)
- add_networkstatus_to_cache(s, source, ns);
-
- return 0;
-}
-
-/** Remove all very-old network_status_t objects from memory and from the
- * disk cache. */
-void
-networkstatus_v2_list_clean(time_t now)
-{
- int i;
- if (!networkstatus_v2_list)
- return;
-
- for (i = 0; i < smartlist_len(networkstatus_v2_list); ++i) {
- networkstatus_v2_t *ns = smartlist_get(networkstatus_v2_list, i);
- char *fname = NULL;
- if (ns->published_on + MAX_NETWORKSTATUS_AGE > now)
- continue;
- /* Okay, this one is too old. Remove it from the list, and delete it
- * from the cache. */
- smartlist_del(networkstatus_v2_list, i--);
- fname = networkstatus_get_cache_filename(ns->identity_digest);
- if (file_status(fname) == FN_FILE) {
- log_info(LD_DIR, "Removing too-old networkstatus in %s", fname);
- unlink(fname);
- }
- tor_free(fname);
- if (directory_caches_v2_dir_info(get_options())) {
- dirserv_set_cached_networkstatus_v2(NULL, ns->identity_digest, 0);
- }
- networkstatus_v2_free(ns);
- }
-
- /* And now go through the directory cache for any cached untrusted
- * networkstatuses and other network info. */
- dirserv_clear_old_networkstatuses(now - MAX_NETWORKSTATUS_AGE);
- dirserv_clear_old_v1_info(now);
-}
-
/** Helper for bsearching a list of routerstatus_t pointers: compare a
* digest in the key to the identity digest of a routerstatus_t. */
int
@@ -954,20 +549,15 @@ compare_digest_to_routerstatus_entry(const void *_key, const void **_member)
return tor_memcmp(key, rs->identity_digest, DIGEST_LEN);
}
-/** As networkstatus_v2_find_entry, but do not return a const pointer */
-routerstatus_t *
-networkstatus_v2_find_mutable_entry(networkstatus_v2_t *ns, const char *digest)
-{
- return smartlist_bsearch(ns->entries, digest,
- compare_digest_to_routerstatus_entry);
-}
-
-/** Return the entry in <b>ns</b> for the identity digest <b>digest</b>, or
- * NULL if none was found. */
-const routerstatus_t *
-networkstatus_v2_find_entry(networkstatus_v2_t *ns, const char *digest)
+/** Helper for bsearching a list of routerstatus_t pointers: compare a
+ * digest in the key to the identity digest of a routerstatus_t. */
+int
+compare_digest_to_vote_routerstatus_entry(const void *_key,
+ const void **_member)
{
- return networkstatus_v2_find_mutable_entry(ns, digest);
+ const char *key = _key;
+ const vote_routerstatus_t *vrs = *_member;
+ return tor_memcmp(key, vrs->status.identity_digest, DIGEST_LEN);
}
/** As networkstatus_find_entry, but do not return a const pointer */
@@ -999,15 +589,6 @@ networkstatus_vote_find_entry_idx(networkstatus_t *ns,
found_out);
}
-/** Return a list of the v2 networkstatus documents. */
-const smartlist_t *
-networkstatus_get_v2_list(void)
-{
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
- return networkstatus_v2_list;
-}
-
/** As router_get_consensus_status_by_descriptor_digest, but does not return
* a const pointer. */
routerstatus_t *
@@ -1052,8 +633,6 @@ router_get_dl_status_by_descriptor_digest(const char *d)
if ((rs = router_get_mutable_consensus_status_by_descriptor_digest(
current_ns_consensus, d)))
return &rs->dl_status;
- if (v2_download_status_map)
- return digestmap_get(v2_download_status_map, d);
return NULL;
}
@@ -1119,72 +698,6 @@ networkstatus_nickname_is_unnamed(const char *nickname)
* networkstatus documents? */
#define NONAUTHORITY_NS_CACHE_INTERVAL (60*60)
-/** We are a directory server, and so cache network_status documents.
- * Initiate downloads as needed to update them. For v2 authorities,
- * this means asking each trusted directory for its network-status.
- * For caches, this means asking a random v2 authority for all
- * network-statuses.
- */
-static void
-update_v2_networkstatus_cache_downloads(time_t now)
-{
- int authority = authdir_mode_v2(get_options());
- int interval =
- authority ? AUTHORITY_NS_CACHE_INTERVAL : NONAUTHORITY_NS_CACHE_INTERVAL;
- const smartlist_t *trusted_dir_servers = router_get_trusted_dir_servers();
-
- if (last_networkstatus_download_attempted + interval >= now)
- return;
-
- last_networkstatus_download_attempted = now;
-
- if (authority) {
- /* An authority launches a separate connection for everybody. */
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, ds)
- {
- char resource[HEX_DIGEST_LEN+6]; /* fp/hexdigit.z\0 */
- tor_addr_t addr;
- if (!(ds->type & V2_DIRINFO))
- continue;
- if (router_digest_is_me(ds->digest))
- continue;
- tor_addr_from_ipv4h(&addr, ds->addr);
- /* Is this quite sensible with IPv6 or multiple addresses? */
- if (connection_get_by_type_addr_port_purpose(
- CONN_TYPE_DIR, &addr, ds->dir_port,
- DIR_PURPOSE_FETCH_V2_NETWORKSTATUS)) {
- /* XXX the above dir_port won't be accurate if we're
- * doing a tunneled conn. In that case it should be or_port.
- * How to guess from here? Maybe make the function less general
- * and have it know that it's looking for dir conns. -RD */
- /* Only directory caches download v2 networkstatuses, and they
- * don't use tunneled connections. I think it's okay to ignore
- * this. */
- continue;
- }
- strlcpy(resource, "fp/", sizeof(resource));
- base16_encode(resource+3, sizeof(resource)-3, ds->digest, DIGEST_LEN);
- strlcat(resource, ".z", sizeof(resource));
- directory_initiate_command_routerstatus(
- &ds->fake_status, DIR_PURPOSE_FETCH_V2_NETWORKSTATUS,
- ROUTER_PURPOSE_GENERAL,
- 0, /* Not private */
- resource,
- NULL, 0 /* No payload. */,
- 0 /* No I-M-S. */);
- }
- SMARTLIST_FOREACH_END(ds);
- } else {
- /* A non-authority cache launches one connection to a random authority. */
- /* (Check whether we're currently fetching network-status objects.) */
- if (!connection_get_by_type_purpose(CONN_TYPE_DIR,
- DIR_PURPOSE_FETCH_V2_NETWORKSTATUS))
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_V2_NETWORKSTATUS,
- ROUTER_PURPOSE_GENERAL, "all.z",
- PDS_RETRY_IF_NO_SERVERS);
- }
-}
-
/** Return true iff, given the options listed in <b>options</b>, <b>flavor</b>
* is the flavor of a consensus networkstatus that we would like to fetch. */
static int
@@ -1209,8 +722,6 @@ we_want_to_fetch_flavor(const or_options_t *options, int flavor)
return flavor == usable_consensus_flavor();
}
-/** How many times will we try to fetch a consensus before we give up? */
-#define CONSENSUS_NETWORKSTATUS_MAX_DL_TRIES 8
/** How long will we hang onto a possibly live consensus for which we're
* fetching certs before we check whether there is a better one? */
#define DELAY_WHILE_FETCHING_CERTS (20*60)
@@ -1239,12 +750,12 @@ update_consensus_networkstatus_downloads(time_t now)
}
if (time_to_download_next_consensus[i] > now)
- return; /* Wait until the current consensus is older. */
+ continue; /* Wait until the current consensus is older. */
resource = networkstatus_get_flavor_name(i);
if (!download_status_is_ready(&consensus_dl_status[i], now,
- CONSENSUS_NETWORKSTATUS_MAX_DL_TRIES))
+ options->TestingConsensusMaxDownloadTries))
continue; /* We failed downloading a consensus too recently. */
if (connection_dir_get_by_purpose_and_resource(
DIR_PURPOSE_FETCH_CONSENSUS, resource))
@@ -1319,7 +830,7 @@ update_consensus_networkstatus_fetch_time_impl(time_t now, int flav)
if (directory_fetches_dir_info_early(options)) {
/* We want to cache the next one at some point after this one
* is no longer fresh... */
- start = c->fresh_until + min_sec_before_caching;
+ start = (time_t)(c->fresh_until + min_sec_before_caching);
/* Some clients may need the consensus sooner than others. */
if (options->FetchDirInfoExtraEarly || authdir_mode_v3(options)) {
dl_interval = 60;
@@ -1332,7 +843,7 @@ update_consensus_networkstatus_fetch_time_impl(time_t now, int flav)
} else {
/* We're an ordinary client or a bridge. Give all the caches enough
* time to download the consensus. */
- start = c->fresh_until + (interval*3)/4;
+ start = (time_t)(c->fresh_until + (interval*3)/4);
/* But download the next one well before this one is expired. */
dl_interval = ((c->valid_until - start) * 7 )/ 8;
@@ -1340,7 +851,7 @@ update_consensus_networkstatus_fetch_time_impl(time_t now, int flav)
* to choose the rest of the interval *after* them. */
if (directory_fetches_dir_info_later(options)) {
/* Give all the *clients* enough time to download the consensus. */
- start = start + dl_interval + min_sec_before_caching;
+ start = (time_t)(start + dl_interval + min_sec_before_caching);
/* But try to get it before ours actually expires. */
dl_interval = (c->valid_until - start) - min_sec_before_caching;
}
@@ -1386,14 +897,45 @@ update_consensus_networkstatus_fetch_time(time_t now)
/** Return 1 if there's a reason we shouldn't try any directory
* fetches yet (e.g. we demand bridges and none are yet known).
- * Else return 0. */
+ * Else return 0.
+
+ * If we return 1 and <b>msg_out</b> is provided, set <b>msg_out</b>
+ * to an explanation of why directory fetches are delayed. (If we
+ * return 0, we set msg_out to NULL.)
+ */
int
-should_delay_dir_fetches(const or_options_t *options)
+should_delay_dir_fetches(const or_options_t *options, const char **msg_out)
{
- if (options->UseBridges && !any_bridge_descriptors_known()) {
- log_info(LD_DIR, "delaying dir fetches (no running bridges known)");
+ if (msg_out) {
+ *msg_out = NULL;
+ }
+
+ if (options->DisableNetwork) {
+ if (msg_out) {
+ *msg_out = "DisableNetwork is set.";
+ }
+ log_info(LD_DIR, "Delaying dir fetches (DisableNetwork is set)");
return 1;
}
+
+ if (options->UseBridges) {
+ if (!any_bridge_descriptors_known()) {
+ if (msg_out) {
+ *msg_out = "No running bridges";
+ }
+ log_info(LD_DIR, "Delaying dir fetches (no running bridges known)");
+ return 1;
+ }
+
+ if (pt_proxies_configuration_pending()) {
+ if (msg_out) {
+ *msg_out = "Pluggable transport proxies still configuring";
+ }
+ log_info(LD_DIR, "Delaying dir fetches (pt proxies still configuring)");
+ return 1;
+ }
+ }
+
return 0;
}
@@ -1403,10 +945,8 @@ void
update_networkstatus_downloads(time_t now)
{
const or_options_t *options = get_options();
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
- if (authdir_mode_any_main(options) || options->FetchV2Networkstatus)
- update_v2_networkstatus_cache_downloads(now);
update_consensus_networkstatus_downloads(now);
update_certificate_downloads(now);
}
@@ -1438,18 +978,6 @@ consensus_is_waiting_for_certs(void)
? 1 : 0;
}
-/** Return the network status with a given identity digest. */
-networkstatus_v2_t *
-networkstatus_v2_get_by_digest(const char *digest)
-{
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- {
- if (tor_memeq(ns->identity_digest, digest, DIGEST_LEN))
- return ns;
- });
- return NULL;
-}
-
/** Return the most recent consensus that we have downloaded, or NULL if we
* don't have one. */
networkstatus_t *
@@ -1525,18 +1053,11 @@ routerstatus_has_changed(const routerstatus_t *a, const routerstatus_t *b)
a->is_named != b->is_named ||
a->is_unnamed != b->is_unnamed ||
a->is_valid != b->is_valid ||
- a->is_v2_dir != b->is_v2_dir ||
a->is_possible_guard != b->is_possible_guard ||
a->is_bad_exit != b->is_bad_exit ||
a->is_bad_directory != b->is_bad_directory ||
a->is_hs_dir != b->is_hs_dir ||
- a->version_known != b->version_known ||
- a->version_supports_begindir != b->version_supports_begindir ||
- a->version_supports_extrainfo_upload !=
- b->version_supports_extrainfo_upload ||
- a->version_supports_conditional_consensus !=
- b->version_supports_conditional_consensus ||
- a->version_supports_v3_dir != b->version_supports_v3_dir;
+ a->version_known != b->version_known;
}
/** Notify controllers of any router status entries that changed between
@@ -1640,6 +1161,7 @@ networkstatus_set_current_consensus(const char *consensus,
consensus_waiting_for_certs_t *waiting = NULL;
time_t current_valid_after = 0;
int free_consensus = 1; /* Free 'c' at the end of the function */
+ int old_ewma_enabled;
if (flav < 0) {
/* XXXX we don't handle unrecognized flavors yet. */
@@ -1675,9 +1197,6 @@ networkstatus_set_current_consensus(const char *consensus,
if (from_cache && !accept_obsolete &&
c->valid_until < now-OLD_ROUTER_DESC_MAX_AGE) {
- /* XXXX If we try to make fallbackconsensus work again, we should
- * consider taking this out. Until then, believing obsolete consensuses
- * is causing more harm than good. See also bug 887. */
log_info(LD_DIR, "Loaded an expired consensus. Discarding.");
goto done;
}
@@ -1755,7 +1274,11 @@ networkstatus_set_current_consensus(const char *consensus,
/* Even if we had enough signatures, we'd never use this as the
* latest consensus. */
if (was_waiting_for_certs && from_cache)
- unlink(unverified_fname);
+ if (unlink(unverified_fname) != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ unverified_fname, strerror(errno));
+ }
}
goto done;
} else {
@@ -1765,8 +1288,13 @@ networkstatus_set_current_consensus(const char *consensus,
"consensus");
result = -2;
}
- if (was_waiting_for_certs && (r < -1) && from_cache)
- unlink(unverified_fname);
+ if (was_waiting_for_certs && (r < -1) && from_cache) {
+ if (unlink(unverified_fname) != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ unverified_fname, strerror(errno));
+ }
+ }
goto done;
}
}
@@ -1814,7 +1342,11 @@ networkstatus_set_current_consensus(const char *consensus,
waiting->body = NULL;
waiting->set_at = 0;
waiting->dl_failed = 0;
- unlink(unverified_fname);
+ if (unlink(unverified_fname) != 0) {
+ log_warn(LD_FS,
+ "Failed to unlink %s: %s",
+ unverified_fname, strerror(errno));
+ }
}
/* Reset the failure count only if this consensus is actually valid. */
@@ -1833,13 +1365,25 @@ networkstatus_set_current_consensus(const char *consensus,
dirvote_recalculate_timing(options, now);
routerstatus_list_update_named_server_map();
- cell_ewma_set_scale_factor(options, current_consensus);
+
+ /* Update ewma and adjust policy if needed; first cache the old value */
+ old_ewma_enabled = cell_ewma_enabled();
+ /* Change the cell EWMA settings */
+ cell_ewma_set_scale_factor(options, networkstatus_get_latest_consensus());
+ /* If we just enabled ewma, set the cmux policy on all active channels */
+ if (cell_ewma_enabled() && !old_ewma_enabled) {
+ channel_set_cmux_policy_everywhere(&ewma_policy);
+ } else if (!cell_ewma_enabled() && old_ewma_enabled) {
+ /* Turn it off everywhere */
+ channel_set_cmux_policy_everywhere(NULL);
+ }
/* XXXX024 this call might be unnecessary here: can changing the
* current consensus really alter our view of any OR's rate limits? */
connection_or_update_token_buckets(get_connection_array(), options);
- circuit_build_times_new_consensus_params(&circ_times, current_consensus);
+ circuit_build_times_new_consensus_params(get_circuit_build_times_mutable(),
+ current_consensus);
}
if (directory_caches_dir_info(options)) {
@@ -1864,7 +1408,7 @@ networkstatus_set_current_consensus(const char *consensus,
format_iso_time(tbuf, c->valid_after);
format_time_interval(dbuf, sizeof(dbuf), delta);
log_warn(LD_GENERAL, "Our clock is %s behind the time published in the "
- "consensus network status document (%s GMT). Tor needs an "
+ "consensus network status document (%s UTC). Tor needs an "
"accurate clock to work correctly. Please check your time and "
"date settings!", dbuf, tbuf);
control_event_general_status(LOG_WARN,
@@ -1893,11 +1437,12 @@ networkstatus_note_certs_arrived(void)
if (!waiting->consensus)
continue;
if (networkstatus_check_consensus_signature(waiting->consensus, 0)>=0) {
+ char *waiting_body = waiting->body;
if (!networkstatus_set_current_consensus(
- waiting->body,
+ waiting_body,
networkstatus_get_flavor_name(i),
NSSET_WAS_WAITING_FOR_CERTS)) {
- tor_free(waiting->body);
+ tor_free(waiting_body);
}
}
}
@@ -1915,9 +1460,6 @@ routers_update_all_from_networkstatus(time_t now, int dir_version)
networkstatus_t *consensus = networkstatus_get_reasonably_live_consensus(now,
FLAV_NS);
- if (networkstatus_v2_list_has_changed)
- download_status_map_update_from_v2_networkstatus();
-
if (!consensus || dir_version < 3) /* nothing more we should do */
return;
@@ -1972,35 +1514,6 @@ routers_update_all_from_networkstatus(time_t now, int dir_version)
}
}
-/** Update v2_download_status_map to contain an entry for every router
- * descriptor listed in the v2 networkstatuses. */
-static void
-download_status_map_update_from_v2_networkstatus(void)
-{
- digestmap_t *dl_status;
- if (!networkstatus_v2_list)
- return;
- if (!v2_download_status_map)
- v2_download_status_map = digestmap_new();
-
- dl_status = digestmap_new();
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- SMARTLIST_FOREACH_BEGIN(ns->entries, const routerstatus_t *, rs) {
- const char *d = rs->descriptor_digest;
- download_status_t *s;
- if (digestmap_get(dl_status, d))
- continue;
- if (!(s = digestmap_remove(v2_download_status_map, d))) {
- s = tor_malloc_zero(sizeof(download_status_t));
- }
- digestmap_set(dl_status, d, s);
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
- digestmap_free(v2_download_status_map, _tor_free);
- v2_download_status_map = dl_status;
- networkstatus_v2_list_has_changed = 0;
-}
-
/** Update our view of the list of named servers from the most recently
* retrieved networkstatus consensus. */
static void
@@ -2009,7 +1522,7 @@ routerstatus_list_update_named_server_map(void)
if (!current_consensus)
return;
- strmap_free(named_server_map, _tor_free);
+ strmap_free(named_server_map, tor_free_);
named_server_map = strmap_new();
strmap_free(unnamed_server_map, NULL);
unnamed_server_map = strmap_new();
@@ -2032,14 +1545,11 @@ void
routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
int reset_failures)
{
- trusted_dir_server_t *ds;
const or_options_t *options = get_options();
- int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
+ int authdir = authdir_mode_v3(options);
networkstatus_t *ns = current_consensus;
if (!ns || !smartlist_len(ns->routerstatus_list))
return;
- if (!networkstatus_v2_list)
- networkstatus_v2_list = smartlist_new();
routers_sort_by_identity(routers);
@@ -2049,11 +1559,6 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
router->cache_info.identity_digest, DIGEST_LEN),
{
}) {
- /* We have a routerstatus for this router. */
- const char *digest = router->cache_info.identity_digest;
-
- ds = router_get_trusteddirserver_by_digest(digest);
-
/* Is it the same descriptor, or only the same identity? */
if (tor_memeq(router->cache_info.signed_descriptor_digest,
rs->descriptor_digest, DIGEST_LEN)) {
@@ -2071,30 +1576,11 @@ routers_update_status_from_consensus_networkstatus(smartlist_t *routers,
dirserv_should_launch_reachability_test(router, old_router);
}
}
- if (rs->is_flagged_running && ds) {
- download_status_reset(&ds->v2_ns_dl_status);
- }
if (reset_failures) {
download_status_reset(&rs->dl_status);
}
} SMARTLIST_FOREACH_JOIN_END(rs, router);
- /* Now update last_listed_as_valid_until from v2 networkstatuses. */
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- time_t live_until = ns->published_on + V2_NETWORKSTATUS_ROUTER_LIFETIME;
- SMARTLIST_FOREACH_JOIN(ns->entries, const routerstatus_t *, rs,
- routers, routerinfo_t *, ri,
- tor_memcmp(rs->identity_digest,
- ri->cache_info.identity_digest, DIGEST_LEN),
- STMT_NIL) {
- if (tor_memeq(ri->cache_info.signed_descriptor_digest,
- rs->descriptor_digest, DIGEST_LEN)) {
- if (live_until > ri->cache_info.last_listed_as_valid_until)
- ri->cache_info.last_listed_as_valid_until = live_until;
- }
- } SMARTLIST_FOREACH_JOIN_END(rs, ri);
- } SMARTLIST_FOREACH_END(ns);
-
router_dir_info_changed();
}
@@ -2130,9 +1616,7 @@ signed_descs_update_status_from_consensus_networkstatus(smartlist_t *descs)
char *
networkstatus_getinfo_helper_single(const routerstatus_t *rs)
{
- char buf[RS_ENTRY_LEN+1];
- routerstatus_format_entry(buf, sizeof(buf), rs, NULL, NS_CONTROL_PORT);
- return tor_strdup(buf);
+ return routerstatus_format_entry(rs, NULL, NS_CONTROL_PORT, NULL);
}
/** Alloc and return a string describing routerstatuses for the most
@@ -2188,9 +1672,17 @@ networkstatus_dump_bridge_status_to_file(time_t now)
char *status = networkstatus_getinfo_by_purpose("bridge", now);
const or_options_t *options = get_options();
char *fname = NULL;
+ char *thresholds = NULL, *thresholds_and_status = NULL;
+ routerlist_t *rl = router_get_routerlist();
+ dirserv_compute_bridge_flag_thresholds(rl);
+ thresholds = dirserv_get_flag_thresholds_line();
+ tor_asprintf(&thresholds_and_status, "flag-thresholds %s\n%s",
+ thresholds, status);
tor_asprintf(&fname, "%s"PATH_SEPARATOR"networkstatus-bridges",
options->DataDirectory);
- write_str_to_file(fname,status,0);
+ write_str_to_file(fname,thresholds_and_status,0);
+ tor_free(thresholds);
+ tor_free(thresholds_and_status);
tor_free(fname);
tor_free(status);
}
@@ -2253,6 +1745,21 @@ networkstatus_get_param(const networkstatus_t *ns, const char *param_name,
default_val, min_val, max_val);
}
+/**
+ * Retrieve the consensus parameter that governs the
+ * fixed-point precision of our network balancing 'bandwidth-weights'
+ * (which are themselves integer consensus values). We divide them
+ * by this value and ensure they never exceed this value.
+ */
+int
+networkstatus_get_weight_scale_param(networkstatus_t *ns)
+{
+ return networkstatus_get_param(ns, "bwweightscale",
+ BW_WEIGHT_SCALE,
+ BW_MIN_WEIGHT_SCALE,
+ BW_MAX_WEIGHT_SCALE);
+}
+
/** Return the value of a integer bw weight parameter from the networkstatus
* <b>ns</b> whose name is <b>weight_name</b>. If <b>ns</b> is NULL, try
* loading the latest consensus ourselves. Return <b>default_val</b> if no
@@ -2269,7 +1776,7 @@ networkstatus_get_bw_weight(networkstatus_t *ns, const char *weight_name,
if (!ns || !ns->weight_params)
return default_val;
- max = circuit_build_times_get_bw_scale(ns);
+ max = networkstatus_get_weight_scale_param(ns);
param = get_net_param_from_list(ns->weight_params, weight_name,
default_val, -1,
BW_MAX_WEIGHT_SCALE);
@@ -2310,6 +1817,30 @@ networkstatus_parse_flavor_name(const char *flavname)
return -1;
}
+/** Return 0 if this routerstatus is obsolete, too new, isn't
+ * running, or otherwise not a descriptor that we would make any
+ * use of even if we had it. Else return 1. */
+int
+client_would_use_router(const routerstatus_t *rs, time_t now,
+ const or_options_t *options)
+{
+ if (!rs->is_flagged_running && !options->FetchUselessDescriptors) {
+ /* If we had this router descriptor, we wouldn't even bother using it.
+ * But, if we want to have a complete list, fetch it anyway. */
+ return 0;
+ }
+ if (rs->published_on + options->TestingEstimatedDescriptorPropagationTime
+ > now) {
+ /* Most caches probably don't have this descriptor yet. */
+ return 0;
+ }
+ if (rs->published_on + OLD_ROUTER_DESC_MAX_AGE < now) {
+ /* We'd drop it immediately for being too old. */
+ return 0;
+ }
+ return 1;
+}
+
/** If <b>question</b> is a string beginning with "ns/" in a format the
* control interface expects for a GETINFO question, set *<b>answer</b> to a
* newly-allocated string containing networkstatus lines for the appropriate
@@ -2340,8 +1871,11 @@ getinfo_helper_networkstatus(control_connection_t *conn,
return 0;
} else if (!strcmpstart(question, "ns/id/")) {
char d[DIGEST_LEN];
+ const char *q = question + 6;
+ if (*q == '$')
+ ++q;
- if (base16_decode(d, DIGEST_LEN, question+6, strlen(question+6))) {
+ if (base16_decode(d, DIGEST_LEN, q, strlen(q))) {
*errmsg = "Data not decodeable as hex";
return -1;
}
@@ -2365,15 +1899,6 @@ void
networkstatus_free_all(void)
{
int i;
- if (networkstatus_v2_list) {
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- networkstatus_v2_free(ns));
- smartlist_free(networkstatus_v2_list);
- networkstatus_v2_list = NULL;
- }
-
- digestmap_free(v2_download_status_map, _tor_free);
- v2_download_status_map = NULL;
networkstatus_vote_free(current_ns_consensus);
networkstatus_vote_free(current_md_consensus);
current_md_consensus = current_ns_consensus = NULL;
@@ -2387,7 +1912,7 @@ networkstatus_free_all(void)
tor_free(waiting->body);
}
- strmap_free(named_server_map, _tor_free);
+ strmap_free(named_server_map, tor_free_);
strmap_free(unnamed_server_map, NULL);
}
diff --git a/src/or/networkstatus.h b/src/or/networkstatus.h
index 0af17512d..be0a86cdd 100644
--- a/src/or/networkstatus.h
+++ b/src/or/networkstatus.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,19 +9,13 @@
* \brief Header file for networkstatus.c.
**/
-#ifndef _TOR_NETWORKSTATUS_H
-#define _TOR_NETWORKSTATUS_H
-
-/** How old do we allow a v2 network-status to get before removing it
- * completely? */
-#define MAX_NETWORKSTATUS_AGE (10*24*60*60)
+#ifndef TOR_NETWORKSTATUS_H
+#define TOR_NETWORKSTATUS_H
void networkstatus_reset_warnings(void);
void networkstatus_reset_download_failures(void);
-int router_reload_v2_networkstatus(void);
int router_reload_consensus_networkstatus(void);
void routerstatus_free(routerstatus_t *rs);
-void networkstatus_v2_free(networkstatus_v2_t *ns);
void networkstatus_vote_free(networkstatus_t *ns);
networkstatus_voter_info_t *networkstatus_get_voter_by_id(
networkstatus_t *vote,
@@ -31,24 +25,16 @@ int networkstatus_check_consensus_signature(networkstatus_t *consensus,
int networkstatus_check_document_signature(const networkstatus_t *consensus,
document_signature_t *sig,
const authority_cert_t *cert);
-char *networkstatus_get_cache_filename(const char *identity_digest);
-int router_set_networkstatus_v2(const char *s, time_t arrived_at,
- v2_networkstatus_source_t source,
- smartlist_t *requested_fingerprints);
-void networkstatus_v2_list_clean(time_t now);
int compare_digest_to_routerstatus_entry(const void *_key,
const void **_member);
-const routerstatus_t *networkstatus_v2_find_entry(networkstatus_v2_t *ns,
- const char *digest);
+int compare_digest_to_vote_routerstatus_entry(const void *_key,
+ const void **_member);
const routerstatus_t *networkstatus_vote_find_entry(networkstatus_t *ns,
const char *digest);
-routerstatus_t *networkstatus_v2_find_mutable_entry(networkstatus_v2_t *ns,
- const char *digest);
routerstatus_t *networkstatus_vote_find_mutable_entry(networkstatus_t *ns,
const char *digest);
int networkstatus_vote_find_entry_idx(networkstatus_t *ns,
const char *digest, int *found_out);
-const smartlist_t *networkstatus_get_v2_list(void);
download_status_t *router_get_dl_status_by_descriptor_digest(const char *d);
const routerstatus_t *router_get_consensus_status_by_id(const char *digest);
routerstatus_t *router_get_mutable_consensus_status_by_id(
@@ -67,11 +53,12 @@ int networkstatus_nickname_is_unnamed(const char *nickname);
void networkstatus_consensus_download_failed(int status_code,
const char *flavname);
void update_consensus_networkstatus_fetch_time(time_t now);
-int should_delay_dir_fetches(const or_options_t *options);
+int should_delay_dir_fetches(const or_options_t *options,const char **msg_out);
void update_networkstatus_downloads(time_t now);
void update_certificate_downloads(time_t now);
int consensus_is_waiting_for_certs(void);
-networkstatus_v2_t *networkstatus_v2_get_by_digest(const char *digest);
+int client_would_use_router(const routerstatus_t *rs, time_t now,
+ const or_options_t *options);
networkstatus_t *networkstatus_get_latest_consensus(void);
networkstatus_t *networkstatus_get_latest_consensus_by_flavor(
consensus_flavor_t f);
@@ -110,6 +97,11 @@ int networkstatus_parse_flavor_name(const char *flavname);
void document_signature_free(document_signature_t *sig);
document_signature_t *document_signature_dup(const document_signature_t *sig);
void networkstatus_free_all(void);
+int networkstatus_get_weight_scale_param(networkstatus_t *ns);
+
+#ifdef NETWORKSTATUS_PRIVATE
+STATIC void vote_routerstatus_free(vote_routerstatus_t *rs);
+#endif
#endif
diff --git a/src/or/nodelist.c b/src/or/nodelist.c
index d17850888..8f870816d 100644
--- a/src/or/nodelist.c
+++ b/src/or/nodelist.c
@@ -1,23 +1,32 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "or.h"
+#include "address.h"
#include "config.h"
+#include "control.h"
#include "dirserv.h"
+#include "geoip.h"
+#include "main.h"
#include "microdesc.h"
#include "networkstatus.h"
#include "nodelist.h"
#include "policies.h"
+#include "rendservice.h"
#include "router.h"
#include "routerlist.h"
+#include "routerset.h"
#include <string.h>
static void nodelist_drop_node(node_t *node, int remove_from_ht);
static void node_free(node_t *node);
+static void update_router_have_minimum_dir_info(void);
+static double get_frac_paths_needed_for_circs(const or_options_t *options,
+ const networkstatus_t *ns);
/** A nodelist_t holds a node_t object for every router we're "willing to use
* for something". Specifically, it should hold a node_t for every node that
@@ -34,14 +43,7 @@ typedef struct nodelist_t {
static INLINE unsigned int
node_id_hash(const node_t *node)
{
-#if SIZEOF_INT == 4
- const uint32_t *p = (const uint32_t*)node->identity;
- return p[0] ^ p[1] ^ p[2] ^ p[3] ^ p[4];
-#elif SIZEOF_INT == 8
- const uint64_t *p = (const uint32_t*)node->identity;
- const uint32_t *p32 = (const uint32_t*)node->identity;
- return p[0] ^ p[1] ^ p32[4];
-#endif
+ return (unsigned) siphash24g(node->identity, DIGEST_LEN);
}
static INLINE unsigned int
@@ -83,8 +85,8 @@ node_get_mutable_by_id(const char *identity_digest)
/** Return the node_t whose identity is <b>identity_digest</b>, or NULL
* if no such node exists. */
-const node_t *
-node_get_by_id(const char *identity_digest)
+MOCK_IMPL(const node_t *,
+node_get_by_id,(const char *identity_digest))
{
return node_get_mutable_by_id(identity_digest);
}
@@ -115,19 +117,47 @@ node_get_or_create(const char *identity_digest)
return node;
}
-/** Add <b>ri</b> to the nodelist. */
+/** Called when a node's address changes. */
+static void
+node_addrs_changed(node_t *node)
+{
+ node->last_reachable = node->last_reachable6 = 0;
+ node->country = -1;
+}
+
+/** Add <b>ri</b> to an appropriate node in the nodelist. If we replace an
+ * old routerinfo, and <b>ri_old_out</b> is not NULL, set *<b>ri_old_out</b>
+ * to the previous routerinfo.
+ */
node_t *
-nodelist_add_routerinfo(routerinfo_t *ri)
+nodelist_set_routerinfo(routerinfo_t *ri, routerinfo_t **ri_old_out)
{
node_t *node;
+ const char *id_digest;
+ int had_router = 0;
+ tor_assert(ri);
+
init_nodelist();
- node = node_get_or_create(ri->cache_info.identity_digest);
+ id_digest = ri->cache_info.identity_digest;
+ node = node_get_or_create(id_digest);
+
+ if (node->ri) {
+ if (!routers_have_same_or_addrs(node->ri, ri)) {
+ node_addrs_changed(node);
+ }
+ had_router = 1;
+ if (ri_old_out)
+ *ri_old_out = node->ri;
+ } else {
+ if (ri_old_out)
+ *ri_old_out = NULL;
+ }
node->ri = ri;
if (node->country == -1)
node_set_country(node);
- if (authdir_mode(get_options())) {
+ if (authdir_mode(get_options()) && !had_router) {
const char *discard=NULL;
uint32_t status = dirserv_router_get_status(ri, &discard);
dirserv_set_node_flags_from_authoritative_status(node, status);
@@ -167,7 +197,7 @@ nodelist_add_microdesc(microdesc_t *md)
return node;
}
-/** Tell the nodelist that the current usable consensus to <b>ns</b>.
+/** Tell the nodelist that the current usable consensus is <b>ns</b>.
* This makes the nodelist change all of the routerstatus entries for
* the nodes, drop nodes that no longer have enough info to get used,
* and grab microdescriptors into nodes as appropriate.
@@ -176,7 +206,8 @@ void
nodelist_set_consensus(networkstatus_t *ns)
{
const or_options_t *options = get_options();
- int authdir = authdir_mode_v2(options) || authdir_mode_v3(options);
+ int authdir = authdir_mode_v3(options);
+ int client = !server_mode(options);
init_nodelist();
if (ns->flavor == FLAV_MICRODESC)
@@ -213,6 +244,11 @@ nodelist_set_consensus(networkstatus_t *ns)
node->is_bad_directory = rs->is_bad_directory;
node->is_bad_exit = rs->is_bad_exit;
node->is_hs_dir = rs->is_hs_dir;
+ node->ipv6_preferred = 0;
+ if (client && options->ClientPreferIPv6ORPort == 1 &&
+ (tor_addr_is_null(&rs->ipv6_addr) == 0 ||
+ (node->md && tor_addr_is_null(&node->md->ipv6_addr) == 0)))
+ node->ipv6_preferred = 1;
}
} SMARTLIST_FOREACH_END(rs);
@@ -231,7 +267,8 @@ nodelist_set_consensus(networkstatus_t *ns)
node->is_valid = node->is_running = node->is_hs_dir =
node->is_fast = node->is_stable =
node->is_possible_guard = node->is_exit =
- node->is_bad_exit = node->is_bad_directory = 0;
+ node->is_bad_exit = node->is_bad_directory =
+ node->ipv6_preferred = 0;
}
}
} SMARTLIST_FOREACH_END(node);
@@ -295,6 +332,25 @@ nodelist_drop_node(node_t *node, int remove_from_ht)
node->nodelist_idx = -1;
}
+/** Return a newly allocated smartlist of the nodes that have <b>md</b> as
+ * their microdescriptor. */
+smartlist_t *
+nodelist_find_nodes_with_microdesc(const microdesc_t *md)
+{
+ smartlist_t *result = smartlist_new();
+
+ if (the_nodelist == NULL)
+ return result;
+
+ SMARTLIST_FOREACH_BEGIN(the_nodelist->nodes, node_t *, node) {
+ if (node->md == md) {
+ smartlist_add(result, node);
+ }
+ } SMARTLIST_FOREACH_END(node);
+
+ return result;
+}
+
/** Release storage held by <b>node</b> */
static void
node_free(node_t *node)
@@ -582,7 +638,7 @@ node_is_dir(const node_t *node)
}
/** Return true iff <b>node</b> has either kind of usable descriptor -- that
- * is, a routerdecriptor or a microdescriptor. */
+ * is, a routerdescriptor or a microdescriptor. */
int
node_has_descriptor(const node_t *node)
{
@@ -602,7 +658,7 @@ node_get_purpose(const node_t *node)
/** Compute the verbose ("extended") nickname of <b>node</b> and store it
* into the MAX_VERBOSE_NICKNAME_LEN+1 character buffer at
- * <b>verbose_nickname_out</b> */
+ * <b>verbose_name_out</b> */
void
node_get_verbose_nickname(const node_t *node,
char *verbose_name_out)
@@ -618,6 +674,25 @@ node_get_verbose_nickname(const node_t *node,
strlcpy(verbose_name_out+1+HEX_DIGEST_LEN+1, nickname, MAX_NICKNAME_LEN+1);
}
+/** Compute the verbose ("extended") nickname of node with
+ * given <b>id_digest</b> and store it into the MAX_VERBOSE_NICKNAME_LEN+1
+ * character buffer at <b>verbose_name_out</b>
+ *
+ * If node_get_by_id() returns NULL, base 16 encoding of
+ * <b>id_digest</b> is returned instead. */
+void
+node_get_verbose_nickname_by_id(const char *id_digest,
+ char *verbose_name_out)
+{
+ const node_t *node = node_get_by_id(id_digest);
+ if (!node) {
+ verbose_name_out[0] = '$';
+ base16_encode(verbose_name_out+1, HEX_DIGEST_LEN+1, id_digest, DIGEST_LEN);
+ } else {
+ node_get_verbose_nickname(node, verbose_name_out);
+ }
+}
+
/** Return true iff it seems that <b>node</b> allows circuits to exit
* through it directlry from the client. */
int
@@ -646,6 +721,24 @@ node_exit_policy_rejects_all(const node_t *node)
return 1;
}
+/** Return true iff the exit policy for <b>node</b> is such that we can treat
+ * rejecting an address of type <b>family</b> unexpectedly as a sign of that
+ * node's failure. */
+int
+node_exit_policy_is_exact(const node_t *node, sa_family_t family)
+{
+ if (family == AF_UNSPEC) {
+ return 1; /* Rejecting an address but not telling us what address
+ * is a bad sign. */
+ } else if (family == AF_INET) {
+ return node->ri != NULL;
+ } else if (family == AF_INET6) {
+ return 0;
+ }
+ tor_fragile_assert();
+ return 1;
+}
+
/** Return list of tor_addr_port_t with all OR ports (in the sense IP
* addr + TCP port) for <b>node</b>. Caller must free all elements
* using tor_free() and free the list using smartlist_free().
@@ -682,19 +775,6 @@ node_get_all_orports(const node_t *node)
return sl;
}
-/** Copy the primary (IPv4) OR port (IP address and TCP port) for
- * <b>node</b> into *<b>ap_out</b>. */
-void
-node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
-{
- if (node->ri) {
- router_get_prim_orport(node->ri, ap_out);
- } else if (node->rs) {
- tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
- ap_out->port = node->rs->or_port;
- }
-}
-
/** Wrapper around node_get_prim_orport for backward
compatibility. */
void
@@ -718,43 +798,13 @@ node_get_prim_addr_ipv4h(const node_t *node)
return 0;
}
-/** Copy the preferred OR port (IP address and TCP port) for
- * <b>node</b> into <b>ap_out</b>. */
-void
-node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
-{
- if (node->ri) {
- router_get_pref_orport(node->ri, ap_out);
- } else if (node->rs) {
- /* No IPv6 in routerstatus_t yet. XXXprop186 ok for private
- bridges but needs fixing */
- tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
- ap_out->port = node->rs->or_port;
- }
-}
-
-/** Copy the preferred IPv6 OR port (address and TCP port) for
- * <b>node</b> into *<b>ap_out</b>. */
-void
-node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out)
-{
- if (node->ri) {
- router_get_pref_ipv6_orport(node->ri, ap_out);
- } else if (node->rs) {
- /* No IPv6 in routerstatus_t yet. XXXprop186 ok for private
- bridges but needs fixing */
- tor_addr_make_unspec(&ap_out->addr);
- ap_out->port = 0;
- }
-}
-
/** Copy a string representation of an IP address for <b>node</b> into
* the <b>len</b>-byte buffer at <b>buf</b>. */
void
node_get_address_string(const node_t *node, char *buf, size_t len)
{
if (node->ri) {
- strlcpy(buf, node->ri->address, len);
+ strlcpy(buf, fmt_addr32(node->ri->addr), len);
} else if (node->rs) {
tor_addr_t addr;
tor_addr_from_ipv4h(&addr, node->rs->addr);
@@ -818,3 +868,704 @@ node_get_declared_family(const node_t *node)
return NULL;
}
+/** Return 1 if we prefer the IPv6 address and OR TCP port of
+ * <b>node</b>, else 0.
+ *
+ * We prefer the IPv6 address if the router has an IPv6 address and
+ * i) the node_t says that it prefers IPv6
+ * or
+ * ii) the router has no IPv4 address. */
+int
+node_ipv6_preferred(const node_t *node)
+{
+ tor_addr_port_t ipv4_addr;
+ node_assert_ok(node);
+
+ if (node->ipv6_preferred || node_get_prim_orport(node, &ipv4_addr)) {
+ if (node->ri)
+ return !tor_addr_is_null(&node->ri->ipv6_addr);
+ if (node->md)
+ return !tor_addr_is_null(&node->md->ipv6_addr);
+ if (node->rs)
+ return !tor_addr_is_null(&node->rs->ipv6_addr);
+ }
+ return 0;
+}
+
+/** Copy the primary (IPv4) OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. Return 0 if a valid address and
+ * port was copied, else return non-zero.*/
+int
+node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ node_assert_ok(node);
+ tor_assert(ap_out);
+
+ if (node->ri) {
+ if (node->ri->addr == 0 || node->ri->or_port == 0)
+ return -1;
+ tor_addr_from_ipv4h(&ap_out->addr, node->ri->addr);
+ ap_out->port = node->ri->or_port;
+ return 0;
+ }
+ if (node->rs) {
+ if (node->rs->addr == 0 || node->rs->or_port == 0)
+ return -1;
+ tor_addr_from_ipv4h(&ap_out->addr, node->rs->addr);
+ ap_out->port = node->rs->or_port;
+ return 0;
+ }
+ return -1;
+}
+
+/** Copy the preferred OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ const or_options_t *options = get_options();
+ tor_assert(ap_out);
+
+ /* Cheap implementation of config option ClientUseIPv6 -- simply
+ don't prefer IPv6 when ClientUseIPv6 is not set and we're not a
+ client running with bridges. See #4455 for more on this subject.
+
+ Note that this filter is too strict since we're hindering not
+ only clients! Erring on the safe side shouldn't be a problem
+ though. XXX move this check to where outgoing connections are
+ made? -LN */
+ if ((options->ClientUseIPv6 || options->UseBridges) &&
+ node_ipv6_preferred(node)) {
+ node_get_pref_ipv6_orport(node, ap_out);
+ } else {
+ node_get_prim_orport(node, ap_out);
+ }
+}
+
+/** Copy the preferred IPv6 OR port (IP address and TCP port) for
+ * <b>node</b> into *<b>ap_out</b>. */
+void
+node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out)
+{
+ node_assert_ok(node);
+ tor_assert(ap_out);
+
+ /* We prefer the microdesc over a potential routerstatus here. They
+ are not being synchronised atm so there might be a chance that
+ they differ at some point, f.ex. when flipping
+ UseMicrodescriptors? -LN */
+
+ if (node->ri) {
+ tor_addr_copy(&ap_out->addr, &node->ri->ipv6_addr);
+ ap_out->port = node->ri->ipv6_orport;
+ } else if (node->md) {
+ tor_addr_copy(&ap_out->addr, &node->md->ipv6_addr);
+ ap_out->port = node->md->ipv6_orport;
+ } else if (node->rs) {
+ tor_addr_copy(&ap_out->addr, &node->rs->ipv6_addr);
+ ap_out->port = node->rs->ipv6_orport;
+ }
+}
+
+/** Return true iff <b>node</b> has a curve25519 onion key. */
+int
+node_has_curve25519_onion_key(const node_t *node)
+{
+ if (node->ri)
+ return node->ri->onion_curve25519_pkey != NULL;
+ else if (node->md)
+ return node->md->onion_curve25519_pkey != NULL;
+ else
+ return 0;
+}
+
+/** Refresh the country code of <b>ri</b>. This function MUST be called on
+ * each router when the GeoIP database is reloaded, and on all new routers. */
+void
+node_set_country(node_t *node)
+{
+ tor_addr_t addr = TOR_ADDR_NULL;
+
+ /* XXXXipv6 */
+ if (node->rs)
+ tor_addr_from_ipv4h(&addr, node->rs->addr);
+ else if (node->ri)
+ tor_addr_from_ipv4h(&addr, node->ri->addr);
+
+ node->country = geoip_get_country_by_addr(&addr);
+}
+
+/** Set the country code of all routers in the routerlist. */
+void
+nodelist_refresh_countries(void)
+{
+ smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, node_t *, node,
+ node_set_country(node));
+}
+
+/** Return true iff router1 and router2 have similar enough network addresses
+ * that we should treat them as being in the same family */
+static INLINE int
+addrs_in_same_network_family(const tor_addr_t *a1,
+ const tor_addr_t *a2)
+{
+ return 0 == tor_addr_compare_masked(a1, a2, 16, CMP_SEMANTIC);
+}
+
+/** Return true if <b>node</b>'s nickname matches <b>nickname</b>
+ * (case-insensitive), or if <b>node's</b> identity key digest
+ * matches a hexadecimal value stored in <b>nickname</b>. Return
+ * false otherwise. */
+static int
+node_nickname_matches(const node_t *node, const char *nickname)
+{
+ const char *n = node_get_nickname(node);
+ if (n && nickname[0]!='$' && !strcasecmp(n, nickname))
+ return 1;
+ return hex_digest_nickname_matches(nickname,
+ node->identity,
+ n,
+ node_is_named(node));
+}
+
+/** Return true iff <b>node</b> is named by some nickname in <b>lst</b>. */
+static INLINE int
+node_in_nickname_smartlist(const smartlist_t *lst, const node_t *node)
+{
+ if (!lst) return 0;
+ SMARTLIST_FOREACH(lst, const char *, name, {
+ if (node_nickname_matches(node, name))
+ return 1;
+ });
+ return 0;
+}
+
+/** Return true iff r1 and r2 are in the same family, but not the same
+ * router. */
+int
+nodes_in_same_family(const node_t *node1, const node_t *node2)
+{
+ const or_options_t *options = get_options();
+
+ /* Are they in the same family because of their addresses? */
+ if (options->EnforceDistinctSubnets) {
+ tor_addr_t a1, a2;
+ node_get_addr(node1, &a1);
+ node_get_addr(node2, &a2);
+ if (addrs_in_same_network_family(&a1, &a2))
+ return 1;
+ }
+
+ /* Are they in the same family because the agree they are? */
+ {
+ const smartlist_t *f1, *f2;
+ f1 = node_get_declared_family(node1);
+ f2 = node_get_declared_family(node2);
+ if (f1 && f2 &&
+ node_in_nickname_smartlist(f1, node2) &&
+ node_in_nickname_smartlist(f2, node1))
+ return 1;
+ }
+
+ /* Are they in the same option because the user says they are? */
+ if (options->NodeFamilySets) {
+ SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
+ if (routerset_contains_node(rs, node1) &&
+ routerset_contains_node(rs, node2))
+ return 1;
+ });
+ }
+
+ return 0;
+}
+
+/**
+ * Add all the family of <b>node</b>, including <b>node</b> itself, to
+ * the smartlist <b>sl</b>.
+ *
+ * This is used to make sure we don't pick siblings in a single path, or
+ * pick more than one relay from a family for our entry guard list.
+ * Note that a node may be added to <b>sl</b> more than once if it is
+ * part of <b>node</b>'s family for more than one reason.
+ */
+void
+nodelist_add_node_and_family(smartlist_t *sl, const node_t *node)
+{
+ const smartlist_t *all_nodes = nodelist_get_list();
+ const smartlist_t *declared_family;
+ const or_options_t *options = get_options();
+
+ tor_assert(node);
+
+ declared_family = node_get_declared_family(node);
+
+ /* Let's make sure that we have the node itself, if it's a real node. */
+ {
+ const node_t *real_node = node_get_by_id(node->identity);
+ if (real_node)
+ smartlist_add(sl, (node_t*)real_node);
+ }
+
+ /* First, add any nodes with similar network addresses. */
+ if (options->EnforceDistinctSubnets) {
+ tor_addr_t node_addr;
+ node_get_addr(node, &node_addr);
+
+ SMARTLIST_FOREACH_BEGIN(all_nodes, const node_t *, node2) {
+ tor_addr_t a;
+ node_get_addr(node2, &a);
+ if (addrs_in_same_network_family(&a, &node_addr))
+ smartlist_add(sl, (void*)node2);
+ } SMARTLIST_FOREACH_END(node2);
+ }
+
+ /* Now, add all nodes in the declared_family of this node, if they
+ * also declare this node to be in their family. */
+ if (declared_family) {
+ /* Add every r such that router declares familyness with node, and node
+ * declares familyhood with router. */
+ SMARTLIST_FOREACH_BEGIN(declared_family, const char *, name) {
+ const node_t *node2;
+ const smartlist_t *family2;
+ if (!(node2 = node_get_by_nickname(name, 0)))
+ continue;
+ if (!(family2 = node_get_declared_family(node2)))
+ continue;
+ SMARTLIST_FOREACH_BEGIN(family2, const char *, name2) {
+ if (node_nickname_matches(node, name2)) {
+ smartlist_add(sl, (void*)node2);
+ break;
+ }
+ } SMARTLIST_FOREACH_END(name2);
+ } SMARTLIST_FOREACH_END(name);
+ }
+
+ /* If the user declared any families locally, honor those too. */
+ if (options->NodeFamilySets) {
+ SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
+ if (routerset_contains_node(rs, node)) {
+ routerset_get_all_nodes(sl, rs, NULL, 0);
+ }
+ });
+ }
+}
+
+/** Find a router that's up, that has this IP address, and
+ * that allows exit to this address:port, or return NULL if there
+ * isn't a good one.
+ * Don't exit enclave to excluded relays -- it wouldn't actually
+ * hurt anything, but this way there are fewer confused users.
+ */
+const node_t *
+router_find_exact_exit_enclave(const char *address, uint16_t port)
+{/*XXXX MOVE*/
+ uint32_t addr;
+ struct in_addr in;
+ tor_addr_t a;
+ const or_options_t *options = get_options();
+
+ if (!tor_inet_aton(address, &in))
+ return NULL; /* it's not an IP already */
+ addr = ntohl(in.s_addr);
+
+ tor_addr_from_ipv4h(&a, addr);
+
+ SMARTLIST_FOREACH(nodelist_get_list(), const node_t *, node, {
+ if (node_get_addr_ipv4h(node) == addr &&
+ node->is_running &&
+ compare_tor_addr_to_node_policy(&a, port, node) ==
+ ADDR_POLICY_ACCEPTED &&
+ !routerset_contains_node(options->ExcludeExitNodesUnion_, node))
+ return node;
+ });
+ return NULL;
+}
+
+/** Return 1 if <b>router</b> is not suitable for these parameters, else 0.
+ * If <b>need_uptime</b> is non-zero, we require a minimum uptime.
+ * If <b>need_capacity</b> is non-zero, we require a minimum advertised
+ * bandwidth.
+ * If <b>need_guard</b>, we require that the router is a possible entry guard.
+ */
+int
+node_is_unreliable(const node_t *node, int need_uptime,
+ int need_capacity, int need_guard)
+{
+ if (need_uptime && !node->is_stable)
+ return 1;
+ if (need_capacity && !node->is_fast)
+ return 1;
+ if (need_guard && !node->is_possible_guard)
+ return 1;
+ return 0;
+}
+
+/** Return 1 if all running sufficiently-stable routers we can use will reject
+ * addr:port. Return 0 if any might accept it. */
+int
+router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
+ int need_uptime)
+{
+ addr_policy_result_t r;
+
+ SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) {
+ if (node->is_running &&
+ !node_is_unreliable(node, need_uptime, 0, 0)) {
+
+ r = compare_tor_addr_to_node_policy(addr, port, node);
+
+ if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
+ return 0; /* this one could be ok. good enough. */
+ }
+ } SMARTLIST_FOREACH_END(node);
+ return 1; /* all will reject. */
+}
+
+/** Mark the router with ID <b>digest</b> as running or non-running
+ * in our routerlist. */
+void
+router_set_status(const char *digest, int up)
+{
+ node_t *node;
+ tor_assert(digest);
+
+ SMARTLIST_FOREACH(router_get_fallback_dir_servers(),
+ dir_server_t *, d,
+ if (tor_memeq(d->digest, digest, DIGEST_LEN))
+ d->is_running = up);
+
+ SMARTLIST_FOREACH(router_get_trusted_dir_servers(),
+ dir_server_t *, d,
+ if (tor_memeq(d->digest, digest, DIGEST_LEN))
+ d->is_running = up);
+
+ node = node_get_mutable_by_id(digest);
+ if (node) {
+#if 0
+ log_debug(LD_DIR,"Marking router %s as %s.",
+ node_describe(node), up ? "up" : "down");
+#endif
+ if (!up && node_is_me(node) && !net_is_disabled())
+ log_warn(LD_NET, "We just marked ourself as down. Are your external "
+ "addresses reachable?");
+
+ if (bool_neq(node->is_running, up))
+ router_dir_info_changed();
+
+ node->is_running = up;
+ }
+}
+
+/** True iff, the last time we checked whether we had enough directory info
+ * to build circuits, the answer was "yes". */
+static int have_min_dir_info = 0;
+/** True iff enough has changed since the last time we checked whether we had
+ * enough directory info to build circuits that our old answer can no longer
+ * be trusted. */
+static int need_to_update_have_min_dir_info = 1;
+/** String describing what we're missing before we have enough directory
+ * info. */
+static char dir_info_status[256] = "";
+
+/** Return true iff we have enough networkstatus and router information to
+ * start building circuits. Right now, this means "more than half the
+ * networkstatus documents, and at least 1/4 of expected routers." */
+//XXX should consider whether we have enough exiting nodes here.
+int
+router_have_minimum_dir_info(void)
+{
+ if (PREDICT_UNLIKELY(need_to_update_have_min_dir_info)) {
+ update_router_have_minimum_dir_info();
+ need_to_update_have_min_dir_info = 0;
+ }
+ return have_min_dir_info;
+}
+
+/** Called when our internal view of the directory has changed. This can be
+ * when the authorities change, networkstatuses change, the list of routerdescs
+ * changes, or number of running routers changes.
+ */
+void
+router_dir_info_changed(void)
+{
+ need_to_update_have_min_dir_info = 1;
+ rend_hsdir_routers_changed();
+}
+
+/** Return a string describing what we're missing before we have enough
+ * directory info. */
+const char *
+get_dir_info_status_string(void)
+{
+ return dir_info_status;
+}
+
+/** Iterate over the servers listed in <b>consensus</b>, and count how many of
+ * them seem like ones we'd use, and how many of <em>those</em> we have
+ * descriptors for. Store the former in *<b>num_usable</b> and the latter in
+ * *<b>num_present</b>. If <b>in_set</b> is non-NULL, only consider those
+ * routers in <b>in_set</b>. If <b>exit_only</b> is true, only consider nodes
+ * with the Exit flag. If *descs_out is present, add a node_t for each
+ * usable descriptor to it.
+ */
+static void
+count_usable_descriptors(int *num_present, int *num_usable,
+ smartlist_t *descs_out,
+ const networkstatus_t *consensus,
+ const or_options_t *options, time_t now,
+ routerset_t *in_set, int exit_only)
+{
+ const int md = (consensus->flavor == FLAV_MICRODESC);
+ *num_present = 0, *num_usable=0;
+
+ SMARTLIST_FOREACH_BEGIN(consensus->routerstatus_list, routerstatus_t *, rs)
+ {
+ const node_t *node = node_get_by_id(rs->identity_digest);
+ if (!node)
+ continue; /* This would be a bug: every entry in the consensus is
+ * supposed to have a node. */
+ if (exit_only && ! rs->is_exit)
+ continue;
+ if (in_set && ! routerset_contains_routerstatus(in_set, rs, -1))
+ continue;
+ if (client_would_use_router(rs, now, options)) {
+ const char * const digest = rs->descriptor_digest;
+ int present;
+ ++*num_usable; /* the consensus says we want it. */
+ if (md)
+ present = NULL != microdesc_cache_lookup_by_digest256(NULL, digest);
+ else
+ present = NULL != router_get_by_descriptor_digest(digest);
+ if (present) {
+ /* we have the descriptor listed in the consensus. */
+ ++*num_present;
+ }
+ if (descs_out)
+ smartlist_add(descs_out, (node_t*)node);
+ }
+ }
+ SMARTLIST_FOREACH_END(rs);
+
+ log_debug(LD_DIR, "%d usable, %d present (%s%s).",
+ *num_usable, *num_present,
+ md ? "microdesc" : "desc", exit_only ? " exits" : "s");
+}
+
+/** Return an estimate of which fraction of usable paths through the Tor
+ * network we have available for use. */
+static double
+compute_frac_paths_available(const networkstatus_t *consensus,
+ const or_options_t *options, time_t now,
+ int *num_present_out, int *num_usable_out,
+ char **status_out)
+{
+ smartlist_t *guards = smartlist_new();
+ smartlist_t *mid = smartlist_new();
+ smartlist_t *exits = smartlist_new();
+ smartlist_t *myexits= smartlist_new();
+ smartlist_t *myexits_unflagged = smartlist_new();
+ double f_guard, f_mid, f_exit, f_myexit, f_myexit_unflagged;
+ int np, nu; /* Ignored */
+ const int authdir = authdir_mode_v3(options);
+
+ count_usable_descriptors(num_present_out, num_usable_out,
+ mid, consensus, options, now, NULL, 0);
+ if (options->EntryNodes) {
+ count_usable_descriptors(&np, &nu, guards, consensus, options, now,
+ options->EntryNodes, 0);
+ } else {
+ SMARTLIST_FOREACH(mid, const node_t *, node, {
+ if (authdir) {
+ if (node->rs && node->rs->is_possible_guard)
+ smartlist_add(guards, (node_t*)node);
+ } else {
+ if (node->is_possible_guard)
+ smartlist_add(guards, (node_t*)node);
+ }
+ });
+ }
+
+ /* All nodes with exit flag */
+ count_usable_descriptors(&np, &nu, exits, consensus, options, now,
+ NULL, 1);
+ /* All nodes with exit flag in ExitNodes option */
+ count_usable_descriptors(&np, &nu, myexits, consensus, options, now,
+ options->ExitNodes, 1);
+ /* Now compute the nodes in the ExitNodes option where which we don't know
+ * what their exit policy is, or we know it permits something. */
+ count_usable_descriptors(&np, &nu, myexits_unflagged,
+ consensus, options, now,
+ options->ExitNodes, 0);
+ SMARTLIST_FOREACH_BEGIN(myexits_unflagged, const node_t *, node) {
+ if (node_has_descriptor(node) && node_exit_policy_rejects_all(node))
+ SMARTLIST_DEL_CURRENT(myexits_unflagged, node);
+ } SMARTLIST_FOREACH_END(node);
+
+ f_guard = frac_nodes_with_descriptors(guards, WEIGHT_FOR_GUARD);
+ f_mid = frac_nodes_with_descriptors(mid, WEIGHT_FOR_MID);
+ f_exit = frac_nodes_with_descriptors(exits, WEIGHT_FOR_EXIT);
+ f_myexit= frac_nodes_with_descriptors(myexits,WEIGHT_FOR_EXIT);
+ f_myexit_unflagged=
+ frac_nodes_with_descriptors(myexits_unflagged,WEIGHT_FOR_EXIT);
+
+ /* If our ExitNodes list has eliminated every possible Exit node, and there
+ * were some possible Exit nodes, then instead consider nodes that permit
+ * exiting to some ports. */
+ if (smartlist_len(myexits) == 0 &&
+ smartlist_len(myexits_unflagged)) {
+ f_myexit = f_myexit_unflagged;
+ }
+
+ smartlist_free(guards);
+ smartlist_free(mid);
+ smartlist_free(exits);
+ smartlist_free(myexits);
+ smartlist_free(myexits_unflagged);
+
+ /* This is a tricky point here: we don't want to make it easy for a
+ * directory to trickle exits to us until it learns which exits we have
+ * configured, so require that we have a threshold both of total exits
+ * and usable exits. */
+ if (f_myexit < f_exit)
+ f_exit = f_myexit;
+
+ if (status_out)
+ tor_asprintf(status_out,
+ "%d%% of guards bw, "
+ "%d%% of midpoint bw, and "
+ "%d%% of exit bw",
+ (int)(f_guard*100),
+ (int)(f_mid*100),
+ (int)(f_exit*100));
+
+ return f_guard * f_mid * f_exit;
+}
+
+/** We just fetched a new set of descriptors. Compute how far through
+ * the "loading descriptors" bootstrapping phase we are, so we can inform
+ * the controller of our progress. */
+int
+count_loading_descriptors_progress(void)
+{
+ int num_present = 0, num_usable=0;
+ time_t now = time(NULL);
+ const or_options_t *options = get_options();
+ const networkstatus_t *consensus =
+ networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
+ double paths, fraction;
+
+ if (!consensus)
+ return 0; /* can't count descriptors if we have no list of them */
+
+ paths = compute_frac_paths_available(consensus, options, now,
+ &num_present, &num_usable,
+ NULL);
+
+ fraction = paths / get_frac_paths_needed_for_circs(options,consensus);
+ if (fraction > 1.0)
+ return 0; /* it's not the number of descriptors holding us back */
+ return BOOTSTRAP_STATUS_LOADING_DESCRIPTORS + (int)
+ (fraction*(BOOTSTRAP_STATUS_CONN_OR-1 -
+ BOOTSTRAP_STATUS_LOADING_DESCRIPTORS));
+}
+
+/** Return the fraction of paths needed before we're willing to build
+ * circuits, as configured in <b>options</b>, or in the consensus <b>ns</b>. */
+static double
+get_frac_paths_needed_for_circs(const or_options_t *options,
+ const networkstatus_t *ns)
+{
+#define DFLT_PCT_USABLE_NEEDED 60
+ if (options->PathsNeededToBuildCircuits >= 0.0) {
+ return options->PathsNeededToBuildCircuits;
+ } else {
+ return networkstatus_get_param(ns, "min_paths_for_circs_pct",
+ DFLT_PCT_USABLE_NEEDED,
+ 25, 95)/100.0;
+ }
+}
+
+/** Change the value of have_min_dir_info, setting it true iff we have enough
+ * network and router information to build circuits. Clear the value of
+ * need_to_update_have_min_dir_info. */
+static void
+update_router_have_minimum_dir_info(void)
+{
+ time_t now = time(NULL);
+ int res;
+ const or_options_t *options = get_options();
+ const networkstatus_t *consensus =
+ networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
+ int using_md;
+ const char *delay_fetches_msg = NULL;
+
+ if (!consensus) {
+ if (!networkstatus_get_latest_consensus())
+ strlcpy(dir_info_status, "We have no usable consensus.",
+ sizeof(dir_info_status));
+ else
+ strlcpy(dir_info_status, "We have no recent usable consensus.",
+ sizeof(dir_info_status));
+ res = 0;
+ goto done;
+ }
+
+ if (should_delay_dir_fetches(get_options(), &delay_fetches_msg)) {
+ log_notice(LD_DIR, "Delaying directory fetches: %s", delay_fetches_msg);
+ strlcpy(dir_info_status, delay_fetches_msg, sizeof(dir_info_status));
+ res = 0;
+ goto done;
+ }
+
+ using_md = consensus->flavor == FLAV_MICRODESC;
+
+ {
+ char *status = NULL;
+ int num_present=0, num_usable=0;
+ double paths = compute_frac_paths_available(consensus, options, now,
+ &num_present, &num_usable,
+ &status);
+
+ if (paths < get_frac_paths_needed_for_circs(options,consensus)) {
+ tor_snprintf(dir_info_status, sizeof(dir_info_status),
+ "We need more %sdescriptors: we have %d/%d, and "
+ "can only build %d%% of likely paths. (We have %s.)",
+ using_md?"micro":"", num_present, num_usable,
+ (int)(paths*100), status);
+ /* log_notice(LD_NET, "%s", dir_info_status); */
+ tor_free(status);
+ res = 0;
+ control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
+ goto done;
+ }
+
+ tor_free(status);
+ res = 1;
+ }
+
+ done:
+ if (res && !have_min_dir_info) {
+ log_notice(LD_DIR,
+ "We now have enough directory information to build circuits.");
+ control_event_client_status(LOG_NOTICE, "ENOUGH_DIR_INFO");
+ control_event_bootstrap(BOOTSTRAP_STATUS_CONN_OR, 0);
+ }
+ if (!res && have_min_dir_info) {
+ int quiet = directory_too_idle_to_fetch_descriptors(options, now);
+ tor_log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
+ "Our directory information is no longer up-to-date "
+ "enough to build circuits: %s", dir_info_status);
+
+ /* a) make us log when we next complete a circuit, so we know when Tor
+ * is back up and usable, and b) disable some activities that Tor
+ * should only do while circuits are working, like reachability tests
+ * and fetching bridge descriptors only over circuits. */
+ can_complete_circuit = 0;
+
+ control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
+ }
+ have_min_dir_info = res;
+ need_to_update_have_min_dir_info = 0;
+}
+
diff --git a/src/or/nodelist.h b/src/or/nodelist.h
index 1e9da88d4..8e719e012 100644
--- a/src/or/nodelist.h
+++ b/src/or/nodelist.h
@@ -1,27 +1,32 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
- * \file microdesc.h
- * \brief Header file for microdesc.c.
+ * \file nodelist.h
+ * \brief Header file for nodelist.c.
**/
-#ifndef _TOR_NODELIST_H
-#define _TOR_NODELIST_H
+#ifndef TOR_NODELIST_H
+#define TOR_NODELIST_H
+
+#define node_assert_ok(n) STMT_BEGIN { \
+ tor_assert((n)->ri || (n)->rs); \
+ } STMT_END
node_t *node_get_mutable_by_id(const char *identity_digest);
-const node_t *node_get_by_id(const char *identity_digest);
+MOCK_DECL(const node_t *, node_get_by_id, (const char *identity_digest));
const node_t *node_get_by_hex_id(const char *identity_digest);
-node_t *nodelist_add_routerinfo(routerinfo_t *ri);
+node_t *nodelist_set_routerinfo(routerinfo_t *ri, routerinfo_t **ri_old_out);
node_t *nodelist_add_microdesc(microdesc_t *md);
void nodelist_set_consensus(networkstatus_t *ns);
void nodelist_remove_microdesc(const char *identity_digest, microdesc_t *md);
void nodelist_remove_routerinfo(routerinfo_t *ri);
void nodelist_purge(void);
+smartlist_t *nodelist_find_nodes_with_microdesc(const microdesc_t *md);
void nodelist_free_all(void);
void nodelist_assert_ok(void);
@@ -29,6 +34,8 @@ void nodelist_assert_ok(void);
const node_t *node_get_by_nickname(const char *nickname, int warn_if_unnamed);
void node_get_verbose_nickname(const node_t *node,
char *verbose_name_out);
+void node_get_verbose_nickname_by_id(const char *id_digest,
+ char *verbose_name_out);
int node_is_named(const node_t *node);
int node_is_dir(const node_t *node);
int node_has_descriptor(const node_t *node);
@@ -37,19 +44,21 @@ int node_get_purpose(const node_t *node);
(node_get_purpose((node)) == ROUTER_PURPOSE_BRIDGE)
int node_is_me(const node_t *node);
int node_exit_policy_rejects_all(const node_t *node);
+int node_exit_policy_is_exact(const node_t *node, sa_family_t family);
smartlist_t *node_get_all_orports(const node_t *node);
-void node_get_prim_orport(const node_t *node, tor_addr_port_t *addr_port_out);
-void node_get_pref_orport(const node_t *node, tor_addr_port_t *addr_port_out);
-void node_get_pref_ipv6_orport(const node_t *node,
- tor_addr_port_t *addr_port_out);
-uint32_t node_get_prim_addr_ipv4h(const node_t *node);
int node_allows_single_hop_exits(const node_t *node);
const char *node_get_nickname(const node_t *node);
const char *node_get_platform(const node_t *node);
+uint32_t node_get_prim_addr_ipv4h(const node_t *node);
void node_get_address_string(const node_t *node, char *cp, size_t len);
long node_get_declared_uptime(const node_t *node);
time_t node_get_published_on(const node_t *node);
const smartlist_t *node_get_declared_family(const node_t *node);
+int node_ipv6_preferred(const node_t *node);
+int node_get_prim_orport(const node_t *node, tor_addr_port_t *ap_out);
+void node_get_pref_orport(const node_t *node, tor_addr_port_t *ap_out);
+void node_get_pref_ipv6_orport(const node_t *node, tor_addr_port_t *ap_out);
+int node_has_curve25519_onion_key(const node_t *node);
smartlist_t *nodelist_get_list(void);
@@ -57,11 +66,22 @@ smartlist_t *nodelist_get_list(void);
void node_get_addr(const node_t *node, tor_addr_t *addr_out);
#define node_get_addr_ipv4h(n) node_get_prim_addr_ipv4h((n))
-/* XXXX These need to move out of routerlist.c */
void nodelist_refresh_countries(void);
void node_set_country(node_t *node);
void nodelist_add_node_and_family(smartlist_t *nodes, const node_t *node);
int nodes_in_same_family(const node_t *node1, const node_t *node2);
+const node_t *router_find_exact_exit_enclave(const char *address,
+ uint16_t port);
+int node_is_unreliable(const node_t *router, int need_uptime,
+ int need_capacity, int need_guard);
+int router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
+ int need_uptime);
+void router_set_status(const char *digest, int up);
+int router_have_minimum_dir_info(void);
+void router_dir_info_changed(void);
+const char *get_dir_info_status_string(void);
+int count_loading_descriptors_progress(void);
+
#endif
diff --git a/src/or/ntmain.c b/src/or/ntmain.c
index d001f7be1..e84831404 100644
--- a/src/or/ntmain.c
+++ b/src/or/ntmain.c
@@ -1,9 +1,8 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * 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"
@@ -315,6 +314,7 @@ nt_service_main(void)
case CMD_LIST_FINGERPRINT:
case CMD_HASH_PASSWORD:
case CMD_VERIFY_CONFIG:
+ case CMD_DUMP_CONFIG:
log_err(LD_CONFIG, "Unsupported command (--list-fingerprint, "
"--hash-password, or --verify-config) in NT service.");
break;
diff --git a/src/or/ntmain.h b/src/or/ntmain.h
index 07fdcf466..d3027936c 100644
--- a/src/or/ntmain.h
+++ b/src/or/ntmain.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for ntmain.c.
**/
-#ifndef _TOR_NTMAIN_H
-#define _TOR_NTMAIN_H
+#ifndef TOR_NTMAIN_H
+#define TOR_NTMAIN_H
#ifdef _WIN32
#if !defined (WINCE)
diff --git a/src/or/onion.c b/src/or/onion.c
index f8c4d72b5..ae39f451f 100644
--- a/src/or/onion.c
+++ b/src/or/onion.c
@@ -1,74 +1,157 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
* \file onion.c
- * \brief Functions to queue create cells, and handle onionskin
- * parsing and creation.
+ * \brief Functions to queue create cells, wrap the various onionskin types,
+ * and parse and create the CREATE cell and its allies.
**/
#include "or.h"
#include "circuitlist.h"
#include "config.h"
+#include "cpuworker.h"
+#include "networkstatus.h"
#include "onion.h"
+#include "onion_fast.h"
+#include "onion_ntor.h"
+#include "onion_tap.h"
+#include "relay.h"
#include "rephist.h"
+#include "router.h"
/** Type for a linked list of circuits that are waiting for a free CPU worker
* to process a waiting onion handshake. */
typedef struct onion_queue_t {
+ TOR_TAILQ_ENTRY(onion_queue_t) next;
or_circuit_t *circ;
- char *onionskin;
+ uint16_t handshake_type;
+ create_cell_t *onionskin;
time_t when_added;
- struct onion_queue_t *next;
} onion_queue_t;
/** 5 seconds on the onion queue til we just send back a destroy */
#define ONIONQUEUE_WAIT_CUTOFF 5
-/** First and last elements in the linked list of circuits waiting for CPU
- * workers, or NULL if the list is empty.
- * @{ */
-static onion_queue_t *ol_list=NULL;
-static onion_queue_t *ol_tail=NULL;
-/**@}*/
-/** Length of ol_list */
-static int ol_length=0;
+/** Array of queues of circuits waiting for CPU workers. An element is NULL
+ * if that queue is empty.*/
+TOR_TAILQ_HEAD(onion_queue_head_t, onion_queue_t)
+ ol_list[MAX_ONION_HANDSHAKE_TYPE+1] = {
+ TOR_TAILQ_HEAD_INITIALIZER(ol_list[0]), /* tap */
+ TOR_TAILQ_HEAD_INITIALIZER(ol_list[1]), /* fast */
+ TOR_TAILQ_HEAD_INITIALIZER(ol_list[2]), /* ntor */
+};
+
+/** Number of entries of each type currently in each element of ol_list[]. */
+static int ol_entries[MAX_ONION_HANDSHAKE_TYPE+1];
+
+static int num_ntors_per_tap(void);
+static void onion_queue_entry_remove(onion_queue_t *victim);
+
+/* XXXX024 Check lengths vs MAX_ONIONSKIN_{CHALLENGE,REPLY}_LEN.
+ *
+ * (By which I think I meant, "make sure that no
+ * X_ONIONSKIN_CHALLENGE/REPLY_LEN is greater than
+ * MAX_ONIONSKIN_CHALLENGE/REPLY_LEN." Also, make sure that we can pass
+ * over-large values via EXTEND2/EXTENDED2, for future-compatibility.*/
+
+/** Return true iff we have room to queue another onionskin of type
+ * <b>type</b>. */
+static int
+have_room_for_onionskin(uint16_t type)
+{
+ const or_options_t *options = get_options();
+ int num_cpus;
+ uint64_t tap_usec, ntor_usec;
+ uint64_t ntor_during_tap_usec, tap_during_ntor_usec;
+
+ /* If we've got fewer than 50 entries, we always have room for one more. */
+ if (ol_entries[type] < 50)
+ return 1;
+ num_cpus = get_num_cpus(options);
+ /* Compute how many microseconds we'd expect to need to clear all
+ * onionskins in various combinations of the queues. */
+
+ /* How long would it take to process all the TAP cells in the queue? */
+ tap_usec = estimated_usec_for_onionskins(
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP],
+ ONION_HANDSHAKE_TYPE_TAP) / num_cpus;
+
+ /* How long would it take to process all the NTor cells in the queue? */
+ ntor_usec = estimated_usec_for_onionskins(
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ONION_HANDSHAKE_TYPE_NTOR) / num_cpus;
+
+ /* How long would it take to process the tap cells that we expect to
+ * process while draining the ntor queue? */
+ tap_during_ntor_usec = estimated_usec_for_onionskins(
+ MIN(ol_entries[ONION_HANDSHAKE_TYPE_TAP],
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR] / num_ntors_per_tap()),
+ ONION_HANDSHAKE_TYPE_TAP) / num_cpus;
+
+ /* How long would it take to process the ntor cells that we expect to
+ * process while draining the tap queue? */
+ ntor_during_tap_usec = estimated_usec_for_onionskins(
+ MIN(ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP] * num_ntors_per_tap()),
+ ONION_HANDSHAKE_TYPE_NTOR) / num_cpus;
+
+ /* See whether that exceeds MaxOnionQueueDelay. If so, we can't queue
+ * this. */
+ if (type == ONION_HANDSHAKE_TYPE_NTOR &&
+ (ntor_usec + tap_during_ntor_usec) / 1000 >
+ (uint64_t)options->MaxOnionQueueDelay)
+ return 0;
+
+ if (type == ONION_HANDSHAKE_TYPE_TAP &&
+ (tap_usec + ntor_during_tap_usec) / 1000 >
+ (uint64_t)options->MaxOnionQueueDelay)
+ return 0;
+
+#ifdef CURVE25519_ENABLED
+ /* If we support the ntor handshake, then don't let TAP handshakes use
+ * more than 2/3 of the space on the queue. */
+ if (type == ONION_HANDSHAKE_TYPE_TAP &&
+ tap_usec / 1000 > (uint64_t)options->MaxOnionQueueDelay * 2 / 3)
+ return 0;
+#else
+ (void) type;
+#endif
+
+ return 1;
+}
/** Add <b>circ</b> to the end of ol_list and return 0, except
* if ol_list is too long, in which case do nothing and return -1.
*/
int
-onion_pending_add(or_circuit_t *circ, char *onionskin)
+onion_pending_add(or_circuit_t *circ, create_cell_t *onionskin)
{
onion_queue_t *tmp;
time_t now = time(NULL);
+ if (onionskin->handshake_type > MAX_ONION_HANDSHAKE_TYPE) {
+ log_warn(LD_BUG, "Handshake %d out of range! Dropping.",
+ onionskin->handshake_type);
+ return -1;
+ }
+
tmp = tor_malloc_zero(sizeof(onion_queue_t));
tmp->circ = circ;
+ tmp->handshake_type = onionskin->handshake_type;
tmp->onionskin = onionskin;
tmp->when_added = now;
- if (!ol_tail) {
- tor_assert(!ol_list);
- tor_assert(!ol_length);
- ol_list = tmp;
- ol_tail = tmp;
- ol_length++;
- return 0;
- }
-
- tor_assert(ol_list);
- tor_assert(!ol_tail->next);
-
- if (ol_length >= get_options()->MaxOnionsPending) {
+ if (!have_room_for_onionskin(onionskin->handshake_type)) {
#define WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL (60)
static ratelim_t last_warned =
RATELIM_INIT(WARN_TOO_MANY_CIRC_CREATIONS_INTERVAL);
char *m;
- if ((m = rate_limit_log(&last_warned, approx_time()))) {
+ if (onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR &&
+ (m = rate_limit_log(&last_warned, approx_time()))) {
log_warn(LD_GENERAL,
"Your computer is too slow to handle this many circuit "
"creation requests! Please consider using the "
@@ -80,13 +163,24 @@ onion_pending_add(or_circuit_t *circ, char *onionskin)
return -1;
}
- ol_length++;
- ol_tail->next = tmp;
- ol_tail = tmp;
- while ((int)(now - ol_list->when_added) >= ONIONQUEUE_WAIT_CUTOFF) {
- /* cull elderly requests. */
- circ = ol_list->circ;
- onion_pending_remove(ol_list->circ);
+ ++ol_entries[onionskin->handshake_type];
+ log_info(LD_OR, "New create (%s). Queues now ntor=%d and tap=%d.",
+ onionskin->handshake_type == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap",
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP]);
+
+ circ->onionqueue_entry = tmp;
+ TOR_TAILQ_INSERT_TAIL(&ol_list[onionskin->handshake_type], tmp, next);
+
+ /* cull elderly requests. */
+ while (1) {
+ onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[onionskin->handshake_type]);
+ if (now - head->when_added < (time_t)ONIONQUEUE_WAIT_CUTOFF)
+ break;
+
+ circ = head->circ;
+ circ->onionqueue_entry = NULL;
+ onion_queue_entry_remove(head);
log_info(LD_CIRC,
"Circuit create request is too old; canceling due to overload.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_RESOURCELIMIT);
@@ -94,355 +188,1004 @@ onion_pending_add(or_circuit_t *circ, char *onionskin)
return 0;
}
-/** Remove the first item from ol_list and return it, or return
- * NULL if the list is empty.
+/** Return a fairness parameter, to prefer processing NTOR style
+ * handshakes but still slowly drain the TAP queue so we don't starve
+ * it entirely. */
+static int
+num_ntors_per_tap(void)
+{
+#define DEFAULT_NUM_NTORS_PER_TAP 10
+#define MIN_NUM_NTORS_PER_TAP 1
+#define MAX_NUM_NTORS_PER_TAP 100000
+
+ return networkstatus_get_param(NULL, "NumNTorsPerTAP",
+ DEFAULT_NUM_NTORS_PER_TAP,
+ MIN_NUM_NTORS_PER_TAP,
+ MAX_NUM_NTORS_PER_TAP);
+}
+
+/** Choose which onion queue we'll pull from next. If one is empty choose
+ * the other; if they both have elements, load balance across them but
+ * favoring NTOR. */
+static uint16_t
+decide_next_handshake_type(void)
+{
+ /* The number of times we've chosen ntor lately when both were available. */
+ static int recently_chosen_ntors = 0;
+
+ if (!ol_entries[ONION_HANDSHAKE_TYPE_NTOR])
+ return ONION_HANDSHAKE_TYPE_TAP; /* no ntors? try tap */
+
+ if (!ol_entries[ONION_HANDSHAKE_TYPE_TAP]) {
+
+ /* Nick wants us to prioritize new tap requests when there aren't
+ * any in the queue and we've processed k ntor cells since the last
+ * tap cell. This strategy is maybe a good idea, since it starves tap
+ * less in the case where tap is rare, or maybe a poor idea, since it
+ * makes the new tap cell unfairly jump in front of ntor cells that
+ * got here first. In any case this edge case will only become relevant
+ * once tap is rare. We should reevaluate whether we like this decision
+ * once tap gets more rare. */
+ if (ol_entries[ONION_HANDSHAKE_TYPE_NTOR] &&
+ recently_chosen_ntors <= num_ntors_per_tap())
+ ++recently_chosen_ntors;
+
+ return ONION_HANDSHAKE_TYPE_NTOR; /* no taps? try ntor */
+ }
+
+ /* They both have something queued. Pick ntor if we haven't done that
+ * too much lately. */
+ if (++recently_chosen_ntors <= num_ntors_per_tap()) {
+ return ONION_HANDSHAKE_TYPE_NTOR;
+ }
+
+ /* Else, it's time to let tap have its turn. */
+ recently_chosen_ntors = 0;
+ return ONION_HANDSHAKE_TYPE_TAP;
+}
+
+/** Remove the highest priority item from ol_list[] and return it, or
+ * return NULL if the lists are empty.
*/
or_circuit_t *
-onion_next_task(char **onionskin_out)
+onion_next_task(create_cell_t **onionskin_out)
{
or_circuit_t *circ;
+ uint16_t handshake_to_choose = decide_next_handshake_type();
+ onion_queue_t *head = TOR_TAILQ_FIRST(&ol_list[handshake_to_choose]);
- if (!ol_list)
+ if (!head)
return NULL; /* no onions pending, we're done */
- tor_assert(ol_list->circ);
- tor_assert(ol_list->circ->p_conn); /* make sure it's still valid */
- tor_assert(ol_length > 0);
- circ = ol_list->circ;
- *onionskin_out = ol_list->onionskin;
- ol_list->onionskin = NULL; /* prevent free. */
- onion_pending_remove(ol_list->circ);
+ tor_assert(head->circ);
+ tor_assert(head->handshake_type <= MAX_ONION_HANDSHAKE_TYPE);
+// tor_assert(head->circ->p_chan); /* make sure it's still valid */
+/* XXX I only commented out the above line to make the unit tests
+ * more manageable. That's probably not good long-term. -RD */
+ circ = head->circ;
+ if (head->onionskin)
+ --ol_entries[head->handshake_type];
+ log_info(LD_OR, "Processing create (%s). Queues now ntor=%d and tap=%d.",
+ head->handshake_type == ONION_HANDSHAKE_TYPE_NTOR ? "ntor" : "tap",
+ ol_entries[ONION_HANDSHAKE_TYPE_NTOR],
+ ol_entries[ONION_HANDSHAKE_TYPE_TAP]);
+
+ *onionskin_out = head->onionskin;
+ head->onionskin = NULL; /* prevent free. */
+ circ->onionqueue_entry = NULL;
+ onion_queue_entry_remove(head);
return circ;
}
+/** Return the number of <b>handshake_type</b>-style create requests pending.
+ */
+int
+onion_num_pending(uint16_t handshake_type)
+{
+ return ol_entries[handshake_type];
+}
+
/** Go through ol_list, find the onion_queue_t element which points to
* circ, remove and free that element. Leave circ itself alone.
*/
void
onion_pending_remove(or_circuit_t *circ)
{
- onion_queue_t *tmpo, *victim;
-
- if (!ol_list)
- return; /* nothing here. */
-
- /* first check to see if it's the first entry */
- tmpo = ol_list;
- if (tmpo->circ == circ) {
- /* it's the first one. remove it from the list. */
- ol_list = tmpo->next;
- if (!ol_list)
- ol_tail = NULL;
- ol_length--;
- victim = tmpo;
- } else { /* we need to hunt through the rest of the list */
- for ( ;tmpo->next && tmpo->next->circ != circ; tmpo=tmpo->next) ;
- if (!tmpo->next) {
- log_debug(LD_GENERAL,
- "circ (p_circ_id %d) not in list, probably at cpuworker.",
- circ->p_circ_id);
- return;
- }
- /* now we know tmpo->next->circ == circ */
- victim = tmpo->next;
- tmpo->next = victim->next;
- if (ol_tail == victim)
- ol_tail = tmpo;
- ol_length--;
+ onion_queue_t *victim;
+
+ if (!circ)
+ return;
+
+ victim = circ->onionqueue_entry;
+ if (victim)
+ onion_queue_entry_remove(victim);
+}
+
+/** Remove a queue entry <b>victim</b> from the queue, unlinking it from
+ * its circuit and freeing it and any structures it owns.*/
+static void
+onion_queue_entry_remove(onion_queue_t *victim)
+{
+ if (victim->handshake_type > MAX_ONION_HANDSHAKE_TYPE) {
+ log_warn(LD_BUG, "Handshake %d out of range! Dropping.",
+ victim->handshake_type);
+ /* XXX leaks */
+ return;
}
- /* now victim points to the element that needs to be removed */
+ TOR_TAILQ_REMOVE(&ol_list[victim->handshake_type], victim, next);
+
+ if (victim->circ)
+ victim->circ->onionqueue_entry = NULL;
+
+ if (victim->onionskin)
+ --ol_entries[victim->handshake_type];
tor_free(victim->onionskin);
tor_free(victim);
}
-/*----------------------------------------------------------------------*/
+/** Remove all circuits from the pending list. Called from tor_free_all. */
+void
+clear_pending_onions(void)
+{
+ onion_queue_t *victim, *next;
+ int i;
+ for (i=0; i<=MAX_ONION_HANDSHAKE_TYPE; i++) {
+ for (victim = TOR_TAILQ_FIRST(&ol_list[i]); victim; victim = next) {
+ next = TOR_TAILQ_NEXT(victim,next);
+ onion_queue_entry_remove(victim);
+ }
+ tor_assert(TOR_TAILQ_EMPTY(&ol_list[i]));
+ }
+ memset(ol_entries, 0, sizeof(ol_entries));
+}
-/** Given a router's 128 byte public key,
- * stores the following in onion_skin_out:
- * - [42 bytes] OAEP padding
- * - [16 bytes] Symmetric key for encrypting blob past RSA
- * - [70 bytes] g^x part 1 (inside the RSA)
- * - [58 bytes] g^x part 2 (symmetrically encrypted)
- *
- * Stores the DH private key into handshake_state_out for later completion
- * of the handshake.
- *
- * The meeting point/cookies and auth are zeroed out for now.
+/* ============================================================ */
+
+/** Fill in a server_onion_keys_t object at <b>keys</b> with all of the keys
+ * and other info we might need to do onion handshakes. (We make a copy of
+ * our keys for each cpuworker to avoid race conditions with the main thread,
+ * and to avoid locking) */
+void
+setup_server_onion_keys(server_onion_keys_t *keys)
+{
+ memset(keys, 0, sizeof(server_onion_keys_t));
+ memcpy(keys->my_identity, router_get_my_id_digest(), DIGEST_LEN);
+ dup_onion_keys(&keys->onion_key, &keys->last_onion_key);
+#ifdef CURVE25519_ENABLED
+ keys->curve25519_key_map = construct_ntor_key_map();
+ keys->junk_keypair = tor_malloc_zero(sizeof(curve25519_keypair_t));
+ curve25519_keypair_generate(keys->junk_keypair, 0);
+#endif
+}
+
+/** Release all storage held in <b>keys</b>, but do not free <b>keys</b>
+ * itself (as it's likely to be stack-allocated.) */
+void
+release_server_onion_keys(server_onion_keys_t *keys)
+{
+ if (! keys)
+ return;
+
+ crypto_pk_free(keys->onion_key);
+ crypto_pk_free(keys->last_onion_key);
+#ifdef CURVE25519_ENABLED
+ ntor_key_map_free(keys->curve25519_key_map);
+ tor_free(keys->junk_keypair);
+#endif
+ memset(keys, 0, sizeof(server_onion_keys_t));
+}
+
+/** Release whatever storage is held in <b>state</b>, depending on its
+ * type, and clear its pointer. */
+void
+onion_handshake_state_release(onion_handshake_state_t *state)
+{
+ switch (state->tag) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ crypto_dh_free(state->u.tap);
+ state->u.tap = NULL;
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ fast_handshake_state_free(state->u.fast);
+ state->u.fast = NULL;
+ break;
+#ifdef CURVE25519_ENABLED
+ case ONION_HANDSHAKE_TYPE_NTOR:
+ ntor_handshake_state_free(state->u.ntor);
+ state->u.ntor = NULL;
+ break;
+#endif
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d",
+ (int)state->tag);
+ tor_fragile_assert();
+ }
+}
+
+/** Perform the first step of a circuit-creation handshake of type <b>type</b>
+ * (one of ONION_HANDSHAKE_TYPE_*): generate the initial "onion skin" in
+ * <b>onion_skin_out</b>, and store any state information in <b>state_out</b>.
+ * Return -1 on failure, and the length of the onionskin on acceptance.
*/
int
-onion_skin_create(crypto_pk_t *dest_router_key,
- crypto_dh_t **handshake_state_out,
- char *onion_skin_out) /* ONIONSKIN_CHALLENGE_LEN bytes */
+onion_skin_create(int type,
+ const extend_info_t *node,
+ onion_handshake_state_t *state_out,
+ uint8_t *onion_skin_out)
{
- char challenge[DH_KEY_LEN];
- crypto_dh_t *dh = NULL;
- int dhbytes, pkbytes;
-
- tor_assert(dest_router_key);
- tor_assert(handshake_state_out);
- tor_assert(onion_skin_out);
- *handshake_state_out = NULL;
- memset(onion_skin_out, 0, ONIONSKIN_CHALLENGE_LEN);
+ int r = -1;
- if (!(dh = crypto_dh_new(DH_TYPE_CIRCUIT)))
- goto err;
+ switch (type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (!node->onion_key)
+ return -1;
- dhbytes = crypto_dh_get_bytes(dh);
- pkbytes = (int) crypto_pk_keysize(dest_router_key);
- tor_assert(dhbytes == 128);
- tor_assert(pkbytes == 128);
+ if (onion_skin_TAP_create(node->onion_key,
+ &state_out->u.tap,
+ (char*)onion_skin_out) < 0)
+ return -1;
- if (crypto_dh_get_public(dh, challenge, dhbytes))
- goto err;
+ r = TAP_ONIONSKIN_CHALLENGE_LEN;
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (fast_onionskin_create(&state_out->u.fast, onion_skin_out) < 0)
+ return -1;
- note_crypto_pk_op(ENC_ONIONSKIN);
+ r = CREATE_FAST_LEN;
+ break;
+ case ONION_HANDSHAKE_TYPE_NTOR:
+#ifdef CURVE25519_ENABLED
+ if (tor_mem_is_zero((const char*)node->curve25519_onion_key.public_key,
+ CURVE25519_PUBKEY_LEN))
+ return -1;
+ if (onion_skin_ntor_create((const uint8_t*)node->identity_digest,
+ &node->curve25519_onion_key,
+ &state_out->u.ntor,
+ onion_skin_out) < 0)
+ return -1;
- /* set meeting point, meeting cookie, etc here. Leave zero for now. */
- if (crypto_pk_public_hybrid_encrypt(dest_router_key, onion_skin_out,
- ONIONSKIN_CHALLENGE_LEN,
- challenge, DH_KEY_LEN,
- PK_PKCS1_OAEP_PADDING, 1)<0)
- goto err;
+ r = NTOR_ONIONSKIN_LEN;
+#else
+ return -1;
+#endif
+ break;
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d", type);
+ tor_fragile_assert();
+ r = -1;
+ }
- memwipe(challenge, 0, sizeof(challenge));
- *handshake_state_out = dh;
+ if (r > 0)
+ state_out->tag = (uint16_t) type;
- return 0;
- err:
- memwipe(challenge, 0, sizeof(challenge));
- if (dh) crypto_dh_free(dh);
- return -1;
+ return r;
}
-/** Given an encrypted DH public key as generated by onion_skin_create,
- * and the private key for this onion router, generate the reply (128-byte
- * DH plus the first 20 bytes of shared key material), and store the
- * next key_out_len bytes of key material in key_out.
+/** Perform the second (server-side) step of a circuit-creation handshake of
+ * type <b>type</b>, responding to the client request in <b>onion_skin</b>
+ * using the keys in <b>keys</b>. On success, write our response into
+ * <b>reply_out</b>, generate <b>keys_out_len</b> bytes worth of key material
+ * in <b>keys_out_len</b>, a hidden service nonce to <b>rend_nonce_out</b>,
+ * and return the length of the reply. On failure, return -1.
*/
int
-onion_skin_server_handshake(const char *onion_skin, /*ONIONSKIN_CHALLENGE_LEN*/
- crypto_pk_t *private_key,
- crypto_pk_t *prev_private_key,
- char *handshake_reply_out, /*ONIONSKIN_REPLY_LEN*/
- char *key_out,
- size_t key_out_len)
+onion_skin_server_handshake(int type,
+ const uint8_t *onion_skin, size_t onionskin_len,
+ const server_onion_keys_t *keys,
+ uint8_t *reply_out,
+ uint8_t *keys_out, size_t keys_out_len,
+ uint8_t *rend_nonce_out)
{
- char challenge[ONIONSKIN_CHALLENGE_LEN];
- crypto_dh_t *dh = NULL;
- ssize_t len;
- char *key_material=NULL;
- size_t key_material_len=0;
- int i;
- crypto_pk_t *k;
+ int r = -1;
- len = -1;
- for (i=0;i<2;++i) {
- k = i==0?private_key:prev_private_key;
- if (!k)
- break;
- note_crypto_pk_op(DEC_ONIONSKIN);
- len = crypto_pk_private_hybrid_decrypt(k, challenge,
- ONIONSKIN_CHALLENGE_LEN,
- onion_skin, ONIONSKIN_CHALLENGE_LEN,
- PK_PKCS1_OAEP_PADDING,0);
- if (len>0)
- break;
+ switch (type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (onionskin_len != TAP_ONIONSKIN_CHALLENGE_LEN)
+ return -1;
+ if (onion_skin_TAP_server_handshake((const char*)onion_skin,
+ keys->onion_key, keys->last_onion_key,
+ (char*)reply_out,
+ (char*)keys_out, keys_out_len)<0)
+ return -1;
+ r = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(rend_nonce_out, reply_out+DH_KEY_LEN, DIGEST_LEN);
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (onionskin_len != CREATE_FAST_LEN)
+ return -1;
+ if (fast_server_handshake(onion_skin, reply_out, keys_out, keys_out_len)<0)
+ return -1;
+ r = CREATED_FAST_LEN;
+ memcpy(rend_nonce_out, reply_out+DIGEST_LEN, DIGEST_LEN);
+ break;
+ case ONION_HANDSHAKE_TYPE_NTOR:
+#ifdef CURVE25519_ENABLED
+ if (onionskin_len < NTOR_ONIONSKIN_LEN)
+ return -1;
+ {
+ size_t keys_tmp_len = keys_out_len + DIGEST_LEN;
+ uint8_t *keys_tmp = tor_malloc(keys_out_len + DIGEST_LEN);
+
+ if (onion_skin_ntor_server_handshake(
+ onion_skin, keys->curve25519_key_map,
+ keys->junk_keypair,
+ keys->my_identity,
+ reply_out, keys_tmp, keys_tmp_len)<0) {
+ tor_free(keys_tmp);
+ return -1;
+ }
+ memcpy(keys_out, keys_tmp, keys_out_len);
+ memcpy(rend_nonce_out, keys_tmp+keys_out_len, DIGEST_LEN);
+ memwipe(keys_tmp, 0, keys_tmp_len);
+ tor_free(keys_tmp);
+ r = NTOR_REPLY_LEN;
+ }
+#else
+ return -1;
+#endif
+ break;
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d", type);
+ tor_fragile_assert();
+ return -1;
}
- if (len<0) {
- log_info(LD_PROTOCOL,
- "Couldn't decrypt onionskin: client may be using old onion key");
- goto err;
- } else if (len != DH_KEY_LEN) {
- log_warn(LD_PROTOCOL, "Unexpected onionskin length after decryption: %ld",
- (long)len);
- goto err;
+
+ return r;
+}
+
+/** Perform the final (client-side) step of a circuit-creation handshake of
+ * type <b>type</b>, using our state in <b>handshake_state</b> and the
+ * server's response in <b>reply</b>. On success, generate <b>keys_out_len</b>
+ * bytes worth of key material in <b>keys_out_len</b>, set
+ * <b>rend_authenticator_out</b> to the "KH" field that can be used to
+ * establish introduction points at this hop, and return 0. On failure,
+ * return -1. */
+int
+onion_skin_client_handshake(int type,
+ const onion_handshake_state_t *handshake_state,
+ const uint8_t *reply, size_t reply_len,
+ uint8_t *keys_out, size_t keys_out_len,
+ uint8_t *rend_authenticator_out)
+{
+ if (handshake_state->tag != type)
+ return -1;
+
+ switch (type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (reply_len != TAP_ONIONSKIN_REPLY_LEN) {
+ log_warn(LD_CIRC, "TAP reply was not of the correct length.");
+ return -1;
+ }
+ if (onion_skin_TAP_client_handshake(handshake_state->u.tap,
+ (const char*)reply,
+ (char *)keys_out, keys_out_len) < 0)
+ return -1;
+
+ memcpy(rend_authenticator_out, reply+DH_KEY_LEN, DIGEST_LEN);
+
+ return 0;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (reply_len != CREATED_FAST_LEN) {
+ log_warn(LD_CIRC, "CREATED_FAST reply was not of the correct length.");
+ return -1;
+ }
+ if (fast_client_handshake(handshake_state->u.fast, reply,
+ keys_out, keys_out_len) < 0)
+ return -1;
+
+ memcpy(rend_authenticator_out, reply+DIGEST_LEN, DIGEST_LEN);
+ return 0;
+#ifdef CURVE25519_ENABLED
+ case ONION_HANDSHAKE_TYPE_NTOR:
+ if (reply_len < NTOR_REPLY_LEN) {
+ log_warn(LD_CIRC, "ntor reply was not of the correct length.");
+ return -1;
+ }
+ {
+ size_t keys_tmp_len = keys_out_len + DIGEST_LEN;
+ uint8_t *keys_tmp = tor_malloc(keys_tmp_len);
+ if (onion_skin_ntor_client_handshake(handshake_state->u.ntor,
+ reply,
+ keys_tmp, keys_tmp_len) < 0) {
+ tor_free(keys_tmp);
+ return -1;
+ }
+ memcpy(keys_out, keys_tmp, keys_out_len);
+ memcpy(rend_authenticator_out, keys_tmp + keys_out_len, DIGEST_LEN);
+ memwipe(keys_tmp, 0, keys_tmp_len);
+ tor_free(keys_tmp);
+ }
+ return 0;
+#endif
+ default:
+ log_warn(LD_BUG, "called with unknown handshake state type %d", type);
+ tor_fragile_assert();
+ return -1;
}
+}
- dh = crypto_dh_new(DH_TYPE_CIRCUIT);
- if (!dh) {
- log_warn(LD_BUG, "Couldn't allocate DH key");
- goto err;
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. If
+ * <b>unknown_ok</b> is true, allow cells with handshake types we don't
+ * recognize. */
+static int
+check_create_cell(const create_cell_t *cell, int unknown_ok)
+{
+ switch (cell->cell_type) {
+ case CELL_CREATE:
+ if (cell->handshake_type != ONION_HANDSHAKE_TYPE_TAP &&
+ cell->handshake_type != ONION_HANDSHAKE_TYPE_NTOR)
+ return -1;
+ break;
+ case CELL_CREATE_FAST:
+ if (cell->handshake_type != ONION_HANDSHAKE_TYPE_FAST)
+ return -1;
+ break;
+ case CELL_CREATE2:
+ break;
+ default:
+ return -1;
}
- if (crypto_dh_get_public(dh, handshake_reply_out, DH_KEY_LEN)) {
- log_info(LD_GENERAL, "crypto_dh_get_public failed.");
- goto err;
+
+ switch (cell->handshake_type) {
+ case ONION_HANDSHAKE_TYPE_TAP:
+ if (cell->handshake_len != TAP_ONIONSKIN_CHALLENGE_LEN)
+ return -1;
+ break;
+ case ONION_HANDSHAKE_TYPE_FAST:
+ if (cell->handshake_len != CREATE_FAST_LEN)
+ return -1;
+ break;
+#ifdef CURVE25519_ENABLED
+ case ONION_HANDSHAKE_TYPE_NTOR:
+ if (cell->handshake_len != NTOR_ONIONSKIN_LEN)
+ return -1;
+ break;
+#endif
+ default:
+ if (! unknown_ok)
+ return -1;
}
- key_material_len = DIGEST_LEN+key_out_len;
- key_material = tor_malloc(key_material_len);
- len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh, challenge,
- DH_KEY_LEN, key_material,
- key_material_len);
- if (len < 0) {
- log_info(LD_GENERAL, "crypto_dh_compute_secret failed.");
- goto err;
+ return 0;
+}
+
+/** Write the various parameters into the create cell. Separate from
+ * create_cell_parse() to make unit testing easier.
+ */
+void
+create_cell_init(create_cell_t *cell_out, uint8_t cell_type,
+ uint16_t handshake_type, uint16_t handshake_len,
+ const uint8_t *onionskin)
+{
+ memset(cell_out, 0, sizeof(*cell_out));
+
+ cell_out->cell_type = cell_type;
+ cell_out->handshake_type = handshake_type;
+ cell_out->handshake_len = handshake_len;
+ memcpy(cell_out->onionskin, onionskin, handshake_len);
+}
+
+/** Helper: parse the CREATE2 payload at <b>p</b>, which could be up to
+ * <b>p_len</b> bytes long, and use it to fill the fields of
+ * <b>cell_out</b>. Return 0 on success and -1 on failure.
+ *
+ * Note that part of the body of an EXTEND2 cell is a CREATE2 payload, so
+ * this function is also used for parsing those.
+ */
+static int
+parse_create2_payload(create_cell_t *cell_out, const uint8_t *p, size_t p_len)
+{
+ uint16_t handshake_type, handshake_len;
+
+ if (p_len < 4)
+ return -1;
+
+ handshake_type = ntohs(get_uint16(p));
+ handshake_len = ntohs(get_uint16(p+2));
+
+ if (handshake_len > CELL_PAYLOAD_SIZE - 4 || handshake_len > p_len - 4)
+ return -1;
+ if (handshake_type == ONION_HANDSHAKE_TYPE_FAST)
+ return -1;
+
+ create_cell_init(cell_out, CELL_CREATE2, handshake_type, handshake_len,
+ p+4);
+ return 0;
+}
+
+/** Magic string which, in a CREATE or EXTEND cell, indicates that a seeming
+ * TAP payload is really an ntor payload. We'd do away with this if every
+ * relay supported EXTEND2, but we want to be able to extend from A to B with
+ * ntor even when A doesn't understand EXTEND2 and so can't generate a
+ * CREATE2 cell.
+ **/
+#define NTOR_CREATE_MAGIC "ntorNTORntorNTOR"
+
+/** Parse a CREATE, CREATE_FAST, or CREATE2 cell from <b>cell_in</b> into
+ * <b>cell_out</b>. Return 0 on success, -1 on failure. (We reject some
+ * syntactically valid CREATE2 cells that we can't generate or react to.) */
+int
+create_cell_parse(create_cell_t *cell_out, const cell_t *cell_in)
+{
+ switch (cell_in->command) {
+ case CELL_CREATE:
+ if (tor_memeq(cell_in->payload, NTOR_CREATE_MAGIC, 16)) {
+ create_cell_init(cell_out, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR,
+ NTOR_ONIONSKIN_LEN, cell_in->payload+16);
+ } else {
+ create_cell_init(cell_out, CELL_CREATE, ONION_HANDSHAKE_TYPE_TAP,
+ TAP_ONIONSKIN_CHALLENGE_LEN, cell_in->payload);
+ }
+ break;
+ case CELL_CREATE_FAST:
+ create_cell_init(cell_out, CELL_CREATE_FAST, ONION_HANDSHAKE_TYPE_FAST,
+ CREATE_FAST_LEN, cell_in->payload);
+ break;
+ case CELL_CREATE2:
+ if (parse_create2_payload(cell_out, cell_in->payload,
+ CELL_PAYLOAD_SIZE) < 0)
+ return -1;
+ break;
+ default:
+ return -1;
}
- /* send back H(K|0) as proof that we learned K. */
- memcpy(handshake_reply_out+DH_KEY_LEN, key_material, DIGEST_LEN);
+ return check_create_cell(cell_out, 0);
+}
- /* use the rest of the key material for our shared keys, digests, etc */
- memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. */
+static int
+check_created_cell(const created_cell_t *cell)
+{
+ switch (cell->cell_type) {
+ case CELL_CREATED:
+ if (cell->handshake_len != TAP_ONIONSKIN_REPLY_LEN &&
+ cell->handshake_len != NTOR_REPLY_LEN)
+ return -1;
+ break;
+ case CELL_CREATED_FAST:
+ if (cell->handshake_len != CREATED_FAST_LEN)
+ return -1;
+ break;
+ case CELL_CREATED2:
+ if (cell->handshake_len > RELAY_PAYLOAD_SIZE-2)
+ return -1;
+ break;
+ }
- memwipe(challenge, 0, sizeof(challenge));
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
- crypto_dh_free(dh);
return 0;
- err:
- memwipe(challenge, 0, sizeof(challenge));
- if (key_material) {
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
+}
+
+/** Parse a CREATED, CREATED_FAST, or CREATED2 cell from <b>cell_in</b> into
+ * <b>cell_out</b>. Return 0 on success, -1 on failure. */
+int
+created_cell_parse(created_cell_t *cell_out, const cell_t *cell_in)
+{
+ memset(cell_out, 0, sizeof(*cell_out));
+
+ switch (cell_in->command) {
+ case CELL_CREATED:
+ cell_out->cell_type = CELL_CREATED;
+ cell_out->handshake_len = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(cell_out->reply, cell_in->payload, TAP_ONIONSKIN_REPLY_LEN);
+ break;
+ case CELL_CREATED_FAST:
+ cell_out->cell_type = CELL_CREATED_FAST;
+ cell_out->handshake_len = CREATED_FAST_LEN;
+ memcpy(cell_out->reply, cell_in->payload, CREATED_FAST_LEN);
+ break;
+ case CELL_CREATED2:
+ {
+ const uint8_t *p = cell_in->payload;
+ cell_out->cell_type = CELL_CREATED2;
+ cell_out->handshake_len = ntohs(get_uint16(p));
+ if (cell_out->handshake_len > CELL_PAYLOAD_SIZE - 2)
+ return -1;
+ memcpy(cell_out->reply, p+2, cell_out->handshake_len);
+ break;
+ }
}
- if (dh) crypto_dh_free(dh);
- return -1;
+ return check_created_cell(cell_out);
}
-/** Finish the client side of the DH handshake.
- * Given the 128 byte DH reply + 20 byte hash as generated by
- * onion_skin_server_handshake and the handshake state generated by
- * onion_skin_create, verify H(K) with the first 20 bytes of shared
- * key material, then generate key_out_len more bytes of shared key
- * material and store them in key_out.
- *
- * After the invocation, call crypto_dh_free on handshake_state.
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. */
+static int
+check_extend_cell(const extend_cell_t *cell)
+{
+ if (tor_digest_is_zero((const char*)cell->node_id))
+ return -1;
+ /* We don't currently allow EXTEND2 cells without an IPv4 address */
+ if (tor_addr_family(&cell->orport_ipv4.addr) == AF_UNSPEC)
+ return -1;
+ if (cell->create_cell.cell_type == CELL_CREATE) {
+ if (cell->cell_type != RELAY_COMMAND_EXTEND)
+ return -1;
+ } else if (cell->create_cell.cell_type == CELL_CREATE2) {
+ if (cell->cell_type != RELAY_COMMAND_EXTEND2 &&
+ cell->cell_type != RELAY_COMMAND_EXTEND)
+ return -1;
+ } else {
+ /* In particular, no CREATE_FAST cells are allowed */
+ return -1;
+ }
+ if (cell->create_cell.handshake_type == ONION_HANDSHAKE_TYPE_FAST)
+ return -1;
+
+ return check_create_cell(&cell->create_cell, 1);
+}
+
+/** Protocol constants for specifier types in EXTEND2
+ * @{
*/
+#define SPECTYPE_IPV4 0
+#define SPECTYPE_IPV6 1
+#define SPECTYPE_LEGACY_ID 2
+/** @} */
+
+/** Parse an EXTEND or EXTEND2 cell (according to <b>command</b>) from the
+ * <b>payload_length</b> bytes of <b>payload</b> into <b>cell_out</b>. Return
+ * 0 on success, -1 on failure. */
int
-onion_skin_client_handshake(crypto_dh_t *handshake_state,
- const char *handshake_reply, /* ONIONSKIN_REPLY_LEN bytes */
- char *key_out,
- size_t key_out_len)
+extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
+ const uint8_t *payload, size_t payload_length)
{
- ssize_t len;
- char *key_material=NULL;
- size_t key_material_len;
- tor_assert(crypto_dh_get_bytes(handshake_state) == DH_KEY_LEN);
-
- key_material_len = DIGEST_LEN + key_out_len;
- key_material = tor_malloc(key_material_len);
- len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, handshake_state,
- handshake_reply, DH_KEY_LEN, key_material,
- key_material_len);
- if (len < 0)
- goto err;
-
- if (tor_memneq(key_material, handshake_reply+DH_KEY_LEN, DIGEST_LEN)) {
- /* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on onion handshake. "
- "Bug or attack.");
- goto err;
+ const uint8_t *eop;
+
+ memset(cell_out, 0, sizeof(*cell_out));
+ if (payload_length > RELAY_PAYLOAD_SIZE)
+ return -1;
+ eop = payload + payload_length;
+
+ switch (command) {
+ case RELAY_COMMAND_EXTEND:
+ {
+ if (payload_length != 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN)
+ return -1;
+
+ cell_out->cell_type = RELAY_COMMAND_EXTEND;
+ tor_addr_from_ipv4n(&cell_out->orport_ipv4.addr, get_uint32(payload));
+ cell_out->orport_ipv4.port = ntohs(get_uint16(payload+4));
+ tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
+ if (tor_memeq(payload + 6, NTOR_CREATE_MAGIC, 16)) {
+ cell_out->create_cell.cell_type = CELL_CREATE2;
+ cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_NTOR;
+ cell_out->create_cell.handshake_len = NTOR_ONIONSKIN_LEN;
+ memcpy(cell_out->create_cell.onionskin, payload + 22,
+ NTOR_ONIONSKIN_LEN);
+ } else {
+ cell_out->create_cell.cell_type = CELL_CREATE;
+ cell_out->create_cell.handshake_type = ONION_HANDSHAKE_TYPE_TAP;
+ cell_out->create_cell.handshake_len = TAP_ONIONSKIN_CHALLENGE_LEN;
+ memcpy(cell_out->create_cell.onionskin, payload + 6,
+ TAP_ONIONSKIN_CHALLENGE_LEN);
+ }
+ memcpy(cell_out->node_id, payload + 6 + TAP_ONIONSKIN_CHALLENGE_LEN,
+ DIGEST_LEN);
+ break;
+ }
+ case RELAY_COMMAND_EXTEND2:
+ {
+ uint8_t n_specs, spectype, speclen;
+ int i;
+ int found_ipv4 = 0, found_ipv6 = 0, found_id = 0;
+ tor_addr_make_unspec(&cell_out->orport_ipv4.addr);
+ tor_addr_make_unspec(&cell_out->orport_ipv6.addr);
+
+ if (payload_length == 0)
+ return -1;
+
+ cell_out->cell_type = RELAY_COMMAND_EXTEND2;
+ n_specs = *payload++;
+ /* Parse the specifiers. We'll only take the first IPv4 and first IPv6
+ * address, and the node ID, and ignore everything else */
+ for (i = 0; i < n_specs; ++i) {
+ if (eop - payload < 2)
+ return -1;
+ spectype = payload[0];
+ speclen = payload[1];
+ payload += 2;
+ if (eop - payload < speclen)
+ return -1;
+ switch (spectype) {
+ case SPECTYPE_IPV4:
+ if (speclen != 6)
+ return -1;
+ if (!found_ipv4) {
+ tor_addr_from_ipv4n(&cell_out->orport_ipv4.addr,
+ get_uint32(payload));
+ cell_out->orport_ipv4.port = ntohs(get_uint16(payload+4));
+ found_ipv4 = 1;
+ }
+ break;
+ case SPECTYPE_IPV6:
+ if (speclen != 18)
+ return -1;
+ if (!found_ipv6) {
+ tor_addr_from_ipv6_bytes(&cell_out->orport_ipv6.addr,
+ (const char*)payload);
+ cell_out->orport_ipv6.port = ntohs(get_uint16(payload+16));
+ found_ipv6 = 1;
+ }
+ break;
+ case SPECTYPE_LEGACY_ID:
+ if (speclen != 20)
+ return -1;
+ if (found_id)
+ return -1;
+ memcpy(cell_out->node_id, payload, 20);
+ found_id = 1;
+ break;
+ }
+ payload += speclen;
+ }
+ if (!found_id || !found_ipv4)
+ return -1;
+ if (parse_create2_payload(&cell_out->create_cell,payload,eop-payload)<0)
+ return -1;
+ break;
+ }
+ default:
+ return -1;
}
- /* use the rest of the key material for our shared keys, digests, etc */
- memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+ return check_extend_cell(cell_out);
+}
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
- return 0;
- err:
- memwipe(key_material, 0, key_material_len);
- tor_free(key_material);
- return -1;
+/** Helper: return 0 if <b>cell</b> appears valid, -1 otherwise. */
+static int
+check_extended_cell(const extended_cell_t *cell)
+{
+ if (cell->created_cell.cell_type == CELL_CREATED) {
+ if (cell->cell_type != RELAY_COMMAND_EXTENDED)
+ return -1;
+ } else if (cell->created_cell.cell_type == CELL_CREATED2) {
+ if (cell->cell_type != RELAY_COMMAND_EXTENDED2)
+ return -1;
+ } else {
+ return -1;
+ }
+
+ return check_created_cell(&cell->created_cell);
}
-/** Implement the server side of the CREATE_FAST abbreviated handshake. The
- * client has provided DIGEST_LEN key bytes in <b>key_in</b> ("x"). We
- * generate a reply of DIGEST_LEN*2 bytes in <b>key_out</b>, consisting of a
- * new random "y", followed by H(x|y) to check for correctness. We set
- * <b>key_out_len</b> bytes of key material in <b>key_out</b>.
- * Return 0 on success, &lt;0 on failure.
- **/
+/** Parse an EXTENDED or EXTENDED2 cell (according to <b>command</b>) from the
+ * <b>payload_length</b> bytes of <b>payload</b> into <b>cell_out</b>. Return
+ * 0 on success, -1 on failure. */
int
-fast_server_handshake(const uint8_t *key_in, /* DIGEST_LEN bytes */
- uint8_t *handshake_reply_out, /* DIGEST_LEN*2 bytes */
- uint8_t *key_out,
- size_t key_out_len)
+extended_cell_parse(extended_cell_t *cell_out,
+ const uint8_t command, const uint8_t *payload,
+ size_t payload_len)
{
- char tmp[DIGEST_LEN+DIGEST_LEN];
- char *out = NULL;
- size_t out_len;
- int r = -1;
+ memset(cell_out, 0, sizeof(*cell_out));
+ if (payload_len > RELAY_PAYLOAD_SIZE)
+ return -1;
+
+ switch (command) {
+ case RELAY_COMMAND_EXTENDED:
+ if (payload_len != TAP_ONIONSKIN_REPLY_LEN)
+ return -1;
+ cell_out->cell_type = RELAY_COMMAND_EXTENDED;
+ cell_out->created_cell.cell_type = CELL_CREATED;
+ cell_out->created_cell.handshake_len = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(cell_out->created_cell.reply, payload, TAP_ONIONSKIN_REPLY_LEN);
+ break;
+ case RELAY_COMMAND_EXTENDED2:
+ {
+ cell_out->cell_type = RELAY_COMMAND_EXTENDED2;
+ cell_out->created_cell.cell_type = CELL_CREATED2;
+ cell_out->created_cell.handshake_len = ntohs(get_uint16(payload));
+ if (cell_out->created_cell.handshake_len > RELAY_PAYLOAD_SIZE - 2 ||
+ cell_out->created_cell.handshake_len > payload_len - 2)
+ return -1;
+ memcpy(cell_out->created_cell.reply, payload+2,
+ cell_out->created_cell.handshake_len);
+ }
+ break;
+ default:
+ return -1;
+ }
+
+ return check_extended_cell(cell_out);
+}
- if (crypto_rand((char*)handshake_reply_out, DIGEST_LEN)<0)
+/** Fill <b>cell_out</b> with a correctly formatted version of the
+ * CREATE{,_FAST,2} cell in <b>cell_in</b>. Return 0 on success, -1 on
+ * failure. This is a cell we didn't originate if <b>relayed</b> is true. */
+static int
+create_cell_format_impl(cell_t *cell_out, const create_cell_t *cell_in,
+ int relayed)
+{
+ uint8_t *p;
+ size_t space;
+ if (check_create_cell(cell_in, relayed) < 0)
return -1;
- memcpy(tmp, key_in, DIGEST_LEN);
- memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
- out_len = key_out_len+DIGEST_LEN;
- out = tor_malloc(out_len);
- if (crypto_expand_key_material(tmp, sizeof(tmp), out, out_len)) {
- goto done;
+ memset(cell_out->payload, 0, sizeof(cell_out->payload));
+ cell_out->command = cell_in->cell_type;
+
+ p = cell_out->payload;
+ space = sizeof(cell_out->payload);
+
+ switch (cell_in->cell_type) {
+ case CELL_CREATE:
+ if (cell_in->handshake_type == ONION_HANDSHAKE_TYPE_NTOR) {
+ memcpy(p, NTOR_CREATE_MAGIC, 16);
+ p += 16;
+ space -= 16;
+ }
+ /* Fall through */
+ case CELL_CREATE_FAST:
+ tor_assert(cell_in->handshake_len <= space);
+ memcpy(p, cell_in->onionskin, cell_in->handshake_len);
+ break;
+ case CELL_CREATE2:
+ tor_assert(cell_in->handshake_len <= sizeof(cell_out->payload)-4);
+ set_uint16(cell_out->payload, htons(cell_in->handshake_type));
+ set_uint16(cell_out->payload+2, htons(cell_in->handshake_len));
+ memcpy(cell_out->payload + 4, cell_in->onionskin, cell_in->handshake_len);
+ break;
+ default:
+ return -1;
}
- memcpy(handshake_reply_out+DIGEST_LEN, out, DIGEST_LEN);
- memcpy(key_out, out+DIGEST_LEN, key_out_len);
- r = 0;
- done:
- memwipe(tmp, 0, sizeof(tmp));
- memwipe(out, 0, out_len);
- tor_free(out);
- return r;
+
+ return 0;
}
-/** Implement the second half of the client side of the CREATE_FAST handshake.
- * We sent the server <b>handshake_state</b> ("x") already, and the server
- * told us <b>handshake_reply_out</b> (y|H(x|y)). Make sure that the hash is
- * correct, and generate key material in <b>key_out</b>. Return 0 on success,
- * true on failure.
- *
- * NOTE: The "CREATE_FAST" handshake path is distinguishable from regular
- * "onionskin" handshakes, and is not secure if an adversary can see or modify
- * the messages. Therefore, it should only be used by clients, and only as
- * the first hop of a circuit (since the first hop is already authenticated
- * and protected by TLS).
- */
int
-fast_client_handshake(const uint8_t *handshake_state,/*DIGEST_LEN bytes*/
- const uint8_t *handshake_reply_out,/*DIGEST_LEN*2 bytes*/
- uint8_t *key_out,
- size_t key_out_len)
+create_cell_format(cell_t *cell_out, const create_cell_t *cell_in)
{
- char tmp[DIGEST_LEN+DIGEST_LEN];
- char *out;
- size_t out_len;
- int r = -1;
+ return create_cell_format_impl(cell_out, cell_in, 0);
+}
+
+int
+create_cell_format_relayed(cell_t *cell_out, const create_cell_t *cell_in)
+{
+ return create_cell_format_impl(cell_out, cell_in, 1);
+}
- memcpy(tmp, handshake_state, DIGEST_LEN);
- memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
- out_len = key_out_len+DIGEST_LEN;
- out = tor_malloc(out_len);
- if (crypto_expand_key_material(tmp, sizeof(tmp), out, out_len)) {
- goto done;
+/** Fill <b>cell_out</b> with a correctly formatted version of the
+ * CREATED{,_FAST,2} cell in <b>cell_in</b>. Return 0 on success, -1 on
+ * failure. */
+int
+created_cell_format(cell_t *cell_out, const created_cell_t *cell_in)
+{
+ if (check_created_cell(cell_in) < 0)
+ return -1;
+
+ memset(cell_out->payload, 0, sizeof(cell_out->payload));
+ cell_out->command = cell_in->cell_type;
+
+ switch (cell_in->cell_type) {
+ case CELL_CREATED:
+ case CELL_CREATED_FAST:
+ tor_assert(cell_in->handshake_len <= sizeof(cell_out->payload));
+ memcpy(cell_out->payload, cell_in->reply, cell_in->handshake_len);
+ break;
+ case CELL_CREATED2:
+ tor_assert(cell_in->handshake_len <= sizeof(cell_out->payload)-2);
+ set_uint16(cell_out->payload, htons(cell_in->handshake_len));
+ memcpy(cell_out->payload + 2, cell_in->reply, cell_in->handshake_len);
+ break;
+ default:
+ return -1;
}
- if (tor_memneq(out, handshake_reply_out+DIGEST_LEN, DIGEST_LEN)) {
- /* H(K) does *not* match. Something fishy. */
- log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on fast handshake. "
- "Bug or attack.");
- goto done;
+ return 0;
+}
+
+/** Format the EXTEND{,2} cell in <b>cell_in</b>, storing its relay payload in
+ * <b>payload_out</b>, the number of bytes used in *<b>len_out</b>, and the
+ * relay command in *<b>command_out</b>. The <b>payload_out</b> must have
+ * RELAY_PAYLOAD_SIZE bytes available. Return 0 on success, -1 on failure. */
+int
+extend_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extend_cell_t *cell_in)
+{
+ uint8_t *p, *eop;
+ if (check_extend_cell(cell_in) < 0)
+ return -1;
+
+ p = payload_out;
+ eop = payload_out + RELAY_PAYLOAD_SIZE;
+
+ memset(p, 0, RELAY_PAYLOAD_SIZE);
+
+ switch (cell_in->cell_type) {
+ case RELAY_COMMAND_EXTEND:
+ {
+ *command_out = RELAY_COMMAND_EXTEND;
+ *len_out = 6 + TAP_ONIONSKIN_CHALLENGE_LEN + DIGEST_LEN;
+ set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr));
+ set_uint16(p+4, ntohs(cell_in->orport_ipv4.port));
+ if (cell_in->create_cell.handshake_type == ONION_HANDSHAKE_TYPE_NTOR) {
+ memcpy(p+6, NTOR_CREATE_MAGIC, 16);
+ memcpy(p+22, cell_in->create_cell.onionskin, NTOR_ONIONSKIN_LEN);
+ } else {
+ memcpy(p+6, cell_in->create_cell.onionskin,
+ TAP_ONIONSKIN_CHALLENGE_LEN);
+ }
+ memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, cell_in->node_id, DIGEST_LEN);
+ }
+ break;
+ case RELAY_COMMAND_EXTEND2:
+ {
+ uint8_t n = 2;
+ *command_out = RELAY_COMMAND_EXTEND2;
+
+ *p++ = n; /* 2 identifiers */
+ *p++ = SPECTYPE_IPV4; /* First is IPV4. */
+ *p++ = 6; /* It's 6 bytes long. */
+ set_uint32(p, tor_addr_to_ipv4n(&cell_in->orport_ipv4.addr));
+ set_uint16(p+4, htons(cell_in->orport_ipv4.port));
+ p += 6;
+ *p++ = SPECTYPE_LEGACY_ID; /* Next is an identity digest. */
+ *p++ = 20; /* It's 20 bytes long */
+ memcpy(p, cell_in->node_id, DIGEST_LEN);
+ p += 20;
+
+ /* Now we can send the handshake */
+ set_uint16(p, htons(cell_in->create_cell.handshake_type));
+ set_uint16(p+2, htons(cell_in->create_cell.handshake_len));
+ p += 4;
+
+ if (cell_in->create_cell.handshake_len > eop - p)
+ return -1;
+
+ memcpy(p, cell_in->create_cell.onionskin,
+ cell_in->create_cell.handshake_len);
+
+ p += cell_in->create_cell.handshake_len;
+ *len_out = p - payload_out;
+ }
+ break;
+ default:
+ return -1;
}
- memcpy(key_out, out+DIGEST_LEN, key_out_len);
- r = 0;
- done:
- memwipe(tmp, 0, sizeof(tmp));
- memwipe(out, 0, out_len);
- tor_free(out);
- return r;
+
+ return 0;
}
-/** Remove all circuits from the pending list. Called from tor_free_all. */
-void
-clear_pending_onions(void)
+/** Format the EXTENDED{,2} cell in <b>cell_in</b>, storing its relay payload
+ * in <b>payload_out</b>, the number of bytes used in *<b>len_out</b>, and the
+ * relay command in *<b>command_out</b>. The <b>payload_out</b> must have
+ * RELAY_PAYLOAD_SIZE bytes available. Return 0 on success, -1 on failure. */
+int
+extended_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extended_cell_t *cell_in)
{
- while (ol_list) {
- onion_queue_t *victim = ol_list;
- ol_list = victim->next;
- tor_free(victim->onionskin);
- tor_free(victim);
+ uint8_t *p;
+ if (check_extended_cell(cell_in) < 0)
+ return -1;
+
+ p = payload_out;
+ memset(p, 0, RELAY_PAYLOAD_SIZE);
+
+ switch (cell_in->cell_type) {
+ case RELAY_COMMAND_EXTENDED:
+ {
+ *command_out = RELAY_COMMAND_EXTENDED;
+ *len_out = TAP_ONIONSKIN_REPLY_LEN;
+ memcpy(payload_out, cell_in->created_cell.reply,
+ TAP_ONIONSKIN_REPLY_LEN);
+ }
+ break;
+ case RELAY_COMMAND_EXTENDED2:
+ {
+ *command_out = RELAY_COMMAND_EXTENDED2;
+ *len_out = 2 + cell_in->created_cell.handshake_len;
+ set_uint16(payload_out, htons(cell_in->created_cell.handshake_len));
+ if (2+cell_in->created_cell.handshake_len > RELAY_PAYLOAD_SIZE)
+ return -1;
+ memcpy(payload_out+2, cell_in->created_cell.reply,
+ cell_in->created_cell.handshake_len);
+ }
+ break;
+ default:
+ return -1;
}
- ol_list = ol_tail = NULL;
- ol_length = 0;
+
+ return 0;
}
diff --git a/src/or/onion.h b/src/or/onion.h
index 7e0f873c7..d62f032b8 100644
--- a/src/or/onion.h
+++ b/src/or/onion.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,40 +9,114 @@
* \brief Header file for onion.c.
**/
-#ifndef _TOR_ONION_H
-#define _TOR_ONION_H
+#ifndef TOR_ONION_H
+#define TOR_ONION_H
-int onion_pending_add(or_circuit_t *circ, char *onionskin);
-or_circuit_t *onion_next_task(char **onionskin_out);
+struct create_cell_t;
+int onion_pending_add(or_circuit_t *circ, struct create_cell_t *onionskin);
+or_circuit_t *onion_next_task(struct create_cell_t **onionskin_out);
+int onion_num_pending(uint16_t handshake_type);
void onion_pending_remove(or_circuit_t *circ);
+void clear_pending_onions(void);
+
+typedef struct server_onion_keys_t {
+ uint8_t my_identity[DIGEST_LEN];
+ crypto_pk_t *onion_key;
+ crypto_pk_t *last_onion_key;
+#ifdef CURVE25519_ENABLED
+ di_digest256_map_t *curve25519_key_map;
+ curve25519_keypair_t *junk_keypair;
+#endif
+} server_onion_keys_t;
-int onion_skin_create(crypto_pk_t *router_key,
- crypto_dh_t **handshake_state_out,
- char *onion_skin_out);
+#define MAX_ONIONSKIN_CHALLENGE_LEN 255
+#define MAX_ONIONSKIN_REPLY_LEN 255
-int onion_skin_server_handshake(const char *onion_skin,
- crypto_pk_t *private_key,
- crypto_pk_t *prev_private_key,
- char *handshake_reply_out,
- char *key_out,
- size_t key_out_len);
+void setup_server_onion_keys(server_onion_keys_t *keys);
+void release_server_onion_keys(server_onion_keys_t *keys);
-int onion_skin_client_handshake(crypto_dh_t *handshake_state,
- const char *handshake_reply,
- char *key_out,
- size_t key_out_len);
+void onion_handshake_state_release(onion_handshake_state_t *state);
-int fast_server_handshake(const uint8_t *key_in,
- uint8_t *handshake_reply_out,
- uint8_t *key_out,
- size_t key_out_len);
+int onion_skin_create(int type,
+ const extend_info_t *node,
+ onion_handshake_state_t *state_out,
+ uint8_t *onion_skin_out);
+int onion_skin_server_handshake(int type,
+ const uint8_t *onion_skin, size_t onionskin_len,
+ const server_onion_keys_t *keys,
+ uint8_t *reply_out,
+ uint8_t *keys_out, size_t key_out_len,
+ uint8_t *rend_nonce_out);
+int onion_skin_client_handshake(int type,
+ const onion_handshake_state_t *handshake_state,
+ const uint8_t *reply, size_t reply_len,
+ uint8_t *keys_out, size_t key_out_len,
+ uint8_t *rend_authenticator_out);
-int fast_client_handshake(const uint8_t *handshake_state,
- const uint8_t *handshake_reply_out,
- uint8_t *key_out,
- size_t key_out_len);
+/** A parsed CREATE, CREATE_FAST, or CREATE2 cell. */
+typedef struct create_cell_t {
+ /** The cell command. One of CREATE{,_FAST,2} */
+ uint8_t cell_type;
+ /** One of the ONION_HANDSHAKE_TYPE_* values */
+ uint16_t handshake_type;
+ /** The number of bytes used in <b>onionskin</b>. */
+ uint16_t handshake_len;
+ /** The client-side message for the circuit creation handshake. */
+ uint8_t onionskin[CELL_PAYLOAD_SIZE - 4];
+} create_cell_t;
-void clear_pending_onions(void);
+/** A parsed CREATED, CREATED_FAST, or CREATED2 cell. */
+typedef struct created_cell_t {
+ /** The cell command. One of CREATED{,_FAST,2} */
+ uint8_t cell_type;
+ /** The number of bytes used in <b>reply</b>. */
+ uint16_t handshake_len;
+ /** The server-side message for the circuit creation handshake. */
+ uint8_t reply[CELL_PAYLOAD_SIZE - 2];
+} created_cell_t;
+
+/** A parsed RELAY_EXTEND or RELAY_EXTEND2 cell */
+typedef struct extend_cell_t {
+ /** One of RELAY_EXTEND or RELAY_EXTEND2 */
+ uint8_t cell_type;
+ /** An IPv4 address and port for the node we're connecting to. */
+ tor_addr_port_t orport_ipv4;
+ /** An IPv6 address and port for the node we're connecting to. Not currently
+ * used. */
+ tor_addr_port_t orport_ipv6;
+ /** Identity fingerprint of the node we're conecting to.*/
+ uint8_t node_id[DIGEST_LEN];
+ /** The "create cell" embedded in this extend cell. Note that unlike the
+ * create cells we generate ourself, this once can have a handshake type we
+ * don't recognize. */
+ create_cell_t create_cell;
+} extend_cell_t;
+
+/** A parsed RELAY_EXTEND or RELAY_EXTEND2 cell */
+typedef struct extended_cell_t {
+ /** One of RELAY_EXTENDED or RELAY_EXTENDED2. */
+ uint8_t cell_type;
+ /** The "created cell" embedded in this extended cell. */
+ created_cell_t created_cell;
+} extended_cell_t;
+
+void create_cell_init(create_cell_t *cell_out, uint8_t cell_type,
+ uint16_t handshake_type, uint16_t handshake_len,
+ const uint8_t *onionskin);
+int create_cell_parse(create_cell_t *cell_out, const cell_t *cell_in);
+int created_cell_parse(created_cell_t *cell_out, const cell_t *cell_in);
+int extend_cell_parse(extend_cell_t *cell_out, const uint8_t command,
+ const uint8_t *payload_in, size_t payload_len);
+int extended_cell_parse(extended_cell_t *cell_out, const uint8_t command,
+ const uint8_t *payload_in, size_t payload_len);
+
+int create_cell_format(cell_t *cell_out, const create_cell_t *cell_in);
+int create_cell_format_relayed(cell_t *cell_out, const create_cell_t *cell_in);
+int created_cell_format(cell_t *cell_out, const created_cell_t *cell_in);
+int extend_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extend_cell_t *cell_in);
+int extended_cell_format(uint8_t *command_out, uint16_t *len_out,
+ uint8_t *payload_out, const extended_cell_t *cell_in);
#endif
diff --git a/src/or/onion_fast.c b/src/or/onion_fast.c
new file mode 100644
index 000000000..38b62decc
--- /dev/null
+++ b/src/or/onion_fast.c
@@ -0,0 +1,124 @@
+/* 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 onion_fast.c
+ * \brief Functions implement the CREATE_FAST circuit handshake.
+ **/
+
+#include "or.h"
+#include "onion_fast.h"
+
+/** Release all state held in <b>victim</b>. */
+void
+fast_handshake_state_free(fast_handshake_state_t *victim)
+{
+ if (! victim)
+ return;
+ memwipe(victim, 0, sizeof(fast_handshake_state_t));
+ tor_free(victim);
+}
+
+/** Create the state needed to perform a CREATE_FAST handshake. Return 0
+ * on success, -1 on failure. */
+int
+fast_onionskin_create(fast_handshake_state_t **handshake_state_out,
+ uint8_t *handshake_out)
+{
+ fast_handshake_state_t *s;
+ *handshake_state_out = s = tor_malloc(sizeof(fast_handshake_state_t));
+ if (crypto_rand((char*)s->state, sizeof(s->state)) < 0) {
+ tor_free(s);
+ return -1;
+ }
+ memcpy(handshake_out, s->state, DIGEST_LEN);
+ return 0;
+}
+
+/** Implement the server side of the CREATE_FAST abbreviated handshake. The
+ * client has provided DIGEST_LEN key bytes in <b>key_in</b> ("x"). We
+ * generate a reply of DIGEST_LEN*2 bytes in <b>key_out</b>, consisting of a
+ * new random "y", followed by H(x|y) to check for correctness. We set
+ * <b>key_out_len</b> bytes of key material in <b>key_out</b>.
+ * Return 0 on success, &lt;0 on failure.
+ **/
+int
+fast_server_handshake(const uint8_t *key_in, /* DIGEST_LEN bytes */
+ uint8_t *handshake_reply_out, /* DIGEST_LEN*2 bytes */
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ uint8_t tmp[DIGEST_LEN+DIGEST_LEN];
+ uint8_t *out = NULL;
+ size_t out_len;
+ int r = -1;
+
+ if (crypto_rand((char*)handshake_reply_out, DIGEST_LEN)<0)
+ return -1;
+
+ memcpy(tmp, key_in, DIGEST_LEN);
+ memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
+ out_len = key_out_len+DIGEST_LEN;
+ out = tor_malloc(out_len);
+ if (crypto_expand_key_material_TAP(tmp, sizeof(tmp), out, out_len)) {
+ goto done;
+ }
+ memcpy(handshake_reply_out+DIGEST_LEN, out, DIGEST_LEN);
+ memcpy(key_out, out+DIGEST_LEN, key_out_len);
+ r = 0;
+ done:
+ memwipe(tmp, 0, sizeof(tmp));
+ memwipe(out, 0, out_len);
+ tor_free(out);
+ return r;
+}
+
+/** Implement the second half of the client side of the CREATE_FAST handshake.
+ * We sent the server <b>handshake_state</b> ("x") already, and the server
+ * told us <b>handshake_reply_out</b> (y|H(x|y)). Make sure that the hash is
+ * correct, and generate key material in <b>key_out</b>. Return 0 on success,
+ * true on failure.
+ *
+ * NOTE: The "CREATE_FAST" handshake path is distinguishable from regular
+ * "onionskin" handshakes, and is not secure if an adversary can see or modify
+ * the messages. Therefore, it should only be used by clients, and only as
+ * the first hop of a circuit (since the first hop is already authenticated
+ * and protected by TLS).
+ */
+int
+fast_client_handshake(const fast_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply_out,/*DIGEST_LEN*2 bytes*/
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ uint8_t tmp[DIGEST_LEN+DIGEST_LEN];
+ uint8_t *out;
+ size_t out_len;
+ int r = -1;
+
+ memcpy(tmp, handshake_state->state, DIGEST_LEN);
+ memcpy(tmp+DIGEST_LEN, handshake_reply_out, DIGEST_LEN);
+ out_len = key_out_len+DIGEST_LEN;
+ out = tor_malloc(out_len);
+ if (crypto_expand_key_material_TAP(tmp, sizeof(tmp), out, out_len)) {
+ log_warn(LD_CIRC, "Failed to expand key material");
+ goto done;
+ }
+ if (tor_memneq(out, handshake_reply_out+DIGEST_LEN, DIGEST_LEN)) {
+ /* H(K) does *not* match. Something fishy. */
+ log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on fast handshake. "
+ "Bug or attack.");
+ goto done;
+ }
+ memcpy(key_out, out+DIGEST_LEN, key_out_len);
+ r = 0;
+ done:
+ memwipe(tmp, 0, sizeof(tmp));
+ memwipe(out, 0, out_len);
+ tor_free(out);
+ return r;
+}
+
diff --git a/src/or/onion_fast.h b/src/or/onion_fast.h
new file mode 100644
index 000000000..8c078378d
--- /dev/null
+++ b/src/or/onion_fast.h
@@ -0,0 +1,38 @@
+/* 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 onion_fast.h
+ * \brief Header file for onion_fast.c.
+ **/
+
+#ifndef TOR_ONION_FAST_H
+#define TOR_ONION_FAST_H
+
+#define CREATE_FAST_LEN DIGEST_LEN
+#define CREATED_FAST_LEN (DIGEST_LEN*2)
+
+typedef struct fast_handshake_state_t {
+ uint8_t state[DIGEST_LEN];
+} fast_handshake_state_t;
+
+void fast_handshake_state_free(fast_handshake_state_t *victim);
+
+int fast_onionskin_create(fast_handshake_state_t **handshake_state_out,
+ uint8_t *handshake_out);
+
+int fast_server_handshake(const uint8_t *message_in,
+ uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+int fast_client_handshake(const fast_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+#endif
+
diff --git a/src/or/onion_ntor.c b/src/or/onion_ntor.c
new file mode 100644
index 000000000..ef501f69d
--- /dev/null
+++ b/src/or/onion_ntor.c
@@ -0,0 +1,300 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+
+#include "crypto.h"
+#define ONION_NTOR_PRIVATE
+#include "onion_ntor.h"
+#include "torlog.h"
+#include "util.h"
+
+/** Free storage held in an ntor handshake state. */
+void
+ntor_handshake_state_free(ntor_handshake_state_t *state)
+{
+ if (!state)
+ return;
+ memwipe(state, 0, sizeof(*state));
+ tor_free(state);
+}
+
+/** Convenience function to represent HMAC_SHA256 as our instantiation of
+ * ntor's "tweaked hash'. Hash the <b>inp_len</b> bytes at <b>inp</b> into
+ * a DIGEST256_LEN-byte digest at <b>out</b>, with the hash changing
+ * depending on the value of <b>tweak</b>. */
+static void
+h_tweak(uint8_t *out,
+ const uint8_t *inp, size_t inp_len,
+ const char *tweak)
+{
+ size_t tweak_len = strlen(tweak);
+ crypto_hmac_sha256((char*)out, tweak, tweak_len, (const char*)inp, inp_len);
+}
+
+/** Wrapper around a set of tweak-values for use with the ntor handshake. */
+typedef struct tweakset_t {
+ const char *t_mac;
+ const char *t_key;
+ const char *t_verify;
+ const char *m_expand;
+} tweakset_t;
+
+/** The tweaks to be used with our handshake. */
+const tweakset_t proto1_tweaks = {
+#define PROTOID "ntor-curve25519-sha256-1"
+#define PROTOID_LEN 24
+ PROTOID ":mac",
+ PROTOID ":key_extract",
+ PROTOID ":verify",
+ PROTOID ":key_expand"
+};
+
+/** Convenience macro: copy <b>len</b> bytes from <b>inp</b> to <b>ptr</b>,
+ * and advance <b>ptr</b> by the number of bytes copied. */
+#define APPEND(ptr, inp, len) \
+ STMT_BEGIN { \
+ memcpy(ptr, (inp), (len)); \
+ ptr += len; \
+ } STMT_END
+
+/**
+ * Compute the first client-side step of the ntor handshake for communicating
+ * with a server whose DIGEST_LEN-byte server identity is <b>router_id</b>,
+ * and whose onion key is <b>router_key</b>. Store the NTOR_ONIONSKIN_LEN-byte
+ * message in <b>onion_skin_out</b>, and store the handshake state in
+ * *<b>handshake_state_out</b>. Return 0 on success, -1 on failure.
+ */
+int
+onion_skin_ntor_create(const uint8_t *router_id,
+ const curve25519_public_key_t *router_key,
+ ntor_handshake_state_t **handshake_state_out,
+ uint8_t *onion_skin_out)
+{
+ ntor_handshake_state_t *state;
+ uint8_t *op;
+
+ state = tor_malloc_zero(sizeof(ntor_handshake_state_t));
+
+ memcpy(state->router_id, router_id, DIGEST_LEN);
+ memcpy(&state->pubkey_B, router_key, sizeof(curve25519_public_key_t));
+ if (curve25519_secret_key_generate(&state->seckey_x, 0) < 0) {
+ tor_free(state);
+ return -1;
+ }
+ curve25519_public_key_generate(&state->pubkey_X, &state->seckey_x);
+
+ op = onion_skin_out;
+ APPEND(op, router_id, DIGEST_LEN);
+ APPEND(op, router_key->public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(op, state->pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ tor_assert(op == onion_skin_out + NTOR_ONIONSKIN_LEN);
+
+ *handshake_state_out = state;
+
+ return 0;
+}
+
+#define SERVER_STR "Server"
+#define SERVER_STR_LEN 6
+
+#define SECRET_INPUT_LEN (CURVE25519_PUBKEY_LEN * 3 + \
+ CURVE25519_OUTPUT_LEN * 2 + \
+ DIGEST_LEN + PROTOID_LEN)
+#define AUTH_INPUT_LEN (DIGEST256_LEN + DIGEST_LEN + \
+ CURVE25519_PUBKEY_LEN*3 + \
+ PROTOID_LEN + SERVER_STR_LEN)
+
+/**
+ * Perform the server side of an ntor handshake. Given an
+ * NTOR_ONIONSKIN_LEN-byte message in <b>onion_skin</b>, our own identity
+ * fingerprint as <b>my_node_id</b>, and an associative array mapping public
+ * onion keys to curve25519_keypair_t in <b>private_keys</b>, attempt to
+ * perform the handshake. Use <b>junk_keys</b> if present if the handshake
+ * indicates an unrecognized public key. Write an NTOR_REPLY_LEN-byte
+ * message to send back to the client into <b>handshake_reply_out</b>, and
+ * generate <b>key_out_len</b> bytes of key material in <b>key_out</b>. Return
+ * 0 on success, -1 on failure.
+ */
+int
+onion_skin_ntor_server_handshake(const uint8_t *onion_skin,
+ const di_digest256_map_t *private_keys,
+ const curve25519_keypair_t *junk_keys,
+ const uint8_t *my_node_id,
+ uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ const tweakset_t *T = &proto1_tweaks;
+ /* Sensitive stack-allocated material. Kept in an anonymous struct to make
+ * it easy to wipe. */
+ struct {
+ uint8_t secret_input[SECRET_INPUT_LEN];
+ uint8_t auth_input[AUTH_INPUT_LEN];
+ curve25519_public_key_t pubkey_X;
+ curve25519_secret_key_t seckey_y;
+ curve25519_public_key_t pubkey_Y;
+ uint8_t verify[DIGEST256_LEN];
+ } s;
+ uint8_t *si = s.secret_input, *ai = s.auth_input;
+ const curve25519_keypair_t *keypair_bB;
+ int bad;
+
+ /* Decode the onion skin */
+ /* XXXX Does this possible early-return business threaten our security? */
+ if (tor_memneq(onion_skin, my_node_id, DIGEST_LEN))
+ return -1;
+ /* Note that on key-not-found, we go through with this operation anyway,
+ * using "junk_keys". This will result in failed authentication, but won't
+ * leak whether we recognized the key. */
+ keypair_bB = dimap_search(private_keys, onion_skin + DIGEST_LEN,
+ (void*)junk_keys);
+ if (!keypair_bB)
+ return -1;
+
+ memcpy(s.pubkey_X.public_key, onion_skin+DIGEST_LEN+DIGEST256_LEN,
+ CURVE25519_PUBKEY_LEN);
+
+ /* Make y, Y */
+ curve25519_secret_key_generate(&s.seckey_y, 0);
+ curve25519_public_key_generate(&s.pubkey_Y, &s.seckey_y);
+
+ /* NOTE: If we ever use a group other than curve25519, or a different
+ * representation for its points, we may need to perform different or
+ * additional checks on X here and on Y in the client handshake, or lose our
+ * security properties. What checks we need would depend on the properties
+ * of the group and its representation.
+ *
+ * In short: if you use anything other than curve25519, this aspect of the
+ * code will need to be reconsidered carefully. */
+
+ /* build secret_input */
+ curve25519_handshake(si, &s.seckey_y, &s.pubkey_X);
+ bad = safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN);
+ si += CURVE25519_OUTPUT_LEN;
+ curve25519_handshake(si, &keypair_bB->seckey, &s.pubkey_X);
+ bad |= safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN);
+ si += CURVE25519_OUTPUT_LEN;
+
+ APPEND(si, my_node_id, DIGEST_LEN);
+ APPEND(si, keypair_bB->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, s.pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, PROTOID, PROTOID_LEN);
+ tor_assert(si == s.secret_input + sizeof(s.secret_input));
+
+ /* Compute hashes of secret_input */
+ h_tweak(s.verify, s.secret_input, sizeof(s.secret_input), T->t_verify);
+
+ /* Compute auth_input */
+ APPEND(ai, s.verify, DIGEST256_LEN);
+ APPEND(ai, my_node_id, DIGEST_LEN);
+ APPEND(ai, keypair_bB->pubkey.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, s.pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, PROTOID, PROTOID_LEN);
+ APPEND(ai, SERVER_STR, SERVER_STR_LEN);
+ tor_assert(ai == s.auth_input + sizeof(s.auth_input));
+
+ /* Build the reply */
+ memcpy(handshake_reply_out, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ h_tweak(handshake_reply_out+CURVE25519_PUBKEY_LEN,
+ s.auth_input, sizeof(s.auth_input),
+ T->t_mac);
+
+ /* Generate the key material */
+ crypto_expand_key_material_rfc5869_sha256(
+ s.secret_input, sizeof(s.secret_input),
+ (const uint8_t*)T->t_key, strlen(T->t_key),
+ (const uint8_t*)T->m_expand, strlen(T->m_expand),
+ key_out, key_out_len);
+
+ /* Wipe all of our local state */
+ memwipe(&s, 0, sizeof(s));
+
+ return bad ? -1 : 0;
+}
+
+/**
+ * Perform the final client side of the ntor handshake, using the state in
+ * <b>handshake_state</b> and the server's NTOR_REPLY_LEN-byte reply in
+ * <b>handshake_reply</b>. Generate <b>key_out_len</b> bytes of key material
+ * in <b>key_out</b>. Return 0 on success, -1 on failure.
+ */
+int
+onion_skin_ntor_client_handshake(
+ const ntor_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply,
+ uint8_t *key_out,
+ size_t key_out_len)
+{
+ const tweakset_t *T = &proto1_tweaks;
+ /* Sensitive stack-allocated material. Kept in an anonymous struct to make
+ * it easy to wipe. */
+ struct {
+ curve25519_public_key_t pubkey_Y;
+ uint8_t secret_input[SECRET_INPUT_LEN];
+ uint8_t verify[DIGEST256_LEN];
+ uint8_t auth_input[AUTH_INPUT_LEN];
+ uint8_t auth[DIGEST256_LEN];
+ } s;
+ uint8_t *ai = s.auth_input, *si = s.secret_input;
+ const uint8_t *auth_candidate;
+ int bad;
+
+ /* Decode input */
+ memcpy(s.pubkey_Y.public_key, handshake_reply, CURVE25519_PUBKEY_LEN);
+ auth_candidate = handshake_reply + CURVE25519_PUBKEY_LEN;
+
+ /* See note in server_handshake above about checking points. The
+ * circumstances under which we'd need to check Y for membership are
+ * different than those under which we'd be checking X. */
+
+ /* Compute secret_input */
+ curve25519_handshake(si, &handshake_state->seckey_x, &s.pubkey_Y);
+ bad = safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN);
+ si += CURVE25519_OUTPUT_LEN;
+ curve25519_handshake(si, &handshake_state->seckey_x,
+ &handshake_state->pubkey_B);
+ bad |= (safe_mem_is_zero(si, CURVE25519_OUTPUT_LEN) << 1);
+ si += CURVE25519_OUTPUT_LEN;
+ APPEND(si, handshake_state->router_id, DIGEST_LEN);
+ APPEND(si, handshake_state->pubkey_B.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, handshake_state->pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(si, PROTOID, PROTOID_LEN);
+ tor_assert(si == s.secret_input + sizeof(s.secret_input));
+
+ /* Compute verify from secret_input */
+ h_tweak(s.verify, s.secret_input, sizeof(s.secret_input), T->t_verify);
+
+ /* Compute auth_input */
+ APPEND(ai, s.verify, DIGEST256_LEN);
+ APPEND(ai, handshake_state->router_id, DIGEST_LEN);
+ APPEND(ai, handshake_state->pubkey_B.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, s.pubkey_Y.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, handshake_state->pubkey_X.public_key, CURVE25519_PUBKEY_LEN);
+ APPEND(ai, PROTOID, PROTOID_LEN);
+ APPEND(ai, SERVER_STR, SERVER_STR_LEN);
+ tor_assert(ai == s.auth_input + sizeof(s.auth_input));
+
+ /* Compute auth */
+ h_tweak(s.auth, s.auth_input, sizeof(s.auth_input), T->t_mac);
+
+ bad |= (tor_memneq(s.auth, auth_candidate, DIGEST256_LEN) << 2);
+
+ crypto_expand_key_material_rfc5869_sha256(
+ s.secret_input, sizeof(s.secret_input),
+ (const uint8_t*)T->t_key, strlen(T->t_key),
+ (const uint8_t*)T->m_expand, strlen(T->m_expand),
+ key_out, key_out_len);
+
+ memwipe(&s, 0, sizeof(s));
+
+ if (bad) {
+ log_warn(LD_PROTOCOL, "Invalid result from curve25519 handshake: %d", bad);
+ }
+
+ return bad ? -1 : 0;
+}
+
diff --git a/src/or/onion_ntor.h b/src/or/onion_ntor.h
new file mode 100644
index 000000000..c942e6e0f
--- /dev/null
+++ b/src/or/onion_ntor.h
@@ -0,0 +1,63 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#ifndef TOR_ONION_NTOR_H
+#define TOR_ONION_NTOR_H
+
+#include "torint.h"
+#include "crypto_curve25519.h"
+#include "di_ops.h"
+
+/** State to be maintained by a client between sending an ntor onionskin
+ * and receiving a reply. */
+typedef struct ntor_handshake_state_t ntor_handshake_state_t;
+
+/** Length of an ntor onionskin, as sent from the client to server. */
+#define NTOR_ONIONSKIN_LEN 84
+/** Length of an ntor reply, as sent from server to client. */
+#define NTOR_REPLY_LEN 64
+
+#ifdef CURVE25519_ENABLED
+void ntor_handshake_state_free(ntor_handshake_state_t *state);
+
+int onion_skin_ntor_create(const uint8_t *router_id,
+ const curve25519_public_key_t *router_key,
+ ntor_handshake_state_t **handshake_state_out,
+ uint8_t *onion_skin_out);
+
+int onion_skin_ntor_server_handshake(const uint8_t *onion_skin,
+ const di_digest256_map_t *private_keys,
+ const curve25519_keypair_t *junk_keypair,
+ const uint8_t *my_node_id,
+ uint8_t *handshake_reply_out,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+int onion_skin_ntor_client_handshake(
+ const ntor_handshake_state_t *handshake_state,
+ const uint8_t *handshake_reply,
+ uint8_t *key_out,
+ size_t key_out_len);
+
+#ifdef ONION_NTOR_PRIVATE
+
+/** Storage held by a client while waiting for an ntor reply from a server. */
+struct ntor_handshake_state_t {
+ /** Identity digest of the router we're talking to. */
+ uint8_t router_id[DIGEST_LEN];
+ /** Onion key of the router we're talking to. */
+ curve25519_public_key_t pubkey_B;
+
+ /**
+ * Short-lived keypair for use with this handshake.
+ * @{ */
+ curve25519_secret_key_t seckey_x;
+ curve25519_public_key_t pubkey_X;
+ /** @} */
+};
+#endif
+
+#endif
+
+#endif
+
diff --git a/src/or/onion_tap.c b/src/or/onion_tap.c
new file mode 100644
index 000000000..9a9f374b9
--- /dev/null
+++ b/src/or/onion_tap.c
@@ -0,0 +1,220 @@
+/* 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 onion_tap.c
+ * \brief Functions to implement the original Tor circuit extension handshake
+ * (a.k.a TAP).
+ *
+ * We didn't call it "TAP" ourselves -- Ian Goldberg named it in "On the
+ * Security of the Tor Authentication Protocol". (Spoiler: it's secure, but
+ * its security is kind of fragile and implementation dependent. Never modify
+ * this implementation without reading and understanding that paper at least.)
+ **/
+
+#include "or.h"
+#include "config.h"
+#include "onion_tap.h"
+#include "rephist.h"
+
+/*----------------------------------------------------------------------*/
+
+/** Given a router's 128 byte public key,
+ * stores the following in onion_skin_out:
+ * - [42 bytes] OAEP padding
+ * - [16 bytes] Symmetric key for encrypting blob past RSA
+ * - [70 bytes] g^x part 1 (inside the RSA)
+ * - [58 bytes] g^x part 2 (symmetrically encrypted)
+ *
+ * Stores the DH private key into handshake_state_out for later completion
+ * of the handshake.
+ *
+ * The meeting point/cookies and auth are zeroed out for now.
+ */
+int
+onion_skin_TAP_create(crypto_pk_t *dest_router_key,
+ crypto_dh_t **handshake_state_out,
+ char *onion_skin_out) /* TAP_ONIONSKIN_CHALLENGE_LEN bytes */
+{
+ char challenge[DH_KEY_LEN];
+ crypto_dh_t *dh = NULL;
+ int dhbytes, pkbytes;
+
+ tor_assert(dest_router_key);
+ tor_assert(handshake_state_out);
+ tor_assert(onion_skin_out);
+ *handshake_state_out = NULL;
+ memset(onion_skin_out, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
+
+ if (!(dh = crypto_dh_new(DH_TYPE_CIRCUIT)))
+ goto err;
+
+ dhbytes = crypto_dh_get_bytes(dh);
+ pkbytes = (int) crypto_pk_keysize(dest_router_key);
+ tor_assert(dhbytes == 128);
+ tor_assert(pkbytes == 128);
+
+ if (crypto_dh_get_public(dh, challenge, dhbytes))
+ goto err;
+
+ note_crypto_pk_op(ENC_ONIONSKIN);
+
+ /* set meeting point, meeting cookie, etc here. Leave zero for now. */
+ if (crypto_pk_public_hybrid_encrypt(dest_router_key, onion_skin_out,
+ TAP_ONIONSKIN_CHALLENGE_LEN,
+ challenge, DH_KEY_LEN,
+ PK_PKCS1_OAEP_PADDING, 1)<0)
+ goto err;
+
+ memwipe(challenge, 0, sizeof(challenge));
+ *handshake_state_out = dh;
+
+ return 0;
+ err:
+ memwipe(challenge, 0, sizeof(challenge));
+ if (dh) crypto_dh_free(dh);
+ return -1;
+}
+
+/** Given an encrypted DH public key as generated by onion_skin_create,
+ * and the private key for this onion router, generate the reply (128-byte
+ * DH plus the first 20 bytes of shared key material), and store the
+ * next key_out_len bytes of key material in key_out.
+ */
+int
+onion_skin_TAP_server_handshake(
+ /*TAP_ONIONSKIN_CHALLENGE_LEN*/
+ const char *onion_skin,
+ crypto_pk_t *private_key,
+ crypto_pk_t *prev_private_key,
+ /*TAP_ONIONSKIN_REPLY_LEN*/
+ char *handshake_reply_out,
+ char *key_out,
+ size_t key_out_len)
+{
+ char challenge[TAP_ONIONSKIN_CHALLENGE_LEN];
+ crypto_dh_t *dh = NULL;
+ ssize_t len;
+ char *key_material=NULL;
+ size_t key_material_len=0;
+ int i;
+ crypto_pk_t *k;
+
+ len = -1;
+ for (i=0;i<2;++i) {
+ k = i==0?private_key:prev_private_key;
+ if (!k)
+ break;
+ note_crypto_pk_op(DEC_ONIONSKIN);
+ len = crypto_pk_private_hybrid_decrypt(k, challenge,
+ TAP_ONIONSKIN_CHALLENGE_LEN,
+ onion_skin,
+ TAP_ONIONSKIN_CHALLENGE_LEN,
+ PK_PKCS1_OAEP_PADDING,0);
+ if (len>0)
+ break;
+ }
+ if (len<0) {
+ log_info(LD_PROTOCOL,
+ "Couldn't decrypt onionskin: client may be using old onion key");
+ goto err;
+ } else if (len != DH_KEY_LEN) {
+ log_warn(LD_PROTOCOL, "Unexpected onionskin length after decryption: %ld",
+ (long)len);
+ goto err;
+ }
+
+ dh = crypto_dh_new(DH_TYPE_CIRCUIT);
+ if (!dh) {
+ log_warn(LD_BUG, "Couldn't allocate DH key");
+ goto err;
+ }
+ if (crypto_dh_get_public(dh, handshake_reply_out, DH_KEY_LEN)) {
+ log_info(LD_GENERAL, "crypto_dh_get_public failed.");
+ goto err;
+ }
+
+ key_material_len = DIGEST_LEN+key_out_len;
+ key_material = tor_malloc(key_material_len);
+ len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh, challenge,
+ DH_KEY_LEN, key_material,
+ key_material_len);
+ if (len < 0) {
+ log_info(LD_GENERAL, "crypto_dh_compute_secret failed.");
+ goto err;
+ }
+
+ /* send back H(K|0) as proof that we learned K. */
+ memcpy(handshake_reply_out+DH_KEY_LEN, key_material, DIGEST_LEN);
+
+ /* use the rest of the key material for our shared keys, digests, etc */
+ memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+
+ memwipe(challenge, 0, sizeof(challenge));
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ crypto_dh_free(dh);
+ return 0;
+ err:
+ memwipe(challenge, 0, sizeof(challenge));
+ if (key_material) {
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ }
+ if (dh) crypto_dh_free(dh);
+
+ return -1;
+}
+
+/** Finish the client side of the DH handshake.
+ * Given the 128 byte DH reply + 20 byte hash as generated by
+ * onion_skin_server_handshake and the handshake state generated by
+ * onion_skin_create, verify H(K) with the first 20 bytes of shared
+ * key material, then generate key_out_len more bytes of shared key
+ * material and store them in key_out.
+ *
+ * After the invocation, call crypto_dh_free on handshake_state.
+ */
+int
+onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
+ const char *handshake_reply, /* TAP_ONIONSKIN_REPLY_LEN bytes */
+ char *key_out,
+ size_t key_out_len)
+{
+ ssize_t len;
+ char *key_material=NULL;
+ size_t key_material_len;
+ tor_assert(crypto_dh_get_bytes(handshake_state) == DH_KEY_LEN);
+
+ key_material_len = DIGEST_LEN + key_out_len;
+ key_material = tor_malloc(key_material_len);
+ len = crypto_dh_compute_secret(LOG_PROTOCOL_WARN, handshake_state,
+ handshake_reply, DH_KEY_LEN, key_material,
+ key_material_len);
+ if (len < 0) {
+ log_warn(LD_PROTOCOL,"DH computation failed.");
+ goto err;
+ }
+
+ if (tor_memneq(key_material, handshake_reply+DH_KEY_LEN, DIGEST_LEN)) {
+ /* H(K) does *not* match. Something fishy. */
+ log_warn(LD_PROTOCOL,"Digest DOES NOT MATCH on onion handshake. "
+ "Bug or attack.");
+ goto err;
+ }
+
+ /* use the rest of the key material for our shared keys, digests, etc */
+ memcpy(key_out, key_material+DIGEST_LEN, key_out_len);
+
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ return 0;
+ err:
+ memwipe(key_material, 0, key_material_len);
+ tor_free(key_material);
+ return -1;
+}
+
diff --git a/src/or/onion_tap.h b/src/or/onion_tap.h
new file mode 100644
index 000000000..b978b6673
--- /dev/null
+++ b/src/or/onion_tap.h
@@ -0,0 +1,37 @@
+/* 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 onion_tap.h
+ * \brief Header file for onion_tap.c.
+ **/
+
+#ifndef TOR_ONION_TAP_H
+#define TOR_ONION_TAP_H
+
+#define TAP_ONIONSKIN_CHALLENGE_LEN (PKCS1_OAEP_PADDING_OVERHEAD+\
+ CIPHER_KEY_LEN+\
+ DH_KEY_LEN)
+#define TAP_ONIONSKIN_REPLY_LEN (DH_KEY_LEN+DIGEST_LEN)
+
+int onion_skin_TAP_create(crypto_pk_t *router_key,
+ crypto_dh_t **handshake_state_out,
+ char *onion_skin_out);
+
+int onion_skin_TAP_server_handshake(const char *onion_skin,
+ crypto_pk_t *private_key,
+ crypto_pk_t *prev_private_key,
+ char *handshake_reply_out,
+ char *key_out,
+ size_t key_out_len);
+
+int onion_skin_TAP_client_handshake(crypto_dh_t *handshake_state,
+ const char *handshake_reply,
+ char *key_out,
+ size_t key_out_len);
+
+#endif
+
diff --git a/src/or/or.h b/src/or/or.h
index 51c23d305..6aa6b59e8 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Master header file for Tor-specific functionality.
**/
-#ifndef _TOR_OR_H
-#define _TOR_OR_H
+#ifndef TOR_OR_H
+#define TOR_OR_H
#include "orconfig.h"
@@ -81,7 +81,6 @@
#include <process.h>
#include <direct.h>
#include <windows.h>
-#define snprintf _snprintf
#endif
#ifdef USE_BUFFEREVENTS
@@ -98,6 +97,9 @@
#include "address.h"
#include "compat_libevent.h"
#include "ht.h"
+#include "replaycache.h"
+#include "crypto_curve25519.h"
+#include "tor_queue.h"
/* These signals are defined to help handle_control_signal work.
*/
@@ -176,8 +178,6 @@
#define MIN_ONION_KEY_LIFETIME (7*24*60*60)
/** How often do we rotate TLS contexts? */
#define MAX_SSL_KEY_LIFETIME_INTERNAL (2*60*60)
-/** What expiry time shall we place on our SSL certs? */
-#define MAX_SSL_KEY_LIFETIME_ADVERTISED (365*24*60*60)
/** How old do we allow a router to get before removing it
* from the router list? In seconds. */
@@ -196,8 +196,9 @@ typedef enum {
* and let it use any circuit ID it wants. */
CIRC_ID_TYPE_NEITHER=2
} circ_id_type_t;
+#define circ_id_type_bitfield_t ENUM_BF(circ_id_type_t)
-#define _CONN_TYPE_MIN 3
+#define CONN_TYPE_MIN_ 3
/** Type for sockets listening for OR connections. */
#define CONN_TYPE_OR_LISTENER 3
/** A bidirectional TLS connection transmitting a sequence of cells.
@@ -228,8 +229,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 */
@@ -239,7 +246,9 @@ typedef enum {
#define PROXY_SOCKS5 3
/* !!!! If there is ever a PROXY_* type over 2, we must grow the proxy_type
* field in or_connection_t */
-/* pluggable transports proxy type */
+
+/* Pluggable transport proxy type. Don't use this in or_connection_t,
+ * instead use the actual underlying proxy type (see above). */
#define PROXY_PLUGGABLE 4
/* Proxy client handshake states */
@@ -269,17 +278,18 @@ typedef enum {
/** State for any listener connection. */
#define LISTENER_STATE_READY 0
-#define _CPUWORKER_STATE_MIN 1
+#define CPUWORKER_STATE_MIN_ 1
/** State for a connection to a cpuworker process that's idle. */
#define CPUWORKER_STATE_IDLE 1
/** State for a connection to a cpuworker process that's processing a
* handshake. */
#define CPUWORKER_STATE_BUSY_ONION 2
-#define _CPUWORKER_STATE_MAX 2
+#define CPUWORKER_STATE_MAX_ 2
#define CPUWORKER_TASK_ONION CPUWORKER_STATE_BUSY_ONION
+#define CPUWORKER_TASK_SHUTDOWN 255
-#define _OR_CONN_STATE_MIN 1
+#define OR_CONN_STATE_MIN_ 1
/** State for a connection to an OR: waiting for connect() to finish. */
#define OR_CONN_STATE_CONNECTING 1
/** State for a connection to an OR: waiting for proxy handshake to complete */
@@ -304,9 +314,28 @@ typedef enum {
#define OR_CONN_STATE_OR_HANDSHAKING_V3 7
/** State for an OR connection: Ready to send/receive cells. */
#define OR_CONN_STATE_OPEN 8
-#define _OR_CONN_STATE_MAX 8
-
-#define _EXIT_CONN_STATE_MIN 1
+#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
/** State for an exit connection: waiting for connect() to finish. */
@@ -315,10 +344,10 @@ typedef enum {
#define EXIT_CONN_STATE_OPEN 3
/** State for an exit connection: waiting to be removed. */
#define EXIT_CONN_STATE_RESOLVEFAILED 4
-#define _EXIT_CONN_STATE_MAX 4
+#define EXIT_CONN_STATE_MAX_ 4
/* The AP state values must be disjoint from the EXIT state values. */
-#define _AP_CONN_STATE_MIN 5
+#define AP_CONN_STATE_MIN_ 5
/** State for a SOCKS connection: waiting for SOCKS request. */
#define AP_CONN_STATE_SOCKS_WAIT 5
/** State for a SOCKS connection: got a y.onion URL; waiting to receive
@@ -338,14 +367,14 @@ typedef enum {
/** State for a transparent natd connection: waiting for original
* destination. */
#define AP_CONN_STATE_NATD_WAIT 12
-#define _AP_CONN_STATE_MAX 12
+#define AP_CONN_STATE_MAX_ 12
/** True iff the AP_CONN_STATE_* value <b>s</b> means that the corresponding
* edge connection is not attached to any circuit. */
#define AP_CONN_STATE_IS_UNATTACHED(s) \
((s) <= AP_CONN_STATE_CIRCUIT_WAIT || (s) == AP_CONN_STATE_NATD_WAIT)
-#define _DIR_CONN_STATE_MIN 1
+#define DIR_CONN_STATE_MIN_ 1
/** State for connection to directory server: waiting for connect(). */
#define DIR_CONN_STATE_CONNECTING 1
/** State for connection to directory server: sending HTTP request. */
@@ -358,30 +387,24 @@ typedef enum {
#define DIR_CONN_STATE_SERVER_COMMAND_WAIT 5
/** State for connection at directory server: sending HTTP response. */
#define DIR_CONN_STATE_SERVER_WRITING 6
-#define _DIR_CONN_STATE_MAX 6
+#define DIR_CONN_STATE_MAX_ 6
/** True iff the purpose of <b>conn</b> means that it's a server-side
* directory connection. */
#define DIR_CONN_IS_SERVER(conn) ((conn)->purpose == DIR_PURPOSE_SERVER)
-#define _CONTROL_CONN_STATE_MIN 1
+#define CONTROL_CONN_STATE_MIN_ 1
/** State for a control connection: Authenticated and accepting v1 commands. */
#define CONTROL_CONN_STATE_OPEN 1
/** State for a control connection: Waiting for authentication; speaking
* protocol v1. */
#define CONTROL_CONN_STATE_NEEDAUTH 2
-#define _CONTROL_CONN_STATE_MAX 2
+#define CONTROL_CONN_STATE_MAX_ 2
-#define _DIR_PURPOSE_MIN 3
-/** A connection to a directory server: download a rendezvous
- * descriptor. */
-#define DIR_PURPOSE_FETCH_RENDDESC 3
-/** A connection to a directory server: set after a rendezvous
+#define DIR_PURPOSE_MIN_ 4
+/** A connection to a directory server: set after a v2 rendezvous
* descriptor is downloaded. */
-#define DIR_PURPOSE_HAS_FETCHED_RENDDESC 4
-/** A connection to a directory server: download one or more v2
- * network-status objects */
-#define DIR_PURPOSE_FETCH_V2_NETWORKSTATUS 5
+#define DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 4
/** A connection to a directory server: download one or more server
* descriptors. */
#define DIR_PURPOSE_FETCH_SERVERDESC 6
@@ -390,9 +413,6 @@ typedef enum {
#define DIR_PURPOSE_FETCH_EXTRAINFO 7
/** A connection to a directory server: upload a server descriptor. */
#define DIR_PURPOSE_UPLOAD_DIR 8
-/** A connection to a directory server: upload a rendezvous
- * descriptor. */
-#define DIR_PURPOSE_UPLOAD_RENDDESC 9
/** A connection to a directory server: upload a v3 networkstatus vote. */
#define DIR_PURPOSE_UPLOAD_VOTE 10
/** A connection to a directory server: upload a v3 consensus signature */
@@ -420,22 +440,21 @@ typedef enum {
#define DIR_PURPOSE_FETCH_RENDDESC_V2 18
/** A connection to a directory server: download a microdescriptor. */
#define DIR_PURPOSE_FETCH_MICRODESC 19
-#define _DIR_PURPOSE_MAX 19
+#define DIR_PURPOSE_MAX_ 19
/** True iff <b>p</b> is a purpose corresponding to uploading data to a
* directory server. */
#define DIR_PURPOSE_IS_UPLOAD(p) \
((p)==DIR_PURPOSE_UPLOAD_DIR || \
- (p)==DIR_PURPOSE_UPLOAD_RENDDESC || \
(p)==DIR_PURPOSE_UPLOAD_VOTE || \
(p)==DIR_PURPOSE_UPLOAD_SIGNATURES)
-#define _EXIT_PURPOSE_MIN 1
+#define EXIT_PURPOSE_MIN_ 1
/** This exit stream wants to do an ordinary connect. */
#define EXIT_PURPOSE_CONNECT 1
/** This exit stream wants to do a resolve (either normal or reverse). */
#define EXIT_PURPOSE_RESOLVE 2
-#define _EXIT_PURPOSE_MAX 2
+#define EXIT_PURPOSE_MAX_ 2
/* !!!! If any connection purpose is ever over 31, we must grow the type
* field in connection_t. */
@@ -444,16 +463,16 @@ typedef enum {
#define CIRCUIT_STATE_BUILDING 0
/** Circuit state: Waiting to process the onionskin. */
#define CIRCUIT_STATE_ONIONSKIN_PENDING 1
-/** Circuit state: I'd like to deliver a create, but my n_conn is still
+/** Circuit state: I'd like to deliver a create, but my n_chan is still
* connecting. */
-#define CIRCUIT_STATE_OR_WAIT 2
+#define CIRCUIT_STATE_CHAN_WAIT 2
/** Circuit state: onionskin(s) processed, ready to send/receive cells. */
#define CIRCUIT_STATE_OPEN 3
-#define _CIRCUIT_PURPOSE_MIN 1
+#define CIRCUIT_PURPOSE_MIN_ 1
/* these circuits were initiated elsewhere */
-#define _CIRCUIT_PURPOSE_OR_MIN 1
+#define CIRCUIT_PURPOSE_OR_MIN_ 1
/** OR-side circuit purpose: normal circuit, at OR. */
#define CIRCUIT_PURPOSE_OR 1
/** OR-side circuit purpose: At OR, from Bob, waiting for intro from Alices. */
@@ -462,7 +481,7 @@ typedef enum {
#define CIRCUIT_PURPOSE_REND_POINT_WAITING 3
/** OR-side circuit purpose: At OR, both circuits have this purpose. */
#define CIRCUIT_PURPOSE_REND_ESTABLISHED 4
-#define _CIRCUIT_PURPOSE_OR_MAX 4
+#define CIRCUIT_PURPOSE_OR_MAX_ 4
/* these circuits originate at this node */
@@ -505,7 +524,7 @@ typedef enum {
#define CIRCUIT_PURPOSE_C_REND_JOINED 12
/** This circuit is used for build time measurement only */
#define CIRCUIT_PURPOSE_C_MEASURE_TIMEOUT 13
-#define _CIRCUIT_PURPOSE_C_MAX 13
+#define CIRCUIT_PURPOSE_C_MAX_ 13
/** Hidden-service-side circuit purpose: at Bob, waiting for introductions. */
#define CIRCUIT_PURPOSE_S_ESTABLISH_INTRO 14
/** Hidden-service-side circuit purpose: at Bob, successfully established
@@ -519,19 +538,21 @@ typedef enum {
#define CIRCUIT_PURPOSE_TESTING 18
/** A controller made this circuit and Tor should not use it. */
#define CIRCUIT_PURPOSE_CONTROLLER 19
-#define _CIRCUIT_PURPOSE_MAX 19
+/** This circuit is used for path bias probing only */
+#define CIRCUIT_PURPOSE_PATH_BIAS_TESTING 20
+#define CIRCUIT_PURPOSE_MAX_ 20
/** A catch-all for unrecognized purposes. Currently we don't expect
* to make or see any circuits with this purpose. */
#define CIRCUIT_PURPOSE_UNKNOWN 255
/** True iff the circuit purpose <b>p</b> is for a circuit that
* originated at this node. */
-#define CIRCUIT_PURPOSE_IS_ORIGIN(p) ((p)>_CIRCUIT_PURPOSE_OR_MAX)
+#define CIRCUIT_PURPOSE_IS_ORIGIN(p) ((p)>CIRCUIT_PURPOSE_OR_MAX_)
/** True iff the circuit purpose <b>p</b> is for a circuit that originated
* here to serve as a client. (Hidden services don't count here.) */
#define CIRCUIT_PURPOSE_IS_CLIENT(p) \
- ((p)> _CIRCUIT_PURPOSE_OR_MAX && \
- (p)<=_CIRCUIT_PURPOSE_C_MAX)
+ ((p)> CIRCUIT_PURPOSE_OR_MAX_ && \
+ (p)<=CIRCUIT_PURPOSE_C_MAX_)
/** True iff the circuit_t <b>c</b> is actually an origin_circuit_t. */
#define CIRCUIT_IS_ORIGIN(c) (CIRCUIT_PURPOSE_IS_ORIGIN((c)->purpose))
/** True iff the circuit purpose <b>p</b> is for an established rendezvous
@@ -539,6 +560,8 @@ typedef enum {
#define CIRCUIT_PURPOSE_IS_ESTABLISHED_REND(p) \
((p) == CIRCUIT_PURPOSE_C_REND_JOINED || \
(p) == CIRCUIT_PURPOSE_S_REND_JOINED)
+/** True iff the circuit_t c is actually an or_circuit_t */
+#define CIRCUIT_IS_ORCIRC(c) (((circuit_t *)(c))->magic == OR_CIRCUIT_MAGIC)
/** How many circuits do we want simultaneously in-progress to handle
* a given stream? */
@@ -559,6 +582,8 @@ typedef enum {
#define RELAY_COMMAND_RESOLVE 11
#define RELAY_COMMAND_RESOLVED 12
#define RELAY_COMMAND_BEGIN_DIR 13
+#define RELAY_COMMAND_EXTEND2 14
+#define RELAY_COMMAND_EXTENDED2 15
#define RELAY_COMMAND_ESTABLISH_INTRO 32
#define RELAY_COMMAND_ESTABLISH_RENDEZVOUS 33
@@ -579,7 +604,8 @@ typedef enum {
#define END_OR_CONN_REASON_NO_ROUTE 6 /* no route to host/net */
#define END_OR_CONN_REASON_IO_ERROR 7 /* read/write error */
#define END_OR_CONN_REASON_RESOURCE_LIMIT 8 /* sockets, buffers, etc */
-#define END_OR_CONN_REASON_MISC 9
+#define END_OR_CONN_REASON_PT_MISSING 9 /* PT failed or not available */
+#define END_OR_CONN_REASON_MISC 10
/* Reasons why we (or a remote OR) might close a stream. See tor-spec.txt for
* documentation of these. The values must match. */
@@ -664,7 +690,7 @@ typedef enum {
/* Reasons why we (or a remote OR) might close a circuit. See tor-spec.txt for
* documentation of these. */
-#define _END_CIRC_REASON_MIN 0
+#define END_CIRC_REASON_MIN_ 0
#define END_CIRC_REASON_NONE 0
#define END_CIRC_REASON_TORPROTOCOL 1
#define END_CIRC_REASON_INTERNAL 2
@@ -673,12 +699,12 @@ typedef enum {
#define END_CIRC_REASON_RESOURCELIMIT 5
#define END_CIRC_REASON_CONNECTFAILED 6
#define END_CIRC_REASON_OR_IDENTITY 7
-#define END_CIRC_REASON_OR_CONN_CLOSED 8
+#define END_CIRC_REASON_CHANNEL_CLOSED 8
#define END_CIRC_REASON_FINISHED 9
#define END_CIRC_REASON_TIMEOUT 10
#define END_CIRC_REASON_DESTROYED 11
#define END_CIRC_REASON_NOSUCHSERVICE 12
-#define _END_CIRC_REASON_MAX 12
+#define END_CIRC_REASON_MAX_ 12
/** Bitwise-OR this with the argument to circuit_mark_for_close() or
* control_event_circuit_status() to indicate that the reason was
@@ -814,6 +840,19 @@ typedef enum {
/** Amount to increment a stream window when we get a stream SENDME. */
#define STREAMWINDOW_INCREMENT 50
+/** Maximum number of queued cells on a circuit for which we are the
+ * midpoint before we give up and kill it. This must be >= circwindow
+ * to avoid killing innocent circuits, and >= circwindow*2 to give
+ * leaky-pipe a chance of working someday. The ORCIRC_MAX_MIDDLE_KILL_THRESH
+ * ratio controls the margin of error between emitting a warning and
+ * killing the circuit.
+ */
+#define ORCIRC_MAX_MIDDLE_CELLS (CIRCWINDOW_START_MAX*2)
+/** Ratio of hard (circuit kill) to soft (warning) thresholds for the
+ * ORCIRC_MAX_MIDDLE_CELLS tests.
+ */
+#define ORCIRC_MAX_MIDDLE_KILL_THRESH (1.1f)
+
/* Cell commands. These values are defined in tor-spec.txt. */
#define CELL_PADDING 0
#define CELL_CREATE 1
@@ -825,12 +864,15 @@ typedef enum {
#define CELL_VERSIONS 7
#define CELL_NETINFO 8
#define CELL_RELAY_EARLY 9
+#define CELL_CREATE2 10
+#define CELL_CREATED2 11
#define CELL_VPADDING 128
#define CELL_CERTS 129
#define CELL_AUTH_CHALLENGE 130
#define CELL_AUTHENTICATE 131
#define CELL_AUTHORIZE 132
+#define CELL_COMMAND_MAX_ 132
/** How long to test reachability before complaining to the user. */
#define TIMEOUT_UNTIL_UNREACHABILITY_COMPLAINT (20*60)
@@ -861,11 +903,29 @@ typedef enum {
/** Number of bytes in a cell, minus cell header. */
#define CELL_PAYLOAD_SIZE 509
-/** Number of bytes in a cell transmitted over the network. */
-#define CELL_NETWORK_SIZE 512
+/** Number of bytes in a cell transmitted over the network, in the longest
+ * form */
+#define CELL_MAX_NETWORK_SIZE 514
-/** Length of a header on a variable-length cell. */
-#define VAR_CELL_HEADER_SIZE 5
+/** Maximum length of a header on a variable-length cell. */
+#define VAR_CELL_MAX_HEADER_SIZE 7
+
+static int get_cell_network_size(int wide_circ_ids);
+static INLINE int get_cell_network_size(int wide_circ_ids)
+{
+ return wide_circ_ids ? CELL_MAX_NETWORK_SIZE : CELL_MAX_NETWORK_SIZE - 2;
+}
+static int get_var_cell_header_size(int wide_circ_ids);
+static INLINE int get_var_cell_header_size(int wide_circ_ids)
+{
+ return wide_circ_ids ? VAR_CELL_MAX_HEADER_SIZE :
+ VAR_CELL_MAX_HEADER_SIZE - 2;
+}
+static int get_circ_id_size(int wide_circ_ids);
+static INLINE int get_circ_id_size(int wide_circ_ids)
+{
+ return wide_circ_ids ? 4 : 2;
+}
/** Number of bytes in a relay cell's header (not including general cell
* header). */
@@ -874,10 +934,151 @@ typedef enum {
#define RELAY_PAYLOAD_SIZE (CELL_PAYLOAD_SIZE-RELAY_HEADER_SIZE)
/** Identifies a circuit on an or_connection */
-typedef uint16_t circid_t;
+typedef uint32_t circid_t;
/** Identifies a stream on a circuit */
typedef uint16_t streamid_t;
+/* channel_t typedef; struct channel_s is in channel.h */
+
+typedef struct channel_s channel_t;
+
+/* channel_listener_t typedef; struct channel_listener_s is in channel.h */
+
+typedef struct channel_listener_s channel_listener_t;
+
+/* channel states for channel_t */
+
+typedef enum {
+ /*
+ * Closed state - channel is inactive
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSING
+ * Permitted transitions to:
+ * - CHANNEL_STATE_OPENING
+ */
+ CHANNEL_STATE_CLOSED = 0,
+ /*
+ * Opening state - channel is trying to connect
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSED
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_ERROR
+ * - CHANNEL_STATE_OPEN
+ */
+ CHANNEL_STATE_OPENING,
+ /*
+ * Open state - channel is active and ready for use
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_MAINT
+ * - CHANNEL_STATE_OPENING
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_ERROR
+ * - CHANNEL_STATE_MAINT
+ */
+ CHANNEL_STATE_OPEN,
+ /*
+ * Maintenance state - channel is temporarily offline for subclass specific
+ * maintenance activities such as TLS renegotiation.
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_OPEN
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_ERROR
+ * - CHANNEL_STATE_OPEN
+ */
+ CHANNEL_STATE_MAINT,
+ /*
+ * Closing state - channel is shutting down
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_MAINT
+ * - CHANNEL_STATE_OPEN
+ * Permitted transitions to:
+ * - CHANNEL_STATE_CLOSED,
+ * - CHANNEL_STATE_ERROR
+ */
+ CHANNEL_STATE_CLOSING,
+ /*
+ * Error state - channel has experienced a permanent error
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_MAINT
+ * - CHANNEL_STATE_OPENING
+ * - CHANNEL_STATE_OPEN
+ * Permitted transitions to:
+ * - None
+ */
+ CHANNEL_STATE_ERROR,
+ /*
+ * Placeholder for maximum state value
+ */
+ CHANNEL_STATE_LAST
+} channel_state_t;
+
+/* channel listener states for channel_listener_t */
+
+typedef enum {
+ /*
+ * Closed state - channel listener is inactive
+ *
+ * Permitted transitions from:
+ * - CHANNEL_LISTENER_STATE_CLOSING
+ * Permitted transitions to:
+ * - CHANNEL_LISTENER_STATE_LISTENING
+ */
+ CHANNEL_LISTENER_STATE_CLOSED = 0,
+ /*
+ * Listening state - channel listener is listening for incoming
+ * connections
+ *
+ * Permitted transitions from:
+ * - CHANNEL_LISTENER_STATE_CLOSED
+ * Permitted transitions to:
+ * - CHANNEL_LISTENER_STATE_CLOSING
+ * - CHANNEL_LISTENER_STATE_ERROR
+ */
+ CHANNEL_LISTENER_STATE_LISTENING,
+ /*
+ * Closing state - channel listener is shutting down
+ *
+ * Permitted transitions from:
+ * - CHANNEL_LISTENER_STATE_LISTENING
+ * Permitted transitions to:
+ * - CHANNEL_LISTENER_STATE_CLOSED,
+ * - CHANNEL_LISTENER_STATE_ERROR
+ */
+ CHANNEL_LISTENER_STATE_CLOSING,
+ /*
+ * Error state - channel listener has experienced a permanent error
+ *
+ * Permitted transitions from:
+ * - CHANNEL_STATE_CLOSING
+ * - CHANNEL_STATE_LISTENING
+ * Permitted transitions to:
+ * - None
+ */
+ CHANNEL_LISTENER_STATE_ERROR,
+ /*
+ * Placeholder for maximum state value
+ */
+ CHANNEL_LISTENER_STATE_LAST
+} channel_listener_state_t;
+
+/* TLS channel stuff */
+
+typedef struct channel_tls_s channel_tls_t;
+
+/* circuitmux_t typedef; struct circuitmux_s is in circuitmux.h */
+
+typedef struct circuitmux_s circuitmux_t;
+
/** Parsed onion routing cell. All communication between nodes
* is via cells. */
typedef struct cell_t {
@@ -899,34 +1100,28 @@ 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. */
- char body[CELL_NETWORK_SIZE]; /**< Cell as packed for network. */
+ /** Next cell queued on this circuit. */
+ TOR_SIMPLEQ_ENTRY(packed_cell_t) next;
+ char body[CELL_MAX_NETWORK_SIZE]; /**< Cell as packed for network. */
+ uint32_t inserted_time; /**< Time (in milliseconds since epoch, with high
+ * bits truncated) when this cell was inserted. */
} packed_cell_t;
-/** Number of cells added to a circuit queue including their insertion
- * time on 10 millisecond detail; used for buffer statistics. */
-typedef struct insertion_time_elem_t {
- struct insertion_time_elem_t *next; /**< Next element in queue. */
- uint32_t insertion_time; /**< When were cells inserted (in 10 ms steps
- * starting at 0:00 of the current day)? */
- unsigned counter; /**< How many cells were inserted? */
-} insertion_time_elem_t;
-
-/** Queue of insertion times. */
-typedef struct insertion_time_queue_t {
- struct insertion_time_elem_t *first; /**< First element in queue. */
- struct insertion_time_elem_t *last; /**< Last element in queue. */
-} 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;
/** Beginning of a RELAY cell payload. */
@@ -979,7 +1174,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
@@ -998,6 +1193,9 @@ typedef struct connection_t {
/** Set to 1 when we're inside connection_flushed_some to keep us from
* calling connection_handle_write() recursively. */
unsigned int in_flushed_some:1;
+ /** True if connection_handle_write is currently running on this connection.
+ */
+ unsigned int in_connection_handle_write:1;
/* For linked connections:
*/
@@ -1061,13 +1259,18 @@ typedef struct connection_t {
/** Unique identifier for this connection on this Tor instance. */
uint64_t global_identifier;
- /** Unique ID for measuring tunneled network status requests. */
- uint64_t dirreq_id;
+ /** Bytes read since last call to control_event_conn_bandwidth_used().
+ * Only used if we're configured to emit CONN_BW events. */
+ uint32_t n_read_conn_bw;
+
+ /** Bytes written since last call to control_event_conn_bandwidth_used().
+ * Only used if we're configured to emit CONN_BW events. */
+ uint32_t n_written_conn_bw;
} connection_t;
/** Subtype of connection_t; used for a listener socket. */
typedef struct listener_connection_t {
- connection_t _base;
+ connection_t base_;
/** If the connection is a CONN_TYPE_AP_DNS_LISTENER, this field points
* to the evdns_server_port it uses to listen to and answer connections. */
@@ -1085,6 +1288,40 @@ typedef struct listener_connection_t {
/** One or more ISO_ flags to describe how to isolate streams. */
uint8_t isolation_flags;
/**@}*/
+ /** For SOCKS connections only: If this is set, we will choose "no
+ * authentication" instead of "username/password" authentication if both
+ * are offered. Used as input to parse_socks. */
+ unsigned int socks_prefer_no_auth : 1;
+
+ /** For a SOCKS listeners, these fields describe whether we should
+ * allow IPv4 and IPv6 addresses from our exit nodes, respectively.
+ *
+ * @{
+ */
+ unsigned int socks_ipv4_traffic : 1;
+ unsigned int socks_ipv6_traffic : 1;
+ /** @} */
+ /** For a socks listener: should we tell the exit that we prefer IPv6
+ * addresses? */
+ unsigned int socks_prefer_ipv6 : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
} listener_connection_t;
@@ -1149,6 +1386,9 @@ typedef struct or_handshake_state_t {
/* True iff we've received valid authentication to some identity. */
unsigned int authenticated : 1;
+ /* True iff we have sent a netinfo cell */
+ unsigned int sent_netinfo : 1;
+
/** True iff we should feed outgoing cells into digest_sent and
* digest_received respectively.
*
@@ -1187,43 +1427,53 @@ 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 {
- connection_t _base;
+ connection_t base_;
/** 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. */
int tls_error; /**< Last tor_tls error code. */
/** When we last used this conn for any client traffic. If not
* recent, we can rate limit it further. */
- time_t client_used;
+
+ /* Channel using this connection */
+ channel_tls_t *chan;
tor_addr_t real_addr; /**< The actual address that this connection came from
* or went to. The <b>addr</b> field is prone to
* getting overridden by the address from the router
* descriptor matching <b>identity_digest</b>. */
- circ_id_type_t circ_id_type:2; /**< When we send CREATE cells along this
- * connection, which half of the space should
- * we use? */
/** Should this connection be used for extending circuits to the server
* matching the <b>identity_digest</b> field? Set to true if we're pretty
* sure we aren't getting MITMed, either because we're connected to an
* address listed in a server descriptor, or because an authenticated
* NETINFO cell listed the address we're connected to as recognized. */
unsigned int is_canonical:1;
- /** True iff this connection shouldn't get any new circs attached to it,
- * because the connection is too old, or because there's a better one.
- * More generally, this flag is used to note an unhealthy connection;
- * for example, if a bad connection fails we shouldn't assume that the
- * router itself has a problem.
- */
- unsigned int is_bad_for_new_circs:1;
+
/** True iff we have decided that the other end of this connection
* is a client. Connections with this flag set should never be used
* to satisfy an EXTEND request. */
@@ -1231,14 +1481,17 @@ typedef struct or_connection_t {
/** True iff this is an outgoing connection. */
unsigned int is_outgoing:1;
unsigned int proxy_type:2; /**< One of PROXY_NONE...PROXY_SOCKS5 */
- uint8_t link_proto; /**< What protocol version are we using? 0 for
- * "none negotiated yet." */
- circid_t next_circ_id; /**< Which circ_id do we try to use next on
- * this connection? This is always in the
- * range 0..1<<15-1. */
+ unsigned int wide_circ_ids:1;
+ /** True iff this connection has had its bootstrap failure logged with
+ * control_event_bootstrap_problem. */
+ unsigned int have_noted_bootstrap_problem:1;
+
+ uint16_t link_proto; /**< What protocol version are we using? 0 for
+ * "none negotiated yet." */
or_handshake_state_t *handshake_state; /**< If we are setting this connection
* up, state information to do so. */
+
time_t timestamp_lastempty; /**< When was the outbuf last completely empty?*/
time_t timestamp_last_added_nonpadding; /** When did we last add a
* non-padding cell to the outbuf? */
@@ -1257,32 +1510,21 @@ typedef struct or_connection_t {
/* XXXX we could share this among all connections. */
struct ev_token_bucket_cfg *bucket_cfg;
#endif
- int n_circuits; /**< How many circuits use this connection as p_conn or
- * n_conn ? */
-
- /** Double-linked ring of circuits with queued cells waiting for room to
- * free up on this connection's outbuf. Every time we pull cells from a
- * circuit, we advance this pointer to the next circuit in the ring. */
- struct circuit_t *active_circuits;
- /** Priority queue of cell_ewma_t for circuits with queued cells waiting for
- * room to free up on this connection's outbuf. Kept in heap order
- * according to EWMA.
- *
- * This is redundant with active_circuits; if we ever decide only to use the
- * cell_ewma algorithm for choosing circuits, we can remove active_circuits.
- */
- smartlist_t *active_circuit_pqueue;
- /** The tick on which the cell_ewma_ts in active_circuit_pqueue last had
- * their ewma values rescaled. */
- unsigned active_circuit_pqueue_last_recalibrated;
+
struct or_connection_t *next_with_same_id; /**< Next connection with same
* identity digest as this one. */
+ /** Last emptied read token bucket in msec since midnight; only used if
+ * TB_EMPTY events are enabled. */
+ uint32_t read_emptied_time;
+ /** Last emptied write token bucket in msec since midnight; only used if
+ * TB_EMPTY events are enabled. */
+ uint32_t write_emptied_time;
} or_connection_t;
/** Subtype of connection_t for an "edge connection" -- that is, an entry (ap)
* connection, or an exit. */
typedef struct edge_connection_t {
- connection_t _base;
+ connection_t base_;
struct edge_connection_t *next_stream; /**< Points to the next stream at this
* edge, if any */
@@ -1302,6 +1544,8 @@ typedef struct edge_connection_t {
uint32_t address_ttl; /**< TTL for address-to-addr mapping on exit
* connection. Exit connections only. */
+ uint32_t begincell_flags; /** Flags sent or received in the BEGIN cell
+ * for this connection */
streamid_t stream_id; /**< The stream ID used for this edge connection on its
* circuit */
@@ -1317,6 +1561,8 @@ typedef struct edge_connection_t {
/** True iff this connection is for a DNS request only. */
unsigned int is_dns_request:1;
+ /** True iff this connection is for a PTR DNS request. (exit only) */
+ unsigned int is_reverse_dns_lookup:1;
unsigned int edge_has_sent_end:1; /**< For debugging; only used on edge
* connections. Set once we've set the stream end,
@@ -1326,12 +1572,16 @@ typedef struct edge_connection_t {
* cells. */
unsigned int edge_blocked_on_circ:1;
+ /** Unique ID for directory requests; this used to be in connection_t, but
+ * that's going away and being used on channels instead. We still tag
+ * edge connections with dirreq_id from circuits, so it's copied here. */
+ uint64_t dirreq_id;
} edge_connection_t;
/** Subtype of edge_connection_t for an "entry connection" -- that is, a SOCKS
* connection, a DNS request, a TransPort connection or a NATD connection */
typedef struct entry_connection_t {
- edge_connection_t _edge;
+ edge_connection_t edge_;
/** Nickname of planned exit node -- used with .exit support. */
char *chosen_exit_name;
@@ -1404,12 +1654,47 @@ typedef struct entry_connection_t {
*/
unsigned int may_use_optimistic_data : 1;
+ /** Should we permit IPv4 and IPv6 traffic to use this connection?
+ *
+ * @{ */
+ unsigned int ipv4_traffic_ok : 1;
+ unsigned int ipv6_traffic_ok : 1;
+ /** @} */
+ /** Should we say we prefer IPv6 traffic? */
+ unsigned int prefer_ipv6_traffic : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
+
} entry_connection_t;
+typedef enum {
+ DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
+ DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
+ DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
+ DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
+} dir_spool_source_t;
+#define dir_spool_source_bitfield_t ENUM_BF(dir_spool_source_t)
+
/** Subtype of connection_t for an "directory connection" -- that is, an HTTP
* connection to retrieve or serve directory material. */
typedef struct dir_connection_t {
- connection_t _base;
+ connection_t base_;
/** Which 'resource' did we ask the directory for? This is typically the part
* of the URL string that defines, relative to the directory conn purpose,
@@ -1424,12 +1709,8 @@ typedef struct dir_connection_t {
* "spooling" of directory material to the outbuf. Otherwise, we'd have
* to append everything to the outbuf in one enormous chunk. */
/** What exactly are we spooling right now? */
- enum {
- DIR_SPOOL_NONE=0, DIR_SPOOL_SERVER_BY_DIGEST, DIR_SPOOL_SERVER_BY_FP,
- DIR_SPOOL_EXTRA_BY_DIGEST, DIR_SPOOL_EXTRA_BY_FP,
- DIR_SPOOL_CACHED_DIR, DIR_SPOOL_NETWORKSTATUS,
- DIR_SPOOL_MICRODESC, /* NOTE: if we add another entry, add another bit. */
- } dir_spool_src : 3;
+ dir_spool_source_bitfield_t dir_spool_src : 3;
+
/** If we're fetching descriptors, what router purpose shall we assign
* to them? */
uint8_t router_purpose;
@@ -1448,11 +1729,15 @@ typedef struct dir_connection_t {
char identity_digest[DIGEST_LEN]; /**< Hash of the public RSA key for
* the directory server's signing key. */
+ /** Unique ID for directory requests; this used to be in connection_t, but
+ * that's going away and being used on channels instead. The dirserver still
+ * needs this for the incoming side, so it's moved here. */
+ uint64_t dirreq_id;
} dir_connection_t;
/** Subtype of connection_t for an connection to a controller. */
typedef struct control_connection_t {
- connection_t _base;
+ connection_t base_;
uint32_t event_mask; /**< Bitfield: which events does this controller
* care about? */
@@ -1479,12 +1764,12 @@ typedef struct control_connection_t {
} control_connection_t;
/** Cast a connection_t subtype pointer to a connection_t **/
-#define TO_CONN(c) (&(((c)->_base)))
-/** Helper macro: Given a pointer to to._base, of type from*, return &to. */
-#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, _base))
+#define TO_CONN(c) (&(((c)->base_)))
+/** Helper macro: Given a pointer to to.base_, of type from*, return &to. */
+#define DOWNCAST(to, ptr) ((to*)SUBTYPE_P(ptr, to, base_))
/** Cast a entry_connection_t subtype pointer to a edge_connection_t **/
-#define ENTRY_TO_EDGE_CONN(c) (&(((c))->_edge))
+#define ENTRY_TO_EDGE_CONN(c) (&(((c))->edge_))
/** Cast a entry_connection_t subtype pointer to a connection_t **/
#define ENTRY_TO_CONN(c) (TO_CONN(ENTRY_TO_EDGE_CONN(c)))
@@ -1529,12 +1814,12 @@ static INLINE edge_connection_t *TO_EDGE_CONN(connection_t *c)
static INLINE entry_connection_t *TO_ENTRY_CONN(connection_t *c)
{
tor_assert(c->magic == ENTRY_CONNECTION_MAGIC);
- return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, _edge._base);
+ return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_.base_);
}
static INLINE entry_connection_t *EDGE_TO_ENTRY_CONN(edge_connection_t *c)
{
- tor_assert(c->_base.magic == ENTRY_CONNECTION_MAGIC);
- return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, _edge);
+ tor_assert(c->base_.magic == ENTRY_CONNECTION_MAGIC);
+ return (entry_connection_t*) SUBTYPE_P(c, entry_connection_t, edge_);
}
static INLINE control_connection_t *TO_CONTROL_CONN(connection_t *c)
{
@@ -1597,11 +1882,13 @@ typedef enum {
ADDR_POLICY_ACCEPT=1,
ADDR_POLICY_REJECT=2,
} addr_policy_action_t;
+#define addr_policy_action_bitfield_t ENUM_BF(addr_policy_action_t)
/** A reference-counted address policy rule. */
typedef struct addr_policy_t {
int refcnt; /**< Reference count */
- addr_policy_action_t policy_type:2;/**< What to do when the policy matches.*/
+ /** What to do when the policy matches.*/
+ addr_policy_action_bitfield_t policy_type:2;
unsigned int is_private:1; /**< True iff this is the pseudo-address,
* "private". */
unsigned int is_canonical:1; /**< True iff this policy is the canonical
@@ -1610,7 +1897,15 @@ typedef struct addr_policy_t {
maskbits_t maskbits; /**< Accept/reject all addresses <b>a</b> such that the
* first <b>maskbits</b> bits of <b>a</b> match
* <b>addr</b>. */
- tor_addr_t addr; /**< Base address to accept or reject. */
+ /** Base address to accept or reject.
+ *
+ * Note that wildcards are treated
+ * differntly depending on address family. An AF_UNSPEC address means
+ * "All addresses, IPv4 or IPv6." An AF_INET address with maskbits==0 means
+ * "All IPv4 addresses" and an AF_INET6 address with maskbits == 0 means
+ * "All IPv6 addresses".
+ **/
+ tor_addr_t addr;
uint16_t prt_min; /**< Lowest port number to accept/reject. */
uint16_t prt_max; /**< Highest port number to accept/reject. */
} addr_policy_t;
@@ -1645,6 +1940,7 @@ typedef enum {
*/
SAVED_IN_JOURNAL
} saved_location_t;
+#define saved_location_bitfield_t ENUM_BF(saved_location_t)
/** Enumeration: what kind of download schedule are we using for a given
* object? */
@@ -1653,6 +1949,7 @@ typedef enum {
DL_SCHED_CONSENSUS = 1,
DL_SCHED_BRIDGE = 2,
} download_schedule_t;
+#define download_schedule_bitfield_t ENUM_BF(download_schedule_t)
/** Information about our plans for retrying downloads for a downloadable
* object. */
@@ -1661,7 +1958,7 @@ typedef struct download_status_t {
* again? */
uint8_t n_download_failures; /**< Number of failures trying to download the
* most recent descriptor. */
- download_schedule_t schedule : 8;
+ download_schedule_bitfield_t schedule : 8;
} download_status_t;
/** If n_download_failures is this high, the download can never happen. */
@@ -1703,9 +2000,7 @@ typedef struct signed_descriptor_t {
* routerlist->old_routers? -1 for none. */
int routerlist_index;
/** The valid-until time of the most recent consensus that listed this
- * descriptor, or a bit after the publication time of the most recent v2
- * networkstatus that listed it. 0 for "never listed in a consensus or
- * status, so far as we know." */
+ * descriptor. 0 for "never listed in a consensus, so far as we know." */
time_t last_listed_as_valid_until;
/* If true, we do not ever try to save this object in the cache. */
unsigned int do_not_cache : 1;
@@ -1724,7 +2019,6 @@ typedef int16_t country_t;
/** Information about another onion router in the network. */
typedef struct {
signed_descriptor_t cache_info;
- char *address; /**< Location of OR: either a hostname or an IP address. */
char *nickname; /**< Human-readable OR name. */
uint32_t addr; /**< IPv4 address of OR, in host order. */
@@ -1740,6 +2034,8 @@ typedef struct {
crypto_pk_t *onion_pkey; /**< Public RSA key for onions. */
crypto_pk_t *identity_pkey; /**< Public RSA key for signing. */
+ /** Public curve25519 key for onions */
+ curve25519_public_key_t *onion_curve25519_pkey;
char *platform; /**< What software/operating system is this OR using? */
@@ -1750,7 +2046,10 @@ typedef struct {
/** How many bytes/s is this router known to handle? */
uint32_t bandwidthcapacity;
smartlist_t *exit_policy; /**< What streams will this OR permit
- * to exit? NULL for 'reject *:*'. */
+ * to exit on IPv4? NULL for 'reject *:*'. */
+ /** What streams will this OR permit to exit on IPv6?
+ * NULL for 'reject *:*' */
+ struct short_policy_t *ipv6_exit_policy;
long uptime; /**< How many seconds the router claims to have been up */
smartlist_t *declared_family; /**< Nicknames of router which this router
* claims are its family. */
@@ -1769,8 +2068,6 @@ typedef struct {
/** True if, after we have added this router, we should re-launch
* tests for it. */
unsigned int needs_retest_if_added:1;
- /** True if ipv6_addr:ipv6_orport is preferred. */
- unsigned int ipv6_preferred:1;
/** Tor can use this router for general positions in circuits; we got it
* from a directory server as usual, or we're an authority and a server
@@ -1793,15 +2090,6 @@ typedef struct {
* things; see notes on ROUTER_PURPOSE_* macros above.
*/
uint8_t purpose;
-
- /* The below items are used only by authdirservers for
- * reachability testing. */
-
- /** When was the last time we could reach this OR? */
- time_t last_reachable;
- /** When did we start testing reachability for this OR? */
- time_t testing_since;
-
} routerinfo_t;
/** Information needed to keep and cache a signed extra-info document. */
@@ -1833,6 +2121,8 @@ typedef struct routerstatus_t {
uint32_t addr; /**< IPv4 address for this router. */
uint16_t or_port; /**< OR port for this router. */
uint16_t dir_port; /**< Directory port for this router. */
+ tor_addr_t ipv6_addr; /**< IPv6 address for this router. */
+ uint16_t ipv6_orport; /**<IPV6 OR port for this router. */
unsigned int is_authority:1; /**< True iff this router is an authority. */
unsigned int is_exit:1; /**< True iff this router is a good exit. */
unsigned int is_stable:1; /**< True iff this router stays up a long time. */
@@ -1846,10 +2136,6 @@ typedef struct routerstatus_t {
unsigned int is_unnamed:1; /**< True iff "nickname" belongs to another
* router. */
unsigned int is_valid:1; /**< True iff this router isn't invalid. */
- unsigned int is_v2_dir:1; /**< True iff this router can serve directory
- * information with v2 of the directory
- * protocol. (All directory caches cache v1
- * directories.) */
unsigned int is_possible_guard:1; /**< True iff this router would be a good
* choice as an entry guard. */
unsigned int is_bad_exit:1; /**< True iff this node is a bad choice for
@@ -1862,30 +2148,23 @@ typedef struct routerstatus_t {
* included.) We'll replace all these with a big tor_version_t or a char[]
* if the number of traits we care about ever becomes incredibly big. */
unsigned int version_known:1;
- /** True iff this router is a version that supports BEGIN_DIR cells. */
- unsigned int version_supports_begindir:1;
- /** True iff this router is a version that supports conditional consensus
- * downloads (signed by list of authorities). */
- unsigned int version_supports_conditional_consensus:1;
- /** True iff this router is a version that we can post extrainfo docs to. */
- unsigned int version_supports_extrainfo_upload:1;
- /** True iff this router is a version that, if it caches directory info,
- * we can get v3 downloads from. */
- unsigned int version_supports_v3_dir:1;
+
/** True iff this router is a version that, if it caches directory info,
* we can get microdescriptors from. */
unsigned int version_supports_microdesc_cache:1;
/** True iff this router is a version that allows DATA cells to arrive on
* a stream before it has sent a CONNECTED cell. */
unsigned int version_supports_optimistic_data:1;
+ /** True iff this router has a version that allows it to accept EXTEND2
+ * cells */
+ unsigned int version_supports_extend2_cells:1;
unsigned int has_bandwidth:1; /**< The vote/consensus had bw info */
unsigned int has_exitsummary:1; /**< The vote/consensus had exit summaries */
- unsigned int has_measured_bw:1; /**< The vote/consensus had a measured bw */
+ unsigned int bw_is_unmeasured:1; /**< This is a consensus entry, with
+ * the Unmeasured flag set. */
- uint32_t measured_bw; /**< Measured bandwidth (capacity) of the router */
-
- uint32_t bandwidth; /**< Bandwidth (capacity) of the router as reported in
+ uint32_t bandwidth_kb; /**< Bandwidth (capacity) of the router as reported in
* the vote/consensus, in kilobytes/sec. */
char *exitsummary; /**< exit policy summary -
* XXX weasel: this probably should not stay a string. */
@@ -1893,12 +2172,6 @@ typedef struct routerstatus_t {
/* ---- The fields below aren't derived from the networkstatus; they
* hold local information only. */
- /** True if we, as a directory mirror, want to download the corresponding
- * routerinfo from the authority who gave us this routerstatus. (That is,
- * if we don't have the routerinfo, and if we haven't already tried to get it
- * from this authority.) Applies in v2 networkstatus document only.
- */
- unsigned int need_to_mirror:1;
time_t last_dir_503_at; /**< When did this router last tell us that it
* was too busy to serve directory info? */
download_status_t dl_status;
@@ -1940,7 +2213,7 @@ typedef struct microdesc_t {
*/
time_t last_listed;
/** Where is this microdescriptor currently stored? */
- saved_location_t saved_location : 3;
+ saved_location_bitfield_t saved_location : 3;
/** If true, do not attempt to cache this microdescriptor on disk. */
unsigned int no_save : 1;
/** If true, this microdesc has an entry in the microdesc_map */
@@ -1968,10 +2241,19 @@ typedef struct microdesc_t {
/** As routerinfo_t.onion_pkey */
crypto_pk_t *onion_pkey;
+ /** As routerinfo_t.onion_curve25519_pkey */
+ curve25519_public_key_t *onion_curve25519_pkey;
+ /** As routerinfo_t.ipv6_add */
+ tor_addr_t ipv6_addr;
+ /** As routerinfo_t.ipv6_orport */
+ uint16_t ipv6_orport;
/** As routerinfo_t.family */
smartlist_t *family;
- /** Exit policy summary */
+ /** IPv4 exit policy summary */
short_policy_t *exit_policy;
+ /** IPv6 exit policy summary */
+ short_policy_t *ipv6_exit_policy;
+
} microdesc_t;
/** A node_t represents a Tor router.
@@ -2006,13 +2288,13 @@ typedef struct node_t {
routerstatus_t *rs;
/* local info: copied from routerstatus, then possibly frobbed based
- * on experience. Authorities set this stuff directly. */
+ * on experience. Authorities set this stuff directly. Note that
+ * these reflect knowledge of the primary (IPv4) OR port only. */
unsigned int is_running:1; /**< As far as we know, is this OR currently
* running? */
unsigned int is_valid:1; /**< Has a trusted dirserver validated this OR?
- * (For Authdir: Have we validated this OR?)
- */
+ * (For Authdir: Have we validated this OR?) */
unsigned int is_fast:1; /** Do we think this is a fast OR? */
unsigned int is_stable:1; /** Do we think this is a stable OR? */
unsigned int is_possible_guard:1; /**< Do we think this is an OK guard? */
@@ -2033,57 +2315,26 @@ typedef struct node_t {
/** Local info: we treat this node as if it rejects everything */
unsigned int rejects_all:1;
+ /** Local info: this node is in our list of guards */
+ unsigned int using_as_guard:1;
+
/* Local info: derived. */
+ /** True if the IPv6 OR port is preferred over the IPv4 OR port. */
+ unsigned int ipv6_preferred:1;
+
/** According to the geoip db what country is this router in? */
+ /* XXXprop186 what is this suppose to mean with multiple OR ports? */
country_t country;
-} node_t;
-/** How many times will we try to download a router's descriptor before giving
- * up? */
-#define MAX_ROUTERDESC_DOWNLOAD_FAILURES 8
-
-/** How many times will we try to download a microdescriptor before giving
- * up? */
-#define MAX_MICRODESC_DOWNLOAD_FAILURES 8
-
-/** Contents of a v2 (non-consensus, non-vote) network status object. */
-typedef struct networkstatus_v2_t {
- /** When did we receive the network-status document? */
- time_t received_on;
-
- /** What was the digest of the document? */
- char networkstatus_digest[DIGEST_LEN];
-
- /* These fields come from the actual network-status document.*/
- time_t published_on; /**< Declared publication date. */
-
- char *source_address; /**< Canonical directory server hostname. */
- uint32_t source_addr; /**< Canonical directory server IP. */
- uint16_t source_dirport; /**< Canonical directory server dirport. */
-
- unsigned int binds_names:1; /**< True iff this directory server binds
- * names. */
- unsigned int recommends_versions:1; /**< True iff this directory server
- * recommends client and server software
- * versions. */
- unsigned int lists_bad_exits:1; /**< True iff this directory server marks
- * malfunctioning exits as bad. */
- /** True iff this directory server marks malfunctioning directories as
- * bad. */
- unsigned int lists_bad_directories:1;
-
- char identity_digest[DIGEST_LEN]; /**< Digest of signing key. */
- char *contact; /**< How to contact directory admin? (may be NULL). */
- crypto_pk_t *signing_key; /**< Key used to sign this directory. */
- char *client_versions; /**< comma-separated list of recommended client
- * versions. */
- char *server_versions; /**< comma-separated list of recommended server
- * versions. */
-
- smartlist_t *entries; /**< List of routerstatus_t*. This list is kept
- * sorted by identity_digest. */
-} networkstatus_v2_t;
+ /* The below items are used only by authdirservers for
+ * reachability testing. */
+
+ /** When was the last time we could reach this OR? */
+ time_t last_reachable; /* IPv4. */
+ time_t last_reachable6; /* IPv6. */
+
+} node_t;
/** Linked list of microdesc hash lines for a single router in a directory
* vote.
@@ -2091,7 +2342,8 @@ typedef struct networkstatus_v2_t {
typedef struct vote_microdesc_hash_t {
/** Next element in the list, or NULL. */
struct vote_microdesc_hash_t *next;
- /** The raw contents of the microdesc hash line, excluding the "m". */
+ /** The raw contents of the microdesc hash line, from the "m" through the
+ * newline. */
char *microdesc_hash_line;
} vote_microdesc_hash_t;
@@ -2099,10 +2351,15 @@ typedef struct vote_microdesc_hash_t {
typedef struct vote_routerstatus_t {
routerstatus_t status; /**< Underlying 'status' object for this router.
* Flags are redundant. */
+ /** How many known-flags are allowed in a vote? This is the width of
+ * the flags field of vote_routerstatus_t */
+#define MAX_KNOWN_FLAGS_IN_VOTE 64
uint64_t flags; /**< Bit-field for all recognized flags; index into
* networkstatus_t.known_flags. */
char *version; /**< The version that the authority says this router is
* running. */
+ unsigned int has_measured_bw:1; /**< The vote had a measured bw */
+ uint32_t measured_bw_kb; /**< Measured bandwidth (capacity) of the router */
/** The hash or hashes that the authority claims this microdesc has. */
vote_microdesc_hash_t *microdesc;
} vote_routerstatus_t;
@@ -2166,8 +2423,11 @@ typedef enum {
/** A common structure to hold a v3 network status vote, or a v3 network
* status consensus. */
typedef struct networkstatus_t {
- networkstatus_type_t type : 8; /**< Vote, consensus, or opinion? */
- consensus_flavor_t flavor : 8; /**< If a consensus, what kind? */
+ networkstatus_type_t type; /**< Vote, consensus, or opinion? */
+ consensus_flavor_t flavor; /**< If a consensus, what kind? */
+ unsigned int has_measured_bws : 1;/**< True iff this networkstatus contains
+ * measured= bandwidth values. */
+
time_t published; /**< Vote only: Time when vote was written. */
time_t valid_after; /**< Time after which this vote or consensus applies. */
time_t fresh_until; /**< Time before which this is the most recent vote or
@@ -2247,10 +2507,6 @@ typedef struct desc_store_t {
* filename for a temporary file when rebuilding the store, and .new to this
* filename for the journal. */
const char *fname_base;
- /** Alternative (obsolete) value for fname_base: if the file named by
- * fname_base isn't present, we read from here instead, but we never write
- * here. */
- const char *fname_alt_base;
/** Human-readable description of what this store contains. */
const char *description;
@@ -2305,6 +2561,9 @@ typedef struct extend_info_t {
uint16_t port; /**< OR port. */
tor_addr_t addr; /**< IP address. */
crypto_pk_t *onion_key; /**< Current onionskin key. */
+#ifdef CURVE25519_ENABLED
+ curve25519_public_key_t curve25519_onion_key;
+#endif
} extend_info_t;
/** Certificate for v3 directory protocol: binds long-term authority identity
@@ -2324,9 +2583,6 @@ typedef struct authority_cert_t {
uint32_t addr;
/** This authority's directory port. */
uint16_t dir_port;
- /** True iff this certificate was cross-certified by signing the identity
- * key with the signing key. */
- uint8_t is_cross_certified;
} authority_cert_t;
/** Bitfield enum type listing types of information that directory authorities
@@ -2340,15 +2596,8 @@ typedef struct authority_cert_t {
*/
typedef enum {
NO_DIRINFO = 0,
- /** Serves/signs v1 directory information: Big lists of routers, and short
- * routerstatus documents. */
- V1_DIRINFO = 1 << 0,
- /** Serves/signs v2 directory information: i.e. v2 networkstatus documents */
- V2_DIRINFO = 1 << 1,
/** Serves/signs v3 directory information: votes, consensuses, certs */
V3_DIRINFO = 1 << 2,
- /** Serves hidden service descriptors. */
- HIDSERV_DIRINFO = 1 << 3,
/** Serves bridge descriptors. */
BRIDGE_DIRINFO = 1 << 4,
/** Serves extrainfo documents. */
@@ -2357,8 +2606,25 @@ typedef enum {
MICRODESC_DIRINFO=1 << 6,
} dirinfo_type_t;
+#define ALL_DIRINFO ((dirinfo_type_t)((1<<7)-1))
+
#define CRYPT_PATH_MAGIC 0x70127012u
+struct fast_handshake_state_t;
+struct ntor_handshake_state_t;
+#define ONION_HANDSHAKE_TYPE_TAP 0x0000
+#define ONION_HANDSHAKE_TYPE_FAST 0x0001
+#define ONION_HANDSHAKE_TYPE_NTOR 0x0002
+#define MAX_ONION_HANDSHAKE_TYPE 0x0002
+typedef struct {
+ uint16_t tag;
+ union {
+ struct fast_handshake_state_t *fast;
+ crypto_dh_t *tap;
+ struct ntor_handshake_state_t *ntor;
+ } u;
+} onion_handshake_state_t;
+
/** Holds accounting information for a single step in the layered encryption
* performed by a circuit. Used only at the client edge of a circuit. */
typedef struct crypt_path_t {
@@ -2377,17 +2643,15 @@ typedef struct crypt_path_t {
/** Digest state for cells heading away from the OR at this step. */
crypto_digest_t *b_digest;
- /** Current state of Diffie-Hellman key negotiation with the OR at this
+ /** Current state of the handshake as performed with the OR at this
* step. */
- crypto_dh_t *dh_handshake_state;
- /** Current state of 'fast' (non-PK) key negotiation with the OR at this
- * step. Used to save CPU when TLS is already providing all the
- * authentication, secrecy, and integrity we need, and we're already
- * distinguishable from an OR.
- */
- uint8_t fast_handshake_state[DIGEST_LEN];
+ onion_handshake_state_t handshake_state;
+ /** Diffie-hellman handshake state for performing an introduction
+ * operations */
+ crypto_dh_t *rend_dh_handshake_state;
+
/** Negotiated key material shared with the OR at this step. */
- char handshake_digest[DIGEST_LEN];/* KH in tor-spec.txt */
+ char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */
/** Information to extend to the OR at this step. */
extend_info_t *extend_info;
@@ -2428,10 +2692,6 @@ typedef struct {
#define CPATH_KEY_MATERIAL_LEN (20*2+16*2)
#define DH_KEY_LEN DH_BYTES
-#define ONIONSKIN_CHALLENGE_LEN (PKCS1_OAEP_PADDING_OVERHEAD+\
- CIPHER_KEY_LEN+\
- DH_KEY_LEN)
-#define ONIONSKIN_REPLY_LEN (DH_KEY_LEN+DIGEST_LEN)
/** Information used to build a circuit. */
typedef struct {
@@ -2460,32 +2720,24 @@ typedef struct {
time_t expiry_time;
} cpath_build_state_t;
-/**
- * The cell_ewma_t structure keeps track of how many cells a circuit has
- * transferred recently. It keeps an EWMA (exponentially weighted moving
- * average) of the number of cells flushed from the circuit queue onto a
- * connection in connection_or_flush_from_first_active_circuit().
- */
-typedef struct {
- /** The last 'tick' at which we recalibrated cell_count.
- *
- * A cell sent at exactly the start of this tick has weight 1.0. Cells sent
- * since the start of this tick have weight greater than 1.0; ones sent
- * earlier have less weight. */
- unsigned last_adjusted_tick;
- /** The EWMA of the cell count. */
- double cell_count;
- /** True iff this is the cell count for a circuit's previous
- * connection. */
- unsigned int is_for_p_conn : 1;
- /** The position of the circuit within the OR connection's priority
- * queue. */
- int heap_index;
-} cell_ewma_t;
-
#define ORIGIN_CIRCUIT_MAGIC 0x35315243u
#define OR_CIRCUIT_MAGIC 0x98ABC04Fu
+struct create_cell_t;
+
+/** Entry in the cell stats list of a circuit; used only if CELL_STATS
+ * events are enabled. */
+typedef struct testing_cell_stats_entry_t {
+ uint8_t command; /**< cell command number. */
+ /** Waiting time in centiseconds if this event is for a removed cell,
+ * or 0 if this event is for adding a cell to the queue. 22 bits can
+ * store more than 11 hours, enough to assume that a circuit with this
+ * delay would long have been closed. */
+ unsigned int waiting_time:22;
+ unsigned int removed:1; /**< 0 for added to, 1 for removed from queue. */
+ unsigned int exitward:1; /**< 0 for app-ward, 1 for exit-ward. */
+} testing_cell_stats_entry_t;
+
/**
* A circuit is a path over the onion routing
* network. Applications can connect to one end of the circuit, and can
@@ -2513,23 +2765,49 @@ typedef struct circuit_t {
uint32_t magic; /**< For memory and type debugging: must equal
* ORIGIN_CIRCUIT_MAGIC or OR_CIRCUIT_MAGIC. */
- /** Queue of cells waiting to be transmitted on n_conn. */
- cell_queue_t n_conn_cells;
- /** The OR connection that is next in this circuit. */
- or_connection_t *n_conn;
- /** The circuit_id used in the next (forward) hop of this circuit. */
+ /** The channel that is next in this circuit. */
+ channel_t *n_chan;
+
+ /**
+ * The circuit_id used in the next (forward) hop of this circuit;
+ * this is unique to n_chan, but this ordered pair is globally
+ * unique:
+ *
+ * (n_chan->global_identifier, n_circ_id)
+ */
circid_t n_circ_id;
- /** The hop to which we want to extend this circuit. Should be NULL if
- * the circuit has attached to a connection. */
+ /**
+ * Circuit mux associated with n_chan to which this circuit is attached;
+ * NULL if we have no n_chan.
+ */
+ circuitmux_t *n_mux;
+
+ /** Queue of cells waiting to be transmitted on n_chan */
+ cell_queue_t n_chan_cells;
+
+ /**
+ * The hop to which we want to extend this circuit. Should be NULL if
+ * the circuit has attached to a channel.
+ */
extend_info_t *n_hop;
- /** True iff we are waiting for n_conn_cells to become less full before
+ /** True iff we are waiting for n_chan_cells to become less full before
* allowing p_streams to add any more cells. (Origin circuit only.) */
- unsigned int streams_blocked_on_n_conn : 1;
- /** True iff we are waiting for p_conn_cells to become less full before
+ unsigned int streams_blocked_on_n_chan : 1;
+ /** True iff we are waiting for p_chan_cells to become less full before
* allowing n_streams to add any more cells. (OR circuit only.) */
- unsigned int streams_blocked_on_p_conn : 1;
+ unsigned int streams_blocked_on_p_chan : 1;
+
+ /** True iff we have queued a delete backwards on this circuit, but not put
+ * it on the output buffer. */
+ unsigned int p_delete_pending : 1;
+ /** True iff we have queued a delete forwards on this circuit, but not put
+ * it on the output buffer. */
+ unsigned int n_delete_pending : 1;
+
+ /** True iff this circuit has received a DESTROY cell in either direction */
+ unsigned int received_destroy : 1;
uint8_t state; /**< Current status of this circuit. */
uint8_t purpose; /**< Why are we creating this circuit? */
@@ -2544,15 +2822,27 @@ typedef struct circuit_t {
* more. */
int deliver_window;
- /** For storage while n_conn is pending
- * (state CIRCUIT_STATE_OR_WAIT). When defined, it is always
- * length ONIONSKIN_CHALLENGE_LEN. */
- char *n_conn_onionskin;
+ /** Temporary field used during circuits_handle_oom. */
+ uint32_t age_tmp;
- /** When was this circuit created? We keep this timestamp with a higher
- * resolution than most so that the circuit-build-time tracking code can
- * get millisecond resolution. */
+ /** For storage while n_chan is pending (state CIRCUIT_STATE_CHAN_WAIT). */
+ struct create_cell_t *n_chan_create_cell;
+
+ /** When did circuit construction actually begin (ie send the
+ * CREATE cell or begin cannibalization).
+ *
+ * Note: This timer will get reset if we decide to cannibalize
+ * a circuit. It may also get reset during certain phases of hidden
+ * service circuit use.
+ *
+ * We keep this timestamp with a higher resolution than most so that the
+ * circuit-build-time tracking code can get millisecond resolution.
+ */
+ struct timeval timestamp_began;
+
+ /** This timestamp marks when the init_circuit_base constructor ran. */
struct timeval timestamp_created;
+
/** When the circuit was first used, or 0 if the circuit is clean.
*
* XXXX023 Note that some code will artifically adjust this value backward
@@ -2573,23 +2863,25 @@ typedef struct circuit_t {
const char *marked_for_close_file; /**< For debugging: in which file was this
* circuit marked for close? */
+ /** Unique ID for measuring tunneled network status requests. */
+ uint64_t dirreq_id;
+
+ /** Next circuit in linked list of all circuits (global_circuitlist). */
+ TOR_LIST_ENTRY(circuit_t) head;
+
/** Next circuit in the doubly-linked ring of circuits waiting to add
* cells to n_conn. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *next_active_on_n_conn;
+ struct circuit_t *next_active_on_n_chan;
/** Previous circuit in the doubly-linked ring of circuits waiting to add
* cells to n_conn. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *prev_active_on_n_conn;
- struct circuit_t *next; /**< Next circuit in linked list of all circuits. */
+ struct circuit_t *prev_active_on_n_chan;
- /** Unique ID for measuring tunneled network status requests. */
- uint64_t dirreq_id;
-
- /** The EWMA count for the number of cells flushed from the
- * n_conn_cells queue. Used to determine which circuit to flush from next.
- */
- cell_ewma_t n_cell_ewma;
+ /** Various statistics about cells being added to or removed from this
+ * circuit's queues; used only if CELL_STATS events are enabled and
+ * cleared after being sent to control port. */
+ smartlist_t *testing_cell_stats;
} circuit_t;
/** Largest number of relay_early cells that we can send on a given
@@ -2598,29 +2890,80 @@ typedef struct circuit_t {
/**
* Describes the circuit building process in simplified terms based
- * on the path bias accounting state for a circuit. Created to prevent
- * overcounting due to unknown cases of circuit reuse. See Bug #6475.
+ * on the path bias accounting state for a circuit.
+ *
+ * NOTE: These state values are enumerated in the order for which we
+ * expect circuits to transition through them. If you add states,
+ * you need to preserve this overall ordering. The various pathbias
+ * state transition and accounting functions (pathbias_mark_* and
+ * pathbias_count_*) contain ordinal comparisons to enforce proper
+ * state transitions for corrections.
+ *
+ * This state machine and the associated logic was created to prevent
+ * miscounting due to unknown cases of circuit reuse. See also tickets
+ * #6475 and #7802.
*/
typedef enum {
/** This circuit is "new". It has not yet completed a first hop
* or been counted by the path bias code. */
PATH_STATE_NEW_CIRC = 0,
- /** This circuit has completed a first hop, and has been counted by
+ /** This circuit has completed one/two hops, and has been counted by
* the path bias logic. */
- PATH_STATE_DID_FIRST_HOP = 1,
- /** This circuit has been completely built, and has been counted as
- * successful by the path bias logic. */
- PATH_STATE_SUCCEEDED = 2,
+ PATH_STATE_BUILD_ATTEMPTED = 1,
+ /** This circuit has been completely built */
+ PATH_STATE_BUILD_SUCCEEDED = 2,
+ /** Did we try to attach any SOCKS streams or hidserv introductions to
+ * this circuit?
+ *
+ * Note: If we ever implement end-to-end stream timing through test
+ * stream probes (#5707), we must *not* set this for those probes
+ * (or any other automatic streams) because the adversary could
+ * just tag at a later point.
+ */
+ PATH_STATE_USE_ATTEMPTED = 3,
+ /** Did any SOCKS streams or hidserv introductions actually succeed on
+ * this circuit?
+ *
+ * If any streams detatch/fail from this circuit, the code transitions
+ * the circuit back to PATH_STATE_USE_ATTEMPTED to ensure we probe. See
+ * pathbias_mark_use_rollback() for that.
+ */
+ PATH_STATE_USE_SUCCEEDED = 4,
+
+ /**
+ * This is a special state to indicate that we got a corrupted
+ * relay cell on a circuit and we don't intend to probe it.
+ */
+ PATH_STATE_USE_FAILED = 5,
+
+ /**
+ * This is a special state to indicate that we already counted
+ * the circuit. Used to guard against potential state machine
+ * violations.
+ */
+ PATH_STATE_ALREADY_COUNTED = 6,
} path_state_t;
+#define path_state_bitfield_t ENUM_BF(path_state_t)
/** An origin_circuit_t holds data necessary to build and use a circuit.
*/
typedef struct origin_circuit_t {
- circuit_t _base;
+ circuit_t base_;
/** Linked list of AP streams (or EXIT streams if hidden service)
* associated with this circuit. */
edge_connection_t *p_streams;
+
+ /** Bytes read from any attached stream since last call to
+ * control_event_circ_bandwidth_used(). Only used if we're configured
+ * to emit CIRC_BW events. */
+ uint32_t n_read_circ_bw;
+
+ /** Bytes written to any attached stream since last call to
+ * control_event_circ_bandwidth_used(). Only used if we're configured
+ * to emit CIRC_BW events. */
+ uint32_t n_written_circ_bw;
+
/** Build state for this circuit. It includes the intended path
* length, the chosen exit router, rendezvous information, etc.
*/
@@ -2646,9 +2989,36 @@ typedef struct origin_circuit_t {
* cannibalized circuits. */
unsigned int has_opened : 1;
- /** Kludge to help us prevent the warn in bug #6475 and eventually
- * debug why we are not seeing first hops in some cases. */
- path_state_t path_state : 2;
+ /**
+ * Path bias state machine. Used to ensure integrity of our
+ * circuit building and usage accounting. See path_state_t
+ * for more details.
+ */
+ path_state_bitfield_t path_state : 3;
+
+ /* If this flag is set, we should not consider attaching any more
+ * connections to this circuit. */
+ unsigned int unusable_for_new_conns : 1;
+
+ /**
+ * Tristate variable to guard against pathbias miscounting
+ * due to circuit purpose transitions changing the decision
+ * of pathbias_should_count(). This variable is informational
+ * only. The current results of pathbias_should_count() are
+ * the official decision for pathbias accounting.
+ */
+ uint8_t pathbias_shouldcount;
+#define PATHBIAS_SHOULDCOUNT_UNDECIDED 0
+#define PATHBIAS_SHOULDCOUNT_IGNORED 1
+#define PATHBIAS_SHOULDCOUNT_COUNTED 2
+
+ /** For path probing. Store the temporary probe stream ID
+ * for response comparison */
+ streamid_t pathbias_probe_id;
+
+ /** For path probing. Store the temporary probe address nonce
+ * (in host byte order) for response comparison. */
+ uint32_t pathbias_probe_nonce;
/** Set iff this is a hidden-service circuit which has timed out
* according to our current circuit-build timeout, but which has
@@ -2666,6 +3036,10 @@ typedef struct origin_circuit_t {
* service-side introduction circuits never have this flag set.) */
unsigned int hs_circ_has_timed_out : 1;
+ /** Set iff this circuit has been given a relaxed timeout because
+ * no circuits have opened. Used to prevent spamming logs. */
+ unsigned int relaxed_timeout : 1;
+
/** Set iff this is a service-side rendezvous circuit for which a
* new connection attempt has been launched. We consider launching
* a new service-side rend circ to a client when the previous one
@@ -2743,29 +3117,42 @@ typedef struct origin_circuit_t {
* ISO_STREAM. */
uint64_t associated_isolated_stream_global_id;
/**@}*/
-
+ /** A list of addr_policy_t for this circuit in particular. Used by
+ * adjust_exit_policy_from_exitpolicy_failure.
+ */
+ smartlist_t *prepend_policy;
} origin_circuit_t;
+struct onion_queue_t;
+
/** An or_circuit_t holds information needed to implement a circuit at an
* OR. */
typedef struct or_circuit_t {
- circuit_t _base;
+ circuit_t base_;
/** Next circuit in the doubly-linked ring of circuits waiting to add
- * cells to p_conn. NULL if we have no cells pending, or if we're not
+ * cells to p_chan. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *next_active_on_p_conn;
+ struct circuit_t *next_active_on_p_chan;
/** Previous circuit in the doubly-linked ring of circuits waiting to add
- * cells to p_conn. NULL if we have no cells pending, or if we're not
+ * cells to p_chan. NULL if we have no cells pending, or if we're not
* linked to an OR connection. */
- struct circuit_t *prev_active_on_p_conn;
+ struct circuit_t *prev_active_on_p_chan;
+ /** Pointer to an entry on the onion queue, if this circuit is waiting for a
+ * chance to give an onionskin to a cpuworker. Used only in onion.c */
+ struct onion_queue_t *onionqueue_entry;
/** The circuit_id used in the previous (backward) hop of this circuit. */
circid_t p_circ_id;
/** Queue of cells waiting to be transmitted on p_conn. */
- cell_queue_t p_conn_cells;
- /** The OR connection that is previous in this circuit. */
- or_connection_t *p_conn;
+ cell_queue_t p_chan_cells;
+ /** The channel that is previous in this circuit. */
+ channel_t *p_chan;
+ /**
+ * Circuit mux associated with p_chan to which this circuit is attached;
+ * NULL if we have no p_chan.
+ */
+ circuitmux_t *p_mux;
/** Linked list of Exit streams associated with this circuit. */
edge_connection_t *n_streams;
/** Linked list of Exit streams associated with this circuit that are
@@ -2791,21 +3178,10 @@ typedef struct or_circuit_t {
* is not marked for close. */
struct or_circuit_t *rend_splice;
-#if REND_COOKIE_LEN >= DIGEST_LEN
-#define REND_TOKEN_LEN REND_COOKIE_LEN
-#else
-#define REND_TOKEN_LEN DIGEST_LEN
-#endif
+ struct or_circuit_rendinfo_s *rendinfo;
- /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a
- * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes
- * otherwise.
- * ???? move to a subtype or adjunct structure? Wastes 20 bytes. -NM
- */
- char rend_token[REND_TOKEN_LEN];
-
- /* ???? move to a subtype or adjunct structure? Wastes 20 bytes -NM */
- char handshake_digest[DIGEST_LEN]; /**< Stores KH for the handshake. */
+ /** Stores KH for the handshake. */
+ char rend_circ_nonce[DIGEST_LEN];/* KH in tor-spec.txt */
/** How many more relay_early cells can we send on this circuit, according
* to the specification? */
@@ -2823,31 +3199,65 @@ typedef struct or_circuit_t {
* buffer stats to disk. */
uint64_t total_cell_waiting_time;
- /** The EWMA count for the number of cells flushed from the
- * p_conn_cells queue. */
- cell_ewma_t p_cell_ewma;
+ /** Maximum cell queue size for a middle relay; this is stored per circuit
+ * so append_cell_to_circuit_queue() can adjust it if it changes. If set
+ * to zero, it is initialized to the default value.
+ */
+ uint32_t max_middle_cells;
} or_circuit_t;
+typedef struct or_circuit_rendinfo_s {
+
+#if REND_COOKIE_LEN != DIGEST_LEN
+#error "The REND_TOKEN_LEN macro assumes REND_COOKIE_LEN == DIGEST_LEN"
+#endif
+#define REND_TOKEN_LEN DIGEST_LEN
+
+ /** A hash of location-hidden service's PK if purpose is INTRO_POINT, or a
+ * rendezvous cookie if purpose is REND_POINT_WAITING. Filled with zeroes
+ * otherwise.
+ */
+ char rend_token[REND_TOKEN_LEN];
+
+ /** True if this is a rendezvous point circuit; false if this is an
+ * introduction point. */
+ unsigned is_rend_circ;
+
+} or_circuit_rendinfo_t;
+
/** Convert a circuit subtype to a circuit_t. */
-#define TO_CIRCUIT(x) (&((x)->_base))
+#define TO_CIRCUIT(x) (&((x)->base_))
/** Convert a circuit_t* to a pointer to the enclosing or_circuit_t. Assert
* if the cast is impossible. */
static or_circuit_t *TO_OR_CIRCUIT(circuit_t *);
+static const or_circuit_t *CONST_TO_OR_CIRCUIT(const circuit_t *);
/** Convert a circuit_t* to a pointer to the enclosing origin_circuit_t.
* Assert if the cast is impossible. */
static origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *);
+static const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT(const circuit_t *);
static INLINE or_circuit_t *TO_OR_CIRCUIT(circuit_t *x)
{
tor_assert(x->magic == OR_CIRCUIT_MAGIC);
return DOWNCAST(or_circuit_t, x);
}
+static INLINE const or_circuit_t *CONST_TO_OR_CIRCUIT(const circuit_t *x)
+{
+ tor_assert(x->magic == OR_CIRCUIT_MAGIC);
+ return DOWNCAST(or_circuit_t, x);
+}
static INLINE origin_circuit_t *TO_ORIGIN_CIRCUIT(circuit_t *x)
{
tor_assert(x->magic == ORIGIN_CIRCUIT_MAGIC);
return DOWNCAST(origin_circuit_t, x);
}
+static INLINE const origin_circuit_t *CONST_TO_ORIGIN_CIRCUIT(
+ const circuit_t *x)
+{
+ tor_assert(x->magic == ORIGIN_CIRCUIT_MAGIC);
+ return DOWNCAST(origin_circuit_t, x);
+}
/** Bitfield type: things that we're willing to use invalid routers for. */
typedef enum invalid_router_usage_t {
@@ -2910,13 +3320,40 @@ typedef struct port_cfg_t {
uint8_t isolation_flags; /**< Zero or more isolation flags */
int session_group; /**< A session group, or -1 if this port is not in a
* session group. */
+ /* Socks only: */
+ /** When both no-auth and user/pass are advertised by a SOCKS client, select
+ * no-auth. */
+ unsigned int socks_prefer_no_auth : 1;
/* Server port types (or, dir) only: */
unsigned int no_advertise : 1;
unsigned int no_listen : 1;
unsigned int all_addrs : 1;
- unsigned int ipv4_only : 1;
- unsigned int ipv6_only : 1;
+ unsigned int bind_ipv4_only : 1;
+ unsigned int bind_ipv6_only : 1;
+
+ /* Client port types only: */
+ unsigned int ipv4_traffic : 1;
+ unsigned int ipv6_traffic : 1;
+ unsigned int prefer_ipv6 : 1;
+
+ /** For a socks listener: should we cache IPv4/IPv6 DNS information that
+ * exit nodes tell us?
+ *
+ * @{ */
+ unsigned int cache_ipv4_answers : 1;
+ unsigned int cache_ipv6_answers : 1;
+ /** @} */
+ /** For a socks listeners: if we find an answer in our client-side DNS cache,
+ * should we use it?
+ *
+ * @{ */
+ unsigned int use_cached_ipv4_answers : 1;
+ unsigned int use_cached_ipv6_answers : 1;
+ /** @} */
+ /** For socks listeners: When we can automap an address to IPv4 or IPv6,
+ * do we prefer IPv6? */
+ unsigned int prefer_ipv6_virtaddr : 1;
/* Unix sockets only: */
/** Path for an AF_UNIX address */
@@ -2952,14 +3389,14 @@ typedef struct routerset_t routerset_t;
/** Configuration options for a Tor process. */
typedef struct {
- uint32_t _magic;
+ uint32_t magic_;
/** What should the tor process actually do? */
enum {
CMD_RUN_TOR=0, CMD_LIST_FINGERPRINT, CMD_HASH_PASSWORD,
- CMD_VERIFY_CONFIG, CMD_RUN_UNITTESTS
+ CMD_VERIFY_CONFIG, CMD_RUN_UNITTESTS, CMD_DUMP_CONFIG
} command;
- const char *command_arg; /**< Argument for command-line option. */
+ char *command_arg; /**< Argument for command-line option. */
config_line_t *Logs; /**< New-style list of configuration lines
* for logs */
@@ -2994,7 +3431,7 @@ typedef struct {
* ORs not to consider as exits. */
/** Union of ExcludeNodes and ExcludeExitNodes */
- routerset_t *_ExcludeExitNodesUnion;
+ routerset_t *ExcludeExitNodesUnion_;
int DisableAllSwap; /**< Boolean: Attempt to call mlockall() on our
* process for all current and future memory. */
@@ -3002,7 +3439,7 @@ typedef struct {
/** List of "entry", "middle", "exit", "introduction", "rendezvous". */
smartlist_t *AllowInvalidNodes;
/** Bitmask; derived from AllowInvalidNodes. */
- invalid_router_usage_t _AllowInvalid;
+ invalid_router_usage_t AllowInvalid_;
config_line_t *ExitPolicy; /**< Lists of exit policy components. */
int ExitPolicyRejectPrivate; /**< Should we not exit to local addresses? */
config_line_t *SocksPolicy; /**< Lists of socks policy components */
@@ -3023,7 +3460,11 @@ typedef struct {
/** Addresses to bind for listening for control connections. */
config_line_t *ControlListenAddress;
/** Local address to bind outbound sockets */
- char *OutboundBindAddress;
+ config_line_t *OutboundBindAddress;
+ /** IPv4 address derived from OutboundBindAddress. */
+ tor_addr_t OutboundBindAddressIPv4_;
+ /** IPv6 address derived from OutboundBindAddress. */
+ tor_addr_t OutboundBindAddressIPv6_;
/** Directory server only: which versions of
* Tor should we tell users to run? */
config_line_t *RecommendedVersions;
@@ -3036,10 +3477,21 @@ 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. */
config_line_t *TransPort_lines;
+ const char *TransProxyType; /**< What kind of transparent proxy
+ * implementation are we using? */
+ /** Parsed value of TransProxyType. */
+ enum {
+ TPT_DEFAULT,
+ TPT_PF_DIVERT,
+ TPT_IPFW,
+ TPT_TPROXY,
+ } TransProxyType_parsed;
config_line_t *NATDPort_lines; /**< Ports to listen on for transparent natd
* connections. */
config_line_t *ControlPort_lines; /**< Ports to listen on for control
@@ -3052,6 +3504,12 @@ typedef struct {
config_line_t *DirPort_lines;
config_line_t *DNSPort_lines; /**< Ports to listen on for DNS requests. */
+ /* MaxMemInQueues value as input by the user. We clean this up to be
+ * MaxMemInQueues. */
+ uint64_t MaxMemInQueues_raw;
+ uint64_t MaxMemInQueues;/**< If we have more memory than this allocated
+ * for queues and buffers, run the OOM handler */
+
/** @name port booleans
*
* Derived booleans: True iff there is a non-listener port on an AF_INET or
@@ -3067,18 +3525,13 @@ 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. */
int AuthoritativeDir; /**< Boolean: is this an authoritative directory? */
- int V1AuthoritativeDir; /**< Boolean: is this an authoritative directory
- * for version 1 directories? */
- int V2AuthoritativeDir; /**< Boolean: is this an authoritative directory
- * for version 2 directories? */
int V3AuthoritativeDir; /**< Boolean: is this an authoritative directory
* for version 3 directories? */
- int HSAuthoritativeDir; /**< Boolean: does this an authoritative directory
- * handle hidden service requests? */
int NamingAuthoritativeDir; /**< Boolean: is this an authoritative directory
* that's willing to bind names? */
int VersioningAuthoritativeDir; /**< Boolean: is this an authoritative
@@ -3092,7 +3545,7 @@ typedef struct {
char *BridgePassword;
/** If BridgePassword is set, this is a SHA256 digest of the basic http
* authenticator for it. Used so we can do a time-independent comparison. */
- char *_BridgePassword_AuthDigest;
+ char *BridgePassword_AuthDigest_;
int UseBridges; /**< Boolean: should we start all circuits with a bridge? */
config_line_t *Bridges; /**< List of bootstrap bridge addresses. */
@@ -3103,6 +3556,12 @@ typedef struct {
config_line_t *ServerTransportPlugin; /**< List of client
transport plugins. */
+ /** 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. */
@@ -3118,13 +3577,11 @@ typedef struct {
* "v1", "v2", "v3", "bridge", or "". */
smartlist_t *PublishServerDescriptor;
/** A bitfield of authority types, derived from PublishServerDescriptor. */
- dirinfo_type_t _PublishServerDescriptor;
+ dirinfo_type_t PublishServerDescriptor_;
/** Boolean: do we publish hidden service descriptors to the HS auths? */
int PublishHidServDescriptors;
int FetchServerDescriptors; /**< Do we fetch server descriptors as normal? */
int FetchHidServDescriptors; /**< and hidden service descriptors? */
- int FetchV2Networkstatus; /**< Do we fetch v2 networkstatus documents when
- * we don't need to? */
int HidServDirectoryV2; /**< Do we participate in the HS DHT? */
int VoteOnHidServDirectoriesV2; /**< As a directory authority, vote on
@@ -3151,7 +3608,7 @@ typedef struct {
int CloseHSServiceRendCircuitsImmediatelyOnTimeout;
int ConnLimit; /**< Demanded minimum number of simultaneous connections. */
- int _ConnLimit; /**< Maximum allowed number of simultaneous connections. */
+ int ConnLimit_; /**< Maximum allowed number of simultaneous connections. */
int RunAsDaemon; /**< If true, run in the background. (Unix only) */
int FascistFirewall; /**< Whether to prefer ORs reachable on open ports. */
smartlist_t *FirewallPorts; /**< Which ports our firewall allows
@@ -3210,13 +3667,15 @@ typedef struct {
* and try a new circuit if the stream has been
* waiting for this many seconds. If zero, use
* our default internal timeout schedule. */
- int MaxOnionsPending; /**< How many circuit CREATE requests do we allow
- * to wait simultaneously before we start dropping
- * them? */
+ int MaxOnionQueueDelay; /**<DOCDOC*/
int NewCircuitPeriod; /**< How long do we use a circuit before building
* a new one? */
int MaxCircuitDirtiness; /**< Never use circs that were first used more than
this interval ago. */
+ int PredictedPortsRelevanceTime; /** How long after we've requested a
+ * connection for a given port, do we want
+ * to continue to pick exits that support
+ * that port? */
uint64_t BandwidthRate; /**< How much bandwidth, on average, are we willing
* to use in a second? */
uint64_t BandwidthBurst; /**< How much bandwidth, at maximum, are we willing
@@ -3264,7 +3723,14 @@ typedef struct {
/** List of configuration lines for replacement directory authorities.
* If you just want to replace one class of authority at a time,
* use the "Alternate*Authority" options below instead. */
- config_line_t *DirServers;
+ config_line_t *DirAuthorities;
+
+ /** List of fallback directory servers */
+ config_line_t *FallbackDir;
+
+ /** Weight to apply to all directory authority rates if considering them
+ * along with fallbackdirs */
+ double DirAuthorityFallbackRate;
/** If set, use these main (currently v3) directory authorities and
* not the default ones. */
@@ -3273,9 +3739,6 @@ typedef struct {
/** If set, use these bridge authorities and not the default one. */
config_line_t *AlternateBridgeAuthority;
- /** If set, use these HS authorities and not the default ones. */
- config_line_t *AlternateHSAuthority;
-
char *MyFamily; /**< Declared family for this OR. */
config_line_t *NodeFamilies; /**< List of config lines for
* node families */
@@ -3312,6 +3775,7 @@ typedef struct {
int AuthDirMaxServersPerAuthAddr; /**< Do not permit more than this
* number of servers per IP address shared
* with an authority. */
+ int AuthDirHasIPv6Connectivity; /**< Boolean: are we on IPv6? */
/** If non-zero, always vote the Fast flag for any relay advertising
* this amount of capacity or more. */
@@ -3334,7 +3798,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
@@ -3354,8 +3821,9 @@ typedef struct {
/* Derived from SafeLogging */
enum {
SAFELOG_SCRUB_ALL, SAFELOG_SCRUB_RELAY, SAFELOG_SCRUB_NONE
- } _SafeLogging;
+ } 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 ? \
@@ -3373,6 +3841,10 @@ typedef struct {
int UseEntryGuards; /**< Boolean: Do we try to enter from a smallish number
* of fixed nodes? */
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?
+ * 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? */
@@ -3383,8 +3855,10 @@ typedef struct {
/** Should we fetch our dir info at the start of the consensus period? */
int FetchDirInfoExtraEarly;
- char *VirtualAddrNetwork; /**< Address and mask to hand out for virtual
- * MAPADDRESS requests. */
+ char *VirtualAddrNetworkIPv4; /**< Address and mask to hand out for virtual
+ * MAPADDRESS requests for IPv4 addresses */
+ char *VirtualAddrNetworkIPv6; /**< Address and mask to hand out for virtual
+ * MAPADDRESS requests for IPv6 addresses */
int ServerDNSSearchDomains; /**< Boolean: If set, we don't force exit
* addresses to be FQDNs, but rather search for them in
* the local domains. */
@@ -3412,10 +3886,6 @@ typedef struct {
* testing our DNS server. */
int EnforceDistinctSubnets; /**< If true, don't allow multiple routers in the
* same network zone in the same circuit. */
- int TunnelDirConns; /**< If true, use BEGIN_DIR rather than BEGIN when
- * possible. */
- int PreferTunneledDirConns; /**< If true, avoid dirservers that don't
- * support BEGIN_DIR, when possible. */
int PortForwarding; /**< If true, use NAT-PMP or UPnP to automatically
* forward the DirPort and ORPort on the NAT device */
char *PortForwardingHelper; /** < Filename or full path of the port
@@ -3478,6 +3948,13 @@ typedef struct {
* over randomly chosen exits. */
int ClientRejectInternalAddresses;
+ /** If true, clients may connect over IPv6. XXX we don't really
+ enforce this -- clients _may_ set up outgoing IPv6 connections
+ even when this option is not set. */
+ int ClientUseIPv6;
+ /** If true, prefer an IPv6 OR port over an IPv4 one. */
+ int ClientPreferIPv6ORPort;
+
/** The length of time that we think a consensus should be fresh. */
int V3AuthVotingInterval;
/** The length of time we think it will take to distribute votes. */
@@ -3498,6 +3975,10 @@ typedef struct {
* consensus vote on the 'params' line. */
char *ConsensusParams;
+ /** Authority only: minimum number of measured bandwidths we must see
+ * before we only beliee measured bandwidths to assign flags. */
+ int MinMeasuredBWsForAuthToIgnoreAdvertised;
+
/** The length of time that we think an initial consensus should be fresh.
* Only altered on testing networks. */
int TestingV3AuthInitialVotingInterval;
@@ -3510,6 +3991,10 @@ typedef struct {
* signatures. Only altered on testing networks.*/
int TestingV3AuthInitialDistDelay;
+ /** Offset in seconds added to the starting time for consensus
+ voting. Only altered on testing networks. */
+ int TestingV3AuthVotingStartOffset;
+
/** If an authority has been around for less than this amount of time, it
* does not believe its reachability information is accurate. Only
* altered on testing networks. */
@@ -3520,22 +4005,88 @@ typedef struct {
* networks. */
int TestingEstimatedDescriptorPropagationTime;
+ /** Schedule for when servers should download things in general. Only
+ * altered on testing networks. */
+ smartlist_t *TestingServerDownloadSchedule;
+
+ /** Schedule for when clients should download things in general. Only
+ * altered on testing networks. */
+ smartlist_t *TestingClientDownloadSchedule;
+
+ /** Schedule for when servers should download consensuses. Only altered
+ * on testing networks. */
+ smartlist_t *TestingServerConsensusDownloadSchedule;
+
+ /** Schedule for when clients should download consensuses. Only altered
+ * on testing networks. */
+ smartlist_t *TestingClientConsensusDownloadSchedule;
+
+ /** Schedule for when clients should download bridge descriptors. Only
+ * altered on testing networks. */
+ smartlist_t *TestingBridgeDownloadSchedule;
+
+ /** When directory clients have only a few descriptors to request, they
+ * batch them until they have more, or until this amount of time has
+ * passed. Only altered on testing networks. */
+ int TestingClientMaxIntervalWithoutRequest;
+
+ /** How long do we let a directory connection stall before expiring
+ * it? Only altered on testing networks. */
+ int TestingDirConnectionMaxStall;
+
+ /** How many times will we try to fetch a consensus before we give
+ * up? Only altered on testing networks. */
+ int TestingConsensusMaxDownloadTries;
+
+ /** How many times will we try to download a router's descriptor before
+ * giving up? Only altered on testing networks. */
+ int TestingDescriptorMaxDownloadTries;
+
+ /** How many times will we try to download a microdescriptor before
+ * giving up? Only altered on testing networks. */
+ int TestingMicrodescMaxDownloadTries;
+
+ /** How many times will we try to fetch a certificate before giving
+ * up? Only altered on testing networks. */
+ int TestingCertMaxDownloadTries;
+
/** If true, we take part in a testing network. Change the defaults of a
* couple of other configuration options and allow to change the values
* of certain configuration options. */
int TestingTorNetwork;
- /** File to check for a consensus networkstatus, if we don't have one
- * cached. */
- char *FallbackNetworkstatusFile;
+ /** Minimum value for the Exit flag threshold on testing networks. */
+ uint64_t TestingMinExitFlagThreshold;
+
+ /** Minimum value for the Fast flag threshold on testing networks. */
+ uint64_t TestingMinFastFlagThreshold;
+
+ /** Relays in a testing network which should be voted Guard
+ * regardless of uptime and bandwidth. */
+ routerset_t *TestingDirAuthVoteGuard;
+
+ /** Enable CONN_BW events. Only altered on testing networks. */
+ int TestingEnableConnBwEvent;
+
+ /** Enable CELL_STATS events. Only altered on testing networks. */
+ int TestingEnableCellStatsEvent;
+
+ /** Enable TB_EMPTY events. Only altered on testing networks. */
+ int TestingEnableTbEmptyEvent;
/** If true, and we have GeoIP data, and we're a bridge, keep a per-country
* count of how many client addresses have contacted us so that we can help
* the bridge authority guess which countries have blocked access to us. */
int BridgeRecordUsageByCountry;
- /** Optionally, a file with GeoIP data. */
+ /** Optionally, IPv4 and IPv6 GeoIP data. */
char *GeoIPFile;
+ char *GeoIPv6File;
+
+ /** Autobool: if auto, then any attempt to Exclude{Exit,}Nodes a particular
+ * country code will exclude all nodes in ?? and A1. If true, all nodes in
+ * ?? and A1 are excluded. Has no effect if we don't know any GeoIP data. */
+ int GeoIPExcludeUnknown;
/** If true, SIGHUP should reload the torrc. Sometimes controllers want
* to make this false. */
@@ -3559,13 +4110,13 @@ typedef struct {
/** If true, do not enable IOCP on windows with bufferevents, even if
* we think we could. */
int DisableIOCP;
- /** For testing only: will go away in 0.2.3.x. */
- int _UseFilteringSSLBufferevents;
+ /** For testing only: will go away eventually. */
+ int UseFilteringSSLBufferevents;
/** Set to true if the TestingTorNetwork configuration option is set.
* This is used so that options_validate() has a chance to realize that
* the defaults have changed. */
- int _UsingTestNetworkDefaults;
+ int UsingTestNetworkDefaults_;
/** If 1, we try to use microdescriptors to build circuits. If 0, we don't.
* If -1, Tor decides. */
@@ -3597,19 +4148,84 @@ typedef struct {
/**
* Parameters for path-bias detection.
* @{
+ * These options override the default behavior of Tor's (**currently
+ * experimental**) path bias detection algorithm. To try to find broken or
+ * misbehaving guard nodes, Tor looks for nodes where more than a certain
+ * fraction of circuits through that guard fail to get built.
+ *
+ * The PathBiasCircThreshold option controls how many circuits we need to
+ * build through a guard before we make these checks. The
+ * PathBiasNoticeRate, PathBiasWarnRate and PathBiasExtremeRate options
+ * control what fraction of circuits must succeed through a guard so we
+ * won't write log messages. If less than PathBiasExtremeRate circuits
+ * succeed *and* PathBiasDropGuards is set to 1, we disable use of that
+ * guard.
+ *
+ * When we have seen more than PathBiasScaleThreshold circuits through a
+ * guard, we scale our observations by 0.5 (governed by the consensus) so
+ * that new observations don't get swamped by old ones.
+ *
+ * By default, or if a negative value is provided for one of these options,
+ * Tor uses reasonable defaults from the networkstatus consensus document.
+ * If no defaults are available there, these options default to 150, .70,
+ * .50, .30, 0, and 300 respectively.
*/
int PathBiasCircThreshold;
double PathBiasNoticeRate;
- double PathBiasDisableRate;
+ double PathBiasWarnRate;
+ double PathBiasExtremeRate;
+ int PathBiasDropGuards;
int PathBiasScaleThreshold;
- int PathBiasScaleFactor;
/** @} */
+ /**
+ * Parameters for path-bias use detection
+ * @{
+ * Similar to the above options, these options override the default behavior
+ * of Tor's (**currently experimental**) path use bias detection algorithm.
+ *
+ * Where as the path bias parameters govern thresholds for successfully
+ * building circuits, these four path use bias parameters govern thresholds
+ * only for circuit usage. Circuits which receive no stream usage are not
+ * counted by this detection algorithm. A used circuit is considered
+ * successful if it is capable of carrying streams or otherwise receiving
+ * well-formed responses to RELAY cells.
+ *
+ * By default, or if a negative value is provided for one of these options,
+ * Tor uses reasonable defaults from the networkstatus consensus document.
+ * If no defaults are available there, these options default to 20, .80,
+ * .60, and 100, respectively.
+ */
+ int PathBiasUseThreshold;
+ double PathBiasNoticeUseRate;
+ double PathBiasExtremeUseRate;
+ int PathBiasScaleUseThreshold;
+ /** @} */
+
+ int IPv6Exit; /**< Do we support exiting to IPv6 addresses? */
+
+ char *TLSECGroup; /**< One of "P256", "P224", or nil for auto */
+
+ /** Autobool: should we use the ntor handshake if we can? */
+ int UseNTorHandshake;
+
+ /** Fraction: */
+ double PathsNeededToBuildCircuits;
+
+ /** What expiry time shall we place on our SSL certs? "0" means we
+ * should guess a suitable value. */
+ int SSLKeyLifetime;
+
+ /** How long (seconds) do we keep a guard before picking a new one? */
+ int GuardLifetime;
+
+ /** Should we send the timestamps that pre-023 hidden services want? */
+ int Support022HiddenServices;
} or_options_t;
/** Persistent state for an onion router, as saved to disk. */
typedef struct {
- uint32_t _magic;
+ uint32_t magic_;
/** The time at which we next plan to write the state to the disk. Equal to
* TIME_MAX if there are no savable changes, 0 if there are changes that
* should be saved right away. */
@@ -3729,6 +4345,10 @@ struct socks_request_t {
* make sure we send back a socks reply for
* every connection. */
unsigned int got_auth : 1; /**< Have we received any authentication data? */
+ /** If this is set, we will choose "no authentication" instead of
+ * "username/password" authentication if both are offered. Used as input to
+ * parse_socks. */
+ unsigned int socks_prefer_no_auth : 1;
/** Number of bytes in username; 0 if username is NULL */
size_t usernamelen;
@@ -3856,30 +4476,7 @@ typedef struct {
int after_firsthop_idx;
} network_liveness_t;
-/** Structure for circuit build times history */
-typedef struct {
- /** The circular array of recorded build times in milliseconds */
- build_time_t circuit_build_times[CBT_NCIRCUITS_TO_OBSERVE];
- /** Current index in the circuit_build_times circular array */
- int build_times_idx;
- /** Total number of build times accumulated. Max CBT_NCIRCUITS_TO_OBSERVE */
- int total_build_times;
- /** Information about the state of our local network connection */
- network_liveness_t liveness;
- /** Last time we built a circuit. Used to decide to build new test circs */
- time_t last_circ_at;
- /** "Minimum" value of our pareto distribution (actually mode) */
- build_time_t Xm;
- /** alpha exponent for pareto dist. */
- double alpha;
- /** Have we computed a timeout? */
- int have_computed_timeout;
- /** The exact value for that timeout in milliseconds. Stored as a double
- * to maintain precision from calculations to and from quantile value. */
- double timeout_ms;
- /** How long we wait before actually closing the circuit. */
- double close_ms;
-} circuit_build_times_t;
+typedef struct circuit_build_times_s circuit_build_times_t;
/********************************* config.c ***************************/
@@ -3916,6 +4513,7 @@ typedef enum {
* did this remapping happen." */
ADDRMAPSRC_NONE
} addressmap_entry_source_t;
+#define addressmap_entry_source_bitfield_t ENUM_BF(addressmap_entry_source_t)
/********************************* control.c ***************************/
@@ -4036,7 +4634,7 @@ typedef enum {
typedef struct measured_bw_line_t {
char node_id[DIGEST_LEN];
char node_hex[MAX_HEX_NICKNAME_LEN+1];
- long int bw;
+ long int bw_kb;
} measured_bw_line_t;
#endif
@@ -4058,15 +4656,6 @@ typedef struct vote_timing_t {
/********************************* geoip.c **************************/
-/** Round all GeoIP results to the next multiple of this value, to avoid
- * leaking information. */
-#define DIR_RECORD_USAGE_GRANULARITY 8
-/** Time interval: Flush geoip data to disk this often. */
-#define DIR_ENTRY_RECORD_USAGE_RETAIN_IPS (24*60*60)
-/** How long do we have to have observed per-country request history before
- * we are willing to talk about it? */
-#define DIR_RECORD_USAGE_MIN_OBSERVATION_TIME (12*60*60)
-
/** Indicates an action that we might be noting geoip statistics on.
* Note that if we're noticing CONNECT, we're a bridge, and if we're noticing
* the others, we're not.
@@ -4076,8 +4665,6 @@ typedef enum {
GEOIP_CLIENT_CONNECT = 0,
/** We've served a networkstatus consensus as a directory server. */
GEOIP_CLIENT_NETWORKSTATUS = 1,
- /** We've served a v2 networkstatus consensus as a directory server. */
- GEOIP_CLIENT_NETWORKSTATUS_V2 = 2,
} geoip_client_action_t;
/** Indicates either a positive reply or a reason for rejectng a network
* status request that will be included in geoip statistics. */
@@ -4121,10 +4708,10 @@ typedef enum {
/** Flushed last cell from queue of the circuit that initiated a
* tunneled request to the outbuf of the OR connection. */
DIRREQ_CIRC_QUEUE_FLUSHED = 3,
- /** Flushed last byte from buffer of the OR connection belonging to the
+ /** Flushed last byte from buffer of the channel belonging to the
* circuit that initiated a tunneled request; completes a tunneled
* request. */
- DIRREQ_OR_CONN_BUFFER_FLUSHED = 4
+ DIRREQ_CHANNEL_BUFFER_FLUSHED = 4
} dirreq_state_t;
#define WRITE_STATS_INTERVAL (24*60*60)
@@ -4135,11 +4722,6 @@ typedef struct microdesc_cache_t microdesc_cache_t;
/********************************* networkstatus.c *********************/
-/** Location where we found a v2 networkstatus. */
-typedef enum {
- NS_FROM_CACHE, NS_FROM_DIR_BY_FP, NS_FROM_DIR_ALL, NS_GENERATED
-} v2_networkstatus_source_t;
-
/** Possible statuses of a version of Tor, given opinions from the directory
* servers. */
typedef enum version_status_t {
@@ -4215,12 +4797,12 @@ typedef struct rend_encoded_v2_service_descriptor_t {
* sooner.)
*
* XXX023 Should this be configurable? */
-#define INTRO_POINT_LIFETIME_MIN_SECONDS 18*60*60
+#define INTRO_POINT_LIFETIME_MIN_SECONDS (18*60*60)
/** The maximum number of seconds that an introduction point will last
* before expiring due to old age.
*
* XXX023 Should this be configurable? */
-#define INTRO_POINT_LIFETIME_MAX_SECONDS 24*60*60
+#define INTRO_POINT_LIFETIME_MAX_SECONDS (24*60*60)
/** Introduction point information. Used both in rend_service_t (on
* the service side) and in rend_service_descriptor_t (on both the
@@ -4251,12 +4833,15 @@ typedef struct rend_intro_point_t {
* intro point. */
unsigned int rend_service_note_removing_intro_point_called : 1;
- /** (Service side only) A digestmap recording the INTRODUCE2 cells
- * this intro point's circuit has received. Each key is the digest
- * of the RSA-encrypted part of a received INTRODUCE2 cell; each
- * value is a pointer to the time_t at which the cell was received.
- * This digestmap is used to prevent replay attacks. */
- digestmap_t *accepted_intro_rsa_parts;
+ /** (Service side only) A replay cache recording the RSA-encrypted parts
+ * of INTRODUCE2 cells this intro point's circuit has received. This is
+ * used to prevent replay attacks. */
+ replaycache_t *accepted_intro_rsa_parts;
+
+ /** (Service side only) Count of INTRODUCE2 cells accepted from this
+ * intro point.
+ */
+ int accepted_introduce2_count;
/** (Service side only) The time at which this intro point was first
* published, or -1 if this intro point has not yet been
@@ -4287,9 +4872,9 @@ typedef struct rend_service_descriptor_t {
crypto_pk_t *pk; /**< This service's public key. */
int version; /**< Version of the descriptor format: 0 or 2. */
time_t timestamp; /**< Time when the descriptor was generated. */
- /** Bitmask: which rendezvous protocols are supported?
- * (We allow bits '0', '1', and '2' to be set.) */
- int protocols : REND_PROTOCOL_VERSION_BITMASK_WIDTH;
+ /** Bitmask: which introduce/rendezvous protocols are supported?
+ * (We allow bits '0', '1', '2' and '3' to be set.) */
+ unsigned protocols : REND_PROTOCOL_VERSION_BITMASK_WIDTH;
/** List of the service's introduction points. Elements are removed if
* introduction attempts fail. */
smartlist_t *intro_nodes;
@@ -4312,19 +4897,23 @@ typedef struct rend_cache_entry_t {
/********************************* routerlist.c ***************************/
-/** Represents information about a single trusted directory server. */
-typedef struct trusted_dir_server_t {
+/** Represents information about a single trusted or fallback directory
+ * server. */
+typedef struct dir_server_t {
char *description;
char *nickname;
char *address; /**< Hostname. */
uint32_t addr; /**< IPv4 address. */
uint16_t dir_port; /**< Directory port. */
uint16_t or_port; /**< OR port: Used for tunneling connections. */
+ double weight; /** Weight used when selecting this node at random */
char digest[DIGEST_LEN]; /**< Digest of identity key. */
char v3_identity_digest[DIGEST_LEN]; /**< Digest of v3 (authority only,
* high-security) identity key. */
unsigned int is_running:1; /**< True iff we think this server is running. */
+ unsigned int is_authority:1; /**< True iff this is a directory authority
+ * of some kind. */
/** True iff this server has accepted the most recent server descriptor
* we tried to upload to it. */
@@ -4333,8 +4922,6 @@ typedef struct trusted_dir_server_t {
/** What kind of authority is this? (Bitfield.) */
dirinfo_type_t type;
- download_status_t v2_ns_dl_status; /**< Status of downloading this server's
- * v2 network status. */
time_t addr_current_at; /**< When was the document that we derived the
* address information from published? */
@@ -4343,7 +4930,7 @@ typedef struct trusted_dir_server_t {
* as a routerstatus_t. Not updated by the
* router-status management code!
**/
-} trusted_dir_server_t;
+} dir_server_t;
#define ROUTER_REQUIRED_MIN_BANDWIDTH (20*1024)
@@ -4379,7 +4966,9 @@ typedef struct trusted_dir_server_t {
#define PDS_NO_EXISTING_SERVERDESC_FETCH (1<<3)
#define PDS_NO_EXISTING_MICRODESC_FETCH (1<<4)
-#define _PDS_PREFER_TUNNELED_DIR_CONNS (1<<16)
+/** This node is to be chosen as a directory guard, so don't choose any
+ * node that's currently a guard. */
+#define PDS_FOR_GUARD (1<<5)
/** Possible ways to weight routers when choosing one randomly. See
* routerlist_sl_choose_by_bandwidth() for more information.*/
diff --git a/src/or/policies.c b/src/or/policies.c
index 81e480968..8a91509a7 100644
--- a/src/or/policies.c
+++ b/src/or/policies.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -13,6 +13,7 @@
#include "dirserv.h"
#include "nodelist.h"
#include "policies.h"
+#include "router.h"
#include "routerparse.h"
#include "geoip.h"
#include "ht.h"
@@ -59,8 +60,10 @@ typedef struct policy_summary_item_t {
static const char *private_nets[] = {
"0.0.0.0/8", "169.254.0.0/16",
"127.0.0.0/8", "192.168.0.0/16", "10.0.0.0/8", "172.16.0.0/12",
- // "fc00::/7", "fe80::/10", "fec0::/10", "::/127",
- NULL };
+ "[::]/8",
+ "[fc00::]/7", "[fe80::]/10", "[fec0::]/10", "[ff00::]/8", "[::]/127",
+ NULL
+};
/** Replace all "private" entries in *<b>policy</b> with their expanded
* equivalents. */
@@ -87,7 +90,8 @@ policy_expand_private(smartlist_t **policy)
memcpy(&newpolicy, p, sizeof(addr_policy_t));
newpolicy.is_private = 0;
newpolicy.is_canonical = 0;
- if (tor_addr_parse_mask_ports(private_nets[i], &newpolicy.addr,
+ if (tor_addr_parse_mask_ports(private_nets[i], 0,
+ &newpolicy.addr,
&newpolicy.maskbits, &port_min, &port_max)<0) {
tor_assert(0);
}
@@ -100,6 +104,49 @@ policy_expand_private(smartlist_t **policy)
*policy = tmp;
}
+/** Expand each of the AF_UNSPEC elements in *<b>policy</b> (which indicate
+ * protocol-neutral wildcards) into a pair of wildcard elements: one IPv4-
+ * specific and one IPv6-specific. */
+void
+policy_expand_unspec(smartlist_t **policy)
+{
+ smartlist_t *tmp;
+ if (!*policy)
+ return;
+
+ tmp = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(*policy, addr_policy_t *, p) {
+ sa_family_t family = tor_addr_family(&p->addr);
+ if (family == AF_INET6 || family == AF_INET || p->is_private) {
+ smartlist_add(tmp, p);
+ } else if (family == AF_UNSPEC) {
+ addr_policy_t newpolicy_ipv4;
+ addr_policy_t newpolicy_ipv6;
+ memcpy(&newpolicy_ipv4, p, sizeof(addr_policy_t));
+ memcpy(&newpolicy_ipv6, p, sizeof(addr_policy_t));
+ newpolicy_ipv4.is_canonical = 0;
+ newpolicy_ipv6.is_canonical = 0;
+ if (p->maskbits != 0) {
+ log_warn(LD_BUG, "AF_UNSPEC policy with maskbits==%d", p->maskbits);
+ newpolicy_ipv4.maskbits = 0;
+ newpolicy_ipv6.maskbits = 0;
+ }
+ tor_addr_from_ipv4h(&newpolicy_ipv4.addr, 0);
+ tor_addr_from_ipv6_bytes(&newpolicy_ipv6.addr,
+ "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
+ smartlist_add(tmp, addr_policy_get_canonical_entry(&newpolicy_ipv4));
+ smartlist_add(tmp, addr_policy_get_canonical_entry(&newpolicy_ipv6));
+ addr_policy_free(p);
+ } else {
+ log_warn(LD_BUG, "Funny-looking address policy with family %d", family);
+ smartlist_add(tmp, p);
+ }
+ } SMARTLIST_FOREACH_END(p);
+
+ smartlist_free(*policy);
+ *policy = tmp;
+}
+
/**
* Given a linked list of config lines containing "allow" and "deny"
* tokens, parse them and append the result to <b>dest</b>. Return -1
@@ -144,6 +191,7 @@ parse_addr_policy(config_line_t *cfg, smartlist_t **dest,
addr_policy_list_free(result);
} else {
policy_expand_private(&result);
+ policy_expand_unspec(&result);
if (*dest) {
smartlist_add_all(*dest, result);
@@ -319,11 +367,15 @@ addr_is_in_cc_list(uint32_t addr, const smartlist_t *cc_list)
{
country_t country;
const char *name;
+ tor_addr_t tar;
+
if (!cc_list)
return 0;
- country = geoip_get_country_by_ip(addr);
+ /* XXXXipv6 */
+ tor_addr_from_ipv4h(&tar, addr);
+ country = geoip_get_country_by_addr(&tar);
name = geoip_get_country_name(country);
- return smartlist_string_isin_case(cc_list, name);
+ return smartlist_contains_string_case(cc_list, name);
}
/** Return 1 if <b>addr</b>:<b>port</b> is permitted to publish to our
@@ -386,7 +438,8 @@ validate_addr_policies(const or_options_t *options, char **msg)
*msg = NULL;
if (policies_parse_exit_policy(options->ExitPolicy, &addr_policy,
- options->ExitPolicyRejectPrivate, NULL,
+ options->IPv6Exit,
+ options->ExitPolicyRejectPrivate, 0,
!options->BridgeRelay))
REJECT("Error in ExitPolicy entry.");
@@ -430,10 +483,12 @@ validate_addr_policies(const or_options_t *options, char **msg)
* Ignore port specifiers.
*/
static int
-load_policy_from_option(config_line_t *config, smartlist_t **policy,
+load_policy_from_option(config_line_t *config, const char *option_name,
+ smartlist_t **policy,
int assume_action)
{
int r;
+ int killed_any_ports = 0;
addr_policy_list_free(*policy);
*policy = NULL;
r = parse_addr_policy(config, policy, assume_action);
@@ -452,9 +507,13 @@ load_policy_from_option(config_line_t *config, smartlist_t **policy,
c = addr_policy_get_canonical_entry(&newp);
SMARTLIST_REPLACE_CURRENT(*policy, n, c);
addr_policy_free(n);
+ killed_any_ports = 1;
}
} SMARTLIST_FOREACH_END(n);
}
+ if (killed_any_ports) {
+ log_warn(LD_CONFIG, "Ignoring ports in %s option.", option_name);
+ }
return 0;
}
@@ -464,20 +523,22 @@ int
policies_parse_from_options(const or_options_t *options)
{
int ret = 0;
- if (load_policy_from_option(options->SocksPolicy, &socks_policy, -1) < 0)
+ if (load_policy_from_option(options->SocksPolicy, "SocksPolicy",
+ &socks_policy, -1) < 0)
ret = -1;
- if (load_policy_from_option(options->DirPolicy, &dir_policy, -1) < 0)
+ if (load_policy_from_option(options->DirPolicy, "DirPolicy",
+ &dir_policy, -1) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirReject,
+ if (load_policy_from_option(options->AuthDirReject, "AuthDirReject",
&authdir_reject_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirInvalid,
+ if (load_policy_from_option(options->AuthDirInvalid, "AuthDirInvalid",
&authdir_invalid_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirBadDir,
+ if (load_policy_from_option(options->AuthDirBadDir, "AuthDirBadDir",
&authdir_baddir_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
- if (load_policy_from_option(options->AuthDirBadExit,
+ if (load_policy_from_option(options->AuthDirBadExit, "AuthDirBadExit",
&authdir_badexit_policy, ADDR_POLICY_REJECT) < 0)
ret = -1;
if (parse_reachable_addresses() < 0)
@@ -545,21 +606,25 @@ policy_eq(policy_map_ent_t *a, policy_map_ent_t *b)
/** Return a hashcode for <b>ent</b> */
static unsigned int
-policy_hash(policy_map_ent_t *ent)
+policy_hash(const policy_map_ent_t *ent)
{
- addr_policy_t *a = ent->policy;
- unsigned int r;
- if (a->is_private)
- r = 0x1234abcd;
- else
- r = tor_addr_hash(&a->addr);
- r += a->prt_min << 8;
- r += a->prt_max << 16;
- r += a->maskbits;
- if (a->policy_type == ADDR_POLICY_REJECT)
- r ^= 0xffffffff;
+ const addr_policy_t *a = ent->policy;
+ addr_policy_t aa;
+ memset(&aa, 0, sizeof(aa));
+
+ aa.prt_min = a->prt_min;
+ aa.prt_max = a->prt_max;
+ aa.maskbits = a->maskbits;
+ aa.policy_type = a->policy_type;
+ aa.is_private = a->is_private;
+
+ if (a->is_private) {
+ aa.is_private = 1;
+ } else {
+ tor_addr_copy_tight(&aa.addr, &a->addr);
+ }
- return r;
+ return (unsigned) siphash24g(&aa, sizeof(aa));
}
HT_PROTOTYPE(policy_map, policy_map_ent_t, node, policy_hash,
@@ -730,6 +795,10 @@ compare_tor_addr_to_addr_policy(const tor_addr_t *addr, uint16_t port,
static int
addr_policy_covers(addr_policy_t *a, addr_policy_t *b)
{
+ if (tor_addr_family(&a->addr) != tor_addr_family(&b->addr)) {
+ /* You can't cover a different family. */
+ return 0;
+ }
/* We can ignore accept/reject, since "accept *:80, reject *:80" reduces
* to "accept *:80". */
if (a->maskbits > b->maskbits) {
@@ -781,24 +850,54 @@ append_exit_policy_string(smartlist_t **policy, const char *more)
}
}
+/** Add "reject <b>addr</b>:*" to <b>dest</b>, creating the list as needed. */
+void
+addr_policy_append_reject_addr(smartlist_t **dest, const tor_addr_t *addr)
+{
+ addr_policy_t p, *add;
+ memset(&p, 0, sizeof(p));
+ p.policy_type = ADDR_POLICY_REJECT;
+ p.maskbits = tor_addr_family(addr) == AF_INET6 ? 128 : 32;
+ tor_addr_copy(&p.addr, addr);
+ p.prt_min = 1;
+ p.prt_max = 65535;
+
+ add = addr_policy_get_canonical_entry(&p);
+ if (!*dest)
+ *dest = smartlist_new();
+ smartlist_add(*dest, add);
+}
+
/** Detect and excise "dead code" from the policy *<b>dest</b>. */
static void
exit_policy_remove_redundancies(smartlist_t *dest)
{
- addr_policy_t *ap, *tmp, *victim;
+ addr_policy_t *ap, *tmp;
int i, j;
- /* Step one: find a *:* entry and cut off everything after it. */
- for (i = 0; i < smartlist_len(dest); ++i) {
- ap = smartlist_get(dest, i);
- if (ap->maskbits == 0 && ap->prt_min <= 1 && ap->prt_max >= 65535) {
- /* This is a catch-all line -- later lines are unreachable. */
- while (i+1 < smartlist_len(dest)) {
- victim = smartlist_get(dest, i+1);
- smartlist_del(dest, i+1);
- addr_policy_free(victim);
+ /* Step one: kill every ipv4 thing after *4:*, every IPv6 thing after *6:*
+ */
+ {
+ int kill_v4=0, kill_v6=0;
+ for (i = 0; i < smartlist_len(dest); ++i) {
+ sa_family_t family;
+ ap = smartlist_get(dest, i);
+ family = tor_addr_family(&ap->addr);
+ if ((family == AF_INET && kill_v4) ||
+ (family == AF_INET6 && kill_v6)) {
+ smartlist_del_keeporder(dest, i--);
+ addr_policy_free(ap);
+ continue;
+ }
+
+ if (ap->maskbits == 0 && ap->prt_min <= 1 && ap->prt_max >= 65535) {
+ /* This is a catch-all line -- later lines are unreachable. */
+ if (family == AF_INET) {
+ kill_v4 = 1;
+ } else if (family == AF_INET6) {
+ kill_v6 = 1;
+ }
}
- break;
}
}
@@ -813,7 +912,7 @@ exit_policy_remove_redundancies(smartlist_t *dest)
char p1[POLICY_BUF_LEN], p2[POLICY_BUF_LEN];
policy_write_item(p1, sizeof(p1), tmp, 0);
policy_write_item(p2, sizeof(p2), ap, 0);
- log(LOG_DEBUG, LD_CONFIG, "Removing exit policy %s (%d). It is made "
+ log_debug(LD_CONFIG, "Removing exit policy %s (%d). It is made "
"redundant by %s (%d).", p1, j, p2, i);
smartlist_del_keeporder(dest, j--);
addr_policy_free(tmp);
@@ -842,7 +941,7 @@ exit_policy_remove_redundancies(smartlist_t *dest)
char p1[POLICY_BUF_LEN], p2[POLICY_BUF_LEN];
policy_write_item(p1, sizeof(p1), ap, 0);
policy_write_item(p2, sizeof(p2), tmp, 0);
- log(LOG_DEBUG, LD_CONFIG, "Removing exit policy %s. It is already "
+ log_debug(LD_CONFIG, "Removing exit policy %s. It is already "
"covered by %s.", p1, p2);
smartlist_del_keeporder(dest, i--);
addr_policy_free(ap);
@@ -864,26 +963,36 @@ exit_policy_remove_redundancies(smartlist_t *dest)
* policy afterwards. If <b>rejectprivate</b> is true, prepend
* "reject private:*" to the policy. Return -1 if we can't parse cfg,
* else return 0.
+ *
+ * This function is used to parse the exit policy from our torrc. For
+ * the functions used to parse the exit policy from a router descriptor,
+ * see router_add_exit_policy.
*/
int
policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
- int rejectprivate, const char *local_address,
+ int ipv6_exit,
+ int rejectprivate, uint32_t local_address,
int add_default_policy)
{
+ if (!ipv6_exit) {
+ append_exit_policy_string(dest, "reject *6:*");
+ }
if (rejectprivate) {
append_exit_policy_string(dest, "reject private:*");
if (local_address) {
char buf[POLICY_BUF_LEN];
- tor_snprintf(buf, sizeof(buf), "reject %s:*", local_address);
+ tor_snprintf(buf, sizeof(buf), "reject %s:*", fmt_addr32(local_address));
append_exit_policy_string(dest, buf);
}
}
if (parse_addr_policy(cfg, dest, -1))
return -1;
- if (add_default_policy)
+ if (add_default_policy) {
append_exit_policy_string(dest, DEFAULT_EXIT_POLICY);
- else
- append_exit_policy_string(dest, "reject *:*");
+ } else {
+ append_exit_policy_string(dest, "reject *4:*");
+ append_exit_policy_string(dest, "reject *6:*");
+ }
exit_policy_remove_redundancies(*dest);
return 0;
@@ -894,7 +1003,8 @@ policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
void
policies_exit_policy_append_reject_star(smartlist_t **dest)
{
- append_exit_policy_string(dest, "reject *:*");
+ append_exit_policy_string(dest, "reject *4:*");
+ append_exit_policy_string(dest, "reject *6:*");
}
/** Replace the exit policy of <b>node</b> with reject *:* */
@@ -970,18 +1080,23 @@ exit_policy_is_general_exit(smartlist_t *policy)
/** Return false if <b>policy</b> might permit access to some addr:port;
* otherwise if we are certain it rejects everything, return true. */
int
-policy_is_reject_star(const smartlist_t *policy)
+policy_is_reject_star(const smartlist_t *policy, sa_family_t family)
{
if (!policy) /*XXXX disallow NULL policies? */
return 1;
- SMARTLIST_FOREACH(policy, addr_policy_t *, p, {
- if (p->policy_type == ADDR_POLICY_ACCEPT)
+ SMARTLIST_FOREACH_BEGIN(policy, addr_policy_t *, p) {
+ if (p->policy_type == ADDR_POLICY_ACCEPT &&
+ (tor_addr_family(&p->addr) == family ||
+ tor_addr_family(&p->addr) == AF_UNSPEC)) {
return 0;
- else if (p->policy_type == ADDR_POLICY_REJECT &&
- p->prt_min <= 1 && p->prt_max == 65535 &&
- p->maskbits == 0)
+ } else if (p->policy_type == ADDR_POLICY_REJECT &&
+ p->prt_min <= 1 && p->prt_max == 65535 &&
+ p->maskbits == 0 &&
+ (tor_addr_family(&p->addr) == family ||
+ tor_addr_family(&p->addr) == AF_UNSPEC)) {
return 1;
- });
+ }
+ } SMARTLIST_FOREACH_END(p);
return 1;
}
@@ -996,20 +1111,28 @@ policy_write_item(char *buf, size_t buflen, addr_policy_t *policy,
const char *addrpart;
int result;
const int is_accept = policy->policy_type == ADDR_POLICY_ACCEPT;
- const int is_ip6 = tor_addr_family(&policy->addr) == AF_INET6;
+ const sa_family_t family = tor_addr_family(&policy->addr);
+ const int is_ip6 = (family == AF_INET6);
tor_addr_to_str(addrbuf, &policy->addr, sizeof(addrbuf), 1);
/* write accept/reject 1.2.3.4 */
- if (policy->is_private)
+ if (policy->is_private) {
addrpart = "private";
- else if (policy->maskbits == 0)
- addrpart = "*";
- else
+ } else if (policy->maskbits == 0) {
+ if (format_for_desc)
+ addrpart = "*";
+ else if (family == AF_INET6)
+ addrpart = "*6";
+ else if (family == AF_INET)
+ addrpart = "*4";
+ else
+ addrpart = "*";
+ } else {
addrpart = addrbuf;
+ }
- result = tor_snprintf(buf, buflen, "%s%s%s %s",
- (is_ip6&&format_for_desc)?"opt ":"",
+ result = tor_snprintf(buf, buflen, "%s%s %s",
is_accept ? "accept" : "reject",
(is_ip6&&format_for_desc)?"6":"",
addrpart);
@@ -1189,8 +1312,8 @@ policy_summary_add_item(smartlist_t *summary, addr_policy_t *p)
for (i = 0; private_nets[i]; ++i) {
tor_addr_t addr;
maskbits_t maskbits;
- if (tor_addr_parse_mask_ports(private_nets[i], &addr,
- &maskbits, NULL, NULL)<0) {
+ if (tor_addr_parse_mask_ports(private_nets[i], 0, &addr,
+ &maskbits, NULL, NULL)<0) {
tor_assert(0);
}
if (tor_addr_compare(&p->addr, &addr, CMP_EXACT) == 0 &&
@@ -1216,7 +1339,7 @@ policy_summary_add_item(smartlist_t *summary, addr_policy_t *p)
* is an exception to the shorter-representation-wins rule).
*/
char *
-policy_summarize(smartlist_t *policy)
+policy_summarize(smartlist_t *policy, sa_family_t family)
{
smartlist_t *summary = policy_summary_create();
smartlist_t *accepts, *rejects;
@@ -1228,9 +1351,16 @@ policy_summarize(smartlist_t *policy)
tor_assert(policy);
/* Create the summary list */
- SMARTLIST_FOREACH(policy, addr_policy_t *, p, {
+ SMARTLIST_FOREACH_BEGIN(policy, addr_policy_t *, p) {
+ sa_family_t f = tor_addr_family(&p->addr);
+ if (f != AF_INET && f != AF_INET6) {
+ log_warn(LD_BUG, "Weird family when summarizing address policy");
+ }
+ if (f != family)
+ continue;
+ /* XXXX-ipv6 More family work is needed */
policy_summary_add_item(summary, p);
- });
+ } SMARTLIST_FOREACH_END(p);
/* Now create two lists of strings, one for accepted and one
* for rejected ports. We take care to merge ranges so that
@@ -1517,7 +1647,7 @@ short_policy_is_reject_star(const short_policy_t *policy)
policy->entries[0].max_port == 65535);
}
-/** Decides whether addr:port is probably or definitely accepted or rejcted by
+/** Decide whether addr:port is probably or definitely accepted or rejected by
* <b>node</b>. See compare_tor_addr_to_addr_policy for details on addr/port
* interpretation. */
addr_policy_result_t
@@ -1527,16 +1657,29 @@ compare_tor_addr_to_node_policy(const tor_addr_t *addr, uint16_t port,
if (node->rejects_all)
return ADDR_POLICY_REJECTED;
- if (node->ri)
+ if (addr && tor_addr_family(addr) == AF_INET6) {
+ const short_policy_t *p = NULL;
+ if (node->ri)
+ p = node->ri->ipv6_exit_policy;
+ else if (node->md)
+ p = node->md->ipv6_exit_policy;
+ if (p)
+ return compare_tor_addr_to_short_policy(addr, port, p);
+ else
+ return ADDR_POLICY_REJECTED;
+ }
+
+ if (node->ri) {
return compare_tor_addr_to_addr_policy(addr, port, node->ri->exit_policy);
- else if (node->md) {
+ } else if (node->md) {
if (node->md->exit_policy == NULL)
return ADDR_POLICY_REJECTED;
else
return compare_tor_addr_to_short_policy(addr, port,
node->md->exit_policy);
- } else
+ } else {
return ADDR_POLICY_PROBABLY_REJECTED;
+ }
}
/** Implementation for GETINFO control command: knows the answer for questions
@@ -1550,6 +1693,28 @@ getinfo_helper_policies(control_connection_t *conn,
(void) errmsg;
if (!strcmp(question, "exit-policy/default")) {
*answer = tor_strdup(DEFAULT_EXIT_POLICY);
+ } else if (!strcmpstart(question, "exit-policy/")) {
+ const routerinfo_t *me = router_get_my_routerinfo();
+
+ int include_ipv4 = 0;
+ int include_ipv6 = 0;
+
+ if (!strcmp(question, "exit-policy/ipv4")) {
+ include_ipv4 = 1;
+ } else if (!strcmp(question, "exit-policy/ipv6")) {
+ include_ipv6 = 1;
+ } else if (!strcmp(question, "exit-policy/full")) {
+ include_ipv4 = include_ipv6 = 1;
+ } else {
+ return 0; /* No such key. */
+ }
+
+ if (!me) {
+ *errmsg = "router_get_my_routerinfo returned NULL";
+ return -1;
+ }
+
+ *answer = router_dump_exit_policy_to_string(me,include_ipv4,include_ipv6);
}
return 0;
}
diff --git a/src/or/policies.h b/src/or/policies.h
index f00d8299b..91ac42749 100644
--- a/src/or/policies.h
+++ b/src/or/policies.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,13 +9,14 @@
* \brief Header file for policies.c.
**/
-#ifndef _TOR_POLICIES_H
-#define _TOR_POLICIES_H
+#ifndef TOR_POLICIES_H
+#define TOR_POLICIES_H
-/* (length of "accept 255.255.255.255/255.255.255.255:65535-65535\n" plus a
- * NUL.)
+/* (length of
+ * "accept6 [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]/128:65535-65535\n"
+ * plus a terminating NUL, rounded up to a nice number.)
*/
-#define POLICY_BUF_LEN 52
+#define POLICY_BUF_LEN 72
int firewall_is_fascist_or(void);
int fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port);
@@ -31,6 +32,7 @@ int authdir_policy_badexit_address(uint32_t addr, uint16_t port);
int validate_addr_policies(const or_options_t *options, char **msg);
void policy_expand_private(smartlist_t **policy);
+void policy_expand_unspec(smartlist_t **policy);
int policies_parse_from_options(const or_options_t *options);
addr_policy_t *addr_policy_get_canonical_entry(addr_policy_t *ent);
@@ -42,12 +44,15 @@ addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
uint16_t port, const node_t *node);
int policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
- int rejectprivate, const char *local_address,
+ int ipv6exit,
+ int rejectprivate, uint32_t local_address,
int add_default_policy);
void policies_exit_policy_append_reject_star(smartlist_t **dest);
+void addr_policy_append_reject_addr(smartlist_t **dest,
+ const tor_addr_t *addr);
void policies_set_node_exitpolicy_to_reject_all(node_t *exitrouter);
int exit_policy_is_general_exit(smartlist_t *policy);
-int policy_is_reject_star(const smartlist_t *policy);
+int policy_is_reject_star(const smartlist_t *policy, sa_family_t family);
int getinfo_helper_policies(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);
@@ -58,7 +63,7 @@ void addr_policy_list_free(smartlist_t *p);
void addr_policy_free(addr_policy_t *p);
void policies_free_all(void);
-char *policy_summarize(smartlist_t *policy);
+char *policy_summarize(smartlist_t *policy, sa_family_t family);
short_policy_t *parse_short_policy(const char *summary);
char *write_short_policy(const short_policy_t *policy);
diff --git a/src/or/reasons.c b/src/or/reasons.c
index c51d8ee6f..750e89bbe 100644
--- a/src/or/reasons.c
+++ b/src/or/reasons.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -105,7 +105,12 @@ stream_end_reason_to_socks5_response(int reason)
case END_STREAM_REASON_DESTROY:
return SOCKS5_GENERAL_ERROR;
case END_STREAM_REASON_DONE:
- return SOCKS5_SUCCEEDED;
+ /* Note that 'DONE' usually indicates a successful close from the other
+ * side of the stream... but if we receive it before a connected cell --
+ * that is, before we have sent a SOCKS reply -- that means that the
+ * other side of the circuit closed the connection before telling us it
+ * was complete. */
+ return SOCKS5_CONNECTION_REFUSED;
case END_STREAM_REASON_TIMEOUT:
return SOCKS5_TTL_EXPIRED;
case END_STREAM_REASON_NOROUTE:
@@ -169,11 +174,12 @@ errno_to_stream_end_reason(int e)
S_CASE(ENOTSOCK):
S_CASE(EPROTONOSUPPORT):
S_CASE(EAFNOSUPPORT):
- E_CASE(EACCES):
S_CASE(ENOTCONN):
- S_CASE(ENETUNREACH):
return END_STREAM_REASON_INTERNAL;
+ S_CASE(ENETUNREACH):
S_CASE(EHOSTUNREACH):
+ E_CASE(EACCES):
+ case EPERM:
return END_STREAM_REASON_NOROUTE;
S_CASE(ECONNREFUSED):
return END_STREAM_REASON_CONNECTREFUSED;
@@ -225,6 +231,8 @@ orconn_end_reason_to_control_string(int r)
return "RESOURCELIMIT";
case END_OR_CONN_REASON_MISC:
return "MISC";
+ case END_OR_CONN_REASON_PT_MISSING:
+ return "PT_MISSING";
case 0:
return "";
default:
@@ -300,8 +308,13 @@ errno_to_orconn_end_reason(int e)
const char *
circuit_end_reason_to_control_string(int reason)
{
- if (reason >= 0 && reason & END_CIRC_REASON_FLAG_REMOTE)
+ int is_remote = 0;
+
+ if (reason >= 0 && reason & END_CIRC_REASON_FLAG_REMOTE) {
reason &= ~END_CIRC_REASON_FLAG_REMOTE;
+ is_remote = 1;
+ }
+
switch (reason) {
case END_CIRC_AT_ORIGIN:
/* This shouldn't get passed here; it's a catch-all reason. */
@@ -323,8 +336,8 @@ circuit_end_reason_to_control_string(int reason)
return "CONNECTFAILED";
case END_CIRC_REASON_OR_IDENTITY:
return "OR_IDENTITY";
- case END_CIRC_REASON_OR_CONN_CLOSED:
- return "OR_CONN_CLOSED";
+ case END_CIRC_REASON_CHANNEL_CLOSED:
+ return "CHANNEL_CLOSED";
case END_CIRC_REASON_FINISHED:
return "FINISHED";
case END_CIRC_REASON_TIMEOUT:
@@ -338,7 +351,18 @@ circuit_end_reason_to_control_string(int reason)
case END_CIRC_REASON_MEASUREMENT_EXPIRED:
return "MEASUREMENT_EXPIRED";
default:
- log_warn(LD_BUG, "Unrecognized reason code %d", (int)reason);
+ if (is_remote) {
+ /*
+ * If it's remote, it's not a bug *here*, so don't use LD_BUG, but
+ * do note that the someone we're talking to is speaking the Tor
+ * protocol with a weird accent.
+ */
+ log_warn(LD_PROTOCOL,
+ "Remote server sent bogus reason code %d", reason);
+ } else {
+ log_warn(LD_BUG,
+ "Unrecognized reason code %d", reason);
+ }
return NULL;
}
}
diff --git a/src/or/reasons.h b/src/or/reasons.h
index 377b61b11..fe7e67722 100644
--- a/src/or/reasons.h
+++ b/src/or/reasons.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for reasons.c.
**/
-#ifndef _TOR_REASONS_H
-#define _TOR_REASONS_H
+#ifndef TOR_REASONS_H
+#define TOR_REASONS_H
const char *stream_end_reason_to_control_string(int reason);
const char *stream_end_reason_to_string(int reason);
diff --git a/src/or/relay.c b/src/or/relay.c
index 628937404..66d1251eb 100644
--- a/src/or/relay.c
+++ b/src/or/relay.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -10,12 +10,15 @@
* receiving from circuits, plus queuing on circuits.
**/
-#include <math.h>
#define RELAY_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "buffers.h"
+#include "channel.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
+#include "circuituse.h"
#include "config.h"
#include "connection.h"
#include "connection_edge.h"
@@ -23,9 +26,12 @@
#include "control.h"
#include "geoip.h"
#include "main.h"
+#ifdef ENABLE_MEMPOOLS
#include "mempool.h"
+#endif
#include "networkstatus.h"
#include "nodelist.h"
+#include "onion.h"
#include "policies.h"
#include "reasons.h"
#include "relay.h"
@@ -51,6 +57,13 @@ static int circuit_resume_edge_reading_helper(edge_connection_t *conn,
static int circuit_consider_stop_edge_reading(circuit_t *circ,
crypt_path_t *layer_hint);
static int circuit_queue_streams_are_blocked(circuit_t *circ);
+static void adjust_exit_policy_from_exitpolicy_failure(origin_circuit_t *circ,
+ entry_connection_t *conn,
+ node_t *node,
+ const tor_addr_t *addr);
+#if 0
+static int get_max_middle_cells(void);
+#endif
/** Stop reading on edge connections when we have this many cells
* waiting on the appropriate queue. */
@@ -68,6 +81,9 @@ uint64_t stats_n_relay_cells_relayed = 0;
*/
uint64_t stats_n_relay_cells_delivered = 0;
+/** Used to tell which stream to read from first on a circuit. */
+static tor_weak_rng_t stream_choice_rng = TOR_WEAK_RNG_INIT;
+
/** Update digest from the payload of cell. Assign integrity part to
* cell.
*/
@@ -95,14 +111,14 @@ relay_set_digest(crypto_digest_t *digest, cell_t *cell)
static int
relay_digest_matches(crypto_digest_t *digest, cell_t *cell)
{
- char received_integrity[4], calculated_integrity[4];
+ uint32_t received_integrity, calculated_integrity;
relay_header_t rh;
crypto_digest_t *backup_digest=NULL;
backup_digest = crypto_digest_dup(digest);
relay_header_unpack(&rh, cell->payload);
- memcpy(received_integrity, rh.integrity, 4);
+ memcpy(&received_integrity, rh.integrity, 4);
memset(rh.integrity, 0, 4);
relay_header_pack(cell->payload, &rh);
@@ -111,15 +127,15 @@ relay_digest_matches(crypto_digest_t *digest, cell_t *cell)
// received_integrity[2], received_integrity[3]);
crypto_digest_add_bytes(digest, (char*) cell->payload, CELL_PAYLOAD_SIZE);
- crypto_digest_get_digest(digest, calculated_integrity, 4);
+ crypto_digest_get_digest(digest, (char*) &calculated_integrity, 4);
- if (tor_memneq(received_integrity, calculated_integrity, 4)) {
+ if (calculated_integrity != received_integrity) {
// log_fn(LOG_INFO,"Recognized=0 but bad digest. Not recognizing.");
// (%d vs %d).", received_integrity, calculated_integrity);
/* restore digest to its old form */
crypto_digest_assign(digest, backup_digest);
/* restore the relay header */
- memcpy(rh.integrity, received_integrity, 4);
+ memcpy(rh.integrity, &received_integrity, 4);
relay_header_pack(cell->payload, &rh);
crypto_digest_free(backup_digest);
return 0;
@@ -166,7 +182,7 @@ int
circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
cell_direction_t cell_direction)
{
- or_connection_t *or_conn=NULL;
+ channel_t *chan = NULL;
crypt_path_t *layer_hint=NULL;
char recognized=0;
int reason;
@@ -184,7 +200,17 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
}
if (recognized) {
- edge_connection_t *conn = relay_lookup_conn(circ, cell, cell_direction,
+ edge_connection_t *conn = NULL;
+
+ if (circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
+ pathbias_check_probe_response(circ, cell);
+
+ /* We need to drop this cell no matter what to avoid code that expects
+ * a certain purpose (such as the hidserv code). */
+ return 0;
+ }
+
+ conn = relay_lookup_conn(circ, cell, cell_direction,
layer_hint);
if (cell_direction == CELL_DIRECTION_OUT) {
++stats_n_relay_cells_delivered;
@@ -213,24 +239,32 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
/* not recognized. pass it on. */
if (cell_direction == CELL_DIRECTION_OUT) {
cell->circ_id = circ->n_circ_id; /* switch it */
- or_conn = circ->n_conn;
+ chan = circ->n_chan;
} else if (! CIRCUIT_IS_ORIGIN(circ)) {
cell->circ_id = TO_OR_CIRCUIT(circ)->p_circ_id; /* switch it */
- or_conn = TO_OR_CIRCUIT(circ)->p_conn;
+ chan = TO_OR_CIRCUIT(circ)->p_chan;
} else {
log_fn(LOG_PROTOCOL_WARN, LD_OR,
"Dropping unrecognized inbound cell on origin circuit.");
- return 0;
+ /* If we see unrecognized cells on path bias testing circs,
+ * it's bad mojo. Those circuits need to die.
+ * XXX: Shouldn't they always die? */
+ if (circ->purpose == CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
+ TO_ORIGIN_CIRCUIT(circ)->path_state = PATH_STATE_USE_FAILED;
+ return -END_CIRC_REASON_TORPROTOCOL;
+ } else {
+ return 0;
+ }
}
- if (!or_conn) {
+ if (!chan) {
// XXXX Can this splice stuff be done more cleanly?
if (! CIRCUIT_IS_ORIGIN(circ) &&
TO_OR_CIRCUIT(circ)->rend_splice &&
cell_direction == CELL_DIRECTION_OUT) {
or_circuit_t *splice = TO_OR_CIRCUIT(circ)->rend_splice;
tor_assert(circ->purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
- tor_assert(splice->_base.purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
+ tor_assert(splice->base_.purpose == CIRCUIT_PURPOSE_REND_ESTABLISHED);
cell->circ_id = splice->p_circ_id;
cell->command = CELL_RELAY; /* can't be relay_early anyway */
if ((reason = circuit_receive_relay_cell(cell, TO_CIRCUIT(splice),
@@ -254,7 +288,7 @@ circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
* we might kill the circ before we relay
* the cells. */
- append_cell_to_circuit_queue(circ, or_conn, cell, cell_direction, 0);
+ append_cell_to_circuit_queue(circ, chan, cell, cell_direction, 0);
return 0;
}
@@ -351,15 +385,22 @@ relay_crypt(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction,
static int
circuit_package_relay_cell(cell_t *cell, circuit_t *circ,
cell_direction_t cell_direction,
- crypt_path_t *layer_hint, streamid_t on_stream)
+ crypt_path_t *layer_hint, streamid_t on_stream,
+ const char *filename, int lineno)
{
- or_connection_t *conn; /* where to send the cell */
+ channel_t *chan; /* where to send the cell */
if (cell_direction == CELL_DIRECTION_OUT) {
crypt_path_t *thishop; /* counter for repeated crypts */
- conn = circ->n_conn;
- if (!CIRCUIT_IS_ORIGIN(circ) || !conn) {
- log_warn(LD_BUG,"outgoing relay cell has n_conn==NULL. Dropping.");
+ chan = circ->n_chan;
+ if (!chan) {
+ log_warn(LD_BUG,"outgoing relay cell sent from %s:%d has n_chan==NULL."
+ " Dropping.", filename, lineno);
+ return 0; /* just drop it */
+ }
+ if (!CIRCUIT_IS_ORIGIN(circ)) {
+ log_warn(LD_BUG,"outgoing relay cell sent from %s:%d on non-origin "
+ "circ. Dropping.", filename, lineno);
return 0; /* just drop it */
}
@@ -388,14 +429,14 @@ circuit_package_relay_cell(cell_t *cell, circuit_t *circ,
return 0; /* just drop it */
}
or_circ = TO_OR_CIRCUIT(circ);
- conn = or_circ->p_conn;
+ chan = or_circ->p_chan;
relay_set_digest(or_circ->p_digest, cell);
if (relay_crypt_one_payload(or_circ->p_crypto, cell->payload, 1) < 0)
return -1;
}
++stats_n_relay_cells_relayed;
- append_cell_to_circuit_queue(circ, conn, cell, cell_direction, on_stream);
+ append_cell_to_circuit_queue(circ, chan, cell, cell_direction, on_stream);
return 0;
}
@@ -422,7 +463,7 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell,
for (tmpconn = TO_ORIGIN_CIRCUIT(circ)->p_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (rh.stream_id == tmpconn->stream_id &&
- !tmpconn->_base.marked_for_close &&
+ !tmpconn->base_.marked_for_close &&
tmpconn->cpath_layer == layer_hint) {
log_debug(LD_APP,"found conn for stream %d.", rh.stream_id);
return tmpconn;
@@ -432,7 +473,7 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell,
for (tmpconn = TO_OR_CIRCUIT(circ)->n_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (rh.stream_id == tmpconn->stream_id &&
- !tmpconn->_base.marked_for_close) {
+ !tmpconn->base_.marked_for_close) {
log_debug(LD_EXIT,"found conn for stream %d.", rh.stream_id);
if (cell_direction == CELL_DIRECTION_OUT ||
connection_edge_is_rendezvous_stream(tmpconn))
@@ -442,7 +483,7 @@ relay_lookup_conn(circuit_t *circ, cell_t *cell,
for (tmpconn = TO_OR_CIRCUIT(circ)->resolving_streams; tmpconn;
tmpconn=tmpconn->next_stream) {
if (rh.stream_id == tmpconn->stream_id &&
- !tmpconn->_base.marked_for_close) {
+ !tmpconn->base_.marked_for_close) {
log_debug(LD_EXIT,"found conn for stream %d.", rh.stream_id);
return tmpconn;
}
@@ -520,9 +561,10 @@ relay_command_to_string(uint8_t command)
* return 0.
*/
int
-relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
- uint8_t relay_command, const char *payload,
- size_t payload_len, crypt_path_t *cpath_layer)
+relay_send_command_from_edge_(streamid_t stream_id, circuit_t *circ,
+ uint8_t relay_command, const char *payload,
+ size_t payload_len, crypt_path_t *cpath_layer,
+ const char *filename, int lineno)
{
cell_t cell;
relay_header_t rh;
@@ -561,15 +603,16 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
geoip_change_dirreq_state(circ->dirreq_id, DIRREQ_TUNNELED,
DIRREQ_END_CELL_SENT);
- if (cell_direction == CELL_DIRECTION_OUT && circ->n_conn) {
+ if (cell_direction == CELL_DIRECTION_OUT && circ->n_chan) {
/* if we're using relaybandwidthrate, this conn wants priority */
- circ->n_conn->client_used = approx_time();
+ channel_timestamp_client(circ->n_chan);
}
if (cell_direction == CELL_DIRECTION_OUT) {
origin_circuit_t *origin_circ = TO_ORIGIN_CIRCUIT(circ);
if (origin_circ->remaining_relay_early_cells > 0 &&
(relay_command == RELAY_COMMAND_EXTEND ||
+ relay_command == RELAY_COMMAND_EXTEND2 ||
cpath_layer != origin_circ->cpath)) {
/* If we've got any relay_early cells left and (we're sending
* an extend cell or we're not talking to the first hop), use
@@ -583,7 +626,8 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
* task 878. */
origin_circ->relay_early_commands[
origin_circ->relay_early_cells_sent++] = relay_command;
- } else if (relay_command == RELAY_COMMAND_EXTEND) {
+ } else if (relay_command == RELAY_COMMAND_EXTEND ||
+ relay_command == RELAY_COMMAND_EXTEND2) {
/* If no RELAY_EARLY cells can be sent over this circuit, log which
* commands have been sent as RELAY_EARLY cells before; helps debug
* task 878. */
@@ -603,7 +647,7 @@ relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
}
if (circuit_package_relay_cell(&cell, circ, cell_direction, cpath_layer,
- stream_id) < 0) {
+ stream_id, filename, lineno) < 0) {
log_warn(LD_BUG,"circuit_package_relay_cell failed. Closing.");
circuit_mark_for_close(circ, END_CIRC_REASON_INTERNAL);
return -1;
@@ -631,16 +675,16 @@ connection_edge_send_command(edge_connection_t *fromconn,
tor_assert(fromconn);
circ = fromconn->on_circuit;
- if (fromconn->_base.marked_for_close) {
+ if (fromconn->base_.marked_for_close) {
log_warn(LD_BUG,
"called on conn that's already marked for close at %s:%d.",
- fromconn->_base.marked_for_close_file,
- fromconn->_base.marked_for_close);
+ fromconn->base_.marked_for_close_file,
+ fromconn->base_.marked_for_close);
return 0;
}
if (!circ) {
- if (fromconn->_base.type == CONN_TYPE_AP) {
+ if (fromconn->base_.type == CONN_TYPE_AP) {
log_info(LD_APP,"no circ. Closing conn.");
connection_mark_unattached_ap(EDGE_TO_ENTRY_CONN(fromconn),
END_STREAM_REASON_INTERNAL);
@@ -685,14 +729,41 @@ connection_ap_process_end_not_open(
relay_header_t *rh, cell_t *cell, origin_circuit_t *circ,
entry_connection_t *conn, crypt_path_t *layer_hint)
{
- struct in_addr in;
node_t *exitrouter;
int reason = *(cell->payload+RELAY_HEADER_SIZE);
- int control_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
+ int control_reason;
edge_connection_t *edge_conn = ENTRY_TO_EDGE_CONN(conn);
(void) layer_hint; /* unused */
- if (rh->length > 0 && edge_reason_is_retriable(reason) &&
+ if (rh->length > 0) {
+ if (reason == END_STREAM_REASON_TORPROTOCOL ||
+ reason == END_STREAM_REASON_DESTROY) {
+ /* Both of these reasons could mean a failed tag
+ * hit the exit and it complained. Do not probe.
+ * Fail the circuit. */
+ circ->path_state = PATH_STATE_USE_FAILED;
+ return -END_CIRC_REASON_TORPROTOCOL;
+ } else if (reason == END_STREAM_REASON_INTERNAL) {
+ /* We can't infer success or failure, since older Tors report
+ * ENETUNREACH as END_STREAM_REASON_INTERNAL. */
+ } else {
+ /* Path bias: If we get a valid reason code from the exit,
+ * it wasn't due to tagging.
+ *
+ * We rely on recognized+digest being strong enough to make
+ * tags unlikely to allow us to get tagged, yet 'recognized'
+ * reason codes here. */
+ pathbias_mark_use_success(circ);
+ }
+ }
+
+ if (rh->length == 0) {
+ reason = END_STREAM_REASON_MISC;
+ }
+
+ control_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
+
+ if (edge_reason_is_retriable(reason) &&
/* avoid retry if rend */
!connection_edge_is_rendezvous_stream(edge_conn)) {
const char *chosen_exit_digest =
@@ -702,48 +773,67 @@ connection_ap_process_end_not_open(
stream_end_reason_to_string(reason));
exitrouter = node_get_mutable_by_id(chosen_exit_digest);
switch (reason) {
- case END_STREAM_REASON_EXITPOLICY:
+ case END_STREAM_REASON_EXITPOLICY: {
+ tor_addr_t addr;
+ tor_addr_make_unspec(&addr);
if (rh->length >= 5) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
- int ttl;
- if (!addr) {
+ int ttl = -1;
+ tor_addr_make_unspec(&addr);
+ if (rh->length == 5 || rh->length == 9) {
+ tor_addr_from_ipv4n(&addr,
+ get_uint32(cell->payload+RELAY_HEADER_SIZE+1));
+ if (rh->length == 9)
+ ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+5));
+ } else if (rh->length == 17 || rh->length == 21) {
+ tor_addr_from_ipv6_bytes(&addr,
+ (char*)(cell->payload+RELAY_HEADER_SIZE+1));
+ if (rh->length == 21)
+ ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+17));
+ }
+ if (tor_addr_is_null(&addr)) {
log_info(LD_APP,"Address '%s' resolved to 0.0.0.0. Closing,",
safe_str(conn->socks_request->address));
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return 0;
}
- if (rh->length >= 9)
- ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+5));
- else
- ttl = -1;
+ if ((tor_addr_family(&addr) == AF_INET && !conn->ipv4_traffic_ok) ||
+ (tor_addr_family(&addr) == AF_INET6 && !conn->ipv6_traffic_ok)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP,
+ "Got an EXITPOLICY failure on a connection with a "
+ "mismatched family. Closing.");
+ connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
+ return 0;
+ }
if (get_options()->ClientDNSRejectInternalAddresses &&
- is_internal_IP(addr, 0)) {
+ tor_addr_is_internal(&addr, 0)) {
log_info(LD_APP,"Address '%s' resolved to internal. Closing,",
safe_str(conn->socks_request->address));
connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);
return 0;
}
- client_dns_set_addressmap(conn->socks_request->address, addr,
+
+ client_dns_set_addressmap(conn,
+ conn->socks_request->address, &addr,
conn->chosen_exit_name, ttl);
+
+ {
+ char new_addr[TOR_ADDR_BUF_LEN];
+ tor_addr_to_str(new_addr, &addr, sizeof(new_addr), 1);
+ if (strcmp(conn->socks_request->address, new_addr)) {
+ strlcpy(conn->socks_request->address, new_addr,
+ sizeof(conn->socks_request->address));
+ control_event_stream_status(conn, STREAM_EVENT_REMAP, 0);
+ }
+ }
}
/* check if he *ought* to have allowed it */
- if (exitrouter &&
- (rh->length < 5 ||
- (tor_inet_aton(conn->socks_request->address, &in) &&
- !conn->chosen_exit_name))) {
- log_info(LD_APP,
- "Exitrouter %s seems to be more restrictive than its exit "
- "policy. Not using this router as exit for now.",
- node_describe(exitrouter));
- policies_set_node_exitpolicy_to_reject_all(exitrouter);
- }
- /* rewrite it to an IP if we learned one. */
- if (addressmap_rewrite(conn->socks_request->address,
- sizeof(conn->socks_request->address),
- NULL, NULL)) {
- control_event_stream_status(conn, STREAM_EVENT_REMAP, 0);
- }
+
+ adjust_exit_policy_from_exitpolicy_failure(circ,
+ conn,
+ exitrouter,
+ &addr);
+
if (conn->chosen_exit_optional ||
conn->chosen_exit_retries) {
/* stop wanting a specific exit */
@@ -762,6 +852,7 @@ connection_ap_process_end_not_open(
return 0;
/* else, conn will get closed below */
break;
+ }
case END_STREAM_REASON_CONNECTREFUSED:
if (!conn->chosen_exit_optional)
break; /* break means it'll close, below */
@@ -776,9 +867,7 @@ connection_ap_process_end_not_open(
/* We haven't retried too many times; reattach the connection. */
circuit_log_path(LOG_INFO,LD_APP,circ);
/* Mark this circuit "unusable for new streams". */
- /* XXXX024 this is a kludgy way to do this. */
- tor_assert(circ->_base.timestamp_dirty);
- circ->_base.timestamp_dirty -= get_options()->MaxCircuitDirtiness;
+ mark_circuit_unusable_for_new_conns(circ);
if (conn->chosen_exit_optional) {
/* stop wanting a specific exit */
@@ -826,21 +915,350 @@ connection_ap_process_end_not_open(
return 0;
}
+/** Called when we have gotten an END_REASON_EXITPOLICY failure on <b>circ</b>
+ * for <b>conn</b>, while attempting to connect via <b>node</b>. If the node
+ * told us which address it rejected, then <b>addr</b> is that address;
+ * otherwise it is AF_UNSPEC.
+ *
+ * If we are sure the node should have allowed this address, mark the node as
+ * having a reject *:* exit policy. Otherwise, mark the circuit as unusable
+ * for this particular address.
+ **/
+static void
+adjust_exit_policy_from_exitpolicy_failure(origin_circuit_t *circ,
+ entry_connection_t *conn,
+ node_t *node,
+ const tor_addr_t *addr)
+{
+ int make_reject_all = 0;
+ const sa_family_t family = tor_addr_family(addr);
+
+ if (node) {
+ tor_addr_t tmp;
+ int asked_for_family = tor_addr_parse(&tmp, conn->socks_request->address);
+ if (family == AF_UNSPEC) {
+ make_reject_all = 1;
+ } else if (node_exit_policy_is_exact(node, family) &&
+ asked_for_family != -1 && !conn->chosen_exit_name) {
+ make_reject_all = 1;
+ }
+
+ if (make_reject_all) {
+ log_info(LD_APP,
+ "Exitrouter %s seems to be more restrictive than its exit "
+ "policy. Not using this router as exit for now.",
+ node_describe(node));
+ policies_set_node_exitpolicy_to_reject_all(node);
+ }
+ }
+
+ if (family != AF_UNSPEC)
+ addr_policy_append_reject_addr(&circ->prepend_policy, addr);
+}
+
/** Helper: change the socks_request-&gt;address field on conn to the
- * dotted-quad representation of <b>new_addr</b> (given in host order),
+ * dotted-quad representation of <b>new_addr</b>,
* and send an appropriate REMAP event. */
static void
-remap_event_helper(entry_connection_t *conn, uint32_t new_addr)
+remap_event_helper(entry_connection_t *conn, const tor_addr_t *new_addr)
{
- struct in_addr in;
-
- in.s_addr = htonl(new_addr);
- tor_inet_ntoa(&in, conn->socks_request->address,
- sizeof(conn->socks_request->address));
+ tor_addr_to_str(conn->socks_request->address, new_addr,
+ sizeof(conn->socks_request->address),
+ 1);
control_event_stream_status(conn, STREAM_EVENT_REMAP,
REMAP_STREAM_SOURCE_EXIT);
}
+/** Extract the contents of a connected cell in <b>cell</b>, whose relay
+ * header has already been parsed into <b>rh</b>. On success, set
+ * <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. */
+STATIC int
+connected_cell_parse(const relay_header_t *rh, const cell_t *cell,
+ tor_addr_t *addr_out, int *ttl_out)
+{
+ uint32_t bytes;
+ const uint8_t *payload = cell->payload + RELAY_HEADER_SIZE;
+
+ tor_addr_make_unspec(addr_out);
+ *ttl_out = -1;
+ if (rh->length == 0)
+ return 0;
+ if (rh->length < 4)
+ return -1;
+ bytes = ntohl(get_uint32(payload));
+
+ /* If bytes is 0, this is maybe a v6 address. Otherwise it's a v4 address */
+ if (bytes != 0) {
+ /* v4 address */
+ tor_addr_from_ipv4h(addr_out, bytes);
+ if (rh->length >= 8) {
+ bytes = ntohl(get_uint32(payload + 4));
+ if (bytes <= INT32_MAX)
+ *ttl_out = bytes;
+ }
+ } else {
+ if (rh->length < 25) /* 4 bytes of 0s, 1 addr, 16 ipv4, 4 ttl. */
+ return -1;
+ if (get_uint8(payload + 4) != 6)
+ return -1;
+ tor_addr_from_ipv6_bytes(addr_out, (char*)(payload + 5));
+ bytes = ntohl(get_uint32(payload + 21));
+ if (bytes <= INT32_MAX)
+ *ttl_out = (int) bytes;
+ }
+ return 0;
+}
+
+/** Drop all storage held by <b>addr</b>. */
+STATIC void
+address_ttl_free(address_ttl_t *addr)
+{
+ if (!addr)
+ return;
+ tor_free(addr->hostname);
+ tor_free(addr);
+}
+
+/** Parse a resolved cell in <b>cell</b>, with parsed header in <b>rh</b>.
+ * Return -1 on parse error. On success, add one or more newly allocated
+ * address_ttl_t to <b>addresses_out</b>; set *<b>errcode_out</b> to
+ * one of 0, RESOLVED_TYPE_ERROR, or RESOLVED_TYPE_ERROR_TRANSIENT, and
+ * return 0. */
+STATIC int
+resolved_cell_parse(const cell_t *cell, const relay_header_t *rh,
+ smartlist_t *addresses_out, int *errcode_out)
+{
+ const uint8_t *cp;
+ uint8_t answer_type;
+ size_t answer_len;
+ address_ttl_t *addr;
+ size_t remaining;
+ int errcode = 0;
+ smartlist_t *addrs;
+
+ tor_assert(cell);
+ tor_assert(rh);
+ tor_assert(addresses_out);
+ tor_assert(errcode_out);
+
+ *errcode_out = 0;
+
+ if (rh->length > RELAY_PAYLOAD_SIZE)
+ return -1;
+
+ addrs = smartlist_new();
+
+ cp = cell->payload + RELAY_HEADER_SIZE;
+
+ remaining = rh->length;
+ while (remaining) {
+ const uint8_t *cp_orig = cp;
+ if (remaining < 2)
+ goto err;
+ answer_type = *cp++;
+ answer_len = *cp++;
+ if (remaining < 2 + answer_len + 4) {
+ goto err;
+ }
+ if (answer_type == RESOLVED_TYPE_IPV4) {
+ if (answer_len != 4) {
+ goto err;
+ }
+ addr = tor_malloc_zero(sizeof(*addr));
+ tor_addr_from_ipv4n(&addr->addr, get_uint32(cp));
+ cp += 4;
+ addr->ttl = ntohl(get_uint32(cp));
+ cp += 4;
+ smartlist_add(addrs, addr);
+ } else if (answer_type == RESOLVED_TYPE_IPV6) {
+ if (answer_len != 16)
+ goto err;
+ addr = tor_malloc_zero(sizeof(*addr));
+ tor_addr_from_ipv6_bytes(&addr->addr, (const char*) cp);
+ cp += 16;
+ addr->ttl = ntohl(get_uint32(cp));
+ cp += 4;
+ smartlist_add(addrs, addr);
+ } else if (answer_type == RESOLVED_TYPE_HOSTNAME) {
+ if (answer_len == 0) {
+ goto err;
+ }
+ addr = tor_malloc_zero(sizeof(*addr));
+ addr->hostname = tor_memdup_nulterm(cp, answer_len);
+ cp += answer_len;
+ addr->ttl = ntohl(get_uint32(cp));
+ cp += 4;
+ smartlist_add(addrs, addr);
+ } else if (answer_type == RESOLVED_TYPE_ERROR_TRANSIENT ||
+ answer_type == RESOLVED_TYPE_ERROR) {
+ errcode = answer_type;
+ /* Ignore the error contents */
+ cp += answer_len + 4;
+ } else {
+ cp += answer_len + 4;
+ }
+ tor_assert(((ssize_t)remaining) >= (cp - cp_orig));
+ remaining -= (cp - cp_orig);
+ }
+
+ if (errcode && smartlist_len(addrs) == 0) {
+ /* Report an error only if there were no results. */
+ *errcode_out = errcode;
+ }
+
+ smartlist_add_all(addresses_out, addrs);
+ smartlist_free(addrs);
+
+ return 0;
+
+ err:
+ /* On parse error, don't report any results */
+ SMARTLIST_FOREACH(addrs, address_ttl_t *, a, address_ttl_free(a));
+ smartlist_free(addrs);
+ return -1;
+}
+
+/** Helper for connection_edge_process_resolved_cell: given an error code,
+ * an entry_connection, and a list of address_ttl_t *, report the best answer
+ * to the entry_connection. */
+static void
+connection_ap_handshake_socks_got_resolved_cell(entry_connection_t *conn,
+ int error_code,
+ smartlist_t *results)
+{
+ address_ttl_t *addr_ipv4 = NULL;
+ address_ttl_t *addr_ipv6 = NULL;
+ address_ttl_t *addr_hostname = NULL;
+ address_ttl_t *addr_best = NULL;
+
+ /* If it's an error code, that's easy. */
+ if (error_code) {
+ tor_assert(error_code == RESOLVED_TYPE_ERROR ||
+ error_code == RESOLVED_TYPE_ERROR_TRANSIENT);
+ connection_ap_handshake_socks_resolved(conn,
+ error_code,0,NULL,-1,-1);
+ return;
+ }
+
+ /* Get the first answer of each type. */
+ SMARTLIST_FOREACH_BEGIN(results, address_ttl_t *, addr) {
+ if (addr->hostname) {
+ if (!addr_hostname) {
+ addr_hostname = addr;
+ }
+ } else if (tor_addr_family(&addr->addr) == AF_INET) {
+ if (!addr_ipv4 && conn->ipv4_traffic_ok) {
+ addr_ipv4 = addr;
+ }
+ } else if (tor_addr_family(&addr->addr) == AF_INET6) {
+ if (!addr_ipv6 && conn->ipv6_traffic_ok) {
+ addr_ipv6 = addr;
+ }
+ }
+ } SMARTLIST_FOREACH_END(addr);
+
+ /* Now figure out which type we wanted to deliver. */
+ if (conn->socks_request->command == SOCKS_COMMAND_RESOLVE_PTR) {
+ if (addr_hostname) {
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_HOSTNAME,
+ strlen(addr_hostname->hostname),
+ (uint8_t*)addr_hostname->hostname,
+ addr_hostname->ttl,-1);
+ } else {
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_ERROR,0,NULL,-1,-1);
+ }
+ return;
+ }
+
+ if (conn->prefer_ipv6_traffic) {
+ addr_best = addr_ipv6 ? addr_ipv6 : addr_ipv4;
+ } else {
+ addr_best = addr_ipv4 ? addr_ipv4 : addr_ipv6;
+ }
+
+ /* Now convert it to the ugly old interface */
+ if (! addr_best) {
+ connection_ap_handshake_socks_resolved(conn,
+ RESOLVED_TYPE_ERROR,0,NULL,-1,-1);
+ return;
+ }
+
+ connection_ap_handshake_socks_resolved_addr(conn,
+ &addr_best->addr,
+ addr_best->ttl,
+ -1);
+
+ remap_event_helper(conn, &addr_best->addr);
+}
+
+/** Handle a RELAY_COMMAND_RESOLVED cell that we received on a non-open AP
+ * stream. */
+STATIC int
+connection_edge_process_resolved_cell(edge_connection_t *conn,
+ const cell_t *cell,
+ const relay_header_t *rh)
+{
+ entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
+ smartlist_t *resolved_addresses = NULL;
+ int errcode = 0;
+
+ if (conn->base_.state != AP_CONN_STATE_RESOLVE_WAIT) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP, "Got a 'resolved' cell while "
+ "not in state resolve_wait. Dropping.");
+ return 0;
+ }
+ tor_assert(SOCKS_COMMAND_IS_RESOLVE(entry_conn->socks_request->command));
+
+ resolved_addresses = smartlist_new();
+ if (resolved_cell_parse(cell, rh, resolved_addresses, &errcode)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
+ "Dropping malformed 'resolved' cell");
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
+ goto done;
+ }
+
+ if (get_options()->ClientDNSRejectInternalAddresses) {
+ int orig_len = smartlist_len(resolved_addresses);
+ SMARTLIST_FOREACH_BEGIN(resolved_addresses, address_ttl_t *, addr) {
+ if (addr->hostname == NULL && tor_addr_is_internal(&addr->addr, 0)) {
+ log_info(LD_APP, "Got a resolved cell with answer %s; dropping that "
+ "answer.",
+ safe_str_client(fmt_addr(&addr->addr)));
+ address_ttl_free(addr);
+ SMARTLIST_DEL_CURRENT(resolved_addresses, addr);
+ }
+ } SMARTLIST_FOREACH_END(addr);
+ if (orig_len && smartlist_len(resolved_addresses) == 0) {
+ log_info(LD_APP, "Got a resolved cell with only private addresses; "
+ "dropping it.");
+ connection_ap_handshake_socks_resolved(entry_conn,
+ RESOLVED_TYPE_ERROR_TRANSIENT,
+ 0, NULL, 0, TIME_MAX);
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_TORPROTOCOL);
+ goto done;
+ }
+ }
+
+ connection_ap_handshake_socks_got_resolved_cell(entry_conn,
+ errcode,
+ resolved_addresses);
+
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_DONE |
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+
+ done:
+ SMARTLIST_FOREACH(resolved_addresses, address_ttl_t *, addr,
+ address_ttl_free(addr));
+ smartlist_free(resolved_addresses);
+ return 0;
+}
+
/** An incoming relay cell has arrived from circuit <b>circ</b> to
* stream <b>conn</b>.
*
@@ -854,7 +1272,7 @@ connection_edge_process_relay_cell_not_open(
edge_connection_t *conn, crypt_path_t *layer_hint)
{
if (rh->command == RELAY_COMMAND_END) {
- if (CIRCUIT_IS_ORIGIN(circ) && conn->_base.type == CONN_TYPE_AP) {
+ if (CIRCUIT_IS_ORIGIN(circ) && conn->base_.type == CONN_TYPE_AP) {
return connection_ap_process_end_not_open(rh, cell,
TO_ORIGIN_CIRCUIT(circ),
EDGE_TO_ENTRY_CONN(conn),
@@ -869,38 +1287,55 @@ connection_edge_process_relay_cell_not_open(
}
}
- if (conn->_base.type == CONN_TYPE_AP &&
+ if (conn->base_.type == CONN_TYPE_AP &&
rh->command == RELAY_COMMAND_CONNECTED) {
+ tor_addr_t addr;
+ int ttl;
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
tor_assert(CIRCUIT_IS_ORIGIN(circ));
- if (conn->_base.state != AP_CONN_STATE_CONNECT_WAIT) {
+ if (conn->base_.state != AP_CONN_STATE_CONNECT_WAIT) {
log_fn(LOG_PROTOCOL_WARN, LD_APP,
"Got 'connected' while not in state connect_wait. Dropping.");
return 0;
}
- conn->_base.state = AP_CONN_STATE_OPEN;
+ conn->base_.state = AP_CONN_STATE_OPEN;
log_info(LD_APP,"'connected' received after %d seconds.",
- (int)(time(NULL) - conn->_base.timestamp_lastread));
- if (rh->length >= 4) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE));
- int ttl;
- if (!addr || (get_options()->ClientDNSRejectInternalAddresses &&
- is_internal_IP(addr, 0))) {
+ (int)(time(NULL) - conn->base_.timestamp_lastread));
+ if (connected_cell_parse(rh, cell, &addr, &ttl) < 0) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP,
+ "Got a badly formatted connected cell. Closing.");
+ connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
+ }
+ if (tor_addr_family(&addr) != AF_UNSPEC) {
+ const sa_family_t family = tor_addr_family(&addr);
+ if (tor_addr_is_null(&addr) ||
+ (get_options()->ClientDNSRejectInternalAddresses &&
+ tor_addr_is_internal(&addr, 0))) {
log_info(LD_APP, "...but it claims the IP address was %s. Closing.",
- fmt_addr32(addr));
+ fmt_addr(&addr));
+ connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
+ connection_mark_unattached_ap(entry_conn,
+ END_STREAM_REASON_TORPROTOCOL);
+ return 0;
+ }
+
+ if ((family == AF_INET && ! entry_conn->ipv4_traffic_ok) ||
+ (family == AF_INET6 && ! entry_conn->ipv6_traffic_ok)) {
+ log_fn(LOG_PROTOCOL_WARN, LD_APP,
+ "Got a connected cell to %s with unsupported address family."
+ " Closing.", fmt_addr(&addr));
connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
connection_mark_unattached_ap(entry_conn,
END_STREAM_REASON_TORPROTOCOL);
return 0;
}
- if (rh->length >= 8)
- ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+4));
- else
- ttl = -1;
- client_dns_set_addressmap(entry_conn->socks_request->address, addr,
+
+ client_dns_set_addressmap(entry_conn,
+ entry_conn->socks_request->address, &addr,
entry_conn->chosen_exit_name, ttl);
- remap_event_helper(entry_conn, addr);
+ remap_event_helper(entry_conn, &addr);
}
circuit_log_path(LOG_INFO,LD_APP,TO_ORIGIN_CIRCUIT(circ));
/* don't send a socks reply to transparent conns */
@@ -924,8 +1359,10 @@ connection_edge_process_relay_cell_not_open(
control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_STATUS, 0);
break;
case DIR_PURPOSE_FETCH_SERVERDESC:
- control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
- count_loading_descriptors_progress());
+ case DIR_PURPOSE_FETCH_MICRODESC:
+ if (TO_DIR_CONN(dirconn)->router_purpose == ROUTER_PURPOSE_GENERAL)
+ control_event_bootstrap(BOOTSTRAP_STATUS_LOADING_DESCRIPTORS,
+ count_loading_descriptors_progress());
break;
}
}
@@ -944,65 +1381,15 @@ connection_edge_process_relay_cell_not_open(
}
return 0;
}
- if (conn->_base.type == CONN_TYPE_AP &&
+ if (conn->base_.type == CONN_TYPE_AP &&
rh->command == RELAY_COMMAND_RESOLVED) {
- int ttl;
- int answer_len;
- uint8_t answer_type;
- entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
- if (conn->_base.state != AP_CONN_STATE_RESOLVE_WAIT) {
- log_fn(LOG_PROTOCOL_WARN, LD_APP, "Got a 'resolved' cell while "
- "not in state resolve_wait. Dropping.");
- return 0;
- }
- tor_assert(SOCKS_COMMAND_IS_RESOLVE(entry_conn->socks_request->command));
- answer_len = cell->payload[RELAY_HEADER_SIZE+1];
- if (rh->length < 2 || answer_len+2>rh->length) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Dropping malformed 'resolved' cell");
- connection_mark_unattached_ap(entry_conn, END_STREAM_REASON_TORPROTOCOL);
- return 0;
- }
- answer_type = cell->payload[RELAY_HEADER_SIZE];
- if (rh->length >= answer_len+6)
- ttl = (int)ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+
- 2+answer_len));
- else
- ttl = -1;
- if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+2));
- if (get_options()->ClientDNSRejectInternalAddresses &&
- is_internal_IP(addr, 0)) {
- log_info(LD_APP,"Got a resolve with answer %s. Rejecting.",
- fmt_addr32(addr));
- connection_ap_handshake_socks_resolved(entry_conn,
- RESOLVED_TYPE_ERROR_TRANSIENT,
- 0, NULL, 0, TIME_MAX);
- connection_mark_unattached_ap(entry_conn,
- END_STREAM_REASON_TORPROTOCOL);
- return 0;
- }
- }
- connection_ap_handshake_socks_resolved(entry_conn,
- answer_type,
- cell->payload[RELAY_HEADER_SIZE+1], /*answer_len*/
- cell->payload+RELAY_HEADER_SIZE+2, /*answer*/
- ttl,
- -1);
- if (answer_type == RESOLVED_TYPE_IPV4 && answer_len == 4) {
- uint32_t addr = ntohl(get_uint32(cell->payload+RELAY_HEADER_SIZE+2));
- remap_event_helper(entry_conn, addr);
- }
- connection_mark_unattached_ap(entry_conn,
- END_STREAM_REASON_DONE |
- END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
- return 0;
+ return connection_edge_process_resolved_cell(conn, cell, rh);
}
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Got an unexpected relay command %d, in state %d (%s). Dropping.",
- rh->command, conn->_base.state,
- conn_state_to_string(conn->_base.type, conn->_base.state));
+ rh->command, conn->base_.state,
+ conn_state_to_string(conn->base_.type, conn->base_.state));
return 0; /* for forward compatibility, don't kill the circuit */
// connection_edge_end(conn, END_STREAM_REASON_TORPROTOCOL);
// connection_mark_for_close(conn);
@@ -1066,9 +1453,9 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
* conn points to the recognized stream. */
if (conn && !connection_state_is_open(TO_CONN(conn))) {
- if (conn->_base.type == CONN_TYPE_EXIT &&
- (conn->_base.state == EXIT_CONN_STATE_CONNECTING ||
- conn->_base.state == EXIT_CONN_STATE_RESOLVING) &&
+ if (conn->base_.type == CONN_TYPE_EXIT &&
+ (conn->base_.state == EXIT_CONN_STATE_CONNECTING ||
+ conn->base_.state == EXIT_CONN_STATE_RESOLVING) &&
rh.command == RELAY_COMMAND_DATA) {
/* Allow DATA cells to be delivered to an exit node in state
* EXIT_CONN_STATE_CONNECTING or EXIT_CONN_STATE_RESOLVING.
@@ -1114,7 +1501,7 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
* and linked. */
static uint64_t next_id = 0;
circ->dirreq_id = ++next_id;
- TO_CONN(TO_OR_CIRCUIT(circ)->p_conn)->dirreq_id = circ->dirreq_id;
+ TO_OR_CIRCUIT(circ)->p_chan->dirreq_id = circ->dirreq_id;
}
return connection_exit_begin_conn(cell, circ);
@@ -1174,11 +1561,12 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
return 0;
}
/* XXX add to this log_fn the exit node's nickname? */
- log_info(domain,"%d: end cell (%s) for stream %d. Removing stream.",
- conn->_base.s,
+ log_info(domain,TOR_SOCKET_T_FORMAT": end cell (%s) for stream %d. "
+ "Removing stream.",
+ conn->base_.s,
stream_end_reason_to_string(reason),
conn->stream_id);
- if (conn->_base.type == CONN_TYPE_AP) {
+ if (conn->base_.type == CONN_TYPE_AP) {
entry_connection_t *entry_conn = EDGE_TO_ENTRY_CONN(conn);
if (entry_conn->socks_request &&
!entry_conn->socks_request->has_finished)
@@ -1189,16 +1577,17 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
conn->edge_has_sent_end = 1;
if (!conn->end_reason)
conn->end_reason = reason | END_STREAM_REASON_FLAG_REMOTE;
- if (!conn->_base.marked_for_close) {
+ if (!conn->base_.marked_for_close) {
/* only mark it if not already marked. it's possible to
* get the 'end' right around when the client hangs up on us. */
connection_mark_and_flush(TO_CONN(conn));
}
return 0;
- case RELAY_COMMAND_EXTEND: {
+ case RELAY_COMMAND_EXTEND:
+ case RELAY_COMMAND_EXTEND2: {
static uint64_t total_n_extend=0, total_nonearly=0;
total_n_extend++;
- if (conn) {
+ if (rh.stream_id) {
log_fn(LOG_PROTOCOL_WARN, domain,
"'extend' cell received for non-zero stream. Dropping.");
return 0;
@@ -1230,17 +1619,27 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
return circuit_extend(cell, circ);
}
case RELAY_COMMAND_EXTENDED:
+ case RELAY_COMMAND_EXTENDED2:
if (!layer_hint) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"'extended' unsupported at non-origin. Dropping.");
return 0;
}
log_debug(domain,"Got an extended cell! Yay.");
- if ((reason = circuit_finish_handshake(TO_ORIGIN_CIRCUIT(circ),
- CELL_CREATED,
- cell->payload+RELAY_HEADER_SIZE)) < 0) {
- log_warn(domain,"circuit_finish_handshake failed.");
- return reason;
+ {
+ extended_cell_t extended_cell;
+ if (extended_cell_parse(&extended_cell, rh.command,
+ (const uint8_t*)cell->payload+RELAY_HEADER_SIZE,
+ rh.length)<0) {
+ log_warn(LD_PROTOCOL,
+ "Can't parse EXTENDED cell; killing circuit.");
+ return -END_CIRC_REASON_TORPROTOCOL;
+ }
+ if ((reason = circuit_finish_handshake(TO_ORIGIN_CIRCUIT(circ),
+ &extended_cell.created_cell)) < 0) {
+ log_warn(domain,"circuit_finish_handshake failed.");
+ return reason;
+ }
}
if ((reason=circuit_send_next_onion_skin(TO_ORIGIN_CIRCUIT(circ)))<0) {
log_info(domain,"circuit_send_next_onion_skin() failed.");
@@ -1253,12 +1652,20 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
"'truncate' unsupported at origin. Dropping.");
return 0;
}
- if (circ->n_conn) {
- uint8_t trunc_reason = *(uint8_t*)(cell->payload + RELAY_HEADER_SIZE);
- circuit_clear_cell_queue(circ, circ->n_conn);
- connection_or_send_destroy(circ->n_circ_id, circ->n_conn,
- trunc_reason);
- circuit_set_n_circid_orconn(circ, 0, NULL);
+ if (circ->n_hop) {
+ if (circ->n_chan)
+ log_warn(LD_BUG, "n_chan and n_hop set on the same circuit!");
+ extend_info_free(circ->n_hop);
+ circ->n_hop = NULL;
+ tor_free(circ->n_chan_create_cell);
+ circuit_set_state(circ, CIRCUIT_STATE_OPEN);
+ }
+ if (circ->n_chan) {
+ uint8_t trunc_reason = get_uint8(cell->payload + RELAY_HEADER_SIZE);
+ circuit_clear_cell_queue(circ, circ->n_chan);
+ channel_send_destroy(circ->n_circ_id, circ->n_chan,
+ trunc_reason);
+ circuit_set_n_circid_chan(circ, 0, NULL);
}
log_debug(LD_EXIT, "Processed 'truncate', replying.");
{
@@ -1274,7 +1681,8 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
"'truncated' unsupported at non-origin. Dropping.");
return 0;
}
- circuit_truncated(TO_ORIGIN_CIRCUIT(circ), layer_hint);
+ circuit_truncated(TO_ORIGIN_CIRCUIT(circ), layer_hint,
+ get_uint8(cell->payload + RELAY_HEADER_SIZE));
return 0;
case RELAY_COMMAND_CONNECTED:
if (conn) {
@@ -1290,8 +1698,9 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
if (layer_hint) {
if (layer_hint->package_window + CIRCWINDOW_INCREMENT >
CIRCWINDOW_START_MAX) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Bug/attack: unexpected sendme cell from exit relay. "
+ static struct ratelim_t exit_warn_ratelim = RATELIM_INIT(600);
+ log_fn_ratelim(&exit_warn_ratelim, LOG_WARN, LD_PROTOCOL,
+ "Unexpected sendme cell from exit relay. "
"Closing circ.");
return -END_CIRC_REASON_TORPROTOCOL;
}
@@ -1302,9 +1711,11 @@ connection_edge_process_relay_cell(cell_t *cell, circuit_t *circ,
} else {
if (circ->package_window + CIRCWINDOW_INCREMENT >
CIRCWINDOW_START_MAX) {
- log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Bug/attack: unexpected sendme cell from client. "
- "Closing circ.");
+ static struct ratelim_t client_warn_ratelim = RATELIM_INIT(600);
+ log_fn_ratelim(&client_warn_ratelim, LOG_WARN, LD_PROTOCOL,
+ "Unexpected sendme cell from client. "
+ "Closing circ (window %d).",
+ circ->package_window);
return -END_CIRC_REASON_TORPROTOCOL;
}
circ->package_window += CIRCWINDOW_INCREMENT;
@@ -1412,21 +1823,22 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
size_t bytes_to_process, length;
char payload[CELL_PAYLOAD_SIZE];
circuit_t *circ;
- const unsigned domain = conn->_base.type == CONN_TYPE_AP ? LD_APP : LD_EXIT;
+ const unsigned domain = conn->base_.type == CONN_TYPE_AP ? LD_APP : LD_EXIT;
int sending_from_optimistic = 0;
- const int sending_optimistically =
- conn->_base.type == CONN_TYPE_AP &&
- conn->_base.state != AP_CONN_STATE_OPEN;
entry_connection_t *entry_conn =
- conn->_base.type == CONN_TYPE_AP ? EDGE_TO_ENTRY_CONN(conn) : NULL;
+ conn->base_.type == CONN_TYPE_AP ? EDGE_TO_ENTRY_CONN(conn) : NULL;
+ const int sending_optimistically =
+ entry_conn &&
+ conn->base_.type == CONN_TYPE_AP &&
+ conn->base_.state != AP_CONN_STATE_OPEN;
crypt_path_t *cpath_layer = conn->cpath_layer;
tor_assert(conn);
- if (conn->_base.marked_for_close) {
+ if (conn->base_.marked_for_close) {
log_warn(LD_BUG,
"called on conn that's already marked for close at %s:%d.",
- conn->_base.marked_for_close_file, conn->_base.marked_for_close);
+ conn->base_.marked_for_close_file, conn->base_.marked_for_close);
return 0;
}
@@ -1493,7 +1905,8 @@ connection_edge_package_raw_inbuf(edge_connection_t *conn, int package_partial,
connection_fetch_from_buf(payload, length, TO_CONN(conn));
}
- log_debug(domain,"(%d) Packaging %d bytes (%d waiting).", conn->_base.s,
+ log_debug(domain,TOR_SOCKET_T_FORMAT": Packaging %d bytes (%d waiting).",
+ conn->base_.s,
(int)length, (int)connection_get_inbuf_len(TO_CONN(conn)));
if (sending_optimistically && !sending_from_optimistic) {
@@ -1559,9 +1972,9 @@ connection_edge_consider_sending_sendme(edge_connection_t *conn)
}
while (conn->deliver_window <= STREAMWINDOW_START - STREAMWINDOW_INCREMENT) {
- log_debug(conn->_base.type == CONN_TYPE_AP ?LD_APP:LD_EXIT,
+ log_debug(conn->base_.type == CONN_TYPE_AP ?LD_APP:LD_EXIT,
"Outbuf %d, Queuing stream sendme.",
- (int)conn->_base.outbuf_flushlen);
+ (int)conn->base_.outbuf_flushlen);
conn->deliver_window += STREAMWINDOW_INCREMENT;
if (connection_edge_send_command(conn, RELAY_COMMAND_SENDME,
NULL, 0) < 0) {
@@ -1593,6 +2006,12 @@ circuit_resume_edge_reading(circuit_t *circ, crypt_path_t *layer_hint)
circ, layer_hint);
}
+void
+stream_choice_seed_weak_rng(void)
+{
+ crypto_seed_weak_rng(&stream_choice_rng);
+}
+
/** A helper function for circuit_resume_edge_reading() above.
* The arguments are the same, except that <b>conn</b> is the head
* of a linked list of edge streams that should each be considered.
@@ -1608,16 +2027,23 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
int cells_on_queue;
int cells_per_conn;
edge_connection_t *chosen_stream = NULL;
+ int max_to_package;
+
+ if (first_conn == NULL) {
+ /* Don't bother to try to do the rest of this if there are no connections
+ * to resume. */
+ return 0;
+ }
/* How many cells do we have space for? It will be the minimum of
* the number needed to exhaust the package window, and the minimum
* needed to fill the cell queue. */
- int max_to_package = circ->package_window;
+ max_to_package = circ->package_window;
if (CIRCUIT_IS_ORIGIN(circ)) {
- cells_on_queue = circ->n_conn_cells.n;
+ cells_on_queue = circ->n_chan_cells.n;
} else {
or_circuit_t *or_circ = TO_OR_CIRCUIT(circ);
- cells_on_queue = or_circ->p_conn_cells.n;
+ cells_on_queue = or_circ->p_chan_cells.n;
}
if (CELL_QUEUE_HIGHWATER_SIZE - cells_on_queue < max_to_package)
max_to_package = CELL_QUEUE_HIGHWATER_SIZE - cells_on_queue;
@@ -1637,10 +2063,19 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
int num_streams = 0;
for (conn = first_conn; conn; conn = conn->next_stream) {
num_streams++;
- if ((tor_weak_random() % num_streams)==0)
+ if (tor_weak_random_one_in_n(&stream_choice_rng, num_streams)) {
chosen_stream = conn;
+ }
/* Invariant: chosen_stream has been chosen uniformly at random from
- * among the first num_streams streams on first_conn. */
+ * among the first num_streams streams on first_conn.
+ *
+ * (Note that we iterate over every stream on the circuit, so that after
+ * we've considered the first stream, we've chosen it with P=1; and
+ * after we consider the second stream, we've switched to it with P=1/2
+ * and stayed with the first stream with P=1/2; and after we've
+ * considered the third stream, we've switched to it with P=1/3 and
+ * remained with one of the first two streams with P=(2/3), giving each
+ * one P=(1/2)(2/3) )=(1/3).) */
}
}
@@ -1650,7 +2085,7 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
/* Activate reading starting from the chosen stream */
for (conn=chosen_stream; conn; conn = conn->next_stream) {
/* Start reading for the streams starting from here */
- if (conn->_base.marked_for_close || conn->package_window <= 0)
+ if (conn->base_.marked_for_close || conn->package_window <= 0)
continue;
if (!layer_hint || conn->cpath_layer == layer_hint) {
connection_start_reading(TO_CONN(conn));
@@ -1661,7 +2096,7 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
}
/* Go back and do the ones we skipped, circular-style */
for (conn = first_conn; conn != chosen_stream; conn = conn->next_stream) {
- if (conn->_base.marked_for_close || conn->package_window <= 0)
+ if (conn->base_.marked_for_close || conn->package_window <= 0)
continue;
if (!layer_hint || conn->cpath_layer == layer_hint) {
connection_start_reading(TO_CONN(conn));
@@ -1687,7 +2122,7 @@ circuit_resume_edge_reading_helper(edge_connection_t *first_conn,
* package.
*/
for (conn=first_conn; conn; conn=conn->next_stream) {
- if (conn->_base.marked_for_close || conn->package_window <= 0)
+ if (conn->base_.marked_for_close || conn->package_window <= 0)
continue;
if (!layer_hint || conn->cpath_layer == layer_hint) {
int n = cells_per_conn, r;
@@ -1798,22 +2233,19 @@ circuit_consider_sending_sendme(circuit_t *circ, crypt_path_t *layer_hint)
}
#ifdef ACTIVE_CIRCUITS_PARANOIA
-#define assert_active_circuits_ok_paranoid(conn) \
- assert_active_circuits_ok(conn)
+#define assert_cmux_ok_paranoid(chan) \
+ assert_circuit_mux_okay(chan)
#else
-#define assert_active_circuits_ok_paranoid(conn)
+#define assert_cmux_ok_paranoid(chan)
#endif
-/** The total number of cells we have allocated from the memory pool. */
-static int total_cells_allocated = 0;
+/** The total number of cells we have allocated. */
+static size_t total_cells_allocated = 0;
+#ifdef ENABLE_MEMPOOLS
/** A memory pool to allocate packed_cell_t objects. */
static mp_pool_t *cell_pool = NULL;
-/** Memory pool to allocate insertion_time_elem_t objects used for cell
- * statistics. */
-static mp_pool_t *it_pool = NULL;
-
/** Allocate structures to hold cells. */
void
init_cell_pool(void)
@@ -1822,8 +2254,8 @@ init_cell_pool(void)
cell_pool = mp_pool_new(sizeof(packed_cell_t), 128*1024);
}
-/** Free all storage used to hold cells (and insertion times if we measure
- * cell statistics). */
+/** Free all storage used to hold cells (and insertion times/commands if we
+ * measure cell statistics and/or if CELL_STATS events are enabled). */
void
free_cell_pool(void)
{
@@ -1832,10 +2264,6 @@ free_cell_pool(void)
mp_pool_destroy(cell_pool);
cell_pool = NULL;
}
- if (it_pool) {
- mp_pool_destroy(it_pool);
- it_pool = NULL;
- }
}
/** Free excess storage in cell pool. */
@@ -1846,20 +2274,47 @@ clean_cell_pool(void)
mp_pool_clean(cell_pool, 0, 1);
}
+#define relay_alloc_cell() \
+ mp_pool_get(cell_pool)
+#define relay_free_cell(cell) \
+ mp_pool_release(cell)
+
+#define RELAY_CELL_MEM_COST (sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD)
+
+#else /* !ENABLE_MEMPOOLS case */
+
+#define relay_alloc_cell() \
+ tor_malloc_zero(sizeof(packed_cell_t))
+#define relay_free_cell(cell) \
+ tor_free(cell)
+
+#define RELAY_CELL_MEM_COST (sizeof(packed_cell_t))
+
+#endif /* ENABLE_MEMPOOLS */
+
/** Release storage held by <b>cell</b>. */
static INLINE void
packed_cell_free_unchecked(packed_cell_t *cell)
{
--total_cells_allocated;
- mp_pool_release(cell);
+ relay_free_cell(cell);
}
/** Allocate and return a new packed_cell_t. */
-static INLINE packed_cell_t *
-packed_cell_alloc(void)
+STATIC packed_cell_t *
+packed_cell_new(void)
{
++total_cells_allocated;
- return mp_pool_get(cell_pool);
+ return relay_alloc_cell();
+}
+
+/** Return a packed cell used outside by channel_t lower layer */
+void
+packed_cell_free(packed_cell_t *cell)
+{
+ if (!cell)
+ return;
+ packed_cell_free_unchecked(cell);
}
/** Log current statistics for cell pool allocation at log level
@@ -1870,24 +2325,26 @@ dump_cell_pool_usage(int severity)
circuit_t *c;
int n_circs = 0;
int n_cells = 0;
- for (c = _circuit_get_global_list(); c; c = c->next) {
- n_cells += c->n_conn_cells.n;
+ TOR_LIST_FOREACH(c, circuit_get_global_list(), head) {
+ n_cells += c->n_chan_cells.n;
if (!CIRCUIT_IS_ORIGIN(c))
- n_cells += TO_OR_CIRCUIT(c)->p_conn_cells.n;
+ n_cells += TO_OR_CIRCUIT(c)->p_chan_cells.n;
++n_circs;
}
- log(severity, LD_MM, "%d cells allocated on %d circuits. %d cells leaked.",
- n_cells, n_circs, total_cells_allocated - n_cells);
+ tor_log(severity, LD_MM,
+ "%d cells allocated on %d circuits. %d cells leaked.",
+ n_cells, n_circs, (int)total_cells_allocated - n_cells);
+#ifdef ENABLE_MEMPOOLS
mp_pool_log_status(cell_pool, severity);
+#endif
}
/** Allocate a new copy of packed <b>cell</b>. */
static INLINE packed_cell_t *
-packed_cell_copy(const cell_t *cell)
+packed_cell_copy(const cell_t *cell, int wide_circ_ids)
{
- packed_cell_t *c = packed_cell_alloc();
- cell_pack(c, cell);
- c->next = NULL;
+ packed_cell_t *c = packed_cell_new();
+ cell_pack(c, cell, wide_circ_ids);
return c;
}
@@ -1895,452 +2352,160 @@ packed_cell_copy(const cell_t *cell)
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;
}
-/** Append a newly allocated copy of <b>cell</b> to the end of <b>queue</b> */
+/** Append a newly allocated copy of <b>cell</b> to the end of the
+ * <b>exitward</b> (or app-ward) <b>queue</b> of <b>circ</b>. If
+ * <b>use_stats</b> is true, record statistics about the cell.
+ */
void
-cell_queue_append_packed_copy(cell_queue_t *queue, const cell_t *cell)
+cell_queue_append_packed_copy(circuit_t *circ, cell_queue_t *queue,
+ int exitward, const cell_t *cell,
+ int wide_circ_ids, int use_stats)
{
- packed_cell_t *copy = packed_cell_copy(cell);
- /* Remember the time when this cell was put in the queue. */
- if (get_options()->CellStatistics) {
- struct timeval now;
- uint32_t added;
- insertion_time_queue_t *it_queue = queue->insertion_times;
- if (!it_pool)
- it_pool = mp_pool_new(sizeof(insertion_time_elem_t), 1024);
- tor_gettimeofday_cached(&now);
-#define SECONDS_IN_A_DAY 86400L
- added = (uint32_t)(((now.tv_sec % SECONDS_IN_A_DAY) * 100L)
- + ((uint32_t)now.tv_usec / (uint32_t)10000L));
- if (!it_queue) {
- it_queue = tor_malloc_zero(sizeof(insertion_time_queue_t));
- queue->insertion_times = it_queue;
- }
- if (it_queue->last && it_queue->last->insertion_time == added) {
- it_queue->last->counter++;
- } else {
- insertion_time_elem_t *elem = mp_pool_get(it_pool);
- elem->next = NULL;
- elem->insertion_time = added;
- elem->counter = 1;
- if (it_queue->last) {
- it_queue->last->next = elem;
- it_queue->last = elem;
- } else {
- it_queue->first = it_queue->last = elem;
- }
- }
- }
+ struct timeval now;
+ packed_cell_t *copy = packed_cell_copy(cell, wide_circ_ids);
+ (void)circ;
+ (void)exitward;
+ (void)use_stats;
+ tor_gettimeofday_cached_monotonic(&now);
+
+ copy->inserted_time = (uint32_t)tv_to_msec(&now);
+
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) {
- insertion_time_elem_t *elem = queue->insertion_times->first;
- queue->insertion_times->first = elem->next;
- mp_pool_release(elem);
- }
- tor_free(queue->insertion_times);
- }
}
/** 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;
}
-/** Return a pointer to the "next_active_on_{n,p}_conn" pointer of <b>circ</b>,
- * depending on whether <b>conn</b> matches n_conn or p_conn. */
-static INLINE circuit_t **
-next_circ_on_conn_p(circuit_t *circ, or_connection_t *conn)
+/** Return the total number of bytes used for each packed_cell in a queue.
+ * Approximate. */
+size_t
+packed_cell_mem_cost(void)
{
- tor_assert(circ);
- tor_assert(conn);
- if (conn == circ->n_conn) {
- return &circ->next_active_on_n_conn;
- } else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- return &orcirc->next_active_on_p_conn;
- }
+ return RELAY_CELL_MEM_COST;
}
-/** Return a pointer to the "prev_active_on_{n,p}_conn" pointer of <b>circ</b>,
- * depending on whether <b>conn</b> matches n_conn or p_conn. */
-static INLINE circuit_t **
-prev_circ_on_conn_p(circuit_t *circ, or_connection_t *conn)
+/** DOCDOC */
+STATIC size_t
+cell_queues_get_total_allocation(void)
{
- tor_assert(circ);
- tor_assert(conn);
- if (conn == circ->n_conn) {
- return &circ->prev_active_on_n_conn;
- } else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- return &orcirc->prev_active_on_p_conn;
- }
+ return total_cells_allocated * packed_cell_mem_cost();
}
-/** Helper for sorting cell_ewma_t values in their priority queue. */
-static int
-compare_cell_ewma_counts(const void *p1, const void *p2)
+/** Check whether we've got too much space used for cells. If so,
+ * call the OOM handler and return 1. Otherwise, return 0. */
+STATIC int
+cell_queues_check_size(void)
{
- const cell_ewma_t *e1=p1, *e2=p2;
- if (e1->cell_count < e2->cell_count)
- return -1;
- else if (e1->cell_count > e2->cell_count)
+ size_t alloc = cell_queues_get_total_allocation();
+ alloc += buf_get_total_allocation();
+ if (alloc >= get_options()->MaxMemInQueues) {
+ circuits_handle_oom(alloc);
return 1;
- else
- return 0;
-}
-
-/** Given a cell_ewma_t, return a pointer to the circuit containing it. */
-static circuit_t *
-cell_ewma_to_circuit(cell_ewma_t *ewma)
-{
- if (ewma->is_for_p_conn) {
- /* This is an or_circuit_t's p_cell_ewma. */
- or_circuit_t *orcirc = SUBTYPE_P(ewma, or_circuit_t, p_cell_ewma);
- return TO_CIRCUIT(orcirc);
- } else {
- /* This is some circuit's n_cell_ewma. */
- return SUBTYPE_P(ewma, circuit_t, n_cell_ewma);
}
+ return 0;
}
-/* ==== Functions for scaling cell_ewma_t ====
-
- When choosing which cells to relay first, we favor circuits that have been
- quiet recently. This gives better latency on connections that aren't
- pushing lots of data, and makes the network feel more interactive.
-
- Conceptually, we take an exponentially weighted mean average of the number
- of cells a circuit has sent, and allow active circuits (those with cells to
- relay) to send cells in reverse order of their exponentially-weighted mean
- average (EWMA) cell count. [That is, a cell sent N seconds ago 'counts'
- F^N times as much as a cell sent now, for 0<F<1.0, and we favor the
- circuit that has sent the fewest cells]
-
- If 'double' had infinite precision, we could do this simply by counting a
- cell sent at startup as having weight 1.0, and a cell sent N seconds later
- as having weight F^-N. This way, we would never need to re-scale
- any already-sent cells.
-
- To prevent double from overflowing, we could count a cell sent now as
- having weight 1.0 and a cell sent N seconds ago as having weight F^N.
- This, however, would mean we'd need to re-scale *ALL* old circuits every
- time we wanted to send a cell.
-
- So as a compromise, we divide time into 'ticks' (currently, 10-second
- increments) and say that a cell sent at the start of a current tick is
- worth 1.0, a cell sent N seconds before the start of the current tick is
- worth F^N, and a cell sent N seconds after the start of the current tick is
- worth F^-N. This way we don't overflow, and we don't need to constantly
- rescale.
- */
-
-/** How long does a tick last (seconds)? */
-#define EWMA_TICK_LEN 10
-
-/** The default per-tick scale factor, if it hasn't been overridden by a
- * consensus or a configuration setting. zero means "disabled". */
-#define EWMA_DEFAULT_HALFLIFE 0.0
-
-/** Given a timeval <b>now</b>, compute the cell_ewma tick in which it occurs
- * and the fraction of the tick that has elapsed between the start of the tick
- * and <b>now</b>. Return the former and store the latter in
- * *<b>remainder_out</b>.
- *
- * These tick values are not meant to be shared between Tor instances, or used
- * for other purposes. */
-static unsigned
-cell_ewma_tick_from_timeval(const struct timeval *now,
- double *remainder_out)
-{
- unsigned res = (unsigned) (now->tv_sec / EWMA_TICK_LEN);
- /* rem */
- double rem = (now->tv_sec % EWMA_TICK_LEN) +
- ((double)(now->tv_usec)) / 1.0e6;
- *remainder_out = rem / EWMA_TICK_LEN;
- return res;
-}
-
-/** Compute and return the current cell_ewma tick. */
-unsigned
-cell_ewma_get_tick(void)
-{
- return ((unsigned)approx_time() / EWMA_TICK_LEN);
-}
-
-/** The per-tick scale factor to be used when computing cell-count EWMA
- * values. (A cell sent N ticks before the start of the current tick
- * has value ewma_scale_factor ** N.)
+/**
+ * Update the number of cells available on the circuit's n_chan or p_chan's
+ * circuit mux.
*/
-static double ewma_scale_factor = 0.1;
-/* DOCDOC ewma_enabled */
-static int ewma_enabled = 0;
-
-/*DOCDOC*/
-#define EPSILON 0.00001
-/*DOCDOC*/
-#define LOG_ONEHALF -0.69314718055994529
-
-/** Adjust the global cell scale factor based on <b>options</b> */
-void
-cell_ewma_set_scale_factor(const or_options_t *options,
- const networkstatus_t *consensus)
-{
- int32_t halflife_ms;
- double halflife;
- const char *source;
- if (options && options->CircuitPriorityHalflife >= -EPSILON) {
- halflife = options->CircuitPriorityHalflife;
- source = "CircuitPriorityHalflife in configuration";
- } else if (consensus && (halflife_ms = networkstatus_get_param(
- consensus, "CircuitPriorityHalflifeMsec",
- -1, -1, INT32_MAX)) >= 0) {
- halflife = ((double)halflife_ms)/1000.0;
- source = "CircuitPriorityHalflifeMsec in consensus";
- } else {
- halflife = EWMA_DEFAULT_HALFLIFE;
- source = "Default value";
- }
-
- if (halflife <= EPSILON) {
- /* The cell EWMA algorithm is disabled. */
- ewma_scale_factor = 0.1;
- ewma_enabled = 0;
- log_info(LD_OR,
- "Disabled cell_ewma algorithm because of value in %s",
- source);
- } else {
- /* convert halflife into halflife-per-tick. */
- halflife /= EWMA_TICK_LEN;
- /* compute per-tick scale factor. */
- ewma_scale_factor = exp( LOG_ONEHALF / halflife );
- ewma_enabled = 1;
- log_info(LD_OR,
- "Enabled cell_ewma algorithm because of value in %s; "
- "scale factor is %f per %d seconds",
- source, ewma_scale_factor, EWMA_TICK_LEN);
- }
-}
-
-/** Return the multiplier necessary to convert the value of a cell sent in
- * 'from_tick' to one sent in 'to_tick'. */
-static INLINE double
-get_scale_factor(unsigned from_tick, unsigned to_tick)
-{
- /* This math can wrap around, but that's okay: unsigned overflow is
- well-defined */
- int diff = (int)(to_tick - from_tick);
- return pow(ewma_scale_factor, diff);
-}
-
-/** Adjust the cell count of <b>ewma</b> so that it is scaled with respect to
- * <b>cur_tick</b> */
-static void
-scale_single_cell_ewma(cell_ewma_t *ewma, unsigned cur_tick)
-{
- double factor = get_scale_factor(ewma->last_adjusted_tick, cur_tick);
- ewma->cell_count *= factor;
- ewma->last_adjusted_tick = cur_tick;
-}
-
-/** Adjust the cell count of every active circuit on <b>conn</b> so
- * that they are scaled with respect to <b>cur_tick</b> */
-static void
-scale_active_circuits(or_connection_t *conn, unsigned cur_tick)
-{
-
- double factor = get_scale_factor(
- conn->active_circuit_pqueue_last_recalibrated,
- cur_tick);
- /** Ordinarily it isn't okay to change the value of an element in a heap,
- * but it's okay here, since we are preserving the order. */
- SMARTLIST_FOREACH(conn->active_circuit_pqueue, cell_ewma_t *, e, {
- tor_assert(e->last_adjusted_tick ==
- conn->active_circuit_pqueue_last_recalibrated);
- e->cell_count *= factor;
- e->last_adjusted_tick = cur_tick;
- });
- conn->active_circuit_pqueue_last_recalibrated = cur_tick;
-}
-
-/** Rescale <b>ewma</b> to the same scale as <b>conn</b>, and add it to
- * <b>conn</b>'s priority queue of active circuits */
-static void
-add_cell_ewma_to_conn(or_connection_t *conn, cell_ewma_t *ewma)
-{
- tor_assert(ewma->heap_index == -1);
- scale_single_cell_ewma(ewma,
- conn->active_circuit_pqueue_last_recalibrated);
-
- smartlist_pqueue_add(conn->active_circuit_pqueue,
- compare_cell_ewma_counts,
- STRUCT_OFFSET(cell_ewma_t, heap_index),
- ewma);
-}
-
-/** Remove <b>ewma</b> from <b>conn</b>'s priority queue of active circuits */
-static void
-remove_cell_ewma_from_conn(or_connection_t *conn, cell_ewma_t *ewma)
-{
- tor_assert(ewma->heap_index != -1);
- smartlist_pqueue_remove(conn->active_circuit_pqueue,
- compare_cell_ewma_counts,
- STRUCT_OFFSET(cell_ewma_t, heap_index),
- ewma);
-}
-
-/** Remove and return the first cell_ewma_t from conn's priority queue of
- * active circuits. Requires that the priority queue is nonempty. */
-static cell_ewma_t *
-pop_first_cell_ewma_from_conn(or_connection_t *conn)
-{
- return smartlist_pqueue_pop(conn->active_circuit_pqueue,
- compare_cell_ewma_counts,
- STRUCT_OFFSET(cell_ewma_t, heap_index));
-}
-
-/** Add <b>circ</b> to the list of circuits with pending cells on
- * <b>conn</b>. No effect if <b>circ</b> is already linked. */
void
-make_circuit_active_on_conn(circuit_t *circ, or_connection_t *conn)
+update_circuit_on_cmux_(circuit_t *circ, cell_direction_t direction,
+ const char *file, int lineno)
{
- circuit_t **nextp = next_circ_on_conn_p(circ, conn);
- circuit_t **prevp = prev_circ_on_conn_p(circ, conn);
+ channel_t *chan = NULL;
+ or_circuit_t *or_circ = NULL;
+ circuitmux_t *cmux = NULL;
- if (*nextp && *prevp) {
- /* Already active. */
- return;
- }
-
- assert_active_circuits_ok_paranoid(conn);
-
- if (! conn->active_circuits) {
- conn->active_circuits = circ;
- *prevp = *nextp = circ;
- } else {
- circuit_t *head = conn->active_circuits;
- circuit_t *old_tail = *prev_circ_on_conn_p(head, conn);
- *next_circ_on_conn_p(old_tail, conn) = circ;
- *nextp = head;
- *prev_circ_on_conn_p(head, conn) = circ;
- *prevp = old_tail;
- }
+ tor_assert(circ);
- if (circ->n_conn == conn) {
- add_cell_ewma_to_conn(conn, &circ->n_cell_ewma);
+ /* Okay, get the channel */
+ if (direction == CELL_DIRECTION_OUT) {
+ chan = circ->n_chan;
} else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- add_cell_ewma_to_conn(conn, &orcirc->p_cell_ewma);
+ or_circ = TO_OR_CIRCUIT(circ);
+ chan = or_circ->p_chan;
}
- assert_active_circuits_ok_paranoid(conn);
-}
+ tor_assert(chan);
+ tor_assert(chan->cmux);
-/** Remove <b>circ</b> from the list of circuits with pending cells on
- * <b>conn</b>. No effect if <b>circ</b> is already unlinked. */
-void
-make_circuit_inactive_on_conn(circuit_t *circ, or_connection_t *conn)
-{
- circuit_t **nextp = next_circ_on_conn_p(circ, conn);
- circuit_t **prevp = prev_circ_on_conn_p(circ, conn);
- circuit_t *next = *nextp, *prev = *prevp;
+ /* Now get the cmux */
+ cmux = chan->cmux;
- if (!next && !prev) {
- /* Already inactive. */
+ /* Cmux sanity check */
+ if (! circuitmux_is_circuit_attached(cmux, circ)) {
+ log_warn(LD_BUG, "called on non-attachd circuit from %s:%d",
+ file, lineno);
return;
}
+ tor_assert(circuitmux_attached_circuit_direction(cmux, circ) == direction);
- assert_active_circuits_ok_paranoid(conn);
-
- tor_assert(next && prev);
- tor_assert(*prev_circ_on_conn_p(next, conn) == circ);
- tor_assert(*next_circ_on_conn_p(prev, conn) == circ);
+ assert_cmux_ok_paranoid(chan);
- if (next == circ) {
- conn->active_circuits = NULL;
- } else {
- *prev_circ_on_conn_p(next, conn) = prev;
- *next_circ_on_conn_p(prev, conn) = next;
- if (conn->active_circuits == circ)
- conn->active_circuits = next;
- }
- *prevp = *nextp = NULL;
-
- if (circ->n_conn == conn) {
- remove_cell_ewma_from_conn(conn, &circ->n_cell_ewma);
+ /* Update the number of cells we have for the circuit mux */
+ if (direction == CELL_DIRECTION_OUT) {
+ circuitmux_set_num_cells(cmux, circ, circ->n_chan_cells.n);
} else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(conn == orcirc->p_conn);
- remove_cell_ewma_from_conn(conn, &orcirc->p_cell_ewma);
+ circuitmux_set_num_cells(cmux, circ, or_circ->p_chan_cells.n);
}
- assert_active_circuits_ok_paranoid(conn);
+ assert_cmux_ok_paranoid(chan);
}
-/** Remove all circuits from the list of circuits with pending cells on
- * <b>conn</b>. */
+/** Remove all circuits from the cmux on <b>chan</b>.
+ *
+ * If <b>circuits_out</b> is non-NULL, add all detached circuits to
+ * <b>circuits_out</b>.
+ **/
void
-connection_or_unlink_all_active_circs(or_connection_t *orconn)
+channel_unlink_all_circuits(channel_t *chan, smartlist_t *circuits_out)
{
- circuit_t *head = orconn->active_circuits;
- circuit_t *cur = head;
- if (! head)
- return;
- do {
- circuit_t *next = *next_circ_on_conn_p(cur, orconn);
- *prev_circ_on_conn_p(cur, orconn) = NULL;
- *next_circ_on_conn_p(cur, orconn) = NULL;
- cur = next;
- } while (cur != head);
- orconn->active_circuits = NULL;
-
- SMARTLIST_FOREACH(orconn->active_circuit_pqueue, cell_ewma_t *, e,
- e->heap_index = -1);
- smartlist_clear(orconn->active_circuit_pqueue);
+ tor_assert(chan);
+ tor_assert(chan->cmux);
+
+ circuitmux_detach_all_circuits(chan->cmux, circuits_out);
+ chan->num_n_circuits = 0;
+ chan->num_p_circuits = 0;
}
/** Block (if <b>block</b> is true) or unblock (if <b>block</b> is false)
- * every edge connection that is using <b>circ</b> to write to <b>orconn</b>,
+ * every edge connection that is using <b>circ</b> to write to <b>chan</b>,
* and start or stop reading as appropriate.
*
* If <b>stream_id</b> is nonzero, block only the edge connection whose
@@ -2349,17 +2514,17 @@ connection_or_unlink_all_active_circs(or_connection_t *orconn)
* Returns the number of streams whose status we changed.
*/
static int
-set_streams_blocked_on_circ(circuit_t *circ, or_connection_t *orconn,
+set_streams_blocked_on_circ(circuit_t *circ, channel_t *chan,
int block, streamid_t stream_id)
{
edge_connection_t *edge = NULL;
int n = 0;
- if (circ->n_conn == orconn) {
- circ->streams_blocked_on_n_conn = block;
+ if (circ->n_chan == chan) {
+ circ->streams_blocked_on_n_chan = block;
if (CIRCUIT_IS_ORIGIN(circ))
edge = TO_ORIGIN_CIRCUIT(circ)->p_streams;
} else {
- circ->streams_blocked_on_p_conn = block;
+ circ->streams_blocked_on_p_chan = block;
tor_assert(!CIRCUIT_IS_ORIGIN(circ));
edge = TO_OR_CIRCUIT(circ)->n_streams;
}
@@ -2393,191 +2558,305 @@ set_streams_blocked_on_circ(circuit_t *circ, or_connection_t *orconn,
return n;
}
+/** Extract the command from a packed cell. */
+static uint8_t
+packed_cell_get_command(const packed_cell_t *cell, int wide_circ_ids)
+{
+ if (wide_circ_ids) {
+ return get_uint8(cell->body+4);
+ } else {
+ return get_uint8(cell->body+2);
+ }
+}
+
/** Pull as many cells as possible (but no more than <b>max</b>) from the
- * queue of the first active circuit on <b>conn</b>, and write them to
- * <b>conn</b>-&gt;outbuf. Return the number of cells written. Advance
+ * queue of the first active circuit on <b>chan</b>, and write them to
+ * <b>chan</b>-&gt;outbuf. Return the number of cells written. Advance
* the active circuit pointer to the next active circuit in the ring. */
int
-connection_or_flush_from_first_active_circuit(or_connection_t *conn, int max,
- time_t now)
+channel_flush_from_first_active_circuit(channel_t *chan, int max)
{
- int n_flushed;
- cell_queue_t *queue;
+ circuitmux_t *cmux = NULL;
+ int n_flushed = 0;
+ cell_queue_t *queue, *destroy_queue=NULL;
circuit_t *circ;
+ or_circuit_t *or_circ;
int streams_blocked;
-
- /* The current (hi-res) time */
- struct timeval now_hires;
-
- /* The EWMA cell counter for the circuit we're flushing. */
- cell_ewma_t *cell_ewma = NULL;
- double ewma_increment = -1;
-
- circ = conn->active_circuits;
- if (!circ) return 0;
- assert_active_circuits_ok_paranoid(conn);
-
- /* See if we're doing the ewma circuit selection algorithm. */
- if (ewma_enabled) {
- unsigned tick;
- double fractional_tick;
- tor_gettimeofday_cached(&now_hires);
- tick = cell_ewma_tick_from_timeval(&now_hires, &fractional_tick);
-
- if (tick != conn->active_circuit_pqueue_last_recalibrated) {
- scale_active_circuits(conn, tick);
+ packed_cell_t *cell;
+
+ /* Get the cmux */
+ tor_assert(chan);
+ tor_assert(chan->cmux);
+ cmux = chan->cmux;
+
+ /* Main loop: pick a circuit, send a cell, update the cmux */
+ while (n_flushed < max) {
+ circ = circuitmux_get_first_active_circuit(cmux, &destroy_queue);
+ if (destroy_queue) {
+ /* this code is duplicated from some of the logic below. Ugly! XXXX */
+ tor_assert(destroy_queue->n > 0);
+ cell = cell_queue_pop(destroy_queue);
+ channel_write_packed_cell(chan, cell);
+ /* Update the cmux destroy counter */
+ circuitmux_notify_xmit_destroy(cmux);
+ cell = NULL;
+ ++n_flushed;
+ continue;
}
+ /* If it returns NULL, no cells left to send */
+ if (!circ) break;
+ assert_cmux_ok_paranoid(chan);
- ewma_increment = pow(ewma_scale_factor, -fractional_tick);
-
- cell_ewma = smartlist_get(conn->active_circuit_pqueue, 0);
- circ = cell_ewma_to_circuit(cell_ewma);
- }
+ if (circ->n_chan == chan) {
+ queue = &circ->n_chan_cells;
+ streams_blocked = circ->streams_blocked_on_n_chan;
+ } else {
+ or_circ = TO_OR_CIRCUIT(circ);
+ tor_assert(or_circ->p_chan == chan);
+ queue = &TO_OR_CIRCUIT(circ)->p_chan_cells;
+ streams_blocked = circ->streams_blocked_on_p_chan;
+ }
- if (circ->n_conn == conn) {
- queue = &circ->n_conn_cells;
- streams_blocked = circ->streams_blocked_on_n_conn;
- } else {
- queue = &TO_OR_CIRCUIT(circ)->p_conn_cells;
- streams_blocked = circ->streams_blocked_on_p_conn;
- }
- tor_assert(*next_circ_on_conn_p(circ,conn));
+ /* Circuitmux told us this was active, so it should have cells */
+ tor_assert(queue->n > 0);
- for (n_flushed = 0; n_flushed < max && queue->head; ) {
- packed_cell_t *cell = cell_queue_pop(queue);
- tor_assert(*next_circ_on_conn_p(circ,conn));
+ /*
+ * Get just one cell here; once we've sent it, that can change the circuit
+ * selection, so we have to loop around for another even if this circuit
+ * has more than one.
+ */
+ cell = cell_queue_pop(queue);
/* Calculate the exact time that this cell has spent in the queue. */
- if (get_options()->CellStatistics && !CIRCUIT_IS_ORIGIN(circ)) {
+ if (get_options()->CellStatistics ||
+ get_options()->TestingEnableCellStatsEvent) {
+ uint32_t msec_waiting;
struct timeval tvnow;
- uint32_t flushed;
- uint32_t cell_waiting_time;
- insertion_time_queue_t *it_queue = queue->insertion_times;
tor_gettimeofday_cached(&tvnow);
- flushed = (uint32_t)((tvnow.tv_sec % SECONDS_IN_A_DAY) * 100L +
- (uint32_t)tvnow.tv_usec / (uint32_t)10000L);
- if (!it_queue || !it_queue->first) {
- log_info(LD_GENERAL, "Cannot determine insertion time of cell. "
- "Looks like the CellStatistics option was "
- "recently enabled.");
- } else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- insertion_time_elem_t *elem = it_queue->first;
- cell_waiting_time =
- (uint32_t)((flushed * 10L + SECONDS_IN_A_DAY * 1000L -
- elem->insertion_time * 10L) %
- (SECONDS_IN_A_DAY * 1000L));
-#undef SECONDS_IN_A_DAY
- elem->counter--;
- if (elem->counter < 1) {
- it_queue->first = elem->next;
- if (elem == it_queue->last)
- it_queue->last = NULL;
- mp_pool_release(elem);
- }
- orcirc->total_cell_waiting_time += cell_waiting_time;
- orcirc->processed_cells++;
+ msec_waiting = ((uint32_t)tv_to_msec(&tvnow)) - cell->inserted_time;
+
+ if (get_options()->CellStatistics && !CIRCUIT_IS_ORIGIN(circ)) {
+ or_circ = TO_OR_CIRCUIT(circ);
+ or_circ->total_cell_waiting_time += msec_waiting;
+ or_circ->processed_cells++;
+ }
+
+ if (get_options()->TestingEnableCellStatsEvent) {
+ uint8_t command = packed_cell_get_command(cell, chan->wide_circ_ids);
+
+ testing_cell_stats_entry_t *ent =
+ tor_malloc_zero(sizeof(testing_cell_stats_entry_t));
+ ent->command = command;
+ ent->waiting_time = msec_waiting / 10;
+ ent->removed = 1;
+ if (circ->n_chan == chan)
+ ent->exitward = 1;
+ if (!circ->testing_cell_stats)
+ circ->testing_cell_stats = smartlist_new();
+ smartlist_add(circ->testing_cell_stats, ent);
}
}
/* If we just flushed our queue and this circuit is used for a
* tunneled directory request, possibly advance its state. */
- if (queue->n == 0 && TO_CONN(conn)->dirreq_id)
- geoip_change_dirreq_state(TO_CONN(conn)->dirreq_id,
+ if (queue->n == 0 && chan->dirreq_id)
+ geoip_change_dirreq_state(chan->dirreq_id,
DIRREQ_TUNNELED,
DIRREQ_CIRC_QUEUE_FLUSHED);
- connection_write_to_buf(cell->body, CELL_NETWORK_SIZE, TO_CONN(conn));
+ /* Now send the cell */
+ channel_write_packed_cell(chan, cell);
+ cell = NULL;
- packed_cell_free_unchecked(cell);
+ /*
+ * Don't packed_cell_free_unchecked(cell) here because the channel will
+ * do so when it gets out of the channel queue (probably already did, in
+ * which case that was an immediate double-free bug).
+ */
+
+ /* Update the counter */
++n_flushed;
- if (cell_ewma) {
- cell_ewma_t *tmp;
- cell_ewma->cell_count += ewma_increment;
- /* We pop and re-add the cell_ewma_t here, not above, since we need to
- * re-add it immediately to keep the priority queue consistent with
- * the linked-list implementation */
- tmp = pop_first_cell_ewma_from_conn(conn);
- tor_assert(tmp == cell_ewma);
- add_cell_ewma_to_conn(conn, cell_ewma);
- }
- if (!ewma_enabled && circ != conn->active_circuits) {
- /* If this happens, the current circuit just got made inactive by
- * a call in connection_write_to_buf(). That's nothing to worry about:
- * circuit_make_inactive_on_conn() already advanced conn->active_circuits
- * for us.
- */
- assert_active_circuits_ok_paranoid(conn);
- goto done;
- }
- }
- tor_assert(*next_circ_on_conn_p(circ,conn));
- assert_active_circuits_ok_paranoid(conn);
- conn->active_circuits = *next_circ_on_conn_p(circ, conn);
- /* Is the cell queue low enough to unblock all the streams that are waiting
- * to write to this circuit? */
- if (streams_blocked && queue->n <= CELL_QUEUE_LOWWATER_SIZE)
- set_streams_blocked_on_circ(circ, conn, 0, 0); /* unblock streams */
+ /*
+ * Now update the cmux; tell it we've just sent a cell, and how many
+ * we have left.
+ */
+ circuitmux_notify_xmit_cells(cmux, circ, 1);
+ circuitmux_set_num_cells(cmux, circ, queue->n);
+ if (queue->n == 0)
+ log_debug(LD_GENERAL, "Made a circuit inactive.");
+
+ /* Is the cell queue low enough to unblock all the streams that are waiting
+ * to write to this circuit? */
+ if (streams_blocked && queue->n <= CELL_QUEUE_LOWWATER_SIZE)
+ set_streams_blocked_on_circ(circ, chan, 0, 0); /* unblock streams */
- /* Did we just run out of cells on this circuit's queue? */
- if (queue->n == 0) {
- log_debug(LD_GENERAL, "Made a circuit inactive.");
- make_circuit_inactive_on_conn(circ, conn);
+ /* If n_flushed < max still, loop around and pick another circuit */
}
- done:
- if (n_flushed)
- conn->timestamp_last_added_nonpadding = now;
+
+ /* Okay, we're done sending now */
+ assert_cmux_ok_paranoid(chan);
+
return n_flushed;
}
-/** Add <b>cell</b> to the queue of <b>circ</b> writing to <b>orconn</b>
+#if 0
+/** Indicate the current preferred cap for middle circuits; zero disables
+ * the cap. Right now it's just a constant, ORCIRC_MAX_MIDDLE_CELLS, but
+ * the logic in append_cell_to_circuit_queue() is written to be correct
+ * if we want to base it on a consensus param or something that might change
+ * in the future.
+ */
+static int
+get_max_middle_cells(void)
+{
+ return ORCIRC_MAX_MIDDLE_CELLS;
+}
+#endif
+
+/** Add <b>cell</b> to the queue of <b>circ</b> writing to <b>chan</b>
* transmitting in <b>direction</b>. */
void
-append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn,
+append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan,
cell_t *cell, cell_direction_t direction,
streamid_t fromstream)
{
+ or_circuit_t *orcirc = NULL;
cell_queue_t *queue;
int streams_blocked;
+#if 0
+ uint32_t tgt_max_middle_cells, p_len, n_len, tmp, hard_max_middle_cells;
+#endif
+
+ int exitward;
if (circ->marked_for_close)
return;
- if (direction == CELL_DIRECTION_OUT) {
- queue = &circ->n_conn_cells;
- streams_blocked = circ->streams_blocked_on_n_conn;
+ exitward = (direction == CELL_DIRECTION_OUT);
+ if (exitward) {
+ queue = &circ->n_chan_cells;
+ streams_blocked = circ->streams_blocked_on_n_chan;
} else {
- or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- queue = &orcirc->p_conn_cells;
- streams_blocked = circ->streams_blocked_on_p_conn;
+ orcirc = TO_OR_CIRCUIT(circ);
+ queue = &orcirc->p_chan_cells;
+ streams_blocked = circ->streams_blocked_on_p_chan;
}
- cell_queue_append_packed_copy(queue, cell);
+ /*
+ * Disabling this for now because of a possible guard discovery attack
+ */
+#if 0
+ /* Are we a middle circuit about to exceed ORCIRC_MAX_MIDDLE_CELLS? */
+ if ((circ->n_chan != NULL) && CIRCUIT_IS_ORCIRC(circ)) {
+ orcirc = TO_OR_CIRCUIT(circ);
+ if (orcirc->p_chan) {
+ /* We are a middle circuit if we have both n_chan and p_chan */
+ /* We'll need to know the current preferred maximum */
+ tgt_max_middle_cells = get_max_middle_cells();
+ if (tgt_max_middle_cells > 0) {
+ /* Do we need to initialize middle_max_cells? */
+ if (orcirc->max_middle_cells == 0) {
+ orcirc->max_middle_cells = tgt_max_middle_cells;
+ } else {
+ if (tgt_max_middle_cells > orcirc->max_middle_cells) {
+ /* If we want to increase the cap, we can do so right away */
+ orcirc->max_middle_cells = tgt_max_middle_cells;
+ } else if (tgt_max_middle_cells < orcirc->max_middle_cells) {
+ /*
+ * If we're shrinking the cap, we can't shrink past either queue;
+ * compare tgt_max_middle_cells rather than tgt_max_middle_cells *
+ * ORCIRC_MAX_MIDDLE_KILL_THRESH so the queues don't shrink enough
+ * to generate spurious warnings, either.
+ */
+ n_len = circ->n_chan_cells.n;
+ p_len = orcirc->p_chan_cells.n;
+ tmp = tgt_max_middle_cells;
+ if (tmp < n_len) tmp = n_len;
+ if (tmp < p_len) tmp = p_len;
+ orcirc->max_middle_cells = tmp;
+ }
+ /* else no change */
+ }
+ } else {
+ /* tgt_max_middle_cells == 0 indicates we should disable the cap */
+ orcirc->max_middle_cells = 0;
+ }
+
+ /* Now we know orcirc->max_middle_cells is set correctly */
+ if (orcirc->max_middle_cells > 0) {
+ hard_max_middle_cells =
+ (uint32_t)(((double)orcirc->max_middle_cells) *
+ ORCIRC_MAX_MIDDLE_KILL_THRESH);
+
+ if ((unsigned)queue->n + 1 >= hard_max_middle_cells) {
+ /* Queueing this cell would put queue over the kill theshold */
+ log_warn(LD_CIRC,
+ "Got a cell exceeding the hard cap of %u in the "
+ "%s direction on middle circ ID %u on chan ID "
+ U64_FORMAT "; killing the circuit.",
+ hard_max_middle_cells,
+ (direction == CELL_DIRECTION_OUT) ? "n" : "p",
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_circ_id : orcirc->p_circ_id,
+ U64_PRINTF_ARG(
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_chan->global_identifier :
+ orcirc->p_chan->global_identifier));
+ circuit_mark_for_close(circ, END_CIRC_REASON_RESOURCELIMIT);
+ return;
+ } else if ((unsigned)queue->n + 1 == orcirc->max_middle_cells) {
+ /* Only use ==, not >= for this test so we don't spam the log */
+ log_warn(LD_CIRC,
+ "While trying to queue a cell, reached the soft cap of %u "
+ "in the %s direction on middle circ ID %u "
+ "on chan ID " U64_FORMAT ".",
+ orcirc->max_middle_cells,
+ (direction == CELL_DIRECTION_OUT) ? "n" : "p",
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_circ_id : orcirc->p_circ_id,
+ U64_PRINTF_ARG(
+ (direction == CELL_DIRECTION_OUT) ?
+ circ->n_chan->global_identifier :
+ orcirc->p_chan->global_identifier));
+ }
+ }
+ }
+ }
+#endif
+
+ cell_queue_append_packed_copy(circ, queue, exitward, cell,
+ chan->wide_circ_ids, 1);
+
+ if (PREDICT_UNLIKELY(cell_queues_check_size())) {
+ /* We ran the OOM handler */
+ if (circ->marked_for_close)
+ return;
+ }
/* If we have too many cells on the circuit, we should stop reading from
* the edge streams for a while. */
if (!streams_blocked && queue->n >= CELL_QUEUE_HIGHWATER_SIZE)
- set_streams_blocked_on_circ(circ, orconn, 1, 0); /* block streams */
+ set_streams_blocked_on_circ(circ, chan, 1, 0); /* block streams */
if (streams_blocked && fromstream) {
/* This edge connection is apparently not blocked; block it. */
- set_streams_blocked_on_circ(circ, orconn, 1, fromstream);
+ set_streams_blocked_on_circ(circ, chan, 1, fromstream);
}
+ update_circuit_on_cmux(circ, direction);
if (queue->n == 1) {
- /* This was the first cell added to the queue. We need to make this
+ /* This was the first cell added to the queue. We just made this
* circuit active. */
log_debug(LD_GENERAL, "Made a circuit active.");
- make_circuit_active_on_conn(circ, orconn);
}
- if (! connection_get_outbuf_len(TO_CONN(orconn))) {
+ if (!channel_has_queued_writes(chan)) {
/* There is no data at all waiting to be sent on the outbuf. Add a
* cell, so that we can notice when it gets flushed, flushed_some can
* get called, and we can start putting more data onto the buffer then.
*/
log_debug(LD_GENERAL, "Primed a buffer.");
- connection_or_flush_from_first_active_circuit(orconn, 1, approx_time());
+ channel_flush_from_first_active_circuit(chan, 1);
}
}
@@ -2641,58 +2920,40 @@ decode_address_from_payload(tor_addr_t *addr_out, const uint8_t *payload,
return payload + 2 + payload[1];
}
-/** Remove all the cells queued on <b>circ</b> for <b>orconn</b>. */
+/** Remove all the cells queued on <b>circ</b> for <b>chan</b>. */
void
-circuit_clear_cell_queue(circuit_t *circ, or_connection_t *orconn)
+circuit_clear_cell_queue(circuit_t *circ, channel_t *chan)
{
cell_queue_t *queue;
- if (circ->n_conn == orconn) {
- queue = &circ->n_conn_cells;
+ cell_direction_t direction;
+
+ if (circ->n_chan == chan) {
+ queue = &circ->n_chan_cells;
+ direction = CELL_DIRECTION_OUT;
} else {
or_circuit_t *orcirc = TO_OR_CIRCUIT(circ);
- tor_assert(orcirc->p_conn == orconn);
- queue = &orcirc->p_conn_cells;
+ tor_assert(orcirc->p_chan == chan);
+ queue = &orcirc->p_chan_cells;
+ direction = CELL_DIRECTION_IN;
}
- if (queue->n)
- make_circuit_inactive_on_conn(circ,orconn);
-
+ /* Clear the queue */
cell_queue_clear(queue);
+
+ /* Update the cell counter in the cmux */
+ if (chan->cmux && circuitmux_is_circuit_attached(chan->cmux, circ))
+ update_circuit_on_cmux(circ, direction);
}
-/** Fail with an assert if the active circuits ring on <b>orconn</b> is
- * corrupt. */
+/** Fail with an assert if the circuit mux on chan is corrupt
+ */
void
-assert_active_circuits_ok(or_connection_t *orconn)
+assert_circuit_mux_okay(channel_t *chan)
{
- circuit_t *head = orconn->active_circuits;
- circuit_t *cur = head;
- int n = 0;
- if (! head)
- return;
- do {
- circuit_t *next = *next_circ_on_conn_p(cur, orconn);
- circuit_t *prev = *prev_circ_on_conn_p(cur, orconn);
- cell_ewma_t *ewma;
- tor_assert(next);
- tor_assert(prev);
- tor_assert(*next_circ_on_conn_p(prev, orconn) == cur);
- tor_assert(*prev_circ_on_conn_p(next, orconn) == cur);
- if (orconn == cur->n_conn) {
- ewma = &cur->n_cell_ewma;
- tor_assert(!ewma->is_for_p_conn);
- } else {
- ewma = &TO_OR_CIRCUIT(cur)->p_cell_ewma;
- tor_assert(ewma->is_for_p_conn);
- }
- tor_assert(ewma->heap_index != -1);
- tor_assert(ewma == smartlist_get(orconn->active_circuit_pqueue,
- ewma->heap_index));
- n++;
- cur = next;
- } while (cur != head);
-
- tor_assert(n == smartlist_len(orconn->active_circuit_pqueue));
+ tor_assert(chan);
+ tor_assert(chan->cmux);
+
+ circuitmux_assert_okay(chan->cmux);
}
/** Return 1 if we shouldn't restart reading on this circuit, even if
@@ -2702,9 +2963,9 @@ static int
circuit_queue_streams_are_blocked(circuit_t *circ)
{
if (CIRCUIT_IS_ORIGIN(circ)) {
- return circ->streams_blocked_on_n_conn;
+ return circ->streams_blocked_on_n_chan;
} else {
- return circ->streams_blocked_on_p_conn;
+ return circ->streams_blocked_on_p_chan;
}
}
diff --git a/src/or/relay.h b/src/or/relay.h
index 41675e210..479d474b3 100644
--- a/src/or/relay.h
+++ b/src/or/relay.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for relay.c.
**/
-#ifndef _TOR_RELAY_H
-#define _TOR_RELAY_H
+#ifndef TOR_RELAY_H
+#define TOR_RELAY_H
extern uint64_t stats_n_relay_cells_relayed;
extern uint64_t stats_n_relay_cells_delivered;
@@ -20,9 +20,15 @@ int circuit_receive_relay_cell(cell_t *cell, circuit_t *circ,
void relay_header_pack(uint8_t *dest, const relay_header_t *src);
void relay_header_unpack(relay_header_t *dest, const uint8_t *src);
-int relay_send_command_from_edge(streamid_t stream_id, circuit_t *circ,
+int relay_send_command_from_edge_(streamid_t stream_id, circuit_t *circ,
uint8_t relay_command, const char *payload,
- size_t payload_len, crypt_path_t *cpath_layer);
+ size_t payload_len, crypt_path_t *cpath_layer,
+ const char *filename, int lineno);
+#define relay_send_command_from_edge(stream_id, circ, relay_command, payload, \
+ payload_len, cpath_layer) \
+ relay_send_command_from_edge_((stream_id), (circ), (relay_command), \
+ (payload), (payload_len), (cpath_layer), \
+ __FILE__, __LINE__)
int connection_edge_send_command(edge_connection_t *fromconn,
uint8_t relay_command, const char *payload,
size_t payload_len);
@@ -36,37 +42,65 @@ extern uint64_t stats_n_data_bytes_packaged;
extern uint64_t stats_n_data_cells_received;
extern uint64_t stats_n_data_bytes_received;
+#ifdef ENABLE_MEMPOOLS
void init_cell_pool(void);
void free_cell_pool(void);
void clean_cell_pool(void);
+#endif /* ENABLE_MEMPOOLS */
void dump_cell_pool_usage(int severity);
+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);
+void cell_queue_append_packed_copy(circuit_t *circ, cell_queue_t *queue,
+ int exitward, const cell_t *cell,
+ int wide_circ_ids, int use_stats);
-void append_cell_to_circuit_queue(circuit_t *circ, or_connection_t *orconn,
+void append_cell_to_circuit_queue(circuit_t *circ, channel_t *chan,
cell_t *cell, cell_direction_t direction,
streamid_t fromstream);
-void connection_or_unlink_all_active_circs(or_connection_t *conn);
-int connection_or_flush_from_first_active_circuit(or_connection_t *conn,
- int max, time_t now);
-void assert_active_circuits_ok(or_connection_t *orconn);
-void make_circuit_inactive_on_conn(circuit_t *circ, or_connection_t *conn);
-void make_circuit_active_on_conn(circuit_t *circ, or_connection_t *conn);
+void channel_unlink_all_circuits(channel_t *chan, smartlist_t *detached_out);
+int channel_flush_from_first_active_circuit(channel_t *chan, int max);
+void assert_circuit_mux_okay(channel_t *chan);
+void update_circuit_on_cmux_(circuit_t *circ, cell_direction_t direction,
+ const char *file, int lineno);
+#define update_circuit_on_cmux(circ, direction) \
+ update_circuit_on_cmux_((circ), (direction), SHORT_FILE__, __LINE__)
int append_address_to_payload(uint8_t *payload_out, const tor_addr_t *addr);
const uint8_t *decode_address_from_payload(tor_addr_t *addr_out,
const uint8_t *payload,
int payload_len);
-unsigned cell_ewma_get_tick(void);
-void cell_ewma_set_scale_factor(const or_options_t *options,
- const networkstatus_t *consensus);
-void circuit_clear_cell_queue(circuit_t *circ, or_connection_t *orconn);
+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);
+
+#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);
+/** An address-and-ttl tuple as yielded by resolved_cell_parse */
+typedef struct address_ttl_s {
+ tor_addr_t addr;
+ char *hostname;
+ int ttl;
+} address_ttl_t;
+STATIC void address_ttl_free(address_ttl_t *addr);
+STATIC int resolved_cell_parse(const cell_t *cell, const relay_header_t *rh,
+ smartlist_t *addresses_out, int *errcode_out);
+STATIC int connection_edge_process_resolved_cell(edge_connection_t *conn,
+ const cell_t *cell,
+ const relay_header_t *rh);
+STATIC packed_cell_t *packed_cell_new(void);
+STATIC packed_cell_t *cell_queue_pop(cell_queue_t *queue);
+STATIC size_t cell_queues_get_total_allocation(void);
+STATIC int cell_queues_check_size(void);
#endif
#endif
diff --git a/src/or/rendclient.c b/src/or/rendclient.c
index 3a0cd1a66..d42024010 100644
--- a/src/or/rendclient.c
+++ b/src/or/rendclient.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,6 +8,7 @@
**/
#include "or.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
@@ -16,6 +17,7 @@
#include "connection_edge.h"
#include "directory.h"
#include "main.h"
+#include "networkstatus.h"
#include "nodelist.h"
#include "relay.h"
#include "rendclient.h"
@@ -23,6 +25,8 @@
#include "rephist.h"
#include "router.h"
#include "routerlist.h"
+#include "routerset.h"
+#include "control.h"
static extend_info_t *rend_client_get_random_intro_impl(
const rend_cache_entry_t *rend_query,
@@ -43,7 +47,7 @@ rend_client_purge_state(void)
void
rend_client_introcirc_has_opened(origin_circuit_t *circ)
{
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
tor_assert(circ->cpath);
log_info(LD_REND,"introcirc is open");
@@ -56,7 +60,7 @@ rend_client_introcirc_has_opened(origin_circuit_t *circ)
static int
rend_client_send_establish_rendezvous(origin_circuit_t *circ)
{
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
tor_assert(circ->rend_data);
log_info(LD_REND, "Sending an ESTABLISH_RENDEZVOUS cell");
@@ -65,6 +69,14 @@ rend_client_send_establish_rendezvous(origin_circuit_t *circ)
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
return -1;
}
+
+ /* Set timestamp_dirty, because circuit_expire_building expects it,
+ * and the rend cookie also means we've used the circ. */
+ circ->base_.timestamp_dirty = time(NULL);
+
+ /* We've attempted to use this circuit. Probe it if we fail */
+ pathbias_count_use_attempt(circ);
+
if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
RELAY_COMMAND_ESTABLISH_RENDEZVOUS,
circ->rend_data->rend_cookie,
@@ -99,16 +111,17 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_INTERNAL);
return -1;
}
+ // XXX: should we not re-extend if hs_circ_has_timed_out?
if (circ->remaining_relay_early_cells) {
log_info(LD_REND,
- "Re-extending circ %d, this time to %s.",
- circ->_base.n_circ_id,
+ "Re-extending circ %u, this time to %s.",
+ (unsigned)circ->base_.n_circ_id,
safe_str_client(extend_info_describe(extend_info)));
result = circuit_extend_to_new_exit(circ, extend_info);
} else {
log_info(LD_REND,
- "Closing intro circ %d (out of RELAY_EARLY cells).",
- circ->_base.n_circ_id);
+ "Closing intro circ %u (out of RELAY_EARLY cells).",
+ (unsigned)circ->base_.n_circ_id);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
/* connection_ap_handshake_attach_circuit will launch a new intro circ. */
result = 0;
@@ -117,6 +130,16 @@ rend_client_reextend_intro_circuit(origin_circuit_t *circ)
return result;
}
+/** Return true iff we should send timestamps in our INTRODUCE1 cells */
+static int
+rend_client_should_send_timestamp(void)
+{
+ if (get_options()->Support022HiddenServices >= 0)
+ return get_options()->Support022HiddenServices;
+
+ return networkstatus_get_param(NULL, "Support022HiddenServices", 1, 0, 1);
+}
+
/** Called when we're trying to connect an ap conn; sends an INTRODUCE1 cell
* down introcirc if possible.
*/
@@ -132,9 +155,10 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
crypt_path_t *cpath;
off_t dh_offset;
crypto_pk_t *intro_key = NULL;
+ int status = 0;
- tor_assert(introcirc->_base.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
- tor_assert(rendcirc->_base.purpose == CIRCUIT_PURPOSE_C_REND_READY);
+ tor_assert(introcirc->base_.purpose == CIRCUIT_PURPOSE_C_INTRODUCING);
+ tor_assert(rendcirc->base_.purpose == CIRCUIT_PURPOSE_C_REND_READY);
tor_assert(introcirc->rend_data);
tor_assert(rendcirc->rend_data);
tor_assert(!rend_cmp_service_ids(introcirc->rend_data->onion_address,
@@ -161,7 +185,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
}
}
- return -1;
+ status = -1;
+ goto cleanup;
}
/* first 20 bytes of payload are the hash of Bob's pk */
@@ -184,13 +209,16 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
smartlist_len(entry->parsed->intro_nodes));
if (rend_client_reextend_intro_circuit(introcirc)) {
+ status = -2;
goto perm_err;
} else {
- return -1;
+ status = -1;
+ goto cleanup;
}
}
if (crypto_pk_get_digest(intro_key, payload)<0) {
log_warn(LD_BUG, "Internal error: couldn't hash public key.");
+ status = -2;
goto perm_err;
}
@@ -200,12 +228,14 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
cpath = rendcirc->build_state->pending_final_cpath =
tor_malloc_zero(sizeof(crypt_path_t));
cpath->magic = CRYPT_PATH_MAGIC;
- if (!(cpath->dh_handshake_state = crypto_dh_new(DH_TYPE_REND))) {
+ if (!(cpath->rend_dh_handshake_state = crypto_dh_new(DH_TYPE_REND))) {
log_warn(LD_BUG, "Internal error: couldn't allocate DH.");
+ status = -2;
goto perm_err;
}
- if (crypto_dh_generate_public(cpath->dh_handshake_state)<0) {
+ if (crypto_dh_generate_public(cpath->rend_dh_handshake_state)<0) {
log_warn(LD_BUG, "Internal error: couldn't generate g^x.");
+ status = -2;
goto perm_err;
}
}
@@ -221,7 +251,14 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
REND_DESC_COOKIE_LEN);
v3_shift += 2+REND_DESC_COOKIE_LEN;
}
- set_uint32(tmp+v3_shift+1, htonl((uint32_t)time(NULL)));
+ if (rend_client_should_send_timestamp()) {
+ uint32_t now = (uint32_t)time(NULL);
+ now += 300;
+ now -= now % 600;
+ set_uint32(tmp+v3_shift+1, htonl(now));
+ } else {
+ set_uint32(tmp+v3_shift+1, 0);
+ }
v3_shift += 4;
} /* if version 2 only write version number */
else if (entry->parsed->protocols & (1<<2)) {
@@ -253,9 +290,10 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
dh_offset = MAX_NICKNAME_LEN+1+REND_COOKIE_LEN;
}
- if (crypto_dh_get_public(cpath->dh_handshake_state, tmp+dh_offset,
+ if (crypto_dh_get_public(cpath->rend_dh_handshake_state, tmp+dh_offset,
DH_KEY_LEN)<0) {
log_warn(LD_BUG, "Internal error: couldn't extract g^x.");
+ status = -2;
goto perm_err;
}
@@ -269,6 +307,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
PK_PKCS1_OAEP_PADDING, 0);
if (r<0) {
log_warn(LD_BUG,"Internal error: hybrid pk encrypt failed.");
+ status = -2;
goto perm_err;
}
@@ -288,7 +327,8 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
introcirc->cpath->prev)<0) {
/* introcirc is already marked for close. leave rendcirc alone. */
log_warn(LD_BUG, "Couldn't send INTRODUCE1 cell");
- return -2;
+ status = -2;
+ goto cleanup;
}
/* Now, we wait for an ACK or NAK on this circuit. */
@@ -297,14 +337,21 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
/* Set timestamp_dirty, because circuit_expire_building expects it
* to specify when a circuit entered the _C_INTRODUCE_ACK_WAIT
* state. */
- introcirc->_base.timestamp_dirty = time(NULL);
+ introcirc->base_.timestamp_dirty = time(NULL);
+
+ pathbias_count_use_attempt(introcirc);
+
+ goto cleanup;
- return 0;
perm_err:
- if (!introcirc->_base.marked_for_close)
+ if (!introcirc->base_.marked_for_close)
circuit_mark_for_close(TO_CIRCUIT(introcirc), END_CIRC_REASON_INTERNAL);
circuit_mark_for_close(TO_CIRCUIT(rendcirc), END_CIRC_REASON_INTERNAL);
- return -2;
+ cleanup:
+ memwipe(payload, 0, sizeof(payload));
+ memwipe(tmp, 0, sizeof(tmp));
+
+ return status;
}
/** Called when a rendezvous circuit is open; sends a establish
@@ -312,7 +359,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
void
rend_client_rendcirc_has_opened(origin_circuit_t *circ)
{
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_C_ESTABLISH_REND);
log_info(LD_REND,"rendcirc is open");
@@ -322,6 +369,32 @@ rend_client_rendcirc_has_opened(origin_circuit_t *circ)
}
}
+/**
+ * Called to close other intro circuits we launched in parallel
+ * due to timeout.
+ */
+static void
+rend_client_close_other_intros(const char *onion_address)
+{
+ circuit_t *c;
+ /* abort parallel intro circs, if any */
+ TOR_LIST_FOREACH(c, circuit_get_global_list(), head) {
+ if ((c->purpose == CIRCUIT_PURPOSE_C_INTRODUCING ||
+ c->purpose == CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) &&
+ !c->marked_for_close && CIRCUIT_IS_ORIGIN(c)) {
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(c);
+ if (oc->rend_data &&
+ !rend_cmp_service_ids(onion_address,
+ oc->rend_data->onion_address)) {
+ log_info(LD_REND|LD_CIRC, "Closing introduction circuit %d that we "
+ "built in parallel (Purpose %d).", oc->global_identifier,
+ c->purpose);
+ circuit_mark_for_close(c, END_CIRC_REASON_TIMEOUT);
+ }
+ }
+ }
+}
+
/** Called when get an ACK or a NAK for a REND_INTRODUCE1 cell.
*/
int
@@ -331,10 +404,10 @@ rend_client_introduction_acked(origin_circuit_t *circ,
origin_circuit_t *rendcirc;
(void) request; // XXXX Use this.
- if (circ->_base.purpose != CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT) {
log_warn(LD_PROTOCOL,
- "Received REND_INTRODUCE_ACK on unexpected circuit %d.",
- circ->_base.n_circ_id);
+ "Received REND_INTRODUCE_ACK on unexpected circuit %u.",
+ (unsigned)circ->base_.n_circ_id);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
return -1;
}
@@ -345,6 +418,10 @@ rend_client_introduction_acked(origin_circuit_t *circ,
#endif
tor_assert(circ->rend_data);
+ /* For path bias: This circuit was used successfully. Valid
+ * nacks and acks count. */
+ pathbias_mark_use_success(circ);
+
if (request_len == 0) {
/* It's an ACK; the introduction point relayed our introduction request. */
/* Locate the rend circ which is waiting to hear about this ack,
@@ -361,7 +438,7 @@ rend_client_introduction_acked(origin_circuit_t *circ,
/* Set timestamp_dirty, because circuit_expire_building expects
* it to specify when a circuit entered the
* _C_REND_READY_INTRO_ACKED state. */
- rendcirc->_base.timestamp_dirty = time(NULL);
+ rendcirc->base_.timestamp_dirty = time(NULL);
} else {
log_info(LD_REND,"...Found no rend circ. Dropping on the floor.");
}
@@ -369,6 +446,9 @@ rend_client_introduction_acked(origin_circuit_t *circ,
circuit_change_purpose(TO_CIRCUIT(circ),
CIRCUIT_PURPOSE_C_INTRODUCE_ACKED);
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_FINISHED);
+
+ /* close any other intros launched in parallel */
+ rend_client_close_other_intros(circ->rend_data->onion_address);
} else {
/* It's a NAK; the introduction point didn't relay our request. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_INTRODUCING);
@@ -525,7 +605,7 @@ rend_client_purge_last_hid_serv_requests(void)
if (old_last_hid_serv_requests != NULL) {
log_info(LD_REND, "Purging client last-HS-desc-request-time table");
- strmap_free(old_last_hid_serv_requests, _tor_free);
+ strmap_free(old_last_hid_serv_requests, tor_free_);
}
}
@@ -539,11 +619,14 @@ static int
directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
{
smartlist_t *responsible_dirs = smartlist_new();
+ smartlist_t *usable_responsible_dirs = smartlist_new();
+ const or_options_t *options = get_options();
routerstatus_t *hs_dir;
char desc_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
time_t now = time(NULL);
char descriptor_cookie_base64[3*REND_DESC_COOKIE_LEN_BASE64];
- int tor2web_mode = get_options()->Tor2webMode;
+ const int tor2web_mode = options->Tor2webMode;
+ int excluded_some;
tor_assert(desc_id);
tor_assert(rend_query);
/* Determine responsible dirs. Even if we can't get all we want,
@@ -564,16 +647,33 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
dir, desc_id_base32, rend_query, 0, 0);
const node_t *node = node_get_by_id(dir->identity_digest);
if (last + REND_HID_SERV_DIR_REQUERY_PERIOD >= now ||
- !node || !node_has_descriptor(node))
- SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
+ !node || !node_has_descriptor(node)) {
+ SMARTLIST_DEL_CURRENT(responsible_dirs, dir);
+ continue;
+ }
+ if (! routerset_contains_node(options->ExcludeNodes, node)) {
+ smartlist_add(usable_responsible_dirs, dir);
+ }
});
- hs_dir = smartlist_choose(responsible_dirs);
+ excluded_some =
+ smartlist_len(usable_responsible_dirs) < smartlist_len(responsible_dirs);
+
+ hs_dir = smartlist_choose(usable_responsible_dirs);
+ if (! hs_dir && ! options->StrictNodes)
+ hs_dir = smartlist_choose(responsible_dirs);
+
smartlist_free(responsible_dirs);
+ smartlist_free(usable_responsible_dirs);
if (!hs_dir) {
log_info(LD_REND, "Could not pick one of the responsible hidden "
"service directories, because we requested them all "
"recently without success.");
+ if (options->StrictNodes && excluded_some) {
+ log_warn(LD_REND, "Could not pick a hidden service directory for the "
+ "requested hidden service: they are all either down or "
+ "excluded, and StrictNodes is set.");
+ }
return 0;
}
@@ -602,7 +702,8 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
directory_initiate_command_routerstatus_rend(hs_dir,
DIR_PURPOSE_FETCH_RENDDESC_V2,
ROUTER_PURPOSE_GENERAL,
- !tor2web_mode, desc_id_base32,
+ tor2web_mode?DIRIND_ONEHOP:DIRIND_ANONYMOUS,
+ desc_id_base32,
NULL, 0, 0,
rend_query);
log_info(LD_REND, "Sending fetch request for v2 descriptor for "
@@ -614,6 +715,9 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
(rend_query->auth_type == REND_NO_AUTH ? "[none]" :
escaped_safe_str_client(descriptor_cookie_base64)),
routerstatus_describe(hs_dir));
+ control_event_hs_descriptor_requested(rend_query,
+ hs_dir->identity_digest,
+ desc_id_base32);
return 1;
}
@@ -659,10 +763,17 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
time(NULL), chosen_replica) < 0) {
log_warn(LD_REND, "Internal error: Computing v2 rendezvous "
"descriptor ID did not succeed.");
- return;
+ /*
+ * Hmm, can this write anything to descriptor_id and still fail?
+ * Let's clear it just to be safe.
+ *
+ * From here on, any returns should goto done which clears
+ * descriptor_id so we don't leave key-derived material on the stack.
+ */
+ goto done;
}
if (directory_get_from_hs_dir(descriptor_id, rend_query) != 0)
- return; /* either success or failure, but we're done */
+ goto done; /* either success or failure, but we're done */
}
/* If we come here, there are no hidden service directories left. */
log_info(LD_REND, "Could not pick one of the responsible hidden "
@@ -670,6 +781,10 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
"we already tried them all unsuccessfully.");
/* Close pending connections. */
rend_client_desc_trynow(rend_query->onion_address);
+
+ done:
+ memwipe(descriptor_id, 0, sizeof(descriptor_id));
+
return;
}
@@ -682,8 +797,7 @@ rend_client_cancel_descriptor_fetches(void)
SMARTLIST_FOREACH_BEGIN(connection_array, connection_t *, conn) {
if (conn->type == CONN_TYPE_DIR &&
- (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC ||
- conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2)) {
+ conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2) {
/* It's a rendezvous descriptor fetch in progress -- cancel it
* by marking the connection for close.
*
@@ -818,7 +932,7 @@ rend_client_rendezvous_acked(origin_circuit_t *circ, const uint8_t *request,
(void) request;
(void) request_len;
/* we just got an ack for our establish-rendezvous. switch purposes. */
- if (circ->_base.purpose != CIRCUIT_PURPOSE_C_ESTABLISH_REND) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_C_ESTABLISH_REND) {
log_warn(LD_PROTOCOL,"Got a rendezvous ack when we weren't expecting one. "
"Closing circ.");
circuit_mark_for_close(TO_CIRCUIT(circ), END_CIRC_REASON_TORPROTOCOL);
@@ -829,7 +943,14 @@ rend_client_rendezvous_acked(origin_circuit_t *circ, const uint8_t *request,
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_REND_READY);
/* Set timestamp_dirty, because circuit_expire_building expects it
* to specify when a circuit entered the _C_REND_READY state. */
- circ->_base.timestamp_dirty = time(NULL);
+ circ->base_.timestamp_dirty = time(NULL);
+
+ /* From a path bias point of view, this circuit is now successfully used.
+ * Waiting any longer opens us up to attacks from Bob. He could induce
+ * Alice to attempt to connect to his hidden service and never reply
+ * to her rend requests */
+ pathbias_mark_use_success(circ);
+
/* XXXX This is a pretty brute-force approach. It'd be better to
* attach only the connections that are waiting on this circuit, rather
* than trying to attach them all. See comments bug 743. */
@@ -847,8 +968,8 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
crypt_path_t *hop;
char keys[DIGEST_LEN+CPATH_KEY_MATERIAL_LEN];
- if ((circ->_base.purpose != CIRCUIT_PURPOSE_C_REND_READY &&
- circ->_base.purpose != CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED)
+ if ((circ->base_.purpose != CIRCUIT_PURPOSE_C_REND_READY &&
+ circ->base_.purpose != CIRCUIT_PURPOSE_C_REND_READY_INTRO_ACKED)
|| !circ->build_state->pending_final_cpath) {
log_warn(LD_PROTOCOL,"Got rendezvous2 cell from hidden service, but not "
"expecting it. Closing.");
@@ -868,9 +989,9 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
tor_assert(circ->build_state);
tor_assert(circ->build_state->pending_final_cpath);
hop = circ->build_state->pending_final_cpath;
- tor_assert(hop->dh_handshake_state);
+ tor_assert(hop->rend_dh_handshake_state);
if (crypto_dh_compute_secret(LOG_PROTOCOL_WARN,
- hop->dh_handshake_state, (char*)request,
+ hop->rend_dh_handshake_state, (char*)request,
DH_KEY_LEN,
keys, DIGEST_LEN+CPATH_KEY_MATERIAL_LEN)<0) {
log_warn(LD_GENERAL, "Couldn't complete DH handshake.");
@@ -886,8 +1007,8 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const uint8_t *request,
goto err;
}
- crypto_dh_free(hop->dh_handshake_state);
- hop->dh_handshake_state = NULL;
+ crypto_dh_free(hop->rend_dh_handshake_state);
+ hop->rend_dh_handshake_state = NULL;
/* All is well. Extend the circuit. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_C_REND_JOINED);
@@ -1172,11 +1293,11 @@ rend_parse_service_authorization(const or_options_t *options,
strmap_t *parsed = strmap_new();
smartlist_t *sl = smartlist_new();
rend_service_authorization_t *auth = NULL;
+ char descriptor_cookie_tmp[REND_DESC_COOKIE_LEN+2];
+ char descriptor_cookie_base64ext[REND_DESC_COOKIE_LEN_BASE64+2+1];
for (line = options->HidServAuth; line; line = line->next) {
char *onion_address, *descriptor_cookie;
- char descriptor_cookie_tmp[REND_DESC_COOKIE_LEN+2];
- char descriptor_cookie_base64ext[REND_DESC_COOKIE_LEN_BASE64+2+1];
int auth_type_val = 0;
auth = NULL;
SMARTLIST_FOREACH(sl, char *, c, tor_free(c););
@@ -1222,7 +1343,7 @@ rend_parse_service_authorization(const or_options_t *options,
descriptor_cookie);
goto err;
}
- auth_type_val = (descriptor_cookie_tmp[16] >> 4) + 1;
+ auth_type_val = (((uint8_t)descriptor_cookie_tmp[16]) >> 4) + 1;
if (auth_type_val < 1 || auth_type_val > 2) {
log_warn(LD_CONFIG, "Authorization cookie has unknown authorization "
"type encoded.");
@@ -1253,6 +1374,8 @@ rend_parse_service_authorization(const or_options_t *options,
} else {
strmap_free(parsed, rend_service_authorization_strmap_item_free);
}
+ memwipe(descriptor_cookie_tmp, 0, sizeof(descriptor_cookie_tmp));
+ memwipe(descriptor_cookie_base64ext, 0, sizeof(descriptor_cookie_base64ext));
return res;
}
diff --git a/src/or/rendclient.h b/src/or/rendclient.h
index 393b556e3..1f731d0ae 100644
--- a/src/or/rendclient.h
+++ b/src/or/rendclient.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rendclient.c.
**/
-#ifndef _TOR_RENDCLIENT_H
-#define _TOR_RENDCLIENT_H
+#ifndef TOR_RENDCLIENT_H
+#define TOR_RENDCLIENT_H
void rend_client_purge_state(void);
diff --git a/src/or/rendcommon.c b/src/or/rendcommon.c
index 4722690c1..a664b5d50 100644
--- a/src/or/rendcommon.c
+++ b/src/or/rendcommon.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -439,7 +439,7 @@ rend_intro_point_free(rend_intro_point_t *intro)
crypto_pk_free(intro->intro_key);
if (intro->accepted_intro_rsa_parts != NULL) {
- digestmap_free(intro->accepted_intro_rsa_parts, _tor_free);
+ replaycache_free(intro->accepted_intro_rsa_parts);
}
tor_free(intro);
@@ -672,79 +672,6 @@ rend_encode_v2_descriptors(smartlist_t *descs_out,
return seconds_valid;
}
-/** Parse a service descriptor at <b>str</b> (<b>len</b> bytes). On
- * success, return a newly alloced service_descriptor_t. On failure,
- * return NULL.
- */
-rend_service_descriptor_t *
-rend_parse_service_descriptor(const char *str, size_t len)
-{
- rend_service_descriptor_t *result = NULL;
- int i, n_intro_points;
- size_t keylen, asn1len;
- const char *end, *cp, *eos;
- rend_intro_point_t *intro;
-
- result = tor_malloc_zero(sizeof(rend_service_descriptor_t));
- cp = str;
- end = str+len;
- if (end-cp<2) goto truncated;
- result->version = 0;
- if (end-cp < 2) goto truncated;
- asn1len = ntohs(get_uint16(cp));
- cp += 2;
- if ((size_t)(end-cp) < asn1len) goto truncated;
- result->pk = crypto_pk_asn1_decode(cp, asn1len);
- if (!result->pk) goto truncated;
- cp += asn1len;
- if (end-cp < 4) goto truncated;
- result->timestamp = (time_t) ntohl(get_uint32(cp));
- cp += 4;
- result->protocols = 1<<2; /* always use intro format 2 */
- if (end-cp < 2) goto truncated;
- n_intro_points = ntohs(get_uint16(cp));
- cp += 2;
-
- result->intro_nodes = smartlist_new();
- for (i=0;i<n_intro_points;++i) {
- if (end-cp < 2) goto truncated;
- eos = (const char *)memchr(cp,'\0',end-cp);
- if (!eos) goto truncated;
- /* Write nickname to extend info, but postpone the lookup whether
- * we know that router. It's not part of the parsing process. */
- intro = tor_malloc_zero(sizeof(rend_intro_point_t));
- intro->extend_info = tor_malloc_zero(sizeof(extend_info_t));
- strlcpy(intro->extend_info->nickname, cp,
- sizeof(intro->extend_info->nickname));
- smartlist_add(result->intro_nodes, intro);
- cp = eos+1;
- }
- keylen = crypto_pk_keysize(result->pk);
- tor_assert(end-cp >= 0);
- if ((size_t)(end-cp) < keylen) goto truncated;
- if ((size_t)(end-cp) > keylen) {
- log_warn(LD_PROTOCOL,
- "Signature is %d bytes too long on service descriptor.",
- (int)((size_t)(end-cp) - keylen));
- goto error;
- }
- note_crypto_pk_op(REND_CLIENT);
- if (crypto_pk_public_checksig_digest(result->pk,
- (char*)str,cp-str, /* data */
- (char*)cp,end-cp /* signature*/
- )<0) {
- log_warn(LD_PROTOCOL, "Bad signature on service descriptor.");
- goto error;
- }
-
- return result;
- truncated:
- log_warn(LD_PROTOCOL, "Truncated service descriptor.");
- error:
- rend_service_descriptor_free(result);
- return NULL;
-}
-
/** Sets <b>out</b> to the first 10 bytes of the digest of <b>pk</b>,
* base32 encoded. NUL-terminates out. (We use this string to
* identify services in directory requests and .onion URLs.)
@@ -800,7 +727,7 @@ rend_cache_entry_free(rend_cache_entry_t *e)
/** Helper: deallocate a rend_cache_entry_t. (Used with strmap_free(), which
* requires a function pointer whose argument is void*). */
static void
-_rend_cache_entry_free(void *p)
+rend_cache_entry_free_(void *p)
{
rend_cache_entry_free(p);
}
@@ -809,8 +736,8 @@ _rend_cache_entry_free(void *p)
void
rend_cache_free_all(void)
{
- strmap_free(rend_cache, _rend_cache_entry_free);
- digestmap_free(rend_cache_v2_dir, _rend_cache_entry_free);
+ strmap_free(rend_cache, rend_cache_entry_free_);
+ digestmap_free(rend_cache_v2_dir, rend_cache_entry_free_);
rend_cache = NULL;
rend_cache_v2_dir = NULL;
}
@@ -843,8 +770,8 @@ void
rend_cache_purge(void)
{
if (rend_cache) {
- log_info(LD_REND, "Purging client/v0-HS-authority HS descriptor cache");
- strmap_free(rend_cache, _rend_cache_entry_free);
+ log_info(LD_REND, "Purging HS descriptor cache");
+ strmap_free(rend_cache, rend_cache_entry_free_);
}
rend_cache = strmap_new();
}
@@ -954,27 +881,6 @@ rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e)
return 1;
}
-/** <b>query</b> is a base-32'ed service id. If it's malformed, return -1.
- * Else look it up.
- * - If it is found, point *desc to it, and write its length into
- * *desc_len, and return 1.
- * - If it is not found, return 0.
- * Note: calls to rend_cache_clean or rend_cache_store may invalidate
- * *desc.
- */
-int
-rend_cache_lookup_desc(const char *query, int version, const char **desc,
- size_t *desc_len)
-{
- rend_cache_entry_t *e;
- int r;
- r = rend_cache_lookup_entry(query,version,&e);
- if (r <= 0) return r;
- *desc = e->desc;
- *desc_len = e->len;
- return 1;
-}
-
/** Lookup the v2 service descriptor with base32-encoded <b>desc_id</b> and
* copy the pointer to it to *<b>desc</b>. Return 1 on success, 0 on
* well-formed-but-not-found, and -1 on failure.
@@ -1002,107 +908,9 @@ rend_cache_lookup_v2_desc_as_dir(const char *desc_id, const char **desc)
return 0;
}
-/** Parse *desc, calculate its service id, and store it in the cache.
- * If we have a newer v0 descriptor with the same ID, ignore this one.
- * If we have an older descriptor with the same ID, replace it.
- * If we are acting as client due to the published flag and have any v2
- * descriptor with the same ID, reject this one in order to not get
- * confused with having both versions for the same service.
- *
- * Return -2 if it's malformed or otherwise rejected; return -1 if we
- * already have a v2 descriptor here; return 0 if it's the same or older
- * than one we've already got; return 1 if it's novel.
- *
- * The published flag tells us if we store the descriptor
- * in our role as directory (1) or if we cache it as client (0).
- *
- * If <b>service_id</b> is non-NULL and the descriptor is not for that
- * service ID, reject it. <b>service_id</b> must be specified if and
- * only if <b>published</b> is 0 (we fetched this descriptor).
- */
-int
-rend_cache_store(const char *desc, size_t desc_len, int published,
- const char *service_id)
-{
- rend_cache_entry_t *e;
- rend_service_descriptor_t *parsed;
- char query[REND_SERVICE_ID_LEN_BASE32+1];
- char key[REND_SERVICE_ID_LEN_BASE32+2]; /* 0<query>\0 */
- time_t now;
- tor_assert(rend_cache);
- parsed = rend_parse_service_descriptor(desc,desc_len);
- if (!parsed) {
- log_warn(LD_PROTOCOL,"Couldn't parse service descriptor.");
- return -2;
- }
- if (rend_get_service_id(parsed->pk, query)<0) {
- log_warn(LD_BUG,"Couldn't compute service ID.");
- rend_service_descriptor_free(parsed);
- return -2;
- }
- if ((service_id != NULL) && strcmp(query, service_id)) {
- log_warn(LD_REND, "Received service descriptor for service ID %s; "
- "expected descriptor for service ID %s.",
- query, safe_str(service_id));
- rend_service_descriptor_free(parsed);
- return -2;
- }
- now = time(NULL);
- if (parsed->timestamp < now-REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
- log_fn(LOG_PROTOCOL_WARN, LD_REND,
- "Service descriptor %s is too old.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return -2;
- }
- if (parsed->timestamp > now+REND_CACHE_MAX_SKEW) {
- log_fn(LOG_PROTOCOL_WARN, LD_REND,
- "Service descriptor %s is too far in the future.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return -2;
- }
- /* Do we have a v2 descriptor and fetched this descriptor as a client? */
- tor_snprintf(key, sizeof(key), "2%s", query);
- if (!published && strmap_get_lc(rend_cache, key)) {
- log_info(LD_REND, "We already have a v2 descriptor for service %s.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return -1;
- }
- tor_snprintf(key, sizeof(key), "0%s", query);
- e = (rend_cache_entry_t*) strmap_get_lc(rend_cache, key);
- if (e && e->parsed->timestamp > parsed->timestamp) {
- log_info(LD_REND,"We already have a newer service descriptor %s with the "
- "same ID and version.",
- safe_str_client(query));
- rend_service_descriptor_free(parsed);
- return 0;
- }
- if (e && e->len == desc_len && tor_memeq(desc,e->desc,desc_len)) {
- log_info(LD_REND,"We already have this service descriptor %s.",
- safe_str_client(query));
- e->received = time(NULL);
- rend_service_descriptor_free(parsed);
- return 0;
- }
- if (!e) {
- e = tor_malloc_zero(sizeof(rend_cache_entry_t));
- strmap_set_lc(rend_cache, key, e);
- } else {
- rend_service_descriptor_free(e->parsed);
- tor_free(e->desc);
- }
- e->received = time(NULL);
- e->parsed = parsed;
- e->len = desc_len;
- e->desc = tor_malloc(desc_len);
- memcpy(e->desc, desc, desc_len);
-
- log_debug(LD_REND,"Successfully stored rend desc '%s', len %d.",
- safe_str_client(query), (int)desc_len);
- return 1;
-}
+/* Do not allow more than this many introduction points in a hidden service
+ * descriptor */
+#define MAX_INTRO_POINTS 10
/** Parse the v2 service descriptor(s) in <b>desc</b> and store it/them to the
* local rend cache. Don't attempt to decrypt the included list of introduction
@@ -1110,12 +918,10 @@ rend_cache_store(const char *desc, size_t desc_len, int published,
*
* If we have a newer descriptor with the same ID, ignore this one.
* If we have an older descriptor with the same ID, replace it.
- * Return -2 if we are not acting as hidden service directory;
- * return -1 if the descriptor(s) were not parsable; return 0 if all
- * descriptors are the same or older than those we've already got;
- * return a positive number for the number of novel stored descriptors.
+ *
+ * Return an appropriate rend_cache_store_status_t.
*/
-int
+rend_cache_store_status_t
rend_cache_store_v2_desc_as_dir(const char *desc)
{
rend_service_descriptor_t *parsed;
@@ -1135,7 +941,7 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
/* Cannot store descs, because we are (currently) not acting as
* hidden service directory. */
log_info(LD_REND, "Cannot store descs: Not acting as hs dir");
- return -2;
+ return RCS_NOTDIR;
}
while (rend_parse_v2_service_descriptor(&parsed, desc_id, &intro_content,
&intro_size, &encoded_size,
@@ -1211,11 +1017,11 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
}
if (!number_parsed) {
log_info(LD_REND, "Could not parse any descriptor.");
- return -1;
+ return RCS_BADDESC;
}
log_info(LD_REND, "Parsed %d and added %d descriptor%s.",
number_parsed, number_stored, number_stored != 1 ? "s" : "");
- return number_stored;
+ return RCS_OKAY;
}
/** Parse the v2 service descriptor in <b>desc</b>, decrypt the included list
@@ -1225,15 +1031,12 @@ rend_cache_store_v2_desc_as_dir(const char *desc)
*
* If we have a newer v2 descriptor with the same ID, ignore this one.
* If we have an older descriptor with the same ID, replace it.
- * If we have any v0 descriptor with the same ID, reject this one in order
- * to not get confused with having both versions for the same service.
* If the descriptor's service ID does not match
* <b>rend_query</b>-\>onion_address, reject it.
- * Return -2 if it's malformed or otherwise rejected; return -1 if we
- * already have a v0 descriptor here; return 0 if it's the same or older
- * than one we've already got; return 1 if it's novel.
+ *
+ * Return an appropriate rend_cache_store_status_t.
*/
-int
+rend_cache_store_status_t
rend_cache_store_v2_desc_as_client(const char *desc,
const rend_data_t *rend_query)
{
@@ -1262,7 +1065,7 @@ rend_cache_store_v2_desc_as_client(const char *desc,
char key[REND_SERVICE_ID_LEN_BASE32+2];
char service_id[REND_SERVICE_ID_LEN_BASE32+1];
rend_cache_entry_t *e;
- int retval;
+ rend_cache_store_status_t retval = RCS_BADDESC;
tor_assert(rend_cache);
tor_assert(desc);
/* Parse the descriptor. */
@@ -1270,24 +1073,22 @@ rend_cache_store_v2_desc_as_client(const char *desc,
&intro_size, &encoded_size,
&next_desc, desc) < 0) {
log_warn(LD_REND, "Could not parse descriptor.");
- retval = -2;
goto err;
}
/* Compute service ID from public key. */
if (rend_get_service_id(parsed->pk, service_id)<0) {
log_warn(LD_REND, "Couldn't compute service ID.");
- retval = -2;
goto err;
}
if (strcmp(rend_query->onion_address, service_id)) {
log_warn(LD_REND, "Received service descriptor for service ID %s; "
"expected descriptor for service ID %s.",
service_id, safe_str(rend_query->onion_address));
- retval = -2;
goto err;
}
/* Decode/decrypt introduction points. */
if (intro_content) {
+ int n_intro_points;
if (rend_query->auth_type != REND_NO_AUTH &&
!tor_mem_is_zero(rend_query->descriptor_cookie,
sizeof(rend_query->descriptor_cookie))) {
@@ -1308,12 +1109,20 @@ rend_cache_store_v2_desc_as_client(const char *desc,
intro_size = ipos_decrypted_size;
}
}
- if (rend_parse_introduction_points(parsed, intro_content,
- intro_size) <= 0) {
+ n_intro_points = rend_parse_introduction_points(parsed, intro_content,
+ intro_size);
+ if (n_intro_points <= 0) {
log_warn(LD_REND, "Failed to parse introduction points. Either the "
"service has published a corrupt descriptor or you have "
"provided invalid authorization data.");
- retval = -2;
+ goto err;
+ } else if (n_intro_points > MAX_INTRO_POINTS) {
+ log_warn(LD_REND, "Found too many introduction points on a hidden "
+ "service descriptor for %s. This is probably a (misguided) "
+ "attempt to improve reliability, but it could also be an "
+ "attempt to do a guard enumeration attack. Rejecting.",
+ safe_str_client(rend_query->onion_address));
+
goto err;
}
} else {
@@ -1326,22 +1135,12 @@ rend_cache_store_v2_desc_as_client(const char *desc,
if (parsed->timestamp < now - REND_CACHE_MAX_AGE-REND_CACHE_MAX_SKEW) {
log_warn(LD_REND, "Service descriptor with service ID %s is too old.",
safe_str_client(service_id));
- retval = -2;
goto err;
}
/* Is descriptor too far in the future? */
if (parsed->timestamp > now + REND_CACHE_MAX_SKEW) {
log_warn(LD_REND, "Service descriptor with service ID %s is too far in "
"the future.", safe_str_client(service_id));
- retval = -2;
- goto err;
- }
- /* Do we have a v0 descriptor? */
- tor_snprintf(key, sizeof(key), "0%s", service_id);
- if (strmap_get_lc(rend_cache, key)) {
- log_info(LD_REND, "We already have a v0 descriptor for service ID %s.",
- safe_str_client(service_id));
- retval = -1;
goto err;
}
/* Do we already have a newer descriptor? */
@@ -1351,16 +1150,14 @@ rend_cache_store_v2_desc_as_client(const char *desc,
log_info(LD_REND, "We already have a newer service descriptor for "
"service ID %s with the same desc ID and version.",
safe_str_client(service_id));
- retval = 0;
- goto err;
+ goto okay;
}
/* Do we already have this descriptor? */
if (e && !strcmp(desc, e->desc)) {
log_info(LD_REND,"We already have this service descriptor %s.",
safe_str_client(service_id));
e->received = time(NULL);
- retval = 0;
- goto err;
+ goto okay;
}
if (!e) {
e = tor_malloc_zero(sizeof(rend_cache_entry_t));
@@ -1376,7 +1173,10 @@ rend_cache_store_v2_desc_as_client(const char *desc,
e->len = encoded_size;
log_debug(LD_REND,"Successfully stored rend desc '%s', len %d.",
safe_str_client(service_id), (int)encoded_size);
- return 1;
+ return RCS_OKAY;
+
+ okay:
+ retval = RCS_OKAY;
err:
rend_service_descriptor_free(parsed);
@@ -1452,13 +1252,6 @@ rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint,
command);
}
-/** Return the number of entries in our rendezvous descriptor cache. */
-int
-rend_cache_size(void)
-{
- return strmap_size(rend_cache);
-}
-
/** Allocate and return a new rend_data_t with the same
* contents as <b>query</b>. */
rend_data_t *
diff --git a/src/or/rendcommon.h b/src/or/rendcommon.h
index be6bd13d2..07a47accf 100644
--- a/src/or/rendcommon.h
+++ b/src/or/rendcommon.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rendcommon.c.
**/
-#ifndef _TOR_RENDCOMMON_H
-#define _TOR_RENDCOMMON_H
+#ifndef TOR_RENDCOMMON_H
+#define TOR_RENDCOMMON_H
/** Free all storage associated with <b>data</b> */
static INLINE void
@@ -26,8 +26,6 @@ void rend_process_relay_cell(circuit_t *circ, const crypt_path_t *layer_hint,
const uint8_t *payload);
void rend_service_descriptor_free(rend_service_descriptor_t *desc);
-rend_service_descriptor_t *rend_parse_service_descriptor(const char *str,
- size_t len);
int rend_get_service_id(crypto_pk_t *pk, char *out);
void rend_encoded_v2_service_descriptor_free(
rend_encoded_v2_service_descriptor_t *desc);
@@ -39,17 +37,20 @@ void rend_cache_clean_v2_descs_as_dir(time_t now);
void rend_cache_purge(void);
void rend_cache_free_all(void);
int rend_valid_service_id(const char *query);
-int rend_cache_lookup_desc(const char *query, int version, const char **desc,
- size_t *desc_len);
int rend_cache_lookup_entry(const char *query, int version,
rend_cache_entry_t **entry_out);
int rend_cache_lookup_v2_desc_as_dir(const char *query, const char **desc);
-int rend_cache_store(const char *desc, size_t desc_len, int published,
- const char *service_id);
-int rend_cache_store_v2_desc_as_client(const char *desc,
+/** Return value from rend_cache_store_v2_desc_as_{dir,client}. */
+typedef enum {
+ RCS_NOTDIR = -2, /**< We're not a directory */
+ RCS_BADDESC = -1, /**< This descriptor is no good. */
+ RCS_OKAY = 0 /**< All worked as expected */
+} rend_cache_store_status_t;
+
+rend_cache_store_status_t rend_cache_store_v2_desc_as_dir(const char *desc);
+rend_cache_store_status_t rend_cache_store_v2_desc_as_client(const char *desc,
const rend_data_t *rend_query);
-int rend_cache_store_v2_desc_as_dir(const char *desc);
-int rend_cache_size(void);
+
int rend_encode_v2_descriptors(smartlist_t *descs_out,
rend_service_descriptor_t *desc, time_t now,
uint8_t period, rend_auth_type_t auth_type,
diff --git a/src/or/rendmid.c b/src/or/rendmid.c
index bacd0ef93..110381680 100644
--- a/src/or/rendmid.c
+++ b/src/or/rendmid.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -32,10 +32,10 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
int reason = END_CIRC_REASON_INTERNAL;
log_info(LD_REND,
- "Received an ESTABLISH_INTRO request on circuit %d",
- circ->p_circ_id);
+ "Received an ESTABLISH_INTRO request on circuit %u",
+ (unsigned) circ->p_circ_id);
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Rejecting ESTABLISH_INTRO on non-OR or non-edge circuit.");
reason = END_CIRC_REASON_TORPROTOCOL;
@@ -56,8 +56,8 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
goto err;
}
- /* Next 20 bytes: Hash of handshake_digest | "INTRODUCE" */
- memcpy(buf, circ->handshake_digest, DIGEST_LEN);
+ /* Next 20 bytes: Hash of rend_circ_nonce | "INTRODUCE" */
+ memcpy(buf, circ->rend_circ_nonce, DIGEST_LEN);
memcpy(buf+DIGEST_LEN, "INTRODUCE", 9);
if (crypto_digest(expected_digest, buf, DIGEST_LEN+9) < 0) {
log_warn(LD_BUG, "Internal error computing digest.");
@@ -94,7 +94,7 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
/* Close any other intro circuits with the same pk. */
c = NULL;
- while ((c = circuit_get_intro_point(pk_digest))) {
+ while ((c = circuit_get_intro_point((const uint8_t *)pk_digest))) {
log_info(LD_REND, "Replacing old circuit for service %s",
safe_str(serviceid));
circuit_mark_for_close(TO_CIRCUIT(c), END_CIRC_REASON_FINISHED);
@@ -111,11 +111,11 @@ rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
/* Now, set up this circuit. */
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_INTRO_POINT);
- memcpy(circ->rend_token, pk_digest, DIGEST_LEN);
+ circuit_set_intro_point_digest(circ, (uint8_t *)pk_digest);
log_info(LD_REND,
- "Established introduction point on circuit %d for service %s",
- circ->p_circ_id, safe_str(serviceid));
+ "Established introduction point on circuit %u for service %s",
+ (unsigned) circ->p_circ_id, safe_str(serviceid));
return 0;
truncated:
@@ -139,13 +139,13 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
char nak_body[1];
- log_info(LD_REND, "Received an INTRODUCE1 request on circuit %d",
- circ->p_circ_id);
+ log_info(LD_REND, "Received an INTRODUCE1 request on circuit %u",
+ (unsigned)circ->p_circ_id);
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_warn(LD_PROTOCOL,
- "Rejecting INTRODUCE1 on non-OR or non-edge circuit %d.",
- circ->p_circ_id);
+ "Rejecting INTRODUCE1 on non-OR or non-edge circuit %u.",
+ (unsigned)circ->p_circ_id);
goto err;
}
@@ -155,9 +155,9 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
*/
if (request_len < (DIGEST_LEN+(MAX_NICKNAME_LEN+1)+REND_COOKIE_LEN+
DH_KEY_LEN+CIPHER_KEY_LEN+PKCS1_OAEP_PADDING_OVERHEAD)) {
- log_warn(LD_PROTOCOL, "Impossibly short INTRODUCE1 cell on circuit %d; "
+ log_warn(LD_PROTOCOL, "Impossibly short INTRODUCE1 cell on circuit %u; "
"responding with nack.",
- circ->p_circ_id);
+ (unsigned)circ->p_circ_id);
goto err;
}
@@ -165,20 +165,20 @@ rend_mid_introduce(or_circuit_t *circ, const uint8_t *request,
(char*)request, REND_SERVICE_ID_LEN);
/* The first 20 bytes are all we look at: they have a hash of Bob's PK. */
- intro_circ = circuit_get_intro_point((char*)request);
+ intro_circ = circuit_get_intro_point((const uint8_t*)request);
if (!intro_circ) {
log_info(LD_REND,
- "No intro circ found for INTRODUCE1 cell (%s) from circuit %d; "
+ "No intro circ found for INTRODUCE1 cell (%s) from circuit %u; "
"responding with nack.",
- safe_str(serviceid), circ->p_circ_id);
+ safe_str(serviceid), (unsigned)circ->p_circ_id);
goto err;
}
log_info(LD_REND,
"Sending introduction request for service %s "
- "from circ %d to circ %d",
- safe_str(serviceid), circ->p_circ_id,
- intro_circ->p_circ_id);
+ "from circ %u to circ %u",
+ safe_str(serviceid), (unsigned)circ->p_circ_id,
+ (unsigned)intro_circ->p_circ_id);
/* Great. Now we just relay the cell down the circuit. */
if (relay_send_command_from_edge(0, TO_CIRCUIT(intro_circ),
@@ -221,21 +221,22 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
char hexid[9];
int reason = END_CIRC_REASON_TORPROTOCOL;
- log_info(LD_REND, "Received an ESTABLISH_RENDEZVOUS request on circuit %d",
- circ->p_circ_id);
+ log_info(LD_REND, "Received an ESTABLISH_RENDEZVOUS request on circuit %u",
+ (unsigned)circ->p_circ_id);
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_warn(LD_PROTOCOL,
"Tried to establish rendezvous on non-OR or non-edge circuit.");
goto err;
}
if (request_len != REND_COOKIE_LEN) {
- log_warn(LD_PROTOCOL, "Invalid length on ESTABLISH_RENDEZVOUS.");
+ log_fn(LOG_PROTOCOL_WARN,
+ LD_PROTOCOL, "Invalid length on ESTABLISH_RENDEZVOUS.");
goto err;
}
- if (circuit_get_rendezvous((char*)request)) {
+ if (circuit_get_rendezvous(request)) {
log_warn(LD_PROTOCOL,
"Duplicate rendezvous cookie in ESTABLISH_RENDEZVOUS.");
goto err;
@@ -251,13 +252,13 @@ rend_mid_establish_rendezvous(or_circuit_t *circ, const uint8_t *request,
}
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_POINT_WAITING);
- memcpy(circ->rend_token, request, REND_COOKIE_LEN);
+ circuit_set_rendezvous_cookie(circ, request);
base16_encode(hexid,9,(char*)request,4);
log_info(LD_REND,
- "Established rendezvous point on circuit %d for cookie %s",
- circ->p_circ_id, hexid);
+ "Established rendezvous point on circuit %u for cookie %s",
+ (unsigned)circ->p_circ_id, hexid);
return 0;
err:
@@ -277,18 +278,18 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
char hexid[9];
int reason = END_CIRC_REASON_INTERNAL;
- if (circ->_base.purpose != CIRCUIT_PURPOSE_OR || circ->_base.n_conn) {
+ if (circ->base_.purpose != CIRCUIT_PURPOSE_OR || circ->base_.n_chan) {
log_info(LD_REND,
- "Tried to complete rendezvous on non-OR or non-edge circuit %d.",
- circ->p_circ_id);
+ "Tried to complete rendezvous on non-OR or non-edge circuit %u.",
+ (unsigned)circ->p_circ_id);
reason = END_CIRC_REASON_TORPROTOCOL;
goto err;
}
if (request_len != REND_COOKIE_LEN+DH_KEY_LEN+DIGEST_LEN) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
- "Rejecting RENDEZVOUS1 cell with bad length (%d) on circuit %d.",
- (int)request_len, circ->p_circ_id);
+ "Rejecting RENDEZVOUS1 cell with bad length (%d) on circuit %u.",
+ (int)request_len, (unsigned)circ->p_circ_id);
reason = END_CIRC_REASON_TORPROTOCOL;
goto err;
}
@@ -296,10 +297,10 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
base16_encode(hexid, sizeof(hexid), (const char*)request, 4);
log_info(LD_REND,
- "Got request for rendezvous from circuit %d to cookie %s.",
- circ->p_circ_id, hexid);
+ "Got request for rendezvous from circuit %u to cookie %s.",
+ (unsigned)circ->p_circ_id, hexid);
- rend_circ = circuit_get_rendezvous((char*)request);
+ rend_circ = circuit_get_rendezvous(request);
if (!rend_circ) {
log_fn(LOG_PROTOCOL_WARN, LD_PROTOCOL,
"Rejecting RENDEZVOUS1 cell with unrecognized rendezvous cookie %s.",
@@ -314,20 +315,20 @@ rend_mid_rendezvous(or_circuit_t *circ, const uint8_t *request,
(char*)(request+REND_COOKIE_LEN),
request_len-REND_COOKIE_LEN, NULL)) {
log_warn(LD_GENERAL,
- "Unable to send RENDEZVOUS2 cell to client on circuit %d.",
- rend_circ->p_circ_id);
+ "Unable to send RENDEZVOUS2 cell to client on circuit %u.",
+ (unsigned)rend_circ->p_circ_id);
goto err;
}
/* Join the circuits. */
log_info(LD_REND,
- "Completing rendezvous: circuit %d joins circuit %d (cookie %s)",
- circ->p_circ_id, rend_circ->p_circ_id, hexid);
+ "Completing rendezvous: circuit %u joins circuit %u (cookie %s)",
+ (unsigned)circ->p_circ_id, (unsigned)rend_circ->p_circ_id, hexid);
circuit_change_purpose(TO_CIRCUIT(circ), CIRCUIT_PURPOSE_REND_ESTABLISHED);
circuit_change_purpose(TO_CIRCUIT(rend_circ),
CIRCUIT_PURPOSE_REND_ESTABLISHED);
- memset(circ->rend_token, 0, REND_COOKIE_LEN);
+ circuit_set_rendezvous_cookie(circ, NULL);
rend_circ->rend_splice = circ;
circ->rend_splice = rend_circ;
diff --git a/src/or/rendmid.h b/src/or/rendmid.h
index 0af6436de..310276ac9 100644
--- a/src/or/rendmid.h
+++ b/src/or/rendmid.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rendmid.c.
**/
-#ifndef _TOR_RENDMID_H
-#define _TOR_RENDMID_H
+#ifndef TOR_RENDMID_H
+#define TOR_RENDMID_H
int rend_mid_establish_intro(or_circuit_t *circ, const uint8_t *request,
size_t request_len);
diff --git a/src/or/rendservice.c b/src/or/rendservice.c
index d235f089f..a7c1e32f1 100644
--- a/src/or/rendservice.c
+++ b/src/or/rendservice.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -7,7 +7,10 @@
* \brief The hidden-service side of rendezvous functionality.
**/
+#define RENDSERVICE_PRIVATE
+
#include "or.h"
+#include "circpathbias.h"
#include "circuitbuild.h"
#include "circuitlist.h"
#include "circuituse.h"
@@ -21,16 +24,42 @@
#include "router.h"
#include "relay.h"
#include "rephist.h"
+#include "replaycache.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "routerset.h"
static origin_circuit_t *find_intro_circuit(rend_intro_point_t *intro,
const char *pk_digest);
static rend_intro_point_t *find_intro_point(origin_circuit_t *circ);
+static extend_info_t *find_rp_for_intro(
+ const rend_intro_cell_t *intro,
+ uint8_t *need_free_out, char **err_msg_out);
+
static int intro_point_accepted_intro_count(rend_intro_point_t *intro);
static int intro_point_should_expire_now(rend_intro_point_t *intro,
time_t now);
+struct rend_service_t;
+static int rend_service_load_keys(struct rend_service_t *s);
+static int rend_service_load_auth_keys(struct rend_service_t *s,
+ const char *hfname);
+
+static ssize_t rend_service_parse_intro_for_v0_or_v1(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out);
+static ssize_t rend_service_parse_intro_for_v2(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out);
+static ssize_t rend_service_parse_intro_for_v3(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out);
/** Represents the mapping from a virtual port of a rendezvous service to
* a real port on some IP.
@@ -53,14 +82,14 @@ typedef struct rend_service_port_config_t {
#define MAX_INTRO_CIRCS_PER_PERIOD 10
/** How many times will a hidden service operator attempt to connect to
* a requested rendezvous point before giving up? */
-#define MAX_REND_FAILURES 30
+#define MAX_REND_FAILURES 8
/** How many seconds should we spend trying to connect to a requested
* rendezvous point before giving up? */
#define MAX_REND_TIMEOUT 30
/** How many seconds should we wait for new HS descriptors to reach
* our clients before we close an expiring intro point? */
-#define INTRO_POINT_EXPIRATION_GRACE_PERIOD 5*60
+#define INTRO_POINT_EXPIRATION_GRACE_PERIOD (5*60)
/** Represents a single hidden service running at this OP. */
typedef struct rend_service_t {
@@ -91,16 +120,12 @@ typedef struct rend_service_t {
* up-to-date. */
time_t next_upload_time; /**< Scheduled next hidden service descriptor
* upload time. */
- /** Map from digests of Diffie-Hellman values INTRODUCE2 to time_t
- * of when they were received. Clients may send INTRODUCE1 cells
- * for the same rendezvous point through two or more different
- * introduction points; when they do, this digestmap keeps us from
- * launching multiple simultaneous attempts to connect to the same
- * rend point. */
- digestmap_t *accepted_intro_dh_parts;
- /** Time at which we last removed expired values from
- * accepted_intro_dh_parts. */
- time_t last_cleaned_accepted_intro_dh_parts;
+ /** Replay cache for Diffie-Hellman values of INTRODUCE2 cells, to
+ * detect repeats. Clients may send INTRODUCE1 cells for the same
+ * rendezvous point through two or more different introduction points;
+ * when they do, this keeps us from launching multiple simultaneous attempts
+ * to connect to the same rend point. */
+ replaycache_t *accepted_intro_dh_parts;
} rend_service_t;
/** A list of rend_service_t's for services run on this OP.
@@ -135,7 +160,9 @@ rend_authorized_client_free(rend_authorized_client_t *client)
return;
if (client->client_key)
crypto_pk_free(client->client_key);
+ tor_strclear(client->client_name);
tor_free(client->client_name);
+ memwipe(client->descriptor_cookie, 0, sizeof(client->descriptor_cookie));
tor_free(client);
}
@@ -171,7 +198,9 @@ rend_service_free(rend_service_t *service)
rend_authorized_client_free(c););
smartlist_free(service->clients);
}
- digestmap_free(service->accepted_intro_dh_parts, _tor_free);
+ if (service->accepted_intro_dh_parts) {
+ replaycache_free(service->accepted_intro_dh_parts);
+ }
tor_free(service);
}
@@ -244,8 +273,8 @@ rend_add_service(rend_service_t *service)
service->directory);
for (i = 0; i < smartlist_len(service->ports); ++i) {
p = smartlist_get(service->ports, i);
- log_debug(LD_REND,"Service maps port %d to %s:%d",
- p->virtual_port, fmt_addr(&p->real_addr), p->real_port);
+ log_debug(LD_REND,"Service maps port %d to %s",
+ p->virtual_port, fmt_addrport(&p->real_addr, p->real_port));
}
}
}
@@ -515,7 +544,7 @@ rend_config_services(const or_options_t *options, int validate_only)
/* XXXX it would be nicer if we had a nicer abstraction to use here,
* so we could just iterate over the list of services to close, but
* once again, this isn't critical-path code. */
- for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (!circ->marked_for_close &&
circ->state == CIRCUIT_STATE_OPEN &&
(circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -565,6 +594,7 @@ rend_service_update_descriptor(rend_service_t *service)
d = service->desc = tor_malloc_zero(sizeof(rend_service_descriptor_t));
d->pk = crypto_pk_dup_key(service->private_key);
d->timestamp = time(NULL);
+ d->timestamp -= d->timestamp % 3600; /* Round down to nearest hour */
d->intro_nodes = smartlist_new();
/* Support intro protocols 2 and 3. */
d->protocols = (1 << 2) + (1 << 3);
@@ -582,7 +612,7 @@ rend_service_update_descriptor(rend_service_t *service)
}
circ = find_intro_circuit(intro_svc, service->pk_digest);
- if (!circ || circ->_base.purpose != CIRCUIT_PURPOSE_S_INTRO) {
+ if (!circ || circ->base_.purpose != CIRCUIT_PURPOSE_S_INTRO) {
/* This intro point's circuit isn't finished yet. Don't list it. */
continue;
}
@@ -609,231 +639,303 @@ rend_service_update_descriptor(rend_service_t *service)
/** Load and/or generate private keys for all hidden services, possibly
* including keys for client authorization. Return 0 on success, -1 on
- * failure.
- */
+ * failure. */
int
-rend_service_load_keys(void)
+rend_service_load_all_keys(void)
{
- int r = 0;
- char fname[512];
- char buf[1500];
-
SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, s) {
if (s->private_key)
continue;
log_info(LD_REND, "Loading hidden-service keys from \"%s\"",
s->directory);
- /* Check/create directory */
- if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0)
+ if (rend_service_load_keys(s) < 0)
return -1;
+ } SMARTLIST_FOREACH_END(s);
+
+ return 0;
+}
+
+/** Add to <b>lst</b> every filename used by <b>s</b>. */
+static void
+rend_service_add_filenames_to_list(smartlist_t *lst, const rend_service_t *s)
+{
+ tor_assert(lst);
+ tor_assert(s);
+ smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"private_key",
+ s->directory);
+ smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"hostname",
+ s->directory);
+ smartlist_add_asprintf(lst, "%s"PATH_SEPARATOR"client_keys",
+ s->directory);
+}
+
+/** Add to <b>open_lst</b> every filename used by a configured hidden service,
+ * and to <b>stat_lst</b> every directory used by a configured hidden
+ * service */
+void
+rend_services_add_filenames_to_lists(smartlist_t *open_lst,
+ smartlist_t *stat_lst)
+{
+ if (!rend_service_list)
+ return;
+ SMARTLIST_FOREACH_BEGIN(rend_service_list, rend_service_t *, s) {
+ rend_service_add_filenames_to_list(open_lst, s);
+ smartlist_add(stat_lst, tor_strdup(s->directory));
+ } SMARTLIST_FOREACH_END(s);
+}
+
+/** Load and/or generate private keys for the hidden service <b>s</b>,
+ * possibly including keys for client authorization. Return 0 on success, -1
+ * on failure. */
+static int
+rend_service_load_keys(rend_service_t *s)
+{
+ char fname[512];
+ char buf[128];
+
+ /* Check/create directory */
+ if (check_private_dir(s->directory, CPD_CREATE, get_options()->User) < 0)
+ return -1;
+
+ /* Load key */
+ if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
+ strlcat(fname,PATH_SEPARATOR"private_key",sizeof(fname))
+ >= sizeof(fname)) {
+ log_warn(LD_CONFIG, "Directory name too long to store key file: \"%s\".",
+ s->directory);
+ return -1;
+ }
+ s->private_key = init_key_from_file(fname, 1, LOG_ERR);
+ if (!s->private_key)
+ return -1;
+
+ /* Create service file */
+ if (rend_get_service_id(s->private_key, s->service_id)<0) {
+ log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
+ return -1;
+ }
+ if (crypto_pk_get_digest(s->private_key, s->pk_digest)<0) {
+ log_warn(LD_BUG, "Couldn't compute hash of public key.");
+ return -1;
+ }
+ if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
+ strlcat(fname,PATH_SEPARATOR"hostname",sizeof(fname))
+ >= sizeof(fname)) {
+ log_warn(LD_CONFIG, "Directory name too long to store hostname file:"
+ " \"%s\".", s->directory);
+ return -1;
+ }
+
+ tor_snprintf(buf, sizeof(buf),"%s.onion\n", s->service_id);
+ if (write_str_to_file(fname,buf,0)<0) {
+ log_warn(LD_CONFIG, "Could not write onion address to hostname file.");
+ memwipe(buf, 0, sizeof(buf));
+ return -1;
+ }
+ memwipe(buf, 0, sizeof(buf));
- /* Load key */
- if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
- strlcat(fname,PATH_SEPARATOR"private_key",sizeof(fname))
- >= sizeof(fname)) {
- log_warn(LD_CONFIG, "Directory name too long to store key file: \"%s\".",
- s->directory);
+ /* If client authorization is configured, load or generate keys. */
+ if (s->auth_type != REND_NO_AUTH) {
+ if (rend_service_load_auth_keys(s, fname) < 0)
return -1;
+ }
+
+ return 0;
+}
+
+/** Load and/or generate client authorization keys for the hidden service
+ * <b>s</b>, which stores its hostname in <b>hfname</b>. Return 0 on success,
+ * -1 on failure. */
+static int
+rend_service_load_auth_keys(rend_service_t *s, const char *hfname)
+{
+ int r = 0;
+ char cfname[512];
+ char *client_keys_str = NULL;
+ strmap_t *parsed_clients = strmap_new();
+ FILE *cfile, *hfile;
+ open_file_t *open_cfile = NULL, *open_hfile = NULL;
+ char extended_desc_cookie[REND_DESC_COOKIE_LEN+1];
+ char desc_cook_out[3*REND_DESC_COOKIE_LEN_BASE64+1];
+ char service_id[16+1];
+ char buf[1500];
+
+ /* Load client keys and descriptor cookies, if available. */
+ if (tor_snprintf(cfname, sizeof(cfname), "%s"PATH_SEPARATOR"client_keys",
+ s->directory)<0) {
+ log_warn(LD_CONFIG, "Directory name too long to store client keys "
+ "file: \"%s\".", s->directory);
+ goto err;
+ }
+ client_keys_str = read_file_to_str(cfname, RFTS_IGNORE_MISSING, NULL);
+ if (client_keys_str) {
+ if (rend_parse_client_keys(parsed_clients, client_keys_str) < 0) {
+ log_warn(LD_CONFIG, "Previously stored client_keys file could not "
+ "be parsed.");
+ goto err;
+ } else {
+ log_info(LD_CONFIG, "Parsed %d previously stored client entries.",
+ strmap_size(parsed_clients));
}
- s->private_key = init_key_from_file(fname, 1, LOG_ERR);
- if (!s->private_key)
- return -1;
+ }
- /* Create service file */
- if (rend_get_service_id(s->private_key, s->service_id)<0) {
- log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
- return -1;
+ /* Prepare client_keys and hostname files. */
+ if (!(cfile = start_writing_to_stdio_file(cfname,
+ OPEN_FLAGS_REPLACE | O_TEXT,
+ 0600, &open_cfile))) {
+ log_warn(LD_CONFIG, "Could not open client_keys file %s",
+ escaped(cfname));
+ goto err;
+ }
+
+ if (!(hfile = start_writing_to_stdio_file(hfname,
+ OPEN_FLAGS_REPLACE | O_TEXT,
+ 0600, &open_hfile))) {
+ log_warn(LD_CONFIG, "Could not open hostname file %s", escaped(hfname));
+ goto err;
+ }
+
+ /* Either use loaded keys for configured clients or generate new
+ * ones if a client is new. */
+ SMARTLIST_FOREACH_BEGIN(s->clients, rend_authorized_client_t *, client) {
+ rend_authorized_client_t *parsed =
+ strmap_get(parsed_clients, client->client_name);
+ int written;
+ size_t len;
+ /* Copy descriptor cookie from parsed entry or create new one. */
+ if (parsed) {
+ memcpy(client->descriptor_cookie, parsed->descriptor_cookie,
+ REND_DESC_COOKIE_LEN);
+ } else {
+ crypto_rand(client->descriptor_cookie, REND_DESC_COOKIE_LEN);
}
- if (crypto_pk_get_digest(s->private_key, s->pk_digest)<0) {
- log_warn(LD_BUG, "Couldn't compute hash of public key.");
- return -1;
+ if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
+ client->descriptor_cookie,
+ REND_DESC_COOKIE_LEN) < 0) {
+ log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
+ goto err;
}
- if (strlcpy(fname,s->directory,sizeof(fname)) >= sizeof(fname) ||
- strlcat(fname,PATH_SEPARATOR"hostname",sizeof(fname))
- >= sizeof(fname)) {
- log_warn(LD_CONFIG, "Directory name too long to store hostname file:"
- " \"%s\".", s->directory);
- return -1;
+ /* Copy client key from parsed entry or create new one if required. */
+ if (parsed && parsed->client_key) {
+ client->client_key = crypto_pk_dup_key(parsed->client_key);
+ } else if (s->auth_type == REND_STEALTH_AUTH) {
+ /* Create private key for client. */
+ crypto_pk_t *prkey = NULL;
+ if (!(prkey = crypto_pk_new())) {
+ log_warn(LD_BUG,"Error constructing client key");
+ goto err;
+ }
+ if (crypto_pk_generate_key(prkey)) {
+ log_warn(LD_BUG,"Error generating client key");
+ crypto_pk_free(prkey);
+ goto err;
+ }
+ if (crypto_pk_check_key(prkey) <= 0) {
+ log_warn(LD_BUG,"Generated client key seems invalid");
+ crypto_pk_free(prkey);
+ goto err;
+ }
+ client->client_key = prkey;
}
- tor_snprintf(buf, sizeof(buf),"%s.onion\n", s->service_id);
- if (write_str_to_file(fname,buf,0)<0) {
- log_warn(LD_CONFIG, "Could not write onion address to hostname file.");
- return -1;
+ /* Add entry to client_keys file. */
+ desc_cook_out[strlen(desc_cook_out)-1] = '\0'; /* Remove newline. */
+ written = tor_snprintf(buf, sizeof(buf),
+ "client-name %s\ndescriptor-cookie %s\n",
+ client->client_name, desc_cook_out);
+ if (written < 0) {
+ log_warn(LD_BUG, "Could not write client entry.");
+ goto err;
}
-
- /* If client authorization is configured, load or generate keys. */
- if (s->auth_type != REND_NO_AUTH) {
- char *client_keys_str = NULL;
- strmap_t *parsed_clients = strmap_new();
- char cfname[512];
- FILE *cfile, *hfile;
- open_file_t *open_cfile = NULL, *open_hfile = NULL;
-
- /* Load client keys and descriptor cookies, if available. */
- if (tor_snprintf(cfname, sizeof(cfname), "%s"PATH_SEPARATOR"client_keys",
- s->directory)<0) {
- log_warn(LD_CONFIG, "Directory name too long to store client keys "
- "file: \"%s\".", s->directory);
+ if (client->client_key) {
+ char *client_key_out = NULL;
+ if (crypto_pk_write_private_key_to_string(client->client_key,
+ &client_key_out, &len) != 0) {
+ log_warn(LD_BUG, "Internal error: "
+ "crypto_pk_write_private_key_to_string() failed.");
goto err;
}
- client_keys_str = read_file_to_str(cfname, RFTS_IGNORE_MISSING, NULL);
- if (client_keys_str) {
- if (rend_parse_client_keys(parsed_clients, client_keys_str) < 0) {
- log_warn(LD_CONFIG, "Previously stored client_keys file could not "
- "be parsed.");
- goto err;
- } else {
- log_info(LD_CONFIG, "Parsed %d previously stored client entries.",
- strmap_size(parsed_clients));
- tor_free(client_keys_str);
- }
- }
-
- /* Prepare client_keys and hostname files. */
- if (!(cfile = start_writing_to_stdio_file(cfname,
- OPEN_FLAGS_REPLACE | O_TEXT,
- 0600, &open_cfile))) {
- log_warn(LD_CONFIG, "Could not open client_keys file %s",
- escaped(cfname));
+ if (rend_get_service_id(client->client_key, service_id)<0) {
+ log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
+ /*
+ * len is string length, not buffer length, but last byte is NUL
+ * anyway.
+ */
+ memwipe(client_key_out, 0, len);
+ tor_free(client_key_out);
goto err;
}
- if (!(hfile = start_writing_to_stdio_file(fname,
- OPEN_FLAGS_REPLACE | O_TEXT,
- 0600, &open_hfile))) {
- log_warn(LD_CONFIG, "Could not open hostname file %s", escaped(fname));
+ written = tor_snprintf(buf + written, sizeof(buf) - written,
+ "client-key\n%s", client_key_out);
+ memwipe(client_key_out, 0, len);
+ tor_free(client_key_out);
+ if (written < 0) {
+ log_warn(LD_BUG, "Could not write client entry.");
goto err;
}
+ }
- /* Either use loaded keys for configured clients or generate new
- * ones if a client is new. */
- SMARTLIST_FOREACH_BEGIN(s->clients, rend_authorized_client_t *, client)
- {
- char desc_cook_out[3*REND_DESC_COOKIE_LEN_BASE64+1];
- char service_id[16+1];
- rend_authorized_client_t *parsed =
- strmap_get(parsed_clients, client->client_name);
- int written;
- size_t len;
- /* Copy descriptor cookie from parsed entry or create new one. */
- if (parsed) {
- memcpy(client->descriptor_cookie, parsed->descriptor_cookie,
- REND_DESC_COOKIE_LEN);
- } else {
- crypto_rand(client->descriptor_cookie, REND_DESC_COOKIE_LEN);
- }
- if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
- client->descriptor_cookie,
- REND_DESC_COOKIE_LEN) < 0) {
- log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
- strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
- return -1;
- }
- /* Copy client key from parsed entry or create new one if required. */
- if (parsed && parsed->client_key) {
- client->client_key = crypto_pk_dup_key(parsed->client_key);
- } else if (s->auth_type == REND_STEALTH_AUTH) {
- /* Create private key for client. */
- crypto_pk_t *prkey = NULL;
- if (!(prkey = crypto_pk_new())) {
- log_warn(LD_BUG,"Error constructing client key");
- goto err;
- }
- if (crypto_pk_generate_key(prkey)) {
- log_warn(LD_BUG,"Error generating client key");
- crypto_pk_free(prkey);
- goto err;
- }
- if (crypto_pk_check_key(prkey) <= 0) {
- log_warn(LD_BUG,"Generated client key seems invalid");
- crypto_pk_free(prkey);
- goto err;
- }
- client->client_key = prkey;
- }
- /* Add entry to client_keys file. */
- desc_cook_out[strlen(desc_cook_out)-1] = '\0'; /* Remove newline. */
- written = tor_snprintf(buf, sizeof(buf),
- "client-name %s\ndescriptor-cookie %s\n",
- client->client_name, desc_cook_out);
- if (written < 0) {
- log_warn(LD_BUG, "Could not write client entry.");
- goto err;
- }
- if (client->client_key) {
- char *client_key_out = NULL;
- crypto_pk_write_private_key_to_string(client->client_key,
- &client_key_out, &len);
- if (rend_get_service_id(client->client_key, service_id)<0) {
- log_warn(LD_BUG, "Internal error: couldn't encode service ID.");
- tor_free(client_key_out);
- goto err;
- }
- written = tor_snprintf(buf + written, sizeof(buf) - written,
- "client-key\n%s", client_key_out);
- tor_free(client_key_out);
- if (written < 0) {
- log_warn(LD_BUG, "Could not write client entry.");
- goto err;
- }
- }
-
- if (fputs(buf, cfile) < 0) {
- log_warn(LD_FS, "Could not append client entry to file: %s",
- strerror(errno));
- goto err;
- }
-
- /* Add line to hostname file. */
- if (s->auth_type == REND_BASIC_AUTH) {
- /* Remove == signs (newline has been removed above). */
- desc_cook_out[strlen(desc_cook_out)-2] = '\0';
- tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
- s->service_id, desc_cook_out, client->client_name);
- } else {
- char extended_desc_cookie[REND_DESC_COOKIE_LEN+1];
- memcpy(extended_desc_cookie, client->descriptor_cookie,
- REND_DESC_COOKIE_LEN);
- extended_desc_cookie[REND_DESC_COOKIE_LEN] =
- ((int)s->auth_type - 1) << 4;
- if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
- extended_desc_cookie,
- REND_DESC_COOKIE_LEN+1) < 0) {
- log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
- goto err;
- }
- desc_cook_out[strlen(desc_cook_out)-3] = '\0'; /* Remove A= and
- newline. */
- tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
- service_id, desc_cook_out, client->client_name);
- }
+ if (fputs(buf, cfile) < 0) {
+ log_warn(LD_FS, "Could not append client entry to file: %s",
+ strerror(errno));
+ goto err;
+ }
- if (fputs(buf, hfile)<0) {
- log_warn(LD_FS, "Could not append host entry to file: %s",
- strerror(errno));
- goto err;
- }
+ /* Add line to hostname file. */
+ if (s->auth_type == REND_BASIC_AUTH) {
+ /* Remove == signs (newline has been removed above). */
+ desc_cook_out[strlen(desc_cook_out)-2] = '\0';
+ tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
+ s->service_id, desc_cook_out, client->client_name);
+ } else {
+ memcpy(extended_desc_cookie, client->descriptor_cookie,
+ REND_DESC_COOKIE_LEN);
+ extended_desc_cookie[REND_DESC_COOKIE_LEN] =
+ ((int)s->auth_type - 1) << 4;
+ if (base64_encode(desc_cook_out, 3*REND_DESC_COOKIE_LEN_BASE64+1,
+ extended_desc_cookie,
+ REND_DESC_COOKIE_LEN+1) < 0) {
+ log_warn(LD_BUG, "Could not base64-encode descriptor cookie.");
+ goto err;
}
- SMARTLIST_FOREACH_END(client);
+ desc_cook_out[strlen(desc_cook_out)-3] = '\0'; /* Remove A= and
+ newline. */
+ tor_snprintf(buf, sizeof(buf),"%s.onion %s # client: %s\n",
+ service_id, desc_cook_out, client->client_name);
+ }
- goto done;
- err:
- r = -1;
- done:
- tor_free(client_keys_str);
- strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
- if (r<0) {
- if (open_cfile)
- abort_writing_to_file(open_cfile);
- if (open_hfile)
- abort_writing_to_file(open_hfile);
- return r;
- } else {
- finish_writing_to_file(open_cfile);
- finish_writing_to_file(open_hfile);
- }
+ if (fputs(buf, hfile)<0) {
+ log_warn(LD_FS, "Could not append host entry to file: %s",
+ strerror(errno));
+ goto err;
}
- } SMARTLIST_FOREACH_END(s);
+ } SMARTLIST_FOREACH_END(client);
+
+ finish_writing_to_file(open_cfile);
+ finish_writing_to_file(open_hfile);
+
+ goto done;
+ err:
+ r = -1;
+ if (open_cfile)
+ abort_writing_to_file(open_cfile);
+ if (open_hfile)
+ abort_writing_to_file(open_hfile);
+ done:
+ if (client_keys_str) {
+ tor_strclear(client_keys_str);
+ tor_free(client_keys_str);
+ }
+ strmap_free(parsed_clients, rend_authorized_client_strmap_item_free);
+
+ memwipe(cfname, 0, sizeof(cfname));
+
+ /* Clear stack buffers that held key-derived material. */
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(desc_cook_out, 0, sizeof(desc_cook_out));
+ memwipe(service_id, 0, sizeof(service_id));
+ memwipe(extended_desc_cookie, 0, sizeof(extended_desc_cookie));
+
return r;
}
@@ -860,7 +962,7 @@ rend_service_requires_uptime(rend_service_t *service)
for (i=0; i < smartlist_len(service->ports); ++i) {
p = smartlist_get(service->ports, i);
- if (smartlist_string_num_isin(get_options()->LongLivedPorts,
+ if (smartlist_contains_int_as_string(get_options()->LongLivedPorts,
p->virtual_port))
return 1;
}
@@ -906,26 +1008,6 @@ rend_check_authorization(rend_service_t *service,
return 1;
}
-/** Remove elements from <b>service</b>'s replay cache that are old enough to
- * be noticed by timestamp checking. */
-static void
-clean_accepted_intro_dh_parts(rend_service_t *service, time_t now)
-{
- const time_t cutoff = now - REND_REPLAY_TIME_INTERVAL;
-
- service->last_cleaned_accepted_intro_dh_parts = now;
- if (!service->accepted_intro_dh_parts)
- return;
-
- DIGESTMAP_FOREACH_MODIFY(service->accepted_intro_dh_parts, digest,
- time_t *, t) {
- if (*t < cutoff) {
- tor_free(t);
- MAP_DEL_CURRENT(digest);
- }
- } DIGESTMAP_FOREACH_END;
-}
-
/** Called when <b>intro</b> will soon be removed from
* <b>service</b>'s list of intro points. */
static void
@@ -1033,42 +1115,51 @@ rend_service_note_removing_intro_point(rend_service_t *service,
/** Respond to an INTRODUCE2 cell by launching a circuit to the chosen
* rendezvous point.
*/
- /* XXXX024 this function sure could use some organizing. -RD */
int
rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
size_t request_len)
{
- char *ptr, *r_cookie;
- extend_info_t *extend_info = NULL;
+ /* Global status stuff */
+ int status = 0, result;
+ const or_options_t *options = get_options();
+ char *err_msg = NULL;
+ const char *stage_descr = NULL;
+ int reason = END_CIRC_REASON_TORPROTOCOL;
+ /* Service/circuit/key stuff we can learn before parsing */
+ char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
+ rend_service_t *service = NULL;
+ rend_intro_point_t *intro_point = NULL;
+ crypto_pk_t *intro_key = NULL;
+ /* Parsed cell */
+ rend_intro_cell_t *parsed_req = NULL;
+ /* Rendezvous point */
+ extend_info_t *rp = NULL;
+ /*
+ * We need to look up and construct the extend_info_t for v0 and v1,
+ * but all the info is in the cell and it's constructed by the parser
+ * for v2 and v3, so freeing it would be a double-free. Use this to
+ * keep track of whether we should free it.
+ */
+ uint8_t need_rp_free = 0;
+ /* XXX not handled yet */
char buf[RELAY_PAYLOAD_SIZE];
char keys[DIGEST_LEN+CPATH_KEY_MATERIAL_LEN]; /* Holds KH, Df, Db, Kf, Kb */
- rend_service_t *service;
- rend_intro_point_t *intro_point;
- int r, i, v3_shift = 0;
- size_t len, keylen;
+ int i;
crypto_dh_t *dh = NULL;
origin_circuit_t *launched = NULL;
crypt_path_t *cpath = NULL;
- char serviceid[REND_SERVICE_ID_LEN_BASE32+1];
char hexcookie[9];
int circ_needs_uptime;
- int reason = END_CIRC_REASON_TORPROTOCOL;
- crypto_pk_t *intro_key;
- char intro_key_digest[DIGEST_LEN];
- int auth_type;
- size_t auth_len = 0;
- char auth_data[REND_DESC_COOKIE_LEN];
- crypto_digest_t *digest = NULL;
time_t now = time(NULL);
- char diffie_hellman_hash[DIGEST_LEN];
- time_t *access_time;
- const or_options_t *options = get_options();
+ time_t elapsed;
+ int replay;
- if (circuit->_base.purpose != CIRCUIT_PURPOSE_S_INTRO) {
+ /* Do some initial validation and logging before we parse the cell */
+ if (circuit->base_.purpose != CIRCUIT_PURPOSE_S_INTRO) {
log_warn(LD_PROTOCOL,
- "Got an INTRODUCE2 over a non-introduction circuit %d.",
- circuit->_base.n_circ_id);
- return -1;
+ "Got an INTRODUCE2 over a non-introduction circuit %u.",
+ (unsigned) circuit->base_.n_circ_id);
+ goto err;
}
#ifndef NON_ANONYMOUS_MODE_ENABLED
@@ -1076,218 +1167,150 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
#endif
tor_assert(circuit->rend_data);
+ /* We'll use this in a bazillion log messages */
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN);
- log_info(LD_REND, "Received INTRODUCE2 cell for service %s on circ %d.",
- escaped(serviceid), circuit->_base.n_circ_id);
-
- /* min key length plus digest length plus nickname length */
- if (request_len < DIGEST_LEN+REND_COOKIE_LEN+(MAX_NICKNAME_LEN+1)+
- DH_KEY_LEN+42) {
- log_warn(LD_PROTOCOL, "Got a truncated INTRODUCE2 cell on circ %d.",
- circuit->_base.n_circ_id);
- return -1;
- }
/* look up service depending on circuit. */
- service = rend_service_get_by_pk_digest(
- circuit->rend_data->rend_pk_digest);
+ service =
+ rend_service_get_by_pk_digest(circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro "
+ log_warn(LD_BUG,
+ "Internal error: Got an INTRODUCE2 cell on an intro "
"circ for an unrecognized service %s.",
escaped(serviceid));
- return -1;
- }
-
- /* use intro key instead of service key. */
- intro_key = circuit->intro_key;
-
- /* first DIGEST_LEN bytes of request is intro or service pk digest */
- crypto_pk_get_digest(intro_key, intro_key_digest);
- if (tor_memneq(intro_key_digest, request, DIGEST_LEN)) {
- base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
- (char*)request, REND_SERVICE_ID_LEN);
- log_warn(LD_REND, "Got an INTRODUCE2 cell for the wrong service (%s).",
- escaped(serviceid));
- return -1;
- }
-
- keylen = crypto_pk_keysize(intro_key);
- if (request_len < keylen+DIGEST_LEN) {
- log_warn(LD_PROTOCOL,
- "PK-encrypted portion of INTRODUCE2 cell was truncated.");
- return -1;
+ goto err;
}
intro_point = find_intro_point(circuit);
if (intro_point == NULL) {
- log_warn(LD_BUG, "Internal error: Got an INTRODUCE2 cell on an intro circ "
- "(for service %s) with no corresponding rend_intro_point_t.",
+ log_warn(LD_BUG,
+ "Internal error: Got an INTRODUCE2 cell on an "
+ "intro circ (for service %s) with no corresponding "
+ "rend_intro_point_t.",
escaped(serviceid));
- return -1;
- }
-
- if (!service->accepted_intro_dh_parts)
- service->accepted_intro_dh_parts = digestmap_new();
-
- if (!intro_point->accepted_intro_rsa_parts)
- intro_point->accepted_intro_rsa_parts = digestmap_new();
-
- {
- char pkpart_digest[DIGEST_LEN];
- /* Check for replay of PK-encrypted portion. */
- crypto_digest(pkpart_digest, (char*)request+DIGEST_LEN, keylen);
- access_time = digestmap_get(intro_point->accepted_intro_rsa_parts,
- pkpart_digest);
- if (access_time != NULL) {
- log_warn(LD_REND, "Possible replay detected! We received an "
- "INTRODUCE2 cell with same PK-encrypted part %d seconds ago. "
- "Dropping cell.", (int)(now-*access_time));
- return -1;
- }
- access_time = tor_malloc(sizeof(time_t));
- *access_time = now;
- digestmap_set(intro_point->accepted_intro_rsa_parts,
- pkpart_digest, access_time);
- }
-
- /* Next N bytes is encrypted with service key */
- note_crypto_pk_op(REND_SERVER);
- r = crypto_pk_private_hybrid_decrypt(
- intro_key,buf,sizeof(buf),
- (char*)(request+DIGEST_LEN),request_len-DIGEST_LEN,
- PK_PKCS1_OAEP_PADDING,1);
- if (r<0) {
- log_warn(LD_PROTOCOL, "Couldn't decrypt INTRODUCE2 cell.");
- return -1;
+ goto err;
}
- len = r;
- if (*buf == 3) {
- /* Version 3 INTRODUCE2 cell. */
- v3_shift = 1;
- auth_type = buf[1];
- switch (auth_type) {
- case REND_BASIC_AUTH:
- /* fall through */
- case REND_STEALTH_AUTH:
- auth_len = ntohs(get_uint16(buf+2));
- if (auth_len != REND_DESC_COOKIE_LEN) {
- log_info(LD_REND, "Wrong auth data size %d, should be %d.",
- (int)auth_len, REND_DESC_COOKIE_LEN);
- return -1;
- }
- memcpy(auth_data, buf+4, sizeof(auth_data));
- v3_shift += 2+REND_DESC_COOKIE_LEN;
- break;
- case REND_NO_AUTH:
- break;
- default:
- log_info(LD_REND, "Unknown authorization type '%d'", auth_type);
- }
- /* Skip the timestamp field. We no longer use it. */
- v3_shift += 4;
- }
- if (*buf == 2 || *buf == 3) {
- /* Version 2 INTRODUCE2 cell. */
- int klen;
- extend_info = tor_malloc_zero(sizeof(extend_info_t));
- tor_addr_from_ipv4n(&extend_info->addr, get_uint32(buf+v3_shift+1));
- extend_info->port = ntohs(get_uint16(buf+v3_shift+5));
- memcpy(extend_info->identity_digest, buf+v3_shift+7,
- DIGEST_LEN);
- extend_info->nickname[0] = '$';
- base16_encode(extend_info->nickname+1, sizeof(extend_info->nickname)-1,
- extend_info->identity_digest, DIGEST_LEN);
-
- klen = ntohs(get_uint16(buf+v3_shift+7+DIGEST_LEN));
- if ((int)len != v3_shift+7+DIGEST_LEN+2+klen+20+128) {
- log_warn(LD_PROTOCOL, "Bad length %u for version %d INTRODUCE2 cell.",
- (int)len, *buf);
- reason = END_CIRC_REASON_TORPROTOCOL;
- goto err;
- }
- extend_info->onion_key =
- crypto_pk_asn1_decode(buf+v3_shift+7+DIGEST_LEN+2, klen);
- if (!extend_info->onion_key) {
- log_warn(LD_PROTOCOL, "Error decoding onion key in version %d "
- "INTRODUCE2 cell.", *buf);
- reason = END_CIRC_REASON_TORPROTOCOL;
- goto err;
- }
- ptr = buf+v3_shift+7+DIGEST_LEN+2+klen;
- len -= v3_shift+7+DIGEST_LEN+2+klen;
- } else {
- char *rp_nickname;
- size_t nickname_field_len;
- const node_t *node;
- int version;
- if (*buf == 1) {
- rp_nickname = buf+1;
- nickname_field_len = MAX_HEX_NICKNAME_LEN+1;
- version = 1;
- } else {
- nickname_field_len = MAX_NICKNAME_LEN+1;
- rp_nickname = buf;
- version = 0;
- }
- ptr=memchr(rp_nickname,0,nickname_field_len);
- if (!ptr || ptr == rp_nickname) {
- log_warn(LD_PROTOCOL,
- "Couldn't find a nul-padded nickname in INTRODUCE2 cell.");
- return -1;
- }
- if ((version == 0 && !is_legal_nickname(rp_nickname)) ||
- (version == 1 && !is_legal_nickname_or_hexdigest(rp_nickname))) {
- log_warn(LD_PROTOCOL, "Bad nickname in INTRODUCE2 cell.");
- return -1;
- }
- /* Okay, now we know that a nickname is at the start of the buffer. */
- ptr = rp_nickname+nickname_field_len;
- len -= nickname_field_len;
- len -= rp_nickname - buf; /* also remove header space used by version, if
- * any */
- node = node_get_by_nickname(rp_nickname, 0);
- if (!node) {
- log_info(LD_REND, "Couldn't find router %s named in introduce2 cell.",
- escaped_safe_str_client(rp_nickname));
- /* XXXX Add a no-such-router reason? */
- reason = END_CIRC_REASON_TORPROTOCOL;
- goto err;
- }
+ log_info(LD_REND, "Received INTRODUCE2 cell for service %s on circ %u.",
+ escaped(serviceid), (unsigned)circuit->base_.n_circ_id);
- extend_info = extend_info_from_node(node, 0);
- }
+ /* use intro key instead of service key. */
+ intro_key = circuit->intro_key;
- if (len != REND_COOKIE_LEN+DH_KEY_LEN) {
- log_warn(LD_PROTOCOL, "Bad length %u for INTRODUCE2 cell.", (int)len);
- reason = END_CIRC_REASON_TORPROTOCOL;
+ tor_free(err_msg);
+ stage_descr = NULL;
+
+ stage_descr = "early parsing";
+ /* Early parsing pass (get pk, ciphertext); type 2 is INTRODUCE2 */
+ parsed_req =
+ rend_service_begin_parse_intro(request, request_len, 2, &err_msg);
+ if (!parsed_req) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ stage_descr = "early validation";
+ /* Early validation of pk/ciphertext part */
+ result = rend_service_validate_intro_early(parsed_req, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ /* make sure service replay caches are present */
+ if (!service->accepted_intro_dh_parts) {
+ service->accepted_intro_dh_parts =
+ replaycache_new(REND_REPLAY_TIME_INTERVAL,
+ REND_REPLAY_TIME_INTERVAL);
+ }
+
+ if (!intro_point->accepted_intro_rsa_parts) {
+ intro_point->accepted_intro_rsa_parts = replaycache_new(0, 0);
+ }
+
+ /* check for replay of PK-encrypted portion. */
+ replay = replaycache_add_test_and_elapsed(
+ intro_point->accepted_intro_rsa_parts,
+ parsed_req->ciphertext, parsed_req->ciphertext_len,
+ &elapsed);
+
+ if (replay) {
+ log_warn(LD_REND,
+ "Possible replay detected! We received an "
+ "INTRODUCE2 cell with same PK-encrypted part %d "
+ "seconds ago. Dropping cell.",
+ (int)elapsed);
goto err;
}
+ stage_descr = "decryption";
+ /* Now try to decrypt it */
+ result = rend_service_decrypt_intro(parsed_req, intro_key, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ stage_descr = "late parsing";
+ /* Parse the plaintext */
+ result = rend_service_parse_intro_plaintext(parsed_req, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+
+ stage_descr = "late validation";
+ /* Validate the parsed plaintext parts */
+ result = rend_service_validate_intro_late(parsed_req, &err_msg);
+ if (result < 0) {
+ goto log_error;
+ } else if (err_msg) {
+ log_info(LD_REND, "%s on circ %u.", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
+ tor_free(err_msg);
+ }
+ stage_descr = NULL;
+
+ /* Increment INTRODUCE2 counter */
+ ++(intro_point->accepted_introduce2_count);
+
+ /* Find the rendezvous point */
+ rp = find_rp_for_intro(parsed_req, &need_rp_free, &err_msg);
+ if (!rp)
+ goto log_error;
+
/* Check if we'd refuse to talk to this router */
if (options->StrictNodes &&
- routerset_contains_extendinfo(options->ExcludeNodes, extend_info)) {
+ routerset_contains_extendinfo(options->ExcludeNodes, rp)) {
log_warn(LD_REND, "Client asked to rendezvous at a relay that we "
"exclude, and StrictNodes is set. Refusing service.");
reason = END_CIRC_REASON_INTERNAL; /* XXX might leak why we refused */
goto err;
}
- r_cookie = ptr;
- base16_encode(hexcookie,9,r_cookie,4);
-
- /* Determine hash of Diffie-Hellman, part 1 to detect replays. */
- digest = crypto_digest_new();
- crypto_digest_add_bytes(digest, ptr+REND_COOKIE_LEN, DH_KEY_LEN);
- crypto_digest_get_digest(digest, diffie_hellman_hash, DIGEST_LEN);
- crypto_digest_free(digest);
+ base16_encode(hexcookie, 9, (const char *)(parsed_req->rc), 4);
/* Check whether there is a past request with the same Diffie-Hellman,
* part 1. */
- access_time = digestmap_get(service->accepted_intro_dh_parts,
- diffie_hellman_hash);
- if (access_time != NULL) {
+ replay = replaycache_add_test_and_elapsed(
+ service->accepted_intro_dh_parts,
+ parsed_req->dh, DH_KEY_LEN,
+ &elapsed);
+
+ if (replay) {
/* A Tor client will send a new INTRODUCE1 cell with the same rend
* cookie and DH public key as its previous one if its intro circ
* times out while in state CIRCUIT_PURPOSE_C_INTRODUCE_ACK_WAIT .
@@ -1299,25 +1322,15 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
"INTRODUCE2 cell with same first part of "
"Diffie-Hellman handshake %d seconds ago. Dropping "
"cell.",
- (int) (now - *access_time));
+ (int) elapsed);
goto err;
}
- /* Add request to access history, including time and hash of Diffie-Hellman,
- * part 1, and possibly remove requests from the history that are older than
- * one hour. */
- access_time = tor_malloc(sizeof(time_t));
- *access_time = now;
- digestmap_set(service->accepted_intro_dh_parts,
- diffie_hellman_hash, access_time);
- if (service->last_cleaned_accepted_intro_dh_parts + REND_REPLAY_TIME_INTERVAL
- < now)
- clean_accepted_intro_dh_parts(service, now);
-
/* If the service performs client authorization, check included auth data. */
if (service->clients) {
- if (auth_len > 0) {
- if (rend_check_authorization(service, auth_data)) {
+ if (parsed_req->version == 3 && parsed_req->u.v3.auth_len > 0) {
+ if (rend_check_authorization(service,
+ (const char*)parsed_req->u.v3.auth_data)) {
log_info(LD_REND, "Authorization data in INTRODUCE2 cell are valid.");
} else {
log_info(LD_REND, "The authorization data that are contained in "
@@ -1341,7 +1354,8 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
reason = END_CIRC_REASON_INTERNAL;
goto err;
}
- if (crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh, ptr+REND_COOKIE_LEN,
+ if (crypto_dh_compute_secret(LOG_PROTOCOL_WARN, dh,
+ (char *)(parsed_req->dh),
DH_KEY_LEN, keys,
DIGEST_LEN+CPATH_KEY_MATERIAL_LEN)<0) {
log_warn(LD_BUG, "Internal error: couldn't complete DH handshake");
@@ -1360,7 +1374,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
int flags = CIRCLAUNCH_NEED_CAPACITY | CIRCLAUNCH_IS_INTERNAL;
if (circ_needs_uptime) flags |= CIRCLAUNCH_NEED_UPTIME;
launched = circuit_launch_by_extend_info(
- CIRCUIT_PURPOSE_S_CONNECT_REND, extend_info, flags);
+ CIRCUIT_PURPOSE_S_CONNECT_REND, rp, flags);
if (launched)
break;
@@ -1368,7 +1382,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
if (!launched) { /* give up */
log_warn(LD_REND, "Giving up launching first hop of circuit to rendezvous "
"point %s for service %s.",
- safe_str_client(extend_info_describe(extend_info)),
+ safe_str_client(extend_info_describe(rp)),
serviceid);
reason = END_CIRC_REASON_CONNECTFAILED;
goto err;
@@ -1376,7 +1390,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
log_info(LD_REND,
"Accepted intro; launching circuit to %s "
"(cookie %s) for service %s.",
- safe_str_client(extend_info_describe(extend_info)),
+ safe_str_client(extend_info_describe(rp)),
hexcookie, serviceid);
tor_assert(launched->build_state);
/* Fill in the circuit's state. */
@@ -1384,7 +1398,7 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
memcpy(launched->rend_data->rend_pk_digest,
circuit->rend_data->rend_pk_digest,
DIGEST_LEN);
- memcpy(launched->rend_data->rend_cookie, r_cookie, REND_COOKIE_LEN);
+ memcpy(launched->rend_data->rend_cookie, parsed_req->rc, REND_COOKIE_LEN);
strlcpy(launched->rend_data->onion_address, service->service_id,
sizeof(launched->rend_data->onion_address));
@@ -1397,24 +1411,854 @@ rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
cpath->magic = CRYPT_PATH_MAGIC;
launched->build_state->expiry_time = now + MAX_REND_TIMEOUT;
- cpath->dh_handshake_state = dh;
+ cpath->rend_dh_handshake_state = dh;
dh = NULL;
if (circuit_init_cpath_crypto(cpath,keys+DIGEST_LEN,1)<0)
goto err;
- memcpy(cpath->handshake_digest, keys, DIGEST_LEN);
- if (extend_info) extend_info_free(extend_info);
+ memcpy(cpath->rend_circ_nonce, keys, DIGEST_LEN);
- memwipe(keys, 0, sizeof(keys));
- return 0;
+ goto done;
+
+ log_error:
+ if (!err_msg) {
+ if (stage_descr) {
+ tor_asprintf(&err_msg,
+ "unknown %s error for INTRODUCE2", stage_descr);
+ } else {
+ err_msg = tor_strdup("unknown error for INTRODUCE2");
+ }
+ }
+
+ log_warn(LD_REND, "%s on circ %u", err_msg,
+ (unsigned)circuit->base_.n_circ_id);
err:
- memwipe(keys, 0, sizeof(keys));
+ status = -1;
if (dh) crypto_dh_free(dh);
- if (launched)
+ if (launched) {
circuit_mark_for_close(TO_CIRCUIT(launched), reason);
- if (extend_info) extend_info_free(extend_info);
+ }
+ tor_free(err_msg);
+
+ done:
+ memwipe(keys, 0, sizeof(keys));
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(serviceid, 0, sizeof(serviceid));
+ memwipe(hexcookie, 0, sizeof(hexcookie));
+
+ /* Free the parsed cell */
+ if (parsed_req) {
+ rend_service_free_intro(parsed_req);
+ parsed_req = NULL;
+ }
+
+ /* Free rp if we must */
+ if (need_rp_free) extend_info_free(rp);
+
+ return status;
+}
+
+/** Given a parsed and decrypted INTRODUCE2, find the rendezvous point or
+ * return NULL and an error string if we can't.
+ */
+
+static extend_info_t *
+find_rp_for_intro(const rend_intro_cell_t *intro,
+ uint8_t *need_free_out, char **err_msg_out)
+{
+ extend_info_t *rp = NULL;
+ char *err_msg = NULL;
+ const char *rp_nickname = NULL;
+ const node_t *node = NULL;
+ uint8_t need_free = 0;
+
+ if (!intro || !need_free_out) {
+ if (err_msg_out)
+ err_msg = tor_strdup("Bad parameters to find_rp_for_intro()");
+
+ goto err;
+ }
+
+ if (intro->version == 0 || intro->version == 1) {
+ if (intro->version == 1) rp_nickname = (const char *)(intro->u.v1.rp);
+ else rp_nickname = (const char *)(intro->u.v0.rp);
+
+ node = node_get_by_nickname(rp_nickname, 0);
+ if (!node) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "Couldn't find router %s named in INTRODUCE2 cell",
+ escaped_safe_str_client(rp_nickname));
+ }
+
+ goto err;
+ }
+
+ rp = extend_info_from_node(node, 0);
+ if (!rp) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "Could build extend_info_t for router %s named "
+ "in INTRODUCE2 cell",
+ escaped_safe_str_client(rp_nickname));
+ }
+
+ goto err;
+ } else {
+ need_free = 1;
+ }
+ } else if (intro->version == 2) {
+ rp = intro->u.v2.extend_info;
+ } else if (intro->version == 3) {
+ rp = intro->u.v3.extend_info;
+ } else {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "Unknown version %d in INTRODUCE2 cell",
+ (int)(intro->version));
+ }
+
+ goto err;
+ }
+
+ goto done;
+
+ err:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ done:
+ if (rp && need_free_out) *need_free_out = need_free;
+
+ return rp;
+}
+
+/** Free a parsed INTRODUCE1 or INTRODUCE2 cell that was allocated by
+ * rend_service_parse_intro().
+ */
+void
+rend_service_free_intro(rend_intro_cell_t *request)
+{
+ if (!request) {
+ log_info(LD_BUG, "rend_service_free_intro() called with NULL request!");
+ return;
+ }
+
+ /* Free ciphertext */
+ tor_free(request->ciphertext);
+ request->ciphertext_len = 0;
+
+ /* Have plaintext? */
+ if (request->plaintext) {
+ /* Zero it out just to be safe */
+ memwipe(request->plaintext, 0, request->plaintext_len);
+ tor_free(request->plaintext);
+ request->plaintext_len = 0;
+ }
+
+ /* Have parsed plaintext? */
+ if (request->parsed) {
+ switch (request->version) {
+ case 0:
+ case 1:
+ /*
+ * Nothing more to do; these formats have no further pointers
+ * in them.
+ */
+ break;
+ case 2:
+ extend_info_free(request->u.v2.extend_info);
+ request->u.v2.extend_info = NULL;
+ break;
+ case 3:
+ if (request->u.v3.auth_data) {
+ memwipe(request->u.v3.auth_data, 0, request->u.v3.auth_len);
+ tor_free(request->u.v3.auth_data);
+ }
+
+ extend_info_free(request->u.v3.extend_info);
+ request->u.v3.extend_info = NULL;
+ break;
+ default:
+ log_info(LD_BUG,
+ "rend_service_free_intro() saw unknown protocol "
+ "version %d.",
+ request->version);
+ }
+ }
+
+ /* Zero it out to make sure sensitive stuff doesn't hang around in memory */
+ memwipe(request, 0, sizeof(*request));
+
+ tor_free(request);
+}
+
+/** Parse an INTRODUCE1 or INTRODUCE2 cell into a newly allocated
+ * rend_intro_cell_t structure. Free it with rend_service_free_intro()
+ * when finished. The type parameter should be 1 or 2 to indicate whether
+ * this is INTRODUCE1 or INTRODUCE2. This parses only the non-encrypted
+ * parts; after this, call rend_service_decrypt_intro() with a key, then
+ * rend_service_parse_intro_plaintext() to finish parsing. The optional
+ * err_msg_out parameter is set to a string suitable for log output
+ * if parsing fails. This function does some validation, but only
+ * that which depends solely on the contents of the cell and the
+ * key; it can be unit-tested. Further validation is done in
+ * rend_service_validate_intro().
+ */
+
+rend_intro_cell_t *
+rend_service_begin_parse_intro(const uint8_t *request,
+ size_t request_len,
+ uint8_t type,
+ char **err_msg_out)
+{
+ rend_intro_cell_t *rv = NULL;
+ char *err_msg = NULL;
+
+ if (!request || request_len <= 0) goto err;
+ if (!(type == 1 || type == 2)) goto err;
+
+ /* First, check that the cell is long enough to be a sensible INTRODUCE */
+
+ /* min key length plus digest length plus nickname length */
+ if (request_len <
+ (DIGEST_LEN + REND_COOKIE_LEN + (MAX_NICKNAME_LEN + 1) +
+ DH_KEY_LEN + 42)) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "got a truncated INTRODUCE%d cell",
+ (int)type);
+ }
+ goto err;
+ }
+
+ /* Allocate a new parsed cell structure */
+ rv = tor_malloc_zero(sizeof(*rv));
+
+ /* Set the type */
+ rv->type = type;
+
+ /* Copy in the ID */
+ memcpy(rv->pk, request, DIGEST_LEN);
+
+ /* Copy in the ciphertext */
+ rv->ciphertext = tor_malloc(request_len - DIGEST_LEN);
+ memcpy(rv->ciphertext, request + DIGEST_LEN, request_len - DIGEST_LEN);
+ rv->ciphertext_len = request_len - DIGEST_LEN;
+
+ goto done;
+
+ err:
+ if (rv) rend_service_free_intro(rv);
+ rv = NULL;
+ if (err_msg_out && !err_msg) {
+ tor_asprintf(&err_msg,
+ "unknown INTRODUCE%d error",
+ (int)type);
+ }
+
+ done:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ return rv;
+}
+
+/** Parse the version-specific parts of a v0 or v1 INTRODUCE1 or INTRODUCE2
+ * cell
+ */
+
+static ssize_t
+rend_service_parse_intro_for_v0_or_v1(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out)
+{
+ const char *rp_nickname, *endptr;
+ size_t nickname_field_len, ver_specific_len;
+
+ if (intro->version == 1) {
+ ver_specific_len = MAX_HEX_NICKNAME_LEN + 2;
+ rp_nickname = ((const char *)buf) + 1;
+ nickname_field_len = MAX_HEX_NICKNAME_LEN + 1;
+ } else if (intro->version == 0) {
+ ver_specific_len = MAX_NICKNAME_LEN + 1;
+ rp_nickname = (const char *)buf;
+ nickname_field_len = MAX_NICKNAME_LEN + 1;
+ } else {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "rend_service_parse_intro_for_v0_or_v1() called with "
+ "bad version %d on INTRODUCE%d cell (this is a bug)",
+ intro->version,
+ (int)(intro->type));
+ goto err;
+ }
+
+ if (plaintext_len < ver_specific_len) {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "short plaintext of encrypted part in v1 INTRODUCE%d "
+ "cell (%lu bytes, needed %lu)",
+ (int)(intro->type),
+ (unsigned long)plaintext_len,
+ (unsigned long)ver_specific_len);
+ goto err;
+ }
+
+ endptr = memchr(rp_nickname, 0, nickname_field_len);
+ if (!endptr || endptr == rp_nickname) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "couldn't find a nul-padded nickname in "
+ "INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ goto err;
+ }
+
+ if ((intro->version == 0 &&
+ !is_legal_nickname(rp_nickname)) ||
+ (intro->version == 1 &&
+ !is_legal_nickname_or_hexdigest(rp_nickname))) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "bad nickname in INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ goto err;
+ }
+
+ if (intro->version == 1) {
+ memcpy(intro->u.v1.rp, rp_nickname, endptr - rp_nickname + 1);
+ } else {
+ memcpy(intro->u.v0.rp, rp_nickname, endptr - rp_nickname + 1);
+ }
+
+ return ver_specific_len;
+
+ err:
+ return -1;
+}
+
+/** Parse the version-specific parts of a v2 INTRODUCE1 or INTRODUCE2 cell
+ */
+
+static ssize_t
+rend_service_parse_intro_for_v2(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out)
+{
+ unsigned int klen;
+ extend_info_t *extend_info = NULL;
+ ssize_t ver_specific_len;
+
+ /*
+ * We accept version 3 too so that the v3 parser can call this with
+ * and adjusted buffer for the latter part of a v3 cell, which is
+ * identical to a v2 cell.
+ */
+ if (!(intro->version == 2 ||
+ intro->version == 3)) {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "rend_service_parse_intro_for_v2() called with "
+ "bad version %d on INTRODUCE%d cell (this is a bug)",
+ intro->version,
+ (int)(intro->type));
+ goto err;
+ }
+
+ /* 7 == version, IP and port, DIGEST_LEN == id, 2 == key length */
+ if (plaintext_len < 7 + DIGEST_LEN + 2) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ extend_info = tor_malloc_zero(sizeof(extend_info_t));
+ tor_addr_from_ipv4n(&extend_info->addr, get_uint32(buf + 1));
+ extend_info->port = ntohs(get_uint16(buf + 5));
+ memcpy(extend_info->identity_digest, buf + 7, DIGEST_LEN);
+ extend_info->nickname[0] = '$';
+ base16_encode(extend_info->nickname + 1, sizeof(extend_info->nickname) - 1,
+ extend_info->identity_digest, DIGEST_LEN);
+ klen = ntohs(get_uint16(buf + 7 + DIGEST_LEN));
+
+ /* 7 == version, IP and port, DIGEST_LEN == id, 2 == key length */
+ if (plaintext_len < 7 + DIGEST_LEN + 2 + klen) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ extend_info->onion_key =
+ crypto_pk_asn1_decode((const char *)(buf + 7 + DIGEST_LEN + 2), klen);
+ if (!extend_info->onion_key) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "error decoding onion key in version %d "
+ "INTRODUCE%d cell",
+ intro->version,
+ (intro->type));
+ }
+
+ goto err;
+ }
+
+ ver_specific_len = 7+DIGEST_LEN+2+klen;
+
+ if (intro->version == 2) intro->u.v2.extend_info = extend_info;
+ else intro->u.v3.extend_info = extend_info;
+
+ return ver_specific_len;
+
+ err:
+ extend_info_free(extend_info);
+
return -1;
}
+/** Parse the version-specific parts of a v3 INTRODUCE1 or INTRODUCE2 cell
+ */
+
+static ssize_t
+rend_service_parse_intro_for_v3(
+ rend_intro_cell_t *intro,
+ const uint8_t *buf,
+ size_t plaintext_len,
+ char **err_msg_out)
+{
+ ssize_t adjust, v2_ver_specific_len, ts_offset;
+
+ /* This should only be called on v3 cells */
+ if (intro->version != 3) {
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "rend_service_parse_intro_for_v3() called with "
+ "bad version %d on INTRODUCE%d cell (this is a bug)",
+ intro->version,
+ (int)(intro->type));
+ goto err;
+ }
+
+ /*
+ * Check that we have at least enough to get auth_len:
+ *
+ * 1 octet for version, 1 for auth_type, 2 for auth_len
+ */
+ if (plaintext_len < 4) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "truncated plaintext of encrypted parted of "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ /*
+ * The rend_client_send_introduction() function over in rendclient.c is
+ * broken (i.e., fails to match the spec) in such a way that we can't
+ * change it without breaking the protocol. Specifically, it doesn't
+ * emit auth_len when auth-type is REND_NO_AUTH, so everything is off
+ * by two bytes after that. Calculate ts_offset and do everything from
+ * the timestamp on relative to that to handle this dain bramage.
+ */
+
+ intro->u.v3.auth_type = buf[1];
+ if (intro->u.v3.auth_type != REND_NO_AUTH) {
+ intro->u.v3.auth_len = ntohs(get_uint16(buf + 2));
+ ts_offset = 4 + intro->u.v3.auth_len;
+ } else {
+ intro->u.v3.auth_len = 0;
+ ts_offset = 2;
+ }
+
+ /* Check that auth len makes sense for this auth type */
+ if (intro->u.v3.auth_type == REND_BASIC_AUTH ||
+ intro->u.v3.auth_type == REND_STEALTH_AUTH) {
+ if (intro->u.v3.auth_len != REND_DESC_COOKIE_LEN) {
+ if (err_msg_out) {
+ tor_asprintf(err_msg_out,
+ "wrong auth data size %d for INTRODUCE%d cell, "
+ "should be %d",
+ (int)(intro->u.v3.auth_len),
+ (int)(intro->type),
+ REND_DESC_COOKIE_LEN);
+ }
+
+ goto err;
+ }
+ }
+
+ /* 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 "
+ "version %d INTRODUCE%d cell",
+ intro->version,
+ (int)(intro->type));
+ }
+
+ goto err;
+ }
+
+ if (intro->u.v3.auth_type != REND_NO_AUTH &&
+ intro->u.v3.auth_len > 0) {
+ /* Okay, we can go ahead and copy auth_data */
+ intro->u.v3.auth_data = tor_malloc(intro->u.v3.auth_len);
+ /*
+ * We know we had an auth_len field in this case, so 4 is
+ * always right.
+ */
+ memcpy(intro->u.v3.auth_data, buf + 4, intro->u.v3.auth_len);
+ }
+
+ /*
+ * 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
+ * adjust by 3 + ts_offset.
+ */
+ adjust = 3 + ts_offset;
+
+ v2_ver_specific_len =
+ rend_service_parse_intro_for_v2(intro,
+ buf + adjust, plaintext_len - adjust,
+ err_msg_out);
+
+ /* Success in v2 parser */
+ if (v2_ver_specific_len >= 0) return v2_ver_specific_len + adjust;
+ /* Failure in v2 parser; it will have provided an err_msg */
+ else return v2_ver_specific_len;
+
+ err:
+ return -1;
+}
+
+/** Table of parser functions for version-specific parts of an INTRODUCE2
+ * cell.
+ */
+
+static ssize_t
+ (*intro_version_handlers[])(
+ rend_intro_cell_t *,
+ const uint8_t *,
+ size_t,
+ char **) =
+{ rend_service_parse_intro_for_v0_or_v1,
+ rend_service_parse_intro_for_v0_or_v1,
+ rend_service_parse_intro_for_v2,
+ rend_service_parse_intro_for_v3 };
+
+/** Decrypt the encrypted part of an INTRODUCE1 or INTRODUCE2 cell,
+ * return 0 if successful, or < 0 and write an error message to
+ * *err_msg_out if provided.
+ */
+
+int
+rend_service_decrypt_intro(
+ rend_intro_cell_t *intro,
+ crypto_pk_t *key,
+ char **err_msg_out)
+{
+ char *err_msg = NULL;
+ uint8_t key_digest[DIGEST_LEN];
+ char service_id[REND_SERVICE_ID_LEN_BASE32+1];
+ ssize_t key_len;
+ uint8_t buf[RELAY_PAYLOAD_SIZE];
+ int result, status = 0;
+
+ if (!intro || !key) {
+ if (err_msg_out) {
+ err_msg =
+ tor_strdup("rend_service_decrypt_intro() called with bad "
+ "parameters");
+ }
+
+ status = -2;
+ goto err;
+ }
+
+ /* Make sure we have ciphertext */
+ if (!(intro->ciphertext) || intro->ciphertext_len <= 0) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "rend_intro_cell_t was missing ciphertext for "
+ "INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ status = -3;
+ goto err;
+ }
+
+ /* Check that this cell actually matches this service key */
+
+ /* first DIGEST_LEN bytes of request is intro or service pk digest */
+ crypto_pk_get_digest(key, (char *)key_digest);
+ if (tor_memneq(key_digest, intro->pk, DIGEST_LEN)) {
+ if (err_msg_out) {
+ base32_encode(service_id, REND_SERVICE_ID_LEN_BASE32 + 1,
+ (char*)(intro->pk), REND_SERVICE_ID_LEN);
+ tor_asprintf(&err_msg,
+ "got an INTRODUCE%d cell for the wrong service (%s)",
+ (int)(intro->type),
+ escaped(service_id));
+ }
+
+ status = -4;
+ goto err;
+ }
+
+ /* Make sure the encrypted part is long enough to decrypt */
+
+ key_len = crypto_pk_keysize(key);
+ if (intro->ciphertext_len < key_len) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "got an INTRODUCE%d cell with a truncated PK-encrypted "
+ "part",
+ (int)(intro->type));
+ }
+
+ status = -5;
+ goto err;
+ }
+
+ /* Decrypt the encrypted part */
+
+ note_crypto_pk_op(REND_SERVER);
+ result =
+ crypto_pk_private_hybrid_decrypt(
+ key, (char *)buf, sizeof(buf),
+ (const char *)(intro->ciphertext), intro->ciphertext_len,
+ PK_PKCS1_OAEP_PADDING, 1);
+ if (result < 0) {
+ if (err_msg_out) {
+ tor_asprintf(&err_msg,
+ "couldn't decrypt INTRODUCE%d cell",
+ (int)(intro->type));
+ }
+ status = -6;
+ goto err;
+ }
+ intro->plaintext_len = result;
+ intro->plaintext = tor_malloc(intro->plaintext_len);
+ memcpy(intro->plaintext, buf, intro->plaintext_len);
+
+ goto done;
+
+ err:
+ if (err_msg_out && !err_msg) {
+ tor_asprintf(&err_msg,
+ "unknown INTRODUCE%d error decrypting encrypted part",
+ intro ? (int)(intro->type) : -1);
+ }
+ if (status >= 0) status = -1;
+
+ done:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ /* clean up potentially sensitive material */
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(key_digest, 0, sizeof(key_digest));
+ memwipe(service_id, 0, sizeof(service_id));
+
+ return status;
+}
+
+/** Parse the plaintext of the encrypted part of an INTRODUCE1 or
+ * INTRODUCE2 cell, return 0 if successful, or < 0 and write an error
+ * message to *err_msg_out if provided.
+ */
+
+int
+rend_service_parse_intro_plaintext(
+ rend_intro_cell_t *intro,
+ char **err_msg_out)
+{
+ char *err_msg = NULL;
+ ssize_t ver_specific_len, ver_invariant_len;
+ uint8_t version;
+ int status = 0;
+
+ if (!intro) {
+ if (err_msg_out) {
+ err_msg =
+ tor_strdup("rend_service_parse_intro_plaintext() called with NULL "
+ "rend_intro_cell_t");
+ }
+
+ status = -2;
+ goto err;
+ }
+
+ /* Check that we have plaintext */
+ if (!(intro->plaintext) || intro->plaintext_len <= 0) {
+ if (err_msg_out) {
+ err_msg = tor_strdup("rend_intro_cell_t was missing plaintext");
+ }
+ status = -3;
+ goto err;
+ }
+
+ /* In all formats except v0, the first byte is a version number */
+ version = intro->plaintext[0];
+
+ /* v0 has no version byte (stupid...), so handle it as a fallback */
+ if (version > 3) version = 0;
+
+ /* Copy the version into the parsed cell structure */
+ intro->version = version;
+
+ /* Call the version-specific parser from the table */
+ ver_specific_len =
+ intro_version_handlers[version](intro,
+ intro->plaintext, intro->plaintext_len,
+ &err_msg);
+ if (ver_specific_len < 0) {
+ status = -4;
+ goto err;
+ }
+
+ /** The rendezvous cookie and Diffie-Hellman stuff are version-invariant
+ * and at the end of the plaintext of the encrypted part of the cell.
+ */
+
+ ver_invariant_len = intro->plaintext_len - ver_specific_len;
+ if (ver_invariant_len < REND_COOKIE_LEN + DH_KEY_LEN) {
+ tor_asprintf(&err_msg,
+ "decrypted plaintext of INTRODUCE%d cell was truncated (%ld bytes)",
+ (int)(intro->type),
+ (long)(intro->plaintext_len));
+ status = -5;
+ goto err;
+ } else if (ver_invariant_len > REND_COOKIE_LEN + DH_KEY_LEN) {
+ tor_asprintf(&err_msg,
+ "decrypted plaintext of INTRODUCE%d cell was too long (%ld bytes)",
+ (int)(intro->type),
+ (long)(intro->plaintext_len));
+ status = -6;
+ } else {
+ memcpy(intro->rc,
+ intro->plaintext + ver_specific_len,
+ REND_COOKIE_LEN);
+ memcpy(intro->dh,
+ intro->plaintext + ver_specific_len + REND_COOKIE_LEN,
+ DH_KEY_LEN);
+ }
+
+ /* Flag it as being fully parsed */
+ intro->parsed = 1;
+
+ goto done;
+
+ err:
+ if (err_msg_out && !err_msg) {
+ tor_asprintf(&err_msg,
+ "unknown INTRODUCE%d error parsing encrypted part",
+ intro ? (int)(intro->type) : -1);
+ }
+ if (status >= 0) status = -1;
+
+ done:
+ if (err_msg_out) *err_msg_out = err_msg;
+ else tor_free(err_msg);
+
+ return status;
+}
+
+/** Do validity checks on a parsed intro cell before decryption; some of
+ * these are not done in rend_service_begin_parse_intro() itself because
+ * they depend on a lot of other state and would make it hard to unit test.
+ * Returns >= 0 if successful or < 0 if the intro cell is invalid, and
+ * optionally writes out an error message for logging. If an err_msg
+ * pointer is provided, it is the caller's responsibility to free any
+ * provided message.
+ */
+
+int
+rend_service_validate_intro_early(const rend_intro_cell_t *intro,
+ char **err_msg_out)
+{
+ int status = 0;
+
+ if (!intro) {
+ if (err_msg_out)
+ *err_msg_out =
+ tor_strdup("NULL intro cell passed to "
+ "rend_service_validate_intro_early()");
+
+ status = -1;
+ goto err;
+ }
+
+ /* TODO */
+
+ err:
+ return status;
+}
+
+/** Do validity checks on a parsed intro cell after decryption; some of
+ * these are not done in rend_service_parse_intro_plaintext() itself because
+ * they depend on a lot of other state and would make it hard to unit test.
+ * Returns >= 0 if successful or < 0 if the intro cell is invalid, and
+ * optionally writes out an error message for logging. If an err_msg
+ * pointer is provided, it is the caller's responsibility to free any
+ * provided message.
+ */
+
+int
+rend_service_validate_intro_late(const rend_intro_cell_t *intro,
+ char **err_msg_out)
+{
+ int status = 0;
+
+ if (!intro) {
+ if (err_msg_out)
+ *err_msg_out =
+ tor_strdup("NULL intro cell passed to "
+ "rend_service_validate_intro_late()");
+
+ status = -1;
+ goto err;
+ }
+
+ if (intro->version == 3 && intro->parsed) {
+ if (!(intro->u.v3.auth_type == REND_NO_AUTH ||
+ intro->u.v3.auth_type == REND_BASIC_AUTH ||
+ intro->u.v3.auth_type == REND_STEALTH_AUTH)) {
+ /* This is an informative message, not an error, as in the old code */
+ if (err_msg_out)
+ tor_asprintf(err_msg_out,
+ "unknown authorization type %d",
+ intro->u.v3.auth_type);
+ }
+ }
+
+ err:
+ return status;
+}
+
/** Called when we fail building a rendezvous circuit at some point other
* than the last hop: launches a new circuit to the same rendezvous point.
*/
@@ -1424,7 +2268,7 @@ rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc)
origin_circuit_t *newcirc;
cpath_build_state_t *newstate, *oldstate;
- tor_assert(oldcirc->_base.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
+ tor_assert(oldcirc->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
/* Don't relaunch the same rend circ twice. */
if (oldcirc->hs_service_side_rend_circ_has_been_relaunched) {
@@ -1529,7 +2373,7 @@ rend_service_launch_establish_intro(rend_service_t *service,
sizeof(launched->rend_data->onion_address));
memcpy(launched->rend_data->rend_pk_digest, service->pk_digest, DIGEST_LEN);
launched->intro_key = crypto_pk_dup_key(intro->intro_key);
- if (launched->_base.state == CIRCUIT_STATE_OPEN)
+ if (launched->base_.state == CIRCUIT_STATE_OPEN)
rend_service_intro_has_opened(launched);
return 0;
}
@@ -1541,7 +2385,7 @@ count_established_intro_points(const char *query)
{
int num_ipos = 0;
circuit_t *circ;
- for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
if (!circ->marked_for_close &&
circ->state == CIRCUIT_STATE_OPEN &&
(circ->purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO ||
@@ -1570,7 +2414,7 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
int reason = END_CIRC_REASON_TORPROTOCOL;
crypto_pk_t *intro_key;
- tor_assert(circuit->_base.purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO);
+ tor_assert(circuit->base_.purpose == CIRCUIT_PURPOSE_S_ESTABLISH_INTRO);
#ifndef NON_ANONYMOUS_MODE_ENABLED
tor_assert(!(circuit->build_state->onehop_tunnel));
#endif
@@ -1583,8 +2427,8 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
service = rend_service_get_by_pk_digest(
circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_REND, "Unrecognized service ID %s on introduction circuit %d.",
- serviceid, circuit->_base.n_circ_id);
+ log_warn(LD_REND, "Unrecognized service ID %s on introduction circuit %u.",
+ serviceid, (unsigned)circuit->base_.n_circ_id);
reason = END_CIRC_REASON_NOSUCHSERVICE;
goto err;
}
@@ -1600,8 +2444,8 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
this case, we might as well close the thing. */
log_info(LD_CIRC|LD_REND, "We have just finished an introduction "
"circuit, but we already have enough. Closing it.");
- circuit_mark_for_close(TO_CIRCUIT(circuit), END_CIRC_REASON_NONE);
- return;
+ reason = END_CIRC_REASON_NONE;
+ goto err;
} else {
tor_assert(circuit->build_state->is_internal);
log_info(LD_CIRC|LD_REND, "We have just finished an introduction "
@@ -1622,13 +2466,13 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
}
circuit_has_opened(circuit);
- return;
+ goto done;
}
}
log_info(LD_REND,
- "Established circuit %d as introduction point for service %s",
- circuit->_base.n_circ_id, serviceid);
+ "Established circuit %u as introduction point for service %s",
+ (unsigned)circuit->base_.n_circ_id, serviceid);
/* Use the intro key instead of the service key in ESTABLISH_INTRO. */
intro_key = circuit->intro_key;
@@ -1643,7 +2487,7 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
len = r;
set_uint16(buf, htons((uint16_t)len));
len += 2;
- memcpy(auth, circuit->cpath->prev->handshake_digest, DIGEST_LEN);
+ memcpy(auth, circuit->cpath->prev->rend_circ_nonce, DIGEST_LEN);
memcpy(auth+DIGEST_LEN, "INTRODUCE", 9);
if (crypto_digest(buf+len, auth, DIGEST_LEN+9))
goto err;
@@ -1662,15 +2506,25 @@ rend_service_intro_has_opened(origin_circuit_t *circuit)
RELAY_COMMAND_ESTABLISH_INTRO,
buf, len, circuit->cpath->prev)<0) {
log_info(LD_GENERAL,
- "Couldn't send introduction request for service %s on circuit %d",
- serviceid, circuit->_base.n_circ_id);
+ "Couldn't send introduction request for service %s on circuit %u",
+ serviceid, (unsigned)circuit->base_.n_circ_id);
reason = END_CIRC_REASON_INTERNAL;
goto err;
}
- return;
+ /* We've attempted to use this circuit */
+ pathbias_count_use_attempt(circuit);
+
+ goto done;
+
err:
circuit_mark_for_close(TO_CIRCUIT(circuit), reason);
+ done:
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(auth, 0, sizeof(auth));
+ memwipe(serviceid, 0, sizeof(serviceid));
+
+ return;
}
/** Called when we get an INTRO_ESTABLISHED cell; mark the circuit as a
@@ -1686,7 +2540,7 @@ rend_service_intro_established(origin_circuit_t *circuit,
(void) request;
(void) request_len;
- if (circuit->_base.purpose != CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) {
+ if (circuit->base_.purpose != CIRCUIT_PURPOSE_S_ESTABLISH_INTRO) {
log_warn(LD_PROTOCOL,
"received INTRO_ESTABLISHED cell on non-intro circuit.");
goto err;
@@ -1695,8 +2549,8 @@ rend_service_intro_established(origin_circuit_t *circuit,
service = rend_service_get_by_pk_digest(
circuit->rend_data->rend_pk_digest);
if (!service) {
- log_warn(LD_REND, "Unknown service on introduction circuit %d.",
- circuit->_base.n_circ_id);
+ log_warn(LD_REND, "Unknown service on introduction circuit %u.",
+ (unsigned)circuit->base_.n_circ_id);
goto err;
}
service->desc_is_dirty = time(NULL);
@@ -1705,8 +2559,12 @@ rend_service_intro_established(origin_circuit_t *circuit,
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32 + 1,
circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN);
log_info(LD_REND,
- "Received INTRO_ESTABLISHED cell on circuit %d for service %s",
- circuit->_base.n_circ_id, serviceid);
+ "Received INTRO_ESTABLISHED cell on circuit %u for service %s",
+ (unsigned)circuit->base_.n_circ_id, serviceid);
+
+ /* Getting a valid INTRODUCE_ESTABLISHED means we've successfully
+ * used the circ */
+ pathbias_mark_use_success(circuit);
return 0;
err:
@@ -1727,13 +2585,21 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
char hexcookie[9];
int reason;
- tor_assert(circuit->_base.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
+ tor_assert(circuit->base_.purpose == CIRCUIT_PURPOSE_S_CONNECT_REND);
tor_assert(circuit->cpath);
tor_assert(circuit->build_state);
#ifndef NON_ANONYMOUS_MODE_ENABLED
tor_assert(!(circuit->build_state->onehop_tunnel));
#endif
tor_assert(circuit->rend_data);
+
+ /* Declare the circuit dirty to avoid reuse, and for path-bias */
+ if (!circuit->base_.timestamp_dirty)
+ circuit->base_.timestamp_dirty = time(NULL);
+
+ /* This may be redundant */
+ pathbias_count_use_attempt(circuit);
+
hop = circuit->build_state->service_pending_final_cpath_ref->cpath;
base16_encode(hexcookie,9,circuit->rend_data->rend_cookie,4);
@@ -1741,9 +2607,9 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
circuit->rend_data->rend_pk_digest, REND_SERVICE_ID_LEN);
log_info(LD_REND,
- "Done building circuit %d to rendezvous with "
+ "Done building circuit %u to rendezvous with "
"cookie %s for service %s",
- circuit->_base.n_circ_id, hexcookie, serviceid);
+ (unsigned)circuit->base_.n_circ_id, hexcookie, serviceid);
/* Clear the 'in-progress HS circ has timed out' flag for
* consistency with what happens on the client side; this line has
@@ -1777,13 +2643,13 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
/* All we need to do is send a RELAY_RENDEZVOUS1 cell... */
memcpy(buf, circuit->rend_data->rend_cookie, REND_COOKIE_LEN);
- if (crypto_dh_get_public(hop->dh_handshake_state,
+ if (crypto_dh_get_public(hop->rend_dh_handshake_state,
buf+REND_COOKIE_LEN, DH_KEY_LEN)<0) {
log_warn(LD_GENERAL,"Couldn't get DH public key.");
reason = END_CIRC_REASON_INTERNAL;
goto err;
}
- memcpy(buf+REND_COOKIE_LEN+DH_KEY_LEN, hop->handshake_digest,
+ memcpy(buf+REND_COOKIE_LEN+DH_KEY_LEN, hop->rend_circ_nonce,
DIGEST_LEN);
/* Send the cell */
@@ -1796,8 +2662,8 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
goto err;
}
- crypto_dh_free(hop->dh_handshake_state);
- hop->dh_handshake_state = NULL;
+ crypto_dh_free(hop->rend_dh_handshake_state);
+ hop->rend_dh_handshake_state = NULL;
/* Append the cpath entry. */
hop->state = CPATH_STATE_OPEN;
@@ -1813,9 +2679,16 @@ rend_service_rendezvous_has_opened(origin_circuit_t *circuit)
/* Change the circuit purpose. */
circuit_change_purpose(TO_CIRCUIT(circuit), CIRCUIT_PURPOSE_S_REND_JOINED);
- return;
+ goto done;
+
err:
circuit_mark_for_close(TO_CIRCUIT(circuit), reason);
+ done:
+ memwipe(buf, 0, sizeof(buf));
+ memwipe(serviceid, 0, sizeof(serviceid));
+ memwipe(hexcookie, 0, sizeof(hexcookie));
+
+ return;
}
/*
@@ -1876,7 +2749,7 @@ find_intro_point(origin_circuit_t *circ)
if (service == NULL) return NULL;
SMARTLIST_FOREACH(service->intro_nodes, rend_intro_point_t *, intro_point,
- if (crypto_pk_cmp_keys(intro_point->intro_key, circ->intro_key) == 0) {
+ if (crypto_pk_eq_keys(intro_point->intro_key, circ->intro_key)) {
return intro_point;
});
@@ -1912,7 +2785,7 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
char *hs_dir_ip;
const node_t *node;
hs_dir = smartlist_get(responsible_dirs, j);
- if (smartlist_digest_isin(renddesc->successful_uploads,
+ if (smartlist_contains_digest(renddesc->successful_uploads,
hs_dir->identity_digest))
/* Don't upload descriptor if we succeeded in doing so last time. */
continue;
@@ -1929,7 +2802,8 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
directory_initiate_command_routerstatus(hs_dir,
DIR_PURPOSE_UPLOAD_RENDDESC_V2,
ROUTER_PURPOSE_GENERAL,
- 1, NULL, desc->desc_str,
+ DIRIND_ANONYMOUS, NULL,
+ desc->desc_str,
strlen(desc->desc_str), 0);
base32_encode(desc_id_base32, sizeof(desc_id_base32),
desc->desc_id, DIGEST_LEN);
@@ -1946,7 +2820,8 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
hs_dir->or_port);
tor_free(hs_dir_ip);
/* Remember successful upload to this router for next time. */
- if (!smartlist_digest_isin(successful_uploads, hs_dir->identity_digest))
+ if (!smartlist_contains_digest(successful_uploads,
+ hs_dir->identity_digest))
smartlist_add(successful_uploads, hs_dir->identity_digest);
}
smartlist_clear(responsible_dirs);
@@ -1964,7 +2839,7 @@ directory_post_to_hs_dir(rend_service_descriptor_t *renddesc,
if (!renddesc->successful_uploads)
renddesc->successful_uploads = smartlist_new();
SMARTLIST_FOREACH(successful_uploads, const char *, c, {
- if (!smartlist_digest_isin(renddesc->successful_uploads, c)) {
+ if (!smartlist_contains_digest(renddesc->successful_uploads, c)) {
char *hsdir_id = tor_memdup(c, DIGEST_LEN);
smartlist_add(renddesc->successful_uploads, hsdir_id);
}
@@ -2091,11 +2966,7 @@ upload_service_descriptor(rend_service_t *service)
static int
intro_point_accepted_intro_count(rend_intro_point_t *intro)
{
- if (intro->accepted_intro_rsa_parts == NULL) {
- return 0;
- } else {
- return digestmap_size(intro->accepted_intro_rsa_parts);
- }
+ return intro->accepted_introduce2_count;
}
/** Return non-zero iff <b>intro</b> should 'expire' now (i.e. we
@@ -2201,7 +3072,8 @@ rend_services_introduce(void)
if (intro->time_expiring + INTRO_POINT_EXPIRATION_GRACE_PERIOD > now) {
/* This intro point has completely expired. Remove it, and
* mark the circuit for close if it's still alive. */
- if (intro_circ != NULL) {
+ if (intro_circ != NULL &&
+ intro_circ->base_.purpose != CIRCUIT_PURPOSE_PATH_BIAS_TESTING) {
circuit_mark_for_close(TO_CIRCUIT(intro_circ),
END_CIRC_REASON_FINISHED);
}
@@ -2299,7 +3171,7 @@ rend_services_introduce(void)
j < (int)n_intro_points_to_open;
++j) { /* XXXX remove casts */
router_crn_flags_t flags = CRN_NEED_UPTIME|CRN_NEED_DESC;
- if (get_options()->_AllowInvalid & ALLOW_INVALID_INTRODUCTION)
+ if (get_options()->AllowInvalid_ & ALLOW_INVALID_INTRODUCTION)
flags |= CRN_ALLOW_INVALID;
node = router_choose_random_node(intro_nodes,
options->ExcludeNodes, flags);
@@ -2436,7 +3308,7 @@ rend_service_dump_stats(int severity)
for (i=0; i < smartlist_len(rend_service_list); ++i) {
service = smartlist_get(rend_service_list, i);
- log(severity, LD_GENERAL, "Service configured in \"%s\":",
+ tor_log(severity, LD_GENERAL, "Service configured in \"%s\":",
service->directory);
for (j=0; j < smartlist_len(service->intro_nodes); ++j) {
intro = smartlist_get(service->intro_nodes, j);
@@ -2444,12 +3316,12 @@ rend_service_dump_stats(int severity)
circ = find_intro_circuit(intro, service->pk_digest);
if (!circ) {
- log(severity, LD_GENERAL, " Intro point %d at %s: no circuit",
+ tor_log(severity, LD_GENERAL, " Intro point %d at %s: no circuit",
j, safe_name);
continue;
}
- log(severity, LD_GENERAL, " Intro point %d at %s: circuit is %s",
- j, safe_name, circuit_state_to_string(circ->_base.state));
+ tor_log(severity, LD_GENERAL, " Intro point %d at %s: circuit is %s",
+ j, safe_name, circuit_state_to_string(circ->base_.state));
}
}
}
@@ -2468,7 +3340,7 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
smartlist_t *matching_ports;
rend_service_port_config_t *chosen_port;
- tor_assert(circ->_base.purpose == CIRCUIT_PURPOSE_S_REND_JOINED);
+ tor_assert(circ->base_.purpose == CIRCUIT_PURPOSE_S_REND_JOINED);
tor_assert(circ->rend_data);
log_debug(LD_REND,"beginning to hunt for addr/port");
base32_encode(serviceid, REND_SERVICE_ID_LEN_BASE32+1,
@@ -2477,26 +3349,26 @@ rend_service_set_connection_addr_port(edge_connection_t *conn,
circ->rend_data->rend_pk_digest);
if (!service) {
log_warn(LD_REND, "Couldn't find any service associated with pk %s on "
- "rendezvous circuit %d; closing.",
- serviceid, circ->_base.n_circ_id);
+ "rendezvous circuit %u; closing.",
+ serviceid, (unsigned)circ->base_.n_circ_id);
return -1;
}
matching_ports = smartlist_new();
SMARTLIST_FOREACH(service->ports, rend_service_port_config_t *, p,
{
- if (conn->_base.port == p->virtual_port) {
+ if (conn->base_.port == p->virtual_port) {
smartlist_add(matching_ports, p);
}
});
chosen_port = smartlist_choose(matching_ports);
smartlist_free(matching_ports);
if (chosen_port) {
- tor_addr_copy(&conn->_base.addr, &chosen_port->real_addr);
- conn->_base.port = chosen_port->real_port;
+ tor_addr_copy(&conn->base_.addr, &chosen_port->real_addr);
+ conn->base_.port = chosen_port->real_port;
return 0;
}
log_info(LD_REND, "No virtual port mapping exists for port %d on service %s",
- conn->_base.port,serviceid);
+ conn->base_.port,serviceid);
return -1;
}
diff --git a/src/or/rendservice.h b/src/or/rendservice.h
index e5848785a..40198b07e 100644
--- a/src/or/rendservice.h
+++ b/src/or/rendservice.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,12 +9,70 @@
* \brief Header file for rendservice.c.
**/
-#ifndef _TOR_RENDSERVICE_H
-#define _TOR_RENDSERVICE_H
+#ifndef TOR_RENDSERVICE_H
+#define TOR_RENDSERVICE_H
+
+#include "or.h"
+
+typedef struct rend_intro_cell_s rend_intro_cell_t;
+
+#ifdef RENDSERVICE_PRIVATE
+
+/* This can be used for both INTRODUCE1 and INTRODUCE2 */
+
+struct rend_intro_cell_s {
+ /* Is this an INTRODUCE1 or INTRODUCE2? (set to 1 or 2) */
+ uint8_t type;
+ /* Public key digest */
+ uint8_t pk[DIGEST_LEN];
+ /* Optionally, store ciphertext here */
+ uint8_t *ciphertext;
+ ssize_t ciphertext_len;
+ /* Optionally, store plaintext */
+ uint8_t *plaintext;
+ ssize_t plaintext_len;
+ /* Have we parsed the plaintext? */
+ uint8_t parsed;
+ /* intro protocol version (0, 1, 2 or 3) */
+ uint8_t version;
+ /* Version-specific parts */
+ union {
+ struct {
+ /* Rendezvous point nickname */
+ uint8_t rp[20];
+ } v0;
+ struct {
+ /* Rendezvous point nickname or hex-encoded key digest */
+ uint8_t rp[42];
+ } v1;
+ struct {
+ /* The extend_info_t struct has everything v2 uses */
+ extend_info_t *extend_info;
+ } v2;
+ struct {
+ /* Auth type used */
+ uint8_t auth_type;
+ /* Length of auth data */
+ uint16_t auth_len;
+ /* Auth data */
+ uint8_t *auth_data;
+ /* Rendezvous point's IP address/port, identity digest and onion key */
+ extend_info_t *extend_info;
+ } v3;
+ } u;
+ /* Rendezvous cookie */
+ uint8_t rc[REND_COOKIE_LEN];
+ /* Diffie-Hellman data */
+ uint8_t dh[DH_KEY_LEN];
+};
+
+#endif
int num_rend_services(void);
int rend_config_services(const or_options_t *options, int validate_only);
-int rend_service_load_keys(void);
+int rend_service_load_all_keys(void);
+void rend_services_add_filenames_to_lists(smartlist_t *open_lst,
+ smartlist_t *stat_lst);
void rend_services_introduce(void);
void rend_consider_services_upload(time_t now);
void rend_hsdir_routers_changed(void);
@@ -27,6 +85,20 @@ int rend_service_intro_established(origin_circuit_t *circuit,
void rend_service_rendezvous_has_opened(origin_circuit_t *circuit);
int rend_service_introduce(origin_circuit_t *circuit, const uint8_t *request,
size_t request_len);
+int rend_service_decrypt_intro(rend_intro_cell_t *request,
+ crypto_pk_t *key,
+ char **err_msg_out);
+void rend_service_free_intro(rend_intro_cell_t *request);
+rend_intro_cell_t * rend_service_begin_parse_intro(const uint8_t *request,
+ size_t request_len,
+ uint8_t type,
+ char **err_msg_out);
+int rend_service_parse_intro_plaintext(rend_intro_cell_t *intro,
+ char **err_msg_out);
+int rend_service_validate_intro_early(const rend_intro_cell_t *intro,
+ char **err_msg_out);
+int rend_service_validate_intro_late(const rend_intro_cell_t *intro,
+ char **err_msg_out);
void rend_service_relaunch_rendezvous(origin_circuit_t *oldcirc);
int rend_service_set_connection_addr_port(edge_connection_t *conn,
origin_circuit_t *circ);
diff --git a/src/or/rephist.c b/src/or/rephist.c
index 3b0d9dd35..5446c25e3 100644
--- a/src/or/rephist.c
+++ b/src/or/rephist.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -160,7 +160,7 @@ get_link_history(const char *from_id, const char *to_id)
/** Helper: free storage held by a single link history entry. */
static void
-_free_link_history(void *val)
+free_link_history_(void *val)
{
rephist_total_alloc -= sizeof(link_history_t);
tor_free(val);
@@ -171,7 +171,7 @@ static void
free_or_history(void *_hist)
{
or_history_t *hist = _hist;
- digestmap_free(hist->link_history_map, _free_link_history);
+ digestmap_free(hist->link_history_map, free_link_history_);
rephist_total_alloc -= sizeof(or_history_t);
rephist_total_num--;
tor_free(hist);
@@ -310,9 +310,10 @@ rep_hist_note_router_reachable(const char *id, const tor_addr_t *at_addr,
tor_assert(hist);
tor_assert((!at_addr && !at_port) || (at_addr && at_port));
- addr_changed = at_addr &&
+ addr_changed = at_addr && !tor_addr_is_null(&hist->last_reached_addr) &&
tor_addr_compare(at_addr, &hist->last_reached_addr, CMP_EXACT) != 0;
- port_changed = at_port && at_port != hist->last_reached_port;
+ port_changed = at_port && hist->last_reached_port &&
+ at_port != hist->last_reached_port;
if (!started_tracking_stability)
started_tracking_stability = time(NULL);
@@ -422,6 +423,21 @@ rep_hist_note_router_unreachable(const char *id, time_t when)
}
}
+/** Mark a router with ID <b>id</b> as non-Running, and retroactively declare
+ * that it has never been running: give it no stability and no WFU. */
+void
+rep_hist_make_router_pessimal(const char *id, time_t when)
+{
+ or_history_t *hist = get_or_history(id);
+ tor_assert(hist);
+
+ rep_hist_note_router_unreachable(id, when);
+ mark_or_down(hist, when, 1);
+
+ hist->weighted_run_length = 0;
+ hist->weighted_uptime = 0;
+}
+
/** Helper: Discount all old MTBF data, if it is time to do so. Return
* the time at which we should next discount MTBF data. */
time_t
@@ -648,7 +664,7 @@ rep_hist_dump_stats(time_t now, int severity)
rep_history_clean(now - get_options()->RephistTrackTime);
- log(severity, LD_HIST, "--------------- Dumping history information:");
+ tor_log(severity, LD_HIST, "--------------- Dumping history information:");
for (orhist_it = digestmap_iter_init(history_map);
!digestmap_iter_done(orhist_it);
@@ -673,7 +689,7 @@ rep_hist_dump_stats(time_t now, int severity)
} else {
uptime=1.0;
}
- log(severity, LD_HIST,
+ tor_log(severity, LD_HIST,
"OR %s [%s]: %ld/%ld good connections; uptime %ld/%ld sec (%.2f%%); "
"wmtbf %lu:%02lu:%02lu",
name1, hexdigest1,
@@ -707,7 +723,7 @@ rep_hist_dump_stats(time_t now, int severity)
else
len += ret;
}
- log(severity, LD_HIST, "%s", buffer);
+ tor_log(severity, LD_HIST, "%s", buffer);
}
}
}
@@ -863,126 +879,6 @@ rep_hist_record_mtbf_data(time_t now, int missing_means_down)
return -1;
}
-/** Format the current tracked status of the router in <b>hist</b> at time
- * <b>now</b> for analysis; return it in a newly allocated string. */
-static char *
-rep_hist_format_router_status(or_history_t *hist, time_t now)
-{
- char sor_buf[ISO_TIME_LEN+1];
- char sod_buf[ISO_TIME_LEN+1];
- double wfu;
- double mtbf;
- int up = 0, down = 0;
- char *cp = NULL;
-
- if (hist->start_of_run) {
- format_iso_time(sor_buf, hist->start_of_run);
- up = 1;
- }
- if (hist->start_of_downtime) {
- format_iso_time(sod_buf, hist->start_of_downtime);
- down = 1;
- }
-
- wfu = get_weighted_fractional_uptime(hist, now);
- mtbf = get_stability(hist, now);
- tor_asprintf(&cp,
- "%s%s%s"
- "%s%s%s"
- "wfu %0.3f\n"
- " weighted-time %lu\n"
- " weighted-uptime %lu\n"
- "mtbf %0.1f\n"
- " weighted-run-length %lu\n"
- " total-run-weights %f\n",
- up?"uptime-started ":"", up?sor_buf:"", up?" UTC\n":"",
- down?"downtime-started ":"", down?sod_buf:"", down?" UTC\n":"",
- wfu,
- hist->total_weighted_time,
- hist->weighted_uptime,
- mtbf,
- hist->weighted_run_length,
- hist->total_run_weights
- );
- return cp;
-}
-
-/** The last stability analysis document that we created, or NULL if we never
- * have created one. */
-static char *last_stability_doc = NULL;
-/** The last time we created a stability analysis document, or 0 if we never
- * have created one. */
-static time_t built_last_stability_doc_at = 0;
-/** Shortest allowable time between building two stability documents. */
-#define MAX_STABILITY_DOC_BUILD_RATE (3*60)
-
-/** Return a pointer to a NUL-terminated document describing our view of the
- * stability of the routers we've been tracking. Return NULL on failure. */
-const char *
-rep_hist_get_router_stability_doc(time_t now)
-{
- char *result;
- smartlist_t *chunks;
- if (built_last_stability_doc_at + MAX_STABILITY_DOC_BUILD_RATE > now)
- return last_stability_doc;
-
- if (!history_map)
- return NULL;
-
- tor_free(last_stability_doc);
- chunks = smartlist_new();
-
- if (rep_hist_have_measured_enough_stability()) {
- smartlist_add(chunks, tor_strdup("we-have-enough-measurements\n"));
- } else {
- smartlist_add(chunks, tor_strdup("we-do-not-have-enough-measurements\n"));
- }
-
- DIGESTMAP_FOREACH(history_map, id, or_history_t *, hist) {
- const node_t *node;
- char dbuf[BASE64_DIGEST_LEN+1];
- char *info;
- digest_to_base64(dbuf, id);
- node = node_get_by_id(id);
- if (node) {
- char ip[INET_NTOA_BUF_LEN+1];
- char tbuf[ISO_TIME_LEN+1];
- time_t published = node_get_published_on(node);
- node_get_address_string(node,ip,sizeof(ip));
- if (published > 0)
- format_iso_time(tbuf, published);
- else
- strlcpy(tbuf, "???", sizeof(tbuf));
- smartlist_add_asprintf(chunks,
- "router %s %s %s\n"
- "published %s\n"
- "relevant-flags %s%s%s\n"
- "declared-uptime %ld\n",
- dbuf, node_get_nickname(node), ip,
- tbuf,
- node->is_running ? "Running " : "",
- node->is_valid ? "Valid " : "",
- node->ri && node->ri->is_hibernating ? "Hibernating " : "",
- node_get_declared_uptime(node));
- } else {
- smartlist_add_asprintf(chunks,
- "router %s {no descriptor}\n", dbuf);
- }
- info = rep_hist_format_router_status(hist, now);
- if (info)
- smartlist_add(chunks, info);
-
- } DIGESTMAP_FOREACH_END;
-
- result = smartlist_join_strings(chunks, "", 0, NULL);
- SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
- smartlist_free(chunks);
-
- last_stability_doc = result;
- built_last_stability_doc_at = time(NULL);
- return result;
-}
-
/** Helper: return the first j >= i such that !strcmpstart(sl[j], prefix) and
* such that no line sl[k] with i <= k < j starts with "R ". Return -1 if no
* such line exists. */
@@ -1035,7 +931,7 @@ correct_time(time_t t, time_t now, time_t stored_at, time_t started_measuring)
return 0;
else {
long run_length = stored_at - t;
- t = now - run_length;
+ t = (time_t)(now - run_length);
if (t < started_measuring)
t = started_measuring;
return t;
@@ -1136,7 +1032,7 @@ rep_hist_load_mtbf_data(time_t now)
wfu_timebuf[0] = '\0';
if (format == 1) {
- n = sscanf(line, "%40s %ld %lf S=%10s %8s",
+ n = tor_sscanf(line, "%40s %ld %lf S=%10s %8s",
hexbuf, &wrl, &trw, mtbf_timebuf, mtbf_timebuf+11);
if (n != 3 && n != 5) {
log_warn(LD_HIST, "Couldn't scan line %s", escaped(line));
@@ -1153,7 +1049,7 @@ rep_hist_load_mtbf_data(time_t now)
wfu_idx = find_next_with(lines, i+1, "+WFU ");
if (mtbf_idx >= 0) {
const char *mtbfline = smartlist_get(lines, mtbf_idx);
- n = sscanf(mtbfline, "+MTBF %lu %lf S=%10s %8s",
+ n = tor_sscanf(mtbfline, "+MTBF %lu %lf S=%10s %8s",
&wrl, &trw, mtbf_timebuf, mtbf_timebuf+11);
if (n == 2 || n == 4) {
have_mtbf = 1;
@@ -1164,7 +1060,7 @@ rep_hist_load_mtbf_data(time_t now)
}
if (wfu_idx >= 0) {
const char *wfuline = smartlist_get(lines, wfu_idx);
- n = sscanf(wfuline, "+WFU %lu %lu S=%10s %8s",
+ n = tor_sscanf(wfuline, "+WFU %lu %lu S=%10s %8s",
&wt_uptime, &total_wt_time,
wfu_timebuf, wfu_timebuf+11);
if (n == 2 || n == 4) {
@@ -1196,7 +1092,7 @@ rep_hist_load_mtbf_data(time_t now)
hist->start_of_run = correct_time(start_of_run, now, stored_at,
tracked_since);
if (hist->start_of_run < latest_possible_start + wrl)
- latest_possible_start = hist->start_of_run - wrl;
+ latest_possible_start = (time_t)(hist->start_of_run - wrl);
hist->weighted_run_length = wrl;
hist->total_run_weights = trw;
@@ -1531,10 +1427,10 @@ rep_hist_get_bandwidth_lines(void)
const char *desc = NULL;
size_t len;
- /* opt [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */
+ /* [dirreq-](read|write)-history yyyy-mm-dd HH:MM:SS (n s) n,n,n... */
/* The n,n,n part above. Largest representation of a uint64_t is 20 chars
* long, plus the comma. */
-#define MAX_HIST_VALUE_LEN 21*NUM_TOTALS
+#define MAX_HIST_VALUE_LEN (21*NUM_TOTALS)
len = (67+MAX_HIST_VALUE_LEN)*4;
buf = tor_malloc_zero(len);
cp = buf;
@@ -1846,22 +1742,20 @@ rep_hist_note_used_port(time_t now, uint16_t port)
add_predicted_port(now, port);
}
-/** For this long after we've seen a request for a given port, assume that
- * we'll want to make connections to the same port in the future. */
-#define PREDICTED_CIRCS_RELEVANCE_TIME (60*60)
-
/** Return a newly allocated pointer to a list of uint16_t * for ports that
* are likely to be asked for in the near future.
*/
smartlist_t *
rep_hist_get_predicted_ports(time_t now)
{
+ int predicted_circs_relevance_time;
smartlist_t *out = smartlist_new();
tor_assert(predicted_ports_list);
+ predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime;
/* clean out obsolete entries */
SMARTLIST_FOREACH_BEGIN(predicted_ports_list, predicted_port_t *, pp) {
- if (pp->time + PREDICTED_CIRCS_RELEVANCE_TIME < now) {
+ if (pp->time + predicted_circs_relevance_time < now) {
log_debug(LD_CIRC, "Expiring predicted port %d", pp->port);
rephist_total_alloc -= sizeof(predicted_port_t);
@@ -1928,14 +1822,17 @@ int
rep_hist_get_predicted_internal(time_t now, int *need_uptime,
int *need_capacity)
{
+ int predicted_circs_relevance_time;
+ predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime;
+
if (!predicted_internal_time) { /* initialize it */
predicted_internal_time = now;
predicted_internal_uptime_time = now;
predicted_internal_capacity_time = now;
}
- if (predicted_internal_time + PREDICTED_CIRCS_RELEVANCE_TIME < now)
+ if (predicted_internal_time + predicted_circs_relevance_time < now)
return 0; /* too long ago */
- if (predicted_internal_uptime_time + PREDICTED_CIRCS_RELEVANCE_TIME >= now)
+ if (predicted_internal_uptime_time + predicted_circs_relevance_time >= now)
*need_uptime = 1;
// Always predict that we need capacity.
*need_capacity = 1;
@@ -1947,8 +1844,11 @@ rep_hist_get_predicted_internal(time_t now, int *need_uptime,
int
any_predicted_circuits(time_t now)
{
+ int predicted_circs_relevance_time;
+ predicted_circs_relevance_time = get_options()->PredictedPortsRelevanceTime;
+
return smartlist_len(predicted_ports_list) ||
- predicted_internal_time + PREDICTED_CIRCS_RELEVANCE_TIME >= now;
+ predicted_internal_time + predicted_circs_relevance_time >= now;
}
/** Return 1 if we have no need for circuits currently, else return 0. */
@@ -2042,7 +1942,7 @@ note_crypto_pk_op(pk_op_t operation)
void
dump_pk_ops(int severity)
{
- log(severity, LD_HIST,
+ tor_log(severity, LD_HIST,
"PK operations: %lu directory objects signed, "
"%lu directory objects verified, "
"%lu routerdescs signed, "
@@ -2131,7 +2031,7 @@ rep_hist_exit_stats_term(void)
* but works fine for sorting an array of port numbers, which is what we use
* it for. */
static int
-_compare_int(const void *x, const void *y)
+compare_int_(const void *x, const void *y)
{
return (*(int*)x - *(int*)y);
}
@@ -2218,7 +2118,7 @@ rep_hist_format_exit_stats(time_t now)
other_streams = total_streams;
/* Sort the ports; this puts them out of sync with top_bytes, but we
* won't be using top_bytes again anyway */
- qsort(top_ports, top_elements, sizeof(int), _compare_int);
+ qsort(top_ports, top_elements, sizeof(int), compare_int_);
for (j = 0; j < top_elements; j++) {
cur_port = top_ports[j];
if (exit_bytes_written[cur_port] > 0) {
@@ -2297,7 +2197,7 @@ rep_hist_format_exit_stats(time_t now)
time_t
rep_hist_exit_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_exit_stats_interval)
return 0; /* Not initialized. */
@@ -2313,19 +2213,12 @@ rep_hist_exit_stats_write(time_t now)
rep_hist_reset_exit_stats(now);
/* Try to write to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "exit-stats", str, "exit port statistics");
}
- filename = get_datadir_fname2("stats", "exit-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write exit port statistics to disk!");
done:
tor_free(str);
- tor_free(statsdir);
- tor_free(filename);
return start_of_exit_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -2418,7 +2311,7 @@ rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
return;
start_of_interval = (circ->timestamp_created.tv_sec >
start_of_buffer_stats_interval) ?
- circ->timestamp_created.tv_sec :
+ (time_t)circ->timestamp_created.tv_sec :
start_of_buffer_stats_interval;
interval_length = (int) (end_of_interval - start_of_interval);
if (interval_length <= 0)
@@ -2440,7 +2333,7 @@ rep_hist_buffer_stats_add_circ(circuit_t *circ, time_t end_of_interval)
/** Sorting helper: return -1, 1, or 0 based on comparison of two
* circ_buffer_stats_t */
static int
-_buffer_stats_compare_entries(const void **_a, const void **_b)
+buffer_stats_compare_entries_(const void **_a, const void **_b)
{
const circ_buffer_stats_t *a = *_a, *b = *_b;
if (a->processed_cells < b->processed_cells)
@@ -2505,7 +2398,7 @@ rep_hist_format_buffer_stats(time_t now)
number_of_circuits = smartlist_len(circuits_for_buffer_stats);
if (number_of_circuits > 0) {
smartlist_sort(circuits_for_buffer_stats,
- _buffer_stats_compare_entries);
+ buffer_stats_compare_entries_);
i = 0;
SMARTLIST_FOREACH_BEGIN(circuits_for_buffer_stats,
circ_buffer_stats_t *, stat)
@@ -2582,7 +2475,7 @@ time_t
rep_hist_buffer_stats_write(time_t now)
{
circuit_t *circ;
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_buffer_stats_interval)
return 0; /* Not initialized. */
@@ -2590,7 +2483,7 @@ rep_hist_buffer_stats_write(time_t now)
goto done; /* Not ready to write */
/* Add open circuits to the history. */
- for (circ = _circuit_get_global_list(); circ; circ = circ->next) {
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head) {
rep_hist_buffer_stats_add_circ(circ, now);
}
@@ -2601,19 +2494,12 @@ rep_hist_buffer_stats_write(time_t now)
rep_hist_reset_buffer_stats(now);
/* Try to write to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "buffer-stats", str, "buffer statistics");
}
- filename = get_datadir_fname2("stats", "buffer-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write buffer stats to disk!");
done:
tor_free(str);
- tor_free(filename);
- tor_free(statsdir);
return start_of_buffer_stats_interval + WRITE_STATS_INTERVAL;
}
@@ -2725,7 +2611,7 @@ rep_hist_format_desc_stats(time_t now)
time_t
rep_hist_desc_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *filename = NULL, *str = NULL;
if (!start_of_served_descs_stats_interval)
return 0; /* We're not collecting stats. */
@@ -2735,10 +2621,8 @@ rep_hist_desc_stats_write(time_t now)
str = rep_hist_format_desc_stats(now);
tor_assert(str != NULL);
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (check_or_create_data_subdir("stats") < 0) {
+ goto done;
}
filename = get_datadir_fname2("stats", "served-desc-stats");
if (append_bytes_to_file(filename, str, strlen(str), 0) < 0)
@@ -2747,7 +2631,6 @@ rep_hist_desc_stats_write(time_t now)
rep_hist_reset_desc_stats(now);
done:
- tor_free(statsdir);
tor_free(filename);
tor_free(str);
return start_of_served_descs_stats_interval + WRITE_STATS_INTERVAL;
@@ -2965,7 +2848,7 @@ rep_hist_format_conn_stats(time_t now)
time_t
rep_hist_conn_stats_write(time_t now)
{
- char *statsdir = NULL, *filename = NULL, *str = NULL;
+ char *str = NULL;
if (!start_of_conn_stats_interval)
return 0; /* Not initialized. */
@@ -2979,22 +2862,55 @@ rep_hist_conn_stats_write(time_t now)
rep_hist_reset_conn_stats(now);
/* Try to write to disk. */
- statsdir = get_datadir_fname("stats");
- if (check_private_dir(statsdir, CPD_CREATE, get_options()->User) < 0) {
- log_warn(LD_HIST, "Unable to create stats/ directory!");
- goto done;
+ if (!check_or_create_data_subdir("stats")) {
+ write_to_data_subdir("stats", "conn-stats", str, "connection statistics");
}
- filename = get_datadir_fname2("stats", "conn-stats");
- if (write_str_to_file(filename, str, 0) < 0)
- log_warn(LD_HIST, "Unable to write conn stats to disk!");
done:
tor_free(str);
- tor_free(filename);
- tor_free(statsdir);
return start_of_conn_stats_interval + WRITE_STATS_INTERVAL;
}
+/** Internal statistics to track how many requests of each type of
+ * handshake we've received, and how many we've assigned to cpuworkers.
+ * Useful for seeing trends in cpu load.
+ * @{ */
+STATIC int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
+STATIC int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1] = {0};
+/**@}*/
+
+/** A new onionskin (using the <b>type</b> handshake) has arrived. */
+void
+rep_hist_note_circuit_handshake_requested(uint16_t type)
+{
+ if (type <= MAX_ONION_HANDSHAKE_TYPE)
+ onion_handshakes_requested[type]++;
+}
+
+/** We've sent an onionskin (using the <b>type</b> handshake) to a
+ * cpuworker. */
+void
+rep_hist_note_circuit_handshake_assigned(uint16_t type)
+{
+ if (type <= MAX_ONION_HANDSHAKE_TYPE)
+ onion_handshakes_assigned[type]++;
+}
+
+/** Log our onionskin statistics since the last time we were called. */
+void
+rep_hist_log_circuit_handshake_stats(time_t now)
+{
+ (void)now;
+ log_notice(LD_HEARTBEAT, "Circuit handshake stats since last time: "
+ "%d/%d TAP, %d/%d NTor.",
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_TAP],
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP],
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_NTOR],
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR]);
+ memset(onion_handshakes_assigned, 0, sizeof(onion_handshakes_assigned));
+ memset(onion_handshakes_requested, 0, sizeof(onion_handshakes_requested));
+}
+
/** Free all storage held by the OR/link history caches, by the
* bandwidth history arrays, by the port history, or by statistics . */
void
@@ -3003,11 +2919,11 @@ rep_hist_free_all(void)
digestmap_free(history_map, free_or_history);
tor_free(read_array);
tor_free(write_array);
- tor_free(last_stability_doc);
+ tor_free(dir_read_array);
+ tor_free(dir_write_array);
tor_free(exit_bytes_read);
tor_free(exit_bytes_written);
tor_free(exit_streams);
- built_last_stability_doc_at = 0;
predicted_ports_free();
bidi_map_free();
diff --git a/src/or/rephist.h b/src/or/rephist.h
index d47724edb..cd6231e6e 100644
--- a/src/or/rephist.h
+++ b/src/or/rephist.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,8 @@
* \brief Header file for rephist.c.
**/
-#ifndef _TOR_REPHIST_H
-#define _TOR_REPHIST_H
+#ifndef TOR_REPHIST_H
+#define TOR_REPHIST_H
void rep_hist_init(void);
void rep_hist_note_connect_failed(const char* nickname, time_t when);
@@ -24,6 +24,8 @@ void rep_hist_dump_stats(time_t now, int severity);
void rep_hist_note_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_bytes_written(size_t num_bytes, time_t when);
+void rep_hist_make_router_pessimal(const char *id, time_t when);
+
void rep_hist_note_dir_bytes_read(size_t num_bytes, time_t when);
void rep_hist_note_dir_bytes_written(size_t num_bytes, time_t when);
@@ -45,7 +47,6 @@ double rep_hist_get_stability(const char *id, time_t when);
double rep_hist_get_weighted_fractional_uptime(const char *id, time_t when);
long rep_hist_get_weighted_time_known(const char *id, time_t when);
int rep_hist_have_measured_enough_stability(void);
-const char *rep_hist_get_router_stability_doc(time_t now);
void rep_hist_note_used_port(time_t now, uint16_t port);
smartlist_t *rep_hist_get_predicted_ports(time_t now);
@@ -62,8 +63,6 @@ int rep_hist_circbuilding_dormant(time_t now);
void note_crypto_pk_op(pk_op_t operation);
void dump_pk_ops(int severity);
-void rep_hist_free_all(void);
-
void rep_hist_exit_stats_init(time_t now);
void rep_hist_reset_exit_stats(time_t now);
void rep_hist_exit_stats_term(void);
@@ -96,5 +95,11 @@ char *rep_hist_format_conn_stats(time_t now);
time_t rep_hist_conn_stats_write(time_t now);
void rep_hist_conn_stats_term(void);
+void rep_hist_note_circuit_handshake_requested(uint16_t type);
+void rep_hist_note_circuit_handshake_assigned(uint16_t type);
+void rep_hist_log_circuit_handshake_stats(time_t now);
+
+void rep_hist_free_all(void);
+
#endif
diff --git a/src/or/replaycache.c b/src/or/replaycache.c
new file mode 100644
index 000000000..90f87c12d
--- /dev/null
+++ b/src/or/replaycache.c
@@ -0,0 +1,204 @@
+ /* Copyright (c) 2012-2013, The Tor Project, Inc. */
+ /* See LICENSE for licensing information */
+
+/*
+ * \file replaycache.c
+ *
+ * \brief Self-scrubbing replay cache for rendservice.c
+ */
+
+#define REPLAYCACHE_PRIVATE
+
+#include "or.h"
+#include "replaycache.h"
+
+/** Free the replaycache r and all of its entries.
+ */
+
+void
+replaycache_free(replaycache_t *r)
+{
+ if (!r) {
+ log_info(LD_BUG, "replaycache_free() called on NULL");
+ return;
+ }
+
+ if (r->digests_seen) digestmap_free(r->digests_seen, tor_free_);
+
+ tor_free(r);
+}
+
+/** Allocate a new, empty replay detection cache, where horizon is the time
+ * for entries to age out and interval is the time after which the cache
+ * should be scrubbed for old entries.
+ */
+
+replaycache_t *
+replaycache_new(time_t horizon, time_t interval)
+{
+ replaycache_t *r = NULL;
+
+ if (horizon < 0) {
+ log_info(LD_BUG, "replaycache_new() called with negative"
+ " horizon parameter");
+ goto err;
+ }
+
+ if (interval < 0) {
+ log_info(LD_BUG, "replaycache_new() called with negative interval"
+ " parameter");
+ interval = 0;
+ }
+
+ r = tor_malloc(sizeof(*r));
+ r->scrub_interval = interval;
+ r->scrubbed = 0;
+ r->horizon = horizon;
+ r->digests_seen = digestmap_new();
+
+ err:
+ return r;
+}
+
+/** See documentation for replaycache_add_and_test()
+ */
+
+STATIC int
+replaycache_add_and_test_internal(
+ time_t present, replaycache_t *r, const void *data, size_t len,
+ time_t *elapsed)
+{
+ int rv = 0;
+ char digest[DIGEST_LEN];
+ time_t *access_time;
+
+ /* sanity check */
+ 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;
+ }
+
+ /* compute digest */
+ crypto_digest(digest, (const char *)data, len);
+
+ /* check map */
+ access_time = digestmap_get(r->digests_seen, digest);
+
+ /* seen before? */
+ if (access_time != NULL) {
+ /*
+ * If it's far enough in the past, no hit. If the horizon is zero, we
+ * never expire.
+ */
+ if (*access_time >= present - r->horizon || r->horizon == 0) {
+ /* replay cache hit, return 1 */
+ rv = 1;
+ /* If we want to output an elapsed time, do so */
+ if (elapsed) {
+ if (present >= *access_time) {
+ *elapsed = present - *access_time;
+ } else {
+ /* We shouldn't really be seeing hits from the future, but... */
+ *elapsed = 0;
+ }
+ }
+ }
+ /*
+ * If it's ahead of the cached time, update
+ */
+ if (*access_time < present) {
+ *access_time = present;
+ }
+ } else {
+ /* No, so no hit and update the digest map with the current time */
+ access_time = tor_malloc(sizeof(*access_time));
+ *access_time = present;
+ digestmap_set(r->digests_seen, digest, access_time);
+ }
+
+ /* now scrub the cache if it's time */
+ replaycache_scrub_if_needed_internal(present, r);
+
+ done:
+ return rv;
+}
+
+/** See documentation for replaycache_scrub_if_needed()
+ */
+
+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;
+
+ /* sanity check */
+ if (!r || !(r->digests_seen)) {
+ log_info(LD_BUG, "replaycache_scrub_if_needed_internal() called with"
+ " stupid parameters; please fix this.");
+ return;
+ }
+
+ /* scrub time yet? (scrubbed == 0 indicates never scrubbed before) */
+ if (present - r->scrubbed < r->scrub_interval && r->scrubbed > 0) return;
+
+ /* if we're never expiring, don't bother scrubbing */
+ if (r->horizon == 0) return;
+
+ /* okay, scrub time */
+ itr = digestmap_iter_init(r->digests_seen);
+ while (!digestmap_iter_done(itr)) {
+ digestmap_iter_get(itr, &digest, &valp);
+ access_time = (time_t *)valp;
+ /* 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 */
+ tor_free(access_time);
+ } else {
+ /* Just advance the iterator */
+ itr = digestmap_iter_next(r->digests_seen, itr);
+ }
+ }
+
+ /* update scrubbed timestamp */
+ if (present > r->scrubbed) r->scrubbed = present;
+}
+
+/** Test the buffer of length len point to by data against the replay cache r;
+ * the digest of the buffer will be added to the cache at the current time,
+ * and the function will return 1 if it was already seen within the cache's
+ * horizon, or 0 otherwise.
+ */
+
+int
+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);
+}
+
+/** Like replaycache_add_and_test(), but if it's a hit also return the time
+ * elapsed since this digest was last seen.
+ */
+
+int
+replaycache_add_test_and_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);
+}
+
+/** Scrub aged entries out of r if sufficiently long has elapsed since r was
+ * last scrubbed.
+ */
+
+void
+replaycache_scrub_if_needed(replaycache_t *r)
+{
+ replaycache_scrub_if_needed_internal(time(NULL), r);
+}
+
diff --git a/src/or/replaycache.h b/src/or/replaycache.h
new file mode 100644
index 000000000..cd713fe89
--- /dev/null
+++ b/src/or/replaycache.h
@@ -0,0 +1,66 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file replaycache.h
+ * \brief Header file for replaycache.c.
+ **/
+
+#ifndef TOR_REPLAYCACHE_H
+#define TOR_REPLAYCACHE_H
+
+typedef struct replaycache_s replaycache_t;
+
+#ifdef REPLAYCACHE_PRIVATE
+
+struct replaycache_s {
+ /* Scrub interval */
+ time_t scrub_interval;
+ /* Last scrubbed */
+ time_t scrubbed;
+ /*
+ * Horizon
+ * (don't return true on digests in the cache but older than this)
+ */
+ time_t horizon;
+ /*
+ * Digest map: keys are digests, values are times the digest was last seen
+ */
+ digestmap_t *digests_seen;
+};
+
+#endif /* REPLAYCACHE_PRIVATE */
+
+/* replaycache_t free/new */
+
+void replaycache_free(replaycache_t *r);
+replaycache_t * replaycache_new(time_t horizon, time_t interval);
+
+#ifdef REPLAYCACHE_PRIVATE
+
+/*
+ * replaycache_t internal functions:
+ *
+ * These take the time to treat as the present as an argument for easy unit
+ * testing. For everything else, use the wrappers below instead.
+ */
+
+STATIC int replaycache_add_and_test_internal(
+ time_t present, replaycache_t *r, const void *data, size_t len,
+ time_t *elapsed);
+STATIC void replaycache_scrub_if_needed_internal(
+ time_t present, replaycache_t *r);
+
+#endif /* REPLAYCACHE_PRIVATE */
+
+/*
+ * replaycache_t methods
+ */
+
+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, 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 1ace8e249..2cdbb0c8b 100644..100755
--- a/src/or/router.c
+++ b/src/or/router.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#define ROUTER_PRIVATE
@@ -13,6 +13,7 @@
#include "config.h"
#include "connection.h"
#include "control.h"
+#include "crypto_curve25519.h"
#include "directory.h"
#include "dirserv.h"
#include "dns.h"
@@ -27,6 +28,9 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
+#include "statefile.h"
+#include "transports.h"
+#include "routerset.h"
/**
* \file router.c
@@ -51,6 +55,13 @@ static crypto_pk_t *onionkey=NULL;
/** Previous private onionskin decryption key: used to decode CREATE cells
* generated by clients that have an older version of our descriptor. */
static crypto_pk_t *lastonionkey=NULL;
+#ifdef CURVE25519_ENABLED
+/** Current private ntor secret key: used to perform the ntor handshake. */
+static curve25519_keypair_t curve25519_onion_key;
+/** Previous private ntor secret key: used to perform the ntor handshake
+ * with clients that have an older version of our descriptor. */
+static curve25519_keypair_t last_curve25519_onion_key;
+#endif
/** Private server "identity key": used to sign directory info and TLS
* certificates. Never changes. */
static crypto_pk_t *server_identitykey=NULL;
@@ -84,7 +95,7 @@ static authority_cert_t *legacy_key_certificate = NULL;
static void
set_onion_key(crypto_pk_t *k)
{
- if (onionkey && !crypto_pk_cmp_keys(onionkey, k)) {
+ if (onionkey && crypto_pk_eq_keys(onionkey, k)) {
/* k is already our onion key; free it and return */
crypto_pk_free(k);
return;
@@ -123,6 +134,55 @@ dup_onion_keys(crypto_pk_t **key, crypto_pk_t **last)
tor_mutex_release(key_lock);
}
+#ifdef CURVE25519_ENABLED
+/** Return the current secret onion key for the ntor handshake. Must only
+ * be called from the main thread. */
+static const curve25519_keypair_t *
+get_current_curve25519_keypair(void)
+{
+ return &curve25519_onion_key;
+}
+/** Return a map from KEYID (the key itself) to keypairs for use in the ntor
+ * handshake. Must only be called from the main thread. */
+di_digest256_map_t *
+construct_ntor_key_map(void)
+{
+ di_digest256_map_t *m = NULL;
+
+ dimap_add_entry(&m,
+ curve25519_onion_key.pubkey.public_key,
+ tor_memdup(&curve25519_onion_key,
+ sizeof(curve25519_keypair_t)));
+ if (!tor_mem_is_zero((const char*)
+ last_curve25519_onion_key.pubkey.public_key,
+ CURVE25519_PUBKEY_LEN)) {
+ dimap_add_entry(&m,
+ last_curve25519_onion_key.pubkey.public_key,
+ tor_memdup(&last_curve25519_onion_key,
+ sizeof(curve25519_keypair_t)));
+ }
+
+ return m;
+}
+/** Helper used to deallocate a di_digest256_map_t returned by
+ * construct_ntor_key_map. */
+static void
+ntor_key_map_free_helper(void *arg)
+{
+ curve25519_keypair_t *k = arg;
+ memwipe(k, 0, sizeof(*k));
+ tor_free(k);
+}
+/** Release all storage from a keymap returned by construct_ntor_key_map. */
+void
+ntor_key_map_free(di_digest256_map_t *map)
+{
+ if (!map)
+ return;
+ dimap_free(map, ntor_key_map_free_helper);
+}
+#endif
+
/** Return the time when the onion key was last set. This is either the time
* when the process launched, or the time of the most recent key rotation since
* the process launched.
@@ -152,12 +212,11 @@ assert_identity_keys_ok(void)
if (public_server_mode(get_options())) {
/* assert that we have set the client and server keys to be equal */
tor_assert(server_identitykey);
- tor_assert(0==crypto_pk_cmp_keys(client_identitykey, server_identitykey));
+ tor_assert(crypto_pk_eq_keys(client_identitykey, server_identitykey));
} else {
/* assert that we have set the client and server keys to be unequal */
if (server_identitykey)
- tor_assert(0!=crypto_pk_cmp_keys(client_identitykey,
- server_identitykey));
+ tor_assert(!crypto_pk_eq_keys(client_identitykey, server_identitykey));
}
}
@@ -173,11 +232,12 @@ get_server_identity_key(void)
return server_identitykey;
}
-/** Return true iff the server identity key has been set. */
+/** Return true iff we are a server and the server identity key
+ * has been set. */
int
server_identity_key_is_set(void)
{
- return server_identitykey != NULL;
+ return server_mode(get_options()) && server_identitykey != NULL;
}
/** Set the current client identity key to <b>k</b>.
@@ -251,11 +311,18 @@ void
rotate_onion_key(void)
{
char *fname, *fname_prev;
- crypto_pk_t *prkey;
+ crypto_pk_t *prkey = NULL;
or_state_t *state = get_or_state();
+#ifdef CURVE25519_ENABLED
+ curve25519_keypair_t new_curve25519_keypair;
+#endif
time_t now;
fname = get_datadir_fname2("keys", "secret_onion_key");
fname_prev = get_datadir_fname2("keys", "secret_onion_key.old");
+ if (file_status(fname) == FN_FILE) {
+ if (replace_file(fname, fname_prev))
+ goto error;
+ }
if (!(prkey = crypto_pk_new())) {
log_err(LD_GENERAL,"Error constructing rotated onion key");
goto error;
@@ -264,19 +331,38 @@ rotate_onion_key(void)
log_err(LD_BUG,"Error generating onion key");
goto error;
}
+ if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
+ log_err(LD_FS,"Couldn't write generated onion key to \"%s\".", fname);
+ goto error;
+ }
+#ifdef CURVE25519_ENABLED
+ tor_free(fname);
+ tor_free(fname_prev);
+ fname = get_datadir_fname2("keys", "secret_onion_key_ntor");
+ fname_prev = get_datadir_fname2("keys", "secret_onion_key_ntor.old");
+ if (curve25519_keypair_generate(&new_curve25519_keypair, 1) < 0)
+ goto error;
if (file_status(fname) == FN_FILE) {
if (replace_file(fname, fname_prev))
goto error;
}
- if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
- log_err(LD_FS,"Couldn't write generated onion key to \"%s\".", fname);
+ if (curve25519_keypair_write_to_file(&new_curve25519_keypair, fname,
+ "onion") < 0) {
+ log_err(LD_FS,"Couldn't write curve25519 onion key to \"%s\".",fname);
goto error;
}
+#endif
log_info(LD_GENERAL, "Rotating onion key");
tor_mutex_acquire(key_lock);
crypto_pk_free(lastonionkey);
lastonionkey = onionkey;
onionkey = prkey;
+#ifdef CURVE25519_ENABLED
+ memcpy(&last_curve25519_onion_key, &curve25519_onion_key,
+ sizeof(curve25519_keypair_t));
+ memcpy(&curve25519_onion_key, &new_curve25519_keypair,
+ sizeof(curve25519_keypair_t));
+#endif
now = time(NULL);
state->LastRotatedOnionKey = onionkey_set_at = now;
tor_mutex_release(key_lock);
@@ -288,6 +374,9 @@ rotate_onion_key(void)
if (prkey)
crypto_pk_free(prkey);
done:
+#ifdef CURVE25519_ENABLED
+ memwipe(&new_curve25519_keypair, 0, sizeof(new_curve25519_keypair));
+#endif
tor_free(fname);
tor_free(fname_prev);
}
@@ -303,14 +392,14 @@ init_key_from_file(const char *fname, int generate, int severity)
crypto_pk_t *prkey = NULL;
if (!(prkey = crypto_pk_new())) {
- log(severity, LD_GENERAL,"Error constructing key");
+ tor_log(severity, LD_GENERAL,"Error constructing key");
goto error;
}
switch (file_status(fname)) {
case FN_DIR:
case FN_ERROR:
- log(severity, LD_FS,"Can't read key from \"%s\"", fname);
+ tor_log(severity, LD_FS,"Can't read key from \"%s\"", fname);
goto error;
case FN_NOENT:
if (generate) {
@@ -318,8 +407,8 @@ init_key_from_file(const char *fname, int generate, int severity)
if (try_locking(get_options(), 0)<0) {
/* Make sure that --list-fingerprint only creates new keys
* if there is no possibility for a deadlock. */
- log(severity, LD_FS, "Another Tor process has locked \"%s\". Not "
- "writing any new keys.", fname);
+ tor_log(severity, LD_FS, "Another Tor process has locked \"%s\". "
+ "Not writing any new keys.", fname);
/*XXXX The 'other process' might make a key in a second or two;
* maybe we should wait for it. */
goto error;
@@ -328,16 +417,16 @@ init_key_from_file(const char *fname, int generate, int severity)
log_info(LD_GENERAL, "No key found in \"%s\"; generating fresh key.",
fname);
if (crypto_pk_generate_key(prkey)) {
- log(severity, LD_GENERAL,"Error generating onion key");
+ tor_log(severity, LD_GENERAL,"Error generating onion key");
goto error;
}
if (crypto_pk_check_key(prkey) <= 0) {
- log(severity, LD_GENERAL,"Generated key seems invalid");
+ tor_log(severity, LD_GENERAL,"Generated key seems invalid");
goto error;
}
log_info(LD_GENERAL, "Generated key seems valid");
if (crypto_pk_write_private_key_to_filename(prkey, fname)) {
- log(severity, LD_FS,
+ tor_log(severity, LD_FS,
"Couldn't write generated key to \"%s\".", fname);
goto error;
}
@@ -347,7 +436,7 @@ init_key_from_file(const char *fname, int generate, int severity)
return prkey;
case FN_FILE:
if (crypto_pk_read_private_key_from_filename(prkey, fname)) {
- log(severity, LD_GENERAL,"Error loading private key.");
+ tor_log(severity, LD_GENERAL,"Error loading private key.");
goto error;
}
return prkey;
@@ -361,6 +450,77 @@ init_key_from_file(const char *fname, int generate, int severity)
return NULL;
}
+#ifdef CURVE25519_ENABLED
+/** Load a curve25519 keypair from the file <b>fname</b>, writing it into
+ * <b>keys_out</b>. If the file isn't found and <b>generate</b> is true,
+ * create a new keypair and write it into the file. If there are errors, log
+ * them at level <b>severity</b>. Generate files using <b>tag</b> in their
+ * ASCII wrapper. */
+static int
+init_curve25519_keypair_from_file(curve25519_keypair_t *keys_out,
+ const char *fname,
+ int generate,
+ int severity,
+ const char *tag)
+{
+ switch (file_status(fname)) {
+ case FN_DIR:
+ case FN_ERROR:
+ tor_log(severity, LD_FS,"Can't read key from \"%s\"", fname);
+ goto error;
+ case FN_NOENT:
+ if (generate) {
+ if (!have_lockfile()) {
+ if (try_locking(get_options(), 0)<0) {
+ /* Make sure that --list-fingerprint only creates new keys
+ * if there is no possibility for a deadlock. */
+ tor_log(severity, LD_FS, "Another Tor process has locked \"%s\". "
+ "Not writing any new keys.", fname);
+ /*XXXX The 'other process' might make a key in a second or two;
+ * maybe we should wait for it. */
+ goto error;
+ }
+ }
+ log_info(LD_GENERAL, "No key found in \"%s\"; generating fresh key.",
+ fname);
+ if (curve25519_keypair_generate(keys_out, 1) < 0)
+ goto error;
+ if (curve25519_keypair_write_to_file(keys_out, fname, tag)<0) {
+ tor_log(severity, LD_FS,
+ "Couldn't write generated key to \"%s\".", fname);
+ memset(keys_out, 0, sizeof(*keys_out));
+ goto error;
+ }
+ } else {
+ log_info(LD_GENERAL, "No key found in \"%s\"", fname);
+ }
+ return 0;
+ case FN_FILE:
+ {
+ char *tag_in=NULL;
+ if (curve25519_keypair_read_from_file(keys_out, &tag_in, fname) < 0) {
+ tor_log(severity, LD_GENERAL,"Error loading private key.");
+ tor_free(tag_in);
+ goto error;
+ }
+ if (!tag_in || strcmp(tag_in, tag)) {
+ tor_log(severity, LD_GENERAL,"Unexpected tag %s on private key.",
+ escaped(tag_in));
+ tor_free(tag_in);
+ goto error;
+ }
+ tor_free(tag_in);
+ return 0;
+ }
+ default:
+ tor_assert(0);
+ }
+
+ error:
+ return -1;
+}
+#endif
+
/** Try to load the vote-signing private key and certificate for being a v3
* directory authority, and make sure they match. If <b>legacy</b>, load a
* legacy key/cert set for emergency key migration; otherwise load the regular
@@ -397,7 +557,7 @@ load_authority_keyset(int legacy, crypto_pk_t **key_out,
log_warn(LD_DIR, "Unable to parse certificate in %s", fname);
goto done;
}
- if (crypto_pk_cmp_keys(signing_key, parsed->signing_key) != 0) {
+ if (!crypto_pk_eq_keys(signing_key, parsed->signing_key)) {
log_warn(LD_DIR, "Stored signing key does not match signing key in "
"certificate");
goto done;
@@ -472,14 +632,14 @@ v3_authority_check_key_expiry(void)
return;
if (time_left <= 0) {
- log(badness, LD_DIR, "Your v3 authority certificate has expired."
- " Generate a new one NOW.");
+ tor_log(badness, LD_DIR, "Your v3 authority certificate has expired."
+ " Generate a new one NOW.");
} else if (time_left <= 24*60*60) {
- log(badness, LD_DIR, "Your v3 authority certificate expires in %d hours;"
- " Generate a new one NOW.", time_left/(60*60));
+ tor_log(badness, LD_DIR, "Your v3 authority certificate expires in %d "
+ "hours; Generate a new one NOW.", time_left/(60*60));
} else {
- log(badness, LD_DIR, "Your v3 authority certificate expires in %d days;"
- " Generate a new one soon.", time_left/(24*60*60));
+ tor_log(badness, LD_DIR, "Your v3 authority certificate expires in %d "
+ "days; Generate a new one soon.", time_left/(24*60*60));
}
last_warned = now;
}
@@ -489,11 +649,96 @@ v3_authority_check_key_expiry(void)
int
router_initialize_tls_context(void)
{
- return tor_tls_context_init(public_server_mode(get_options()),
+ unsigned int flags = 0;
+ const or_options_t *options = get_options();
+ int lifetime = options->SSLKeyLifetime;
+ if (public_server_mode(options))
+ flags |= TOR_TLS_CTX_IS_PUBLIC_SERVER;
+ if (options->TLSECGroup) {
+ if (!strcasecmp(options->TLSECGroup, "P256"))
+ flags |= TOR_TLS_CTX_USE_ECDHE_P256;
+ else if (!strcasecmp(options->TLSECGroup, "P224"))
+ flags |= TOR_TLS_CTX_USE_ECDHE_P224;
+ }
+ if (!lifetime) { /* we should guess a good ssl cert lifetime */
+
+ /* choose between 5 and 365 days, and round to the day */
+ lifetime = 5*24*3600 + crypto_rand_int(361*24*3600);
+ lifetime -= lifetime % (24*3600);
+
+ if (crypto_rand_int(2)) {
+ /* Half the time we expire at midnight, and half the time we expire
+ * one second before midnight. (Some CAs wobble their expiry times a
+ * bit in practice, perhaps to reduce collision attacks; see ticket
+ * 8443 for details about observed certs in the wild.) */
+ lifetime--;
+ }
+ }
+
+ /* It's ok to pass lifetime in as an unsigned int, since
+ * config_parse_interval() checked it. */
+ return tor_tls_context_init(flags,
get_tlsclient_identity_key(),
- server_mode(get_options()) ?
+ server_mode(options) ?
get_server_identity_key() : NULL,
- MAX_SSL_KEY_LIFETIME_ADVERTISED);
+ (unsigned int)lifetime);
+}
+
+/** Compute fingerprint (or hashed fingerprint if hashed is 1) and write
+ * it to 'fingerprint' (or 'hashed-fingerprint'). Return 0 on success, or
+ * -1 if Tor should die,
+ */
+STATIC int
+router_write_fingerprint(int hashed)
+{
+ char *keydir = NULL, *cp = NULL;
+ const char *fname = hashed ? "hashed-fingerprint" :
+ "fingerprint";
+ char fingerprint[FINGERPRINT_LEN+1];
+ const or_options_t *options = get_options();
+ char *fingerprint_line = NULL;
+ int result = -1;
+
+ keydir = get_datadir_fname(fname);
+ log_info(LD_GENERAL,"Dumping %sfingerprint to \"%s\"...",
+ hashed ? "hashed " : "", keydir);
+ if (!hashed) {
+ if (crypto_pk_get_fingerprint(get_server_identity_key(),
+ fingerprint, 0) < 0) {
+ log_err(LD_GENERAL,"Error computing fingerprint");
+ goto done;
+ }
+ } else {
+ if (crypto_pk_get_hashed_fingerprint(get_server_identity_key(),
+ fingerprint) < 0) {
+ log_err(LD_GENERAL,"Error computing hashed fingerprint");
+ goto done;
+ }
+ }
+
+ tor_asprintf(&fingerprint_line, "%s %s\n", options->Nickname, fingerprint);
+
+ /* Check whether we need to write the (hashed-)fingerprint file. */
+
+ cp = read_file_to_str(keydir, RFTS_IGNORE_MISSING, NULL);
+ if (!cp || strcmp(cp, fingerprint_line)) {
+ if (write_str_to_file(keydir, fingerprint_line, 0)) {
+ log_err(LD_FS, "Error writing %sfingerprint line to file",
+ hashed ? "hashed " : "");
+ goto done;
+ }
+ }
+
+ log_notice(LD_GENERAL, "Your Tor %s identity key fingerprint is '%s %s'",
+ hashed ? "bridge's hashed" : "server's", options->Nickname,
+ fingerprint);
+
+ result = 0;
+ done:
+ tor_free(cp);
+ tor_free(keydir);
+ tor_free(fingerprint_line);
+ return result;
}
/** Initialize all OR private keys, and the TLS context, as necessary.
@@ -504,18 +749,14 @@ int
init_keys(void)
{
char *keydir;
- char fingerprint[FINGERPRINT_LEN+1];
- /*nickname<space>fp\n\0 */
- char fingerprint_line[MAX_NICKNAME_LEN+FINGERPRINT_LEN+3];
const char *mydesc;
crypto_pk_t *prkey;
char digest[DIGEST_LEN];
char v3_digest[DIGEST_LEN];
- char *cp;
const or_options_t *options = get_options();
dirinfo_type_t type;
time_t now = time(NULL);
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
int v3_digest_set = 0;
authority_cert_t *cert = NULL;
@@ -628,12 +869,35 @@ init_keys(void)
keydir = get_datadir_fname2("keys", "secret_onion_key.old");
if (!lastonionkey && file_status(keydir) == FN_FILE) {
- prkey = init_key_from_file(keydir, 1, LOG_ERR);
+ prkey = init_key_from_file(keydir, 1, LOG_ERR); /* XXXX Why 1? */
if (prkey)
lastonionkey = prkey;
}
tor_free(keydir);
+#ifdef CURVE25519_ENABLED
+ {
+ /* 2b. Load curve25519 onion keys. */
+ int r;
+ keydir = get_datadir_fname2("keys", "secret_onion_key_ntor");
+ r = init_curve25519_keypair_from_file(&curve25519_onion_key,
+ keydir, 1, LOG_ERR, "onion");
+ tor_free(keydir);
+ if (r<0)
+ return -1;
+
+ keydir = get_datadir_fname2("keys", "secret_onion_key_ntor.old");
+ if (tor_mem_is_zero((const char *)
+ last_curve25519_onion_key.pubkey.public_key,
+ CURVE25519_PUBKEY_LEN) &&
+ file_status(keydir) == FN_FILE) {
+ init_curve25519_keypair_from_file(&last_curve25519_onion_key,
+ keydir, 0, LOG_ERR, "onion");
+ }
+ tor_free(keydir);
+ }
+#endif
+
/* 3. Initialize link key and TLS context. */
if (router_initialize_tls_context() < 0) {
log_err(LD_GENERAL,"Error initializing TLS context");
@@ -671,47 +935,23 @@ init_keys(void)
* we don't really need new keys yet so the descriptor doesn't
* change and the old one is still fresh. */
log_info(LD_GENERAL, "Couldn't add own descriptor to directory "
- "after key init: %s. This is usually not a problem.",
+ "after key init: %s This is usually not a problem.",
m?m:"<unknown error>");
}
}
}
}
- /* 5. Dump fingerprint to 'fingerprint' */
- keydir = get_datadir_fname("fingerprint");
- log_info(LD_GENERAL,"Dumping fingerprint to \"%s\"...",keydir);
- if (crypto_pk_get_fingerprint(get_server_identity_key(),
- fingerprint, 0) < 0) {
- log_err(LD_GENERAL,"Error computing fingerprint");
- tor_free(keydir);
+ /* 5. Dump fingerprint and possibly hashed fingerprint to files. */
+ if (router_write_fingerprint(0)) {
+ log_err(LD_FS, "Error writing fingerprint to file");
return -1;
}
- tor_assert(strlen(options->Nickname) <= MAX_NICKNAME_LEN);
- if (tor_snprintf(fingerprint_line, sizeof(fingerprint_line),
- "%s %s\n",options->Nickname, fingerprint) < 0) {
- log_err(LD_GENERAL,"Error writing fingerprint line");
- tor_free(keydir);
+ if (!public_server_mode(options) && router_write_fingerprint(1)) {
+ log_err(LD_FS, "Error writing hashed fingerprint to file");
return -1;
}
- /* Check whether we need to write the fingerprint file. */
- cp = NULL;
- if (file_status(keydir) == FN_FILE)
- cp = read_file_to_str(keydir, 0, NULL);
- if (!cp || strcmp(cp, fingerprint_line)) {
- if (write_str_to_file(keydir, fingerprint_line, 0)) {
- log_err(LD_FS, "Error writing fingerprint line to file");
- tor_free(keydir);
- tor_free(cp);
- return -1;
- }
- }
- tor_free(cp);
- tor_free(keydir);
- log(LOG_NOTICE, LD_GENERAL,
- "Your Tor server's identity key fingerprint is '%s %s'",
- options->Nickname, fingerprint);
if (!authdir_mode(options))
return 0;
/* 6. [authdirserver only] load approved-routers file */
@@ -721,44 +961,43 @@ init_keys(void)
}
/* 6b. [authdirserver only] add own key to approved directories. */
crypto_pk_get_digest(get_server_identity_key(), digest);
- type = ((options->V1AuthoritativeDir ? V1_DIRINFO : NO_DIRINFO) |
- (options->V2AuthoritativeDir ? V2_DIRINFO : NO_DIRINFO) |
- (options->V3AuthoritativeDir ?
+ type = ((options->V3AuthoritativeDir ?
(V3_DIRINFO|MICRODESC_DIRINFO|EXTRAINFO_DIRINFO) : NO_DIRINFO) |
- (options->BridgeAuthoritativeDir ? BRIDGE_DIRINFO : NO_DIRINFO) |
- (options->HSAuthoritativeDir ? HIDSERV_DIRINFO : NO_DIRINFO));
+ (options->BridgeAuthoritativeDir ? BRIDGE_DIRINFO : NO_DIRINFO));
ds = router_get_trusteddirserver_by_digest(digest);
if (!ds) {
- ds = add_trusted_dir_server(options->Nickname, NULL,
+ ds = trusted_dir_server_new(options->Nickname, NULL,
router_get_advertised_dir_port(options, 0),
router_get_advertised_or_port(options),
digest,
v3_digest,
- type);
+ type, 0.0);
if (!ds) {
log_err(LD_GENERAL,"We want to be a directory authority, but we "
"couldn't add ourselves to the authority list. Failing.");
return -1;
}
+ dir_server_add(ds);
}
if (ds->type != type) {
log_warn(LD_DIR, "Configured authority type does not match authority "
- "type in DirServer list. Adjusting. (%d v %d)",
+ "type in DirAuthority list. Adjusting. (%d v %d)",
type, ds->type);
ds->type = type;
}
if (v3_digest_set && (ds->type & V3_DIRINFO) &&
tor_memneq(v3_digest, ds->v3_identity_digest, DIGEST_LEN)) {
log_warn(LD_DIR, "V3 identity key does not match identity declared in "
- "DirServer line. Adjusting.");
+ "DirAuthority line. Adjusting.");
memcpy(ds->v3_identity_digest, v3_digest, DIGEST_LEN);
}
if (cert) { /* add my own cert to the list of known certs */
log_info(LD_DIR, "adding my own v3 cert");
if (trusted_dirs_load_certs_from_string(
- cert->cache_info.signed_descriptor_body, 0, 0)<0) {
+ cert->cache_info.signed_descriptor_body,
+ TRUSTED_DIRS_CERTS_SRC_SELF, 0)<0) {
log_warn(LD_DIR, "Unable to parse my own v3 cert! Failing.");
return -1;
}
@@ -868,10 +1107,10 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
if (advertising != new_choice) {
if (new_choice == 1) {
- log(LOG_NOTICE, LD_DIR, "Advertising DirPort as %d", dir_port);
+ log_notice(LD_DIR, "Advertising DirPort as %d", dir_port);
} else {
tor_assert(reason);
- log(LOG_NOTICE, LD_DIR, "Not advertising DirPort (Reason: %s)", reason);
+ log_notice(LD_DIR, "Not advertising DirPort (Reason: %s)", reason);
}
advertising = new_choice;
}
@@ -879,6 +1118,22 @@ decide_to_advertise_dirport(const or_options_t *options, uint16_t dir_port)
return advertising ? dir_port : 0;
}
+/** Allocate and return a new extend_info_t that can be used to build
+ * a circuit to or through the router <b>r</b>. Use the primary
+ * address of the router unless <b>for_direct_connect</b> is true, in
+ * which case the preferred address is used instead. */
+static extend_info_t *
+extend_info_from_router(const routerinfo_t *r)
+{
+ tor_addr_port_t ap;
+ tor_assert(r);
+
+ router_get_prim_orport(r, &ap);
+ return extend_info_new(r->nickname, r->cache_info.identity_digest,
+ r->onion_pkey, r->onion_curve25519_pkey,
+ &ap.addr, ap.port);
+}
+
/** Some time has passed, or we just got new directory information.
* See if we currently believe our ORPort or DirPort to be
* unreachable. If so, launch a new test for it.
@@ -907,25 +1162,21 @@ consider_testing_reachability(int test_or, int test_dir)
if (test_or || test_dir) {
#define SELF_EXCLUDED_WARN_INTERVAL 3600
static ratelim_t warning_limit=RATELIM_INIT(SELF_EXCLUDED_WARN_INTERVAL);
- char *msg;
- if ((msg = rate_limit_log(&warning_limit, approx_time()))) {
- log_warn(LD_CIRC, "Can't peform self-tests for this relay: we have "
+ log_fn_ratelim(&warning_limit, LOG_WARN, LD_CIRC,
+ "Can't peform self-tests for this relay: we have "
"listed ourself in ExcludeNodes, and StrictNodes is set. "
"We cannot learn whether we are usable, and will not "
- "be able to advertise ourself.%s", msg);
- tor_free(msg);
- }
+ "be able to advertise ourself.");
}
return;
}
if (test_or && (!orport_reachable || !circuit_enough_testing_circs())) {
- extend_info_t *ei;
+ extend_info_t *ei = extend_info_from_router(me);
+ /* XXX IPv6 self testing */
log_info(LD_CIRC, "Testing %s of my ORPort: %s:%d.",
!orport_reachable ? "reachability" : "bandwidth",
- me->address, me->or_port);
- /* XXX IPv6 self testing IPv6 orports will need pref_addr */
- ei = extend_info_from_router(me, 0);
+ fmt_addr32(me->addr), me->or_port);
circuit_launch_by_extend_info(CIRCUIT_PURPOSE_TESTING, ei,
CIRCLAUNCH_NEED_CAPACITY|CIRCLAUNCH_IS_INTERNAL);
extend_info_free(ei);
@@ -937,13 +1188,12 @@ consider_testing_reachability(int test_or, int test_dir)
CONN_TYPE_DIR, &addr, me->dir_port,
DIR_PURPOSE_FETCH_SERVERDESC)) {
/* ask myself, via tor, for my server descriptor. */
- directory_initiate_command(me->address, &addr,
+ directory_initiate_command(&addr,
me->or_port, me->dir_port,
- 0, /* does not matter */
- 0, me->cache_info.identity_digest,
+ me->cache_info.identity_digest,
DIR_PURPOSE_FETCH_SERVERDESC,
ROUTER_PURPOSE_GENERAL,
- 1, "authority.z", NULL, 0, 0);
+ DIRIND_ANON_DIRPORT, "authority.z", NULL, 0, 0);
}
}
@@ -953,15 +1203,17 @@ router_orport_found_reachable(void)
{
const routerinfo_t *me = router_get_my_routerinfo();
if (!can_reach_or_port && me) {
+ char *address = tor_dup_ip(me->addr);
log_notice(LD_OR,"Self-testing indicates your ORPort is reachable from "
"the outside. Excellent.%s",
- get_options()->_PublishServerDescriptor != NO_DIRINFO ?
+ get_options()->PublishServerDescriptor_ != NO_DIRINFO ?
" Publishing server descriptor." : "");
can_reach_or_port = 1;
mark_my_descriptor_dirty("ORPort found reachable");
control_event_server_status(LOG_NOTICE,
"REACHABILITY_SUCCEEDED ORADDRESS=%s:%d",
- me->address, me->or_port);
+ address, me->or_port);
+ tor_free(address);
}
}
@@ -971,6 +1223,7 @@ router_dirport_found_reachable(void)
{
const routerinfo_t *me = router_get_my_routerinfo();
if (!can_reach_dir_port && me) {
+ char *address = tor_dup_ip(me->addr);
log_notice(LD_DIRSERV,"Self-testing indicates your DirPort is reachable "
"from the outside. Excellent.");
can_reach_dir_port = 1;
@@ -978,7 +1231,8 @@ router_dirport_found_reachable(void)
mark_my_descriptor_dirty("DirPort found reachable");
control_event_server_status(LOG_NOTICE,
"REACHABILITY_SUCCEEDED DIRADDRESS=%s:%d",
- me->address, me->dir_port);
+ address, me->dir_port);
+ tor_free(address);
}
}
@@ -987,7 +1241,8 @@ router_dirport_found_reachable(void)
void
router_perform_bandwidth_test(int num_circs, time_t now)
{
- int num_cells = (int)(get_options()->BandwidthRate * 10 / CELL_NETWORK_SIZE);
+ int num_cells = (int)(get_options()->BandwidthRate * 10 /
+ CELL_MAX_NETWORK_SIZE);
int max_cells = num_cells < CIRCWINDOW_START ?
num_cells : CIRCWINDOW_START;
int cells_per_circuit = max_cells / num_circs;
@@ -998,9 +1253,9 @@ router_perform_bandwidth_test(int num_circs, time_t now)
CIRCUIT_PURPOSE_TESTING))) {
/* dump cells_per_circuit drop cells onto this circ */
int i = cells_per_circuit;
- if (circ->_base.state != CIRCUIT_STATE_OPEN)
+ if (circ->base_.state != CIRCUIT_STATE_OPEN)
continue;
- circ->_base.timestamp_dirty = now;
+ circ->base_.timestamp_dirty = now;
while (i-- > 0) {
if (relay_send_command_from_edge(0, TO_CIRCUIT(circ),
RELAY_COMMAND_DROP,
@@ -1012,7 +1267,8 @@ router_perform_bandwidth_test(int num_circs, time_t now)
}
/** Return true iff our network is in some sense disabled: either we're
- * hibernating, entering hibernation, or */
+ * hibernating, entering hibernation, or the network is turned off with
+ * DisableNetwork. */
int
net_is_disabled(void)
{
@@ -1027,22 +1283,6 @@ authdir_mode(const or_options_t *options)
{
return options->AuthoritativeDir != 0;
}
-/** Return true iff we believe ourselves to be a v1 authoritative
- * directory server.
- */
-int
-authdir_mode_v1(const or_options_t *options)
-{
- return authdir_mode(options) && options->V1AuthoritativeDir != 0;
-}
-/** Return true iff we believe ourselves to be a v2 authoritative
- * directory server.
- */
-int
-authdir_mode_v2(const or_options_t *options)
-{
- return authdir_mode(options) && options->V2AuthoritativeDir != 0;
-}
/** Return true iff we believe ourselves to be a v3 authoritative
* directory server.
*/
@@ -1051,13 +1291,11 @@ authdir_mode_v3(const or_options_t *options)
{
return authdir_mode(options) && options->V3AuthoritativeDir != 0;
}
-/** Return true iff we are a v1, v2, or v3 directory authority. */
+/** Return true iff we are a v3 directory authority. */
int
authdir_mode_any_main(const or_options_t *options)
{
- return options->V1AuthoritativeDir ||
- options->V2AuthoritativeDir ||
- options->V3AuthoritativeDir;
+ return options->V3AuthoritativeDir;
}
/** Return true if we believe ourselves to be any kind of
* authoritative directory beyond just a hidserv authority. */
@@ -1111,8 +1349,8 @@ authdir_mode_bridge(const or_options_t *options)
/** Return true iff we are trying to be a server.
*/
-int
-server_mode(const or_options_t *options)
+MOCK_IMPL(int,
+server_mode,(const or_options_t *options))
{
if (options->ClientOnly) return 0;
/* XXXX024 I believe we can kill off ORListenAddress here.*/
@@ -1121,8 +1359,8 @@ server_mode(const or_options_t *options)
/** Return true iff we are trying to be a non-bridge server.
*/
-int
-public_server_mode(const or_options_t *options)
+MOCK_IMPL(int,
+public_server_mode,(const or_options_t *options))
{
if (!server_mode(options)) return 0;
return (!options->BridgeRelay);
@@ -1194,7 +1432,7 @@ decide_if_publishable_server(void)
if (options->ClientOnly)
return 0;
- if (options->_PublishServerDescriptor == NO_DIRINFO)
+ if (options->PublishServerDescriptor_ == NO_DIRINFO)
return 0;
if (!server_mode(options))
return 0;
@@ -1236,13 +1474,18 @@ consider_publishable_server(int force)
/** XXX not a very good interface. it's not reliable when there are
multiple listeners. */
uint16_t
-router_get_active_listener_port_by_type(int listener_type)
+router_get_active_listener_port_by_type_af(int listener_type,
+ sa_family_t family)
{
/* Iterate all connections, find one of the right kind and return
the port. Not very sophisticated or fast, but effective. */
- const connection_t *c = connection_get_by_type(listener_type);
- if (c)
- return c->port;
+ smartlist_t *conns = get_connection_array();
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
+ if (conn->type == listener_type && !conn->marked_for_close &&
+ conn->socket_family == family) {
+ return conn->port;
+ }
+ } SMARTLIST_FOREACH_END(conn);
return 0;
}
@@ -1254,13 +1497,24 @@ router_get_active_listener_port_by_type(int listener_type)
uint16_t
router_get_advertised_or_port(const or_options_t *options)
{
- int port = get_primary_or_port();
+ return router_get_advertised_or_port_by_af(options, AF_INET);
+}
+
+/** As router_get_advertised_or_port(), but allows an address family argument.
+ */
+uint16_t
+router_get_advertised_or_port_by_af(const or_options_t *options,
+ sa_family_t family)
+{
+ int port = get_first_advertised_port_by_type_af(CONN_TYPE_OR_LISTENER,
+ family);
(void)options;
/* If the port is in 'auto' mode, we have to use
router_get_listener_port_by_type(). */
if (port == CFG_AUTO_PORT)
- return router_get_active_listener_port_by_type(CONN_TYPE_OR_LISTENER);
+ return router_get_active_listener_port_by_type_af(CONN_TYPE_OR_LISTENER,
+ family);
return port;
}
@@ -1280,7 +1534,8 @@ router_get_advertised_dir_port(const or_options_t *options, uint16_t dirport)
return dirport;
if (dirport_configured == CFG_AUTO_PORT)
- return router_get_active_listener_port_by_type(CONN_TYPE_DIR_LISTENER);
+ return router_get_active_listener_port_by_type_af(CONN_TYPE_DIR_LISTENER,
+ AF_INET);
return dirport_configured;
}
@@ -1315,7 +1570,7 @@ router_upload_dir_desc_to_dirservers(int force)
extrainfo_t *ei;
char *msg;
size_t desc_len, extra_len = 0, total_len;
- dirinfo_type_t auth = get_options()->_PublishServerDescriptor;
+ dirinfo_type_t auth = get_options()->PublishServerDescriptor_;
ri = router_get_my_routerinfo();
if (!ri) {
@@ -1355,22 +1610,34 @@ router_upload_dir_desc_to_dirservers(int force)
* conn. Return 0 if we accept; non-0 if we reject.
*/
int
-router_compare_to_my_exit_policy(edge_connection_t *conn)
+router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port)
{
if (!router_get_my_routerinfo()) /* make sure desc_routerinfo exists */
return -1;
/* make sure it's resolved to something. this way we can't get a
'maybe' below. */
- if (tor_addr_is_null(&conn->_base.addr))
+ if (tor_addr_is_null(addr))
return -1;
- /* XXXX IPv6 */
- if (tor_addr_family(&conn->_base.addr) != AF_INET)
+ /* look at desc_routerinfo->exit_policy for both the v4 and the v6
+ * policies. The exit_policy field in desc_routerinfo is a bit unusual,
+ * in that it contains IPv6 and IPv6 entries. We don't want to look
+ * at desc_routerinfio->ipv6_exit_policy, since that's a port summary. */
+ if ((tor_addr_family(addr) == AF_INET ||
+ tor_addr_family(addr) == AF_INET6)) {
+ return compare_tor_addr_to_addr_policy(addr, port,
+ desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED;
+#if 0
+ } else if (tor_addr_family(addr) == AF_INET6) {
+ return get_options()->IPv6Exit &&
+ desc_routerinfo->ipv6_exit_policy &&
+ compare_tor_addr_to_short_policy(addr, port,
+ desc_routerinfo->ipv6_exit_policy) != ADDR_POLICY_ACCEPTED;
+#endif
+ } else {
return -1;
-
- return compare_tor_addr_to_addr_policy(&conn->_base.addr, conn->_base.port,
- desc_routerinfo->exit_policy) != ADDR_POLICY_ACCEPTED;
+ }
}
/** Return true iff my exit policy is reject *:*. Return -1 if we don't
@@ -1393,6 +1660,13 @@ router_digest_is_me(const char *digest)
tor_memeq(server_identitykey_digest, digest, DIGEST_LEN));
}
+/** Return my identity digest. */
+const uint8_t *
+router_get_my_id_digest(void)
+{
+ return (const uint8_t *)server_identitykey_digest;
+}
+
/** Return true iff I'm a server and <b>digest</b> is equal to
* my identity digest. */
int
@@ -1414,22 +1688,10 @@ router_is_me(const routerinfo_t *router)
return router_digest_is_me(router->cache_info.identity_digest);
}
-/** Return true iff <b>fp</b> is a hex fingerprint of my identity digest. */
-int
-router_fingerprint_is_me(const char *fp)
-{
- char digest[DIGEST_LEN];
- if (strlen(fp) == HEX_DIGEST_LEN &&
- base16_decode(digest, sizeof(digest), fp, HEX_DIGEST_LEN) == 0)
- return router_digest_is_me(digest);
-
- return 0;
-}
-
/** Return a routerinfo for this OR, rebuilding a fresh one if
* necessary. Return NULL on error, or if called on an OP. */
-const routerinfo_t *
-router_get_my_routerinfo(void)
+MOCK_IMPL(const routerinfo_t *,
+router_get_my_routerinfo,(void))
{
if (!server_mode(get_options()))
return NULL;
@@ -1488,7 +1750,9 @@ static int router_guess_address_from_dir_headers(uint32_t *guess);
int
router_pick_published_address(const or_options_t *options, uint32_t *addr)
{
- if (resolve_my_address(LOG_INFO, options, addr, NULL) < 0) {
+ *addr = get_last_resolved_addr();
+ if (!*addr &&
+ resolve_my_address(LOG_INFO, options, addr, NULL, NULL) < 0) {
log_info(LD_CONFIG, "Could not determine our address locally. "
"Checking if directory headers provide any hints.");
if (router_guess_address_from_dir_headers(addr) < 0) {
@@ -1531,7 +1795,6 @@ router_rebuild_descriptor(int force)
ri = tor_malloc_zero(sizeof(routerinfo_t));
ri->cache_info.routerlist_index = -1;
- ri->address = tor_dup_ip(addr);
ri->nickname = tor_strdup(options->Nickname);
ri->addr = addr;
ri->or_port = router_get_advertised_or_port(options);
@@ -1539,13 +1802,19 @@ router_rebuild_descriptor(int force)
ri->cache_info.published_on = time(NULL);
ri->onion_pkey = crypto_pk_dup_key(get_onion_key()); /* must invoke from
* main thread */
- if (options->BridgeRelay) {
- /* For now, only bridges advertise an ipv6 or-address. And only one. */
+#ifdef CURVE25519_ENABLED
+ ri->onion_curve25519_pkey =
+ tor_memdup(&get_current_curve25519_keypair()->pubkey,
+ sizeof(curve25519_public_key_t));
+#endif
+
+ /* For now, at most one IPv6 or-address is being advertised. */
+ {
const port_cfg_t *ipv6_orport = NULL;
SMARTLIST_FOREACH_BEGIN(get_configured_ports(), const port_cfg_t *, p) {
if (p->type == CONN_TYPE_OR_LISTENER &&
! p->no_advertise &&
- ! p->ipv4_only &&
+ ! p->bind_ipv4_only &&
tor_addr_family(&p->addr) == AF_INET6) {
if (! tor_addr_is_internal(&p->addr, 0)) {
ipv6_orport = p;
@@ -1565,6 +1834,7 @@ router_rebuild_descriptor(int force)
ri->ipv6_orport = ipv6_orport->port;
}
}
+
ri->identity_pkey = crypto_pk_dup_key(get_server_identity_key());
if (crypto_pk_get_digest(ri->identity_pkey,
ri->cache_info.identity_digest)<0) {
@@ -1587,17 +1857,20 @@ router_rebuild_descriptor(int force)
policies_exit_policy_append_reject_star(&ri->exit_policy);
} else {
policies_parse_exit_policy(options->ExitPolicy, &ri->exit_policy,
+ options->IPv6Exit,
options->ExitPolicyRejectPrivate,
- ri->address, !options->BridgeRelay);
+ ri->addr, !options->BridgeRelay);
}
ri->policy_is_reject_star =
- policy_is_reject_star(ri->exit_policy);
+ policy_is_reject_star(ri->exit_policy, AF_INET) &&
+ policy_is_reject_star(ri->exit_policy, AF_INET6);
-#if 0
- /* XXXX NM NM I belive this is safe to remove */
- if (authdir_mode(options))
- ri->is_valid = ri->is_named = 1; /* believe in yourself */
-#endif
+ if (options->IPv6Exit) {
+ char *p_tmp = policy_summarize(ri->exit_policy, AF_INET6);
+ if (p_tmp)
+ ri->ipv6_exit_policy = parse_short_policy(p_tmp);
+ tor_free(p_tmp);
+ }
if (options->MyFamily && ! options->BridgeRelay) {
smartlist_t *family;
@@ -1615,7 +1888,7 @@ router_rebuild_descriptor(int force)
member = node_get_by_nickname(name, 1);
if (!member) {
int is_legal = is_legal_nickname_or_hexdigest(name);
- if (!smartlist_string_isin(warned_nonexistent_family, name) &&
+ if (!smartlist_contains_string(warned_nonexistent_family, name) &&
!is_legal_hexdigest(name)) {
if (is_legal)
log_warn(LD_CONFIG,
@@ -1641,7 +1914,7 @@ router_rebuild_descriptor(int force)
base16_encode(fp+1,HEX_DIGEST_LEN+1,
member->identity, DIGEST_LEN);
smartlist_add(ri->declared_family, fp);
- if (smartlist_string_isin(warned_nonexistent_family, name))
+ if (smartlist_contains_string(warned_nonexistent_family, name))
smartlist_string_remove(warned_nonexistent_family, name);
}
skip:
@@ -1684,9 +1957,8 @@ router_rebuild_descriptor(int force)
/* ri was allocated with tor_malloc_zero, so there is no need to
* zero ri->cache_info.extra_info_digest here. */
}
- ri->cache_info.signed_descriptor_body = tor_malloc(8192);
- if (router_dump_router_to_string(ri->cache_info.signed_descriptor_body, 8192,
- ri, get_server_identity_key()) < 0) {
+ if (! (ri->cache_info.signed_descriptor_body = router_dump_router_to_string(
+ ri, get_server_identity_key()))) {
log_warn(LD_BUG, "Couldn't generate router descriptor.");
routerinfo_free(ri);
extrainfo_free(ei);
@@ -1783,7 +2055,7 @@ void
mark_my_descriptor_dirty(const char *reason)
{
const or_options_t *options = get_options();
- if (server_mode(options) && options->_PublishServerDescriptor)
+ if (server_mode(options) && options->PublishServerDescriptor_)
log_info(LD_OR, "Decided to publish new relay descriptor: %s", reason);
desc_clean_since = 0;
if (!desc_dirty_reason)
@@ -1853,6 +2125,9 @@ check_descriptor_ipaddress_changed(time_t now)
{
uint32_t prev, cur;
const or_options_t *options = get_options();
+ const char *method = NULL;
+ char *hostname = NULL;
+
(void) now;
if (!desc_routerinfo)
@@ -1860,18 +2135,29 @@ check_descriptor_ipaddress_changed(time_t now)
/* XXXX ipv6 */
prev = desc_routerinfo->addr;
- if (resolve_my_address(LOG_INFO, options, &cur, NULL) < 0) {
+ if (resolve_my_address(LOG_INFO, options, &cur, &method, &hostname) < 0) {
log_info(LD_CONFIG,"options->Address didn't resolve into an IP.");
return;
}
if (prev != cur) {
+ char *source;
tor_addr_t tmp_prev, tmp_cur;
+
tor_addr_from_ipv4h(&tmp_prev, prev);
tor_addr_from_ipv4h(&tmp_cur, cur);
- log_addr_has_changed(LOG_NOTICE, &tmp_prev, &tmp_cur, "resolve");
+
+ tor_asprintf(&source, "METHOD=%s%s%s", method,
+ hostname ? " HOSTNAME=" : "",
+ hostname ? hostname : "");
+
+ log_addr_has_changed(LOG_NOTICE, &tmp_prev, &tmp_cur, source);
+ tor_free(source);
+
ip_address_changed(0);
}
+
+ tor_free(hostname);
}
/** The most recently guessed value of our IP address, based on directory
@@ -1905,7 +2191,9 @@ router_new_address_suggestion(const char *suggestion,
}
/* XXXX ipv6 */
- if (resolve_my_address(LOG_INFO, options, &cur, NULL) >= 0) {
+ cur = get_last_resolved_addr();
+ if (cur ||
+ resolve_my_address(LOG_INFO, options, &cur, NULL, NULL) >= 0) {
/* We're all set -- we already know our address. Great. */
tor_addr_from_ipv4h(&last_guessed_ip, cur); /* store it in case we
need it later */
@@ -1915,7 +2203,7 @@ router_new_address_suggestion(const char *suggestion,
/* Don't believe anybody who says our IP is, say, 127.0.0.1. */
return;
}
- if (tor_addr_eq(&d_conn->_base.addr, &addr)) {
+ if (tor_addr_eq(&d_conn->base_.addr, &addr)) {
/* Don't believe anybody who says our IP is their IP. */
log_debug(LD_DIR, "A directory server told us our IP address is %s, "
"but he's just reporting his own IP address. Ignoring.",
@@ -1931,7 +2219,7 @@ router_new_address_suggestion(const char *suggestion,
"EXTERNAL_ADDRESS ADDRESS=%s METHOD=DIRSERV",
suggestion);
log_addr_has_changed(LOG_NOTICE, &last_guessed_ip, &addr,
- d_conn->_base.address);
+ d_conn->base_.address);
ip_address_changed(0);
tor_addr_copy(&last_guessed_ip, &addr); /* router_rebuild_descriptor()
will fetch it */
@@ -1956,7 +2244,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",
@@ -1970,55 +2258,53 @@ get_platform_str(char *platform, size_t len)
#define DEBUG_ROUTER_DUMP_ROUTER_TO_STRING
/** OR only: Given a routerinfo for this router, and an identity key to sign
- * with, encode the routerinfo as a signed server descriptor and write the
- * result into <b>s</b>, using at most <b>maxlen</b> bytes. Return -1 on
- * failure, and the number of bytes used on success.
+ * with, encode the routerinfo as a signed server descriptor and return a new
+ * string encoding the result, or NULL on failure.
*/
-int
-router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
+char *
+router_dump_router_to_string(routerinfo_t *router,
crypto_pk_t *ident_key)
{
- char *onion_pkey; /* Onion key, PEM-encoded. */
- char *identity_pkey; /* Identity key, PEM-encoded. */
+ char *address = NULL;
+ char *onion_pkey = NULL; /* Onion key, PEM-encoded. */
+ char *identity_pkey = NULL; /* Identity key, PEM-encoded. */
char digest[DIGEST_LEN];
char published[ISO_TIME_LEN+1];
char fingerprint[FINGERPRINT_LEN+1];
int has_extra_info_digest;
char extra_info_digest[HEX_DIGEST_LEN+1];
size_t onion_pkeylen, identity_pkeylen;
- size_t written;
- int result=0;
- addr_policy_t *tmpe;
- char *family_line;
+ char *family_line = NULL;
char *extra_or_address = NULL;
const or_options_t *options = get_options();
+ smartlist_t *chunks = NULL;
+ char *output = NULL;
/* Make sure the identity key matches the one in the routerinfo. */
- if (crypto_pk_cmp_keys(ident_key, router->identity_pkey)) {
+ if (!crypto_pk_eq_keys(ident_key, router->identity_pkey)) {
log_warn(LD_BUG,"Tried to sign a router with a private key that didn't "
"match router's public key!");
- return -1;
+ goto err;
}
/* record our fingerprint, so we can include it in the descriptor */
if (crypto_pk_get_fingerprint(router->identity_pkey, fingerprint, 1)<0) {
log_err(LD_BUG,"Error computing fingerprint");
- return -1;
+ goto err;
}
/* PEM-encode the onion key */
if (crypto_pk_write_public_key_to_string(router->onion_pkey,
&onion_pkey,&onion_pkeylen)<0) {
log_warn(LD_BUG,"write onion_pkey to string failed!");
- return -1;
+ goto err;
}
/* PEM-encode the identity key */
if (crypto_pk_write_public_key_to_string(router->identity_pkey,
&identity_pkey,&identity_pkeylen)<0) {
log_warn(LD_BUG,"write identity_pkey to string failed!");
- tor_free(onion_pkey);
- return -1;
+ goto err;
}
/* Encode the publication time. */
@@ -2053,14 +2339,17 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
}
}
+ address = tor_dup_ip(router->addr);
+ chunks = smartlist_new();
+
/* Generate the easy portion of the router descriptor. */
- result = tor_snprintf(s, maxlen,
+ smartlist_add_asprintf(chunks,
"router %s %s %d 0 %d\n"
"%s"
"platform %s\n"
- "opt protocols Link 1 2 Circuit 1\n"
+ "protocols Link 1 2 Circuit 1\n"
"published %s\n"
- "opt fingerprint %s\n"
+ "fingerprint %s\n"
"uptime %ld\n"
"bandwidth %d %d %d\n"
"%s%s%s%s"
@@ -2068,7 +2357,7 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
"signing-key\n%s"
"%s%s%s%s",
router->nickname,
- router->address,
+ address,
router->or_port,
decide_to_advertise_dirport(options, router->dir_port),
extra_or_address ? extra_or_address : "",
@@ -2079,113 +2368,159 @@ router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
(int) router->bandwidthrate,
(int) router->bandwidthburst,
(int) router->bandwidthcapacity,
- has_extra_info_digest ? "opt extra-info-digest " : "",
+ has_extra_info_digest ? "extra-info-digest " : "",
has_extra_info_digest ? extra_info_digest : "",
has_extra_info_digest ? "\n" : "",
- options->DownloadExtraInfo ? "opt caches-extra-info\n" : "",
+ options->DownloadExtraInfo ? "caches-extra-info\n" : "",
onion_pkey, identity_pkey,
family_line,
- we_are_hibernating() ? "opt hibernating 1\n" : "",
- options->HidServDirectoryV2 ? "opt hidden-service-dir\n" : "",
- options->AllowSingleHopExits ? "opt allow-single-hop-exits\n" : "");
-
- tor_free(family_line);
- tor_free(onion_pkey);
- tor_free(identity_pkey);
- tor_free(extra_or_address);
-
- if (result < 0) {
- log_warn(LD_BUG,"descriptor snprintf #1 ran out of room!");
- return -1;
- }
- /* From now on, we use 'written' to remember the current length of 's'. */
- written = result;
+ we_are_hibernating() ? "hibernating 1\n" : "",
+ options->HidServDirectoryV2 ? "hidden-service-dir\n" : "",
+ options->AllowSingleHopExits ? "allow-single-hop-exits\n" : "");
if (options->ContactInfo && strlen(options->ContactInfo)) {
const char *ci = options->ContactInfo;
if (strchr(ci, '\n') || strchr(ci, '\r'))
ci = escaped(ci);
- result = tor_snprintf(s+written,maxlen-written, "contact %s\n", ci);
- if (result<0) {
- log_warn(LD_BUG,"descriptor snprintf #2 ran out of room!");
- return -1;
- }
- written += result;
+ smartlist_add_asprintf(chunks, "contact %s\n", ci);
}
+#ifdef CURVE25519_ENABLED
+ if (router->onion_curve25519_pkey) {
+ char kbuf[128];
+ base64_encode(kbuf, sizeof(kbuf),
+ (const char *)router->onion_curve25519_pkey->public_key,
+ CURVE25519_PUBKEY_LEN);
+ smartlist_add_asprintf(chunks, "ntor-onion-key %s", kbuf);
+ }
+#endif
+
/* Write the exit policy to the end of 's'. */
if (!router->exit_policy || !smartlist_len(router->exit_policy)) {
- strlcat(s+written, "reject *:*\n", maxlen-written);
- written += strlen("reject *:*\n");
- tmpe = NULL;
+ smartlist_add(chunks, tor_strdup("reject *:*\n"));
} else if (router->exit_policy) {
- int i;
- for (i = 0; i < smartlist_len(router->exit_policy); ++i) {
- tmpe = smartlist_get(router->exit_policy, i);
- result = policy_write_item(s+written, maxlen-written, tmpe, 1);
- if (result < 0) {
- log_warn(LD_BUG,"descriptor policy_write_item ran out of room!");
- return -1;
- }
- tor_assert(result == (int)strlen(s+written));
- written += result;
- if (written+2 > maxlen) {
- log_warn(LD_BUG,"descriptor policy_write_item ran out of room (2)!");
- return -1;
- }
- s[written++] = '\n';
- }
+ char *exit_policy = router_dump_exit_policy_to_string(router,1,0);
+
+ if (!exit_policy)
+ goto err;
+
+ smartlist_add_asprintf(chunks, "%s\n", exit_policy);
+ tor_free(exit_policy);
}
- if (written + DIROBJ_MAX_SIG_LEN > maxlen) {
- /* Not enough room for signature. */
- log_warn(LD_BUG,"not enough room left in descriptor for signature!");
- return -1;
+ if (router->ipv6_exit_policy) {
+ char *p6 = write_short_policy(router->ipv6_exit_policy);
+ if (p6 && strcmp(p6, "reject 1-65535")) {
+ smartlist_add_asprintf(chunks,
+ "ipv6-policy %s\n", p6);
+ }
+ tor_free(p6);
}
/* Sign the descriptor */
- strlcpy(s+written, "router-signature\n", maxlen-written);
- written += strlen(s+written);
- s[written] = '\0';
- if (router_get_router_hash(s, strlen(s), digest) < 0) {
- return -1;
- }
+ smartlist_add(chunks, tor_strdup("router-signature\n"));
+
+ crypto_digest_smartlist(digest, DIGEST_LEN, chunks, "", DIGEST_SHA1);
note_crypto_pk_op(SIGN_RTR);
- if (router_append_dirobj_signature(s+written,maxlen-written,
- digest,DIGEST_LEN,ident_key)<0) {
- log_warn(LD_BUG, "Couldn't sign router descriptor");
- return -1;
+ {
+ char *sig;
+ if (!(sig = router_get_dirobj_signature(digest, DIGEST_LEN, ident_key))) {
+ log_warn(LD_BUG, "Couldn't sign router descriptor");
+ goto err;
+ }
+ smartlist_add(chunks, sig);
}
- written += strlen(s+written);
- if (written+2 > maxlen) {
- log_warn(LD_BUG,"Not enough room to finish descriptor.");
- return -1;
- }
/* include a last '\n' */
- s[written] = '\n';
- s[written+1] = 0;
+ smartlist_add(chunks, tor_strdup("\n"));
+
+ output = smartlist_join_strings(chunks, "", 0, NULL);
#ifdef DEBUG_ROUTER_DUMP_ROUTER_TO_STRING
{
char *s_dup;
const char *cp;
routerinfo_t *ri_tmp;
- cp = s_dup = tor_strdup(s);
+ cp = s_dup = tor_strdup(output);
ri_tmp = router_parse_entry_from_string(cp, NULL, 1, 0, NULL);
if (!ri_tmp) {
log_err(LD_BUG,
"We just generated a router descriptor we can't parse.");
- log_err(LD_BUG, "Descriptor was: <<%s>>", s);
- return -1;
+ log_err(LD_BUG, "Descriptor was: <<%s>>", output);
+ goto err;
}
tor_free(s_dup);
routerinfo_free(ri_tmp);
}
#endif
- return (int)written+1;
+ goto done;
+
+ err:
+ tor_free(output); /* sets output to NULL */
+ done:
+ if (chunks) {
+ SMARTLIST_FOREACH(chunks, char *, cp, tor_free(cp));
+ smartlist_free(chunks);
+ }
+ tor_free(address);
+ tor_free(family_line);
+ tor_free(onion_pkey);
+ tor_free(identity_pkey);
+ tor_free(extra_or_address);
+
+ return output;
+}
+
+/**
+ * OR only: Given <b>router</b>, produce a string with its exit policy.
+ * If <b>include_ipv4</b> is true, include IPv4 entries.
+ * If <b>include_ipv6</b> is true, include IPv6 entries.
+ */
+char *
+router_dump_exit_policy_to_string(const routerinfo_t *router,
+ int include_ipv4,
+ int include_ipv6)
+{
+ smartlist_t *exit_policy_strings;
+ char *policy_string = NULL;
+
+ if ((!router->exit_policy) || (router->policy_is_reject_star)) {
+ return tor_strdup("reject *:*");
+ }
+
+ exit_policy_strings = smartlist_new();
+
+ SMARTLIST_FOREACH_BEGIN(router->exit_policy, addr_policy_t *, tmpe) {
+ char *pbuf;
+ int bytes_written_to_pbuf;
+ if ((tor_addr_family(&tmpe->addr) == AF_INET6) && (!include_ipv6)) {
+ continue; /* Don't include IPv6 parts of address policy */
+ }
+ if ((tor_addr_family(&tmpe->addr) == AF_INET) && (!include_ipv4)) {
+ continue; /* Don't include IPv4 parts of address policy */
+ }
+
+ pbuf = tor_malloc(POLICY_BUF_LEN);
+ bytes_written_to_pbuf = policy_write_item(pbuf,POLICY_BUF_LEN, tmpe, 1);
+
+ if (bytes_written_to_pbuf < 0) {
+ log_warn(LD_BUG, "router_dump_exit_policy_to_string ran out of room!");
+ tor_free(pbuf);
+ goto done;
+ }
+
+ smartlist_add(exit_policy_strings,pbuf);
+ } SMARTLIST_FOREACH_END(tmpe);
+
+ policy_string = smartlist_join_strings(exit_policy_strings, "\n", 0, NULL);
+
+ done:
+ SMARTLIST_FOREACH(exit_policy_strings, char *, str, tor_free(str));
+ smartlist_free(exit_policy_strings);
+
+ return policy_string;
}
/** Copy the primary (IPv4) OR port (IP address and TCP port) for
@@ -2198,40 +2533,24 @@ router_get_prim_orport(const routerinfo_t *router, tor_addr_port_t *ap_out)
ap_out->port = router->or_port;
}
-/** Return 1 if we prefer the IPv6 address and OR TCP port of
- * <b>router</b>, else 0.
- *
- * We prefer the IPv6 address if the router has one and
- * i) the routerinfo_t says so
- * or
- * ii) the router has no IPv4 address. */
+/** Return 1 if any of <b>router</b>'s addresses are <b>addr</b>.
+ * Otherwise return 0. */
int
-router_ipv6_preferred(const routerinfo_t *router)
+router_has_addr(const routerinfo_t *router, const tor_addr_t *addr)
{
- return (!tor_addr_is_null(&router->ipv6_addr)
- && (router->ipv6_preferred || router->addr == 0));
+ return
+ tor_addr_eq_ipv4h(addr, router->addr) ||
+ tor_addr_eq(&router->ipv6_addr, addr);
}
-/** Copy the preferred OR port (IP address and TCP port) for
- * <b>router</b> into *<b>addr_out</b>. */
-void
-router_get_pref_orport(const routerinfo_t *router, tor_addr_port_t *ap_out)
-{
- if (router_ipv6_preferred(router))
- router_get_pref_ipv6_orport(router, ap_out);
- else
- router_get_prim_orport(router, ap_out);
-}
-
-/** Copy the preferred IPv6 OR port (IP address and TCP port) for
- * <b>router</b> into *<b>ap_out</b>. */
-void
-router_get_pref_ipv6_orport(const routerinfo_t *router,
- tor_addr_port_t *ap_out)
+int
+router_has_orport(const routerinfo_t *router, const tor_addr_port_t *orport)
{
- tor_assert(ap_out != NULL);
- tor_addr_copy(&ap_out->addr, &router->ipv6_addr);
- ap_out->port = router->ipv6_orport;
+ return
+ (tor_addr_eq_ipv4h(&orport->addr, router->addr) &&
+ orport->port == router->or_port) ||
+ (tor_addr_eq(&orport->addr, &router->ipv6_addr) &&
+ orport->port == router->ipv6_orport);
}
/** Load the contents of <b>filename</b>, find the last line starting with
@@ -2316,9 +2635,12 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
tor_free(bandwidth_usage);
smartlist_add(chunks, pre);
- if (geoip_is_loaded()) {
- smartlist_add_asprintf(chunks, "geoip-db-digest %s\n", geoip_db_digest());
- }
+ if (geoip_is_loaded(AF_INET))
+ smartlist_add_asprintf(chunks, "geoip-db-digest %s\n",
+ geoip_db_digest(AF_INET));
+ if (geoip_is_loaded(AF_INET6))
+ smartlist_add_asprintf(chunks, "geoip6-db-digest %s\n",
+ geoip_db_digest(AF_INET6));
if (options->ExtraInfoStatistics && write_stats_to_extrainfo) {
log_info(LD_GENERAL, "Adding stats to extra-info descriptor.");
@@ -2349,6 +2671,13 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
}
}
+ /* Add information about the pluggable transports we support. */
+ if (options->ServerTransportPlugin) {
+ char *pluggable_transports = pt_get_extra_info_descriptor_string();
+ if (pluggable_transports)
+ smartlist_add(chunks, pluggable_transports);
+ }
+
if (should_record_bridge_info(options) && write_stats_to_extrainfo) {
const char *bridge_stats = geoip_get_bridge_stats_extrainfo(now);
if (bridge_stats) {
@@ -2431,7 +2760,9 @@ extrainfo_dump_to_string(char **s_out, extrainfo_t *extrainfo,
return result;
}
-/** Return true iff <b>s</b> is a legally valid server nickname. */
+/** Return true iff <b>s</b> is a valid server nickname. (That is, a string
+ * containing between 1 and MAX_NICKNAME_LEN characters from
+ * LEGAL_NICKNAME_CHARACTERS.) */
int
is_legal_nickname(const char *s)
{
@@ -2442,7 +2773,7 @@ is_legal_nickname(const char *s)
strspn(s,LEGAL_NICKNAME_CHARACTERS) == len;
}
-/** Return true iff <b>s</b> is a legally valid server nickname or
+/** Return true iff <b>s</b> is a valid server nickname or
* hex-encoded identity-key digest. */
int
is_legal_nickname_or_hexdigest(const char *s)
@@ -2453,8 +2784,11 @@ is_legal_nickname_or_hexdigest(const char *s)
return is_legal_hexdigest(s);
}
-/** Return true iff <b>s</b> is a legally valid hex-encoded identity-key
- * digest. */
+/** Return true iff <b>s</b> is a valid hex-encoded identity-key
+ * digest. (That is, an optional $, followed by 40 hex characters,
+ * followed by either nothing, or = or ~ followed by a nickname, or
+ * a character other than =, ~, or a hex character.)
+ */
int
is_legal_hexdigest(const char *s)
{
@@ -2677,23 +3011,6 @@ router_get_verbose_nickname(char *buf, const routerinfo_t *router)
strlcpy(buf+1+HEX_DIGEST_LEN+1, router->nickname, MAX_NICKNAME_LEN+1);
}
-/** Set <b>buf</b> (which must have MAX_VERBOSE_NICKNAME_LEN+1 bytes) to the
- * verbose representation of the identity of <b>router</b>. The format is:
- * A dollar sign.
- * The upper-case hexadecimal encoding of the SHA1 hash of router's identity.
- * A "=" if the router is named; a "~" if it is not.
- * The router's nickname.
- **/
-void
-routerstatus_get_verbose_nickname(char *buf, const routerstatus_t *router)
-{
- buf[0] = '$';
- base16_encode(buf+1, HEX_DIGEST_LEN+1, router->identity_digest,
- DIGEST_LEN);
- buf[1+HEX_DIGEST_LEN] = router->is_named ? '=' : '~';
- strlcpy(buf+1+HEX_DIGEST_LEN+1, router->nickname, MAX_NICKNAME_LEN+1);
-}
-
/** Forget that we have issued any router-related warnings, so that we'll
* warn again if we see the same errors. */
void
@@ -2752,9 +3069,41 @@ router_free_all(void)
crypto_pk_free(legacy_signing_key);
authority_cert_free(legacy_key_certificate);
+#ifdef CURVE25519_ENABLED
+ memwipe(&curve25519_onion_key, 0, sizeof(curve25519_onion_key));
+ memwipe(&last_curve25519_onion_key, 0, sizeof(last_curve25519_onion_key));
+#endif
+
if (warned_nonexistent_family) {
SMARTLIST_FOREACH(warned_nonexistent_family, char *, cp, tor_free(cp));
smartlist_free(warned_nonexistent_family);
}
}
+/** Return a smartlist of tor_addr_port_t's with all the OR ports of
+ <b>ri</b>. Note that freeing of the items in the list as well as
+ the smartlist itself is the callers responsibility.
+
+ XXX duplicating code from node_get_all_orports(). */
+smartlist_t *
+router_get_all_orports(const routerinfo_t *ri)
+{
+ smartlist_t *sl = smartlist_new();
+ tor_assert(ri);
+
+ if (ri->addr != 0) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_from_ipv4h(&ap->addr, ri->addr);
+ ap->port = ri->or_port;
+ smartlist_add(sl, ap);
+ }
+ if (!tor_addr_is_null(&ri->ipv6_addr)) {
+ tor_addr_port_t *ap = tor_malloc(sizeof(tor_addr_port_t));
+ tor_addr_copy(&ap->addr, &ri->ipv6_addr);
+ ap->port = ri->or_port;
+ smartlist_add(sl, ap);
+ }
+
+ return sl;
+}
+
diff --git a/src/or/router.h b/src/or/router.h
index 69805d6f2..d18ff065e 100644
--- a/src/or/router.h
+++ b/src/or/router.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,8 +9,10 @@
* \brief Header file for router.c.
**/
-#ifndef _TOR_ROUTER_H
-#define _TOR_ROUTER_H
+#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);
@@ -30,6 +32,11 @@ crypto_pk_t *init_key_from_file(const char *fname, int generate,
int severity);
void v3_authority_check_key_expiry(void);
+#ifdef CURVE25519_ENABLED
+di_digest256_map_t *construct_ntor_key_map(void);
+void ntor_key_map_free(di_digest256_map_t *map);
+#endif
+
int router_initialize_tls_context(void);
int init_keys(void);
@@ -43,8 +50,6 @@ void router_perform_bandwidth_test(int num_circs, time_t now);
int net_is_disabled(void);
int authdir_mode(const or_options_t *options);
-int authdir_mode_v1(const or_options_t *options);
-int authdir_mode_v2(const or_options_t *options);
int authdir_mode_v3(const or_options_t *options);
int authdir_mode_any_main(const or_options_t *options);
int authdir_mode_any_nonhidserv(const or_options_t *options);
@@ -53,13 +58,16 @@ int authdir_mode_publishes_statuses(const or_options_t *options);
int authdir_mode_tests_reachability(const or_options_t *options);
int authdir_mode_bridge(const or_options_t *options);
-uint16_t router_get_active_listener_port_by_type(int listener_type);
+uint16_t router_get_active_listener_port_by_type_af(int listener_type,
+ sa_family_t family);
uint16_t router_get_advertised_or_port(const or_options_t *options);
+uint16_t router_get_advertised_or_port_by_af(const or_options_t *options,
+ sa_family_t family);
uint16_t router_get_advertised_dir_port(const or_options_t *options,
uint16_t dirport);
-int server_mode(const or_options_t *options);
-int public_server_mode(const or_options_t *options);
+MOCK_DECL(int, server_mode, (const or_options_t *options));
+MOCK_DECL(int, public_server_mode, (const or_options_t *options));
int advertised_server_mode(void);
int proxy_mode(const or_options_t *options);
void consider_publishable_server(int force);
@@ -72,20 +80,23 @@ void check_descriptor_bandwidth_changed(time_t now);
void check_descriptor_ipaddress_changed(time_t now);
void router_new_address_suggestion(const char *suggestion,
const dir_connection_t *d_conn);
-int router_compare_to_my_exit_policy(edge_connection_t *conn);
+int router_compare_to_my_exit_policy(const tor_addr_t *addr, uint16_t port);
int router_my_exit_policy_is_reject_star(void);
-const routerinfo_t *router_get_my_routerinfo(void);
+MOCK_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
extrainfo_t *router_get_my_extrainfo(void);
const char *router_get_my_descriptor(void);
const char *router_get_descriptor_gen_reason(void);
int router_digest_is_me(const char *digest);
+const uint8_t *router_get_my_id_digest(void);
int router_extrainfo_digest_is_me(const char *digest);
int router_is_me(const routerinfo_t *router);
-int router_fingerprint_is_me(const char *fp);
int router_pick_published_address(const or_options_t *options, uint32_t *addr);
int router_rebuild_descriptor(int force);
-int router_dump_router_to_string(char *s, size_t maxlen, routerinfo_t *router,
- crypto_pk_t *ident_key);
+char *router_dump_router_to_string(routerinfo_t *router,
+ crypto_pk_t *ident_key);
+char *router_dump_exit_policy_to_string(const routerinfo_t *router,
+ int include_ipv4,
+ int include_ipv6);
void router_get_prim_orport(const routerinfo_t *router,
tor_addr_port_t *addr_port_out);
void router_get_pref_orport(const routerinfo_t *router,
@@ -93,6 +104,9 @@ void router_get_pref_orport(const routerinfo_t *router,
void router_get_pref_ipv6_orport(const routerinfo_t *router,
tor_addr_port_t *addr_port_out);
int router_ipv6_preferred(const routerinfo_t *router);
+int router_has_addr(const routerinfo_t *router, const tor_addr_t *addr);
+int router_has_orport(const routerinfo_t *router,
+ const tor_addr_port_t *orport);
int extrainfo_dump_to_string(char **s, extrainfo_t *extrainfo,
crypto_pk_t *ident_key);
int is_legal_nickname(const char *s);
@@ -123,8 +137,6 @@ const char *routerstatus_describe(const routerstatus_t *ri);
const char *extend_info_describe(const extend_info_t *ei);
void router_get_verbose_nickname(char *buf, const routerinfo_t *router);
-void routerstatus_get_verbose_nickname(char *buf,
- const routerstatus_t *router);
void router_reset_warnings(void);
void router_reset_reachability(void);
void router_free_all(void);
@@ -132,9 +144,12 @@ void router_free_all(void);
const char *router_purpose_to_string(uint8_t p);
uint8_t router_purpose_from_string(const char *s);
+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);
+STATIC int router_write_fingerprint(int hashed);
#endif
#endif
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 3c39e362d..8f3477a4a 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,14 +11,17 @@
* servers.
**/
+#define ROUTERLIST_PRIVATE
#include "or.h"
-#include "circuitbuild.h"
+#include "circuitstats.h"
#include "config.h"
#include "connection.h"
#include "control.h"
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
+#include "entrynodes.h"
+#include "fp_pair.h"
#include "geoip.h"
#include "hibernate.h"
#include "main.h"
@@ -33,55 +36,82 @@
#include "router.h"
#include "routerlist.h"
#include "routerparse.h"
-
+#include "routerset.h"
+#include "../common/sandbox.h"
// #define DEBUG_ROUTERLIST
/****************************************************************************/
+DECLARE_TYPED_DIGESTMAP_FNS(sdmap_, digest_sd_map_t, signed_descriptor_t)
+DECLARE_TYPED_DIGESTMAP_FNS(rimap_, digest_ri_map_t, routerinfo_t)
+DECLARE_TYPED_DIGESTMAP_FNS(eimap_, digest_ei_map_t, extrainfo_t)
+DECLARE_TYPED_DIGESTMAP_FNS(dsmap_, digest_ds_map_t, download_status_t)
+#define SDMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(sdmap_to_digestmap(map), keyvar, signed_descriptor_t *, \
+ valvar)
+#define RIMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(rimap_to_digestmap(map), keyvar, routerinfo_t *, valvar)
+#define EIMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(eimap_to_digestmap(map), keyvar, extrainfo_t *, valvar)
+#define DSMAP_FOREACH(map, keyvar, valvar) \
+ DIGESTMAP_FOREACH(dsmap_to_digestmap(map), keyvar, download_status_t *, \
+ valvar)
+
+/* Forward declaration for cert_list_t */
+typedef struct cert_list_t cert_list_t;
+
/* static function prototypes */
+static int compute_weighted_bandwidths(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule,
+ u64_dbl_t **bandwidths_out);
static const routerstatus_t *router_pick_directory_server_impl(
dirinfo_type_t auth, int flags);
static const routerstatus_t *router_pick_trusteddirserver_impl(
- dirinfo_type_t auth, int flags, int *n_busy_out);
-static void mark_all_trusteddirservers_up(void);
-static int router_nickname_matches(const routerinfo_t *router,
- const char *nickname);
-static int node_nickname_matches(const node_t *router,
- const char *nickname);
-static void trusted_dir_server_free(trusted_dir_server_t *ds);
+ const smartlist_t *sourcelist, dirinfo_type_t auth,
+ int flags, int *n_busy_out);
+static const routerstatus_t *router_pick_dirserver_generic(
+ smartlist_t *sourcelist,
+ dirinfo_type_t type, int flags);
+static void mark_all_dirservers_up(smartlist_t *server_list);
+static void dir_server_free(dir_server_t *ds);
static int signed_desc_digest_is_recognized(signed_descriptor_t *desc);
-static void update_router_have_minimum_dir_info(void);
static const char *signed_descriptor_get_body_impl(
const signed_descriptor_t *desc,
int with_annotations);
static void list_pending_downloads(digestmap_t *result,
int purpose, const char *prefix);
+static void list_pending_fpsk_downloads(fp_pair_map_t *result);
static void launch_dummy_descriptor_download_as_needed(time_t now,
const or_options_t *options);
-
-DECLARE_TYPED_DIGESTMAP_FNS(sdmap_, digest_sd_map_t, signed_descriptor_t)
-DECLARE_TYPED_DIGESTMAP_FNS(rimap_, digest_ri_map_t, routerinfo_t)
-DECLARE_TYPED_DIGESTMAP_FNS(eimap_, digest_ei_map_t, extrainfo_t)
-#define SDMAP_FOREACH(map, keyvar, valvar) \
- DIGESTMAP_FOREACH(sdmap_to_digestmap(map), keyvar, signed_descriptor_t *, \
- valvar)
-#define RIMAP_FOREACH(map, keyvar, valvar) \
- DIGESTMAP_FOREACH(rimap_to_digestmap(map), keyvar, routerinfo_t *, valvar)
-#define EIMAP_FOREACH(map, keyvar, valvar) \
- DIGESTMAP_FOREACH(eimap_to_digestmap(map), keyvar, extrainfo_t *, valvar)
+static void download_status_reset_by_sk_in_cl(cert_list_t *cl,
+ const char *digest);
+static int download_status_is_ready_by_sk_in_cl(cert_list_t *cl,
+ const char *digest,
+ time_t now, int max_failures);
/****************************************************************************/
-/** Global list of a trusted_dir_server_t object for each trusted directory
- * server. */
+/** Global list of a dir_server_t object for each directory
+ * authority. */
static smartlist_t *trusted_dir_servers = NULL;
+/** Global list of dir_server_t objects for all directory authorities
+ * and all fallback directory servers. */
+static smartlist_t *fallback_dir_servers = NULL;
-/** List of for a given authority, and download status for latest certificate.
+/** List of certificates for a single authority, and download status for
+ * latest certificate.
*/
-typedef struct cert_list_t {
- download_status_t dl_status;
+struct cert_list_t {
+ /*
+ * The keys of download status map are cert->signing_key_digest for pending
+ * downloads by (identity digest/signing key digest) pair; functions such
+ * as authority_cert_get_by_digest() already assume these are unique.
+ */
+ struct digest_ds_map_t *dl_status_map;
+ /* There is also a dlstatus for the download by identity key only */
+ download_status_t dl_status_by_id;
smartlist_t *certs;
-} cert_list_t;
+};
/** Map from v3 identity key digest to cert_list_t. */
static digestmap_t *trusted_dir_certs = NULL;
/** True iff any key certificate in at least one member of
@@ -101,16 +131,6 @@ static smartlist_t *warned_nicknames = NULL;
* download is low. */
static time_t last_descriptor_download_attempted = 0;
-/** When we last computed the weights to use for bandwidths on directory
- * requests, what were the total weighted bandwidth, and our share of that
- * bandwidth? Used to determine what fraction of directory requests we should
- * expect to see.
- *
- * @{ */
-static uint64_t sl_last_total_weighted_bw = 0,
- sl_last_weighted_bw_of_me = 0;
-/**@}*/
-
/** Return the number of directory authorities whose type matches some bit set
* in <b>type</b> */
int
@@ -119,13 +139,77 @@ get_n_authorities(dirinfo_type_t type)
int n = 0;
if (!trusted_dir_servers)
return 0;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
if (ds->type & type)
++n);
return n;
}
-#define get_n_v2_authorities() get_n_authorities(V2_DIRINFO)
+/** Reset the download status of a specified element in a dsmap */
+static void
+download_status_reset_by_sk_in_cl(cert_list_t *cl, const char *digest)
+{
+ download_status_t *dlstatus = NULL;
+
+ tor_assert(cl);
+ tor_assert(digest);
+
+ /* Make sure we have a dsmap */
+ if (!(cl->dl_status_map)) {
+ cl->dl_status_map = dsmap_new();
+ }
+ /* Look for a download_status_t in the map with this digest */
+ dlstatus = dsmap_get(cl->dl_status_map, digest);
+ /* Got one? */
+ if (!dlstatus) {
+ /* Insert before we reset */
+ dlstatus = tor_malloc_zero(sizeof(*dlstatus));
+ dsmap_set(cl->dl_status_map, digest, dlstatus);
+ }
+ tor_assert(dlstatus);
+ /* Go ahead and reset it */
+ download_status_reset(dlstatus);
+}
+
+/**
+ * Return true if the download for this signing key digest in cl is ready
+ * to be re-attempted.
+ */
+static int
+download_status_is_ready_by_sk_in_cl(cert_list_t *cl,
+ const char *digest,
+ time_t now, int max_failures)
+{
+ int rv = 0;
+ download_status_t *dlstatus = NULL;
+
+ tor_assert(cl);
+ tor_assert(digest);
+
+ /* Make sure we have a dsmap */
+ if (!(cl->dl_status_map)) {
+ cl->dl_status_map = dsmap_new();
+ }
+ /* Look for a download_status_t in the map with this digest */
+ dlstatus = dsmap_get(cl->dl_status_map, digest);
+ /* Got one? */
+ if (dlstatus) {
+ /* Use download_status_is_ready() */
+ rv = download_status_is_ready(dlstatus, now, max_failures);
+ } else {
+ /*
+ * If we don't know anything about it, return 1, since we haven't
+ * tried this one before. We need to create a new entry here,
+ * too.
+ */
+ dlstatus = tor_malloc_zero(sizeof(*dlstatus));
+ download_status_reset(dlstatus);
+ dsmap_set(cl->dl_status_map, digest, dlstatus);
+ rv = 1;
+ }
+
+ return rv;
+}
/** Helper: Return the cert_list_t for an authority whose authority ID is
* <b>id_digest</b>, allocating a new list if necessary. */
@@ -138,13 +222,35 @@ get_cert_list(const char *id_digest)
cl = digestmap_get(trusted_dir_certs, id_digest);
if (!cl) {
cl = tor_malloc_zero(sizeof(cert_list_t));
- cl->dl_status.schedule = DL_SCHED_CONSENSUS;
+ cl->dl_status_by_id.schedule = DL_SCHED_CONSENSUS;
cl->certs = smartlist_new();
+ cl->dl_status_map = dsmap_new();
digestmap_set(trusted_dir_certs, id_digest, cl);
}
return cl;
}
+/** Release all space held by a cert_list_t */
+static void
+cert_list_free(cert_list_t *cl)
+{
+ if (!cl)
+ return;
+
+ SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert,
+ authority_cert_free(cert));
+ smartlist_free(cl->certs);
+ dsmap_free(cl->dl_status_map, tor_free_);
+ tor_free(cl);
+}
+
+/** Wrapper for cert_list_free so we can pass it to digestmap_free */
+static void
+cert_list_free_(void *cl)
+{
+ cert_list_free(cl);
+}
+
/** Reload the cached v3 key certificates from the cached-certs file in
* the data directory. Return 0 on success, -1 on failure. */
int
@@ -159,7 +265,9 @@ trusted_dirs_reload_certs(void)
tor_free(filename);
if (!contents)
return 0;
- r = trusted_dirs_load_certs_from_string(contents, 1, 1);
+ r = trusted_dirs_load_certs_from_string(
+ contents,
+ TRUSTED_DIRS_CERTS_SRC_FROM_STORE, 1);
tor_free(contents);
return r;
}
@@ -182,17 +290,23 @@ already_have_cert(authority_cert_t *cert)
}
/** Load a bunch of new key certificates from the string <b>contents</b>. If
- * <b>from_store</b> is true, the certificates are from the cache, and we
- * don't need to flush them to disk. If <b>flush</b> is true, we need
- * to flush any changed certificates to disk now. Return 0 on success, -1
- * if any certs fail to parse. */
+ * <b>source</b> is TRUSTED_DIRS_CERTS_SRC_FROM_STORE, the certificates are
+ * from the cache, and we don't need to flush them to disk. If we are a
+ * dirauth loading our own cert, source is TRUSTED_DIRS_CERTS_SRC_SELF.
+ * Otherwise, source is download type: TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST
+ * or TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST. If <b>flush</b> is true, we
+ * need to flush any changed certificates to disk now. Return 0 on success,
+ * -1 if any certs fail to parse.
+ */
+
int
-trusted_dirs_load_certs_from_string(const char *contents, int from_store,
+trusted_dirs_load_certs_from_string(const char *contents, int source,
int flush)
{
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
const char *s, *eos;
int failure_code = 0;
+ int from_store = (source == TRUSTED_DIRS_CERTS_SRC_FROM_STORE);
for (s = contents; *s; s = eos) {
authority_cert_t *cert = authority_cert_parse_from_string(s, &eos);
@@ -213,9 +327,13 @@ trusted_dirs_load_certs_from_string(const char *contents, int from_store,
from_store ? "cached" : "downloaded",
ds ? ds->nickname : "an old or new authority");
- /* a duplicate on a download should be treated as a failure, since it
- * probably means we wanted a different secret key or we are trying to
- * replace an expired cert that has not in fact been updated. */
+ /*
+ * A duplicate on download should be treated as a failure, so we call
+ * authority_cert_dl_failed() to reset the download status to make sure
+ * we can't try again. Since we've implemented the fp-sk mechanism
+ * to download certs by signing key, this should be much rarer than it
+ * was and is perhaps cause for concern.
+ */
if (!from_store) {
if (authdir_mode(get_options())) {
log_warn(LD_DIR,
@@ -229,7 +347,18 @@ trusted_dirs_load_certs_from_string(const char *contents, int from_store,
ds ? ds->nickname : "an old or new authority");
}
- authority_cert_dl_failed(cert->cache_info.identity_digest, 404);
+ /*
+ * This is where we care about the source; authority_cert_dl_failed()
+ * needs to know whether the download was by fp or (fp,sk) pair to
+ * twiddle the right bit in the download map.
+ */
+ if (source == TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST) {
+ authority_cert_dl_failed(cert->cache_info.identity_digest,
+ NULL, 404);
+ } else if (source == TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST) {
+ authority_cert_dl_failed(cert->cache_info.identity_digest,
+ cert->signing_key_digest, 404);
+ }
}
authority_cert_free(cert);
@@ -309,7 +438,7 @@ trusted_dirs_flush_certs_to_disk(void)
} DIGESTMAP_FOREACH_END;
filename = get_datadir_fname("cached-certs");
- if (write_chunks_to_file(filename, chunks, 0)) {
+ if (write_chunks_to_file(filename, chunks, 0, 0)) {
log_warn(LD_FS, "Error writing certificates to disk.");
}
tor_free(filename);
@@ -329,7 +458,6 @@ trusted_dirs_remove_old_certs(void)
time_t now = time(NULL);
#define DEAD_CERT_LIFETIME (2*24*60*60)
#define OLD_CERT_LIFETIME (7*24*60*60)
-#define CERT_EXPIRY_SKEW (60*60)
if (!trusted_dir_certs)
return;
@@ -445,17 +573,84 @@ authority_cert_get_all(smartlist_t *certs_out)
}
/** Called when an attempt to download a certificate with the authority with
- * ID <b>id_digest</b> fails with HTTP response code <b>status</b>: remember
- * the failure, so we don't try again immediately. */
+ * ID <b>id_digest</b> and, if not NULL, signed with key signing_key_digest
+ * fails with HTTP response code <b>status</b>: remember the failure, so we
+ * don't try again immediately. */
void
-authority_cert_dl_failed(const char *id_digest, int status)
+authority_cert_dl_failed(const char *id_digest,
+ const char *signing_key_digest, int status)
{
cert_list_t *cl;
+ download_status_t *dlstatus = NULL;
+ char id_digest_str[2*DIGEST_LEN+1];
+ char sk_digest_str[2*DIGEST_LEN+1];
+
if (!trusted_dir_certs ||
!(cl = digestmap_get(trusted_dir_certs, id_digest)))
return;
- download_status_failed(&cl->dl_status, status);
+ /*
+ * Are we noting a failed download of the latest cert for the id digest,
+ * or of a download by (id, signing key) digest pair?
+ */
+ if (!signing_key_digest) {
+ /* Just by id digest */
+ download_status_failed(&cl->dl_status_by_id, status);
+ } else {
+ /* Reset by (id, signing key) digest pair
+ *
+ * Look for a download_status_t in the map with this digest
+ */
+ dlstatus = dsmap_get(cl->dl_status_map, signing_key_digest);
+ /* Got one? */
+ if (dlstatus) {
+ download_status_failed(dlstatus, status);
+ } else {
+ /*
+ * Do this rather than hex_str(), since hex_str clobbers
+ * old results and we call twice in the param list.
+ */
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ id_digest, DIGEST_LEN);
+ base16_encode(sk_digest_str, sizeof(sk_digest_str),
+ signing_key_digest, DIGEST_LEN);
+ log_warn(LD_BUG,
+ "Got failure for cert fetch with (fp,sk) = (%s,%s), with "
+ "status %d, but knew nothing about the download.",
+ id_digest_str, sk_digest_str, status);
+ }
+ }
+}
+
+static const char *BAD_SIGNING_KEYS[] = {
+ "09CD84F751FD6E955E0F8ADB497D5401470D697E", // Expires 2015-01-11 16:26:31
+ "0E7E9C07F0969D0468AD741E172A6109DC289F3C", // Expires 2014-08-12 10:18:26
+ "57B85409891D3FB32137F642FDEDF8B7F8CDFDCD", // Expires 2015-02-11 17:19:09
+ "87326329007AF781F587AF5B594E540B2B6C7630", // Expires 2014-07-17 11:10:09
+ "98CC82342DE8D298CF99D3F1A396475901E0D38E", // Expires 2014-11-10 13:18:56
+ "9904B52336713A5ADCB13E4FB14DC919E0D45571", // Expires 2014-04-20 20:01:01
+ "9DCD8E3F1DD1597E2AD476BBA28A1A89F3095227", // Expires 2015-01-16 03:52:30
+ "A61682F34B9BB9694AC98491FE1ABBFE61923941", // Expires 2014-06-11 09:25:09
+ "B59F6E99C575113650C99F1C425BA7B20A8C071D", // Expires 2014-07-31 13:22:10
+ "D27178388FA75B96D37FA36E0B015227DDDBDA51", // Expires 2014-08-04 04:01:57
+ NULL,
+};
+
+/** DOCDOC */
+int
+authority_cert_is_blacklisted(const authority_cert_t *cert)
+{
+ char hex_digest[HEX_DIGEST_LEN+1];
+ int i;
+ base16_encode(hex_digest, sizeof(hex_digest),
+ cert->signing_key_digest, sizeof(cert->signing_key_digest));
+
+ for (i = 0; BAD_SIGNING_KEYS[i]; ++i) {
+ if (!strcasecmp(hex_digest, BAD_SIGNING_KEYS[i])) {
+ return 1;
+ }
+ }
+ return 0;
}
/** Return true iff when we've been getting enough failures when trying to
@@ -471,13 +666,10 @@ authority_cert_dl_looks_uncertain(const char *id_digest)
!(cl = digestmap_get(trusted_dir_certs, id_digest)))
return 0;
- n_failures = download_status_get_n_failures(&cl->dl_status);
+ n_failures = download_status_get_n_failures(&cl->dl_status_by_id);
return n_failures >= N_AUTH_CERT_DL_FAILURES_TO_BUG_USER;
}
-/** How many times will we try to fetch a certificate before giving up? */
-#define MAX_CERT_DL_FAILURES 8
-
/** Try to download any v3 authority certificates that we may be missing. If
* <b>status</b> is provided, try to get all the ones that were used to sign
* <b>status</b>. Additionally, try to have a non-expired certificate for
@@ -487,20 +679,88 @@ authority_cert_dl_looks_uncertain(const char *id_digest)
void
authority_certs_fetch_missing(networkstatus_t *status, time_t now)
{
- digestmap_t *pending;
+ /*
+ * The pending_id digestmap tracks pending certificate downloads by
+ * identity digest; the pending_cert digestmap tracks pending downloads
+ * by (identity digest, signing key digest) pairs.
+ */
+ digestmap_t *pending_id;
+ fp_pair_map_t *pending_cert;
authority_cert_t *cert;
- smartlist_t *missing_digests;
+ /*
+ * The missing_id_digests smartlist will hold a list of id digests
+ * we want to fetch the newest cert for; the missing_cert_digests
+ * smartlist will hold a list of fp_pair_t with an identity and
+ * signing key digest.
+ */
+ smartlist_t *missing_cert_digests, *missing_id_digests;
char *resource = NULL;
cert_list_t *cl;
const int cache = directory_caches_unknown_auth_certs(get_options());
+ fp_pair_t *fp_tmp = NULL;
+ char id_digest_str[2*DIGEST_LEN+1];
+ char sk_digest_str[2*DIGEST_LEN+1];
- if (should_delay_dir_fetches(get_options()))
+ if (should_delay_dir_fetches(get_options(), NULL))
return;
- pending = digestmap_new();
- missing_digests = smartlist_new();
+ pending_cert = fp_pair_map_new();
+ pending_id = digestmap_new();
+ missing_cert_digests = smartlist_new();
+ missing_id_digests = smartlist_new();
+
+ /*
+ * First, we get the lists of already pending downloads so we don't
+ * duplicate effort.
+ */
+ list_pending_downloads(pending_id, DIR_PURPOSE_FETCH_CERTIFICATE, "fp/");
+ list_pending_fpsk_downloads(pending_cert);
+
+ /*
+ * Now, we download any trusted authority certs we don't have by
+ * identity digest only. This gets the latest cert for that authority.
+ */
+ SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, dir_server_t *, ds) {
+ int found = 0;
+ if (!(ds->type & V3_DIRINFO))
+ continue;
+ if (smartlist_contains_digest(missing_id_digests,
+ ds->v3_identity_digest))
+ continue;
+ cl = get_cert_list(ds->v3_identity_digest);
+ SMARTLIST_FOREACH_BEGIN(cl->certs, authority_cert_t *, cert) {
+ if (now < cert->expires) {
+ /* It's not expired, and we weren't looking for something to
+ * verify a consensus with. Call it done. */
+ download_status_reset(&(cl->dl_status_by_id));
+ /* No sense trying to download it specifically by signing key hash */
+ download_status_reset_by_sk_in_cl(cl, cert->signing_key_digest);
+ found = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(cert);
+ if (!found &&
+ download_status_is_ready(&(cl->dl_status_by_id), now,
+ get_options()->TestingCertMaxDownloadTries) &&
+ !digestmap_get(pending_id, ds->v3_identity_digest)) {
+ log_info(LD_DIR,
+ "No current certificate known for authority %s "
+ "(ID digest %s); launching request.",
+ ds->nickname, hex_str(ds->v3_identity_digest, DIGEST_LEN));
+ smartlist_add(missing_id_digests, ds->v3_identity_digest);
+ }
+ } SMARTLIST_FOREACH_END(ds);
- list_pending_downloads(pending, DIR_PURPOSE_FETCH_CERTIFICATE, "fp/");
+ /*
+ * Next, if we have a consensus, scan through it and look for anything
+ * signed with a key from a cert we don't have. Those get downloaded
+ * by (fp,sk) pair, but if we don't know any certs at all for the fp
+ * (identity digest), and it's one of the trusted dir server certs
+ * we started off above or a pending download in pending_id, don't
+ * try to get it yet. Most likely, the one we'll get for that will
+ * have the right signing key too, and we'd just be downloading
+ * redundantly.
+ */
if (status) {
SMARTLIST_FOREACH_BEGIN(status->voters, networkstatus_voter_info_t *,
voter) {
@@ -510,84 +770,164 @@ authority_certs_fetch_missing(networkstatus_t *status, time_t now)
if (!cache &&
!trusteddirserver_get_by_v3_auth_digest(voter->identity_digest))
continue; /* We are not a cache, and we don't know this authority.*/
+
+ /*
+ * If we don't know *any* cert for this authority, and a download by ID
+ * is pending or we added it to missing_id_digests above, skip this
+ * one for now to avoid duplicate downloads.
+ */
cl = get_cert_list(voter->identity_digest);
+ if (smartlist_len(cl->certs) == 0) {
+ /* We have no certs at all for this one */
+
+ /* Do we have a download of one pending? */
+ if (digestmap_get(pending_id, voter->identity_digest))
+ continue;
+
+ /*
+ * Are we about to launch a download of one due to the trusted
+ * dir server check above?
+ */
+ if (smartlist_contains_digest(missing_id_digests,
+ voter->identity_digest))
+ continue;
+ }
+
SMARTLIST_FOREACH_BEGIN(voter->sigs, document_signature_t *, sig) {
cert = authority_cert_get_by_digests(voter->identity_digest,
sig->signing_key_digest);
if (cert) {
if (now < cert->expires)
- download_status_reset(&cl->dl_status);
+ download_status_reset_by_sk_in_cl(cl, sig->signing_key_digest);
continue;
}
- if (download_status_is_ready(&cl->dl_status, now,
- MAX_CERT_DL_FAILURES) &&
- !digestmap_get(pending, voter->identity_digest)) {
- log_info(LD_DIR, "We're missing a certificate from authority "
- "with signing key %s: launching request.",
- hex_str(sig->signing_key_digest, DIGEST_LEN));
- smartlist_add(missing_digests, sig->identity_digest);
+ if (download_status_is_ready_by_sk_in_cl(
+ cl, sig->signing_key_digest,
+ now, get_options()->TestingCertMaxDownloadTries) &&
+ !fp_pair_map_get_by_digests(pending_cert,
+ voter->identity_digest,
+ sig->signing_key_digest)) {
+ /*
+ * Do this rather than hex_str(), since hex_str clobbers
+ * old results and we call twice in the param list.
+ */
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ voter->identity_digest, DIGEST_LEN);
+ base16_encode(sk_digest_str, sizeof(sk_digest_str),
+ sig->signing_key_digest, DIGEST_LEN);
+
+ if (voter->nickname) {
+ log_info(LD_DIR,
+ "We're missing a certificate from authority %s "
+ "(ID digest %s) with signing key %s: "
+ "launching request.",
+ voter->nickname, id_digest_str, sk_digest_str);
+ } else {
+ log_info(LD_DIR,
+ "We're missing a certificate from authority ID digest "
+ "%s with signing key %s: launching request.",
+ id_digest_str, sk_digest_str);
+ }
+
+ /* Allocate a new fp_pair_t to append */
+ fp_tmp = tor_malloc(sizeof(*fp_tmp));
+ memcpy(fp_tmp->first, voter->identity_digest, sizeof(fp_tmp->first));
+ memcpy(fp_tmp->second, sig->signing_key_digest,
+ sizeof(fp_tmp->second));
+ smartlist_add(missing_cert_digests, fp_tmp);
}
} SMARTLIST_FOREACH_END(sig);
} SMARTLIST_FOREACH_END(voter);
}
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, ds) {
- int found = 0;
- if (!(ds->type & V3_DIRINFO))
- continue;
- if (smartlist_digest_isin(missing_digests, ds->v3_identity_digest))
- continue;
- cl = get_cert_list(ds->v3_identity_digest);
- SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert, {
- if (now < cert->expires) {
- /* It's not expired, and we weren't looking for something to
- * verify a consensus with. Call it done. */
- download_status_reset(&cl->dl_status);
- found = 1;
- break;
- }
- });
- if (!found &&
- download_status_is_ready(&cl->dl_status, now,MAX_CERT_DL_FAILURES) &&
- !digestmap_get(pending, ds->v3_identity_digest)) {
- log_info(LD_DIR, "No current certificate known for authority %s; "
- "launching request.", ds->nickname);
- smartlist_add(missing_digests, ds->v3_identity_digest);
- }
- } SMARTLIST_FOREACH_END(ds);
- if (!smartlist_len(missing_digests)) {
- goto done;
- } else {
+ /* Do downloads by identity digest */
+ if (smartlist_len(missing_id_digests) > 0) {
+ int need_plus = 0;
smartlist_t *fps = smartlist_new();
+
smartlist_add(fps, tor_strdup("fp/"));
- SMARTLIST_FOREACH(missing_digests, const char *, d, {
- char *fp;
- if (digestmap_get(pending, d))
- continue;
- fp = tor_malloc(HEX_DIGEST_LEN+2);
- base16_encode(fp, HEX_DIGEST_LEN+1, d, DIGEST_LEN);
- fp[HEX_DIGEST_LEN] = '+';
- fp[HEX_DIGEST_LEN+1] = '\0';
- smartlist_add(fps, fp);
- });
- if (smartlist_len(fps) == 1) {
- /* we didn't add any: they were all pending */
- SMARTLIST_FOREACH(fps, char *, cp, tor_free(cp));
- smartlist_free(fps);
- goto done;
+
+ SMARTLIST_FOREACH_BEGIN(missing_id_digests, const char *, d) {
+ char *fp = NULL;
+
+ if (digestmap_get(pending_id, d))
+ continue;
+
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ d, DIGEST_LEN);
+
+ if (need_plus) {
+ tor_asprintf(&fp, "+%s", id_digest_str);
+ } else {
+ /* No need for tor_asprintf() in this case; first one gets no '+' */
+ fp = tor_strdup(id_digest_str);
+ need_plus = 1;
+ }
+
+ smartlist_add(fps, fp);
+ } SMARTLIST_FOREACH_END(d);
+
+ if (smartlist_len(fps) > 1) {
+ resource = smartlist_join_strings(fps, "", 0, NULL);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
+ resource, PDS_RETRY_IF_NO_SERVERS);
+ tor_free(resource);
}
- resource = smartlist_join_strings(fps, "", 0, NULL);
- resource[strlen(resource)-1] = '\0';
+ /* else we didn't add any: they were all pending */
+
SMARTLIST_FOREACH(fps, char *, cp, tor_free(cp));
smartlist_free(fps);
}
- directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
- resource, PDS_RETRY_IF_NO_SERVERS);
- done:
- tor_free(resource);
- smartlist_free(missing_digests);
- digestmap_free(pending, NULL);
+ /* Do downloads by identity digest/signing key pair */
+ if (smartlist_len(missing_cert_digests) > 0) {
+ int need_plus = 0;
+ smartlist_t *fp_pairs = smartlist_new();
+
+ smartlist_add(fp_pairs, tor_strdup("fp-sk/"));
+
+ SMARTLIST_FOREACH_BEGIN(missing_cert_digests, const fp_pair_t *, d) {
+ char *fp_pair = NULL;
+
+ if (fp_pair_map_get(pending_cert, d))
+ continue;
+
+ /* Construct string encodings of the digests */
+ base16_encode(id_digest_str, sizeof(id_digest_str),
+ d->first, DIGEST_LEN);
+ base16_encode(sk_digest_str, sizeof(sk_digest_str),
+ d->second, DIGEST_LEN);
+
+ /* Now tor_asprintf() */
+ if (need_plus) {
+ tor_asprintf(&fp_pair, "+%s-%s", id_digest_str, sk_digest_str);
+ } else {
+ /* First one in the list doesn't get a '+' */
+ tor_asprintf(&fp_pair, "%s-%s", id_digest_str, sk_digest_str);
+ need_plus = 1;
+ }
+
+ /* Add it to the list of pairs to request */
+ smartlist_add(fp_pairs, fp_pair);
+ } SMARTLIST_FOREACH_END(d);
+
+ if (smartlist_len(fp_pairs) > 1) {
+ resource = smartlist_join_strings(fp_pairs, "", 0, NULL);
+ directory_get_from_dirserver(DIR_PURPOSE_FETCH_CERTIFICATE, 0,
+ resource, PDS_RETRY_IF_NO_SERVERS);
+ tor_free(resource);
+ }
+ /* else they were all pending */
+
+ SMARTLIST_FOREACH(fp_pairs, char *, p, tor_free(p));
+ smartlist_free(fp_pairs);
+ }
+
+ smartlist_free(missing_id_digests);
+ SMARTLIST_FOREACH(missing_cert_digests, fp_pair_t *, p, tor_free(p));
+ smartlist_free(missing_cert_digests);
+ digestmap_free(pending_id, NULL);
+ fp_pair_map_free(pending_cert, NULL);
}
/* Router descriptor storage.
@@ -655,7 +995,7 @@ signed_desc_append_to_journal(signed_descriptor_t *desc,
* signed_descriptor_t* in *<b>a</b> is older, the same age as, or newer than
* the signed_descriptor_t* in *<b>b</b>. */
static int
-_compare_signed_descriptors_by_age(const void **_a, const void **_b)
+compare_signed_descriptors_by_age_(const void **_a, const void **_b)
{
const signed_descriptor_t *r1 = *_a, *r2 = *_b;
return (int)(r1->published_on - r2->published_on);
@@ -728,7 +1068,7 @@ router_rebuild_store(int flags, desc_store_t *store)
smartlist_add(signed_descriptors, &ri->cache_info));
}
- smartlist_sort(signed_descriptors, _compare_signed_descriptors_by_age);
+ smartlist_sort(signed_descriptors, compare_signed_descriptors_by_age_);
/* Now, add the appropriate members to chunk_list */
SMARTLIST_FOREACH_BEGIN(signed_descriptors, signed_descriptor_t *, sd) {
@@ -749,15 +1089,18 @@ router_rebuild_store(int flags, desc_store_t *store)
smartlist_add(chunk_list, c);
} SMARTLIST_FOREACH_END(sd);
- if (write_chunks_to_file(fname_tmp, chunk_list, 1)<0) {
+ if (write_chunks_to_file(fname_tmp, chunk_list, 1, 1)<0) {
log_warn(LD_FS, "Error writing router store to disk.");
goto done;
}
/* Our mmap is now invalid. */
if (store->mmap) {
- tor_munmap_file(store->mmap);
+ int res = tor_munmap_file(store->mmap);
store->mmap = NULL;
+ if (res != 0) {
+ log_warn(LD_FS, "Unable to munmap route store in %s", fname);
+ }
}
if (replace_file(fname_tmp, fname)<0) {
@@ -824,32 +1167,25 @@ router_rebuild_store(int flags, desc_store_t *store)
static int
router_reload_router_list_impl(desc_store_t *store)
{
- char *fname = NULL, *altname = NULL, *contents = NULL;
+ char *fname = NULL, *contents = NULL;
struct stat st;
- int read_from_old_location = 0;
int extrainfo = (store->type == EXTRAINFO_STORE);
- time_t now = time(NULL);
store->journal_len = store->store_len = 0;
fname = get_datadir_fname(store->fname_base);
- if (store->fname_alt_base)
- altname = get_datadir_fname(store->fname_alt_base);
- if (store->mmap) /* get rid of it first */
- tor_munmap_file(store->mmap);
- store->mmap = NULL;
+ if (store->mmap) {
+ /* get rid of it first */
+ int res = tor_munmap_file(store->mmap);
+ store->mmap = NULL;
+ if (res != 0) {
+ log_warn(LD_FS, "Failed to munmap %s", fname);
+ tor_free(fname);
+ return -1;
+ }
+ }
store->mmap = tor_mmap_file(fname);
- if (!store->mmap && altname && file_status(altname) == FN_FILE) {
- read_from_old_location = 1;
- log_notice(LD_DIR, "Couldn't read %s; trying to load routers from old "
- "location %s.", fname, altname);
- if ((store->mmap = tor_mmap_file(altname)))
- read_from_old_location = 1;
- }
- if (altname && !read_from_old_location) {
- remove_file_if_very_old(altname, now);
- }
if (store->mmap) {
store->store_len = store->mmap->size;
if (extrainfo)
@@ -866,14 +1202,6 @@ router_reload_router_list_impl(desc_store_t *store)
fname = get_datadir_fname_suffix(store->fname_base, ".new");
if (file_status(fname) == FN_FILE)
contents = read_file_to_str(fname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
- if (read_from_old_location) {
- tor_free(altname);
- altname = get_datadir_fname_suffix(store->fname_alt_base, ".new");
- if (!contents)
- contents = read_file_to_str(altname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
- else
- remove_file_if_very_old(altname, now);
- }
if (contents) {
if (extrainfo)
router_load_extrainfo_from_string(contents, NULL,SAVED_IN_JOURNAL,
@@ -886,9 +1214,8 @@ router_reload_router_list_impl(desc_store_t *store)
}
tor_free(fname);
- tor_free(altname);
- if (store->journal_len || read_from_old_location) {
+ if (store->journal_len) {
/* Always clear the journal on startup.*/
router_rebuild_store(RRS_FORCE, store);
} else if (!extrainfo) {
@@ -914,11 +1241,11 @@ router_reload_router_list(void)
return 0;
}
-/** Return a smartlist containing a list of trusted_dir_server_t * for all
+/** Return a smartlist containing a list of dir_server_t * for all
* known trusted dirservers. Callers must not modify the list or its
* contents.
*/
-smartlist_t *
+const smartlist_t *
router_get_trusted_dir_servers(void)
{
if (!trusted_dir_servers)
@@ -927,6 +1254,15 @@ router_get_trusted_dir_servers(void)
return trusted_dir_servers;
}
+const smartlist_t *
+router_get_fallback_dir_servers(void)
+{
+ if (!fallback_dir_servers)
+ fallback_dir_servers = smartlist_new();
+
+ return fallback_dir_servers;
+}
+
/** Try to find a running dirserver that supports operations of <b>type</b>.
*
* If there are no running dirservers in our routerlist and the
@@ -946,8 +1282,6 @@ const routerstatus_t *
router_pick_directory_server(dirinfo_type_t type, int flags)
{
const routerstatus_t *choice;
- if (get_options()->PreferTunneledDirConns)
- flags |= _PDS_PREFER_TUNNELED_DIR_CONNS;
if (!routerlist)
return NULL;
@@ -960,63 +1294,40 @@ router_pick_directory_server(dirinfo_type_t type, int flags)
"No reachable router entries for dirservers. "
"Trying them all again.");
/* mark all authdirservers as up again */
- mark_all_trusteddirservers_up();
+ mark_all_dirservers_up(fallback_dir_servers);
/* try again */
choice = router_pick_directory_server_impl(type, flags);
return choice;
}
-/** Try to determine which fraction of v2 and v3 directory requests aimed at
- * caches will be sent to us. Set *<b>v2_share_out</b> and
- * *<b>v3_share_out</b> to the fractions of v2 and v3 protocol shares we
- * expect to see, respectively. Return 0 on success, negative on failure. */
-int
-router_get_my_share_of_directory_requests(double *v2_share_out,
- double *v3_share_out)
+/** Return the dir_server_t for the directory authority whose identity
+ * key hashes to <b>digest</b>, or NULL if no such authority is known.
+ */
+dir_server_t *
+router_get_trusteddirserver_by_digest(const char *digest)
{
- const routerinfo_t *me = router_get_my_routerinfo();
- const routerstatus_t *rs;
- const int pds_flags = PDS_ALLOW_SELF|PDS_IGNORE_FASCISTFIREWALL;
- *v2_share_out = *v3_share_out = 0.0;
- if (!me)
- return -1;
- rs = router_get_consensus_status_by_id(me->cache_info.identity_digest);
- if (!rs)
- return -1;
-
- /* Calling for side effect */
- /* XXXX This is a bit of a kludge */
- if (rs->is_v2_dir) {
- sl_last_total_weighted_bw = 0;
- router_pick_directory_server(V2_DIRINFO, pds_flags);
- if (sl_last_total_weighted_bw != 0) {
- *v2_share_out = U64_TO_DBL(sl_last_weighted_bw_of_me) /
- U64_TO_DBL(sl_last_total_weighted_bw);
- }
- }
+ if (!trusted_dir_servers)
+ return NULL;
- if (rs->version_supports_v3_dir) {
- sl_last_total_weighted_bw = 0;
- router_pick_directory_server(V3_DIRINFO, pds_flags);
- if (sl_last_total_weighted_bw != 0) {
- *v3_share_out = U64_TO_DBL(sl_last_weighted_bw_of_me) /
- U64_TO_DBL(sl_last_total_weighted_bw);
- }
- }
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
+ {
+ if (tor_memeq(ds->digest, digest, DIGEST_LEN))
+ return ds;
+ });
- return 0;
+ return NULL;
}
-/** Return the trusted_dir_server_t for the directory authority whose identity
+/** Return the dir_server_t for the fallback dirserver whose identity
* key hashes to <b>digest</b>, or NULL if no such authority is known.
*/
-trusted_dir_server_t *
-router_get_trusteddirserver_by_digest(const char *digest)
+dir_server_t *
+router_get_fallback_dirserver_by_digest(const char *digest)
{
if (!trusted_dir_servers)
return NULL;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
{
if (tor_memeq(ds->digest, digest, DIGEST_LEN))
return ds;
@@ -1025,17 +1336,17 @@ router_get_trusteddirserver_by_digest(const char *digest)
return NULL;
}
-/** Return the trusted_dir_server_t for the directory authority whose
+/** Return the dir_server_t for the directory authority whose
* v3 identity key hashes to <b>digest</b>, or NULL if no such authority
* is known.
*/
-trusted_dir_server_t *
+dir_server_t *
trusteddirserver_get_by_v3_auth_digest(const char *digest)
{
if (!trusted_dir_servers)
return NULL;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ds,
{
if (tor_memeq(ds->v3_identity_digest, digest, DIGEST_LEN) &&
(ds->type & V3_DIRINFO))
@@ -1045,18 +1356,35 @@ trusteddirserver_get_by_v3_auth_digest(const char *digest)
return NULL;
}
-/** Try to find a running trusted dirserver. Flags are as for
+/** Try to find a running directory authority. Flags are as for
* router_pick_directory_server.
*/
const routerstatus_t *
router_pick_trusteddirserver(dirinfo_type_t type, int flags)
{
+ return router_pick_dirserver_generic(trusted_dir_servers, type, flags);
+}
+
+/** Try to find a running fallback directory Flags are as for
+ * router_pick_directory_server.
+ */
+const routerstatus_t *
+router_pick_fallback_dirserver(dirinfo_type_t type, int flags)
+{
+ return router_pick_dirserver_generic(fallback_dir_servers, type, flags);
+}
+
+/** Try to find a running fallback directory Flags are as for
+ * router_pick_directory_server.
+ */
+static const routerstatus_t *
+router_pick_dirserver_generic(smartlist_t *sourcelist,
+ dirinfo_type_t type, int flags)
+{
const routerstatus_t *choice;
int busy = 0;
- if (get_options()->PreferTunneledDirConns)
- flags |= _PDS_PREFER_TUNNELED_DIR_CONNS;
- choice = router_pick_trusteddirserver_impl(type, flags, &busy);
+ choice = router_pick_trusteddirserver_impl(sourcelist, type, flags, &busy);
if (choice || !(flags & PDS_RETRY_IF_NO_SERVERS))
return choice;
if (busy) {
@@ -1069,9 +1397,9 @@ router_pick_trusteddirserver(dirinfo_type_t type, int flags)
}
log_info(LD_DIR,
- "No trusted dirservers are reachable. Trying them all again.");
- mark_all_trusteddirservers_up();
- return router_pick_trusteddirserver_impl(type, flags, NULL);
+ "No dirservers are reachable. Trying them all again.");
+ mark_all_dirservers_up(sourcelist);
+ return router_pick_trusteddirserver_impl(sourcelist, type, flags, NULL);
}
/** How long do we avoid using a directory server after it's given us a 503? */
@@ -1079,10 +1407,7 @@ router_pick_trusteddirserver(dirinfo_type_t type, int flags)
/** Pick a random running valid directory server/mirror from our
* routerlist. Arguments are as for router_pick_directory_server(), except
- * that RETRY_IF_NO_SERVERS is ignored, and:
- *
- * If the _PDS_PREFER_TUNNELED_DIR_CONNS flag is set, prefer directory servers
- * that we can use with BEGINDIR.
+ * that RETRY_IF_NO_SERVERS is ignored.
*/
static const routerstatus_t *
router_pick_directory_server_impl(dirinfo_type_t type, int flags)
@@ -1096,7 +1421,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
const networkstatus_t *consensus = networkstatus_get_latest_consensus();
int requireother = ! (flags & PDS_ALLOW_SELF);
int fascistfirewall = ! (flags & PDS_IGNORE_FASCISTFIREWALL);
- int prefer_tunnel = (flags & _PDS_PREFER_TUNNELED_DIR_CONNS);
+ int for_guard = (flags & PDS_FOR_GUARD);
int try_excluding = 1, n_excluded = 0;
if (!consensus)
@@ -1127,21 +1452,15 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
continue;
if (requireother && router_digest_is_me(node->identity))
continue;
- if (type & V3_DIRINFO) {
- if (!(status->version_supports_v3_dir ||
- router_digest_is_trusted_dir_type(node->identity,
- V3_DIRINFO)))
- continue;
- }
is_trusted = router_digest_is_trusted_dir(node->identity);
- if ((type & V2_DIRINFO) && !(node->rs->is_v2_dir || is_trusted))
- continue;
if ((type & EXTRAINFO_DIRINFO) &&
!router_supports_extrainfo(node->identity, 0))
continue;
if ((type & MICRODESC_DIRINFO) && !is_trusted &&
!node->rs->version_supports_microdesc_cache)
continue;
+ if (for_guard && node->using_as_guard)
+ continue; /* Don't make the same node a guard twice. */
if (try_excluding &&
routerset_contains_routerstatus(options->ExcludeNodes, status,
country)) {
@@ -1154,9 +1473,7 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
is_overloaded = status->last_dir_503_at + DIR_503_TIMEOUT > now;
- if (prefer_tunnel &&
- status->version_supports_begindir &&
- (!fascistfirewall ||
+ if ((!fascistfirewall ||
fascist_firewall_allows_address_or(&addr, status->or_port)))
smartlist_add(is_trusted ? trusted_tunnel :
is_overloaded ? overloaded_tunnel : tunnel, (void*)node);
@@ -1203,28 +1520,55 @@ router_pick_directory_server_impl(dirinfo_type_t type, int flags)
return result ? result->rs : NULL;
}
-/** Choose randomly from among the trusted dirservers that are up. Flags
- * are as for router_pick_directory_server_impl().
+/** Pick a random element from a list of dir_server_t, weighting by their
+ * <b>weight</b> field. */
+static const dir_server_t *
+dirserver_choose_by_weight(const smartlist_t *servers, double authority_weight)
+{
+ int n = smartlist_len(servers);
+ int i;
+ u64_dbl_t *weights;
+ const dir_server_t *ds;
+
+ weights = tor_malloc(sizeof(u64_dbl_t) * n);
+ for (i = 0; i < n; ++i) {
+ ds = smartlist_get(servers, i);
+ weights[i].dbl = ds->weight;
+ if (ds->is_authority)
+ weights[i].dbl *= authority_weight;
+ }
+
+ scale_array_elements_to_u64(weights, n, NULL);
+ i = choose_array_element_by_weight(weights, n);
+ tor_free(weights);
+ return (i < 0) ? NULL : smartlist_get(servers, i);
+}
+
+/** Choose randomly from among the dir_server_ts in sourcelist that
+ * are up. Flags are as for router_pick_directory_server_impl().
*/
static const routerstatus_t *
-router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
+router_pick_trusteddirserver_impl(const smartlist_t *sourcelist,
+ dirinfo_type_t type, int flags,
int *n_busy_out)
{
const or_options_t *options = get_options();
smartlist_t *direct, *tunnel;
smartlist_t *overloaded_direct, *overloaded_tunnel;
const routerinfo_t *me = router_get_my_routerinfo();
- const routerstatus_t *result;
+ const routerstatus_t *result = NULL;
time_t now = time(NULL);
const int requireother = ! (flags & PDS_ALLOW_SELF);
const int fascistfirewall = ! (flags & PDS_IGNORE_FASCISTFIREWALL);
- const int prefer_tunnel = (flags & _PDS_PREFER_TUNNELED_DIR_CONNS);
const int no_serverdesc_fetching =(flags & PDS_NO_EXISTING_SERVERDESC_FETCH);
const int no_microdesc_fetching =(flags & PDS_NO_EXISTING_MICRODESC_FETCH);
+ const double auth_weight = (sourcelist == fallback_dir_servers) ?
+ options->DirAuthorityFallbackRate : 1.0;
+ smartlist_t *pick_from;
int n_busy = 0;
int try_excluding = 1, n_excluded = 0;
- if (!trusted_dir_servers)
+ if (!sourcelist)
return NULL;
retry_without_exclude:
@@ -1234,7 +1578,7 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
overloaded_direct = smartlist_new();
overloaded_tunnel = smartlist_new();
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, d)
+ SMARTLIST_FOREACH_BEGIN(sourcelist, const dir_server_t *, d)
{
int is_overloaded =
d->fake_status.last_dir_503_at + DIR_503_TIMEOUT > now;
@@ -1276,27 +1620,32 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
}
}
- if (prefer_tunnel &&
- d->or_port &&
+ if (d->or_port &&
(!fascistfirewall ||
fascist_firewall_allows_address_or(&addr, d->or_port)))
- smartlist_add(is_overloaded ? overloaded_tunnel : tunnel,
- &d->fake_status);
+ smartlist_add(is_overloaded ? overloaded_tunnel : tunnel, (void*)d);
else if (!fascistfirewall ||
fascist_firewall_allows_address_dir(&addr, d->dir_port))
- smartlist_add(is_overloaded ? overloaded_direct : direct,
- &d->fake_status);
+ smartlist_add(is_overloaded ? overloaded_direct : direct, (void*)d);
}
SMARTLIST_FOREACH_END(d);
if (smartlist_len(tunnel)) {
- result = smartlist_choose(tunnel);
+ pick_from = tunnel;
} else if (smartlist_len(overloaded_tunnel)) {
- result = smartlist_choose(overloaded_tunnel);
+ pick_from = overloaded_tunnel;
} else if (smartlist_len(direct)) {
- result = smartlist_choose(direct);
+ pick_from = direct;
} else {
- result = smartlist_choose(overloaded_direct);
+ pick_from = overloaded_direct;
+ }
+
+ {
+ const dir_server_t *selection =
+ dirserver_choose_by_weight(pick_from, auth_weight);
+
+ if (selection)
+ result = &selection->fake_status;
}
if (n_busy_out)
@@ -1318,19 +1667,18 @@ router_pick_trusteddirserver_impl(dirinfo_type_t type, int flags,
return result;
}
-/** Go through and mark the authoritative dirservers as up. */
+/** Mark as running every dir_server_t in <b>server_list</b>. */
static void
-mark_all_trusteddirservers_up(void)
+mark_all_dirservers_up(smartlist_t *server_list)
{
- SMARTLIST_FOREACH(nodelist_get_list(), node_t *, node, {
- if (router_digest_is_trusted_dir(node->identity))
- node->is_running = 1;
- });
- if (trusted_dir_servers) {
- SMARTLIST_FOREACH_BEGIN(trusted_dir_servers, trusted_dir_server_t *, dir) {
+ if (server_list) {
+ SMARTLIST_FOREACH_BEGIN(server_list, dir_server_t *, dir) {
routerstatus_t *rs;
+ node_t *node;
dir->is_running = 1;
- download_status_reset(&dir->v2_ns_dl_status);
+ node = node_get_mutable_by_id(dir->digest);
+ if (node)
+ node->is_running = 1;
rs = router_get_mutable_consensus_status_by_id(dir->digest);
if (rs) {
rs->last_dir_503_at = 0;
@@ -1343,9 +1691,11 @@ mark_all_trusteddirservers_up(void)
/** Return true iff r1 and r2 have the same address and OR port. */
int
-routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2)
+routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2)
{
- return r1->addr == r2->addr && r1->or_port == r2->or_port;
+ return r1->addr == r2->addr && r1->or_port == r2->or_port &&
+ tor_addr_eq(&r1->ipv6_addr, &r2->ipv6_addr) &&
+ r1->ipv6_orport == r2->ipv6_orport;
}
/** Reset all internal variables used to count failed downloads of network
@@ -1353,89 +1703,7 @@ routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2)
void
router_reset_status_download_failures(void)
{
- mark_all_trusteddirservers_up();
-}
-
-/** Return true iff router1 and router2 have similar enough network addresses
- * that we should treat them as being in the same family */
-static INLINE int
-addrs_in_same_network_family(const tor_addr_t *a1,
- const tor_addr_t *a2)
-{
- /* XXXX MOVE ? */
- return 0 == tor_addr_compare_masked(a1, a2, 16, CMP_SEMANTIC);
-}
-
-/**
- * Add all the family of <b>node</b>, including <b>node</b> itself, to
- * the smartlist <b>sl</b>.
- *
- * This is used to make sure we don't pick siblings in a single path, or
- * pick more than one relay from a family for our entry guard list.
- * Note that a node may be added to <b>sl</b> more than once if it is
- * part of <b>node</b>'s family for more than one reason.
- */
-void
-nodelist_add_node_and_family(smartlist_t *sl, const node_t *node)
-{
- /* XXXX MOVE */
- const smartlist_t *all_nodes = nodelist_get_list();
- const smartlist_t *declared_family;
- const or_options_t *options = get_options();
-
- tor_assert(node);
-
- declared_family = node_get_declared_family(node);
-
- /* Let's make sure that we have the node itself, if it's a real node. */
- {
- const node_t *real_node = node_get_by_id(node->identity);
- if (real_node)
- smartlist_add(sl, (node_t*)real_node);
- }
-
- /* First, add any nodes with similar network addresses. */
- if (options->EnforceDistinctSubnets) {
- tor_addr_t node_addr;
- node_get_addr(node, &node_addr);
-
- SMARTLIST_FOREACH_BEGIN(all_nodes, const node_t *, node2) {
- tor_addr_t a;
- node_get_addr(node2, &a);
- if (addrs_in_same_network_family(&a, &node_addr))
- smartlist_add(sl, (void*)node2);
- } SMARTLIST_FOREACH_END(node2);
- }
-
- /* Now, add all nodes in the declared_family of this node, if they
- * also declare this node to be in their family. */
- if (declared_family) {
- /* Add every r such that router declares familyness with node, and node
- * declares familyhood with router. */
- SMARTLIST_FOREACH_BEGIN(declared_family, const char *, name) {
- const node_t *node2;
- const smartlist_t *family2;
- if (!(node2 = node_get_by_nickname(name, 0)))
- continue;
- if (!(family2 = node_get_declared_family(node2)))
- continue;
- SMARTLIST_FOREACH_BEGIN(family2, const char *, name2) {
- if (node_nickname_matches(node, name2)) {
- smartlist_add(sl, (void*)node2);
- break;
- }
- } SMARTLIST_FOREACH_END(name2);
- } SMARTLIST_FOREACH_END(name);
- }
-
- /* If the user declared any families locally, honor those too. */
- if (options->NodeFamilySets) {
- SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
- if (routerset_contains_node(rs, node)) {
- routerset_get_all_nodes(sl, rs, NULL, 0);
- }
- });
- }
+ mark_all_dirservers_up(fallback_dir_servers);
}
/** Given a <b>router</b>, add every node_t in its family (including the
@@ -1459,83 +1727,6 @@ routerlist_add_node_and_family(smartlist_t *sl, const routerinfo_t *router)
nodelist_add_node_and_family(sl, node);
}
-/** Return true iff <b>node</b> is named by some nickname in <b>lst</b>. */
-static INLINE int
-node_in_nickname_smartlist(const smartlist_t *lst, const node_t *node)
-{
- /* XXXX MOVE */
- if (!lst) return 0;
- SMARTLIST_FOREACH(lst, const char *, name, {
- if (node_nickname_matches(node, name))
- return 1;
- });
- return 0;
-}
-
-/** Return true iff r1 and r2 are in the same family, but not the same
- * router. */
-int
-nodes_in_same_family(const node_t *node1, const node_t *node2)
-{
- /* XXXX MOVE */
- const or_options_t *options = get_options();
-
- /* Are they in the same family because of their addresses? */
- if (options->EnforceDistinctSubnets) {
- tor_addr_t a1, a2;
- node_get_addr(node1, &a1);
- node_get_addr(node2, &a2);
- if (addrs_in_same_network_family(&a1, &a2))
- return 1;
- }
-
- /* Are they in the same family because the agree they are? */
- {
- const smartlist_t *f1, *f2;
- f1 = node_get_declared_family(node1);
- f2 = node_get_declared_family(node2);
- if (f1 && f2 &&
- node_in_nickname_smartlist(f1, node2) &&
- node_in_nickname_smartlist(f2, node1))
- return 1;
- }
-
- /* Are they in the same option because the user says they are? */
- if (options->NodeFamilySets) {
- SMARTLIST_FOREACH(options->NodeFamilySets, const routerset_t *, rs, {
- if (routerset_contains_node(rs, node1) &&
- routerset_contains_node(rs, node2))
- return 1;
- });
- }
-
- return 0;
-}
-
-/** Return 1 iff any member of the (possibly NULL) comma-separated list
- * <b>list</b> is an acceptable nickname or hexdigest for <b>router</b>. Else
- * return 0.
- */
-int
-router_nickname_is_in_list(const routerinfo_t *router, const char *list)
-{
- smartlist_t *nickname_list;
- int v = 0;
-
- if (!list)
- return 0; /* definitely not */
- tor_assert(router);
-
- nickname_list = smartlist_new();
- smartlist_split_string(nickname_list, list, ",",
- SPLIT_SKIP_SPACE|SPLIT_STRIP_SPACE|SPLIT_IGNORE_BLANK, 0);
- SMARTLIST_FOREACH(nickname_list, const char *, cp,
- if (router_nickname_matches(router, cp)) {v=1;break;});
- SMARTLIST_FOREACH(nickname_list, char *, cp, tor_free(cp));
- smartlist_free(nickname_list);
- return v;
-}
-
/** Add every suitable node from our nodelist to <b>sl</b>, so that
* we can pick a node for a circuit.
*/
@@ -1575,56 +1766,6 @@ routerlist_find_my_routerinfo(void)
return NULL;
}
-/** Find a router that's up, that has this IP address, and
- * that allows exit to this address:port, or return NULL if there
- * isn't a good one.
- * Don't exit enclave to excluded relays -- it wouldn't actually
- * hurt anything, but this way there are fewer confused users.
- */
-const node_t *
-router_find_exact_exit_enclave(const char *address, uint16_t port)
-{/*XXXX MOVE*/
- uint32_t addr;
- struct in_addr in;
- tor_addr_t a;
- const or_options_t *options = get_options();
-
- if (!tor_inet_aton(address, &in))
- return NULL; /* it's not an IP already */
- addr = ntohl(in.s_addr);
-
- tor_addr_from_ipv4h(&a, addr);
-
- SMARTLIST_FOREACH(nodelist_get_list(), const node_t *, node, {
- if (node_get_addr_ipv4h(node) == addr &&
- node->is_running &&
- compare_tor_addr_to_node_policy(&a, port, node) ==
- ADDR_POLICY_ACCEPTED &&
- !routerset_contains_node(options->_ExcludeExitNodesUnion, node))
- return node;
- });
- return NULL;
-}
-
-/** Return 1 if <b>router</b> is not suitable for these parameters, else 0.
- * If <b>need_uptime</b> is non-zero, we require a minimum uptime.
- * If <b>need_capacity</b> is non-zero, we require a minimum advertised
- * bandwidth.
- * If <b>need_guard</b>, we require that the router is a possible entry guard.
- */
-int
-node_is_unreliable(const node_t *node, int need_uptime,
- int need_capacity, int need_guard)
-{
- if (need_uptime && !node->is_stable)
- return 1;
- if (need_capacity && !node->is_fast)
- return 1;
- if (need_guard && !node->is_possible_guard)
- return 1;
- return 0;
-}
-
/** Return the smaller of the router's configured BandwidthRate
* and its advertised capacity. */
uint32_t
@@ -1652,6 +1793,92 @@ router_get_advertised_bandwidth_capped(const routerinfo_t *router)
return result;
}
+/** Given an array of double/uint64_t unions that are currently being used as
+ * 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. */
+STATIC void
+scale_array_elements_to_u64(u64_dbl_t *entries, int n_entries,
+ uint64_t *total_out)
+{
+ double total = 0.0;
+ double scale_factor;
+ int i;
+ /* big, but far away from overflowing an int64_t */
+#define SCALE_TO_U64_MAX (INT64_MAX / 4)
+
+ for (i = 0; i < n_entries; ++i)
+ total += entries[i].dbl;
+
+ scale_factor = SCALE_TO_U64_MAX / total;
+
+ for (i = 0; i < n_entries; ++i)
+ entries[i].u64 = tor_llround(entries[i].dbl * scale_factor);
+
+ if (total_out)
+ *total_out = (uint64_t) total;
+
+#undef SCALE_TO_U64_MAX
+}
+
+/** Time-invariant 64-bit greater-than; works on two integers in the range
+ * (0,INT64_MAX). */
+#if SIZEOF_VOID_P == 8
+#define gt_i64_timei(a,b) ((a) > (b))
+#else
+static INLINE int
+gt_i64_timei(uint64_t a, uint64_t b)
+{
+ int64_t diff = (int64_t) (b - a);
+ int res = diff >> 63;
+ return res & 1;
+}
+#endif
+
+/** Pick a random element of <b>n_entries</b>-element array <b>entries</b>,
+ * choosing each element with a probability proportional to its (uint64_t)
+ * value, and return the index of that element. If all elements are 0, choose
+ * an index at random. Return -1 on error.
+ */
+STATIC int
+choose_array_element_by_weight(const u64_dbl_t *entries, int n_entries)
+{
+ int i, i_chosen=-1, n_chosen=0;
+ uint64_t total_so_far = 0;
+ uint64_t rand_val;
+ uint64_t total = 0;
+
+ for (i = 0; i < n_entries; ++i)
+ total += entries[i].u64;
+
+ if (n_entries < 1)
+ return -1;
+
+ if (total == 0)
+ return crypto_rand_int(n_entries);
+
+ tor_assert(total < INT64_MAX);
+
+ rand_val = crypto_rand_uint64(total);
+
+ for (i = 0; i < n_entries; ++i) {
+ total_so_far += entries[i].u64;
+ if (gt_i64_timei(total_so_far, rand_val)) {
+ i_chosen = i;
+ n_chosen++;
+ /* Set rand_val to INT64_MAX rather than stopping the loop. This way,
+ * the time we spend in the loop does not leak which element we chose. */
+ rand_val = INT64_MAX;
+ }
+ }
+ tor_assert(total_so_far == total);
+ tor_assert(n_chosen == 1);
+ tor_assert(i_chosen >= 0);
+ tor_assert(i_chosen < n_entries);
+
+ return i_chosen;
+}
+
/** When weighting bridges, enforce these values as lower and upper
* bound for believable bandwidth, because there is no way for us
* to verify a bridge's bandwidth currently. */
@@ -1698,20 +1925,39 @@ kb_to_bytes(uint32_t bw)
* guards proportionally less.
*/
static const node_t *
-smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
+smartlist_choose_node_by_bandwidth_weights(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{
+ u64_dbl_t *bandwidths=NULL;
+
+ if (compute_weighted_bandwidths(sl, rule, &bandwidths) < 0)
+ return NULL;
+
+ scale_array_elements_to_u64(bandwidths, smartlist_len(sl), NULL);
+
+ {
+ int idx = choose_array_element_by_weight(bandwidths,
+ smartlist_len(sl));
+ tor_free(bandwidths);
+ return idx < 0 ? NULL : smartlist_get(sl, idx);
+ }
+}
+
+/** Given a list of routers and a weighting rule as in
+ * smartlist_choose_node_by_bandwidth_weights, compute weighted bandwidth
+ * values for each node and store them in a freshly allocated
+ * *<b>bandwidths_out</b> of the same length as <b>sl</b>, and holding results
+ * as doubles. Return 0 on success, -1 on failure. */
+static int
+compute_weighted_bandwidths(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule,
+ u64_dbl_t **bandwidths_out)
+{
int64_t weight_scale;
- int64_t rand_bw;
double Wg = -1, Wm = -1, We = -1, Wd = -1;
double Wgb = -1, Wmb = -1, Web = -1, Wdb = -1;
- double weighted_bw = 0, unweighted_bw = 0;
- double *bandwidths;
- double tmp = 0;
- unsigned int i;
- unsigned int i_chosen;
- unsigned int i_has_been_chosen;
- int have_unknown = 0; /* true iff sl contains element not in consensus. */
+ uint64_t weighted_bw = 0;
+ u64_dbl_t *bandwidths;
/* Can't choose exit and guard at same time */
tor_assert(rule == NO_WEIGHTING ||
@@ -1725,10 +1971,10 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
"Empty routerlist passed in to consensus weight node "
"selection for rule %s",
bandwidth_weight_rule_to_string(rule));
- return NULL;
+ return -1;
}
- weight_scale = circuit_build_times_get_bw_scale(NULL);
+ weight_scale = networkstatus_get_weight_scale_param(NULL);
if (rule == WEIGHT_FOR_GUARD) {
Wg = networkstatus_get_bw_weight(NULL, "Wgg", -1);
@@ -1779,7 +2025,7 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
log_debug(LD_CIRC,
"Got negative bandwidth weights. Defaulting to old selection"
" algorithm.");
- return NULL; // Use old algorithm.
+ return -1; // Use old algorithm.
}
Wg /= weight_scale;
@@ -1792,11 +2038,11 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
Web /= weight_scale;
Wdb /= weight_scale;
- bandwidths = tor_malloc_zero(sizeof(double)*smartlist_len(sl));
+ bandwidths = tor_malloc_zero(sizeof(u64_dbl_t)*smartlist_len(sl));
// Cycle through smartlist and total the bandwidth.
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
- int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0, is_me = 0;
+ int is_exit = 0, is_guard = 0, is_dir = 0, this_bw = 0;
double weight = 1;
is_exit = node->is_exit && ! node->is_bad_exit;
is_guard = node->is_possible_guard;
@@ -1809,18 +2055,16 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
log_warn(LD_BUG,
"Consensus is not listing bandwidths. Defaulting back to "
"old router selection algorithm.");
- return NULL;
+ return -1;
}
- this_bw = kb_to_bytes(node->rs->bandwidth);
+ this_bw = kb_to_bytes(node->rs->bandwidth_kb);
} else if (node->ri) {
/* bridge or other descriptor not in our consensus */
this_bw = bridge_get_advertised_bandwidth_bounded(node->ri);
- have_unknown = 1;
} else {
/* We can't use this one. */
continue;
}
- is_me = router_digest_is_me(node->identity);
if (is_guard && is_exit) {
weight = (is_dir ? Wdb*Wd : Wd);
@@ -1831,72 +2075,63 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
} else { // middle
weight = (is_dir ? Wmb*Wm : Wm);
}
-
- bandwidths[node_sl_idx] = weight*this_bw;
- weighted_bw += weight*this_bw;
- unweighted_bw += this_bw;
- if (is_me)
- sl_last_weighted_bw_of_me = weight*this_bw;
+ /* These should be impossible; but overflows here would be bad, so let's
+ * make sure. */
+ if (this_bw < 0)
+ this_bw = 0;
+ if (weight < 0.0)
+ weight = 0.0;
+
+ bandwidths[node_sl_idx].dbl = weight*this_bw + 0.5;
} SMARTLIST_FOREACH_END(node);
- /* XXXX this is a kludge to expose these values. */
- sl_last_total_weighted_bw = weighted_bw;
-
- log_debug(LD_CIRC, "Choosing node for rule %s based on weights "
- "Wg=%f Wm=%f We=%f Wd=%f with total bw %f",
+ log_debug(LD_CIRC, "Generated weighted bandwidths for rule %s based "
+ "on weights "
+ "Wg=%f Wm=%f We=%f Wd=%f with total bw "U64_FORMAT,
bandwidth_weight_rule_to_string(rule),
- Wg, Wm, We, Wd, weighted_bw);
-
- /* If there is no bandwidth, choose at random */
- if (DBL_TO_U64(weighted_bw) == 0) {
- /* Don't warn when using bridges/relays not in the consensus */
- if (!have_unknown) {
-#define ZERO_BANDWIDTH_WARNING_INTERVAL (15)
- static ratelim_t zero_bandwidth_warning_limit =
- RATELIM_INIT(ZERO_BANDWIDTH_WARNING_INTERVAL);
- char *msg;
- if ((msg = rate_limit_log(&zero_bandwidth_warning_limit,
- approx_time()))) {
- log_warn(LD_CIRC,
- "Weighted bandwidth is %f in node selection for rule %s "
- "(unweighted was %f) %s",
- weighted_bw, bandwidth_weight_rule_to_string(rule),
- unweighted_bw, msg);
- }
- }
- tor_free(bandwidths);
- return smartlist_choose(sl);
- }
+ Wg, Wm, We, Wd, U64_PRINTF_ARG(weighted_bw));
- rand_bw = crypto_rand_uint64(DBL_TO_U64(weighted_bw));
- rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count
- * from 1 below. See bug 1203 for details. */
-
- /* Last, count through sl until we get to the element we picked */
- i_chosen = (unsigned)smartlist_len(sl);
- i_has_been_chosen = 0;
- tmp = 0.0;
- for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- tmp += bandwidths[i];
- if (tmp >= rand_bw && !i_has_been_chosen) {
- i_chosen = i;
- i_has_been_chosen = 1;
- }
- }
- i = i_chosen;
-
- if (i == (unsigned)smartlist_len(sl)) {
- /* This was once possible due to round-off error, but shouldn't be able
- * to occur any longer. */
- tor_fragile_assert();
- --i;
- log_warn(LD_BUG, "Round-off error in computing bandwidth had an effect on "
- " which router we chose. Please tell the developers. "
- "%f " U64_FORMAT " %f", tmp, U64_PRINTF_ARG(rand_bw),
- weighted_bw);
+ *bandwidths_out = bandwidths;
+
+ return 0;
+}
+
+/** For all nodes in <b>sl</b>, return the fraction of those nodes, weighted
+ * by their weighted bandwidths with rule <b>rule</b>, for which we have
+ * descriptors. */
+double
+frac_nodes_with_descriptors(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule)
+{
+ u64_dbl_t *bandwidths = NULL;
+ double total, present;
+
+ if (smartlist_len(sl) == 0)
+ return 0.0;
+
+ if (compute_weighted_bandwidths(sl, rule, &bandwidths) < 0) {
+ int n_with_descs = 0;
+ SMARTLIST_FOREACH(sl, const node_t *, node, {
+ if (node_has_descriptor(node))
+ n_with_descs++;
+ });
+ return ((double)n_with_descs) / (double)smartlist_len(sl);
}
+
+ total = present = 0.0;
+ SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
+ const double bw = bandwidths[node_sl_idx].dbl;
+ total += bw;
+ if (node_has_descriptor(node))
+ present += bw;
+ } SMARTLIST_FOREACH_END(node);
+
tor_free(bandwidths);
- return smartlist_get(sl, i);
+
+ if (total < 1.0)
+ return 0;
+
+ return present / total;
}
/** Helper function:
@@ -1913,24 +2148,22 @@ smartlist_choose_node_by_bandwidth_weights(smartlist_t *sl,
* guards proportionally less.
*/
static const node_t *
-smartlist_choose_node_by_bandwidth(smartlist_t *sl,
+smartlist_choose_node_by_bandwidth(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{
unsigned int i;
- unsigned int i_chosen;
- unsigned int i_has_been_chosen;
- int32_t *bandwidths;
+ u64_dbl_t *bandwidths;
int is_exit;
int is_guard;
- uint64_t total_nonexit_bw = 0, total_exit_bw = 0, total_bw = 0;
- uint64_t total_nonguard_bw = 0, total_guard_bw = 0;
- uint64_t rand_bw, tmp;
+ int is_fast;
+ double total_nonexit_bw = 0, total_exit_bw = 0;
+ double total_nonguard_bw = 0, total_guard_bw = 0;
double exit_weight;
double guard_weight;
int n_unknown = 0;
+ bitarray_t *fast_bits;
bitarray_t *exit_bits;
bitarray_t *guard_bits;
- int me_idx = -1;
// This function does not support WEIGHT_FOR_DIR
// or WEIGHT_FOR_MID
@@ -1951,10 +2184,9 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
}
/* First count the total bandwidth weight, and make a list
- * of each value. <0 means "unknown; no routerinfo." We use the
- * bits of negative values to remember whether the router was fast (-x)&1
- * and whether it was an exit (-x)&2 or guard (-x)&4. Yes, it's a hack. */
- bandwidths = tor_malloc(sizeof(int32_t)*smartlist_len(sl));
+ * of each value. We use UINT64_MAX to indicate "unknown". */
+ bandwidths = tor_malloc_zero(sizeof(u64_dbl_t)*smartlist_len(sl));
+ fast_bits = bitarray_init_zero(smartlist_len(sl));
exit_bits = bitarray_init_zero(smartlist_len(sl));
guard_bits = bitarray_init_zero(smartlist_len(sl));
@@ -1962,25 +2194,16 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
/* first, learn what bandwidth we think i has */
int is_known = 1;
- int32_t flags = 0;
uint32_t this_bw = 0;
i = node_sl_idx;
- if (router_digest_is_me(node->identity))
- me_idx = node_sl_idx;
-
is_exit = node->is_exit;
is_guard = node->is_possible_guard;
if (node->rs) {
if (node->rs->has_bandwidth) {
- this_bw = kb_to_bytes(node->rs->bandwidth);
+ this_bw = kb_to_bytes(node->rs->bandwidth_kb);
} else { /* guess */
- /* XXX024 once consensuses always list bandwidths, we can take
- * this guessing business out. -RD */
is_known = 0;
- flags = node->rs->is_fast ? 1 : 0;
- flags |= is_exit ? 2 : 0;
- flags |= is_guard ? 4 : 0;
}
} else if (node->ri) {
/* Must be a bridge if we're willing to use it */
@@ -1991,12 +2214,11 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
bitarray_set(exit_bits, i);
if (is_guard)
bitarray_set(guard_bits, i);
+ if (node->is_fast)
+ bitarray_set(fast_bits, i);
+
if (is_known) {
- bandwidths[i] = (int32_t) this_bw;
- /* Casting this_bw to int32_t is safe because both kb_to_bytes
- and bridge_get_advertised_bandwidth_bounded limit it to below
- INT32_MAX. */
- tor_assert(bandwidths[i] >= 0);
+ bandwidths[i].dbl = this_bw;
if (is_guard)
total_guard_bw += this_bw;
else
@@ -2007,14 +2229,16 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
total_nonexit_bw += this_bw;
} else {
++n_unknown;
- bandwidths[node_sl_idx] = -flags;
+ bandwidths[i].dbl = -1.0;
}
} SMARTLIST_FOREACH_END(node);
+#define EPSILON .1
+
/* Now, fill in the unknown values. */
if (n_unknown) {
int32_t avg_fast, avg_slow;
- if (total_exit_bw+total_nonexit_bw) {
+ if (total_exit_bw+total_nonexit_bw < EPSILON) {
/* if there's some bandwidth, there's at least one known router,
* so no worries about div by 0 here */
int n_known = smartlist_len(sl)-n_unknown;
@@ -2025,26 +2249,27 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
avg_slow = 20000;
}
for (i=0; i<(unsigned)smartlist_len(sl); ++i) {
- int32_t bw = bandwidths[i];
- if (bw>=0)
+ if (bandwidths[i].dbl >= 0.0)
continue;
- is_exit = ((-bw)&2);
- is_guard = ((-bw)&4);
- bandwidths[i] = ((-bw)&1) ? avg_fast : avg_slow;
+ is_fast = bitarray_is_set(fast_bits, i);
+ is_exit = bitarray_is_set(exit_bits, i);
+ is_guard = bitarray_is_set(guard_bits, i);
+ bandwidths[i].dbl = is_fast ? avg_fast : avg_slow;
if (is_exit)
- total_exit_bw += bandwidths[i];
+ total_exit_bw += bandwidths[i].dbl;
else
- total_nonexit_bw += bandwidths[i];
+ total_nonexit_bw += bandwidths[i].dbl;
if (is_guard)
- total_guard_bw += bandwidths[i];
+ total_guard_bw += bandwidths[i].dbl;
else
- total_nonguard_bw += bandwidths[i];
+ total_nonguard_bw += bandwidths[i].dbl;
}
}
/* If there's no bandwidth at all, pick at random. */
- if (!(total_exit_bw+total_nonexit_bw)) {
+ if (total_exit_bw+total_nonexit_bw < EPSILON) {
tor_free(bandwidths);
+ tor_free(fast_bits);
tor_free(exit_bits);
tor_free(guard_bits);
return smartlist_choose(sl);
@@ -2059,12 +2284,12 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
* For detailed derivation of this formula, see
* http://archives.seul.org/or/dev/Jul-2007/msg00056.html
*/
- if (rule == WEIGHT_FOR_EXIT || !total_exit_bw)
+ if (rule == WEIGHT_FOR_EXIT || total_exit_bw<EPSILON)
exit_weight = 1.0;
else
exit_weight = 1.0 - all_bw/(3.0*exit_bw);
- if (rule == WEIGHT_FOR_GUARD || !total_guard_bw)
+ if (rule == WEIGHT_FOR_GUARD || total_guard_bw<EPSILON)
guard_weight = 1.0;
else
guard_weight = 1.0 - all_bw/(3.0*guard_bw);
@@ -2075,29 +2300,21 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
if (guard_weight <= 0.0)
guard_weight = 0.0;
- total_bw = 0;
- sl_last_weighted_bw_of_me = 0;
for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- uint64_t bw;
+ tor_assert(bandwidths[i].dbl >= 0.0);
+
is_exit = bitarray_is_set(exit_bits, i);
is_guard = bitarray_is_set(guard_bits, i);
if (is_exit && is_guard)
- bw = ((uint64_t)(bandwidths[i] * exit_weight * guard_weight));
+ bandwidths[i].dbl *= exit_weight * guard_weight;
else if (is_guard)
- bw = ((uint64_t)(bandwidths[i] * guard_weight));
+ bandwidths[i].dbl *= guard_weight;
else if (is_exit)
- bw = ((uint64_t)(bandwidths[i] * exit_weight));
- else
- bw = bandwidths[i];
- total_bw += bw;
- if (i == (unsigned) me_idx)
- sl_last_weighted_bw_of_me = bw;
+ bandwidths[i].dbl *= exit_weight;
}
}
- /* XXXX this is a kludge to expose these values. */
- sl_last_total_weighted_bw = total_bw;
-
+#if 0
log_debug(LD_CIRC, "Total weighted bw = "U64_FORMAT
", exit bw = "U64_FORMAT
", nonexit bw = "U64_FORMAT", exit weight = %f "
@@ -2110,56 +2327,25 @@ smartlist_choose_node_by_bandwidth(smartlist_t *sl,
exit_weight, (int)(rule == WEIGHT_FOR_EXIT),
U64_PRINTF_ARG(total_guard_bw), U64_PRINTF_ARG(total_nonguard_bw),
guard_weight, (int)(rule == WEIGHT_FOR_GUARD));
+#endif
- /* Almost done: choose a random value from the bandwidth weights. */
- rand_bw = crypto_rand_uint64(total_bw);
- rand_bw++; /* crypto_rand_uint64() counts from 0, and we need to count
- * from 1 below. See bug 1203 for details. */
-
- /* Last, count through sl until we get to the element we picked */
- tmp = 0;
- i_chosen = (unsigned)smartlist_len(sl);
- i_has_been_chosen = 0;
- for (i=0; i < (unsigned)smartlist_len(sl); i++) {
- is_exit = bitarray_is_set(exit_bits, i);
- is_guard = bitarray_is_set(guard_bits, i);
-
- /* Weights can be 0 if not counting guards/exits */
- if (is_exit && is_guard)
- tmp += ((uint64_t)(bandwidths[i] * exit_weight * guard_weight));
- else if (is_guard)
- tmp += ((uint64_t)(bandwidths[i] * guard_weight));
- else if (is_exit)
- tmp += ((uint64_t)(bandwidths[i] * exit_weight));
- else
- tmp += bandwidths[i];
+ scale_array_elements_to_u64(bandwidths, smartlist_len(sl), NULL);
- if (tmp >= rand_bw && !i_has_been_chosen) {
- i_chosen = i;
- i_has_been_chosen = 1;
- }
- }
- i = i_chosen;
- if (i == (unsigned)smartlist_len(sl)) {
- /* This was once possible due to round-off error, but shouldn't be able
- * to occur any longer. */
- tor_fragile_assert();
- --i;
- log_warn(LD_BUG, "Round-off error in computing bandwidth had an effect on "
- " which router we chose. Please tell the developers. "
- U64_FORMAT " " U64_FORMAT " " U64_FORMAT, U64_PRINTF_ARG(tmp),
- U64_PRINTF_ARG(rand_bw), U64_PRINTF_ARG(total_bw));
+ {
+ int idx = choose_array_element_by_weight(bandwidths,
+ smartlist_len(sl));
+ tor_free(bandwidths);
+ tor_free(fast_bits);
+ tor_free(exit_bits);
+ tor_free(guard_bits);
+ return idx < 0 ? NULL : smartlist_get(sl, idx);
}
- tor_free(bandwidths);
- tor_free(exit_bits);
- tor_free(guard_bits);
- return smartlist_get(sl, i);
}
/** Choose a random element of status list <b>sl</b>, weighted by
* the advertised bandwidth of each node */
const node_t *
-node_sl_choose_by_bandwidth(smartlist_t *sl,
+node_sl_choose_by_bandwidth(const smartlist_t *sl,
bandwidth_weight_rule_t rule)
{ /*XXXX MOVE */
const node_t *ret;
@@ -2306,7 +2492,7 @@ hex_digest_nickname_decode(const char *hexdigest,
* combination of a router, encoded in hexadecimal, matches <b>hexdigest</b>
* (which is optionally prefixed with a single dollar sign). Return false if
* <b>hexdigest</b> is malformed, or it doesn't match. */
-static int
+int
hex_digest_nickname_matches(const char *hexdigest, const char *identity_digest,
const char *nickname, int is_named)
{
@@ -2341,154 +2527,6 @@ router_is_named(const routerinfo_t *router)
tor_memeq(digest, router->cache_info.identity_digest, DIGEST_LEN));
}
-/** Return true iff the digest of <b>router</b>'s identity key,
- * encoded in hexadecimal, matches <b>hexdigest</b> (which is
- * optionally prefixed with a single dollar sign). Return false if
- * <b>hexdigest</b> is malformed, or it doesn't match. */
-static INLINE int
-router_hex_digest_matches(const routerinfo_t *router, const char *hexdigest)
-{
- return hex_digest_nickname_matches(hexdigest,
- router->cache_info.identity_digest,
- router->nickname,
- router_is_named(router));
-}
-
-/** Return true if <b>router</b>'s nickname matches <b>nickname</b>
- * (case-insensitive), or if <b>router's</b> identity key digest
- * matches a hexadecimal value stored in <b>nickname</b>. Return
- * false otherwise. */
-static int
-router_nickname_matches(const routerinfo_t *router, const char *nickname)
-{
- if (nickname[0]!='$' && !strcasecmp(router->nickname, nickname))
- return 1;
- return router_hex_digest_matches(router, nickname);
-}
-
-/** Return true if <b>node</b>'s nickname matches <b>nickname</b>
- * (case-insensitive), or if <b>node's</b> identity key digest
- * matches a hexadecimal value stored in <b>nickname</b>. Return
- * false otherwise. */
-static int
-node_nickname_matches(const node_t *node, const char *nickname)
-{
- const char *n = node_get_nickname(node);
- if (n && nickname[0]!='$' && !strcasecmp(n, nickname))
- return 1;
- return hex_digest_nickname_matches(nickname,
- node->identity,
- n,
- node_is_named(node));
-}
-
-/** Return the router in our routerlist whose (case-insensitive)
- * nickname or (case-sensitive) hexadecimal key digest is
- * <b>nickname</b>. Return NULL if no such router is known.
- */
-const routerinfo_t *
-router_get_by_nickname(const char *nickname, int warn_if_unnamed)
-{
-#if 1
- const node_t *node = node_get_by_nickname(nickname, warn_if_unnamed);
- if (node)
- return node->ri;
- else
- return NULL;
-#else
- int maybedigest;
- char digest[DIGEST_LEN];
- routerinfo_t *best_match=NULL;
- int n_matches = 0;
- const char *named_digest = NULL;
-
- tor_assert(nickname);
- if (!routerlist)
- return NULL;
- if (nickname[0] == '$')
- return router_get_by_hexdigest(nickname);
- if (!strcasecmp(nickname, UNNAMED_ROUTER_NICKNAME))
- return NULL;
-
- maybedigest = (strlen(nickname) >= HEX_DIGEST_LEN) &&
- (base16_decode(digest,DIGEST_LEN,nickname,HEX_DIGEST_LEN) == 0);
-
- if ((named_digest = networkstatus_get_router_digest_by_nickname(nickname))) {
- return rimap_get(routerlist->identity_map, named_digest);
- }
- if (networkstatus_nickname_is_unnamed(nickname))
- return NULL;
-
- /* If we reach this point, there's no canonical value for the nickname. */
-
- SMARTLIST_FOREACH(routerlist->routers, routerinfo_t *, router,
- {
- if (!strcasecmp(router->nickname, nickname)) {
- ++n_matches;
- if (n_matches <= 1 || router->is_running)
- best_match = router;
- } else if (maybedigest &&
- tor_memeq(digest, router->cache_info.identity_digest,
- DIGEST_LEN)) {
- if (router_hex_digest_matches(router, nickname))
- return router;
- /* If we reach this point, we have a ID=name syntax that matches the
- * identity but not the name. That isn't an acceptable match. */
- }
- });
-
- if (best_match) {
- if (warn_if_unnamed && n_matches > 1) {
- smartlist_t *fps = smartlist_new();
- int any_unwarned = 0;
- SMARTLIST_FOREACH_BEGIN(routerlist->routers, routerinfo_t *, router) {
- routerstatus_t *rs;
- char fp[HEX_DIGEST_LEN+1];
- if (strcasecmp(router->nickname, nickname))
- continue;
- rs = router_get_mutable_consensus_status_by_id(
- router->cache_info.identity_digest);
- if (rs && !rs->name_lookup_warned) {
- rs->name_lookup_warned = 1;
- any_unwarned = 1;
- }
- base16_encode(fp, sizeof(fp),
- router->cache_info.identity_digest, DIGEST_LEN);
- smartlist_add_asprintf(fps, "\"$%s\" for the one at %s:%d",
- fp, router->address, router->or_port);
- } SMARTLIST_FOREACH_END(router);
- if (any_unwarned) {
- char *alternatives = smartlist_join_strings(fps, "; ",0,NULL);
- log_warn(LD_CONFIG,
- "There are multiple matches for the nickname \"%s\","
- " but none is listed as named by the directory authorities. "
- "Choosing one arbitrarily. If you meant one in particular, "
- "you should say %s.", nickname, alternatives);
- tor_free(alternatives);
- }
- SMARTLIST_FOREACH(fps, char *, cp, tor_free(cp));
- smartlist_free(fps);
- } else if (warn_if_unnamed) {
- routerstatus_t *rs = router_get_mutable_consensus_status_by_id(
- best_match->cache_info.identity_digest);
- if (rs && !rs->name_lookup_warned) {
- char fp[HEX_DIGEST_LEN+1];
- base16_encode(fp, sizeof(fp),
- best_match->cache_info.identity_digest, DIGEST_LEN);
- log_warn(LD_CONFIG, "You specified a server \"%s\" by name, but this "
- "name is not registered, so it could be used by any server, "
- "not just the one you meant. "
- "To make sure you get the same server in the future, refer to "
- "it by key, as \"$%s\".", nickname, fp);
- rs->name_lookup_warned = 1;
- }
- }
- return best_match;
- }
- return NULL;
-#endif
-}
-
/** Return true iff <b>digest</b> is the digest of the identity key of a
* trusted directory matching at least one bit of <b>type</b>. If <b>type</b>
* is zero, any authority is okay. */
@@ -2499,7 +2537,7 @@ router_digest_is_trusted_dir_type(const char *digest, dirinfo_type_t type)
return 0;
if (authdir_mode(get_options()) && router_digest_is_me(digest))
return 1;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ent,
if (tor_memeq(digest, ent->digest, DIGEST_LEN)) {
return (!type) || ((type & ent->type) != 0);
});
@@ -2513,7 +2551,7 @@ router_addr_is_trusted_dir(uint32_t addr)
{
if (!trusted_dir_servers)
return 0;
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent,
+ SMARTLIST_FOREACH(trusted_dir_servers, dir_server_t *, ent,
if (ent->addr == addr)
return 1;
);
@@ -2535,18 +2573,6 @@ hexdigest_to_digest(const char *hexdigest, char *digest)
return 0;
}
-/** Return the router in our routerlist whose hexadecimal key digest
- * is <b>hexdigest</b>. Return NULL if no such router is known. */
-const routerinfo_t *
-router_get_by_hexdigest(const char *hexdigest)
-{
- if (is_legal_nickname(hexdigest))
- return NULL;
-
- /* It's not a legal nickname, so it must be a hexdigest or nothing. */
- return router_get_by_nickname(hexdigest, 1);
-}
-
/** As router_get_by_id_digest,but return a pointer that you're allowed to
* modify */
routerinfo_t *
@@ -2695,7 +2721,6 @@ router_get_routerlist(void)
routerlist->extra_info_map = eimap_new();
routerlist->desc_store.fname_base = "cached-descriptors";
- routerlist->desc_store.fname_alt_base = "cached-routers";
routerlist->extrainfo_store.fname_base = "cached-extrainfo";
routerlist->desc_store.type = ROUTER_STORE;
@@ -2715,12 +2740,12 @@ routerinfo_free(routerinfo_t *router)
return;
tor_free(router->cache_info.signed_descriptor_body);
- tor_free(router->address);
tor_free(router->nickname);
tor_free(router->platform);
tor_free(router->contact_info);
if (router->onion_pkey)
crypto_pk_free(router->onion_pkey);
+ tor_free(router->onion_curve25519_pkey);
if (router->identity_pkey)
crypto_pk_free(router->identity_pkey);
if (router->declared_family) {
@@ -2728,6 +2753,7 @@ routerinfo_free(routerinfo_t *router)
smartlist_free(router->declared_family);
}
addr_policy_list_free(router->exit_policy);
+ short_policy_free(router->ipv6_exit_policy);
memset(router, 77, sizeof(routerinfo_t));
@@ -2778,7 +2804,7 @@ signed_descriptor_from_routerinfo(routerinfo_t *ri)
/** Helper: free the storage held by the extrainfo_t in <b>e</b>. */
static void
-_extrainfo_free(void *e)
+extrainfo_free_(void *e)
{
extrainfo_free(e);
}
@@ -2792,17 +2818,25 @@ routerlist_free(routerlist_t *rl)
rimap_free(rl->identity_map, NULL);
sdmap_free(rl->desc_digest_map, NULL);
sdmap_free(rl->desc_by_eid_map, NULL);
- eimap_free(rl->extra_info_map, _extrainfo_free);
+ eimap_free(rl->extra_info_map, extrainfo_free_);
SMARTLIST_FOREACH(rl->routers, routerinfo_t *, r,
routerinfo_free(r));
SMARTLIST_FOREACH(rl->old_routers, signed_descriptor_t *, sd,
signed_descriptor_free(sd));
smartlist_free(rl->routers);
smartlist_free(rl->old_routers);
- if (routerlist->desc_store.mmap)
- tor_munmap_file(routerlist->desc_store.mmap);
- if (routerlist->extrainfo_store.mmap)
- tor_munmap_file(routerlist->extrainfo_store.mmap);
+ if (rl->desc_store.mmap) {
+ int res = tor_munmap_file(routerlist->desc_store.mmap);
+ if (res != 0) {
+ log_warn(LD_FS, "Failed to munmap routerlist->desc_store.mmap");
+ }
+ }
+ if (rl->extrainfo_store.mmap) {
+ int res = tor_munmap_file(routerlist->extrainfo_store.mmap);
+ if (res != 0) {
+ log_warn(LD_FS, "Failed to munmap routerlist->extrainfo_store.mmap");
+ }
+ }
tor_free(rl);
router_dir_info_changed();
@@ -2822,7 +2856,7 @@ dump_routerlist_mem_usage(int severity)
SMARTLIST_FOREACH(routerlist->old_routers, signed_descriptor_t *, sd,
olddescs += sd->signed_descriptor_len);
- log(severity, LD_DIR,
+ tor_log(severity, LD_DIR,
"In %d live descriptors: "U64_FORMAT" bytes. "
"In %d old descriptors: "U64_FORMAT" bytes.",
smartlist_len(routerlist->routers), U64_PRINTF_ARG(livedescs),
@@ -2834,7 +2868,7 @@ dump_routerlist_mem_usage(int severity)
* <b>ri</b>. Return the index of <b>ri</b> in <b>sl</b>, or -1 if <b>ri</b>
* is not in <b>sl</b>. */
static INLINE int
-_routerlist_find_elt(smartlist_t *sl, void *ri, int idx)
+routerlist_find_elt_(smartlist_t *sl, void *ri, int idx)
{
if (idx < 0) {
idx = -1;
@@ -2890,7 +2924,7 @@ routerlist_insert(routerlist_t *rl, routerinfo_t *ri)
&ri->cache_info);
smartlist_add(rl->routers, ri);
ri->cache_info.routerlist_index = smartlist_len(rl->routers) - 1;
- nodelist_add_routerinfo(ri);
+ nodelist_set_routerinfo(ri, NULL);
router_dir_info_changed();
#ifdef DEBUG_ROUTERLIST
routerlist_assert_ok(rl);
@@ -3119,8 +3153,11 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
tor_assert(0 <= idx && idx < smartlist_len(rl->routers));
tor_assert(smartlist_get(rl->routers, idx) == ri_old);
- nodelist_remove_routerinfo(ri_old);
- nodelist_add_routerinfo(ri_new);
+ {
+ routerinfo_t *ri_old_tmp=NULL;
+ nodelist_set_routerinfo(ri_new, &ri_old_tmp);
+ tor_assert(ri_old == ri_old_tmp);
+ }
router_dir_info_changed();
if (idx >= 0) {
@@ -3128,7 +3165,7 @@ routerlist_replace(routerlist_t *rl, routerinfo_t *ri_old,
ri_old->cache_info.routerlist_index = -1;
ri_new->cache_info.routerlist_index = idx;
/* Check that ri_old is not in rl->routers anymore: */
- tor_assert( _routerlist_find_elt(rl->routers, ri_old, -1) == -1 );
+ tor_assert( routerlist_find_elt_(rl->routers, ri_old, -1) == -1 );
} else {
log_warn(LD_BUG, "Appending entry from routerlist_replace.");
routerlist_insert(rl, ri_new);
@@ -3232,20 +3269,12 @@ routerlist_free_all(void)
smartlist_free(warned_nicknames);
warned_nicknames = NULL;
}
- if (trusted_dir_servers) {
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ds,
- trusted_dir_server_free(ds));
- smartlist_free(trusted_dir_servers);
- trusted_dir_servers = NULL;
- }
+ clear_dir_servers();
+ smartlist_free(trusted_dir_servers);
+ smartlist_free(fallback_dir_servers);
+ trusted_dir_servers = fallback_dir_servers = NULL;
if (trusted_dir_certs) {
- DIGESTMAP_FOREACH(trusted_dir_certs, key, cert_list_t *, cl) {
- SMARTLIST_FOREACH(cl->certs, authority_cert_t *, cert,
- authority_cert_free(cert));
- smartlist_free(cl->certs);
- tor_free(cl);
- } DIGESTMAP_FOREACH_END;
- digestmap_free(trusted_dir_certs, NULL);
+ digestmap_free(trusted_dir_certs, cert_list_free_);
trusted_dir_certs = NULL;
}
}
@@ -3263,33 +3292,6 @@ routerlist_reset_warnings(void)
networkstatus_reset_warnings();
}
-/** Mark the router with ID <b>digest</b> as running or non-running
- * in our routerlist. */
-void
-router_set_status(const char *digest, int up)
-{
- node_t *node;
- tor_assert(digest);
-
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, d,
- if (tor_memeq(d->digest, digest, DIGEST_LEN))
- d->is_running = up);
-
- node = node_get_mutable_by_id(digest);
- if (node) {
-#if 0
- log_debug(LD_DIR,"Marking router %s as %s.",
- node_describe(node), up ? "up" : "down");
-#endif
- if (!up && node_is_me(node) && !net_is_disabled())
- log_warn(LD_NET, "We just marked ourself as down. Are your external "
- "addresses reachable?");
- node->is_running = up;
- }
-
- router_dir_info_changed();
-}
-
/** Add <b>router</b> to the routerlist, if we don't already have it. Replace
* older entries (if any) with the same key. Note: Callers should not hold
* their pointers to <b>router</b> if this function fails; <b>router</b>
@@ -3321,7 +3323,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
routerinfo_t *old_router;
networkstatus_t *consensus =
networkstatus_get_latest_consensus_by_flavor(FLAV_NS);
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
int in_consensus = 0;
tor_assert(msg);
@@ -3392,15 +3393,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
}
/* We no longer need a router with this descriptor digest. */
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- {
- routerstatus_t *rs =
- networkstatus_v2_find_mutable_entry(ns, id_digest);
- if (rs && tor_memeq(rs->descriptor_digest,
- router->cache_info.signed_descriptor_digest,
- DIGEST_LEN))
- rs->need_to_mirror = 0;
- });
if (consensus) {
routerstatus_t *rs = networkstatus_vote_find_mutable_entry(
consensus, id_digest);
@@ -3408,7 +3400,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
router->cache_info.signed_descriptor_digest,
DIGEST_LEN)) {
in_consensus = 1;
- rs->need_to_mirror = 0;
}
}
@@ -3457,17 +3448,11 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
/* Same key, and either new, or listed in the consensus. */
log_debug(LD_DIR, "Replacing entry for router %s",
router_describe(router));
- if (routers_have_same_or_addr(router, old_router)) {
- /* these carry over when the address and orport are unchanged. */
- router->last_reachable = old_router->last_reachable;
- router->testing_since = old_router->testing_since;
- }
routerlist_replace(routerlist, old_router, router);
if (!from_cache) {
signed_desc_append_to_journal(&router->cache_info,
&routerlist->desc_store);
}
- directory_set_dirty();
*msg = authdir_believes_valid ? "Valid server updated" :
("Invalid server updated. (This dirserver is marking your "
"server as unapproved.)");
@@ -3489,7 +3474,6 @@ router_add_to_routerlist(routerinfo_t *router, const char **msg,
signed_desc_append_to_journal(&router->cache_info,
&routerlist->desc_store);
}
- directory_set_dirty();
return ROUTER_ADDED_SUCCESSFULLY;
}
@@ -3522,7 +3506,7 @@ router_add_extrainfo_to_routerlist(extrainfo_t *ei, const char **msg,
* signed_descriptor_t* in *<b>a</b> has an identity digest preceding, equal
* to, or later than that of *<b>b</b>. */
static int
-_compare_old_routers_by_identity(const void **_a, const void **_b)
+compare_old_routers_by_identity_(const void **_a, const void **_b)
{
int i;
const signed_descriptor_t *r1 = *_a, *r2 = *_b;
@@ -3542,7 +3526,7 @@ struct duration_idx_t {
/** Sorting helper: compare two duration_idx_t by their duration. */
static int
-_compare_duration_idx(const void *_d1, const void *_d2)
+compare_duration_idx_(const void *_d1, const void *_d2)
{
const struct duration_idx_t *d1 = _d1;
const struct duration_idx_t *d2 = _d2;
@@ -3595,7 +3579,7 @@ routerlist_remove_old_cached_routers_with_id(time_t now,
signed_descriptor_t *r_next;
lifespans[i-lo].idx = i;
if (r->last_listed_as_valid_until >= now ||
- (retain && digestset_isin(retain, r->signed_descriptor_digest))) {
+ (retain && digestset_contains(retain, r->signed_descriptor_digest))) {
must_keep[i-lo] = 1;
}
if (i < hi) {
@@ -3619,7 +3603,7 @@ routerlist_remove_old_cached_routers_with_id(time_t now,
* the duration of liveness, and remove the ones we're not already going to
* remove based on how long they were alive.
**/
- qsort(lifespans, n, sizeof(struct duration_idx_t), _compare_duration_idx);
+ qsort(lifespans, n, sizeof(struct duration_idx_t), compare_duration_idx_);
for (i = 0; i < n && n_rmv < n_extra; ++i) {
if (!must_keep[lifespans[i].idx-lo] && !lifespans[i].old) {
rmv[lifespans[i].idx-lo] = 1;
@@ -3652,11 +3636,7 @@ routerlist_remove_old_routers(void)
routerinfo_t *router;
signed_descriptor_t *sd;
digestset_t *retain;
- int caches = directory_caches_dir_info(get_options());
const networkstatus_t *consensus = networkstatus_get_latest_consensus();
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
- int have_enough_v2;
- const or_options_t *options = get_options();
trusted_dirs_remove_old_certs();
@@ -3672,38 +3652,10 @@ routerlist_remove_old_routers(void)
{
/* We'll probably retain everything in the consensus. */
int n_max_retain = smartlist_len(consensus->routerstatus_list);
- if (caches && networkstatus_v2_list) {
- /* If we care about v2 statuses, we'll retain at most as many as are
- listed any of the v2 statues. This will be at least the length of
- the largest v2 networkstatus, and in the worst case, this set will be
- equal to the sum of the lengths of all v2 consensuses. Take the
- worst case.
- */
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- n_max_retain += smartlist_len(ns->entries));
- }
retain = digestset_new(n_max_retain);
}
cutoff = now - OLD_ROUTER_DESC_MAX_AGE;
- /* Build a list of all the descriptors that _anybody_ lists. */
- if (caches && networkstatus_v2_list) {
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- /* XXXX The inner loop here gets pretty expensive, and actually shows up
- * on some profiles. It may be the reason digestmap_set shows up in
- * profiles too. If instead we kept a per-descriptor digest count of
- * how many networkstatuses recommended each descriptor, and changed
- * that only when the networkstatuses changed, that would be a speed
- * improvement, possibly 1-4% if it also removes digestmap_set from the
- * profile. Not worth it for 0.1.2.x, though. The new directory
- * system will obsolete this whole thing in 0.2.0.x. */
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t *, rs) {
- if (rs->published_on >= cutoff)
- digestset_add(retain, rs->descriptor_digest);
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
- }
-
/* Retain anything listed in the consensus. */
if (consensus) {
SMARTLIST_FOREACH(consensus->routerstatus_list, routerstatus_t *, rs,
@@ -3711,25 +3663,18 @@ routerlist_remove_old_routers(void)
digestset_add(retain, rs->descriptor_digest));
}
- /* If we have a consensus, and nearly as many v2 networkstatuses as we want,
- * we should consider pruning current routers that are too old and that
- * nobody recommends. (If we don't have a consensus or enough v2
- * networkstatuses, then we should get more before we decide to kill
- * routers.) */
- /* we set this to true iff we don't care about v2 info, or we have enough. */
- have_enough_v2 = !caches ||
- !(authdir_mode_any_main(options) || options->FetchV2Networkstatus) ||
- (networkstatus_v2_list &&
- smartlist_len(networkstatus_v2_list) > get_n_v2_authorities() / 2);
-
- if (have_enough_v2 && consensus) {
+ /* If we have a consensus, we should consider pruning current routers that
+ * are too old and that nobody recommends. (If we don't have a consensus,
+ * then we should get one before we decide to kill routers.) */
+
+ if (consensus) {
cutoff = now - ROUTER_MAX_AGE;
/* Remove too-old unrecommended members of routerlist->routers. */
for (i = 0; i < smartlist_len(routerlist->routers); ++i) {
router = smartlist_get(routerlist->routers, i);
if (router->cache_info.published_on <= cutoff &&
router->cache_info.last_listed_as_valid_until < now &&
- !digestset_isin(retain,
+ !digestset_contains(retain,
router->cache_info.signed_descriptor_digest)) {
/* Too old: remove it. (If we're a cache, just move it into
* old_routers.) */
@@ -3750,7 +3695,7 @@ routerlist_remove_old_routers(void)
sd = smartlist_get(routerlist->old_routers, i);
if (sd->published_on <= cutoff &&
sd->last_listed_as_valid_until < now &&
- !digestset_isin(retain, sd->signed_descriptor_digest)) {
+ !digestset_contains(retain, sd->signed_descriptor_digest)) {
/* Too old. Remove it. */
routerlist_remove_old(routerlist, sd, i--);
}
@@ -3773,7 +3718,7 @@ routerlist_remove_old_routers(void)
goto done;
/* Sort by identity, then fix indices. */
- smartlist_sort(routerlist->old_routers, _compare_old_routers_by_identity);
+ smartlist_sort(routerlist->old_routers, compare_old_routers_by_identity_);
/* Fix indices. */
for (i = 0; i < smartlist_len(routerlist->old_routers); ++i) {
signed_descriptor_t *r = smartlist_get(routerlist->old_routers, i);
@@ -3929,7 +3874,7 @@ router_load_routers_from_string(const char *s, const char *eos,
ri->cache_info.signed_descriptor_digest :
ri->cache_info.identity_digest,
DIGEST_LEN);
- if (smartlist_string_isin(requested_fingerprints, fp)) {
+ if (smartlist_contains_string(requested_fingerprints, fp)) {
smartlist_string_remove(requested_fingerprints, fp);
} else {
char *requested =
@@ -4021,8 +3966,6 @@ signed_desc_digest_is_recognized(signed_descriptor_t *desc)
{
const routerstatus_t *rs;
networkstatus_t *consensus = networkstatus_get_latest_consensus();
- int caches = directory_caches_dir_info(get_options());
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
if (consensus) {
rs = networkstatus_vote_find_entry(consensus, desc->identity_digest);
@@ -4030,16 +3973,6 @@ signed_desc_digest_is_recognized(signed_descriptor_t *desc)
desc->signed_descriptor_digest, DIGEST_LEN))
return 1;
}
- if (caches && networkstatus_v2_list) {
- SMARTLIST_FOREACH(networkstatus_v2_list, networkstatus_v2_t *, ns,
- {
- if (!(rs = networkstatus_v2_find_entry(ns, desc->identity_digest)))
- continue;
- if (tor_memeq(rs->descriptor_digest,
- desc->signed_descriptor_digest, DIGEST_LEN))
- return 1;
- });
- }
return 0;
}
@@ -4055,7 +3988,7 @@ update_all_descriptor_downloads(time_t now)
launch_dummy_descriptor_download_as_needed(now, get_options());
}
-/** Clear all our timeouts for fetching v2 and v3 directory stuff, and then
+/** Clear all our timeouts for fetching v3 directory stuff, and then
* give it all a try again. */
void
routerlist_retry_directory_downloads(time_t now)
@@ -4068,27 +4001,6 @@ routerlist_retry_directory_downloads(time_t now)
update_all_descriptor_downloads(now);
}
-/** Return 1 if all running sufficiently-stable routers we can use will reject
- * addr:port, return 0 if any might accept it. */
-int
-router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
- int need_uptime)
-{ /* XXXX MOVE */
- addr_policy_result_t r;
-
- SMARTLIST_FOREACH_BEGIN(nodelist_get_list(), const node_t *, node) {
- if (node->is_running &&
- !node_is_unreliable(node, need_uptime, 0, 0)) {
-
- r = compare_tor_addr_to_node_policy(addr, port, node);
-
- if (r != ADDR_POLICY_REJECTED && r != ADDR_POLICY_PROBABLY_REJECTED)
- return 0; /* this one could be ok. good enough. */
- }
- } SMARTLIST_FOREACH_END(node);
- return 1; /* all will reject. */
-}
-
/** Return true iff <b>router</b> does not permit exit streams.
*/
int
@@ -4097,47 +4009,47 @@ router_exit_policy_rejects_all(const routerinfo_t *router)
return router->policy_is_reject_star;
}
-/** Add to the list of authoritative directory servers one at
- * <b>address</b>:<b>port</b>, with identity key <b>digest</b>. If
- * <b>address</b> is NULL, add ourself. Return the new trusted directory
- * server entry on success or NULL if we couldn't add it. */
-trusted_dir_server_t *
-add_trusted_dir_server(const char *nickname, const char *address,
- uint16_t dir_port, uint16_t or_port,
- const char *digest, const char *v3_auth_digest,
- dirinfo_type_t type)
-{
- trusted_dir_server_t *ent;
+/** Create an directory server at <b>address</b>:<b>port</b>, with OR identity
+ * key <b>digest</b>. If <b>address</b> is NULL, add ourself. If
+ * <b>is_authority</b>, this is a directory authority. Return the new
+ * directory server entry on success or NULL on failure. */
+static dir_server_t *
+dir_server_new(int is_authority,
+ const char *nickname,
+ const tor_addr_t *addr,
+ const char *hostname,
+ uint16_t dir_port, uint16_t or_port,
+ const char *digest, const char *v3_auth_digest,
+ dirinfo_type_t type,
+ double weight)
+{
+ dir_server_t *ent;
uint32_t a;
- char *hostname = NULL;
- if (!trusted_dir_servers)
- trusted_dir_servers = smartlist_new();
+ char *hostname_ = NULL;
- if (!address) { /* The address is us; we should guess. */
- if (resolve_my_address(LOG_WARN, get_options(), &a, &hostname) < 0) {
- log_warn(LD_CONFIG,
- "Couldn't find a suitable address when adding ourself as a "
- "trusted directory server.");
- return NULL;
- }
- } else {
- if (tor_lookup_hostname(address, &a)) {
- log_warn(LD_CONFIG,
- "Unable to lookup address for directory server at '%s'",
- address);
- return NULL;
- }
- hostname = tor_strdup(address);
- }
+ if (weight < 0)
+ return NULL;
+
+ if (tor_addr_family(addr) == AF_INET)
+ a = tor_addr_to_ipv4h(addr);
+ else
+ return NULL; /*XXXX Support IPv6 */
+
+ if (!hostname)
+ hostname_ = tor_dup_addr(addr);
+ else
+ hostname_ = tor_strdup(hostname);
- ent = tor_malloc_zero(sizeof(trusted_dir_server_t));
+ ent = tor_malloc_zero(sizeof(dir_server_t));
ent->nickname = nickname ? tor_strdup(nickname) : NULL;
- ent->address = hostname;
+ ent->address = hostname_;
ent->addr = a;
ent->dir_port = dir_port;
ent->or_port = or_port;
ent->is_running = 1;
+ ent->is_authority = is_authority;
ent->type = type;
+ ent->weight = weight;
memcpy(ent->digest, digest, DIGEST_LEN);
if (v3_auth_digest && (type & V3_DIRINFO))
memcpy(ent->v3_identity_digest, v3_auth_digest, DIGEST_LEN);
@@ -4159,14 +4071,78 @@ add_trusted_dir_server(const char *nickname, const char *address,
ent->fake_status.dir_port = ent->dir_port;
ent->fake_status.or_port = ent->or_port;
- if (ent->or_port)
- ent->fake_status.version_supports_begindir = 1;
+ return ent;
+}
- ent->fake_status.version_supports_conditional_consensus = 1;
+/** Create an authoritative directory server at
+ * <b>address</b>:<b>port</b>, with identity key <b>digest</b>. If
+ * <b>address</b> is NULL, add ourself. Return the new trusted directory
+ * server entry on success or NULL if we couldn't add it. */
+dir_server_t *
+trusted_dir_server_new(const char *nickname, const char *address,
+ uint16_t dir_port, uint16_t or_port,
+ const char *digest, const char *v3_auth_digest,
+ dirinfo_type_t type, double weight)
+{
+ uint32_t a;
+ tor_addr_t addr;
+ char *hostname=NULL;
+ dir_server_t *result;
- smartlist_add(trusted_dir_servers, ent);
+ if (!address) { /* The address is us; we should guess. */
+ if (resolve_my_address(LOG_WARN, get_options(),
+ &a, NULL, &hostname) < 0) {
+ log_warn(LD_CONFIG,
+ "Couldn't find a suitable address when adding ourself as a "
+ "trusted directory server.");
+ return NULL;
+ }
+ if (!hostname)
+ hostname = tor_dup_ip(a);
+ } else {
+ if (tor_lookup_hostname(address, &a)) {
+ log_warn(LD_CONFIG,
+ "Unable to lookup address for directory server at '%s'",
+ address);
+ return NULL;
+ }
+ hostname = tor_strdup(address);
+ }
+ tor_addr_from_ipv4h(&addr, a);
+
+ result = dir_server_new(1, nickname, &addr, hostname,
+ dir_port, or_port, digest,
+ v3_auth_digest, type, weight);
+ tor_free(hostname);
+ return result;
+}
+
+/** Return a new dir_server_t for a fallback directory server at
+ * <b>addr</b>:<b>or_port</b>/<b>dir_port</b>, with identity key digest
+ * <b>id_digest</b> */
+dir_server_t *
+fallback_dir_server_new(const tor_addr_t *addr,
+ uint16_t dir_port, uint16_t or_port,
+ const char *id_digest, double weight)
+{
+ return dir_server_new(0, NULL, addr, NULL, dir_port, or_port, id_digest,
+ NULL, ALL_DIRINFO, weight);
+}
+
+/** Add a directory server to the global list(s). */
+void
+dir_server_add(dir_server_t *ent)
+{
+ if (!trusted_dir_servers)
+ trusted_dir_servers = smartlist_new();
+ if (!fallback_dir_servers)
+ fallback_dir_servers = smartlist_new();
+
+ if (ent->is_authority)
+ smartlist_add(trusted_dir_servers, ent);
+
+ smartlist_add(fallback_dir_servers, ent);
router_dir_info_changed();
- return ent;
}
/** Free storage held in <b>cert</b>. */
@@ -4185,7 +4161,7 @@ authority_cert_free(authority_cert_t *cert)
/** Free storage held in <b>ds</b>. */
static void
-trusted_dir_server_free(trusted_dir_server_t *ds)
+dir_server_free(dir_server_t *ds)
{
if (!ds)
return;
@@ -4196,13 +4172,18 @@ trusted_dir_server_free(trusted_dir_server_t *ds)
tor_free(ds);
}
-/** Remove all members from the list of trusted dir servers. */
+/** Remove all members from the list of dir servers. */
void
-clear_trusted_dir_servers(void)
+clear_dir_servers(void)
{
+ if (fallback_dir_servers) {
+ SMARTLIST_FOREACH(fallback_dir_servers, dir_server_t *, ent,
+ dir_server_free(ent));
+ smartlist_clear(fallback_dir_servers);
+ } else {
+ fallback_dir_servers = smartlist_new();
+ }
if (trusted_dir_servers) {
- SMARTLIST_FOREACH(trusted_dir_servers, trusted_dir_server_t *, ent,
- trusted_dir_server_free(ent));
smartlist_clear(trusted_dir_servers);
} else {
trusted_dir_servers = smartlist_new();
@@ -4210,17 +4191,6 @@ clear_trusted_dir_servers(void)
router_dir_info_changed();
}
-/** Return 1 if any trusted dir server supports v1 directories,
- * else return 0. */
-int
-any_trusted_dir_is_v1_authority(void)
-{
- if (trusted_dir_servers)
- return get_n_authorities(V1_DIRINFO) > 0;
-
- return 0;
-}
-
/** For every current directory connection whose purpose is <b>purpose</b>,
* and where the resource being downloaded begins with <b>prefix</b>, split
* rest of the resource into base16 fingerprints (or base64 fingerprints if
@@ -4283,6 +4253,41 @@ list_pending_microdesc_downloads(digestmap_t *result)
list_pending_downloads(result, DIR_PURPOSE_FETCH_MICRODESC, "d/");
}
+/** For every certificate we are currently downloading by (identity digest,
+ * signing key digest) pair, set result[fp_pair] to (void *1).
+ */
+static void
+list_pending_fpsk_downloads(fp_pair_map_t *result)
+{
+ const char *pfx = "fp-sk/";
+ smartlist_t *tmp;
+ smartlist_t *conns;
+ const char *resource;
+
+ tor_assert(result);
+
+ tmp = smartlist_new();
+ conns = get_connection_array();
+
+ SMARTLIST_FOREACH_BEGIN(conns, connection_t *, conn) {
+ if (conn->type == CONN_TYPE_DIR &&
+ conn->purpose == DIR_PURPOSE_FETCH_CERTIFICATE &&
+ !conn->marked_for_close) {
+ resource = TO_DIR_CONN(conn)->requested_resource;
+ if (!strcmpstart(resource, pfx))
+ dir_split_resource_into_fingerprint_pairs(resource + strlen(pfx),
+ tmp);
+ }
+ } SMARTLIST_FOREACH_END(conn);
+
+ SMARTLIST_FOREACH_BEGIN(tmp, fp_pair_t *, fp) {
+ fp_pair_map_set(result, fp, (void*)1);
+ tor_free(fp);
+ } SMARTLIST_FOREACH_END(fp);
+
+ smartlist_free(tmp);
+}
+
/** Launch downloads for all the descriptors whose digests or digests256
* are listed as digests[i] for lo <= i < hi. (Lo and hi may be out of
* range.) If <b>source</b> is given, download from <b>source</b>;
@@ -4338,7 +4343,7 @@ initiate_descriptor_downloads(const routerstatus_t *source,
/* We know which authority we want. */
directory_initiate_command_routerstatus(source, purpose,
ROUTER_PURPOSE_GENERAL,
- 0, /* not private */
+ DIRIND_ONEHOP,
resource, NULL, 0, 0);
} else {
directory_get_from_dirserver(purpose, ROUTER_PURPOSE_GENERAL, resource,
@@ -4347,30 +4352,6 @@ initiate_descriptor_downloads(const routerstatus_t *source,
tor_free(resource);
}
-/** Return 0 if this routerstatus is obsolete, too new, isn't
- * running, or otherwise not a descriptor that we would make any
- * use of even if we had it. Else return 1. */
-static INLINE int
-client_would_use_router(const routerstatus_t *rs, time_t now,
- const or_options_t *options)
-{
- if (!rs->is_flagged_running && !options->FetchUselessDescriptors) {
- /* If we had this router descriptor, we wouldn't even bother using it.
- * But, if we want to have a complete list, fetch it anyway. */
- return 0;
- }
- if (rs->published_on + options->TestingEstimatedDescriptorPropagationTime
- > now) {
- /* Most caches probably don't have this descriptor yet. */
- return 0;
- }
- if (rs->published_on + OLD_ROUTER_DESC_MAX_AGE < now) {
- /* We'd drop it immediately for being too old. */
- return 0;
- }
- return 1;
-}
-
/** Max amount of hashes to download per request.
* Since squid does not like URLs >= 4096 bytes we limit it to 96.
* 4096 - strlen(http://255.255.255.255/tor/server/d/.z) == 4058
@@ -4386,12 +4367,8 @@ client_would_use_router(const routerstatus_t *rs, time_t now,
* try to split our requests into at least this many requests. */
#define MIN_REQUESTS 3
/** If we want fewer than this many descriptors, wait until we
- * want more, or until MAX_CLIENT_INTERVAL_WITHOUT_REQUEST has
- * passed. */
+ * want more, or until TestingClientMaxIntervalWithoutRequest has passed. */
#define MAX_DL_TO_DELAY 16
-/** When directory clients have only a few servers to request, they batch
- * them until they have more, or until this amount of time has passed. */
-#define MAX_CLIENT_INTERVAL_WITHOUT_REQUEST (10*60)
/** Given a <b>purpose</b> (FETCH_MICRODESC or FETCH_SERVERDESC) and a list of
* router descriptor digests or microdescriptor digest256s in
@@ -4423,7 +4400,7 @@ launch_descriptor_downloads(int purpose,
should_delay = 0;
} else {
should_delay = (last_descriptor_download_attempted +
- MAX_CLIENT_INTERVAL_WITHOUT_REQUEST) > now;
+ options->TestingClientMaxIntervalWithoutRequest) > now;
if (!should_delay && n_downloadable) {
if (last_descriptor_download_attempted) {
log_info(LD_DIR,
@@ -4440,11 +4417,6 @@ launch_descriptor_downloads(int purpose,
}
}
}
- /* XXX should we consider having even the dir mirrors delay
- * a little bit, so we don't load the authorities as much? -RD
- * I don't think so. If we do, clients that want those descriptors may
- * not actually find them if the caches haven't got them yet. -NM
- */
if (! should_delay && n_downloadable) {
int i, n_per_request;
@@ -4484,9 +4456,9 @@ launch_descriptor_downloads(int purpose,
rtr_plural = "s";
log_info(LD_DIR,
- "Launching %d request%s for %d router%s, %d at a time",
- CEIL_DIV(n_downloadable, n_per_request),
- req_plural, n_downloadable, rtr_plural, n_per_request);
+ "Launching %d request%s for %d %s%s, %d at a time",
+ CEIL_DIV(n_downloadable, n_per_request), req_plural,
+ n_downloadable, descname, rtr_plural, n_per_request);
smartlist_sort_digests(downloadable);
for (i=0; i < n_downloadable; i += n_per_request) {
initiate_descriptor_downloads(source, purpose,
@@ -4497,152 +4469,6 @@ launch_descriptor_downloads(int purpose,
}
}
-/** Launch downloads for router status as needed, using the strategy used by
- * authorities and caches: based on the v2 networkstatuses we have, download
- * every descriptor we don't have but would serve, from a random authority
- * that lists it. */
-static void
-update_router_descriptor_cache_downloads_v2(time_t now)
-{
- smartlist_t **downloadable; /* For each authority, what can we dl from it? */
- smartlist_t **download_from; /* ... and, what will we dl from it? */
- digestmap_t *map; /* Which descs are in progress, or assigned? */
- int i, j, n;
- int n_download;
- const or_options_t *options = get_options();
- const smartlist_t *networkstatus_v2_list = networkstatus_get_v2_list();
-
- if (! directory_fetches_dir_info_early(options)) {
- log_warn(LD_BUG, "Called update_router_descriptor_cache_downloads_v2() "
- "on a non-dir-mirror?");
- }
-
- if (!networkstatus_v2_list || !smartlist_len(networkstatus_v2_list))
- return;
-
- map = digestmap_new();
- n = smartlist_len(networkstatus_v2_list);
-
- downloadable = tor_malloc_zero(sizeof(smartlist_t*) * n);
- download_from = tor_malloc_zero(sizeof(smartlist_t*) * n);
-
- /* Set map[d]=1 for the digest of every descriptor that we are currently
- * downloading. */
- list_pending_descriptor_downloads(map, 0);
-
- /* For the digest of every descriptor that we don't have, and that we aren't
- * downloading, add d to downloadable[i] if the i'th networkstatus knows
- * about that descriptor, and we haven't already failed to get that
- * descriptor from the corresponding authority.
- */
- n_download = 0;
- SMARTLIST_FOREACH_BEGIN(networkstatus_v2_list, networkstatus_v2_t *, ns) {
- trusted_dir_server_t *ds;
- smartlist_t *dl;
- dl = downloadable[ns_sl_idx] = smartlist_new();
- download_from[ns_sl_idx] = smartlist_new();
- if (ns->published_on + MAX_NETWORKSTATUS_AGE+10*60 < now) {
- /* Don't download if the networkstatus is almost ancient. */
- /* Actually, I suspect what's happening here is that we ask
- * for the descriptor when we have a given networkstatus,
- * and then we get a newer networkstatus, and then we receive
- * the descriptor. Having a networkstatus actually expire is
- * probably a rare event, and we'll probably be happiest if
- * we take this clause out. -RD */
- continue;
- }
-
- /* Don't try dirservers that we think are down -- we might have
- * just tried them and just marked them as down. */
- ds = router_get_trusteddirserver_by_digest(ns->identity_digest);
- if (ds && !ds->is_running)
- continue;
-
- SMARTLIST_FOREACH_BEGIN(ns->entries, routerstatus_t * , rs) {
- if (!rs->need_to_mirror)
- continue;
- if (router_get_by_descriptor_digest(rs->descriptor_digest)) {
- log_warn(LD_BUG,
- "We have a router descriptor, but need_to_mirror=1.");
- rs->need_to_mirror = 0;
- continue;
- }
- if (authdir_mode(options) && dirserv_would_reject_router(rs)) {
- rs->need_to_mirror = 0;
- continue;
- }
- if (digestmap_get(map, rs->descriptor_digest)) {
- /* We're downloading it already. */
- continue;
- } else {
- /* We could download it from this guy. */
- smartlist_add(dl, rs->descriptor_digest);
- ++n_download;
- }
- } SMARTLIST_FOREACH_END(rs);
- } SMARTLIST_FOREACH_END(ns);
-
- /* At random, assign descriptors to authorities such that:
- * - if d is a member of some downloadable[x], d is a member of some
- * download_from[y]. (Everything we want to download, we try to download
- * from somebody.)
- * - If d is a member of download_from[y], d is a member of downloadable[y].
- * (We only try to download descriptors from authorities who claim to have
- * them.)
- * - No d is a member of download_from[x] and download_from[y] s.t. x != y.
- * (We don't try to download anything from two authorities concurrently.)
- */
- while (n_download) {
- int which_ns = crypto_rand_int(n);
- smartlist_t *dl = downloadable[which_ns];
- int idx;
- char *d;
- if (!smartlist_len(dl))
- continue;
- idx = crypto_rand_int(smartlist_len(dl));
- d = smartlist_get(dl, idx);
- if (! digestmap_get(map, d)) {
- smartlist_add(download_from[which_ns], d);
- digestmap_set(map, d, (void*) 1);
- }
- smartlist_del(dl, idx);
- --n_download;
- }
-
- /* Now, we can actually launch our requests. */
- for (i=0; i<n; ++i) {
- networkstatus_v2_t *ns = smartlist_get(networkstatus_v2_list, i);
- trusted_dir_server_t *ds =
- router_get_trusteddirserver_by_digest(ns->identity_digest);
- smartlist_t *dl = download_from[i];
- int pds_flags = PDS_RETRY_IF_NO_SERVERS;
- if (! authdir_mode_any_nonhidserv(options))
- pds_flags |= PDS_NO_EXISTING_SERVERDESC_FETCH; /* XXXX ignored*/
-
- if (!ds) {
- log_info(LD_DIR, "Networkstatus with no corresponding authority!");
- continue;
- }
- if (! smartlist_len(dl))
- continue;
- log_info(LD_DIR, "Requesting %d descriptors from authority \"%s\"",
- smartlist_len(dl), ds->nickname);
- for (j=0; j < smartlist_len(dl); j += MAX_DL_PER_REQUEST) {
- initiate_descriptor_downloads(&(ds->fake_status),
- DIR_PURPOSE_FETCH_SERVERDESC, dl, j,
- j+MAX_DL_PER_REQUEST, pds_flags);
- }
- }
-
- for (i=0; i<n; ++i) {
- smartlist_free(download_from[i]);
- smartlist_free(downloadable[i]);
- }
- tor_free(download_from);
- tor_free(downloadable);
- digestmap_free(map,NULL);
-}
-
/** For any descriptor that we want that's currently listed in
* <b>consensus</b>, download it as appropriate. */
void
@@ -4665,7 +4491,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
if (is_vote) {
/* where's it from, so we know whom to ask for descriptors */
- trusted_dir_server_t *ds;
+ dir_server_t *ds;
networkstatus_voter_info_t *voter = smartlist_get(consensus->voters, 0);
tor_assert(voter);
ds = trusteddirserver_get_by_v3_auth_digest(voter->identity_digest);
@@ -4689,7 +4515,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
sd->signed_descriptor_digest, DIGEST_LEN)) {
/* We have a descriptor with this digest, but either there is no
* entry in routerlist with the same ID (!ri), or there is one,
- * but the identity digest differs (memcmp).
+ * but the identity digest differs (memneq).
*/
smartlist_add(no_longer_old, sd);
++n_in_oldrouters; /* We have it in old_routers. */
@@ -4701,7 +4527,7 @@ update_consensus_router_descriptor_downloads(time_t now, int is_vote,
continue; /* We have an in-progress download. */
}
if (!download_status_is_ready(&rs->dl_status, now,
- MAX_ROUTERDESC_DOWNLOAD_FAILURES)) {
+ options->TestingDescriptorMaxDownloadTries)) {
++n_delayed; /* Not ready for retry. */
continue;
}
@@ -4803,13 +4629,10 @@ void
update_router_descriptor_downloads(time_t now)
{
const or_options_t *options = get_options();
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
if (!we_fetch_router_descriptors(options))
return;
- if (directory_fetches_dir_info_early(options)) {
- update_router_descriptor_cache_downloads_v2(now);
- }
update_consensus_router_descriptor_downloads(now, 0,
networkstatus_get_reasonably_live_consensus(now, FLAV_NS));
@@ -4827,7 +4650,7 @@ update_extrainfo_downloads(time_t now)
int n_no_ei = 0, n_pending = 0, n_have = 0, n_delay = 0;
if (! options->DownloadExtraInfo)
return;
- if (should_delay_dir_fetches(options))
+ if (should_delay_dir_fetches(options, NULL))
return;
if (!router_have_minimum_dir_info())
return;
@@ -4861,7 +4684,7 @@ update_extrainfo_downloads(time_t now)
continue;
}
if (!download_status_is_ready(&sd->ei_dl_status, now,
- MAX_ROUTERDESC_DOWNLOAD_FAILURES)) {
+ options->TestingDescriptorMaxDownloadTries)) {
++n_delay;
continue;
}
@@ -4888,230 +4711,6 @@ update_extrainfo_downloads(time_t now)
smartlist_free(wanted);
}
-/** True iff, the last time we checked whether we had enough directory info
- * to build circuits, the answer was "yes". */
-static int have_min_dir_info = 0;
-/** True iff enough has changed since the last time we checked whether we had
- * enough directory info to build circuits that our old answer can no longer
- * be trusted. */
-static int need_to_update_have_min_dir_info = 1;
-/** String describing what we're missing before we have enough directory
- * info. */
-static char dir_info_status[128] = "";
-
-/** Return true iff we have enough networkstatus and router information to
- * start building circuits. Right now, this means "more than half the
- * networkstatus documents, and at least 1/4 of expected routers." */
-//XXX should consider whether we have enough exiting nodes here.
-int
-router_have_minimum_dir_info(void)
-{
- if (PREDICT_UNLIKELY(need_to_update_have_min_dir_info)) {
- update_router_have_minimum_dir_info();
- need_to_update_have_min_dir_info = 0;
- }
- return have_min_dir_info;
-}
-
-/** Called when our internal view of the directory has changed. This can be
- * when the authorities change, networkstatuses change, the list of routerdescs
- * changes, or number of running routers changes.
- */
-void
-router_dir_info_changed(void)
-{
- need_to_update_have_min_dir_info = 1;
- rend_hsdir_routers_changed();
-}
-
-/** Return a string describing what we're missing before we have enough
- * directory info. */
-const char *
-get_dir_info_status_string(void)
-{
- return dir_info_status;
-}
-
-/** Iterate over the servers listed in <b>consensus</b>, and count how many of
- * them seem like ones we'd use, and how many of <em>those</em> we have
- * descriptors for. Store the former in *<b>num_usable</b> and the latter in
- * *<b>num_present</b>. If <b>in_set</b> is non-NULL, only consider those
- * routers in <b>in_set</b>. If <b>exit_only</b> is true, only consider nodes
- * with the Exit flag.
- */
-static void
-count_usable_descriptors(int *num_present, int *num_usable,
- const networkstatus_t *consensus,
- const or_options_t *options, time_t now,
- routerset_t *in_set, int exit_only)
-{
- const int md = (consensus->flavor == FLAV_MICRODESC);
- *num_present = 0, *num_usable=0;
-
- SMARTLIST_FOREACH_BEGIN(consensus->routerstatus_list, routerstatus_t *, rs)
- {
- if (exit_only && ! rs->is_exit)
- continue;
- if (in_set && ! routerset_contains_routerstatus(in_set, rs, -1))
- continue;
- if (client_would_use_router(rs, now, options)) {
- const char * const digest = rs->descriptor_digest;
- int present;
- ++*num_usable; /* the consensus says we want it. */
- if (md)
- present = NULL != microdesc_cache_lookup_by_digest256(NULL, digest);
- else
- present = NULL != router_get_by_descriptor_digest(digest);
- if (present) {
- /* we have the descriptor listed in the consensus. */
- ++*num_present;
- }
- }
- }
- SMARTLIST_FOREACH_END(rs);
-
- log_debug(LD_DIR, "%d usable, %d present.", *num_usable, *num_present);
-}
-
-/** We just fetched a new set of descriptors. Compute how far through
- * the "loading descriptors" bootstrapping phase we are, so we can inform
- * the controller of our progress. */
-int
-count_loading_descriptors_progress(void)
-{
- int num_present = 0, num_usable=0;
- time_t now = time(NULL);
- const networkstatus_t *consensus =
- networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
- double fraction;
-
- if (!consensus)
- return 0; /* can't count descriptors if we have no list of them */
-
- count_usable_descriptors(&num_present, &num_usable,
- consensus, get_options(), now, NULL, 0);
-
- if (num_usable == 0)
- return 0; /* don't div by 0 */
- fraction = num_present / (num_usable/4.);
- if (fraction > 1.0)
- return 0; /* it's not the number of descriptors holding us back */
- return BOOTSTRAP_STATUS_LOADING_DESCRIPTORS + (int)
- (fraction*(BOOTSTRAP_STATUS_CONN_OR-1 -
- BOOTSTRAP_STATUS_LOADING_DESCRIPTORS));
-}
-
-/** Change the value of have_min_dir_info, setting it true iff we have enough
- * network and router information to build circuits. Clear the value of
- * need_to_update_have_min_dir_info. */
-static void
-update_router_have_minimum_dir_info(void)
-{
- int num_present = 0, num_usable=0;
- int num_exit_present = 0, num_exit_usable = 0;
- time_t now = time(NULL);
- int res;
- const or_options_t *options = get_options();
- const networkstatus_t *consensus =
- networkstatus_get_reasonably_live_consensus(now,usable_consensus_flavor());
- int using_md;
-
- if (!consensus) {
- if (!networkstatus_get_latest_consensus())
- strlcpy(dir_info_status, "We have no usable consensus.",
- sizeof(dir_info_status));
- else
- strlcpy(dir_info_status, "We have no recent usable consensus.",
- sizeof(dir_info_status));
- res = 0;
- goto done;
- }
-
- if (should_delay_dir_fetches(get_options())) {
- log_notice(LD_DIR, "no known bridge descriptors running yet; stalling");
- strlcpy(dir_info_status, "No live bridge descriptors.",
- sizeof(dir_info_status));
- res = 0;
- goto done;
- }
-
- using_md = consensus->flavor == FLAV_MICRODESC;
-
- count_usable_descriptors(&num_present, &num_usable, consensus, options, now,
- NULL, 0);
- count_usable_descriptors(&num_exit_present, &num_exit_usable,
- consensus, options, now, options->ExitNodes, 1);
-
-/* What fraction of desired server descriptors do we need before we will
- * build circuits? */
-#define FRAC_USABLE_NEEDED .75
-/* What fraction of desired _exit_ server descriptors do we need before we
- * will build circuits? */
-#define FRAC_EXIT_USABLE_NEEDED .5
-
- if (num_present < num_usable * FRAC_USABLE_NEEDED) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable %sdescriptors.",
- num_present, num_usable, using_md ? "micro" : "");
- res = 0;
- control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
- goto done;
- } else if (num_present < 2) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "Only %d %sdescriptor%s here and believed reachable!",
- num_present, using_md ? "micro" : "", num_present ? "" : "s");
- res = 0;
- goto done;
- } else if (num_exit_present < num_exit_usable * FRAC_EXIT_USABLE_NEEDED) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable exit node descriptors.",
- num_exit_present, num_exit_usable);
- res = 0;
- control_event_bootstrap(BOOTSTRAP_STATUS_REQUESTING_DESCRIPTORS, 0);
- goto done;
- }
-
- /* Check for entry nodes. */
- if (options->EntryNodes) {
- count_usable_descriptors(&num_present, &num_usable, consensus, options,
- now, options->EntryNodes, 0);
-
- if (!num_usable || !num_present) {
- tor_snprintf(dir_info_status, sizeof(dir_info_status),
- "We have only %d/%d usable entry node %sdescriptors.",
- num_present, num_usable, using_md?"micro":"");
- res = 0;
- goto done;
- }
- }
-
- res = 1;
-
- done:
- if (res && !have_min_dir_info) {
- log(LOG_NOTICE, LD_DIR,
- "We now have enough directory information to build circuits.");
- control_event_client_status(LOG_NOTICE, "ENOUGH_DIR_INFO");
- control_event_bootstrap(BOOTSTRAP_STATUS_CONN_OR, 0);
- }
- if (!res && have_min_dir_info) {
- int quiet = directory_too_idle_to_fetch_descriptors(options, now);
- log(quiet ? LOG_INFO : LOG_NOTICE, LD_DIR,
- "Our directory information is no longer up-to-date "
- "enough to build circuits: %s", dir_info_status);
-
- /* a) make us log when we next complete a circuit, so we know when Tor
- * is back up and usable, and b) disable some activities that Tor
- * should only do while circuits are working, like reachability tests
- * and fetching bridge descriptors only over circuits. */
- can_complete_circuit = 0;
-
- control_event_client_status(LOG_NOTICE, "NOT_ENOUGH_DIR_INFO");
- }
- have_min_dir_info = res;
- need_to_update_have_min_dir_info = 0;
-}
-
/** Reset the descriptor download failure count on all routers, so that we
* can retry any long-failed routers immediately.
*/
@@ -5157,15 +4756,15 @@ router_differences_are_cosmetic(const routerinfo_t *r1, const routerinfo_t *r2)
}
/* If any key fields differ, they're different. */
- if (strcasecmp(r1->address, r2->address) ||
+ if (r1->addr != r2->addr ||
strcasecmp(r1->nickname, r2->nickname) ||
r1->or_port != r2->or_port ||
!tor_addr_eq(&r1->ipv6_addr, &r2->ipv6_addr) ||
r1->ipv6_orport != r2->ipv6_orport ||
r1->dir_port != r2->dir_port ||
r1->purpose != r2->purpose ||
- crypto_pk_cmp_keys(r1->onion_pkey, r2->onion_pkey) ||
- crypto_pk_cmp_keys(r1->identity_pkey, r2->identity_pkey) ||
+ !crypto_pk_eq_keys(r1->onion_pkey, r2->onion_pkey) ||
+ !crypto_pk_eq_keys(r1->identity_pkey, r2->identity_pkey) ||
strcasecmp(r1->platform, r2->platform) ||
(r1->contact_info && !r2->contact_info) || /* contact_info is optional */
(!r1->contact_info && r2->contact_info) ||
@@ -5410,7 +5009,7 @@ esc_router_info(const routerinfo_t *router)
/** Helper for sorting: compare two routerinfos by their identity
* digest. */
static int
-_compare_routerinfo_by_id_digest(const void **a, const void **b)
+compare_routerinfo_by_id_digest_(const void **a, const void **b)
{
routerinfo_t *first = *(routerinfo_t **)a, *second = *(routerinfo_t **)b;
return fast_memcmp(first->cache_info.identity_digest,
@@ -5422,153 +5021,10 @@ _compare_routerinfo_by_id_digest(const void **a, const void **b)
void
routers_sort_by_identity(smartlist_t *routers)
{
- smartlist_sort(routers, _compare_routerinfo_by_id_digest);
-}
-
-/** A routerset specifies constraints on a set of possible routerinfos, based
- * on their names, identities, or addresses. It is optimized for determining
- * whether a router is a member or not, in O(1+P) time, where P is the number
- * of address policy constraints. */
-struct routerset_t {
- /** A list of strings for the elements of the policy. Each string is either
- * a nickname, a hexadecimal identity fingerprint, or an address policy. A
- * router belongs to the set if its nickname OR its identity OR its address
- * matches an entry here. */
- smartlist_t *list;
- /** A map from lowercase nicknames of routers in the set to (void*)1 */
- strmap_t *names;
- /** A map from identity digests routers in the set to (void*)1 */
- digestmap_t *digests;
- /** An address policy for routers in the set. For implementation reasons,
- * a router belongs to the set if it is _rejected_ by this policy. */
- smartlist_t *policies;
-
- /** A human-readable description of what this routerset is for. Used in
- * log messages. */
- char *description;
-
- /** A list of the country codes in this set. */
- smartlist_t *country_names;
- /** Total number of countries we knew about when we built <b>countries</b>.*/
- int n_countries;
- /** Bit array mapping the return value of geoip_get_country() to 1 iff the
- * country is a member of this routerset. Note that we MUST call
- * routerset_refresh_countries() whenever the geoip country list is
- * reloaded. */
- bitarray_t *countries;
-};
-
-/** Return a new empty routerset. */
-routerset_t *
-routerset_new(void)
-{
- routerset_t *result = tor_malloc_zero(sizeof(routerset_t));
- result->list = smartlist_new();
- result->names = strmap_new();
- result->digests = digestmap_new();
- result->policies = smartlist_new();
- result->country_names = smartlist_new();
- return result;
+ smartlist_sort(routers, compare_routerinfo_by_id_digest_);
}
-/** If <b>c</b> is a country code in the form {cc}, return a newly allocated
- * string holding the "cc" part. Else, return NULL. */
-static char *
-routerset_get_countryname(const char *c)
-{
- char *country;
-
- if (strlen(c) < 4 || c[0] !='{' || c[3] !='}')
- return NULL;
-
- country = tor_strndup(c+1, 2);
- tor_strlower(country);
- return country;
-}
-
-/** Update the routerset's <b>countries</b> bitarray_t. Called whenever
- * the GeoIP database is reloaded.
- */
-void
-routerset_refresh_countries(routerset_t *target)
-{
- int cc;
- bitarray_free(target->countries);
-
- if (!geoip_is_loaded()) {
- target->countries = NULL;
- target->n_countries = 0;
- return;
- }
- target->n_countries = geoip_get_n_countries();
- target->countries = bitarray_init_zero(target->n_countries);
- SMARTLIST_FOREACH_BEGIN(target->country_names, const char *, country) {
- cc = geoip_get_country(country);
- if (cc >= 0) {
- tor_assert(cc < target->n_countries);
- bitarray_set(target->countries, cc);
- } else {
- log(LOG_WARN, LD_CONFIG, "Country code '%s' is not recognized.",
- country);
- }
- } SMARTLIST_FOREACH_END(country);
-}
-
-/** Parse the string <b>s</b> to create a set of routerset entries, and add
- * them to <b>target</b>. In log messages, refer to the string as
- * <b>description</b>. Return 0 on success, -1 on failure.
- *
- * Three kinds of elements are allowed in routersets: nicknames, IP address
- * patterns, and fingerprints. They may be surrounded by optional space, and
- * must be separated by commas.
- */
-int
-routerset_parse(routerset_t *target, const char *s, const char *description)
-{
- int r = 0;
- int added_countries = 0;
- char *countryname;
- smartlist_t *list = smartlist_new();
- smartlist_split_string(list, s, ",",
- SPLIT_SKIP_SPACE | SPLIT_IGNORE_BLANK, 0);
- SMARTLIST_FOREACH_BEGIN(list, char *, nick) {
- addr_policy_t *p;
- if (is_legal_hexdigest(nick)) {
- char d[DIGEST_LEN];
- if (*nick == '$')
- ++nick;
- log_debug(LD_CONFIG, "Adding identity %s to %s", nick, description);
- base16_decode(d, sizeof(d), nick, HEX_DIGEST_LEN);
- digestmap_set(target->digests, d, (void*)1);
- } else if (is_legal_nickname(nick)) {
- log_debug(LD_CONFIG, "Adding nickname %s to %s", nick, description);
- strmap_set_lc(target->names, nick, (void*)1);
- } else if ((countryname = routerset_get_countryname(nick)) != NULL) {
- log_debug(LD_CONFIG, "Adding country %s to %s", nick,
- description);
- smartlist_add(target->country_names, countryname);
- added_countries = 1;
- } else if ((strchr(nick,'.') || strchr(nick, '*')) &&
- (p = router_parse_addr_policy_item_from_string(
- nick, ADDR_POLICY_REJECT))) {
- log_debug(LD_CONFIG, "Adding address %s to %s", nick, description);
- smartlist_add(target->policies, p);
- } else {
- log_warn(LD_CONFIG, "Entry '%s' in %s is misformed.", nick,
- description);
- r = -1;
- tor_free(nick);
- SMARTLIST_DEL_CURRENT(list, nick);
- }
- } SMARTLIST_FOREACH_END(nick);
- smartlist_add_all(target->list, list);
- smartlist_free(list);
- if (added_countries)
- routerset_refresh_countries(target);
- return r;
-}
-
-/** Called when we change a node set, or when we reload the geoip list:
+/** Called when we change a node set, or when we reload the geoip IPv4 list:
* recompute all country info in all configuration node sets and in the
* routerlist. */
void
@@ -5584,303 +5040,12 @@ refresh_all_country_info(void)
routerset_refresh_countries(options->ExcludeNodes);
if (options->ExcludeExitNodes)
routerset_refresh_countries(options->ExcludeExitNodes);
- if (options->_ExcludeExitNodesUnion)
- routerset_refresh_countries(options->_ExcludeExitNodesUnion);
+ if (options->ExcludeExitNodesUnion_)
+ routerset_refresh_countries(options->ExcludeExitNodesUnion_);
nodelist_refresh_countries();
}
-/** Add all members of the set <b>source</b> to <b>target</b>. */
-void
-routerset_union(routerset_t *target, const routerset_t *source)
-{
- char *s;
- tor_assert(target);
- if (!source || !source->list)
- return;
- s = routerset_to_string(source);
- routerset_parse(target, s, "other routerset");
- tor_free(s);
-}
-
-/** Return true iff <b>set</b> lists only nicknames and digests, and includes
- * no IP ranges or countries. */
-int
-routerset_is_list(const routerset_t *set)
-{
- return smartlist_len(set->country_names) == 0 &&
- smartlist_len(set->policies) == 0;
-}
-
-/** Return true iff we need a GeoIP IP-to-country database to make sense of
- * <b>set</b>. */
-int
-routerset_needs_geoip(const routerset_t *set)
-{
- return set && smartlist_len(set->country_names);
-}
-
-/** Return true iff there are no entries in <b>set</b>. */
-int
-routerset_is_empty(const routerset_t *set)
-{
- return !set || smartlist_len(set->list) == 0;
-}
-
-/** Helper. Return true iff <b>set</b> contains a router based on the other
- * provided fields. Return higher values for more specific subentries: a
- * single router is more specific than an address range of routers, which is
- * more specific in turn than a country code.
- *
- * (If country is -1, then we take the country
- * from addr.) */
-static int
-routerset_contains(const routerset_t *set, const tor_addr_t *addr,
- uint16_t orport,
- const char *nickname, const char *id_digest,
- country_t country)
-{
- if (!set || !set->list)
- return 0;
- if (nickname && strmap_get_lc(set->names, nickname))
- return 4;
- if (id_digest && digestmap_get(set->digests, id_digest))
- return 4;
- if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
- == ADDR_POLICY_REJECTED)
- return 3;
- if (set->countries) {
- if (country < 0 && addr)
- country = geoip_get_country_by_ip(tor_addr_to_ipv4h(addr));
-
- if (country >= 0 && country < set->n_countries &&
- bitarray_is_set(set->countries, country))
- return 2;
- }
- return 0;
-}
-
-/** Return true iff we can tell that <b>ei</b> is a member of <b>set</b>. */
-int
-routerset_contains_extendinfo(const routerset_t *set, const extend_info_t *ei)
-{
- return routerset_contains(set,
- &ei->addr,
- ei->port,
- ei->nickname,
- ei->identity_digest,
- -1 /*country*/);
-}
-
-/** Return true iff <b>ri</b> is in <b>set</b>. If country is <b>-1</b>, we
- * look up the country. */
-int
-routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
- country_t country)
-{
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, ri->addr);
- return routerset_contains(set,
- &addr,
- ri->or_port,
- ri->nickname,
- ri->cache_info.identity_digest,
- country);
-}
-
-/** Return true iff <b>rs</b> is in <b>set</b>. If country is <b>-1</b>, we
- * look up the country. */
-int
-routerset_contains_routerstatus(const routerset_t *set,
- const routerstatus_t *rs,
- country_t country)
-{
- tor_addr_t addr;
- tor_addr_from_ipv4h(&addr, rs->addr);
- return routerset_contains(set,
- &addr,
- rs->or_port,
- rs->nickname,
- rs->identity_digest,
- country);
-}
-
-/** Return true iff <b>node</b> is in <b>set</b>. */
-int
-routerset_contains_node(const routerset_t *set, const node_t *node)
-{
- if (node->rs)
- return routerset_contains_routerstatus(set, node->rs, node->country);
- else if (node->ri)
- return routerset_contains_router(set, node->ri, node->country);
- else
- return 0;
-}
-
-/** Add every known node_t that is a member of <b>routerset</b> to
- * <b>out</b>, but never add any that are part of <b>excludeset</b>.
- * If <b>running_only</b>, only add the running ones. */
-void
-routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
- const routerset_t *excludeset, int running_only)
-{ /* XXXX MOVE */
- tor_assert(out);
- if (!routerset || !routerset->list)
- return;
-
- if (routerset_is_list(routerset)) {
- /* No routers are specified by type; all are given by name or digest.
- * we can do a lookup in O(len(routerset)). */
- SMARTLIST_FOREACH(routerset->list, const char *, name, {
- const node_t *node = node_get_by_nickname(name, 1);
- if (node) {
- if (!running_only || node->is_running)
- if (!routerset_contains_node(excludeset, node))
- smartlist_add(out, (void*)node);
- }
- });
- } else {
- /* We need to iterate over the routerlist to get all the ones of the
- * right kind. */
- smartlist_t *nodes = nodelist_get_list();
- SMARTLIST_FOREACH(nodes, const node_t *, node, {
- if (running_only && !node->is_running)
- continue;
- if (routerset_contains_node(routerset, node) &&
- !routerset_contains_node(excludeset, node))
- smartlist_add(out, (void*)node);
- });
- }
-}
-
-#if 0
-/** Add to <b>target</b> every node_t from <b>source</b> except:
- *
- * 1) Don't add it if <b>include</b> is non-empty and the relay isn't in
- * <b>include</b>; and
- * 2) Don't add it if <b>exclude</b> is non-empty and the relay is
- * excluded in a more specific fashion by <b>exclude</b>.
- * 3) If <b>running_only</b>, don't add non-running routers.
- */
-void
-routersets_get_node_disjunction(smartlist_t *target,
- const smartlist_t *source,
- const routerset_t *include,
- const routerset_t *exclude, int running_only)
-{
- SMARTLIST_FOREACH(source, const node_t *, node, {
- int include_result;
- if (running_only && !node->is_running)
- continue;
- if (!routerset_is_empty(include))
- include_result = routerset_contains_node(include, node);
- else
- include_result = 1;
-
- if (include_result) {
- int exclude_result = routerset_contains_node(exclude, node);
- if (include_result >= exclude_result)
- smartlist_add(target, (void*)node);
- }
- });
-}
-#endif
-
-/** Remove every node_t from <b>lst</b> that is in <b>routerset</b>. */
-void
-routerset_subtract_nodes(smartlist_t *lst, const routerset_t *routerset)
-{ /*XXXX MOVE ? */
- tor_assert(lst);
- if (!routerset)
- return;
- SMARTLIST_FOREACH(lst, const node_t *, node, {
- if (routerset_contains_node(routerset, node)) {
- //log_debug(LD_DIR, "Subtracting %s",r->nickname);
- SMARTLIST_DEL_CURRENT(lst, node);
- }
- });
-}
-
-/** Return a new string that when parsed by routerset_parse_string() will
- * yield <b>set</b>. */
-char *
-routerset_to_string(const routerset_t *set)
-{
- if (!set || !set->list)
- return tor_strdup("");
- return smartlist_join_strings(set->list, ",", 0, NULL);
-}
-
-/** Helper: return true iff old and new are both NULL, or both non-NULL
- * equal routersets. */
-int
-routerset_equal(const routerset_t *old, const routerset_t *new)
-{
- if (routerset_is_empty(old) && routerset_is_empty(new)) {
- /* Two empty sets are equal */
- return 1;
- } else if (routerset_is_empty(old) || routerset_is_empty(new)) {
- /* An empty set is equal to nothing else. */
- return 0;
- }
- tor_assert(old != NULL);
- tor_assert(new != NULL);
-
- if (smartlist_len(old->list) != smartlist_len(new->list))
- return 0;
-
- SMARTLIST_FOREACH(old->list, const char *, cp1, {
- const char *cp2 = smartlist_get(new->list, cp1_sl_idx);
- if (strcmp(cp1, cp2))
- return 0;
- });
-
- return 1;
-}
-
-/** Free all storage held in <b>routerset</b>. */
-void
-routerset_free(routerset_t *routerset)
-{
- if (!routerset)
- return;
-
- SMARTLIST_FOREACH(routerset->list, char *, cp, tor_free(cp));
- smartlist_free(routerset->list);
- SMARTLIST_FOREACH(routerset->policies, addr_policy_t *, p,
- addr_policy_free(p));
- smartlist_free(routerset->policies);
- SMARTLIST_FOREACH(routerset->country_names, char *, cp, tor_free(cp));
- smartlist_free(routerset->country_names);
-
- strmap_free(routerset->names, NULL);
- digestmap_free(routerset->digests, NULL);
- bitarray_free(routerset->countries);
- tor_free(routerset);
-}
-
-/** Refresh the country code of <b>ri</b>. This function MUST be called on
- * each router when the GeoIP database is reloaded, and on all new routers. */
-void
-node_set_country(node_t *node)
-{
- if (node->rs)
- node->country = geoip_get_country_by_ip(node->rs->addr);
- else if (node->ri)
- node->country = geoip_get_country_by_ip(node->ri->addr);
- else
- node->country = -1;
-}
-
-/** Set the country code of all routers in the routerlist. */
-void
-nodelist_refresh_countries(void) /* MOVE */
-{
- smartlist_t *nodes = nodelist_get_list();
- SMARTLIST_FOREACH(nodes, node_t *, node,
- node_set_country(node));
-}
-
/** Determine the routers that are responsible for <b>id</b> (binary) and
* add pointers to those routers' routerstatus_t to <b>responsible_dirs</b>.
* Return -1 if we're returning an empty smartlist, else return 0.
diff --git a/src/or/routerlist.h b/src/or/routerlist.h
index 8dcc6eb02..6e2f2eaea 100644
--- a/src/or/routerlist.h
+++ b/src/or/routerlist.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,12 +8,27 @@
* \brief Header file for routerlist.c.
**/
-#ifndef _TOR_ROUTERLIST_H
-#define _TOR_ROUTERLIST_H
+#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);
-int trusted_dirs_load_certs_from_string(const char *contents, int from_store,
+
+/*
+ * Pass one of these as source to trusted_dirs_load_certs_from_string()
+ * to indicate whence string originates; this controls error handling
+ * behavior such as marking downloads as failed.
+ */
+
+#define TRUSTED_DIRS_CERTS_SRC_SELF 0
+#define TRUSTED_DIRS_CERTS_SRC_FROM_STORE 1
+#define TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_DIGEST 2
+#define TRUSTED_DIRS_CERTS_SRC_DL_BY_ID_SK_DIGEST 3
+#define TRUSTED_DIRS_CERTS_SRC_FROM_VOTE 4
+
+int trusted_dirs_load_certs_from_string(const char *contents, int source,
int flush);
void trusted_dirs_flush_certs_to_disk(void);
authority_cert_t *authority_cert_get_newest_by_id(const char *id_digest);
@@ -21,40 +36,41 @@ authority_cert_t *authority_cert_get_by_sk_digest(const char *sk_digest);
authority_cert_t *authority_cert_get_by_digests(const char *id_digest,
const char *sk_digest);
void authority_cert_get_all(smartlist_t *certs_out);
-void authority_cert_dl_failed(const char *id_digest, int status);
+void authority_cert_dl_failed(const char *id_digest,
+ const char *signing_key_digest, int status);
void authority_certs_fetch_missing(networkstatus_t *status, time_t now);
int router_reload_router_list(void);
int authority_cert_dl_looks_uncertain(const char *id_digest);
-smartlist_t *router_get_trusted_dir_servers(void);
+const smartlist_t *router_get_trusted_dir_servers(void);
+const smartlist_t *router_get_fallback_dir_servers(void);
+int authority_cert_is_blacklisted(const authority_cert_t *cert);
const routerstatus_t *router_pick_directory_server(dirinfo_type_t type,
int flags);
-trusted_dir_server_t *router_get_trusteddirserver_by_digest(const char *d);
-trusted_dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d);
+dir_server_t *router_get_trusteddirserver_by_digest(const char *d);
+dir_server_t *router_get_fallback_dirserver_by_digest(
+ const char *digest);
+dir_server_t *trusteddirserver_get_by_v3_auth_digest(const char *d);
const routerstatus_t *router_pick_trusteddirserver(dirinfo_type_t type,
int flags);
-int router_get_my_share_of_directory_requests(double *v2_share_out,
- double *v3_share_out);
+const routerstatus_t *router_pick_fallback_dirserver(dirinfo_type_t type,
+ int flags);
+int router_get_my_share_of_directory_requests(double *v3_share_out);
void router_reset_status_download_failures(void);
-int routers_have_same_or_addr(const routerinfo_t *r1, const routerinfo_t *r2);
-int router_nickname_is_in_list(const routerinfo_t *router, const char *list);
+int routers_have_same_or_addrs(const routerinfo_t *r1, const routerinfo_t *r2);
const routerinfo_t *routerlist_find_my_routerinfo(void);
-const node_t *router_find_exact_exit_enclave(const char *address,
- uint16_t port);
-int node_is_unreliable(const node_t *router, int need_uptime,
- int need_capacity, int need_guard);
uint32_t router_get_advertised_bandwidth(const routerinfo_t *router);
uint32_t router_get_advertised_bandwidth_capped(const routerinfo_t *router);
-const node_t *node_sl_choose_by_bandwidth(smartlist_t *sl,
+const node_t *node_sl_choose_by_bandwidth(const smartlist_t *sl,
bandwidth_weight_rule_t rule);
+double frac_nodes_with_descriptors(const smartlist_t *sl,
+ bandwidth_weight_rule_t rule);
const node_t *router_choose_random_node(smartlist_t *excludedsmartlist,
struct routerset_t *excludedset,
router_crn_flags_t flags);
-const routerinfo_t *router_get_by_nickname(const char *nickname,
- int warn_if_unnamed);
int router_is_named(const routerinfo_t *router);
int router_digest_is_trusted_dir_type(const char *digest,
dirinfo_type_t type);
@@ -63,7 +79,6 @@ int router_digest_is_trusted_dir_type(const char *digest,
int router_addr_is_trusted_dir(uint32_t addr);
int hexdigest_to_digest(const char *hexdigest, char *digest);
-const routerinfo_t *router_get_by_hexdigest(const char *hexdigest);
const routerinfo_t *router_get_by_id_digest(const char *digest);
routerinfo_t *router_get_mutable_by_digest(const char *digest);
signed_descriptor_t *router_get_by_descriptor_digest(const char *digest);
@@ -80,7 +95,6 @@ void routerlist_remove(routerlist_t *rl, routerinfo_t *ri, int make_old,
time_t now);
void routerlist_free_all(void);
void routerlist_reset_warnings(void);
-void router_set_status(const char *digest, int up);
static int WRA_WAS_ADDED(was_router_added_t s);
static int WRA_WAS_OUTDATED(was_router_added_t s);
@@ -133,27 +147,25 @@ void router_load_extrainfo_from_string(const char *s, const char *eos,
int descriptor_digests);
void routerlist_retry_directory_downloads(time_t now);
-int router_exit_policy_all_nodes_reject(const tor_addr_t *addr, uint16_t port,
- int need_uptime);
int router_exit_policy_rejects_all(const routerinfo_t *router);
-trusted_dir_server_t *add_trusted_dir_server(const char *nickname,
- const char *address,
- uint16_t dir_port, uint16_t or_port,
- const char *digest, const char *v3_auth_digest,
- dirinfo_type_t type);
+
+dir_server_t *trusted_dir_server_new(const char *nickname, const char *address,
+ uint16_t dir_port, uint16_t or_port,
+ const char *digest, const char *v3_auth_digest,
+ dirinfo_type_t type, double weight);
+dir_server_t *fallback_dir_server_new(const tor_addr_t *addr,
+ uint16_t dir_port, uint16_t or_port,
+ const char *id_digest, double weight);
+void dir_server_add(dir_server_t *ent);
+
void authority_cert_free(authority_cert_t *cert);
-void clear_trusted_dir_servers(void);
-int any_trusted_dir_is_v1_authority(void);
+void clear_dir_servers(void);
void update_consensus_router_descriptor_downloads(time_t now, int is_vote,
networkstatus_t *consensus);
void update_router_descriptor_downloads(time_t now);
void update_all_descriptor_downloads(time_t now);
void update_extrainfo_downloads(time_t now);
-int router_have_minimum_dir_info(void);
-void router_dir_info_changed(void);
-const char *get_dir_info_status_string(void);
-int count_loading_descriptors_progress(void);
void router_reset_descriptor_download_failures(void);
int router_differences_are_cosmetic(const routerinfo_t *r1,
const routerinfo_t *r2);
@@ -166,38 +178,6 @@ void routerlist_assert_ok(const routerlist_t *rl);
const char *esc_router_info(const routerinfo_t *router);
void routers_sort_by_identity(smartlist_t *routers);
-routerset_t *routerset_new(void);
-void routerset_refresh_countries(routerset_t *rs);
-int routerset_parse(routerset_t *target, const char *s,
- const char *description);
-void routerset_union(routerset_t *target, const routerset_t *source);
-int routerset_is_list(const routerset_t *set);
-int routerset_needs_geoip(const routerset_t *set);
-int routerset_is_empty(const routerset_t *set);
-int routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
- country_t country);
-int routerset_contains_routerstatus(const routerset_t *set,
- const routerstatus_t *rs,
- country_t country);
-int routerset_contains_extendinfo(const routerset_t *set,
- const extend_info_t *ei);
-
-int routerset_contains_node(const routerset_t *set, const node_t *node);
-void routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
- const routerset_t *excludeset,
- int running_only);
-#if 0
-void routersets_get_node_disjunction(smartlist_t *target,
- const smartlist_t *source,
- const routerset_t *include,
- const routerset_t *exclude, int running_only);
-#endif
-void routerset_subtract_nodes(smartlist_t *out,
- const routerset_t *routerset);
-
-char *routerset_to_string(const routerset_t *routerset);
-int routerset_equal(const routerset_t *old, const routerset_t *new);
-void routerset_free(routerset_t *routerset);
void refresh_all_country_info(void);
int hid_serv_get_responsible_directories(smartlist_t *responsible_dirs,
@@ -215,6 +195,24 @@ int hex_digest_nickname_decode(const char *hexdigest,
char *digest_out,
char *nickname_qualifier_out,
char *nickname_out);
+int hex_digest_nickname_matches(const char *hexdigest,
+ const char *identity_digest,
+ const char *nickname, int is_named);
+
+#ifdef ROUTERLIST_PRIVATE
+/** Helper type for choosing routers by bandwidth: contains a union of
+ * double and uint64_t. Before we call scale_array_elements_to_u64, it holds
+ * a double; after, it holds a uint64_t. */
+typedef union u64_dbl_t {
+ uint64_t u64;
+ double dbl;
+} u64_dbl_t;
+
+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/routerparse.c b/src/or/routerparse.c
index 299d07d37..5add728d6 100644
--- a/src/or/routerparse.c
+++ b/src/or/routerparse.c
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,7 +11,7 @@
#include "or.h"
#include "config.h"
-#include "circuitbuild.h"
+#include "circuitstats.h"
#include "dirserv.h"
#include "dirvote.h"
#include "policies.h"
@@ -29,8 +29,8 @@
/****************************************************************************/
/** Enumeration of possible token types. The ones starting with K_ correspond
- * to directory 'keywords'. _ERR is an error in the tokenizing process, _EOF
- * is an end-of-file marker, and _NIL is used to encode not-a-token.
+ * to directory 'keywords'. ERR_ is an error in the tokenizing process, EOF_
+ * is an end-of-file marker, and NIL_ is used to encode not-a-token.
*/
typedef enum {
K_ACCEPT = 0,
@@ -43,6 +43,7 @@ typedef enum {
K_SIGNED_DIRECTORY,
K_SIGNING_KEY,
K_ONION_KEY,
+ K_ONION_KEY_NTOR,
K_ROUTER_SIGNATURE,
K_PUBLISHED,
K_RUNNING_ROUTERS,
@@ -66,7 +67,9 @@ typedef enum {
K_SERVER_VERSIONS,
K_OR_ADDRESS,
K_P,
+ K_P6,
K_R,
+ K_A,
K_S,
K_V,
K_W,
@@ -76,6 +79,7 @@ typedef enum {
K_CACHES_EXTRA_INFO,
K_HIDDEN_SERVICE_DIR,
K_ALLOW_SINGLE_HOP_EXITS,
+ K_IPV6_POLICY,
K_DIRREQ_END,
K_DIRREQ_V2_IPS,
@@ -130,7 +134,7 @@ typedef enum {
A_PURPOSE,
A_LAST_LISTED,
- _A_UNKNOWN,
+ A_UNKNOWN_,
R_RENDEZVOUS_SERVICE_DESCRIPTOR,
R_VERSION,
@@ -151,13 +155,13 @@ typedef enum {
C_DESCRIPTOR_COOKIE,
C_CLIENT_KEY,
- _ERR,
- _EOF,
- _NIL
+ ERR_,
+ EOF_,
+ NIL_
} directory_keyword;
#define MIN_ANNOTATION A_PURPOSE
-#define MAX_ANNOTATION _A_UNKNOWN
+#define MAX_ANNOTATION A_UNKNOWN_
/** Structure to hold a single directory token.
*
@@ -180,7 +184,7 @@ typedef struct directory_token_t {
crypto_pk_t *key; /**< For public keys only. Heap-allocated. */
- char *error; /**< For _ERR tokens only. */
+ char *error; /**< For ERR_ tokens only. */
} directory_token_t;
/* ********************************************************************** */
@@ -234,7 +238,7 @@ typedef struct token_rule_t {
*/
/** Appears to indicate the end of a table. */
-#define END_OF_TABLE { NULL, _NIL, 0,0,0, NO_OBJ, 0, INT_MAX, 0, 0 }
+#define END_OF_TABLE { NULL, NIL_, 0,0,0, NO_OBJ, 0, INT_MAX, 0, 0 }
/** An item with no restrictions: used for obsolete document types */
#define T(s,t,a,o) { s, t, a, o, 0, INT_MAX, 0, 0 }
/** An item with no restrictions on multiplicity or location. */
@@ -270,8 +274,10 @@ static token_rule_t routerdesc_token_table[] = {
T0N("reject6", K_REJECT6, ARGS, NO_OBJ ),
T0N("accept6", K_ACCEPT6, ARGS, NO_OBJ ),
T1_START( "router", K_ROUTER, GE(5), NO_OBJ ),
+ T01("ipv6-policy", K_IPV6_POLICY, CONCAT_ARGS, NO_OBJ),
T1( "signing-key", K_SIGNING_KEY, NO_ARGS, NEED_KEY_1024 ),
T1( "onion-key", K_ONION_KEY, NO_ARGS, NEED_KEY_1024 ),
+ T01("ntor-onion-key", K_ONION_KEY_NTOR, GE(1), NO_OBJ ),
T1_END( "router-signature", K_ROUTER_SIGNATURE, NO_ARGS, NEED_OBJ ),
T1( "published", K_PUBLISHED, CONCAT_ARGS, NO_OBJ ),
T01("uptime", K_UPTIME, GE(1), NO_OBJ ),
@@ -333,11 +339,12 @@ static token_rule_t extrainfo_token_table[] = {
END_OF_TABLE
};
-/** List of tokens recognized in the body part of v2 and v3 networkstatus
+/** List of tokens recognized in the body part of v3 networkstatus
* documents. */
static token_rule_t rtrstatus_token_table[] = {
T01("p", K_P, CONCAT_ARGS, NO_OBJ ),
T1( "r", K_R, GE(7), NO_OBJ ),
+ T0N("a", K_A, GE(1), NO_OBJ ),
T1( "s", K_S, ARGS, NO_OBJ ),
T01("v", K_V, CONCAT_ARGS, NO_OBJ ),
T01("w", K_W, ARGS, NO_OBJ ),
@@ -346,50 +353,6 @@ static token_rule_t rtrstatus_token_table[] = {
END_OF_TABLE
};
-/** List of tokens recognized in the header part of v2 networkstatus documents.
- */
-static token_rule_t netstatus_token_table[] = {
- T1( "published", K_PUBLISHED, CONCAT_ARGS, NO_OBJ ),
- T0N("opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
- T1( "contact", K_CONTACT, CONCAT_ARGS, NO_OBJ ),
- T1( "dir-signing-key", K_DIR_SIGNING_KEY, NO_ARGS, NEED_KEY_1024 ),
- T1( "fingerprint", K_FINGERPRINT, CONCAT_ARGS, NO_OBJ ),
- T1_START("network-status-version", K_NETWORK_STATUS_VERSION,
- GE(1), NO_OBJ ),
- T1( "dir-source", K_DIR_SOURCE, GE(3), NO_OBJ ),
- T01("dir-options", K_DIR_OPTIONS, ARGS, NO_OBJ ),
- T01("client-versions", K_CLIENT_VERSIONS, CONCAT_ARGS, NO_OBJ ),
- T01("server-versions", K_SERVER_VERSIONS, CONCAT_ARGS, NO_OBJ ),
-
- END_OF_TABLE
-};
-
-/** List of tokens recognized in the footer of v1/v2 directory/networkstatus
- * footers. */
-static token_rule_t dir_footer_token_table[] = {
- T1("directory-signature", K_DIRECTORY_SIGNATURE, EQ(1), NEED_OBJ ),
- END_OF_TABLE
-};
-
-/** List of tokens recognized in v1 directory headers/footers. */
-static token_rule_t dir_token_table[] = {
- /* don't enforce counts; this is obsolete. */
- T( "network-status", K_NETWORK_STATUS, NO_ARGS, NO_OBJ ),
- T( "directory-signature", K_DIRECTORY_SIGNATURE, ARGS, NEED_OBJ ),
- T( "recommended-software",K_RECOMMENDED_SOFTWARE,CONCAT_ARGS, NO_OBJ ),
- T( "signed-directory", K_SIGNED_DIRECTORY, NO_ARGS, NO_OBJ ),
-
- T( "running-routers", K_RUNNING_ROUTERS, ARGS, NO_OBJ ),
- T( "router-status", K_ROUTER_STATUS, ARGS, NO_OBJ ),
- T( "published", K_PUBLISHED, CONCAT_ARGS, NO_OBJ ),
- T( "opt", K_OPT, CONCAT_ARGS, OBJ_OK ),
- T( "contact", K_CONTACT, CONCAT_ARGS, NO_OBJ ),
- T( "dir-signing-key", K_DIR_SIGNING_KEY, ARGS, OBJ_OK ),
- T( "fingerprint", K_FINGERPRINT, CONCAT_ARGS, NO_OBJ ),
-
- END_OF_TABLE
-};
-
/** List of tokens common to V3 authority certificates and V3 consensuses. */
#define CERTIFICATE_MEMBERS \
T1("dir-key-certificate-version", K_DIR_KEY_CERTIFICATE_VERSION, \
@@ -398,7 +361,7 @@ static token_rule_t dir_token_table[] = {
T1("dir-key-published",K_DIR_KEY_PUBLISHED, CONCAT_ARGS, NO_OBJ), \
T1("dir-key-expires", K_DIR_KEY_EXPIRES, CONCAT_ARGS, NO_OBJ), \
T1("dir-signing-key", K_DIR_SIGNING_KEY, NO_ARGS, NEED_KEY ),\
- T01("dir-key-crosscert", K_DIR_KEY_CROSSCERT, NO_ARGS, NEED_OBJ ),\
+ T1("dir-key-crosscert", K_DIR_KEY_CROSSCERT, NO_ARGS, NEED_OBJ ),\
T1("dir-key-certification", K_DIR_KEY_CERTIFICATION, \
NO_ARGS, NEED_OBJ), \
T01("dir-address", K_DIR_ADDRESS, GE(1), NO_OBJ),
@@ -498,8 +461,7 @@ static token_rule_t networkstatus_consensus_token_table[] = {
END_OF_TABLE
};
-/** List of tokens recognized in the footer of v1/v2 directory/networkstatus
- * footers. */
+/** List of tokens recognized in the footer of v1 directory footers. */
static token_rule_t networkstatus_vote_footer_token_table[] = {
T01("directory-footer", K_DIRECTORY_FOOTER, NO_ARGS, NO_OBJ ),
T01("bandwidth-weights", K_BW_WEIGHTS, ARGS, NO_OBJ ),
@@ -522,8 +484,11 @@ static token_rule_t networkstatus_detached_signature_token_table[] = {
/** List of tokens recognized in microdescriptors */
static token_rule_t microdesc_token_table[] = {
T1_START("onion-key", K_ONION_KEY, NO_ARGS, NEED_KEY_1024),
+ T01("ntor-onion-key", K_ONION_KEY_NTOR, GE(1), NO_OBJ ),
+ T0N("a", K_A, GE(1), NO_OBJ ),
T01("family", K_FAMILY, ARGS, NO_OBJ ),
T01("p", K_P, CONCAT_ARGS, NO_OBJ ),
+ T01("p6", K_P6, CONCAT_ARGS, NO_OBJ ),
A01("@last-listed", A_LAST_LISTED, CONCAT_ARGS, NO_OBJ ),
END_OF_TABLE
};
@@ -532,7 +497,8 @@ static token_rule_t microdesc_token_table[] = {
/* static function prototypes */
static int router_add_exit_policy(routerinfo_t *router,directory_token_t *tok);
-static addr_policy_t *router_parse_addr_policy(directory_token_t *tok);
+static addr_policy_t *router_parse_addr_policy(directory_token_t *tok,
+ unsigned fmt_flags);
static addr_policy_t *router_parse_addr_policy_private(directory_token_t *tok);
static int router_get_hash_impl(const char *s, size_t s_len, char *digest,
@@ -546,10 +512,10 @@ static int router_get_hashes_impl(const char *s, size_t s_len,
static void token_clear(directory_token_t *tok);
static smartlist_t *find_all_by_keyword(smartlist_t *s, directory_keyword k);
static smartlist_t *find_all_exitpolicy(smartlist_t *s);
-static directory_token_t *_find_by_keyword(smartlist_t *s,
+static directory_token_t *find_by_keyword_(smartlist_t *s,
directory_keyword keyword,
const char *keyword_str);
-#define find_by_keyword(s, keyword) _find_by_keyword((s), (keyword), #keyword)
+#define find_by_keyword(s, keyword) find_by_keyword_((s), (keyword), #keyword)
static directory_token_t *find_opt_by_keyword(smartlist_t *s,
directory_keyword keyword);
@@ -573,7 +539,6 @@ static int check_signature_token(const char *digest,
crypto_pk_t *pkey,
int flags,
const char *doctype);
-static crypto_pk_t *find_dir_signing_key(const char *str, const char *eos);
#undef DEBUG_AREA_ALLOC
@@ -607,7 +572,7 @@ dump_desc(const char *desc, const char *type)
char *content = tor_malloc_zero(filelen);
tor_snprintf(content, filelen, "Unable to parse descriptor of type "
"%s:\n%s", type, desc);
- write_str_to_file(debugfile, content, 0);
+ write_str_to_file(debugfile, content, 1);
log_info(LD_DIR, "Unable to parse descriptor of type %s. See file "
"unparseable-desc in data directory for details.", type);
tor_free(content);
@@ -638,28 +603,6 @@ router_get_router_hash(const char *s, size_t s_len, char *digest)
DIGEST_SHA1);
}
-/** Set <b>digest</b> to the SHA-1 digest of the hash of the running-routers
- * string in <b>s</b>. Return 0 on success, -1 on failure.
- */
-int
-router_get_runningrouters_hash(const char *s, char *digest)
-{
- return router_get_hash_impl(s, strlen(s), digest,
- "network-status","\ndirectory-signature", '\n',
- DIGEST_SHA1);
-}
-
-/** Set <b>digest</b> to the SHA-1 digest of the hash of the network-status
- * string in <b>s</b>. Return 0 on success, -1 on failure. */
-int
-router_get_networkstatus_v2_hash(const char *s, char *digest)
-{
- return router_get_hash_impl(s, strlen(s), digest,
- "network-status-version","\ndirectory-signature",
- '\n',
- DIGEST_SHA1);
-}
-
/** Set <b>digests</b> to all the digests of the consensus document in
* <b>s</b> */
int
@@ -671,18 +614,6 @@ router_get_networkstatus_v3_hashes(const char *s, digests_t *digests)
' ');
}
-/** Set <b>digest</b> to the SHA-1 digest of the hash of the network-status
- * string in <b>s</b>. Return 0 on success, -1 on failure. */
-int
-router_get_networkstatus_v3_hash(const char *s, char *digest,
- digest_algorithm_t alg)
-{
- return router_get_hash_impl(s, strlen(s), digest,
- "network-status-version",
- "\ndirectory-signature",
- ' ', alg);
-}
-
/** Set <b>digest</b> to the SHA-1 digest of the hash of the <b>s_len</b>-byte
* extrainfo string at <b>s</b>. Return 0 on success, -1 on failure. */
int
@@ -693,19 +624,23 @@ router_get_extrainfo_hash(const char *s, size_t s_len, char *digest)
}
/** Helper: used to generate signatures for routers, directories and
- * network-status objects. Given a digest in <b>digest</b> and a secret
- * <b>private_key</b>, generate an PKCS1-padded signature, BASE64-encode it,
- * surround it with -----BEGIN/END----- pairs, and write it to the
- * <b>buf_len</b>-byte buffer at <b>buf</b>. Return 0 on success, -1 on
- * failure.
+ * network-status objects. Given a <b>digest_len</b>-byte digest in
+ * <b>digest</b> and a secret <b>private_key</b>, generate an PKCS1-padded
+ * signature, BASE64-encode it, surround it with -----BEGIN/END----- pairs,
+ * and return the new signature on success or NULL on failure.
*/
-int
-router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
- size_t digest_len, crypto_pk_t *private_key)
+char *
+router_get_dirobj_signature(const char *digest,
+ size_t digest_len,
+ crypto_pk_t *private_key)
{
char *signature;
size_t i, keysize;
int siglen;
+ char *buf = NULL;
+ size_t buf_len;
+ /* overestimate of BEGIN/END lines total len. */
+#define BEGIN_END_OVERHEAD_LEN 64
keysize = crypto_pk_keysize(private_key);
signature = tor_malloc(keysize);
@@ -715,7 +650,12 @@ router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
log_warn(LD_BUG,"Couldn't sign digest.");
goto err;
}
- if (strlcat(buf, "-----BEGIN SIGNATURE-----\n", buf_len) >= buf_len)
+
+ /* The *2 here is a ridiculous overestimate of base-64 overhead. */
+ buf_len = (siglen * 2) + BEGIN_END_OVERHEAD_LEN;
+ buf = tor_malloc(buf_len);
+
+ if (strlcpy(buf, "-----BEGIN SIGNATURE-----\n", buf_len) >= buf_len)
goto truncated;
i = strlen(buf);
@@ -728,13 +668,43 @@ router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
goto truncated;
tor_free(signature);
- return 0;
+ return buf;
truncated:
log_warn(LD_BUG,"tried to exceed string length.");
err:
tor_free(signature);
- return -1;
+ tor_free(buf);
+ return NULL;
+}
+
+/** Helper: used to generate signatures for routers, directories and
+ * network-status objects. Given a digest in <b>digest</b> and a secret
+ * <b>private_key</b>, generate a PKCS1-padded signature, BASE64-encode it,
+ * surround it with -----BEGIN/END----- pairs, and write it to the
+ * <b>buf_len</b>-byte buffer at <b>buf</b>. Return 0 on success, -1 on
+ * failure.
+ */
+int
+router_append_dirobj_signature(char *buf, size_t buf_len, const char *digest,
+ size_t digest_len, crypto_pk_t *private_key)
+{
+ size_t sig_len, s_len;
+ char *sig = router_get_dirobj_signature(digest, digest_len, private_key);
+ if (!sig) {
+ log_warn(LD_BUG, "No signature generated");
+ return -1;
+ }
+ sig_len = strlen(sig);
+ s_len = strlen(buf);
+ if (sig_len + s_len + 1 > buf_len) {
+ log_warn(LD_BUG, "Not enough room for signature");
+ tor_free(sig);
+ return -1;
+ }
+ memcpy(buf+s_len, sig, sig_len+1);
+ tor_free(sig);
+ return 0;
}
/** Return VS_RECOMMENDED if <b>myversion</b> is contained in
@@ -816,218 +786,6 @@ tor_version_is_obsolete(const char *myversion, const char *versionlist)
return ret;
}
-/** Read a signed directory from <b>str</b>. If it's well-formed, return 0.
- * Otherwise, return -1. If we're a directory cache, cache it.
- */
-int
-router_parse_directory(const char *str)
-{
- directory_token_t *tok;
- char digest[DIGEST_LEN];
- time_t published_on;
- int r;
- const char *end, *cp, *str_dup = str;
- smartlist_t *tokens = NULL;
- crypto_pk_t *declared_key = NULL;
- memarea_t *area = memarea_new();
-
- /* XXXX This could be simplified a lot, but it will all go away
- * once pre-0.1.1.8 is obsolete, and for now it's better not to
- * touch it. */
-
- if (router_get_dir_hash(str, digest)) {
- log_warn(LD_DIR, "Unable to compute digest of directory");
- goto err;
- }
- log_debug(LD_DIR,"Received directory hashes to %s",hex_str(digest,4));
-
- /* Check signature first, before we try to tokenize. */
- cp = str;
- while (cp && (end = strstr(cp+1, "\ndirectory-signature")))
- cp = end;
- if (cp == str || !cp) {
- log_warn(LD_DIR, "No signature found on directory."); goto err;
- }
- ++cp;
- tokens = smartlist_new();
- if (tokenize_string(area,cp,strchr(cp,'\0'),tokens,dir_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing directory signature"); goto err;
- }
- if (smartlist_len(tokens) != 1) {
- log_warn(LD_DIR, "Unexpected number of tokens in signature"); goto err;
- }
- tok=smartlist_get(tokens,0);
- if (tok->tp != K_DIRECTORY_SIGNATURE) {
- log_warn(LD_DIR,"Expected a single directory signature"); goto err;
- }
- declared_key = find_dir_signing_key(str, str+strlen(str));
- note_crypto_pk_op(VERIFY_DIR);
- if (check_signature_token(digest, DIGEST_LEN, tok, declared_key,
- CST_CHECK_AUTHORITY, "directory")<0)
- goto err;
-
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_clear(tokens);
- memarea_clear(area);
-
- /* Now try to parse the first part of the directory. */
- if ((end = strstr(str,"\nrouter "))) {
- ++end;
- } else if ((end = strstr(str, "\ndirectory-signature"))) {
- ++end;
- } else {
- end = str + strlen(str);
- }
-
- if (tokenize_string(area,str,end,tokens,dir_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing directory"); goto err;
- }
-
- tok = find_by_keyword(tokens, K_PUBLISHED);
- tor_assert(tok->n_args == 1);
-
- if (parse_iso_time(tok->args[0], &published_on) < 0) {
- goto err;
- }
-
- /* Now that we know the signature is okay, and we have a
- * publication time, cache the directory. */
- if (directory_caches_v1_dir_info(get_options()) &&
- !authdir_mode_v1(get_options()))
- dirserv_set_cached_directory(str, published_on, 0);
-
- r = 0;
- goto done;
- err:
- dump_desc(str_dup, "v1 directory");
- r = -1;
- done:
- if (declared_key) crypto_pk_free(declared_key);
- if (tokens) {
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
- }
- if (area) {
- DUMP_AREA(area, "v1 directory");
- memarea_drop_all(area);
- }
- return r;
-}
-
-/** Read a signed router status statement from <b>str</b>. If it's
- * well-formed, return 0. Otherwise, return -1. If we're a directory cache,
- * cache it.*/
-int
-router_parse_runningrouters(const char *str)
-{
- char digest[DIGEST_LEN];
- directory_token_t *tok;
- time_t published_on;
- int r = -1;
- crypto_pk_t *declared_key = NULL;
- smartlist_t *tokens = NULL;
- const char *eos = str + strlen(str), *str_dup = str;
- memarea_t *area = NULL;
-
- if (router_get_runningrouters_hash(str, digest)) {
- log_warn(LD_DIR, "Unable to compute digest of running-routers");
- goto err;
- }
- area = memarea_new();
- tokens = smartlist_new();
- if (tokenize_string(area,str,eos,tokens,dir_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing running-routers"); goto err;
- }
- tok = smartlist_get(tokens,0);
- if (tok->tp != K_NETWORK_STATUS) {
- log_warn(LD_DIR, "Network-status starts with wrong token");
- goto err;
- }
-
- tok = find_by_keyword(tokens, K_PUBLISHED);
- tor_assert(tok->n_args == 1);
- if (parse_iso_time(tok->args[0], &published_on) < 0) {
- goto err;
- }
- if (!(tok = find_opt_by_keyword(tokens, K_DIRECTORY_SIGNATURE))) {
- log_warn(LD_DIR, "Missing signature on running-routers");
- goto err;
- }
- declared_key = find_dir_signing_key(str, eos);
- note_crypto_pk_op(VERIFY_DIR);
- if (check_signature_token(digest, DIGEST_LEN, tok, declared_key,
- CST_CHECK_AUTHORITY, "running-routers")
- < 0)
- goto err;
-
- /* Now that we know the signature is okay, and we have a
- * publication time, cache the list. */
- if (get_options()->DirPort_set && !authdir_mode_v1(get_options()))
- dirserv_set_cached_directory(str, published_on, 1);
-
- r = 0;
- err:
- dump_desc(str_dup, "v1 running-routers");
- if (declared_key) crypto_pk_free(declared_key);
- if (tokens) {
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
- }
- if (area) {
- DUMP_AREA(area, "v1 running-routers");
- memarea_drop_all(area);
- }
- return r;
-}
-
-/** Given a directory or running-routers string in <b>str</b>, try to
- * find the its dir-signing-key token (if any). If this token is
- * present, extract and return the key. Return NULL on failure. */
-static crypto_pk_t *
-find_dir_signing_key(const char *str, const char *eos)
-{
- const char *cp;
- directory_token_t *tok;
- crypto_pk_t *key = NULL;
- memarea_t *area = NULL;
- tor_assert(str);
- tor_assert(eos);
-
- /* Is there a dir-signing-key in the directory? */
- cp = tor_memstr(str, eos-str, "\nopt dir-signing-key");
- if (!cp)
- cp = tor_memstr(str, eos-str, "\ndir-signing-key");
- if (!cp)
- return NULL;
- ++cp; /* Now cp points to the start of the token. */
-
- area = memarea_new();
- tok = get_next_token(area, &cp, eos, dir_token_table);
- if (!tok) {
- log_warn(LD_DIR, "Unparseable dir-signing-key token");
- goto done;
- }
- if (tok->tp != K_DIR_SIGNING_KEY) {
- log_warn(LD_DIR, "Dir-signing-key token did not parse as expected");
- goto done;
- }
-
- if (tok->key) {
- key = tok->key;
- tok->key = NULL; /* steal reference. */
- } else {
- log_warn(LD_DIR, "Dir-signing-key token contained no key");
- }
-
- done:
- if (tok) token_clear(tok);
- if (area) {
- DUMP_AREA(area, "dir-signing-key token");
- memarea_drop_all(area);
- }
- return key;
-}
-
/** Return true iff <b>key</b> is allowed to sign directories.
*/
static int
@@ -1250,13 +1008,50 @@ dump_distinct_digest_count(int severity)
#ifdef COUNT_DISTINCT_DIGESTS
if (!verified_digests)
verified_digests = digestmap_new();
- log(severity, LD_GENERAL, "%d *distinct* router digests verified",
+ tor_log(severity, LD_GENERAL, "%d *distinct* router digests verified",
digestmap_size(verified_digests));
#else
(void)severity; /* suppress "unused parameter" warning */
#endif
}
+/** Try to find an IPv6 OR port in <b>list</b> of directory_token_t's
+ * with at least one argument (use GE(1) in setup). If found, store
+ * address and port number to <b>addr_out</b> and
+ * <b>port_out</b>. Return number of OR ports found. */
+static int
+find_single_ipv6_orport(const smartlist_t *list,
+ tor_addr_t *addr_out,
+ uint16_t *port_out)
+{
+ int ret = 0;
+ tor_assert(list != NULL);
+ tor_assert(addr_out != NULL);
+ tor_assert(port_out != NULL);
+
+ SMARTLIST_FOREACH_BEGIN(list, directory_token_t *, t) {
+ tor_addr_t a;
+ maskbits_t bits;
+ uint16_t port_min, port_max;
+ tor_assert(t->n_args >= 1);
+ /* XXXX Prop186 the full spec allows much more than this. */
+ if (tor_addr_parse_mask_ports(t->args[0], 0,
+ &a, &bits, &port_min,
+ &port_max) == AF_INET6 &&
+ bits == 128 &&
+ port_min == port_max) {
+ /* Okay, this is one we can understand. Use it and ignore
+ any potential more addresses in list. */
+ tor_addr_copy(addr_out, &a);
+ *port_out = port_min;
+ ret = 1;
+ break;
+ }
+ } SMARTLIST_FOREACH_END(t);
+
+ return ret;
+}
+
/** Helper function: reads a single router entry from *<b>s</b> ...
* *<b>end</b>. Mallocs a new router and returns it if all goes well, else
* returns NULL. If <b>cache_copy</b> is true, duplicate the contents of
@@ -1390,8 +1185,7 @@ router_parse_entry_from_string(const char *s, const char *end,
log_warn(LD_DIR,"Router nickname is invalid");
goto err;
}
- router->address = tor_strdup(tok->args[1]);
- if (!tor_inet_aton(router->address, &in)) {
+ if (!tor_inet_aton(tok->args[1], &in)) {
log_warn(LD_DIR,"Router address is not an IP address.");
goto err;
}
@@ -1471,6 +1265,17 @@ router_parse_entry_from_string(const char *s, const char *end,
router->onion_pkey = tok->key;
tok->key = NULL; /* Prevent free */
+ if ((tok = find_opt_by_keyword(tokens, K_ONION_KEY_NTOR))) {
+ curve25519_public_key_t k;
+ tor_assert(tok->n_args >= 1);
+ if (curve25519_public_from_base64(&k, tok->args[0]) < 0) {
+ log_warn(LD_DIR, "Bogus ntor-onion-key in routerinfo");
+ goto err;
+ }
+ router->onion_curve25519_pkey =
+ tor_memdup(&k, sizeof(curve25519_public_key_t));
+ }
+
tok = find_by_keyword(tokens, K_SIGNING_KEY);
router->identity_pkey = tok->key;
tok->key = NULL; /* Prevent free */
@@ -1513,21 +1318,8 @@ router_parse_entry_from_string(const char *s, const char *end,
{
smartlist_t *or_addresses = find_all_by_keyword(tokens, K_OR_ADDRESS);
if (or_addresses) {
- SMARTLIST_FOREACH_BEGIN(or_addresses, directory_token_t *, t) {
- tor_addr_t a;
- maskbits_t bits;
- uint16_t port_min, port_max;
- /* XXXX Prop186 the full spec allows much more than this. */
- if (tor_addr_parse_mask_ports(t->args[0], &a, &bits, &port_min,
- &port_max) == AF_INET6 &&
- bits == 128 &&
- port_min == port_max) {
- /* Okay, this is one we can understand. */
- tor_addr_copy(&router->ipv6_addr, &a);
- router->ipv6_orport = port_min;
- break;
- }
- } SMARTLIST_FOREACH_END(t);
+ find_single_ipv6_orport(or_addresses, &router->ipv6_addr,
+ &router->ipv6_orport);
smartlist_free(or_addresses);
}
}
@@ -1542,7 +1334,18 @@ router_parse_entry_from_string(const char *s, const char *end,
goto err;
});
policy_expand_private(&router->exit_policy);
- if (policy_is_reject_star(router->exit_policy))
+
+ if ((tok = find_opt_by_keyword(tokens, K_IPV6_POLICY)) && tok->n_args) {
+ router->ipv6_exit_policy = parse_short_policy(tok->args[0]);
+ if (! router->ipv6_exit_policy) {
+ log_warn(LD_DIR , "Error in ipv6-policy %s", escaped(tok->args[0]));
+ goto err;
+ }
+ }
+
+ if (policy_is_reject_star(router->exit_policy, AF_INET) &&
+ (!router->ipv6_exit_policy ||
+ short_policy_is_reject_star(router->ipv6_exit_policy)))
router->policy_is_reject_star = 1;
if ((tok = find_opt_by_keyword(tokens, K_FAMILY)) && tok->n_args) {
@@ -1669,7 +1472,7 @@ extrainfo_parse_entry_from_string(const char *s, const char *end,
extrainfo = tor_malloc_zero(sizeof(extrainfo_t));
extrainfo->cache_info.is_extrainfo = 1;
if (cache_copy)
- extrainfo->cache_info.signed_descriptor_body = tor_strndup(s, end-s);
+ extrainfo->cache_info.signed_descriptor_body = tor_memdup_nulterm(s,end-s);
extrainfo->cache_info.signed_descriptor_len = end-s;
memcpy(extrainfo->cache_info.signed_descriptor_digest, digest, DIGEST_LEN);
@@ -1877,7 +1680,6 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
log_debug(LD_DIR, "We already checked the signature on this "
"certificate; no need to do so again.");
found = 1;
- cert->is_cross_certified = old_cert->is_cross_certified;
}
}
if (!found) {
@@ -1886,18 +1688,14 @@ authority_cert_parse_from_string(const char *s, const char **end_of_string)
goto err;
}
- if ((tok = find_opt_by_keyword(tokens, K_DIR_KEY_CROSSCERT))) {
- /* XXXX Once all authorities generate cross-certified certificates,
- * make this field mandatory. */
- if (check_signature_token(cert->cache_info.identity_digest,
- DIGEST_LEN,
- tok,
- cert->signing_key,
- CST_NO_CHECK_OBJTYPE,
- "key cross-certification")) {
- goto err;
- }
- cert->is_cross_certified = 1;
+ tok = find_by_keyword(tokens, K_DIR_KEY_CROSSCERT);
+ if (check_signature_token(cert->cache_info.identity_digest,
+ DIGEST_LEN,
+ tok,
+ cert->signing_key,
+ CST_NO_CHECK_OBJTYPE,
+ "key cross-certification")) {
+ goto err;
}
}
@@ -2060,6 +1858,14 @@ routerstatus_parse_entry_from_string(memarea_t *area,
rs->dir_port = (uint16_t) tor_parse_long(tok->args[7+offset],
10,0,65535,NULL,NULL);
+ {
+ smartlist_t *a_lines = find_all_by_keyword(tokens, K_A);
+ if (a_lines) {
+ find_single_ipv6_orport(a_lines, &rs->ipv6_addr, &rs->ipv6_orport);
+ smartlist_free(a_lines);
+ }
+ }
+
tok = find_opt_by_keyword(tokens, K_S);
if (tok && vote) {
int i;
@@ -2067,7 +1873,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
for (i=0; i < tok->n_args; ++i) {
int p = smartlist_string_pos(vote->known_flags, tok->args[i]);
if (p >= 0) {
- vote_rs->flags |= (1<<p);
+ vote_rs->flags |= (U64_LITERAL(1)<<p);
} else {
log_warn(LD_DIR, "Flags line had a flag %s not listed in known_flags.",
escaped(tok->args[i]));
@@ -2089,8 +1895,6 @@ routerstatus_parse_entry_from_string(memarea_t *area,
rs->is_named = 1;
else if (!strcmp(tok->args[i], "Valid"))
rs->is_valid = 1;
- else if (!strcmp(tok->args[i], "V2Dir"))
- rs->is_v2_dir = 1;
else if (!strcmp(tok->args[i], "Guard"))
rs->is_possible_guard = 1;
else if (!strcmp(tok->args[i], "BadExit"))
@@ -2112,24 +1916,15 @@ routerstatus_parse_entry_from_string(memarea_t *area,
tor_assert(tok->n_args == 1);
rs->version_known = 1;
if (strcmpstart(tok->args[0], "Tor ")) {
- rs->version_supports_begindir = 1;
- rs->version_supports_extrainfo_upload = 1;
- rs->version_supports_conditional_consensus = 1;
rs->version_supports_microdesc_cache = 1;
rs->version_supports_optimistic_data = 1;
} else {
- rs->version_supports_begindir =
- tor_version_as_new_as(tok->args[0], "0.2.0.1-alpha");
- rs->version_supports_extrainfo_upload =
- tor_version_as_new_as(tok->args[0], "0.2.0.0-alpha-dev (r10070)");
- rs->version_supports_v3_dir =
- tor_version_as_new_as(tok->args[0], "0.2.0.8-alpha");
- rs->version_supports_conditional_consensus =
- tor_version_as_new_as(tok->args[0], "0.2.1.1-alpha");
rs->version_supports_microdesc_cache =
tor_version_supports_microdescriptors(tok->args[0]);
rs->version_supports_optimistic_data =
tor_version_as_new_as(tok->args[0], "0.2.3.1-alpha");
+ rs->version_supports_extend2_cells =
+ tor_version_as_new_as(tok->args[0], "0.2.4.8-alpha");
}
if (vote_rs) {
vote_rs->version = tor_strdup(tok->args[0]);
@@ -2142,17 +1937,18 @@ routerstatus_parse_entry_from_string(memarea_t *area,
for (i=0; i < tok->n_args; ++i) {
if (!strcmpstart(tok->args[i], "Bandwidth=")) {
int ok;
- rs->bandwidth = (uint32_t)tor_parse_ulong(strchr(tok->args[i], '=')+1,
- 10, 0, UINT32_MAX,
- &ok, NULL);
+ rs->bandwidth_kb =
+ (uint32_t)tor_parse_ulong(strchr(tok->args[i], '=')+1,
+ 10, 0, UINT32_MAX,
+ &ok, NULL);
if (!ok) {
log_warn(LD_DIR, "Invalid Bandwidth %s", escaped(tok->args[i]));
goto err;
}
rs->has_bandwidth = 1;
- } else if (!strcmpstart(tok->args[i], "Measured=")) {
+ } else if (!strcmpstart(tok->args[i], "Measured=") && vote_rs) {
int ok;
- rs->measured_bw =
+ vote_rs->measured_bw_kb =
(uint32_t)tor_parse_ulong(strchr(tok->args[i], '=')+1,
10, 0, UINT32_MAX, &ok, NULL);
if (!ok) {
@@ -2160,7 +1956,10 @@ routerstatus_parse_entry_from_string(memarea_t *area,
escaped(tok->args[i]));
goto err;
}
- rs->has_measured_bw = 1;
+ vote_rs->has_measured_bw = 1;
+ vote->has_measured_bws = 1;
+ } else if (!strcmpstart(tok->args[i], "Unmeasured=1")) {
+ rs->bw_is_unmeasured = 1;
}
}
}
@@ -2203,7 +2002,7 @@ routerstatus_parse_entry_from_string(memarea_t *area,
}
} else {
log_info(LD_BUG, "Found an entry in networkstatus with no "
- "microdescriptor digest. (Router %s=%s at %s:%d.)",
+ "microdescriptor digest. (Router %s ($%s) at %s:%d.)",
rs->nickname, hex_str(rs->identity_digest, DIGEST_LEN),
fmt_addr32(rs->addr), rs->or_port);
}
@@ -2230,199 +2029,17 @@ routerstatus_parse_entry_from_string(memarea_t *area,
return rs;
}
-/** Helper to sort a smartlist of pointers to routerstatus_t */
int
-compare_routerstatus_entries(const void **_a, const void **_b)
-{
- const routerstatus_t *a = *_a, *b = *_b;
- return fast_memcmp(a->identity_digest, b->identity_digest, DIGEST_LEN);
-}
-
-/** Helper: used in call to _smartlist_uniq to clear out duplicate entries. */
-static void
-_free_duplicate_routerstatus_entry(void *e)
+compare_vote_routerstatus_entries(const void **_a, const void **_b)
{
- log_warn(LD_DIR,
- "Network-status has two entries for the same router. "
- "Dropping one.");
- routerstatus_free(e);
-}
-
-/** Given a v2 network-status object in <b>s</b>, try to
- * parse it and return the result. Return NULL on failure. Check the
- * signature of the network status, but do not (yet) check the signing key for
- * authority.
- */
-networkstatus_v2_t *
-networkstatus_v2_parse_from_string(const char *s)
-{
- const char *eos, *s_dup = s;
- smartlist_t *tokens = smartlist_new();
- smartlist_t *footer_tokens = smartlist_new();
- networkstatus_v2_t *ns = NULL;
- char ns_digest[DIGEST_LEN];
- char tmp_digest[DIGEST_LEN];
- struct in_addr in;
- directory_token_t *tok;
- int i;
- memarea_t *area = NULL;
-
- if (router_get_networkstatus_v2_hash(s, ns_digest)) {
- log_warn(LD_DIR, "Unable to compute digest of network-status");
- goto err;
- }
-
- area = memarea_new();
- eos = find_start_of_next_routerstatus(s);
- if (tokenize_string(area, s, eos, tokens, netstatus_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing network-status header.");
- goto err;
- }
- ns = tor_malloc_zero(sizeof(networkstatus_v2_t));
- memcpy(ns->networkstatus_digest, ns_digest, DIGEST_LEN);
-
- tok = find_by_keyword(tokens, K_NETWORK_STATUS_VERSION);
- tor_assert(tok->n_args >= 1);
- if (strcmp(tok->args[0], "2")) {
- log_warn(LD_BUG, "Got a non-v2 networkstatus. Version was "
- "%s", escaped(tok->args[0]));
- goto err;
- }
-
- tok = find_by_keyword(tokens, K_DIR_SOURCE);
- tor_assert(tok->n_args >= 3);
- ns->source_address = tor_strdup(tok->args[0]);
- if (tor_inet_aton(tok->args[1], &in) == 0) {
- log_warn(LD_DIR, "Error parsing network-status source address %s",
- escaped(tok->args[1]));
- goto err;
- }
- ns->source_addr = ntohl(in.s_addr);
- ns->source_dirport =
- (uint16_t) tor_parse_long(tok->args[2],10,0,65535,NULL,NULL);
- if (ns->source_dirport == 0) {
- log_warn(LD_DIR, "Directory source without dirport; skipping.");
- goto err;
- }
-
- tok = find_by_keyword(tokens, K_FINGERPRINT);
- tor_assert(tok->n_args);
- if (base16_decode(ns->identity_digest, DIGEST_LEN, tok->args[0],
- strlen(tok->args[0]))) {
- log_warn(LD_DIR, "Couldn't decode networkstatus fingerprint %s",
- escaped(tok->args[0]));
- goto err;
- }
-
- if ((tok = find_opt_by_keyword(tokens, K_CONTACT))) {
- tor_assert(tok->n_args);
- ns->contact = tor_strdup(tok->args[0]);
- }
-
- tok = find_by_keyword(tokens, K_DIR_SIGNING_KEY);
- tor_assert(tok->key);
- ns->signing_key = tok->key;
- tok->key = NULL;
-
- if (crypto_pk_get_digest(ns->signing_key, tmp_digest)<0) {
- log_warn(LD_DIR, "Couldn't compute signing key digest");
- goto err;
- }
- if (tor_memneq(tmp_digest, ns->identity_digest, DIGEST_LEN)) {
- log_warn(LD_DIR,
- "network-status fingerprint did not match dir-signing-key");
- goto err;
- }
-
- if ((tok = find_opt_by_keyword(tokens, K_DIR_OPTIONS))) {
- for (i=0; i < tok->n_args; ++i) {
- if (!strcmp(tok->args[i], "Names"))
- ns->binds_names = 1;
- if (!strcmp(tok->args[i], "Versions"))
- ns->recommends_versions = 1;
- if (!strcmp(tok->args[i], "BadExits"))
- ns->lists_bad_exits = 1;
- if (!strcmp(tok->args[i], "BadDirectories"))
- ns->lists_bad_directories = 1;
- }
- }
-
- if (ns->recommends_versions) {
- if (!(tok = find_opt_by_keyword(tokens, K_CLIENT_VERSIONS))) {
- log_warn(LD_DIR, "Missing client-versions on versioning directory");
- goto err;
- }
- ns->client_versions = tor_strdup(tok->args[0]);
-
- if (!(tok = find_opt_by_keyword(tokens, K_SERVER_VERSIONS)) ||
- tok->n_args<1) {
- log_warn(LD_DIR, "Missing server-versions on versioning directory");
- goto err;
- }
- ns->server_versions = tor_strdup(tok->args[0]);
- }
-
- tok = find_by_keyword(tokens, K_PUBLISHED);
- tor_assert(tok->n_args == 1);
- if (parse_iso_time(tok->args[0], &ns->published_on) < 0) {
- goto err;
- }
-
- ns->entries = smartlist_new();
- s = eos;
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_clear(tokens);
- memarea_clear(area);
- while (!strcmpstart(s, "r ")) {
- routerstatus_t *rs;
- if ((rs = routerstatus_parse_entry_from_string(area, &s, tokens,
- NULL, NULL, 0, 0)))
- smartlist_add(ns->entries, rs);
- }
- smartlist_sort(ns->entries, compare_routerstatus_entries);
- smartlist_uniq(ns->entries, compare_routerstatus_entries,
- _free_duplicate_routerstatus_entry);
-
- if (tokenize_string(area,s, NULL, footer_tokens, dir_footer_token_table,0)) {
- log_warn(LD_DIR, "Error tokenizing network-status footer.");
- goto err;
- }
- if (smartlist_len(footer_tokens) < 1) {
- log_warn(LD_DIR, "Too few items in network-status footer.");
- goto err;
- }
- tok = smartlist_get(footer_tokens, smartlist_len(footer_tokens)-1);
- if (tok->tp != K_DIRECTORY_SIGNATURE) {
- log_warn(LD_DIR,
- "Expected network-status footer to end with a signature.");
- goto err;
- }
-
- note_crypto_pk_op(VERIFY_DIR);
- if (check_signature_token(ns_digest, DIGEST_LEN, tok, ns->signing_key, 0,
- "network-status") < 0)
- goto err;
-
- goto done;
- err:
- dump_desc(s_dup, "v2 networkstatus");
- networkstatus_v2_free(ns);
- ns = NULL;
- done:
- SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(tokens);
- SMARTLIST_FOREACH(footer_tokens, directory_token_t *, t, token_clear(t));
- smartlist_free(footer_tokens);
- if (area) {
- DUMP_AREA(area, "v2 networkstatus");
- memarea_drop_all(area);
- }
- return ns;
+ const vote_routerstatus_t *a = *_a, *b = *_b;
+ return fast_memcmp(a->status.identity_digest, b->status.identity_digest,
+ DIGEST_LEN);
}
/** Verify the bandwidth weights of a network status document */
int
-networkstatus_verify_bw_weights(networkstatus_t *ns)
+networkstatus_verify_bw_weights(networkstatus_t *ns, int consensus_method)
{
int64_t weight_scale;
int64_t G=0, M=0, E=0, D=0, T=0;
@@ -2431,7 +2048,7 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
const char *casename = NULL;
int valid = 1;
- weight_scale = circuit_build_times_get_bw_scale(ns);
+ weight_scale = networkstatus_get_weight_scale_param(ns);
Wgg = networkstatus_get_bw_weight(ns, "Wgg", -1);
Wgm = networkstatus_get_bw_weight(ns, "Wgm", -1);
Wgd = networkstatus_get_bw_weight(ns, "Wgd", -1);
@@ -2508,24 +2125,31 @@ networkstatus_verify_bw_weights(networkstatus_t *ns)
// Then, gather G, M, E, D, T to determine case
SMARTLIST_FOREACH_BEGIN(ns->routerstatus_list, routerstatus_t *, rs) {
+ int is_exit = 0;
+ if (consensus_method >= MIN_METHOD_TO_CUT_BADEXIT_WEIGHT) {
+ /* Bug #2203: Don't count bad exits as exits for balancing */
+ is_exit = rs->is_exit && !rs->is_bad_exit;
+ } else {
+ is_exit = rs->is_exit;
+ }
if (rs->has_bandwidth) {
- T += rs->bandwidth;
- if (rs->is_exit && rs->is_possible_guard) {
- D += rs->bandwidth;
- Gtotal += Wgd*rs->bandwidth;
- Mtotal += Wmd*rs->bandwidth;
- Etotal += Wed*rs->bandwidth;
- } else if (rs->is_exit) {
- E += rs->bandwidth;
- Mtotal += Wme*rs->bandwidth;
- Etotal += Wee*rs->bandwidth;
+ T += rs->bandwidth_kb;
+ if (is_exit && rs->is_possible_guard) {
+ D += rs->bandwidth_kb;
+ Gtotal += Wgd*rs->bandwidth_kb;
+ Mtotal += Wmd*rs->bandwidth_kb;
+ Etotal += Wed*rs->bandwidth_kb;
+ } else if (is_exit) {
+ E += rs->bandwidth_kb;
+ Mtotal += Wme*rs->bandwidth_kb;
+ Etotal += Wee*rs->bandwidth_kb;
} else if (rs->is_possible_guard) {
- G += rs->bandwidth;
- Gtotal += Wgg*rs->bandwidth;
- Mtotal += Wmg*rs->bandwidth;
+ G += rs->bandwidth_kb;
+ Gtotal += Wgg*rs->bandwidth_kb;
+ Mtotal += Wmg*rs->bandwidth_kb;
} else {
- M += rs->bandwidth;
- Mtotal += Wmm*rs->bandwidth;
+ M += rs->bandwidth_kb;
+ Mtotal += Wmm*rs->bandwidth_kb;
}
} else {
log_warn(LD_BUG, "Missing consensus bandwidth for router %s",
@@ -2981,6 +2605,16 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
log_warn(LD_DIR, "known-flags not in order");
goto err;
}
+ if (ns->type != NS_TYPE_CONSENSUS &&
+ smartlist_len(ns->known_flags) > MAX_KNOWN_FLAGS_IN_VOTE) {
+ /* If we allowed more than 64 flags in votes, then parsing them would make
+ * us invoke undefined behavior whenever we used 1<<flagnum to do a
+ * bit-shift. This is only for votes and opinions: consensus users don't
+ * care about flags they don't recognize, and so don't build a bitfield
+ * for them. */
+ log_warn(LD_DIR, "Too many known-flags in consensus vote or opinion");
+ goto err;
+ }
tok = find_opt_by_keyword(tokens, K_PARAMS);
if (tok) {
@@ -3053,6 +2687,14 @@ networkstatus_parse_vote_from_string(const char *s, const char **eos_out,
log_warn(LD_DIR,"Mismatch between identities in certificate and vote");
goto err;
}
+ if (ns->type != NS_TYPE_CONSENSUS) {
+ if (authority_cert_is_blacklisted(ns->cert)) {
+ log_warn(LD_DIR, "Rejecting vote signature made with blacklisted "
+ "signing key %s",
+ hex_str(ns->cert->signing_key_digest, DIGEST_LEN));
+ goto err;
+ }
+ }
voter->address = tor_strdup(tok->args[2]);
if (!tor_inet_aton(tok->args[3], &in)) {
log_warn(LD_DIR, "Error decoding IP address %s in network-status.",
@@ -3599,6 +3241,10 @@ networkstatus_parse_detached_signatures(const char *s, const char *eos)
/** Parse the addr policy in the string <b>s</b> and return it. If
* assume_action is nonnegative, then insert its action (ADDR_POLICY_ACCEPT or
* ADDR_POLICY_REJECT) for items that specify no action.
+ *
+ * The addr_policy_t returned by this function can have its address set to
+ * AF_UNSPEC for '*'. Use policy_expand_unspec() to turn this into a pair
+ * of AF_INET and AF_INET6 items.
*/
addr_policy_t *
router_parse_addr_policy_item_from_string(const char *s, int assume_action)
@@ -3628,7 +3274,7 @@ router_parse_addr_policy_item_from_string(const char *s, int assume_action)
eos = cp + strlen(cp);
area = memarea_new();
tok = get_next_token(area, &cp, eos, routerdesc_token_table);
- if (tok->tp == _ERR) {
+ if (tok->tp == ERR_) {
log_warn(LD_DIR, "Error reading address policy: %s", tok->error);
goto err;
}
@@ -3638,7 +3284,7 @@ router_parse_addr_policy_item_from_string(const char *s, int assume_action)
goto err;
}
- r = router_parse_addr_policy(tok);
+ r = router_parse_addr_policy(tok, TAPMP_EXTENDED_STAR);
goto done;
err:
r = NULL;
@@ -3657,7 +3303,7 @@ static int
router_add_exit_policy(routerinfo_t *router, directory_token_t *tok)
{
addr_policy_t *newe;
- newe = router_parse_addr_policy(tok);
+ newe = router_parse_addr_policy(tok, 0);
if (!newe)
return -1;
if (! router->exit_policy)
@@ -3682,7 +3328,7 @@ router_add_exit_policy(routerinfo_t *router, directory_token_t *tok)
/** Given a K_ACCEPT or K_REJECT token and a router, create and return
* a new exit_policy_t corresponding to the token. */
static addr_policy_t *
-router_parse_addr_policy(directory_token_t *tok)
+router_parse_addr_policy(directory_token_t *tok, unsigned fmt_flags)
{
addr_policy_t newe;
char *arg;
@@ -3704,7 +3350,7 @@ router_parse_addr_policy(directory_token_t *tok)
else
newe.policy_type = ADDR_POLICY_ACCEPT;
- if (tor_addr_parse_mask_ports(arg, &newe.addr, &newe.maskbits,
+ if (tor_addr_parse_mask_ports(arg, fmt_flags, &newe.addr, &newe.maskbits,
&newe.prt_min, &newe.prt_max) < 0) {
log_warn(LD_DIR,"Couldn't parse line %s. Dropping", escaped(arg));
return NULL;
@@ -3781,14 +3427,14 @@ token_clear(directory_token_t *tok)
STMT_BEGIN \
if (tok) token_clear(tok); \
tok = ALLOC_ZERO(sizeof(directory_token_t)); \
- tok->tp = _ERR; \
+ tok->tp = ERR_; \
tok->error = STRDUP(msg); \
goto done_tokenizing; \
STMT_END
/** Helper: make sure that the token <b>tok</b> with keyword <b>kwd</b> obeys
* the object syntax of <b>o_syn</b>. Allocate all storage in <b>area</b>.
- * Return <b>tok</b> on success, or a new _ERR token if the token didn't
+ * Return <b>tok</b> on success, or a new ERR_ token if the token didn't
* conform to the syntax we wanted.
**/
static INLINE directory_token_t *
@@ -3907,7 +3553,7 @@ get_next_token(memarea_t *area,
tor_assert(area);
tok = ALLOC_ZERO(sizeof(directory_token_t));
- tok->tp = _ERR;
+ tok->tp = ERR_;
/* Set *s to first token, eol to end-of-line, next to after first token */
*s = eat_whitespace_eos(*s, eos); /* eat multi-line whitespace */
@@ -3964,10 +3610,10 @@ get_next_token(memarea_t *area,
}
}
- if (tok->tp == _ERR) {
+ if (tok->tp == ERR_) {
/* No keyword matched; call it an "K_opt" or "A_unrecognized" */
if (**s == '@')
- tok->tp = _A_UNKNOWN;
+ tok->tp = A_UNKNOWN_;
else
tok->tp = K_OPT;
tok->args = ALLOC(sizeof(char*));
@@ -4006,7 +3652,7 @@ get_next_token(memarea_t *area,
if ((size_t)(eol-next) != 9+obname_len+5 ||
strcmp_len(next+9, tok->object_type, obname_len) ||
strcmp_len(eol-5, "-----", 5)) {
- snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s",
+ tor_snprintf(ebuf, sizeof(ebuf), "Malformed object: mismatched end tag %s",
tok->object_type);
ebuf[sizeof(ebuf)-1] = '\0';
RET_ERR(ebuf);
@@ -4057,23 +3703,30 @@ tokenize_string(memarea_t *area,
{
const char **s;
directory_token_t *tok = NULL;
- int counts[_NIL];
+ int counts[NIL_];
int i;
int first_nonannotation;
int prev_len = smartlist_len(out);
tor_assert(area);
s = &start;
- if (!end)
+ if (!end) {
end = start+strlen(start);
- for (i = 0; i < _NIL; ++i)
+ } else {
+ /* it's only meaningful to check for nuls if we got an end-of-string ptr */
+ if (memchr(start, '\0', end-start)) {
+ log_warn(LD_DIR, "parse error: internal NUL character.");
+ return -1;
+ }
+ }
+ for (i = 0; i < NIL_; ++i)
counts[i] = 0;
SMARTLIST_FOREACH(out, const directory_token_t *, t, ++counts[t->tp]);
- while (*s < end && (!tok || tok->tp != _EOF)) {
+ while (*s < end && (!tok || tok->tp != EOF_)) {
tok = get_next_token(area, s, end, table);
- if (tok->tp == _ERR) {
+ if (tok->tp == ERR_) {
log_warn(LD_DIR, "parse error: %s", tok->error);
token_clear(tok);
return -1;
@@ -4163,7 +3816,7 @@ find_opt_by_keyword(smartlist_t *s, directory_keyword keyword)
* with an assert if no such keyword is found.
*/
static directory_token_t *
-_find_by_keyword(smartlist_t *s, directory_keyword keyword,
+find_by_keyword_(smartlist_t *s, directory_keyword keyword,
const char *keyword_as_string)
{
directory_token_t *tok = find_opt_by_keyword(s, keyword);
@@ -4251,8 +3904,8 @@ router_get_hash_impl_helper(const char *s, size_t s_len,
/** Compute the digest of the substring of <b>s</b> taken from the first
* occurrence of <b>start_str</b> through the first instance of c after the
- * first subsequent occurrence of <b>end_str</b>; store the 20-byte result in
- * <b>digest</b>; return 0 on success.
+ * first subsequent occurrence of <b>end_str</b>; store the 20-byte or 32-byte
+ * result in <b>digest</b>; return 0 on success.
*
* If no such substring exists, return -1.
*/
@@ -4355,12 +4008,17 @@ find_start_of_next_microdesc(const char *s, const char *eos)
/** Parse as many microdescriptors as are found from the string starting at
* <b>s</b> and ending at <b>eos</b>. If allow_annotations is set, read any
- * annotations we recognize and ignore ones we don't. If <b>copy_body</b> is
- * true, then strdup the bodies of the microdescriptors. Return all newly
+ * annotations we recognize and ignore ones we don't.
+ *
+ * If <b>saved_location</b> isn't SAVED_IN_CACHE, make a local copy of each
+ * descriptor in the body field of each microdesc_t.
+ *
+ * Return all newly
* parsed microdescriptors in a newly allocated smartlist_t. */
smartlist_t *
microdescs_parse_from_string(const char *s, const char *eos,
- int allow_annotations, int copy_body)
+ int allow_annotations,
+ saved_location_t where)
{
smartlist_t *tokens;
smartlist_t *result;
@@ -4369,6 +4027,7 @@ microdescs_parse_from_string(const char *s, const char *eos,
const char *start = s;
const char *start_of_next_microdesc;
int flags = allow_annotations ? TS_ANNOTATIONS_OK : 0;
+ const int copy_body = (where != SAVED_IN_CACHE);
directory_token_t *tok;
@@ -4398,8 +4057,9 @@ microdescs_parse_from_string(const char *s, const char *eos,
tor_assert(cp);
md->bodylen = start_of_next_microdesc - cp;
+ md->saved_location = where;
if (copy_body)
- md->body = tor_strndup(cp, md->bodylen);
+ md->body = tor_memdup_nulterm(cp, md->bodylen);
else
md->body = (char*)cp;
md->off = cp - start;
@@ -4421,6 +4081,25 @@ microdescs_parse_from_string(const char *s, const char *eos,
md->onion_pkey = tok->key;
tok->key = NULL;
+ if ((tok = find_opt_by_keyword(tokens, K_ONION_KEY_NTOR))) {
+ curve25519_public_key_t k;
+ tor_assert(tok->n_args >= 1);
+ if (curve25519_public_from_base64(&k, tok->args[0]) < 0) {
+ log_warn(LD_DIR, "Bogus ntor-onion-key in microdesc");
+ goto next;
+ }
+ md->onion_curve25519_pkey =
+ tor_memdup(&k, sizeof(curve25519_public_key_t));
+ }
+
+ {
+ smartlist_t *a_lines = find_all_by_keyword(tokens, K_A);
+ if (a_lines) {
+ find_single_ipv6_orport(a_lines, &md->ipv6_addr, &md->ipv6_orport);
+ smartlist_free(a_lines);
+ }
+ }
+
if ((tok = find_opt_by_keyword(tokens, K_FAMILY))) {
int i;
md->family = smartlist_new();
@@ -4437,6 +4116,9 @@ microdescs_parse_from_string(const char *s, const char *eos,
if ((tok = find_opt_by_keyword(tokens, K_P))) {
md->exit_policy = parse_short_policy(tok->args[0]);
}
+ if ((tok = find_opt_by_keyword(tokens, K_P6))) {
+ md->ipv6_exit_policy = parse_short_policy(tok->args[0]);
+ }
crypto_digest256(md->digest, md->body, md->bodylen, DIGEST_SHA256);
@@ -4447,11 +4129,13 @@ microdescs_parse_from_string(const char *s, const char *eos,
microdesc_free(md);
md = NULL;
+ SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
memarea_clear(area);
smartlist_clear(tokens);
s = start_of_next_microdesc;
}
+ SMARTLIST_FOREACH(tokens, directory_token_t *, t, token_clear(t));
memarea_drop_all(area);
smartlist_free(tokens);
@@ -4654,7 +4338,7 @@ tor_version_same_series(tor_version_t *a, tor_version_t *b)
* if _a precedes _b, 1 if _b precedes _a, and 0 if they are equivalent.
* Used to sort a list of versions. */
static int
-_compare_tor_version_str_ptr(const void **_a, const void **_b)
+compare_tor_version_str_ptr_(const void **_a, const void **_b)
{
const char *a = *_a, *b = *_b;
int ca, cb;
@@ -4678,10 +4362,10 @@ _compare_tor_version_str_ptr(const void **_a, const void **_b)
void
sort_version_list(smartlist_t *versions, int remove_duplicates)
{
- smartlist_sort(versions, _compare_tor_version_str_ptr);
+ smartlist_sort(versions, compare_tor_version_str_ptr_);
if (remove_duplicates)
- smartlist_uniq(versions, _compare_tor_version_str_ptr, _tor_free);
+ smartlist_uniq(versions, compare_tor_version_str_ptr_, tor_free_);
}
/** Parse and validate the ASCII-encoded v2 descriptor in <b>desc</b>,
diff --git a/src/or/routerparse.h b/src/or/routerparse.h
index c6382a7f6..5d5d9e59e 100644
--- a/src/or/routerparse.h
+++ b/src/or/routerparse.h
@@ -1,7 +1,7 @@
/* Copyright (c) 2001 Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -9,18 +9,17 @@
* \brief Header file for routerparse.c.
**/
-#ifndef _TOR_ROUTERPARSE_H
-#define _TOR_ROUTERPARSE_H
+#ifndef TOR_ROUTERPARSE_H
+#define TOR_ROUTERPARSE_H
int router_get_router_hash(const char *s, size_t s_len, char *digest);
int router_get_dir_hash(const char *s, char *digest);
-int router_get_runningrouters_hash(const char *s, char *digest);
-int router_get_networkstatus_v2_hash(const char *s, char *digest);
-int router_get_networkstatus_v3_hash(const char *s, char *digest,
- digest_algorithm_t algorithm);
int router_get_networkstatus_v3_hashes(const char *s, digests_t *digests);
int router_get_extrainfo_hash(const char *s, size_t s_len, char *digest);
#define DIROBJ_MAX_SIG_LEN 256
+char *router_get_dirobj_signature(const char *digest,
+ size_t digest_len,
+ crypto_pk_t *private_key);
int router_append_dirobj_signature(char *buf, size_t buf_len,
const char *digest,
size_t digest_len,
@@ -31,8 +30,6 @@ int router_parse_list_from_string(const char **s, const char *eos,
int is_extrainfo,
int allow_annotations,
const char *prepend_annotations);
-int router_parse_runningrouters(const char *str);
-int router_parse_directory(const char *str);
routerinfo_t *router_parse_entry_from_string(const char *s, const char *end,
int cache_copy,
@@ -53,9 +50,8 @@ void sort_version_list(smartlist_t *lst, int remove_duplicates);
void assert_addr_policy_ok(smartlist_t *t);
void dump_distinct_digest_count(int severity);
-int compare_routerstatus_entries(const void **_a, const void **_b);
-networkstatus_v2_t *networkstatus_v2_parse_from_string(const char *s);
-int networkstatus_verify_bw_weights(networkstatus_t *ns);
+int compare_vote_routerstatus_entries(const void **_a, const void **_b);
+int networkstatus_verify_bw_weights(networkstatus_t *ns, int);
networkstatus_t *networkstatus_parse_vote_from_string(const char *s,
const char **eos_out,
networkstatus_type_t ns_type);
@@ -64,7 +60,7 @@ ns_detached_signatures_t *networkstatus_parse_detached_signatures(
smartlist_t *microdescs_parse_from_string(const char *s, const char *eos,
int allow_annotations,
- int copy_body);
+ saved_location_t where);
authority_cert_t *authority_cert_parse_from_string(const char *s,
const char **end_of_string);
diff --git a/src/or/routerset.c b/src/or/routerset.c
new file mode 100644
index 000000000..7aee90d6d
--- /dev/null
+++ b/src/or/routerset.c
@@ -0,0 +1,433 @@
+/* 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 */
+
+#include "or.h"
+#include "geoip.h"
+#include "nodelist.h"
+#include "policies.h"
+#include "router.h"
+#include "routerparse.h"
+#include "routerset.h"
+
+/** A routerset specifies constraints on a set of possible routerinfos, based
+ * on their names, identities, or addresses. It is optimized for determining
+ * whether a router is a member or not, in O(1+P) time, where P is the number
+ * of address policy constraints. */
+struct routerset_t {
+ /** A list of strings for the elements of the policy. Each string is either
+ * a nickname, a hexadecimal identity fingerprint, or an address policy. A
+ * router belongs to the set if its nickname OR its identity OR its address
+ * matches an entry here. */
+ smartlist_t *list;
+ /** A map from lowercase nicknames of routers in the set to (void*)1 */
+ strmap_t *names;
+ /** A map from identity digests routers in the set to (void*)1 */
+ digestmap_t *digests;
+ /** An address policy for routers in the set. For implementation reasons,
+ * a router belongs to the set if it is _rejected_ by this policy. */
+ smartlist_t *policies;
+
+ /** A human-readable description of what this routerset is for. Used in
+ * log messages. */
+ char *description;
+
+ /** A list of the country codes in this set. */
+ smartlist_t *country_names;
+ /** Total number of countries we knew about when we built <b>countries</b>.*/
+ int n_countries;
+ /** Bit array mapping the return value of geoip_get_country() to 1 iff the
+ * country is a member of this routerset. Note that we MUST call
+ * routerset_refresh_countries() whenever the geoip country list is
+ * reloaded. */
+ bitarray_t *countries;
+};
+
+/** Return a new empty routerset. */
+routerset_t *
+routerset_new(void)
+{
+ routerset_t *result = tor_malloc_zero(sizeof(routerset_t));
+ result->list = smartlist_new();
+ result->names = strmap_new();
+ result->digests = digestmap_new();
+ result->policies = smartlist_new();
+ result->country_names = smartlist_new();
+ return result;
+}
+
+/** If <b>c</b> is a country code in the form {cc}, return a newly allocated
+ * string holding the "cc" part. Else, return NULL. */
+static char *
+routerset_get_countryname(const char *c)
+{
+ char *country;
+
+ if (strlen(c) < 4 || c[0] !='{' || c[3] !='}')
+ return NULL;
+
+ country = tor_strndup(c+1, 2);
+ tor_strlower(country);
+ return country;
+}
+
+/** Update the routerset's <b>countries</b> bitarray_t. Called whenever
+ * the GeoIP IPv4 database is reloaded.
+ */
+void
+routerset_refresh_countries(routerset_t *target)
+{
+ int cc;
+ bitarray_free(target->countries);
+
+ if (!geoip_is_loaded(AF_INET)) {
+ target->countries = NULL;
+ target->n_countries = 0;
+ return;
+ }
+ target->n_countries = geoip_get_n_countries();
+ target->countries = bitarray_init_zero(target->n_countries);
+ SMARTLIST_FOREACH_BEGIN(target->country_names, const char *, country) {
+ cc = geoip_get_country(country);
+ if (cc >= 0) {
+ tor_assert(cc < target->n_countries);
+ bitarray_set(target->countries, cc);
+ } else {
+ log_warn(LD_CONFIG, "Country code '%s' is not recognized.",
+ country);
+ }
+ } SMARTLIST_FOREACH_END(country);
+}
+
+/** Parse the string <b>s</b> to create a set of routerset entries, and add
+ * them to <b>target</b>. In log messages, refer to the string as
+ * <b>description</b>. Return 0 on success, -1 on failure.
+ *
+ * Three kinds of elements are allowed in routersets: nicknames, IP address
+ * patterns, and fingerprints. They may be surrounded by optional space, and
+ * must be separated by commas.
+ */
+int
+routerset_parse(routerset_t *target, const char *s, const char *description)
+{
+ int r = 0;
+ int added_countries = 0;
+ char *countryname;
+ smartlist_t *list = smartlist_new();
+ smartlist_split_string(list, s, ",",
+ SPLIT_SKIP_SPACE | SPLIT_IGNORE_BLANK, 0);
+ SMARTLIST_FOREACH_BEGIN(list, char *, nick) {
+ addr_policy_t *p;
+ if (is_legal_hexdigest(nick)) {
+ char d[DIGEST_LEN];
+ if (*nick == '$')
+ ++nick;
+ log_debug(LD_CONFIG, "Adding identity %s to %s", nick, description);
+ base16_decode(d, sizeof(d), nick, HEX_DIGEST_LEN);
+ digestmap_set(target->digests, d, (void*)1);
+ } else if (is_legal_nickname(nick)) {
+ log_debug(LD_CONFIG, "Adding nickname %s to %s", nick, description);
+ strmap_set_lc(target->names, nick, (void*)1);
+ } else if ((countryname = routerset_get_countryname(nick)) != NULL) {
+ log_debug(LD_CONFIG, "Adding country %s to %s", nick,
+ description);
+ smartlist_add(target->country_names, countryname);
+ added_countries = 1;
+ } else if ((strchr(nick,'.') || strchr(nick, '*')) &&
+ (p = router_parse_addr_policy_item_from_string(
+ nick, ADDR_POLICY_REJECT))) {
+ log_debug(LD_CONFIG, "Adding address %s to %s", nick, description);
+ smartlist_add(target->policies, p);
+ } else {
+ log_warn(LD_CONFIG, "Entry '%s' in %s is malformed.", nick,
+ description);
+ r = -1;
+ tor_free(nick);
+ SMARTLIST_DEL_CURRENT(list, nick);
+ }
+ } SMARTLIST_FOREACH_END(nick);
+ policy_expand_unspec(&target->policies);
+ smartlist_add_all(target->list, list);
+ smartlist_free(list);
+ if (added_countries)
+ routerset_refresh_countries(target);
+ return r;
+}
+
+/** Add all members of the set <b>source</b> to <b>target</b>. */
+void
+routerset_union(routerset_t *target, const routerset_t *source)
+{
+ char *s;
+ tor_assert(target);
+ if (!source || !source->list)
+ return;
+ s = routerset_to_string(source);
+ routerset_parse(target, s, "other routerset");
+ tor_free(s);
+}
+
+/** Return true iff <b>set</b> lists only nicknames and digests, and includes
+ * no IP ranges or countries. */
+int
+routerset_is_list(const routerset_t *set)
+{
+ return smartlist_len(set->country_names) == 0 &&
+ smartlist_len(set->policies) == 0;
+}
+
+/** Return true iff we need a GeoIP IP-to-country database to make sense of
+ * <b>set</b>. */
+int
+routerset_needs_geoip(const routerset_t *set)
+{
+ return set && smartlist_len(set->country_names);
+}
+
+/** Return true iff there are no entries in <b>set</b>. */
+int
+routerset_is_empty(const routerset_t *set)
+{
+ return !set || smartlist_len(set->list) == 0;
+}
+
+/** Helper. Return true iff <b>set</b> contains a router based on the other
+ * provided fields. Return higher values for more specific subentries: a
+ * single router is more specific than an address range of routers, which is
+ * more specific in turn than a country code.
+ *
+ * (If country is -1, then we take the country
+ * from addr.) */
+static int
+routerset_contains(const routerset_t *set, const tor_addr_t *addr,
+ uint16_t orport,
+ const char *nickname, const char *id_digest,
+ country_t country)
+{
+ if (!set || !set->list)
+ return 0;
+ if (nickname && strmap_get_lc(set->names, nickname))
+ return 4;
+ if (id_digest && digestmap_get(set->digests, id_digest))
+ return 4;
+ if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
+ == ADDR_POLICY_REJECTED)
+ return 3;
+ if (set->countries) {
+ if (country < 0 && addr)
+ country = geoip_get_country_by_addr(addr);
+
+ if (country >= 0 && country < set->n_countries &&
+ bitarray_is_set(set->countries, country))
+ return 2;
+ }
+ return 0;
+}
+
+/** If *<b>setp</b> includes at least one country code, or if
+ * <b>only_some_cc_set</b> is 0, add the ?? and A1 country codes to
+ * *<b>setp</b>, creating it as needed. Return true iff *<b>setp</b> changed.
+ */
+int
+routerset_add_unknown_ccs(routerset_t **setp, int only_if_some_cc_set)
+{
+ routerset_t *set;
+ int add_unknown, add_a1;
+ if (only_if_some_cc_set) {
+ if (!*setp || smartlist_len((*setp)->country_names) == 0)
+ return 0;
+ }
+ if (!*setp)
+ *setp = routerset_new();
+
+ set = *setp;
+
+ add_unknown = ! smartlist_contains_string_case(set->country_names, "??") &&
+ geoip_get_country("??") >= 0;
+ add_a1 = ! smartlist_contains_string_case(set->country_names, "a1") &&
+ geoip_get_country("A1") >= 0;
+
+ if (add_unknown) {
+ smartlist_add(set->country_names, tor_strdup("??"));
+ smartlist_add(set->list, tor_strdup("{??}"));
+ }
+ if (add_a1) {
+ smartlist_add(set->country_names, tor_strdup("a1"));
+ smartlist_add(set->list, tor_strdup("{a1}"));
+ }
+
+ if (add_unknown || add_a1) {
+ routerset_refresh_countries(set);
+ return 1;
+ }
+ return 0;
+}
+
+/** Return true iff we can tell that <b>ei</b> is a member of <b>set</b>. */
+int
+routerset_contains_extendinfo(const routerset_t *set, const extend_info_t *ei)
+{
+ return routerset_contains(set,
+ &ei->addr,
+ ei->port,
+ ei->nickname,
+ ei->identity_digest,
+ -1 /*country*/);
+}
+
+/** Return true iff <b>ri</b> is in <b>set</b>. If country is <b>-1</b>, we
+ * look up the country. */
+int
+routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
+ country_t country)
+{
+ tor_addr_t addr;
+ tor_addr_from_ipv4h(&addr, ri->addr);
+ return routerset_contains(set,
+ &addr,
+ ri->or_port,
+ ri->nickname,
+ ri->cache_info.identity_digest,
+ country);
+}
+
+/** Return true iff <b>rs</b> is in <b>set</b>. If country is <b>-1</b>, we
+ * look up the country. */
+int
+routerset_contains_routerstatus(const routerset_t *set,
+ const routerstatus_t *rs,
+ country_t country)
+{
+ tor_addr_t addr;
+ tor_addr_from_ipv4h(&addr, rs->addr);
+ return routerset_contains(set,
+ &addr,
+ rs->or_port,
+ rs->nickname,
+ rs->identity_digest,
+ country);
+}
+
+/** Return true iff <b>node</b> is in <b>set</b>. */
+int
+routerset_contains_node(const routerset_t *set, const node_t *node)
+{
+ if (node->rs)
+ return routerset_contains_routerstatus(set, node->rs, node->country);
+ else if (node->ri)
+ return routerset_contains_router(set, node->ri, node->country);
+ else
+ return 0;
+}
+
+/** Add every known node_t that is a member of <b>routerset</b> to
+ * <b>out</b>, but never add any that are part of <b>excludeset</b>.
+ * If <b>running_only</b>, only add the running ones. */
+void
+routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
+ const routerset_t *excludeset, int running_only)
+{
+ tor_assert(out);
+ if (!routerset || !routerset->list)
+ return;
+
+ if (routerset_is_list(routerset)) {
+ /* No routers are specified by type; all are given by name or digest.
+ * we can do a lookup in O(len(routerset)). */
+ SMARTLIST_FOREACH(routerset->list, const char *, name, {
+ const node_t *node = node_get_by_nickname(name, 1);
+ if (node) {
+ if (!running_only || node->is_running)
+ if (!routerset_contains_node(excludeset, node))
+ smartlist_add(out, (void*)node);
+ }
+ });
+ } else {
+ /* We need to iterate over the routerlist to get all the ones of the
+ * right kind. */
+ smartlist_t *nodes = nodelist_get_list();
+ SMARTLIST_FOREACH(nodes, const node_t *, node, {
+ if (running_only && !node->is_running)
+ continue;
+ if (routerset_contains_node(routerset, node) &&
+ !routerset_contains_node(excludeset, node))
+ smartlist_add(out, (void*)node);
+ });
+ }
+}
+
+/** Remove every node_t from <b>lst</b> that is in <b>routerset</b>. */
+void
+routerset_subtract_nodes(smartlist_t *lst, const routerset_t *routerset)
+{
+ tor_assert(lst);
+ if (!routerset)
+ return;
+ SMARTLIST_FOREACH(lst, const node_t *, node, {
+ if (routerset_contains_node(routerset, node)) {
+ //log_debug(LD_DIR, "Subtracting %s",r->nickname);
+ SMARTLIST_DEL_CURRENT(lst, node);
+ }
+ });
+}
+
+/** Return a new string that when parsed by routerset_parse_string() will
+ * yield <b>set</b>. */
+char *
+routerset_to_string(const routerset_t *set)
+{
+ if (!set || !set->list)
+ return tor_strdup("");
+ return smartlist_join_strings(set->list, ",", 0, NULL);
+}
+
+/** Helper: return true iff old and new are both NULL, or both non-NULL
+ * equal routersets. */
+int
+routerset_equal(const routerset_t *old, const routerset_t *new)
+{
+ if (routerset_is_empty(old) && routerset_is_empty(new)) {
+ /* Two empty sets are equal */
+ return 1;
+ } else if (routerset_is_empty(old) || routerset_is_empty(new)) {
+ /* An empty set is equal to nothing else. */
+ return 0;
+ }
+ tor_assert(old != NULL);
+ tor_assert(new != NULL);
+
+ if (smartlist_len(old->list) != smartlist_len(new->list))
+ return 0;
+
+ SMARTLIST_FOREACH(old->list, const char *, cp1, {
+ const char *cp2 = smartlist_get(new->list, cp1_sl_idx);
+ if (strcmp(cp1, cp2))
+ return 0;
+ });
+
+ return 1;
+}
+
+/** Free all storage held in <b>routerset</b>. */
+void
+routerset_free(routerset_t *routerset)
+{
+ if (!routerset)
+ return;
+
+ SMARTLIST_FOREACH(routerset->list, char *, cp, tor_free(cp));
+ smartlist_free(routerset->list);
+ SMARTLIST_FOREACH(routerset->policies, addr_policy_t *, p,
+ addr_policy_free(p));
+ smartlist_free(routerset->policies);
+ SMARTLIST_FOREACH(routerset->country_names, char *, cp, tor_free(cp));
+ smartlist_free(routerset->country_names);
+
+ strmap_free(routerset->names, NULL);
+ digestmap_free(routerset->digests, NULL);
+ bitarray_free(routerset->countries);
+ tor_free(routerset);
+}
+
diff --git a/src/or/routerset.h b/src/or/routerset.h
new file mode 100644
index 000000000..8261c7fb0
--- /dev/null
+++ b/src/or/routerset.h
@@ -0,0 +1,43 @@
+/* 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 routerlist.h
+ * \brief Header file for routerset.c
+ **/
+
+#ifndef TOR_ROUTERSET_H
+#define TOR_ROUTERSET_H
+
+routerset_t *routerset_new(void);
+void routerset_refresh_countries(routerset_t *rs);
+int routerset_parse(routerset_t *target, const char *s,
+ const char *description);
+void routerset_union(routerset_t *target, const routerset_t *source);
+int routerset_is_list(const routerset_t *set);
+int routerset_needs_geoip(const routerset_t *set);
+int routerset_is_empty(const routerset_t *set);
+int routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
+ country_t country);
+int routerset_contains_routerstatus(const routerset_t *set,
+ const routerstatus_t *rs,
+ country_t country);
+int routerset_contains_extendinfo(const routerset_t *set,
+ const extend_info_t *ei);
+
+int routerset_contains_node(const routerset_t *set, const node_t *node);
+void routerset_get_all_nodes(smartlist_t *out, const routerset_t *routerset,
+ const routerset_t *excludeset,
+ int running_only);
+int routerset_add_unknown_ccs(routerset_t **setp, int only_if_some_cc_set);
+void routerset_subtract_nodes(smartlist_t *out,
+ const routerset_t *routerset);
+
+char *routerset_to_string(const routerset_t *routerset);
+int routerset_equal(const routerset_t *old, const routerset_t *new);
+void routerset_free(routerset_t *routerset);
+
+#endif
+
diff --git a/src/or/statefile.c b/src/or/statefile.c
new file mode 100644
index 000000000..7b9998fc1
--- /dev/null
+++ b/src/or/statefile.c
@@ -0,0 +1,649 @@
+/* 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 */
+
+#define STATEFILE_PRIVATE
+#include "or.h"
+#include "circuitstats.h"
+#include "config.h"
+#include "confparse.h"
+#include "entrynodes.h"
+#include "hibernate.h"
+#include "rephist.h"
+#include "router.h"
+#include "sandbox.h"
+#include "statefile.h"
+
+/** A list of state-file "abbreviations," for compatibility. */
+static config_abbrev_t state_abbrevs_[] = {
+ { "AccountingBytesReadInterval", "AccountingBytesReadInInterval", 0, 0 },
+ { "HelperNode", "EntryGuard", 0, 0 },
+ { "HelperNodeDownSince", "EntryGuardDownSince", 0, 0 },
+ { "HelperNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
+ { "EntryNode", "EntryGuard", 0, 0 },
+ { "EntryNodeDownSince", "EntryGuardDownSince", 0, 0 },
+ { "EntryNodeUnlistedSince", "EntryGuardUnlistedSince", 0, 0 },
+ { NULL, NULL, 0, 0},
+};
+
+/*XXXX these next two are duplicates or near-duplicates from config.c */
+#define VAR(name,conftype,member,initvalue) \
+ { name, CONFIG_TYPE_ ## conftype, STRUCT_OFFSET(or_state_t, member), \
+ initvalue }
+/** As VAR, but the option name and member name are the same. */
+#define V(member,conftype,initvalue) \
+ VAR(#member, conftype, member, initvalue)
+
+/** Array of "state" variables saved to the ~/.tor/state file. */
+static config_var_t state_vars_[] = {
+ /* Remember to document these in state-contents.txt ! */
+
+ V(AccountingBytesReadInInterval, MEMUNIT, NULL),
+ V(AccountingBytesWrittenInInterval, MEMUNIT, NULL),
+ V(AccountingExpectedUsage, MEMUNIT, NULL),
+ V(AccountingIntervalStart, ISOTIME, NULL),
+ V(AccountingSecondsActive, INTERVAL, NULL),
+ V(AccountingSecondsToReachSoftLimit,INTERVAL, NULL),
+ V(AccountingSoftLimitHitAt, ISOTIME, NULL),
+ V(AccountingBytesAtSoftLimit, MEMUNIT, NULL),
+
+ VAR("EntryGuard", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardDownSince", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardUnlistedSince", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardAddedBy", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardPathBias", LINELIST_S, EntryGuards, NULL),
+ VAR("EntryGuardPathUseBias", LINELIST_S, EntryGuards, NULL),
+ V(EntryGuards, LINELIST_V, NULL),
+
+ VAR("TransportProxy", LINELIST_S, TransportProxies, NULL),
+ V(TransportProxies, LINELIST_V, NULL),
+
+ V(BWHistoryReadEnds, ISOTIME, NULL),
+ V(BWHistoryReadInterval, UINT, "900"),
+ V(BWHistoryReadValues, CSV, ""),
+ V(BWHistoryReadMaxima, CSV, ""),
+ V(BWHistoryWriteEnds, ISOTIME, NULL),
+ V(BWHistoryWriteInterval, UINT, "900"),
+ V(BWHistoryWriteValues, CSV, ""),
+ V(BWHistoryWriteMaxima, CSV, ""),
+ V(BWHistoryDirReadEnds, ISOTIME, NULL),
+ V(BWHistoryDirReadInterval, UINT, "900"),
+ V(BWHistoryDirReadValues, CSV, ""),
+ V(BWHistoryDirReadMaxima, CSV, ""),
+ V(BWHistoryDirWriteEnds, ISOTIME, NULL),
+ V(BWHistoryDirWriteInterval, UINT, "900"),
+ V(BWHistoryDirWriteValues, CSV, ""),
+ V(BWHistoryDirWriteMaxima, CSV, ""),
+
+ V(TorVersion, STRING, NULL),
+
+ V(LastRotatedOnionKey, ISOTIME, NULL),
+ V(LastWritten, ISOTIME, NULL),
+
+ V(TotalBuildTimes, UINT, NULL),
+ V(CircuitBuildAbandonedCount, UINT, "0"),
+ VAR("CircuitBuildTimeBin", LINELIST_S, BuildtimeHistogram, NULL),
+ VAR("BuildtimeHistogram", LINELIST_V, BuildtimeHistogram, NULL),
+ { NULL, CONFIG_TYPE_OBSOLETE, 0, NULL }
+};
+
+#undef VAR
+#undef V
+
+static int or_state_validate(or_state_t *state, char **msg);
+
+static int or_state_validate_cb(void *old_options, void *options,
+ void *default_options,
+ int from_setconf, char **msg);
+
+/** Magic value for or_state_t. */
+#define OR_STATE_MAGIC 0x57A73f57
+
+/** "Extra" variable in the state that receives lines we can't parse. This
+ * lets us preserve options from versions of Tor newer than us. */
+static config_var_t state_extra_var = {
+ "__extra", CONFIG_TYPE_LINELIST, STRUCT_OFFSET(or_state_t, ExtraLines), NULL
+};
+
+/** Configuration format for or_state_t. */
+static const config_format_t state_format = {
+ sizeof(or_state_t),
+ OR_STATE_MAGIC,
+ STRUCT_OFFSET(or_state_t, magic_),
+ state_abbrevs_,
+ state_vars_,
+ or_state_validate_cb,
+ &state_extra_var,
+};
+
+/** Persistent serialized state. */
+static or_state_t *global_state = NULL;
+
+/** Return the persistent state struct for this Tor. */
+MOCK_IMPL(or_state_t *,
+get_or_state, (void))
+{
+ tor_assert(global_state);
+ return global_state;
+}
+
+/** Return true iff we have loaded the global state for this Tor */
+int
+or_state_loaded(void)
+{
+ return global_state != NULL;
+}
+
+/** Return true if <b>line</b> is a valid state TransportProxy line.
+ * Return false otherwise. */
+static int
+state_transport_line_is_valid(const char *line)
+{
+ smartlist_t *items = NULL;
+ char *addrport=NULL;
+ tor_addr_t addr;
+ uint16_t port = 0;
+ int r;
+
+ items = smartlist_new();
+ smartlist_split_string(items, line, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+
+ if (smartlist_len(items) != 2) {
+ log_warn(LD_CONFIG, "state: Not enough arguments in TransportProxy line.");
+ goto err;
+ }
+
+ addrport = smartlist_get(items, 1);
+ if (tor_addr_port_lookup(addrport, &addr, &port) < 0) {
+ log_warn(LD_CONFIG, "state: Could not parse addrport.");
+ goto err;
+ }
+
+ if (!port) {
+ log_warn(LD_CONFIG, "state: Transport line did not contain port.");
+ goto err;
+ }
+
+ r = 1;
+ goto done;
+
+ err:
+ r = 0;
+
+ done:
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ return r;
+}
+
+/** Return 0 if all TransportProxy lines in <b>state</b> are well
+ * formed. Otherwise, return -1. */
+static int
+validate_transports_in_state(or_state_t *state)
+{
+ int broken = 0;
+ config_line_t *line;
+
+ for (line = state->TransportProxies ; line ; line = line->next) {
+ tor_assert(!strcmp(line->key, "TransportProxy"));
+ if (!state_transport_line_is_valid(line->value))
+ broken = 1;
+ }
+
+ if (broken)
+ log_warn(LD_CONFIG, "state: State file seems to be broken.");
+
+ return 0;
+}
+
+static int
+or_state_validate_cb(void *old_state, void *state, void *default_state,
+ int from_setconf, char **msg)
+{
+ /* We don't use these; only options do. Still, we need to match that
+ * signature. */
+ (void) from_setconf;
+ (void) default_state;
+ (void) old_state;
+
+ return or_state_validate(state, msg);
+}
+
+/** Return 0 if every setting in <b>state</b> is reasonable, and a
+ * permissible transition from <b>old_state</b>. Else warn and return -1.
+ * Should have no side effects, except for normalizing the contents of
+ * <b>state</b>.
+ */
+static int
+or_state_validate(or_state_t *state, char **msg)
+{
+ if (entry_guards_parse_state(state, 0, msg)<0)
+ return -1;
+
+ if (validate_transports_in_state(state)<0)
+ return -1;
+
+ return 0;
+}
+
+/** Replace the current persistent state with <b>new_state</b> */
+static int
+or_state_set(or_state_t *new_state)
+{
+ char *err = NULL;
+ int ret = 0;
+ tor_assert(new_state);
+ config_free(&state_format, global_state);
+ global_state = new_state;
+ if (entry_guards_parse_state(global_state, 1, &err)<0) {
+ log_warn(LD_GENERAL,"%s",err);
+ tor_free(err);
+ ret = -1;
+ }
+ if (rep_hist_load_state(global_state, &err)<0) {
+ log_warn(LD_GENERAL,"Unparseable bandwidth history state: %s",err);
+ tor_free(err);
+ ret = -1;
+ }
+ if (circuit_build_times_parse_state(
+ get_circuit_build_times_mutable(),global_state) < 0) {
+ ret = -1;
+ }
+ return ret;
+}
+
+/**
+ * Save a broken state file to a backup location.
+ */
+static void
+or_state_save_broken(char *fname)
+{
+ int i, res;
+ file_status_t status;
+ char *fname2 = NULL;
+ for (i = 0; i < 100; ++i) {
+ tor_asprintf(&fname2, "%s.%d", fname, i);
+ status = file_status(fname2);
+ if (status == FN_NOENT)
+ break;
+ tor_free(fname2);
+ }
+ if (i == 100) {
+ log_warn(LD_BUG, "Unable to parse state in \"%s\"; too many saved bad "
+ "state files to move aside. Discarding the old state file.",
+ fname);
+ res = unlink(fname);
+ if (res != 0) {
+ log_warn(LD_FS,
+ "Also couldn't discard old state file \"%s\" because "
+ "unlink() failed: %s",
+ fname, strerror(errno));
+ }
+ } else {
+ log_warn(LD_BUG, "Unable to parse state in \"%s\". Moving it aside "
+ "to \"%s\". This could be a bug in Tor; please tell "
+ "the developers.", fname, fname2);
+ if (tor_rename(fname, fname2) < 0) {//XXXX sandbox prohibits
+ log_warn(LD_BUG, "Weirdly, I couldn't even move the state aside. The "
+ "OS gave an error of %s", strerror(errno));
+ }
+ }
+ tor_free(fname2);
+}
+
+STATIC or_state_t *
+or_state_new(void)
+{
+ or_state_t *new_state = tor_malloc_zero(sizeof(or_state_t));
+ new_state->magic_ = OR_STATE_MAGIC;
+ config_init(&state_format, new_state);
+
+ return new_state;
+}
+
+/** Reload the persistent state from disk, generating a new state as needed.
+ * Return 0 on success, less than 0 on failure.
+ */
+int
+or_state_load(void)
+{
+ or_state_t *new_state = NULL;
+ char *contents = NULL, *fname;
+ char *errmsg = NULL;
+ int r = -1, badstate = 0;
+
+ fname = get_datadir_fname("state");
+ switch (file_status(fname)) {
+ case FN_FILE:
+ if (!(contents = read_file_to_str(fname, 0, NULL))) {
+ log_warn(LD_FS, "Unable to read state file \"%s\"", fname);
+ goto done;
+ }
+ break;
+ case FN_NOENT:
+ break;
+ case FN_ERROR:
+ case FN_DIR:
+ default:
+ log_warn(LD_GENERAL,"State file \"%s\" is not a file? Failing.", fname);
+ goto done;
+ }
+ new_state = or_state_new();
+ if (contents) {
+ config_line_t *lines=NULL;
+ int assign_retval;
+ if (config_get_lines(contents, &lines, 0)<0)
+ goto done;
+ assign_retval = config_assign(&state_format, new_state,
+ lines, 0, 0, &errmsg);
+ config_free_lines(lines);
+ if (assign_retval<0)
+ badstate = 1;
+ if (errmsg) {
+ log_warn(LD_GENERAL, "%s", errmsg);
+ tor_free(errmsg);
+ }
+ }
+
+ if (!badstate && or_state_validate(new_state, &errmsg) < 0)
+ badstate = 1;
+
+ if (errmsg) {
+ log_warn(LD_GENERAL, "%s", errmsg);
+ tor_free(errmsg);
+ }
+
+ if (badstate && !contents) {
+ log_warn(LD_BUG, "Uh oh. We couldn't even validate our own default state."
+ " This is a bug in Tor.");
+ goto done;
+ } else if (badstate && contents) {
+ or_state_save_broken(fname);
+
+ tor_free(contents);
+ config_free(&state_format, new_state);
+
+ new_state = or_state_new();
+ } else if (contents) {
+ log_info(LD_GENERAL, "Loaded state from \"%s\"", fname);
+ } else {
+ log_info(LD_GENERAL, "Initialized state");
+ }
+ if (or_state_set(new_state) == -1) {
+ or_state_save_broken(fname);
+ }
+ new_state = NULL;
+ if (!contents) {
+ global_state->next_write = 0;
+ or_state_save(time(NULL));
+ }
+ r = 0;
+
+ done:
+ tor_free(fname);
+ tor_free(contents);
+ if (new_state)
+ config_free(&state_format, new_state);
+
+ return r;
+}
+
+/** Did the last time we tried to write the state file fail? If so, we
+ * should consider disabling such features as preemptive circuit generation
+ * to compute circuit-build-time. */
+static int last_state_file_write_failed = 0;
+
+/** Return whether the state file failed to write last time we tried. */
+int
+did_last_state_file_write_fail(void)
+{
+ return last_state_file_write_failed;
+}
+
+/** If writing the state to disk fails, try again after this many seconds. */
+#define STATE_WRITE_RETRY_INTERVAL 3600
+
+/** If we're a relay, how often should we checkpoint our state file even
+ * if nothing else dirties it? This will checkpoint ongoing stats like
+ * bandwidth used, per-country user stats, etc. */
+#define STATE_RELAY_CHECKPOINT_INTERVAL (12*60*60)
+
+/** Write the persistent state to disk. Return 0 for success, <0 on failure. */
+int
+or_state_save(time_t now)
+{
+ char *state, *contents;
+ char tbuf[ISO_TIME_LEN+1];
+ char *fname;
+
+ tor_assert(global_state);
+
+ if (global_state->next_write > now)
+ return 0;
+
+ /* Call everything else that might dirty the state even more, in order
+ * to avoid redundant writes. */
+ entry_guards_update_state(global_state);
+ rep_hist_update_state(global_state);
+ circuit_build_times_update_state(get_circuit_build_times(), global_state);
+ if (accounting_is_enabled(get_options()))
+ accounting_run_housekeeping(now);
+
+ global_state->LastWritten = now;
+
+ tor_free(global_state->TorVersion);
+ tor_asprintf(&global_state->TorVersion, "Tor %s", get_version());
+
+ state = config_dump(&state_format, NULL, global_state, 1, 0);
+ format_local_iso_time(tbuf, now);
+ tor_asprintf(&contents,
+ "# Tor state file last generated on %s local time\n"
+ "# Other times below are in UTC\n"
+ "# You *do not* need to edit this file.\n\n%s",
+ tbuf, state);
+ tor_free(state);
+ fname = get_datadir_fname("state");
+ if (write_str_to_file(fname, contents, 0)<0) {
+ log_warn(LD_FS, "Unable to write state to file \"%s\"; "
+ "will try again later", fname);
+ last_state_file_write_failed = 1;
+ tor_free(fname);
+ tor_free(contents);
+ /* Try again after STATE_WRITE_RETRY_INTERVAL (or sooner, if the state
+ * changes sooner). */
+ global_state->next_write = now + STATE_WRITE_RETRY_INTERVAL;
+ return -1;
+ }
+
+ last_state_file_write_failed = 0;
+ log_info(LD_GENERAL, "Saved state to \"%s\"", fname);
+ tor_free(fname);
+ tor_free(contents);
+
+ if (server_mode(get_options()))
+ global_state->next_write = now + STATE_RELAY_CHECKPOINT_INTERVAL;
+ else
+ global_state->next_write = TIME_MAX;
+
+ return 0;
+}
+
+/** 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 *
+get_transport_in_state_by_name(const char *transport)
+{
+ or_state_t *or_state = get_or_state();
+ config_line_t *line;
+ config_line_t *ret = NULL;
+ smartlist_t *items = NULL;
+
+ for (line = or_state->TransportProxies ; line ; line = line->next) {
+ tor_assert(!strcmp(line->key, "TransportProxy"));
+
+ items = smartlist_new();
+ smartlist_split_string(items, line->value, NULL,
+ SPLIT_SKIP_SPACE|SPLIT_IGNORE_BLANK, -1);
+ if (smartlist_len(items) != 2) /* broken state */
+ goto done;
+
+ if (!strcmp(smartlist_get(items, 0), transport)) {
+ ret = line;
+ goto done;
+ }
+
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ items = NULL;
+ }
+
+ done:
+ if (items) {
+ SMARTLIST_FOREACH(items, char*, s, tor_free(s));
+ smartlist_free(items);
+ }
+ return ret;
+}
+
+/** Return string containing the address:port part of the
+ * TransportProxy <b>line</b> for transport <b>transport</b>.
+ * If the line is corrupted, return NULL. */
+static const char *
+get_transport_bindaddr(const char *line, const char *transport)
+{
+ char *line_tmp = NULL;
+
+ if (strlen(line) < strlen(transport) + 2) {
+ goto broken_state;
+ } else {
+ /* line should start with the name of the transport and a space.
+ (for example, "obfs2 127.0.0.1:47245") */
+ tor_asprintf(&line_tmp, "%s ", transport);
+ if (strcmpstart(line, line_tmp))
+ goto broken_state;
+
+ tor_free(line_tmp);
+ return (line+strlen(transport)+1);
+ }
+
+ broken_state:
+ tor_free(line_tmp);
+ return NULL;
+}
+
+/** Return a string containing the address:port that a proxy transport
+ * should bind on. The string is stored on the heap and must be freed
+ * by the caller of this function. */
+char *
+get_stored_bindaddr_for_server_transport(const char *transport)
+{
+ char *default_addrport = NULL;
+ const char *stored_bindaddr = NULL;
+ config_line_t *line = NULL;
+
+ {
+ /* See if the user explicitly asked for a specific listening
+ address for this transport. */
+ char *conf_bindaddr = get_transport_bindaddr_from_config(transport);
+ if (conf_bindaddr)
+ return conf_bindaddr;
+ }
+
+ line = get_transport_in_state_by_name(transport);
+ if (!line) /* Found no references in state for this transport. */
+ goto no_bindaddr_found;
+
+ stored_bindaddr = get_transport_bindaddr(line->value, transport);
+ if (stored_bindaddr) /* found stored bindaddr in state file. */
+ return tor_strdup(stored_bindaddr);
+
+ no_bindaddr_found:
+ /** If we didn't find references for this pluggable transport in the
+ state file, we should instruct the pluggable transport proxy to
+ listen on INADDR_ANY on a random ephemeral port. */
+ tor_asprintf(&default_addrport, "%s:%s", fmt_addr32(INADDR_ANY), "0");
+ return default_addrport;
+}
+
+/** Save <b>transport</b> listening on <b>addr</b>:<b>port</b> to
+ state */
+void
+save_transport_to_state(const char *transport,
+ const tor_addr_t *addr, uint16_t port)
+{
+ or_state_t *state = get_or_state();
+
+ char *transport_addrport=NULL;
+
+ /** find where to write on the state */
+ config_line_t **next, *line;
+
+ /* see if this transport is already stored in state */
+ config_line_t *transport_line =
+ get_transport_in_state_by_name(transport);
+
+ if (transport_line) { /* if transport already exists in state... */
+ const char *prev_bindaddr = /* get its addrport... */
+ get_transport_bindaddr(transport_line->value, transport);
+ transport_addrport = tor_strdup(fmt_addrport(addr, port));
+
+ /* if transport in state has the same address as this one, life is good */
+ if (!strcmp(prev_bindaddr, transport_addrport)) {
+ log_info(LD_CONFIG, "Transport seems to have spawned on its usual "
+ "address:port.");
+ goto done;
+ } else { /* if addrport in state is different than the one we got */
+ log_info(LD_CONFIG, "Transport seems to have spawned on different "
+ "address:port. Let's update the state file with the new "
+ "address:port");
+ tor_free(transport_line->value); /* free the old line */
+ /* replace old addrport line with new line */
+ tor_asprintf(&transport_line->value, "%s %s", transport,
+ fmt_addrport(addr, port));
+ }
+ } else { /* never seen this one before; save it in state for next time */
+ log_info(LD_CONFIG, "It's the first time we see this transport. "
+ "Let's save its address:port");
+ next = &state->TransportProxies;
+ /* find the last TransportProxy line in the state and point 'next'
+ right after it */
+ line = state->TransportProxies;
+ while (line) {
+ next = &(line->next);
+ line = line->next;
+ }
+
+ /* allocate space for the new line and fill it in */
+ *next = line = tor_malloc_zero(sizeof(config_line_t));
+ line->key = tor_strdup("TransportProxy");
+ tor_asprintf(&line->value, "%s %s", transport, fmt_addrport(addr, port));
+
+ next = &(line->next);
+ }
+
+ if (!get_options()->AvoidDiskWrites)
+ or_state_mark_dirty(state, 0);
+
+ done:
+ tor_free(transport_addrport);
+}
+
+STATIC void
+or_state_free(or_state_t *state)
+{
+ if (!state)
+ return;
+
+ config_free(&state_format, state);
+}
+
+void
+or_state_free_all(void)
+{
+ or_state_free(global_state);
+ global_state = NULL;
+}
+
diff --git a/src/or/statefile.h b/src/or/statefile.h
new file mode 100644
index 000000000..15bb0b4aa
--- /dev/null
+++ b/src/or/statefile.h
@@ -0,0 +1,28 @@
+/* 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 TOR_STATEFILE_H
+#define TOR_STATEFILE_H
+
+MOCK_DECL(or_state_t *,get_or_state,(void));
+int did_last_state_file_write_fail(void);
+int or_state_save(time_t now);
+
+void save_transport_to_state(const char *transport_name,
+ const tor_addr_t *addr, uint16_t port);
+char *get_stored_bindaddr_for_server_transport(const char *transport);
+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);
+STATIC void or_state_free(or_state_t *state);
+STATIC or_state_t *or_state_new(void);
+#endif
+
+#endif
+
diff --git a/src/or/status.c b/src/or/status.c
index 04cd96eed..afaa9de84 100644
--- a/src/or/status.c
+++ b/src/or/status.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2012, The Tor Project, Inc. */
+/* Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -6,22 +6,32 @@
* \brief Keep status information and log the heartbeat messages.
**/
+#define STATUS_PRIVATE
+
#include "or.h"
+#include "circuituse.h"
#include "config.h"
#include "status.h"
#include "nodelist.h"
+#include "relay.h"
#include "router.h"
#include "circuitlist.h"
#include "main.h"
+#include "rephist.h"
+#include "hibernate.h"
+#include "rephist.h"
+#include "statefile.h"
+
+static void log_accounting(const time_t now, const or_options_t *options);
/** Return the total number of circuits. */
-static int
+STATIC int
count_circuits(void)
{
circuit_t *circ;
int nr=0;
- for (circ = _circuit_get_global_list(); circ; circ = circ->next)
+ TOR_LIST_FOREACH(circ, circuit_get_global_list(), head)
nr++;
return nr;
@@ -29,7 +39,7 @@ count_circuits(void)
/** Take seconds <b>secs</b> and return a newly allocated human-readable
* uptime string */
-static char *
+STATIC char *
secs_to_uptime(long secs)
{
long int days = secs / 86400;
@@ -56,7 +66,7 @@ secs_to_uptime(long secs)
/** Take <b>bytes</b> and returns a newly allocated human-readable usage
* string. */
-static char *
+STATIC char *
bytes_to_usage(uint64_t bytes)
{
char *bw_string = NULL;
@@ -84,11 +94,13 @@ log_heartbeat(time_t now)
char *bw_rcvd = NULL;
char *uptime = NULL;
const routerinfo_t *me;
+ double r = tls_get_write_overhead_ratio();
+ const int hibernating = we_are_hibernating();
const or_options_t *options = get_options();
(void)now;
- if (public_server_mode(options)) {
+ if (public_server_mode(options) && !hibernating) {
/* Let's check if we are in the current cached consensus. */
if (!(me = router_get_my_routerinfo()))
return -1; /* Something stinks, we won't even attempt this. */
@@ -103,8 +115,28 @@ log_heartbeat(time_t now)
bw_sent = bytes_to_usage(get_bytes_written());
log_fn(LOG_NOTICE, LD_HEARTBEAT, "Heartbeat: Tor's uptime is %s, with %d "
- "circuits open. I've sent %s and received %s.",
- uptime, count_circuits(),bw_sent,bw_rcvd);
+ "circuits open. I've sent %s and received %s.%s",
+ uptime, count_circuits(),bw_sent,bw_rcvd,
+ hibernating?" We are currently hibernating.":"");
+
+ if (server_mode(options) && accounting_is_enabled(options) && !hibernating) {
+ log_accounting(now, options);
+ }
+
+ if (stats_n_data_cells_packaged && !hibernating)
+ log_notice(LD_HEARTBEAT, "Average packaged cell fullness: %2.3f%%",
+ 100*(U64_TO_DBL(stats_n_data_bytes_packaged) /
+ U64_TO_DBL(stats_n_data_cells_packaged*RELAY_PAYLOAD_SIZE)) );
+
+ if (r > 1.0) {
+ double overhead = ( r - 1.0 ) * 100.0;
+ log_notice(LD_HEARTBEAT, "TLS write overhead: %.f%%", overhead);
+ }
+
+ if (public_server_mode(options))
+ rep_hist_log_circuit_handshake_stats(now);
+
+ circuit_log_ancient_one_hop_circuits(1800);
tor_free(uptime);
tor_free(bw_sent);
@@ -113,3 +145,27 @@ log_heartbeat(time_t now)
return 0;
}
+static void
+log_accounting(const time_t now, const or_options_t *options)
+{
+ or_state_t *state = get_or_state();
+ char *acc_rcvd = bytes_to_usage(state->AccountingBytesReadInInterval);
+ char *acc_sent = bytes_to_usage(state->AccountingBytesWrittenInInterval);
+ char *acc_max = bytes_to_usage(options->AccountingMax);
+ time_t interval_end = accounting_get_end_time();
+ char end_buf[ISO_TIME_LEN + 1];
+ char *remaining = NULL;
+ format_local_iso_time(end_buf, interval_end);
+ remaining = secs_to_uptime(interval_end - now);
+
+ log_notice(LD_HEARTBEAT, "Heartbeat: Accounting enabled. "
+ "Sent: %s / %s, Received: %s / %s. The "
+ "current accounting interval ends on %s, in %s.",
+ acc_sent, acc_max, acc_rcvd, acc_max, end_buf, remaining);
+
+ tor_free(acc_rcvd);
+ tor_free(acc_sent);
+ tor_free(acc_max);
+ tor_free(remaining);
+}
+
diff --git a/src/or/status.h b/src/or/status.h
index 189ac789e..13458ea47 100644
--- a/src/or/status.h
+++ b/src/or/status.h
@@ -1,10 +1,18 @@
-/* Copyright (c) 2010-2012, The Tor Project, Inc. */
+/* Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_STATUS_H
-#define _TOR_STATUS_H
+#ifndef TOR_STATUS_H
+#define TOR_STATUS_H
+
+#include "testsupport.h"
int log_heartbeat(time_t now);
+#ifdef STATUS_PRIVATE
+STATIC int count_circuits(void);
+STATIC char *secs_to_uptime(long secs);
+STATIC char *bytes_to_usage(uint64_t bytes);
+#endif
+
#endif
diff --git a/src/or/tor_main.c b/src/or/tor_main.c
index 2f4922317..05dc0bf0b 100644
--- a/src/or/tor_main.c
+++ b/src/or/tor_main.c
@@ -1,11 +1,11 @@
/* Copyright 2001-2004 Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-/** String describing which Tor subversion repository version the source was
- * built from. This string is generated by a bit of shell kludging int
- * src/or/Makefile.am, and is usually right.
+/** String describing which Tor Git repository version the source was
+ * built from. This string is generated by a bit of shell kludging in
+ * src/or/include.am, and is usually right.
*/
const char tor_git_revision[] =
#ifndef _MSC_VER
diff --git a/src/or/transports.c b/src/or/transports.c
index 4ba239562..dc3075416 100644
--- a/src/or/transports.c
+++ b/src/or/transports.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -39,43 +39,49 @@
* transport_t structs.
*
* When the managed proxy stops spitting METHOD lines (signified by a
- * '{S,C}METHODS DONE' message) we register all the transports
- * collected to the circuitbuild.c subsystem. At this point, the
- * pointers to transport_t can be transformed into dangling pointers
- * at any point by the circuitbuild.c subsystem, and so we replace all
- * transport_t pointers with strings describing the transport names.
- * We can still go from a transport name to a transport_t using the
- * fact that each transport name uniquely identifies a transport_t.
+ * '{S,C}METHODS DONE' message) we pass copies of its transports to
+ * the bridge subsystem. We keep copies of the 'transport_t's on the
+ * managed proxy to be able to associate the proxy with its
+ * transports, and we pass copies to the bridge subsystem so that
+ * transports can be associated with bridges.
+ * [ XXX We should try see whether the two copies are really needed
+ * and maybe cut it into a single copy of the 'transport_t' shared
+ * between the managed proxy and the bridge subsystem. Preliminary
+ * analysis shows that both copies are needed with the current code
+ * logic, because of race conditions that can cause dangling
+ * pointers. ]
*
- * <b>In even more detail, this is what happens when a SIGHUP
- * occurs:</b>
+ * <b>In even more detail, this is what happens when a config read
+ * (like a SIGHUP or a SETCONF) occurs:</b>
*
* We immediately destroy all unconfigured proxies (We shouldn't have
- * unconfigured proxies in the first place, except when SIGHUP rings
- * immediately after tor is launched.).
+ * unconfigured proxies in the first place, except when the config
+ * read happens immediately after tor is launched.).
*
* We mark all managed proxies and transports to signify that they
* must be removed if they don't contribute by the new torrc
* (we mark using the <b>marked_for_removal</b> element).
* We also mark all managed proxies to signify that they might need to
* be restarted so that they end up supporting all the transports the
- * new torrc wants them to support (using the <b>got_hup</b> element).
+ * new torrc wants them to support
+ * (we mark using the <b>was_around_before_config_read</b> element).
* We also clear their <b>transports_to_launch</b> list so that we can
* put there the transports we need to launch according to the new
* torrc.
*
* We then start parsing torrc again.
*
- * Everytime we encounter a transport line using a known pre-SIGHUP
- * managed proxy, we cleanse that proxy from the removal mark.
- * We also mark it as unconfigured so that on the next scheduled
- * events tick, we investigate whether we need to restart the proxy
- * so that it also spawns the new transports.
- * If the post-SIGHUP <b>transports_to_launch</b> list is identical to
- * the pre-SIGHUP one, it means that no changes were introduced to
- * this proxy during the SIGHUP and no restart has to take place.
+ * Everytime we encounter a transport line using a managed proxy that
+ * was around before the config read, we cleanse that proxy from the
+ * removal mark. We also toggle the <b>check_if_restarts_needed</b>
+ * flag, so that on the next <b>pt_configure_remaining_proxies</b>
+ * tick, we investigate whether we need to restart the proxy so that
+ * it also spawns the new transports. If the post-config-read
+ * <b>transports_to_launch</b> list is identical to the pre-config-read
+ * one, it means that no changes were introduced to this proxy during
+ * the config read and no restart has to take place.
*
- * During the post-SIGHUP torrc parsing, we unmark all transports
+ * During the post-config-read torrc parsing, we unmark all transports
* spawned by managed proxies that we find in our torrc.
* We do that so that if we don't need to restart a managed proxy, we
* can continue using its old transports normally.
@@ -90,18 +96,18 @@
#include "transports.h"
#include "util.h"
#include "router.h"
+#include "statefile.h"
+#include "entrynodes.h"
+#include "connection_or.h"
+#include "ext_orport.h"
+#include "control.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)
@@ -119,14 +125,232 @@ static INLINE void free_execve_args(char **arg);
#define PROTO_CMETHODS_DONE "CMETHODS DONE"
#define PROTO_SMETHODS_DONE "SMETHODS DONE"
-/** Number of environment variables for managed proxy clients/servers. */
-#define ENVIRON_SIZE_CLIENT 3
-#define ENVIRON_SIZE_SERVER 7 /* XXX known to be too high, but that's ok */
-
/** The first and only supported - at the moment - configuration
protocol version. */
#define PROTO_VERSION_ONE 1
+/** A list of pluggable transports found in torrc. */
+static smartlist_t *transport_list = NULL;
+
+/** Returns a transport_t struct for a transport proxy supporting the
+ protocol <b>name</b> listening at <b>addr</b>:<b>port</b> using
+ 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 *extra_info_args)
+{
+ transport_t *t = tor_malloc_zero(sizeof(transport_t));
+
+ tor_addr_copy(&t->addr, addr);
+ 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;
+}
+
+/** Free the pluggable transport struct <b>transport</b>. */
+void
+transport_free(transport_t *transport)
+{
+ if (!transport)
+ return;
+
+ tor_free(transport->name);
+ tor_free(transport->extra_info_args);
+ tor_free(transport);
+}
+
+/** Mark every entry of the transport list to be removed on our next call to
+ * sweep_transport_list unless it has first been un-marked. */
+void
+mark_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_new();
+ SMARTLIST_FOREACH(transport_list, transport_t *, t,
+ t->marked_for_removal = 1);
+}
+
+/** Remove every entry of the transport list that was marked with
+ * mark_transport_list if it has not subsequently been un-marked. */
+void
+sweep_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_new();
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, t) {
+ if (t->marked_for_removal) {
+ SMARTLIST_DEL_CURRENT(transport_list, t);
+ transport_free(t);
+ }
+ } SMARTLIST_FOREACH_END(t);
+}
+
+/** Initialize the pluggable transports list to empty, creating it if
+ * needed. */
+static void
+clear_transport_list(void)
+{
+ if (!transport_list)
+ transport_list = smartlist_new();
+ SMARTLIST_FOREACH(transport_list, transport_t *, t, transport_free(t));
+ smartlist_clear(transport_list);
+}
+
+/** Return a deep copy of <b>transport</b>. */
+static transport_t *
+transport_copy(const transport_t *transport)
+{
+ transport_t *new_transport = NULL;
+
+ tor_assert(transport);
+
+ new_transport = tor_malloc_zero(sizeof(transport_t));
+
+ new_transport->socks_version = transport->socks_version;
+ new_transport->name = tor_strdup(transport->name);
+ tor_addr_copy(&new_transport->addr, &transport->addr);
+ new_transport->port = transport->port;
+ new_transport->marked_for_removal = transport->marked_for_removal;
+
+ return new_transport;
+}
+
+/** Returns the transport in our transport list that has the name <b>name</b>.
+ * Else returns NULL. */
+transport_t *
+transport_get_by_name(const char *name)
+{
+ tor_assert(name);
+
+ if (!transport_list)
+ return NULL;
+
+ SMARTLIST_FOREACH_BEGIN(transport_list, transport_t *, transport) {
+ if (!strcmp(transport->name, name))
+ return transport;
+ } SMARTLIST_FOREACH_END(transport);
+
+ return NULL;
+}
+
+/** Resolve any conflicts that the insertion of transport <b>t</b>
+ * might cause.
+ * Return 0 if <b>t</b> is OK and should be registered, 1 if there is
+ * a transport identical to <b>t</b> already registered and -1 if
+ * <b>t</b> cannot be added due to conflicts. */
+static int
+transport_resolve_conflicts(const transport_t *t)
+{
+ /* This is how we resolve transport conflicts:
+
+ If there is already a transport with the same name and addrport,
+ we either have duplicate torrc lines OR we are here post-HUP and
+ this transport was here pre-HUP as well. In any case, mark the
+ old transport so that it doesn't get removed and ignore the new
+ one. Our caller has to free the new transport so we return '1' to
+ signify this.
+
+ If there is already a transport with the same name but different
+ addrport:
+ * if it's marked for removal, it means that it either has a lower
+ priority than 't' in torrc (otherwise the mark would have been
+ cleared by the paragraph above), or it doesn't exist at all in
+ the post-HUP torrc. We destroy the old transport and register 't'.
+ * if it's *not* marked for removal, it means that it was newly
+ added in the post-HUP torrc or that it's of higher priority, in
+ this case we ignore 't'. */
+ transport_t *t_tmp = transport_get_by_name(t->name);
+ if (t_tmp) { /* same name */
+ if (tor_addr_eq(&t->addr, &t_tmp->addr) && (t->port == t_tmp->port)) {
+ /* same name *and* addrport */
+ t_tmp->marked_for_removal = 0;
+ return 1;
+ } else { /* same name but different addrport */
+ char *new_transport_addrport =
+ tor_strdup(fmt_addrport(&t->addr, t->port));
+ if (t_tmp->marked_for_removal) { /* marked for removal */
+ log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s' "
+ "but there was already a transport marked for deletion at "
+ "'%s'. We deleted the old transport and registered the "
+ "new one.", t->name, new_transport_addrport,
+ fmt_addrport(&t_tmp->addr, t_tmp->port));
+ smartlist_remove(transport_list, t_tmp);
+ transport_free(t_tmp);
+ tor_free(new_transport_addrport);
+ } else { /* *not* marked for removal */
+ log_notice(LD_GENERAL, "You tried to add transport '%s' at '%s' "
+ "but the same transport already exists at '%s'. "
+ "Skipping.", t->name, new_transport_addrport,
+ fmt_addrport(&t_tmp->addr, t_tmp->port));
+ tor_free(new_transport_addrport);
+ return -1;
+ }
+ tor_free(new_transport_addrport);
+ }
+ }
+
+ return 0;
+}
+
+/** Add transport <b>t</b> to the internal list of pluggable
+ * transports.
+ * Returns 0 if the transport was added correctly, 1 if the same
+ * transport was already registered (in this case the caller must
+ * free the transport) and -1 if there was an error. */
+static int
+transport_add(transport_t *t)
+{
+ int r;
+ tor_assert(t);
+
+ r = transport_resolve_conflicts(t);
+
+ switch (r) {
+ case 0: /* should register transport */
+ if (!transport_list)
+ transport_list = smartlist_new();
+ smartlist_add(transport_list, t);
+ return 0;
+ default: /* let our caller know the return code */
+ return r;
+ }
+}
+
+/** Remember a new pluggable transport proxy at <b>addr</b>:<b>port</b>.
+ * <b>name</b> is set to the name of the protocol this proxy uses.
+ * <b>socks_ver</b> is set to the SOCKS version of the proxy. */
+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, NULL);
+
+ int r = transport_add(t);
+
+ switch (r) {
+ case -1:
+ default:
+ log_notice(LD_GENERAL, "Could not add transport %s at %s. Skipping.",
+ t->name, fmt_addrport(&t->addr, t->port));
+ transport_free(t);
+ return -1;
+ case 1:
+ log_info(LD_GENERAL, "Successfully registered transport %s at %s.",
+ t->name, fmt_addrport(&t->addr, t->port));
+ transport_free(t); /* falling */
+ return 0;
+ case 0:
+ log_info(LD_GENERAL, "Successfully registered transport %s at %s.",
+ t->name, fmt_addrport(&t->addr, t->port));
+ return 0;
+ }
+}
+
/** List of unconfigured managed proxies. */
static smartlist_t *managed_proxy_list = NULL;
/** Number of still unconfigured proxies. */
@@ -205,7 +429,7 @@ static void
add_transport_to_proxy(const char *transport, managed_proxy_t *mp)
{
tor_assert(mp->transports_to_launch);
- if (!smartlist_string_isin(mp->transports_to_launch, transport))
+ if (!smartlist_contains_string(mp->transports_to_launch, transport))
smartlist_add(mp->transports_to_launch, tor_strdup(transport));
}
@@ -217,11 +441,11 @@ proxy_needs_restart(const managed_proxy_t *mp)
{
/* mp->transport_to_launch is populated with the names of the
transports that must be launched *after* the SIGHUP.
- mp->transports is populated with the names of the transports that
- were launched *before* the SIGHUP.
+ mp->transports is populated with the transports that were
+ launched *before* the SIGHUP.
- If the two lists contain the same strings, we don't need to
- restart the proxy, since it already does what we want. */
+ Check if all the transports that need to be launched are already
+ launched: */
tor_assert(smartlist_len(mp->transports_to_launch) > 0);
tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
@@ -229,11 +453,11 @@ proxy_needs_restart(const managed_proxy_t *mp)
if (smartlist_len(mp->transports_to_launch) != smartlist_len(mp->transports))
goto needs_restart;
- SMARTLIST_FOREACH_BEGIN(mp->transports_to_launch, char *, t_t_l) {
- if (!smartlist_string_isin(mp->transports, t_t_l))
+ SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
+ if (!smartlist_contains_string(mp->transports_to_launch, t->name))
goto needs_restart;
- } SMARTLIST_FOREACH_END(t_t_l);
+ } SMARTLIST_FOREACH_END(t);
return 0;
@@ -245,6 +469,7 @@ proxy_needs_restart(const managed_proxy_t *mp)
* preparations and then flag its state so that it will be relaunched
* in the next tick. */
static void
+
proxy_prepare_for_restart(managed_proxy_t *mp)
{
transport_t *t_tmp = NULL;
@@ -255,16 +480,17 @@ proxy_prepare_for_restart(managed_proxy_t *mp)
tor_process_handle_destroy(mp->process_handle, 1);
mp->process_handle = NULL;
- /* destroy all its old transports. we no longer use them. */
- SMARTLIST_FOREACH_BEGIN(mp->transports, const char *, t_name) {
- t_tmp = transport_get_by_name(t_name);
+ /* destroy all its registered transports, since we will no longer
+ use them. */
+ SMARTLIST_FOREACH_BEGIN(mp->transports, const transport_t *, t) {
+ t_tmp = transport_get_by_name(t->name);
if (t_tmp)
t_tmp->marked_for_removal = 1;
- } SMARTLIST_FOREACH_END(t_name);
+ } SMARTLIST_FOREACH_END(t);
sweep_transport_list();
- /* free the transport names in mp->transports */
- SMARTLIST_FOREACH(mp->transports, char *, t_name, tor_free(t_name));
+ /* free the transport in mp->transports */
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
smartlist_clear(mp->transports);
/* flag it as an infant proxy so that it gets launched on next tick */
@@ -310,11 +536,11 @@ launch_managed_proxy(managed_proxy_t *mp)
}
/** Check if any of the managed proxies we are currently trying to
- * configure have anything new to say. This is called from
- * run_scheduled_events(). */
+ * configure has anything new to say. */
void
pt_configure_remaining_proxies(void)
{
+ int at_least_a_proxy_config_finished = 0;
smartlist_t *tmp = smartlist_new();
log_debug(LD_CONFIG, "Configuring remaining managed proxies (%d)!",
@@ -327,14 +553,15 @@ pt_configure_remaining_proxies(void)
assert_unconfigured_count_ok();
SMARTLIST_FOREACH_BEGIN(tmp, managed_proxy_t *, mp) {
- tor_assert(mp->conf_state != PT_PROTO_BROKEN ||
+ tor_assert(mp->conf_state != PT_PROTO_BROKEN &&
mp->conf_state != PT_PROTO_FAILED_LAUNCH);
- if (mp->got_hup) {
- mp->got_hup = 0;
+ if (mp->was_around_before_config_read) {
+ /* This proxy is marked by a config read. Check whether we need
+ to restart it. */
+
+ mp->was_around_before_config_read = 0;
- /* This proxy is marked by a SIGHUP. Check whether we need to
- restart it. */
if (proxy_needs_restart(mp)) {
log_info(LD_GENERAL, "Preparing managed proxy '%s' for restart.",
mp->argv[0]);
@@ -350,24 +577,29 @@ 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 (configure_proxy(mp) == 1)
+ at_least_a_proxy_config_finished = 1;
} SMARTLIST_FOREACH_END(mp);
smartlist_free(tmp);
check_if_restarts_needed = 0;
assert_unconfigured_count_ok();
-}
-#ifdef _WIN32
+ if (at_least_a_proxy_config_finished)
+ 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 pos;
- char stdout_buf[200];
- smartlist_t *lines = NULL;
+ int configuration_finished = 0;
+ smartlist_t *proxy_output = NULL;
+ enum stream_status stream_status = 0;
/* if we haven't launched the proxy yet, do it now */
if (mp->conf_state == PT_PROTO_INFANT) {
@@ -375,34 +607,31 @@ 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);
tor_assert(mp->process_handle);
- pos = tor_read_all_handle(tor_process_get_stdout_pipe(mp->process_handle),
- stdout_buf, sizeof(stdout_buf) - 1, NULL);
- if (pos < 0) {
- log_notice(LD_GENERAL, "Failed to read data from managed proxy '%s'.",
- mp->argv[0]);
- mp->conf_state = PT_PROTO_BROKEN;
+ proxy_output =
+ tor_get_lines_from_handle(tor_process_get_stdout_pipe(mp->process_handle),
+ &stream_status);
+ if (!proxy_output) { /* failed to get input from proxy */
+ if (stream_status != IO_STREAM_EAGAIN) { /* bad stream status! */
+ mp->conf_state = PT_PROTO_BROKEN;
+ log_warn(LD_GENERAL, "The communication stream of managed proxy '%s' "
+ "is '%s'. Most probably the managed proxy stopped running. "
+ "This might be a bug of the managed proxy, a bug of Tor, or "
+ "a misconfiguration. Please enable logging on your managed "
+ "proxy and check the logs for errors.",
+ mp->argv[0], stream_status_to_string(stream_status));
+ }
+
goto done;
}
- if (pos == 0) /* proxy has nothing interesting to say. */
- return;
-
- /* End with a null even if there isn't a \r\n at the end */
- /* TODO: What if this is a partial line? */
- stdout_buf[pos] = '\0';
-
- /* Split up the buffer */
- lines = smartlist_new();
- tor_split_lines(lines, stdout_buf, pos);
-
/* Handle lines. */
- SMARTLIST_FOREACH_BEGIN(lines, const char *, line) {
+ SMARTLIST_FOREACH_BEGIN(proxy_output, const char *, line) {
handle_proxy_line(line, mp);
if (proxy_configuration_finished(mp))
goto done;
@@ -410,126 +639,66 @@ 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);
-
- if (lines)
- smartlist_free(lines);
-}
-
-#else /* _WIN32 */
-
-/** Attempt to continue configuring managed proxy <b>mp</b>. */
-static void
-configure_proxy(managed_proxy_t *mp)
-{
- enum stream_status r;
- char stdout_buf[200];
-
- /* if we haven't launched the proxy yet, do it now */
- if (mp->conf_state == PT_PROTO_INFANT) {
- if (launch_managed_proxy(mp) < 0) { /* launch fail */
- mp->conf_state = PT_PROTO_FAILED_LAUNCH;
- handle_finished_proxy(mp);
- }
- return;
+ configuration_finished = 1;
}
- tor_assert(mp->conf_state != PT_PROTO_INFANT);
- tor_assert(mp->process_handle);
-
- while (1) {
- r = get_string_from_pipe(tor_process_get_stdout_pipe(mp->process_handle),
- stdout_buf, sizeof(stdout_buf) - 1);
-
- if (r == IO_STREAM_OKAY) { /* got a line; handle it! */
- handle_proxy_line((const char *)stdout_buf, mp);
- } else if (r == IO_STREAM_EAGAIN) { /* check back later */
- return;
- } else if (r == IO_STREAM_CLOSED || r == IO_STREAM_TERM) { /* snap! */
- log_warn(LD_GENERAL, "Our communication channel with the managed proxy "
- "'%s' closed. Most probably application stopped running.",
- mp->argv[0]);
- mp->conf_state = PT_PROTO_BROKEN;
- } else { /* unknown stream status */
- log_warn(LD_BUG, "Unknown stream status '%d' while configuring managed "
- "proxy '%s'.", (int)r, mp->argv[0]);
- }
-
- /* if the proxy finished configuring, exit the loop. */
- if (proxy_configuration_finished(mp)) {
- handle_finished_proxy(mp);
- return;
- }
+ if (proxy_output) {
+ SMARTLIST_FOREACH(proxy_output, char *, cp, tor_free(cp));
+ smartlist_free(proxy_output);
}
-}
-#endif /* _WIN32 */
+ return configuration_finished;
+}
/** Register server managed proxy <b>mp</b> transports to state */
static void
-register_server_proxy(managed_proxy_t *mp)
+register_server_proxy(const managed_proxy_t *mp)
{
- /* After we register this proxy's transports, we switch its
- mp->transports to a list containing strings of its transport
- names. (See transports.h) */
- smartlist_t *sm_tmp = smartlist_new();
-
tor_assert(mp->conf_state != PT_PROTO_COMPLETED);
+
SMARTLIST_FOREACH_BEGIN(mp->transports, transport_t *, t) {
save_transport_to_state(t->name, &t->addr, t->port);
- log_notice(LD_GENERAL, "Registered server transport '%s' at '%s:%d'",
- t->name, fmt_addr(&t->addr), (int)t->port);
- smartlist_add(sm_tmp, tor_strdup(t->name));
+ log_notice(LD_GENERAL, "Registered server transport '%s' at '%s'",
+ t->name, fmt_addrport(&t->addr, t->port));
+ control_event_transport_launched("server", t->name, &t->addr, t->port);
} SMARTLIST_FOREACH_END(t);
-
- /* Since server proxies don't register their transports in the
- circuitbuild.c subsystem, it's our duty to free them when we
- switch mp->transports to strings. */
- SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
- smartlist_free(mp->transports);
-
- mp->transports = sm_tmp;
}
/** Register all the transports supported by client managed proxy
* <b>mp</b> to the bridge subsystem. */
static void
-register_client_proxy(managed_proxy_t *mp)
+register_client_proxy(const managed_proxy_t *mp)
{
int r;
- /* After we register this proxy's transports, we switch its
- mp->transports to a list containing strings of its transport
- names. (See transports.h) */
- smartlist_t *sm_tmp = smartlist_new();
tor_assert(mp->conf_state != PT_PROTO_COMPLETED);
+
SMARTLIST_FOREACH_BEGIN(mp->transports, transport_t *, t) {
- r = transport_add(t);
+ transport_t *transport_tmp = transport_copy(t);
+ r = transport_add(transport_tmp);
switch (r) {
case -1:
log_notice(LD_GENERAL, "Could not add transport %s. Skipping.", t->name);
- transport_free(t);
+ transport_free(transport_tmp);
break;
case 0:
- log_info(LD_GENERAL, "Succesfully registered transport %s", t->name);
- smartlist_add(sm_tmp, tor_strdup(t->name));
+ log_info(LD_GENERAL, "Successfully registered transport %s", t->name);
+ control_event_transport_launched("client", t->name, &t->addr, t->port);
break;
case 1:
- log_info(LD_GENERAL, "Succesfully registered transport %s", t->name);
- smartlist_add(sm_tmp, tor_strdup(t->name));
- transport_free(t);
+ log_info(LD_GENERAL, "Successfully registered transport %s", t->name);
+ control_event_transport_launched("client", t->name, &t->addr, t->port);
+ transport_free(transport_tmp);
break;
}
} SMARTLIST_FOREACH_END(t);
-
- smartlist_free(mp->transports);
- mp->transports = sm_tmp;
}
/** Register the transports of managed proxy <b>mp</b>. */
static INLINE void
-register_proxy(managed_proxy_t *mp)
+register_proxy(const managed_proxy_t *mp)
{
if (mp->is_server)
register_server_proxy(mp);
@@ -538,14 +707,11 @@ register_proxy(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)
{
- if (mp->conf_state != PT_PROTO_COMPLETED)
- SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
- else
- SMARTLIST_FOREACH(mp->transports, char *, t_name, tor_free(t_name));
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
/* free the transports smartlist */
smartlist_free(mp->transports);
@@ -555,7 +721,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);
@@ -592,7 +759,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
@@ -623,7 +789,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)",
@@ -724,7 +890,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
@@ -740,7 +906,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)) {
@@ -781,14 +947,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;
@@ -805,6 +971,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);
@@ -815,7 +984,7 @@ parse_smethod_line(const char *line, managed_proxy_t *mp)
}
addrport = smartlist_get(items, 2);
- if (tor_addr_port_split(LOG_PROTOCOL_WARN, addrport, &address, &port)<0) {
+ if (tor_addr_port_split(LOG_WARN, addrport, &address, &port)<0) {
log_warn(LD_CONFIG, "Error parsing transport "
"address '%s'", addrport);
goto err;
@@ -832,7 +1001,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;
@@ -858,7 +1039,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;
@@ -907,7 +1088,7 @@ parse_cmethod_line(const char *line, managed_proxy_t *mp)
}
addrport = smartlist_get(items, 3);
- if (tor_addr_port_split(LOG_PROTOCOL_WARN, addrport, &address, &port)<0) {
+ if (tor_addr_port_split(LOG_WARN, addrport, &address, &port)<0) {
log_warn(LD_CONFIG, "Error parsing transport "
"address '%s'", addrport);
goto err;
@@ -924,7 +1105,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;
@@ -947,6 +1128,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
@@ -981,6 +1206,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
@@ -1018,8 +1245,10 @@ create_managed_proxy_environment(const managed_proxy_t *mp)
{
char *orport_tmp =
get_first_listener_addrport_string(CONN_TYPE_OR_LISTENER);
- smartlist_add_asprintf(envs, "TOR_PT_ORPORT=%s", orport_tmp);
- tor_free(orport_tmp);
+ if (orport_tmp) {
+ smartlist_add_asprintf(envs, "TOR_PT_ORPORT=%s", orport_tmp);
+ tor_free(orport_tmp);
+ }
}
{
@@ -1028,18 +1257,46 @@ 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();
+
+ if (ext_or_addrport_tmp) {
+ 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) {
set_environment_variable_in_smartlist(merged_env_vars, env_var,
- _tor_free, 1);
+ tor_free_, 1);
} SMARTLIST_FOREACH_END(env_var);
env = process_environment_make(merged_env_vars);
@@ -1058,7 +1315,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)
{
@@ -1109,19 +1366,20 @@ pt_kickstart_proxy(const smartlist_t *transport_list,
managed_proxy_create(transport_list, proxy_argv, is_server);
} else { /* known proxy. add its transport to its transport list */
- if (mp->got_hup) {
- /* If the managed proxy we found is marked by a SIGHUP, it means
- that it's not useless and should be kept. If it's marked for
- removal, unmark it and increase the unconfigured proxies so
- that we try to restart it if we need to. Afterwards, check if
- a transport_t for 'transport' used to exist before the SIGHUP
- and make sure it doesn't get deleted because we might reuse
- it. */
+ if (mp->was_around_before_config_read) {
+ /* If this managed proxy was around even before we read the
+ config this time, it means that it was already enabled before
+ and is not useless and should be kept. If it's marked for
+ removal, unmark it and make sure that we check whether it
+ needs to be restarted. */
if (mp->marked_for_removal) {
mp->marked_for_removal = 0;
check_if_restarts_needed = 1;
}
+ /* For each new transport, check if the managed proxy used to
+ support it before the SIGHUP. If that was the case, make sure
+ it doesn't get removed because we might reuse it. */
SMARTLIST_FOREACH_BEGIN(transport_list, const char *, transport) {
old_transport = transport_get_by_name(transport);
if (old_transport)
@@ -1143,7 +1401,7 @@ free_execve_args(char **arg)
char **tmp = arg;
while (*tmp) /* use the fact that the last element of the array is a
NULL pointer to know when to stop freeing */
- _tor_free(*tmp++);
+ tor_free_(*tmp++);
tor_free(arg);
}
@@ -1170,8 +1428,10 @@ pt_prepare_proxy_list_for_config_read(void)
tor_assert(mp->conf_state == PT_PROTO_COMPLETED);
+ /* Mark all proxies for removal, and also note that they have been
+ here before the config read. */
mp->marked_for_removal = 1;
- mp->got_hup = 1;
+ mp->was_around_before_config_read = 1;
SMARTLIST_FOREACH(mp->transports_to_launch, char *, t, tor_free(t));
smartlist_clear(mp->transports_to_launch);
} SMARTLIST_FOREACH_END(mp);
@@ -1181,6 +1441,153 @@ pt_prepare_proxy_list_for_config_read(void)
tor_assert(unconfigured_proxies_n == 0);
}
+/** Return a smartlist containing the ports where our pluggable
+ * transports are listening. */
+smartlist_t *
+get_transport_proxy_ports(void)
+{
+ smartlist_t *sl = NULL;
+
+ if (!managed_proxy_list)
+ return NULL;
+
+ /** XXX assume that external proxy ports have been forwarded
+ manually */
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, const managed_proxy_t *, mp) {
+ if (!mp->is_server || mp->conf_state != PT_PROTO_COMPLETED)
+ continue;
+
+ if (!sl) sl = smartlist_new();
+
+ tor_assert(mp->transports);
+ SMARTLIST_FOREACH(mp->transports, const transport_t *, t,
+ smartlist_add_asprintf(sl, "%u:%u", t->port, t->port));
+
+ } SMARTLIST_FOREACH_END(mp);
+
+ return sl;
+}
+
+/** Return the pluggable transport string that we should display in
+ * our extra-info descriptor. If we shouldn't display such a string,
+ * or we have nothing to display, return NULL. The string is
+ * allocated on the heap and it's the responsibility of the caller to
+ * free it. */
+char *
+pt_get_extra_info_descriptor_string(void)
+{
+ char *the_string = NULL;
+ smartlist_t *string_chunks = NULL;
+
+ if (!managed_proxy_list)
+ return NULL;
+
+ string_chunks = smartlist_new();
+
+ /* For each managed proxy, add its transports to the chunks list. */
+ SMARTLIST_FOREACH_BEGIN(managed_proxy_list, const managed_proxy_t *, mp) {
+ if ((!mp->is_server) || (mp->conf_state != PT_PROTO_COMPLETED))
+ continue;
+
+ 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. */
+ const char *addrport = NULL;
+ uint32_t external_ip_address = 0;
+ if (tor_addr_is_null(&t->addr) &&
+ router_pick_published_address(get_options(),
+ &external_ip_address) >= 0) {
+ tor_addr_t addr;
+ tor_addr_from_ipv4h(&addr, external_ip_address);
+ addrport = fmt_addrport(&addr, t->port);
+ } else {
+ 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%s",
+ t->name, addrport,
+ transport_args ? transport_args : "");
+ tor_free(transport_args);
+ } SMARTLIST_FOREACH_END(t);
+
+ } SMARTLIST_FOREACH_END(mp);
+
+ if (smartlist_len(string_chunks) == 0) {
+ smartlist_free(string_chunks);
+ return NULL;
+ }
+
+ /* Join all the chunks into the final string. */
+ the_string = smartlist_join_strings(string_chunks, "\n", 1, NULL);
+
+ SMARTLIST_FOREACH(string_chunks, char *, s, tor_free(s));
+ smartlist_free(string_chunks);
+
+ return the_string;
+}
+
+/** Stringify the SOCKS arguments in <b>socks_args</b> according to
+ * 180_pluggable_transport.txt. The string is allocated on the heap
+ * and it's the responsibility of the caller to free it after use. */
+char *
+pt_stringify_socks_args(const smartlist_t *socks_args)
+{
+ /* tmp place to store escaped socks arguments, so that we can
+ concatenate them up afterwards */
+ smartlist_t *sl_tmp = NULL;
+ char *escaped_string = NULL;
+ char *new_string = NULL;
+
+ tor_assert(socks_args);
+ tor_assert(smartlist_len(socks_args) > 0);
+
+ sl_tmp = smartlist_new();
+
+ SMARTLIST_FOREACH_BEGIN(socks_args, const char *, s) {
+ /* Escape ';' and '\'. */
+ escaped_string = tor_escape_str_for_pt_args(s, ";\\");
+ if (!escaped_string)
+ goto done;
+
+ smartlist_add(sl_tmp, escaped_string);
+ } SMARTLIST_FOREACH_END(s);
+
+ new_string = smartlist_join_strings(sl_tmp, ";", 0, NULL);
+
+ done:
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+
+ return new_string;
+}
+
+/** Return a string of the SOCKS arguments that we should pass to the
+ * pluggable transports proxy in <b>addr</b>:<b>port</b> according to
+ * 180_pluggable_transport.txt. The string is allocated on the heap
+ * and it's the responsibility of the caller to free it after use. */
+char *
+pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr, uint16_t port)
+{
+ const smartlist_t *socks_args = NULL;
+
+ socks_args = get_socks_args_by_bridge_addrport(addr, port);
+ if (!socks_args)
+ return NULL;
+
+ return pt_stringify_socks_args(socks_args);
+}
+
/** The tor config was read.
* Destroy all managed proxies that were marked by a previous call to
* prepare_proxy_list_for_config_read() and are not used by the new
@@ -1204,6 +1611,12 @@ sweep_proxy_list(void)
void
pt_free_all(void)
{
+ if (transport_list) {
+ clear_transport_list();
+ smartlist_free(transport_list);
+ transport_list = NULL;
+ }
+
if (managed_proxy_list) {
/* If the proxy is in PT_PROTO_COMPLETED, it has registered its
transports and it's the duty of the circuitbuild.c subsystem to
diff --git a/src/or/transports.h b/src/or/transports.h
index 02f159a5d..1365ead00 100644
--- a/src/or/transports.h
+++ b/src/or/transports.h
@@ -1,6 +1,6 @@
/* Copyright (c) 2003-2004, Roger Dingledine
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -11,6 +11,33 @@
#ifndef TOR_TRANSPORTS_H
#define TOR_TRANSPORTS_H
+/** Represents a pluggable transport used by a bridge. */
+typedef struct transport_t {
+ /** SOCKS version: One of PROXY_SOCKS4, PROXY_SOCKS5. */
+ int socks_version;
+ /** Name of pluggable transport protocol */
+ char *name;
+ /** The IP address where the transport bound and is waiting for
+ * connections. */
+ tor_addr_t addr;
+ /** Port of proxy */
+ uint16_t port;
+ /** 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);
+void sweep_transport_list(void);
+int transport_add_from_config(const tor_addr_t *addr, uint16_t port,
+ const char *name, int socks_ver);
+void transport_free(transport_t *transport);
+
+transport_t *transport_get_by_name(const char *name);
+
void pt_kickstart_proxy(const smartlist_t *transport_list, char **proxy_argv,
int is_server);
@@ -23,11 +50,19 @@ void pt_configure_remaining_proxies(void);
int pt_proxies_configuration_pending(void);
+char *pt_get_extra_info_descriptor_string(void);
+
void pt_free_all(void);
void pt_prepare_proxy_list_for_config_read(void);
void sweep_proxy_list(void);
+smartlist_t *get_transport_proxy_ports(void);
+char *pt_stringify_socks_args(const smartlist_t *socks_args);
+
+char *pt_get_socks_args_for_proxy_addrport(const tor_addr_t *addr,
+ uint16_t port);
+
#ifdef PT_PRIVATE
/** State of the managed proxy configuration protocol. */
enum pt_proto_state {
@@ -62,43 +97,31 @@ typedef struct {
* this flag to signify that this proxy might need to be restarted
* so that it can listen for other transports according to the new
* torrc. */
- unsigned int got_hup : 1;
+ unsigned int was_around_before_config_read : 1;
/* transports to-be-launched by this proxy */
smartlist_t *transports_to_launch;
/* The 'transports' list contains all the transports this proxy has
- launched.
-
- Before a managed_proxy_t reaches the PT_PROTO_COMPLETED phase,
- this smartlist contains a 'transport_t' for every transport it
- has launched.
-
- When the managed_proxy_t reaches the PT_PROTO_COMPLETED phase, it
- registers all its transports to the circuitbuild.c subsystem. At
- that point the 'transport_t's are owned by the circuitbuild.c
- subsystem.
-
- To avoid carrying dangling 'transport_t's in this smartlist,
- right before the managed_proxy_t reaches the PT_PROTO_COMPLETED
- phase we replace all 'transport_t's with strings of their
- transport names.
-
- So, tl;dr:
- When (conf_state != PT_PROTO_COMPLETED) this list carries
- (transport_t *).
- When (conf_state == PT_PROTO_COMPLETED) this list carries
- (char *).
- */
+ launched. */
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);
+
+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);
-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 configure_proxy(managed_proxy_t *mp);
#endif
diff --git a/src/test/Makefile.am b/src/test/Makefile.am
deleted file mode 100644
index 31a464ee7..000000000
--- a/src/test/Makefile.am
+++ /dev/null
@@ -1,49 +0,0 @@
-TESTS = test
-
-noinst_PROGRAMS = test test-child bench
-
-AM_CPPFLAGS = -DSHARE_DATADIR="\"$(datadir)\"" \
- -DLOCALSTATEDIR="\"$(localstatedir)\"" \
- -DBINDIR="\"$(bindir)\"" \
- -I"$(top_srcdir)/src/or"
-
-# -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.
-
-test_SOURCES = \
- test.c \
- test_addr.c \
- test_containers.c \
- test_crypto.c \
- test_data.c \
- test_dir.c \
- test_microdesc.c \
- test_pt.c \
- test_util.c \
- test_config.c \
- tinytest.c
-
-bench_SOURCES = \
- bench.c
-
-test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
- @TOR_LDFLAGS_libevent@
-test_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
- ../common/libor-event.a \
- @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
- @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
- @TOR_LDFLAGS_libevent@
-bench_LDADD = ../or/libtor.a ../common/libor.a ../common/libor-crypto.a \
- ../common/libor-event.a \
- @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
- @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-noinst_HEADERS = \
- tinytest.h \
- tinytest_macros.h \
- test.h
-
-
diff --git a/src/test/Makefile.nmake b/src/test/Makefile.nmake
index aec477cf9..822431f3b 100644
--- a/src/test/Makefile.nmake
+++ b/src/test/Makefile.nmake
@@ -1,20 +1,33 @@
-all: test.exe
+all: test.exe test-child.exe bench.exe
-CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common /I ..\or
+CFLAGS = /I ..\win32 /I ..\..\..\build-alpha\include /I ..\common /I ..\or \
+ /I ..\ext
LIBS = ..\..\..\build-alpha\lib\libevent.lib \
..\..\..\build-alpha\lib\libcrypto.lib \
..\..\..\build-alpha\lib\libssl.lib \
..\..\..\build-alpha\lib\libz.lib \
..\or\libtor.lib \
- ws2_32.lib advapi32.lib shell32.lib
+ ws2_32.lib advapi32.lib shell32.lib \
+ crypt32.lib gdi32.lib user32.lib
TEST_OBJECTS = test.obj test_addr.obj test_containers.obj \
- test_crypto.obj test_data.obj test_dir.obj test_microdesc.obj \
- test_pt.obj test_util.obj test_config.obj tinytest.obj
+ test_controller_events.ogj test_crypto.obj test_data.obj test_dir.obj \
+ test_microdesc.obj test_pt.obj test_util.obj test_config.obj \
+ test_cell_formats.obj test_replay.obj test_introduce.obj tinytest.obj \
+ test_hs.obj
+
+tinytest.obj: ..\ext\tinytest.c
+ $(CC) $(CFLAGS) /D snprintf=_snprintf /c ..\ext\tinytest.c
test.exe: $(TEST_OBJECTS)
- $(CC) $(CFLAGS) $(LIBS) ..\common\*.lib $(TEST_OBJECTS)
+ $(CC) $(CFLAGS) $(LIBS) ..\common\*.lib $(TEST_OBJECTS) /Fe$@
+
+bench.exe: bench.obj
+ $(CC) $(CFLAGS) bench.obj $(LIBS) ..\common\*.lib /Fe$@
+
+test-child.exe: test-child.obj
+ $(CC) $(CFLAGS) test-child.obj /Fe$@
clean:
- del $(TEST_OBJECTS) *.lib test.exe
+ del *.obj *.lib test.exe bench.exe test-child.exe
diff --git a/src/test/bench.c b/src/test/bench.c
index 3eae532d3..f6c33626f 100644
--- a/src/test/bench.c
+++ b/src/test/bench.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
@@ -14,10 +14,22 @@ const char tor_git_revision[] = "";
#include "orconfig.h"
-#define RELAY_PRIVATE
-
#include "or.h"
+#include "onion_tap.h"
#include "relay.h"
+#include <openssl/opensslv.h>
+#include <openssl/evp.h>
+#ifndef OPENSSL_NO_EC
+#include <openssl/ec.h>
+#include <openssl/ecdh.h>
+#include <openssl/obj_mac.h>
+#endif
+
+#include "config.h"
+#ifdef CURVE25519_ENABLED
+#include "crypto_curve25519.h"
+#include "onion_ntor.h"
+#endif
#if defined(HAVE_CLOCK_GETTIME) && defined(CLOCK_PROCESS_CPUTIME_ID)
static uint64_t nanostart;
@@ -97,6 +109,132 @@ bench_aes(void)
}
static void
+bench_onion_TAP(void)
+{
+ const int iters = 1<<9;
+ int i;
+ crypto_pk_t *key, *key2;
+ uint64_t start, end;
+ char os[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char or[TAP_ONIONSKIN_REPLY_LEN];
+ crypto_dh_t *dh_out;
+
+ key = crypto_pk_new();
+ key2 = crypto_pk_new();
+ if (crypto_pk_generate_key_with_bits(key, 1024) < 0)
+ goto done;
+ if (crypto_pk_generate_key_with_bits(key2, 1024) < 0)
+ goto done;
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ onion_skin_TAP_create(key, &dh_out, os);
+ crypto_dh_free(dh_out);
+ }
+ end = perftime();
+ printf("Client-side, part 1: %f usec.\n", NANOCOUNT(start, end, iters)/1e3);
+
+ onion_skin_TAP_create(key, &dh_out, os);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char key_out[CPATH_KEY_MATERIAL_LEN];
+ onion_skin_TAP_server_handshake(os, key, NULL, or,
+ key_out, sizeof(key_out));
+ }
+ end = perftime();
+ printf("Server-side, key guessed right: %f usec\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char key_out[CPATH_KEY_MATERIAL_LEN];
+ onion_skin_TAP_server_handshake(os, key2, key, or,
+ key_out, sizeof(key_out));
+ }
+ end = perftime();
+ printf("Server-side, key guessed wrong: %f usec.\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ crypto_dh_t *dh;
+ char key_out[CPATH_KEY_MATERIAL_LEN];
+ int s;
+ dh = crypto_dh_dup(dh_out);
+ s = onion_skin_TAP_client_handshake(dh, or, key_out, sizeof(key_out));
+ crypto_dh_free(dh);
+ tor_assert(s == 0);
+ }
+ end = perftime();
+ printf("Client-side, part 2: %f usec.\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ done:
+ crypto_pk_free(key);
+ crypto_pk_free(key2);
+}
+
+#ifdef CURVE25519_ENABLED
+static void
+bench_onion_ntor(void)
+{
+ const int iters = 1<<10;
+ int i;
+ curve25519_keypair_t keypair1, keypair2;
+ uint64_t start, end;
+ uint8_t os[NTOR_ONIONSKIN_LEN];
+ uint8_t or[NTOR_REPLY_LEN];
+ ntor_handshake_state_t *state = NULL;
+ uint8_t nodeid[DIGEST_LEN];
+ di_digest256_map_t *keymap = NULL;
+
+ curve25519_secret_key_generate(&keypair1.seckey, 0);
+ curve25519_public_key_generate(&keypair1.pubkey, &keypair1.seckey);
+ curve25519_secret_key_generate(&keypair2.seckey, 0);
+ curve25519_public_key_generate(&keypair2.pubkey, &keypair2.seckey);
+ dimap_add_entry(&keymap, keypair1.pubkey.public_key, &keypair1);
+ dimap_add_entry(&keymap, keypair2.pubkey.public_key, &keypair2);
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ onion_skin_ntor_create(nodeid, &keypair1.pubkey, &state, os);
+ ntor_handshake_state_free(state);
+ state = NULL;
+ }
+ end = perftime();
+ printf("Client-side, part 1: %f usec.\n", NANOCOUNT(start, end, iters)/1e3);
+
+ state = NULL;
+ onion_skin_ntor_create(nodeid, &keypair1.pubkey, &state, os);
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ uint8_t key_out[CPATH_KEY_MATERIAL_LEN];
+ onion_skin_ntor_server_handshake(os, keymap, NULL, nodeid, or,
+ key_out, sizeof(key_out));
+ }
+ end = perftime();
+ printf("Server-side: %f usec\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ uint8_t key_out[CPATH_KEY_MATERIAL_LEN];
+ int s;
+ s = onion_skin_ntor_client_handshake(state, or, key_out, sizeof(key_out));
+ tor_assert(s == 0);
+ }
+ end = perftime();
+ printf("Client-side, part 2: %f usec.\n",
+ NANOCOUNT(start, end, iters)/1e3);
+
+ ntor_handshake_state_free(state);
+ dimap_free(keymap, NULL);
+}
+#endif
+
+static void
bench_cell_aes(void)
{
uint64_t start, end;
@@ -175,18 +313,18 @@ bench_dmap(void)
NANOCOUNT(pt3, pt4, iters*elts));
for (i = 0; i < iters; ++i) {
- SMARTLIST_FOREACH(sl, const char *, cp, n += digestset_isin(ds, cp));
- SMARTLIST_FOREACH(sl2, const char *, cp, n += digestset_isin(ds, cp));
+ SMARTLIST_FOREACH(sl, const char *, cp, n += digestset_contains(ds, cp));
+ SMARTLIST_FOREACH(sl2, const char *, cp, n += digestset_contains(ds, cp));
}
end = perftime();
- printf("digestset_isin: %.2f ns per element.\n",
+ printf("digestset_contains: %.2f ns per element.\n",
NANOCOUNT(pt4, end, iters*elts*2));
/* We need to use this, or else the whole loop gets optimized out. */
printf("Hits == %d\n", n);
for (i = 0; i < fpostests; ++i) {
crypto_rand(d, 20);
- if (digestset_isin(ds, d)) ++fp;
+ if (digestset_contains(ds, d)) ++fp;
}
printf("False positive rate on digestset: %.2f%%\n",
(fp/(double)fpostests)*100);
@@ -200,6 +338,28 @@ bench_dmap(void)
}
static void
+bench_siphash(void)
+{
+ char buf[128];
+ int lens[] = { 7, 8, 15, 16, 20, 32, 111, 128, -1 };
+ int i, j;
+ uint64_t start, end;
+ const int N = 300000;
+ crypto_rand(buf, sizeof(buf));
+
+ for (i = 0; lens[i] > 0; ++i) {
+ reset_perftime();
+ start = perftime();
+ for (j = 0; j < N; ++j) {
+ siphash24g(buf, lens[i]);
+ }
+ end = perftime();
+ printf("siphash24g(%d): %.2f ns per call\n",
+ lens[i], NANOCOUNT(start,end,N));
+ }
+}
+
+static void
bench_cell_ops(void)
{
const int iters = 1<<16;
@@ -214,8 +374,8 @@ bench_cell_ops(void)
crypto_rand((char*)cell->payload, sizeof(cell->payload));
/* Mock-up or_circuit_t */
- or_circ->_base.magic = OR_CIRCUIT_MAGIC;
- or_circ->_base.purpose = CIRCUIT_PURPOSE_OR;
+ or_circ->base_.magic = OR_CIRCUIT_MAGIC;
+ or_circ->base_.purpose = CIRCUIT_PURPOSE_OR;
/* Initialize crypto */
or_circ->p_crypto = crypto_cipher_new(NULL);
@@ -248,6 +408,95 @@ bench_cell_ops(void)
tor_free(cell);
}
+static void
+bench_dh(void)
+{
+ const int iters = 1<<10;
+ int i;
+ uint64_t start, end;
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char dh_pubkey_a[DH_BYTES], dh_pubkey_b[DH_BYTES];
+ char secret_a[DH_BYTES], secret_b[DH_BYTES];
+ ssize_t slen_a, slen_b;
+ crypto_dh_t *dh_a = crypto_dh_new(DH_TYPE_TLS);
+ crypto_dh_t *dh_b = crypto_dh_new(DH_TYPE_TLS);
+ crypto_dh_generate_public(dh_a);
+ crypto_dh_generate_public(dh_b);
+ crypto_dh_get_public(dh_a, dh_pubkey_a, sizeof(dh_pubkey_a));
+ crypto_dh_get_public(dh_b, dh_pubkey_b, sizeof(dh_pubkey_b));
+ slen_a = crypto_dh_compute_secret(LOG_NOTICE,
+ dh_a, dh_pubkey_b, sizeof(dh_pubkey_b),
+ secret_a, sizeof(secret_a));
+ slen_b = crypto_dh_compute_secret(LOG_NOTICE,
+ dh_b, dh_pubkey_a, sizeof(dh_pubkey_a),
+ secret_b, sizeof(secret_b));
+ tor_assert(slen_a == slen_b);
+ tor_assert(!memcmp(secret_a, secret_b, slen_a));
+ crypto_dh_free(dh_a);
+ crypto_dh_free(dh_b);
+ }
+ end = perftime();
+ printf("Complete DH handshakes (1024 bit, public and private ops):\n"
+ " %f millisec each.\n", NANOCOUNT(start, end, iters)/1e6);
+}
+
+#if (!defined(OPENSSL_NO_EC) \
+ && OPENSSL_VERSION_NUMBER >= OPENSSL_V_SERIES(1,0,0))
+#define HAVE_EC_BENCHMARKS
+static void
+bench_ecdh_impl(int nid, const char *name)
+{
+ const int iters = 1<<10;
+ int i;
+ uint64_t start, end;
+
+ reset_perftime();
+ start = perftime();
+ for (i = 0; i < iters; ++i) {
+ char secret_a[DH_BYTES], secret_b[DH_BYTES];
+ ssize_t slen_a, slen_b;
+ EC_KEY *dh_a = EC_KEY_new_by_curve_name(nid);
+ EC_KEY *dh_b = EC_KEY_new_by_curve_name(nid);
+ if (!dh_a || !dh_b) {
+ puts("Skipping. (No implementation?)");
+ return;
+ }
+
+ EC_KEY_generate_key(dh_a);
+ EC_KEY_generate_key(dh_b);
+ slen_a = ECDH_compute_key(secret_a, DH_BYTES,
+ EC_KEY_get0_public_key(dh_b), dh_a,
+ NULL);
+ slen_b = ECDH_compute_key(secret_b, DH_BYTES,
+ EC_KEY_get0_public_key(dh_a), dh_b,
+ NULL);
+
+ tor_assert(slen_a == slen_b);
+ tor_assert(!memcmp(secret_a, secret_b, slen_a));
+ EC_KEY_free(dh_a);
+ EC_KEY_free(dh_b);
+ }
+ end = perftime();
+ printf("Complete ECDH %s handshakes (2 public and 2 private ops):\n"
+ " %f millisec each.\n", name, NANOCOUNT(start, end, iters)/1e6);
+}
+
+static void
+bench_ecdh_p256(void)
+{
+ bench_ecdh_impl(NID_X9_62_prime256v1, "P-256");
+}
+
+static void
+bench_ecdh_p224(void)
+{
+ bench_ecdh_impl(NID_secp224r1, "P-224");
+}
+#endif
+
typedef void (*bench_fn)(void);
typedef struct benchmark_t {
@@ -260,9 +509,19 @@ typedef struct benchmark_t {
static struct benchmark_t benchmarks[] = {
ENT(dmap),
+ ENT(siphash),
ENT(aes),
+ ENT(onion_TAP),
+#ifdef CURVE25519_ENABLED
+ ENT(onion_ntor),
+#endif
ENT(cell_aes),
ENT(cell_ops),
+ ENT(dh),
+#ifdef HAVE_EC_BENCHMARKS
+ ENT(ecdh_p256),
+ ENT(ecdh_p224),
+#endif
{NULL,NULL,0}
};
@@ -286,6 +545,8 @@ main(int argc, const char **argv)
int i;
int list=0, n_enabled=0;
benchmark_t *b;
+ char *errmsg;
+ or_options_t *options;
tor_threads_init();
@@ -306,6 +567,17 @@ main(int argc, const char **argv)
reset_perftime();
crypto_seed_rng(1);
+ crypto_init_siphash_key();
+ options = options_new();
+ init_logging();
+ options->command = CMD_RUN_UNITTESTS;
+ options->DataDirectory = tor_strdup("");
+ options_init(options);
+ if (set_options(options, &errmsg) < 0) {
+ printf("Failed to set initial options: %s\n", errmsg);
+ tor_free(errmsg);
+ return 1;
+ }
for (b = benchmarks; b->name; ++b) {
if (b->enabled || n_enabled == 0) {
diff --git a/src/test/bt_test.py b/src/test/bt_test.py
new file mode 100755
index 000000000..8290509fa
--- /dev/null
+++ b/src/test/bt_test.py
@@ -0,0 +1,42 @@
+# Copyright 2013, The Tor Project, Inc
+# See LICENSE for licensing information
+
+"""
+bt_test.py
+
+This file tests the output from test-bt-cl to make sure it's as expected.
+
+Example usage:
+
+$ ./src/test/test-bt-cl crash | ./src/test/bt_test.py
+OK
+$ ./src/test/test-bt-cl assert | ./src/test/bt_test.py
+OK
+
+"""
+
+import sys
+
+
+def matches(lines, funcs):
+ if len(lines) < len(funcs):
+ return False
+ try:
+ for l, f in zip(lines, funcs):
+ l.index(f)
+ except ValueError:
+ return False
+ else:
+ return True
+
+FUNCNAMES = "crash oh_what a_tangled_web we_weave main".split()
+
+LINES = sys.stdin.readlines()
+
+for I in range(len(LINES)):
+ if matches(LINES[I:], FUNCNAMES):
+ print("OK")
+ break
+else:
+ print("BAD")
+
diff --git a/src/test/include.am b/src/test/include.am
new file mode 100644
index 000000000..fba439a61
--- /dev/null
+++ b/src/test/include.am
@@ -0,0 +1,121 @@
+TESTS += src/test/test
+
+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" \
+ -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
+# matters a lot there, and is quite hard to debug if you forget to do it.
+
+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_controller_events.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_logging.c \
+ src/test/test_microdesc.c \
+ src/test/test_oom.c \
+ src/test/test_options.c \
+ src/test/test_pt.c \
+ src/test/test_relaycell.c \
+ src/test/test_replay.c \
+ src/test/test_routerkeys.c \
+ src/test/test_socks.c \
+ src/test/test_util.c \
+ src/test/test_config.c \
+ src/test/test_hs.c \
+ src/test/test_nodelist.c \
+ src/test/test_policy.c \
+ src/test/test_status.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 = \
+ src/test/bench.c
+
+src_test_test_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
+ @TOR_LDFLAGS_libevent@
+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@
+
+src_test_bench_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@ \
+ @TOR_LDFLAGS_libevent@
+src_test_bench_LDADD = src/or/libtor.a src/common/libor.a \
+ src/common/libor-crypto.a $(LIBDONNA) \
+ src/common/libor-event.a \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ @TOR_LIBEVENT_LIBS@ \
+ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+noinst_HEADERS+= \
+ src/test/test.h
+
+if CURVE25519_ENABLED
+noinst_PROGRAMS+= src/test/test-ntor-cl
+src_test_test_ntor_cl_SOURCES = src/test/test_ntor_cl.c
+src_test_test_ntor_cl_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_test_test_ntor_cl_LDADD = src/or/libtor.a src/common/libor.a \
+ src/common/libor-crypto.a $(LIBDONNA) \
+ @TOR_ZLIB_LIBS@ @TOR_LIB_MATH@ \
+ @TOR_OPENSSL_LIBS@ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+src_test_test_ntor_cl_AM_CPPFLAGS = \
+ -I"$(top_srcdir)/src/or"
+NTOR_TEST_DEPS=src/test/test-ntor-cl
+else
+NTOR_TEST_DEPS=
+endif
+
+if COVERAGE_ENABLED
+CMDLINE_TEST_TOR = ./src/or/tor-cov
+else
+CMDLINE_TEST_TOR = ./src/or/tor
+endif
+
+noinst_PROGRAMS += src/test/test-bt-cl
+src_test_test_bt_cl_SOURCES = src/test/test_bt_cl.c
+src_test_test_bt_cl_LDADD = src/common/libor-testing.a \
+ @TOR_LIB_MATH@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@
+src_test_test_bt_cl_CFLAGS = $(AM_CFLAGS) $(TEST_CFLAGS)
+src_test_test_bt_cl_CPPFLAGS= $(src_test_AM_CPPFLAGS)
+
+
+check-local: $(NTOR_TEST_DEPS) $(CMDLINE_TEST_TOR)
+if USEPYTHON
+ $(PYTHON) $(top_srcdir)/src/test/test_cmdline_args.py $(CMDLINE_TEST_TOR) "${top_srcdir}"
+if CURVE25519_ENABLED
+ $(PYTHON) $(top_srcdir)/src/test/ntor_ref.py test-tor
+ $(PYTHON) $(top_srcdir)/src/test/ntor_ref.py self-test
+endif
+ ./src/test/test-bt-cl assert | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
+ ./src/test/test-bt-cl crash | $(PYTHON) $(top_srcdir)/src/test/bt_test.py
+endif
+
+EXTRA_DIST += \
+ src/test/bt_test.py \
+ src/test/ntor_ref.py \
+ src/test/slownacl_curve25519.py \
+ src/test/test_cmdline_args.py
diff --git a/src/test/ntor_ref.py b/src/test/ntor_ref.py
new file mode 100755
index 000000000..7d6e43e71
--- /dev/null
+++ b/src/test/ntor_ref.py
@@ -0,0 +1,405 @@
+#!/usr/bin/python
+# Copyright 2012-2013, The Tor Project, Inc
+# See LICENSE for licensing information
+
+"""
+ntor_ref.py
+
+
+This module is a reference implementation for the "ntor" protocol
+s proposed by Goldberg, Stebila, and Ustaoglu and as instantiated in
+Tor Proposal 216.
+
+It's meant to be used to validate Tor's ntor implementation. It
+requirs the curve25519 python module from the curve25519-donna
+package.
+
+ *** DO NOT USE THIS IN PRODUCTION. ***
+
+commands:
+
+ gen_kdf_vectors: Print out some test vectors for the RFC5869 KDF.
+ timing: Print a little timing information about this implementation's
+ handshake.
+ self-test: Try handshaking with ourself; make sure we can.
+ test-tor: Handshake with tor's ntor implementation via the program
+ src/test/test-ntor-cl; make sure we can.
+
+"""
+
+import binascii
+try:
+ import curve25519
+ curve25519mod = curve25519.keys
+except ImportError:
+ curve25519 = None
+ import slownacl_curve25519
+ curve25519mod = slownacl_curve25519
+
+import hashlib
+import hmac
+import subprocess
+import sys
+
+# **********************************************************************
+# Helpers and constants
+
+def HMAC(key,msg):
+ "Return the HMAC-SHA256 of 'msg' using the key 'key'."
+ H = hmac.new(key, b"", hashlib.sha256)
+ H.update(msg)
+ return H.digest()
+
+def H(msg,tweak):
+ """Return the hash of 'msg' using tweak 'tweak'. (In this version of ntor,
+ the tweaked hash is just HMAC with the tweak as the key.)"""
+ return HMAC(key=tweak,
+ msg=msg)
+
+def keyid(k):
+ """Return the 32-byte key ID of a public key 'k'. (Since we're
+ using curve25519, we let k be its own keyid.)
+ """
+ return k.serialize()
+
+NODE_ID_LENGTH = 20
+KEYID_LENGTH = 32
+G_LENGTH = 32
+H_LENGTH = 32
+
+PROTOID = b"ntor-curve25519-sha256-1"
+M_EXPAND = PROTOID + b":key_expand"
+T_MAC = PROTOID + b":mac"
+T_KEY = PROTOID + b":key_extract"
+T_VERIFY = PROTOID + b":verify"
+
+def H_mac(msg): return H(msg, tweak=T_MAC)
+def H_verify(msg): return H(msg, tweak=T_VERIFY)
+
+class PrivateKey(curve25519mod.Private):
+ """As curve25519mod.Private, but doesn't regenerate its public key
+ every time you ask for it.
+ """
+ def __init__(self):
+ curve25519mod.Private.__init__(self)
+ self._memo_public = None
+
+ def get_public(self):
+ if self._memo_public is None:
+ self._memo_public = curve25519mod.Private.get_public(self)
+
+ return self._memo_public
+
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+if sys.version < '3':
+ def int2byte(i):
+ return chr(i)
+else:
+ def int2byte(i):
+ return bytes([i])
+
+def kdf_rfc5869(key, salt, info, n):
+
+ prk = HMAC(key=salt, msg=key)
+
+ out = b""
+ last = b""
+ i = 1
+ while len(out) < n:
+ m = last + info + int2byte(i)
+ last = h = HMAC(key=prk, msg=m)
+ out += h
+ i = i + 1
+ return out[:n]
+
+def kdf_ntor(key, n):
+ return kdf_rfc5869(key, T_KEY, M_EXPAND, n)
+
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+def client_part1(node_id, pubkey_B):
+ """Initial handshake, client side.
+
+ From the specification:
+
+ <<To send a create cell, the client generates a keypair x,X =
+ KEYGEN(), and sends a CREATE cell with contents:
+
+ NODEID: ID -- ID_LENGTH bytes
+ KEYID: KEYID(B) -- H_LENGTH bytes
+ CLIENT_PK: X -- G_LENGTH bytes
+ >>
+
+ Takes node_id -- a digest of the server's identity key,
+ pubkey_B -- a public key for the server.
+ Returns a tuple of (client secret key x, client->server message)"""
+
+ assert len(node_id) == NODE_ID_LENGTH
+
+ key_id = keyid(pubkey_B)
+ seckey_x = PrivateKey()
+ pubkey_X = seckey_x.get_public().serialize()
+
+ message = node_id + key_id + pubkey_X
+
+ assert len(message) == NODE_ID_LENGTH + H_LENGTH + H_LENGTH
+ return seckey_x , message
+
+def hash_nil(x):
+ """Identity function: if we don't pass a hash function that does nothing,
+ the curve25519 python lib will try to sha256 it for us."""
+ return x
+
+def bad_result(r):
+ """Helper: given a result of multiplying a public key by a private key,
+ return True iff one of the inputs was broken"""
+ assert len(r) == 32
+ return r == '\x00'*32
+
+def server(seckey_b, my_node_id, message, keyBytes=72):
+ """Handshake step 2, server side.
+
+ From the spec:
+
+ <<
+ The server generates a keypair of y,Y = KEYGEN(), and computes
+
+ secret_input = EXP(X,y) | EXP(X,b) | ID | B | X | Y | PROTOID
+ KEY_SEED = H(secret_input, t_key)
+ verify = H(secret_input, t_verify)
+ auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+
+ The server sends a CREATED cell containing:
+
+ SERVER_PK: Y -- G_LENGTH bytes
+ AUTH: H(auth_input, t_mac) -- H_LENGTH byets
+ >>
+
+ Takes seckey_b -- the server's secret key
+ my_node_id -- the servers's public key digest,
+ message -- a message from a client
+ keybytes -- amount of key material to generate
+
+ Returns a tuple of (key material, sever->client reply), or None on
+ error.
+ """
+
+ assert len(message) == NODE_ID_LENGTH + H_LENGTH + H_LENGTH
+
+ if my_node_id != message[:NODE_ID_LENGTH]:
+ return None
+
+ badness = (keyid(seckey_b.get_public()) !=
+ message[NODE_ID_LENGTH:NODE_ID_LENGTH+H_LENGTH])
+
+ pubkey_X = curve25519mod.Public(message[NODE_ID_LENGTH+H_LENGTH:])
+ seckey_y = PrivateKey()
+ pubkey_Y = seckey_y.get_public()
+ pubkey_B = seckey_b.get_public()
+ xy = seckey_y.get_shared_key(pubkey_X, hash_nil)
+ xb = seckey_b.get_shared_key(pubkey_X, hash_nil)
+
+ # secret_input = EXP(X,y) | EXP(X,b) | ID | B | X | Y | PROTOID
+ secret_input = (xy + xb + my_node_id +
+ pubkey_B.serialize() +
+ pubkey_X.serialize() +
+ pubkey_Y.serialize() +
+ PROTOID)
+
+ verify = H_verify(secret_input)
+
+ # auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+ auth_input = (verify +
+ my_node_id +
+ pubkey_B.serialize() +
+ pubkey_Y.serialize() +
+ pubkey_X.serialize() +
+ PROTOID +
+ b"Server")
+
+ msg = pubkey_Y.serialize() + H_mac(auth_input)
+
+ badness += bad_result(xb)
+ badness += bad_result(xy)
+
+ if badness:
+ return None
+
+ keys = kdf_ntor(secret_input, keyBytes)
+
+ return keys, msg
+
+def client_part2(seckey_x, msg, node_id, pubkey_B, keyBytes=72):
+ """Handshake step 3: client side again.
+
+ From the spec:
+
+ <<
+ The client then checks Y is in G^* [see NOTE below], and computes
+
+ secret_input = EXP(Y,x) | EXP(B,x) | ID | B | X | Y | PROTOID
+ KEY_SEED = H(secret_input, t_key)
+ verify = H(secret_input, t_verify)
+ auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+
+ The client verifies that AUTH == H(auth_input, t_mac).
+ >>
+
+ Takes seckey_x -- the secret key we generated in step 1.
+ msg -- the message from the server.
+ node_id -- the node_id we used in step 1.
+ server_key -- the same public key we used in step 1.
+ keyBytes -- the number of bytes we want to generate
+ Returns key material, or None on error
+
+ """
+ assert len(msg) == G_LENGTH + H_LENGTH
+
+ pubkey_Y = curve25519mod.Public(msg[:G_LENGTH])
+ their_auth = msg[G_LENGTH:]
+
+ pubkey_X = seckey_x.get_public()
+
+ yx = seckey_x.get_shared_key(pubkey_Y, hash_nil)
+ bx = seckey_x.get_shared_key(pubkey_B, hash_nil)
+
+
+ # secret_input = EXP(Y,x) | EXP(B,x) | ID | B | X | Y | PROTOID
+ secret_input = (yx + bx + node_id +
+ pubkey_B.serialize() +
+ pubkey_X.serialize() +
+ pubkey_Y.serialize() + PROTOID)
+
+ verify = H_verify(secret_input)
+
+ # auth_input = verify | ID | B | Y | X | PROTOID | "Server"
+ auth_input = (verify + node_id +
+ pubkey_B.serialize() +
+ pubkey_Y.serialize() +
+ pubkey_X.serialize() + PROTOID +
+ b"Server")
+
+ my_auth = H_mac(auth_input)
+
+ badness = my_auth != their_auth
+ badness = bad_result(yx) + bad_result(bx)
+
+ if badness:
+ return None
+
+ return kdf_ntor(secret_input, keyBytes)
+
+# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+def demo(node_id=b"iToldYouAboutStairs.", server_key=PrivateKey()):
+ """
+ Try to handshake with ourself.
+ """
+ x, create = client_part1(node_id, server_key.get_public())
+ skeys, created = server(server_key, node_id, create)
+ ckeys = client_part2(x, created, node_id, server_key.get_public())
+ assert len(skeys) == 72
+ assert len(ckeys) == 72
+ assert skeys == ckeys
+ print("OK")
+
+# ======================================================================
+def timing():
+ """
+ Use Python's timeit module to see how fast this nonsense is
+ """
+ import timeit
+ t = timeit.Timer(stmt="ntor_ref.demo(N,SK)",
+ setup="import ntor_ref,curve25519;N='ABCD'*5;SK=ntor_ref.PrivateKey()")
+ print(t.timeit(number=1000))
+
+# ======================================================================
+
+def kdf_vectors():
+ """
+ Generate some vectors to check our KDF.
+ """
+ import binascii
+ def kdf_vec(inp):
+ k = kdf(inp, T_KEY, M_EXPAND, 100)
+ print(repr(inp), "\n\""+ binascii.b2a_hex(k)+ "\"")
+ kdf_vec("")
+ kdf_vec("Tor")
+ kdf_vec("AN ALARMING ITEM TO FIND ON YOUR CREDIT-RATING STATEMENT")
+
+# ======================================================================
+
+
+def test_tor():
+ """
+ Call the test-ntor-cl command-line program to make sure we can
+ interoperate with Tor's ntor program
+ """
+ enhex=lambda s: binascii.b2a_hex(s)
+ dehex=lambda s: binascii.a2b_hex(s.strip())
+
+ PROG = b"./src/test/test-ntor-cl"
+ def tor_client1(node_id, pubkey_B):
+ " returns (msg, state) "
+ p = subprocess.Popen([PROG, b"client1", enhex(node_id),
+ enhex(pubkey_B.serialize())],
+ stdout=subprocess.PIPE)
+ return map(dehex, p.stdout.readlines())
+ def tor_server1(seckey_b, node_id, msg, n):
+ " returns (msg, keys) "
+ p = subprocess.Popen([PROG, "server1", enhex(seckey_b.serialize()),
+ enhex(node_id), enhex(msg), str(n)],
+ stdout=subprocess.PIPE)
+ return map(dehex, p.stdout.readlines())
+ def tor_client2(state, msg, n):
+ " returns (keys,) "
+ p = subprocess.Popen([PROG, "client2", enhex(state),
+ enhex(msg), str(n)],
+ stdout=subprocess.PIPE)
+ return map(dehex, p.stdout.readlines())
+
+
+ node_id = b"thisisatornodeid$#%^"
+ seckey_b = PrivateKey()
+ pubkey_B = seckey_b.get_public()
+
+ # Do a pure-Tor handshake
+ c2s_msg, c_state = tor_client1(node_id, pubkey_B)
+ s2c_msg, s_keys = tor_server1(seckey_b, node_id, c2s_msg, 90)
+ c_keys, = tor_client2(c_state, s2c_msg, 90)
+ assert c_keys == s_keys
+ assert len(c_keys) == 90
+
+ # Try a mixed handshake with Tor as the client
+ c2s_msg, c_state = tor_client1(node_id, pubkey_B)
+ s_keys, s2c_msg = server(seckey_b, node_id, c2s_msg, 90)
+ c_keys, = tor_client2(c_state, s2c_msg, 90)
+ assert c_keys == s_keys
+ assert len(c_keys) == 90
+
+ # Now do a mixed handshake with Tor as the server
+ c_x, c2s_msg = client_part1(node_id, pubkey_B)
+ s2c_msg, s_keys = tor_server1(seckey_b, node_id, c2s_msg, 90)
+ c_keys = client_part2(c_x, s2c_msg, node_id, pubkey_B, 90)
+ assert c_keys == s_keys
+ assert len(c_keys) == 90
+
+ print("OK")
+
+# ======================================================================
+
+if __name__ == '__main__':
+ if len(sys.argv) < 2:
+ print(__doc__)
+ elif sys.argv[1] == 'gen_kdf_vectors':
+ kdf_vectors()
+ elif sys.argv[1] == 'timing':
+ timing()
+ elif sys.argv[1] == 'self-test':
+ demo()
+ elif sys.argv[1] == 'test-tor':
+ test_tor()
+
+ else:
+ print(__doc__)
diff --git a/src/test/slownacl_curve25519.py b/src/test/slownacl_curve25519.py
new file mode 100644
index 000000000..4dabab61b
--- /dev/null
+++ b/src/test/slownacl_curve25519.py
@@ -0,0 +1,117 @@
+# This is the curve25519 implementation from Matthew Dempsky's "Slownacl"
+# library. It is in the public domain.
+#
+# It isn't constant-time. Don't use it except for testing.
+#
+# Nick got the slownacl source from:
+# https://github.com/mdempsky/dnscurve/tree/master/slownacl
+
+__all__ = ['smult_curve25519_base', 'smult_curve25519']
+
+import sys
+
+P = 2 ** 255 - 19
+A = 486662
+
+def expmod(b, e, m):
+ if e == 0: return 1
+ t = expmod(b, e // 2, m) ** 2 % m
+ if e & 1: t = (t * b) % m
+ return t
+
+def inv(x):
+ return expmod(x, P - 2, P)
+
+# Addition and doubling formulas taken from Appendix D of "Curve25519:
+# new Diffie-Hellman speed records".
+
+def add(n,m,d):
+ (xn,zn), (xm,zm), (xd,zd) = n, m, d
+ x = 4 * (xm * xn - zm * zn) ** 2 * zd
+ z = 4 * (xm * zn - zm * xn) ** 2 * xd
+ return (x % P, z % P)
+
+def double(n):
+ (xn,zn) = n
+ x = (xn ** 2 - zn ** 2) ** 2
+ z = 4 * xn * zn * (xn ** 2 + A * xn * zn + zn ** 2)
+ return (x % P, z % P)
+
+def curve25519(n, base):
+ one = (base,1)
+ two = double(one)
+ # f(m) evaluates to a tuple containing the mth multiple and the
+ # (m+1)th multiple of base.
+ def f(m):
+ if m == 1: return (one, two)
+ (pm, pm1) = f(m // 2)
+ if (m & 1):
+ return (add(pm, pm1, one), double(pm1))
+ return (double(pm), add(pm, pm1, one))
+ ((x,z), _) = f(n)
+ return (x * inv(z)) % P
+
+if sys.version < '3':
+ def b2i(c):
+ return ord(c)
+ def i2b(i):
+ return chr(i)
+ def ba2bs(ba):
+ return "".join(ba)
+else:
+ def b2i(c):
+ return c
+ def i2b(i):
+ return i
+ def ba2bs(ba):
+ return bytes(ba)
+
+def unpack(s):
+ if len(s) != 32: raise ValueError('Invalid Curve25519 argument')
+ return sum(b2i(s[i]) << (8 * i) for i in range(32))
+
+def pack(n):
+ return ba2bs([i2b((n >> (8 * i)) & 255) for i in range(32)])
+
+def clamp(n):
+ n &= ~7
+ n &= ~(128 << 8 * 31)
+ n |= 64 << 8 * 31
+ return n
+
+def smult_curve25519(n, p):
+ n = clamp(unpack(n))
+ p = unpack(p)
+ return pack(curve25519(n, p))
+
+def smult_curve25519_base(n):
+ n = clamp(unpack(n))
+ return pack(curve25519(n, 9))
+
+
+#
+# This part I'm adding in for compatibility with the curve25519 python
+# module. -Nick
+#
+import os
+
+class Private:
+ def __init__(self, secret=None, seed=None):
+ self.private = pack(clamp(unpack(os.urandom(32))))
+
+ def get_public(self):
+ return Public(smult_curve25519_base(self.private))
+
+ def get_shared_key(self, public, hashfn):
+ return hashfn(smult_curve25519(self.private, public.public))
+
+ def serialize(self):
+ return self.private
+
+class Public:
+ def __init__(self, public):
+ self.public = public
+
+ def serialize(self):
+ return self.public
+
diff --git a/src/test/test-child.c b/src/test/test-child.c
index c5725f1c5..ef10fbb92 100644
--- a/src/test/test-child.c
+++ b/src/test/test-child.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2011-2012, The Tor Project, Inc. */
+/* Copyright (c) 2011-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include <stdio.h>
diff --git a/src/test/test-network.sh b/src/test/test-network.sh
new file mode 100755
index 000000000..7b5986416
--- /dev/null
+++ b/src/test/test-network.sh
@@ -0,0 +1,47 @@
+#! /bin/sh
+
+until [ -z $1 ]
+do
+ case $1 in
+ --chutney-path)
+ export CHUTNEY_PATH="$2"
+ shift
+ ;;
+ --tor-path)
+ export TOR_DIR="$2"
+ shift
+ ;;
+ --flavo?r|--network-flavo?r)
+ export NETWORK_FLAVOUR="$2"
+ shift
+ ;;
+ *)
+ echo "Sorry, I don't know what to do with '$1'."
+ exit 2
+ ;;
+ esac
+ shift
+done
+
+TOR_DIR="${TOR_DIR:-$PWD}"
+NETWORK_FLAVOUR=${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"
+# For picking up the right tor binaries.
+PATH="$TOR_DIR/src/or:$TOR_DIR/src/tools:$PATH"
+./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 ddfd6337b..8bce9c91f 100644
--- a/src/test/test.c
+++ b/src/test/test.c
@@ -1,6 +1,6 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/* Ordinarily defined in tor_main.c; this bit is just here to provide one
@@ -28,11 +28,11 @@ 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 CIRCUIT_PRIVATE
+#define CIRCUITSTATS_PRIVATE
+#define CIRCUITLIST_PRIVATE
+#define STATEFILE_PRIVATE
/*
* Linux doesn't provide lround in math.h by default, but mac os does...
@@ -44,19 +44,29 @@ double fabs(double x);
#include "or.h"
#include "buffers.h"
-#include "circuitbuild.h"
+#include "circuitlist.h"
+#include "circuitstats.h"
#include "config.h"
#include "connection_edge.h"
#include "geoip.h"
#include "rendcommon.h"
#include "test.h"
#include "torgzip.h"
+#ifdef ENABLE_MEMPOOLS
#include "mempool.h"
+#endif
#include "memarea.h"
#include "onion.h"
+#include "onion_ntor.h"
+#include "onion_tap.h"
#include "policies.h"
#include "rephist.h"
#include "routerparse.h"
+#include "statefile.h"
+#ifdef CURVE25519_ENABLED
+#include "crypto_curve25519.h"
+#include "onion_ntor.h"
+#endif
#ifdef USE_DMALLOC
#include <dmalloc.h>
@@ -84,8 +94,14 @@ setup_directory(void)
{
static int is_setup = 0;
int r;
+ char rnd[256], rnd32[256];
if (is_setup) return;
+/* Due to base32 limitation needs to be a multiple of 5. */
+#define RAND_PATH_BYTES 5
+ crypto_rand(rnd, RAND_PATH_BYTES);
+ base32_encode(rnd32, sizeof(rnd32), rnd, RAND_PATH_BYTES);
+
#ifdef _WIN32
{
char buf[MAX_PATH];
@@ -94,11 +110,12 @@ setup_directory(void)
if (!GetTempPathA(sizeof(buf),buf))
tmp = "c:\\windows\\temp";
tor_snprintf(temp_dir, sizeof(temp_dir),
- "%s\\tor_test_%d", tmp, (int)getpid());
+ "%s\\tor_test_%d_%s", tmp, (int)getpid(), rnd32);
r = mkdir(temp_dir);
}
#else
- tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d", (int) getpid());
+ tor_snprintf(temp_dir, sizeof(temp_dir), "/tmp/tor_test_%d_%s",
+ (int) getpid(), rnd32);
r = mkdir(temp_dir, 0700);
#endif
if (r) {
@@ -205,655 +222,239 @@ 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 */
+/** Run unit tests for the onion handshake code. */
static void
-test_socks_4_supported_commands(void *ptr)
+test_onion_handshake(void)
{
- 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));
+ /* client-side */
+ crypto_dh_t *c_dh = NULL;
+ char c_buf[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char c_keys[40];
+ /* server-side */
+ char s_buf[TAP_ONIONSKIN_REPLY_LEN];
+ char s_keys[40];
+ int i;
+ /* shared */
+ crypto_pk_t *pk = NULL, *pk2 = NULL;
- done:
- ;
-}
+ pk = pk_generate(0);
+ pk2 = pk_generate(1);
-/** 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(0, 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]? */
+ /* client handshake 1. */
+ memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
+
+ for (i = 1; i <= 3; ++i) {
+ crypto_pk_t *k1, *k2;
+ if (i==1) {
+ /* server handshake: only one key known. */
+ k1 = pk; k2 = NULL;
+ } else if (i==2) {
+ /* server handshake: try the right key first. */
+ k1 = pk; k2 = pk2;
+ } else {
+ /* server handshake: try the right key second. */
+ k1 = pk2; k2 = pk;
+ }
- done:
- ;
-}
+ memset(s_buf, 0, TAP_ONIONSKIN_REPLY_LEN);
+ memset(s_keys, 0, 40);
+ test_assert(! onion_skin_TAP_server_handshake(c_buf, k1, k2,
+ s_buf, s_keys, 40));
-/** 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));
+ /* client handshake 2 */
+ memset(c_keys, 0, 40);
+ test_assert(! onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ test_memeq(c_keys, s_keys, 40);
+ memset(s_buf, 0, 40);
+ test_memneq(c_keys, s_buf, 40);
+ }
done:
- ;
+ crypto_dh_free(c_dh);
+ crypto_pk_free(pk);
+ crypto_pk_free(pk2);
}
-/** Perform SOCKS 5 authentication */
static void
-test_socks_5_no_authenticate(void *ptr)
+test_bad_onion_handshake(void *arg)
{
- 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(5, 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:
- ;
-}
+ char junk_buf[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char junk_buf2[TAP_ONIONSKIN_CHALLENGE_LEN];
+ /* client-side */
+ crypto_dh_t *c_dh = NULL;
+ char c_buf[TAP_ONIONSKIN_CHALLENGE_LEN];
+ char c_keys[40];
+ /* server-side */
+ char s_buf[TAP_ONIONSKIN_REPLY_LEN];
+ char s_keys[40];
+ /* shared */
+ crypto_pk_t *pk = NULL, *pk2 = NULL;
-/** Perform SOCKS 5 authentication */
-static void
-test_socks_5_authenticate(void *ptr)
-{
- SOCKS_TEST_INIT();
+ (void)arg;
- /* SOCKS 5 Negotiate username/password authentication */
- ADD_DATA(buf, "\x05\x01\x02");
+ pk = pk_generate(0);
+ pk2 = pk_generate(1);
- 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);
+ /* Server: Case 1: the encrypted data is degenerate. */
+ memset(junk_buf, 0, sizeof(junk_buf));
+ crypto_pk_public_hybrid_encrypt(pk, junk_buf2, TAP_ONIONSKIN_CHALLENGE_LEN,
+ junk_buf, DH_KEY_LEN, PK_PKCS1_OAEP_PADDING, 1);
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(junk_buf2, pk, NULL,
+ s_buf, s_keys, 40));
- test_eq(0, buf_datalen(buf));
+ /* Server: Case 2: the encrypted data is not long enough. */
+ memset(junk_buf, 0, sizeof(junk_buf));
+ memset(junk_buf2, 0, sizeof(junk_buf2));
+ crypto_pk_public_encrypt(pk, junk_buf2, sizeof(junk_buf2),
+ junk_buf, 48, PK_PKCS1_OAEP_PADDING);
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(junk_buf2, pk, NULL,
+ s_buf, s_keys, 40));
- /* 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(5, socks->reply[0]);
- test_eq(0, socks->reply[1]);
+ /* client handshake 1: do it straight. */
+ memset(c_buf, 0, TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_assert(! onion_skin_TAP_create(pk, &c_dh, c_buf));
- test_eq(2, socks->usernamelen);
- test_eq(8, socks->passwordlen);
+ /* Server: Case 3: we just don't have the right key. */
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(c_buf, pk2, NULL,
+ s_buf, s_keys, 40));
- test_memeq("me", socks->username, 2);
- test_memeq("mypasswd", socks->password, 8);
+ /* Server: Case 4: The RSA-encrypted portion is corrupt. */
+ c_buf[64] ^= 33;
+ tt_int_op(-1, ==,
+ onion_skin_TAP_server_handshake(c_buf, pk, NULL,
+ s_buf, s_keys, 40));
+ c_buf[64] ^= 33;
- done:
- ;
-}
+ /* (Let the server procede) */
+ tt_int_op(0, ==,
+ onion_skin_TAP_server_handshake(c_buf, pk, NULL,
+ s_buf, s_keys, 40));
-/** 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(5, 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);
+ /* Client: Case 1: The server sent back junk. */
+ s_buf[64] ^= 33;
+ tt_int_op(-1, ==,
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ s_buf[64] ^= 33;
- done:
- ;
-}
+ /* Let the client finish; make sure it can. */
+ tt_int_op(0, ==,
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
+ test_memeq(s_keys, c_keys, 40);
-/** 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]);
+ /* Client: Case 2: The server sent back a degenerate DH. */
+ memset(s_buf, 0, sizeof(s_buf));
+ tt_int_op(-1, ==,
+ onion_skin_TAP_client_handshake(c_dh, s_buf, c_keys, 40));
done:
- ;
+ crypto_dh_free(c_dh);
+ crypto_pk_free(pk);
+ crypto_pk_free(pk2);
}
+#ifdef CURVE25519_ENABLED
static void
-test_buffer_copy(void *arg)
+test_ntor_handshake(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);
-}
+ /* client-side */
+ ntor_handshake_state_t *c_state = NULL;
+ uint8_t c_buf[NTOR_ONIONSKIN_LEN];
+ uint8_t c_keys[400];
-/** Run unit tests for buffers.c */
-static void
-test_buffers(void)
-{
- char str[256];
- char str2[256];
+ /* server-side */
+ di_digest256_map_t *s_keymap=NULL;
+ curve25519_keypair_t s_keypair;
+ uint8_t s_buf[NTOR_REPLY_LEN];
+ uint8_t s_keys[400];
- buf_t *buf = NULL, *buf2 = NULL;
- const char *cp;
+ /* shared */
+ const curve25519_public_key_t *server_pubkey;
+ uint8_t node_id[20] = "abcdefghijklmnopqrst";
- int j;
- size_t r;
+ (void) arg;
- /****
- * buf_new
- ****/
- if (!(buf = buf_new()))
- test_fail();
+ /* Make the server some keys */
+ curve25519_secret_key_generate(&s_keypair.seckey, 0);
+ curve25519_public_key_generate(&s_keypair.pubkey, &s_keypair.seckey);
+ dimap_add_entry(&s_keymap, s_keypair.pubkey.public_key, &s_keypair);
+ server_pubkey = &s_keypair.pubkey;
- //test_eq(buf_capacity(buf), 4096);
- test_eq(buf_datalen(buf), 0);
+ /* client handshake 1. */
+ memset(c_buf, 0, NTOR_ONIONSKIN_LEN);
+ tt_int_op(0, ==, onion_skin_ntor_create(node_id, server_pubkey,
+ &c_state, c_buf));
- /****
- * 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);
- }
+ /* server handshake */
+ memset(s_buf, 0, NTOR_REPLY_LEN);
+ memset(s_keys, 0, 40);
+ tt_int_op(0, ==, onion_skin_ntor_server_handshake(c_buf, s_keymap, NULL,
+ node_id,
+ s_buf, s_keys, 400));
- /* 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);
- }
+ /* client handshake 2 */
+ memset(c_keys, 0, 40);
+ tt_int_op(0, ==, onion_skin_ntor_client_handshake(c_state, s_buf,
+ c_keys, 400));
- /* 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;
+ test_memeq(c_keys, s_keys, 400);
+ memset(s_buf, 0, 40);
+ test_memneq(c_keys, s_buf, 40);
done:
- if (buf)
- buf_free(buf);
- if (buf2)
- buf_free(buf2);
+ ntor_handshake_state_free(c_state);
+ dimap_free(s_keymap, NULL);
}
+#endif
-/** Run unit tests for the onion handshake code. */
+/** Run unit tests for the onion queues. */
static void
-test_onion_handshake(void)
+test_onion_queues(void)
{
- /* client-side */
- crypto_dh_t *c_dh = NULL;
- char c_buf[ONIONSKIN_CHALLENGE_LEN];
- char c_keys[40];
+ uint8_t buf1[TAP_ONIONSKIN_CHALLENGE_LEN] = {0};
+ uint8_t buf2[NTOR_ONIONSKIN_LEN] = {0};
- /* server-side */
- char s_buf[ONIONSKIN_REPLY_LEN];
- char s_keys[40];
+ or_circuit_t *circ1 = or_circuit_new(0, NULL);
+ or_circuit_t *circ2 = or_circuit_new(0, NULL);
- /* shared */
- crypto_pk_t *pk = NULL;
+ create_cell_t *onionskin = NULL, *create2_ptr;
+ create_cell_t *create1 = tor_malloc_zero(sizeof(create_cell_t));
+ create_cell_t *create2 = tor_malloc_zero(sizeof(create_cell_t));
+ create2_ptr = create2; /* remember, but do not free */
- pk = pk_generate(0);
+ create_cell_init(create1, CELL_CREATE, ONION_HANDSHAKE_TYPE_TAP,
+ TAP_ONIONSKIN_CHALLENGE_LEN, buf1);
+ create_cell_init(create2, CELL_CREATE, ONION_HANDSHAKE_TYPE_NTOR,
+ NTOR_ONIONSKIN_LEN, buf2);
- /* client handshake 1. */
- memset(c_buf, 0, ONIONSKIN_CHALLENGE_LEN);
- test_assert(! onion_skin_create(pk, &c_dh, c_buf));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ test_eq(0, onion_pending_add(circ1, create1));
+ create1 = NULL;
+ test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
- /* server handshake */
- memset(s_buf, 0, ONIONSKIN_REPLY_LEN);
- memset(s_keys, 0, 40);
- test_assert(! onion_skin_server_handshake(c_buf, pk, NULL,
- s_buf, s_keys, 40));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ test_eq(0, onion_pending_add(circ2, create2));
+ create2 = NULL;
+ test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
- /* client handshake 2 */
- memset(c_keys, 0, 40);
- test_assert(! onion_skin_client_handshake(c_dh, s_buf, c_keys, 40));
+ test_eq_ptr(circ2, onion_next_task(&onionskin));
+ test_eq(1, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
+ tt_ptr_op(onionskin, ==, create2_ptr);
- if (memcmp(c_keys, s_keys, 40)) {
- puts("Aiiiie");
- exit(1);
- }
- test_memeq(c_keys, s_keys, 40);
- memset(s_buf, 0, 40);
- test_memneq(c_keys, s_buf, 40);
+ clear_pending_onions();
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_TAP));
+ test_eq(0, onion_num_pending(ONION_HANDSHAKE_TYPE_NTOR));
done:
- if (c_dh)
- crypto_dh_free(c_dh);
- if (pk)
- crypto_pk_free(pk);
+ circuit_free(TO_CIRCUIT(circ1));
+ circuit_free(TO_CIRCUIT(circ2));
+ tor_free(create1);
+ tor_free(create2);
+ tor_free(onionskin);
}
static void
@@ -872,14 +473,14 @@ test_circuit_timeout(void)
circuit_build_times_t estimate;
circuit_build_times_t final;
double timeout1, timeout2;
- or_state_t state;
+ or_state_t *state=NULL;
int i, runs;
double close_ms;
circuit_build_times_init(&initial);
circuit_build_times_init(&estimate);
circuit_build_times_init(&final);
- memset(&state, 0, sizeof(or_state_t));
+ state = or_state_new();
circuitbuild_running_unit_tests();
#define timeout0 (build_time_t)(30*1000.0)
@@ -911,8 +512,9 @@ test_circuit_timeout(void)
test_assert(estimate.total_build_times <= CBT_NCIRCUITS_TO_OBSERVE);
- circuit_build_times_update_state(&estimate, &state);
- test_assert(circuit_build_times_parse_state(&final, &state) == 0);
+ circuit_build_times_update_state(&estimate, state);
+ circuit_build_times_free_timeouts(&final);
+ test_assert(circuit_build_times_parse_state(&final, state) == 0);
circuit_build_times_update_alpha(&final);
timeout2 = circuit_build_times_calculate_timeout(&final,
@@ -1001,336 +603,10 @@ test_circuit_timeout(void)
}
done:
- return;
-}
-
-/* Helper: assert that short_policy parses and writes back out as itself,
- or as <b>expected</b> if that's provided. */
-static void
-test_short_policy_parse(const char *input,
- const char *expected)
-{
- short_policy_t *short_policy = NULL;
- char *out = NULL;
-
- if (expected == NULL)
- expected = input;
-
- short_policy = parse_short_policy(input);
- tt_assert(short_policy);
- out = write_short_policy(short_policy);
- tt_str_op(out, ==, expected);
-
- done:
- tor_free(out);
- short_policy_free(short_policy);
-}
-
-/** Helper: Parse the exit policy string in <b>policy_str</b>, and make sure
- * that policies_summarize() produces the string <b>expected_summary</b> from
- * it. */
-static void
-test_policy_summary_helper(const char *policy_str,
- const char *expected_summary)
-{
- config_line_t line;
- smartlist_t *policy = smartlist_new();
- char *summary = NULL;
- char *summary_after = NULL;
- int r;
- short_policy_t *short_policy = NULL;
-
- line.key = (char*)"foo";
- line.value = (char *)policy_str;
- line.next = NULL;
-
- r = policies_parse_exit_policy(&line, &policy, 0, NULL, 1);
- test_eq(r, 0);
- summary = policy_summarize(policy);
-
- test_assert(summary != NULL);
- test_streq(summary, expected_summary);
-
- short_policy = parse_short_policy(summary);
- tt_assert(short_policy);
- summary_after = write_short_policy(short_policy);
- test_streq(summary, summary_after);
-
- done:
- tor_free(summary_after);
- tor_free(summary);
- if (policy)
- addr_policy_list_free(policy);
- short_policy_free(short_policy);
-}
-
-/** Run unit tests for generating summary lines of exit policies */
-static void
-test_policies(void)
-{
- int i;
- smartlist_t *policy = NULL, *policy2 = NULL, *policy3 = NULL,
- *policy4 = NULL, *policy5 = NULL, *policy6 = NULL,
- *policy7 = NULL;
- addr_policy_t *p;
- tor_addr_t tar;
- config_line_t line;
- smartlist_t *sm = NULL;
- char *policy_str = NULL;
-
- policy = smartlist_new();
-
- p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
- test_assert(p != NULL);
- test_eq(ADDR_POLICY_REJECT, p->policy_type);
- tor_addr_from_ipv4h(&tar, 0xc0a80000u);
- test_eq(0, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
- test_eq(16, p->maskbits);
- test_eq(1, p->prt_min);
- test_eq(65535, p->prt_max);
-
- smartlist_add(policy, p);
-
- tor_addr_from_ipv4h(&tar, 0x01020304u);
- test_assert(ADDR_POLICY_ACCEPTED ==
- compare_tor_addr_to_addr_policy(&tar, 2, policy));
- tor_addr_make_unspec(&tar);
- test_assert(ADDR_POLICY_PROBABLY_ACCEPTED ==
- compare_tor_addr_to_addr_policy(&tar, 2, policy));
- tor_addr_from_ipv4h(&tar, 0xc0a80102);
- test_assert(ADDR_POLICY_REJECTED ==
- compare_tor_addr_to_addr_policy(&tar, 2, policy));
-
- test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, NULL, 1));
- test_assert(policy2);
-
- policy3 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("reject *:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy3, p);
- p = router_parse_addr_policy_item_from_string("accept *:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy3, p);
-
- policy4 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("accept *:443",-1);
- test_assert(p != NULL);
- smartlist_add(policy4, p);
- p = router_parse_addr_policy_item_from_string("accept *:443",-1);
- test_assert(p != NULL);
- smartlist_add(policy4, p);
-
- policy5 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("reject 0.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 169.254.0.0/16:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 127.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 10.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 172.16.0.0/12:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject 80.190.250.90:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject *:1-65534",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("reject *:65535",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
- p = router_parse_addr_policy_item_from_string("accept *:1-65535",-1);
- test_assert(p != NULL);
- smartlist_add(policy5, p);
-
- policy6 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("accept 43.3.0.0/9:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy6, p);
-
- policy7 = smartlist_new();
- p = router_parse_addr_policy_item_from_string("accept 0.0.0.0/8:*",-1);
- test_assert(p != NULL);
- smartlist_add(policy7, p);
-
- test_assert(!exit_policy_is_general_exit(policy));
- test_assert(exit_policy_is_general_exit(policy2));
- test_assert(!exit_policy_is_general_exit(NULL));
- test_assert(!exit_policy_is_general_exit(policy3));
- test_assert(!exit_policy_is_general_exit(policy4));
- test_assert(!exit_policy_is_general_exit(policy5));
- test_assert(!exit_policy_is_general_exit(policy6));
- test_assert(!exit_policy_is_general_exit(policy7));
-
- test_assert(cmp_addr_policies(policy, policy2));
- test_assert(cmp_addr_policies(policy, NULL));
- test_assert(!cmp_addr_policies(policy2, policy2));
- test_assert(!cmp_addr_policies(NULL, NULL));
-
- test_assert(!policy_is_reject_star(policy2));
- test_assert(policy_is_reject_star(policy));
- test_assert(policy_is_reject_star(NULL));
-
- addr_policy_list_free(policy);
- policy = NULL;
-
- /* make sure compacting logic works. */
- policy = NULL;
- line.key = (char*)"foo";
- line.value = (char*)"accept *:80,reject private:*,reject *:*";
- line.next = NULL;
- test_assert(0 == policies_parse_exit_policy(&line, &policy, 0, NULL, 1));
- test_assert(policy);
- //test_streq(policy->string, "accept *:80");
- //test_streq(policy->next->string, "reject *:*");
- test_eq(smartlist_len(policy), 2);
-
- /* test policy summaries */
- /* check if we properly ignore private IP addresses */
- test_policy_summary_helper("reject 192.168.0.0/16:*,"
- "reject 0.0.0.0/8:*,"
- "reject 10.0.0.0/8:*,"
- "accept *:10-30,"
- "accept *:90,"
- "reject *:*",
- "accept 10-30,90");
- /* check all accept policies, and proper counting of rejects */
- test_policy_summary_helper("reject 11.0.0.0/9:80,"
- "reject 12.0.0.0/9:80,"
- "reject 13.0.0.0/9:80,"
- "reject 14.0.0.0/9:80,"
- "accept *:*", "accept 1-65535");
- test_policy_summary_helper("reject 11.0.0.0/9:80,"
- "reject 12.0.0.0/9:80,"
- "reject 13.0.0.0/9:80,"
- "reject 14.0.0.0/9:80,"
- "reject 15.0.0.0:81,"
- "accept *:*", "accept 1-65535");
- test_policy_summary_helper("reject 11.0.0.0/9:80,"
- "reject 12.0.0.0/9:80,"
- "reject 13.0.0.0/9:80,"
- "reject 14.0.0.0/9:80,"
- "reject 15.0.0.0:80,"
- "accept *:*",
- "reject 80");
- /* no exits */
- test_policy_summary_helper("accept 11.0.0.0/9:80,"
- "reject *:*",
- "reject 1-65535");
- /* port merging */
- test_policy_summary_helper("accept *:80,"
- "accept *:81,"
- "accept *:100-110,"
- "accept *:111,"
- "reject *:*",
- "accept 80-81,100-111");
- /* border ports */
- test_policy_summary_helper("accept *:1,"
- "accept *:3,"
- "accept *:65535,"
- "reject *:*",
- "accept 1,3,65535");
- /* holes */
- test_policy_summary_helper("accept *:1,"
- "accept *:3,"
- "accept *:5,"
- "accept *:7,"
- "reject *:*",
- "accept 1,3,5,7");
- test_policy_summary_helper("reject *:1,"
- "reject *:3,"
- "reject *:5,"
- "reject *:7,"
- "accept *:*",
- "reject 1,3,5,7");
-
- /* Short policies with unrecognized formats should get accepted. */
- test_short_policy_parse("accept fred,2,3-5", "accept 2,3-5");
- test_short_policy_parse("accept 2,fred,3", "accept 2,3");
- test_short_policy_parse("accept 2,fred,3,bob", "accept 2,3");
- test_short_policy_parse("accept 2,-3,500-600", "accept 2,500-600");
- /* Short policies with nil entries are accepted too. */
- test_short_policy_parse("accept 1,,3", "accept 1,3");
- test_short_policy_parse("accept 100-200,,", "accept 100-200");
- test_short_policy_parse("reject ,1-10,,,,30-40", "reject 1-10,30-40");
-
- /* Try parsing various broken short policies */
- tt_ptr_op(NULL, ==, parse_short_policy("accept 200-199"));
- tt_ptr_op(NULL, ==, parse_short_policy(""));
- tt_ptr_op(NULL, ==, parse_short_policy("rejekt 1,2,3"));
- tt_ptr_op(NULL, ==, parse_short_policy("reject "));
- tt_ptr_op(NULL, ==, parse_short_policy("reject"));
- tt_ptr_op(NULL, ==, parse_short_policy("rej"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2,3,100000"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2,3x,4"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2,3x,4"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2-"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 2-x"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 1-,3"));
- tt_ptr_op(NULL, ==, parse_short_policy("accept 1-,3"));
- /* Test a too-long policy. */
- {
- int i;
- char *policy = NULL;
- smartlist_t *chunks = smartlist_new();
- smartlist_add(chunks, tor_strdup("accept "));
- for (i=1; i<10000; ++i)
- smartlist_add_asprintf(chunks, "%d,", i);
- smartlist_add(chunks, tor_strdup("20000"));
- policy = smartlist_join_strings(chunks, "", 0, NULL);
- SMARTLIST_FOREACH(chunks, char *, ch, tor_free(ch));
- smartlist_free(chunks);
- tt_ptr_op(NULL, ==, parse_short_policy(policy));/* shouldn't be accepted */
- tor_free(policy); /* could leak. */
- }
-
- /* truncation ports */
- sm = smartlist_new();
- for (i=1; i<2000; i+=2) {
- char buf[POLICY_BUF_LEN];
- tor_snprintf(buf, sizeof(buf), "reject *:%d", i);
- smartlist_add(sm, tor_strdup(buf));
- }
- smartlist_add(sm, tor_strdup("accept *:*"));
- policy_str = smartlist_join_strings(sm, ",", 0, NULL);
- test_policy_summary_helper( policy_str,
- "accept 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,"
- "46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,"
- "92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,"
- "130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,"
- "166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,"
- "202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,"
- "238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,"
- "274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,"
- "310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,"
- "346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,"
- "382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,"
- "418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,"
- "454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,"
- "490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522");
-
- done:
- addr_policy_list_free(policy);
- addr_policy_list_free(policy2);
- addr_policy_list_free(policy3);
- addr_policy_list_free(policy4);
- addr_policy_list_free(policy5);
- addr_policy_list_free(policy6);
- addr_policy_list_free(policy7);
- tor_free(policy_str);
- if (sm) {
- SMARTLIST_FOREACH(sm, char *, s, tor_free(s));
- smartlist_free(sm);
- }
+ circuit_build_times_free_timeouts(&initial);
+ circuit_build_times_free_timeouts(&estimate);
+ circuit_build_times_free_timeouts(&final);
+ or_state_free(state);
}
/** Test encoding and parsing of rendezvous service descriptors. */
@@ -1354,11 +630,20 @@ test_rend_fns(void)
char address2[] = "aaaaaaaaaaaaaaaa.onion";
char address3[] = "fooaddress.exit";
char address4[] = "www.torproject.org";
+ char address5[] = "foo.abcdefghijklmnop.onion";
+ char address6[] = "foo.bar.abcdefghijklmnop.onion";
+ char address7[] = ".abcdefghijklmnop.onion";
test_assert(BAD_HOSTNAME == parse_extended_hostname(address1));
test_assert(ONION_HOSTNAME == parse_extended_hostname(address2));
+ test_streq(address2, "aaaaaaaaaaaaaaaa");
test_assert(EXIT_HOSTNAME == parse_extended_hostname(address3));
test_assert(NORMAL_HOSTNAME == parse_extended_hostname(address4));
+ test_assert(ONION_HOSTNAME == parse_extended_hostname(address5));
+ test_streq(address5, "abcdefghijklmnop");
+ test_assert(ONION_HOSTNAME == parse_extended_hostname(address6));
+ test_streq(address6, "abcdefghijklmnop");
+ test_assert(BAD_HOSTNAME == parse_extended_hostname(address7));
pk1 = pk_generate(0);
pk2 = pk_generate(1);
@@ -1448,72 +733,78 @@ 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)
{
int i, j;
time_t now = 1281533250; /* 2010-08-11 13:27:30 UTC */
- char *s = NULL;
+ char *s = NULL, *v = NULL;
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-ips zz=24,xy=8\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"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs ab=8\n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n",
*dirreq_stats_2 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips \n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs \n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=0,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n",
*dirreq_stats_3 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips \n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs \n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=0\n",
*dirreq_stats_4 =
"dirreq-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"dirreq-v3-ips \n"
- "dirreq-v2-ips \n"
"dirreq-v3-reqs \n"
- "dirreq-v2-reqs \n"
"dirreq-v3-resp ok=8,not-enough-sigs=0,unavailable=0,not-found=0,"
"not-modified=0,busy=0\n"
- "dirreq-v2-resp ok=0,unavailable=0,not-found=0,not-modified=0,"
- "busy=0\n"
"dirreq-v3-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v2-direct-dl complete=0,timeout=0,running=0\n"
- "dirreq-v3-tunneled-dl complete=0,timeout=0,running=4\n"
- "dirreq-v2-tunneled-dl complete=0,timeout=0,running=0\n",
+ "dirreq-v3-tunneled-dl complete=0,timeout=0,running=4\n",
*entry_stats_1 =
"entry-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"entry-ips ab=8\n",
@@ -1521,61 +812,79 @@ test_geoip(void)
"entry-stats-end 2010-08-12 13:27:30 (86400 s)\n"
"entry-ips \n";
tor_addr_t addr;
+ struct in6_addr in6;
/* Populate the DB a bit. Add these in order, since we can't do the final
* 'sort' step. These aren't very good IP addresses, but they're perfectly
* fine uint32_t values. */
- test_eq(0, geoip_parse_entry("10,50,AB"));
- test_eq(0, geoip_parse_entry("52,90,XY"));
- test_eq(0, geoip_parse_entry("95,100,AB"));
- test_eq(0, geoip_parse_entry("\"105\",\"140\",\"ZZ\""));
- test_eq(0, geoip_parse_entry("\"150\",\"190\",\"XY\""));
- test_eq(0, geoip_parse_entry("\"200\",\"250\",\"AB\""));
+ test_eq(0, geoip_parse_entry("10,50,AB", AF_INET));
+ test_eq(0, geoip_parse_entry("52,90,XY", AF_INET));
+ test_eq(0, geoip_parse_entry("95,100,AB", AF_INET));
+ test_eq(0, geoip_parse_entry("\"105\",\"140\",\"ZZ\"", AF_INET));
+ test_eq(0, geoip_parse_entry("\"150\",\"190\",\"XY\"", AF_INET));
+ test_eq(0, geoip_parse_entry("\"200\",\"250\",\"AB\"", AF_INET));
+
+ /* Populate the IPv6 DB equivalently with fake IPs in the same range */
+ test_eq(0, geoip_parse_entry("::a,::32,AB", AF_INET6));
+ test_eq(0, geoip_parse_entry("::34,::5a,XY", AF_INET6));
+ test_eq(0, geoip_parse_entry("::5f,::64,AB", AF_INET6));
+ test_eq(0, geoip_parse_entry("::69,::8c,ZZ", AF_INET6));
+ test_eq(0, geoip_parse_entry("::96,::be,XY", AF_INET6));
+ test_eq(0, geoip_parse_entry("::c8,::fa,AB", AF_INET6));
/* We should have 4 countries: ??, ab, xy, zz. */
test_eq(4, geoip_get_n_countries());
- /* Make sure that country ID actually works. */
-#define NAMEFOR(x) geoip_get_country_name(geoip_get_country_by_ip(x))
- test_streq("??", NAMEFOR(3));
- test_eq(0, geoip_get_country_by_ip(3));
- test_streq("ab", NAMEFOR(32));
- test_streq("??", NAMEFOR(5));
- test_streq("??", NAMEFOR(51));
- test_streq("xy", NAMEFOR(150));
- test_streq("xy", NAMEFOR(190));
- test_streq("??", NAMEFOR(2000));
-#undef NAMEFOR
+ memset(&in6, 0, sizeof(in6));
+
+ CHECK_COUNTRY("??", 3);
+ CHECK_COUNTRY("ab", 32);
+ CHECK_COUNTRY("??", 5);
+ CHECK_COUNTRY("??", 51);
+ CHECK_COUNTRY("xy", 150);
+ CHECK_COUNTRY("xy", 190);
+ CHECK_COUNTRY("??", 2000);
+
+ test_eq(0, geoip_get_country_by_ipv4(3));
+ SET_TEST_IPV6(3);
+ test_eq(0, geoip_get_country_by_ipv6(&in6));
get_options_mutable()->BridgeRelay = 1;
get_options_mutable()->BridgeRecordUsageByCountry = 1;
/* Put 9 observations in AB... */
for (i=32; i < 40; ++i) {
- tor_addr_from_ipv4h(&addr, (uint32_t) i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-7200);
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-7200);
}
- tor_addr_from_ipv4h(&addr, (uint32_t) 225);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-7200);
+ SET_TEST_ADDRESS(225);
+ 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) {
- tor_addr_from_ipv4h(&addr, (uint32_t) i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now-3600);
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now-3600);
}
/* and 17 observations in ZZ... */
for (i=110; i < 127; ++i) {
- tor_addr_from_ipv4h(&addr, (uint32_t) i);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(i);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
}
- s = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s);
+ test_assert(v);
test_streq("zz=24,ab=16,xy=8", s);
+ test_streq("v4=16,v6=16", v);
tor_free(s);
+ tor_free(v);
/* Now clear out all the AB observations. */
geoip_remove_old_clients(now-6000);
- s = geoip_get_client_history(GEOIP_CLIENT_CONNECT);
+ geoip_get_client_history(GEOIP_CLIENT_CONNECT, &s, &v);
test_assert(s);
+ test_assert(v);
test_streq("zz=24,xy=8", s);
+ test_streq("v4=16,v6=16", v);
+ tor_free(s);
+ tor_free(v);
/* Start testing bridge statistics by making sure that we don't output
* bridge stats without initializing them. */
@@ -1586,6 +895,7 @@ test_geoip(void)
* the connecting clients added above. */
geoip_bridge_stats_init(now);
s = geoip_format_bridge_stats(now + 86400);
+ test_assert(s);
test_streq(bridge_stats_1, s);
tor_free(s);
@@ -1604,16 +914,16 @@ test_geoip(void)
/* Start testing dirreq statistics by making sure that we don't collect
* dirreq stats without initializing them. */
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s);
/* Initialize stats, note one connecting client, and generate the
* dirreq-stats history string. */
geoip_dirreq_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(100);
+ 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);
@@ -1621,16 +931,16 @@ test_geoip(void)
/* Stop collecting stats, add another connecting client, and ensure we
* don't generate a history string. */
geoip_dirreq_stats_term();
- tor_addr_from_ipv4h(&addr, (uint32_t) 101);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(101);
+ geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, NULL, now);
s = geoip_format_dirreq_stats(now + 86400);
test_assert(!s);
/* Re-start stats, add a connecting client, reset stats, and make sure
* that we get an all empty history string. */
geoip_dirreq_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_NETWORKSTATUS, &addr, now);
+ SET_TEST_ADDRESS(100);
+ 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);
@@ -1638,16 +948,16 @@ test_geoip(void)
/* Note a successful network status response and make sure that it
* appears in the history string. */
- geoip_note_ns_response(GEOIP_CLIENT_NETWORKSTATUS, GEOIP_SUCCESS);
+ geoip_note_ns_response(GEOIP_SUCCESS);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_3, s);
tor_free(s);
/* Start a tunneled directory request. */
- geoip_start_dirreq((uint64_t) 1, 1024, GEOIP_CLIENT_NETWORKSTATUS,
- DIRREQ_TUNNELED);
+ geoip_start_dirreq((uint64_t) 1, 1024, DIRREQ_TUNNELED);
s = geoip_format_dirreq_stats(now + 86400);
test_streq(dirreq_stats_4, s);
+ tor_free(s);
/* Stop collecting directory request statistics and start gathering
* entry stats. */
@@ -1657,16 +967,16 @@ test_geoip(void)
/* Start testing entry statistics by making sure that we don't collect
* anything without initializing entry stats. */
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(100);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_assert(!s);
/* Initialize stats, note one connecting client, and generate the
* entry-stats history string. */
geoip_entry_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(100);
+ 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);
@@ -1674,16 +984,16 @@ test_geoip(void)
/* Stop collecting stats, add another connecting client, and ensure we
* don't generate a history string. */
geoip_entry_stats_term();
- tor_addr_from_ipv4h(&addr, (uint32_t) 101);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(101);
+ geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, NULL, now);
s = geoip_format_entry_stats(now + 86400);
test_assert(!s);
/* Re-start stats, add a connecting client, reset stats, and make sure
* that we get an all empty history string. */
geoip_entry_stats_init(now);
- tor_addr_from_ipv4h(&addr, (uint32_t) 100);
- geoip_note_client_seen(GEOIP_CLIENT_CONNECT, &addr, now);
+ SET_TEST_ADDRESS(100);
+ 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);
@@ -1695,8 +1005,84 @@ test_geoip(void)
done:
tor_free(s);
+ 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;
+
+ memset(&in6, 0, sizeof(in6));
+
+ /* 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)
@@ -1883,45 +1269,27 @@ const struct testcase_setup_t legacy_setup = {
#define ENT(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_ ## name }
-#define SUBENT(group, name) \
- { #group "_" #name, legacy_test_helper, 0, &legacy_setup, \
- test_ ## group ## _ ## name }
-#define DISABLED(name) \
- { #name, legacy_test_helper, TT_SKIP, &legacy_setup, test_ ## name }
#define FORK(name) \
{ #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 },
+ ENT(onion_queues),
+#ifdef CURVE25519_ENABLED
+ { "ntor_handshake", test_ntor_handshake, 0, NULL, NULL },
+#endif
ENT(circuit_timeout),
- 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[];
@@ -1929,18 +1297,54 @@ extern struct testcase_t dir_tests[];
extern struct testcase_t microdesc_tests[];
extern struct testcase_t pt_tests[];
extern struct testcase_t config_tests[];
+extern struct testcase_t introduce_tests[];
+extern struct testcase_t replaycache_tests[];
+extern struct testcase_t relaycell_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[];
+extern struct testcase_t controller_event_tests[];
+extern struct testcase_t logging_tests[];
+extern struct testcase_t hs_tests[];
+extern struct testcase_t nodelist_tests[];
+extern struct testcase_t routerkeys_tests[];
+extern struct testcase_t oom_tests[];
+extern struct testcase_t policy_tests[];
+extern struct testcase_t status_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 },
+ { "util/logging/", logging_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 },
+ { "relaycell/", relaycell_tests },
+ { "introduce/", introduce_tests },
+ { "circuitlist/", circuitlist_tests },
+ { "circuitmux/", circuitmux_tests },
+ { "options/", options_tests },
+ { "extorport/", extorport_tests },
+ { "control/", controller_event_tests },
+ { "hs/", hs_tests },
+ { "nodelist/", nodelist_tests },
+ { "routerkeys/", routerkeys_tests },
+ { "oom/", oom_tests },
+ { "policy/" , policy_tests },
+ { "status/" , status_tests },
END_OF_GROUPS
};
@@ -1953,10 +1357,11 @@ main(int c, const char **v)
char *errmsg = NULL;
int i, i_out;
int loglevel = LOG_ERR;
+ int accel_crypto = 0;
#ifdef USE_DMALLOC
{
- int r = CRYPTO_set_mem_ex_functions(_tor_malloc, _tor_realloc, _tor_free);
+ int r = CRYPTO_set_mem_ex_functions(tor_malloc_, tor_realloc_, tor_free_);
tor_assert(r);
}
#endif
@@ -1975,6 +1380,8 @@ main(int c, const char **v)
loglevel = LOG_INFO;
} else if (!strcmp(v[i], "--debug")) {
loglevel = LOG_DEBUG;
+ } else if (!strcmp(v[i], "--accel")) {
+ accel_crypto = 1;
} else {
v[i_out++] = v[i];
}
@@ -1989,11 +1396,12 @@ main(int c, const char **v)
}
options->command = CMD_RUN_UNITTESTS;
- if (crypto_global_init(0, NULL, NULL)) {
+ if (crypto_global_init(accel_crypto, NULL, NULL)) {
printf("Can't initialize crypto subsystem; exiting.\n");
return 1;
}
crypto_set_tls_dh_prime(NULL);
+ crypto_seed_rng(1);
rep_hist_init();
network_init();
setup_directory();
@@ -2006,8 +1414,6 @@ main(int c, const char **v)
return 1;
}
- crypto_seed_rng(1);
-
atexit(remove_directory);
have_failed = (tinytest_main(c, v, testgroups) != 0);
diff --git a/src/test/test.h b/src/test/test.h
index 0b6e6c60c..861ce5ac3 100644
--- a/src/test/test.h
+++ b/src/test/test.h
@@ -1,10 +1,10 @@
/* Copyright (c) 2001-2003, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#ifndef _TOR_TEST_H
-#define _TOR_TEST_H
+#ifndef TOR_TEST_H
+#define TOR_TEST_H
/**
* \file test.h
@@ -36,17 +36,7 @@
#define test_strneq(expr1, expr2) tt_str_op((expr1), !=, (expr2))
#define test_mem_op(expr1, op, expr2, len) \
- tt_assert_test_fmt_type(expr1,expr2,#expr1" "#op" "#expr2, \
- const char *, \
- (memcmp(val1_, val2_, len) op 0), \
- char *, "%s", \
- { size_t printlen = (len)*2+1; \
- print_ = tor_malloc(printlen); \
- base16_encode(print_, printlen, value_, \
- (len)); }, \
- { tor_free(print_); }, \
- TT_EXIT_TEST_FUNCTION \
- );
+ tt_mem_op((expr1), op, (expr2), (len))
#define test_memeq(expr1, expr2, len) test_mem_op((expr1), ==, (expr2), len)
#define test_memneq(expr1, expr2, len) test_mem_op((expr1), !=, (expr2), len)
@@ -65,11 +55,130 @@
#define test_memeq_hex(expr1, hex) test_mem_op_hex(expr1, ==, hex)
+#define tt_double_op(a,op,b) \
+ tt_assert_test_type(a,b,#a" "#op" "#b,double,(val1_ op val2_),"%f", \
+ TT_EXIT_TEST_FUNCTION)
+
+#ifdef _MSC_VER
+#define U64_PRINTF_TYPE uint64_t
+#define U64_PRINTF_TYPE int64_t
+#else
+#define U64_PRINTF_TYPE unsigned long long
+#define I64_PRINTF_TYPE long long
+#endif
+
+#define tt_size_op(a,op,b) \
+ tt_assert_test_fmt_type(a,b,#a" "#op" "#b,size_t,(val1_ op val2_), \
+ U64_PRINTF_TYPE, U64_FORMAT, \
+ {print_ = (U64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION)
+
+#define tt_u64_op(a,op,b) \
+ tt_assert_test_fmt_type(a,b,#a" "#op" "#b,uint64_t,(val1_ op val2_), \
+ U64_PRINTF_TYPE, U64_FORMAT, \
+ {print_ = (U64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION)
+
+#define tt_i64_op(a,op,b) \
+ tt_assert_test_fmt_type(a,b,#a" "#op" "#b,int64_t,(val1_ op val2_), \
+ I64_PRINTF_TYPE, I64_FORMAT, \
+ {print_ = (I64_PRINTF_TYPE) value_;}, {}, TT_EXIT_TEST_FUNCTION)
+
const char *get_fname(const char *name);
crypto_pk_t *pk_generate(int idx);
void legacy_test_helper(void *data);
extern const struct testcase_setup_t legacy_setup;
+#define US2_CONCAT_2__(a, b) a ## __ ## b
+#define US_CONCAT_2__(a, b) a ## _ ## b
+#define US_CONCAT_3__(a, b, c) a ## _ ## b ## _ ## c
+#define US_CONCAT_2_(a, b) US_CONCAT_2__(a, b)
+#define US_CONCAT_3_(a, b, c) US_CONCAT_3__(a, b, c)
+
+/*
+ * These macros are helpful for streamlining the authorship of several test
+ * cases that use mocks.
+ *
+ * The pattern is as follows.
+ * * Declare a top level namespace:
+ * #define NS_MODULE foo
+ *
+ * * For each test case you want to write, create a new submodule in the
+ * namespace. All mocks and other information should belong to a single
+ * submodule to avoid interference with other test cases.
+ * You can simply name the submodule after the function in the module you
+ * are testing:
+ * #define NS_SUBMODULE some_function
+ * or, if you're wanting to write several tests against the same function,
+ * ie., you are testing an aspect of that function, you can use:
+ * #define NS_SUBMODULE ASPECT(some_function, behavior)
+ *
+ * * Declare all the mocks you will use. The NS_DECL macro serves to declare
+ * the mock in the current namespace (defined by NS_MODULE and NS_SUBMODULE).
+ * It behaves like MOCK_DECL:
+ * NS_DECL(int, dependent_function, (void *));
+ * Here, dependent_function must be declared and implemented with the
+ * MOCK_DECL and MOCK_IMPL macros. The NS_DECL macro also defines an integer
+ * global for use for tracking how many times a mock was called, and can be
+ * accessed by CALLED(mock_name). For example, you might put
+ * CALLED(dependent_function)++;
+ * in your mock body.
+ *
+ * * Define a function called NS(main) that will contain the body of the
+ * test case. The NS macro can be used to reference a name in the current
+ * namespace.
+ *
+ * * In NS(main), indicate that a mock function in the current namespace,
+ * declared with NS_DECL is to override that in the global namespace,
+ * with the NS_MOCK macro:
+ * NS_MOCK(dependent_function)
+ * Unmock with:
+ * NS_UNMOCK(dependent_function)
+ *
+ * * Define the mocks with the NS macro, eg.,
+ * int
+ * NS(dependent_function)(void *)
+ * {
+ * CALLED(dependent_function)++;
+ * }
+ *
+ * * In the struct testcase_t array, you can use the TEST_CASE and
+ * TEST_CASE_ASPECT macros to define the cases without having to do so
+ * explicitly nor without having to reset NS_SUBMODULE, eg.,
+ * struct testcase_t foo_tests[] = {
+ * TEST_CASE_ASPECT(some_function, behavior),
+ * ...
+ * END_OF_TESTCASES
+ * which will define a test case named "some_function__behavior".
+ */
+
+#define NAME_TEST_(name) #name
+#define NAME_TEST(name) NAME_TEST_(name)
+#define ASPECT(test_module, test_name) US2_CONCAT_2__(test_module, test_name)
+#define TEST_CASE(function) \
+ { \
+ NAME_TEST(function), \
+ NS_FULL(NS_MODULE, function, test_main), \
+ TT_FORK, \
+ NULL, \
+ NULL, \
+ }
+#define TEST_CASE_ASPECT(function, aspect) \
+ { \
+ NAME_TEST(ASPECT(function, aspect)), \
+ NS_FULL(NS_MODULE, ASPECT(function, aspect), test_main), \
+ TT_FORK, \
+ NULL, \
+ NULL, \
+ }
+
+#define NS(name) US_CONCAT_3_(NS_MODULE, NS_SUBMODULE, name)
+#define NS_FULL(module, submodule, name) US_CONCAT_3_(module, submodule, name)
+
+#define CALLED(mock_name) US_CONCAT_2_(NS(mock_name), called)
+#define NS_DECL(retval, mock_fn, args) \
+ static retval NS(mock_fn) args; int CALLED(mock_fn) = 0
+#define NS_MOCK(name) MOCK(name, NS(name))
+#define NS_UNMOCK(name) UNMOCK(name)
+
#endif
diff --git a/src/test/test_addr.c b/src/test/test_addr.c
index e3f38073e..50011e606 100644
--- a/src/test/test_addr.c
+++ b/src/test/test_addr.c
@@ -1,11 +1,13 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+#define ADDRESSMAP_PRIVATE
#include "orconfig.h"
#include "or.h"
#include "test.h"
+#include "addressmap.h"
static void
test_addr_basic(void)
@@ -38,10 +40,14 @@ test_addr_basic(void)
tor_free(cp);
u32 = 3;
test_assert(!addr_port_lookup(LOG_WARN, "localhost", NULL, &u32, &u16));
- test_eq(cp, NULL);
+ test_eq_ptr(cp, NULL);
test_eq(u32, 0x7f000001u);
test_eq(u16, 0);
tor_free(cp);
+
+ test_assert(addr_port_lookup(LOG_WARN, "localhost:3", &cp, &u32, NULL));
+ tor_free(cp);
+
test_eq(0, addr_mask_get_bits(0x0u));
test_eq(32, addr_mask_get_bits(0xFFFFFFFFu));
test_eq(16, addr_mask_get_bits(0xFFFF0000u));
@@ -67,10 +73,10 @@ test_addr_basic(void)
}
done:
- ;
+ tor_free(cp);
}
-#define _test_op_ip6(a,op,b,e1,e2) \
+#define test_op_ip6_(a,op,b,e1,e2) \
STMT_BEGIN \
tt_assert_test_fmt_type(a,b,e1" "#op" "e2,struct in6_addr*, \
(memcmp(val1_->s6_addr, val2_->s6_addr, 16) op 0), \
@@ -93,7 +99,7 @@ test_addr_basic(void)
#define test_pton6_same(a,b) STMT_BEGIN \
test_eq(tor_inet_pton(AF_INET6, a, &a1), 1); \
test_eq(tor_inet_pton(AF_INET6, b, &a2), 1); \
- _test_op_ip6(&a1,==,&a2,#a,#b); \
+ test_op_ip6_(&a1,==,&a2,#a,#b); \
STMT_END
/** Helper: Assert that <b>a</b> is recognized as a bad IPv6 address by
@@ -108,7 +114,7 @@ test_addr_basic(void)
test_eq(tor_inet_pton(AF_INET6, a, &a1), 1); \
test_streq(tor_inet_ntop(AF_INET6, &a1, buf, sizeof(buf)), b); \
test_eq(tor_inet_pton(AF_INET6, b, &a2), 1); \
- _test_op_ip6(&a1, ==, &a2, a, b); \
+ test_op_ip6_(&a1, ==, &a2, a, b); \
STMT_END
/** Helper: assert that <b>a</b> parses by tor_inet_pton() into a address that
@@ -159,7 +165,8 @@ test_addr_basic(void)
* as <b>pt1..pt2</b>. */
#define test_addr_mask_ports_parse(xx, f, ip1, ip2, ip3, ip4, mm, pt1, pt2) \
STMT_BEGIN \
- test_eq(tor_addr_parse_mask_ports(xx, &t1, &mask, &port1, &port2), f); \
+ test_eq(tor_addr_parse_mask_ports(xx, 0, &t1, &mask, &port1, &port2), \
+ f); \
p1=tor_inet_ntop(AF_INET6, &t1.addr.in6_addr, bug, sizeof(bug)); \
test_eq(htonl(ip1), tor_addr_to_in6_addr32(&t1)[0]); \
test_eq(htonl(ip2), tor_addr_to_in6_addr32(&t1)[1]); \
@@ -214,11 +221,12 @@ test_addr_ip6_helpers(void)
/* ==== Converting to and from sockaddr_t. */
sin = (struct sockaddr_in *)&sa_storage;
sin->sin_family = AF_INET;
- sin->sin_port = 9090;
+ sin->sin_port = htons(9090);
sin->sin_addr.s_addr = htonl(0x7f7f0102); /*127.127.1.2*/
- tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, NULL);
+ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin, &port1);
test_eq(tor_addr_family(&t1), AF_INET);
test_eq(tor_addr_to_ipv4h(&t1), 0x7f7f0102);
+ tt_int_op(port1, ==, 9090);
memset(&sa_storage, 0, sizeof(sa_storage));
test_eq(sizeof(struct sockaddr_in),
@@ -232,8 +240,9 @@ test_addr_ip6_helpers(void)
sin6->sin6_family = AF_INET6;
sin6->sin6_port = htons(7070);
sin6->sin6_addr.s6_addr[0] = 128;
- tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, NULL);
+ tor_addr_from_sockaddr(&t1, (struct sockaddr *)sin6, &port1);
test_eq(tor_addr_family(&t1), AF_INET6);
+ tt_int_op(port1, ==, 7070);
p1 = tor_addr_to_str(buf, &t1, sizeof(buf), 0);
test_streq(p1, "8000::");
@@ -337,6 +346,9 @@ test_addr_ip6_helpers(void)
test_pton6_bad("a:::b:c");
test_pton6_bad(":::a:b:c");
test_pton6_bad("a:b:c:::");
+ test_pton6_bad("1.2.3.4");
+ test_pton6_bad(":1.2.3.4");
+ test_pton6_bad(".2.3.4");
/* test internal checking */
test_external_ip("fbff:ffff::2:7", 0);
@@ -393,7 +405,6 @@ test_addr_ip6_helpers(void)
test_internal_ip("::ffff:169.254.0.0", 0);
test_internal_ip("::ffff:169.254.255.255", 0);
test_external_ip("::ffff:169.255.0.0", 0);
- test_assert(is_internal_IP(0x7f000001, 0));
/* tor_addr_compare(tor_addr_t x2) */
test_addr_compare("ffff::", ==, "ffff::0");
@@ -401,11 +412,11 @@ test_addr_ip6_helpers(void)
test_addr_compare("0::2:2:1", <, "0::ffff:0.3.2.1");
test_addr_compare("0::ffff:0.3.2.1", >, "0::0:0:0");
test_addr_compare("0::ffff:5.2.2.1", <, "::ffff:6.0.0.0"); /* XXXX wrong. */
- tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", &t1, NULL, NULL, NULL);
- tor_addr_parse_mask_ports("2.3.4.5", &t2, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("[::ffff:2.3.4.5]", 0, &t1, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL);
test_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) == 0);
- tor_addr_parse_mask_ports("[::ffff:2.3.4.4]", &t1, NULL, NULL, NULL);
- tor_addr_parse_mask_ports("2.3.4.5", &t2, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("[::ffff:2.3.4.4]", 0, &t1, NULL, NULL, NULL);
+ tor_addr_parse_mask_ports("2.3.4.5", 0, &t2, NULL, NULL, NULL);
test_assert(tor_addr_compare(&t1, &t2, CMP_SEMANTIC) < 0);
/* test compare_masked */
@@ -461,6 +472,9 @@ test_addr_ip6_helpers(void)
test_eq(0, i);
i = tor_addr_parse_PTR_name(&t1, "Foobar.baz", AF_UNSPEC, 1);
test_eq(0, i);
+ i = tor_addr_parse_PTR_name(&t1, "9999999999999999999999999999.in-addr.arpa",
+ AF_UNSPEC, 1);
+ test_eq(-1, i);
i = tor_addr_parse_PTR_name(&t1, "1.0.168.192.in-addr.arpa",
AF_UNSPEC, 1);
test_eq(1, i);
@@ -568,6 +582,7 @@ test_addr_ip6_helpers(void)
test_streq(rbuf, addr_PTR);
}
+ /* XXXX turn this into a separate function; it's not all IPv6. */
/* test tor_addr_parse_mask_ports */
test_addr_mask_ports_parse("[::f]/17:47-95", AF_INET6,
0, 0, 0, 0x0000000f, 17, 47, 95);
@@ -581,27 +596,123 @@ test_addr_ip6_helpers(void)
0xabcd0002, 0, 0, 0x044a0000, 128, 2, 65000);
test_streq(p1, "abcd:2::44a:0");
- r=tor_addr_parse_mask_ports("[fefef::]/112", &t1, NULL, NULL, NULL);
+ /* Try some long addresses. */
+ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == AF_INET6);
+ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:11111]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[ffff:1111:1111:1111:1111:1111:1111:1111:1]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports(
+ "[ffff:1111:1111:1111:1111:1111:1111:ffff:"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:"
+ "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]",
+ 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ /* Try some failing cases. */
+ r=tor_addr_parse_mask_ports("[fefef::]/112", 0, &t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[fefe::/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("efef::/112", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[fefe::", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[fefe::X]", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("efef::/112", 0, &t1, NULL, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]", &t1, NULL, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f::]",0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[::f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f:f:f:f:f]",0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/fred",0,&t1,&mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("[f:f:f:f:f::]/255.255.0.0",
+ 0,&t1, NULL, NULL, NULL);
+ test_assert(r == -1);
+ /* This one will get rejected because it isn't a pure prefix. */
+ r=tor_addr_parse_mask_ports("1.1.2.3/255.255.64.0",0,&t1, &mask,NULL,NULL);
test_assert(r == -1);
/* Test for V4-mapped address with mask < 96. (arguably not valid) */
- r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]", &t1, &mask, NULL, NULL);
+ r=tor_addr_parse_mask_ports("[::ffff:1.1.2.2/33]",0,&t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("1.1.2.2/33",0,&t1, &mask, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("1.1.2.2/33", &t1, &mask, NULL, NULL);
+ /* Try extended wildcard addresses with out TAPMP_EXTENDED_STAR*/
+ r=tor_addr_parse_mask_ports("*4",0,&t1, &mask, NULL, NULL);
test_assert(r == -1);
- r=tor_addr_parse_mask_ports("1.1.2.2/31", &t1, &mask, NULL, NULL);
+ r=tor_addr_parse_mask_ports("*6",0,&t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+#if 0
+ /* Try a mask with a wildcard. */
+ r=tor_addr_parse_mask_ports("*/16",0,&t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("*4/16",TAPMP_EXTENDED_STAR,
+ &t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+ r=tor_addr_parse_mask_ports("*6/30",TAPMP_EXTENDED_STAR,
+ &t1, &mask, NULL, NULL);
+ test_assert(r == -1);
+#endif
+ /* Basic mask tests*/
+ r=tor_addr_parse_mask_ports("1.1.2.2/31",0,&t1, &mask, NULL, NULL);
+ test_assert(r == AF_INET);
+ tt_int_op(mask,==,31);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010202);
+ r=tor_addr_parse_mask_ports("3.4.16.032:1-2",0,&t1, &mask, &port1, &port2);
test_assert(r == AF_INET);
- r=tor_addr_parse_mask_ports("[efef::]/112", &t1, &mask, &port1, &port2);
+ tt_int_op(mask,==,32);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0x03041020);
+ test_assert(port1 == 1);
+ test_assert(port2 == 2);
+ r=tor_addr_parse_mask_ports("1.1.2.3/255.255.128.0",0,&t1, &mask,NULL,NULL);
+ test_assert(r == AF_INET);
+ tt_int_op(mask,==,17);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0x01010203);
+ r=tor_addr_parse_mask_ports("[efef::]/112",0,&t1, &mask, &port1, &port2);
test_assert(r == AF_INET6);
test_assert(port1 == 1);
test_assert(port2 == 65535);
+ /* Try regular wildcard behavior without TAPMP_EXTENDED_STAR */
+ r=tor_addr_parse_mask_ports("*:80-443",0,&t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_INET); /* Old users of this always get inet */
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0);
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,80);
+ tt_int_op(port2,==,443);
+ /* Now try wildcards *with* TAPMP_EXTENDED_STAR */
+ r=tor_addr_parse_mask_ports("*:8000-9000",TAPMP_EXTENDED_STAR,
+ &t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_UNSPEC);
+ tt_int_op(tor_addr_family(&t1),==,AF_UNSPEC);
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,8000);
+ tt_int_op(port2,==,9000);
+ r=tor_addr_parse_mask_ports("*4:6667",TAPMP_EXTENDED_STAR,
+ &t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_INET);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET);
+ tt_int_op(tor_addr_to_ipv4h(&t1),==,0);
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,6667);
+ tt_int_op(port2,==,6667);
+ r=tor_addr_parse_mask_ports("*6",TAPMP_EXTENDED_STAR,
+ &t1,&mask,&port1,&port2);
+ tt_int_op(r,==,AF_INET6);
+ tt_int_op(tor_addr_family(&t1),==,AF_INET6);
+ tt_assert(tor_mem_is_zero((const char*)tor_addr_to_in6_addr32(&t1), 16));
+ tt_int_op(mask,==,0);
+ tt_int_op(port1,==,1);
+ tt_int_op(port2,==,65535);
/* make sure inet address lengths >= max */
test_assert(INET_NTOA_BUF_LEN >= sizeof("255.255.255.255"));
@@ -623,6 +734,257 @@ test_addr_ip6_helpers(void)
;
}
+/** Test tor_addr_port_parse(). */
+static void
+test_addr_parse(void)
+{
+ int r;
+ tor_addr_t addr;
+ char buf[TOR_ADDR_BUF_LEN];
+ uint16_t port = 0;
+
+ /* Correct call. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.1:1234",
+ &addr, &port, -1);
+ test_assert(r == 0);
+ tor_addr_to_str(buf, &addr, sizeof(buf), 0);
+ test_streq(buf, "192.0.2.1");
+ test_eq(port, 1234);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]:1234",
+ &addr, &port, -1);
+ test_assert(r == 0);
+ tor_addr_to_str(buf, &addr, sizeof(buf), 0);
+ test_streq(buf, "::1");
+ test_eq(port, 1234);
+
+ /* Domain name. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "torproject.org:1234",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ /* Only IP. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2",
+ &addr, &port, 200);
+ test_assert(r == 0);
+ tt_int_op(port,==,200);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]",
+ &addr, &port, 400);
+ test_assert(r == 0);
+ tt_int_op(port,==,400);
+
+ /* Bad port. */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2:66666",
+ &addr, &port, -1);
+ test_assert(r == -1);
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2:66666",
+ &addr, &port, 200);
+ test_assert(r == -1);
+
+ /* Only domain name */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "torproject.org",
+ &addr, &port, -1);
+ test_assert(r == -1);
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "torproject.org",
+ &addr, &port, 200);
+ test_assert(r == -1);
+
+ /* Bad IP address */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2:1234",
+ &addr, &port, -1);
+ test_assert(r == -1);
+
+ /* Make sure that the default port has lower priority than the real
+ one */
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "192.0.2.2:1337",
+ &addr, &port, 200);
+ test_assert(r == 0);
+ tt_int_op(port,==,1337);
+
+ r= tor_addr_port_parse(LOG_DEBUG,
+ "[::1]:1369",
+ &addr, &port, 200);
+ test_assert(r == 0);
+ tt_int_op(port,==,1369);
+
+ done:
+ ;
+}
+
+static void
+update_difference(int ipv6, uint8_t *d,
+ const tor_addr_t *a, const tor_addr_t *b)
+{
+ const int n_bytes = ipv6 ? 16 : 4;
+ uint8_t a_tmp[4], b_tmp[4];
+ const uint8_t *ba, *bb;
+ int i;
+
+ if (ipv6) {
+ ba = tor_addr_to_in6_addr8(a);
+ bb = tor_addr_to_in6_addr8(b);
+ } else {
+ set_uint32(a_tmp, tor_addr_to_ipv4n(a));
+ set_uint32(b_tmp, tor_addr_to_ipv4n(b));
+ ba = a_tmp; bb = b_tmp;
+ }
+
+ for (i = 0; i < n_bytes; ++i) {
+ d[i] |= ba[i] ^ bb[i];
+ }
+}
+
+static void
+test_virtaddrmap(void *data)
+{
+ /* Let's start with a bunch of random addresses. */
+ int ipv6, bits, iter, b;
+ virtual_addr_conf_t cfg[2];
+ uint8_t bytes[16];
+
+ (void)data;
+
+ tor_addr_parse(&cfg[0].addr, "64.65.0.0");
+ tor_addr_parse(&cfg[1].addr, "3491:c0c0::");
+
+ for (ipv6 = 0; ipv6 <= 1; ++ipv6) {
+ for (bits = 0; bits < 18; ++bits) {
+ tor_addr_t last_a;
+ cfg[ipv6].bits = bits;
+ memset(bytes, 0, sizeof(bytes));
+ tor_addr_copy(&last_a, &cfg[ipv6].addr);
+ /* Generate 128 addresses with each addr/bits combination. */
+ for (iter = 0; iter < 128; ++iter) {
+ tor_addr_t a;
+
+ get_random_virtual_addr(&cfg[ipv6], &a);
+ //printf("%s\n", fmt_addr(&a));
+ /* Make sure that the first b bits match the configured network */
+ tt_int_op(0, ==, tor_addr_compare_masked(&a, &cfg[ipv6].addr,
+ bits, CMP_EXACT));
+
+ /* And track which bits have been different between pairs of
+ * addresses */
+ update_difference(ipv6, bytes, &last_a, &a);
+ }
+
+ /* Now make sure all but the first 'bits' bits of bytes are true */
+ for (b = bits+1; b < (ipv6?128:32); ++b) {
+ tt_assert(1 & (bytes[b/8] >> (7-(b&7))));
+ }
+ }
+ }
+
+ done:
+ ;
+}
+
+static void
+test_addr_localname(void *arg)
+{
+ (void)arg;
+ tt_assert(tor_addr_hostname_is_local("localhost"));
+ tt_assert(tor_addr_hostname_is_local("LOCALHOST"));
+ tt_assert(tor_addr_hostname_is_local("LocalHost"));
+ tt_assert(tor_addr_hostname_is_local("local"));
+ tt_assert(tor_addr_hostname_is_local("LOCAL"));
+ tt_assert(tor_addr_hostname_is_local("here.now.local"));
+ tt_assert(tor_addr_hostname_is_local("here.now.LOCAL"));
+
+ tt_assert(!tor_addr_hostname_is_local(" localhost"));
+ tt_assert(!tor_addr_hostname_is_local("www.torproject.org"));
+ done:
+ ;
+}
+
+static void
+test_addr_dup_ip(void *arg)
+{
+ char *v = NULL;
+ (void)arg;
+#define CHECK(ip, s) do { \
+ v = tor_dup_ip(ip); \
+ tt_str_op(v,==,(s)); \
+ tor_free(v); \
+ } while (0)
+
+ CHECK(0xffffffff, "255.255.255.255");
+ CHECK(0x00000000, "0.0.0.0");
+ CHECK(0x7f000001, "127.0.0.1");
+ CHECK(0x01020304, "1.2.3.4");
+
+#undef CHECK
+ done:
+ tor_free(v);
+}
+
+static void
+test_addr_sockaddr_to_str(void *arg)
+{
+ char *v = NULL;
+ struct sockaddr_in sin;
+ struct sockaddr_in6 sin6;
+ struct sockaddr_storage ss;
+#ifdef HAVE_SYS_UN_H
+ struct sockaddr_un s_un;
+#endif
+#define CHECK(sa, s) do { \
+ v = tor_sockaddr_to_str((const struct sockaddr*) &(sa)); \
+ tt_str_op(v,==,(s)); \
+ tor_free(v); \
+ } while (0)
+ (void)arg;
+
+ memset(&ss,0,sizeof(ss));
+ ss.ss_family = AF_UNSPEC;
+ CHECK(ss, "unspec");
+
+ memset(&sin,0,sizeof(sin));
+ sin.sin_family = AF_INET;
+ sin.sin_addr.s_addr = htonl(0x7f808001);
+ sin.sin_port = htons(1234);
+ CHECK(sin, "127.128.128.1:1234");
+
+#ifdef HAVE_SYS_UN_H
+ memset(&s_un,0,sizeof(s_un));
+ s_un.sun_family = AF_UNIX;
+ strlcpy(s_un.sun_path, "/here/is/a/path", sizeof(s_un.sun_path));
+ CHECK(s_un, "unix:/here/is/a/path");
+#endif
+
+ memset(&sin6,0,sizeof(sin6));
+ sin6.sin6_family = AF_INET6;
+ memcpy(sin6.sin6_addr.s6_addr, "\x20\x00\x00\x00\x00\x00\x00\x00"
+ "\x00\x1a\x2b\x3c\x4d\x5e\x00\x01", 16);
+ sin6.sin6_port = htons(1234);
+ CHECK(sin6, "[2000::1a:2b3c:4d5e:1]:1234");
+
+ done:
+ tor_free(v);
+}
+
static void
test_addr_is_loopback(void *data)
{
@@ -658,13 +1020,45 @@ test_addr_is_loopback(void *data)
;
}
+static void
+test_addr_make_null(void *data)
+{
+ tor_addr_t *addr = tor_malloc(sizeof(*addr));
+ tor_addr_t *zeros = tor_malloc_zero(sizeof(*addr));
+ char buf[TOR_ADDR_BUF_LEN];
+ (void) data;
+ /* Ensure that before tor_addr_make_null, addr != 0's */
+ memset(addr, 1, sizeof(*addr));
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), !=, 0);
+ /* Test with AF == AF_INET */
+ zeros->family = AF_INET;
+ tor_addr_make_null(addr, AF_INET);
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), ==, 0);
+ tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), ==, "0.0.0.0");
+ /* Test with AF == AF_INET6 */
+ memset(addr, 1, sizeof(*addr));
+ zeros->family = AF_INET6;
+ tor_addr_make_null(addr, AF_INET6);
+ tt_int_op(memcmp(addr, zeros, sizeof(*addr)), ==, 0);
+ tt_str_op(tor_addr_to_str(buf, addr, sizeof(buf), 0), ==, "::");
+ done:
+ tor_free(addr);
+ tor_free(zeros);
+}
+
#define ADDR_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_addr_ ## name }
struct testcase_t addr_tests[] = {
ADDR_LEGACY(basic),
ADDR_LEGACY(ip6_helpers),
+ ADDR_LEGACY(parse),
+ { "virtaddr", test_virtaddrmap, 0, NULL, NULL },
+ { "localname", test_addr_localname, 0, NULL, NULL },
+ { "dup_ip", test_addr_dup_ip, 0, NULL, NULL },
+ { "sockaddr_to_str", test_addr_sockaddr_to_str, 0, NULL, NULL },
{ "is_loopback", test_addr_is_loopback, 0, NULL, NULL },
+ { "make_null", test_addr_make_null, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_bt_cl.c b/src/test/test_bt_cl.c
new file mode 100644
index 000000000..45ae82fb8
--- /dev/null
+++ b/src/test/test_bt_cl.c
@@ -0,0 +1,109 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "or.h"
+#include "util.h"
+#include "backtrace.h"
+#include "torlog.h"
+
+/* -1: no crash.
+ * 0: crash with a segmentation fault.
+ * 1x: crash with an assertion failure. */
+static int crashtype = 0;
+
+#ifdef __GNUC__
+#define NOINLINE __attribute__((noinline))
+#define NORETURN __attribute__((noreturn))
+#endif
+
+int crash(int x) NOINLINE;
+int oh_what(int x) NOINLINE;
+int a_tangled_web(int x) NOINLINE;
+int we_weave(int x) NOINLINE;
+static void abort_handler(int s) NORETURN;
+
+int
+crash(int x)
+{
+ if (crashtype == 0) {
+ *(volatile int *)0 = 0;
+ } else if (crashtype == 1) {
+ tor_assert(1 == 0);
+ } else if (crashtype == -1) {
+ ;
+ }
+
+ crashtype *= x;
+ return crashtype;
+}
+
+int
+oh_what(int x)
+{
+ /* We call crash() twice here, so that the compiler won't try to do a
+ * tail-call optimization. Only the first call will actually happen, but
+ * telling the compiler to maybe do the second call will prevent it from
+ * replacing the first call with a jump. */
+ return crash(x) + crash(x*2);
+}
+
+int
+a_tangled_web(int x)
+{
+ return oh_what(x) * 99 + oh_what(x);
+}
+
+int
+we_weave(int x)
+{
+ return a_tangled_web(x) + a_tangled_web(x+1);
+}
+
+static void
+abort_handler(int s)
+{
+ (void)s;
+ exit(0);
+}
+
+int
+main(int argc, char **argv)
+{
+ log_severity_list_t severity;
+
+ if (argc < 2) {
+ puts("I take an argument. It should be \"assert\" or \"crash\" or "
+ "\"none\"");
+ return 1;
+ }
+ if (!strcmp(argv[1], "assert")) {
+ crashtype = 1;
+ } else if (!strcmp(argv[1], "crash")) {
+ crashtype = 0;
+ } else if (!strcmp(argv[1], "none")) {
+ crashtype = -1;
+ } else {
+ puts("Argument should be \"assert\" or \"crash\" or \"none\"");
+ return 1;
+ }
+
+ init_logging();
+ set_log_severity_config(LOG_WARN, LOG_ERR, &severity);
+ add_stream_log(&severity, "stdout", STDOUT_FILENO);
+ tor_log_update_sigsafe_err_fds();
+
+ configure_backtrace_handler(NULL);
+
+ signal(SIGABRT, abort_handler);
+
+ printf("%d\n", we_weave(2));
+
+ clean_up_backtrace_handler();
+
+ return 0;
+}
+
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
new file mode 100644
index 000000000..61ac5bc36
--- /dev/null
+++ b/src/test/test_buffers.c
@@ -0,0 +1,732 @@
+/* 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);
+ buf_shrink_freelists(1);
+}
+
+static void
+test_buffer_pullup(void *arg)
+{
+ buf_t *buf;
+ char *stuff, *tmp;
+ const char *cp;
+ size_t sz;
+ (void)arg;
+ stuff = tor_malloc(16384);
+ tmp = tor_malloc(16384);
+
+ /* Note: this test doesn't check the nulterminate argument to buf_pullup,
+ since nothing actually uses it. We should remove it some time. */
+
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+
+ tt_assert(buf);
+ tt_int_op(buf_get_default_chunk_size(buf), ==, 4096);
+
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* There are a bunch of cases for pullup. One is the trivial case. Let's
+ mess around with an empty buffer. */
+ buf_pullup(buf, 16, 1);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, ==, NULL);
+ tt_uint_op(sz, ==, 0);
+
+ /* Let's make sure nothing got allocated */
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* Case 1: everything puts into the first chunk with some moving. */
+
+ /* Let's add some data. */
+ crypto_rand(stuff, 16384);
+ write_to_buf(stuff, 3000, buf);
+ write_to_buf(stuff+3000, 3000, buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, <=, 4096);
+
+ /* Make room for 3000 bytes in the first chunk, so that the pullup-move code
+ * can get tested. */
+ tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 3000);
+ test_memeq(tmp, stuff, 3000);
+ buf_pullup(buf, 2048, 0);
+ assert_buf_ok(buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, >=, 2048);
+ test_memeq(cp, stuff+3000, 2048);
+ tt_int_op(3000, ==, buf_datalen(buf));
+ tt_int_op(fetch_from_buf(tmp, 3000, buf), ==, 0);
+ test_memeq(tmp, stuff+3000, 2048);
+
+ buf_free(buf);
+
+ /* Now try the large-chunk case. */
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+ write_to_buf(stuff, 4000, buf);
+ write_to_buf(stuff+4000, 4000, buf);
+ write_to_buf(stuff+8000, 4000, buf);
+ write_to_buf(stuff+12000, 4000, buf);
+ tt_int_op(buf_datalen(buf), ==, 16000);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, <=, 4096);
+
+ buf_pullup(buf, 12500, 0);
+ assert_buf_ok(buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, >=, 12500);
+ test_memeq(cp, stuff, 12500);
+ tt_int_op(buf_datalen(buf), ==, 16000);
+
+ fetch_from_buf(tmp, 12400, buf);
+ test_memeq(tmp, stuff, 12400);
+ tt_int_op(buf_datalen(buf), ==, 3600);
+ fetch_from_buf(tmp, 3500, buf);
+ test_memeq(tmp, stuff+12400, 3500);
+ fetch_from_buf(tmp, 100, buf);
+ test_memeq(tmp, stuff+15900, 10);
+
+ buf_free(buf);
+
+ /* Make sure that the pull-up-whole-buffer case works */
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+ write_to_buf(stuff, 4000, buf);
+ write_to_buf(stuff+4000, 4000, buf);
+ fetch_from_buf(tmp, 100, buf); /* dump 100 bytes from first chunk */
+ buf_pullup(buf, 16000, 0); /* Way too much. */
+ assert_buf_ok(buf);
+ buf_get_first_chunk_data(buf, &cp, &sz);
+ tt_ptr_op(cp, !=, NULL);
+ tt_int_op(sz, ==, 7900);
+ test_memeq(cp, stuff+100, 7900);
+
+ buf_free(buf);
+ buf = NULL;
+
+ buf_shrink_freelists(1);
+
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+ done:
+ buf_free(buf);
+ buf_shrink_freelists(1);
+ tor_free(stuff);
+ tor_free(tmp);
+}
+
+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);
+ buf_shrink_freelists(1);
+}
+
+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);
+ buf_shrink_freelists(1);
+}
+
+static void
+test_buffer_allocation_tracking(void *arg)
+{
+ char *junk = tor_malloc(16384);
+ buf_t *buf1 = NULL, *buf2 = NULL;
+ int i;
+
+ (void)arg;
+
+ crypto_rand(junk, 16384);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ buf1 = buf_new();
+ tt_assert(buf1);
+ buf2 = buf_new();
+ tt_assert(buf2);
+
+ tt_int_op(buf_allocation(buf1), ==, 0);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ write_to_buf(junk, 4000, buf1);
+ write_to_buf(junk, 4000, buf1);
+ write_to_buf(junk, 4000, buf1);
+ write_to_buf(junk, 4000, buf1);
+ tt_int_op(buf_allocation(buf1), ==, 16384);
+ fetch_from_buf(junk, 100, buf1);
+ tt_int_op(buf_allocation(buf1), ==, 16384); /* still 4 4k chunks */
+
+ tt_int_op(buf_get_total_allocation(), ==, 16384);
+
+ fetch_from_buf(junk, 4096, buf1); /* drop a 1k chunk... */
+ tt_int_op(buf_allocation(buf1), ==, 3*4096); /* now 3 4k chunks */
+
+#ifdef ENABLE_BUF_FREELISTS
+ tt_int_op(buf_get_total_allocation(), ==, 16384); /* that chunk went onto
+ the freelist. */
+#else
+ tt_int_op(buf_get_total_allocation(), ==, 12288); /* that chunk was really
+ freed. */
+#endif
+
+ write_to_buf(junk, 4000, buf2);
+ tt_int_op(buf_allocation(buf2), ==, 4096); /* another 4k chunk. */
+ /*
+ * If we're using freelists, size stays at 16384 because we just pulled a
+ * chunk from the freelist. If we aren't, we bounce back up to 16384 by
+ * allocating a new chunk.
+ */
+ tt_int_op(buf_get_total_allocation(), ==, 16384);
+ write_to_buf(junk, 4000, buf2);
+ tt_int_op(buf_allocation(buf2), ==, 8192); /* another 4k chunk. */
+ tt_int_op(buf_get_total_allocation(), ==, 5*4096); /* that chunk was new. */
+
+ /* Make a really huge buffer */
+ for (i = 0; i < 1000; ++i) {
+ write_to_buf(junk, 4000, buf2);
+ }
+ tt_int_op(buf_allocation(buf2), >=, 4008000);
+ tt_int_op(buf_get_total_allocation(), >=, 4008000);
+ buf_free(buf2);
+ buf2 = NULL;
+
+ tt_int_op(buf_get_total_allocation(), <, 4008000);
+ buf_shrink_freelists(1);
+ tt_int_op(buf_get_total_allocation(), ==, buf_allocation(buf1));
+ buf_free(buf1);
+ buf1 = NULL;
+ buf_shrink_freelists(1);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ done:
+ buf_free(buf1);
+ buf_free(buf2);
+ buf_shrink_freelists(1);
+ tor_free(junk);
+}
+
+static void
+test_buffer_time_tracking(void *arg)
+{
+ buf_t *buf=NULL, *buf2=NULL;
+ struct timeval tv0;
+ const time_t START = 1389288246;
+ const uint32_t START_MSEC = (uint32_t) ((uint64_t)START * 1000);
+ int i;
+ char tmp[4096];
+ (void)arg;
+
+ crypto_rand(tmp, sizeof(tmp));
+
+ tv0.tv_sec = START;
+ tv0.tv_usec = 0;
+
+ buf = buf_new_with_capacity(3000); /* rounds up to next power of 2. */
+ tt_assert(buf);
+
+ /* Empty buffer means the timestamp is 0. */
+ tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC));
+ tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000));
+
+ tor_gettimeofday_cache_set(&tv0);
+ write_to_buf("ABCDEFG", 7, buf);
+ tt_int_op(1000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+1000));
+
+ buf2 = buf_copy(buf);
+ tt_assert(buf2);
+ tt_int_op(1234, ==, buf_get_oldest_chunk_timestamp(buf2, START_MSEC+1234));
+
+ /* Now add more bytes; enough to overflow the first chunk. */
+ tv0.tv_usec += 123 * 1000;
+ tor_gettimeofday_cache_set(&tv0);
+ for (i = 0; i < 600; ++i)
+ write_to_buf("ABCDEFG", 7, buf);
+ tt_int_op(4207, ==, buf_datalen(buf));
+
+ /* The oldest bytes are still in the front. */
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000));
+
+ /* Once those bytes are dropped, the chunk is still on the first
+ * timestamp. */
+ fetch_from_buf(tmp, 100, buf);
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2000));
+
+ /* But once we discard the whole first chunk, we get the data in the second
+ * chunk. */
+ fetch_from_buf(tmp, 4000, buf);
+ tt_int_op(107, ==, buf_datalen(buf));
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123));
+
+ /* This time we'll be grabbing a chunk from the freelist, and making sure
+ its time gets updated */
+ tv0.tv_sec += 5;
+ tv0.tv_usec = 617*1000;
+ tor_gettimeofday_cache_set(&tv0);
+ for (i = 0; i < 600; ++i)
+ write_to_buf("ABCDEFG", 7, buf);
+ tt_int_op(4307, ==, buf_datalen(buf));
+
+ tt_int_op(2000, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+2123));
+ fetch_from_buf(tmp, 4000, buf);
+ fetch_from_buf(tmp, 306, buf);
+ tt_int_op(0, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+5617));
+ tt_int_op(383, ==, buf_get_oldest_chunk_timestamp(buf, START_MSEC+6000));
+
+ done:
+ buf_free(buf);
+ buf_free(buf2);
+}
+
+static void
+test_buffers_zlib_impl(int finalize_with_nil)
+{
+ char *msg = NULL;
+ char *contents = NULL;
+ char *expanded = NULL;
+ buf_t *buf = NULL;
+ tor_zlib_state_t *zlib_state = NULL;
+ size_t out_len, in_len;
+ int done;
+
+ buf = buf_new_with_capacity(128); /* will round up */
+ zlib_state = tor_zlib_new(1, ZLIB_METHOD);
+
+ msg = tor_malloc(512);
+ crypto_rand(msg, 512);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg, 128, 0), ==, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+128, 128, 0), ==, 0);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, msg+256, 256, 0), ==, 0);
+ done = !finalize_with_nil;
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "all done", 9, done), ==, 0);
+ if (finalize_with_nil) {
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0);
+ }
+
+ in_len = buf_datalen(buf);
+ contents = tor_malloc(in_len);
+
+ tt_int_op(fetch_from_buf(contents, in_len, buf), ==, 0);
+
+ tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len,
+ contents, in_len,
+ ZLIB_METHOD, 1,
+ LOG_WARN));
+
+ tt_int_op(out_len, >=, 128);
+ tt_mem_op(msg, ==, expanded, 128);
+ tt_int_op(out_len, >=, 512);
+ tt_mem_op(msg, ==, expanded, 512);
+ tt_int_op(out_len, ==, 512+9);
+ tt_mem_op("all done", ==, expanded+512, 9);
+
+ done:
+ buf_free(buf);
+ tor_zlib_free(zlib_state);
+ tor_free(contents);
+ tor_free(expanded);
+ tor_free(msg);
+}
+
+static void
+test_buffers_zlib(void *arg)
+{
+ (void) arg;
+ test_buffers_zlib_impl(0);
+}
+static void
+test_buffers_zlib_fin_with_nil(void *arg)
+{
+ (void) arg;
+ test_buffers_zlib_impl(1);
+}
+
+static void
+test_buffers_zlib_fin_at_chunk_end(void *arg)
+{
+ char *msg = NULL;
+ char *contents = NULL;
+ char *expanded = NULL;
+ buf_t *buf = NULL;
+ tor_zlib_state_t *zlib_state = NULL;
+ size_t out_len, in_len;
+ size_t sz, headerjunk;
+ (void) arg;
+
+ buf = buf_new_with_capacity(128); /* will round up */
+ sz = buf_get_default_chunk_size(buf);
+ msg = tor_malloc_zero(sz);
+
+ write_to_buf(msg, 1, buf);
+ tt_assert(buf->head);
+
+ /* Fill up the chunk so the zlib stuff won't fit in one chunk. */
+ tt_uint_op(buf->head->memlen, <, sz);
+ headerjunk = buf->head->memlen - 7;
+ write_to_buf(msg, headerjunk-1, buf);
+ tt_uint_op(buf->head->datalen, ==, headerjunk);
+ printf("<%u>\n", (unsigned)buf_datalen(buf));
+ tt_uint_op(buf_datalen(buf), ==, headerjunk);
+ /* Write an empty string, with finalization on. */
+ zlib_state = tor_zlib_new(1, ZLIB_METHOD);
+ tt_int_op(write_to_buf_zlib(buf, zlib_state, "", 0, 1), ==, 0);
+
+ printf("<%u>\n", (unsigned)buf_datalen(buf));
+
+ in_len = buf_datalen(buf);
+ contents = tor_malloc(in_len);
+
+ tt_int_op(fetch_from_buf(contents, in_len, buf), ==, 0);
+
+ tt_uint_op(in_len, >, headerjunk);
+
+ tt_int_op(0, ==, tor_gzip_uncompress(&expanded, &out_len,
+ contents + headerjunk, in_len - headerjunk,
+ ZLIB_METHOD, 1,
+ LOG_WARN));
+
+ tt_int_op(out_len, ==, 0);
+ tt_assert(expanded);
+
+ done:
+ buf_free(buf);
+ tor_zlib_free(zlib_state);
+ tor_free(contents);
+ tor_free(expanded);
+ tor_free(msg);
+}
+
+struct testcase_t buffer_tests[] = {
+ { "basic", test_buffers_basic, TT_FORK, NULL, NULL },
+ { "copy", test_buffer_copy, TT_FORK, NULL, NULL },
+ { "pullup", test_buffer_pullup, TT_FORK, NULL, NULL },
+ { "ext_or_cmd", test_buffer_ext_or_cmd, TT_FORK, NULL, NULL },
+ { "allocation_tracking", test_buffer_allocation_tracking, TT_FORK,
+ NULL, NULL },
+ { "time_tracking", test_buffer_time_tracking, TT_FORK, NULL, NULL },
+ { "zlib", test_buffers_zlib, TT_FORK, NULL, NULL },
+ { "zlib_fin_with_nil", test_buffers_zlib_fin_with_nil, TT_FORK, NULL, NULL },
+ { "zlib_fin_at_chunk_end", test_buffers_zlib_fin_at_chunk_end, TT_FORK,
+ NULL, NULL},
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_cell_formats.c b/src/test/test_cell_formats.c
new file mode 100644
index 000000000..d7f60680c
--- /dev/null
+++ b/src/test/test_cell_formats.c
@@ -0,0 +1,1273 @@
+/* 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 "orconfig.h"
+
+#define CONNECTION_EDGE_PRIVATE
+#define RELAY_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "connection_edge.h"
+#include "connection_or.h"
+#include "onion.h"
+#include "onion_tap.h"
+#include "onion_fast.h"
+#include "onion_ntor.h"
+#include "relay.h"
+#include "test.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+static void
+test_cfmt_relay_header(void *arg)
+{
+ relay_header_t rh;
+ const uint8_t hdr_1[RELAY_HEADER_SIZE] =
+ "\x03" "\x00\x00" "\x21\x22" "ABCD" "\x01\x03";
+ uint8_t hdr_out[RELAY_HEADER_SIZE];
+ (void)arg;
+
+ tt_int_op(sizeof(hdr_1), ==, RELAY_HEADER_SIZE);
+ relay_header_unpack(&rh, hdr_1);
+ tt_int_op(rh.command, ==, 3);
+ tt_int_op(rh.recognized, ==, 0);
+ tt_int_op(rh.stream_id, ==, 0x2122);
+ test_mem_op(rh.integrity, ==, "ABCD", 4);
+ tt_int_op(rh.length, ==, 0x103);
+
+ relay_header_pack(hdr_out, &rh);
+ test_mem_op(hdr_out, ==, hdr_1, RELAY_HEADER_SIZE);
+
+ done:
+ ;
+}
+
+static void
+make_relay_cell(cell_t *out, uint8_t command,
+ const void *body, size_t bodylen)
+{
+ relay_header_t rh;
+
+ memset(&rh, 0, sizeof(rh));
+ rh.stream_id = 5;
+ rh.command = command;
+ rh.length = bodylen;
+
+ out->command = CELL_RELAY;
+ out->circ_id = 10;
+ relay_header_pack(out->payload, &rh);
+
+ memcpy(out->payload + RELAY_HEADER_SIZE, body, bodylen);
+}
+
+static void
+test_cfmt_begin_cells(void *arg)
+{
+ cell_t cell;
+ begin_cell_t bcell;
+ uint8_t end_reason;
+ (void)arg;
+
+ /* Try begindir. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN_DIR, "", 0);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_ptr_op(NULL, ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(0, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(1, ==, bcell.is_begindir);
+
+ /* A Begindir with extra stuff. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN_DIR, "12345", 5);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_ptr_op(NULL, ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(0, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(1, ==, bcell.is_begindir);
+
+ /* A short but valid begin cell */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:9", 6);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("a.b", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(9, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* A significantly loner begin cell */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "here-is-a-nice-long.hostname.com:65535";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, strlen(c)+1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("here-is-a-nice-long.hostname.com", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(65535, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* An IPv4 begin cell. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "18.9.22.169:80", 15);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("18.9.22.169", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(80, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* An IPv6 begin cell. Let's make sure we handle colons*/
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN,
+ "[2620::6b0:b:1a1a:0:26e5:480e]:80", 34);
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("[2620::6b0:b:1a1a:0:26e5:480e]", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(80, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* a begin cell with extra junk but not enough for flags. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "another.example.com:80\x00\x01\x02";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("another.example.com", ==, bcell.address);
+ tt_int_op(0, ==, bcell.flags);
+ tt_int_op(80, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* a begin cell with flags. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "another.example.com:443\x00\x01\x02\x03\x04";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("another.example.com", ==, bcell.address);
+ tt_int_op(0x1020304, ==, bcell.flags);
+ tt_int_op(443, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* a begin cell with flags and even more cruft after that. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ {
+ const char c[] = "a-further.example.com:22\x00\xee\xaa\x00\xffHi mom";
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, c, sizeof(c)-1);
+ }
+ tt_int_op(0, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ tt_str_op("a-further.example.com", ==, bcell.address);
+ tt_int_op(0xeeaa00ff, ==, bcell.flags);
+ tt_int_op(22, ==, bcell.port);
+ tt_int_op(5, ==, bcell.stream_id);
+ tt_int_op(0, ==, bcell.is_begindir);
+ tor_free(bcell.address);
+
+ /* bad begin cell: impossible length. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:80", 7);
+ cell.payload[9] = 0x01; /* Set length to 510 */
+ cell.payload[10] = 0xfe;
+ {
+ relay_header_t rh;
+ relay_header_unpack(&rh, cell.payload);
+ tt_int_op(rh.length, ==, 510);
+ }
+ tt_int_op(-2, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* Bad begin cell: no body. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "", 0);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no body. */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "", 0);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no colon */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b", 4);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no ports */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:", 5);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: bad port */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:xyz", 8);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:100000", 11);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ /* bad begin cell: no nul */
+ memset(&bcell, 0x7f, sizeof(bcell));
+ make_relay_cell(&cell, RELAY_COMMAND_BEGIN, "a.b:80", 6);
+ tt_int_op(-1, ==, begin_cell_parse(&cell, &bcell, &end_reason));
+
+ done:
+ tor_free(bcell.address);
+}
+
+static void
+test_cfmt_connected_cells(void *arg)
+{
+ relay_header_t rh;
+ cell_t cell;
+ tor_addr_t addr;
+ int ttl, r;
+ char *mem_op_hex_tmp = NULL;
+ (void)arg;
+
+ /* Let's try an oldschool one with nothing in it. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "", 0);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_UNSPEC);
+ tt_int_op(ttl, ==, -1);
+
+ /* A slightly less oldschool one: only an IPv4 address */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x20\x30\x40\x50", 4);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "32.48.64.80");
+ tt_int_op(ttl, ==, -1);
+
+ /* Bogus but understandable: truncated TTL */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED, "\x11\x12\x13\x14\x15", 5);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "17.18.19.20");
+ tt_int_op(ttl, ==, -1);
+
+ /* Regular IPv4 one: address and TTL */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x02\x03\x04\x05\x00\x00\x0e\x10", 8);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "2.3.4.5");
+ tt_int_op(ttl, ==, 3600);
+
+ /* IPv4 with too-big TTL */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x02\x03\x04\x05\xf0\x00\x00\x00", 8);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "2.3.4.5");
+ tt_int_op(ttl, ==, -1);
+
+ /* IPv6 (ttl is mandatory) */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x06"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x00\x00\x02\x58", 25);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET6);
+ tt_str_op(fmt_addr(&addr), ==, "2607:f8b0:400c:c02::68");
+ tt_int_op(ttl, ==, 600);
+
+ /* IPv6 (ttl too big) */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x06"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x90\x00\x02\x58", 25);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET6);
+ tt_str_op(fmt_addr(&addr), ==, "2607:f8b0:400c:c02::68");
+ tt_int_op(ttl, ==, -1);
+
+ /* Bogus size: 3. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x01\x02", 3);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, -1);
+
+ /* Bogus family: 7. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x07"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x90\x00\x02\x58", 25);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, -1);
+
+ /* Truncated IPv6. */
+ make_relay_cell(&cell, RELAY_COMMAND_CONNECTED,
+ "\x00\x00\x00\x00\x06"
+ "\x26\x07\xf8\xb0\x40\x0c\x0c\x02"
+ "\x00\x00\x00\x00\x00\x00\x00\x68"
+ "\x00\x00\x02", 24);
+ relay_header_unpack(&rh, cell.payload);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, -1);
+
+ /* Now make sure we can generate connected cells correctly. */
+ /* Try an IPv4 address */
+ memset(&rh, 0, sizeof(rh));
+ memset(&cell, 0, sizeof(cell));
+ tor_addr_parse(&addr, "30.40.50.60");
+ rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE,
+ &addr, 128);
+ tt_int_op(rh.length, ==, 8);
+ test_memeq_hex(cell.payload+RELAY_HEADER_SIZE, "1e28323c" "00000080");
+
+ /* Try parsing it. */
+ tor_addr_make_unspec(&addr);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET);
+ tt_str_op(fmt_addr(&addr), ==, "30.40.50.60");
+ tt_int_op(ttl, ==, 128);
+
+ /* Try an IPv6 address */
+ memset(&rh, 0, sizeof(rh));
+ memset(&cell, 0, sizeof(cell));
+ tor_addr_parse(&addr, "2620::6b0:b:1a1a:0:26e5:480e");
+ rh.length = connected_cell_format_payload(cell.payload+RELAY_HEADER_SIZE,
+ &addr, 3600);
+ tt_int_op(rh.length, ==, 25);
+ test_memeq_hex(cell.payload + RELAY_HEADER_SIZE,
+ "00000000" "06"
+ "2620000006b0000b1a1a000026e5480e" "00000e10");
+
+ /* Try parsing it. */
+ tor_addr_make_unspec(&addr);
+ r = connected_cell_parse(&rh, &cell, &addr, &ttl);
+ tt_int_op(r, ==, 0);
+ tt_int_op(tor_addr_family(&addr), ==, AF_INET6);
+ tt_str_op(fmt_addr(&addr), ==, "2620:0:6b0:b:1a1a:0:26e5:480e");
+ tt_int_op(ttl, ==, 3600);
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_cfmt_create_cells(void *arg)
+{
+ uint8_t b[MAX_ONIONSKIN_CHALLENGE_LEN];
+ create_cell_t cc;
+ cell_t cell;
+ cell_t cell2;
+
+ (void)arg;
+
+ /* === Let's try parsing some good cells! */
+
+ /* A valid create cell. */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ cell.command = CELL_CREATE;
+ memcpy(cell.payload, b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type);
+ tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A valid create_fast cell. */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, CREATE_FAST_LEN);
+ cell.command = CELL_CREATE_FAST;
+ memcpy(cell.payload, b, CREATE_FAST_LEN);
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE_FAST, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_FAST, ==, cc.handshake_type);
+ tt_int_op(CREATE_FAST_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, CREATE_FAST_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A valid create2 cell with a TAP payload */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ cell.command = CELL_CREATE2;
+ memcpy(cell.payload, "\x00\x00\x00\xBA", 4); /* TAP, 186 bytes long */
+ memcpy(cell.payload+4, b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE2, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_TAP, ==, cc.handshake_type);
+ tt_int_op(TAP_ONIONSKIN_CHALLENGE_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A valid create2 cell with an ntor payload */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ cell.command = CELL_CREATE2;
+ memcpy(cell.payload, "\x00\x02\x00\x54", 4); /* ntor, 84 bytes long */
+ memcpy(cell.payload+4, b, NTOR_ONIONSKIN_LEN);
+#ifdef CURVE25519_ENABLED
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE2, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type);
+ tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, NTOR_ONIONSKIN_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+#else
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+#endif
+
+ /* A valid create cell with an ntor payload, in legacy format. */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ cell.command = CELL_CREATE;
+ memcpy(cell.payload, "ntorNTORntorNTOR", 16);
+ memcpy(cell.payload+16, b, NTOR_ONIONSKIN_LEN);
+#ifdef CURVE25519_ENABLED
+ tt_int_op(0, ==, create_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATE, ==, cc.cell_type);
+ tt_int_op(ONION_HANDSHAKE_TYPE_NTOR, ==, cc.handshake_type);
+ tt_int_op(NTOR_ONIONSKIN_LEN, ==, cc.handshake_len);
+ test_memeq(cc.onionskin, b, NTOR_ONIONSKIN_LEN + 10);
+ tt_int_op(0, ==, create_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+#else
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+#endif
+
+ /* == Okay, now let's try to parse some impossible stuff. */
+
+ /* It has to be some kind of a create cell! */
+ cell.command = CELL_CREATED;
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+
+ /* You can't acutally make an unparseable CREATE or CREATE_FAST cell. */
+
+ /* Try some CREATE2 cells. First with a bad type. */
+ cell.command = CELL_CREATE2;
+ memcpy(cell.payload, "\x00\x50\x00\x99", 4); /* Type 0x50???? */
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+ /* Now a good type with an incorrect length. */
+ memcpy(cell.payload, "\x00\x00\x00\xBC", 4); /* TAP, 187 bytes.*/
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+ /* Now a good type with a ridiculous length. */
+ memcpy(cell.payload, "\x00\x00\x02\x00", 4); /* TAP, 512 bytes.*/
+ tt_int_op(-1, ==, create_cell_parse(&cc, &cell));
+
+ /* == Time to try formatting bad cells. The important thing is that
+ we reject big lengths, so just check that for now. */
+ cc.handshake_len = 512;
+ tt_int_op(-1, ==, create_cell_format(&cell2, &cc));
+
+ /* == Try formatting a create2 cell we don't understand. XXXX */
+
+ done:
+ ;
+}
+
+static void
+test_cfmt_created_cells(void *arg)
+{
+ uint8_t b[512];
+ created_cell_t cc;
+ cell_t cell;
+ cell_t cell2;
+
+ (void)arg;
+
+ /* A good CREATED cell */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_REPLY_LEN);
+ cell.command = CELL_CREATED;
+ memcpy(cell.payload, b, TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED, ==, cc.cell_type);
+ tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, TAP_ONIONSKIN_REPLY_LEN + 10);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A good CREATED_FAST cell */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, CREATED_FAST_LEN);
+ cell.command = CELL_CREATED_FAST;
+ memcpy(cell.payload, b, CREATED_FAST_LEN);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED_FAST, ==, cc.cell_type);
+ tt_int_op(CREATED_FAST_LEN, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, CREATED_FAST_LEN + 10);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A good CREATED2 cell with short reply */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 64);
+ cell.command = CELL_CREATED2;
+ memcpy(cell.payload, "\x00\x40", 2);
+ memcpy(cell.payload+2, b, 64);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED2, ==, cc.cell_type);
+ tt_int_op(64, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, 80);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* A good CREATED2 cell with maximal reply */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 496);
+ cell.command = CELL_CREATED2;
+ memcpy(cell.payload, "\x01\xF0", 2);
+ memcpy(cell.payload+2, b, 496);
+ tt_int_op(0, ==, created_cell_parse(&cc, &cell));
+ tt_int_op(CELL_CREATED2, ==, cc.cell_type);
+ tt_int_op(496, ==, cc.handshake_len);
+ test_memeq(cc.reply, b, 496);
+ tt_int_op(0, ==, created_cell_format(&cell2, &cc));
+ tt_int_op(cell.command, ==, cell2.command);
+ test_memeq(cell.payload, cell2.payload, CELL_PAYLOAD_SIZE);
+
+ /* Bogus CREATED2 cell: too long! */
+ memset(&cell, 0, sizeof(cell));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 496);
+ cell.command = CELL_CREATED2;
+ memcpy(cell.payload, "\x01\xF1", 2);
+ tt_int_op(-1, ==, created_cell_parse(&cc, &cell));
+
+ /* Unformattable CREATED2 cell: too long! */
+ cc.handshake_len = 497;
+ tt_int_op(-1, ==, created_cell_format(&cell2, &cc));
+
+ done:
+ ;
+}
+
+static void
+test_cfmt_extend_cells(void *arg)
+{
+ cell_t cell;
+ uint8_t b[512];
+ extend_cell_t ec;
+ create_cell_t *cc = &ec.create_cell;
+ uint8_t p[RELAY_PAYLOAD_SIZE];
+ uint8_t p2[RELAY_PAYLOAD_SIZE];
+ uint8_t p2_cmd;
+ uint16_t p2_len;
+ char *mem_op_hex_tmp = NULL;
+
+ (void) arg;
+
+ /* Let's start with a simple EXTEND cell. */
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_CHALLENGE_LEN);
+ memcpy(p, "\x12\xf4\x00\x01\x01\x02", 6); /* 18 244 0 1 : 258 */
+ memcpy(p+6,b,TAP_ONIONSKIN_CHALLENGE_LEN);
+ memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, "electroencephalogram", 20);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND,
+ p, 26+TAP_ONIONSKIN_CHALLENGE_LEN));
+ tt_int_op(RELAY_COMMAND_EXTEND, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(258, ==, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
+ test_memeq(ec.node_id, "electroencephalogram", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE);
+ tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_TAP);
+ tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_memeq(cc->onionskin, b, TAP_ONIONSKIN_CHALLENGE_LEN+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND);
+ tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_memeq(p2, p, RELAY_PAYLOAD_SIZE);
+
+ /* Let's do an ntor stuffed in a legacy EXTEND cell */
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ memcpy(p, "\x12\xf4\x00\x01\x01\x02", 6); /* 18 244 0 1 : 258 */
+ memcpy(p+6,"ntorNTORntorNTOR", 16);
+ memcpy(p+22, b, NTOR_ONIONSKIN_LEN);
+ memcpy(p+6+TAP_ONIONSKIN_CHALLENGE_LEN, "electroencephalogram", 20);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND,
+ p, 26+TAP_ONIONSKIN_CHALLENGE_LEN));
+ tt_int_op(RELAY_COMMAND_EXTEND, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(258, ==, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
+ test_memeq(ec.node_id, "electroencephalogram", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR);
+ tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN);
+ test_memeq(cc->onionskin, b, NTOR_ONIONSKIN_LEN+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND);
+ tt_int_op(p2_len, ==, 26+TAP_ONIONSKIN_CHALLENGE_LEN);
+ test_memeq(p2, p, RELAY_PAYLOAD_SIZE);
+ tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
+
+ /* Now let's do a minimal ntor EXTEND2 cell. */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, NTOR_ONIONSKIN_LEN);
+ /* 2 items; one 18.244.0.1:61681 */
+ memcpy(p, "\x02\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ /* The other is a digest. */
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ /* Prep for the handshake: type and length */
+ memcpy(p+31, "\x00\x02\x00\x54", 4);
+ memcpy(p+35, b, NTOR_ONIONSKIN_LEN);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, 35+NTOR_ONIONSKIN_LEN));
+ tt_int_op(RELAY_COMMAND_EXTEND2, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(61681, ==, ec.orport_ipv4.port);
+ tt_int_op(AF_UNSPEC, ==, tor_addr_family(&ec.orport_ipv6.addr));
+ test_memeq(ec.node_id, "anarchoindividualist", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, ==, ONION_HANDSHAKE_TYPE_NTOR);
+ tt_int_op(cc->handshake_len, ==, NTOR_ONIONSKIN_LEN);
+ test_memeq(cc->onionskin, b, NTOR_ONIONSKIN_LEN+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2);
+ tt_int_op(p2_len, ==, 35+NTOR_ONIONSKIN_LEN);
+ test_memeq(p2, p, RELAY_PAYLOAD_SIZE);
+
+ /* Now let's do a fanciful EXTEND2 cell. */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 99);
+ /* 4 items; one 18 244 0 1 61681 */
+ memcpy(p, "\x04\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ /* One is a digest. */
+ memcpy(p+9, "\x02\x14" "anthropomorphization", 22);
+ /* One is an ipv6 address */
+ memcpy(p+31, "\x01\x12\x20\x02\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xf0\xc5\x1e\x11\x12", 20);
+ /* One is the Konami code. */
+ memcpy(p+51, "\xf0\x20upupdowndownleftrightleftrightba", 34);
+ /* Prep for the handshake: weird type and length */
+ memcpy(p+85, "\x01\x05\x00\x63", 4);
+ memcpy(p+89, b, 99);
+ tt_int_op(0, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, 89+99));
+ tt_int_op(RELAY_COMMAND_EXTEND2, ==, ec.cell_type);
+ tt_str_op("18.244.0.1", ==, fmt_addr(&ec.orport_ipv4.addr));
+ tt_int_op(61681, ==, ec.orport_ipv4.port);
+ tt_str_op("2002::f0:c51e", ==, fmt_addr(&ec.orport_ipv6.addr));
+ tt_int_op(4370, ==, ec.orport_ipv6.port);
+ test_memeq(ec.node_id, "anthropomorphization", 20);
+ tt_int_op(cc->cell_type, ==, CELL_CREATE2);
+ tt_int_op(cc->handshake_type, ==, 0x105);
+ tt_int_op(cc->handshake_len, ==, 99);
+ test_memeq(cc->onionskin, b, 99+20);
+ tt_int_op(0, ==, extend_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(p2_cmd, ==, RELAY_COMMAND_EXTEND2);
+ /* We'll generate it minus the IPv6 address and minus the konami code */
+ tt_int_op(p2_len, ==, 89+99-34-20);
+ test_memeq_hex(p2,
+ /* Two items: one that same darn IP address. */
+ "02000612F40001F0F1"
+ /* The next is a digest : anthropomorphization */
+ "0214616e7468726f706f6d6f727068697a6174696f6e"
+ /* Now the handshake prologue */
+ "01050063");
+ test_memeq(p2+1+8+22+4, b, 99+20);
+ tt_int_op(0, ==, create_cell_format_relayed(&cell, cc));
+
+ /* == Now try parsing some junk */
+
+ /* Try a too-long handshake */
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\xff\xff\x01\xd0", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Try two identities. */
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\x02\x14" "autodepolymerization", 22);
+ memcpy(p+53, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* No identities. */
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x01\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+53, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Try a bad IPv4 address (too long, too short)*/
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02\x00\x07\x12\xf4\x00\x01\xf0\xf1\xff", 10);
+ memcpy(p+10, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+32, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02\x00\x05\x12\xf4\x00\x01\xf0", 8);
+ memcpy(p+8, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+30, "\xff\xff\x00\x10", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* IPv6 address (too long, too short, no IPv4)*/
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\x01\x13" "xxxxxxxxxxxxxxxxYYZ", 19);
+ memcpy(p+50, "\xff\xff\x00\x20", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x03\x00\x06\x12\xf4\x00\x01\xf0\xf1", 9);
+ memcpy(p+9, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+31, "\x01\x11" "xxxxxxxxxxxxxxxxY", 17);
+ memcpy(p+48, "\xff\xff\x00\x20", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+ memset(p, 0, sizeof(p));
+ memcpy(p, "\x02", 1);
+ memcpy(p+1, "\x02\x14" "anarchoindividualist", 22);
+ memcpy(p+23, "\x01\x12" "xxxxxxxxxxxxxxxxYY", 18);
+ memcpy(p+41, "\xff\xff\x00\x20", 4);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Running out of space in specifiers */
+ memset(p,0,sizeof(p));
+ memcpy(p, "\x05\x0a\xff", 3);
+ memcpy(p+3+255, "\x0a\xff", 2);
+ tt_int_op(-1, ==, extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2,
+ p, sizeof(p)));
+
+ /* Fuzz, because why not. */
+ memset(&ec, 0xff, sizeof(ec));
+ {
+ int i;
+ memset(p, 0, sizeof(p));
+ for (i = 0; i < 10000; ++i) {
+ int n = crypto_rand_int(sizeof(p));
+ crypto_rand((char *)p, n);
+ extend_cell_parse(&ec, RELAY_COMMAND_EXTEND2, p, n);
+ }
+ }
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_cfmt_extended_cells(void *arg)
+{
+ uint8_t b[512];
+ extended_cell_t ec;
+ created_cell_t *cc = &ec.created_cell;
+ uint8_t p[RELAY_PAYLOAD_SIZE];
+ uint8_t p2[RELAY_PAYLOAD_SIZE];
+ uint8_t p2_cmd;
+ uint16_t p2_len;
+ char *mem_op_hex_tmp = NULL;
+
+ (void) arg;
+
+ /* Try a regular EXTENDED cell. */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, TAP_ONIONSKIN_REPLY_LEN);
+ memcpy(p,b,TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, ==, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED, p,
+ TAP_ONIONSKIN_REPLY_LEN));
+ tt_int_op(RELAY_COMMAND_EXTENDED, ==, ec.cell_type);
+ tt_int_op(cc->cell_type, ==, CELL_CREATED);
+ tt_int_op(cc->handshake_len, ==, TAP_ONIONSKIN_REPLY_LEN);
+ test_memeq(cc->reply, b, TAP_ONIONSKIN_REPLY_LEN);
+ tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(RELAY_COMMAND_EXTENDED, ==, p2_cmd);
+ tt_int_op(TAP_ONIONSKIN_REPLY_LEN, ==, p2_len);
+ test_memeq(p2, p, sizeof(p2));
+
+ /* Try an EXTENDED2 cell */
+ memset(&ec, 0xff, sizeof(ec));
+ memset(p, 0, sizeof(p));
+ memset(b, 0, sizeof(b));
+ crypto_rand((char*)b, 42);
+ memcpy(p,"\x00\x2a",2);
+ memcpy(p+2,b,42);
+ tt_int_op(0, ==, extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, 2+42));
+ tt_int_op(RELAY_COMMAND_EXTENDED2, ==, ec.cell_type);
+ tt_int_op(cc->cell_type, ==, CELL_CREATED2);
+ tt_int_op(cc->handshake_len, ==, 42);
+ test_memeq(cc->reply, b, 42+10);
+ tt_int_op(0, ==, extended_cell_format(&p2_cmd, &p2_len, p2, &ec));
+ tt_int_op(RELAY_COMMAND_EXTENDED2, ==, p2_cmd);
+ tt_int_op(2+42, ==, p2_len);
+ test_memeq(p2, p, sizeof(p2));
+
+ /* Try an almost-too-long EXTENDED2 cell */
+ memcpy(p, "\x01\xf0", 2);
+ tt_int_op(0, ==,
+ extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p)));
+
+ /* Now try a too-long extended2 cell. That's the only misparse I can think
+ * of. */
+ memcpy(p, "\x01\xf1", 2);
+ tt_int_op(-1, ==,
+ extended_cell_parse(&ec, RELAY_COMMAND_EXTENDED2, p, sizeof(p)));
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_cfmt_resolved_cells(void *arg)
+{
+ smartlist_t *addrs = smartlist_new();
+ relay_header_t rh;
+ cell_t cell;
+ int r, errcode;
+ address_ttl_t *a;
+
+ (void)arg;
+#define CLEAR_CELL() do { \
+ memset(&cell, 0, sizeof(cell)); \
+ memset(&rh, 0, sizeof(rh)); \
+ } while (0)
+#define CLEAR_ADDRS() do { \
+ SMARTLIST_FOREACH(addrs, address_ttl_t *, a, \
+ address_ttl_free(a); ); \
+ smartlist_clear(addrs); \
+ } while (0)
+#define SET_CELL(s) do { \
+ CLEAR_CELL(); \
+ memcpy(cell.payload + RELAY_HEADER_SIZE, (s), sizeof((s))-1); \
+ rh.length = sizeof((s))-1; \
+ rh.command = RELAY_COMMAND_RESOLVED; \
+ errcode = -1; \
+ } while (0)
+
+ /* The cell format is one or more answers; each of the form
+ * type [1 byte---0:hostname, 4:ipv4, 6:ipv6, f0:err-transient, f1:err]
+ * length [1 byte]
+ * body [length bytes]
+ * ttl [4 bytes]
+ */
+
+ /* Let's try an empty cell */
+ SET_CELL("");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS(); /* redundant but let's be consistent */
+
+ /* Cell with one ipv4 addr */
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00");
+ tt_int_op(rh.length, ==, 10);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 256);
+ CLEAR_ADDRS();
+
+ /* Cell with one ipv6 addr */
+ SET_CELL("\x06\x10"
+ "\x20\x02\x90\x90\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xf0\xf0\xab\xcd"
+ "\x02\00\x00\x01");
+ tt_int_op(rh.length, ==, 22);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9090::f0f0:abcd");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 0x2000001);
+ CLEAR_ADDRS();
+
+ /* Cell with one hostname */
+ SET_CELL("\x00\x11"
+ "motherbrain.zebes"
+ "\x00\00\x00\x00");
+ tt_int_op(rh.length, ==, 23);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_assert(tor_addr_is_null(&a->addr));
+ tt_str_op(a->hostname, ==, "motherbrain.zebes");
+ tt_int_op(a->ttl, ==, 0);
+ CLEAR_ADDRS();
+
+#define LONG_NAME \
+ "this-hostname-has-255-characters.in-order-to-test-whether-very-long.ho" \
+ "stnames-are-accepted.i-am-putting-it-in-a-macro-because-although.this-" \
+ "function-is-already-very-full.of-copy-and-pasted-stuff.having-this-app" \
+ "ear-more-than-once-would-bother-me-somehow.is"
+
+ tt_int_op(strlen(LONG_NAME), ==, 255);
+ SET_CELL("\x00\xff"
+ LONG_NAME
+ "\x00\01\x00\x00");
+ tt_int_op(rh.length, ==, 261);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 1);
+ a = smartlist_get(addrs, 0);
+ tt_assert(tor_addr_is_null(&a->addr));
+ tt_str_op(a->hostname, ==, LONG_NAME);
+ tt_int_op(a->ttl, ==, 65536);
+ CLEAR_ADDRS();
+
+ /* Cells with an error */
+ SET_CELL("\xf0\x2b"
+ "I'm sorry, Dave. I'm afraid I can't do that"
+ "\x00\x11\x22\x33");
+ tt_int_op(rh.length, ==, 49);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, RESOLVED_TYPE_ERROR_TRANSIENT);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS();
+
+ SET_CELL("\xf1\x40"
+ "This hostname is too important for me to allow you to resolve it"
+ "\x00\x00\x00\x00");
+ tt_int_op(rh.length, ==, 70);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, RESOLVED_TYPE_ERROR);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS();
+
+ /* Cell with an unrecognized type */
+ SET_CELL("\xee\x16"
+ "fault in the AE35 unit"
+ "\x09\x09\x01\x01");
+ tt_int_op(rh.length, ==, 28);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ CLEAR_ADDRS();
+
+ /* Cell with one of each */
+ SET_CELL(/* unrecognized: */
+ "\xee\x16"
+ "fault in the AE35 unit"
+ "\x09\x09\x01\x01"
+ /* error: */
+ "\xf0\x2b"
+ "I'm sorry, Dave. I'm afraid I can't do that"
+ "\x00\x11\x22\x33"
+ /* IPv6: */
+ "\x06\x10"
+ "\x20\x02\x90\x90\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xf0\xf0\xab\xcd"
+ "\x02\00\x00\x01"
+ /* IPv4: */
+ "\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ /* Hostname: */
+ "\x00\x11"
+ "motherbrain.zebes"
+ "\x00\00\x00\x00"
+ );
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0); /* no error reported; we got answers */
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 3);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9090::f0f0:abcd");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 0x2000001);
+ a = smartlist_get(addrs, 1);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 256);
+ a = smartlist_get(addrs, 2);
+ tt_assert(tor_addr_is_null(&a->addr));
+ tt_str_op(a->hostname, ==, "motherbrain.zebes");
+ tt_int_op(a->ttl, ==, 0);
+ CLEAR_ADDRS();
+
+ /* Cell with several of similar type */
+ SET_CELL(/* IPv4 */
+ "\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x04\x04" "\x08\x08\x08\x08" "\x00\00\x01\x05"
+ "\x04\x04" "\x7f\xb0\x02\xb0" "\x00\01\xff\xff"
+ /* IPv6 */
+ "\x06\x10"
+ "\x20\x02\x90\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\xca\xfe\xf0\x0d"
+ "\x00\00\x00\x01"
+ "\x06\x10"
+ "\x20\x02\x90\x01\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xfa\xca\xde"
+ "\x00\00\x00\x03");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 5);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.0.2.10");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 256);
+ a = smartlist_get(addrs, 1);
+ tt_str_op(fmt_addr(&a->addr), ==, "8.8.8.8");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 261);
+ a = smartlist_get(addrs, 2);
+ tt_str_op(fmt_addr(&a->addr), ==, "127.176.2.176");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 131071);
+ a = smartlist_get(addrs, 3);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9000::cafe:f00d");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 1);
+ a = smartlist_get(addrs, 4);
+ tt_str_op(fmt_addr(&a->addr), ==, "2002:9001::fa:cade");
+ tt_ptr_op(a->hostname, ==, NULL);
+ tt_int_op(a->ttl, ==, 3);
+ CLEAR_ADDRS();
+
+ /* Full cell */
+#define LONG_NAME2 \
+ "this-name-has-231-characters.so-that-it-plus-LONG_NAME-can-completely-" \
+ "fill-up-the-payload-of-a-cell.its-important-to-check-for-the-full-thin" \
+ "g-case.to-avoid-off-by-one-errors.where-full-things-are-misreported-as" \
+ ".overflowing-by-one.z"
+
+ tt_int_op(strlen(LONG_NAME2), ==, 231);
+ SET_CELL("\x00\xff"
+ LONG_NAME
+ "\x00\01\x00\x00"
+ "\x00\xe7"
+ LONG_NAME2
+ "\x00\01\x00\x00");
+ tt_int_op(rh.length, ==, RELAY_PAYLOAD_SIZE);
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, 0);
+ tt_int_op(smartlist_len(addrs), ==, 2);
+ a = smartlist_get(addrs, 0);
+ tt_str_op(a->hostname, ==, LONG_NAME);
+ a = smartlist_get(addrs, 1);
+ tt_str_op(a->hostname, ==, LONG_NAME2);
+ CLEAR_ADDRS();
+
+ /* BAD CELLS */
+
+ /* Invalid length on an IPv4 */
+ SET_CELL("\x04\x03zzz1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x04\x05zzzzz1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Invalid length on an IPv6 */
+ SET_CELL("\x06\x03zzz1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x06\x17wwwwwwwwwwwwwwwww1234");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00"
+ "\x06\x10xxxx");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Empty hostname */
+ SET_CELL("\x00\x00xxxx");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* rh.length out of range */
+ CLEAR_CELL();
+ rh.length = 499;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(errcode, ==, 0);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Item length extends beyond rh.length */
+ CLEAR_CELL();
+ SET_CELL("\x00\xff"
+ LONG_NAME
+ "\x00\01\x00\x00");
+ rh.length -= 1;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+ rh.length -= 5;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ SET_CELL("\x04\x04" "\x7f\x00\x02\x0a" "\x00\00\x01\x00");
+ rh.length -= 1;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ SET_CELL("\xee\x10"
+ "\x20\x02\x90\x01\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\xfa\xca\xde"
+ "\x00\00\x00\x03");
+ rh.length -= 1;
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ /* Truncated item after first character */
+ SET_CELL("\x04");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ SET_CELL("\xee");
+ r = resolved_cell_parse(&cell, &rh, addrs, &errcode);
+ tt_int_op(r, ==, -1);
+ tt_int_op(smartlist_len(addrs), ==, 0);
+
+ done:
+ CLEAR_ADDRS();
+ CLEAR_CELL();
+ smartlist_free(addrs);
+#undef CLEAR_ADDRS
+#undef CLEAR_CELL
+}
+
+static void
+test_cfmt_is_destroy(void *arg)
+{
+ cell_t cell;
+ packed_cell_t packed;
+ circid_t circid = 0;
+ channel_t *chan;
+ (void)arg;
+
+ chan = tor_malloc_zero(sizeof(channel_t));
+
+ memset(&cell, 0xff, sizeof(cell));
+ cell.circ_id = 3003;
+ cell.command = CELL_RELAY;
+
+ cell_pack(&packed, &cell, 0);
+ chan->wide_circ_ids = 0;
+ tt_assert(! packed_cell_is_destroy(chan, &packed, &circid));
+ tt_int_op(circid, ==, 0);
+
+ cell_pack(&packed, &cell, 1);
+ chan->wide_circ_ids = 1;
+ tt_assert(! packed_cell_is_destroy(chan, &packed, &circid));
+ tt_int_op(circid, ==, 0);
+
+ cell.command = CELL_DESTROY;
+
+ cell_pack(&packed, &cell, 0);
+ chan->wide_circ_ids = 0;
+ tt_assert(packed_cell_is_destroy(chan, &packed, &circid));
+ tt_int_op(circid, ==, 3003);
+
+ circid = 0;
+ cell_pack(&packed, &cell, 1);
+ chan->wide_circ_ids = 1;
+ tt_assert(packed_cell_is_destroy(chan, &packed, &circid));
+
+ done:
+ tor_free(chan);
+}
+
+#define TEST(name, flags) \
+ { #name, test_cfmt_ ## name, flags, 0, NULL }
+
+struct testcase_t cell_format_tests[] = {
+ TEST(relay_header, 0),
+ TEST(begin_cells, 0),
+ TEST(connected_cells, 0),
+ TEST(create_cells, 0),
+ TEST(created_cells, 0),
+ TEST(extend_cells, 0),
+ TEST(extended_cells, 0),
+ TEST(resolved_cells, 0),
+ TEST(is_destroy, 0),
+ 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..92629823e
--- /dev/null
+++ b/src/test/test_cell_queue.c
@@ -0,0 +1,158 @@
+/* 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;
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ 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(NULL /*circ*/, &cq, 0 /*exitward*/, &cell,
+ 1 /*wide*/, 0 /*stats*/);
+ cell.circ_id = 0x2013;
+ cell_queue_append_packed_copy(NULL /*circ*/, &cq, 0 /*exitward*/, &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);
+
+#ifdef ENABLE_MEMPOOLS
+ free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+}
+
+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;
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ 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));
+
+#ifdef ENABLE_MEMPOOLS
+ free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+}
+
+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..b19edd1fd
--- /dev/null
+++ b/src/test/test_circuitlist.c
@@ -0,0 +1,342 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define TOR_CHANNEL_INTERNAL_
+#define CIRCUITBUILD_PRIVATE
+#define CIRCUITLIST_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "circuitbuild.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_int_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:
+ if (or_c1)
+ circuit_free(TO_CIRCUIT(or_c1));
+ if (or_c2)
+ circuit_free(TO_CIRCUIT(or_c2));
+ tor_free(ch1);
+ tor_free(ch2);
+ tor_free(ch3);
+ UNMOCK(circuitmux_attach_circuit);
+ UNMOCK(circuitmux_detach_circuit);
+}
+
+static void
+test_rend_token_maps(void *arg)
+{
+ or_circuit_t *c1, *c2, *c3, *c4;
+ const uint8_t tok1[REND_TOKEN_LEN] = "The cat can't tell y";
+ const uint8_t tok2[REND_TOKEN_LEN] = "ou its name, and it ";
+ const uint8_t tok3[REND_TOKEN_LEN] = "doesn't really care.";
+ /* -- Adapted from a quote by Fredrik Lundh. */
+
+ (void)arg;
+ (void)tok1; //xxxx
+ c1 = or_circuit_new(0, NULL);
+ c2 = or_circuit_new(0, NULL);
+ c3 = or_circuit_new(0, NULL);
+ c4 = or_circuit_new(0, NULL);
+
+ /* Make sure we really filled up the tok* variables */
+ tt_int_op(tok1[REND_TOKEN_LEN-1], ==, 'y');
+ tt_int_op(tok2[REND_TOKEN_LEN-1], ==, ' ');
+ tt_int_op(tok3[REND_TOKEN_LEN-1], ==, '.');
+
+ /* No maps; nothing there. */
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1));
+
+ circuit_set_rendezvous_cookie(c1, tok1);
+ circuit_set_intro_point_digest(c2, tok2);
+
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok3));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok3));
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok2));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok1));
+
+ /* Without purpose set, we don't get the circuits */
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok2));
+
+ c1->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
+ c2->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
+
+ /* Okay, make sure they show up now. */
+ tt_ptr_op(c1, ==, circuit_get_rendezvous(tok1));
+ tt_ptr_op(c2, ==, circuit_get_intro_point(tok2));
+
+ /* Two items at the same place with the same token. */
+ c3->base_.purpose = CIRCUIT_PURPOSE_REND_POINT_WAITING;
+ circuit_set_rendezvous_cookie(c3, tok2);
+ tt_ptr_op(c2, ==, circuit_get_intro_point(tok2));
+ tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2));
+
+ /* Marking a circuit makes it not get returned any more */
+ circuit_mark_for_close(TO_CIRCUIT(c1), END_CIRC_REASON_FINISHED);
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok1));
+ circuit_free(TO_CIRCUIT(c1));
+ c1 = NULL;
+
+ /* Freeing a circuit makes it not get returned any more. */
+ circuit_free(TO_CIRCUIT(c2));
+ c2 = NULL;
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok2));
+
+ /* c3 -- are you still there? */
+ tt_ptr_op(c3, ==, circuit_get_rendezvous(tok2));
+ /* Change its cookie. This never happens in Tor per se, but hey. */
+ c3->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
+ circuit_set_intro_point_digest(c3, tok3);
+
+ tt_ptr_op(NULL, ==, circuit_get_rendezvous(tok2));
+ tt_ptr_op(c3, ==, circuit_get_intro_point(tok3));
+
+ /* Now replace c3 with c4. */
+ c4->base_.purpose = CIRCUIT_PURPOSE_INTRO_POINT;
+ circuit_set_intro_point_digest(c4, tok3);
+
+ tt_ptr_op(c4, ==, circuit_get_intro_point(tok3));
+
+ tt_ptr_op(c3->rendinfo, ==, NULL);
+ tt_ptr_op(c4->rendinfo, !=, NULL);
+ test_mem_op(c4->rendinfo, ==, tok3, REND_TOKEN_LEN);
+
+ /* Now clear c4's cookie. */
+ circuit_set_intro_point_digest(c4, NULL);
+ tt_ptr_op(c4->rendinfo, ==, NULL);
+ tt_ptr_op(NULL, ==, circuit_get_intro_point(tok3));
+
+ done:
+ if (c1)
+ circuit_free(TO_CIRCUIT(c1));
+ if (c2)
+ circuit_free(TO_CIRCUIT(c2));
+ if (c3)
+ circuit_free(TO_CIRCUIT(c3));
+ if (c4)
+ circuit_free(TO_CIRCUIT(c4));
+}
+
+static void
+test_pick_circid(void *arg)
+{
+ bitarray_t *ba = NULL;
+ channel_t *chan1, *chan2;
+ circid_t circid;
+ int i;
+ (void) arg;
+
+ chan1 = tor_malloc_zero(sizeof(channel_t));
+ chan2 = tor_malloc_zero(sizeof(channel_t));
+ chan2->wide_circ_ids = 1;
+
+ chan1->circ_id_type = CIRC_ID_TYPE_NEITHER;
+ tt_int_op(0, ==, get_unique_circ_id_by_chan(chan1));
+
+ /* Basic tests, with no collisions */
+ chan1->circ_id_type = CIRC_ID_TYPE_LOWER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan1);
+ tt_uint_op(0, <, circid);
+ tt_uint_op(circid, <, (1<<15));
+ }
+ chan1->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan1);
+ tt_uint_op((1<<15), <, circid);
+ tt_uint_op(circid, <, (1<<16));
+ }
+
+ chan2->circ_id_type = CIRC_ID_TYPE_LOWER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan2);
+ tt_uint_op(0, <, circid);
+ tt_uint_op(circid, <, (1u<<31));
+ }
+ chan2->circ_id_type = CIRC_ID_TYPE_HIGHER;
+ for (i = 0; i < 50; ++i) {
+ circid = get_unique_circ_id_by_chan(chan2);
+ tt_uint_op((1u<<31), <, circid);
+ }
+
+ /* Now make sure that we can behave well when we are full up on circuits */
+ chan1->circ_id_type = CIRC_ID_TYPE_LOWER;
+ chan2->circ_id_type = CIRC_ID_TYPE_LOWER;
+ chan1->wide_circ_ids = chan2->wide_circ_ids = 0;
+ ba = bitarray_init_zero((1<<15));
+ for (i = 0; i < (1<<15); ++i) {
+ circid = get_unique_circ_id_by_chan(chan1);
+ if (circid == 0) {
+ tt_int_op(i, >, (1<<14));
+ break;
+ }
+ tt_uint_op(circid, <, (1<<15));
+ tt_assert(! bitarray_is_set(ba, circid));
+ bitarray_set(ba, circid);
+ channel_mark_circid_unusable(chan1, circid);
+ }
+ tt_int_op(i, <, (1<<15));
+ /* Make sure that being full on chan1 does not interfere with chan2 */
+ for (i = 0; i < 100; ++i) {
+ circid = get_unique_circ_id_by_chan(chan2);
+ tt_uint_op(circid, >, 0);
+ tt_uint_op(circid, <, (1<<15));
+ channel_mark_circid_unusable(chan2, circid);
+ }
+
+ done:
+ tor_free(chan1);
+ tor_free(chan2);
+ bitarray_free(ba);
+ circuit_free_all();
+}
+
+struct testcase_t circuitlist_tests[] = {
+ { "maps", test_clist_maps, TT_FORK, NULL, NULL },
+ { "rend_token_maps", test_rend_token_maps, TT_FORK, NULL, NULL },
+ { "pick_circid", test_pick_circid, 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..b9c0436eb
--- /dev/null
+++ b/src/test/test_circuitmux.c
@@ -0,0 +1,88 @@
+/* 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;
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+ (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);
+
+#ifdef ENABLE_MEMPOOLS
+ free_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+}
+
+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_cmdline_args.py b/src/test/test_cmdline_args.py
new file mode 100755
index 000000000..55d1cdb80
--- /dev/null
+++ b/src/test/test_cmdline_args.py
@@ -0,0 +1,292 @@
+#!/usr/bin/python
+
+import binascii
+import hashlib
+import os
+import re
+import shutil
+import subprocess
+import sys
+import tempfile
+import unittest
+
+TOR = "./src/or/tor"
+TOP_SRCDIR = "."
+
+if len(sys.argv) > 1:
+ TOR = sys.argv[1]
+ del sys.argv[1]
+
+if len(sys.argv) > 1:
+ TOP_SRCDIR = sys.argv[1]
+ del sys.argv[1]
+
+class UnexpectedSuccess(Exception):
+ pass
+
+class UnexpectedFailure(Exception):
+ pass
+
+if sys.version < '3':
+ def b2s(b):
+ return b
+ def s2b(s):
+ return s
+ def NamedTemporaryFile():
+ return tempfile.NamedTemporaryFile(delete=False)
+else:
+ def b2s(b):
+ return str(b, 'ascii')
+ def s2b(s):
+ return s.encode('ascii')
+ def NamedTemporaryFile():
+ return tempfile.NamedTemporaryFile(mode="w",delete=False,encoding="ascii")
+
+def contents(fn):
+ f = open(fn)
+ try:
+ return f.read()
+ finally:
+ f.close()
+
+def run_tor(args, failure=False):
+ p = subprocess.Popen([TOR] + args, stdout=subprocess.PIPE)
+ output, _ = p.communicate()
+ result = p.poll()
+ if result and not failure:
+ raise UnexpectedFailure()
+ elif not result and failure:
+ raise UnexpectedSuccess()
+ return b2s(output)
+
+def spaceify_fp(fp):
+ for i in range(0, len(fp), 4):
+ yield fp[i:i+4]
+
+def lines(s):
+ out = s.split("\n")
+ if out and out[-1] == '':
+ del out[-1]
+ return out
+
+def strip_log_junk(line):
+ m = re.match(r'([^\[]+\[[a-z]*\] *)(.*)', line)
+ if not m:
+ return ""+line
+ return m.group(2).strip()
+
+def randstring(entropy_bytes):
+ s = os.urandom(entropy_bytes)
+ return b2s(binascii.b2a_hex(s))
+
+def findLineContaining(lines, s):
+ for ln in lines:
+ if s in ln:
+ return True
+ return False
+
+class CmdlineTests(unittest.TestCase):
+
+ def test_version(self):
+ out = run_tor(["--version"])
+ self.assertTrue(out.startswith("Tor version "))
+ self.assertEqual(len(lines(out)), 1)
+
+ def test_quiet(self):
+ out = run_tor(["--quiet", "--quumblebluffin", "1"], failure=True)
+ self.assertEqual(out, "")
+
+ def test_help(self):
+ out = run_tor(["--help"], failure=False)
+ out2 = run_tor(["-h"], failure=False)
+ self.assertTrue(out.startswith("Copyright (c) 2001"))
+ self.assertTrue(out.endswith(
+ "tor -f <torrc> [args]\n"
+ "See man page for options, or https://www.torproject.org/ for documentation.\n"))
+ self.assertTrue(out == out2)
+
+ def test_hush(self):
+ torrc = NamedTemporaryFile()
+ torrc.close()
+ try:
+ out = run_tor(["--hush", "-f", torrc.name,
+ "--quumblebluffin", "1"], failure=True)
+ finally:
+ os.unlink(torrc.name)
+ self.assertEqual(len(lines(out)), 2)
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertEqual(ln[0], "Failed to parse/validate config: Unknown option 'quumblebluffin'. Failing.")
+ self.assertEqual(ln[1], "Reading config failed--see warnings above.")
+
+ def test_missing_argument(self):
+ out = run_tor(["--hush", "--hash-password"], failure=True)
+ self.assertEqual(len(lines(out)), 2)
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertEqual(ln[0], "Command-line option '--hash-password' with no value. Failing.")
+
+ def test_hash_password(self):
+ out = run_tor(["--hash-password", "woodwose"])
+ result = lines(out)[-1]
+ self.assertEqual(result[:3], "16:")
+ self.assertEqual(len(result), 61)
+ r = binascii.a2b_hex(result[3:])
+ self.assertEqual(len(r), 29)
+
+ salt, how, hashed = r[:8], r[8], r[9:]
+ self.assertEqual(len(hashed), 20)
+ if type(how) == type("A"):
+ how = ord(how)
+
+ count = (16 + (how & 15)) << ((how >> 4) + 6)
+ stuff = salt + s2b("woodwose")
+ repetitions = count // len(stuff) + 1
+ inp = stuff * repetitions
+ inp = inp[:count]
+
+ self.assertEqual(hashlib.sha1(inp).digest(), hashed)
+
+ def test_digests(self):
+ main_c = os.path.join(TOP_SRCDIR, "src", "or", "main.c")
+
+ if os.stat(TOR).st_mtime < os.stat(main_c).st_mtime:
+ self.skipTest(TOR+" not up to date")
+ out = run_tor(["--digests"])
+ main_line = [ l for l in lines(out) if l.endswith("/main.c") ]
+ digest, name = main_line[0].split()
+ f = open(main_c, 'rb')
+ actual = hashlib.sha1(f.read()).hexdigest()
+ f.close()
+ self.assertEqual(digest, actual)
+
+ def test_dump_options(self):
+ default_torrc = NamedTemporaryFile()
+ torrc = NamedTemporaryFile()
+ torrc.write("SocksPort 9999")
+ torrc.close()
+ default_torrc.write("SafeLogging 0")
+ default_torrc.close()
+ out_sh = out_nb = out_fl = None
+ opts = [ "-f", torrc.name,
+ "--defaults-torrc", default_torrc.name ]
+ try:
+ out_sh = run_tor(["--dump-config", "short"]+opts)
+ out_nb = run_tor(["--dump-config", "non-builtin"]+opts)
+ out_fl = run_tor(["--dump-config", "full"]+opts)
+ out_nr = run_tor(["--dump-config", "bliznert"]+opts,
+ failure=True)
+
+ out_verif = run_tor(["--verify-config"]+opts)
+ finally:
+ os.unlink(torrc.name)
+ os.unlink(default_torrc.name)
+
+ self.assertEqual(len(lines(out_sh)), 2)
+ self.assertTrue(lines(out_sh)[0].startswith("DataDirectory "))
+ self.assertEqual(lines(out_sh)[1:],
+ [ "SocksPort 9999" ])
+
+ self.assertEqual(len(lines(out_nb)), 2)
+ self.assertEqual(lines(out_nb),
+ [ "SafeLogging 0",
+ "SocksPort 9999" ])
+
+ out_fl = lines(out_fl)
+ self.assertTrue(len(out_fl) > 100)
+ self.assertTrue("SocksPort 9999" in out_fl)
+ self.assertTrue("SafeLogging 0" in out_fl)
+ self.assertTrue("ClientOnly 0" in out_fl)
+
+ self.assertTrue(out_verif.endswith("Configuration was valid\n"))
+
+ def test_list_fingerprint(self):
+ tmpdir = tempfile.mkdtemp(prefix='ttca_')
+ torrc = NamedTemporaryFile()
+ torrc.write("ORPort 9999\n")
+ torrc.write("DataDirectory %s\n"%tmpdir)
+ torrc.write("Nickname tippi")
+ torrc.close()
+ opts = ["-f", torrc.name]
+ try:
+ out = run_tor(["--list-fingerprint"]+opts)
+ fp = contents(os.path.join(tmpdir, "fingerprint"))
+ finally:
+ os.unlink(torrc.name)
+ shutil.rmtree(tmpdir)
+
+ out = lines(out)
+ lastlog = strip_log_junk(out[-2])
+ lastline = out[-1]
+ fp = fp.strip()
+ nn_fp = fp.split()[0]
+ space_fp = " ".join(spaceify_fp(fp.split()[1]))
+ self.assertEqual(lastlog,
+ "Your Tor server's identity key fingerprint is '%s'"%fp)
+ self.assertEqual(lastline, "tippi %s"%space_fp)
+ self.assertEqual(nn_fp, "tippi")
+
+ def test_list_options(self):
+ out = lines(run_tor(["--list-torrc-options"]))
+ self.assertTrue(len(out)>100)
+ self.assertTrue(out[0] <= 'AccountingMax')
+ self.assertTrue("UseBridges" in out)
+ self.assertTrue("SocksPort" in out)
+
+ def test_cmdline_args(self):
+ default_torrc = NamedTemporaryFile()
+ torrc = NamedTemporaryFile()
+ torrc.write("SocksPort 9999\n")
+ torrc.write("SocksPort 9998\n")
+ torrc.write("ORPort 9000\n")
+ torrc.write("ORPort 9001\n")
+ torrc.write("Nickname eleventeen\n")
+ torrc.write("ControlPort 9500\n")
+ torrc.close()
+ default_torrc.write("")
+ default_torrc.close()
+ out_sh = out_nb = out_fl = None
+ opts = [ "-f", torrc.name,
+ "--defaults-torrc", default_torrc.name,
+ "--dump-config", "short" ]
+ try:
+ out_1 = run_tor(opts)
+ out_2 = run_tor(opts+["+ORPort", "9003",
+ "SocksPort", "9090",
+ "/ControlPort",
+ "/TransPort",
+ "+ExtORPort", "9005"])
+ finally:
+ os.unlink(torrc.name)
+ os.unlink(default_torrc.name)
+
+ out_1 = [ l for l in lines(out_1) if not l.startswith("DataDir") ]
+ out_2 = [ l for l in lines(out_2) if not l.startswith("DataDir") ]
+
+ self.assertEqual(out_1,
+ ["ControlPort 9500",
+ "Nickname eleventeen",
+ "ORPort 9000",
+ "ORPort 9001",
+ "SocksPort 9999",
+ "SocksPort 9998"])
+ self.assertEqual(out_2,
+ ["ExtORPort 9005",
+ "Nickname eleventeen",
+ "ORPort 9000",
+ "ORPort 9001",
+ "ORPort 9003",
+ "SocksPort 9090"])
+
+ def test_missing_torrc(self):
+ fname = "nonexistent_file_"+randstring(8)
+ out = run_tor(["-f", fname, "--verify-config"], failure=True)
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertTrue("Unable to open configuration file" in ln[-2])
+ self.assertTrue("Reading config failed" in ln[-1])
+
+ out = run_tor(["-f", fname, "--verify-config", "--ignore-missing-torrc"])
+ ln = [ strip_log_junk(l) for l in lines(out) ]
+ self.assertTrue(findLineContaining(ln, ", using reasonable defaults"))
+ self.assertTrue("Configuration was valid" in ln[-1])
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/src/test/test_config.c b/src/test/test_config.c
index ff251a24d..94ac4dca1 100644
--- a/src/test/test_config.c
+++ b/src/test/test_config.c
@@ -1,13 +1,19 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
+
+#define CONFIG_PRIVATE
#include "or.h"
+#include "addressmap.h"
#include "config.h"
+#include "confparse.h"
#include "connection_edge.h"
#include "test.h"
+#include "util.h"
+#include "address.h"
static void
test_config_addressmap(void *arg)
@@ -40,6 +46,11 @@ test_config_addressmap(void *arg)
config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
config_register_addressmaps(get_options());
+/* Use old interface for now, so we don't need to rewrite the unit tests */
+#define addressmap_rewrite(a,s,eo,ao) \
+ addressmap_rewrite((a),(s),AMR_FLAG_USE_IPV4_DNS|AMR_FLAG_USE_IPV6_DNS, \
+ (eo),(ao))
+
/* MapAddress .invalidwildcard.com .torserver.exit - no match */
strlcpy(address, "www.invalidwildcard.com", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
@@ -113,6 +124,7 @@ test_config_addressmap(void *arg)
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
/* Test top-level-domain matching a bit harder */
+ config_free_lines(get_options_mutable()->AddressMap);
addressmap_clear_configured();
strlcpy(buf, "MapAddress *.com *.torserver.exit\n"
"MapAddress *.torproject.org 1.1.1.1\n"
@@ -142,6 +154,7 @@ test_config_addressmap(void *arg)
test_streq(address, "2.2.2.2");
/* We don't support '*' as a mapping directive */
+ config_free_lines(get_options_mutable()->AddressMap);
addressmap_clear_configured();
strlcpy(buf, "MapAddress * *.torserver.exit\n", sizeof(buf));
config_get_lines(buf, &(get_options_mutable()->AddressMap), 0);
@@ -156,8 +169,424 @@ test_config_addressmap(void *arg)
strlcpy(address, "www.torproject.org", sizeof(address));
test_assert(!addressmap_rewrite(address, sizeof(address), &expires, NULL));
+#undef addressmap_rewrite
+
+ done:
+ config_free_lines(get_options_mutable()->AddressMap);
+ get_options_mutable()->AddressMap = NULL;
+}
+
+static int
+is_private_dir(const char* path)
+{
+ struct stat st;
+ int r = stat(path, &st);
+ if (r) {
+ return 0;
+ }
+#if !defined (_WIN32) || defined (WINCE)
+ if ((st.st_mode & (S_IFDIR | 0777)) != (S_IFDIR | 0700)) {
+ return 0;
+ }
+#endif
+ return 1;
+}
+
+static void
+test_config_check_or_create_data_subdir(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ char *datadir;
+ const char *subdir = "test_stats";
+ char *subpath;
+ struct stat st;
+ int r;
+#if !defined (_WIN32) || defined (WINCE)
+ unsigned group_permission;
+#endif
+ (void)arg;
+
+ tor_free(options->DataDirectory);
+ datadir = options->DataDirectory = tor_strdup(get_fname("datadir-0"));
+ subpath = get_datadir_fname(subdir);
+
+#if defined (_WIN32) && !defined (WINCE)
+ tt_int_op(mkdir(options->DataDirectory), ==, 0);
+#else
+ tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0);
+#endif
+
+ r = stat(subpath, &st);
+
+ // The subdirectory shouldn't exist yet,
+ // but should be created by the call to check_or_create_data_subdir.
+ test_assert(r && (errno == ENOENT));
+ test_assert(!check_or_create_data_subdir(subdir));
+ test_assert(is_private_dir(subpath));
+
+ // The check should return 0, if the directory already exists
+ // and is private to the user.
+ test_assert(!check_or_create_data_subdir(subdir));
+
+ r = stat(subpath, &st);
+ if (r) {
+ tt_abort_perror("stat");
+ }
+
+#if !defined (_WIN32) || defined (WINCE)
+ group_permission = st.st_mode | 0070;
+ r = chmod(subpath, group_permission);
+
+ if (r) {
+ tt_abort_perror("chmod");
+ }
+
+ // If the directory exists, but its mode is too permissive
+ // a call to check_or_create_data_subdir should reset the mode.
+ test_assert(!is_private_dir(subpath));
+ test_assert(!check_or_create_data_subdir(subdir));
+ test_assert(is_private_dir(subpath));
+#endif
+
+ done:
+ rmdir(subpath);
+ tor_free(datadir);
+ tor_free(subpath);
+}
+
+static void
+test_config_write_to_data_subdir(void *arg)
+{
+ or_options_t* options = get_options_mutable();
+ char *datadir;
+ char *cp = NULL;
+ const char* subdir = "test_stats";
+ const char* fname = "test_file";
+ const char* str =
+ "Lorem ipsum dolor sit amet, consetetur sadipscing\n"
+ "elitr, sed diam nonumy eirmod\n"
+ "tempor invidunt ut labore et dolore magna aliquyam\n"
+ "erat, sed diam voluptua.\n"
+ "At vero eos et accusam et justo duo dolores et ea\n"
+ "rebum. Stet clita kasd gubergren,\n"
+ "no sea takimata sanctus est Lorem ipsum dolor sit amet.\n"
+ "Lorem ipsum dolor sit amet,\n"
+ "consetetur sadipscing elitr, sed diam nonumy eirmod\n"
+ "tempor invidunt ut labore et dolore\n"
+ "magna aliquyam erat, sed diam voluptua. At vero eos et\n"
+ "accusam et justo duo dolores et\n"
+ "ea rebum. Stet clita kasd gubergren, no sea takimata\n"
+ "sanctus est Lorem ipsum dolor sit amet.";
+ char* filepath = NULL;
+ (void)arg;
+
+ tor_free(options->DataDirectory);
+ datadir = options->DataDirectory = tor_strdup(get_fname("datadir-1"));
+ filepath = get_datadir_fname2(subdir, fname);
+
+#if defined (_WIN32) && !defined (WINCE)
+ tt_int_op(mkdir(options->DataDirectory), ==, 0);
+#else
+ tt_int_op(mkdir(options->DataDirectory, 0700), ==, 0);
+#endif
+
+ // Write attempt shoudl fail, if subdirectory doesn't exist.
+ test_assert(write_to_data_subdir(subdir, fname, str, NULL));
+ test_assert(! check_or_create_data_subdir(subdir));
+
+ // Content of file after write attempt should be
+ // equal to the original string.
+ test_assert(!write_to_data_subdir(subdir, fname, str, NULL));
+ cp = read_file_to_str(filepath, 0, NULL);
+ test_streq(cp, str);
+ tor_free(cp);
+
+ // A second write operation should overwrite the old content.
+ test_assert(!write_to_data_subdir(subdir, fname, str, NULL));
+ cp = read_file_to_str(filepath, 0, NULL);
+ test_streq(cp, str);
+ tor_free(cp);
+
done:
- ;
+ (void) unlink(filepath);
+ rmdir(options->DataDirectory);
+ tor_free(datadir);
+ tor_free(filepath);
+ tor_free(cp);
+}
+
+/* Test helper function: Make sure that a bridge line gets parsed
+ * properly. Also make sure that the resulting bridge_line_t structure
+ * has its fields set correctly. */
+static void
+good_bridge_line_test(const char *string, const char *test_addrport,
+ const char *test_digest, const char *test_transport,
+ const smartlist_t *test_socks_args)
+{
+ char *tmp = NULL;
+ bridge_line_t *bridge_line = parse_bridge_line(string);
+ test_assert(bridge_line);
+
+ /* test addrport */
+ tmp = tor_strdup(fmt_addrport(&bridge_line->addr, bridge_line->port));
+ test_streq(test_addrport, tmp);
+ tor_free(tmp);
+
+ /* If we were asked to validate a digest, but we did not get a
+ digest after parsing, we failed. */
+ if (test_digest && tor_digest_is_zero(bridge_line->digest))
+ test_assert(0);
+
+ /* If we were not asked to validate a digest, and we got a digest
+ after parsing, we failed again. */
+ if (!test_digest && !tor_digest_is_zero(bridge_line->digest))
+ test_assert(0);
+
+ /* If we were asked to validate a digest, and we got a digest after
+ parsing, make sure it's correct. */
+ if (test_digest) {
+ tmp = tor_strdup(hex_str(bridge_line->digest, DIGEST_LEN));
+ tor_strlower(tmp);
+ test_streq(test_digest, tmp);
+ tor_free(tmp);
+ }
+
+ /* If we were asked to validate a transport name, make sure tha it
+ matches with the transport name that was parsed. */
+ if (test_transport && !bridge_line->transport_name)
+ test_assert(0);
+ if (!test_transport && bridge_line->transport_name)
+ test_assert(0);
+ if (test_transport)
+ test_streq(test_transport, bridge_line->transport_name);
+
+ /* Validate the SOCKS argument smartlist. */
+ if (test_socks_args && !bridge_line->socks_args)
+ test_assert(0);
+ if (!test_socks_args && bridge_line->socks_args)
+ test_assert(0);
+ if (test_socks_args)
+ test_assert(smartlist_strings_eq(test_socks_args,
+ bridge_line->socks_args));
+
+ done:
+ tor_free(tmp);
+ bridge_line_free(bridge_line);
+}
+
+/* Test helper function: Make sure that a bridge line is
+ * unparseable. */
+static void
+bad_bridge_line_test(const char *string)
+{
+ bridge_line_t *bridge_line = parse_bridge_line(string);
+ if (bridge_line)
+ TT_FAIL(("%s was supposed to fail, but it didn't.", string));
+ test_assert(!bridge_line);
+
+ done:
+ bridge_line_free(bridge_line);
+}
+
+static void
+test_config_parse_bridge_line(void *arg)
+{
+ (void) arg;
+ good_bridge_line_test("192.0.2.1:4123",
+ "192.0.2.1:4123", NULL, NULL, NULL);
+
+ good_bridge_line_test("192.0.2.1",
+ "192.0.2.1:443", NULL, NULL, NULL);
+
+ good_bridge_line_test("transport [::1]",
+ "[::1]:443", NULL, "transport", NULL);
+
+ good_bridge_line_test("transport 192.0.2.1:12 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "192.0.2.1:12",
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "transport", NULL);
+
+ {
+ smartlist_t *sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "twoandtwo=five");
+
+ good_bridge_line_test("transport 192.0.2.1:12 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413 twoandtwo=five",
+ "192.0.2.1:12", "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "transport", sl_tmp);
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+
+ {
+ smartlist_t *sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "twoandtwo=five");
+ smartlist_add_asprintf(sl_tmp, "z=z");
+
+ good_bridge_line_test("transport 192.0.2.1:12 twoandtwo=five z=z",
+ "192.0.2.1:12", NULL, "transport", sl_tmp);
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+
+ {
+ smartlist_t *sl_tmp = smartlist_new();
+ smartlist_add_asprintf(sl_tmp, "dub=come");
+ smartlist_add_asprintf(sl_tmp, "save=me");
+
+ good_bridge_line_test("transport 192.0.2.1:12 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349666 "
+ "dub=come save=me",
+
+ "192.0.2.1:12",
+ "4352e58420e68f5e40bf7c74faddccd9d1349666",
+ "transport", sl_tmp);
+
+ SMARTLIST_FOREACH(sl_tmp, char *, s, tor_free(s));
+ smartlist_free(sl_tmp);
+ }
+
+ good_bridge_line_test("192.0.2.1:1231 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ "192.0.2.1:1231",
+ "4352e58420e68f5e40bf7c74faddccd9d1349413",
+ NULL, NULL);
+
+ /* Empty line */
+ bad_bridge_line_test("");
+ /* bad transport name */
+ bad_bridge_line_test("tr$n_sp0r7 190.20.2.2");
+ /* weird ip address */
+ bad_bridge_line_test("a.b.c.d");
+ /* invalid fpr */
+ bad_bridge_line_test("2.2.2.2:1231 4352e58420e68f5e40bf7c74faddccd9d1349");
+ /* no k=v in the end */
+ bad_bridge_line_test("obfs2 2.2.2.2:1231 "
+ "4352e58420e68f5e40bf7c74faddccd9d1349413 what");
+ /* no addrport */
+ bad_bridge_line_test("asdw");
+ /* huge k=v value that can't fit in SOCKS fields */
+ bad_bridge_line_test(
+ "obfs2 2.2.2.2:1231 aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
+ "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);
+ }
+}
+
+// Tests if an options with MyFamily fingerprints missing '$' normalises
+// them correctly and also ensure it also works with multiple fingerprints
+static void
+test_config_fix_my_family(void *arg)
+{
+ char *err = NULL;
+ const char *family = "$1111111111111111111111111111111111111111, "
+ "1111111111111111111111111111111111111112, "
+ "$1111111111111111111111111111111111111113";
+
+ or_options_t* options = options_new();
+ or_options_t* defaults = options_new();
+ (void) arg;
+
+ options_init(options);
+ options_init(defaults);
+ options->MyFamily = tor_strdup(family);
+
+ options_validate(NULL, options, defaults, 0, &err) ;
+
+ if (err != NULL) {
+ TT_FAIL(("options_validate failed: %s", err));
+ }
+
+ test_streq(options->MyFamily, "$1111111111111111111111111111111111111111, "
+ "$1111111111111111111111111111111111111112, "
+ "$1111111111111111111111111111111111111113");
+
+ done:
+ if (err != NULL) {
+ tor_free(err);
+ }
+
+ or_options_free(options);
+ or_options_free(defaults);
}
#define CONFIG_TEST(name, flags) \
@@ -165,6 +594,11 @@ test_config_addressmap(void *arg)
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),
+ CONFIG_TEST(fix_my_family, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_containers.c b/src/test/test_containers.c
index 45898df4e..067c4c190 100644
--- a/src/test/test_containers.c
+++ b/src/test/test_containers.c
@@ -1,16 +1,17 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#include "or.h"
+#include "fp_pair.h"
#include "test.h"
/** Helper: return a tristate based on comparing the strings in *<b>a</b> and
* *<b>b</b>. */
static int
-_compare_strs(const void **a, const void **b)
+compare_strs_(const void **a, const void **b)
{
const char *s1 = *a, *s2 = *b;
return strcmp(s1, s2);
@@ -28,7 +29,7 @@ compare_strs_for_bsearch_(const void *a, const void **b)
/** Helper: return a tristate based on comparing the strings in *<b>a</b> and
* *<b>b</b>, excluding a's first character, and ignoring case. */
static int
-_compare_without_first_ch(const void *a, const void **b)
+compare_without_first_ch_(const void *a, const void **b)
{
const char *s1 = a, *s2 = *b;
return strcasecmp(s1+1, s2);
@@ -66,8 +67,8 @@ test_container_smartlist_basic(void)
test_eq(4, smartlist_len(sl));
/* test isin. */
- test_assert(smartlist_isin(sl, (void*)3));
- test_assert(!smartlist_isin(sl, (void*)99));
+ test_assert(smartlist_contains(sl, (void*)3));
+ test_assert(!smartlist_contains(sl, (void*)99));
done:
smartlist_free(sl);
@@ -185,7 +186,7 @@ test_container_smartlist_strings(void)
/* Test swapping, shuffling, and sorting. */
smartlist_split_string(sl, "the,onion,router,by,arma,and,nickm", ",", 0, 0);
test_eq(7, smartlist_len(sl));
- smartlist_sort(sl, _compare_strs);
+ smartlist_sort(sl, compare_strs_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc,"and,arma,by,nickm,onion,router,the");
tor_free(cp_alloc);
@@ -195,37 +196,37 @@ test_container_smartlist_strings(void)
tor_free(cp_alloc);
smartlist_shuffle(sl);
test_eq(7, smartlist_len(sl));
- test_assert(smartlist_string_isin(sl, "and"));
- test_assert(smartlist_string_isin(sl, "router"));
- test_assert(smartlist_string_isin(sl, "by"));
- test_assert(smartlist_string_isin(sl, "nickm"));
- test_assert(smartlist_string_isin(sl, "onion"));
- test_assert(smartlist_string_isin(sl, "arma"));
- test_assert(smartlist_string_isin(sl, "the"));
+ test_assert(smartlist_contains_string(sl, "and"));
+ test_assert(smartlist_contains_string(sl, "router"));
+ test_assert(smartlist_contains_string(sl, "by"));
+ test_assert(smartlist_contains_string(sl, "nickm"));
+ test_assert(smartlist_contains_string(sl, "onion"));
+ test_assert(smartlist_contains_string(sl, "arma"));
+ test_assert(smartlist_contains_string(sl, "the"));
/* Test bsearch. */
- smartlist_sort(sl, _compare_strs);
+ smartlist_sort(sl, compare_strs_);
test_streq("nickm", smartlist_bsearch(sl, "zNicKM",
- _compare_without_first_ch));
- test_streq("and", smartlist_bsearch(sl, " AND", _compare_without_first_ch));
- test_eq_ptr(NULL, smartlist_bsearch(sl, " ANz", _compare_without_first_ch));
+ compare_without_first_ch_));
+ test_streq("and", smartlist_bsearch(sl, " AND", compare_without_first_ch_));
+ test_eq_ptr(NULL, smartlist_bsearch(sl, " ANz", compare_without_first_ch_));
/* Test bsearch_idx */
{
int f;
smartlist_t *tmp = NULL;
- test_eq(0, smartlist_bsearch_idx(sl," aaa",_compare_without_first_ch,&f));
+ test_eq(0, smartlist_bsearch_idx(sl," aaa",compare_without_first_ch_,&f));
test_eq(f, 0);
- test_eq(0, smartlist_bsearch_idx(sl," and",_compare_without_first_ch,&f));
+ test_eq(0, smartlist_bsearch_idx(sl," and",compare_without_first_ch_,&f));
test_eq(f, 1);
- test_eq(1, smartlist_bsearch_idx(sl," arm",_compare_without_first_ch,&f));
+ test_eq(1, smartlist_bsearch_idx(sl," arm",compare_without_first_ch_,&f));
test_eq(f, 0);
- test_eq(1, smartlist_bsearch_idx(sl," arma",_compare_without_first_ch,&f));
+ test_eq(1, smartlist_bsearch_idx(sl," arma",compare_without_first_ch_,&f));
test_eq(f, 1);
- test_eq(2, smartlist_bsearch_idx(sl," armb",_compare_without_first_ch,&f));
+ test_eq(2, smartlist_bsearch_idx(sl," armb",compare_without_first_ch_,&f));
test_eq(f, 0);
- test_eq(7, smartlist_bsearch_idx(sl," zzzz",_compare_without_first_ch,&f));
+ test_eq(7, smartlist_bsearch_idx(sl," zzzz",compare_without_first_ch_,&f));
test_eq(f, 0);
/* Test trivial cases for list of length 0 or 1 */
@@ -266,25 +267,25 @@ test_container_smartlist_strings(void)
SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
smartlist_clear(sl);
cp_alloc = smartlist_pop_last(sl);
- test_eq(cp_alloc, NULL);
+ test_eq_ptr(cp_alloc, NULL);
/* Test uniq() */
smartlist_split_string(sl,
"50,noon,radar,a,man,a,plan,a,canal,panama,radar,noon,50",
",", 0, 0);
- smartlist_sort(sl, _compare_strs);
- smartlist_uniq(sl, _compare_strs, _tor_free);
+ smartlist_sort(sl, compare_strs_);
+ smartlist_uniq(sl, compare_strs_, tor_free_);
cp_alloc = smartlist_join_strings(sl, ",", 0, NULL);
test_streq(cp_alloc, "50,a,canal,man,noon,panama,plan,radar");
tor_free(cp_alloc);
- /* Test string_isin and isin_case and num_isin */
- test_assert(smartlist_string_isin(sl, "noon"));
- test_assert(!smartlist_string_isin(sl, "noonoon"));
- test_assert(smartlist_string_isin_case(sl, "nOOn"));
- test_assert(!smartlist_string_isin_case(sl, "nooNooN"));
- test_assert(smartlist_string_num_isin(sl, 50));
- test_assert(!smartlist_string_num_isin(sl, 60));
+ /* Test contains_string, contains_string_case and contains_int_as_string */
+ test_assert(smartlist_contains_string(sl, "noon"));
+ test_assert(!smartlist_contains_string(sl, "noonoon"));
+ test_assert(smartlist_contains_string_case(sl, "nOOn"));
+ test_assert(!smartlist_contains_string_case(sl, "nooNooN"));
+ test_assert(smartlist_contains_int_as_string(sl, 50));
+ test_assert(!smartlist_contains_int_as_string(sl, 60));
/* Test smartlist_choose */
{
@@ -292,12 +293,12 @@ test_container_smartlist_strings(void)
int allsame = 1;
int allin = 1;
void *first = smartlist_choose(sl);
- test_assert(smartlist_isin(sl, first));
+ test_assert(smartlist_contains(sl, first));
for (i = 0; i < 100; ++i) {
void *second = smartlist_choose(sl);
if (second != first)
allsame = 0;
- if (!smartlist_isin(sl, second))
+ if (!smartlist_contains(sl, second))
allin = 0;
}
test_assert(!allsame);
@@ -365,15 +366,15 @@ test_container_smartlist_overlap(void)
smartlist_add_all(sl, odds);
smartlist_intersect(sl, primes);
test_eq(smartlist_len(sl), 3);
- test_assert(smartlist_isin(sl, (void*)3));
- test_assert(smartlist_isin(sl, (void*)5));
- test_assert(smartlist_isin(sl, (void*)7));
+ test_assert(smartlist_contains(sl, (void*)3));
+ test_assert(smartlist_contains(sl, (void*)5));
+ test_assert(smartlist_contains(sl, (void*)7));
/* subtract */
smartlist_add_all(sl, primes);
smartlist_subtract(sl, odds);
test_eq(smartlist_len(sl), 1);
- test_assert(smartlist_isin(sl, (void*)2));
+ test_assert(smartlist_contains(sl, (void*)2));
done:
smartlist_free(odds);
@@ -389,14 +390,14 @@ test_container_smartlist_digests(void)
{
smartlist_t *sl = smartlist_new();
- /* digest_isin. */
+ /* contains_digest */
smartlist_add(sl, tor_memdup("AAAAAAAAAAAAAAAAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
smartlist_add(sl, tor_memdup("\00090AAB2AAAAaasdAAAAA", DIGEST_LEN));
- test_eq(0, smartlist_digest_isin(NULL, "AAAAAAAAAAAAAAAAAAAA"));
- test_assert(smartlist_digest_isin(sl, "AAAAAAAAAAAAAAAAAAAA"));
- test_assert(smartlist_digest_isin(sl, "\00090AAB2AAAAaasdAAAAA"));
- test_eq(0, smartlist_digest_isin(sl, "\00090AAB2AAABaasdAAAAA"));
+ test_eq(0, smartlist_contains_digest(NULL, "AAAAAAAAAAAAAAAAAAAA"));
+ test_assert(smartlist_contains_digest(sl, "AAAAAAAAAAAAAAAAAAAA"));
+ test_assert(smartlist_contains_digest(sl, "\00090AAB2AAAAaasdAAAAA"));
+ test_eq(0, smartlist_contains_digest(sl, "\00090AAB2AAABaasdAAAAA"));
/* sort digests */
smartlist_sort_digests(sl);
@@ -445,11 +446,11 @@ test_container_smartlist_join(void)
} SMARTLIST_FOREACH_JOIN_END(cp1, cp2);
SMARTLIST_FOREACH(sl3, const char *, cp,
- test_assert(smartlist_isin(sl2, cp) &&
- !smartlist_string_isin(sl, cp)));
+ test_assert(smartlist_contains(sl2, cp) &&
+ !smartlist_contains_string(sl, cp)));
SMARTLIST_FOREACH(sl4, const char *, cp,
- test_assert(smartlist_isin(sl, cp) &&
- smartlist_string_isin(sl2, cp)));
+ test_assert(smartlist_contains(sl, cp) &&
+ smartlist_contains_string(sl2, cp)));
joined = smartlist_join_strings(sl3, ",", 0, NULL);
test_streq(joined, "Anemias,Anemias,Crossbowmen,Work");
tor_free(joined);
@@ -468,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)
@@ -528,18 +574,18 @@ test_container_digestset(void)
}
set = digestset_new(1000);
SMARTLIST_FOREACH(included, const char *, cp,
- if (digestset_isin(set, cp))
+ if (digestset_contains(set, cp))
ok = 0);
test_assert(ok);
SMARTLIST_FOREACH(included, const char *, cp,
digestset_add(set, cp));
SMARTLIST_FOREACH(included, const char *, cp,
- if (!digestset_isin(set, cp))
+ if (!digestset_contains(set, cp))
ok = 0);
test_assert(ok);
for (i = 0; i < 1000; ++i) {
crypto_rand(d, DIGEST_LEN);
- if (digestset_isin(set, d))
+ if (digestset_contains(set, d))
++false_positives;
}
test_assert(false_positives < 50); /* Should be far lower. */
@@ -558,7 +604,7 @@ typedef struct pq_entry_t {
/** Helper: return a tristate based on comparing two pq_entry_t values. */
static int
-_compare_strings_for_pqueue(const void *p1, const void *p2)
+compare_strings_for_pqueue_(const void *p1, const void *p2)
{
const pq_entry_t *e1=p1, *e2=p2;
return strcmp(e1->val, e2->val);
@@ -588,7 +634,7 @@ test_container_pqueue(void)
#define OK() smartlist_pqueue_assert_ok(sl, cmp, offset)
- cmp = _compare_strings_for_pqueue;
+ cmp = compare_strings_for_pqueue_;
smartlist_pqueue_add(sl, cmp, offset, &cows);
smartlist_pqueue_add(sl, cmp, offset, &zebras);
smartlist_pqueue_add(sl, cmp, offset, &fish);
@@ -677,12 +723,12 @@ test_container_strmap(void)
test_eq(strmap_size(map), 0);
test_assert(strmap_isempty(map));
v = strmap_set(map, "K1", (void*)99);
- test_eq(v, NULL);
+ test_eq_ptr(v, NULL);
test_assert(!strmap_isempty(map));
v = strmap_set(map, "K2", (void*)101);
- test_eq(v, NULL);
+ test_eq_ptr(v, NULL);
v = strmap_set(map, "K1", (void*)100);
- test_eq(v, (void*)99);
+ test_eq_ptr(v, (void*)99);
test_eq_ptr(strmap_get(map,"K1"), (void*)100);
test_eq_ptr(strmap_get(map,"K2"), (void*)101);
test_eq_ptr(strmap_get(map,"K-not-there"), NULL);
@@ -782,20 +828,152 @@ test_container_order_functions(void)
;
}
+static void
+test_container_di_map(void *arg)
+{
+ di_digest256_map_t *map = NULL;
+ const uint8_t key1[] = "In view of the fact that it was ";
+ const uint8_t key2[] = "superficially convincing, being ";
+ const uint8_t key3[] = "properly enciphered in a one-tim";
+ const uint8_t key4[] = "e cipher scheduled for use today";
+ char *v1 = tor_strdup(", it came close to causing a disaster...");
+ char *v2 = tor_strdup("I regret to have to advise you that the mission");
+ char *v3 = tor_strdup("was actually initiated...");
+ /* -- John Brunner, _The Shockwave Rider_ */
+
+ (void)arg;
+
+ /* Try searching on an empty map. */
+ tt_ptr_op(NULL, ==, dimap_search(map, key1, NULL));
+ tt_ptr_op(NULL, ==, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, ==, dimap_search(map, key2, v3));
+ dimap_free(map, NULL);
+ map = NULL;
+
+ /* Add a single entry. */
+ dimap_add_entry(&map, key1, v1);
+ tt_ptr_op(NULL, ==, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, ==, dimap_search(map, key2, v3));
+ tt_ptr_op(v1, ==, dimap_search(map, key1, NULL));
+
+ /* Now try it with three entries in the map. */
+ dimap_add_entry(&map, key2, v2);
+ dimap_add_entry(&map, key3, v3);
+ tt_ptr_op(v1, ==, dimap_search(map, key1, NULL));
+ tt_ptr_op(v2, ==, dimap_search(map, key2, NULL));
+ tt_ptr_op(v3, ==, dimap_search(map, key3, NULL));
+ tt_ptr_op(NULL, ==, dimap_search(map, key4, NULL));
+ tt_ptr_op(v1, ==, dimap_search(map, key4, v1));
+
+ done:
+ tor_free(v1);
+ tor_free(v2);
+ tor_free(v3);
+ dimap_free(map, NULL);
+}
+
+/** Run unit tests for fp_pair-to-void* map functions */
+static void
+test_container_fp_pair_map(void)
+{
+ fp_pair_map_t *map;
+ fp_pair_t fp1, fp2, fp3, fp4, fp5, fp6;
+ void *v;
+ fp_pair_map_iter_t *iter;
+ fp_pair_t k;
+
+ map = fp_pair_map_new();
+ test_assert(map);
+ test_eq(fp_pair_map_size(map), 0);
+ test_assert(fp_pair_map_isempty(map));
+
+ memset(fp1.first, 0x11, DIGEST_LEN);
+ memset(fp1.second, 0x12, DIGEST_LEN);
+ memset(fp2.first, 0x21, DIGEST_LEN);
+ memset(fp2.second, 0x22, DIGEST_LEN);
+ memset(fp3.first, 0x31, DIGEST_LEN);
+ memset(fp3.second, 0x32, DIGEST_LEN);
+ memset(fp4.first, 0x41, DIGEST_LEN);
+ memset(fp4.second, 0x42, DIGEST_LEN);
+ memset(fp5.first, 0x51, DIGEST_LEN);
+ memset(fp5.second, 0x52, DIGEST_LEN);
+ memset(fp6.first, 0x61, DIGEST_LEN);
+ memset(fp6.second, 0x62, DIGEST_LEN);
+
+ v = fp_pair_map_set(map, &fp1, (void*)99);
+ tt_ptr_op(v, ==, NULL);
+ test_assert(!fp_pair_map_isempty(map));
+ v = fp_pair_map_set(map, &fp2, (void*)101);
+ tt_ptr_op(v, ==, NULL);
+ v = fp_pair_map_set(map, &fp1, (void*)100);
+ tt_ptr_op(v, ==, (void*)99);
+ test_eq_ptr(fp_pair_map_get(map, &fp1), (void*)100);
+ test_eq_ptr(fp_pair_map_get(map, &fp2), (void*)101);
+ test_eq_ptr(fp_pair_map_get(map, &fp3), NULL);
+ fp_pair_map_assert_ok(map);
+
+ v = fp_pair_map_remove(map, &fp2);
+ fp_pair_map_assert_ok(map);
+ test_eq_ptr(v, (void*)101);
+ test_eq_ptr(fp_pair_map_get(map, &fp2), NULL);
+ test_eq_ptr(fp_pair_map_remove(map, &fp2), NULL);
+
+ fp_pair_map_set(map, &fp2, (void*)101);
+ fp_pair_map_set(map, &fp3, (void*)102);
+ fp_pair_map_set(map, &fp4, (void*)103);
+ test_eq(fp_pair_map_size(map), 4);
+ fp_pair_map_assert_ok(map);
+ fp_pair_map_set(map, &fp5, (void*)104);
+ fp_pair_map_set(map, &fp6, (void*)105);
+ fp_pair_map_assert_ok(map);
+
+ /* Test iterator. */
+ iter = fp_pair_map_iter_init(map);
+ while (!fp_pair_map_iter_done(iter)) {
+ fp_pair_map_iter_get(iter, &k, &v);
+ test_eq_ptr(v, fp_pair_map_get(map, &k));
+
+ if (tor_memeq(&fp2, &k, sizeof(fp2))) {
+ iter = fp_pair_map_iter_next_rmv(map, iter);
+ } else {
+ iter = fp_pair_map_iter_next(map, iter);
+ }
+ }
+
+ /* Make sure we removed fp2, but not the others. */
+ test_eq_ptr(fp_pair_map_get(map, &fp2), NULL);
+ test_eq_ptr(fp_pair_map_get(map, &fp5), (void*)104);
+
+ fp_pair_map_assert_ok(map);
+ /* Clean up after ourselves. */
+ fp_pair_map_free(map, NULL);
+ map = NULL;
+
+ done:
+ if (map)
+ fp_pair_map_free(map, NULL);
+}
+
#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),
+ CONTAINER(di_map, 0),
+ CONTAINER_LEGACY(fp_pair_map),
END_OF_TESTCASES
};
diff --git a/src/test/test_controller_events.c b/src/test/test_controller_events.c
new file mode 100644
index 000000000..b45e97a41
--- /dev/null
+++ b/src/test/test_controller_events.c
@@ -0,0 +1,307 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define CONNECTION_PRIVATE
+#define TOR_CHANNEL_INTERNAL_
+#define CONTROL_PRIVATE
+#include "or.h"
+#include "channel.h"
+#include "channeltls.h"
+#include "connection.h"
+#include "control.h"
+#include "test.h"
+
+static void
+help_test_bucket_note_empty(uint32_t expected_msec_since_midnight,
+ int tokens_before, size_t tokens_removed,
+ uint32_t msec_since_epoch)
+{
+ uint32_t timestamp_var = 0;
+ struct timeval tvnow;
+ tvnow.tv_sec = msec_since_epoch / 1000;
+ tvnow.tv_usec = (msec_since_epoch % 1000) * 1000;
+ connection_buckets_note_empty_ts(&timestamp_var, tokens_before,
+ tokens_removed, &tvnow);
+ tt_int_op(expected_msec_since_midnight, ==, timestamp_var);
+
+ done:
+ ;
+}
+
+static void
+test_cntev_bucket_note_empty(void *arg)
+{
+ (void)arg;
+
+ /* Two cases with nothing to note, because bucket was empty before;
+ * 86442200 == 1970-01-02 00:00:42.200000 */
+ help_test_bucket_note_empty(0, 0, 0, 86442200);
+ help_test_bucket_note_empty(0, -100, 100, 86442200);
+
+ /* Nothing to note, because bucket has not been emptied. */
+ help_test_bucket_note_empty(0, 101, 100, 86442200);
+
+ /* Bucket was emptied, note 42200 msec since midnight. */
+ help_test_bucket_note_empty(42200, 101, 101, 86442200);
+ help_test_bucket_note_empty(42200, 101, 102, 86442200);
+}
+
+static void
+test_cntev_bucket_millis_empty(void *arg)
+{
+ struct timeval tvnow;
+ (void)arg;
+
+ /* 1970-01-02 00:00:42.200000 */
+ tvnow.tv_sec = 86400 + 42;
+ tvnow.tv_usec = 200000;
+
+ /* Bucket has not been refilled. */
+ tt_int_op(0, ==, bucket_millis_empty(0, 42120, 0, 100, &tvnow));
+ tt_int_op(0, ==, bucket_millis_empty(-10, 42120, -10, 100, &tvnow));
+
+ /* Bucket was not empty. */
+ tt_int_op(0, ==, bucket_millis_empty(10, 42120, 20, 100, &tvnow));
+
+ /* Bucket has been emptied 80 msec ago and has just been refilled. */
+ tt_int_op(80, ==, bucket_millis_empty(-20, 42120, -10, 100, &tvnow));
+ tt_int_op(80, ==, bucket_millis_empty(-10, 42120, 0, 100, &tvnow));
+ tt_int_op(80, ==, bucket_millis_empty(0, 42120, 10, 100, &tvnow));
+
+ /* Bucket has been emptied 180 msec ago, last refill was 100 msec ago
+ * which was insufficient to make it positive, so cap msec at 100. */
+ tt_int_op(100, ==, bucket_millis_empty(0, 42020, 1, 100, &tvnow));
+
+ /* 1970-01-02 00:00:00:050000 */
+ tvnow.tv_sec = 86400;
+ tvnow.tv_usec = 50000;
+
+ /* Last emptied 30 msec before midnight, tvnow is 50 msec after
+ * midnight, that's 80 msec in total. */
+ tt_int_op(80, ==, bucket_millis_empty(0, 86400000 - 30, 1, 100, &tvnow));
+
+ done:
+ ;
+}
+
+static void
+add_testing_cell_stats_entry(circuit_t *circ, uint8_t command,
+ unsigned int waiting_time,
+ unsigned int removed, unsigned int exitward)
+{
+ testing_cell_stats_entry_t *ent = tor_malloc_zero(
+ sizeof(testing_cell_stats_entry_t));
+ ent->command = command;
+ ent->waiting_time = waiting_time;
+ ent->removed = removed;
+ ent->exitward = exitward;
+ if (!circ->testing_cell_stats)
+ circ->testing_cell_stats = smartlist_new();
+ smartlist_add(circ->testing_cell_stats, ent);
+}
+
+static void
+test_cntev_sum_up_cell_stats(void *arg)
+{
+ or_circuit_t *or_circ;
+ circuit_t *circ;
+ cell_stats_t *cell_stats = NULL;
+ (void)arg;
+
+ /* This circuit is fake. */
+ or_circ = tor_malloc_zero(sizeof(or_circuit_t));
+ or_circ->base_.magic = OR_CIRCUIT_MAGIC;
+ or_circ->base_.purpose = CIRCUIT_PURPOSE_OR;
+ circ = TO_CIRCUIT(or_circ);
+
+ /* A single RELAY cell was added to the appward queue. */
+ cell_stats = tor_malloc_zero(sizeof(cell_stats_t));
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 0, 0, 0);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(1, ==, cell_stats->added_cells_appward[CELL_RELAY]);
+
+ /* A single RELAY cell was added to the exitward queue. */
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 0, 0, 1);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(1, ==, cell_stats->added_cells_exitward[CELL_RELAY]);
+
+ /* A single RELAY cell was removed from the appward queue where it spent
+ * 20 msec. */
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 2, 1, 0);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(20, ==, cell_stats->total_time_appward[CELL_RELAY]);
+ tt_u64_op(1, ==, cell_stats->removed_cells_appward[CELL_RELAY]);
+
+ /* A single RELAY cell was removed from the exitward queue where it
+ * spent 30 msec. */
+ add_testing_cell_stats_entry(circ, CELL_RELAY, 3, 1, 1);
+ sum_up_cell_stats_by_command(circ, cell_stats);
+ tt_u64_op(30, ==, cell_stats->total_time_exitward[CELL_RELAY]);
+ tt_u64_op(1, ==, cell_stats->removed_cells_exitward[CELL_RELAY]);
+
+ done:
+ tor_free(cell_stats);
+ tor_free(or_circ);
+}
+
+static void
+test_cntev_append_cell_stats(void *arg)
+{
+ smartlist_t *event_parts;
+ char *cp = NULL;
+ const char *key = "Z";
+ uint64_t include_if_non_zero[CELL_COMMAND_MAX_ + 1],
+ number_to_include[CELL_COMMAND_MAX_ + 1];
+ (void)arg;
+
+ event_parts = smartlist_new();
+ memset(include_if_non_zero, 0,
+ (CELL_COMMAND_MAX_ + 1) * sizeof(uint64_t));
+ memset(number_to_include, 0,
+ (CELL_COMMAND_MAX_ + 1) * sizeof(uint64_t));
+
+ /* All array entries empty. */
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ tt_int_op(0, ==, smartlist_len(event_parts));
+
+ /* There's a RELAY cell to include, but the corresponding field in
+ * include_if_non_zero is still zero. */
+ number_to_include[CELL_RELAY] = 1;
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ tt_int_op(0, ==, smartlist_len(event_parts));
+
+ /* Now include single RELAY cell. */
+ include_if_non_zero[CELL_RELAY] = 2;
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ cp = smartlist_pop_last(event_parts);
+ tt_str_op("Z=relay:1", ==, cp);
+ tor_free(cp);
+
+ /* Add four CREATE cells. */
+ include_if_non_zero[CELL_CREATE] = 3;
+ number_to_include[CELL_CREATE] = 4;
+ append_cell_stats_by_command(event_parts, key,
+ include_if_non_zero,
+ number_to_include);
+ cp = smartlist_pop_last(event_parts);
+ tt_str_op("Z=create:4,relay:1", ==, cp);
+
+ done:
+ tor_free(cp);
+ smartlist_free(event_parts);
+}
+
+static void
+test_cntev_format_cell_stats(void *arg)
+{
+ char *event_string = NULL;
+ origin_circuit_t *ocirc = NULL;
+ or_circuit_t *or_circ = NULL;
+ cell_stats_t *cell_stats = NULL;
+ channel_tls_t *n_chan=NULL, *p_chan=NULL;
+ (void)arg;
+
+ n_chan = tor_malloc_zero(sizeof(channel_tls_t));
+ n_chan->base_.global_identifier = 1;
+
+ ocirc = tor_malloc_zero(sizeof(origin_circuit_t));
+ ocirc->base_.magic = ORIGIN_CIRCUIT_MAGIC;
+ ocirc->base_.purpose = CIRCUIT_PURPOSE_C_GENERAL;
+ ocirc->global_identifier = 2;
+ ocirc->base_.n_circ_id = 3;
+ ocirc->base_.n_chan = &(n_chan->base_);
+
+ /* Origin circuit was completely idle. */
+ cell_stats = tor_malloc_zero(sizeof(cell_stats_t));
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1", ==, event_string);
+ tor_free(event_string);
+
+ /* Origin circuit had 4 RELAY cells added to its exitward queue. */
+ cell_stats->added_cells_exitward[CELL_RELAY] = 4;
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4",
+ ==, event_string);
+ tor_free(event_string);
+
+ /* Origin circuit also had 5 CREATE2 cells added to its exitward
+ * queue. */
+ cell_stats->added_cells_exitward[CELL_CREATE2] = 5;
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4,"
+ "create2:5", ==, event_string);
+ tor_free(event_string);
+
+ /* Origin circuit also had 7 RELAY cells removed from its exitward queue
+ * which together spent 6 msec in the queue. */
+ cell_stats->total_time_exitward[CELL_RELAY] = 6;
+ cell_stats->removed_cells_exitward[CELL_RELAY] = 7;
+ format_cell_stats(&event_string, TO_CIRCUIT(ocirc), cell_stats);
+ tt_str_op("ID=2 OutboundQueue=3 OutboundConn=1 OutboundAdded=relay:4,"
+ "create2:5 OutboundRemoved=relay:7 OutboundTime=relay:6",
+ ==, event_string);
+ tor_free(event_string);
+
+ p_chan = tor_malloc_zero(sizeof(channel_tls_t));
+ p_chan->base_.global_identifier = 2;
+
+ or_circ = tor_malloc_zero(sizeof(or_circuit_t));
+ or_circ->base_.magic = OR_CIRCUIT_MAGIC;
+ or_circ->base_.purpose = CIRCUIT_PURPOSE_OR;
+ or_circ->p_circ_id = 8;
+ or_circ->p_chan = &(p_chan->base_);
+ or_circ->base_.n_circ_id = 9;
+ or_circ->base_.n_chan = &(n_chan->base_);
+
+ tor_free(cell_stats);
+
+ /* OR circuit was idle. */
+ cell_stats = tor_malloc_zero(sizeof(cell_stats_t));
+ format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats);
+ tt_str_op("InboundQueue=8 InboundConn=2 OutboundQueue=9 OutboundConn=1",
+ ==, event_string);
+ tor_free(event_string);
+
+ /* OR circuit had 3 RELAY cells added to its appward queue. */
+ cell_stats->added_cells_appward[CELL_RELAY] = 3;
+ format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats);
+ tt_str_op("InboundQueue=8 InboundConn=2 InboundAdded=relay:3 "
+ "OutboundQueue=9 OutboundConn=1", ==, event_string);
+ tor_free(event_string);
+
+ /* OR circuit had 7 RELAY cells removed from its appward queue which
+ * together spent 6 msec in the queue. */
+ cell_stats->total_time_appward[CELL_RELAY] = 6;
+ cell_stats->removed_cells_appward[CELL_RELAY] = 7;
+ format_cell_stats(&event_string, TO_CIRCUIT(or_circ), cell_stats);
+ tt_str_op("InboundQueue=8 InboundConn=2 InboundAdded=relay:3 "
+ "InboundRemoved=relay:7 InboundTime=relay:6 "
+ "OutboundQueue=9 OutboundConn=1", ==, event_string);
+
+ done:
+ tor_free(cell_stats);
+ tor_free(event_string);
+ tor_free(or_circ);
+ tor_free(ocirc);
+ tor_free(p_chan);
+ tor_free(n_chan);
+}
+
+#define TEST(name, flags) \
+ { #name, test_cntev_ ## name, flags, 0, NULL }
+
+struct testcase_t controller_event_tests[] = {
+ TEST(bucket_note_empty, 0),
+ TEST(bucket_millis_empty, 0),
+ TEST(sum_up_cell_stats, 0),
+ TEST(append_cell_stats, 0),
+ TEST(format_cell_stats, 0),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_crypto.c b/src/test/test_crypto.c
index 7f4347a41..5d8edb655 100644
--- a/src/test/test_crypto.c
+++ b/src/test/test_crypto.c
@@ -1,13 +1,22 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
-#define CRYPTO_PRIVATE
+#define CRYPTO_CURVE25519_PRIVATE
#include "or.h"
#include "test.h"
#include "aes.h"
+#include "util.h"
+#include "siphash.h"
+#ifdef CURVE25519_ENABLED
+#include "crypto_curve25519.h"
+#endif
+
+extern const char AUTHORITY_SIGNKEY_3[];
+extern const char AUTHORITY_SIGNKEY_A_DIGEST[];
+extern const char AUTHORITY_SIGNKEY_A_DIGEST256[];
/** Run unit tests for Diffie-Hellman functionality. */
static void
@@ -119,9 +128,9 @@ test_crypto_aes(void *arg)
memset(data2, 0, 1024);
memset(data3, 0, 1024);
env1 = crypto_cipher_new(NULL);
- test_neq(env1, 0);
+ test_neq_ptr(env1, 0);
env2 = crypto_cipher_new(crypto_cipher_get_key(env1));
- test_neq(env2, 0);
+ test_neq_ptr(env2, 0);
/* Try encrypting 512 chars. */
crypto_cipher_encrypt(env1, data2, data1, 512);
@@ -152,7 +161,7 @@ test_crypto_aes(void *arg)
memset(data3, 0, 1024);
env2 = crypto_cipher_new(crypto_cipher_get_key(env1));
- test_neq(env2, 0);
+ test_neq_ptr(env2, NULL);
for (j = 0; j < 1024-16; j += 17) {
crypto_cipher_encrypt(env2, data3+j, data1+j, 17);
}
@@ -264,34 +273,6 @@ test_crypto_sha(void)
"96177A9CB410FF61F20015AD");
tt_int_op(i, ==, 0);
- /* Test HMAC-SHA-1 with test cases from RFC2202. */
-
- /* Case 1. */
- memset(key, 0x0b, 20);
- crypto_hmac_sha1(digest, key, 20, "Hi There", 8);
- test_streq(hex_str(digest, 20),
- "B617318655057264E28BC0B6FB378C8EF146BE00");
- /* Case 2. */
- crypto_hmac_sha1(digest, "Jefe", 4, "what do ya want for nothing?", 28);
- test_streq(hex_str(digest, 20),
- "EFFCDF6AE5EB2FA2D27416D5F184DF9C259A7C79");
-
- /* Case 4. */
- base16_decode(key, 25,
- "0102030405060708090a0b0c0d0e0f10111213141516171819", 50);
- memset(data, 0xcd, 50);
- crypto_hmac_sha1(digest, key, 25, data, 50);
- test_streq(hex_str(digest, 20),
- "4C9007F4026250C6BC8414F9BF50C86C2D7235DA");
-
- /* Case 5. */
- memset(key, 0xaa, 80);
- crypto_hmac_sha1(digest, key, 80,
- "Test Using Larger Than Block-Size Key - Hash Key First",
- 54);
- test_streq(hex_str(digest, 20),
- "AA4AE5E15272D00E95705637CE8A3B55ED402112");
-
/* Test HMAC-SHA256 with test cases from wikipedia and RFC 4231 */
/* Case empty (wikipedia) */
@@ -417,7 +398,7 @@ test_crypto_pk(void)
char *encoded = NULL;
char data1[1024], data2[1024], data3[1024];
size_t size;
- int i, j, p, len;
+ int i, len;
/* Public-key ciphers */
pk1 = pk_generate(0);
@@ -427,6 +408,11 @@ test_crypto_pk(void)
test_assert(! crypto_pk_read_public_key_from_string(pk2, encoded, size));
test_eq(0, crypto_pk_cmp_keys(pk1, pk2));
+ /* comparison between keys and NULL */
+ tt_int_op(crypto_pk_cmp_keys(NULL, pk1), <, 0);
+ tt_int_op(crypto_pk_cmp_keys(NULL, NULL), ==, 0);
+ tt_int_op(crypto_pk_cmp_keys(pk1, NULL), >, 0);
+
test_eq(128, crypto_pk_keysize(pk1));
test_eq(1024, crypto_pk_num_bits(pk1));
test_eq(128, crypto_pk_keysize(pk2));
@@ -496,19 +482,16 @@ test_crypto_pk(void)
/* Try with hybrid encryption wrappers. */
crypto_rand(data1, 1024);
- for (i = 0; i < 2; ++i) {
- for (j = 85; j < 140; ++j) {
- memset(data2,0,1024);
- memset(data3,0,1024);
- p = (i==0)?PK_PKCS1_PADDING:PK_PKCS1_OAEP_PADDING;
- len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2),
- data1,j,p,0);
- test_assert(len>=0);
- len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3),
- data2,len,p,1);
- test_eq(len,j);
- test_memeq(data1,data3,j);
- }
+ for (i = 85; i < 140; ++i) {
+ memset(data2,0,1024);
+ memset(data3,0,1024);
+ len = crypto_pk_public_hybrid_encrypt(pk1,data2,sizeof(data2),
+ data1,i,PK_PKCS1_OAEP_PADDING,0);
+ test_assert(len>=0);
+ len = crypto_pk_private_hybrid_decrypt(pk1,data3,sizeof(data3),
+ data2,len,PK_PKCS1_OAEP_PADDING,1);
+ test_eq(len,i);
+ test_memeq(data1,data3,i);
}
/* Try copy_full */
@@ -526,6 +509,85 @@ test_crypto_pk(void)
tor_free(encoded);
}
+static void
+test_crypto_pk_fingerprints(void *arg)
+{
+ crypto_pk_t *pk = NULL;
+ char encoded[512];
+ char d[DIGEST_LEN], d2[DIGEST_LEN];
+ char fingerprint[FINGERPRINT_LEN+1];
+ int n;
+ unsigned i;
+ char *mem_op_hex_tmp=NULL;
+
+ (void)arg;
+
+ pk = pk_generate(1);
+ tt_assert(pk);
+ n = crypto_pk_asn1_encode(pk, encoded, sizeof(encoded));
+ tt_int_op(n, >, 0);
+ tt_int_op(n, >, 128);
+ tt_int_op(n, <, 256);
+
+ /* Is digest as expected? */
+ crypto_digest(d, encoded, n);
+ tt_int_op(0, ==, crypto_pk_get_digest(pk, d2));
+ test_memeq(d, d2, DIGEST_LEN);
+
+ /* Is fingerprint right? */
+ tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 0));
+ tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ test_memeq_hex(d, fingerprint);
+
+ /* Are spaces right? */
+ tt_int_op(0, ==, crypto_pk_get_fingerprint(pk, fingerprint, 1));
+ for (i = 4; i < strlen(fingerprint); i += 5) {
+ tt_int_op(fingerprint[i], ==, ' ');
+ }
+ tor_strstrip(fingerprint, " ");
+ tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ test_memeq_hex(d, fingerprint);
+
+ /* Now hash again and check crypto_pk_get_hashed_fingerprint. */
+ crypto_digest(d2, d, sizeof(d));
+ tt_int_op(0, ==, crypto_pk_get_hashed_fingerprint(pk, fingerprint));
+ tt_int_op(strlen(fingerprint), ==, DIGEST_LEN * 2);
+ test_memeq_hex(d2, fingerprint);
+
+ done:
+ crypto_pk_free(pk);
+ tor_free(mem_op_hex_tmp);
+}
+
+/** Sanity check for crypto pk digests */
+static void
+test_crypto_digests(void)
+{
+ crypto_pk_t *k = NULL;
+ ssize_t r;
+ digests_t pkey_digests;
+ char digest[DIGEST_LEN];
+
+ k = crypto_pk_new();
+ test_assert(k);
+ r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_3, -1);
+ test_assert(!r);
+
+ r = crypto_pk_get_digest(k, digest);
+ test_assert(r == 0);
+ test_memeq(hex_str(digest, DIGEST_LEN),
+ AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
+
+ r = crypto_pk_get_all_digests(k, &pkey_digests);
+
+ test_memeq(hex_str(pkey_digests.d[DIGEST_SHA1], DIGEST_LEN),
+ AUTHORITY_SIGNKEY_A_DIGEST, HEX_DIGEST_LEN);
+ test_memeq(hex_str(pkey_digests.d[DIGEST_SHA256], DIGEST256_LEN),
+ AUTHORITY_SIGNKEY_A_DIGEST256, HEX_DIGEST256_LEN);
+ done:
+ crypto_pk_free(k);
+}
+
/** Run unit tests for misc crypto formatting functionality (base64, base32,
* fingerprints, etc) */
static void
@@ -620,28 +682,12 @@ 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);
}
- /* Check fingerprint */
- {
- test_assert(crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 0000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 00000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD1234 ABCD 5678 0000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ABCD 1234 ABCD 5678 0000 ABCD1234 ABCD 5678 00000"));
- test_assert(!crypto_pk_check_fingerprint_syntax(
- "ACD 1234 ABCD 5678 0000 ABCD 1234 ABCD 5678 00000"));
- }
-
done:
tor_free(data1);
tor_free(data2);
@@ -736,11 +782,13 @@ test_crypto_aes_iv(void *arg)
/* Decrypt with the wrong key. */
decrypted_size = crypto_cipher_decrypt_with_iv(key2, decrypted2, 4095,
encrypted1, encrypted_size);
- test_memneq(plain, decrypted2, encrypted_size);
+ test_eq(decrypted_size, 4095);
+ test_memneq(plain, decrypted2, decrypted_size);
/* Alter the initialization vector. */
encrypted1[0] += 42;
decrypted_size = crypto_cipher_decrypt_with_iv(key1, decrypted1, 4095,
encrypted1, encrypted_size);
+ test_eq(decrypted_size, 4095);
test_memneq(plain, decrypted2, 4095);
/* Special length case: 1. */
encrypted_size = crypto_cipher_encrypt_with_iv(key1, encrypted1, 16 + 1,
@@ -827,6 +875,390 @@ test_crypto_base32_decode(void)
;
}
+static void
+test_crypto_kdf_TAP(void *arg)
+{
+ uint8_t key_material[100];
+ int r;
+ char *mem_op_hex_tmp = NULL;
+
+ (void)arg;
+#define EXPAND(s) \
+ r = crypto_expand_key_material_TAP( \
+ (const uint8_t*)(s), strlen(s), \
+ key_material, 100)
+
+ /* Test vectors generated with a little python script; feel free to write
+ * your own. */
+ memset(key_material, 0, sizeof(key_material));
+ EXPAND("");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "5ba93c9db0cff93f52b521d7420e43f6eda2784fbf8b4530d8"
+ "d246dd74ac53a13471bba17941dff7c4ea21bb365bbeeaf5f2"
+ "c654883e56d11e43c44e9842926af7ca0a8cca12604f945414"
+ "f07b01e13da42c6cf1de3abfdea9b95f34687cbbe92b9a7383");
+
+ EXPAND("Tor");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "776c6214fc647aaa5f683c737ee66ec44f03d0372e1cce6922"
+ "7950f236ddf1e329a7ce7c227903303f525a8c6662426e8034"
+ "870642a6dabbd41b5d97ec9bf2312ea729992f48f8ea2d0ba8"
+ "3f45dfda1a80bdc8b80de01b23e3e0ffae099b3e4ccf28dc28");
+
+ EXPAND("AN ALARMING ITEM TO FIND ON A MONTHLY AUTO-DEBIT NOTICE");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "a340b5d126086c3ab29c2af4179196dbf95e1c72431419d331"
+ "4844bf8f6afb6098db952b95581fb6c33625709d6f4400b8e7"
+ "ace18a70579fad83c0982ef73f89395bcc39493ad53a685854"
+ "daf2ba9b78733b805d9a6824c907ee1dba5ac27a1e466d4d10");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+
+#undef EXPAND
+}
+
+static void
+test_crypto_hkdf_sha256(void *arg)
+{
+ uint8_t key_material[100];
+ const uint8_t salt[] = "ntor-curve25519-sha256-1:key_extract";
+ const size_t salt_len = strlen((char*)salt);
+ const uint8_t m_expand[] = "ntor-curve25519-sha256-1:key_expand";
+ const size_t m_expand_len = strlen((char*)m_expand);
+ int r;
+ char *mem_op_hex_tmp = NULL;
+
+ (void)arg;
+
+#define EXPAND(s) \
+ r = crypto_expand_key_material_rfc5869_sha256( \
+ (const uint8_t*)(s), strlen(s), \
+ salt, salt_len, \
+ m_expand, m_expand_len, \
+ key_material, 100)
+
+ /* Test vectors generated with ntor_ref.py */
+ memset(key_material, 0, sizeof(key_material));
+ EXPAND("");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "d3490ed48b12a48f9547861583573fe3f19aafe3f81dc7fc75"
+ "eeed96d741b3290f941576c1f9f0b2d463d1ec7ab2c6bf71cd"
+ "d7f826c6298c00dbfe6711635d7005f0269493edf6046cc7e7"
+ "dcf6abe0d20c77cf363e8ffe358927817a3d3e73712cee28d8");
+
+ EXPAND("Tor");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "5521492a85139a8d9107a2d5c0d9c91610d0f95989975ebee6"
+ "c02a4f8d622a6cfdf9b7c7edd3832e2760ded1eac309b76f8d"
+ "66c4a3c4d6225429b3a016e3c3d45911152fc87bc2de9630c3"
+ "961be9fdb9f93197ea8e5977180801926d3321fa21513e59ac");
+
+ EXPAND("AN ALARMING ITEM TO FIND ON YOUR CREDIT-RATING STATEMENT");
+ tt_int_op(r, ==, 0);
+ test_memeq_hex(key_material,
+ "a2aa9b50da7e481d30463adb8f233ff06e9571a0ca6ab6df0f"
+ "b206fa34e5bc78d063fc291501beec53b36e5a0e434561200c"
+ "5f8bd13e0f88b3459600b4dc21d69363e2895321c06184879d"
+ "94b18f078411be70b767c7fc40679a9440a0c95ea83a23efbf");
+
+ done:
+ tor_free(mem_op_hex_tmp);
+#undef EXPAND
+}
+
+#ifdef CURVE25519_ENABLED
+static void
+test_crypto_curve25519_impl(void *arg)
+{
+ /* adapted from curve25519_donna, which adapted it from test-curve25519
+ version 20050915, by D. J. Bernstein, Public domain. */
+
+ const int randomize_high_bit = (arg != NULL);
+
+#ifdef SLOW_CURVE25519_TEST
+ const int loop_max=10000;
+ const char e1_expected[] = "4faf81190869fd742a33691b0e0824d5"
+ "7e0329f4dd2819f5f32d130f1296b500";
+ const char e2k_expected[] = "05aec13f92286f3a781ccae98995a3b9"
+ "e0544770bc7de853b38f9100489e3e79";
+ const char e1e2k_expected[] = "cd6e8269104eb5aaee886bd2071fba88"
+ "bd13861475516bc2cd2b6e005e805064";
+#else
+ const int loop_max=200;
+ const char e1_expected[] = "bc7112cde03f97ef7008cad1bdc56be3"
+ "c6a1037d74cceb3712e9206871dcf654";
+ const char e2k_expected[] = "dd8fa254fb60bdb5142fe05b1f5de44d"
+ "8e3ee1a63c7d14274ea5d4c67f065467";
+ const char e1e2k_expected[] = "7ddb98bd89025d2347776b33901b3e7e"
+ "c0ee98cb2257a4545c0cfb2ca3e1812b";
+#endif
+
+ unsigned char e1k[32];
+ unsigned char e2k[32];
+ unsigned char e1e2k[32];
+ unsigned char e2e1k[32];
+ unsigned char e1[32] = {3};
+ unsigned char e2[32] = {5};
+ unsigned char k[32] = {9};
+ int loop, i;
+
+ char *mem_op_hex_tmp = NULL;
+
+ for (loop = 0; loop < loop_max; ++loop) {
+ curve25519_impl(e1k,e1,k);
+ curve25519_impl(e2e1k,e2,e1k);
+ curve25519_impl(e2k,e2,k);
+ if (randomize_high_bit) {
+ /* We require that the high bit of the public key be ignored. So if
+ * we're doing this variant test, we randomize the high bit of e2k, and
+ * make sure that the handshake still works out the same as it would
+ * otherwise. */
+ uint8_t byte;
+ crypto_rand((char*)&byte, 1);
+ e2k[31] |= (byte & 0x80);
+ }
+ curve25519_impl(e1e2k,e1,e2k);
+ test_memeq(e1e2k, e2e1k, 32);
+ if (loop == loop_max-1) {
+ break;
+ }
+ for (i = 0;i < 32;++i) e1[i] ^= e2k[i];
+ for (i = 0;i < 32;++i) e2[i] ^= e1k[i];
+ for (i = 0;i < 32;++i) k[i] ^= e1e2k[i];
+ }
+
+ test_memeq_hex(e1, e1_expected);
+ test_memeq_hex(e2k, e2k_expected);
+ test_memeq_hex(e1e2k, e1e2k_expected);
+
+ done:
+ tor_free(mem_op_hex_tmp);
+}
+
+static void
+test_crypto_curve25519_wrappers(void *arg)
+{
+ curve25519_public_key_t pubkey1, pubkey2;
+ curve25519_secret_key_t seckey1, seckey2;
+
+ uint8_t output1[CURVE25519_OUTPUT_LEN];
+ uint8_t output2[CURVE25519_OUTPUT_LEN];
+ (void)arg;
+
+ /* Test a simple handshake, serializing and deserializing some stuff. */
+ curve25519_secret_key_generate(&seckey1, 0);
+ curve25519_secret_key_generate(&seckey2, 1);
+ curve25519_public_key_generate(&pubkey1, &seckey1);
+ curve25519_public_key_generate(&pubkey2, &seckey2);
+ test_assert(curve25519_public_key_is_ok(&pubkey1));
+ test_assert(curve25519_public_key_is_ok(&pubkey2));
+ curve25519_handshake(output1, &seckey1, &pubkey2);
+ curve25519_handshake(output2, &seckey2, &pubkey1);
+ test_memeq(output1, output2, sizeof(output1));
+
+ done:
+ ;
+}
+
+static void
+test_crypto_curve25519_encode(void *arg)
+{
+ curve25519_secret_key_t seckey;
+ curve25519_public_key_t key1, key2, key3;
+ char buf[64];
+
+ (void)arg;
+
+ curve25519_secret_key_generate(&seckey, 0);
+ curve25519_public_key_generate(&key1, &seckey);
+ tt_int_op(0, ==, curve25519_public_to_base64(buf, &key1));
+ tt_int_op(CURVE25519_BASE64_PADDED_LEN, ==, strlen(buf));
+
+ tt_int_op(0, ==, curve25519_public_from_base64(&key2, buf));
+ test_memeq(key1.public_key, key2.public_key, CURVE25519_PUBKEY_LEN);
+
+ buf[CURVE25519_BASE64_PADDED_LEN - 1] = '\0';
+ tt_int_op(CURVE25519_BASE64_PADDED_LEN-1, ==, strlen(buf));
+ tt_int_op(0, ==, curve25519_public_from_base64(&key3, buf));
+ test_memeq(key1.public_key, key3.public_key, CURVE25519_PUBKEY_LEN);
+
+ /* Now try bogus parses. */
+ strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$=", sizeof(buf));
+ tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+
+ strlcpy(buf, "$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$", sizeof(buf));
+ tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+
+ strlcpy(buf, "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", sizeof(buf));
+ tt_int_op(-1, ==, curve25519_public_from_base64(&key3, buf));
+
+ done:
+ ;
+}
+
+static void
+test_crypto_curve25519_persist(void *arg)
+{
+ curve25519_keypair_t keypair, keypair2;
+ char *fname = tor_strdup(get_fname("curve25519_keypair"));
+ char *tag = NULL;
+ char *content = NULL;
+ const char *cp;
+ struct stat st;
+ size_t taglen;
+
+ (void)arg;
+
+ tt_int_op(0,==,curve25519_keypair_generate(&keypair, 0));
+
+ tt_int_op(0,==,curve25519_keypair_write_to_file(&keypair, fname, "testing"));
+ tt_int_op(0,==,curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+ tt_str_op(tag,==,"testing");
+ tor_free(tag);
+
+ test_memeq(keypair.pubkey.public_key,
+ keypair2.pubkey.public_key,
+ CURVE25519_PUBKEY_LEN);
+ test_memeq(keypair.seckey.secret_key,
+ keypair2.seckey.secret_key,
+ CURVE25519_SECKEY_LEN);
+
+ content = read_file_to_str(fname, RFTS_BIN, &st);
+ tt_assert(content);
+ taglen = strlen("== c25519v1: testing ==");
+ tt_u64_op((uint64_t)st.st_size, ==,
+ 32+CURVE25519_PUBKEY_LEN+CURVE25519_SECKEY_LEN);
+ tt_assert(fast_memeq(content, "== c25519v1: testing ==", taglen));
+ tt_assert(tor_mem_is_zero(content+taglen, 32-taglen));
+ cp = content + 32;
+ test_memeq(keypair.seckey.secret_key,
+ cp,
+ CURVE25519_SECKEY_LEN);
+ cp += CURVE25519_SECKEY_LEN;
+ test_memeq(keypair.pubkey.public_key,
+ cp,
+ CURVE25519_SECKEY_LEN);
+
+ tor_free(fname);
+ fname = tor_strdup(get_fname("bogus_keypair"));
+
+ tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+ tor_free(tag);
+
+ content[69] ^= 0xff;
+ tt_int_op(0, ==, write_bytes_to_file(fname, content, (size_t)st.st_size, 1));
+ tt_int_op(-1, ==, curve25519_keypair_read_from_file(&keypair2, &tag, fname));
+
+ done:
+ tor_free(fname);
+ tor_free(content);
+ tor_free(tag);
+}
+
+#endif
+
+static void
+test_crypto_siphash(void *arg)
+{
+ /* From the reference implementation, taking
+ k = 00 01 02 ... 0f
+ and in = 00; 00 01; 00 01 02; ...
+ */
+ const uint8_t VECTORS[64][8] =
+ {
+ { 0x31, 0x0e, 0x0e, 0xdd, 0x47, 0xdb, 0x6f, 0x72, },
+ { 0xfd, 0x67, 0xdc, 0x93, 0xc5, 0x39, 0xf8, 0x74, },
+ { 0x5a, 0x4f, 0xa9, 0xd9, 0x09, 0x80, 0x6c, 0x0d, },
+ { 0x2d, 0x7e, 0xfb, 0xd7, 0x96, 0x66, 0x67, 0x85, },
+ { 0xb7, 0x87, 0x71, 0x27, 0xe0, 0x94, 0x27, 0xcf, },
+ { 0x8d, 0xa6, 0x99, 0xcd, 0x64, 0x55, 0x76, 0x18, },
+ { 0xce, 0xe3, 0xfe, 0x58, 0x6e, 0x46, 0xc9, 0xcb, },
+ { 0x37, 0xd1, 0x01, 0x8b, 0xf5, 0x00, 0x02, 0xab, },
+ { 0x62, 0x24, 0x93, 0x9a, 0x79, 0xf5, 0xf5, 0x93, },
+ { 0xb0, 0xe4, 0xa9, 0x0b, 0xdf, 0x82, 0x00, 0x9e, },
+ { 0xf3, 0xb9, 0xdd, 0x94, 0xc5, 0xbb, 0x5d, 0x7a, },
+ { 0xa7, 0xad, 0x6b, 0x22, 0x46, 0x2f, 0xb3, 0xf4, },
+ { 0xfb, 0xe5, 0x0e, 0x86, 0xbc, 0x8f, 0x1e, 0x75, },
+ { 0x90, 0x3d, 0x84, 0xc0, 0x27, 0x56, 0xea, 0x14, },
+ { 0xee, 0xf2, 0x7a, 0x8e, 0x90, 0xca, 0x23, 0xf7, },
+ { 0xe5, 0x45, 0xbe, 0x49, 0x61, 0xca, 0x29, 0xa1, },
+ { 0xdb, 0x9b, 0xc2, 0x57, 0x7f, 0xcc, 0x2a, 0x3f, },
+ { 0x94, 0x47, 0xbe, 0x2c, 0xf5, 0xe9, 0x9a, 0x69, },
+ { 0x9c, 0xd3, 0x8d, 0x96, 0xf0, 0xb3, 0xc1, 0x4b, },
+ { 0xbd, 0x61, 0x79, 0xa7, 0x1d, 0xc9, 0x6d, 0xbb, },
+ { 0x98, 0xee, 0xa2, 0x1a, 0xf2, 0x5c, 0xd6, 0xbe, },
+ { 0xc7, 0x67, 0x3b, 0x2e, 0xb0, 0xcb, 0xf2, 0xd0, },
+ { 0x88, 0x3e, 0xa3, 0xe3, 0x95, 0x67, 0x53, 0x93, },
+ { 0xc8, 0xce, 0x5c, 0xcd, 0x8c, 0x03, 0x0c, 0xa8, },
+ { 0x94, 0xaf, 0x49, 0xf6, 0xc6, 0x50, 0xad, 0xb8, },
+ { 0xea, 0xb8, 0x85, 0x8a, 0xde, 0x92, 0xe1, 0xbc, },
+ { 0xf3, 0x15, 0xbb, 0x5b, 0xb8, 0x35, 0xd8, 0x17, },
+ { 0xad, 0xcf, 0x6b, 0x07, 0x63, 0x61, 0x2e, 0x2f, },
+ { 0xa5, 0xc9, 0x1d, 0xa7, 0xac, 0xaa, 0x4d, 0xde, },
+ { 0x71, 0x65, 0x95, 0x87, 0x66, 0x50, 0xa2, 0xa6, },
+ { 0x28, 0xef, 0x49, 0x5c, 0x53, 0xa3, 0x87, 0xad, },
+ { 0x42, 0xc3, 0x41, 0xd8, 0xfa, 0x92, 0xd8, 0x32, },
+ { 0xce, 0x7c, 0xf2, 0x72, 0x2f, 0x51, 0x27, 0x71, },
+ { 0xe3, 0x78, 0x59, 0xf9, 0x46, 0x23, 0xf3, 0xa7, },
+ { 0x38, 0x12, 0x05, 0xbb, 0x1a, 0xb0, 0xe0, 0x12, },
+ { 0xae, 0x97, 0xa1, 0x0f, 0xd4, 0x34, 0xe0, 0x15, },
+ { 0xb4, 0xa3, 0x15, 0x08, 0xbe, 0xff, 0x4d, 0x31, },
+ { 0x81, 0x39, 0x62, 0x29, 0xf0, 0x90, 0x79, 0x02, },
+ { 0x4d, 0x0c, 0xf4, 0x9e, 0xe5, 0xd4, 0xdc, 0xca, },
+ { 0x5c, 0x73, 0x33, 0x6a, 0x76, 0xd8, 0xbf, 0x9a, },
+ { 0xd0, 0xa7, 0x04, 0x53, 0x6b, 0xa9, 0x3e, 0x0e, },
+ { 0x92, 0x59, 0x58, 0xfc, 0xd6, 0x42, 0x0c, 0xad, },
+ { 0xa9, 0x15, 0xc2, 0x9b, 0xc8, 0x06, 0x73, 0x18, },
+ { 0x95, 0x2b, 0x79, 0xf3, 0xbc, 0x0a, 0xa6, 0xd4, },
+ { 0xf2, 0x1d, 0xf2, 0xe4, 0x1d, 0x45, 0x35, 0xf9, },
+ { 0x87, 0x57, 0x75, 0x19, 0x04, 0x8f, 0x53, 0xa9, },
+ { 0x10, 0xa5, 0x6c, 0xf5, 0xdf, 0xcd, 0x9a, 0xdb, },
+ { 0xeb, 0x75, 0x09, 0x5c, 0xcd, 0x98, 0x6c, 0xd0, },
+ { 0x51, 0xa9, 0xcb, 0x9e, 0xcb, 0xa3, 0x12, 0xe6, },
+ { 0x96, 0xaf, 0xad, 0xfc, 0x2c, 0xe6, 0x66, 0xc7, },
+ { 0x72, 0xfe, 0x52, 0x97, 0x5a, 0x43, 0x64, 0xee, },
+ { 0x5a, 0x16, 0x45, 0xb2, 0x76, 0xd5, 0x92, 0xa1, },
+ { 0xb2, 0x74, 0xcb, 0x8e, 0xbf, 0x87, 0x87, 0x0a, },
+ { 0x6f, 0x9b, 0xb4, 0x20, 0x3d, 0xe7, 0xb3, 0x81, },
+ { 0xea, 0xec, 0xb2, 0xa3, 0x0b, 0x22, 0xa8, 0x7f, },
+ { 0x99, 0x24, 0xa4, 0x3c, 0xc1, 0x31, 0x57, 0x24, },
+ { 0xbd, 0x83, 0x8d, 0x3a, 0xaf, 0xbf, 0x8d, 0xb7, },
+ { 0x0b, 0x1a, 0x2a, 0x32, 0x65, 0xd5, 0x1a, 0xea, },
+ { 0x13, 0x50, 0x79, 0xa3, 0x23, 0x1c, 0xe6, 0x60, },
+ { 0x93, 0x2b, 0x28, 0x46, 0xe4, 0xd7, 0x06, 0x66, },
+ { 0xe1, 0x91, 0x5f, 0x5c, 0xb1, 0xec, 0xa4, 0x6c, },
+ { 0xf3, 0x25, 0x96, 0x5c, 0xa1, 0x6d, 0x62, 0x9f, },
+ { 0x57, 0x5f, 0xf2, 0x8e, 0x60, 0x38, 0x1b, 0xe5, },
+ { 0x72, 0x45, 0x06, 0xeb, 0x4c, 0x32, 0x8a, 0x95, }
+ };
+
+ const struct sipkey K = { U64_LITERAL(0x0706050403020100),
+ U64_LITERAL(0x0f0e0d0c0b0a0908) };
+ uint8_t input[64];
+ int i, j;
+
+ (void)arg;
+
+ for (i = 0; i < 64; ++i)
+ input[i] = i;
+
+ for (i = 0; i < 64; ++i) {
+ uint64_t r = siphash24(input, i, &K);
+ for (j = 0; j < 8; ++j) {
+ tt_int_op( (r >> (j*8)) & 0xff, ==, VECTORS[i][j]);
+ }
+ }
+
+ done:
+ ;
+}
+
static void *
pass_data_setup_fn(const struct testcase_t *testcase)
{
@@ -853,11 +1285,23 @@ struct testcase_t crypto_tests[] = {
{ "aes_EVP", test_crypto_aes, TT_FORK, &pass_data, (void*)"evp" },
CRYPTO_LEGACY(sha),
CRYPTO_LEGACY(pk),
+ { "pk_fingerprints", test_crypto_pk_fingerprints, TT_FORK, NULL, NULL },
+ CRYPTO_LEGACY(digests),
CRYPTO_LEGACY(dh),
CRYPTO_LEGACY(s2k),
{ "aes_iv_AES", test_crypto_aes_iv, TT_FORK, &pass_data, (void*)"aes" },
{ "aes_iv_EVP", test_crypto_aes_iv, TT_FORK, &pass_data, (void*)"evp" },
CRYPTO_LEGACY(base32_decode),
+ { "kdf_TAP", test_crypto_kdf_TAP, 0, NULL, NULL },
+ { "hkdf_sha256", test_crypto_hkdf_sha256, 0, NULL, NULL },
+#ifdef CURVE25519_ENABLED
+ { "curve25519_impl", test_crypto_curve25519_impl, 0, NULL, NULL },
+ { "curve25519_impl_hibit", test_crypto_curve25519_impl, 0, NULL, (void*)"y"},
+ { "curve25519_wrappers", test_crypto_curve25519_wrappers, 0, NULL, NULL },
+ { "curve25519_encode", test_crypto_curve25519_encode, 0, NULL, NULL },
+ { "curve25519_persist", test_crypto_curve25519_persist, 0, NULL, NULL },
+#endif
+ { "siphash", test_crypto_siphash, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_data.c b/src/test/test_data.c
index de2f9f58e..0c51c98f1 100644
--- a/src/test/test_data.c
+++ b/src/test/test_data.c
@@ -1,10 +1,20 @@
/* Copyright 2001-2004 Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
+/* Our unit test expect that the AUTHORITY_CERT_* public keys will sort
+ * in this order. */
+#define AUTHORITY_CERT_A AUTHORITY_CERT_3
+#define AUTHORITY_CERT_B AUTHORITY_CERT_1
+#define AUTHORITY_CERT_C AUTHORITY_CERT_2
+
+#define AUTHORITY_SIGNKEY_A AUTHORITY_SIGNKEY_3
+#define AUTHORITY_SIGNKEY_B AUTHORITY_SIGNKEY_1
+#define AUTHORITY_SIGNKEY_C AUTHORITY_SIGNKEY_2
+
/** First of 3 example authority certificates for unit testing. */
-const char AUTHORITY_CERT_1[] =
+const char AUTHORITY_CERT_A[] =
"dir-key-certificate-version 3\n"
"fingerprint D867ACF56A9D229B35C25F0090BC9867E906BE69\n"
"dir-key-published 2008-12-12 18:07:24\n"
@@ -46,7 +56,7 @@ const char AUTHORITY_CERT_1[] =
"-----END SIGNATURE-----\n";
/** The private signing key for AUTHORITY_CERT_1 */
-const char AUTHORITY_SIGNKEY_1[] =
+const char AUTHORITY_SIGNKEY_A[] =
"-----BEGIN RSA PRIVATE KEY-----\n"
"MIICWwIBAAKBgQCz0lCJ8rhLujVdzY6M6ZWp4iBAc0FxI79cff/pqp8GQAaWFZrs\n"
"vQPJ8XqMmN7GRbJ2MDVvyGYwIBtt6RJnr7txfi+JsjI42mujkZdzIEWEOIJrhaqX\n"
@@ -63,111 +73,128 @@ const char AUTHORITY_SIGNKEY_1[] =
"Yx4lqK0ca5IkTp3HevwnlWaJgbaOTUspCVshzJBhDA==\n"
"-----END RSA PRIVATE KEY-----\n";
+const char AUTHORITY_SIGNKEY_A_DIGEST[] =
+ "CBF56A83368A5150F1A9AAADAFB4D77F8C4170E2";
+const char AUTHORITY_SIGNKEY_A_DIGEST256[] =
+ "AF7C5468DBE3BA54A052726038D7F15F3C4CA511B1952645B3D96D83A8DFB51C";
+
/** Second of 3 example authority certificates for unit testing. */
-const char AUTHORITY_CERT_2[] =
+const char AUTHORITY_CERT_B[] =
"dir-key-certificate-version 3\n"
-"fingerprint 4D44AE0470B9E88FD4558EFEC82698FB33715400\n"
-"dir-key-published 2007-06-13 16:52:32\n"
-"dir-key-expires 2008-06-13 16:52:32\n"
+"fingerprint AD011E25302925A9D39A80E0E32576442E956467\n"
+"dir-key-published 2013-11-14 14:12:05\n"
+"dir-key-expires 2014-11-14 14:12:05\n"
"dir-identity-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIIBigKCAYEAqukDwQRm1Oy1pPY+7GNRnRNFJzEVPUBfJwC4tBH19tkvdRQPuIGI\n"
-"2jiTy/rmZ6CLcl1G0oulSgxfKEX75QdptOasZu+rKUrRRSxx0QrXhs9a7up0rpXh\n"
-"13fw3mh1Vl/As3rJYF30Hjk01BTOJMxi/HY2y0ALQytFWjiMGY74A9Y6+uDcHkB2\n"
-"KflBjxIl8zpCsXsTTnUhN5kXqaOOnK46XaUShSpXsyOxTMJXuJEtgLz9XCyA8XjW\n"
-"d75QLHucEnlTqxUAdI5YSN2KIlIJiySCVnAorDpJey2mE9VncpHQWMCv/FPFdnSU\n"
-"EMMPUc4bBShcoNFf0mMJeV2sv+dBkgKAL0GLM19PuJIThJhfN/B6+YQTxw4HEpPV\n"
-"plfUqYRN0fYC+5hCTS6rroO/uCfDR7NBtoeDNm9dQrvjfk3b/Mywah1rdWNjnVqs\n"
-"tPJaz3fc/CVBOUUexhmyktgLuwSNEYIQilQ+BydkWN/4RObhV+YSV5BgekEDVaoS\n"
-"RHw4IbYBDHVxAgMBAAE=\n"
+"MIIBigKCAYEAyXYEMlGNRAixXdg65xf2WPkskYj2Wo8ysKMTls1JCXdIOAPvC2k2\n"
+"+AC6i3x9JHzUgCjWr4Jd5PSi7ODGyFC543igYl4wzkxNTU2L+SQ+hMe9qbEuUNhH\n"
+"sRR0xofdoH//3UuKj+HXEiMhhHbRWQGtWFuJqtGBruJqjZqIGOrp5nFjdlP0R98n\n"
+"Rx5wWlPgdJzifkXjKouu4mV+KzLl7f0gAtngA9DkSjt1wzga5IlL/lxDciD0SyJU\n"
+"tKMmls056omrZNbTnBxnY2pOlq9nx/zFrt/KQm1fTAQMjMBCf9KnDIV7NhaaHx7F\n"
+"7Nk8L7Hha353SvR+bsOFpiu05/EMZFTTIhO3MhUxZiCVZ0hKXvW1xe0HoGC5wbB+\n"
+"NyXu8oa4fIKLJ+WJ8Z60BNc0DcxJiQOf1eolGM/qrBul1lFZznds5/7182d+nF2W\n"
+"+bEjSm0fgXIxPfSD/7hB0FvgtmB3TXybHGBfPZgX0sTzFB6LNtP0BHicRoMXKdLF\n"
+"hM3tgIjEAsoZAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
"dir-signing-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIGJAoGBAOu3dgrQth3iqvi/UzfywaANw0bBUuMOBhnMBeiLEcRLneJHUJkVvrpR\n"
-"/EDQkdMov1e7CX6aqBKygVnbDNYjJ+bcQej8MKpuuW+zIknnz5lfnAVZO5uAmo3Y\n"
-"DpG574oQ2FFMdkWHSBloIRxSj/E4Jn1M2qJjElBXP0E33Ka/Noo7AgMBAAE=\n"
+"MIGJAoGBAJ567PZIGG/mYWEY4szYi/C5XXvf0BkquzKTHKrqVjysZEys9giz56Gv\n"
+"B08kIRxsxYKEWkq60rv0xtTc1WyEMcDpV1WLU0KSTQSVXzLu7BT8jbTsWzGsxdTV\n"
+"TdeyOirwHh8Cyyon5lppuMH5twUHrL5O7pWWbxjjrQjAHCn3gd+NAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
+"dir-key-crosscert\n"
+"-----BEGIN ID SIGNATURE-----\n"
+"OC+gaukd4K7xJOsgTPbRhacf5mDUGxsu3ho/J1oJdtni4CK9WscVs6/Goj1o5Lot\n"
+"H1nCAMaR96Jnqq5c63Aaj1sEXdeYHlu5cI7YHgtGI5MmtjiUNXUCWMjCwSQYwGKe\n"
+"2YDYGAKAGt97n7XMKhJWGjAmv1TgmK3DvL1jt/aazL8=\n"
+"-----END ID SIGNATURE-----\n"
"dir-key-certification\n"
"-----BEGIN SIGNATURE-----\n"
-"Fv0Li68QUdAiChY3OklZOakHzwXAUfCzDNxkqe+HLC0n6ZECE9ZCvLVo69XmgVhH\n"
-"L5qYr2rxT6QpF+9yuOHbN9gWn8EsDcli06MlhX9TUt/IYVxHa/9tJwNoTfEw2w2D\n"
-"tyHhWm94IfOK7/Sea6jHnjckl80X+kk0ZNtAGs3/6fP4iltKNGXnvBwfgLpEgW7X\n"
-"NpDl0OLeDuA79zem2GogwQZQdoDbePByU0TJVx9jYi2Bzx2Nb2H0hRTPP6+dY0HQ\n"
-"MHb7yyyTQRad5iAUnExKhhyt22p7X3a6lgkAhq4YrNn/zVPkpnT2dzjsOydTHOW8\n"
-"2BQs33QlGNe095i47pJBDYsUgmJaXfqB/RG6dFg7jwIsc3/7dZcvcqfxY7wKcD/T\n"
-"wtogCIKxDvWbZn7f0hqYkT6uQC8Zom8bcnedmyzufOZCyA2SqQ2wvio6lznR4RIB\n"
-"a8qDHR0tPS9/VkqTPcvUWCZeY3UiDeWPjoK1nea1pz6DHDWglKPx86a0amjjayZQ\n"
-"-----END SIGNATURE-----\n";
+"BddmCKsvS6VoFXIf9Aj9OZnfyVCx527517QtsQHN+NaVm20LzUkJ5MWGXYx4wgh3\n"
+"ExsHvVQguiVfnonkQpEHHKg+TbldlkuDhIdlb9f7dL7V3HLCsEdmS1c3A+TEyrPH\n"
+"i44p6QB5IMFAdgUMV/9ueKMh7pMoam6VNakMOd+Axx9BSJTrCRzcepjtM4Z0cPsj\n"
+"nmDgZi0df1+ca1t+HnuWyt3trxlqoUxRcPZKz28kEFDJsgnRNvoHrIvNTuy9qY4x\n"
+"rONnPuLr5kTO7VQVVZxgxt6WX3p6d8tj+WYHubydr2pG0dwu2vGDTy4qXvDIm/I4\n"
+"Gyo6OAoPbYV8fl0584EgiEbAWcX/Pze8mXr9lmXbf73xbSBHqveAs0UfB+4sBI98\n"
+"v4ax4NZkGs8cCIfugtAOLgZE0WCh/TQYnQ3PFcrUtj0RW+tM1z7S8P3UfEVBHVkJ\n"
+"8SqSB+pbsY6PwMuy6TC3WujW7gmjVanbwkbW19El9l9jRzteFerz7grG/WQkshqF\n"
+ "-----END SIGNATURE-----\n";
/** The private signing key for AUTHORITY_CERT_2 */
-const char AUTHORITY_SIGNKEY_2[] =
+const char AUTHORITY_SIGNKEY_B[] =
"-----BEGIN RSA PRIVATE KEY-----\n"
-"MIICXgIBAAKBgQDrt3YK0LYd4qr4v1M38sGgDcNGwVLjDgYZzAXoixHES53iR1CZ\n"
-"Fb66UfxA0JHTKL9Xuwl+mqgSsoFZ2wzWIyfm3EHo/DCqbrlvsyJJ58+ZX5wFWTub\n"
-"gJqN2A6Rue+KENhRTHZFh0gZaCEcUo/xOCZ9TNqiYxJQVz9BN9ymvzaKOwIDAQAB\n"
-"AoGAJ+I9/ex8tCfTSA2PdisEKiHKBeHWNYb870Z/RW6qje1BhLUOZSixwfL3XLwt\n"
-"wG3nml+SZrKid69uhZaz4FPIf0tqCgURf6dDrF5vuzzr7VLVqkZHYSBp0vE6bu0R\n"
-"Sgc5QNxI2talgc4bsp0O0C+Zd4n3Yto0pXl/I6NHVAxlFBECQQD2mahkY+QEHWPV\n"
-"yRY3w3HhRmWBcrkY2zVyvPpqfn/sdHRPYW/yj4Xr/d1CO9VyFmEs4k324lIvu6LT\n"
-"WDdpPlcJAkEA9LOZv5aNeAm8ckvvXH7iv8KiONiSz0n9wlisxMhNYTEkOCo1g7jG\n"
-"AX5ZknRC9s4sWCPOBpMhloUvemdQ5FCEIwJBAMqCFwoSCf7jD8hRcUBr7QodoF/0\n"
-"kVJ7OeI2lMJ9jZnlbFp/3snn2Qeam2e38SnWfQi582KKKwnt4eIDMMXpntkCQQDI\n"
-"v1Lh11wl3y7nQZ6T7lCNatp08k+2mQgCWYcbRQweMRd6sD4I2xwt+372ZETPfyLo\n"
-"CC+sOyYx+v+RVpMJS3irAkEA6l98nMteZKmhOgyKSjdolP+ahpZunb+WnCdAtP97\n"
-"rjZyXmEZS3oe7TRCDD28GAGMmxSDvNfOOpyn14ishEs5AQ==\n"
+"MIICWwIBAAKBgQCeeuz2SBhv5mFhGOLM2IvwuV1739AZKrsykxyq6lY8rGRMrPYI\n"
+"s+ehrwdPJCEcbMWChFpKutK79MbU3NVshDHA6VdVi1NCkk0ElV8y7uwU/I207Fsx\n"
+"rMXU1U3Xsjoq8B4fAssqJ+ZaabjB+bcFB6y+Tu6Vlm8Y460IwBwp94HfjQIDAQAB\n"
+"AoGAfHQ4ZmfTmPyoeGHcqdVcgBxxh3gJqdnezCavGqGQO3F+CqDBTbBKNLSI3uOW\n"
+"hQX+TTK23Xy9RRFCm6MYj3F4x7OOrSHSFyhMmzRnAZi3zGbtQZn30XoqTwCmVevY\n"
+"p5JbVvhP2BJcvdsyQhiIG23FRQ7MMHWtksAxmovTto1h/hkCQQDNCfMqSztgJZDn\n"
+"JSf5ASHBOw8QzfZBeYi3hqfiDtAN1RxT1uQnEiFQFJqwCz5lCbcwVrfQbrrk5M+h\n"
+"ooYrX7tTAkEAxd6Tl0N0WM3zCKz+3/Hoiyty6olnnpzNoPCg7LLBJcetABQi0KUv\n"
+"swYWlKP3eOFZkiBzTqa9nBK7eYLKV3d9nwJAKNM3WI98Nguky3FJgTnpd6kDuevY\n"
+"gXbqcuhb2xXp9Sceqc7axLDGc0R2/GBwvvttPzG1DcpOai7o7J0Iq/A2wwJAYuKI\n"
+"/99GFdtWyc8q0OAkRui/1VY14p6aZQPcaG4s+KSBYLivbXYgEGfKgR4wXsi/6rcs\n"
+"6PGLcKQr7N3gITYmIQJAaQn6djUWygCn1noKyWU+Sa7G5qqU2GWkLq9dMaRLm1/I\n"
+"nqi+2K1mN15rra0QtFVqSH4JXr8h3KAGyU45voGM7A==\n"
"-----END RSA PRIVATE KEY-----\n";
/** Third of 3 example authority certificates for unit testing. */
-const char AUTHORITY_CERT_3[] =
+const char AUTHORITY_CERT_C[] =
"dir-key-certificate-version 3\n"
-"fingerprint ED3719BF554DE9D7D59F5CA5A4F5AD121D020ED9\n"
-"dir-key-published 2007-06-13 16:52:40\n"
-"dir-key-expires 2008-06-13 16:52:40\n"
+"fingerprint 628C2086EC29C9D26E638C5A8B2065BFBD35829B\n"
+"dir-key-published 2013-11-14 14:12:18\n"
+"dir-key-expires 2014-11-14 14:12:18\n"
"dir-identity-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIIBigKCAYEAtB+yw4BNxtZAG4cPaedkhWNmeij7IuNWmXjh58ZYEGurvGyHs1w4\n"
-"QlwNYI2UftSIeIGdWZ5fJ17h9P3xvO6eeJuOt4KPrNOxUbSGrELEx1Lje1fDAJ1X\n"
-"SvN+dvptusxtyFUr8afgTPrFIvYuazQ6q/Rw+NDagjmDx3h/A/enihpBnjwzeH8j\n"
-"Xzu7b+HKnzFnNfveTDdvSy0NSC6tCOnrfXo31XbXRXtlesnMIpbJClUcAv55eyai\n"
-"/PrVPCCUz8mk0sQnn2Xhv1YJmwOlQTGMfg0a0kWLmh+UWcHsGQ4VWxBZJcuzgFHG\n"
-"hu2/Fz6DXSpX5Q6B9HKoGmnH1oBh24l0kUW1jL8BxPY4YDU1Lt5t3qgcDn9dXYcI\n"
-"o8VvyI0ecSc26Q2PYFWX1hpN4VIBZ8uGaW3IpyTdNiRq0g3iMGRFEXcDlWuyMB9E\n"
-"EbSM7m/79V/z7SjDd75EP8Z0qDPESEVB8a8LbuSJtzFVE0KHd7RzkIEN5sorXspZ\n"
-"/THukftSmkIvAgMBAAE=\n"
+"MIIBigKCAYEAuzPA82lRVUAc1uZgfDehhK0rBU5xt+qhJXUSH0DxsuocYCLW//q+\n"
+"7+L7q9SochqZK3R5+SxJaZRlVK4rAeIHsxXFxsnGvuqasGM3he80EV1RpVRkvLaO\n"
+"2dDmHcfEjYBadft2DEq811yvqSRqbFXmK0hLucA6LI6NnEw9VNWlguaV6ACVLyKQ\n"
+"iYVFz2JOJIAi0Zz57WZg7eHypUAGoyXjtYTJPsh6pUe/0NLFJVd3JHcJX+bNqU2a\n"
+"QU37r+CQ9f3T+8fZGJQ/CXNnYUNHa0j+toOFuPEiZBBh8C4PE7FJWjidvhe9uI7T\n"
+"Py41RZhy8e05MAQmUBNRKBHWPKHoy2zWZZxTkcfWFdJJz/dzsNrIjrqf2fYId9To\n"
+"fDpHzYd/UjzZaaVYRVS/Oyf3pN8DKw8LMhEArS0X9pblPVkWWjmYMU6f0VR7pelc\n"
+"gGYuML3gOiKdNbeMWgAv3HNRsVsuW0HZLrhXUGYzTRPJ/GxVCwA/NmYgMTNVWRwF\n"
+"7M78YHpayyEPAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
"dir-signing-key\n"
"-----BEGIN RSA PUBLIC KEY-----\n"
-"MIGJAoGBANrSZlUq38Boz3iuUOydYTJV57rTbq1bz805FP2QG2Z+2bwpgKIOZag/\n"
-"gN2A1ySJaIYLgZIg9irxrLkqlY/UAjC23y6V9fJXP1S3TXoqLmHleW8PsaDLuwTo\n"
-"hCWaR61Mx9WG7IXcodn2Z7RiCfZpSW4Rztbk5WtjQa5jPXSFOuBJAgMBAAE=\n"
+"MIGJAoGBANESf/hRRWCK3TLQyNb9Y42tYedCORUc8Rl+Q4wrvdz3R0TNr6rztE9N\n"
+"u8v3Wbvjtiqm1xL1I5PaOObFQQj61QZxKiCm1yU4eFH15dNmcvBEy5BjEXVYiDgy\n"
+"zKRyePzjHYQIZF3ZaQTABUplkXVpY0YvAurluhEy+dKEvZMwWFZTAgMBAAE=\n"
"-----END RSA PUBLIC KEY-----\n"
+"dir-key-crosscert\n"
+"-----BEGIN ID SIGNATURE-----\n"
+"NHNBya6Dt7Ww3qSGA0DBEl6pZFBzmYXM+QdqF+ESpdyYCQ54EYimaxl4VcXoGaxy\n"
+"xk8/VOXPC6h7hVnTWDTsC86G6eXug1yzpd/uhQbcDJMH5q8/Yg5WXGOnGhMWNCBh\n"
+"u2UmbtAjdjLrObQaB50FfOpuOV9kdG4SEzaPUBR2ayU=\n"
+"-----END ID SIGNATURE-----\n"
"dir-key-certification\n"
"-----BEGIN SIGNATURE-----\n"
-"UNXZy+4OQ8iat+gw+vg2ynvKj2BYbqZt+EAZAV3rmw6gux44U9TLRECRd6LsA08N\n"
-"4+Vz01TU81xqMgfrUy94ei2YvcfpO8art9/muWHTP9SmOX8S1uqDqLWA+n723C9A\n"
-"HyVXn4aINncO2081gJcIW5+Ul8WTCeZe/n3LVPTCKbTdqxvmrPUdCWlJTQUmb19M\n"
-"T+kcCjaEfgQGLC+Y2MHqYe/nxz+aBKqpjiWUDdjc35va6r/2e3c0jGi1B1xRZxN1\n"
-"xThPZ+CifjDoWBxJdDGlIfZRK1lMnOCJY9w9ibTXQ1UnvE4whFvmB55/t9/XLq4q\n"
-"3pnZz0H7funey3+ilmTxDohoAYT1GX+4a+3xYH07UmAFqlTzqKClj84XEHn+Cer7\n"
-"Nun9kJlJFuBgUpQjwCkzedFZKKLOHgB2h7trJfnqcBpAM8Rup1Bb5u/RcBx9gy1q\n"
-"pMc65FviIrc/Q5TUku6NNbCbnGll1599PvWuUzkG42lJ17V6psKHIsqGtVdHlCUc\n"
+"NocTkLl9iKglVo+yrpY0slsqgPviuScMyEfOJ3i65KeJb4Dr1huIs0Fip40zFD8D\n"
+"cz/SYu09FbANuRwBJIRdVWZLLwVFLBj5F8U65iJRAPBw/O/xgSVBvWoOhBUZqmJA\n"
+"Jp1IUutQHYFfnAOO9za4r8Ox6yPaOWF9Ks5gL0kU/fI8Bdi5E9p3e9fMtoM7hROg\n"
+"oX1AoV/za3LcM0oMsGsdXQ7B8vRqY0eUX523kpRpF1fUDyvBUvvMsXdZDN6anCV6\n"
+"NtSq2UaM/msTX1oQ8gzyD1gMXH0Ek26YMhd+6WZE6KUeb1x5HJgXtKtYzMLB6nQM\n"
+"4Q/OA4NND/Veflofy6xx8uzXe8H+MoUHK9WiORtwqvBl0E9qk6SVCuo4ipR4Ybgk\n"
+"PAFOXA58j80dlNYYEVgV8MXF1Y/g/thuXlf2dWiLAExdHTtE0AzC4quWshegaImC\n"
+"4aziHeA43TRDszAXcJorREAM0AhSxp3aWDde4Jt46ODOJR8t+gHreks29eDttEIn\n"
"-----END SIGNATURE-----\n";
/** The private signing key for AUTHORITY_CERT_3 */
-const char AUTHORITY_SIGNKEY_3[] =
+const char AUTHORITY_SIGNKEY_C[] =
"-----BEGIN RSA PRIVATE KEY-----\n"
-"MIICXgIBAAKBgQDa0mZVKt/AaM94rlDsnWEyVee6026tW8/NORT9kBtmftm8KYCi\n"
-"DmWoP4DdgNckiWiGC4GSIPYq8ay5KpWP1AIwtt8ulfXyVz9Ut016Ki5h5XlvD7Gg\n"
-"y7sE6IQlmketTMfVhuyF3KHZ9me0Ygn2aUluEc7W5OVrY0GuYz10hTrgSQIDAQAB\n"
-"AoGBAIyoeG1AnQmildKeQpiGZackf0uhg2BeRwpFKg//5Q0Sd0Wza+M/2+q1v1Ei\n"
-"86ihxxV7KfPTykk6hmuUSwVkI28Z+5J9NYTr35EzPiUlqpo0iclTkFqrlbqSPULx\n"
-"9fQhvcOGv1c0m5CnYrHsM8eu3tagLg+6OE4abLOYX4Az5pkxAkEA/NwHhVaVJrXH\n"
-"lGDrRAfGtaD5Tzeeg1H9DNZi5lmFiSNR0O11sgDLkiZNP5oM8knyqo8Gq08hwxEb\n"
-"yqMXM3XtJQJBAN2KJbFhOjDIkvJyYvbmcP6P7vV2c9j+oUTKkFMF7vvfWunxMi9j\n"
-"ghbdUKgl7tU0VFpw7ufDDD0pkN6sua3gp1UCQQCvNzTK861U7p/GtMYyFQVf9JTt\n"
-"jMf9jYHBNInBvwTme6AFG5bz6tMlif77dJ9GAXHzODrR2Hq3thJA/3RjR3M1AkBg\n"
-"+6M4ncmtpYC+5lhwob0Bk90WU/6vFflfdhXsYoKWfNb95vsDR9qhS82Nbt25NClh\n"
-"VmMfzoFDHTkwYgj/F4PpAkEA+RaaSRP7BmbvFNqvlm8J/m0RVdAH4+p/Q5Z5u6Yo\n"
-"N7xC/gFi0qFPGKsDvD2CncAYmt+KNsd8S0JGDN4eieKn+Q==\n"
+"MIICXAIBAAKBgQDREn/4UUVgit0y0MjW/WONrWHnQjkVHPEZfkOMK73c90dEza+q\n"
+"87RPTbvL91m747YqptcS9SOT2jjmxUEI+tUGcSogptclOHhR9eXTZnLwRMuQYxF1\n"
+"WIg4Msykcnj84x2ECGRd2WkEwAVKZZF1aWNGLwLq5boRMvnShL2TMFhWUwIDAQAB\n"
+"AoGAU68L+eDN3C65CzX2rdcOmg7kOSSQpJrJBmM7tkdr3546sJeD0PFrIrMCkEmZ\n"
+"aVNj/v545+WnL+8RB4280lNUIF4AMNaMZUL+4FAtwekqWua3QvvqgRMjCdG3/h/d\n"
+"bOAUiiKKEimflTaIVHNVSCvOIntftOu3PhebctuabnZzg0ECQQD9i+FX7M9UXT1A\n"
+"bVm+bRIJuQtG+u9jD3VxrvHsmh0QnOAL3oa/ofTCwoTJLZs8Qy0GeAoJNf28rY1q\n"
+"AgNMEeEXAkEA0xhxNX2fDQ2yvKwPkPMrRycJVWry+KHvSZG2+XYh+V5sVGQ5H7Gu\n"
+"krc6IzRZlIKQhEGktkw8ih0DEHQbAihiJQJBAKi/SnFcePjrPXL91Hb63MB/2dOZ\n"
+"+21wwnexOe6A+8ssvajop8IvJlnhYMMMiX7oLrVZe0R6HLBQyge94zfjxm0CQGye\n"
+"dRIrE34qAEBo4JGbLjesdHcJUwBwgqn+WoI+MPkZhvBdqa8PRF6l/TpEI5vxGt+S\n"
+"z2gmDjia+QqsU4FmuikCQDDOs85uwNSKJFax9XMzd1qd1QwX20F8lvnOsWErXiDw\n"
+"Fy2+rmIRHoSxn4D+rE5ivqkO99E9jAlz+uuQz/6WqwE=\n"
"-----END RSA PRIVATE KEY-----\n";
diff --git a/src/test/test_dir.c b/src/test/test_dir.c
index 83c612045..c03b63be2 100644
--- a/src/test/test_dir.c
+++ b/src/test/test_dir.c
@@ -1,14 +1,19 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
+#include <math.h>
+
#define DIRSERV_PRIVATE
#define DIRVOTE_PRIVATE
#define ROUTER_PRIVATE
+#define ROUTERLIST_PRIVATE
#define HIBERNATE_PRIVATE
+#define NETWORKSTATUS_PRIVATE
#include "or.h"
+#include "config.h"
#include "directory.h"
#include "dirserv.h"
#include "dirvote.h"
@@ -70,28 +75,29 @@ test_dir_nicknames(void)
static void
test_dir_formats(void)
{
- char buf[8192], buf2[8192];
+ char *buf = NULL;
+ char buf2[8192];
char platform[256];
char fingerprint[FINGERPRINT_LEN+1];
- char *pk1_str = NULL, *pk2_str = NULL, *pk3_str = NULL, *cp;
- size_t pk1_str_len, pk2_str_len, pk3_str_len;
+ char *pk1_str = NULL, *pk2_str = NULL, *cp;
+ size_t pk1_str_len, pk2_str_len;
routerinfo_t *r1=NULL, *r2=NULL;
- crypto_pk_t *pk1 = NULL, *pk2 = NULL, *pk3 = NULL;
- routerinfo_t *rp1 = NULL;
+ crypto_pk_t *pk1 = NULL, *pk2 = NULL;
+ routerinfo_t *rp1 = NULL, *rp2 = NULL;
addr_policy_t *ex1, *ex2;
routerlist_t *dir1 = NULL, *dir2 = NULL;
+ or_options_t *options = get_options_mutable();
+ const addr_policy_t *p;
pk1 = pk_generate(0);
pk2 = pk_generate(1);
- pk3 = pk_generate(2);
- test_assert(pk1 && pk2 && pk3);
+ test_assert(pk1 && pk2);
hibernate_set_state_for_testing_(HIBERNATE_STATE_LIVE);
get_platform_str(platform, sizeof(platform));
r1 = tor_malloc_zero(sizeof(routerinfo_t));
- r1->address = tor_strdup("18.244.0.1");
r1->addr = 0xc0a80001u; /* 192.168.0.1 */
r1->cache_info.published_on = 0;
r1->or_port = 9000;
@@ -118,38 +124,42 @@ test_dir_formats(void)
ex2->maskbits = 8;
ex2->prt_min = ex2->prt_max = 24;
r2 = tor_malloc_zero(sizeof(routerinfo_t));
- r2->address = tor_strdup("1.1.1.1");
r2->addr = 0x0a030201u; /* 10.3.2.1 */
r2->platform = tor_strdup(platform);
r2->cache_info.published_on = 5;
r2->or_port = 9005;
r2->dir_port = 0;
r2->onion_pkey = crypto_pk_dup_key(pk2);
+ r2->onion_curve25519_pkey = tor_malloc_zero(sizeof(curve25519_public_key_t));
+ curve25519_public_from_base64(r2->onion_curve25519_pkey,
+ "skyinAnvardNostarsNomoonNowindormistsorsnow");
r2->identity_pkey = crypto_pk_dup_key(pk1);
r2->bandwidthrate = r2->bandwidthburst = r2->bandwidthcapacity = 3000;
r2->exit_policy = smartlist_new();
- smartlist_add(r2->exit_policy, ex2);
smartlist_add(r2->exit_policy, ex1);
+ smartlist_add(r2->exit_policy, ex2);
r2->nickname = tor_strdup("Fred");
test_assert(!crypto_pk_write_public_key_to_string(pk1, &pk1_str,
&pk1_str_len));
test_assert(!crypto_pk_write_public_key_to_string(pk2 , &pk2_str,
&pk2_str_len));
- test_assert(!crypto_pk_write_public_key_to_string(pk3 , &pk3_str,
- &pk3_str_len));
- memset(buf, 0, 2048);
- test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
+ /* XXXX025 router_dump_to_string should really take this from ri.*/
+ options->ContactInfo = tor_strdup("Magri White "
+ "<magri@elsewhere.example.com>");
+ buf = router_dump_router_to_string(r1, pk2);
+ tor_free(options->ContactInfo);
+ test_assert(buf);
- strlcpy(buf2, "router Magri 18.244.0.1 9000 0 9003\n"
+ strlcpy(buf2, "router Magri 192.168.0.1 9000 0 9003\n"
"or-address [1:2:3:4::]:9999\n"
"platform Tor "VERSION" on ", sizeof(buf2));
strlcat(buf2, get_uname(), sizeof(buf2));
strlcat(buf2, "\n"
- "opt protocols Link 1 2 Circuit 1\n"
+ "protocols Link 1 2 Circuit 1\n"
"published 1970-01-01 00:00:00\n"
- "opt fingerprint ", sizeof(buf2));
+ "fingerprint ", sizeof(buf2));
test_assert(!crypto_pk_get_fingerprint(pk2, fingerprint, 1));
strlcat(buf2, fingerprint, sizeof(buf2));
strlcat(buf2, "\nuptime 0\n"
@@ -161,18 +171,22 @@ test_dir_formats(void)
strlcat(buf2, pk1_str, sizeof(buf2));
strlcat(buf2, "signing-key\n", sizeof(buf2));
strlcat(buf2, pk2_str, sizeof(buf2));
- strlcat(buf2, "opt hidden-service-dir\n", sizeof(buf2));
+ strlcat(buf2, "hidden-service-dir\n", sizeof(buf2));
+ strlcat(buf2, "contact Magri White <magri@elsewhere.example.com>\n",
+ sizeof(buf2));
strlcat(buf2, "reject *:*\nrouter-signature\n", sizeof(buf2));
buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same
* twice */
test_streq(buf, buf2);
+ tor_free(buf);
- test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
+ buf = router_dump_router_to_string(r1, pk2);
+ test_assert(buf);
cp = buf;
rp1 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
test_assert(rp1);
- test_streq(rp1->address, r1->address);
+ test_eq(rp1->addr, r1->addr);
test_eq(rp1->or_port, r1->or_port);
//test_eq(rp1->dir_port, r1->dir_port);
test_eq(rp1->bandwidthrate, r1->bandwidthrate);
@@ -181,36 +195,73 @@ test_dir_formats(void)
test_assert(crypto_pk_cmp_keys(rp1->onion_pkey, pk1) == 0);
test_assert(crypto_pk_cmp_keys(rp1->identity_pkey, pk2) == 0);
//test_assert(rp1->exit_policy == NULL);
+ tor_free(buf);
-#if 0
- /* XXX Once we have exit policies, test this again. XXX */
- strlcpy(buf2, "router tor.tor.tor 9005 0 0 3000\n", sizeof(buf2));
+ strlcpy(buf2,
+ "router Fred 10.3.2.1 9005 0 0\n"
+ "platform Tor "VERSION" on ", sizeof(buf2));
+ strlcat(buf2, get_uname(), sizeof(buf2));
+ strlcat(buf2, "\n"
+ "protocols Link 1 2 Circuit 1\n"
+ "published 1970-01-01 00:00:05\n"
+ "fingerprint ", sizeof(buf2));
+ test_assert(!crypto_pk_get_fingerprint(pk1, fingerprint, 1));
+ strlcat(buf2, fingerprint, sizeof(buf2));
+ strlcat(buf2, "\nuptime 0\n"
+ "bandwidth 3000 3000 3000\n", sizeof(buf2));
+ strlcat(buf2, "onion-key\n", sizeof(buf2));
strlcat(buf2, pk2_str, sizeof(buf2));
strlcat(buf2, "signing-key\n", sizeof(buf2));
strlcat(buf2, pk1_str, sizeof(buf2));
- strlcat(buf2, "accept *:80\nreject 18.*:24\n\n", sizeof(buf2));
- test_assert(router_dump_router_to_string(buf, 2048, &r2, pk2)>0);
+ strlcat(buf2, "hidden-service-dir\n", sizeof(buf2));
+#ifdef CURVE25519_ENABLED
+ strlcat(buf2, "ntor-onion-key "
+ "skyinAnvardNostarsNomoonNowindormistsorsnow=\n", sizeof(buf2));
+#endif
+ strlcat(buf2, "accept *:80\nreject 18.0.0.0/8:24\n", sizeof(buf2));
+ strlcat(buf2, "router-signature\n", sizeof(buf2));
+
+ buf = router_dump_router_to_string(r2, pk1);
+ buf[strlen(buf2)] = '\0'; /* Don't compare the sig; it's never the same
+ * twice */
test_streq(buf, buf2);
+ tor_free(buf);
+ buf = router_dump_router_to_string(r2, pk1);
cp = buf;
- rp2 = router_parse_entry_from_string(&cp,1);
+ rp2 = router_parse_entry_from_string((const char*)cp,NULL,1,0,NULL);
test_assert(rp2);
- test_streq(rp2->address, r2.address);
- test_eq(rp2->or_port, r2.or_port);
- test_eq(rp2->dir_port, r2.dir_port);
- test_eq(rp2->bandwidth, r2.bandwidth);
+ test_eq(rp2->addr, r2->addr);
+ test_eq(rp2->or_port, r2->or_port);
+ test_eq(rp2->dir_port, r2->dir_port);
+ test_eq(rp2->bandwidthrate, r2->bandwidthrate);
+ test_eq(rp2->bandwidthburst, r2->bandwidthburst);
+ test_eq(rp2->bandwidthcapacity, r2->bandwidthcapacity);
+#ifdef CURVE25519_ENABLED
+ test_memeq(rp2->onion_curve25519_pkey->public_key,
+ r2->onion_curve25519_pkey->public_key,
+ CURVE25519_PUBKEY_LEN);
+#endif
test_assert(crypto_pk_cmp_keys(rp2->onion_pkey, pk2) == 0);
test_assert(crypto_pk_cmp_keys(rp2->identity_pkey, pk1) == 0);
- test_eq(rp2->exit_policy->policy_type, EXIT_POLICY_ACCEPT);
- test_streq(rp2->exit_policy->string, "accept *:80");
- test_streq(rp2->exit_policy->address, "*");
- test_streq(rp2->exit_policy->port, "80");
- test_eq(rp2->exit_policy->next->policy_type, EXIT_POLICY_REJECT);
- test_streq(rp2->exit_policy->next->string, "reject 18.*:24");
- test_streq(rp2->exit_policy->next->address, "18.*");
- test_streq(rp2->exit_policy->next->port, "24");
- test_assert(rp2->exit_policy->next->next == NULL);
+ test_eq(smartlist_len(rp2->exit_policy), 2);
+
+ p = smartlist_get(rp2->exit_policy, 0);
+ test_eq(p->policy_type, ADDR_POLICY_ACCEPT);
+ test_assert(tor_addr_is_null(&p->addr));
+ test_eq(p->maskbits, 0);
+ test_eq(p->prt_min, 80);
+ test_eq(p->prt_max, 80);
+
+ p = smartlist_get(rp2->exit_policy, 1);
+ test_eq(p->policy_type, ADDR_POLICY_REJECT);
+ test_assert(tor_addr_eq(&p->addr, &ex2->addr));
+ test_eq(p->maskbits, 8);
+ test_eq(p->prt_min, 24);
+ test_eq(p->prt_max, 24);
+
+#if 0
/* Okay, now for the directories. */
{
fingerprint_list = smartlist_new();
@@ -220,24 +271,6 @@ test_dir_formats(void)
add_fingerprint_to_dir("Fred", buf, fingerprint_list);
}
- {
- char d[DIGEST_LEN];
- const char *m;
- /* XXXX NM re-enable. */
- /* Make sure routers aren't too far in the past any more. */
- r1->cache_info.published_on = time(NULL);
- r2->cache_info.published_on = time(NULL)-3*60*60;
- test_assert(router_dump_router_to_string(buf, 2048, r1, pk2)>0);
- test_eq(dirserv_add_descriptor(buf,&m,""), ROUTER_ADDED_NOTIFY_GENERATOR);
- test_assert(router_dump_router_to_string(buf, 2048, r2, pk1)>0);
- test_eq(dirserv_add_descriptor(buf,&m,""), ROUTER_ADDED_NOTIFY_GENERATOR);
- get_options()->Nickname = tor_strdup("DirServer");
- test_assert(!dirserv_dump_directory_to_string(&cp,pk3, 0));
- crypto_pk_get_digest(pk3, d);
- test_assert(!router_parse_directory(cp));
- test_eq(2, smartlist_len(dir1->routers));
- tor_free(cp);
- }
#endif
dirserv_free_fingerprint_list();
@@ -246,13 +279,14 @@ test_dir_formats(void)
routerinfo_free(r1);
if (r2)
routerinfo_free(r2);
+ if (rp2)
+ routerinfo_free(rp2);
+ tor_free(buf);
tor_free(pk1_str);
tor_free(pk2_str);
- tor_free(pk3_str);
if (pk1) crypto_pk_free(pk1);
if (pk2) crypto_pk_free(pk2);
- if (pk3) crypto_pk_free(pk3);
if (rp1) routerinfo_free(rp1);
tor_free(dir1); /* XXXX And more !*/
tor_free(dir2); /* And more !*/
@@ -422,10 +456,8 @@ test_dir_split_fps(void *testdata)
"0123456789ABCdef0123456789ABCdef0123456789ABCdef0123456789ABCdef"
#define B64_1 "/g2v+JEnOJvGdVhpEjEjRVEZPu4"
#define B64_2 "3q2+75mZmZERERmZmRERERHwC6Q"
-#define B64_3 "sz/wDbM/8A2zP/ANsz/wDbM/8A0"
#define B64_256_1 "8/Pz8/u7vz8/Pz+7vz8/Pz+7u/Pz8/P7u/Pz8/P7u78"
#define B64_256_2 "zMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMw"
-#define B64_256_3 "ASNFZ4mrze8BI0VniavN7wEjRWeJq83vASNFZ4mrze8"
/* no flags set */
dir_split_resource_into_fingerprints("A+C+B", sl, NULL, 0);
@@ -525,7 +557,7 @@ test_dir_split_fps(void *testdata)
}
static void
-test_dir_measured_bw(void)
+test_dir_measured_bw_kb(void)
{
measured_bw_line_t mbwl;
int i;
@@ -581,7 +613,7 @@ test_dir_measured_bw(void)
for (i = 0; strcmp(lines_pass[i], "end"); i++) {
//fprintf(stderr, "Testing: %s %d\n", lines_pass[i], TOR_ISSPACE('\n'));
test_assert(measured_bw_line_parse(&mbwl, lines_pass[i]) == 0);
- test_assert(mbwl.bw == 1024);
+ test_assert(mbwl.bw_kb == 1024);
test_assert(strcmp(mbwl.node_hex,
"557365204145532d32353620696e73746561642e") == 0);
}
@@ -590,6 +622,83 @@ test_dir_measured_bw(void)
return;
}
+#define MBWC_INIT_TIME 1000
+
+/** Do the measured bandwidth cache unit test */
+static void
+test_dir_measured_bw_kb_cache(void)
+{
+ /* Initial fake time_t for testing */
+ time_t curr = MBWC_INIT_TIME;
+ /* Some measured_bw_line_ts */
+ measured_bw_line_t mbwl[3];
+ /* For receiving output on cache queries */
+ long bw;
+ time_t as_of;
+
+ /* First, clear the cache and assert that it's empty */
+ dirserv_clear_measured_bw_cache();
+ test_eq(dirserv_get_measured_bw_cache_size(), 0);
+ /*
+ * Set up test mbwls; none of the dirserv_cache_*() functions care about
+ * the node_hex field.
+ */
+ memset(mbwl[0].node_id, 0x01, DIGEST_LEN);
+ mbwl[0].bw_kb = 20;
+ memset(mbwl[1].node_id, 0x02, DIGEST_LEN);
+ mbwl[1].bw_kb = 40;
+ memset(mbwl[2].node_id, 0x03, DIGEST_LEN);
+ mbwl[2].bw_kb = 80;
+ /* Try caching something */
+ dirserv_cache_measured_bw(&(mbwl[0]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 1);
+ /* Okay, let's see if we can retrieve it */
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, &as_of));
+ test_eq(bw, 20);
+ test_eq(as_of, MBWC_INIT_TIME);
+ /* Try retrieving it without some outputs */
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL, NULL));
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,&bw, NULL));
+ test_eq(bw, 20);
+ test_assert(dirserv_query_measured_bw_cache_kb(mbwl[0].node_id,NULL,&as_of));
+ test_eq(as_of, MBWC_INIT_TIME);
+ /* Now expire it */
+ curr += MAX_MEASUREMENT_AGE + 1;
+ dirserv_expire_measured_bw_cache(curr);
+ /* Check that the cache is empty */
+ test_eq(dirserv_get_measured_bw_cache_size(), 0);
+ /* Check that we can't retrieve it */
+ test_assert(!dirserv_query_measured_bw_cache_kb(mbwl[0].node_id, NULL,NULL));
+ /* Try caching a few things now */
+ dirserv_cache_measured_bw(&(mbwl[0]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 1);
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_cache_measured_bw(&(mbwl[1]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 2);
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_cache_measured_bw(&(mbwl[2]), curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 3);
+ curr += MAX_MEASUREMENT_AGE / 4 + 1;
+ /* Do an expire that's too soon to get any of them */
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 3);
+ /* Push the oldest one off the cliff */
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 2);
+ /* And another... */
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 1);
+ /* This should empty it out again */
+ curr += MAX_MEASUREMENT_AGE / 4;
+ dirserv_expire_measured_bw_cache(curr);
+ test_eq(dirserv_get_measured_bw_cache_size(), 0);
+
+ done:
+ return;
+}
+
static void
test_dir_param_voting(void)
{
@@ -761,6 +870,17 @@ generate_ri_from_rs(const vote_routerstatus_t *vrs)
strlen(r->cache_info.signed_descriptor_body);
r->exit_policy = smartlist_new();
r->cache_info.published_on = ++published + time(NULL);
+ if (rs->has_bandwidth) {
+ /*
+ * Multiply by 1000 because the routerinfo_t and the routerstatus_t
+ * seem to use different units (*sigh*) and because we seem stuck on
+ * icky and perverse decimal kilobytes (*double sigh*) - see
+ * router_get_advertised_bandwidth_capped() of routerlist.c and
+ * routerstatus_format_entry() of dirserv.c.
+ */
+ r->bandwidthrate = rs->bandwidth_kb * 1000;
+ r->bandwidthcapacity = rs->bandwidth_kb * 1000;
+ }
return r;
}
@@ -781,15 +901,326 @@ get_detached_sigs(networkstatus_t *ns, networkstatus_t *ns2)
return r;
}
-/** Run unit tests for generating and parsing V3 consensus networkstatus
- * documents. */
+/**
+ * Generate a routerstatus for v3_networkstatus test
+ */
+static vote_routerstatus_t *
+gen_routerstatus_for_v3ns(int idx, time_t now)
+{
+ vote_routerstatus_t *vrs=NULL;
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+
+ switch (idx) {
+ case 0:
+ /* Generate the first routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.2.14");
+ rs->published_on = now-1500;
+ strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
+ memset(rs->identity_digest, 3, DIGEST_LEN);
+ memset(rs->descriptor_digest, 78, DIGEST_LEN);
+ rs->addr = 0x99008801;
+ rs->or_port = 443;
+ rs->dir_port = 8000;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ break;
+ case 1:
+ /* Generate the second routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.2.0.5");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router1", sizeof(rs->nickname));
+ memset(rs->identity_digest, 5, DIGEST_LEN);
+ memset(rs->descriptor_digest, 77, DIGEST_LEN);
+ rs->addr = 0x99009901;
+ rs->or_port = 443;
+ rs->dir_port = 0;
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ tor_addr_copy(&rs->ipv6_addr, &addr_ipv6);
+ rs->ipv6_orport = 4711;
+ rs->is_exit = rs->is_stable = rs->is_fast = rs->is_flagged_running =
+ rs->is_valid = rs->is_possible_guard = 1;
+ break;
+ case 2:
+ /* Generate the third routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.0.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router3", sizeof(rs->nickname));
+ memset(rs->identity_digest, 33, DIGEST_LEN);
+ memset(rs->descriptor_digest, 79, DIGEST_LEN);
+ rs->addr = 0xAA009901;
+ rs->or_port = 400;
+ rs->dir_port = 9999;
+ rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
+ rs->is_flagged_running = rs->is_valid =
+ rs->is_possible_guard = 1;
+ break;
+ case 3:
+ /* Generate a fourth routerstatus that is not running. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.6.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router4", sizeof(rs->nickname));
+ memset(rs->identity_digest, 34, DIGEST_LEN);
+ memset(rs->descriptor_digest, 47, DIGEST_LEN);
+ rs->addr = 0xC0000203;
+ rs->or_port = 500;
+ rs->dir_port = 1999;
+ /* Running flag (and others) cleared */
+ break;
+ case 4:
+ /* No more for this test; return NULL */
+ vrs = NULL;
+ break;
+ default:
+ /* Shouldn't happen */
+ test_assert(0);
+ }
+ if (vrs) {
+ vrs->microdesc = tor_malloc_zero(sizeof(vote_microdesc_hash_t));
+ tor_asprintf(&vrs->microdesc->microdesc_hash_line,
+ "m 9,10,11,12,13,14,15,16,17 "
+ "sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa%d\n",
+ idx);
+ }
+
+ done:
+ return vrs;
+}
+
+/** Apply tweaks to the vote list for each voter */
+static int
+vote_tweaks_for_v3ns(networkstatus_t *v, int voter, time_t now)
+{
+ vote_routerstatus_t *vrs;
+ const char *msg = NULL;
+
+ test_assert(v);
+ (void)now;
+
+ if (voter == 1) {
+ measured_bw_line_t mbw;
+ memset(mbw.node_id, 33, sizeof(mbw.node_id));
+ mbw.bw_kb = 1024;
+ test_assert(measured_bw_line_apply(&mbw,
+ v->routerstatus_list) == 1);
+ } else if (voter == 2 || voter == 3) {
+ /* Monkey around with the list a bit */
+ vrs = smartlist_get(v->routerstatus_list, 2);
+ smartlist_del_keeporder(v->routerstatus_list, 2);
+ vote_routerstatus_free(vrs);
+ vrs = smartlist_get(v->routerstatus_list, 0);
+ vrs->status.is_fast = 1;
+
+ if (voter == 3) {
+ vrs = smartlist_get(v->routerstatus_list, 0);
+ smartlist_del_keeporder(v->routerstatus_list, 0);
+ vote_routerstatus_free(vrs);
+ vrs = smartlist_get(v->routerstatus_list, 0);
+ memset(vrs->status.descriptor_digest, (int)'Z', DIGEST_LEN);
+ test_assert(router_add_to_routerlist(
+ generate_ri_from_rs(vrs), &msg,0,0) >= 0);
+ }
+ }
+
+ done:
+ return 0;
+}
+
+/**
+ * Test a parsed vote_routerstatus_t for v3_networkstatus test
+ */
static void
-test_dir_v3_networkstatus(void)
+test_vrs_for_v3ns(vote_routerstatus_t *vrs, int voter, time_t now)
+{
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+
+ test_assert(vrs);
+ rs = &(vrs->status);
+ test_assert(rs);
+
+ /* Split out by digests to test */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3",
+ DIGEST_LEN) &&
+ (voter == 1)) {
+ /* Check the first routerstatus. */
+ test_streq(vrs->version, "0.1.2.14");
+ test_eq(rs->published_on, now-1500);
+ test_streq(rs->nickname, "router2");
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_eq(rs->addr, 0x99008801);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 8000);
+ /* no flags except "running" (16) and "v2dir" (64) */
+ tt_u64_op(vrs->flags, ==, U64_LITERAL(80));
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5",
+ DIGEST_LEN) &&
+ (voter == 1 || voter == 2)) {
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5",
+ DIGEST_LEN);
+
+ if (voter == 1) {
+ /* Check the second routerstatus. */
+ test_streq(vrs->version, "0.2.0.5");
+ test_eq(rs->published_on, now-1000);
+ test_streq(rs->nickname, "router1");
+ }
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ if (voter == 1) {
+ /* all except "authority" (1) and "v2dir" (64) */
+ tt_u64_op(vrs->flags, ==, U64_LITERAL(190));
+ } else {
+ /* 1023 - authority(1) - madeofcheese(16) - madeoftin(32) - v2dir(256) */
+ tt_u64_op(vrs->flags, ==, U64_LITERAL(718));
+ }
+ } else if (tor_memeq(rs->identity_digest,
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33",
+ DIGEST_LEN) &&
+ (voter == 1 || voter == 2)) {
+ /* Check the measured bandwidth bits */
+ test_assert(vrs->has_measured_bw &&
+ vrs->measured_bw_kb == 1024);
+ } else {
+ /*
+ * Didn't expect this, but the old unit test only checked some of them,
+ * so don't assert.
+ */
+ /* test_assert(0); */
+ }
+
+ done:
+ return;
+}
+
+/**
+ * Test a consensus for v3_networkstatus_test
+ */
+static void
+test_consensus_for_v3ns(networkstatus_t *con, time_t now)
+{
+ (void)now;
+
+ test_assert(con);
+ test_assert(!con->cert);
+ test_eq(2, smartlist_len(con->routerstatus_list));
+ /* There should be two listed routers: one with identity 3, one with
+ * identity 5. */
+
+ done:
+ return;
+}
+
+/**
+ * Test a router list entry for v3_networkstatus test
+ */
+static void
+test_routerstatus_for_v3ns(routerstatus_t *rs, time_t now)
+{
+ tor_addr_t addr_ipv6;
+
+ test_assert(rs);
+
+ /* There should be two listed routers: one with identity 3, one with
+ * identity 5. */
+ /* This one showed up in 2 digests. */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3",
+ DIGEST_LEN)) {
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_assert(!rs->is_authority);
+ test_assert(!rs->is_exit);
+ test_assert(!rs->is_fast);
+ test_assert(!rs->is_possible_guard);
+ test_assert(!rs->is_stable);
+ /* (If it wasn't running it wouldn't be here) */
+ test_assert(rs->is_flagged_running);
+ test_assert(!rs->is_valid);
+ test_assert(!rs->is_named);
+ /* XXXX check version */
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5",
+ DIGEST_LEN)) {
+ /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN);
+ test_streq(rs->nickname, "router1");
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->published_on, now-1000);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ test_assert(!rs->is_authority);
+ test_assert(rs->is_exit);
+ test_assert(rs->is_fast);
+ test_assert(rs->is_possible_guard);
+ test_assert(rs->is_stable);
+ test_assert(rs->is_flagged_running);
+ test_assert(rs->is_valid);
+ test_assert(!rs->is_named);
+ /* XXXX check version */
+ } else {
+ /* Weren't expecting this... */
+ test_assert(0);
+ }
+
+ done:
+ return;
+}
+
+/** Run a unit tests for generating and parsing networkstatuses, with
+ * the supply test fns. */
+static void
+test_a_networkstatus(
+ vote_routerstatus_t * (*vrs_gen)(int idx, time_t now),
+ int (*vote_tweaks)(networkstatus_t *v, int voter, time_t now),
+ void (*vrs_test)(vote_routerstatus_t *vrs, int voter, time_t now),
+ void (*consensus_test)(networkstatus_t *con, time_t now),
+ void (*rs_test)(routerstatus_t *rs, time_t now))
{
authority_cert_t *cert1=NULL, *cert2=NULL, *cert3=NULL;
crypto_pk_t *sign_skey_1=NULL, *sign_skey_2=NULL, *sign_skey_3=NULL;
crypto_pk_t *sign_skey_leg1=NULL;
const char *msg=NULL;
+ /*
+ * Sum the non-zero returns from vote_tweaks() we've seen; if vote_tweaks()
+ * returns non-zero, it changed net_params and we should skip the tests for
+ * that later as they will fail.
+ */
+ int params_tweaked = 0;
time_t now = time(NULL);
networkstatus_voter_info_t *voter;
@@ -798,7 +1229,9 @@ test_dir_v3_networkstatus(void)
*con_md=NULL;
vote_routerstatus_t *vrs;
routerstatus_t *rs;
- char *v1_text=NULL, *v2_text=NULL, *v3_text=NULL, *consensus_text=NULL, *cp;
+ int idx, n_rs, n_vrs;
+ char *v1_text=NULL, *v2_text=NULL, *v3_text=NULL, *consensus_text=NULL,
+ *cp=NULL;
smartlist_t *votes = smartlist_new();
/* For generating the two other consensuses. */
@@ -809,10 +1242,13 @@ test_dir_v3_networkstatus(void)
networkstatus_t *con2=NULL, *con_md2=NULL, *con3=NULL, *con_md3=NULL;
ns_detached_signatures_t *dsig1=NULL, *dsig2=NULL;
+ test_assert(vrs_gen);
+ test_assert(rs_test);
+ test_assert(vrs_test);
+
/* Parse certificates and keys. */
cert1 = authority_cert_parse_from_string(AUTHORITY_CERT_1, NULL);
test_assert(cert1);
- test_assert(cert1->is_cross_certified);
cert2 = authority_cert_parse_from_string(AUTHORITY_CERT_2, NULL);
test_assert(cert2);
cert3 = authority_cert_parse_from_string(AUTHORITY_CERT_3, NULL);
@@ -866,69 +1302,18 @@ test_dir_v3_networkstatus(void)
smartlist_split_string(vote->net_params, "circuitwindow=101 foo=990",
NULL, 0, 0);
vote->routerstatus_list = smartlist_new();
- /* add the first routerstatus. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.1.2.14");
- rs->published_on = now-1500;
- strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
- memset(rs->identity_digest, 3, DIGEST_LEN);
- memset(rs->descriptor_digest, 78, DIGEST_LEN);
- rs->addr = 0x99008801;
- rs->or_port = 443;
- rs->dir_port = 8000;
- /* all flags but running cleared */
- rs->is_flagged_running = 1;
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
-
- /* add the second routerstatus. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.2.0.5");
- rs->published_on = now-1000;
- strlcpy(rs->nickname, "router1", sizeof(rs->nickname));
- memset(rs->identity_digest, 5, DIGEST_LEN);
- memset(rs->descriptor_digest, 77, DIGEST_LEN);
- rs->addr = 0x99009901;
- rs->or_port = 443;
- rs->dir_port = 0;
- rs->is_exit = rs->is_stable = rs->is_fast = rs->is_flagged_running =
- rs->is_valid = rs->is_v2_dir = rs->is_possible_guard = 1;
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
-
- /* add the third routerstatus. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.1.0.3");
- rs->published_on = now-1000;
- strlcpy(rs->nickname, "router3", sizeof(rs->nickname));
- memset(rs->identity_digest, 33, DIGEST_LEN);
- memset(rs->descriptor_digest, 79, DIGEST_LEN);
- rs->addr = 0xAA009901;
- rs->or_port = 400;
- rs->dir_port = 9999;
- rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
- rs->is_flagged_running = rs->is_valid = rs->is_v2_dir =
- rs->is_possible_guard = 1;
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
-
- /* add a fourth routerstatus that is not running. */
- vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
- rs = &vrs->status;
- vrs->version = tor_strdup("0.1.6.3");
- rs->published_on = now-1000;
- strlcpy(rs->nickname, "router4", sizeof(rs->nickname));
- memset(rs->identity_digest, 34, DIGEST_LEN);
- memset(rs->descriptor_digest, 47, DIGEST_LEN);
- rs->addr = 0xC0000203;
- rs->or_port = 500;
- rs->dir_port = 1999;
- /* Running flag (and others) cleared */
- smartlist_add(vote->routerstatus_list, vrs);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
+ /* add routerstatuses */
+ idx = 0;
+ do {
+ vrs = vrs_gen(idx, now);
+ if (vrs) {
+ smartlist_add(vote->routerstatus_list, vrs);
+ test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs),
+ &msg,0,0)>=0);
+ ++idx;
+ }
+ } while (vrs);
+ n_vrs = idx;
/* dump the vote and try to parse it. */
v1_text = format_networkstatus_vote(sign_skey_1, vote);
@@ -959,45 +1344,15 @@ test_dir_v3_networkstatus(void)
cp = smartlist_join_strings(v1->known_flags, ":", 0, NULL);
test_streq(cp, "Authority:Exit:Fast:Guard:Running:Stable:V2Dir:Valid");
tor_free(cp);
- test_eq(smartlist_len(v1->routerstatus_list), 4);
- /* Check the first routerstatus. */
- vrs = smartlist_get(v1->routerstatus_list, 0);
- rs = &vrs->status;
- test_streq(vrs->version, "0.1.2.14");
- test_eq(rs->published_on, now-1500);
- test_streq(rs->nickname, "router2");
- test_memeq(rs->identity_digest,
- "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
- DIGEST_LEN);
- test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
- test_eq(rs->addr, 0x99008801);
- test_eq(rs->or_port, 443);
- test_eq(rs->dir_port, 8000);
- test_eq(vrs->flags, U64_LITERAL(16)); // no flags except "running"
- /* Check the second routerstatus. */
- vrs = smartlist_get(v1->routerstatus_list, 1);
- rs = &vrs->status;
- test_streq(vrs->version, "0.2.0.5");
- test_eq(rs->published_on, now-1000);
- test_streq(rs->nickname, "router1");
- test_memeq(rs->identity_digest,
- "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
- DIGEST_LEN);
- test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- test_eq(rs->addr, 0x99009901);
- test_eq(rs->or_port, 443);
- test_eq(rs->dir_port, 0);
- test_eq(vrs->flags, U64_LITERAL(254)); // all flags except "authority."
+ test_eq(smartlist_len(v1->routerstatus_list), n_vrs);
- {
- measured_bw_line_t mbw;
- memset(mbw.node_id, 33, sizeof(mbw.node_id));
- mbw.bw = 1024;
- test_assert(measured_bw_line_apply(&mbw,
- v1->routerstatus_list) == 1);
- vrs = smartlist_get(v1->routerstatus_list, 2);
- test_assert(vrs->status.has_measured_bw &&
- vrs->status.measured_bw == 1024);
+ if (vote_tweaks) params_tweaked += vote_tweaks(v1, 1, now);
+
+ /* Check the routerstatuses. */
+ for (idx = 0; idx < n_vrs; ++idx) {
+ vrs = smartlist_get(v1->routerstatus_list, idx);
+ test_assert(vrs);
+ vrs_test(vrs, 1, now);
}
/* Generate second vote. It disagrees on some of the times,
@@ -1007,7 +1362,8 @@ test_dir_v3_networkstatus(void)
vote->dist_seconds = 300;
authority_cert_free(vote->cert);
vote->cert = authority_cert_dup(cert2);
- vote->net_params = smartlist_new();
+ SMARTLIST_FOREACH(vote->net_params, char *, c, tor_free(c));
+ smartlist_clear(vote->net_params);
smartlist_split_string(vote->net_params, "bar=2000000000 circuitwindow=20",
NULL, 0, 0);
tor_free(vote->client_versions);
@@ -1022,25 +1378,28 @@ test_dir_v3_networkstatus(void)
smartlist_add(vote->known_flags, tor_strdup("MadeOfCheese"));
smartlist_add(vote->known_flags, tor_strdup("MadeOfTin"));
smartlist_sort_strings(vote->known_flags);
- vrs = smartlist_get(vote->routerstatus_list, 2);
- smartlist_del_keeporder(vote->routerstatus_list, 2);
- tor_free(vrs->version);
- tor_free(vrs);
- vrs = smartlist_get(vote->routerstatus_list, 0);
- vrs->status.is_fast = 1;
- /* generate and parse. */
+
+ /* generate and parse v2. */
v2_text = format_networkstatus_vote(sign_skey_2, vote);
test_assert(v2_text);
v2 = networkstatus_parse_vote_from_string(v2_text, NULL, NS_TYPE_VOTE);
test_assert(v2);
+
+ if (vote_tweaks) params_tweaked += vote_tweaks(v2, 2, now);
+
/* Check that flags come out right.*/
cp = smartlist_join_strings(v2->known_flags, ":", 0, NULL);
test_streq(cp, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
"Running:Stable:V2Dir:Valid");
tor_free(cp);
- vrs = smartlist_get(v2->routerstatus_list, 1);
- /* 1023 - authority(1) - madeofcheese(16) - madeoftin(32) */
- test_eq(vrs->flags, U64_LITERAL(974));
+
+ /* Check the routerstatuses. */
+ n_vrs = smartlist_len(v2->routerstatus_list);
+ for (idx = 0; idx < n_vrs; ++idx) {
+ vrs = smartlist_get(v2->routerstatus_list, idx);
+ test_assert(vrs);
+ vrs_test(vrs, 2, now);
+ }
/* Generate the third vote. */
vote->published = now;
@@ -1048,7 +1407,8 @@ test_dir_v3_networkstatus(void)
vote->dist_seconds = 250;
authority_cert_free(vote->cert);
vote->cert = authority_cert_dup(cert3);
- vote->net_params = smartlist_new();
+ SMARTLIST_FOREACH(vote->net_params, char *, c, tor_free(c));
+ smartlist_clear(vote->net_params);
smartlist_split_string(vote->net_params, "circuitwindow=80 foo=660",
NULL, 0, 0);
smartlist_add(vote->supported_methods, tor_strdup("4"));
@@ -1063,13 +1423,6 @@ test_dir_v3_networkstatus(void)
crypto_pk_get_digest(cert3->identity_key, voter->identity_digest);
/* This one has a legacy id. */
memset(voter->legacy_id_digest, (int)'A', DIGEST_LEN);
- vrs = smartlist_get(vote->routerstatus_list, 0);
- smartlist_del_keeporder(vote->routerstatus_list, 0);
- tor_free(vrs->version);
- tor_free(vrs);
- vrs = smartlist_get(vote->routerstatus_list, 0);
- memset(vrs->status.descriptor_digest, (int)'Z', DIGEST_LEN);
- test_assert(router_add_to_routerlist(generate_ri_from_rs(vrs), &msg,0,0)>=0);
v3_text = format_networkstatus_vote(sign_skey_3, vote);
test_assert(v3_text);
@@ -1077,6 +1430,8 @@ test_dir_v3_networkstatus(void)
v3 = networkstatus_parse_vote_from_string(v3_text, NULL, NS_TYPE_VOTE);
test_assert(v3);
+ if (vote_tweaks) params_tweaked += vote_tweaks(v3, 3, now);
+
/* Compute a consensus as voter 3. */
smartlist_add(votes, v3);
smartlist_add(votes, v1);
@@ -1119,9 +1474,12 @@ test_dir_v3_networkstatus(void)
test_streq(cp, "Authority:Exit:Fast:Guard:MadeOfCheese:MadeOfTin:"
"Running:Stable:V2Dir:Valid");
tor_free(cp);
- cp = smartlist_join_strings(con->net_params, ":", 0, NULL);
- test_streq(cp, "circuitwindow=80:foo=660");
- tor_free(cp);
+ if (!params_tweaked) {
+ /* Skip this one if vote_tweaks() messed with the param lists */
+ cp = smartlist_join_strings(con->net_params, ":", 0, NULL);
+ test_streq(cp, "circuitwindow=80:foo=660");
+ tor_free(cp);
+ }
test_eq(4, smartlist_len(con->voters)); /*3 voters, 1 legacy key.*/
/* The voter id digests should be in this order. */
@@ -1136,49 +1494,15 @@ test_dir_v3_networkstatus(void)
test_same_voter(smartlist_get(con->voters, 3),
smartlist_get(v3->voters, 0));
- test_assert(!con->cert);
- test_eq(2, smartlist_len(con->routerstatus_list));
- /* There should be two listed routers: one with identity 3, one with
- * identity 5. */
- /* This one showed up in 2 digests. */
- rs = smartlist_get(con->routerstatus_list, 0);
- test_memeq(rs->identity_digest,
- "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
- DIGEST_LEN);
- test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
- test_assert(!rs->is_authority);
- test_assert(!rs->is_exit);
- test_assert(!rs->is_fast);
- test_assert(!rs->is_possible_guard);
- test_assert(!rs->is_stable);
- /* (If it wasn't running it wouldn't be here) */
- test_assert(rs->is_flagged_running);
- test_assert(!rs->is_v2_dir);
- test_assert(!rs->is_valid);
- test_assert(!rs->is_named);
- /* XXXX check version */
-
- rs = smartlist_get(con->routerstatus_list, 1);
- /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
- test_memeq(rs->identity_digest,
- "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
- DIGEST_LEN);
- test_streq(rs->nickname, "router1");
- test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
- test_eq(rs->published_on, now-1000);
- test_eq(rs->addr, 0x99009901);
- test_eq(rs->or_port, 443);
- test_eq(rs->dir_port, 0);
- test_assert(!rs->is_authority);
- test_assert(rs->is_exit);
- test_assert(rs->is_fast);
- test_assert(rs->is_possible_guard);
- test_assert(rs->is_stable);
- test_assert(rs->is_flagged_running);
- test_assert(rs->is_v2_dir);
- test_assert(rs->is_valid);
- test_assert(!rs->is_named);
- /* XXXX check version */
+ consensus_test(con, now);
+
+ /* Check the routerstatuses. */
+ n_rs = smartlist_len(con->routerstatus_list);
+ for (idx = 0; idx < n_rs; ++idx) {
+ rs = smartlist_get(con->routerstatus_list, idx);
+ test_assert(rs);
+ rs_test(rs, now);
+ }
/* Check signatures. the first voter is a pseudo-entry with a legacy key.
* The second one hasn't signed. The fourth one has signed: validate it. */
@@ -1327,6 +1651,7 @@ test_dir_v3_networkstatus(void)
}
done:
+ tor_free(cp);
smartlist_free(votes);
tor_free(v1_text);
tor_free(v2_text);
@@ -1381,21 +1706,684 @@ test_dir_v3_networkstatus(void)
ns_detached_signatures_free(dsig2);
}
+/** Run unit tests for generating and parsing V3 consensus networkstatus
+ * documents. */
+static void
+test_dir_v3_networkstatus(void)
+{
+ test_a_networkstatus(gen_routerstatus_for_v3ns,
+ vote_tweaks_for_v3ns,
+ test_vrs_for_v3ns,
+ test_consensus_for_v3ns,
+ test_routerstatus_for_v3ns);
+}
+
+static void
+test_dir_scale_bw(void *testdata)
+{
+ double v[8] = { 2.0/3,
+ 7.0,
+ 1.0,
+ 3.0,
+ 1.0/5,
+ 1.0/7,
+ 12.0,
+ 24.0 };
+ u64_dbl_t vals[8];
+ uint64_t total;
+ int i;
+
+ (void) testdata;
+
+ for (i=0; i<8; ++i)
+ vals[i].dbl = v[i];
+
+ scale_array_elements_to_u64(vals, 8, &total);
+
+ tt_int_op((int)total, ==, 48);
+ total = 0;
+ for (i=0; i<8; ++i) {
+ total += vals[i].u64;
+ }
+ tt_assert(total >= (U64_LITERAL(1)<<60));
+ tt_assert(total <= (U64_LITERAL(1)<<62));
+
+ for (i=0; i<8; ++i) {
+ double ratio = ((double)vals[i].u64) / vals[2].u64;
+ tt_double_op(fabs(ratio - v[i]), <, .00001);
+ }
+
+ done:
+ ;
+}
+
+static void
+test_dir_random_weighted(void *testdata)
+{
+ int histogram[10];
+ uint64_t vals[10] = {3,1,2,4,6,0,7,5,8,9}, total=0;
+ u64_dbl_t inp[10];
+ int i, choice;
+ const int n = 50000;
+ double max_sq_error;
+ (void) testdata;
+
+ /* Try a ten-element array with values from 0 through 10. The values are
+ * in a scrambled order to make sure we don't depend on order. */
+ memset(histogram,0,sizeof(histogram));
+ for (i=0; i<10; ++i) {
+ inp[i].u64 = vals[i];
+ total += vals[i];
+ }
+ tt_u64_op(total, ==, 45);
+ for (i=0; i<n; ++i) {
+ choice = choose_array_element_by_weight(inp, 10);
+ tt_int_op(choice, >=, 0);
+ tt_int_op(choice, <, 10);
+ histogram[choice]++;
+ }
+
+ /* Now see if we chose things about frequently enough. */
+ max_sq_error = 0;
+ for (i=0; i<10; ++i) {
+ int expected = (int)(n*vals[i]/total);
+ double frac_diff = 0, sq;
+ TT_BLATHER((" %d : %5d vs %5d\n", (int)vals[i], histogram[i], expected));
+ if (expected)
+ frac_diff = (histogram[i] - expected) / ((double)expected);
+ else
+ tt_int_op(histogram[i], ==, 0);
+
+ sq = frac_diff * frac_diff;
+ if (sq > max_sq_error)
+ max_sq_error = sq;
+ }
+ /* It should almost always be much much less than this. If you want to
+ * figure out the odds, please feel free. */
+ tt_double_op(max_sq_error, <, .05);
+
+ /* Now try a singleton; do we choose it? */
+ for (i = 0; i < 100; ++i) {
+ choice = choose_array_element_by_weight(inp, 1);
+ tt_int_op(choice, ==, 0);
+ }
+
+ /* Now try an array of zeros. We should choose randomly. */
+ memset(histogram,0,sizeof(histogram));
+ for (i = 0; i < 5; ++i)
+ inp[i].u64 = 0;
+ for (i = 0; i < n; ++i) {
+ choice = choose_array_element_by_weight(inp, 5);
+ tt_int_op(choice, >=, 0);
+ tt_int_op(choice, <, 5);
+ histogram[choice]++;
+ }
+ /* Now see if we chose things about frequently enough. */
+ max_sq_error = 0;
+ for (i=0; i<5; ++i) {
+ int expected = n/5;
+ double frac_diff = 0, sq;
+ TT_BLATHER((" %d : %5d vs %5d\n", (int)vals[i], histogram[i], expected));
+ frac_diff = (histogram[i] - expected) / ((double)expected);
+ sq = frac_diff * frac_diff;
+ if (sq > max_sq_error)
+ max_sq_error = sq;
+ }
+ /* It should almost always be much much less than this. If you want to
+ * figure out the odds, please feel free. */
+ tt_double_op(max_sq_error, <, .05);
+ done:
+ ;
+}
+
+/* Function pointers for test_dir_clip_unmeasured_bw_kb() */
+
+static uint32_t alternate_clip_bw = 0;
+
+/**
+ * Generate a routerstatus for clip_unmeasured_bw_kb test; based on the
+ * v3_networkstatus ones.
+ */
+static vote_routerstatus_t *
+gen_routerstatus_for_umbw(int idx, time_t now)
+{
+ vote_routerstatus_t *vrs = NULL;
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+ uint32_t max_unmeasured_bw_kb = (alternate_clip_bw > 0) ?
+ alternate_clip_bw : DEFAULT_MAX_UNMEASURED_BW_KB;
+
+ switch (idx) {
+ case 0:
+ /* Generate the first routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.2.14");
+ rs->published_on = now-1500;
+ strlcpy(rs->nickname, "router2", sizeof(rs->nickname));
+ memset(rs->identity_digest, 3, DIGEST_LEN);
+ memset(rs->descriptor_digest, 78, DIGEST_LEN);
+ rs->addr = 0x99008801;
+ rs->or_port = 443;
+ rs->dir_port = 8000;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ /*
+ * This one has measured bandwidth below the clip cutoff, and
+ * so shouldn't be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 1;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = rs->bandwidth_kb = max_unmeasured_bw_kb / 2;
+ break;
+ case 1:
+ /* Generate the second routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.2.0.5");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router1", sizeof(rs->nickname));
+ memset(rs->identity_digest, 5, DIGEST_LEN);
+ memset(rs->descriptor_digest, 77, DIGEST_LEN);
+ rs->addr = 0x99009901;
+ rs->or_port = 443;
+ rs->dir_port = 0;
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ tor_addr_copy(&rs->ipv6_addr, &addr_ipv6);
+ rs->ipv6_orport = 4711;
+ rs->is_exit = rs->is_stable = rs->is_fast = rs->is_flagged_running =
+ rs->is_valid = rs->is_possible_guard = 1;
+ /*
+ * This one has measured bandwidth above the clip cutoff, and
+ * so shouldn't be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 1;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = rs->bandwidth_kb = 2 * max_unmeasured_bw_kb;
+ break;
+ case 2:
+ /* Generate the third routerstatus. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.0.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router3", sizeof(rs->nickname));
+ memset(rs->identity_digest, 0x33, DIGEST_LEN);
+ memset(rs->descriptor_digest, 79, DIGEST_LEN);
+ rs->addr = 0xAA009901;
+ rs->or_port = 400;
+ rs->dir_port = 9999;
+ rs->is_authority = rs->is_exit = rs->is_stable = rs->is_fast =
+ rs->is_flagged_running = rs->is_valid =
+ rs->is_possible_guard = 1;
+ /*
+ * This one has unmeasured bandwidth above the clip cutoff, and
+ * so should be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 0;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = 0;
+ rs->bandwidth_kb = 2 * max_unmeasured_bw_kb;
+ break;
+ case 3:
+ /* Generate a fourth routerstatus that is not running. */
+ vrs = tor_malloc_zero(sizeof(vote_routerstatus_t));
+ rs = &vrs->status;
+ vrs->version = tor_strdup("0.1.6.3");
+ rs->published_on = now-1000;
+ strlcpy(rs->nickname, "router4", sizeof(rs->nickname));
+ memset(rs->identity_digest, 0x34, DIGEST_LEN);
+ memset(rs->descriptor_digest, 47, DIGEST_LEN);
+ rs->addr = 0xC0000203;
+ rs->or_port = 500;
+ rs->dir_port = 1999;
+ /* all flags but running cleared */
+ rs->is_flagged_running = 1;
+ /*
+ * This one has unmeasured bandwidth below the clip cutoff, and
+ * so shouldn't be clipped; we'll have to test that it isn't
+ * later.
+ */
+ vrs->has_measured_bw = 0;
+ rs->has_bandwidth = 1;
+ vrs->measured_bw_kb = 0;
+ rs->bandwidth_kb = max_unmeasured_bw_kb / 2;
+ break;
+ case 4:
+ /* No more for this test; return NULL */
+ vrs = NULL;
+ break;
+ default:
+ /* Shouldn't happen */
+ test_assert(0);
+ }
+ if (vrs) {
+ vrs->microdesc = tor_malloc_zero(sizeof(vote_microdesc_hash_t));
+ tor_asprintf(&vrs->microdesc->microdesc_hash_line,
+ "m 9,10,11,12,13,14,15,16,17 "
+ "sha256=xyzajkldsdsajdadlsdjaslsdksdjlsdjsdaskdaaa%d\n",
+ idx);
+ }
+
+ done:
+ return vrs;
+}
+
+/** Apply tweaks to the vote list for each voter; for the umbw test this is
+ * just adding the right consensus methods to let clipping happen */
+static int
+vote_tweaks_for_umbw(networkstatus_t *v, int voter, time_t now)
+{
+ char *maxbw_param = NULL;
+ int rv = 0;
+
+ test_assert(v);
+ (void)voter;
+ (void)now;
+
+ test_assert(v->supported_methods);
+ SMARTLIST_FOREACH(v->supported_methods, char *, c, tor_free(c));
+ smartlist_clear(v->supported_methods);
+ /* Method 17 is MIN_METHOD_TO_CLIP_UNMEASURED_BW_KB */
+ smartlist_split_string(v->supported_methods,
+ "1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17",
+ NULL, 0, -1);
+ /* If we're using a non-default clip bandwidth, add it to net_params */
+ if (alternate_clip_bw > 0) {
+ tor_asprintf(&maxbw_param, "maxunmeasuredbw=%u", alternate_clip_bw);
+ test_assert(maxbw_param);
+ if (maxbw_param) {
+ smartlist_add(v->net_params, maxbw_param);
+ rv = 1;
+ }
+ }
+
+ done:
+ return rv;
+}
+
+/**
+ * Test a parsed vote_routerstatus_t for umbw test.
+ */
+static void
+test_vrs_for_umbw(vote_routerstatus_t *vrs, int voter, time_t now)
+{
+ routerstatus_t *rs;
+ tor_addr_t addr_ipv6;
+ uint32_t max_unmeasured_bw_kb = (alternate_clip_bw > 0) ?
+ alternate_clip_bw : DEFAULT_MAX_UNMEASURED_BW_KB;
+
+ (void)voter;
+ test_assert(vrs);
+ rs = &(vrs->status);
+ test_assert(rs);
+
+ /* Split out by digests to test */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN)) {
+ /*
+ * Check the first routerstatus - measured bandwidth below the clip
+ * cutoff.
+ */
+ test_streq(vrs->version, "0.1.2.14");
+ test_eq(rs->published_on, now-1500);
+ test_streq(rs->nickname, "router2");
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_eq(rs->addr, 0x99008801);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 8000);
+ test_assert(rs->has_bandwidth);
+ test_assert(vrs->has_measured_bw);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_eq(vrs->measured_bw_kb, max_unmeasured_bw_kb / 2);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN)) {
+
+ /*
+ * Check the second routerstatus - measured bandwidth above the clip
+ * cutoff.
+ */
+ test_streq(vrs->version, "0.2.0.5");
+ test_eq(rs->published_on, now-1000);
+ test_streq(rs->nickname, "router1");
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ test_assert(rs->has_bandwidth);
+ test_assert(vrs->has_measured_bw);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb * 2);
+ test_eq(vrs->measured_bw_kb, max_unmeasured_bw_kb * 2);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33",
+ DIGEST_LEN)) {
+ /*
+ * Check the third routerstatus - unmeasured bandwidth above the clip
+ * cutoff; this one should be clipped later on in the consensus, but
+ * appears unclipped in the vote.
+ */
+ test_assert(rs->has_bandwidth);
+ test_assert(!(vrs->has_measured_bw));
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb * 2);
+ test_eq(vrs->measured_bw_kb, 0);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34"
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34",
+ DIGEST_LEN)) {
+ /*
+ * Check the fourth routerstatus - unmeasured bandwidth below the clip
+ * cutoff; this one should not be clipped.
+ */
+ test_assert(rs->has_bandwidth);
+ test_assert(!(vrs->has_measured_bw));
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_eq(vrs->measured_bw_kb, 0);
+ } else {
+ test_assert(0);
+ }
+
+ done:
+ return;
+}
+
+/**
+ * Test a consensus for v3_networkstatus_test
+ */
+static void
+test_consensus_for_umbw(networkstatus_t *con, time_t now)
+{
+ (void)now;
+
+ test_assert(con);
+ test_assert(!con->cert);
+ // test_assert(con->consensus_method >= MIN_METHOD_TO_CLIP_UNMEASURED_BW_KB);
+ test_assert(con->consensus_method >= 16);
+ test_eq(4, smartlist_len(con->routerstatus_list));
+ /* There should be four listed routers; all voters saw the same in this */
+
+ done:
+ return;
+}
+
+/**
+ * Test a router list entry for umbw test
+ */
+static void
+test_routerstatus_for_umbw(routerstatus_t *rs, time_t now)
+{
+ tor_addr_t addr_ipv6;
+ uint32_t max_unmeasured_bw_kb = (alternate_clip_bw > 0) ?
+ alternate_clip_bw : DEFAULT_MAX_UNMEASURED_BW_KB;
+
+ test_assert(rs);
+
+ /* There should be four listed routers, as constructed above */
+ if (tor_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN)) {
+ test_memeq(rs->identity_digest,
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3"
+ "\x3\x3\x3\x3\x3\x3\x3\x3\x3\x3",
+ DIGEST_LEN);
+ test_memeq(rs->descriptor_digest, "NNNNNNNNNNNNNNNNNNNN", DIGEST_LEN);
+ test_assert(!rs->is_authority);
+ test_assert(!rs->is_exit);
+ test_assert(!rs->is_fast);
+ test_assert(!rs->is_possible_guard);
+ test_assert(!rs->is_stable);
+ /* (If it wasn't running it wouldn't be here) */
+ test_assert(rs->is_flagged_running);
+ test_assert(!rs->is_valid);
+ test_assert(!rs->is_named);
+ /* This one should have measured bandwidth below the clip cutoff */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_assert(!(rs->bw_is_unmeasured));
+ } else if (tor_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN)) {
+ /* This one showed up in 3 digests. Twice with ID 'M', once with 'Z'. */
+ test_memeq(rs->identity_digest,
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5"
+ "\x5\x5\x5\x5\x5\x5\x5\x5\x5\x5",
+ DIGEST_LEN);
+ test_streq(rs->nickname, "router1");
+ test_memeq(rs->descriptor_digest, "MMMMMMMMMMMMMMMMMMMM", DIGEST_LEN);
+ test_eq(rs->published_on, now-1000);
+ test_eq(rs->addr, 0x99009901);
+ test_eq(rs->or_port, 443);
+ test_eq(rs->dir_port, 0);
+ tor_addr_parse(&addr_ipv6, "[1:2:3::4]");
+ test_assert(tor_addr_eq(&rs->ipv6_addr, &addr_ipv6));
+ test_eq(rs->ipv6_orport, 4711);
+ test_assert(!rs->is_authority);
+ test_assert(rs->is_exit);
+ test_assert(rs->is_fast);
+ test_assert(rs->is_possible_guard);
+ test_assert(rs->is_stable);
+ test_assert(rs->is_flagged_running);
+ test_assert(rs->is_valid);
+ test_assert(!rs->is_named);
+ /* This one should have measured bandwidth above the clip cutoff */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb * 2);
+ test_assert(!(rs->bw_is_unmeasured));
+ } else if (tor_memeq(rs->identity_digest,
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33"
+ "\x33\x33\x33\x33\x33\x33\x33\x33\x33\x33",
+ DIGEST_LEN)) {
+ /*
+ * This one should have unmeasured bandwidth above the clip cutoff,
+ * and so should be clipped
+ */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb);
+ test_assert(rs->bw_is_unmeasured);
+ } else if (tor_memeq(rs->identity_digest,
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34"
+ "\x34\x34\x34\x34\x34\x34\x34\x34\x34\x34",
+ DIGEST_LEN)) {
+ /*
+ * This one should have unmeasured bandwidth below the clip cutoff,
+ * and so should not be clipped
+ */
+ test_assert(rs->has_bandwidth);
+ test_eq(rs->bandwidth_kb, max_unmeasured_bw_kb / 2);
+ test_assert(rs->bw_is_unmeasured);
+ } else {
+ /* Weren't expecting this... */
+ test_assert(0);
+ }
+
+ done:
+ return;
+}
+
+/**
+ * Compute a consensus involving clipping unmeasured bandwidth with consensus
+ * method 17; this uses the same test_a_networkstatus() function that the
+ * v3_networkstatus test uses.
+ */
+
+static void
+test_dir_clip_unmeasured_bw_kb(void)
+{
+ /* Run the test with the default clip bandwidth */
+ alternate_clip_bw = 0;
+ test_a_networkstatus(gen_routerstatus_for_umbw,
+ vote_tweaks_for_umbw,
+ test_vrs_for_umbw,
+ test_consensus_for_umbw,
+ test_routerstatus_for_umbw);
+}
+
+/**
+ * This version of test_dir_clip_unmeasured_bw_kb() uses a non-default choice
+ * of clip bandwidth.
+ */
+
+static void
+test_dir_clip_unmeasured_bw_kb_alt(void)
+{
+ /*
+ * Try a different one; this value is chosen so that the below-the-cutoff
+ * unmeasured nodes the test uses, at alternate_clip_bw / 2, will be above
+ * DEFAULT_MAX_UNMEASURED_BW_KB and if the consensus incorrectly uses that
+ * cutoff it will fail the test.
+ */
+ alternate_clip_bw = 3 * DEFAULT_MAX_UNMEASURED_BW_KB;
+ test_a_networkstatus(gen_routerstatus_for_umbw,
+ vote_tweaks_for_umbw,
+ test_vrs_for_umbw,
+ test_consensus_for_umbw,
+ test_routerstatus_for_umbw);
+}
+
+static void
+test_dir_fmt_control_ns(void *arg)
+{
+ char *s = NULL;
+ routerstatus_t rs;
+ (void)arg;
+
+ memset(&rs, 0, sizeof(rs));
+ rs.published_on = 1364925198;
+ strlcpy(rs.nickname, "TetsuoMilk", sizeof(rs.nickname));
+ memcpy(rs.identity_digest, "Stately, plump Buck ", DIGEST_LEN);
+ memcpy(rs.descriptor_digest, "Mulligan came up fro", DIGEST_LEN);
+ rs.addr = 0x20304050;
+ rs.or_port = 9001;
+ rs.dir_port = 9002;
+ rs.is_exit = 1;
+ rs.is_fast = 1;
+ rs.is_flagged_running = 1;
+ rs.has_bandwidth = 1;
+ rs.bandwidth_kb = 1000;
+
+ s = networkstatus_getinfo_helper_single(&rs);
+ tt_assert(s);
+ tt_str_op(s, ==,
+ "r TetsuoMilk U3RhdGVseSwgcGx1bXAgQnVjayA "
+ "TXVsbGlnYW4gY2FtZSB1cCBmcm8 2013-04-02 17:53:18 "
+ "32.48.64.80 9001 9002\n"
+ "s Exit Fast Running V2Dir\n"
+ "w Bandwidth=1000\n");
+
+ done:
+ tor_free(s);
+}
+
+static void
+test_dir_http_handling(void *args)
+{
+ char *url = NULL;
+ (void)args;
+
+ /* Parse http url tests: */
+ /* Good headers */
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.0\r\n", &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.600\r\n", &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ /* Should prepend '/tor/' to url if required */
+ test_eq(parse_http_url("GET /a/b/c.txt HTTP/1.1\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), 0);
+ test_streq(url, "/tor/a/b/c.txt");
+ tor_free(url);
+
+ /* Bad headers -- no HTTP/1.x*/
+ test_eq(parse_http_url("GET /a/b/c.txt\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), -1);
+ tt_assert(!url);
+
+ /* Bad headers */
+ test_eq(parse_http_url("GET /a/b/c.txt\r\n"
+ "Host: example.com\r\n"
+ "User-Agent: Mozilla/5.0 (Windows;"
+ " U; Windows NT 6.1; en-US; rv:1.9.1.5)\r\n",
+ &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.1x\r\n", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.", &url), -1);
+ tt_assert(!url);
+
+ test_eq(parse_http_url("GET /tor/a/b/c.txt HTTP/1.\r", &url), -1);
+ tt_assert(!url);
+
+ done:
+ tor_free(url);
+}
+
#define DIR_LEGACY(name) \
{ #name, legacy_test_helper, TT_FORK, &legacy_setup, test_dir_ ## name }
-#define DIR(name) \
- { #name, test_dir_##name, 0, NULL, NULL }
+#define DIR(name,flags) \
+ { #name, test_dir_##name, (flags), NULL, NULL }
struct testcase_t dir_tests[] = {
DIR_LEGACY(nicknames),
DIR_LEGACY(formats),
DIR_LEGACY(versions),
DIR_LEGACY(fp_pairs),
- DIR(split_fps),
- DIR_LEGACY(measured_bw),
+ DIR(split_fps, 0),
+ DIR_LEGACY(measured_bw_kb),
+ DIR_LEGACY(measured_bw_kb_cache),
DIR_LEGACY(param_voting),
DIR_LEGACY(v3_networkstatus),
+ DIR(random_weighted, 0),
+ DIR(scale_bw, 0),
+ DIR_LEGACY(clip_unmeasured_bw_kb),
+ DIR_LEGACY(clip_unmeasured_bw_kb_alt),
+ DIR(fmt_control_ns, 0),
+ DIR(http_handling, 0),
END_OF_TESTCASES
};
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
new file mode 100644
index 000000000..93c8f77d5
--- /dev/null
+++ b/src/test/test_extorport.c
@@ -0,0 +1,607 @@
+/* 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 */
+ tor_free(options->DataDirectory);
+ 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_u64_op((uint64_t)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_uint_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,
+ or_connection_t *conn)
+{
+ (void)warn;
+ (void)reason;
+ (void)conn;
+}
+
+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_hs.c b/src/test/test_hs.c
new file mode 100644
index 000000000..99ef7dd57
--- /dev/null
+++ b/src/test/test_hs.c
@@ -0,0 +1,129 @@
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_hs.c
+ * \brief Unit tests for hidden service.
+ **/
+
+#define CONTROL_PRIVATE
+#include "or.h"
+#include "test.h"
+#include "control.h"
+
+/* mock ID digest and longname for node that's in nodelist */
+#define HSDIR_EXIST_ID "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA" \
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+#define STR_HSDIR_EXIST_LONGNAME \
+ "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=TestDir"
+/* mock ID digest and longname for node that's not in nodelist */
+#define HSDIR_NONE_EXIST_ID "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB" \
+ "\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB\xBB"
+#define STR_HSDIR_NONE_EXIST_LONGNAME \
+ "$BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB"
+
+/* Helper global variable for hidden service descriptor event test.
+ * It's used as a pointer to dynamically created message buffer in
+ * send_control_event_string_replacement function, which mocks
+ * send_control_event_string function.
+ *
+ * Always free it after use! */
+static char *received_msg = NULL;
+
+/** Mock function for send_control_event_string
+ */
+static void
+send_control_event_string_replacement(uint16_t event, event_format_t which,
+ const char *msg)
+{
+ (void) event;
+ (void) which;
+ tor_free(received_msg);
+ received_msg = tor_strdup(msg);
+}
+
+/** Mock function for node_describe_longname_by_id, it returns either
+ * STR_HSDIR_EXIST_LONGNAME or STR_HSDIR_NONE_EXIST_LONGNAME
+ */
+static const char *
+node_describe_longname_by_id_replacement(const char *id_digest)
+{
+ if (!strcmp(id_digest, HSDIR_EXIST_ID)) {
+ return STR_HSDIR_EXIST_LONGNAME;
+ } else {
+ return STR_HSDIR_NONE_EXIST_LONGNAME;
+ }
+}
+
+/** Make sure each hidden service descriptor async event generation
+ *
+ * function generates the message in expected format.
+ */
+static void
+test_hs_desc_event(void *arg)
+{
+ #define STR_HS_ADDR "ajhb7kljbiru65qo"
+ #define STR_HS_ID "b3oeducbhjmbqmgw2i3jtz4fekkrinwj"
+
+ rend_data_t rend_query;
+ const char *expected_msg;
+
+ (void) arg;
+ MOCK(send_control_event_string,
+ send_control_event_string_replacement);
+ MOCK(node_describe_longname_by_id,
+ node_describe_longname_by_id_replacement);
+
+ /* setup rend_query struct */
+ strncpy(rend_query.onion_address, STR_HS_ADDR,
+ REND_SERVICE_ID_LEN_BASE32+1);
+ rend_query.auth_type = 0;
+
+ /* test request event */
+ control_event_hs_descriptor_requested(&rend_query, HSDIR_EXIST_ID,
+ STR_HS_ID);
+ expected_msg = "650 HS_DESC REQUESTED "STR_HS_ADDR" NO_AUTH "\
+ STR_HSDIR_EXIST_LONGNAME" "STR_HS_ID"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ /* test received event */
+ rend_query.auth_type = 1;
+ control_event_hs_descriptor_received(&rend_query, HSDIR_EXIST_ID);
+ expected_msg = "650 HS_DESC RECEIVED "STR_HS_ADDR" BASIC_AUTH "\
+ STR_HSDIR_EXIST_LONGNAME"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ /* test failed event */
+ rend_query.auth_type = 2;
+ control_event_hs_descriptor_failed(&rend_query, HSDIR_NONE_EXIST_ID);
+ expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" STEALTH_AUTH "\
+ STR_HSDIR_NONE_EXIST_LONGNAME"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ /* test invalid auth type */
+ rend_query.auth_type = 999;
+ control_event_hs_descriptor_failed(&rend_query, HSDIR_EXIST_ID);
+ expected_msg = "650 HS_DESC FAILED "STR_HS_ADDR" UNKNOWN "\
+ STR_HSDIR_EXIST_LONGNAME"\r\n";
+ test_assert(received_msg);
+ test_streq(received_msg, expected_msg);
+ tor_free(received_msg);
+
+ done:
+ UNMOCK(send_control_event_string);
+ UNMOCK(node_describe_longname_by_id);
+ tor_free(received_msg);
+}
+
+struct testcase_t hs_tests[] = {
+ { "hs_desc_event", test_hs_desc_event, TT_FORK,
+ NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_introduce.c b/src/test/test_introduce.c
new file mode 100644
index 000000000..69c115222
--- /dev/null
+++ b/src/test/test_introduce.c
@@ -0,0 +1,528 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "crypto.h"
+#include "or.h"
+#include "test.h"
+
+#define RENDSERVICE_PRIVATE
+#include "rendservice.h"
+
+extern const char AUTHORITY_SIGNKEY_1[];
+
+static uint8_t v0_test_plaintext[] =
+ /* 20 bytes of rendezvous point nickname */
+ { 0x4e, 0x69, 0x63, 0x6b, 0x6e, 0x61, 0x6d, 0x65,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v1_test_plaintext[] =
+ /* Version byte */
+ { 0x01,
+ /* 42 bytes of dummy rendezvous point hex digest */
+ 0x24, 0x30, 0x30, 0x30, 0x31, 0x30, 0x32, 0x30,
+ 0x33, 0x30, 0x34, 0x30, 0x35, 0x30, 0x36, 0x30,
+ 0x37, 0x30, 0x38, 0x30, 0x39, 0x30, 0x41, 0x30,
+ 0x42, 0x30, 0x43, 0x30, 0x44, 0x30, 0x45, 0x30,
+ 0x46, 0x31, 0x30, 0x31, 0x31, 0x31, 0x32, 0x31,
+ 0x33, 0x00,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v2_test_plaintext[] =
+ /* Version byte */
+ { 0x02,
+ /* 4 bytes rendezvous point's IP address */
+ 0xc0, 0xa8, 0x00, 0x01,
+ /* 2 bytes rendezvous point's OR port */
+ 0x23, 0x5a,
+ /* 20 bytes dummy rendezvous point's identity digest */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 2 bytes length of onion key */
+ 0x00, 0x8c,
+ /* Onion key (140 bytes taken from live test) */
+ 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xb1,
+ 0xcd, 0x46, 0xa9, 0x18, 0xd2, 0x0f, 0x01, 0xf8,
+ 0xb2, 0xad, 0xa4, 0x79, 0xb4, 0xbb, 0x4b, 0xf4,
+ 0x54, 0x1e, 0x3f, 0x03, 0x54, 0xcf, 0x7c, 0xb6,
+ 0xb5, 0xf0, 0xfe, 0xed, 0x4b, 0x7d, 0xd7, 0x61,
+ 0xdb, 0x6d, 0xd9, 0x19, 0xe2, 0x72, 0x04, 0xaa,
+ 0x3e, 0x89, 0x26, 0x14, 0x62, 0x9a, 0x6c, 0x11,
+ 0x0b, 0x35, 0x99, 0x2c, 0x9f, 0x2c, 0x64, 0xa1,
+ 0xd9, 0xe2, 0x88, 0xce, 0xf6, 0x54, 0xfe, 0x1d,
+ 0x37, 0x5e, 0x6d, 0x73, 0x95, 0x54, 0x90, 0xf0,
+ 0x7b, 0xfa, 0xd4, 0x44, 0xac, 0xb2, 0x23, 0x9f,
+ 0x75, 0x36, 0xe2, 0x78, 0x62, 0x82, 0x80, 0xa4,
+ 0x23, 0x22, 0xc9, 0xbf, 0xc4, 0x36, 0xd1, 0x31,
+ 0x33, 0x8e, 0x64, 0xb4, 0xa9, 0x74, 0xa1, 0xcb,
+ 0x42, 0x8d, 0x60, 0xc7, 0xbb, 0x8e, 0x6e, 0x0f,
+ 0x36, 0x74, 0x8e, 0xf4, 0x08, 0x99, 0x06, 0x92,
+ 0xb1, 0x3f, 0xb3, 0xdd, 0xed, 0xf7, 0xc9, 0x02,
+ 0x03, 0x01, 0x00, 0x01,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v3_no_auth_test_plaintext[] =
+ /* Version byte */
+ { 0x03,
+ /* Auth type (0 for no auth len/auth data) */
+ 0x00,
+ /* Timestamp */
+ 0x50, 0x0b, 0xb5, 0xaa,
+ /* 4 bytes rendezvous point's IP address */
+ 0xc0, 0xa8, 0x00, 0x01,
+ /* 2 bytes rendezvous point's OR port */
+ 0x23, 0x5a,
+ /* 20 bytes dummy rendezvous point's identity digest */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 2 bytes length of onion key */
+ 0x00, 0x8c,
+ /* Onion key (140 bytes taken from live test) */
+ 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xb1,
+ 0xcd, 0x46, 0xa9, 0x18, 0xd2, 0x0f, 0x01, 0xf8,
+ 0xb2, 0xad, 0xa4, 0x79, 0xb4, 0xbb, 0x4b, 0xf4,
+ 0x54, 0x1e, 0x3f, 0x03, 0x54, 0xcf, 0x7c, 0xb6,
+ 0xb5, 0xf0, 0xfe, 0xed, 0x4b, 0x7d, 0xd7, 0x61,
+ 0xdb, 0x6d, 0xd9, 0x19, 0xe2, 0x72, 0x04, 0xaa,
+ 0x3e, 0x89, 0x26, 0x14, 0x62, 0x9a, 0x6c, 0x11,
+ 0x0b, 0x35, 0x99, 0x2c, 0x9f, 0x2c, 0x64, 0xa1,
+ 0xd9, 0xe2, 0x88, 0xce, 0xf6, 0x54, 0xfe, 0x1d,
+ 0x37, 0x5e, 0x6d, 0x73, 0x95, 0x54, 0x90, 0xf0,
+ 0x7b, 0xfa, 0xd4, 0x44, 0xac, 0xb2, 0x23, 0x9f,
+ 0x75, 0x36, 0xe2, 0x78, 0x62, 0x82, 0x80, 0xa4,
+ 0x23, 0x22, 0xc9, 0xbf, 0xc4, 0x36, 0xd1, 0x31,
+ 0x33, 0x8e, 0x64, 0xb4, 0xa9, 0x74, 0xa1, 0xcb,
+ 0x42, 0x8d, 0x60, 0xc7, 0xbb, 0x8e, 0x6e, 0x0f,
+ 0x36, 0x74, 0x8e, 0xf4, 0x08, 0x99, 0x06, 0x92,
+ 0xb1, 0x3f, 0xb3, 0xdd, 0xed, 0xf7, 0xc9, 0x02,
+ 0x03, 0x01, 0x00, 0x01,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static uint8_t v3_basic_auth_test_plaintext[] =
+ /* Version byte */
+ { 0x03,
+ /* Auth type (1 for REND_BASIC_AUTH) */
+ 0x01,
+ /* Auth len (must be 16 bytes for REND_BASIC_AUTH) */
+ 0x00, 0x10,
+ /* Auth data (a 16-byte dummy descriptor cookie) */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ /* Timestamp */
+ 0x50, 0x0b, 0xb5, 0xaa,
+ /* 4 bytes rendezvous point's IP address */
+ 0xc0, 0xa8, 0x00, 0x01,
+ /* 2 bytes rendezvous point's OR port */
+ 0x23, 0x5a,
+ /* 20 bytes dummy rendezvous point's identity digest */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 2 bytes length of onion key */
+ 0x00, 0x8c,
+ /* Onion key (140 bytes taken from live test) */
+ 0x30, 0x81, 0x89, 0x02, 0x81, 0x81, 0x00, 0xb1,
+ 0xcd, 0x46, 0xa9, 0x18, 0xd2, 0x0f, 0x01, 0xf8,
+ 0xb2, 0xad, 0xa4, 0x79, 0xb4, 0xbb, 0x4b, 0xf4,
+ 0x54, 0x1e, 0x3f, 0x03, 0x54, 0xcf, 0x7c, 0xb6,
+ 0xb5, 0xf0, 0xfe, 0xed, 0x4b, 0x7d, 0xd7, 0x61,
+ 0xdb, 0x6d, 0xd9, 0x19, 0xe2, 0x72, 0x04, 0xaa,
+ 0x3e, 0x89, 0x26, 0x14, 0x62, 0x9a, 0x6c, 0x11,
+ 0x0b, 0x35, 0x99, 0x2c, 0x9f, 0x2c, 0x64, 0xa1,
+ 0xd9, 0xe2, 0x88, 0xce, 0xf6, 0x54, 0xfe, 0x1d,
+ 0x37, 0x5e, 0x6d, 0x73, 0x95, 0x54, 0x90, 0xf0,
+ 0x7b, 0xfa, 0xd4, 0x44, 0xac, 0xb2, 0x23, 0x9f,
+ 0x75, 0x36, 0xe2, 0x78, 0x62, 0x82, 0x80, 0xa4,
+ 0x23, 0x22, 0xc9, 0xbf, 0xc4, 0x36, 0xd1, 0x31,
+ 0x33, 0x8e, 0x64, 0xb4, 0xa9, 0x74, 0xa1, 0xcb,
+ 0x42, 0x8d, 0x60, 0xc7, 0xbb, 0x8e, 0x6e, 0x0f,
+ 0x36, 0x74, 0x8e, 0xf4, 0x08, 0x99, 0x06, 0x92,
+ 0xb1, 0x3f, 0xb3, 0xdd, 0xed, 0xf7, 0xc9, 0x02,
+ 0x03, 0x01, 0x00, 0x01,
+ /* 20 bytes dummy rendezvous cookie */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13,
+ /* 128 bytes dummy DH handshake data */
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00,
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x0f, 0x0e, 0x0d, 0x0c, 0x0b, 0x0a, 0x09, 0x08,
+ 0x07, 0x06, 0x05, 0x04, 0x03, 0x02, 0x01, 0x00 };
+
+static void do_decrypt_test(uint8_t *plaintext, size_t plaintext_len);
+static void do_early_parse_test(uint8_t *plaintext, size_t plaintext_len);
+static void do_late_parse_test(uint8_t *plaintext, size_t plaintext_len);
+static void do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase);
+static ssize_t make_intro_from_plaintext(
+ void *buf, size_t len, crypto_pk_t *key, void **cell_out);
+
+#define EARLY_PARSE_ONLY 1
+#define DECRYPT_ONLY 2
+#define ALL_PARSING 3
+
+static void
+do_early_parse_test(uint8_t *plaintext, size_t plaintext_len)
+{
+ do_parse_test(plaintext, plaintext_len, EARLY_PARSE_ONLY);
+}
+
+static void
+do_decrypt_test(uint8_t *plaintext, size_t plaintext_len)
+{
+ do_parse_test(plaintext, plaintext_len, DECRYPT_ONLY);
+}
+
+static void
+do_late_parse_test(uint8_t *plaintext, size_t plaintext_len)
+{
+ do_parse_test(plaintext, plaintext_len, ALL_PARSING);
+}
+
+/** Test utility function: checks that the <b>plaintext_len</b>-byte string at
+ * <b>plaintext</b> is at least superficially parseable.
+ */
+static void
+do_parse_test(uint8_t *plaintext, size_t plaintext_len, int phase)
+{
+ crypto_pk_t *k = NULL;
+ ssize_t r;
+ uint8_t *cell = NULL;
+ size_t cell_len;
+ rend_intro_cell_t *parsed_req = NULL;
+ char *err_msg = NULL;
+ char digest[DIGEST_LEN];
+
+ /* Get a key */
+ k = crypto_pk_new();
+ test_assert(k);
+ r = crypto_pk_read_private_key_from_string(k, AUTHORITY_SIGNKEY_1, -1);
+ test_assert(!r);
+
+ /* Get digest for future comparison */
+ r = crypto_pk_get_digest(k, digest);
+ test_assert(r >= 0);
+
+ /* Make a cell out of it */
+ r = make_intro_from_plaintext(
+ plaintext, plaintext_len,
+ k, (void **)(&cell));
+ test_assert(r > 0);
+ test_assert(cell);
+ cell_len = r;
+
+ /* Do early parsing */
+ parsed_req = rend_service_begin_parse_intro(cell, cell_len, 2, &err_msg);
+ test_assert(parsed_req);
+ test_assert(!err_msg);
+ test_memeq(parsed_req->pk, digest, DIGEST_LEN);
+ test_assert(parsed_req->ciphertext);
+ test_assert(parsed_req->ciphertext_len > 0);
+
+ if (phase == EARLY_PARSE_ONLY)
+ goto done;
+
+ /* Do decryption */
+ r = rend_service_decrypt_intro(parsed_req, k, &err_msg);
+ test_assert(!r);
+ test_assert(!err_msg);
+ test_assert(parsed_req->plaintext);
+ test_assert(parsed_req->plaintext_len > 0);
+
+ if (phase == DECRYPT_ONLY)
+ goto done;
+
+ /* Do late parsing */
+ r = rend_service_parse_intro_plaintext(parsed_req, &err_msg);
+ test_assert(!r);
+ test_assert(!err_msg);
+ test_assert(parsed_req->parsed);
+
+ done:
+ tor_free(cell);
+ crypto_pk_free(k);
+ rend_service_free_intro(parsed_req);
+ tor_free(err_msg);
+}
+
+/** Given the plaintext of the encrypted part of an INTRODUCE1/2 and a key,
+ * construct the encrypted cell for testing.
+ */
+
+static ssize_t
+make_intro_from_plaintext(
+ void *buf, size_t len, crypto_pk_t *key, void **cell_out)
+{
+ char *cell = NULL;
+ ssize_t cell_len = -1, r;
+ /* Assemble key digest and ciphertext, then construct the cell */
+ ssize_t ciphertext_size;
+
+ if (!(buf && key && len > 0 && cell_out)) goto done;
+
+ /*
+ * Figure out an upper bound on how big the ciphertext will be
+ * (see crypto_pk_public_hybrid_encrypt())
+ */
+ ciphertext_size = PKCS1_OAEP_PADDING_OVERHEAD;
+ ciphertext_size += crypto_pk_keysize(key);
+ ciphertext_size += CIPHER_KEY_LEN;
+ ciphertext_size += len;
+
+ /*
+ * Allocate space for the cell
+ */
+ cell = tor_malloc(DIGEST_LEN + ciphertext_size);
+
+ /* Compute key digest (will be first DIGEST_LEN octets of cell) */
+ r = crypto_pk_get_digest(key, cell);
+ test_assert(r >= 0);
+
+ /* Do encryption */
+ r = crypto_pk_public_hybrid_encrypt(
+ key, cell + DIGEST_LEN, ciphertext_size,
+ buf, len,
+ PK_PKCS1_OAEP_PADDING, 0);
+ test_assert(r >= 0);
+
+ /* Figure out cell length */
+ cell_len = DIGEST_LEN + r;
+
+ /* Output the cell */
+ *cell_out = cell;
+
+ done:
+ return cell_len;
+}
+
+/** Test v0 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v0(void)
+{
+ do_decrypt_test(v0_test_plaintext, sizeof(v0_test_plaintext));
+}
+
+/** Test v1 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v1(void)
+{
+ do_decrypt_test(v1_test_plaintext, sizeof(v1_test_plaintext));
+}
+
+/** Test v2 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v2(void)
+{
+ do_decrypt_test(v2_test_plaintext, sizeof(v2_test_plaintext));
+}
+
+/** Test v3 INTRODUCE2 parsing through decryption only
+ */
+
+static void
+test_introduce_decrypt_v3(void)
+{
+ do_decrypt_test(
+ v3_no_auth_test_plaintext, sizeof(v3_no_auth_test_plaintext));
+ do_decrypt_test(
+ v3_basic_auth_test_plaintext, sizeof(v3_basic_auth_test_plaintext));
+}
+
+/** Test v0 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v0(void)
+{
+ do_early_parse_test(v0_test_plaintext, sizeof(v0_test_plaintext));
+}
+
+/** Test v1 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v1(void)
+{
+ do_early_parse_test(v1_test_plaintext, sizeof(v1_test_plaintext));
+}
+
+/** Test v2 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v2(void)
+{
+ do_early_parse_test(v2_test_plaintext, sizeof(v2_test_plaintext));
+}
+
+/** Test v3 INTRODUCE2 parsing through early parsing only
+ */
+
+static void
+test_introduce_early_parse_v3(void)
+{
+ do_early_parse_test(
+ v3_no_auth_test_plaintext, sizeof(v3_no_auth_test_plaintext));
+ do_early_parse_test(
+ v3_basic_auth_test_plaintext, sizeof(v3_basic_auth_test_plaintext));
+}
+
+/** Test v0 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v0(void)
+{
+ do_late_parse_test(v0_test_plaintext, sizeof(v0_test_plaintext));
+}
+
+/** Test v1 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v1(void)
+{
+ do_late_parse_test(v1_test_plaintext, sizeof(v1_test_plaintext));
+}
+
+/** Test v2 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v2(void)
+{
+ do_late_parse_test(v2_test_plaintext, sizeof(v2_test_plaintext));
+}
+
+/** Test v3 INTRODUCE2 parsing
+ */
+
+static void
+test_introduce_late_parse_v3(void)
+{
+ do_late_parse_test(
+ v3_no_auth_test_plaintext, sizeof(v3_no_auth_test_plaintext));
+ do_late_parse_test(
+ v3_basic_auth_test_plaintext, sizeof(v3_basic_auth_test_plaintext));
+}
+
+#define INTRODUCE_LEGACY(name) \
+ { #name, legacy_test_helper, 0, &legacy_setup, test_introduce_ ## name }
+
+struct testcase_t introduce_tests[] = {
+ INTRODUCE_LEGACY(early_parse_v0),
+ INTRODUCE_LEGACY(early_parse_v1),
+ INTRODUCE_LEGACY(early_parse_v2),
+ INTRODUCE_LEGACY(early_parse_v3),
+ INTRODUCE_LEGACY(decrypt_v0),
+ INTRODUCE_LEGACY(decrypt_v1),
+ INTRODUCE_LEGACY(decrypt_v2),
+ INTRODUCE_LEGACY(decrypt_v3),
+ INTRODUCE_LEGACY(late_parse_v0),
+ INTRODUCE_LEGACY(late_parse_v1),
+ INTRODUCE_LEGACY(late_parse_v2),
+ INTRODUCE_LEGACY(late_parse_v3),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_logging.c b/src/test/test_logging.c
new file mode 100644
index 000000000..7e558f83b
--- /dev/null
+++ b/src/test/test_logging.c
@@ -0,0 +1,135 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include "or.h"
+#include "torlog.h"
+#include "test.h"
+
+static void
+dummy_cb_fn(int severity, uint32_t domain, const char *msg)
+{
+ (void)severity; (void)domain; (void)msg;
+}
+
+static void
+test_get_sigsafe_err_fds(void *arg)
+{
+ const int *fds;
+ int n;
+ log_severity_list_t include_bug, no_bug, no_bug2;
+ (void) arg;
+ init_logging();
+
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 1);
+ tt_int_op(fds[0], ==, STDERR_FILENO);
+
+ set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug);
+ set_log_severity_config(LOG_WARN, LOG_ERR, &no_bug);
+ no_bug.masks[0] &= ~(LD_BUG|LD_GENERAL);
+ set_log_severity_config(LOG_INFO, LOG_NOTICE, &no_bug2);
+
+ /* Add some logs; make sure the output is as expected. */
+ mark_logs_temp();
+ add_stream_log(&include_bug, "dummy-1", 3);
+ add_stream_log(&no_bug, "dummy-2", 4);
+ add_stream_log(&no_bug2, "dummy-3", 5);
+ add_callback_log(&include_bug, dummy_cb_fn);
+ close_temp_logs();
+ tor_log_update_sigsafe_err_fds();
+
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 2);
+ tt_int_op(fds[0], ==, STDERR_FILENO);
+ tt_int_op(fds[1], ==, 3);
+
+ /* Allow STDOUT to replace STDERR. */
+ add_stream_log(&include_bug, "dummy-4", STDOUT_FILENO);
+ tor_log_update_sigsafe_err_fds();
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 2);
+ tt_int_op(fds[0], ==, 3);
+ tt_int_op(fds[1], ==, STDOUT_FILENO);
+
+ /* But don't allow it to replace explicit STDERR. */
+ add_stream_log(&include_bug, "dummy-5", STDERR_FILENO);
+ tor_log_update_sigsafe_err_fds();
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 3);
+ tt_int_op(fds[0], ==, STDERR_FILENO);
+ tt_int_op(fds[1], ==, STDOUT_FILENO);
+ tt_int_op(fds[2], ==, 3);
+
+ /* Don't overflow the array. */
+ {
+ int i;
+ for (i=5; i<20; ++i) {
+ add_stream_log(&include_bug, "x-dummy", i);
+ }
+ }
+ tor_log_update_sigsafe_err_fds();
+ n = tor_log_get_sigsafe_err_fds(&fds);
+ tt_int_op(n, ==, 8);
+
+ done:
+ ;
+}
+
+static void
+test_sigsafe_err(void *arg)
+{
+ const char *fn=get_fname("sigsafe_err_log");
+ char *content=NULL;
+ log_severity_list_t include_bug;
+ smartlist_t *lines = smartlist_new();
+ (void)arg;
+
+ set_log_severity_config(LOG_WARN, LOG_ERR, &include_bug);
+
+ init_logging();
+ mark_logs_temp();
+ add_file_log(&include_bug, fn);
+ tor_log_update_sigsafe_err_fds();
+ close_temp_logs();
+
+ close(STDERR_FILENO);
+ log_err(LD_BUG, "Say, this isn't too cool.");
+ tor_log_err_sigsafe("Minimal.\n", NULL);
+
+ set_log_time_granularity(100*1000);
+ tor_log_err_sigsafe("Testing any ",
+ "attempt to manually log ",
+ "from a signal.\n",
+ NULL);
+ mark_logs_temp();
+ close_temp_logs();
+ close(STDERR_FILENO);
+ content = read_file_to_str(fn, 0, NULL);
+
+ tt_assert(content != NULL);
+ tor_split_lines(lines, content, (int)strlen(content));
+ tt_int_op(smartlist_len(lines), >=, 5);
+
+ if (strstr(smartlist_get(lines, 0), "opening new log file"))
+ smartlist_del_keeporder(lines, 0);
+ tt_assert(strstr(smartlist_get(lines, 0), "Say, this isn't too cool"));
+ /* Next line is blank. */
+ tt_assert(!strcmpstart(smartlist_get(lines, 1), "=============="));
+ tt_assert(!strcmpstart(smartlist_get(lines, 2), "Minimal."));
+ /* Next line is blank. */
+ tt_assert(!strcmpstart(smartlist_get(lines, 3), "=============="));
+ tt_str_op(smartlist_get(lines, 4), ==,
+ "Testing any attempt to manually log from a signal.");
+
+ done:
+ tor_free(content);
+ smartlist_free(lines);
+}
+
+struct testcase_t logging_tests[] = {
+ { "sigsafe_err_fds", test_get_sigsafe_err_fds, TT_FORK, NULL, NULL },
+ { "sigsafe_err", test_sigsafe_err, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_microdesc.c b/src/test/test_microdesc.c
index 89c578f4a..78f4823b8 100644
--- a/src/test/test_microdesc.c
+++ b/src/test/test_microdesc.c
@@ -1,11 +1,14 @@
-/* Copyright (c) 2010-2012, The Tor Project, Inc. */
+/* Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#include "or.h"
#include "config.h"
+#include "dirvote.h"
#include "microdesc.h"
+#include "routerlist.h"
+#include "routerparse.h"
#include "test.h"
@@ -208,11 +211,25 @@ test_md_cache(void *data)
md3 = NULL; /* it's history now! */
/* rebuild again, make sure it stays gone. */
- microdesc_cache_rebuild(mc, 1);
+ tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0);
tt_ptr_op(md1, ==, microdesc_cache_lookup_by_digest256(mc, d1));
tt_ptr_op(md2, ==, microdesc_cache_lookup_by_digest256(mc, d2));
tt_ptr_op(NULL, ==, microdesc_cache_lookup_by_digest256(mc, d3));
+ /* Re-add md3, and make sure we can rebuild the cache. */
+ added = microdescs_add_to_cache(mc, test_md3_noannotation, NULL,
+ SAVED_NOWHERE, 0, time3, NULL);
+ tt_int_op(1, ==, smartlist_len(added));
+ md3 = smartlist_get(added, 0);
+ smartlist_free(added);
+ added = NULL;
+ tt_int_op(md1->saved_location, ==, SAVED_IN_CACHE);
+ tt_int_op(md2->saved_location, ==, SAVED_IN_CACHE);
+ tt_int_op(md3->saved_location, ==, SAVED_IN_JOURNAL);
+
+ tt_int_op(microdesc_cache_rebuild(mc, 1), ==, 0);
+ tt_int_op(md3->saved_location, ==, SAVED_IN_CACHE);
+
done:
if (options)
tor_free(options->DataDirectory);
@@ -226,8 +243,158 @@ test_md_cache(void *data)
tor_free(fn);
}
+static const char truncated_md[] =
+ "@last-listed 2013-08-08 19:02:59\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBAM91vLFNaM+gGhnRIdz2Cm/Kl7Xz0cOobIdVzhS3cKUJfk867hCuTipS\n"
+ "NveLBzNopvgXKruAAzEj3cACxk6Q8lv5UWOGCD1UolkgsWSE62RBjap44g+oc9J1\n"
+ "RI9968xOTZw0VaBQg9giEILNXl0djoikQ+5tQRUvLDDa67gpa5Q1AgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "family @\n";
+
+static void
+test_md_cache_broken(void *data)
+{
+ or_options_t *options;
+ char *fn=NULL;
+ microdesc_cache_t *mc = NULL;
+
+ (void)data;
+
+ options = get_options_mutable();
+ tt_assert(options);
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup(get_fname("md_datadir_test2"));
+
+#ifdef _WIN32
+ tt_int_op(0, ==, mkdir(options->DataDirectory));
+#else
+ tt_int_op(0, ==, mkdir(options->DataDirectory, 0700));
+#endif
+
+ tor_asprintf(&fn, "%s"PATH_SEPARATOR"cached-microdescs",
+ options->DataDirectory);
+
+ write_str_to_file(fn, truncated_md, 1);
+
+ mc = get_microdesc_cache();
+ tt_assert(mc);
+
+ done:
+ if (options)
+ tor_free(options->DataDirectory);
+ tor_free(fn);
+ microdesc_free_all();
+}
+
+/* Generated by chutney. */
+static const char test_ri[] =
+ "router test005r 127.0.0.1 5005 0 7005\n"
+ "platform Tor 0.2.5.4-alpha-dev on Linux\n"
+ "protocols Link 1 2 Circuit 1\n"
+ "published 2014-05-06 22:57:55\n"
+ "fingerprint 09DE 3BA2 48C2 1C3F 3760 6CD3 8460 43A6 D5EC F59E\n"
+ "uptime 0\n"
+ "bandwidth 1073741824 1073741824 0\n"
+ "extra-info-digest 361F9428F9FA4DD854C03DDBCC159D0D9FA996C9\n"
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "signing-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANbGUC4802Ke6C3nOVxN0U0HhIRrs32cQFEL4v+UUMJPgjbistHBvOax\n"
+ "CWVR/sMXM2kKJeGThJ9ZUs2p9dDG4WHPUXgkMqzTTEeeFa7pQKU0brgbmLaJq0Pi\n"
+ "mxmqC5RkTHa5bQvq6QlSFprAEoovV27cWqBM9jVdV9hyc//6kwPzAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "hidden-service-dir\n"
+ "ntor-onion-key Gg73xH7+kTfT6bi1uNVx9gwQdQas9pROIfmc4NpAdC4=\n"
+ "reject *:25\n"
+ "reject *:119\n"
+ "reject *:135-139\n"
+ "reject *:445\n"
+ "reject *:563\n"
+ "reject *:1214\n"
+ "reject *:4661-4666\n"
+ "reject *:6346-6429\n"
+ "reject *:6699\n"
+ "reject *:6881-6999\n"
+ "accept *:*\n"
+ "router-signature\n"
+ "-----BEGIN SIGNATURE-----\n"
+ "ImzX5PF2vRCrG1YzGToyjoxYhgh1vtHEDjmP+tIS/iil1DSnHZNpHSuHp0L1jE9S\n"
+ "yZyrtKaqpBE/aecAM3j4CWCn/ipnAAQkHcyRLin1bYvqBtRzyopVCRlUhF+uWrLq\n"
+ "t0xkIE39ss/EwmQr7iIgkdVH4oRIMsjYnFFJBG26nYY=\n"
+ "-----END SIGNATURE-----\n";
+
+static const char test_md_8[] =
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n";
+
+static const char test_md_16[] =
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key Gg73xH7+kTfT6bi1uNVx9gwQdQas9pROIfmc4NpAdC4=\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n";
+
+static const char test_md_18[] =
+ "onion-key\n"
+ "-----BEGIN RSA PUBLIC KEY-----\n"
+ "MIGJAoGBANBJz8Vldl12aFeSMPLiA4nOetLDN0oxU8bB1SDhO7Uu2zdWYVYAF5J0\n"
+ "st7WvrVy/jA9v/fsezNAPskBanecHRSkdMTpkcgRPMHE7CTGEwIy1Yp1X4bPgDlC\n"
+ "VCnbs5Pcts5HnWEYNK7qHDAUn+IlmjOO+pTUY8uyq+GQVz6H9wFlAgMBAAE=\n"
+ "-----END RSA PUBLIC KEY-----\n"
+ "ntor-onion-key Gg73xH7+kTfT6bi1uNVx9gwQdQas9pROIfmc4NpAdC4=\n"
+ "p reject 25,119,135-139,445,563,1214,4661-4666,6346-6429,6699,6881-6999\n"
+ "id rsa1024 Cd47okjCHD83YGzThGBDptXs9Z4\n";
+
+static void
+test_md_generate(void *arg)
+{
+ routerinfo_t *ri;
+ microdesc_t *md = NULL;
+ (void)arg;
+
+ ri = router_parse_entry_from_string(test_ri, NULL, 0, 0, NULL);
+ tt_assert(ri);
+ md = dirvote_create_microdescriptor(ri, 8);
+ tt_str_op(md->body, ==, test_md_8);
+
+ /* XXXX test family lines. */
+ /* XXXX test method 14 for A lines. */
+ /* XXXX test method 15 for P6 lines. */
+
+ microdesc_free(md);
+ md = NULL;
+ md = dirvote_create_microdescriptor(ri, 16);
+ tt_str_op(md->body, ==, test_md_16);
+
+ microdesc_free(md);
+ md = NULL;
+ md = dirvote_create_microdescriptor(ri, 18);
+ tt_str_op(md->body, ==, test_md_18);
+
+ done:
+ microdesc_free(md);
+ routerinfo_free(ri);
+}
+
struct testcase_t microdesc_tests[] = {
{ "cache", test_md_cache, TT_FORK, NULL, NULL },
+ { "broken_cache", test_md_cache_broken, TT_FORK, NULL, NULL },
+ { "generate", test_md_generate, 0, NULL, NULL },
END_OF_TESTCASES
};
diff --git a/src/test/test_nodelist.c b/src/test/test_nodelist.c
new file mode 100644
index 000000000..600e6a89d
--- /dev/null
+++ b/src/test/test_nodelist.c
@@ -0,0 +1,71 @@
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/**
+ * \file test_nodelist.c
+ * \brief Unit tests for nodelist related functions.
+ **/
+
+#include "or.h"
+#include "nodelist.h"
+#include "test.h"
+
+/** Tese the case when node_get_by_id() returns NULL,
+ * node_get_verbose_nickname_by_id should return the base 16 encoding
+ * of the id.
+ */
+static void
+test_nodelist_node_get_verbose_nickname_by_id_null_node(void *arg)
+{
+ char vname[MAX_VERBOSE_NICKNAME_LEN+1];
+ const char ID[] = "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA";
+ (void) arg;
+
+ /* make sure node_get_by_id returns NULL */
+ test_assert(!node_get_by_id(ID));
+ node_get_verbose_nickname_by_id(ID, vname);
+ test_streq(vname, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
+ done:
+ return;
+}
+
+/** For routers without named flag, get_verbose_nickname should return
+ * "Fingerprint~Nickname"
+ */
+static void
+test_nodelist_node_get_verbose_nickname_not_named(void *arg)
+{
+ node_t mock_node;
+ routerstatus_t mock_rs;
+
+ char vname[MAX_VERBOSE_NICKNAME_LEN+1];
+
+ (void) arg;
+
+ memset(&mock_node, 0, sizeof(node_t));
+ memset(&mock_rs, 0, sizeof(routerstatus_t));
+
+ /* verbose nickname should use ~ instead of = for unnamed routers */
+ strlcpy(mock_rs.nickname, "TestOR", sizeof(mock_rs.nickname));
+ mock_node.rs = &mock_rs;
+ memcpy(mock_node.identity,
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA"
+ "\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA\xAA",
+ DIGEST_LEN);
+ node_get_verbose_nickname(&mock_node, vname);
+ test_streq(vname, "$AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA~TestOR");
+
+ done:
+ return;
+}
+
+#define NODE(name, flags) \
+ { #name, test_nodelist_##name, (flags), NULL, NULL }
+
+struct testcase_t nodelist_tests[] = {
+ NODE(node_get_verbose_nickname_by_id_null_node, TT_FORK),
+ NODE(node_get_verbose_nickname_not_named, TT_FORK),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_ntor_cl.c b/src/test/test_ntor_cl.c
new file mode 100644
index 000000000..f2b7a72ad
--- /dev/null
+++ b/src/test/test_ntor_cl.c
@@ -0,0 +1,170 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "orconfig.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#define ONION_NTOR_PRIVATE
+#include "or.h"
+#include "util.h"
+#include "compat.h"
+#include "crypto.h"
+#include "crypto_curve25519.h"
+#include "onion_ntor.h"
+
+#ifndef CURVE25519_ENABLED
+#error "This isn't going to work without curve25519."
+#endif
+
+#define N_ARGS(n) STMT_BEGIN { \
+ if (argc < (n)) { \
+ fprintf(stderr, "%s needs %d arguments.\n",argv[1],n); \
+ return 1; \
+ } \
+ } STMT_END
+#define BASE16(idx, var, n) STMT_BEGIN { \
+ const char *s = argv[(idx)]; \
+ if (base16_decode((char*)var, n, s, strlen(s)) < 0 ) { \
+ fprintf(stderr, "couldn't decode argument %d (%s)\n",idx,s); \
+ return 1; \
+ } \
+ } STMT_END
+#define INT(idx, var) STMT_BEGIN { \
+ var = atoi(argv[(idx)]); \
+ if (var <= 0) { \
+ fprintf(stderr, "bad integer argument %d (%s)\n",idx,argv[(idx)]); \
+ } \
+ } STMT_END
+
+static int
+client1(int argc, char **argv)
+{
+ /* client1 nodeID B -> msg state */
+ curve25519_public_key_t B;
+ uint8_t node_id[DIGEST_LEN];
+ ntor_handshake_state_t *state = NULL;
+ uint8_t msg[NTOR_ONIONSKIN_LEN];
+
+ char buf[1024];
+
+ N_ARGS(4);
+ BASE16(2, node_id, DIGEST_LEN);
+ BASE16(3, B.public_key, CURVE25519_PUBKEY_LEN);
+
+ if (onion_skin_ntor_create(node_id, &B, &state, msg)<0) {
+ fprintf(stderr, "handshake failed");
+ return 2;
+ }
+
+ base16_encode(buf, sizeof(buf), (const char*)msg, sizeof(msg));
+ printf("%s\n", buf);
+ base16_encode(buf, sizeof(buf), (void*)state, sizeof(*state));
+ printf("%s\n", buf);
+
+ ntor_handshake_state_free(state);
+ return 0;
+}
+
+static int
+server1(int argc, char **argv)
+{
+ uint8_t msg_in[NTOR_ONIONSKIN_LEN];
+ curve25519_keypair_t kp;
+ di_digest256_map_t *keymap=NULL;
+ uint8_t node_id[DIGEST_LEN];
+ int keybytes;
+
+ uint8_t msg_out[NTOR_REPLY_LEN];
+ uint8_t *keys = NULL;
+ char *hexkeys = NULL;
+ int result = 0;
+
+ char buf[256];
+
+ /* server1: b nodeID msg N -> msg keys */
+ N_ARGS(6);
+ BASE16(2, kp.seckey.secret_key, CURVE25519_SECKEY_LEN);
+ BASE16(3, node_id, DIGEST_LEN);
+ BASE16(4, msg_in, NTOR_ONIONSKIN_LEN);
+ INT(5, keybytes);
+
+ curve25519_public_key_generate(&kp.pubkey, &kp.seckey);
+ dimap_add_entry(&keymap, kp.pubkey.public_key, &kp);
+
+ keys = tor_malloc(keybytes);
+ hexkeys = tor_malloc(keybytes*2+1);
+ if (onion_skin_ntor_server_handshake(
+ msg_in, keymap, NULL, node_id, msg_out, keys,
+ (size_t)keybytes)<0) {
+ fprintf(stderr, "handshake failed");
+ result = 2;
+ goto done;
+ }
+
+ base16_encode(buf, sizeof(buf), (const char*)msg_out, sizeof(msg_out));
+ printf("%s\n", buf);
+ base16_encode(hexkeys, keybytes*2+1, (const char*)keys, keybytes);
+ printf("%s\n", hexkeys);
+
+ done:
+ tor_free(keys);
+ tor_free(hexkeys);
+ return result;
+}
+
+static int
+client2(int argc, char **argv)
+{
+ struct ntor_handshake_state_t state;
+ uint8_t msg[NTOR_REPLY_LEN];
+ int keybytes;
+ uint8_t *keys;
+ char *hexkeys;
+ int result = 0;
+
+ N_ARGS(5);
+ BASE16(2, (&state), sizeof(state));
+ BASE16(3, msg, sizeof(msg));
+ INT(4, keybytes);
+
+ keys = tor_malloc(keybytes);
+ hexkeys = tor_malloc(keybytes*2+1);
+ if (onion_skin_ntor_client_handshake(&state, msg, keys, keybytes)<0) {
+ fprintf(stderr, "handshake failed");
+ result = 2;
+ goto done;
+ }
+
+ base16_encode(hexkeys, keybytes*2+1, (const char*)keys, keybytes);
+ printf("%s\n", hexkeys);
+
+ done:
+ tor_free(keys);
+ tor_free(hexkeys);
+ return result;
+}
+
+int
+main(int argc, char **argv)
+{
+ /*
+ client1: nodeID B -> msg state
+ server1: b nodeID msg N -> msg keys
+ client2: state msg N -> keys
+ */
+ if (argc < 2) {
+ fprintf(stderr, "I need arguments. Read source for more info.\n");
+ return 1;
+ } else if (!strcmp(argv[1], "client1")) {
+ return client1(argc, argv);
+ } else if (!strcmp(argv[1], "server1")) {
+ return server1(argc, argv);
+ } else if (!strcmp(argv[1], "client2")) {
+ return client2(argc, argv);
+ } else {
+ fprintf(stderr, "What's a %s?\n", argv[1]);
+ return 1;
+ }
+}
+
diff --git a/src/test/test_oom.c b/src/test/test_oom.c
new file mode 100644
index 000000000..32f4803bb
--- /dev/null
+++ b/src/test/test_oom.c
@@ -0,0 +1,372 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Unit tests for OOM handling logic */
+
+#define RELAY_PRIVATE
+#define BUFFERS_PRIVATE
+#define CIRCUITLIST_PRIVATE
+#define CONNECTION_PRIVATE
+#include "or.h"
+#include "buffers.h"
+#include "circuitlist.h"
+#include "compat_libevent.h"
+#include "connection.h"
+#include "config.h"
+#ifdef ENABLE_MEMPOOLS
+#include "mempool.h"
+#endif
+#include "relay.h"
+#include "test.h"
+
+/* small replacement mock for circuit_mark_for_close_ to avoid doing all
+ * the other bookkeeping that comes with marking circuits. */
+static void
+circuit_mark_for_close_dummy_(circuit_t *circ, int reason, int line,
+ const char *file)
+{
+ (void) reason;
+ if (circ->marked_for_close) {
+ TT_FAIL(("Circuit already marked for close at %s:%d, but we are marking "
+ "it again at %s:%d",
+ circ->marked_for_close_file, (int)circ->marked_for_close,
+ file, line));
+ }
+
+ circ->marked_for_close = line;
+ circ->marked_for_close_file = file;
+}
+
+static circuit_t *
+dummy_or_circuit_new(int n_p_cells, int n_n_cells)
+{
+ or_circuit_t *circ = or_circuit_new(0, NULL);
+ int i;
+ cell_t cell;
+
+ for (i=0; i < n_p_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ), &circ->p_chan_cells,
+ 0, &cell, 1, 0);
+ }
+
+ for (i=0; i < n_n_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ),
+ &TO_CIRCUIT(circ)->n_chan_cells,
+ 1, &cell, 1, 0);
+ }
+
+ TO_CIRCUIT(circ)->purpose = CIRCUIT_PURPOSE_OR;
+ return TO_CIRCUIT(circ);
+}
+
+static circuit_t *
+dummy_origin_circuit_new(int n_cells)
+{
+ origin_circuit_t *circ = origin_circuit_new();
+ int i;
+ cell_t cell;
+
+ for (i=0; i < n_cells; ++i) {
+ crypto_rand((void*)&cell, sizeof(cell));
+ cell_queue_append_packed_copy(TO_CIRCUIT(circ),
+ &TO_CIRCUIT(circ)->n_chan_cells,
+ 1, &cell, 1, 0);
+ }
+
+ TO_CIRCUIT(circ)->purpose = CIRCUIT_PURPOSE_C_GENERAL;
+ return TO_CIRCUIT(circ);
+}
+
+static void
+add_bytes_to_buf(generic_buffer_t *buf, size_t n_bytes)
+{
+ char b[3000];
+
+ while (n_bytes) {
+ size_t this_add = n_bytes > sizeof(b) ? sizeof(b) : n_bytes;
+ crypto_rand(b, this_add);
+ generic_buffer_add(buf, b, this_add);
+ n_bytes -= this_add;
+ }
+}
+
+static edge_connection_t *
+dummy_edge_conn_new(circuit_t *circ,
+ int type, size_t in_bytes, size_t out_bytes)
+{
+ edge_connection_t *conn;
+
+ if (type == CONN_TYPE_EXIT)
+ conn = edge_connection_new(type, AF_INET);
+ else
+ conn = ENTRY_TO_EDGE_CONN(entry_connection_new(type, AF_INET));
+
+ /* We add these bytes directly to the buffers, to avoid all the
+ * edge connection read/write machinery. */
+ add_bytes_to_buf(TO_CONN(conn)->inbuf, in_bytes);
+ add_bytes_to_buf(TO_CONN(conn)->outbuf, out_bytes);
+
+ conn->on_circuit = circ;
+ if (type == CONN_TYPE_EXIT) {
+ or_circuit_t *oc = TO_OR_CIRCUIT(circ);
+ conn->next_stream = oc->n_streams;
+ oc->n_streams = conn;
+ } else {
+ origin_circuit_t *oc = TO_ORIGIN_CIRCUIT(circ);
+ conn->next_stream = oc->p_streams;
+ oc->p_streams = conn;
+ }
+
+ return conn;
+}
+
+/** Run unit tests for buffers.c */
+static void
+test_oom_circbuf(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ circuit_t *c1 = NULL, *c2 = NULL, *c3 = NULL, *c4 = NULL;
+ struct timeval tv = { 1389631048, 0 };
+
+ (void) arg;
+
+ MOCK(circuit_mark_for_close_, circuit_mark_for_close_dummy_);
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ /* Far too low for real life. */
+ options->MaxMemInQueues = 256*packed_cell_mem_cost();
+ options->CellStatistics = 0;
+
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We don't start out OOM. */
+ tt_int_op(cell_queues_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* Now we're going to fake up some circuits and get them added to the global
+ circuit list. */
+ tv.tv_usec = 0;
+ tor_gettimeofday_cache_set(&tv);
+ c1 = dummy_origin_circuit_new(30);
+ tv.tv_usec = 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c2 = dummy_or_circuit_new(20, 20);
+
+#ifdef ENABLE_MEMPOOLS
+ tt_int_op(packed_cell_mem_cost(), ==,
+ sizeof(packed_cell_t) + MP_POOL_ITEM_OVERHEAD);
+#else
+ tt_int_op(packed_cell_mem_cost(), ==,
+ sizeof(packed_cell_t));
+#endif /* ENABLE_MEMPOOLS */
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 70);
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */
+
+ tv.tv_usec = 20*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c3 = dummy_or_circuit_new(100, 85);
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We are still not OOM */
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 255);
+
+ tv.tv_usec = 30*1000;
+ tor_gettimeofday_cache_set(&tv);
+ /* Adding this cell will trigger our OOM handler. */
+ c4 = dummy_or_circuit_new(2, 0);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 257);
+
+ tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+
+ tt_assert(c1->marked_for_close);
+ tt_assert(! c2->marked_for_close);
+ tt_assert(! c3->marked_for_close);
+ tt_assert(! c4->marked_for_close);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * (257 - 30));
+
+ circuit_free(c1);
+ tv.tv_usec = 0;
+ tor_gettimeofday_cache_set(&tv); /* go back in time */
+ c1 = dummy_or_circuit_new(90, 0);
+
+ tv.tv_usec = 40*1000; /* go back to the future */
+ tor_gettimeofday_cache_set(&tv);
+
+ tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+
+ tt_assert(c1->marked_for_close);
+ tt_assert(! c2->marked_for_close);
+ tt_assert(! c3->marked_for_close);
+ tt_assert(! c4->marked_for_close);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * (257 - 30));
+
+ done:
+ circuit_free(c1);
+ circuit_free(c2);
+ circuit_free(c3);
+ circuit_free(c4);
+
+ UNMOCK(circuit_mark_for_close_);
+}
+
+/** Run unit tests for buffers.c */
+static void
+test_oom_streambuf(void *arg)
+{
+ or_options_t *options = get_options_mutable();
+ circuit_t *c1 = NULL, *c2 = NULL, *c3 = NULL, *c4 = NULL, *c5 = NULL;
+ struct timeval tv = { 1389641159, 0 };
+ uint32_t tvms;
+ int i;
+ smartlist_t *edgeconns = smartlist_new();
+
+ (void) arg;
+
+ MOCK(circuit_mark_for_close_, circuit_mark_for_close_dummy_);
+
+#ifdef ENABLE_MEMPOOLS
+ init_cell_pool();
+#endif /* ENABLE_MEMPOOLS */
+
+ /* Far too low for real life. */
+ options->MaxMemInQueues = 81*packed_cell_mem_cost() + 4096 * 34;
+ options->CellStatistics = 0;
+
+ tt_int_op(cell_queues_check_size(), ==, 0); /* We don't start out OOM. */
+ tt_int_op(cell_queues_get_total_allocation(), ==, 0);
+ tt_int_op(buf_get_total_allocation(), ==, 0);
+
+ /* Start all circuits with a bit of data queued in cells */
+ tv.tv_usec = 500*1000; /* go halfway into the second. */
+ tor_gettimeofday_cache_set(&tv);
+ c1 = dummy_or_circuit_new(10,10);
+ tv.tv_usec = 510*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c2 = dummy_origin_circuit_new(20);
+ tv.tv_usec = 520*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c3 = dummy_or_circuit_new(20,20);
+ tv.tv_usec = 530*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c4 = dummy_or_circuit_new(0,0);
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 80);
+
+ tv.tv_usec = 600*1000;
+ tor_gettimeofday_cache_set(&tv);
+
+ /* Add some connections to c1...c4. */
+ for (i = 0; i < 4; ++i) {
+ edge_connection_t *ec;
+ /* link it to a circuit */
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c1, CONN_TYPE_EXIT, 1000, 1000);
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c2, CONN_TYPE_AP, 1000, 1000);
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c4, CONN_TYPE_EXIT, 1000, 1000); /* Yes, 4 twice*/
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ tv.tv_usec += 10*1000;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c4, CONN_TYPE_EXIT, 1000, 1000);
+ smartlist_add(edgeconns, ec);
+ tt_assert(ec);
+ }
+
+ tv.tv_sec += 1;
+ tv.tv_usec = 0;
+ tvms = (uint32_t) tv_to_msec(&tv);
+
+ tt_int_op(circuit_max_queued_cell_age(c1, tvms), ==, 500);
+ tt_int_op(circuit_max_queued_cell_age(c2, tvms), ==, 490);
+ tt_int_op(circuit_max_queued_cell_age(c3, tvms), ==, 480);
+ tt_int_op(circuit_max_queued_cell_age(c4, tvms), ==, 0);
+
+ tt_int_op(circuit_max_queued_data_age(c1, tvms), ==, 390);
+ tt_int_op(circuit_max_queued_data_age(c2, tvms), ==, 380);
+ tt_int_op(circuit_max_queued_data_age(c3, tvms), ==, 0);
+ tt_int_op(circuit_max_queued_data_age(c4, tvms), ==, 370);
+
+ tt_int_op(circuit_max_queued_item_age(c1, tvms), ==, 500);
+ tt_int_op(circuit_max_queued_item_age(c2, tvms), ==, 490);
+ tt_int_op(circuit_max_queued_item_age(c3, tvms), ==, 480);
+ tt_int_op(circuit_max_queued_item_age(c4, tvms), ==, 370);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 80);
+ tt_int_op(buf_get_total_allocation(), ==, 4096*16*2);
+
+ /* Now give c4 a very old buffer of modest size */
+ {
+ edge_connection_t *ec;
+ tv.tv_sec -= 1;
+ tv.tv_usec = 0;
+ tor_gettimeofday_cache_set(&tv);
+ ec = dummy_edge_conn_new(c4, CONN_TYPE_EXIT, 1000, 1000);
+ tt_assert(ec);
+ smartlist_add(edgeconns, ec);
+ }
+ tt_int_op(buf_get_total_allocation(), ==, 4096*17*2);
+ tt_int_op(circuit_max_queued_item_age(c4, tvms), ==, 1000);
+
+ tt_int_op(cell_queues_check_size(), ==, 0);
+
+ /* And run over the limit. */
+ tv.tv_usec = 800*1000;
+ tor_gettimeofday_cache_set(&tv);
+ c5 = dummy_or_circuit_new(0,5);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 85);
+ tt_int_op(buf_get_total_allocation(), ==, 4096*17*2);
+
+ tt_int_op(cell_queues_check_size(), ==, 1); /* We are now OOM */
+
+ /* C4 should have died. */
+ tt_assert(! c1->marked_for_close);
+ tt_assert(! c2->marked_for_close);
+ tt_assert(! c3->marked_for_close);
+ tt_assert(c4->marked_for_close);
+ tt_assert(! c5->marked_for_close);
+
+ tt_int_op(cell_queues_get_total_allocation(), ==,
+ packed_cell_mem_cost() * 85);
+ tt_int_op(buf_get_total_allocation(), ==, 4096*8*2);
+
+ done:
+ circuit_free(c1);
+ circuit_free(c2);
+ circuit_free(c3);
+ circuit_free(c4);
+ circuit_free(c5);
+
+ SMARTLIST_FOREACH(edgeconns, edge_connection_t *, ec,
+ connection_free_(TO_CONN(ec)));
+ smartlist_free(edgeconns);
+
+ UNMOCK(circuit_mark_for_close_);
+}
+
+struct testcase_t oom_tests[] = {
+ { "circbuf", test_oom_circbuf, TT_FORK, NULL, NULL },
+ { "streambuf", test_oom_streambuf, 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_policy.c b/src/test/test_policy.c
new file mode 100644
index 000000000..4cdcd034b
--- /dev/null
+++ b/src/test/test_policy.c
@@ -0,0 +1,437 @@
+/* Copyright (c) 2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#include "or.h"
+#include "router.h"
+#include "routerparse.h"
+#include "policies.h"
+#include "test.h"
+
+/* Helper: assert that short_policy parses and writes back out as itself,
+ or as <b>expected</b> if that's provided. */
+static void
+test_short_policy_parse(const char *input,
+ const char *expected)
+{
+ short_policy_t *short_policy = NULL;
+ char *out = NULL;
+
+ if (expected == NULL)
+ expected = input;
+
+ short_policy = parse_short_policy(input);
+ tt_assert(short_policy);
+ out = write_short_policy(short_policy);
+ tt_str_op(out, ==, expected);
+
+ done:
+ tor_free(out);
+ short_policy_free(short_policy);
+}
+
+/** Helper: Parse the exit policy string in <b>policy_str</b>, and make sure
+ * that policies_summarize() produces the string <b>expected_summary</b> from
+ * it. */
+static void
+test_policy_summary_helper(const char *policy_str,
+ const char *expected_summary)
+{
+ config_line_t line;
+ smartlist_t *policy = smartlist_new();
+ char *summary = NULL;
+ char *summary_after = NULL;
+ int r;
+ short_policy_t *short_policy = NULL;
+
+ line.key = (char*)"foo";
+ line.value = (char *)policy_str;
+ line.next = NULL;
+
+ r = policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1);
+ test_eq(r, 0);
+ summary = policy_summarize(policy, AF_INET);
+
+ test_assert(summary != NULL);
+ test_streq(summary, expected_summary);
+
+ short_policy = parse_short_policy(summary);
+ tt_assert(short_policy);
+ summary_after = write_short_policy(short_policy);
+ test_streq(summary, summary_after);
+
+ done:
+ tor_free(summary_after);
+ tor_free(summary);
+ if (policy)
+ addr_policy_list_free(policy);
+ short_policy_free(short_policy);
+}
+
+/** Run unit tests for generating summary lines of exit policies */
+static void
+test_policies_general(void *arg)
+{
+ int i;
+ smartlist_t *policy = NULL, *policy2 = NULL, *policy3 = NULL,
+ *policy4 = NULL, *policy5 = NULL, *policy6 = NULL,
+ *policy7 = NULL;
+ addr_policy_t *p;
+ tor_addr_t tar;
+ config_line_t line;
+ smartlist_t *sm = NULL;
+ char *policy_str = NULL;
+ short_policy_t *short_parsed = NULL;
+ (void)arg;
+
+ policy = smartlist_new();
+
+ p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
+ test_assert(p != NULL);
+ test_eq(ADDR_POLICY_REJECT, p->policy_type);
+ tor_addr_from_ipv4h(&tar, 0xc0a80000u);
+ test_eq(0, tor_addr_compare(&p->addr, &tar, CMP_EXACT));
+ test_eq(16, p->maskbits);
+ test_eq(1, p->prt_min);
+ test_eq(65535, p->prt_max);
+
+ smartlist_add(policy, p);
+
+ tor_addr_from_ipv4h(&tar, 0x01020304u);
+ test_assert(ADDR_POLICY_ACCEPTED ==
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+ tor_addr_make_unspec(&tar);
+ test_assert(ADDR_POLICY_PROBABLY_ACCEPTED ==
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+ tor_addr_from_ipv4h(&tar, 0xc0a80102);
+ test_assert(ADDR_POLICY_REJECTED ==
+ compare_tor_addr_to_addr_policy(&tar, 2, policy));
+
+ test_assert(0 == policies_parse_exit_policy(NULL, &policy2, 1, 1, 0, 1));
+ test_assert(policy2);
+
+ policy3 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("reject *:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy3, p);
+ p = router_parse_addr_policy_item_from_string("accept *:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy3, p);
+
+ policy4 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("accept *:443",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy4, p);
+ p = router_parse_addr_policy_item_from_string("accept *:443",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy4, p);
+
+ policy5 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("reject 0.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 169.254.0.0/16:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 127.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 192.168.0.0/16:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 10.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 172.16.0.0/12:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject 80.190.250.90:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject *:1-65534",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("reject *:65535",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+ p = router_parse_addr_policy_item_from_string("accept *:1-65535",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy5, p);
+
+ policy6 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("accept 43.3.0.0/9:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy6, p);
+
+ policy7 = smartlist_new();
+ p = router_parse_addr_policy_item_from_string("accept 0.0.0.0/8:*",-1);
+ test_assert(p != NULL);
+ smartlist_add(policy7, p);
+
+ test_assert(!exit_policy_is_general_exit(policy));
+ test_assert(exit_policy_is_general_exit(policy2));
+ test_assert(!exit_policy_is_general_exit(NULL));
+ test_assert(!exit_policy_is_general_exit(policy3));
+ test_assert(!exit_policy_is_general_exit(policy4));
+ test_assert(!exit_policy_is_general_exit(policy5));
+ test_assert(!exit_policy_is_general_exit(policy6));
+ test_assert(!exit_policy_is_general_exit(policy7));
+
+ test_assert(cmp_addr_policies(policy, policy2));
+ test_assert(cmp_addr_policies(policy, NULL));
+ test_assert(!cmp_addr_policies(policy2, policy2));
+ test_assert(!cmp_addr_policies(NULL, NULL));
+
+ test_assert(!policy_is_reject_star(policy2, AF_INET));
+ test_assert(policy_is_reject_star(policy, AF_INET));
+ test_assert(policy_is_reject_star(NULL, AF_INET));
+
+ addr_policy_list_free(policy);
+ policy = NULL;
+
+ /* make sure compacting logic works. */
+ policy = NULL;
+ line.key = (char*)"foo";
+ line.value = (char*)"accept *:80,reject private:*,reject *:*";
+ line.next = NULL;
+ test_assert(0 == policies_parse_exit_policy(&line, &policy, 1, 0, 0, 1));
+ test_assert(policy);
+ //test_streq(policy->string, "accept *:80");
+ //test_streq(policy->next->string, "reject *:*");
+ test_eq(smartlist_len(policy), 4);
+
+ /* test policy summaries */
+ /* check if we properly ignore private IP addresses */
+ test_policy_summary_helper("reject 192.168.0.0/16:*,"
+ "reject 0.0.0.0/8:*,"
+ "reject 10.0.0.0/8:*,"
+ "accept *:10-30,"
+ "accept *:90,"
+ "reject *:*",
+ "accept 10-30,90");
+ /* check all accept policies, and proper counting of rejects */
+ test_policy_summary_helper("reject 11.0.0.0/9:80,"
+ "reject 12.0.0.0/9:80,"
+ "reject 13.0.0.0/9:80,"
+ "reject 14.0.0.0/9:80,"
+ "accept *:*", "accept 1-65535");
+ test_policy_summary_helper("reject 11.0.0.0/9:80,"
+ "reject 12.0.0.0/9:80,"
+ "reject 13.0.0.0/9:80,"
+ "reject 14.0.0.0/9:80,"
+ "reject 15.0.0.0:81,"
+ "accept *:*", "accept 1-65535");
+ test_policy_summary_helper("reject 11.0.0.0/9:80,"
+ "reject 12.0.0.0/9:80,"
+ "reject 13.0.0.0/9:80,"
+ "reject 14.0.0.0/9:80,"
+ "reject 15.0.0.0:80,"
+ "accept *:*",
+ "reject 80");
+ /* no exits */
+ test_policy_summary_helper("accept 11.0.0.0/9:80,"
+ "reject *:*",
+ "reject 1-65535");
+ /* port merging */
+ test_policy_summary_helper("accept *:80,"
+ "accept *:81,"
+ "accept *:100-110,"
+ "accept *:111,"
+ "reject *:*",
+ "accept 80-81,100-111");
+ /* border ports */
+ test_policy_summary_helper("accept *:1,"
+ "accept *:3,"
+ "accept *:65535,"
+ "reject *:*",
+ "accept 1,3,65535");
+ /* holes */
+ test_policy_summary_helper("accept *:1,"
+ "accept *:3,"
+ "accept *:5,"
+ "accept *:7,"
+ "reject *:*",
+ "accept 1,3,5,7");
+ test_policy_summary_helper("reject *:1,"
+ "reject *:3,"
+ "reject *:5,"
+ "reject *:7,"
+ "accept *:*",
+ "reject 1,3,5,7");
+
+ /* Short policies with unrecognized formats should get accepted. */
+ test_short_policy_parse("accept fred,2,3-5", "accept 2,3-5");
+ test_short_policy_parse("accept 2,fred,3", "accept 2,3");
+ test_short_policy_parse("accept 2,fred,3,bob", "accept 2,3");
+ test_short_policy_parse("accept 2,-3,500-600", "accept 2,500-600");
+ /* Short policies with nil entries are accepted too. */
+ test_short_policy_parse("accept 1,,3", "accept 1,3");
+ test_short_policy_parse("accept 100-200,,", "accept 100-200");
+ test_short_policy_parse("reject ,1-10,,,,30-40", "reject 1-10,30-40");
+
+ /* Try parsing various broken short policies */
+#define TT_BAD_SHORT_POLICY(s) \
+ do { \
+ tt_ptr_op(NULL, ==, (short_parsed = parse_short_policy((s)))); \
+ } while (0)
+ TT_BAD_SHORT_POLICY("accept 200-199");
+ TT_BAD_SHORT_POLICY("");
+ TT_BAD_SHORT_POLICY("rejekt 1,2,3");
+ TT_BAD_SHORT_POLICY("reject ");
+ TT_BAD_SHORT_POLICY("reject");
+ TT_BAD_SHORT_POLICY("rej");
+ TT_BAD_SHORT_POLICY("accept 2,3,100000");
+ TT_BAD_SHORT_POLICY("accept 2,3x,4");
+ TT_BAD_SHORT_POLICY("accept 2,3x,4");
+ TT_BAD_SHORT_POLICY("accept 2-");
+ TT_BAD_SHORT_POLICY("accept 2-x");
+ TT_BAD_SHORT_POLICY("accept 1-,3");
+ TT_BAD_SHORT_POLICY("accept 1-,3");
+
+ /* Test a too-long policy. */
+ {
+ int i;
+ char *policy = NULL;
+ smartlist_t *chunks = smartlist_new();
+ smartlist_add(chunks, tor_strdup("accept "));
+ for (i=1; i<10000; ++i)
+ smartlist_add_asprintf(chunks, "%d,", i);
+ smartlist_add(chunks, tor_strdup("20000"));
+ policy = smartlist_join_strings(chunks, "", 0, NULL);
+ SMARTLIST_FOREACH(chunks, char *, ch, tor_free(ch));
+ smartlist_free(chunks);
+ short_parsed = parse_short_policy(policy);/* shouldn't be accepted */
+ tor_free(policy);
+ tt_ptr_op(NULL, ==, short_parsed);
+ }
+
+ /* truncation ports */
+ sm = smartlist_new();
+ for (i=1; i<2000; i+=2) {
+ char buf[POLICY_BUF_LEN];
+ tor_snprintf(buf, sizeof(buf), "reject *:%d", i);
+ smartlist_add(sm, tor_strdup(buf));
+ }
+ smartlist_add(sm, tor_strdup("accept *:*"));
+ policy_str = smartlist_join_strings(sm, ",", 0, NULL);
+ test_policy_summary_helper( policy_str,
+ "accept 2,4,6,8,10,12,14,16,18,20,22,24,26,28,30,32,34,36,38,40,42,44,"
+ "46,48,50,52,54,56,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,"
+ "92,94,96,98,100,102,104,106,108,110,112,114,116,118,120,122,124,126,128,"
+ "130,132,134,136,138,140,142,144,146,148,150,152,154,156,158,160,162,164,"
+ "166,168,170,172,174,176,178,180,182,184,186,188,190,192,194,196,198,200,"
+ "202,204,206,208,210,212,214,216,218,220,222,224,226,228,230,232,234,236,"
+ "238,240,242,244,246,248,250,252,254,256,258,260,262,264,266,268,270,272,"
+ "274,276,278,280,282,284,286,288,290,292,294,296,298,300,302,304,306,308,"
+ "310,312,314,316,318,320,322,324,326,328,330,332,334,336,338,340,342,344,"
+ "346,348,350,352,354,356,358,360,362,364,366,368,370,372,374,376,378,380,"
+ "382,384,386,388,390,392,394,396,398,400,402,404,406,408,410,412,414,416,"
+ "418,420,422,424,426,428,430,432,434,436,438,440,442,444,446,448,450,452,"
+ "454,456,458,460,462,464,466,468,470,472,474,476,478,480,482,484,486,488,"
+ "490,492,494,496,498,500,502,504,506,508,510,512,514,516,518,520,522");
+
+ done:
+ addr_policy_list_free(policy);
+ addr_policy_list_free(policy2);
+ addr_policy_list_free(policy3);
+ addr_policy_list_free(policy4);
+ addr_policy_list_free(policy5);
+ addr_policy_list_free(policy6);
+ addr_policy_list_free(policy7);
+ tor_free(policy_str);
+ if (sm) {
+ SMARTLIST_FOREACH(sm, char *, s, tor_free(s));
+ smartlist_free(sm);
+ }
+ short_policy_free(short_parsed);
+}
+
+static void
+test_dump_exit_policy_to_string(void *arg)
+{
+ char *ep;
+ addr_policy_t *policy_entry;
+
+ routerinfo_t *ri = tor_malloc_zero(sizeof(routerinfo_t));
+
+ (void)arg;
+
+ ri->policy_is_reject_star = 1;
+ ri->exit_policy = NULL; // expecting "reject *:*"
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("reject *:*",ep);
+
+ tor_free(ep);
+
+ ri->exit_policy = smartlist_new();
+ ri->policy_is_reject_star = 0;
+
+ policy_entry = router_parse_addr_policy_item_from_string("accept *:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*",ep);
+
+ tor_free(ep);
+
+ policy_entry = router_parse_addr_policy_item_from_string("reject *:25",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25",ep);
+
+ tor_free(ep);
+
+ policy_entry =
+ router_parse_addr_policy_item_from_string("reject 8.8.8.8:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*",ep);
+ tor_free(ep);
+
+ policy_entry =
+ router_parse_addr_policy_item_from_string("reject6 [FC00::]/7:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
+ "reject6 [fc00::]/7:*",ep);
+ tor_free(ep);
+
+ policy_entry =
+ router_parse_addr_policy_item_from_string("accept6 [c000::]/3:*",-1);
+
+ smartlist_add(ri->exit_policy,policy_entry);
+
+ ep = router_dump_exit_policy_to_string(ri,1,1);
+
+ test_streq("accept *:*\nreject *:25\nreject 8.8.8.8:*\n"
+ "reject6 [fc00::]/7:*\naccept6 [c000::]/3:*",ep);
+
+ done:
+
+ if (ri->exit_policy) {
+ SMARTLIST_FOREACH(ri->exit_policy, addr_policy_t *,
+ entry, addr_policy_free(entry));
+ smartlist_free(ri->exit_policy);
+ }
+ tor_free(ri);
+ tor_free(ep);
+}
+
+struct testcase_t policy_tests[] = {
+ { "router_dump_exit_policy_to_string", test_dump_exit_policy_to_string, 0,
+ NULL, NULL },
+ { "general", test_policies_general, 0, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_pt.c b/src/test/test_pt.c
index d3dadb9bf..f71627df1 100644
--- a/src/test/test_pt.c
+++ b/src/test/test_pt.c
@@ -1,13 +1,21 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
#define PT_PRIVATE
+#define UTIL_PRIVATE
+#define STATEFILE_PRIVATE
+#define CONTROL_PRIVATE
#include "or.h"
+#include "config.h"
+#include "confparse.h"
+#include "control.h"
#include "transports.h"
#include "circuitbuild.h"
+#include "util.h"
+#include "statefile.h"
#include "test.h"
static void
@@ -22,71 +30,163 @@ 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;
mp->transports = smartlist_new();
/* incomplete cmethod */
- strcpy(line,"CMETHOD trebuchet");
+ strlcpy(line,"CMETHOD trebuchet",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp);
/* wrong proxy type */
- strcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet dog 127.0.0.1:1999",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp);
/* wrong addrport */
- strcpy(line,"CMETHOD trebuchet socks4 abcd");
+ strlcpy(line,"CMETHOD trebuchet socks4 abcd",sizeof(line));
test_assert(parse_cmethod_line(line, mp) < 0);
reset_mp(mp);
/* correct line */
- strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ 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);
/* incomplete smethod */
- strcpy(line,"SMETHOD trebuchet");
+ strlcpy(line,"SMETHOD trebuchet",sizeof(line));
test_assert(parse_smethod_line(line, mp) < 0);
reset_mp(mp);
/* wrong addr type */
- strcpy(line,"SMETHOD trebuchet abcd");
+ strlcpy(line,"SMETHOD trebuchet abcd",sizeof(line));
test_assert(parse_smethod_line(line, mp) < 0);
reset_mp(mp);
/* cowwect */
- strcpy(line,"SMETHOD trebuchy 127.0.0.1:1999");
+ 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 */
- strcpy(line,"VERSION 666");
+ strlcpy(line,"VERSION 666",sizeof(line));
test_assert(parse_version(line, mp) < 0);
/* incomplete VERSION */
- strcpy(line,"VERSION ");
+ strlcpy(line,"VERSION ",sizeof(line));
test_assert(parse_version(line, mp) < 0);
/* correct VERSION */
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
test_assert(parse_version(line, mp) == 0);
done:
+ reset_mp(mp);
+ smartlist_free(mp->transports);
tor_free(mp);
}
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];
@@ -99,36 +199,254 @@ test_pt_protocol(void)
/* various wrong protocol runs: */
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_BROKEN);
reset_mp(mp);
- strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_BROKEN);
reset_mp(mp);
/* correct protocol run: */
- strcpy(line,"VERSION 1");
+ strlcpy(line,"VERSION 1",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
- strcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999");
+ strlcpy(line,"CMETHOD trebuchet socks5 127.0.0.1:1999",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_ACCEPTING_METHODS);
- strcpy(line,"CMETHODS DONE");
+ strlcpy(line,"CMETHODS DONE",sizeof(line));
handle_proxy_line(line, mp);
test_assert(mp->conf_state == PT_PROTO_CONFIGURED);
done:
+ reset_mp(mp);
+ smartlist_free(mp->transports);
+ tor_free(mp->argv[0]);
+ tor_free(mp->argv);
+ 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;
+}
+
+static int controlevent_n = 0;
+static uint16_t controlevent_event = 0;
+static smartlist_t *controlevent_msgs = NULL;
+
+static void
+send_control_event_string_replacement(uint16_t event, event_format_t which,
+ const char *msg)
+{
+ (void) which;
+ ++controlevent_n;
+ controlevent_event = event;
+ if (!controlevent_msgs)
+ controlevent_msgs = smartlist_new();
+ smartlist_add(controlevent_msgs, tor_strdup(msg));
+}
+
+/* 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);
+ MOCK(send_control_event_string,
+ send_control_event_string_replacement);
+
+ control_testing_set_global_event_mask(EVENT_TRANSPORT_LAUNCHED);
+
+ 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);
+
+ tt_int_op(controlevent_n, ==, 5);
+ tt_int_op(controlevent_event, ==, EVENT_TRANSPORT_LAUNCHED);
+ tt_int_op(smartlist_len(controlevent_msgs), ==, 5);
+ smartlist_sort_strings(controlevent_msgs);
+ tt_str_op(smartlist_get(controlevent_msgs, 0), ==,
+ "650 TRANSPORT_LAUNCHED server mock1 127.0.0.1 5551\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 1), ==,
+ "650 TRANSPORT_LAUNCHED server mock2 127.0.0.1 5552\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 2), ==,
+ "650 TRANSPORT_LAUNCHED server mock3 127.0.0.1 5553\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 3), ==,
+ "650 TRANSPORT_LAUNCHED server mock4 127.0.0.1 5554\r\n");
+ tt_str_op(smartlist_get(controlevent_msgs, 4), ==,
+ "650 TRANSPORT_LAUNCHED server mock5 127.0.0.1 5555\r\n");
+
+ { /* 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:
+ or_state_free(dummy_state);
+ UNMOCK(tor_get_lines_from_handle);
+ UNMOCK(tor_process_handle_destroy);
+ UNMOCK(get_or_state);
+ UNMOCK(send_control_event_string);
+ if (controlevent_msgs) {
+ SMARTLIST_FOREACH(controlevent_msgs, char *, cp, tor_free(cp));
+ smartlist_free(controlevent_msgs);
+ controlevent_msgs = NULL;
+ }
+ if (mp->transports) {
+ SMARTLIST_FOREACH(mp->transports, transport_t *, t, transport_free(t));
+ smartlist_free(mp->transports);
+ }
+ smartlist_free(mp->transports_to_launch);
+ tor_free(mp->process_handle);
+ tor_free(mp->argv[0]);
+ tor_free(mp->argv);
tor_free(mp);
}
@@ -138,6 +456,12 @@ test_pt_protocol(void)
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_relaycell.c b/src/test/test_relaycell.c
new file mode 100644
index 000000000..5deb36260
--- /dev/null
+++ b/src/test/test_relaycell.c
@@ -0,0 +1,249 @@
+/* Copyright (c) 2014, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+/* Unit tests for handling different kinds of relay cell */
+
+#define RELAY_PRIVATE
+#include "or.h"
+#include "config.h"
+#include "connection.h"
+#include "connection_edge.h"
+#include "relay.h"
+#include "test.h"
+
+static int srm_ncalls;
+static entry_connection_t *srm_conn;
+static int srm_atype;
+static size_t srm_alen;
+static int srm_answer_is_set;
+static uint8_t srm_answer[512];
+static int srm_ttl;
+static time_t srm_expires;
+
+/* Mock replacement for connection_ap_hannshake_socks_resolved() */
+static void
+socks_resolved_mock(entry_connection_t *conn,
+ int answer_type,
+ size_t answer_len,
+ const uint8_t *answer,
+ int ttl,
+ time_t expires)
+{
+ srm_ncalls++;
+ srm_conn = conn;
+ srm_atype = answer_type;
+ srm_alen = answer_len;
+ if (answer) {
+ memset(srm_answer, 0, sizeof(srm_answer));
+ memcpy(srm_answer, answer, answer_len < 512 ? answer_len : 512);
+ srm_answer_is_set = 1;
+ } else {
+ srm_answer_is_set = 0;
+ }
+ srm_ttl = ttl;
+ srm_expires = expires;
+}
+
+static int mum_ncalls;
+static entry_connection_t *mum_conn;
+static int mum_endreason;
+
+/* Mock replacement for connection_mark_unattached_ap_() */
+static void
+mark_unattached_mock(entry_connection_t *conn, int endreason,
+ int line, const char *file)
+{
+ ++mum_ncalls;
+ mum_conn = conn;
+ mum_endreason = endreason;
+ (void) line;
+ (void) file;
+}
+
+/* Tests for connection_edge_process_resolved_cell().
+
+ The point of ..process_resolved_cell() is to handle an incoming cell
+ on an entry connection, and call connection_mark_unattached_ap() and/or
+ connection_ap_handshake_socks_resolved().
+ */
+static void
+test_relaycell_resolved(void *arg)
+{
+ entry_connection_t *entryconn;
+ edge_connection_t *edgeconn;
+ cell_t cell;
+ relay_header_t rh;
+ int r;
+ or_options_t *options = get_options_mutable();
+
+#define SET_CELL(s) do { \
+ memset(&cell, 0, sizeof(cell)); \
+ memset(&rh, 0, sizeof(rh)); \
+ memcpy(cell.payload + RELAY_HEADER_SIZE, (s), sizeof((s))-1); \
+ rh.length = sizeof((s))-1; \
+ rh.command = RELAY_COMMAND_RESOLVED; \
+ } while (0)
+#define MOCK_RESET() do { \
+ srm_ncalls = mum_ncalls = 0; \
+ } while (0)
+#define ASSERT_MARK_CALLED(reason) do { \
+ tt_int_op(mum_ncalls, ==, 1); \
+ tt_ptr_op(mum_conn, ==, entryconn); \
+ tt_int_op(mum_endreason, ==, (reason)); \
+ } while (0)
+#define ASSERT_RESOLVED_CALLED(atype, answer, ttl, expires) do { \
+ tt_int_op(srm_ncalls, ==, 1); \
+ tt_ptr_op(srm_conn, ==, entryconn); \
+ tt_int_op(srm_atype, ==, (atype)); \
+ if (answer) { \
+ tt_int_op(srm_alen, ==, sizeof(answer)-1); \
+ tt_int_op(srm_alen, <, 512); \
+ tt_int_op(srm_answer_is_set, ==, 1); \
+ tt_mem_op(srm_answer, ==, answer, sizeof(answer)-1); \
+ } else { \
+ tt_int_op(srm_answer_is_set, ==, 0); \
+ } \
+ tt_int_op(srm_ttl, ==, ttl); \
+ tt_int_op(srm_expires, ==, expires); \
+ } while (0)
+
+ (void)arg;
+
+ MOCK(connection_mark_unattached_ap_, mark_unattached_mock);
+ MOCK(connection_ap_handshake_socks_resolved, socks_resolved_mock);
+
+ options->ClientDNSRejectInternalAddresses = 0;
+
+ SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */
+ "\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00"
+ /* IPv4: 18.0.0.1, ttl 512 */
+ "\x04\x04\x12\x00\x00\x01\x00\x00\x02\x00"
+ /* IPv6: 2003::3, ttl 1024 */
+ "\x06\x10"
+ "\x20\x02\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x03"
+ "\x00\x00\x04\x00");
+
+ entryconn = entry_connection_new(CONN_TYPE_AP, AF_INET);
+ edgeconn = ENTRY_TO_EDGE_CONN(entryconn);
+
+ /* Try with connection in non-RESOLVE_WAIT state: cell gets ignored */
+ MOCK_RESET();
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ tt_int_op(srm_ncalls, ==, 0);
+ tt_int_op(mum_ncalls, ==, 0);
+
+ /* Now put it in the right state. */
+ ENTRY_TO_CONN(entryconn)->state = AP_CONN_STATE_RESOLVE_WAIT;
+ entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ entryconn->ipv4_traffic_ok = 1;
+ entryconn->ipv6_traffic_ok = 1;
+ entryconn->prefer_ipv6_traffic = 0;
+
+ /* We prefer ipv4, so we should get the first ipv4 answer */
+ MOCK_RESET();
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x7f\x00\x01\x02", 256, -1);
+
+ /* But we may be discarding private answers. */
+ MOCK_RESET();
+ options->ClientDNSRejectInternalAddresses = 1;
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1);
+
+ /* now prefer ipv6, and get the first ipv6 answer */
+ entryconn->prefer_ipv6_traffic = 1;
+ MOCK_RESET();
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV6,
+ "\x20\x02\x00\x00\x00\x00\x00\x00"
+ "\x00\x00\x00\x00\x00\x00\x00\x03",
+ 1024, -1);
+
+ /* With a cell that only has IPv4, we report IPv4 even if we prefer IPv6 */
+ MOCK_RESET();
+ SET_CELL("\x04\x04\x12\x00\x00\x01\x00\x00\x02\x00");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_IPV4, "\x12\x00\x00\x01", 512, -1);
+
+ /* But if we don't allow IPv4, we report nothing if the cell contains only
+ * ipv4 */
+ MOCK_RESET();
+ entryconn->ipv4_traffic_ok = 0;
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1);
+
+ /* If we wanted hostnames, we report nothing, since we only had IPs. */
+ MOCK_RESET();
+ entryconn->ipv4_traffic_ok = 1;
+ entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE_PTR;
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR, NULL, -1, -1);
+
+ /* A hostname cell is fine though. */
+ MOCK_RESET();
+ SET_CELL("\x00\x0fwww.example.com\x00\x01\x00\x00");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_HOSTNAME, "www.example.com", 65536, -1);
+
+ /* error on malformed cell */
+ MOCK_RESET();
+ entryconn->socks_request->command = SOCKS_COMMAND_RESOLVE;
+ SET_CELL("\x04\x04\x01\x02\x03\x04"); /* no ttl */
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL);
+ tt_int_op(srm_ncalls, ==, 0);
+
+ /* error on all addresses private */
+ MOCK_RESET();
+ SET_CELL(/* IPv4: 127.0.1.2, ttl 256 */
+ "\x04\x04\x7f\x00\x01\x02\x00\x00\x01\x00"
+ /* IPv4: 192.168.1.1, ttl 256 */
+ "\x04\x04\xc0\xa8\x01\x01\x00\x00\x01\x00");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_TORPROTOCOL);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, 0, TIME_MAX);
+
+ /* Legit error code */
+ MOCK_RESET();
+ SET_CELL("\xf0\x15" "quiet and meaningless" "\x00\x00\x0f\xff");
+ r = connection_edge_process_resolved_cell(edgeconn, &cell, &rh);
+ tt_int_op(r, ==, 0);
+ ASSERT_MARK_CALLED(END_STREAM_REASON_DONE|
+ END_STREAM_REASON_FLAG_ALREADY_SOCKS_REPLIED);
+ ASSERT_RESOLVED_CALLED(RESOLVED_TYPE_ERROR_TRANSIENT, NULL, -1, -1);
+
+ done:
+ UNMOCK(connection_mark_unattached_ap_);
+ UNMOCK(connection_ap_handshake_socks_resolved);
+}
+
+struct testcase_t relaycell_tests[] = {
+ { "resolved", test_relaycell_resolved, TT_FORK, NULL, NULL },
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_replay.c b/src/test/test_replay.c
new file mode 100644
index 000000000..b48f582f5
--- /dev/null
+++ b/src/test/test_replay.c
@@ -0,0 +1,348 @@
+/* Copyright (c) 2012-2013, The Tor Project, Inc. */
+/* See LICENSE for licensing information */
+
+#define REPLAYCACHE_PRIVATE
+
+#include "orconfig.h"
+#include "or.h"
+#include "replaycache.h"
+#include "test.h"
+
+static const char *test_buffer =
+ "Lorem ipsum dolor sit amet, consectetur adipisici elit, sed do eiusmod"
+ " tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim"
+ " veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea"
+ " commodo consequat. Duis aute irure dolor in reprehenderit in voluptate"
+ " velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint"
+ " occaecat cupidatat non proident, sunt in culpa qui officia deserunt"
+ " mollit anim id est laborum.";
+
+static void
+test_replaycache_alloc(void)
+{
+ replaycache_t *r = NULL;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+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;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ 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:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_hit(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_age(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ result =
+ replaycache_add_and_test_internal(3000, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_elapsed(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+ time_t elapsed;
+
+ r = replaycache_new(600, 300);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), &elapsed);
+ test_eq(result, 1);
+ test_eq(elapsed, 100);
+
+ done:
+ if (r) replaycache_free(r);
+
+ return;
+}
+
+static void
+test_replaycache_noexpire(void)
+{
+ replaycache_t *r = NULL;
+ int result;
+
+ r = replaycache_new(0, 0);
+ test_assert(r != NULL);
+
+ result =
+ replaycache_add_and_test_internal(1200, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 0);
+
+ result =
+ replaycache_add_and_test_internal(1300, r, test_buffer,
+ strlen(test_buffer), NULL);
+ test_eq(result, 1);
+
+ result =
+ replaycache_add_and_test_internal(3000, r, test_buffer,
+ 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);
+
+ 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_routerkeys.c b/src/test/test_routerkeys.c
new file mode 100644
index 000000000..182e0f6f8
--- /dev/null
+++ b/src/test/test_routerkeys.c
@@ -0,0 +1,85 @@
+/* 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 "orconfig.h"
+#define ROUTER_PRIVATE
+#include "or.h"
+#include "config.h"
+#include "router.h"
+#include "util.h"
+#include "crypto.h"
+
+#include "test.h"
+
+static void
+test_routerkeys_write_fingerprint(void *arg)
+{
+ crypto_pk_t *key = pk_generate(2);
+ or_options_t *options = get_options_mutable();
+ const char *ddir = get_fname("write_fingerprint");
+ char *cp = NULL, *cp2 = NULL;
+ char fp[FINGERPRINT_LEN+1];
+
+ (void)arg;
+
+ tt_assert(key);
+
+ options->ORPort_set = 1; /* So that we can get the server ID key */
+ tor_free(options->DataDirectory);
+ options->DataDirectory = tor_strdup(ddir);
+ options->Nickname = tor_strdup("haflinger");
+ set_server_identity_key(key);
+ set_client_identity_key(crypto_pk_dup_key(key));
+
+ tt_int_op(0, ==, check_private_dir(ddir, CPD_CREATE, NULL));
+ tt_int_op(crypto_pk_cmp_keys(get_server_identity_key(),key),==,0);
+
+ /* Write fingerprint file */
+ tt_int_op(0, ==, router_write_fingerprint(0));
+ cp = read_file_to_str(get_fname("write_fingerprint/fingerprint"),
+ 0, NULL);
+ crypto_pk_get_fingerprint(key, fp, 0);
+ tor_asprintf(&cp2, "haflinger %s\n", fp);
+ tt_str_op(cp, ==, cp2);
+ tor_free(cp);
+ tor_free(cp2);
+
+ /* Write hashed-fingerprint file */
+ tt_int_op(0, ==, router_write_fingerprint(1));
+ cp = read_file_to_str(get_fname("write_fingerprint/hashed-fingerprint"),
+ 0, NULL);
+ crypto_pk_get_hashed_fingerprint(key, fp);
+ tor_asprintf(&cp2, "haflinger %s\n", fp);
+ tt_str_op(cp, ==, cp2);
+ tor_free(cp);
+ tor_free(cp2);
+
+ /* Replace outdated file */
+ write_str_to_file(get_fname("write_fingerprint/hashed-fingerprint"),
+ "junk goes here", 0);
+ tt_int_op(0, ==, router_write_fingerprint(1));
+ cp = read_file_to_str(get_fname("write_fingerprint/hashed-fingerprint"),
+ 0, NULL);
+ crypto_pk_get_hashed_fingerprint(key, fp);
+ tor_asprintf(&cp2, "haflinger %s\n", fp);
+ tt_str_op(cp, ==, cp2);
+ tor_free(cp);
+ tor_free(cp2);
+
+ done:
+ crypto_pk_free(key);
+ set_client_identity_key(NULL);
+ tor_free(cp);
+ tor_free(cp2);
+}
+
+#define TEST(name, flags) \
+ { #name , test_routerkeys_ ## name, (flags), NULL, NULL }
+
+struct testcase_t routerkeys_tests[] = {
+ TEST(write_fingerprint, TT_FORK),
+ 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_status.c b/src/test/test_status.c
new file mode 100644
index 000000000..46dd47313
--- /dev/null
+++ b/src/test/test_status.c
@@ -0,0 +1,1114 @@
+#define STATUS_PRIVATE
+#define HIBERNATE_PRIVATE
+#define LOG_PRIVATE
+#define REPHIST_PRIVATE
+
+#include <float.h>
+#include <math.h>
+
+#include "or.h"
+#include "torlog.h"
+#include "tor_queue.h"
+#include "status.h"
+#include "circuitlist.h"
+#include "config.h"
+#include "hibernate.h"
+#include "rephist.h"
+#include "relay.h"
+#include "router.h"
+#include "main.h"
+#include "nodelist.h"
+#include "statefile.h"
+#include "test.h"
+
+#define NS_MODULE status
+
+#define NS_SUBMODULE count_circuits
+
+/*
+ * Test that count_circuits() is correctly counting the number of
+ * global circuits.
+ */
+
+struct global_circuitlist_s mock_global_circuitlist =
+ TOR_LIST_HEAD_INITIALIZER(global_circuitlist);
+
+NS_DECL(struct global_circuitlist_s *, circuit_get_global_list, (void));
+
+static void
+NS(test_main)(void *arg)
+{
+ /* Choose origin_circuit_t wlog. */
+ origin_circuit_t *mock_circuit1, *mock_circuit2;
+ circuit_t *circ, *tmp;
+ int expected_circuits = 2, actual_circuits;
+
+ (void)arg;
+
+ mock_circuit1 = tor_malloc_zero(sizeof(origin_circuit_t));
+ mock_circuit2 = tor_malloc_zero(sizeof(origin_circuit_t));
+ TOR_LIST_INSERT_HEAD(
+ &mock_global_circuitlist, TO_CIRCUIT(mock_circuit1), head);
+ TOR_LIST_INSERT_HEAD(
+ &mock_global_circuitlist, TO_CIRCUIT(mock_circuit2), head);
+
+ NS_MOCK(circuit_get_global_list);
+
+ actual_circuits = count_circuits();
+
+ tt_assert(expected_circuits == actual_circuits);
+
+ done:
+ TOR_LIST_FOREACH_SAFE(
+ circ, NS(circuit_get_global_list)(), head, tmp);
+ tor_free(circ);
+ NS_UNMOCK(circuit_get_global_list);
+}
+
+static struct global_circuitlist_s *
+NS(circuit_get_global_list)(void)
+{
+ return &mock_global_circuitlist;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE secs_to_uptime
+
+/*
+ * Test that secs_to_uptime() is converting the number of seconds that
+ * Tor is up for into the appropriate string form containing hours and minutes.
+ */
+
+static void
+NS(test_main)(void *arg)
+{
+ const char *expected;
+ char *actual;
+ (void)arg;
+
+ expected = "0:00 hours";
+ actual = secs_to_uptime(0);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0:00 hours";
+ actual = secs_to_uptime(1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0:01 hours";
+ actual = secs_to_uptime(60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0:59 hours";
+ actual = secs_to_uptime(60 * 59);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1:00 hours";
+ actual = secs_to_uptime(60 * 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "23:59 hours";
+ actual = secs_to_uptime(60 * 60 * 23 + 60 * 59);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 day 0:00 hours";
+ actual = secs_to_uptime(60 * 60 * 23 + 60 * 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 day 0:00 hours";
+ actual = secs_to_uptime(86400 + 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 day 0:01 hours";
+ actual = secs_to_uptime(86400 + 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10 days 0:00 hours";
+ actual = secs_to_uptime(86400 * 10);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10 days 0:00 hours";
+ actual = secs_to_uptime(864000 + 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10 days 0:01 hours";
+ actual = secs_to_uptime(864000 + 60);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ done:
+ if (actual != NULL)
+ tor_free(actual);
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE bytes_to_usage
+
+/*
+ * Test that bytes_to_usage() is correctly converting the number of bytes that
+ * Tor has read/written into the appropriate string form containing kilobytes,
+ * megabytes, or gigabytes.
+ */
+
+static void
+NS(test_main)(void *arg)
+{
+ const char *expected;
+ char *actual;
+ (void)arg;
+
+ expected = "0 kB";
+ actual = bytes_to_usage(0);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "0 kB";
+ actual = bytes_to_usage(1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1 kB";
+ actual = bytes_to_usage(1024);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1023 kB";
+ actual = bytes_to_usage((1 << 20) - 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 MB";
+ actual = bytes_to_usage((1 << 20));
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 MB";
+ actual = bytes_to_usage((1 << 20) + 5242);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.01 MB";
+ actual = bytes_to_usage((1 << 20) + 5243);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1024.00 MB";
+ actual = bytes_to_usage((1 << 30) - 1);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 GB";
+ actual = bytes_to_usage((1 << 30));
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.00 GB";
+ actual = bytes_to_usage((1 << 30) + 5368709);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "1.01 GB";
+ actual = bytes_to_usage((1 << 30) + 5368710);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ expected = "10.00 GB";
+ actual = bytes_to_usage((U64_LITERAL(1) << 30) * 10L);
+ tt_str_op(actual, ==, expected);
+ tor_free(actual);
+
+ done:
+ if (actual != NULL)
+ tor_free(actual);
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, fails)
+
+/*
+ * Tests that log_heartbeat() fails when in the public server mode,
+ * not hibernating, and we couldn't get the current routerinfo.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(router_get_my_routerinfo);
+
+ expected = -1;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(router_get_my_routerinfo);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 2.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static const routerinfo_t *
+NS(router_get_my_routerinfo)(void)
+{
+ return NULL;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, not_in_consensus)
+
+/*
+ * Tests that log_heartbeat() logs appropriately if we are not in the cached
+ * consensus.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(const routerinfo_t *, router_get_my_routerinfo, (void));
+NS_DECL(const node_t *, node_get_by_id, (const char *identity_digest));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+
+static routerinfo_t *mock_routerinfo;
+extern int onion_handshakes_requested[MAX_ONION_HANDSHAKE_TYPE+1];
+extern int onion_handshakes_assigned[MAX_ONION_HANDSHAKE_TYPE+1];
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(router_get_my_routerinfo);
+ NS_MOCK(node_get_by_id);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+
+ log_global_min_severity_ = LOG_DEBUG;
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_TAP] = 1;
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_TAP] = 1;
+ onion_handshakes_requested[ONION_HANDSHAKE_TYPE_NTOR] = 1;
+ onion_handshakes_assigned[ONION_HANDSHAKE_TYPE_NTOR] = 1;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 3);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(router_get_my_routerinfo);
+ NS_UNMOCK(node_get_by_id);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ tor_free(mock_routerinfo);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static const routerinfo_t *
+NS(router_get_my_routerinfo)(void)
+{
+ mock_routerinfo = tor_malloc(sizeof(routerinfo_t));
+
+ return mock_routerinfo;
+}
+
+static const node_t *
+NS(node_get_by_id)(const char *identity_digest)
+{
+ (void)identity_digest;
+
+ return NULL;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: It seems like we are not in the cached consensus.");
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 2:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(
+ strstr(funcname, "rep_hist_log_circuit_handshake_stats"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Circuit handshake stats since last time: %d/%d TAP, %d/%d NTor.");
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes assigned (TAP) */
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes requested (TAP) */
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes assigned (NTOR) */
+ tt_int_op(va_arg(ap, int), ==, 1); /* handshakes requested (NTOR) */
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, simple)
+
+/*
+ * Tests that log_heartbeat() correctly logs heartbeat information
+ * normally.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+
+ log_global_min_severity_ = LOG_DEBUG;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 1;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
+ const char *suffix, const char *format, va_list ap)
+{
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, " We are currently hibernating.");
+
+ done:
+ ;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, calls_log_accounting)
+
+/*
+ * Tests that log_heartbeat() correctly logs heartbeat information
+ * and accounting information when configured.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+NS_DECL(or_state_t *, get_or_state, (void));
+NS_DECL(int, accounting_is_enabled, (const or_options_t *options));
+NS_DECL(time_t, accounting_get_end_time, (void));
+
+static or_state_t * NS(mock_state) = NULL;
+static or_options_t * NS(mock_options) = NULL;
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+ NS_MOCK(get_or_state);
+ NS_MOCK(accounting_is_enabled);
+ NS_MOCK(accounting_get_end_time);
+
+ log_global_min_severity_ = LOG_DEBUG;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 2);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ NS_UNMOCK(accounting_is_enabled);
+ NS_UNMOCK(accounting_get_end_time);
+ tor_free_(NS(mock_state));
+ tor_free_(NS(mock_options));
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ NS(mock_options) = tor_malloc_zero(sizeof(or_options_t));
+ NS(mock_options)->AccountingMax = 0;
+
+ return NS(mock_options);
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_accounting"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Accounting enabled. Sent: %s / %s, Received: %s / %s. "
+ "The current accounting interval ends on %s, in %s.");
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_max */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* acc_max */
+ /* format_local_iso_time uses local tz, just check mins and secs. */
+ tt_ptr_op(strstr(va_arg(ap, char *), ":01:00"), !=, NULL); /* end_buf */
+ tt_str_op(va_arg(ap, char *), ==, "0:01 hours"); /* remaining */
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static int
+NS(accounting_is_enabled)(const or_options_t *options)
+{
+ (void)options;
+
+ return 1;
+}
+
+static time_t
+NS(accounting_get_end_time)(void)
+{
+ return 60;
+}
+
+static or_state_t *
+NS(get_or_state)(void)
+{
+ NS(mock_state) = tor_malloc_zero(sizeof(or_state_t));
+ NS(mock_state)->AccountingBytesReadInInterval = 0;
+ NS(mock_state)->AccountingBytesWrittenInInterval = 0;
+
+ return NS(mock_state);
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, packaged_cell_fullness)
+
+/*
+ * Tests that log_heartbeat() correctly logs packaged cell
+ * fullness information.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+NS_DECL(int, accounting_is_enabled, (const or_options_t *options));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+ NS_MOCK(accounting_is_enabled);
+ log_global_min_severity_ = LOG_DEBUG;
+
+ stats_n_data_bytes_packaged = RELAY_PAYLOAD_SIZE;
+ stats_n_data_cells_packaged = 1;
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 2);
+
+ done:
+ stats_n_data_bytes_packaged = 0;
+ stats_n_data_cells_packaged = 0;
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ NS_UNMOCK(accounting_is_enabled);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 1.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain, const char *funcname,
+ const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Average packaged cell fullness: %2.3f%%");
+ tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1);
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static int
+NS(accounting_is_enabled)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+#define NS_SUBMODULE ASPECT(log_heartbeat, tls_write_overhead)
+
+/*
+ * Tests that log_heartbeat() correctly logs the TLS write overhead information
+ * when the TLS write overhead ratio exceeds 1.
+ */
+
+NS_DECL(double, tls_get_write_overhead_ratio, (void));
+NS_DECL(int, we_are_hibernating, (void));
+NS_DECL(const or_options_t *, get_options, (void));
+NS_DECL(int, public_server_mode, (const or_options_t *options));
+NS_DECL(long, get_uptime, (void));
+NS_DECL(uint64_t, get_bytes_read, (void));
+NS_DECL(uint64_t, get_bytes_written, (void));
+NS_DECL(void, logv, (int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap));
+NS_DECL(int, server_mode, (const or_options_t *options));
+NS_DECL(int, accounting_is_enabled, (const or_options_t *options));
+
+static void
+NS(test_main)(void *arg)
+{
+ int expected, actual;
+ (void)arg;
+
+ NS_MOCK(tls_get_write_overhead_ratio);
+ NS_MOCK(we_are_hibernating);
+ NS_MOCK(get_options);
+ NS_MOCK(public_server_mode);
+ NS_MOCK(get_uptime);
+ NS_MOCK(get_bytes_read);
+ NS_MOCK(get_bytes_written);
+ NS_MOCK(logv);
+ NS_MOCK(server_mode);
+ NS_MOCK(accounting_is_enabled);
+ stats_n_data_cells_packaged = 0;
+ log_global_min_severity_ = LOG_DEBUG;
+
+ expected = 0;
+ actual = log_heartbeat(0);
+
+ tt_int_op(actual, ==, expected);
+ tt_int_op(CALLED(logv), ==, 2);
+
+ done:
+ NS_UNMOCK(tls_get_write_overhead_ratio);
+ NS_UNMOCK(we_are_hibernating);
+ NS_UNMOCK(get_options);
+ NS_UNMOCK(public_server_mode);
+ NS_UNMOCK(get_uptime);
+ NS_UNMOCK(get_bytes_read);
+ NS_UNMOCK(get_bytes_written);
+ NS_UNMOCK(logv);
+ NS_UNMOCK(server_mode);
+ NS_UNMOCK(accounting_is_enabled);
+}
+
+static double
+NS(tls_get_write_overhead_ratio)(void)
+{
+ return 2.0;
+}
+
+static int
+NS(we_are_hibernating)(void)
+{
+ return 0;
+}
+
+static const or_options_t *
+NS(get_options)(void)
+{
+ return NULL;
+}
+
+static int
+NS(public_server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static long
+NS(get_uptime)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_read)(void)
+{
+ return 0;
+}
+
+static uint64_t
+NS(get_bytes_written)(void)
+{
+ return 0;
+}
+
+static void
+NS(logv)(int severity, log_domain_mask_t domain,
+ const char *funcname, const char *suffix, const char *format, va_list ap)
+{
+ switch (CALLED(logv))
+ {
+ case 0:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==,
+ "Heartbeat: Tor's uptime is %s, with %d circuits open. "
+ "I've sent %s and received %s.%s");
+ tt_str_op(va_arg(ap, char *), ==, "0:00 hours"); /* uptime */
+ tt_int_op(va_arg(ap, int), ==, 0); /* count_circuits() */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_sent */
+ tt_str_op(va_arg(ap, char *), ==, "0 kB"); /* bw_rcvd */
+ tt_str_op(va_arg(ap, char *), ==, ""); /* hibernating */
+ break;
+ case 1:
+ tt_int_op(severity, ==, LOG_NOTICE);
+ tt_int_op(domain, ==, LD_HEARTBEAT);
+ tt_ptr_op(strstr(funcname, "log_heartbeat"), !=, NULL);
+ tt_ptr_op(suffix, ==, NULL);
+ tt_str_op(format, ==, "TLS write overhead: %.f%%");
+ tt_int_op(fabs(va_arg(ap, double) - 100.0) <= DBL_EPSILON, ==, 1);
+ break;
+ default:
+ tt_abort_msg("unexpected call to logv()"); // TODO: prettyprint args
+ break;
+ }
+
+ done:
+ CALLED(logv)++;
+}
+
+static int
+NS(server_mode)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+static int
+NS(accounting_is_enabled)(const or_options_t *options)
+{
+ (void)options;
+
+ return 0;
+}
+
+#undef NS_SUBMODULE
+
+struct testcase_t status_tests[] = {
+ TEST_CASE(count_circuits),
+ TEST_CASE(secs_to_uptime),
+ TEST_CASE(bytes_to_usage),
+ TEST_CASE_ASPECT(log_heartbeat, fails),
+ TEST_CASE_ASPECT(log_heartbeat, simple),
+ TEST_CASE_ASPECT(log_heartbeat, not_in_consensus),
+ TEST_CASE_ASPECT(log_heartbeat, calls_log_accounting),
+ TEST_CASE_ASPECT(log_heartbeat, packaged_cell_fullness),
+ TEST_CASE_ASPECT(log_heartbeat, tls_write_overhead),
+ END_OF_TESTCASES
+};
+
diff --git a/src/test/test_util.c b/src/test/test_util.c
index 4f9eb73e0..c7fa14118 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -1,9 +1,10 @@
/* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
- * Copyright (c) 2007-2012, The Tor Project, Inc. */
+ * Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
+#define COMPAT_PRIVATE
#define CONTROL_PRIVATE
#define MEMPOOL_PRIVATE
#define UTIL_PRIVATE
@@ -11,12 +12,15 @@
#include "config.h"
#include "control.h"
#include "test.h"
+#ifdef ENABLE_MEMPOOLS
#include "mempool.h"
+#endif /* ENABLE_MEMPOOLS */
#include "memarea.h"
#ifdef _WIN32
#include <tchar.h>
#endif
+#include <math.h>
/* XXXX this is a minimal wrapper to make the unit tests compile with the
* changed tor_timegm interface. */
@@ -32,6 +36,176 @@ tor_timegm_wrapper(const struct tm *tm)
#define tor_timegm tor_timegm_wrapper
static void
+test_util_read_until_eof_impl(const char *fname, size_t file_len,
+ size_t read_limit)
+{
+ char *fifo_name = NULL;
+ char *test_str = NULL;
+ char *str = NULL;
+ size_t sz = 9999999;
+ int fd = -1;
+ int r;
+
+ fifo_name = tor_strdup(get_fname(fname));
+ test_str = tor_malloc(file_len);
+ crypto_rand(test_str, file_len);
+
+ r = write_bytes_to_file(fifo_name, test_str, file_len, 1);
+ tt_int_op(r, ==, 0);
+
+ fd = open(fifo_name, O_RDONLY|O_BINARY);
+ tt_int_op(fd, >=, 0);
+ str = read_file_to_str_until_eof(fd, read_limit, &sz);
+ tt_assert(str != NULL);
+
+ if (read_limit < file_len)
+ tt_int_op(sz, ==, read_limit);
+ else
+ tt_int_op(sz, ==, file_len);
+
+ test_mem_op(test_str, ==, str, sz);
+ test_assert(str[sz] == '\0');
+
+ done:
+ unlink(fifo_name);
+ tor_free(fifo_name);
+ tor_free(test_str);
+ tor_free(str);
+ if (fd >= 0)
+ close(fd);
+}
+
+static void
+test_util_read_file_eof_tiny_limit(void *arg)
+{
+ (void)arg;
+ // purposely set limit shorter than what we wrote to the FIFO to
+ // test the maximum, and that it puts the NUL in the right spot
+
+ test_util_read_until_eof_impl("tor_test_fifo_tiny", 5, 4);
+}
+
+static void
+test_util_read_file_eof_two_loops(void *arg)
+{
+ (void)arg;
+ // write more than 1024 bytes to the FIFO to test two passes through
+ // the loop in the method; if the re-alloc size is changed this
+ // should be updated as well.
+
+ test_util_read_until_eof_impl("tor_test_fifo_2k", 2048, 10000);
+}
+
+static void
+test_util_read_file_eof_zero_bytes(void *arg)
+{
+ (void)arg;
+ // zero-byte fifo
+ test_util_read_until_eof_impl("tor_test_fifo_empty", 0, 10000);
+}
+
+/* Test the basic expected behaviour for write_chunks_to_file.
+ * NOTE: This will need to be updated if we ever change the tempfile location
+ * or extension */
+static void
+test_util_write_chunks_to_file(void *arg)
+{
+ char *fname = NULL;
+ char *tempname = NULL;
+ char *str = NULL;
+ int r;
+ struct stat st;
+
+ /* These should be two different sizes to ensure the data is different
+ * between the data file and the temp file's 'known string' */
+ int temp_str_len = 1024;
+ int data_str_len = 512;
+ char *data_str = tor_malloc(data_str_len);
+ char *temp_str = tor_malloc(temp_str_len);
+
+ smartlist_t *chunks = smartlist_new();
+ sized_chunk_t c = {data_str, data_str_len/2};
+ sized_chunk_t c2 = {data_str + data_str_len/2, data_str_len/2};
+ (void)arg;
+
+ crypto_rand(temp_str, temp_str_len);
+ crypto_rand(data_str, data_str_len);
+
+ // Ensure it can write multiple chunks
+
+ smartlist_add(chunks, &c);
+ smartlist_add(chunks, &c2);
+
+ /*
+ * Check if it writes using a tempfile
+ */
+ fname = tor_strdup(get_fname("write_chunks_with_tempfile"));
+ tor_asprintf(&tempname, "%s.tmp", fname);
+
+ // write a known string to a file where the tempfile will be
+ r = write_bytes_to_file(tempname, temp_str, temp_str_len, 1);
+ tt_int_op(r, ==, 0);
+
+ // call write_chunks_to_file
+ r = write_chunks_to_file(fname, chunks, 1, 0);
+ tt_int_op(r, ==, 0);
+
+ // assert the file has been written (expected size)
+ str = read_file_to_str(fname, RFTS_BIN, &st);
+ tt_assert(str != NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, data_str_len);
+ test_mem_op(data_str, ==, str, data_str_len);
+ tor_free(str);
+
+ // assert that the tempfile is removed (should not leave artifacts)
+ str = read_file_to_str(tempname, RFTS_BIN|RFTS_IGNORE_MISSING, &st);
+ tt_assert(str == NULL);
+
+ // Remove old testfile for second test
+ r = unlink(fname);
+ tt_int_op(r, ==, 0);
+ tor_free(fname);
+ tor_free(tempname);
+
+ /*
+ * Check if it skips using a tempfile with flags
+ */
+ fname = tor_strdup(get_fname("write_chunks_with_no_tempfile"));
+ tor_asprintf(&tempname, "%s.tmp", fname);
+
+ // write a known string to a file where the tempfile will be
+ r = write_bytes_to_file(tempname, temp_str, temp_str_len, 1);
+ tt_int_op(r, ==, 0);
+
+ // call write_chunks_to_file with no_tempfile = true
+ r = write_chunks_to_file(fname, chunks, 1, 1);
+ tt_int_op(r, ==, 0);
+
+ // assert the file has been written (expected size)
+ str = read_file_to_str(fname, RFTS_BIN, &st);
+ tt_assert(str != NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, data_str_len);
+ test_mem_op(data_str, ==, str, data_str_len);
+ tor_free(str);
+
+ // assert the tempfile still contains the known string
+ str = read_file_to_str(tempname, RFTS_BIN, &st);
+ tt_assert(str != NULL);
+ tt_u64_op((uint64_t)st.st_size, ==, temp_str_len);
+ test_mem_op(temp_str, ==, str, temp_str_len);
+
+ done:
+ unlink(fname);
+ unlink(tempname);
+ smartlist_free(chunks);
+ tor_free(fname);
+ tor_free(tempname);
+ tor_free(str);
+ tor_free(data_str);
+ tor_free(temp_str);
+}
+
+static void
test_util_time(void)
{
struct timeval start, end;
@@ -152,6 +326,7 @@ test_util_time(void)
test_eq(-1, parse_iso_time("2011-03-30 23:59:62 GMT", &t_res));
test_eq(-1, parse_iso_time("1969-03-30 23:59:59 GMT", &t_res));
test_eq(-1, parse_iso_time("2011-00-30 23:59:59 GMT", &t_res));
+ test_eq(-1, parse_iso_time("2147483647-08-29 14:00:00", &t_res));
test_eq(-1, parse_iso_time("2011-03-30 23:59", &t_res));
/* Test tor_gettimeofday */
@@ -171,7 +346,7 @@ test_util_time(void)
tv.tv_sec = (time_t)1326296338;
tv.tv_usec = 3060;
- format_iso_time(timestr, tv.tv_sec);
+ format_iso_time(timestr, (time_t)tv.tv_sec);
test_streq("2012-01-11 15:38:58", timestr);
/* The output of format_local_iso_time will vary by timezone, and setting
our timezone for testing purposes would be a nontrivial flaky pain.
@@ -179,7 +354,7 @@ test_util_time(void)
format_local_iso_time(timestr, tv.tv_sec);
test_streq("2012-01-11 10:38:58", timestr);
*/
- format_iso_time_nospace(timestr, tv.tv_sec);
+ format_iso_time_nospace(timestr, (time_t)tv.tv_sec);
test_streq("2012-01-11T15:38:58", timestr);
test_eq(strlen(timestr), ISO_TIME_LEN);
format_iso_time_nospace_usec(timestr, &tv);
@@ -725,13 +900,71 @@ test_util_expand_filename(void)
}
#endif
+/** 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_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_pt_args("First rule:Do not use ;",";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "First rule:Do not use \\;");
+ tor_free(escaped_string);
+
+ /** Empty string. */
+ 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_pt_args(";\\;\\", ";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "\\;\\\\\\;\\\\");
+ tor_free(escaped_string);
+
+ escaped_string = tor_escape_str_for_pt_args(";", ";\\");
+ test_assert(escaped_string);
+ test_streq(escaped_string, "\\;");
+ tor_free(escaped_string);
+
+ done:
+ tor_free(escaped_string);
+}
+
+static void
+test_util_string_is_key_value(void *ptr)
+{
+ (void)ptr;
+ test_assert(string_is_key_value(LOG_WARN, "key=value"));
+ test_assert(string_is_key_value(LOG_WARN, "k=v"));
+ test_assert(string_is_key_value(LOG_WARN, "key="));
+ test_assert(string_is_key_value(LOG_WARN, "x="));
+ test_assert(string_is_key_value(LOG_WARN, "xx="));
+ test_assert(!string_is_key_value(LOG_WARN, "=value"));
+ test_assert(!string_is_key_value(LOG_WARN, "=x"));
+ test_assert(!string_is_key_value(LOG_WARN, "="));
+
+ /* ??? */
+ /* test_assert(!string_is_key_value(LOG_WARN, "===")); */
+ done:
+ ;
+}
+
/** Test basic string functionality. */
static void
test_util_strmisc(void)
{
char buf[1024];
int i;
- char *cp;
+ char *cp, *cp_tmp = NULL;
/* Test strl operations */
test_eq(5, strlcpy(buf, "Hello", 0));
@@ -796,6 +1029,8 @@ test_util_strmisc(void)
test_eq(0L, tor_parse_long("10",-2,0,100,NULL,NULL));
test_eq(68284L, tor_parse_long("10abc",16,0,70000,NULL,NULL));
test_eq(68284L, tor_parse_long("10ABC",16,0,70000,NULL,NULL));
+ test_eq(0, tor_parse_long("10ABC",-1,0,70000,&i,NULL));
+ test_eq(i, 0);
/* Test parse_ulong */
test_eq(0UL, tor_parse_ulong("",10,0,100,NULL,NULL));
@@ -807,6 +1042,8 @@ test_util_strmisc(void)
test_eq(0UL, tor_parse_ulong("8",8,0,100,NULL,NULL));
test_eq(50UL, tor_parse_ulong("50",10,50,100,NULL,NULL));
test_eq(0UL, tor_parse_ulong("-50",10,-100,100,NULL,NULL));
+ test_eq(0UL, tor_parse_ulong("50",-1,50,100,&i,NULL));
+ test_eq(0, i);
/* Test parse_uint64 */
test_assert(U64_LITERAL(10) == tor_parse_uint64("10 x",10,0,100, &i, &cp));
@@ -819,6 +1056,9 @@ test_util_strmisc(void)
test_assert(U64_LITERAL(0) ==
tor_parse_uint64("12345678901",10,500,INT32_MAX, &i, &cp));
test_eq(0, i);
+ test_assert(U64_LITERAL(0) ==
+ tor_parse_uint64("123",-1,0,INT32_MAX, &i, &cp));
+ test_eq(0, i);
{
/* Test parse_double */
@@ -852,7 +1092,7 @@ test_util_strmisc(void)
test_eq(i, 0);
test_eq(0UL, tor_parse_ulong(TOOBIG, 10, 0, ULONG_MAX, &i, NULL));
test_eq(i, 0);
- test_eq(U64_LITERAL(0), tor_parse_uint64(TOOBIG, 10,
+ tt_u64_op(U64_LITERAL(0), ==, tor_parse_uint64(TOOBIG, 10,
0, UINT64_MAX, &i, NULL));
test_eq(i, 0);
}
@@ -934,36 +1174,36 @@ test_util_strmisc(void)
/* Test strndup and memdup */
{
const char *s = "abcdefghijklmnopqrstuvwxyz";
- cp = tor_strndup(s, 30);
- test_streq(cp, s); /* same string, */
- test_neq(cp, s); /* but different pointers. */
- tor_free(cp);
+ cp_tmp = tor_strndup(s, 30);
+ test_streq(cp_tmp, s); /* same string, */
+ test_neq_ptr(cp_tmp, s); /* but different pointers. */
+ tor_free(cp_tmp);
- cp = tor_strndup(s, 5);
- test_streq(cp, "abcde");
- tor_free(cp);
+ cp_tmp = tor_strndup(s, 5);
+ test_streq(cp_tmp, "abcde");
+ tor_free(cp_tmp);
s = "a\0b\0c\0d\0e\0";
- cp = tor_memdup(s,10);
- test_memeq(cp, s, 10); /* same ram, */
- test_neq(cp, s); /* but different pointers. */
- tor_free(cp);
+ cp_tmp = tor_memdup(s,10);
+ test_memeq(cp_tmp, s, 10); /* same ram, */
+ test_neq_ptr(cp_tmp, s); /* but different pointers. */
+ tor_free(cp_tmp);
}
/* Test str-foo functions */
- cp = tor_strdup("abcdef");
- test_assert(tor_strisnonupper(cp));
- cp[3] = 'D';
- test_assert(!tor_strisnonupper(cp));
- tor_strupper(cp);
- test_streq(cp, "ABCDEF");
- tor_strlower(cp);
- test_streq(cp, "abcdef");
- test_assert(tor_strisnonupper(cp));
- test_assert(tor_strisprint(cp));
- cp[3] = 3;
- test_assert(!tor_strisprint(cp));
- tor_free(cp);
+ cp_tmp = tor_strdup("abcdef");
+ test_assert(tor_strisnonupper(cp_tmp));
+ cp_tmp[3] = 'D';
+ test_assert(!tor_strisnonupper(cp_tmp));
+ tor_strupper(cp_tmp);
+ test_streq(cp_tmp, "ABCDEF");
+ tor_strlower(cp_tmp);
+ test_streq(cp_tmp, "abcdef");
+ test_assert(tor_strisnonupper(cp_tmp));
+ test_assert(tor_strisprint(cp_tmp));
+ cp_tmp[3] = 3;
+ test_assert(!tor_strisprint(cp_tmp));
+ tor_free(cp_tmp);
/* Test memmem and memstr */
{
@@ -974,6 +1214,10 @@ test_util_strmisc(void)
test_assert(!tor_memmem(haystack, 4, "cde", 3));
haystack = "ababcad";
test_eq_ptr(tor_memmem(haystack, 7, "abc", 3), haystack + 2);
+ test_eq_ptr(tor_memmem(haystack, 7, "ad", 2), haystack + 5);
+ test_eq_ptr(tor_memmem(haystack, 7, "cad", 3), haystack + 4);
+ test_assert(!tor_memmem(haystack, 7, "dadad", 5));
+ test_assert(!tor_memmem(haystack, 7, "abcdefghij", 10));
/* memstr */
test_eq_ptr(tor_memstr(haystack, 7, "abc"), haystack + 2);
test_eq_ptr(tor_memstr(haystack, 7, "cad"), haystack + 4);
@@ -983,79 +1227,6 @@ test_util_strmisc(void)
test_assert(!tor_memstr(haystack, 7, "ababcade"));
}
- /* Test wrap_string */
- {
- smartlist_t *sl = smartlist_new();
- wrap_string(sl,
- "This is a test of string wrapping functionality: woot. "
- "a functionality? w00t w00t...!",
- 10, "", "");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp,
- "This is a\ntest of\nstring\nwrapping\nfunctional\nity: woot.\n"
- "a\nfunctional\nity? w00t\nw00t...!\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "This is a test of string wrapping functionality: woot.",
- 16, "### ", "# ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp,
- "### This is a\n# test of string\n# wrapping\n# functionality:\n"
- "# woot.\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "A test of string wrapping...", 6, "### ", "# ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp,
- "### A\n# test\n# of\n# stri\n# ng\n# wrap\n# ping\n# ...\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Wrapping test", 6, "#### ", "# ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "#### W\n# rapp\n# ing\n# test\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Small test", 6, "### ", "#### ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "### Sm\n#### a\n#### l\n#### l\n#### t\n#### e"
- "\n#### s\n#### t\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "First null", 6, NULL, "> ");
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "First\n> null\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Second null", 6, "> ", NULL);
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "> Seco\nnd\nnull\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_clear(sl);
-
- wrap_string(sl, "Both null", 6, NULL, NULL);
- cp = smartlist_join_strings(sl, "", 0, NULL);
- test_streq(cp, "Both\nnull\n");
- tor_free(cp);
- SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
- smartlist_free(sl);
-
- /* Can't test prefixes that have the same length as the line width, because
- the function has an assert */
- }
-
/* Test hex_str */
{
char binary_data[68];
@@ -1099,7 +1270,7 @@ test_util_strmisc(void)
tt_int_op(strcmp_len("blah", "", 0), ==, 0);
done:
- ;
+ tor_free(cp_tmp);
}
static void
@@ -1109,6 +1280,7 @@ test_util_pow2(void)
test_eq(tor_log2(64), 6);
test_eq(tor_log2(65), 6);
test_eq(tor_log2(63), 5);
+ test_eq(tor_log2(0), 0); /* incorrect mathematically, but as specified */
test_eq(tor_log2(1), 0);
test_eq(tor_log2(2), 1);
test_eq(tor_log2(3), 1);
@@ -1118,31 +1290,40 @@ test_util_pow2(void)
test_eq(tor_log2(UINT64_MAX), 63);
/* Test round_to_power_of_2 */
- test_eq(round_to_power_of_2(120), 128);
- test_eq(round_to_power_of_2(128), 128);
- test_eq(round_to_power_of_2(130), 128);
- test_eq(round_to_power_of_2(U64_LITERAL(40000000000000000)),
- U64_LITERAL(1)<<55);
- test_eq(round_to_power_of_2(0), 2);
+ tt_u64_op(round_to_power_of_2(120), ==, 128);
+ tt_u64_op(round_to_power_of_2(128), ==, 128);
+ tt_u64_op(round_to_power_of_2(130), ==, 128);
+ tt_u64_op(round_to_power_of_2(U64_LITERAL(40000000000000000)), ==,
+ U64_LITERAL(1)<<55);
+ tt_u64_op(round_to_power_of_2(U64_LITERAL(0xffffffffffffffff)), ==,
+ U64_LITERAL(1)<<63);
+ tt_u64_op(round_to_power_of_2(0), ==, 1);
+ tt_u64_op(round_to_power_of_2(1), ==, 1);
+ tt_u64_op(round_to_power_of_2(2), ==, 2);
+ tt_u64_op(round_to_power_of_2(3), ==, 2);
+ tt_u64_op(round_to_power_of_2(4), ==, 4);
+ tt_u64_op(round_to_power_of_2(5), ==, 4);
+ tt_u64_op(round_to_power_of_2(6), ==, 4);
+ tt_u64_op(round_to_power_of_2(7), ==, 8);
done:
;
}
/** mutex for thread test to stop the threads hitting data at the same time. */
-static tor_mutex_t *_thread_test_mutex = NULL;
+static tor_mutex_t *thread_test_mutex_ = NULL;
/** mutexes for the thread test to make sure that the threads have to
* interleave somewhat. */
-static tor_mutex_t *_thread_test_start1 = NULL,
- *_thread_test_start2 = NULL;
+static tor_mutex_t *thread_test_start1_ = NULL,
+ *thread_test_start2_ = NULL;
/** Shared strmap for the thread test. */
-static strmap_t *_thread_test_strmap = NULL;
+static strmap_t *thread_test_strmap_ = NULL;
/** The name of thread1 for the thread test */
-static char *_thread1_name = NULL;
+static char *thread1_name_ = NULL;
/** The name of thread2 for the thread test */
-static char *_thread2_name = NULL;
+static char *thread2_name_ = NULL;
-static void _thread_test_func(void* _s) ATTR_NORETURN;
+static void thread_test_func_(void* _s) ATTR_NORETURN;
/** How many iterations have the threads in the unit test run? */
static int t1_count = 0, t2_count = 0;
@@ -1150,9 +1331,9 @@ static int t1_count = 0, t2_count = 0;
/** Helper function for threading unit tests: This function runs in a
* subthread. It grabs its own mutex (start1 or start2) to make sure that it
* should start, then it repeatedly alters _test_thread_strmap protected by
- * _thread_test_mutex. */
+ * thread_test_mutex_. */
static void
-_thread_test_func(void* _s)
+thread_test_func_(void* _s)
{
char *s = _s;
int i, *count;
@@ -1160,12 +1341,12 @@ _thread_test_func(void* _s)
char buf[64];
char **cp;
if (!strcmp(s, "thread 1")) {
- m = _thread_test_start1;
- cp = &_thread1_name;
+ m = thread_test_start1_;
+ cp = &thread1_name_;
count = &t1_count;
} else {
- m = _thread_test_start2;
- cp = &_thread2_name;
+ m = thread_test_start2_;
+ cp = &thread2_name_;
count = &t2_count;
}
@@ -1175,14 +1356,14 @@ _thread_test_func(void* _s)
tor_mutex_acquire(m);
for (i=0; i<10000; ++i) {
- tor_mutex_acquire(_thread_test_mutex);
- strmap_set(_thread_test_strmap, "last to run", *cp);
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_set(thread_test_strmap_, "last to run", *cp);
++*count;
- tor_mutex_release(_thread_test_mutex);
+ tor_mutex_release(thread_test_mutex_);
}
- tor_mutex_acquire(_thread_test_mutex);
- strmap_set(_thread_test_strmap, s, *cp);
- tor_mutex_release(_thread_test_mutex);
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_set(thread_test_strmap_, s, *cp);
+ tor_mutex_release(thread_test_mutex_);
tor_mutex_release(m);
@@ -1207,67 +1388,67 @@ test_util_threads(void)
if (1)
return;
#endif
- _thread_test_mutex = tor_mutex_new();
- _thread_test_start1 = tor_mutex_new();
- _thread_test_start2 = tor_mutex_new();
- _thread_test_strmap = strmap_new();
+ thread_test_mutex_ = tor_mutex_new();
+ thread_test_start1_ = tor_mutex_new();
+ thread_test_start2_ = tor_mutex_new();
+ thread_test_strmap_ = strmap_new();
s1 = tor_strdup("thread 1");
s2 = tor_strdup("thread 2");
- tor_mutex_acquire(_thread_test_start1);
- tor_mutex_acquire(_thread_test_start2);
- spawn_func(_thread_test_func, s1);
- spawn_func(_thread_test_func, s2);
- tor_mutex_release(_thread_test_start2);
- tor_mutex_release(_thread_test_start1);
+ tor_mutex_acquire(thread_test_start1_);
+ tor_mutex_acquire(thread_test_start2_);
+ spawn_func(thread_test_func_, s1);
+ spawn_func(thread_test_func_, s2);
+ tor_mutex_release(thread_test_start2_);
+ tor_mutex_release(thread_test_start1_);
started = time(NULL);
while (!done) {
- tor_mutex_acquire(_thread_test_mutex);
- strmap_assert_ok(_thread_test_strmap);
- if (strmap_get(_thread_test_strmap, "thread 1") &&
- strmap_get(_thread_test_strmap, "thread 2")) {
+ tor_mutex_acquire(thread_test_mutex_);
+ strmap_assert_ok(thread_test_strmap_);
+ if (strmap_get(thread_test_strmap_, "thread 1") &&
+ strmap_get(thread_test_strmap_, "thread 2")) {
done = 1;
} else if (time(NULL) > started + 150) {
timedout = done = 1;
}
- tor_mutex_release(_thread_test_mutex);
+ tor_mutex_release(thread_test_mutex_);
#ifndef _WIN32
/* Prevent the main thread from starving the worker threads. */
select(0, NULL, NULL, NULL, &tv);
#endif
}
- tor_mutex_acquire(_thread_test_start1);
- tor_mutex_release(_thread_test_start1);
- tor_mutex_acquire(_thread_test_start2);
- tor_mutex_release(_thread_test_start2);
+ tor_mutex_acquire(thread_test_start1_);
+ tor_mutex_release(thread_test_start1_);
+ tor_mutex_acquire(thread_test_start2_);
+ tor_mutex_release(thread_test_start2_);
- tor_mutex_free(_thread_test_mutex);
+ tor_mutex_free(thread_test_mutex_);
if (timedout) {
printf("\nTimed out: %d %d", t1_count, t2_count);
- test_assert(strmap_get(_thread_test_strmap, "thread 1"));
- test_assert(strmap_get(_thread_test_strmap, "thread 2"));
+ test_assert(strmap_get(thread_test_strmap_, "thread 1"));
+ test_assert(strmap_get(thread_test_strmap_, "thread 2"));
test_assert(!timedout);
}
/* different thread IDs. */
- test_assert(strcmp(strmap_get(_thread_test_strmap, "thread 1"),
- strmap_get(_thread_test_strmap, "thread 2")));
- test_assert(!strcmp(strmap_get(_thread_test_strmap, "thread 1"),
- strmap_get(_thread_test_strmap, "last to run")) ||
- !strcmp(strmap_get(_thread_test_strmap, "thread 2"),
- strmap_get(_thread_test_strmap, "last to run")));
+ test_assert(strcmp(strmap_get(thread_test_strmap_, "thread 1"),
+ strmap_get(thread_test_strmap_, "thread 2")));
+ test_assert(!strcmp(strmap_get(thread_test_strmap_, "thread 1"),
+ strmap_get(thread_test_strmap_, "last to run")) ||
+ !strcmp(strmap_get(thread_test_strmap_, "thread 2"),
+ strmap_get(thread_test_strmap_, "last to run")));
done:
tor_free(s1);
tor_free(s2);
- tor_free(_thread1_name);
- tor_free(_thread2_name);
- if (_thread_test_strmap)
- strmap_free(_thread_test_strmap, NULL);
- if (_thread_test_start1)
- tor_mutex_free(_thread_test_start1);
- if (_thread_test_start2)
- tor_mutex_free(_thread_test_start2);
+ tor_free(thread1_name_);
+ tor_free(thread2_name_);
+ if (thread_test_strmap_)
+ strmap_free(thread_test_strmap_, NULL);
+ if (thread_test_start1_)
+ tor_mutex_free(thread_test_start1_);
+ if (thread_test_start2_)
+ tor_mutex_free(thread_test_start2_);
}
/** Run unit tests for compression functions */
@@ -1402,21 +1583,21 @@ test_util_mmap(void)
test_eq(mapping->size, strlen("Short file."));
test_streq(mapping->data, "Short file.");
#ifdef _WIN32
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
test_assert(unlink(fname1) == 0);
#else
/* make sure we can unlink. */
test_assert(unlink(fname1) == 0);
test_streq(mapping->data, "Short file.");
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
#endif
/* Now a zero-length file. */
write_str_to_file(fname1, "", 1);
mapping = tor_mmap_file(fname1);
- test_eq(mapping, NULL);
+ test_eq_ptr(mapping, NULL);
test_eq(ERANGE, errno);
unlink(fname1);
@@ -1430,7 +1611,7 @@ test_util_mmap(void)
test_assert(mapping);
test_eq(mapping->size, buflen);
test_memeq(mapping->data, buf, buflen);
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
/* Now try a big aligned file. */
@@ -1439,7 +1620,7 @@ test_util_mmap(void)
test_assert(mapping);
test_eq(mapping->size, 16384);
test_memeq(mapping->data, buf, 16384);
- tor_munmap_file(mapping);
+ tt_int_op(0, ==, tor_munmap_file(mapping));
mapping = NULL;
done:
@@ -1452,8 +1633,7 @@ test_util_mmap(void)
tor_free(fname3);
tor_free(buf);
- if (mapping)
- tor_munmap_file(mapping);
+ tor_munmap_file(mapping);
}
/** Run unit tests for escaping/unescaping data for use by controllers. */
@@ -1474,12 +1654,28 @@ test_util_control_formats(void)
tor_free(out);
}
+#define test_feq(value1,value2) do { \
+ double v1 = (value1), v2=(value2); \
+ double tf_diff = v1-v2; \
+ double tf_tolerance = ((v1+v2)/2.0)/1e8; \
+ if (tf_diff<0) tf_diff=-tf_diff; \
+ if (tf_tolerance<0) tf_tolerance=-tf_tolerance; \
+ if (tf_diff<tf_tolerance) { \
+ TT_BLATHER(("%s ~~ %s: %f ~~ %f",#value1,#value2,v1,v2)); \
+ } else { \
+ TT_FAIL(("%s ~~ %s: %f != %f",#value1,#value2,v1,v2)); \
+ } \
+ } while (0)
+
static void
test_util_sscanf(void)
{
unsigned u1, u2, u3;
char s1[20], s2[10], s3[10], ch;
int r;
+ long lng1,lng2;
+ int int1, int2;
+ double d1,d2,d3,d4;
/* Simple tests (malformed patterns, literal matching, ...) */
test_eq(-1, tor_sscanf("123", "%i", &r)); /* %i is not supported */
@@ -1608,6 +1804,65 @@ test_util_sscanf(void)
test_eq(4, tor_sscanf("1.2.3 foobar", "%u.%u.%u%c", &u1, &u2, &u3, &ch));
test_eq(' ', ch);
+ r = tor_sscanf("12345 -67890 -1", "%d %ld %d", &int1, &lng1, &int2);
+ test_eq(r,3);
+ test_eq(int1, 12345);
+ test_eq(lng1, -67890);
+ test_eq(int2, -1);
+
+#if SIZEOF_INT == 4
+ r = tor_sscanf("-2147483648. 2147483647.", "%d. %d.", &int1, &int2);
+ test_eq(r,2);
+ test_eq(int1, -2147483647-1);
+ test_eq(int2, 2147483647);
+
+ r = tor_sscanf("-2147483679.", "%d.", &int1);
+ test_eq(r,0);
+
+ r = tor_sscanf("2147483678.", "%d.", &int1);
+ test_eq(r,0);
+#elif SIZEOF_INT == 8
+ r = tor_sscanf("-9223372036854775808. 9223372036854775807.",
+ "%d. %d.", &int1, &int2);
+ test_eq(r,2);
+ test_eq(int1, -9223372036854775807-1);
+ test_eq(int2, 9223372036854775807);
+
+ r = tor_sscanf("-9223372036854775809.", "%d.", &int1);
+ test_eq(r,0);
+
+ r = tor_sscanf("9223372036854775808.", "%d.", &int1);
+ test_eq(r,0);
+#endif
+
+#if SIZEOF_LONG == 4
+ r = tor_sscanf("-2147483648. 2147483647.", "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,2);
+ test_eq(lng1, -2147483647 - 1);
+ test_eq(lng2, 2147483647);
+#elif SIZEOF_LONG == 8
+ r = tor_sscanf("-9223372036854775808. 9223372036854775807.",
+ "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,2);
+ test_eq(lng1, -9223372036854775807L - 1);
+ test_eq(lng2, 9223372036854775807L);
+
+ r = tor_sscanf("-9223372036854775808. 9223372036854775808.",
+ "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,1);
+ r = tor_sscanf("-9223372036854775809. 9223372036854775808.",
+ "%ld. %ld.", &lng1, &lng2);
+ test_eq(r,0);
+#endif
+
+ r = tor_sscanf("123.456 .000007 -900123123.2000787 00003.2",
+ "%lf %lf %lf %lf", &d1,&d2,&d3,&d4);
+ test_eq(r,4);
+ test_feq(d1, 123.456);
+ test_feq(d2, .000007);
+ test_feq(d3, -900123123.2000787);
+ test_feq(d4, 3.2);
+
done:
;
}
@@ -1646,6 +1901,8 @@ test_util_path_is_relative(void)
;
}
+#ifdef ENABLE_MEMPOOLS
+
/** Run unittests for memory pool allocator */
static void
test_util_mempool(void)
@@ -1704,6 +1961,8 @@ test_util_mempool(void)
mp_pool_destroy(pool);
}
+#endif /* ENABLE_MEMPOOLS */
+
/** Run unittests for memory area allocator */
static void
test_util_memarea(void)
@@ -1735,7 +1994,7 @@ test_util_memarea(void)
/* Make sure we don't overalign. */
p1 = memarea_alloc(area, 1);
p2 = memarea_alloc(area, 1);
- test_eq(p1+sizeof(void*), p2);
+ test_eq_ptr(p1+sizeof(void*), p2);
{
malloced_ptr = tor_malloc(64);
test_assert(!memarea_owns_ptr(area, malloced_ptr));
@@ -1780,7 +2039,7 @@ test_util_memarea(void)
memarea_clear(area);
p1 = memarea_alloc(area, 1);
- test_eq(p1, p1_orig);
+ test_eq_ptr(p1, p1_orig);
memarea_clear(area);
/* Check for running over an area's size. */
@@ -1988,18 +2247,21 @@ test_util_asprintf(void *ptr)
test_assert(cp);
test_streq("simple string 100% safe", cp);
test_eq(strlen(cp), r);
+ tor_free(cp);
/* empty string */
r = tor_asprintf(&cp, "%s", "");
test_assert(cp);
test_streq("", cp);
test_eq(strlen(cp), r);
+ tor_free(cp);
/* numbers (%i) */
r = tor_asprintf(&cp, "I like numbers-%2i, %i, etc.", -1, 2);
test_assert(cp);
test_streq("I like numbers--1, 2, etc.", cp);
test_eq(strlen(cp), r);
+ /* don't free cp; next test uses it. */
/* numbers (%d) */
r = tor_asprintf(&cp2, "First=%d, Second=%d", 101, 202);
@@ -2061,17 +2323,19 @@ test_util_listdir(void *ptr)
dir_contents = tor_listdir(dirname);
test_assert(dir_contents);
/* make sure that each filename is listed. */
- test_assert(smartlist_string_isin_case(dir_contents, "hopscotch"));
- test_assert(smartlist_string_isin_case(dir_contents, "mumblety-peg"));
- test_assert(smartlist_string_isin_case(dir_contents, ".hidden-file"));
- test_assert(smartlist_string_isin_case(dir_contents, "some-directory"));
+ test_assert(smartlist_contains_string_case(dir_contents, "hopscotch"));
+ test_assert(smartlist_contains_string_case(dir_contents, "mumblety-peg"));
+ test_assert(smartlist_contains_string_case(dir_contents, ".hidden-file"));
+ test_assert(smartlist_contains_string_case(dir_contents, "some-directory"));
- test_assert(!smartlist_string_isin(dir_contents, "."));
- test_assert(!smartlist_string_isin(dir_contents, ".."));
+ test_assert(!smartlist_contains_string(dir_contents, "."));
+ test_assert(!smartlist_contains_string(dir_contents, ".."));
done:
tor_free(fname1);
tor_free(fname2);
+ tor_free(fname3);
+ tor_free(dir1);
tor_free(dirname);
if (dir_contents) {
SMARTLIST_FOREACH(dir_contents, char *, cp, tor_free(cp));
@@ -2136,10 +2400,11 @@ test_util_load_win_lib(void *ptr)
tt_assert(h);
done:
if (h)
- CloseHandle(h);
+ FreeLibrary(h);
}
#endif
+#ifndef _WIN32
static void
clear_hex_errno(char *hex_errno)
{
@@ -2169,6 +2434,7 @@ test_util_exit_status(void *ptr)
n = format_helper_exit_status(0xFF, -0x80000000, hex_errno);
test_streq("FF/-80000000\n", hex_errno);
test_eq(n, strlen(hex_errno));
+ test_eq(n, HEX_ERRNO_SIZE);
clear_hex_errno(hex_errno);
n = format_helper_exit_status(0x7F, 0, hex_errno);
@@ -2183,6 +2449,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
@@ -2484,14 +2751,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;
@@ -2500,6 +2767,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},
@@ -2510,19 +2779,73 @@ 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 for format_hex_number_sigsafe()
+ */
+
+static void
+test_util_format_dec_number(void *ptr)
+{
+ int i, len;
+ char buf[33];
+ const struct {
+ const char *str;
+ unsigned int x;
+ } test_data[] = {
+ {"0", 0},
+ {"1", 1},
+ {"1234", 1234},
+ {"12345678", 12345678},
+ {"99999999", 99999999},
+ {"100000000", 100000000},
+ {"4294967295", 4294967295u},
+#if UINT_MAX > 0xffffffff
+ {"18446744073709551615", 18446744073709551615u },
+#endif
+ {NULL, 0}
+ };
+
+ (void)ptr;
+
+ for (i = 0; test_data[i].str != NULL; ++i) {
+ len = format_dec_number_sigsafe(test_data[i].x, buf, sizeof(buf));
+ test_neq(len, 0);
+ test_eq(len, strlen(buf));
+ test_streq(buf, test_data[i].str);
+
+ len = format_dec_number_sigsafe(test_data[i].x, buf,
+ (int)(strlen(test_data[i].str) + 1));
+ test_eq(len, strlen(buf));
+ test_streq(buf, test_data[i].str);
+ }
+
+ test_eq(4, format_dec_number_sigsafe(7331, buf, 5));
+ test_streq(buf, "7331");
+ test_eq(0, format_dec_number_sigsafe(7331, buf, 4));
+ test_eq(1, format_dec_number_sigsafe(0, buf, 2));
+ test_eq(0, format_dec_number_sigsafe(0, buf, 1));
+
+ done:
+ return;
+}
+
+/**
+ * Test that we can properly format a Windows command line
*/
static void
test_util_join_win_cmdline(void *ptr)
@@ -2557,7 +2880,7 @@ test_util_join_win_cmdline(void *ptr)
};
int i;
- char *joined_argv;
+ char *joined_argv = NULL;
(void)ptr;
@@ -2569,7 +2892,7 @@ test_util_join_win_cmdline(void *ptr)
}
done:
- ;
+ tor_free(joined_argv);
}
#define MAX_SPLIT_LINE_COUNT 4
@@ -2689,6 +3012,16 @@ test_util_di_ops(void)
test_eq(neq1, !eq1);
}
+ tt_int_op(1, ==, safe_mem_is_zero("", 0));
+ tt_int_op(1, ==, safe_mem_is_zero("", 1));
+ tt_int_op(0, ==, safe_mem_is_zero("a", 1));
+ tt_int_op(0, ==, safe_mem_is_zero("a", 2));
+ tt_int_op(0, ==, safe_mem_is_zero("\0a", 2));
+ tt_int_op(1, ==, safe_mem_is_zero("\0\0a", 2));
+ tt_int_op(1, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0", 8));
+ tt_int_op(1, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 8));
+ tt_int_op(0, ==, safe_mem_is_zero("\0\0\0\0\0\0\0\0a", 9));
+
done:
;
}
@@ -2723,7 +3056,7 @@ test_util_eat_whitespace(void *ptr)
(void)ptr;
/* Try one leading ws */
- strcpy(str, "fuubaar");
+ strlcpy(str, "fuubaar", sizeof(str));
for (i = 0; i < sizeof(ws); ++i) {
str[0] = ws[i];
test_eq_ptr(str + 1, eat_whitespace(str));
@@ -2738,14 +3071,14 @@ test_util_eat_whitespace(void *ptr)
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Empty string */
- strcpy(str, "");
+ strlcpy(str, "", sizeof(str));
test_eq_ptr(str, eat_whitespace(str));
test_eq_ptr(str, eat_whitespace_eos(str, str));
test_eq_ptr(str, eat_whitespace_no_nl(str));
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str));
/* Only ws */
- strcpy(str, " \t\r\n");
+ strlcpy(str, " \t\r\n", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str), eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str + strlen(str) - 1,
@@ -2753,7 +3086,7 @@ test_util_eat_whitespace(void *ptr)
test_eq_ptr(str + strlen(str) - 1,
eat_whitespace_eos_no_nl(str, str + strlen(str)));
- strcpy(str, " \t\r ");
+ strlcpy(str, " \t\r ", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str),
eat_whitespace_eos(str, str + strlen(str)));
@@ -2762,7 +3095,7 @@ test_util_eat_whitespace(void *ptr)
eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Multiple ws */
- strcpy(str, "fuubaar");
+ strlcpy(str, "fuubaar", sizeof(str));
for (i = 0; i < sizeof(ws); ++i)
str[i] = ws[i];
test_eq_ptr(str + sizeof(ws), eat_whitespace(str));
@@ -2772,28 +3105,28 @@ test_util_eat_whitespace(void *ptr)
eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat comment */
- strcpy(str, "# Comment \n No Comment");
+ strlcpy(str, "# Comment \n No Comment", sizeof(str));
test_streq("No Comment", eat_whitespace(str));
test_streq("No Comment", eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str, eat_whitespace_no_nl(str));
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat comment & ws mix */
- strcpy(str, " # \t Comment \n\t\nNo Comment");
+ strlcpy(str, " # \t Comment \n\t\nNo Comment", sizeof(str));
test_streq("No Comment", eat_whitespace(str));
test_streq("No Comment", eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str + 1, eat_whitespace_no_nl(str));
test_eq_ptr(str + 1, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Eat entire comment */
- strcpy(str, "#Comment");
+ strlcpy(str, "#Comment", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str), eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str, eat_whitespace_no_nl(str));
test_eq_ptr(str, eat_whitespace_eos_no_nl(str, str + strlen(str)));
/* Blank line, then comment */
- strcpy(str, " \t\n # Comment");
+ strlcpy(str, " \t\n # Comment", sizeof(str));
test_eq_ptr(str + strlen(str), eat_whitespace(str));
test_eq_ptr(str + strlen(str), eat_whitespace_eos(str, str + strlen(str)));
test_eq_ptr(str + 2, eat_whitespace_no_nl(str));
@@ -2819,6 +3152,8 @@ smartlist_new_from_text_lines(const char *lines)
last_line = smartlist_pop_last(sl);
if (last_line != NULL && *last_line != '\0') {
smartlist_add(sl, last_line);
+ } else {
+ tor_free(last_line);
}
return sl;
@@ -3044,7 +3379,7 @@ test_util_set_env_var_in_sl(void *ptr)
SMARTLIST_FOREACH(new_env_vars, char *, env_var,
set_environment_variable_in_smartlist(merged_env_vars,
env_var,
- _tor_free,
+ tor_free_,
1));
smartlist_sort_strings(merged_env_vars);
@@ -3076,12 +3411,246 @@ test_util_set_env_var_in_sl(void *ptr)
smartlist_free(expected_resulting_env_vars);
}
+static void
+test_util_weak_random(void *arg)
+{
+ int i, j, n[16];
+ tor_weak_rng_t rng;
+ (void) arg;
+
+ tor_init_weak_random(&rng, (unsigned)time(NULL));
+
+ for (i = 1; i <= 256; ++i) {
+ for (j=0;j<100;++j) {
+ int r = tor_weak_random_range(&rng, i);
+ tt_int_op(0, <=, r);
+ tt_int_op(r, <, i);
+ }
+ }
+
+ memset(n,0,sizeof(n));
+ for (j=0;j<8192;++j) {
+ n[tor_weak_random_range(&rng, 16)]++;
+ }
+
+ for (i=0;i<16;++i)
+ tt_int_op(n[i], >, 0);
+ done:
+ ;
+}
+
+static void
+test_util_mathlog(void *arg)
+{
+ double d;
+ (void) arg;
+
+ d = tor_mathlog(2.718281828);
+ tt_double_op(fabs(d - 1.0), <, .000001);
+ d = tor_mathlog(10);
+ tt_double_op(fabs(d - 2.30258509), <, .000001);
+ done:
+ ;
+}
+
+static void
+test_util_round_to_next_multiple_of(void *arg)
+{
+ (void)arg;
+
+ test_assert(round_uint64_to_next_multiple_of(0,1) == 0);
+ test_assert(round_uint64_to_next_multiple_of(0,7) == 0);
+
+ test_assert(round_uint64_to_next_multiple_of(99,1) == 99);
+ test_assert(round_uint64_to_next_multiple_of(99,7) == 105);
+ test_assert(round_uint64_to_next_multiple_of(99,9) == 99);
+
+ done:
+ ;
+}
+
+static void
+test_util_strclear(void *arg)
+{
+ static const char *vals[] = { "", "a", "abcdef", "abcdefgh", NULL };
+ int i;
+ char *v = NULL;
+ (void)arg;
+
+ for (i = 0; vals[i]; ++i) {
+ size_t n;
+ v = tor_strdup(vals[i]);
+ n = strlen(v);
+ tor_strclear(v);
+ tt_assert(tor_mem_is_zero(v, n+1));
+ tor_free(v);
+ }
+ done:
+ tor_free(v);
+}
+
#define UTIL_LEGACY(name) \
{ #name, legacy_test_helper, 0, &legacy_setup, test_util_ ## name }
#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]);
+}
+
+static void
+test_util_max_mem(void *arg)
+{
+ size_t memory1, memory2;
+ int r, r2;
+ (void) arg;
+
+ r = get_total_system_memory(&memory1);
+ r2 = get_total_system_memory(&memory2);
+ tt_int_op(r, ==, r2);
+ tt_uint_op(memory2, ==, memory1);
+
+ TT_BLATHER(("System memory: "U64_FORMAT, U64_PRINTF_ARG(memory1)));
+
+ if (r==0) {
+ /* You have at least a megabyte. */
+ tt_uint_op(memory1, >, (1<<20));
+ } else {
+ /* You do not have a petabyte. */
+#if SIZEOF_SIZE_T == SIZEOF_UINT64_T
+ tt_uint_op(memory1, <, (U64_LITERAL(1)<<50));
+#endif
+ }
+
+ done:
+ ;
+}
+
struct testcase_t util_tests[] = {
UTIL_LEGACY(time),
UTIL_TEST(parse_http_time, 0),
@@ -3092,11 +3661,15 @@ struct testcase_t util_tests[] = {
#ifndef _WIN32
UTIL_LEGACY(expand_filename),
#endif
+ UTIL_LEGACY(escape_string_socks),
+ UTIL_LEGACY(string_is_key_value),
UTIL_LEGACY(strmisc),
UTIL_LEGACY(pow2),
UTIL_LEGACY(gzip),
UTIL_LEGACY(datadir),
+#ifdef ENABLE_MEMPOOLS
UTIL_LEGACY(mempool),
+#endif
UTIL_LEGACY(memarea),
UTIL_LEGACY(control_formats),
UTIL_LEGACY(mmap),
@@ -3105,6 +3678,8 @@ struct testcase_t util_tests[] = {
UTIL_LEGACY(path_is_relative),
UTIL_LEGACY(strtok),
UTIL_LEGACY(di_ops),
+ UTIL_TEST(round_to_next_multiple_of, 0),
+ UTIL_TEST(strclear, 0),
UTIL_TEST(find_str_at_start_of_line, 0),
UTIL_TEST(string_is_C_identifier, 0),
UTIL_TEST(asprintf, 0),
@@ -3113,14 +3688,15 @@ 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),
UTIL_TEST(spawn_background_fail, 0),
UTIL_TEST(spawn_background_partial_read, 0),
UTIL_TEST(format_hex_number, 0),
+ UTIL_TEST(format_dec_number, 0),
UTIL_TEST(join_win_cmdline, 0),
UTIL_TEST(split_lines, 0),
UTIL_TEST(n_bits_set, 0),
@@ -3129,6 +3705,18 @@ struct testcase_t util_tests[] = {
UTIL_TEST(envnames, 0),
UTIL_TEST(make_environment, 0),
UTIL_TEST(set_env_var_in_sl, 0),
+ UTIL_TEST(read_file_eof_tiny_limit, 0),
+ UTIL_TEST(read_file_eof_two_loops, 0),
+ UTIL_TEST(read_file_eof_zero_bytes, 0),
+ UTIL_TEST(write_chunks_to_file, 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" },
+ UTIL_TEST(max_mem, 0),
END_OF_TESTCASES
};
diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am
deleted file mode 100644
index 35b0a41f5..000000000
--- a/src/tools/Makefile.am
+++ /dev/null
@@ -1,22 +0,0 @@
-bin_PROGRAMS = tor-resolve tor-gencert
-noinst_PROGRAMS = tor-checkkey
-
-tor_resolve_SOURCES = tor-resolve.c
-tor_resolve_LDFLAGS =
-tor_resolve_LDADD = ../common/libor.a @TOR_LIB_MATH@ @TOR_LIB_WS32@
-
-tor_gencert_SOURCES = tor-gencert.c
-tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
-tor_gencert_LDADD = ../common/libor.a ../common/libor-crypto.a \
- @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
- @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-tor_checkkey_SOURCES = tor-checkkey.c
-tor_checkkey_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
-tor_checkkey_LDADD = ../common/libor.a ../common/libor-crypto.a \
- @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
- @TOR_LIB_WS32@ @TOR_LIB_GDI@
-
-SUBDIRS = tor-fw-helper
-DIST_SUBDIRS = tor-fw-helper
-
diff --git a/src/tools/Makefile.nmake b/src/tools/Makefile.nmake
index a30a28b2e..fda1990e0 100644
--- a/src/tools/Makefile.nmake
+++ b/src/tools/Makefile.nmake
@@ -6,8 +6,8 @@ LIBS = ..\..\..\build-alpha\lib\libevent.lib \
..\..\..\build-alpha\lib\libcrypto.lib \
..\..\..\build-alpha\lib\libssl.lib \
..\..\..\build-alpha\lib\libz.lib \
- ws2_32.lib advapi32.lib shell32.lib
-
+ ws2_32.lib advapi32.lib shell32.lib \
+ crypt32.lib gdi32.lib user32.lib
tor-gencert.exe: tor-gencert.obj
$(CC) $(CFLAGS) $(LIBS) ..\common\*.lib tor-gencert.obj
diff --git a/src/tools/include.am b/src/tools/include.am
new file mode 100644
index 000000000..54b150a80
--- /dev/null
+++ b/src/tools/include.am
@@ -0,0 +1,24 @@
+bin_PROGRAMS+= src/tools/tor-resolve src/tools/tor-gencert
+noinst_PROGRAMS+= src/tools/tor-checkkey
+
+src_tools_tor_resolve_SOURCES = src/tools/tor-resolve.c
+src_tools_tor_resolve_LDFLAGS =
+src_tools_tor_resolve_LDADD = src/common/libor.a @TOR_LIB_MATH@ @TOR_LIB_WS32@
+
+src_tools_tor_gencert_SOURCES = src/tools/tor-gencert.c
+src_tools_tor_gencert_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_tools_tor_gencert_LDADD = src/common/libor.a src/common/libor-crypto.a \
+ $(LIBDONNA) \
+ @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+src_tools_tor_checkkey_SOURCES = src/tools/tor-checkkey.c
+src_tools_tor_checkkey_LDFLAGS = @TOR_LDFLAGS_zlib@ @TOR_LDFLAGS_openssl@
+src_tools_tor_checkkey_LDADD = src/common/libor.a src/common/libor-crypto.a \
+ $(LIBDONNA) \
+ @TOR_LIB_MATH@ @TOR_ZLIB_LIBS@ @TOR_OPENSSL_LIBS@ \
+ @TOR_LIB_WS32@ @TOR_LIB_GDI@ @CURVE25519_LIBS@
+
+include src/tools/tor-fw-helper/include.am
+
+
diff --git a/src/tools/tor-checkkey.c b/src/tools/tor-checkkey.c
index 10d13d837..d50f12ed2 100644
--- a/src/tools/tor-checkkey.c
+++ b/src/tools/tor-checkkey.c
@@ -1,8 +1,6 @@
-/* Copyright (c) 2008-2012, The Tor Project, Inc. */
+/* Copyright (c) 2008-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
-#define CRYPTO_PRIVATE
-
#include "orconfig.h"
#include <stdio.h>
@@ -71,7 +69,7 @@ main(int c, char **v)
return 1;
printf("%s\n",digest);
} else {
- rsa = _crypto_pk_get_rsa(env);
+ rsa = crypto_pk_get_rsa_(env);
str = BN_bn2hex(rsa->n);
printf("%s\n", str);
diff --git a/src/tools/tor-fw-helper/Makefile.am b/src/tools/tor-fw-helper/Makefile.am
deleted file mode 100644
index 393562db0..000000000
--- a/src/tools/tor-fw-helper/Makefile.am
+++ /dev/null
@@ -1,38 +0,0 @@
-if USE_FW_HELPER
-bin_PROGRAMS = tor-fw-helper
-else
-bin_PROGRAMS =
-endif
-
-tor_fw_helper_SOURCES = \
- tor-fw-helper.c \
- tor-fw-helper-natpmp.c \
- tor-fw-helper-upnp.c
-noinst_HEADERS = \
- tor-fw-helper.h \
- tor-fw-helper-natpmp.h \
- tor-fw-helper-upnp.h
-
-if NAT_PMP
-nat_pmp_ldflags = @TOR_LDFLAGS_libnatpmp@
-nat_pmp_ldadd = -lnatpmp @TOR_LIB_IPHLPAPI@
-nat_pmp_cppflags = @TOR_CPPFLAGS_libnatpmp@
-else
-nat_pmp_ldflags =
-nat_pmp_ldadd =
-nat_pmp_cppflags =
-endif
-
-if MINIUPNPC
-miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
-miniupnpc_ldadd = -lminiupnpc -lm @TOR_LIB_IPHLPAPI@
-miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
-else
-miniupnpc_ldflags =
-miniupnpc_ldadd =
-miniupnpc_cppflags =
-endif
-
-tor_fw_helper_LDFLAGS = $(nat_pmp_ldflags) $(miniupnpc_ldflags)
-tor_fw_helper_LDADD = ../../common/libor.a $(nat_pmp_ldadd) $(miniupnpc_ldadd) @TOR_LIB_WS32@
-tor_fw_helper_CPPFLAGS = $(nat_pmp_cppflags) $(miniupnpc_cppflags)
diff --git a/src/tools/tor-fw-helper/include.am b/src/tools/tor-fw-helper/include.am
new file mode 100644
index 000000000..1f862e6f0
--- /dev/null
+++ b/src/tools/tor-fw-helper/include.am
@@ -0,0 +1,36 @@
+if USE_FW_HELPER
+bin_PROGRAMS+= src/tools/tor-fw-helper/tor-fw-helper
+endif
+
+src_tools_tor_fw_helper_tor_fw_helper_SOURCES = \
+ src/tools/tor-fw-helper/tor-fw-helper.c \
+ src/tools/tor-fw-helper/tor-fw-helper-natpmp.c \
+ src/tools/tor-fw-helper/tor-fw-helper-upnp.c
+noinst_HEADERS+= \
+ src/tools/tor-fw-helper/tor-fw-helper.h \
+ src/tools/tor-fw-helper/tor-fw-helper-natpmp.h \
+ src/tools/tor-fw-helper/tor-fw-helper-upnp.h
+
+if NAT_PMP
+nat_pmp_ldflags = @TOR_LDFLAGS_libnatpmp@
+nat_pmp_ldadd = -lnatpmp @TOR_LIB_IPHLPAPI@
+nat_pmp_cppflags = @TOR_CPPFLAGS_libnatpmp@
+else
+nat_pmp_ldflags =
+nat_pmp_ldadd =
+nat_pmp_cppflags =
+endif
+
+if MINIUPNPC
+miniupnpc_ldflags = @TOR_LDFLAGS_libminiupnpc@
+miniupnpc_ldadd = -lminiupnpc @TOR_LIB_IPHLPAPI@
+miniupnpc_cppflags = @TOR_CPPFLAGS_libminiupnpc@
+else
+miniupnpc_ldflags =
+miniupnpc_ldadd =
+miniupnpc_cppflags =
+endif
+
+src_tools_tor_fw_helper_tor_fw_helper_LDFLAGS = $(nat_pmp_ldflags) $(miniupnpc_ldflags)
+src_tools_tor_fw_helper_tor_fw_helper_LDADD = src/common/libor.a $(nat_pmp_ldadd) $(miniupnpc_ldadd) -lm @TOR_LIB_WS32@
+src_tools_tor_fw_helper_tor_fw_helper_CPPFLAGS = $(nat_pmp_cppflags) $(miniupnpc_cppflags) -I"$(top_srcdir)/src/ext"
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
index 0e0b385f9..41eb9dcb7 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -60,15 +60,15 @@ tor_natpmp_init(tor_fw_options_t *tor_fw_options, void *backend_state)
state->lease = NATPMP_DEFAULT_LEASE;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: natpmp init...\n");
+ fprintf(stderr, "V: natpmp init...\n");
r = initnatpmp(&(state->natpmp), 0, 0);
if (r == 0) {
state->init = 1;
- fprintf(stdout, "tor-fw-helper: natpmp initialized...\n");
+ fprintf(stderr, "V: natpmp initialized...\n");
return r;
} else {
- fprintf(stderr, "tor-fw-helper: natpmp failed to initialize...\n");
+ fprintf(stderr, "V: natpmp failed to initialize...\n");
return r;
}
}
@@ -80,10 +80,10 @@ tor_natpmp_cleanup(tor_fw_options_t *tor_fw_options, void *backend_state)
natpmp_state_t *state = (natpmp_state_t *) backend_state;
int r = 0;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: natpmp cleanup...\n");
+ fprintf(stderr, "V: natpmp cleanup...\n");
r = closenatpmp(&(state->natpmp));
if (tor_fw_options->verbose)
- fprintf(stdout, "V: closing natpmp socket: %d\n", r);
+ fprintf(stderr, "V: closing natpmp socket: %d\n", r);
return r;
}
@@ -93,16 +93,20 @@ wait_until_fd_readable(tor_socket_t fd, struct timeval *timeout)
{
int r;
fd_set fds;
+
+#ifndef WIN32
if (fd >= FD_SETSIZE) {
fprintf(stderr, "E: NAT-PMP FD_SETSIZE error %d\n", fd);
return -1;
}
+#endif
+
FD_ZERO(&fds);
FD_SET(fd, &fds);
r = select(fd+1, &fds, NULL, NULL, timeout);
if (r == -1) {
- fprintf(stdout, "V: select failed in wait_until_fd_readable: %s\n",
- strerror(errno));
+ fprintf(stderr, "V: select failed in wait_until_fd_readable: %s\n",
+ tor_socket_strerror(tor_socket_errno(fd)));
return -1;
}
/* XXXX we should really check to see whether fd was readable, or we timed
@@ -110,27 +114,25 @@ wait_until_fd_readable(tor_socket_t fd, struct timeval *timeout)
return 0;
}
-/** Add a TCP port mapping for a single port stored in <b>tor_fw_options</b>
- * using the <b>natpmp_t</b> stored in <b>backend_state</b>. */
int
-tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
- void *backend_state)
+tor_natpmp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state)
{
- natpmp_state_t *state = (natpmp_state_t *) backend_state;
int r = 0;
int x = 0;
int sav_errno;
+ natpmp_state_t *state = (natpmp_state_t *) backend_state;
struct timeval timeout;
- if (tor_fw_options->verbose)
- fprintf(stdout, "V: sending natpmp portmapping request...\n");
+ if (is_verbose)
+ fprintf(stderr, "V: sending natpmp portmapping request...\n");
r = sendnewportmappingrequest(&(state->natpmp), state->protocol,
- tor_fw_options->internal_port,
- tor_fw_options->external_port,
+ internal_port,
+ external_port,
state->lease);
- if (tor_fw_options->verbose)
- fprintf(stdout, "tor-fw-helper: NAT-PMP sendnewportmappingrequest "
+ if (is_verbose)
+ fprintf(stderr, "tor-fw-helper: NAT-PMP sendnewportmappingrequest "
"returned %d (%s)\n", r, r==12?"SUCCESS":"FAILED");
do {
@@ -139,15 +141,15 @@ tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
if (x == -1)
return -1;
- if (tor_fw_options->verbose)
- fprintf(stdout, "V: attempting to readnatpmpreponseorretry...\n");
+ if (is_verbose)
+ fprintf(stderr, "V: attempting to readnatpmpreponseorretry...\n");
r = readnatpmpresponseorretry(&(state->natpmp), &(state->response));
- sav_errno = errno;
+ sav_errno = tor_socket_errno(state->natpmp.s);
if (r<0 && r!=NATPMP_TRYAGAIN) {
fprintf(stderr, "E: readnatpmpresponseorretry failed %d\n", r);
fprintf(stderr, "E: errno=%d '%s'\n", sav_errno,
- strerror(sav_errno));
+ tor_socket_strerror(sav_errno));
}
} while (r == NATPMP_TRYAGAIN);
@@ -163,16 +165,14 @@ tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
}
if (r == NATPMP_SUCCESS) {
- fprintf(stdout, "tor-fw-helper: NAT-PMP mapped public port %hu to"
+ fprintf(stderr, "tor-fw-helper: NAT-PMP mapped public port %hu to"
" localport %hu liftime %u\n",
(state->response).pnu.newportmapping.mappedpublicport,
(state->response).pnu.newportmapping.privateport,
(state->response).pnu.newportmapping.lifetime);
}
- tor_fw_options->nat_pmp_status = 1;
-
- return r;
+ return (r == NATPMP_SUCCESS) ? 0 : -1;
}
/** Fetch our likely public IP from our upstream NAT-PMP enabled NAT device.
@@ -189,7 +189,7 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
struct timeval timeout;
r = sendpublicaddressrequest(&(state->natpmp));
- fprintf(stdout, "tor-fw-helper: NAT-PMP sendpublicaddressrequest returned"
+ fprintf(stderr, "tor-fw-helper: NAT-PMP sendpublicaddressrequest returned"
" %d (%s)\n", r, r==2?"SUCCESS":"FAILED");
do {
@@ -200,19 +200,19 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
return -1;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: NAT-PMP attempting to read reponse...\n");
+ fprintf(stderr, "V: NAT-PMP attempting to read reponse...\n");
r = readnatpmpresponseorretry(&(state->natpmp), &(state->response));
- sav_errno = errno;
+ sav_errno = tor_socket_errno(state->natpmp.s);
if (tor_fw_options->verbose)
- fprintf(stdout, "V: NAT-PMP readnatpmpresponseorretry returned"
+ fprintf(stderr, "V: NAT-PMP readnatpmpresponseorretry returned"
" %d\n", r);
if ( r < 0 && r != NATPMP_TRYAGAIN) {
fprintf(stderr, "E: NAT-PMP readnatpmpresponseorretry failed %d\n",
r);
fprintf(stderr, "E: NAT-PMP errno=%d '%s'\n", sav_errno,
- strerror(sav_errno));
+ tor_socket_strerror(sav_errno));
}
} while (r == NATPMP_TRYAGAIN );
@@ -223,15 +223,15 @@ tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
return r;
}
- fprintf(stdout, "tor-fw-helper: ExternalIPAddress = %s\n",
+ fprintf(stderr, "tor-fw-helper: ExternalIPAddress = %s\n",
inet_ntoa((state->response).pnu.publicaddress.addr));
tor_fw_options->public_ip_status = 1;
if (tor_fw_options->verbose) {
- fprintf(stdout, "V: result = %u\n", r);
- fprintf(stdout, "V: type = %u\n", (state->response).type);
- fprintf(stdout, "V: resultcode = %u\n", (state->response).resultcode);
- fprintf(stdout, "V: epoch = %u\n", (state->response).epoch);
+ fprintf(stderr, "V: result = %u\n", r);
+ fprintf(stderr, "V: type = %u\n", (state->response).type);
+ fprintf(stderr, "V: resultcode = %u\n", (state->response).resultcode);
+ fprintf(stderr, "V: epoch = %u\n", (state->response).epoch);
}
return r;
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
index 54f541bcf..2d924ce75 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
+++ b/src/tools/tor-fw-helper/tor-fw-helper-natpmp.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -7,8 +7,8 @@
**/
#ifdef NAT_PMP
-#ifndef _TOR_FW_HELPER_NATPMP_H
-#define _TOR_FW_HELPER_NATPMP_H
+#ifndef TOR_TOR_FW_HELPER_NATPMP_H
+#define TOR_TOR_FW_HELPER_NATPMP_H
#include <natpmp.h>
@@ -36,8 +36,8 @@ int tor_natpmp_init(tor_fw_options_t *tor_fw_options, void *backend_state);
int tor_natpmp_cleanup(tor_fw_options_t *tor_fw_options, void *backend_state);
-int tor_natpmp_add_tcp_mapping(tor_fw_options_t *tor_fw_options,
- void *backend_state);
+int tor_natpmp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state);
int tor_natpmp_fetch_public_ip(tor_fw_options_t *tor_fw_options,
void *backend_state);
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
index 7c104f11c..692186d37 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper-upnp.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -91,7 +91,7 @@ tor_upnp_init(tor_fw_options_t *options, void *backend_state)
assert(options);
r = UPNP_GetValidIGD(devlist, &(state->urls), &(state->data),
state->lanaddr, UPNP_LANADDR_SZ);
- fprintf(stdout, "tor-fw-helper: UPnP GetValidIGD returned: %d (%s)\n", r,
+ fprintf(stderr, "tor-fw-helper: UPnP GetValidIGD returned: %d (%s)\n", r,
r==UPNP_SUCCESS?"SUCCESS":"FAILED");
freeUPNPDevlist(devlist);
@@ -141,7 +141,7 @@ tor_upnp_fetch_public_ip(tor_fw_options_t *options, void *backend_state)
goto err;
if (externalIPAddress[0]) {
- fprintf(stdout, "tor-fw-helper: ExternalIPAddress = %s\n",
+ fprintf(stderr, "tor-fw-helper: ExternalIPAddress = %s\n",
externalIPAddress); tor_upnp_cleanup(options, state);
options->public_ip_status = 1;
return UPNP_ERR_SUCCESS;
@@ -154,44 +154,40 @@ tor_upnp_fetch_public_ip(tor_fw_options_t *options, void *backend_state)
return UPNP_ERR_GETEXTERNALIP;
}
-/** Add a TCP port mapping for a single port stored in <b>tor_fw_options</b>
- * and store the results in <b>backend_state</b>. */
int
-tor_upnp_add_tcp_mapping(tor_fw_options_t *options, void *backend_state)
+tor_upnp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state)
{
- miniupnpc_state_t *state = (miniupnpc_state_t *) backend_state;
- int r;
+ int retval;
char internal_port_str[6];
char external_port_str[6];
+ miniupnpc_state_t *state = (miniupnpc_state_t *) backend_state;
if (!state->init) {
- r = tor_upnp_init(options, state);
- if (r != UPNP_ERR_SUCCESS)
- return r;
+ fprintf(stderr, "E: %s but state is not initialized.\n", __func__);
+ return -1;
}
- if (options->verbose)
- fprintf(stdout, "V: internal port: %d, external port: %d\n",
- (int)options->internal_port, (int)options->external_port);
+ if (is_verbose)
+ fprintf(stderr, "V: UPnP: internal port: %u, external port: %u\n",
+ internal_port, external_port);
tor_snprintf(internal_port_str, sizeof(internal_port_str),
- "%d", (int)options->internal_port);
+ "%u", internal_port);
tor_snprintf(external_port_str, sizeof(external_port_str),
- "%d", (int)options->external_port);
+ "%u", external_port);
- r = UPNP_AddPortMapping(state->urls.controlURL,
- state->data.first.servicetype,
- external_port_str, internal_port_str,
+ retval = UPNP_AddPortMapping(state->urls.controlURL,
+ state->data.first.servicetype,
+ external_port_str, internal_port_str,
#ifdef MINIUPNPC15
- state->lanaddr, UPNP_DESC, "TCP", 0);
+ state->lanaddr, UPNP_DESC, "TCP", 0);
#else
- state->lanaddr, UPNP_DESC, "TCP", 0, 0);
+ state->lanaddr, UPNP_DESC, "TCP", 0, 0);
#endif
- if (r != UPNPCOMMAND_SUCCESS)
- return UPNP_ERR_ADDPORTMAPPING;
- options->upnp_status = 1;
- return UPNP_ERR_SUCCESS;
+ return (retval == UPNP_ERR_SUCCESS) ? 0 : -1;
}
+
#endif
diff --git a/src/tools/tor-fw-helper/tor-fw-helper-upnp.h b/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
index f037c75ba..b6c7ed864 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
+++ b/src/tools/tor-fw-helper/tor-fw-helper-upnp.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -8,8 +8,8 @@
**/
#ifdef MINIUPNPC
-#ifndef _TOR_FW_HELPER_UPNP_H
-#define _TOR_FW_HELPER_UPNP_H
+#ifndef TOR_TOR_FW_HELPER_UPNP_H
+#define TOR_TOR_FW_HELPER_UPNP_H
#include <miniupnpc/miniwget.h>
#include <miniupnpc/miniupnpc.h>
@@ -36,7 +36,8 @@ int tor_upnp_cleanup(tor_fw_options_t *options, void *backend_state);
int tor_upnp_fetch_public_ip(tor_fw_options_t *options, void *backend_state);
-int tor_upnp_add_tcp_mapping(tor_fw_options_t *options, void *backend_state);
+int tor_upnp_add_tcp_mapping(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state);
#endif
#endif
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.c b/src/tools/tor-fw-helper/tor-fw-helper.c
index 0510e65d1..84cc21e34 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper.c
+++ b/src/tools/tor-fw-helper/tor-fw-helper.c
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -20,6 +20,9 @@
#include <getopt.h>
#include <time.h>
#include <string.h>
+#include <assert.h>
+
+#include "container.h"
#ifdef _WIN32
#include <winsock2.h>
@@ -45,7 +48,7 @@ typedef struct backends_t {
void *backend_state[MAX_BACKENDS];
} backends_t;
-/** Initalize each backend helper with the user input stored in <b>options</b>
+/** Initialize each backend helper with the user input stored in <b>options</b>
* and put the results in the <b>backends</b> struct. */
static int
init_backends(tor_fw_options_t *options, backends_t *backends)
@@ -94,13 +97,10 @@ usage(void)
{
fprintf(stderr, "tor-fw-helper usage:\n"
" [-h|--help]\n"
- " [-T|--Test]\n"
+ " [-T|--test-commandline]\n"
" [-v|--verbose]\n"
" [-g|--fetch-public-ip]\n"
- " -i|--internal-or-port [TCP port]\n"
- " [-e|--external-or-port [TCP port]]\n"
- " [-d|--internal-dir-port [TCP port]\n"
- " [-p|--external-dir-port [TCP port]]]\n");
+ " [-p|--forward-port ([<external port>]:<internal port>)]\n");
}
/** Log commandline options to a hardcoded file <b>tor-fw-helper.log</b> in the
@@ -125,7 +125,7 @@ log_commandline_options(int argc, char **argv)
if (retval < 0)
goto error;
- retval = fprintf(stdout, "ARG: %d: %s\n", i, argv[i]);
+ retval = fprintf(stderr, "ARG: %d: %s\n", i, argv[i]);
if (retval < 0)
goto error;
}
@@ -152,82 +152,141 @@ tor_fw_fetch_public_ip(tor_fw_options_t *tor_fw_options,
int r = 0;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: tor_fw_fetch_public_ip\n");
+ fprintf(stderr, "V: tor_fw_fetch_public_ip\n");
for (i=0; i<backends->n_backends; ++i) {
if (tor_fw_options->verbose) {
- fprintf(stdout, "V: running backend_state now: %i\n", i);
- fprintf(stdout, "V: size of backend state: %u\n",
+ fprintf(stderr, "V: running backend_state now: %i\n", i);
+ fprintf(stderr, "V: size of backend state: %u\n",
(int)(backends->backend_ops)[i].state_len);
- fprintf(stdout, "V: backend state name: %s\n",
+ fprintf(stderr, "V: backend state name: %s\n",
(char *)(backends->backend_ops)[i].name);
}
r = backends->backend_ops[i].fetch_public_ip(tor_fw_options,
backends->backend_state[i]);
- fprintf(stdout, "tor-fw-helper: tor_fw_fetch_public_ip backend %s "
+ fprintf(stderr, "tor-fw-helper: tor_fw_fetch_public_ip backend %s "
" returned: %i\n", (char *)(backends->backend_ops)[i].name, r);
}
}
-/** Iterate over each of the supported <b>backends</b> and attempt to add a
- * port forward for the OR port stored in <b>tor_fw_options</b>. */
+/** Print a spec-conformant string to stdout describing the results of
+ * the TCP port forwarding operation from <b>external_port</b> to
+ * <b>internal_port</b>. */
static void
-tor_fw_add_or_port(tor_fw_options_t *tor_fw_options,
- backends_t *backends)
+tor_fw_helper_report_port_fw_results(uint16_t internal_port,
+ uint16_t external_port,
+ int succeded,
+ const char *message)
+{
+ char *report_string = NULL;
+
+ tor_asprintf(&report_string, "%s %s %u %u %s %s\n",
+ "tor-fw-helper",
+ "tcp-forward",
+ external_port, internal_port,
+ succeded ? "SUCCESS" : "FAIL",
+ message);
+ fprintf(stdout, "%s", report_string);
+ fflush(stdout);
+ tor_free(report_string);
+}
+
+#define tor_fw_helper_report_port_fw_fail(i, e, m) \
+ tor_fw_helper_report_port_fw_results((i), (e), 0, (m))
+
+#define tor_fw_helper_report_port_fw_success(i, e, m) \
+ tor_fw_helper_report_port_fw_results((i), (e), 1, (m))
+
+/** Return a heap-allocated string containing the list of our
+ * backends. It can be used in log messages. Be sure to free it
+ * afterwards! */
+static char *
+get_list_of_backends_string(backends_t *backends)
{
+ char *backend_names = NULL;
int i;
- int r = 0;
+ smartlist_t *backend_names_sl = smartlist_new();
- if (tor_fw_options->verbose)
- fprintf(stdout, "V: tor_fw_add_or_port\n");
+ assert(backends->n_backends);
- for (i=0; i<backends->n_backends; ++i) {
- if (tor_fw_options->verbose) {
- fprintf(stdout, "V: running backend_state now: %i\n", i);
- fprintf(stdout, "V: size of backend state: %u\n",
- (int)(backends->backend_ops)[i].state_len);
- fprintf(stdout, "V: backend state name: %s\n",
- (const char *) backends->backend_ops[i].name);
- }
- r = backends->backend_ops[i].add_tcp_mapping(tor_fw_options,
- backends->backend_state[i]);
- fprintf(stdout, "tor-fw-helper: tor_fw_add_or_port backend %s "
- "returned: %i\n", (const char *) backends->backend_ops[i].name, r);
- }
+ for (i=0; i<backends->n_backends; ++i)
+ smartlist_add(backend_names_sl, (char *) backends->backend_ops[i].name);
+
+ backend_names = smartlist_join_strings(backend_names_sl, ", ", 0, NULL);
+ smartlist_free(backend_names_sl);
+
+ return backend_names;
}
/** Iterate over each of the supported <b>backends</b> and attempt to add a
- * port forward for the Dir port stored in <b>tor_fw_options</b>. */
+ * port forward for the port stored in <b>tor_fw_options</b>. */
static void
-tor_fw_add_dir_port(tor_fw_options_t *tor_fw_options,
- backends_t *backends)
+tor_fw_add_ports(tor_fw_options_t *tor_fw_options,
+ backends_t *backends)
{
int i;
int r = 0;
+ int succeeded = 0;
if (tor_fw_options->verbose)
- fprintf(stdout, "V: tor_fw_add_dir_port\n");
+ fprintf(stderr, "V: %s\n", __func__);
- for (i=0; i<backends->n_backends; ++i) {
- if (tor_fw_options->verbose) {
- fprintf(stdout, "V: running backend_state now: %i\n", i);
- fprintf(stdout, "V: size of backend state: %u\n",
- (int)(backends->backend_ops)[i].state_len);
- fprintf(stdout, "V: backend state name: %s\n",
- (char *)(backends->backend_ops)[i].name);
+ /** Loop all ports that need to be forwarded, and try to use our
+ * backends for each port. If a backend succeeds, break the loop,
+ * report success and get to the next port. If all backends fail,
+ * report failure for that port. */
+ SMARTLIST_FOREACH_BEGIN(tor_fw_options->ports_to_forward,
+ port_to_forward_t *, port_to_forward) {
+
+ succeeded = 0;
+
+ for (i=0; i<backends->n_backends; ++i) {
+ if (tor_fw_options->verbose) {
+ fprintf(stderr, "V: running backend_state now: %i\n", i);
+ fprintf(stderr, "V: size of backend state: %u\n",
+ (int)(backends->backend_ops)[i].state_len);
+ fprintf(stderr, "V: backend state name: %s\n",
+ (const char *) backends->backend_ops[i].name);
+ }
+
+ r =
+ backends->backend_ops[i].add_tcp_mapping(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ tor_fw_options->verbose,
+ backends->backend_state[i]);
+ if (r == 0) { /* backend success */
+ tor_fw_helper_report_port_fw_success(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ backends->backend_ops[i].name);
+ succeeded = 1;
+ break;
+ }
+
+ fprintf(stderr, "tor-fw-helper: tor_fw_add_port backend %s "
+ "returned: %i\n",
+ (const char *) backends->backend_ops[i].name, r);
}
- r = backends->backend_ops[i].add_tcp_mapping(tor_fw_options,
- backends->backend_state[i]);
- fprintf(stdout, "tor-fw-helper: tor_fw_add_dir_port backend %s "
- "returned: %i\n", (const char *)backends->backend_ops[i].name, r);
- }
+
+ if (!succeeded) { /* all backends failed */
+ char *list_of_backends_str = get_list_of_backends_string(backends);
+ char *fail_msg = NULL;
+ tor_asprintf(&fail_msg, "All port forwarding backends (%s) failed.",
+ list_of_backends_str);
+ tor_fw_helper_report_port_fw_fail(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ fail_msg);
+ tor_free(list_of_backends_str);
+ tor_free(fail_msg);
+ }
+
+ } SMARTLIST_FOREACH_END(port_to_forward);
}
/** Called before we make any calls to network-related functions.
* (Some operating systems require their network libraries to be
* initialized.) (from common/compat.c) */
static int
-network_init(void)
+tor_fw_helper_network_init(void)
{
#ifdef _WIN32
/* This silly exercise is necessary before windows will allow
@@ -247,6 +306,67 @@ network_init(void)
return 0;
}
+/** Parse the '-p' argument of tor-fw-helper. Its format is
+ * [<external port>]:<internal port>, and <external port> is optional.
+ * Return NULL if <b>arg</b> was c0rrupted. */
+static port_to_forward_t *
+parse_port(const char *arg)
+{
+ smartlist_t *sl = smartlist_new();
+ port_to_forward_t *port_to_forward = NULL;
+ char *port_str = NULL;
+ int ok;
+ int port;
+
+ smartlist_split_string(sl, arg, ":", 0, 0);
+ if (smartlist_len(sl) != 2)
+ goto err;
+
+ port_to_forward = tor_malloc(sizeof(port_to_forward_t));
+ if (!port_to_forward)
+ goto err;
+
+ port_str = smartlist_get(sl, 0); /* macroify ? */
+ port = (int)tor_parse_long(port_str, 10, 1, 65535, &ok, NULL);
+ if (!ok && strlen(port_str)) /* ":1555" is valid */
+ goto err;
+ port_to_forward->external_port = port;
+
+ port_str = smartlist_get(sl, 1);
+ port = (int)tor_parse_long(port_str, 10, 1, 65535, &ok, NULL);
+ if (!ok)
+ goto err;
+ port_to_forward->internal_port = port;
+
+ goto done;
+
+ err:
+ tor_free(port_to_forward);
+
+ done:
+ SMARTLIST_FOREACH(sl, char *, cp, tor_free(cp));
+ smartlist_free(sl);
+
+ return port_to_forward;
+}
+
+/** Report a failure of epic proportions: We didn't manage to
+ * initialize any port forwarding backends. */
+static void
+report_full_fail(const smartlist_t *ports_to_forward)
+{
+ if (!ports_to_forward)
+ return;
+
+ SMARTLIST_FOREACH_BEGIN(ports_to_forward,
+ const port_to_forward_t *, port_to_forward) {
+ tor_fw_helper_report_port_fw_fail(port_to_forward->internal_port,
+ port_to_forward->external_port,
+ "All backends (NAT-PMP, UPnP) failed "
+ "to initialize!"); /* XXX hardcoded */
+ } SMARTLIST_FOREACH_END(port_to_forward);
+}
+
int
main(int argc, char **argv)
{
@@ -259,22 +379,20 @@ main(int argc, char **argv)
memset(&tor_fw_options, 0, sizeof(tor_fw_options));
memset(&backend_state, 0, sizeof(backend_state));
+ // Parse CLI arguments.
while (1) {
int option_index = 0;
static struct option long_options[] =
{
{"verbose", 0, 0, 'v'},
{"help", 0, 0, 'h'},
- {"internal-or-port", 1, 0, 'i'},
- {"external-or-port", 1, 0, 'e'},
- {"internal-dir-port", 1, 0, 'd'},
- {"external-dir-port", 1, 0, 'p'},
+ {"port", 1, 0, 'p'},
{"fetch-public-ip", 0, 0, 'g'},
{"test-commandline", 0, 0, 'T'},
{0, 0, 0, 0}
};
- c = getopt_long(argc, argv, "vhi:e:d:p:gT",
+ c = getopt_long(argc, argv, "vhp:gT",
long_options, &option_index);
if (c == -1)
break;
@@ -282,14 +400,31 @@ main(int argc, char **argv)
switch (c) {
case 'v': tor_fw_options.verbose = 1; break;
case 'h': tor_fw_options.help = 1; usage(); exit(1); break;
- case 'i': sscanf(optarg, "%hu", &tor_fw_options.private_or_port);
- break;
- case 'e': sscanf(optarg, "%hu", &tor_fw_options.public_or_port);
- break;
- case 'd': sscanf(optarg, "%hu", &tor_fw_options.private_dir_port);
- break;
- case 'p': sscanf(optarg, "%hu", &tor_fw_options.public_dir_port);
+ case 'p': {
+ port_to_forward_t *port_to_forward = parse_port(optarg);
+ if (!port_to_forward) {
+ fprintf(stderr, "E: Failed to parse '%s'.\n", optarg);
+ usage();
+ exit(1);
+ }
+
+ /* If no external port was given (it's optional), set it to be
+ * equal with the internal port. */
+ if (!port_to_forward->external_port) {
+ assert(port_to_forward->internal_port);
+ if (tor_fw_options.verbose)
+ fprintf(stderr, "V: No external port was given. Setting to %u.\n",
+ port_to_forward->internal_port);
+ port_to_forward->external_port = port_to_forward->internal_port;
+ }
+
+ if (!tor_fw_options.ports_to_forward)
+ tor_fw_options.ports_to_forward = smartlist_new();
+
+ smartlist_add(tor_fw_options.ports_to_forward, port_to_forward);
+
break;
+ }
case 'g': tor_fw_options.fetch_public_ip = 1; break;
case 'T': tor_fw_options.test_commandline = 1; break;
case '?': break;
@@ -297,100 +432,70 @@ main(int argc, char **argv)
}
}
- if (tor_fw_options.verbose) {
- fprintf(stderr, "V: tor-fw-helper version %s\n"
- "V: We were called with the following arguments:\n"
- "V: verbose = %d, help = %d, pub or port = %u, "
- "priv or port = %u\n"
- "V: pub dir port = %u, priv dir port = %u\n"
- "V: fetch_public_ip = %u\n",
- tor_fw_version, tor_fw_options.verbose, tor_fw_options.help,
- tor_fw_options.private_or_port, tor_fw_options.public_or_port,
- tor_fw_options.private_dir_port, tor_fw_options.public_dir_port,
- tor_fw_options.fetch_public_ip);
+ { // Verbose output
+
+ if (tor_fw_options.verbose)
+ fprintf(stderr, "V: tor-fw-helper version %s\n"
+ "V: We were called with the following arguments:\n"
+ "V: verbose = %d, help = %d, fetch_public_ip = %u\n",
+ tor_fw_version, tor_fw_options.verbose, tor_fw_options.help,
+ tor_fw_options.fetch_public_ip);
+
+ if (tor_fw_options.verbose && tor_fw_options.ports_to_forward) {
+ fprintf(stderr, "V: TCP forwarding:\n");
+ SMARTLIST_FOREACH(tor_fw_options.ports_to_forward,
+ const port_to_forward_t *, port_to_forward,
+ fprintf(stderr, "V: External: %u, Internal: %u\n",
+ port_to_forward->external_port,
+ port_to_forward->internal_port));
+ }
}
if (tor_fw_options.test_commandline) {
return log_commandline_options(argc, argv);
}
- /* At the very least, we require an ORPort;
- Given a private ORPort, we can ask for a mapping that matches the port
- externally.
- */
- if (!tor_fw_options.private_or_port && !tor_fw_options.fetch_public_ip) {
- fprintf(stderr, "E: We require an ORPort or fetch_public_ip"
- " request!\n");
+ // See if the user actually wants us to do something.
+ if (!tor_fw_options.fetch_public_ip && !tor_fw_options.ports_to_forward) {
+ fprintf(stderr, "E: We require a port to be forwarded or "
+ "fetch_public_ip request!\n");
usage();
exit(1);
- } else {
- /* When we only have one ORPort, internal/external are
- set to be the same.*/
- if (!tor_fw_options.public_or_port && tor_fw_options.private_or_port) {
- if (tor_fw_options.verbose)
- fprintf(stdout, "V: We're setting public_or_port = "
- "private_or_port.\n");
- tor_fw_options.public_or_port = tor_fw_options.private_or_port;
- }
- }
- if (!tor_fw_options.private_dir_port) {
- if (tor_fw_options.verbose)
- fprintf(stdout, "V: We have no DirPort; no hole punching for "
- "DirPorts\n");
-
- } else {
- /* When we only have one DirPort, internal/external are
- set to be the same.*/
- if (!tor_fw_options.public_dir_port && tor_fw_options.private_dir_port) {
- if (tor_fw_options.verbose)
- fprintf(stdout, "V: We're setting public_or_port = "
- "private_or_port.\n");
-
- tor_fw_options.public_dir_port = tor_fw_options.private_dir_port;
- }
- }
-
- if (tor_fw_options.verbose) {
- fprintf(stdout, "V: pub or port = %u, priv or port = %u\n"
- "V: pub dir port = %u, priv dir port = %u\n",
- tor_fw_options.private_or_port, tor_fw_options.public_or_port,
- tor_fw_options.private_dir_port,
- tor_fw_options.public_dir_port);
}
// Initialize networking
- if (network_init())
+ if (tor_fw_helper_network_init())
exit(1);
// Initalize the various fw-helper backend helpers
r = init_backends(&tor_fw_options, &backend_state);
- if (r)
- printf("tor-fw-helper: %i NAT traversal helper(s) loaded\n", r);
-
- if (tor_fw_options.fetch_public_ip) {
- tor_fw_fetch_public_ip(&tor_fw_options, &backend_state);
+ if (!r) { // all backends failed:
+ // report our failure
+ report_full_fail(tor_fw_options.ports_to_forward);
+ fprintf(stderr, "tor-fw-helper: All backends failed.\n");
+ exit(1);
+ } else { // some backends succeeded:
+ fprintf(stderr, "tor-fw-helper: %i NAT traversal helper(s) loaded\n", r);
}
- if (tor_fw_options.private_or_port) {
- tor_fw_options.internal_port = tor_fw_options.private_or_port;
- tor_fw_options.external_port = tor_fw_options.private_or_port;
- tor_fw_add_or_port(&tor_fw_options, &backend_state);
+ // Forward TCP ports.
+ if (tor_fw_options.ports_to_forward) {
+ tor_fw_add_ports(&tor_fw_options, &backend_state);
}
- if (tor_fw_options.private_dir_port) {
- tor_fw_options.internal_port = tor_fw_options.private_dir_port;
- tor_fw_options.external_port = tor_fw_options.private_dir_port;
- tor_fw_add_dir_port(&tor_fw_options, &backend_state);
+ // Fetch our public IP.
+ if (tor_fw_options.fetch_public_ip) {
+ tor_fw_fetch_public_ip(&tor_fw_options, &backend_state);
}
- r = (((tor_fw_options.nat_pmp_status | tor_fw_options.upnp_status)
- |tor_fw_options.public_ip_status));
- if (r > 0) {
- fprintf(stdout, "tor-fw-helper: SUCCESS\n");
- } else {
- fprintf(stderr, "tor-fw-helper: FAILURE\n");
+ // Cleanup and exit.
+ if (tor_fw_options.ports_to_forward) {
+ SMARTLIST_FOREACH(tor_fw_options.ports_to_forward,
+ port_to_forward_t *, port,
+ tor_free(port));
+ smartlist_free(tor_fw_options.ports_to_forward);
}
- exit(r);
+ exit(0);
}
diff --git a/src/tools/tor-fw-helper/tor-fw-helper.h b/src/tools/tor-fw-helper/tor-fw-helper.h
index 058afc4e0..0b0d17993 100644
--- a/src/tools/tor-fw-helper/tor-fw-helper.h
+++ b/src/tools/tor-fw-helper/tor-fw-helper.h
@@ -1,5 +1,5 @@
/* Copyright (c) 2010, Jacob Appelbaum, Steven J. Murdoch.
- * Copyright (c) 2010-2012, The Tor Project, Inc. */
+ * Copyright (c) 2010-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
/**
@@ -7,8 +7,8 @@
* \brief The main header for our firewall helper.
**/
-#ifndef _TOR_FW_HELPER_H
-#define _TOR_FW_HELPER_H
+#ifndef TOR_TOR_FW_HELPER_H
+#define TOR_TOR_FW_HELPER_H
#include <stdint.h>
#include <stdio.h>
@@ -17,24 +17,26 @@
#include <time.h>
/** The current version of tor-fw-helper. */
-#define tor_fw_version "0.1"
+#define tor_fw_version "0.2"
/** This is an arbitrary hard limit - We currently have two (NAT-PMP and UPnP).
We're likely going to add the Intel UPnP library but nothing else comes to
mind at the moment. */
#define MAX_BACKENDS 23
+/** Forward traffic received in port <b>external_port</b> in the
+ * external side of our NAT to <b>internal_port</b> in this host. */
+typedef struct {
+ uint16_t external_port;
+ uint16_t internal_port;
+} port_to_forward_t;
+
/** This is where we store parsed commandline options. */
typedef struct {
int verbose;
int help;
int test_commandline;
- uint16_t private_dir_port;
- uint16_t private_or_port;
- uint16_t public_dir_port;
- uint16_t public_or_port;
- uint16_t internal_port;
- uint16_t external_port;
+ struct smartlist_t *ports_to_forward;
int fetch_public_ip;
int nat_pmp_status;
int upnp_status;
@@ -50,8 +52,8 @@ typedef struct tor_fw_backend_t {
int (*init)(tor_fw_options_t *options, void *backend_state);
int (*cleanup)(tor_fw_options_t *options, void *backend_state);
int (*fetch_public_ip)(tor_fw_options_t *options, void *backend_state);
- int (*add_tcp_mapping)(tor_fw_options_t *options, void *backend_state);
+ int (*add_tcp_mapping)(uint16_t internal_port, uint16_t external_port,
+ int is_verbose, void *backend_state);
} tor_fw_backend_t;
-
#endif
diff --git a/src/tools/tor-gencert.c b/src/tools/tor-gencert.c
index c7ab8dc61..e799df5ca 100644
--- a/src/tools/tor-gencert.c
+++ b/src/tools/tor-gencert.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2007-2012, The Tor Project, Inc. */
+/* Copyright (c) 2007-2013, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#include "orconfig.h"
@@ -27,8 +27,6 @@
#include <assert.h>
#endif
-#define CRYPTO_PRIVATE
-
#include "compat.h"
#include "../common/util.h"
#include "../common/torlog.h"
@@ -36,7 +34,7 @@
#include "address.h"
#define IDENTITY_KEY_BITS 3072
-#define SIGNING_KEY_BITS 1024
+#define SIGNING_KEY_BITS 2048
#define DEFAULT_LIFETIME 12
/* These globals are set via command line options. */
@@ -82,10 +80,11 @@ crypto_log_errors(int severity, const char *doing)
if (!lib) lib = "(null)";
if (!func) func = "(null)";
if (doing) {
- log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
- doing, msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error while %s: %s (in %s:%s)",
+ doing, msg, lib, func);
} else {
- log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)", msg, lib, func);
+ tor_log(severity, LD_CRYPTO, "crypto error: %s (in %s:%s)",
+ msg, lib, func);
}
}
}
@@ -227,7 +226,7 @@ generate_key(int bits)
crypto_pk_t *env = crypto_pk_new();
if (crypto_pk_generate_key_with_bits(env,bits)<0)
goto done;
- rsa = _crypto_pk_get_rsa(env);
+ rsa = crypto_pk_get_rsa_(env);
rsa = RSAPrivateKey_dup(rsa);
done:
crypto_pk_free(env);
@@ -303,6 +302,7 @@ load_identity_key(void)
if (!identity_key) {
log_err(LD_GENERAL, "Couldn't read identity key from %s",
identity_key_file);
+ fclose(f);
return 1;
}
fclose(f);
@@ -323,6 +323,7 @@ load_signing_key(void)
}
if (!(signing_key = PEM_read_PrivateKey(f, NULL, NULL, NULL))) {
log_err(LD_GENERAL, "Couldn't read siging key from %s", signing_key_file);
+ fclose(f);
return 1;
}
fclose(f);
@@ -401,7 +402,7 @@ static int
get_fingerprint(EVP_PKEY *pkey, char *out)
{
int r = 1;
- crypto_pk_t *pk = _crypto_new_pk_from_rsa(EVP_PKEY_get1_RSA(pkey));
+ crypto_pk_t *pk = crypto_new_pk_from_rsa_(EVP_PKEY_get1_RSA(pkey));
if (pk) {
r = crypto_pk_get_fingerprint(pk, out, 0);
crypto_pk_free(pk);
@@ -414,7 +415,7 @@ static int
get_digest(EVP_PKEY *pkey, char *out)
{
int r = 1;
- crypto_pk_t *pk = _crypto_new_pk_from_rsa(EVP_PKEY_get1_RSA(pkey));
+ crypto_pk_t *pk = crypto_new_pk_from_rsa_(EVP_PKEY_get1_RSA(pkey));
if (pk) {
r = crypto_pk_get_digest(pk, out);
crypto_pk_free(pk);
@@ -548,6 +549,9 @@ main(int argc, char **argv)
if (signing_key)
EVP_PKEY_free(signing_key);
tor_free(address);
+ tor_free(identity_key_file);
+ tor_free(signing_key_file);
+ tor_free(certificate_file);
crypto_global_cleanup();
return r;
diff --git a/src/tools/tor-resolve.c b/src/tools/tor-resolve.c
index 4ef84f491..306f6c66a 100644
--- a/src/tools/tor-resolve.c
+++ b/src/tools/tor-resolve.c
@@ -1,10 +1,9 @@
/* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson
- * Copyright (c) 2007-2012, The Tor Project, Inc.
+ * Copyright (c) 2007-2013, The Tor Project, Inc.
*/
/* See LICENSE for licensing information */
#include "orconfig.h"
-
#include "compat.h"
#include "../common/util.h"
#include "address.h"
@@ -74,23 +73,29 @@ build_socks_resolve_request(char **out,
memcpy((*out)+8+strlen(username)+1, hostname, strlen(hostname)+1);
} else if (version == 5) {
int is_ip_address;
- struct in_addr in;
+ tor_addr_t addr;
size_t addrlen;
- is_ip_address = tor_inet_aton(hostname, &in);
+ int ipv6;
+ is_ip_address = tor_addr_parse(&addr, hostname) != -1;
if (!is_ip_address && reverse) {
log_err(LD_GENERAL, "Tried to do a reverse lookup on a non-IP!");
return -1;
}
- addrlen = reverse ? 4 : 1 + strlen(hostname);
+ ipv6 = reverse && tor_addr_family(&addr) == AF_INET6;
+ addrlen = reverse ? (ipv6 ? 16 : 4) : 1 + strlen(hostname);
len = 6 + addrlen;
*out = tor_malloc(len);
(*out)[0] = 5; /* SOCKS version 5 */
(*out)[1] = reverse ? '\xF1' : '\xF0'; /* RESOLVE_PTR or RESOLVE */
(*out)[2] = 0; /* reserved. */
- (*out)[3] = reverse ? 1 : 3;
if (reverse) {
- set_uint32((*out)+4, in.s_addr);
+ (*out)[3] = ipv6 ? 4 : 1;
+ if (ipv6)
+ memcpy((*out)+4, tor_addr_to_in6_addr8(&addr), 16);
+ else
+ set_uint32((*out)+4, tor_addr_to_ipv4n(&addr));
} else {
+ (*out)[3] = 3;
(*out)[4] = (char)(uint8_t)(addrlen - 1);
memcpy((*out)+5, hostname, addrlen - 1);
}
@@ -109,7 +114,7 @@ build_socks_resolve_request(char **out,
static int
parse_socks4a_resolve_response(const char *hostname,
const char *response, size_t len,
- uint32_t *addr_out)
+ tor_addr_t *addr_out)
{
uint8_t status;
tor_assert(response);
@@ -140,7 +145,7 @@ parse_socks4a_resolve_response(const char *hostname,
return -1;
}
- *addr_out = ntohl(get_uint32(response+4));
+ tor_addr_from_ipv4n(addr_out, get_uint32(response+4));
return 0;
}
@@ -179,9 +184,9 @@ socks5_reason_to_string(char reason)
static int
do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
int reverse, int version,
- uint32_t *result_addr, char **result_hostname)
+ tor_addr_t *result_addr, char **result_hostname)
{
- int s;
+ int s = -1;
struct sockaddr_in socksaddr;
char *req = NULL;
ssize_t len = 0;
@@ -190,7 +195,7 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
tor_assert(result_addr);
tor_assert(version == 4 || version == 5);
- *result_addr = 0;
+ tor_addr_make_unspec(result_addr);
*result_hostname = NULL;
s = tor_open_socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
@@ -205,28 +210,28 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
socksaddr.sin_addr.s_addr = htonl(sockshost);
if (connect(s, (struct sockaddr*)&socksaddr, sizeof(socksaddr))) {
log_sock_error("connecting to SOCKS host", s);
- return -1;
+ goto err;
}
if (version == 5) {
char method_buf[2];
if (write_all(s, "\x05\x01\x00", 3, 1) != 3) {
log_err(LD_NET, "Error sending SOCKS5 method list.");
- return -1;
+ goto err;
}
if (read_all(s, method_buf, 2, 1) != 2) {
log_err(LD_NET, "Error reading SOCKS5 methods.");
- return -1;
+ goto err;
}
if (method_buf[0] != '\x05') {
log_err(LD_NET, "Unrecognized socks version: %u",
(unsigned)method_buf[0]);
- return -1;
+ goto err;
}
if (method_buf[1] != '\x00') {
log_err(LD_NET, "Unrecognized socks authentication method: %u",
(unsigned)method_buf[1]);
- return -1;
+ goto err;
}
}
@@ -234,12 +239,12 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
version))<0) {
log_err(LD_BUG,"Error generating SOCKS request");
tor_assert(!req);
- return -1;
+ goto err;
}
if (write_all(s, req, len, 1) != len) {
log_sock_error("sending SOCKS request", s);
tor_free(req);
- return -1;
+ goto err;
}
tor_free(req);
@@ -247,22 +252,22 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
char reply_buf[RESPONSE_LEN_4];
if (read_all(s, reply_buf, RESPONSE_LEN_4, 1) != RESPONSE_LEN_4) {
log_err(LD_NET, "Error reading SOCKS4 response.");
- return -1;
+ goto err;
}
if (parse_socks4a_resolve_response(hostname,
reply_buf, RESPONSE_LEN_4,
result_addr)<0) {
- return -1;
+ goto err;
}
} else {
- char reply_buf[4];
+ char reply_buf[16];
if (read_all(s, reply_buf, 4, 1) != 4) {
log_err(LD_NET, "Error reading SOCKS5 response.");
- return -1;
+ goto err;
}
if (reply_buf[0] != 5) {
log_err(LD_NET, "Bad SOCKS5 reply version.");
- return -1;
+ goto err;
}
/* Give a user some useful feedback about SOCKS5 errors */
if (reply_buf[1] != 0) {
@@ -276,32 +281,44 @@ do_resolve(const char *hostname, uint32_t sockshost, uint16_t socksport,
"to Tor; we suggest an application that uses SOCKS 4a.",
hostname);
}
- return -1;
+ goto err;
}
if (reply_buf[3] == 1) {
/* IPv4 address */
if (read_all(s, reply_buf, 4, 1) != 4) {
log_err(LD_NET, "Error reading address in socks5 response.");
- return -1;
+ goto err;
+ }
+ tor_addr_from_ipv4n(result_addr, get_uint32(reply_buf));
+ } else if (reply_buf[3] == 4) {
+ /* IPv6 address */
+ if (read_all(s, reply_buf, 16, 1) != 16) {
+ log_err(LD_NET, "Error reading address in socks5 response.");
+ goto err;
}
- *result_addr = ntohl(get_uint32(reply_buf));
+ tor_addr_from_ipv6_bytes(result_addr, reply_buf);
} else if (reply_buf[3] == 3) {
+ /* Domain name */
size_t result_len;
if (read_all(s, reply_buf, 1, 1) != 1) {
log_err(LD_NET, "Error reading address_length in socks5 response.");
- return -1;
+ goto err;
}
result_len = *(uint8_t*)(reply_buf);
*result_hostname = tor_malloc(result_len+1);
if (read_all(s, *result_hostname, result_len, 1) != (int) result_len) {
log_err(LD_NET, "Error reading hostname in socks5 response.");
- return -1;
+ goto err;
}
(*result_hostname)[result_len] = '\0';
}
}
+ tor_close_socket(s);
return 0;
+ err:
+ tor_close_socket(s);
+ return -1;
}
/** Print a usage message and exit. */
@@ -322,10 +339,8 @@ main(int argc, char **argv)
int isSocks4 = 0, isVerbose = 0, isReverse = 0;
char **arg;
int n_args;
- struct in_addr a;
- uint32_t result = 0;
+ tor_addr_t result;
char *result_hostname = NULL;
- char buf[INET_NTOA_BUF_LEN];
log_severity_list_t *s = tor_malloc_zero(sizeof(log_severity_list_t));
init_logging();
@@ -423,9 +438,7 @@ main(int argc, char **argv)
if (result_hostname) {
printf("%s\n", result_hostname);
} else {
- a.s_addr = htonl(result);
- tor_inet_ntoa(&a, buf, sizeof(buf));
- printf("%s\n", buf);
+ printf("%s\n", fmt_addr(&result));
}
return 0;
}
diff --git a/src/win32/Makefile.am b/src/win32/Makefile.am
deleted file mode 100644
index 7f5d74248..000000000
--- a/src/win32/Makefile.am
+++ /dev/null
@@ -1,3 +0,0 @@
-
-EXTRA_DIST = orconfig.h
-
diff --git a/src/win32/include.am b/src/win32/include.am
new file mode 100644
index 000000000..dad59af3a
--- /dev/null
+++ b/src/win32/include.am
@@ -0,0 +1,3 @@
+
+EXTRA_DIST+= src/win32/orconfig.h
+
diff --git a/src/win32/orconfig.h b/src/win32/orconfig.h
index d780d5d73..7b5877cf9 100644
--- a/src/win32/orconfig.h
+++ b/src/win32/orconfig.h
@@ -145,9 +145,15 @@
/* Define to 1 if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H
+/* Define to 1 if you have the `_vscprintf' function. */
+#define HAVE__VSCPRINTF 1
+
/* Define to 1 iff NULL is represented by a 0 in memory. */
#define NULL_REP_IS_ZERO_BYTES 1
+/* Define to 1 iff memset(0) sets doubles to 0.0 */
+#define DOUBLE_0_REP_IS_ZERO_BYTES 1
+
/* Name of package */
#define PACKAGE "tor"
@@ -190,6 +196,9 @@
/* The size of a `long long', as computed by sizeof. */
#undef SIZEOF_LONG_LONG
+/* The size of `pid_t', as computed by sizeof. */
+#define SIZEOF_PID_T 0
+
/* The size of a `short', as computed by sizeof. */
#define SIZEOF_SHORT 2
@@ -232,7 +241,7 @@
#define USING_TWOS_COMPLEMENT
/* Version number of package */
-#define VERSION "0.2.3.18-rc-dev"
+#define VERSION "0.2.5.4-alpha-dev"
@@ -242,3 +251,9 @@
#define FLEXIBLE_ARRAY_MEMBER 0
#define HAVE_EVENT2_EVENT_H
#define SHARE_DATADIR ""
+#define HAVE_EVENT2_DNS_H
+#define HAVE_EVENT_BASE_LOOPEXIT
+#define CURVE25519_ENABLED
+#define USE_CURVE25519_DONNA
+
+#define ENUM_VALS_ARE_SIGNED 1